【HN中文日报】科技圈大爆炸!AI 狂飙、开源崛起、隐私告急,还有老技术新玩法!

意外富翁 · 1个月前 · News · 21 · 0

今天 Hacker News 社区聊了啥? NO.20251127

今日份科技日报来啦!AI 模型越来越聪明,代码写得飞起,还能帮你电脑桌面点点点!开源力量持续爆发,设计工具、游戏引擎统统免费用!隐私安全亮红灯,Mixpanel 数据泄露,Zig 语言怒迁 Codeberg!还有怀旧向 C64 BASIC 秀操作,让你秒回童年!想知道更多?赶紧点开看看,保证不亏!

Hacker News 中文精选


柯南·道尔如何通过夏洛克·福尔摩斯探索男性心理健康

本文探讨了阿瑟·柯南·道尔如何通过塑造夏洛克·福尔摩斯这一角色,以及其系列故事,来反映维多利亚时代男性所面临的心理健康问题和社会压力。文章指出,道尔的个人经历,特别是他父亲的精神健康问题,影响了他对男性脆弱性和心理健康的关注。

福尔摩斯并非完美无缺,他与毒瘾、孤独和抑郁作斗争,这些弱点反而成就了他的天才。道尔在故事中展现了男性角色在情感危机、背叛和道德困境下的挣扎,比如《歪唇男人》中,主人公为了偿还债务而隐藏双重生活,反映了维多利亚时代男性对名誉的重视和为此承受的压力。《股票经纪人的书记员》则涉及了男性自杀和经济焦虑等问题。在《工程师的大拇指》中,福尔摩斯不仅关注工程师的身体创伤,更重视其心理创伤,体现了心理支持的重要性。

尽管当时的读者可能更多地将福尔摩斯的缺点视为其天才的标志,但如今我们能从中看到维多利亚时代男性所面临的社会问题和心理困境,从而与过去产生连接。

评论区观点:

  • 有人认为,即使在2025年,男性脆弱和心理健康问题仍然是一个根深蒂固的禁忌。
  • 另有评论指出,痛苦的经历有时能激发创作灵感,如果福尔摩斯没有这些弱点,或许就不会有如此伟大的作品。
  • 还有人认为,过去人们更倾向于私下处理问题,没有公开记录并不代表不存在或属于禁忌。
  • 最后,有人推荐电影《七%溶液》,认为它很好地展现了福尔摩斯的脆弱一面。

这些评论从不同角度探讨了男性心理健康问题的历史和社会背景,以及其对艺术创作的影响。


Linux Kernel Explorer:探索内核奥秘的新工具

本文介绍了一个名为 "Linux Kernel Explorer" 的工具,它旨在帮助开发者更轻松地探索 Linux 内核的源代码。内核并非一个进程,而是连接硬件和软件的系统本身。

文章提到,内核通过协调系统调用、中断和调度来服务于用户进程,并以虚拟、映射、隔离和控制的层级结构运行。该工具提供了一种结构化的方式来浏览内核代码,类似于 Talmud 的页面布局,将代码和注释分层展示。文章列举了几个学习文件,包括 init/main.ckernel/fork.cinclude/linux/sched.harch/x86/kernel/entry_64.S

评论区对这个工具的评价很高,许多用户认为它对于理解 Linux 内核的复杂结构非常有帮助,尤其适合那些刚开始学习内核代码的人。有人将其比作一个 "地图",帮助用户在数千个文件中找到方向,了解各个部分是如何连接的。

也有用户提到了一些 bug,例如无法加载 arch/x86/kernel/entry_64.S 文件,以及打开目录时出现 "Invalid file response from GitHub API" 的错误。此外,GitHub API 的速率限制也可能会影响用户体验,建议开发者考虑使用缓存或允许用户通过 GitHub 登录来解决这个问题。

还有用户建议可以开发类似的工具用于 Python 的 CPython 源码学习,或者借鉴 mdBook 的形式,加入测验和示例。有人分享了 Elixir 提供的内核代码浏览工具链接,并指出其在移动设备上的体验更好。总之,评论区对 "Linux Kernel Explorer" 的概念表示赞赏,并提出了许多有价值的改进建议。


开源设计工具 Penpot:设计与代码协作的利器

Penpot 是一个开源的设计工具,旨在促进设计和代码之间的协作。它提供了类似 Figma 的界面和功能,但作为一个开源项目,它具有更大的灵活性和可定制性。

Penpot 的主要目标是弥合设计师和开发者之间的差距,通过共同的设计语言和协作平台,提高工作效率和减少沟通成本。该项目使用 MPL-2.0 许可,鼓励社区参与和贡献。Penpot 拥有 42.3k 的 star 和 2.3k 的 fork,表明它在开源社区中非常受欢迎。

Penpot 提供了代码、问题、拉取请求、讨论、行动和安全等功能,方便用户进行项目管理和协作。此外,Penpot 还提供了 Insights 功能,帮助用户了解项目的进展和趋势。Penpot 的目标是成为设计和代码协作的首选工具,为用户提供更好的设计体验和更高的工作效率。作为一个开源项目,Penpot 具有很大的发展潜力,有望在未来成为设计领域的领导者。

由于没有评论内容,这里就不进行评论分析了。


AI 模型与 GPL 协议的传播:现状分析

本文探讨了“GPL 协议是否会传播到使用 GPL 代码训练的 AI 模型”这一话题,并分析了当前法律诉讼和各方观点。文章指出,尽管 AI 编码的优势日益凸显,但该理论并未被完全驳斥,相关诉讼仍在进行中。

