Hacker News 每日播报

一个基于 AI 的 Hacker News 中文播客项目,每天自动抓取 Hacker News 热门文章,通过 AI 生成中文总结并转换为播客内容。

语音使用 Minimax Audio 生成。 Minimax Audio:让文字栩栩如“声”。

欢迎收听 Hacker News 每日播报,今天我们将深入探讨微软的新文本编辑器、PNG 格式的重大更新、如何在 Linux 上读取护照芯片、时间本质的哲学思考、哈希碰撞的数学奥秘、OpenAI 音频转录的成本优化技巧,以及一个充满趣味的运河船模拟器项目。

Microsoft Edit:致敬经典,面向未来

微软最近在 GitHub 上发布了一款名为 "Edit" 的全新文本编辑器,它明确致敬了经典的 MS-DOS Editor。这款编辑器旨在满足简单的编辑需求,拥有现代化的界面和类似 VS Code 的输入控制,同时对不熟悉终端环境的用户也十分友好。

"Edit" 主要由 Rust 语言编写,并采用 MIT 许可证开源。它特别适合捆绑在 Nano Server 等最小化 Windows 发行版中,或在 SSH 等远程连接环境下作为基础的救援和编辑工具。其简洁的文本用户界面(TUI)设计,唤起了许多人对 DOS 时代高效、响应迅速的文本模式界面的美好回忆。

社区对这款新编辑器的发布反响热烈,其中一个主要话题便是怀旧情绪。许多人立刻联想到原版 MS-DOS Editor,以及 Borland 的 Turbo Vision 框架,后者曾驱动了 Turbo C++ 等众多经典 DOS 应用。大家纷纷回忆起这些老式文本模式界面的速度和响应性,并将其与一些现代图形用户界面的迟缓形成对比。有深入的技术讨论揭示了 Turbo Vision 的工作原理,包括直接屏幕内存映射,甚至有人分享了 Turbo Vision 的现代 C++ 移植版,显示出对这种界面风格的持续兴趣。

除了怀旧,大家也深入探讨了微软开发这款新编辑器的动机。虽然有人最初猜测这只是一个“心血来潮”的项目,但更多人指出其明确的实用目的:为最小化 Windows 环境提供一个轻量级的 TUI 编辑器,作为在没有完整图形界面时进行基本编辑和故障排除的关键工具。

这自然引出了与现代 Windows 记事本的对比。不少用户对记事本近期加入标签页和 AI Copilot 等功能表示不满,认为这些改动背离了记事本作为简单、快速、无冗余文本编辑器的初衷。因此,这款新的 "Edit" 被一些人视为填补了记事本“功能膨胀”后留下的空白,提供了一种真正极简的编辑体验。

讨论还扩展到对微软整体软件开发理念和生态系统的批判。开发者们讨论了 Windows 平台上缺乏一个清晰、稳定、易用的原生 GUI 框架的现状,并将当前的 WPF、MAUI、WinUI3 等与旧的 WinForms 或第三方选项(如 Qt、Avalonia)进行了比较。小型 Windows 开发者面临的代码签名成本和复杂性也被认为是显著障碍。这种更广泛的批判反映了部分开发者认为微软的桌面开发方法变得碎片化,不如过去那样对开发者友好。

此外,也有人对 "Edit" 项目本身的技术实现表示赞赏,指出其代码质量高,并且似乎没有外部 TUI 框架依赖,可能采用了自定义实现,并好奇为何没有使用 Ratatui 等流行的 Rust TUI 库。

Thnickels:捕捉那些稍纵即逝的灵感火花

这篇文章深入探讨了 Paul Graham 提出的一个引人入胜的概念——“Thnickels”,即那些在我们脑海中不断闪现的、微小而短暂的念头或想法。作者将这些想法比作“镍币”,因为它们数量多、价值看似不高,但如果能被注意到和收集起来,可能会累积成有价值的东西。

文章强调了这些“Thnickels”的普遍性和重要性。它指出,我们的大脑并非总是在进行深度、集中的思考,更多时候是在产生这些零散、快速的念头。这些念头可能是一个问题的微小观察、一个新事物的模糊轮廓、一个现有想法的细微改进,或者仅仅是一个随机的联想。文章认为,这些看似不重要的念头是创造力和解决问题的源泉之一。关键在于我们是否能够捕捉到它们,而不是让它们稍纵即逝。文章还可能讨论了如何培养对这些“Thnickels”的敏感性,以及如何将它们记录下来,以便后续的整理和发展。

