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

重新學C++

最近在重新學C++。簡短的感覺是,C++哪裡是什麼物件導向/「面向對象」的語言嘛。C++設計哲學的精采之處,似乎都表現在「沒有使用pointer」的地方。另外就是,傳統C有的程式庫功能,C++幾乎都有一套「符合自身哲學」的作法。從這點來說,等於是跟C斷裂了。

Objective-C就這一點來說,還是跟C貼近些(Objective-C是C的超集合,但C++不是;合法的C不見得是合法的C++)。

不過,兩者哲學天差地遠就是了。倒是C++因為有行內展開(inlining)這種超邪惡的機制,在處理複雜資料結構上,有著可怕的速度優勢。

最近感受到把某些老程式用C++重寫後獲得2x甚至10x速度的爽感──在完全不改動資料結構或演算法的條件下,一切全拜C++的ADT哲學與STL container之賜。

雖然有一種遲來的快適,不過也幸好是現在才改用C++重寫,而不是在它們還用其他語言寫時,就做很多敲敲打打。因為,套用那句經典名言:

Premature optimization is the root of all evil
過早求最佳解乃萬惡根源

PMingLiU時代

修正一句話:Vignelli的地鐵標示是1966年設計的,不是70年代。

記錄片Helvetica的DVD已經公開發售一段時間了。很推薦大家去看這部片。實在覺得在台灣應該要有個放映會的。

我可能比較傾向片中「不認為Helvetica限制了什麼」的那一派。而且即使是Helvetica也還是有時代性的。確實Massimo Vignelli的紐約地鐵標示系統不太容易讓人覺得這是1960年代的東西(據一位朋友說,紐約地鐵以前不是這樣的,以前對路線的稱呼方式和現在色環加字母的系統很不相同,是那種只有紐約客搞得懂的命名法),但是也絕對不會讓人和,好比說,American Apparel聯想在一起。字體仍然是要和它的context一起發生作用的。

有時在想,如果過去五十年有所謂的Helvetica時代這種說法,不知道繁體中文的等義詞會是什麼。

不會是…… 「PMingLiU時代」吧。

PMingLiU,或者說是「細明體」、「新細明體」,大家從Windows 3.1一路看到現在,一共也看了15年以上了吧。總覺得一定程度上這跟Arial有異曲同工之妙。因為Windows的緣故,它背負了所有電腦字體的罪惡。不過,「阿賴羅」好歹還有個理型和範式:那就是被它rip off的Helvetica。細明體呢…… 我們好像沒有那個理型的存在(不會是 stdfont.24 吧 *大誤*)。說來也奇怪,平平是明體/宋體/明朝體,日文字體就有辦法表現出那種一眼即能看出的個性和年份。莫非,這一切都是「風土條件」(terroir)造成的?

(不過,即使在 stdfont.24 的年代,大家拿到倚天,第一件做的事,就是找一套轉換程式,把國喬的 16×15 字型換過去──奇怪,或許那時候反而大家比較在乎這種事?)

倒是幾個月前對我們的「PMingLiU」時代有新的體悟。那就是去WWDC ’07的時候,為了一個繪圖系統的問題,去了他們在會場上設置的lab。幾經輾轉,最後我面前的人是…… 「Quartz主要就是他寫的啦」。「Apple的PDF是跟Adobe買的library還是自己照規格刻的?」「自己照規格刻的,應該說,是我刻的」,的那種等級的人。

談話最末,也許出自沒話找話,我問了個問題,「對了,附帶一提…… 你們能不能解決有一套繁體中文字型在PDF裡會錯亂,但關掉anti-aliasing後會正常的問題?」

「我好像知道你講的是那一套字了,你講的該不就會是……」
「PMingLiU?」
「啊,果然」

那個當下,他的反應,我唯一能想到的,只有這句台語可以形容:khùaⁿ tio̍h kúi。漢字寫作「看著鬼」,也就是一般說的看到鬼啦。

真是有夠「硬名譽」(infamous)的。

不過,我好像也曾經很愛PMingLiU呢,特別是跟另一套電腦字型的罪惡相比,那就是本國偉大政府公文書統一使用的14pt BiauKai(請恕我實在無法直呼其名諱,這種事跟不能直呼佛地魔,只能說the-typeface-whose-name-thou-shalt-not-mention是一樣的道理)。不過,那又是另外的樓層/故事了。

幾年前英國電信出了個服務,是你只要在手機上撥個號碼,然後把手機湊近,好比說,discotheque大聲放送的舞曲,幾秒鐘後就會有簡訊告訴你這是哪首歌、哪裡買得到、要不要買鈴聲一類的。嗯,其實我也好希望有這種服務是,看到喜歡的字型,用手機拍下來,發送MMS,幾秒鐘後就會有簡訊告訴你,這是哪套字 …… 不過,相對於鈴聲一首不到百元台幣,應該是不會有字型立即購這種事的啦……

