# 科技爱好者周刊（第 370 期）：正确的代码高亮

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

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

## 封面图

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102301.webp)

北京门头沟区的千年古刹灵岳寺，从1979年开始关闭，直到这个月修缮完成，对外开放。修缮过程中，在墙上留了一个观察窗，展示原始的唐代和辽代的砖块。（[visuals_china@instagram](https://www.instagram.com/p/DQEjgx-EUNN/?img_index=6)）


## 正确的代码高亮

程序员一般都使用代码高亮，就是代码有不同的颜色（下图），方便阅读。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102304.webp)

问题就来了，**什么样的颜色组合，最适合阅读代码？**

大多数的人大概跟我一样，就挑自己觉得好看的。比如下图五颜六色的，我觉得很悦目。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101704.webp)

不久前，我读到[一篇文章](https://tonsky.me/blog/syntax-highlighting/)，作者说：错了，好看的颜色未必适合阅读代码。

正确的代码高亮，应该**让你一眼注意到最重要的代码信息**。太多的颜色，只会让人眼花缭乱，找不到重点。

他提出代码高亮的五条原则。

（1）**最多使用4种颜色**，再多的颜色会分散注意力。

（2）**变量、函数和类的定义最重要**，一般来说，它们是代码的最关键部分，所以定义时的变量名、函数名、类名应该高亮显示。

（3）**注释也很重要**，往往是关键信息，或者是作者希望别人阅读的信息，所以要高亮显示。很多配色方案将注释变灰，这是不对的。

（4）**常量和函数嵌套（即括号）也是重要信息**，需要高亮显示。

（5）**其他代码不必高亮**，包括变量读取、函数调用、关键字（class、function、if、else 等等），因为它们无所不在，你很少会去寻找它们。

这五条原则，你认同吗？

如果认同的话，你可以试试看作者设计的配色方案 [Alabaster](https://github.com/tonsky/sublime-scheme-alabaster#variations-1)。

下面就是这个方案的高亮效果。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101706.webp)

作为对比，再看看前面那个“好看”配色的高亮效果。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101705.webp)

你觉得，哪一种效果好，是否突出了代码的关键信息？

## 大模型 API 怎么买

如果同时使用多家公司的大模型，大家怎么解决，每家的 API 都买？

