Refactoring English: Month 5

Michael Lynch

Refactoring English:第五個月

原文由 Michael Lynch 發布,訂閱此部落格

一句話總結

我要怎麼才能不把同一個章節重寫五十遍?

本期亮點

  • 為什麼寫書的進度比預期中慢?
  • 我優化了 Asciidoctor 的寫作與預覽流程。
  • 我正在做一個即時追蹤 Hacker News 表現的業餘專案。

目標評分

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

撰寫一篇關於 Kickstarter 經驗的部落格文章

我原本打算寫一篇聚焦於 Kickstarter 的指南,但越寫越覺得 Kickstarter 不是重點。我對群眾募資作為自費出版技術書籍的途徑更感興趣,而 Kickstarter 只是其中一種方式。

完成一個新章節,或針對書中主題舉辦一場線上直播課程

  • 成果:舉辦了一場線上直播課程,並開始撰寫新章節。
  • 評分:A

我邀請所有預購本書的讀者參加線上直播課,過程很愉快。我見到了一些追蹤我部落格多年的讀者,雖然我們從未私下聯絡過,而他們的提問也幫助我打磨書中的內容。

與 Kickstarter 贊助者協調回饋項目

  • 成果:已聯絡所有購買高階回饋方案的 Kickstarter 贊助者。
  • 評分:A

我一直為太晚聯絡大家感到焦慮。我擔心贊助者會想:「嘿,你怎麼還有時間寫關於 Kickstarter 的 部落格 文章,卻不來跟實際支持你的人聊聊?」但我又不想群發罐頭訊息,因為既然有人花了 75 到 150 美元預購,我覺得值得一封個人化的回覆。

我一直拖著沒寄信,但真正動手後,其實只花了大約兩個小時就寫完給所有人。如果贊助者有網站,或我們以前聊過,我就會客製化訊息,讓對方清楚知道這是一封一封親自寫的。

寫書時的時間管理

我每週都在寫書,但進度感覺還是很慢。

很難評估進度,因為我雖然知道哪些章節已完成、哪些還沒,但每章的難度和篇幅差異很大。

另一個問題是,我可以無止境地一直寫、一直重寫同一個章節。我必須在某個時間點認定這樣已經夠好了,然後轉往其他章節。如果沒有要在特定時間前完成某章的壓力,我就會覺得可以永遠重寫下去。

我也發現,寫作大約一小時後,效率就會大幅下滑。我會很快沒勁,更容易分心,或在枝微末節上過度糾結。早上和下午寫不同主題多少能緩解這個狀況,但不管哪個時段,大概一小時後還是會沒力。

所幸,我還沒有遇到寫作瓶頸或失去動力。工作日每天都能寫,而且對這本書依然感到興奮。

考量到這些狀況,以下是我接下來更專注寫作的計畫:

  • 每天至少安排 60 分鐘進入心流狀態寫作。
    • 如果需要進一步研究、修正格式或加入圖片,就先加上 TODO,這樣才不用打斷心流。
    • 如果感到無聊,忍住想查看電子郵件或社群媒體的衝動。就算不喜歡自己寫出來的東西,也要持續寫到這個時段結束。
  • 每天一早就規劃當天的工作,這樣才能決定各項寫作任務要分配多少時間。
    • 我會查看行事曆和待辦清單,然後在紙上把一整天排成一系列 30 分鐘的時段。
  • 決定每個章節值得投入多少寫作時間。
    • 例如,我應該事先決定,在把草稿寄給讀者之前,關於電子郵件的那一章我只想花 10 小時來寫。

清單上的有些項目是我已經在做、想更確實執行的;有些則是為了因應第一次寫書的挑戰而新增的。

Asciidoctor:目前為止還不錯

上個月我寫了關於評估寫書工具的不同選項的文章,最後選定了 Asciidoctor。目前用起來還挺滿意的。

我以 Liran Tal 的 asciidoc-book-starter 為起點,並改成適用於 Nix。現在我已經設定好 Nix flake,只要執行 nix run,就能把書渲染成 PDF、epub3 和 HTML。我也可以用像 nix run .#pdf 這樣的指令單獨渲染特定格式。

我還不確定是否會同時支援三種格式。我還沒嘗試任何自訂格式,甚至還沒嵌入過圖片或表格,最後還是要看要在三種格式都把版面和樣式調好,需要多花多少工夫。

Asciidoctor 最大的限制是無法做到即時重整(live reload)。我習慣用 Hugo 寫作,會在一個視窗開著 VS Code,另一個視窗開著瀏覽器看渲染結果。每次在 VS Code 按下儲存,幾百毫秒內就能在瀏覽器看到更新。

用 Asciidoctor 時,我的「編寫—建置—預覽」流程是:

  1. 儲存檔案。
  2. 切換到終端機。
  3. 執行 nix run .#pdf
  4. 切換到瀏覽器視窗。
  5. 重新載入 PDF。

現在這樣寫出來,我才意識到應該把這個流程自動化,於是請 LLM 幫忙,得到這個簡單的腳本:

#!/usr/bin/env bash
set -euo pipefail

nix run .#pdf

zathura dist/Refactoring\ English.pdf &
ZATHURA_PID=$!

trap 'kill $ZATHURA_PID' EXIT

find book -type f \
  | entr -dr nix run .#pdf

我以前沒聽過 zathura,但它是個會在檔案變更時自動重新載入的開源 PDF 閱讀器。實際運作起來是這樣:

