May Reading List

Alex O'Callaghan

五月阅读清单

原文由 Alex O'Callaghan 发布,订阅该博客

这是五月阅读清单,汇总了我本月读到的一些有趣内容,你也可以在此阅读上月的文章

又一批被攻破的 npm 包

又一个月,又出现了新的供应链攻击。多款TanStack 相关包遭到入侵,这是一起被称为“Mini Shai-Hulud”的攻击。Tanner Linsley 分享了一篇详细的复盘文章,讲述了攻击如何通过 GitHub Actions 配置漏洞发生。随后,又有317 个 npm 包被攻破,攻击者使用了同样的凭据窃取脚本,该脚本会利用其获取到的任意 npm 凭据在包之间自我复制传播。

这再次有力地提醒我们要采取措施加固供应链安全。我们已将所有项目升级到最新发布的pnpm v11,该版本默认将 minimumReleaseAge 设为 1 天。由于大多数此类攻击很快就会被发现,留出一定的缓冲时间将有助于抵御这类攻击。

同样是在安全方面,我本月还发现了Varlock——一款很有意思的工具,它能让 agent 了解有哪些密钥可用,同时又防止其访问密钥的真实值。确保密钥不会以明文形式存放在本地机器上,也能在你不慎拉取到这类被投毒的包时,帮助抵御凭据窃取攻击。

模型训练与 Opus 4.8

Anthropic 发布了一篇关于其对齐训练方法变化的博文,详细阐述了让 Claude 学习伦理选择背后的原则与推理过程如何提升了其作为 agent 的对齐能力。由此联想到我们自己创建的 skill 也很有意思——仅仅罗列期望行为的具体示例,远远不足以应对 agent 遇到全新场景时的情况。

OpenAI 发布了一篇很有趣的文章,讲述了“哥布林从何而来”。在训练“nerdy”人格特性时,模型意外地对怪异生物相关的隐喻给予了过高的奖励,以至于团队最终不得不在系统提示中专门要求模型不要谈论哥布林。

Anthropic 还在月末发布了Claude Opus 4.8,距离 4.7 发布仅一个多月。

与 Agent 一起构建

Addy Osmani 发表了一篇关于长运行 agent不同策略的文章,不过我仍然不太认同用这种策略来编写生产代码。

Birgitta Böckeler 关于面向编码 agent 的可维护性传感器的文章值得一读,文中介绍了为实现 agent 自我纠正所必不可少的各类护栏与检查机制。

我还读了 Helio Medeiros 关于使用 DORA 指标衡量 AI 落地效果的文章。这与我目前在 Mintel 通过构建回顾型 agent试图系统化推进的工作思路颇为相似。

值得思考的观点

Mark Erikson 分享了一篇长文,讲述了他对 AI 编程工具从怀疑、恐惧到逐渐接受的心路历程。

Tuhin Nair 写了一篇关于资深开发者如何传达自身专业性的文章。其中关于工程师如何思考、如何与业务方沟通的部分,有不少观点我很认同。至于文中提出的用于快速试错的“speed”系统,虽然听起来很有吸引力,但对于在实践中如何为其设置足够的护栏,以及当“speed”版本已经交付给客户后,梳理和重构它需要付出多少额外工作,这些细节却并未涉及。

Lalit Maganti 分享了一篇关于不要直接回答第一个问题的文章。我觉得任何在平台团队工作或为其他工程师构建工具的人都会对此深有体会。

Web 平台与前端

Chrome 团队发布了一篇关于声明式局部更新(Declarative Partial Updates)的文章。该提案试图让乱序 HTML 流式传输和更高效的 HTML 插入成为 Web 平台的一部分,本质上是想让孤岛架构(islands architecture)成为 Web 的一等公民。

Storybook 10.4 已经发布。对我而言,最值得关注的是其新增了对TanStack React 的一等支持。

Yangshun Tay 撰文探讨了前端开发正在发生的变化,并就前端开发者应将学习和成长重点放在何处给出了建议。

我还发现了D2。我一直在博客中使用Mermaid 来绘制图表,但在自定义样式上遇到了一些麻烦,D2 看起来是一个值得尝试的强大替代方案。

其他有趣的技术阅读

2004 年的 RuneScape 如何在 56k 拨号上网条件下承载一款多人在线 RPG 是一篇技术深度解析,介绍了 2004 年的 RuneScape 客户端如何通过浏览器中的 Java 小程序实现高效的客户端-服务器通信。读来很有意思,这也是我早期的游戏记忆之一,让我第一次体会到 Web 的强大潜力。

Netflix 技术博客发布了一篇关于构建实时服务拓扑图的文章。其思路很有意思,尽管技术实现细节较少,且有明显的 AI 生成痕迹。这让我很有共鸣,因为我在工作中也正尝试让 agent 能够跨系统追踪调用链,并逐渐意识到有多少跨系统依赖根本没有被清晰地记录下来,多少相关知识仅仅存在于人们的脑海中。

最后是 Google 博客上的一篇短文,谈到了如何在代码评审回复中补充上下文。其中提供了非常实用的建议,指导你该如何回应代码评审意见,并说明自己是为何以及如何处理这些反馈的。

本文章由 muse-spark-1.2-contributor 进行翻译

评论