高見龍

iOS app/Ruby/Rails Developer & Instructor, 喜愛非主流的新玩具 :)

Ruby Certified Programmer

今天下午我去參加了Ruby的認證考試,運氣不錯,過了。 image

為什麼要去考這個?

其實當初目的很單純,只是想說即然我現在也都有靠Ruby在吃飯了,再加上這天剛好我要外出一整天在台北市閒晃,就報名順路去考了。

報名

Ruby Association的網站可以找到相關訊息以及報名方法,台灣幾家比較大的電腦補習班都可以考。

考試時間是90分鐘,共有50道選擇題(單、複選都有)。英文出題,滿分100分,75分才算及格。英文出題其實不用怕,畢竟不是像托福要考你英文程度的,所以英文題目的敘述不會用太難的字。

喔,忘了說,報名費是150塊美金。

心得

我差不多30分鐘就寫完了,剩下的時間再重頭全部檢查一次。

可能我運氣好吧,除了幾題陷阱題之外,遇到的題目都不算太難。不過我覺得這考試感覺有點像在考對API的記憶力,真的需要花腦筋想的題目不多。有些API在實務上並不常用到,所以..我不覺得只要平常有在寫就有辦法通過考試,特別是只有在寫Rails的話,不特別準備一下可能過不了的(畢竟是Ruby認證,不是Rails認證啊)。

準備方向,就.. 常常練習動手寫是基本一定要的(不然我想弄這個證照也沒什麼意義吧),然後在考前再把幾個重要的Class、Module的API"全部"看過一次,應該就差不多了。我運氣不錯,八十幾分低空飛過(這也表示我還不夠熟)。

結論

也許您會好奇,Ruby證照能幹嘛? 到時候拿去貼滷味攤嗎? 老實說,這對我來說並沒什麼實質用途,我不會因為有多這張認證而加薪、案子變多,或是被大公司挖角。

至於"證照有用/無用"的討論,網路上已經很多了,那也不會是我關心的重點。我去報名認證考試只是單純的想多一張獎狀而已(小時候成績不好,所以家裡牆壁上沒幾張獎狀,所以當年Adobe的Flash Developer跟Linux的LPI認證也是這樣來的),順便測試一下自己對Ruby的熟悉程度罷了 :)

image
總之,小徽章一枚手入 :)

Heroku ─ Ruby 程式語言的最佳雲端環境

本篇文章已刊載於OpenFoundry電子報技術專欄,刊登之內容由專業的OpenFoundry團隊潤稿,此篇為原文。

你曾經用Ruby on Rails開發網站,但在國內找不到可以用的主機空間嗎? 或者你是新創公司,但初期還沒足夠資金投資在伺服器的硬體設備上嗎? 又或是沒有專職的MIS幫你管理伺服器嗎? 讓我們來看看Heroku吧!

簡介

用Ruby on Rails開發網站很快、很方便,但在台灣比較麻煩的是可以租用的主機空間並不好找,如果要自己架一台成本又太高,而且也有一定的技術門檻。目前市面上有不少PasS(Platform As A Service)的解決方案,例如Amazon的AWS(Amazon Web Services)雖然也是個不錯的解決方案,但還是得花一些時間想辦法安裝、設定到可以執行Rails的環境。如果你不想這麼麻煩,Heroku就是個很不錯的解決方案。不只是Ruby on Rails的程式,任何Rack程式都可以在Heroku執行(包括Ruby on Rails跟Sinatra都沒問題)。

費用及效能

選擇主機最在乎的,不外乎是費用及效能這兩件事。Heroku最讓人喜愛的地方之一,就是它有提供免費的額度可以用,網站空間部份,每個專案的限制是100MB,這對一般的小型的專案來說還滿夠用的;資料庫的部份,每個專案的資料庫大小限制則是5MB,而且有SQLite、MySQL、PostgreSQL可以選用。

至於效能基本上也不至於太差,對一個一般的網站來說,Heroku的1個dyno(Heroku的計價單位)差不多是可以處理10~50 request/second。如果覺得不夠用,也可以考慮它的付費方案來增加dyno數:

image

只要拉一下選項,調整dyno數,就可以知道每個月要花多少費用了。

申請

請到這裡填寫Email,不需要額外的費用。

image

填寫完成後應該不久就會收到一封啟用的認證信,點擊認證連結回到Heroku網站,設定登入密碼:

image

這樣就完成申請的程序了。

安裝

有兩個工具是使用Heroku會用得上的:Ruby以及Git。Ruby使用1.8或1.9版本皆可,個人建議使用1.9.2的版本,如果你不想在電腦裡裝太多版本的Ruby的話,也可參考這篇,使用RVM來安裝Ruby。

以下範例因為都是在RVM執行的,所以不會需要root權限,如果你用的是一般系統的Ruby的話,可能會需要sudo來取得root權限才能順利安裝。

裝好Git跟Ruby之後,Heroku有打包好的gem可以使用:

> gem install heroku
Fetching: rubyzip-0.9.5.gem (100%)
Fetching: heroku-2.15.3.gem (100%)
Successfully installed rubyzip-0.9.5
Successfully installed heroku-2.15.3
2 gems installed

建立專案

裝好Heroku之後,我們使用heroku create指令來建立一個空的專案:

> heroku create
Enter your Heroku credentials.
Email: eddie@eddie.com.tw
Password:
Could not find an existing public key.
Would you like to generate one? [Yn] n
Creating deep-spring-4010... done, stack is bamboo-mri-1.9.2
http://deep-spring-4010.heroku.com/ | git@heroku.com:deep-spring-4010

Heroku會在第一次建立專案的時候問你剛才申請的帳號密碼,如果你不想這麼麻煩,在上面的過程中它也會問你要不要建立一組public key,如果選擇Y就會引導你建立一組public key。

在一開始創建專案的時候,Heroku會自動幫你隨機產生一個名字,以上面的範例來看就是deep-spring-4010。再來我們打開瀏覽器,連上http://deep-spring-4010.heroku.com/,應該可以看到這個畫面:

image

如果上面這個deep-spring-4010的名字你不喜歡,也可以到Heroku網站後台去修改,或是直接在一開始建立的時候就指定名稱:

> heroku create hello_kitty

這樣就會幫你用hello_kitty這個名稱來建立專案,只要名稱沒有先被申請走,你就可以使用。Heroku還有提供更多其它方便的指令可以使用,詳細內容可參考Heroku的這篇說明

上傳你的應用程式

不像一般的網站空間是透過FTP上傳檔案,Heroku是透過Git來發佈的。不過在這之前,我們先來簡單的用Rails的scaffold來快速的建立一個簡單的小程式,待會我們要把這個簡單的程式上傳到Heroku上。

建立Rails專案

> rails new my_heroku_demo
.. 訊息略 ..

> cd my_heroku_demo
.. 訊息略 ..

> rails g scaffold Book title:string author:string publish_date:date

> rake db:migrate
==  CreateBooks: migrating ===================
-- create_table(:books)
        -> 0.0019s
==  CreateBooks: migrated (0.0023s) ==========

> rails s
.. 訊息略 ..

打開瀏覽器連上http://127.0.0.1:3000/books應該就能看到剛剛建立的頁面。

image

如果各位對Ruby on Rails不熟悉的話,建議可以參考一下Rails官網上的這篇文章Getting Started with Rails

部署

網站做好後,接下來就是要把東西上傳到Heroku上。請在剛剛建立的專案底下輸入指令:

> git init .
Initialized empty Git repository in /tmp/my_heroku_demo/.git/

> git add .

> git commit -m 'first commit'
.. 訊息略 ..

再來要把遠端的Heroku加進來:

> git remote add heroku git@heroku.com:deep-spring-4010.git

最後再一個git push指令,就可以把做好的東西"推"上Heroku:

> git push heroku master

接下來你應該會看到一些訊息,並且在Heroku上自動幫你安裝一些需要的gem。再來,因為我們有用到資料庫,所以也需要做一下rake db:migrate,不過跟在本機做的時候稍有不同:

> heroku rake db:migrate

這樣就會對Heroku上的資料庫做migration的動作了。完成之後,請打開瀏覽器輸入網址http://deep-spring-4010.heroku.com/,或是輸入heroku open,也會幫你打開預設的瀏覽器。

image

如果看到Rails預設的首頁的話,表示應用程式已經順便傳上去了。再來輸入網址http://deep-spring-4010.heroku.com/books,順利的話,你應該就可以看到剛剛寫好的程式了。

到這裡你大概就已經學會如何Heroku佈署你的Rails應用程式了。在Rails 3.1之前的版本應該都會滿順利的,但如果你用的是Rails 3.1的話(包括之後的版本),你可能不會這麼順利.. 讓我們繼續看下去。

問題

雖然Heroku很方便,但有個比較大的問題是Heroku是個"唯讀"的平台,所以如果你想類似檔案上傳或相簿功能的網站的話,上傳的東西需要另外想辦法傳到別的地方(例如上傳到Amazon的S3)。而在Rails 3.1之後引進了asset pipeline,靜態檔案會動態產生,而Heroku沒辦法讓你這樣做,所以,你需要先在本機先把asset編譯好之後再推一次上去:

> rake assets:precompile RAILS_ENV=productioran
.. 訊息略 ..

> git add .

> git commit -m 'add precompied assets'
.. 訊息略 ..

> git push heroku
.. 訊息略 ..

另外,如果你在做heroku rake db:migrate這個步驟的時候出現這個錯誤訊息的話:

> heroku rake db:migrate
rake aborted!
Please install the postgresql adapter: `gem install activerecord-postgresql-adapter` (pg is not part of the bundle. Add it to Gemfile.)

Tasks: TOP => db:migrate => db:load_config
(See full trace by running task with --trace)

請打開你的Gemfile,加上這一段:

group :production do
    gem "pg"
end

加完之後再執行:

> bundle install --without production

應該就可以正常運作了。

Heroku的後台管理

我們回到Heroku網站,登入之後可以看到目前有建立哪些app:

image

例如我們看看我們剛剛建立的那個deep-spring-4010

images

可以看到關於這個app的使用情況。如果這個專案不要了,也可以直接從後台刪除掉。

結論

Heroku提供了一個可以簡單、快速佈署Ruby應用程式的平台,不用自己維護主機,不需要的時候隨時可以停掉服務,或是萬一臨時要加大硬體需求或頻寬,只要線上刷卡就可以輕鬆解決,設定上相當簡單。

不過就以就費用來看的話,加大dyno數來應付更大需求是很方便,但它可能不會是最便宜的方案(甚至其實還滿貴的)。我個人覺得它很適合試一些簡單的小專案,或是一些臨時想到的idea,用Rails快速的idea做出來,再丟上Heroku的免費額度試一下大家的反應如何,如果真的越做越大的話,也許再考慮正式投資更多的預算或硬體。

畢竟開發專案,最重要的就是先把東西做出來,之後要做更大規模的,現在的雲端平台的延展性(Scalability)都還不錯,通常只要花錢就可以幾乎無痛昇級。

不久前Heroku還提供了對Facebook app的支援,對想要在Facebook上建立應用程式的人來說也是一大福音,連Ruby的發明者松本行弘也在不久前加入了Heroku,受聘為首席架構師,相信Heroku能提供的服務會越來越豐富。如果各位有在寫Ruby應用程式卻還苦於找不到地方放的話,建議不妨可以試試看Heroku。

我的工具箱

先說明一下,我目前主要的作業系統是Mac OS,工作主要是網站程式開發,前端是Flash、ActionScript以及JavaScript,後端則是Ruby以及Ruby on Rails,應該再過半年左右就會加入Mac app/iOS app的專案。以下來獻曝一下我目前比較常用的工具箱,供大家參考。

軟體外掛

主力的右手

