感謝ihower致力於創造台灣ruby社群,並花了五個月籌辦ruby年會,今年首次邀請到Matz(松本行弘)來到台灣擔任Keynote Speaker,身為一個ruby newbie中的newbie,半年來的學習中對於ruby的易讀性感到著迷,幸運的在10/18中午12:00開始販售門票後的八分鐘搶到一張了!但卻一直以為是在周末舉辦,活動前一天才看到提醒是從禮拜五開始,在閉幕的時候ihower說明了這次時程的安排是以Matz為主,因為他周末固定有家庭聚會需要返回日本,所以才會安排在五六兩日舉辦。這是第一次參加conference就有機會看到好多知名的前輩和眾神們,真的非常幸運 :3
這次15個sessions和23個lightning talks中主要環繞在ruby2.0, mruby, concurrency, devOps, Rails的應用,由於與會聽眾與講者許多來自外國,大多來自於日本,故許多中文講者都自動換成英文演講了,也讓大部分的時間都處在英文聽力練習的狀態。Matz看起來還很年輕!他的一個小時演講十分有趣也激勵人心,也簡單介紹了ruby起始的原因,當他是一個programmer時他的project被cancel且團隊解散了,當時1993年他沒有事情可以做,開始創造一個他自己的程式語言,名字叫Ruby。
Replace Perl, but not at all.
I just wanted to create my own language.
design programming language的人少之又少,而大部分的人都是語言的使用者,所以在程式語言設計者的腦中的想法與程式語言的使用與開發者迥然不同,他愛所有的程式語言,但他相信可以再造一個更好的。語言就好像介面一樣,在電腦與人之間溝通的方式,ruby是一個很好的DSL,也增加了ruby的可讀性與開發者的開發速度,語言也同時影響著人,讓更多人使用並讓這個語言變得更好。
Too few people care about design, too many people create software without care.
So I suggest you care about the users, care about your team members, care about yourself, care about future yourself.
Matz也介紹了mruby為Matz Embeddable Minimal Ruby,ruby也因mruby的發展進入各種裝置,mruby盡可能的瘦身來嵌入各種系統中,在jserv的sessions中也介紹了他在mruby中的研究,在嵌入式系統中mruby算是一個成長中的角色,jserv也因此選擇與mruby一同成長與努力,在AcoMo公司研發Physiological Inspection相關產品,透過compiler將ruby code轉成bytecode來間接執行ruby,也demo藉由電路板來以ruby透過USB實現滑鼠控制,並畫出圖形,在問答中提到因mruby目前所需空間較大且效能慢,還無法在Arduino上順暢運行。
這次活動中也由許多日本講者介紹ruby2.0,除了Matz本身還有ruby core team的Ko1, Asakusa.rb的Akira,在Heroku中有Matz’s team,團隊裡有Matz、Ko1和Nobu,三個人分別負責designing, implementing, fixing,由這樣的模式帶動ruby的成長,Akira也畫出了一個日期與ruby版本數的對應圖,從1993年到現在ruby版本彷彿趨近於2又佇立於現在的1.9.3,明年也將在ruby的誕生日2/24號也是ruby 20歲生日release ruby2.0,ruby將引領整個ecosystem全面性的改版,如Rails, Rake, RubyGems, RDoc, Rspec等等。
其中一個議題為ruby的concurrency,由cardinal blue的godfat主講,在短短一小時將這個議題講述的十分透徹,也介紹了現今concurrency model,在實作上可能是用thread或reactor,還須考慮到這個task為IO bound或是CPU bound,在現有的ruby app server上如Thin, Puma, Unicorn等透過eventmachine與Thread Pool多種組合來產生不同的效能與功用,ruby concurrency的議題常常被拿來與近來流行的node.js做比較,ruby能以eventmachine做event-driven的non-blocking IO,但相關的其他library與module也須配合call back的特性才有效,但大多數的ruby code都以block的形式存在,不同於js先天上即是event-driven的特性。
第二天下午的兩個議程與DevOps有關,自己第一次看見這個名詞,由字面上的意思來看是開發與營運,事實上還包含了佈署與QA測試等等的一連串軟體開發的流程,透過持續整合來提高開發品質、減少浪費與加速開發時程並維持穩定的營運。Richard的流利英文和易懂的投影片描述出一家startup公司如何藉由一些工具與技術來實現DevOps,其中一部分是Continuous Integration持續整合的方法,自動化整合code、測試、佈署與文件一連串的過程及需要一個CI server來實踐,Richard提到了Janky,一個以Jenkins為底,Hubot做控制的CI server,可以及時掌控專案的狀況。當營運時候server不小心down了就面臨了server provisioning的問題,Richard以chef+vargrant做solution,而thegiive使用puppet,這兩種方案都可以減少時間與人力來啟動新server繼續提供服務,對於服務的monitoring,Richard以unit test之於developer與monitoring之於operator做類比,強調monitoring的重要性,當有使用者回報問題而少了monitoring便如同瞎子摸象找不到真正的癥結,god與lograge可以提供良好的process監控與log紀錄,Rails不只可以拿來創造出prototype,更可以建立出一個scalable的服務,並與agile development相輔相成。
在議程中來自新加坡的Wei Lu介紹pair programming,她的英文講得好快好流利,在大學期間來就讀過三間不同大學且在不同的國家,pair programming就是兩個人一起寫code,一個人打字,另一個人提供意見並閱讀程式碼,在過程中互相溝通討論,這樣不但可以交換彼此的意見,也可以互相學習,了解自己的缺點學習別人的優點,在問答時也有人詢問是否能和她一起pair programming,是一個很有趣的sessions,Yohei在lightning talk中更介紹了remote pair programming,透過screenX TV來讓遠端的夥伴看到你的terminal,這次lightning talk多達23個,每一個主題都十分有趣且實用,如XDite的Bootstrappers介紹、eddie的是真男人就要用vim、高橋征義的簡報等等,eddie高見龍也在第二天帶大家用vim導讀了ruby source code,joseph介紹了rubymotion,以ruby code來打造iOS app,更現場live coding,在這次rubyConf很多過去在網路、部落格看到的前輩們一一浮現在眼前真的很難能可貴,也在這短短的兩天體會到 :
- 英文是必需品
- 發表是最好的記憶,分享是最好的學習方式
- 學會問問題,培養勇氣問問題
感謝所有的講者、主辦籌畫者與場務人員才有如此高品質的活動,讓大家學習新知、拓展視野、朝拜大神、社群同樂(開幕16字箴言),也讓第一次參加的我受益良多,十分感謝!希望未來也可以參加到RubyConf.tw 2013|2014?
btw,也希望可以參加到一月份的WebConf2013 :3
RubyConf.tw 2012 session slide list : https://github.com/linc01n/rubyconftw2012