惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
月光博客
月光博客
Hacker News - Newest:
Hacker News - Newest: "LLM"
有赞技术团队
有赞技术团队
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Application and Cybersecurity Blog
Application and Cybersecurity Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Hacker News: Ask HN
Hacker News: Ask HN
PCI Perspectives
PCI Perspectives
Recent Commits to openclaw:main
Recent Commits to openclaw:main
E
Exploit-DB.com RSS Feed
博客园 - 三生石上(FineUI控件)
AI
AI
T
Troy Hunt's Blog
S
Security Archives - TechRepublic
Cisco Talos Blog
Cisco Talos Blog
博客园 - 聂微东
MyScale Blog
MyScale Blog
B
Blog RSS Feed
爱范儿
爱范儿
N
News and Events Feed by Topic
P
Privacy & Cybersecurity Law Blog
The Hacker News
The Hacker News
V
V2EX - 技术
博客园 - Franky
AWS News Blog
AWS News Blog
L
Lohrmann on Cybersecurity
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
S
Security Affairs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
News | PayPal Newsroom
Martin Fowler
Martin Fowler
P
Palo Alto Networks Blog
S
SegmentFault 最新的问题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
Know Your Adversary
Know Your Adversary
V
Visual Studio Blog
博客园 - 【当耐特】
S
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
aimingoo的专栏
aimingoo的专栏
The Last Watchdog
The Last Watchdog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Tenable Blog
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog

Agili 的 Hacker Podcast

Agili 的 Hacker Podcast 2026-06-13 Agili 的 Hacker Podcast 2026-06-12 Agili 的 Hacker Podcast 2026-06-11 Agili 的 Hacker Podcast 2026-06-10 Agili 的 Hacker Podcast 2026-06-09 Agili 的 Hacker Podcast 2026-06-08 Agili 的 Hacker Podcast 2026-06-07 Agili 的 Hacker Podcast 2026-06-06 Agili 的 Hacker Podcast 2026-06-05 Agili 的 Hacker Podcast 2026-06-04 Agili 的 Hacker Podcast 2026-06-03 Agili 的 Hacker Podcast 2026-06-02 Agili 的 Hacker Podcast 2026-06-01 Agili 的 Hacker Podcast 2026-05-31 Agili 的 Hacker Podcast 2026-05-30 Agili 的 Hacker Podcast 2026-05-29 Agili 的 Hacker Podcast 2026-05-28 Agili 的 Hacker Podcast 2026-05-27 Agili 的 Hacker Podcast 2026-05-26 Agili 的 Hacker Podcast 2026-05-25 Agili 的 Hacker Podcast 2026-05-24 Agili 的 Hacker Podcast 2026-05-23 Agili 的 Hacker Podcast 2026-05-22 Agili 的 Hacker Podcast 2026-05-21 Agili 的 Hacker Podcast 2026-05-20 Agili 的 Hacker Podcast 2026-05-19 Agili 的 Hacker Podcast 2026-05-18 Agili 的 Hacker Podcast 2026-05-17 Agili 的 Hacker Podcast 2026-05-16 Agili 的 Hacker Podcast 2026-05-15 Agili 的 Hacker Podcast 2026-05-14 Agili 的 Hacker Podcast 2026-05-13 Agili 的 Hacker Podcast 2026-05-12 Agili 的 Hacker Podcast 2026-05-11 Agili 的 Hacker Podcast 2026-05-10 Agili 的 Hacker Podcast 2026-05-09 Agili 的 Hacker Podcast 2026-05-08 Agili 的 Hacker Podcast 2026-05-07 Agili 的 Hacker Podcast 2026-05-06 Agili 的 Hacker Podcast 2026-05-05 Agili 的 Hacker Podcast 2026-05-04 Agili 的 Hacker Podcast 2026-05-03 Agili 的 Hacker Podcast 2026-05-02 Agili 的 Hacker Podcast 2026-05-01 Agili 的 Hacker Podcast 2026-04-30 Agili 的 Hacker Podcast 2026-04-29 Agili 的 Hacker Podcast 2026-04-28 Agili 的 Hacker Podcast 2026-04-27 Agili 的 Hacker Podcast 2026-04-26 Agili 的 Hacker Podcast 2026-04-25 Agili 的 Hacker Podcast 2026-04-24 Agili 的 Hacker Podcast 2026-04-23 Agili 的 Hacker Podcast 2026-04-22
Agili 的 Hacker Podcast 2026-06-14
Agili 的 Hack · 2026-06-15 · via Agili 的 Hacker Podcast