工具 | 價錢 | 說明 —— | —— | —— MacVim | Free | 最近換上手的文字編輯器,用它之後把不少工具都暫時放到第二線去了,選用它原因可參考這篇TextMate | $59 | 寫Ruby/Rails的強力好工具,但中文字型一直是很大的問題,我換了新歡之後,目前已暫居第二線。
網址:http://macromates.com/ Sublime Text 2 | Free or $59 | 也是很棒的文字編輯器,中文字顯示正常。目前也因為MacVim的關係,暫時把它移到二軍了。
網址:http://www.sublimetext.com/2 Mou | Free | 我覺得是目前看到最好用的Markdown編輯器(同上,目前暫居二軍)。
網址:http://mouapp.com/ ByWord | $9.99 | 也是好用的Markdown編輯器(同上,目前暫居二軍)。
網址:http://bywordapp.com/ Xcode | Free | 寫Mac app/iOS app用的。
網址:http://developer.apple.com/xcode/ iTerm2 | Free | Mac OS內建的Terminal替代品。
網址:http://www.iterm2.com/#/section/home Sequel Pro | Free | 圖形介面的MySQL Client。
網址:http://www.sequelpro.com/ Balsamiq Mockups | $79 | 用來畫網站layout的好工具,有點貴就是了。
網址:http://www.balsamiq.com/products/mockups Adobe工具組 | 價錢請見官網 | 很貴,不過是吃飯的傢伙,沒辦法..

輔助的左手

工具 | 價錢 | 說明 —— | —— | —— TotalFinder | $18 | Mac OS內建的Finder的替代品。
網址 http://totalfinder.binaryage.com/ Alfred | Free, or £15 | Mac OS內建的Spotlight的替代品,有了它之後,原本得在dock排排站的軟體都可以省掉了,只要透過簡單的關鍵字就可以直接叫出來,相當方便!(而且我覺得比QuickSilver還好用)
網址:http://www.alfredapp.com/ TextExpander | $34.95 | 可以快速的,而且是System-wide的,有這個的話,即使你用的編輯器沒有支援你習慣的code snippet也沒問題了。snippet
網址:http://www.smilesoftware.com/TextExpander/ Divvy | Free, or $14 | 用來調整視窗大小的小工具。
網址:http://mizage.com/#macdivvy ScreenFlow | $99 | 我用來錄畫面的工具。
網址:http://www.telestream.net/screen-flow/overview.htm KeyCastr | Free | 可以在螢幕上顯示目前按了什麼按鍵,通常會拿來跟ScreenFlow一起服用。
網址:http://stephendeken.net/software/keycastr ColorTagGen | Free | 吸顏色用的好用小工具。
網址:http://itunes.com/mac/colortaggen RemoteBuddy | £19.99 | 可以把Wii手把當做簡報器用的工具。
網址:http://www.iospirit.com/products/remotebuddy/ Cyberduck | Free | 傳檔工具,支援FTP/SCP,也支援AWS的S3。
網址:http://cyberduck.ch/ Welly | Free | 用來連上BBS的。
網址:http://code.google.com/p/welly/ SourceTree | Free | Mac OS上少數免費而且還不錯用的圖形化版本管理工具。
網址:http://www.sourcetreeapp.com/ Github.app | Free | Github出的小工具。
網址:http://mac.github.com/ Gmail Notifier | Free | 會在系統列通知信件的小工具
網址:http://toolbar.google.com/gmail-helper/notifier_mac.html Dropbox | Free | 應該不用太多介紹了,我大多是拿來跟外發或客戶交換檔案用的。
網址:https://www.dropbox.com/ Adium | Free | Microsoft是有給Mac出了一款MSN Client,但沒辦法收離線訊息!! 還好這隻小鴨子功能也不差,支援離線訊息之外,還支援好幾家的協定(Gtalk、Facebook、ICQ等),就是傳檔的時候慢了點,還有偶爾會當機這樣的問題而已。
網址:http://adium.im/ Twitter | Free | Twitter官方的app,可在Mac App Store取得。
網址:http://itunes.apple.com/us/app/twitter/id409789998

