pixnetalbummaker(2)

GAEO 0.5 beta用的不順,再加上開發已經停止,所以還是用回文件相對比較多的0.3版。

之前從trunkly-python抄來的代碼不太適用於PIXNET API,所以稍做了改動,原本是這樣使用的:

print( pixnet.get_users_elleryq() )
print( pixnet.get_album_sets( {'user': 'elleryq' }) )

現在得這樣用:

print( pixnet.get_users( "elleryq", {} ) )
print( pixnet.get_album_sets( parameters={'user': 'elleryq' }) )

是說,應該要好好來研究一下cross domain的xmlhttp,這樣根本就不用寫後台了,直接呼叫PIXNET API就好~

歡樂智多星的機率隨想

歡樂智多星是胡瓜在衛視中文台主持的節目,遊戲的規則是,參加的人有30萬,每關有3個選擇,然後可以選擇全部押在一個答案上,或是分散,只要過了五關,剩下的錢就你的。
先不考慮最低的押注是1萬的這個規則。最早的規則是可以把錢分散在3個答案上,所以這樣子的機率是 (1/3) ^ 5 = 1/243,最近看的時候,發現節目修改規則了,變成你只能把錢分散在兩個答案上,看起來過關機率降低了,但是實際上,只要排除掉不可能的那個答案,然後平均分散押注在另外兩個答案的話,這樣子機率是 (1/2) ^ 5 = 1/32,反而提高了!!
現在在加上最低押注是一萬的規則。如果把錢分散在3個答案上,押注金額較多的又剛好過關,那麼,

  1. 10萬:10萬:10萬
  2. 4萬:3萬:3萬
  3. 2萬:1萬:1萬
  4. 孤注一擲
  5. 孤注一擲

同樣的情況,但只能把錢分散在兩個答案上,這邊再加上一個都會過關的假定:

  1. 15萬:15萬:0
  2. 8萬:7萬:0
  3. 4萬:4萬:0
  4. 2萬:2萬:0
  5. 1萬:1萬:0

從上面的分析看來,參賽者不再一定需要知道正確答案,也就是你可以什麼都不知道,在此情況時,嚴格執行排除最不可能的答案,並且把錢平均分散在其他兩個答案上,這樣最後至少可以得到一萬元。相較之前的規則,在第四次以後就只能孤注一擲的情況來說,節目的新規則把勝率提高許多。

pixnetalbummaker(1)

我環境是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 試試看,也許就起死回生。