從我的故事開始說起,自由行列實驗品: ibus-faft

work-731198_640

我曾寫過一篇小說,關於城市與雪山,事實上一直沒寫完,即使曾那麼多次想提起筆來。

我曾,寫起一個故事,關於我的故事,我的世界,它的骨架現今仍堆在浮光掠影裡。

我曾,寫過一篇小說,關於天龍之鑰,關於闇與亮,只寫了一章就停筆,後來只是用個很怪的變體動畫出來。

我曾,想做一個 Flash 上的 RPG 遊戲,還請姊姊幫了 CG ,卻只做了走路系統就把它丟到現在。

我曾,學起了畫來,倒反畫、純輪廓畫、陰形、陽形,用奇怪的方式學習,結果還真的留下了幾張作品,上了高中,甚至畫起了長篇分支劇情的謎樣青春動畫(?),不過再一次的被堆進電腦深處,而上了大學更是從未提起過畫筆。

我曾,弄起了數位音樂,還任性的買了頗貴的麥克風,結果現在除了留下了一個很難聽的歌外,下一次的創作可能永不到來。

「夢,數學」、「迎風廊」、「開放學習網」、「交織夢想」……還有更多更多寫在筆記本卻從未實行的想法。

 

「自由行列」的想法從構思,然後寫下第一行程式、到現在至少也有四年以上了,原以為它也會慢慢退居幕後。但很開心的,第一個動的起來的自由行列實驗品誕生了!

ibus-faft : FreeArray for Test for the Input Bus.

由於 Freearray 和我的程式設計之路有太密切的關聯,值得寫一篇文章來寫它和我背後的故事。

忘記最早是在哪看到行列輸入法了,時間大概是 2005 還是 2004 左右吧,只記得有在 Jedi 的網誌上看到行列和 Dvorak 的介紹,便開始同時練習這兩種輸入方式,是從那時起我才學會了盲打。不過正如 Jedi 所寫,行列的符號輸入不太方便,所以行列並沒有成為我的標準輸入法。

後來對行列的接觸則是斷斷續續的,非常有趣的是,對我而言,在 Linux 平台之下的 scim-array,似乎比 Windows 下的行列輸入法帶給我更好的使用經驗,所以在 Linux 之下我偶爾還是會練練行列,在 Windows 下則是以新酷音為主。至少根據《Dvorak: 另一種鍵盤排列》 所述,直至 2007 年的 7 月,行列依然不是我的主要輸入法。

我一直認為行列輸入法很不錯,覺得因為符號等小問題而放棄它太可惜了。在 2006 年升高中的暑假,我帶著想改進行列輸入法和成為 Linux 程式開發者的憧憬,開始學起了 C++,踏入了程式設計的道路。當時甚至研究起 SCIM 和新酷音的程式碼,只是一直沒有什麼進展。進入高中後,開始寫起 ACM 之類的程式題,一開始還試著用從 C++ 學來的 class 等等在解問題呢。只是後來為了求快,就只用些 C++ 中的 C 了。當時,我用 C++ 大概就是在解這些問題了,算是在鍛鍊解決問題的基本功吧,對於程式開發的研究則很少。我曾試過要學 Shell Programming,也曾試著看《Beginning Linux Programming》,不過都學的不深。

高二進入資訊社,和同伴一起努力參加資訊競賽,那時遇到很多很厲害的人呢。另一方面,帶著想回歸實務的心情,重啟了改進行列的專案,雖然沒有寫下多少程式,不過在那時我發展出了行列定符的粗略概念。

2008 年 3 月,我在新酷音的開發討論群組上詢問了輸入法開發的入門方法,得到 jserv 熱心的回應。不過接下來,我得先開始全力準備學測才行。

2009 年 4 月,我透過 scim-array 把行列定符化為現實,自己覺得相當實用,之後在 Linux 下的標準輸入法也漸漸轉為行列。而隨著我使用 Linux 的時間愈來愈長,使用 Windows 的時間愈來愈少,行列幾乎可說變成我的主要輸入法。或許正因在 Windows 下再也沒有同樣方便的符號輸入方式可與行列定符相比,所以進一步把我推向 Linux 吧。

(這下 ibus-faft 一出,Windows 和 Linux 的輸入法鴻溝又更大了 XD)

後來,決定要為這專案取個名字,原本叫做 ArrayPlus,後來也考慮過「開放行列」,不過搜尋一下才發現原來早就有人想過類似的專案,所以就決定是「自由行列」啦。

