Refactoring English:第二個月
原文由 Michael Lynch 于 發布,訂閱此部落格
一句話總結
在 AI 革命的當下,我還該寫書嗎?
重點整理
- 我開始懷疑自己是否該置身於 AI 革命之外。
- 在投入更多時間之前,我得先向自己證明真的有顧客願意為這本書付費。
- 我大概是全世界最後一個才發現用 RSS 讀部落格很棒的人。
目標評分
每個月月初,我都會宣告當月想完成的事。以下是我這個月的達成情況:
發表 2024 年的年度回顧部落格文章
我對這篇的成果很滿意。因為這一年由好幾個我已經寫過的重大事件拼湊而成,一開始很難決定該寫些什麼,但最終的結果算是對這一年的不錯總結。
它曾短暫登上 Hacker News 第一名,但突然被降到第 63 名,我也不太清楚原因。
完成書中的另一個章節
- 成果:發表了〈Passive Voice Considered Harmful〉以及一個搭配的互動練習。
- 評分:A
實際完成的比預期多一點,因為原本沒打算加上測驗。這個測驗稱不上完美,但把文字內容結合一點互動性,感覺挺有趣的。
根據讀者回饋修改教學章節
- 成果:新增了一節〈Use unambiguous example values〉。
- 評分:A
我根據讀者的建議做了一些細部的文字修正,但最大的改動是新增了一整節。好幾位讀者希望能有關於如何在範例中使用實用假資料的指引,我也覺得這確實應該納入文章中。
在 AI 革命期間寫書是不是很蠢?
對我來說,很明顯 AI 正在軟體開發領域掀起一場革命。
現在的 AI 模型已經具備稱職的初階工程師水準。以它們進步的速度,兩年內在大多數程式設計任務上,AI 將會超越最頂尖的人類。
我預期整個軟體產業將會圍繞著 AI 進行重組。在我有生之年,最接近的類比就是從桌機軟體轉向網際網路的那次轉變。
我現在沒有工作、也不用經營公司,所以有完全的自由去做任何想做的事,來搭上這波 AI 發展的順風車。
而我卻在寫一本跟 AI 完全無關的書……
我不想只是盲目追逐最新、最炫的東西,但同時也覺得,缺席這場 AI 革命,就像在 90 年代末看到網際網路興起時,卻說:「我想把軟體燒成光碟,讓顧客透過郵購來訂購。」
當初選擇專心寫書的理由至今依然成立,只是機會成本比我半年前規劃時預期的還要大得多。
這本書真的有市場嗎?
另一個問題是,寫這本書是一項長期的投入,但我還沒把握真的有人想讀。
我釋出的第一個章節獲得不錯的迴響,但那是比較有趣、受眾廣泛的章節。我擔心像〈Passive voice considered harmful〉這類章節,比較像是「吃青菜」式的功課。大家或許知道它有益,但讀起來並不有趣。而且像 Hacker News 或 reddit 這種我常出沒的地方,也不太可能推薦一篇談被動語態的文章。
問題是,我書中的大多數章節都是這種「吃青菜」型的內容。

我可以重新調整結構,把「把文章大聲唸出來」這類技巧放進部落格寫作的章節裡,但這樣不太合理,因為這個技巧適用於各種寫作,不只限於部落格。
但或許是我的切入角度錯了。瀏覽網頁的人大概不會想點開一篇談被動語態的文章,但如果他們已經決定要讀一本關於有效寫作的書,大概就會願意讀那個章節。
我原本以為在網路上免費釋出的試讀內容,必須和書中的章節一字不差,但其實不需要這樣。我可以隨意為網路調整內容,所以就算在部落格寫作的試讀章節裡談「大聲朗讀」,也沒關係。在正式的書中,我可以把這個技巧安排在別處,而不是放在部落格章節裡。
不過,在繼續投入好幾個月的時間之前,我還是得先驗證這本書是否真的有付費讀者。所以我的計畫是,先專注完成另一個有趣、容易入手的章節,像是〈Write blog posts that developers read〉,然後以頭三個章節為基礎,在 Kickstarter 上開放預購。我得設定一個我認為合理的最低預購門檻,來決定是否值得繼續寫下去。
後知後覺:RSS 真的很棒
RSS 已經存在 25 年了,但我從來沒有養成用 RSS 讀文章的習慣。
我在 2011 年試過 Google Reader,但當時訂閱的內容不夠多、不夠有趣,所以後來就沒再打開,漸漸也忘了它。
過去幾年,有幾件事讓我對 RSS 重新產生興趣:
- 我以前在 Twitter 上追蹤的科技圈人士,現在都分散到不同的平台了。
- 我也越來越意識到,社群媒體更傾向於放大譁眾取寵的貼文,而不是有趣的技術內容。
- 我把作業系統換成了 NixOS,讓我可以輕鬆地自行架設免費、開源的 RSS 閱讀器。
- 我發現自己不喜歡用 Email 訂閱部落格,因為那會塞爆收件匣,還會讓我在不想閱讀的時候,產生非讀不可的壓力。
- 隨著 AI 產生的粗製濫造內容充斥網路,我更想追蹤自己真正喜歡的特定作者。
於是我安裝了fusion 這款 RSS 閱讀器,結果發現它成了我最喜歡的閱讀新文章方式之一。現在只要在社群媒體上看到喜歡的部落格文章,我就會去瀏覽那個作者的其他文章;如果發現他寫的東西很對我的胃口,就直接加入我的訂閱清單。

