西门子洗碗机SN23E831TI排水泵故障维修

最近家里的西门子洗碗机不工作了,故障表现就是洗碗不结束,面板上的进水龙头指示灯闪烁,永远不结束。仔细观察,触摸洗碗机,会发现洗碗机外部凉凉的,不加热。洗碗中途打开柜门,里面没有温度。只要没有温度,大概率故障原因就是加热模块损坏。

继续阅读西门子洗碗机SN23E831TI排水泵故障维修

访问github.com被解析到127.0.0.1问题解决

最近访问 github,发现总是访问失败。经过排查后确认问题原因是 DNS 解析被污染导致 github.com 被解析到 127.0.0.1 导致的。

如下图:

解决方案:

1、指定DNS为其他知名DNS服务器:如1.1.1.1,8.8.8.8, 114.114.114.114等;

2、添加hosts文件记录,将github的ip地址增加进去。

参考链接


H3CBook Pro 14 G2合盖睡眠导致指纹解锁不可用M2硬盘丢失问题

公司新发的 H3CBook Pro 14 G2 使用了 Intel i7 1360P 当前 BIOS 版本号 F.11 版本日期 12/27/2024 。机器自带内存 16GB,感觉不大够用。到手之后,买了一个新的 32GB DDR5 内存,顺手插上了老电脑上替换下来的一个 Intel M2 固态硬盘。默认情况下合盖会进入自动睡眠状态。重新打开盖子,指纹解锁不可用,进入系统之后,新增的 M2 硬盘丢失。重启系统后可以恢复。

跟客服也沟通了一下,目前暂时没有新的 BIOS 版本发布。目前的解决方案就是在 Windows 11 的电源设置里面关闭合盖 “睡眠” 选项,全部设置为 “休眠”。

OpenGrok升级到1.14.4版本后在首页报错 "Method not found: class org.opengrok.web.PageConfig.getRelativePath"

OpenGrok升级到1.14.4版本后,在首页报错,如下:

继续阅读OpenGrok升级到1.14.4版本后在首页报错 "Method not found: class org.opengrok.web.PageConfig.getRelativePath"

API 版本迭代,怎么进行 API 多版本处理?

API 版本迭代是在软件开发过程中非常常见的一种需求,尤其对于 Web API 来说,随着业务需求的不断变化和技术的发展,API 的版本迭代变得愈发重要。API 版本迭代的目的是为了满足不断变化的业务需求、修复缺陷和改进功能,同时保持向后兼容性。然而,随着多个版本的 API 共存,如何进行多版本处理成为了必不可少的问题。

为什么需要进行版本迭代?
  1. 向后兼容性:在引入新功能或修改现有功能的同时,应该尽可能保持与现有版本的 API 的兼容,避免对已有客户端和应用程序的影响。
  2. 兼容性测试:为了确保新版本 API 的稳定性,需要进行兼容性测试。可以通过多版本处理来降低测试的成本和风险。
  3. 用户体验:通过多版本处理来提供更好的用户体验,向用户和开发者提供更多的选择和灵活性,使其能够逐步升级到新版本而不会影响其业务。
    因此,API 多版本处理对于确保系统的稳定性、提高开发效率和用户体验至关重要。
常见的 API 迭代模式

API 版本迭代需要进行版本控制,以便开发者和用户能清晰地了解各个版本之间的差异和兼容性情况。常见的 API 版本迭代模式包括语义版本控制(Semantic Versioning),它是一种广泛应用于软件开发领域的版本号命名规范。

语义版本控制将版本号分为主版本号、次版本号和修订号三个部分,分别代表了不同层次的变化:

  • 主版本号:当你做了不兼容的 API 修改时,需要升级主版本号。
  • 次版本号:当你做了向下兼容的功能性新增时,需要升级次版本号。
  • 修订号:当你做了向下兼容的问题修正时,需要升级修订号。
    语义版本控制的优点在于,通过版本号的规范化命名,能够清晰地表达版本之间的关系和变化。开发者和用户可以根据版本号了解这个版本带来了什么样的变化,以及对其现有应用的影响。这有助于提高版本变更的可预测性和透明度。

多版本处理的挑战

多版本处理是 API 设计中常见的问题之一。当 API 需要支持多个版本时,可能会遇到以下挑战:

  • 兼容性:不同版本的 API 可能存在不兼容的情况,导致客户端无法访问或使用所需版本的 API。
  • 功能冲突:不同版本的 API 可能包含不同的功能,导致客户端在使用不同版本的 API 时遇到功能冲突。
  • 对用户的影响:API 版本的变化可能会对用户的使用体验产生影响,例如用户需要升级客户端软件或重新学习如何使用 API。
  • 对开发者的影响:API 版本的变化可能会给开发者带来额外的开发和维护工作,例如开发者需要维护多个版本的 API 文档和代码库。