今天介绍一个我正在使用的“AI 网关”，可以**一个接口调用50多个主流模型**。它就是[七牛云 AI 大模型推理平台](https://s.qiniu.com/JrUbmm)”。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102313.webp)

常用的主流模型，它基本都提供了（比如国外的 OpenAI、Gemini、Claude，国内的 DeepSeek、千问、豆包、智谱、Kimi）。[模型广场](https://t.wangbase.com/AR4lw)（上图）列出了部分模型，完整列表需要[查询 API](https://developer.qiniu.com/aitokenapi/13000/claude-inference-api#3)。

七牛云是老牌的云服务商，成立15年了，还是上市公司，相当靠谱。它的稳定性和服务质量，可以放心，遇到问题不会找不到人。

用它的“统一接口”，有几个显著优点。（1）**使用方便**，开通和付费都是人民币，不需要海外信用卡；（2）**接入简单**，各种的 AI 客户端、IDE、命令行、MCP 都可以接入，支持 OpenAI/Claude 两种 API 格式，鉴权与计费都是统一的；（3）**低延迟 + 高吞吐**，使用 [AIPerf](https://www.aiperf.top/test) 测它调用谷歌模型，平均响应时间是700多毫秒，平均吞吐量是 184.6 Token/s；（4）**高阈值**，普通用户的上限是每分钟500个请求，每分钟令牌数500万，一般情况下足够了。

目前，它的“新用户推广活动”还没结束。<u>新用户有免费的 300万 Token，如果你再邀请一位好友来使用，你会再得到 500万 Token，好友则得到 1000万 Token</u>。

总结就是一句话，如果你使用[我的推广链接](https://s.qiniu.com/JrUbmm)去注册（下图），你会得到免费的 300万 + 1000万 Token。然后，你生成自己的推广链接，每邀请一位好友，就再多 500万 Token。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102202.webp)

## 科技动态

1、本周，一架美国的波音 737 Max 客机在11000米高空，遭到[不明物体的撞击](https://economictimes.indiatimes.com/news/international/us/united-airlines-737-max-carrying-140-passengers-to-lax-diverts-after-mysterious-object-cracks-cockpit-windshield-midair-pilot-injured/articleshow/124683266.cms)，挡风玻璃砸碎了，碎玻璃把机长的手臂划破了很多口子。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102008.webp)

这样的高度不可能是鸟，而且由于挡风玻璃有高温烧焦的痕迹，也不可能是冰雹，只可能是陨石或太空垃圾。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102009.webp)

如果确定是太空垃圾，它将是史上第一架被太空垃圾砸中的飞机。

（[更新] 最新消息是，这架飞机可能撞上了高空气象气球。这应该也是史上第一例飞机撞气球。）

2、一家中国轮胎公司在吉林长春，制造了[世界最大轮胎](https://finance.sina.cn/tech/2025-10-19/detail-infumsek4716883.d.html)。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102002.webp)

该轮胎直径超过4米，重量超过6吨，用于大型露天矿车。

3、世界哪个国家没有蚊子？

以前，唯一没有蚊子的国家是冰岛。但是本周，冰岛一个农民在自家农场发现了三只[活着的蚊子](https://www.npr.org/2025/10/22/nx-s1-5582748/iceland-mosquitoes-first-time)。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102305.webp)

世界每一个国家从此都有蚊子。

冰岛政府认为，这些蚊子是随飞机或轮船来到冰岛。但深层的原因是，全球变暖导致蚊子可以在高纬度地区生存和繁衍。

4、日本三重大学的研究发现，[日本的夏天](https://english.kyodonews.net/articles/-/62626)比42年前的1982年，长了三周。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101201.webp)

这就是气候变化，夏季越来越长，且温度越来越高，冬季长度基本不变，春季和秋季显著缩短，只有一两周。

5、X 公司（前身为推特）正式推出[用户名市场](https://www.engadget.com/social-media/xs-handle-marketplace-will-sell-some-rare-usernames-for-millions-of-dollars-224852740.html)，用户可以在那里购买回收的用户名。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102110.webp)

平台的政策是，用户一段时间（比如6个月）没有登录，它就可以回收用户名。至于怎么处理这些用户名，各平台的政策不一样。

X 是业内第一家公开出售用户名的平台，某些稀有用户名（比如@one、@fly、@compute）的价格从2500美元一直到100万美元。

这件事情再次提醒我们，你的用户名不属于你，属于平台。平台只是暂时借给你使用，随时可以回收用户名。

## 文章

1、[TypeScript 类似于 C#](https://typescript-is-like-csharp.chrlschn.dev/pages/intro-and-motivation.html)（英文）

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025100916.webp)

这篇文章提出 TypeScript 的语法很像 C#，因为它们的设计者就是同一个人。

所以，当 TypeScript 需要提高性能时，可以考虑将代码转为 C#，现在 C# 也是跨平台的。

2、[如何将网页动画压缩到每帧16.67毫秒](https://koolcodez.com/blog/inside-the-frame/)（英文）

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101002.webp)

显示器的刷新率一般是每秒60帧，为了让动画流畅，每帧的渲染时间最好不超过16.67毫秒。本文介绍一个 CSS 知识点，可以提高网页动画性能。

3、[从 HTTP 轮询到 MQTT：我们在 AWS IoT Core 的架构演进](https://mp.weixin.qq.com/s/3wyrIFf3pQh5EJ0NWbHOjA)（中文）

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101902.webp)

作者公司的物联网项目，最早采用 HTTP 轮询，后来改成了 MQTT 协议，采用 AWS IoT Core 云服务。（[@Konata9](https://github.com/ruanyf/weekly/issues/7943) 投稿）

4、[为什么 NetNewsWire 不是一个 Web 应用](https://inessential.com/2025/10/04/why-netnewswire-is-not-web-app.html)（英文）

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101407.webp)

NetNewsWire 是一个桌面的 RSS 阅读器，总是有人要求作者，将其改成 Web 应用。本文是作者解释为什么不开发 Web 版，理由很充分。

5、[Burrows-Wheeler 变换](https://sandbox.bio/concepts/bwt)（英文）

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101001.webp)

本文介绍一种奇妙的算法 Burrows-Wheeler Transform（简称 BWT），它会把字符串打乱，使得相同的字符倾向于组合在一起。

它的奇妙之处是，打乱后还可以用逆运算，将字符串还原，从而使得这种算法很适合用来压缩文本。

1、[屏幕截图的不可见注入](https://simonwillison.net/2025/Oct/21/unseeable-prompt-injections/)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102307.webp)

越来越多的公司推出了自己的 AI 浏览器，它通过截图阅读屏幕。现在已经出现在屏幕嵌入人眼不可见、但机器可见的文本，进行模型注入，让模型执行恶意操作（上图）。

1、[Unicode 隐形字符的病毒](https://www.koi.ai/blog/glassworm-first-self-propagating-worm-using-invisible-code-hits-openvsx-marketplace)（英文）

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102308.webp)

本文介绍一个令人叹为观止的 JS 病毒，它的恶意代码是用 Unicode 隐形字符写的，人眼看不见（上图的空白处），但是引擎会执行这些代码。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102309.webp)

## 工具

1、[OpenZL](https://github.com/facebook/openzl)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101008.webp)

Meta 公司新推出的一种压缩工具，适合压缩结构化数据（比如数据库），压缩比更高，速度更快，参见[介绍文章](https://linuxiac.com/meta-unveils-openzl-a-new-open-source-data-compression-framework/)。

2、[Handy](https://github.com/cjpais/Handy)

![](https://cdn.beekka.com/blogimg/asset/202509/bg2025092905.webp)

免费、开源的跨平台桌面应用，用来语音转文本。

3、[Feed me up, Scotty!](https://feed-me-up-scotty.vincenttunru.com/)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102111.webp)

一个自搭建的 Web 服务，用户输入网址，并指定 CSS 选择器，它就生成该网址的 RSS 源，[代码开源](https://gitlab.com/vincenttunru/feed-me-up-scotty)。

4、[Judo](https://judojj.com/releases/)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102306.webp)

一个跨平台的 Git/JJ 桌面图形客户端。

5、[htmldocs](https://github.com/htmldocs-js/htmldocs)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101701.webp)

一个 React 组件，用来在网页中创建、编辑、预览 PDF 文档。（[@Haopeng138](https://github.com/ruanyf/weekly/issues/7925) 投稿）

6、[Cent](http://github.com/glink25/Cent)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101703.webp)

开源的多人协作记账 Web 应用，数据保存在你的私人 GitHub 仓库。（[@glink25](https://github.com/ruanyf/weekly/issues/7929) 投稿）

7、[Shell360](https://github.com/nashaofu/shell360) 

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101901.webp)

开源的跨平台 SSH 客户端，支持 Windows、macOS、Linux、Android 和 iOS。（[@nashaofu](https://github.com/ruanyf/weekly/issues/7942) 投稿）

8、[015](https://github.com/keven1024/015)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102003.webp)

自托管的临时文件共享平台。（[@keven1024](https://github.com/ruanyf/weekly/issues/7952) 投稿）

9、[MHtool](https://github.com/sudo1123/MHtool)

一个命令行的 Python 数学工具包，一个脚本集成了数学计算、数据处理和图形绘制功能。（[@sudo1123](https://github.com/ruanyf/weekly/issues/7965) 投稿）

10、[TextGO](https://github.com/C5H12O5/TextGO)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102204.webp)

一个跨平台的桌面应用，可以指定统一的快捷键，各种应用都适用，并能根据选中的内容，执行不同的操作。（[@C5H12O5](https://github.com/ruanyf/weekly/issues/7970) 投稿）

## AI 相关

1、[AICrop](https://aicrop.app/#upload)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101702.webp)

使用 AI 模型裁剪图片的免费网页工具，自动生成适合不同社媒平台（如 Instagram、X/Twitter、TikTok）的图片。（[@indielucas](https://github.com/ruanyf/weekly/issues/7927) 投稿）

2、[免费 AI 图像生成器](https://freeaiimage.net/zh/)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102203.webp)

免费的文生图网站，不需要注册，据说是作者用自己的几台 4090 搭建的，用的是千问模型。（[@rustflare](https://github.com/ruanyf/weekly/issues/7968) 投稿）

3、[XCodeReviewer](https://github.com/lintsinghua/XCodeReviewer)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102302.webp)

大模型驱动的代码审计平台，为开发者提供代码质量分析和审查服务。（[@lintsinghua](https://github.com/ruanyf/weekly/issues/7975) 投稿）

4、[SLOCCount](https://tools.simonwillison.net/sloccount)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102303.webp)

著名开发者 Simon Willison 使用 AI 生成的代码行数统计网站，分析一个项目到底有多少行代码，评估开发时间，参见[介绍文章](https://simonwillison.net/2025/Oct/22/sloccount-in-webassembly/)。

5、[播客生成器](https://github.com/justlovemaki/Podcast-Generator)（Podcast Generator）

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102113.webp)

开源的文本转播客工具，需要 OpenAI 密钥。（[@justlovemaki](https://github.com/ruanyf/weekly/issues/7967) 投稿）

6、[MuseBot](https://github.com/yincongcyincong/MuseBot/blob/main/README_ZH.md)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102205.webp)

一个接入聊天软件的智能机器人，实现了 AI 对话与智能回复，支持多种大模型，可以接入 Telegram、飞书、钉钉、微信等平台。（[@yincongcyincong](https://github.com/ruanyf/weekly/issues/7972) 投稿）

## 资源

1、[EndlessWiki](https://www.endlesswiki.com)

![](https://cdn.beekka.com/blogimg/asset/202509/bg2025092704.webp)

世界第一本 AI 生成的百科全书，读者想查什么条目，AI 实时生成。

2、[ISBN Visualization](https://phiresky.github.io/isbn-visualization/)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102101.webp)

世界上所有书籍的国际书号（ISBN），可视化成一个图书馆的书架。查询某本书，可以显示该书所在的书架，[代码开源](https://github.com/phiresky/isbn-visualization/)。（[@kohunglee](https://github.com/ruanyf/weekly/issues/7957) 投稿）

3、[Clone Wars](https://github.com/GorvGoyl/Clone-Wars)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025101605.webp)

这个仓库收集了各种流行网站（Airbnb, Amazon, Instagram, Netflix, TikTok 等）的开源克隆，已经超过100多个网站了。

## 图片

1、[江门地下中微子观测站](https://www.cnrs.fr/en/press/juno-giant-detector-unravel-mysteries-neutrinos)

2025年8月，广东江门的地下中微子观测站（JUNO）正式运行。

它位于阳江和台山两座核电站的中间位置，可以接收核电站产生的中微子。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025100910.webp)

它的核心装置是一个探测器，外形为直径35.4米的透明球形容器，放置在地下700米深处，用来探测中微子。

探测器内部填充了2万吨高灵敏度的液体闪烁体，任何中微子与这种液体的相互作用都会产生闪光。

透明球体周围安装了约43,212个光探测器，持续监测着球体，时刻准备着捕捉任何闪光的出现。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025100911.webp)

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025100912.webp)

正是根据这些闪光，科学家才能够确定中微子的特性。

整个装置封装成一个球形水箱，水箱本身浸没在直径为44米超纯水池中，水池顶部有一个巨大的探测器，称为顶部跟踪器（下图），其作用是识别是否有混入的宇宙粒子，以避免与来自核电站的中微子混淆。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025100913.webp)

2、[乔卢特卡桥](https://zhuanlan.zhihu.com/p/346564115)

1996年到1998年，一家日本公司在中美洲国家洪都拉斯，建设了一座该国最长的桥“乔卢特卡桥”，长度为484米。

刚造好，就遇到了当年最大的台风。桥的本体没有受损，但是引桥都被摧毁了（下图）。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102311.webp)

还没等洪都拉斯政府修复引桥，更糟糕的事情发生了，乔卢特卡河由于台风引发的洪水而直接改道了。

![](https://cdn.beekka.com/blogimg/asset/202510/bg2025102312.webp)

上图就是乔卢特卡桥现在的状况，只剩下一段孤零零的桥面，耸立在河边。

## 文摘

1、[开源项目如何可持续发展？](https://byroot.github.io/opensource/ruby/2025/10/09/dear-rubyists.html)

一个老生常谈的问题，开源项目怎么才能可持续地健康发展下去？

很多人会说，需要有公司为开发者的时间付费。

这么说固然没错，但是**更好的支持方式不是出钱，而是出人**。最著名的例子就是 Linux 内核，绝大多数代码贡献都来自那些从内核获利的公司的员工。

如果那些公司不出人，只给项目团队捐款，让他们自己去写代码，内核不可能发展得这么快、这么好。

另一个很好的例子是 Ruby 语言。2019年时，Shopify 公司的一位工程师见到了 Ruby 语言的创始人 Matz。

工程师问 Matz 需要什么，Matz 回答说：“我缺人手。” 

工程师回到公司商量以后，Shopify 的 Ruby 团队开始参与 Ruby 语言的开发，结果产出了大量成果，使得 Ruby 语言核心提交者增加了十几人。

如果那天 Matz 回答“我缺钱”，然后 Shopify 捐款数十万或数百万美元，这对 Ruby 其实未必有利。

首先，谁敢担保 Ruby 的开发方向和决策，以后不会受到 Shopify 的影响？某个功能被接受到底是因为它本身的优点，还是因为它来自一个大赞助商？Ruby 又敢不敢拒绝来自 Shopify 的提案？赞助商的偏好可能会左右项目的开发。

其次，钱就是这样，一旦有了，你会产生依赖。如果将来大赞助商退出，你就不得不裁员，停止一些项目等等。所以，接受赞助的实体和个人往往会不自觉地考虑捐赠者的偏好，这样资金才能源源不断地涌入。

我并不是说开源项目不应该接受捐助，而是说大额的捐助难免会产生一些副作用。

下一次，如果你想支持一个开源项目，除了捐款，更好的方式是投入项目开发，为创始人分担一些工作。

## 言论

1、

我们要习惯 AI 培养出来的一代学生，他们的屏幕上满是文字，脑子里却空无一物。

-- [《OpenAI “学习模式”的风险》](https://resobscura.substack.com/p/openais-new-study-mode-and-the-risks)

2、

最明智的举措不是追逐潮流，而是种下一棵树，让时间来发挥作用。树木不会在明天带来回报，它们十年后才会产生回报。它们默默地生长，使周围的一切都变得更好：树荫、价值、美感、寿命。

-- [《设计的复利》](https://designobserver.com/the-compound-interest-of-design-what-not-to-build/)

3、

OpenAI 发布了自家的浏览器 Atlas，但它其实是反浏览器，尽可能避免用户浏览互联网。比如，你用它搜索“泰勒·斯威夫特”，它会告诉你那是谁，但不会返回任何指向泰勒·斯威夫特个人网站的链接。

-- [《ChatGPT 的 Atlas：反 Web 的浏览器》](https://www.anildash.com/2025/10/22/atlas-anti-web-browser/)

4、

工程师不仅需要具备技术技能，还要具备软技能，也就是人际交往的技能。

如果你不理解人类社会的复杂性，就无法理解公司或团队的工作方式，最终影响到自己的产出和扩大影响力。

-- [《被低估的软技能》](https://utopianengineeringsociety.substack.com/p/new-series-underrated-soft-skills)

## 往年回顾

[技术公司的口号比拼](https://www.ruanyifeng.com/blog/2024/11/weekly-issue-323.html)（#323）

[任正非的三篇最新谈话](https://www.ruanyifeng.com/blog/2023/10/weekly-issue-273.html)（#273）

[程序员需要担心裁员吗？](https://www.ruanyifeng.com/blog/2022/09/weekly-issue-223.html)（#223）

[网络收音机的设计](https://www.ruanyifeng.com/blog/2021/08/weekly-issue-173.html)（#173）

（完）

