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

用Python + OpenVanilla寫輸入法

繼Ruby-based OpenVanilla filter module後,OV和script language相關的進展又一彈:用Python撰寫輸入法。

orcas先前先是幫OpenVanilla撰寫了Python-based、可動態載入的filter module。後來又開始研究用SWIG來包裝OV的C++物件,讓Python也可以拿來撰寫輸入法。於是我們有了以下的code

# -*- coding: utf-8 -*-
import sys
import OVIMPython

class PYIMTestContext(OVIMPython.OVInputMethodContext):
  def keyEvent(self, keycode, buf, candidate, srv):
    char = chr(keycode.code())
    buf.append(char).update()
    srv.notify(char)
    candidate.show()
    candidate.append(char).update()
    return 0

class PYIMTest(OVIMPython.OVInputMethod):
  def identifier(self):
    return "OVIMTest"

編譯方法

目前Python-based input method module僅能在OS X上編譯。請先安裝SWIG(可用port安裝),然後使用最新的OV trunk,然後在OVIMPython目錄下,執行 make ; make DSTROOT=~ install 即可將編完的 OVIMPython 安裝到 ~/Library/OpenVanilla/0.7.2/Modules 中。

使用 Intel Mac 的朋友可能得看一下 Makefile 第三行,把中間那一大串關於 PowerPC 的字樣,改成你 build/ 目錄下(會在第一次 make 後出現)的某個名字。如何自動化處理 Makefile 的字串代換會是建立此類型模組的build system的關鍵所在。

Enjoy!

關於接下來的 Cocoa Tuesday

7/10 是星期二,照之前的慣例,是辦 Cocoa Tuesday ,不過一方面因應 OP Café 正在搬家,二方面我也在思考 Cocoa / Mac development 在台灣可以怎麼辦(也許應該併入 HappyDesigner,以後只講 web development,以因應 iPhone ? XD),還有就是想邀請台灣其他的 Cocoa 開發者──甚或是居住在台灣、有從事 Cocoa 開發的外國朋友──,這些在準備上,跟 Ruby Tuesday 「比較馬上就有東西可以講」相比,是的確要花多一點力氣。

所以簡言之,Cocoa Tuesday 再延後一次。也許以後會改成每月一次也未可知。

7/3 (二) Ruby Tuesday 在竹北達利

7/3 (二) 的 Ruby Tuesday,晚上 20:00-22:00 在竹北達利咖啡店。分享的主題為 Markaby 。

竹北達利咖啡店的地點在竹北市建國街37號,電話為03-554-3665。

活動更新:投影片可從這裡下載

Ruby與輸入法的第一步:用Ruby撰寫OpenVanilla filter模組

(更新:目前放入 trunk 的原始碼,還加入了「正體中文用詞轉簡體中文用詞」的功能。先前 OV 的簡繁轉換模組僅能做「字」的轉換,這個 filter 能做簡單的「詞」轉換。使用 script language + regex engine 來寫輸入法相關模組,果然是輕鬆快速許多的)

有時候跟朋友聊天,會有意外的收獲。

最近在研究embedded Ruby,也就是將Ruby放進用C/C++撰寫的程式中使用。其中最重要的計劃,就是想用Ruby來撰寫OpenVanilla的輸入法模組──如果這件事可行,將來撰寫、測試輸入法的難度,又可以比現在再簡單些,同時在演算法設計和資料結構/架構上,也會比現在用C/C++來撰寫來得輕鬆許多。

但是一想到要橋接(bridge)OpenVanilla的輸入法架構,就覺得有很多要先想好的事,有點複雜。

結果因為momizi指出我blog上的錯字,我回應說:「orz… 我需要我的常見錯字filter」──我常把「開催」(日文kaisai,舉辦的意思)寫成「開摧」、「間諜」寫成「間碟」──嗯,OpenVanilla filter不正是OV模組中最簡單的一種嗎?

於是,用Ruby來撰寫OV filter,並以此做為proof of concept的想法就出現了。

是的… 於是我們有了第一個用Ruby寫成的OV模組(更詳細的原始程式碼在這裡):

class OVOFRubyFilter
  def process(str)
    # do some brain-dead, 火星文-style substituion
    str.gsub!(/ㄅ/, "吧")
    str.gsub!(/ㄇ/, "嗎")    

    # fix lukhnos's typo
    str.gsub!(/開摧/, "開催")
    # ...

    # returns the string
    str
  end
end

這個模組目前暫時稱為OVOFRubyBased,裡面使用了embedded Ruby interpreter,會載入一個名為ov_ruby_filter.rb的程式。

只要編譯好這個模組,日後只要修改 .rb 就可以改變 filter 行為。目前的 build system 暫時只支援 OS X 10.4 ,但只要修改 Makefile 應該就能在其他版本的 OS X 或平台上使用(唔,不過 filter 支援,好像目前只有 OS X 版最完整?)。

