<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-38122661</id><updated>2011-12-16T16:15:21.513+08:00</updated><category term='openid'/><category term='lighttpd'/><category term='postgresql'/><category term='C_lang'/><category term='funny'/><category term='html5'/><category term='web'/><category term='kalug'/><category term='latex'/><category term='lenny'/><category term='g3'/><category term='penguin'/><category term='NASA.'/><category term='logitech'/><category term='pycon'/><category term='firefox'/><category term='py3k'/><category term='awk'/><category term='iphone'/><category term='mouse'/><category term='xkcd'/><category term='tips'/><category term='haskell'/><category term='openvpn'/><category term='ast'/><category term='link'/><category term='pyrex'/><category term='work'/><category term='xen'/><category term='rant'/><category term='djangoconf'/><category term='humor'/><category term='patch'/><category term='serial'/><category term='baseball'/><category term='scheme'/><category term='pot'/><category term='x.org'/><category term='ext3'/><category term='fastcgi'/><category term='scala'/><category term='mysql'/><category term='olpc'/><category term='g5mouse'/><category term='talk'/><category term='bzr'/><category term='arc'/><category term='freemind'/><category term='g5'/><category term='FreeBSD'/><category term='announce'/><category term='django'/><category term='lift'/><category term='oracle'/><category term='read'/><category term='ext2'/><category term='trac'/><category term='drm'/><category term='etch'/><category term='ozearch'/><category term='network'/><category term='Emacs'/><category term='ubuntu'/><category term='testing'/><category term='pyinstall'/><category term='google'/><category term='space'/><category term='ruby'/><category term='javascript'/><category term='sphinx'/><category term='perl'/><category term='benchmark'/><category term='pysco'/><category term='curl'/><category term='g7'/><category term='Gentoo'/><category term='C++'/><category term='gpl'/><category term='benq'/><category term='opensource'/><category term='python'/><category term='pony'/><category term='mako'/><category term='debian'/><category term='coscup'/><category term='coscup 2008'/><category term='netbsd'/><category term='database'/><category term='linux'/><category term='embedded'/><category term='translation'/><category term='usb'/><category term='php'/><category term='ajax'/><category term='note'/><category term='programming'/><category term='bsd'/><category term='scm'/><category term='ssh'/><category term='lisp'/><category term='book'/><category term='kde'/><category term='g9'/><category term='acrobat'/><category term='kernel'/><category term='flup'/><category term='microsoft'/><category term='tiobe'/><category term='xpcom'/><category term='ezpyinline'/><category term='pypy'/><category term='crc32'/><title type='text'>拜Python教之Django光明會支部      [ 使徒提姆@Python ]</title><subtitle type='html'>"拜Python教" 是一個低耦合高熱血密度的小型地下傳教組織.

專門研究並推廣Python崇拜 &lt;br /&gt;

"Django光明會支部" 