今天的话题从本田车机安全漏洞到 Python 垃圾回收的回退,再到复古操作系统的坚守,跨度不小。欢迎来到 Agili 的 Hacker Podcast 每日播客文字版。

本田思域的“邪恶代客泊车”漏洞

一位安全研究者公开了针对 2021 款本田思域车机的逆向工程成果,发现了一个易于利用的固件签名漏洞。

测试密钥签名,任意代码执行

本田的车机运行 Android 开源项目(AOSP),其 OTA 更新机制接受用 AOSP 公开测试密钥签名的更新包。这意味着任何人只要物理接触车前的 USB 端口,就能刷入自定义固件,获得任意代码执行权限,完全不需要 root。

研究者将这种攻击命名为“EvilValet”(邪恶代客泊车),并发布了 ota-builder 和 apk-rebuilder 工具,让他人也能轻松生成被车机接受的更新文件。

行业通病与威胁评估

评论区指出,现代车机曾使用过通过谷歌搜索“RSA key”就能找到的密钥,错误性质和本田类似。对于实际威胁,看法存在分歧:有人认为代客泊车装恶意软件不如直接放个 GPS 追踪器省事;也有人指出在租车场景中,攻击者可利用车机作为跳板,结合 CarPlay 漏洞攻击连接的手机。

一位评论者总结得直接:“本田造车一流,软件水平不行。”

SQL 转 ER 图的纯前端工具

开发者 robhati 发布了一款免费开源的工具,只需将 SQL 的 CREATE TABLE 语句粘贴进去,浏览器就能生成可拖拽的实体关系图(ERD)。数据不出本地,无需注册。

纯前端实现与性能取舍

这个工具是一个 32KB 的单页应用,没有后端。画布基于 <canvas> 实现,表会被光栅化成缓存位图,配合视口裁剪,即使上百张表也能保持流畅。作者尝试过 Rust/WASM 版本,但 JS 与 WASM 的边界开销使解析器反而慢了约 37%,最终选择了纯 JavaScript。

SQL 解析器会跟踪每个 token 的源位置,双击重命名表时只修改标识符及其引用,不会动注释和格式。整个 schema 可序列化进 URL 完成分享。

用户反馈与定位讨论

HN 用户普遍称赞移动端体验顺滑,有人给出“100/10”的评价。关于“ER 图”与“表关系图”的命名之争,有人指出实体和表不是一回事,单靠 DDL 不足以还原完整实体关系模型;反驳意见则认为 ORM 的根基本就是表和实体的高度互换性,工具的实际价值不受影响。

别信任大厂宣称的上下文窗口

大语言模型的上下文窗口动辄宣称上百万 token,但实际可用部分远小于广告数字。作者把 LLM 的上下文分成“聪明区”和“笨区”,分界线大约在 100k token 附近,与厂商标注的窗口大小无关。

编码 agent 耗尽注意力的速度

编码 agent 读取几个文件、一次长调试会话、一轮大规模测试,一个上午就能烧到 100k。虽然 Claude Code 等工具引入了自动压缩机制,但压缩本身由已退化的模型生成,触发时往往已在笨区浪费了一段时间。

社区的管理策略

有人通过递归调用避免上下文膨胀:一切工具调用都在子 agent 中执行,根会话只保留用户主对话,内部即便烧掉 5000 万 token,根会话也不超过 100k。另一种方法是结构化文档驱动:要求 agent 先写产品需求文档,每个功能有独立会话和文档存档。

不过也有用户报告在 500k 至 800k 的上下文中模型表现依然锐利,认为退化更可能与上下文质量有关——窗口中充斥错误信息和嘈杂日志时,即便 token 数不大也会让模型变笨。

Pac-Man 反转版:你当鬼魂

作者因为觉得原版 Pac-Man 里的鬼魂有点可怜,做了一款扮演鬼魂去抓 AI 控制的 Pac-Man 的小游戏。吃能量豆后几秒内角色互换,鬼魂要逃命。