此時也開始有用 SQLite 來處理自由行列資料的想法,雖然看了些書研究,可是並無太多進展。在 Autotools 上也找不到方法入門,直接看文件總覺艱澀。這時候有學習 Django 的想法,不過大概是沒有實際的專案可寫,所以沒能學多少,倒是讓我對 Python 開始有了點興趣,稍微看了一下。

大學,在老師的帶領下,從頭開始學起 C,這時我也看完了《C Programming: A Modern Approach》,不過對於自由行列的開發還是沒什麼進展。此時我參加了 IBM 的比賽,在解決問題的時候,突然發現有時候,就是要動手做就對了,這樣學得最快,另外在操作 DB2 的時候也學了不少 SQL 的語法。於是,比賽結束時的我終於決心要再一次開始開發自由行列了,並且在那時重寫了一部分行列碼處理的模組。只可惜一個星期之內,發生了許多事,讓我的開發再次停擺。接下來又忙著期末考和社團的事,一直到期末考結束,最後要回家前的那幾天,才再次開始我的程式開發。

當時,我正看著《Head First – Design Patterns》,想說要在回家前看完,另外,下學期也要開始學物件導向了,此時的我才發現對於 C++ 我還是有很多不會,而且當年看的東西也都忘了。所以決定一邊預習 OOP 一邊寫 libfreearray,雖然沒看完《Design Patterns》,不過還是試著應用了裡頭的一部分技巧。回家後,看起了剛買下的《C++ Primer》,也看起《The Definitive Guide to SQLite》,補回了一些資料庫的基本概念,雖然還沒看完,不過倒是把自由行列處理行列碼查詢文字的介面完成了。這時也開始使用 gdb 來為程式除錯。接著,我試著寫起輸入法資料處理的核心,不過物件愈搞愈多愈複雜。

後來,寒假規畫在程式開發用的時間也差不多快用完了。覺得再這樣下去,不知何時才會看到自由行列的誕生。又剛好在研究新酷音程式碼的進度稍有突破,發現似乎用新酷音斷詞模組來實現自由行列的可能性還滿高的。想說就暫時停止 libfreearray,開個 ibus-faft 分支,做個暫時可用的輸入法,也不管程式碼好壞,只要動的起來就好。原本真的以為是個能快速完成的實驗品,想不到卻花了好多時間。最後雖然遠超過原本分給程式開發的時間了,我卻停不下來,因為每次,總覺得就差那麼一點了。

行列碼和文字的處理直接從原本 libfreearry 的成果修改而來,而輸入法的主要資料架構以及詞彙處理則由新酷音負責,至於處理使用者輸入的部分則是全部重寫了。過程中,還用到了 Python 配合 pygtk 來繪製修改設定的介面,很多東西是邊做邊學。原本以為只要把注音碼換成行列碼就可以把新酷音直接拿來用,想不到還是得修改許多地方的行為。

真的不敢相信,好幾次都想放棄了,結果竟然完成了!為了做出 ibus-faft,我真可說是把至今所學都用上了,而這也只是剛好到位而已。很多部分其實是參考其他類似專案才完成。

很矛盾的覺得最後那幾天這樣密集的寫程式不是件好事,但完成了又好開心。

由於參照計畫與真實情形還是很有趣,我再把升大學的備審資料中的讀書計畫拿出來一下:

這邊的短程指的應該是升大學的暑假吧。當時是有看一下《Algorithm Design》沒錯,不過其實只是隨意看看。我把這本書帶去了大學,一個學期下來,連一頁都沒翻,決定還是拿回家裡放了。ACM 考古題似乎也沒寫多少,在大學裡更是完全沒寫。探索程式開發環境應指的是 gdb, Autotools, svn 等東西吧。一直以來都找不到入手的方法,這次開發 ibus-faft,終於算是踏進入口了!要不是有 gdb,有些程式錯誤還真難抓出來呢,雖然現在我也只是會它的基本功能。Autotools 則只是參考各專案使用,不過也算是入門了吧,發現一個不錯的資源:《Autotools: a practitioner’s guide to Autoconf, Automake and Libtool》,還有得研究呢。

雖然也許只是一個小程式,雖然只是一個中途實驗品,雖然程式碼也許很難看。

可是這是我第一個開發出來可以實用的 C 程式,這也是我第一個在 Linux 上的軟體。

