vagrant 的後繼者 – otto

主要是看入門指南跟摸索後的筆記。

執行 otto compile 以後,會自動依據所在的目錄去猜測是哪種語言開發的,並且產生以下目錄跟檔案:

  • .otto/
  • .ottoid

.ottoid 應該要加入到版本控制系統裡,這檔案如果被刪除可能會出錯;.otto 目錄下則是放產生出來的檔案:

  • appfile 資料夾裡只有  Appfile.compiled 跟 version 兩個檔案,Appfile.compiled 的格式看起來是 json ,我猜是給 otto 使用的。
  • data
    • 只有 dev_ip 檔案,是放開發環境的 IP 資訊,建議不要編輯
  • compiled
    • infra-xxxxx 資料夾裡的檔案是 terraform 的設定檔,建議不要編輯
    • app
      • build
        • build-node.sh 看起來是建置環境用的腳本,裏面會依據你專案類型去安裝必要的套件,例如 nginx、nodejs runtime、python 等等。
        • template.json 是 packer 用的 template 檔案,裏面就呼叫了 build-node.sh 去安裝必要的套件。
      • deploy
        • main.tf 是 terraform 的設定檔
      • dev
        • Vagrantfile 就開發環境用的 Vagrantfile,這裏面 private_network 的 IP 跟 .otto/data/dev_ip 是一樣的。
      • foundation-consul
        • app-build 資料夾裡放的是 upstart.conf (upstart script) 跟 main.sh 。main.sh 裡自動下載並安裝 consul ,然後產生 consul service description 。除了 consul ,也設置了 dnsmasq。
        • app-deploy 資料夾裡只有 main.sh,就簡單的啟動 consul 服務。
        • app-dev 資料夾裡跟 app-build 一樣有兩個檔案,但 main.sh 裡啟動的 consul 服務是 bootstrap server。這邊的檔案會配置到開發環境裡。
        • app-dev-dep 資料夾裡只有 main.sh ,只有產生 consul service description 跟重新載入 consul 服務。
        • deploy 資料夾裡是 terraform 的設定檔,主要檔案是 main.tf,先不多著墨。main.tf 裡用到的變數則是定義在 variables.tf,看起來這裡是要特別設定的地方。

看起來照預設設定是佈署到 Amazon VPC 上。

執行 otto dev 以後,會開始下載 vagrant box ,這時間有點久,等下載完成會設置開發環境。等到完成以後,使用 otto dev ssh 就可以登入,/otto/foundation-1/ 下可以看到 main.sh ,這些檔案的原始檔是在 .otto/compiled/app/foundation-consul/app-dev 下。

執行你的 web application 以後,開另外一個 terminal,執行 otto dev address 可以看到 IP,接著就可以到瀏覽器輸入 IP:port 看到畫面了。

用 otto infra 就會在 Amazon 上建立 infrastructure。infra 看起來主要是配置 VPC 裡的 gateway、subnet、routing 與資源等等。(目前只支援 AWS)

用 otto build 是會建立 Amazon image ,最後就是用 otto deploy 佈署上去。

在 infra, build, deploy 時,都會問 AWS 的資訊,在問了以後,otto 會存到加密過的檔案裡。如果不想 otto 問這些,也可以預先設置好這些環境變數:AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SSH_PUBLIC_KEY_PATH

一般來說,otto 會自動猜測,使用猜出來的 Appfile,也可以自己手寫 Appfile (完整的 Appfile 說明)。如果有使用到相依的服務,也可以在 Appfile 裡寫 https://ottoproject.io/intro/getting-started/deps.html

otto dev destroy 是清除掉開發環境,otto infra destroy 跟 otto deploy destroy 則是清理 Amazon 上的機器。

Heroku 小記

安裝:wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

在現有的 web application project 目錄裡輸入 heroku create ,這會自動去遠端 (就 heroku) 開一個 app project,然後把 git repository 放到 git remote 裡。
git remote -v 裡會多出一個 heroku ,當你把 master branch push 到 heroku 時 (git push heroku master),就會自動佈署到 heroku 上。
這裡要注意的是 heroku 只認定 master,只有推 master 上去時,才會真正的進行佈署,如果是其他 branch 名稱,heroku 不鳥你。

