id 與 instancetype

這星期我們再來看個有點冷門但我覺得還滿有趣的小東西:instancetype。如果我們去翻一下 NSObjectallocinit 的定義:

// 檔案:NSObject.h
@interface NSObject <NSObject> {
    Class isa  OBJC_ISA_AVAILABILITY;
}

- (id)init;
+ (id)new;
+ (id)alloc;

會發現 allocinit 的回傳型態都是 id。而在上一篇提到,在 Objective-C 裡 id 是一個可以指向任何物件的指針,所以如果這樣寫的話:

NSArray* myArray = [[NSArray alloc] init];

看起好像沒什麼問題,執行起來也正常,但這裡就有個小小的疑惑了.. 既然 allocinit 都是回傳 id 型別,Objective-C 是個動態語言,很多資訊是在執行階段(runtime)才會取得,那編譯器(compiler)又是怎麼知道它應該要是個 NSArray?

分心 FanXin app

分心 FanXin app

今年二月份剛好有機會到朋友的公司幫忙開發 iOS app:「分心 FanXin」。

顧名思義,就是一個可以讓你一邊看電視,一邊分心地跟朋友聊劇情的 app。

下載網址:https://itunes.apple.com/tw/app/fanxin-fen-xin/id545965153?mt=8

但近期因為覺得我家的那兩隻小朋友在長大的速度變好快,覺得好像再這樣忙下去就會錯過小朋友的成長過程了(像今天才看到我家三歲的小男生拿媽媽的化妝品在畫自己的臉)。所以把專案進度做個段落之後,就要回家來養小孩了(沒錯,我就是要從小開始訓練小朋友寫 code 了!)。

HHKB Pro2 鍵盤使用心得

HHKB Pro2 鍵盤使用心得

我每天的工作是敲打鍵盤之類的文書工作,所以幫自己找一隻順手的鍵盤也是剛剛好的藉口。

對於 HHKB 鍵盤的傳說,很早之前就有所聽聞了。最知名的應該就是 Richard Stallman 用 HHKB 鍵盤搭配百元電腦的那張照片(鍵盤本身比電腦本體還貴!)。我知道它是神器,但我等凡人即使拿了神器還是凡人,不會變成大神。 而且當初看到鍵盤上沒有方向鍵、沒有 CTRL 鍵跟 F1 ~ F12 鍵,在台灣也沒什麼機會試打看看手感,最重要的是,它的價錢不便宜,所以大多只是看看而已。

直到前不久去日本參加活動,有在電腦賣場試打了一下,心一橫的也敗了一隻回來,我挑的是白色無刻的版本。

RubyKaigi 2013

今年日本的 RubyKaigi 2013 在 5/29(四)、5/30(五)、6/1(六)舉辦,議程是雙軌同時進行,共計有超過五十場演講及十場 Lightning Talk,並包括三場主題演講(Keynote),跟上一屆一樣也是三天。這次有超過 500 位 Ruby 開發者參加,其中有超過 100 位是從國外來的,這樣的規模短期內在台灣可能還是沒辦法達到(全台灣真的有在用 Ruby 工作的開發者加起來總數說不定都還不到 500 人)。

Code Reading @ RubyKaigi 2013

很高興這次能有機會到日本參加 RubyKaigi 2013,我分享的題目是:Code Reading, Learning More about Ruby by Reading Ruby Source Code,算是個滿冷門的題目,主要是分享我自己從閱讀 Ruby 原始程式碼中學習到的一些經驗。不過當天還有不少朋友來捧場,讓場子看起來不會太冷清,真是太意外了(其實我也搞不清楚到底有多少人,我當時已經緊張到沒辦法算數了)。

在進入主題之前,我問大家有多少人曾經來過台灣,結果在場有十來個人舉手,就以現場人數的比例來說不算少。

