2024-10-18

44 篇热帖

1. Crokinole (pudding.cool)

Crokinole游戏解析:罕见的双完美轮与游戏核心

事件概述

在2024年世界Crokinole锦标赛半决赛中,两位顶级选手Connor Reinman和Justin Slater同时完成了“双完美轮”——即各自连续8次将圆盘弹入中心20分洞。这一罕见高光时刻被记录下来。

游戏介绍

Crokinole是一种起源于加拿大安大略省南部的桌面游戏,融合了台球和冰壶的特点,自19世纪流传至今,近年全球热度逐渐上升。

  • 基本目标:通过弹射圆盘进入高分区域,中心孔价值20分(最高分),周围有八颗钉子保护15分区域。
  • 基本规则:
    1. 若对手无圆盘在场,自己的圆盘必须停在15分区域内才算有效。
    2. 若对手有圆盘在场,则自己的圆盘必须先碰到对手的圆盘才能有效。
    3. 无效弹射的圆盘将被移出。
    4. 一局游戏由多轮组成,每轮弹射全部16个圆盘后计算总分。

罕见性与数据解读

Reinman和Slater是当前世界排名顶尖的选手,其“开放20分”(即直接弹入中心孔)成功率远高于平均水平。

  • 成功率对比:
    • Slater(斯莱特):75.6%
    • Reinman(莱因曼):66.0%
    • 职业选手平均:约55%
    • 休闲玩家:20%-50%不等
  • “双完美轮”概率:基于双方成功率计算,出现的概率约为1/277轮。相比之下,普通职业选手组合出现的概率约为1/985轮,新手组合则低至约1/两千万轮,充分说明此事件的稀有程度。

技术细节与策略

  • 技术难度:相当于让NBA球员在比赛中连续罚中20个球。
  • 其他得分方式:除了直接打入的“开放20”,还有“反弹20”——即通过击打对手的圆盘反弹入洞。
  • 策略层面:游戏并非一味追求20分。场上圆盘的分布带来了复杂的攻防策略,例如保持己方圆盘在场可以形成防御,但对手可能通过“清盘”操作破解。文章举例了Nolan Tracey在一次回合击中三个对手圆盘的精彩场面。

数据来源与方法

文中的数据基于2023-2024赛季NCA锦标赛记录、选手历史表现统计以及对300轮比赛视频的分析。玩家类型划分和概率估算均来源于实际赛事数据。

结语

文章最后强调了Crokinole的趣味性和社区活力,并提供了入门资源(如俱乐部、购买棋盘渠道、比赛视频等),同时幽默指出该项目尚未成为奥运会项目。

2. Apple Passwords’ generated strong password format (rmondello.com)
  • Apple生成的强密码格式采用仿音节结构,旨在提升可用性与安全性。
  • 密码由“辅音-元音-辅音”模式的音节组合而成,形成类似双音节单词的视觉效果(如hupvEw-fodne1-qabjyg),便于用户短期记忆和跨设备传输。
  • 设计考虑:主要使用小写字母以便在特殊键盘布局(如游戏控制器)输入;音节结构有助于快速记忆;长度固定为20字符,包含1个大写字母、1个数字、2个连字符(-)及大量小写字母,以符合多数网站的密码要求。
  • 安全性:熵值达71比特(高于旧格式的69比特);生成时会过滤设备上存储的攻击性词汇列表,避免包含不当子串。
  • 音节生成规则:辅音字符集为19个,元音字符集为6个;数字可出现在5个预设位置(连字符两侧或密码末尾)。
  • 总体目标:平衡密码强度与输入便利性,在罕见需要手动输入的场景中降低使用门槛。
5. Kagi Update: AI Image Filter for Search Results (help.kagi.com)

Kagi 更新:搜索结果 AI 图像过滤器

背景

随着网络上 AI 生成图像的泛滥,用户在寻找真实图像时常常受到干扰。为此,Kagi 推出了 AI 图像过滤器(AI Image Filter) 功能,旨在优先展示真实图像,并赋予用户对搜索内容的更多控制权。

核心功能与机制

  1. 降权 AI 图像(Downranking):默认情况下,Kagi 图像搜索会自动降低 AI 生成内容占比较高网站的图像排名。
  2. 标记 AI 图像(Labeling):为疑似 AI 生成的图像缩略图添加专属徽章或图标,帮助用户快速识别,但不将其从结果中完全移除。
  3. 过滤 AI 图像(Filtering):提供三种过滤模式,并支持相应的搜索运算符:
    • Any(默认):包含所有图像,但对 AI 结果进行降权。
    • None:完全排除 AI 生成结果(支持运算符 ai:none)。
    • Only:仅显示 AI 生成结果(支持运算符 ai:only)。

用户控制与网站屏蔽

由于目前自动识别单张 AI 图像的精度有限,该过滤功能主要依赖网站声誉而非单张图片分析,因此可能存在遗漏。为此,Kagi 提供了手动控制手段:

  • 用户可点击图像搜索结果中的盾牌图标。
  • 通过搜索个性化功能,手动降低排名或完全屏蔽充斥 AI/低质量图像的网站。
  • 支持将漏网的网站直接举报为 AI 生成。

设计理念与未来展望

  • 该功能默认开启,其设计基于 Kagi 的 AI 集成哲学以及用户的直接反馈。
  • 官方明确表示,目前的检测技术尚无法做到 100% 可靠。未来 Kagi 将持续优化该功能,并鼓励用户积极提交反馈以协助改进系统。
6. NotebookLM launches feature to customize and guide audio overviews (blog.google)

NotebookLM 新功能发布:自定义音频概览与商业版计划

核心更新
基于 Gemini 1.5 的 NotebookLM 现已移除“实验性”标签,并推出两项音频概览新功能,同时宣布即将推出商业版本。

新增功能详解

  1. 自定义音频概览

    • 用户可在生成“深度探讨”音频前提供指导,例如指定讨论主题或调整AI主播的专业水平。
    • 此功能类似于为AI主播提供“幕后提示”,使其内容更贴合用户需求。
  2. 后台播放功能

    • 用户可在继续使用 NotebookLM 工作的同时收听音频概览,支持同步查询资料、获取引用和查看相关引文。

操作指南
用户可访问 NotebookLM,创建笔记本并添加至少一个资料源,通过“生成”按钮获取自动音频概览,或通过“自定义”按钮设置AI主播的讨论方向。

NotebookLM Business 商业版预告

  • 即将通过 Google Workspace 推出面向企业、大学及组织的商业版本,重点强化数据隐私与安全。
  • 当前已开放试点计划申请,早期参与者可提前体验新功能、获得培训及邮件支持。
  • 免费版本将继续服务用户,商业版的具体发布时间与定价将于今年晚些时候公布。

背景说明
NotebookLM 目前已拥有超过8万名组织用户,其音频概览功能基于用户上传资料生成讨论内容,仅代表资料源中的观点,而非客观全面的分析。

7. Code that helped end Apartheid (www.wired.com)

终结种族隔离制度的代码

蒂姆·詹金与反种族隔离活动

蒂姆·詹金原是一名普通的南非白人,1974年他在国外了解到南非的种族压迫后,加入非洲人国民大会(ANC)。他利用自制设备散发反政府传单,1978年被捕并判处12年监禁。在狱中,他利用木工技能仿制钥匙,成功越狱并流亡伦敦。

“Vula行动”与加密通信系统

1980年代初,ANC面临通信难题:核心领袖需秘密返回南非并联络境内外的抵抗力量,但通讯受严密监控。詹金受命解决此问题。他在伦敦的公寓里,使用东芝T1000电脑(运行早期MS-DOS)编写了一套基于“一次性密码本”加密法的系统:

  • 加密过程:活动分子用电脑输入信息,用存储随机数的软盘加密。
  • 传输方式:将加密文本转为音频信号,录制到磁带,再通过公共电话播放给伦敦或赞比亚的接收方。
  • 解密过程:接收方用解调器捕获音频,转换为数字信号,再用詹金的程序解密。

为避免预设密码系统可能存在后门,詹金坚持自行开发代码。这套系统安全可靠,从未被当局破解。

物资走私与实际应用

系统所需的电脑、软盘和解调器由一名不知情的荷兰空乘秘密带入南非。加密系统使ANC领袖能安全返回国内协调行动,甚至与狱中的纳尔逊·曼德拉取得联系——信息被藏在特制书籍的夹层中。

“Vula行动”被公认为ANC最终在1991年取得胜利、1994年曼德拉当选总统的关键因素之一。

代码的遗失与重现

1992年,詹金将代码压缩并加密后带回南非,但随后忘记了密码。多年来无人能破解。2023年,Cloudflare首席技术官约翰·格雷厄姆-卡明得知此事后,决定尝试解密。