程式開發的漫漫長路,這裡,是一個新的起點呢。

廣告

Dvorak: 另一種鍵盤排列

很久很久以前,當我還處於必須看著鍵盤才能打字的時期。不知從何處得知了行列輸入法,決定試著學學看。後來,又找到了 Jedi 所寫的「Dvorak 與行列輸入法」發現了 Dvorak Simplified Keyboard ,於是便開始學起了這兩個非常特別的打字方式。

剛開始我每天下課回家都會很有熱忱的打開我在官方網站上找到的教學 CAI 練習行列,後來大概練到每分鐘 30 幾個字左右吧,突然發現其實我並不常輸入大量的中文字(那時不像現在常常打網誌),再加上行列的符號輸入很麻煩,而且又不符合 Dvorak,所以我便又重新回到注音輸入法了。有趣的是,在我練過行列及 Dvorak 之後,即使是注音,我也已經不需看著鍵盤打字了。

行列是如此,但 Dvorak 卻已成了我的標準輸入方式了。在談它之前,非得先說一下 QWERTY 鍵盤配置,低頭看看你的鍵盤,你應該看到第一行的前六個字母是 Q、W、E、R、T、Y,這正是它之所得到此名的理由。

只是你可能不知道, QWERTY 鍵盤配置一開始其實可能是為了降低打字速度才被發明的。為什麼?因為那時用的是打字機,打的太快會提高故障發生率。而既然現在的鍵盤已無打字機的問題,為什麼不改成一個能打的比較快的設計呢?Dvorak 正是在這樣的情形下發展出來的。

Dvorak 鍵盤配置在 1932 年由 August Dvorak 所創造 ,他又在 1936 年出版了一本長達五百多頁的書(Typewriting Behavior)敘述他對打字的研究 。Dvorak 把最常用的字母都放到了 home row(中間那行),並仔細考慮過手指的移動,以達到加快打字速度的目標(我能找到的最高速度是由 Barbara Blackburn 創下的每分鐘 212 個單字),並減少手指的疲倦,同時,更明顯的,它比起 QWERTY 來的易學。

The Dvorak Simplified Keyboard layout
The Dvorak Simplified Keyboard layout

在 Windows XP 上要使用 Dvorak 很簡單,在語言列上按右鍵,選擇「設定值」,再按下「新增」,在「鍵盤配置/輸入法」選最上面的那個「United States-Dvorak 國際」就是了。

要把登入畫面預設使用 Dvorak 的話則必須到「開始/執行」,輸入 regedit 後按下「確定」,接著找到 HKEY_USERS\.DEFAULT\Keyboard Layout\Preload\1 這個鍵,把它的值改成代表 Dvorak 的 00010409

Windows 7 之後的版本就不必這麼複雜,直接新增「United States-Dvorak 國際」就可以在登入畫面中使用了。

至於中文輸入的問題,如果你跟我一樣是用注音輸入法的話,有一個非常好的選擇:新酷音輸入法。如果是 Windows XP,安裝完了之後同樣利用 regedit.exe 來修改登錄檔,先找到 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Keyboard Layouts,接著按下 Ctrl+F 搜尋「新酷音」,你應該會發現有一個名為 Layout File 的字串,它的值是「KBDUS.DLL」,把它改成「kbddv.dll」,重新開機之後,打開新酷音輸入法,到「新酷音輸入法設定/設定新酷音輸入法」,在鍵盤對應的地方選擇「Dvorak」,然後試著打字看看,此時符號和英文字的對應應該都變成和 Dvorak 一樣了。chewing.gif

至於打字教學軟體,當初我選的是 KP Typing Tutor,簡單易用,同時支援 QWERTY 及 Dvorak。如果你願意花錢的話,也可以考慮另一套專業的軟體:TypingMaster Pro,它會詳細分析你的進度,而且介面也十分順眼。

KP Typing Tutor
KP Typing Tutor
TypingMaster Pro
TypingMaster Pro

使用 Dvorak,偶爾會遇到麻煩的地方,尤其是要用公用電腦的時候,所以我一直想稍微加強一下我用 QWERTY 打字的能力(至少要能不看著鍵盤啊),不過一直沒實行,也許人就是懶惰吧,這也是使用 QWERTY 的人不想試試 Dvorak 的原因之一。至於 Dvorak 是否真的比 QWERTY 快?有人堅信,也有人懷疑,我還是再多做點研究再來判斷好了。