社区围绕这个概念展开了热烈的讨论,展现了多样化的视角。许多开发者和思考者对“Thnickels”的概念表示认同,认为这准确描述了他们日常思考的状态。有人分享了自己捕捉这些想法的方法,比如使用特定的笔记应用、随身携带小本子,或者利用语音备忘录。他们认为,记录这些零散的想法确实有助于后续的创意工作或问题解决。

另一方面,也有人提出了质疑或补充。一些人认为,虽然捕捉想法很重要,但更关键的是如何筛选和发展这些“Thnickels”。大量的零散想法如果没有有效的整理和后续行动,反而可能成为一种负担或干扰。有人讨论了如何区分有潜力的“Thnickels”和纯粹的噪音。还有人提到了与此相关的心理学概念,比如潜意识的活动、灵感乍现的机制等。一些务实的讨论则聚焦于工具和流程,探讨哪些方法最适合不同类型的人捕捉和管理他们的“Thnickels”。总的来说,讨论不仅肯定了这一概念的价值,也深入探讨了实践中的挑战和可能的解决方案。

PNG 格式的重大回归:PNG-3 规范发布

PNG,这个陪伴了我们多年的图片格式,在沉寂了二十多年后,终于迎来了它的新篇章。最近发布的 PNG-3 规范,标志着这个经典格式的复兴。文章作者 ProgramMax 兴奋地宣布 PNG "回来了",并强调了它作为重要数字档案格式(被美国国会图书馆、加拿大图书馆档案馆等机构推荐)的持续重要性。

这篇新规范带来了几个关键更新:

首先,也是最引人注目的,是对 HDR(高动态范围)的正式支持。新的 HDR 支持能够表示比传统 SDR(标准动态范围)更宽广的色彩范围,并且设计得非常高效,只需要额外的 4 个字节(加上 PNG 块的开销)。这使得 PNG 能够适应现代显示技术的需求,为未来的图像处理奠定基础。

其次,新规范正式承认了 APNG(Animated PNG)。虽然 APNG 早在多年前由 Mozilla 提出并已在许多浏览器和应用中得到广泛支持,但直到现在才被纳入官方规范,这反映了其在实际应用中的普及。

此外,PNG-3 正式支持嵌入 Exif 数据。Exif 数据常用于存储照片的元信息,如版权、相机型号、拍摄设置甚至 GPS 位置,这对于摄影师和需要保留图像原始信息的场景非常有用。

最后,新规范还包含了一些常规性的清理工作,比如修正错误和澄清模糊之处,使得规范更加完善和易于理解。

文章提到,这次更新的契机源于 W3C Timed Text 工作组(负责字幕标准)对 PNG 中 HDR 支持的需求。随后,一个由 Adobe、Apple、BBC、Google 等业界巨头组成的“梦之队”加入进来,共同推动了这次规范的更新。许多主流软件和平台,如 Chrome、Safari、Firefox、iOS/macOS、Photoshop 等,已经开始支持新规范的特性。文章还透露,未来的工作已经在进行中,下一版(第四版)将侧重于改进 HDR 和 SDR 的互操作性,而第五版则将研究大家最关心的更好的压缩算法和并行编解码

然而,社区的讨论焦点并非仅仅是新 PNG 规范的技术细节,而是围绕着 Hacker News 网站的内容管理和评论迁移策略。许多人对于这篇获得较多投票和讨论的文章被标记为“dupe”(重复)并将其评论移动到另一篇提交时间更早但投票数和评论数较少的文章感到困惑。

Hacker News 的管理员对此进行了解释,指出他们遵循的原则是奖励首个提交者。即使后提交的文章获得了更多关注,如果发现更早提交的同一主题文章,他们会将其标记为重复,并将讨论合并到最早提交的那一篇,同时更新最早文章的时间戳,使其获得应有的曝光机会。这是为了鼓励用户在提交前搜索,并确保原创提交者得到认可。

因此,尽管文章本身带来了关于 PNG 格式令人兴奋的技术更新,但本次讨论区的主要内容却意外地转向了 Hacker News 社区自身的运作机制和管理决策。这反映了社区对平台规则的关注,也侧面说明了在 Hacker News 上,除了技术内容本身,社区的互动和管理方式也是用户关注的重要方面。