多台機器開發,我是指一下在 A 機器開發,一下又在 B 機器開發的情況。那這時候怎麼處理 project ?

第1種情況是,直接從 heroku 取得專案:heroku git:clone -a your_heroku_app_name the_directory

第2種情況是,你已經先從你的 git repository 取得專案,那麼這時候就先切換到專案目錄下,再用 heroku git:remote -a your_heroku_app_name 這個指令來自動在 git remote 裡增加一個 heroku 的 remote repository。


安裝資料庫的 Addon

MySQL
Heroku 本身不提供 MySQL,只有合作廠商所提供的 ClearDB,但實質上 ClearDB 就是 MySQL。
ClearDB 有提供4個方案,Ignite 是免費的,雖然免費,但是安裝前,還是要先填信用卡資訊。
安裝方法:heroku addons:create cleardb:ignite
安裝以後,連線字串會放在 CLEARDB_DATABASE_URL 這個環境變數裡,程式只要存取這個環境變數就可以取得連線字串,用 heroku config:get CLEARDB_DATABASE_URL 則可以看到連接字串。
參考這篇文,就可以用本地端的 MySQL Query Browser (MySQL GUI 工具) 連上遠端的 ClearDB。
簡單說,就是從連線字串拆解出 username/password/host ,然後套進去用就可以了。

PostgreSQL
Heroku 預設提供的 database,不過還是要安裝。
安裝方法:heroku addons:add heroku-postgresql:dev
連線字串一樣是在環境變數裡:HEROKU_POSTGRESQL_BRONZE_URL 。

Prometheus

Prometheus 是一個 Monitor 的服務,要收集 host 資訊要搭配 node-exporter,要有 dashboard ,可以搭配 promdash。

而這三者,都有 docker container image 可以下載,但是要怎麼搭在一起,可就讓人傷腦筋了。花了一些時間把他們三個兜在一起,寫成 docker-compose.yml ,這樣就可以用 docker-compose up 直接啟動這三個 container。

過程裡遇到幾個難題:

  1. 沒辦法用自訂的 prometheus 設定:這部份查了老半天,反覆查看 prometheus 的 Dockerfile 以後,確定要 overwrite,所以在 docker-compose.yml 裡,加上了 entrypoint 與 command,其實就是原來的 prometheus Dockerfile 裡的 entrypoint 跟 command,只是 -config.file 這邊修改掉了。
    另外就加掛了自訂的 conf 目錄到容器裡的 /etc/custom 。
  2. prometheus 無法找到 node-exporter:這邊要利用 docker 的 link 在 /etc/hosts 裡插入的主機名稱,不能用 node-exporter 文件裡提到的 localhost ,所以我填入 docker-compose.yml 裡定義的 nodeexporter。

大概就這樣,目前執行結果看起來是沒問題,用一陣子看看吧。另外有在 https://hub.docker.com/u/prom/ 這裡看到不少 container image 可以拉下來組合的,以及 google 的 cAdvisor,有機會再來看看。

後記:實驗結果發現 node-exporter 不適合放在 docker container 裏面執行(跟 node-exporter 對應的,還有一個 container-exporter 專案,是專門收集 container 資訊的),因為會無法收集到關於 host 的資訊,所以 node-exporter 最好還是放在 host 執行,然後讓 prometheus 能存取到。另外,在找關於連結到 host 的部份時,看到有人提報一個 issue 給 docker,建議應該提供一個 –link-host 的功能,讓 container 裏面也能存取到 host,而不需要額外繞路取得。一般的繞路手法是透過 route 取得 gateway 位址,在某些情況下是還蠻麻煩的。

電影流水帳(2015/8/24~2015/9/15)

