跳至主要内容

長期支援(LTS)

· 閱讀時間約 5 分鐘

最近看到自由軟體資料庫工具 SQLite 的「長期支援政策」網頁。在這個連手機 App 都能一夜消失、社群帳號說封就封的年代,SQLite 居然霸氣地說要支援他們的軟體到 2050 年(至少,他們嘗試要這麼做)。

官網上寫:

The intent of the developers is to support SQLite through the year 2050.

(開發者們的目標是支援 SQLite 到 2050 年。)

At this writing, 2050 is still 25 years in the future. Nobody knows what will happen in that time, and we cannot absolutely promise that SQLite will be viable or useful that far out. But we can promise this: we plan as if we will be supporting SQLite until 2050. That long-term outlook affects our decisions in important ways.

(在寫這篇文章的時候,距離 2050 年還有 25 年。沒人知道在這段時間內會發生什麼,我們無法完全保證 SQLite 真的能在那麼遠的未來仍然可用且有用。但是,我們可以承諾的是,我們打算像是要支援 SQLite 到 2050 年那樣子去規劃。這個長期的目標對我們的決策有著重要的影響。)

── https://www.sqlite.org/lts.html

資訊

許多軟體都會有長期支援(Long Term Support, LTS)版本,就是開發者會承諾在一段時間內持續更新和修復問題,讓你可以不用急著更新到下一版,有點像你買東西會有保固期一樣。

通常這種支援能維持五年就算是很「長期」了,但 SQLite 打算支援 25 年,直到 2050 年。

SQLite 的長期支援策略

SQLite 在官網上列出了幾項達成長期支援的策略,我覺得根本可以當作「人生經營指南」來用:

🌍 跨平台相容性:SQLite 在任何有 C 語言編譯器的地方(也就是幾乎所有作業系統)都能跑。這就像是一個人在「任何有網路的地方」就能工作一樣。想想看:自己有沒有過度依賴某個特定平台、工具或環境?如果明天要搬到另一個城市或國家,還能靠現有技能維生嗎?

🧱 穩定的檔案格式:SQLite 的資料庫檔案不只可以在不同平台間無痛搬移,並且還有「向後相容性」,30 年後的版本依然能讀取今天建立的檔案(而不會像我用 Flash 做的《WiwiStudio 音樂能力測驗》一樣被強迫淘汰)。想想看:自己最愛的社群媒體平台能經營到 2050 年嗎?作品集檔案在 2050 年還能被打開、被理解嗎?

✈️ 航空級測試:SQLite 的程式碼會在多個平台、多種編譯器下反覆測試。不只是為了穩定性,更是為了當以後想加入新功能時,只要能通過既有的測試,就可以確定不會破壞原有的基礎。想想看:自己有沒有建立「核心價值」,當新的情況出現時,能夠依循它來確定自己不會走偏?

📝 詳盡文件、大量註解:SQLite 有詳盡、公開的說明文件,程式碼中有 35% 是註解,讓後代的人能夠完整了解它的運作模式,進而能夠維護它。想想看:自己的經驗和知識,能夠有效地傳承給別人嗎?當朋友詢問建議時,如果能有個 blog 連結能丟給對方說「我之前寫過這個問題」該有多好?

🛟 災難規劃:SQLite 的程式碼分散在全球各地的伺服器上,開發者住在世界各地,就算發生「洲等級的災難」,SQLite 也能存活。想想看:自己的收入來源夠不夠分散?遇到災難(失業、生病、市場崩盤)時有足夠的緊急預備金嗎?

🕰️ 老派:這是我最愛的一點。SQLite 不追隨最新潮流,只專注在打造經得起時間考驗的程式碼。想想看:自己是在建立長期資產,還是在隨著潮流奔波、白忙一場?今天關注的熱門話題,在 2050 年時還會有人 care 嗎?

林迪效應的預言

