概要
SmartHRさん主催のRubyKaigi 2024事後勉強会で初参加枠のLTをしました🎤
思い出を振り返りつつ、Quineに挑戦した経緯を書きました✏️
LT資料
こちらです🔽 今見たら予想以上に閲覧されててビビるな…。
改めて言っておきたいのですが、私がRubyKaigiで楽しめたのは、フィヨルドブートキャンプの援助でエモリハウス & ヤダハウスに滞在させていただいたのが大きいです🙇
本当にありがたかったです!お世話になりました🙏
登壇の経緯
アフターパーティーでmktakuyaさんに声を掛けられたことがきっかけです!
mktakuyaさん「初参加枠で登壇する人探しているんですよ〜」
私「いいっすよ〜(connpass参加登録ポチー)」
で、初めましての状態からものの数分で登壇が決まりましたw
折角のご縁だし良い機会だからやってみるか〜と軽いノリでOKしたのでした。(この当時、勿論話すネタは考えていない)
mktakuyaさん、SmartHRさん本当に素敵な機会をありがとうございました!
Quineに挑戦
まず作品の紹介をします。 スライドだとリポジトリを雑に示しているだけなので、スクショを貼って説明します。 LTでは2作品紹介しました。
その1
実行すると"2024"が表示される
パイプで渡しても実行できる
"next"を引数で渡すと"2025"に表示が変わる
パイプで渡しても実行できる
その2
実行すると"2024"が表示される(その1と同じ)
"matz"を引数で渡すと"20024"に表示が変わる...※1
これもパイプで渡しても実行できる
※1...RubyKaigi2024に参加した方ならわかるネタ。Matzが"2024"を"20024"と書き間違えてしまい弄られていたのでした。
補足
補足しておきたいのですが、このコードは厳密にはQuineと言えないんじゃないかなあと思っています。 Quineは「自分自身のソースコードを出力するプログラム」です。これらの作品はよくみるとコードが変わっているのがわかると思います。 赤枠の部分が変化している部分です。
引数なし
引数あり
なので「Quineを出力するコード」というのがより正確な表現だと思います。
このリポジトリで試せるので、良かったらCodespacesでサクッと試してみてください🔽
作成の経緯
RubyKaigi 2024のtompngさんのself TRICKに触発され、これは自分で作ってみたら絶対面白いじゃん!とノリノリで挑戦しました。 以下のサイトや書籍を参考にしました。
- Ruby で書く! Quine AA!
- Ruby でうどんげ Quine(と AA 型 Quine の作り方講座)
- クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
- RubyKaigi 2024 をきっかけに Quine に入門してみた
- あなたの知らない超絶技巧プログラミングの世界
コードを写経して感覚を掴み、引数で条件分岐させるアレンジを盛り込みました。 なので、どうやったらできるようになるんですか?の問いの答えはまず写経してみることですかねぇ...。それしか言えないかも。 これらの記事で丁寧に解説されているので詳細説明は割愛します。必見です。
私が苦戦したポイントは以下です。
- "2024"の"0"の部分は自分でAAを作成したので整形がしんどかった
- 画面を凝視して疲れた。AA職人さん凄いよ!
- AA化するソースコードの文字数とAAの文字数のバランス調整
- 本当は"2024", "2025", "20024"を合わせた1つの作品にしたかったのですが、文字数調整で断念しました
- 引数による条件分岐
- コード中で#を使うとコメントになってしまうので、
["_=\"#{ARGV[0]}\";"]'
で表現している
- コード中で#を使うとコメントになってしまうので、
最後に
恐縮なのですが、最近いっぱいLTしてて凄いね〜と褒められることが多いです。 就職に有利だからですか?と質問されることもあるのですが、就職のためと考えると肝心の自分が楽しめないのであまり意識しないようにしています。そりゃ就職に繋がったら嬉しいけどね!! 発表はいまだに緊張するけど、もうウケた時が最高に気持ちよくて報われた気持ちになります。
他の登壇者のように技術のすごい話はあまりできていないかもしれないのですが、その分(?)オーディエンスと一緒に楽しむマインドの部分は自信を持っています💪 折角時間を割いてくれているのだから楽しませたいし、楽しみたいなあと思っています〜!
もし今後LTの機会があればフラッと聴きにきていただけるととても嬉しいです!!!