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