London Perl Workshop 2014に行ってきた

tl;dr: It was really awesome! A big thanks to the organisers and the speakers and everyone.

もろもろありまして、2014年11月8日にロンドンで開催されたLondon Perl Workshopに行ってきました。会期こそ一日こっきりでしたが、予約制のワークショップを含めて都合六トラックも走るという非常に盛りだくさんなイベントで、当日は本当に身体が二つ三つ欲しいと思ったことでした。資料は少しずつ公開されているようですが、ひとまず参加できたセッションの情報をごく簡単にまとめておきます。

Booking.comで開発されているSerealというモジュールの紹介。この分野で伝統的に使われてきたコアモジュールのStorableはシリアライズしたデータの互換性に問題があったり(これが長らくBooking.comで使うPerlのバージョンを上げられない大きな要因のひとつになっていたそうな)、早すぎるオブジェクト化によるセキュリティ上の問題があったり、類似のモジュールの中ではかなり遅いという問題があったりするのですが、Serealではその辺の問題をうまく解決しているとのこと(仕様の明確化。圧縮しないヘッダ部と圧縮可能なボディの分離。漸次アップグレードのためにエンコーダ・デコーダの分離。オブジェクト化は最後にまとめて実行。循環構造を持つデータの対応。Perlの内部構造を上手に利用した効率化、などなど)。各言語のバインディングはすでにあるものの、PerlとGo以外の実装の完全性はまだ十分に検証できていないそうですが、特にJavaバインディングについては同社で多用しているHadoopなどに安心してデータを投げられるように完成度を高めたいという話もされていました。

同名のRuby gemを移植したというToggleモジュールの話と、グラフを使った監視の話の二本立て。前者は新機能の導入時など、いきなり新しいコードを全体に投入するのではなく、条件によって機能を切り替えられるようにしておいた上で、外部のデータソースからその条件を取得するようにしておくと、一部の人にだけ新機能を提供するとか、新旧機能の入れ替え(差し戻し)とか、高負荷時にだけ一部の機能を制限するとか、A/Bテストによる各種の問題の切り分けとか、コードの修正をすることなく簡単にできてよいですよ、と。後者は各種メトリックスをNet::Statsdを使ってstatsdに投げ、それをGraphiteでグラフ化するということをしていました。

Yvesさんの二本目のトークPerl 5.18でHash randomizationが導入された経緯と対策の詳細について。また、何がどう問題だったのかの実演。PerlのセキュリティML以外では今回が初公開とのことで大変興味深く拝見しました。やり方さえ知っていればほんの数回の試行でハッシュの秘孔をついてDoSを仕掛けられる可能性があるということで、いまさらな話ではありますが古いPerlウェブアプリケーションなどを提供している方は対策がされている5.18以降にアップグレードするか、各メンテナンスブランチにあたっている対策を忘れずに取り込むようにしましょう、ということですね。

長年にわたってCPAN TestersのメンテナンスをされているBarbieさんによる、さまざまな課題の紹介と協力の要請。氏がいろいろあげていたものの多くは自分のところ(CPANTS)の課題でもあるので身につまされながら聞いていました。とりあえず何かしたいという向きにはApp::cpanminus::reporterを試してみるという課題があります。また、これまで氏らが主宰のBirmingham Perl Mongersが出していた(年額数十万円になる)サーバ代が資金難のため今後捻出できなくなるとの記事も出ています。CPAN Testers Fund経由で寄付やスポンサー企業を募集中とのことでした。

London Perl Workshopでも来年1月31日(〜2月1日)にブリュッセルで開催されるFOSDEM 2015でラリーが「2015 will be the year that Perl 6 officially launches for production use.」という話をする、というニュースで持ちきりでしたが、この手の話が出るたびに「(Perl5の)CPANの資産はどうするんだ」という話が出てきます。現状でもv5というPerl6モジュールを利用することである程度再利用できるようにはなっているのですが、Inline::Perl5というPerl6モジュールを利用すると、XSを含むPerl5モジュールでさえもPerl6から問題なく実行できますよ、というわけで、Perl6からCatalystアプリケーションを動かすデモと、どうやってPerl5とPerl6のギャップを埋めているかというコード例がいくつか紹介されていました(Perl6ではなくなっているアトリビュートや、Perl6ではClass::MOPを使うまでもなく用意されているMOPの扱いなど)。

今回のLondon Perl WorkshopのテーマはInternet of Thingsということで、さまざまな小物とPerlをつなぐネタが紹介されていたのですが、これもそのひとつ。Device::SeralPortNet::Bruetoothなどを駆使して家庭の計器類から情報を抜いてグラフ化し、節電などに役立てている?とのことでした。

Mooseの作者として知られる氏による新しいPSGIアプリ用のデバッグツールの話。Middlewareでごりごり加工したHTMLを埋め込むのはスマホアプリなどに優しくないなどの問題があるので、デバッグ用の情報は一度外に出し、別途マウントした専用APIとやりとりすることで必要な場合のみ表示するような仕組みにしたとのこと。だいぶごつい印象でしたが、HTMLを表示したあとページ内で呼ばれるJSのやりとりなどもうまくまとめられるようになっているのは便利そうでした。

アプリも執事のように出しゃばらず、かといって無機的でもなく、人間らしく親しみやすいものがいいんじゃないか、という話から、現状のcpanmとかCartonはアメフトの選手みたいにごついので、もうちょっとスマートなCPANクライアントを書いている、という話に。手元にビルドファイルを保存したり、インストール済みの情報をうまく整理したりしながら、とりあえずMooはインストールできるようになったとのこと。先日開催されたKichijoji.pmでも効率のよいクライアントが欲しいという話が出ていたので絶妙のタイミングだなあと思いつつ、廊下でもいろいろ話を聞いてきました。これについてはあとでまた深掘りできればと思っています。

その他、エモ系のキーノートやLTもありましたが、長くなってきたので割愛。「Acme大全」がついにacmeことLeon Brocardさんの手に!とか、Mark Keatingさんへのサプライズプレゼント!とか、本当にこの場に立ち会えてよかったと思ったことでした。