The Old Blog Archive (Traditional Chinese), 2004-2009

Archive for October, 2005

《賊模賊樣》:印度的「犯罪遊牧部落」及其劇場

博士論文題目以台灣原住民的語言及教育為主題的 Kerim Friedman ,日前和他太太發表了一部記錄短片 Acting Like a Thief ,談論的是印度的在英國殖民時期被稱為「犯罪部落」(criminal tribe)的查拉族人(Charas)以及他們的劇場。zonble 有相當簡明但完整的介紹文章。請大家多多支持 Kerim 後續的拍攝計劃

被丟棄的技術

才正好在整裡家裡的時候,就看到了 tseching 的這篇文章。說來很感慨,當年為了追隨別人的流行,為了一個 “me too”,先是幫家人買了 MD,隔了一年又終於有了自己的 CD player。我其實已經距離這樣的流行很遙遠很遙遠──所有 Sony 早幾代的播放器,我全沒趕上也全不在乎,怎麼會後來竟變成了一個盲目追隨那 “me too” 「我也想要」這樣的人呢?

總之當時也花了一些錢,買了一個完全是封閉標準的東西(MD,以及 Sony 的 CD-MD player 的資料傳輸光纖)。我從來都不是把音樂帶著走的人,更不用說工作時其實很習慣於完全的安靜。因此到了研究所還模仿別人的街頭風,只招得不倫不類的自我評價。更何況機器一下就壞了,維修費貴得嚇人。兩台 player 都壞了之後,那些當初辛苦轉錄的 MD 片有如廢物,封閉標準為害至深,莫此為甚。雖然,我看看家裡還有更多 Betamax 時代的東西,更是只能苦笑。

都說時代浪潮不留情,但是至少在 MP3 的大浪這件事,我還是很盲目地附和商業雜誌的說法:Sony 沒有擁抱開放標準,大概是這十年來最致命的策略錯誤了。

「青年啊!你的命運是負債」

昨天晚上跟一位朋友聊到我最近寫的東西,她說我的政治評論,還有對語言政策評論的文字裡,有一些憤怒在。後來想想,說我憤怒確實也是真的。這其中有很多是一些親身經歷過的類似被羞辱(主要是語言認同上的),或者就只是在體制中,有一種被騙、覺得時間或生命被浪費掉的感覺。

結果我聽到了 zonble 的這首歌。其實在和那朋友聊到憤怒之前的下午,zonble 已經先和我們提過這首歌的歌詞,笑得東倒西歪。結果第二天晚上連曲子都有了。我依然笑得東倒西歪,總覺得,這種具有「粗糙到糟糕」的質感的歌(我覺得那只是 zonble 自嘲之詞),竟然很有我們這一整代人的寫照。想要覺得生氣,卻覺得其實荒唐、可愛、好笑極了。Laughter is better than anger.

所以,這就是我們的時代,這個前進兩步,後退三步,還以為已經做到很多的、被浪費掉的時代。這時代的質感粗糙到糟糕,然後負了一堆債。

歌詞、歌曲可以從 zonble 的 blog 取得。

To Watch You Grow, Baby: 記 OpenVanilla 週歲前

2004年10月23日OpenVanilla 的誕生日。那一天傍晚,gugodzonble 問我,要不要把當時還在改寫中的 CarbonInputMethod 帶去多鬆裡看看狀況。我大約是晚餐時間過去的。大約在那之前兩週,我給 gugod 還有 zonble 看了那時在進行的改寫計劃。那是自我開始做「香草輸入法」後便一直覺得要完成的:把 Mac OS X 輸入法元件底層的程式碼給整理起來,變成一個獨立的底層元件,好在上面建立一個通用的框架,可以容納其他的輸入法。

之所以會有這個想法,一開始是因為酷音輸入法的 OS X 版以及香草輸入法的注音、倉頡及簡易模組,這三者間都共同用到同一份程式碼──也就是從 Apple 的 BasicInputMethod (BIM) 所改寫成的輸入法底層──因此我總覺得,應該有一個方法,可以把這幾個輸入法整合起來。