文章首先解释了 GPL 传播理论的核心:如果 AI 模型使用了 GPL 代码作为训练数据,那么该模型本身就构成了 GPL 代码的衍生作品,因此在分发模型时,必须遵守 GPL 的 copyleft 条款,例如公开源代码。作者提到,虽然 2021 年左右有很多支持这种理论的声音,但现在已经不再是主流观点。

文章随后列举了两个主要的诉讼案例,以说明该理论尚未被完全否定。第一个是美国的 Doe v. GitHub (Copilot 集团诉讼),原告方认为 GitHub、微软和 OpenAI 在未经许可的情况下,使用公共仓库中的源代码训练模型,导致了大规模的许可协议违规。第二个是德国的 GEMA v. OpenAI 诉讼,该诉讼将模型中的“记忆”视为法律上的复制行为。

文章还提到了否定许可协议传播到模型的观点,从版权法层面、GPL 文本层面、技术层面以及实际政策层面进行了论证。例如,从技术层面来看,有人认为 AI 模型只是学习了代码的模式,而不是直接复制了代码,因此不构成衍生作品。

最后,文章简要提及了 OSI (开放源代码促进会) 和 FSF (自由软件基金会) 在这个问题上的立场。

由于没有评论内容,因此略过评论分析部分。


2D 软阴影光线步进技术解析

本文深入探讨了使用光线步进技术在 2D 场景中实现软阴影的方法,并提供相应的 GLSL 代码示例。该技术的核心在于利用距离场来优化光线行进过程,并结合一些技巧来模拟出逼真的软阴影效果。

文章首先介绍了距离场的概念,即图像中每个像素到最近形状的距离。然后,详细解释了光线步进算法,该算法通过沿着光线逐步前进,并利用距离场信息来判断像素是否被阴影遮挡。与传统的逐像素检查方法相比,光线步进可以根据距离场安全地跳过大段距离,从而显著提高效率。文章还讨论了如何处理光线与形状边缘平行的情况,以及如何通过限制步数来避免无限循环。

为了实现软阴影,文章提出了三个关键规则。第一,光线越接近与形状相交,像素应该越暗。第二,像素距离“几乎相交”的点越远,阴影应该越分散。第三,光线强度应随着距离光源的距离增加而减弱。文章提供了相应的 GLSL 代码,展示了如何将这些规则应用到光线步进算法中,从而生成美观且计算效率高的软阴影效果。代码中使用了 sceneDist / rayProgress 的比率来模拟阴影的模糊程度,并使用距离因子来模拟光线强度的衰减。

总而言之,这篇文章深入浅出地讲解了 2D 软阴影光线步进的原理和实现方法,并提供了实用的 GLSL 代码示例,对于希望在 2D 图形项目中实现逼真阴影效果的开发者来说,是一篇很有价值的参考资料。


技术通缩:软件开发成本持续降低的影响

本文探讨了软件开发领域中一种类似于经济学中“通缩”的现象,即技术通缩,指的是软件开发变得越来越容易和便宜。这种趋势正在改变创业公司和现有企业的竞争格局。

文章指出,AI 模型的进步和 AI 辅助代码编写工具的出现是技术通缩的主要驱动力。AI 模型的改进使得构建基于 AI 的应用程序变得更加简单,而像 Claude-Code 这样的工具则使编写可用的应用程序代码变得更容易。这种发展速度的提升,使得创业公司能够快速构建功能,挑战那些花费多年时间构建大型产品套件的传统企业。

技术通缩也带来了新的挑战。文章以“为什么我们永远不会有桌面应用程序”为例,说明了技术通缩如何导致延迟决策。由于预计未来构建应用程序会更容易,开发者可能会推迟开发非必要的应用程序。此外,文章还强调了“后来者居上”的优势。在 AI 快速发展的背景下,后来者可以从先行者的错误中学习,并利用最新的技术,从而更容易取得成功。

最后,文章提出了一个问题:如果现在可以构建的任何东西在 6 个月后都会变得更容易,那么现在应该做什么?文章建议,在构建变得容易的情况下,重点应该放在分发上。换句话说,创业公司的护城河不应该是构建本身,而应该是其他的东西,比如病毒式营销或强大的分销渠道。


交互式 Lambda 归约(Interactive λ-Reduction)

本文介绍了一个交互式的 Lambda 归约工具,允许用户通过点击高亮节点对或使用键盘箭头来简化网络,并使用反斜杠输入 Lambda 表达式。用户还可以使用等号为 Lambda 项命名,并通过示例展示了如何定义恒等函数、布尔值以及逻辑运算符。最终,表达式会被表示为图或网络,显示在屏幕右侧。

该工具的核心在于通过交互方式演示 Lambda 演算的归约过程,特别是 Lamping 的最优 Lambda 归约算法。作者的目标是实现 Lamping 的抽象算法,但无需添加额外的分隔符节点,并在交互网络范式下确保完全的汇合性。Delta-Nets 就是为了解决这个问题而诞生的。

评论区里,有用户提到了 Higher Order Virtual Machine (HVM),这是一个高性能的交互网络实现,可用于 CPU 和 GPU。有人指出该工具与 HVM 之间的联系,并猜测作者是否了解 HVM。作者本人也参与了讨论,分享了开发这个工具的初衷,即在没有额外分隔符节点的情况下实现 Lamping 的算法,并介绍了基于 Delta-Nets 构建的编程语言 Pur。另有用户对该工具的实际用途表示疑惑,并对其背后的理论基础提出了质疑,希望有相关领域的专家能进一步解释。


DIY NAS 2026:自制网络存储服务器指南

本文主要介绍了作者 Brian Moses 在 2026 年的 DIY NAS (Network Attached Storage) 构建方案,并分享了他选择硬件的标准和理由。文章详细介绍了作者选择的主板、CPU 和机箱,并解释了每个选择背后的考虑因素,例如性能、价格和扩展性。