我用 Asciidoctor、Zathura 和 Nix 自製的熱重整 PDF 工作流程

我這個自製的熱重整流程,比起 Hugo 近乎即時的效能慢上許多,但比手動操作輕鬆了 5 倍。

業餘專案:Hacker News Observer

我在 Hacker News 上有個特殊超能力,就是通常知道一則貼文為什麼會從首頁消失。但其實只要知道 HN Rankings 這個會繪製 Hacker News 歷史資料圖表的網站,任何人都能做到。你只需要認出幾種模式。

在 HN Rankings 上最明顯能看到的,就是貼文排名突然大幅上升或下降。如果一則貼文正慢慢爬到第 3 名,下一個時間點卻突然掉到第 45 名,就表示管理員很可能手動降權了這則貼文。

當 Hacker News 貼文排名突然下滑,通常是管理員手動降權所致。

圖表也能看出管理員何時手動提升了某則貼文。如果看到一則貼文原本淹沒在第 300 名,突然間衝到第 10 名,就表示管理員提升了它,可能是透過 second chance pool,這是一個由管理員和志工挑選錯過首頁的遺珠、給予第二次機會的機制。

HN Rankings 很棒,但我希望能在排名之外,看到更多像是按讚數和留言數等資料,所以我自己做了一個版本。還沒正式發布,但它每分鐘輪詢 Hacker News API,來追蹤目前所有 Hacker News 貼文的中繼資料。

我一直很好奇,如果把 Hacker News 首頁上所有貼文的投票和留言數隨時間彙整起來,會出現什麼樣的模式:

最讓我驚訝的是,每天美東時間中午左右,貼文的平均年齡會大幅下降,也就是說那時較舊的貼文會從首頁退場,讓位給更新的貼文。

觀察自己投稿的詳細數據也很有趣,例如「My $6k Advance as a Self-Published Author」這篇的 HN 討論串。圖表顯示這篇貼文從未登上首頁,卻持續收到按讚,讓人意外。我還是不太確定怎麼會這樣,因為我並沒有在任何地方貼上那個 Hacker News 討論串的連結:

以下是幾個我還想加入的功能:

  • 自動判斷 Hacker News 當天是新聞淡季,還是首頁競爭激烈。
  • 自動標記被管理員提升或壓制的貼文。
  • 根據投票和留言的初始狀況,預測貼文的後續走向。

這是我久違最接近「大數據」的專案,因為我大多數網站一個月只產生約 1 MB 的資料,而 HN Observer 每天就產生 30 到 40 MB。我可以依收集的資料量和更新頻率來調高或調低。

HN 的資料儲存感覺是試用 Turso 的好機會。我已經遠遠關注它一陣子了,它看起來像是一種保留了使用 SQLite 大部分優點的資料庫即服務。

購買無 DRM 的電影

最近我跟朋友抱怨,竟然沒有人提供可合法購買的無 DRM 電影或影集。我知道大型片商和串流平台無意放棄 DRM,但對小型片商或獨立製片來說,架一個結帳頁面,讓顧客用 10 美元買一部 4K 無 DRM 的 mp4 電影,似乎並不難。

我四處搜尋後發現,算是有類似的東西。Vimeo on Demand 有提供無 DRM 的電影。雖然大多是獨立製片和非英語電影,但這是我見過可合法購買的無 DRM 電影中,選擇最多的。

Vimeo on Demand 是我找到可合法購買的無 DRM 電影中,數量最多的平台。

我試用了 Vimeo on Demand,體驗只能說普普通通。但他們是唯一在賣無 DRM 電影的,所以我還是會推薦,只是有但書。

請確認你要買的影片有提供下載功能,因為並非所有影片都有。如果按鈕上寫的是「Stream anytime」,那就不是無 DRM 的:

請認明有下載選項的影片,那才代表是真正的無 DRM 選項。避免購買標示「Stream anytime」的影片,因為它們並非無 DRM,也無法下載。

犯了這個錯誤並取消購買的經驗,也讓我不太想推薦 Vimeo。他們沒有明顯可與真人客服對話的選項,反而得跟聊天機器人對話,對方告訴我基於「安全考量」無法退還隨選影片的購買(儘管他們看得到我根本沒觀看過)。唯一的選項是聯絡影片發行商要求退款,所以我就這麼做了。但如果一週內沒收到回覆,我就打算直接向信用卡公司申請退刷。

Vimeo 的服務條款要求強制仲裁,所以如果 Vimeo 做了違法的事,你不能在法院起訴他們,也不能參與集體訴訟。這種條款在美國竟然合法,實在很荒謬,因為仲裁人往往大幅偏袒企業而非消費者。你可以選擇退出強制仲裁,我已經這麼做了。

總結

完成了什麼?

  • Refactoring English 舉辦了一場線上直播課程。
  • 逐一聯絡了每一位購買高階回饋方案的 Kickstarter 贊助者。

經驗收穫

  • 我應該為書中每個章節設定時間上限,避免無止境地修修改改。時間目標也能讓我更清楚掌握整本書的總體進度。
  • 用 Asciidoctor 自製一個簡易的即時重整流程其實很容易。

下個月的目標

  • 向預購讀者發布兩個書籍章節。
  • 為書中每個章節設定彈性的寫作時間上限。
  • 將書中的預覽章節轉換為 Asciidoc 格式。

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

留言