每周见闻(73):当工作流突然中断,你会怎么办?
约 2739 字大约 9 分钟
2026-06-28
每周见闻:2026-06-22 - 2026-06-28
来自于阮一峰老师最新周刊的封面图:人们穿戴巨型荷叶制作的防晒面罩。
我觉得很有趣,左边两个人好像匹诺曹啊。
当工作流突然中断,你会怎么办?
之前在坚持写周刊这一年,谈谈我这一年的复盘与收获中有提到我的周刊工作流会是用 Save to Notion 这个插件保存我感兴趣的网页到 Notion。作为周刊的素材。
但在这周,这个插件的保存功能突然出现了问题,于是整个工作流伴随着错误提示戛然而止。 
我是一个 J 人,对于习惯了的工作流突然中断后会非常地焦虑。因为这会影响周刊的制作,我也并不想因为插件的原因而中断一周。
在尝试了各种方法仍然无解后,我的第一反应便是回到最原始的状态——手动保存。但转念一想,手动保存费时费力可以应急但不能长久,随即便搜索有没有类似可以代替插件。同类的插件很多,其中 Notion Web Clipper 正好符合我的需求,也兼容现在 Notion 的数据库格式。简单安装后,工作流顺利再开。
虽然只是我个人很小的一件事,但也反应出工作流中的脆弱性。针对关键节点,是需要做好备份和应急预案的。所以当你的工作流突然中断后,你会怎么办呢?
生活
1、「安康警察」和「逆风警察」[^1]
标签:思考
我很早以前也因为说“一路顺风“被纠正过。当时就觉得很奇怪,我只想祝你旅行顺利,结果弄得我好像在咒人一样。这篇作者真是说出了我一直以来的疑问。
文章批判了两种常见的社交纠错行为:安康警察 和 逆风警察。前者在端午节时强行纠正「端午快乐」为「端午安康」,后者则在机场纠正「一路顺风」的说法,指出飞机需逆风起降。作者考证发现,「端午只能祝安康」是2012年左右兴起的伪民俗,古汉语中「快乐」与「安康」并无对立。
日常问候的核心是善意表达,而非学术讨论。明明只是普通的问候非要搞这么多规则和限制,除了让人不适外没有任何好处。不如像作者说的,只要不影响核心语义的前提下,应包容日常交流中的模糊性。
2、职场中的「可预期性」[^2]
标签:工作,思考
作者在文中提到在职场协作中,比爆发式个人能力更稀缺的属性是「可预期性」。可预期性意味着「凡事有交代,件件有着落,事事有回音」,它要求执行者按既定节奏同步进度,遇到阻碍时第一时间拉警报,而非等到最后一刻才摊牌。
作为工作十多年的老人,深有同感。或许以前是受动漫的影响,觉得自己一个人”力挽狂澜“或者”绝地反杀“是一件很酷的事。这在小团队项目中可行,但放到公司这个成熟的系统中就是绝对的禁忌。
早年在日本工作时,职场的第一条就是要学会”菠菜“(日语里报告、联络、相谈的首字读音)。当时不以为然,但随着工作时间越久就越有感触。在成熟的系统中,整体的稳定远比个人的超长发挥要重要。及时向上汇报进度,不仅是个人能力的体现,在关键时刻也是争取到帮助和最后保护自己的手段。比起事情的结果好坏,事情的失控更为可怕。
承认自己的有限,才是职业化的开始,提前告知合作方自己做不到,比硬撑到崩盘要体面得多。

Coding
1、window.showDirectoryPicker opens up a whole new world[^3]
标签:JavaScript,前端
Chrome 推出 window.showDirectoryPicker() API,允许网站读取和写入用户计算机上整个文件夹的内容。如此一来,Chrome 作为本地优先的应用的能力更进一步。浏览器也能逐渐成为桌面应用的入口了。

2、Blocking Install Scripts Is Not a Silver Bullet[^4]
标签:Node.js,Security,NPM
上期周刊中有提到,npm v12 的改进包括将 allowScripts、--allow-git 和 --allow-remote 默认设为关闭,要求用户显式批准。
但这并非“银弹”,这篇文章深入地梳理了 npm install 的整个流程并指出核心问题在于 npm install 不会执行模块代码,而 require() 会。攻击者只需将有效负载放在模块体顶层的立即执行函数中,就能在应用导入依赖时自动运行。
因此,真正的防御层在于 Node.js 权限模型和更广泛的沙箱机制,它们能在开发机和 CI 环境中约束代码的实际行为。

3、The new HTTP QUERY method explained | Kreya[^5]
标签:前端
HTTP QUERY 方法是一种新的 HTTP 请求方法,用于处理复杂查询场景下 GET 和 POST 方法的局限性。你可以理解为是一个带 Body 的 GET 请求。
使用 GET 方法进行复杂查询会导致 URL 过长、难以阅读,并可能触发字符长度限制;而使用 POST 方法虽然允许请求体,但违背了其非幂等和用于创建资源的语义,导致无法安全重试或利用缓存。尽管 HTTP 没有规定 GET 不能传 body,但实际使用时服务端的解析各不相同。GET 带 Body 很可能会遇到问题。
只是这个方法目前很新,全面支持还需要一段时间。