作者构建 NAS 的主要标准包括小尺寸、至少六个硬盘位、低功耗 CPU 以及作为家庭实验室的潜力。由于组件价格上涨,作者一度犹豫是否发布今年的 DIY NAS 方案,但最终还是决定分享,并推荐了 Topton N22 主板搭配 Intel Core 3 N355 CPU。这款主板具有 8 个 SATA 端口、2 个 M.2 NVMe 插槽、1 个 10Gbps 网卡和 2 个 2.5Gbps 网卡,并提供额外的 PCI-e x1 插槽,使其成为更强大的家庭实验室机器。

在机箱选择上,作者原本对 SilverStone CS383 非常感兴趣,但由于价格较高,最终选择了 JONSBO N4。这款机箱虽然比去年的稍大,但提供了六个 3.5 英寸硬盘位和两个 2.5 英寸硬盘位,其中四个 3.5 英寸硬盘位支持热插拔。作者强调,每个 DIY NAS 构建者都应该根据自己的标准来选择组件。


Mixpanel 近期安全事件应对

Mixpanel 发布了关于近期安全事件的声明,主要涉及 SMS 短信服务,并详细说明了他们的应对措施。

Mixpanel 团队表示他们已经意识到并正在积极处理最近发生的安全事件,该事件影响了部分用户的 SMS 短信服务。为了应对这次安全事件,Mixpanel 立即采取了行动,包括调查事件的根本原因、评估受影响的用户范围以及实施额外的安全措施来防止类似事件再次发生。他们强调了保护用户数据安全是他们的首要任务,并承诺会公开透明地分享事件的进展和细节。Mixpanel 正在与安全专家合作,以加强其安全防御体系,并采取一切必要措施来保护用户的信息。此外,Mixpanel 还建议用户采取一些预防措施,例如定期更改密码,以增强账户的安全性。他们还设立了专门的渠道,方便用户咨询和获取帮助,确保用户能够及时获得所需的支持和信息。Mixpanel 承诺会持续监控其系统,并不断改进安全措施,以应对不断变化的安全威胁。


研究发现:手术时听音乐有助于患者康复

一项印度研究表明,在全身麻醉期间播放音乐可以减少麻醉药物的使用,并加速患者的康复。该研究发表在《音乐与医学》杂志上,为音乐在手术中的应用提供了有力证据。

研究人员在进行腹腔镜胆囊切除术的患者中进行了实验,该手术通常需要患者快速清醒。他们发现,在手术过程中听音乐的患者,需要的麻醉药物(如丙泊酚和芬太尼)剂量更低,术后恢复更顺利,皮质醇(压力激素)水平也更低。研究人员认为,即使在麻醉状态下,大脑的听觉通路仍然活跃,音乐可以影响大脑的内部状态,从而减轻身体对手术的压力反应。

麻醉的目标是让患者在术后能够清醒、警觉、定向,并且没有疼痛感。为了达到这个目标,医生通常会使用多种药物,包括镇静剂、止痛药和肌肉松弛剂。然而,手术本身也会引起身体的应激反应,导致心率升高、激素水平升高和血压升高。控制这些应激反应是现代外科护理的关键目标之一。研究表明,音乐可以帮助减轻这些应激反应,从而促进患者的康复。

研究人员让患者从两种平静的器乐曲目(柔和的长笛或钢琴)中进行选择。所有患者都戴着降噪耳机,但只有一组患者听音乐。结果显示,听音乐的患者需要的丙泊酚和芬太尼剂量更低,术后恢复更顺利,皮质醇水平也更低,血压控制也更好。

这项研究表明,即使在患者失去意识的情况下,大脑仍然可以接收和处理声音信息。音乐可以对大脑产生积极的影响,从而减轻身体对手术的压力反应。这项研究为音乐疗法在医学领域的应用提供了新的证据,并可能改变医院对手术康复的看法。

评论观点分析

评论中,一位用户分享了自己接受牙科手术的经历,当时牙医播放了汉斯·季默的音乐。这位用户提到,手术过程中一度非常紧张,但音乐在一定程度上缓解了他们的焦虑。这个评论印证了研究的结论,即音乐可以在手术过程中起到积极的作用,帮助患者放松心情,减轻压力。


G0-G3 连续曲面可视化:探索“苹果角”的奥秘

这篇文章介绍了 G0、G1、G2 和 G3 连续曲面的概念,并通过 3D 模型进行可视化,帮助读者理解这些概念在实际应用中的意义,特别是“苹果角”的由来。

文章的核心在于解释不同等级的连续性是如何影响曲面外观的。G0 连续是最基本的连续性,仅要求曲面之间没有间隙。G1 连续则要求曲面在连接处具有相同的切线方向,使得过渡更加平滑。G2 连续更进一步,要求曲面在连接处具有相同的曲率,从而实现更高级别的平滑过渡,这种平滑的圆角处理常见于苹果产品的设计中,因此也被称为“苹果角”。G3 连续则是在 G2 的基础上,要求曲率变化率也相同,提供最高级别的平滑度。

通过提供 STL 格式的 3D 模型,作者 dangroshev 旨在让读者能够更直观地观察和学习这些概念。读者可以下载这些模型,并通过 3D 打印或其他方式进行可视化,从而加深对 G0-G3 连续性概念的理解。这种实践性的学习方式,能够帮助设计师和工程师更好地应用这些概念,创造出更美观、更符合人体工程学的产品。文章还提到了 Cookies 的使用,用于改善用户体验,包括个性化广告和内容,以及网站分析等。

