跳至主要内容

創作者的 Unix 哲學

· 閱讀時間約 5 分鐘 ┊ 純文字版

Eric S. Raymond 在 The Art of Unix Programming 這本書裡,列出了 Unix 程式設計的 17 條哲學。

但我覺得這根本不是在講程式設計,而是寫給所有創作者的行為準則啊!以下只挑一些我特別有共鳴的來講,有興趣讀完整 17 條原文的,按下方展開。

按這裡展開原文
  1. Rule of Modularity: Write simple parts connected by clean interfaces.
  2. Rule of Clarity: Clarity is better than cleverness.
  3. Rule of Composition: Design programs to be connected to other programs.
  4. Rule of Separation: Separate policy from mechanism; separate interfaces from engines.
  5. Rule of Simplicity: Design for simplicity; add complexity only where you must.
  6. Rule of Parsimony: Write a big program only when it is clear by demonstration that nothing else will do.
  7. Rule of Transparency: Design for visibility to make inspection and debugging easier.
  8. Rule of Robustness: Robustness is the child of transparency and simplicity.
  9. Rule of Representation: Fold knowledge into data so program logic can be stupid and robust.
  10. Rule of Least Surprise: In interface design, always do the least surprising thing.
  11. Rule of Silence: When a program has nothing surprising to say, it should say nothing.
  12. Rule of Repair: When you must fail, fail noisily and as soon as possible.
  13. Rule of Economy: Programmer time is expensive; conserve it in preference to machine time.
  14. Rule of Generation: Avoid hand-hacking; write programs to write programs when you can.
  15. Rule of Optimization: Prototype before polishing. Get it working before you optimize it.
  16. Rule of Diversity: Distrust all claims for "one true way".
  17. Rule of Extensibility: Design for the future, because it will be here sooner than you think.

分離原則

"4. Rule of Separation: Separate policy from mechanism; separate interfaces from engines."

(分離原則:把政策和機制分開;把介面和引擎分開。)

套用到創作上面,簡單來說就是把「你想講的話」跟「你用來講話的工具」分開。

不要特別為了平台,來量身訂做你想講的東西。當你開始想「開頭五秒要放什麼才不會被滑掉」、「什麼時候上傳觸及率比較高」、「這個詞會不會被黃標」、「這個演算法會推嗎」⋯⋯這時傳達的訊息就已經被工具改寫了。

訊息應該要凌駕於工具之上,而且隨時能被轉化成任何格式。

如果非要選一種「終極格式」,我想純文字是最好的選擇

節儉原則

"6. Rule of Parsimony: Write a big program only when it is clear by demonstration that nothing else will do."

(節儉原則:除非能證明別無他法,否則不要寫大程式。)

不要鋪張、不要搞一堆有的沒有的來擾亂自己。

你真的需要這麼複雜的企劃、這麼多人的團隊、這麼多攝影機角度、這麼繁複的剪輯嗎?如果無法證明「真的非得要這樣不可,沒有別的辦法」,那就把這些贅肉通通砍掉吧!

資料原則

"9. Rule of Representation: Fold knowledge into data so program logic can be stupid and robust."

(資料原則:把知識放進資料裡,所以程式邏輯可以又笨又耐用。)

讓「內容」去變化就好,而不是「流程」。流程要盡量簡單、耐用就好,不要每天變來變去。

例如這個部落格,我每天上傳的流程都是一樣的──寫一個 Markdown 檔案,丟進資料夾,npm run build,上傳──因為流程既無聊又簡單,我才能專注在每天寫的主題上,而不是跟流程搏鬥。

做音樂也一樣:只要有一台不錯的音源機,就能做出幾乎所有類型的音樂。不需要一直更新編曲軟體到最新版,也不需要下載 500 GB 的音色庫,更不需要糾結那十五種 compressor 的聲音到底差在哪裡。

沉默原則

"11. Rule of Silence: When a program has nothing surprising to say, it should say nothing."

(沉默原則:如果沒有有趣的東西可講,就不要講。)

現在的內容生態,根本是朝完全相反的方向運作──明明就沒有東西講,但每個人還是強迫自己一直發限動、刷存在感、餵演算法。

最佳化原則