雖然之前有一些些上台演講的經驗,但這是第一次出國演講,而且還是全程用英文演講,我知道有很多的大神甚至 Ruby Committer 就坐在台下,所以我相當緊張。我那個「上台的前一天不會睡」的魔咒果然還是依舊存在,所以演講當天凌晨四點,我拿著筆電到飯店的大廳練習對著空氣講,練到早上七點,但還是覺得不夠穩。

我的演講廳是小間的,所以壓力有稍微小一點點。

為了怕現場出包,所以在 code review 展示的部份我是用預錄的,不過事後想想好像直接現場操作比較容易掌控時間。

上午的演講結束後,下午發生的小插曲讓我抖了好大一下。我在演講內容裡有提到一些在 Ruby 的原始碼裡面有一些小地方的命名不太優,當下大家笑得很開心,雖然娛樂效果達到了,但我其實也有點擔心會不會有什麼不好的副作用。結果上午的講場結束,下午就看到這則

哇!!我有嚇到的感覺了,不過因為我個人覺得這樣好像有些失禮,所以當晚的 Official Party,我就親自去跟 @nobu 說聲不好意思,希望沒有造成他的困擾。其實我也是想趁這個機會認識一下只有在網路上才能看得到的傳說大神,而且他好像一點也不在意。

第三天的議程,我本來就打算要來聽 Jim Gay 的主題(他是 Clean Ruby 一書的作者),沒想到坐下來沒多久竟然看到自己的名字跟前一天講的東西出現在投影片上:

再度有被嚇到的感覺。

活動結束後,RubyKaigi 2013 的頭目角谷也推了一篇:

再次看到自己的名字被提到,有些驚訝也有些不好意思,不過這個"Conference-Driven Development(CDD)" 聽起來好像不錯,而且我喜歡 "RubyKaigi made Ruby Better",如果有朝一日我有能力,我也希望可以多貢獻一些心力。

感謝高井さん幫我拍的照片,讓我在 Rubyist 時計 上也可以有一張漂亮的照片。

這趟日本之行有學習到不少東西,收獲很多,會在接下來的幾篇文章介紹。最後,有講的不好的地方,還請多多指教。

Thank you all, RubyKaigi team, you're all AWESOME!

HHKB Pro 2 鍵盤入手

HHKB Pro 2 鍵盤入手

其實沒什麼,只是敗家紀錄一下,就前幾天去日本參加 RubyKaigi 時候順便帶回來的。而且還特別挑了個無刻的回來:

鍵盤很小一個,只有 60 顆鍵帽;沒有上下左右鍵,沒有 Page UpPage Down 鍵;Ctrl 鍵的位置不一樣(跟日本鍵盤一樣,在一般鍵盤的 Caps Lock 的位置),ESC 鍵在數字 1 的左手邊;沒有最上面一排的 F1 ~ F12 等種種跟一般鍵盤的差異,我也不太懂為什麼我要練這種折磨人的鍵盤,因為練這個可能得把之前的習慣整個砍掉重練,跟練 Vim 有點像,一但只要習慣它,就沒辦法習慣一般鍵盤了。

不過我很喜歡它打起來的手感,所以.. 喜歡就不需要太多理由了,還在習慣中 :)

一個月後的使用心得

Delegation in Objective-C

在開發 iOS app 的過程中,Delegation(委任)幾乎是避不掉的東西,例如在 ViewController 裡處理 UITableView 的時候,大家一定都寫過像這樣的程式碼:

self.tableView.delegate = self

坊間的書本大多會教要這樣寫,但不一定有說明為什麼要這麼寫。其實 delegation 的概念並不困難,只是要用程式碼來表達的時候,對新手來說可能就需要多一點的想像力了。

Delegation,中文翻譯成「委任」,委任兩字講的好聽是拜託別人做事,講白一點就是自己不想做或不會做,所以外包出去叫別人做。

但是,就算是要叫別人做也不能隨便找一個路人就可以,舉個例子,我想要把「撰寫 Ruby 程式」這件事委任給別人,要有能力處理這份工作的人至少得知道 Ruby 程式怎麼寫。