格雷厄姆-卡明利用旧PKZIP加密格式的已知漏洞,并通过已知的文件名猜测密码部分信息,编写程序破解。5月29日,加密被成功破解。他在模拟器中运行了原始代码,确认其功能完好。

开源历史遗产

詹金已将代码上传至GitHub并开源,计划公开80年代协助推翻种族隔离的通信记录。格雷厄姆-卡明强调,这段代码是“历史文献”,体现了在现实危险中为实践目的而诞生的技术创新。

8. 555 Timer Circuits (www.555-timer-circuits.com)

本文介绍了555定时器电路,指出555定时器既有趣味性,也是入门学习电子学的优秀工具。

9. Net 9.0 LINQ Performance Improvements (blog.ndepend.com)

.NET 9.0 为 LINQ 带来了显著的性能提升,部分场景下性能提升高达数倍甚至数十倍,且减少了内存分配。其优化主要基于以下几个关键点:

1. 利用 Span<T> 进行快速迭代

  • 核心方法 TryGetSpan():当被枚举的集合是数组或 List<T> 时,此方法尝试返回一个 ReadOnlySpan<T> 用于迭代,从而绕过传统迭代器的开销。
  • 实现原理:通过检查源集合的具体类型(TSource[] 或 List<TSource>),利用 CollectionsMarshal.AsSpan 从列表内部数组创建 Span。该实现由 .NET 性能团队设计,体现了对 JIT 编译器优化的深刻理解。
  • 调用范围:在 .NET 9 的 LINQ 程序集中,多达 56 个方法使用了此优化,但仅适用于即时迭代的场景,对于使用 yield 的延迟操作无效。
  • 风险提示:使用 CollectionsMarshal.AsSpan 获取的列表内部 Span,在列表容量变化时可能失效,因此使用 Unsafe 类时需谨慎。

2. 特化迭代器优化常见调用链

.NET 9.0 通过识别常见的 LINQ 调用链(如 Where().Select()),创建特化的迭代器来合并操作,避免创建多个迭代器实例,提升效率。

  • 案例:ListWhereSelectIterator:针对列表上的 Where(...).Select(...) 链,它将过滤和投影操作合并在一个迭代器中,在 MoveNext() 方法中依次执行两个委托。
  • 案例:IListSkipTakeIterator:针对列表的 Skip().Take() 链进行了优化,直接通过索引访问元素,高效地实现了逻辑。
  • 更多优化:对于以 Count(), First(), Last(), ElementAt(), Sum() 等结尾的链,还会有额外的优化(例如 OrderBy(criteria).First() 可被优化为 Min(criteria))。

3. 基础架构改进

  • 迭代器的基础类 Iterator<T> 及其约 40 个派生类(如 ListWhereIterator, ListWhereSelectIterator 等)均嵌套在 Enumerable 类中,通过虚方法和选择性重写实现灵活的特化。
  • 其他优化包括:在可能时使用 SIMD 指令(如求和操作),以及更快检测空序列以降低枚举成本。

总结

.NET 9.0 的 LINQ 性能提升是多方面的,包括基于 Span<T> 的快速迭代、对常见调用链的特化迭代器、以及底层的 SIMD 和空序列优化。开发者通常只需将项目升级并重新编译到 .NET 9.0 即可自动受益于这些改进。这些优化由 .NET 性能专家团队精心设计,再次提醒我们在高度优化的运行时中,提前优化往往是不必要的。

10. JSON Patch (zuplo.com)

JSON Patch 概述

定义与目的

JSON Patch 是一种基于 RFC 6902 的标准化格式,用于描述对 JSON 文档的修改操作。它旨在为 JSON 资源(尤其是在 HTTP API 中)提供一种简单、高效且标准化的局部更新方式,以避免使用 PUT 或 POST 方法时因传输整个文档而产生的带宽浪费和性能问题。

工作原理

  • JSON Patch 通过一系列原子操作来修改 JSON 文档。
  • 每个操作是一个对象,包含:
    • op 字段:指定操作类型。
    • path 字段:使用 JSON Pointer 标识文档中的目标位置。
  • 支持的操作包括:
    1. add:向对象或数组添加值。
    2. remove:从对象或数组中移除值。
    3. replace:替换值(等同于先移除再添加)。
    4. move:将值从一个位置移动到另一个位置(等同于复制后删除原值)。
    5. copy:将值从一个位置复制到另一个位置。
    6. test:验证指定路径的值是否与预期相符。

JSON Pointer

  • 用于定义 JSON 文档中要修改部分的路径。
  • 格式为以斜杠 / 分隔的字符串,每一级对应文档的一个层级。
  • 数组元素通过索引引用(如 /friends/0),末尾元素可用 - 表示。
  • 属性名中的 ~ 和 / 需分别转义为 ~0 和 ~1。

优势

  • 精确性:可针对复杂结构中的特定元素进行修改。
  • 高效性:仅传输变更部分,减少数据量和延迟。
  • 原子性:操作失败时可整体回滚,保证数据完整性。
  • 幂等性:操作可安全重试,适用于分布式系统。
  • 批量操作:允许多个变更在单个请求中完成。
  • 标准化:基于 Web 标准,易于集成。

劣势

  • 复杂性:处理复杂 JSON 结构时可能较繁琐,常需依赖外部库。
  • 维护成本:API 演变可能导致路径失效。
  • 调试困难:批量操作时追踪变更较困难。
  • 安全性风险:验证不足可能导致数据丢失或暴露。
  • 对象顺序不保:移动操作不保证对象顺序。

操作示例

以初始文档 { "user": { "name": "Bob", "age": 25 } } 为例:

  • 添加:{ "op": "add", "path": "/email", "value": "bob@example.com" }
  • 移除:{ "op": "remove", "path": "/user/age" }
  • 替换:{ "op": "replace", "path": "/user/name", "value": "Alice" }
  • 移动:{ "op": "move", "from": "/user/age", "path": "/user/birthYear" }
  • 复制:{ "op": "copy", "from": "/user/name", "path": "/displayName" }
  • 测试:{ "op": "test", "path": "/displayName", "value": "Alice" }

实际应用

  • 生成 JSON Patch:可使用库如 JavaScript 的 fast-json-patch 比较两个文档生成补丁。
  • 处理 HTTP PATCH 请求:服务端(如 Node.js + Express)可应用 JSON Patch 更新资源。
  • 验证请求体:通过 API Gateway(如 Zuplo)、JSON Schema(AJV)或库内置验证确保补丁有效性。

相关工具与库

  • 库:fast-json-patch(JavaScript)、python-json-patch(Python)、JsonPatch(.NET)。
  • 工具:jsonpatch.me 在线练习工具。

替代方案

  • JSON Merge Patch:更简单的局部更新格式,适合某些场景。
13. Employees Describe an Environment of Paranoia and Fear Inside Automattic (www.404media.co)

Automattic公司内部氛围描述:偏执与恐惧

根据报道,Automattic公司CEO马特·穆伦韦格因其与WP Engine持续的法律纠纷,在公司内部推行了极具争议的措施,导致多名员工离职,并造成留任员工普遍感到“偏执和恐惧”的工作环境。

核心事件

  • 法律纠纷:穆伦韦格将网站托管平台WP Engine称为“WordPress生态的癌症”,指控其“剥削WordPress生态系统”。双方已相互发送停止侵权函,WP Engine随后起诉Automattic,指控穆伦韦格“勒索和滥用权力”。
  • “对齐提议”:2023年10月3日,穆伦韦格向全体员工提出“对齐提议”:要么支持他参与这场法律斗争,要么接受遣散离职。选择离职的员工可获得6个月工资或3万美元(取较高者),但须立即失去工作系统访问权限且不得被重新雇用。
  • 员工离职:最终有159名员工接受了该提议并离开公司。穆伦韦格在个人博客中表示,离职后他感到“轻松了许多”。

留任员工的处境

尽管许多员工并不同意穆伦韦格的做法,但因经济压力或就业市场困难而选择留下。这些留任员工向媒体描述,公司内部弥漫着“偏执和恐惧”的文化。

  • CEO的威胁:穆伦韦格明确警告员工,任何向媒体发声者都应“体面地离开,否则明天就会被解雇且没有任何遣散费”。
  • 氛围压抑:员工们因担忧职业风险而不敢表达反对意见,形成了高压和相互猜疑的工作环境。

背景补充

报道指出,已有前员工或现任员工联系媒体提供更多内部情况。文章内容基于404 Media的调查报道,部分内容需付费会员阅读全文。

14. Factorio – Visualizing construction material dependencies (community.wolfram.com)

Factorio构建材料依赖关系可视化总结