"15. Rule of Optimization: Prototype before polishing. Get it working before you optimize it."

最佳化不是優化喔原則:先讓它能用,再慢慢打磨。)

這是許多新手創作者最常犯的錯誤:根本什麼都還沒開始做,就先擔心要買什麼鏡頭、哪隻麥克風、Logo 要找誰設計、紅了以後怎麼應付酸民⋯⋯想太多了啦,先把第一集拍出來再說好不好!

擴充原則

"17. Rule of Extensibility: Design for the future, because it will be here sooner than you think."

(擴充原則:為未來設計,因為未來來得比你想的還快。)

這點我太認同了!擁有自己的網站自己的網域、掌握作品的主權與跟讀者直接聯絡的管道,在未來只會越來越重要。

平台收割韭菜的速度,絕對比你想像中還要快。那日漸萎縮的觸及率,就是「未來」即將到來的徵兆呀!

晚上不睡覺 ✦BBP9✦

· 閱讀時間約 4 分鐘 ┊ 純文字版
BlogBlog Party(BBP)

這是我的「BlogBlog 同樂會 - 2026 年 9 月」的投稿文章。本月主題是「晚上不睡覺」,由 Jason Lai 主持。如果你有自己的部落格,歡迎一起來參加!如果沒有的話,就現在建一個,然後來參加!

一直到兩年半前,我都還是個超級夜貓。

以前正常的上床時間大概是半夜兩、三點,拖到清晨四、五點也是家常便飯。之所以能維持這種作息,主要是因為我是自由工作者──所有工作一律都排到中午以後,隔天要是沒有工作的話就一路睡到自然醒。

晚睡的習慣也不知道是怎麼開始的,大概就是想要爭取一段不被打擾的時間吧。而且我一直深信自己的創作力是越晚越強的,在半夜大家都睡了之後,自己一個人做音樂、研究東西的效率超級高的呀!

當然,熬夜也不全是為了正事。打電動、看動畫什麼的也是一定要的,尤其是以前自己一個人住的時候,很容易不知不覺玩一玩就天亮了。

老婆的醫療效果

英國 Warwick 大學曾經做了一個研究,他們追蹤了幾千個英國人,得到的結論是:結婚的人不只比較長壽,也比較有錢。他們估計,結婚平均可以讓人多活三年左右。

我覺得這個是真的!因為一個人生活時,沒有人會阻止你每餐都吃麥當勞配啤酒,或是在星期三凌晨三點,突然決定重玩一個某個十年前的遊戲。

有了老婆(指檸檬卷,不是之前那個可怕的)之後,如果亂吃或太晚睡的話就會被唸一下,然後就會不好意思繼續那樣做。兩個人互相監督,真的會健康很多──當然,前提是你要結對人啦,不然可能反而會早死不只三年。

變成早鳥族

2024 年有一天,我的聽力突然出問題,嚇到讓我決定重整生活習慣──完全戒酒,改成早睡,每天晨跑。到現在基本上都沒有間斷唷!

我現在大概 22:00-22:30 就會去睡了。就算真的不是很想睡,我也會躺去床上關燈聽 Podcast──開一個很小聲、快要聽不清楚的音量,大腦很快就會恍神睡著了。然後早上 06:00-06:30 左右起床,上傳部落格文章,然後去跑步。

夜貓族最常見的晚睡藉口是「有些人天生就是適合晚睡」,我之前也非常愛引用這個說法。但現在我可以用親身經歷跟你說:沒有這回事,你可以改過來

早上創作也不錯

原本發生在深夜的創作時間,現在被我搬到了早上八點到十二點。寫文章、更新網站、製作內容,大部分都在這個時段完成。

我覺得這樣的感覺更好耶!因為還沒到中午,我就常常有種「今天已經完成很多了,這樣應該就夠了吧」的感覺,然後接下來的時間就可以盡情地耍廢。比起以前夜貓時期,整個白天都會掛念「正事要等到深夜才能做」,反而壓力比較大。改成早起之後,心理狀態明顯健康多了。

怎麼早睡?

至於要怎麼改成早睡呢?很簡單:不管有沒有睡飽,先強制早起就好。不用幾天,你的身體就會自動想要早睡了。