Elizabeth Olsen
Elizabeth Olsen ,飾演奧創紀元裡,自願去做實驗的異變人姊姊 Scarlet Witch (緋紅女巫)。從 IMDB 的檔案看起來,她是個童星呢,從小就開始演戲,演過不少電影。

  • Avengers: Age of Ultron (IMDB, Wikipedia),台譯:復仇者聯盟二 – 奧創紀元。
    英雄們接到任務,去東歐要從 Hydra 手中搶回 Loki 的權杖,在爭奪的過程裡,他們遇到異變人姊弟 Wonda 與 Pietro,不過還是搶回了權杖。Tony 受到 Wonda 的暗示而強化了內心的恐懼,回去以後,說服其他英雄給他一點時間研究權杖,也說服 Hulk 跟他合作,他們兩人意外弄出了 Ultron ,一個具有高度人工智慧,能在網路活動的反派角色。
    Ultron 不受控制而且十分強大,這件事情導致了英雄們的不合,被 Ultron 打的一蹋糊塗。他們逃到 Hawkeye 家裡去避難,在這段期間,英雄們重拾信心。接著,他們搶回 Ultron 利用 Loki 權杖裡的心靈寶石製作的新身體,Tony 跟 Hulk 利用心靈寶石稍稍改造了這個身體,重新注入混合了 Jarvis 的新人工智慧,新的英雄 Vision 誕生了。
    最後要決戰了,Ultron 試圖讓東歐城市飛到外太空,以殞石撞擊的形式讓地球上的人類毀滅,於是 Ultron 與英雄們展開一場大戰。在 Vision 的幫忙下,他們打趴了 Ultron ,也讓東歐小鎮上的人們安全回到地面,解決這次難關。打敗 Ultron 以後,復仇者聯盟的某些成員離去,新的成員 Vision、Scarlet Witch (Wonda) 與 Falcon 加入團隊,為後續的續集鋪路。
    網路上有一個雷神索爾去找命運三女神的影片,裏面有比較詳細的描述了命運三女神跟索爾說了什麼,電影裡卻只把這段輕輕帶過,我覺得這段還蠻重要的。
  • The starving game (IMDB, Wikipedia),台譯:雞餓遊戲。仿飢餓遊戲的搞笑電影,加了一堆無厘頭的笑點,普普通通,看過就算了。女主角還蠻漂亮的,電影最後有拍攝花絮,還蠻逗的。
  • Matilda (IMDB, Wikipedia),台譯:小魔女。看好幾次了,可是翻以前的流水帳,發現都沒紀錄過…
    這是兩個小女孩的故事,只是一個小女孩已經長大當老師了。Matilda 是個小女孩,父母親只疼愛哥哥,忽略了她的存在。所以她自立自強,自己上圖書館找書來看,自己爭取上學的權利。在極力的爭取下,Maltilda 能上學了,只是學校裡的校長是個刻薄的人,還好有個好老師,Jennifer 。
    說到 Jeniffer 也是個可憐人,父母早亡,校長是她的阿姨或姑姑,成為她的監護人以後,謀奪了她父母給他的財產,長大以後,當了老師。Matilda 與老師一拍即合,在學校經過一段時間相處,Matilda 得知了老師小時候發生的事,而老師也發現 Matilda 很聰明,但家裡不給予重視。就在此時,Matilda 意外發現自己有超能力,而且父親被 FBI 跟蹤盯哨很久了,因此她就設計讓自己的父母罪狀被 FBI 發現,也用魔力嚇跑了校長。最後 Matilda 被老師收養,學校也改歸老師所有,一個快樂的結局這樣。
    飾演 Matilda 的小女孩後來長大沒有繼續走演藝圈這條路,成為了劇作家。
  • 新人皮燈籠。
    為什麼要加個「新」?這是因為 1982 年時,有部電影就叫作人皮燈籠,所以加上個「新」作為區別,從電影海報上看來,兩個故事其實沒什麼關係,一個發生在古代,一個發生在香港的現代。
    阿輝是個倒楣的人,他也不知道為什麼。經過幾番巧遇,才知道跟自己的前世有關係。阿輝的前世是在雄爺手下做事,意外結識了雄爺女人慧姐的師妹小芙蓉,開始交往。交往的過程並不順利,第一個原因是前世是在法律部門服務,到雄爺手下是為了蒐證,第二個原因是他被慧姐看上了。總之交往的過程曝光了,慧姐來找他們倆,發生了意外死了,雄爺殺了阿輝的前世,把他埋在三衰七敗穴,同時也殺了小芙蓉,把小芙蓉的皮剝下來做燈籠。
    知道前因後果並取得大眼光協助,他們從三衰七敗穴取出前世屍骨,阿輝決定至少要救出小芙蓉,就跟雄爺攤牌,想拿回燈籠。雄爺不肯,就開始要火拼了,幸好阿輝之前的朋友去荷蘭找到援兵,嚇阻了雄爺。雄爺跑去警局求助,阿輝單槍匹馬赴會,試圖說服雄爺,但你也知道,故事一定要讓雄爺死的,最後就在警局大打一場,結束了,大眼光也因此受到器重。但可惜,小芙蓉魂飛魄散,沒能順利轉世。
    我覺得故事有點爛尾,前半部鋪陳的很好,到了後面好像是為了趕時間似的,急轉直下,很快的演出復仇戲碼就收尾了,有點可惜。

