2007/11/20

Memory on Mr. Liu

有人寫了劉重次的追憶文,我也記下與他生命交集的片段。

一九九四年左右,劉重次在政大介紹嘸蝦米輸入法,那是我第一次與他見面的機會,後來身為蝦米一族,才知這可不是每人都有的機遇。第二次和他見面,是在一九九九年之後,三月間我們一群 CLE list 的朋友才到桃園拜會過朱邦復,相較之下,兩位前輩關注的題目與切入方式各異,但都展現同樣的恆心毅力,留下值得我們學習的典範。

當時想主動和劉重次見面,為的就是在 Linux 環境裡能夠方便地使用嘸蝦米,我邀 thhsieh 一同前往,他很熱切地招呼我們,提到台灣還動手寫軟體的人少,有群同好以 open source 方式創作軟體,著實難得。

我們表明來意,希望嘸蝦米能以 open source 授權條款釋出,劉重次並未馬上允諾,當時正值 Unicode 蘊釀興起之際,他詢問 Linux 是否有支援 Unicode,提醒應用程式撰寫時要留意這個方向。嘸蝦米輸入法當時還有發展野心,一方面是處理 Unicode 裡多國語文的議題,例如俄文輸入的設計,另一方面是成為手機介面的中文輸入工具。

聊得起勁下,劉重次把壓箱寶抬出來,一大冊的記錄本,記載了他長年研究中文檢字的心血。十年鑄一劍,除了感佩之外,也能體會他熱切與人對話的心情,台灣軟體界的凋零,總容易叫人抑鬱於心。

四年後,我再次嘗試請劉重次考慮 open source 模式,甚至使用 dual license 方法,還搬出「倉頡族群比嘸蝦米還大的原因,是差在兩者是否能自由流通」來激他,他說這是一段未被廣為人知的故事。這次總又有了進展,他想保持輸入法表格規則,輸入法介面程式部份則可開放開發。此時,局勢比人強,他也意識到這些心血不知還能在他手上維護多久時日,但,他還是期待輸入法能交到有心人手上好好維護。

每次經過新生南路,我都會刻意地尋找那塊公司招牌,心中為這位擇善固執的前輩,獻上感謝與致意。

2007/10/26

Fixing a Slow Linux

安裝一台 Mandriva 2007.1 主機後,總有記憶體耗光的問題,今天有空細看,發現是 haldaemon 佔用大量資源,趁機多找了 Linux HAL 的資料。傳統上 kernel 會維護一份硬體清單,讓 desktop application 可以查詢溝通,這種方式並不能精準地認得所有硬體,像數位相機、隨身碟會被當作是硬碟,應用效果就大打折扣。透過 HAL daemon 維護一份 device object 清單,並查看 file system type 之類的額外資訊,使得 HAL 能提供比 kernel 更豐富的硬體資訊,但也付出額外的系統資源做為代價。

2007/10/13

Introduction to KSS

下列文字編譯自 Introducing KSS 一文。

KSSKinetic Style Sheets 的縮寫,在 Plone 軟體裡提供 AJAX 功能的 client side 開發架構。設計理念上,KSS 並不是創造另一個 AJAX 的新架構,而是盡量沿用既有的函式庫,並專注於處理下列議題:

1. JavaScript 並不是個容易開發程序的環境,藉由 KSS 可協助開發者建立 AJAX 應用程式,卻不需要了解 JavaScript。
2. 實作上盡量降低瀏覽器不相容的問題。
3. 處理 JavaScript 除錯環境不良的問題,提供有效率的除錯環境。
4. JavaScript 的 DOM 機制並不適於多數的應用場合,僅呼叫 server 端傳回 HTML 再由 client 端修改網頁的部份內容,便能有效處理許多應用需求。
5. 以 thin client 為設計基礎,遇到需要 fat client 的場合,則可加裝 plugin 來滿足功能要求。

