高見龍

iOS app/Ruby/Rails Developer & Instructor, 喜愛非主流的新玩具 :)

第0次Flash/Flex/AS讀書會

image

先感謝ETBlue熱血贊助Logo :)

再感謝大家前來參加,雖然只是個行前說明,又剛好遇到過年 + 尾牙 + 要放假的星期五晚上,來的人比報名的人少,不過看到邦邦TicoreGray等大角色都有來捧場,真的是太感謝了

我相信參加讀書會的人就是會來來去去的,畢竟這不是學校,沒有規定缺席幾次就會被當掉,或是補習班,不來上課學費還是照收。我並不在乎人多人少,只要有人願意來,我就願意繼續辦下去。

目前讀書會有在Facebook上弄了一個供大家交流訊息用的粉絲頁,如果大家有什麼問題也可以直接在上面留言。

這是個自發性的社群活動,有興趣的就來吧,都歡迎的 :)

討論內容:

  • 會有特定的主題,由讀書會成員來介紹。
  • 希望可以兩個星期一次,至少一個月一次。
  • 仍以台北為主。
  • 希望每場讀書會的主持人可以輪流當,練習講話的機會。

下次讀書會日期:

  • 日期:2/15 (或2/22)
  • 時間:晚上7點
  • 地點:如果沒其它建議,暫定果子咖啡
  • 人數:20~30人
  • 主題:PureMVC
  • 主講:林立
  • 附註:如果時間來得及,我也會幫忙補充

因為PureMVC不算是個簡單的主題,大家過年期間最好先做一下功課,先看一下官網的文件或是網路上的教學(推薦Erin的blog文章)。可能會有機會可以跟著實作練習,所以別忘了可以帶電腦邊學邊做。

最後,也是最重要的結論:希望可以一直繼續下去!

很高興認識大家,大家年後見!

至於為什麼是第0次? 因為Array的index是從0開始算啊 :)

Faster Array Concatenation in AS3

前不久在Grant Skinner大人的twitter上看到這個:

Just discovered a handy trick for merging two arrays in JS: arr1.push.apply(arr1, arr2);

真神奇,原來Function.apply還可以這樣玩,而且這招似乎在AS3上也可行,直接寫幾行程式碼測一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function test_concat():void
{
  trace("== TEST Array Concat ==");
  var array1:Array = [1, 2, 3];
  var array2:Array = ['a', 'b', 'c'];
  var timer_start = getTimer();
  for (var i:int = 0; i< 10000; i++)
  {
      array1 = array1.concat(array2);
  }
  var timer_end = getTimer();
  trace("the length of array1 is : " + array1.length);
  trace("== " + (timer_end - timer_start) + " miniseconds ==");
}

function test_push_and_apply():void
{
  trace("== TEST Array Push and Apply ==");
  var array1:Array = [1, 2, 3];
  var array2:Array = ['a', 'b', 'c'];
  var timer_start = getTimer();
  for (var i:int = 0; i< 10000; i++)
  {
      array1.push.apply(array1, array2);
  }
  var timer_end = getTimer();
  trace("the length of array1 is : " + array1.length);
  trace("== " + (timer_end - timer_start) + " miniseconds ==");
}

// 測試
test_concat();
trace("");
test_push_and_apply();

我的環境:

  • Macbook Pro
  • CPU : Intel Core 2 Duo 2.4 GHz
  • RAM : 4 GB

執行結果:

== TEST Array Concat ==
the length of array1 is : 30003
== 4119 miniseconds ==

== TEST Array Push and Apply ==
the length of array1 is : 30003
== 5 miniseconds ==

array1最後結果內容是一樣的,但花的時間差非常大,我想這其中主要的差異應該是在於Array.concat每次都會產生一個新的array,而且還得再assign給原來的array的緣故。

後來還有看到這篇,野中さん有在wonderfl上做了幾個實驗,結果發現跟這兩個array的大小有關。不過在我的機器上好像在試不出來差異,不知道是不是我哪邊有錯,即使調整兩個array的大小,Function.apply的速度都是遠大於Array.concat的。

update: 是我自己耍笨,測試數字請見連結裡野中さん的那三個測試。