并非首创概念,控制是槽点

2003 年宫本茂设计的 GameCube 游戏 Pac-Man Vs. 就实现过类似的不对称玩法。这款小游戏的主要槽点是控制:移动端滑动有滞后,桌面端键盘似乎只在弹起时检测输入,导致转角处手感迟钝。代码由 Claude 在单次提交中生成,缺少原版鬼魂的掉头和差异化 AI 行为。

也有玩家觉得概念有趣,熟悉后能玩,作者做的小游戏能引发讨论本身也算一种成功。

Free Oberon:复古蓝屏 IDE 回归

Free Oberon 是一个跨平台的 Oberon 语言集成开发环境,采用类似 Turbo Pascal 的蓝屏伪图形界面。Oberon 是 Pascal 和 Modula-2 的后代,语法更简洁、类型系统更强。

怀旧与实用之间

社区中不少开发者回忆起 Turbo Pascal “配上内联汇编是巅峰”的年代,编译快、可执行文件小、运行效率高。Oberon 的大写关键字设计源于 8 位字符集时代,一些衍生版本已改用小写。项目网站使用苏联议会图像引发了一些偏离技术的讨论,但多数人仍关注 Oberon 本身:它代表了一种小而强的系统编程方式,与 Go、Zig 等现代语言的设计思想有相通之处。

ReactOS 在真实硬件上运行《半条命》

开发 28 年的开源 Windows 兼容操作系统 ReactOS 在搭载 Core i5 2400 和 GeForce 8400GS 的 Dell OptiPlex 上成功运行了经典游戏《半条命》。

独特价值与尴尬现实

ReactOS 的独特之处在于直接调用 Windows 驱动栈,能兼容 NVIDIA 等专有驱动,对工业控制领域的遗留系统对接有价值。但兼容性也带来副作用:WannaCry 曾在 2025 年成功运行于 ReactOS,大部分恶意软件因内存布局差异会崩溃。

Wine 在 Linux 用户态翻译 Windows API,而 ReactOS 是完整操作系统——这意味着它可能重现 Windows 的某些 bug,因为不少遗留应用就依赖那些 bug。有人吐槽 28 年开发已进入“圣家堂”式工期,更多人认为对于数字主权和遗产软件维护,它仍有独特价值。

IBM 机架控制台改造成串口/VGA 便携终端

作者花费 120 美元买了一台 IBM 1U 机架式控制台,将其 DIY 改造成集成串口与 VGA 的便携终端。

改造细节

原装键盘是 USB 复合设备,但选用的 Tattler Solutions VT100 迷你终端不支持复合 HID,只能换用 20 美元的 Perixx 键盘。改造涉及硅烷金属胶固定垫片(固化等了整整一周)、Flexseal 胶带加固、Z 形支架重新安装以解决屏幕闭合问题。

最终装入迷你电源条和手动 USB/VGA 切换盒,实现两种工作模式:接入 VT100 终端盒,或对外直连恢复原机功能。作者用这台终端成功连接了 POWER9 架构的 Raptor Blackbird 和 AT&T 3B2/310 工作站。

Python 3.14 增量 GC 的引入与回退

Python 3.14.0 引入增量垃圾收集器以降低最大停顿时间,但用户报告内存使用大幅上升后,团队在 3.14.5 中回退了改动。

引用循环与 GC 的权衡

Python 对象通过引用计数管理内存,引用循环需要 GC 介入。3.14.0 之前的 GC 是经典分代收集,大堆场景下会出现长暂停。增量 GC 将老年代合并,每次只扫描一部分,停顿时间显著降低,但代价是内存释放变慢。在包含循环引用对象的测试中,增量 GC 内存使用飙升至 2,849MB,而传统 GC 只有 717MB。

社区指出,GC 的时间与空间权衡是根本性的。Python 团队没有提供切换选项,也没有走正式 PEP 流程。但也有评论认为先回退再研究改进方案是正常的 incident response。

Phoenix LiveView 1.2 发布:组件级 CSS 来了

Phoenix LiveView 1.2 正式发布,核心更新是 Colocated CSS:在 HEEx 模板中使用 <style :type={MyApp.ColocatedCSS}> 标签,编译时提取到专属文件夹,由 Tailwind 等工具处理。

