Refactoring English(《重構英文》):第 2 個月
一句話總結
在 AI 革命的當下,我還應該寫書嗎?
重點整理
- 我開始懷疑自己置身於 AI 革命之外是否正確。
- 在投入更多時間之前,我應該先向自己證明顧客願意購買我的書。
- 我大概是全世界最後一個才發現 RSS 是閱讀部落格的絕佳方式的人。
目標達成評分
每個月月初,我都會宣告當月想完成的目標。以下是我這個月的達成狀況:
發布我的 2024 年度回顧部落格文章
- 結果:我發表了《我作為自籌創辦人的第七年》
- 評分:A
我對成果很滿意。這一年發生了許多我已經撰文分享過的重大事件,因此一開始很難決定要納入哪些內容,但最終的成果很好地總結了整年。
它曾短暫登上第一名的 Hacker News 榜單,但突然被降至第 63 名,原因不明。
完成書中的另一個章節
這部分的進度比預期多一些,因為我原本沒打算加入測驗。我不覺得這個測驗非常出色,但它是一個將文字內容與更具互動性的元素結合的有趣方式。
根據讀者回饋修訂教學章節
- 結果:新增了一節〈使用明確無歧義的範例值〉。
- 評分:A
我根據讀者的建議做了一些文字層面的修正,但最大的修訂是新增了一節。有幾位讀者希望能有關於如何在範例中使用實用的假資料的指引,我也認同這應該納入文章中。
在 AI 革命期間寫書是不是很蠢?
對我而言,很明顯 AI 正在軟體開發領域引發一場革命。
AI 模型現在已能達到稱職的初階工程師水準。以它們進步的速度,兩年內 AI 在大多數程式設計任務上的表現將超越最優秀的人類。
我預期軟體產業的很大一部分將圍繞 AI 重組。在我有生之年,最接近的類比就是從桌機軟體轉向網際網路的轉變。
我沒有工作,也沒有公司要經營,所以我有完全的自由,可以從事任何想利用近期 AI 發展的項目。
而我卻在寫一本與 AI 毫無關係的書……
我不想只是追逐最新、最炫的東西,但我也覺得錯過 AI 革命,就像在 90 年代末看到網際網路興起時卻說:「我想把軟體發行在光碟上,讓顧客透過郵購訂購。」
我當初選擇專注於寫書的理由依然成立,但其機會成本比我六個月前規劃時預期的要大得多。
這本書真的有市場嗎?
另一個問題是,寫這本書是一項長期的投入,而我還沒有把握人們會想讀它。
我發布的第一章獲得了不錯的迴響,但那是其中一個有趣且具廣泛吸引力的章節。我擔心像〈被動語態有害論〉這樣的章節,更像是「多吃蔬菜」那種有益但乏味的課。人們或許認同它有益,但讀起來並不有趣。而且我常出沒的地方如 Hacker News 或 reddit,也不太會推薦一篇關於被動語態的文章。
問題在於,我書中的大多數章節都是這種「多吃蔬菜」型的章節。

我可以重新調整結構,把「大聲朗讀你的文章」這類技巧放到部落格章節中討論,但那樣不太合理,因為這個技巧適用於各種寫作,而不僅僅是部落格文章。
但或許是我的切入方式錯了。我認為在網路上瀏覽的人不會想讀一篇關於被動語態的文章,但如果他們決定要讀一本關於有效寫作的書,就很可能會閱讀被動語態那一章。
我原本假設我在網路上免費發布的試閱內容會是書中章節的逐字稿,但其實不需要這麼做。我可以隨心所欲地為網路調整內容,所以如果我在部落格試閱章節中談到大聲朗讀寫作內容,那也沒關係。在實際的書中,我可以將大聲朗讀的技巧安排在部落格章節之外。
儘管如此,在投入接下來幾個月之前,我仍需要驗證這本書是否有顧客群。因此,我的計畫是先專注於另一章有趣且易於入門的章節,例如〈寫出開發者會想讀的部落格文章〉,然後根據最初的三章在 Kickstarter 上開放預購。我需要設定一個我認為合理的最低預購目標,來決定是否值得繼續寫下去。
後知後覺:RSS 真的很棒
RSS 已經存在 25 年了,但我從未真正透過 RSS 來閱讀文章。
我在 2011 年試用過 Google Reader,但當時訂閱的資訊流中沒有足夠多有趣的文章,所以就不再查看,漸漸忘了它。
在過去幾年裡,有幾件事讓我對 RSS 的興趣大增:
- 我過去在 Twitter 上追蹤的科技人士,現在都分散到不同的平台。
- 我越來越意識到社群媒體更傾向於放大譁眾取寵的貼文,而非有趣的技術文章。
- 我將作業系統換成了 NixOS,這讓我能輕鬆地自行託管一套免費、開源的 RSS 閱讀器。
- 我發現自己不喜歡透過電子郵件訂閱部落格,因為那會塞滿收件匣,讓我在不適合閱讀的狀態下還覺得非讀不可。
- 隨著 AI 生成的低品質內容逐漸佔據網路,我更想追蹤自己喜歡的特定作者。
因此,我安裝了fusion RSS 閱讀器,發現它是我最喜愛的閱讀新部落格文章的方式之一。每當我在社群媒體上發現喜歡的部落格文章,我就會瀏覽該作者的其他文章。如果他們寫的東西是我感興趣的,我就直接將他們加入訂閱。