目前该模型还没有评论,期待更多的人下载并打印出来,分享自己的理解和应用。


布里斯托尔的混凝土浮筒:一段历史探究

本文介绍了在布里斯托尔港口发现的两个混凝土浮筒,并探讨了它们的建造历史、用途以及与二战相关的一些误解。

文章首先介绍了这两个长期停泊在布里斯托尔城堡公园旁的混凝土浮筒。作者通过研究历史资料,特别是布里斯托尔博物馆收藏的幻灯片,揭示了这些浮筒并非二战时期在巴罗因弗内斯建造的驳船,而是更早期的产物,大约在一战之前。这些浮筒是在埃文茅斯当地建造的,用于建造潮汐石油码头。文章通过老照片和历史记录,详细描述了这些浮筒在二战期间用于建造埃文茅斯潮汐石油码头的过程,它们被用作浮动起重机的平台,为码头的建设做出了贡献。

文章还驳斥了关于这些浮筒的一些常见误解,例如它们被用作谷物驳船或与诺曼底登陆的桑树港有关。作者认为,这些浮筒的设计和结构并不适合储存谷物,而且它们与桑树港的建造没有任何关系。文章推测,在二战结束后,这些浮筒被拖到埃文河上,并被港口附近的工业用作浮动码头。城堡公园在当时是一个繁荣的港口商业区,直到二战期间的布里斯托尔闪电战摧毁了该区域。

总而言之,这篇文章通过详细的历史研究和分析,揭示了布里斯托尔混凝土浮筒的真实用途和历史背景,并澄清了一些常见的误解。


重温 Commodore 64 BASIC:用两行代码实现视觉 Demo

本文介绍了一个用 Commodore 64 BASIC 编写的视觉演示程序,仅用两行代码展示了 C64 的一些特性。这个程序并非游戏,而是作者将 Run 杂志 1985 年特刊中的两个单行程序合并改编而成。

文章详细解释了代码的含义。第一行 poke53280,6:poke53281,6:?"{yellow}":fori=1to19:?:next,通过 POKE 命令直接修改内存地址,改变屏幕边框和背景颜色为特定颜色。?"{yellow}" 语句用于设置输出颜色为黄色。第二行 a$="{up}{down}{left}{right}":? mid$(a$,rnd(.5)*4+1,1)"*{left}";:fori=1to30:next:?"{reverse on} {left}";:goto2,定义了一个包含光标移动字符的字符串,然后随机选择一个光标方向,打印一个带有随机方向的星号,并使用反色显示,形成一种“挖洞”的视觉效果。作者还解释了 C64 BASIC 中特殊字符的表示方法,例如用 {} 括起来表示控制键。

评论区里,有读者提到 ?PRINT 命令的缩写,勾起了对老式电脑的回忆。还有读者分享了自己使用 Eightyone ZX81 模拟器和 Z88DK C 编译器为 Z80 编写程序的经历,认为在这种老式电脑上编程,需要特别关注代码效率,因为每一个选择都会对性能产生影响,就像“roguelike 编程”一样。


Gemini CLI 使用技巧:提升你的 Agentic Coding 效率

本文介绍了 Gemini CLI 的一系列实用技巧,旨在帮助开发者更有效地利用这款工具进行 agentic coding。Gemini CLI 作为一个开源 AI 助手,将 Google 的 Gemini 模型的能力直接带到终端中,充当一个对话式的、"agentic" 的命令行工具,可以理解你的请求,选择合适的工具(例如运行 shell 命令或编辑文件),并执行多步骤计划来辅助开发工作流程。

文章详细列举了大约 30 个专业技巧,涵盖了从基础设置到高级应用,例如:使用 GEMINI.md 文件来保持持久上下文,创建自定义斜杠命令,利用内存添加和回忆功能,使用检查点和 /restore 命令作为撤销按钮,读取 Google 文档和表格,使用 @ 符号引用文件和图像以提供显式上下文,以及即时创建工具等。

此外,文章还介绍了如何将 Gemini CLI 用于系统故障排除和配置,如何使用 YOLO 模式自动批准工具操作(需谨慎),如何在后台运行 Gemini CLI 的 Headless 和 Scripting 模式,以及如何保存和恢复聊天会话。更高级的技巧包括使用多目录工作区、利用 AI 辅助组织和清理文件、压缩长对话以保持在上下文范围内、使用 ! 符号传递 shell 命令,以及将每个 CLI 工具视为潜在的 Gemini 工具。

文章还涉及了多模态 AI 的应用,例如让 Gemini 查看图像,自定义 $PATH 以提高工具的稳定性,通过 token 缓存和统计来跟踪和减少 token 的使用,使用 /copy 命令快速复制到剪贴板,掌握 Ctrl+C 的使用,以及通过 settings.json 文件自定义 Gemini CLI。最后,文章还提到了 IDE 集成(VS Code),自动化 Repo 任务,启用遥测以获取洞察力,以及关注 Gemini CLI 的未来发展方向,例如后台代理和扩展等。

总而言之,这篇文章为开发者提供了一个全面的 Gemini CLI 使用指南,帮助他们充分利用这款工具来提高编码效率和自动化开发流程。掌握这些技巧,可以使 Gemini CLI 成为一个强大的助手,简化各种开发任务。


S&box 游戏引擎开源及地形优化

S&box 游戏引擎现在以 MIT 许可证开源,同时地形渲染也得到了改进,并修复了大量 Bug。

本次更新的最大亮点是 S&box 的开源,开发者可以在 GitHub 上获取代码,并根据自己的需求构建引擎。虽然开源的不是 Source 2 引擎代码,但 S&box 的高级系统,如编辑器、网络、场景系统和 UI 都是用 C# 编写的,这意味着开发者可以查看、修改和复制这些代码,为 S&box 贡献代码,维护自己的分支,甚至将代码用于自己的引擎。