I may be wrong, please correct me if there’s anything wrong :)

AS勉強會(草案)

image

常看到日本那邊有不少的”AS勉強會”,一群對某樣技術有共同喜好的人聚在一起聊聊最近又學了什麼新技術或有了新的idea,實在很令人羨慕。

就我所知,國內比較有”活性”的聚會,Ruby有Ruby Tuesday,Google Technology有Taipei GTUG,PHP也有framework的讀書會,但Flash/Flex/AS呢? AUG可能因為主要的核心成員都忙,有好長一陣子沒消息了;PTT-Flash版聚一年也才launch一次,同業間的AS分享會雖然有固定時間在跑,但屬於比較private的性質。

也許不少人很不喜歡Flash,嫌它慢、嫌它肥、嫌它不夠標準化,但明明Flash就還是目前大部份FB Game/Web Game的首選,明明Flash/Flex/AS人才的需求量就不小,為什麼不也來弄一個? 所以小的斗膽,把自己的一些想法貼出來跟大家討論一下,希望可以讓對這些技術有興趣的朋友能找到個共通的實體平台,互相交流、學習,或是人才招募。

我想”讀書會”跟”研討會”的定義並不同,研討會比較像一年一度的中元普渡大拜拜,大多是少數幾個大師站在台上講,其它人坐在台下聽;而讀書會則是像初一、十五拜拜,固定時間的常態進行,而且每個人不分強弱、新手老鳥,都可以有參與感,不然只會強的越強,弱的就一直原地踏步。但我也不希望讀書會被當成”補習班”,畢竟讀書會是比較自發性的。

讀書會要一直活下去,最重要的是要一直有在運作,最怕要來不來,或是公司加班、家裡有事、天氣不好..等不可抗力因素造成一次沒來、二次沒來,然後就沒來了,以下列出一些我初步的構想,大家可以參考看看:

開始時間:

新年新氣象,預計農曆年後可以開跑。

場地:

有網路、投影設備的簡餐、咖啡店,除非有更好的場地,不然確定之後應該就會固定了。

地區:

這個是很現實的因素,似乎比較多的朋友都在北部,在其它縣市的朋友可能就不好意思了。

成員:

人數不限。但至少要有幾個固定的核心成員,核心成員的工作除了要讓讀書會維持一定的人數外,還可以輪流當主持人。建議至少要有3個,如果沒人志願可以先算我一個。

費用:

不收費,若聚會的場地有規定的最低消費則依其規定。

週期:

每月一次

時間:

週末或週間都可,這個可以大家再研究看看。

主題內容:

Monthly Review:

閒聊一下這個月以來又多了哪些新的玩具或是新的應用。

Special Topic:

邀(或凹)對某些主題特別有研究的神人/高手來分享。

Case Study:

  • 個人作品展示及心得分享
  • 國內外作品討論

Communication:

  • 新成員介紹
  • 名片交換
  • 人才招募

若有想到其它的再請幫忙補充

時間:

若選在週間一次約2~3小時,若是在週末可以一整個下午。

有任何想法,也歡迎在底下留言,還請大家一起討論看看,感謝 :)

update:

讀書會網址:https://www.facebook.com/thestudygroup

Using Terminal in Mac OS

image

身為一個阿宅,開一個黑黑的terminal視窗(而且可能要同時開好幾個),手指頭快速的敲打指令,看著terminal不斷的噴log出來,就會有種強者上身的錯覺,至少電影裡都是這樣演的。二年前,我換到了Mac的作業環境之後,terminal還是我工作上不可或缺的重要工具之一。不過內建的terminal我用不太習慣,在看了許多人的推薦下就換用iTerm了,原來那個就不知道丟哪邊去了。

不過有時候為了要切換到某個比較深層的目錄,得一直cd(change directory)下去,特別是萬一遇到中文目錄,cd起來更痛苦。還好有個方便小工具叫做”openterminal“,可以很快的就切換到你要去的地方。

像這樣,我是把它放在Finder上面的工具列裡,然後先在Finder裡選擇我要去的目錄,再點一下openterminal的按鈕:

image

它會自動幫我開一個terminal視窗,並且自動cd到我要去的目錄:

image