還有,中午過後不要碰咖啡因很有幫助;戒酒也很有幫助。喝酒雖然會昏昏沉沉,但其實對睡眠品質是有負面影響的。

這篇寫著寫著就不小心變成推坑早睡早起文了。不過你看,連我這種一輩子夜貓的人都能改過來,如果你想要改變的話一定也可以!

白費

· 閱讀時間約 2 分鐘 ┊ 純文字版

「不然前面那些不就白費了?」是一個超級有害的想法,它會讓人做許多「明知道不開心,但還是每天照做」的事:

  • 📱 繼續玩一款早就不喜歡的手遊:累積了這麼多裝備,現在棄坑,前面的幾百小時不就白費了?
  • 😴 追一部越來越無聊的劇:都追到第四季了,不看完,前面三季不就白看了?
  • 💼 待在一份討厭的工作:累積了好幾年年資,現在從零開始,前幾年不就白熬了?
  • 📈 繼續用一套越來越難用、越來越貴的軟體:好不容易用習慣了,現在換掉,前面不就白學了?
  • 💔 繼續一段有毒的關係:都磨合這麼多年了,現在放手,之前的眼淚不就白流了?

沒有「白費」這回事,「費」了就是「費」了!之前已經付出的時間╱金錢╱心力╱感情,不管接下來怎麼做都是拿不回來的,那不成立「應該繼續付出」的理由──繼續下去只是白費更多而已。

趕快發現這些沉沒成本(sunk cost),然後豪邁地忽略它們

有東必有西,有北必有南(除非你住士林)

· 閱讀時間約 4 分鐘 ┊ 純文字版

昨天跟 Ikuka 見面的時候,聊天中間她驚訝地說:「原來還有民權東路喔?」

她是高雄人,來台北坐捷運的時候只有看過「民權西路站」,所以從沒想過台北市還有另一條「民權東路」的存在。

我說,這不是當然的事情嗎?有「西路」就必定有「東路」呀,不然「西」是要跟誰比呢?如果沒有對應的東邊,就沒有必要加「西」字,直接叫「民權路」就好了呀──例如「仁愛路」和「信義路」就沒有分東西。

但這也是我憑直覺講的。所以讓我們來追根究底查查看,我說的到底是不是對的?(只看台北市的部分)

政府資料開放平臺上面,已經有整理好的全國路名資料 CSV 檔可以下載,所以要回答這個問題很簡單,搜尋一下即可。

所以答案是?

「東╱西」配對

先看「路」層級,「東路╱西路」總共有 13 組配對:

西備註
大東路大西路在士林,兩條沒有接在一起
北平東路北平西路
南京東路南京西路
和平東路和平西路
天母東路天母西路
德行東路德行西路
忠孝東路忠孝西路
愛國東路愛國西路
民族東路民族西路
民權東路民權西路
民生東路民生西路
長安東路長安西路
青島東路青島西路

落單的只有一條──士林區只有「士東路」,但沒有「士西路」。

至於「街」層級的,東西配對共有 4 組:

西兩條有連在一起嗎?
寧波東街寧波西街
安東街安西街沒有
小東街小西街沒有,但是在附近(士林區)
通河東街通河西街沒有,在基隆河的兩側(士林區)

而沒被配到的「單身東西街」就很多了:

但沒有
新東街新西街
港東街港西街
興東街興西街
葫東街葫西街
齊東街齊西街
華西街華東街
錦西街錦東街

「北╱南」配對

「北路╱南路」總共有 16 組配對:

備註
大北路大南路又是在士林,兩條沒有接在一起
中坡北路中坡南路
中央北路中央南路
中山北路中山南路
光復北路光復南路
延平北路延平南路
建國北路建國南路
復興北路復興南路
敦化北路敦化南路
新生北路新生南路
杭州北路杭州南路
林森北路林森南路
環河北路環河南路
西寧北路西寧南路
重慶北路重慶南路
金山北路金山南路

落單的北╱南路有兩條:

  • 士林區的「天母北路」沒有相對的「天母南路」。(又是士林)
  • 北投區的「文林北路」沒有相對的「文林南路」,南邊接到沒有方位字的士林區「文林路」。(還是士林)

