敗家之路之 Kindle 人生

敗家之路之 Kindle 人生

放心,這不是勸敗文也不是開箱文,只是我自己最近用幾天的一點小小心得。

我很愛買書、看書,家裡書櫃的書已經多到快裝不下了,但仍樂在其中。每次出門,我包包裡面一定至少會放一本書,不管是等人或是通車的時候都可以拿出來翻。

自從一年前入手 ipad 後,開始把書裝進去,這樣出門只要帶一台, 如同某購物台業務所說,裡面的書就算有幾百本也不會變重,真的超方便的 XD

不過好景不長,近來我的 ipad 最近被老媽跟小朋友霸佔了,所以只好再想辦法再弄一台。這回在找替代品有給自己定幾個評估的重點:

  1. 成本。
  2. 是否方便攜帶。
  3. 是否支援之前買的電子書。

最後評估下來有兩個候選人,一個是 Kindle,另一個是 Kindle Touch,沒有選其它家的產品是因為他們的功能都太多太複雜了,而且用 Kindle 在 Amazon 買書會比較便宜。最後 Kindle 勝出的原因是它比較便宜,而且 Touch 的功能我並不需要,我只要可以看書就好。最後感謝在美國的友人的幫忙,幫忙弄了一台79塊美金的 Kindle 4。

第三梯次 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 裡的全域變數

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

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.