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

OV @ WWDC, Day 3: OV Runs on Leopard (at least for now)

剛剛聽完上午的Debugging with Xcode議程。測試了一下OV on Leopard,大體可以執行,但是Safari選字窗的位置出現了問題──感覺像是新版WebKit惹的禍(在 10.4 上執行 WebKit nightly build 也有相同的問題)。不過至少目前在WWDC seed版本上,一切運作正常。

感覺上64-bit版本Leopard支援舊式input method component的機會不大,這一點明天會見分曉。不過,既然Leopard要提供新的 “InputKit” 程式庫了,其中甚至做了某些 OV DisplayServer 在做的事(同樣是用 Objective-C remote object! 所謂德不孤,必有鄰でしょうか ?!)

承續昨天的話題,Apple的工程師似乎真的很愛烹飪啊。今天的Xcode debugging範例,竟然又是那個CoreRecipe… 如果哪一天自己開公司的話,首席大工程師的title,或許也來叫個Chef Software Architect好了。XD

OV @ WWDC: Day 2 小記

聽起來,在最大的方向上,今年的WWDC,其實是延續著先前的主題:Transition。或者說,軟體的改版,其實就是不停transit?

WWDC會場上,已經有不少人將Developer Preview的Leopard seed版本給裝了起來。固然也有一些議程是針對既有的技術做深化,但先前有許多WWDC「未排定」的議程,在星期一的Keynote以及OS X State of the Union演講完後,便一一貼上了新公告。這些議程的特色是:如果你手上沒有Leopard,還真的沒辦法先睹為快。

我在Day 1中略略提到了Objective-C終於有garbage collection的功能。事實證明這個主題並不是一個”minor issue”。星期二下午兩場與Objective-C相關的議程,場地都是爆滿的。從結束前的Q&A session,更可以發現有多少與會者在開發軟體時,會實際應用到那些「高階」的功能。

事實上,早在OS X 10.4的時候(也許更早,我記不清楚了),gcc編譯器就已經支援garbage collection,只要打開該選項,就會生成帶有gc能力的目的檔。現在問題在於:在當時,並沒有執行時期(run-time)的完整支援──例如沒有控制garbage collector的公開的API。這些終於在Leopard出現了。

在我所能提及的範圍內,簡單講一下我今天所聽到的東西,以及一些感想:

上午去聽了跟HIToolBox有關的session。HIToolBox全名是Human Interface ToolBox,事實上就是Carbon程式庫實作Aqua介面的工具箱。大家在iTunes裡看到的按鈕、列表,無一不是透過HIToolBox而來的。HIToolBox再往上溯,則是更早以前Apple OS的各種API,其中甚至還保留了少數還在使用Pascal字串的歷史痕跡。藉由這次Leopard要支援64-bit之便,這些舊的API都會消失了。事實上上午的session還澄清了一件事:Apple會繼續在Carbon API上面投注心力,尤其其實還有像ATSUI (Advanced Type Services for Unicode Imaging),目前仍是以 C 為主的 API。

也就是在上午的 session ,我得知 Leopard 的輸入法架構將有改變。實情研究中(前提是,我得先想辦法弄台機器把 Leopard 裝起來啊啊啊)。

下午連續參加了兩個跟Objective-C有關的session,感覺是目前為止最硬、最hard-core的議程。感覺,有如在上程式語言設計的課。事實上主場的Peter Graffagnino似乎很愛使用食物來比喻東西(他在前一天的OS X State of the Union就講了一堆食物)──他說,咖哩有千千萬萬種,garbage collector的實作及design choice也有千千種,他今天所帶給大家的,算是某種「特調蘋果咖哩」,裡面有一些和Java相似的地方,有一些和Java不同的地方(例如沒有resurrection)。

當然,在Objective-C這樣一個「傳統、且根基於C」上的語言增加gc,絕對是項大工程。現代程式設計已經不只是要考慮單一的功能完整度,還必須具備thread safety的質性,又不能犧牲效能(因此,把所有thread都停下來收集垃圾的作法不好)。在這一點上,其實gc增加了程式設計師初期的負擔:為了transit到fully gc’ed code,有一些預備知識,還同時得unlearn掉過去以來Objective-C的計憶體管理慣例。