專案管理

工具 價錢 說明
Redmine Free 好用的專案管理工具,我都是拿來給客戶用的,有什麼問題就請客戶在這個地方開票,比Email往來更有效率,也更好管理。
網址:http://www.redmine.org/

Chrome Plugins

工具 | 說明 —— | —— Send to Kindle | 用來把看不完的頁面丟往Kindle再慢慢啃的好工具 Awesome Screenshot | 方便的瀏覽器拍圖外掛 Color Pick | 吸顏色用的,但僅限於網頁頁面。 Evernote | 看名字就知道是來用跟Evernote同步的。 goo.gl URL Shortener | 縮網址用的。 Library Detector | 可以偵測這個頁面有用了哪些JavaScript Library。 LiveReload | 用來跟LiveReload串接的外掛 LocalStorage Monitor | 可以檢視目前這個頁面的Local Storage狀況。 新同文堂 | 簡繁轉換的工具 Orbvious Interest | 可以把目前這個沒時間看或來不及看完的頁面往Read it Later送,可以稍後再讀。 Pretty Beautiful Javascript | 把JavaScript美化的小工具 Try coffeeScript | 直接在瀏覽器裡就可以寫CofeeScript,看看效果如何。 Vimium | 用Vim的操作方法來操作瀏覽器,跟Vim一樣,習慣之後真的會上癮。 以上工具皆可在Chrome Web Store找得到

其它

工具 價錢 說明
iTunes Free 這是個很重要的東西,平常除了聽音樂之外,我還訂了許多的screencast、podcast,還有Stanford超紮實的線上課程,這些都是很棒的資訊來源。


實體外掛

除了軟體的工具、外掛之外,還有些實體的外掛..

Kindle

看書用的好東西,細節可參考這篇

iPad

最近都被老媽跟小朋友霸佔走了,就不多提了.. Orz

機械鍵盤

我的工作有很大時間都是在敲鍵盤,所以投資給自己打起來比較舒服(增加爽度)的鍵盤是剛好而已,Mac內建的巧克力鍵盤是不錯打,但就是少了手指頭的回饋。

image

外接螢幕

我目前工作用的主要是laptop,螢幕不大,沒有第二顆外接螢幕在開發網站的時候相當痛苦,真的一但習慣之後就回不去了。

椅子

跟鍵盤一樣,我幾乎是整天都是坐著的,所以投資給自己一隻坐起來比較舒服的椅子也是剛好而已。

便利貼

這是最近加入的習慣,我用實體的便利貼做為輔助的工具。雖然說電腦類的便利貼軟體那麼多可以選擇,但我還是覺得比不上手寫 & 貼在螢幕上來得直覺:

image

所以整個組合起來,看起來大概會是這樣:

image

(抱歉不是很整齊..)

至於Windows上的工具組合,我已經忘得差不多了,Windows目前只有拿來測試IE瀏覽器以及網路ATM轉帳用途而已..以上,如果大家也有好用的工具,也歡迎一起留言討論。

哈囉,2012!

對於新的東西,寫程式的總是不免俗的要來個"Hello World"!

今年幹了哪些事

  • 認識了更多的神人/高手,雖然很多目前都還看不到車尾燈,但至少有個方向可以跟
  • 辦了9場的Flash/ActionScript讀書會,每回人數在50~100之間,感謝大家的支持
  • @pct一起辦了第一屆的PHPConf in Taiwan
  • 有14場公開的表演,其中有的是教育訓練,有的是心得分享,真是愛現!
  • Blog竟然有90篇文章!! 我剛自己算了一下也嚇到

希望更熟悉技能

  • Vim(希望可以練到跟吃飯、呼吸一樣自然就好)
  • Ruby/Rails(往Best Practice前進)
  • JavaScript
  • Cocoa Framework