這樣快多了!! 另外最近還發現一個方法,例如我先開一個terminal,然後在terminal裡打cd兩個字,再來把我要去的資料夾拖到terminal視窗放掉:

image

terminal會自動帶出那個資料夾的所在路徑:

image

以上一些小小心得,供大家參考 :)

近期讀書書目

image

提供一點近期我自己讀過、正在讀或是打算要讀,覺得不錯的iOS開發工具書及網路資源供大家參考。我個人對這些工具書的作者並沒有利益關係,他們賣再多本我也抽不到趴,僅以我個人的角度提供一些的看法(也可能不夠客觀),至於我沒讀過或沒翻過的書我就沒辦法了。

工具書:

Programming in Objective-C 2.0

image

這本差不多快啃了3/4本,個人感覺算是滿中規中矩的教課書。這本有中譯版,不過我沒看過。

Cocoa and Objective-C

image

這本大概讀了2/3左右,作者英文用字不會太艱深,讀起來算是滿輕鬆的,是比較入門的書。

Cocoa Design Patterns

image

design pattern在Cocoa Framework是很重要的,特別是MVC跟delegate pattern幾乎貫穿全場。這是本算是比較進階的書,才剛開始看第一章而已,不過看起來是相當有內容的。(希望農曆年期間能把它讀完)

Learn iPhone and iPad Cocos2D Game Development

image

Cocos2D 是一套很棒而且是BSD license的Python framework,後來移植到iOS上變成Cocos2D for iPhone,用來開發2D遊戲很方便,目前App Store裡也有不少的作品是用它開發的。如果先前有過AS3的基礎的話應該會覺得這套framework用起來很友善。這本書目前只讀了2個章節,但可以感受得到作者的用心,而且在網站twitter上也相當活躍。

網路資源:

首推當然是Apple自家的網站,有足夠多的參考資料,除了有挖不完的寶之外,也可以順便練一下英文。

再來,Stanford University的CS193P課程是品質相當好的。上課影音檔跟投影片都可以在線上下載到完整版本,也可以在iTunes免費訂閱到完整的內容。我自己偏好是整個下載到iTunes裡,即使沒有網路也是可以收看;或是把內容同步到iPad上躺在床上睡覺前悠哉的慢慢看。另外國內有人整理了課程摘要(中文)。

目前最新的課程是2010年fall版本,如果你下載的Xcode是比較新的版本(4.x版),那在收看之前的2009 spring或是2010 winter的課程時可能會遇到操作介面不同的問題。2010 fall用的是比較新版本的Xcode,而且課程名稱也從原本的”iPhone Application Programming”調整成”Developing Apps for iOS”了。

除了Stanford的CS193P之外,Madison Area Technical College也有一系列的課程,內容是比較進階的,在iTunes store裡搜尋”Advanced iPhone Development”可以找到免費訂閱。

這裡有整理了一些值得follow的iOS developers的twitter

為什麼上面都推薦原文的?

在資訊界來說,很現實的是外國的月亮比較圓一點,原文的資料的確豐富許多。其實原文書沒想像中的難讀,有的不用一字一句全部精選,只要看書裡的範例程式碼就大概猜得出來那個章節在講什麼了,若有看不懂的地方再回頭細讀內容即可。

再者,真的要小小的抱怨一下,有不少中譯版電腦書翻得不只錯字多多(有的中文字錯就算了,還有的連範例程式碼都有錯..),語意也不見得通順,讀起來可能比原文還難懂。哪些書我就不方便明講了,一來我的個人觀感不見得客觀,二來也免得擋人財路。

另外,大家在購買工具書之前可能要注意一下書裡的版本,目前最新iOS的SDK是4.x版,但市面上有些書是用3.x版的畫面在做範例。基本上內容是沒差太多,也大多能正常編譯執行,但IDE的操作介面可能會有改位置,對初學者來說可能會有找不到選項的困擾。

常在討論區看到有人建議推薦書目,我覺得適合我的書不見得適合你,建議還是親自走一趟書局,翻一下章節大綱、試讀幾個章節之後再決定囉。以上,就我個人一點點的淺見跟大家分享,如果有覺得不錯的也歡迎大家推薦 :)