解决方案一:URI 版本控制

URI 版本控制是一种通过在 API 的 URI 中包含版本号来区分不同版本的 API 的方法。这种方法简单易懂,并且支持大部分客户端工具。

解决方案 URI 版本控制
概念 API 版本作为 URI 的一部分,如/api/v1/users表示第一个版本,/api/v2/users表示第二个版本。客户端通过在请求中指定 URI 版本号选择 API 版本。
优点
简单易懂:概念直观,易于理解。
  广泛支持:得到大部分客户端工具支持,包括浏览器、HTTP 客户端库和 RESTful API 框架。
  独立部署:不同 API 版本可独立部署,有利于开发和维护。
缺点 冗长:每个 URI 中包含版本号导致 URI 冗长。
  版本冲突:存在不同 API 版本时可能发生冲突,导致客户端无法访问所需版本。
  难以发现:URI 中包含版本号可能使客户端难以发现新 API 版本。
适用场景 API 版本较少且不经常更新。
  客户端工具支持 URI 版本控制。
  API 需要与多种客户端工具兼容。
解决方案二:标头版本控制

标头版本控制是一种通过在请求头中包含版本号来区分不同版本的 API 的方法。这种方法与 URI 版本控制相似,但更加灵活,并且可以支持更多类型的客户端工具。

解决方案 标头版本控制
概念 API 版本作为请求头的一部分,例如,使用Accept: application/json; version=2表示客户端请求使用 API 的第二个版本。服务器根据请求头中的版本号选择 API 版本。
优点 灵活:更加灵活,支持多种客户端工具,包括浏览器、HTTP 客户端库和 RESTful API 框架。
  版本独立:与 URI 无关,不同 API 版本可以在同一个 URI 上部署。
  易于发现:通过请求头可以发现新的 API 版本。
缺点 复杂性:概念较复杂,可能需要客户端工具特殊处理。
  兼容性:需要客户端工具支持,否则无法使用。
  性能:可能影响性能,因为服务器需要额外处理请求头。
适用场景 API 版本较多且经常更新。
 
客户端工具支持标头版本控制。
  API 需要与多种类型的客户端工具兼容。
解决方案三:内容协商

内容协商是一种根据客户端的需求动态选择合适的 API 版本的机制。这种机制允许客户端在请求中指定它支持的 API 版本,然后服务器根据客户端支持的版本选择要使用的 API 版本。

解决方案 内容协商
概念 根据客户端需求动态选择合适的 API 版本,通过 HTTP 协议中的Accept和Content-Type请求头指定客户端支持的版本和内容类型。服务器根据请求头信息选择 API 版本和内容类型。
优点 动态选择:允许客户端动态选择合适的 API 版本,更容易适应客户端需求。
  兼容性:允许客户端使用不同的 API 版本,提高 API 兼容性。
  性能:提高性能,服务器可以根据客户端需求选择最合适的 API 版本和内容类型。
缺点 复杂性:概念较复杂,需要客户端工具和服务器特殊处理。
  兼容性:需要客户端工具和服务器都支持内容协商,否则无法使用。
适用场景 API 版本较多且经常更新。
  客户端工具和服务器都支持内容协商。
  API 需要与多种类型的客户端工具兼容。
通过 Apifox 进行版本控制

Apifox 是一个集接口文档、API 调试、自动化测试、Mock 服务等功能于一体的综合 API 开发协作工具。Apifox = Postman + Swagger + Mock + JMeter,Apifox 支持调试 http(s)、WebSocket、Socket、gRPC、Dubbo 等协议的接口,并且集成了 IDEA 插件

原始链接


API 版本迭代,怎么进行 API 多版本处理?

macOS 26 系统如何在聚焦搜索中不显示 iPhone App

在 macOS 26 系统中,Apple 增强了「聚焦搜索」(Spotlight)的功能。如果你启用了 iPhone 镜像,系统会自动将 iPhone 上的应用程序同步到 Mac 的聚焦搜索结果中,方便直接在 Mac 上快速启动或查找。

如下图:

继续阅读macOS 26 系统如何在聚焦搜索中不显示 iPhone App

商用密码32款认证产品、功能及认证依据详细介绍