許願

  • 小朋友(們)可以順利長大
  • 希望可以做出自己的產品
  • 繼續把Flash/ActionScript讀書會辦下去
  • 希望可以投稿國外某些知名網站(練英文的時候到了)
  • 希望COSCUP/OSDC/RubyConf Taiwan/RubyKaigi/PHPConf Taiwan這5個研討會,至少有2/5可以上台講,而不是只是坐在底下當聽眾
  • 希望可以像閃光哥一樣,也可以有一本書(我要遺臭萬年用的)
  • 希望體重可以再比現在再少個5公斤
  • 公司生意.. 順利就好

許完願了,但光許願是不會實現的,所以我要開始動手寫書的TOC了!

Vim的操作小技巧

Vim的操作除了基本的hjkl之外,快速鍵組合相當多,不過大概有個規則。以下是我自己個人比較常會用到,而且覺得還滿方便的操作小技巧,寫起來幫自己加深記憶,希望也對有需要的朋友有幫助。

說明

  1. Enter = 按下enter鍵,Ctrl = 按下ctrl鍵,Alt = 按下alt鍵,如果是大寫字母例如G = shift + g,Ctrlwj = 按著ctrl鍵不放,再按下w,再按下j
  2. 這裡提到的都是Vim或是plugin內建的指令,如果你不喜歡或覺得難按,可以透過修改.vimrc來改變快速鍵的對映
  3. 以下指令都是在一般模式(Normal Mode)下使用

游標移動

  • gg = 移到整份文件的最上方
  • G = 移到整份文件的最下方
  • H = 移到目前螢幕的最上方
  • L = 移到目前螢幕的最下方
  • 10Enter = 游標往下移動10行,前面的數字表示行數
  • :10Enter = 游標直接移動到第10行
  • {} = 把游標移動到上一個、下一個段落
  • Ctrlwj = 把游標往下面的分割視窗移動
  • Ctrlwk = 把游標往上面的分割視窗移動
  • Ctrlwh = 把游標往左邊的分割視窗移動
  • Ctrlww = 在各個分割視窗間切換

建議可以搭配 EasyMotion 更有效率的移動游標

搜尋

  • / = 搜尋
  • * = 移往下一個搜尋結果
  • # = 移往上一個搜尋結果

編輯

  • u = undo,回到上一步
  • Ctrlr = redo,回復undo
  • . = 重複上一個步驟
  • ~ = 改變英文字母的大小寫,本來大寫會變小寫,小寫會變大寫
  • :m+ = 把目前這一行往下移動一行
  • :m-2 = 把目前這一行往上移動一行
  • >><< = 增加、減少縮排
  • yyY = 複製游標所在的這一整行
  • pP = 在游標之後、之前貼上複製的內容
  • ayy = 跟yy有點像,但是是把複製的東西放到a 暫存器裡,這個a可以用其它25個英文字母代替,可以用:reg指令把目前的暫存器叫出來看
  • ap = 在游標之後貼上a 暫存器裡的內容

模式切換

  • EscCtrl[ = 回到命令模式,ESC是獨立一顆比較好按,但比較遠,如果你不想讓你的手離開打字區的話,可以選用CTRL [,或是在~/.vimrc裡自訂快速鍵
  • Ctrlv = visual block模式,可進行像TextMate按住alt鍵的區塊選取

NERDTree

  • B = 叫出bookmark
  • C = 把目前游標停留的這個目錄設定為根目錄
  • p = 把游標移動到上一層目錄
  • P = 把游標移動到根目錄
  • J = 把游標移往這個結點的第一個
  • K = 把游標移往這個結點的最後一個
  • u = 把樹狀結構的根目錄往上移一層
  • I = 切換是否顯示隱藏檔案
  • m = 叫出NERDTree的系統選單

其它

  • :! = 執行外部指令,例如:!ls則是執行ls指令

參考資料

這裡有幾篇我覺得寫得很棒的文章,可以更清楚的知道在Vim裡操作的原理

Vim的快速鍵組合如果用得熟的話,整個編輯的過程中是幾乎可以不動到滑鼠的,不過還是要多練習啦,差不多練到跟吃飯睡覺一樣熟練就可以了。打完收工 :wq