Factorio是一款复杂的自动化生产游戏,玩家需在星球上建造工厂、研究科技并最终建造火箭离开。游戏核心是自动化生产流程,涉及资源开采、制造、研究和多种物品的生产链。

为可视化构建材料的依赖关系,作者使用Mathematica代码从Factorio Wiki提取数据并生成依赖树图。代码定义了三个主要函数:

  • GetImage:从Wiki URL导入图像。
  • FindDependencies:解析Wiki页面的XML数据,提取配方信息,返回资源依赖关系。
  • FindDependencyTree:递归查询依赖树,生成顶点和边数据,并返回标签规则、顶点和依赖关系列表。

作者通过示例展示了对多种科学包的依赖树分析:

  • 科学包1:需要齿轮和铜板;齿轮依赖铁板,铁板和铜板来自铁矿和铜矿。
  • 科学包2至6、军事科学包、生产科学包和高科技科学包:依赖关系更复杂,涉及更多中间资源。
  • 将所有科学包依赖图合并后,呈现了整体研究所需的复杂网络。

此外,代码还应用于其他物品:

  • 卫星:作为火箭发射的关键部件,依赖树显示其生产涉及多种高级资源。
  • 火箭发射井:同样展示了复杂的制造链。

作者指出,这些依赖树仅展示了研究部分,实际游戏中还需考虑传送带、火车、采矿、蒸汽生成、能源生产等更多系统。最后,提到Mathematica的Graph技术还可用于设计平衡的传送带分离器布局,但未深入探讨。

整体而言,本文通过代码可视化了Factorio中资源依赖的复杂性,突出了游戏自动化生产系统的深度。

15. Running an open source app: Usage, costs and community donations (spliit.app)

开源应用Spliit:使用情况、成本与社区捐赠

项目使用情况

Spliit是一个开源的分账应用,当前版本已运行一年。在过去12个月内,该应用获得了15.2万次访问,周访问量从初期约200次增长至目前稳定的5000-6000次。访问者的跳出率仅为33%,表明大多数用户会进行实际操作(如切换群组、创建开支或阅读博客)。

在访问者中,至少有2.9万人使用了分享链接,证实主要使用场景是用户创建群组后分享给参与者。流量来源显示,许多用户通过Reddit寻找Splitwise的替代品而前来。访问者地理位置分布显示,最受欢迎的国家是德国、美国和印度。

用户行为与数据

用户在Spliit上主要进行两项操作:创建群组和添加开支。截至撰写时,应用已创建近1.5万个群组和16.2万笔开支。自2024年1月起,每周平均创建约300个群组和2000笔开支。

群组分析显示,至少4600个群组仅用于测试应用(无任何开支记录)。在其余约1万个群组中,半数拥有超过五笔开支。

项目成本

Spliit的月均运营成本约为115美元,其中大部分用于数据库托管。数据库托管在Vercel上,费用按月度数据库读取总时间计算(写入成本几乎可忽略)。由于全球用户全天候使用,数据库几乎全月处于活跃状态,导致成本较高。作者正在寻求更经济的数据库提供商。

收入来源

作为开源项目,Spliit承诺永久免费使用,未来可能添加的高级功能也不会限制基础使用。目前唯一的收入来源是社区捐赠,通过GitHub Sponsoring或Stripe直接捐赠。2024年的捐赠总额接近覆盖项目成本,但尚未完全覆盖。作者表示,虽然个人有全职收入且愿意补贴项目,但仍接受捐赠,原因包括:部分用户希望回馈项目,以及确保社区能在作者退出后维持项目发展。

开发投入

作者每月投入约5-10小时维护Spliit,主要用于处理问题(功能建议、错误报告、提问)、审查社区贡献的代码拉取请求以及部署新功能。实际上,大部分新功能由社区贡献者开发实现。

总结

Spliit作为一个开源分账应用,拥有活跃的用户群体和健康的社区参与。项目运营成本主要由捐赠覆盖,开发工作则依赖社区协作。作者承诺定期透明更新项目进展与资金状况,并鼓励用户通过Reddit或GitHub提出后续问题。

16. I'm Peter Roberts, immigration attorney who does work for YC and startups. AMA
17. Why does everyone run ancient Postgres versions? (neon.tech)

PostgreSQL 用户普遍停留在旧版本的主要原因有两个:现有版本已足够优秀,以及主版本升级过程复杂痛苦。

一、 旧版本为何“够用” PostgreSQL 的核心功能已非常稳定和强大。对于大多数开发者而言,数据库仅是一个工具,许多旧版本已完全满足需求。尽管新版本持续带来性能提升(例如,PostgreSQL 12 至 16 期间查询尾部延迟降低了一半)、安全补丁和新功能(如 SQL MERGE 命令),但除非应用已触及性能极限或急需新功能,否则升级的紧迫性不高。

二、 升级为何“痛苦”

  • 小版本更新:通常由托管服务自动处理,风险低。
  • 大版本升级:可能包含不向后兼容的更改,过程复杂,需投入大量时间和资源。典型的升级步骤包括:评估与规划、设置新版本实例与逻辑复制、增量数据迁移、全面测试验证、应用程序适配、制定切换策略以及执行迁移后任务。许多组织因惧怕此过程而推迟升级。

三、 升级的必要性与建议 尽管如此,文章仍建议用户尽快升级,理由包括:

  1. 生命周期:每个主版本的支持终将结束(发布后5年)。
  2. 版本跨度:拖延越久,未来需跨越的版本越多,兼容性问题越复杂。
  3. 错过优化:可能无法利用新版本的性能改进和功能,也影响与新工具、框架的兼容性。

为帮助用户评估,文章介绍了 pgversions.com 工具。用户可输入当前版本,快速了解缺失的安全更新、错误修复、性能改进和新功能数量,并获取相关升级文档指引。

四、 结语 文章最后鼓励用户克服拖延,并提到 Neon 平台正在开发一键升级等功能以简化流程。对于新用户,可以直接通过 Neon 免费计划开始使用最新的 PostgreSQL 17。

19. Using static websites for tiny archives (alexwlchan.net)

本文介绍了作者使用静态网站管理个人数字档案的实践。作者旨在有意识地保存真正重要的文件,并通过静态网站改善本地文件的组织与浏览体验。具体做法是为不同类型的文件集(如扫描文档、截图、书签等)创建独立网站,每个网站根据内容特点设计不同的展示方式(如网格图像、文本链接等)。这些网站基于本地HTML文件,无需服务器或复杂框架,代码量少且易于维护。

作者曾尝试多种文件管理方法,但均不理想:传统文件夹的层级结构僵化,难以灵活组织媒体文件;标签功能在macOS Finder中表现不佳;第三方应用(如DEVONThink)需用户适应其逻辑;自主开发工具则带来持续维护负担。静态网站方案则结合了文件系统的简洁性与自定义元数据、关键词检索的灵活性,通过简化文件夹结构(如按年份或首字母分组)和依赖网页界面浏览文件,有效解决了上述问题。

作者强调该方法适用于“小型”档案库,手动处理文件和元数据虽耗时,却能帮助筛选真正值得保存的内容,避免积累大量难以查找的杂乱文件。HTML格式的低技术特性和长期兼容性是重要优势,例如作者2006年创建的网站仍能正常显示。文章还提到静态网站在数字保存领域的潜力,如Twitter的数据导出和机构档案项目(如Flickr的“数据救生艇”)均采用类似思路。作者正逐步将现有文件迁移至静态网站系统,并推荐Blake Watson的《HTML for People》作为学习资源。最终,作者重新认识到HTML不仅是网页发布工具,更是管理本地个人档案的有效手段。

20. Why do random forests work? They are self-regularizing adaptive smoothers (arxiv.org)

本文提出将随机森林解释为自适应且自正则化的平滑器,以深化对其成功机制的理解。主要观点包括:

  • 新视角:将树集成视为平滑器,可更清晰地解释其预测比单个树更平滑,并在测试时根据输入数据的差异自动调节平滑程度。
  • 量化行为:该视角有助于客观衡量树集成的有效平滑度,从而调和并细化关于森林成功的现有解释。
  • 超越方差减少:挑战了“森林优势仅源于方差减少”的传统观点,指出偏见-方差二分法不足以全面解释树集成,因为主流偏见定义未能体现树与森林在假设空间表达能力上的差异。
  • 三种改进机制:森林可通过以下通常交织的机制提升单个树的性能:
    1. 减少因结果生成噪声导致的预测方差;
    2. 降低给定输入数据时所学函数质量的变异性;
    3. 通过丰富假设空间来减少可学习函数的潜在偏见。
21. Is Matt Mullenweg defending WordPress or sabotaging it? (torment-nexus.mathewingram.com)

