星期日, 6月 24, 2007

Thread dying problem may fixed in django/flup.

一直都耳聞django的apache+mod_fastcgi+thread mode在高負載狀況下有問題,
甚至也有人將之歸結於python的thread實作有問題,
所以我一直以來都是使用prefork的方式來啟動fastcgi/wsgi,
上禮拜在替django作負載調試的時候,
也發現thread mode在超高壓力測試的情況下,的確會停止運作造成service unavailable
(concurrency > 1000)
因此才花時間找出真正的原因(至少在我這邊的原因),
應該是django所採用(其實不止django, pylons跟turbogears也有採用)
的FastCGI to WSGI adapter -- flup,
在threadpool的實作上有些許的小問題, 沒有對運作異常的thread拋出例外的情形加以處理,
才導致了發生問題的thread沒有再次進入threadpool,所以運作一陣子後會讓所有thread悄悄死去.

在修正了這個問題之後, 即使在concurrency > 1000的情況下仍然保持順暢運作,
也擺脫了使用modpython或prefork mode的fastcgi大量耗用伺服器記憶體的情形,
thread mode + FastCGI/WSGI 果然才是王道!

我已提交patch, 期待新版的flup收納之後, 讓python的web framework在thread mode下運作更順利.

星期二, 6月 19, 2007

[link] Py3K status.

Python 3000 Status Update 來自BDFL (GvR) 的消息, 說明目前python 3.0的發展狀況.

python 3.0的第一個alpha測試版本將延至今年八月底釋出. (還有兩個月!)
所以預定3.0的最終釋出版本也順延至2008年第二季後.

恩, 照這個估算2009才是python3.0正式的開始.
還有一年半的時間可以假裝這世界上沒有python 3.0 ;)

星期六, 6月 16, 2007

[rant] Ubuntu果然連這招也學會了...



我好害怕啊.... 咬我啊... :P

星期五, 6月 15, 2007

[link] Generate django project API docs

http://wolfram.kriesing.de/blog/index.php/2007/generate-django-project-api-docs


這篇講到如何用epydoc產生比admin裡的doc更完整的django API文件.
當然會包含自己專案裡面API的doc string.
very useful.

星期四, 6月 14, 2007

[link] Mark Shuttleworth on VCS. 馬克·沙特爾沃思先生談論版本控制系統

馬克·沙特爾沃思(Mark Shuttleworth)先生 -- 如果你不知道我在講誰的話....

就是世界第二位平民太空人,早期debian開發者跟Ubuntu創辦人啦...

在他的blog上談論了他對VCS的一系列看法.

Choose Lossless VCS tools if you have the luxury

Further thoughts on version control

Renaming is the killer app of distributed version control

我讀了一下他的觀點大概就像這樣...

"""
VCS最重要的功能就是renaming, 而bzr把renaming視為非常重要的功能,
不管你的目錄怎麼搬, branch怎麼merge, bzr就是玩不爛.

bzr就像raw-format, 什麼都紀錄所以速度較慢但是卻可以無損轉換成其他格式...
在不同的情形不同的狀況下, 都可能有不同的最佳VCS工具.
何況世界變化很快, 從tarball, RCS到CVS到SVN...
現在很明顯的又進入到了分散式VCS的戰國時代,
而過一陣子搞不好又有更新更好的工具.

所以... 就像你最寶貝的片子/照片(通常)會存個無損RAW檔一樣,
bzr什麼都給你記下來, 當你真的需要在特定環境作特定應用而bzr辦不到的時候,
可以很快轉換過去.

"""

當然底下的評論自然有darcs眾,水銀黨(hg)跟git幫要戰mark...
這個就跟我沒關係了...
我只是普通用戶一枚,
反正這個系列的文章可能還會繼續下去,
就等著隔山觀虎鬥, 爆米花買好, 戰的好記得出來拍手就好了.... XD

星期三, 6月 13, 2007

PEP 3104 Access to Names in Outer Scopes -- or the ture closures for py3k