地形方面,修复了 LOD 块过渡时的接缝问题,并引入了一种新的反平铺技术,通过旋转纹理片段来避免明显的平铺效果。此外,还修复了 Gibs 在客户端不同步的问题,并允许开发者定义 Gibs 是否仅在客户端生成。

在底层,S&box 重写了原生 C++ 代码中的内存分配方式,移除了大量复杂代码,并启用了 Address Sanitizer 和 Allocation Tracing 等内存调试工具。同时,自定义分配器从 jemalloc 切换到 mimalloc。虽然这些底层改动对用户来说可能并不明显,但它们提高了代码的可维护性,并有助于更快地调试内存泄漏、崩溃和其他问题。

此外,本次更新还修复了 Play 模式下的一系列问题,包括 VR 渲染、Envmap 渲染、Swapchain 泄漏、TextEntry 不工作、GameEditorSessions 恢复、光标卡顿和尺寸选择等问题。虽然 Play 模式仍然不完美,但将 C++ 代码迁移到 C# 代码后,更容易维护和修改其行为。


在旧设备上运行不支持的 iOS 版本

本文介绍了如何在不受支持的旧设备上运行 iOS 系统,重点介绍了作者在 iPod touch 3 上运行 iOS 6 的实践和技术细节。

文章详细介绍了 iOS 系统的组成部分,包括 iBoot 引导加载器、内核缓存、设备树、用户空间文件系统以及各种协处理器的固件。作者首先在 iPhone 3GS 上进行了测试,该设备与 iPod touch 3 硬件相似,但官方支持 iOS 6。通过对比 iPhone 3GS 的 iOS 5.1.1 和 iOS 6.0,作者发现设备树是主要问题,iOS 6 中添加了许多新的节点和属性。为此,作者编写了一个 Python 脚本来计算两个设备树之间的差异,并将其应用到另一个设备树。

对于 iBoot,作者主要进行了 Image3 签名检查补丁、boot-args 注入和 debug-enabled 补丁。内核缓存是最复杂的部分,由于 iPod touch 3 没有官方的 iOS 6 支持,作者尝试了动态加载 kexts 的方法,但最终失败。最终,作者使用 Mac OS X 的 kcgen 工具生成了一个预链接的内核缓存,并修复了 Wi-Fi kext 的 Info.plist 文件。最后,作者提到恢复 ramdisk 文件系统的修改相对简单。

总而言之,这篇文章深入探讨了在旧设备上运行不受支持的 iOS 版本的技术细节,涵盖了设备树修改、iBoot 补丁、内核缓存生成以及 kexts 处理等多个方面,为对 iOS 系统底层原理感兴趣的开发者提供了宝贵的参考。


Coq:世界上最好的宏汇编器?

本文介绍了一种使用 Coq 形式化验证 x86 架构子集的方法,重点在于简洁性。通过依赖类型、类型类和符号,x86 语义得到了改进,从而消除了其繁琐的声誉。

文章详细阐述了如何使用 Coq 对 x86 架构的子集进行形式化建模,并使用 Coq 生成二进制代码。该模型使用函数具体地表示位、字节和内存,这些函数可以在 Coq 内部进行计算。具体的表示被映射到 SSR EFLECT 库中的数学对象,以证明定理。文章展示了 Coq 作为一种丰富的语言,可以为指令集架构提供非常可读(且可执行)的语义,并且作为一种编写汇编语言程序和从中生成机器代码的工具。文章还介绍了如何使用 Coq 的抽象和证明功能来处理底层程序。

文章还展示了 Coq 作为汇编器的强大功能,普通的 Coq 定义可以作为用户定义的宏,扩展到标准调用序列。文章还介绍了如何使用 Coq 编写汇编语法,并将其嵌入到 Coq 源代码中。汇编器本身在 Coq 内部执行,其输出(字节序列)可以以十六进制格式发送到控制台。文章还介绍了如何从 Coq 中生成标准可执行文件格式,例如 Microsoft Windows 使用的 PE 格式。

文章强调了该方法在建模和汇编方面的创新性,例如使用元组的布尔值表示位向量,并直接实现算术和其他操作,以及使用抽象的单子处理读取器和写入器。

文章最后展示了一个使用 Coq 编写的汇编语言实现的“生命游戏”的例子,展示了该方法的实际应用。


ECMAScript News 宣布停刊

ECMAScript News 宣布最后一期发布,标志着一个时代的结束,让许多开发者感到惋惜。这份从 2016 年 9 月 27 日开始的 Newsletter,总共发布了 368 期,陪伴了许多开发者度过了许多有趣的岁月。

停刊的主要原因是长期亏损,广告商和订阅者数量在过去两年里持续下降。尽管之前一直保持增长,但最终还是做出了这个艰难的决定。主编 Axel 可能会在明年以某种形式继续这份 Newsletter,如果真的如此,他会在 2026 年通过最后一封邮件通知大家。

对于长期关注 ECMAScript 最新动态的开发者来说,这无疑是一个令人遗憾的消息。希望 Axel 能够找到新的方式,延续这份 Newsletter 的生命力,继续为开发者们带来有价值的信息。

评论区有用户表达了惋惜之情,并询问是否有其他类似的 Newsletter 可以替代。这表明 ECMAScript News 在开发者社区中拥有一定的受众,并且满足了他们对技术资讯的需求。停刊后,寻找替代品成为了一个实际的问题,也反映了社区对高质量技术资讯的渴望。


查找最接近整数的调和数