我最近開始使用 RSS 閱讀器 fusion 來追蹤感興趣的部落格
業餘專案
wordword:在部落格文章中找出詞彙幻覺
我最近讀到 Matt Might 的一篇部落格文章,他在裡面解釋了「詞彙幻覺」(lexical illusions)的概念。指的是你在閱讀時,沒有察覺到文字中重複的單字,例如:
Many readers are not aware that the
the brain will automatically ignore
a second instance of the word “the”
when it starts a new line.
我在寫部落格時常犯這種錯誤,所以想做個工具來自動幫我揪出這類問題。
這個工具我很大程度是靠Cline 這個 AI 助理完成的。我覺得既驚艷又有點害怕,Cline 根據我的提示和測試案例來實作工具的能力竟然這麼強。
而且這個工具效果很好。我用它在已經發表的文章中找出了七個詞彙幻覺。
# Find lexical illusions (and also some false positives like "Duck Duck Go").
$ wordword ./content/
./content/retrospectives/2019/11/index.md:114: the
./content/retrospectives/2022/05/index.md:175: Duck
./content/retrospectives/2022/05/index.md:175: Duck
./content/retrospectives/2022/05/index.md:175: Duck
./content/retrospectives/2022/05/index.md:175: Duck
./content/retrospectives/2022/05/index.md:177: Duck
./content/notes/nix-git-bash-shell/index.md:78: time
./content/notes/cypress-vs-playwright/index.md:278: makes
./content/posts/simple-vue-pre-rendered/index.md:36: for
./content/posts/bootstrapped-founder-year-6/index.md:132: case
./content/posts/ansible-role-clipbucket/index.md:83: a
./content/posts/bootstrapped-founder-year-1/index.md:177: NOW
./content/posts/bootstrapped-founder-year-1/index.md:177: NOW
./content/book-reports/chaos-monkeys/index.md:8: names
./content/book-reports/go-programming-blueprints/index.md:50: of
212 total files checked
15 total errors found我已經把 wordword 加到部落格的CI 建置流程和git pre-commit hook 中。
而且因為是用 Zig 寫的,速度非常快。它檢查部落格裡 212 個 Markdown 檔案,只花了 28.7 毫秒:
$ hyperfine 'wordword ./'
Benchmark 1: wordword ./
Time (mean ± σ): 28.7 ms ± 1.3 ms [User: 11.7 ms, System: 16.5 ms]
Range (min … max): 26.8 ms … 31.7 ms 90 runs其他小事
我加入了 Codeberg 成為會員
我一直在尋找一個更不那麼商業化、更開源的 Git 代管服務。
我之前用的是 GitLab。但他們做了一個很奇怪的決定:每兩週就強制讓所有使用者登出。
每次我要用 GitLab 時,都發現自己已被登出。而要重新登入時,GitLab 還會打斷我的工作流程,逼我去收 Email 找一次性驗證碼,而不是讓我的密碼管理器自動填入帳密。
我試了Codeberg,很喜歡。它比 GitLab 簡單許多,這正合我意,因為 GitLab 對我來說一直太過複雜。而且它是完全開源的,用 Go 和 HTML 樣板實作,這正是我最喜歡的網頁技術組合。
我看到支持 Codeberg 的方式之一,就是加入成為具有投票權的會員,所以我就加入了。我還沒用這個會員身分做過什麼,但感覺自己像是合作社的一份子,而不只是使用者,感覺還不錯。
Codeberg 最大的缺點是,似乎沒有任何提供代管服務的持續整合(CI)廠商支援它:
- WoodpeckerCI:沒有廠商提供付費的代管服務。
- Forgejo Actions:實驗性專案,沒有付費支援。
- CircleCI:不支援 Forgejo/Gitea。
- Garnix:不支援 Forgejo/Gitea。
- Buildkite:不支援 Forgejo/Gitea。
- Drone:有支援 Forgejo/Gitea,但似乎只有企業版才提供代管服務。
- Harness:這似乎是 Drone 的新名稱,但我搞不清楚它們是否支援 Forgejo/Gitea。
Codeberg 官方推薦自行架設 Woodpecker CI,這聽起來有趣但不太實際,所以我花了一天在我的免費 Oracle Cloud VM 上把它架起來。現在我為 wordword 和其他幾個專案自行架設 CI。但我不相信自己能把它保護得像付費廠商那樣安全,所以不願意在上面存放機敏資訊。這讓它作為真正的 CI/CD 解決方案,用途受到很大限制。
換了一台 10 Gbps 路由器
我的網路服務供應商(ISP)第一次提供了 2 Gbps 對稱頻寬,所以我想充分利用這個速度。
我原本的路由器是 Qotom Q355G4,它一直表現不錯,只差在不能上機架,而且只有 1 Gbps 的連接埠。
我本想向 OPNsense 或 Protectli 這種值得信賴的硬體廠商買路由器,但 OPNsense 最便宜的 10 Gbps 機架式路由器要價1,200 美元,而 Protectli 根本沒有可上機架的選項。
最後我買了Qotom C3758R 1U 10 Gbps 路由器(含運費與稅金共 417 美元),並在上面安裝了 OPNsense 商用版。