聽了會有成就感的片頭

小時候看的Knight Rider(就是台灣譯為為《霹靂遊俠》的那個影集),據報紙說,明年要上映新版了(不過並不是找David Hasselhoff來當主角)。託YouTube之福,一下子就能叫出各國版本的片頭。幾種能大概聽得懂的語言裡,大概就屬德語版聽得最有成就感。全片頭只有三句話,頭兩句是:”Er kommt, Knight Rider”,以及,”Ein Auto, ein Computer, ein Mann”。天啊,完全是初級德語的程度(即使不懂德語的朋友,相信也能從第二句中,猜到要講的是什麼吧)。相較之下,「無奇不有的世界」,以及「刀槍不入,無所不能」──怎麼這麼多double negative啊──好像就真的太難了。不信的話,去師大華語中心,解釋給同學們聽,你就知道是怎麼一回事了。

那種屬於1980年代、如今看起來粗糙的科技感,真是不可思議。

據說新版Knight Rider要改掉許多當時不合理的設定(例如2秒內從0加速到100 mph)。活在「後《空想科學讀本》」時代的人很可憐。可以想見的是,當「設定」本身有越來越多限制,「故事」的重要性會越發突顯。

除了原版Knight Rider外,另一個從YouTube上找到的原版片頭是《科學忍者隊Gatchaman》,也就是台灣譯成《科學小飛俠》的卡通。據稱是少數台版主題歌完全唱原版曲的卡通歌代表──不過,小朋友唱「飛啊、飛啊」跟大叔式的唱腔「飛べ!飛べ!」(注意,那個日文字幕還要用斜體的Gothic字,驚嘆號有超傾斜的角度,表現出1970年代的日本感),完全不是能放在同一個等級比啊。另外就是有朋友說,明明日文主題歌說「地球はひとつ」(地球只有一個?),這一班人馬卻又喜歡開著高熱的燒鳥到處切來撞去,這,好像是做為正義味方的不方便真相啊。

OpenVanilla、魔獸世界、行列

花了一些時間測試了一下,OpenVanilla(以及Apple內建的輸入法,包括日文)在「魔獸世界」(World of Warcraft; WoW)的行為,可能隨著機器不同而有不同。

大體說來,在新機器上,「魔獸世界」的非全螢幕模式一定是正常的──輸入法可以用,選字窗看得到。在最新機種上(例如前陣子剛出的,可以插滿4GB RAM的MacBook)可以在全螢幕上正常使用輸入法,但老一點的機種似乎只能在非全螢幕模式上使用。

而,雖然說是「正常使用」,但選字窗出現的位置並不正確,也就是沒有跟隨著組字區的位置移動。內建輸入法也一樣。

另外,先前有朋友反映,OV的行列輸入法在「魔獸世界」完全無法使用。我們也已經知道原因了,「魔獸世界」跟iTerm有一點像,在處理組字buffer的方式跟別人不一樣。我們在不影響原本行列運作的情況下,已經解決了此一問題。

更詳細的內容,以及修正包下載安裝方式,請參考我在OpenVanilla討論區中的說明。

OpenVanilla 2007年11月18日止的捐款收支明細

我們今天整理完OpenVanilla至昨日(2007年11月18日)為止的捐款收支明細,發佈為一份Google Docs的試算表,並且說明了近期的開發及支用情形。請大家參閱OpenVanilla Group所公佈的文件,謝謝!

.cin的歷史,與Leopard對.cin的支援

Apple在OS X Leopard中加入了對.cin格式的支援。做為輸入法開發者,我想這大概是對open source社群最棒的tribute之一。這個經過歷史考驗(.cin最早是由Xcin創建的格式)、廣為各framework使用、有許多使用者自訂或創建內容的格式,如今也成為了商業作業系統的一環。

根據我所知道的,把.cin放進~/Input Methods/或/Library/Input Methods中,重新登入,就會變出相對應的輸入法。不過要怎麼調整各種選項,我就不是很清楚了。

Yale Chinese Mac的主人Eric Rasmussen在Chinese Mac Google Group起了個頭,想了解 .cin 格式的定義,以及Leopard對 .cin 的支援。我貼了一封回應,也等於整理了我對 .cin 的理解。我對 .cin 在其他 framework 的實作瞭解有限,如有疏漏還要請大家指正了。

滿城盡是封面流 (cover flow)

Xcode 3的Quartz範例中有一個叫CovertFlow的程式,示範如何以CoreAnimation來製作cover flow。程式相當複雜。有人在Cocoa mailing list上問:Apple有沒有Cover Flow的API?

答案是有的──雖然Apple沒有將之公開。Class就叫IKImageFlowView。