SQLite 的第一版發布於 2000 年 8 月 17 號,已經即將要 25 年了。根據林迪效應(Lindy Effect),一項科技的預期剩餘壽命差不多等於它已經存在的時間長度;既然 SQLite 已經活了 25 年,那麼它再活 25 年到 2050 年的機率應該是相當高的。

額外的溫馨提醒:今天就下載你的社群媒體帳號備份,把重要內容搬到自己的網站上,不要再拖了!否則到了 2050 年,你就只能跟孫子說:「爺爺/奶奶當年的創作都消失在一個叫做 Instagram 的遠古平台上了,呵呵,想當年我還有一萬多個追蹤者呢!」)

What's On Your PowerBook?

· 閱讀時間約 2 分鐘

翻到這張 1994 年的 Apple PowerBook 經典廣告。兩個人在沙漠中拿著筆電,旁邊的字寫著「What's on your PowerBook?」。

  • ✍️ 左邊的 Greg Ketchum(作家)的清單有:最新的文案修訂、新活動的標題、故事板、我的日記、從 David Mamet 戲劇中挑選的獨白、朋友的酷語錄、下一部偉大美國小說的三頁草稿、Microsoft Word、幻想足球聯盟統計數據、報稅的東西、媽媽的烹飪秘訣、小孩的照片、俚語辭典、履歷表⋯⋯
  • 📸 右邊的 Michael O'Brien(攝影師)的清單則是:這禮拜拍攝的行程表、位置檔案、合約、模特兒發布表格、估價單、地球上每個位置的日出日落時間、有興趣的新鏡頭清單、給媽媽的信、Adobe Photoshop、CalendarMaker、髮型師和化妝師的資訊、給《國家地理雜誌》的提案、噁心的駱駝照片、我的作品集、Kinky Friedman 的歌詞⋯⋯

其實這個「What's on your PowerBook」的系列廣告也有電視版(YouTube 連結)。在 30 秒廣告的最後,蘋果的彩色 Logo 出現,下面黑底白字寫著「What's on your PowerBook is you.」。

那麼,三十年後的現在,如果問「What's on your iPhone?」會發生什麼事?

大部分人的回答可能會是:「呃⋯⋯什麼都沒有,全部都存在雲端。」 🤣

輸入系統

· 閱讀時間約 4 分鐘

輸入系統越先進,你越需要用自由軟體保護自己。

祕密只要不說出來就好?

一開始我們用鍵盤打字輸入,隱私保護很簡單:就算你不完全信任微軟、蘋果這些專有軟體只要不把見不得人的事打進去就好。手指不動,祕密就安全。

接著,我們有了語音輸入功能,隱私保護也很直覺:不想讓電腦知道的事,不要說出來就好。不過,即使對於祕密守口如瓶,你的聲音特徵、語速、說話習慣等,還是會透露出許多你不想讓別人收集的資訊。

看不見的竊聽者

其實,在你的裝置上還潛伏著許多隱形的「輸入管道」。像是 GPS、加速度計、藍牙和 wi-fi 訊號等等,它們一直都在偷偷地把你的資訊餵給背後的專有軟體,大部分都是你無法控制的

現在,如果你是 Windows 用戶(為什麼到現在還要虐待自己),Windows 11 的 Recall 功能1會貼心地錄下電腦螢幕上的所有畫面,就像是有一個偷窺狂 24 小時坐在你背後,把你做的每一件事情都拍照存檔,還理所當然地辯稱是「幫助你回憶」。面對這種情況,如果你不信任微軟的專有軟體,唯一的自保方式只剩下⋯⋯不要用 Windows?但誰知道 AppleGoogle 在自家的作業系統上又埋了什麼地雷呢?

神經輸入系統

但這還不是最恐怖的。想像不久的將來,我們進入了「神經輸入系統」的時代:你的所有思緒將飛速化為文字出現在螢幕上,思考的速度就是打字的速度。這時候會發生什麼?

