- Stolen (IMDB, Wikipedia),中譯:盜數計時。Will 一伙小偷在偷完現鈔以後,被清潔人員發現,Vincent 想要殺人滅口,Will 阻止了他,可是 Vincent 卻被走火的子彈打到腿,Will 去撿鈔票,豈料其他三人卻因為警察快到就先逃走了。Will 逃了一陣,最後還是被逮,手上的一千萬丟到火裡燒掉了。Vincent 跟警察始終相信現鈔被 Will 藏到隱密的地方去了。很快數年過去,Will 出了獄想要修復跟女兒間的感情,然後女兒就被 Vincent 綁架走了,Will 就要去救她,本來要找警察幫忙,警察還不相信,後來只能自己救,可是 Vincent 太兇狠,完全談不攏,就是要錢。Will 只好找昔日的好友 Riley 幫忙,坦白說,這次去偷金塊還真的有創意,拿著高溫的噴槍去燒穿金庫地板,然後熔掉金子,落下的金熔液掉到水裡降溫,就又是金塊,於是順利偷到金子。最後就跟 Vincent 決一死戰,順利救到女兒。普普通通,算還不錯看。裏面的 Malin Akerman 曾經演過 Watchman,這次再度被她煞到。
- 十二生肖 (IMDB, Wikipedia),英譯:Chinese Zodiac。成龍的武打片,從片尾的 NG 鏡頭看的出來,他真的老了,未來不知道還可以演幾片。這部片的劇情普普,還是請把重點放在武打上吧,這次武打有拉到高空去打鬥,算是一個新的嘗試,值得一看。成龍一伙人是專偷古物的團隊,就到處偷古物,然後交給 MP 公司去拍賣以取得高額報酬。這次的古物是圓明園的十二生肖,有個女主角反對偷古物,有個女主角的祖先恰好是去圓明園掠奪的人,成龍一伙是偷古物的人,相互利用、相互得利,後來撕破臉了,成龍一伙良心發現,幫忙去要回被 MP 公司綁的人,大打了一場。之後,全世界看穿 MP 公司的骯髒手法,都不出價買 MP 公司的古物,MP 公司惱羞成怒,就決定把龍首丟到火山口,成龍拼了命去救,從數百公尺高空掉下來,救到龍首。最後就是大團圓的結局,新聞報導的成龍與林鳳嬌抱在一起的畫面,就在此時,不到三秒就閃過去。
試裝FireApp
FireApp 是可以試用的,只是網站上只提供付費下載,$14 美金,算是很便宜,想要試用的話,得自行編譯。編譯的步驟不太難,對 ruby/rvm/git 熟的人,應該一下子就裝好了。
以下是我的安裝步驟,我的環境是 Ubuntu 12.04 LTS
- 下載 FireApp:git clone https://github.com/handlino/FireApp.git
- 下載 submodule:cd FireApp && git submodule init && git submodule update
- 解決 submodule 問題,我這邊有遇到無法取得 tka-serve 的問題,後來是參考 StackOverflow 上的這篇才解決,先
git log --oneline -p --lib/ruby/common/tka-serve 取得第1行的 SHA1 ,然後用 git checkout <sha1>~ — lib/ruby/common/tka-serve 取得 tka-serve 代碼,然後重新執行 git submodule update ,最後 git commit 即可。 - 安裝 JDK6/rvm/bundler/rake/gems/nodejs:sudo apt-get install openjdk-6-jdk ruby-bundler rake nodejs ruby-rvm ruby-gems ,nodejs 是給 sass/scss 用的。
- 下載 rawr:bundle install rawr
- 下載 jruby:rvm install jruby-1.6.7
- 切換 JDK 為 1.6,官方建議用 1.6,所以如果用 1.7 的話,得用 update-alternatives –config java 切換;我原本是裝 openjdk-7-jdk,裝完 openjdk-6-jdk 以後,順序有自動調整為 1.6 優先,為了安全,還是檢查一下。
- 編譯:bundle exec rake rawr:bundle:linux
- 啟動:bin/startJar-linux.sh
覺得好用的話,要記得去購買,讓這個軟體更好。
安裝的心得:
- 原來 rvm 是有點類似 python virtualenv 的東西,可以用來安裝/執行各種版本的 ruby/jruby/rake ,我卡在這邊卡了好久。
- git submodule 要多練習才是。
試用的感想,這比較像是 template 產生器加上即時 web server 的快速專案產生器,有點像是 Adobe 之前釋出的 bracket,bracket 比較偏重於即時就能看到結果,FireApp 的好處是結合 sass/scss 與 RoR 的 template system,在 HTML 的編寫可以搭配 ZenCoding,這樣的組合可以說是如虎添翼。
Firefox 18 的 PDF Viewer
看到新聞說 Firefox 18 已經有內置 PDF Viewer 了,找了選單,卻找不到怎麼開,用開新檔案,只會出現詢問下載位置的視窗。
找了一下,找到這篇 Show PDF inline Test Plan 才發現 Status 標為 Disabled until Firefox 19,所以是已經內置,但是功能沒打開。就心血來潮,在網址列輸入 about:config 找 pdf,果然看到 pdfjs.disabled 被標為 true,就把這個值改為 false,然後重新啟動 Firefox,就可以從「開新分頁」>「開啟檔案」去開啟 pdf 了。
不過,後來我還是把這個值給回復為 true 了,Mozilla 開發小組把這功能 disable 應該是有原因的,就等 Firefox 19 再說吧。
Firefox OS overview and building emulator
前一陣子看到 Firefox OS 的相關文章,發現有提到 adb 之類的指令,我心想怎麼會用到 adb 呢?就去抓了原始碼下來試試看,順便也 Google 了相關的資料(文章最後的簡報檔)。
- 第一步就是要配置 Android 的開發環境,像是 repo、git 等等的。
- 接著就是要抓 b2g ,這是 Firefox OS 的 bootstrap 代碼,用這份代碼可以幫你抓真正的原始碼,並且進行編譯:git clone git://github.com/mozilla-b2g/B2G.git
- 執行 ./config.sh 可以看到支援的裝置,我是選用 emulator,所以輸入 ./config.sh emulator-x86 ,這個步驟會耗時很久很久,因為會用 repo/git 去下載檔案。
- 下載完成,就可以用 ./build.sh 進行編譯,我在編譯的過程中遇到幾個比較麻煩的問題:
- 少了 libGL 與 libX11 :這要參考 Firefox OS build prerequisites 的說明,我是用 Ubuntu 12.04,所以要做 ln 的動作。
- 編譯 gecko 時,librt 找不到:看了gecko 才知道這邊是用 prebuilt/toolchain/i686-android-linux-4.4.3 在做編譯,而 i686-android-linux-4.4.3 下並沒有提供 librt ,所以就會出現錯誤,我是把 gecko/nsprpub/pr/src/Makefile.in 裡的第 133 行註解掉,也就是避免加上 -lrt 來解決,幸好之後可以順利編譯通過。
- 少 package,印象中就只有 yasm,有缺的話,就參考前面提到的 prerequisites 跟錯誤訊息來安裝吧。
- 接著就可以執行啦:./run-emulator.sh
看源碼以後,我發現有很大一部分是直接使用 Android 現有的成果,也就是說,在硬體的驅動程式方面,Android 如果有現成的,是可以直接搬過來用的;Build system、音效、繪圖核心、init 等等幾乎都一樣,對於 Android 底層開發者來說,應該是不會陌生才對。接下來應該就是要看硬體廠商對 Firefox OS 的接受度以及消費者的接受度了。
電影流水帳(2013/1/1~2013/1/8)

