2008/03/06

Plone Package Management with buildout

在 Zope2 以前的時代,新增模組的方式,是把下載來的模組檔案解開到 Products 目錄裡,但這樣的方式至少有下列的缺點:
* 不易整合 egg 或 setuptools 帶來的便利,這些是 Python 在模組包裝與系統擴充上的新方案,越來越多的 Python 模組以 egg 型式來包裝,並利用 setuptools 來散佈與佈署,新版 Zope 與 Plone 也需要配合這項潮流。
* 傳統 Zope2 模組管理方式,無法提昇軟體重用性,讓 Zope 與 Plone 成為對外孤立或競爭的環境。

因應上述模組管理的新需求,新版 Zope3 利用 buildout 機制,充份發揮 egg 的效益。不過,舊有的名詞現在被更改,系統運作的細節也有所不同,例如 Zope 的 instance 以往是透過 mkzopeinstance.py 來建立,現在改由 buildout 接手,而模組命名方式,也由 PloneSomeProduct 改成類似 plone.app.some 型式,以便不同的模組能整理在相同的 namespace 之下,最後,再透過 configure.zcml 之類的檔案來註冊模組。

安裝 buildout 的方法,是先準備好 Python 環境,以 Plone 3.0.6 版本為例,要配合 Python 2.4.x 版本,並記得加入必要的模組,例如 PIL 等。再安裝 setuptools 工具,可下載 ez_setup.py 並執行 python ez_setup.py 完成,重點就是讓 easy_install 能正常運作。接著安裝 ZopeSkel 工具,可執行 easy_install -U ZopeSkel 指令,它會安裝好 paster 程式。

執行 paster create --list-templates 會列出可指定的 template 項目,必須至少包含 plone3_buildout 項目,接著就可以執行

$ paster create -t plone3_buildout myproject
$ cd myproject
$ python bootstrap.py
$ ./bin/buildout
$ ./bin/instance start

2008/03/05

ZPyODBCDA with MSSQL

之前在 Plone 連接過 MySQL 與 PostgreSQL,現在 Microsoft SQL server 也成功了。操作的環境是在 Mandriva 2008 上,已知滿足
unixODBC, libunixODBC1, libunixODBC1-devel, libfreetds0, libfreetds0-unixodbc (可考慮額外加裝 libfreetds_mssql0, libfreetds_mssql0-unixodbc) 這些安裝檔案相依關係後,能成功完成設定。題外話: 或許不需要安裝這麼多檔案,但一時之間也懶得細究了。

ODBC driver 和 data source 設定方式可參考 unixODBC with MS SQL 文件。此處設定 driver 應是主角,我使用 Driver = FreeTDS 設定值,設定內容會記錄在 /etc/odbcinst.ini 檔案裡。題外話: 猜想 data source 留待在 Zope 裡 database adapter 設定即可,透過 odbcinst 指令我還是將兩者都設定好,但 data source 設定值能成功記錄在 $HOME/.odbc.ini 而非 /etc/odbc.ini 檔案,讓我感到困惑。如果需要更多的設定參數,可參考詳細參數資料。

我使用的 Plone 環境是 UnifiedInstaller,要先裝好 pyodbc,例如 Plone-3.0.6/Python-2.4.4/bin/python setup.py install,接著再安裝 ZPyODBCDA。題外話: 原本試著放到 Plone-3.0.6/lib/python 目錄,並沒生效,這裡算是 SoftwareHome 的位置,改放在 Plone-3.0.6/zeocluster/Products 裡才成功,因為 zeocluster 目錄算是 InstanceHome 位置。

再從 ZMI 裡新增 Z PyODBC Database Connection,填寫 connection string 內容,重點是 DRIVER={FreeTDS} 也就是配合前述的設定值。


成功新增後,可到 Test 執行 SQL 指令來測試。

2008/02/25

Headhunting Skills

自稱是 searchologist 的 Jim Stroud 在 How to find Python programmers in 30 seconds or less 短文裡,示範如何用 Python Search 服務來獵工程師人頭,此例當然是以 Python 程式員為對象。「先找對人,再決定要做什麼」,這是一種管理上的境界,而在網路上找到人才資源的方法,被稱為 digability。

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 就行了。
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfhG4M07hD_ZsxOoGAcDHh1suCP0l8S4NG01OjiBwkxhtnoSesUoVeQfDDUpPlw2FRIXVersdXjU8D-TNoXjjyC-U2ym7QlyOFCW-tOfWhhISzcPqxjNN6QcLFKLmuA02jo226tNWmZ7hw/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 程式寫作。

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