The Old Blog Archive (Traditional Chinese), 2004-2009

德政

Objective-C 有一個相當特別、被某藍同學稱為「德政」的設計:

送 message 給 nil ,就會得到nil

相較於其他語言(C++對null pointer call member function會爆炸、很多語言則會哇哇叫),Objective-C 的設計相當有意思。這個決定──”method returns nil when the receiver is nil”──隱含的意思是,「沒有例外事件」(no exception thrown),也就是Objective-C會沉默地忽略丟東西給nil所發生的事。

這樣有什麼好處呢?簡言之,就是節省了大量錯誤檢查所需的程式碼。而且,如果程式安排得宜,例如 C 依靠 B 的結果,B 依靠 A 的結果,那麼只要 A 這一步得到 nil 、B C 兩步的程式碼就一路等於變成了 no op,什麼事情都不會發生。只要最後再檢查 C 這一步的結果是否為 nil ,就知道 A B C 三步是否一次執行完畢。

唯一要注意的,那就是相較於 std c lib,printf(“%s”, NULL) 會看到 “(null)”,NSLog(nil) 或 NSLog([nil description])是什麼都看不到的。所以當 stderr 上面一片寂靜時,大概就得猜想是不是 A B C 一路 nop 到底了。

我目前唯一用到(也不得不用)exception handling的地方,只有檢查remote object是否還存在。如果丟了message給某個remote object,結果catch到奇怪的exception,就表示remote object已經不在了,要重新跟remote process要它對外販售的物件(vended object)。OS X 10.5的新輸入法架構,也相當依賴這一件事情的正確性。

AsiaBSDCon 2007, 3/8-11 東京開摧

原岡善行兄傳來的消息:AsiaBSDCon 2007(亞洲BSD會議)將於今年 3/8 (Thu) – 3/11 (Sun) 於東京大學舉行。今年的議程已經公布,報名從 2/12 開始。

大會網址在這裡(正體中文)、這裡(日文)這裡(英文)。

Suo Gan

因為今天的搜尋主題是John Williams,最開始是The Star Wars Main Title,然後想到Williams同時也是Empire of the Sun (1987)的配樂作曲。多年來一直的印象把開頭的曲名以為做Shô Gun──因為那是一部講述日軍戰俘營的電影。最後才發現原來曲子名叫Suo Gan,是一首威爾斯語的催眠曲。

同時間解決的疑惑(或者說,多年的懸念/執念?)還有同一部片的片尾曲Exsultate Justi。好了,如果能找到同樣是多年前BBC一部名為The Dream Machine的紀錄片(台灣當時的公視時段有放過)片頭曲是什麼就好了……

如何辨別時尚與過氣

gcc提供了一組供函數/型別/變數用的宣告屬性,其中 __attribute__ ((deprecated)) 對開發API/程式庫的人,是上好的好物。只要在函數/型別/變數宣告後頭加上 __attribute__((deprecated)) ,程式在使用到這些函式/型別/變數的時候,就會顯示警告,跟你說這個函數/型別/變數已經被討厭了(事實上deprecate是個意思蠻負面的字)。

最近覺得所謂API這種事,就是一連串新寵與老梗的混合與鬥爭啊……

不過Objective-C的API作者們,得等到Objective-C 2.0才能在objc method後面加上這個屬性。說了快六年才終於看到,唔,總是「更好遲到比絕不」吧。

(最後那一句是「我不能同意更多」式類語…… XD)。

PS. 重看該討論串,這個gcc功能似乎源起自Apple的需求。

這個描述實在太超過了

有人這麼形容用Cocoa寫程式的感覺:

It’s as though you have .NET 3 on every machine, only it’s been shipping since ‘99, and you program in something like Smalltalk, only it’s fast, and in your installer, you can replace files without having to reboot.

碳與C語言的重要

WWDC 2006的相關影片前陣子陸續發布到了iTMS上,WWDC的與會者可以下載回來看。