聖光啊,轉眼就 2013 了呢~
你一定想不到這張照片裡的女主角就是飾演 Salander 的人吧~
- The girl with the dragon tattoo (IMDB, Wikipedia),中譯:龍紋身的女孩。在兩年前我抱著這本小說,欲罷不能地把它看完,對於這部電影,我認為拍的中規中矩,該帶的重點都有帶到,只是感覺上跟兩年前在書裡感受到的不太一樣就是了。Salander 是社會邊緣人,專長是 hacker 跟調查;而 Blomkvist 是一個因為揭發真像而被告毀謗的雜誌主編,這場官司讓 Henrik Vanger 注意到他,而找他來幫忙調查數十年前家族所發生的失蹤事件,整個事件在 Blomkvist 與 Salander 的調查之下,終於還原當時的情景,原來這不只是失蹤事件,還是一件亂倫與連環謀殺事件,最後找到 Henrik 所喜愛的孫女 Harriet 。我記得 Harriet 是在澳洲才對,她經營了一個好大的農場還有了一個兒子,電影裡卻是在倫敦找到,難道是我記錯了?
- Brave (IMDB, Wikipedia),中譯:勇敢傳說。故事很簡單,媽媽要女兒以和親方式來讓王國團結,女兒不爽,跑了出去,結果碰到巫婆,巫婆給了她魔咒。豈知這魔咒讓媽媽變成了熊,對熊恨之入骨的爸爸當然是不能坐視,於是女兒跟熊就逃了出去,尋找給他魔咒的女巫。女巫跑出去參加藝術祭了,只留下了可能可以解開魔咒的訊息。經過一段時間的相處,媽媽跟女兒開始相互體諒,化解開了之前的溝通障礙,想說應該是把被劃破的地毯補上就可以,就決定要一起偷偷溜回去。溜回去以後,女兒出現說明合作的重要,應該要讓年輕人自己抉擇愛情云云的,終於讓王國內的其他三大勢力摒棄成見。在回到樓上要補地毯時,爸爸發現了熊,就展開追殺。追殺到最後的千鈞一髮之際,解開了魔咒,大家過著幸福快樂的日子。不難看,只是跟之前 Pixar 的作品比起來,少了點說不出來的東西,我還是最喜歡超人特攻隊跟怪獸電力公司的故事,在迪士尼頻道看到時,總是會回味再三。
libchewing 與 mingw
試著要編譯 libchewing,首先下載 libchewing 0.3.4,參考裡面的 README 去搭建編譯環境。
libchewing 是用 mingw 來編譯,所以就請下載 mingw installer 來安裝,安裝時,記得選 C Compiler 與 MSYS Basic System。安裝完成以後,打開命令提示字元,輸入 C:\MinGW\msys\1.0\msys.bat 進入 msys 開發環境,然後輸入 mingw-get install automake autoconf libtool 以安裝 automake, autoconf, libtool
安裝完了,切到 libchewing 解開以後的目錄下,輸入 ./autogen.sh 產生 configure,好了以後,再輸入 ./configure。我在這邊踢到鐵板,./configure 會出現問題,參考 config.log,我認為是 mingw 問題,就試著用一個簡單的 hello.c 來看能不能編譯,結果不行,說 stdio.h 找不到,stdio.h 找不到耶,這實在是太扯了。
試著用 mingw-get 裝上 g++, m4, w32api,mingw32-make …等等的套件,都不行。試著去找 stdio.h,c:\mingw 下能找到的幾個 stdio.h 也都不在 gcc 標頭檔的搜尋路徑裡。百無聊賴之下,就用了 mingw-get update 去更新套件資訊,再用 mingw-get upgrade 更新,很神奇的事發生了,hello.c 編譯通過,也可以找到 stdio.h 了。
回頭再用 ./configure ,就順利產生了 Makefile,再用 make ,libchewing 就編譯成功了!
電影流水帳(2012/12/25~2012/12/31)
圖片出處:malena rubinkas1
Nicole Kidman 在 Trespass 裡還是很有魅力。今年共計看完 58 部電影,平均每週一部,比去年多了不少。今年的遺珠之憾是 Sky fall 與 Batman The Dark Knight Rises,來年補完。
- The Dictator (IMDB, Wikipedia),中譯:大獨裁者落難記。故事很簡單,就是以石油發跡的北非小國國王為主角,這個國王很妙,仗著自己有錢有勢在亂搞,直到有一天,聯合國決定要針對核武來制裁了,就請他到紐約說明。豈知到紐約之後,他的叔叔發難,找了替身來取代他,而他則幸運從殺手手下逃過一劫。可是他的鬍子被刮掉,完全被無視,只能流落街頭。他很幸運,遇到了傻大姊 Zoey(Anna Faris) 幫了他一把。然後他也遇到了之前被他抹殺的核武科學家,原來他說抹殺,其實人並不是真的被殺,而是被偷渡到國外去。他跟科學家達成協議,讓科學家幫他復位計劃。經歷一連串歷險之後,最後在聯合國發表了感人的演說,說服了聯合國的人。結果國家還是沒有成為民主國家,仍然是獨裁,但他的想法改變了,讓國家能繼續持盈保泰。整部片諷刺了很多事情,也很有笑點,裏面有一張跟阿諾合照的照片,特別讓我印象深刻。
- Trespass (IMDB, Wikipedia),中譯:非法入侵。故事很簡單,就是強盜冒充警察進屋子裡搶劫,由兩大巨星 Nicole Kidman 跟 Nicolas Cage主演。簡單的故事裡,刻意加入一些衝突的元素,像是妻子與搶匪 Jonah 的出軌糾葛,Kyle 對於妻子可能出軌的刻意默許,搶匪的兄弟內鬨,搶匪內的不合等等,可是整個湊起來就是卡卡的。Kyle 是刻意默許的,他其實早已經破產,一心求死,想靠保險金,讓妻女能繼續衣食無憂地生活下去。Sarah 則是深宮怨婦,丈夫忙於工作,都不鳥她,這才讓 Jonah 會錯意,以為有機可趁。搶匪哥哥則是被弟弟設計,想做筆大的,結果毒品卻被弟弟串通人搶走。弟弟是為了 Sarah ,才設計哥哥,讓他迫不得已要去搶 Kyle 一家人。後面 Sarah 莫名其妙的一直要救,Kyle 一直要她走,最後落幕在搶匪都死的差不多,警察來救的地方,落幕的莫名其妙。
在 Ubuntu 12.04 上編譯 monodevelop (1)
環境是 12.04 LTS,想編譯 monodevelop,首要就是去 github 把源碼拉下來,拉下來以後,還要執行 git submodule update –init –recursive 更新 submodule。
需要安裝的套件有:
- autoconf
- automake
- mono-gmcs
- libgtk2.0-cil-dev
- libmono-cil-dev
- libgnome2.0-cil-dev
- libgconf2.0-cil-dev
- mono-dmcs
- libmono-addins-cil-dev
- libmono-addins-gui-cil-dev
- libvala-0.12-dev
- mono-xbuild
不囉唆,用 apt-get install 裝上就是,接著下 ./configure –profile=all –prefix=/opt/monodevelop 產生 Makefile,然後開始編譯,原本以為應該沒問題了,豈知出現錯誤:
MonoDevelop.AspNet.Mvc.Completion/RazorCompletionTesting.cs(30,26): error CS0234: The type or namespace name `Mvc’ does not exist in the namespace `MonoDevelop.AspNet’. Are you missing an assembly reference?
MonoDevelop.AspNet.Mvc.Completion/RazorCompletionTesting.cs(33,26): error CS0234: The type or namespace name `Mvc’ does not exist in the namespace `MonoDevelop.AspNet’. Are you missing an assembly reference?
MonoDevelop.AspNet.Mvc.Completion/RazorCompletionTesting.cs(35,26): error CS0234: The type or namespace name `Mvc’ does not exist in the namespace `MonoDevelop.AspNet’. Are you missing an assembly reference?
MonoDevelop.AspNet.Mvc.Completion/RazorCompletionTesting.cs(135,52): error CS0246: The type or namespace name `RazorCSharpEditorExtension’ could not be found. Are you missing a using directive or an assembly reference?
MonoDevelop.AspNet.Mvc.StateEngine/RazorParsingTests.cs(32,26): error CS0234: The type or namespace name `Mvc’ does not exist in the namespace `MonoDevelop.AspNet’. Are you missing an assembly reference?
MonoDevelop.AspNet.Mvc.Completion/RazorCompletionTesting.cs(127,48): error CS0115: `UnitTests.MonoDevelop.AspNet.Mvc.Completion.RazorTestingParser.Parse(bool, string, System.IO.TextReader, MonoDevelop.Projects.Project)’ is marked as an override but no suitable method found to override
MonoDevelop.AspNet.Mvc.Completion/RazorCompletionTesting.cs(137,67): error CS0246: The type or namespace name `RazorCSharpParsedDocument’ could not be found. Are you missing a using directive or an assembly reference?
看起來是少了 Mvc 這個 namespace,可是我已經有安裝 libmono-system-web-mvc2.0-cil 了啊,怎會這樣子?
經過追蹤以後,發現跟 Mvc 沒關係,而是編譯到 main/src/addins/AspNet/MonoDevelop.AspNet.Mvc 時,這邊說少了幾個 .dll 檔案,csprojet 裡有試著加上 ProjectReference ,可是仍然有出現錯誤。我想應該是 .csproj 問題,Makefile 裏面是寫用 xbuild 來編譯 .csproj 檔案,產出的 dmcs 指令,有很多 /reference 參數,而有問題的這幾個 .dll ,路徑都是直接寫死到 /usr/lib/monodevelop 下,真的是怪了,而在 .csproj 裡又找不到這些設定。
電影流水帳(2012/12/15~2012/12/24)
怒戰天神裡的公主 Andromeda 真的好面熟(Rosamund Pike),特別是她古代軍裝的打扮,英挺、漂亮,好像曾經在哪兒看過呢,看到後來才想到,她是不是有演過魔戒啊?可是去她生平裏面看,卻又沒發現有演過這部片。
- Wrath of the Titans (IMDB, Wikipedia),中譯:怒戰天神。Perseus 只想過平常人的生活,可惜人在江湖,身不由己。這一天,Zeus 來找他,說神的末日快到了,到時候會需要你的幫忙。Perseus 淡淡的說,我只是個半神,哪有這能力呢?Zeus 說,你可以的,別貶低你自己。之後 Zeus 去跟 Poseidon 會合,要一起去找 Hades,豈料兩人中了 Ares 與 Hades 的埋伏,Zeus 被抓住,Poseidon 勉力逃回,去找了 Perseus,叫他要幫忙,需要幫忙的話,他的半神兒子 Agenor 會幫忙。原來 Hades 跟 Ares 被囚禁在深淵的 Kronos 誘惑,想要取得更多的權力,才籌畫了這次的叛變。而 Perseus 經過一番掙扎以後,聽 Poseidon 的話,去找了被 Andromeda 抓住的 Agenor,講了好一會之後,Andromeda 就決定放人,條件是要一起去。所以一群人就去找了火神,得知了進地獄深淵的路,然後就去救人了。最後是 Hades 被 Zeus 說動,幫了 Zeus 的忙,而 Perseus 也湊齊了三神器,組合出超強神兵,解決了 Ares 跟 Kronos。
- 奪命金 (IMDB, Wikipedia),英譯:Life without Principle。在前面真的有悶到,但劇情到了中間的時候,整個就超展開,故事串到了一起。Teresa 掙扎了好一會兒,決定取走原叔留下的 500 萬,所以她忍耐,當了最後一天的理財專員,到晚上遞出了辭呈,拿著 500 萬遠走高飛。而豹哥則是傻人有傻福,誤打誤撞的拿 500 萬多賺了不少錢。本來看到一半就不太想看了,但看完真的覺得不錯。任賢齊本片沒什麼發揮,被何韻詩與劉青雲的演技蓋掉了。跟朋友聊的時候,說好可惜,最後兩人還是被抓了,朋友卻說,有嗎?才知道有兩個版本,在大陸上映的版本,順應當局要求,加了兩人被逮到從輕量刑的說明畫面,而其他地區的則沒有,兩人順利拿著錢走掉。
- Source Code(IMDB, Wikipedia),中譯:啟動原始碼。Colter 一開始就在火車上,完全搞不清楚爆炸,然後沒多久火車就爆炸了。唰地,一下子拉回到一個類似太空艙的地方,突然 Goodwin 跟他對話,沒多久又被出現火車上。重覆了幾次以後,他開始搞清楚狀況,原來是要找出炸彈與炸彈客,而他則早在兩個月前在阿富汗殉職,身體殘破不堪,只留下部分器官的機能仍在原始碼計畫中運作。最後他查到了炸彈客是誰,並告知了現實中的 Goodwin,博士本來是要毀約,不讓他就這樣死去,但 Goodwin 幫了一把,這次 Colter 重回到火車,留下一個完美的結局,炸彈被拆掉、炸彈客被鎖起來,所有的乘客都很歡樂,而他也順利把到很迷人的 Christina。現實中的他被拔管死去,但最後一段似乎是在另外一個平行世界裡,Colter 找到炸彈客,並與 Goodwin 連絡上,這樣。Christina 是由之前演過 Eagle eye 的 Michelle Monaghan 所飾演,在這部電影裡顯的好有魅力,也難怪 Colter 會對她念念不忘了。
以下是萬一拿到5百萬的作戰計畫:
- 五百萬可以分批換成旅行支票或請銀樓匯到國外戶頭。
- 要取得假身分,這個假身分要拿來開國外戶頭,並且作為旅行身分之用。
- 交通上要儘量透過公車、火車之類的交通工具,以短程的方式甩開追查。要搭飛機的話,得先飛較近的國家,再飛遠程,但搭飛機的話,要配合假身分,風險較高。
- 要放的下家人。
xdg-utils, nautilus 與 nemo
因為想知道怎麼把 nautilus 改為 nemo,就開始追代碼了。主要是先從 xdg-open 開始,因為 xdg-open ~ 就可以叫出檔案總管並把位置帶到家目錄。
我忘了是怎麼知道 xdg-open 這指令的了,這指令就相似於 Windows 的 start 指令,Windows 的 start 是這樣,只要打 start xxx.doc 或是 start http://www.google.com.tw 就可以自動打開相應的程式,像 xxx.doc 就會開 MS Word,網址就會開瀏覽器。xdg-open 也是一樣,輸入 xdg-open xxx.doc 就會用 Open Office 或 LibreOffice 開啟 xxx.doc,以此類推。
xdg-open 是由 xdg-utils 所提供,是用 perl 寫的,再看裏面,會發現程式會根據目前的桌面環境來自動決定要呼叫哪個桌面環境的 open 程式來開啟指定檔案或位置。GNOME 就是 gnome-open,KDE 就是 kde-open,XFCE 就是 exo-open,LXDE 就是 pcmanfm,不一樣的情況可能會改呼叫 gvfs-open, kfmclient 等等的。
所以在 GNOME 環境下打 xdg-open 或 gnome-open 是一樣的。那 gnome-open 又是怎麼做到的呢?gnome-open 是收錄在 libgnome 裡,source code 可以在這裡看到 git.gnome.org/browse/libgnome/tree/libgnome/gnome-open.c ,程式很短,就先判斷檔案的位置,然後就呼叫 glib gio 的 g_app_info_launch_default_for_uri 進行啟動。再更深入,就沒有細究了,總之是根據 GNOME 內建的 MIME 對應來得知該使用哪個程式的。
記得有可以編輯 MIME 的程式,就可以去改,但我忘了程式的名字,一時在系統設定裡也找不到。最後是用了 ubuntu-tweak 來做修改,就把 nautilus 改為 nemo 了。

