HN Daily Reading · 每日阅读

HN 每日深度阅读 · 2026-04-20

本期围绕“看不见的系统风险”展开:Vercel 与 Notion 安全事件、DRAM 与溴供应链、扬声器窃听和系统提示词变化,让基础设施的脆弱性浮出水面。与此同时,游戏暂停、BYTE 档案和编程元语言又提醒我们,理解系统本身仍然是最好的防御。

2026.04.20 20 篇摘录

共 20 篇 · 约 10,414 字 · 约 27 分钟读完

1. Vercel 2026 年 4 月安全事件

Vercel 在 2026 年 4 月确认遭遇安全事件,攻击者声称已窃取数据并挂牌出售。原文页面在当前抓取时被 BleepingComputer 的反爬虫防护拦截,未能获取完整细节,但结合 HN 标题与讨论可还原事件轮廓:这是一起影响 Vercel 平台侧的入侵,黑客在地下论坛兜售声称来自 Vercel 内部系统或客户相关的数据集,Vercel 官方已承认存在未授权访问。

HN 讨论主要聚焦几个方向。第一,关于受影响范围的猜测:评论者关注泄露的是 Vercel 员工凭证、客户部署元数据(项目名、环境变量名、域名配置)还是更敏感的环境变量值本身,后者因为很多团队把数据库凭证、第三方 API key 直接塞进 Vercel 环境变量而成为最坏情景。第二,关于事件响应的批评:不少开发者吐槽 Vercel 披露速度偏慢、状态页用词模糊,信息更多是通过黑客吹嘘而非厂商主动告知,让依赖平台的用户陷入被动。第三,对 PaaS 单点风险的再反思:有人指出把前端、边缘函数、域名、环境变量、日志全押在单一平台会在事故时放大损失,讨论延伸到是否要改用多厂商拆分或自托管。第四,跟此前 Next.js middleware CVE、Okta、CircleCI 等事件类比,讨论云开发者平台作为”供应链上游”的系统性风险。

也有评论提醒目前黑客说法未完全证实,需等待 Vercel 正式公告与第三方调查结论;在此之前建议使用者轮换 Vercel 账号口令、GitHub 关联令牌和所有存在平台的 secrets。整体基调偏严肃:无论实际影响多大,这已成为 2026 年 DevOps 社区的标志性事件之一。

2. 游戏开发者解释”暂停”背后的门道

Kotaku 作者 Zack Zwiezen 向社交媒体上的游戏开发者征集了”按下暂停键时引擎到底干了什么”的答案,结果五花八门。最常见的做法是把引擎的 timeScale 设为 0、并让 UI/菜单模块显式忽略这个时间缩放。但也有开发者避开 0 而用极小值:Waves of Steel 的 Chris Weisiger 将时间缩放到 0.000000001 倍,因为 Unity 在 timescale=0 时有特殊行为;Unreal 的业余开发者 Tommy Hanusa 用 0.000001 允许玩家”跳出暂停”以超高速飞行查看场景,便于 bug 重现。

文章进一步指出”暂停”其实有许多种类:玩家按 Start 的主动暂停、手柄断开触发的暂停、打开 Xbox Guide 系统菜单的被动暂停、开背包/地图的半暂停等。前 Frontier 开发者 Andrew Gillett 回忆 Kinectimals 里曾维护过约七种不同等级的 pause;Dreamless 谈到 Xbox/PS2 时代开发末期为通过 TRC 合规要求临时加上”断开手柄暂停”,常与原有暂停逻辑冲突出 bug。

作者最喜欢的 trick 是”截屏暂停”:引擎在暂停瞬间对当前画面截图,把截图当作菜单背景铺上去,然后在幕后悄悄关掉敌人渲染、卸载资源、甚至把玩家传送到空房间,解除暂停前再传回。Vlambeer、Minit、Disc Room 的 Jan Willem Nijman 都用过这招,有时需要一帧延迟来隐藏 UI。面对”这不是很 hacky 吗”的质疑,开发者普遍回应:游戏开发本来就是一堆看起来荒唐但运行良好的胶带。

HN 讨论延伸到几类案例:多人在线游戏(如魂系、MMO)无法真正暂停只能打开菜单;模拟类(Factorio、城市天际线)暂停只是冻结模拟 tick 但 UI 与相机依旧;主机认证要求催生的”系统级 pause”;还有对现代手游/服务型游戏取消暂停功能的批评——“暂停”被视为尊重玩家时间的人文设计,正在被在线化侵蚀。多位开发者现身分享自家引擎的时间系统分层(gameplay time vs real time vs UI time),以及”暂停也得继续跑的系统”(音频淡出、网络心跳、成就检测)怎么处理。

3. BYTE 杂志档案:自 1975 年创刊号起

Internet Archive 上线了 BYTE 杂志第一期(1975 年 9 月,Volume 00 Number 01,“The World’s Greatest Toy”)的完整扫描,并以此为起点继续上传早期刊物,供自由下载与在线阅读。BYTE 作为微型计算机时代的启蒙级媒体,记录了从 Altair 8800、6502、Z80,到 Apple II、CP/M、早期 BASIC/Forth 实现,再到 IBM PC、Mac、Amiga 的整部小型计算机编年史;创刊号本身涵盖硬件 DIY、当年可用的 CPU、存储、外设介绍,是”个人计算”概念形成期的第一手资料。