網站開發的過程,需要不同專長的技術人員,同樣地,KSS 的使用者依其興趣角色可分成三類:

* KSS designer : 應用程式可能需要搭配 KSS 資源檔,此檔的內容格式與 style sheet 類似,設計人員可輕鬆完成撰寫。
* KSS application developer : 應用程式的開發,則需要搭配 plugin 與 KSS 資源檔,並撰寫 server side method 等,不過,倒不需要 JavaScript 的知識。
* KSS plugin developer : 需要具備 JavaScript 程式設計與 KSS plugin API 知識。

KSS 的系統架構具備下列的特色:

1. 諸如 browser event 與 plugin 之間工作處理的指定,這類的程序控制,都由 KSS 資源檔與 server action code 所管理,也就是說,應用程式的控制邏輯,由 server 端負責,而不是在 client 端實作。
2. 在 HTML 網頁裡不會出現任何 JavaScript 內容,所有的 JavaScript 程式碼都是一個 KSS plugin,通常扮演 event binder plugin 或 client action plugin 的角色。

概括地說,KSS 架構的設計目的,就是要把設計與實作兩者分開。

2007/09/13

Plone3 On Its Way

Plone 3 正式版本問世後,最近總算試用,之前 release candidate 版本遇過 Internet Explorer 頁面不正常的問題,看來已修訂,為了把 ArchExample 搬到 Plone 3 環境,才陸續發現新版本的調整之處,詳細的內容大抵都刊在 upgrade guide 裡,還沒空看完,目前已遇到的是 CMFCorePermissions 和 get_transaction 改名字的部份,算小事。如果一切順利,再試著把一個 GIS 系統在 Plone 上進行開發。

2007/07/28

The Way to Peaceful Mind

呼吸,是我們最好朋友,
呼吸,無時無刻傳遞心的訊息,
現在,就讓你的注意力放在呼吸,
感覺呼吸、享受呼吸,
你將有一顆安定的好心情。

數呼吸時,只數出息,不管入息。
每一次呼氣的時候數一個數目,直到下一口氣呼出的時候,才換下一個數目。
反覆從一數到十。
不控制呼吸,否則胸部會不舒服。

- 摘自 祝福你平安 聖嚴法師

2007/07/06

Python Handbook

How to Think Like a Computer Scientist 這本書裡提到,電腦專家的養成過程中,學習化解問題 (Problem Solving) 是重要的能力之一,它包括下列的步驟:

1. 具體地描述問題
2. 發揮創意地尋找解決方法
3. 清楚明確地表達解決方法

學習程式語言正是練習化解問題的絕佳機會,程式語言也為更深層的電腦歷險打開了窗。

工欲善其事,必先利其器,想快速學好程式語言,當然也要選個好工具。
推薦學習 Python 程式語言,因為具備下列的優點:

- 易學易安裝
- 開放源碼免費在各式環境執行
- 原始碼易讀易管理

學習 Python 該有哪些相關先備知識? 物件觀念,shell 環境的操作,以及檔案系統結構,都是重要的項目,另外,C 語言的基本觀念與技巧,也會有助於 Python 的學習,比如說,使用 “C tutorial” 為關鍵字詞到搜尋引擎找資料。這些簡單的先備知識,有助於學習其他多種程式語言,值得一併認識。

程式語言的學習方法,其原則與日常語言極其相似。
「應用於日常生活」及「依樣畫葫蘆」,是兩條值得採用的好原則。
在生活裡尋找程式語言的應用機會,能讓語言學習增添動機與樂趣,模仿前人的程式範例,可省茫然摸索的時間浪費,日久自然能有舉一反三之效。

Python 語言的延革