另一個令我感到厲害的地方,是為了這樣一個功能,背後需要多少分析、測試、調整的工作。尤其,這一次增加此一功能,得配合Leopard的32位元與64位元版本。PPC與Intel。Objective-C的部份與C語言的部份(對於C語言使用了Objective-C指標的部份,就得提供針對C語言物件的gc)。還牽扯到先前用non-gc Objective-C寫成的bundle(可以想做Windows的DLL)能否允許被載入。甚至Apple自家的framework也因為這一個變化,而必須能在兩種mode下工作(non-gc’ed與gc’ed)。

所以事實上,我們看到的是許許多多的工程問題。這些問題有的發生在compiler layer,有的發生在runtime layer,有的發生在framework/API layer,有的發生在system library layer,有的發生在plug-in layer。其中還有許多的trade-off,許多的design choices。

很顯然,Peter Graffagnino採取了相當實用主義的路線。對於會大量破壞向下相容性及執行檔相同性的設計,只能用在64位元版本的Cocoa中(這也是此次Leopard的重點之一)。

附帶一提,Peter Graffagnino也留一把大鬍子。他在演說時會不停摩擦臉頰,還會在他已經瞭解提問人的問題時,比手勢打斷(讓人聯想到某幾個留著一把大鬍子的guru──難道做為guru真的要有某些相似性?)。他的手勢堅定,在講解garbage collection原理時不忘提及各種可能的優缺點和其他語言的作法(例如Ruby和Java在resurrection這個design choice上的異同)。

晚上參加了Apple Design Award晚會和Stump the Experts益智問答節目。這些或許要留後再述了。另外,還做了一場小訪談,我們訪問到了一位FreeBSD的重要人物、現在是Apple的UNIX group的大台柱。他為我們提到了他關於OpenDarwin shutdown始末的一些看法,以及他對於Apple自身的定位、桌面軟體 vs. web軟體、open source如何取得達成「更高遠的目標」等等,做了相當精要但熱心的說明(我們真的很謝謝他願意撥時間出來接受我們的訪談)。這些我也會在整理完後漸次刊登出來。

舊金山市中心的空氣中有一種氣味,是我在其他亞洲城市不曾聞過的。或許這氣味很美國,而我上次至此的距離已長,早已忘記那時的感受。城市確實是有味道的,建築物、室內、會議廳,也各有著不同的氣味。技術型的會議,資訊量相當、相當的大,會場本身倒卻是相當容易融入,會場服務、一些支持性結構(supporting structure)也相當完整──這還包括了把與會者的腸胃照顧好、飲料需求照顧好,還要有許多的電源、許多的無線網路。這樣的會議並不只是把大家找來宣佈一些事情,會眾不是被動的受眾,更多的是有備而來,會在會場上提出深刻的技術問題(所以才會發現諸如有多少人會使用Objective-C hack的事)。在台上的人,顯然也同樣地每天泡在他們的領域中,才有辦法應對如流吧──they really know what they’re doing.

今天最後的感想是,每一家作業系統看來都有一本難念的經──或許用Despearte Housewives裡的那句”Everyone has a little dirty launry”來翻這句中文成語還挺合適?──OS X有自己的legacy有自己要面對的問題。每一次的改版都需要做無數的transition工作。其實宏觀來看,或許軟體設計的本質和某些更大的東西一樣,永遠都在transit。You never step into the same river twice. 只不過偶爾我們會拍些快照(snapshot),然後希望那些快照把最好的一面給呈現出來。

Other than that, we’re always dealing with our own dirty laundry… bah?

OV @ WWDC, Day 2 速報:Aaaaaargh! They rocked the boat!

是的,Leopard 上的輸入法架構確實有了新局面,星期四和星期五還另外有針對 TextService 的 session 和 lab.

More update on that later. :)

OV @ WWDC 2006: Day 1, ObjC goes gc etc.

今天的確是相當漫長的一天。Steve Jobs今年的Keynote Speech內容以及評價,我想網路上已經貼了許多,我在此就不再添足。今天除了上午的Keynote Speech外,下午連續參加了三場講座:OS X State of the Union, Development Tools State of the Union, Graphics and Media State of the Union, 都是屬於宣示性、策略性的演說。事實上,後面三場的重要性,我現在認為,其實遠比Keynote來得重要。

