第三梯次 Flash/ActionScript 3.0 課程

2012/4/21 update: 課程將改為以screencast方式進行

話說在 2007 年的時候,我曾經很自以為是的辦過一次 Flash/AS 課程,那時候用的還是 AS2.0,來參加的朋友大概五、六位,地點一開始很克難的選在師大附近某家可以上網的簡餐店(後來才移往我自己公司裡上課);2009 年的年中有再辦過第二梯次,這次用的是 AS3.0,地點則是商請某個同行友人幫忙借用他們公司大樓的會議室跟投影設備,這回環境比較好一些,參與人數比較多一點,記得最多有將近快 10 位朋友來參加。

這兩階梯次都是針對沒學過 AS 程式的朋友從頭講起的,沒有收費用。

沒意外的話,農曆年完之後再來個第三梯次,用的當然也是 AS3.0,同樣也是不會收費用的(視場地規定,也許會有低消或場地費),屆時再歡迎有興趣想學 AS3,但卻不知道從何開始的朋友參加。

也許各位最近聽說「Flash 快不行了,HTML5 才是王道」之類的話,以我看來,Flash 並沒有不行,目前大部份的 web game 都還是用 Flash 開發的,而且 Flash 現在還有 AIR 可以用,能做的事情幾乎跟一般 native 的應用程式差不多;更何況 HTML5 也還不是王道,它連標準都還沒定,而且還有最可怕的各家瀏覽器支援問題..雖然我自己也開始在練 HTML5 + JavaScript 的手感,但這跟 Flash 行不行無關,純屬個人興趣。

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