在 Linux 上读取 NFC 护照芯片:一次技术探索之旅

Terence Eden 的博客文章分享了一次有趣的尝试:如何在 Linux 系统下读取护照的 NFC 芯片。出于“无聊且绝非邪恶”的原因,作者希望用 roeften/pypassport 这个 Python 库来读取护照芯片中的所有数据,包括生物识别信息。

文章详细介绍了整个过程。护照的 NFC 芯片是受密码保护的,密码印在护照内页的“机器可读区”(MRZ)里。作者发现,即使 MRZ 部分缺失,只要知道护照号码、出生日期和有效期,就可以根据 ICAO(国际民用航空组织)的规范重新计算出完整的 MRZ,包括缺失的校验码。文章提供了相应的 Python 代码来实现这个计算。

作者还探讨了护照芯片的安全性。它使用了标准的公钥加密技术,规范非常详细。一个有趣的发现是,芯片本身没有计时器,所以理论上不会因为多次尝试密码而被锁定。虽然每次错误尝试会引入几秒的延迟,但如果攻击者已经知道护照号码和出生日期,理论上通过暴力破解有效期(大约 10 年范围)是可能的,可能需要几天时间。不过,作者认为这并不“划算”,因为通过这种方式获取的数据(照片、姓名、性别、国籍等)大部分都能直接从护照上看到,电子读取的价值有限。

文章接着指导了如何安装 pypassport 库并在 Linux 上运行示例代码来读取护照数据。读取到的数据被组织在不同的“数据组”(Data Groups)中,例如 DG1 包含完整的 MRZ 信息,DG2 到 DG4 包含生物识别模板,其中就包括护照照片。作者展示了如何提取照片的字节并保存为文件,发现照片文件很小,通常是 JPEG 或 JPEG2000 格式,并且包含了面部特征点和姿态角度等元数据。

最后,作者总结认为,虽然不太可能通过暴力破解 MRZ 来读取陌生人的护照,但对于需要合法收集个人信息(例如在 GDPR 框架下)的场景,通过 OCR 识别 MRZ 并快速电子读取护照数据是完全可行的。这种方法无法检测伪造护照或检查吊销状态,但对于查看旅行证件上的内容来说非常有效。他还提到,虽然 NFC 读取距离通常很近,但 ICAO 规范指出,未加密的通信在几米范围内可能被窃听。

社区对这篇文章展开了热烈的讨论,提供了多方面的视角:

首先,关于技术规范和实现差异。有人直接指出了 ICAO 9303 规范是理解护照芯片细节的关键,但也强调了各国在实际实现中存在很多“创造性解释”甚至 bug,导致编写兼容各种护照的软件充满挑战。关于驾驶证等其他证件的 MRZ,有人指出它们通常不遵循 ICAO 9303 规范,而是使用其他标准。

其次,关于用户体验和实际应用。多位用户吐槽了官方电子旅行授权或身份验证应用在使用手机 NFC 读取护照时的糟糕体验,经常需要反复尝试才能成功。但也有人认为,相比于上传护照照片,通过 NFC 读取芯片进行 KYC(了解你的客户)是更好的方式,并且一些银行和航空公司已经在使用了。

再次,关于安全性、伪造与验证。文章提到数据是签名的,这引发了关于伪造护照的讨论。有人解释说,数据由发行国政府的私钥签名,伪造芯片无法生成有效签名,会被检测出来。关于更高级的生物识别数据(如指纹),有人提到这需要政府持有的私钥才能访问,这又引出了关于这些私钥的安全性、泄露风险以及政府与计算机安全专家对密钥处理理解差异的讨论。有人进一步解释了护照中的数字签名机制(DSC, CSCA, ICAO PKD)以及用于验证芯片真实性的主动认证功能。物理安全方面,有人讨论了护照中可能存在的金属网格,用于阻挡 NFC 信号,需要打开护照才能读取。

还有一些讨论涉及其他方面。例如,有人注意到 MRZ 使用的 YYMMDD 日期格式存在 Y2K 问题。有人探讨了通过恶意构造芯片数据来攻击护照读取系统的可能性,认为理论上存在漏洞,但实际操作风险很高。关于将护照芯片用于“人类证明”(proof-of-human)以对抗垃圾邮件和机器人,有人讨论了其局限性,因为护照认证只证明文档存在,不证明持有者的意图。

当时间不存在时如何管理时间:一场量子物理与职场幽默的碰撞

