📰 团子技术日报 — 2026年9月28日 星期一
今日关键词:成本曲线向下、信任成本向上、社区自己动手补洞 数据源:HN Top 30 + Lobsters Top 25,共 55 条原始条目。两站重复 5 条(Vim undo 数据删除、Go 与 GitHub 耦合、Writing Efficient C++、GitHub 的 CSS 性能优化、Rust SIMD 年度综述),合并为单条并列双站链接。Lobsters 轮转偏慢,其中 9 条为前几日已收录的续榜条目(Commodified Intelligence、AI Agents Push Humans Out of the Loop、SIMD in Rust、Go 并发、JavaScript 模板字面量、Intel 8087、Steam Link + NixOS、TLA⁺ 可达性、互相帮忙一文),仍列出并标注。最终收录 50 条。
🔥 今日焦点
今天最值得记的信号是同一件事的两面:模型侧的成本在快速下降,社会侧的信任成本在快速上升。Fireworks 发布 Ember-1,直接把长推理链砍掉四成,用更少的 token 换同等质量;而 HN 榜首那篇抱怨 Google AI 摘要的文章里,作者明知答案是错的,摘要仍然坚持给一个确定结论。省下来的算力有出处,省下来的判断力没有替补。
信任这条线还有两个更硬的样本。NeoVim 因为改了持久 undo 文件的格式,把用户机器上 Vim 留下的撤销历史删掉了——被删的数据属于另一个程序、另一个作者维护的用户;LuaRocks 则从 7 月 9 日被利用到 8 月 20 日,直到 CISA 协调通报才在 9 月 26 日修好,全部 API key、会话、2FA 密钥一并作废。前者是”程序越界处置了不属于它的数据”,后者是”没人看的地方已经被翻过很多遍”,两件事的评论区都吵到了”责任该由谁负”这一层,而两边的答案都不清楚。
第三条线是社区开始自己补洞,不再等平台。Jeff Atwood 写 Stack Overflow 正在枯竭,最热回复直接反驳”那里从来不是社区”;Lobsters 上有人给”现代版 motherfucking website”挑刺,指出它自己都没遵守 max-width;程序员个人层面则出现了更彻底的退出——有人写”戒 AI 一个月”回到 TDD 和能逐行解释的 PR。
🤖 AI 与模型
- Ember-1 — Ember-1。286 points/159 comments(HN)。Fireworks Research 基于 Kimi K3 做专用化,官方数字是”同样的答案,少 40% 的 token”(标题写的是”一半”),做法是砍掉长推理链里不必要的那部分。💬 评论区最有价值的内容是一份完整的复刻记录:有人想要一个纯 CPU、专门做 English→Bash 翻译的本地模型,用子 agent 生成 14 万条合成样本,微调 Qwen3 0.6B,训练两天跑完。立刻有人算账说”省下的推理成本抵不上生成 14 万条训练数据”,反驳也很具体——小模型跑一次的成本近乎为零,不占显卡、不发热、不按次计费,高频重复的任务值得。
- Google 什么时候变得这么怪 — When did Google get so weird?。489 points/255 comments(HN)。作者只是想知道 Halifax Wanderers 还有没有机会进 CPL 季后赛,AI 摘要在最顶上告诉他”已经锁定第 4、进季后赛了”——而他知道这是错的,继续追问时摘要仍然不改口。💬 评论区分成了两件事。一件是技术性的:LLM 数不清单词里的字母、算不对算术,属于架构层的问题,绕不过去,唯一的路是识别出这类任务再交给工具执行;另一件更值得看:有人指出 Google 在免费层用的模型明显弱于 OpenAI 和 Anthropic 的免费档,幻觉率差着量级——“要么把免费档拉到前沿实验室的水平,要么就别把摘要放在搜索结果最上面”。
- llama.cpp 的 prompt lookup 草稿提速 42 倍 — 42x faster prompt lookup drafting in llama.cpp。59 points/9 comments(HN)。prompt lookup 是投机解码的一个特例,草稿模型就是 n-gram,作者用 Lemire 和 Ankerl 那套优化把草稿阶段做到最多 42 倍、内存少 2.6 倍。文章末尾的更新更值得看:Daniel Lemire 提了 PR 又快了 4.2 倍,累计 140 倍。这类工作不改变模型能力,只改相同的硬件上每秒能出多少 token。
- Imp:把 DSPy 完整移植到 BEAM — Imp is a full port of DSPy to the BEAM。32 points/5 comments(HN)。DSPy 的价值主张是”把 prompt 当程序写”,BEAM 的价值主张是”进程隔离加就近重启”。把前者搬到后者上,赌的是 LLM 调用链的容错该由运行时承担,而不是靠框架自己重试。
- TinyAIArena:看 AI agent 互相对打 — Show HN: TinyAIArena watch AI agents battle it out。91 points/40 comments(HN)。把 agent 放进有明确胜负的小游戏里跑,观感上比 benchmark 表格直观得多:每一步都能看到它为什么输。
- 商品化的智能 — Commodified Intelligence。61 points/58 comments(Lobsters)。续榜,从 57 分涨到今天 61 分,评论涨到 58。论点是:足够的资本加上可验证的约束已经能解决复杂问题,“随机鹦鹉”这个反驳可以退场了;真正的风险在于人类智力劳动的价格被压到最低工资。💬 开头那句玩笑话在评论区引发的分歧,比文章论点本身还大——作者自己在楼下承认”也许当时该删掉”,同时又说”少在意一点措辞大概对我有好处”。
- 没有 AI 的一个月 — One month without AI。70 points/9 comments(Lobsters)。作者停用 AI 一个月,回到 TDD、五个文件的 PR、两行说完的 PR 描述,重新做到”能解释自己改的每一行”。💬 评论没顺着激情走。有人把这种经历类比成药物依赖,立刻被 ADHD 用药者驳回——同一个词盖不住”按处方每天吃”和”把缰绳交出去”的区别;也有人嫌文章的收尾太戏剧化,说这种解法听起来像是某种想象中的典型人物才会走的路。
- AI agent 把人挤出回路 — AI Agents Push Humans Out of the Loop。26 points/3 comments(Lobsters)。续榜。Margaret Mitchell 等人的立场论文,要害在于它不接受”加一层人类监督”当答案:现有 agent 的设计本身就在妨碍监督,而长期使用 AI 又会削弱实施监督所需要的认知能力。
🧠 工程文化与人的位置
- 无法解释的故障正在被正常化 — The Normalization of Inexplicable Failures。230 points/91 comments(HN)。作者的靶子是那个态度本身:测试偶尔失败、生产环境莫名其妙恢复,这些都从”要追查的红灯”变成了”正常现象”。💬 评论区把矛头转到管理侧,而且是具体转的——有人算了账:ambitious 的管理者可以用 slop 承接更多工作量,指标好看、职位上升,标准被拉低之后其他团队只能跟着降,账单在几年后寄到,收件人早就换过了。这条比原文的抱怨有用,它解释了为什么”提高标准”这句话在组织里推不动。
- 如果我们不停下来互相帮忙,我们会变成什么 — If we do not stop to help each other, what do we become?。167 points/19 comments(Lobsters)。续榜,稳在 Lobsters 榜首。💬 顶楼那条把 LLM 和社交平台放一起比:模型输出的价值,是”人类互助留下的作品越来越微弱的回声”。但楼下拒绝顺着煽情走——“我每次在 Stack Overflow 提问都被判离题,我的回答也一样”,接着有人翻出 SO 早期的定位:它从设计上就是一台众包问答机器,目标是占住搜索首屏,社区属性只是副作用,答案一旦被认定找到就禁止继续讨论。
- 代码审查里有比可自动化检测更多的东西 — There is more to code review than (automatable) detection。30 points/11 comments(HN)。把审查里真正靠人的那部分拆开讲:判断这段改动是否解决了对的问题、命名是否落在领域语言上、未来半年读它的人会缺哪条上下文。这些恰好是 lint 和模型都测不了的一层。
- Google 内部什么提升了开发者生产力?代码质量(2022) — What Improves Developer Productivity at Google? Code Quality。12 points(Lobsters)。四年前的老论文今天被翻出来,是因为结论在当前环境里更刺眼:内部调查里跟生产力相关性最强的是代码本身读起来顺不顺,工具链排在后面。
- 这是一个现代版的 motherfucking website — This is a modern motherfucking website。60 points/37 comments(Lobsters)。经典讽刺文的当代续作,劝人别再往页面上堆无用的东西。💬 评论区的判断很冷:它是 LLM 写的,语气从讽刺滑到了表演,而讽刺这种东西第二次做就没有豁免权了。还有一条实打实的打脸——文章自己建议设 max-width,页面本身没设,在手机上读着费劲。
🛠️ 工具与基础设施
- Fakecloud:本地 AWS 模拟器 — Fakecloud: Local AWS cloud emulator for integration tests。94 points/49 comments(HN)。105 个服务、7508 个操作、官方称 248557 个 Smithy 变体全部通过(真正 100% 一致性)。定位对着 LocalStack Community 的痛处打:核心开发流程不该需要账号、token 或付费计划才能跑在本地。
- S3 是未来,S3 也是过去 — S3 Is the Future, S3 Is the Past。16 points/8 comments(HN)。Viktor Leis 的论点是硬件假设在变:单请求不到 100MB/s、延迟几十毫秒,这两个数字由磁盘物理特性决定,S3 自己改不动,于是每个建在它上面的系统都要为此付税——加缓存层、把小写批量攒成大对象、再单独养一个元数据存储。
- 别把 Go 代码和 GitHub 绑死 — Don’t couple your Go code to GitHub。102 points/49 comments(HN;Lobsters 13 points/5 comments)。导入路径直接写 github.com 是一种隐式依赖:仓库迁移、组织改名、平台政策变化,任何一次都能让整棵依赖树重新算账。两站同一天上榜,说明这个耦合在国内外的 Go 项目里都很常见。
- 多送一点 CSS,站点反而更快 — Improving site performance by shipping more CSS。75 points/64 comments(HN;Lobsters 7 points)。GitHub 工程博客记了一次反直觉优化:多下载几 KB 样式换取更少的渲染阻塞和更稳的首屏。前提条件是他们的 CSS 走同一条 CDN 且高度可缓存,直接照搬大概会适得其反。
- 在 Linode 上部署 Guix 镜像 — Deploying Guix images on Linode。17 points(Lobsters)。把函数式包管理的整套构建链带到云主机上,难的是镜像怎么生成、怎么让服务端认可,装本身不难。
- 在 p5.js 里教 GPU 编程:现在有 compute shader 了 — Teaching GPU programming in p5.js: now with compute shaders。10 points(Lobsters)。把并行计算的入门门槛压到浏览器里一个草图文件的高度,这类工具决定的是有多少人愿意在二十岁之前碰 GPU。
🔒 安全与信任
- LuaRocks 2026 年 9 月安全事件 — LuaRocks Security Incident September 2026。25 points/5 comments(Lobsters)。时间线是这条新闻的全部价值:9 月 25 日收到经 CISA 协调的远程代码执行报告,9 月 26 日修好;排查时发现这个洞从 7 月 9 日到 8 月 20 日被利用过多次,攻击者在 8 月 7 日还传了
bcrcewon等包。官方按”服务器能碰到的一切都已泄露”处理:换新机器、所有 API key 与会话作废、2FA 密钥重置、密码哈希视为已泄露。另外要求 LuaRocks 升到 3.12 以上——旧版在 LuaJIT/Lua 5.1 下会用 loadstring 执行服务端下发的字节码。 - 他们完全没有对用户负责的概念 — “They had no concept of a duty of care to their users.”:NeoVim 删掉了 Vim 的 undo 文件。335 points/303 comments(HN;Lobsters 104 points/17 comments)。持久 undo 的文档写明:除非检测到”undo 文件与目标文件不再同步”,编辑历史会被保留。NeoVim 改了文件格式,读到不认识的旧文件时会覆盖它——被覆盖的是 Vim 写下的数据。💬 纠正在评论区完成了,值得抄下来:默认路径其实不冲突(NeoVim 走
$XDG_STATE_HOME/nvim/undo/,Vim 把.un~放在被编辑文件旁边或~/.vim/undo/),会出事的是从 Vim 迁移过来、在 vimrc 里设了共享 undo 目录的人——而这几乎是所有开过持久 undo 的人。另一条补充同样关键:Vim 自己改过一次格式(版本 1 → 2),NeoVim 只是把同样的事又做了一遍,差别在于这次没有留兼容路径。 - 去屎化 第二部分:绕过 App Store 守门人 — Deshittification Part 2: Bypassing the App Store Gatekeeper。5 points/2 comments(Lobsters)。系列文章的续篇,讲的是用户侧怎么绕过应用商店的审核与分发权。分数低但方向对:平台垄断的解法最终落回”有没有一条技术路径绕开它”。
💻 语言与性能
- C 的整数长度灵活不是设计失误 — C’s Flexible Integer Sizes Were Not a Design Mistake。75 points/118 comments(HN)。反驳一个流传很久的抱怨:把 int 宽度留空是当年有意为之,为的是让同一份源码能在各种字长的机器上编译出来。代价在几十年后由可移植性要求高的代码来付。
- 写高效的 C++ 代码(2013) — Writing Efficient C++ Code (2013)。125 points/74 comments(HN;Lobsters 3 points/3 comments)。缓存局部性、内存分配次数、虚函数开销这一套老账,十三年后仍然是对的,因为硬件在这一层的规则几乎没变。
- 对 “Parse, don’t validate” 的一点 Rust 想法 — Rusty thoughts on “Parse, don’t validate”。48 points/43 comments(Lobsters)。作者认可这个原则,文章拆的是它在 Rust 里的实际代价:类型编码进结构之后,边界上的错误信息、序列化格式的兼容性、以及过度建模导致的类型爆炸,都要一起算。
- JavaScript 的双关:带标签的模板字面量 — The JavaScript Pun: tagged template literal。17 points/2 comments(Lobsters)。续榜。同一段语法同时承担字符串插值和函数调用两种角色,语言设计里这类双关的成本通常要几年后才显形。
- Go 并发精要 — Go concurrency distilled。46 points/1 comment(Lobsters)。续榜。goroutine、channel、select、context 压进一页能读完的篇幅,当复习材料比当入门材料合适。
- TLA⁺ 里能有可达性性质吗 — Can we have reachability properties in TLA⁺?。13 points(Lobsters)。续榜。问的是 TLA⁺ 的表达力边界:能不能直接写”存在某个可达状态满足 P”,还是只能绕着写。做协议验证的人绕不开。
- 2026 年 Rust 的 SIMD 状况 — The state of SIMD in Rust in 2026。63 points/18 comments(HN;Lobsters 34 points/5 comments)。续榜。作者今年成了 Fearless SIMD 的维护者,为了避嫌把 std::simd、wide、pulp、macerator 的作者都请来审稿,编辑权仍在自己手上。年度综述的价值在于把”哪个库该用”这件事从传闻拉回实测。
🧱 系统、硬件与逆向
- 翻页点阵上的流体模拟 — Flip Fluid on Flip Dots。349 points/23 comments(HN)。mitxela 用机场和老公交上拆下来的翻转点阵屏跑流体模拟。💬 评论区最实用的部分是在讨论怎么把这些点从板子上取下来:磁线细、塑料软且熔点低,热风枪吹背面是最可行的办法,但点按 7 个一排分组,加热面积一大就容易连塑料一起化掉。还有一条把这两块屏的来历串起来了——它们来自 Look Mum No Computer 的博物馆,那位就是 Eurovision 上做过表演的 Sam James Bartle。
- KICKI: 一台 DECsystem1060 — KICKI: a DECsystem1060。16 points/2 comments(HN)。Compute Museum 给一台 PDP-10 系列机器做的记录,从维护视角看大型机比从历史视角看有更多细节。
- 逆向 iPod Classic 里没有文档的 Mikey 芯片 — Reverse Engineering the iPod Classic’s Undocumented Mikey Chip。6 points(Lobsters)。苹果当年没公开这颗芯片的寄存器定义,现在的解法是靠逻辑分析仪把通信录下来再反推。
- 逆向古董 Intel 8087 的切线算法:不只是 CORDIC — Reverse-engineering the vintage Intel 8087’s tangent algorithm: more than CORDIC。11 points/2 comments(Lobsters)。续榜。Ken Shirriff 的例行操作。CORDIC 常被当成浮点协处理器的全部答案,这篇证明 8087 在它之外还叠了别的处理方法。
- Valve 在测试自家的 Pyrowave 视频编解码器 — Valve Introduces Pyrowave Video Codec In Beta For Low Latency Streaming。44 points/3 comments(Lobsters)。为串流做的低延迟编解码器,进了 Steam 测试通道。💬 一条评论把背景补全了:作者一年前就在 Lobsters 上发过一篇《我设计了一个快得离谱的游戏编解码器》,现在被 Valve 拿去用了;另一条更谨慎,认为在已经有一堆成熟标准的领域另起一套,只有在你能控制整条链路时才划算,还顺手举了 APV 作为中间层编码的更优选择。
- Cartesian Hand:全直线手指的掌内操作 — The Cartesian Hand: In-Hand Manipulation with All-Linear Fingers。47 points/8 comments(HN)。手指只做直线运动,反而把控制问题简化成可解的形式。机械手的路线之争里,这条属于”用约束换可控”。
- 给可充电自行车灯换电池 — Replacing the old battery on rechargeable bike lights。126 points/66 comments(HN)。Julia Evans 的日常记录:灯本身还能用,电池先死了,于是拆开换芯。消费电子产品里”修”和”扔”的分界线经常就画在这一颗电芯上。
- 在 Steam Link 里灌 NixOS — Infecting the Steam Link with NixOS。41 points/2 comments(Lobsters)。续榜。把一个只用来串流的封闭盒子变成通用 Linux 机器,难的是绕过原厂对启动链的限制,装系统那一步不难。
- postmarketOS 更名为 Nura — postmarketOS rebrands as Nura。30 points/3 comments(Lobsters)。用了一年半选名字,最后定在 Nuraghe——撒丁岛上公元前 3000 年以前的石塔建筑,寓意是撑过千年。团队的更名理由写得很实在:原名太长、在多种语言里难念、大小写别扭(小写 p 和 m、大写 OS),而且”postmarket”这个词把项目范围限制在了一个早就不成立的位置上。
🔬 科学与世界
- 在一间 80 美元的汽车旅馆里,一项揭示生命起源的发现 — In an $80 motel room, a discovery to shed light on the origins of life。185 points/76 comments(HN)。预算和结论的反差是这条新闻的全部:一个付不起实验室租金的研究者,在汽车旅馆房间里做出了和生命起源相关的发现。
- 土耳其发现已知最古老和平条约的残片 — Fragment of oldest known peace treaty found in Turkey。44 points/8 comments(HN)。楔形文字泥板的碎片,接上了已知最早的外交合约文本。这类发现的看点在断代和释读方法。
- 欧洲电动车销量大涨,油价到了 10 美元一加仑 — EV Sales Are Booming in Europe with Gasoline at $10 a Gallon。21 points/9 comments(HN)。同比 +52%,驱动力写得很直白:燃油价格创纪录。能源价格对出行方式的影响,比任何补贴政策都直接。
- 月球终结线佯谬 — Lunar Terminator Paradox。28 points/16 comments(HN)。围绕月球昼夜分界线上光照与温度的反直觉现象写的短笔记,属于那种”看完了想拿望远镜核对一遍”的内容。
- 此前未公开的 Coltrane 录音,由 Frank Tiberi 录下 — Previously unheard recordings of John Coltrane, captured by Frank Tiberi。41 points/15 comments(HN)。私人磁带里的现场录音被正式发行,Coltrane 百年纪念的产物,价值全在音源本身。
- FM 合成发明者 John Chowning 的口述史 — Oral history of John Chowning, inventor of FM synthesis [video]。35 points/6 comments(HN)。FM 合成是那个”被拒绝的专利最后定义了整个八十年代流行音乐音色”的故事,听本人讲比读二手摘要密度高。
- Alan Kay 回答”ENIAC 有 BIOS 吗” — Alan Kay’s answer to “Did the ENIAC have a BIOS”?。51 points/19 comments(HN)。问题的答案本身没什么,看点是把 ENIAC 时期”什么叫固件、什么叫启动”这套现代词往回套时会散架在哪里。
🎮 轻度与好奇心
- Lofi Cities:浏览器生成的像素城市夜景 — Show HN: Lofi Cities – Pixel-art city nights with browser-generated lofi。120 points/53 comments(HN)。像素夜景加浏览器实时合成的 lofi 音乐,没有后端成本,打开就能待着。这类项目的完成度取决于画面细节够不够多。
- Video CD 能把 Windows 资源管理器搞坏 — Video CDs Break Windows Explorer。78 points/30 comments(HN)。可复现流程写得很干净:插一张 VCD、把 MPEGAV 目录拷到硬盘,传输速度会掉到零,此后 Explorer 进入半死状态——新建的文件不刷新就看不到,进程杀不掉,软重启也会卡在”正在重启”,只能按电源键。三十年前的媒体格式能让现代系统崩掉,值得一读。
- 改变我世界的十行代码 — Ten Lines Of Code That Changed My World。33 points/7 comments(Lobsters)。十段有私人记忆的代码:
10 PRINT "HELLO, WORLD!"加GOTO 10、Array(16).join('wat' - 1) + ' Batman'、自修改的 6502 汇编。写代码这件事的入门仪式感,都被收在这十段里。 - 我最近的木工项目 — My Recent Woodworking Projects。6 points(HN)。跟技术无关的手工记录,出现在 HN 首页通常说明这周的其他内容太密了。
- 我在 Recurse Center 做了什么 — What I did at Recurse Center。39 points/14 comments(HN)。十二周自学计划的复盘,重点在”没有产出指标的情况下人怎么安排自己的时间”。
📌 今日总结
今天的情绪是”成本转移已经发生,但没人认账”。模型把推理成本压下去的同时,把判断成本转给了使用者;NeoVim 把兼容成本转给了用户的数据;LuaRocks 的入侵被利用了六周,追责的讨论还没开始。三件事的共同结构是:省钱和提速的收益归做决策的一方,代价落在没有参与决策的那一方。
必读三篇:NeoVim 删除 undo 文件那篇的评论区(默认路径不冲突这个技术纠正是判断责任的前提,两站加起来四百多条评论,只有一少部分人把这条说清楚了)、LuaRocks 的安全通报(一份可以直接照抄的应急清单:换 key、重设 2FA、升级到 3.12+、把装过恶意包的机器当已失守处理)、以及 Ember-1 评论区里那份 14 万条合成数据的微调记录(一个普通人把”专用小模型替代通用大模型”这条路完整走了一遍)。
横向信号有两处。一是”哪个环节必须留给人”从泛论变成了具体清单:code review 里靠人的判断层、Google 论文里的代码质量、Jeff Atwood 那条下面关于 Stack Overflow 定位的争论,都在回答同一个问题——哪部分工作外包出去之后,剩下的那部分会失效。二是财务语言开始进入技术文章的正文:Ember-1 讲 token 成本、S3 那篇讲架构税、Commodified Intelligence 直接谈人力价格,技术决策和成本核算之间的墙在变薄。