Free Desktop 專案的台語注音輸入表格

有些事情不寫下來,大概就要被時間湮沒了。不過,就算寫了下來,大概還是被時間湮沒。

前陣子在整理一些舊東西,看到在 OpenVanilla 專案中,躺著一個印象中從來就沒有動起來過的台語注音表格(taiwain-minnan-zhuyin.cin),利用台語注音打出漢字。查了一下來歷, 2005 年時,jserv 曾經記下這件事—〈Arne 的台灣地區通俗語言之輸入法〉。

Arne Götje 雖然來自德國,但對中國文化的熱愛,絕對不輸給任何一個土生土長的台灣人,稍早在 blog〈 2005 年摩托學園/Debian User 聚會〉提到 Arne 分享 CJKUnifont 的進度,讓在場與會的朋友都一致讚嘆,實在是太偉大了。已經完成幾個里程碑後,Arne 又繼續處理 Unicode 4.0 CJK 表意文字區域的閩南及客家語文符號,並且在 Debian@Taiwan 的「WishList2005 / 夢幻軟體計畫」做了一個提案…

Minnan IM (台式閩南話輸入法)與 Hakka IM(台式客家話輸入法)現在已經是 FreeDesktop.org 的子計畫,並且獲得 Yang Qing-Chu (楊青矗)先生的《台華雙語辭典》,這是一個以注音為詞鍵,對應到台客語辭典的大型表格,楊先生打算以 GNU GPL 捐出,這是相當好的消息,但是相關的輸入法與平台整合工作需要投入更多的心力去作。

從 2026 年回頭看,當年的確完成了這份表輸入法表格,但怎麼後來沒看到有人用上呢?實際打開一看,好像就看出了原因—這份表格的內容,與輸入法的一些設計通則是衝突的。

Continue reading →

禪與 NPM 維修的藝術

這兩天我拿了一個從 TypeScript 編譯後,又經過 webpack 壓縮過的 JavaScript 檔案,到一個比較老舊版本的 node 環境(node 6)上面執行。一跑下去,出錯。

Node 直接跳出 syntax error 語法錯誤,錯誤訊息則是遇到了不認識的 token 也就是,這份編譯打包過的 JavaScript 中,包含了老舊版本 node 不支援的新語法。

遇到這的錯誤的當下我束手無策。那個編譯過的 JavaScript 裡頭只有一行,但是在那一行當中總共有 8k 個字元,光憑編輯器與肉眼,根本不可能看出(或是不可能想去看)是什麼地方出了錯。光憑印象把把 TypeScript 與 Webpack 的設定改了改,要求輸出成 ES5 時代的語法,沒用。

2026 年遇到問題直接先找 AI 可能已經是起手勢,AI 先跳下去看那個 8k 大小的檔案,鎖定了問題不在我自己的程式中,而是一個外部 depedency,這個外部套件用了非常新的語法,而且我所做的 Webpack 設定並不會套用到這個外部 dependency 上。AI 給的建議是除了 TSC 與 Webpack 外,我還需要再加上 Babel,讓 Babel 把所有的程式都轉成 ES5 語法。

再跑一次,syntax error 消失了,取而代之的是一個 runtime error,錯誤是那個 dependency 用了新版的 RegEx 的語法,在轉譯過程中,導致出現了沒有初始化的變數名稱。既然都用上 AI,那就繼續用到底 — AI 就自己多加了一段 poly-fill,拿一段呼叫舊版 RegEx 的函式,把那段用上新版 RegEx 的部分換掉。好了,終於可以跑起來。

這在沒有 AI 之前,光是要鎖定問題是出在哪個部分 — 自己的程式、打包設定,還是其他 dependency — 對人類來說就十分困難。人類的慣性就是先去看自己熟悉、能夠掌握的部分,比起去看整個打包過的 webpack 以及別人寫的 dependency 那些超過腦力負荷的地方,還是會先去看自己寫的部分,問題其實不在那個地方,但人類的選擇就是會在那消磨時間。你明知道問題也可能會在舒適圈之外,但舒適圈之外,只有滿滿的不舒適。

解決問題的那瞬間,我是那麼強大,又是那麼無力。

Continue reading →

在 Flutter App/Plug-in 中改用 Swift Package Management (SPM)

關心 iOS/macOS 開發、或是從事包括蘋果平台的跨平台開發的朋友,大概都會注意到今年 CocoaPods 官方宣布進入維護狀態,不再積極開發新功能。同時,Flutter 官方也宣布,接下來蘋果平台的 plugin 開始支援蘋果官方的套件管理工具 Swift Package Management (SPM),慢慢要從 CocoaPods 轉移到 SPM。

這樣的改變自然會衝擊到 Flutter 開發者,這樣的衝擊可以分成兩個部分 — 對 Flutter App 的開發,以及 Flutter Plug-in 開發的部分,整個生態系要轉移到 SPM 上會需要一些時間,但已經是大勢所趨。

要怎麼啟用 Flutter 的SPM 支援,可以參考 Flutter 的官方文件,不過,這兩天試著將手上在維護的一些 Plug-in 升級到 SPM 之後,發現一些官方文件上沒有寫清楚的地方。