为贯彻落实《中华人民共和国密码法》,建立完善商用密码产品认证体系,市场监管总局、国家密码管理局根据《国家密码管理局  市场监管总局关于调整商用密码产品管理方式的公告》(第39号)分别于2020年、2022年及2025年连续发布三次商用密码产品目录,相关商用密码认证检测均依据此目录进行产品检测、认证。

以下是截止2025年3月27日,全量商用密码产品门类/目录,看看哪些是大家所了解和擅长的密码产品,具体如下:

第一批商用密码产品名录

市场监管总局 国家密码管理局于2020年5月11日发布《商用密码产品认证目录(第一批)》,具体如下:

1、智能密码钥匙  

  • 产品名称:智能密码钥匙  
  • 功能描述:实现密码运算、密钥管理功能的终端密码设备,一般使用 USB 接口形态。  
  • 认证依据:  

1)GM/T 0027《智能密码钥匙技术规范》  

2)GM/T 0028《密码模块安全技术要求》

2、智能 IC 卡

  • 产品名称:智能 IC 卡  
  • 功能描述:实现密码运算和密钥管理功能的含 CPU 的集成电路卡,包括应用于金融等行业领域的智能 IC 卡。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)GM/T 0041《智能 IC 卡密码检测规范》

3、POS/ATM/多功能/互联网终端密码应用系统  

  • 产品名称:POS 密码应用系统、ATM 密码应用系统、多功能密码应用系统、互联网终端  
  • 功能描述:为金融终端设备提供密码服务的密码应用系统。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)JR/T 0025-2018《中国金融集成电路 (IC) 卡规范 第 7 部分:借记贷记应用安全规范》

4、PCI-E/PCI 密码卡  

  • 产品名称:PCI-E/PCI 密码卡  
  • 功能描述:具有密码运算功能和自身安全保护功能的 PCI 硬件板卡设备。  
  • 认证依据:  

1)GM/T 0018《密码设备应用接口规范》  

2)GM/T 0028《密码模块安全技术要求》  

3)《PCI 密码卡技术规范》

5、IPSec VPN 产品 / 安全网关  

  • 产品名称:IPSec VPN 产品 / IPSec VPN 安全网关  
  • 功能描述:基于 IPSec 协议,在通信网络中构建安全通道的设备。  
  • 认证依据:  

1)GM/T 0022《IPSec VPN 技术规范》

2)GM/T 0023《IPSec VPN 网关产品规范》

3)GM/T 0028《密码模块安全技术要求》  

6、SSL VPN 产品 / 安全网关  

  • 产品名称:SSL VPN 产品 / SSL VPN 安全网关  
  • 功能描述:基于 SSL/TLS 协议,在通信网络中构建安全通道的设备。  
  • 认证依据:    

  1)GM/T 0024《SSL VPN 技术规范》  

2)GM/T 0025《SSL VPN 网关产品规范》

3)GM/T 0028《密码模块安全技术要求》  

7. 安全认证网关  

  • 产品名称:安全认证网关  
  • 功能描述:采用数字证书为应用系统提供用户管理、身份鉴别、单点登录、传输加密、访问控制和安全审计服务的设备。  
  • 认证依据:  

1)GM/T 0026《安全认证网关产品规范》  

2)GM/T 0028《密码模块安全技术要求》

8、密码键盘  

  • 产品名称:密码键盘  
  • 功能描述:用于保护 PIN 输入安全并对 PIN 进行加密的独立式密码模块。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)GM/T 0049《密码键盘密码检测规范》

9、金融数据密码机  

  • 产品名称:金融数据密码机  
  • 功能描述:用于确保金融数据安全,实现 PIN 加密、MAC 产生与校验、签名验证等密码服务功能的设备。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)GM/T 0045《金融数据密码机技术规范》

10、服务器密码机  

  • 产品名称:服务器密码机  
  • 功能描述:能独立或并行为多个应用实体提供密码运算、密钥管理等功能的设备。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)GM/T 0030《服务器密码机技术规范》

11、签名验签服务器  

  • 产品名称:签名验签服务器  
  • 功能描述:为应用实体提供基于 PKI 体系的数字签名、验证签名等运算功能的服务器。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)GM/T 0029《签名验签服务器技术规范》

12、时间戳服务器  

  • 产品名称:时间戳服务器  
  • 功能描述:基于公钥密码基础设施应用技术体系框架内的时间戳服务相关设备。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)GM/T 0033《时间戳接口规范》

13、安全门禁系统  

  • 产品名称:安全门禁系统  
  • 功能描述:采用密码技术,确定用户身份和用户权限的门禁控制系统。  
  • 认证依:  

GM/T 0036《采用非接触卡的门禁系统密码应用技术指南》