想像這樣的場景:你正在跟一個女同事談論工作上的事情,可是你忘記關掉背後螢幕上的「神經輸入視窗」。於是那該死的視窗開始直播你的內心戲:「哇她今天穿這樣好正啊腿好漂亮我好想 @#$!⋯⋯」,然後整個心理犯罪現場還被 Windows Recall 完整錄影存檔,準備在法庭上「幫助你回憶」。

到了這個階段,所有不想讓電腦知道的事都無處可藏。你連想「我不想讓電腦知道這個」的時間都沒有,因為連這個想法本身都已經被讀取了!如果某天政府、公司或日常的雲端服務,開始要求你必須安裝這樣的神經輸入系統呢?

更可怕的是,如果以後神經/腦機系統發展到能夠雙向溝通,專有軟體就有可能讓廣告商直接把廣告「注射」到你的大腦裡!你以為你突然很想喝可樂是因為天氣熱?其實是因為可口可樂公司透過專有作業系統在你的頭腦裡放了一個廣告。

未來的廣告不再需要打斷你,而是直接成為你的想法2!你如果現在不 care,到那時「洗腦」這個詞就不再是比喻,而是字面上的意思了。

用自由軟體保護自己

現在就要開始建立「質疑專有軟體」以及「用自由軟體保護自己」的意識,盡可能選擇運作方式透明公開的工具。不要過於依賴專有軟體、別讓專有軟體「讀取/寫入你的心思」(不論是以什麼形式),不管它宣稱能帶來多少方便。

畢竟,身為一個正常人類,頭腦裡還是該保留一些見不得人的壞壞想法才有樂趣呀!

Footnotes

  1. https://learn.microsoft.com/zh-tw/windows/ai/recall/

  2. 其實現在的演算法不也是嗎?只是沒那麼直接而已。

做音樂不好玩

· 閱讀時間約 4 分鐘

Suno AI(音樂生成服務)的 CEO Mikey Shulman,在接受 Podcast 訪問的時候丟出了驚人言論:他認為大部分人並不享受做音樂的過程。

YouTube 連結,以下引言在影片 23:17 處)

"And so that is first and foremost giving everybody the joys of creating music... It's not really enjoyable to make music now. It takes a lot of time, it takes a lot of practice, you need to get really good at an instrument or really good at a piece of production software. I think the majority of people don't enjoy the majority of the time they spend making music."

(所以首要任務是讓每個人都享受創作音樂的樂趣⋯⋯現在做音樂真的不好玩。你需要花很多時間,需要很多練習,需要學習演奏樂器和操作編曲軟體。我想大部分人不享受他們花在做音樂上的大部分時間。)

──Mikey Shulman 在 20VC Podcast

我的天,你在說什麼啊?

這太麻煩了,不好玩

想像一下,如果我把他的邏輯套用到其他事情上會發生什麼。

  • 🕹️ 打電動:現在打電動真的不好玩!你需要看著螢幕、閃躲敵人、收集道具,還要拿著搖桿緊張地按來按去⋯⋯太麻煩了!大部分人其實不享受玩遊戲的過程,我們應該讓 AI 直接幫你破關,這樣每個人都能體驗「遊戲的快感」。
  • 🍿 看動畫:現在看動畫真的不好玩!你需要一集一集追、要等更新、情緒要隨著劇情波動,還要準備零食和飲料來配⋯⋯太麻煩了!大部分人其實不享受看動畫的過程,我們應該讓 AI 直接告訴你結局,這樣每個人都能體驗「追劇的樂趣」。
  • 💕 談戀愛:現在談戀愛真的不好玩!你需要曖昧、要找話題聊天、要花錢約會,晚上還要一起進行床上運動⋯⋯麻煩死了!大部分人其實不享受戀愛的過程,我們應該讓 AI 直接安排你們結婚生子,這樣每個人都能體驗「愛情的美好」。

