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

Archive for September, 2006

BT (不是那個 BT 是那個 BT)

結果後來才發現,WWDC 2006 那個星期四,Campus Bash 的 DJ ,竟然是 BT … orz

BT 來過台灣,但沒能恭逢其盛。只是就像這篇 blog 下面的評論說的,如果當時他放的是像 “Flaming June”,那、那、那就應該不會認錯了吧… +_+

不過,對他那台貼滿貼紙的 PowerBook,印象倒是挺深刻的。

好了,這篇是做為電風扇失格的自責文。

ObjectiveFlickr,一套簡單的Flickr API框架(中文)

做了一套很簡單的Objective-C Flickr API,取名做ObjectiveFlickr。原始程式碼放在Google Code上面,可以從這裡取得

程式碼是用BSD授權公開的,請自由取用。其中還用到了Andreas Meingast的CocoaCryptoHasing來為NSString增加md5計算功能(Objective-C的category真好用),特此致謝。

程式碼裡面有附一個簡單的demo,如果你打算從原始碼自己建,你得先在ObjectiveFlickrDemoDelegate.m裡填進你自己的Flickr API key跟所謂的”shared secret”。萬一你忘了填,反正編譯也不會給你過。:)

我也預先建好了可直接使用的demo,放在這裡。當你按下Authenticate按鈕時,瀏覽器會打開,帶你到Flickr的授權頁面,授權的應用程式名稱叫FlickrVanilla…… 請原諒我最近越來越沒有命名的創意……

Demo展示的是Flickr API使用的必經程序。首先,你得先取得一個所謂的”frob”,再從frob合成Flickr授權頁面的URL,進到Flickr取得授權,然後回到demo app中取得所謂的authorization token。之後就可以憑此token取用各種Flickr API的服務(使用者訊息也在token裡面)。照片顯示是直接用Interface Builder拉一拉WebKit做出來的,還需要再美化就是了。

這個demo把Flickr API的呼叫拆成幾個部份,事實上在大多數Flickr桌面應用程式中,frob取得與進入授權頁面,是做成同一件事的。通常程式就直接打開瀏覽器,並用一個modal dialog box告訴使用者說,請授權完畢後再回到應用程式。

Flickr這樣做有個很棒的地方是,應用程式完全不用去管login logic。只要把之後取得的auth token先預存起來,下次打開應用程式時詢問token還有效就可以了,如果token失效了,只要再重跑一次frob取得以及授權的程序就可以。

當然,初見之下,這種作法有點不直觀。需要從API key及”shared secret”中計算出API call的簽章,自然也是為了防API abuse。

目前我還沒有把ObjectiveFlickr變成一個真正的OS X framework。目前程式庫的部份其實只有一個.h跟一個.m檔。Class也只有兩個。FlickrRESTURL是負責生出各種Flickr REST API的奇怪URL(有些還挺長的)。至於FlickrRESTRequest則包裝了NSURLConnection,並且使用Cocoa常見的非同步delegate模式,你先把request丟出去,再等著接收FlickrRESTRequest instance送回的訊息,訊息包括:網路傳輸中、資料傳輸取消、發生錯誤,或是正確載回了Flickr API的XML payload等等。我做了一些基礎的Flickr error code處理。

這兩個class構成一個相當「低階」的框架。Flickr API有一大部份是要處理那些傳回來的XML data block。目前我只做了token跟photos兩個data block的拆封動作。其他還有一大堆類似的資料得處理。

我們可以從這兩個「低階」的class出發,建立更「高階」的Flickr API framework,好比說,同步化的資料傳輸(亦即,要等API call完成才繼續下一個動作,而不是現在的async model),或是直接能寫像[flickr blogs_list]這種更直觀的API call,還有就是把送回的XML payload做更完整的拆解(例如轉換成我愛的NSDictionary資料結構等等)。

差不多就是這樣了。是有打算繼續開發下去,頭一步應該是把它變成真正的 .framework 吧。還有bug要修、做單元測試等等(async model真難debug…)。還有文件得寫。不過就先把它放出來了。如果有patch、有任何意見,或者想直接要svn commit權限,都非常歡迎的喔。

ObjectiveFlickr, a Simple Flickr API Wrapper

I’ve made a very basic Flickr API framework written in Objective-C. I called it ObjectiveFlickr and the project, including the source code (released under the New BSD License), can be found at its Google Code hosting site.

To build the demo app from the source code, you have to first check out the code (of course), and fill in your own Flickr API key and “shared secret” code in ObjectiveFlickrDemoDelegate.m ; if you don’t, there will be compiling stage errors anyway. :)

