# 科技爱好者周刊（第 331 期）：你可能是一个 NPC

这里记录每周值得分享的科技内容，周五发布。

本杂志[开源](https://github.com/ruanyf/weekly)，欢迎[投稿](https://github.com/ruanyf/weekly/issues)。另有[《谁在招人》](https://github.com/ruanyf/weekly/issues/5610)服务，发布程序员招聘信息。合作请[邮件联系](mailto:yifeng.ruan@gmail.com)（yifeng.ruan@gmail.com）。

## 封面图

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122501.webp)

南京城北万象汇商场，与红山动物园合作，架设了一个38米高的长颈鹿。（[via](https://k.sina.cn/article_2645833223_p9db4360702701st94.html)）

## 你可能是一个 NPC

最近，美国发生了一起轰动的大案，一家医疗保险公司的 CEO 当街[被人击杀](https://finance.sina.com.cn/stock/usstock/c/2024-12-11/doc-inczawih7483083.shtml)。

嫌疑人很快抓到了，是一个26岁的青年，名为路易吉·曼吉奥内（Luigi Mangione）。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122601.webp)

媒体纷纷挖掘这个青年的背景，发现他是[一个作家](https://www.gurwinder.blog/p/the-riddle-of-luigi-mangione)的粉丝。

就在几个月前，他向作家打赏200美元，并进行了多次视频通话。

媒体就去采访作家，询问两人在通话中说了什么。

作家详细地回忆了他们的通话内容。其中有一段，我觉得很有意思，分享给大家。

曼吉奥内对作家说，他很喜欢作家的一篇文章[《你可能是一个 NPC》](https://www.gurwinder.blog/p/why-you-are-probably-an-npc)。

NPC 指的是电子游戏的“非玩家角色”，比如路人、门卫、警察等等，用来模拟现实环境，由程序控制，一举一动都是设计好的，没有自主意识。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122602.webp)

作家的那篇文章提出，**人类越来越像机器人，彷佛 NPC 那样，行为逻辑都是预设好的**。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122603.webp)

曼吉奥内高度认同这个观点。他前不久去日本旅行，认为日本充满了 NPC。他说了一件亲身见闻。

一天早上，他在街上看到一名男子癫痫发作，倒在地上。他跑到最近的警察局求助，警察就跟着他去现场。

路上遇到了红灯，警察立刻就停下来，坚持要等绿灯再过马路，即使那时马路上根本没有汽车。

曼吉奥内很不理解，病人正在发病，神智不清，可能有生命危险，警察却坚持遵守交通规则。救人难道不是更重要的事情吗？

他由此认为，日本人“缺乏自由意志”，规则怎么说就怎么做，不会自主行事，就是**活着的 NPC**。

他还观察到，日本存在一种“隐蔽族”（hikikomori），他们不出门，一个人整天待在卧室里，用电子游戏、上网、视频来消磨时间。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122604.webp)

曼吉奥内认为，这些人也是 NPC，他们失去了对生活的控制，无法参与社会生活，就选择放弃，等于丧失了生活的自主权。

他观察到，这种现象不仅存在于日本，正在向全世界蔓延，世界各地越来越多的人正在成为 NPC。他们要么无法自主的生活，要么无法选择自己的行为，而是根据规则和指令来行事，就像被程序控制一样。

科技公司推动和加剧了这种趋势，互联网使得人们越来越分心，把时间都花在网上肤浅的娱乐，不再集中注意力于自己的生活，把生活都交给程序，无法形成自主的意识和行为。

以上就是曼吉奥内的观点，我认为是很真实的观察。一方面，人工智能使得机器人越来越像人类，另一方面，人类的自主性在消退，越来越像机器人。现实与游戏、人类与机器人，越来越难以区分了。

## AI 编程挑战赛，即将报名截止

这几期的周刊一直在介绍，正在举行的全国 AI 编程挑战赛。

它的报名马上就要截止了。

