这里记录每周值得分享的科技内容,周五发布。
本杂志开源,欢迎投稿。另有《谁在招人》服务,发布程序员招聘信息。合作请邮件联系(yifeng.ruan@gmail.com)。
去年底建成的南昌东站,以《滕王阁序》的"落霞与孤鹜齐飞,秋水共长天一色"为灵感,造型宛如展翅翱翔的羽翼,象征城市的腾飞。(via)
互联网行业最近的重大事件,莫过于 xz 软件的后门。
xz 是一种压缩软件,大量用于 Linux 系统,比如系统管理器 systemD 就用它压缩日志。它是 Linux 的基本组件之一,每台服务器几乎都有它。
今年3月底,有人发现它的新版本有点奇怪,让 SSH 的启动时间慢了500毫秒。进一步调查发现,里面竟然有一个后门。
这件事震惊了业界,因为新版本即将纳入主要的 Linux 发行版(比如 Debian 和 Fedora),只差几天而已。到了那时,服务器带有后门,后果不堪设想。
而且,整个事件经过精心策划,过程长达数年,每一步都毫无破绽,心思之缜密,耐心之好,能力之强,令人后怕。
这个事件开始于2021年4月,一个网名叫做 Jia Tan 的人,第一次向 xz 软件包提交了一个正常的补丁,被顺利合并。
2021年11月和2022年4月,他又提交了两个正常的补丁,也被合并。
然后,突然冒出了几个网友,在邮件列表上向管理员建议,xz 项目缺乏人手,响应迟缓,应该给予 Jia Tan 管理员权限。这个建议被采纳了。但是,人们现在发现,这几个网友都是陌生的邮件地址和名字,根本找不到其他的活动痕迹。
就这样,Jia Tan 成为了管理员,拥有独立发布新版本的权限,先后发了几个版本。虽然他的这些代码可能是无害的,但是扩展了功能,为后面要做的坏事打下了基础。
2024年2月,他添加了后门。代码做了混淆,而且后门不在源代码里面,要在构建阶段才会生成,很难发现。他发了这个版本以后,就开始发信,催促几个大型发行版,尽快收入这个版本。
后门曝光后,Jia Tan 就彻底消失了,没有任何身份信息,也没有其他痕迹,谁也不知道他到底是谁。人们开始搜集线索,试图找出这个人。
他的网名是汉语拼音,邮件全名是 Jia Cheong Tan,中间的 Cheong 似乎是粤语。他的 GitHub 提交时间采用东八时区。他的 IP 地址是新加坡。
一切都在指向,他是一个在新加坡的华人。真的是这样吗?
网名显然是假的,代码提交时间可以更改,至于 IP 地址,已经查明是 VPN 地址。
有没有一种可能,他伪装成华人,栽赃给中国?
有人分析了,他在 GitHub 的所有提交。虽然提交时间可以更改,但也不能改得太过分,毕竟要保持提交顺序和及时性,所以还是能看出一点东西。
他的提交,绝大部分采用东八时区的时间,但是有一些是东二时区和东三时区。
研究者相信,他很可能是一个东二时区的欧洲人,伪装成东八时区的中国人。他更改了计算机的时区,但是偶尔有几次忘记了更改。
东二时区的国家(上图的绿色部分),主要是东欧国家,以及一部分北欧国家(芬兰和瑞典)和中东国家(以色列和埃及)。
他来自东二时区,主要理由有三点。
(1)他在东二时区的提交日期是冬季,而东三时区的提交日期是夏季。这正好符合欧洲国家和以色列的夏令时切换。
(2)他明显在手动切换时区。举例来说,2022年10月6日,他先在东八时区的17:00:38进行了一次提交,然后又在东三时区的21:53:09再次提交。两次相差不到十个小时,很难相信这一点时间,他已经从中国来到欧洲写代码。
(3)他在中国的农历假日(中秋节、清明节、春节)都有提交,尤其是2023年春节假期(1月21日到1月27日),他有五天提交记录(分别是22日、23日、24日、26日、27日),这说明他不过春节。相反地,他在欧洲人很重视的假期(圣诞节和新年)却没有提交记录。
综上所述,这个 Jia Tan 很可能来自东二时区。不过,这个人(或者组织)非常小心,而且是技术高手,也许永远也发现不了真实身份。
这件事情提醒我们,开源社区的参与者形形色色,不全是好人,有些人非常阴险,不仅干坏事,还伪装身份,栽赃给他人。因此,我们对他人保持善意的同时,也不能丢失警惕。已经有人提议,重要的开源项目不能接受匿名身份的代码提交者。
1、日本人都姓佐藤
一个日本大学教授警告,如果不改变人口下降的趋势,到了2531年,所有日本人都会姓佐藤(sato)。
佐藤是日本目前最常见的姓氏,占总人口的1.5%。由于日本人口正在下降,罕见姓氏不断消失,人口向大姓集中。
而且,日本有法律,强制要求女性婚后改用夫家的姓氏,导致小姓更难生存。
(图片说明:某场比赛时,球员姓氏都是佐藤。)
根据调查,2022年至2023年间,佐藤姓氏增长率高达0.83%。也就是说,总人口在减少,但是佐藤氏在增加。
根据教授的计算,以这个增长率,到了2531年,日本将不存在第二个姓氏,所有人都姓佐藤。
为了警示日本国民,他还办了一个"佐藤问题网站",提出急需改变女性婚后改夫姓的问题。
2、观察最多鸟类的人
iGoTerra 是一个野生动物网上社区,用来记录和管理自己看到的野生动物。
它有一个榜单,列出看到最多鸟类的用户排名。最近,该榜单诞生了有史以来第一位看到超过10000种鸟的人。
创造记录的是一位70岁的美国退休外交官 Peter Kaestner。下图是2024年2月9日他在菲律宾拍到的捕蜘鸟,这是他看到的第10,000种鸟。
这个记录是不可思议的,因为已知的鸟类大约只有1.1万种,这意味着他几乎见过地球上所有鸟。
技术帮助鸟类观察者创造记录。机器学习现在可以从照片中自动认出,这是哪一种鸟,甚至从叫声也可以分辨鸟类,iGoTerra 社区则让爱好者分享在哪里可以看到什么鸟。
另外,由于对于鸟类的理解在发展,物种被不断细分,很多新的鸟类因此诞生。这也是能够突破10000大关的原因之一。
不过,iGoTerra 只要求上传照片或鸟叫的录音作为证据,并不会对真实性进行审核。
3、苹果公司的起源
本月,苹果公司庆祝成立48周年。这家公司是在1976年4月1日由乔布斯和史蒂夫·沃兹尼亚克在美国加州成立的。
当时,他们两个在乔布斯父母的车库里面,组装电脑的电路板对外销售。
车库非常简陋,下面是当时的一些照片,沃兹尼亚克一个人在干活。
两位创始人恐怕都没有料到,苹果后来会发展得这么大,真可谓"作始也简,将毕也巨"。
1、史上首位图灵和阿贝尔双料获奖者(中文)
计算机科学的最高奖"图灵奖"刚刚揭晓,普林斯顿高等研究院的数学教授艾维·维格森(Avi Wigderson)。他还拿过数学界的最高奖"阿贝尔奖",是唯一一位双料获奖者。
2、可以替代 React 的框架(英文)
这篇长文对 React 框架提出批评,认为它的很多做法已经过时。文章后半部分介绍了各种可以替代 React 的前端框架。
3、如何生成键盘输入统计看板(英文)
本文介绍使用一个 Python 脚本,统计用户在当前计算机按下了什么键。(@tisonkun 投稿)
4、Claude AI 能做,而 ChatGPT 不能做的四件事(英文)
Claude 是 Anthropic 公司推出的大规模语言模型,有免费版和收费的 Pro 版。本文比较了 Claude 强于 ChatGPT 的四个地方。
5、如何将 Caddy 作为反向代理(英文)
一篇初学者教程,介绍如何用 Caddy 架设反向代理服务器,它的设置比 nginx 简单,而且自动生成和更新 HTTPS 证书。
6、我后悔重构了代码(英文)
著名程序员 Dan Abramov 的一篇旧文。他曾经觉得同事的代码太冗余,就擅自重构了,让其变得干净。
但是,他后来认识到,那些冗余的代码有可取之处,抽象反而不利于日后的扩展。
1、ChatGPT
OpenAI 宣布,ChatGPT 取消注册要求,不登录就可以使用。但是,收费的功能(比如 ChatGPT 4 和 DALL-E)还是必须登录。
2、Opera
Opera 浏览器宣布,通过它就能安装和使用50多个 AI 模型(每个模型占用大约 2GB 空间),大大简化了本地计算机使用 AI 的难度。
3、Suno AI
Suno AI 是一个"文生音乐"的服务。网友的这个工具帮助你生成它的提示词,可以调整各种细节。(@Lcorinst 投稿)
另有一个 Suno AI 音乐下载器。(@AICodeHunt 投稿)
一个收集各种文生图 AI 模型的提示词的网站,可以作为参考工具。(@leoli202303 投稿)
1、DOOM 验证码
DOOM 游戏被用作网页验证码,只有消灭指定数目的敌人,才能通过验证。
一个开源的服务可用性检查工具,记录服务的健康状态,如果发现服务下线,立刻发送通知,可以替代 StatusPage.io。
一个开源工具,只需执行一个命令,就会自动分析数据库结构,生成管理后台,号称不用写代码。
开源的项目落地页模板,参见介绍文章。(@weijunext 投稿)
一个开源的浏览器插件,用来监听 GitHub 官方没有提供的一些事件(比如创建 label),事件发生时,浏览器就会发送通知。(@qiweiii 投稿)
6、HeyForm
一个开源的表单生成器,创建调查、问卷、投票等,可以不编写一行代码。(@iMuFeng 投稿)
一个开源的轻量级论坛,追求界面简洁和使用方便,后端使用 Java,前端使用 Next.js。(@dafengzhen 投稿)
VitePress 的一个插件,用于在 Markdown 文档插入可以执行的代码块,创建交互式文档。(@pearmini 投稿)
9、Mutative
一个操作不可变状态的 JS 库,追求高效。(@unadlib 投稿)。
10、Fusion
一个轻量、简洁的 RSS 聚合和阅读器,使用 Go + Svelte 开发。(@0x2E 投稿)
一个跨平台、零依赖的 Node.js 模块,用于截图和录屏。(@nashaofu 投稿)
12、流畅阅读
一款浏览器翻译插件,支持人工智能引擎。(@Bistutu 投稿)
13、keynavish
使用键盘控制鼠标运动的 Windows 软件。(@NomandChan 投稿)
14、K8Z
管理 Kubernetes 的开源工具,有手机客户端和桌面客户端。(@kofj 投稿)
Next.js 官方教程的中文翻译,构建一个全栈 Web 应用程序。(@qufei1993 投稿)
2、3DP.ing
一个 3D 打印模型的搜索引擎,特点是使用图片搜索。(@wangasa 投稿)
该网站整理了300多个免费推广渠道,包括网站、论坛、网址导航、产品目录等,帮助独立开发者推广产品。(@naxiaoduo 投稿)
这个仓库收集基于 Cloudflare 服务的各种开源软件。(@zhuima 投稿)
5、Beej's Guide to Network Concepts 中译
网友对《Beej's Guide to Network Concepts》一书的中文翻译。(@rogerzhu 投稿)
1、加州一号公路
加州一号公路从旧金山直到洛杉矶,就建在海岸山脉上,一路沿着太平洋,风景十分优美。
但是,正因为建在海边悬崖上,这条公路经常发生地质灾害。本月就发生了崩塌,一部分公路掉进了太平洋,不得不暂时封闭。
2、梅子坑
梅子坑(plum crater)是一个小型的月球陨石撞击坑,直径约40米,深约10米。
这个陨石坑之所以特别,是因为人类访问过这个地方。
1972年4月21日,阿波罗16号飞船的登月地点,就在梅子坑附近。
宇航员实地考察了这个陨石坑。
当年的脚印至今清晰可见(下图)。
1、环岛的作用
开车时,你可能已经遇到许多环岛。
你有没有想过,这些路口为什么要造环岛?没有环岛,行车面积不就更大了吗?
本质上,环岛上是一种交通控制措施,相比交通灯控制的传统交叉路口,它们具有多种优势,最重要的一个是安全性。
首先,环岛迫使司机放慢速度,为了调整车头方向,司机不得降速。
其次,环岛减少了潜在冲突点的数量。冲突点就是车辆与车辆、车辆与行人可能发生碰撞的位置,它的数量越多,就越容易发生碰撞。
根据一项研究,环岛只有8个潜在冲突点,而传统的四向交叉路口有32个。
最后,环岛的车道都是紧密相邻的同心圆,并且还有很多进口和出口,迫使车辆减速让行。
根据美国公路管理局估计,环岛取代传统的交叉路口时,可将严重交通事故减少80%到90%。
除了安全性,环岛还有一些其他优点,比如让交通更有秩序,不会出现车辆在交叉路口乱成一团的情形,也能让司机更轻松地掉头。
1、
马斯克的管理风格非常独特,他不需要非技术性的中层管理人员,员工表现不佳就会被裁,也不喜欢大型会议。
2、
有一种开发模式,叫做"头条新闻驱动法",将项目分解成一个个头条新闻。
选择一个日期,可以发布第一个头条新闻,然后拼命工作在该日期发布,接着转到下一个头条新闻,重复上面的过程。
-- 《头条新闻驱动法》
3、
我们有一栋房子的 WiFi,只在下雨时可用。后来,我发现了原因。
它的 WiFi 是通过桥接器连接另一栋房子的 WiFi,窗外的树长高了,挡住了对面房子的信号。下雨时,雨水压低了树叶,信号就又通了。
4、
每年冬天,室内供暖消耗大量能源。如果我们能够发明更舒适、更保暖的保暖内衣,就可以减少能源消耗,同时不牺牲轻便感。保暖内衣允许我们大幅调低供暖温度,并且成本几乎为零。
5、
节省几次击键的工具被高估了,保持注意力专注的工具被低估了。
-- 《小型自动化》
最成功的软件企业家(2023 #249)
俄罗斯的 HTTPS 证书问题(2022 #199)
新能源汽车,谁会是赢家?(2021 #149)
疫情导致的研究生扩招(2020 #99)
(完)