「街」層級,北南配的只有兩組:

兩條有連在一起嗎?
紹興北街紹興南街
小北街小南街沒有,但在附近(士林區)

落單的北街或南街有三條:

但沒有備註
通北街通南街
敦南街敦北街跟「敦化南╱北路」不同唷
興南街興北街

看起來像落單,但其實不是的

以下這些不是真正的方位詞,所以不算落單:

路名說明
劍南路「劍潭山之南」之意,不是單純方位詞
指南路「指南」是地名(指南宮一帶),不是方位詞
濟南路取自中國城市「濟南」,不是方位詞
中南街「中南」是地名用法,不是方位
東南街方位複合詞,不是「東路配西路」的那種用法
江南街「江南」為地名典故,非方位詞

結論

所以「有東必有西、有北必有南、兩條必連接」基本上在全台北市的「路」層級都沒錯──除非你住在士林。

士林寧願讓「文林路」直接放棄那個「南」字,也不願意跟「文林北路」配對,也是滿有個性的。

連續兩天見格友

· 閱讀時間約 1 分鐘 ┊ 純文字版

這兩天連續見了兩位 BlogBlog 宇宙的朋友。一個是遠從馬來西亞來的 Alex,另一個是遠從高雄來的 Ikuka

(Ikuka 主持的本期 BlogBlog 同樂會「一期一會」明天截稿唷!想要投稿請趕快~)

Alex 去年就已經見過一次啦!Ikuka 則是初次見面。Ikuka 本人長得有點像愛莉莎莎耶,但可惜照片無法解碼,想看的話,你們只能自己約她了。

真心覺得我們的 BlogBlog 宇宙裡面充滿了優質的人類,就說寫部落格的大人值得認識吧!

WiNote

· 閱讀時間約 3 分鐘 ┊ 純文字版

我之所以還無法完全離開 macOS,一個很大的原因是 Keynote。

你可能會說:「簡報軟體明明滿街都是啊!」LibreOffice ImpressReveal.js,甚至 PowerPoint⋯⋯替代品明明超多的,為什麼一定要用 Keynote 呢?

我知道,但我根本沒把 Keynote 當簡報軟體,我是把它當「動畫軟體」在用的。

Keynote 對我來說最不可取代的地方是,它能輸出品質很好的 MP4 影片,更重要的是它的影片有動態模糊(motion blur)──就是物件快速移動的時候會自然地糊掉,配合每秒 24 格的設定,會有一種電影質感──輸出檔直接丟到剪輯軟體裡,就是漂亮的 B-roll。

好和弦頻道裡,大部分的動畫都是用 Keynote 做的。

完美的動畫軟體

我已經尋覓 Keynote 的替代品很久,但各種動畫軟體,沒有一個完全符合我的需求。我也嘗試過用 AI 生成動畫,但叫 AI 做動畫就像是在抽獎,你永遠不知道按下「生成」按鈕後,出來的會是什麼東西。

我需要的是「文字花 0.8 秒從座標 (x1, y1) 移到 (x2, y2),等 1 秒,然後往右淡出」這樣超精確的控制。

我心目中完美的動畫軟體,是我可以打開純文字編輯器,打幾行類似這樣的東西:

bg photo.jpg // 背景圖片
text "這是標題" @[0.5,0.4] size:80 // 顯示文字,指定位置和字型大小
wait 1 // 等一秒鐘
text "這是標題下方文字" @[0.5,0.6] size:32 in:typewriter // 用打字機效果進來
wait 1 // 等一秒鐘

然後它就吐出一個超漂亮的 MP4 檔案給我,這樣該有多好?

自己做一個動畫軟體

我發現了一個自由軟體專案叫 HyperFrames。它本來是設計讓 AI 做影片用的,我不想要 AI 的部分;但它的影片輸出引擎很不錯,而且直接可以拿來用。

於是我的計畫是:我寫一份語法規格書,然後叫 AI 幫我寫一個編譯器,把「我的簡單語法」翻譯成「HyperFrames 語法」。這樣一來,我就可以用簡單語法來做影片了!

