我環境是ubuntu 10.04,依照GAEO文件,以easy_install安裝gaeo,可以順利安裝。
但在產生專案時,卻會出現:”OSError: [Errno 2] No such file or directory: ‘/usr/local/lib/python2.6/dist-packages/gaeo-0.5-py2.6.egg/oildrum/static'” 的錯誤。
此錯誤應該與easy_install的EGG有關係,原因是因為少檔案,下載官方的 zip 檔案可以發現以 easy_install 安裝以後的 oildrum 跟 zip 裡的 oildrum 檔案數目並不一樣,也就是說少安裝了。解決方法也很簡單,就把 zip 檔案裡的 oildrum 複製過去即可。
電影流水帳(2011/4/8~2011/4/26)
等後半年有特休的時候,看能不能消化掉比較多的電影債…最近啟動原始碼的片名source code蠻有梗的,例如:
Dilbert: I watched source code yesterday. (我昨天看了source code)
Dogbert: Linux kernel or Android? (是Linux kernel的還是Android的?)
不過 watch 跟 read 在英文上的意思差很多,只要一亮出動詞,就又沒梗了…
- TRON(IMDB, Wikipedia),中譯:創:光速戰記。這是1982年Tron的復刻板本,單就劇情來看,在1982年那個時候,真的是很創新的題材,很令人驚訝的,除了人能進到電腦世界以外,很多部份都還蠻寫實的。但是同樣的劇情放到現在,除了特效之外,好像就沒什麼了…劇情是小男孩的父親在小男孩小時候消失了,一直都沒回來。長大以後去老爸工作的地方看,才知道他真的到電腦世界裡去了,於是就進去看看。進去以後才知道他的父親沒有晃點他,只是因為他創造的程式反叛了他才沒辦法回來,一待之下就待了十幾年。要出來,就要改變,故事就是在講這個,最後當然是出來了,還多帶了一個女人出來,真的是很神奇,讓我想到桂正和的電影少女啊…
- Detective Dee and the Mystery of the Phantom Flame(IMDB, Wikipedia),中譯:通天神探狄仁傑。放中譯的原因是因為大陸那邊的譯名跟台灣不一樣,然後英文片名也頗有趣味。其實故事比較像是推理小說,跟當時的時代背景什麼的,沒什麼太大關係,有應用到的梗,一個就是武則天跟李唐的一些糾葛,一個就是人名。故事編的還蠻好看的,國師真的是跟武則天有很奇妙的關係,兇手竟然是自己的好朋友,最後頗有柳暗花明的感覺,不錯看的電影。
編譯DLR debug version
因為 Pro DLR 有介紹編譯Dynamic Language Runtime debug version的部份,如此一來就可以利用Visual studio來追蹤DLR內部的運作。
下載位置在這兒,目前是1.0版。
假設你是用 Visual studio 2010/Visual studio express 2010的話:
- 如果要在 .Net 4 下debug,開啟 Src 下的 Codeplex-DLR-Dev10.sln。
- 如果要在 .Net 2 (3.5也算)下debug,開啟 Src 下的Codeplex-DLR.sln 或 Codeplex-DLR-VSExpress.sln,開啟以後,會說要轉換。
編譯以後,就可以在 Bin 目錄下找到檔案。
本來想說真不妙,竟然得一個個Project去改Target framework,還去找了人家寫好的Visual studio macro來做,可以是後來發現reference也要改,就暈了。幸好早就有提供.Net 2.0版本的solution檔案了。
電影流水帳(2011/2/23~2011/4/7)
脫逃出現在的世界吧…follow this link…
- Sorcerer’s apprentice(IMDB, Wikipedia),中譯:魔法師的學徒。不難看的電影。一開始就交代了魔法師的故事,一切從梅林開始。梅林在死後,大弟子勾結外面的惡魔法師要搶奪一個咒語,與梅林另外兩個徒弟打起來,後來兩個趁著惡魔法師沒注意,將她封了起來。封起來的代價就是大家都變成俄羅斯娃娃,只剩下尼可演的魔法師。在攸長的歲月裡,俄羅斯娃娃外面因為又封印了許多魔法師的緣故,陸續套上愈來愈多的娃娃。時間很快就到了現代,主角在小時候不小心遇到了魔法師,被梅林的遺物選為繼承者。他不小心放出了大弟子,導致魔法師為了阻止他,自我封印,兩人都到了瓶子裡。時間很快,過了十年,主角長大了,魔法師也因為咒語失效陸續被放出來,然後就展開了訓練、打鬥的過程,最後當然是主角變得很powerful,將壞蛋都收拾掉。主角是一整個弱掉,因為演魔法師的都是大咖,太搶眼了。
- 涼宮ハルヒの消失(IMDB, Wikipedia),中譯:涼宮春日的消失。我是先看過小說才來看電影。電影的節奏有點悶,不過整個氛圍相當微妙,帶有淡淡的愛情感覺,還不錯。故事大致就是照著小說來演,這裡就不破梗了。總之,時間機器的設定真的是很好用啊!!(咦?這樣算破梗嗎?)
gcin筆記(2)
看了 gcin 的程式,覺得頗亂,命名跟檔名是有其規則,例如 pp 是指詞音、pho 是注音、gtab 是亂倉打鳥、倉頡…等,不過,對於要新增輸入法,並沒有 interface讓人知道說該實作些什麼。看到這裡有點想放棄了說~
連線的部份是 socket,但 event 的處理則是用 glib 的 io_channel (g_io_add_watch)。
當 client 第一次跟 server 建立連線,是在 cb_new_gcin_clients(),gcin_clients 在 cb_new_gcin_client() 被配置出來,這邊是在超過預先配置好的 gcin_clients 的時候,才以 trealloc() 去重配置。在一開始如果有太頻繁的client過來(仔細想想,好像不太可能),每次都重新配置,是不太有利的。但是如果改用 g_list 或 g_array 來做,感覺上又不是很划算。
server 收到 client request 的點是在 im-srv.cpp 裡的 cb_read_gcin_client(),裏面會去執行 process_client_req()。process_client_req() 在 im-dispatch.cpp 裡,拿到 fd,直接用之前在 cb_new_gcin_client() 預配置的陣列 gcin_clients 去做判斷、處理。裏面會根據 req_no 再去看要呼叫 ProcessKeyPress()/ProcessKeyRelease()…等函數 (在 eve.cpp 裡)。
參考 anthy 日文輸入法,好像比較好,因為同樣也是外部的library
下面是掃過 eve.cpp 以後,得到的一些東西:
- feedkey_anthy()
- feedkey_anthy_release()
- hide_win_anthy()
- show_win_anthy() => init_in_method() 會用到
- move_win_anthy()
- get_win_anthy_geom()
- anthy_visible() => 給 win_is_visible() 用
- init_win_anthy() => init_in_method() 會用到
- anthy_get_preedit()
- gcin_anthy_reset() => 給 gcin_reset() 用
- flush_anthy_input => 給 flush_edit_buffer 用
看起來是要實作這些部份。
init_win_anthy(): anthy 是用 dlopen 的方式載入,這樣也對,可以省掉一開始不必要的配置。
gcin筆記
gcin輸入法以 INMD 定義,在 gtab-list.cpp 裡載入,從 gtab.list 載入,裏面決定了檔名、方法…
如果要加新酷音,
- 在 method_codes[] 裡增加一個項目, !CHEWING
- gtab.list 裡增加一個新的項目,新酷音 ] !CHEWING chewing.png
- MAX_GTAB_NUM_KEY 也要再加1
- load_gtab_list 一開頭把 method_type 寫死了,所以這邊也要加,inmd[16].method_type=method_type_CHEWING
- 加 method_type_CHEWING
以上從 gcin-setup.cpp 的 cb_default_input_method() 開始追
callback 裡呼叫了 create_gtablist_window(),然後再呼叫 create_model()。從裏面的 add_items() 再看到 load_gtab_list() 而推導的。
從 GtkIMContextClass 的 filter_keypress 開始看: gtk_im_context_gcin_filter_keypress
大致上的架構是這樣子:
gtk_im_context -> gcin client <-> gcin server
eve.cpp 裡的 ProcessKeyPress 是處理 Key 的部份,所以這邊可以看到輸入法的切換、暫時切換為英文、選phrase…等等的處理。
好久沒用Vimana之gundo
因為看到了Gundo.vim,就想說來試用看看。
要安裝 vim 插件,當然就是用 vimana,於是就更新許久未用的vimana。依照vimana的readme,以cpanm來進行重安裝。但是卻無法安裝,cpanm告訴我有 “Can’t locate inc/Module/Install.pm”
太鳥了,去年有碰到此問題,但沒解決,果然有報應,該找出原因的還是該找出來,否則以後一直會遇到。亂找了一下,發現要安裝 libmodule-install-perl 才行,於是就立馬執行了 sudo apt-get install libmodule-install-perl。
接著再來安裝,是說,不知道為什麼,會有Test fail的情況,所以就省略掉測試,改用 cpanm –sudo –reinstall -n “Vimana的目錄” 這樣就大功告成了。
sis162u與ndiswrapper
原本以為linux的硬體相容性很高,至少好幾年前買的Asus USB無線網卡應該是要可以用的,結果,並不是我想的。不支援,就是不支援。
還好知道這支無線網卡的晶片是SiS162U,就上網Google了一下,發現大家都是用ndiswrapper來裝上Windows的驅動程式,然後讓它運作。
我裝的是ndisgtk這個GUI程式,安裝以後,執行ndisgtk,然後安裝sis162的windows驅動程式,就…大功告成了嗎?
不是,因為我用的sis162 windows驅動程式不知道有問題還是太舊,查了好久,後來我是去SiS官方網站抓了最新的105版的驅動程式下來裝,就沒問題了!!
所以碰到只有Windows驅動程式而Linux不支援的時候,可以用ndiswrapper + ndisgtk 試試看,也許就起死回生。
libchewing小記
libchewing的用法挺簡單的,我是先試 python 目錄下的範例,可是即便我把 Init() 裡的目錄改成對的了,還是不行。這邊要傳進去的目錄,要用 libchewing3-data 的安裝路徑,否則Init會出錯。
對照 test/testchewing.c 裡的程式以後,發現沒什麼太大的不同,可是就是不行,反正以後沒有要用 python 來寫,所以就算了。
最後是對照 test/testchewing.c 去寫一個小的程式,就可以運作了,test/testchewing.c 是一個很好的進入點。
讀Debian新維護人員手冊
讀Debian新維護人員手冊記下的:
- 比較版本:dpkg –compare-versions ver1 op ver2
- 添加環境變數到 .bashrc 以供識別:
DEBEMAIL=your.email.address@example.org DEBFULLNAME="Firstname Lastname"
- dh_make 可以快速的從一個 tarball 產生出 tarball 副本跟 debian 目錄,如:dh_make -f ../gentoo-0.9.12.tar.gz
- control裡的內容,如分類、權重…等可參考 Debian Policy Manual
- 可以用 dpkg-depcheck -d ./configure去檢查相依性,或者用 objdump -p foo | grep NEEDED 去看用了哪些 library
- changelog 可以參考Debian Policy Manual, 4.4,是主要定版號的地方。
- rules 可以用 fakeroot debian/rules target 來執行裏面的特定 target
- 可以用 debuild 來自動化,在 .devscripts 裡添加
- DEBSIGN_KEYID=”keyID”
- DEBUILD_LINTIAN=yes
- DEBUILD_LINTIAN_OPTS=”-i -I –show-overrides”
,然後 debuild -sa、debuild clean
- 檢查套件:
- debi xxxx_i386.changes
- lintian -i -I –show-overrides xxx_i386.changes