其實還重看了「末日來臨怎麼伴」,這部電影還蠻能帶給人啟發的,我指的是像 About time 那部電影一樣的感覺,要珍惜時間。

Laravel 5 測試用的資料庫設定

參考這篇來做:How to specify a testing database in Laravel 5?

有打勾的 Best answer 就是了,主要修改部份有兩個,第一個是在 config/database.php 裡,這裡添加給測試環境用的資料庫設定;第二個是在基礎的 TestCase 類別裡,去放置給測試環境用的環境變數。

原理是這樣的,因為 Laravel 應用程式在啟動時,會根據環境變數或是 .env 來決定要啟用哪組資料庫設定,這部份可以在 .env 與 config/database.php 裡看到。所以就可以這樣動手腳來切換,避免 production 與 testing 的資料庫混用。

文章裡有一點是比較不建議的作法,這是我在 Two scoops of Django 這本書上看到的,就是 testing 與 production 的資料庫要一致,不要 production 用 mysql,testing 又用 sqlite 這樣子。畢竟在實際應用時,資料庫的不同仍有可能造成測試結果的不同,那就會導致測試時都沒問題,正式上線時卻出包的情況。

我這邊照著改的時候,有失敗的情況,仔細檢查以後,發現文章裡是用 DB_DEFAULT,而用 Laravel 產生出來的專案框架裡是用 DB_CONNECTION,這邊調整一下就沒有問題了,我猜想可能是 Laravel 版本的關係。

pyenv, IronPython 與 pip

會去追 code 主要是試著解決 Linux 下的 pip 不能用 IronPython 的問題,後來是沒解,但這是在去年年底時看的,我不知道現在是不是已經解決了。

pyenv install -l 這指令,大致做下面幾件事情:

  • 呼叫 .pyenv/plugins/python-build/bin/pyenv-install
  • pyenv-install 又呼叫 .pyenv/plugins/python-build/bin/python-build –definitions
  • python-build –definitions 實際上是把 .pyenv/plugins/python-build/share/python-build 下的資料夾都列出來

因為 IronPython 2.7.5 才支援 pip,想要用 IronPython 2.7.5 (或更新的版本) ,可以這麼做:複製 .pyenv/plugins/python-build/share/python-build/ironpython-2.7.4 為 ironpython-2.7.5,把裏面的下載位址改為 https://github.com/IronLanguages/main/releases/download/ipy-2.7.5/IronPython-2.7.5.zip
這樣子,pyenv install -l 就會列出 ironpython-2.7.5,而且也可以下載安裝。

安裝 2.7.5 以後,用 pyenv shell ironpython-2.7.5 切換為 IronPython 2.7.5。
依照 2.7.5 的 release note 裡去執行 python -X:Frames -m ensurepip 時,卻出現以下的錯誤:

OSError: IronPython.Runtime.Exceptions.OSException: cannot load library 
  at IronPython.Modules.CTypes.LoadLibrary (System.String library, Int32 mode) [0x00000] in <filename unknown>:0 
  at IronPython.Modules.CTypes.dlopen (System.String library, Int32 mode) [0x00000] in <filename unknown>:0 
  at Microsoft.Scripting.Interpreter.FuncCallInstruction`3[System.String,System.Int32,System.Object].Run (Microsoft.Scripting.Interpreter.InterpretedFrame frame) [0x00000] in <filename unknown>:0 
  at Microsoft.Scripting.Interpreter.Interpreter.Run (Microsoft.Scripting.Interpreter.InterpretedFrame frame) [0x00000] in <filename unknown>:0

會有這樣的錯誤,最主要是因為 ironpython-2.7.5/bin/Lib/ctypes/init.py 裡的 436~441 行,這裡是這樣寫的:
[python]
if _os.name in (“nt”, “ce”):
pythonapi = PyDLL(“python dll”, None, _sys.dllhandle)
elif _sys.platform == “cygwin”:
pythonapi = PyDLL(“libpython%d.%d.dll” % _sys.version_info[:2])
else:
pythonapi = PyDLL(None)
[/python]

這邊傳了 None 到 PyDLL,而 PyDLL 裡 (就 353 行) 的 _dlopen() 無法開啟 None ,才丟出這個 exception,有試著加程式處理掉這個 exception,但是,後續會因為這行
memmove = CFUNCTYPE(c_void_p, c_void_p, c_void_p, c_size_t)(_memmove_addr) 而出現 SystemError: LocalAlloc 錯誤

結論,Linux 下,IronPython 還是沒辦法用 pip ,另外就是,我不知道現在修正了沒。

電影流水帳(2015/8/18~2015/8/23)

Abbie CornishAbbie Cornish,算是 Limitless 的女主角,戲份不多。在維基百科上看到她有演過 A good year、 Sucker Punch 等片,但是對她真的沒什麼印象耶~

  • 等一個人咖啡 (IMDB, Wikipedia)。說真格的,這是一部鬼片。
    故事是這樣子的,一開始思螢在社團聽到傳說,得知了有阿拓學長這個人,因緣巧合之下,在一個人咖啡裡遇到並且相互認識。值此同時,思螢也開始看到一個帥哥澤于,發現他一直坐在咖啡廳同個位子。思螢透過在咖啡廳的打工與阿拓,認識了許多人,也得知了這些人身上的故事,有些很感人,有些很搞笑。發生在老闆娘身上的故事很感人,老闆娘年輕的時候找到了對的人,就老闆,畢業後決定一起開咖啡廳,在老闆研發出適合老闆娘喝的咖啡後,發生了意外,被車撞死。老闆娘傷心欲絕,自己一個人苦苦把咖啡廳撐了下來,當作是睹物思人。思螢拿到社團學長姊筆記本後而看到的澤于,其實就是老闆,透過老闆,思螢跟阿拓被湊成了一對。到了後面思螢向老闆告白的時刻,才知道老闆等的是一個能看到他的人,於是決定幫助老闆,讓老闆娘能走出喪夫之痛。最後,阿拓跟思螢在一起了,老闆娘也走出傷痛,就此收尾。
    電影前面半小時,我覺得還蠻有趣動人,但中間的一個小時,就開始悶了,直到最後才又帶來驚喜,嗯,我指的是澤于是鬼的這件事情,整體來說,普普。
  • テルマエ・ロマエII (IMDB, Wikipedia),台譯:羅馬浴場2。又是一個典型續集比初作差的例子。
    基本上沿用第一集的橋段,這次多了一個雙胞胎的戲,就是未來繼任者其實有個雙胞胎哥哥,元老院想利用這個替身,掌握權力,主導羅馬帝國繼續去征服週邊國家。後來就還是透過路西斯才順利解決這次的叛亂。故事裡跟漫畫有些不同的地方是女主角,漫畫裡沒有女主角,電影裡的女主角是讓他作為漫畫作者本人,她因為遇到路西斯,想出整個漫畫而出名。
  • Limitless (IMDB, Wikipedia),台譯:藥命效應。其實已經在第四台看過不少片段,這次算是比較完整的看完。電影是改編自 The Dark Fields 這本小說,小說在台灣好像沒譯本。
    Eddie 是個江郎才盡的作家,這天意外遇到前妻的弟弟,得到了一種神祕的藥物,吃下去以後,發現心思敏捷,突然聰明了一百倍,於是神速的寫完小說交稿。接著開始炒股票、賺大錢。可是後來發現這藥不是一直有效的,要持續服用才行,跟前妻聯絡以後,前妻也勸告他,要他慢慢戒斷才不會死掉。之後,一邊跟企業家 Carl 合作,一邊被黑道勒索,一邊又要克服斷藥危機,他認識到必須解決藥的問題。後來,在跟黑道衝突與跟 Carl 的決裂以後,更加速了 Eddie 的動作。一年以後,他出了書,準備參選議員,Robert De Niro 飾演的 Carl 悄然出現,以藥物作為代價,要求合作。豈料 Eddie 根本就不鳥他,因為已經準備好了,藥物已經戒斷,同時克服了副作用,Carl 只能悻悻然離去。
    我覺得故事本身不錯,還蠻好看的。

另外紀錄一下「特工卡特」,主要就卡特跟 Jarvis 的故事,原來 Jarvis 是 Howard Stark 的管家,短短八集的影集就是交代他們兩人幫忙洗刷 Howard Stark 罪嫌的故事,最後發現是蘇俄方在搞鬼,他們也順利解決,讓 Howard Stark 恢復無罪之身。

截至目前為止,含本篇,共看完 41 部電影。

consul server 的啟動方式

要使用 consul 這個軟體必須要有 server,server 啟動的方式有三種:

  1. 先有 bootstrap server,然後其他 server 再加入,這同時也是 0.4 版以前的作法。所以在啟動 consul 時,必須要指定 -bootstrap 與 -server 參數,或是在設定檔裡指定 {“bootstrap”: true, “server”: true };接著在每個 server 的設定檔裡指定 {“server”: true, “start_join”: [“your_bootstrap_server_ip”] }
  2. 先啟動數個 server,然後手動用 consul join 加入,這是 0.4 版以後提供的方式。官方是建議最好使用 3~5 台的 server,這幾台 server 會在 join 之後,自行投票選出誰當 leader 。啟動 consul 時,要指定 -bootstrap-expect expected_server_number 與 -server,或是在設定檔裡指定 {“bootstrap_expect”: expected_server_number, “server”: true },等到啟動之後,再用 consul join server_1_ip server_2_ip server_3_ip 來加入 cluster。
  3. 用 Hashicorp 提供的 atlas 服務,啟動 server 以後,會透過 atlas 服務,自動做 join 的動作。要使用 atlas,必須先到 atlas 註冊,取得 token。啟動 consul 時,要指定 -server, -atlas, -atlas-token 與 -atlas-join ,或是在設定檔裡指定 {“server”: true, “atlas_infrastructure”: “xxx/yyy”, “atlas_join”: true, “atlas_token”: “your_atlas_token” }

這裏面當然是用 atlas 最方便,除了有提供 Web UI 可以做監控之外,還可以使用 vagrantup 跟 terraform 等來做管理,只是使用這項服務是有代價的,超過 10 個 node 每個月收費 40 美金。

參考資料:

電影流水帳(2015/5/21~2015/8/17)

Bryce Concentrating轉眼差不多三個月過去… (遠目)

Bryce Dallas Howard 是侏儸紀世界的女主角,最讓人津津樂道的,就是她穿著高跟鞋跑完整部電影。

  • Spy (IMDB, Wikipedia),台譯:麻辣賤碟。雖然大致的劇情已經從預告得知了,但這並沒有減損看片的樂趣,故事相當好看。
    Susan 是 CIA 探員,主要負責的是後勤與提供資訊。與 Susan 配合的是 Fine ,Fine 在一次任務中疑似陣亡。Susan 就自告奮勇出任務,局裡另外一個特務 Ford 跟上面鬧翻,自己跑出去跟 Susan 一起調查。調查的過程裡鬧出許多有趣的事情,然後調查的結果也出人意料之外。最後 Susan 還是把這件事情解決了,順利走出她個人生命的新旅程。
  • Jurassic World (IMDB, Wikipedia),台譯:侏儸紀世界。原本以為是重開機的作品,結果故事是延續前三集。遺傳科技公司在事件發生之後,繼續發展,並且把島發展為主題公園,吸引了許多遊客來參觀。但是為了創造話題性,公司持續改造基因,以創造出新品種的恐龍。這次他們用了烏賊、迅猛龍、暴龍等的基因,創造出了帝王暴龍。故事應證了莫非定律,事情永遠發生在你認為不會出事的時間點,突變的帝王暴龍非常聰明,應用自身的特質,突破人類的監控,逃出柵欄。整個島上一片混亂,女主角 Claire ,同時也是島上主題樂園的管理者,她的兩個姪子正好來到島上度假,所以 Claire 很緊張的找了男主角 Owen 來幫忙,一方面想救出姪子,一方面想控制住這個混亂的情況,但事情很難盡如人意,慢慢走向最糟糕的情況,帝王暴龍發現在島上根本可以橫著走,然後朝著人群最多的地方去了。跟 Owen 有關係的軍火販這時候跳出來說可以阻止帝王暴龍,並且想利用這次機會取得 Owen 馴養的迅猛龍,不過,帝王暴龍也有迅猛龍的基金,牠們反而變成同伙,帝王暴龍也殺到人群最多的地方了。至此,事情看起來完全無法控制了啊!!!
    Owen 再次面對迅猛龍,迅猛龍回心轉意,幫忙 Owen;Claire 也放出了島上的暴龍,暴龍與迅猛龍一同對抗帝王暴龍;最終,帝王暴龍被逼到海邊,讓滄龍給吃了。
    這部電影的票房不錯,但我覺得故事普普,而且有蠻多不合理的地方,就當爽片來看就好。侏儸紀系列還是第一集最好看,Tim 爬上高壓電柵欄被電下來那幕永遠讓我膽顫心驚。
  • 道士下山 (IMDB, Wikipedia)。忘了在哪裡看到這部電影的名字,感覺上蠻好看,就看了,看完蠻後悔。
    故事大致分成三個段落,第一個段落是何安下下山遇到崔道寧,並且讓崔道寧收留,在崔道寧這兒,他看到崔道寧的老婆玉珍跟小叔偷情的事情,後來崔道寧被毒死,何安下為崔道寧報仇。這段的問題是玉珍的形象不夠具體,我看不到玉珍偷情的理由,也看不到為什麼她非要聽小叔的話的理由,不過好像也沒有必要一定要一個理由。
    第二段跟第三段是太極門的恩怨,何安下遇上趙心川,趙心川說要打藥酒,隔天在跟師父打鬥後要送給師父。何安下偷偷跟著去看熱鬧,卻發現趙心川師父彭乾吾用了不光明的手段殺了趙心川。之後又遇上彭乾吾兒子彭七子,兩人去某個道觀胡鬧,遇上了師叔周西宇。周西宇是彭乾吾師弟,原本應該繼承太極門的,但為了師門之內的和氣,遠走他鄉,想避開師兄彭乾吾,但不可避免的命運終究無法避免,彭乾吾為了師父秘傳的猿擒術不願意放過周西宇,展開衝突。經過一番決鬥,彭乾吾受了重傷,其子七子拿了槍打了周西宇,周西宇因此受了重傷、傷重不治,臨終前,讓何安下去找他的好友查老闆。跟查老闆見面以後,交代了前事,查老闆決定為周西宇復仇,就婉拒了當地軍閥趙笠人,表明自己不唱戲了。趙笠人是個小氣鬼,因為查老闆不給面子,就跟彭乾吾搭成一伙打周西宇。最後周西宇與查老闆的決鬥,因為父子的親情,查老闆放下了仇恨,收了何安下當弟子,趙笠人被丟到河裡。
    這兩段用了大量的武打特效,看起來是蠻精彩,但其他就….不怎麼樣….

Golang and GVM

Ubuntu 14.04 預載了 Golang 1.2 ,如果想要其他版本的呢?到官方網站去找,會發現根本找不到下載連結。用 ppa 去找,是可以找到這個 golang 1.4 : Jay R. Wren

為了安全起見,還是用 Version manager 好了,Golang 的 Version manager 在網路上可以找到兩個:govm 跟 GVM,目前看起來比較常見的是 GVM。GVM 的安裝可以參考這篇:7 Easy Steps to Install Go (Golang) on Ubuntu

摘錄安裝步驟如下:

  1. bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
  2. 在 .bashrc 或 .zshrc 裡加入 [[ -s “$HOME/.gvm/scripts/gvm” ]] && source “$HOME/.gvm/scripts/gvm”
  3. 新開或重開終端機

使用方法:

  • 看能下載的版本:gvm listall
  • 列出目前有的版本:gvm list
  • 安裝指定版本:gvm install desired_version
  • 使用指定版本:gvm use go1.4.2
  • 其他指令說明,執行:gvm