[![](https://cdn.beekka.com/blogimg/asset/202412/bg2024121908.webp)](https://cdn.beekka.com/blogimg/asset/202412/bg2024122001.webp)

（1）应用赛道的作品提交，**到1月5日截止**。如果你有好的创意，能用 AI 做出可运行的作品，就可以报名参加。

（2）如果你善于刷题，可以报名参加算法赛道，用 AI 来解算法题。

我是鼓励大家参加。大赛有丰厚奖品，设了**20万的奖金池，获奖者还有机会拿到岗位 offer**。就算没得奖，也是一个很好的锻炼，能够动手编程、熟悉 AI。

大赛由豆包 MarsCode 和稀土掘金技术社区共同主办。详细介绍和报名方法，请看前两期的[周刊](https://www.ruanyifeng.com/blog/2024/12/weekly-issue-329.html)，或者[点击这里](http://zjsms.com/iUNhdBEk/)。

## 科技动态

1、[观鸟神器](https://www.newsweek.com/woman-creates-wearable-contraption-watch-birds-close-1998391)

一个美国女子发明了一种观鸟神器，在网上引起了轰动。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122315.webp)

她在墨镜上挂了一个托盘，上面洒了鸟食。小鸟就会停在上面，完全没有意识到，就停在她的鼻子前面。

这种观鸟神器，简单又体验独特，怎么以前没人想到。

2、[自豪版本规范](https://mastodon.online/@nikitonsky/113691789641950263)

一个开发者提出自豪版本规范（pride versioning），对软件版本进行编号。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122611.webp)

如果你对新功能感到非常自豪，就发一个大版本（递增第一个版本号），否则就发一个小版本（递增第二个版本号）。

如果你对某个地方感到尴尬和羞耻，就发一个补丁版本进行改正（递增第三个版本号）。

3、[能量收集电子贺卡](https://www.keacher.com/xmas24/)

一位国外的程序员，制作了一张可以收集能量的电子贺卡。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122614.webp)

这张贺卡就是信用卡大小，上面有电路，但是不带电池，通过收集周围环境的能量，LED 灯会闪烁。

最简单的方式，就是放在灯光下，它会收集光能。

你也可以用 USB 供电。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122615.webp)

它甚至可以放在路由器或微波炉旁边，吸收 WIFI 和微波的能量。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122616.webp)

4、[糖打印机](https://candyfab.org)

你想过用糖来 3D 打印吗？有人就真的做出了一台糖打印机。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122617.webp)

它用热风枪，将白砂糖吹塑成型，打印出各种形状。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122618.webp)

下面是它打印的一颗钉子。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122619.webp)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122620.webp)

它可以打印出很复杂的形状。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122621.webp)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122622.webp)

这些东西都可以食用，因此这种机器在食品行业应该很有用，在夜市可能也会很轰动。

## 文章

1、[我的几何人生](http://paper.people.com.cn/rmrb/pc/content/202412/21/content_30047414.html)（中文）

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122310.webp)

著名华人数学家丘成桐，回顾自己的成长道路。

2、[编程十年的感悟](https://ramsayleung.github.io/zh/post/2024/编程十年的感悟/)（中文）

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122313.webp)