這就是我們的 Suno AI CEO,Mikey Shulman 對音樂創作的想法,他覺得全世界花時間練琴、寫歌、做音樂的人都是受虐狂。

魔術方塊與籃球的哲學

在前陣子整理 blog 舊文的時候,發現我曾經學會解過魔術方塊(可惜現在早就忘了)。那時候我看著 YouTube 教學影片,學習了幾種公式轉法,第一次把六面解出來真的覺得超有成就感(於是寫了這篇 blog)。

如果當時 Mikey Shulman 突然出現,直接塞給我一個已經完成的魔術方塊,我大概會滿頭問號地說:「然後呢?」

打籃球也是一樣的道理呀!就算現在有一個投籃命中率是 100% 的機器人,我也不會想要買它來代替我去公園投籃。即使我的三分球命中率慘不忍睹(還是無人防守的情況下),我還是想要親自體驗球從手中投出去的感覺(當然,出手的瞬間還要喊一聲「Curry!」才算是完整的體驗)。

完成品?早就滿街都是了

做音樂就像解魔術方塊和打籃球。不論是在鋼琴前練習蕭邦的作品,還是在編曲軟體裡對聲音做各種奇怪的處理,我們要的從來就不是一首「完成品」。世界上早就已經有無數超便宜的「完成品」了,我們真正想要的是「玩」跟「做」的過程本身。

其實我很早就感受到「音樂成品不值錢」的現實了。從串流平台微薄分潤,到商用素材庫裡堆積如山、供過於求的罐頭音樂,現在又加上了 AI 音樂生成器,音樂成品的價值已經被稀釋到趨近於零。

世界上不缺音樂,缺的是「玩音樂的樂趣」。這就是為什麼我從來沒把重心放在製作「完成品」上,而是專注在音樂教學。我相信「引導別人了解音樂、體會音樂樂趣」的能力,才是將來的音樂人們最重要、也最有市場價值的技能。

(說到「享受音樂的樂趣」,我的兩個課程《鋼琴技巧急診室》和《即興幼幼班》絕對比 Suno AI 更能讓你享受音樂的樂趣。畢竟,用自己的雙手流暢地在鋼琴上彈出有靈魂的音樂,比當個 AI 垃圾消費者好玩太多了!)

離線演講

· 閱讀時間約 2 分鐘

前陣子看到一個網路上的演講影片(真人、有現場觀眾的實體演講),影片中的講者在簡報途中,想要播放一個短短的影片來解釋論點:

  • 他先是退出了簡報播放模式,讓觀眾看到編輯模式下的所有投影片縮圖,包含後面還沒講到的內容。劇透警告!
  • 接著,他切到開著一大堆分頁的 Chrome 瀏覽器視窗,找到了其中一個分頁,想要播放的影片是內嵌在網頁裡面。
  • 他按下內嵌 YouTube 播放器的播放按鈕,等待它轉轉轉緩衝五秒鐘。
  • 影片開始播放了,但擠在小小的內嵌播放器裡。
  • 幾秒鐘後,講者按了全螢幕按鈕,把影片倒回最前面重新開始。
  • 播完了總長才 30 秒的影片後,講者切換回(目前仍在編輯模式的)Powerpoint 視窗,按下播放按鈕,繼續演講。

想像一下,如果 Steve Jobs 在蘋果發表會上的演講這樣搞,蘋果股價大概會當場崩盤吧!

雖然這講者其實講得還不錯,但這種新手等級的技術問題徹底毀掉了演講的節奏,觀眾前面好不容易堆積的興奮感和好奇心瞬間消散。

別讓這種事發生在你的演講上!解決方法很簡單:把演講過程需要播放的一切媒體下載下來,離線準備好,直接內嵌進簡報裡!

  • 📹 YouTube 影片:用 yt-dlp 下載
  • 🎶 音樂:如果原本也是在 YouTube 上,一樣用 yt-dlp 下載,然後用 ffmpeg 轉成 .wav 檔案
  • 📸 圖片:就在瀏覽器中按右鍵另存,或者螢幕截圖也行
  • 💻 網頁:如果是不需要互動的網頁,就截圖就好;如果要互動,也可以事先操作一遍錄製成影片