如果你會用IKImageBrowserView,那麼幾乎已經完成了把程式cover-flow化的準備。進Interface Builder弄一個class為IKImageFlowView的custom view,然後把data source (IKImageBrowserDataSource protocol)的兩個必備method換成:

  • - (NSUInteger)numberOfItemsInImageFlow:(id)aFlowLayer
  • - (id)imageFlow:(id)aFlowLayer itemAtIndex:(int)index

就可以了。事實上呢,Apple的API還會耍一下小把戲。當你什麼都不做時,console log會丟給你一個exception,說data source沒有實作 “-flowLayer:itemAtIndex:” 這個method,實際上的名字卻是上述的imageFlow:itemAtIndex: 。

於是就做完了,根據傳統,有圖有真相:

Cover Flow Study

範例程式碼可以從CocoaHeads Taipei Group此處取得

OpenVanilla新模組:聯想詞功能(alpha版)

好久沒用 OpenVanilla 開發新功能了。都說 OV 適合開發輸入法相關功能,如果不拿來善用會有點可惜。

所以就寫了這個:OpenVanilla聯想詞模組

這只是開發版,還有點生。抓下來之後,照著裡頭”How to Install”的說明來安裝,然後把兩個名稱奇異的模組都enable,就可以開始用了。任何單字式的輸入法都可以使用(倉頡、簡易、傳統注音、大易、行列… you name it)

Tiger跟Leopard用的OV,都可以安裝。

No picture(s), no truth. 首先是要 enable 兩個名稱怪異的模組:

OpenVanilla Associated Phrase Module

就大功告成了:

Example of Associated Phrase Module in Action

裡面的詞庫是從酷音詞庫(tsi.src)衍生來的。目前還沒有翻頁功能,不過基本邏輯已經正確囉。

Windows版本,等 key preprocessor 架構完整後,就能支援了。

再度徵求測試:LeopardVanilla 0.8.0.3

晚上發布了新版本的 LeopardVanilla ,請從此處下載

這個版本修正了幾個問題:

  • 最令人困擾的 “Finder當機” 問題(這次不是被輸入法模組害到,而是 OV Loader 本體的問題了),應該已經被修正了(尤其是 PowerPC Mac 常發生這種狀況)。如果您還是遇到「裝完後重開,Finder卡住」問題,請務必再和我們回報,好讓我們找出原因
  • 數字鍵被誤判為輸入碼,而不被當成數字輸出(10.4 用的 OV 無此問題)
  • 在中文介面上無法正確顯示為 “LeopardVanilla” 而顯示成 “OpenVanilla” 的問題
  • 使用了其他語系的鍵盤後,再切回中文輸入法,鍵碼錯亂問題(此修正為 LeopardVanilla 限定)

另外修正幾個問題,目前為 LeopardVanilla 限定。我們也將發布 10.4 用的 OV 與之同步:

  • 反查模組不穩的問題
  • 酷音模組在使用許氏鍵盤配置時,無法使用七個以上選字鍵的問題
  • 偏好設定中,加入酷音「候選字數」設定,沒有正確出現的問題
  • 酷音模組在使用許氏鍵盤時,無法使用 asdfghjkl 連續選字鍵的問題
  • 行列30反查模組加回標準安裝包中

已知問題:

在 LeopardVanilla 上,「使用完偏好設定後,輸入法失效」的問題,仍無法獲得有效解決。我們已經將問題回報給 Apple ,也正在尋找合適的 workaround(避開問題的方法)。在此之前,如果您發現用完偏好設定後,LeopardVanilla 失效,可以試試以下任一種方法:

  • 再進入一次 OV 偏好設定 (在 /Library/OpenVanilla/0.8/Loader/OVPreference.app),然後離開
  • 在 shell 下執行 “killall OpenVanilla”
  • 從 Activity Monitor 中將 OpenVanilla.app (或者是名稱為 LeopardVanilla 的 process) 給停止

要再請大家測試了。謝謝!

徵求測試:針對LeopardVanilla不穩所做的修正

自上週五 OpenVanilla 0.8.0 發布以來,我們已經接到不少關於 Leopard 專用版 (“LeopardVanilla”) 不穩定問題的回報。我們今天發布了新的修正套件,在此徵求測試。請下載本連結所附的檔案,解開後,依據README文件說明,將/Library/Input Methods/中的OpenVanilla.app代換掉(可能要先disable LeopardVanilla並登出才能進行代換,或者在shell進行sudo cp),再重新登入。

目前「初次起動不穩」的問題應能獲得改善。「進入偏好程式修改設定後,輸入法無法使用」的問題也應獲得大幅改善。前者應可算完全解決,後者仍有機會在離開偏好設定後,造成輸入法失靈(解決方法,除了離開現有應用程式,也可試著在shell下打”killall OpenVanilla”)。我們會繼續努力解決後面這一問題。

要請各位朋友幫忙測試看看這一版是否有改進了。謝謝!

« Previous PageNext Page »