RubyKaigi 2024 Day 1 part1

2024-05-15の日記。

感想が長くなったので分割する

8時に起床。今年のキーノートは11:00からで時間に余裕があったのと、昼ご飯を食べられる精神状態になるか分からなかったのでホテルで朝食を取ることにした。ホテルは会社が取っていてくれていたので朝食券がついていた。普段朝食付けないけど朝食券ついててよかったなーと思った。朝食会場に同僚がいたのでご相伴させてもらって少し発表に向けて張り詰めた気持ちが和らいだ。デザートに紅芋タルトを食べて美味しかった。

朝食後にリハーサルをしたりスピーカーノートを書き足したりした。

本当にリハーサルが苦手。30分かかるのがわかりきっていることを30分やりたくないという気持ちがある。諦めて話し始めると別に苦痛ではなかったりするんだけど...

スライドが一本道ではなくて話し言葉によってふわっとしたスライド間のつなぎをしたかった(そしてそれをアドリブでやるのは苦手)なのと、スピーカーノートがないことで通訳さんとの打ち合わせで負担をかけてしまっているのが気になっていたので今年はわりとがんばって書いていた。9:28の時点で2/3あったので過去最大だったかもしれない

RubyKaigi 2024で最も楽しみにしていたぺんさんのキーノートを最前列で聞きたかったので10:30頃に会場着。Day 0とは打って変わって天気が良くてハッピーな気持ちで会場に向かった。石垣島より暑くなくて過ごしやすい天気だった。向かいながらRubyistと思わしき人たちを見かけ、RubyKaigiに行くのだという気持ちが高まる。

今年も入口でkakutaniさんに出会えて嬉しく思う。一緒に記念撮影をした。

ついてブースエリアをうろうろしていたら会社のメンバーの記念撮影現場に遭遇した。すっかり忘れていたので出会えて良かった。社Tシャツを着ていなかったので一人だけスピーカーかりゆしで少し恥ずかしかった。発表で使うために持ってきてはいたが...

スピーカー名のうちわを作ってもらっていたので自分で抱えて撮ってもらった。

ちなみに社のメンバーはこの写真に映っているよりもっと来ていた。総勢23人だったらしい。人に聞かれたときに15人くらい...??と答えていたので、ちゃんとメンバー数を把握しておけばよかった。

初日キーノートは満席近くになりそうなので早めに会場入り。

10:37にはこのくらいの空席

10:49には1階席はかなり埋まっていた。

Rubyistsを撮る松田さん

そして2本のスポンサートークの後、ついにぺんさんのキーノートの開始。

スライド: rubykaigi2024_keynote_tompng.pdf - Google ドライブ

いろいろあるので箇条書きで感想

  • 石垣島とか西表島のRubyKaigi公式素材はなかった気がするから、自作地図...?と思ってテンションが上がる
  • 今すぐ gem install repl_type_completor
    • もっと認知度高めたい(そしてデフォルトにしたい)
  • 普段なら回転するRubyでも「おおー」と思うのに隣の金魚鉢がすごすぎてQuineへの感覚がインフレしはじめる
  • 金魚鉢はなんど解説されても「なるほどわからん」になるので楽しい
  • short code のウーパールーパーみたいなやつはSlackで見たことある!と思ってテンションがあがる(しかしどんなものだったかは思い出せない、見た目しか覚えていなかった)
  • 演算子が連続するコードのところ、演算子はどこまで繋げられるんだろう?と思う好奇心やその意味を理解していく姿勢がクールだなーと思った。
  • ヒアドキュメントを貼り付けてIRBがバギーな挙動をしてもヒアドキュメントだしな....って思っちゃう。ヒアドキュメントは難しい。
    • でも、実際Railsのコードべたって貼り付けたときにすこし複雑なヒアドキュメントが含まれててインデントとかがおかしくなったりするとちょっと困ったりするので、ヒアドキュメントだからなとか思ってるとお仕事のちょっとした困りごととして現れてきたりする。
    • そういうのを直してもらえるのはとてもありがたいなぁと改めて思った
  • 最前列で見てると周りの熟練Rubyistから「え?」「は?」「まじか」みたいな反応が聞こえてくるのが超楽しかった
    • 奇妙なコードを見ながら周りのRubyistと一緒になって笑えるのもすごく体験良かった
  • __END__ 後にinvalid byteを書ける、そしてbinding.irbの周辺コード表示で困る、わかる。。
  • Emojiをインスタンス変数にするという発想がなかった
    • マルチバイト文字がメソッド名やシンボルに使えるということは知っている
    • なのに変数名に使う発想はなかった
    • 悪だくみ力が足りない
  • Keycap emoji のバイトの特徴もしってる
    • が、こんな奇妙なコードとして表現できるとは......
    • こういった特徴があると知っていることとその特徴を活かした使い方を考えるということは全然違うものだと思った
  • あらためてスライドを読み返すと、!1️⃣2️⃣...IRBがkeycap emojiのColorizeに失敗するのはなんでだろう?
    • Rubyが解釈できないからぽい
      • いいかんじに解釈できるように活用したのがWeird Code Encoding:utf-8ということなんだな
    • 以下メモ