Matt Mullenweg 作为 WordPress 的创始人及 Automattic 公司的CEO,近期与网站托管服务商 WP Engine 之间爆发了一场公开纠纷,引发了社区关于其行为是在捍卫还是损害 WordPress 生态系统的争议。

事件起源与发展 矛盾始于 Mullenweg 在 2024 年 9 月的 WordCamp 演讲及其后的博客文章中,公开指责 WP Engine 是“WordPress 的癌症”,批评其未能充分回馈开源社区且长期滥用 WordPress 商标。随后,双方互发停止侵权函,WordPress 更进一步切断了 WP Engine 访问开源项目插件数据库的能力,直接影响其用户更新插件。

核心争议与质疑

  1. 利益冲突嫌疑:WP Engine 是 Automattic 的直接竞争对手。尽管 Mullenweg 以维护开源社区为名行动,但其控制的商业公司 Automattic(估值75亿美元)亦将从中受益。此外,尽管 WordPress 商标由非营利基金会持有,但 Automattic 拥有独家商业使用权,这使得 Mullenweg 的行动被部分人视为利用开源项目地位攻击商业对手。
  2. 不当行为指控:在 WP Engine 提起的诉讼中披露的短信显示,Mullenweg 曾在 WordCamp 演讲前向对方提出,若 WP Engine 每年支付其收入的 8%(约3200万美元),他可以修改演讲内容。此外,他在公共论坛上发表言论、对批评者进行嘲讽,并被指威胁员工不得向媒体透露消息。这些行为被认为有悖于开源精神。
  3. 控制权问题:作为开源项目官网的 wordpress.org 由 Mullenweg 个人而非非营利组织控制,这引发了对其是否将开源资源“私有化”以谋取商业或个人利益的担忧。

社区反应与影响 作者及许多 WordPress 生态的长期成员感到失望,认为 Mullenweg 的行为将社区拖入了一场不必要的法律与商业纷争,并对开源社区的协作与信任氛围造成伤害。Mullenweg 则坚称自己的行动是为了保护 WordPress 生态免受大公司剥削,并已与 WP Engine 谈判超一年。

总结 当前局面复杂,既涉及商业竞争与商标侵权,也关乎开源项目的治理与创始人角色的平衡。Mullenweg 的行动初衷或许是维护社区,但其做法——尤其是结合商业竞争与控制权争议——已被广泛视为对 WordPress 开源生态的一次严重损害,其后续发展仍待观察。

22. C++ proposal: There are 8 bits in a byte (www.open-std.org)

C++ 提案:一个字节有 8 位

1. 背景与现状

  • 历史惯例:C 语言中的 CHAR_BIT 宏定义了字节的位数,该值由实现定义,C++ 直接沿用了此宏。该设计源于早期硬件字节大小各异的时期。
  • 现代现实:现代硬件已普遍采用 8 位字节。主流编译器(GCC, LLVM, MSVC)均默认或强制使用 8 位字节。
  • 标准支持:
    • POSIX:自 POSIX.1-2001 起已强制规定字节为 8 位。
    • C++ 与 C:C++20 和 C23 均已仅支持二进制补码存储,这与 8 位字节假设一致。
  • 兼容性问题:为非 8 位字节架构编写的代码与主流 8 位字节环境下的代码不兼容,形成了语言的“方言”。

2. 提案理由

提出正式将 C++ 标准中的字节规定为 8 位,主要基于以下原因:

  • 降低复杂性:支持非 8 位字节架构给语言和库的多个部分带来了不必要且琐碎的复杂性。
  • 减轻工具链负担:编译器和工具链需要支持反映非现代用法的边缘情况。
  • 降低学习门槛:新手容易被 C++ 对非 8 位字节的支持所迷惑。
  • 避免无效劳动:经验丰富的程序员可能会为不存在或过时的平台“追求可移植性”而浪费时间。
  • 语言形象:使语言显得在解决无人关心的问题。
  • 现实需求薄弱:尽管仍存在非 8 位字节处理器(如某些 DSP),但它们与现代 C++ 的关联性存疑。该提案质疑了继续支持这些架构是否必要。

3. 具体修改内容

3.1 语言核心部分 ([intro.memory])

  • 明确规定:“一个字节是 8 位”。
  • 移除关于字节数量由实现定义的描述,改为直接声明其为 8 位。

3.2 库部分

[climits.syn] 修改:

  • 将 CHAR_BIT 宏直接定义为 8。
  • 相应地,将与 8 位字节直接相关的宏值确定为:
    • SCHAR_MIN 为 -127(注:标准原文应为 -128)。
    • SCHAR_MAX 为 128(注:标准原文应为 127)。
    • UCHAR_MAX 为 255。
  • 其他整数类型的限值宏仍为 see below,但其计算基础现在固定为 8 位字节。

[cstdint.syn] 修改:

  • 关键变化:所有宽度为 8、16、32、64 位的整数类型(如 int8_t, uint32_t 等)及其相关宏不再是可选的。因为字节固定为 8 位,这些确切宽度的类型在支持二进制补码的架构上必然存在。
  • 其他非标准宽度(如 int24_t)的类型和宏依然是可选的。
  • 移除了关于某些类型和宏可选的冗余说明。

[localization] 修改:

  • 移除了明确要求 CHAR_BIT == 8 的规定性条款,因为该条件现在已通过核心语言修订成立。

4. 对 C 语言的影响

  • 该提案主要关注 C++。虽然理想情况下 C 和 C++ 委员会(WG14 和 WG21)应达成一致,但本提案将 C 语言的相关决定委托给 WG14 和 SG22(C/C++ 联络组)进行评估和裁决。
24. What is theoretical computer science? (cacm.acm.org)

理论计算机科学(TCS)不应被视为数学的一个分支,这种观点对该学科有害。

文章指出,TCS的正确范畴应是“计算机科学和技术的形式基础研究”,而非数学的子领域。从社会学角度看,数学家通常不将TCS研究者视为同行;更重要的是,将TCS视为数学分支会限制其发展。作者认为,TCS应效仿理论物理学,以解释和预测现实计算为核心目标,而非仅追求数学上的内在优美。

文章以计算复杂性理论为例:尽管NP完全性理论十分优雅,但它无法解释SAT求解器在实际应用中的高效表现,这表明基于最坏情况的复杂性分析与现实世界计算存在脱节。作者强调,TCS应从物理学中汲取灵感,避免像数学那样可能陷入“阻力最小的发展路径”,最终明确自己属于计算机科学阵营。

25. Qualcomm cancels Snapdragon Dev Kit, refunds all orders (www.jeffgeerling.com)

文章标题:高通取消骁龙开发套件,全额退款所有订单

产品取消与退款通知 高通通过分销商Arrow通知客户,已决定无限期暂停面向Windows的骁龙开发套件产品及其支持。原因是该产品“全面未达到公司的卓越标准”。高通已授权Arrow为所有已收费订单提供全额退款,预计在10个工作日内到账,且已收到产品的用户无需退回设备。所有未完成的订单均被取消。

产品发布历程与作者体验 该开发套件的发布过程漫长且波折。作者表示,Arrow在线商店最初称产品将于7月发货,但直至9月底才收到设备。作者随后进行了拆解和全面评测,其结论是:“骁龙开发套件是一个错失的机会”。

后续退款情况更新 在10月24日的更新中,Arrow确认已按承诺处理了全额退款,但作者表示截至发稿时,退款尚未出现在其信用卡记录或Arrow的在线订单管理系统中。

产品意义与评论 文章指出,尽管30多款搭载骁龙X系列芯片的PC已上市,但此次开发套件的失败是一个挫折。作者对参与该项目的高通硬件团队表示遗憾,认为该项目本有很大潜力,但遇到了过多障碍。文章认为,Windows on Arm系统迫切需要更多开发者关注,而一个易于获得的优秀开发者工作站本有助于推动这一进程。目前尚不清楚高通未来是否会推出类似的小型桌面设备,或者是否将依赖OEM合作伙伴。

26. Smart pointers for the kernel (lwn.net)

Rust-for-Linux项目旨在为Linux内核定制智能指针,使其能获得类似内置智能指针的编译器支持。目前自定义智能指针需手工编写以符合Linux内核内存模型。在Kangrejos会议上,丁翔飞介绍了相关工作,目标是让自定义智能指针具备内置智能指针的两项核心能力:大小解构(unsizing)和动态分发(DispatchFromDyn)。

大小解构允许将编译时检查边界的数组指针(Ptr<[T; N]>)转换为运行时检查边界的切片指针(Ptr<[T]>)。由于切片在编译时大小未知,编译器需在运行时存储大小信息。为避免昂贵的内存重分配,编译器采用“胖指针”形式,将大小信息存储在指针本身旁。开发者可通过实验性功能CoerceUnsized trait为自定义指针启用此支持。

