Archive for November, 2005


Mac OS 7!

Tuesday, November 29th, 2005


剛拿到一個Macintosh模擬器和Mac OS 7的環境。稍微玩了一下後,覺得實在很有趣 :-D
Mac OS 7大概是1991年的產品,但很令人訝異的是,它的介面一直到Mac OS 9都沒什麼大改變,甚至左上角的蘋果和右上角的國旗到Mac OS X都長得一樣。
在1991年就有這麼完整的GUI環境,真是太神奇了!


順便一提,從http://toastytech.com/guis/guitimeline.html可以找到許多歷史上的GUI,最早可以追溯到1973年的Xerox Alto,當時在Alto上甚至就已經有Doom-like的遊戲了….。

輸入法框架帶來的無限可能

Saturday, November 19th, 2005

輸入法讓你聯想到什麼?是注音、倉頡、還是嘸蝦米?
其實輸入法可以作得更多;中文輸入可以有智慧選字,那打英文時為什麼不能也聰明地幫我即時校正拼字或是自動補齊呢?你可能在想某些軟體有這些功能,但其實有很多人不想為了這些功能去習慣不同的軟體。這種功能應該是無所不在的,不管在什麼程式中都能擁有的。那麼,有可能嗎?
有的,答案就是「輸入法」。

輸入法的角色很特別,它位於一般應用程式和作業系統的中間。輸入法可以攔截所有程式的輸入,再加以轉換後輸出給應用程式。所以輸入法是一個非侵入式的輸入過濾器。
以中文輸入法來看,就是攔截使用者從鍵盤輸入的一串字元,接著透過某種編碼(注音、倉頡…)轉換為中文字輸出給程式。
輸入法一直以來都是扮演著這種輸入各國文字的角色,但輸入法真的只有這樣而已嗎?

其實輸入法在作業系統中是一個可以攔截任何輸入的程式,我們可以在這個位置提供更多方便的功能,不只有打中文這麼單純的事而已。例如,當我們用英文輸入時,輸入法可以幫助我們較正拼字,也可以讓我們只輸入頭幾個字,接著就自動補齊剩餘的部分。甚至還可以作成網址輸入工具:當我們輸入「@台灣大學」時,輸入法就自動到google找出台灣大學的URL http://www.ntu.edu.tw,接著輸出<a href=”http://www.ntu.edu.tw”>台灣大學</a>。

輸入法真的可以做到這些嗎?答案是可以的。做這些事本身其實並不難,只是難是難在如何在某個作業系統下寫一個輸入法?在以往開發輸入法是非常困難的事,除了必須和作業系統的底層打交道外,還得面臨嚴重缺乏文件的困境。畢竟輸入法是歐美國家不會用到的東西,偏偏現在的作業系統都是這些不需要輸入法的人所開發出來的,所以自然不會受到太多重視。

但現在已經不同了。

2005年,我們終於有了一個可以跨平台(Windows、Linux、FreeBSD、Mac OS X)的輸入法框架:OpenVanilla 開放香草輸入法
OpenVanilla其實並不是一個輸入法,而是一個可以掛載輸入法的框架。它將不同作業系統上開發輸入法的複雜程式封裝在每個平台特有的載入器(loader)中,並且定義了一個跟平台無關的介面讓我們能更輕易地開發不同的輸入法。
輸入法框架使得閈發輸入法不再是一件困難的事,而且輸入法再也不用和作業系統打交道了。
輸入法框架替開發人員省去了研究作業系統底層細節的功夫,任何一個會寫程式的人都可以直接開始寫他想要的輸入法。他能很容易知道使用者按了什麼鍵,也不用擔心怎麼畫視窗,只要盡量發揮創意去思考要如何處理就可以了。

有了開發輸入法的簡易框架,我們就能做一些以往很難做到的事。
以我自己為例,我是一個重度的Vim使用者,不管是寫程式還是寫文章,都非常依賴Vim提供的高效操作模式。這種習慣讓我很難使用其它的編輯器,不管是像Visual Studio之類的整合開發環境,或是瀏覽器中的textarea,少了Vim的key binding,用起來就是不順手。
但我又不可能改寫每個程式,自己加入Vim的操作模式,那我該怎麼辦呢?
輸入法框架帶來了一個可能的解答。我可以寫一個”edtior adapter”,讓我在一般編輯器中輸入Vim的特殊指令,再幫我轉換為一般編輯器的操作指令輸出,於是我就有可能在任何地方都維持同樣的操作習慣了 :-D

