MENU

第 4 期 - 编程思想的现实应用:哨兵值的启发;GPT:模糊的互联网视角?;一文理解 AbortController

October 15, 2024 • Read: 1069 • 周刊

第 4 期 - 编程思想的现实应用:哨兵值的启发;GPT:模糊的互联网视角?;一文理解 AbortController

编程思想的现实应用:哨兵值的启发

The sentinel toothpaste: a useful programming technique for everyday life

一般来说,编程思想很少被灵活运用于现实生活中,原因可能是两者之间差异较大,或者我们平时缺乏思考,未能做到举一反三。

然而,正如文章所提到的「哨兵值」的思想,在编程中有许多类似的应用场景,比如:

  • 字符串最后面的 \0, 标志字符串结束
  • 链表最后的 null pointer,也标志着链表的结束
  • ......

但如何把这个想法用到现实生活中呢?

相信我们或多或少都经历过早上刷牙却没有牙膏的场景吧,作者把这个想法用到了生活中的购买牙膏中,购买一批牙膏,其中一次与其他的牙膏不同。

当他使用到最后一支不同颜色的牙膏时,这就提醒他该买牙膏了。

intro-sentinel-toothpaste

此外,作者也分享了一些实用的编程技巧

  • 浮点数的大小比较,可以用 abs(a - b) < 0.0001 代替 a == b
  • 作者从学校布置的一次 lab,理解了外部的展示样式与程序内部最佳的数据便是方式并无必然联系
  • ......

GPT 是模糊化了的互联网?

ChatGPT Is a Blurry JPEG of the Web

作者提出了一种很有趣的观点:GPT 是模糊化了的互联网

文章开篇讲述了 2013 年一名建筑员工使用「施乐复印机」来复印房屋平面图时,发现复印的平面图中的三个房间大小是一样的,都为 14.13m^2,但是在原始平面图中,分别为 14.13、21.11 和 17.42m^2。

最终,后面技术人员发现这是一个复印机 bug。当时复印机的原理是使用数字方式扫描文档,然后打印生成的图像文件。数字化过程中几乎所有的数字图像文件都经过压缩以节省空间。

压缩文件有两个步骤:编码,将原文件转换为更紧凑的格式,然后是解码,从压缩后的格式恢复文件。如果恢复的文件与原文件相同,则称为「Lossless Compression」,如果恢复的文件只是原文件的近似值,则称为「lossy compression」。

一般文本、程序源代码等都是无损压缩,有损压缩常见于用于压缩多媒体数据(音频、视频、图片)。上面的施乐复印机采用的有损压缩存在一定缺陷,而这种可以被人眼或人耳能够察觉的有损压缩带来的缺陷称为「压缩失真」。

到此谜底也就水落石出了。

接着,作者做了一个假设:假如你即将永远失去对互联网的访问。为了做好准备,计划将网络上所有文本通过「有损压损」存储到私人服务器上(不能采用无损压缩,因为其压缩度不够)。

由于文本被高度压缩,你无法通过搜索精确引用来查找信息。为了解决这个问题,你创建了一个接口,该接口接受以问题形式提出的查询,并以传达服务器上内容的要点的答案进行响应。

上面这个过程描述起来很像 ChatGPT,或者其他 LLM。作者将 ChatGPT 与有损压缩进行类比,以此不仅可以理解 ChatGPT 通过使用不同的词语对网络信息进行重新包装的能力,而且它也是一种理解 「幻觉」 或对事实问题的无意义回答的方法。最终引出了 「GPT 是模糊化了的互联网」这种说法。

文章通过大量类比帮助我们更好地理解其想表达的核心观点,以及提出各种缜密的论据,来支持他的观点。即使你和作者的观点不甚相同,但这篇优美的文章还是非常值得读一读,以此扩充下看待事物的角度。

注:作者是 特德·姜,当代美国著名科幻作家,小说作品曾获得星云奖、雨果奖等多项大奖。

一文理解 AbortController

Understanding AbortController in Node.js: A Complete Guide

这文章以简单易懂的语言讲解了在 Node.js 中如何使用 AbortController 取消异步操作。

文章结构清晰,适合新手阅读,几乎没有理解障碍。如果你有写英文技术博客的打算,这篇文章是一个很好的参考模板。

为什么要介绍这篇文章呢?

  • 刚好看完这篇文章后,就用它来实践了。
  • 在平时我们使用 LLM 模型时,大多数都会使用 stream 流式输出,因此在某些场景下使用 signal 来取消网络请求操作,以此来节约资源。

示例:

intro-abort-signal

还可以根据 abortController.abort(reason); 取消的原因不同,来决定如何处理这个当前的操作取消。