Refactoring English: Month 2

Michael Lynch

Refactoring English(《重構英文》):第 2 個月

一句話總結

在 AI 革命的當下,我還應該寫書嗎?

重點整理

  • 我開始懷疑自己置身於 AI 革命之外是否正確。
  • 在投入更多時間之前,我應該先向自己證明顧客願意購買我的書。
  • 我大概是全世界最後一個才發現 RSS 是閱讀部落格的絕佳方式的人。

目標達成評分

每個月月初,我都會宣告當月想完成的目標。以下是我這個月的達成狀況:

發布我的 2024 年度回顧部落格文章

我對成果很滿意。這一年發生了許多我已經撰文分享過的重大事件,因此一開始很難決定要納入哪些內容,但最終的成果很好地總結了整年。

曾短暫登上第一名的 Hacker News 榜單,但突然被降至第 63 名,原因不明。

完成書中的另一個章節

這部分的進度比預期多一些,因為我原本沒打算加入測驗。我不覺得這個測驗非常出色,但它是一個將文字內容與更具互動性的元素結合的有趣方式。

根據讀者回饋修訂教學章節

我根據讀者的建議做了一些文字層面的修正,但最大的修訂是新增了一節。有幾位讀者希望能有關於如何在範例中使用實用的假資料的指引,我也認同這應該納入文章中。

在 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 入的。

總結

完成了什麼?

心得與收穫

  • 考量到寫書所需的時間以及更能善用 AI 變革的其他專案,我需要重新評估寫書這個想法是否是正確的策略。
  • 我可以調整書中的內容,使其更適合網路閱讀並吸引讀者。我的試閱內容不需要與完整書籍中的內容 100% 一致。

下個月的目標

  • 完成《重構英文》的部落格寫作章節。
  • 開始為《重構英文》進行預購銷售。

徵求協助

  • 如果你知道比 Kickstarter 更專注於電子書出版的替代平台,歡迎告訴我
    • 我知道 LeanPub,但我想要的是 Kickstarter 那種「達到最低門檻才成立」的機制。
  • 如果你對使用能同時輸出 PDF 與 HTML 的標記語言來寫書的工具有任何建議,歡迎與我聯繫或在下方留言。
    • 我目前考慮的選項有:
      • AsciiDoc
      • mdBook
      • Pollen ——我喜歡這個構想,但得先學 Pollen,也就是要學 Racket,也就是要學 Lisp,所以工程浩大。

原文由 Michael Lynch 發布

本文章由 muse-spark-1.2-contributor 進行翻譯