A pre-built demo app can be found here. In the Flickr authentication page, you’ll be asked to give read permission to an application called FlickrVanilla. And there you go.

The demo app is quite rudimentary but shows the basic steps: obtaining a “frob”, finishing the authentication process by visiting Flickr, then obtaining the token (with it comes the user information). After that we can do what we want. I use WebKit to display the photos. Aesthetically it still needs some brush-up.

Note that this is a step-by-step demo. OS X Flickr apps usually combine frob-getting and authentication into one step using a modal dialog box, asking users to come back as the browser window is being opened.

I actually haven’t built the framework into an OS X .framework–yet. Right now it only consists of one .h and one .m and two classes. FlickrRESTURL is the “URL factory” that packages the Flickr API URL scheme together with API signing. Whereas FlickrRESTRequest packages NSURLConnection and some XML unpackaging utilities. It follows the delegate design pattern and uses informal protocol to tell the delegate if an XML document is being received, canceled, successfully received and unpackaged, or if there’s anything wrong (Flickr error codes are processed here too).

These two classes make very basic building blocks. As for the XML unpackaging, so far I’ve only done the one for authentication token and photos. There are other Flickr data blocks that we have to take care of.

Using these building blocks–”low-level” in a way–we can go steps further, and come up with, say, “higher-level” encapsulations, such as synchronous calls, API calls as Objective-C methods, or simply returning every Flickr response as pre-unpackaged Foundation data structures (I love NSDictionaries).

So much for now. I plan to build more things with it and improve the framework along the way (building a real .framework will be an immediate to-do). There will be bugs to fix and some more testings. Oh, and the documentation work (currently none). But here I will give it a go, releasing it into the wild. Patches, comments, or even commit rights requests are all welcome.

Thanks!

(ObjectiveFlickr uses Andreas Meingast’s CocoaCryptoHasing to do the md5 signing, Danke Andreas!)

OV @ 北京輸入法廚房:Day 3



LeopardVanilla on Mac Pro

Originally uploaded by lukhnos.


感謝所有促成此行的朋友。:)

OV @ 北京輸入法廚房:Day 2

輸入法廚房的第二天,我們幾個人照例還是起了個大早。在昨天的介紹之後,今天大家進入了coding mode,各自帶開寫起了程式來。

因為下午還得回辦公室開會的關係,只參加了上午的廚房。大體已經瞭解了InputMethodKit的設計。改用Objective-C來寫輸入法,確實有比較文明一點。不過,就是還有不少bug,感覺菜炒得有點生……

倒是,原本一直說輸入法是寫辛酸的zonble,不知為何今天改口了!竟然在晚上時說,「輸入法是做爽的」。我唯一能猜想到的原因是,呃,那個…… (給嫌不夠萌的朋友:請直接找 zonble )。

gugod今天寫了一篇很詳細的blog, 介紹了蘋果的InputMethodKit,以及IMKit與OpenVanilla的差異所在。我想請大家轉去讀gugod的blog,該講到的技術內涵,全都在那了。:)

OV @ 北京輸入法廚房:Day 1

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辦公樓隔壁賣的北京烤鴨,我被抓回公司開會,變成唯一落單沒參加的人了。嗚。

Podcast: 2006/8/2 ilyastorming 關於 OpenVanilla 的講題

上個月(2006/8)人在台北的時候,參加了 ilya 所邀請的 ilyastorming 沙龍。這個詞是從法文的 il y a (there is…) 以及英文的 brainstorming (腦力激盪/大脑风暴)而來的。那一天我們討論到了地理資訊、關於輸入法與 POJ、Wikipedia 與 edit war、賈霸機器人(jabbot)、地圖網站,以及大家聽哪些 podcast 等話題。

本來當時有準備網路直播的,沒想到 Café Bastille 的無線基地台被我們超過八台以上的 laptop 搞掛了。倒是錄下了其中半場的內容。在與會者同意之下,在此公開第一部份,也就是關於 OV、輸入法、地理資訊的部份。

大家可以使用本 blog 的 RSS feed 訂閱收聽,或者直接下載該次 podcast 的 mp3 檔案

附帶一提:gugod 和 zonble 已經抵達北京了,在跑了一晚的迷你黑客松後,zonble 念茲在茲很久的「入力娘」,竟、竟然有原型了… (真相1 真相2 真相3… 嗯,理論上真相應該只有一個才對…)。

我們 9 月 4 日至 9 月 6 日會在 Apple Asia 的北京辦公室參加 Input Method Kitchen ,屆時再來報馬。:)

« Prev