http://www.python.org/dev/peps/pep-3104/

python 2.1以前, python是沿用C對scope的思維,
只有很簡單的global跟local的scope概念.
(and builtin)

python 2.1之後引進nested scoping,的確帶來了不少彈性,
不過比起一些更為彈性的語言來說, 對於scoping的控制
仍然無法稱作完善.
而PEP 3104引進了nonlocal這個關鍵字後,
總算讓在python使用closure顯得自然.

目前2.X的狀況:

 
Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def x():
... t=9
... def y():
... print t
... t = 10
... print t
... return y
...
>>> z = x()
>>> z()
Traceback (most recent call last):
File "", line 1, in ?
File "", line 4, in y
UnboundLocalError: local variable 't' referenced before assignment


雖然 我們的用意是要讓t被enclosed, 但是卻沒辦法修改t.
注意到為什麼了吗?
由於在scope範圍內有了對t的assignment,
因此python會implicit的認為t是個local變數..
啊 可是我的第一個print t敘述裡的t要的不是被rebind過的t啊~~!

ㄟ.... 老師沒告訴你吗?
"Explicit is better than implicit." :D
所以py3k引入了nonlocal這個keyword,
以往只能用各種hack來解決的這個問題,
(最常用的一種是傳入list[0]),
會相對的使得closure的運用顯得不夠直覺.
在py3k底下則可以寫成這樣:
(現在print 改成 function ,,要括號,, 真容易打錯 :P )


Python 3.0x (p3yk:55958, Jun 13 2007, 18:39:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def x():
... t=9
... def y():
... nonlocal t
... print(t)
... t=10
... print(t)
... return y
...
>>> z = x()
>>> z()
9
10


加入了nonlocal這個declare之後,
是不是比以前清楚的多呢 :)

星期日, 6月 10, 2007

[link] 有愛連結: 以 New Gameday 數據解析王建民的投球特性

剛剛讀到這篇 Whither所寫的 漫步在綠海豚街上: 以 New Gameday 數據解析王建民的投球特性, 看到這篇文章用心的透過Gameday的XML數據分析王建民的投球. 着實又讓大家見識到所謂的"有愛"是怎麼回事 :D

MLB於2006年裝設了新版的gameday,除了將線上轉播帶進了一個新的時代,在棒球場上更裝設了30fps的高速攝影機以便能及時的分析到投打對決的實況, 然而目前只有九隊安裝高速攝影裝備, 很可惜洋基目前尚未裝設, 所以大大的減少了分析王建民投球數據的資料, 而該文便是在分析王建民於2007/05/16芝加哥白襪隊客場先發時所留下的XML數據. 內文有詳實的內容跟美觀的圖表, 透過科學化的角度分析投球內容 ,非常值得所有洋基/王建民的球迷一讀.

星期四, 5月 31, 2007

Google gears !

今天進 google reader的時候發現右上角多了幾個字: offline

好奇的按下去之後發現 google reader已經引進了
google的離線儲存新技術: google gears.

也就是說安裝之後,
google reader瞬間變成離線也能閱讀的RSS瀏覽器了 !
看來離線的gmail也不遠了...

以技術面來說google gears
以new bsd license放出,是完完全全的自由軟體.
支援Windows/Mac/Linux ,
並且支援IE/Firefox/Safari(未來將會支援,目前在mac上支援firefox)
等於所有主流系統全部支援.

google gears除了離線存取現有的web application之外,
還提供了一個WorkerPool的API幫助programmer將資源吃重的一部份程式以非同步方式存取,
並且還內建輕量級資料庫sqlite 支援使用javascript撰寫sql
(沒錯... 就是像下面這樣
var rs = db.execute('SELECT dish FROM recipe WHERE recipe MATCH ?', ['tomatoes']);
)
之前雖然也有如dojo storage之類的解決方案.但總不如早已習慣的rdbms來的方便. google幹的好啊!