我最近開始使用 RSS 閱讀器 fusion,以便追蹤感興趣的部落格
業餘專案
wordword:在部落格文章中找出 lexical illusions(詞彙幻覺)
我最近讀了 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.
我在寫部落格時常犯這種錯誤,所以想要一個能自動幫我揪出這種錯誤的工具。
我大量仰賴 AI 助理 Cline 來打造這個工具。我覺得 Cline 根據我的提示與測試案例來實作工具的能力既令人驚豔又有點可怕。
而且這個工具運作良好。我用它在已發布的文章中找出了七個 lexical illusions。
# 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 撰寫,它超級快速。它只需 28.7 毫秒就能檢查我部落格中的 212 個 Markdown 檔案:
$ 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 會中斷我的工作流程,要求我去收信取得一次性驗證碼,而不是讓我的密碼管理器自動填入憑證。
我試用了Codeberg,覺得很喜歡。它比 Gitlab 簡單,這對我來說很合適,因為 Gitlab 對我的需求而言總是過於複雜。而且它是完全開源的,並以 Go 和 HTML 樣板實作,這是我最喜歡的網站技術堆疊。
我看到支持 Codeberg 的方式之一是加入成為具投票權的公司會員,所以我就這麼做了。我還沒用這個會員身分做過什麼,但感覺自己是合作社的一份子,而不只是使用者,感覺很不錯。
Codeberg 最大的缺點是,似乎沒有任何提供代管服務的 continuous integration(持續整合) 廠商支援它:
- WoodpeckerCI:沒有廠商提供付費代管服務。
- Forgejo Actions:實驗性專案,不提供付費支援。
- CircleCI:不支援 Forgejo/Gitea。
- Garnix:不支援 Forgejo/Gitea。
- Buildkite:不支援 Forgejo/Gitea。
- Drone:他們支援 Forgejo/Gitea,但似乎只有企業版才提供代管服務。
- Harness:這似乎是 Drone 的新產品,但我無法確定是否支援 Forgejo/Gitea。
Codeberg 官方建議自行託管 Woodpecker CI,這聽起來有趣但不太實際,所以我花了一天在我的免費 Oracle 雲端虛擬機上架設。現在,我為 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 方案。
我總是擔心路由器的 RAM 或磁碟空間不夠,但 OPNsense 幾乎不需要什麼資源。我選了 8 GB RAM 和 128 GB 磁碟。剛才在跑測速時查看系統負載,RAM 從未超過 13%,CPU 峰值約 30%,所以硬體對我的需求來說綽綽有餘。請注意,我沒有設定太多防火牆規則,也沒有使用 OPNsense 的 IDS/IPS 功能。

正式改用 Rackstuds
在我發表了關於打造第一座家用伺服器機櫃的文章後,有幾位讀者建議我試試 Rackstuds 來取代籠式螺母。

我覺得 Rackstuds 比標準的籠式螺母好用得多。
我一開始很懷疑,因為 Rackstuds 是塑膠的,感覺比金屬籠式螺母更容易斷。但 Rackstuds 的實驗室測試顯示它們可以支撐重達 40 磅的設備。
Rackstuds 絕對比籠式螺母更容易操作。籠式螺母讓安裝設備變得很困難,尤其是重型設備。你需要一隻手扶著設備並保持水平,同時用另一隻手鎖上螺母來固定設備。
Rackstuds 解決了這個問題,因為你可以先安裝好支柱,再直接將設備掛上去。
讓我困惑的一點是,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 所說的 rail 厚度,指的是機櫃正面的那片金屬:

在我的 StarTech 機櫃上,紫色的 Rackstuds 似乎更合適。
另一個要注意的地方:如果你買 Rackstuds Duo,它只適用於剛好 1U 的設備,而散裝的 Rackstuds 則可用於任何機架安裝。我先買了八入的試用包,之後又為未來的機架設備買了一包 20 入的。
總結
完成了什麼?
- 我發表了《重構英文》的〈被動語態有害論〉章節以及搭配的互動練習。
- 我發表了《我作為自籌創辦人的第七年》。
- 我發表了五篇短篇札記文章:
- 我用 Zig 打造了一個新的部落格錯誤檢查工具。
心得與收穫
- 考量到寫書所需的時間以及更能善用 AI 變革的其他專案,我需要重新評估寫書這個想法是否是正確的策略。
- 我可以調整書中的內容,使其更適合網路閱讀並吸引讀者。我的試閱內容不需要與完整書籍中的內容 100% 一致。
下個月的目標
- 完成《重構英文》的部落格寫作章節。
- 開始為《重構英文》進行預購銷售。
徵求協助
隨機一篇部落格