Firefox OS overview and building emulator

前一陣子看到 Firefox OS 的相關文章,發現有提到 adb 之類的指令,我心想怎麼會用到 adb 呢?就去抓了原始碼下來試試看,順便也 Google 了相關的資料(文章最後的簡報檔)。

  1. 第一步就是要配置 Android 的開發環境,像是 repo、git 等等的。
  2. 接著就是要抓 b2g ,這是 Firefox OS 的 bootstrap 代碼,用這份代碼可以幫你抓真正的原始碼,並且進行編譯:git clone git://github.com/mozilla-b2g/B2G.git
  3. 執行 ./config.sh 可以看到支援的裝置,我是選用 emulator,所以輸入 ./config.sh emulator-x86 ,這個步驟會耗時很久很久,因為會用 repo/git 去下載檔案。
  4. 下載完成,就可以用 ./build.sh 進行編譯,我在編譯的過程中遇到幾個比較麻煩的問題:
    1. 少了 libGL 與 libX11 :這要參考 Firefox OS build prerequisites 的說明,我是用 Ubuntu 12.04,所以要做 ln 的動作。
    2. 編譯 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 來解決,幸好之後可以順利編譯通過。
    3. 少 package,印象中就只有 yasm,有缺的話,就參考前面提到的 prerequisites 跟錯誤訊息來安裝吧。
  5. 接著就可以執行啦:./run-emulator.sh

看源碼以後,我發現有很大一部分是直接使用 Android 現有的成果,也就是說,在硬體的驅動程式方面,Android 如果有現成的,是可以直接搬過來用的;Build system、音效、繪圖核心、init 等等幾乎都一樣,對於 Android 底層開發者來說,應該是不會陌生才對。接下來應該就是要看硬體廠商對 Firefox OS 的接受度以及消費者的接受度了。

電影流水帳(2013/1/1~2013/1/8)

Rooney Mara
聖光啊,轉眼就 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 KidmanNicolas 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)

_MG_9578

怒戰天神裡的公主 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 了。

Upgrade Subversion to 1.7 in CentOS5

也忘了是從什麼時候開始,在更新時,就一直遇到 subversion-perl 無法升級的問題,說需要 subversion 1.7,可是 CentOS 裡包的是 subversion 1.6,而這個 subversion-perl 是 rpmforge 提供的。

拖了好久,在更新時都以 –skip-broken 避開,可是日子久了,總是會覺得這樣很麻煩,決定還是設法把 subversion 升級到 1.7。當然自己編譯當然是可以,但上上策當然還是有人打包最好,所以上網搜索了一下,就發現有人問,而答案是利用 WANdisco 提供的 yum repository。WANdisco 比較麻煩的是,如果你要下載,網站會要求你輸入資料,然後才寄給你 .repo 檔案。收到 .repo 檔案,就放在 /etc/yum.repos.d ,接著執行 sudo yum update 就可以了。

電影流水帳(2012/12/7~2012/12/14)

Dania Ramirez naked
照片是 Premium Rush 的女主角。

  • Premium Rush(IMDB, Wikipedia),中譯:特急快遞。電影的主線是男主角 Wilee 幫 Nima 送一個對 Nima 很重要的票,副線穿插的是 Wilee、Venessa、Manny 三人的揪葛跟 Wilee 與警察間的衝突。整個故事採輪段倒敘的手法來拍,一開始是 Wilee 的車禍,接著交代前面的故事,像是 Nima 為什麼要搬家,為什麼要請 Wilee 送這張票給張大姊,警察 Monday 欠下巨債而決定幫黑道去找 Nima,Venessa 為什麼找 Manny 幫忙等等的。最後當然是皆大歡喜,讓 Nima 的兒子能順利透過人蛇集團的偷渡到美國,還不錯看,晚點我要問妹妹,看紐約是否真的有此行業。
  • The Bourne Legacy(IMDB, Wikipedia),中譯:神鬼認証4。故事很緊張刺激,不過一開始我不太懂為什麼 Aaron 一開始是在阿拉斯加,之後就是因為藥的實驗而開始一連串的追殺與逃跑,整個絆腳石計劃的人都因為 Jason Bourne 的失控,讓 CIA 決定計劃中止,將參與計劃的人都一一殺死。Aaron 是牛人,怎麼殺都殺不死,並且找到並救了 Dr. Marta ,讓她來幫他解除必須持續用藥的限制。片子的最後,他們兩個逃過死神的追擊,到了海上,看起來是還會有個三部曲。

raspberry pi 的聲音

我是用 HDMI 接電視,我有參考過這篇:Raspberry Pi測試音訊介面 了,但還是沒有聲音,爬文以後,發現是要在第一個 partition 的 config.txt 裡去設定 hdmi_driver=2 (如果是在 raspberry pi 上,是在 /boot/config.txt ),設定完,重新開機就可以用 aplay 來播放聲音檔案了。

目前還需要解決的問題有:

  • 無線網路卡
  • 鍵盤+滑鼠+無線網路這樣會導致電力不足的樣子。