本文介绍了一种查找最接近给定整数 m 的调和数 H_n 的方法,并提供了相应的 Python 代码实现。文章探讨了计算调和数的效率问题,以及如何通过估算来减少搜索范围,最终找到最接近目标整数的调和数。

文章首先指出,当 n > 1 时,调和数 H_n 永远不是整数。因此,需要找到最接近给定整数 m 的 H_n。解决这个问题需要两个关键步骤:一是高效准确地计算调和数,二是找到合适的 n 值,使得 H_n 最接近 m,同时避免尝试过多的 n 值。

对于计算调和数,当 n 较小时,可以直接使用定义进行计算。但当 n 很大时,直接计算会变得缓慢并累积浮点误差。此时,可以使用渐近近似公式:H_n ≈ ln(n) + γ + 1/(2n) - 1/(12n^3),其中 γ 是欧拉-马歇罗尼常数。文章作者提到,直接计算方法在 n 增大时效果变差,而渐近近似公式在 n 增大时效果更好。

为了找到合适的 n 值,可以忽略渐近近似公式中的高阶项,得到 n 的一个粗略估计:n ≈ exp(m - γ)。然后,在估计值附近进行搜索,找到最接近 m 的 H_n。文章提供了一个 Python 函数 nearest_harmonic_number(m) 来实现这个过程,该函数首先根据 m 的值估算 n,然后在估算值附近搜索,找到使得 abs(H(k) - m) 最小的 k 值。

文章还给出了使用该函数的例子,例如查找最接近 10 的调和数,以及查找最接近 √20 的调和数。代码考虑了整数和实数的情况,展示了该方法的通用性。

评论区中,用户 jcla1 提出了一个有趣的问题:调和数集合与整数集合之间的距离是多少?是否存在一个下界,表示给定整数与其最接近的调和数之间的最小差值?如果存在,这个下界是在哪个整数处达到的?这个问题进一步引发了对调和数性质的思考。


函数式数据结构与算法:一种证明辅助方法

本文介绍了一本关于函数式语言数据结构和算法的书籍,重点在于证明。书中统一介绍了函数程序的函数正确性和运行时间分析,并使用归纳证明。所有证明都经过了 Isabelle 证明助手的机器检查。

这本书由 Tobias Nipkow、Jasmin Blanchette 等人撰写,由 ACM Books 出版。它主要关注函数式语言的数据结构和算法,并强调使用证明助手 Isabelle 来验证算法的正确性。书中不仅涵盖了算法的函数正确性,还包括运行时间分析,并使用归纳证明将两者统一起来。读者可以通过点击链接下载包含 Isabelle 理论的 PDF 版本。本书的目标是不断完善,并鼓励读者积极参与贡献。

评论区中,dwohnitmok 指出该书似乎只直接证明了正确性,而没有证明运行时。其运行时证明基于算法的抽象,适合直接通过证明进行操作,而不是代码中的实际实现。他询问是否有任何语言允许直接证明以该语言实现的函数的运行时属性。

zkmon 提出了一些算法(如二分查找)给出了总体成本的不正确视图。搜索的前提是排序。因此,假设数据被排序一次,并搜索多次,使得排序成本微不足道。但是,如果数据仅用于单个查找怎么办?在这种情况下,实际上顺序搜索比排序和二分查找具有更低的成本。事实上,对于大约 100 次查找,顺序搜索可能会胜过排序和二分查找。因此,考虑总体成本非常重要。


快速 64 位日期算法:通过倒数日期提高 30-40% 的速度

本文介绍了一种非常快速的 64 位日期转换算法,通过倒数年份、跳过计算一年中第几天的步骤以及利用 "Julian Map" 技术,将乘法运算次数减少到仅 4 次,从而显著提高了速度。该算法在 ±1.89 万亿年的范围内提供准确的结果,适用于处理完整的 UNIX 64 位时间(以秒为单位)。

该算法的关键创新点包括:

  • 倒数年份: 通过倒数年份,消除了各种中间步骤,简化了计算过程。
  • 跳过计算一年中第几天的步骤: 采用了一种 year-modulus-bitshift 技术,避免了除法运算。
  • 利用 "Julian Map" 技术: 加速了 100/400 年的计算,减少了两次硬件乘法运算。

该算法在 Intel x64 和 Apple M4 Pro 处理器上进行了测试,结果表明其速度明显优于之前的算法,例如 C++ Boost 和 Neri-Schneider 算法。

文章还详细解释了算法的原理,包括倒数年份的原因、逐行代码的解释、平台特定的优化(x64 vs ARM / Apple Silicon)、范围/准确性、32 位回退选项以及基准测试结果。

总而言之,该算法通过创新的方法和微优化,实现了显著的性能提升,为日期转换提供了一种更快速、更高效的解决方案。


语言模型辅助编程中的本质复杂性和偶然复杂性

本文探讨了在软件工程中,使用语言模型辅助编程对本质复杂性和偶然复杂性的影响,并分析了其与传统编程方法的优劣。文章指出,虽然语言模型在某些方面有所帮助,但并不能完全解决软件开发的根本复杂性。

文章首先回顾了 Fred Brooks 在 1986 年提出的“没有银弹”的观点,即没有工具或流程能够使软件开发的效率数量级地提升。他将复杂性分为本质复杂性和偶然复杂性。本质复杂性是问题本身固有的,而偶然复杂性是解决问题的方式带来的。文章接着讨论了人工智能在编程中的应用,包括 AI-1(解决人类智能才能解决的问题)和 AI-2(专家系统)。Brooks 认为 AI-2 可以赋能经验不足的程序员,但无法解决编程问题的根本复杂性。