恭喜你,下次就算場地的 Wi-fi 突然掛掉,你的演講依然能完美流暢地完成!不用謝我沒關係!

破碎像素地牢

· 閱讀時間約 6 分鐘

我之前曾經在 blog 上推薦過 Powder 這個地下城探險遊戲,當時我給了它很高的評價。但現在,Powder 抱歉,我想我找到接替你的新歡了,那就是 Shattered Pixel Dungeon(破碎像素地牢)。

(這是「Shattered Pixel Dungeon」的標題畫面,以下簡稱為「SPD」)

Shattered Pixel Dungeon(破碎像素地牢)

比起 Powder 的樸實無華,SPD 相當精緻完整,有非常精美的角色繪圖、場景設計、很不錯的音效(但我都把音樂關掉)以及流暢的像素風動畫。

SPD 乍看之下跟 Powder 以及其他的地下城探險類 Roguelike 遊戲很像。但 SPD 最令人驚豔的是,它的設計「極其複雜」、變化超級多,但是使用者界面卻設計得非常好用,不會讓人不知所措。需要幫助時,遊戲內也都有完整的說明。

什麼是「Roguelike 遊戲」?

在 1980 年有一個遊戲叫做《Rogue》,它採用了一種在當時很創新的玩法:

  • 隨機生成:每場遊戲的關卡都是隨機產生的,敵人的位置、道具分佈都不一樣,玩家永遠不會遇到兩次完全相同的體驗。
  • 永久死亡:角色一旦只要死亡就要從頭開始,沒有復活的機會。但這正是它的魅力所在,每次失敗都能讓玩家對遊戲世界有更多的認識,累積經驗後下一次就會變得更強。

這些元素組合起來,就成了一種有高度可重玩性的遊戲體驗。後來我們就把「玩法類似《Rogue》的遊戲」稱為「Roguelike」。

SPD 在玩什麼?

SPD 的目的很簡單:下到地下 26 樓去取得一個寶物,就這樣。

當然不是走進電梯裡按 B26 按鈕就好,你可是要一步一腳印走下樓,而每一層樓都充滿著想要殺死你的敵人。每五層樓是一個區域,從最上面(1-5 層)的下水道,一路下探到惡魔洞穴(21-25 層),每個區域都有不同的敵人和挑戰。

遊戲看似很單純,就是走來走去,殺死敵人,想辦法更下一層樓,但是它有極深的策略深度。雖然上手簡單,要精通的話卻需要很長的時間。

(我站在第 26 層的最終寶物前的英姿)

「一小部份」遊戲系統的介紹

