遅ればせながらYAPC::Asia 2007 Tokyoレポート
4月4日〜5日に開催されたPerlの国際カンファレンス「YAPC::Asia 2007 Tokyo」に参加した。いやー、本当に楽しく、知的な刺激を受けまくった。
というわけで、出遅れたけど、レポート。会場で取ったメモがうまくまとまらないので、長文にて失礼。といっても、もはや、発表者のスライドとほかの方々のレポートを読めば十分かも(しょんぼり)。
一日目
Welcome (Tatsuhiko Miyagawa)
まずは、いつもながらクールでテンポよく開会宣言。来場者は全部で430人ぐらいで、世界最大のYAPCとか。うち、初めて来た人が半分ぐらいだったようだ。
Kwiki and the Symlink (Ingy dot Net)
日本でも人気のIngyが登場。なぜかパーカーのフードをかぶって登壇したと思ったら、どうやらドラえもんらしい。
戸籍名を本当にIngy dot Netにしちゃったそうで、「Ingy dot Net 2.0」だと宣言。そこから、「Kwiki 2.0」の話につなげた。
2006年12月からKwiki 2.0に着手し、まずTracを立ち上げた(え?)。Kwikiは500以上のCPANモジュールに依存し、kwiki-*モジュールが150以上ということで、モジュール多すぎ。そこでIngyがモジュールを集めてKwikiのSVNリポジトリに突っこんで解決することにした。で、シンボリックリンクを張りまくった結果、WindowsやPerl 5.8.1以前では動かないことになって「古いPerlとWindowsは忘れよう」と。
そのほか、抽象化の見直しやドキュメントの整備、高速化などにも着手。プラグイン構成や設定、テンプレートなどをセットにした「フレーバー」をいくつか用意して、「どういう設定にしたらいいのかわからない」という声にも対応した。
今後については、CPANに戻したいという話や、自由なフォーマッターの採用(Lightning Talkでやってたネタだと思う)などについて語った。
ネットワークの調子が悪くてデモができなかったのは残念。
Virtualization and Package Deployment with EC2 (Emerson Mills)
日本のAmazonでWebサービスを担当している人で、日本語ペラペラ。「好きなだけPerlを書いていいと言われたので入社した」んだそうな。
Emersonさんも依存モジュールのためにインストールがなかなか成功しないケースを取り上げて、解決策として仮想マシンイメージの配布を挙げていた。
で、仮想マシンホスティングのβサービスのAmazon EC2を紹介。Xenベースだろうと想像していたけど、正式にXenだと聞いたのは初めて。
用途ごとに仮想マシンのインスタンスの雛形があって、それを選んで実行する。完全従量制。Web APIでもコントロールできる。最近では実行権限を設定できる機能が追加されたそうで、本格的に使ってもらえるんじゃないかという話だった。
いわく「We can realize on demand Perl sercice」ということで、司会の宮川さんも「サーバーのフルスタックじゃなくてコンポーネント単位でホスティングするのがよさそう」とコメントしていた。あと、いつ正式版になるかという質問には、「私も知らない」と。課題はインフラのスケーラビリティーとの話だった。
Higher-Order Parsing techniques for Perl (Mark Jason Dominus)
今回の目玉の一人、MJD先生のセッション。「ボケたんだからツッコんでよ〜」ってな言葉を連発し、早口で饒舌、ステージいっぱいに歩き回る、元気なセッションだった。
お題は、自著「Higher-Order Perl」をネタに、高階関数を使った構文解析のテクニック。BNFをもとに、それぞれのノードを「関数を返す関数」として実装し、結合(conc)と選択(alt)の2つの関数合成関数や、遅延評価の仕組みなども作って、あっという間にパーサーを組み立てていて凄かった。魔法みたいな感じで、今でも騙されているんじゃないかという気が…。
で、「バックトラッキングとかは残念ながら省略してるんで、本を読んでね」と。
昼休み
会社から呼び出しがあったので、ちょっと戻って片付けた。ついでに、会場でコンセントが足りなかったので、テーブルタップを買ってYAPCに戻る。
Perl I18N in 20 minutes (Dan Kogai)
開口一番、「伊藤直也さんの前座の小飼弾です」(笑)。
前半は去年もやったEncode.pm入門。後半は、言語を横断して、UTF-8リテラルをどう扱っているかとか、Char Name表記、Unicode Propertyなどの話をして、PerlでのI18Nの強力さを主張した。Ruby対抗ネタもあったので、Matzさんが聴衆にいれば面白かったのに。
Perlネットワークプログラミング再考 (Naoya Ito)
「httpd飽きた」ということで、Perlでのsocketプログラミングあたりを解説するセッション。
前半では、古典的なBSD Socketプログラミングに始まり、ブロッキング問題や、そのLinuxシステムコールでの内部動作を解説。で、実装の問題点をふまえて、epoll(Linux 2.6)、/dev/kqueue(BSD)、devpoll(Solaris)といった各OSでの新しい実装を紹介。
後半は、Perlでの新しいネットワークプログラミングのフレームワークとして、POEとEvent::Libを中心に解説した。POE面白そう。
How we Build Vox (Ben Trott & Tatsuhiko Miyagawa)
今回の目玉の一人、Six ApartのBen Trottのセッション。宮川さんが通訳。
Six Apartの第4のブログ「Vox」を解説するセッション。といっても、YAPCなので、「WebサービスAPIを使えるサービス」という観点から技術寄りの解説をしていた。
個別のWebAPI用のPerlモジュールは使っていなくて、それはモジュールごとにXMLパーサーが違うのでムダだから、とか。ほかにも、ジョブ処理をApacheからオフローディングとか、MTのフレームワークが古くなってきたのでCatalystを使っているとか、いろいろ細かいノウハウを語ってくれていた。
Inside livedoor 2006-2007 (Tomohiro Ikebe)
ライブドアの最近の様子と技術を、執行役員になったShebangさんが紹介。
ここ一年の話として、「CVSを使うのは小学生まで」「RailsとCatalystはカッコいい」「LuceneとかでJavaも」などの技術トピックを紹介していた。いずれも、まず内部で使ってノウハウを固めているところだとか。
あと、CでApacheのモジュールを開発している話なども。中でも、www.livedoor.comでは、Cで使えるClearSilverというテンプレートエンジンを使って、柔軟性よりとにかく高速性を追求しているんだとか。なるほど、あの騒ぎに耐えたインフラの秘密の一つか。
あと「Sledge 2.0」ということで、要するにSledgeはコードをイマふうにいじり続けているんだという話も紹介していた。
今後については、ashiatod(あしあとデーモン)みたいに小さな機能をデーモン化していきたいとか、認証APIなどをやりたいとか、LDR英語版は名前を変えて世界デビューするつもりとかいう話をしていた。
Perl Worst Practices (Marty Pauley)
髪を後ろで束ねて、ちょっと綾小路きみまろ風の毒舌トークで「こんなPerlコードは××だ」というようなネタを展開していた。ネタは以下のような感じ。
- いいコードは、読みやすく、美しく、有用だ。反対に、悪いコードは、読みにくく、醜く、そして有用だ。
- Javaはバカな人でも使えるように設計されて、バカじゃない人も使う。反対にPerlは賢い人が使えるように設計された言語。賢くない人も使うけど。
- 95%の人はバカ。ただし、そういう統計の95%は捏造(このネタは会期中いろいろ引用された)。
- Perlのバグの95%は変数が原因。だから変数をすべてなくそう。
- OOなんて、遅くて醜い。Perl OO=POO(ウンコ)だ。
という合間に、変数はスコープが一画面ぐらいに収まるmy変数を使おうとか、正規表現マッチの後方参照の$1とか$2はよくないのでリストコンテキストでmy変数で受けようとか、正規表現でコードを実行できちゃうよとか、Regexp::Commonを使おうとかいう教訓もいろいろ教わった。
Perl 6 Today (Audrey Tang)
「鳳たん」ことAudrey Tangの登場。スライドの翻訳は竹迫さん&弾さんで、「Perl 5の粗探しやっている間があったら自分でやれ」とか(笑)。
数多くの論点を次から次へと非常に明晰に解説していて、すごく頭のいい人だと思った。
前半はPerl6というかPugsの開発状況を紹介。「1995年のPerl5のようなもの」「use jsan:DOM;とかuse haskell:Numeric;できる」といった話があったような。Perl6の式をevalするIRC botや、AjaxでPugsを実行するサービスとかもあるんだそうな。
後半は、さまざまなプログラミングパラダイムと、それに対する「それPerl6でできるよ」の紹介。ざっと、静的型、DSL、遅延評価、クラス、メタオブジェクトプロトコル、ロック、トランザクション、SIMD、Junctionなどを紹介していたような。
最後に、Perl6のリリースは「クリスマス」、ただし「(Perl 6がキタら毎日)クリスマス(かもしれない)」だとのこと。
二日目
ふつうのPerl6入門 (Dan Kogai)
「普通って何?」という話から始めて、さまざまな「普通」の観点からPerl6の変更点をわかりやすく解説した。
まず、ほかの言語で普通なものとして、Sigil($とか@とか)を変数に合わせたこと、「.」をアクセサーを表すことにしたこと、変数宣言が必要なこと、型宣言ができること、say、すべてをオブジェクトにしたことなどを紹介。続いて、トガった言語で普通なものとして、要約演算子や範囲チェック、スマートマッチを紹介。さらに、「すぐにでも使いたい」としてJunctionを紹介した。
最後はRubyとの対決。Array#eachに相当する書き方を何通りもやってみせたり。いままで「Perl6ってRubyみたいなもの」と思ってたけど、違いが見えて面白かった。これも、Matzさんが聴衆にいれば面白かったのに。
Introduction to DBIx::Class (Jonathan Rockway)
ここで別の部屋のセッションに移動。「ふつうのPerl6入門」が時間超過してしまったので、途中から聞いたうえに英語がわからずちょっと苦労。
いちおうメモに残っているところだと、いろいろなクラスからスキーマを作るとか、すべてresultsetオブジェクトに対して操作するとか、->search()とか、ページングとか、->insert()とか、->update()とか、リレーションとか、そんな感じ。
Web APIで遊び倒す (k.daiba)
再び元の部屋に移動すると、DBIx::Classと同じ枠のセッションが続いていた(k.daibaさんごめんなさい)。ちょうどAmazon EC2を呼ぶところをスクリーンキャストで見せていた。
テーマは、OpenIDとSIPのマッシュアップとか、Amazon EC2とか。Net::OpenID::Consumerのドキュメントがわからなくて使っているサービスのソースを参考にしたとか、SIPのプロトコルは複雑すぎるとか、Web APIはタイミングがシビアとか、面白そうな話だった。
CLI meets Web Frameworks (Kazuhiro Osawa)
コマンドラインでもWeb FrameworkのModelやConfig、Pluginみたいなのを使たい、という話。もろSledgeなSoozy Frameworkを作り、Catalystインスパイヤにバージョンアップしたとか。
あと、常駐してhttpでアタッチやデタッチができるCLI Serverを作った話もしていて、面白かった。
Mylingual - There's More Than One Language To Do It (Kazuho Oku)
ごぞんじJapanizeと、そのマルチリンガル版Mylingualの紹介。
元ネタはPalmのローカライザーだそうな。仕組みとしては、DOMのtextElementまたは正規表現に対して訳語を当てるというもの。日付のような変換も可能。本文を翻訳しちゃうと困るので、idやclassでスキップする機能もある。最新データはウイルスチェックソフトのように配布し、JSONPでサービスしている。今後、IEの拡張に力を入れていこうかと思う。という話。
また、Mylingualによって、ほかの言語圏の人が日本語サービスを使えるメリットと同時に、日本語サービスが世界にデビューする可能性を考えているとのこと。
途中、2度もPCがハングしたけど、リブートしながら話を続けてたのが印象的。さすが世界に誇る日本のハッカー。
自文書抽出日本的住所 (Kazuhiro Osawa)
Shibuya.pmのTechnical Talkでもやっていた、自然言語から住所を抽出する正規表現を作った話。
基本的に、本当にある名前のみマッチするようにして、架空の名前ははじくようにしている。一方、途中が抜けてもその下の地名から判断する。大変なのは、京都のように同じ場所に何通りも表記がある場合など。
実際の正規表現はすごい量になっていた。Regexp::Assembleを使って、生成に5分ぐらいかかるんだとか。
昼休み
初のPerl同人誌「マルチ中毒」を買ったのが、たしか昼休みだったと思う。
s/ Perl5 Regular Expression / Perl6 Regex and Rules/mixes; (Yoshinori Takesako)
「Software Design」の付録にもなった、Perl6の正規表現の解説。「マジメにやるので過剰な期待はしないように」と前置きしつつ、ばんばんネタをはさんで話していた。
主なトピックを拾うと、こんな感じ
- 繰り返しや選択は変わらない
- qr//は、rx//またはregex{}に
- スマートマッチ演算子
- 置換は、s{pattern} = 'replace'でもOK
- 複数行モード/mを廃止し、/^^pattern$$/みたいに書く。/\A pattern \z/のほうが/^pattern$/になる
- /xがデフォルトに。逆に空白マッチ修飾子を用意
- /sが廃止、「.」は改行もふくめてマッチ、改行以外は「\N」
- /eのかわりにs/pattern/{code}/
- 修飾子は末尾じゃなくて頭に
- 後方参照は$0〜に。キャプチャをともなわないカッコは[]に
- メタキャラクタ、文字クラス、変数展開は<>で
- 配列のリテラル展開
- マッチ失敗の指定
- 繰り返し指定が{n,m}から{n..m}に
- Ruleでライブラリ化
- m:perl5/old pattern/でPerl5互換
(AB)?using Class::C3 (Daisuke Maki)
XangoとかText::MeCabとかでお世話になっているdmakiさんの登場。クラス継承の仕組みであるClass:C3の紹介。
多重継承の場合、普通ではSUPERを呼ぶと@ISAのいちばん左のものしか呼べない。そこで、クラスを探索する仕組みとしてNext.pmとClass::C3がある。Nextは深いほうを先にたどり、C3は同じ深さのものを先にたどる。C3はキャッシュが効くためか、Nextの2倍ぐらいのスピード。
C3を使っている例にDBIx:Classがある。機能ごとにどんどんコンポーネント化して@ISAにぶちこむのに便利。
弱点としては、SUPERだけを使うより遅い (4倍)、親と子をそれぞれ継承しようとするとするとエラーになる(Catalystで使えない)など。
CDBI => DBIC (Tokuhiro Matsuno)
tokuhiromさんのセッション。技術面というより移行や運用の話とのこと。
CDBIの弱点としては、イテレータが全部データを取得してから返すとか、コネクションがクラス変数になっていて接続先を動的に変えられないとか、内部でコネクションプーリングしていてオフできないとか。
移行では、並行して動かしていて問題ないので、変更したコントローラから順に移行していけばよい。ただしコネクション数が倍になるので注意。インスタンスメソッドはコピペで99% OK。
入門DBIC::Schema::Loader (Atsushi Kobayashi)
Loaderを使わないと全スキーマ(テーブル)のモジュールを作成して、それぞれ設定することになって面倒。Loaderを使うと自動設定してくれる、という話。ただし、OracleとかMyISAMとかは使えない。
後半は、Loaderをラップして、毎回設定するような項目を自動設定したり、日付をインフレートしたり、リレーションを自動化したりといったモジュールを作った話。Class::C3のセッションで話が出たように、C3を使っているので拡張しほうだいとのこと。
Writing Pluggable Software (Tatsuhiko Miyagawa)
ソフトにプラグイン機構を追加してみよう講座。ネタと資料は一夜漬けだそうな。すごい。
題材は、grep -rを便利にしたようなソフトのack。Class::TriggerとModule::Pluggableを使うと、ほら、2行でプラガブルになりました、と。プラグインの実例として、コンテンツフィルタを追加して、PDF内の検索に対応していた。
後半では、Kwiki、Plagger、qpsmtpd、Movable Typeを例に、さまざまなプラグイン機構の実装方法を比較。大きく分けると、プラグインをモジュールにするものとPerlのテキストにするものとがあって、一長一短があるとまとめていた。
Way to the NAPC (Kenichi Ishigaki)
NAPCはCPANの逆綴りで、Napster(元祖のほう)のイメージも含めているという話。
CPANでPlaggerとかインストールするといろいろハマるという話とCPANのノウハウから始めて、特にXSモジュールのコンパイルでつまづくのでバイナリを配布するppmの意義があるという話に。
ppmはActiveStateが買収されて質が下がり、復活したと思ったら仕様が変だという問題があるとのこと。そこで、野良リポジトリががんばれと。ただし、mod_perlひとつにしても、自身のバージョンにApacheのバージョン、コンフィグの違いなどで組み合わせが大変なので、各自が専門でやって野良リポジトリを束ねたNAPCIとでもいうものが発展するといい、とまとめた。
Assurer - a pluggable server testing/monitoring framework (Gosuke Miyashita)
Plaggerライクなサーバテスト/監視用フレームワークのAssurerの紹介。もともとサーバー構築の単体テストのツールで、あとから監視にも対応した。テストフェーズ(HTTPなど)、Notifyフェーズ(IRCなど)、Formatフェーズ(Textなど)、Publishフェーズ(Mailなど)を分け、YAMLの設定ファイルで組み合わせるところがPlagger風。
また、複数のホストを束ねたロール設定や、フィルター、コンフィグバリデーション(フランス人の人が作ってくれた)、シェルモード、自動コンフィグ生成などがあると紹介していた。
ライトニングトーク:正規表現信者の憂鬱(にぽたん)
弾さんモノマネがそっくり! 特に、声やしゃべりの癖とか。なぜか隣の席にいたMJD先生も大爆笑。今回のウケNo.1だと思う。
で、本題のNumber::Phone::JP::Tableの話に入ったぐらいで終了(笑)
ライトニングトーク:Perlbal selector Plugin (Atsushi Kobayashi)
Perlによるロードバランサー「Perlbal」の紹介。無料だし拡張できるのが便利ということで、MogileFS利用とかPerlbal::Plugin::UrlGroupとかを紹介していた。
ライトニングトーク:ブラウザ履歴を利用したRSS Auto-discovery (ma.la)
最速の人だけあって、ブラウザ履歴とLDRのデータを照合して超高速に未登録フィードを拾いまくる方法を解説。LDRのフィードのMD5ハッシュに対して、履歴URLのディレクトリを1つづつ上がっていって合致するものを探すとか。1件0.(0が5個ぐらい)1秒ぐらいというから尋常じゃない。ていうかそんなに履歴が。
ライトニングトーク:BabelBee - Collaborative Translation Tool (Chia-Liang Kao)
gettextのpoをオンラインで共有して作業するリポジトリの紹介、だったと思う。英語なので自信なし。
ライトニングトーク:Moxy - Mobile Development Proxy (ふしはらかん)
wemaの人。PCで携帯サイトを見るためのプロキシーサーバーで、絵文字対応とか、UA切り換えとか、AUの端末番号を任意で送信とかをそなえたMoxyを紹介。
ライトニングトーク:(ミニ)カンファレンス中継のあれこれ (堂前清隆)
YAPCやShibuya.*イベントとかをストリーミング中継しているi-revoさんの活動紹介。面白い見せ方を工夫して、静止画併用とか、IRCのテキストを字幕にしたりとか。後者は、plumのbotからSQLiteのDBにつっこんで、Web側がDBから拾う仕組みだそうな。
ライトニングトーク:Parser For Kwiki and Spock (Ingy dot Net)
1日目のセッションの中で言っていた、Wikiの自由なマークアップエンジンの解説。ベースクラスを用意して、それを元にハッシュによりマークアップ形式を定義する(ちょっとPlaggerのEFTっぽかったかも)、という感じだと思う。英語なので自信なし。
ライトニングトーク:Angerwhale (Jonathan Rockway)
DBを使わず、コマンドラインから投稿する、ユニークなブログツール「Angerwhale」の紹介。
ライトニングトーク:Expectをつかったサーバ管理レシピ (長野雅弘)
十数台のサーバーのセットアップのときに、作業はコマンドで自動化できるけど、パスワード入力や公開鍵の確認などは自動化しづらい。そこでExpect.pmを使ってmsshというツールを自作したという解説。
ライトニングトーク:Debugging the De Bruijn Sequence (Mark Dominus)
MJD先生は、なんと無言プレゼン。すべて字幕のみで会場を笑わせた。
ネタは、コードを足していくのは間違いで、すべての文字列の組み合わせから削っていくとよい、私はDe Bruijn Sequenceで圧縮された元データを持っているのですべてのコードの権利は私にある、という、完全ネタもの(笑)。
ライトニングトーク:Device:USB::MissileLaunchers (Yappo)
MJD先生の大ネタの次でやりにくいかと思いきや、これも会場大爆笑。
勤務先のオフィスをWebカメラでライブ中継し、画面の下に映っているオモチャのミサイルランチャーを会場からリモート操作する(HTTPを使ったRESTっぽいインターフェイス)というもの。ミサイルを発射したところで大歓声。画面に登場した営業の人が本当に困っていたような(笑)
ライトニングトーク:Spidermomic: A self-modifying HTML/Perl?JS file/game (Thilo Planz)
自己変更プログラムについて解説して、本題のPerlnomicに入ったあたりで時間切れ。Nomicというのは、プレイヤーの投票でルールを変更するゲームだとか。これも英語なので自信なし。
Perl Program Repair Shop and Red Flags (Mark Jason Dominos)
大トリはみたびMJD先生のセッション。ネタはプログラムの添削で、「今度本にするから」とのこと。
手始めは、"!"でjoinして/(.*)!(.*)/で切り出し直しているコード。続いて、"Jan""Feb"の文字列で順にeqする12個のifを見せて、実はここにtypoが、という間違い探しなどもやっていた。
ためになったネタはこんな感じ。
- Repeated Code is Mistake
- プログラム言語のほぼあらゆる機能は、コードの繰り返しを避けるためのもの
- elsifが続いてelseがないときは、「どれにもあてはまらなかったらどうしよう」と自問しよう
- 日付パーサーのコメントにデータ形式の例を入れているのは、いい
- 日付のデータはできるだけ内部形式(Unix time)で持つ
- 真偽は文字列ではなく真偽値で表す
- 優先順位の誤りはB::Deparseモジュールでチェック
コメント
コメントの投稿
トラックバック
http://emasaka.blog65.fc2.com/tb.php/213-4a87979e
