RVM - Ruby enVironment(Version) Manager

前言

我相信很多人學習Ruby是因為Ruby on Rails的緣故,但 Rails 在改版的速度很快,而且有時候改版的幅度不小,例如從以前的 2.x 版本跳到 3.x 版本,甚至有些小版號的改版幅度也不小。像是不久前 release 出來的 Rails 3.1.0,就跟 3.0.x 的架構就差滿多的。就算不談 Rails,光是主流的 Ruby 目前也有 1.8.x 跟 1.9.x 的分支,在功能上都有些差異。

這些新推出來的新玩具有的很好玩,不裝起來試一下就會覺得手很癢。你當然可以在你電腦裡安裝這些不同版本新玩具,但畢竟在自己工作的機器上試是有風險的,萬一把環境弄壞了還得花時間想辦法回復。以往我們可能會使用類似VirtualBox之類的軟體來模擬作業環境,玩壞了隨時都可以很快的還原或重建一個新的,不過即使這樣還是有點麻煩。

這時候你就需要RVM(Ruby enVironment(或 Version) Manager)了,有了它,你可以安心的在你的電腦裡同時安裝多個不同版本的 Ruby 而不會打架,例如標準的 MRI(Matz's Ruby Interpreter),或是 REE(Ruby Enterprise Edition),甚至是 JRuby、MacRuby 都沒問題,在 RVM 裡都可以都可以隨你高興的切換。RVM 裡每個版本的 Ruby 的 gem 也都是分開裝的,甚至在同一個 Ruby 版本底下也可以建立不同的 gemset,彼此獨立互不影響。如果哪天覺得膩了、不想玩了,可以用 rvm remove 指令移掉指定的版本;萬一哪天整個不想要玩了,因為 RVM 是把檔案安裝在 /home 的個人帳號資料夾底下,所以也不會去影響到系統的設定,不要的時候就整個 ~/.rvm 資料夾砍掉就行了,不會影響原來系統的設定。也就是因為 RVM 是安裝在你的個人帳號底下,所以你在安裝過程中是不需要 root 權限的。

當 jQuery 遇上 CoffeeScript

上週的PHPConf Taiwan,有幾位朋友在會後問我CoffeeScript要怎麼樣跟 jQuery 之類的 framework 整合在一起,會不會打架? 基本上是不會的,CoffeeScript 寫出來的東西就是 JavaScript,如果會打架,那表示你即使不用 CoffeeScript 來寫也一樣打架了。

我們來看看要怎麼把 jQuery 跟 CoffeeScript 放一起。

投影片製作與上台表演

請注意,本文有許多個人自以為是的內容,不一定適合每個人,所以請謹慎服用。

我之前工作的某個老闆跟我說過「每次的上台簡報就是一場表演」,這句話我一直記在心裡。既然是表演,表演內容固然很重要,但"說故事"的方法也很重要,不然內容也許真的很棒,但台下卻睡成一團。

不久前看了我的偶像之一Lindsay Fallow(a.k.a Stray)的一份簡報Robotlegs 2 and your brain,真的感覺會做投影片的人就是不一樣,即使人不在現場聽演講,簡報裡也沒有太多的文字說明,光看簡報就能大概知道作者想要表達的意思,這很酷!

所以這回在第一屆的 PHPConf Taiwan上用的投影片,我也想來試一下不同的簡報風格。

電視影集

我常會笑我老爸老媽每天晚上守著劇情扯到不能再扯的八點檔,然後討論誰的小孩是誰誰誰的私生子,然後誰又是誰的小三。但我自己也好不到哪裡去,即使再忙,也是幾乎每天在看影集。

忘記是從什麼時候開始,我的影集大盤商介紹一些好看的美國影集之後,我就陷入了這個影集無窮迴圈。剛好最近跟朋友們吃飯聊到,於是就來整理一下列表,順便看看我到底浪費了多少生命在上面。

Method

為什麼要寫 method?

程式碼就這樣一行一行的寫不好嗎? 當你的程式碼超過一定的行數的時候,一行一行的寫就不會是個好的寫法。通常我們會用一個抽象的名詞,來把一群連續或複合的動作給包在一起,這樣一來程式碼變得有系統了,心情也會變得比較好,重點是,會寫 method,就容易會有種變成高手的錯覺!

雖然這也許是玩笑話,但把程式碼整理到 method 裡,程式碼會變得比較好維護,而且也更容易可以重複使用。

Python 簡介

What is Python?

Python 的老爸是,Guido van Rossum,聽說是他在 1989 年的時候的某個聖誕節無聊,然後就設計出這套程式語言,1991 年放出來給大家用,到目前已經有將近 20 年的歷史了。

安裝 Python

不管你用的 Linux/FreeBSD/MacOS/Windows..etc,目前 Python 均有實作品,請至 http://python.org/getit/ 找到適合的平台並下載安裝。

不過,我不得小小抱怨一下,Python 在 Windows 上實在是不怎麼友善,包括我們之後要講的 Django,原本也有給 Windows 的懶人安裝包(Instant Django),但專案似乎也斷頭了。不過也不是沒有解決方法,如果只是要在 Windows 做練習的話,可參考下一章

如果你安裝完成,請打開你的終端機視窗,輸入python就可以進入 interactive shell 來試玩一下:

$ python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> "hello python"
'hello python'
>>> 1 + 2
3

在這個 shell 裡面,你可以很容易的就測試一些簡單的程式碼,看看執行結果是不是跟你想像的是一樣的。有趣的是,如果你在 shell 裡輸入 import this 的話:

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

你可以看到 Tim Peters 寫的 The Zen of Python,內文大概說明了 Python 世界的設計哲學。至於 import 是做什麼用的,我們在後面的單元會再做說明。

除了 shell 之外,我們更常把程式碼儲存成一個檔案,附檔名是 .py,例如我們把下面這段很簡單的程式碼:

#!/usr/bin/python
print "Hello, Python"

用任何文字編輯器打完之後,存檔為 hello.py,然後回到終端機視窗,輸入 python hello.py

$ python test.py
Hello, Python

每種程式語言一定都要不免俗的來一下 Hello World 打個招呼的,如果在 Java,你可能為了要輸出一行簡單的字,還得寫個類別或方法才行,在 Python,只要一行 print 就搞定了,相當簡單吧 :)

其實老是 Hello World 也沒什麼意義,接下來我們來看一點稍微複雜一點的..