雖然說OS X裡有越來越多Cocoa相關的程式庫,但是大多數 Core- 開頭的東西還是以 C 言為基礎的 API。意思是說,任何想在OS X深入一點的開法者,起碼還是得了解 CFRelease、NS- 與 CF- 開頭的資料結構的免費橋接 (“toll-free” bridging),這一類 CoreFoundation 的基礎。

有人曾經問我:到底 OS X 上能不能用 C++ 來開發?更進一步的問題是:難道一定得在 C (Carbon) 和 Objective-C (Cocoa) 間做選擇?

我本來還真找不到什麼好的說法,結果意外在 survey Managed C++ 的時候,讀到這一段 Microsoft 的人寫於 2001 年的話,我笑了:

Unfortunately, as powerful and flexible as managed C++ is, it’s not the native language of .NET, which means that books, articles, courses, code samples, and so on, are not going to be written in managed C++—they’re going to be written in C#. But this should come as no surprise. C++ has never been the native language of any popular platform. Unix and Win32® have C. The Mac has Pascal. NeXT had Objective C (of all things). COM has Visual Basic. Only the BeOS has C++ as its native language, and when was the last time you wrote any BeOS code? The fact that .NET favors C# merely means that another language will be translated into the C++ equivalent, as has been done since 1983.

斜體是我加的。NeXT “had” Objective C. Now OS X has Objective-C. :)

速食麵與人生的奧義

《經濟學人》的悼文(obituary)是該雜誌的特色。曾經有一次有朋友問我,英文的悼文怎麼寫。那時我只知道這個英國雜誌有刊登這樣的文字。這個文類已經算英美系大報的體例之一。《經濟學人》則將之發揮,使得obituary不再只是告知性質的訃聞,反而更像蓋棺論定的人物品評。我自朋友問起,才注意到原來該雜誌每期必登一則,而文章通常寫得極為精采。悼文的對象有的惡名昭彰(例如智利的獨裁者皮諾契)、有的平淡中帶有欣賞(例如美國前總統福特)、有的在讚揚中帶點惋惜(例如為美國冷戰的圍堵政策定調的肯楠)。

至於這一期的這一則,怎麼說呢,有一種充滿日式泡麵廣告的誇張喜感,也算是對能改變人類生活的人的一種稱讚吧。以下是節譯:

安藤百福

安藤百福(Momofuku Ando),速食麵發明人,1月5日去世,享年96歲。

幾世紀以來,男男女女紛向東方尋求生活、健康與快樂的奧義。安藤百福卻教導人們,奧義既不需半裸爬高山、不必在座墊上打坐幾小時,更不用把腿纏在脖子上、一邊用上鼻腔發出「嗡嘛尼巴咪吽」的聲響。奧義只需要:

    掀開杯蓋
    倒入熱水
    泡三分鐘
    攪拌食用

再簡單不過。當然啦,慧根不夠的還是會偶爾碰壁,像是燙到舌頭,或是才靜靜冥想了一分鐘,就把叉子伸進去亂戳,結果弄斷叉子,湯汁還濺到鍵盤上。有耐心的信徒,倒是得以功德圓滿:不管是雞汁口味還是鮮蝦口味,溫暖而形狀歪歪扭扭的麵,就這樣一口接一口。

[......]

速食麵是全球的宗教。全世界在2005年時吃掉了860億包速食麵。而這一切都從一個願景開始;如此規模的事,起初皆如此。安藤先生在1957年一個寒冷的夜裡從他在大阪的製鹽廠走回家,他看到街上冒出白煙,一群人在那邊。他們在等待一鍋鍋的麵在滾水裡燙熟,而且做好等候多時的準備。安藤先生心想,為什麼不把這事弄得簡單些?而且,他自己何不動手試試看?

他的人生至此之前,算是有些糟糕。[. . .] 但從此之後,那「裊裊上升」的白煙(或者也可能如他在大阪速食麵博物館的首頁動畫裡那般,是一朵上面綁了只水壺的白雲)向他啟示了通往奧義的道路。

那是一條漫漫長路。他在自家後院的棚子裡日以繼夜試了一整年。[. . .] 秘密來自他太太炸天婦羅時的訣竅:用棕櫚油酥炸煮過的麵條。這就是速食麵「魔力」的來源。