14、动态令牌 / 动态令牌认证系统  

  • 产品名称:动态令牌 / 动态令牌认证系统  
  • 功能描述:生成并验证动态口令的载体与系统。  
  • 认证依据:  

1)GM/T 0021《动态口令密码应用技术规范》  

2)GM/T 0028《密码模块安全技术要求》(仅适用于动态令牌)

15、安全电子签章系统  

  • 产品名称:安全电子签章系统  
  • 功能描述:提供电子印章管理、电子签章/验章等功能的密码应用系统。  
  • 认证依据:  

1)GM/T 0031《安全电子签章密码技术规范》  

2)GM/T 0055《电子文件密码应用技术规范》

16、电子文件密码应用系统  

  • 产品名称:电子文件密码应用系统  
  • 功能描述:在电子文件全生命周期中提供密码运算、密钥管理等功能的应用系统。  
  • 认证依据:  

GM/T 0055《电子文件密码应用技术规范》

17、可信计算密码支撑平台  

  • 产品名称:可信计算密码支撑平台  
  • 功能描述:为可信计算平台提供完整性、身份可信性和数据安全性密码支持。  
  • 认证依据:  

1)GM/T 0011《可信计算密码支撑平台功能与接口规范》  

2)GM/T 0012《可信计算可信密码模块接口规范》  

3)GM/T 0028《密码模块安全技术要求》  

4)GM/T 0058《可信计算 TCM 服务模块接口规范》

18、证书认证系统 / 证书认证密钥管理系统  

  • 产品名称:证书认证系统 / 证书认证密钥管理系统  
  • 功能描述:用于数字证书全生命周期管理与密钥对全过程管理的系统。  
  • 认证依据:  

GM/T 0034《基于 SM2 密码算法的证书认证系统密码及其相关安全技术规范》

19、对称密钥管理产品  

  • 产品名称:对称密钥管理产品  
  • 功能描述:为密码应用系统生产、分发和管理对称密钥的系统及设备。  
  • 认证依据:  

GM/T 0051《密码设备管理 对称密钥管理技术规范》

20、安全芯片

  • 产品名称:安全芯片  
  • 功能描述:含密码算法、安全功能,可实现密钥管理机制的集成电路芯片。  
  • 认证依据:  

GM/T 0008《安全芯片密码检测准则》

21、电子标签芯片

  • 产品名称:电子标签芯片  
  • 功能描述:采用密码技术,用于射频识别的电子识别信息芯片。  
  • 认证依据:  

GM/T 0035.2《射频识别系统密码应用技术要求 第 2 部分:电子标签芯片密码应用技术要求》

22、其他密码模块

  • 产品名称:其他密码模块  
  • 功能描述:实现密码运算、密钥管理等功能的软件、硬件、固件及其组合。  
  • 认证依据:  

GM/T 0028《密码模块安全技术要求》

//第二批商用密码产品名录

市场监管总局 国家密码管理局于2022年7月14日发布《商用密码产品认证目录(第二批)》,具体如下:

23、可信密码模块  

  • 产品名称:可信密码模块  
  • 功能描述:为可信计算平台提供密码运算功能,具有受保护存储空间的硬件模块。  
  • 认证依据:  

1)GM/T 0012《可信计算可信密码模块接口规范》  

2)GM/T 0028《密码模块安全技术要求》

24、智能 IC 卡密钥管理系统

  • 产品名称:智能 IC 卡密钥管理系统  
  • 功能描述:统一管理智能 IC 卡应用的密钥生命周期,为业务系统提供密钥服务。 
  • 认证依据:  

GM/T 0107《智能 IC 卡密钥管理系统基本技术要求》

25、云服务器密码机

  • 产品名称:云服务器密码机  
  • 功能描述:通过虚拟化技术为多租户提供密码服务的云形态服务器密码机。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)GM/T 0104《云服务器密码机技术规范》

26、随机数发生器

  • 产品名称:随机数发生器(软件 / 硬件)  
  • 功能描述:生成随机二元序列的程序或器件。  
  • 认证依据:  

- 软件:  

  1)GM/T 0028《密码模块安全技术要求》 

  2)GM/T 0103《随机数发生器总体框架》 

  3)GM/T 0105《软件随机数发生器设计指南》  

- 硬件:

  1)GM/T 0028《密码模块安全技术要求》 

  2)GM/T 0078《密码随机数生成模块设计指南》  

  3)GM/T 0103《随机数发生器总体框架》