我前面說 SPD 的設計「極其複雜」真的不是客套話,以下只是其中遊戲系統的冰山一角。

  • 🧪 藥水:有許多不同功能的藥水,例如治療藥水、結冰藥水、火焰藥水、毒氣藥水等等十幾種。每次遊戲開始時,藥水的顏色跟功能都會隨機分配。你不會知道手上這瓶「黃色藥水」的功能是什麼,你可以直接喝喝看,但大部分時候還是建議不要這麼做。
  • 📜 卷軸:在地下城可以撿到各種卷軸(也是有十幾種),閱讀它們可以產生各種神奇效果,像是消除詛咒、升級裝備、瞬間傳送等等。同樣的,你不會知道手上的卷軸功能是什麼,除非你找到那個「可以辨識其他卷軸的卷軸」。
  • ⚔️ 武器:遊戲裡有很多樣的武器,每種都有獨特的戰鬥風格。有些武器速度很快,在一回合內就能攻擊數次(像是拳套);有些攻擊範圍很大,可以打到三格外的敵人(像是鞭子)。但要小心,有些武器可能被詛咒,一旦裝備上就拿不下來,而且還會很難用!
  • 🪄 魔法棒:也有好多種魔法棒,有可以噴火的、讓敵人錯亂的、在地上長植物困住敵人的。
  • 🏹 投擲武器:你可以丟石頭、丟飛鏢來從遠方攻擊敵人,有個職業還可以射箭。
  • 👕 盔甲:你可以光著上身、穿布做的衣服、穿皮衣、或是金屬盔甲。但如果角色的力量不夠,是沒有辦法駕馭厚重的盔甲的。當然,有些盔甲也會被詛咒,不要看到衣服就隨便穿!
  • 🐍 戰鬥系統:地下城裡的每種敵人都有自己的特性,需要用不同策略應付。例如下水道蛇的閃避能力很強,必須要出其不意攻擊才能擊中;到後面還有會給你「死亡凝視」的漂浮眼球,看到它就只能快逃了。關卡中各種不同的地形都有戰術意義,像是水面可以滅火或洗掉髒污,草地可以找到補血的露水,或是你也可以縱火燒死敵人。

(被老鼠和蛇圍攻了)

你覺得以上已經很複雜了嗎?我才提到其中一點點而已!這遊戲還有「煉金系統」可以合成特殊藥水、卷軸和魔法石,能夠合成的物品又有數十種不同的功能。在地上撿到種子可以種植,十幾種植物各有各的功能。殺死某些怪物後會得到怪物的肉,你可以用火烤熟或是冰凍起來。

它還有六種職業、每個職業還有五個子職業!每種職業累積經驗值後升級時會獲得天賦點(Talent Point),可以自選增加某些能力,改變玩法風格。力量系統也很有趣,角色一開始的力量是 10,但如果找到力量藥水可以提升力量,讓你能使用更強大的裝備。

完美的手機遊戲

這個遊戲我真的激推!而且它是開放原始碼軟體,所有主流電腦作業系統和手機系統都支援,除了 iOS 版本之外都免費(iOS 版也只要五塊美金而已,完全值得)!根本就是太佛心!我強烈推薦用手機玩,因為它的觸控介面設計得非常好用。

SPD 根本就是完美的手機遊戲:可以完全離線運作、開放原始碼、無廣告、自動存檔、隨時可以打開來玩、隨時可以關起來;可以玩一分鐘打發零碎時間,也可以玩兩小時一路下到最底層;每次玩的體驗都完全不同,永遠保持新鮮感。

到官網 https://shatteredpixel.com/ 看更多,下載它吧

不過,下載 SPD 前還是三思而後行。因為它可能會毀掉你的正常作息,讓你在深夜時想著「再下一層樓就睡」,然後發現天已經亮了。

專有軟體必變爛理論

· 閱讀時間約 3 分鐘

還記得我以前介紹過的 Google NotebookLM 嗎?它是一個很有趣的服務,你上傳任何文件,它就可以產生一男一女對話的 Podcast,討論你上傳的文件給你聽,幫助你更了解主題。非常好用!

總之,今天登進去 NotebookLM 時,發現主畫面最上面出現了一個新的區塊──「精選筆記本」。結果,根本就不是什麼「精選筆記本」咧,它就是一堆廣告。而且這東西佔據了半個螢幕的空間,把我真正要用的筆記本全部推到下方。

NotebookLM 的「變爛化」悄悄開始了。

(Google:這不是廣告喔!這是「新功能!精選筆記本!」。)

這就是悲傷的現實:幾乎所有我曾經愛用過的專有軟體和雲端服務,現在全部都變得很爛、很煩或很貴。真的,我是說全部,幾乎沒有例外的:MacOSWindowsiOSEvernote、Google Drive、Gmail、Google Chrome、YouTubeSpotifyLINE、LastPass、Reason、Photoshop⋯⋯

Enshittification(大便化)