速食麵於1958年上市,[. . .]。安藤先生再也沒回頭過。1971年時,以隔熱的保麗龍包裝的杯麵上市,至此挨餓的人甚至連去櫥櫃裡拿碗的力氣都省了。日本人票選,速食麵是他們二十世紀最重要的發明,Sony的Walkman隨身聽被比下去。安藤先生的公司也成為了年營業額30億美金的全球事業。

但速食麵絕非一家公司之事,製造速食麵從來也不僅僅是一種產業。安藤先生的三句話成為了一種生活哲學:

    有東西吃,就有和平
    吃得聰明,能養顏美容,延年益壽
    製造食品能服務社會

安藤先生力行他的教誨。他幾乎天天吃原味雞汁麵,直到去世。雖然有人質疑速食麵脂肪高又有味精,安藤先生倒是又瘦又元氣。亞洲地區的海床上到處堆滿泡麵杯,那並不是他的錯。

安藤先生的電視廣告呢,倒是展現出速食麵的真意義。世人只要吃泡麵,則人與人的隔閡消失,孩童露出笑顏,人們彼此相愛。所有解放人心的革命,都源自那隨時想吃一碗熱騰騰泡麵的人性渴望。2006年時,發現號太空梭上的一位日本太空人就著真空包吃了碗安藤先生的泡麵。電視廣告上的太空人在無重力下露出微笑,他已然修成正果。

貼紙一枚

他日路過友人網誌,見巧圖二幅。友素以彩繪技高,吾近來有果則松,邃厚顏索之。

是圖題「不過一介艾克斯寇德黑客爾」。艾克斯寇德者,工具也;林檎開發,面向對象丙語言首善也。黑客者,俠客也;有碼則黑,路見臭蟲拿斧就砍也。或有云黑客者黑,世人不解,輒以斧頭記號如映畫斧頭幫,不可與之親近。實則斧頭者,利器也,自羅馬該薩時代,即團結象徵。則黑客非盡孤癖難搞者流,而除蟲亦須循其道、批大郤、導大窾,躊躕滿志,善刀而藏之;鬼斧神工,德馨造福世人者,乃稱寇德。偈曰:大道不行聖人出,萬碼奔騰黑客鬆。

今日厚顏有成,得貼紙一,洋洋之餘,乃設鏡檯前,著墨鏡,自閃之。

Just Another Xcode Hacker

按:閃者,泰西人稱flicker,近世正音脫落,或有少一字母,稱flickr者,則松果屯、疊疊樂、大食團,如恒河沙不可盡數。

人生的解答(與簡報的藝術)

配樂和圖表方式非常德國(讓人想到Der Spiegel)。看就是了。Via Presentation Zen.

(No, I won’t embed Youtube Flash in my blog.)

看完心情變得蠻好的。唔,居然看圖表看到心情會好。也許我快變成 PC 了。標題 Le grand content 除了「大內容」外似乎還有弦外之音,無法確定。

兩個需要豹仔的 2.0 軟體

TextMateDelicious Library 兩套知名的 Mac 軟體已經宣佈它們的 2.0 版將只支援 OS X 10.5 ,暱稱為 “Leopard” 的作業系統。

至於當初被請上台去為 Objective-C 2.0 背書的 OmniGroup,看來還沒決定是否要這麼做。但是 OmniFocus 的延宕似乎透露了點什麼,um-hum。

OS X 10.5 到底對開發者來說有什麼好處?至少對我來說,有三件大事:Objective-C 2.0、CoreText、新的輸入法架構。其中又以 Objective-C 2.0 最令人期待。畢竟,如果有 gc 支援,那麼 Objective-C 總算可以走進「現代」語言的行列──而且它仍然是個compiled language!

比起從Panther到Tiger,似乎有更多人願意為Leopard割捨舊版的支援。

這陣子以來我寫的 blog 都和技術有關。有在考慮是否分割成兩個 blog,一個寫技術性的東西,另一個寫所有跟技術無關的事情呢……

« Previous PageNext Page »