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,行å‰å¹¾ä¹Žå°±ä¸å¿…準備地圖了呢。
Posted by yungyuc
at
19:46,
0 comment,
0 trackback.
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 了。
Posted by yungyuc
at
19:25,
0 comment,
0 trackback.
這是個值得注æ„çš„å•題。事實上 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)。
Posted by yungyuc
at
17:43,
0 comment,
0 trackback.
我å‰å¤©æ‰ 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 上å¯é›£æ‰¾åˆ°äº†ã€‚
Posted by yungyuc
at
22:35,
0 comment,
0 trackback.
è¬è¬ song 作的å°åœ‹æ——。在兩岸三地裡,Plone 2.1.1 åªé™„了大陸的å°åœ‹æ——;按ä¸åˆ°èªžè¨€åˆ‡æ›çœŸéº»ç…©å‘¢ã€‚
請把å°åœ‹æ——放到
$PRODUCTROOT/PloneLanguageTool/skins/LanguageToolFlags/
下é¢çš„ flag-zh-tw.gifï¼Œç„¶å¾Œé‡æ–°å•Ÿå‹• Zope。
Posted by yungyuc
at
21:50,
0 comment,
0 trackback.