2007/12/25

Wing IDE

Python 程式的 開發工具很多種,Wing IDE 算是當中的翹楚,搭配 WingDBG 這個 Zope 模組後,能處理 Zope2 或 Zope3 的程式碼,包括 product, external method, file system script 等,用在 Plone 上也具備效果,不過不能處理 DTML, page template, ZCML 等。另外 Martijn Pieters 的 z3wingdbg 專案,則特別針對 Zope3 環境設計。

2007/12/21

Setting RestructuredText Format in Plone3

Plone3 的設定項目比 Plone2 來得更多,以編輯 page 為例,想要使用 RestructuredText 格式,我試出的方法是,在 Site Setup 裡把 Markup 選項的 alternative format 加入使用 text/restructured 的設定值,如果 default format 也選用,當然就會預設使用,不過此非必要條件,接著在 Personal Preferences 裡把 Content editor 設定為 Basic HTML textarea editor 就行了。
http://lh4.ggpht.com/_BESgcgeL9eA/R2vVV_IJHMI/AAAAAAAAABw/Z8zFfSTespU/s800/MarkupSettings.png
不過,我測試時發現 rst 沒能成功在 presentation mode 顯示,值得進一步處理。

2007/12/17

PHParser with Plone

PHParser 是 Zope 系統裡的一個模組,讓 PHP script 能直接在 Zope 或 Plone 環境執行,包括 cookie/session 與 file uploading 都有支援。運作原理是先將原始碼交由 DTML engine 處理,再交給 PHP CGI 程式執行,最後再顯示出來。另外搭配 PHPGateway 後,還可以直接與 phpMyAdmin 溝通。

和一般模組安裝方式相同,下載檔案並解開到 Product 目錄裡,在 Plone 2.5 以上的環境,還需要啟動 five:traversable 設定,可以在 CMFPlone/configure.zcml 裡加上

<five:traversable class="Products.PHParser.PHParser.PHParser" />

這一行,重新啟動 Zope 即可。在 Win32 環境裡,我下載了 PHP binary 並把 Products\PHParser\PHParser.py 檔案裡的 PHPath 由原本的 php.exe 改為 PHPath = "d:\\php\\php-cgi.exe" 作為 Zope 的外部程式,成功執行。

2007/12/06

BookReview: Perl To Python Migration

手邊有 Martin C. Brown 寫的 Perl To Python Migration 這本書,
順便簡介其內容。

首先,這是本「不厚」的書。扣掉最前面的 Python 概論與最後面的附錄,本文在 268頁之內,
而且頁面留空頗多。

真正切題講到 Perl 轉 Python 技巧的內容,大抵從第七章開始,這章說明了 module, class 在兩者間的對照關係,第九章介紹作業系統操作方式的對照關係,包括調整 library search path, getpwuid 的技巧,第十章與第十一章分別介紹兩者在資料與檔案處理上的異同,第十二章介紹 socket 及基礎網路服務的處理,第十三章是 web 主題,第十四章以 Tk 為例談 GUI 程式寫作。

手邊有書的朋友,值得看一下戡誤表

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

2007/06/07

Computer Literacy

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

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

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

2007/05/19

Zope Testing and Debugging

想要進行 Zope 測試或偵錯工作,可先參考 Zope Developer's Guide 第八章的內容,提示 Unit Testing, ZEO, debug method, pdb 的操作方式,利用這些技巧,可以進一步控制 Plone 之類的軟體,撰寫像 add_plone_site(), install_product(), set_default_skin() 來批次完成設定值,可參考 Team Development with Plone/Zope/ZEO/Subversion/ipython 的說明。

2007/05/16

Plone Tip on Private Folder

Make a complete folder structure private 看來的撇步。在 Plone site 若 private folder 裡有 visible sub-folder 或 visible content 的話,一般訪客是可以藉由搜尋功能發現 private folder 的存在。想讓 private folder 底下所有內容都找不到,必須修改 workflow 裡的 Access contents information 和 View 權限。此一方法同樣適用於 Poi Tracker 這類的外掛模組。如果想讓整個網站只限登入會員能讀到,請依照 Creating a private Plone Site 的說明修改。如果想讓部份內容由特別群組存取,請依照 Restricting access to folders with "shared" users 的說明修改。

2007/05/12

Prototyping with ArchGenXML

Tim Knapp 五月初在台北的演講中,秀了 ArchGenXML 操作方式,只要把 UML 圖完成,網頁應用程式的雛型也就跟著完成與更新,過程中只需要設定參數值,完全不需要寫程式碼,非常適合快速開發的場合。想在 Plone 裡利用 ATContentTypes 衍生新的應用程式,需要先準備好開發環境,包括 ArchGenXML 和 UML 設計工具,例如 ArgoUMLPoseidon CE 等。透過 google ArchGenXML 可以找到許多文件。

2007/05/10

Problem Solving with Python

繼去年五六月在南港高中辦過 Python 教學課程,今年五月也有機會到中山大學進行 Python 小型課程。整個活動是三場系列性質的演講,稱為「自由文化與自由軟體研討會」,由洪朝貴老師與中山大學教育研究所楊所長共同發起,在高雄市教育局的支持下完成。我的講題是「長線投資的電腦學習策略: 以跨平台的 python 及 regexp 為例」,其實就是利用三小時,教 Python 程式語言入門,場地在電腦教室,鼓勵學員能夠親手體驗 Python 的易學易用。看到學員能從無到有,學會 while 與 for 迴圈,並完成九九乘法表的列印,感到甚是欣慰。可惜自己沒弄熟 Python 應用 regular expression 的方法,將來還得加強這部份的教學內容。