“代码写多了才意识到，程序员的竞争力并不是写代码，也并不是哪门语言或者框架， 其核心竞争力是通过技术解决问题的能力”。（[@ramsayleung](https://github.com/ruanyf/weekly/issues/5765) 投稿）

3、[我给博客添加 dark mode](https://taxodium.ink/setup-blog-color-scheme.html)（中文）

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122314.webp)

作者介绍他为博客添加 dark mode 的处理方法和注意事项。（[@Spike-Leung](https://github.com/ruanyf/weekly/issues/5766) 投稿）

4、[七个最佳的生产力 Docker 镜像](https://www.xda-developers.com/best-docker-containers-productivity/)（英文）

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122504.webp)

本文介绍七个可以自己用 Docker 镜像架设的生产力服务。

5、[不可变 Linux 发行版](https://linuxblog.io/immutable-linux-distros-are-they-right-for-you-take-the-test/)（英文）

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122511.webp)

越来越多的开发者开始使用不可变的 Linux 发行版（immutable Linux distro），即系统文件在运行期间不可更改。这样会让系统更稳定，也更容易迁移和回滚。

6、[macOS 命令行内置的工具程序](https://weiyen.net/articles/useful-macos-cmd-line-utilities)（英文）

![](https://cdn.beekka.com/blogimg/asset/202411/bg2024110607.webp)

本文介绍 macOS 内置的一些命令行工具程序，比如 security、open、pbcopy、pbpaste 等。

## 工具

1、[YunoHost](https://yunohost.org)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024121905.webp)

一款虚拟机软件，内置了常见的云服务，可以一键启用，省去了安装云服务的麻烦，参见[介绍文章](https://www.xda-developers.com/yunohost-guide/)。

2、[MarkItDown](https://github.com/microsoft/markitdown)

微软官方推出的工具，将各种格式的文件（主要是 Office 文件）转成 Markdown 格式。标题是 GitHub 仓库链接，下面是[线上体验](https://markitdown.pro)。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122303.webp)

3、[爱幕](https://aimu.app)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122309.webp)

在线字幕编辑器，支持音频提取和字幕翻译，免费使用，自己部署需付费。（[@zhw2590582](https://github.com/ruanyf/weekly/issues/5759) 投稿）

4、[Beautify Screenshots](https://postspark.app)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122306.webp)

截图美化工具。（[@cxhello](https://github.com/ruanyf/weekly/issues/5752) 投稿）

5、[单词收藏助手](https://chromewebstore.google.com/detail/单词收藏助手-划词翻译-收藏单词/hlchmmedadpbeefeikleobfgjdieclho)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122304.webp)

Chrome 插件 + 微信小程序，在网页上收藏单词，建立自己的词库，然后通过小程序加强记忆。（[@yuuk](https://github.com/ruanyf/weekly/issues/5744) 投稿）

6、[Free Open Graph Image Generator](https://og.indiehub.best)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122507.webp)

根据模版制作“网页分享图”（open graph）的在线工具。（[@javayhu](https://github.com/ruanyf/weekly/issues/5771) 投稿）

7、[Kyanos](https://github.com/hengyoush/kyanos/blob/main/README_CN.md)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122508.webp)

一个命令行的网络流量采集和分析工具，具有较强的数据过滤和分析能力。（[@hengyoush](https://github.com/ruanyf/weekly/issues/5773) 投稿）

8、[在线 Excel 协同编辑器](https://github.com/nusr/excel)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122509.webp)

一个开源的类 Excel 电子表格网页应用，支持多人协同编辑。（[@nusr](https://github.com/ruanyf/weekly/issues/5775) 投稿）

9、[红枫云盘](https://github.com/honmaple/maple-file)（maple-file）

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122510.webp)

一个多协议云端文件存储的客户端，支持安卓和 macOS，基于 Flutter + Go 开发。（[@honmaple](https://github.com/ruanyf/weekly/issues/5781) 投稿）

10、[GitHub Cards](https://github.cards)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122305.webp)

将 GitHub 用户个人数据转换成卡片图。（[@iAmCorey](https://github.com/ruanyf/weekly/issues/5750) 投稿）

## AI 相关

1、[GCOP](https://github.com/Undertone0809/gcop)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122307.webp)

基于 AI 的 Git 提交消息生成和工作流程优化工具。（[@Undertone0809](https://github.com/ruanyf/weekly/issues/5754) 投稿）

2、[github-assistant](https://github-assistant.com)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122301.webp)

该网站可以对 GitHub 代码库提问，由 AI 来回答，比如“过去30天谁的提交次数最多”。

3、[Liubai](https://github.com/yenche123/liubai)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122311.webp)

开源的微信机器人，在微信里面同时调用三个 AI 模型，完成各种任务。（[@yenche123](https://github.com/ruanyf/weekly/issues/5761) 投稿）

4、[AI OCR](https://functions-ocr.edgeone.app)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122505.webp)

在线免费 AI OCR（图片文字识别）工具，所使用的前端代码和 AI 提示词见[这里](https://github.com/TencentEdgeOne/pages-templates/blob/main/examples/functions-ocr/functions/ocr/index.js)，灵感来自 [llama-ocr](https://github.com/Nutlope/llama-ocr)。（[@ringcrl](https://github.com/ruanyf/weekly/issues/5769) 投稿）

5、[Smart Alt Text Generator Generator](https://ai-alttext.com/)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122312.webp)

上传图片，生成 SEO 友好的 alt 描述，支持多种语言。（[@wang1309](https://github.com/ruanyf/weekly/issues/5762) 投稿）

6、[AI 调色盘生成器](https://colorify.rocks)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122302.webp)

该网站可以根据输入的关键词，生成对应的色彩组合。

## 资源

1、[WebSpy.Site](https://webspy.site)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122308.webp)

网站流量分析平台，根据域名查询网站流量情况。（[@wincatcher](https://github.com/ruanyf/weekly/issues/5757) 投稿）

2、[PNGFree.ai](https://pngfree.ai)

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122506.webp)

免费的百万级 PNG 图片库。（[@shawnlee000](https://github.com/ruanyf/weekly/issues/5770) 投稿）

## 图片

1、[无头鸡](https://en.wikipedia.org/wiki/Mike_the_Headless_Chicken)

1945年，一个美国科罗拉多州的农民杀鸡时，砍掉了一只五个半月大的鸡的大部分头部。

![](https://cdn.beekka.com/blogimg/asset/202412/bg2024122606.webp)

但是没有砍到颈静脉，并且一只耳朵和大部分脑干完好无损。因此，这只鸡虽然没有脑袋了，仍然可以保持平衡并笨拙地行走。

农民发现这只鸡没有死，就决定继续养它，用滴管给它喂食。

后来，这只鸡被巡回展出，门票是25美分，每月为主人带来4,500美元收入。

1947年3月，它死于巡回展出途中。

2、[Windows 3.1 时钟](https://rmcretro.store/products/windows-3-1-style-clock)

市场上出现了 Windows 3.1 时钟，钟面就是 Windows 3.1 的桌面，看上去很有怀旧感。

![](https://cdn.beekka.com/blogimg/asset/202403/bg2024032801.webp)

注意，上图的钟面不是液晶屏，而是印刷上去的。它是石英钟，使用一节五号电池。

![](https://cdn.beekka.com/blogimg/asset/202403/bg2024032802.webp)

## 文摘

1、[长期软件开发](https://berthub.eu/articles/posts/on-long-term-software-development/)

有些领域的软件会持续运行几十年，比如发电厂、起搏器、飞机、桥梁、重型机械的软件。它们可能几年都不会改动，然后推出一个新的大版本。

如果一个软件的开发周期长达几十年，需要长期维护，那么最好做到下面几点。

（1）尽量减少依赖。

软件的依赖项越多，长期越难以维护。依赖包括开发时依赖和运行时依赖，都是越少越好。

现在，很多软件在运行时会调用云服务，这也不利于长期维护。

（2）完备的测试用例。

测试对于重构、删除/添加功能，会提供极大的帮助。当你中断3年后，重新开始开发，测试也会让你快速了解系统。

（3）减少复杂性。

复杂性是软件开发的头号敌人，会让最好的程序员和团队都铩羽而归。

由于熵增定律和人类行为，除非你有意识地遏制，否则复杂性总是会增加。

因此，你需要养成严格的开发习惯：尽早和频繁地重构，删除不必要的或重复的代码，花时间简化。

（4）编写简单无趣的代码。

代码越简单越好，重点是代码的运行逻辑要显而易见。你永远不会后悔编写了简单的代码。

那些看上去很聪明、很高深的代码，会让后期的调试和理解变得复杂。特别注意那些高性能代码，只有当你正确理解它们时，它们才有效。

另外，那些眼下时髦、被热炒的明星技术，如果没有得到充分验证，也需要规避。

你最好只使用至少有10年历史的可靠技术。有一条规则是，某项技术的寿命与它们当前的年龄成正比，即存在越久的东西越可能继续存在。

（5）日志、遥测和文档

如果软件不是持续更新，开发者的注意力就会转到其他地方，不会立即跟进，所以需要有日志和遥测，能把运行过程记录下来。

文档则可以帮助我们理解几年前、甚至十几年前，编写原始代码时的想法。可能的话，记录所有事物，不仅仅是代码，还有理念、想法和为什么。

（6）团队

团队人员变化是很常见的。在许多地方，在一个团队呆三年，就已经很久了。虽然你可以用良好的文档和出色的测试，来抵消这种人员变化，但这很困难。

软件长寿的最简单办法之一，就是让开发成员长期稳定，保持工作十年。这意味着，你必须给你的程序员提供良好待遇，否则人们会离开。

在某些地方，软件是外包公司或咨询顾问写的，他们将代码丢到你的系统中后离开。对于长期运行的软件，这是非常糟糕的安排。

（7）开源

让你的代码暴露在外界的眼光，是保持代码可靠的好方法。一个有趣的事实是，只有质量良好的代码，人们才愿意对外分享，也就是说，如果不开源，人们会愿意在组织内部接受质量更差的代码。

开源代码有更高的标准、更多的测试，这是让代码不过时的绝佳机制。

## 言论

1、

银行的 API 特别难用，设计得也很奇怪。我在为银行工作时，发现了原因。

API 不是银行通信的方式，文件才是。银行执行的指令，不是通过我们习惯的 API 传送，而是通过文件接收。

-- [《为什么软件工程师与银行整合如此痛苦？》](https://blog.svapnil.com/p/where-bank-apis-fall-short)

2、

美国有很多问题，绝非理想的社会，但是第三世界国家的很多人，尤其是低收入人群，尽管对美国的真实情况一无所知，依然非常向往。

在他们心目中，美国有财富、空间、自由、人性化管理等等。这不是真实的美国，而是美国在他们心目中的投影，他们向往的其实是自己想象中的生活方式。

这是美国的一个很大的优势，尽管自身的诸多问题，依然能够对其他国家的人民产生吸引力。

-- [《美国比欧洲好吗？》](https://walkingtheworld.substack.com/p/us-is-better-than-europe)

3、

产品经理的职责就是三件事：（1）了解用户需求；（2）提出解决方案；（3）安排任务执行。

-- [《产品经理的 AI》](https://productme.org/posts/ai-for-product-managers)

4、

一个生物学家说过：“每个细菌的梦想都是变成两个。” 这是生活的基本真理：你经历的一切只是使自己更加重要的一种手段。

-- [Sean Carroll](https://nautil.us/the-sean-carrolls-explain-the-universe-1171296/)，进化生物学家

5、

我喜欢科学的一点是，无论你喜不喜欢，它都会让你相信。

-- [肖恩·卡罗尔](https://nautil.us/the-sean-carrolls-explain-the-universe-1171296/)，物理学家

## 往年回顾

[YouTube 有多少个视频？](https://www.ruanyifeng.com/blog/2023/12/weekly-issue-284.html)（2023 #284）

[AI 聊天有多强？](https://www.ruanyifeng.com/blog/2022/12/weekly-issue-234.html)（2022 #234）

[政府的存储需求有多大？](https://www.ruanyifeng.com/blog/2021/11/weekly-issue-184.html)（2021 #184）

[未来的游戏业比现在大100倍](https://www.ruanyifeng.com/blog/2020/11/weekly-issue-134.html)（2020 #134）

（完）

