OV @ 北京輸入法廚房:Day 3
LeopardVanilla on Mac Pro
Originally uploaded by lukhnos.
感謝所有促成此行的朋友。:)
lukhnos :: Sep.06.2006 :: tekhnologia 技術或者藝術 :: Comments Off
LeopardVanilla on Mac Pro
Originally uploaded by lukhnos.
感謝所有促成此行的朋友。:)
lukhnos :: Sep.06.2006 :: tekhnologia 技術或者藝術 :: Comments Off
輸入法廚房的第二天,我們幾個人照例還是起了個大早。在昨天的介紹之後,今天大家進入了coding mode,各自帶開寫起了程式來。
因為下午還得回辦公室開會的關係,只參加了上午的廚房。大體已經瞭解了InputMethodKit的設計。改用Objective-C來寫輸入法,確實有比較文明一點。不過,就是還有不少bug,感覺菜炒得有點生……
倒是,原本一直說輸入法是寫辛酸的zonble,不知為何今天改口了!竟然在晚上時說,「輸入法是做爽的」。我唯一能猜想到的原因是,呃,那個…… (給嫌不夠萌的朋友:請直接找 zonble )。
gugod今天寫了一篇很詳細的blog, 介紹了蘋果的InputMethodKit,以及IMKit與OpenVanilla的差異所在。我想請大家轉去讀gugod的blog,該講到的技術內涵,全都在那了。:)
lukhnos :: Sep.05.2006 :: tekhnologia 技術或者藝術 :: 2 Comments »
gugod 和 zonble 上星期五(9月1日)抵達了北京,我們星期六晚上開始從 WebKitServer 出發,目前除了 gugod 的「RSS reader 選字窗」外,zonble 一個人就寫了兩個選字窗theme,一個是具有retro風的「倚天中文選字窗」,另一個則是「Ringo-chan選字窗」,又名入力ㄋㄧ…… 我說不下去了,讓 zonble 說吧。
由蘋果電腦亞洲分公司(Apple Asia)於北京舉辦的「輸入法廚房」(Input Method Kitchen),星期一於蘋果中國的北京辦公室正式開張,為期三天。此次 gugod 和 zonble 到北京來,也就是為了參加此次活動──我們今年為 OV 舉行了首次的募款活動,目的之一正是在此。
第一天的「輸入法廚房」,主講人是Apple負責文字處理及輸入法技術(屬於OS Engineering部門)的Lee Collins及John Harvey。講到Collins有個經歷一定要提:他是Unicode標準的起草人之一。八月的WWDC 2006,關於輸入法相關的議程,也是由他主講的。
第一天的講題,可以說是WWDC 2006議題的延伸。我們實際開始在Leopard新的輸入法框架上工作,主講人也一步步講解新架構的組成,同時也跟與會者討論了目前的新架構,還有沒有需要添加或改進的地方。
北京的輸入法廚房其實不大,除了兩位主廚,參加的人有日本被我們稱為「出雲大社輸入法」的ErgoSoft代表國領信雄(Nobuo Kokuryo)、當初撰寫Tamul語輸入法引擎的一位印度朋友、QIM的作者glider、在Novell任職的SCIM作者蘇哲,以及紫光華宇(紫光輸入法開發商)的副總經理王川,一位中國手寫輸入法的開發商,以及代表OpenVanilla的我們這三人組,另外就是蘋果日本與蘋果中國的工程師們,大家一起圍在爐邊練習烤鴨。:)
(話說,烤鴨跟寫輸入法之間的相似性是這樣的:把輸入法範例中間的程式碼掏掉,裡頭填上自己的功能、撐大,然後在外頭塗上自己的UI塗料……)
蘋果為這次廚房的佈置工作,花了不少工夫。我們每個人分配到一台桌上型機器,範例程式、開發工具也都準備好了。在上午的Objective-C簡介跟InputKit介紹後,下午許多人便開始一步步從範例程式下手,來瞭解輸入法的開發細節。
以上簡單整理一下輸入法廚房Day 1的情況。能在第一時間瞭解接下來 OV 需要做哪些事,我想是最重要的。然後就是跟大家齊聚一堂,很棒。唯一的怨恨是,晚上沒辦法跟大家一起去吃Apple Asia辦公樓隔壁賣的北京烤鴨,我被抓回公司開會,變成唯一落單沒參加的人了。嗚。
lukhnos :: Sep.04.2006 :: tekhnologia 技術或者藝術 :: 2 Comments »
WWDC 2006 雖然結束了,不過我還有很多功課得做。除了一些還沒整理完的筆記,還有幾篇見聞錄得寫得交。另外還有會場上參加過的許多sessions,也還有範例程式得去下載得瞭解。
白天的工作把我淹沒,回到北京一週以來,除了在清理堆積如山的to-do,還得在各種密密麻麻的over-design叢林間打轉。I’ll survive.
倒是,讀到Caterina Fake參加O’Reilly FOO Camp的筆記,除了筆記內容,我更好奇的是像她參加會議,會怎麼做筆記。
WWDC 2006會場上,我見到了無處不在的OmniOutliner,也有人用 TextMate 、永遠的 BBEdit 系列產品,或是硬派作風、在 Terminal 下的 vi 或 emacs (用 SubEthaEdit 的人反而沒想像中多,當然我的抽樣很不可信就是了)。不過做筆記的工具,可能不若做筆記的事前準備和方法來得重要。
我必須承認,第一次參加這樣的開發者會議,頭兩天可以說是完全處在被動地被淹沒狀態。Didn’t know what to expect 可以說是最大的原因。當然。我相信大家也都能理解,有些東西作為與會者,不能詳細公開描述。不過整理出來公諸大眾的是一回事,我認真檢討起來,自己做筆記的習慣還是太生嫩而欠缺準備。這不是工具的問題,而是,我整理不出像Caterina那樣的筆記。
要學的東西還很多。附帶一提,Caterina的筆記真是好看。
lukhnos :: Aug.30.2006 :: tekhnologia 技術或者藝術 :: 3 Comments »
卡爾維諾(Italo Calvino)在台灣中譯為《寫給下一輪太平盛世的備忘錄》(Six Memos for the Next Millennium: The Charles Eliot Norton Lecture 1985-86)的講稿中,有一章〈快〉提到過一則故事:說有個國家的君王要莊子畫蝴蝶,莊子說要五年的時間,於是君王供莊子吃住,過了五年後君王問到莊子工作得如何,莊子說他還要再五年。五年過去,到了約定期滿的時間,莊子提起畫筆,一揮而就,畫出了世界上最美麗的蝴蝶。
這段故事到底典出何處呢?翻了翻錢穆本的《莊子纂箋》,卻怎樣都找不著與此相近的描述(當然有可能是我白目,完全漏看──這種事常發生在我身上)。這不會又是一個假託以名的舉燭吧……
Anyway, 從Signal vs. Noise看到的這個,Paula Scher講的,不就是這麼回事嗎?
How can it be that you talk to someone and it’s done in a second? But it is done in a second. it’s done in a second and in 34 years, and every experience and every movie and every thing of my life that’s in my head.
這一段訪談講到許許多多有意思的東西。其中有一段講到她手繪的地圖,她說那和設計很不一樣。Paula Scher做設計依靠的是靈光一現,手繪地圖則是有許許多多的工夫(craft)要下在裡面。她喜歡手工,覺得用電腦怪怪的,因為用電腦「味道不對」,沒有美術用品店的味道,反而像在一部車裡。藝術的時刻短暫,與生活中絕大多數不得不然的「垃圾」相比來說,但是只要有那樣的時光,她就會一直做下去,三十四年來如此,樂此不疲。
lukhnos :: Aug.26.2006 :: tekhnologia 技術或者藝術 :: 3 Comments »
星期五是 WWDC 2006 的最後一天,今天電腦出了點狀況,沒辦法參加最末的 Text and Internationalization Lab。第一場的 Text and Internationalization Feedback Forum 上面倒是提出了不少問題,諸於 Dictionary.app 何時能加入第三方辭典資料以及供 NSTextView 使用(答案:Leopard 裡會有 API),關於中日韓字型的 fallback 問題等等。
會上發現其實同時會裝好幾種 keyboard layout 跟一兩種中日韓輸入法的人,其實不在少數。俄語、波斯語等語系對於 l10n 以及文字顯示、組排、輸入的需求也和拉丁字母系的語言不同。輸入法是其中的一環,而且看起來並不只有中日韓語言的開發者會關心。
雖然電腦出了狀況沒辦法帶著 code sample 去 lab 討論有點可惜,不過負責亞洲區 text processing 相關事務的 Lee Collins 會在九月率領他的團隊到北京主辦「輸入法廚房」,Leopard 下一代的輸入法架構到那時候相信會更為完整了。
至此,WWDC 2006 告一段落。舊金山的 Powell 地鐵站裡,許多帶著 WWDC 2006 包包的人,拉著行李坐上前往舊金山國際機場的 BART 車廂。許多新的技術、新的 API,人們來這裡獲取訊息,到 feedback forum 上發表意見,留下聯絡方式。有人建議下一次的 WWDC 應該安排時間促進開發者之間的交流,例如 BoF (birds of feather) 活動,或是線上的與會者論壇等等,畢竟現在這樣的 WWDC 形式,還是太像 Apple 垂直的新技術佈達,而少了一點業界的橫向聯繫。
還有一些算是觀察心得與感想的東西,時間有點晚了──接下來又是連同候機長達十數個鐘頭的航程,切換時區之後,明日再續。:)
lukhnos :: Aug.12.2006 :: tekhnologia 技術或者藝術 :: 3 Comments »
WWDC 到了第四天開始有和文字處理有關的議程。上午有一個和文字顯示、編排有關的講題;下午最末一個講題則和文字輸入、鍵盤配置,以及──輸入法開發有關係。
距離明年春季 Leopard 發行還有一段時間,新的輸入法架構也還沒準備好,一些東西顯然一定得到九月的北京輸入法工作坊(Apple將之稱為 “Input Method Kitchen” — 怎、麼、又、是、烹、飪、的、比、喻?-_-)才會更為明朗。
lukhnos :: Aug.11.2006 :: tekhnologia 技術或者藝術 :: 1 Comment »
昨天從 10:00 開始就一直在參加 sessions,同時因為很不怕死地把機器整套重裝,因此爛得亂七八糟。加上為了事前先跑過一遍今天下午輸入法相關session的sample code,寫作等於停了下來。(唉呀,給與會者準備的sample code pack不能跑啊……)
第四天連續兩場跟 WebKit 相關的議程,連同昨天的 Dashboard 議程,我們不停聽到關於 Objective-C 與 Javascript 如何整合。透過 WebKit ,ObjC 可以呼叫 Javascript,後者也可以呼叫 Objective-C (right, and the data types will be otomatically converted…)。
所以我上次在 OSDC 的演講還算是蠻有意義的,因為那一次的示範,也在講這件事……
OS X 上有越來越多程式利用 WebKit 作為介面層,例如 Adium, Colloquy ,甚至 Aperture 都用到了 WebKit 來表現介面。所以我們似乎正在目睹一個整合的趨勢,或者說,語言的界線越來越模糊,.js / Objc 共冶一爐,存取 DOM 資料,前台/後台經過洗牌更加清楚,但顯然 desktop/web app 的界線被模糊了。
另一件有意思的事情是,一到了 WebKit 相關 session ,所有我常用軟體的開發者,似乎都到齊了,像是染了一頭藍髮的 Colin Barrett(可愛小朋友!!)、Colloquy 的作者 (he wears a blue t-shirt! which means…),還有 OmniGroup 的幾個人(其實大概那就是 Omni 全公司一半的開發者了吧)。
OmniGroup的技術頭頭在Objective-C那一場有應邀登台為Objective-C 2.0背書(他們是ObjC gc的小白鼠),他說Omni只有12位programmer,卻已經成功推出了六套產品。相信用過OmniGraffle和OmniOutliner的人應該都同意那些真的是好物。
似乎再一次地說明了其實少少的人可以幹大大事呢。
昨天其實還有一場超讚的演講,是Pixar的人再度應邀,這一次插了一個中午的新session,講畫動畫與寫程式之間的關係,但或許更重要的主題是 “storytelling as a team work”。Pixar的人果然真的會說故事,也強調團隊性。Somehow there’s section called “Things I wish someone could tell me when I was a student”. Well, that subject–how to tell a story with a team (and how programming is like that too)–is exactly the thing that I wish someone could tell me when I was a student… 雖然是遲來的醍糊,不過這樣也算是什麼什麼聞道,什麼什麼可矣了吧。
lukhnos :: Aug.11.2006 :: tekhnologia 技術或者藝術 :: 1 Comment »
剛剛聽完上午的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
lukhnos :: Aug.10.2006 :: tekhnologia 技術或者藝術 :: 1 Comment »
聽起來,在最大的方向上,今年的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?
lukhnos :: Aug.09.2006 :: tekhnologia 技術或者藝術 :: 7 Comments »