rails 101 練習(1)

一兩年前就買了Rails 101,只翻了一點點,就擱下了。 最近朋友也買了,正在練習,因為他是 Linux 新手,就撞了蠻多牆,問了我不少問題,是故,我也跟著看和做了一次。我的環境是 Ubuntu 12.04。

  1. 安裝必要的套件:sudo apt-get install build-essential zlib1g-dev libssl-dev libreadline-dev libmysqlclient-dev libbuilder-ruby
  2. 安裝 rvm:curl -L https://get.rvm.io | bash -s stable –ruby ,這是用 curl 抓取 script 內容,並且導向到 bash 去執行,-s 表示 script 會從 stdin 來,stable –ruby 是給 script 使用的。
  3. 初使化 rvm 環境:source .rvm/scripts/rvm ,這行很重要,之後重新開 terminal 時,都要確定有導入 rvm 環境,要不然會有錯誤。
  4. 安裝 ree:rvm install ree ,然後設為預設: rvm ree –default 。(rvm 可以安裝不同版本的 ruby,像 jruby, ironruby, ruby 等等的,很方便)
  5. 新增 ~/.gemrc,內容是 gem: –no-ri –no-rdoc ,這樣之後 gem install 時,就不產生 doc 檔案,這部份是參考 Ruby on Rails 實戰聖經裡的建議做的。如果不加這個,會撞到牆,說文件產生不出來,需要安裝別的套件才可以。有在另外一台電腦上試過,要先 gem install rdoc-data,再 rdoc-data –install ,應該就可以。反正暫時不會用到 doc,不如就不安裝。
  6. 安裝 rails:gem install rails -v=3.0.7
  7. 安裝 mysql gem:gem install mysql
  8. 書裡提到不要用預先編譯好的 Imagemagick,而要自行編譯,沒說原因。這步驟我跳過了。
  9. Apache 跟 POW 我也都跳過了,目前是練習,所以先用 rails server 頂著就好。
  10. 建新專案跟檢查:rails new forum_demo && cd forum_demo && bundle check && bundle install
  11. 啟動 web server:rails server ,然後開啟瀏覽器,網址輸入 http://localhost:3000 就可以看到頁面。
  12. 新增 controller 跟頁面,就是照書上講的,會碰到狀況的,就是要先刪除掉 public/index.html,這樣才會出現新增的頁面。原本沒注意到要刪除,我想說因為是 pages controller,就用 http://localhost:3000/pages/welcome ,理論上應該會看到,結果卻說 route 未定義,應該是還有地方沒設定吧。

今天先做到這裡為止。

電影流水帳(2013/1/16~2013/1/20)

michelle rodriguez.JPG

  • Resident Evil: Retribution(IMDB, Wikipedia),中譯:惡靈古堡5-天譴日。還好沒去電影院看這部片,真是爛透了,整部片就是一直槍戰,沒什麼故事可言。片頭一段無意義的倒帶,是延續上一集最後他們在船上被襲擊的劇情,反正,Alice 掉到海裡,被 Red Queen 逮住,關在蘇聯在北極的海底秘密基地裡。突然基地的裝置被駭客入侵,門被打開,Alice 穿上裝置殺出一條生路。之後遇到 Ada (就李冰冰),原來 Ada 是來救他的,而外面也有人做外應,於是就開始一場亂七八糟的殺戮,殺到要救出小女孩,還有遇到感覺上是來硬湊的,第1集就掛掉的 Rain 。在預謀好的爆炸之下,他們逃出,可是 Rain 跟 Jill 開了潛水艇,浮出冰面阻擋了他們的去路。於是就在冰面上展開大戰,打了好一陣子,Jill 擺脫了 Red Queen 的控制器,並幫 Alice 讓 Rain 下了海,總算,成功的逃離。可是這個時候,世界上已經被殭屍控制,Wesker 派 Ada 等人去救 Alice,原來是要 Alice 幫保護傘公司進行抵抗行動,請期待第六集。
  • 人在囧途(IMDB, Wikipedia),英譯:Lost on journey。這是在遊覽車上看完的,很有趣的片子。這是講春節返鄉的故事,李成功是大公司總裁,牛耿則是牛奶公司的資深工人,一個要回長沙家,一個要去長沙討債,於是在機場遇到了。豈料牛耿是個烏鴉嘴,於是飛機被迫返回出發的機場,他們改搭火車、汽車等交通工具回長沙,沿途發生了很多的事情,這些事情讓李成功與牛耿對於人生有了不同的看法。這部片還有續集,叫人在囧途-泰囧,有機會再找來看看。

電影流水帳(2013/1/9~2013/1/15)

Malin Åkerman

  • 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

  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 裡又找不到這些設定。