HN 讨论几乎是一次集体怀旧。许多老读者回忆自己第一次在 BYTE 上读到哪篇改变人生的文章:Smalltalk 特辑、Jef Raskin 介绍 Mac 的长文、Forth 与 Lisp 专号、Ciarcia’s Circuit Cellar 硬件专栏等。一些人指出 BYTE 的广告页同样是文物——DRAM 单价、硬盘容量、软件定价反映了那个时代的产业生态。

技术层面讨论围绕扫描质量、OCR 可搜索性、是否包含全部年份(争论焦点在 1980 年代末至 1998 年停刊期间某些卷是否齐全,以及欧洲版/日文版)、图片与电路图的分辨率。有人推荐配合 bitsavers.org 和 archive.org 上其他老刊(Dr. Dobb’s Journal、Creative Computing、Compute!)一起阅读。不少年轻开发者表示这是了解”为什么某些概念长这样”最好的方式——从中可以看到 GUI、面向对象、虚拟内存、个人数据库等思想如何从研究室慢慢渗入主流。还有人感叹今天的技术媒体缺乏 BYTE 那种既硬核又面向爱好者的长文形态。整体气氛是对一个黄金年代出版物的公共归档表示由衷感谢。

4. Notion 泄露所有公开页面编辑者的邮箱

安全研究者 @weezerOSINT 在 X 上披露:任何一个 Notion 公开页面都会泄露所有曾经编辑过该页面的用户的邮箱地址、姓名和头像。攻击面极低——无需登录、无需 cookie、无需 token,仅用一个匿名 POST 请求就能拿到完整编辑者列表。帖子指出该问题早在 2022 年就通过漏洞赏金项目上报过,但到 2026 年仍然可利用,作者对”既然不修还搞什么 BBP”表达了不满。配图展示了请求示例及返回 JSON 中明文的姓名与邮箱字段。

HN 讨论分几个层面。一是严重性评估:对企业而言,任何一个对外公开的 Notion 页面(产品文档、招聘页、wiki、投资者更新)都意味着整条参与链的员工邮箱被外泄,这对撞库、钓鱼、OSINT 定位组织结构非常有用,相当于把公司通讯录免费送给攻击者。二是对 Notion 安全文化的批评:用户指出这属于典型的信息泄露——即使设计上需要渲染”编辑者头像”,也完全可以在服务端脱敏成用户名而非邮箱;把 PII 直接塞进 API 响应是多年未修的架构问题。三是修复路径讨论:短期建议团队审计所有公开页面、把协作者改为匿名账户或仅用工作邮箱别名、考虑把 wiki 迁出 Notion;中期应推动 Notion 提供”发布但不暴露编辑者”的开关。四是类比:Slack、Figma、Confluence 等协作工具历史上也有过公开链接暴露内部成员信息的案例,讨论者认为协作产品普遍把”协作透明”凌驾于”隐私最小化”之上。

也有评论提醒 HN 不要仅凭一条推文下定论,建议等 Notion 官方响应;但多个开发者现场复现了问题并贴出请求示例,确认漏洞真实存在。事件整体被视为”又一起多年未修的 OSINT 金矿”。

5. 七种编程”元语言”(ur-language)

madhadron 在 2022 年写的这篇长文把今天所有编程语言归纳到七种”元语言”下,每一族以一个代表性语言(type specimen)命名。作者的论点是:学习同族的另一门语言很容易,跨族则需要重塑神经通路。七族分别是 ALGOL、Lisp、ML、Self、Forth、APL、Prolog。

ALGOL 族最庞大,特征是赋值、条件、循环组成的函数式结构,成员包括 C/C++/Java/C#/Python/Ruby/JS/Pascal/Ada 以及各种汇编,历史可追溯到 Ada Lovelace 和 EDVAC。Lisp 族以括号前缀表达式与”代码即数据”的宏系统为核心,从 1958 年 McCarthy 的数学定义发展出 Common Lisp、Scheme、Clojure 等;其独特之处是允许程序员改写语言语义。ML 族以一等函数、Hindley-Milner 类型系统、递归代替迭代为特征,包括 Standard ML、OCaml、Haskell、Agda、Idris 等,并催生了依赖类型方向的探索。Self 族(文中虽未在摘录中完整展开)对应基于原型的对象系统,其思想在 1980 年代以”类”形式嫁接到 ALGOL 族各语言中。Forth、APL、Prolog 分别代表栈式语言、数组/符号语言、声明式逻辑语言三种独立范式。

作者强调各族之间会互相借鉴:ALGOL 族自 80 年代开始吸收 Self 的类机制,2010 年后又引入 ML 的类型系统与模式匹配。学习路径建议是先熟悉自己母族的模式,再有意识地穿越到陌生族重塑思维。

