書摘:slide:ology中文版

書摘:slide:ology中文版

書名:slide:ology 中文版
視覺溝通:讓簡報與聽眾形成一種對話

還好是中文版,不然我不知道要看多久才看得完。看完後覺得這真是本不錯的書,提出了許多實戰時候應該注意的「Do」跟「Do Not」,爾後再上台做簡報的時候可以用得上 :)

CoffeeScript @ 20th Ruby Tuesday

CoffeeScript @ 20th Ruby Tuesday

感謝 ihower 的邀請,這是今天我在 Ruby Tuesday上用到的投影片。雖然主題跟在 PHPConf Taiwan 的一樣,但因為聽眾們大多對 Ruby 已經很熟悉,而且 CoffeeScript 在新版的 Rails 已經是內建的功能了,沒辦法用同一招繼續騙吃騙喝(同一招不能對聖鬥士用兩次啊),所以有再特別為 Rubyist 們調整了內容。

部份內容是 screencast 影片,所以沒辦法在 slideshare 線上看到,有興趣看的人可以另外下載。依舊沒有太多有趣的哏,希望大家會喜歡。

幫你的類別增加功能

CoffeeScript 很有趣也很好寫,雖然它提供了許多的語法糖衣(Syntactic sugar),讓你用短短的幾行程式碼就能換來原來你在 JavaScript 要做的事。但說白了它本質上還是 JavaScript,JavaScript 做不到的事,用 CoffeeScript 一樣也做不到。

CoffeeScript 裡的全域變數

在 CoffeeScript 裡,即使是一個空的 .coffee 檔,它也會被編譯成這樣:

(function() {

}).call(this);

你在 .coffee 寫的任何變數或 function,都是被宣告為區域變數包在裡面,只會在裡面有作用而已。這其實是好事,因為這樣一來與外界隔離,你寫的東西不會去污染到別人寫的,相對的別人寫的東西也不會去弄髒你寫的。但假設因為某些不可抗力,硬是要把變數或 function 弄成 global 好讓所有頁面都可以直接使用,也不是沒辦法,你可以直接把變數或 function 掛在window物件底下:

window.logout = ->
alert "You've already logout!" if confirm "Are you sure to logout?"

或是這樣做:

root = exports ? this
root.logout = ->
alert "You've already logout!" if confirm "Are you sure to logout?"

第二種寫法看起來比較麻煩,但比較通用。exports 是在Node.js裡定義的物件,上面第 1 行的意思是指會先檢查 exports 是不是已經有定義了,如果這段程式是在 Node.js 裡執行的話,因為 exports 是存在的,所以會定義一個 root 變數並指向它;如果是在一般的網頁上執行,因為沒有 exports,所以會定義一個 root 指向 this,也就是 window 物件 ,所以這樣的寫法的好處就是在網頁或是 Node.js 都行得通。

這樣一來,你在頁面上的按鈕就可以這樣寫:

<input type="button" value="logout" id="Logout" onclick="logout();" />

但是,如果可以的話,建議還是儘量避免用這種 global 變數的方式來寫程式,現在的 JavaScript 越寫越複雜,沒人知道你寫的東西會不會剛好就去衝到誰家寫的 library,或是衝到你自己或同事寫的程式碼 :)

CoffeeScript -> 與 => 的差別

不知道各位在用 CoffeeScript 的 -> (dash rocket)在寫 function 的時候,有沒有發現有另一個長得跟它有點像,但比較胖一點的 => (fat arrow),在 CoffeeScript 的 source code 裡有一段這樣的簡短說明:

CoffeeScript has two different symbols for functions. -> is for ordinary functions, and => is for functions bound to the current value of this.

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 權限的。

投影片製作與上台表演

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

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

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

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