一篇题为《当时间不存在时如何管理时间》的文章,以一种幽默风趣、结合了量子物理学和职场喜剧的方式,探讨了一个深刻的物理学问题:时间可能并非宇宙的基本维度,而是从更基础的量子现象中涌现出来的。

文章开篇就抛出了一个引人入胜的悖论:我们花费大量精力进行时间管理、优化效率,但尖端物理学却越来越倾向于认为,时间本身可能只是一个由量子纠缠产生的“令人信服的幻觉”。文章回顾了人类对时间的认知史,从牛顿的“绝对时间”到爱因斯坦的相对论,后者揭示了时间的相对性和引力对时间的扭曲。爱因斯坦的“块状宇宙”理论甚至暗示过去、现在、未来可能同时存在于四维时空中。

文章的重点转向了量子力学与广义相对论结合的尝试——量子引力。在这里,时间管理变得异常诡异。量子引力的基本方程,如惠勒-德威特方程,在某种形式下似乎不包含时间变量,这被称为物理学中的“时间问题”。文章指出,这并非宇宙记账的小疏忽,而是宇宙基本操作系统可能没有安装“调度.exe”。

接着,文章介绍了佩奇-伍特斯机制(Page-Wootters mechanism),这一机制提出时间可能从现实不同部分之间的量子纠缠中涌现。对于量子系统内部的观察者来说,时间似乎正常流逝;而对于从外部观察整个系统的观察者来说,时间可能根本不存在。文章引用了 2013-2015 年意大利物理学家埃卡特琳娜·莫雷瓦(Ekaterina Moreva)等人的实验,认为这些实验为这一机制提供了直接证据,表明时间确实可以为内部观察者涌现,而对外部观察者缺席。

文章最终提出了一个大胆的推测:意识本身可能通过量子观察和测量参与创造了时间体验。我们并非被动地经历时间,而是通过意识行为参与了时间的持续量子涌现。基于这些物理学洞见,文章以半开玩笑的方式提出了一些“量子时间管理”的实用策略,例如:拥抱量子叠加调度、利用意识依赖的时间创造、接受熵的时间箭头、实施相对论截止日期管理。

文章总结道,如果意识通过量子纠缠参与创造时间,那么每一个专注的时刻都在为现实的基本结构做出贡献。高效工作不仅仅是在时间中完成任务,更是参与创造时间体验本身。拖延不仅仅是低效,更是错失了参与宇宙基本运作系统的机会。时间管理不是高效利用固定资源,而是有意识地参与生成时间体验的量子过程。

社区对这篇文章的反应非常积极,许多人赞赏其将复杂的物理学概念与日常的职场幽默相结合的方式。文章作者在讨论中进一步澄清,这是一篇为科学喜剧播客撰写的博客文章,科学内容是准确的,但加入了大量的职场幽默。他确认了佩奇-伍特斯机制和惠勒-德威特方程的“时间问题”是真实的物理学研究领域,但强调“时间不存在”的说法更像“温度不存在”——温度是真实的,但它从更基础的分子运动中涌现。时间可能也是如此,从量子信息中涌现。

讨论中也出现了对文章科学细节的探讨和修正。有用户指出了文章中关于引力导致头比脚老得慢的说法有误(应是头比脚快),作者虚心接受并详细解释了广义相对论中引力对时间的影响确实会使高处时钟比低处时钟走得快。另一位用户则对文章中关于惠勒-德威特方程“不包含时间变量”以及量子力学与广义相对论合并的说法提出了更精确的修正。作者再次承认了自己在科普表达上的过度简化和错误,并感谢讨论者帮助保持科学的准确性。

关于意识在时间创造中的作用,社区也展开了讨论。一些人认为将意识特殊化是误导,认为其他物理过程(如岩石侵蚀)同样参与了现实的信息处理和时间涌现。作者同意这一观点,并澄清科学实验关注的是测量和观察,而非意识的特殊性。也有人从哲学角度探讨了意识是否完全是物理过程的产物。

此外,讨论者还提到了其他相关概念,如时间感知研究(chronemics)、装配理论(Assembly Theory)对时间的新解释、以及对空间是否也可能是涌现属性的思考。一些讨论者则从更实际或更抽象的角度回应了文章:有人幽默地问如果时间不存在,工资何时到账就不重要了;有人认为文章的观点虽然有趣,但对人类而言时间显然是存在的,这种科学说法缺乏日常实用性;也有人将文章的观点与主观时间体验(如做梦时的时间感)联系起来。文章中关于拖延的新定义——未能充分参与创造时间——被一些人戏称为新的“负罪感制造机”。