作用域策略与社区反响

LiveView 利用现代 CSS 的 @scope 规则限定组件样式,但浏览器尚未广泛支持,因此 1.2 默认不启用作用域,而是开放 @behaviour 接口让开发者自行实现策略。

多位开发者提到,Elixir 的 BEAM 虚拟机让应用天生具备高并发和容错能力,且这些能力是底层的一部分。有开发者认为 LiveView 与 LLM 配合极好:语言简洁、前后端不分离减少了 token 消耗。关于 Colocated CSS/JS,部分人担心代码混乱,也有用户认为将相关 hook 和样式放在一起更清晰。

Tribblix:基于 illumos 的复古操作系统

Tribblix 由 Peter Tribble 个人维护约 15 年,基于 illumos(OpenSolaris 的开源后继),融合复古风格与现代组件。

技术选择与社区体验

作者称使用传统 SVR4 打包系统而非 IPS 是一种“内部玩笑”,强调老技术更小、更快、更可靠。最初创建是因为 OpenSolaris 时代缺乏构建文档,他想理解系统如何构建,发现可以做得更好。

社区反馈显示,Tribblix 在 SPARC 和 Intel 平台上安装顺利。用户在 Thinkpad T60 上选择“kitchen-sink”选项安装了 Xfce 桌面环境,内含多种现代应用。但也有人反映在 AM5 主板上无法启动,可能是 USB 3.0 兼容性问题。除了默认 Xfce,还支持 Open Look 和 CDE 作为可选桌面。

播客全文

女:Hello 大家好,欢迎收听 Agili 的 Hacker Podcast,我是莓莓。

男:大家好,我是阿迪。

女:这期节目咱们想先从一个特别有“地下修车铺”气质的安全研究开始聊。阿迪,你听说了吗?有人把本田思域的车机系统给逆向出来了,还发现了一个挺离谱的漏洞。

男:听说了,这个事也挺幽默的。简单来说,一个安全研究者,我们叫他研究员吧,他对 2021 款的本田思域车机做了逆向工程。他发现这个车机接受系统更新,也就是 OTA 更新包的时候,验证签名用的不是什么本田自己的保密密钥,而是 Android 开源项目,也就是 AOSP,提供给开发者公开测试用的密钥。

女:等等,你是说他们给车主推系统更新,就跟我们平时拿个公开的测试签名来糊弄一下?这听起来就像一个公寓楼,所有住户的门锁用的都是出厂时包装盒里那把谁都有的通用钥匙。

男:对,就是这么个意思。研究员把这个攻击方式取名叫“EvilValet”,邪恶代客泊车。也就是说,只要有个人能摸到你车里的 USB 口,比如代客泊车的小哥,或者你把车借给朋友,他就可以很轻松地刷入一个自己做的“更新包”,拿到车机系统的最高权限。他甚至把生成这种恶意更新包的工具,叫 ota-builder,都放到了 GitHub 上。

女:这个物理接触的门槛,感觉说高不高说低不低。评论里也有人觉得嘛,如果真想搞破坏,直接扔个 GPS 追踪器在车里不是更省事?

男:确实是,也有人从这个角度质疑威胁的严重性。不过另一个场景就更有说服力:租车。你想啊,租车的人完全有物理接触,攻击者可以把恶意软件种在车机上,然后等着你用 Apple CarPlay 或者 Android Auto 把手机连上去。这时车机就可以作为一个跳板,去攻击你的手机,这路径就通了。

女:这也太有心了。那我还挺好奇这位研究者的工作方法,听说他连传统的文档都不大乐意写了?

男:对,这哥们儿有个挺有意思的理念。他说不再费劲去写那种解释代码怎么工作的长篇文档了。因为他觉得代码本身才是唯一的事实来源,维护文档特别容易和代码脱节。他的新方法是,写个小工具,把车机里那些晦涩的代码翻译成一种中间形式,让代码更好读,然后再靠大语言模型,也就是 LLM,去帮他理解和查询这些代码。

女:嗯,这个话题在程序员圈子里永远能吵起来。我自己写PRD的时候也这种感觉,文档改来改去,最后自己也忘了哪个是最终版。评论区里我好像看到有人更推荐用单元测试来当文档?

