本雜誌開源,歡迎投稿。另有《誰在招人》服務,釋出程式設計師招聘資訊。合作請郵件聯絡([email protected])。
封面圖
去年底建成的南昌東站,以《滕王閣序》的"落霞與孤鶩齊飛,秋水共長天一色"為靈感,造型宛如展翅翱翔的羽翼,象徵城市的騰飛。(via)
xz 後門的作者 Jia Tan 是誰?
網際網路行業最近的重大事件,莫過於 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 的一篇舊文。他曾經覺得同事的程式碼太冗餘,就擅自重構了,讓其變得乾淨。
但是,他後來認識到,那些冗餘的程式碼有可取之處,抽象反而不利於日後的擴充套件。
AI 相關
1、ChatGPT
OpenAI 宣佈,ChatGPT 取消註冊要求,不登入就可以使用。但是,收費的功能(比如 ChatGPT 4 和 DALL-E)還是必須登入。
2、Opera
Opera 瀏覽器宣佈,透過它就能安裝和使用50多個 AI 模型(每個模型佔用大約 2GB 空間),大大簡化了本地計算機使用 AI 的難度。
3、Suno AI
Suno AI 是一個"文生音樂"的服務。網友的這個工具幫助你生成它的提示詞,可以調整各種細節。(@Lcorinst 投稿)
另有一個 Suno AI 音樂下載器。(@AICodeHunt 投稿)
4、Free Prompt Market
一個收集各種文生圖 AI 模型的提示詞的網站,可以作為參考工具。(@leoli202303 投稿)
工具
1、DOOM 驗證碼
DOOM 遊戲被用作網頁驗證碼,只有消滅指定數目的敵人,才能透過驗證。
2、OneUptime
一個開源的服務可用性檢查工具,記錄服務的健康狀態,如果發現服務下線,立刻傳送通知,可以替代 StatusPage.io。
3、DashPress
一個開源工具,只需執行一個命令,就會自動分析資料庫結構,生成管理後臺,號稱不用寫程式碼。
4、Landing page boilerplate
開源的專案落地頁模板,參見介紹文章。(@weijunext 投稿)
5、GitHub Custom Notifier
一個開源的瀏覽器外掛,用來監聽 GitHub 官方沒有提供的一些事件(比如建立 label),事件發生時,瀏覽器就會傳送通知。(@qiweiii 投稿)
6、HeyForm
一個開源的表單生成器,建立調查、問卷、投票等,可以不編寫一行程式碼。(@iMuFeng 投稿)
7、Youdeyiwu
一個開源的輕量級論壇,追求介面簡潔和使用方便,後端使用 Java,前端使用 Next.js。(@dafengzhen 投稿)
8、Markdown Genji
VitePress 的一個外掛,用於在 Markdown 文件插入可以執行的程式碼塊,建立互動式文件。(@pearmini 投稿)
9、Mutative
一個操作不可變狀態的 JS 庫,追求高效。(@unadlib 投稿)。
10、Fusion
一個輕量、簡潔的 RSS 聚合和閱讀器,使用 Go + Svelte 開發。(@0x2E 投稿)
11、node-screenshots
一個跨平臺、零依賴的 Node.js 模組,用於截圖和錄屏。(@nashaofu 投稿)
12、流暢閱讀
一款瀏覽器翻譯外掛,支援人工智慧引擎。(@Bistutu 投稿)
13、keynavish
使用鍵盤控制滑鼠運動的 Windows 軟體。(@NomandChan 投稿)
14、K8Z
管理 Kubernetes 的開源工具,有手機客戶端和桌面客戶端。(@kofj 投稿)
資源
1、Learn Next.js 中文教程
Next.js 官方教程的中文翻譯,構建一個全棧 Web 應用程式。(@qufei1993 投稿)
2、3DP.ing
一個 3D 列印模型的搜尋引擎,特點是使用圖片搜尋。(@wangasa 投稿)
3、1000UserGuide
該網站整理了300多個免費推廣渠道,包括網站、論壇、網址導航、產品目錄等,幫助獨立開發者推廣產品。(@naxiaoduo 投稿)
4、Awesome Cloudflare
這個倉庫收集基於 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、
馬斯克的管理風格非常獨特,他不需要非技術性的中層管理人員,員工表現不佳就會被裁,也不喜歡大型會議。
-- 前特斯拉 AI 總監安德烈·卡帕西
2、
有一種開發模式,叫做"頭條新聞驅動法",將專案分解成一個個頭條新聞。
選擇一個日期,可以釋出第一個頭條新聞,然後拼命工作在該日期釋出,接著轉到下一個頭條新聞,重複上面的過程。
-- 《頭條新聞驅動法》
3、
我們有一棟房子的 WiFi,只在下雨時可用。後來,我發現了原因。
它的 WiFi 是透過橋接器連線另一棟房子的 WiFi,窗外的樹長高了,擋住了對面房子的訊號。下雨時,雨水壓低了樹葉,訊號就又通了。
-- 《WiFi 在下雨時可用》
4、
每年冬天,室內供暖消耗大量能源。如果我們能夠發明更舒適、更保暖的保暖內衣,就可以減少能源消耗,同時不犧牲輕便感。保暖內衣允許我們大幅調低供暖溫度,並且成本幾乎為零。
-- 《先保暖身體,再保暖房間》
5、
節省幾次擊鍵的工具被高估了,保持注意力專注的工具被低估了。
-- 《小型自動化》
往年回顧
最成功的軟體企業家(2023 #249)
俄羅斯的 HTTPS 證書問題(2022 #199)
新能源汽車,誰會是贏家?(2021 #149)
疫情導致的研究生擴招(2020 #99)
(完)