哈希碰撞的概率:从生日问题到 UUID 的应用

这篇文章深入探讨了哈希函数中一个核心概念——哈希碰撞的概率,并用数学方法进行了详细分析。文章首先介绍了哈希函数的基本作用:将任意复杂的输入映射到一个固定大小的数字输出。它通过一个简单的例子——用哈希值来决定将书放到哪个盒子,来形象地说明哈希函数在数据存储中的应用。然而,问题随之而来:当不同的输入(比如两本书)被哈希到同一个输出值(同一个盒子)时,就发生了哈希碰撞。虽然一个好的哈希函数会尽量均匀分布输出,但随着输入项的增加,碰撞是不可避免的。文章指出,当输入项的数量超过哈希函数可能输出值的数量时,碰撞是必然发生的。

文章的核心在于如何计算给定输入项数量 (k) 和哈希函数输出范围大小 (N) 的情况下,发生至少一次哈希碰撞的概率。作者巧妙地将这个问题与著名的“生日问题”联系起来——即在一个房间里有多少人,才能使其中至少两人拥有相同的生日。哈希碰撞问题本质上就是生日问题的翻版,其中输入项是“人”,哈希输出是“生日”或“盒子”。

计算哈希碰撞的精确概率,文章采用了计算其补集的方法:先计算所有输入项都没有发生碰撞的概率,然后用 1 减去这个概率。这个“没有碰撞”的概率是随着每个新输入项的加入,其哈希值不与之前任何一个哈希值重复的概率的乘积。虽然这个方法能得出精确结果,但对于大型 N 和 k 值,计算量巨大。

因此,文章接着介绍了三种近似计算方法,旨在简化计算:

  1. 指数近似 (e-asy approximation): 利用了当 x 趋近于 0 时,1-x ≈ e⁻ˣ 的数学近似。
  2. 简化近似: 进一步利用当 y 趋近于 0 时,1-e⁻ʸ ≈ y 的近似。
  3. 最简化近似: 当 k 很大时,k(k-1) 近似于 k²,从而得到最简单的近似公式 k²/(2N)。

文章通过图表比较了这三种近似方法相对于精确计算的相对误差。结果显示,指数近似在 k 值较小时误差很小,并且随着 k 增大,误差下降得很快。而另外两种简化近似在 k 值较小时表现尚可,但随着 k 增大,误差迅速变大。作者总结认为,指数近似是比较稳健的,而简化近似适用于快速估算。

社区对作者的写作风格表示赞赏,认为其幽默风趣且易于理解,使得原本枯燥的数学概念变得生动有趣。

在数学细节方面,有人指出了文章附录中关于 1-x ≈ e⁻ˣ 近似的证明方法可能不够严谨,认为更标准的做法是比较两者在 x=0 处的泰勒级数展开式的前两项。