HyperFrames 並沒有內建像 Keynote 一樣漂亮的動態模糊。但這個很好解決,只要輸出超高影格率(frame rate)的影片,再用世界上最重要的軟體 FFmpeg 來合成就行了。

昨天弄了半天,終於有一個能用的 0.1 版了,我把它叫做 WiNoteWiwi 的 KeyNote 替代品)。

成果

下面這個動畫,是完全靠手寫的純文字語法,交給 WiNote 輸出的成果,全程沒有用到其他簡報或動畫軟體,更不需要用滑鼠拖拖拉拉。而且它目前已經可以做到一些連 Keynote 都做不出來的靈活移動囉!

當然,目前還有一些 bug,也還有許多需要調校的地方。我可能要自己先用一陣子,等它變得比較成熟後再把原始碼放出來。

現在有 AI 真是太棒了,以後每個人都可以打造自己要用的工具,不用再被專有軟體綁住啦!

對 AI 圖過敏

· 閱讀時間約 2 分鐘 ┊ 純文字版

八月 BlogBlog 同樂會的主持人 Ikuka,在「一期一會」的主題頁面有個小小的請求:

「(重要)我對 AI 圖非常過敏,眼睛會瞎掉,所以拜託投稿文章的時候不要用生成 AI 圖,這是我唯一的小小請求了!!」

──Ikuka

我自己倒是沒有對所有的 AI 圖過敏,但是我對那種「想占便宜的 AI 圖片」超級反感!

你一定在社群媒體見過那種圖。就是那種餵給 AI 三行 Prompt、二十秒後就能生出來的圖──構圖是預設的、配色是預設的、文案飄出濃濃 GPT 味、最底下一定要配個圓角橫幅──這類圖片的意圖也很明確:貼到 Instagram 上,騙取流量和愛心。

還是想像不出來嗎?我在這邊直接給你一張:

(Ikuka:啊~~眼睛!我的眼睛!!)

這種東西我超不能接受,看到就覺得被侵犯!不論 AI 或非 AI,只要讓我聞到那種「不想花心思和努力,卻想撈到好處」的意圖,我就想立刻逃離現場。

但最絕望的是,這些圖底下竟然真的有很多愛心!這就是被社群媒體訓練出的結果:人們現在已經可以若無其事地把垃圾吃下去,而且不覺得那是垃圾,甚至還會按讚分享!

平台見到這景象一定暗爽到不行:既然便宜的垃圾大家都能吃得津津有味,那何必餵他們有營養的食物呢?何必討好那些「創作者」呢?以後我們平台自己生垃圾出來就好啦!

最後,反而我們這些還有味覺、不吃垃圾的人,還會被嫌「挑食」、「難搞」呢!

(八月份的 BlogBlog 同樂會「一期一會」即將截稿!快把握這次的一期一會!)

如果 YouTube 廣告違法

· 閱讀時間約 4 分鐘 ┊ 純文字版

在 YouTube 上一個棒球 highlights 影片下,看到了以下這些留言:

"In a 12 minute highlight there are 7 commercial interruptions! How ridiculous."

(12 分鐘的精華影片裡塞了 7 個廣告!有沒有搞錯?)

"Really? I paid $25 and split w 5 ppl that have youtube. No ads. Amazing."

(真假?我付了 25 美金,跟五個人分攤,完全沒廣告。太神奇了。)

不,這一點都不 amazing。這就像有人先在你家客廳放了三隻蟑螂,然後再跟你收錢把蟑螂抓走,你付完錢之後竟然感動地說:「哇,太神奇了!」

廣告是人工製造出來的問題,Premium 只不過是讓你買回原本就該有的自由而已。

先不管廣告有多煩。12 分鐘的棒球精華插 7 個廣告,對廣告主來說根本也是災難──因為不可能有人在看,而且觀眾在被打擾的瞬間,還可能把負面情緒連結到品牌上──這筆廣告費的效益,大概跟直接沖進馬桶裡差不多。

但對 YouTube 來說,這一切都很完美。YouTube 並不在乎廣告主的廣告有沒有效,它只希望廣告夠煩──煩到你受不了,不得不乖乖買 Premium。