男:没错,有一种很受推崇的观点是“单元测试即文档”。因为测试是实实在在会跑、会报错的,它能持续验证系统行为,也明确给出了代码的预期用法和边界情况。这比一段没人看的注释要可靠得多。

女:更有意思的是评论区一句特别损的总结,大概意思是,本田造车一流,但写软件的功力嘛,实在是有点拖后腿。这其实挺矛盾的,对吧?如果一个车厂把系统锁得死死的,什么都不让用户碰,会被人骂“技术法西斯”;但如果像本田这样,留了这么一个天大的后门,又会被疯狂吐槽有安全漏洞。车企好像怎么做都不对?

男:这真是一个经典的困境,安全和开放的天平。不过话说回来,用公开测试密钥这事儿,在任何正规的软件开发流程里都是属于低级错误,不能算是“为用户开放”的初衷,纯粹就是图省事儿。你看有评论提到,现代汽车以前也犯过类似的错,他们用的密钥甚至可以直接在谷歌上搜“RSA key”就能找到。

女:好吧,这个神奇的疏忽我们先聊到这儿。说到开发者的“省心”和“纠结”,我还看到一个工具,刚好能体现另一种极致。它是一个把 SQL 建表语句直接变成漂亮关系图的网页工具,叫什么 “SQL to ER Diagram”。

男:对,这工具特别纯粹,让你感受一下什么叫“简单美的暴力”。它的作者 robhati 自己经常需要快速看清楚一个数据库的结构,但市面上的工具要么贵,要么逼着你注册,要么就得把 SQL 语句上传到别人的服务器上。他很烦这个,就自己写了一个。

女:也就是说,我只要把那个 CREATE TABLE 的 SQL 语句往里面一粘贴,浏览器里马上就能生成一张可以拖来拖去的实体关系图?

男:是的,而且数据完全不出你的电脑,免费还开源。它整个就是一个纯前端的单页应用,没有后端。让人感觉很舒服的一点是,它的 SQL 解析器很聪明。如果你在图上双击一个表名想改名字,它只会精确地修改那个标识符和所有引用了它的地方,而不会破坏你 SQL 里的注释和格式。

女:这种对细节的较真确实会让人用着很舒服。我看评论里都在疯狂夸它在手机上的体验,有个用户留言说流畅到让他“以为自己磕了药”。

男:哈哈,那个评价我记得,是 written-beyond 说的,给了个 100/10 的分数。之所以这么顺滑,是因为作者在技术上下了功夫。它用 Canvas 来画图,把每个表都提前渲染成一个缓存的位图。这样不管你画布上有多少张表,它只需要在屏幕能看到的那个小区域里计算,不需要每次都重新渲染几百个对象。这也是纯 JavaScript 的威力,作者说他甚至试过用 Rust 写一个版本放进浏览器,但反而慢了 37%。

女:这好像跟我们以前聊过的很多项目一样,有时候引入所谓的高性能技术反而会带来额外的沟通成本。对了,关于这个工具的命名,好像还有一场小型哲学辩论?

男:没错,有个用户 michaelmior 指出来,严格来说,SQL 建表语句生成的是“表关系图”,而不是正宗的“ER 图”——也就是实体关系图。因为“实体”和“表”在设计理念上是两个层面的东西。不过马上又有人反驳,说如果我们的目标就是直观地看下数据表之间的关系和字段,那 DDL 语句已经足够了。毕竟现在所有 ORM 框架的根基,就是建立在表和实体可以高度互换这个假设上的。开发者们用脚投票,这个工具的价值不受影响。

女:从关系到实体,这让我想到最近 AI 编程工具里一个聊得很热的词:上下文窗口。现在大模型厂商都说自己的上下文窗口有上百万 token,但最近我看到一个说法,把这窗口分成了“聪明区”和“笨区”,听起来就很形象。

男:对,这个概念作者是从一个视频里引用的。他觉得 LLM 的表现,并不是一整段上下文都均匀地好。前面一小块,大概前 10 万 token,是所谓的“聪明区”,模型反应敏锐,记忆力好。一旦过了这个分界线,就滑进“笨区”了,注意力开始衰减,模型甚至会忘记你前五分钟才跟它说过的事情。而且这个分界线跟厂家宣传的 100 万、200 万窗口大小关系不大。