那時候也因為工作的關係,開始接觸 UNIX 界的亞洲文字輸入問題。當時稍稍對大家都在討論的 IIIMF 做了點瞭解,發現相當難以上手──當時我對 X-Window 瞭解有限,而且覺得 IIIMF 網站和文件都沒有一個很清楚的起點。而且以「跨平台」、「寫一次可以在所有平台上執行」為設計目的的 IIIMF,終究說來,仍然是一個以 X-Window 為起點所設計出來的架構。我當時單純地覺得,做為 OS X 的使用者,我比較急切想要看到的,是一個為 OS X 快速增添新輸入法的管道。因為 OS X 的架構和 X-Window 差很多,走「把 IIIMF 移植到 OS X」上這條路,遠遠超過我的能力範圍,於是打算從我已知的輸入法需求出發,設計一套自己需要的架構。

於是從「香草輸入法」於八月底加入倉頡、簡易兩個模組之後,中間有快兩個月的時間,都在構思這樣的一套架構,也就是後來的 OpenVanilla.h 。同一時間在進行的就是上面說的 CarbonInputMethod ,也就是 OS X 的輸入法底層。我很久沒寫程式,很多新的、或是早成慣例的程式寫作方式,都不是很熟悉。像是 OV 的關鍵之一,也就是要能動態載入程式庫,這樣一件事,我在八月底時還完全沒有概念,不知道該怎麼做、該叫用哪些程式庫,OS X 又會以什麼方式載入這些程式庫、怎麼配置程式庫的程式及資料段空間等等。又因為那時有了新工作,有很多事務要處理,這兩個部份的工作就緩步進行。偶爾,我在和 Autrijus 或 gugod 喝咖啡時,會提起最近的狀況(那時 Autrijus 非常關心這件事的進度,因為 OS X 上一直沒有他合用的大易輸入法),他們也看過幾次進行中的 OpenVanilla.h:九月底有一天 Autrijus 還在新生南路的星巴克咖啡裡大砍其中的贅碼。OpenVanilla 一直到 0.6.x 之前的 API 幾乎就是在那一天確立的。

然後到了把 OpenVanilla.h 以及 CarbonInputMethod 組合在一起的時候。這就是2004年10月23日那天晚上發生的事情。gugod那一天就開始了酷音輸入法的移植工作,zonble開始找「香草」的icon,而我則一直在實驗能否真的藉由dyld程式庫把輸入法模組動態載進來。晚上九點,第一個「測試輸入法」能動了:一個按a鍵出a字,按b鍵出選字窗的「無用」輸入法。gugod立刻叫我把現有的程式通通儲放進version control system中──而我當時連svn都還不會使用!就這樣,我上了一個晚上的subversion crash course,gugod 建立了 OV 的標準組立(build)程序。OpenVanilla 於當天誕生。

2004年10月25日,我們在 OpenFoundry 上丟出第一個 OV 的載入器及輸入法模組:大易輸入法。一開始因為我們沒有人知道 Objective-C 寫成的程式庫,在動態載入時有一些細節要處理,所以花了將近兩週的時間在研究各種除錯的方法。那是段臭蟲抓不完的時間。OpenVanilla.h 很多小地方要更動。我因為不熟悉版本管理,經常忘記送出某個檔案…… 混亂的時期一直到了十一月中,那時我們已經有了第二套輸入法:POJ。然後是一段密集的工作時期,開始做泛用輸入法(當時還稱作 “Xcin 模組”),我們開始有了可以真正載入多套輸入法的 Loader ,開始陸續有朋友開始試用下載這套軟體,然後有更多的 bug report 進來……

以後的故事,大家都知道了。我們在 ICOS 2004 上有了一次很漂亮的 demo,我們在 2005 年的 1 月 19 日推出了當時最穩定的 0.6.3 版,這個版本一直到 0.7.0rc3 出來前,只經歷過少數的錯誤修正。我們有了完整的使用手冊,那時的成員有我、gugod、zonble、b6s、pcchen 還有 mjhsieh

後來我辭掉了工作,在家當起 freelancer。一段相當疑惑和混亂的日子。OV 好像已經很不錯了,但還可以更好些。CarbonInputMethod 一直有一些沒有解決的老問題。OpenVanilla.h 還可以設計得再精簡些。但是沒想到開始做 freelancing 之後反而更沒有時間去照顧程式。我心裡面總是想著:一定要把 OV 再往前推一個主要版本的。一定要讓 OV 有自己的生命…… 讓更多人可以瞭解、維護這些程式碼。

