#osxchat blog

2005/03/10

輸入法的終極無間地獄

作者: zonble

lukhnos 在前一篇當中提到了軟體包裝的困難,在這邊順道補充一下,在我參與這幾個專案的過程中,我想,在 Mac OS X 包裝輸入法,恐怕又比其他各種應用程式來得更困難。

許多人在推介 Mac OS X 這套作業系統的時候,往往會強調,因為 Mac OS X 本身是以 unix 作為底層,所以就算是應用程式當機,也不至於會造成整個作業系統崩潰,只要重新把應用程式開起來就好了,但是如果在包裝輸入法的過程中,如果遺漏了某個檔案,造成輸入法應用程式套件不完全(例如某些早期的 OpenVanilla 版本),而造成輸入法當掉,而因為輸入法是被定位成系統元件(Component),每個應用程式中,都會用到輸入法,這麼一當起來,恐怕就不是無間地獄,甚至是終極無間了。—而,這就是最早開始進行 OpenVanilla 開發與試用時,所面臨的慘狀。

到底有多慘?您也知道,在 Mac OS X 啟動的時候,一定至少會開啟一個應用程式,就是 Finder,但是當輸入法崩潰的時候,會把全部的應用程式全部搞當,而當 Finder 當掉的時候,系統又會重新把 Finder 開起來,但是在開起來的瞬間又當掉了…。如此不斷的重複,而且,在這個不斷重新啟動又不斷當機的時候,你又幾乎什麼事情都不能做,你根本沒有機會可以按下 cmd + space 切換回其他的輸入法或鍵盤配置,而當你想要登出的話,當詢問你是否要登出的視窗剛開起來,也又瞬間當掉,所以你也無法登出。而唯一的解決方法,就是趕快暴力關機,然後,你需要一個沒有啟用這個輸入法的另一個帳號,然後將這個失敗的輸入法從硬碟中刪除。

開發輸入法的過程中,偵錯比開發其他應用程式來得麻煩許多,因為輸入法是在每一次登入的時候載入,所以在改過程式然後重新編譯後,便必須要登出之後再登入,在開發 SpaceChewing 初期的時候,往往就必須另外建一個專門拿來測試的帳號。而 OpenVanilla 的設計架構有很大的一部份,就著眼在解決這個偵錯的麻煩,OpenVanilla 將系統元件的部份與實際的輸入法(如注音、倉頡、酷音等)分離,在每次開啟某個應用程式的時候,輸入法載入器會重新載入一次輸入法;所以,如果只要偵測某一個輸入法的錯誤,那麼就只需要把某個應用程式關閉,然後重新啟動應用程式即可,不需要重新登入、登出。而 lukhnos 最近的工作,則是要將系統元件與載入器的部份繼續分離,也就是,未來版本的 OpenVanila 是在啟動輸入法的時候,先載入一個載入器,然後載入器再去載入輸入法,方面載入器部份的各種偵錯工作,例如選字視窗的設計等各種輸入法的共用部份。

而在開發之初,為了能夠不必一直登入登出,開發團隊還搞出一堆想辦法讓系統快速當機,把目前在執行的環境一次全部炸掉,然後將環境全部重新開始的當機密技。—說來有點好笑,一般來說,電腦作業環境追求的是運作的穩定,而在這裡需要的卻是想辦法讓電腦當機。例如在最早的開發者版本的酷音輸入法,就有一個神秘的當機選項,另外,如果您想是試試看怎樣把作業環境炸掉,您可以試試看打開終端機,然後輸入

ps auwx| gerp frame

然後應該會看到像這樣的執行結果:

zonble 13848 12.0 6.8 686680 44892 ?? Ss Sun02PM 112:29.83 /System/Library/Frameworks/ApplicationServices.framework/Framewo
zonble 180 0.0 2.4 184840 15632 ?? Ss Fri05PM 18:27.69 /System/Library/Frameworks/ApplicationServices.framework/Framewo



ps 這個 unix 指令的用途是查看目前電腦中有那些正在執行的 proccess,如果您對操作 unix 系統有興趣的話,那麼這是一個必學的基礎指令。在這邊的顯示結果最前面的 zonble,代表的是這個 proccess 是 zonble 這個使用者執行的,第二個項目是一串數字,是目前在執行的 proccess 被分配的 id,稱為 pid。我們現在要取消執行這個 proccess ,就需要使用 kill 這個指令,kill的用法是後面加上 pid。例如:

kill 13848

下了這個指令會發生什麼事情,就不說了。呵呵。

標籤: , ,

2 篇留言:

  • >>下了這個指令會發生什麼事情,就不說了。呵呵。

    想要把 GUI 一次全幹掉,直接把 WindowServer 殺掉不就成了?何必這麼麻煩?

    作者: Anonymous 匿名 發表時間: 3/10/2005 11:49:00 下午  

  • 把 WindowsServer 殺掉的指令是啥?

    作者: Blogger gugod 發表時間: 3/11/2005 09:56:00 上午  

張貼留言

逆向鍊結:

建立連結

? 回前頁