女:10 万 token听起来挺多,但对于一个正在吭哧吭哧写代码的 AI 智能体来说,是不是很快就烧没了?

男:太快了。你让一个编程智能体去读几个源码文件,再来次比较长的调试会话,比如追踪复杂的 bug,再跑一遍大范围的测试,一上午时间轻松就能烧到 10 万 token。然后你就发现,它开始犯低级错误了。

女:那怎么办?现在的工具没有应对办法吗?

男:有,比如现在一些编程工具引入了自动压缩功能。当会话变长,它会用模型自己生成一个当前进度的摘要,然后清空历史,基于摘要开启一个新会话。但这恰好有个悖论——执行压缩的时候,模型本身可能就已经在“笨区”里了,用一个变笨的模型去总结你的工作,那摘要的质量可想而知。

女:这就像让一个已经开始犯困的同事,在交接工作前凭印象给你写个备忘录,想想就可怕。那文章作者自己是怎么解决的?

男:他的方法是手动、有意识地管理上下文。比如,他会主动开一个新的会话,然后把自己精心编写的规格说明文档传给它。自己写的好处是,你知道哪些信息是关键的,信号比任何自动摘要都强。他管这叫“面包屑方法”——每完成一个阶段,就留下一个清晰、干净的工件,让下一轮会话或者下一个人能无缝接手。

女:也就是更像一个产品经理拆分需求的做法了。甚至有人把这种思路文档化了,要求 AI 先写产品需求文档,每个功能都有独立的会话和文档存档?

男:对,这已经是种比较成熟的实践了。要求 AI 像产品经理一样,先输出 PRD,每个功能一个会话,用文档来“传承”决策和背景。还有更极客的做法,比如用“递归调用”。把所有真正干活、会消耗大量上下文的操作,都派给子智能体在后台完成。主会话只保持跟用户的聊天,干干净净。

女:这听起来就像一个指挥官,只掌握战略全局,战术细节全让下面的参谋去沙盘推演,推演完了只回来汇报结果。不过好像也有很多人不同意“笨区”这个说法?

男:分化很大。有人就说,我用某些模型在 70 万、80 万 token 的负载下,感觉依然很锐利,没发现变笨。所以有一种观点觉得,让模型变笨的可能不是长度,而是上下文的“质量”。如果上下文里充满了前后矛盾的指令、错误的报错信息、嘈杂的调试日志,就像一锅好汤里混进了不干净的东西,整锅汤很快就坏了,不如重新熬一锅。这么看来,比物理长度更重要的,是我们怎么维护这锅汤的纯净。

女:这个比喻真好。好,从 AI 的上下文中跳出来,我们聊点轻松的。你玩过吃豆人吗?有个开发者可能觉得里面的幽灵挺可怜的,决定自己做个游戏,让玩家反过来扮演幽灵,去抓那个 AI 控制的吃豆人。

男:对对,这个想法其实挺经典的,不算全新。评论里很多人立刻就想到了 2003 年任天堂宫本茂设计的 GameCube 游戏《Pac-Man Vs.》,也是一个玩家当吃豆人,其他几个玩家当幽灵,是一种不对称的对抗。

女:不过这个小游戏的体验好像……算不上丝滑?我看到很多吐槽它的控制。

男:控制是最大的败笔。在手机上玩需要滑动屏幕,但有明显的延迟,你想在拐角处及时转向很难。用键盘呢,据说程序只有在弹起按键时才会检测输入,而不是按下去的瞬间。这就是典型的手感问题,对动作游戏来说是致命的。而且代码是作者用 AI 一次性生成的,很多原版幽灵的细节都没了,比如四种幽灵的不同追踪模式,吃豆人吃了能量豆后变幽灵的还原等等。

女:一个简单的策略就能赢:一直追着 AI 吃豆人的循环路径跑,利用速度优势就直接抓了,AI 还不太爱去吃能量豆。不过这种不完美的小项目,能引来这么多人讨论,本身也挺好玩的。大家七嘴八舌地提建议、怀念类似的游戏,也是一种社区氛围。

男:没错,这就像一种数字时代的“放学后的小游戏”,讨论它的过程比游戏本身更生动。这种纯粹因为兴趣而诞生的项目,我们节目中聊到过不少。另一个让我很有感触的项目,是一个叫 Free Oberon 的编程语言集成开发环境。

