Perl QA Hachathon 2012に参加してきました

報告が遅くなりましたが、2012年3月30日から4月1日にかけて、パリのシテ科学産業博物館で開催されたPerl QA Hackathon 2012に参加してきました。今回のイベントでは渡航費から現地での宿泊費、会場での朝食、昼食、そして会期中の夕食=懇親会の費用に至るまで、ありがたいことにすべてスポンサー様からの出資で賄っていただきました。収支の概要については以前からサイト上に公開されていますが、過去最大規模となったイベントを支えてくださった運営チームおよび企業・団体スポンサーの皆様(Cité des sciences & de l'industrieDiabolocomDijkmatDuckDuckGoDynFreeside Internet ServicesHedera TechnologyJaguar NetworkShadowcat Systems LimitedSPLIOTECLIB'Weborama$foo MagazineEnlightened Perl OrganisationMongueurs de Perl)、また個人スポンサーになってくださったLaurent Boivin、牧 大輔 (lestrrat)、Syohei Yoshida、Tomohiro Hosaka、近藤嘉雪、Franck Cuny、Chad Davis、Karen Pauley、加藤 敦 (Ktat)、Neil Bowers、Prakash Kailasa、Mark Keating、Martin Evansの各氏にあらためてお礼申し上げます。おかげさまで大変有意義な三日間を過ごすことができました。

以下、一部未確定の要素もあるのですが、その成果と残作業などについて簡単にまとめておきます。

CPANTSプロジェクトの現状把握とリポジトリ等の整理

以前の記事にも書いたように、私は今回おもにCPANTSサイト(過去数年YAPCのLTで発表しているランキングのもとになっているサービス)まわりのメンテナンスをしに行きました。ただ、このプロジェクト、実は私もきちんと把握できていなかったのですが、どうやら昨年Vienna.pm内部で行われたらしい管理人の移行が十分に周知されておらず、必要な権限委譲なども行われていなかったため、独自の発展をとげたリポジトリが複数系統存在している状態になっていました(私も過去のコミットなどからおかしなことになっているのはわかっていたので、自分でサイトを立ち上げる際も本家とおぼしきところからフォークするのではなく、別途自前のサーバにプライベートリポジトリを立てて、そちらで作業していました)。今回当事者のひとりであるdaximことLars Dieckow氏がいらしてある程度様子がわかったので、手元のリポジトリと氏のリポジトリの間で齟齬が生じていた部分を修正したほか、この半年間サイトを落とさず運営してきた実績からcpants.perl.orgのリダイレクト先を正式にこちらのサーバに向けていただくなどして、少しずつ状況の整理を行っています。ただ、権限委譲などの点ではまだ各方面への調整が済んでいない部分があるほか、CPANTSとは別にcpantesters.orgの方を管理されているBarbie氏からサーバ/ミラー提供のお話もいただいているので、全体の流れが確定するまでにはもう少し時間がかかりそうです。

acme.cpanauthors.orgの改修

Perlマーケティング活動の一環として、このところ多くのPerl関連サイトがリニューアルしているという話を以前どこかでしたかと思いますが、2005年からほとんどリニューアルらしいものがなかったCPANTSのサイトも、コード、見栄えとも相当古めかしいものになっていたため、まずはリニューアルの前段階として自分の自由になるacme.cpanauthors.orgを改修して、CPANTSサイトの多くの要素を含めるようにしてみました。この作業の一部は以前Hachioji.pmのハッカソンなどでも行っていたもので、大きなところではCSSフレームワークYAML3からBootstrapに変更したほか、CPANTSのサイトではサーバ上の特定フォルダに画像ファイルとして保存されていたグラフ類をHighchartsというJSのライブラリを使って動的に生成するように変更したり、画面の生成に必要なクエリが十分に最適化できているか確認するためのテストを書いたりしました(一部例外はありますが、基本的にすべてのSQL文についてテスト実行時にEXPLAIN文の結果をキャプチャして、索引を利用していないSCAN TABLEが出てきたらエラーを吐くようにしています)。これらの変更は、細かなところでまだ調整が必要なものの、おおむね好意的に受け入れられたので、今後CPANTS側にも反映していく予定です。