27、区块链密码模块

  • 产品:区块链密码模块  
  • 功能描述:提供用户安全、共识安全、账本保护、隐私保护、身份认证等密码功能。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)GM/T 0111《区块链密码应用技术要求》

28、安全浏览器密码模块

  • 产品名称:安全浏览器密码模块  
  • 功能描述:集成浏览器内核与密码协议逻辑,保障浏览器场景下的密码安全。  
  • 认证依据:  

1)GB/T 38636《信息安全技术 传输层密码协议(TLCP)》  

2)GM/T 0028《密码模块安全技术要求》  

3)GM/T 0086《基于 SM9 标识密码算法的密钥管理系统技术规范》  

4)GM/T 0087《浏览器密码应用接口规范》

//第三批商用密码产品名录

市场监管总局 国家密码管理局于2025年3月27日发布《商用密码产品认证目录(第三批)》,具体如下:

29、基于 SM9 标识密码算法的密钥管理系统  

  • 产品名称:基于 SM9 标识密码算法的密钥管理系统  
  • 功能描述:实现标识密钥注册、生成、管理、发布的信息系统。  
  • 认证依据:  

GM/T 0086《基于 SM9 标识密码算法的密钥管理系统技术规范》

30、PLC 控制器密码模块  

  • 产品名称:PLC 控制器密码模块  
  • 功能描述:为 PLC 控制器提供密钥存储、密码安全服务及与后台安全管理服务器交互功能的设备。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)GM/T 0119《PLC 控制系统及 PLC 控制器密码应用技术规范》

31、DTLCP 密码模块  

  • 产品名称:DTLCP 密码模块  
  • 功能描述:基于数据报传输层密码协议(DTLCP),构建安全通信通道的设备。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)GM/T 0128《数据报传输层密码协议规范》

32、SSH 客户端密码模块 / SSH 服务端密码模块  

  • 产品名称:SSH 客户端密码模块 / SSH 服务端密码模块  
  • 功能描述:基于 SSH 协议,提供安全远程登录和网络服务的设备。  
  • 认证依据:  

1)GM/T 0028《密码模块安全技术要求》  

2)GM/T 0129《SSH 密码协议规范》

参考链接


商用密码32款认证产品、功能及认证依据详细介绍

Flutter桌面端-应用启动后占满屏幕

前置条件

  • MacBook Pro M2 macOS Tahoe (26.0) / Windows 11 24H2
  • Flutter 3.35.3

功能需求

以目前的情况来看,Flutter 的桌面端软件其实跟移动端软件很像,因为 Flutter 桌面端目前默认只有一个窗口,而不是像原生的桌面端软件一样,经常会有很多个窗口。 比较不一样的是,移动端是直接全屏显示,桌面端的软件是以窗口的形式存在的。

而桌面端窗口大小可以设置,还可以由用户自由放大缩小。

所以一般桌面端软件都需要对窗口做一些配置,比如设置启动时的默认窗口大小以达到最佳的界面显示,设置最小的窗口大小来避免界面变形严重或者遮盖了重要界面等等。

我们希望应用启动后就占据整个屏幕,但是不是最大化,顶部状态栏,底部不要进行覆盖,类似 Chrome 浏览器的行为。

解决方法

可以使用 window_manager 插件来实现,但是发现达不到想要的效果。

后面发现 learnFlutter 还有一个开源库是 screen_retriever ,这个插件允许 Flutter 桌面 应用检索关于屏幕大小,显示,光标位置等信息。

试了下确实可以获取到屏幕的高度,可行的实现方式是使用 screen_retriever 获取到屏幕的高度之后再使用window_manager 设置窗口大小。

但是,上述的代码由于需要 Flutter 引擎初始化之后才能执行,因此会短暂先出现小窗口,然后窗口才会变大。整个过程中有明显的延迟,用户体验不好。

因此,还是需要从底层API层面进行窗口大小的调整,应用启动后,窗口大小立即调整完成,用户体验较好。

macOS 解决方案

方案一:

通过调用 NSWindowzoom 函数,实现窗口的放大。代码如下:

方案二:

通过调整 NSWindowvisibleFrame ,实现窗口的放大。代码如下:

方案三(推荐):

调整 MainFlutterWindow 的代码,直接设置窗口大小:

Windows 解决方案

Windows 系统下的解决方案比较简单,直接修改 ShowWindow 函数的参数,设置为 SW_MAXIMIZE 即可。代码如下:

Linux 解决方案

Linux 系统下的使用的是 GTK,因此可以通过在初始化窗口之前调用 gtk_window_maximize 函数即可(此函数支持窗口显示之前调用)。代码如下:

参考链接