女:Oberon?这个名字听起来很复古,像是来自 Borland Turbo Pascal 那个年代的。

男:你的直觉真准,Oberon 就是 Pascal 和 Modula-2 的直系后代,设计上更简洁强大一些。这个 Free Oberon IDE,打开就是经典的蓝色伪图形界面,活脱脱一个 90 年代初的 Turbo Pascal。有好多老开发者就在评论里回忆青春,说那时候 Turbo Pascal 配上内联汇编就是巅峰,编译快,运行快,生成的程序又小。

女:那用一个这么,嗯,带有强烈时代烙印的语法和环境来编程,在今天除了情怀,还有什么实际价值吗?

男:有一些开发者认为,Oberon 本身代表了一种小而强大、易于理解的系统编程哲学。它不像现代语言那么庞杂,一个人可以理解它的全部。这种思想跟现在的 Go、Zig 语言是有共通之处的。这不仅仅是怀旧,更是一种编程品味的延续。不过嘛,这个项目因为其界面和网站上用了带有浓厚旧时代烙印的元素,在社区里也引起了一些和编程无关的争论。

女:哈哈,技术社区总会有些奇妙的关注点。那我们再来看一个同样需要长时间打磨的项目,我听说 ReactOS 最近成功在一个真实的硬件上运行了《半条命》?

男:是的。ReactOS 这个开源操作系统项目,目标很宏大,就是做一个能完全二进制兼容 Windows 程序和驱动的系统。他们搞了 28 年,最近终于在一台老旧的戴尔台式机上,用 NVIDIA 独显,成功跑起了经典射击游戏《半条命》。

女:28 年!评论区是不是又有人拿圣家堂来类比它的工期了?

男:哈哈,对,但调侃归调侃,它的独特价值是公认的。很多人会说,在 Linux 上用 Wine 也能流畅运行《半条命》啊。但 ReactOS 的独特在于,它不是在一个翻译层上运行,而是在内核和驱动层面直接兼容 Windows。这意味着,它能直接用 NVIDIA 官方的 Windows 显卡驱动,而不是把游戏指令翻译一遍。对于一些只有 Windows 驱动的老旧工业控制设备、特殊硬件来说,这可能就是唯一能让它们在现代系统上继续工作的希望。

女:听你这么一说,感觉 ReactOS 更像是在搭一座桥,让那些被遗留在技术孤岛上的老软件和老硬件,能重新和现代世界连接起来。而不是为了替代我们日常用的 Windows。

男:对。而且在这个过程中,ReactOS 为了追求极致的二进制兼容性,有时候甚至需要去重现 Windows 的某些 bug,因为一些老软件就是依赖那些 bug 才能正常运行。当然,这种兼容性是双刃剑,它也可能让一些 Windows 的病毒本来跑不起来,结果在 ReactOS 上跑起来了。不过因为底层的内存布局和权限模型有差异,多数恶意软件还是会直接崩溃。

女:说到搭建桥梁,我们再来看一个更硬核的物理搭建。有人花 120 美元在 eBay 上买了一台 IBM 旧服务器用的机架式键盘显示器,然后自己动手 D 出了一台便携的复古终端。

男:这个改造过程听着就是一波三折。作者想做一个能连接老式串口和 VGA 接口的便携小终端。那个 IBM 的键盘本来是集成了触摸板和指点杆的“复合设备”,但他买的那个小终端模拟器太古老,识别不了,只好换了个 20 美元的普通键盘。然后改装时用了很多“民间智慧”——因为托盘不匹配,他用了一种叫做硅烷金属胶的东西粘固定的垫片,但是胶水要固化整整一周才够结实。

女:等一周也太有耐心了。他还装了好几个手动 USB 和 VGA 的切换盒,设计了两路模式,一路连接内部的小终端,一路恢复原机功能,把线路全部整理后,最后成功点亮了一台基于 IBM POWER9 架构的服务器和一台远古的 AT&T 工作站,那种感觉一定很神奇。

男:这就像是一个可以穿越时间的万能工具箱。评论里有人就说,其实用一个树莓派可以更优雅地实现全部功能,但作者享受的可能就是这种“用老硬件拼凑出新感觉”的过程吧。把所有东西用魔术贴、钩子固定好,完美地契合了那种黑客动手精神。