4、Stop using JWTs[^7]
标签:Security,Node.js,架构
文章的核心论点是,JSON Web Token (JWT) 不应被用于维持用户的登录状态。作者认为 JWT 规范仅适用于极短生命周期的令牌(约5分钟以内),而用户会话需要更长的有效期。文章强调,所谓“无状态”认证在安全上并不可行,因为必须依赖某种数据存储来安全地处理令牌,既然必须使用数据库,那么直接使用传统的 cookie 会话是更优、更安全的选择。
不过我觉得 JWT 因为其无状态,很适合用于集群。Session 和 Cookie 因为其有状态,不适合服务器的横向扩展。有状态的服务维护上是个问题,尤其是当服务重启或者需要停止升级时,不可避免地会造成影响。而文中提到的安全问题,如果本地的 JWT 能被拿到,那换成 Cookie 也是一样的。
5、I Stored a Website in a Favicon[^8]
标签:前端,FUN
一篇很有趣的文章。作者尝试将整个小型网页的内容存储在网站的 favicon 图标中,就是浏览器标签页上的那个图标。
favicon 本质上是一张图片,而图片的每个像素由 RGB 三个字节组成,因此可以直接将 HTML 文本的 UTF-8 字节编码写入像素的颜色值中。最终,一个 208 字节的 HTML 页面被成功编码进一个 9x9 像素的图片里,仅占用了该图片 87% 的存储容量。
虽然这个技术并不实用,但在某些场景下却有妙用。比如之前 56 期周刊中利用 Canvas 隐藏信息也是类似原理。

AI
1、Modular: What about OpenCL and CUDA C++ alternatives? (Democratizing AI Compute, Part 5)[^6]
标签:Opencl,Nvidia
本文回顾了OpenCL、SYCL等CUDA替代方案的历史,指出它们虽在技术上有所贡献,但未能成为AI计算的主流平台。核心原因包括开放竞合模式下的委员会决策速度缓慢,导致创新受阻;以及缺乏统一的参考实现,造成厂商各自为政,碎片化严重,最终削弱了其核心的便携性优势。
当AI框架(如TensorFlow和PyTorch)与硬件需求快速演进时,OpenCL的缺陷被放大。它缺乏对Tensor Core等关键硬件的标准化支持,导致性能相比CUDA有5到10倍的差距,这对成本敏感的生成式AI而言是致命缺陷。同时,NVIDIA通过深度绑定AI框架并策略性地限制其OpenCL实现,巩固了CUDA的统治地位。 OpenCL 的使用体验被形容为“about as comfortable as hugging a cactus”。 这一比喻生动地反映了开发者因碎片化和不一致的供应商支持而面临的挫败感。
2、大神Karpathy用Claude的方式,原来是这样的?[^9]
标签:Claude
这篇文章介绍了 Karpathy 使用的 Claude.md(当然也有怀疑者未必是真的)。可以用于规范和指导 Claude 等大语言模型(LLM)进行辅助编程,从而降低代码错误率,提升开发效率。
其核心原则包含一下几点:
- 核心开发原则:写之前先读、保持简单、外科手术式修改
- 产物的验证和执行规范:严格验证、目标驱动、理智调试、谨慎引入依赖
- 避免 AI 常见的失败模式:如隐形决策、知识幻觉、风格漂移、失控重构
即使面对强大的 Claude,也需要像管理初级实习生一样进行事无巨细的规则约束。通过这些高度具象化的规则,能将 Claude 的代码错误率显著降低。
参考文章:
- [1] 「安康警察」和「逆风警察」: https://blog.solazy.me/20260621/
- [2] 职场中的「可预期性」: https://blog.solazy.me/20260615/
- [3] window.showDirectoryPicker opens up a whole new world: https://steveharrison.dev/showdirectorypicker-opens-up-a-whole-new-world/
- [4] Blocking Install Scripts Is Not a Silver Bullet: https://nodesource.com/blog/npm-v12-install-scripts-not-a-silver-bullet
- [5] The new HTTP QUERY method explained | Kreya: https://kreya.app/blog/new-http-query-method-explained/
- [6] Modular: What about OpenCL and CUDA C++ alternatives? (Democratizing AI Compute, Part 5): https://www.modular.com/blog/democratizing-ai-compute-part-5-what-about-cuda-c-alternatives
- [7] Stop using JWTs: https://gist.github.com/samsch/0d1f3d3b4745d778f78b230cf6061452
- [8] I Stored a Website in a Favicon: https://www.timwehrle.de/blog/i-stored-a-website-in-a-favicon/
- [9] 大神Karpathy用Claude的方式,原来是这样的?: https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2651041465&idx=1&sn=a391dbb9edb976be96eed9e3e08395ae&poc_token=HNOzP2qjjuwjvnr91VkxeLZ2akWNydBuRofRRZ44