其實這種現象有個專有名詞,叫做「Enshittification」(大便化、變爛化)。這個詞是由作家 Cory Doctorow 提出的,用來描述網路平台和軟體服務的生命週期:

  • 💕 第一階段,對使用者好:軟體剛推出時,超好用、超乾淨、使用者體驗極佳。
  • 💰 第二階段,對商業客戶好:累積了大量用戶並將他們綁架後,平台開始對廣告商好,到處狂塞廣告,使用者體驗開始大幅下降。
  • 🪓 第三階段,收割韭菜:等到商業客戶也被綁架後,平台開始兩面通吃,從所有人身上榨取最大價值。這時產品會變得超爛,但因為大家都用習慣了,資料都在上面、朋友都在用、流量都靠它,根本跳不走,就只能咬牙忍受。
  • 🪦 第四階段,平台死亡:平台變得實在太爛、太貴、太煩人,最終被新的競爭對手取代,重新開始第一階段的循環。

專有軟體必變爛

根據自然定律,專有軟體和雲端服務「一定會」背叛你,只是時間早晚的問題而已。你喜愛的專有軟體或服務,目前在哪一階段呢?

愛要專一,軟體使用要劈腿。一定得使用專有軟體和服務的話,務必請腳踏兩條船,準備好備胎。

自己來

· 閱讀時間約 2 分鐘

Footnotes

  1. https://www.ftvnews.com.tw/news/detail/2025731S11M1
    民視新聞網:Meta 為打擊詐騙實施「無差別」封殺政策,導致超過三千名正當粉專版主遭永久停權。影評人「無影無蹤」因粉專被詐騙集團標註,在後台移除標籤時反被 Meta 誤判為假帳號,經營 10 年、15 萬粉絲的粉專瞬間消失,每月損失約 10 萬元收入。

Code.Wiwi.Blog

· 閱讀時間約 1 分鐘

之前如果有程式碼要分享,我都是放在 GitHub。但是既然現在有 Wiwi.Blog 這個,何不也放一份在自己這裡呢?

所以剛剛用 Gitea 架了 Code.Wiwi.Blog,把我在 GitHub 的程式碼全部備份過來了。

Gitea 很讚耶!程式好乾淨、安裝簡單,介面幾乎跟 GitHub 一樣。內建直接從 GitHub 「移民」的功能,搬家超容易!

在網站上方和頁尾新增了「程式碼」連結,可以直接連到我的 Gitea 頁面。

撲克牌密碼

· 閱讀時間約 10 分鐘

你是一個間諜(代號「蛋餅俠」),正在執行一個機密任務。目標:傳遞一條重要訊息「九點老地方見面,幫我買蛋餅」傳給你的搭檔(代號「豆漿哥」)。

但情況比預想中的更棘手。你身在人潮湧動的酒吧中,到處有形形色色的目光在遊走,任何一點疏忽都可能暴露你的身份。你該如何把訊息傳出去?

  • 寫小紙條?太冒險了,一旦被發現,多年的臥底生涯就毀於一旦。
  • LINE?別鬧了,你以為政府的監控系統是吃素的嗎?

正當你陷入沉思時,眼角瞄到桌上放著一盒撲克牌。你若無其事地走過去,假裝整理桌面,順手把牌拿了出來。

在其他客人眼中,你只是一個無聊在把玩紙牌的上班族,但其實你的雙手正以訓練有素的技巧,重新排列著這 52 張牌。排列完後,你把牌重新收回盒子裡放在桌上,起身離開酒吧,就像什麼都沒發生過一樣。

半小時後,豆漿哥走進店裡,看似隨意地拿起那副牌,看了幾眼之後,他嘴角微微上揚。

晚上九點整,老地方。豆漿哥準時出現,手裡拿著兩個熱騰騰的蛋餅。

這是什麼爛故事?

不重要啦。重點是蛋餅俠是怎麼做到的。

