evanc3's blog

Once you're gone, you can't come back.

Reboot

我想我這個人最大的優點與缺點就是常立志,年初才說要好好學 Node.js,但感覺自己八字跟 Node.js 裡的一堆 }); 不合(我知道 CoffeeScript ,但之後再學吧:P),所以還是決定如預定所想,重新邁入 Ruby on Rials。

其實就算是這樣也不用特地換回 Octopress,只是想試看看 Octopress + Heroku,配置之後發現真的還蠻方便的,比部署成 GitHub Pages 還要簡單。

本來又想把網誌重新歸零、全部砍掉重練,但是後來想想這些都是軌跡,不管在之後看起來會有多愚蠢(或許現在就是),都曾經是過去某個時空下我覺得可以寫下來作為網誌文章的內容。與其糾結於過去,不如好好想想現在要怎麼做吧。喔我另外一個優點兼缺點又出現了:專說好聽話。

希望這次重開機之後能好好奮發向上吧,不要再三心二意、左顧右盼了。

就這樣結束有點虛,附上兩個關於寫網誌這件事的連結:

(圖文再度無關)

1-130102112125

「“老猿掛印回首望”,關隘不在掛印,而是回頭,懂我跟你說的意思麼?」

Moving From Octopress to Hexo

之前才說要好好開始學 Ruby on Rails,結果被朋友一揪就又跑去學 Node.js 去了。

Node.js 的靜態頁面網誌框架 Hexo 應該不是第一個,但是應該是看起來最順眼、操作也最簡單的一個。而且作者(@tommy351)是台灣人。:P

轉換的過程中沒什麼大問題(因為也沒用多久),可以說是無痛轉移。只有一點,原先在用 Octopress 的時候我是把 categories 當成 tags 在用 ,但是在 Hexo 的設計裡這是兩個不同的東西。

(圖文無關)

the_grandmasters

「人活這一世,能耐還在其次。有的成了面子,有的成了裏子,都是時勢使然。」

Start a Ruby on Rails Project on Cloud9 and Deploy to Heroku

可以忽略的前言

一晃就是三個月沒寫網誌,但應該還是平了我的網誌發文數最佳紀錄了,只是這樣下去的話永遠都會停留在原地吧。

昨天看到這篇 Cloud IDEs For Web Developers,第一個 Cloud9 之前研究 Node.js 的時候有玩過一下,但是功能沒有很多所以沒什麼注意。

Screen Shot 2012-10-17 at 下午9.50.38

現在多了 Terminals 可以用,感覺就像一個小小的虛擬機器;也可以跑 Ruby on Rails,讓我想起在 N 個月前立志要學 Ruby on Rails,可以最後東摸西摸什麼也沒學好的窘境。於是重新立志要好好學 Ruby on Rails。 XD

Screen Shot 2012-10-17 at 下午9.51.22

以下的步驟是自己東拼西湊來的,有什麼觀念不對的地方請不吝指正。

Javascript 的 Closure

首先複習一下 Scope 的概念。

Scope

變數的 Scope 指的是變數在程式碼裡可被使用的範圍,又叫做變數作用範圍。

區域變數

在 function A 裡用 var 關鍵字宣告一個變數時,這個變數就只能被 function A 裡的程式碼使用,外面不能存取的這個變數。不過定義在 function A 的其他 function 可以存取這個變數。

全域變數

如果變數不是用 var 關鍵字宣告的話,這個變數就不是 function 的區域變數。JavaScript 會回追 scope 鏈看這個變數有沒有被定義過。如果沒有,它就會成為全域變數。

Closure

Closure 中文翻作「閉包」,不知道為什麼聽起來很像生物學裡的名詞。

普遍認為用範例來講解會比較好懂,但是我看了幾個例子之後,反而有似乎懂了又好像沒懂這種玄而又玄的感覺,後來我看到 MDN 上的文章才恍然大悟。之所以會不懂是因我不知道原來這樣就叫 Closure。XD

Javascript 的 Callback Function

先看看中文維基百科上的解釋。

在計算機程序設計中,回調函數,或簡稱回調,是指通過函數參數傳遞到其它代碼的,某一塊可執行代碼的引用。這一設計允許了底層代碼調用在高層定義的子程序。

嗯…念快一點再加上一點手勢就可以發出火球了。

比較廣義的來說,傳入其他 funtion 當參數的 funtion 就是 Callback function。 好像有點饒口,舉一個弱弱的例子:

function addRandom(n, callback){
    var result = n + Math.random();
    callback(result);
}

addRandom(1, function(result){
     // this is a callback function
    alert(result);
});

Callback function 通常實作為傳入參數的 function 執行完要執行的下一個 function。 用 jQuery(以前認為 jQuery 好難,最近看了一些 Node.js 教學,忽然覺得 jQuery 真是平易近人。) 的 slideUp 來當例子:

最後列出我的兩個誤解:
1. 一直以為 Callback 是個動詞,仔細閱讀幾篇有關 Callback 的文章我才知道是名詞。
2. 只有 Javascript 才有 Callback,其實 C 就有了。(可以看維基百科上的英文條目)

Further readings:
http://book.nodejs.tw/zh-tw/node_javascript.html#callback
Callback Functions in JavaScript
Understanding callback functions in Javascript