2024-06-24

33 篇热帖

1. The tiny chip that powers Montreal subway tickets (www.righto.com)

蒙特利尔地铁票内置微型芯片技术解析

蒙特利尔地铁票(Métro)采用一次性纸质票,其核心是一枚基于NFC(近场通信)技术的微型芯片(型号为MIFARE Ultralight EV1)。该芯片无需电池,通过与闸机读卡器的磁场交互获取能量并交换数据,整个通信过程仅需35毫秒。

物理结构与尺寸

芯片尺寸仅为570µm × 485µm(约盐粒大小),厚度75-120µm,嵌在票卡内部的薄塑料片中。票卡表面的金色智能卡触点实为印刷图案,并无实际功能。芯片通过四个金色焊盘与铝箔天线连接,天线设计包含对角线桥接以形成闭环回路。

核心功能与数据存储

  • 基本功能:向读卡器提供数据块,验证票卡有效性。
  • 存储系统:配备48字节或108字节的EEPROM存储器,用于保存票务数据。
  • 安全机制
    • 包含唯一7字节序列号(UID),并带有防伪签名。
    • 支持密码保护的内存访问和页面锁定,但密码传输未加密,安全性有限。
  • 计数器:内置三个24位单向计数器,仅支持递增操作,可限定使用次数。
  • 数据通信:采用负载调制技术回传数据,通过切换天线负载(电容或电阻)改变能量吸收,产生848kHz副载波,实现106kbps传输速率。

芯片架构与制造工艺

  • 制程工艺:采用180纳米CMOS工艺,虽属较旧技术(2012年发布时已是成熟工艺),但足以满足需求,且成本更低。
  • 电路设计
    • 数字逻辑部分采用标准单元库设计,包含约8000个门电路和45000个晶体管。
    • 推测未集成微控制器,而是通过硬件状态机和计数器实现协议。
  • 功能模块
    • 射频接口电路负责信号转换和供电。
    • 电荷泵电路为EEPROM提供10-20V写入电压。
    • 模拟电路完成信号解调和负载调制。
  • 防冲突机制:支持多卡同时读取时的智能防冲突算法。

成本与生产模式

芯片以晶圆形式销售,单颗成本约9美分。一张8英寸晶圆可切割约10万颗芯片,售价9000美元。制造商将芯片装配到天线基板并印刷成票卡,总成本极低,适合一次性使用场景。

2. Start all of your commands with a comma (2009) (rhodesmill.org)
# 文章摘要:以逗号开头自定义命令(2009)

## 问题背景
- 作者长期在 `~/bin/` 目录下创建自定义脚本,并将其加入 `PATH` 以扩展Unix命令功能。
- 问题在于自定义命令名称(常为简短小写字母)易与系统新增命令冲突,尤其在Debian/Ubuntu等软件包丰富的系统中(如Ubuntu有数万个可用命令)。

## 解决方案
- 选择**不常用且无特殊意义的字符**作为命令前缀,以避免冲突且便于输入(无需Shift键)。
- 分析后发现**逗号(,)** 是理想选择:
  - 非小写字母、括号、斜杠等系统或Shell专用字符。
  - 在文件名中无特殊含义,所有工具和Shell均正常处理。
- **方法**:为所有自定义命令添加逗号前缀(如 `,range`、`,mount-twt`)。

## 优势与验证
- **避免命名冲突**:完全区分于系统命令。
- **便于检索**:通过Tab补全(输入 `,` 后按Tab)可快速列出所有自定义命令。
- **长期可靠性**:该方法已使用约十年,稳健有效。

## 建议
- 推荐给拥有 `~/bin/` 目录的用户,以保持命令命名整洁且与系统命令正交。
3. US prosecutors recommend Justice Department criminally charge Boeing (www.voanews.com)

美国检察官已建议司法部高级官员对波音公司提出刑事指控。该建议基于检察官的调查发现,波音违反了其在2021年达成的一项协议。该协议旨在了结对波音就两起致命737 MAX坠机事故(2018年和2019年)中涉嫌欺诈联邦航空管理局的调查。

根据2021年的协议(即暂缓起诉协议),波音同意支付25亿美元罚款、改革合规体系并定期提交报告,以换取司法部不起诉公司。协议有效期三年。然而,检察官于今年五月认定波音违反了该协议条款。

司法部必须在2024年7月7日前决定是否起诉。消息人士称,双方仍在就解决方案进行讨论,最终决定尚未做出。可能的处理方式包括:正式提出刑事指控(可能超出2021年最初涉及的欺诈阴谋罪范围)、将原协议延长一年、或提出新的更严格条款。

波音公司此前表示不认同其违反协议的认定,并声称已“遵守”协议条款。公司对指控建议未予置评。报道指出,波音可能愿意接受罚款并同意引入第三方监督,但认为认罪(通常会带来额外的商业限制,可能危及政府合同,包括与国防部的巨额合同)代价过高。

背景是,波音近来因安全问题面临更严格的审查,例如2024年1月发生的阿拉斯加航空航班面板脱落事件。遇难者家属长期批评2021年的协议过于宽大,一直敦促检方寻求刑事起诉和高额罚款。波音首席执行官戴夫·卡尔霍恩已公开承认公司安全方面的不足并向遇难者家属道歉。

6. Car dealerships revert to pens and paper after cyberattacks on software provider (apnews.com)

北美汽车经销商因软件供应商遭受网络攻击而恢复使用纸笔操作

事件概述
北美汽车经销商正面临重大运营中断,此次中断源于上周对CDK Global公司的连续网络攻击。CDK Global是美国和加拿大数千家汽车经销商使用的核心软件供应商,其系统故障持续影响汽车零售业务,导致交易延迟和订单改为手工记录。目前恢复工作预计需要“数天”时间,尚无明确结束迹象。

CDK Global公司背景
CDK Global总部位于伊利诺伊州霍夫曼庄园,为经销商提供日常运营软件支持,涵盖车辆销售、融资、保险及维修等业务。公司服务超过北美1.5万个零售网点,是汽车行业关键的技术提供商。

攻击经过与响应

  • 攻击时间:上周三(具体日期未明确)发生连续两次网络攻击。
  • 应急措施:公司为谨慎起见,在首次攻击后关闭所有系统,第二次攻击后再次关闭大部分系统。
  • 调查与恢复:公司联合第三方专家启动调查,并通知执法部门。发言人表示恢复过程可能需要数天,期间正为客户提供替代业务方案。
  • 安全风险:CDK警告有“不良行为者”冒充公司或其关联方,通过钓鱼攻击试图获取系统访问权限。
  • 攻击性质:事件具有勒索软件攻击特征,但公司未证实是否收到赎金要求。网络安全专家指出此类攻击在近年频发,任何行业均可能成为目标。

对经销商与消费者的影响

  • 业务持续性:包括Stellantis、福特、宝马等品牌确认部分经销商受影响,但销售仍在继续。
  • 替代方案:经销商切换至手动流程(如手写订单),但管理效率下降,出现大量待处理纸质文件。例如,Hawk Auto Group等经销商依靠传统方法维持服务,但行政工作负荷增加。
  • 大型经销商应对
    • Group 1 Automotive采取措施隔离系统,保护自身运营。
    • Lithia Motors启动事件响应程序,切断与CDK系统的连接。
    • AutoNation通过手动流程维持营业,但生产力有所下降。