輸入法這種無所不在的特性,再加上能攔截按鍵輸入的能力,蘊藏著無限可能,以往很多不得不作在應用程式中的功能,其實都可以移到輸入法框架上,使得每個程式都能受益 :-D

ICOS 2005

Sunday, November 13th, 2005

昨天到科技大樓參加ICOS 2005的OpenVanilla座談會,終於見到了OpenVanilla的開發團隊們(其實好像只有pcman和b6s沒有見過:p)。
中午在OV session開始前,還和lukhnos研究了一下You-Know-What上的輸入法問題。
(透露一個好消息,我們在昨天終於讓universal OV有點進展了,也發現了一些無法載入的原因 :-D )

OV Session結束後因為有事就先走了,沒有聽到後面的議程有點可惜(聽說有個講Smalltalk的session,似乎挺有趣的)。

Cherry鍵盤團購

Thursday, November 10th, 2005

Cherry

PTT的Key_Mou_Pad板又開始團購了,這次是Cherry G80-1800和G80-3000。
這兩隻都是茶軸,上次跟的Taclick買的是青軸,這樣不是叫我再次跳入火坑嗎…@_@
有興趣的人可以看Key_Mou_Pad板5682, 5683, 5684的介紹 :-D

為什麼我要分享?

Tuesday, November 8th, 2005

突然想寫點東西,聊聊為什麼我寫blog,為什麼我會想和其它人分享知識和學習的過程?

我昨天在我的blog未來最舊小棧的個人板上post了一篇一些好用的Vim scripts
本來只是為了作個記錄,怕自己以後忘了曾經找個這些好用的scripts。結果昨天有個人回了一篇文章說,其中一個scripts(SearchComplete.vim)有bug,會讓一些平常會用到的按鍵失效。正巧我當時在試玩這個script時也有發現,但因為還不想花時間深入研究,就放著沒理它。
沒想到過了一天,就有人自動出現告訴我他也發現這個問題,而且他還把修正的方法一並提供給我了…:-D

當初我會post這篇文章,其實一方面是為了留記錄給自己看,另一方面就是分享這些好東西給也有在用vim的同好。只是沒想到會有人試了以後會告訴我其中的bug要怎麼修。老實說,這種驚喜的感覺很有趣,也是為什麼我要持續寫blog的原因之一。

我從高中時,就在BBS上開了個板,沒事就寫些文章,可能是分享今天學到了什麼有趣的Linux技巧,或是一些給學弟妹的tutorial。寫這些東西很有趣,一來是因為「發表是最好的記憶」,二來是分享常能帶給我很多意想不到的回饋(例如上面告訴我bug怎麼修的好人)。

可能有人覺得我很奇怪,平常都不太講話,但只要站上台就刮啦個不停,有時甚至像在傳教一樣。這個「興趣」說起來,也是從高中開始培養起的。高中時我在中一中電研社當副社長兼教學,每天中午除了在社團團部和大家哈啦外,還要給學弟妹上課(教C語言、資料結構,演算法..等等)。教別人本身其實就是一件有趣的事,光是讓人聽懂你的想法,學會你想講的東西,就蠻有成就感的。除此之外,我也從中發現一些意外的收獲。例如我常看書看了一些東西後,其實並沒有很深的印象,過一段時間就很容易忘記。但在跟別人闡述時,常常會突然搞懂書裡面到底在講些什麼。這是很奇妙的感覺,就像是:idea:突然冒出在頭上一樣,這是自己念書體驗不到的。

這個感覺在我寫文章時也常會出現。其實寫文章就像在跟別人對話一樣,只是不能馬上看到對方的反應,所以話要講清楚點,細節要多寫點而已。但寫文章有個好處是講話比不上的,因為你可能在腦中把事情想久一點在寫下去,甚至可以不用照順序寫..。對我來說,這是一個整理思緒的好方法,可以讓我對一件事情理清頭緒,也可以幫助我記得更牢靠。胡適和候捷都曾說過「發表是最好的記憶」,其實我也有同感 :-D

寫文章除了有些馬上能得到的好處外,其實更大的好處要在分享出去給別人看過之後才能得到。在網路上寫心得分享,或是tutorial,可以吸引到一些跟你有相同興趣的人接近,甚至可以感染別人,讓他們跟你有相同的興趣。這麼一來,玩同一個東西的人多了,就可以互相交換心得、分享經驗,別人學的東西、看的東西加起來鐵定比自己還多得多,因此寫文章來吸引同好是一種能快速形成分享循環的好方法。
此外,就像一開始說的故事一樣,也常會有些意想不到的回應出現。這種驚喜不只可以讓自己輕鬆點,也可以刺激我分享更多的東西給別人。