文章进一步分析了语言模型辅助编程对偶然复杂性的影响。虽然它可以生成代码,但并不能减少偶然复杂性。甚至有人认为它增加了偶然复杂性,因为需要进行 prompt 工程。然而,这些工具确实可以让我们利用集体的智慧。文章认为,只有当编程助手不生成源代码,而是直接生成可执行文件时,才能真正解决偶然复杂性。或者,可以直接让模型完成人们以前需要编写程序才能完成的任务,这样偶然复杂性就与编程无关了。

关于本质复杂性,文章指出,除非问题本身涉及语言模型,否则语言模型与问题的本质复杂性无关。然而,这些工具可以更快地发现本质复杂性。通过不断地输入 prompt、运行代码并发现错误,我们可以更快地理解问题的本质,并找到正确的解决方案。这种迭代式的开发方式比传统的先确定需求、设计、实现,然后再发现需求不明确的方式更快。即使是编写一个原型,或者与客户协作进行设计,现在也变得更加高效。文章最后提到了 Spec-Driven Development,认为它遵循了 Brooks 预测的自动编程的道路,即使用比程序员当前可用的更高级的语言进行编程。

由于没有评论内容,这里跳过评论分析。


Zig 编程语言迁移至 Codeberg

Zig 编程语言宣布将其主仓库从 GitHub 迁移到 Codeberg,原因是担忧 GitHub 被微软收购后服务质量下降,以及对 GitHub 积极推广 AI 功能的不满。

文章指出,自从十年前 git init 以来,Zig 一直托管在 GitHub 上。但自从 GitHub 被微软收购后,其服务质量开始下降,例如 Actions 功能出现各种问题,CI 系统变得不稳定。此外,GitHub 积极推广 Copilot 等 AI 功能,导致 Zig 社区违反其严格的“禁止 LLM/AI 政策”。

尽管 GitHub Sponsors 在 Zig 的早期筹款中发挥了关键作用,但 Zig 团队认为它现在已成为一种负担。他们呼吁通过 GitHub Sponsors 捐款的用户考虑迁移到 Every.org,这是一个非营利组织。作为迁移的一部分,Zig 将停止 GitHub Sponsors 的一些福利,并计划在 Every.org 平台上提供同等福利。

目前,GitHub 上的 ziglang/zig 仓库已设置为只读,主 Zig 项目仓库的规范 origin/master 分支已迁移至 https://codeberg.org/ziglang/zig.git。为了避免迁移现有 issue 和 pull request 带来的麻烦,Zig 团队决定保留 GitHub 上的现有 issue,并在 Codeberg 上从 30000 开始编号,以保持 issue 编号的唯一性。

评论区对这次迁移的反应不一。有人指出,Zig 社区对违反 "禁止 LLM/AI 政策" 的行为非常关注。也有人质疑 Codeberg 的基础设施是否足够稳定,因为他们似乎在使用有问题的硬件,并向社区征集更多质量未知的硬件。还有人认为,离开 GitHub 可能是出于对 GitHub 与 ICE 合作的担忧,但 Codeberg 使用的 PayPal 也是 ICE "虚拟全球任务组" 的成员。另一些人则认为,Hacker News 上对 Microsoft 的支持和对替代方案的反对,与黑客精神背道而驰。


Fara-7B:微软高效的计算机使用 Agent 模型

微软推出了 Fara-7B,一个专门为计算机使用而设计的 Agentic 小型语言模型(SLM),它只有 70 亿参数,但性能卓越,可与更大的 Agentic 系统相媲美。Fara-7B 通过模拟人类使用鼠标和键盘与计算机交互,能够执行多步骤任务,例如信息搜索、表格填写、预订和购物等。

Fara-7B 的独特之处在于它像人类一样通过视觉感知网页,并直接预测坐标进行点击和输入,无需依赖可访问性树或单独的解析模型。由于其模型体积小巧,可以在本地设备上部署,从而降低延迟并提高用户数据隐私。该模型在 Magentic-One 多 Agent 框架上,使用包含 145K 条轨迹的合成数据进行训练,涵盖了各种网站、任务类型和难度级别。Fara-7B 基于 Qwen2.5-VL-7B,并通过监督微调进行训练。

Fara-7B 在多个 Web Agent 基准测试中取得了领先成果,超越了同等规模的模型和更大的系统。微软还发布了一个新的评估基准 WebTailBench,专注于现有基准测试中代表性不足的 11 种真实 Web 任务类型。WebTailBench 包含 609 个任务,涵盖各种类别,包括单站点任务(如购物、航班、酒店等)和多步骤任务(如购物清单和比价购物)。

Fara-7B 在 WebTailBench 的所有任务类别中,都取得了计算机使用模型中的最高性能。评估设置利用 Playwright 模拟浏览器环境,并使用抽象 Web Agent 接口集成来自任何来源的模型。微软还提供了一个 Fara-Agent 类,作为运行 Fara 模型的参考实现。

Fara-7B 旨在邀请社区进行实践探索和反馈,建议在沙盒环境中运行,监控其执行情况,并避免处理敏感数据或高风险领域。可以通过 UV 或 pip 安装该软件包,并使用 Azure Foundry 托管或 VLLM 自行托管该模型。Azure Foundry 托管无需 GPU 硬件或模型下载,是更简便的入门方式。

)


使用 Postgres 表管理异步任务

本文介绍了如何利用 Postgres 数据库的 task 表来管理和执行异步任务,从而简化服务器架构并提高数据一致性。作者提倡将复杂性转移到数据库层,避免使用多种工具带来的麻烦。

