大家好,一年(其實是 16 個月)一度的 RubyConf Taiwan 2019 即將在兩個月後的 7.26 - 27 日於張榮發國際會議中心召開,作為活動的主辦人與議程委員,在此想跟大家介紹一下本次大會的主題。
Keynote:
今年一共有 4 場 Keynote,講者分別是
- Matz (@yukihiro_matz):未定
Aaron Patterson (@tenderlove):The View Is Clear from Here
繼 2015 再次來台的 @tenderlove 這次預定發表的是和 Rails view engine 相關的題目,當我們在下
render
的時候,究竟 Rails 是怎樣生成最終的 html,這中間到底經過了哪些步驟,以及歷代 Rails 中又進行了哪些優化,這些都是在我們寫 Rails 進行效能優化調整來說非常需要了解的知識,也讓我想到前年 Taipei.rb 羅泓武發表的「從原始碼了解 Rails template rendering」這個主題。c9s (@c9s):Virtual Machines: their common parts and what makes them special
終於讓我邀請到 c9s 了(感動),其實 RubyConf Taiwan 一直以來都有請其他語言的強者大大交流的慣例,這次 c9s 將為我們帶來對近年流行的腳本語言之間設計的差異的主題,也可以參考他之前在 FB 上的 PO 文。
Samuel Williams (@ioquatix):The Journey to One Million
可能對國內 Rubyist 來講不太廣為人知的 Samuel 除了是 Ruby Committer ,也是新一代 non-block I/O 庫 async 以及在此之上建立的新 Web Application Server falcon 的作者,預計他將會在 Keynote 中演講 Fiber 的運用方式以及展示如何用 Falcon 達成 100k 同時 Websocket 連線的紀錄,大家也可以先看一下他在 RubyKaigi 的議程 slide 了解一下。
一般議程:
今年從將近 70 份的投稿中選出了 20 份的一般議程,以下是基於個人理解(與偏見)對各議程主題的介紹。
蒼時弦也:從 Enumerator 看 Ruby 的迭代器
講者從原始碼開始一步步了解我們在 Ruby 每天使用的
each
方法並試圖用 Ruby 實作出來,像這樣的理解過程除了增進對 Ruby 的理解外,也可以應用在我們日常的開發上,像是什麼場合要對 ActiveRecord 物件集合(collection)進行一般陣列操作,怎樣的方式可以減少 N+1 查詢等,當我們比較了解背後實作方式的時候,就能在不同場合下做出相對較優的判斷,所以這就是我們需要理解實作方式的理由,也是這個主題的價值。Joel Hawksley:Rethinking the View Layer with Components
講者是 GitHubber,主題是講者在改善 GitHub 本體的過程中,發現 Rails 的 view 功能雖然好用而且功能強大,不過同時也造成了測試不好寫、跑的慢(因為只能整合測試)以及幾乎無法有 Test Coverage 等問題;在無法將架構改成 React 或 Vue.js 等前後端分離的前提下,借鏡 React 的 component 概念將之實作在 Rails 的 ActionView 上的過程,同時這個實作也已經應用在部份 GitHub 的功能上。
Jenna Blumenthal:Event Sourcing for Everyone
這個主題是在講述作者從零開始建立一組名為「Event Sourcing」的 Service Object 機制來將改變物件狀態 = 資料內容的變化,以及追蹤資料變動的紀錄,甚至可以從紀錄還原資料操作等;在近年 Ruby 圈的開發模式逐漸傾向 Service Object 的趨勢下,這個主題適合想要學習建立 Service Object 思維模式的開發者參考。
Kuniaki Igarashi:Road to white mages
延續上一次講者在 RubyConf Taiwan 2015 的演講,這次將主題放在如何用 Ruby 內建的功能 TracePoint 或是外部工具 DTrace 等去搜尋「這個 method 是哪裡來的」之類的問題進而幫助我們開發與 debug。
Shinsuke Imai:Reliable distribution system with Ruby x IoT
講者是日本知名線上食譜社群 Cookpad 的工程師,講題是由講者在 Cookpad 建立讓消費者向小農直接購買食材並集運到指定據點的服務Cookpad-Mart 時,為了解決「使用者從網路上下單,在食材生產者端列印購物清單」需求而建立了一組讓小農端可以隨時自動列印購買清單的器材組,其中包括熱感應印表機、Raspberry Pi 以及無線路由器等,並使用 CRuby 建立了可以自動列印、控管分佈在不同小農家的這些服務組件的程式,和敝司自產的開源 IOT Framework -- Tamashii 有異曲同工之妙;雖然講者也曾在其它場合分享過相關主題,不過這次將會是第一次從技術面出發的分享。
Yuji Yokoo:Developing Dreamcast games with mruby
主題是在研究如何 hack 20 多年前發售的 Dreamcase(DC)主機上用 mruby 寫出可以執行的遊戲,過程包括建構針對 DC 主機的 CPU cross-compiling 環境、從模擬器到用 serial cable 傳輸程式到主機等等的過程;身為一位懷舊電玩愛好者對這個主題不可能不興奮,講者也釋出了這部影片展示在 DC 上給大家參考。
Vipul A M:What's new in Rails 6?
由於正逢 Rails 6 發佈,因此有一個個這樣的主題也是非常合理的,講者本人也是第 27 名的 Rails Contributor 與 Committer。
The future of library dependency management of Ruby:Shibata Hiroshi
在 Ruby 2.6 中,Ruby Core Team 正式的把 Bundler 合併到 CRuby repo,作者是主導這一過程的 Ruby Committer,同時近期在 Bundler 1 -> 2 的過程中因為相容性問題導致許多人(包括我)遇到一些困擾,例如 Gemfile 突然「被升級」之類的狀況,講者將在此次講題中說明這些事件的原因、如何應對以及相關的未來計劃等等。
Delton Ding:Protect Your Copyrighted Ruby Code in Distribution
我們都知道 Ruby 是一個直譯型語言(Interpreted Language)並且具有像 meta-programing 之類執行期動態加載的相關功能,因此無法像編譯型語言可以用二進位執行檔方式散佈執行程式,作者試圖找出一套能讓 Ruby 程式在某些前提下可以安全地散佈的方案。
Bernie Chiu:Let's Scale Ruby Applications with Love
作者分享在 Shopline 時調整效能達成部份 API Endpoint 有一倍以上效能提升的過程,對於 Rails 效能調整有興趣者必看!
Matias Korhonen:Ruby like it's 1995
這其實是個相對偏趣味性的題目,作者嘗試用現在的硬體來編譯 1995 年誕生的 CRuby 0.95。
Charles Oliver Nutter:Scalable Applications with JRuby
講者是 2014 的 Keynote,實質的 JRuby 之父,今年以一般講者的身份登台,在台灣雖然使用 JRuby 的人應該不會很多,不過以個人經驗來說 JRuby 其實是效能非常好,可以突破 GVL 限制又可以使用幾乎所有 Java Lib 的好東西(除了啟動速度以外),講者將講解近年 JRuby 在效能面與相容面的改善,以及未來計劃等。
Wen-Chuan Lin:開拓者們建立鐵道的辛酸血淚史 Building Rails with Trailblazer, The Good, Bad and Ugly.
雖然大家幾乎已經把 Ruby 和 Rails 綁在一起,但其實 Trailblazer 也是近年非 Rails Web Framework 裡的後起之秀,講者所在的公司也是極少數在真實產品環境中應用 Trailblazer 的例子,相信這場分享能為大家帶來新的啟發。
John Lin:Automatic Differentiation for Ruby
這是一個數學與 AI 的題目,也是講者在 RubyKaigi 的 LT 的延伸。
Soutaro Matsumoto:Ruby with types
近期 Ruby 圈最重要的新聞莫過於就是即將在 Ruby 3 登場的 type checker 功能,講者作為主導此一計劃的 CRuby Committer,將為大家帶來此一計劃的進程以及 3 大 type checker 實作的解說。
Samuel Giddins:Making CocoaPods Fast(er) with Modern Ruby Tooling
有在寫 iOS 的人應該都有在使用 CocoaPods 這個等同 Bundler 之於 Ruby 的工具,作者作為 CocoaPods 的 Lead Developer 將在這次演講中分享 CocoaPods 團隊在近年讓 CocoaPods 安裝單一套件的處理時間從 3 分鐘變成 90 秒的改善過程。
Tse-Ching Ho:Suit up for frontend and backend development
敝司的與專案開發的客人洽談時,常常會聽到「Rails 不適合前後端分離架構」的說法,但事實上我們已經有數個成功使用前後端分離的專案了;講者澤清為敝司長年的盟軍與戰友,具備非常充份的 Rails 前後端分離的實戰經驗,內容會偏重在如何建立一個可立即運用在日常開發工作上的 Rails 前後端分離的專案架構,對於這方面有興趣的人務必要來聽聽看。
Li-Fong Lin:Running and observing Rails application on GKE
講者為國內最大 GCP 代理商 iKala 的 Engineering VP,iKala = LiveHouse 具有多年直播平台維運開發經驗,這次分享將帶來如何在 GCP 與 GKE 平台上用最適合的方式建立 Rails App 用的 Docker Image、k8s 設定與使用 GCP 的 Profiling 功能調校效能等實戰經驗,對 GCP 有興趣或正在使用的朋友不可錯過。
Luka Huang:Using AWS Lambda with Ruby on a large-scale system
自從 AWS 在去年底宣佈 Lambda 支援 Ruby 之後,可說是為 Rubyist 們開啟了一個新世界,講者基於把上線產品加入 Lambda 的實戰經驗,講解我們該在怎樣的場合以及如何在 AWS Lambda 上寫 Ruby 應用,可說是非常熱門的主題。
Kazuma Furuhashi:Charty - Visualizing your data in Ruby
這場講題由獲得了 Ruby Association Grant 2018 獎項的圖表生成工具 Charty 的作者帶來關於為何製作、如何設計以及實戰應用這套工具等議題,其實 Ruby 的世界一直不乏圖表產生的工具,不過功能往往不太全面,這套基於 Python matplotlib 的工具看起來完成度非常高,作者也將提及真實世界的應用範例,像這類結合異種語言產生的工具或新語言也是近年 Ruby 圈的發展趨勢之一,值得大家關注。
結語:
在 RubyConf Taiwan 即將邁入第一個 10 年的當下,我們來總結一下今年的選稿方向:
「第一手」講者的重要性
大家可以發現近年的 RubyConf Taiwan 常常會出現許多具有 Ruby / Rails Committer 身份的講者,或是某些知名開源專案核心作者,第一手資訊的人在會場對大家的意義就是:當你有問題時可以直接問他,甚至可能現場就幫你改好了,這也是所謂 CDD(Conference-Driven Development)一詞的意義。
Ruby 3x3
由於 Matz 訂下了 Ruby 3x3(3.0 版要比 2.0 快 3 倍)的目標,因此近年的 Ruby 發展計劃與 RubyKaigi 的主題也都圍繞著這個方向進行,繼去年的 JIT 之後,今年又推出了 type checker 與 Bundler 整合等發展方向,幸運的是剛好這些方向的主持者都有出現在今年的議程上,讓大家能在台灣獲得這些第一手訊息。
Happy Hacking
除了工作之外,我們也可以看到一些偏向趣味化的主題,讓大家在工作之餘也能用 Ruby 玩一些有趣的東西。
讓我們期待兩個月後的大會吧!