試裝FireApp

FireApp 是可以試用的,只是網站上只提供付費下載,$14 美金,算是很便宜,想要試用的話,得自行編譯。編譯的步驟不太難,對 ruby/rvm/git 熟的人,應該一下子就裝好了。

以下是我的安裝步驟,我的環境是 Ubuntu 12.04 LTS

  1. 下載 FireApp:git clone https://github.com/handlino/FireApp.git
  2. 下載 submodule:cd FireApp && git submodule init && git submodule update
  3. 解決 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 即可。
  4. 安裝 JDK6/rvm/bundler/rake/gems/nodejs:sudo apt-get install openjdk-6-jdk ruby-bundler rake nodejs ruby-rvm ruby-gems ,nodejs 是給 sass/scss 用的。
  5. 下載 rawr:bundle install rawr
  6. 下載 jruby:rvm install jruby-1.6.7
  7. 切換 JDK 為 1.6,官方建議用 1.6,所以如果用 1.7 的話,得用 update-alternatives –config java 切換;我原本是裝 openjdk-7-jdk,裝完 openjdk-6-jdk 以後,順序有自動調整為 1.6 優先,為了安全,還是檢查一下。
  8. 編譯:bundle exec rake rawr:bundle:linux
  9. 啟動: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 了相關的資料(文章最後的簡報檔)。

  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 就可以了。