消费者数据保护建议
由于攻击细节尚不明确,网络安全专家强调:

  1. 假设数据可能泄露:CDK系统存储敏感信息(如社保号、就业历史、收入、地址等)。
  2. 监控信用报告:考虑冻结信用或注册身份盗窃保险。
  3. 警惕钓鱼攻击:通过官方网站核实联系方式,避免点击可疑邮件或接听诈骗电话。
  4. 普遍防护:无论是否受影响,用户都应加强数据保护意识,因个人信息已成为高价值攻击目标。

现状与展望
事件暴露了汽车行业对单一软件供应商的依赖风险。尽管经销商通过回归传统操作维持服务,但效率损失显著。CDK正在积极推进系统恢复,但具体时间表仍不明确。消费者和经销商需保持警惕,直至系统完全恢复正常。

7. LINQPad – The .NET Programmer's Playground (www.linqpad.net)

LINQPad – .NET程序员的互动工具

LINQPad 是一款专为 .NET 程序员设计的互动工具,支持使用 LINQ 或 SQL 直接查询数据库(如 SQL Server、SQLite、PostgreSQL、Oracle、MySQL 等)。它通过自动推断外键约束生成关联属性,让用户无需编写连接即可访问相关数据行。查询结果中,关联属性以可点击的超链接形式显示,便于交互式探索数据库。

核心功能

  • 结果缓存:使用 Util.Cache 缓存中间数据,避免脚本重跑时重复计算,提升性能。
  • 智能输出:著名的 Dump 方法能智能处理对象图,将数据渲染为可扩展的超链接、图像、位图或动画,并支持 WPF/Windows Forms 对象可视化。还提供图表输出和传统数据网格视图。
  • 高级 AI 功能(Premium 版):包括代码补全、聊天、SQL 到 LINQ 转换及智能编码代理。代理可访问数据库 schema 和内置样本,支持多种 AI 模型(如 Claude、Gemini、GPT),帮助生成 C# 或 .NET 相关代码示例。
  • 快速编码工具:支持 async/await、unsafe 等高级 C# 特性,可导入脚本、引用程序集,用作交互式测试工具。内置轻量级调试器、符号导航和书签功能,适合学习 C#,提供大量示例。
  • 多功能集成:包含基准测试(基于 BenchmarkDotNet)、交互式正则表达式评估器、快速 Excel 导出引擎(生成 .xlsx 文件),以及密码管理和 OAuth 认证支持,适用于构建脚本和云管理自动化。
  • 易用性:附带可搜索的教程和运行样本,集成 AI 代理辅助学习和查询。
8. I found a 1-click exploit in South Korea's biggest mobile chat app (stulle123.github.io)

KakaoTalk安卓应用一键式漏洞利用分析

漏洞概述

研究人员在韩国主流聊天应用KakaoTalk的安卓版本(10.4.3)中发现了一系列可串联利用的安全漏洞(CVE-2023-51219)。攻击者通过构造恶意深度链接,可远程窃取用户的访问令牌,并最终接管账户、读取未开启端到端加密的聊天消息。这是一个低门槛但高危害的利用链。