マルチバイト文字も変数に使えるけどkeycapはだめ

ruby -e "1️⃣ = '1'"
-e:1: syntax error, unexpected local variable or method, expecting end-of-input
1️⃣ = '1'
-e: compile error (SyntaxError)

これは通る 10は U+1F51F だから

ruby -e "🔟 = '10'"

0は U+0030 U+FE0F U+20E3 のバイト列が連続することで成り立っている。U+0030 はASCIIの 0

"0️⃣".each_codepoint.map { _1 }
# => [48, 65039, 8419]

というわけでkeycap emojiはIntegerの直後にくっつけられない文字列が続いているという解釈になるからかなぁ

bugsにもkeycap emojiへの言及があったりする。

Bug #10593: Emoji is been considered as comment - Ruby master - Ruby Issue Tracking System

感想の続き

  • 文字コード遊びは楽しい
  • 正規表現で計算するやつはなにもわからなかった。はえ
  • 一意に定まらない @@a まじかーってなってた
  • TRICK was the trigger for me contributing to IRB / Reline - TRICK 2022のあとしばらくしてからぺんさんがIRB/Relineにもりもりバグ報告したりPR出してくれるようになった記憶 - なつかしい

  • 日常パート?
    • からのSelf TRICK! お祭りきたー!
  • Most Floral
    • まず度肝を抜かれる。
    • ASCIIの下位1bitに色情報を入れるとはどういうこと...? 何ビットかの組み合わせで色を表現している?
    • xxd でダンプしてみたけどよくわからなかった
  • Most Fresh
    • 会場の外の壁で見たやつきたー!となりテンションが上がる
    • require 'js' までは視認していたのでWASM関連だとは予想してたけど想像以上だった
    • グッとコードに近寄っていくカメラワークが好き
  • Most Wavy
    • コードを構成する文字そのものが横移動するのが美しい
    • 端末の背景を青くして文字を白くして波みを演出しているのがテクい
    • 下のコードはたぶんどこに空白文字を入れてもいいようになってるんだろうなぁ
  • Most Dangerous
    • クラゲ一番好き
    • 点字文字の活用
    • 端末のマウスイベントを取って反応するところ、クラゲのリアクションを計算してるところが好き
    • マウスイベントどうやったら取れるんだろう
  • Most Kaigi-ish
    • 素のIRB向けに使ってる
    • ハッピーハッピーなダイアログで楽しい
    • とはいえレンダリングされすぎるとデバッグで困るときがあるかもだから環境変数で切り替えできるようにした
    • こんな短いコードで出来るんだ... IRB theme RubyKaigi2024 · GitHub
    • RubyKaigi前のあるときにぺんさんと話しててIRBを見せてもらったらこれが使われてて声上げてびっくりした記憶
if ENV['DEBUG'] != '1'
  require 'irb/theme/rk2024'
else
  Reline::Face.config(:completion_dialog) do |conf|
    conf.define(:default, foreground: "#f8f8f2", background: "#282a36")
    conf.define(:enhanced, foreground: "#f8f8f2", background: "#44475a")
    conf.define(:scrollbar, foreground: "#ffb86c", background: "#6272a4")
  end
end
  • Most Eternal
    • ミンサー織りはじめて知った
      • 石垣島でよく見る意匠でRubyKaigiロゴにも使われていたので気になってた。知れて良かった
    • Sixelの活用方法だーー!!!!
      • Alacrittyで流したら色が表示できなかったのでiTerm2で実行したら無事表示された
      • 紡いでる感があって楽しい
      • seedが出るのべんり
    • minsa.rb がミンサー織りでおしゃれ
    • いつの世までもにうるっときてしまった
  • 通しでの感想
    • 随所にこれからはじまるRubyKaigiのトピックへの言及があり、これからのRubyKaigiが楽しみになるキーノートだった
    • 見て楽しい、聞いて楽しい、説明されてもわからない、と楽しいことずくめだった
    • マウスイベントの取得、Sixelなど端末のニッチな機能を活かした表現が多くて楽しい
    • Rubyへの好奇心や探究心をくすぐられる話だった。自分もTRICKyなコードを書いてみたくなったし、Rubyの複雑なSyntaxを知ったり遊んでみたくなった

いやー最高のキーノートだった。ありがとうございました!

長くなりすぎたので一旦ここで切る。Day 1の続きはまた後日