星期四, 12月 13, 2007

python耶~~

今天同事跑來問我mips上有否uc版本的python,
一問之下原來是某版子的tv tuner附的sample application是日本人用python寫的, 沒python的話沒辦法試.
也剛剛好我也才剛編完mips uc版本的python 2.5.1沒多久,
所以就剛好直接拿過去用.
不過嚇我一跳,
以前都是得主動出擊之外還要忍受冷嘲熱諷,
這可是第一次有embedded業務上的code是要求"必須"有python的.
:D

星期五, 12月 07, 2007

設定 Logitech G5 in Linux(xwindow)

因為lloyd大大說他可愛的老婆說, 『不要因為便宜而買,然後嫌棄壞掉,還不如買好一點,用久一點來的划算』,於是就買了一支logitech的g5滑鼠, 但是linux下沒有windows上的setpoint driver, 所以就自己來了.

一插上就會自動有的功能包括左右中鍵滾輪上下跟硬體dpi設定,
不過滾輪向左向右水平滾動的功能未啟動,
另外大姆指鍵要自己做一些設定以符合自己的需求.

首先是/etc/X11/xorg.conf的基本配置


Section "ServerLayout"
Identifier "Default Layout"
Screen 0 "Screen0" 0 0
InputDevice "G5" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection

Section "InputDevice"
Identifier "G5"
Driver "evdev"
Option "Name" "Logitech USB Gaming Mouse"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "no"
EndSection

再來是啟動大姆指鍵,將Xwindow中鍵貼上(2)功能bind在大姆指鍵(8), 此外預設的滾輪左右(67)是顛倒的(括號中的數字表按鍵編號):
~/.xmodmap

pointer = 1 8 3 4 5 7 6 2 9 10 11 12 13 14 15 16 17 18 19 20

最後則是啟動滾輪向左跟向右,讓他可以直接在我慣用的gnome terminal跟firefox裡移動分頁. 並在gnome-terminal裡將滾輪中鍵貼上的功能換成剪貼簿的貼上(即一般的Ctrl+V而非大姆指key的xwindow中鍵貼上)

~/.xbindkeysrc.scm

