YAPC Asia 2009に参加してきました。 今回のYAPCではAnyEvent,PSGI,Coro,リアルタイムWeb辺りがポイントだったかと思います。 見た物のなかから一部をピックアップして書いておきます。

Yoichiro Tanaka - ‎Webエンジニアのためのmixiアプリ開発ガイド‎

mixiアプリの解説でperlの話しはあまり出てませんでした。 が、個人的には非常に面白かった。mixiアプリを全然チェックしてなかったのですが、 feedとかJSONのAPIあれば簡単に作れてしまう所が良い感じ。 実装的にはXMLのファイルの中のCDATAセクションにjsを書いて、OpenSocialのライブラリを使って、API接続してゴニョっとする感じ。 マイミクやコミュの情報を使うには独自のAPIを使わないとダメ。OpenSocial準拠ではるけれど、各サービスによって独自APIを使っているので、 簡単に移植と言うわけにはいかないそうですけど、mixiの1700万ユーザーというのはやはり魅力。 家にかえってから、思わず勢いで作ってしましました。そのうち別記事として書いてみたいと思います。

Tokuhiro Matsuno (‎tokuhirom‎) - ‎PSGI - Perl Server Gateway Interface‎

コレが、Perlの話しとしては今年の2大トレンドのウチの一つじゃないでしょうか? PSGIは表題にあるとおり、Perl Server Gateway Interfaceの略で、実装ではなく、あくまで仕様とのこと。 要するに、「Webサーバーやフレームワークが新しく出る度に、コードを書書くのはやめよう」という、Rack/WSGIの思想をPerlで作ろうというもの。 同じ思想でHTTP::Engineが思い浮かぶと思うんですが、HTTP::Engineは仕様+実装+インターフェースが含まれていて、 みんなに使ってもらうには、余分な実装が含まれ過ぎていた事が原因でなかなか浸透しないようで、HTTP::Engineから仕様を切り出してまとめたものだそうです。 このセッションでは、PSGIの概念だけでなく、実際にPSGIに準拠した実装であるPlackによるデモも行われました。 CatalystでかかれたコードをMojoで動かしたり、fastCGIで動かしたりとなかなか面白いデモでした。 Plack::Impl::Sledgeが非常に欲しいですね。

Tatsuhiko Miyagawa (‎miyagawa‎) - ‎Event programming fun with AnyEvent and Coro‎

AnyEventの解説。これが今年のトレンドのもう一つですね。ちょっと前から非常に興味があったんですが、今回のYAPCでも何度となく出ていました。 要するにPerlでEventプログラミングをするためのmoduleです。PerlにはPOEとかEVとかIO::Poll、IO::Async等々色々なmoduleがあるのですが、 AnyEventはどんなEvent系モジュールでも対応できる実装があります。AnyEventには独自のメインループを持っておらず、上記のmoduleをと組み合わせて使います。 AnyEventのメリットはシンプルで非常にわかり易いインターフェースで、POEなどのややこしい構文を書くことなくプログラミングできます。 AnyEventとCoroを使ったプログラミングがかなりアツイんですが、AnyEvent自体の説明が結構ボリュームがあって、Coroの説明は省略されていました。(後述のmalaさんのセッションでCoroの話しがあったから?)

Kazuhiro Osawa (‎Yappo‎) - ‎Key Value Store with O/R Mapper

Data::Modelのお話。いわゆるORMなんですが、Data::Modelは近年のORMとはちょっと違っていますね。実際使うためのチューンが大量にされている感じ。 基本的には、薄く早くと作られたORMで(JOINす削られている)という徹底ぶり。cacheもテーブル名やカラム名をアルファベット1文字や数値に書き換えてキャッシュする事で、サイズを節約してたりするようです。 個人的には一番使ってみたいORMだけど、癖があるので、使いどころをちゃんと考えないと、いけないので、業務でつかうのはちょっとためらう感じ。

Atsushi Kobayashi (‎nekokak‎) - ‎simple or mapper DBIx::Skinny

こちらもORM。Data::Modelと同じく薄く、薄くと意識してつくられたDBM。 実は、DBICが生成するSQLが非常にパフォーマンスがわるいそうで、もっとシンプルで計量なSQLをそのまま実行したい。という思想から作ったそう。 大分安定してそうだし、現在のORMの感覚でつかえそうなので、実際に仕事でつかうなら、コレを使ってみたいです。

Masahiro Nagano (‎kazeburo‎) - ‎大規模画像配信を支えるPerl‎

mixiさんでの画像配信の仕組み。BlogとかでもServer構成がかかれているので、目新しいといより、「ああ、そうですよねー」という感想。 mixiではクオリティと速度を勘案してlmlib2を採用しているそう。弊社のモバイルチームでも最近画像配信系を一新しようと思っているんですけど、 うちもlmlib2で行こうとおもっていたので、妙に納得しちゃいました。

Tokuhiro Matsuno (‎tokuhirom‎) - ‎Asynchronous Database Queries with Perl‎

ここでもAnyEventでてましたね。シリアルでSQL投げると、全部の実行時間の合計が実行時間になってしまうので、重いSQL何個かなげるなら、非同期で処理しちゃおうという話。 PostgreSQLだと非同期に処理するのはDBD::Pgでいけるらしいのですが、DBD::MySQLは非同期で処理できないので、libdrizzleを使うといいらしい。 機会があれば是非使ってみたいところです。

ma la (‎mala‎) - ‎Asynchronous Programming for (A)synchronous Communication‎

AnyEvent+Coroあたりの話しがメイン。以前Shibuya.pmでlivedoor Readerのインターフェース側の話しをされていたのですが、 今回は内部の話し。crawlerのパフォーマンスチューニングにAnyEvent+Coroでシングルプロセスないで、IO非同期化したほうが、 プロセスを沢山あげるよりパフォーマンスが良かったという話しから、非同期プログラミンの今後ロードマップまでするどい視点で考察されてました。 今回のAnyEvent期を総括するようなセッションで、一番面白かったセッションでした。40分のセッションだったのですが、内容盛りだくさんだったので、 後3回ぐらいは動画と資料を眺めてみたいと思いました。 見たセッションのなかからいくつかピックアップして書いてみました。 Lightning Talkでも面白いかったセッション沢山ありました。また後で書いてみたいと思います。 今回のYAPCも非常に刺激的で面白かったです。見れなかったセッションにも面白い物が沢山あったようで、 あとで動画で見させていただこうと思っています。