关于大数计算和数值稳定性,社区提供了几种避免精确计算中可能出现的数值溢出的方法。一种是使用斯特林近似(Stirling's approximation)来近似阶乘的对数,然后在对数空间进行计算,最后再指数化回来。另一种更直接的方法是直接在对数空间处理原始的阶乘表达式,利用对数将乘法变为加法,从而避免大数乘法。

将理论应用于实践是开发者社区的重点。讨论中多次提到了 UUID v4 的碰撞概率。UUID v4 包含 122 位随机信息,总共有 2¹²² 种可能的值。根据生日问题,要达到 50% 的碰撞概率,大约需要生成 2⁶¹ 个 UUID。有人指出,这个数量级对于大多数“单服务器”应用来说是天文数字,碰撞概率极低。然而,也有人提醒,对于超大型系统或数据模型(如处理数十 EB 数据),这个数量级并非不可企及,在这种情况下,简单依赖概率的 UUID v4 可能不再是最佳选择,可能需要考虑确定性生成或其他更宽的标识符。同时,讨论强调了 UUID v4 碰撞概率的前提是随机源必须是高质量且均匀分布的,如果随机源存在偏差或重复播种,实际碰撞风险会大大增加。

此外,有人分享了自己在实际工作中遇到哈希碰撞的经历,比如在 Snowflake 数据仓库中使用哈希值作为维度表的主键时发生了碰撞,这引发了关于 Snowflake 内部哈希函数特性(非加密哈希,不保证唯一性)的讨论。还有人提到了“学习索引”(learned indexes)的概念,这是一种尝试利用数据分布特性来优化索引结构。

最后,关于作者撰写此类文章的动机,社区也进行了一些哲学探讨。有人认为这很可能是一种个人爱好和对知识的探索,而非直接由雇主驱动的“有价值”工作。他们引用了费曼的故事,说明有时看似“无用”的纯粹好奇心驱动的探索,最终可能带来重大的突破。这种观点鼓励大家不要过度关注工作的“直接价值”,而是享受学习和探索的过程本身。

OpenAI 按分钟收费?加速你的音频来省钱!

一篇关于优化 OpenAI 音频转录成本和速度的文章,标题是《OpenAI charges by the minute, so speed up your audio》。文章的核心观点非常直接:既然 OpenAI 的音频转录服务是按时长(或基于时长的音频 token)收费的,那么在将音频文件发送给 API 之前,先把它加速处理,就能显著降低成本并加快处理速度。作者 George Mandis 在尝试转录 Andrej Karpathy 一个 40 分钟的讲座时偶然发现了这个技巧,因为 OpenAI 的 gpt-4o-transcribe 模型有 25 分钟的音频时长限制。

文章详细阐述了如何实现这一技巧。作者使用了 yt-dlp 工具来提取 YouTube 视频的音频,然后利用 ffmpeg 这个强大的音频处理工具,通过 atempo 滤镜将音频速度提高到 2 倍或 3 倍。处理后的音频文件时长变短,再上传到 OpenAI API 进行转录。作者发现,在 2 倍或 3 倍速下,转录质量几乎没有明显下降,但 4 倍速则会导致结果“滑稽地无法使用”。

在成本方面,作者提供了一个简单的计算,显示通过将 40 分钟的音频加速到 3 倍(约 13 分钟),使用 gpt-4o-transcribe 模型,输入音频的 token 数量大幅减少,从而将总成本从 2 倍速时的约 0.09 美元降低到 3 倍速时的约 0.07 美元,节省了约 23%。作者推测,这种加速之所以有效,是因为 AI 模型(类似于人脑)对音频中的细微信息丢失具有一定的容忍度,能够像处理带有拼写错误的文本一样,填补加速带来的空隙。

文章发布后,社区展开了热烈的讨论,涵盖了对这个技巧的验证、改进建议、替代方案以及更深层次的关于信息消费方式的探讨。

首先,不少人对作者的技巧表示赞赏,并提出了进一步优化的想法。有人建议除了加速,还可以使用 ffmpeg 移除音频中的静音部分,从而进一步缩短时长并降低成本。也有人讨论如何自动检测说话者的语速,以便动态调整加速倍数,确保在不牺牲太多准确性的前提下达到最佳效率。

其次,很多人提到了 OpenAI API 之外的更便宜或免费的转录方案。一些用户指出,OpenAI 的 Whisper 模型本身是开源的,可以在本地免费运行,尤其是在配备 Apple Silicon 等硬件的电脑上,速度也相当快,并且能保护隐私。其他商业替代方案也被提及,例如 Groq、Cloudflare Workers AI 以及一些专门提供廉价转录服务的网站。还有人分享了利用 YouTube 自身的自动转录功能(通过上传一个包含音频的视频文件)来获取免费转录的“土法炼钢”技巧。

更引人深思的是,社区引发了一场关于信息消费速度与深度的辩论。一些人对这种过度追求效率、通过摘要或高速播放来“消费”内容的趋势表示担忧,认为这可能导致对信息理解的肤浅化,失去深入思考和从细微之处获取灵感的机会。他们认为,慢下来、完整地体验内容(无论是阅读、观看还是聆听)对于真正的学习和思考至关重要。作者本人和 Andrej Karpathy 也加入了讨论,Karpathy 幽默地称作者的文章是“OMG long post”,并用 LLM 生成了一个 TLDR。他认同文章先给重点再展开的结构,但也指出像他的讲座这类内容,其价值更多在于引发思考而非传递具体信息,因此简单的摘要可能无法捕捉其精髓。作者也回应说,在完整观看了 Karpathy 的讲座后,确实发现了摘要遗漏的许多有趣观点,这反过来证明了并非所有内容都适合被高速或摘要式消费。

另一方面,也有人高速消费辩护,认为这是一种适应信息爆炸时代、提高效率的必要手段。对于语速较慢的讲座或重复性高的内容,加速播放可以节省大量时间。对于那些在传统课堂上容易走神的人来说,高速播放反而能帮助他们保持专注。他们认为,摘要和高速播放提供了更多元的消费方式,用户可以根据内容的重要性和自己的需求选择不同的速度和深度,这并非走向愚蠢,而是提供了灵活性。

运河船模拟器:从酒后玩笑到硬核游戏开发

这篇文章的作者 Jacob Filipp 分享了他如何突发奇想,从一个酒后看电视时的玩笑,最终投入近三个月时间,打造出一款“硬核”运河船游戏。

文章的要点可以概括为:

灵感来源与初衷

作者在看一个关于英国运河船生活的电视节目时,听到一位游戏开发者说想做一个“轻松治愈”的运河船游戏。酒后的他脑洞大开,心想“我敢打赌那会是个硬核的运河船游戏!”,结果这个想法挥之不去,最终促使他动手实现。

开发过程的曲折与拥抱 Godot

最初,他以为这会很简单,但很快发现自己不擅长 3D 建模。经过三天的徒劳尝试,他意识到需要认真对待,学习一个真正的游戏引擎。作者选择了 Godot 引擎,并请朋友帮忙。从零开始,包括之前的失败尝试,整个项目花了近三个月(每晚约两小时)。他特别提到,让游戏在移动端以 HTML5 格式良好运行花费了大量精力,甚至为此写了另一篇文章分享经验。

成果与反思

最终的游戏是一个只有一关、时长约三分钟的“原型”,作者戏称这是他的“一分钟游戏,一个月开发”。他从中学到了很多:Godot 引擎的强大和易用性令人惊叹;游戏开发与普通编程不同,核心在于“有趣”;一旦核心机制调优,后续关卡相对容易;快速移动的玩法可以掩盖背景的不足;游戏可以无限打磨,需要自律停止;HTML5 导出是难点;对艺术家工作的理解加深;ChatGPT 在物理模拟方面提供了很大帮助,但也让他错过了学习底层原理的机会;有时儿童教程也能提供宝贵信息;以及在小众领域做到第一的“人生建议”。

游戏的“硬核”设定

与电视节目中设想的轻松游戏不同,作者的游戏设定是玩家需要驾驶运河船逃离一场海啸,充满了紧张刺激。

社区对这个项目反响热烈,展现了多样的视角:

  • 赞赏与共鸣: 许多人表达了对这种“为了好玩而创造”的黑客精神的赞赏,认为这让他们回想起年轻时用 GameMaker 或 Flash 制作游戏的快乐时光。他们称赞作者的工作“完全令人惊叹”、“有趣且令人上瘾”。
  • 游戏体验反馈: 玩家们普遍觉得游戏虽然简单,但出乎意料地有趣。有人提到在狭窄的运河中驾驶船只感觉很灵活。海啸的设定被认为是游戏的亮点,有人甚至尝试能否“驾驭”海啸到达终点。
  • 操作界面的小插曲: 一个反复出现的讨论是关于游戏开始方式的困惑。游戏界面上有一个写着“Start Playing ◀”的文字,许多人习惯性地点击它,但它并不是一个按钮,而是指示玩家使用方向键开始移动。这引发了关于 UI 设计和用户习惯的讨论,有人认为这是“糟糕的设计”,也有人觉得这是一种“完美的、有趣的”用户反馈。
  • 来自运河船居住者的视角: 有几位人表示自己曾或正居住在运河船上。他们幽默地指出游戏物理的不准确性,比如真实的运河船是舵柄控制(推左船向右),旋转中心在船中部,倒船非常不稳定且有螺旋桨效应等。他们还提到真实运河生活中的“硬核”元素应该是清理螺旋桨上的水草,而不是海啸。不过,他们也认出了游戏中的地图是巴斯附近的 Kennet and Avon 运河,并欣赏作者的努力。有人开玩笑说,游戏里没有其他船夫对着你大喊“这里不是公共停泊点!”也是不真实的。
  • 怀旧与其他模拟游戏: 有人提到了经典的航运模拟游戏 Ports of Call,并惊讶地发现它至今仍在维护。还有人将这款游戏与 Wallace and Gromit 动画中的运河追逐场景联系起来。