高見龍

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

My Vimrc

About 3 months ago, I’ve mentioned I started to use Vim as my primary editor, and now I can only open Vim and Xcode in my daily job(my primary job is coding with Ruby and Rails, and Objective-C is just for fun).

Here is my current vim configuration, feel free to use it, and welcome to give me your suggestion(or criticism). I took some screenshots of my computer and laptop:

MacVim, on iMac with Mac OS X Lion, click to enlarge image

Non-GUI Vim, on iMac with Mac OS X Lion, click to enlarge image

Ubuntu 11.10, click to enlarge image the icons and fonts of the bottom are pretty nice, right? you can check on this, or download from here, and unzip them to ~/.font.

Windows XP, Vim on Windows? I know.. but it’s still working, right? click to enlarge image

Keep polishing

Vim is a pretty awesome and interesting editor, hope can keep polishing it in my daily jobs :)

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了!