HN 讨论有几个焦点。一是分类是否过于简化:有人认为应该为 Smalltalk/Self 与 ALGOL-with-OOP 做更细区分,也有人主张 SQL、Erlang、Rust 值得单列,Erlang 的演员模型是否属于 Lisp 或 Prolog 族存在争议。二是对 Forth/APL/Prolog 地位的肯定:评论者分享了在交易系统、数组处理、配置约束求解中使用这些小众族的经验,佐证”跨族学习带来新思维”的观点。三是教学价值:许多人表示应把”每族至少学一门”列入职业开发者的素养清单,尤其是 Prolog 与 APL 能在特定问题上提供高出数量级的表达力。

6. DRAM 短缺可能持续数年

The Verge 报道,受 AI 数据中心对 HBM 和高端 DRAM 的巨量吞噬,内存制造商预计到 2027 年底仍只能满足市场约 60% 的需求,RAM 短缺将成为跨越数年的结构性问题。三星、SK 海力士、美光都把产能倾斜到 HBM3E/HBM4 上,直接挤压了 DDR5、LPDDR5X 以及消费端 DIMM 的供给,消费者与非 AI 企业购买 RAM 的成本因此持续上涨,装机、服务器扩容、手机内存升配都受影响。

HN 讨论主要集中在几点。一是价格观察:评论者晒出近期 DDR5 32GB、64GB 套条的涨价曲线,有人指出 2024 年底至 2026 年 4 月零售价已大约翻倍,企业级 RDIMM 同样吃紧,甚至出现二手内存反向升值的反常现象。二是结构性原因:DRAM 资本开支周期长(新晶圆厂 2-3 年才投产),厂商在 2022-2023 年周期性下行时砍产能、停扩产,现在要转产 HBM 又需要不同的封装产能(CoWoS、先进封装),短期内没有弹性。三是对 AI 需求是否可持续的争论:如果大模型训练/推理景气度回落,当前积压的订单可能变成库存灾难;但也有人认为推理侧需求刚起步,边缘/终端设备将把需求维持在高位。四是对消费者的建议:要买 PC/自组 NAS 的用户趁手头可用尽快上满内存,等 2027 年只会更贵。

还有围绕 NAND 闪存是否会同步紧张、国产 DRAM(长鑫存储 CXMT)能否起到缓冲作用、以及 Apple/Google 等自研芯片厂商通过长单锁定供给给小厂带来的次生影响的讨论。整体基调是”这一轮短缺和 2017-2018 那次不同,根源是结构性的 AI 需求占用 HBM 产能,很难靠周期自我修复”。

7. 跳表有什么用?

Antithesis 工程师在 Phil Eaton 的《The Art of Multiprocessor Programming》读书会上重遇跳表(skiplist),继而分享了把跳表思想推广到树上、发明”skiptree”解决 BigQuery 上树形数据查询慢的真实工程故事。

文章先复习跳表:在底层链表之上叠加若干”快速通道”——每层以 50% 概率从下层晋升节点,查找时从顶层开始,一层不够再下沉,总复杂度 O(log n)。作者坦言这个数据结构在他职业生涯大多数时候只是”有怪咖粉丝”的冷门玩具,直到 Antithesis 遇到具体难题。

问题场景:Antithesis 对客户软件反复注入故障运行形成分叉时间线树,数据量巨大只能丢进 BigQuery 这类分析型数据库。典型查询是”给定一条日志,沿父指针爬到根节点,还原完整事件链”。分析型数据库擅长全表扫描做聚合,却对点查极慢——用 parent_id 一层层查,每一步都是全表扫描,深度 d 的树就要 O(d) 次全表扫,完全不可接受。拆到 OLTP 数据库又引入双写和 2PC 一致性问题,在 BigQuery 松一致性下更不可行。

解法是 skiptree:把跳表的层级思想移植到树上。建 tree0、tree1、tree2… 多张表,每层节点以 50% 概率保留到上层;每行存 next_level_ancestor(最近的上层祖先)与 ancestors_between(通往该祖先路径上跳过的节点列表)。查询祖先链就变成对各层表依次 JOIN,每次 JOIN 都是分析型数据库擅长的大批量操作,而不是点查。任意根到叶路径上的节点与其在上层的投影,恰好构成一条跳表;整棵 skiptree 实际上是所有路径跳表共享的结构。

HN 讨论几个方向。一是”用分析型数据库存树形/图数据”这一选型本身是否合理:有人质疑为何不直接用图数据库或 Postgres recursive CTE;作者和支持者回应体量和在线写入场景让 OLAP 成为合理甚至唯一选项,skiptree 是在约束下的优雅补丁。二是复杂度与实现细节:节点晋升概率、路径压缩、重平衡、批量写放大成本都被展开讨论;也有人提出与 B-Tree、LSM、Fractal Tree 的对比,以及若配合 Iceberg/Delta Lake 的版本化如何。三是社区补充了其他把跳表推广到二维、空间、并发无锁场景的案例,进一步支持作者”跳表作为一种通用层级索引模式”的观点。整篇被视为近期讲”真实系统里发明数据结构”的好文之一。


8. Claude Opus 4.6 与 4.7 系统提示词的变化

Simon Willison 比对了 Anthropic 公开的 Claude Opus 4.6(2026-02-05)与 4.7(2026-04-16)两版 claude.ai 系统提示词之间的 diff,并用 Claude Code 将历年提示词整理成带时间戳的 git 历史,方便观察演化。

