本文探讨了《Entombed》在 1983 年为 Atari 2600 设计的独特迷宫生成算法。由于内存仅有 128 字节,原版游戏无法存储持续滚动的迷宫,因此会使用一个神秘的 32 项查找表,在本地逐行生成迷宫。五个相邻单元格构成一个形状不寻常的四格骨牌窗口,根据这些单元格决定下一个格子是墙壁、通道还是随机结果。生成完成后,还会进行两轮修正,修改已完成的线路,以减少重复内容和封闭区域,但该算法既不能保证生成完美的迷宫,也不能保证迷宫一定可以通关。
受这一算法启发,作者为一款受《Wolfenstein 3D》启发的光线投射游戏实现了一个基于《Entombed》的迷宫。这个改编版本将每一行表示为 32 位数值,保留所有生成的行,移除原版镜像化的游戏区域,扩大迷宫,并允许玩家和敌人破坏墙壁。项目后来采用了类似“后室”(Backrooms)的视觉风格,并使用 Three.js 重新制作,加入视觉效果和类似《暗黑破坏神》的缩略地图,以便在浏览器中游玩。
本文介绍了如何在 Mac OS X Leopard 或 Snow Leopard 上恢复 iChat AV 的音视频通话功能。iChat 最初依赖 Apple 已停用的 SNATMAP 服务来发现用户的公网 IP 地址和 UDP 端口,以建立点对点 RTP 通话。如今,其 HTTP 配置请求会重定向到 HTTPS,而操作系统过时的 TLS 协议栈无法处理这种重定向,导致通话双方只能交换无法使用的局域网私有地址。
作者通过数据包捕获和借助大语言模型进行的逆向工程,重新实现了 SNATMAP 协议,并将其构建为一个简单的 Python UDP 服务器。16 字节的请求包含类型、随机数、本地 IP 和本地端口;响应则返回随机数,以及服务器观察到的公网 IP 和端口。
作者在实验室中使用两台虚拟 OpenWrt 路由器和两台 Mac 进行测试,随后将该服务部署到公网,并通过 `/etc/hosts` 将 `configuration.apple.com` 映射到该服务的 IP 地址。完成用户配置并启用 NAT 源端口保留后,旧版 iChat 再次可以通过互联网正常通话,并且也能使用现代的 Logitech C920 网络摄像头。
这篇文章认为,Common Lisp 可能是最适合 LLM 辅助编程的语言,因为它能缩短反馈周期。它采用基于映像的开发方式,无须重启即可更新函数;出现错误时,还可以直接进入交互式调试器,查看调用栈和变量。这让 LLM 能够检查问题、修改代码,并立即恢复程序运行。 由于代码和数据都采用相同的列表表示形式,Lisp 能够提供强大的宏,从而用领域特定抽象扩展语言。因此,企业可以把其产品理念直接编码到语言中,帮助用户安全地定制 ERP 等系统。宏还可以大幅精简大型程序——据称,其代码长度可能只有 Python 版本的六分之一或七分之一——从而降低 LLM 的令牌成本,并让更多程序内容保留在上下文中。 作者也看重 Common Lisp 自 1994 年以来一直保持的稳定性,以及其较小的依赖生态系统,这降低了供应链风险。尽管熟悉 Lisp 的工程师不多,相关的包生态系统也相对有限,但当 LLM 能够编写、移植和维护代码,而优秀的工程师又能快速掌握这门语言时,这些缺点可能就没那么重要。
作者回顾了自己的开源历程:从 2011 年在 TShock 提交的一个 issue,到 2014 年在 GitHub 合并最初的几个 PR。其中,一次满怀热情、涉及 300 行代码的清理修改,被一位素不相识的人在一夜之间合并。这一经历体现了开源的核心:信任、共同努力与人与人的连接。 如今,AI 生成的 issue 和 PR 大量涌入各类仓库,其中既有看似合理却存在错误的成果,也有垃圾内容和未经请求的代码改写。创建贡献几乎只需片刻,但审查这些贡献的成本依然很高,对志愿维护者尤其如此。自动化审查淹没了人与人的讨论,而凭空生成、并不存在的问题报告,则浪费了宝贵的时间。 因此,一些项目和平台正在限制或关闭外部贡献,包括 Hono、curl、OpenJDK、Godot、Ladybird,甚至 GitHub 本身。作者每天都使用 AI,也不责怪维护者做出这些理性的选择;但他感到遗憾的是,贡献如今变成了一种负担,而不再是一份礼物。如果找不到简单的解决方案,开源可能会变得更小,并逐渐演变为仅限受邀者参与,从而恰恰排除那些曾为开源增添活力的热心外来者。