OV 0.7.0rc3 是在2005年5月19日推出的,與 0.6.3 整整相隔了四個月。0.7.0rc3 到 0.7.0rc5 是一段相當痛苦的歷程:因為 Loader 改用了 Cocoa 程式庫撰寫,初期穩定度相當差。那時每天醒來都擔心會不會有可怕的 bug report 跑進來,尤其正好那時同時遇到 OS X 從 10.3 過渡到 10.4,libchewing(酷音輸入法模組的主程式庫)也從 0.2.5 過渡到 0.2.6 。因為有太多不穩定的狀況,我曾經有很長一段時間覺得:OV 往前推進到 0.7.x 是一大錯誤。也許我早早就應該停止再繼續做任何事情的。

一直到 2005 年 8 月 12 日,也就是 0.7.0rc5 推出兩個半月後,我們才終於有了 OV 0.7.1。至此算是擺脫了 “rc = repeated crash” 的惡夢。在這段期間裡,vgod 加入了 committer 的行列(而且他主要做的真的是 OV 的行列模組),

vgod 的另一個貢獻,是做到了 OV 與 SCIM 這個輸入法框架上的橋接(bridging)。 我曾經認為 OV 與 SCIM 之間應該有一個還不錯的合作的可能,但是中間有蠻多複雜的議題,我發現我的時間不足,無法一一深入去瞭解。另一方面,SCIM 的成員可能也一直誤解了 OS X 的特殊性:確實 OS X 上面可以執行 X-Window 環境,那麼將 SCIM 「移植」到 OS X 的 X-Window 上,所涉及的主要是如何滿足 SCIM 的編譯依賴套件(dependency)──一個需要佈建(deployment)高手來解決的問題,因為 SCIM 依賴數量龐大、以 gtk 為主的模組。至於,在 OS X 的原生環境上製作輸入法,那就完全跟 X-Window 是兩回事。曾經有一回,SCIM mailing list 上有成員用英文問我:「等你們完成 OV 與 SCIM 的橋接,你們何時會把 OV 改用 SCIM 的核心?」瞠目結舌之餘,我想這中間大概是出了什麼誤會吧。

後來隨著 kanrupcman 的加入,先前一直在討論的一個議題──關於 OV 有沒有可能移植到 Windows 上──也出現了曙光。或者,客觀地說,挑戰毋寧在「有沒有可能讓 Windows 上的輸入法開發變得更容易」上面。OVIME(Windows 版的 OV)開發速度之快令人驚訝。我在這一段時間正好在外到處旅行,手邊沒有任何 Windows 機器可供測試。看著 OV version control repository 每天都有新的進展,感覺還是蠻特別的:this is an on-going project with a new direction.

其實,從當初只是為了「抓自己的癢」(scratching my own itch),到後來起心動念,想弄一個「可容納多種輸入法的架構」,有時候還是會自問:這其中是不是有任何浮華的意念在推使著?雖然中文輸入法(或輸入法本身)似乎總還有很多很多問題要解決,但大家日常生活不也已經還算使用得平順了?

或者就只是,我已經抓了太多超過自己的癢:OV 帶給我私人的便利,還是那當初寫「香草注音」時的倚天排列選字注音輸入法──一個讓我至今仍然能平順地在 OS X 上從事日常工作的重要基礎。我從開發 OV 的過程中學到非常、非常多,甚至毋寧說所有我「補修」的軟體開發知識,都是因為有了 OV 這樣的計劃才學到的。寫程式畢竟還是一件很快樂的事。而跟一大堆人一起 hack 的經驗:無價。

這一年來我寫了很多很多的 release notes 和一些這樣的心得感想。Autrijus 有一次曾經笑我:「lukhnos 寫一行程式,可以寫兩行感想」。我覺得對於 OV ,我已經開始在重覆老套,越來越像一個喜歡憶往事、卻還想為之決定方向的囉唆的人了。我想我該寫到這裡。It’s the time to pass the baton.