Continue reading →

在 Windows 上使用小麥注音輸入法

今年上半年度個人在 side project 上的主要心力,大概就是把小麥注音輸入法移植到 Windows 系統上。對我來說,相當於在幾個主要的作業系統上,都有我慣用的中文輸入法,也都比較能夠發揮生產力。

小麥注音是一套從 macOS 系統上開始發展的注音輸入法,在 2022 年的時候,因為幾個朋友平常工作用的機器也不侷限在 macOS 上,所以也開始把自己慣用的輸入工具移植到其他平台上,包括基於 fcitx5 框架的 Linux 版本,而我自己出於好玩,把原本的程式改用 TypeScript/JavaScript 寫了一次,而做出了 Chrome OS 版本,我當時把一台舊 PC 裝上了 Chrome OS Flex,我在那台機器上,也有了順手的輸入法了。

那時候也大概看到了一個技術上的可能 — Windows 上有一套叫做 PIME 的輸入法框架,在這個框架上,可以用 Python、或是可以用 Node 執行的 JavaScript 的輸入法,既然小麥有一個以 TypeScript/JavaScript 寫成的版本,那就有透過 PIME 移植到 Windows 的可能。既然技術上可行,後面就是資源的問題了,人到中年能夠用在工作與家庭以外,還能投入到其他出於興趣的專案上的時間實在不多,大概是在過年期間,才有時間看一下 PIME 的程式,然後讓小麥的程式在 PIME 上面動了起來。

Continue reading →

讓注音輸入法支援 HTML 的 Ruby 標示

不久(ㄅㄨˋ ㄐㄧㄡˇ)之前(ㄓ ㄑㄧㄢˊ)一時興起(ㄧ ㄕˊ ㄒㄧㄥˋ ㄑㄧˇ),在(ㄗㄞˋ)小麥注音(ㄒㄧㄠˇ ㄇㄞˋ ㄓㄨˋ ㄧㄣ)輸入法(ㄕㄨ ㄖㄨˋ ㄈㄚˇ)的(ㄉㄜ˙) fcitx5 移植(ㄧˊ ㄓˊ)版本(ㄅㄢˇ ㄅㄣˇ)上(ㄕㄤˋ),加上(ㄐㄧㄚ ㄕㄤˋ)了(ㄌㄜ˙)一個(ㄧ ㄍㄜ˙)實現(ㄕˊ ㄒㄧㄢˋ)性(ㄒㄧㄥˋ)的(ㄉㄜ˙)功能(ㄍㄨㄥ ㄋㄥˊ):在(ㄗㄞˋ)打開(ㄉㄚˇ ㄎㄞ)特定的(ㄊㄜˋ ㄉㄧㄥˋ ㄉㄜ˙)偏(ㄆㄧㄢ)號(ㄏㄠˋ)設定(ㄕㄜˋ ㄉㄧㄥˋ)之後(ㄓ ㄏㄡˋ),在(ㄗㄞˋ)輸入(ㄕㄨ ㄖㄨˋ)文字(ㄨㄣˊ ㄗˋ)時(ㄕˊ),如果(ㄖㄨˊ ㄍㄨㄛˇ)不是(ㄅㄨˊ ㄕˋ)按下(ㄢˋ ㄒㄧㄚˋ) Enter,而是(ㄦˊ ㄕˋ)按下(ㄢˋ ㄒㄧㄚˋ) Ctrl 與(ㄩˇ) Enter 按鍵(ㄢˋ ㄐㄧㄢˋ),那麼(ㄋㄚˋ ㄇㄜ˙),輸入法(ㄕㄨ ㄖㄨˋ ㄈㄚˇ)就不是(ㄐㄧㄡˋ ㄅㄨˊ ㄕˋ)只(ㄓˇ)將(ㄐㄧㄤ)中文(ㄓㄨㄥ ㄨㄣˊ)輸入(ㄕㄨ ㄖㄨˋ)到(ㄉㄠˋ)各種(ㄍㄜˋ ㄓㄨㄥˇ)文書(ㄨㄣˊ ㄕㄨ)軟(ㄖㄨㄢˇ)替(ㄊㄧˋ)中(ㄓㄨㄥ),而是輸入(ㄕㄨ ㄖㄨˋ)帶有(ㄉㄞˋ ㄧㄡˇ)注音(ㄓㄨˋ ㄧㄣ)標示(ㄅㄧㄠ ㄕˋ)的(ㄉㄜ˙)中文(ㄓㄨㄥ ㄨㄣˊ),呈現出來(ㄔㄥˊ ㄒㄧㄢˋ ㄔㄨ ㄌㄞˊ)的(ㄉㄜ˙)效果(ㄒㄧㄠˋ ㄍㄨㄛˇ),就像(ㄐㄧㄡˋ ㄒㄧㄤˋ)你(ㄋㄧˇ)現在(ㄒㄧㄢˋ ㄗㄞˋ)看到(ㄎㄢˋ ㄉㄠˋ)的(ㄉㄜ˙)文章(ㄨㄣˊ ㄓㄤ)一般(ㄧ ㄅㄢ)。

Continue reading →