google gears目前雖然仍是beta中,
但解決了web application離線存取這個麻煩的問題,
由於是完完全全的自由軟體(允許商業使用)
在未來有機會成為業界的新標準.

更多詳細的資訊請參考:

http://code.google.com/apis/gears/index.html
http://gears.google.com/

星期六, 5月 26, 2007

[link] Evolution of a Python programmer

從白菜的blog上看到的

http://dis.4chan.org/read/prog/1180084983/

我也來加一個:

Python mind but Lisp/Scheme in heart Programmer:

Y = ( lambda func:
( lambda f: func(lambda x: (f(f))(x)))
( lambda f: func(lambda x: (f(f))(x))))
F = lambda f: lambda x : x==0 and 1 or x*(f)(x-1)
T = Y(F)
print T(6)

閱讀紀錄: <<從北京到台北: 精神藥理學家張文和的追尋>>



氯丙嗪(Chlorpromazine, C17H19ClN2S1 •HCl ),是第一個用於精神病的藥物,

這個在1950年代被研發, 又稱作冬眠靈的藥物, 扭轉19世紀重病理輕治療的風氣,

在20世紀末期揭起"二次生物精神醫學"的大旗.

將精神醫學帶到一個新的領域 -- 精神藥理學.


而這本由心靈工坊出版, 吳佳璇醫師透過訪談並編寫整理出版的 ,

正是其英文自傳被收錄在國際神經精神藥理學會(CINP)出版的

<<1980年代傑出神經精神藥理學家自傳集>>裡,

在精神藥理學界極為知名的張文和張教授,

他一生在精神藥理學術領域裡耕耘,與艱困的外在環境持續搏鬥,

但卻始終不曾放棄的奮鬥傳記.



由於舍姊的緣故 運氣不錯的拿到了一本張教授親筆簽名,

內容300頁左右的自傳書籍. 這次回到家中總算有閒暇仔細閱讀.

張教授從生物化學轉而研究精神藥理學後, 幾十年來熱情不曾中斷, 並培養後學不遺餘力.

儘管經歷中國的文革下放, 來台的凶險難行 也曾經歷外在環境的刁難,

但為了繼續能研究精神藥理學, 不斷求取新知, 走進國際, 毫不畏懼的接受一場又一場的生命試煉.

雖然我不是這個領域的內行人, 卻很容易的從書中描述張教授一生的行為與事蹟,

讀出張教授對這個領域的熱情與專注.


書裡有提到精神藥物領域之所以特別重要,

是因為一般的疾病較容易理解病因,

而經由病因開發藥物加以治療.

而精神疾病卻不然,

反而通常是因為運氣不錯湊巧發現了能加以治療的有效藥物,

才有辦法透過研究有療效的藥物來了解真正的精神病因.

而正因為精神藥物學正是象徵著一顆能解讀人類精神疾病奧秘的希望之石.

也無怪乎張教授本身極為喜歡那顆導致人類破解古埃及文字奧秘,

目前已被放在大英博物館展覽的Rosetta Stone.

如果連個人平常的喜好都能透露出這樣的願景跟理想,

從此的確可看出張教授對於精神藥物學的喜愛跟專注精神, 委實令人感動.


書中張教授的自序的標題即是"有生涯無規劃" ,

不論是在哪個領域 這種作研究的精神著實令人佩服.

想起之前有次讀到日本鎖國時代的日本人,

為了翻譯一本由荷蘭語所撰寫的解剖書籍:"解體新書"

在沒有任何字典的輔助跟文字完全看不懂的情況下,

翻譯了整整四年才得以翻譯成功.

也因此才促進了當時日本醫學技術的大幅進展.

而反觀在這個資訊非常容易獲得的時代,

卻有許多連非常基本的問題都不肯自行研究並搜尋資料

卻只會等待別人告訴他答案或根本不願求知的人,

所以我想這種有志者事竟成的心理素質,

正是我們這個世代所需要學習和效法的.