YAPC::Hiroshima 2024に参加しました

YAPC::KyotoぶりのYAPCということでYAPC::Hiroshima 2024に参加してきました。お久しぶりの参加者の方々、運営していただいたスタッフの方々共々ありがとうございました。

印象に残ったトーク

  • 2024年冬のPerl
    • 5.40ではTest2::Suiteがコア入りということを聞いて、Test2にお世話になっていた身*1としてはめでたいという気持ちになりました
    • CPAN Security Groupまわりの話は追えていなかったので発表で知って、興味もあり何か貢献できるといいなと思いつつまずは周辺をウォッチしていこうと思います
  • Blogを作り、育み、慈しむ - Blog Hacks 2024
    • 自分は発信のハードルが年々上がっていて(自分の中で)、ブログもほぼ書かなくなってしまったなあというところで何か忘れている気持ちがあったと思い出させてくれる発表でした。家としてのブログを作りたい……
    • 発表で触れられていたIndieWebの考え方、素敵ですね
  • 非同期な開発体制を支えるドキュメント文化
    • 懇親会にて、発表者のこんぼいさんに発表で触れていたConfluenceの別の使い方として「しっかりとしたドキュメントとは言えないけどちょっとしたやってみた記事とか、知見の共有みたいなのってどう管理してますか(自分はConfluenceのブログ機能を使っているのだけど気に入っていない)」とかを聞いたりできて嬉しかったです(ありがとうございました!)
  • rakulangで実装する! RubyVM
    • Rakuの話があってよかった、これぞYAPC!
    • そういえば拙作のJSON::Hjson*2はzefに移行してなかったなあと思い出して、せっかくなので帰ってきて上げました。YAPC駆動とも言えます

Perlbatross

KAYACさんのほうでPerlコードゴルフをできるPerlbatrossというサイトがYAPC中の期間限定で公開されていました。 会場の椅子にチラシが貼られていて、確実に目に入る位置にあって気になって遊んでいたのですが、終わり際、ちょうど隣に座っていたsago35さん(かなり縮められていてその時点では1位だった方)と話すきっかけにもなってよかったです。

最初はコードゴルフとして縮めていたのですが、ふとPerlのコードを実行してくれるサーバのソースコードを覗きにいったときに(warn `tar czf - lib | base64`とかすると中身が持ってこれる)、何やらチートできそうな構造になっていることに気がつきました。実装としては、TAP::Harnessを経由して/var/run/judge_local/test.tを実行する、このファイルの中でevalしながらCapture::Tinyでstdoutとstderrを拾って逐次テストを動かすということをしています。

色々と悩んだ結果*3、テストを実行する側のコードを変更してまえばどうにかなることに気がつきました。よって最終的には以下の11バイトのコードですべてのテストが無理矢理通るようになりました。

*::is=*::ok

このコード自体はTest2::V0のisで比較している処理をokに書き換えていて、つまりは元のisの第一引数はfaslyな値ではないので通ります。……とズルをしてしまってすみません(全Holeこれで通るはずですが、さすがに全部これで埋めるのは面白くはないのでHole 1だけ勝手に試させてもらいました)。

ちなみにちゃんとしたゴルフをしたときのHole 1のコードはこんなかんじでした。真っ当にゴルフをして全然これ以上に縮めている人がいました。難しい……

binmode STDIN,utf8;while(<>){chomp;$i=@a=();$a[$i++%2].=$&while/\X/ug;print"@a$/"}

この手のイベント用の遊べる何かというのは準備が大変だったりしそうですが、自分はかなり好きです。提供ありがとうございました&&来年も期待しております🙏 > KAYACさん


以前はYAPCトーク応募して登壇していたのですが、気がついたら最後の登壇は2019年のYAPCでした。次のYAPCでは気持ちの上ではPerlネタを発表したいのですが、仕事ではPerlを書いていないのです……。とはいえあの頃の気持ちを思い出させてくれる、そんなYAPCでした。来年こそという気持ちをこめて。

*1:以前には https://speakerdeck.com/akiym/xin-shi-dai-falsetesutohuremuwakutest2 という発表や https://gihyo.jp/dev/serial/01/perl-hackers-hub/005101 を書かせてもらっていました

*2:Hjsonをgrammerで実装するという半分実験的ネタモジュールなのですが、地味にこれを作っていたお陰でJSON::Fastのバグを見つけたりできて便利でした

*3:最初はCapture::Tinyを外してTAPの形式をstdoutを出力させられないかというのを考えましたが一見難しい気はしています。あとはENDブロックに置くとstdoutに書き出せるな(TAP的にはinvalidになってしまってだめ)とかexitするとテストも全部終わらせられる(テストが1個もないケースはfail扱いになるのでだめ)とか。