核心漏洞与利用入口

  1. 入口点:CommerceBuyActivity

    • 该组件已导出,可通过深度链接(如 kakaotalk://buy)启动。
    • 其WebView启用了JavaScript,并支持intent://方案与应用内其他未导出组件通信。
    • 关键缺陷:此WebView在HTTP请求的Authorization头中会泄露用户的访问令牌。
  2. 深度链接验证不足

    • 应用对传入的kakaotalk://buy深度链接有验证,确保加载的URL以https://buy.kakao.com为前缀。
    • 但攻击者可以控制该URL的路径、查询参数和片段(fragment)。这意味着攻击者可以引导WebView加载指定的kakao.com子路径。

漏洞利用链

攻击者通过以下步骤利用漏洞:

  1. 发现XSS入口

    • 研究人员发现 https://buy.kakao.com/auth/0/cleanFrontRedirect 端点存在开放重定向,可将用户重定向到kakao.com的任意子域名。
    • 通过搜索,发现了 m.shoppinghow.kakao.com 子域名上存在一个存储型XSS漏洞(可通过搜索参数注入恶意脚本)。
  2. 构造恶意深度链接

    • 构造一个精心设计的深度链接,当受害者点击时,将依次触发以下动作:
      • 打开CommerceBuyActivity
      • 利用开放重定向跳转到存在XSS漏洞的shoppinghow子域名页面。
      • 执行注入的JavaScript代码。
      • 该JavaScript将当前页面重定向到攻击者服务器,从而在HTTP请求头中窃取受害者的访问令牌
  3. 使用窃取的令牌接管账户

    • 获得访问令牌后,攻击者可以:
      • 访问Kakao邮箱:如果受害者未启用Kakao邮箱,攻击者甚至可以为其创建一个并将其设为主邮箱。
      • 重置KakaoTalk密码:通过访问受害者的邮箱,可以完成密码重置流程(需要通过Burp Suite等工具绕过短信二次验证)。
      • 注册攻击者设备:使用重置后的密码登录PC版KakaoTalk或第三方客户端(如KiwiTalk)。登录时需要一个4位验证码,攻击者可以利用窃取的访问令牌直接向Kakao服务器请求或提交该验证码,从而成功注册设备

最终影响

  • 账户完全接管:攻击者可控制受害者的KakaoTalk账户。
  • 消息泄露:通过注册新设备,攻击者可以同步并读取该账户上未开启“安全聊天”(端到端加密) 的所有聊天记录。
  • 其他数据风险:由于KakaoTalk是集成支付、购物等服务的“超级应用”,账户接管还可能导致财产损失和其他敏感信息泄露。

结论与修复

  • 根本原因:深度链接验证逻辑缺陷、WebView配置不当、Web应用存在XSS漏洞以及身份验证流程中的可绕过点等多个低危漏洞串联,导致了高危结果。
  • 启示:许多流行的聊天应用仍存在可简单利用的漏洞链;安卓的安全模型和端到端加密在开发者配置失误时无法提供保护;亚洲主流聊天应用的安全研究仍相对不足。
  • 修复状态:研究人员于2023年12月报告。Kakao已下线https://buy.kakao.com,移除了易受攻击的CommerceBuyActivity组件,并禁用了相关的重定向功能。
9. Microsoft Account to local account conversion guide erased from Windows 11 guide (www.tomshardware.com)

微软账户转换指南被移除事件摘要

核心事件

微软已从其官方支持网站删除关于 将Windows 11登录从微软账户转换为本地账户 的说明文档。

关键时间线

  • 2024年6月12日:根据Wayback Machine存档,指南仍在网站上存在。
  • 2024年6月17日:该指南内容已从网站上消失,且至今未恢复。

上下文与背景

  1. 微软的账户政策:微软一直积极推动用户使用微软账户登录Windows。Windows 11安装程序已移除了绕过微软账户登录要求的简便方法。
  2. 原始指南位置:说明文档原位于微软官方支持页面上,位于“从本地账户更改为微软账户”指南的同一页面上。
  3. 指南内容与警告
    • 该指南曾提供将登录方式从微软账户切换为本地账户的详细步骤。
    • 微软在指南中嵌入了警告,强调使用微软账户的优势(如服务集成、安全性和跨设备同步),并提醒使用本地账户时若忘记密码且未创建密码重置盘将无法恢复账户。

转换方法(仍然可用)

尽管官方指南被移除,在Windows 11中将登录方式从微软账户更改为本地账户的操作流程本身并未改变。其步骤为:

  1. 打开 “设置” 应用。
  2. 进入 “账户” > “你的信息”
  3. 选择 “改为使用本地账户登录”
  4. 按照屏幕上的说明完成操作。

分析与意图

  • 推广账户策略:此举被视为微软加强其生态系统绑定的努力的一部分,类似于谷歌和苹果的做法,旨在鼓励用户深度集成使用其服务。
  • 用户选择权:虽然Windows 11操作系统仍允许使用本地账户,但移除易于访问的官方指南表明,微软试图降低普通用户发现并使用该选项的便利性
10. Cosmopolitan v3.5.0 (github.com)

Cosmopolitan Libc v3.5.0 版本发布。该项目的核心目标是将 C 语言转变为一种“一次构建,随处运行”的语言,其无需解释器或虚拟机,而是通过重新配置 GCC 和 Clang 来生成一种兼容的格式,使程序能在 Linux、Mac、Windows、FreeBSD、OpenBSD、NetBSD 及 BIOS 上以原生方式高性能、小体积地运行。

本次版本的主要改进包括:

基础组件优化

  • 实现了更高质量的内存映射管理。
  • 移除了地址消毒器(ASAN)。

工具链与功能增强

  • 将集成的 Lua 解释器升级至 5.4.6 版本。
  • cosmocc 工具新增了 -x LANG 标志支持。
  • 修复了 pthread_join() 中与 --strace 相关的 use-after-free 问题。

C++ 标准模板库 (CTL) 重大改进 该版本在自研的 CTL 方面取得了大量进展,主要包括:

  • 字符串优化:对 ctl::string 实施了小字符串优化(SSO),并修复了相关的内存问题和错误。
  • 引入新容器:新增了 ctl::setctl::map 容器。
  • 智能指针:实现了 ctl::unique_ptr,并对其进行了改进和清理。
  • 内存管理:为 CTL 提供了最小化的 new.h,并将 new.cc 中的定义设为弱符号。
  • 其他修复:修复了 ctl::optional 中的错误,并解耦了 swap 函数对 std 的依赖。

GitHub 开发流程改进

  • 添加了标签自动化操作和 issue 模板,以优化协作流程。
11. Resilient Sync for Local First (holtwick.de)

文章摘要:Resilient Sync for Local First

本文探讨了数据存储与同步的历史演变,从本地文件到云存储带来的问题,并引入了本地优先(Local-First)运动。作者提出了一种弹性同步(Resilient Sync)方案,旨在实现离线数据处理、跨设备同步和端到端加密,同时兼容旧技术以增强韧性。

本地优先运动的背景与挑战

  • 历史演变:80年代数据存储于本地文件;后期云存储普及,但引发数据丢失和提供商锁定风险。
  • 本地优先目标:将数据带回用户本地,同时保留互联网优势。CRDT解决了并发数据处理问题,但数据交换仍依赖服务器或P2P连接。
  • 理想标准
    • 数据本地处理和存储(支持离线)。
    • 同步中断后本地处理的数据在同步后保持一致(基于CRDT)。
    • 数据传输加密(E2EE)。
    • 使用简单技术确保韧性,应对离线场景。

弹性同步方案

作者提出一种通用数据交换格式,适用于文件系统和互联网,强调简单性和灵活性。

  1. 变更日志(Changes)

    • 每个客户端维护连续变更日志,使用递增索引(如0,1,2)和唯一客户端ID(clientId)。
    • 日志条目可包含时间戳、前一个条目哈希(确保一致性)或内容哈希,支持加密。
    • 数据集合称为工作区(workspace)。
  2. 资产存储(Assets)

    • 大文件(如图像、视频)单独存储,避免同步阻塞。
    • 资产按clientId和索引组织,通过URL引用(如asset:///<clientId>/<index>/<filename>),包含大小、类型和哈希信息。
  3. 核心优势

    • 支持“拉取”模式,无需依赖“推送”通知。
    • 同步时无需理解数据内容。
    • 数据缺失可检测并重新请求。
    • 数据可复制多次,适用于备份。
    • 客户端间可通过简单复制过程连接。
    • 仅追加存储(append-only),避免冲突。

实现方式

  1. 数据库实现

    • 表结构:index(整数)、clientId(字符串)、data(字符串或二进制)、timestamp(可选)、prevHash(可选)。
    • 适用于本地存储(如IndexedDB)或同步服务器。
  2. 文件系统实现

    • 目录结构:index.json存储元数据,每个clientId有目录,含changesassets子目录。
    • 文件命名使用分布式路径算法(TypeScript示例),控制每个文件夹文件数量,避免系统限制。
  3. 在线服务与P2P

    • 根据服务选择数据库或文件系统方法(如Dropbox用文件系统,Apple CloudKit用数据库)。
    • 支持P2P或本地通信同步,数据一致性允许冗余和快速路由。

改进与未来方向

  • 优化措施:控制日志条目大小、数据压缩、新客户端宣布、逻辑时钟(如Lamport时钟)改善时序。
  • 高级功能:单文件存储优化、加密实现权限管理(如Cryptree)。
  • 作者经验:已在应用(如Onepile)中使用多年,新项目将发布。方法简单灵活,适应未来技术变化。

结论

弹性同步通过标准化数据格式和存储方式,实现了本地优先的韧性同步,适用于多种环境(数据库、文件系统、在线服务、P2P),强调简单性、可扩展性和合规性。

12. Porting Python to a $3 smartwatch [video] (www.youtube.com)

视频摘要:将 Python 移植到 3 美元的廉价智能手表

本视频记录了将 MicroPython 移植并运行在一款售价仅为 3 美元的廉价智能手表上的完整过程。

核心内容与操作步骤

  • 拆解与探索:作者首先对这款极低成本的智能手表进行了物理拆解,深入探索并分析其内部硬件构造。
  • 重组与固件刷写:在完成硬件探索后,作者将设备重新组装,并演示了重新刷写(reflashing)固件的过程,最终成功使该手表支持并运行 MicroPython。

细节与花絮

  • 在拆解操作期间,作者使用尖锐的镊子触碰电池,并提到电池触感“有些软(squidgy)”。这一细节引发了观众在评论区中对该操作安全性及电池潜在风险的调侃与担忧。
14. GCC's new fortification level: The gains and costs (developers.redhat.com)

GCC新增安全加固等级:收益与成本

GCC编译器自12版本起支持新的_FORTIFY_SOURCE=3安全加固级别,旨在在编译和运行时检测更多缓冲区溢出和缺陷,从而提升应用程序的安全性。

两大主要收益

  1. 增强的缓冲区大小检测 新级别底层使用了一个名为__builtin_dynamic_object_size的内置函数。与此前_FORTIFY_SOURCE=2所用的__builtin_object_size不同,该新内置函数能够返回在运行时计算的大小表达式,而非编译时常量。这使得_FORTIFY_SOURCE=3能在更多地方检测缓冲区溢出。例如,对于一个通过条件判断指向栈数组或堆内存的指针,新级别能根据实际执行路径插入运行时检查,而旧级别可能仅基于最大可能大小进行静态判断,从而漏检越界访问。

  2. 更好的安全加固覆盖范围 实际构建测试表明,新级别大幅提高了代码中被加固的函数调用比例。在一些测试案例中(如Bash和sudo),加固覆盖率相比_FORTIFY_SOURCE=2提升了十几倍甚至数十倍。这不仅捕获了更多典型的缓冲区溢出(如差一错误),还揭示了其他类型的问题:

    • glibc中的缺陷:新级别暴露了glibc中一些不符合标准或有问题的用法,例如wcrtomb函数对缓冲区大小的假设强于POSIX标准,以及应用程序将malloc_usable_size用于非诊断目的以规避内存重分配的“黑科技”模式。
    • 严格的C标准合规性问题:新级别对对象生命周期要求更严格。例如,在realloc后继续使用旧指针(在对象生命周期结束后)是未定义行为,新级别会因此类不合规的代码而中断执行。

与成本权衡

_FORTIFY_SOURCE=3可能会对代码大小和性能产生影响。由于其需要在运行时计算对象大小表达式,相比仅使用编译时常量的_FORTIFY_SOURCE=2,可能会增加生成代码量和寄存器压力,从而导致二进制文件增大和潜在的性能开销。文章指出,尽管需要进一步研究以量化具体影响,但考虑到安全覆盖率的巨大提升,这些开销很可能是值得的。

结论

_FORTIFY_SOURCE=3在安全检测能力上取得了显著进步,GCC 12的支持使其得以在Linux发行版中广泛应用。它不仅能发现更多缓冲区溢出,还推动了对C语言编程模式(如对象生命周期和标准合规性)的更严格审视。虽然伴随一定的代码膨胀和潜在性能成本,但其带来的安全性提升被认为收益大于成本。

16. Detecting hallucinations in large language models using semantic entropy (www.nature.com)

文章摘要

本文介绍了一种用于检测大语言模型(LLM)中幻觉(即模型生成的虚假或无意义内容)的方法,称为语义熵。该方法基于概率不确定性估计,无需修改模型架构即可应用,甚至可以在无法获取模型输出概率的情况下使用“离散”变体。

核心思想

传统方法直接计算模型生成文本序列的预测熵,但这会混淆模型在语义(意义)上的不确定性和在具体措辞上的不确定性。例如,同一个含义可能有多种表述方式。语义熵旨在仅估计模型对其生成内容意义的不确定性,这对于检测幻觉更为关键。

方法步骤

  1. 生成:给定输入,从LLM的概率分布中采样多个输出序列。
  2. 聚类:基于双向蕴含关系,将语义等价的输出序列聚类。即,如果两个序列互相蕴含,则认为它们含义相同。蕴含关系可通过专门的自然语言推理(NLI)模型(如DeBERTa)或通用LLM(如GPT-3.5)来判断。
  3. 计算语义熵
    • 计算每个语义类别(聚类)的概率:将属于同一类别的所有序列的概率相加。
    • 对这些类别概率计算熵,得到语义熵。
    • 为处理无法访问所有可能语义类别的情况,使用蒙特卡洛采样进行估计。
    • 离散语义熵:当无法获取序列概率时,直接使用每个聚类中生成序列的比例来近似类别概率。

实验与评估

  • 数据集:在生物医学问答(BioASQ)、阅读理解(SQuAD)、数学推理(SVAMP)等多个自由形式问答数据集上测试。为增加难度并诱发幻觉,实验中未提供上下文段落。
  • 模型:使用了Falcon、LLaMA 2 Chat、Mistral等多种LLM。
  • 基线方法:与朴素熵、嵌入回归(监督方法)、P(True)方法等进行了比较。
  • 评估指标:使用AUROC、拒绝准确率(在不同置信度阈值下的准确率)和AURAC来评估检测可靠性。
  • 准确性判定:对于长句回答,使用GPT-4自动判断模型答案是否与参考答案语义相同。

主要结果

  • 语义熵能有效识别模型生成中任意性高、含义不确定的部分,这些部分往往是幻觉。
  • 与基线方法相比,语义熵在多个数据集和模型上表现出色,能够更好地预测模型输出的准确性。
  • 通过拒绝回答语义熵高的问题,可以提升模型的整体准确率。

长文本扩展应用

对于段落级文本(如传记),方法有所扩展:

  1. 将段落自动分解为一系列事实性陈述。
  2. 为每个陈述自动生成多个相关问题。
  3. 针对每个问题,让原始LLM生成多个答案。
  4. 计算每个问题答案集合的语义熵(包含原始陈述)。
  5. 对所有相关问题的语义熵取平均,作为该陈述的不确定性分数。

技术细节与选择

  • 序列概率与长度归一化:计算序列联合概率时,采用长度归一化的对数概率,以使不同长度句子的不确定性评估更公平。
  • 蕴含关系判定:实验表明,使用GPT-3.5配合特定提示模板进行蕴含判断,效果较好。对于短文本,使用轻量级DeBERTa模型也能获得良好结果。
  • 采样设置:通常采用核采样和top-K采样,温度设为1。低温(如0.1)采样用于生成单条“最佳”回答以评估模型基础准确率。

总结而言,语义熵提供了一种无需模型内部知识、直接从输出语义多样性角度评估LLM不确定性的有效方法,是检测幻觉的实用工具。

17. From RSS to My Kindle (olano.dev)

从 RSS 到我的 Kindle:使用 Python 构建网站 EPUB

背景与目标

作者开发了一个名为 feedi 的个人阅读器,用于聚合网络内容。他发现在电脑或手机上长时间阅读文章会导致注意力分散和眼睛疲劳,因此更喜欢将长篇文章发送到 Kindle 上离线阅读。为此,他决定为 feedi 添加 Kindle 集成功能,因为亚马逊官方工具对网页内容提取效果不佳。

实现过程与技术方案

1. 从网页提取文章内容

作者最初尝试了多种 Python 库,最终决定使用 Mozilla 的 Readability JavaScript 库(即 Firefox 阅读视图的底层技术)来提取干净的 HTML 内容。

  • 通过一个 Node.js 脚本调用该库,获取包含标题、作者、正文等内容的 JSON 数据。
  • 为处理图片懒加载问题,使用 BeautifulSoupdata-src 等属性替换为 src,确保图片能正常显示。

2. 打包为 EPUB 文件

EPUB 本质是一个 ZIP 压缩包,包含特定元数据文件。

  • 首先创建一个包含 mimetypeMETA-INF/container.xmlcontent.opf(定义书籍元数据、清单和阅读顺序)的基本结构。
  • 将提取的 HTML 内容保存为 article.html
  • 处理图片
    • 遍历 HTML 中的所有 <img> 标签,下载图片资源。
    • 重写图片的 src 属性,指向 ZIP 包内的本地路径。
    • 由于 Kindle 不支持 WebP 格式,使用 Pillow 库将 WebP 图片转换为 JPEG 格式。

3. 通过邮件发送至 Kindle

作者选择使用电子邮件发送方式,避免了之前尝试 Amazon 客户端模拟库的不稳定问题。

  • 使用 Gmail SMTP 服务器,需要启用两步验证并生成应用专用密码。
  • 将生成的 EPUB 字节流作为邮件附件发送。
  • 为确保附件名正确显示(处理特殊字符和非 ASCII 字符如西班牙语),使用 RFC 6266 标准进行文件名编码。
  • 用户需在亚马逊设备设置中白名单发件人邮箱地址。

核心代码流程

  1. Flask 路由 (/entries/kindle):接收文章 URL,调用提取、打包和发送函数。
  2. 内容提取 (extract):通过子进程调用 Node.js 脚本,并解析返回的 JSON。
  3. EPUB 打包 (package_epub):构建 EPUB ZIP 文件,包含元数据、HTML 和下载处理后的图片。
  4. 邮件发送 (send):使用 smtplibemail 库构造并发送带有 EPUB 附件的邮件。

当前限制与未来改进

  • JavaScript 依赖网站:无法提取严重依赖 JavaScript 动态加载内容的网站;尝试使用无头浏览器会降低性能和稳定性,因此作者选择忽略这类网站。
  • 浏览器集成:目前只能在 feedi 应用内使用,计划开发 Firefox 扩展以实现从浏览器直接发送。
  • 移动分享:希望将 feedi(作为渐进式 Web 应用)设为 iOS 的分享目标,但目前 iOS 不支持此功能。

总结

该方案通过结合网页内容提取、EPUB 生成和邮件发送,实现了将网页文章一键推送到 Kindle 的功能,优化了用户的长文阅读体验。虽然存在一些限制,但基本满足了作者的日常需求。

18. Convert an existing wired doorbell into a smart doorbell using ESPHome (frenck.dev)

本文介绍了如何将现有有线门铃(也适用于电池供电门铃)改造为支持WiFi的智能门铃,成本约2美元,无需焊接或电子专业知识。改造后可通过Home Assistant等智能家居平台实现多种自动化功能。

核心原理

传统门铃电路通过按钮开关接通电路,触发铃声。改造后将电路分为两部分:一部分检测按钮按压,另一部分控制铃声。新增设备(基于ESP-01S芯片)作为传感器检测按钮,并作为开关控制铃声,从而实现两者独立控制。

所需组件

  • 主件:ESP-01S芯片、配套继电器模块(通常一起销售)。
  • 电源:旧手机充电器(5V USB输出)。
  • 工具:螺丝刀、剥线钳、镊子、FTDI适配器(用于烧录固件)、杜邦线、项目盒(可选)。
  • 软件:Home Assistant、ESPHome、ESPHome Flasher(均开源免费)。

改造步骤

  1. 硬件修改:弯折ESP-01S的GPIO2引脚,使其可用于连接门铃按钮,同时断开与继电器模块的复位连接。
  2. 固件烧录
    • 在ESPHome中创建doorbell.yaml配置文件,定义WiFi连接和GPIO引脚功能。
    • 编译并下载固件。
    • 使用FTDI适配器将固件烧录到ESP-01S(后续可通过OTA无线更新)。
  3. 安装接线
    • 按示意图连接电源、按钮、铃声和继电器模块。
    • 电池供电门铃接线更简单,直接将电池两端连接至继电器的COM和NO端口。
  4. 集成至Home Assistant:设备将被自动发现,激活后可使用相关实体进行自动化控制。

自动化功能示例

  • 通知推送:按钮按下时向手机、电视等发送通知。
  • 定时静音:夜间自动关闭铃声,早晨恢复。
  • 摄像头联动:按钮触发时自动拍摄或在电视上播放门前摄像头画面。
  • 紧急警报:烟雾报警触发时持续鸣响门铃。

扩展与变通

  • 多按钮支持:并联多个按钮(无法区分)、并联多个模块或使用更大芯片。
  • 电源优化:使用降压模块直接从门铃变压器取电,替代手机充电器。
  • MQTT集成:可通过ESPHome的MQTT组件接入其他平台(如OpenHAB)。

总结

此项目展示了如何以极低成本实现智能家居DIY。ESP-01S芯片小巧廉价,适用于多种开关类设备改造,但需注意其功率限制。文章强调,智能门铃仅是入门示例,ESPHome与Home Assistant的结合能实现更广泛的家庭自动化创新。

20. EPA releases report on Apple's hazardous waste violations in urban silicon fab (mastodon.social)
21. Microfeatures I Love in Blogs and Personal Websites (danilafe.com)

博客与个人网站中我喜欢的微特性

本文介绍了多种能提升博客与个人网站用户体验的“微特性”。这些特性并非必需,但实现成本低,能显著改善阅读体验。

主要特性

1. 侧注(Sidenotes)

  • 功能:在不中断主文本流的情况下,提供补充信息或引用来源。
  • 优势:比传统脚注更便捷,读者无需跳转到页面底部。
  • 示例:Gwern 的网站大量使用侧注,并参考了 Tufte CSS。

2. 目录(Tables of Contents)

  • 功能:快速浏览文章结构,并允许直接导航至特定章节。
  • 实现:静态站点生成器(如 Hugo)通常能自动生成。
  • 扩展:部分网站(如 Lars Hupel)提供跨系列文章的目录。

3. 页面进度显示(Bonus)

  • 功能:显示阅读进度,比浏览器滚动条更精确(不包含评论区等无关内容)。
  • 进阶:可结合目录,高亮显示当前所在章节。

4. 可轻松链接的标题(Easily Linkable Headings)

  • 功能:标题本身即为指向自身的链接,用户可通过右键复制链接轻松分享特定章节。
  • 实现:静态站点生成器通常支持此功能。

5. 文章系列分组(Grouping Series of Posts)

  • 功能:为系列文章添加“上一篇/下一篇”导航按钮和总目录页,优化连续阅读体验。
  • 示例:Chapel 语言博客和 Lars Hupel 的网站。

6. 对话体(Dialogues)

  • 功能:使用对话形式(如与“cool bear”的对话)使内容更生动,便于从初学者视角提问,增加趣味性。

7. 带来源的代码块(Code Blocks with Origin)

  • 功能:标注代码块所属文件及行号,点击文件名可跳转至完整代码上下文。
  • 示例:作者的编译器相关文章;《Crafting Interpreters》在线书籍用文字描述代码变更。

8. 可点击链接的代码块(Bonus)

  • 功能:代码中的每个符号(如变量、函数)均可点击跳转到其定义处。
  • 示例:Agda 语言生成的文档,如《Programming Languages Foundations in Agda》。

9. 外部链接标记(Markers for External Links)

  • 功能:用图标(如↗)标记指向外部域名的链接,并可设置为新标签页打开。
  • 扩展:Gwern 的网站会根据链接目的地(如维基百科、Haskell.org)使用不同图标。

10. 链接预览(Bonus)

  • 功能:悬停在链接上时,弹出窗口显示目标页面的预览(如首段摘要)。
  • 示例:Gwern 的网站提供此功能,并可能存档预览内容。

11. RSS 订阅源

  • 功能:提供 RSS/Atom 订阅源,方便读者通过阅读器跟踪更新。
  • 意义:使读者能集中管理关注的博客,无需逐一检查网站。

12. 链接到其他网站(Links to Other Sites)

  • 功能:在页面底部推荐其他博客的文章,通常基于 RSS 源自动获取。
  • 示例:Drew DeVault 的博客使用 openring 工具实现,旨在推广优秀内容创作者。

总结

这些微特性共同提升了网站的易用性、可访问性和社区互动性。作者鼓励读者在自己的网站中选择性实施,并欢迎提供更多灵感建议。

22. A reckless introduction to Hindley-Milner type inference (2019) (reasonableapproximation.net)

本文介绍了Hindley-Milner(HM)类型推断系统的基本原理、设计动机及其在编程语言设计中的权衡。

背景与设计动机

在软件验证中,由于停机问题不可判定,开发者常在语言的表达能力(编写复杂程序的容易程度)与可分析性(Legibility,指程序属性易于被证明和推导的程度)之间进行权衡。通过牺牲图灵完备性(如正则表达式、SQL),可获得更高的可分析性。HM类型系统(应用于Elm、Haskell、ML等语言)在这一权衡中取得了成功,以较小的表达能力代价换取了强大的可分析性。

HM系统的优势与代价

  • 优势:提供强大的类型推断功能,能在近似线性时间内自动推导类型,无需显式类型注解,从而有效消除运行时类型错误。
  • 代价:限制了部分表达能力。程序必须符合推断算法的要求,例如无法直接进行可能越界的数组索引(需返回Maybe类型处理空值),不支持异构列表(Heterogeneous lists),且难以实现泛型Monad编程(如Elm中缺乏通用的fmap)。

核心概念与结构

HM系统通过结合语言表达式与类型规则来实现类型推断:

  1. 类型层次
    • 类型常量与变量:如Int(常量)和a(变量)。
    • 应用类型:将类型函数应用于参数,如List Inta -> b
    • 单态与多态:单态为具体类型;多态通过全称量词()量化类型变量(如∀a. a -> Int)。
  2. 表达式与推导规则
    • 变量与常量:通过类型特化(Specialisation),将多态声明实例化为具体的单态判断。
    • 函数调用:消费函数类型。若函数类型为μ → μ'且参数为μ,则调用结果为μ'
    • Lambda表达式:产生函数类型。若假设参数为μ可推导出表达式为μ',则Lambda表达式类型为μ → μ'
    • Let表达式:类似于多态的Lambda应用,允许对未在当前上下文约束的类型变量进行泛化以引入多态类型,弥补了普通Lambda表达式的不足。
    • 递归:基础HM系统未内置递归,通常通过不动点组合子、递归类型或引入letrec表达式(在自身求值时作为单态,在外部使用时泛化为多态)来实现。

扩展特性

实际编程语言在纯HM基础上进行了诸多扩展,包括惰性/严格求值模型、自定义类型、模式匹配(case语句与解构)、记录类型(如Elm的可扩展记录突破了纯HM限制)以及类型类(Haskell的Typeclasses)。此外,类型系统本身也可视为一种语言,具备其独立的表达能力与可分析性特征。

23. Traffic noise hurts children's brains (www.bbc.com)

文章摘要:交通噪音损害儿童大脑

随着对噪音影响儿童健康和学习的认识加深,一些城市正采取措施降低道路和教室噪音。

噪音对儿童认知功能的负面影响

  • 纽约案例:一所靠近高架铁轨的学校,因持续噪音干扰,导致学生阅读能力测试成绩落后于安静区域学生3-4个月。
  • 巴塞罗那研究:一项针对2700名7-10岁儿童的研究发现,道路交通噪音会减缓儿童的工作记忆和注意力。噪音的突然波动(如鸣笛、引擎轰鸣)尤其分散注意力,即使平均噪音水平不高。
  • 早期发展影响:噪音可在大脑发育的关键阶段对认知功能产生长期负面影响。部分儿童可能因无法控制噪音环境而产生“习得性无助”,降低学习动机。
  • 选择性注意力较弱的儿童更易受噪音干扰,学业表现更差。

长期健康后果

  • 持续噪音暴露会增加皮质醇(压力激素) 水平,可能对儿童从童年到成年的身心健康造成持久伤害。
  • 长期噪音可能干扰中枢神经系统,增加未来患心脏病、中风、痴呆和认知能力下降的风险。

城市解决方案:以巴塞罗那“超级街区”为例

  • 核心策略是减少学校周边交通流量,并通过城市设计(如将学校与繁忙道路隔离、增加绿地)改善学习环境。
  • 巴塞罗那的“超级街区”:通过封闭住宅区内部道路禁止过境交通,优先考虑行人和自行车,增加绿地和游乐空间。
  • 效果:已证明能降低噪音和空气污染。例如,圣安东尼超级街区的日间平均噪音水平下降了3.5分贝(降低5.2%)。
  • 该模式使使用汽车的吸引力下降,促进了更宜居的步行城市。

情绪影响

  • 噪音不仅干扰学习,还会引起儿童的烦恼和焦躁情绪,对心理健康构成额外负担。

结论:交通噪音对儿童的认知发展、学习和长期健康构成严重威胁。城市通过减少交通和创新城市规划(如“超级街区”)来创建安静环境,是保护儿童的重要途径。

24. US Forest Service proposes protections for old-growth trees, without logging ban (www.opb.org)

美国林务局提议保护古树,但不禁止伐木

拜登政府发布了关于保护国家森林古树的拟议方案,为公众参与保护古树保护提供了新的机会。该提议以一份环境分析草案的形式提出,旨在指导国家森林优先保护古树,但并未包括全面禁止伐木的内容

提案与环保组织的期望存在差距

环保组织认为该草案虽是“好的第一步”,但存在不足。他们指出,草案最终政策必须“显著改进”,包括停止将古树送往木材厂的做法。俄勒冈州Wild森林项目负责人劳伦·安德森批评提案将过多决定权留给个别森林管理者,存在允许继续砍伐剩余古树的漏洞。她认为,除了极少数情况(如古树威胁到热门娱乐区或小径),砍伐古树的理由已经“非常、非常少”。

森林防火与主动管理的争议

美国林务局副局长克里斯·弗伦奇表示,为确保古树森林的长期存续,必须进行“主动管理”以应对野火、虫害和疾病。一些官员也指出,全面禁止伐木会削弱森林间伐能力,不利于在气候变暖背景下保护社区免受日益严重的野火侵害。

然而,对“主动管理”的理解存在分歧。波特兰律师苏珊·简·布朗指出,对某些森林而言,在规定火烧前砍伐小径树木是必要的,这是许多部落和科学家的共识,但“可以做得太过”。“关键问题是多少才算足够,多少又算过度。”此外,草案未涉及是否应允许一些森林无需任何间伐自然老化,这被认为是疏漏,特别是对卡斯卡德山脉西侧潮湿的森林而言,这些森林继续老化对野生动物至关重要。

提案背景与地方森林计划更新

该提案源于拜登总统2022年发布的行政命令,要求联邦限制伐木古树和成熟林木。林务局于2023年宣布将一次性修订其管理的全部128片森林的计划,此次草案是推动这一变革的后续步骤。但安德森认为,草案未能充分体现行政命令的要求,特别是没有涉及如何保护成熟林木(指尚未达到古树年龄的大树)。

该提案也与正在进行的《西北森林计划》更新相关。布朗是负责为该计划更新提供建议的顾问委员会成员。她表示,国家政策的修改不会对他们的工作产生重大影响,预计更具体的草案将于八月公布。此外,卡斯卡德山脉以东森林的《蓝山森林计划》修订工作也处于早期阶段,可能会带来更大变化。

提案不涵盖土地管理局(BLM)管辖土地

此次提出的古树保护措施仅适用于林务局管理的公共土地,不适用于土地管理局(BLM)的土地。BLM因在俄勒冈州砍伐古树而受到批评。BLM于今年4月通过的《公共土地规则》回应了拜登的行政命令,提及了古树的益处,但被部分保护主义者认为缺乏力度。安德森希望BLM能出台额外的古树保护措施。

近期,抗议者组织了集会和“树顶静坐”活动,以阻止BLM砍伐古树。保护组织指出,BLM长期以来一直在以防范野火和病害为由,对其土地上西部一些最后的古树进行过度砍伐,他们对此深表关切。

26. Deriving Dependently-Typed OOP from First Principles (arxiv.org)

这篇论文探讨了依赖类型面向对象编程的理论基础,通过第一性原理进行推导。论文的核心是解决表达式问题在依赖类型编程中的特殊表现:传统上,函数式语言易于通过新消费者(如打印或求值)扩展,而面向对象语言易于通过新生产者(新构造函数)扩展。然而,依赖类型编程几乎完全遵循函数式编程模型,其面向对象范式的探索尚不充分。

作者采用对偶性原则,不直接扩展现有面向对象形式,而是从一个熟悉的数据导向语言出发,通过系统使用去函数化再函数化变换,推导出其对偶片段。论文的主要贡献是:

  1. 提出一个包含两个对偶语言片段的依赖类型演算。
  2. 提供这两个语言片段之间保持类型和语义的变换方法(去函数化与再函数化)。
  3. 实现该语言及其变换,并通过该实现阐明依赖类型编程中的各种构造如何作为对偶现象的具体实例。

这项工作为依赖类型编程中面向对象范式的探索提供了理论基础,填补了编程语言设计空间中的空白。

27. Y combinator codex (2021) (phoe.github.io)

Y Combinator Codex (2021) 作品简介

Y Combinator Codex 是一件创作于 2021 年 1 月 13 日至 25 日(波兰克拉科夫)的书法艺术作品,灵感源自 emacsomancer 的同名作品。

物理规格与创作材料

  • 尺寸:420mm x 2400mm(42厘米 x 2.4米),两侧短边各留有约 10 厘米的白边。
  • 纸张:420mm 120g/m² 绘图仪纸。
  • 书写与绘画工具:Pilot Parallel 书法笔、Hero(英雄)与 Pelikan(百利金)墨水、Ecoline 水彩颜料、Ecoline 金属金色颜料以及 Vallejo 金属银色颜料。

作品品相

作品整体状况非常好。瑕疵仅包括纸张边缘附近的轻微褶皱,以及一处绿色花饰上方约 3 厘米的撕裂。

发售与慈善计划

该作品的相关交易将在 2021 年欧洲 Lisp 研讨会(European Lisp Symposium 2021) 期间进行,配套的 Web 服务平台也将在会议期间公布:

  • 公众可以购买该作品的印刷副本
  • 公众可以对原作进行竞拍。
  • 所有获得的财务收益将全部捐赠给与 Lisp 相关的组织。
28. Some fundraisers pay >90% of the funds to themselves (www.propublica.org)

摘要

文章揭露了一个由前电话募捐公司Outreach Calling相关人员Thomas Berkenbush和Alan Bohms等人运营的政治非营利组织(527组织)网络。这些组织以支持癌症患者、退伍军人、消防员等崇高事业为名进行募捐,但实际上将超过90%的资金用于行政费用和筹款成本,几乎没有用于声称的政治或社会目的。

核心问题与运作模式

  • 监管漏洞:这些组织依据税法第527条款成立,属于政治非营利组织,不受联邦选举委员会(FEC)管辖,其监管主要由国税局(IRS)负责,但监管被指松懈且记录难以公开获取。
  • 资金滥用:网络中的组织(如美国乳腺癌联盟、国家残疾退伍军人政治行动委员会等)在数年内募得超过3300万美元,但用于“选民倡导与外展”等实际政治活动的资金通常不足募集总额的1%。绝大部分资金流向了筹款公司和相关行政费用。
  • 人员关联:Thomas Berkenbush因之前在Outreach Calling的欺诈性募捐行为被罚款并被禁止从事慈善募捐,但仍被允许进行政治募捐。他创办了Office Edge LLC公司,从该网络中获得约86.6万美元报酬。Alan Bohms及其公司(Campaign Marketing Inc.等)也从该网络获得近150万美元。两人的亲属(如Bohms的姐妹和姑姑)担任多个组织的财务主管。

调查与应对

  • 调查方法:ProPublica通过将各组织提交给IRS的报告整理成可搜索数据库,揭示了它们之间的网络联系。这些组织在网站设计、捐款处理系统、IRS文件措辞、捐赠者与承包商以及会计师事务所使用上存在高度重叠。
  • 机构回应:在ProPublica调查过程中,部分组织在其网站上添加了几乎相同的“透明度声明”,声称大部分资金用于筹款和外展成本。IRS和FTC未对调查发现作出详细回应。纽约州总检察长办公室表示,根据和解协议,被告不得从事任何欺诈性筹款活动,但无法禁止其进行政治募捐。
  • 法律诉讼:该网络中的一个组织“国家警察与治安官联盟政治行动委员会”因使用预录语音致电潜在捐赠者而被提起集体诉讼,指控其违反联邦通信委员会(FCC)规定。

影响与捐赠者经历

  • 文章以退休人员Laurence Eggers为例,他向美国乳腺癌联盟等组织捐赠了数千美元,初衷是支持其所声称的事业。在得知这些组织几乎没有将资金用于实际目的后,他感到沮丧,认为自己被利用。
  • 这些组织通过频繁的电话募捐联系像Eggers这样的善心人士,利用他们的同情心进行筹款,但最终大部分资金流入了幕后运营者的口袋。

结论

该报道揭示了一个利用政治非营利组织身份规避慈善监管、将捐赠者资金主要转化为筹款和行政成本而非实际事业推进的系统性网络。其运作凸显了当前监管体系的漏洞以及公众获取透明信息的困难。

30. Review of Linux on Minisforum V3 AMD Ryzen Tablet (mudkip.me)

Minisforum V3 AMD 平板 Linux 使用评测摘要

背景与购买动机 作者在寻找一款便携的Linux设备,用于在咖啡馆或旅行时进行编程。在对iPadOS和Surface产品失望后,被Minisforum推出的V3平板吸引。该平板搭载AMD Ryzen 7 8840U处理器,配备14英寸2.5K 165Hz触摸屏、50.82Wh电池、USB4端口,并具备一个独特的“VLink” USB-C端口,可将其作为外部显示器使用。其1TB SSD和32GB RAM的配置售价6999元人民币(约968美元),作者认为价格合理且提前购买获得了免费键盘壳和廉价手写笔。官方声称支持Ubuntu 22.04和23.10。

初始体验与硬件印象 初始体验不佳,主要由于营销策略:免费的支架和键盘壳需在发布评价后才发货,严重影响了首日使用。预装的Windows 11 Pro系统存在一个导致无法创建PIN码的bug。然而,硬件本身表现出色:屏幕色彩、亮度优秀,165Hz刷新率显著提升了UI流畅度;2.5K分辨率虽非最优,但在KDE和Wayland下支持良好的分数缩放。

Linux系统适配情况 作者选择了Fedora KDE作为操作系统,看重其较新的内核、Wayland支持以及对安全启动和TPM全盘加密的良好支持。硬件兼容性出乎意料地好:

  • 功能正常:触摸屏、键盘、触控板、Wi-Fi、USB、蓝牙、休眠/睡眠、前置和后置摄像头、以及指纹识别器(开箱即用,可用于锁屏和sudo认证)均工作正常。
  • 问题与变通
    1. 自动旋转:加速度计未被系统识别,导致自动旋转功能失效。
    2. 音量键:仅在连接键盘时有效。
    3. 硬件视频解码:需从RPMFusion安装mesa-va-drivers-freeworld以启用H.264和HEVC解码。
    4. 快照工具:Timeshift与LUKS加密的btrfs不兼容,作者改用btrfs-assistantsnapper

作为平板的使用体验

  • 触控与手写:Linux下的触控体验良好。KDE在断开键盘时会自动进入“平板模式”以放大UI元素。手写笔支持良好,压感和悬停功能在Krita、Xournal++等应用中工作正常,165Hz刷新率提升了书写和注释体验。
  • 输入法:使用Fcitx5处理中日文输入(连接键盘时),Maliit作为断开键盘时的屏幕键盘,两者需手动切换。
  • Android应用:通过Waydroid运行,可安装Google Play和使用ARM转译。部分应用(如Google Play Books)运行良好,但整体体验不如原生Android平板,存在视频播放无硬件加速(导致耗电增加)和摄像头不工作等问题。

性能与电池续航

  • 性能:Ryzen 7 8840U性能强劲,在单核和构建任务上超越作者的M1 iMac和某些Intel桌面CPU。集成的Radeon 780M GPU能以中高画质在1200p分辨率下流畅运行《女神异闻录3 Reload》和《如龙:无限财富》等游戏。
  • 电池:在浏览网页、视频播放、笔记和轻度编程的混合使用下,续航约为6小时。虽不及Apple Silicon MacBook,但令人满意。
  • AI功能:设备因搭载XDNA NPU而被称为“AI PC”,但目前尚未有明确应用直接利用该NPU。

外接显示器功能 通过VLink端口,V3可在关机后作为外部显示器使用。

  • 兼容性:与作者的桌面PC工作正常,但与M1 Mac(使用USB-C线)不兼容。使用60Hz刷新率。
  • 潜力:此功能方便用于配置NAS或迷你主机等无头设备,且键盘壳可同时作为USB键盘使用。作者期待未来固件更新能改善兼容性,并希望能支持Nintendo Switch的TV模式。

其他细节与总结

  • 设计:外形类似Surface Pro,但支架为独立式,略增重量。设备密封,可维修性存疑。
  • 扬声器:音质不错,但在Linux下存在音量控制异常,疑似驱动问题。
  • 键盘:手感良好,右侧拥有完整的导航键(Home, Pg Up/ Dn, End)。
  • 噪音:白天使用时风扇安静,但深夜安静环境下可能出现轻微、类似硬盘的嗡嗡声,且不随负载变化。

总体评价 经过两周使用,作者认为Minisforum V3是一款近乎完美的便携Linux设备,在性能、多功能性和Linux兼容性之间取得了良好平衡,价格合理。它为搭载AMD APU且可兼任外部显示器的平板开了一个好头。虽然存在一些可通过固件更新解决的小问题,且对可维修性有担忧,但作者对其整体表现表示满意,并计划将其作为旅行和移动办公的主要设备。

31. CentOS Linux 7 will reach EOL on Sunday (www.redhat.com)

背景与目的

CentOS Linux 7 即将迎来生命周期结束(EOL)。由于 CentOS 源自 Red Hat Enterprise Linux (RHEL),用户迁移至 RHEL 可复用现有技术并获取更多功能与支持。红帽提供了多种工具与服务,协助用户平稳迁移并保持业务连续性。

核心迁移工具与方案

  • Red Hat Enterprise Linux for Third Party Linux Migration:专为 CentOS 7 用户设计的服务,包含 RHEL 订阅及就地转换工具。可将 CentOS 7 转换为 RHEL 7 并保留现有配置,同时提供长达 4 年的 RHEL 7 延长生命周期支持(ELS),为企业争取升级时间。
  • Convert2RHEL:免费且受完全支持的命令行工具。自动识别并用 RHEL 等效包替换 CentOS 软件包,实现系统就地转换。该工具保留自定义配置,显著降低重新部署成本并减轻管理员负担。
  • Red Hat Lightspeed (原 Red Hat Insights):通过在线服务提供针对特定环境的预转换评估指导和分步操作说明,简化迁移流程。

辅助支持与咨询服务

  • Red Hat Developer Subscription for Teams:允许现有红帽客户免费在开发环境中部署 RHEL,确保开发团队在与生产环境一致的可靠平台上构建和测试应用。
  • Red Hat Consulting (红帽咨询):针对大型环境或资源受限的组织,红帽专家提供迁移加速服务,协助识别和转换关键应用与工作负载,并提供后续技术赋能。

关键时间节点与注意事项

  • RHEL 7 维护结束 (EOM):RHEL 7 已于 2024年6月30日 达到 EOM 状态。
  • 升级与支持建议:迁移至 RHEL 7 后,建议尽快计划升级至最新版 RHEL 以获取完整功能。若暂不升级,可订阅 RHEL 7 的 延长生命周期支持 (ELS),获取针对 RHEL 7.9 的关键安全修复、紧急 Bug 修复和故障排除支持,服务有效期至 2029年5月31日
33. Elixir Gotchas (pragtob.wordpress.com)

Elixir 常见陷阱(Gotchas)概要

本文列举了 Elixir 语言中 10 个容易引起困惑或错误的行为,这些行为尤其在初学者中常见。许多陷阱源于 Elixir 与 Erlang 的渊源,以及语言设计上的历史因素。以下是各陷阱的总结:

  1. 数字列表在 IEx 中显示为文本:字符列表(charlists)本质上是整数列表,IEx 会尝试将其显示为可读文本。例如,[69, 108, 105, 120, 105, 114] 会显示为 ~c"Elixir"。这是因为字符列表(单引号或 ~c 前缀)是整数列表,而字符串(双引号)是 UTF-8 编码的二进制数据。一般建议使用字符串,字符列表主要用于与旧版 Erlang 库交互。

  2. 字符列表与字符串:两者是完全不同的数据结构。字符串("string")是二进制的,类似于大多数语言中的字符串;字符列表('charlist'~c"charlist")是整数列表。应优先使用字符串。

  3. 模式匹配中 %{} 匹配任何映射:模式 %{} 会匹配任何映射,而非仅匹配空映射。这是因为映射模式匹配检查结构是否包含,而非精确匹配。要仅匹配空映射,需使用守卫 map_size(map) == 0map == %{}

  4. 结构体是映射:结构体是带有 __struct__ 键的特殊映射。这意味着 %{} 模式或 is_map/1 检查会匹配结构体,甚至包括像范围(Range)和日期(Date)这样的内置类型。这可能导致非预期的代码执行。引入了 is_non_struct_map/1 守卫来应对此问题。

  5. 结构体不实现 Access 行为:不能使用方括号语法 struct[:key] 访问结构体字段。应使用点语法 struct.field。对于动态键访问,可以使用 Map.get/3 或结合 Access.key!/1 使用 get_in/2

  6. 关键字列表作为选项时的笨拙性:关键字列表是元组列表,顺序重要且键可重复,这使其难以进行模式匹配。例如,def option(warning: true) 仅匹配恰好为 [warning: true] 的列表。解决方案包括在内部将选项转换为映射或结构体,或使用 Keyword.get/3Keyword.validate/2

  7. 任何类型之间都可以比较:Elixir 允许任何类型的术语进行比较,遵循 Erlang 的项排序规则(如数字 < 原子 < 引用 < ... < 位串),不会抛出异常。这可能导致难以察觉的错误,例如比较数字和字符串。对结构体的比较会产生警告。

  8. 日期比较需使用专用函数:应避免直接使用比较运算符(如 >)比较日期结构体,而应使用 Date.compare/2 等函数。直接比较会触发警告,且可能意外得到正确结果但掩盖了逻辑错误。

  9. nil 进行键访问返回 nilnil["something"] 返回 nil,而非报错。这允许安全访问嵌套值(如 map[:a][:b] 在中间键缺失时不崩溃),但如果变量意外为 nil,则可能掩盖错误。可通过模式匹配来确保键存在。

  10. 模块属性作为常量:Elixir 没有真正的常量。模块属性(@attr)常被用作近似常量,但它们并非不可变——同一模块中可以重新定义。其值在定义点被求值,且不向外部暴露,需通过函数访问。社区正在努力引入更好的常量支持,例如库 defconst

结语:Elixir 社区已意识到这些陷阱,并在不断改进(如添加新守卫、增加警告)。文档中也常对这些行为进行解释。建议开发者查阅官方文档并关注语言更新。