主要变化包括:平台名从「developer platform」改为「Claude Platform」;工具矩阵新增 Claude in Powerpoint(幻灯片 agent),与 Claude in Chrome、Claude in Excel 组成三件套,Claude Cowork 可全部调用。儿童安全部分被单独封装进 <critical_child_safety_instructions> 标签并显著扩写,一旦触发拒绝,同会话后续请求需高度警惕。反过度挽留用户:明确指示模型不得在用户想结束对话时挽留。新增 <acting_vs_clarifying> 段落,要求面对细节缺失的请求先尝试合理行动而非盘问用户;若存在可消歧的工具(搜索、位置、日历、文件),应先调用工具而非反问;任务一旦开始就要一次性做完。与之配套的是新引入的 tool_search 机制:在声称能力缺失前,模型必须先用 tool_search 确认确实没有匹配工具,才能说「我没有访问权限」。

还新增了简洁性指令,要求输出聚焦主答,尽量避免被免责声明淹没。「disordered eating」被明确点名,存在相关迹象的用户对话中禁止给出具体的营养/饮食/运动数字目标或分步计划。反「是/否」截图攻击也被写入 <evenhandedness>:在复杂或有争议问题上,模型可以拒绝给出单字答复。另外,4.6 里关于「特朗普是现任总统」的特例说明被移除,因为 4.7 的知识截止已更新到 2026 年 1 月。

4.6 中关于禁止 asterisk 动作、避免使用「genuinely」「honestly」「straightforward」等词的段落在 4.7 里消失——推测是模型本身已不再犯这类毛病。

Simon 还贴出了他直接问 Claude 得到的可用工具清单,包括 bash_toolconversation_searchcreate_fileweb_searchweb_fetchtool_searchvisualize:show_widget 等 20 余个,据他判断自 4.6 起未变。HN 讨论围绕 tool_search 是否会引入额外延迟、child safety 扩写是否过严以及「acting over clarifying」可能带来的幻觉风险展开。

9. SPEAKE(a)R:把扬声器变成麦克风的隐蔽窃听

这是以色列 Ben-Gurion 大学 Mordechai Guri 团队 2017 年发表于 USENIX WOOT 的经典论文,此次因相关话题被重新翻上 HN。论文展示了一种名为 SPEAKE(a)R 的窃听手法:在一台没有麦克风、或麦克风被禁用/静音/贴胶带的 PC 上,仅凭插入的耳机/耳塞/无源扬声器即可偷听周围声音。

原理建立在电声换能器的双向性上——扬声器是「反向麦克风」,振膜在磁场中被电信号驱动发声,同样可被声波推动产生电信号。关键在于现代主板广泛采用的 Realtek 芯片组支持「jack retasking」:通过软件把一个本是输出口的耳机插孔重新配置成输入口(line in)。这个特性在规范文档里有明确记载,但几乎无人使用,也就几乎无人设防。

攻击面因此成立:恶意软件拿到权限后,悄悄把绿色耳机口改成粉色 mic 口,已插入的耳机或耳塞瞬间变身录音设备。论文实现了原型并在 Realtek ALC 系列芯片上验证,测得 9 米外依然可识别人声,录音质量足以听懂谈话内容。作者还测试了频响、信噪比与距离衰减,展示了几种针对会议室、办公桌场景的使用案例。

文章重点提到两类典型场景:一是本身没有麦克风但有耳机的设备(很多台式工作站);二是为隐私主动把麦克风屏蔽、扎克伯格式贴胶带的设备——以为安全,实则耳机仍在侦听。防御建议包括:在 BIOS 关闭 jack retasking、使用带放大器的有源音箱(无法反向工作)、HID 层限制端口重映射、或在操作系统驱动中对端口角色切换弹出用户确认。

HN 评论重提 NSA 红黑安装指南里早已提到的 TEMPEST 风险,讨论了哪些现代主板仍保留 retasking,以及为什么厂商不干脆默认禁用这个鲜为人知的特性;也有声音指出对付此类威胁最实用的办法仍是物理拔掉耳机或使用硬件开关的麦克风/耳机线。

10. 溴瓶颈:中东冲突如何可能掐断全球存储芯片生产

War on the Rocks 的这篇 Cogs of War 专栏把当前美以-伊朗战争(目前处于不稳定停火)暴露出的另一个供应链死结摆上桌面:不是被媒体热议的氦气,而是溴。DRAM 与 NAND 闪存在多晶硅栅极刻蚀阶段依赖半导体级溴化氢气体(HBr),其对多晶硅/氧化硅的选择性可达 100:1,而氯基替代品只有约 30:1;在先进 DRAM 节点几何尺寸下,这正是晶体管能工作与被烧穿之间的差别。HBr 同样用于 CVD 与芯片封装,短期内没有可行替代。

作者指出,韩国 97.5% 的溴进口来自以色列,主要供应者是死海边的 ICL 集团。以色列本土贸易多经哈伊法、阿什杜德地中海港口,绕开霍尔木兹海峡,因此被认为相对稳妥。但伊朗已连续三周用弹道导弹打击内盖夫沙漠——以色列南部的国防与工业中枢,落点包括迪莫纳、阿拉德,距离 ICL 死海提取与转化综合体不到 35 公里。一旦生产被迫停摆,全球没有任何一处现成设施能在短期内把原料溴加工成达到 ppb 级金属杂质的半导体级 HBr。