結果就是:廣告主付錢製造干擾,觀眾付錢移除干擾,創作者則是免費提供被干擾的內容──三方都覺得自己是客戶,其實全部都被當成韭菜。

以上問題的正解是:Brave 瀏覽器,或者 Firefox + uBlock Origin。拜託大家,不要再看廣告了

如果廣告是違法的

想像有個平行世界,在那裡所有「平台方的插入廣告」都是違法的,那會是什麼樣子?

首先,YouTube 失去了「解決廣告很煩」的賣點,Premium 這個產品概念就很難存在了。但伺服器和頻寬還是要錢呀,所以營運成本只能從兩種地方回收:向觀眾收,或向創作者收。

向觀眾收費,YouTube 就會變得像 Netflix;向創作者收,則會趨向 Vimeo1。而不論向誰收費,都可以選擇月費吃到飽,或是以量計費。

我是覺得「以量計費」的話,會導向最理想的網路、最高的內容品質。如果觀眾每看一部片都要花掉點數,那些騙點閱、浪費別人時間的頻道,馬上就會臭名遠播。畢竟,錢包是最誠實的演算法。

而向創作者以量計費,則對整個網路環境更好。如果影片每被播放一次,創作者就要付錢,那些為了跟風蹭流量而拍的東西、AI 垃圾影片騙點閱的標題與縮圖、一天上傳一百支影片的內容農場,會一夜之間全部變成純虧損行為。創作者將會被迫開始思考:這個影片到底想傳達什麼?怎麼樣的人會來看?我對他們產生了什麼影響?

可惜現實是,科技公司利用一般人重視方便的弱點,監控大眾、塞滿廣告,這種商業模式就是現在的主流

哪裡容易有好內容

但以上的胡思亂想,倒是明確指出了一件事:優質的內容,最容易出現在讀者和創作者「至少其中一方有付錢」的情況,尤其是創作者付錢的那一種。

願意自掏腰包、明知道賠本也想要讓你看到的東西,那一定是創作者覺得很重要的訊息吧──沒錯,我就是在說這個 blog

BlogBlog 同樂會八月主題「一期一會」即將截稿啦!想參加的人動作要快唷!也歡迎到歷史的主題文章隨機抽取來發現優質內容!)

Footnotes

  1. https://vimeo.com/upgrade-plan

胡言亂語

· 閱讀時間約 2 分鐘 ┊ 純文字版

1990 年代的電腦益智問答遊戲 You Don't Know Jack 裡面,有一種題型叫做 Gibberish Question(胡言亂語題)。

玩法是,螢幕上出現一句「每個音節都跟正確答案押韻」的無意義句子,然後給你一個提示,你要猜出答案是什麼。例如:

Pin face of tire fake ass. (別針臉的輪胎假屁股?)

提示

It's on a sign in buildings. (提示:它會出現在建築的告示牌)

乍看之下很像在罵人,但答案其實是──

答案

InPin caseface of firetire, breakfake glassass. (火災時,擊破玻璃)

我覺得這個遊戲用中文玩比英文更適合,只要把子音(聲母)拿掉或換掉,並保留韻母和聲調就可以了。在英文的 Gibberish Question 中,字的邊界有時候會移動,但中文一個字就是一個字,超級清楚。

來一題範例,記得題目的每個字都跟正確答案押韻且同聲調唷:

果講掉癡按頂

提示:常在好和弦頻道出現的句子。

答案是──「我想要吃蛋餅」!

最後來玩三題吧:

1. 寶會草你噴起腦(提示:改變作息

第 1 題答案

早睡早起身體好

2. 東筆哈台,龍刀麻孩(提示:過年了

第 2 題答案

恭喜發財,紅包拿來

3. 該遮木科有,科有木該遮(提示:交通安全

第 3 題答案

開車不喝酒,喝酒不開車

如果是平時就有偷聽隔壁桌講話習慣的人,應該會覺得很簡單吧。

一年沒叫外送

· 閱讀時間約 1 分鐘 ┊ 純文字版

赫然發現,寫這篇〈給 Uber Eats 的分手信〉已經是一年多前了耶,這意味著我已經超過一年沒叫過外送食物了!

結果如何?我依然活得好好的,沒外送也沒什麼大不了的呀!