2011年6月30日 星期四

C & Objective-C 區塊(Blocks) 使用在Mac OS X 10.6

看了不錯文章,將區塊(Blocks)介紹很詳細,推薦參考原文

什麼是區塊(Blocks)?


Blocks 很像函式(functions), 但以 inline寫成並且包含在其他函式中。它也被稱為(closure), 因他會存在於最近的變數空間. (它也被叫做lambdas).

在 Cocoa (Mac 圖形介面函式庫)區塊常用在


-  回撥函式(callbacks): 如LOG處理
-  延後執行(delayed execution): 如非同步的檔案寫入的完成通知

註:Apple介紹Block主因極可能是用區塊來做更好的平行處理 (concurrency),
    可參考Grand Central Dispatch (GCD))

下列是一個改寫自原文範例
/***********************************************/

// In mathematics, an arithmetic progression (AP) or arithmetic sequence is a sequence of
// numbers such that the difference of any two successive members of the sequence is a constant. For instance, the sequence 3, 5, 7, 9, 11, 13,
// … is an arithmetic progression with common difference 2.
// Example for blocks with (AP)


#include
#include

// define block
typedef int (^IntBlock)();

IntBlock mathAP(int firstTerm, int difference) {
__block int  computeTerm = firstTerm;

return Block_copy( ^ {
computeTerm += difference;
return computeTerm;
});
}


int mathAPloop(int n, IntBlock blockAP)
{
int m = n;
while (n-- > 0) {
printf("a%d: %d\n", m - n, blockAP());
}

return 0;
}


int main() {

IntBlock blockAP = mathAP(1, 3);


mathAPloop(10, blockAP);

Block_release(blockAP);
return 0;
}
/***********************************************/

結果如下:

a1: 4
a2: 7
a3: 10
a4: 13
a5: 16
a6: 19
a7: 22
a8: 25
a9: 28
a10: 31

更新07-25
此篇範例,請到GitHub程式碼下載。

2011年6月21日 星期二

想開發自己Web 站嗎? 不容錯過 Getting Real 一書!

推薦原文線上電子書Getting Real,比較喜愛中文可參考正在翻譯中的簡中線上電子書

讀了本書,
深深感受37 signals 編輯群的用心與字字珠璣,
另外也發現他們的創意,
原來中間的過程產物,可成為一本如此受歡迎的書;
且同時呼應在Rework-書中的銷售你的副產品,值得細細品味。

2011年6月10日 星期五

新思維:讓來自世界各地的程式設計師,用GitHub 協同開發閉源程式!

姓名標示非商業用途授權分享 orkboi保留部分權利


今天看了37 Signals 的一篇原文有關於使用GitHub 來進行不限地域的Rails 開發工作的新思維。

你將需要全球性的程式碼版本代管服務來使全球員工可協同來開發程式,而經濟實惠的解決方案之一:GitHub 計畫與價格 
1. 開源的專案免費。
2. 入門級私人使用方案為每月7美元。(相對於自行架設要便宜不少。)
    看到這裡你是否有安全方面的疑慮呢?可參考GitHub的安全防護資訊

另外看了37 Signals 求職版 (不限地區搜尋結果) ;多家公司要求你必須使用GitHub 且有一個開源的展示專案在上面;進而可評估你的程式設計能力符合要求;以及你對GitHub 的熟悉程度來決定是否僱用?

各路高手有興趣和來自世界各地的程式設計高手用GitHub 協同開發嗎?
趕快申請開源帳號來試試,建立自己第一個開源的"Hot"專案吧!!!


2011年6月6日 星期一

你是要加班當程式Bug 產生器吧!!!


Image from jef safi 姓名標示非商業用途謝絕衍生作品 保留部分權利 
常聽到公司同事說今天要加班趕程式,但我戲稱:"你是要加班當程式Bug 產生器吧!?"。

其實,現在公司常要程式設計師以責任制方式工作,但早上上班打卡,晚上做到爆肝。
按本人過去新人時的經驗,過了晚上七點,在連續八~九個小時腦力工作和會議後,這時寫程式會用最直覺方式去寫,一個函式會無識意寫得過長,共用部分也沒獨立為其他函式,註解自動省略(因為累了吧!!!)。然後,隔天早上一看昨晚寫的程式,直呼"這是啥鬼東西",只有基本函式功能正確,例外部分都沒處理完整,錯漏不斷;
而難以偵錯,也無法重覆使用一些共用程式碼函式。結果前晚三小時寫的程式,隔天花了三小時來修bug。

本人的一些小建議:
第一:好好安排在一天中你的精神最好時候來寫程式。(與時間管理有關,參考相關書籍。)

第二:程式本身也需要多些測試程式來自動檢查你的函式,這會讓你有信心來重構讓程式愈來愈好,當然也減少偵錯時間。例如:若要寫API,便對應寫API的測試程式(測試驅動開發TDD:Test-driven programming

第三:累積功夫,自己的函式庫(如有現有函式庫可直接採用最好),我曾從程式前輩學到一句話"凡看過寫過,必留下紀錄",至今我還繼續保持這紀錄的習慣(Blog 也算其中之一)。

第四:勿當工作狂,除工作外;多些時間陪陪家人,家人是要在一起相處一輩子,且小孩的成長黃金時期需要父母雙方的照料才得以健全。