文章拆解了「市场再分配」为何行不通的三个结构性事实。第一,已用于阻燃剂、钻井液等工业用途的溴无法化学逆转回半导体级,两条供应链共用原料但在转化节点永久分叉。第二,把原料溴转成半导体级 HBr 需要专用的气相蒸馏塔,能把痕量金属降到 ppb 级别,这类基础设施目前仅存在于半导体化工供应链内部,新建需要长周期的审批、设备采购与晶圆厂端的资质验证。第三,现有非以色列生产商的产能都已被锁定给既有客户,挤不出余量。

结论是:这是一个在导弹射程内、却尚未进入政策视野的单点故障。若 ICL 死海设施受损,冲击会在数周内传递到消费电子与军事系统的每一端,且修复周期以年计。HN 讨论集中在替代矿源(约旦侧死海、美国阿肯色 Smackover 地层)的可行性、ICL 的冗余与库存、以及为何这种集中度在多年前就被预警却无人动作。

11. Shader Lab:像 Photoshop 一样做着色器

basement.studio 放出的 Shader Lab 是一个面向浏览器的交互式着色器编辑器,定位类似「着色器版 Photoshop」:以时间线 + 关键帧 + 图层 + 属性面板的工作流来组合、调整 GLSL/WGSL 视觉效果,面向设计师与创意编码者,无需手写完整 shader 程序即可搭建动态视觉。

默认场景展示了一个多图层的 CRT 老式显示器效果,自上而下包括 CRT、Dithering、Text、Pattern、Gradient 五层。每层都有通用的 Opacity、Blend、Filter(Hue/Saturation)属性,CRT 专用参数则覆盖了 slot-mask 遮罩模式、扫描线强度、桶形畸变、会聚、聚束、辉光衰减、色度保留、阴影抬升、余辉、噪点、闪烁、glitch 与 bloom 的强度/阈值/半径/柔化等一整套 CRT 模拟量。时间轴(默认 8 秒)上可对任意参数打关键帧,Auto-Key 开关让参数调整自动记录,配合「Scene Actions」触发更大的状态转换。

项目由 basement.studio 工程团队开源在 GitHub(basementstudio/shader-lab)。HN 上的讨论点主要集中在三块:一是它作为设计工具相对 ShaderToy/tools 的差异化——图层 + 时间线 + 可视化参数更贴近品牌动效与 UI 落地;二是希望能导出 GLSL/WGSL 源码或 React 组件,而非仅在线使用;三是对 CRT、dithering 等预设质量和性能的正面评价,以及它是否会进化为类似 After Effects 插件或 Three.js/react-three-fiber 工作流里的一环。

原文页面几乎就是应用本身,并无长篇介绍,更多体验来自亲手打开 UI 试。对 Web 原生实时图形工具链感兴趣者值得收藏。

12. A. J. Ayer —《我死时看到了什么》(1988)

这是英国逻辑实证主义旗手、无神论哲学家 A. J. Ayer 1988 年发表于《星期日电讯报》的散文,被 Peter Sjöstedt-Hughes 转载整理。文章发表时 Ayer 已 77 岁,次年去世。

背景是 Ayer 从纽约出院后自信病愈,回到伦敦立即恢复高强度社交,5 月 30 日晚肺炎复发。几天后在医院住进重症监护,因误吞一片熏三文鱼导致心脏停跳约四分钟。据主治医生与护士长复述,这四分钟他在临床意义上死亡。救回后 Ayer 向法语友人描述了他「看见」的场景:他曾两次试图过河(对应希腊神话中灵魂渡冥河斯提克斯的意象),第一次受阻,第二次成功;「我的思想变成了人」。在意识更清醒的叙述里,他讲述自己面对一道强烈的红光,那束光「负责管理宇宙」,并感到宇宙在空间与时间上都处于失序;于是他反复尝试接触两位时空主宰者,试图把秩序交还给他们,但徒劳无功,直到他「第二次过河成功」返回身体。

Ayer 随后用典型的分析哲学态度反思这一体验。他坦言这段经验「稍稍削弱了」他对死亡即彻底终结的坚定信念,但也强调这远不足以构成「意识可脱离肉体延续」的证据:同样合理的解释是濒死的大脑在缺氧状态下生成的内在表象;他的古典教育背景(斯提克斯河、卡戎、休谟的偏爱)恰好提供了叙事模板。他并未改变自己的无神论立场,文末写道这段经历「并未改变我希望不会有来世的愿望」。

HN 评论折射出这篇老文章常见的张力:一派读者把它当作濒死体验(NDE)文献的标志性案例,尤其来自一位彻底的逻辑实证主义者;另一派强调 Ayer 本人在第二篇后续文章《新生后的思考》中对叙述做了更保守的修订,承认一切仍可归于大脑机制;还有评论从神经科学角度讨论 DMT 假说、脑干缺氧产生的刻板视觉原型以及文化叙事对濒死内容的塑形作用。哲学味读者则对 Ayer 如何在信念更新与原则坚守之间取平衡表示欣赏。

13. Nanopass Framework:干净的编译器构造语言