(xbindkey '("b:6") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Up]'")
(xbindkey '("b:7") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Down]'")
(xbindkey '("b:8") "/usr/bin/xvkbd -window gnome-terminal -xsendevent -text '\\[Control_L]\\[V]'")


另外還有在firefox中調整滾輪的速度, 首先先在網址頁輸入about:config,
然後找到mousewheel.withnokey.sysnumlines 設為false
mousewheel.withnokey.numlines則設為6行或你喜歡的數字.

如果以下3個套件沒裝的話要另外裝:
x11-misc/xbindkeys x11-misc/xvkbd x11-drivers/xf86-input-evdev
(xbindkeys最好將guile的use flag打開, 若需要預設設定檔可以用xbindkeys -dg > ~/.xbindkeysrc.scm 來初始化 真的看不習慣scheme/lisp的人可以考慮使用基本的config: xbindkeys -d > ~/.xbindkeysrc, 當然scheme設定檔會稍微彈性一點)

另外xmodmap ~/.xmodmap跟xbindkeys要設成在打開xwindows時啟動.

星期三, 12月 05, 2007

新手: 你怎麼飛的??? 答: import antigravity

這句可能會成為Python Programmers的本月(年?)最經典.

此句的出典為本月在駭客圈裡非常知名但原本推崇perl語言的XKCD網站漫畫 (xkcd的作者昨天學了python, 注意看的話會發現Tooltip上還寫著Perl, I'm Leaving you.):




隨即有網友作了T-shirt:



加上 TIOBE Programming Community Index 的本月頭條: December Headline: Python surpasses Perl for the first time in history.
這個月似乎python推廣的好消息不斷. (或是perl ain't cool anymore?!)

所以,

下次記得老闆要叫你"""飛給他看"""的時候,

python可是連反重力模組都幫你寫好了.

;)

星期一, 10月 29, 2007

[tips] using flup as trac's default fastcgi backend. (with lighttpd)

I've found trac's fastcgi backend simply out-dated. I thinks it's direct copied from an old flup source, and since then flup really updates a lot, I've already use thread pool techniques everywhere in our web applications/frameworks for a while, so current trac's fastcgi backend implement just so out-dated and looks wierd when I installed it, really.

But thanks there's WSGI to save us ! I could just replace the fastcgi backend to flup-0.5 (latest, and author claims it maybe final version of flup) and SAVE MEMORY !

and it's simple too,
just install the flup package, and edit your old trac.fcgi / lighttpd's settings.

trac.fcgi:


try:
import pkg_resources

from trac import __version__ as VERSION
from trac.web.main import dispatch_request

from flup.server.fcgi import WSGIServer
WSGIServer(dispatch_request,maxSpare=100,minSpare=100,maxThreads=100).run()

except SystemExit:
raise
except Exception, e:
print 'Content-Type: text/plain\r\n\r\n',
print 'Oops...'
print
print 'Trac detected an internal error:'
print
print e
print
import traceback
import StringIO
tb = StringIO.StringIO()
traceback.print_exc(file=tb)
print tb.getvalue()


you can change the line which specify
maxSpare,minSpare,maxThreads,I use 100,
you should use less than 381 if you're using
python 2.4 (you'll hit stack limit at least on i386-linux) however if you're using python 2.5 you can change stack size via thread.stack_size,
though I don't think anyone would need that high concurrency (who knows?!).

below's also a sample setting in lighttpd.conf,

what really matters here is to remember add a
"max-procs" => 1
line in it, since we've already using thread pools technique, forking another process seems redundant (and WASTE memory).


fastcgi.server += ("/sandbox" =>
("sandbox" =>
("socket" => "/tmp/trac-sandbox.sock", #need to change for each
"bin-path" => "/var/trac/cgi-bin/trac.fcgi",
"max-procs" => 1, #default 4
"check-local" => "disable",
"bin-environment" =>
("TRAC_ENV" => "/var/trac/sandbox")
)
)
)


oh, btw I'm using trac-0.11dev, but I think any version below 0.11 which implement WSGI should also works.

星期日, 10月 21, 2007

[funny] Richard Stallman (RMS) 被忍者攻擊.

來自 Slashdot 的報導:

耶魯大學政治聯盟(Yale
Political Union, YPU,美國最古老的學生政治組織)的學生

仿效著名geek漫畫xkcd, 在耶魯一場Stallman對於DRM(Digital restrictions management)議題的演講裡, 對Stallman進行(玩笑似的)攻擊.




Richard Stallman主要在耶魯大學講述的議題為DRM,
RMS 認為現在大型商業公司(Apple,Microsoft,Sony)推動的DRM(數位著作權管理)是非法的,

常用的DRM限制包括:

* 必須在指定電腦或播放機才能播放
* 必須在特定的日期前才能播放
* 播放的次數
* 傳輸到播放機的次數
* 燒錄到光碟的次數
* 以上限制的混合
(引用自Wikipedia的DRM條目)

而GPLv3也可說是RichardStallman對DRM全面宣戰的GPL改進條款.

耶魯大學政治聯盟在RMS演講之後, 進行對 "DRM是非法的"這個議題的投票, 以33對20票通過.

不論我喜不喜歡GPL, RMS無疑是自由軟體界真正的鬥士,
他對於他眼中的惡向來從不讓步,
沒有GPL與FSF, 今日的自由軟體絕不能如此蓬勃.
而這樣具有風骨的人物跟信念堅持, 不論我是否同意他的論點, 都是讓我值得尊敬的.

星期六, 9月 29, 2007

BSD版權真正的敵人是GPL吗?

我下的果然是聳動的標題 :X

不過這陣子來Theo de Raadt (正反評價兩極化的openbsd hacker)對GPL的抨擊可以說是將沈睡已久的聲音再吶喊出來.
關於這件八卦有興趣的人其實可以在網上搜索一下,應該可以查到不少消息. 所以我只發表一下我無聊的感想.

一直以來信仰GPL的人們對於BSD license的評價就是以BSD-like版權放出的程式有機會被大企業給偷盜,然後變成close sourced的商業軟體. 所以最好自由軟體都使用GPL license才不會有問題.

簡而言之以GPL信仰者的觀點就是:

GPL --> 正義的一方
商業公司,closed source --> 邪惡的一方
BSD --> 爛好人,鄉愿

不過以BSD版權使用者的觀點來看, 似乎就不是這樣了.

大部份使用BSD版權釋出的軟體, 在實務上即使是被公司當作是closed source軟體販賣, 這些公司經常仍會回報patch給原本的團隊或作者. 此外, 增加使用的人數並真實的在商業上運用也有助於程式的測試改進.

所以公司或商業化的軟體 就算沒有幫助 基本上對BSD版權的危害並不如GPL的信仰者們所說的大.

而如果有人將軟體做了一些改進, 並用GPL版權釋出, 結果會變成怎樣呢?

今天舉個例子,比如說如果某個原本是用BSD版權開發的blog軟體,被某個GPL信仰者做了一些改進,並且改用GPL版權釋出. 這會造成原本都是自由軟體的使用族群分散之外, 另外如果新的修正是基於GPL版本的blog做的修正, 原本的BSD軟體就不再能拿回來用了. 因為新的修正會受到GPL的影響. 不得不變成一個GPL patch.(任何基於GPL衍生的程式碼均得為GPL授權), 知道這樣的嚴重性了吧, 也就是說GPL比封閉軟體還狠, 作完自己的修正之後不僅要奪走BSD版權的軟體現在的顧客,還要剝奪未來原本BSD可參考改進的程式碼, 變成只剩GPL-only授權釋出的程式有做修正. (當然 可以請求每個patch的原作者再用BSD版權釋出,然後再基於這個patch再做修改,不過在實務上似乎很少能做到如此)

Theo事件的導火線也在於此, linux people將BSD/GPL dual license的driver版權宣告拿掉, 然後re-license成GPL. 拿掉別人原本的版權宣告沒有任何問題吗? GPL people認為是沒有的, 總而言之 為了GPL people相信的正義 是可以犧牲BSD people的, 即使以後所有在linux上的driver的code patch都不得不為GPL, BSD版權的人們一點都不能拿來用也無所謂, 非我族類, 其心必殊.....

所以說... 就算theo過去怎樣怎樣 這次我覺得他講的倒有點道理... gpl 信仰者們, 也許BSD對於你們是異教徒, 但, 所謂自由軟體的正義真的是只有一條道路吗? 刪掉別人的雙版權宣告, 然後改成GPL only 真的是那麼的正義那麼理所當然吗? 我想值得再思考思考.

星期一, 9月 24, 2007

很有想法的gimp !?



看了Digg上這篇文章之後, 才發現gimp建圖檔時可以選衛生紙這個選項~~
試了一下還真的哩...

喔 這個概念真不錯 不過我家印表機可能印不出來吧....
還是美國的衛生紙現在改用 Double A材質了 ??? XD

星期五, 9月 07, 2007

[rant] 下禮拜要教招了~~

不知道國家找我這種沒戰鬥力的文官去幹嘛~~ 我當兵都在寫公文跟當客服處理客訴啊~~
哪會作啥戰...
還要去屏東某營區一個禮拜~~ 禮拜天早上就得出發~~
唉唉~~ 真不想去~~
我是很愛好和平的啊~~ (其實是不爽錯過一個禮拜的新番 Arrrrrgh~~ XD)

祝我平安歸來吧~~

[link] A Taste of Haskell 觀後小感

Part I
Part II
Slide

這兩部影片是在OSCON2007裡Simon Peyton-Jones的Haskell演講, 其實已經隔了一段時間, 今天晚上才一時興起去看,

因為知道是Microsoft Research裡的Haskell創造者之一,
原本是預期一個長得鬍鬚長長的老頭 然後開始講一些誰都聽不懂的玄學...
不然應該至少要長得像星際大戰的尤達吧~~

結果看了影片之後發現根本就大錯特錯... 大師不僅可以把玄學講成簡單的道理,
長得還比較像歐比王魁剛金...
連我都似乎開始有點聽懂了 @@ (雖然說這肯定是大師的催眠術)

Haskell最大的賣點不僅在於他是一個純粹的functional programming language,
更重要的是Haskell還帶有非常多在其他語言看不到的高等特性,包括惰性(laziness),型態類別(type classes), monads等等, 而這些特性將有可能會強烈的影響到我們下一個世代的程式設計語言.
也因此在諸多語言裡面也慢慢可以看到Haskell的色彩, 包括Simon Peyton-Jones所提到的C# 3.0, (LINQ據說是受到monads的直接影響), 還有python2之後的list comprehension等等都是例子,我覺得這些特性應該會慢慢的從Haskell中被帶出來讓世人所熟知.

(對了 講到python, lambda,map,filter都還在python 3.0a的builtin/keywords裡面,
只有reduce被移到functools裡. 之前map filter說要被降級好像是誤傳?(未查證))

Simon一開始講的是xmonad, 主要是一個haskell寫的
window manager, 非常的小所以他拿來作說明, 然後就開始講一些functional programming的基礎特性, 我主要注意到他說Haskell的types跟UML一樣是用來表示High level design, 這倒很有意思, 我是個python user/advocators我會喜歡duck typing跟lisp這種dynamic types的語言是很自然的, 但是像Haskell這樣的static typing語言不僅有type inference可以減少累贅感, 另外還可以透過compiler檢查高階設計, Data types的construct語法看起來其實也很接近BNF, 倒是讓我覺得static typing也沒有那麼壞了起來.

不過type classes有點複雜, 這是連Simon這種神人都覺得未來仍有發展空間的東西 我並沒有完全跟上, 改天還要再深入研究.然後就開始講到I/O跟scripting, IO的部份, 並不是很直觀, 網路上對於monad的討論也多到暴 所以我也是聽得很霧 另外也提到了Haskell library的現狀(就我以前try過的一些經驗, Haskell的library不算多, Cabel比較像是python的distutils, 可以裝一些3rd party的module, 不過dependency的部份有點麻煩, 似乎現在有人在發展一些工具在處理不過還是沒有很成熟), 這部份其實我目前比較沒有那麼大的興趣, 所以聽得有點散, 其實python就目前實務使用(套件,標準庫...等等)來說還是比Haskell成熟的多,並沒有很急著要學太多實務部份, 但我覺得Haskell是非常具未來性的語言, 所以現在多花點時間了解一些更基礎的特性或許也是對的.

之後開始聽到有關laziness跟first-class control structures, 這很有趣, 如果有學過lisp的話肯定知道lisp有所謂的special form跟macro, 因為lisp是一種語言的語言(meta language), 可以透過macro來無限制的擴展語言, 所以雖然是在1990年代的OOP風潮前就有的語言但卻可以不改變語言的本身特性而發展CLOS這樣的物件系統, 這也是為甚麼lisp之所以吸引人並且長久有穩定支持族群的原因, Haskell的laziness就是讓function跟data constructors不在第一時間就被evaluate, 直到真正需要的時候才去eval, 而這讓Haskell靠著laziness來取代lisp透過macro來支援special form的方法, 只要單純的撰寫函式就可以更動control structure, 這真是非常酷的特點.

最後simon講到Haskell跟其他語言採取完全不同的方法設計, 其他語言主要是一開始先想辦法讓語言有用(Useful)而慢慢的再來加一些限制讓語言更安全(safe), 而Haskell則是採取一開始是Useless(無用處)但是Safe的設計,然後慢慢的讓語言更加具有功能性.


之後simon也講了一些工具跟網站 畢竟這個演講也只是粗淺的導引, 還是有很多深入的內容要多看多玩才會了解 不過之前也看過一些Haskell的介紹跟導引, 他的演講對於個人提高興趣及指點迷津上我倒覺得成效還不錯.

看完演講總算比較有信心覺得這是個正常人可以玩的程式語言了, 知道玩這個語言沒那麼容易變成瘋狂數學家總是安心不少 ;) 不知道為啥突然想起研究所唸過的Kiyoshi Itō這個超神的家伙,記得聽以前的教授說Ito calculus是他的碩士論文發明了之後, 讓我真是想去再生兩個腦袋, 不過還好haskell裡的lambda caluli沒那麼困難, 只要知道\在haskell裡面是代表lambda, 其他只要lisp學好的話搞不好會更欣賞haskell滿直覺的表示法, 型別的理論我比較少接觸看起來還要多摸, 比較困難的是monad, 有時間的話繼續努力玩玩. (話說大師的催眠術果然是無敵的, 看來只要一直想著這很簡單這很簡單終究會變得..感覺..簡單起來 XD)

星期二, 8月 21, 2007

[tip] xorg裡改用滑鼠右鍵貼上

同事跟我說他想把x.org裡滑鼠中鍵貼上的功能改成用滑鼠的右鍵貼上, 雖然我搞不懂為啥會有人想這麼作,但還是有辦法的...

在xorg.conf裡:

Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "IMPS/2"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5"
.....
Option "ButtonMapping" "1 2 2 4 5 6 7 8 9"
EndSection

只要加上ButtonMapping這個選項, 就可以把實體的按鍵跟
邏輯上的按鍵分開來定義,而這個選項的定義方式就是將邏輯上按鈕照實體上的順序排列,而實體上的1通常代表滑鼠左鍵 2代表滑鼠中鍵3代表滑鼠右鍵.

像上例中 "ButtonMapping" "1 2 2 4 5 6 7 8 9"
就是表示將邏輯上的1 2 2 定義到實體上的 1 2 3
也就是將滑鼠實體上的右鍵現在定義了原本滑鼠中鍵貼上的功能
如果要把滑鼠實體中鍵的功能完全取消, 也只要拿一個原本邏輯上未定義的按鈕替換掉即可,
如: "ButtonMapping" "1 9 2 4 5 6 7 8 9"
這樣即可將原本中鍵的功能取消, 並將右鍵變成貼上的功能.

星期六, 8月 11, 2007

[link] Gouge Found on Shuttle Endeavour's Underside

update:
Space shuttle Endeavour lands safely in Florida 十數天後平安歸來了! 可喜可賀!

http://science.slashdot.org/science/07/08/11/0110236.shtml

NASA的奮進號太空梭於日前發射, 執行第118號太空任務, 不過根據最新的消息, 似乎發射過程中有被冰塊擊中機腹,
造成機腹有一塊三平方英吋凹槽的情形發生.

也許聽起來不嚴重, 但這也不禁令人想起就在四年前, NASA發射的哥倫比亞號, 也是在發射時被泡棉擊中機翼,
經NASA技師判定無問題, 管理階層開會數次且判定為不處理的情況下,
再兩個禮拜後回到地球地表時過熱而解體爆炸導致全部太空人死亡的悲劇.

這次發射任務眾所矚目的焦點是自從二十年前挑戰者號搭載教師卻在發射過程中爆炸後,
第一次搭載教師上太空梭, 這次上太空的女教師芭芭拉摩根, 其實就是跟二十年前挑戰者號不幸罹難的女教師克莉絲塔Teacher_in_space計畫裡一起受訓,也名列在挑戰者號太空任務的候補名單, 自從挑戰者號失事之後, 計畫被迫中斷, Barbara繼續回去教書, 而這期間為了替代挑戰者號建造了奮進號, 因此到了1998, Barbara才重新回到nasa.Teacher_in_space計畫也才得以重新繼續, Barbara也直到今日才能升空一圓夢想彌補遺憾.

話說為啥我這麼關心這段故事咧... 話說前幾個月才剛看完歡樂收場的"Rocket Girl",對於這種現實發生而被變調過的故事橋段特別的有愛...:P 祝福這次Endeavour飛航成功順利啊... 不, マツリ, 你一定要成功啊~~~ XD

就在三四年後, NASA的太空船也將全部退休, 改由新一代的可拋式Orion宇宙飛船接替, 希望接下來的這幾次飛行任務都不要出甚麼大狀況才好. 加油吧 NASA. 奮鬥吧 太空人們... :D

星期四, 8月 09, 2007

Benchmarking SCMs via import linux kernel source.

Maybe someone would interested, so I posted the results here:

(Benchmarking on a p4 3.4G SMP debian stable-etch, 2giga ram machine, all SCM software use packages from debian stable, checkout/branch occurs on localhost)

conclude:

initial speed: hg==git(3Min) >> bzr(15Min) >> svn(71Min)

checkout/clone speed: hg == git(3Min) >> svn(11Min) >> bzr(21Min)

space effiency: hg==git(123Mb) >> bzr (230Mb) >> svn(repo:82Mb+workingdir:573Mb = 655Mb)

== report ==

hg:
/usr/bin/time -o ../hginit.usage hg init
/usr/bin/time -o ../hgadd.usage hg add .
/usr/bin/time -o ../hgcommit.usage hg commit -m "first import"


real 3m25.284s
user 0m34.130s
sys 0m4.868s

git:
/usr/bin/time -o ../gitinit.usage git init-db
/usr/bin/time -o ../gitadd.usage git add .
/usr/bin/time -o ../gitcommit.usage git commit -m "first import"


real 3m20.346s
user 0m23.061s
sys 0m5.032s


bzr:
/usr/bin/time -o ../bzrinit.usage bzr init
/usr/bin/time -o ../bzradd.usage bzr add .
/usr/bin/time -o ../bzrcommit.usage bzr commit -m "first import"

real 15m10.689s
user 1m59.299s
sys 0m9.617s

svn:
svnadmin create --fs-type fsfs /home/tim/test/testsvnrepo/
svn import -m "New import" linux-2.6-2.6.18.dfsg.1 file:///home/tim/test/testsvnrepo/


real 71m3.704s
user 0m53.467s
sys 0m24.998s

#### Checkout/Branch(Clone) time ####


#time bzr clone linux-2.6-2.6.18.dfsg.1/ testbzrclone
Branched 1 revision(s).

real 21m5.351s
user 1m38.898s
sys 0m11.465s

# time hg clone linux-2.6-2.6.18.dfsg.1/ testhgclone
20690 files updated, 0 files merged, 0 files removed, 0 files unresolved

real 3m15.951s
user 0m12.449s
sys 0m4.016s

#time git-clone linux-2.6-2.6.18.dfsg.1 testgitclone
remote: Generating pack...
remote: Done counting 21351 objects.
remote: Deltifying 21351 objects.
remote: 100% (21351/21351) done
Indexing 21351 objects.
remote: Total 21351, written 21351 (delta 2213), reused 0 (delta 0)
100% (21351/21351) done
Resolving 2213 deltas.
100% (2213/2213) done
Checking files out...
100% (20323/20323) done

real 3m27.516s
user 0m59.908s
sys 0m5.132s

#time svn co file:///home/tim/test/testsvnrepo/ testsvnco
Checked out revision 1.

real 11m44.980s
user 0m35.294s
sys 0m15.849s


####SPACE USAGE ####

123M linux-2.6-2.6.18.dfsg.1/.hg
123M linux-2.6-2.6.18.dfsg.1/.git
230M linux-2.6-2.6.18.dfsg.1/.bzr
82M testsvnrepo
573M testsvnco


Note: I've installed bzr 0.18, and results shows no big difference.

星期日, 7月 29, 2007

[link] ozearch 中文最佳化搜尋引擎釋出

來自kalug/www.linux.org.tw的第一手消息:
http://www.linux.org.tw/node/350

kevinwatt在昨天的Kalug聚會中宣布以GPL版權釋出他用 Python 語言撰寫的 ozearch 0.0.1,
主要的特點是融合N-gram 以及 Word-based 這兩種斷詞方法對中文搜尋作最佳化,根據kevinwatt的現身說法是, 目前仍在大幅修改中, 之後的版本會越來越好, 所以如果有對中文搜尋引擎實作有興趣或有時間跟精力對本土自由軟體開發提供協助的朋友可以到官方網站http://ozearch.org/一探究竟. :D

星期六, 7月 28, 2007

[funny] [link] 尤拉會怎麼作? What Would Euler Do?

知名版本控制系統Subversion的作者Karl Fogel本月在他的blog透漏了這則趣事: 他在2004年跟美國數學協會購買了Excursions in Calculus,不過等付完錢拿到書之後, 過一陣子才拿到了帳單. 但是他其實早已付了錢, 美國數學協會寄給他的是一個0元的帳單,可能是作為存根之用. 不過他做了一件非常耍寶的事.


他開了一張e + 1元的支票給美國數學協會.



想當然爾, 被退了回來.

Karl Fogel對這件事的評論則是:
"""
Oh, how I wanted them to deposit it! But they didn't even try; they sent the check back uncashed. Maybe the MAA is using one of those accounts-receivable clearinghouse services, and it isn't really their fault. But if you can't write a check for e + 1 to the Mathematical Association of America, whom can you write one to?
"""

我只能說..... 醒醒吧...阿宅... XD

原文在此: http://www.rants.org/2007/07/14/what-would-euler-do/

星期四, 7月 26, 2007

續: shell script裡使用python的技巧

http://timchen119.blogspot.com/2007/02/shell-scriptpython.html
繼上次這篇文章裡的方法, lloyd大大又教了我更多用python只寫一行程式碼的方法,比如:

cat /etc/passwd | python -c "$(echo -e 'import sys \nfor i in sys.stdin: \n s=i.split(":")\n if s[0] == "root": \n  for j in range(len(s)): print s[j],')"

或者是
source lpython.sh

#lpython.sh
lpython ()
{
python -c "$(echo -e "$@")"
}
然後
cat /etc/passwd | lpython 'import sys \nfor i in sys.stdin: \n s=i.split(":")\n if s[0] == "root": \n  for j in range(len(s)): print s[j],'


這個方法巧妙的運用了 \n 跟空白來避開python在one-liner情況下的縮排問題, 不失為一種方便的方法.

相同的需求也有例如pyone之類的實作方式, 不過比較起來我比較喜歡lloyd的方法.

星期日, 7月 22, 2007

Xen Merged into Linux 2.6.23

http://kerneltrap.org/node/13917, 來自kernel trap的最新消息.

Xen是一個開放原始碼虛擬機監視器,
簡單的說, Xen可以讓一台機器同時跑好幾個作業系統,
而且模擬的速度接近原本cpu速度.
(目前就我所知執行速度是比User mode linux/KVM/kqemu都快的多,
跟qemu/virtualbox/vmware當然更不是同一個檔次的)

前陣子才剛在一台debian etch(dom0)上安裝netbsd跟freebsd的domU,
(DomU 其實就是Xen對guest OS的術語. 而Dom0就是host os.
netbsd是*bsd裡對xen支援最完善的,
目前3.1 release版本就直接支援, 既可以當host OS也可以當guest OS.
如果有人想安裝FreeBSD作guest OS的話, 我建議可以直接參考FreeBSD handbook,21.2.2.1 Setup Xen 3 on Linux dom0,有個不怎麼新的7-current(N個月前的)可以玩,有VT支援的cpu的話應該就比較簡單一點,
也因為我身邊沒半台可以支援VT的cpu(啥怪cpu都有就是沒intel core2duo XD),不然應該可以裝個windows當guest os)
但是說真的, 目前安裝xen還是有點麻煩,
不過我想xen merge進i386的linux之後,
xen應該會越來越得到關愛的眼神才對.
以後搞不好哪天apt-get install xen-netbsd-domU-image就裝好了. (希望啦 XD)

(ps: 差點忘了提最大的重點/亮點:
除去kernel部份 xen大部分的程式碼都是用python寫的!! XDXDXD)

星期六, 7月 21, 2007

[tip] django + oracle on debian linux.

目前SVN裡最新版本django已經由官方直接支援oracle資料庫,
也因此我也花了點時間測試一下django跟oracle的配合.
用起來覺得還不錯, 所以跟大家分享一下我的簡易安裝心得.

首先我是直接安裝oracle 10g 的XE版本,
在debian linux上安裝oracle 10g xe其實很簡單, (我是用etch)
因為oracle連apt套件庫都幫你準備好了.

只要在你的sources.list加上這行:


deb http://oss.oracle.com/debian/ unstable main non-free

並安裝:

#wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle -O- | sudo apt-key add -
#apt-get update;apt-get install orcale-xe-universal

最後跑個/etc/init.d/oracle-xe configure即可作oracle的安裝設定.
如果想測試安裝oracle xe的結果可以連上Web的8080port看管理介面:
http://127.0.0.1:8080/apex/

這個版本的oracle除了有內定最大只能使用4G資料庫大小,1G Memory
跟只會使用單顆CPU的限制外,
並沒有限制其他特別嚴苛的條件, 連商業使用都在可允許的範圍.
而因為這個限制其實很夠用,且高階一點的機器可以跑個vserver還是memcache.
然後你要多跑幾個database也不在限制範圍內,
所以其實我個人覺得就是oracle資料庫大放送, 隨便你用.
再來這個版本又比我印象中的oracle好安裝的太多.
還送你一個web管理介面(而且oracle似乎有心要繼續維護10g XE,我安裝時有根據官網的說明順便升級到了目前最新的apex版本3.0.1),可以說是物超所值.

再來就是安裝python的oracle支援套件cx_oracle,
因為官方網站只有提供windows跟fedora的binary套件, 我就直接抓source回來安裝,

export ORACLE_HOME='/usr/lib/oracle/xe/app/oracle/product/10.2.0/server'
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

python setup.py install


接下來當然就是安裝django的最新svn版本,
這點看官方網站的Installing the development version說明應該就很清楚了,
http://www.djangoproject.com/documentation/install/

安裝完之後其實就跟其他資料庫沒什麼太大的差異了,
就可以寫個小程式測試一下了,
不過我上次測試的時候遇到了一點小問題,
就是我在syncdb時出現了一個
TypeError: descriptor 'upper' requires a 'str' object but received a 'unicode'
的錯誤訊息,
我推測應該是因為oracle這個branch剛好跟unicode這個branch同時進了svn trunk,
所以漏掉了這個,
可以暫時先依照我丟到http://code.djangoproject.com/ticket/4827的patch修正,
不過我想下一版release的django應該就會修正這個問題才對.

總算,oracle成為
django除了mysql,postgresql,sqlite之外的第四個直接支援的database.
也是第一個support的商業database.
雖然我目前用不大到(postgres還是不錯滴), 不過還是可喜可賀. :)

星期五, 7月 20, 2007

[tip] 使用yolk管理python套件.

yolk是一個可以查詢pypi套件及本機所安裝的python套件資訊的實用工具.

python自從這幾年引入setuptools,cheese shop等新技術之後,
安裝新套件變的相當容易.
大多時候我想新安裝套件除了透過作業系統的套件管理之外,
幾乎只要透過easy_install來安裝即可.
除了少部份仍未支援setuptools的pypi套件外,
大部份列在chesse shop裡的套件基本上都可以透過easy_install的方法安裝.

但是安裝變的容易了, setuptools裡卻沒有附上簡單的命令可以協助使用者管理套件,
包括版本的控管及升級, python套件安裝的數量等等資訊, 都要由系統管理者來自行紀錄.
實在不是一個很好的作法. 然而yolk這個好用的工具正可以填補這個缺陷,

首先當然是先安裝yolk, 最簡單的方法是用easy_install安裝.


easy_install -Z yolk


沒有easy_install這個程式的話 (會有人沒有裝嗎? @_@ )
則可以用你常用的套件管理程式安裝setuptools,
或請把下面的script抓下來並執行,就會安裝setuptools了:
http://peak.telecommunity.com/dist/ez_setup.py

(如果你跟我一樣也使用gentoo, 可以用overlay裡的pythonhead來安裝,
我建議你可以順便安裝g-pypi, 這是由同一作者所寫可以直接由pypi裡的套件產生ebuild的工具.
安裝g-pypi就會連yolk一起安裝了.)

幾個我常用的命令說明如下:
(請注意以下指的套件, 在python2.5之前是只限於用setuptools,easy_install安裝的python套件,
若使用python2.5+則是全部的套件都可以管理.)

yolk -l
列出這台機器所安裝的套件.
yolk -U
列出這台機器可以更新的套件及最新的版本.
yolk -F nose -T svn
將nose這個套件的最新svn版本抓下來放在./nose_svn
yolk -M nose
列出nose這個套件的meta資訊(版本,說明,版權等)
yolk -D ezpyinline
列出可以抓到ezpyinline這個套件的位址.
yolk -H nose
打開瀏覽器並連到nose這個套件的官方網站.

星期二, 7月 03, 2007

台灣opensource社群活動行事曆

YurenJu目前正在維護台灣OpenSource社群活動行事曆, 台灣各地其實到處都有各種開放原始碼的社群聚會, 只是有時這些活動的時間不大容易記住, 也很容易排定的時間上有所衝突, 有個可以一目瞭然的行事曆的確是好的多.

目前我已在維護的kalugpython星球上加入連結,
其他社群的朋友如果想加入到自己的網站上的話,
只要插入下面這一段HTML碼就可以了.

<div>
<iframe style=" border-width:0 " width="240"
frameborder="0"
src="http://www.google.com/calendar/embed?src=p09uh8cg4uvt2ij4obf45cltsk%40group.calendar.google.com&chrome=NONE&mode=AGENDA&hl=zh_TW&height=350"
height="350">
</iframe>
<a target="_blank"
href="http://www.google.com/calendar/render?cid=p09uh8cg4uvt2ij4obf45cltsk%40group.calendar.google.com">
<img border="0"
src="http://www.google.com/calendar/images/ext/gc_button1_en.gif"/></a>
</div>

另外yurenju也在號召有興趣共同參與更新行事曆的朋友, 如果您的組織有經常性的活動的話, 可以跟yurenju聯絡.

星期日, 7月 01, 2007

[rant] 三星硬碟三年保固.... 根本只是個噱頭....

只怪我當初沒做好功課, 兩年前被賣場的人唬了...

兩年多前對硬碟保固極度無知的我, 當時聽信賣場人員的SamSung硬碟堅持三年保固的說法,

傻傻的買了一顆80G的三星SitePoint硬碟給我老爸當主硬碟...想說可能比較有保障.

前幾天無預警掛了之後 就準備拿來去換顆"良品". 所以開始查說是在那邊維修.

根據我硬碟上的保固貼紙, 就去查到了建達國際的網站,

沒想到不查還好, 一查才發現.... 根本就是被騙了...

沒錯 是三年保固 不過不是免錢的保固,

買了硬碟30天過後, 硬碟壞了就不會換新品給你了, 就是換良品.

第一年過了之後即使在保固期內, 送修就開始要收費了,

那所謂三星的三年保固跟一年保固又有啥不同呢?

講難聽一點就是過了三年他連理都不理你了. 要送修? 直接買新品吧...

建達國際對於出貨只要滿一年的硬碟.....要收500元的手續費...

這手續費還真高. 也不會換個新品給你, 就是會換個良品(就是以前大概壞過被修好的吧)

那現在市場上主流根本也沒有在賣80G的IDE硬碟了,

想送修時順便換個大一點的硬碟的話,

這建達國際從80GB"升級"到250G 還要再加1500元...

然後呢 這保固期限也並沒有延長...

是"延續原送修硬碟之剩餘保限".... 我實在不明白這啥道理?

昏倒, 我重買一顆全新的 WD 250 GB, 7200rpm ,

8M緩衝的硬碟也不過2200多還有新的三年保固呢... 這擺明了不想讓你換.

唉 認栽了 買到爛貨就算了...還得享受這種三流服務...

以後不再聽信這三星保固什麼鬼的了...

還是sony的保固好,

數位相機最重要的ccd壞了問也沒問就幫我修好也沒收半毛錢...

(註 建達國際也代理maxtor硬碟 所以 自求多福 :P)

星期日, 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.

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

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


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

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

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

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

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

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

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

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

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

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

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

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

星期六, 5月 19, 2007

[link] google 的四個新的實驗性介面

http://www.google.com/experimental/

包括用時間跟地圖分類搜尋/鍵盤操作版的介面/還有相關搜尋等.

時間地圖分類很酷不過不知道為啥資料量很少.

鍵盤操作版用起來不大習慣....(不如用conkeror還有emacs binding ^o^).

目前看起來最實用的應該是 Right-hand contextual search navigation

會列一個小搜尋視窗在右邊可以選擇要查的確切意思跟相關搜尋


像查python可以選擇你是要查真的蟒蛇還是程式語言的Python,

也可以特別選擇在Blogs/Books/Groups/Code之中搜尋.

星期六, 5月 05, 2007

Home Plug !

Update緊急聲明:
Chih-Hsiang 在評論裡提到合勤PL-100的效能不彰...
而我昨天因為這裡傳輸需求並不高所以沒有實測,
但剛剛一測結果讓我下巴差點沒掉下來...
我沒想到能有這麼差... @_@

所以擁有或未來打算升級到2M以上對外頻寬的千千萬萬不要買PL-100!
剛剛實測結果, 網內FTP互傳居然只到240~230Kb/s均值...?
也就是說實際效能是85Mbits的40分之一不到,約為2M bits
這實際的效能差異未免太...

當然我的效能測試未必準確,
不過既然是實際發生的狀況,
還是請大家做為慘痛的教訓參考看看 XD

==

因為家裡的牆壁太厚,轉彎太多,
又遇到一張某"XDLINK"無線網路卡, 沒事就給我25%的連線品質,
上網實在太容易斷線了,
偏偏我老爸又嫌牽網路線太醜...
於是今天就去建國路買了一組兩個的HomePlug電力線網路橋接器回來裝.

我買的是合勤的PL-100
一開始本來想試試插在延長線上可不可行, 不過我家的延長線都有防突波
似乎太高檔了一點,所以一開始試連就連不上.
不過換插平常的插頭一插上去就很順利的就可以動了.

HomePlug基本上不同電表訊號就過不去了,最多能接十五個裝置.
合勤的設定程式只有Windows版,不過也不是什麼大問題,
基本上如果你不是有安全潔癖的話根本可以不用設定,
電源跟網路線插上就會動了,
我是順手設了不同的網路名稱,預設的網路名稱好像都是HomePlug.

用到目前為止還算滿意, 至少比之前常常莫名其妙斷線的無線網路好多了,
不過85Mbits的頻寬其實覺得有點太多(雖然是理論頻寬,我還沒測過),
因為基本上我也很少網內互傳開檔, 如果真有這種需求的人應該可以考慮買200Mbits(HomePlugAV)型的.(不過我也只有100Mbits的網路卡)

推薦大家家裡裝無線網路有訊號問題(例如有好幾樓),
但是又覺得牽條網路線難看的可以試試看HomePlug.
至少不必老擔心訊號不足的問題. :)

[link] 這位法國大叔寫了235隻USB webcams linux drivers...

這世界上就是有熱血大叔才有趣啊!!! 太猛了...

[link] Microsoft needs Wizards

http://groups.google.com/group/net.jobs/msg/4f2cf440919eeda9

a mail in 1984...

"""
I consider Microsoft an excellent home for the software wizard because:

1) its a great place to work. The company is owned (a key issue)
and operated by software wizards: Bill Gates and Paul Allen.

....

Since the development people report strictly to software
engineers, who report directly to chairman/CEO Gates, we
never do anything stupid because some manager/MBA/suit-type
has power without knowledge. (When we do something stupid,
its our own fault!) Likewise, there are no "politics", just
engineering.

"""

(save-buzz-and-die "/WhatYouSeeIsWhatPeopleMarketing" :executable t)

[link] 誰說只有wiki可以這樣搞.....orz

pure html+js ... 越來越有趣了 :P

Terminal

Home

Blog

星期五, 5月 04, 2007

[humor,hotlink] If On a Spring's Night a String ...


#!/usr/bin/env python
class tim:
def __init__(self,tim):self.chen=tim
def __rlshift__(self,chen):return tim(lambda x,z=self,tim=chen:z.chen(tim,x))
def __rshift__(self,tim):return self.chen(tim)
def __call__(self,x,tim):return self.chen(x,tim)
print "0"+hex(((reduce(lambda chen,tim: tim*chen,[int (x,32) for x in "timchen119"])
*4+119<<tim(lambda tim,chen: tim*chen+119)>>((int("119"+str(93828751754616119383408*127*119))
-1190929898972105379252210654550)))-5210475734-119))[2:-1]

I just wrote my worst python script ever.
I believe it's legal. What do you think?

星期二, 5月 01, 2007

[link] Microsoft發表Dynamic Language Runtime (DLR).

我說, 這名字對了!!! ;D

有了Jim Hugunin的加持之後,
Microsoft這次沒有笨到取一個Sxxxxt Language Runtime這種蠢名字,
看來Microsoft這次真的知道他們在作什麼. ;D

來自Jython/Ironpython作者Jim Hugunin的消息, 看來Microsoft吸收了以往對於網路不夠重視的教訓, 這次對於業界的Dynamic Language潮投注了不少心力.

消息節錄重點如下:

"""
We're initially building four languages on top of the DLR - Python, JavaScript (EcmaScript 3.0), Visual Basic and Ruby. We shipped today both Python and JavaScript as part of the Silverlight 1.1alpha1 release today.
"""

所以說DLR 目前已經支持 Python, Javascript,Visual Basic跟Ruby...

!? Python跟Ruby...!?
喔妳沒看錯... Microsoft居然開始注意Python跟Ruby的支援...
這一天終於要來了嗎?...

並且今天釋出的Silverlight 1.1alpha1版已支援python跟Javascript. (Silverlight看起來將會是下一代Microsoft主推的web平台??)

"""
In addition to the Silverlight release, we've also made the full source code for both IronPython and all of the new DLR platform code available on codeplex under the BSD-style Microsoft Permissive License.
"""

BSD-style Microsoft Permissive License !???

BSD style?!沒聽錯吧... 會不會..太opensource了一點? :DD

看來我這文章標題應該改成==> 神奇的Jim Hugunin
,Microsoft的自由軟體跟Python/Dynamic Language推手... XD

雖然我常常沒事虧一下MS,
不過這次還是得替Jim Hugunin跟Microsoft鼓鼓掌...
在MS裡搞自由軟體... 讚啊...

[link] Which Programming Language are You?


You are Prolog. You enjoy looking for different ways to solve a problem.  You take longer to solve them, but usually come up with more than one solution.
Which Programming Language are You?


hmm 不知道為啥又吹起這股流行風...

反正有趣嘛... 就作了一下 XD

不過怎麼是prolog啊 比較希望是python還是lisp...

update:

最近太常用debian了??? @_@

You are Debian Linux. People have difficulty getting to know you.  Once you finally open your shell they're apt to love you.
Which OS are You?

星期日, 4月 29, 2007

我論Kalug是個有趣的秘密組織. XD

這個月號稱"非常秘密"的kalug聚會剛結束,

Yuren也在他的blog上發表了他文情並茂的感想.

文章寫的很傳神,
但又突然發現南部的OpenSource使用者都太習慣秘密活動了...

Yuren Ju僅僅自介自己是"""普通的Linux End-User 一枚..."""

這也謙虛的太過份了...明明就是Blog上知性+感性的文章產量無數,秘密的研究如何用P2P征服世界,而帶來的筆記型電腦上有火焰特效+3Dberyl旋轉桌面還轉到有人說"原來用這linux就好像在打電動一樣"的無敵閃光Linux使用者吧... :D

此外, 這個在南部據說真的很秘密的秘密組織又新開了一個秘密的irc頻道在freenode,
又很秘密的被Yuren Ju秘密的推廣了一下. 我當然就很秘密的拿來秘密的引用了. XD

"""我覺得這個聚會很棒啊, 不過為什麼KaLUG聚會一個月只辦一次 ???"""
PostgreSQL中文社群網誌裡覺得一個月五十篇還嫌少的熱血作者Kuo Chaoyi這麼問.

blueKnows說他一天辦一次都奉陪,這真是太熱血了啦.....

不過我秘密的心想.... 那這咖啡店賺我們這群秘密的顧客還真夠賺的啊!! XD << 哪個要秘密的開秘密的咖啡店的請趕快啊! >>

ps: 喔對了... 我要很秘密的說: Postgresql真的讚! 還有Postgresql中文網誌也不算很秘密的在找寫手喔... :D

星期二, 4月 24, 2007

[link] Add OpenID consumer support to any Django application

Simon Willison just release first version of django_openidconsumer.

As Simon says:
"""
I plan to keep the package under active development, with the aim of using it to demonstrate best practises in implementing OpenID (hence the support for multiple OpenIDs and simple registration out of the box). Next on the list is integration with Django's built in authentication system, including the ability to associate one or more OpenIDs with an existing user account.
"""

This is so cool if you need any openid support in django. :)

一些 OpenID 的連結:

How to use OpenID

Six cool things you can build with OpenID

The Future of OpenID

Web developer Simon Willison talks to Vitamin about OpenID


What is OpenID good for?

星期一, 4月 23, 2007

[link] Django dbmigration

MikeH在django mailing list上丟出了db migration的工具.

Django原本也有個schema-evolution的branch, 但是很可惜由於過於複雜, 野心又太大,Developer加入又離開,一直都沒有什麼太大的進展,到現在trunk仍然沒有一個可用來作scheme migrate的工具,基本上每次要新增欄位, 大家不是手寫SQL,就是自己寫script轉換舊資料,都在作重覆的事,沒有一個很pythonic的解決方案.(Actaully it's not really a big problem, since everything is so easy in python. However, I believe everyone who use django are all tired of keeping hear some newcomers yelling that rails 'already' had that. :P)

不過這次丟出的dbmigration看起來非常的不錯, 雖然版本只有0.1, 不過現在已經可以支援用django的ORM及SQL寫migration,如果繼續發展下去,應該會是非常有用的工具.

星期五, 4月 20, 2007

Mozilla "moves" to python-based DSCM: mercurial to replace CVS

Version Control System Shootout Redux Redux

"""
It's important to realize the headline here isn't "Mozilla Project picks Mercurial for Next Generation Version Control System." It's "Mozilla Project moves to Next Generation Version Control System."
"""

根據引用文章的說明, 不是pick而是move :D (註:原文在這邊要表示的意思是bzr跟hg都是很好的系統, 所以Mozilla不是選了hg而是移向下一代的版本控制系統)



我不是標題黨, 不過Mozilla的確要改變原本使用CVS的方式,
改採現正流行的distributed SCM (DSCM, Distributed Software Configuration Management 話說現在每次只要寫縮寫不打全文就會被某人唸, XD ) ,
而選中的正是由python實作的: mercurial.

由該文引用的這張被kuso過的真人快打系統圖中,
可看出下面這幾種是曾經在mozilla會議中提出來討論過的:
rcs,mecurial,cvs,svn,svk,bazaar,arch,bitkeeper,sourcesafe,clearcase,Perforce,git.

根據該文的說法, 有被認真考慮過的只有底下4個: bazaar / mercurial / git / Monotone
git跟Monotone也很快就因為win32 client支援程度不好的問題被ruleout.
(比較意外的是非常先進但使用haskell實作的darcs似乎完全沒有被考量. 不過根據該篇文章的一篇評論,似乎有人在開始匯入時就out of memory了.)

因此很快的, 剩下兩個均由python實作(也意味著跨平台應該非常好 :D)的DSCM mercurial/bazaar就被mozilla同時考慮了.

mercurial(以下簡稱hg)跟bazaar(以下簡稱bzr),是兩個性質非常類似的DSCM, 基本上兩個幾乎可以等同看待, 操作命令也幾乎一模一樣, 就我個人非常淺薄的使用體會跟認知,bzr功能略強一些, 而hg速度快上不少.
我個人使用的是bzr, 所以其實就私心來說是希望bzr能被mozilla採用的. 很可惜的, 根據這篇文章的說明, mozilla也很想採用bzr, 但是發現匯入mozilla cvs庫卻需要用上一個月 :P (使用的是0.14/最新的0.15已經試圖想解決performance問題) 相反的採用hg就只有7天.

不論如何mozilla似乎已經要決定轉換到hg了,
去年shawn跟我提過的hg現在果然是紅了,
曾經有一次開玩笑的跟yungyuc在線上聊天聊到如果那天bzr停止發展了那我大概就會在hg的船上. 沒想到這麼快機會就來了 XD 不過事實上bzr還在積極發展並改善速度加上也可以使用hg的repos,且又由於我的檔案大部分都不大, 加上binary file都還在100MB以內, 倒是還沒遇到太多效能上的問題. 也許哪天真的有需要也可改用hg,暫時我將還是使用bzr為主. 不過大家在選用時可以將hg列入考慮. 另外該篇文章也提到:
"""
There was a lot of support in the project for both tools, and I personally know that the Bazaar developers spent a bunch of their 0.15 development time working on some of the performance issues we ran into. The great thing about these "nextgen" version control systems is that they all track the information necessary to re-create history. Because of this, switching between systems is much eaier, and in some cases, using your favorite system is possible (bzr, for instance, can pull directly from Mercurial).
"""
所以我認為至少在這短時間內, 這兩者都是非常好的選擇. :)

底下列出目前使用hg跟bzr的知名opensource專案, 僅供參考:

hg:
Mozilla,opensolaris,ALSA,mutt.Xen,MoinMoin,e2fsprogs. (gpl-sun-java is considering hg too)

bzr:
Ubuntu, Drupal,BitlBee,nose,PyChart,Samba.

(當然, 更大部分的專案都使用svn 事實上我也很愛用svn 只要svn符合你的需求,svn目前還是非常正確的選擇, and, Nobody ever got fired for picking IBM :^)

星期六, 4月 14, 2007

[link] django template utilities

James Bennett發佈了django-template-utils

django的template tags的使用跟抉擇一直是個藝術,
有些人嫌他功能過於強大(ex: guido),也有不少朋友覺得他功能過少,
James Bennett開發了一些template tags並整理了不錯的使用文件.有興趣的人可以參考看看.

[tip] Emacs 管理方法的一些零散小看法.

每個使用emacs的人emacs管理方法都各有不同,
未必我的經驗就是好的, 網路上也有不少先進有他們獨到的看法,
我也時常受益良多,
不過在這之前我得先說個悲慘的emacs小故事:

從前有一個喜愛使用emacs的人,
因為他慣用的.emacs被人弄丟了,
從此之後就使用了vi.

(註: 這個人的名字叫Tim O'reilly.)

這個被我渲染過的悲慘小故事告訴了我們,
如果想要好好使用emacs,
就不得不用點心思在管理emacs files上.
何況別人的.emacs對你而言經常是無用的,
而一旦你丟失了你的慣用.emacs,
想重新打造一個屬於自己的.emacs將耗盡你的青春,
甚至還不如去學一個別的editor.

我目前的一些管理方法是這樣的,當然我說過了,
我的作法未必正確,而且未來也可能會改變我的看法,
這篇將就將就參考看看吧:

1. 維持~/.emacs 簡單, 使用~/.emacs.d來管理emacs

我的.emacs目前只放了一些很簡單的事情,
如: Custom 跟我的initial .el"s" function.
好處就是.emacs很清爽, 如果有需要的話,
也只要將非常重要的設定放在這邊就好了 其他的利用.emacs.d來對設定分門別類.

2. Add functions to auto-compile every .el after you edit it.

編譯成.elc會加快你loading emacs的速度.

我寫了一個elisp function來自動作這件事情:
(.emacs可另外處理)


(defun auto-byte-compile-el-file ()
(let* ((filename (file-truename buffer-file-name)))
(cond ((string= (substring filename
(- (length filename) 3)) ".el")
(byte-compile-file filename)))))

(add-hook 'after-save-hook 'auto-byte-compile-el-file)


3. 使用版本控制軟體(SCM).

我使用的是bazaar, 一個分散式的SCM. 因為我覺得他對我來說很方便.
不過不論如何,我強烈建議採用任何一個你慣用的SCM(cvs/subversion/darcs/git)來控管你的.emacs/.emacs.d
別忘了,你的.emacs非常重要, 甚至比妳專案的程式碼都還來的重要,
程式碼丟了不過是個案子, .emacs丟了妳痛苦一輩子 :P

4. 善用M-x toggle-debug-on-error

這是debug emacs設定的最佳實務技巧.
相信我, 妳會用到他的.

5. 使用管理rc的方式來管理.emacs.d

將你的.emacs.d 分類, 並寫成像rc的方式.
類似如此:

000globalinit.el
010packageinit.el
020etags.el
...

600ecb.el
700lisp.el
710python.el
715django.el
720javascript.el
730cc.el
740ruby.el
750haskell.el
900testconfig.el

6. install site packages to your .emacs.d

將你安裝的emacs套件與你的設定檔分開管理. 但是都放在 .emacs.d裏面.

7. 將 bookmark, TAGS, auto-save, desktop_state, semantic.cache, backups, session 等檔案納入.emacs.d管理.

emacs有很多檔案預設會四散在各地, 最好也將他納入.emacs.d管理.

8. set $EDITOR to emacsclient.

emacs的啟動速度是個問題, 使用emacsclient是個好方法.

9. 替.emacs.d 作一個bookmark, 並安裝dired-single.el
我相信你會常常需要修改.emacs.d, 我的作法是作一個bookmark,
此外,dired-single.el可以讓你不要每次切換目錄都開一個dired出來.

10. 當然還有很多想法/技巧我無法一一列舉,
不過我覺得用emacs是一輩子的事, 值得用一輩子來學習.

****

It's your editor, not other's.

沒有任何兩個人心中的夢幻editor是一樣的,
像我重設了emacs的ctrl-k刪行行為,
但另外一個emacs user卻可能嗤之以鼻.
另外emacs user經常大幅度的改變了不少預設的keystroke,
故每個人都有一套自己順手的emacs操作方法,
所以自己的.emacs要自己管理, 沒有人能幫上你太多忙.

每個人都在打造屬於自己最適合自己的"editor神器",
但天下可沒有白吃的午餐, 別人的神器未必是你的神器,
而emacs的價值就在於emacs提供了一個機會讓你去打造屬於自己的editor,

"Think emacs as an environment."

如果你是programmer,
如果你一天花時間在editor上超過八小時,
請用你學習作業系統的想法去打造emacs,
既然肯花很多時間去打造屬於自己的windows/linux/*bsd/OSX,
為何不願意花時間打造editor?

Since you use emacs, you need to think different.
I believe emacs will reward you. At least, it rewards me a lot.

:-)

[tip] How to Setup OpenVPN to connect 2 internetworks seamlessly.

Author: timchen119 (timchen119.blogspot.com)

openvpn有非常多種設定方法, 依個人遇到的需求不同有所變化.

我這邊整理的是使用一台server跟一台client共安裝兩台openvpn機器(linux gateway),
讓兩個可能地理位置不同的區域網路連接起來的方法.


Network 10.1.0.x Network 10.2.0.x

10.1.0.2 <---> 10.1.0.1 ============================= 10.2.0.1 <---> 10.2.0.2
GW VPN GW
(10.8.0.0)
OpenVPN Client OpenVPN Server
192.168.23.39 192.168.23.38


After setup OpenVPN, you should possible connect to 10.2.0.2 from 10.1.0.2 without any special settings.

Steps on debian linux:

1. apt-get install openvpn (on both client/server)
2. cd /usr/share/doc/openvpn/examples/easy-rsa/
3. edit vars / source vars (if you need key more than 1024bit, 2048bit+ recommended.)
4. ./build-dh
5. ./build-ca
6. ./build-key-server server
7. ./build-key client
(Note: you have to set different common name from server's,
we'll need this later, I'll use CVKK2 for example)

8. on client side:

a. put ca.crt client.crt client.csr client.key to /etc/openvpn
b. create /etc/openvpn/client.conf
client
ns-cert-type server
remote 192.168.23.38 #server ip
dev tun
tls-client

comp-lzo

dh dh1024.pem
ca ca.crt
cert client.crt
key client.key

log openvpn.log
log-append openvpn.log

c. check you gateway/ip forward settings:
if you didn't setup yet you'll need this in your /etc/init.d and a link in /etc/rc2.d:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -s 10.1.0.0/24 -j MASQUERADE

9. on server side:

a. put ca.key ca.crt server.crt server.csr server.key dh1024.pem to /etc/openvpn

b. create /etc/openvpn/server.conf

dev tun
server 10.8.0.0 255.255.255.0
push "route 10.2.0.0 255.255.255.0"

comp-lzo
ifconfig-pool-persist ipp.txt

persist-key
persist-tun

tls-server
dh dh1024.pem
ca ca.crt
cert server.crt
key server.key # This file should be kept secret

client-config-dir ccd
route 10.1.0.0 255.255.255.0
client-to-client
push "route 10.1.0.0 255.255.255.0"

c. mkdir /etc/openvpn/ccd

d. create file CVKK2 in ccd directory.
(the filename should match client's commonname in client.crt)

put this following line in this file:
iroute 10.1.0.0 255.255.255.0

e. check you gateway/ip forward settings:
if you didn't setup yet you'll need this in your /etc/init.d and a link in /etc/rc2.d:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -s 10.1.0.0/24 -j MASQUERADE

星期五, 4月 13, 2007

[tip] Share gentoo distfiles directory with FreeBSD NFS server.

由於我的gentoo機器不止一台, 所以一直以來都是先mirror一份portage進LAN之後, 再rsync自己.
不過由於我的機器IO太慢了, 最近總算忍不住向lloyd借了一台freebsd機器來架了一個portage rsync server, 想說順便將portage裡的distfiles share出去, 這樣就不用將distfiles一抓再抓. 沒想到只要一mount,emerge就出現問題.會一直掛在那邊不抓檔案. 實在非常詭異.

不過稍微研究了一下就被我找到問題點了, 原來是fbsd上的rpc.lockd沒開.

解決方法有二.
1. edit freebsd's /etc/rc.conf 將rpc_lockd_enable 改成"YES", 然後再將rpcbind restart.

2. mount option + "nolock" for gentoo.
將mount option改成
rw,soft,timeo=1,noatime,rsize=1024,wsize=1024,nolock

我是採用了第2個方法.
果然加上了nolock之後emerge就很順暢了.

星期一, 4月 09, 2007

Debian 4.0 released...

起床就看到好消息:

http://www.debian.org/News/2007/20070408

"etch" Debian 4.0 released.

(sarge...我終於可以擺脫你了 XD)

老天終於聽到我的呼喊了~~ XD

星期二, 4月 03, 2007

pypy 1.0 first try

I'm not going to explain too much pypy, I'll just list my instructions on C version PyPy 1.0 + jit (pypy-c with jit) build.

* you may need install these first *

apt-get install

gcc libc6-dev make autoconf libgc-dev bzip2
subversion python2.4 python2.4-dev
python-ctypes python-pygame

Note: you don't really need python-pygame if you specify with --text.

Note for debian stable user:

if you're using debian stable, you have to manually install ctypes.

python2.4-ctypes is 0.9.5-1 in debian stable,

pypy need version 0.9.9.6 or later:

wget http://nchc.dl.sourceforge.net/sourceforge/ctypes/ctypes-1.0.1.tar.gz

tar zxvf ctypes-1.0.1.tar.gz

cd ctypes-1.0.1

python2.4 setup.py install

* how to translate pypy to c-version pypy with jit *


WARNING: YOU AT LEAST NEED a 512MB RAM box...
I'll recommend 1GB RAM box.
since this will generate a 700mb python process
( 704m 693m 5872 R 99.9 78.3 53:14.25 python2.4,
I build this on 3.2GHZCPU+1GB ram debian stable box)
I first translate pypy in a 512MB RAM gentoo box,
after 3 days memory swapping I gave up.

wget http://codespeak.net/download/pypy/pypy-1.0.0.tar.bz2

#or svn co http://codespeak.net/svn/pypy/dist pypy-dist

tar jxvf pypy-1.0.0.tar.bz2

cd pypy-1.0.0/pypy/translator/goal/

python2.4 translate.py --batch --text --jit targetpypystandalone

and wait 2 hours (if you have 1gb ram)

* woot! pypy-c !

let's check this:

pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# ls -lh pypy-c
-rwxr-xr-x 1 root root 9.2M Apr 3 16:22 pypy-c

pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# ldd pypy-c
linux-gate.so.1 => (0xffffe000)
libgc.so.1 => /usr/lib/libgc.so.1 (0x4001e000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x4004f000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x40074000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x40086000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x401b7000)
/lib/ld-linux.so.2 (0x40000000)

* The benchmark part

1. startup time is great

pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time ./pypy-c -c "print 'hello world!' "
hello world!

real 0m0.006s
user 0m0.003s
sys 0m0.003s

pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time python -c "print 'hello world!' "
hello world!

real 0m0.009s
user 0m0.005s
sys 0m0.005s

2. jit speed seems promising.

pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time ./pypy-c demo/jit/f1.py > /dev/null 2>&1

real 0m0.449s
user 0m0.442s
sys 0m0.007s

pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time python demo/jit/f1.py > /dev/null

real 0m5.347s
user 0m5.343s
sys 0m0.004s

however current JIT not faster than psyco.full():

pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time python demo/jit/f1-psyco.py > /dev/null

real 0m0.048s
user 0m0.046s
sys 0m0.002s

3. it's a bit slow in a real test in this stage.

I took the nbody test in "Computer Language Shootout",

http://shootout.alioth.debian.org/gp4/benchmark.php?test=nbody&lang=python&id=0

pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time python nbody.py 20000
-0.169075164
-0.169089263

real 0m1.729s
user 0m1.724s
sys 0m0.005s

pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time ./pypy-c nbody.py 20000
-0.169075164
-0.169089263

real 0m13.542s
user 0m13.539s
sys 0m0.003s

pypy-c without jit almost 8 times slower :(

and, with the current 1.0 alpha stage JIT, the performance isn't any better.
(since nbody.py use lots of floating arithmetic)

I add these in nbody.py:

import pypyjit
pypyjit.enable(advance.func_code)
pypyjit.enable(energy.func_code)
pypyjit.enable(offset_momentum.func_code)

pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time ./pypy-c nbody.py 20000 > /dev/null 2>&1

real 0m19.550s
user 0m19.531s
sys 0m0.019s

* conclusion:

1. I don't think pypy 1.0 is ready for production. At least not in my project.
So don't try to replace CPython via pypy at this stage.
(but maybe you have a good reason)

2. pypy 1.0 is not faster than CPython at this stage. Actually, much slower.
(JIT looks promising, however it's still in alpha stage.)

3. pypy really need a 2.0 release. (A joe average user branch)
It looks good,
since it wanna try to do something really different,
but not good enough yet.
we need more.

4. my benchmarking is so naive here, so if you don't like it,
you should do it your own self.

5. despite these, good work.
Thanks the effort from pypy team. we really really need more.

[tips] emacs遠端sudo編輯檔案

上次shawn問我了一個問題,
怎麼用emacs遠端登入之後sudo成root編輯遠方的檔案(如:/etc/fstab).

如果是使用emacs-unicode2 branch其實很簡單. 因為內建的tramp是2.0.55
只要使用C-x C-f後鍵入
/multi:ssh:user@host:sudo:root@127.0.0.1:/etc/fstab

不過由於我另裝的tramp裝的是比較新的2.1.9pre
原來的方法就行不通
需要改成使用proxies的方法

在.emacs內加入
(add-to-list 'tramp-default-proxies-alist
'("blah\\.blah2\\.org\\.tw\\'" "\\`root\\'" "/ssh:%h:"))

這次改成C-x C-f後鍵入
/sudo:root@blah.blah2.org.tw:/etc/fstab

即可透過emacs跟sudo直接遠端編輯/etc/fstab

需要更多資訊還可以參考
http://www.gnu.org/software/tramp/#Multi_002dhops
http://www.emacswiki.org/cgi-bin/wiki/TrampMode

真是個好節日啊~~

http://pythononplanes.com/

"Planes is the most well thought-out snake oil framework I’ve ever sniffed."

這個我一看就知道很明顯的不僅可以減少程式碼,
還可以快速增加生產力10000倍!!! XD

"it lets you write beautiful code by favoring snake oil over gems."

Snake Oil 萬歲! XD

星期日, 4月 01, 2007

Tim Oreilly -- blogger的行為七準則草稿

Tim O'reilly, O'Reilly Media 的Founder,
就在不久之前發表了Call for a Blogger's Code of Conduct
也拋出了這樣的一個早已存在但終於不得不正視的新議題.

事件的導火線在於Kathy Sierra,著名的Head First系列的女作者,
(Head First Java,Head First Design Patterns,Head First Servlets and JSP,Head First EJB)
不久前因在其blog上受到了死亡威脅,
而中止參加一場O'Reilly在San Diego的ETech conference.

有圖有真相: http://headrush.typepad.com/photos/uncategorized/2007/03/26/unclebobpicture.jpg
http://headrush.typepad.com/photos/uncategorized/2007/03/26/unclebobcomments1.png

於是有鑑於此, Tim O'reilly拋出了的新的Blogger行為準則草稿, 略譯之後加上個人的感想如下:
(如果以Web 2.0行銷術語來說, 也就是"Web 2.0時代的新部落客行為準則" XD)

1)Take responsibility not just for your own words, but for the comments you allow on your blog.
不只對在blog上的發表的文章負責, 也要包括blog上的評論.


提姆註: Tim O'reilly對於Chris Locke的'YOYOW -- You Own Your Own Words'的論點提出的對應觀點, 在目前, 有非常多的blogger認同Chris Locke的觀點, 也就是評論者應對自己的評論負起責任, 而網站所有者不應對此負責. Tim O'reilly認為, 這樣的YOYOW的觀點不應無限上綱, 而應該有個最低限度, 就像我們常說的所謂"自由"的前提是在不妨礙他人的情況下.

Tim O'reilly: """Yes, you own your own words. But you also own the tone that you allow on any blog or forum you control."""

2) Label your tolerance level for abusive comments.
在blog上標示對含攻擊性的評論之容忍限度.

提姆註: Tim O'reilly 提到 BlogHer所提出的"不可接受的內容"應該是一個不錯的起點.

3) Consider eliminating anonymous comments.
可考慮停用匿名評論

提姆註: Tim O'reilly認為雖然匿名性仍然在某些地方有必要,
不過在大部分的情況下,Identity會改變人們的行為.

4) Ignore the trolls.
忽略小白

提姆註: 避戰而不畏戰是也, 有不得不戰的理由時再踩小白幾腳,
大部分時間請直接忽略小白. 因為小白是殺不死的 :D

5) Take the conversation offline, and talk directly, or find an intermediary who can do so.
將對話內容離線,直接面對面交談或者找一個和事佬.

提姆註: 這點可以注意看一下Tim O'reilly的說明, Tim的意思是儘量不要就某一議題在blog上隔空對罵.很多事情見了面交談或許會好一點.比如Chris Locke覺得Kathy明明知道圖片不是他發表的,為什麼公開的指責他是網站所有者之類的. 當然, 人如果都能這麼理性的話...那就世界和平了 XD
不過Tim O'reilly的意思是, 如果可以的話, 不論如何多製造私底下交談的機會都會比對罵來的好一點.

6) If you know someone who is behaving badly, tell them so.
如果妳知道誰的舉止不佳, 告知他們.

提姆註: 可能的話, 婉轉一點 :P 我自己覺得比較糟糕的一點是, 這個時代, 大家都怕瘋子. :P 不過Tim O'reilly在這邊主要指的是自己的朋友, 不要畏懼告訴自己的朋友妳覺得他的評論或文章有過於攻擊性的問題, 應持續的溝通.

7) Don't say anything online that you wouldn't say in person.
不要在網路上說任何妳平常不會直接面對面的對人說的話.

Tim O'reilly的Blogger七準則草稿只是一個起點,
(當然, 我認為是一個好的起點)
國外也有相當多正反皆有的評論跟相關討論,
對於複雜的網路生態跟blogger習性,
未來想必有更多思考跟討論的空間.

星期二, 3月 13, 2007

[talk] 加入Python星球的好朋友又增加了!

對岸愛好Python的朋友黄毅的博客白菜也於今日加入了我們Python星球, 從今天開始也可以看到他發表的Python文章了, 歡迎歡迎!

只要對Python有興趣的朋友, 我們都希望能夠有這緣份跟您結交,這裡的大家都對Python非常的熱情,只要您有寫blog,我們就想看到您的文章能在星球上出現,所以尤其千萬不要害怕自己的blog文章不夠多不夠精之類的問題,因為大家身處的環境不同,即使您覺得極簡單不值一提的事情,對於另外一位朋友卻可能就是非常新鮮的事.我們這些朋友也分別都從大家星球上的文章獲得了不少資訊跟進步,所以千萬不要吝於來信加入,Python星球不論新來後到,一直都歡迎對Python愛好的朋友加入.

而兩岸能有越來越多的朋友參與討論Python互相切磋進步實在是一件值得高興的事, 除了星球之外 http://wiki.python.org.tw/PotResources 的wiki上也有列出不少資源可以利用. 如果各位還有什麼建議也請不吝提出.

ps: 一併回覆前面有位廈門匿名的讀者在評論中提到是否兩岸有屏蔽的問題, 請不用疑慮, 實在是剛好星球放置的主機昨日有流量異常的狀況發生主機不大穩定, 今天已經修復並且由管理者yungyuc在密切調查中了, 應該不是什麼太大的問題, 請大家放心.

星期一, 3月 12, 2007

[talk] 有朋自遠方來,不亦樂乎

gasolin 的熱情邀約之下,
對岸也非常愛好Python的朋友 limodou 即日起加入了我們的Python星球,
很感謝網路無遠弗屆的力量,
讓無論身處世界各地所有愛好Python的華人朋友,
都能夠藉由Python星球來互相交流跟進步.

希望有更多的朋友不論是身處大江南北,
只要是喜愛Python,
都能不吝來信加入我們Python星球,
讓所有只要愛好Python的朋友,
只要訂閱一個Python星球的RSS/ATOM Feed,
就能同步接收到最新的Python中文消息跟知識.

如果您有認識愛好Python的朋友, 也請不吝邀請他來參與我們.


[tip] 使用Emacs透過gmail SMTP server 寄信.

網路上有不少使用emacs透過gmail收發信的文章,
不過這篇Bill Clementson發表的vm跟emacs的使用方法可以說解釋的最為清楚.
http://bc.tech.coop/blog/061023.html
如果你有完全使用emacs收發信的需求, 可以參考這篇.
如果你跟我一樣, 其實只需要使用emacs寄信, 你可以接下去繼續看.

話說我習慣了emacs的編輯方式之後,
自然會想利用emacs透過gmail來幫我作簡單的信件功能.
由於收信比較沒有打字的需求,
其實直接用firefox瀏覽就可以了.
(對了 最近發現這個conkeror http://conkeror.mozdev.org/ 真是個好東西,
這個相當於firefox+emacs的plugin裝在筆記型電腦上 會很快就讓你忘了為什麼操作瀏覽器還需要滑鼠.)

所以其實呢,
我也不必像上述的網頁中的說明特地去多裝一個vm來收信.
只要用emacs內建的mail功能就好了.

而這個設定其實是相當簡單的.
只要在你的.emacs上加入這段:


;; ***** setup email sending names*****
(setq user-full-name "username")
(setq user-mail-address "username@gmail.com")
;; Configure outbound mail (SMTP)
(setq smtpmail-starttls-credentials '(("smtp.gmail.com" 587 nil nil))
smtpmail-smtp-server "smtp.gmail.com"
smtpmail-default-smtp-server "smtp.gmail.com"
send-mail-function 'smtpmail-send-it
message-send-mail-function 'smtpmail-send-it
smtpmail-smtp-service 587
smtpmail-auth-credentials '(("smtp.gmail.com"
587
"username@gmail.com"
nil)))

只要把上面例子的3個username替換成你的gmail帳號名字就好了.

加了幾行設定之後,以後你只要M-x mail 就可以透過emacs舒舒服服的寫信,
C-c C-c 就送出囉.
也不必裝什麼postfix還是exim,sendmail的,
emacs會透過gmail的SMTP來替你送信.
所以寄出的信件也能自動備份在你的gmail帳號裡.
這所有的一切都讓emacs跟gmail幫你搞定. 真的是很方便喔. :)

其實關於emacs我還有很多可以說的,
看一下我的.emacs.d大小:

localhost tim # du -sh .emacs.d
21M .emacs.d

就知道我真的有很多東西想說啊,

不過這篇只能算是個備忘記事,
就等有機會再慢慢講好了,,,

星期日, 3月 11, 2007

可憐的Javascript妹妹啊... 我來聲援妳了~~

""" 不要相信任何失去熱情的人跟你說程式語言不重要,
程式語言只是工具... 不要為了程式語言而戰...
那些人都已經失去戰場跟舞台, 早已不在第一線上了...
遺棄舞台的人, 舞台也終將遺棄他."""

-- by 戰の使徒 使徒提姆


網路上的資訊經常錯誤百出,
老實說我已經見怪不怪了,
由於我很懶惰而且還有其他想作的事情要作,
所以通常我都是扮演跳過之後順便恭維兩句:
"您真內行..." 等等無恥獻媚的鄉愿之徒.

不過阿西摩這篇標題跟文章都讓我看起來就像是
""" Javascript鳥腳本語言 才不是 太陽微電子工業語言 aka. Java宇宙大無敵語言"""
可以說統合了一般非javascript工程師對Javascript天大的誤解之集精華大成.
由於這種百年難得一見的落井下石機會實在難得,
所以基於Python傳教士捨己為人路見不平拔刀相助的仁人理念,
不得不好好的落井下石一番.

雖然說我們Python星球跟Ruby Perl幫的仁人善士早已把這篇批鬥的體無完膚,
卻遲遲不見追Javascript妹幫的js仔出來踢館,
基於前人造出井就是要拿來落井下石的偉大抱負,
我發現我還是得站出來為javascript妹辯護兩句.

我們先來看看阿西摩同學怎麼說的, 阿西摩先引用了wikipedia,


JavaScript並非Java
JavaScript是由網景通訊公司(Netscape)最初在它的Navigator 2.0產品上設計並實現的
,原名LiveScript,除了句法上有一些相似之處以及都能夠提供網頁中的可執行內容以外,
JavaScript和Java是完全不相干的。

JavaScript並不簡單
實際上儘管JavaScript是作為一種給非程式設計師提供的腳本語言而不是給程式設計師提供
的程式語言來推廣和宣傳的,但是 JavaScript是一門具有非常豐富特性的程式語言,和其他所有
的語言一樣複雜或者更複雜,你需要對JavaScript有紮實的理解才能用 JavaScript執行比較複雜
的任務。

原文出處: Wikipedia - JavaScript


然後得到了一個精彩的結論: """所以阿西摩要大喊 JavaScript ≠ Java ,更重要的原因是 JavaScript "充其量""不過是"一種 Script language,中文翻譯為[腳本語言]"""

各位, Wikipedia寫了老大的字:

"但是 JavaScript是一門具有非常豐富特性的程式語言,和其他所有的語言一樣複雜或者更複雜,你需要對JavaScript有紮實的理解才能用 JavaScript執行比較複雜的任務。" ,

這麼清楚的解釋,
阿西摩同學卻得到了"充其量"跟"不過是"這種不能算結論的結論.
我不禁苦嘆: "教育",您怎麼了? Wikipedia是這樣引用的嗎?
那我下次引用漢摩拉比法典說Java充其量是巴比倫人不用的語言好了. :P

再來阿西摩同學又引用了Wikipedia,
得到了一個有趣的結論: Java屬於工業編程語言.
這點各大中文部落格一兩個月前都已經戰到出火了,
當然我也不得不順便在此宣布Python是帥哥正妹跟華夏無敵高手才會用的語言.

好了, 看了這麼一堆狗屁的東西,相信大家一定都頭暈了。好吧,使徒提姆現在就用自己的解釋來說 JavaScript ≠ Java ... 我讀起來阿西摩大概就是這麼說的.

好了, 基本的狗屁都過去了, 來看看太陽微電子學派的六大錯誤論點吧:

1. 阿西摩:"""JavaScript 只要有一個網頁跟有支援 JavaScript 的瀏覽器才可以執行."""

喔喔... 是這樣喔...沒看過SpiderMonkey也看過Rhino吧?
Rhino還是用太陽微電子語言寫的呢.

接下來阿西摩同學還說了(至少我讀起來是這樣)
"""只要程式內沒有使用什麼特殊平台的 library ... (跨平台) ... 都不會有太大的問題"""

這句話要好好練習練習, 升官發財就靠這句了.

2. 阿西摩:"""最原始的 JavaScript 能操作跟執行的範圍相當有限,比方說,你如果要讀取本機端的檔案,比就必須搭配 JavaScript extension 還有 ActiveX 之類的附註程式才有可能達稱。而 Java 可以輕鬆的使用 Java 原本的 package 去讀取檔案,更改檔案。"""

拿木瓜比菜瓜... 不如說Java還有咖啡可以喝好了... 照樣造句也可以來一句:
"Java要搭配Java程式庫跟瀏覽器的plugin才能XX OO YY,能操作跟執行的範圍相當有限"

看官, 了解了嗎, 欲加之罪何患無詞? :P

3. 阿西摩:"""而比起 JavaScript,Java語言,有自己的標準,架構,平台,而且複雜度高上太多太多了,所能應用的範圍更是會把 JavaScript 巴到連渣都不剩!"""

是是是... 阿西摩說的好... Javascript渣都不見了... Java還剩很多... (渣?...)

Javascript標準,架構,平台樣樣不缺, 至於語言的特性跟範圍,

Joel Spolsky去年發表了一篇"""Can Your Programming Language Do This?""",裡面的例子就是採用Javascript, 順便又替早就人人喊打的java又多踢了兩腳.

是的, 妳還可以仔細閱讀...

"JavaScript:
The World's Most Misunderstood Programming Language"


The JavaScript knowledge gap

稍微多瞭解一下知識.

不過說到要比複雜度, 不知道Levels of JavaScript Knowledge您是第幾層?

"""I would even go so far as to say that the fact that Java is not hard enough is a feature, not a bug, but it does have this one problem.""" Joel Spolsky這麼說.

但是隱藏在這後面, 最可怕的媚俗誤解並不是上面我提的這些, 
是居然用語言的複雜度來論斷一個語言.
也就是說一個語言只要搞得很複雜然後說自己很嚴謹就突然變的了不起了起來.
當年C++派人士這樣對待Java先鋒們(我是很敬佩這群先鋒的, 至少人家敢挑戰權威)
現在他們的徒子徒孫好的不學又學到這招打壓的威權思想,
不知道該作何感想. 只能說歷史一直重演.
不如所有人都去學機器語言算了. 反正一切都是0跟1嗎. :P

4. 阿西摩:"""JavaScript 是一種非常不嚴謹的腳本語言。在 JavaScript 裡面,變數全部都用 var 宣告,如果你這樣在 Java 裡面寫程式,我跟你保證,Java compiler 會不斷的,一直的給你[舉紅牌]!"""

非常明顯的錯誤加上完全莫名其妙的結論跟推理過程.
阿西摩說: "在 JavaScript 裡面,變數全部都用 var 宣告"...
這完全是錯誤的資訊,
var不是一種變數的宣告,
var是表示這個變數是local variable, 是一種scope的概念.
不論有沒有var都是個變數, var只是一個scope修飾子,
而javascript的variable scoping rule是implicit global scope,
講的這樣囉哩囉唆, 還看起來太專業了所以妳不知道嗎?
喔 那JavaScript 是一種非常不嚴謹的腳本語言到底是怎麼得來的結論?
要戰動態型別嗎? 那我看這篇文章可以自動加個八千行了, 別了吧...XD

阿西摩:"""如果你這樣在 Java 裡面寫程式,我跟你保證,Java compiler 會不斷的,一直的給你[舉紅牌]!"""

喔如果妳在javascript裡寫java樣子的程式, java script debugger也會不斷的給妳舉紅牌 還按到妳手酸為止耶...

嚴謹不是java能規定的. 嚴謹主要還是來自於Programmer的撰寫習慣跟對程式碼的尊重. Period.

5. 阿西摩:"""我可以用 Java 語言,在 Java Server Page (JSP)上動態產生 JavaScript 語言,並且執行,而你想要用 JavaScript 去寫 Java語言!? 嗯,還是不要沒事找自己麻煩的好!"""

降子啊... 我又想照樣造句了耶, Javascript還可以動態產生Javascript呢... 妳如果想用java語言去產生java語言,, 恩... 還是不要沒事找自己麻煩的好...

反正這種句子隨便怎麼造再給個論斷 聽起來都言之成理,

還不過就是市場機制驅使不少人有了一種java的優越感罷了.

錢跟價值突然就等價了起來.

javascript的原罪就在於太簡單就能學,

一堆人隨便剪剪貼貼就以為會了,

加上不長進的公司又沒啥高深的需求,

當然領的錢就少.

不過放心吧,

照ajax被一群工程師惡搞的趨勢來看,

搞不好以後會變的很難又亂七八糟的.

(當然啦 還是會有一股清流的... 不過清流一般來說都只能在山裡隱居 沒辦法成為主流的)

反正就暫時隨便阿西摩說吧, 搞不好哪天就會突然為了錢想學個什麼ajax起來,

到時搞不好javascript又什麼都好了... XD

6. 阿西摩:"""總之,JavaScript ≠ Java 你是要我說多少次才會聽懂啦!"""

我聽懂了... 可是我覺得錯誤百出ㄟ... XD

再來呢, 阿西摩同學又示範了Helloworld這個艱難的程式用兩個語言撰寫之後,

又發現自己的Java專業被人家當作"Javascript"這種"""垃圾"""看待...

各位... 到底是誰得了便宜還賣乖? 寫兩個helloworld就得出了後面這個結論,

"""因為 Java 背後的專業性,應用範圍,
絕對不是 JavaScript 那種 SCRIPT 語言可以比較的!"""

公理自在人心,
妳覺得, 被人以錯誤的理由跟藉口(其實只是不滿Javascript跟Java名字像而已,就像路上遇到一個跟你撞衫的傢伙不爽就砍他兩刀)打了一巴掌又踢了一腳, 是不是不值得生氣?

我充分能理解阿西摩這篇文章那幾十篇留言的心情,
不理解這種心情的人想必是還沒瞭解被他人輕視的感覺的,
想當年, 我也被論文口試的教授說:"為什麼用這種全天下只有妳會的語言(python)
為什麼不用Matlab?"
我也只是乖乖的摸著鼻子而已.
出了社會有時使用Python也常被冷嘲熱諷,
所以為了真正的程式之道忍辱負重還要被踢上兩腳. 其實我已經習慣了.

但是各位, 我為Javascript妹妹抱不平啊.......!!!
(我這個人, 看到正妹就是心地好+憐香惜玉...XD)

不過阿西摩妳也不用氣餒,
阿西摩的文章也沒有說自己的文章是什麼阿西摩十誡,
頂多只是宣導了錯誤的東西罷了,
所以雖然阿西摩的文章錯誤百出,
雖然我講的話向來很直,
但是文章是文章, 人是人,
文章即使再怎麼差勁, 人是會進步的,
俗話說的好, 不打不相識,
相信經過眾人的洗鍊之後, 還是會有所成長的!

希望阿西摩以後能發表值得嘉獎的文章,
這樣我也不用花一兩個小時來打一篇廢話這麼多,又不怎麼中肯
還把我整年戰文的Quota都用完的文章了.

ps: 各位居然能撐到這邊看到這裡的看官,
這篇主要還是屬於麻辣Humor類,
也就是消遣人當娛樂的類型,
看過吳X憲的節目吧?,
如果有人因為我的狗屁廢話生氣上火了那就不好了,
因為我還是會繼續消遣下去的 .

請仔細看我的右下方特別聲明喔, 我是自High派的. XD

ps2:

Javascript妹妹, 我這麼熱情的聲援妳, 請妳愛我吧!! (趁亂告白篇)

阿阿不行不行, 我已經有Python了, 雖然難過, 我們的相遇實在是個錯誤, 還是分手吧... XD

星期六, 3月 10, 2007

你今天FizzBuzz了嗎?

FizzBuzz的問題由來已久, 基本上"應該"很簡單,
而且你"應該"不需要知道這問題還有個名字叫FizzBuzz:

Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

不過這篇由tickletux發表的個人牢騷像野火一般燒遍了國外的programmer blog,讓FizzBuzz聲名大噪了一番,
那篇講的主要其實也只是在抱怨他找的Programmer人選連解決像FizzBuzz的簡單問題都沒辦法,
不過這抱怨也激盪了出不少網路上最不缺的戰火話題跟創意,
以至於目前不少blog將FizzBuzz議題發表視為一種時尚.
(比如本blog接下來要做的事 :P)

基於傳教士的天性, 及追隨時尚盲從潮流的一種特殊快感,
篤信寫Python得永生的我也不得不特地趕上風潮:


def fizzbuzz(n,x):
"""tim like buzz, you like tim, so you get my dear john letter"""
if n == 100: return x + "Buzz"
elif not n % 15 : x += "FizzBuzz"
elif not n % 5 : x += "Buzz"
elif not n % 3 : x += "Fizz"
else: x += str(n)
return fizzbuzz(n+1,x)

print fizzbuzz(1,"")


嗯嗯 我的版本有沒有一種"為賦新詞強遞迴"的感覺? XD

還沒有嗎? 那是因為我寫的爛的緣故, 那後面這篇

"Ruby interpreting Prolog' interpreting Lisp interpreting Lisp solving FizzBuzz"

你就不得不"欣賞欣賞"了 :P

好好一個FizzBuzz又被他老兄離題到這種程度...

這又再度證明了一件我長久以來悟出比"FizzBuzz實驗"更加有說服力的結論:

"Programmer永遠能在極端無用的事物上才華洋溢"

(只是隨口說說啦... 如果有對結論已經認真起來的同學請仔細閱讀本blog右下角特別聲明 XD
好了好了 我啥都沒說 沒事多喝水多喝水.....orz)

星期日, 3月 04, 2007

[公告] Official Python Planet@Taiwan 正式開始運作!

各位愛好python的朋友大家好,

目前http://planet.python.org.tw 經過一陣子的測試,
運作狀況良好, 已經正式上線了.

yungyuc的熱情感召之下,
目前由小弟tim我來維護planet.python.org.tw的大小事項,
往後有任何planet相關的問題或建議,
歡迎來信planet#at#python.org.tw或在freenode irc上的#python.tw詢問.

歡迎大家吸收更多愛好Python的朋友進入我們POT眾溫暖的小星球!

星期四, 3月 01, 2007

stupidity driven testing

"""I don’t do test driven development. I do stupidity driven testing... I wait until I do something stupid, and then write tests to avoid doing it again.

— Titus Brown"""


Python有很多testing的工具,
包括內建的unittest/doctest,
3rd party的py.test/nose,
web application也可用twill,Selenium等特殊工具.
django目前的svn也有內建testing工具.
所以其實工具並不是什麼大問題.反而真正的重點是:

何時要testing? 要testing到什麼程度?

我在kalug有一次介紹python模組的時候有講過py.test,
曾聽過snowwolf在kalug介紹GUI testing(JUnit and Swing testing)
我也用過很pythonic的doctest,nose, 也用過django的testing模組(with unittest),
但是儘管對於工具本身並不陌生,
卻對於所謂的test-driven development這個概念還是覺得過於理想化,
因為能做的testing永遠覺得不夠, 到底一個項目要testing多少個Case?
到底要testing到何種程度才算完整才算足夠?
如果什麼都測我要什麼時候才開始真的寫code跟除錯?

Titus Brown在pycon2007的一語驚醒我這個夢中人:

古語有云: 知錯能改 善莫大焉!

一旦你coding時犯了一次錯,就把他寫成一個testing case!

testing不是要讓你不犯錯, 而是要避免你一錯再錯!

星期三, 2月 28, 2007

[link] William McVey的Pycon 2007筆記與OLPC

圖片請點此

http://wamber.net/static/PyCon-2007/export-with-imagemap/PyCon2007.html

http://wamber.net/static/PyCon-2007/

William McVey用FreeMind製作了pycon2007的筆記,
除了筆記製作的非常精緻之外,
我也注意到One Laptop Per Child這場talk又被打了兩顆星星,
網路上也不少有參與pycon的 blogger也大都對這場OLPC talk讚譽有加.

Python原本就是適合兒童學習使用, 能開闊心智的程式語言跟開發環境,
而這次OLPC計畫選擇了Python,
全面採用Python開發GUI圖形介面(called sugar)跟檔案系統(a version-controled "object store "called "Yellow"),
而在鍵盤上有一個瀏覽程式碼的按鍵可以方便有興趣的兒童瀏覽及修改.
讓開放原始碼的精神徹底的被實現(使用者這次真的可以輕易的獲得原始碼修改並即時調整系統)
的確是可以被稱作一項了不起,
可以改變世界教育方式跟傳達開放原始碼精神的計畫.
也難怪國外的Pythoner會對這場talk如此讚賞了.

OLPC百元電腦預計於今年將會出貨,
OLPC的軟體將會是100%自由軟體,從BIOS,作業系統跟應用軟體全部都是,
主要會先供貨至開發中國家,
相信對Python知名度及普及度的提高將有大大的幫助.

(我也好想買一台: 三千多塊台幣內含linux,browser,mplayer跟Python的筆記型電腦...
你說你想不想買...)


有關OLPC在這次Pycon的熱烈情況及更詳細的內容可以看這篇: http://www.freesoftwaremagazine.com/blogs/olpc_kicks_off_pycon_2007/
另外Wikipedia也有OLPC的簡要說明

星期一, 2月 26, 2007

POT眾整合版的The Zen of Python "Python之道" 好讚啊!!!

果然有個Wiki是好東西, 
可以很方便的融合大家對"Python之禪"的理解.
如果有Python玩家還沒"禪定"的就趕快去POT報到吧!

這句句都是至理名言的The Zen of Python
翻成中文的感覺還是很酷啊~~ ^_^

http://wiki.python.org.tw/The_Zen_Of_Python

The Zen of Python "Python之道" 整合版

美優於醜,

顯明好過隱晦。

簡為上,繁複次之。

晦澀為下。

平順善於巢雜。

寧散不為短巧,

村婦可讀。

特例並不值得我們打破原則。

雖然,理想終究不敵現實。

不靜靜的放過任何錯誤,

除非你是故意的。

隱者,晦者。不臆,不筮。

事情要有一種明顯的作法,最好也只有一種,

雖然不是荷蘭人的你,一開始可能看不出來。

現在開始,強過不作,

雖然有時候不處理比*馬上*處理更好。

不易解釋的實作方式,就不是好方式。

容易解釋的實作方法,說不定是好方式。

命名空間是個頂呱呱的點子 -- 儘量用!

ps: 如果分成古文版跟白話文版 分開來翻譯那就更好了,
古文典雅容易記誦,白話淺顯容易理解,
看看有沒有高手能編個RAP出來還能當饒舌歌唱那就更酷了 :P

ps2: Thinker解釋了Sparse is better than dense, Readability counts. 寧散不為短巧,村婦可讀 的Python精神.

今年七月 Python3.0a1 發表 ?!

http://mail.python.org/pipermail/python-dev/2007-February/071375.html

看來這次似乎是認真的, 準備一口氣把GvR感覺不pythonic的東西全拿掉了.

這次語法淨化一次到位果然是大手筆:
照py3k的規劃, print 改成function,
map(),reduce(),filter()全移了.
xrange() raw_input() apply()也不見了.
operator / 不再是c的整數除法 改成浮點數運算了,
classic class消失了...
blahblah還有很多請自行參考http://www.python.org/dev/peps/pep-3100/

似乎由於不向後相容的關係, 這次會發表python2升3語法的工具,
不過還是沒想到今年的年中就會發表第一個alpha版,
之前GvR不是還在抱怨py3k沒人理嗎? =.=

明年就會有3.0final.... 這實在來的太快了 =)
話說這不少linux distribution都還停在python2.4啊...
總而言之, 這語法改變的適應期也還不算太短, 就慢慢來吧.

星期五, 2月 23, 2007

[快訊] PotWiki : 台灣官方Python維基上線 !

http://wiki.python.org.tw/Pot

[本blog訊] 台灣官方Python維基於農曆新年期間上線,全台人民歡欣鼓舞,共同迎接Python台灣官方維基的到來。激情滿懷的Pot User四處奔走相告,PyTUG眾無不信心滿滿,幹勁倍增。

展望未來,Potwiki是推動全台Python跨越目前發展的重大民心工程、發展工程、希望工程。而深入閱讀Potwiki的內容,總能喚起一股青春的力量,一種創造的激情,一段永不停止的追求。

新的一年,讓人充滿了對Python@TW的憧憬和期待。
妳也喜歡Python嗎? 現在就加入Pot的行列吧!

[記者小正太提姆 於 光明會幼幼台激昂報導]

[link] YUI now has Free Hosting.

http://developer.yahoo.com/yui/articles/hosting/

YUI最近除了把版本跳了兩號之外, 又作出大動作: Free Hosting For YUI users.

YUI內含javascript/CSS/圖片, 現在免去下載直接可以使用確實省了一番功夫.

jQuery原本也是這麼做, 不過據說一陣子下來流量驚人.

所以後來就不建議人直接內嵌.

jQuery不過20K就流量驚人. 何況是更"碩大"的YUI.

不過 Yahoo! 果然是財大氣粗. 連widget的圖片都幫忙hosting了.

看來是有流量限制的網站的首選js library. YAHOO! 幫妳節省了頻寬. :P

Anyway, Nice Job!

看來過一陣子可以試試看直接在blogger用YUI了.

(無責任發言: 怎麼不快把jack簽下來這樣可以順便hosting一下ext :P)

星期二, 2月 20, 2007

[link] [screencast] 整合Django與PHP

http://showmedo.com/videos/video?name=pythonNapleonePyConTech2&fromSeriesID=54

ShowMeDo上放了有關這次PyCon2007網站架設的講題影片,
看了之後才發現原來PyCon2007的網站是由php的wiki跟django"合力"製作完成的. :)

這個影片示範了這次PyCon2007如何透過Django的Custom Template Loader
整合PHP的wiki pmwiki (恰好是Kalug的Wiki Engine :) )進入Django,

講者還示範了整合他老婆的Wordpress Blog進入Django的過程.

very cool!

星期一, 2月 19, 2007

[link] PyPy 0.99.0 released !

http://codespeak.net/pypy/dist/pypy/doc/news.html

光看這個版本號就非常令人興奮. 沒想到1.0指日可待了 :)

PyPy一直是我非常關注的專案,
作者群裡面包含了Psyco的作者跟不少很有經驗的開發者,
加上有金主奧援, 可以看作是Scripting Language的指標專案之一.

專案的目標主要是用python來撰寫Python Interpreter,
PyPy的實作相對於其他如Cpython/Jython/Ironpython的好處是:

1. 讓Interpreter核心程式碼更容易懂:
使用Python而非傳統使用C或C++或java或C#

2.更容易移植
PyPy基本上顛覆了傳統撰寫Interpreter的方式,
PyPy並不是對特定平台而寫,而是寫出來之後低階與機器相關的部份透過"language specification"來翻譯.
所以實際上Interpreter的核心不論在哪個平台其實程式碼都是一樣的.
只有低階的部分由rpython撰寫並透過不同的翻譯器翻譯成目標平台的語言.

目前的svn code裡面的平台翻譯器有C/Java/.net/Common Lisp/Java script/squeak(small talk)/llvm. (翻成Javascript倒是挺有趣的, 這裡還示範了怎麼用pypy在django裡作ajax =.= 不過這麼前衛然後再加一層的技術目前我是不敢真的用在專案上的 除非pypy1.0之後有很多人採用 不然暫時我還是喜歡乖乖的寫我的javascript :P 不過有興趣而且不喜歡javascript的人倒是可以看這篇Developing web applications with PyPy)

3.更容易加入JIT compiler
官方宣稱透過"language specification"的方式可以作到傳統Interpreter作不到的事情,
例如替Interpreter加入JIT compiler,讓Interpreter也能達到接近native language的速度.
不過0.99版由於JIT尚未整合進Pypy核心, 所以還未放入,
所以實在是不知道未來PyPy到底能多快. (我對這個一向是抱持著看到才相信的態度 :P)
不過當初的秘密謠言(Rumors have it that the secret goal is being faster-than-C which is nonsense, isn't it?)...
對比現在的0.99版官方宣稱的overall 2-3 slower than CPython實在是無法令人滿意...
最主要是JIT的速度不如預期, 所以只能說請PyPy Team裡的高手多加加油了...

也希望快點有1.0出來囉也希望1.0文件多一點...
現在的文件數目對於我這種只是看著code流口水的EndUser來說實在是有點太少而且編排太亂...

ps: 剛看到reddit上也有人在討論 看起來像是rpython的使用範例.
範例中透過translatorshell.py翻譯Rpython成為C code可以比原先的pure python code快了70倍.
http://programming.reddit.com/info/152lr/comments/c156v0

[link] Satchmo -- 基於Django的電子商務商店架站軟體

應該不少人都有聽過osCommerce這個Opensource的PHP&GPL線上開店架站軟體.

那麼Django有沒有什麼對應方案呢?
答案似乎是有的, Chris Moffitt用BSD版權釋出了基於Django開發的電子商務開店軟體: satchmo

對於這類軟體, 大家總是有疑問, 它穩定嗎, 馬上能用嗎?
基本上這類軟體一定要經過客製化的程序,
而Satchmo還在先期開發中,雖然可用,但不見得符合你的需要.
如果你想要完全不修改就能使用那可能還是花錢買公司的Support比較妥當.
好處是satchmo以BSD版權釋出, 如果你有這類的需求, 多看看別人的程式碼也無妨.

你可以先看看Demo:
Demo站台在此

原作者在Mailing list上也有回答:
"""
1. I think Satchmo is ready with the caveat that it needs to be the
right kind of site. I do not believe any Satchmo sites are live in the
wild. I will say that the "Demo Store" is the current code and does get
a fair amount of activity (i.e. probably more then my real-life store ;)
and so far nothing has gone up in smoke. The features that Satchmo have
work and for me, they are > 90% of the features I need. My wife's store
would have < 50 items, some discounts, authorize.net integration and
possibly some other custom CMS type features. I am confident I could
put Satchmo in and it would work well for me. The only reason I haven't
is that my current site works and I haven't spent the time doing the
HTML/CSS re-design I'd like to do. In some ways, Satchmo already does
more for me than the stock OsCommerce site I'm running now. Of course,
Satchmo does not have the rich amount of modules available like OsCommerce.

I will say that OsCommerce becomes a real nightmare once you start doing
anything more than the stock store. It just feels crufty (partially
because I'm no PHP expert) and I just fear making changes to the store.
I never know how things will break.

I also think Satchmo is stable because it's based on Django. A lot of
the scary stuff around security and having different db support is
handled by the robust Django framework. There's also lots of experience
with how to scale Django that should apply directly to Satchmo.
"""

簡單來說只要有熟Python/Django跟Html/css的人持續修改維護就可以開店了.
大部分用Django開發的軟體,如果了解Django的基本架構就大概知道要怎麼修改而不會爛掉.
(有金主找不到的話, 就到Unofficial Python PlanetKalug灑大錢加上三顧茅廬大概就會有高手跑出來了 XD)

星期日, 2月 18, 2007

[解釋] 什麼是CC強攻魯魯修....

話說似乎有人搞不懂為啥我部落格的授權是CC強攻魯魯修...

解釋出來就不有趣了, 不過既然有人問了(這些不點連結的傢伙)還是解釋一下.
魯魯修是很紅的動畫CodeGeass的男主角,
CC是CodeGeass的女主角, 剛好跟創用CC授權同名.
而CC強攻魯魯修是我看片的感想(跟願望XD)
就拿來Kuso一下了咩.

好吧這個其實也不是重點, 重點是有人看到了我的極惡之華裡的CC照片之後
說: "這個長的這麼受怎麼強攻" ....



人不可貌相你聽過沒有... 特別是你才看過幾眼... orz

這個前幾個月出了特別篇的女主角看起來夠受了吧



可是只要幾年前有看過動畫的都知道.... 她是人人敬畏的人氣養樂多黨黨主席啊 XD


這個看起來溫柔文靜萌死人的少女:


其實是大名鼎鼎的2006萌王腹黑石啊:


動畫是很深奧的啊 XD

[link] The Aha! point for lisp.

Aha! While writing YAQL I accidentally discovered Lisp

Greg Trasuk's Weblog:
"""
And then the AHA! moment happens. I finally "get" Lisp! It's just a string representation of the abstract syntax tree for any language! I could embed a Lisp interpreter in the query parser! I could use Lisp macros to perform optimizations on the query! There's a JJTree grammar for Python in the Jython package, I could parse Python into Lisp programs! I'm onto a Really Big Concept! Possibly the Next Big Thing, the grand unification of all scripting languages! Now I have to move back to Xemacs from Netbeans! All I need to do is increase the output by 15% and the city will be mine! If only I had More Power!
"""

話說自從lloyd大大傳授我他壓箱(真的是壓了好多層箱)
的Emacs Lisp聖書三大本,
最近寫Emacs Lisp寫出興趣來了,
發現其實Lisp很好玩,
以前雖然也沒事會裝裝武林高手,
用用lambda,map,filter...blahblah...
雖然把Code寫成一副很有"尊嚴"的樣子,
但是其實心裡總是覺得夾在Python的Code裡面就怪怪的,
多寫幾個就覺得很醜... 所以其實也只是偶而拿來減少一下loop需求而已.
但是, 果然玩了Lisp之後才知道人家是正牌的... XD

所以最近沒事都在讀讀Practical Common Lisp跟玩玩Emacs,
(不過最常幹的還是看動畫念日文跟網路亂逛), 然後看到這篇其實寫的很不錯.

他沒講到的話 我還真的不知道... 覺得這篇很有啟發性...
把任何語言的AST寫成字串形式其實就是LISP...(筆記筆記)
1958年就應該要知道的東西...
結果總是有人(就是我們這代人)在重造輪子...
算了, 反正造輪子總是比較爽... 自產自銷 XD

不過還是要說... 拜Python教的大家絕對不用氣餒...
Python+Django是無敵的...
(ㄟ lloyd大大...你又可以演吐槽角色了...)

[link] 有趣的geek漫畫 xkcd

http://xkcd.com/
節選幾篇... (xkcd是CC-NC授權)



其實我們的世界是用perl hack出來的... =.= ...




這亂數產生器寫的真是簡潔有力啊...
就叫它MT-AgileDice-19937好了





一直在喊多接觸大自然... 但其實是宅在心裡 :P
嘴巴說不要... 身體倒是挺老實的...





這世界上壞人很多啊...
小弟弟可不要沒事傻傻的去論壇po文章啊...
網路上的叔叔都有練過的喔...
這Youtube鄉民... 當然是千錘百鍊囉...



這... 有用就見鬼了...

老姊曰:"妳這台怎麼沒裝123?"

話說我姐的電腦問題實在是越來越難懂了,

這次她要看朋友的影片時又發功了:

"啊 妳這台win2000怎麼用這個播 不是有那個123 嘛 ?"

123 ??!! 123 !!?! 123 是什麼鬼?!!

難道說我之前替她的電腦裝了Unix底下才有的mpg123 Console播放器???

不可能這麼瞎吧... 就算我再怎麼愛用Unix 我姐也不可能用習慣那種東西吧~~

啊.... 難道是....

不會吧... 原來是...









你馬幫幫忙... 這是一個整天在世界各國開Conference寫Paper...
據說要唸醫學博士的傢伙說出來的話嗎?

人家好歹也是 3 2 1 啦... =.=

ps: 老姊, 這篇被妳看到了不要打我, 誰叫你新年第一天就在耍笨...

星期六, 2月 17, 2007

buildbot setup trac!

http://buildbot.net/trac

buildbot是一個用Python撰寫, 可以用來追蹤軟體專案目前狀況的軟體.

buildbot設立之後,可以定時編譯並且回報軟體是否有成功的編譯/Unit Testing成功.
非常適合用來協助大型軟體的測試跟追蹤新開發程式的臭蟲.
目前已有多個Python開發的Opensource專案每天都透過Buildbot進行測試.

講這麼多廢話, 重點是, Buildbot用Trac新建立了一個Wiki頁面之後,
內容看起來豐富多了. :)

官方網站提供的BuildBot ScreenShot:

直接使用Browser觀看:


透過IRC:


GUI介面即時顯示狀況:


GTK介面的debugclient: