五月 29, 2013
» [雜談] 程式中的命名風格

很久以前一直在規劃要弄個雜談區,方向大概就是放一些「看起來雜亂無章,不曉得能做什麼的嘴砲文」… 其實就是把一些放在D槽多年的資料移到雲端備份XD 但既然要丟上雲端,還是會盡量讓內容看起來有條理一點。作為系列的第一篇,先來個時事文吧。


前幾天在 BBS 上看到命名風格的討論,由於持續了幾天,就稍微看了一下大家在聊些什麼。那一串的原點是有人提到對專案中出現「型別前綴」這種參數命名原則不太滿意,結果很多人就爆炸了XD

工作或專案上的 coding rule 通常沒有什麼對錯可言,就是一組大家都能接受的規則而已。在團隊成員對於程式碼的表達有一致的認知,而不是各自表述時,才有機會繼續談後面的合作。而「命名風格」雖然帶有不少藝術與美感(順眼)等主觀成份,也不是因此就沒有討論的空間。

編寫程式不完全是讓電腦系統可以運作那麼單純,也是程式設計師們傳達自己想法的管道。程式的編寫跟寫作一樣,雖然不必使用到華麗的詞藻,但我相信一份敘事簡明的程式,閱讀起來也是賞心悅目。作為個人能力的養成,還是值得花一點時間研究… 至於在團隊中使用,以及成員間的溝通協調,就真的是政治問題或人品問題啦~

通常在決定依循哪一種風格時都有很多考量,可能是客戶的要求、團隊的傳統、被什麼書籍文章洗腦、或是開發平台與程式語言的影響。不過在實際的開發中,我的經驗是命名只要不是太誇張的縮寫或使用冷僻的英文單字,對可讀性的影響微乎其微。曾經遇過比較誇張例子是用德文來命名變數,這對於完全不懂德文的我還真的是「不夠直覺」的命名。除了那次經驗外,即使接觸到好幾種不同風格也不會真的造成什麼困擾。

那為什麼還要寫這篇文章呢?雖然這種風格觀點是很容易被戰到爆的萬年戰文,而且我也討厭寫個程式還要有一堆規約來限制自己,但最近也常常需要向別人說明為什麼程式會寫成某種樣子,就趁這個機會整理一下,順便也檢視一下自己的習慣。其實程式寫久了通常會慢慢有自己的習慣,例如我私底下愛用的縮寫風格已經蠻固定了,就算現在看到多年前的變數命名,還是可以直覺理解用途。會需要特別留意命名方式主要還是為了和別人溝通,以及維護性與一致性吧。

順帶一提,整理這篇文章其實花了好幾天時間,因為一直以來都是覺得有問題就自動調整一下,完全沒特別選擇要用什麼風格,只好把手邊的程式都抓出來整理一下XD


一般提到「型別前綴」的命名風格通常會直接聯想到「(系統)匈牙利命名法」(Systems Hungarian Notation),對於以前接受過微軟平台技術洗禮的人多半不陌生。到了現在的 .Net Framework Naming convention 則改為建議 DO NOT use 了。我個人並不討厭加上綴字,命名時適當地加上綴字其實是有助於理解的。匈牙利命名法這種風格,最早也曾經嘗試使用過一陣子,但隨著 C 以外的語言越用越多,尤其是在可以大量創造型別的語言中(例如 C++ 和 Python),型別要怎麼加上去就會是個大問題;再加上後來覺得這樣的命名其實也曝露了實作細節,遇到要改型別時很麻煩,就漸漸地不再使用了。真的需要在命名中說明型別時,也會盡量以抽象型別為主,避免直接使用基礎型別。

除了團隊和專案的規範外,我私底下慣用的命名風格應該還算單純,沒什麼麻煩的規定。大部份情況都是很隨性地命名,整理一下大概就是幾個規則是比較固定會使用的:

命名

原則上只要沒有特別限制,使用全小寫、hyphen 分隔的命名方式,不支援的時候則改用 camel case。在可能的範圍內盡量用不影響可讀性或比較通用的縮寫,以字少的優先。主要是在使用不同語言時可能會有一些差異。舉例來說,在符號使用限制少的 forth 或 scheme / lisp 中可以用全小寫、hyphen 或斜線符號區隔的命名風格:

(define module-do-something ...)

(defun module/do-something ...)

而在 C 中只能用底線(underscore)分隔 namespace / module name 與 tag name:

RetType Module_Method(ArgType ...);

遇到需要標明存取控制範圍的時候,例如 private,在 C 中是在前面或後面加底線,在 Emacs lisp 這種沒有模組概念的語言可能改成在 module name 後面寫成 --,Python 則是在前面加上底線… 大概也是依語言而異。

型別

可以的話盡量定義抽象型別來使用:例如在 C 裡透過 typedef 定義新型別,通常會加上 _t 作為後綴。新的 C++11 也可以定義 type alias。命名時盡量以大寫字母開頭,以前在 Io 中接觸到這種風格,覺得還不錯就繼續用了。

變數

全部小寫,有必要時使用 lower camel case。全域變數會加前綴,大概會是 g_ 之類的,不過通常很少出現全域變數所以不常用。

遇到代表容器的變數,通常以英文的複數型式命名,例如 users。有需要的話可以加上輔助說明用的前綴,例如表達數量時用 numBooks

需要特別提醒操作方式或用途的時候,可能會加上一點修飾,例如一個暫時使用的變數可能會加上 tmp 前綴;另外就是在 C/C++ 中被 wild pointer 戳死的機會太多了,這時也會特別在前面加上 p 提醒自己。

常數

包括列舉(enum)用的常數,通常全部以大寫命名。因為沒辦法 camel case 所以單字之間可能會使用 hyphen 或底線分隔。不過在 scheme 或 lisp 中多半還是小寫。

函式

通常是動詞開頭的型式,例如 do-create-send-。如果是判斷用的函式則看各語言風格,一般是 is 開頭的型式,這也是從 Io 來的風格,但在 forth 和 scheme 中則是在最後加上 ? 後綴:

(if (buffer-empty? ...)

寫 lisp 時則改用 -p

(if (buffer-empty-p ...)

其他還有像轉換資料用的函式命名,依語言的不同可能會用 >->-to- 等分隔。

談這種東西很容易混到其他撰寫風格的討論,命名的部份大概就是這樣吧。各語言的細節太多了,一時也講不完,原則上我會盡量先參考語言慣例,這樣在搭配標準函式庫使用時才不會變成混合風格。至於很多人建議的底線,因為輸入實在很麻煩,對可讀性好像也沒有什麼決定性的幫助… 自從我改用 emacs 寫程式後就盡量少用了,反正編輯可以靠 subword,閱讀時真的不行就開 glasses-mode 吧 :-p

不過說到命名,在規則受限的語言中還真的很麻煩,我覺得與其用底線,還不如用 hyphen(可以少按一個 shift),但在 C 連 - 都不准用。在 forth 中只要不是空白字元都可以用,命名時的表達力就豐富多了,適時使用 ->>>? 等符號對可讀性還是有些幫助的。單就這一點來看,haskell 很不錯,可以用符號設計很多可愛的運算子XD

這樣整理下來,我的適應力應該還算不錯吧,大概都是語言慣例就用了XD 但實際上在寫的時候,除了團隊要求的情況外也不是很嚴格地要求自己遵守啦,反正寫久變成習慣的,不必太要求就會成形;真的需要違反原則時,大概也不會出現太誇張的命名。硬是要規定套用某些規定反而失去發揮的空間,我想一般寫程式的人並不是單純的打字員,應該都不會喜歡的吧。


Filed under: Programming, Talk

一月 9, 2011
» 如果高中棒球社女經理讀過使徒提姆的部落格~~

她就會馬上開始學Python......也許吧? :P

據說"如果高中棒球社女經理讀過杜拉克的管理學"是前陣子日本暢銷書排行榜排名第一名,

既然管理學可以,Python應該也可以吧, "import 管理學"什麼的我們Python應該也有吧?

嗯嗯 是不是乾脆把我的部落格名稱也改一改~~ 之後就可能會突然爆紅也不一定? XD

==

老實說像我這麼發懶的部落格作者,

是根本不奢望會有讀者的,

說來說去這部落格不過就是個一時自娛娛人的消遣跟筆記罷了,

但是即使如此,

突然發現部落格去年居然只更新兩格,

也是有種感受到被歲月的巨輪無情的從身上碾過的感覺~~

"啊啊啊~~ 老的無話可說了嗎?"

"好歹出來寫篇Python真是太讚了 然後出來喊個兩聲表示還活著也好吧?"

"連廢文都沒有了嗎?"

==

不然就把這一篇改成2011年我們來學Python好了~~

反正從一起頭這篇就註定是個廢文不如就這樣廢下去好了~~

所以從現在開始就把這格的主題定調為 "2011大家學python" 好了~~

(咦 高中棒球社女經理到哪去了? 真是隨便啊! 還有學PYTHON根本就不廢啊!!! ~~ )

啊啊不管了~~ 事實上啊~~ 嚴肅的看待"學python"這件事本身就是很奇怪的一件事~~

好像非得拿本書認真的讀完Python語法才叫在學~~

這樣一點都不對啊~~ Python不是這樣學的~~ 學Python應該是要很愉快的啊!

這就好像教完所有文法再開始叫你講英語一樣來學英語~~

因為一點用也沒有所以一點也不愉快~~

你如果要當Python特許教師也許可以這麼學~~ (不過... 有這種職業嗎?...)

但是正常人不應該是這樣學的~~

很好~~ 既然你都看我的廢話看到這邊了~~

(真是驚人的毅力啊~~ 你完全有成功人士的資質啊!!!)

看來你就是"2011大家學python"這格廢文的目標讀者群~~

我就特別對待你~~


教你史上最快學習Python的方法~~


絕對保證你聽也沒聽過~~

~~ ~~ ~~

因為我也是隨便講講的!!!

(什麼,,,不想學了? 我偏偏就想教啦, 就跟你說我這格是老人湊字數的你到現在還聽不懂喔?
你就完成一個孤單寂寞老人的心願這樣也不行喔? 你你你~~~
)

對~~~ 就是你 ~~~

不管了~~~ 聽我說第一步~~

聽清楚了喔~~

就是先把你手上的什麼XXX Python 然後封面還有動物樣子的書先放下...

(疑這個捏他太深奧了嗎? 啊啊啊 等一下會不會接到書商打電話來抗議啊? 反正他們應該早就賣不好了應該沒什麼差吧 點點點)

別人怎麼教你的我不管~~ 既然你上了我們Python神教的好船~~

我們就不會眼睜睜的看你沉入書海~~

這年頭也不知道吹什麼風 Programmer家裡的書櫃都快變成動物圖鑒了~~

我們是來學寫程式的不是來當圖書館還是動物園管理員的~~

好了我廢話真多 (真是極度自覺啊!)

再來再來

開始第二個心法~~

那就是~~



疑? ㄟㄟㄟ???

怎麼可以呢 從小到大我們的尊敬的老師父母兄弟姐妹親朋好友阿公阿媽還有隔壁班的阿花都跟我們說這樣是不行的啊~~~

俗話說的好~~ 天下文章一大抄~~

程式碼~~ 更是要抄~~

熟讀唐詩三百首~~ 不會作詩也會吟~~

抄太難聽的話 就改成謄~~

就是像打開習字帖, 然後像永字八法般的練法~~

打開你的編輯器 找個有興趣的程式 把別人的程式碼抓過來 開始改~~

看不懂的就查 查不到的就想 想不出的就問 問不到的就再認真看認真查認真問~~

反正你已經閒到在看我的文章 肯定是很閒的 不如就認真點抄...

光明正大的抄 快樂的寫寫寫~~

就把他當作是老師全班只准你一個人openbook的去考試吧! (這真是太爽了 乖小孩不要學)

~~

再來再來就是要登堂入室了~~

這就不能只是抄了~~

基本上你抄久了 大概也已經到了不用參考別人的程式 就可以自己動手從無到有開始寫的境界了~~

這個時候就可以開始看書看文章,寫自己喜歡的程式~~

之後再學些別的東西讀點不相關的東西跟學些其他自己感興趣的程式語言都有所幫助~~

總之就是個落花流水皆文章的階段~~

等到了這個階段開始也就可以開個部落格寫些廢文騙個字數了 (疑??? 幹嘛又自婊???)

===

"""
廢話真的是很多 而且為什麼總共只寫了三步啊!!! 而且第三步分明就是在騙字數啊~~

什麼因為寫太多廢話連自己都覺得煩了??? 這什麼理由到底負不負責任啊~~

責任編輯到底是誰啊~~ 這麼廢的文章也敢PO出來喔~~
"""

以上是來自某讀者內心的OS,

可是本格宗旨就是插科打渾的未必就是胡言亂語,

語重心長的也未必就是真知灼見,

總而言之就是力求一種精神錯亂的頹廢美學~~

反正網路流行騎牆派 哪裡鄉民多 哪裡就有真理

我們廢話黨是不在乎的~~ (那來的廢話黨你不是Python教的嗎?)

總之一個人神智錯亂的時候 廢話都很多 尼采不也整天嚷嚷的說什麼超人來了嗎?

好歹我也沒寫什麼什麼什麼如是說的寫了一大本~~ 頂多只是幻想著高中棒球社女經理會讀一下我的部落格而已~~

啊 經理 對不起我是個阿宅~~ 我還有二次元complex 沒藥醫的!

====

總而言之 2011年我終於有了我的第一格! (真是個明智的收尾)

而且除了Python很讚這種廢話我還真的吐不出什麼象牙~~

說到底TIOBE都已經衝到第五名的這種Python程式語言還有什麼好廣告的?

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

到現在還不知道Python的優點還只記得Python的缺點分明就是你的問題~~

你不來用是你賠又不是我賺~~ 我一點都沒有成就感啊~~

嗯嗯 我再小神晶下去應該有讀者要發飆了 (疑? 真的有讀者啊? 你們辛苦了...)

再次廣告一下我部落格的右下角有著"本站文章自High居多, 請勿嚴肅看待"的標語

這不是寫著玩的 因為我純粹是自HIGH自爽~~

你們萬一讀了心跳加速~~ 人家我也是不負責的唷(心)....

===

嗯嗯~~ 咳咳~~

感謝各位的收看 咱們2012見... (疑!!!!??? 這個人都懶到有自覺了啊~~ )

啊對了

如果你真的是高中棒球社女經理 其實我們聊些別的也可以~~ (傻笑~~ 被打飛~~)

===

(完)

一月 27, 2010
» Upcoming Django 1.2 & PostgreSQL 9.0

http://docs.djangoproject.com/en/dev/topics/db/multi-db/#topics-db-multi-db
Django 1.2 新功能: Multiple databases

PostgreSQL 9.0 新功能 Hot Standby跟Streaming Replication

http://wiki.postgresql.org/wiki/Streaming_Replication

http://developer.postgresql.org/pgdocs/postgres/hot-standby.html

還沒空試, 不過結合這幾個新功能的話似乎可以有效的分散django資料庫端的read/write, 將write-only database server上的WAL(write-ahead log) 即時streaming到read-only database server上的hot standby database, 感覺好像不錯~~

七月 29, 2009
» [talk] 高雄世運結束了~~

上個禮拜起一直跑來跑去,
從世運主場館, 高雄巨蛋, 高雄縣立體育場甚至連義守大學都去了,
為了就是去看現場的世運比賽,
雖然說世運大部份都不是熱門的運動, 但是卻意外的非常好看,
特別是飛盤這項運動, 現場看起來真是特別有趣,
從後場可以直接丟到前場, 從右路可以像香蕉球一樣轉彎到左路,
這是看電視完全沒辦法欣賞到的~ 這門票實在花的很值得~~

這次唯一的遺憾就是我雖然買了開幕門票, 卻被國家抓去教育召集,
沒辦法看海莉現場了~~ 不過感謝至少MOD還有網路有一大堆影片可看

順道附上我滿喜歡的海莉的歌 Wuthering Heights:

Kate Bush的原唱

七月 3, 2009
» 想要變成艾托畢利卡的企鵝? 誤會大了~~

話說最近在迷GONZO的 咲-Saki- (台譯: 天才麻將少女)

女主角中的原村和在高中麻將大賽中帶著一隻企鵝抱枕打麻將,

沉醉於麻將中臉色微紅的樣子真是萌啊~~

企鵝其實不是第一次出現在秋葉原系動畫中了,

在動畫IdolM@ster中,

女主角天海春香的房間就貼有最喜歡的Gentoo Penguin (ジェンツーペンギン) 的海報~~

春香的電腦桌布跟手機也都是企鵝~~

不過Gentoo Penguin (巴布亞企鵝) 因為名稱跟我使用的Linux Distribution同名 所以很清楚這企鵝的樣子

但是, 從第一次看到就很好奇~~ 咲-Saki-的原村和抱著的這隻エトペン (艾托企鵝) 到底是什麼 ?



在東立出版的天才麻將少女漫畫中,

原村和睡醒時對當時正在說夢話的Saki說

艾托企鵝是這本"想要變成艾托畢利卡的企鵝" (エトピリカになりたかったペンギン)繪本的主角

但是, 疑問又來了 艾托畢利卡又是什麼??? 聽起來像是某個偉人或是繪本中其他角色的名字

企鵝有什麼不好~~ 為什麼好端端的企鵝不當~~ 要去當什麼艾托畢利卡呢???

經不起好奇心的引誘~~ 不禁google了起來~~

"エトピリカになりたかったペンギン"

這個時候就發現懂一點日文真不錯~ 透過google跟日文維基 查到了

艾托畢利卡 --> エトピリカ --> 花魁鳥 (エトピリカ)



恍然大悟!

原來是想要變成花魁鳥的企鵝啊~~~

什麼想要變成艾托畢利卡的企鵝? 誤會大了~~ XDXD

註: エトピリカになりたかったペンギン繪本是漫畫虛構杜撰的~~ 現實世界中並沒有這部作品~~

五月 4, 2009
» [Note] 送patch所學到的事

這個Note是一個寫patch的經驗,前陣子寫了一個讓curl即時壓縮加密FTP/HTTP/SFTP上傳時可以續傳的一個patch,patch本身倒是沒什麼特別的,反而是在送patch跟原作者的討論過程中學到了一些東西。patch歷時約一個月才commit進cvs,不過我覺得以open source的專案來說,這樣算挺快的。

似乎還是得把前因後果交代一下,
其實一開始是我有一個想法,
就是希望我上傳到遠端伺服器的檔案都能加密起來(順便壓縮更好),
但是我覺得在local這邊先壓縮過然後再上傳的話,就會佔Local的硬碟兩份空間,所以最好的方法是realtime壓縮加密之後上傳。這樣就不會佔用local的硬碟空間,而以目前的CPU也應該都可以做到即時傳輸。
此外我希望就是能夠彈性的選擇壓縮及加密方式,不論是bz2,gzip,pkzip或是pgp及AES都要能夠自行選擇及combine。
而且最好是不需另外的伺服器程式,以目前hosting都會提供的FTP帳號就能做的方法是最好。(我需要的不是像SFTP或FTP/TLS這樣傳輸時加密或壓縮而已,我想要的是在伺服器上的最終結果也是加密及壓縮過的)

跟lloyd討論之後,他是認為lftp+namepipe的方式可行。
另外我也找到了用pipe透過curl上傳的方法。
而這兩個方法也都驗證過確實可行,不過這兩個方法都同樣有個問題,就是沒辦法續傳,而這我認為是個應該要解決的問題。

比較了兩個解決方案後,我選擇了擁有我比較喜歡的BSD license,用法也比較彈性的curl下手修改,
curl的續傳問題大概長這樣:

gzip /mnt/2311/debian-500-i386-CD-1.iso -c | curl -T - -C -
ftp://myname:mypass@192.168.23.11/debian-500-i386-CD-1.iso.gz
** Resuming transfer from byte position 46792704
% Total % Received % Xferd Average Speed Time Time Time
% Current
Dload Upload Total Spent Left
Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:--
0
curl: (31) Could not seek stream

最主要是stdin不能直接SEEK_SET,這其實不是什麼大問題,不能SEEK_SET就SEQUENCIAL READ並bypass即可,看了一下原始程式便發現其實這段code早已大部完成了,只要略為更動即可,
於是略為修改了一下curl FTP/SFTP/HTTP上傳部份的code,驗證之後便將patch送出。
原以為送出patch之後就結束了,因為作者要收不收這也不是我能控制的,不過後來curl的作者回信說,功能是沒有問題,但原本的patch會影響到ABI與目前文件的相容性,問看看我是否能提供不修改ABI的作法,我原本還無法理會作者的意思,後來繼續討論才慢慢了解,作者的意思是看能否提供完整的ABI及定義回傳值供其他使用curl library部份的程式參考,因為curl不僅僅是一個客戶端程式curl,同時也包含一套廣泛的運用在其他程式甚至內建在程式語言中的library,libcurl。即使是改動小小的部份,也有可能不經意的影響到其他重要的程式。
了解了作者的目的之後,於是我又寫一個新的patch配合這個架構,測試一下續傳上傳沒問題之後就又再次的送出,這次作者將我的多個patch檔結合後又修改了一下包括說明文件的patch就直接commit到cvs上,不過問題來了,做make test的測試到HTTP PUT該項時沒過。
仔細的研究一下,還真的是第二次更動的code造成了問題。第三次的修改並驗證之後,這次就很快的patch就被接受了,目前已經commit在curl的cvs上。

這次寫patch得到一些經驗:

1. 寫patch時應配合原程式的架構及style,會比較容易被接受。
2. 寫完patch之後應照原程式的測試方式做一遍測試,而非只是測試自己的情況。
3. 大部份時候都要仔細考慮並聆聽來自原作者的意見,畢竟他是最清楚全部情況的人。
4. 不要懶的送patch,雖然可能會多費一些時間跟功夫,但送了patch通常可以學到更多。

ref: 我和curl作者討論的過程,https://sourceforge.net/tracker/?func=detail&atid;=100976&aid;=2709004&group;_id=976

二月 25, 2009
» Upgrade to KDE 4.2

上次升級4.0.5的KDE其實印象很不好,
不斷的crash之外 另外登入成功後也無法正確logout,
種種的問題又讓我退回使用3.5.x,
不過這次升級到KDE 4.2.0,
使用到目前為止其實還算順暢,
除了少數plasma的applet無法正確啟動外, 使用感覺還算良好.

我的平台是gentoo linux, 大部份套件是穩定版本的,
所以升級還在測試中的KDE4.2 , 其實有遇到幾個小困難:

1. 我原本的gcc版本是在gentoo裡被列為stable的gcc 4.1.2, 但在編譯kde-base/systemsettings時遇到困難, 老是有函式找不到, 最後參考網路上的作法 換至gcc 4.3.3後就一切順利. (真是詭異的作法)

2. plasma老是啟動時crash, 還是只能參考網路上的說法, 將穩定版的 qt 4.4.2換至qt 4.5.0rc1, 就解決了這個問題.

因為遇到這兩個套件需換至測試版本, 另外就是我也很久沒更新了, 所以emerge world居然重編了一千多個套件, 老實講distcc沒有那麼有用(據說我們公司裡有一個distcc陣列 :P 不過還是直接換硬碟到build server上會比較快啊 !), 因為configure的時間其實很長, 最後還是借了一台雙核E8400的電腦來build, 不然實在是太累人了.

KDE 4.2的穩定度大約是4.0左右的水準吧, 用到現在仍然沒有crash, 用起來的感覺也還不錯, 就是可能現在還不是安裝的最佳時機,有些AP用起來也可能還有問題, 如果對KDE的程式有重度需求可以再等等.

一月 19, 2009
» 超偶2總冠軍賽心得

雖然自己愛聽女聲, 不過我其實是滿少看台灣歌唱比賽的節目,
平常聽的如果不是西洋金曲類的大概就是公信榜武道館還是些OP/ED之類的歌,
不過星期日凌晨聽符瓊音在超級偶像2總冠軍戰第三輪唱的Listen還是特別的受到感動,

"某"評審說符瓊音這首的缺點是還在Beyoncé的陰影下,
"仍"沒辦法超越Beyoncé,
我實在是覺得有點吹毛求疵,
撇開大家都知道的感冒及破音不談,
我覺得Beyoncé這首歌的靈魂其實還是被展現了,
我想符瓊音肯定是看過電影Dreamgirls的,
她自己大概也知道自己所伴演的角色是Effie White這個唱功一流卻因外型所困的歌手而非Beyoncé所演的那個美麗的Deena Jones,
像Beyoncé這樣子外貌與音藝兩者俱全應該是她一生都想企求的目標. 或許她正是害怕從Jennifer_Hudson所演的Effie White看到自己的影子
才唱了Beyoncé這首可以代表自己心聲的曲子. 不論如何我覺得這首歌仍然是整個總冠軍賽最好聽的一首, 沒有因為這首而大翻盤實在也是太殘念了...

這次因為感冒(跟魔咒?)只得到第二名只能說是相當可惜
因為雖然其他人唱的也不錯
不過老實講只有符瓊音的歌才真的讓我的耳朵有滿足感.
超偶2第一名是誰其實也不重要了 因為也已經都過去了,
符瓊音麻煩你趕快找個好製作人出張好專輯吧...

九月 15, 2008
» Django有吉祥物囉!

今年9月6-7日的Django Conf 第一天的最後一個議程是Cal Henderson的Keynote: Why I Hate Django,其中提到很重要的一點: Django沒有吉祥物,Django需要一個具有"Awesome"跟"Magical Powers"特性的吉祥物來作代表。於是在全球Django愛好者的腦力激盪下,屬於Django自己的吉祥物出現囉! 就是avalonstar的Bryan Veloso所設計的這隻可愛的pony喔!






ponybadge

更多django pony的有趣資訊請參考:
http://avalonstar.com/blog/2008/sep/9/web-framework-ponies/

http://code.google.com/p/django-pony/


http://www.djangopony.com/



http://twitter.com/djangopony/

九月 4, 2008
» Django 1.0 released !!

http://www.djangoproject.com/weblog/2008/sep/03/1/

Django 1.0 released!

1.0是Django project一個很重要的里程碑,因為一直以來官方對於Django 1.0有個很重要的承諾,就是在1.0之後的所有版本都將維持向前相容性,就是不論是到1.x多少版,都將維持對1.0版本程式的相容性而不會再作任何會打破相容性的重大變動。這也是為什麼1.0版本會遲遲不推出的原因。

不過1.0 release的這一天終於來了,
根據Django官方網頁的說法,自從上一個穩定版Django 0.96.2以來,到這次的1.0版本發佈,已經有超過三十五萬行的Django程式碼被修正或改變,足見改變之大。(改動350000行的python, orz)

這次總算是讓我可以使用Django的新版本了,畢竟用了0.95.x跟0.96.x實在是很久了,而Django的SVN trunk對於真的要上線的系統畢竟還是個比較危險的使用方式。不過美中不足的是debian lenny似乎還是會來不及將Django 1.0包進debian linux系統,看來以後安裝上線系統又要多費一番功夫。

想知道更詳細的改變內容跟新增功能請看Django 1.0 release notes

八月 25, 2008
» coscup 2008遊記

時間過的飛快, 其實感覺去年的coscup 2007似乎才剛結束而已. coscup 2008又開始了,
這次kalug的朋友去了好多, 平常會掛在irc頻道上的至少就有去了一半以上,
一些平常少出現的朋友也都遇到了, 還遇到了一些原本只在irc或網路上看過的前輩跟朋友.

星期六早上雖然有點睡過頭,
不過還是跟lloyd大大坐著高鐵順利的來到了台大應力所的會場,
(走好久啊,難怪有人迷路), 這次小弟我也有準備了兩個20分鐘左右的session要介紹,
主要是簡短的講了一下django跟py3k這兩個有關python的議題,
第一天下午講django時由於臨時因為筆記型電腦接上投影機後畫面出不來,
倉促的商借了yurenju(小朱)的筆電 但是似乎因為是沒有字型的關係,
替代字型其實有點不好看 有些字重疊在一起 不過還是硬著頭皮把他講完了
另外20分鐘其實很短, 所以講的好像有點倉促 主要還是講一些觀念上的個人看法
希望能引起一些朋友對django的興趣.
這場講完後見到了非常客氣謙虛的WilliamYeh葉秉哲大大,跟他作了一些心得交流,
其實我有好幾本他的翻譯書 應該要拿來給他簽名才是.
另外感謝這場大家對我的笑話還挺捧場的,
似乎沒有人睡著,不然講下午第一場實在是有點辛苦,
連我自己都會覺得昏昏欲睡.
下午也有跟freenode irc上#python.tw我們python幫的gasolin, keitheis碰到,
上次coscup 2007跟gasolin聊比較久,
這次gasolin好像比較忙 聊了一下就不見人了
第二天下午我要跟keitheis找gasolin的時候, 就發現人海茫茫 真是難找
這次第二天結束吃飯的時候其實在跟thinker聊台灣pycon下次會不會辦的時候
lloyd有跟thinker提到說, 台灣的pycon其實也可以借coscup BOF的時間來辦,
我也覺得實在應該要排一場BOF讓#python.tw的人互相認親聊天才對.

今天晚上的晚餐是像海浪一樣的pizza海, 兩百五十人份的pizza果然是壯觀,
BOF我是參加我們自己kalug主辦的OpenStreetMap, 拿了一些pizza跟雞翅飲料進場地, 邊吃邊聊.
人比我原先預期的多,陸陸續續大概有三十到四十個左右的朋友來,
BOF內容主要是這次OpenStreetMap的講者louis來講一些josm跟openstreetmap的一些情形.
Arne講到了一些tag標示的東西及提到一些路名中文拼音上的混淆,
lloyd大大講了一些gsm logger支援的狀況. 大家有得吃又有得聊 實在滿不錯的.
不過下次應該要在場地準備一些面紙之類的 不然大家吃東西吃的油油的
又要跑廁所洗手 這樣歡樂的BOF就被打斷了.

晚上跟keitheis,還有我們kalug的lloyd大大,凍翔,
study area的billy回到住宿的飯店, 聽說凍翔跟billy聊到很晚,
keitheis從台南坐夜車上來之後還跑到誠品 另外我跟lloyd大大也很累 所以也就先睡了.

第二天一大早爬起來其實還是有點累 不過早上我有py3k的簡報要報
這次一樣借了yurenju的筆電, yurenju有幫我修改了字型 字型效果就好了不少.
真是非常感謝小朱大力幫忙. Ping長輩一開始介紹我的時候提到提姆之禪,
我自己一時還會意不過來 只有python之禪 我哪來的提姆之禪,
原來他所說的提姆是指曾在python mailing list上有tim bot之稱,
撰寫The Zen of Python (Python之禪) 的Tim Peters, 不是在說我有什麼禪,
Tim Peters其實是python界的傳奇人物之一, 我取ID時的確是沾了他的一點光,
希望我寫的程式也能得到他的庇蔭. (笑)

其實py3k這場講起來感覺時間更短, 有點意猶未盡, 才一下子就被後面的舉牌美眉舉牌了,
不過為了怕影響到後面的講者更精彩的議題, 就講的稍微快了點,
雖然原本就只打算講一些py3k的重要觀念跟想法,
但是還是覺得好像有點倉促, 可能下次繼續在kalug講一場好了, (有人想聽的話 orz)
順便恢復一下據lloyd大大說我老是把20分鐘的投影片講成3個小時的功力 XD

第二天下午的場次時跟以前高中的優秀學弟, Mozilla TW的Bobchao小聊了一陣,
我跟他都覺得雖然很多網友其實平常網路上有所聯絡,
但是辦個實體的聚會其實還是有他的效果, 所謂見面三分情嘛!
irc跟網路上的朋友通常是分散四處的關係 其實平常也很難見到,
人生相逢便是有緣, 珍惜緣份就是一種福氣 不是吗?

晚上跟著一群coscup的大大們,還有kalug在台北的朋友們去吃飯聊天,
不過我因為要趕著搭高鐵回家, 另外chihchunhychen也要先走,
就請shawn順便先送我去車站, 結束了短短兩天的coscup 2008之旅.

我這次的投影片都會放在kalug的這邊,
另外coscup 2008的官方網站之後可能也會有錄影跟投影片的下載,
還請各位前輩朋友多多指教囉.

六月 13, 2008
» [link] 有吵有糖吃... Django 1.0 is coming...

根據這篇Roadmap的說法, Django 1.0 會在7月alpha, 8月rc, 9月release. 雖然不知道到底準不準時, 但是"準備好了就會出來"這種話我已經聽膩了... XD

六月 12, 2008
» [link] django's problem.

http://metajack.wordpress.com/2008/06/11/the-problem-with-django/

基本上我還滿贊同這篇文章的觀點,
事實上我甚至覺得大部分正在開發中的軟體專案都應該建立一個以時程為主的release週期, (即regular release)
而非是現在主要是以功能完成度為主的週期.
因為開發者通常都過於樂觀還有自信太強,
常常低估了完成軟體的時間, 對於沒做過的功能不管聽起來再怎麼簡單都最好還是保守點比較好,
像django的1.0也實在是拖太久了 難怪ticket#2070會被拿出來鞭... 一個http streaming upload 的patch前前後後改了兩年多還是沒進trunk...真不知道是該說追求完美還是太龜毛了... :(

像Ubuntu這樣的release週期我就覺得滿不錯的, 儘管每次的新版變動不會太大, 然後或多或少都會有bug, 但是至少是在建立一個正向循環並且能鼓勵新的開發者投入.

當然還是要說Django真的很不錯就是了. :)

六月 4, 2008
» """習武不是拿來傷害別人的..."""

"""
「習武不是拿來傷害別人的!」陳夆昀(卅七歲)說,被打時他曾一度很火大,曾朝其中一人鼻子出拳,而勾倒另一人後,也起腳要往頭部踹下去,但兩次都忍下來,硬是把拳腳縮回來。

身高一百八十一公分、體重超過一百公斤的陳夆昀,十三歲開始練習各種格鬥武技。民國八十六年被已故日本知名摔角選手「馬場」選為「台灣唯一接班人」,還到日本接受訓練;後來因傷回台,成立「風雲」隨扈公司,在李敖參選總統及藝人林青霞父喪回台時擔任隨扈工作。

二○○二年美國大西洋城舉行的國際職業摔角大賽,陳夆昀以「白獅」身分出賽,僅花了四分鐘,就用自創絕招重創美國好手「愛國者」,拿下台灣第一座世界職業摔角冠軍。

去年八月三日凌晨,陳夆昀騎機車載女友,在板橋市館前西路四十六巷,與正在倒車的徐祥恩(廿八歲)、黃梓曦(廿八歲)擦撞,當時陳夆昀與女友未受傷,機車受損輕微。陳夆昀說,原本不想追究,徐祥恩卻持鋁棒攻擊,黃梓曦也對他揮拳毆打,兩人還警告他「如果敢報警,就到醫院堵你」。

陳夆昀說:「如果我真的出手,我擔心被害人變成他們。」他要保護女友,才用左手格擋,「我算一算,左手大概擋了五十多下鋁棒,手才斷了」。

後來陳夆昀提出傷害、恐嚇告訴,檢方起訴徐、黃兩人,並具體求刑七月。

板橋地院昨天開言詞辯論庭,徐、黃否認恐嚇,陳夆昀的辯護律師才揭露陳夆昀世界職業摔角冠軍的背景,並稱因他有體格優勢才不致受重傷,若一般人可能會被打死。兩人得知打的是世界摔角冠軍,甚感訝異。公訴檢察官以徐、黃兩人下手兇殘,又不知悔悟,當庭加重求刑至十個月有期徒刑。
"""

轉自聯合新聞網

看到聯合新聞網的新聞, 覺得這位陳夆昀實在真了不起.

令人打從心底佩服. 這才是真強者啊...

要我是世界職業摔角冠軍大概就會搞個炸彈摔然後徒手把對方劈成兩半再扔到垃圾筒了...

還好我只會摔車還摔的不大好看 XD

==

突然想起國小那位很兇的老師常講的話: "讀書不是爽就好..." 嘖嘖...

十二月 5, 2007
» 新手: 你怎麼飛的??? 答: import antigravity

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

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




隨即有網友作了T-shirt:



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

所以,

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

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

;)

十月 21, 2007
» [funny] Richard Stallman (RMS) 被忍者攻擊.

來自 Slashdot 的報導:

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

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




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

常用的DRM限制包括:

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

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

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

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

九月 24, 2007
» 很有想法的gimp !?



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

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

九月 7, 2007
» [rant] 下禮拜要教招了~~

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

祝我平安歸來吧~~

七月 3, 2007
» 台灣opensource社群活動行事曆

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

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

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

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

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



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

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

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

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


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

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

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

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

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

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



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

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

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

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

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

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

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


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

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

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

而精神疾病卻不然,

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

biggo.com.tw

A Django site.