2007/11/20

Intro to OpenMoko

OpenMoko 是提供 mobile phone software stack 開源軟體在內的整合平台計畫,核心成員包括許多德國朋友,例如台灣廠商「熟知」的 Harald Welte 擔任了系統總監,此計畫並獲得大眾電信 (FIC Inc.) 的支持。目前的產品僅限於 hacking 用途,暫時僅提供 Neo 1973 (Samsung S3C2442 SoC) 為硬體參考平台。

community development 部份可由 http://www.openmoko.org/ 找到文件、程式碼、討論區等,包括累積的簡報錄影。developer kit 可由 http://www.openmoko.com/ 選購,分成 base 與 advanced 兩款。

軟體架構圖可看到它搭配了 OpenEmbedded 工具來產生 Linux embedded system 環境,細部 OpenMoko 元件項目包括 core, net, pim, ui 等。透過 QEMU 可獲得一個軟體模擬開發環境。

負責訓練活動的 jollen 表示,實體活動也是 OpenMoko 著重的項目,固定場地 OpenLab 位於大眾電信在內湖的大樓裡,樂見公開支持 open source 的台灣廠商再多一家。簡明仁董事長提到 參與 open source 是直接提昇台灣軟體實力與能見度的重要方法,接下來,就看各人的努力了。

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 已經就緒,使用者可以輸入指令。