YAPC::Asia::Tokyo 2009行ってきた
YAPC初参加。メモ書き。
一日目(9/10)
Tokuhiro Matsuno (tokuhirom) - PSGI - Perl Server Gateway Interface
pythonのWSGIみたいなことをしよう、ということでtokuhiromさんとmiyagawaさんがWSGIのperl版を作ろうとしてる話。tokuhiromさんのブログでも以前から触れている。
PSGIは仕様、PLACKは実装ということで、PSGIが何を目指すかの説明とPLACKの紹介など。
アプリを動かすのにmodperl fastcgi apache1/2とか沢山あって、WAFごとにそれに対応するコードを書くのが無駄だから、その辺の規約を統一しようぜ、というのがPSGI。それを実装したのがPLACK。railsのRackみたいなもの。
既にHTTP:Engineというものがあるが、これはreponse/request/interfaseとかを全部自分で持ってしまってるのがよろしくないとのこと。
PLACKのデモをするとき、miyagawaさんがコードを見せて「これは動くはずなんだけど、動かない。多分どっかにバグがある」と言っていたけど、その場で「あれ、これ改行入れたら動くんじゃね?」と言って改行入れたら動いて拍手喝采。実際は動かないのではなく、ただ結果がコンソールに出なかっただけで、動いてるけど出力結果がバッファリングされてただけだった。(このとき、curlを使ってリクエストを投げていた。curlは改行がセパレータになるので、改行を含まないレスポンスを延々と受け取っていたけど表示していなかった)
質問タイム。HTTP::Engineでwebアプリ作ってる身として気になる事があったので一番乗りで質問してみた。
俺「HTTP::EngineがPSGIに影響されて変更され、現状のHTTP::Engineで作られているwebアプリが動かなくなる、という事は今後ありますか?」
miyagawaさん「無いです。仕事で使ってる人もいるし、そういう事があったら困る人が出ちゃう。僕もRemedieとかで使ってるし」
tokuhiromさん「あーあと、HTTP::EngineのメンテナがHTTP::Engineに飽きてるのでバグ修正くらいしかされないと思います」
前の方の席に苦笑してるyappoさんが見えました。
ランチタイム
あんな人やそんな人と挨拶したりしつつ昼飯。すぎゃーんさんがAcme大全買ってたのを見て、皆揃って購入するなど。
で、dankogaiさんに会った。挨拶して名刺交換お願いした。いい機会だったので、前から訊いてみたかったことを訊いてみた。
俺「WAFは使われないんですか?」
danさん「WAFは若い者に任せて、もっと低いレイヤーをやってる方が好きだなあ」
と。ブログを読んでて、WAFのネタが全然出ないのでずっと気になってた。なるほど。
Makoto Kaga - Perlハッカーのための遊べるPostgreSQL
mysqlしか使わないので、興味があった。
最後に発表者も言われていたが、perlは関係なかった。ポスグレが4.8から4.9になって暗黙の型変換が無くなったとか、内部のデータの持ち方とかの話だった。
Hideo Kimura (hidek) - modern Catalyst
catalystの話。5.8になって廃止された、ModelをM、ViewをVと略すショートオプションとかNEXTとか、Mooseベースになって、catalystアプリの書き方before/afterとか、注意点とか。
「プラグインはほんとやめてくれとメンテナが散々言ってる。プラグインをCPANに上げると、超怖い人が色々文句言ってくる。え〜と…(会場を見渡して)居ないよな、えーまーそのー、エムエスなんとかさんが…」
Tatsuhiko Miyagawa (miyagawa) - Event programming fun with AnyEvent and Coro
AEとは何か、リアルタイムイベントとは何か、perlで実現するにはどうするか、Coroとは、とか。
うろ覚え。
サンプルソース見せながら、AE使う上で$wの宣言がbkくさいけどこれが一般的で、こうしないと参照カウンタが切れないとかどうとかってのは覚えてる。
今回のYAPCではリアルタイムのネタがhotだったように見える。
dann - 優しいモダンなWAFの作り方 (How to develop modern web application framework)
Angelosなる作成中のWAFの話。WAFとはどんなものか、WAFを作るのに必要なもの、仕組み、拡張の仕方などについてAngelosのソースを見せながらの話。
PSGIをどうしようかなーと思っていたら、数日前にPLACKを作られてしまい、焦ってAngelosにも取り込んだとか。
dann - CPAN::PackagerによるRPM/Debの自動生成 (Build packages with CPAN::Packager)
CPANモジュールがめんどくさいけどrpmとか作るのも面倒だから、これを使って簡単にパッケージ作れるよ!な話。
既存ツールがあるけど、問題点があるので、それをこうして解決しました、と。
質疑。
CPAN::Packagerで依存関係を気にせずモジュールをインストール出来るとの事ですが…CPAN::Packager自体が依存が多いのでは?
笑いが起こる。対する答えはうろ覚え。何だっけな。
テストはどうなってますか?
俺も訊こうと思ってた。説明の中ではテストが出てこなかった。で、答えは、今後の課題だそうだ。
Kazuhiro Osawa (Yappo) - Key Value Store with O/R Mapper
Data::Modelの作者の方。
開始前に多少時間が空いた。画面に映されるニコニコ動画トップ画面。「miyagawa」で検索。ノーヒット。「takesako」で検索。数件ヒット。
「(開始時間まで)あと2分らしいですが、どれがいいですか」
適当なの選んで再生して少しして、進行役のzigorouさんが「すいません、このままだとそれに見入っちゃって終わりそうなんで始めちゃってください」
始まり始まり。
Data::Modelについて。DSLライクで軽くてData::ObjectDriverを超参考にした。RDBMSのRっていらねんじゃね?とのことでRは実装してない。
既存ORMの不満点、各ORMを触ってみて満足出来なかった点、など。既存のORMについてのコメントはこんな感じ。一部うろ覚えの可能性あり。違ってたらごめんなさい。
- Class::DBI
- まぁ古いですよね。今までお疲れ様でした。
- DBIx::Class
- 重い。って言ったらtypestarさんが怒りそうだけど。使っていい思いをした事が無い。
- Rose::DB
- miyagawaさんがお気に入りだけど、見る時間取れなかった。
- Jifty::DBI
- Jifty以外で使っても嬉しくないよね。
- Fey::ORM
- (Fey::ORMのソースの先頭に use Moose って書いてあるのを指して)…というわけで、これは無い、と。
- DBIx::Moco
- Data::ObjectDriver
- かなり良かったんだけど、日本語・英語ともにドキュメントがほとんど無い上、ググっても遅いってdisってるエントリしか見つからない。
- DBIx::Skinny
- SQLパースするの大変だよね。あと作者のnekokakさん曰く、Data::Modelの方が軽いって。ただベンチは取ってないです。
この後は紹介、解説。カラム定義を共有出来るとか、スキーマ情報まとめて一箇所に書けるとか。キャッシュしやすいとか、標準でMaster/Slave構成に対応してるとか、Memcachedにも使えるとか。あとDMと離れて、データのシリアライズの話とか。
俺もこれは使ってるのだけど、ずっと質問したい事があったので訊こうと思っていたのだけど、質疑の時間自体が取られなかった。時間が押していたそうで。残念。
Atsushi Kobayashi (nekokak) - simple or mapper DBIx::Skinny
2連続でORMの話。以前もORMについて発表してる方で、yappoさん曰くORMの専門家。俺もDBIC使い始めはこの人のwikiに超助けられた。
自作ORMについての話。
やっぱりDBICが重いのと色々不満があったので自分で作ったという。特にパフォーマンス面で不満が強かった。パフォーマンスを気にするならDBIのハンドル取ってSQLベタ書きするが、それORMの意味無いよねとか、DBICで設定した色々、inflateとかが使えなくなるじゃん、とか。軽く薄く、でも自分が欲しい機能は持たせて作った。
あとは使い方の例をあげつつ部分的に詳細な説明。Data::Modelと似てるところもあったが、互いに互いのいいところを取り合ったとか。
Toru Yamaguchi - Perl database test using MySQL::Sandbox
遅れて参加。
sandbox作ってその中でmysqlでテストしよう、と。ブログに書いてることのおさらいみたいな。
cliからdb色々操作して、crudとかdrop/createとかしてたけど、これも便利そう。
Lightning Talks (1)
うろ覚えですよ。
args.pm (tokuhirom)- a brand new argument validator
メソッドの引数をバリデーションするとき、$argsって書くのがめんどくさいから、書かなくても済むようにしてた。
「全然黒魔術とかしてないですよ」→観客席あたりから突っ込まれる→「PadWalkerに比べたら全然黒魔術じゃないですよ」
miyagawanize (yusukebe)
「偉大なるハッカー、miyagawa。私たちは彼のようにはなれない。何故か?それは…紫色のアレを持っていないからだ!」
というわけで、画像の顔を認識し、自動で顔の部分に紫色のアレを付加するスクリプトを紹介。実際に数人の画像を用意し、スクリプトにかけ、結果を見せて会場を笑わせてた。使った画像は、ラリー・ウォールとかモーニング娘とかオバマとか色々。
で、用意した画像を次々とmiyagawanizeしていって、最後に二人分の画像が残った。が、「さーて最後の一人!」あれ。何故かotsuneさんが飛ばされた。これわざと飛ばしたのか間違えたのか気になります。
nginxやlighttpdでMogileFSしてみた (kamipo)
各webサーバで分散ファイルシステムMogileFSを使って画像をgetしてキャッシュ効かせて表示させてた。確かlighttpdだけ失敗して、他のどれかでキャッシュが効いてなかった。
この人だけ準備に超手間取ってた。で、テンパったらしくマイクの持ち方がかっこよくなってtwitterやircでネタにされてた。
どんな感じかというと → http://twitter.com/nipotan/status/3884430738
懇親会
dmakiさん「参加費は2千円ですが3千円の飲み食いが出来ますのでお得です!」
色んな人と話してきた。やっぱり 挨拶>自己紹介>名刺交換 でネタが尽きて気まずい雰囲気になってしまった事もあったけど、楽しかった。人生で一番名刺交換した。
既に転職した前職の知り合いを伝って、他の会社の人と話すパターンが多かった。全然関係ない人だとやっぱり話すきっかけが作りづらい。そんなの気にするなよって言われても、人付き合いが苦手とかコミュ力が云々。俺の今後の課題。
大抵の人が言うのは「この業界狭いね」と。どこ行っても見覚えのある顔があるのだそうだ。俺はまだ顔も狭いし、1回転職したばっかでまだ体感は出来てないけど、確かにそうだろうなと思った。
ところでLTの存在を当日になって知った。正直阿呆すぎる。dmakiさんに今から明日参加できませんかって訊いてみたけど駄目でした。泣くな俺。
二日目へ続く。