2007/05/07

The software is an artifact of the community

Jon Stahl 提到 Paul Everitt 講過 The software is an artifact of the community 這句話,啟發很大。沒有了解軟體背後的社群,就難以了解軟體的內涵,社群文化,以原始碼作為傳承型式,體現的不只是一套軟體,同時也是關係脈絡、協商機制、分工合作的智慧結晶。快樂的黑客才能不斷創造,健康的社群才能演化好的軟體。

2007/04/21

Plone global_logo Customization

預設的 Plone site 上方是個圖片,系統以 global_logo 變數來代表它,選擊圖片會連到固定的 Plone site 連結網址,想要更換連結網址的方式如下:
  • 找到 global_logo 預設位於 portal_skins/plone_templates 裡,點擊 Customize 按鈕,表示要複製這份 Filesystem Page Template 到 portal_skins/custom 裡進行編修動作。


  • 把 tal:attributes="href portal_url" 移除。

  • 再把 href 改成我們要的連結網址,例如 href="http://www.python.org.tw/" 這樣的網址。


另外,也可以直接修改 portal_url 屬性設定值,但此法可能會有副作用,讓某些參考到 portal_url 的 method 出錯。建議採用前述方法。感謝 yungyuc 整理處理方法。

2007/04/13

The Question of Quality

Partial translation from Open Source Network Administration by James M. Kretchmar
The best quote is "The software quality only benefits from the fact that it is a labor of love."

採用自由軟體的最大疑慮,是擔心它們比商業軟體來得差,特別是在不容出錯的應用場合上,例如線上的網管工作。
如果是付費買來的軟體,品質一定比較好,對吧?
從經驗來看,我們發現是錯的。
許多自由軟體不但和同類商業軟體一樣好,有些甚至表現更好。
舉 Multi Router Traffic Grapher (MRTG) 為例,它已經是業界標準必備的頻寬用量圖示工具。
平常買的網路通訊設備要花上成千上萬,這樣的產業都使用自由軟體了,可見有其可取之處。
當然,如同商業軟體有好有壞,自由軟體也是有好有壞的。
自由軟體的愛好者相信開放源碼開發模式有助於改善軟體品質。
從別的角度來看,更多的開發人員並不必然帶來更好的品質,這點在 The Mythical Man-Month 書中提過。
而且,有些開放源碼軟體,例如驅動程式,懂的人很少,大家幾乎只拿來用而不去看內容的。
值得一提的是,撰寫自由軟體的人,通常都是專業程式員。他們可能身處在大學校園裡,其作品不需要透過商業方式販售,他們也可能白天在業界工作,利用下班時間來參與自由軟體。
只有對研發工作的熱愛,才是軟體品質提昇的助力。

2007/04/02

Madriva with ClassmatePC

ClassmatePC 是 Intel 研發的低階筆記型電腦,低廉的成本,就是設定來配合開發中國家的教育場合。硬體由巴西所製造,作業系統提供商之一,則是法國的 Mandriva 公司,為 Linux 在教育應用領域擔任先鋒。除了一般的桌面應用程式外,這套系統還搭配教師模組、親長模組、防竊模組,以便師長可以進行統一示範,輔導學童,或是過濾網站內容等。

2007/03/19

Backing Up ZODB

Carsten Raddatz 介紹利用 cron 來備份 Zope Data.fs 的實例,用處很大。因為架設 Zope, Plone 網站並不難,但資料昇級常是一大挑戰。

2007/03/11

Tutorial for Python Language

Python 具備簡單易學的特性,合適成為學習程式語言的入門工具。我曾在 2006年四月,於台北市南港高中的資訊社團課程裡,引介一系列 Python 教學及工具,內容包括迴圈運算利用 wxPython 建立視窗圖形、利用 poEdit 管理中英文語言資源檔案等,學習效果良好,學員裡還包含一位國中生,他的學習進度並無落後,初步證明教材程度能被一般高中以上的學生所接受。
我想看到台灣的年輕朋友,能夠容易地取得程式語言的教材及工具,達成此目標的可能方式不少,但目前,台灣的出版商還不敢投入 Python 中文書的市場,學校裡即使有想教 Scripting Language 的老師,也不容易獲得合適的教材與教具,因此,針對高二至大二的資訊社團或科班師生,系統化地整理出適合此一族群的教材及教具,應是推廣效益較高的方法。
既有的教學素材,我發現 How to Think Like a Computer Scientist: Learning with PythonA Beginner's Python Tutorial 都是好的起點資源,像 Beginning Python: From Novice to Professional 是不錯的入門書,而 ShowMeDo 上則累積越來越多的教學影片,值得參考。另外,觀察學員如何應用工具及發揮創意來解題,是評量學習效果的好方式之一,像 The Python Challenge 就是有趣的例子,老師在解說 Python 的基本語法及函式後,就可以鼓勵學員闖關解題。

2007/02/13

Updated Python Promotion

既有 www.python.org.tw 及 www.zope.org.tw 的網站服務,近期開始重新整理,包括先請 yenjinc 重灌作業系統,再由 Yung-Yu Chen 逐步建置新服務。舊有資料目前完整存放著,但不再額外維護,會擇日以類似 old.python.org.tw 這樣的網址上線,供老朋友們取用。關於新的服務,「先求有,再求好」是我的原則,所以先架出 moinmoin wiki 的服務,期待人氣累積後,能提供更多樣的服務。