當然,會議的Keynote不外乎是替大方向定調。今年的WWDC Keynote很意外的都是Apple自家員工上陣,並沒有Intel、MS或Adobe的人出來講話。對Apple來說,Intel transition也許已經完成,但是有在看MS Mac BU的人都知道,事情絕非如此單純。另一方面,Steve Jobs的Keynote似乎已經變成了一種煙火秀,在這樣的情況下。可是要年年有驚喜,其實並不容易。

就目前我所看來,上午Keynote的「平淡無奇」,其實都是在為下午每一項技術的深化定調。例如Time Machine其實是Journaled file system的延伸,要真能發揮功能,最終仍要靠應用程式的配合。Spotlight, universal access也一樣。

對我來說,有兩個我所關心的主題,Keynote上沒提到,反倒是在下午的講座上漸次被提及。一個是Objective-C 終於有了正式的garbage collection的機制(將在Leopard中支援),另一個則是終於有了resolution-independent UI──意思是說,從此使用大螢幕時,UI的尺寸(其實是DPI數)也會跟著增加,終於讓眼睛不會太傷。

很顯然,Apple 仍把主要技術的實作,押寶在 Objective-C 這套語言上。負責 Objective-C 講題的人甚至開玩笑說,他會吹管樂,而升do(C#)的調子 “get you nowhere”。話雖如此,增加諸如 setter/getter 自動生成的關鍵詞,增加 “foreach” 的語法,以及早在前一版 gcc 就已經出現、但 Apple 並無在 Cocoa 層次支援的 garbage collection 等等,這些只能說是 Apple 終於跟上了現代語言發展的腳步。同樣的道理也出在 Xcode 3.0 的眾多「新功能」上,例如區塊收攏(folding)、refactoring、更好的除錯訊息支援等等,這些早就是各種現代編輯器以及IDE環境就該有的功能,Xcode只能說是早該如此。不過,那套竟然跟GarageBand介面有異曲同功之妙的除錯工具,倒是很令人眼睛一亮。

整體說來,今天一整天所提及的技術,主要還是以媒體及呈現(media and representation)為主,舉凡CoreAnimation, QuartzComposer等等,顯然Apple仍然專注於桌面軟體,並且針對的都是高階、高單價/高成本、大量圖形或媒介處理的應用。而,當 Steve Jobs 在 Keynote 講到 iChat 的新功能時,很多朋友(就我所知)的第一個反應是:這有什麼好拿來講的。然而,在下午的 session 中便不難發現,此次 SJ Keynote 的重點都在於:這每一項「平淡無奇」的「新功能」,都有一套 API ,而且顯然做為 OS X 的應用程式,都該儘可能善用這些功能。

也就是說,OS X 的應用程式將越來越難寫。應用程式底層必須有可程式化的 scriptability,UI 基礎要能有 accessibility (這一點在美國相信會益發受到重視),程式要好用、要提供 “wow factor”,必須善用各種的媒介資源──聲音、圖片、影像、攝影機、H.264格式、HTML+CSS+Javascript──這一些都建立在一個又一個的 “framework kit” 上面:PDF Kit, CoreAnimation, ImageKit, QT Kit, Web Kit, etc. etc. (是的,這些程式庫初期都會只有 Objective-C 寫的 API)有一點跟 MS 哲學很不一樣的是:OS X 的程式庫,似乎都直接反應在 Apple 自家的應用程式上,也就是說 Apple 自家的應用程式就是那些程式庫的精緻應用。例如用 PDF Kit 配合 Interface Builder 就可以拉出一個簡易版的 Preview,Web Kit 拉一拉就有個陽春版的 Safari 等等。而如此的挑戰變成了,當這些事 Apple 都已經幫你做好時,你到底能發展出什麼新的東西出來。

雖然WWDC做為每年Apple的兩大盛事(另一是MacWorld)之一,總有許多花絮和trivia可講,不過我想最終還是要回到技術的主題來。接下來四天會參加的活動,也會循著這個方向來走。

今天先到這邊,要去補充五點起床苦撐透支的體力啦。

OV @ WWDC: Day 0 Quick Update

所以,今天早上應該算 Day 0 ,到今天結束,才應該叫 Day 1 ?(See, I solved the day numbering fence-post problem!)

幾個 quick updates:

  • 早上5:15 AM起來實在令人腦袋一片空白, but it pays.
  • 遇到 WebObjects evangelist 然後被傳了十分鐘的 WO 之道。
  • 據說到時會場會強力干擾wireless access points, 所以非常好奇之前的文字現場轉播是怎麼做的。
  • 承上,「全文轉播」的網站應該已經滿天飛了,這裡就不轉載了吧……
  • 很明顯的有些人已經來很多次了,所以跟著他們走準沒錯。除此之外老經驗的人也會傳授一些例如「何時要去參加Apple campus bash」或是「要提早到Company store買紀念品,不然人會爆滿」這樣的tips and tricks.
  • 會場偶爾還是有一些 non Apple machines, but they are the minority (well, unless, of course, they’re running You-Know-What…
  • 還沒有看到人拿出 bingo sheet,不過也許是因為還沒進會場。
  • 現場的一些照片可以看這裡
  • Right… I’m thrilled about it

OV @ WWDC: Day -1 英文版

今天有點晚了,先轉來今天 (“Day -1″) 的英文版 WWDC 見聞錄,以上。:)

附註:”OV @ WWDC” 開頭的文章,均以 Creative Commons Attribution-Non-Commercial-NoDerivs 2.5 License (英文版 / 繁體中文版 / 簡體中文版) 公開。這個 blog 上的其他文章除非特別標明,否則(仍)不是使用 CC 授權發表的。

Quick update: OV @ WWDC, Day -1

(But then, is tomorrow WWDC Day 0 or Day 1?)

昨天下午睡了一下午覺,起來的時候,大約花了一分鐘的時間,才真的醒過來,確定自己到舊金山啦。

簡短快速 update 一下現況:

  • 去 Moscone Center 拿到了入場用的名牌。舊金山市區看得到不少拿著 WWDC 2006 包包(與會贈品)的人走來走去。去買東西的時候,還被店員問到明天會有什麼好料,我當然只能說請他也來玩keynote賓果遊戲啦。
  • 去了一趟 Apple Store ,事實上就在 Moscone 兩個 block 之遙的步程內。修好了我的電源供應器(其實就是換掉了),我的 AppleCare 資料又再度消失在資料庫中… orz. 最後東西修好沒錯,不過,這已經不是第一次我的「阿婆不care」出狀況了。這這,不太對吧。
  • orcas 又找出了好幾個 OS X 奇怪的地方,像是 QuickSilver + 改過的US keyboard layout + OV 會搞怪。Matlab 還是無法用 OV。呃,看起來都不是 OV 的錯。
  • 明天應該會很早起來排隊吧,上午似乎會很漫長……

廢除「比較文學」和「文化研究」學門芻議

今天一邊吃飯一邊跟朋友們聊到的,既然otaku們分析動漫作品,都能用上詮釋學、現象學、心理分析,而引用的經典,又上自托拉、死海書卷,下至福音書、偽經,採用的方法,更是從新批評、作者論、讀者反應理論、解構主義到鄉民推文,請問「比較文學」和「文化研究」還有什麼能立於學院的?

(逃)

通往WWDC之路

美國簽證拿到了。在此要謝謝每一位給予幫助、寫信支援的朋友。

意外回到台北,有很多新發現。唯一就是欠了很多事情,做得很慢。該寫的code、該準備的稿子、該聊的天、該浪費的時間、該睡的覺,有好多都還堆在那邊,然後我又要移動。

WWDC的議程大致都出爐了,Apple 還幫與會者準備了WWDC Survival Guide跟用AJAX寫的agenda planner,agenda還能export到iCal裡,算是相當善用自家的工具。目前安排參加的幾個議程,至少一定會有WebKit的相關題材。

另一方面,我這邊在 OV 的進度上也慢慢重新 pick-up 起來。希望有機會能在 WWDC 上找到人纏著丟問題出來。

We’ll be there. :)

夏日小記

台北的天藍得燦。週末,去MoCA看「慢」。柳美和的照片和那句歳は日毎に己で決めるべし──每天都要決定自己的年紀──看得出神。地下街週末練街舞的學生們。以及不同計程車上同樣聽到的歌:

還是不停的推倒銅像
還是撕光了牆上的海報
還是一樣在叫著新時代
還是一樣想做一個龐克
還是一樣而且保持這樣
耳機裡的新浪潮 扭捏的唱

你錯過甚麼 你錯過甚麼
我曾經醒來 我曾經睡著
我曾經也作過了許多夢
摟著你的肩膀 搖頭晃腦的唱

(1976,〈耳機裡的新浪潮〉)

« Previous PageNext Page »