* 1991 年由 Guido van Rossum 在荷蘭阿姆斯特丹 CWI 研究中心工作時所創作及發展。
* 1995 年到 2000 年之間,作者 Guido 先後在美國 CNRI 研究中心及 BeOpen.com 工作,並發展 Python 1.5 及 1.6 版本。
* 經由 Zope 公司的主要協助,2001 年之後 Python Software Foundation 成立,軟體開發的領導人仍為 Guido。
* 早期 Python 以 C 語言為基底撰寫而成,目前則有以 Java 語言為基底的 Jython 及架構在 .NET 的 IronPython 版本。
* Guido van Rossum 在 2005 年底成為 Google 公司雇員,該公司將 Python 程式語言列為程式員的三大官方語言之一。

Python 語言的特色

* 易學易用 (Easy Learning)
* 語法結構清晰 (Clear Syntax and Structure)
* 物件導向式 (Object Oriented)
* 直譯式、交談式 (Interpreted, Interactive)
* 跨平台 (Cross Platform)
* 延伸與內嵌 (Extended and Embedded)
* 開放源碼 (Open Source)

其優點有

* 適於入門學習。語法簡易而直覺,接近自然語言,入門後又可輕鬆地接續 C、Java 等語言的學習。
* 完整的函式庫及模組支援。常見的程式設計需求,利用內建資料型別及函式庫就能有效滿足,還可援用網路上豐富的模組與應用程式。
* 適於大型專案開發。從設計哲學及語法結構開始,就要求程式員撰寫清晰可讀的原始碼,大幅提昇其維護性。
* 資料處理能力佳。已內建 Regular Expression 及 Unicode 支援。
* 容易結合其他語言及工具。例如 C、Java、.Net 等語言及環境,還有 Eclipse、wxPython、SPE IDE 等工具。
* 生產力及執行效率能有最好平衡。採用 bytecode 格式及 virtual machine 運作機制,另外可用 C 語言等系統語言,將效率瓶頸的程式區段改寫。

應用實例有

* 教學環境: MIT 新生程式入門及 OLPC 計畫選用 Python 為預設語言。
* 入口網站服務: Google, YouTube, Yahoo! 網站的關鍵服務以 Python 語言開發。
* 動畫軟體: Maya, Blender 語言擴充介面支援 Python 語言。
* 圖形介面及動畫遊戲: wxPython, PyGame 是協助創作的好工具。
* 郵遞論壇: mailman 程式以 Python 語言寫成。
* 網頁應用伺服與開發框架: Zope, Django, TurboGears 是主要的範例。
* 安裝程式: Red Hat Linux 開機安裝程式及 Gentoo 套件管理。
* 檔案點對點分享工具: BitTorrent 工具程式以 Python 語言開發。

直譯器提供一個交談式環境,使用者可以輸入指令,直譯器則會在螢幕上顯示執行結果,包括錯誤時的訊息,讓使用者即時體驗 Python 的運作方式,就像面對一位有問必答的老師。

從 Python 的下載網址 http://www.python.org/download/ 可以找到所有版本的檔案,包括各式平台的執行檔及原始碼檔案。

在 Windows 環境中,選取執行 IDLE (Python GUI) 或 Python (command line) 可進入 Python 交談式操作介面。「>>>」是提示符號,代表 Python 已經就緒,使用者可以輸入指令。

2007/06/07

Computer Literacy

「如果學習與資訊相關,那麼資訊技術的演進,也必然對教育領域有所影響。」

Michael Tobis 在 Python in Education 一文中,強調資訊技術與教育的密切關係,並嘗試刻畫資訊素養 (computer literacy) 的面貌。一般的電腦訓練,著重在市場產品的操作與適應,經常造成「學完被綁」的結果,也就是只會某種應用軟體的某一版本,換個軟體或換個版本,可能就得重新學習的窘況。

資訊素養能否成為教育體系裡的一環,也就是培養國民近用數位公共財的基本能力,就像學習數理英文一樣? 這並不是一個學科增加與否的問題,而是問我們: 怎樣能保障國民的資訊近用權? 怎樣形塑二十一世紀數位公民的面貌與定位?