また、現在のModule::CPANTS::Siteはほとんどの処理がコントローラとTTテンプレート内に書かれている典型的な古いタイプのアプリなので、今後の維持管理のためにも、また高速化・軽量化のためにも、処理の多くは外に出して、キャッシュをかませたり、テスト可能な状態にしておきたいと思っていますが、今回のハッカソンではCPANのインデックスやデータベースまわりでさまざまな進展があったようなので、その辺もふまえてCPANTS外部のAPIを利用したり、いまはAcme::CPANAuthorsモジュール用に別立てしているKwalitee専用のAPIサーバを整理・拡充することも検討しています。

運用上の細々とした問題の修正

その他、過去数年間のDBICの変化や、Perlにバンドルされているものとは別にCPANに最新版がリリースされるような二重生活を送るモジュールの増加、ほかのモジュールにモンキーパッチをあてているモジュールをうまく分析できない不具合などによって、Kwaliteeの分析を行うスクリプトが大量の警告を発していた問題を解消したり、XSS対策を行ったり、あるいはshebangが固定されていたためperlbrew環境下でうまく動かなくなっていた問題を解決したりといった、この半年間に気がついた運用上のさまざまな問題を解決する作業も行いました。

もっとも、時間も限られていたことから、環境構築時に必要なものは別として、自分ひとりの判断で修正できるものについてはなるべく後回しにし、現状のサイトの問題点と改善方法を指摘・提案したうえでdaxim氏らが期待する動作を確認することに重点を置いていたため、これらの成果の多くはまだ目に見える形にはなっていません。今後クエリ最適化などとあわせて順次取り込んでいく予定です。

Kwaliteeの採点基準の調整

今回ほかの問題に時間をとられてしまったこともあって、Kwaliteeの採点基準についてはあまり突っ込んだ話をできなかったのですが、しばしば要望にあげられていたstrict/warningsまわりの問題については近日中に修正版がCPANに上がるはずです。個人的にはMooseやその仲間たちはともかく、DancerやMojo::Baseの存在まで考慮に入れるのはどうかと思っているのですが(そんなことをしていたらSpiffyまで考慮しないといけなくなるじゃないかと言ったら、本当にSpiffyまでリストに追加されてしまいました)、この辺はまた機会をあらためて議論を深められればよいなと思っています。

その他

当初はCPANTSのほかにも、渡航前にメーリングリストIRCでいくつか問い合わせを受けてペンディングにしている事項があったDBD::SQLite(や、優先順位は低かったもののppmminus)についてもいくらか作業をしようと思っていたのですが、こちらは時間と体力が足りず、パッチをちらちら読んだくらいでほとんど手つかずになってしまいました。

あと、これは自分が作業したことではありませんが、miyagawaさんにcpanminusの古いチケットを見てもらい、テストのみできるオプションが欲しいと水を向けたところ(DBD::SQLiteやそれに依存しているモジュールのメンテをする際には問題をあぶり出すためにしばしば複数のバージョンをテストすることがあるのです)、あっという間に実装してくださいました。細かな制約についてはmiyagawaさんの記事をご覧いただくとして、ありがとうございます。助かりました。> miyagawaさん

ハック以外の要素について

ハッカソンの醍醐味はハックだけにあるわけではありません。とりわけQAハッカソンのようにふだんは異なるタイムゾーンで生活しているハッカーたちが一堂に会するイベントの場合、長旅と時差ぼけで疲れ切った状態で行うコーディングよりも、何気ない会話や、そこから派生するあれこれの方が結果的に大きな意味を持つことも少なくないものです。そこで以下、コーディングとは直接関係ありませんが、今回のハッカソンでどんな方々と話をしたかを適当に紹介してみます。

YAPC::Asiaに来てくれたハッカーたちとの再会

今回のQAハッカソンには、miyagawaさんのほか、2008年のYAPC::Asiaに来てくれたMichael Schwern氏、2009年のYAPC::Asiaに来てくれたFlorian Ragwitz氏、そして昨年2011年のYAPC::Asiaに来てくれたRicardo Signes氏も参加していました。今回は参加人数も多く、懇親会などでもあまり近くの席に座ることがなかったため挨拶程度の話しかできませんでしたが、最終日の懇親会後にはFlorian Ragwitz氏らの後についてパリ市内中央部を歩き回り、バーでSuze(最近はパリでもあまり好んで飲む人はいないのだそうで、ほかのみなさんはビールなどを飲んでいました)を一杯飲んでホテルに帰ってきたあと、今度は(なぜか)ダイスとキャラクターシートを持ち合わせていたRicardo Signes氏がゲームマスターをつとめるD&Dのセッションにお邪魔させてもらうなどして旧交をあたためてきました。ゲームについては翌朝早く起きなければならなかったので途中で離脱させてもらいましたが、20年ぶりくらいのことでとても懐かしかったです。また、Ricardo Signes氏のマスタリングもとても上手で、今回私が担当したのは終盤に見せ所が出てくるタイプのキャラクターだったのですが、もう少し時間の余裕があればもっともっと楽しめただろうにと残念に思ったことです(今年のYAPC::NAに行かれる方は6月14日木曜日18時からのcPanel Game Roomでおそらく氏のセッションを見られるでしょうから、そういうのがお好きな方はぜひ)。