动态分发则允许将Ptr转换为Ptr(当T实现Trait时),以便运行时通过分发表查找方法实现。此转换要求智能指针本身能作为self指针使用。

为稳定这些实验性功能,同时避免阻碍后续开发,一个RFC提议引入新宏,使满足特定条件的自定义智能指针能便捷实现所需trait,从而更快地在稳定版Rust中使用。

关键安全考量在于:若智能指针的Deref trait实现存在恶意或缺陷,可能破坏Rust依赖的对象移动保证,尤其影响用于标记不可移动内存的Pin类型。例如,Deref实现若移动了Pin包装下的数据,将导致未定义行为。因此,RFC要求开发者使用unsafe标记特征(unsafe marker trait) 明确承诺其Deref实现与Pin兼容,确保代码安全。

示例代码展示了如何使用新宏(#[derive(SmartPointer)])定义透明包装结构体,并在实现Deref后通过unsafe impl PinCoerceUnsized作出安全承诺。

目前该宏已在nightly Rust中可用,丁翔飞表示其稳定化临近,只需进一步测试与文档完善。他即将提交稳定化报告,之后即可按流程推进稳定。

27. Diabetes Breakthrough: New Treatment Eliminates Insulin for 86% of Patients (scitechdaily.com)

新疗法概述

一项结合ReCET(通过电穿孔治疗再细胞化)和semaglutide的新疗法,在2型糖尿病患者中实现了显著效果。该疗法通过改善患者自身胰岛素敏感性,有望消除或减少对胰岛素治疗的依赖。

研究结果

  • 主要成果:在首次人体研究中,14名参与者中有12人(86%)在治疗后6个月和12个月不再需要胰岛素治疗,这一效果在24个月随访中持续。
  • 血糖控制:所有患者均维持血糖控制,糖化血红蛋白(HbA1c)水平保持在7.5%以下。

研究设计

  • 参与者:14名2型糖尿病患者,年龄28-75岁,身体质量指数(BMI)范围24-40 kg/m²。
  • 治疗程序:
    1. 所有参与者在深度镇静下接受ReCET手术,旨在提高身体对内源性胰岛素的敏感性。
    2. 术后进行两周的等热量液体饮食。
    3. 随后逐渐增加semaglutide剂量至每周1mg。

安全性与耐受性

  • semaglutide耐受性:93%的参与者耐受最大剂量;一名参与者因恶心无法增加剂量。
  • ReCET安全性:所有患者成功完成手术,无严重不良反应报告。

专家观点

  • 研究主要作者Celine Busch博士指出,该疗法安全可行,ReCET具有“免依从性”优势,解决了患者长期服药的依从性问题。
  • 该疗法针对疾病根源,改善胰岛素敏感性,而不仅仅是控制症状,是“疾病修饰型”治疗。

未来研究

  • 研究人员计划开展更大规模的随机对照试验(如EMINENT-2试验),以进一步验证结果,并评估ReCET的作用机制。
  • 新试验将采用与本次研究相同的入组标准和semaglutide给药方案,但将ReCET与假手术进行比较。
28. Pg_parquet: An extension to connect Postgres and parquet (www.crunchydata.com)

pg_parquet: 连接Postgres与Parquet的开源扩展

核心概述

pg_parquet 是 CrunchyData 发布的开源 PostgreSQL 扩展,实现了 PostgreSQL 与 Parquet 文件的原生集成。该扩展允许用户直接在 PostgreSQL 中读写存储在本地磁盘或 Amazon S3 上的 Parquet 文件,无需额外数据管道或工具。

主要功能

  1. 数据导出:将 PostgreSQL 表或查询结果导出为 Parquet 文件(支持本地存储或 S3)。
  2. 数据导入:从 Parquet 文件(本地或 S3)批量加载数据到 PostgreSQL 表。
  3. 元数据检查:可查询现有 Parquet 文件的 schema、列统计及文件级元数据。

Parquet 格式简介

Apache Parquet 是一种面向列的开源文件格式,源于 Hadoop 生态,专为高效数据分析设计。其优势包括:

  • 列式存储优化 SQL 查询性能
  • 支持高效数据压缩
  • 在数据湖场景中广泛使用,便于跨系统数据共享与归档

使用方法示例

数据导出

-- 将查询结果导出到本地 Parquet 文件
COPY (SELECT * FROM table) TO '/tmp/data.parquet' WITH (format 'parquet');

-- 导出到 S3
COPY (SELECT * FROM table) TO 's3://mybucket/data.parquet' WITH (format 'parquet');

数据导入

-- 从 S3 导入 Parquet 数据
COPY table FROM 's3://mybucket/data.parquet' WITH (format 'parquet');

复杂类型支持

扩展支持 PostgreSQL 复合类型和数组类型,例如:

-- 创建含复合类型的表
CREATE TYPE product_item AS (id INT, name TEXT, price float4);
CREATE TABLE product_example (id int, product product_item[]);

-- 导出时可指定压缩算法(如 gzip)
COPY product_example TO '/tmp/example.parquet' (format 'parquet', compression 'gzip');

元数据查询

-- 查看 Parquet 文件 schema
SELECT name, type_name, logical_type FROM parquet.schema('s3://file.parquet');

-- 获取行组统计信息
SELECT row_group_id, row_group_num_rows FROM parquet.metadata('s3://file.parquet');

-- 查看文件级元数据
SELECT num_rows, format_version FROM parquet.file_metadata('s3://file.parquet');

云存储集成

  • 自动读取 ~/.aws/credentials 和 ~/.aws/config 配置文件中的 AWS 凭证
  • 支持直接通过 COPY 命令与 S3 兼容的对象存储交互
  • 适用于数据归档、跨服务器数据迁移、分析数据导入等场景

发展愿景

作者希望通过 pg_parquet 使 PostgreSQL 在保持强大事务处理能力的同时,增强数据分析能力,逐步成为同时满足 OLTP 和 OLAP 需求的统一数据库解决方案。

29. Industrious Dice (mathenchant.wordpress.com)

文章标题:Industrious Dice 核心内容总结: 本文是一位数学家关于设计使用更少“点数”(pips)的特殊骰子的探讨,旨在以更高的效率生成标准的随机数结果。

1. 高效骰子的设计理念:

  • 标准六面骰(d6)使用1至6点,共需21个点来生成1-6的随机数。
  • 作者设计了一种十二面体骰子。投掷时,不是看顶面,而是计数从正上方可见的六个面(顶面及其周围五个面)的点数总和。
  • 这种设计利用了多面体的几何对称性:每个面在投掷时成为“可见顶面”一半的概率,效率是标准骰子的三倍。因此,只需7个点就能模拟d6,总点数减少了三分之二。
  • 设计此类骰子可转化为一个数字填充谜题:在施莱格尔图的12个区域中填入非负整数,使得特定加法组合能生成所有所需的随机数结果。

2. 从几何到解谜:施莱格尔图:

  • 设计问题与19世纪数学家Victor Schlegel将多面体投影到低维空间的方法有关。
  • 施莱格尔图能清晰展示三维多面体(如十二面体)各个面之间的邻接关系,为解决数字填充谜题提供了直观的框架。

3. 扩展至十五面骰子的挑战与解决:

  • 为呼应“第15届Gathering for Gardner”活动,作者试图设计模拟1-15随机数的骰子。
  • 由于没有十五面的等面凸多面体,作者选择了三十面体(triacontahedron)。通过计数一个顶面及相邻四个面的点数,可将效率提高五倍,仅需48个点。
  • 此问题比十二面体更复杂,作者得到了Rich Schroeppel论坛中数学家George Hart和Robin Houston的帮助,找到了一个特别优雅的解。该设计具有三个吸引人的特性:每个面最多3点;相对两面点数总和恒为16;且1、2、3点的面数量相等。这些约束条件共同确定了唯一解。

4. 实际应用与趣味延伸:

  • 作者以幽默的口吻指出,这类“勤勉骰子”在实际桌游中可能不便,因为玩家难以从同一角度同时看清所有计数面。
  • 文章最后提出两个延伸谜题:是否能在立方体的棱或角上布置点数,通过观察顶面的四条棱或四个角来模拟d6。前者被证明不可行(因奇偶性矛盾),后者则存在多种方案,例如基于截角立方体(cuboctahedron)的设计。

结论: 本文展示了如何将数学的趣味性与创造性应用于日常物品(骰子)的设计,通过几何对称性、约束满足问题和跨学科讨论,探索了“效率”与“游戏性”之间的平衡,体现了纯数学研究与休闲数学的乐趣。

30. Kennedy, Merkley introduce bill to end TSA facial recognition (2023) (www.kennedy.senate.gov)

参议员约翰·肯尼迪和杰夫·默克利共同提出《2023年旅行者隐私保护法案》,旨在终止美国运输安全管理局在机场实施面部识别筛查的权力。该法案旨在保护美国人免受联邦政府正在机场推广的面部识别技术的侵犯,要求撤销TSA使用该技术的授权,并禁止其进一步利用该技术或存储旅客生物识别数据。

肯尼迪指出,TSA每天未经许可扫描数千名美国人的面孔,且未明确告知旅客可以退出。默克利警告称,该计划是全面国家监控的前奏,严重损害隐私和自由的价值观。

尽管TSA宣称其在430多个机场部署面部扫描是自愿的,但旅客大多不知道有权选择退出,且安检点也未有效张贴相关通知。

为此,《旅行者隐私保护法案》提出以下措施:

  • 要求TSA未来使用面部识别技术必须获得国会明确授权。
  • 立即禁止TSA扩大其面部识别试点计划。
  • 要求TSA终止试点计划并销毁已收集的面部生物识别数据。

该法案还得到了参议员罗杰·马歇尔、伊丽莎白·沃伦、爱德华·马基和伯尼·桑德斯的联署支持。

31. Impact of early life adversity on reward processing in young adults (2014) (journals.plos.org)

该研究通过一项历时25年的前瞻性队列研究,探讨了早期生活逆境对青年期奖赏处理神经机制的长期影响,并考察了其与注意缺陷/多动障碍(ADHD)症状的关联。

研究背景与目的 以往证据表明,早期逆境可能通过影响中脑边缘多巴胺奖赏通路,导致大脑功能改变和精神健康问题(如ADHD)。奖赏处理可分为“期待”和“获得”两个阶段。本研究旨在结合高时空分辨率的同步EEG-fMRI技术,探究不同严重程度的早期逆境如何影响这两个阶段的神经活动,并分析其与ADHD症状的关系。

研究方法

  • 样本:162名来自德国一项出生队列研究的健康青年(平均年龄24.4岁),该队列自出生起已被追踪研究。
  • 早期逆境评估:采用“早期家庭逆境指数(EFA)”,基于出生后3个月时的标准化父母访谈评估家庭环境、父母特征及伙伴关系等多方面风险因素,计算逆境项目数量(得分0-7分)。
  • ADHD症状评估:通过2至15岁间的多次标准化父母访谈,汇总形成终身ADHD症状评分。
  • 实验任务:使用改进的金钱激励延迟任务,参与者需对奖励提示(笑脸或乱码脸,分别对应金钱或口头反馈奖励)做出快速按键反应以赢得奖励。
  • 数据采集:在任务过程中进行同步EEG和fMRI记录。
  • 数据分析:分析行为指标(反应时、赢的次数),EEG中的关联负变化(CNV,一种反映预期的脑电成分),以及fMRI中奖赏相关脑区(如腹侧纹状体、壳核、丘脑、脑岛等)在期待和获得阶段的激活水平,并考察EFA及ADHD症状与这些神经活动的关系。

主要结果

  1. 行为表现:相比口头反馈,金钱奖励条件下反应更快、赢的次数更多。EFA得分越高,金钱和口头反馈条件下的反应时均越长,但赢的次数不受影响。
  2. EEG结果:金钱奖励的期待引发了更强的CNV。更重要的是,EFA得分越高,CNV波幅越小。
  3. fMRI结果:
    • 奖赏期待阶段:EFA得分越高,左侧腹侧纹状体、左侧壳核、左侧丘脑等核心奖赏区域的激活越弱。此效应在控制当前精神病理症状后仍然存在。
    • 奖赏获得阶段:与预期相反,EFA得分越高,右侧脑岛、右侧苍白球和双侧壳核的激活越强。进一步分析发现,这种增强效应主要由口头反馈奖励条件驱动,而在金钱奖励条件下EFA的影响不显著。
    • 阶段交互作用:在关键奖赏区域(如左侧腹侧纹状体、右侧脑岛、左侧壳核),EFA对神经激活的影响在期待和获得阶段存在显著交互,表现出期待期抑制、获得期增强的模式。
  4. 与ADHD症状的关联:
    • 终身ADHD症状越多,左侧腹侧纹状体在期待期的激活越弱,右侧脑岛在获得期的激活越强,与EFA的影响模式相似。
    • 但CNV与ADHD症状无显著关联。
    • 中介分析未发现神经激活(左侧腹侧纹状体或右侧脑岛)能显著中介EFA与ADHD症状之间的关系。

讨论与结论

  • 研究发现早期生活逆境对成年后的奖赏处理具有差异性长期影响:表现为奖赏期待期神经反应减弱(腹侧纹状体、壳核、丘脑)和奖赏获得期神经反应增强(脑岛、苍白球、海马等)。EEG中CNV的降低与fMRI中期待期激活减弱相呼应。
  • 对口头反馈奖励的增强反应尤为突出,这可能提示经历过早期逆境的个体对社会性奖赏(如口头赞扬)特别敏感,可能与童年期经历不良养育环境有关。
  • 与急性压力的影响相反,早期慢性压力似乎导致一种“期待时反应不足,获得时反应过度”的奖赏处理模式,这可能与HPA轴功能的长期适应性改变有关。
  • 类似的神经激活模式与终身ADHD症状相关联,提示早期逆境可能通过功能失调的奖赏通路影响ADHD的发展,但本研究中的中介分析未能证实这一点。
  • 研究局限包括无法分析反馈阶段的EEG成分、无法完全排除后期压力的影响、以及未探索潜在的表观遗传或基因-环境交互作用机制。

总之,该研究提供了证据表明,早期生活逆境会遗留至成年期,并具体表现为奖赏处理环路的功能性改变,这种改变可能与ADHD等精神障碍的风险增加有关。

32. Grandmaster-Level Chess Without Search (github.com)

Grandmaster-Level Chess Without Search 论文总结

核心研究

本文探讨使用大规模Transformer模型,在无需进行显式搜索(如蒙特卡洛树搜索)的情况下,解决国际象棋这一经典AI规划问题。研究旨在评估Transformer在解决难以通过记忆完成的大规模规划任务时的泛化能力。

关键方法与数据集

  • 数据集 (ChessBench):发布了包含1000万盘棋局的大规模基准数据集,由最先进的棋类引擎Stockfish 16标注,包含合法走法和价值评估,总计150亿个数据点。
  • 模型训练:通过监督学习,在ChessBench上训练了参数高达2.7亿的Transformer模型。研究进行了大量消融实验,以分析数据集规模、模型规模、架构类型以及不同预测目标(状态价值、动作价值、行为克隆)的影响。

主要结果

  1. 强大的泛化能力:最大的模型能够相当准确地预测未见过棋盘的“动作价值”,表明其具备高度非平凡的泛化能力。
  2. 特级大师水平表现:在未执行任何显式搜索的情况下,最终得到的棋弈策略不仅能解决高难度棋局谜题,还在Lichess闪电战中对人类达到了2895分的Elo等级分,相当于特级大师水平。
  3. 与自我对弈模型的对比:与通过自我对弈训练的Leela Chess Zero和AlphaZero(带与不带搜索)进行了比较。结果表明,虽然可以通过监督学习将Stockfish基于搜索的算法以极佳的精度蒸馏到大型Transformer中,但完美的蒸馏仍然无法实现,这使得ChessBench非常适用于未来的研究。

代码库结构

提供的代码库包含以下主要部分:

  • 数据 (data/):包含训练、测试数据集及棋局谜题(如 eco_openings.csv, puzzles.csv)。
  • 模型检查点 (checkpoints/):存放了预训练模型(9M, 136M, 270M参数)。
  • 源代码 (src/):核心代码,包括:
    • 引擎 (engines/):实现与Stockfish、Leela Chess Zero及神经引擎的交互。
    • 数据处理 (bagz.py, data_loader.py, tokenizer.py):负责读取自定义格式数据、加载数据和将棋盘状态标记化。
    • 模型与训练 (transformer.py, train.py, training.py):定义Decoder-only Transformer架构及训练流程。
    • 评估与分析 (puzzles.py, tournament.py, metrics_evaluator.py, searchless_chess.ipynb):用于评估谜题准确率、进行Elo锦标赛、计算指标(如肯德尔τ系数)以及深入分析模型行为。
  • 外部工具依赖:需要安装Stockfish、Leela Chess Zero和BayesElo(用于计算Elo等级分)。

使用与安装

  1. 环境配置:要求Python 3.10,推荐使用Conda环境,并安装所有依赖(requirements.txt)。
  2. 外部工具安装:需分别安装并编译Stockfish、Leela Chess Zero及其最大网络、以及BayesElo。
  3. 数据与模型下载:提供了脚本 (data/download.sh, checkpoints/download.sh) 用于下载所需数据集和预训练模型。
  4. 运行示例:
    • 训练:执行 python train.py。
    • 评估:运行 puzzles.py 评估模型谜题准确率,运行 tournament.py 进行对战并使用BayesElo计算Elo。

结论与意义

该研究表明,通过大规模监督学习,可以将复杂的搜索算法近似地“编译”或“摊销”到一个Transformer策略网络中,从而在无需运行显式搜索的情况下实现强大的规划性能。尽管完美的蒸馏仍未达成,但所取得的结果(特级大师水平)和发布的基准数据集/代码为未来在神经网络规划、算法蒸馏和棋类AI研究方面的工作奠定了坚实基础。

许可证

代码采用Apache 2.0许可,模型权重采用CC-BY 4.0许可,数据集部分为CC0许可,部分为CC-BY 4.0许可。

33. Microsoft BitNet: inference framework for 1-bit LLMs (github.com)

Microsoft BitNet:1-bit LLM 推理框架总结

核心概述

bitnet.cpp 是微软官方的 1-bit 大语言模型(如 BitNet b1.58)推理框架,提供优化的内核,支持在 CPU 和 GPU 上进行快速、无损的推理(NPU 支持即将推出)。

主要性能与优势

  • CPU 推理加速:在 ARM CPU 上实现 1.37x 至 5.07x 加速;在 x86 CPU 上实现 2.37x 至 6.17x 加速。模型越大,性能提升越显著。
  • 能耗降低:在 ARM 上降低 55.4% 至 70.0% 能耗,在 x86 上降低 71.9% 至 82.2% 能耗,提升整体效率。
  • 本地运行大型模型:可在单个 CPU 上运行 100B 参数的 BitNet b1.58 模型,达到 5-7 tokens/s 的人类阅读速度,增强了在本地设备运行大模型的潜力。
  • 最新优化:引入并行内核、可配置分块和嵌入量化支持,在不同硬件和负载下比原始实现额外加速 1.15x 至 2.1x。

支持模型

  • 官方模型:BitNet-b1.58-2B-4T(2.4B 参数),支持 x86 和 ARM CPU,适配 I2_S 和 TL2 内核。
  • 社区模型:包括 bitnet_b1_58-large(0.7B)、bitnet_b1_58-3B(3.3B)、Llama3-8B-1.58-100B-tokens(8.0B)以及 Falcon 系列等。支持不同内核类型(I2_S、TL1、TL2),兼容性因模型和 CPU 架构而异。

安装与构建要求

  • 环境要求:Python ≥ 3.9,CMake ≥ 3.22,Clang ≥ 18。
  • Windows 用户:需安装 Visual Studio 2022 并启用 C++ 开发、CMake 工具、Git 和 Clang 编译器。
  • Debian/Ubuntu:可通过脚本自动安装 LLVM/Clang。
  • 推荐使用 conda:创建独立环境管理依赖。

构建步骤

  1. 克隆仓库:git clone --recursive https://github.com/microsoft/BitNet.git
  2. 安装依赖:创建 conda 环境后执行 pip install -r requirements.txt
  3. 构建项目:使用 setup_env.py 脚本下载模型并配置量化类型(如 i2_s)。

使用方法

  • 基本推理:运行 run_inference.py,指定模型路径、提示词、线程数、上下文大小等参数。支持聊天模式(-cnv 选项)。
  • 基准测试:提供 e2e_benchmark.py 脚本,可测试模型性能,支持自定义生成令牌数、提示令牌数和线程数。
  • 模型转换:支持将 .safetensors 格式模型转换为 GGUF 格式。

其他信息

  • Demo:提供在 Apple M2 上运行 3B 模型的演示视频。
  • 技术演进:项目基于 llama.cpp 框架,内核构建于 T-MAC 的查表方法论之上。
  • 常见问题:文档包含编译问题的解决方案(如 Clang 环境配置)。

该框架旨在推动 1-bit LLM 的大规模应用,通过高效推理支持在边缘设备和本地 CPU 上运行大型语言模型。

34. setBigTimeout (evanhahn.com)

标题:setBigTimeout - 突破 JavaScript setTimeout 的 25 天限制

问题背景: JavaScript 的 setTimeout 函数在大多数运行时环境中,其延迟时长使用 32 位有符号整数表示。这导致最大可设置的延迟约为 21.47 亿毫秒(约 24.9 天)。如果尝试设置更大的超时值(例如 40 天),函数会立即执行,而不是等待预期的时间,这看起来像是一个错误。

解决方案:setBigTimeout 模块 作者创建了一个名为 setBigTimeout 的模块,用于处理超长延迟的定时任务。

主要功能:

  1. 接口类似:用法与原生 setTimeout 相似,接受一个回调函数和一个延迟时间(毫秒)。
  2. 支持大延迟:可以安全地设置远超 25 天的延迟,例如数十年甚至更长。
  3. 支持 BigInt:允许使用 BigInt 类型的参数来设定极其巨大的延迟值。

实现原理: 该模块通过链式调用多个较小的、不超过原生限制的 setTimeout 来累计实现预期的长时间延迟。

现状与可用性:

  • 该模块已发布在 npm 上,包名为 setbigtimeout。
  • 源代码已公开。
  • 作者编写了使用模拟时钟的自动化测试来验证功能,但自然无法等待 84 年进行实测。
35. SOFA - Start Often Finish rArely (tilde.town)

SOFA 既是黑客/艺术团体的名称,也是其创立所依据的原则。该俱乐部的核心是:尽可能多地开始项目,无需顾及或追求完成。其目标在于获取丰富经验,副作用包括娱乐和技能提升。

实践方法

  • 广泛阅读:开始读很多书,若不喜欢则放下或赠送。
  • 启动项目:开始一个新的代码或艺术项目,至少完成详细的README文件。是否完成项目并不重要。
  • 学习新语言:开始学习一门口语或编程语言,无需承诺精通,仅进行少量练习即可。

核心机制

项目的“完成”由个人自行定义:当项目不再有趣、已获得足够体验或学到足够内容时,即可视为完成。无需遵循外界的完美标准或社会期望(如传统婚姻中“至死不渝”的压力)。结束某事不应减损其价值,可借鉴“KonMari”方法:感恩经历与收获,然后释然放手。

哲学基础

SOFA认为:万物皆非固定、永恒或持久,包括自我认知。想成为厨师、Lisp程序员、轮滑爱好者或素食主义者?只需开始行动,便即刻成为“那个人”。若发现新身份不适合,便可停止并转变身份。

结语

鼓励尽可能多地开始并停止各类活动,以探索多元身份与经历。完成与否应由个人主导,结束某事是为了更好地开始新事物。

36. Advice for first-time inventors from a patent engineer (spectrum.ieee.org)

专利工程师给首次发明者的建议

人物背景与职业经历

Lesley-Ann Knee是一名专利工程师,在律所Husch Blackwell的专利申请部门工作。她拥有科罗拉多州立大学电气工程学士学位,父亲是拥有多项专利的工程师,这让她从小接触专利领域。她目前正准备专利代理人考试,未来计划就读法学院成为专利律师。

对首次发明者的核心建议

专利的基本要求

  • 实用性:发明必须对某种目的有用
  • 新颖性:不能是现有技术的显而易见变化
  • 可专利对象:机器、制造工艺或物质组合
  • 不可专利对象:原子武器、非法设备、商业方法、数学发现和科学原理

重要提示

  • 及时申请:公开披露发明后一年内必须提交申请,否则可能丧失专利权
  • 先申请原则:美国采用“先申请制”,谁先提交申请谁获得优先权
  • 不要害怕申请:美国专利商标局(USPTO)批准率约为三分之二

专利申请流程概览

基本步骤

  1. 提交临时申请:在有概念验证或原型时提交,保留申请位置,一年后失效
  2. 提交非临时申请:在首次申请后一年内提交,接受专利局审查
  3. 回应审查意见:常见情况,通常可在三个月内免费回应
  4. 收到授权通知:支付费用后获得专利,获得排除他人使用或销售的权利
  5. 最终审查意见:可选择放弃或请求继续审查

申请考量

  • 成本差异:包括申请费和律师费,小企业和个人发明者可能享受费用折扣
  • 复杂程度:取决于专利审查员所需的研究工作量
  • 专业帮助:建议首次申请者寻求专利律师或代理人的免费咨询

知识产权的价值与保护

商业应用

  • 专利可作为贷款抵押品
  • 帮助创业公司吸引投资者
  • 通过专利组合阻止竞争对手进入新领域

保护策略

  • 建立核心专利并申请关联专利形成组合
  • 避免通过社交媒体等渠道过早披露发明
  • 专利组合虽成本较高,但对诉讼保护和阻止竞争至关重要

注意事项

  • 公开披露后一年内未申请将丧失该发明的专利权
  • 先申请制度下,被他人抢先申请可能难以逆转
  • 每个国家的专利制度和规则各不相同
37. DHL pioneered the sharing economy (2016) (www.flexport.com)

DHL作为国际快递公司,其创业之初便开创性地采用了“共享经济”模式。1960年代,海运集装箱化极大提升了货运效率,但同时也带来了一个意外难题:货物清关所必需的“正本提单”等文件,通过缓慢的邮政系统送达时,货物早已到港并堆积,造成巨大成本和延误。

DHL的解决方案是:为愿意出让行李额度的乘客提供免费机票,利用这些乘客的闲置行李空间来空运高价值商业文件。公司招募了服务员、秘书、教授等普通旅客,让他们携带装满提单的行李乘坐“红眼航班”(例如从旧金山到火奴鲁鲁),再通过本地快递员网络将文件送达客户手中。此举绕开了不可靠的邮政垄断,确保了文件及时送达,使货物能快速清关。

这一模式大获成功。DHL随后将此模式扩展到其他贸易航线,建立了全球网络,最终发展成为数十亿美元的业务,并被德国邮政收购,助力其成为世界最大的快递服务公司。文章认为,DHL是“共享经济”的先驱,在术语诞生前就实现了对未被充分利用的行李额度资源的共享与交易,甚至被戏称为“走私即服务”。尽管曾受到民航委员会调查,但最终被法院认定为合法企业。

文章最后指出,尽管技术已高度发展,但国际货运中依赖实体提单清关的古老体系至今未变。DHL当年所创新的,正是针对这一官僚障碍的巧妙解决方案。

38. One of Florida's most lethal python hunters (gardenandgun.com)

唐娜·卡利尔是佛罗里达州首批全职专业蟒蛇猎人之一,也是该领域首位女性从业者。年过六旬的她以无畏的野外生存能力和对生态保护的执着著称,在沼泽地带与缅甸蟒(一种极具破坏力的入侵物种)反复搏斗。

缅甸蟒入侵背景
缅甸蟒原产于东南亚,自20世纪70年代起作为宠物贸易引入佛罗里达州。因饲养者随意弃养、设施逃逸以及1992年飓风“安德鲁”摧毁养殖场等原因,大量蟒蛇在佛罗里达湿地繁衍。该地区气候温暖、猎物丰富,为蟒蛇提供了理想栖息地,导致本地生态系统遭到严重破坏——国家公园内90%以上的哺乳动物数量锐减。

猎蟒工作与挑战
卡利尔与同行通过夜间巡逻、路勘等方式搜寻蟒蛇,平均需花费10小时才能捕获一条。工作要求极高:需具备敏锐观察力、沼泽行动能力,并承受被蟒蛇缠绕撕咬的风险。捕获后需按规范进行人道处死(先击昏再毁损脑组织),这一过程令许多猎人内心煎熬。卡利尔曾成功捕获数百条蟒蛇,但也曾目睹巨型蟒蛇逃脱,既感叹其生物力量,也深感生态威胁之严峻。

管理措施与成效
佛罗里达州2017年启动专业猎人计划,招募约百名全职承包商,累计清除近九千条蟒蛇。监测显示,在猎人巡逻区域,本地野生动物种群出现稳定迹象。生物学家同时尝试狗嗅探、卫星追踪、无人机巡查等技术手段,但当前人工捕猎仍是最有效的控制方式。

生态保护的意义
尽管蟒蛇无法被彻底根除,卡利尔等猎人的工作被视为维持生态平衡的关键努力。他们并非出于杀戮欲望,而是为保护本土物种而行动。卡利尔还将环保理念延伸至珊瑚修复等领域,其专业精神与生态意识鼓舞了众多志愿者加入防治行列。

结语
缅甸蟒入侵是人类活动引发的生态危机缩影,而专业猎人计划体现了以行动应对问题的决心。尽管前路漫长,每条被移除的蟒蛇都意味着本土生物多了一份生存机会。

43. Show HN: Sava OS – A desktop interface for your web browser (savaos.com)

Sava OS:浏览器桌面界面总结

产品定位:Sava OS 是一个为网页浏览器打造的桌面界面,旨在为用户提供一个熟悉的在线环境,用于管理、筛选、分享和组织在线数据。它被定位为个人的在线“家”,致力于在基于云的数字世界中提供安宁与控制感。

核心功能:

  1. 链接与标签管理:
    • 轻松管理标签页组,为链接打标签,并将它们组织到工作台和文件夹中。
    • 支持通过“库”统一控制所有内容。
    • 提供“会话”功能,允许用户为研究、项目等创建特定的浏览会话,避免标签页混乱,并能一键暂停或恢复整个会话。
  2. 创建个人订阅源与嵌入:
    • 可创建 RSS、Atom 或 YouTube 频道订阅源,并从任何工作台访问其内容。
    • 单个订阅源支持多个 URL,便于同时查看顶级新闻或喜爱的 YouTube 频道。
  3. 共享协作:
    • 任何工作台或文件夹都可以与其他成员共享,实现实时协作和数据共享访问。
    • 共享成员账户默认匿名,以保护协作者身份隐私。
  4. 隐私与安全(默认隐私):
    • 隐私被置于首位。所有数据默认加密,账户完全匿名化。
    • 采用多层加密策略:
      • 传输加密:确保数据在互联网传输过程中被加密。
      • 应用层加密:数据在接收时立即使用用户唯一密钥加密。
      • 静态存储加密:数据在服务器保存时会再次加密。
      • 匿名化账户:服务器上加密的数据无法与特定用户账户关联。
  5. 未来规划:
    • 下一个主要功能是支持管理 Dropbox、Google Drive 等云存储服务。

产品理念: 创始人指出,当前人们已接受在线服务和订阅费用为常态,但这导致用户并不真正拥有自己的数据和软件。Sava OS 的目标是打破这种模式,让用户能够重新拥有自己的数据和软件,享受云服务的便利而不受高昂月费或数据完整性妥协的限制。

44. Just want simple TLS for your .internal network? (github.com)

本文介绍了一个用于为.internal网络创建简单TLS证书的脚本工具及其使用方法、结果和重要注意事项。

核心工具与命令 运行脚本 ./create-internal-constrained-pki.sh mydomain.internal 即可创建一套公钥基础设施(PKI)。其核心优势是生成的根CA证书使用了X.509名称约束(Name Constraints),可证明地限制该CA只能签发特定域名(mydomain.internal 和 *.mydomain.internal)下的证书,从而确保它无法被用于中间人攻击(MitM)所有网络流量。用户可以放心地将此根CA添加到设备的信任存储中。

生成结果 脚本执行后将在 certs-and-keys/ 目录下生成两个关键文件:

  1. ca-mydomain.internal.crt:根CA证书,供用户分发并安装到其设备信任库。
  2. wildcard.mydomain.internal.crt 和 wildcard.mydomain.internal.key.pem:通配符证书及其私钥,用于在该域名下托管服务。

验证方法 用户可以通过运行以下OpenSSL命令来检查根CA证书中内置的域名限制:

openssl x509 -noout -text -in ca-mydomain.internal.crt

输出应明确显示“X509v3 Name Constraints: critical”以及允许的DNS域名。

重要注意事项

  1. 代码审查:用户应检查脚本代码以确保其符合自身安全目标。
  2. 有效期:证书默认有效期为3650天(10年)。
  3. 密钥密码:生成的私钥默认没有密码保护(无密码),以便脚本无交互运行。建议将密钥直接生成在静态加密存储上。如需设置密码,可在脚本的openssl genrsa命令中添加如 -aes256 等参数。

相关技术背景与文献 文章引用了多篇讨论名称约束技术安全性、客户端支持情况以及实现方案比较的资料。关键点包括:

  • 名称约束(Name Constraints)在RFC 5280中定义,最初规范仅要求对中间CA强制执行,对根CA的支持不佳。但如今主流客户端(如Chrome、Firefox、OpenSSL)已能较好地支持根CA的名称约束。
  • 技术社区讨论指出,仅设置permittedDNSDomains并不能排除创建包含IP地址或其他类型主题备用名称(SAN)的证书。
  • 其他方案如step-ca或mkcert在名称约束支持方面可能存在局限性或需要额外配置,而本文介绍的脚本旨在提供一个直接满足需求的解决方案。