另外就是,目前還沒辦法像Ruby on Rails的dev mode那麼神,只要一改.rb,行為就改變。這個應該可以當做一個to-do item。

這個proof of concept完成後,接下來則可以著手輸入法的部份,未來還可能架構一整個subsystem,用Ruby來載入一整組名為ov_*_input_method.rb或ov_*_filter.rb的模組群。這樣就可以完全用Ruby來寫輸入法了。不過,如何跨平台deploy,恐怕也會是個大問題。

越來越好玩了。

編譯方法

請使用最新的OpenVanilla原始碼,然後進 trunk/Modules/OVOFRubyBased/ ,執行:

make ; sudo make install

然後開啟新應用程式,啟動OVOFRubyBased這個filter module,就可以開始了。

不想把模組安裝在/Library/OpenVanilla下的朋友,可以把OVOFRubyBased.dylib及OFOFRubyBased/這目錄一併複製到~/Library/OpenVanilla/0.7.2/Modules/下,這樣就可以在不sudo的情況下修改ov_ruby_filter.rb,不過如上所述,每次改完,還是得開新應用程式才能生效。至少還是比需要重新編譯好多了。:)

Ruby Tuesday: 7/3 (二) 在竹北(地點隨後公布)

在暫停了三週的星期二活動後,Ruby Tuesday要重新啟動了。由於 OPCafé 那時正在進行 migration,因此目前預定是在竹北擇地舉行。有興趣的朋友請屆時移駕該地。我會儘快公佈確定下來的地點。

這次的 Ruby Tuesday,我想討論一下 RHTML 模版語言的替代方案,主要是 Markaby 這一套「用 Ruby 來寫網頁」的特異 plug-in,以及關於模版語言的一些思考等等。

同時當天我們也打算 release 新的 Rails plug-in,歡迎大家一同參與。:)

「冬天的太陽幾點落山?」

原來一直在找的台語片《第七號女間諜》(1964)的片斷,在這裡就可以看得到。

感覺上,那時的電影,應該是挺好看的啊。

「關公大戰外星人」

前陣子在電視新聞看到一個 5 分鐘的台語電影專題,然後今天看到這一篇。於是又想到另一個主題。

美國電影有一種隱含的「世界性」,亦即某種「美國即世界中心」的良好自我感覺。根據我上一篇裡面那位唸戲劇的同學說法,最接近美國電影這種「世界性」的是香港:許多電影中所涵括的跨國犯罪、跨國警網、金融操作,讓任何一個文化的觀影者都容易融入其中。與此相對的或許是「地區性」,觀影者如果對一地文化風土歷史沒有瞭解或熱情,是難以進入的。

日本動畫一定程度上也有這種世界性,例如《新世紀福音戰士》(Evangelion)中人類災難的場景與人類的救贖都發生在第三新東京市就是一例(為什麼不是紐約?法蘭克福?或者安塔那那利佛?)

我不知道關公大戰外星人片子裡面在講什麼,但從描述上來看,這其中有一種成為世界性(或世界中心)的企圖。這感覺像是台灣電影不知何時開始就不見了東西啊。

視覺文化與寫實主義

我一般的印象中,日本的視覺文化,對細緻度的要求──用粗一點的話說,就是龜毛與機車的兩個向度──一向是各文化之最。這幾個月因為跟幾個美國人接觸,才發現其實美國的視覺文化在龜毛和機車上,也不遑多讓。

但整體說來,過去(在我這幾個月的接觸前)我總覺得,例如以印刷品來說,美國表現出來的,從來就不是跟德國和日本那樣的細膩。或者說,感覺就是不那麼一樣。

結果早上醒來意外看到《料理鼠王》的廣告,裡面講到了製片過程伊始,團隊如何先去考察巴黎一番。這讓我想到多年前一位後來去唸戲劇的大學同學跟我講的一個論點:「美國的劇場傳統是寫實主義」。這種寫實主義表現在劇場設計上,要求的是每個舞台元素與真實的逼近。舉例來說好了:「一部關於十九世紀末倫敦的電影,怎麼可能出現用Helvetica字體的招牌或報紙標題」就是這種傳統下的代表。

我並不真的那麼確定寫實主義在美國的視覺文化裡扮演的角色。日本的動畫顯然也講求龜毛也機車,但何以兩個文化所表現出在用色上、在物體描繪上,有這麼多結果的差異,還是蠻令人好奇想深究就是。

2007/6/26 星期二活動延後一次

本來預計 6/26 (二) 的 Ruby Tuesday,再延後一次。

James Dempsey and the Breakpoints: “I Love View”

這是星期二時,James Dempsey與The Breakpoints所演出的I Love View。靴子腳++。

« Previous PageNext Page »