我買了一台 Qotom C3758R 10 Gbps 路由器(由上數來第三台),為了充分利用 ISP 新推出的 2 Gbps 方案。
我本來一直擔心路由器的記憶體或硬碟空間不夠,但 OPNsense 幾乎不需要什麼資源。我選了 8 GB 記憶體和 128 GB 硬碟。剛剛在跑測速時看了一下系統負載,記憶體使用率從未超過 13%,CPU 最高也只到 30% 左右,所以這台硬體對我來說綽綽有餘。要說明一下,我沒有設定很多防火牆規則,也沒有使用 OPNsense 的 IDS/IPS 功能。

正式改用 Rackstuds
在我發表了關於打造第一座家用伺服器機櫃的文章後,有幾位讀者推薦我改用Rackstuds,取代傳統的籠式螺母(cage nuts)。

我覺得 Rackstuds 比標準的籠式螺母好用多了。
我一開始很懷疑,因為 Rackstuds 是塑膠製的,感覺比金屬的籠式螺母更容易斷。但 Rackstuds 有實驗室測試顯示它們可以承重高達 40 磅。
Rackstuds 絕對比籠式螺母好用多了。用籠式螺母安裝設備很麻煩,尤其是重的設備。你得一手扶著設備、保持水平,另一手還要鎖螺絲來固定。
Rackstuds 解決了這個問題,因為你可以先把 studs 裝好,然後直接把設備掛上去就好。
讓我困惑的一點是,Rackstuds 有兩種版本:紅色和紫色。它們的差異讓人有點摸不著頭緒。紫色版本的產品頁面寫道:
Suitable for rails between 2.7mm/0.106 and 3.2mm/0.125". If ≤ 2.2mm/0.086", use the new red version instead
蛤?
我原本以為伺服器機櫃裡的「rails」(滑軌)是指裝在伺服器上、讓你能把伺服器滑進機櫃的東西,它們各個面向的尺寸都遠大於 3 公釐。

我原本以為伺服器機櫃裡的「rails」就是這種滑軌。
後來我終於搞懂,Rackstuds 所說的軌道厚度,其實是指機櫃正面的那片金屬:

在我的 StarTech 機櫃上,紫色的 Rackstuds 似乎更合適。
另一個要注意的地方是:如果你買 Rackstuds Duo,它只適用於剛好是 1U 高的設備,而散裝的 Rackstuds 則可以安裝任何可上機架的設備。我先買了 8 入的試用包,之後又買了一包 20 入的,留給未來的機櫃設備使用。
總結
完成了什麼?
- 發表了《Refactoring English》的〈Passive Voice Considered Harmful〉章節及搭配的互動練習。
- 發表了My Seventh Year as a Bootstrapped Founder。
- 發表了五篇短篇筆記:
- 用 Zig 打造了一個新的部落格錯誤檢查工具。
經驗與收穫
- 我需要重新評估,考量到所需的時間以及更能善用 AI 變革的其他專案,寫書這個策略是否仍然合適。
- 我可以為網路調整書中的內容以吸引讀者。試讀內容不需要和正式書中的內容百分之百一致。
下個月的目標
- 完成《Refactoring English》的部落格寫作章節。
- 開始為《Refactoring English》進行預購。
徵求協助
隨機一篇部落格
留言
登入後參與討論