這裡記錄每週值得分享的科技內容,週五釋出。
本雜誌開源,歡迎投稿。週刊另有《誰在招人》服務,釋出程式設計師招聘資訊。合作推廣請郵件聯絡([email protected])。
封面圖
上圖是2022年世界旅行類攝影師比賽的獲獎者。Najin 是非洲中部僅存的兩頭白犀牛之一,已經33歲了,為了保護它不被偷獵者殺害,肯亞政府專門為它安排了守衛。他們形影不離,中午一起在非洲大草原上休息。(via)
本週話題:一次尷尬的伺服器被黑
本週一凌晨(2月13日),我的個人網站伺服器被黑了。
由於入侵者沒有觸發報警機制,我也沒察覺。一覺醒過來,看到好多網友的郵件,讓我快去看看網站,訪問任何一個網頁,都會跳轉到 xxx 的外部網址,令人極度尷尬。
我查了一下伺服器,發現果然如此。事態很嚴重,對方拿到了網頁目錄的寫入許可權,將我的所有 HTML 網頁都刪除了原始內容,寫入了他的跳轉程式碼window.onload="..."
。
但是,資料庫沒有遭到破壞,加上沒有 SSH 的異常登入報警,因此我判斷,對方沒有拿到伺服器的登入許可權,只是利用了 Web 服務的漏洞。
我的第一感覺不是恐慌,也不是憤怒,而是無奈。擔心已久的事情,終於發生了。
很多朋友知道,我的個人網站至少有10年沒有修改過樣式了。不是不想改,而是沒法改,或者說改起來很麻煩。
原因是我的後臺軟體採用了早期著名部落格軟體 MovableType,它的歷史比 WordPress 還要悠久。後者已經是老古董了,你就知道它有多老了。當然,這說明我也老了,當年選擇它的時候,我還是學生。
MovableType 早就停止發展了,轉讓給了一個日本公司,所有使用者都要繳費,才能收到程式碼補丁。我沒繳費,所以我的個人網站的後臺早就老化了。
軟體老化本身不是大問題,只要還能正常執行,並且你也不需要新功能,那麼就能平安無事地過下去。真正的問題是它的依賴都過時了。
它依賴的底層系統和元件,都嚴重過時。我試過把它遷移到新系統,結果各種報錯,不得不一直執行在很老的系統上。
我一直知道老系統不安全,但是又不敢升級。擔心的事情最終還是爆發了。
前兩年,我已經被攻擊過一次,當時心存僥倖,只做了一些伺服器加固,還是沒升級,直到現在。
這次被攻擊,我就想如法炮製。網站有定期快照,被黑後,我回滾到最近一次快照,又改了一些伺服器設定,星期一中午就把網站恢復上線了,心想最好這次也能矇混過關。
但是,對方大概一直線上盯著我,上線一小時之內,又被一模一樣地黑了。
這時,我知道大事不好,只能將網站再次下線。好在上次被攻擊時,我做過一個臨時公告頁面,這次還能用,把域名指向它即可。
此後整整一天,我一籌莫展,做好了最壞打算,個人網站可能要長時間下線。在此期間,只能透過臨時頁面釋出內容。
到了星期二下午,我越想越憋氣,最後還是不死心,一咬牙決定升級伺服器,死馬當作活馬醫。
我一口氣把底層系統和依賴元件,都升級到了最近的版本,整整裝了一個多小時。這次很神奇,網站沒有奇怪的報錯,居然能正常執行。驚喜之餘,我就把網站恢復上線了,到目前為止都是正常的。
說實話,我不肯定漏洞已經被修復了。如果接下來,伺服器再次被黑,我就沒轍了,只能長時間下線網站了,然後加快原本就打算今年要做的事情:自己重寫部落格架構,改成徹底的靜態網站。
這次的教訓有很多,如果大家也想做一個獨立部落格,我有兩點建議。
(1)不要自己管理伺服器。 伺服器管理是一個非常繁瑣的專門工種,如果不是專業的運維工程師,很難做好。退一步說,即使你擁有這方面的專業知識,也不值得把大量時間和精力投入在自己的部落格伺服器上。網路世界是一個黑暗森林,到處都有人向你打冷槍,防不勝防,解決方法就下一條。
(2)使用專業的雲服務商。 現在大部分雲伺服器商,都有靜態網站託管服務,把靜態網頁託管在它們那裡,省時省心。如果你需要後端動態生成內容,那就使用雲函式(叫做 FaaS),透過服務商提供的邊緣計算、而不是你的主機自帶的 CPU 算力。
科技動態
1、老飛機的模擬飛行
微軟公司有一款著名的遊戲《微軟模擬飛行》,玩家可以模擬操縱各種飛機,在世界各地實景飛行,效果非常逼真。
遊戲製作團隊最近盯上了博物館裡面的老飛機,其中就有著名的休斯 H-4 大力神巨型水上運輸機。
這是有史以來最大的飛機,跟足球場差不多大小。它只在1947年飛行過一次,短暫脫離水面數十秒,然後就放在倉庫裡,直到報廢后移入博物館。
微軟公司把這架飛機搬入了遊戲,玩家現在可以模擬駕駛它,體驗一下這架傳奇飛機的駕駛感受。下圖就是遊戲畫面。
製作團隊下一步準備把更多的老飛機搬入遊戲,"復活"那些再也不可能上天的飛機。目前,已經完成了大約300架老飛機的掃描。
迪斯尼公司釋出了一個影視專用的年齡調整演算法,可以讓演員變得更年輕或更年老。
這種演算法可以讓老年演員扮演年輕人,反之亦然。
現在的觀眾必須明白,你看到的一切都可能是假的。相貌可以美顏,年齡可以加減,背景可以綠幕,沒有什麼是做不到的。
3、兒童遊樂場
兒童遊樂場通常都是一些傳統設施,比如滑梯、鞦韆、雙槓、蹺蹺板等。
一位紐西蘭建築師認為,這些設施都沒有樂趣,模仿大自然的環境才是更好的選擇。
他就設計了一個類似野外環境的兒童遊樂場。
遊樂設施都搭建在巨石之上,但其實沒有看起來那麼危險,巨石都由鋼棒進行固定,地面採用有彈性的橡膠地板,不會摔傷。
開張一個月以來,孩子們很愛玩,沒有人受傷。
4、智慧繃帶
傳統繃帶無法知道傷口癒合情況,有時解開繃帶,才發現藥物無效,傷口還在潰爛。
為了解決這個問題,一個國際研究團隊開發了智慧繃帶。
這種智慧繃帶採用超薄、可彎曲的電路板,會自動偵測傷口癒合程度,根據細菌的繁殖情況釋放抗生素或其他藥物。
它帶有無線模組傳送資料,為了輕薄,它不帶有電池,透過天線接收能量。
文章
1、Next、Nuxt、Nest的區別(英文)
Next.js、Nuxt、NestJS 是三個流行的 JS 框架,本文解釋它們的區別。
2、為什麼業界轉向記憶體安全語言(英文)
本文介紹大公司使用記憶體安全語言(Java、Rust 和 Kotlin)替代 C/C++ 的情況。
3、如何使用 360 相機生成航拍影像?(英文)
作者介紹如何使用 OpenDroneMap 這個軟體,為 360 相機拍攝的影片建模,合成為航拍視角的空間影像模型。
4、打造我的家庭辦公環境(英文)
作者詳細介紹,自己怎麼在家裡佈置一個舒適的電腦工作環境。
5、我如何以 SerenityOS 謀生(英文)
作者是開源軟體 SerenityOS 的作者,2021年開始,全職投入開源開發。他介紹自己怎麼謀生。
6、我的個人 IT 基礎設施(英文)
Mathematica 軟體的創始人 Stephen Wolfram 介紹自己家裡的 IT 基礎設定,他常年在家辦公。
他還自制了一個"步行桌"(上圖),可以在散步的時候,使用膝上型電腦。
7、Playwright 如何繞過登入驗證碼(英文)
Playwright 是一個無頭瀏覽器框架,可以編寫指令碼,對網站 UI 進行自動化測試。有些網站的登入,需要身份驗證器的一次性驗證碼,怎麼繞過去呢?
8、使用 Ruby 語言理解網路堆疊(英文)
本文使用 Ruby 語言示例,解釋網路基本概念。第一部分解釋 UDP 協議,寫得很好。
工具
1、Convex
一個類似 Firebase 的狀態管理服務,前端狀態可以存在它的伺服器上,然後你的所有客戶端都可以得到狀態的實時更新。
2、兔年定製頭像
上傳照片,合成一張兔年頭像,多種樣式可選,程式碼開源。(@xiaoli1999 投稿)
一款 ElasticSearch 的桌面客戶端,用來監控 ES 狀態和操作。( @lin2415016 投稿)
4、RATH
開源的資料分析和資料視覺化工具,只需要匯入資料,它自動進行資料分析,找出規律,生成視覺化檢視。(@AntoineYANG 投稿)
一個 Web 應用,演示了基於 WebRTC 的各種媒體流傳輸功能,程式碼開源。(@iamtsm 投稿)
6、EasyNode
簡易的個人 Linux 伺服器管理皮膚(基於Node.js),前後端都開源。(@chaos-zhu 投稿)
VS Code 外掛,使用 GPT 模型自動生成 Git 提交說明。(@pwwang 投稿)
一個最簡化的任務管理 Web App,非常簡潔精美。
一個開源的 MacOS 應用,可以精細調節蘋果電腦的各種顯示引數。
10、berty
一個群聊應用,最大特點就是不需要網際網路,透過低功耗藍芽通訊,很適合小範圍內的現場廣播。
資源
1、Mastering Bitcoin(第二版)
免費的英文電子書,介紹加密貨幣的原理。
基於 Web 的衛星軌道視覺化專案,可以檢視不同類別的衛星,程式碼開源。(@jiangteng2019 投稿)
這個網站提供免費的圖示,目前有1900多個,所有圖示都是統一風格,簡單美觀。
一份圖文並茂的組合語言英文介紹,針對零基礎的初學者,半小時可以讀完,並附有程式碼示例,以便進一步學習。
5、快速塗鴉
一個谷歌推出的小遊戲。系統告訴你一個詞語(比如腳踏車、眼鏡、輪船......),讓你在網頁上把它畫出來。人工智慧會猜測你畫的是什麼,只要猜對了,就說明你畫得很像。
圖片
1、奧爾梅克頭像
1930年代,瓜地馬拉發現了埋在地下的巨大頭像,高度都在2米到3米。
考古學家認為,它們是古代奧爾梅克人制作的,時間大約距今3000年到5000年之前。
經過幾十年的發掘,目前一共發現17個頭像,現在都陳列在博物館。
文摘
二十五年前的1996年12月20日,我在 NeXT 公司擔任系統工程師。該公司是賈伯斯在1985年創立的,我是該公司在加拿大僅有的三名員工之一。
當時我們都沒有手機,公司給我們的大多數資訊都透過一個叫做 Audix 的語音郵件系統傳送。我們接受訊息時,就撥打 1-800-345-5588 這個號碼,收聽語音郵箱裡面的公司留言。
那天,我們突然收到了一條緊急訊息,所有員工都必須在下午2點撥打這個號碼,要公佈一個重大事件。當時我正在街上,不得不到處尋找一個可靠的固定電話,最後找到了一個博物館的付費電話。
到了下午2點,我們被告知 NeXT 已被蘋果公司以4億美元的價格收購。(事後回想,正確的說法應該是蘋果付給 NeXT 4億美元,讓後者去收購自己。幾年後,大約70%的蘋果副總裁都來自 NeXT。)
我震驚了,沒想到事情會這樣。
當時,NeXT 公司其實很困難。創始人賈伯斯似乎把所有的時間,都花在他的另一家公司 Pixar。雖然 NeXT 還有一些盈利,但主要來自銷售 WebObjects(一個 Java 應用伺服器)。賈伯斯對外宣稱的革命性新工作站和作業系統都實現不了,現在他只能靠銷售價格為5萬美元企業伺服器軟體維持公司,這一定讓他感到很沮喪。
蘋果公司似乎也陷入了死亡漩渦,並且已經非常接近資金枯竭。
蘋果最感興趣的是 NeXT 的 NeXTSTEP 作業系統,該作業系統最初與 NeXT 工作站一起提供,但已被移植到英特爾 CPU。說實話,我們在 NeXT 的人其實不怎麼用這個系統。
NeXT 的每個人都不清楚這次合併是否會奏效,好在結果很不錯。合併發生在蘋果的歷史低點,一旦賈伯斯重新擔任蘋果 CEO,一場難以置信的技術和業務轉變就開始發生了。
NeXT 的軟體和硬體成為蘋果一切產品的基礎。NeXTSTEP 作業系統替代了 Mac OS,成為了 Mac OS X 的基礎;NeXT 的 Project Builder 和 Interface Builder 變成了 Xcode;NeXT 對 Objective-C 語言的熱愛最終創造了 Swift。
合併時,NeXT 大約有 400 名員工,而蘋果只有幾千人。今天,蘋果有16萬員工,我很好奇多少 NeXT 工作人員還留在蘋果,我知道十幾個,可能還有更多,會到100人嗎?
言論
1、
我是 React 使用者,最讓我煩惱的是,React 團隊對開發者面對的實際問題,似乎一無所知,只關注一些不那麼重要的事情。
他們設計了很多新的做法(比如事件處理、資料獲取等等),確實可以更快地載入網頁。但是讓開發者關注這些東西,對於高階用途來說,這是完全錯誤的。
-- 《拯救 React》
2、
領導者的作用不是行使權力,而是分配權力。
有效的領導者透過設定方向、確定人員(找到具有正確技能和背景的人)、授權他人、確保決策執行,來節省自己的時間,並擴大自己的影響。
-- 《我的創業箴言》
3、
在程式設計師心中,他們認為自己是建築師。當他們來到一個新地方,他們想做的第一件事就是推平這個地方,並建造一些宏偉的東西。
程式設計師對漸進式翻新不感興趣:修修補補、改進、在花壇種上綠植......他們不想做這些事,他們總是想扔掉舊程式碼並重新開始,原因並非是認為舊程式碼一團糟,而是程式設計的一個基本法則:閱讀程式碼比編寫程式碼更難。
-- Joel Spolsky
4、
開發 Chrome 瀏覽器時,有一次我們討論,應該允許網頁重定向多少次。有人提出設為10次,超過這個數字,Chrome 就會放棄載入網頁。然後,另一個人說不行,必須設為30次,否則《紐約時報》網站就會停止工作。於是,Chrome 的重定向上限就是30次。
5、
曾經有一段時間,成為一名全棧開發人員是可能的,可以做到對中等複雜系統的每一層都有很好的熟悉度。
但是,今天的系統涉及太多的元件,想要掌握每個堆疊的每個元件,是不切實際的。正如一位開發者所說:"程式設計師現在不得不在數百個 API 之間充當某種巨大的手動管理層。"
-- 《更快的馬》
歷史上的本週
你做過不在乎結果的專案嗎?(2022 No.195)
大家不出門,經濟怎麼辦?(2021 No.145)
漫遊類的遊戲,將會越來越多(2020 No.93)
一篇好玩的論文(2019 No.43)
鳴謝
週刊得到國內新一代知識管理與協作平臺 FlowUs 的幫助,深表感謝。
FlowUS = 文件 + 表格 + 網盤。你可以用它寫文件、做主頁、管理資料、儲存檔案等等。
每一期週刊同時釋出在 FlowUs 專欄,歡迎大家也去開通自己的專欄和主頁。
(完)