PyGTK 中的 pixbuf 和 Python 的 garbage collector 有一些互動上的問題;我的運氣不錯,就在今天下定決心進入 PyGTK 的世界之後,馬上就遇到了。
情況是這樣的:Python 的 gc 不能自動處理 pixbuf 使用的記憶體,所以不斷配置新 pixbuf 的結果,會把所有的記憶體吃光;我們要手動呼叫 gc 來收集用不到的記憶體。這已經是個 FAQ。另外有種 workaround,因為我剛好也要用到 PIL,所以看起來還蠻誘人的。
PyGTK 中的 pixbuf 和 Python 的 garbage collector 有一些互動上的問題;我的運氣不錯,就在今天下定決心進入 PyGTK 的世界之後,馬上就遇到了。
情況是這樣的:Python 的 gc 不能自動處理 pixbuf 使用的記憶體,所以不斷配置新 pixbuf 的結果,會把所有的記憶體吃光;我們要手動呼叫 gc 來收集用不到的記憶體。這已經是個 FAQ。另外有種 workaround,因為我剛好也要用到 PIL,所以看起來還蠻誘人的。
當 Google 推出 maps.google.com 之後,線上地圖變成不能不用 ajax。然而,才過沒多久的時間日本的 mapion 就急起直追,超英趕美,現在新的 mapionbb 已經比 google maps 更厲害了。
現在的 mapionbb 可以滑鼠拖拉、雙擊定點,而且比 google maps 多了滾輪縮放。好方便,而且 Linux OK。雖然沒有衛星空照圖,但右邊有當地的天氣狀況報告,對都市來講更為實用。
如果能在日本直接用 3G 連上 mapion,行前幾乎就不必準備地圖了呢。
md5sum 好像作不到這件事,所以寫了一個 Python script:
#!/usr/bin/env python # $Id: hashdir.py 24 2005-11-08 09:17:44Z yungyuc $ import sys import os def getDigestPython( fn ): import md5 chunklen = 1024*4 m = md5.new() f = open( fn, 'rb' ) while True: data = f.read( chunklen ) m.update( data ) if len(data) != chunklen: f.close() break digest = "" for val in m.digest(): digest += "%02x" % ord(val) return digest def getDigestMd5sum( fn ): import popen2 stdout, stdin = popen2.popen4( "md5sum -b \"%s\"" % fn ) digest = stdout.read().split()[0] return digest def main(): try: findpath = sys.argv[1] logfn = sys.argv[2] except: sys.stdout.write( "Usage: %s <path to hash> <log file>\n" % \ os.path.basename(sys.argv[0]) ) sys.exit(0) try: f = open( logfn, 'w' ) f.close() except: sys.stdout.write( "Unable to open logfile: %s\n" % \ logfn ) sys.exit(1) if not os.path.isdir( findpath ): sys.stdout.write( "Is not a directory: %s\n" % \ findpath ) sys.exit(2) for root, dirs, files in os.walk( findpath ): for file in files: thisfn = os.path.join( root, file ) try: digest = getDigestPython( thisfn ) except: digest = " "*16 logmsg = "%s %s" % (digest, thisfn) f = open( logfn, 'a' ) f.write( "%s\n" % logmsg ) f.close() sys.stdout.write( "%s\n" % logmsg ) if __name__ == '__main__': main() # vim: cino=>4 et nu ts=4 sw=4:
給兩個參數:第一個是要 digest 的目錄,第二個是 digest 結果要存的紀錄檔。這個 script 跑過一遍以後,將來就可以用 md5sum -b -c logfile 來核對檔案的 md5 checksum。
Python 裡的 md5 模組跑得和 md5sum 差不多快。然而一次從檔案讀取的區塊不要太多,4kB 差不多是 optimum。
沒有後方,便宜行事。
在前線戰場上沒有很多時間考慮事情,不是他死,就是我亡。即使在戰鬥中受傷斷肢,奮勇向前的人還是能比停在原地的人更有生存機會。在戰場上不能疑惑。
後方可以生產、可以準備,有了後方的支援和補給,前線將士才能不顧一切地衝鋒陷陣;然而,後方可以歌舞昇平,不必像前線一樣以死相拼。這是兩個不同的世界,但應該同樣為著社會的安定努力。
我們的國家好像沒有後方。在社會的許多層面都是全民皆兵;拼經濟、拼治安、拼外交,萬民皆拼。其實無論奮鬥的目標為何,每場戰鬥都有前線和後方的分別。身為前線的士兵,不應該指責後方坐辦公桌的文員每天可以吃飽穿暖;作為後方的社會中堅,也不應該厭惡突擊隊員的體臭。
同一間公司的員工薪資本應有高有低,若一律平等,那該誰去拓展業務呢。
禮拜六的時候去喝了同學的喜酒,恩師也有出席,談到了現在國中導師的難為之處,不在學生品行不佳,而在家長與校方的智育至上觀念牢不可破,再加上不著邊際而火上加油的教改;言談間盡是嘆氣之聲。認識一些在公務機關作事的朋友,對於機關的無效率非常失望,更是常見內鬥耗損,「組織目標」四字則難得一見;談到組織的現況和前景,總是默然無語。
真是一片黑暗。
人生是奮鬥的過程 (日本人常用「戦い」,套在中文裡似乎過於野蠻了,但卻很有味道)。不過奮鬥需要規則,不是瞎拼。總覺得我們台灣人事情作了就不管後面的情況很常出現;我們可以衝可以打,但在有所成就了之後也不太會分贓。具體來說的話,就好比撰寫程式不寫文件,其它人想從程式裡得利幾乎只能從頭開始摸,繼續擴展也不容易。表現出來的是我們有了組織也不懂得如何團結,最後都坐實了中華民族的散沙性格。
或許抗戰勝利後的台灣社會,在發展了六十年以後已現疲態,而且尚未找出有效的換血方法。我們還處在全民皆兵的心智狀態裡:每個人都是前線士兵,只考慮眼前的問題,沒時間也不願意思考長遠的發展。但缺乏補給的部隊打不久,槍沒子彈打不了人,餓肚子的兵不會贏。我們需要後方思維,綜觀全局,把近期與遠程一起計畫進來;即使出發點是自利也好,總要考慮多一點。
一點靜夜雜想。
GoDaddy ccTLD 已經有 .tw 了。
這是個值得注意的問題。事實上 psyco 與一些 Python 模組是有點不相容。
在使用 MayaVi 的時候,mayavi.Misc.RenderWindow.RenderWindow 類別建構式裡在呼叫 vtk (在 Python 裡的 binding) 時會出現 segmentation fault。
因此,在使用 MayaVi 的時候要注意,小心 psyco。
Note
psyco 會對 Python byte-code 進行機器碼的編譯動作,能加快 Python script 的執行。
MayaVi 是一個基於 vtk 的顯像繪圖軟體,以 Python 撰寫,主要用於 CFD 資料的處理 (前身為 PyCFD)。
我前天才 renew 兩個 domain,今天 GoDaddy 就從 $8.95 降到 $6.95。
真該慶幸我只有兩個 domain,只損失三個便當。
我非常喜歡 Plone 強大的功能和豐富的附加程式。因為架構在 Zope 整套物件化的 ZODB 上面,讓 Plone 可以用非常物件導向程式設計的方式存取資料。在之前接觸過的所有網頁開發工具裡面,Zope, Plone 和 Python 這個組合不像其它 scripting language 一樣得搭配關聯式資料庫,就能夠有安全可靠的資料儲存方式。Product, ZODB 再加上適當的組態檔,Zope 就能把資料和程式帶著跑,解決了不少系統轉移會遇到的問題。我認為這麼高的易維護性是很有價值的。
然而,Plone 最大的問題就是慢。這或許是功能強大的必然結果,限制了系統能夠應用的領域。在一個輸出入同等重要的系統裡,因為不能用 apache caching 的方式加速,每秒能有 10 個 hit 算是很不錯了。要再提昇效能,就得配合 ZEO 組成 Zope cluster,但在 ZEO 身上仍有效能瓶頸。
對資料流量大的網頁系統來說,真不適合用 Plone。不過,Plone 適合用來建構內容複雜的網頁,它可以把各種不同的資料、頁面和影像管理得很好。建立個人網頁也合用;索引、搜尋、on-site 編輯的功能一應俱全,web-based management 的能力讓人舒服。
準備要用 Plone 架設真正的應用系統了,期待 Plone 2.1 的表現!
AttributeError: 'module' object has no attribute 'copyright'
昨天在對某個 Plone 2.0.5 網站試行昇級為 Plone 2.1.1 的時候,發現了上面這個錯誤。
這非常讓人困擾。我把 Plone 2.1.1 裝在 Zope 2.8.3 上,一開始以為是 ZWiki 0.46.0 的問題,移掉了沒有用;再把 Zope 2.8.3 一路降級到 2.8.1,仍然無解。裝了 Plone 2.1.1 是 CMFPlone product 出問題,什麼也不裝則是 Five 出問題;總有東西不能用,而且還是找不到模組屬性這種錯誤。這怎麼可能呢?Python 程式有這種蟲而沒被抓出來是難以想像的。
之前建立 Zope 2.8.2 + Plone 2.1.1 明明一點問題也沒有,怎麼換了後一個禮拜發行的 Zope 2.8.3 就不行了呢?因為思而不學則殆。
或許說是又罔又殆比較對。我沒發現 iconvcodec 沒裝好,以致於 import site 失敗:
'import site' failed; use -v for traceback
Zope3/Five 和 Python 結合地更緊密了點,看來不太願意忍受這種爛環境。
真是愚蠢的錯誤;不記下來,以後 google 上可難找到了。