文章的核心思想是,将异步任务(例如发送欢迎邮件)的信息存储在 Postgres 数据库的 task 表中,而不是直接在应用程序代码中执行。这样,应用程序可以快速响应用户请求,并将耗时的任务交给后台 worker 处理。作者使用 CTE(Common Table Expressions)和 postgres.js 库来演示如何将任务插入到 task 表中。文章强调了在数据库事务中使用异步任务的重要性,以确保数据一致性。如果发送邮件失败,数据库事务会回滚,任务会被重新尝试。作者还提到了使用 skip locked 可以并行运行多个 worker,而不会互相干扰。通过将任务信息存储在数据库中,可以方便地进行重试、监控和错误处理,而无需依赖额外的消息队列或任务调度系统。此外,作者还提倡 "TODO-Driven Development",即未完成的任务和 bug 会被记录并重试,从而自然地形成可扩展的 pipeline。

总的来说,这篇文章提供了一种利用 Postgres 数据库管理异步任务的实用方法,强调了数据一致性和简化架构的重要性。


开源本地 AI Agent 沙箱环境:ERA

ERA Agent 是一个开源项目,旨在提供一个本地沙箱环境,用于安全地运行 AI 生成的代码。它使用微型虚拟机 (microVMs) 作为容器,提供良好的开发者体验、快速启动时间(200ms)和增强的安全性。

ERA 的核心功能包括:在本地安全地运行不可信或 AI 生成的代码,通过微型虚拟机实现容器化,快速启动(200ms),以及提供完全托管的云层 Worker/API。安装方式多样,推荐使用 Homebrew,同时也支持从源码安装。对于 macOS 用户,需要特别注意 case-sensitive APFS 卷的设置。Linux 用户则需要确保系统已正确配置以运行 microVM。

该项目依赖 krunvmbuildah,并提供了一系列核心命令,例如创建、执行、列出、停止和清理虚拟机。支持多种编程语言,包括 Python、JavaScript/Node/TypeScript、Go 和 Ruby,并允许通过 --image 参数自定义基础镜像。

配置方面,AGENT_STATE_DIR 用于存放 VM 元数据,AGENT_LOG_LEVELAGENT_LOG_FILE 用于控制日志,AGENT_ENABLE_GUEST_VOLUMES 用于重新启用 /in/out/persist 挂载点。此外,ERA 还提供了一个 Cloudflare Worker 部署方案,可以将 ERA 部署为具有 Durable Object 支持的 HTTP API。项目文档详细介绍了 CLI 的使用、设置脚本和故障排除,以及 Worker/API 的部署指南。


Caligra 发布 C100 Developer Terminal:面向专家的 Linux 电脑

Caligra 是一家新的电脑公司,发布了名为 C100 Developer Terminal 的产品,这是一款搭载 Linux 系统的电脑,旨在加速开发者的工作流程。这款设备配备 AMD Ryzen 9 7940HS 处理器、96GB DDR5 内存和 1TB M.2 SSD 存储,采用金属外壳和机械键盘,预装 Caligra 自研的 Workbench 操作系统。

C100 的设计理念是为技术环境提供专注、可控、私密和高性能的计算体验,目标用户是科学家、艺术家、工程师、设计师以及黑客等专业人士。Caligra 认为,这些人群的工作能够推动社会进步,因此需要一款专门为创造而非消费而设计的电脑。Workbench 操作系统旨在减少干扰,提高团队的工作效率,并适用于安全部署。目前该设备已开放预订,售价 1999 美元,预计 1 月 26 日发货。

评论区对这款产品褒贬不一。有人认为 C100 像是一个“身份象征”,更注重外观而非实用性,并质疑其“极简”设计是否意味着缺少常用软件。也有人指出,将这款设备称为“终端”而非“电脑”可能是一种营销策略,旨在吸引极客用户。此外,评论中还出现了对 C100 缺乏详细技术规格、键盘布局以及操作系统细节的质疑。部分评论者对 C100 的价格表示不满,认为性价比不高,并提出了替代方案。尽管如此,也有人认为 C100 的设计很酷,并分享了更多关于该产品的图片和信息,指出真机已经存在。还有人希望看到该设备配备翻盖式屏幕,并提到了其他类似的产品。


牛车能否进入牛津?探讨拥堵费的法律定义

这篇文章探讨了在牛津新推出的拥堵费政策下,牛车是否需要缴纳费用。文章作者通过查阅相关法律文件,包括牛津郡议会的“收费令”以及英国的《道路交通法》,详细分析了“车辆”和“机动车”的定义。

作者发现,拥堵费主要针对的是“M1类车辆”,而这类车辆的定义又指向了“机动车”。根据《道路交通法》,机动车是指“机械驱动的车辆”。因此,作者得出结论:由于牛车不是机械驱动的,所以不受牛津拥堵费的限制。文章还提到,即使是三轮的 Reliant Robin 或小型 Peel P50 等车辆,虽然可能因为车辆类别的原因而技术上属于豁免范围,但由于它们有车牌,实际上仍可能被摄像头识别并收费。

文章最后强调了英国法律公开透明的重要性,让公民可以方便地查阅法律条文,即使是出于看似荒谬的问题,也能直接验证法律条文,这有助于维护制度的公正性。

评论区也引发了一些有趣的讨论。有人提到,在伦敦金融城,持有“城市绅士”自由身份的人可以合法地赶着羊通过塔桥。也有人指出,“机械驱动”的定义本身已经很明确,不需要额外的法律解释。另有评论者认为,虽然理论上可以带牛去牛津,但实际上可能会面临交通拥堵的问题。还有人提到了托尔金的一本书,书中表达了对牛津工业化的不满。总的来说,评论区从不同角度探讨了这一话题,既有法律层面的解读,也有实际操作层面的考虑,甚至涉及到了文化和历史的背景。



评论 0 条

暂无评论,来种下第一颗种子。