2008/06/05

RPM and DEB Generation

BitRock InstallBuilder 能和 RPM 資料庫結合,並在跨平台環境建立安裝檔案。

2008/05/27

Python Version of wget

據說是 Guido van Rossum 在 Python Cookbook 的例子。
import sys, urllib
def reporthook(*a): print a
for url in sys.argv[1:]:
i = url.rfind('/')
file = url[i+1:]
print url, "->", file
urllib.urlretrieve(url, file, reporthook)

2008/04/13

Unix Command of the Day

$ history | awk '{a[$2]++ } END{for(i in a){print a[i] " " i}}'|sort -rn |head -n 20

2008/04/11

Key Factors for a Sucessful Startup

據林富元表示,有十八訣:
有無良好完整的成熟經營團隊?
有無與眾不同而居於領先的知識能力?
對市場是否有踏實而足夠的認識? 所嚮往的市場是否處在初生期或成長期?
是否一窩蜂追逐時尚隨波逐流?
有無知識產權或產品的智慧財產?
企劃中的產品或服務是否擁有很高的進入門檻?
對檯面上隱藏中的競爭者有無充份的了解?
知道自己在市場上,依長處而取決的區隔定位嗎?
有無完整的三至五年計畫書及財務分析報表?
是否能籌募完整足夠的創業基金?
投資股東有附加價值嗎?
經營團隊與投資股東享有良好互補關係? 它將影響你股東未來與你一路跟進的支撐力?
主要領導者的人格品質與靈活堅忍性? 有無能力雄厚的 CEO 對企業的影響成敗至大。
公司的整體文化為何? 撇開教條與文宣,公司整體是否具有共體時艱的內在文化?
這個企業能吸引到足夠的夥伴與聯盟?
團隊有市場開發能力嗎?
公司的遠景與願景是永續經營或曇花一現?
最終的最偉大雋永的價值,你是否取得了內外大眾的信任?

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