Mongueurs de Perl

今回のハッカソンでは、もろもろを取り仕切ってくださったElbehoことLaurent Boivin氏やBooKことPhilippe Bruhat氏(Git::RepositoryやHTTP::Proxyなどを書いている方)など、フランスの多くのハッカーたちとお話しする機会も持てました。二日目の懇親会の前には、初日の懇親会で席が近くになったOlivier Mengue氏に誘われて、ホテルの近くのカフェで「Perl Hacks」の共著者などとして知られるCurtis Poe氏や、Perl 5のパンプキン経験もあるRafael Garcia-Suarez氏、Variable::Magicなどのモジュールで知られるVincent Pit氏など錚々たるメンバーといっしょにビールを飲み、懇親会でもいろいろなお話を聞かせてもらったほか(Vincent Pit氏が「XSは(氏の研究対象である)数学より簡単だから」と言っていたのがとても印象的でした)、懇親会後にはホテルの食堂でBooK氏が持参したChartreuse Verte(通常版が三本に、VEPが二本でしたか。私と何度かバーに行ったことのある方はご存じでしょうが、最後の締めによく飲むとても好きなお酒のひとつです)をElbeho氏らとともにいただきました。Elbeho氏は日本のなんとか(名前失念)というグループがとてもお好きなのだそうで、今度ヨーロッパに行くときは忘れずにかばんの中にCDを一、二枚詰めていかねばと思ったことです。

その他の国々のハッカーたち

今回は私のほかにも、インドからAlan Haggai Alavi氏(以前EPOSend-a-NewbieプログラムでYAPC::EUに参加された方。期間中はルームメイトでもありました)、ブラジルからはgaruことBreno Oliveira氏が参加していて、それぞれのお国事情などをうかがったほか、これまでにもたびたびDBICとDBD::SQLiteの橋渡しをしてくださっていたribasushiことPeter Rabbitson氏や、DuckDuckGoのTシャツを持ってきてくださっていたGettyことTorsten Raudssus氏、最終日の懇親会でお隣になったDavid Golden氏、また日本ではなじみがないかと思いますが初日の懇親会でお隣の席になって以降何かと気を遣ってくださったWendy Van Dijk氏など、ほかにも多くの方のお世話になりました。

正直なところ、特に自己紹介タイムなどあったわけではありませんので参加者全員の顔と名前をきちんと把握できたわけではありませんし、何人かの方とはまったくお話しないままになってしまいましたが、その辺は欲張りすぎず、次回以降、また機会があるときにあらためてお話できればいいなと思っています。

ハッカソン以外の話

今回はイベント前日の夕方に到着、イベント翌日の昼に出発という、わりと窮屈なスケジュールだったため、初めてのヨーロッパ、初めてのパリだというのに観光らしい観光はほとんどしてきませんでしたが、到着当日の夜、ホテルに向かう前に空港からのバス停からそれほど遠くない場所にあるHarry's New York Barで一杯だけBloody Maryを飲み(お味はさておき、お店の雰囲気や、日本ならピックで氷を割るところ、あちらではすりこぎ状のもので氷を割っていたのが興味深かったです)、帰国当日、朝一番でパン屋に向かい、9時に開くスーパーマーケットに寄っておみやげ用の駄菓子を物色してきたのがそれらしいところでしょうか。もう少し出発が遅ければいろいろお店も開いていたのでしょうが、帰国直後に例の暴風雨に巻き込まれたことを思えば、欲張ってもう少し後の便を選択していたら経由地の上海から帰れなかったでしょうから、結果的にはよかったのかなと思います。

フランス語会話はからきしで、Bon jour.とMerci.、Au revoir.以外は全部英語で通してしまいましたが、それでも今度はしっかり時間をつくって来てみたいと思った四泊六日の旅でした。