@ledsun blog

無味の味は佳境に入らざればすなわち知れず

#RubyKaigi2024 の思い出 その1

Day 0

移動日でした。 生憎の雨でしたが、ホテルから那覇港船客待合所まで歩いて行きました。 夜の那覇ブレード・ランナーっぽさがあります。

埠頭近くのステーキ屋さんを遠くから撮った写真

永和システムマネージメントさん提供のクルージングに参加しました。 Dominion525さん、m_pixyさん、htkymtksさんなどと再会しました。 同窓会感があります。

Rubyistインスタンスを詰め込んだコンテナ船の画像

machidaさんたちと一緒にご飯を食べました。 SimpleFormの人に法人チェック業務の話などを教えてもらいました。

船からの岸をみた写真、生憎の雨

koicさんと2次会に行きました。コロナ以降出会ってなかったkoicさんでした。 謎の嗅覚で日本酒の美味しいお店を探しあてられてました。 スピーカーのjunk0612さんydah_さんS-H-GAMELINKSさんとコミッターのnobuさんとKaigi on Railsオーガナイザーのokuramasafumiさんの濃いメンツだったような記憶があります。

Day 1

前日とは打って変わっての快晴です。 会場はなはーとです。 網網のデザインが沖縄建築っぽくてかっこいいです。

RubyKaigi2024の会場のなはーとの写真

なはーとの看板の写真

Writing Weird Code

tompngさんのKeynoteがすごかったです。 Trick2024すごかったです。 ruby.wasmが使われていて嬉しかったです。 irbのテーマもそうなのですが、テキストなのにアニメーションがぐりぐり動くのがすごかったです。

irbの補完ダイアログのテーマの画像

Ruby 3.4ならirbのRubyKaigi2024用テーマがすぐに使えます。

rbenv install 3.4.0-preview1
gem install irb-theme-rk2024
echo 'require 'irb/theme/rk2024' > .irbrc

lunch

お昼ご飯は yuki82511988 さんの紹介で、「玉城豆腐のみそ汁屋」さんでみそ汁を食べました。 neko314_さん、ydah_さんと一緒でした。 ここでもフィヨルドブートキャンプの影響力を感じます。

みそ汁の写真

沖縄で「みそ汁」というとこういうスタイルが標準だそうです。 あとでhirocasterさんから教えてもらいました。

Remembering (ok, not really Sarah) Marshal

module Gem::SafeMarshal - Documentation for Ruby 3.3 を作った話でした。 外部でMarshal.dumpされたデータをMarshal.loadすると、任意のコードを実行される可能性があります。 RubyGemsでは、gemのインストールにMarshal.dump/Marshal.loadを使っているので、この脆弱性にさらされる可能性があります。 そこで、Psych.safe_load (Ruby 3.3 リファレンスマニュアル) にインスパイアされたメソッドをつくったそうです。 指定されているクラスだけをdumpするそうです。

使い方はMarshal.loadと同じようです。

Gem.load_safe_marshal
Gem::SafeMarshal.safe_load Marshal.dump(true) #=> true

対処できていないセキュリティリスクもあるそうですが、Marshal.loadをそのまま使うよりは良いので、オススメだそうです。

発表タイトルの「Remembering (ok, not really Sarah) Marshal」がピンとこなかったのですが、「Forgetting Sarah Marshall」という映画のもじりだそうです。 この邦題がひどいんですよ。 寝取られ男のラブ♂バカンス - Wikipedia Wikipediaのあらすじを見る限り内容もひでえんです。 なんでこれをもじったw

Cross-platform mruby on Sega Dreamcast and Nintendo Wii

Add build config for Nintendo Wii by yujiyokoo · Pull Request #6086 · mruby/mruby · GitHubAdded example for cross-compiling for Sega Dreamcast (sh-elf). by sizious · Pull Request #4944 · mruby/mruby · GitHubで、mrubyからDreamcastWiiで動くバイナリを作れるようになりました。 これをつかって、DreamcastでもWiiでも動くプレゼンテーションアプリケーションをつくった話でした。 動機が「それがぼくには楽しかったから」以外なにもないのが、いい話です。

Namespace, What and Why

Feature #19744: Namespace on read - Ruby master - Ruby Issue Tracking System のお話でした。 話を聞く前は「なんでsegmentation faultするんだろう?」と思っていましたが、 話を聞いてみたら「なんで動いているんだろう?」という気持ちになりました。 なるほど、確かに、これが入ったらRuby 4.0になるような偉業に思えます。

tagmorisさんの声が低い音が聞こえるときと高い音が聞こえるときがあって不思議でした。 あとで気がついたのは、マイクの特性のようです。 ピンマイクは高い音を拾って、壇上の備え付けマイクは低音を拾っているようです。

An adventure of Happy Eyeballs

speakerdeck.com

coe401_ さんの発表です。 coe401_ さんの発表は毎回たのしくてわかりやすくていいですね。

IPv4IPv6のデュアルスタックで通信を開始するまでには、それぞれ名前解決とコネクション確立の2つのイベントがあります。 ユーザビリティを考えると、どちらか先に繋がった方で通信開始するのが便利です。 ですが、現在のRubyIPv6IPv4を直列にチャレンジしています、これを並列にチャレンジしようという話です。

並列にするだけなら簡単そうに聞こえます。 実際は2つのソースから4つのイベントが上がってくるのを待つのが難しいです。 ここを愚直に状態を整理しして実装まで持っていた腕力の話でした。

話を聞いているときは、こんな難しいことしなくちゃいけないのか疑問でした。 よく考えると自宅のネットワークはIPv6アドレスは持っているけど、IPv6通信はできない謎環境です。 自宅側が悪いのか接続先が悪いのか切り分けていません。 もしかすると、この恩恵を受けられる環境なのかもしれません。

セッションのあとで、250msのタイムアウト時間の根拠を質問しました。RFCによるとGoogleが自前のネットワーク内で試した結果一番良かった値だそうです。Googleっぽいなって思いました。

Official Party

なはーとから一旦ホテルに帰って、コージービーチクラブまで歩いて移動しました。 天気がよいので那覇の街並みが楽しめます。 沖縄ではボウリング場の名前もダジャレです。

サラダボウルというボウリング場の写真

ボウリング場の手前に写っているのは自動車教習所の練習コースです。 自動車教習所とボウリング場はセットになりやすいみたいです。 その昔、調布自動車学校にもボウリング場が併設されていたことを思い出しました。

集合場所と会場がちょっと離れていたので、みんなでてくてく歩いて行きました。

海辺を歩くRubyist達の写真

バーベキューのお肉は tatsuoSakuraiさんに焼いてもらいました。

tatsuoSakuraiさんにお肉を焼いてもらっている写真

後半は machida さんと hidenba さんと何かをしゃべっていました。

2次会はmugijiruさんにナンパされて、a5_stableさんとnysalorさんと赤鬼に行きました。 現地の人がふつうに行く飲み屋さんという感じでした。 注文用のリモコンの充電コンセントが、mugijiruさんの足にあって何度も抜けてウケました。 「tompngさんは、高校生の頃から、主に数学方面ですごかったらしい」という噂話が聞けました。