是一實驗性分享Python, Django及自由軟體心得的中文部落格</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default?start-index=101&amp;max-results=100'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>163</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-38122661.post-5397126064762769366</id><published>2011-06-01T03:02:00.006+08:00</published><updated>2011-06-01T04:19:54.423+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><title type='text'>[link] Nvidia Optimus on linux 的解決方案 : bumblebee 大黃蜂</title><content type='html'>&lt;a href="https://github.com/MrMEEE/bumblebee"&gt;https://github.com/MrMEEE/bumblebee&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;四月份的時候買了一台DELL i5二代的筆電，&lt;br /&gt;用起來還算滿意, &lt;br /&gt;但是就是在linux下居然無法使用Nvidia的顯示卡這點讓我不是很滿意。&lt;br /&gt;&lt;br /&gt;當初在買筆電的時候，為了相容Linux還特地挑了一個Nvidia的獨顯,&lt;br /&gt;想說一直以來Nvidia的顯示卡在Linux下都支援良好,&lt;br /&gt;所以也沒特別注意相關的消息,&lt;br /&gt;這次買了才發現，,&lt;br /&gt;只要是使用了Nvidia動態切換內顯和獨顯的Optimus技術的筆電，&lt;br /&gt;在Linux下通通沒辦法驅動Nvidia獨顯, &lt;br /&gt;而只能用Intel的內建顯示，&lt;br /&gt;並且Nvidia的顯卡雖然無法運作，&lt;br /&gt;但還是會在背景吃掉相當多的電力，&lt;br /&gt;一個原本是設計來省電的技術反而耗了更多的電，&lt;br /&gt;實在是非常的諷刺。&lt;br /&gt;&lt;br /&gt;原本想說應該BIOS就可以直接切換成Nvidia獨顯，&lt;br /&gt;結果研究了一下才知道Nvidia的輸出會經過Intel顯卡，&lt;br /&gt;所以如果沒有內建硬體的Multiplexer,&lt;br /&gt;想關掉Intel顯卡直接使用Nvidia顯卡是不可能的，&lt;br /&gt;當時只好在網路上找了一個acpi的方法把Nvidia的顯卡先關掉，&lt;br /&gt;但是反過來如果只是要把Nvidia的顯示卡打開卻似乎是辦不到,&lt;br /&gt;實在是萬分苦惱。&lt;br /&gt;&lt;br /&gt;然後剛剛發現了這個bumblebee(大黃蜂)專案,&lt;br /&gt;提供了ㄧ個簡單的script就讓Linux支援了Nvidia顯示卡且使用官方的3D驅動,&lt;br /&gt;雖然還沒辦法動態切換, 但是可以手動切換也算是不錯了。&lt;br /&gt;&lt;br /&gt;安裝的方法真的是很簡單:&lt;br /&gt;先git clone https://github.com/MrMEEE/bumblebee.git&lt;br /&gt;然後執行其中的install.sh 回答幾個只要選default就可以的問題 之後就安裝完成囉!&lt;br /&gt;&lt;br /&gt;平常的時候，預設還是會用Intel的顯卡來執行, &lt;br /&gt;要用Nvidia執行的時候, 則要透過optirun來執行該程式~~&lt;br /&gt;&lt;br /&gt;#glxgears   &lt;br /&gt;&lt;br /&gt;304 frames in 5.0 seconds = 60.604 FPS&lt;br /&gt;301 frames in 5.0 seconds = 60.137 FPS&lt;br /&gt;301 frames in 5.0 seconds = 60.136 FPS&lt;br /&gt;301 frames in 5.0 seconds = 60.137 FPS&lt;br /&gt;301 frames in 5.0 seconds = 60.137 FPS&lt;br /&gt;&lt;br /&gt;#optirun glxgears&lt;br /&gt; * Starting Bumblebee X server bumblebee                                        Enabling nVidia Card failed (Error: AE_BAD_PARAMETER).&lt;br /&gt;                                                                         [ OK ]&lt;br /&gt;3015 frames in 5.0 seconds = 602.973 FPS&lt;br /&gt;3312 frames in 5.0 seconds = 662.366 FPS&lt;br /&gt;2908 frames in 5.0 seconds = 581.591 FPS&lt;br /&gt;2798 frames in 5.0 seconds = 559.551 FPS&lt;br /&gt;3409 frames in 5.0 seconds = 681.679 FPS&lt;br /&gt;&lt;br /&gt;雖然是有些錯誤訊息不過還是有成功的跑起來了,&lt;br /&gt;另外再跑了lgfxgears也是由2fps到100fps,果然是快了不少.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-5397126064762769366?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/5397126064762769366/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=5397126064762769366' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5397126064762769366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5397126064762769366'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2011/06/link-nvidia-optimus-on-linux-bumblebee.html' title='[link] Nvidia Optimus on linux 的解決方案 : bumblebee 大黃蜂'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-9053466507433005132</id><published>2011-01-09T00:08:00.008+08:00</published><updated>2011-01-09T11:47:22.581+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>如果高中棒球社女經理讀過使徒提姆的部落格~~</title><content type='html'>&lt;span style="font-weight:bold;"&gt;她就會馬上開始學Python&lt;/span&gt;......&lt;span style="font-style:italic;"&gt;也許吧? :P&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;據說"如果高中棒球社女經理讀過杜拉克的管理學"是前陣子日本暢銷書排行榜排名第一名, &lt;br /&gt;&lt;br /&gt;既然管理學可以,Python應該也可以吧, "import 管理學"什麼的我們Python應該也有吧?&lt;br /&gt;&lt;br /&gt;嗯嗯 是不是乾脆把我的部落格名稱也改一改~~ 之後就可能會突然爆紅也不一定? XD&lt;br /&gt;&lt;br /&gt;==&lt;br /&gt;&lt;br /&gt;老實說像我這麼發懶的部落格作者, &lt;br /&gt;&lt;br /&gt;是根本不奢望會有讀者的, &lt;br /&gt;&lt;br /&gt;說來說去這部落格不過就是個一時自娛娛人的消遣跟筆記罷了,&lt;br /&gt;&lt;br /&gt;但是即使如此, &lt;br /&gt;&lt;br /&gt;突然發現部落格去年居然只更新兩格, &lt;br /&gt;&lt;br /&gt;也是有種感受到被歲月的巨輪無情的從身上碾過的感覺~~&lt;br /&gt;&lt;br /&gt;"啊啊啊~~ 老的無話可說了嗎?"&lt;br /&gt;&lt;br /&gt;"好歹出來寫篇Python真是太讚了 然後出來喊個兩聲表示還活著也好吧?"&lt;br /&gt;&lt;br /&gt;"連廢文都沒有了嗎?"&lt;br /&gt;&lt;br /&gt;==&lt;br /&gt;&lt;br /&gt;不然就把這一篇改成2011年我們來學Python好了~~&lt;br /&gt;&lt;br /&gt;反正從一起頭這篇就註定是個廢文不如就這樣廢下去好了~~&lt;br /&gt;&lt;br /&gt;所以從現在開始就把這格的主題定調為 "2011大家學python" 好了~~&lt;br /&gt;&lt;br /&gt;(咦 高中棒球社女經理到哪去了? 真是隨便啊! 還有學PYTHON根本就不廢啊!!! ~~ )&lt;br /&gt;&lt;br /&gt;啊啊不管了~~ 事實上啊~~ 嚴肅的看待"學python"這件事本身就是很奇怪的一件事~~&lt;br /&gt;&lt;br /&gt;好像非得拿本書認真的讀完Python語法才叫在學~~ &lt;br /&gt;&lt;br /&gt;這樣一點都不對啊~~ Python不是這樣學的~~ 學Python應該是要很愉快的啊!&lt;br /&gt;&lt;br /&gt;這就好像教完所有文法再開始叫你講英語一樣來學英語~~ &lt;br /&gt;&lt;br /&gt;因為一點用也沒有所以一點也不愉快~~&lt;br /&gt;&lt;br /&gt;你如果要當Python特許教師也許可以這麼學~~ (不過... 有這種職業嗎?...)&lt;br /&gt;&lt;br /&gt;但是正常人不應該是這樣學的~~&lt;br /&gt;&lt;br /&gt;很好~~ 既然你都看我的廢話看到這邊了~~ &lt;br /&gt;&lt;br /&gt;(真是驚人的毅力啊~~ 你完全有成功人士的資質啊!!!)&lt;br /&gt;&lt;br /&gt;看來你就是"2011大家學python"這格廢文的目標讀者群~~ &lt;br /&gt;&lt;br /&gt;我就特別對待你~~ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;教你史上最快學習Python的方法~~ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;絕對保證你聽也沒聽過~~ &lt;br /&gt;&lt;br /&gt;~~ ~~ ~~&lt;br /&gt;&lt;br /&gt;因為我也是隨便講講的!!!&lt;br /&gt;&lt;br /&gt;(什麼,,,不想學了? 我偏偏就想教啦, 就跟你說我這格是老人湊字數的你到現在還聽不懂喔?&lt;br /&gt;你就完成一個孤單寂寞老人的心願這樣也不行喔? 你你你~~~&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;對~~~ 就是你 ~~~&lt;br /&gt;&lt;br /&gt;不管了~~~ 聽我說第一步~~&lt;br /&gt;&lt;br /&gt;聽清楚了喔~~&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;就是先把你手上的什麼XXX Python 然後封面還有動物樣子的書先放下...&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;(疑這個捏他太深奧了嗎? 啊啊啊 等一下會不會接到書商打電話來抗議啊? 反正他們應該早就賣不好了應該沒什麼差吧 點點點)&lt;br /&gt;&lt;br /&gt;別人怎麼教你的我不管~~ 既然你上了我們Python神教的好船~~ &lt;br /&gt;&lt;br /&gt;我們就不會眼睜睜的看你沉入書海~~&lt;br /&gt;&lt;br /&gt;這年頭也不知道吹什麼風 Programmer家裡的書櫃都快變成動物圖鑒了~~&lt;br /&gt;&lt;br /&gt;我們是來學寫程式的不是來當圖書館還是動物園管理員的~~&lt;br /&gt;&lt;br /&gt;好了我廢話真多 (真是極度自覺啊!)&lt;br /&gt;&lt;br /&gt;再來再來&lt;br /&gt;&lt;br /&gt;開始第二個心法~~&lt;br /&gt;&lt;br /&gt;那就是~~&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;span style="font-weight:bold;"&gt;抄&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;疑? ㄟㄟㄟ???&lt;br /&gt;&lt;br /&gt;怎麼可以呢 從小到大我們的尊敬的老師父母兄弟姐妹親朋好友阿公阿媽還有隔壁班的阿花都跟我們說這樣是不行的啊~~~&lt;br /&gt;&lt;br /&gt;俗話說的好~~ 天下文章一大抄~~ &lt;br /&gt;&lt;br /&gt;程式碼~~ 更是要抄~~&lt;br /&gt;&lt;br /&gt;熟讀唐詩三百首~~ 不會作詩也會吟~~&lt;br /&gt;&lt;br /&gt;抄太難聽的話 就改成謄~~ &lt;br /&gt;&lt;br /&gt;就是像打開習字帖, 然後像永字八法般的練法~~&lt;br /&gt;&lt;br /&gt;打開你的編輯器 找個有興趣的程式 把別人的程式碼抓過來 開始改~~&lt;br /&gt;&lt;br /&gt;看不懂的就查 查不到的就想 想不出的就問 問不到的就再認真看認真查認真問~~&lt;br /&gt;&lt;br /&gt;反正你已經閒到在看我的文章 肯定是很閒的 不如就認真點抄...&lt;br /&gt;&lt;br /&gt;光明正大的抄 快樂的寫寫寫~~ &lt;br /&gt;&lt;br /&gt;就把他當作是老師全班只准你一個人openbook的去考試吧! (這真是太爽了 乖小孩不要學)&lt;br /&gt;&lt;br /&gt;~~ &lt;br /&gt;&lt;br /&gt;再來再來就是要登堂入室了~~&lt;br /&gt;&lt;br /&gt;這就不能只是抄了~~ &lt;br /&gt;&lt;br /&gt;基本上你抄久了 大概也已經到了不用參考別人的程式 就可以自己動手從無到有開始寫的境界了~~&lt;br /&gt;&lt;br /&gt;這個時候就可以開始看書看文章,寫自己喜歡的程式~~ &lt;br /&gt;&lt;br /&gt;之後再學些別的東西讀點不相關的東西跟學些其他自己感興趣的程式語言都有所幫助~~&lt;br /&gt;&lt;br /&gt;總之就是個落花流水皆文章的階段~~ &lt;br /&gt;&lt;br /&gt;等到了這個階段開始也就可以開個部落格寫些廢文騙個字數了 (疑??? 幹嘛又自婊???)&lt;br /&gt;&lt;br /&gt;===&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;廢話真的是很多 而且為什麼總共只寫了三步啊!!! 而且第三步分明就是在騙字數啊~~&lt;br /&gt;&lt;br /&gt;什麼因為寫太多廢話連自己都覺得煩了??? 這什麼理由到底負不負責任啊~~&lt;br /&gt;&lt;br /&gt;責任編輯到底是誰啊~~ 這麼廢的文章也敢PO出來喔~~&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;以上是來自某讀者內心的OS,&lt;br /&gt;&lt;br /&gt;可是本格宗旨就是插科打渾的未必就是胡言亂語,&lt;br /&gt;&lt;br /&gt;語重心長的也未必就是真知灼見, &lt;br /&gt;&lt;br /&gt;總而言之就是力求一種精神錯亂的頹廢美學~~&lt;br /&gt;&lt;br /&gt;反正網路流行騎牆派 哪裡鄉民多 哪裡就有真理 &lt;br /&gt;&lt;br /&gt;我們廢話黨是不在乎的~~ (那來的廢話黨你不是Python教的嗎?)&lt;br /&gt;&lt;br /&gt;總之一個人神智錯亂的時候 廢話都很多 尼采不也整天嚷嚷的說什麼超人來了嗎?&lt;br /&gt;&lt;br /&gt;好歹我也沒寫什麼什麼什麼如是說的寫了一大本~~ 頂多只是幻想著高中棒球社女經理會讀一下我的部落格而已~~&lt;br /&gt;&lt;br /&gt;啊 經理 對不起我是個阿宅~~ 我還有二次元complex 沒藥醫的!&lt;br /&gt;&lt;br /&gt;====&lt;br /&gt;&lt;br /&gt;總而言之 2011年我終於有了我的第一格! (真是個明智的收尾)&lt;br /&gt;&lt;br /&gt;而且除了Python很讚這種廢話我還真的吐不出什麼象牙~~&lt;br /&gt;&lt;br /&gt;說到底TIOBE都已經衝到第&lt;strike&gt;六&lt;/strike&gt;五名的這種Python程式語言還有什麼好廣告的?&lt;br /&gt;&lt;br /&gt;http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html&lt;br /&gt;&lt;br /&gt;到現在還不知道Python的優點還只記得Python的缺點分明就是你的問題~~&lt;br /&gt;&lt;br /&gt;你不來用是你賠又不是我賺~~ 我一點都沒有成就感啊~~&lt;br /&gt;&lt;br /&gt;嗯嗯 我再小神晶下去應該有讀者要發飆了 (疑? 真的有讀者啊? 你們辛苦了...)&lt;br /&gt;&lt;br /&gt;再次廣告一下我部落格的右下角有著"本站文章自High居多, 請勿嚴肅看待"的標語&lt;br /&gt;&lt;br /&gt;這不是寫著玩的 因為我純粹是自HIGH自爽~~ &lt;br /&gt;&lt;br /&gt;你們萬一讀了心跳加速~~ 人家我也是不負責的唷(心)....&lt;br /&gt;&lt;br /&gt;===&lt;br /&gt;&lt;br /&gt;嗯嗯~~ 咳咳~~&lt;br /&gt;&lt;br /&gt;感謝各位的收看 咱們2012見... (疑!!!!??? 這個人都懶到有自覺了啊~~ )&lt;br /&gt;&lt;br /&gt;啊對了&lt;br /&gt;&lt;br /&gt;如果你真的是高中棒球社女經理 其實我們聊些別的也可以~~ (傻笑~~ 被打飛~~)&lt;br /&gt;&lt;br /&gt;===&lt;br /&gt;&lt;br /&gt;(完)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-9053466507433005132?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/9053466507433005132/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=9053466507433005132' title='5 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/9053466507433005132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/9053466507433005132'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2011/01/blog-post.html' title='如果高中棒球社女經理讀過使徒提姆的部落格~~'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-2889971721083905959</id><published>2010-02-02T19:43:00.004+08:00</published><updated>2010-02-02T23:14:48.504+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='py3k'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[tips] python2與python 3的list comprehensions之差異</title><content type='html'>剛好看到這篇&lt;br /&gt;&lt;a href="http://yz.mit.edu/wp/2010/01/14/bitten-by-python-scoping/"&gt;http://yz.mit.edu/wp/2010/01/14/bitten-by-python-scoping/&lt;/a&gt;&lt;br /&gt;想起之前也有遇到類似的問題~&lt;br /&gt;&lt;br /&gt;其實主要就是python2的list comprehensions有個副作用, &lt;br /&gt;就是會重設scope內的變數, 比如以下這個程式&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;def t1(): &lt;br /&gt;    x=5&lt;br /&gt;    [0 for x in [1,2,3]]&lt;br /&gt;    print x&lt;br /&gt;&lt;br /&gt;t1() &lt;br /&gt;&lt;br /&gt;3&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;這邊的x會被重設為3, 有點像是殘餘的loop變數的感覺~&lt;br /&gt;有些人會玩弄這個副作用來達到一些不想讓人看懂的lambda技巧就是了:P&lt;br /&gt;&lt;br /&gt;但相對來說後來引進的generator語法就沒有這個問題, 所以這個問題其實也可以使用list(x for x in [1,2,3])這個方法來解決. &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;def ts2():&lt;br /&gt;    x=5&lt;br /&gt;    list(x for x in [1,2,3])&lt;br /&gt;    print x&lt;br /&gt;&lt;br /&gt;ts2()&lt;br /&gt;&lt;br /&gt;5&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;另外也可以置換變數比如改成使用a來取代x(當然a是會被assigned).&lt;br /&gt;&lt;br /&gt;當然還有另外一個方法則是使用python 3, 就完全沒有這個問題了 :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-2889971721083905959?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/2889971721083905959/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=2889971721083905959' title='5 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2889971721083905959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2889971721083905959'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2010/02/tips-python2python-3list-comprehensions.html' title='[tips] python2與python 3的list comprehensions之差異'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-160254270197960727</id><published>2010-01-27T16:12:00.004+08:00</published><updated>2010-01-27T16:57:09.032+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>Upcoming Django 1.2 &amp; PostgreSQL 9.0</title><content type='html'>&lt;a href="http://docs.djangoproject.com/en/dev/topics/db/multi-db/#topics-db-multi-db"&gt;http://docs.djangoproject.com/en/dev/topics/db/multi-db/#topics-db-multi-db&lt;/a&gt;&lt;br /&gt;Django 1.2 新功能: Multiple databases&lt;br /&gt;&lt;br /&gt;PostgreSQL 9.0 新功能 Hot Standby跟Streaming Replication&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.postgresql.org/wiki/Streaming_Replication"&gt;http://wiki.postgresql.org/wiki/Streaming_Replication&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developer.postgresql.org/pgdocs/postgres/hot-standby.html"&gt;http://developer.postgresql.org/pgdocs/postgres/hot-standby.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;還沒空試, 不過結合這幾個新功能的話似乎可以有效的分散django資料庫端的read/write, 將write-only database server上的WAL(write-ahead log) 即時streaming到read-only database server上的hot standby database, 感覺好像不錯~~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-160254270197960727?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/160254270197960727/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=160254270197960727' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/160254270197960727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/160254270197960727'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2010/01/upcoming-django-12-postgresql-90.html' title='Upcoming Django 1.2 &amp; PostgreSQL 9.0'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4821215971489878118</id><published>2009-12-29T15:55:00.004+08:00</published><updated>2009-12-29T17:21:21.474+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='g5mouse'/><category scheme='http://www.blogger.com/atom/ns#' term='g3'/><category scheme='http://www.blogger.com/atom/ns#' term='g9'/><category scheme='http://www.blogger.com/atom/ns#' term='logitech'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='g7'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='g5'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><title type='text'>[tips] 續: 設定 Logitech G5 in Linux 補強版</title><content type='html'>話說兩年前買了一支羅技的G5滑鼠 &lt;br /&gt;在工作的linux環境上用到目前仍然非常滿意 &lt;br /&gt;之所以會說很滿意 是因為G5其實有一個很好按的大姆指鍵&lt;br /&gt;大家都知道xwindow裡只要選取了文字&lt;br /&gt;就會自動"複製"選到的文字 &lt;br /&gt;然後按下中鍵就可以"貼上"&lt;br /&gt;但是目前的滑鼠都有滾輪的設計,&lt;br /&gt;所以這個複製貼上的功能變成了按下滾輪&lt;br /&gt;在linux裡我就用xmodmap這個程式&lt;br /&gt;將這個大姆指鍵取代xwindow中鍵貼上的功能, &lt;br /&gt;因為按下滾輪其實我覺得要用力按,&lt;br /&gt;而複製貼上其實是還滿常用的功能 &lt;br /&gt;其實感覺還挺傷手的&lt;br /&gt;另外我也用xbindkey將滾輪向左向右的功能做來切換視窗&lt;br /&gt;而滾輪按下變成剪貼簿裡的貼上, &lt;br /&gt;(即Ctrl+V, 跟xwindow的複製貼上不同)&lt;br /&gt;設定的詳情可以看我2年前的文章&lt;br /&gt;&lt;a href="ttp://timchen119.blogspot.com/2007/12/logitech-g5-in-linuxxwindow.html"&gt;http://timchen119.blogspot.com/2007/12/logitech-g5-in-linuxxwindow.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;前幾天升級系統的時候不小心把滑鼠滾輪向左向右切換視窗的功能給砍了~ 因為兩年沒設定 連自己都得再找一下原本的設定方法&lt;br /&gt;就在找方法的同時&lt;br /&gt;剛好看到一個lomoco的hack可以將g5的硬體dpi按鈕關掉, &lt;br /&gt;改用軟體控制&lt;br /&gt;但是lomoco這個加強羅技滑鼠在linux上支援的程式本身並沒有支援G5, 於是就順手弄了一支python程式g5mouse.py, &lt;br /&gt;可以改用軟體操縱DPI的設定,&lt;br /&gt;這樣我們在G5上還可以多出了兩個按鍵可以自行設定!&lt;br /&gt;&lt;br /&gt;廢話不多說,&lt;br /&gt;首先先easy_install g5mouse&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;localhost tim # easy_install g5mouse&lt;br /&gt;Searching for g5mouse&lt;br /&gt;Reading http://pypi.python.org/simple/g5mouse/&lt;br /&gt;Reading http://code.google.com/p/g5mouse/&lt;br /&gt;Best match: g5mouse 0.1&lt;br /&gt;Downloading http://pypi.python.org/packages/source/g/g5mouse/g5mouse-0.1.tar.gz#md5=d3347dbf261135049cb6e5a6be133355&lt;br /&gt;Processing g5mouse-0.1.tar.gz&lt;br /&gt;Running g5mouse-0.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-oHyJGh/g5mouse-0.1/egg-dist-tmp-6Vn5h_&lt;br /&gt;warning: install_lib: 'build/lib' does not exist -- no Python modules to install&lt;br /&gt;zip_safe flag not set; analyzing archive contents...&lt;br /&gt;Adding g5mouse 0.1 to easy-install.pth file&lt;br /&gt;Installing g5mouse.py script to /usr/bin&lt;br /&gt;&lt;br /&gt;Installed /usr/lib/python2.6/site-packages/g5mouse-0.1-py2.6.egg&lt;br /&gt;Processing dependencies for g5mouse&lt;br /&gt;Finished processing dependencies for g5mouse&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;localhost tim # g5mouse.py  &lt;br /&gt;Usage: g5mouse.py [options] /dev/usb/hiddev0&lt;br /&gt;&lt;br /&gt;g5mouse.py control logitech G3,G5,G7 and G9's hardware dpi buttons on linux&lt;br /&gt;&lt;br /&gt;Example: g5mouse.py -d 1600 -l 1 /dev/usb/hiddev0&lt;br /&gt;&lt;br /&gt;Author: timchen119.at.gmail.com&lt;br /&gt;&lt;br /&gt;Options:&lt;br /&gt;  -h, --help          show this help message and exit&lt;br /&gt;  -d DPI, --dpi=DPI   set dpi: 400,800,1600,2000&lt;br /&gt;  -l LED, --led=LED   set led: NONE,1,2,3,ALL&lt;br /&gt;  -n, --nodpibuttons  disable + and - DPI speed buttons&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;然後就可以透過g5mouse.py這隻程式軟體設定DPI, &lt;br /&gt;(可以切換到400,800,1600,2000四種DPI 比原先的還多一種 &lt;br /&gt;而且也可以自行設定LED燈號)&lt;br /&gt;比如&lt;br /&gt;&lt;br /&gt;你要切到DPI 2000並將所有指示DPI的LED設成第一個&lt;br /&gt;就可以下&lt;br /&gt;g5mouse.py -d 2000 -l 1 &lt;br /&gt;&lt;br /&gt;預設是DPI 1600跟LED全關掉 預設device是/dev/usb/hiddev0&lt;br /&gt;所以你也可以只下g5mouse.py -d 800 就可以將LED全關掉 並將DPI設到800&lt;br /&gt;如果加上-n這個選項 還可以把硬體控制DPI button的功能關掉&lt;br /&gt;這樣我們就會多出兩個button可以自行設定&lt;br /&gt;將這個程式放在你的.xprofile (XDM)或是.xinitrc/rc.local裡&lt;br /&gt;讓他開機自動執行&lt;br /&gt;再來我們就多出了兩個按鈕可以操控囉~&lt;br /&gt;&lt;br /&gt;我就用xbindkeys將+號設定成Ctrl+C 而-號設成Ctrl+V &lt;br /&gt;並把原先的滾輪按下的功能給取消以免誤按~&lt;br /&gt;&lt;br /&gt;我目前的.xbindkeysrc.scm&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;(xbindkey '(&amp;quot;b:6&amp;quot;) &amp;quot;/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Up]'&amp;quot;)&lt;br /&gt;(xbindkey '(&amp;quot;b:7&amp;quot;) &amp;quot;/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Down]'&amp;quot;)&lt;br /&gt;(xbindkey '(&amp;quot;b:9&amp;quot;) &amp;quot;/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[V]'&amp;quot;)&lt;br /&gt;(xbindkey '(&amp;quot;b:10&amp;quot;) &amp;quot;/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[C]'&amp;quot;)&lt;br /&gt;(xbindkey '(&amp;quot;b:11&amp;quot;) &amp;quot;/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Up]'&amp;quot;)&lt;br /&gt;(xbindkey '(&amp;quot;b:12&amp;quot;) &amp;quot;/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Down]'&amp;quot;)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;另外這隻程式不止支援G5, G3/G5二代/G7/G9 都可以操縱~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4821215971489878118?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4821215971489878118/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4821215971489878118' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4821215971489878118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4821215971489878118'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/12/tips-logitech-g5-in-linux.html' title='[tips] 續: 設定 Logitech G5 in Linux 補強版'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4539651731976264166</id><published>2009-09-29T14:17:00.001+08:00</published><updated>2009-09-29T14:17:16.517+08:00</updated><title type='text'>Google 推出網頁註解新功能~~</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;但我覺得這根本就是網頁推文~~ Orz&lt;/p&gt;參考來源： &lt;p&gt;&lt;blockquote&gt;"Google 網頁註解"&lt;br/&gt;- &lt;a href='http://www.google.com/sidewiki/intl/zh-TW/done.html'&gt;Google 網頁註解&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/116098254871524020242/id/GdAgMDns8e_vGz9mAYQZNBiut8c'&gt;在「Google 網頁註解」中檢視&lt;/a&gt;)&lt;/blockquote&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4539651731976264166?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4539651731976264166/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4539651731976264166' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4539651731976264166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4539651731976264166'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/09/google.html' title='Google 推出網頁註解新功能~~'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-3616930518479268811</id><published>2009-08-31T16:15:00.002+08:00</published><updated>2009-08-31T16:19:15.028+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>[tips] get your IP address</title><content type='html'>wget -qO- http://ipwhats.appspot.com/&lt;br /&gt;&lt;br /&gt;or just point your browser to &lt;a href="http://ipwhats.appspot.com/"&gt;http://ipwhats.appspot.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-3616930518479268811?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/3616930518479268811/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=3616930518479268811' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3616930518479268811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3616930518479268811'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/08/tips-get-your-ip-address.html' title='[tips] get your IP address'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7783685632351044191</id><published>2009-08-17T15:03:00.004+08:00</published><updated>2009-08-17T15:21:28.680+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='sphinx'/><title type='text'>[tips] sphinx支持中文pdf的方法</title><content type='html'>目前 python 官方文件使用的sphinx是個不錯的文件產生系統,&lt;br /&gt;&lt;br /&gt;可以同時由rst產生html,latex,pdf,ps等文件格式,&lt;br /&gt;&lt;br /&gt;不過我目前試的結果似乎預設從latex產生pdf時沒有支援中文,&lt;br /&gt;&lt;br /&gt;網路上相關的文件大都寫得很複雜, &lt;br /&gt;&lt;br /&gt;但其實只要在文件project裡的source/conf.py加入&lt;br /&gt;&lt;br /&gt;latex_preamble = '''\usepackage{CJKutf8}\n\AtBeginDocument{\\begin{CJK}{UTF8}{bsmi}}\n\AtEndDocument{\end{CJK}}'''&lt;br /&gt;&lt;br /&gt;其他都不需更改,&lt;br /&gt;以後make latex; cd build/latex; make all-pdf 就都可以產生出正確的&lt;br /&gt;中文pdf檔了&lt;br /&gt;&lt;br /&gt;測試環境是Gentoo linux底下的texlive 2008 (cjk) + pdflatex&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7783685632351044191?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7783685632351044191/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7783685632351044191' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7783685632351044191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7783685632351044191'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/08/tips-sphinxpdf.html' title='[tips] sphinx支持中文pdf的方法'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-8047150957708573616</id><published>2009-08-13T18:57:00.006+08:00</published><updated>2009-08-13T19:14:36.159+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Emacs'/><title type='text'>[tips] linux裡 emacs23 utf8 中文輸入與SCIM</title><content type='html'>最近新昇到emacs 23.1 &lt;br /&gt;&lt;br /&gt;又發現SCIM中文輸入有問題, ctrl+space老是變回mark.&lt;br /&gt;&lt;br /&gt;我的locale是zh_TW.UTF-8 &lt;br /&gt;&lt;br /&gt;其他程式輸入中文都沒啥問題&lt;br /&gt;&lt;br /&gt;就emacs23.1無法輸入中文, &lt;br /&gt;&lt;br /&gt;試了老半天 (暫時)解決方法如下:&lt;br /&gt;&lt;br /&gt;啟動emacs時用 LC_CTYPE="zh_CN" emacs-23&lt;br /&gt;&lt;br /&gt;.emacs 加上這行&lt;br /&gt;&lt;br /&gt;(prefer-coding-system 'utf-8)&lt;br /&gt;&lt;br /&gt;這樣就沒問題了&lt;br /&gt;&lt;br /&gt;至於為什麼要如此我也不能理解 &lt;br /&gt;&lt;br /&gt;如果有高人肯告訴我那就再好不過了, &lt;br /&gt;&lt;br /&gt;不過我暫時懶得去追了, 設個alias也就算了.&lt;br /&gt;&lt;br /&gt;總之locale裡似乎只有zh_CN跟zh_CN.gbk會動.&lt;br /&gt;&lt;br /&gt;btw,我的環境是gentoo linux.&lt;br /&gt;&lt;br /&gt;註: 這個問題 基本上只在terminal上使用emacs -nw的使用者應該不會遇到.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-8047150957708573616?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/8047150957708573616/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=8047150957708573616' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8047150957708573616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8047150957708573616'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/08/tips-linux-emacs23-utf8-scim.html' title='[tips] linux裡 emacs23 utf8 中文輸入與SCIM'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-9070251518499338727</id><published>2009-07-29T00:28:00.004+08:00</published><updated>2009-07-29T00:42:12.788+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[talk] 高雄世運結束了~~</title><content type='html'>上個禮拜起一直跑來跑去, &lt;br /&gt;從世運主場館, 高雄巨蛋, 高雄縣立體育場甚至連義守大學都去了, &lt;br /&gt;為了就是去看現場的世運比賽, &lt;br /&gt;雖然說世運大部份都不是熱門的運動, 但是卻意外的非常好看,&lt;br /&gt;特別是飛盤這項運動, 現場看起來真是特別有趣,&lt;br /&gt;從後場可以直接丟到前場, 從右路可以像香蕉球一樣轉彎到左路, &lt;br /&gt;這是看電視完全沒辦法欣賞到的~ 這門票實在花的很值得~~&lt;br /&gt;&lt;br /&gt;這次唯一的遺憾就是我雖然買了開幕門票, 卻被國家抓去教育召集, &lt;br /&gt;沒辦法看海莉現場了~~ 不過感謝至少MOD還有網路有一大堆影片可看&lt;br /&gt;&lt;br /&gt;順道附上我滿喜歡的海莉的歌 Wuthering Heights: &lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/pkTF5DRBxpI&amp;hl=zh_TW&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/pkTF5DRBxpI&amp;hl=zh_TW&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Kate Bush的原唱&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Hv0azq9GF_g&amp;hl=zh_TW&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Hv0azq9GF_g&amp;hl=zh_TW&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-9070251518499338727?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/9070251518499338727/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=9070251518499338727' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/9070251518499338727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/9070251518499338727'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/07/talk.html' title='[talk] 高雄世運結束了~~'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-302545690877799013</id><published>2009-07-06T14:05:00.003+08:00</published><updated>2009-07-06T14:20:51.857+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><title type='text'>HTML 5  tag for firefox 3.5</title><content type='html'>firefox 3.5日前已經release了 &lt;br /&gt;最重要的一個新功能我認為是原生支援了HTML 5的Video tag,&lt;br /&gt;也就是未來的瀏覽器不再需要flash就可以直接播放ogg Theora/Vorbis編碼的影片。&lt;br /&gt;&lt;br /&gt;測試的方法: &lt;br /&gt;&lt;br /&gt;1. 首先先用youtube-dl這隻程式隨便抓一個youtube的flv檔案下來&lt;br /&gt;http://bitbucket.org/rg3/youtube-dl/&lt;br /&gt;&lt;br /&gt;2. 透過ffmpeg2theora將flv轉成ogg&lt;br /&gt;http://www.v2v.cc/~j/ffmpeg2theora/index.html&lt;br /&gt;&lt;br /&gt;3. 寫一個html檔&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;html5 video test!&lt;br /&gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;&amp;lt;video controls source src=&amp;quot;sample2.ogg&amp;quot; type=&amp;quot;video/ogg;codecs=theora,vorbis&amp;quot; autoplay &amp;gt;&lt;br /&gt;your browser does not support the video tag&lt;br /&gt;    &lt;br /&gt;&amp;lt;/video&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;網路上也有其他人做了一些fallback to flash/java applet player的方法, 例如這個 &lt;a href="http://www.dailymotion.com/openvideodemo"&gt;http://www.dailymotion.com/openvideodemo&lt;/a&gt; 還有一隻 firefox的plugin firefogg &lt;a href="http://firefogg.org/"&gt;http://firefogg.org/&lt;/a&gt; 可以直接在firefox將影片即時編碼+mux成Theora/Vorbis ogg格式後再上傳。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-302545690877799013?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/302545690877799013/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=302545690877799013' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/302545690877799013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/302545690877799013'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/07/html-5-tag-for-firefox-35.html' title='HTML 5 &lt;video &gt; tag for firefox 3.5'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-2509129159677456776</id><published>2009-07-02T23:39:00.009+08:00</published><updated>2009-07-03T01:02:51.574+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><category scheme='http://www.blogger.com/atom/ns#' term='penguin'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>想要變成艾托畢利卡的企鵝? 誤會大了~~</title><content type='html'>話說最近在迷GONZO的 咲-Saki- (台譯: 天才麻將少女)&lt;br /&gt;&lt;br /&gt;女主角中的原村和在高中麻將大賽中帶著一隻企鵝抱枕打麻將, &lt;br /&gt;&lt;br /&gt;沉醉於麻將中臉色微紅的樣子真是萌啊~~&lt;br /&gt;&lt;br /&gt;企鵝其實不是第一次出現在秋葉原系動畫中了, &lt;br /&gt;&lt;br /&gt;在動畫IdolM@ster中,&lt;br /&gt;&lt;br /&gt;女主角天海春香的房間就貼有最喜歡的Gentoo Penguin (ジェンツーペンギン) 的海報~~&lt;br /&gt;&lt;br /&gt;春香的電腦桌布跟手機也都是企鵝~~&lt;br /&gt;&lt;br /&gt;不過&lt;a href="http://zh.wikipedia.org/wiki/%E5%B7%B4%E5%B8%83%E4%BA%9E%E4%BC%81%E9%B5%9D"&gt;Gentoo Penguin (巴布亞企鵝)&lt;/a&gt; 因為名稱跟我使用的Linux Distribution同名 所以很清楚這企鵝的樣子&lt;br /&gt;&lt;br /&gt;但是, 從第一次看到就很好奇~~ 咲-Saki-的原村和抱著的這隻エトペン (艾托企鵝) 到底是什麼 ?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_VE6oUeg-MFI/Skzgc_f6HuI/AAAAAAAAAmw/sshg1QUnpyo/s1600-h/penguin.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 339px; height: 192px;" src="http://4.bp.blogspot.com/_VE6oUeg-MFI/Skzgc_f6HuI/AAAAAAAAAmw/sshg1QUnpyo/s400/penguin.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5353900845722902242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;在東立出版的天才麻將少女漫畫中,&lt;br /&gt;&lt;br /&gt;原村和睡醒時對當時正在說夢話的Saki說&lt;br /&gt;&lt;br /&gt;艾托企鵝是這本"想要變成艾托畢利卡的企鵝" (エトピリカになりたかったペンギン)繪本的主角&lt;br /&gt;&lt;br /&gt;但是, 疑問又來了 艾托畢利卡又是什麼??? 聽起來像是某個偉人或是繪本中其他角色的名字&lt;br /&gt;&lt;br /&gt;企鵝有什麼不好~~ 為什麼好端端的企鵝不當~~ 要去當什麼艾托畢利卡呢???&lt;br /&gt;&lt;br /&gt;經不起好奇心的引誘~~ 不禁google了起來~~&lt;br /&gt;&lt;br /&gt;"エトピリカになりたかったペンギン"&lt;br /&gt;&lt;br /&gt;這個時候就發現懂一點日文真不錯~ 透過google跟日文維基 查到了&lt;br /&gt;&lt;br /&gt;艾托畢利卡 --&gt; エトピリカ --&gt; 花魁鳥 (&lt;a href="http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%88%E3%83%94%E3%83%AA%E3%82%AB"&gt;エトピリカ&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/TuftedPuffin.jpeg/394px-TuftedPuffin.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 394px; height: 599px;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/TuftedPuffin.jpeg/394px-TuftedPuffin.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;恍然大悟!&lt;br /&gt;&lt;br /&gt;原來是想要變成花魁鳥的企鵝啊~~~&lt;br /&gt;&lt;br /&gt;什麼想要變成艾托畢利卡的企鵝? 誤會大了~~ XDXD&lt;br /&gt;&lt;br /&gt;註: エトピリカになりたかったペンギン繪本是漫畫虛構杜撰的~~ 現實世界中並沒有這部作品~~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-2509129159677456776?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/2509129159677456776/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=2509129159677456776' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2509129159677456776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2509129159677456776'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/07/blog-post.html' title='想要變成艾托畢利卡的企鵝? 誤會大了~~'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_VE6oUeg-MFI/Skzgc_f6HuI/AAAAAAAAAmw/sshg1QUnpyo/s72-c/penguin.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-9039585879418864740</id><published>2009-05-22T17:53:00.008+08:00</published><updated>2009-05-22T19:54:00.052+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='x.org'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='benq'/><title type='text'>[tips] benq FP222WH + nvidia 達到原生解析度1680x1050的方法</title><content type='html'>最近辦公室的電腦換了一張nvidia 9400的顯示卡,&lt;br /&gt;可是搭配上benq FP222WH , &lt;br /&gt;解析度怎麼調最大都只有640x480, (各種方法都試過了)&lt;br /&gt;後來總算讓我查出是EDID的問題,&lt;br /&gt;原本舊版的nvidia driver有一招是在xorg.conf設定&lt;br /&gt;"IgnoreEDID" "true",&lt;br /&gt;不過我新版的180.51 driver根本不適用這個方法,&lt;br /&gt;後來我研究了快一天,&lt;br /&gt;不過最後研究出來的解決方法倒是很簡單,&lt;br /&gt;放在這提供有需要的人參考,&lt;br /&gt;首先我先去抄ATI顯卡列出的EDID, &lt;br /&gt;然後將它做成一個128 byte 的EDID&lt;br /&gt;HEX file, 我已經做好了所以直接抓這個檔案擺在/etc/x11就可以&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kalug.linux.org.tw/~tim/benq/benq-c.bin"&gt;http://kalug.linux.org.tw/~tim/benq/benq-c.bin&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;然後在你的xorg.conf裡加上幾行,&lt;br /&gt;(請自行比對xorg.conf的相異處)&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;&lt;br /&gt;    Identifier     "Monitor0"&lt;br /&gt;    VendorName     "Monitor Vendor"&lt;br /&gt;    ModelName      "Monitor Model"&lt;br /&gt;    HorizSync       30.0 - 86.0&lt;br /&gt;    VertRefresh     60.0&lt;br /&gt;&lt;br /&gt;   # 1680x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 147.14 MHz&lt;br /&gt;  Modeline "1680x1050_60.00"  147.14  1680 1784 1968 2256  1050 1051 1054 1087  -HSync +Vsync&lt;br /&gt;&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;    Identifier     "Screen0"&lt;br /&gt;    Device         "Card0"&lt;br /&gt;    Monitor        "Monitor0"&lt;br /&gt;    &lt;br /&gt;    Option "ConnectedMonitor" "DFP"&lt;br /&gt;    Option "CustomEDID" "DFP-0:/etc/X11/benq-c.bin"&lt;br /&gt;    Option "UseDisplayDevice" "DFP" # DVI out&lt;br /&gt;&lt;br /&gt;    SubSection     "Display"&lt;br /&gt;        Viewport    0 0&lt;br /&gt;    EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;我的是DVI接頭, &lt;br /&gt;另外一個同事用的是DSUB(VGA) 的,&lt;br /&gt;他說只要DFP改成CRT也可以用, &lt;br /&gt;我們一個是用debian一個是用gentoo, &lt;br /&gt;在預設情形下解析度都是錯誤的, &lt;br /&gt;但是透過這個方法就可以達到原生解析度1680x1050. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-9039585879418864740?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/9039585879418864740/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=9039585879418864740' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/9039585879418864740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/9039585879418864740'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/05/tips-benq-fp222wh-nvidia-1680x1050.html' title='[tips] benq FP222WH + nvidia 達到原生解析度1680x1050的方法'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4637559210275928248</id><published>2009-05-04T06:30:00.005+08:00</published><updated>2009-05-04T07:03:49.375+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><title type='text'>[rant] igoogle gmail gadget: The Gmail gadget does not support the "Always use https"</title><content type='html'>最近我經常使用的igoogle gmail gadget突然出現:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;The Gmail gadget does not support the "Always use https" setting that you chose in full Gmail. If you would like to use https, please open full Gmail. Learn more&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;問題是我一直以來Always https都是用得好好的啊，怎麼突然就出問題了，&lt;br /&gt;我點下Learn more之後出現了標準的廢話連篇又毫無用處的典型答非所問的問答集:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt; &lt;span style="font-style:italic;"&gt;Google 說明  › Gmail 說明  › 您的帳戶  › 隱私權與安全性  › 啟用 HTTPS 設定  &lt;br /&gt;啟用 HTTPS 設定&lt;br /&gt;-「Gmail 通知器」使用者必須下載相關修補程式，才能使用這個設定。 瞭解更多資訊&lt;br /&gt;- 啟用此設定可能會使 Gmail 行動版應用程式發生錯誤。 瞭解更多資訊&lt;br /&gt;&lt;br /&gt;透過不安全的網際網路連線 (例如公用無線網路或未加密的網路) 登入 Gmail 時，可能會讓人可輕易盜用您的 Google 帳戶。在不安全的網路中，他人很容易偽裝成您，並取得您「Google 帳戶」的完整存取權，藉以存取您帳戶中的機密資料，例如銀行帳戶資料或線上登入憑證。您使用有安全疑慮的網路時，建議您在 Gmail 中選取 [永遠使用 https] 選項。 HTTPS (亦稱「超文字安全傳輸通訊協定」) 安全通訊協定會將通訊內容加以驗證及加密。&lt;br /&gt;&lt;br /&gt;在 Gmail 中啟用這個功能：&lt;br /&gt;&lt;br /&gt;   1. 登入 Gmail。&lt;br /&gt;   2. 按一下任何 Gmail 頁面頂端的 [設定]。&lt;br /&gt;   3. 將 [瀏覽器連線] 設定為 [永遠使用 https]。&lt;br /&gt;   4. 按一下 [儲存變更]。&lt;br /&gt;   5. 重新載入 Gmail。&lt;br /&gt;&lt;br /&gt;請注意，選取 [永遠使用 https] 後，您將無法透過 HTTP (超文字傳輸通訊協定) 存取 Gmail， 且 Gmail 的運作速度可能會變慢。 如果您使用的網路安全無虞，可以隨時關閉這個功能。&lt;br /&gt;&lt;br /&gt;如果您使用公用電腦查看電子郵件，請務必在要關閉 Gmail 時，按一下任何 Gmail 頁面頂端的 [登出]，並關閉所有 Gmail 瀏覽器視窗。 &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;廢話，騙小孩唷，算了 自己搜尋一下看看是甚麼情形，看了一堆抱怨串之後找到始作俑者:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/support/forum/p/Web+Search/thread?tid=41f74befcd5f3d28&amp;hl=en&amp;fid=41f74befcd5f3d28000468c96d31ef91"&gt;http://www.google.com/support/forum/p/Web+Search/thread?tid=41f74befcd5f3d28&amp;hl=en&amp;fid=41f74befcd5f3d28000468c96d31ef91&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Paul&lt;br /&gt;Google Employee&lt;br /&gt;&lt;br /&gt;Hi everyone,&lt;br /&gt;&lt;br /&gt;As several of you have noticed, we made a change in iGoogle to the way that iGoogle's Gmail gadget works. If you previously set Gmail to only access your mail using https by selecting "Always use https" in Gmail's settings, you will now see a message in iGoogle's Gmail gadget asking you to open the full version of Gmail. We made this change in iGoogle for those users who want to ensure that their Gmail is transmitted using https.&lt;br /&gt;&lt;br /&gt;We know that many of you would like to access your mail from iGoogle with https, and we're investigating ways to provide https support for iGoogle's Gmail gadget. In the meantime, you have a couple of choices:&lt;br /&gt;&lt;br /&gt;- If you'd prefer to access your mail with https, please visit Gmail directly at https://mail.google.com/mail.&lt;br /&gt;- If you'd rather get your Gmail on iGoogle with the Gmail gadget, visit Gmail's Settings page and select "Don't always use https."&lt;br /&gt;&lt;br /&gt;We apologize for any inconvenience this may have caused.&lt;br /&gt;&lt;br /&gt;只是覺得很奇怪，他不會功能做好再來給我改嗎? &lt;br /&gt;原本的code跑得好好的&lt;br /&gt;現在突然爛了又講一堆廢話，還要自己搜尋才找的到，Orz！&lt;br /&gt;&lt;br /&gt;===&lt;br /&gt;&lt;br /&gt;這真是一個可以拿去給RMS當反面宣傳的例子，&lt;br /&gt;為啥我們應該要拒絕使用close source的web application...　&lt;br /&gt;就算是把"Don't be evil"掛在嘴邊的google也一樣...&lt;br /&gt;&lt;br /&gt;-- 因為一個用了一兩年的功能還是可以突然停掉並且都不用事先公告的。&lt;br /&gt;&lt;br /&gt;ref 來自gmail gadget八百五十萬使用者的抱怨串:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/support/forum/p/gmail/thread?tid=41eb24edefcd7a41&amp;hl=en"&gt;http://www.google.com/support/forum/p/gmail/thread?tid=41eb24edefcd7a41&amp;hl=en&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.google.com/support/forum/p/Web+Search/thread?tid=41f74befcd5f3d28&amp;hl=en"&gt;http://www.google.com/support/forum/p/Web+Search/thread?tid=41f74befcd5f3d28&amp;hl=en&lt;/a&gt;&lt;br /&gt;&lt;a href="http://groups.google.com.tw/group/Google-Desktop_Something-Broken/browse_thread/thread/71dd8b27ccacc0ba"&gt;http://groups.google.com.tw/group/Google-Desktop_Something-Broken/browse_thread/thread/71dd8b27ccacc0ba&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4637559210275928248?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4637559210275928248/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4637559210275928248' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4637559210275928248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4637559210275928248'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/05/rant-igoogle-gmail-gadget-gmail-gadget.html' title='[rant] igoogle gmail gadget: The Gmail gadget does not support the &quot;Always use https&quot;'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7314346795152621404</id><published>2009-05-04T05:37:00.003+08:00</published><updated>2009-05-04T06:04:42.444+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='curl'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='note'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='patch'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><category scheme='http://www.blogger.com/atom/ns#' term='C_lang'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[Note] 送patch所學到的事</title><content type='html'>這個Note是一個寫patch的經驗，前陣子寫了一個讓curl即時壓縮加密FTP/HTTP/SFTP上傳時可以續傳的一個patch，patch本身倒是沒什麼特別的，反而是在送patch跟原作者的討論過程中學到了一些東西。patch歷時約一個月才commit進cvs，不過我覺得以open source的專案來說，這樣算挺快的。&lt;br /&gt;&lt;br /&gt;似乎還是得把前因後果交代一下，&lt;br /&gt;其實一開始是我有一個想法，&lt;br /&gt;就是希望我上傳到遠端伺服器的檔案都能加密起來(順便壓縮更好)，&lt;br /&gt;但是我覺得在local這邊先壓縮過然後再上傳的話，就會佔Local的硬碟兩份空間，所以最好的方法是realtime壓縮加密之後上傳。這樣就不會佔用local的硬碟空間，而以目前的CPU也應該都可以做到即時傳輸。&lt;br /&gt;此外我希望就是能夠彈性的選擇壓縮及加密方式，不論是bz2,gzip,pkzip或是pgp及AES都要能夠自行選擇及combine。&lt;br /&gt;而且最好是不需另外的伺服器程式，以目前hosting都會提供的FTP帳號就能做的方法是最好。(我需要的不是像SFTP或FTP/TLS這樣傳輸時加密或壓縮而已，我想要的是在伺服器上的最終結果也是加密及壓縮過的)&lt;br /&gt;&lt;br /&gt;跟lloyd討論之後，他是認為lftp+namepipe的方式可行。&lt;br /&gt;另外我也找到了用pipe透過curl上傳的方法。&lt;br /&gt;而這兩個方法也都驗證過確實可行，不過這兩個方法都同樣有個問題，就是沒辦法續傳，而這我認為是個應該要解決的問題。&lt;br /&gt;&lt;br /&gt;比較了兩個解決方案後，我選擇了擁有我比較喜歡的BSD license，用法也比較彈性的curl下手修改，&lt;br /&gt;curl的續傳問題大概長這樣：&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;gzip /mnt/2311/debian-500-i386-CD-1.iso -c &amp;#124; curl -T - -C -&lt;br /&gt;ftp://myname:mypass@192.168.23.11/debian-500-i386-CD-1.iso.gz&lt;br /&gt;** Resuming transfer from byte position 46792704&lt;br /&gt;% Total % Received % Xferd Average Speed Time Time Time&lt;br /&gt;% Current&lt;br /&gt;Dload Upload Total Spent Left&lt;br /&gt;Speed&lt;br /&gt;0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:--&lt;br /&gt;0&lt;br /&gt;curl: (31) Could not seek stream&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;最主要是stdin不能直接SEEK_SET，這其實不是什麼大問題，不能SEEK_SET就SEQUENCIAL READ並bypass即可，看了一下原始程式便發現其實這段code早已大部完成了，只要略為更動即可，&lt;br /&gt;於是略為修改了一下curl FTP/SFTP/HTTP上傳部份的code，驗證之後便將patch送出。&lt;br /&gt;原以為送出patch之後就結束了，因為作者要收不收這也不是我能控制的，不過後來curl的作者回信說，功能是沒有問題，但原本的patch會影響到ABI與目前文件的相容性，問看看我是否能提供不修改ABI的作法，我原本還無法理會作者的意思，後來繼續討論才慢慢了解，作者的意思是看能否提供完整的ABI及定義回傳值供其他使用curl library部份的程式參考，因為curl不僅僅是一個客戶端程式curl，同時也包含一套廣泛的運用在其他程式甚至內建在程式語言中的library，libcurl。即使是改動小小的部份，也有可能不經意的影響到其他重要的程式。&lt;br /&gt;了解了作者的目的之後，於是我又寫一個新的patch配合這個架構，測試一下續傳上傳沒問題之後就又再次的送出，這次作者將我的多個patch檔結合後又修改了一下包括說明文件的patch就直接commit到cvs上，不過問題來了，做make test的測試到HTTP PUT該項時沒過。&lt;br /&gt;仔細的研究一下，還真的是第二次更動的code造成了問題。第三次的修改並驗證之後，這次就很快的patch就被接受了，目前已經commit在curl的cvs上。&lt;br /&gt;&lt;br /&gt;這次寫patch得到一些經驗:&lt;br /&gt;&lt;br /&gt;1. 寫patch時應配合原程式的架構及style，會比較容易被接受。&lt;br /&gt;2. 寫完patch之後應照原程式的測試方式做一遍測試，而非只是測試自己的情況。&lt;br /&gt;3. 大部份時候都要仔細考慮並聆聽來自原作者的意見，畢竟他是最清楚全部情況的人。&lt;br /&gt;4. 不要懶的送patch，雖然可能會多費一些時間跟功夫，但送了patch通常可以學到更多。&lt;br /&gt;&lt;br /&gt;ref: 我和curl作者討論的過程，&lt;a href="https://sourceforge.net/tracker/?func=detail&amp;atid=100976&amp;aid=2709004&amp;group_id=976"&gt;https://sourceforge.net/tracker/?func=detail&amp;atid=100976&amp;aid=2709004&amp;group_id=976&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7314346795152621404?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7314346795152621404/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7314346795152621404' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7314346795152621404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7314346795152621404'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/05/note-patch.html' title='[Note] 送patch所學到的事'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7982392750893764221</id><published>2009-04-02T10:35:00.005+08:00</published><updated>2009-04-02T10:44:51.003+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><title type='text'>[tips] ssh login without password using ssh-copy-id script</title><content type='html'>應該早點知道有這種懶人script存在的&lt;br /&gt;而且還是裝完openssh就有的 &lt;br /&gt;(.ssh/authorized_keys,這是啥難記的檔名 @@)&lt;br /&gt;&lt;br /&gt;現在只要&lt;br /&gt;&lt;br /&gt;ssh-copy-id -i id_dsa.pub username@host&lt;br /&gt;&lt;br /&gt;做完就好了 orz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7982392750893764221?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7982392750893764221/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7982392750893764221' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7982392750893764221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7982392750893764221'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/04/tips-ssh-login-without-password-using.html' title='[tips] ssh login without password using ssh-copy-id script'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-1556877064202712961</id><published>2009-03-17T14:05:00.007+08:00</published><updated>2009-03-17T22:24:35.732+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='py3k'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='crc32'/><category scheme='http://www.blogger.com/atom/ns#' term='C_lang'/><title type='text'>[tips] crc32 in python</title><content type='html'>python 2.X的crc32實作上跟一般的C實作上在整數有號無號的處理上略有不同, 所以使用python 2.X與一般C實作算出的crc32(如sfv)比對時,通常需要特別的方法,&lt;br /&gt;&lt;br /&gt;這邊列出一個透過zlib.crc32快速得到所需要結果的方法：&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import zlib&lt;br /&gt;&lt;br /&gt;def crc32(st):&lt;br /&gt;    crc = zlib.crc32(st)&lt;br /&gt;    if crc &amp;gt; 0:&lt;br /&gt;      return &amp;quot;%x&amp;quot; % (crc)&lt;br /&gt;    else:&lt;br /&gt;      return &amp;quot;%x&amp;quot; % (~crc ^ 0xffffffff)&lt;br /&gt;&lt;br /&gt;ex1 = &amp;quot;12345&amp;quot;&lt;br /&gt;ex2 = &amp;quot;1kcaseztsa12345azy&amp;quot;&lt;br /&gt;&lt;br /&gt;print &amp;quot;%x&amp;quot; % zlib.crc32(ex1)&lt;br /&gt;print crc32(ex1)&lt;br /&gt;print &amp;quot;%x&amp;quot; % zlib.crc32(ex2)&lt;br /&gt;print crc32(ex2)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;或如果你有ctypes的話:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import zlib&lt;br /&gt;import ctypes&lt;br /&gt;&lt;br /&gt;def crc32_c(st):&lt;br /&gt;    return &amp;quot;%x&amp;quot; % ctypes.c_uint32(zlib.crc32(st)).value&lt;br /&gt;&lt;br /&gt;ex1 = &amp;quot;12345&amp;quot;&lt;br /&gt;ex2 = &amp;quot;1kcaseztsa12345azy&amp;quot;&lt;br /&gt;&lt;br /&gt;print &amp;quot;%x&amp;quot; % zlib.crc32(ex1)&lt;br /&gt;print crc32_c(ex1)&lt;br /&gt;print &amp;quot;%x&amp;quot; % zlib.crc32(ex2)&lt;br /&gt;print crc32_c(ex2)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;註： python 3.0以上沒有這個問題.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-1556877064202712961?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/1556877064202712961/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=1556877064202712961' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1556877064202712961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1556877064202712961'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/03/tips-crc32-in-python.html' title='[tips] crc32 in python'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-1407827534229596295</id><published>2009-03-04T19:25:00.004+08:00</published><updated>2009-03-04T19:33:20.319+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>微軟: HideTaiwan()</title><content type='html'>&lt;a href="http://msdn.microsoft.com/en-us/library/ms441219.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms441219.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;SPUtility.HideTaiwan Method (Microsoft.SharePoint.Utilities)&lt;br /&gt;&lt;br /&gt;Dim spWeb As SPWeb&lt;br /&gt;Dim localeId As Integer&lt;br /&gt;Dim returnValue As Boolean&lt;br /&gt;&lt;br /&gt;returnValue = SPUtility.HideTaiwan(spWeb, localeId)&lt;br /&gt;&lt;br /&gt;Parameters&lt;br /&gt;&lt;br /&gt;spWeb&lt;br /&gt;&lt;br /&gt;    An SPWeb object that specifies the Web site.&lt;br /&gt;&lt;br /&gt;localeId&lt;br /&gt;&lt;br /&gt;    A 32-bit integer that specifies a locale ID.&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Return Value&lt;br /&gt;true if the Taiwan calendar is hidden; otherwise, false. By default, this method returns true and the Taiwan calendar cannot be displayed for the following SPLangId values: PeoplesRepublicofChina, HongKongSAR, and MacaoSAR.&lt;br /&gt;&lt;br /&gt;不小心逛到這個 &lt;br /&gt;&lt;br /&gt;微軟真強 連台灣都可以Hide() ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-1407827534229596295?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/1407827534229596295/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=1407827534229596295' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1407827534229596295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1407827534229596295'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/03/hidetaiwan.html' title='微軟: HideTaiwan()'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-2628513030183440126</id><published>2009-03-02T22:27:00.006+08:00</published><updated>2009-03-02T23:11:14.656+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='xpcom'/><title type='text'>不縮排就搗蛋!</title><content type='html'>louis今天跟我討論XPCOM文件上這一段應該是要很簡單的C++ snippet, &lt;br /&gt;&lt;br /&gt;基本上我XPCOM不熟, C++尚可, &lt;br /&gt;&lt;br /&gt;拿來文件上的Code大概長的像這樣:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;NS_IMETHODIMP SampleFactory::QueryInterface(const nsIID &amp;amp;aIID,void **aResult)&lt;br /&gt;{&lt;br /&gt;    if (aResult == NULL) {&lt;br /&gt;    return NS_ERROR_NULL_POINTER;&lt;br /&gt;    }&lt;br /&gt;    *aResult = NULL;&lt;br /&gt;    if (aIID.Equals(kISupportsIID)) {&lt;br /&gt;    *aResult = (void *) this;&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    if (aIID.Equals(kIFactoryIID)) {&lt;br /&gt;    *aResult = (void *) this;&lt;br /&gt;    }&lt;br /&gt;    if (aResult != NULL) {&lt;br /&gt;    return NS_ERROR_NO_INTERFACE;&lt;br /&gt;    }&lt;br /&gt;    AddRef();&lt;br /&gt;    return NS_OK;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;看來看去實在是讓我皺眉頭...&lt;br /&gt;&lt;br /&gt;哪有aResult等於NULL也return &lt;br /&gt;&lt;br /&gt;不等於NULL也return &lt;br /&gt;&lt;br /&gt;然後return完後面還有code的道理&lt;br /&gt;&lt;br /&gt;反正這code看起來就是怪怪的, 但一下子卻看不出怪在哪... &lt;br /&gt;&lt;br /&gt;因為... &lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;這沒縮排又排的亂七八糟的code我是要怎麼讀啦!!!???&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;反正就是看的很難過 有股想把code拿去倒掉的衝動&lt;br /&gt;&lt;br /&gt;後來才發現真正的文件裡長的是這樣:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;NS_IMETHODIMP&lt;br /&gt;SampleFactory::QueryInterface(const nsIID &amp;amp;aIID,&lt;br /&gt;                              void **aResult)&lt;br /&gt;{&lt;br /&gt;  if (aResult == NULL) {&lt;br /&gt;    return NS_ERROR_NULL_POINTER;&lt;br /&gt;  }&lt;br /&gt;  *aResult = NULL;&lt;br /&gt;  if (aIID.Equals(kISupportsIID)) {&lt;br /&gt;    *aResult = (void *) this;&lt;br /&gt;  }&lt;br /&gt;  else if (aIID.Equals(kIFactoryIID)) {&lt;br /&gt;    *aResult = (void *) this;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (*aResult == NULL) {&lt;br /&gt;    return NS_ERROR_NO_INTERFACE;&lt;br /&gt;  }&lt;br /&gt;  AddRef();&lt;br /&gt;  return NS_OK;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;我咧 這一縮排 會不會感覺差太多&lt;br /&gt;&lt;br /&gt;連這段code snippet不用註解 要表達什麼都能看的清清楚楚.&lt;br /&gt;&lt;br /&gt;雖然我不是很熟XPCOM, 也清楚看的出:&lt;br /&gt;&lt;br /&gt;1. 在aIID是SupportsIID或FactoryIID的情況下&lt;br /&gt;&lt;br /&gt;*aResult不會是NULL 而如果不是SupportsIID或FactoryIID就該回傳NS_ERROR_NO_INTERFACE;&lt;br /&gt;&lt;br /&gt;2. 原先的code把倒數第六行if (*aResult == NULL)誤值成if (aResult == NULL) 是錯的...&lt;br /&gt;&lt;br /&gt;跟之前不知在寫什麼時不同, 馬上就看出問題點在哪...&lt;br /&gt;&lt;br /&gt;==&lt;br /&gt;&lt;br /&gt;我還是常聽到有人說什麼python強制縮排怎樣怎樣的...&lt;br /&gt;&lt;br /&gt;我只想說, &lt;br /&gt;&lt;br /&gt;人要衣裝 &lt;br /&gt;&lt;br /&gt;佛要金裝 &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Code要給我排整齊啦!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-2628513030183440126?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/2628513030183440126/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=2628513030183440126' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2628513030183440126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2628513030183440126'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/03/blog-post.html' title='不縮排就搗蛋!'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7921364063228750312</id><published>2009-02-25T13:44:00.003+08:00</published><updated>2009-02-25T14:09:48.752+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>Upgrade to KDE 4.2</title><content type='html'>上次升級4.0.5的KDE其實印象很不好,&lt;br /&gt;不斷的crash之外 另外登入成功後也無法正確logout, &lt;br /&gt;種種的問題又讓我退回使用3.5.x,&lt;br /&gt;不過這次升級到KDE 4.2.0, &lt;br /&gt;使用到目前為止其實還算順暢, &lt;br /&gt;除了少數plasma的applet無法正確啟動外, 使用感覺還算良好.&lt;br /&gt;&lt;br /&gt;我的平台是gentoo linux, 大部份套件是穩定版本的,&lt;br /&gt;所以升級還在測試中的KDE4.2 , 其實有遇到幾個小困難:&lt;br /&gt;&lt;br /&gt;1. 我原本的gcc版本是在gentoo裡被列為stable的gcc 4.1.2, 但在編譯kde-base/systemsettings時遇到困難, 老是有函式找不到, 最後參考網路上的作法 換至gcc 4.3.3後就一切順利. (真是詭異的作法)&lt;br /&gt;&lt;br /&gt;2. plasma老是啟動時crash, 還是只能參考網路上的說法, 將穩定版的 qt 4.4.2換至qt 4.5.0rc1, 就解決了這個問題.&lt;br /&gt;&lt;br /&gt;因為遇到這兩個套件需換至測試版本, 另外就是我也很久沒更新了, 所以emerge world居然重編了一千多個套件, 老實講distcc沒有那麼有用(據說我們公司裡有一個distcc陣列 :P 不過還是直接換硬碟到build server上會比較快啊 ！), 因為configure的時間其實很長, 最後還是借了一台雙核E8400的電腦來build, 不然實在是太累人了.&lt;br /&gt;&lt;br /&gt;KDE 4.2的穩定度大約是4.0左右的水準吧, 用到現在仍然沒有crash, 用起來的感覺也還不錯, 就是可能現在還不是安裝的最佳時機,有些AP用起來也可能還有問題, 如果對KDE的程式有重度需求可以再等等.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7921364063228750312?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7921364063228750312/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7921364063228750312' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7921364063228750312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7921364063228750312'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/02/upgrade-to-kde-42.html' title='Upgrade to KDE 4.2'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-935266189761286375</id><published>2009-02-25T01:01:00.012+08:00</published><updated>2009-02-25T02:18:09.646+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><title type='text'>我看"草泥馬"現象</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_VE6oUeg-MFI/SaQq9e_4IVI/AAAAAAAAAlg/KULj_iO91Jk/s1600-h/fd2584592ce5.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 203px; height: 205px;" src="http://4.bp.blogspot.com/_VE6oUeg-MFI/SaQq9e_4IVI/AAAAAAAAAlg/KULj_iO91Jk/s400/fd2584592ce5.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5306413496730657106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/O3tPA_Z_MT0&amp;hl=zh_TW&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/O3tPA_Z_MT0&amp;hl=zh_TW&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;最近對岸突然多出了一個新用語, &lt;a href="http://briian.com/?p=6138"&gt;"草泥馬"&lt;/a&gt; ,&lt;br /&gt;原本也以為只是低俗的搞笑罷了,&lt;br /&gt;但稍微了解一下, 事實上其實整個事件還滿悲哀的,&lt;br /&gt;大底上就是中共在2009年初開始部署的一項淨化網路文化環境的行動"&lt;a href="http://zh.wikipedia.org/wiki/%E6%95%B4%E6%B2%BB%E4%BA%92%E8%81%94%E7%BD%91%E4%BD%8E%E4%BF%97%E4%B9%8B%E9%A3%8E%E4%B8%93%E9%A1%B9%E8%A1%8C%E5%8A%A8"&gt;整治網際網路低俗之風專項行動&lt;/a&gt;"所引發的一系列集體創作的事件, 這個所謂的"反低俗" ,把中國有名的網站包括谷歌(即google) 百度 新浪 搜狐 豆瓣 MSN中國 也都列在整肅名單之列. &lt;br /&gt;&lt;br /&gt;略通歷史的人應該要知道, 群眾很難學會包容, 事實上低俗跟藝術的差異, 在群眾的眼裡往往只在一線之隔, "草泥馬"一系列的改編, 雖說也許是一種反動, 對於廣大的群眾而言, 不正是低俗的一種表現而已嗎? 對於這樣的低俗難道該容忍嗎? 然而我們該知道, 一直以來所謂的異端思想, 也不過就是對主政者不利的想法罷了. 不少文學作品在古代不是被禁就是被焚毀, 不只因為不容於當時的風俗, 而也對掌權者不利, 又或只是殺雞儆猴, 道德在掌權者的眼中不過就是一把名正言順的大旗, 端看何時要拿有利 而要揮向的又是誰而已. "&lt;a href="http://zh.wikipedia.org/wiki/%E5%8C%85%E6%B3%95%E5%88%A9%E5%A4%AB%E4%BA%BA"&gt;包法利夫人&lt;/a&gt;"正是著名的一個例子, 今天隨手拿起一本皇冠出版社的經典文學譯本, 大概在那個時代都會被列為禁書吧. &lt;br /&gt;&lt;br /&gt;反低俗不僅是一面大旗, 握在主政者的手中, 更是一手好棋, &lt;span style="font-weight:bold;"&gt;因為對掌權者不利的, 自然是再低俗不過了&lt;/span&gt;... &lt;br /&gt;一座低俗無法通過的偉大之牆已經建立了, 而低俗正在掃蕩了, 下一步呢? 或許身為當代的一份子, 在反政治文, 一切看經濟的媚俗潮流中, 也只能唱唱&lt;a href="http://www.youtube.com/watch?v=O3tPA_Z_MT0"&gt;草泥馬之歌&lt;/a&gt;, 萌一下&lt;a href="http://www.youtube.com/watch?v=IvT_w4ru_fo"&gt;草泥馬的愛情&lt;/a&gt;, 淡淡的說一句, "認真你就輸了"...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-935266189761286375?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/935266189761286375/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=935266189761286375' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/935266189761286375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/935266189761286375'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/02/blog-post.html' title='我看&quot;草泥馬&quot;現象'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_VE6oUeg-MFI/SaQq9e_4IVI/AAAAAAAAAlg/KULj_iO91Jk/s72-c/fd2584592ce5.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-1578518587988827743</id><published>2009-01-19T21:25:00.007+08:00</published><updated>2009-01-19T22:20:12.883+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>超偶2總冠軍賽心得</title><content type='html'>雖然自己愛聽女聲, 不過我其實是滿少看台灣歌唱比賽的節目,&lt;br /&gt;平常聽的如果不是西洋金曲類的大概就是公信榜武道館還是些OP/ED之類的歌, &lt;br /&gt;不過星期日凌晨聽符瓊音在超級偶像2總冠軍戰&lt;a href="http://tw.youtube.com/watch?v=eY2UJjbfvgw"&gt;第三輪唱的Listen&lt;/a&gt;還是特別的受到感動,&lt;br /&gt;&lt;br /&gt;"某"評審說符瓊音這首的缺點是還在&lt;a href="http://en.wikipedia.org/wiki/Beyonc%C3%A9_Knowles"&gt;Beyoncé&lt;/a&gt;的陰影下,&lt;br /&gt;&lt;a href="http://tw.youtube.com/watch?v=X-AIKCZoIWg"&gt;"仍"沒辦法超越Beyoncé&lt;/a&gt;,&lt;br /&gt;我實在是覺得有點吹毛求疵, &lt;br /&gt;撇開大家都知道的感冒及破音不談, &lt;br /&gt;我覺得Beyoncé這首歌的靈魂其實還是被展現了,&lt;br /&gt;我想符瓊音肯定是看過電影&lt;a href="http://en.wikipedia.org/wiki/Dreamgirls_(film)"&gt;Dreamgirls&lt;/a&gt;的, &lt;br /&gt;她自己大概也知道自己所伴演的角色是Effie White這個唱功一流卻因外型所困的歌手而非Beyoncé所演的那個美麗的Deena Jones,&lt;br /&gt;像Beyoncé這樣子外貌與音藝兩者俱全應該是她一生都想企求的目標. 或許她正是害怕從&lt;a href="http://en.wikipedia.org/wiki/Jennifer_Hudson"&gt;Jennifer_Hudson&lt;/a&gt;所演的Effie White看到自己的影子 &lt;br /&gt;才唱了Beyoncé這首可以代表自己心聲的曲子. 不論如何我覺得這首歌仍然是整個總冠軍賽最好聽的一首, 沒有因為這首而大翻盤實在也是太殘念了...&lt;br /&gt;&lt;br /&gt;這次因為感冒(跟魔咒?)只得到第二名只能說是相當可惜&lt;br /&gt;因為雖然其他人唱的也不錯 &lt;br /&gt;不過老實講只有符瓊音的歌才真的讓我的耳朵有滿足感.&lt;br /&gt;超偶2第一名是誰其實也不重要了 因為也已經都過去了, &lt;br /&gt;符瓊音麻煩你趕快找個好製作人出張好專輯吧...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-1578518587988827743?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/1578518587988827743/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=1578518587988827743' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1578518587988827743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1578518587988827743'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2009/01/2.html' title='超偶2總冠軍賽心得'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-8006293745953193253</id><published>2008-12-11T18:41:00.004+08:00</published><updated>2008-12-11T18:57:50.442+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>[tips] 針對特定model改變django ORM預設delete()行為的方法</title><content type='html'>Django ORM裡的預設delete行為是去模擬ON DELETE CASCADE, 主要是為了保證資料的一致性, 但是雖然在自帶的admin介面裡會提示是否要刪除其他相關聯的資料, 不過仍然可能會對某些需求帶來一些困擾, 而且到目前為止並沒有一個標準的方法來更改這個機制, 這邊我提供一個簡單的方法將model的ON DELETE CASCADE行為改為RESTRICT, 就是在需要不同機制的model裡去override orm原本的delete行為 :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt; &lt;br /&gt;    def delete(self):&lt;br /&gt;        s = CollectedObjects()&lt;br /&gt;        self._collect_sub_objects(s)&lt;br /&gt;        if len(s.items()) == 1:&lt;br /&gt;            super(self.__class__, self).delete()&lt;br /&gt;        else:&lt;br /&gt;            pass&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;這可確保當沒有任何關聯物件時才會刪除, 否則只會安靜的pass,&lt;br /&gt;this hack probably need django 1.0+.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-8006293745953193253?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/8006293745953193253/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=8006293745953193253' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8006293745953193253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8006293745953193253'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/12/tips-modeldjango-ormdelete.html' title='[tips] 針對特定model改變django ORM預設delete()行為的方法'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7251330272586164915</id><published>2008-09-29T10:30:00.003+08:00</published><updated>2008-09-29T10:43:17.573+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mako'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[link] django-mako</title><content type='html'>mako template是我除了django預設的template之外，&lt;br /&gt;唯一真的有在product上使用過的template，   &lt;br /&gt;mako對於我來說的優點是其簡單非XML的語法，&lt;br /&gt;此外mako無需任何C/pyrex extension，屬於純python的實作，&lt;br /&gt;非常適合在無需django及host上沒有C compiler時單獨安裝。 &lt;br /&gt;&lt;br /&gt;現在有網友替mako template做了一個django-mako的plugin，&lt;br /&gt;使用mako跟django整合又更容易了。&lt;br /&gt;&lt;br /&gt;連結:&lt;br /&gt;mako:&lt;br /&gt;&lt;a href="http://www.makotemplates.org/"&gt;http://www.makotemplates.org/&lt;/a&gt; (LICENSE: MIT)&lt;br /&gt;&lt;br /&gt;django-mako:&lt;br /&gt;&lt;a href="http://code.google.com/p/django-mako/"&gt;http://code.google.com/p/django-mako/&lt;/a&gt; (LICENSE: apache 2.0)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7251330272586164915?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7251330272586164915/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7251330272586164915' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7251330272586164915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7251330272586164915'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/09/link-django-mako.html' title='[link] django-mako'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-3023937979760630073</id><published>2008-09-25T10:59:00.004+08:00</published><updated>2008-09-25T12:35:36.894+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pyinstall'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>挺不錯的pyinstall</title><content type='html'>distutils跟setuptools有些什麼什麼好又有些什麼什麼不好,&lt;br /&gt;其實不少python使用者是心知肚明的,&lt;br /&gt;不過一般來說python programmer除了喜歡pythonic之外,&lt;br /&gt;發佈套件也通常都會遵守發佈python package的標準格式,&lt;br /&gt;發佈setuptools的eggs跟distutils的source tarball&lt;br /&gt;雖然每個python user遵循標準程序的原因未必相同,&lt;br /&gt;不過這似乎已是一種不得不的慣例.&lt;br /&gt;&lt;br /&gt;最近在distutils跟setuptools之外出現了新選擇:&lt;br /&gt;&lt;a href="http://tarekziade.wordpress.com/2008/09/24/distribute-a-setuptools-fork/"&gt;Tarek Ziadé的distribute&lt;/a&gt;跟&lt;a href="http://www.openplans.org/projects/topp-engineering/blog/2008/09/24/pyinstall-a-new-hope/"&gt;Ian Bicking的pyinstall&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;比較完整也比較吸引我眼球的是Ian Bicking的pyinstall,&lt;br /&gt;一來Ian Bicking的東西向來簡單好用,&lt;br /&gt;二來pyinstall的確解決了一些煩雜的問題,&lt;br /&gt;三來Ian Bicking的社群影響力較大,成為新標準的可能性極高.&lt;br /&gt;&lt;br /&gt;pyinstall大致相容於setuptools的easy_install並且提供了一些新的功能跟補強,&lt;br /&gt;我自己認為pyinstall最重要的東西,    &lt;br /&gt;是在unix上提供了一個足以取代egg格式的新格式: bundle,&lt;br /&gt;bundle格式有兩個我認為很重要的特點:&lt;br /&gt;第一個就是dependencies include,所有相依的套件全都被放在同一個bundle檔案裡.&lt;br /&gt;第二個是source based. &lt;br /&gt;bundle有點像是一整個相依的freebsd ports或gentoo&lt;br /&gt;ebuild加上其distfiles集合在一起的source整合格式,&lt;br /&gt;所有的source跟編譯及安裝規則都放在同一個檔案裏面,在安裝的同時才進行編譯(.pyc and .so)&lt;br /&gt;所以不像binary格式的eggs需要依版本分2.4的eggs跟2.5的eggs,只要下載同一個檔案就可以安裝了.&lt;br /&gt;當然source based distro/package system的好壞見仁見智, 也會有些限制.&lt;br /&gt;不過至少編譯時間過久這個缺點對於python來講應該是不存在的.&lt;br /&gt;因為大部分的python packages依靠c的部份不多, 另外產生.pyc檔也並不會太慢.&lt;br /&gt;&lt;br /&gt;此外pyinstall除了支援同一作者的virtualenv外,&lt;br /&gt;對於整個python環境也有提出了一個解決方法 -- Requirements&lt;br /&gt;事實上對於easy_install base安裝的工具最害怕的就是: 下一次裝不知道其相依的套件還會不會是相同版本.&lt;br /&gt;因為安裝最新版未必是我們最希望的事情, 因為很有可能最新版將我們需要的功能給改變了,我會比較希望能夠有一個版本的控制&lt;br /&gt;Requirements不僅可以由撰寫Requirements file來限制整個相依性的版本,&lt;br /&gt;還可以用pyinstall.py --freeze=require.txt的方法,將整個開發環境的所有python版本套件版號都紀錄下來&lt;br /&gt;方便你移到所以需要新安裝的機器上. 如果再結合上bundle, 幾乎就是非常完美的佈署方案.&lt;br /&gt;&lt;br /&gt;pyinstall目前只有0.1.1版, 而且似乎還會有更多加強, 不過我認為這個工具的方便性跟應用的潛力非常大, 值得作個推荐.&lt;br /&gt;&lt;br /&gt;更詳細的資訊請參考:&lt;br /&gt;&lt;br /&gt;pyinstall:&lt;br /&gt;&lt;a href="http://www.openplans.org/projects/topp-engineering/blog/2008/09/24/pyinstall-a-new-hope/"&gt;http://www.openplans.org/projects/topp-engineering/blog/2008/09/24/pyinstall-a-new-hope/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://pypi.python.org/pypi/pyinstall"&gt;http://pypi.python.org/pypi/pyinstall&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;distribute:&lt;br /&gt;&lt;a href="http://tarekziade.wordpress.com/2008/09/24/distribute-a-setuptools-fork/"&gt;http://tarekziade.wordpress.com/2008/09/24/distribute-a-setuptools-fork/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mail.python.org/pipermail/distutils-sig/2008-September/010031.html"&gt;http://mail.python.org/pipermail/distutils-sig/2008-September/010031.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://bazaar.launchpad.net/~tziade/distribute/trunk/files"&gt;http://bazaar.launchpad.net/~tziade/distribute/trunk/files&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-3023937979760630073?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/3023937979760630073/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=3023937979760630073' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3023937979760630073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3023937979760630073'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/09/pyinstall.html' title='挺不錯的pyinstall'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7800807015553252498</id><published>2008-09-15T12:09:00.006+08:00</published><updated>2008-09-15T13:37:07.987+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='pony'/><category scheme='http://www.blogger.com/atom/ns#' term='djangoconf'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>Django有吉祥物囉！</title><content type='html'>今年9月6-7日的&lt;a href="http://djangocon.org/"&gt;Django Conf&lt;/a&gt; 第一天的最後一個議程是&lt;a href="http://www.iamcal.com/"&gt;Cal Henderson&lt;/a&gt;的Keynote: Why I Hate Django，其中提到很重要的一點: Django沒有吉祥物，Django需要一個具有"Awesome"跟"Magical Powers"特性的吉祥物來作代表。於是在全球Django愛好者的腦力激盪下，屬於Django自己的吉祥物出現囉! 就是&lt;a href="http://avalonstar.com/blog/2008/sep/9/web-framework-ponies/"&gt;avalonstar的Bryan Veloso&lt;/a&gt;所設計的這隻可愛的pony喔!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_VE6oUeg-MFI/SM3jomrnyUI/AAAAAAAAAY8/6YYNAnKbj4o/s1600-h/2842638666_b24158c6f6_b.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_VE6oUeg-MFI/SM3jomrnyUI/AAAAAAAAAY8/6YYNAnKbj4o/s400/2842638666_b24158c6f6_b.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5246099427674278210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_VE6oUeg-MFI/SM3jojdXzjI/AAAAAAAAAZE/llB0mwlpCrM/s1600-h/2844663076_225ba15523_b.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_VE6oUeg-MFI/SM3jojdXzjI/AAAAAAAAAZE/llB0mwlpCrM/s400/2844663076_225ba15523_b.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5246099426809204274" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_VE6oUeg-MFI/SM30VWSSViI/AAAAAAAAAZM/HTGZ6rOLXFU/s1600-h/magic-pony-django-wallpaper.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_VE6oUeg-MFI/SM30VWSSViI/AAAAAAAAAZM/HTGZ6rOLXFU/s400/magic-pony-django-wallpaper.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5246117788553205282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://djangopony.com/" class="ponybadge" title="Magic! Ponies! Django! Whee!"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;"src="http://media.djangopony.com/img/small/badge.png" width="210" height="65" alt="ponybadge"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;更多django pony的有趣資訊請參考：&lt;br /&gt;&lt;a href="http://avalonstar.com/blog/2008/sep/9/web-framework-ponies/"&gt;http://avalonstar.com/blog/2008/sep/9/web-framework-ponies/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/django-pony/"&gt;http://code.google.com/p/django-pony/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.djangopony.com/"&gt;&lt;br /&gt;http://www.djangopony.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/djangopony/"&gt;&lt;br /&gt;http://twitter.com/djangopony/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7800807015553252498?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7800807015553252498/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7800807015553252498' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7800807015553252498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7800807015553252498'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/09/django.html' title='Django有吉祥物囉！'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_VE6oUeg-MFI/SM3jomrnyUI/AAAAAAAAAY8/6YYNAnKbj4o/s72-c/2842638666_b24158c6f6_b.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4732792973577813248</id><published>2008-09-04T13:47:00.003+08:00</published><updated>2008-09-04T14:16:25.849+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>Django 1.0 released !!</title><content type='html'>&lt;a href="http://www.djangoproject.com/weblog/2008/sep/03/1/"&gt;http://www.djangoproject.com/weblog/2008/sep/03/1/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Django 1.0 released！&lt;br /&gt;&lt;br /&gt;1.0是Django project一個很重要的里程碑，因為一直以來官方對於Django 1.0有個很重要的承諾，就是在1.0之後的所有版本都將維持向前相容性，就是不論是到1.x多少版，都將維持對1.0版本程式的相容性而不會再作任何會打破相容性的重大變動。這也是為什麼1.0版本會遲遲不推出的原因。&lt;br /&gt;&lt;br /&gt;不過1.0 release的這一天終於來了，&lt;br /&gt;根據Django官方網頁的說法，自從上一個穩定版Django 0.96.2以來，到這次的1.0版本發佈，已經有超過三十五萬行的Django程式碼被修正或改變，足見改變之大。(改動350000行的python, orz)&lt;br /&gt;&lt;br /&gt;這次總算是讓我可以使用Django的新版本了，畢竟用了0.95.x跟0.96.x實在是很久了，而Django的SVN trunk對於真的要上線的系統畢竟還是個比較危險的使用方式。不過美中不足的是debian lenny似乎還是會來不及將Django 1.0包進debian linux系統，看來以後安裝上線系統又要多費一番功夫。&lt;br /&gt;&lt;br /&gt;想知道更詳細的改變內容跟新增功能請看&lt;a href="http://docs.djangoproject.com/en/dev/releases/1.0/"&gt;Django 1.0 release notes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4732792973577813248?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4732792973577813248/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4732792973577813248' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4732792973577813248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4732792973577813248'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/09/django-10-released.html' title='Django 1.0 released !!'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7093889456043561391</id><published>2008-08-25T22:40:00.005+08:00</published><updated>2008-08-25T23:28:00.199+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coscup 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='coscup'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>coscup 2008遊記</title><content type='html'>時間過的飛快, 其實感覺去年的&lt;a href="http://coscup.org/2008/"&gt;coscup&lt;/a&gt; 2007似乎才剛結束而已. coscup 2008又開始了,&lt;br /&gt;這次kalug的朋友去了好多, 平常會掛在irc頻道上的至少就有去了一半以上,&lt;br /&gt;一些平常少出現的朋友也都遇到了, 還遇到了一些原本只在irc或網路上看過的前輩跟朋友.&lt;br /&gt;&lt;br /&gt;星期六早上雖然有點睡過頭,&lt;br /&gt;不過還是跟&lt;a href="http://kalug.linux.org.tw/~lloyd/bblog/"&gt;lloyd大大&lt;/a&gt;坐著高鐵順利的來到了台大應力所的會場,&lt;br /&gt;(走好久啊,難怪有人迷路), 這次小弟我也有準備了兩個20分鐘左右的session要介紹,&lt;br /&gt;主要是簡短的講了一下django跟py3k這兩個有關python的議題,&lt;br /&gt;第一天下午講django時由於臨時因為筆記型電腦接上投影機後畫面出不來,&lt;br /&gt;倉促的商借了&lt;a href="http://yurinfore.blogspot.com/"&gt;yurenju(小朱)&lt;/a&gt;的筆電 但是似乎因為是沒有字型的關係,&lt;br /&gt;替代字型其實有點不好看 有些字重疊在一起 不過還是硬著頭皮把他講完了&lt;br /&gt;另外20分鐘其實很短, 所以講的好像有點倉促 主要還是講一些觀念上的個人看法&lt;br /&gt;希望能引起一些朋友對django的興趣.&lt;br /&gt;這場講完後見到了非常客氣謙虛的&lt;a href="http://william.cswiz.org/blog/"&gt;WilliamYeh葉秉哲大大&lt;/a&gt;,跟他作了一些心得交流,&lt;br /&gt;其實我有好幾本他的翻譯書 應該要拿來給他簽名才是.&lt;br /&gt;另外感謝這場大家對我的笑話還挺捧場的,&lt;br /&gt;似乎沒有人睡著,不然講下午第一場實在是有點辛苦,&lt;br /&gt;連我自己都會覺得昏昏欲睡.&lt;br /&gt;下午也有跟freenode irc上#python.tw我們python幫的&lt;a href="http://inet6.blogspot.com/"&gt;gasolin&lt;/a&gt;, &lt;a href="http://everydayquest.blogspot.com/"&gt;keitheis&lt;/a&gt;碰到,&lt;br /&gt;上次coscup 2007跟gasolin聊比較久,&lt;br /&gt;這次gasolin好像比較忙 聊了一下就不見人了&lt;br /&gt;第二天下午我要跟keitheis找gasolin的時候, 就發現人海茫茫 真是難找&lt;br /&gt;這次第二天結束吃飯的時候其實在跟&lt;a href="http://heaven.branda.to/~thinker/GinGin_CGI.py"&gt;thinker&lt;/a&gt;聊台灣pycon下次會不會辦的時候&lt;br /&gt;lloyd有跟thinker提到說, 台灣的pycon其實也可以借coscup BOF的時間來辦,&lt;br /&gt;我也覺得實在應該要排一場BOF讓#python.tw的人互相認親聊天才對.&lt;br /&gt;&lt;br /&gt;今天晚上的晚餐是像海浪一樣的pizza海, 兩百五十人份的pizza果然是壯觀,&lt;br /&gt;BOF我是參加我們自己kalug主辦的&lt;a href="http://osm.ossug.org/"&gt;OpenStreetMap&lt;/a&gt;, 拿了一些pizza跟雞翅飲料進場地, 邊吃邊聊.&lt;br /&gt;人比我原先預期的多,陸陸續續大概有三十到四十個左右的朋友來,&lt;br /&gt;BOF內容主要是這次OpenStreetMap的講者&lt;a href="http://blog.locomotion.tw/"&gt;louis&lt;/a&gt;來講一些josm跟openstreetmap的一些情形.&lt;br /&gt;&lt;a href="mailto::arne 小老鼠 goetje-online 點 de"&gt;Arne&lt;/a&gt;講到了一些tag標示的東西及提到一些路名中文拼音上的混淆,&lt;br /&gt;lloyd大大講了一些gsm logger支援的狀況. 大家有得吃又有得聊 實在滿不錯的.&lt;br /&gt;不過下次應該要在場地準備一些面紙之類的 不然大家吃東西吃的油油的&lt;br /&gt;又要跑廁所洗手 這樣歡樂的BOF就被打斷了.&lt;br /&gt;&lt;br /&gt;晚上跟keitheis,還有我們kalug的lloyd大大,&lt;a href="http://jonnyubuntu.blogspot.com/"&gt;凍翔&lt;/a&gt;,&lt;br /&gt;study area的&lt;a href="http://phorum.study-area.org/index.php?action=profile;u=18334"&gt;billy&lt;/a&gt;回到住宿的飯店, 聽說凍翔跟billy聊到很晚,&lt;br /&gt;keitheis從台南坐夜車上來之後還跑到誠品 另外我跟lloyd大大也很累 所以也就先睡了.&lt;br /&gt;&lt;br /&gt;第二天一大早爬起來其實還是有點累 不過早上我有py3k的簡報要報&lt;br /&gt;這次一樣借了yurenju的筆電, yurenju有幫我修改了字型 字型效果就好了不少.&lt;br /&gt;真是非常感謝小朱大力幫忙. &lt;a href="http://pingyeh.blogspot.com/"&gt;Ping長輩&lt;/a&gt;一開始介紹我的時候提到提姆之禪,&lt;br /&gt;我自己一時還會意不過來 只有python之禪 我哪來的提姆之禪,&lt;br /&gt;原來他所說的提姆是指曾在python mailing list上有tim bot之稱,&lt;br /&gt;撰寫&lt;a href="http://www.python.org/dev/peps/pep-0020/"&gt;The Zen of Python&lt;/a&gt; (Python之禪) 的Tim Peters, 不是在說我有什麼禪,&lt;br /&gt;Tim Peters其實是python界的傳奇人物之一, 我取ID時的確是沾了他的一點光,&lt;br /&gt;希望我寫的程式也能得到他的庇蔭. (笑)&lt;br /&gt;&lt;br /&gt;其實py3k這場講起來感覺時間更短, 有點意猶未盡, 才一下子就被後面的舉牌美眉舉牌了,&lt;br /&gt;不過為了怕影響到後面的講者更精彩的議題, 就講的稍微快了點,&lt;br /&gt;雖然原本就只打算講一些py3k的重要觀念跟想法,&lt;br /&gt;但是還是覺得好像有點倉促, 可能下次繼續在kalug講一場好了, (有人想聽的話 orz)&lt;br /&gt;順便恢復一下據lloyd大大說我老是把20分鐘的投影片講成3個小時的功力 XD&lt;br /&gt;&lt;br /&gt;第二天下午的場次時跟以前高中的優秀學弟, Mozilla TW的&lt;a href="http://blog.bobchao.net/"&gt;Bobchao&lt;/a&gt;小聊了一陣,&lt;br /&gt;我跟他都覺得雖然很多網友其實平常網路上有所聯絡,&lt;br /&gt;但是辦個實體的聚會其實還是有他的效果, 所謂見面三分情嘛!&lt;br /&gt;irc跟網路上的朋友通常是分散四處的關係 其實平常也很難見到,&lt;br /&gt;人生相逢便是有緣, 珍惜緣份就是一種福氣 不是吗?&lt;br /&gt;&lt;br /&gt;晚上跟著一群coscup的大大們,還有kalug在台北的朋友們去吃飯聊天,&lt;br /&gt;不過我因為要趕著搭高鐵回家, 另外&lt;a href="http://people.debian.org.tw/~chihchun/"&gt;chihchun&lt;/a&gt;跟&lt;a href="http://evilmoon.blogspot.com/"&gt;hychen&lt;/a&gt;也要先走,&lt;br /&gt;就請&lt;a href="http://shawn-page.blogspot.com/"&gt;shawn&lt;/a&gt;順便先送我去車站, 結束了短短兩天的coscup 2008之旅.&lt;br /&gt;&lt;br /&gt;我這次的投影片都會放在kalug的&lt;a href="http://kalug.linux.org.tw/~tim/coscup2008/"&gt;這邊&lt;/a&gt;,&lt;br /&gt;另外&lt;a href="http://coscup.org/2008/"&gt;coscup 2008的官方網站&lt;/a&gt;之後可能也會有錄影跟投影片的下載,&lt;br /&gt;還請各位前輩朋友多多指教囉.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7093889456043561391?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7093889456043561391/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7093889456043561391' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7093889456043561391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7093889456043561391'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/08/coscup-2008.html' title='coscup 2008遊記'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-1520036902294321937</id><published>2008-07-16T17:15:00.007+08:00</published><updated>2008-07-16T19:42:01.757+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lift'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>[tips] 淺嘗 lift</title><content type='html'>&lt;a href="http://liftweb.net/index.php/Main_Page"&gt;lift&lt;/a&gt;是個由&lt;a href="http://en.wikipedia.org/wiki/Scala_%28programming_language%29"&gt;Scala&lt;/a&gt;語言所開發的web framework，由於想試玩一下據說連James Gosling都玩的Scala，索性就試著裝裝看lift，看看有沒有機會在上面開發Web APP。據說Scala在.NET及java平台下都可以執行，不過我試的平台是sun jdk 1.5。&lt;br /&gt;&lt;br /&gt;首先先安裝好jdk跟maven2，再來打入這一大串，&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;br /&gt;&lt;code&gt;mvn archetype:create -U  \&lt;br /&gt;-DarchetypeGroupId=net.liftweb                             \&lt;br /&gt;-DarchetypeArtifactId=lift-archetype-basic                 \&lt;br /&gt;-DarchetypeVersion=0.9                            \&lt;br /&gt;-DremoteRepositories=http://scala-tools.org/repo-releases  \&lt;br /&gt;-DgroupId=mytestorm.group -DartifactId=mytestorm.app&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;這會自動建立一個可連結derby database ，有models的ORM骨架的web application. 最厲害的是maven這個工具連scala,jetty這些你缺的dependency都能幫你裝到好。&lt;br /&gt;&lt;br /&gt;接下來可以修改mytestorm.app/src/main/scala/bootstrap/liftweb/Boot.scala將db的connection string改成："jdbc:derby:mytest;create=true" 這等一下會在我的專案目錄mytestorm.app裡建立一個名為mytest的derby db，再打入mvn jetty:run 就可以啟動webserver了(這裡打入mvn tomcat:run的話會幫你裝好tomcat). 因為lift已經事先幫你建好了model，所以現在連到server的8080 port或http://127.0.0.1:8080，就可以看到一個可以登入的歡迎畫面：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="連結" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_VE6oUeg-MFI/SH3EhZRneCI/AAAAAAAAAY0/0ESkcKhoNLo/s1600-h/lift.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_VE6oUeg-MFI/SH3EhZRneCI/AAAAAAAAAY0/0ESkcKhoNLo/s400/lift.jpg" alt="" id="BLOGGER_PHOTO_ID_5223547220819146786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;到這邊其實就已經有一點django admin模組的味道了，可以註冊帳號跟login什麼的，&lt;br /&gt;如果用django的術語來講，整個lift的架構也不難解釋，django的urlconf跟settings被放在bootstrap/Boot.scala,&lt;br /&gt;model.py被放到scala/your-proj's-group/model這個目錄裡，template是在webapp裡，template tag在scala/your-proj's-group/snippet裡，view在scala/your-proj's-group/view/，&lt;br /&gt;說來說去，實在也是換湯不換藥，大底上目前的web開發就是如此。&lt;br /&gt;&lt;br /&gt;如果你還有興趣的話，可以到抓下lift 0.9的release tarball, 然後解開之後到lift-0.9/sites/example裡，用mvn jetty:run 將example都跑起來玩一玩。裏面有幾個sample還滿有趣的，還包括一個comet的聊天室實作。&lt;br /&gt;&lt;br /&gt;稍微玩了一下其實沒啥大感覺，主要覺得lift用的maven工具太複雜了，讓整個開發像在變魔術一樣，老是要找東西被裝到那，反而覺得scala沒什麼玩到，主要都在搞設定，另外mavan在裝dependency的時候整個download的過程都要連到國外總站，要裝的package又不少，導致安裝速度變得有點慢，如果能有台灣mirror應該會好一點。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-1520036902294321937?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/1520036902294321937/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=1520036902294321937' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1520036902294321937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1520036902294321937'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/07/tips-lift.html' title='[tips] 淺嘗 lift'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_VE6oUeg-MFI/SH3EhZRneCI/AAAAAAAAAY0/0ESkcKhoNLo/s72-c/lift.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-1262783532478901664</id><published>2008-07-14T15:38:00.007+08:00</published><updated>2008-07-14T22:49:58.140+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='lighttpd'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>[tips] rewrite debian/ubuntu 's  lighttpd conf script from perl to python</title><content type='html'>Today I want to port lighttpd on another platform which basically a debian sarge system but without perl and dpkg package system on it. Since it's a debian based platform so I start from porting debian's binary lighttpd package, however I've found there're some perl script lays in /usr/share/lighttpd which are used when lighttpd startup.&lt;br /&gt;&lt;br /&gt;While I can easily dump the result of perl script into a textfile,&lt;br /&gt;and then startup my lighttpd correctly, I thought "maybe port it to python is not a bad idea." (since my target platform has python!), so here is the effort:&lt;br /&gt;create-mime.assign.py&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;#!/usr/bin/python&lt;br /&gt;#&lt;br /&gt;# This script directly translate from debian's lighttpd perl script:&lt;br /&gt;# create-mime.assign.pl&lt;br /&gt;#&lt;br /&gt;# Author: timchen119.at.nospam.gmail.com&lt;br /&gt;# License: Public Domain&lt;br /&gt;#&lt;br /&gt;import sys&lt;br /&gt;&lt;br /&gt;try:&lt;br /&gt; f = open("/etc/mime.types",'r')&lt;br /&gt; extensions = {}&lt;br /&gt; print "mimetype.assign = ("&lt;br /&gt; for line in f:&lt;br /&gt;     line = line.strip()&lt;br /&gt;     if line.startswith('#'): continue&lt;br /&gt;     if line != "":&lt;br /&gt;         splitlist = line.split()&lt;br /&gt;         if len(splitlist) &amp;lt; 2: continue&lt;br /&gt;         mime = splitlist[0]&lt;br /&gt;         for ext in splitlist[1:]:&lt;br /&gt;             if ext in extensions.keys(): continue&lt;br /&gt;             extensions[ext] = 1&lt;br /&gt;             print '".%s" =&amp;gt; "%s",' % (ext,mime)&lt;br /&gt; f.close()&lt;br /&gt; print ")"&lt;br /&gt;except Exception,e:&lt;br /&gt; print e&lt;br /&gt; sys.exit(1)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;include-conf-enabled.py&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;#!/usr/bin/python&lt;br /&gt;#&lt;br /&gt;# This script directly translate from debian's lighttpd perl script:&lt;br /&gt;# include-conf-enabled.pl&lt;br /&gt;#&lt;br /&gt;# Author: timchen119.at.nospam.gmail.com&lt;br /&gt;# License: Public Domain&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;import os,glob&lt;br /&gt;&lt;br /&gt;confdir = "/etc/lighttpd/"&lt;br /&gt;enabled = "conf-enabled/*.conf"&lt;br /&gt;&lt;br /&gt;os.chdir(confdir)&lt;br /&gt;&lt;br /&gt;for file in sorted(glob.glob(enabled)):&lt;br /&gt; print 'include "%s"' % file&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;use-ipv6.py&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;#!/usr/bin/python&lt;br /&gt;#&lt;br /&gt;# This script directly translate from ubuntu's lighttpd perl script:&lt;br /&gt;# use-ipv6.pl&lt;br /&gt;#&lt;br /&gt;# Author: timchen119.at.nospam.gmail.com&lt;br /&gt;# License: Public Domain&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;import socket&lt;br /&gt;&lt;br /&gt;##this sometimes not accurate. (like in vserver mode)&lt;br /&gt;#if socket.has_ipv6:&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;try:&lt;br /&gt; if socket.socket(socket.AF_INET6,socket.SOCK_STREAM,0):&lt;br /&gt;     print 'server.use-ipv6 = "enable"'&lt;br /&gt;except:&lt;br /&gt; pass&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;All of these files can be found in &lt;a href="http://kalug.linux.org.tw/%7Etim/lighttpd-debian-python-script/"&gt;http://kalug.linux.org.tw/~tim/lighttpd-debian-python-script/&lt;/a&gt;&lt;br /&gt;Well something quite interesting happened when I port the debian's create-mime.assign.pl into python, It's that my python script's final result is not equivalent to perl one and has more mime types than its :&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;--- perlmime.txt    2008-07-14 15:29:23.000000000 +0800&lt;br /&gt;+++ pymime.txt    2008-07-14 15:29:33.000000000 +0800&lt;br /&gt;@@ -114,6 +114,11 @@&lt;br /&gt;".dvi" =&amp;gt; "application/x-dvi",&lt;br /&gt;".rhtml" =&amp;gt; "application/x-httpd-eruby",&lt;br /&gt;".flac" =&amp;gt; "application/x-flac",&lt;br /&gt;+".pfa" =&amp;gt; "application/x-font",&lt;br /&gt;+".pfb" =&amp;gt; "application/x-font",&lt;br /&gt;+".gsf" =&amp;gt; "application/x-font",&lt;br /&gt;+".pcf" =&amp;gt; "application/x-font",&lt;br /&gt;+".pcf.Z" =&amp;gt; "application/x-font",&lt;br /&gt;".mm" =&amp;gt; "application/x-freemind",&lt;br /&gt;".gnumeric" =&amp;gt; "application/x-gnumeric",&lt;br /&gt;".sgf" =&amp;gt; "application/x-go-sgf",&lt;br /&gt;@@ -193,6 +198,11 @@&lt;br /&gt;".pk" =&amp;gt; "application/x-tex-pk",&lt;br /&gt;".texinfo" =&amp;gt; "application/x-texinfo",&lt;br /&gt;".texi" =&amp;gt; "application/x-texinfo",&lt;br /&gt;+".~" =&amp;gt; "application/x-trash",&lt;br /&gt;+".%" =&amp;gt; "application/x-trash",&lt;br /&gt;+".bak" =&amp;gt; "application/x-trash",&lt;br /&gt;+".old" =&amp;gt; "application/x-trash",&lt;br /&gt;+".sik" =&amp;gt; "application/x-trash",&lt;br /&gt;".t" =&amp;gt; "application/x-troff",&lt;br /&gt;".tr" =&amp;gt; "application/x-troff",&lt;br /&gt;".roff" =&amp;gt; "application/x-troff",&lt;br /&gt;@@ -282,6 +292,7 @@&lt;br /&gt;".tgf" =&amp;gt; "chemical/x-mdl-tgf",&lt;br /&gt;".mcif" =&amp;gt; "chemical/x-mmcif",&lt;br /&gt;".mol2" =&amp;gt; "chemical/x-mol2",&lt;br /&gt;+".b" =&amp;gt; "chemical/x-molconn-Z",&lt;br /&gt;".gpt" =&amp;gt; "chemical/x-mopac-graph",&lt;br /&gt;".mop" =&amp;gt; "chemical/x-mopac-input",&lt;br /&gt;".mopcrt" =&amp;gt; "chemical/x-mopac-input",&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;So I start to dig why this happened, and I've found a strange perl regex filter all these mimetypes out, I believe it's a minor bug in original perl program. (or it does implicitly doing something meaningful? well I can't figure it out.)&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;--- create-mime.assign.pl    2008-07-14 15:35:58.000000000 +0800&lt;br /&gt;+++ create-mime.assign.pl.new    2008-07-14 15:36:07.000000000 +0800&lt;br /&gt;@@ -7,7 +7,7 @@&lt;br /&gt;chomp;&lt;br /&gt;s/\#.*//;&lt;br /&gt;next if /^\w*$/;&lt;br /&gt;-  if(/^([a-z0-9\/+-.]+)\s+((?:[a-z0-9.+-]+[ ]?)+)$/) {&lt;br /&gt;+  if(/^([A-Za-z0-9\/+-.~%]+)\s+((?:[A-Za-z0-9.+-~%]+[ ]?)+)$/) {&lt;br /&gt;  foreach(split / /, $2) {&lt;br /&gt;    # mime.types can have same extension for different&lt;br /&gt;    # mime types&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;replace this line and this will produce same results as mine.&lt;br /&gt;&lt;br /&gt;usage:&lt;br /&gt;just copy these py scripts to /usr/share/lighttpd&lt;br /&gt;and change these lines if you're using debian based system&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;#### external configuration files&lt;br /&gt;## mimetype mapping&lt;br /&gt;#include_shell "/usr/share/lighttpd/create-mime.assign.pl"&lt;br /&gt;include_shell "/usr/share/lighttpd/create-mime.assign.py"&lt;br /&gt;&lt;br /&gt;## load enabled configuration files,&lt;br /&gt;## read /etc/lighttpd/conf-available/README first&lt;br /&gt;#include_shell "/usr/share/lighttpd/include-conf-enabled.pl"&lt;br /&gt;include_shell "/usr/share/lighttpd/include-conf-enabled.py"&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-1262783532478901664?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/1262783532478901664/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=1262783532478901664' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1262783532478901664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1262783532478901664'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/07/tips-rewrite-debianubuntu-s-lighttpd.html' title='[tips] rewrite debian/ubuntu &apos;s  lighttpd conf script from perl to python'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4533537846679478168</id><published>2008-06-21T08:23:00.005+08:00</published><updated>2008-06-21T09:01:53.377+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bzr'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='Emacs'/><title type='text'>[link] mysql now use bzr !</title><content type='html'>&lt;a href="http://blogs.mysql.com/kaj/2008/06/19/version-control-thanks-bitkeeper-welcome-bazaar/"&gt;http://blogs.mysql.com/kaj/2008/06/19/version-control-thanks-bitkeeper-welcome-bazaar/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;又一個重量級軟體投入DVCS的懷抱, &lt;br /&gt;不過我倒是沒預期到mysql會倒向bzr,&lt;br /&gt;因為sun之前的專案如Openjdk,OpenSolaris等, 大多都是用hg,&lt;br /&gt;而mysql被sun買走, 似乎被水銀化的機會很大,&lt;br /&gt;所以這次使用bzr可以說是意外的驚喜.&lt;br /&gt;這麼一來dvcs三強天下三分的局勢似乎已經形成了.&lt;br /&gt;&lt;br /&gt;剛好svn 1.5.0也正式release, 如此一來bzr-svn之前不方便安裝的問題也解決了(因為bzr-svn用到了svn1.5.0的python-binding才有的功能, svn1.4要打很多patch, 如今只要升級到最新的svn 1.5就好了),對於我這個bzr的使用者來說可以說是好消息不斷.&lt;br /&gt;&lt;br /&gt;另外話說Emacs要從cvs轉換到bzr其實已經講一陣子了, &lt;br /&gt;目前可用的是Jason Earl每小時更新的bzr readonly repo (http://bzr.notengoamigos.org/emacs/trunk/) , 似乎要等到一些merge-history的問題解決後, 官方才會完全轉換過去. (當然這還是未定數, 不過以RMS強烈支持bzr的態度來說, 應該是遲早的事)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4533537846679478168?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4533537846679478168/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4533537846679478168' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4533537846679478168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4533537846679478168'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/06/mysql-now-use-bzr.html' title='[link] mysql now use bzr !'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-1640978229559948443</id><published>2008-06-13T11:04:00.002+08:00</published><updated>2008-06-13T11:08:24.517+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[link] 有吵有糖吃... Django 1.0 is coming...</title><content type='html'>根據這篇&lt;a href="http://groups.google.com/group/django-developers/browse_frm/thread/5ce124e7526dad/8938860cda0d4895"&gt;Roadmap&lt;/a&gt;的說法, Django 1.0 會在7月alpha, 8月rc, 9月release. 雖然不知道到底準不準時, 但是"準備好了就會出來"這種話我已經聽膩了... XD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-1640978229559948443?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/1640978229559948443/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=1640978229559948443' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1640978229559948443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1640978229559948443'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/06/link-django-10-is-coming.html' title='[link] 有吵有糖吃... Django 1.0 is coming...'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-1063817831558570646</id><published>2008-06-12T19:49:00.003+08:00</published><updated>2008-06-12T20:04:37.373+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[link] django's problem.</title><content type='html'>&lt;a href="http://metajack.wordpress.com/2008/06/11/the-problem-with-django/"&gt;http://metajack.wordpress.com/2008/06/11/the-problem-with-django/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;基本上我還滿贊同這篇文章的觀點,&lt;br /&gt;事實上我甚至覺得大部分正在開發中的軟體專案都應該建立一個以時程為主的release週期, (即regular release)&lt;br /&gt;而非是現在主要是以功能完成度為主的週期.&lt;br /&gt;因為開發者通常都過於樂觀還有自信太強, &lt;br /&gt;常常低估了完成軟體的時間, 對於沒做過的功能不管聽起來再怎麼簡單都最好還是保守點比較好,&lt;br /&gt;像django的1.0也實在是拖太久了 難怪&lt;a href="http://code.djangoproject.com/ticket/2070"&gt;ticket#2070&lt;/a&gt;會被拿出來鞭... 一個http streaming upload 的patch前前後後改了兩年多還是沒進trunk...真不知道是該說追求完美還是太龜毛了... :(&lt;br /&gt;&lt;br /&gt;像Ubuntu這樣的release週期我就覺得滿不錯的, 儘管每次的新版變動不會太大, 然後或多或少都會有bug, 但是至少是在建立一個正向循環並且能鼓勵新的開發者投入.&lt;br /&gt;&lt;br /&gt;當然還是要說Django真的很不錯就是了. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-1063817831558570646?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://metajack.wordpress.com/2008/06/11/the-problem-with-django/' title='[link] django&apos;s problem.'/><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/1063817831558570646/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=1063817831558570646' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1063817831558570646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1063817831558570646'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/06/link-djangos-problem.html' title='[link] django&apos;s problem.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-6046534370338667767</id><published>2008-06-10T23:23:00.004+08:00</published><updated>2008-06-10T23:33:38.606+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><category scheme='http://www.blogger.com/atom/ns#' term='acrobat'/><title type='text'>Acrobat大冒險.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_VE6oUeg-MFI/SE6eXNNpaoI/AAAAAAAAAYg/lBUJDDS6u0U/s1600-h/adobe2.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_VE6oUeg-MFI/SE6eXNNpaoI/AAAAAAAAAYg/lBUJDDS6u0U/s400/adobe2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5210275940435323522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;沒有替Acrobat廣告的意思, 只是發現原來Acrobat比折凳更強.. XD&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_VE6oUeg-MFI/SE6dspRmnmI/AAAAAAAAAYY/MsS_zi20KQA/s1600-h/adobe.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_VE6oUeg-MFI/SE6dspRmnmI/AAAAAAAAAYY/MsS_zi20KQA/s400/adobe.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5210275209233735266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://promotion.yahoo.co.jp/adobe/"&gt;Acrobat大冒險&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-6046534370338667767?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/6046534370338667767/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=6046534370338667767' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6046534370338667767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6046534370338667767'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/06/acrobat.html' title='Acrobat大冒險.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_VE6oUeg-MFI/SE6eXNNpaoI/AAAAAAAAAYg/lBUJDDS6u0U/s72-c/adobe2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-2549324681100693527</id><published>2008-06-10T18:42:00.009+08:00</published><updated>2008-06-10T22:21:13.791+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='ast'/><title type='text'>[tips] evaluate python dictionaries from file safely.</title><content type='html'>有時候程式設計師總是會有點奇怪的潔癖,&lt;br /&gt;例如這個讀設定檔的module就是這一類的產物, &lt;br /&gt;說真的python有內建csv,ini跟xml之類的parser,&lt;br /&gt;3rd party的parser也到處都是, 特定情況下其實execfile,exec,eval也都沒什麼錯,如果設定檔可以用.py結尾, 直接import 就可以了,再加上其實python 2.6就要支援&lt;a href="http://pyside.blogspot.com/2008/03/ast-compilation-from-python.html"&gt;direct  modify ast tree&lt;/a&gt;了...實在看不出有什麼必要硬要用python的parser來讀進設定檔,不過話說回來如果只是想要安全的從檔案裡取出一個dictionary,這個小巧的module倒也不失為一個好方法.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;# -*- coding: utf-8 -*-&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;    safe_dict&lt;br /&gt;    ~~~&lt;br /&gt;    The `safe_dict` module helps you read a dictionary from a file using python syntax.&lt;br /&gt;       &lt;br /&gt;    The key and values in dictionary are string only.&lt;br /&gt;    &lt;br /&gt;    File `dict.file` (file which we read dict from) should only contain an anonymous dictionary.&lt;br /&gt;    &lt;br /&gt;    Support only Python 2.5+.&lt;br /&gt;    &lt;br /&gt;    reference:&lt;br /&gt;        http://docs.python.org/dev/library/_ast&lt;br /&gt;        http://dev.pocoo.org/hg/sandbox/file/08541da989dd/ast/ast.py&lt;br /&gt;        http://pyside.blogspot.com/2008/03/ast-compilation-from-python.html&lt;br /&gt;    ~~~&lt;br /&gt;    :Author: http://timchen119.blogspot.com&lt;br /&gt;    :license: Python License&lt;br /&gt;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;&lt;br /&gt;from __future__ import with_statement&lt;br /&gt;import _ast &lt;br /&gt;#need python 2.5+&lt;br /&gt;&lt;br /&gt;def safe_eval_literal(node_or_string):&lt;br /&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;    Safe evaluate a literal.&lt;br /&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;    _safe_names = {'None': None, 'True': True, 'False': False}&lt;br /&gt;    if isinstance(node_or_string, basestring):&lt;br /&gt;        node_or_string = compile(node_or_string, &amp;quot;&amp;lt;unknown&amp;gt;&amp;quot;, &amp;quot;eval&amp;quot; , _ast.PyCF_ONLY_AST)&lt;br /&gt;    if isinstance(node_or_string, _ast.Expression):&lt;br /&gt;        node_or_string = node_or_string.body&lt;br /&gt;    def _convert(node):&lt;br /&gt;        if isinstance(node, _ast.Str):&lt;br /&gt;            return node.s&lt;br /&gt;        elif isinstance(node, _ast.Dict):&lt;br /&gt;            return dict((_convert(k), _convert(v)) for k, v&lt;br /&gt;                        in zip(node.keys, node.values))&lt;br /&gt;        elif isinstance(node, _ast.Name):&lt;br /&gt;            if node.id in _safe_names:&lt;br /&gt;                return _safe_names[node.id] &lt;br /&gt;        raise ValueError('malformed string')&lt;br /&gt;    return _convert(node_or_string)&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;def safe_read_dict_from(file):    &lt;br /&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;    Safe evaluate a dictionary from a file.&lt;br /&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;    try:        &lt;br /&gt;        with open(file,'r') as f:&lt;br /&gt;            source = f.read()&lt;br /&gt;            node = compile(source, &amp;quot;&amp;lt;unknown&amp;gt;&amp;quot;, &amp;quot;eval&amp;quot;, _ast.PyCF_ONLY_AST)&lt;br /&gt;&lt;br /&gt;            if isinstance(node.body, _ast.Dict):&lt;br /&gt;                return safe_eval_literal(node.body)&lt;br /&gt;            else:&lt;br /&gt;                raise&lt;br /&gt;    except:&lt;br /&gt;        raise&lt;br /&gt;    &lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;    try:&lt;br /&gt;        dict_we_want = safe_read_dict_from('dict.file')&lt;br /&gt;    except Exception,e:&lt;br /&gt;        print e &lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;用法: 只要在你的dict.file裡加上一個python dictionary即可, 就可以用這個module讀入dict.file,為了安全性考量,也只讀入字串.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-2549324681100693527?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/2549324681100693527/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=2549324681100693527' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2549324681100693527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2549324681100693527'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/06/tips-safe-evaluation-python-dictionary.html' title='[tips] evaluate python dictionaries from file safely.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-8717579433258915514</id><published>2008-06-04T22:44:00.005+08:00</published><updated>2008-06-04T23:27:14.038+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>"""習武不是拿來傷害別人的..."""</title><content type='html'>"""&lt;br /&gt;「習武不是拿來傷害別人的！」陳夆昀（卅七歲）說，被打時他曾一度很火大，曾朝其中一人鼻子出拳，而勾倒另一人後，也起腳要往頭部踹下去，但兩次都忍下來，硬是把拳腳縮回來。&lt;br /&gt;&lt;br /&gt;身高一百八十一公分、體重超過一百公斤的陳夆昀，十三歲開始練習各種格鬥武技。民國八十六年被已故日本知名摔角選手「馬場」選為「台灣唯一接班人」，還到日本接受訓練；後來因傷回台，成立「風雲」隨扈公司，在李敖參選總統及藝人林青霞父喪回台時擔任隨扈工作。&lt;br /&gt;&lt;br /&gt;二○○二年美國大西洋城舉行的國際職業摔角大賽，陳夆昀以「白獅」身分出賽，僅花了四分鐘，就用自創絕招重創美國好手「愛國者」，拿下台灣第一座世界職業摔角冠軍。&lt;br /&gt;&lt;br /&gt;去年八月三日凌晨，陳夆昀騎機車載女友，在板橋市館前西路四十六巷，與正在倒車的徐祥恩（廿八歲）、黃梓曦（廿八歲）擦撞，當時陳夆昀與女友未受傷，機車受損輕微。陳夆昀說，原本不想追究，徐祥恩卻持鋁棒攻擊，黃梓曦也對他揮拳毆打，兩人還警告他「如果敢報警，就到醫院堵你」。&lt;br /&gt;&lt;br /&gt;陳夆昀說：「如果我真的出手，我擔心被害人變成他們。」他要保護女友，才用左手格擋，「我算一算，左手大概擋了五十多下鋁棒，手才斷了」。&lt;br /&gt;&lt;br /&gt;後來陳夆昀提出傷害、恐嚇告訴，檢方起訴徐、黃兩人，並具體求刑七月。&lt;br /&gt;&lt;br /&gt;板橋地院昨天開言詞辯論庭，徐、黃否認恐嚇，陳夆昀的辯護律師才揭露陳夆昀世界職業摔角冠軍的背景，並稱因他有體格優勢才不致受重傷，若一般人可能會被打死。兩人得知打的是世界摔角冠軍，甚感訝異。公訴檢察官以徐、黃兩人下手兇殘，又不知悔悟，當庭加重求刑至十個月有期徒刑。 &lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;&lt;a href="http://udn.com/NEWS/SOCIETY/SOC7/4369400.shtml"&gt;轉自聯合新聞網&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;看到聯合新聞網的新聞, 覺得這位&lt;a href="http://big5.southcn.com/gate/big5/www.southcn.com/sports/star2/wwebabe/news/200401130624.htm"&gt;陳夆昀&lt;/a&gt;實在真了不起. &lt;br /&gt;&lt;br /&gt;令人打從心底佩服. 這才是真強者啊...&lt;br /&gt;&lt;br /&gt;要我是世界職業摔角冠軍大概就會搞個炸彈摔然後徒手把對方劈成兩半再扔到垃圾筒了... &lt;br /&gt;&lt;br /&gt;還好我只會摔車還摔的不大好看 XD&lt;br /&gt;&lt;br /&gt;==&lt;br /&gt;&lt;br /&gt;突然想起國小那位很兇的老師常講的話: "讀書不是爽就好..." 嘖嘖...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-8717579433258915514?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/8717579433258915514/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=8717579433258915514' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8717579433258915514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8717579433258915514'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/06/blog-post.html' title='&quot;&quot;&quot;習武不是拿來傷害別人的...&quot;&quot;&quot;'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-5503979496229696879</id><published>2008-06-03T11:54:00.003+08:00</published><updated>2008-06-03T12:21:07.388+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bzr'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[tips] add bzr sftp support when you have no compiler on target platform (pure python )</title><content type='html'>&lt;a href="http://bazaar-vcs.org/"&gt;bzr&lt;/a&gt; depends on paramiko to provide sftp support. While paramiko itself is pure python, its dependency pycrypto is not. PyCrypto have lots of C-extenstion and you'll need a compiler to install it. However since we only use part of pycrypto (to have sftp support for bzr), we could just add some stub files to prevent the [deploy] problem.&lt;br /&gt;&lt;br /&gt;I have made a modified pure python version pycrypto and packaged it with paramiko 1.7.3, so after you installed bzr (use standard python setup.py or easy_install), you just extract &lt;a href="http://kalug.linux.org.tw/~tim/lgpl/paramiko-1.7.3-bzr-sftp-purepy.tgz"&gt;paramiko-1.7.3-bzr-sftp-purepy.tgz&lt;/a&gt;&lt;br /&gt;at your python site-package directory (make sure you don't have paramiko and pycrypto already exists, if you do, you don't need to install this package anyway) and happy bzr...!&lt;br /&gt;&lt;br /&gt;This also makes bzr only depend on python so you could easily deploy it on a machine which doesn't have c compiler and still have sftp support.&lt;br /&gt;&lt;br /&gt;Warning: this pacakage only add bzr sftp support and provides nothing besides this, and these COULD break other python packages which also used paramiko and pycrypto, so don't use it if you don't really need it. And the only tests I've done is on my own (embedded linux) machine, Basically it's just for my own use, I have warned you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-5503979496229696879?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/5503979496229696879/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=5503979496229696879' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5503979496229696879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5503979496229696879'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/06/tips-add-bzr-sftp-support-when-you-have.html' title='[tips] add bzr sftp support when you have no compiler on target platform (pure python )'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4052953499356808372</id><published>2008-05-06T13:10:00.007+08:00</published><updated>2008-05-14T01:30:41.446+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='ext2'/><category scheme='http://www.blogger.com/atom/ns#' term='ext3'/><title type='text'>[tips]  如何讓你的ext2/ext3在神出鬼沒的地雷戰場上存活.</title><content type='html'>喜歡用自由軟體的人其實應該都滿常遇到地雷,&lt;br /&gt;通常也練就了一身人間即時掃雷機的本事,&lt;br /&gt;但有些時候實在是地雷太小顆 (但是倒炸的很大力), &lt;br /&gt;又發生在想都想不到的地方, 要讓人不嗚呼哀哉也難.&lt;br /&gt;就像開車時你不超車會有別人超車, &lt;br /&gt;你不想用新版會有別人用新版, &lt;br /&gt;軟體相容性的問題往往是會不請自來的.&lt;br /&gt;&lt;br /&gt;lloyd大大今天跟我說了一個最近踩到地雷的故事, &lt;br /&gt;他拿了一顆用ext2格式化過的400g硬碟, &lt;br /&gt;拿到他弟弟灌了ext2 driver的windows上執行,&lt;br /&gt;之前好一陣子都能讀取寫入, 操作上都沒問題, &lt;br /&gt;最近卻怎麼格式化都不能用.&lt;br /&gt;(在windows上會問你要不要重新格式化)&lt;br /&gt;換了小一點的硬碟也不行. 最後他深入追查才發現es2fprogs這個最近更新的套件更新了mkfs.ext2這個程式, 預設的inode改變成256 bytes. 所以要用&lt;br /&gt;mkfs.ext2 -I 128 讓預設的inode設成原本的128 bytes.&lt;br /&gt;&lt;br /&gt;ok問題解決了, 聽起來只是windows ext2 driver跟e2fsprogs相容性的問題對不對?&lt;br /&gt;但仔細一想問題可能就很大了, 今天你在debian lenny格式化了一顆ext2硬碟, 要放到穩定的重要server上(恰巧是debian sarge),卻不能讀了. &lt;br /&gt;今天如果你沒有"恰巧"讀到&lt;a href="http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.40.5"&gt;這段&lt;/a&gt;,&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;E2fsprogs 1.40.5 (January 27, 2008)&lt;br /&gt;&lt;br /&gt;Fix a potential overflow big in e2image if the device name is too long.&lt;br /&gt;&lt;br /&gt;Mke2fs will now create new filesystems with 256 byte inodes and the ext_attr feature flag by default. &lt;br /&gt;This allows for much better future compatibity with ext4 and speeds up extended attributes even on ext3 filesystems.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;並把他放在心上的話, 你很可能就炸掉了.&lt;br /&gt;(不過事實上可能就算你讀到這段也還是會被炸掉...)&lt;br /&gt;&lt;br /&gt;此外/boot通常有人會用ext2而非格式化成xfs或raiser3什麼的(甚至連ext3都不用, 因為穩定),也免不了會踩到這個雷,&lt;br /&gt;&lt;a href="http://www.linuxplanet.com/linuxplanet/tutorials/6480/1/"&gt;這裡"恰巧"就有個血淋淋的例子.  (GRUB vs. the Inodes: Who Needs a Bootable System, Anyway? )&lt;/a&gt; 喔, 只是不能開機而已嘛...orz&lt;br /&gt;&lt;br /&gt;備註:&lt;br /&gt;e2fsprogs version:&lt;br /&gt;Gentoo-stable: 1.40.8&lt;br /&gt;lenny (next debian stable): &lt;a href="http://packages.debian.org/lenny/e2fsprogs"&gt;1.40.8&lt;/a&gt;&lt;br /&gt;etch (debian stable): 1.39+1.40&lt;br /&gt;&lt;br /&gt;重要指令:&lt;br /&gt;&lt;br /&gt;mkfs.ext2 -I 128 /dev/???&lt;br /&gt;mkfs.ext3 -I 128 /dev/???&lt;br /&gt;&lt;br /&gt;如果你還要向前相容性的話, 從現在開始別忘了mkfs.ext3時加上-I 128 , 否則... 就歡樂的炸吧... XD&lt;br /&gt;&lt;br /&gt;感謝lloyd大大更正: 在debian etch (kernel 2.6.18) 上應該還是可以讀取256 bytes inode的格式, sarge是2.4 kernel可能就不行了. (根據mkfs.ext2的man page說法是2.4 kernel會沒辦法mount)&lt;br /&gt;&lt;br /&gt;update: fix link.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4052953499356808372?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4052953499356808372/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4052953499356808372' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4052953499356808372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4052953499356808372'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/05/tips-ext2ext3.html' title='[tips]  如何讓你的ext2/ext3在神出鬼沒的地雷戰場上存活.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7107861611942023251</id><published>2008-04-22T12:11:00.006+08:00</published><updated>2008-04-22T13:49:27.057+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='awk'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='gpl'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='serial'/><title type='text'>[tips] poorman's uudecode</title><content type='html'>For those who cursed by ash and awk, welcome to 80's ! &lt;br /&gt;&lt;br /&gt;now you can send everything in ASCII -- hooray!! &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;#!/bin/sh&lt;br /&gt;#&lt;br /&gt;# uudecode.sh &lt;br /&gt;#&lt;br /&gt;# Author: Ximian, Inc.&lt;br /&gt;# &lt;br /&gt;# Modified: by timchen119 at http://timchen119.blogspot.com from Ximian go-gnome's GPL code&lt;br /&gt;#&lt;br /&gt;# Usage: uudecode.sh encodedfile &amp;gt; decodefile&lt;br /&gt;#&lt;br /&gt;# License: GPL&lt;br /&gt;#&lt;br /&gt;# Download: http://kalug.linux.org.tw/~tim/gpl/uudecode.sh&lt;br /&gt;#&lt;br /&gt;# Ref: http://ftp.cesnet.cz/pub/ximian-gnome/installers/go-gnome&lt;br /&gt;#&lt;br /&gt;# The Ximian Desktop Pre-Installer&lt;br /&gt;#&lt;br /&gt;# Comments to:&lt;br /&gt;#   distribution@ximian.com&lt;br /&gt;#&lt;br /&gt;# Copyright 2000-2001, Ximian, Inc.&lt;br /&gt;#&lt;br /&gt;# This program is free software; you can redistribute it and/or modify&lt;br /&gt;# it under the terms of the GNU General Public License as published by&lt;br /&gt;# the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;# (at your option) any later version.&lt;br /&gt;#&lt;br /&gt;# This program is distributed in the hope that it will be useful, but&lt;br /&gt;# WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU&lt;br /&gt;# General Public License for more details.&lt;br /&gt;#&lt;br /&gt;# You should have received a copy of the GNU General Public License&lt;br /&gt;# along with this program; if not, write to the Free Software&lt;br /&gt;# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,&lt;br /&gt;# USA.&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;# This script and its embedded programs are distributed with&lt;br /&gt;# absolutely, positively NO WARRANTY WHATSOEVER, without even the&lt;br /&gt;# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR&lt;br /&gt;# PURPOSE.  The author and Ximian, Inc. take no responsibility for&lt;br /&gt;# the consequences of running this script.&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;CACHEDIR=/tmp&lt;br /&gt;_awk=&amp;quot;awk&amp;quot;&lt;br /&gt;&lt;br /&gt;# poor man's uudecode&lt;br /&gt;_awkprog=&amp;quot;$CACHEDIR/uudecode.awk&amp;quot;&lt;br /&gt;# encoded file&lt;br /&gt;_uudecode_in=$1&lt;br /&gt;&lt;br /&gt;#awk-script&lt;br /&gt;cat &amp;gt; ${_awkprog} &amp;lt;&amp;lt;EOF&lt;br /&gt;    function x(l, p) {&lt;br /&gt;      n=&amp;quot;!\&amp;quot;#$%&amp;amp;'()*+,-./0123456789:;&amp;lt;=&amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_&amp;quot;;&lt;br /&gt;      return index(n,substr(l,p+1,1));&lt;br /&gt;    }&lt;br /&gt;    /^begin/ {}&lt;br /&gt;    /^[^be]/ {&lt;br /&gt;     len = x(\$0, 0);&lt;br /&gt;     for (i=1;len&amp;gt;0;i+=4) {&lt;br /&gt;      a=x(\$0,i);b=x(\$0,i+1);c=x(\$0,i+2);d=x(\$0,i+3);&lt;br /&gt;      printf(&amp;quot;%c&amp;quot;,a*4+b/16);&lt;br /&gt;      if (len&amp;gt;1) {&lt;br /&gt;       printf(&amp;quot;%c&amp;quot;,b*16+c/4);&lt;br /&gt;       if (len&amp;gt;2) {&lt;br /&gt;        printf(&amp;quot;%c&amp;quot;,c*64+d);&lt;br /&gt;       }&lt;br /&gt;      }&lt;br /&gt;      len-=3;&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;EOF&lt;br /&gt;${_awk} -f ${_awkprog} &amp;lt; ${_uudecode_in}&lt;br /&gt;rm -f ${_awkprog}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;a href="http://kalug.linux.org.tw/~tim/gpl/uudecode.sh"&gt;get  uudecode.sh at here.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7107861611942023251?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7107861611942023251/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7107861611942023251' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7107861611942023251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7107861611942023251'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/04/tips-poormans-uudecode.html' title='[tips] poorman&apos;s uudecode'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-6487471660754092695</id><published>2008-04-22T09:07:00.003+08:00</published><updated>2008-04-22T09:32:22.653+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[funny] [links] [kuso] Python がイマイチ人気にならないたった一つの理由</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/seiunsky/20080417/1208454191"&gt;http://d.hatena.ne.jp/seiunsky/20080417/1208454191&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;話說不小心點到這... 原本還想認真看看理由的... 結果... @@&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. 日本Python的入門書不好 !?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/41WK8K88X1L._SL160_.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px;" src="http://ecx.images-amazon.com/images/I/41WK8K88X1L._SL160_.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;    *  「最初（に読むPython本）はみんPyだよねー」&lt;br /&gt;&lt;br /&gt;==&gt; 「最初はみんな&lt;a href="http://d.hatena.ne.jp/keyword/%a4%aa%a4%c3%a4%d1%a4%a4"&gt;おっぱい&lt;/a&gt;だいすきからスタートする」&lt;br /&gt;&lt;br /&gt;2. 著名書商 O'reilly 也很糟糕 ?!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/516SI9MPuRL._SL160_.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px;" src="http://ecx.images-amazon.com/images/I/516SI9MPuRL._SL160_.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;    *  「おれ、今Pyチューで勉強してるんだ！」&lt;br /&gt;&lt;br /&gt;==&gt; こんなセリフを女子に聞かれたら間違いなく「&lt;a href="http://d.hatena.ne.jp/keyword/%a4%aa%a4%c3%a4%d1%a4%a4"&gt;おっぱい&lt;/a&gt;にチューして何の勉強をしているの！へんたい！」と思われるのですから、これは本当に卑猥ですね。&lt;br /&gt;&lt;br /&gt;3. PyPy實作不好 !?&lt;br /&gt;&lt;br /&gt;    *   「おれ、いま PyPy の開発してるんだ！」&lt;br /&gt;    * 「ただの人間には興味ありません。PyPy 開発に興味のある人は私のところに来なさい！以上！」&lt;br /&gt;    * 「PyPyを高速で動かす方法を思いついた！」&lt;br /&gt;&lt;br /&gt;接下來就開始把python跟&lt;a href="http://d.hatena.ne.jp/keyword/%a4%aa%a4%c3%a4%d1%a4%a4"&gt;おっぱい&lt;/a&gt;扯在一起的大爆走了 XD (&lt;a href="http://www.mindswap.org/~katz/pychinko/"&gt;pychinko&lt;/a&gt;, &lt;a href="http://www.google.com.tw/url?sa=t&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fwww.diveintopython.org%2F&amp;ei=AD8NSM6WKpqo6wPA0LzbDQ&amp;usg=AFQjCNGQNAs7-XfPQXeZePlQKHmTA13dJQ&amp;sig2=Jc9iACNJjHchJ_oj1MADUQ"&gt;Dive Into Python&lt;/a&gt;... 原來Python是完全的成人向啊...orz)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-6487471660754092695?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/6487471660754092695/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=6487471660754092695' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6487471660754092695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6487471660754092695'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/04/funny-links-kuso-python.html' title='[funny] [links] [kuso] Python がイマイチ人気にならないたった一つの理由'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-8610782950289752334</id><published>2008-04-15T14:46:00.003+08:00</published><updated>2008-04-15T14:52:55.994+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><title type='text'>[tips] upgrading to gentoo 2008.0</title><content type='html'>Well just as usuals, you can upgrades to gentoo 2008.0 quickly. (beta?)&lt;br /&gt;&lt;br /&gt;#eselect profile list&lt;br /&gt;Available profile symlink targets:&lt;br /&gt;  [1]   default-linux/x86/2006.1&lt;br /&gt;  [2]   default-linux/x86/no-nptl&lt;br /&gt;  [3]   default-linux/x86/2006.1/desktop&lt;br /&gt;  [4]   default-linux/x86/2007.0&lt;br /&gt;  [5]   default-linux/x86/2007.0/desktop&lt;br /&gt;  [6]   hardened/x86/2.6&lt;br /&gt;  [7]   selinux/2007.0/x86&lt;br /&gt;  [8]   selinux/2007.0/x86/hardened&lt;br /&gt;  [9]   default/linux/x86/2008.0&lt;br /&gt;  [10]  default/linux/x86/2008.0/desktop *&lt;br /&gt;  [11]  default/linux/x86/2008.0/developer&lt;br /&gt;  [12]  default/linux/x86/2008.0/no-nptl&lt;br /&gt;  [13]  default/linux/x86/2008.0/server&lt;br /&gt;  [14]  hardened/linux/x86&lt;br /&gt;&lt;br /&gt;For my case, just type 'eselect profile set 10'&lt;br /&gt;and emerge world again.&lt;br /&gt;&lt;br /&gt;I'm not &lt;a href="http://www.gentoo.org/doc/en/openrc-migration.xml"&gt;migrating to OpenRC and baselayout2&lt;/a&gt; yet, however I'm using KDE4.0.3 now, so I think I have enough un-stable-ness to worry about. ;0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-8610782950289752334?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/8610782950289752334/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=8610782950289752334' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8610782950289752334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8610782950289752334'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/04/tips-upgrading-to-gentoo-20080.html' title='[tips] upgrading to gentoo 2008.0'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-5390914766979810804</id><published>2008-04-15T14:31:00.003+08:00</published><updated>2008-04-15T14:42:48.256+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='pyrex'/><title type='text'>[tips] using pyrex to do the argv[0] trick in linux using python.</title><content type='html'>A trick to rename python process in output of 'top' and 'ps'.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;set_argv.c:&lt;br /&gt;&lt;br /&gt;#include &lt;Python.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;string.h&gt;&lt;br /&gt;&lt;br /&gt;int get_argc(){&lt;br /&gt;    int argc;&lt;br /&gt;    char **argv;&lt;br /&gt;    Py_GetArgcArgv(&amp;argc, &amp;argv);&lt;br /&gt;    return argc;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void set_argv_via_number(int num,char *str){&lt;br /&gt;    int argc;&lt;br /&gt;    char **argv;&lt;br /&gt;    Py_GetArgcArgv(&amp;argc, &amp;argv);&lt;br /&gt;    strncpy(argv[num], str , strlen(str));&lt;br /&gt;    memset(&amp;argv[num][strlen(str)], '\0', strlen(&amp;argv[num][strlen(str)]));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;set_processname.pyx:&lt;br /&gt;&lt;br /&gt;#Warning: this module is not safe and may involve some dirty hacks.&lt;br /&gt;import sys,dl,glob&lt;br /&gt;cdef extern int get_argc()&lt;br /&gt;cdef extern void set_argv_via_number(int num,char *buf)&lt;br /&gt;def set_argv0(thename):&lt;br /&gt;    set_argv_via_number(0,thename)&lt;br /&gt;&lt;br /&gt;def set_argv(thename):&lt;br /&gt;    argc = get_argc()&lt;br /&gt;    print argc&lt;br /&gt;    for i in xrange(argc+1):&lt;br /&gt;        if i==0:&lt;br /&gt;            set_argv0(thename)&lt;br /&gt;        else:&lt;br /&gt;            pass&lt;br /&gt;def set_name(thename):&lt;br /&gt;    if sys.platform == 'linux2':&lt;br /&gt;        # Set process name.  Only works on Linux &gt;= 2.1.57.&lt;br /&gt;        try:&lt;br /&gt;            libc_loc = glob.glob("/lib/libc.so*")[0]&lt;br /&gt;            libc = dl.open(libc_loc)&lt;br /&gt;            libc.call('prctl', 15, thename, 0, 0, 0) # 15 is PR_SET_NAME&lt;br /&gt;        except:&lt;br /&gt;            pass    &lt;br /&gt;&lt;br /&gt;def set_processname(thename):&lt;br /&gt;    space_padding_num = len(sys.argv[0])-len(thename)&lt;br /&gt;    if space_padding_num &lt; 0:&lt;br /&gt;        #thename is longer than original name&lt;br /&gt;        newname = thename[:len(sys.argv[0])]&lt;br /&gt;    else:&lt;br /&gt;        #thename is shorter. add padding.&lt;br /&gt;        newname = thename + " " * space_padding_num&lt;br /&gt;&lt;br /&gt;    set_name(newname)&lt;br /&gt;    set_argv(newname)&lt;br /&gt;&lt;br /&gt;compile.sh:&lt;br /&gt;#!/bin/sh&lt;br /&gt;CC=mipsel-linux-gcc&lt;br /&gt;&lt;br /&gt;pyrexc set_processname.pyx&lt;br /&gt;$CC -c -fPIC -I/usr/include/python2.5/ set_argv.c&lt;br /&gt;$CC -c -fPIC -I/usr/include/python2.5/ set_processname.c&lt;br /&gt;$CC -shared set_argv.o set_processname.o -o set_processname.so&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-5390914766979810804?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/5390914766979810804/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=5390914766979810804' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5390914766979810804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5390914766979810804'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/04/tips-using-pyrex-to-do-argv0-trick-in.html' title='[tips] using pyrex to do the argv[0] trick in linux using python.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-6947632476254155821</id><published>2008-04-15T14:12:00.003+08:00</published><updated>2008-04-15T14:43:37.183+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='pysco'/><title type='text'>[tips] building psyco on non-x86 platform. (ie. linux mips little endian)</title><content type='html'>The trick is to build psyco in ivm mode. The mode slower than the native mode(ivm mode involves a prolog generated-vm, you guess), however it's the only way to compile psyco on non-x86 system. And cross-compiling with distutils is not a trivial stuff, so I just compile it directly.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mipsel-linux-gcc -pthread -fno-strict-aliasing -DNDEBUG -fPIC -DALL_STATIC=1 -Ic/ivm -I/usr/include/python2.5 -c c/psyco.c -o build/temp.linux-mipsel-2.5/c/psyco.o&lt;br /&gt;mipsel-linux-gcc -pthread -fno-strict-aliasing -DNDEBUG -fPIC -DALL_STATIC=1 -Ic/ivm -I/usr/include/python2.5 -c c/platform.c -o build/temp.linux-mipsel-2.5/c/platform.o&lt;br /&gt;mipsel-linux-gcc -pthread -shared build/temp.linux-i686-2.5/c/psyco.o build/temp.linux-mipsel-2.5/c/platform.o -L/usr/lib -lpython2.5 -o build/lib.linux-i686-2.5/psyco/_psyco.so&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This generates the C-module extension, and just copy all of py files to correct path and enjoy psyco speed-up! (well, not quite a case for me. It just use way too much memory on our embedded system. But I think maybe it'll useful in other project.)&lt;br /&gt;&lt;br /&gt;ps: I should mentioned that I'm doing this on a uclibc linux system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-6947632476254155821?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/6947632476254155821/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=6947632476254155821' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6947632476254155821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6947632476254155821'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/04/tips-building-psyco-on-non-x86-platform.html' title='[tips] building psyco on non-x86 platform. (ie. linux mips little endian)'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-5522402921243134751</id><published>2008-04-15T14:06:00.002+08:00</published><updated>2008-04-15T14:12:19.975+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>[tips] if as a pure function in python</title><content type='html'>&lt;a href="http://okmij.org/ftp/Scheme/if-function.txt"&gt;http://okmij.org/ftp/Scheme/if-function.txt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;here is a trick that we could rewrite a customized not-a-special-form IF in python.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;iftrick.py:&lt;br /&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;def func_true():&lt;br /&gt;    print "true!"&lt;br /&gt;&lt;br /&gt;def func_false():&lt;br /&gt;    print "false!"&lt;br /&gt;&lt;br /&gt;def my_if(my_cond,then_func,else_func):&lt;br /&gt;    eval((then_func, else_func)[not my_cond].func_code,vars())&lt;br /&gt;&lt;br /&gt;condition = True&lt;br /&gt;&lt;br /&gt;my_if(condition,func_true,func_false)&lt;br /&gt;&lt;br /&gt;condition = False&lt;br /&gt;&lt;br /&gt;my_if(condition,func_true,func_false)&lt;br /&gt;&lt;br /&gt;===&lt;br /&gt;#python iftrick.py &lt;br /&gt;true!&lt;br /&gt;false!&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-5522402921243134751?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/5522402921243134751/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=5522402921243134751' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5522402921243134751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5522402921243134751'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/04/tips-if-as-pure-function-in-python.html' title='[tips] if as a pure function in python'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-2475276455229271837</id><published>2008-02-06T00:41:00.001+08:00</published><updated>2008-02-06T01:23:53.202+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='etch'/><category scheme='http://www.blogger.com/atom/ns#' term='lenny'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Am I getting old or ....The lenny is coming this year???</title><content type='html'>根據 &lt;a href="http://lwn.net/Articles/267722/"&gt;http://lwn.net/Articles/267722/&lt;/a&gt;的說法, &lt;br /&gt;&lt;br /&gt;下一個版本的 debian (lenny) 將在今年9月release. &lt;br /&gt;&lt;br /&gt;這可真是出乎我預期的快... etch... 不是去年四月才出的嗎? &lt;br /&gt;&lt;br /&gt;**&lt;小孩勿看&gt;** 大便 難道真的落屎了嗎? **&lt; / 小孩勿看&gt;**&lt;br /&gt;&lt;br /&gt;然後話說 /bin/sh link to dash 有了ubuntu帶頭衝之後 還真的debian就跟進了. &lt;br /&gt;&lt;br /&gt;我的預言(詛咒)成真?! 看來lloyd大又要怨恨了 :P &lt;br /&gt;&lt;br /&gt;(話說 難道再下版inittab也是難逃upstart之手了嗎??? ...有待下回茅房分解...) &lt;br /&gt;&lt;br /&gt;這一行果然是很難混的啊.... XD&lt;br /&gt;&lt;br /&gt;還有python 2.5.X 啥時要給我進default啊... 時間也該到了吧...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-2475276455229271837?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/2475276455229271837/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=2475276455229271837' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2475276455229271837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2475276455229271837'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/02/am-i-getting-old-or-lenny-is-coming.html' title='Am I getting old or ....The lenny is coming this year???'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-3038898049513953005</id><published>2008-01-31T19:56:00.000+08:00</published><updated>2008-01-31T21:07:31.613+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='arc'/><category scheme='http://www.blogger.com/atom/ns#' term='scheme'/><title type='text'>Arc is released. and is it a Blub?</title><content type='html'>&lt;a href="http://arclanguage.org/"&gt;http://arclanguage.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這兩天幾乎網路上所有lisp programmers都在討論Arc,&lt;br /&gt;這個著名lisp hacker, &lt;a href="http://www.paulgraham.com/"&gt;Paul Graham&lt;/a&gt;所發明的lisp dialect, 一度被認為是vaporware的語言,在前天release了.&lt;br /&gt;&lt;br /&gt;Paul Graham對於lisp社群的貢獻是無庸致疑的, &lt;br /&gt;但這次他所公開release的Arc則是讓不少人大失所望. &lt;br /&gt;畢竟這是他從他首次宣稱Arc is a better lisp以來已經過了6-7年之後釋出的版本,&lt;br /&gt;"just another lisp dialect"似乎是不少lisp programmers的一致意見,&lt;br /&gt;另外此次版本不支援unicode只支援ascii也引發大波瀾.&lt;br /&gt;我自己最近時間不多, 但也小試了一下, and just didn't 'get' it.&lt;br /&gt;我當然理解PG的"Syntax Do Matters", &lt;br /&gt;但我也不完全同意less typing是higher level programming language唯一的路,&lt;br /&gt;非常希望時間能證明, 這只是我們這些 "Blub" programmers的愚昧, 而Arc is indeed a better lisp and a better programming language. &lt;br /&gt;&lt;br /&gt;註: Blub是PG發明的字眼. 在著名的&lt;a href="http://www.paulgraham.com/avg.html"&gt;Beating the Averages&lt;/a&gt;一文裡用來回答一個有趣的問題: "如果lisp這麼好,為什麼都沒人用?" 而描述出一個所謂的Blub弔詭的情境:&lt;br /&gt;Blub是任一種介於比lisp低階 而比machine language高階之間的一個一般強度(power)的程式語言. (比如: python,java,ruby,perl,C/C++,haskell,ML-family,erlang,php,javascript,fortran,cobol.....anything not in lisp-family)&lt;br /&gt;Blub programmer則是Blub programming language的支持/使用者,&lt;br /&gt;Blub programmer的想法是, Blub語言 擁有某些特性X, &lt;br /&gt;他無法想像更低階語言怎麼能夠沒有特性X而能拿來認真的使用.&lt;br /&gt;同一時間他則認為Blub語言已經擁有所有他所需要的特性, 覺得所有比Blub語言更高階的特性全是無用而浪費時間的.&lt;br /&gt;&lt;br /&gt;註2: 我的標題意思是Paul Graham在文章裡說他自認為他的Arc語言已經好到可以讓他不想用CL或scheme才release了, 是否也是陷入了Blub弔詭裡?&lt;br /&gt;&lt;br /&gt;btw: you need patches to run current Arc on latest mzscheme(352+) or you're on windows(sadly), &lt;br /&gt;see &lt;a href="http://arclanguage.org/item?id=319"&gt;http://arclanguage.org/item?id=319&lt;/a&gt; and &lt;a href="http://jfkbits.blogspot.com/2008/01/digging-into-arc-in-24-macros-or-less.html"&gt;http://jfkbits.blogspot.com/2008/01/digging-into-arc-in-24-macros-or-less.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-3038898049513953005?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/3038898049513953005/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=3038898049513953005' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3038898049513953005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3038898049513953005'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/01/arc-is-released-and-is-it-blub.html' title='Arc is released. and is it a Blub?'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-8870383439782123537</id><published>2008-01-07T22:19:00.000+08:00</published><updated>2008-01-07T22:28:44.975+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tiobe'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Python:  programming language of 2007!</title><content type='html'>&lt;a href="http://www.tiobe.com/tpci.htm"&gt;January Headline: TIOBE declares Python as programming language of 2007!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;Python has been declared as programming language of 2007. It was a close finish, but in the end Python appeared to have the largest increase in ratings in one year time (2.04%). There is no clear reason why Python made this huge jump in 2007. Last month Python surpassed Perl for the first time in history, which is an indication that Python has become the "de facto" glue language at system level. It is especially beloved by system administrators and build managers. Chances are high that Python's star will rise further in 2008, thanks to the upcoming release of Python 3.&lt;br /&gt;"""&lt;br /&gt;&lt;a href="http://timchen119.blogspot.com/2007/12/import-antigravity.html"&gt;&lt;br /&gt;well, the reason is so obvious to me...it's all about gravity thingy ;)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-8870383439782123537?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/8870383439782123537/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=8870383439782123537' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8870383439782123537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8870383439782123537'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2008/01/python-programming-language-of-2007.html' title='Python:  programming language of 2007!'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-2003683431364838984</id><published>2007-12-13T16:31:00.000+08:00</published><updated>2007-12-13T19:26:37.840+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>python耶~~</title><content type='html'>今天同事跑來問我mips上有否uc版本的python, &lt;br /&gt;一問之下原來是某版子的tv tuner附的sample application是日本人用python寫的, 沒python的話沒辦法試.&lt;br /&gt;也剛剛好我也才剛編完mips uc版本的python 2.5.1沒多久, &lt;br /&gt;所以就剛好直接拿過去用.&lt;br /&gt;不過嚇我一跳,&lt;br /&gt;以前都是得主動出擊之外還要忍受冷嘲熱諷,&lt;br /&gt;這可是第一次有embedded業務上的code是要求"必須"有python的.&lt;br /&gt;:D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-2003683431364838984?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/2003683431364838984/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=2003683431364838984' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2003683431364838984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2003683431364838984'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/12/python.html' title='python耶~~'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7746843229953207730</id><published>2007-12-07T17:44:00.000+08:00</published><updated>2007-12-07T19:50:28.074+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='x.org'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='mouse'/><title type='text'>設定 Logitech G5 in Linux(xwindow)</title><content type='html'>因為lloyd大大說他可愛的老婆說, 『不要因為便宜而買，然後嫌棄壞掉，還不如買好一點，用久一點來的划算』,於是就買了一支logitech的g5滑鼠, 但是linux下沒有windows上的setpoint driver, 所以就自己來了.&lt;br /&gt;&lt;br /&gt;一插上就會自動有的功能包括左右中鍵滾輪上下跟硬體dpi設定,&lt;br /&gt;不過滾輪向左向右水平滾動的功能未啟動,&lt;br /&gt;另外大姆指鍵要自己做一些設定以符合自己的需求.&lt;br /&gt;&lt;br /&gt;首先是/etc/X11/xorg.conf的基本配置&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Section "ServerLayout"&lt;br /&gt;        Identifier     "Default Layout"&lt;br /&gt;        Screen      0  "Screen0" 0 0&lt;br /&gt;     InputDevice    "G5" "CorePointer"&lt;br /&gt;        InputDevice    "Keyboard0" "CoreKeyboard"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "InputDevice"&lt;br /&gt;    Identifier  "G5"&lt;br /&gt;    Driver      "evdev"&lt;br /&gt;    Option      "Name"  "Logitech USB Gaming Mouse"&lt;br /&gt;    Option      "ZAxisMapping" "4 5"&lt;br /&gt;    Option      "Emulate3Buttons" "no"&lt;br /&gt;EndSection&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;再來是啟動大姆指鍵,將Xwindow中鍵貼上(2)功能bind在大姆指鍵(8), 此外預設的滾輪左右(67)是顛倒的(括號中的數字表按鍵編號):&lt;br /&gt;~/.xmodmap&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;pointer = 1 8 3 4 5 7 6 2 9 10 11 12 13 14 15 16 17 18 19 20&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;最後則是啟動滾輪向左跟向右,讓他可以直接在我慣用的gnome terminal跟firefox裡移動分頁. 並在gnome-terminal裡將滾輪中鍵貼上的功能換成剪貼簿的貼上(即一般的Ctrl+V而非大姆指key的xwindow中鍵貼上)&lt;br /&gt;&lt;br /&gt;~/.xbindkeysrc.scm&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(xbindkey '("b:6") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Up]'")&lt;br /&gt;(xbindkey '("b:7") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Down]'")&lt;br /&gt;(xbindkey '("b:8") "/usr/bin/xvkbd -window gnome-terminal -xsendevent -text '\\[Control_L]\\[V]'")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;另外還有在firefox中調整滾輪的速度, 首先先在網址頁輸入about:config,&lt;br /&gt;然後找到mousewheel.withnokey.sysnumlines 設為false&lt;br /&gt;mousewheel.withnokey.numlines則設為6行或你喜歡的數字.&lt;br /&gt;&lt;br /&gt;如果以下3個套件沒裝的話要另外裝:&lt;br /&gt;x11-misc/xbindkeys x11-misc/xvkbd  x11-drivers/xf86-input-evdev&lt;br /&gt;(xbindkeys最好將guile的use flag打開, 若需要預設設定檔可以用xbindkeys -dg &gt; ~/.xbindkeysrc.scm 來初始化 真的看不習慣scheme/lisp的人可以考慮使用基本的config: xbindkeys -d &gt; ~/.xbindkeysrc, 當然scheme設定檔會稍微彈性一點)&lt;br /&gt;&lt;br /&gt;另外xmodmap ~/.xmodmap跟xbindkeys要設成在打開xwindows時啟動.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7746843229953207730?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7746843229953207730/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7746843229953207730' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7746843229953207730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7746843229953207730'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/12/logitech-g5-in-linuxxwindow.html' title='設定 Logitech G5 in Linux(xwindow)'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7422884056632591571</id><published>2007-12-05T22:44:00.000+08:00</published><updated>2007-12-05T23:13:01.234+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xkcd'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>新手: 你怎麼飛的???  答: import antigravity</title><content type='html'>這句可能會成為Python Programmers的本月(年?)最經典.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/353/"&gt;此句的出典為本月在駭客圈裡非常知名但原本推崇perl語言的XKCD網站漫畫 (xkcd的作者昨天學了python, 注意看的話會發現Tooltip上還寫著Perl, I'm Leaving you.)&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://imgs.xkcd.com/comics/python.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 550px;" src="http://imgs.xkcd.com/comics/python.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://entitycrisis.blogspot.com/2007/12/import-antigravity.html"&gt;隨即有網友作了T-shirt&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jitcrunch.cafepress.com/jitcrunch.aspx?bG9hZD1ibGFuayxibGFuazo3X0ZfYzIzLmpwZ3xsb2FkPUwwLGh0dHA6Ly9pbWFnZXMuY2FmZXByZXNzLmNvbS9pbWFnZS8yNDIxNDYwMV80MDB4NDAwLnBuZ3x8c2NhbGU9TDAsMTUwLDExMixXaGl0ZXxjb21wb3NlPWJsYW5rLEwwLEFkZCwxNjAsMTAyfGNwPXJlc3VsdCxibGFua3xzY2FsZT1yZXN1bHQsMCw0ODAsV2hpdGV8Y29tcHJlc3Npb249OTV8"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 550px;" src="http://jitcrunch.cafepress.com/jitcrunch.aspx?bG9hZD1ibGFuayxibGFuazo3X0ZfYzIzLmpwZ3xsb2FkPUwwLGh0dHA6Ly9pbWFnZXMuY2FmZXByZXNzLmNvbS9pbWFnZS8yNDIxNDYwMV80MDB4NDAwLnBuZ3x8c2NhbGU9TDAsMTUwLDExMixXaGl0ZXxjb21wb3NlPWJsYW5rLEwwLEFkZCwxNjAsMTAyfGNwPXJlc3VsdCxibGFua3xzY2FsZT1yZXN1bHQsMCw0ODAsV2hpdGV8Y29tcHJlc3Npb249OTV8" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;加上 &lt;a href="http://www.tiobe.com/tpci.htm"&gt;TIOBE Programming Community Index&lt;/a&gt; 的本月頭條: December Headline: Python surpasses Perl for the first time in history.&lt;br /&gt;這個月似乎python推廣的好消息不斷. (或是perl ain't cool anymore?!)&lt;br /&gt;&lt;br /&gt;所以, &lt;br /&gt;&lt;br /&gt;下次記得老闆要叫你"""飛給他看"""的時候, &lt;br /&gt;&lt;br /&gt;python可是連反重力模組都幫你寫好了. &lt;br /&gt;&lt;br /&gt;;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7422884056632591571?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7422884056632591571/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7422884056632591571' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7422884056632591571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7422884056632591571'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/12/import-antigravity.html' title='新手: 你怎麼飛的???  答: import antigravity'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7679906773032648111</id><published>2007-10-29T20:43:00.000+08:00</published><updated>2007-10-30T01:02:42.188+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flup'/><category scheme='http://www.blogger.com/atom/ns#' term='trac'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='fastcgi'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>[tips] using flup as trac's default fastcgi backend. (with lighttpd)</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;But thanks there's WSGI to save us ! I could just replace the fastcgi backend to &lt;a href="http://www.saddi.com/software/flup/dist/flup-0.5.tar.gz"&gt;flup-0.5 (latest, and author claims it maybe final version of flup) &lt;/a&gt; and SAVE MEMORY !&lt;br /&gt;&lt;br /&gt;and it's simple too,&lt;br /&gt;just install the flup package, and edit your old trac.fcgi / lighttpd's settings.&lt;br /&gt;&lt;br /&gt;trac.fcgi:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;try:&lt;br /&gt;    import pkg_resources&lt;br /&gt;    &lt;br /&gt;    from trac import __version__ as VERSION&lt;br /&gt;    from trac.web.main import dispatch_request&lt;br /&gt; &lt;br /&gt;    from flup.server.fcgi import WSGIServer   &lt;br /&gt;    WSGIServer(dispatch_request,maxSpare=100,minSpare=100,maxThreads=100).run()&lt;br /&gt;    &lt;br /&gt;except SystemExit:&lt;br /&gt;    raise&lt;br /&gt;except Exception, e:&lt;br /&gt;    print 'Content-Type: text/plain\r\n\r\n', &lt;br /&gt;    print 'Oops...'&lt;br /&gt;    print&lt;br /&gt;    print 'Trac detected an internal error:'&lt;br /&gt;    print&lt;br /&gt;    print e&lt;br /&gt;    print&lt;br /&gt;    import traceback&lt;br /&gt;    import StringIO&lt;br /&gt;    tb = StringIO.StringIO()&lt;br /&gt;    traceback.print_exc(file=tb)&lt;br /&gt;    print tb.getvalue()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;you can change the line which specify&lt;br /&gt;maxSpare,minSpare,maxThreads,I use 100,&lt;br /&gt;you should use less than 381 if you're using &lt;br /&gt;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,&lt;br /&gt;though I don't think anyone would need that high concurrency (who knows?!).&lt;br /&gt;&lt;br /&gt;below's also a sample setting in lighttpd.conf,&lt;br /&gt;&lt;br /&gt;what really matters here is to remember add a&lt;br /&gt;"max-procs" =&gt; 1 &lt;br /&gt;line in it, since we've already using thread pools technique, forking another process seems redundant (and WASTE memory).&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;fastcgi.server += ("/sandbox" =&gt;&lt;br /&gt;                   ("sandbox" =&gt;&lt;br /&gt;                     ("socket" =&gt; "/tmp/trac-sandbox.sock", #need to change for each&lt;br /&gt;                      "bin-path" =&gt; "/var/trac/cgi-bin/trac.fcgi",&lt;br /&gt;                      "max-procs" =&gt; 1, #default 4&lt;br /&gt;                      "check-local" =&gt; "disable",&lt;br /&gt;                      "bin-environment" =&gt;&lt;br /&gt;                        ("TRAC_ENV" =&gt; "/var/trac/sandbox")   &lt;br /&gt;                     )&lt;br /&gt;                   )&lt;br /&gt;                 )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;oh, btw I'm using trac-0.11dev, but I think any version below 0.11 which implement WSGI should also works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7679906773032648111?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7679906773032648111/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7679906773032648111' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7679906773032648111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7679906773032648111'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/10/tips-using-flup-as-tracs-default.html' title='[tips] using flup as trac&apos;s default fastcgi backend. (with lighttpd)'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-3183733805450112950</id><published>2007-10-21T19:34:00.000+08:00</published><updated>2007-10-21T20:27:24.603+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drm'/><category scheme='http://www.blogger.com/atom/ns#' term='xkcd'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[funny] Richard Stallman (RMS) 被忍者攻擊.</title><content type='html'>&lt;a href="http://slashdot.org/articles/07/10/20/2322202.shtml"&gt;來自 Slashdot 的報導&lt;/a&gt;: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Yale_Political_Union"&gt;耶魯大學政治聯盟（Yale &lt;br /&gt;Political Union, YPU,美國最古老的學生政治組織)的學生&lt;/a&gt;&lt;br /&gt;仿效&lt;a href="http://xkcd.com/225/"&gt;著名geek漫畫xkcd&lt;/a&gt;, 在耶魯一場Stallman對於DRM(Digital restrictions management)議題的演講裡, 對Stallman進行(玩笑似的)攻擊.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.yale.edu/ypu/blog/ninja2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://www.yale.edu/ypu/blog/ninja2.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://imgs.xkcd.com/comics/open_source.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://imgs.xkcd.com/comics/open_source.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Richard Stallman主要在耶魯大學講述的議題為DRM, &lt;br /&gt;RMS 認為現在大型商業公司(Apple,Microsoft,Sony)推動的DRM(數位著作權管理)是非法的,&lt;br /&gt;&lt;br /&gt;常用的DRM限制包括：&lt;br /&gt;&lt;br /&gt;    * 必須在指定電腦或播放機才能播放&lt;br /&gt;    * 必須在特定的日期前才能播放&lt;br /&gt;    * 播放的次數&lt;br /&gt;    * 傳輸到播放機的次數&lt;br /&gt;    * 燒錄到光碟的次數&lt;br /&gt;    * 以上限制的混合&lt;br /&gt;(&lt;a href="http://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E7%89%88%E6%9D%83%E7%AE%A1%E7%90%86"&gt;引用自Wikipedia的DRM條目&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;而GPLv3也可說是RichardStallman對DRM全面宣戰的GPL改進條款.&lt;br /&gt;&lt;br /&gt;耶魯大學政治聯盟在RMS演講之後, &lt;a href="http://www.yaledailynews.com/articles/view/21889"&gt;進行對 "DRM是非法的"這個議題的投票, 以33對20票通過&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;不論我喜不喜歡GPL, RMS無疑是自由軟體界真正的鬥士, &lt;br /&gt;他對於他眼中的惡向來從不讓步,&lt;br /&gt;沒有GPL與FSF, 今日的自由軟體絕不能如此蓬勃. &lt;br /&gt;而這樣具有風骨的人物跟信念堅持, 不論我是否同意他的論點, 都是讓我值得尊敬的.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-3183733805450112950?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/3183733805450112950/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=3183733805450112950' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3183733805450112950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3183733805450112950'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/10/funny-richard-stallman-rms.html' title='[funny] Richard Stallman (RMS) 被忍者攻擊.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7764404648827043953</id><published>2007-09-29T18:03:00.000+08:00</published><updated>2007-09-29T18:55:54.749+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='gpl'/><category scheme='http://www.blogger.com/atom/ns#' term='bsd'/><title type='text'>BSD版權真正的敵人是GPL吗?</title><content type='html'>我下的果然是聳動的標題 :X&lt;br /&gt;&lt;br /&gt;不過這陣子來Theo de Raadt (正反評價兩極化的openbsd hacker)對GPL的抨擊可以說是將沈睡已久的聲音再吶喊出來.&lt;br /&gt;關於這件八卦有興趣的人其實可以在網上搜索一下,應該可以查到不少消息. 所以我只發表一下我無聊的感想.&lt;br /&gt;&lt;br /&gt;一直以來信仰GPL的人們對於BSD license的評價就是以BSD-like版權放出的程式有機會被大企業給偷盜,然後變成close sourced的商業軟體. 所以最好自由軟體都使用GPL license才不會有問題.&lt;br /&gt;&lt;br /&gt;簡而言之以GPL信仰者的觀點就是:&lt;br /&gt;&lt;br /&gt;GPL --&gt; 正義的一方&lt;br /&gt;商業公司,closed source --&gt; 邪惡的一方&lt;br /&gt;BSD --&gt; 爛好人,鄉愿&lt;br /&gt;&lt;br /&gt;不過以BSD版權使用者的觀點來看, 似乎就不是這樣了.&lt;br /&gt;&lt;br /&gt;大部份使用BSD版權釋出的軟體, 在實務上即使是被公司當作是closed source軟體販賣, 這些公司經常仍會回報patch給原本的團隊或作者. 此外, 增加使用的人數並真實的在商業上運用也有助於程式的測試改進.&lt;br /&gt;&lt;br /&gt;所以公司或商業化的軟體 就算沒有幫助 基本上對BSD版權的危害並不如GPL的信仰者們所說的大.&lt;br /&gt;&lt;br /&gt;而如果有人將軟體做了一些改進, 並用GPL版權釋出, 結果會變成怎樣呢? &lt;br /&gt;&lt;br /&gt;今天舉個例子,比如說如果某個原本是用BSD版權開發的blog軟體,被某個GPL信仰者做了一些改進,並且改用GPL版權釋出. 這會造成原本都是自由軟體的使用族群分散之外, 另外如果新的修正是基於GPL版本的blog做的修正, 原本的BSD軟體就不再能拿回來用了. 因為新的修正會受到GPL的影響. 不得不變成一個GPL patch.(任何基於GPL衍生的程式碼均得為GPL授權), 知道這樣的嚴重性了吧, 也就是說GPL比封閉軟體還狠, 作完自己的修正之後不僅要奪走BSD版權的軟體現在的顧客,還要剝奪未來原本BSD可參考改進的程式碼, 變成只剩GPL-only授權釋出的程式有做修正. (當然 可以請求每個patch的原作者再用BSD版權釋出,然後再基於這個patch再做修改,不過在實務上似乎很少能做到如此)&lt;br /&gt;&lt;br /&gt;Theo事件的導火線也在於此, linux people將BSD/GPL dual license的driver版權宣告拿掉, 然後re-license成GPL. 拿掉別人原本的版權宣告沒有任何問題吗? GPL people認為是沒有的, 總而言之 為了GPL people相信的正義 是可以犧牲BSD people的, 即使以後所有在linux上的driver的code patch都不得不為GPL, BSD版權的人們一點都不能拿來用也無所謂, 非我族類, 其心必殊.....&lt;br /&gt;&lt;br /&gt;所以說... 就算theo過去怎樣怎樣 這次我覺得他講的倒有點道理... gpl 信仰者們, 也許BSD對於你們是異教徒, 但, 所謂自由軟體的正義真的是只有一條道路吗?  刪掉別人的雙版權宣告, 然後改成GPL only 真的是那麼的正義那麼理所當然吗? 我想值得再思考思考.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7764404648827043953?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7764404648827043953/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7764404648827043953' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7764404648827043953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7764404648827043953'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/09/bsdgpl.html' title='BSD版權真正的敵人是GPL吗?'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-815722543541452217</id><published>2007-09-24T19:42:00.000+08:00</published><updated>2007-09-24T19:58:13.845+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>很有想法的gimp !?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_VE6oUeg-MFI/Rvejb4fEcSI/AAAAAAAAAXI/3MG8t-7KPqY/s1600-h/gimp.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_VE6oUeg-MFI/Rvejb4fEcSI/AAAAAAAAAXI/3MG8t-7KPqY/s400/gimp.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5113735601316983074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;看了&lt;a href="http://digg.com/programming/The_GIMP_has_this_option_ever_been_used_pic"&gt;Digg上這篇文章&lt;/a&gt;之後, 才發現gimp建圖檔時可以選衛生紙這個選項~~ &lt;br /&gt;試了一下還真的哩...&lt;br /&gt;&lt;br /&gt;喔 這個概念真不錯 不過我家印表機可能印不出來吧.... &lt;br /&gt;還是美國的衛生紙現在改用 Double A材質了 ??? XD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-815722543541452217?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/815722543541452217/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=815722543541452217' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/815722543541452217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/815722543541452217'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/09/gimp.html' title='很有想法的gimp !?'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_VE6oUeg-MFI/Rvejb4fEcSI/AAAAAAAAAXI/3MG8t-7KPqY/s72-c/gimp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4029005958084989938</id><published>2007-09-07T03:18:00.000+08:00</published><updated>2007-09-07T03:33:13.287+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[rant] 下禮拜要教招了～～</title><content type='html'>不知道國家找我這種沒戰鬥力的文官去幹嘛~~ 我當兵都在寫公文跟當客服處理客訴啊~~ &lt;br /&gt;哪會作啥戰...&lt;br /&gt;還要去屏東某營區一個禮拜~~  禮拜天早上就得出發~~&lt;br /&gt;唉唉~~ 真不想去～～ &lt;br /&gt;我是很愛好和平的啊~~ (其實是不爽錯過一個禮拜的新番 Arrrrrgh~~ XD)&lt;br /&gt;&lt;br /&gt;祝我平安歸來吧～～&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4029005958084989938?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4029005958084989938/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4029005958084989938' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4029005958084989938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4029005958084989938'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/09/blog-post.html' title='[rant] 下禮拜要教招了～～'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4742075592669462475</id><published>2007-09-07T00:43:00.000+08:00</published><updated>2007-09-07T03:32:50.489+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>[link] A Taste of Haskell 觀後小感</title><content type='html'>&lt;a href="http://blip.tv/file/324976"&gt;Part I&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blip.tv/file/325646"&gt;Part II&lt;/a&gt;&lt;br /&gt;&lt;a href="http://conferences.oreillynet.com/presentations/os2007/os_peytonjones.pdf"&gt;Slide&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這兩部影片是在OSCON2007裡&lt;a href="http://en.wikipedia.org/wiki/Simon_Peyton_Jones"&gt;Simon Peyton-Jones&lt;/a&gt;的Haskell演講, 其實已經隔了一段時間, 今天晚上才一時興起去看,&lt;br /&gt;&lt;br /&gt;因為知道是Microsoft Research裡的Haskell創造者之一,&lt;br /&gt;原本是預期一個長得鬍鬚長長的老頭 然後開始講一些誰都聽不懂的玄學...&lt;br /&gt;不然應該至少要長得像星際大戰的&lt;a href="http://en.wikipedia.org/wiki/Yoda"&gt;尤達&lt;/a&gt;吧~~&lt;br /&gt;&lt;br /&gt;結果看了影片之後發現根本就大錯特錯... 大師不僅可以把玄學講成簡單的道理,&lt;br /&gt;長得還比較像&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E6%AD%90%E6%AF%94%E7%8E%8B%C2%B7%E8%82%AF%E8%AB%BE%E6%AF%94&amp;variant=zh-tw"&gt;歐比王&lt;/a&gt;跟&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E9%AD%81%E5%89%9B%C2%B7%E9%87%91&amp;variant=zh-tw"&gt;魁剛金&lt;/a&gt;...&lt;br /&gt;連我都似乎開始有點聽懂了 @@ (雖然說這肯定是大師的催眠術)&lt;br /&gt;&lt;br /&gt;Haskell最大的賣點不僅在於他是一個純粹的functional programming language,&lt;br /&gt;更重要的是Haskell還帶有非常多在其他語言看不到的高等特性,包括惰性(laziness),型態類別（type classes), monads等等, 而這些特性將有可能會強烈的影響到我們下一個世代的程式設計語言.&lt;br /&gt;也因此在諸多語言裡面也慢慢可以看到Haskell的色彩, 包括Simon Peyton-Jones所提到的C# 3.0, (LINQ據說是受到monads的直接影響), 還有python2之後的list comprehension等等都是例子,我覺得這些特性應該會慢慢的從Haskell中被帶出來讓世人所熟知.&lt;br /&gt;&lt;br /&gt;(對了 講到python, lambda,map,filter都還在python 3.0a的builtin/keywords裡面,&lt;br /&gt;只有reduce被移到functools裡. 之前map filter說要被降級好像是誤傳?(未查證))&lt;br /&gt;&lt;br /&gt;Simon一開始講的是&lt;a href="http://xmonad.org/"&gt;xmonad&lt;/a&gt;, 主要是一個haskell寫的&lt;br /&gt;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也沒有那麼壞了起來. &lt;br /&gt;&lt;br /&gt;不過type classes有點複雜, 這是連Simon這種神人都覺得未來仍有發展空間的東西 我並沒有完全跟上, 改天還要再深入研究.然後就開始講到I/O跟scripting, IO的部份, 並不是很直觀, 網路上對於monad的討論也多到暴 所以我也是聽得很霧 另外也提到了Haskell library的現狀(就我以前try過的一些經驗, Haskell的library不算多, Cabel比較像是python的distutils, 可以裝一些3rd party的module, 不過dependency的部份有點麻煩, 似乎現在有人在發展一些工具在處理不過還是沒有很成熟), 這部份其實我目前比較沒有那麼大的興趣, 所以聽得有點散, 其實python就目前實務使用(套件,標準庫...等等)來說還是比Haskell成熟的多,並沒有很急著要學太多實務部份, 但我覺得Haskell是非常具未來性的語言, 所以現在多花點時間了解一些更基礎的特性或許也是對的. &lt;br /&gt;&lt;br /&gt;之後開始聽到有關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, 這真是非常酷的特點.&lt;br /&gt;&lt;br /&gt;最後simon講到Haskell跟其他語言採取完全不同的方法設計, 其他語言主要是一開始先想辦法讓語言有用(Useful)而慢慢的再來加一些限制讓語言更安全(safe), 而Haskell則是採取一開始是Useless(無用處)但是Safe的設計,然後慢慢的讓語言更加具有功能性.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_VE6oUeg-MFI/RuBEN0cIJHI/AAAAAAAAAW4/jaI0VWsAuHk/s1600-h/Haskell_way.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_VE6oUeg-MFI/RuBEN0cIJHI/AAAAAAAAAW4/jaI0VWsAuHk/s400/Haskell_way.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5107156981643748466" /&gt;&lt;/a&gt;&lt;br /&gt;之後simon也講了一些工具跟網站 畢竟這個演講也只是粗淺的導引, 還是有很多深入的內容要多看多玩才會了解 不過之前也看過一些Haskell的介紹跟導引, 他的演講對於個人提高興趣及指點迷津上我倒覺得成效還不錯.&lt;br /&gt;&lt;br /&gt;看完演講總算比較有信心覺得這是個正常人可以玩的程式語言了, 知道玩這個語言沒那麼容易變成瘋狂數學家總是安心不少 ;) 不知道為啥突然想起研究所唸過的&lt;a href="http://en.wikipedia.org/wiki/Kiyoshi_It%C5%8D"&gt;Kiyoshi Itō&lt;/a&gt;這個超神的家伙,記得聽以前的教授說&lt;a href="http://en.wikipedia.org/wiki/Ito_calculus"&gt;Ito calculus&lt;/a&gt;是他的碩士論文發明了之後, 讓我真是想去再生兩個腦袋, 不過還好haskell裡的lambda caluli沒那麼困難, 只要知道\在haskell裡面是代表lambda, 其他只要lisp學好的話搞不好會更欣賞haskell滿直覺的表示法, 型別的理論我比較少接觸看起來還要多摸, 比較困難的是&lt;a href="http://www.haskell.org/all_about_monads/html/"&gt;monad&lt;/a&gt;, 有時間的話繼續努力玩玩. (話說大師的催眠術果然是無敵的, 看來只要一直想著這很簡單這很簡單終究會變得..感覺..簡單起來 XD)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4742075592669462475?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4742075592669462475/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4742075592669462475' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4742075592669462475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4742075592669462475'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/09/link-taste-of-haskell.html' title='[link] A Taste of Haskell 觀後小感'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_VE6oUeg-MFI/RuBEN0cIJHI/AAAAAAAAAW4/jaI0VWsAuHk/s72-c/Haskell_way.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7353853069321693131</id><published>2007-08-22T17:15:00.000+08:00</published><updated>2007-08-22T17:28:47.471+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>[link] django runs on iphone.</title><content type='html'>替你的iphone灌個django吧.... (不過沒iphone orz)&lt;br /&gt;&lt;br /&gt;圖片:&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/jacobian/1160698795/"&gt;http://www.flickr.com/photos/jacobian/1160698795/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/skatterbean/1173984622/"&gt;iPhone call database using django&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;一些文章:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://simonwillison.net/2007/Aug/19/worked/"&gt;http://simonwillison.net/2007/Aug/19/worked/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://livinghardknox.com/2007/08/20/django-and-the-iphone/"&gt;http://livinghardknox.com/2007/08/20/django-and-the-iphone/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://livinghardknox.com/2007/08/21/more-on-django-and-the-iphone/"&gt;http://livinghardknox.com/2007/08/21/more-on-django-and-the-iphone/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7353853069321693131?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7353853069321693131/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7353853069321693131' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7353853069321693131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7353853069321693131'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/08/link-django-runs-on-iphone.html' title='[link] django runs on iphone.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7770473139464753380</id><published>2007-08-21T14:31:00.000+08:00</published><updated>2007-08-21T15:02:28.289+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='x.org'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>[tip] xorg裡改用滑鼠右鍵貼上</title><content type='html'>同事跟我說他想把x.org裡滑鼠中鍵貼上的功能改成用滑鼠的右鍵貼上, 雖然我搞不懂為啥會有人想這麼作,但還是有辦法的...&lt;br /&gt;&lt;br /&gt;在xorg.conf裡:&lt;br /&gt;&lt;br /&gt;Section "InputDevice"&lt;br /&gt;        Identifier  "Mouse0"&lt;br /&gt;        Driver      "mouse"&lt;br /&gt;        Option      "Protocol" "IMPS/2"&lt;br /&gt;        Option      "Device" "/dev/input/mice"&lt;br /&gt;        Option      "ZAxisMapping" "4 5"&lt;br /&gt;        .....&lt;br /&gt;        Option      "ButtonMapping" "1 2 2 4 5 6 7 8 9"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;只要加上ButtonMapping這個選項, 就可以把實體的按鍵跟&lt;br /&gt;邏輯上的按鍵分開來定義,而這個選項的定義方式就是將邏輯上按鈕照實體上的順序排列,而實體上的1通常代表滑鼠左鍵 2代表滑鼠中鍵3代表滑鼠右鍵.&lt;br /&gt;&lt;br /&gt;像上例中 "ButtonMapping" "1 2 2 4 5 6 7 8 9"&lt;br /&gt;就是表示將邏輯上的1 2 2 定義到實體上的 1 2 3&lt;br /&gt;也就是將滑鼠實體上的右鍵現在定義了原本滑鼠中鍵貼上的功能&lt;br /&gt;如果要把滑鼠實體中鍵的功能完全取消, 也只要拿一個原本邏輯上未定義的按鈕替換掉即可,&lt;br /&gt;如: "ButtonMapping" "1 9 2 4 5 6 7 8 9"&lt;br /&gt;這樣即可將原本中鍵的功能取消, 並將右鍵變成貼上的功能.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7770473139464753380?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7770473139464753380/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7770473139464753380' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7770473139464753380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7770473139464753380'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/08/tip-xorg_21.html' title='[tip] xorg裡改用滑鼠右鍵貼上'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-6332279841905252330</id><published>2007-08-11T14:12:00.000+08:00</published><updated>2007-08-22T15:51:00.246+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='space'/><category scheme='http://www.blogger.com/atom/ns#' term='NASA.'/><title type='text'>[link]  Gouge Found on Shuttle Endeavour's Underside</title><content type='html'>update:&lt;br /&gt;&lt;a href="http://www.reuters.com/article/domesticNews/idUSN1635725420070821?src=082107_1403_TOPSTORY_dean_batters_mexico"&gt;Space shuttle Endeavour lands safely in Florida&lt;/a&gt; 十數天後平安歸來了! 可喜可賀!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://science.slashdot.org/science/07/08/11/0110236.shtml"&gt;http://science.slashdot.org/science/07/08/11/0110236.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;NASA的奮進號太空梭於日前發射, 執行第118號太空任務, 不過根據最新的消息, 似乎發射過程中有被冰塊擊中機腹,&lt;br /&gt;造成機腹有一塊三平方英吋凹槽的情形發生.&lt;br /&gt;&lt;br /&gt;也許聽起來不嚴重, 但這也不禁令人想起就在四年前, NASA發射的哥倫比亞號, 也是在發射時被泡棉擊中機翼,&lt;br /&gt;經NASA技師判定無問題, 管理階層開會數次且判定為不處理的情況下, &lt;br /&gt;再兩個禮拜後回到地球地表時過熱而解體爆炸導致全部太空人死亡的悲劇.&lt;br /&gt;&lt;br /&gt;這次發射任務眾所矚目的焦點是自從二十年前挑戰者號搭載教師卻在發射過程中爆炸後,&lt;br /&gt;第一次搭載教師上太空梭, 這次上太空的女教師&lt;a href="http://en.wikipedia.org/wiki/Barbara_Morgan"&gt;芭芭拉摩根&lt;/a&gt;, 其實就是跟二十年前挑戰者號不幸罹難的女教師&lt;a href="http://en.wikipedia.org/wiki/Christa_McAuliffe"&gt;克莉絲塔&lt;/a&gt;在&lt;a href="http://en.wikipedia.org/wiki/Teacher_in_space"&gt;Teacher_in_space&lt;/a&gt;計畫裡一起受訓,也名列在挑戰者號太空任務的候補名單, 自從挑戰者號失事之後, 計畫被迫中斷, Barbara繼續回去教書, 而這期間為了替代挑戰者號建造了奮進號, 因此到了1998, Barbara才重新回到nasa.&lt;a href="http://en.wikipedia.org/wiki/Teacher_in_space"&gt;Teacher_in_space&lt;/a&gt;計畫也才得以重新繼續, Barbara也直到今日才能升空一圓夢想彌補遺憾.&lt;br /&gt;&lt;br /&gt;話說為啥我這麼關心這段故事咧... 話說前幾個月才剛看完歡樂收場的&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%AD%E3%82%B1%E3%83%83%E3%83%88%E3%82%AC%E3%83%BC%E3%83%AB"&gt;"Rocket Girl"&lt;/a&gt;,對於這種現實發生而被變調過的故事橋段特別的有愛...:P 祝福這次Endeavour飛航成功順利啊... 不, マツリ, 你一定要成功啊~~~ XD&lt;br /&gt;&lt;br /&gt;就在三四年後, NASA的太空船也將全部退休, 改由新一代的可拋式Orion宇宙飛船接替, 希望接下來的這幾次飛行任務都不要出甚麼大狀況才好. 加油吧 NASA. 奮鬥吧 太空人們... :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-6332279841905252330?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/6332279841905252330/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=6332279841905252330' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6332279841905252330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6332279841905252330'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/08/link-gouge-found-on-shuttle-endeavours.html' title='[link]  Gouge Found on Shuttle Endeavour&apos;s Underside'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-880500963340628290</id><published>2007-08-09T14:05:00.000+08:00</published><updated>2007-08-09T14:32:18.180+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scm'/><category scheme='http://www.blogger.com/atom/ns#' term='bzr'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmark'/><title type='text'>Benchmarking SCMs via import linux kernel source.</title><content type='html'>Maybe someone would interested, so I posted the results here:&lt;br /&gt;&lt;br /&gt;(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)&lt;br /&gt;&lt;br /&gt;conclude: &lt;br /&gt;&lt;br /&gt;initial speed: hg==git(3Min) &gt;&gt; bzr(15Min) &gt;&gt; svn(71Min)&lt;br /&gt;&lt;br /&gt;checkout/clone speed: hg == git(3Min) &gt;&gt; svn(11Min) &gt;&gt; bzr(21Min)&lt;br /&gt;&lt;br /&gt;space effiency:  hg==git(123Mb) &gt;&gt; bzr (230Mb) &gt;&gt; svn(repo:82Mb+workingdir:573Mb = 655Mb)&lt;br /&gt;&lt;br /&gt;== report ==&lt;br /&gt;&lt;br /&gt;hg:&lt;br /&gt;/usr/bin/time -o ../hginit.usage hg init&lt;br /&gt;/usr/bin/time -o ../hgadd.usage hg add .&lt;br /&gt;/usr/bin/time -o ../hgcommit.usage hg commit -m "first import"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;real    3m25.284s&lt;br /&gt;user    0m34.130s&lt;br /&gt;sys     0m4.868s&lt;br /&gt;&lt;br /&gt;git:&lt;br /&gt;/usr/bin/time -o ../gitinit.usage git init-db&lt;br /&gt;/usr/bin/time -o ../gitadd.usage git add .&lt;br /&gt;/usr/bin/time -o ../gitcommit.usage git commit -m "first import"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;real    3m20.346s&lt;br /&gt;user    0m23.061s&lt;br /&gt;sys     0m5.032s&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;bzr:&lt;br /&gt;/usr/bin/time -o ../bzrinit.usage bzr init&lt;br /&gt;/usr/bin/time -o ../bzradd.usage bzr add .&lt;br /&gt;/usr/bin/time -o ../bzrcommit.usage bzr commit -m "first import"&lt;br /&gt;&lt;br /&gt;real    15m10.689s&lt;br /&gt;user    1m59.299s&lt;br /&gt;sys     0m9.617s&lt;br /&gt;&lt;br /&gt;svn:&lt;br /&gt;svnadmin create --fs-type fsfs /home/tim/test/testsvnrepo/ &lt;br /&gt;svn import -m "New import" linux-2.6-2.6.18.dfsg.1 file:///home/tim/test/testsvnrepo/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;real    71m3.704s&lt;br /&gt;user    0m53.467s&lt;br /&gt;sys     0m24.998s&lt;br /&gt;&lt;br /&gt;#### Checkout/Branch(Clone) time ####&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#time bzr clone linux-2.6-2.6.18.dfsg.1/ testbzrclone&lt;br /&gt;Branched 1 revision(s).                                                                                                      &lt;br /&gt;&lt;br /&gt;real    21m5.351s&lt;br /&gt;user    1m38.898s&lt;br /&gt;sys     0m11.465s&lt;br /&gt;&lt;br /&gt;# time hg clone linux-2.6-2.6.18.dfsg.1/ testhgclone&lt;br /&gt;20690 files updated, 0 files merged, 0 files removed, 0 files unresolved&lt;br /&gt;&lt;br /&gt;real    3m15.951s&lt;br /&gt;user    0m12.449s&lt;br /&gt;sys     0m4.016s&lt;br /&gt;&lt;br /&gt;#time git-clone linux-2.6-2.6.18.dfsg.1 testgitclone&lt;br /&gt;remote: Generating pack...&lt;br /&gt;remote: Done counting 21351 objects.&lt;br /&gt;remote: Deltifying 21351 objects.&lt;br /&gt;remote:  100% (21351/21351) done&lt;br /&gt;Indexing 21351 objects.&lt;br /&gt;remote: Total 21351, written 21351 (delta 2213), reused 0 (delta 0)&lt;br /&gt; 100% (21351/21351) done&lt;br /&gt;Resolving 2213 deltas.&lt;br /&gt; 100% (2213/2213) done&lt;br /&gt;Checking files out...&lt;br /&gt; 100% (20323/20323) done&lt;br /&gt;&lt;br /&gt;real    3m27.516s&lt;br /&gt;user    0m59.908s&lt;br /&gt;sys     0m5.132s&lt;br /&gt;&lt;br /&gt;#time svn co file:///home/tim/test/testsvnrepo/ testsvnco&lt;br /&gt;Checked out revision 1.&lt;br /&gt;&lt;br /&gt;real    11m44.980s&lt;br /&gt;user    0m35.294s&lt;br /&gt;sys     0m15.849s&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;####SPACE USAGE ####&lt;br /&gt;&lt;br /&gt;123M    linux-2.6-2.6.18.dfsg.1/.hg&lt;br /&gt;123M    linux-2.6-2.6.18.dfsg.1/.git&lt;br /&gt;230M    linux-2.6-2.6.18.dfsg.1/.bzr&lt;br /&gt;82M     testsvnrepo&lt;br /&gt;573M    testsvnco&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note: I've installed bzr 0.18, and results shows no big difference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-880500963340628290?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/880500963340628290/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=880500963340628290' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/880500963340628290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/880500963340628290'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/08/benchmarking-scms-via-import-linux.html' title='Benchmarking SCMs via import linux kernel source.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-1383025148857218027</id><published>2007-07-29T17:12:00.000+08:00</published><updated>2007-07-29T17:26:04.423+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='ozearch'/><title type='text'>[link] ozearch 中文最佳化搜尋引擎釋出</title><content type='html'>來自kalug/www.linux.org.tw的第一手消息:&lt;br /&gt;&lt;a href="http://www.linux.org.tw/node/350"&gt;http://www.linux.org.tw/node/350&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;kevinwatt在昨天的Kalug聚會中宣布以GPL版權釋出他用 Python 語言撰寫的 ozearch 0.0.1,&lt;br /&gt;主要的特點是融合N-gram 以及 Word-based 這兩種斷詞方法對中文搜尋作最佳化,根據kevinwatt的現身說法是, 目前仍在大幅修改中, 之後的版本會越來越好, 所以如果有對中文搜尋引擎實作有興趣或有時間跟精力對本土自由軟體開發提供協助的朋友可以到官方網站&lt;a href="http://ozearch.org/"&gt;http://ozearch.org/&lt;/a&gt;一探究竟. :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-1383025148857218027?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/1383025148857218027/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=1383025148857218027' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1383025148857218027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1383025148857218027'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/07/link-ozearch.html' title='[link] ozearch 中文最佳化搜尋引擎釋出'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-8145343550534838796</id><published>2007-07-28T23:18:00.000+08:00</published><updated>2007-07-28T23:47:47.515+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>[funny] [link] 尤拉會怎麼作? What Would Euler Do?</title><content type='html'>&lt;a href="http://svnbook.red-bean.com/en/1.1/ch01s02.html"&gt;知名版本控制系統Subversion的作者Karl Fogel&lt;/a&gt;本月在他的blog透漏了&lt;a href="http://www.rants.org/2007/07/14/what-would-euler-do/"&gt;這則趣事&lt;/a&gt;: 他在2004年跟美國數學協會購買了&lt;a href="https://www.maa.org/ecomtpro/Timssnet/products/TNT_products.cfm?primary_id=DOL-13&amp;action=long"&gt;Excursions in Calculus&lt;/a&gt;,不過等付完錢拿到書之後, 過一陣子才拿到了帳單. 但是他其實早已付了錢, 美國數學協會寄給他的是一個0元的帳單,可能是作為存根之用. 不過他做了一件非常耍寶的事.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;他開了一張&lt;a href="http://zh.wikipedia.org/wiki/%E6%AD%90%E6%8B%89%E6%81%86%E7%AD%89%E5%BC%8F"&gt;&lt;strong&gt;e&lt;sup&gt;i&amp;pi;&lt;/sup&gt;&amp;nbsp;+&amp;nbsp;1&lt;/strong&gt;&lt;/a&gt;元的支票給美國數學協會.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.rants.org/wp-content/uploads/2007/07/maa/check-small.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://www.rants.org/wp-content/uploads/2007/07/maa/check-small.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;想當然爾, 被退了回來.&lt;br /&gt;&lt;br /&gt;Karl Fogel對這件事的評論則是:&lt;br /&gt;"""&lt;br /&gt;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 &lt;strong&gt;e&lt;sup&gt;i&amp;pi;&lt;/sup&gt;&amp;nbsp;+&amp;nbsp;1&lt;/strong&gt; to the Mathematical Association of America, whom can you write one to?&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;我只能說..... 醒醒吧...阿宅... XD&lt;br /&gt;&lt;br /&gt;原文在此: &lt;a href="http://www.rants.org/2007/07/14/what-would-euler-do/"&gt;http://www.rants.org/2007/07/14/what-would-euler-do/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-8145343550534838796?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/8145343550534838796/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=8145343550534838796' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8145343550534838796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8145343550534838796'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/07/funny-link-what-would-euler-do.html' title='[funny] [link] 尤拉會怎麼作? What Would Euler Do?'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7797603657192905433</id><published>2007-07-26T13:22:00.001+08:00</published><updated>2009-03-16T18:01:35.424+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>續: shell script裡使用python的技巧</title><content type='html'>&lt;a href="http://timchen119.blogspot.com/2007/02/shell-scriptpython.html"&gt;http://timchen119.blogspot.com/2007/02/shell-scriptpython.html&lt;/a&gt;&lt;br /&gt;繼上次這篇文章裡的方法, lloyd大大又教了我更多用python只寫一行程式碼的方法,比如:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;cat /etc/passwd &amp;#124; python -c &amp;quot;$(echo -e 'import sys \nfor i in sys.stdin: \n s=i.split(&amp;quot;:&amp;quot;)\n if s[0] == &amp;quot;root&amp;quot;: \n  for j in range(len(s)): print s[j],')&amp;quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;或者是&lt;br /&gt;source lpython.sh&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#lpython.sh&lt;br /&gt;lpython ()&lt;br /&gt;{&lt;br /&gt;   python -c "$(echo -e "$@")"&lt;br /&gt;}&lt;/pre&gt;然後&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;cat /etc/passwd &amp;#124; lpython 'import sys \nfor i in sys.stdin: \n s=i.split(&amp;quot;:&amp;quot;)\n if s[0] == &amp;quot;root&amp;quot;: \n  for j in range(len(s)): print s[j],'&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;這個方法巧妙的運用了 \n 跟空白來避開python在one-liner情況下的縮排問題, 不失為一種方便的方法.&lt;br /&gt;&lt;br /&gt;相同的需求也有例如&lt;a href="http://www.unixuser.org/~euske/pyone/index.html"&gt;pyone&lt;/a&gt;之類的實作方式, 不過比較起來我比較喜歡lloyd的方法.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7797603657192905433?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7797603657192905433/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7797603657192905433' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7797603657192905433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7797603657192905433'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/07/shell-scriptpython.html' title='續: shell script裡使用python的技巧'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-936341161543309571</id><published>2007-07-22T00:12:00.000+08:00</published><updated>2007-07-22T01:20:11.092+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='xen'/><category scheme='http://www.blogger.com/atom/ns#' term='netbsd'/><title type='text'>Xen Merged into Linux 2.6.23</title><content type='html'>&lt;a href="http://kerneltrap.org/node/13917"&gt;http://kerneltrap.org/node/13917&lt;/a&gt;, 來自kernel trap的最新消息.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://zh.wikipedia.org/wiki/Xen"&gt;Xen是一個開放原始碼虛擬機監視器&lt;/a&gt;,&lt;br /&gt;簡單的說, Xen可以讓一台機器同時跑好幾個作業系統, &lt;br /&gt;而且模擬的速度接近原本cpu速度.&lt;br /&gt;(目前就我所知執行速度是比User mode linux/KVM/kqemu都快的多, &lt;br /&gt;跟qemu/virtualbox/vmware當然更不是同一個檔次的)&lt;br /&gt;&lt;br /&gt;前陣子才剛在一台debian etch(dom0)上安裝netbsd跟freebsd的domU,&lt;br /&gt;(DomU 其實就是Xen對guest OS的術語. 而Dom0就是host os.&lt;br /&gt;netbsd是*bsd裡對xen支援最完善的,&lt;br /&gt;目前3.1 release版本就直接支援, 既可以當host OS也可以當guest OS.&lt;br /&gt;如果有人想安裝FreeBSD作guest OS的話, 我建議可以直接參考&lt;a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/virtualization-guest.html"&gt;FreeBSD handbook&lt;/a&gt;,21.2.2.1 Setup Xen 3 on Linux dom0,有個不怎麼新的7-current(N個月前的)可以玩,有VT支援的cpu的話應該就比較簡單一點,&lt;br /&gt;也因為我身邊沒半台可以支援VT的cpu(啥怪cpu都有就是沒intel core2duo XD),不然應該可以裝個windows當guest os)&lt;br /&gt;但是說真的, 目前安裝xen還是有點麻煩, &lt;br /&gt;不過我想xen merge進i386的linux之後,&lt;br /&gt;xen應該會越來越得到關愛的眼神才對. &lt;br /&gt;以後搞不好哪天apt-get install xen-netbsd-domU-image就裝好了. (希望啦 XD)&lt;br /&gt;&lt;br /&gt;(ps: 差點忘了提最大的重點/亮點: &lt;br /&gt;除去kernel部份 xen大部分的程式碼都是用python寫的!! XDXDXD)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-936341161543309571?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/936341161543309571/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=936341161543309571' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/936341161543309571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/936341161543309571'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/07/xen-merged-into-linux-2623.html' title='Xen Merged into Linux 2.6.23'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-60980923687591045</id><published>2007-07-21T21:56:00.000+08:00</published><updated>2007-07-21T23:00:38.757+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>[tip] django + oracle  on debian linux.</title><content type='html'>目前SVN裡最新版本django已經由官方直接支援oracle資料庫,&lt;br /&gt;也因此我也花了點時間測試一下django跟oracle的配合.&lt;br /&gt;用起來覺得還不錯, 所以跟大家分享一下我的簡易安裝心得.&lt;br /&gt;&lt;br /&gt;首先我是直接安裝oracle 10g 的XE版本,&lt;br /&gt;在debian linux上安裝oracle 10g xe其實很簡單, (我是用etch)&lt;br /&gt;因為oracle連apt套件庫都幫你準備好了.&lt;br /&gt;&lt;br /&gt;只要在你的sources.list加上這行:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;deb http://oss.oracle.com/debian/ unstable main non-free&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;並安裝:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#wget http://oss.&lt;strong class="highlight"&gt;oracle&lt;/strong&gt;.com/el4/RPM-GPG-KEY-&lt;strong class="highlight"&gt;oracle&lt;/strong&gt; -O- | sudo apt-key add -&lt;br /&gt;#apt-get update;apt-get install orcale-xe-universal&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;最後跑個/etc/init.d/oracle-xe configure即可作oracle的安裝設定.&lt;br /&gt;如果想測試安裝oracle xe的結果可以連上Web的8080port看管理介面:&lt;br /&gt;http://127.0.0.1:8080/apex/&lt;br /&gt;&lt;br /&gt;這個版本的oracle除了有內定最大只能使用4G資料庫大小,1G Memory&lt;br /&gt;跟只會使用單顆CPU的限制外,&lt;br /&gt;並沒有限制其他特別嚴苛的條件, 連商業使用都在可允許的範圍.&lt;br /&gt;而因為這個限制其實很夠用,且高階一點的機器可以跑個vserver還是memcache.&lt;br /&gt;然後你要多跑幾個database也不在限制範圍內,&lt;br /&gt;所以其實我個人覺得就是oracle資料庫大放送, 隨便你用.&lt;br /&gt;再來這個版本又比我印象中的oracle好安裝的太多.&lt;br /&gt;還送你一個web管理介面(而且oracle似乎有心要繼續維護10g XE,我安裝時有根據官網的說明順便升級到了目前最新的apex版本3.0.1),可以說是物超所值.&lt;br /&gt;&lt;br /&gt;再來就是安裝python的oracle支援套件&lt;a href="http://www.python.net/crew/atuining/cx_Oracle/"&gt;cx_oracle&lt;/a&gt;,&lt;br /&gt;因為官方網站只有提供windows跟fedora的binary套件, 我就直接抓source回來安裝,&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;export ORACLE_HOME='/usr/lib/oracle/xe/app/oracle/product/10.2.0/server'&lt;br /&gt;export LD_LIBRARY_PATH=$ORACLE_HOME/lib&lt;br /&gt;&lt;br /&gt;python setup.py install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;接下來當然就是安裝django的最新svn版本,&lt;br /&gt;這點看官方網站的Installing the development version說明應該就很清楚了,&lt;br /&gt;http://www.djangoproject.com/documentation/install/&lt;br /&gt;&lt;br /&gt;安裝完之後其實就跟其他資料庫沒什麼太大的差異了,&lt;br /&gt;就可以寫個小程式測試一下了,&lt;br /&gt;不過我上次測試的時候遇到了一點小問題,&lt;br /&gt;就是我在syncdb時出現了一個 &lt;br /&gt;TypeError: descriptor 'upper' requires a 'str' object but received a 'unicode'&lt;br /&gt;的錯誤訊息,&lt;br /&gt;我推測應該是因為oracle這個branch剛好跟unicode這個branch同時進了svn trunk,&lt;br /&gt;所以漏掉了這個,&lt;br /&gt;可以暫時先依照我丟到&lt;a href="http://code.djangoproject.com/ticket/4827"&gt;http://code.djangoproject.com/ticket/4827&lt;/a&gt;的patch修正, &lt;br /&gt;不過我想下一版release的django應該就會修正這個問題才對.&lt;br /&gt;&lt;br /&gt;總算,oracle成為&lt;br /&gt;django除了mysql,postgresql,sqlite之外的第四個直接支援的database. &lt;br /&gt;也是第一個support的商業database. &lt;br /&gt;雖然我目前用不大到(postgres還是不錯滴), 不過還是可喜可賀. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-60980923687591045?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/60980923687591045/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=60980923687591045' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/60980923687591045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/60980923687591045'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/07/tip-django-oracle-on-debian-linux.html' title='[tip] django + oracle  on debian linux.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7538674677805511849</id><published>2007-07-20T21:45:00.000+08:00</published><updated>2007-07-20T21:48:22.838+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[tip] 使用yolk管理python套件.</title><content type='html'>&lt;a href="http://tools.assembla.com/yolk"&gt;yolk&lt;/a&gt;是一個可以查詢pypi套件及本機所安裝的python套件資訊的實用工具.&lt;br /&gt;&lt;br /&gt;python自從這幾年引入setuptools,cheese shop等新技術之後,&lt;br /&gt;安裝新套件變的相當容易.&lt;br /&gt;大多時候我想新安裝套件除了透過作業系統的套件管理之外,&lt;br /&gt;幾乎只要透過easy_install來安裝即可.&lt;br /&gt;除了少部份仍未支援setuptools的pypi套件外,&lt;br /&gt;大部份列在chesse shop裡的套件基本上都可以透過easy_install的方法安裝.&lt;br /&gt;&lt;br /&gt;但是安裝變的容易了, setuptools裡卻沒有附上簡單的命令可以協助使用者管理套件,&lt;br /&gt;包括版本的控管及升級, python套件安裝的數量等等資訊, 都要由系統管理者來自行紀錄.&lt;br /&gt;實在不是一個很好的作法. 然而yolk這個好用的工具正可以填補這個缺陷,&lt;br /&gt;&lt;br /&gt;首先當然是先安裝yolk, 最簡單的方法是用easy_install安裝.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;easy_install -Z yolk&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;沒有easy_install這個程式的話 (會有人沒有裝嗎? @_@ )&lt;br /&gt;則可以用你常用的套件管理程式安裝setuptools,&lt;br /&gt;或請把下面的script抓下來並執行,就會安裝setuptools了:&lt;br /&gt;&lt;a href="http://peak.telecommunity.com/dist/ez_setup.py"&gt;&lt;span style="font-size:-1;"&gt;&lt;span class="a"&gt;http://peak.telecommunity.com/dist/ez_setup.py&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(如果你跟我一樣也使用gentoo, 可以用overlay裡的pythonhead來安裝,&lt;br /&gt;我建議你可以順便安裝g-pypi, 這是由同一作者所寫可以直接由pypi裡的套件產生ebuild的工具.&lt;br /&gt;安裝g-pypi就會連yolk一起安裝了.)&lt;br /&gt;&lt;br /&gt;幾個我常用的命令說明如下:&lt;br /&gt;(請注意以下指的套件, 在python2.5之前是只限於用setuptools,easy_install安裝的python套件,&lt;br /&gt;若使用python2.5+則是全部的套件都可以管理.)&lt;br /&gt;&lt;br /&gt;yolk -l&lt;br /&gt;列出這台機器所安裝的套件.&lt;br /&gt;yolk -U&lt;br /&gt;列出這台機器可以更新的套件及最新的版本.&lt;br /&gt;yolk -F nose -T svn&lt;br /&gt;將nose這個套件的最新svn版本抓下來放在./nose_svn&lt;br /&gt;yolk -M nose&lt;br /&gt;列出nose這個套件的meta資訊(版本,說明,版權等)&lt;br /&gt;yolk -D ezpyinline&lt;br /&gt;列出可以抓到ezpyinline這個套件的位址.&lt;br /&gt;yolk -H nose&lt;br /&gt;打開瀏覽器並連到nose這個套件的官方網站.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7538674677805511849?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7538674677805511849/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7538674677805511849' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7538674677805511849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7538674677805511849'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/07/tip-yolkpython.html' title='[tip] 使用yolk管理python套件.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4286949371814338201</id><published>2007-07-03T13:34:00.000+08:00</published><updated>2007-07-03T13:59:24.618+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><category scheme='http://www.blogger.com/atom/ns#' term='kalug'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>台灣opensource社群活動行事曆</title><content type='html'>&lt;a href="http://yurinfore.blogspot.com"&gt;YurenJu&lt;/a&gt;目前正在維護&lt;a href="http://yurinfore.blogspot.com/2007/06/taiwan-open-source-resource.html"&gt;台灣OpenSource社群活動行事曆&lt;/a&gt;, 台灣各地其實到處都有各種開放原始碼的社群聚會, 只是有時這些活動的時間不大容易記住, 也很容易排定的時間上有所衝突, 有個可以一目瞭然的行事曆的確是好的多.&lt;br /&gt;&lt;br /&gt;目前我已在維護的&lt;a href="http://kalug.linux.org.tw"&gt;kalug&lt;/a&gt;及&lt;a href="http://planet.python.org.tw"&gt;python&lt;/a&gt;星球上加入連結,&lt;br /&gt;其他社群的朋友如果想加入到自己的網站上的話, &lt;br /&gt;只要插入下面這一段HTML碼就可以了.&lt;br /&gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;&amp;lt;iframe style=" border-width:0 " width="240" &lt;br /&gt;frameborder="0"&lt;br /&gt;src="http://www.google.com/calendar/embed?src=p09uh8cg4uvt2ij4obf45cltsk%40group.calendar.google.com&amp;amp;chrome=NONE&amp;amp;mode=AGENDA&amp;amp;hl=zh_TW&amp;amp;height=350" &lt;br /&gt;height="350"&amp;gt;&lt;br /&gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;&amp;lt;a target="_blank" &lt;br /&gt;href="http://www.google.com/calendar/render?cid=p09uh8cg4uvt2ij4obf45cltsk%40group.calendar.google.com"&amp;gt;&lt;br /&gt;&amp;lt;img border="0" &lt;br /&gt;src="http://www.google.com/calendar/images/ext/gc_button1_en.gif"/&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;另外&lt;a href="http://yurinfore.blogspot.com"&gt;yurenju&lt;/a&gt;也在號召有興趣共同參與更新行事曆的朋友, 如果您的組織有經常性的活動的話, 可以跟&lt;a href="http://yurinfore.blogspot.com"&gt;yurenju&lt;/a&gt;聯絡.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4286949371814338201?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4286949371814338201/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4286949371814338201' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4286949371814338201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4286949371814338201'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/07/opensource.html' title='台灣opensource社群活動行事曆'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-2395818152359254900</id><published>2007-07-01T20:54:00.000+08:00</published><updated>2007-07-01T21:32:50.910+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><title type='text'>[rant] 三星硬碟三年保固.... 根本只是個噱頭....</title><content type='html'>只怪我當初沒做好功課, 兩年前被賣場的人唬了... &lt;br /&gt;&lt;br /&gt;兩年多前對硬碟保固極度無知的我, 當時聽信賣場人員的SamSung硬碟堅持三年保固的說法, &lt;br /&gt;&lt;br /&gt;傻傻的買了一顆80G的三星SitePoint硬碟給我老爸當主硬碟...想說可能比較有保障.&lt;br /&gt;&lt;br /&gt;前幾天無預警掛了之後 就準備拿來去換顆"良品". 所以開始查說是在那邊維修.&lt;br /&gt;&lt;br /&gt;根據我硬碟上的保固貼紙, 就去查到了建達國際的網站,&lt;br /&gt;&lt;br /&gt;沒想到不查還好, 一查才發現.... 根本就是被騙了...&lt;br /&gt;&lt;br /&gt;沒錯 是三年保固 不過不是免錢的保固,&lt;br /&gt;&lt;br /&gt;買了硬碟30天過後, 硬碟壞了就不會換新品給你了, 就是換良品.&lt;br /&gt;&lt;br /&gt;第一年過了之後即使在保固期內, 送修就開始要收費了, &lt;br /&gt;&lt;br /&gt;那所謂三星的三年保固跟一年保固又有啥不同呢? &lt;br /&gt;&lt;br /&gt;講難聽一點就是過了三年他連理都不理你了. 要送修? 直接買新品吧...&lt;br /&gt;&lt;br /&gt;建達國際對於出貨只要滿一年的硬碟.....要收500元的手續費... &lt;br /&gt;&lt;br /&gt;這手續費還真高. 也不會換個新品給你,  就是會換個良品(就是以前大概壞過被修好的吧)&lt;br /&gt;&lt;br /&gt;那現在市場上主流根本也沒有在賣80G的IDE硬碟了,&lt;br /&gt;&lt;br /&gt;想送修時順便換個大一點的硬碟的話,&lt;br /&gt;&lt;br /&gt;這建達國際從80GB"升級"到250G 還要再加1500元... &lt;br /&gt;&lt;br /&gt;然後呢 這保固期限也並沒有延長...&lt;br /&gt;&lt;br /&gt;是"延續原送修硬碟之剩餘保限".... 我實在不明白這啥道理?&lt;br /&gt;&lt;br /&gt;昏倒, 我重買一顆全新的 WD 250 GB, 7200rpm , &lt;br /&gt;&lt;br /&gt;8M緩衝的硬碟也不過2200多還有新的三年保固呢... 這擺明了不想讓你換.&lt;br /&gt;&lt;br /&gt;唉 認栽了 買到爛貨就算了...還得享受這種三流服務...&lt;br /&gt;&lt;br /&gt;以後不再聽信這三星保固什麼鬼的了... &lt;br /&gt;&lt;br /&gt;還是sony的保固好, &lt;br /&gt;&lt;br /&gt;數位相機最重要的ccd壞了問也沒問就幫我修好也沒收半毛錢...&lt;br /&gt;&lt;br /&gt;(註 建達國際也代理maxtor硬碟 所以 自求多福 :P)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-2395818152359254900?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/2395818152359254900/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=2395818152359254900' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2395818152359254900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2395818152359254900'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/07/rant.html' title='[rant] 三星硬碟三年保固.... 根本只是個噱頭....'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-6211518826189657194</id><published>2007-06-24T14:34:00.000+08:00</published><updated>2007-06-24T14:54:41.071+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Thread dying problem may fixed in django/flup.</title><content type='html'>一直都耳聞django的apache+mod_fastcgi+thread mode在高負載狀況下有問題,&lt;br /&gt;&lt;a href="http://www.alrond.com/en/2007/jan/25/performance-test-of-6-leading-frameworks/"&gt;甚至也有人將之歸結於python的thread實作有問題&lt;/a&gt;,&lt;br /&gt;所以我一直以來都是使用prefork的方式來啟動fastcgi/wsgi,&lt;br /&gt;上禮拜在替django作負載調試的時候,&lt;br /&gt;也發現thread mode在超高壓力測試的情況下,的確會停止運作造成service unavailable&lt;br /&gt;(concurrency &gt; 1000)&lt;br /&gt;因此才花時間找出真正的原因(至少在我這邊的原因),&lt;br /&gt;應該是django所採用(其實不止django, pylons跟turbogears也有採用)&lt;br /&gt;的FastCGI to WSGI adapter -- flup,&lt;br /&gt;在threadpool的實作上有些許的小問題, 沒有對運作異常的thread拋出例外的情形加以處理,&lt;br /&gt;才導致了發生問題的thread沒有再次進入threadpool,所以運作一陣子後會讓所有thread悄悄死去.&lt;br /&gt;&lt;br /&gt;在修正了這個問題之後, 即使在concurrency &gt; 1000的情況下仍然保持順暢運作,&lt;br /&gt;也擺脫了使用modpython或prefork mode的fastcgi大量耗用伺服器記憶體的情形,&lt;br /&gt;thread mode + FastCGI/WSGI 果然才是王道!&lt;br /&gt;&lt;br /&gt;我&lt;a href="http://trac.saddi.com/flup/ticket/24"&gt;已提交patch&lt;/a&gt;, 期待新版的flup收納之後, 讓python的web framework在thread mode下運作更順利.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-6211518826189657194?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/6211518826189657194/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=6211518826189657194' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6211518826189657194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6211518826189657194'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/06/thread-dying-problem-may-fixed-in.html' title='Thread dying problem may fixed in django/flup.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4309210838617830122</id><published>2007-06-19T16:21:00.000+08:00</published><updated>2007-06-19T16:40:39.838+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='py3k'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><title type='text'>[link] Py3K status.</title><content type='html'>&lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=208549"&gt;Python 3000 Status Update&lt;/a&gt; 來自BDFL (GvR) 的消息, 說明目前python 3.0的發展狀況.&lt;br /&gt;&lt;br /&gt;python 3.0的第一個alpha測試版本將延至今年八月底釋出. (還有兩個月!)&lt;br /&gt;所以預定3.0的最終釋出版本也順延至2008年第二季後.&lt;br /&gt;&lt;br /&gt;恩, 照這個估算2009才是python3.0正式的開始.&lt;br /&gt;還有一年半的時間可以假裝這世界上沒有python 3.0 ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4309210838617830122?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4309210838617830122/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4309210838617830122' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4309210838617830122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4309210838617830122'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/06/link-py3k-status.html' title='[link] Py3K status.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-2821319430921871791</id><published>2007-06-16T23:44:00.000+08:00</published><updated>2007-06-16T23:53:00.164+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>[rant] Ubuntu果然連這招也學會了...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_VE6oUeg-MFI/RnQF3YybwCI/AAAAAAAAAVg/pWbBn-57RRs/s1600-h/Screenshot.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_VE6oUeg-MFI/RnQF3YybwCI/AAAAAAAAAVg/pWbBn-57RRs/s400/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5076689129058320418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;我好害怕啊.... 咬我啊... :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-2821319430921871791?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/2821319430921871791/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=2821319430921871791' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2821319430921871791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2821319430921871791'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/06/rant-ubuntu.html' title='[rant] Ubuntu果然連這招也學會了...'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_VE6oUeg-MFI/RnQF3YybwCI/AAAAAAAAAVg/pWbBn-57RRs/s72-c/Screenshot.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-6278305467229614137</id><published>2007-06-15T19:26:00.000+08:00</published><updated>2007-06-15T19:30:20.124+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[link] Generate django project API docs</title><content type='html'>&lt;a href="http://wolfram.kriesing.de/blog/index.php/2007/generate-django-project-api-docs"&gt;http://wolfram.kriesing.de/blog/index.php/2007/generate-django-project-api-docs&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這篇講到如何用epydoc產生比admin裡的doc更完整的django API文件.&lt;br /&gt;當然會包含自己專案裡面API的doc string.&lt;br /&gt;very useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-6278305467229614137?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/6278305467229614137/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=6278305467229614137' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6278305467229614137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6278305467229614137'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/06/link-generate-django-project-api-docs.html' title='[link] Generate django project API docs'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-1156314604876670107</id><published>2007-06-14T20:25:00.000+08:00</published><updated>2007-06-14T21:04:45.790+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scm'/><category scheme='http://www.blogger.com/atom/ns#' term='bzr'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[link] Mark Shuttleworth on VCS. 馬克·沙特爾沃思先生談論版本控制系統</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Mark_Shuttleworth"&gt;馬克·沙特爾沃思(Mark Shuttleworth)先生&lt;/a&gt; -- 如果你不知道我在講誰的話....&lt;br /&gt;&lt;br /&gt;就是世界第二位平民太空人,早期debian開發者跟Ubuntu創辦人啦...&lt;br /&gt;&lt;br /&gt;在&lt;a href="http://www.markshuttleworth.com"&gt;他的blog&lt;/a&gt;上談論了他對VCS的一系列看法.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.markshuttleworth.com/archives/125"&gt;Choose Lossless VCS tools if you have the luxury&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.markshuttleworth.com/archives/124"&gt;Further thoughts on version control&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.markshuttleworth.com/archives/123"&gt;Renaming is the killer app of distributed version control&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;我讀了一下他的觀點大概就像這樣... &lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;VCS最重要的功能就是renaming, 而bzr把renaming視為非常重要的功能,&lt;br /&gt;不管你的目錄怎麼搬, branch怎麼merge, bzr就是玩不爛.&lt;br /&gt;&lt;br /&gt;bzr就像raw-format, 什麼都紀錄所以速度較慢但是卻可以無損轉換成其他格式...&lt;br /&gt;在不同的情形不同的狀況下, 都可能有不同的最佳VCS工具.&lt;br /&gt;何況世界變化很快, 從tarball, RCS到CVS到SVN... &lt;br /&gt;現在很明顯的又進入到了分散式VCS的戰國時代, &lt;br /&gt;而過一陣子搞不好又有更新更好的工具.&lt;br /&gt;&lt;br /&gt;所以... 就像你最寶貝的片子/照片(通常)會存個無損RAW檔一樣,&lt;br /&gt;bzr什麼都給你記下來, 當你真的需要在特定環境作特定應用而bzr辦不到的時候,&lt;br /&gt;可以很快轉換過去.&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;當然底下的評論自然有darcs眾,水銀黨(hg)跟git幫要戰mark...&lt;br /&gt;這個就跟我沒關係了... &lt;br /&gt;我只是普通用戶一枚,&lt;br /&gt;反正這個系列的文章可能還會繼續下去,&lt;br /&gt;就等著隔山觀虎鬥, 爆米花買好, 戰的好記得出來拍手就好了.... XD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-1156314604876670107?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/1156314604876670107/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=1156314604876670107' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1156314604876670107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1156314604876670107'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/06/link-mark-shuttleworth-on-vcs.html' title='[link] Mark Shuttleworth on VCS. 馬克·沙特爾沃思先生談論版本控制系統'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-8773679900317082414</id><published>2007-06-13T18:53:00.000+08:00</published><updated>2007-06-14T11:32:11.189+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='py3k'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>PEP 3104 Access to Names in Outer Scopes -- or the ture closures for py3k</title><content type='html'>&lt;a href="http://www.python.org/dev/peps/pep-3104/"&gt;http://www.python.org/dev/peps/pep-3104/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;python 2.1以前, python是沿用C對scope的思維, &lt;br /&gt;只有很簡單的global跟local的scope概念.&lt;br /&gt;(and builtin)&lt;br /&gt;&lt;br /&gt;python 2.1之後引進nested scoping,的確帶來了不少彈性,&lt;br /&gt;不過比起一些更為彈性的語言來說, 對於scoping的控制&lt;br /&gt;仍然無法稱作完善.&lt;br /&gt;而PEP 3104引進了nonlocal這個關鍵字後,&lt;br /&gt;總算讓在python使用closure顯得自然.&lt;br /&gt;&lt;br /&gt;目前2.X的狀況:&lt;br /&gt;&lt;pre&gt; &lt;br /&gt;Python 2.4.4 (#2, Apr  5 2007, 20:11:18) &lt;br /&gt;[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&gt;&gt;&gt; def x():&lt;br /&gt;...       t=9&lt;br /&gt;...       def y():&lt;br /&gt;...             print t&lt;br /&gt;...             t = 10&lt;br /&gt;...             print t&lt;br /&gt;...       return y&lt;br /&gt;... &lt;br /&gt;&gt;&gt;&gt; z = x()&lt;br /&gt;&gt;&gt;&gt; z()&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;stdin&gt;", line 1, in ?&lt;br /&gt;  File "&lt;stdin&gt;", line 4, in y&lt;br /&gt;UnboundLocalError: local variable 't' referenced before assignment&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;雖然 我們的用意是要讓t被enclosed,  但是卻沒辦法修改t.&lt;br /&gt;注意到為什麼了吗?&lt;br /&gt;由於在scope範圍內有了對t的assignment, &lt;br /&gt;因此python會implicit的認為t是個local變數..&lt;br /&gt;啊 可是我的第一個print t敘述裡的t要的不是被rebind過的t啊~~!&lt;br /&gt;&lt;br /&gt;ㄟ.... 老師沒告訴你吗?&lt;br /&gt;"Explicit is better than implicit." :D&lt;br /&gt;所以py3k引入了nonlocal這個keyword,&lt;br /&gt;以往只能用各種hack來解決的這個問題, &lt;br /&gt;(最常用的一種是傳入list[0]),&lt;br /&gt;會相對的使得closure的運用顯得不夠直覺.&lt;br /&gt;在py3k底下則可以寫成這樣:&lt;br /&gt;(現在print 改成 function ,,要括號,, 真容易打錯 :P )&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Python 3.0x (p3yk:55958, Jun 13 2007, 18:39:18) &lt;br /&gt;[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&gt;&gt;&gt; def x():&lt;br /&gt;...       t=9&lt;br /&gt;...       def y():&lt;br /&gt;...             nonlocal t&lt;br /&gt;...             print(t)&lt;br /&gt;...             t=10&lt;br /&gt;...             print(t)&lt;br /&gt;...       return y&lt;br /&gt;... &lt;br /&gt;&gt;&gt;&gt; z = x()&lt;br /&gt;&gt;&gt;&gt; z()&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;加入了nonlocal這個declare之後,&lt;br /&gt;是不是比以前清楚的多呢 :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-8773679900317082414?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/8773679900317082414/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=8773679900317082414' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8773679900317082414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8773679900317082414'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/06/pep-3104-access-to-names-in-outer.html' title='PEP 3104 Access to Names in Outer Scopes -- or the ture closures for py3k'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-715678002482949535</id><published>2007-06-10T01:53:00.000+08:00</published><updated>2007-06-10T02:16:32.502+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='baseball'/><title type='text'>[link] 有愛連結: 以 New Gameday 數據解析王建民的投球特性</title><content type='html'>剛剛讀到這篇 Whither所寫的 &lt;a href="http://blog.roodo.com/Whither/archives/3425057.html"&gt;漫步在綠海豚街上: 以 New Gameday 數據解析王建民的投球特性&lt;/a&gt;, 看到這篇文章用心的透過Gameday的XML數據分析王建民的投球. 着實又讓大家見識到所謂的"有愛"是怎麼回事 :D&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.roodo.com/Whither/archives/2234962.html"&gt;MLB於2006年裝設了新版的gameday&lt;/a&gt;,除了將線上轉播帶進了一個新的時代,在棒球場上更裝設了30fps的高速攝影機以便能及時的分析到投打對決的實況, 然而目前只有九隊安裝高速攝影裝備, 很可惜洋基目前尚未裝設, 所以大大的減少了分析王建民投球數據的資料, 而該文便是在分析&lt;a href="http://gd2.mlb.com/components/game/mlb/year_2007/month_05/day_16/gid_2007_05_16_nyamlb_chamlb_2/pbp/pitchers/425426.xml"&gt;王建民於2007/05/16芝加哥白襪隊客場先發時所留下的XML數據&lt;/a&gt;. 內文有詳實的內容跟美觀的圖表, 透過科學化的角度分析投球內容 ,非常值得所有洋基/王建民的球迷一讀.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-715678002482949535?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/715678002482949535/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=715678002482949535' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/715678002482949535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/715678002482949535'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/06/link-new-gameday.html' title='[link] 有愛連結: 以 New Gameday 數據解析王建民的投球特性'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-3962269506937200901</id><published>2007-05-31T19:19:00.000+08:00</published><updated>2007-05-31T21:11:46.031+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Google gears !</title><content type='html'>今天進 google reader的時候發現右上角多了幾個字: offline&lt;br /&gt;&lt;br /&gt;好奇的按下去之後發現 google reader已經引進了&lt;br /&gt;google的離線儲存新技術: google gears.&lt;br /&gt;&lt;br /&gt;也就是說安裝之後, &lt;br /&gt;google reader瞬間變成離線也能閱讀的RSS瀏覽器了 !&lt;br /&gt;看來離線的gmail也不遠了...&lt;br /&gt;&lt;br /&gt;以技術面來說google gears &lt;br /&gt;以new bsd license放出,是完完全全的自由軟體.&lt;br /&gt;支援Windows/Mac/Linux , &lt;br /&gt;並且支援IE/Firefox/Safari(未來將會支援,目前在mac上支援firefox)&lt;br /&gt;等於所有主流系統全部支援.&lt;br /&gt;&lt;br /&gt;google gears除了離線存取現有的web application之外,&lt;br /&gt;還提供了一個WorkerPool的API幫助programmer將資源吃重的一部份程式以非同步方式存取,&lt;br /&gt;並且還內建輕量級資料庫sqlite 支援使用javascript撰寫sql&lt;br /&gt;(沒錯... 就是像下面這樣&lt;br /&gt;var rs = db.execute('SELECT dish FROM recipe WHERE recipe MATCH ?', ['tomatoes']);&lt;br /&gt;)&lt;br /&gt;之前雖然也有如&lt;a href="http://codinginparadise.org/projects/dojo_storage/release/dojo/tests/storage/test_storage.html"&gt;dojo storage&lt;/a&gt;之類的解決方案.但總不如早已習慣的rdbms來的方便. google幹的好啊!&lt;br /&gt;&lt;br /&gt;google gears目前雖然仍是beta中,&lt;br /&gt;但解決了web application離線存取這個麻煩的問題,&lt;br /&gt;由於是完完全全的自由軟體(允許商業使用)&lt;br /&gt;在未來有機會成為業界的新標準.&lt;br /&gt;&lt;br /&gt;更多詳細的資訊請參考:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/apis/gears/index.html"&gt;http://code.google.com/apis/gears/index.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://gears.google.com/"&gt;http://gears.google.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-3962269506937200901?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/3962269506937200901/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=3962269506937200901' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3962269506937200901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3962269506937200901'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/05/google-gears.html' title='Google gears !'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7389998315192485232</id><published>2007-05-26T19:26:00.000+08:00</published><updated>2007-05-26T19:36:09.723+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[link] Evolution of a Python programmer</title><content type='html'>從&lt;a href="http://codeplayer.blogspot.com/2007/05/evolution-of-python-programmer.html"&gt;白菜的blog上看到的&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://dis.4chan.org/read/prog/1180084983/"&gt;http://dis.4chan.org/read/prog/1180084983/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;我也來加一個:&lt;br /&gt;&lt;br /&gt;Python mind but Lisp/Scheme in heart Programmer:&lt;br /&gt;&lt;br /&gt;Y = ( lambda func:&lt;br /&gt;      ( lambda f: func(lambda x: (f(f))(x)))&lt;br /&gt;      ( lambda f: func(lambda x: (f(f))(x))))&lt;br /&gt;F = lambda f: lambda x : x==0 and 1 or x*(f)(x-1)&lt;br /&gt;T = Y(F)&lt;br /&gt;print T(6)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7389998315192485232?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7389998315192485232/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7389998315192485232' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7389998315192485232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7389998315192485232'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/05/link-evolution-of-python-programmer.html' title='[link] Evolution of a Python programmer'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-8184190333385847913</id><published>2007-05-26T16:56:00.000+08:00</published><updated>2007-05-26T19:55:57.113+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='read'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>閱讀紀錄: &lt;&lt;從北京到台北: 精神藥理學家張文和的追尋&gt;&gt;</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_VE6oUeg-MFI/Rlf2-zqSA0I/AAAAAAAAAVQ/s9GAtOWuWjY/s1600-h/P_56038_b.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_VE6oUeg-MFI/Rlf2-zqSA0I/AAAAAAAAAVQ/s9GAtOWuWjY/s400/P_56038_b.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5068791464508654402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;氯丙嗪(Chlorpromazine, C17H19ClN2S1 •HCl )，是第一個用於精神病的藥物，&lt;br /&gt;&lt;br /&gt;這個在1950年代被研發, 又稱作冬眠靈的藥物, 扭轉19世紀重病理輕治療的風氣, &lt;br /&gt;&lt;br /&gt;在20世紀末期揭起"二次生物精神醫學"的大旗.  &lt;br /&gt;&lt;br /&gt;將精神醫學帶到一個新的領域 -- 精神藥理學.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;而這本由心靈工坊出版, 吳佳璇醫師透過訪談並編寫整理出版的 ,&lt;br /&gt;&lt;br /&gt;正是其英文自傳被收錄在國際神經精神藥理學會(CINP)出版的&lt;br /&gt;&lt;br /&gt;&lt;&lt;1980年代傑出神經精神藥理學家自傳集&gt;&gt;裡,&lt;br /&gt;&lt;br /&gt;在精神藥理學界極為知名的張文和張教授,&lt;br /&gt;&lt;br /&gt;他一生在精神藥理學術領域裡耕耘,與艱困的外在環境持續搏鬥,&lt;br /&gt;&lt;br /&gt;但卻始終不曾放棄的奮鬥傳記.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;由於舍姊的緣故 運氣不錯的拿到了一本張教授親筆簽名, &lt;br /&gt;&lt;br /&gt;內容300頁左右的自傳書籍. 這次回到家中總算有閒暇仔細閱讀.&lt;br /&gt;&lt;br /&gt;張教授從生物化學轉而研究精神藥理學後, 幾十年來熱情不曾中斷, 並培養後學不遺餘力.&lt;br /&gt;&lt;br /&gt;儘管經歷中國的文革下放, 來台的凶險難行 也曾經歷外在環境的刁難, &lt;br /&gt;&lt;br /&gt;但為了繼續能研究精神藥理學, 不斷求取新知, 走進國際, 毫不畏懼的接受一場又一場的生命試煉.&lt;br /&gt;&lt;br /&gt;雖然我不是這個領域的內行人, 卻很容易的從書中描述張教授一生的行為與事蹟,&lt;br /&gt;&lt;br /&gt;讀出張教授對這個領域的熱情與專注. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;書裡有提到精神藥物領域之所以特別重要, &lt;br /&gt;&lt;br /&gt;是因為一般的疾病較容易理解病因, &lt;br /&gt;&lt;br /&gt;而經由病因開發藥物加以治療.&lt;br /&gt;&lt;br /&gt;而精神疾病卻不然, &lt;br /&gt;&lt;br /&gt;反而通常是因為運氣不錯湊巧發現了能加以治療的有效藥物, &lt;br /&gt;&lt;br /&gt;才有辦法透過研究有療效的藥物來了解真正的精神病因.&lt;br /&gt;&lt;br /&gt;而正因為精神藥物學正是象徵著一顆能解讀人類精神疾病奧秘的希望之石.&lt;br /&gt;&lt;br /&gt;也無怪乎張教授本身極為喜歡那顆導致人類破解古埃及文字奧秘, &lt;br /&gt;&lt;br /&gt;目前已被放在大英博物館展覽的Rosetta Stone.&lt;br /&gt;&lt;br /&gt;如果連個人平常的喜好都能透露出這樣的願景跟理想, &lt;br /&gt;&lt;br /&gt;從此的確可看出張教授對於精神藥物學的喜愛跟專注精神, 委實令人感動.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;書中張教授的自序的標題即是"有生涯無規劃" ,&lt;br /&gt;&lt;br /&gt;不論是在哪個領域 這種作研究的精神著實令人佩服.&lt;br /&gt;&lt;br /&gt;想起之前有次讀到日本鎖國時代的日本人,&lt;br /&gt;&lt;br /&gt;為了翻譯一本由荷蘭語所撰寫的解剖書籍:"解體新書"&lt;br /&gt;&lt;br /&gt;在沒有任何字典的輔助跟文字完全看不懂的情況下,&lt;br /&gt;&lt;br /&gt;翻譯了整整四年才得以翻譯成功. &lt;br /&gt;&lt;br /&gt;也因此才促進了當時日本醫學技術的大幅進展.&lt;br /&gt;&lt;br /&gt;而反觀在這個資訊非常容易獲得的時代, &lt;br /&gt;&lt;br /&gt;卻有許多連非常基本的問題都不肯自行研究並搜尋資料 &lt;br /&gt;&lt;br /&gt;卻只會等待別人告訴他答案或根本不願求知的人,&lt;br /&gt;&lt;br /&gt;所以我想這種有志者事竟成的心理素質,&lt;br /&gt;&lt;br /&gt;正是我們這個世代所需要學習和效法的.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-8184190333385847913?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/8184190333385847913/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=8184190333385847913' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8184190333385847913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8184190333385847913'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/05/blog-post.html' title='閱讀紀錄: &lt;&lt;從北京到台北: 精神藥理學家張文和的追尋&gt;&gt;'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_VE6oUeg-MFI/Rlf2-zqSA0I/AAAAAAAAAVQ/s9GAtOWuWjY/s72-c/P_56038_b.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-1663477990969080448</id><published>2007-05-19T07:29:00.000+08:00</published><updated>2007-05-19T07:41:23.093+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>[link] google 的四個新的實驗性介面</title><content type='html'>&lt;a href="http://www.google.com/experimental/"&gt;http://www.google.com/experimental/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;包括用時間跟地圖分類搜尋/鍵盤操作版的介面/還有相關搜尋等.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/views?q=nanotechnology%20view%3Atimeline"&gt;時間&lt;/a&gt;跟&lt;a href="http://www.google.com/views?q=olympics+view%3Amap"&gt;地圖&lt;/a&gt;分類很酷不過不知道為啥資料量很少.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/search?q=rattlesnake&amp;esrch=BetaShortcuts"&gt;鍵盤操作版用起來不大習慣....&lt;/a&gt;(不如用&lt;a href="http://conkeror.mozdev.org/"&gt;conkeror&lt;/a&gt;還有emacs binding ^o^).&lt;br /&gt;&lt;br /&gt;目前看起來最實用的應該是 Right-hand contextual search navigation &lt;br /&gt;&lt;a href="http://www.google.com/search?esrch=RefinementBarRhsPreview&amp;q=python"&gt;&lt;br /&gt;會列一個小搜尋視窗在右邊可以選擇要查的確切意思跟相關搜尋&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;像查python可以選擇你是要查真的蟒蛇還是程式語言的Python, &lt;br /&gt;&lt;br /&gt;也可以特別選擇在Blogs/Books/Groups/Code之中搜尋.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-1663477990969080448?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/1663477990969080448/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=1663477990969080448' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1663477990969080448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1663477990969080448'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/05/link-google.html' title='[link] google 的四個新的實驗性介面'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-8915821091119683529</id><published>2007-05-05T21:10:00.000+08:00</published><updated>2007-05-07T14:03:41.519+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>Home Plug !</title><content type='html'>Update緊急聲明: &lt;br /&gt;Chih-Hsiang 在評論裡提到合勤PL-100的效能不彰...&lt;br /&gt;而我昨天因為這裡傳輸需求並不高所以沒有實測,&lt;br /&gt;但剛剛一測結果讓我下巴差點沒掉下來... &lt;br /&gt;我沒想到能有這麼差... @_@&lt;br /&gt;&lt;br /&gt;所以擁有或未來打算升級到2M以上對外頻寬的千千萬萬不要買PL-100!&lt;br /&gt;剛剛實測結果, 網內FTP互傳居然只到240~230Kb/s均值...?&lt;br /&gt;也就是說實際效能是85Mbits的40分之一不到,約為2M bits&lt;br /&gt;這實際的效能差異未免太...&lt;br /&gt;&lt;br /&gt;當然我的效能測試未必準確,&lt;br /&gt;不過既然是實際發生的狀況, &lt;br /&gt;還是請大家做為慘痛的教訓參考看看 XD&lt;br /&gt;&lt;br /&gt;==&lt;br /&gt;&lt;br /&gt;因為家裡的牆壁太厚,轉彎太多,&lt;br /&gt;又遇到一張某"XDLINK"無線網路卡, 沒事就給我25%的連線品質, &lt;br /&gt;上網實在太容易斷線了,&lt;br /&gt;偏偏我老爸又嫌牽網路線太醜...&lt;br /&gt;於是今天就去建國路買了一組兩個的HomePlug電力線網路橋接器回來裝.&lt;br /&gt;&lt;br /&gt;我買的是&lt;a href="http://www.zyxel.com.tw/web/product_family_detail.php?PC1indexflag=20050804090200&amp;CategoryGroupNo=793B9FED-B80D-49FD-A662-2B188FEB0225"&gt;合勤的PL-100&lt;/a&gt;&lt;br /&gt;一開始本來想試試插在延長線上可不可行, 不過我家的延長線都有防突波 &lt;br /&gt;似乎太高檔了一點,所以一開始試連就連不上.&lt;br /&gt;不過換插平常的插頭一插上去就很順利的就可以動了.&lt;br /&gt;&lt;br /&gt;HomePlug基本上不同電表訊號就過不去了,最多能接十五個裝置.&lt;br /&gt;合勤的設定程式只有Windows版,不過也不是什麼大問題,&lt;br /&gt;基本上如果你不是有安全潔癖的話根本可以不用設定,&lt;br /&gt;電源跟網路線插上就會動了,&lt;br /&gt;我是順手設了不同的網路名稱,預設的網路名稱好像都是HomePlug.&lt;br /&gt;&lt;br /&gt;用到目前為止還算滿意, 至少比之前常常莫名其妙斷線的無線網路好多了, &lt;br /&gt;不過85Mbits的頻寬其實覺得有點太多(雖然是理論頻寬,我還沒測過), &lt;br /&gt;因為基本上我也很少網內互傳開檔, 如果真有這種需求的人應該可以考慮買200Mbits(HomePlugAV)型的.(不過我也只有100Mbits的網路卡)&lt;br /&gt;&lt;br /&gt;推薦大家家裡裝無線網路有訊號問題(例如有好幾樓),&lt;br /&gt;但是又覺得牽條網路線難看的可以試試看HomePlug.&lt;br /&gt;至少不必老擔心訊號不足的問題. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-8915821091119683529?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/8915821091119683529/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=8915821091119683529' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8915821091119683529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/8915821091119683529'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/05/home-plug.html' title='Home Plug !'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-892429177268629790</id><published>2007-05-05T00:52:00.000+08:00</published><updated>2007-05-05T00:56:35.831+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[link] 這位法國大叔寫了235隻USB webcams linux drivers...</title><content type='html'>&lt;a href="http://www.theinquirer.net/default.aspx?article=39291"&gt;這世界上就是有熱血大叔才有趣啊!!! 太猛了...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-892429177268629790?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/892429177268629790/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=892429177268629790' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/892429177268629790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/892429177268629790'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/05/link-235usb-webcams-linux-drivers.html' title='[link] 這位法國大叔寫了235隻USB webcams linux drivers...'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7259788123616770472</id><published>2007-05-05T00:11:00.001+08:00</published><updated>2007-05-05T00:29:46.882+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>[link] Microsoft needs Wizards</title><content type='html'>&lt;a href="http://groups.google.com/group/net.jobs/msg/4f2cf440919eeda9"&gt;http://groups.google.com/group/net.jobs/msg/4f2cf440919eeda9&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;a mail in 1984...&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;I consider Microsoft an excellent home for the software wizard because:&lt;br /&gt;&lt;br /&gt;        1) its a great place to work.  The company is owned (a key issue)&lt;br /&gt;           and operated by software wizards: Bill Gates and Paul Allen. &lt;br /&gt;&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;           Since the development people report strictly to software&lt;br /&gt;           engineers, who report directly to chairman/CEO Gates, we&lt;br /&gt;           never do anything stupid because some manager/MBA/suit-type&lt;br /&gt;           has power without knowledge.  (When we do something stupid,&lt;br /&gt;           its our own fault!) Likewise, there are no "politics", just&lt;br /&gt;           engineering. &lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;(save-buzz-and-die "/WhatYouSeeIsWhatPeopleMarketing" :executable t)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7259788123616770472?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7259788123616770472/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7259788123616770472' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7259788123616770472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7259788123616770472'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/05/link-microsoft-needs-wizards.html' title='[link] Microsoft needs Wizards'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-56941235132032635</id><published>2007-05-05T00:04:00.000+08:00</published><updated>2007-05-05T00:11:20.091+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>[link] 誰說只有wiki可以這樣搞.....orz</title><content type='html'>pure html+js ... 越來越有趣了 :P&lt;br /&gt;&lt;br /&gt;&lt;a href="http://base2.googlecode.com/svn/trunk/src/apps/MiniWeb/MiniWeb.html#/system/Terminal"&gt;Terminal&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://base2.googlecode.com/svn/trunk/src/apps/MiniWeb/MiniWeb.html#/"&gt;Home&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://base2.googlecode.com/svn/trunk/src/apps/MiniWeb/MiniWeb.html#/blog/"&gt;Blog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-56941235132032635?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/56941235132032635/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=56941235132032635' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/56941235132032635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/56941235132032635'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/05/link-wikiorz.html' title='[link] 誰說只有wiki可以這樣搞.....orz'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-3176248988300597843</id><published>2007-05-04T01:33:00.000+08:00</published><updated>2007-05-04T01:54:21.092+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[humor,hotlink] If On a Spring's Night a String ...</title><content type='html'>&lt;pre&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;class tim:&lt;br /&gt;   def __init__(self,tim):self.chen=tim&lt;br /&gt;   def __rlshift__(self,chen):return tim(lambda x,z=self,tim=chen:z.chen(tim,x))&lt;br /&gt;   def __rshift__(self,tim):return self.chen(tim)&lt;br /&gt;   def __call__(self,x,tim):return self.chen(x,tim)&lt;br /&gt;print "0"+hex(((reduce(lambda chen,tim: tim*chen,[int (x,32) for x in "timchen119"])&lt;br /&gt;*4+119&amp;lt;&amp;lt;tim(lambda tim,chen: tim*chen+119)&gt;&gt;((int("119"+str(93828751754616119383408*127*119))&lt;br /&gt;-1190929898972105379252210654550)))-5210475734-119))[2:-1]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I just wrote my worst python script ever.&lt;br /&gt;&lt;a href="http://tinyurl.com/2l7avl"&gt;I believe it's legal. What do you think?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-3176248988300597843?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/3176248988300597843/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=3176248988300597843' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3176248988300597843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3176248988300597843'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/05/humorhotlink-if-on-springs-night-string.html' title='[humor,hotlink] If On a Spring&apos;s Night a String ...'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4270965448338197168</id><published>2007-05-01T14:36:00.000+08:00</published><updated>2007-05-01T15:08:11.641+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>[link] Microsoft發表Dynamic Language Runtime (DLR).</title><content type='html'>我說, 這名字對了!!! ;D&lt;br /&gt;&lt;br /&gt;有了Jim Hugunin的加持之後, &lt;br /&gt;Microsoft這次沒有笨到取一個Sxxxxt Language Runtime這種蠢名字,&lt;br /&gt;看來Microsoft這次真的知道他們在作什麼. ;D&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/hugunin/archive/2007/04/30/a-dynamic-language-runtime-dlr.aspx"&gt;來自Jython/Ironpython作者Jim Hugunin的消息&lt;/a&gt;, 看來Microsoft吸收了以往對於網路不夠重視的教訓, 這次對於業界的Dynamic Language潮投注了不少心力.&lt;br /&gt;&lt;br /&gt;消息節錄重點如下:&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;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.&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;所以說DLR 目前已經支持 Python, Javascript,Visual Basic跟Ruby... &lt;br /&gt;&lt;br /&gt;!? Python跟Ruby...!? &lt;br /&gt;喔妳沒看錯... Microsoft居然開始注意Python跟Ruby的支援... &lt;br /&gt;這一天終於要來了嗎?...&lt;br /&gt;&lt;br /&gt;並且今天釋出的&lt;a href="http://silverlight.net/Default.aspx"&gt;Silverlight&lt;/a&gt; 1.1alpha1版已支援python跟Javascript. (Silverlight看起來將會是下一代Microsoft主推的web平台??)&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;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.&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;BSD-style &lt;a href="http://www.microsoft.com/resources/sharedsource/licensingbasics/permissivelicense.mspx"&gt;Microsoft Permissive License&lt;/a&gt; !???  &lt;br /&gt;&lt;br /&gt;BSD style?!沒聽錯吧... &lt;a href="http://www.opensourcelegal.org/licensedb/detail.php?lid=113&amp;SEARCH=Microsoft%20Permissive%20License%20(Ms-PL)"&gt;會不會..太opensource了一點? :DD&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;看來我這文章標題應該改成==&gt; 神奇的Jim Hugunin &lt;br /&gt;,Microsoft的自由軟體跟Python/Dynamic Language推手... XD&lt;br /&gt;&lt;br /&gt;雖然我常常沒事虧一下MS, &lt;br /&gt;不過這次還是得替Jim Hugunin跟Microsoft鼓鼓掌... &lt;br /&gt;在MS裡搞自由軟體... 讚啊...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4270965448338197168?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4270965448338197168/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4270965448338197168' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4270965448338197168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4270965448338197168'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/05/link-microsoftdynamic-language-runtime.html' title='[link] Microsoft發表Dynamic Language Runtime (DLR).'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-3606785540821338455</id><published>2007-05-01T10:26:00.000+08:00</published><updated>2007-05-01T10:59:01.431+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[link] Which Programming Language are You?</title><content type='html'>&lt;a href="http://www.bbspot.com/News/2006/08/language_quiz.php"&gt;&lt;br /&gt;&lt;img src="http://www.bbspot.com/Images/News_Features/2006/08/language/prolog.jpg" alt="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." border="0" height="90" width="300" /&gt;&lt;br /&gt;Which Programming Language are You?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;hmm 不知道為啥又吹起這股流行風...&lt;br /&gt;&lt;br /&gt;反正有趣嘛... 就作了一下 XD&lt;br /&gt;&lt;br /&gt;不過怎麼是prolog啊 比較希望是python還是lisp...&lt;br /&gt;&lt;br /&gt;update:&lt;br /&gt;&lt;br /&gt;最近太常用debian了??? @_@&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bbspot.com/News/2003/01/os_quiz.php"&gt;&lt;img src="http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg" width="300" height="90" border="0" alt="You are Debian Linux. People have difficulty getting to know you.  Once you finally open your shell they're apt to love you."&gt;&lt;br&gt;Which OS are You?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-3606785540821338455?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/3606785540821338455/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=3606785540821338455' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3606785540821338455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3606785540821338455'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/05/link-which-programming-language-are-you.html' title='[link] Which Programming Language are You?'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-5461192885232854439</id><published>2007-04-29T01:01:00.000+08:00</published><updated>2007-04-29T01:45:53.156+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='kalug'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>我論Kalug是個有趣的秘密組織. XD</title><content type='html'>這個月號稱"非常秘密"的&lt;a href="http://kalug.linux.org.tw/planet/"&gt;kalug&lt;/a&gt;聚會剛結束,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yurinfore.blogspot.com/2007/04/kalug.html"&gt;Yuren也在他的blog上發表了他文情並茂的感想.&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;文章寫的很傳神,&lt;br /&gt;但又突然發現南部的OpenSource使用者都太習慣秘密活動了...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yurinfore.blogspot.com"&gt;Yuren Ju&lt;/a&gt;僅僅自介自己是"""普通的Linux End-User 一枚..."""&lt;br /&gt;&lt;br /&gt;這也謙虛的太過份了...明明就是Blog上知性+感性的文章產量無數,秘密的研究如何用P2P征服世界,而帶來的筆記型電腦上有火焰特效+3Dberyl旋轉桌面還轉到有人說"原來用這linux就好像在打電動一樣"的無敵閃光Linux使用者吧... :D&lt;br /&gt;&lt;br /&gt;此外, 這個在南部據說真的很秘密的秘密組織又新開了一個秘密的irc頻道在&lt;a href="irc://irc.freenode.net"&gt;freenode&lt;/a&gt;,&lt;br /&gt;&lt;a href="http://yurinfore.blogspot.com/2007/04/kalug-freenode-irc.html"&gt;又很秘密的被Yuren Ju秘密的推廣了一下&lt;/a&gt;. 我當然就很秘密的拿來秘密的引用了. XD&lt;br /&gt;&lt;br /&gt;"""我覺得這個聚會很棒啊, 不過為什麼KaLUG聚會一個月只辦一次 ???"""&lt;br /&gt;&lt;a href="http://postgresql-chinese.blogspot.com/"&gt;PostgreSQL中文社群網誌裡覺得一個月五十篇還嫌少的熱血作者Kuo Chaoyi&lt;/a&gt;這麼問.&lt;br /&gt;&lt;br /&gt;blueKnows說他一天辦一次都奉陪,這真是太熱血了啦.....&lt;br /&gt;&lt;br /&gt;不過我秘密的心想.... 那這咖啡店賺我們這群秘密的顧客還真夠賺的啊!! XD &lt;&lt; 哪個要秘密的開秘密的咖啡店的請趕快啊! &gt;&gt;&lt;br /&gt;&lt;br /&gt;ps: 喔對了... 我要很秘密的說: Postgresql真的讚! 還有&lt;a href="http://postgresql-chinese.blogspot.com/"&gt;Postgresql中文網誌&lt;/a&gt;也不算很秘密的在找寫手喔... :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-5461192885232854439?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/5461192885232854439/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=5461192885232854439' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5461192885232854439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5461192885232854439'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/kalug-xd.html' title='我論Kalug是個有趣的秘密組織. XD'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7026826322698774722</id><published>2007-04-24T20:24:00.000+08:00</published><updated>2007-04-24T20:29:47.225+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>[link] Add OpenID consumer support to any Django application</title><content type='html'>&lt;a href="http://simonwillison.net/2007/Apr/24/openidconsumer/"&gt;Simon Willison&lt;/a&gt; just release &lt;a href="http://code.google.com/p/django-openid/"&gt;first version of django_openidconsumer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As Simon says:&lt;br /&gt;"""&lt;br /&gt;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.&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;This is so cool if you need any openid support in django. :)&lt;br /&gt;&lt;br /&gt;一些 OpenID 的連結:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://simonwillison.net/2006/openid-screencast/"&gt;How to use OpenID&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://simonwillison.net/2007/Feb/25/six/"&gt; Six cool things you can build with OpenID&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://simonwillison.net/2007/talks/future-openid/"&gt;The Future of OpenID&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.thinkvitamin.com/interviews/webapps/simon-willison/"&gt;&lt;br /&gt;Web developer Simon Willison talks to Vitamin about OpenID&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=0ff07054-f6fd-4093-9151-12b9fcbf8938"&gt;What is OpenID good for?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7026826322698774722?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7026826322698774722/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7026826322698774722' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7026826322698774722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7026826322698774722'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/link-add-openid-consumer-support-to-any.html' title='[link] Add OpenID consumer support to any Django application'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-1580604464583929270</id><published>2007-04-23T22:38:00.001+08:00</published><updated>2007-04-23T22:40:46.460+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[link] Django dbmigration</title><content type='html'>&lt;a href="http://groups.google.com/group/django-users/tree/browse_frm/thread/870aec51c63d4768/63dc95f94ac55db5?rnum=1&amp;q=DB+migration+django&amp;_done=%2Fgroup%2Fdjango-users%2Fbrowse_frm%2Fthread%2F870aec51c63d4768%2F406ff23149e07cee%3Flnk%3Dst%26q%3DDB%2Bmigration%2Bdjango%26rnum%3D1%26#doc_63dc95f94ac55db5"&gt;MikeH在django mailing list上&lt;/a&gt;丟出了&lt;a href="http://www.aswmc.com/dbmigration/"&gt;db migration&lt;/a&gt;的工具.&lt;br /&gt;&lt;br /&gt;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)&lt;br /&gt;&lt;br /&gt;不過這次丟出的&lt;a href="http://www.aswmc.com/dbmigration/"&gt;dbmigration&lt;/a&gt;看起來非常的不錯, 雖然版本只有0.1, 不過現在已經可以支援用django的ORM及SQL寫migration,如果繼續發展下去,應該會是非常有用的工具.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-1580604464583929270?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/1580604464583929270/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=1580604464583929270' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1580604464583929270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/1580604464583929270'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/link-django-dbmigration.html' title='[link] Django dbmigration'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-3625626117186232010</id><published>2007-04-20T22:01:00.000+08:00</published><updated>2007-04-20T22:07:04.329+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scm'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Mozilla "moves" to python-based DSCM: mercurial to replace CVS</title><content type='html'>&lt;a href="http://weblogs.mozillazine.org/preed/2007/04/version_control_system_shootou_1.html"&gt;Version Control System Shootout Redux Redux&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;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."&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;根據引用文章的說明, 不是pick而是move :D (註：原文在這邊要表示的意思是bzr跟hg都是很好的系統, 所以Mozilla不是選了hg而是移向下一代的版本控制系統)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://people.mozilla.com/~preed/bloggity-blog-blog/vcs-shootout2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://people.mozilla.com/~preed/bloggity-blog-blog/vcs-shootout2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;我不是標題黨, 不過Mozilla的確要改變原本使用CVS的方式, &lt;br /&gt;改採現正流行的distributed SCM (DSCM, Distributed Software Configuration Management 話說現在每次只要寫縮寫不打全文就會被某人唸,  XD ) ,&lt;br /&gt;而選中的正是由python實作的: mercurial.&lt;br /&gt;&lt;br /&gt;由該文引用的這張被kuso過的真人快打系統圖中, &lt;br /&gt;可看出下面這幾種是曾經在mozilla會議中提出來討論過的:&lt;br /&gt;rcs,mecurial,cvs,svn,svk,bazaar,arch,bitkeeper,sourcesafe,clearcase,Perforce,git.&lt;br /&gt;&lt;br /&gt;根據該文的說法, 有被認真考慮過的只有底下4個: bazaar / mercurial / git / Monotone&lt;br /&gt;git跟Monotone也很快就因為win32 client支援程度不好的問題被ruleout.&lt;br /&gt;(比較意外的是非常先進但使用haskell實作的darcs似乎完全沒有被考量. 不過根據該篇文章的一篇評論,似乎有人在開始匯入時就out of memory了.)&lt;br /&gt;&lt;br /&gt;因此很快的, 剩下兩個均由python實作(也意味著跨平台應該非常好 :D)的DSCM mercurial/bazaar就被mozilla同時考慮了. &lt;br /&gt;&lt;br /&gt;mercurial(以下簡稱hg)跟bazaar(以下簡稱bzr),是兩個性質非常類似的DSCM, 基本上兩個幾乎可以等同看待, 操作命令也幾乎一模一樣, 就我個人非常淺薄的使用體會跟認知,bzr功能略強一些, 而hg速度快上不少.&lt;br /&gt;我個人使用的是bzr, 所以其實就私心來說是希望bzr能被mozilla採用的. 很可惜的, 根據這篇文章的說明, mozilla也很想採用bzr, 但是發現匯入mozilla cvs庫卻需要用上一個月 :P (使用的是0.14/最新的0.15已經試圖想解決performance問題) 相反的採用hg就只有7天. &lt;br /&gt;&lt;br /&gt;不論如何mozilla似乎已經要決定轉換到hg了,&lt;br /&gt;去年shawn跟我提過的hg現在果然是紅了, &lt;br /&gt;曾經有一次開玩笑的跟&lt;a href="http://blog.seety.org/everydaywork/"&gt;yungyuc&lt;/a&gt;在線上聊天聊到如果那天bzr停止發展了那我大概就會在hg的船上. 沒想到這麼快機會就來了 XD 不過事實上bzr還在積極發展並改善速度加上也&lt;a href="https://launchpad.net/products/bzr-hg"&gt;可以使用hg的repos&lt;/a&gt;,且又由於我的檔案大部分都不大, 加上binary file都還在100MB以內, 倒是還沒遇到太多效能上的問題. 也許哪天真的有需要也可改用hg,暫時我將還是使用bzr為主. 不過大家在選用時可以將hg列入考慮. 另外該篇文章也提到:&lt;br /&gt;"""&lt;br /&gt;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).&lt;br /&gt;"""&lt;br /&gt;所以我認為至少在這短時間內, 這兩者都是非常好的選擇. :)&lt;br /&gt;&lt;br /&gt;底下列出目前使用hg跟bzr的知名opensource專案, 僅供參考:&lt;br /&gt;&lt;br /&gt;hg:&lt;br /&gt;Mozilla,opensolaris,ALSA,mutt.Xen,MoinMoin,e2fsprogs. (gpl-sun-java is considering hg too)&lt;br /&gt;&lt;br /&gt;bzr:&lt;br /&gt;Ubuntu, Drupal,BitlBee,nose,PyChart,Samba.&lt;br /&gt;&lt;br /&gt;(當然, 更大部分的專案都使用svn 事實上我也很愛用svn 只要svn符合你的需求,svn目前還是非常正確的選擇, and, Nobody ever got fired for picking IBM :^)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-3625626117186232010?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/3625626117186232010/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=3625626117186232010' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3625626117186232010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3625626117186232010'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/mozilla-moves-to-python-based-dscm.html' title='Mozilla &quot;moves&quot; to python-based DSCM: mercurial to replace CVS'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-6192431407130931718</id><published>2007-04-14T20:07:00.000+08:00</published><updated>2007-04-14T20:16:16.101+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>[link] django template utilities</title><content type='html'>&lt;a href="http://www.b-list.org/weblog/2007/04/12/django-template-utilities"&gt;James Bennett&lt;/a&gt;發佈了&lt;a href="http://code.google.com/p/django-template-utils/"&gt;django-template-utils&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;django的template tags的使用跟抉擇一直是個藝術,&lt;br /&gt;有些人嫌他功能過於強大&lt;a href="http://www.pythonthreads.com/articles/interviews/django-shines-when-it-comes-to-developing-content-oriented-web-sites.html"&gt;(ex: guido)&lt;/a&gt;,也有不少朋友覺得他功能過少,&lt;br /&gt;James Bennett開發了一些template tags並整理了&lt;a href="http://code.google.com/p/django-template-utils/wiki/ReadMe"&gt;不錯的使用文件&lt;/a&gt;.有興趣的人可以參考看看.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-6192431407130931718?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/6192431407130931718/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=6192431407130931718' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6192431407130931718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/6192431407130931718'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/link-django-template-utilities.html' title='[link] django template utilities'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-2642218186101973146</id><published>2007-04-14T19:42:00.000+08:00</published><updated>2007-04-14T20:04:47.299+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><category scheme='http://www.blogger.com/atom/ns#' term='Emacs'/><title type='text'>[tip] Emacs 管理方法的一些零散小看法.</title><content type='html'>每個使用emacs的人emacs管理方法都各有不同,&lt;br /&gt;未必我的經驗就是好的, 網路上也有不少先進有他們獨到的看法, &lt;br /&gt;我也時常受益良多,&lt;br /&gt;不過在這之前我得先說個悲慘的emacs小故事:&lt;br /&gt;&lt;br /&gt;從前有一個喜愛使用emacs的人,&lt;br /&gt;因為他慣用的.emacs被人弄丟了,&lt;br /&gt;從此之後就使用了vi.&lt;br /&gt;&lt;br /&gt;(註: 這個人的名字叫Tim O'reilly.)&lt;br /&gt;&lt;br /&gt;這個被我渲染過的悲慘小故事告訴了我們, &lt;br /&gt;如果想要好好使用emacs, &lt;br /&gt;就不得不用點心思在管理emacs files上.&lt;br /&gt;何況別人的.emacs對你而言經常是無用的,&lt;br /&gt;而一旦你丟失了你的慣用.emacs,&lt;br /&gt;想重新打造一個屬於自己的.emacs將耗盡你的青春,&lt;br /&gt;甚至還不如去學一個別的editor.&lt;br /&gt;&lt;br /&gt;我目前的一些管理方法是這樣的,當然我說過了,&lt;br /&gt;我的作法未必正確,而且未來也可能會改變我的看法,&lt;br /&gt;這篇將就將就參考看看吧:&lt;br /&gt;&lt;br /&gt;1. 維持~/.emacs 簡單, 使用~/.emacs.d來管理emacs&lt;br /&gt;&lt;br /&gt;我的.emacs目前只放了一些很簡單的事情,&lt;br /&gt;如: Custom 跟我的initial .el"s" function.&lt;br /&gt;好處就是.emacs很清爽, 如果有需要的話, &lt;br /&gt;也只要將非常重要的設定放在這邊就好了 其他的利用.emacs.d來對設定分門別類.&lt;br /&gt;&lt;br /&gt;2. Add functions to auto-compile every .el after you edit it.&lt;br /&gt;&lt;br /&gt;編譯成.elc會加快你loading emacs的速度.&lt;br /&gt;&lt;br /&gt;我寫了一個elisp function來自動作這件事情:&lt;br /&gt;(.emacs可另外處理)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(defun auto-byte-compile-el-file ()&lt;br /&gt;  (let* ((filename (file-truename buffer-file-name)))&lt;br /&gt;    (cond ((string= (substring filename                                       &lt;br /&gt;            (- (length filename) 3)) ".el")&lt;br /&gt;          (byte-compile-file filename)))))&lt;br /&gt;&lt;br /&gt;(add-hook 'after-save-hook 'auto-byte-compile-el-file)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3. 使用版本控制軟體(SCM).&lt;br /&gt;&lt;br /&gt;我使用的是bazaar, 一個分散式的SCM. 因為我覺得他對我來說很方便. &lt;br /&gt;不過不論如何,我強烈建議採用任何一個你慣用的SCM(cvs/subversion/darcs/git)來控管你的.emacs/.emacs.d&lt;br /&gt;別忘了,你的.emacs非常重要, 甚至比妳專案的程式碼都還來的重要,&lt;br /&gt;程式碼丟了不過是個案子, .emacs丟了妳痛苦一輩子 :P&lt;br /&gt;&lt;br /&gt;4. 善用M-x toggle-debug-on-error&lt;br /&gt;&lt;br /&gt;這是debug emacs設定的最佳實務技巧. &lt;br /&gt;相信我, 妳會用到他的.&lt;br /&gt;&lt;br /&gt;5. 使用管理rc的方式來管理.emacs.d&lt;br /&gt;&lt;br /&gt;將你的.emacs.d 分類, 並寫成像rc的方式.&lt;br /&gt;類似如此:&lt;br /&gt;&lt;br /&gt;000globalinit.el&lt;br /&gt;010packageinit.el&lt;br /&gt;020etags.el&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;600ecb.el&lt;br /&gt;700lisp.el&lt;br /&gt;710python.el&lt;br /&gt;715django.el&lt;br /&gt;720javascript.el&lt;br /&gt;730cc.el&lt;br /&gt;740ruby.el&lt;br /&gt;750haskell.el&lt;br /&gt;900testconfig.el&lt;br /&gt;&lt;br /&gt;6. install site packages to your .emacs.d&lt;br /&gt;&lt;br /&gt;將你安裝的emacs套件與你的設定檔分開管理. 但是都放在 .emacs.d裏面.&lt;br /&gt;&lt;br /&gt;7. 將 bookmark, TAGS, auto-save, desktop_state, semantic.cache, backups, session 等檔案納入.emacs.d管理.&lt;br /&gt;&lt;br /&gt;emacs有很多檔案預設會四散在各地, 最好也將他納入.emacs.d管理.&lt;br /&gt;&lt;br /&gt;8. set $EDITOR to emacsclient.&lt;br /&gt;&lt;br /&gt;emacs的啟動速度是個問題, 使用emacsclient是個好方法.&lt;br /&gt;&lt;br /&gt;9. 替.emacs.d 作一個bookmark, 並安裝dired-single.el&lt;br /&gt;我相信你會常常需要修改.emacs.d, 我的作法是作一個bookmark,&lt;br /&gt;此外,dired-single.el可以讓你不要每次切換目錄都開一個dired出來.&lt;br /&gt;&lt;br /&gt;10. 當然還有很多想法/技巧我無法一一列舉,&lt;br /&gt;不過我覺得用emacs是一輩子的事, 值得用一輩子來學習.&lt;br /&gt;&lt;br /&gt;****&lt;br /&gt;&lt;br /&gt;It's your editor, not other's.&lt;br /&gt;&lt;br /&gt;沒有任何兩個人心中的夢幻editor是一樣的,&lt;br /&gt;像我重設了emacs的ctrl-k刪行行為, &lt;br /&gt;但另外一個emacs user卻可能嗤之以鼻.&lt;br /&gt;另外emacs user經常大幅度的改變了不少預設的keystroke,&lt;br /&gt;故每個人都有一套自己順手的emacs操作方法,&lt;br /&gt;所以自己的.emacs要自己管理, 沒有人能幫上你太多忙.&lt;br /&gt;&lt;br /&gt;每個人都在打造屬於自己最適合自己的"editor神器", &lt;br /&gt;但天下可沒有白吃的午餐, 別人的神器未必是你的神器, &lt;br /&gt;而emacs的價值就在於emacs提供了一個機會讓你去打造屬於自己的editor,&lt;br /&gt;&lt;br /&gt;"Think emacs as an environment."&lt;br /&gt;&lt;br /&gt;如果你是programmer,&lt;br /&gt;如果你一天花時間在editor上超過八小時,&lt;br /&gt;請用你學習作業系統的想法去打造emacs, &lt;br /&gt;既然肯花很多時間去打造屬於自己的windows/linux/*bsd/OSX, &lt;br /&gt;為何不願意花時間打造editor?&lt;br /&gt;&lt;br /&gt;Since you use emacs, you need to think different.&lt;br /&gt;I believe emacs will reward you. At least, it rewards me a lot.&lt;br /&gt;&lt;br /&gt;:-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-2642218186101973146?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/2642218186101973146/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=2642218186101973146' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2642218186101973146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2642218186101973146'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/tips-emacs_14.html' title='[tip] Emacs 管理方法的一些零散小看法.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-9088990135594173771</id><published>2007-04-14T19:08:00.000+08:00</published><updated>2007-04-14T20:27:46.841+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='openvpn'/><title type='text'>[tip] How to Setup OpenVPN to connect 2 internetworks seamlessly.</title><content type='html'>Author: timchen119 (timchen119.blogspot.com)&lt;br /&gt;&lt;br /&gt;openvpn有非常多種設定方法, 依個人遇到的需求不同有所變化.&lt;br /&gt;&lt;br /&gt;我這邊整理的是使用一台server跟一台client共安裝兩台openvpn機器(linux gateway), &lt;br /&gt;讓兩個可能地理位置不同的區域網路連接起來的方法.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Network 10.1.0.x                                       Network 10.2.0.x&lt;br /&gt;&lt;br /&gt;10.1.0.2 &lt;---&gt; 10.1.0.1 ============================= 10.2.0.1 &lt;---&gt; 10.2.0.2&lt;br /&gt;                  GW                 VPN                  GW&lt;br /&gt;               (10.8.0.0)&lt;br /&gt;              OpenVPN Client                        OpenVPN Server&lt;br /&gt;              192.168.23.39                         192.168.23.38&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;              &lt;br /&gt;After setup OpenVPN, you should possible connect to 10.2.0.2 from 10.1.0.2 without any special settings.&lt;br /&gt;&lt;br /&gt;Steps on debian linux:&lt;br /&gt;&lt;br /&gt;1. apt-get install openvpn (on both client/server)&lt;br /&gt;2. cd /usr/share/doc/openvpn/examples/easy-rsa/&lt;br /&gt;3. edit vars / source vars (if you need key more than 1024bit, 2048bit+ recommended.)&lt;br /&gt;4. ./build-dh&lt;br /&gt;5. ./build-ca&lt;br /&gt;6. ./build-key-server server &lt;br /&gt;7. ./build-key client &lt;br /&gt;(Note: you have to set different common name from server's, &lt;br /&gt;       we'll need this later, I'll use CVKK2 for example)&lt;br /&gt;&lt;br /&gt;8. on client side:&lt;br /&gt;&lt;br /&gt;a. put ca.crt client.crt client.csr client.key to /etc/openvpn&lt;br /&gt;b. create /etc/openvpn/client.conf&lt;br /&gt;client&lt;br /&gt;ns-cert-type server&lt;br /&gt;remote 192.168.23.38 #server ip&lt;br /&gt;dev tun&lt;br /&gt;tls-client&lt;br /&gt;&lt;br /&gt;comp-lzo&lt;br /&gt;&lt;br /&gt;dh dh1024.pem&lt;br /&gt;ca ca.crt&lt;br /&gt;cert client.crt&lt;br /&gt;key client.key&lt;br /&gt;&lt;br /&gt;log         openvpn.log&lt;br /&gt;log-append  openvpn.log&lt;br /&gt;&lt;br /&gt;c. check you gateway/ip forward settings:&lt;br /&gt;if you didn't setup yet you'll need this in your /etc/init.d and a link in /etc/rc2.d: &lt;br /&gt;echo 1 &gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;iptables -t nat -A POSTROUTING -o eth0 -s 10.1.0.0/24 -j MASQUERADE&lt;br /&gt;&lt;br /&gt;9. on server side:&lt;br /&gt;&lt;br /&gt;a. put ca.key ca.crt server.crt server.csr server.key dh1024.pem to /etc/openvpn&lt;br /&gt;&lt;br /&gt;b. create /etc/openvpn/server.conf&lt;br /&gt;&lt;br /&gt;dev tun&lt;br /&gt;server 10.8.0.0 255.255.255.0&lt;br /&gt;push "route 10.2.0.0 255.255.255.0"&lt;br /&gt;&lt;br /&gt;comp-lzo&lt;br /&gt;ifconfig-pool-persist ipp.txt&lt;br /&gt;&lt;br /&gt;persist-key&lt;br /&gt;persist-tun&lt;br /&gt;&lt;br /&gt;tls-server&lt;br /&gt;dh dh1024.pem&lt;br /&gt;ca ca.crt&lt;br /&gt;cert server.crt&lt;br /&gt;key server.key  # This file should be kept secret&lt;br /&gt;&lt;br /&gt;client-config-dir ccd&lt;br /&gt;route 10.1.0.0 255.255.255.0&lt;br /&gt;client-to-client&lt;br /&gt;push "route 10.1.0.0 255.255.255.0"&lt;br /&gt;&lt;br /&gt;c. mkdir /etc/openvpn/ccd&lt;br /&gt;&lt;br /&gt;d. create file CVKK2 in ccd directory. &lt;br /&gt;(the filename should match client's commonname in client.crt)&lt;br /&gt;&lt;br /&gt;put this following line in this file:&lt;br /&gt;iroute 10.1.0.0 255.255.255.0&lt;br /&gt;&lt;br /&gt;e. check you gateway/ip forward settings:&lt;br /&gt;if you didn't setup yet you'll need this in your /etc/init.d and a link in /etc/rc2.d: &lt;br /&gt;echo 1 &gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;iptables -t nat -A POSTROUTING -o eth0 -s 10.1.0.0/24 -j MASQUERADE&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-9088990135594173771?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/9088990135594173771/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=9088990135594173771' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/9088990135594173771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/9088990135594173771'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/tip-how-to-setup-openvpn-to-connect-2.html' title='[tip] How to Setup OpenVPN to connect 2 internetworks seamlessly.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-5072557450888705574</id><published>2007-04-13T10:40:00.000+08:00</published><updated>2007-04-13T11:04:20.988+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>[tip] Share gentoo distfiles directory with FreeBSD NFS server.</title><content type='html'>由於我的gentoo機器不止一台, 所以一直以來都是先mirror一份portage進LAN之後, 再rsync自己.&lt;br /&gt;不過由於我的機器IO太慢了, 最近總算忍不住向lloyd借了一台freebsd機器來架了一個portage rsync server, 想說順便將portage裡的distfiles share出去, 這樣就不用將distfiles一抓再抓. 沒想到只要一mount,emerge就出現問題.會一直掛在那邊不抓檔案. 實在非常詭異. &lt;br /&gt;&lt;br /&gt;不過稍微研究了一下就被我找到問題點了, 原來是fbsd上的rpc.lockd沒開.&lt;br /&gt;&lt;br /&gt;解決方法有二.&lt;br /&gt;1. edit freebsd's /etc/rc.conf 將rpc_lockd_enable 改成"YES", 然後再將rpcbind restart.&lt;br /&gt;&lt;br /&gt;2. mount option + "nolock" for gentoo.&lt;br /&gt;將mount option改成&lt;br /&gt;rw,soft,timeo=1,noatime,rsize=1024,wsize=1024,nolock&lt;br /&gt;&lt;br /&gt;我是採用了第2個方法. &lt;br /&gt;果然加上了nolock之後emerge就很順暢了.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-5072557450888705574?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/5072557450888705574/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=5072557450888705574' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5072557450888705574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5072557450888705574'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/tip-share-gentoo-distfiles-directory.html' title='[tip] Share gentoo distfiles directory with FreeBSD NFS server.'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4995820893507611791</id><published>2007-04-09T09:20:00.000+08:00</published><updated>2007-04-09T09:25:47.197+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Debian 4.0 released...</title><content type='html'>起床就看到好消息:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.debian.org/News/2007/20070408"&gt;http://www.debian.org/News/2007/20070408&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"etch" Debian 4.0 released.&lt;br /&gt;&lt;br /&gt;(sarge...我終於可以擺脫你了 XD)&lt;br /&gt;&lt;br /&gt;老天終於聽到我的呼喊了~~ XD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4995820893507611791?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4995820893507611791/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4995820893507611791' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4995820893507611791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4995820893507611791'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/debian-40-released.html' title='Debian 4.0 released...'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-5596950140582103121</id><published>2007-04-03T18:31:00.000+08:00</published><updated>2007-04-03T18:37:00.222+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='pypy'/><title type='text'>pypy 1.0 first try</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;* you may need install these first *&lt;br /&gt;&lt;br /&gt;apt-get install&lt;br /&gt;&lt;br /&gt;gcc libc6-dev make autoconf libgc-dev bzip2&lt;br /&gt;subversion python2.4 python2.4-dev &lt;br /&gt;python-ctypes python-pygame&lt;br /&gt;&lt;br /&gt;Note: you don't really need python-pygame if you specify with --text.&lt;br /&gt;&lt;br /&gt;Note for debian stable user: &lt;br /&gt;&lt;br /&gt;if you're using debian stable, you have to manually install ctypes.&lt;br /&gt;&lt;br /&gt;python2.4-ctypes is 0.9.5-1 in debian stable, &lt;br /&gt;&lt;br /&gt;pypy need version 0.9.9.6 or later:&lt;br /&gt;&lt;br /&gt;wget http://nchc.dl.sourceforge.net/sourceforge/ctypes/ctypes-1.0.1.tar.gz&lt;br /&gt;&lt;br /&gt;tar zxvf ctypes-1.0.1.tar.gz&lt;br /&gt;&lt;br /&gt;cd ctypes-1.0.1&lt;br /&gt;&lt;br /&gt;python2.4 setup.py install&lt;br /&gt;&lt;br /&gt;* how to translate pypy to c-version pypy with jit *&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WARNING: YOU AT LEAST NEED a 512MB RAM box...&lt;br /&gt;         I'll recommend 1GB RAM box.&lt;br /&gt;   since this will generate a 700mb python process&lt;br /&gt;   ( 704m 693m 5872 R 99.9 78.3  53:14.25 python2.4,&lt;br /&gt;     I build this on 3.2GHZCPU+1GB ram debian stable box)&lt;br /&gt;         I first translate pypy in a 512MB RAM gentoo box,&lt;br /&gt;         after 3 days memory swapping I gave up.&lt;br /&gt;&lt;br /&gt;wget http://codespeak.net/download/pypy/pypy-1.0.0.tar.bz2&lt;br /&gt;&lt;br /&gt;#or svn co http://codespeak.net/svn/pypy/dist pypy-dist&lt;br /&gt;&lt;br /&gt;tar jxvf pypy-1.0.0.tar.bz2&lt;br /&gt;&lt;br /&gt;cd pypy-1.0.0/pypy/translator/goal/&lt;br /&gt;&lt;br /&gt;python2.4 translate.py --batch --text --jit targetpypystandalone&lt;br /&gt;&lt;br /&gt;and wait 2 hours (if you have 1gb ram)&lt;br /&gt;&lt;br /&gt;* woot! pypy-c !&lt;br /&gt;&lt;br /&gt;let's check this:&lt;br /&gt;&lt;br /&gt;pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# ls -lh pypy-c &lt;br /&gt;-rwxr-xr-x 1 root root 9.2M Apr  3 16:22 pypy-c&lt;br /&gt;&lt;br /&gt;pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# ldd pypy-c &lt;br /&gt;        linux-gate.so.1 =&gt;  (0xffffe000)&lt;br /&gt;        libgc.so.1 =&gt; /usr/lib/libgc.so.1 (0x4001e000)&lt;br /&gt;        libm.so.6 =&gt; /lib/tls/i686/cmov/libm.so.6 (0x4004f000)&lt;br /&gt;        libpthread.so.0 =&gt; /lib/tls/i686/cmov/libpthread.so.0 (0x40074000)&lt;br /&gt;        libc.so.6 =&gt; /lib/tls/i686/cmov/libc.so.6 (0x40086000)&lt;br /&gt;        libdl.so.2 =&gt; /lib/tls/i686/cmov/libdl.so.2 (0x401b7000)&lt;br /&gt;        /lib/ld-linux.so.2 (0x40000000)&lt;br /&gt;&lt;br /&gt;* The benchmark part&lt;br /&gt;&lt;br /&gt;1. startup time is great&lt;br /&gt;&lt;br /&gt;pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time ./pypy-c -c "print 'hello world!' "&lt;br /&gt;hello world!&lt;br /&gt;&lt;br /&gt;real    0m0.006s&lt;br /&gt;user    0m0.003s&lt;br /&gt;sys     0m0.003s&lt;br /&gt;&lt;br /&gt;pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time python -c "print 'hello world!' "&lt;br /&gt;hello world!&lt;br /&gt;&lt;br /&gt;real    0m0.009s&lt;br /&gt;user    0m0.005s&lt;br /&gt;sys     0m0.005s&lt;br /&gt;&lt;br /&gt;2. jit speed seems promising. &lt;br /&gt;&lt;br /&gt;pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time ./pypy-c demo/jit/f1.py &gt; /dev/null 2&gt;&amp;1&lt;br /&gt;&lt;br /&gt;real    0m0.449s&lt;br /&gt;user    0m0.442s&lt;br /&gt;sys     0m0.007s&lt;br /&gt;&lt;br /&gt;pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time python demo/jit/f1.py &gt; /dev/null&lt;br /&gt;&lt;br /&gt;real    0m5.347s&lt;br /&gt;user    0m5.343s&lt;br /&gt;sys     0m0.004s&lt;br /&gt;&lt;br /&gt;however current JIT not faster than psyco.full():&lt;br /&gt;&lt;br /&gt;pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time python demo/jit/f1-psyco.py &gt; /dev/null&lt;br /&gt;&lt;br /&gt;real    0m0.048s&lt;br /&gt;user    0m0.046s&lt;br /&gt;sys     0m0.002s&lt;br /&gt;&lt;br /&gt;3. it's a bit slow in a real test in this stage.&lt;br /&gt;&lt;br /&gt;I took the nbody test in "Computer Language Shootout",&lt;br /&gt;&lt;br /&gt;http://shootout.alioth.debian.org/gp4/benchmark.php?test=nbody&amp;lang=python&amp;id=0&lt;br /&gt;&lt;br /&gt;pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time python nbody.py 20000&lt;br /&gt;-0.169075164&lt;br /&gt;-0.169089263&lt;br /&gt;&lt;br /&gt;real    0m1.729s&lt;br /&gt;user    0m1.724s&lt;br /&gt;sys     0m0.005s&lt;br /&gt;&lt;br /&gt;pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time ./pypy-c nbody.py 20000&lt;br /&gt;-0.169075164&lt;br /&gt;-0.169089263&lt;br /&gt;&lt;br /&gt;real    0m13.542s&lt;br /&gt;user    0m13.539s&lt;br /&gt;sys     0m0.003s&lt;br /&gt;&lt;br /&gt;pypy-c without jit almost 8 times slower :(&lt;br /&gt;&lt;br /&gt;and, with the current 1.0 alpha stage JIT, the performance isn't any better.&lt;br /&gt;(since nbody.py use lots of floating arithmetic)&lt;br /&gt;&lt;br /&gt;I add these in nbody.py:&lt;br /&gt;&lt;br /&gt;import pypyjit&lt;br /&gt;pypyjit.enable(advance.func_code)&lt;br /&gt;pypyjit.enable(energy.func_code)&lt;br /&gt;pypyjit.enable(offset_momentum.func_code)&lt;br /&gt;&lt;br /&gt;pypy:/home/tim/pypy-1.0.0/pypy/translator/goal# time ./pypy-c nbody.py 20000 &gt; /dev/null 2&gt;&amp;1&lt;br /&gt;&lt;br /&gt;real    0m19.550s&lt;br /&gt;user    0m19.531s&lt;br /&gt;sys     0m0.019s&lt;br /&gt;&lt;br /&gt;* conclusion:&lt;br /&gt;&lt;br /&gt;1. I don't think pypy 1.0 is ready for production. At least not in my project.&lt;br /&gt;   So don't try to replace CPython via pypy at this stage. &lt;br /&gt;   (but maybe you have a good reason)&lt;br /&gt;&lt;br /&gt;2. pypy 1.0 is not faster than CPython at this stage. Actually, much slower.&lt;br /&gt;   (JIT looks promising, however it's still in alpha stage.)&lt;br /&gt;&lt;br /&gt;3. pypy really need a 2.0 release. (A joe average user branch)&lt;br /&gt;   It looks good,&lt;br /&gt;   since it wanna try to do something really different,&lt;br /&gt;   but not good enough yet.&lt;br /&gt;   we need more.&lt;br /&gt;&lt;br /&gt;4. my benchmarking is so naive here, so if you don't like it, &lt;br /&gt;   you should do it your own self.&lt;br /&gt;&lt;br /&gt;5. despite these, good work.&lt;br /&gt;   Thanks the effort from pypy team. we really really need more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-5596950140582103121?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/5596950140582103121/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=5596950140582103121' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5596950140582103121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/5596950140582103121'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/pypy-10-first-try.html' title='pypy 1.0 first try'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-2178566754726958320</id><published>2007-04-03T15:07:00.000+08:00</published><updated>2007-04-03T15:14:30.628+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='Emacs'/><title type='text'>[tips] emacs遠端sudo編輯檔案</title><content type='html'>上次shawn問我了一個問題,&lt;br /&gt;怎麼用emacs遠端登入之後sudo成root編輯遠方的檔案(如:/etc/fstab).&lt;br /&gt;&lt;br /&gt;如果是使用emacs-unicode2 branch其實很簡單. 因為內建的tramp是2.0.55&lt;br /&gt;只要使用C-x C-f後鍵入&lt;br /&gt;/multi:ssh:user@host:sudo:root@127.0.0.1:/etc/fstab&lt;br /&gt;&lt;br /&gt;不過由於我另裝的tramp裝的是比較新的2.1.9pre&lt;br /&gt;原來的方法就行不通&lt;br /&gt;需要改成使用proxies的方法&lt;br /&gt;&lt;br /&gt;在.emacs內加入&lt;br /&gt;(add-to-list 'tramp-default-proxies-alist&lt;br /&gt;                  '("blah\\.blah2\\.org\\.tw\\'" "\\`root\\'" "/ssh:%h:"))&lt;br /&gt;&lt;br /&gt;這次改成C-x C-f後鍵入&lt;br /&gt;/sudo:root@blah.blah2.org.tw:/etc/fstab&lt;br /&gt;&lt;br /&gt;即可透過emacs跟sudo直接遠端編輯/etc/fstab&lt;br /&gt;&lt;br /&gt;需要更多資訊還可以參考&lt;br /&gt;http://www.gnu.org/software/tramp/#Multi_002dhops&lt;br /&gt;http://www.emacswiki.org/cgi-bin/wiki/TrampMode&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-2178566754726958320?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/2178566754726958320/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=2178566754726958320' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2178566754726958320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/2178566754726958320'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/tips-emacssudo.html' title='[tips] emacs遠端sudo編輯檔案'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-7362111373477302239</id><published>2007-04-03T09:36:00.000+08:00</published><updated>2007-04-03T09:51:27.964+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>真是個好節日啊~~</title><content type='html'>&lt;a href="http://pythononplanes.com/"&gt;http://pythononplanes.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"Planes is the most well thought-out snake oil framework I’ve ever sniffed."&lt;br /&gt;&lt;br /&gt;這個我一看就知道很明顯的不僅可以減少程式碼,&lt;br /&gt;還可以快速增加生產力10000倍!!! XD&lt;br /&gt;&lt;br /&gt;"it lets you write beautiful code by favoring snake oil over gems."&lt;br /&gt;&lt;br /&gt;Snake Oil 萬歲! XD&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pythononplanes.com/pythononplanes_files/logo.gif"&gt;&lt;img style="cursor: pointer; width: 200px;" src="http://pythononplanes.com/pythononplanes_files/logo.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-7362111373477302239?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/7362111373477302239/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=7362111373477302239' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7362111373477302239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/7362111373477302239'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/blog-post.html' title='真是個好節日啊~~'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-4191319291120593724</id><published>2007-04-01T10:58:00.000+08:00</published><updated>2007-04-01T12:18:35.873+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>Tim Oreilly -- blogger的行為七準則草稿</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Tim_O%27Reilly"&gt;Tim O'reilly&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/O%27Reilly_Media" title="O'Reilly Media"&gt;O'Reilly &lt;span style="font-weight: bold;"&gt;Media&lt;/span&gt;&lt;/a&gt; 的Founder,&lt;br /&gt;就在不久之前發表了&lt;a href="http://radar.oreilly.com/archives/2007/03/call_for_a_blog_1.html"&gt;Call for a Blogger's Code of Conduct&lt;/a&gt;&lt;br /&gt;也拋出了這樣的一個早已存在但終於不得不正視的新議題.&lt;br /&gt;&lt;br /&gt;事件的導火線在於&lt;a href="http://en.wikipedia.org/wiki/Kathy_Sierra"&gt;Kathy Sierra&lt;/a&gt;,著名的Head First系列的女作者,&lt;br /&gt;(Head First Java,Head First Design Patterns,Head First Servlets and JSP,Head First EJB)&lt;br /&gt;不久前&lt;a href="http://headrush.typepad.com/creating_passionate_users/2007/03/as_i_type_this_.html"&gt;因在其blog上受到了死亡威脅&lt;/a&gt;,&lt;br /&gt;而中止參加一場O'Reilly在San Diego的ETech conference.&lt;br /&gt;&lt;br /&gt;有圖有真相: &lt;a href="http://headrush.typepad.com/photos/uncategorized/2007/03/26/unclebobpicture.jpg"&gt;http://headrush.typepad.com/photos/uncategorized/2007/03/26/unclebobpicture.jpg&lt;/a&gt;&lt;br /&gt;&lt;a href="http://headrush.typepad.com/photos/uncategorized/2007/03/26/unclebobcomments1.png"&gt;http://headrush.typepad.com/photos/uncategorized/2007/03/26/unclebobcomments1.png&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;於是有鑑於此, Tim O'reilly拋出了的新的Blogger行為準則草稿, 略譯之後加上個人的感想如下:&lt;br /&gt;(如果以Web 2.0行銷術語來說, 也就是"Web 2.0時代的新部落客行為準則" XD)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1)Take responsibility not just for your own words, but for the comments you allow on your blog.&lt;br /&gt;不只對在blog上的發表的文章負責, 也要包括blog上的評論.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;提姆註: Tim O'reilly對於Chris Locke的'YOYOW -- You Own Your Own Words'的論點提出的對應觀點, 在目前, 有非常多的blogger認同Chris Locke的觀點, 也就是評論者應對自己的評論負起責任, 而網站所有者不應對此負責. Tim O'reilly認為, 這樣的YOYOW的觀點不應無限上綱, 而應該有個最低限度, 就像我們常說的所謂"自由"的前提是在不妨礙他人的情況下.&lt;br /&gt;&lt;br /&gt;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."""&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2) Label your tolerance level for abusive comments.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;在blog上標示對含攻擊性的評論之容忍限度.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;提姆註: Tim O'reilly 提到 &lt;a href="http://blogher.org/community-guidelines"&gt;BlogHer&lt;/a&gt;所提出的"不可接受的內容"應該是一個不錯的起點.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3) Consider eliminating anonymous comments.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;可考慮停用匿名評論&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;提姆註: Tim O'reilly認為雖然匿名性仍然在某些地方有必要,&lt;br /&gt;不過在大部分的情況下,Identity會改變人們的行為.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4) Ignore the trolls.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;忽略&lt;/span&gt;&lt;a href="http://zh.wikipedia.org/wiki/%E7%99%BD%E7%9B%AE"&gt;&lt;span style="font-weight: bold;"&gt;小白&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;提姆註: 避戰而不畏戰是也, 有不得不戰的理由時再踩小白幾腳,&lt;br /&gt;大部分時間請直接忽略小白. 因為小白是殺不死的 :D&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5) Take the conversation offline, and talk directly, or find an intermediary who can do so.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;將對話內容離線,直接面對面交談或者找一個和事佬.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;提姆註: 這點可以注意看一下Tim O'reilly的說明, Tim的意思是儘量不要就某一議題在blog上隔空對罵.很多事情見了面交談或許會好一點.比如Chris Locke覺得Kathy明明知道圖片不是他發表的,為什麼公開的指責他是網站所有者之類的. 當然, 人如果都能這麼理性的話...那就世界和平了 XD&lt;br /&gt;不過Tim O'reilly的意思是, 如果可以的話, 不論如何多製造私底下交談的機會都會比對罵來的好一點.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6) If you know someone who is behaving badly, tell them so.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;如果妳知道誰的舉止不佳, 告知他們.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;提姆註: 可能的話, 婉轉一點 :P 我自己覺得比較糟糕的一點是, 這個時代, 大家都怕瘋子. :P 不過Tim O'reilly在這邊主要指的是自己的朋友, 不要畏懼告訴自己的朋友妳覺得他的評論或文章有過於攻擊性的問題, 應持續的溝通.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7) Don't say anything online that you wouldn't say in person.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;不要在網路上說任何妳平常不會直接面對面的對人說的話.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tim O'reilly的Blogger七準則草稿只是一個起點,&lt;br /&gt;(當然, 我認為是一個好的起點)&lt;br /&gt;國外也有相當多正反皆有的評論跟相關討論,&lt;br /&gt;對於複雜的網路生態跟blogger習性,&lt;br /&gt;未來想必有更多思考跟討論的空間.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-4191319291120593724?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/4191319291120593724/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=4191319291120593724' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4191319291120593724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/4191319291120593724'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/04/tim-oreilly-blogger.html' title='Tim Oreilly -- blogger的行為七準則草稿'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38122661.post-3189819392693635085</id><published>2007-03-13T22:04:00.000+08:00</published><updated>2007-03-14T01:19:15.386+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='announce'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pot'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>[talk] 加入Python星球的好朋友又增加了!</title><content type='html'>對岸愛好Python的朋友黄毅的博客&lt;a href="http://codeplayer.blogspot.com/"&gt;白菜&lt;/a&gt;也於今日加入了我們Python星球, 從今天開始也可以看到他發表的Python文章了, 歡迎歡迎!&lt;br /&gt;&lt;br /&gt;只要對Python有興趣的朋友, 我們都希望能夠有這緣份跟您結交,這裡的大家都對Python非常的熱情,只要您有寫blog,我們就想看到您的文章能在星球上出現,所以尤其千萬不要害怕自己的blog文章不夠多不夠精之類的問題,因為大家身處的環境不同,即使您覺得極簡單不值一提的事情,對於另外一位朋友卻可能就是非常新鮮的事.我們這些朋友也分別都從大家星球上的文章獲得了不少資訊跟進步,所以千萬不要吝於來信加入,Python星球不論新來後到,一直都歡迎對Python愛好的朋友加入.&lt;br /&gt;&lt;br /&gt;而兩岸能有越來越多的朋友參與討論Python互相切磋進步實在是一件值得高興的事,  除了星球之外 &lt;a href="http://wiki.python.org.tw/PotResources"&gt;http://wiki.python.org.tw/PotResources&lt;/a&gt; 的wiki上也有列出不少資源可以利用. 如果各位還有什麼建議也請不吝提出.&lt;br /&gt;&lt;br /&gt;ps: 一併回覆前面有位廈門匿名的讀者在評論中提到是否兩岸有屏蔽的問題, 請不用疑慮, 實在是剛好星球放置的主機昨日有流量異常的狀況發生主機不大穩定, 今天已經修復並且由管理者&lt;a href="http://blog.seety.org/everydaywork/"&gt;yungyuc&lt;/a&gt;在密切調查中了, 應該不是什麼太大的問題, 請大家放心.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38122661-3189819392693635085?l=timchen119.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timchen119.blogspot.com/feeds/3189819392693635085/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38122661&amp;postID=3189819392693635085' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3189819392693635085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38122661/posts/default/3189819392693635085'/><link rel='alternate' type='text/html' href='http://timchen119.blogspot.com/2007/03/talk-python.html' title='[talk] 加入Python星球的好朋友又增加了!'/><author><name>使徒提姆 !?</name><uri>http://www.blogger.com/profile/07429567259240612236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_VE6oUeg-MFI/SV-DuiBmY_I/AAAAAAAAAe4/m0Z-A6nKOnc/S220/itemCP2044p1_1.jpg'/></author><thr:total>0</thr:total></entry></feed>