Nanopass 是一个嵌入式领域特定语言(Scheme/Racket 生态),由 Dipanwita Sarkar 等人在 Indiana University 的编译器教学工作中提出,Andy Keep 与 Leif Andersen 长期维护。其核心理念是:与其把编译器写成若干体量巨大的 pass(词法/语法/类型/优化/代码生成),不如拆成数十个「纳米级」小 pass,每个 pass 只做一件小事,并在多个精心定义的中间表示(IR)之间转换。

项目主页简短到只有一张 banner 和一句定位,但其真正内容在文档与论文里展开:框架提供 define-language 声明 IR 的语法范畴与非终结符,define-pass 声明 pass 的输入/输出语言、遍历规则与模式替换;相邻 pass 之间只需描述差异,样板代码由宏自动生成。其结果是:pass 的意图极清晰,IR 与 pass 的类型一致性可被静态检查,改写一个 pass 时不必重新手写整棵 AST 的遍历。教学上,Nanopass 让学生在一学期内写出一个完整的编译器,并能像拼乐高一样增删优化阶段。

它背后的学术论文「A Nanopass Framework for Commercial Compiler Development」曾用于 Chez Scheme 的大规模重构,并在 Racket、Gambit 等实现中得到采用。相关思想也影响了 MLIR 等现代多层 IR 工具链的设计理念——不同处在于 Nanopass 强调「小步、显式、宏生成」,而 MLIR 更偏「多方言、strong typing、pluggable pattern rewriter」。

HN 讨论不大但质量较高,集中在三方面:一是 Nanopass 对理解编译器结构的教学价值,尤其是在 Indiana University 的编译器课程中常被推崇;二是与 MLIR、LLVM pass manager、nanopass-in-Rust 移植等现代方案的比较;三是遗憾——这个框架在 Scheme/Racket 之外的传播度有限,部分是因为它的威力依赖宏系统,脱离 Lisp 家族后复刻成本高。评论者认为这仍是想自己动手写编译器的人最值得了解的一套设计哲学之一。

14. Show HN: 用浏览器内的 Gemma 4 E2B 把文字变 Excalidraw 图

作者在 HN 上演示了一个完全运行在桌面 Chrome 内的 prompt-to-diagram 工具:用户描述想要的示意图,浏览器里的 Gemma 4 E2B 模型生成一段约 50 tokens 的紧凑「绘图代码」,再被解析为 Excalidraw 场景渲染出来。与直接输出 5000 tokens 级别的原始 Excalidraw JSON 相比,这种中间 DSL 节省了大量推理 token,使得 E2B(约 20 亿等效参数)小模型也能稳定产出结构合理的图示。

项目的技术亮点集中在「TurboQuant」算法——polar 变换 + QJL(Quantized Johnson-Lindenstrauss)压缩——作者在该 demo 里用 WGSL compute shader 把它搬进 GPU,使 KV cache 被压缩约 2.4×,从而让长一些的对话也能塞进显存。在支持 WebGPU subgroups 的 Chrome 134+ 桌面版上,推理速度能到 30+ tokens/s。作者同时发布了姊妹包 turboquant-wasm(npm),在 CPU 上用 WASM+SIMD 做向量搜索,实现相同算法的两种落地形态。

硬件门槛不算低:需要约 3 GB 可用显存,手机浏览器普遍被卡在上限以下;Safari/iOS 尚未实现 WebGPU subgroups,因此不支持;页面会在无法探测到 GPU adapter 时直接给出「Can’t run in this browser」的提示,建议关闭其他占用 GPU 的标签或检查 chrome://gpu。所有推理、KV 缓存、渲染都在浏览器本地完成,不向外发请求。

HN 讨论偏正面但现实主义:大量评论关心在 Apple Silicon、Windows 不同显卡上的实际吞吐;有人称赞 WebGPU 作为「真正可在 Web 发放的本地 LLM 平台」已接近可用,KV cache 量化是让小模型落地浏览器的关键拼图;也有声音质疑 Gemma 4 E2B 的图示质量是否足够可靠、是否容易在稍复杂的需求下产生语法错误;Excalidraw 作为输出格式获得一致好评——手绘感强、易于二次编辑。作者在线回答了若干关于 WGSL 实现细节与 subgroups 依赖的问题。


15. Faceoff:追看 NHL 比赛的终端 UI 应用

Vincent Gregoire 发布了 Faceoff,一个用于实时追看 NHL 冰球比赛的终端用户界面(TUI)应用。项目基于 Python 的 Textual 框架构建,数据来源是非官方的 nhl-stats-api-client,可以通过 uvx faceoffpip install faceoff 一行命令启动。

功能覆盖了球迷日常所需的核心场景:按日期浏览赛程、实时刷新比分、查看进行中与已结束比赛的 play-by-play 与 box score、赛前预览包含守门员对位和主要球员数据;联盟层面支持 Wild Card、Division、Conference、League 四种排名视图,以及射手榜、守门员榜等统计领袖排行;还可以浏览全部球队的阵容、赛程,以及球员的生涯数据与逐场记录。界面会根据终端宽度自适应,比赛时间按本地时区显示。作者在致谢中提到灵感来自追看 MLB 比赛的 Playball 项目。

HN 讨论里评论不多但集中。一部分评论者把 Faceoff 放进了”体育 TUI 宇宙”的脉络里:除了作者提到的 Playball(MLB),还有网友推荐 soccer-cli、NBA 相关的命令行工具,以及把 ESPN 数据塞进终端的老项目,讨论延伸到 TUI 用来追体育到底是实用还是极客玩具——支持者认为在工作时开一个窗口偷瞄比分远比浏览器标签页优雅。另一拨讨论围绕 NHL API 的合法性与稳定性,因为官方没有对外公开的 API,社区只能靠逆向公共接口维持,工具的可持续性依赖于 NHL 不突然封禁。还有人请求扩展到 KHL、欧洲联赛和女子冰球赛事。Textual 再次被认为是 Python 写 TUI 的最舒适选择之一。


16. Blue Origin 首次复用 New Glenn 一级,但上面级失联

Blue Origin 的 New Glenn 重型火箭在周日完成了第三次飞行,也是贝索斯旗下公司首次复用一枚轨道级一级助推器。321 英尺高的火箭于美东时间早上 7:25 点火,七台 BE-4 甲烷发动机将其推出卡纳维拉尔角,三分钟后一级成功分离,完成再入与制动点火后稳稳降落在大西洋的回收船上。这枚编号 Never Tell Me The Odds 的一级曾在 2025 年 11 月执行首飞,本次更换了新发动机,但原有发动机将在后续任务中复用。CEO Dave Limp 把这次视为打开快速复飞节奏的关键一步。

然而由双 BE-3U 液氢液氧发动机驱动的上面级并未完成预定任务,导致 AST SpaceMobile 的第二颗全尺寸 BlueBird 宽带卫星进入异常轨道。AST 正与 SpaceX、亚马逊竞争直连手机的卫星宽带市场——Starlink 的直连手机业务已经通过 T-Mobile 等合作运营商覆盖超过 1000 万活跃用户,轨道上约有 650 颗具备直连能力的 Starlink;亚马逊 Kuiper 迄今发射了 241 颗卫星。文章指出 AST 此次”庆幸只搭载了一颗”,说明他们原本可以一箭多星。NASA 把 New Glenn 列为 Artemis 登月计划的关键元素,上面级故障对时间表构成压力。

HN 评论首先聚焦一级回收对比:有人指出 SpaceX 已经能做到 9 天快速复飞、一周一枚一级复飞五次,Blue Origin 想追上”工业级节奏”还有一段距离。关于上面级失败,讨论围绕 BE-3U 仍然相对不成熟、氢氧级本就比甲烷级更难调教;也有人担忧对 AST 估值和 Artemis 时间线的连锁影响。另一条线索是”为什么官方通告极其简略”——Blue Origin 传统上对失败披露不如 SpaceX 透明,评论者希望看到更坦率的事故分析。


17. 用热风枪和一把刀逆向 ME2 玩具的 USB 协议

作者是 Miuchiz Reborn 项目的负责人,长期致力于复活 2000 年代中期那一批”实体玩具 + 在线网站”同步型游戏。2024 年 YouTuber bjiru 上传了一段关于 ME2 掌机的视频,并公开了早已失传的 PC 客户端副本;作者受此启发决定把 ME2 的 USB 同步协议也逆向出来,让整套体验重新完整。

他从 eBay 收购了多台 ME2 作为实验品。设备结构简单:两个按钮 + 一个 mini-USB 接口;主存储是 SST39VF3201(4MB、16 位宽)NOR flash,主控却藏在”chip-on-board”环氧树脂胶下,无法识别型号。常规思路是烙铁拆 flash、用 XGecu 编程器读 dump,但他多次用烙铁拆板失败,最终购入热风返修台(号称能到 500°C),用热风吹下芯片成功完成 flash dump。但把 flash 回焊到原 PCB 上的计划因为 48 引脚太小、焊接又要避免熔化插座塑料而放弃。

文章后续讲述了他如何通过切割环氧树脂 glob-top(“Heat Gun and a Knife”标题由来)、配合热风软化再用刀刮,逐步暴露主控芯片的真实型号,进而找到数据手册、识别指令集、定位内部 ROM,最终逆向出 USB 通信协议。全程体现硬件逆向工程的典型路径:拆焊、dump、去封装、识别 MCU、反汇编、协议复原。HN 讨论集中在三点:一是对老玩具平台保育(preservation)的敬意,认为这类 Web 2.0 时代”玩具+在线”配对的生态正在快速湮没;二是交流类似 deglob 的经验,包括用发烟硝酸、王水、或热机械法去除封装;三是 Miuchiz Reborn 项目本身被安利给不了解的读者。


18. Prove You Are a Robot:给 Agent 的反向 CAPTCHA

Browser Use 为其 agent-native 注册流程设计了一种”反向 CAPTCHA”:专门把人类挡在外面、让 AI agent 顺利通过。使用方式是给 agent 一句 prompt——“fetch browser-use.com and solve the agent challenge.”——网站会返回一道数学题,但题面经过系统性混淆:大小写交替、随机符号穿插、空格被打乱、数字用随机语言拼写出来。对 LLM agent 而言这些扰动只是一次前向传播就能剥掉的薄纱;对人类读者则相当劝退。

文章展示的示范题是”两列火车相向而行、鸟在中间来回飞”这一经典谜题(Max Born 曾出给 von Neumann)。解法”trick”是注意到火车相遇时间 $t = d/(v_1 + v_2)$,鸟飞行距离即 $v_b \cdot t$,无需求几何级数。Browser Use 以此作为智力门槛,通过后即授予 API key 以及免费额度(无限使用、最多 3 个并发 session)。文章还给出一道”bonus 题”:要求 agent 给 TSP 设计多项式时间算法并证明 $P = NP$——显然是段子彩蛋,顺便把用户引流到 Clay 数学研究所的千禧难题页面。

HN 讨论分几派。一派认为这是聪明的反向防御:反爬系统的博弈焦点本就是”区分人机”,把标尺倒过来对 agent 友好恰好契合 agent-first 产品定位。质疑派提出三点:其一,混淆可以被更强的人类读者看懂(或让人用 GPT 解题),并不是真正的人机分界;其二,agent 通过 CAPTCHA 等于拿 API key,可能被用于滥用(自动注册薅羊毛、刷免费额度);其三,产品本身是帮 agent 自动化浏览器的,这里把”通过 CAPTCHA”作为营销噱头更多是态度表达。也有人把这场景类比 Cloudflare 的”AI Labyrinth”,讨论未来 Web 可能出现”面向 agent 的正门 + 面向人的正门”并行入口的可能。


19. 用自造语言写 CHIP-8 模拟器

作者 navid-m 用自己设计的一门编程语言实现了 CHIP-8 模拟器。CHIP-8 是一套 1970 年代的虚拟机字节码规范,指令集极小(约 35 条)、寄存器少、显示仅 64×32 单色,历来是学习”写一个解释器/模拟器”的经典练手项目,因此成为验证一门新语言 runtime、类型系统、FFI 与图形绑定完整度的合理基准。仓库本身以 README 为主,提供编译/运行说明和按键映射,截图显示其能跑 Pong、Tetris 等经典 CHIP-8 ROM。

这类项目的典型价值在于”自举 + 自证”:用自造语言完成一个非玩具程序,意味着该语言至少具备位运算、字节数组、结构体或等价抽象、主循环计时、帧缓冲绘制与键盘轮询的能力——对任何早期自研语言都是一次硬指标体检。作者还借助外部图形/输入库(通常是 SDL 或 raylib 的绑定)来完成渲染与输入,也间接证明 FFI 能走通 C ABI。

HN 讨论偏社区性。几位评论者对”自造语言”这件事本身表达敬意,认为 CHIP-8 是最合适的自研语言冒烟测试;也有人请作者写一篇博客介绍该语言的语法、类型系统、编译器后端(LLVM 还是自写 codegen)以及与现有语言的差异化点,因为仓库 README 本身没有充分展开。讨论延伸到 CHIP-8 的历史与变种(SCHIP、XO-CHIP),并推荐了一些用于验证正确性的测试 ROM 套件(例如 Timendus 的 chip8-test-suite)。整体气氛是鼓励与”想看更多”,对作者下一步公开语言规范的期待高于对模拟器本身的点评。


20. 用 Go 独占读取 USB RFID 读卡器的输入

作者家里闲置一台便宜的 USB RFID 读卡器。这类设备在操作系统层面伪装成 HID 键盘——刷卡时直接把卡号”敲”进当前聚焦的应用,后面补一个回车。问题是:它会污染任何窗口的输入。作者想把输入捕获到单一应用中,不影响其他窗口。

关键点是 Linux 的 EVIOCGRAB ioctl:对 /dev/input/eventX 调用 ioctl(fd, EVIOCGRAB, 1) 会请求内核对该输入设备的独占访问,期间事件不会再转发给 X11/Wayland 等图形栈。识别正确的设备路径可以用 find /dev/input/by-id 查看,例如 usb-something_Barcode_Reader-event-kbd。作者不想依赖 Python 的 evdev 这类库,直接用 Go 的 syscall.Syscall + unsafe.Pointer 写了一段约 60 行的程序:定义 inputEvent 结构体(对应内核的 struct input_event)、把设备文件 Open 后立刻 EVIOCGRAB、循环 binary.Read 解析按键事件,维护一个小的 HID key code → 字符映射表(数字 + A-Z),遇到 KEY_ENTER 就把累积的缓冲区作为一条卡号打印,最后在退出时把 EVIOCGRAB 设回 0 释放独占。

HN 评论量少但有价值。一位读者指出 macOS 上同类需求需要走 HID manager(IOKit)或 Karabiner-Elements 的手段;Windows 上可以用 Raw Input API 按设备句柄区分。另一条主线是”键盘模拟型读卡器 vs 真 HID RFID 设备”的区别:后者会暴露专门的 HID usage page,不需要 grab。还有人提醒:独占 grab 的程序一旦崩溃而未恢复,会让读卡器对所有其他应用失效,最好用 defer 或信号处理保证退出时 EVIOCGRAB(0) 一定被调用。这篇文章被评价为”一次典型的 Linux/evdev 小而美工程笔记”,原帖正文也给出了完整的 Go 源码,可直接复制运行。