Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2026 COSCUP Preview Ruby jam

2026 COSCUP Preview Ruby jam

Avatar for Vevila-o

Vevila-o

July 21, 2026

Other Decks in Technology

Transcript

  1. 你的身份是? What do you do? The Slido app must be

    installed on every computer you’re presenting from
  2. About me Vevila Tsai Backend intern * 資管系 大四 #

    好想畢業 Information Management Senior year * Ruby 新手 # 請各位大神輕點鞭打 Ruby Novice XD Anime, K-POP Dance RubyJam · COSCUP 2026 Preview
  3. Sitcon 2026 2026 * 免費門票 # 免費去中研院欸 free tickets *

    教授說我們快被 AI 取代 # 看看一起要被取代的人 some of professors say AI will replace us * 都是學生應該挺有趣 # 認識新朋友耶比 most of the participants are students it might be fun
  4. Sitcon 2026 2026 * 免費門票 >> 有夠遠 free tickets super

    far * 教授說我們快被 AI 取代 # 好多的車費QQ # 這些人的智商太扯了 >> 要被取代的只有我吧 some of professors say AI will replace us * 都是學生應該挺有趣 >> most of the participants are students might be fun only I will be replaced 全是大神 OMG The people here are all Jesus # 害怕對方覺得我笨,不敢搭話 # 要是當時有先做一些了解,我會不會更享受? If I had done a bit of research back then, would I have enjoyed it more?
  5. Ruby Taiwan Community 11 01 02 網站改版了,然後你的 Spider 就壞了:Ruby 爬蟲維護的現實

    Lilith · 爬蟲 · Rails Locale 何處尋:從 Accept-Language 到 UGC 07 08 Fumi · Rails · i18n 03 04 05 06 聊聊 Ruby 3 的 ReDoS 防禦:吃瓜設計權衡、整合 Rails 實 踐、窺探 Regexp 未來動向 Kasa · 資安 你的 ruby.wasm 在手機上會壞 09 10 Stoplight: Circuit Breakers for Ruby in the AI Era Georgy Asfur · AI 時代 · Rails · 穩定性 從 2026 年 3 月 Rails 安全更新看三個常見的設計陷阱 Cindy · 資安 · Rails Building Native Mobile Apps Using Rails Nebiyu Elias Talefe · Rails · 行動開發 The Deterministic Rubyist: Taming Your AI Pair Programmer with Nix Mu-Fan · WebAssembly · ruby.wasm Pawel Lisewski · AI · 開發環境 · Nix GVL 對 Rails 延遲的實戰觀測 — 用 Vernier 與 gvl-tracing 看懂 你的 Puma Ruby on Ruby: ruby/spec, MRI Tests, and JRuby and Living on the Edge Ken · Rails · 效能 11 Sampo Kuokkanen · Ruby 核心 · 多實作 讓 AI 接管你的應用,打造微秒級無縫的 Ruby 安全沙盒 蒼時弦也 · AI · WebAssembly · 沙盒 RubyJam · COSCUP 2026
  6. 網站改版了,然後你的 Spider 就壞了:Ruby 爬蟲維護的現實 Lilith 8/8 10:10 # rails #

    爬蟲 01 相關技術 點 HTTP Request CSS Selector · XPath SPA Scraper 運作流程 ReactVirtualized Module · Concern HTTP Request 抓下網頁 爬蟲 = 自動化的「開網頁 → 找位置 → 複製資料」。網站一改版,定位點就失效,整條 資料產線瞬間停擺。 取得 HTML 原始碼 demo.rb require "nokogiri" doc = Nokogiri::HTML(response.body) doc.css(".fund-list a").each do |link| puts link["href"] # 每一檔基金的連結 end CSS Selector / XPath 定位 擷取資料 # 改版後 .fund-list 消失 → 整段抓不到 遇上 SPA 改版 — HTML 變成空殼, 資料藏在 JS 渲染之後,什麼都抓不到 01 情境與技術 RubyJam · COSCUP 2026
  7. 01 網站改版了,然後你的 Spider 就壞了:Ruby 爬蟲維護的現實 Lilith 8/8 10:10 # rails

    # 爬蟲 講者時間 · 個人議題大綱 ▪ 維護一個爬蟲不難,但維護超過 100 個、針對不同金融機構網 站的爬蟲,是完全不同等級的挑戰。 ▪ 真實 production 案例:一個持續從日本各大基金公司抓 PDF 月報 的 Rails 專案。 ▪ 三種最常見的「壞法」與對應 Ruby 解法:REST API 改 SPA、 ReactVirtualized 只渲染可見列、PDF 月報只剩 HTML。 Q 大神幫幫我! 網站改版不會特別告訴我,要如何「發現」爬蟲壞掉 了?(會有另外設定一個通報功能嗎?或是有使用者 才發現資料抓不了的情況) ▪ 用 Module / Concern 組織大量 spider 的共用邏輯;以及最重要的 工程判斷——什麼時候該修、什麼時候該直接刪掉。 01 講者時間 RubyJam · COSCUP 2026
  8. Locale 何處尋:從 Accept-Language 到 UGC Fumi 8/9 11:30 # rails

    # i18n 02 相關技術 Accept-Language i18n Translation Key YAML 語系檔 UGC Accept-Language 瀏覽器發請求時,會自帶一張「我想看什麼語言」的清單與權重,伺服器照著挑語系— —但這個值常常不可信。 瀏覽器發出請求 夾帶 Accept-Language: zh-TW;q=0.9, en;q=0.8 demo.rb # config/locales/zh-TW.yml # zh-TW: # hello: "你好" I18n.locale = :"zh-TW" I18n.t(:hello) # 從 Accept-Language 推出 # => "你好" Rails 依權重挑出 locale # 換㇐份 YAML,同㇐個 key 變日文 讀 zh-TW.yml → 顯示中文 02 情境與技術 RubyJam · COSCUP 2026
  9. 02 Locale 何處尋:從 Accept-Language 到 UGC Fumi 8/9 11:30 #

    rails # i18n 講者時間 · 個人議題大綱 ▪ 在這個議程中你將遇到... ▪ 可愛又迷人的反派角色 Accept-Language ▪ 叫 mobile dev 傳 locale,卻收到謎之怪值... ▪ 反派大魔王 UGC 02 講者時間 Q 大神幫幫我! Accept-Language的可信度好像在mobile的環境不是那 麼高 ,最後要相信什麼才能真的符合我的語境? RubyJam · COSCUP 2026
  10. 03 聊聊 Ruby 3 的 ReDoS 防禦:吃瓜設計權衡、整合 Rails 實踐、窺探 Regexp

    未來動向 Kasa 8/9 13:30 # 資安 相關技術 點 Regexp Backtracking ReDoS Regexp Timeout Timing Attack ReDoS(回溯爆炸) Regex 比對失敗會不斷「回頭重試」;刁鑽的輸入能讓重試次數指數成⾧——攻擊者一 行字串就能拖垮整台伺服器。 Regex 引擎回溯重試 次數指數爆炸 demo.rb Regexp.timeout = 1.0 惡意輸入:"aaaa…aaaa!" # Ruby 3.2 的全域保險絲 /(a+)+$/ =~ ("a" * 30 + "!") # 沒有 timeout:回溯約 2^30 次,CPU 卡死 # 有了 timeout:1 秒後丟出 # Regexp::TimeoutError → 伺服器活下來 CPU 100%,整台伺服器卡死 防線 — Regexp Timeout 超過時限就直接中止比對 03 情境與技術 RubyJam · COSCUP 2026
  11. 03 聊聊 Ruby 3 的 ReDoS 防禦:吃瓜設計權衡、整合 Rails 實踐、窺探 Regexp

    未來動向 Kasa 8/9 13:30 # 資安 講者時間 · 個人議題大綱 「每次提起升版就被已讀。」 ▪ 拆解 2026 年兩起真實 ReDoS CVE( CVE-2026-1388、 CVE-2026-33169) ▪ Rails 實踐:整合 Regexp Timeout Q 大神幫幫我! Timeout 設太短會會影響到正常請求、設太⾧又擋不 住攻擊,那要如何抓取適洽的Timeout,又能滿足資 安的需求呢? ▪ 從 ReDoS 延伸到 Timing Attack ▪ RubyKaigi 2026:Regexp JIT 最新動向 03 講者時間 RubyJam · COSCUP 2026
  12. 你的 ruby.wasm 在手機上會壞 Mu-Fan 8/9 10:10 # Webassembly # ruby.wasm

    04 相 關技 術 WebAssembly ruby.wasm Jekyll WebAssembly(Wasm) srand · seed 手機瀏覽器限制 Ruby 程式碼 瀏覽器原本只認識 JS。Wasm 是瀏覽器看得懂的「組合語言」,讓 Ruby 不經過後端、 直接在網頁裡執行。 編譯成 .wasm 二進位檔 demo.rb require "js" # 載入瀏覽器橋接 # 直接操作網頁畫面 doc = JS.global[:document] doc.getElementById("app")[:innerText] = "Hello, Ruby!" puts (1..10).sum # => 55,前端自己算 04 情境與技術 瀏覽器內建 Wasm VM 直接執行 不需要後端伺服器 — 斷網也能跑、攤位現場零依賴 RubyJam · COSCUP 2026
  13. 04 你的 ruby.wasm 在手機上會壞 Mu-Fan 8/9 10:10 # Webassembly #

    ruby.wasm 講者時間 · 個人議題大綱 ▪ SITCON 攤位擺放程式小遊戲、一千人參與的真實地雷 ▪ 如何用rubyVM.eval + StringIO + srand(seed)把EXPECTED_MAP 整段砍掉 ▪ 三個手機瀏覽器 bug 的 root cause 與修法 Q 大神幫幫我! 同一份 wasm,在電腦上好好的、一到手機就壞, 是怎麼發現問題出在哪一層的?這些碰壁的解方 是如何發現的? 適合對 ruby.wasm、前端 Ruby、或「怎麼把 Ruby 推到 Rails 以 外」有興趣的所有人。 04 講者時間 RubyJam · COSCUP 2026
  14. 05 GVL 對 Rails 延遲的實戰觀測 — 用 Vernier 與 gvl-tracing

    看懂你的 Puma Ken 8/8 14:50 # rails # 效能 相關技術 點 Puma Process · Worker Thread GVL(全域 VM 鎖) GVL Vernier · gvl-tracing Thread 1 MRI 的規則:同一瞬間只有一個 thread 能執行 Ruby 程式碼。開 5 個 thread ≠ 同時跑 5 件事,其他都在排隊。 Thread 2 GVL 鎖 一次放行一個 CPU 同時只跑 1 個 demo.rb t1 = Thread.new { heavy_math } t2 = Thread.new { heavy_math } [t1, t2].each(&:join) # 有 GVL:兩個 thread「輪流」執行 # 總時間 ≈ 單獨跑兩次,完全沒變快 # (等 I/O 時才會釋放 GVL) 05 情境與技術 # 純計算 Thread 3 其餘 thread 都在排隊等鎖—— 這段「等待」就是延遲的來源 RubyJam · COSCUP 2026
  15. 05 GVL 對 Rails 延遲的實戰觀測 — 用 Vernier 與 gvl-tracing

    看懂你的 Puma Ken 8/8 14:50 # rails # 效能 講者時間 · 個人議題大綱 你開了 5 個 Puma thread, 真的同時跑了 5 個嗎? MRI 的 GVL 讓答案幾乎永遠是「不」。 這場演講用 Vernier 與 gvl-tracing, 把 Rails on Puma 那 條看不見的 GVL 等待線直接拍出來給你看。 05 講者時間 Q 大神幫幫我! Puma 有可以執行proces還有thread 這兩者的使用情 境與搭配通常會因為什麼時候的情況有所調整或是 fork呢?請分享一下你的經驗吧! RubyJam · COSCUP 2026
  16. 06 讓 AI 接管你的應用,打造微秒級無縫的 Ruby 安全沙盒 蒼時弦也 8/9 14:10 #

    AI # Webassembly # Sandbox 相 關技 術 Sandbox WebAssembly MCP Sandbox(沙盒) 把不信任的程式碼(例如 AI 當場寫的)關進隔離環境執行——出錯、被攻擊,都傷不到 外面的正式系統。 Kobako 正式系統(Host) Kobako 沙盒 AI 生成的程式碼 在這裡執行 demo.rb sandbox = Kobako.new( limits: { time_ms: 1 } ) druby 宿主的 Ruby 物件 # 微秒級啟動 sandbox.run(ai_generated_code) # 程式再惡意,也只摸得到 # 你「餵」進沙盒的那些物件 就算程式碼爆炸,也只炸在盒子裡; 盒內卻能像 druby 一樣無縫呼叫盒外物件 06 情境與技術 RubyJam · COSCUP 2026
  17. 06 讓 AI 接管你的應用,打造微秒級無縫的 Ruby 安全沙盒 蒼時弦也 8/9 14:10 #

    AI # Webassembly # Sandbox 講者時間 · 個人議題大綱 是否想過能在 Ruby 或者 Rails 的環境中,透過 AI 動態地實作新 功能?  Kobako:實作 Cloud lare 提出的 Code Mode 的 WebAssembly 沙盒 ▪ 受 druby 啟發的無縫互動設計 Q 大神幫幫我! 沙盒聽起來跟開一個 Docker container 很像,兩者的 差別在哪?現在已經有多種方案的啟動速度或許很足 夠,為什麼想要做到「微秒級」啟動? ▪ 駕馭工程(Harness Engineering)重要支線的實踐 「如何安全運行程式碼」的核心,分享 Kobako 的開發與探索過 程,展現一個善用 Ruby 語言特性而生的安全沙盒。 06 講者時間 RubyJam · COSCUP 2026
  18. Stoplight: Circuit Breakers for Ruby in the AI Era 07

    Georgy Asfur 8/8 14:10 # rails # 穩定性 相關技術 點 Circuit Breaker Cascading Failure Stoplight gem Redis Lua Script Circuit Breaker(斷路器) 靈感來自保險絲:外部服務連續失敗就「跳電」停止呼叫,避免一顆骨牌(變慢的 LLM API)推倒整個系統。 demo.rb light = Stoplight("openai-api") { call_llm! # 真正的外部呼叫 }.with_fallback do "服務忙碌中,請稍後再試" end 綠燈 正常放行每一個請求 黃燈 冷卻時間到,放一個請求試探 紅燈 停止呼叫,直接回 fallback light.run # 連續失敗 → 轉紅燈 → 直接回 fallback 失敗累積 → 轉紅|冷卻結束 → 轉黃試探 試探成功 → 回綠 07 情境與技術 RubyJam · COSCUP 2026
  19. 07 Stoplight: Circuit Breakers for Ruby in the AI Era

    Georgy Asfur 8/8 14:10 # rails # 穩定性 講者時間 · 個人議題大綱  慢的第三方 API 會引發連鎖故障,拖垮整個 app。 Q 大神幫幫我! A slow third-party API can cascade into a full outage.  2026 年連小新創都在串 LLM、OCR 等服務。 In 2026 even small startups depend on LLMs and OCR.  每次外部呼叫都是潛在骨牌,該裝上斷路器。 現在的功能中,好多都需要介接 LLM API 的服務, 大家有沒有在使用的過程中碰到什麼壁呢? 請分享看看吧! Every external call is a domino — add a circuit breaker.  Stoplight(MIT gem)用紅綠燈比喻更直覺。 Stoplight (MIT gem) uses an intuitive traf ic-light model.  後半:用原子化 Lua script 提升 Redis 效能。 Many of today's features need to integrate with LLM API services. Have you run into any roadblocks while working with them? Feel free to share Part two: atomic Lua scripts boost Redis performance. 07 講者時間 RubyJam · COSCUP 2026
  20. 從 2026 年 3 月 Rails 安全更新看三個常見的設計陷阱 Cindy 8/8 10:50

    # rails # 資安 08 相 關技 術 Trust Boundary XSS Path Traversal Glob Injection 不完整修補 Path Traversal(路徑穿越) 攻擊者在檔名裡塞 ../..,讓程式一路「往上爬」,跳出網站資料夾、讀到不該讀的系統 機密檔案。 demo.rb # NG:filename 可能是 ../../etc/passwd File.read(params[:filename]) # OK:先把路徑「鎖」在安全資料夾裡 base = "/app/files" path = File.expand_path(params[:filename], base) raise "可疑路徑!" unless path.start_with?(base) 網址參數: ile=../../etc/passwd File.read 直接吃下輸入 跳出 /app,讀到系統機密檔 防線 — expand_path 展開真實路徑後, 檢查是否仍在安全資料夾內 08 情境與技術 RubyJam · COSCUP 2026
  21. 08 從 2026 年 3 月 Rails 安全更新看三個常見的設計陷阱 Cindy 8/8

    10:50 # rails # 資安 講者時間 · 個人議題大綱 ▪ 2026/3/23 Rails一次釋出三版本,近年來規模最大的修補 ▪ 歸納三類常見設計陷阱: 信任邊界錯置、檔案 API 吃下未過濾輸入、不完整修補 ▪ 每個陷阱會搭配實際漏洞程式碼與修補方式解說,提供可立即 套用的檢查清單 Q 大神幫幫我! 很多資安漏洞 Rails 官方都會修正升版,但我們自己 寫的程式碼的時候,要怎麼有系統地檢查有沒有踩到 資安的陷阱? 聽眾不需要資安背景,只要寫過 Rails 應用就能理解。 08 講者時間 RubyJam · COSCUP 2026
  22. Building Native Mobile Apps Using Rails Nebiyu Elias Talefe 8/8

    13:30 # rails # 行動裝置 09 相關技術 點 Hotwire Native Turbo Strada WebView App 上架 Hotwire Native 用 Rails 產生的網頁畫面,包進 App 的「殼」裡顯示;Strada 再讓網頁能呼叫真正的原 生 UI 元件。 Rails Server:產生 HTML 畫面 App 殼(WebView)顯示網頁 demo.rb class PostsController < ApplicationController def index if turbo_native_app? # 請求來自 App 殼 render :app_index # 給 App 的精簡畫面 else render :index # ㇐般網頁 end end end 09 情境與技術 Strada 橋接 → 呼叫原生 UI 元件 一套 Rails 程式碼 — 網頁 + iOS + Android 三個平台 RubyJam · COSCUP 2026
  23. 09 Building Native Mobile Apps Using Rails Nebiyu Elias Talefe

    8/8 13:30 # rails # 行動裝置 講者時間 · 個人議題大綱 ▪ Rails 是成熟的 Web 框架——但能拿來做原生 App 嗎? Can Rails build native mobile apps too? ▪ 像 React Native / Flutter:寫一次,兩大商店都能上,省成本、 省人力。 Write once, ship to both the App Store and Play Store. ▪ 用 Rails 也能做到:前後端不用維護兩套,一開始就享有 Rails 的威力。 Q 大神幫幫我! 跟 React Native、Flutter 相比,什麼類型的 App 適 合使用 HOTWIRE ? Compared to React Native and Flutter, what types of apps are suitable for using HOTWIRE? No separate apps for mobile and backend. ▪ 用 Hotwire Native 做真正原生 App,搭配 Strada 以 Web 技 術做原生元件,並分享 starter template。 Hotwire Native + Strada, plus my starter template. 09 講者時間 RubyJam · COSCUP 2026
  24. 10 The Deterministic Rubyist: Taming Your AI Pair Programmer with

    Nix Pawel Lisewski 8/8 10:50 # 環境開發 # Nix # AI 相 關技 術 Nix Nix Flake 確定性 Gem ile 對比 Nix Flake(確定性) AI Pair Programmer lake.nix 環境說明書 一份 lake.nix = 完整的環境說明書。任何機器照著裝,結果 100% 相同——徹底終結「 在我電腦可以跑」。 demo.rb # Gemfile:只鎖「gem」的版本 gem "rails", "8.1.2" 你的電腦 CI 伺服器 AI Agent # flake.nix:連 Ruby 本身、系統函式庫、 # CLI 工具全部鎖定—— # 你、CI、AI Agent 拿到的環境 # 逐 byte 相同 三個環境逐 byte 相同—— AI 不用再「猜」你的環境⾧什麼樣 10 情境與技術 RubyJam · COSCUP 2026
  25. The Deterministic Rubyist: Taming Your AI Pair Programmer with Nix

    10 Pawel Lisewski 8/8 10:50 # 環境開發 # Nix # AI 講者時間 · 個人議題大綱 ▪ AI coding agent 像「高速實習生」:放太鬆會搞垮系統,綁太緊又 會亂編。 Q 大神幫幫我! The ix isn't more docs or prompts — it's a better contract. ▪ Nix(確定性套件管理器)是人與 AI 的橋樑:從「我機器上能跑」 到「合約裡能跑」。 A Nix Flake = a cryptographic receipt of every dependency. ▪ 用 Rubyist 的語言理解:Gem ile→Flake、Lock ile→Lock,讓 AI 拿 到正確工具。 大家在用 AI coding agent 幫忙寫程式時,有沒有遇過 「在我機器上明明跑得好好的」、換個環境就壞掉的 狀況呢?都是怎麼確保 agent 拿到的工具和環境是一致 的?想聽聽大家的經驗與踩雷分享! The Bundler analogy: shared context, exact tools (e.g. ruby-lsp). ▪ 安全即助力:Nix + Docker 打造「有原則的沙盒」,並用 Double Gem ile 管理專屬工具。 Principled sandboxes from my open-source AI sandboxing tool. 10 講者時間 RubyJam · COSCUP 2026
  26. Ruby on Ruby: ruby/spec, MRI Tests, and JRuby and Living

    on the Edge 11 Sampo Kuokkanen 8/8 11:30 # Ruby 核心 # 多實作 相關技術 點 MRI · CRuby JRuby Truf leRuby Runtime 多實作 ruby/spec ruby/spec(語言規格測試) ruby/spec 語言規格考卷 一套「Ruby 該有什麼行為」的官方考卷。任何實作——不管用 C、Java 還是 GraalVM 寫 ——通過它,才算是 Ruby。 demo.rb # ruby/spec:「Ruby 該⾧怎樣」的考卷 describe "String#upcase" do it "returns an upper-cased copy" do "ruby".upcase.should == "RUBY" end end # MRI / JRuby / TruffleRuby 都得通過 11 情境與技術 MRI (C 語言) JRuby (JVM) Truf leRuby (GraalVM) 都通過同一份考卷 → 跑同樣的 Ruby 程式,行為必須一致 RubyJam · COSCUP 2026
  27. 11 Ruby on Ruby: ruby/spec, MRI Tests, and JRuby and

    Living on the Edge Sampo Kuokkanen 8/8 11:30 # Ruby 核心 # 多實作 講者時間 · 個人議題大綱 ▪ Ruby 有多種實作;CRuby(MRI)是官方參考實作。 CRuby (MRI) is the canonical reference. ▪ JRuby 跑在 JVM 上,已到 Ruby 4.0,可上線使用。 JRuby on the JVM, now at Ruby 4.0 — production-grade. ▪ Truf leRuby 在 GraalVM 上(3.4,4.0 開發中)。 Truf leRuby on GraalVM (3.4, 4.0 underway). ▪ 目標都是跑同一份 Ruby(gem、Rails、腳本),卻用不同語言、VM 與內部結構打造。 Same gems, Rails, scripts — different languages, VMs, data structures. So how do they agree on what Ruby actually is? 11 講者時間 Q 大神幫幫我! 一般開發的時候,什麼情況下才會真的需要換到 JRuby 或其他的 MRuby?會選擇的原因與經驗又是什 麼? In general development, under what circumstances would it be necessary to switch to JRuby or other MRuby implementations? What are the reasons and experiences behind choosing them? RubyJam · COSCUP 2026
  28. Audience Q&A The Slido app must be installed on every

    computer you’re presenting from