當然不是直接在牌上做暗號(例如寫字或折起來什麼的),那太明顯了。而是直接用撲克牌的「排列方式本身」來儲存訊息!

一副撲克牌的 52 張牌,有超級多種可能的排列順序,精確地說是 52!(52 的階乘),大約 8 ⋅ 1067 種。既然牌的排列順序本身,就包含了這麼多資訊,那我們有沒有可能把祕密訊息編碼成撲克牌的順序,然後拿到牌的人就可以靠這個排列順序,解碼出原本的文字呢?

Lehmer Code

答案當然是可以的!

有個叫做 Lehmer Code 的演算法,可以把任意的排列順序對應成獨一無二的數字。

簡單來說,52 張牌的每一種排法,都可以用 Lehmer Code 轉換成專屬的數值,而這個數值又可以進一步編碼成文字訊息。反過來操作,任何文字也能先轉成數字,再透過 Lehmer Code 對應到特定的排序。

這樣一來,我們就可以將撲克牌的「排列順序」作為訊息載體了。

舉個實例

例如,你想傳送「HELLO」這個訊息給朋友。具體的步驟如下:

  1. 文字轉數字:把「HELLO」用 ASCII 或其他編碼方式,變成一個超級大的數字,例如:310939249775(這只是舉例,實際數字會有 68 位數)。
  2. 數字轉排列:用 Lehmer Code 把這個巨大數字對應到一個 52 張牌的特定排列順序,例如 紅心K,黑桃7,方塊A,梅花Q⋯⋯
  3. 實際排牌:把這個順序實際用真的牌排出來。
  4. 傳遞訊息:把這副「看似隨機排列」的撲克牌交給朋友。
  5. 解碼:朋友收到牌後,將完整的排列順序用 Lehmer Code 反推回那個巨大數字 310939249775,再將這個數字以約定好的文字編碼方式轉為文字,就得到「HELLO」了!

撲克牌編碼程式

網路上已經有個叫做 Asher Falcon 的人把這個概念實作出來了,你可以讀他的部落格文章了解他是怎麼做的,也可以到這個網址直接使用他的編碼程式。

但 Falcon 的版本有個致命的缺陷:為了讓傳遞的訊息夠長,它只使用 5 個位元來儲存每個字元。也就是它的訊息內容只能使用 .,-\"/abcdefghijklmnopqrstuvwxyz 這 32 個字元的其中之一,連阿拉伯數字都不能用。身為一個國際化的現代間諜,這種限制怎麼能接受?

所以我重弄了一個使用 UTF-16 編碼的版本,每個字元用 16 位元來儲存,可以支援絕大部分的中文字和表情符號,這樣用一副牌還是能夠放進長度 14 字元的訊息1。用我的版本,就算是要傳「🥞早安我ㄉ朋友おはよう🌸」這樣的訊息也沒問題唷!

原始碼放在:https://code.wiwi.blog/wiwi/text-to-cards

玩玩看!

使用方式:

  • 編碼:輸入一個字串(14 個字元以內),程式會輸出 52 張撲克牌的排列。
  • 解碼:輸入 52 張撲克牌的排列(例如:As 3d Th 8c⋯⋯),程式會輸出訊息字串。

透過這個程式,你就可以把任何文字訊息藏在一副撲克牌裡面了!

試試看解碼我的訊息吧:

As 3s Js 6c 7s 9s Ad 2d 7d Jc 9c 2s Jd
4h 8s Kc 4c 4s Qc Kh 7c 5h 3d 7h 5s Td
9h 5d Ac Qh 6s Kd Th 3h 9d 2c 6h Ts Jh
5c 8d 6d 3c Qs 8h 2h 4d Ks Qd Tc Ah 8c
0 / 14 字元
等待輸入文字...
等待輸入撲克牌...
準備就緒

Footnotes

  1. 52 張撲克牌的排列順序資訊約是 224 位元,每個字元使用 16 位元的話剛好可以放入 14 個字元。