女:感觉这期节目我们也像在不同项目的时间线里来回穿梭。最后我们来聊两个更贴近日常开发者工作流的新闻。一个是 Python 3.14 的一个重要功能回退,另一个是 Web 框架 Phoenix LiveView 的新版本。先说 Python 吧,好像是关于垃圾回收的新功能被砍了?

男:对。Python 3.14.0 版引入了一个新的“增量式垃圾收集器”。简单说,Python 在管理内存时,需要不时地回收那些不再使用的对象,这个回收过程叫 GC。以前每次回收可能会导致程序卡顿一下。这个新的增量 GC 就是想把一次大卡顿分摊成很多次看不见的小卡顿,理论上能让程序跑得更顺滑。

女:听起来是个好改进,为什么又回滚了呢?

男:因为代价是更高的内存占用。这个新 GC 的策略是,为了保证不卡顿,它会“偷懒”,不那么勤快地回收内存。结果就是,在某些会持续产生垃圾的程序里,尤其是那些包含复杂循环引用的程序,内存使用量会飙升。文章里的测试表明,在一个极端场景下,增量 GC 的内存占用达到了将近 3GB,而老方法只要 700MB。这增加的 2GB 多内存,对于服务器来说可能就是被系统 OOM Killer 杀死的风险。

女:这又是一个典型的“鱼与熊掌”的权衡:要更短的暂停时间,就得接受更高的内存消耗。Python 团队直接回退,没有给用户一个开关选择,这是被吐槽最多的地方吧?

男:对,像 Java 或者 Go 语言,通常会提供好几种不同的 GC 策略让你根据场景选。Python 这次直接一刀切回退了,也没有走一个正式的提案流程。虽然有人理解这是一种应急响应——先恢复到稳定状态,再慢慢研究更好的方案——但很多人觉得直接去掉选择权不太合适。这也反映出 Python 在面对内存管理和版本兼容这些复杂工程问题时的一些长期挑战。

女:这个感觉跟刚才聊的车机系统有点像,一个想打开但没做好的更新通道。好了,最后我们来看看 Phoenix LiveView 1.2 的发布。阿迪,这个版本最大的亮点是不是那个“同地 CSS”特性?

男:“Colocated CSS”,对,这绝对是核心。就是可以在写组件的模板文件里,直接写一个 <style> 标签,把这个组件的样式、HTML 和业务逻辑写在同一个文件里。这能让开发者更容易理解和维护组件,不用在文件树里到处翻样式表。

女:但一个页面里如果到处都散落着 <style> 标签,最后生成的 HTML 不会很乱或者互相打架吗?

男:好问题。Elixir 团队的想法是借助现代 CSS 的 @scope 规则,自动给每个组件的样式加一个独立的作用域,这样 A 组件的样式就不会意外地影响到 B 组件。不过问题在于,这个 @scope 规则在浏览器端还没普及,所以 1.2 版本默认不发这个功,只是留了一个接口,让愿意尝鲜的开发者可以自己去实现和启用。

女:又是这种“把未来的钥匙交给你,用不用看你”的玩法。我注意到社区有个很有意思的声音,说 Elixir 和 LiveView 这个前后端一体的模型,特别适合用 AI 来写代码。

男:这也是社区里一片叫好的点。因为 Elixir 语言本身很简洁,不需要维护一个独立的 JavaScript 前端项目。对于大语言模型来说,要理解的上下文就少了一大块,token 消耗也少了,出错的概率更低。有开发者甚至说,用 AI 写 Elixir 的感觉,比用 Python 或 Django 爽快得多,因为编译和反馈都特别快,没有前端后端的割裂感。

女:好了,那我们这期节目聊得也够久了,从破解车机,到画数据库美图,从管理 AI 的“笨区”,到 Python 的内存雷区,最后还玩了把复古游戏和硬核终端。谢谢阿迪,也谢谢大家的收听。

男:谢谢大家。

女:最后提醒一下,如果你喜欢我们的节目,别忘了在泛用型播客客户端里搜索订阅“Agili 的 Hacker Podcast”,这样就不会错过之后的更新啦。我们下期再见!

男:拜拜。

参考链接