前言
上次在台灣聽 conf 應該是 2017 年的 Rails Pacific 了
今年鼓起勇氣投了個冷門的題目,大概就是 ruby 跟區塊鏈相關的風控資訊安全之類的題目,但結果沒上(明年會繼續努力的)
也剛好看到幾位認識的朋友入選了這次的 speaker,加上之前在國外聽過 aaron 的演講之後很喜歡這位講者,最後一點,身為投稿落選者的我可以半價買票,就一定要參加一下今年的 ruby 盛會啦
然而這篇筆記是記錄我在 Ruby Conf TW 2019 聽的 session,內容主要會是蒐集各個講者可能在其他地方講過的相關 video、slider,以及自己的收穫和理解。
通常外國講者的議題都會在一些地區講過,趁著記憶還新鮮可以透過這些資源幫助瞭解,有些時候可能聽過一次沒辦法很好的理解,如果要等官方上影片可能是好一陣子過後了,恰好 Youtube 能夠分析英文字幕出來,很適合幫助學習或複習。
議題
今年的 Conf 大部分是雙軌制,同時段有兩個議題可以聽,下面是我自己挑選的 session,並不包含所有的議題。
Rethinking the View Layer with Components
- 講者: Joel Hawksley
- 可參考影片: Rails Conf 2019
講者是 GitHubber,發現 Rails 的 View 雖然很好用,但基本上比較難做 Unit test,一般來說都要做到整合測試才會去測到 View 的部分,撇除前後端分離的情況,整個議題是希望採用 React Component 的想法實作在 Rails ActionView 上的整個過程,包括從一開始的思路、Github 上的 production code 遷移,到寫測試的整個過程,很有趣。
Let’s Scale Ruby Applications with Love
- 講者: Bernie Chiu
- 投影片: Link
主要分享 performance tuning 的部分,如何透過各種工具去作效能調整的分析和研究,包括了火焰圖、APM 等等
這場不在主會議廳,所以那時候站在最後面看不太到簡報的內容有點可惜,好險後來講者有上傳投影片。
Event Sourcing for Everyone
- 講者: Jenna Blumenthal
- 範例: Demo Code
- 可參考影片: 2018 ruby pairs
主要在講一個 Event sourcing pattern 的思路及實現,讓我感覺有點類似 paper_trail,追蹤資料內容的變化、變動記錄、甚至可以從記錄還原資料,後來想想其實也跟區塊鏈很類似就是了。
不過個人認為 Event sourcing 這套系統比較適合重視數據生成「過程」比「結果」重要的情況。
可以參考文章 深入浅出Event Sourcing和CQRS
The Journey to One Million
- 講者: Samuel Williams
- 影片: 2019 Ruby Kaigi
- 文章: Fibers Are the Right Solution
這次演講算是 Ruby Kaigi 那場的加強版,講者是 non-block I/O Async 和 Web Server falcon 的作者
為了要展示 100 萬連線數,還特別請 Matz 上台,發射最後 1000 個 connect,
Compacting GC for MRI
- 講者: Aaron Patterson
- 可參考影片: pivorak Lviv Ruby MeetUp
當初好像會講「The View Is Clear from Here」,不過後來改了主題,繼續講 「Compacting GC for MRI」
GC = Garbage Collection
主要在多執行緒的 Ruby 狀況下可能會導致 Memory 碎片化,導致 Memory 使用率增高,效能下降的問題
Aaron 有在 Ruby Issue 裡回報(寫的超清楚),想必這場演講是深刻研究後的結果,所以聽下來的心得主要是在講整個記憶體從碎片化到壓縮堆疊的過程和知識
目前 Ruby 2.7 版本也已經引入 Compaction GC 囉
還拿到了講者的愛貓貼紙啊!!超可愛 XD
開拓者們建立鐵道的辛酸血淚史 Building Rails with Trailblazer, The Good, Bad and Ugly.
- 講者: Wen-Chuan Lin
- 投影片: Link
講解整個團隊採用 Trailblazer 的過程,也因為自己有待過這間公司所以聽完之後特別有感觸 XD
主要是這些不斷變動的商業邏輯,複雜度不只是單純拆 Service Object 或 Form Object 能夠應付的來,所以透過 TRB 來拆出獨立運作的 Operation 來讓邏輯解耦變得更易於測試
導入的過程和不斷面臨的挑戰都非一朝一夕一個人能決定完成的,想起曾經參與過的過程加上看到自己前同事已經成為講者,要督促自己進步了才是。
Suit up for frontend and backend development
- 講者: Tse-Ching Ho
- 投影片: Link
這場我覺得很有趣的是,剛好呼應前一場採用 Trailblazer 的部分。
因為用 TRB 可能會遇到,團隊的人必須都能夠理解這樣的作法和設計思維,才能發揮這套框架的最大用處,畢竟你必須花費時間除了瞭解 Rails 以外,還必須懂 TRB 的套件
而這場的講者整理了一套常用的 Pattern 基於 Rails 之上來整理各種情況遇到的邏輯解耦,我個人主觀認為理解上相對簡單一些些,但卻又喜歡 TRB 的 DSL。
所以很有趣的是,聽完這兩場發現都各有可以學習的地方,日後遇到類似的複雜邏輯解耦也會是一個參考的方向。
What’s new in Rails 6?
- 講者: Vipul A M
講者說他到哪裡參加 Conf 不是遇到地震就是海嘯的 XD,開場超有趣。
主要整理印象中的幾個要點
- action_text 可以省掉時間自己去裝文字 editor
- DNS 重放攻擊 white list
rails db:prepare
可以幫你建 db + migraterails db:seed:replant
可以不用把 DB 整個重建後在跑 seedinsert_all/insert_all!/update_all
終於有多筆寫入了Persion.where(id: 1).pick(:name)
==Persion.limit(1).pluck(column: name).first
- Add support for testing Optimizer Hints on databases 可以寫一些為了測試 DB 效能的方法在 model 內了,比方說 No merge index 之類的
心得
剛好前陣子在寫 React,又碰到了 session 是講 React & Rails 的 Component 時特別有感覺,我覺得參加 Conf 除了是能夠第一手獲得新知以外,也是認識朋友的好去處,同時也可以避免自己閉門造車走火入魔的情況發生 XD
這次除了遇到老朋友以外還遇到了很多新朋友,看到每個人都有不一樣的成長感覺時間過的真是快啊!