YAPC::Asia Tokyo 2010スペシャルレポート

2日目レポート[随時更新]

10月15日、16日、東京工業大学大岡山キャンパス (東京都目黒区) でYAPC::Asia 2010 Tokyoが開催されます。本ページでは、2日目のレポートを随時掲載していきます。

電車遅延のため、本日のプログラム開始を10分遅らせるとのことです(なお、休憩時間を利用して、すでに本来予定しているタイムテーブルに修正されています⁠⁠。

※今回のレポートは全セッションを回れておりません。ご了承ください。

画像

gfxさん「How Xslate Works - The next generation's template engine⁠

Text::Xslateの作者であるgfxさんによるXslateの内部構造を中心としたトークでした。

XslateはXSで書かれているテンプレートエンジンです。非常に高速に動作するように設計されていて、HTMLエスケープは自動で行ってくれる機能により安全性にも配慮されています。また複数の文法をサポートしてることや、エラーメッセージが分かりやすいなど、開発のしやすさにも力をいれているとのことです。

まずはなぜXslateを書いたのかという経緯から。CPANにはよく使われているテンプレートエンジンがたくさんある中が、どれも一長一短で完璧なものがないと感じて開発を始められたそうです。例えばTemplate-Toolkit(TT2)は広く使われていますが、動作が非常に遅くエスケープも自動ではないためXSSを生みやすくなっています。最近開発されたText::MicroTemplateはPurePerlだが高速で、セキュリティ面も配慮されていますが、文法がperlベースのため何でも出来すぎてしまうところがあり、危険なコードもかけてしまうのでテンプレートエンジンとしては好ましくない点もあるとと考えられているそうです。

つづいて基本的な使い方の説明となりました。使い方は簡単で、基本的にText::Xslate->new()->render()で動かせます。newには様々なオプションを渡せるようで、キャッシュの設定などが行なえます。テンプレートの構文はPerl6ライクな記法で、フィールドの参照はドット(.)で行ないます。exampleディレクトリに例をたくさん置いているそうです。

その後内部処理の説明となりました。Xslateではテンプレートを処理する際に、いったん前処理でプログラミング言語風な状態に変換してからパースしているそうです。パーサの実装は手書きで作られていて、オライリー社から出版されているビューティフルコードの「9章 下向き演算子順位解析(ダグラス・クロックフォード⁠⁠」に掲載されている手法を参考に手書きで実装されたそうです。

質疑応答ではテンプレートをperlコードに落としこむ実装にせずにあえてバーチャルマシン化した理由について尋ねられていました。それに対してperlのインタプリタはテンプレート処理に特化しているわけではないので、文字列の連結処理などにオーバーヘッドがある、Xslateではそのあたりを最適化していて、高速化できていると説明されていました。また他言語への展開についても質問がありましたが、現状perlの実装に深く依存しているため難しいとのことでした。

twitter上でも次は使ってみたいという声があがるなど、今後注目のテンプレートエンジンだと思いました。

画像

画像

なお、今月10月24日売りの『WEB+DB PRESS』にて、Xslateの使い方を執筆したので、読んでみてくださいと述ていました。

画像

Yappoさん「Ajax Application Testing⁠

このセッションは、JavaScriptをPerlからテストを行うためのモジュールであるJSTAPdについて解説をする物でした。まず、既存のJavaScriptのテストツールとしてJSUnit、Selenium、QUnitのようなものが挙げられましたが、これらはPerlから使うことを考えると少々不便です。続いて、前夜祭のLTで取り上げられたTest::QUnit、t_wadaさんが作成したQUnit-TAPを紹介した上で、Yappoさんが作られたJSTAPdの使い方を細かく紹介していきました。

JSTAPdを使うためには、まず「jstapd -n プロジェクト名」というコマンドでテストスクリプトのスタブを作成します。その後は、-dオプションでサーバを立ち上げてブラウザから結果を確認することができます。また、Perlエンジニアがコードを書きやすいように、JavaScriptにもTest::Moreと使い勝手の近いisやokなどの関数が用意されています。Ajaxのような非同期のテストもできるよう、jstapDeferredというJSDefferedと同じような記述が可能なクラスも用意されています。

作成したテストは、すべてprove -rvのようなコマンドでCLIから実行させることができます。テストするブラウザの切替には環境変数JSTAP_AUTO_OPEN_COMMANDを使うとよいそうです。実装には非同期なPSGIサーバであるTwiggyが使われていました。全体的に使いやすくまとまったライブラリであり、JavaScriptとPerlを使うエンジンは一度JSTAPdを使ってみる価値があると感じました。

画像

画像

最後に、JSTAPdの使い方入門記事を、今月10月24日売りの『WEB+DB PRESS』に執筆したので読んでみてくださいと、紹介してトークを締めくくっていました。

画像

Jesse Vincentさん「Perl5 is Alive!⁠

正午から行われたセッションは、Perl5の開発責任者であるJesseさんによる大変意義深い内容のものでした。Jesseさんがまず言及したことは、⁠Perlが死んだと口にする人は、時代にきちんとついていけてない」ということ。証拠としてCPANモジュールの開発が活発なことを挙げ、Moose、Plack、cpanm、AnyEvent、Devel::NYTProfなどをその代表としてあげていました。

その後、話はPerl5.12.xとPerl6の話へ。⁠5」「6」はバージョン名ではなく、Perl5とPerl6が言語名であると述べ、これからの時代はもちろんPerl6の時代だが、Perl5の時代でもあるのだと、Perl5の存在意義について明言していました。その中で様々なPerl5.12系列の新機能を紹介し、Perl5の開発の活発さを伝えていました。

Jesseさんはまた、Perl5.10の時代のPerlの開発プロセスをどのように改善したかについても言及をしました。5.10の頃は"pumpking"と呼ばれる開発責任者が、C言語の実装から言語設計、人事やPMまですべてをこなしていたことを問題点として指摘。5.10の時代のpumpkingは何人もリタイアしており、リリースラインも安定しておらず開発に大変時間がかかっていたそうです。Jesseさんはこの問題を仕事を適切に分散することで解決。Perl5の開発プロジェクトは、健全なプロジェクトに生まれ変わりました。

最後に、Perl5.14のリリースに関しても触れました。Jesseさんがpumpkingになってからは、開発版は毎月20日のリリース、安定版は3ヶ月に一度のリリースを維持しており、5.14のリリースに関しても2011年4月20日という明確なスケジュールを掲げていました。5.14に盛り込む機能に関してはまだ募集をしており、アイデアがあればパッチを送って欲しいとしていました。Perlプロジェクトの健全さ感じ取れる、非常に心強いトークでした。

画像

画像

overlastさん「Perl で自然言語処理」

overlastさん「Perl で自然言語処理」による、自然言語処理の基本の解説と学び方、そしてperlで実装されているモジュールの紹介トークでした。

自然言語処理とは、人間が普段意思疎通に使っている自然言語をコンピュータに処理させるためのもので、プログラミング言語とは明確に区別されています。自然言語処理を行う上で必要な知識は、対象言語にたいする知識、確率統計の知識、プログラミングスキルの3点を挙げられていましたが、前者2つは少しでよくプログラミングスキルが重要ということでした。

続いて実際に自然言語処理を始める際の3つの心構えとして

  • 最初は簡単に実装し、徐々に洗練する
  • 機械はミスをする
  • データは自前であつめて、自前で管理する

ということを述べられていました。1点目についてはスモールスタートで導入し、ユーザの動向を見てから洗練させるのがよいということでした。2点目については特にコンピュータに詳しくない人などは過剰な期待をしてしまいがちだが、コンピュータに誤った文章を判断させるというのは難しく、ある程度割り切りが必要とのことでした。3点目については自然言語処理はしばしば計算量が多くなるため、ローカルに蓄積しておくほうが有利であるとのことでした。

後半はWebサービスにありがちな悩みと、その解決に活用できるCPANモジュールの紹介でした。ユーザの回遊性を高めたいという悩みには、レコメンドやはてなキーワードのようなアンカーテキストが有効とし、Algorithm::NaiveBayesやText::Dartsを挙げられていました。その他ソート順を変えるのも有効で、ソート順を機械学習させたいといった要件にはAlgorhithm::SVMLightが使えるそうです。またデータを近いものから結合してデータの塊をつくっていくクラスタリングに使えるモジュールとして、Text::Bayonを挙げられていました。

画像

画像

cho45さん「映画にでてくるハッカーになりたい」

cho45さん「映画にでてくるハッカーになりたい」と題したトークです。ジョークを交えたトークで、非常に楽しいトークとなりました。

まず映画にでてくるハッカーのイメージ像の話からで、⁠映画に出てくるハッカーって、なんかわからない文字が流れていて、ものすごい可視化がされていて、よくわからない方法で暗号をといたりでなんだか怪しいけど、もうちょっと現実的にカッコよく仕事できるツールはつくれないか」ということで、cho45さんが作られている「使えそうで使えない、でもちょっと使えるツール群」の紹介でした。

まずはrealtimeresponsegraph.plというツールです。これはtail -fからレスポンスタイムを即座にグラフ化するもで、Webサービスでチューニングした結果を即座に確認したいときに便利なように作られているそうです。デモではアクセスログをこのスクリプトに流し込むと、OpenGLを使った動的なグラフがリアルタイムで表示されていました。実装面ではuse OpenGL;のほかは、select関数やvec関数、fileno関数といった低レベルな関数を直接駆使して作成されたそうです。

つづいてrealtimeaccesstracker.plです。これはユーザごとにアクセスログを可視化するものです。こちらも同様にデモが実施され、同じURLにばかりアクセスしているDOS攻撃っぽいのがすぐわかると行って会場から笑いがおこっていました。

最後はDevel::KTYProfで、こちらはonishiさんが作成されたものだそうです。DBIやmemcachedといった、IOに関わる処理を処理時間とともにターミナルに出力するもので、どこから呼び出されているかも出力されるそうです。こちらもデモが披露され、select文やmemcachedのget処理といったものがカラーでターミナルに出力されていました。

終始会場から笑いが起こるトークで、クロージングでは投票によるエンターテナー賞を受賞されていました。

画像

画像

Kenichi Ishigakiさん「ある連載の舞台裏 - History tells us ...」

「モダンPerlの世界へようこそ」の連載のライターであるKenichi Ishigakiさんは、連載をどんな考えで続けているのか、そしてどのように取材を行っているのかを紹介して下さいました。⁠モダンPerlの世界へようこそ」の記事に書かれている豊富な蘊蓄に関しては筆者も常日頃から感服しており、大変興味深く聞かせていただきました。

まず、この連載についてIshigakiさんが挙げていたキーワードは「コミュニティ」です。Larry WallさんがPerl6の開発にあたり「Perl6はコミュニティが作るものだ」という趣旨のコメントをしていますが、そのコメントを意識してのキーワードです。また、YAPC Asia 2010のタイムテーブルにはMoose、Catalyst、DBIx::Classの題目が含まれていないのに対し、YAPC::NA 2010のトークの題目にはこれらが多く含まれることを紹介し、日本のギークは(いい意味で)飽きっぽいことを指摘。ギークだけが喜ぶ記事は陳腐化しやすく、ターゲットをギークとするのは難しい、としていました。

そこでIshigakiさんが考えたのはPerlの歴史。CGIの全盛期にPerlを使っていた世代が現在では社会でそれなりの権限を持っていることを取り上げ、⁠10年前」というキーワードを挙げていました。この世代にPerlのいい面、悪い面を正しく伝えることが、誤解を解いて案件にPerlを使ってもらえるように促すことにつながる、と考えているそうです。

その後、Ishigakiさんがどのように連載記事のネタを拾っているのかを紹介。CPANはもちろん、ソースコード、Wikipedia、メーリングリスト、IRC、過去のYAPC、など、非常に多岐に渡ることがわかりました。⁠記事を書くには2から3日、長いときは一週間かかる」とのことで、すばらしい連載の裏では大変な労力と、Perlコミュニティへの愛情が注がれているのだということがよくわかるセッションでした。

画像

画像

kazuhoさん「perl-casual特別企画 Unix Programming with Perl」

perl-casual特別企画と冠したセッションです。まずはkazuhoさんより、⁠Unix Programming with Perl」と題して発表がありました。

まずは正しいコードを書くためにはperlの知識やOSの知識が必要であるとし、今回はOS周りの話でも間違いを起こしやすいケースとして、errno、forkとファイルハンドル、シグナルの3点について解説がありました。

まずはerrnoについてです。ディレクトリを作成する際に、下記のようなコードを書いてしまうことがありがちです。

if ( ! -d $dir ) {
  mkdir $dir or die $!
}

しかし、このコードでは複数のプロセスから同時にコードが実行される環境ではうまくうごかないケースがあります。正しい対処方法はmkdirの実行後エラーを判定することです。その際エラーメッセージ文字列で判定すると環境やロケールによって異なるってくるため、errnoを使う必要があります。perlではuse Errno ()ををすると各種定数が利用できるようになり、$! == Errno::EEXISTとして比較するとよいそうです。補足としてこの$!はdualvarと呼ばれるもので、数値として評価した場合は数字で、文字列として評価した場合は文字列として返って来るようになっていることを述べられました。またerrnoの一覧を調べる方法ですが、この情報はperldocには記述されていないため、man 2 mkdirで確認する必要があります。manの引数の2はOSマニュアルのsection 2を見るという意味で、section 2にはシステムコール、section 3はCのライブラリ関数の一覧があるとのことです。

続いてforkとファイルハンドルについてです。forkをすると子プロセスには親プロセスのメモリ空間全体がコピーされると思われがちですが、ファイルハンドルに関しては親子で共有されるため注意が必要ということです。たとえばこれが原因でSQLiteのファイルが壊れたり、mysqlへの接続でエラーが起こったりということがあるそうです。正しい対処法として、まずファイルの場合は共有したくない場合はforkした後にどちらかのプロセスがファイルハンドルをクローズすればいいとのことです。特によくあるケースとしてfork後execをする際には、子プロセス側のファイルルハンドルをexec前にクローズするのがよいと仰っていました。ただしデータベースハンドルの場合は、単純に$dbh = undef;などとするとだめで、$dbh->{InactiveDestroy} = 1; してからundefする必要があるとのことです。基本的にはforkした直後に行うのがよいですが、fork処理がモジュール内で行われているなど直接変更できない場合は、*CORE::GLOBAL::forkを書き換えるか、POSIX::AtForkを使う方法を紹介されていました。

最後にシグナルについてのTIPSとして、SIGPIPEとSIGALRMの話をされました。SIGPIPEはプロセスがファイルハンドルに書き込めなくなった場合に受け取るシグナルで、デフォルトの動作はプロセスの停止になります。ネットワークプログラムなどでこの動作が困る場合は$SIG{PIPE}='IGNORE';とすればよいとのことでした。ただしこれを行うとprintなどの戻り値をチェックする必要があることを述べられていました。つついてSIGALRMを使ったタイムアウト処理についての紹介があり、$SIG{ALRM}とErrno::EINTRを組み合わせたタイムアウト処理が紹介されました。これは便利な半面、SIGALRMはプロセス空間でひとつしか使えないため、本格的に実装するにはselectシステムコールを使うほうが良いということでした。また長時間かかる処理をキャンセル可能にする方法として、Gearman::Workerなどで実装されている方法の紹介もありました。最後にwaitシステムコールの注意点について、これはシグナルを無視してしまうので、Proc::Wait3を使うのが良いとのことです。

普段何気なく使っているOSのシステムコールなども、正しく理解して使わないといろいろ落とし穴があることを再認識出来る有意義なトークでした。

画像

画像

「perl-casual特別企画 PMグループディスカッション」

perl-casual特別企画と冠したセッションの第2弾は、⁠PMグループディスカッション」と題して、日本全国6箇所の地方PMグループの代表者を招いてのディスカッションとなりました。

各pm紹介タイム

まずは各PMの代表者より自己紹介タイムとなりました。

  • Hokkaido.pm - onagataniさん
    • 北海道帯広市在住。Perl歴5年。Movable Typeで仕事している
    • 設立:2010/4
    • PMは本来市町村単位ぐらいで作るのが適切なのに、Hokkaido.pmって広すぎではといわれ、なかなか審査が通らなかった。でも全土でやると広すぎて人が集まらないので、牧さんになんとか説得してもらった
    • JPAへのお願い。講師派遣や初心者向け資料の提供
  • Yokohama.pm - clouderさん
    • 世田谷在住(設立時に横浜に住んでいた)
    • 日本で7つめのpm
    • 横浜を中心に活動しているPerl Mongersがゆっくり参加できるPMが欲しい。
    • Shibuya.pmよりも初心者がトークで参加しやすいPMが欲しい
    • すべて開催後に交流会がある。参加率が90%以上と高い
    • 勉強会以外(忘年会など)も開催したい
  • 名古屋でperlをゆるく語る会 - issmさん
    • 会場への質問。名古屋からこられている方3名程度
    • 名古屋では他の言語の勉強会はあるが、perlがない。
    • 名古屋と近辺の融資で食事しながらPerlについてかたる・という名目の飲み会
    • 毎回10名前後のあつまり
    • @yuruperl
    • Nagoya.pmとして申請中

画像
  • Kansai.pm - lapis25さん
    • 兵庫県在住。普段perlはやってない。
    • 設立:2000年3月
    • リーダーがいない。メンバ融資による運営
    • 年1〜2回のペースでミーティング。広域なのでほぼ土日開催
    • 勉強会だけではなく、新年会、忘年会、ぼたん鍋ツアーなど様々な企画を実施している
  • Fukuoka.pm - debilityさん
    • 2007/11設立
    • 頻繁に定例会のように開催している
    • 技術的なプレゼン、飲み会#1〜#4。ビール瓶で乾杯
    • 設立者の杉山さんありがとうございます
  • 岡山.pm/都会.pm - canadieさん
    • 2009/11から
    • しばらく一人だった。参加人数は8名
    • 問題点。人が集まらない。人が集まらないので問題点がでない。問題点すら出ないのが問題
    • 人を増やすいいアイデアを募集しています

画像

続いて質問テーマについてそれぞれディスカッションとなりました。

議題1) 地方だからできること、できないこと

まずは地方PMだからできること、出来ないことという内容でディスカッションされました。

Fukuoka.pmのdebilityさんは、福岡では勉強会が盛んで会場の取り合いになることが多く、PHP-in福岡と合同で開催したりといった工夫をされているそうです。一方Hokkaido.pmのonagataniさんは、札幌市開催の場合は会場がたくさんあって苦労しないが、帯広市で開催したときは会場がほとんど無くて苦労されたそうです。一方Yokohama.pmのclouderさんは東京から近いこともあってShibuya.pmからも人が集まるなど、そういった点ではあまり苦労がないとのことでした。

議題2) 私、実は今悩んでいます 〜地方PMからのホンネ〜

続いて各PMの悩みについてです。

Nagoya.pmのissmさんは、名古屋では他の言語は盛んだが、perlは扱っている企業が少ないのが悩みとおっしゃっていました。

Okayama.pmのcanadieさんは、岡山では車移動が常識のため飲み会が開催できない、Fukuoka.pmのビール瓶乾杯が羨ましいと仰っていました。ですがFukuoka.pmのdebilityさんによるとビール瓶乾杯は例外とのことです。

Kansai.pmのlapis25さんは、miyagawaさんが来られるときやhatena社で行った時などは人が集まるが、普段の開催ではなかなか新しい人が入って参加しづらくなっているのが悩みとのことです。

またNagoya.pmのissmさんは、Shibuya.pmのようなハッカーの集まりというイメージでハードルが高いと感じているとのことでしたが、会場で参加されていたTokyo.pm設立者の前田さんより、Tokyo.pmも活動当初の目的は月1回の飲み会が目的だったし、海外でも飲み会主体のところや勉強会主体のところなど地域によって様々。どんな形でもまずは人と人とのつながりを大事にして定期的に開催していれば良いと思うというアドバイスが送られていました。

議題3) ちょっと教えて!気になる他PMへ質問

三つめの議題は各PM代表者から募った質問をぶつけるコーナーとなりました。

  • Q.開催する会場の探し方。有料無料、選定基準、開催曜日

Hokkaido.pmのonagataniさんによると、札幌市では100名規模でも4000円で借りられるなど会場には苦労しないが、札幌市意外だと会場そのものがなくて大変であるとこのとでした。また開催日については北海道は広いため週末じゃないと集まるのが難しいとのことでした。Kansai.pmのlapis25さんは、会場の手配は企業などに借りることも多いそうです。費用がかかる場合は実費で精算しているが、関西は学生の参加者も多いので学割を用意するなどの工夫をされているそうです。Yokohama.pmのclouderさんは翌日休みなので飲みやすいということで金曜日開催が多いそうです。Okayama.pmのcanadieさんは参加メンバーの都合に合わせているそうで、たまたま平日が多くなっている人のことでした。Fukuoka.pmのdebilityさんは、メンバーの会社の会議室を借りることが多いそうで、土曜日の昼ぐらいから開催しているとのことです。ここで会場で参加されていたShibuya.pmの設立者であり、miyagawaさんにより、会場を先に決めてしまうと人数が固定されてしまうので、増えてくると苦労するかもしれないといった懸念が述べられていました。

  • Q.他コミュニティとの面白い試みなどはありますか?

Hokkaido.pmのonagataniさんによると、北海道にはITコミュニティ活動を支援する社団法人があり、いろいろ助かるそうです。Fukuoka.pmのdebilityさんは、福岡ではPHPグループとお互いのフレームワークの話をしたりしているそうです。Acmeの話などは他の言語でもおもしろい人のことでした。Kansai.pmのlapis25さんは、⁠またあなたのところの弾さんがPHPをdisっていると言われる」といったエピソードを紹介され、会場から笑いが起こっていました。

  • Q.メンバーの平均年齢と男女比

Hokkaido.pmのonagataniさんは女性参加者は見たことがないとのことでした。Nagoya.pm、Okayama.pm、Fukuoka.pm、Kansai.pmではいつも参加される女性の方がいるとのことです。Yokohama.pmでは98%が男性とのことでした。年齢層は全体的に30歳前後が多いようですが、Nagoya.pmは若い方が多く20代後半ぐらいではないかとのことでした。

  • Q.上級者・初級者がいる中でのトークのレベルなど、運営の仕方について工夫していますか?

Yokohama.pmのclouderさんは初心者がトークする場も提供したいと仰っていました。Hokkaido.pmのonagataniさんは今はあまり意識せずに運営しているが、メンバーも増えてきたのでこれから考えていきたいとのことでした。

議題4) 今後の豊富

最後に今後の豊富について各PM代表より一言ずつ述べられました。

  • Hokkaido.pm onagataniさん ⁠スタッフのかたが増えてこないと運営が回らないことがわかった。今後は初診者にやさしい勉強会を拓いていきたい」
  • Yokohama.pm clouderさん ⁠トーク以外のことも実施していきたい。最近開催数がへってきているので活発化したい」
  • Nagoya issmさん ⁠力まずにゆるく進めたいと思います」
  • Kansai lapis25さん ⁠いままでどおりゆっくり進めたい。初心者にむけては、Rubyとかのロールモデルが周りにあるので、これから検討していきたい」
  • Okayama canadieさん ⁠まずは参加者10人目指したい。フリーディスカッションや、初心者と上級者が教えあうという場をつくっていきたい」
  • Fukuoka debilityさん ⁠これからも周りとの交流をもっとやっていきたい」

画像

xaicronさん「let's database testing!!⁠

xaicronさんのトークは、データベース周りをテストするノウハウの紹介でした。今回は特にMySQLに関する話をされていました。

まず、データベース周りのテストの鉄則として「ローカルでテストできること」を挙げていました。よくない例として、例えばSQLiteを利用したり、汎用のMySQLサーバを利用する例が紹介されました。前者に関してはMySQL環境で動く保証はなく、また、後者に関してはテストをする度に状態が変わってしまい、テストにならないのが問題です。そこで紹介されたのがTest::mysqld。このモジュールを使うと、テストを実行する度に新しいインスタンスでテストすることができるそうです。

また、初期データの投入のためのモジュールとしてはText::Fixture::DBIを紹介。さらにDBIと親和性の高いモジュールとして、SQL::Abstract、DBIx::DBHResolver、DBIx::Connectorを紹介されました。

最後に、Test::mysqldの欠点として、各テストの立ち上げに時間がかかる問題を指摘。解決方法としてはMakefileを編集するのがよいとのことですが、これを簡単にするModule::Install::ExtendsMakeTestというモジュールを紹介していました。データベース周りのテストは開発していて非常に悩む部分でもあり、明日から業務に使えるトークだったと思います。

画像

画像

Dan Kogaiさん「use LLEval;」

言わずと知れたDanさんによる、LLEvalというサービスについてのトークでした。LLEvalとは色んな言語のスクリプトを実行するWEB APIであり、今は23個の言語をサポートしているそうです。

トークはiPadで行われましたが、ご存知の通りiPadにはPerlのインタプリタは搭載されていません。しかし、ブラウザからLLEvalを利用することで、iPadでもPerlのコードを実行することができます。デモでは、Perl5だけでなくPerl6、さらにはHaskell、JS、POST SCRIPT、Python、BF、iotaなどの言語のスクリプトを動作させていました。

他、LLEvalの注意点として、実行時間が1秒以内(Perl6のみ4秒以内)でなければならないこと、そして、危険なシステムコールは発行できないことなどが挙げられていました。最後の質疑応答で、⁠x86への対応は?」と要望が上がると、⁠すぐに対応できます」との返答で、これからも日々機能追加されていくだろうことが伺えました。

画像

画像

横山 彰子さん「perl-casual特別企画 Perlをするとこんないいことあったよスペシャル」

ファミコン、スーファミが大好きと語る横山 彰子さん。perl-casual特別企画の第3弾は「Perlをするとこんないいことあったよスペシャル」と題しての発表でした。今までのPerlコミュニティでの発表歴や、独立までの経緯、普段心がけていることやPerlコミュニティへの思いについて話されました。

横山さんはこれまで何度もPerlコミュニティで発表をされていて、ご自身でもSmiley Hackathon、webrick cafeというイベントを主催されているそうです。現在はフリーランスのエンジニアとして、AnyEventやCoroを使ってクローラを開発されていたりするとのことです。

独立してから心がけていることとして、自分を責めすぎないことや、悪い意見も含めて人の意見を聞くことなどを挙げられていましたが、特に印象にのこったのはアウトプットの重要性で、とにかくブログを書いてイベントで発表してアウトプットを続けましょうということを仰られていました。そういった思想がイベントの主催や各種コミュニティでの発表といった積極的な活動姿勢を裏付けていると感じました。

今後の目標として、CPANモジュールを書きたいと宣言されていました。最後にPerlによって尊敬でいる人たちと関われるようになりPerl最高と締めくくられていました。

画像

画像

Toru Yamaguchiさん「Inside Mobage Platform」

DeNAのYamaguchiさんは、Open Social Containerの実装についてお話しされました。実際にサービス運営に携わっているだけあり、非常に実践的な内容でした。

まず最初に、Open Social独特の用語である、⁠Container」⁠Gadget Server」⁠JS API」⁠Core」⁠Social」⁠View」などの用語の説明がありました。さらに、Apache Shindigについての説明へと続き、⁠認証をする部分は各社で実装をし直す必要があるが、Gadget ParsingとRenderingに関しては仕様が煩雑なのでShindigのものを使うとよい」と開発について指針を述べていました。

その後、システム構成や認証の方法を経て、話はメインとなるSocial APIの作成に関する内容へ。⁠APIはシンプルかつ高速な応答が期待される」と述べ、既存のWAFではなく単純な実装にすべきであり、Plackを利用していると話しました。さらにオブジェクトを集中管理して効率化するためのObject::Containerや、ShardingされたDBへのアクセスを制御するDBIx::DBHResolverについて言及をしました。一連のSQL::Abstract系のモジュールに関しては、⁠新しいSQL作成モジュールが必要かもしれない」と新モジュールの登場を予感させるような発言もありました。

最後に、MySQLのTRIGGER機能をスキーマの変更時に有効活用するテクニックや、TRIGGERとQ4Mを組み合わせる野心的な構成についてまで触れられ、DeNAの持つ大規模サービス運営のためのノウハウを数多く勉強ができる、有意義な40分でした。

画像

画像

Yusuke Wadaさん「perl-casual特別企画 NoSQLで作るTwitter解析サービス」

perl-casual特別企画の第4弾は、Perl Casual主催者のYusuke Wadaさんにより、⁠NoSQLで作るTwitter解析サービス」と題しての発表でした。タイトルにNoSQLとありますが、一度MongoDBを検討したそうですが現在は利用していないそうです。今回はWadaさんが作成されている「Twib」というtwitter連携サービスの実装面について紹介されていました。⁠twib」とはTwitterのホットエントリーサービスで、つぶやかれているURLを収集してランク付けするサービスです。

まずはシステムの基本構成についてです。クロール&表示型サービスは、RSSや検索の結果といった情報元となるリソースと、それらの情報を収集してくるクローラ、情報を格納するデータベース、集めた情報を表示するWEBアプリケーションといった要素で構成されます。⁠Twib」ではリソースにTwitter、クローラ部分はTwitterのsearch APIとStreaming APIの併用、DBはmysql、WEBアプリケーションはDBIx::Class + Catalystといった構成で作られているそうです。

続いてTwibの変遷について発表されました。最初にリリースしたのは2009年8月で当時は3万tweet/1day程度の規模でした。その後しばらく開発はストップしていたそうですが、携帯アプリ「Twittie」との連携の打診があり、また開発を再開したそうです。2010/7月にバージョンアップした時点で80万tweets/1dayの規模にまで成長したそうです。

運用環境は自宅サーバで、アプリケーションサーバ1台、DBサーバ2台、データの解析などを行うWokerサーバといった構成となっているそうです。他のサービスと共有しているためすべてのリソースを使いきれるわけではないとのことでした。

そして実践的な内容へと続きます。まずはTwitter解析サービスのポイントとして、更新が非常に速くデータ量も多いので、とにかく早くどこかへ格納して、解析する際は非同期で処理をするのが重要と述べられていました。また全ての情報を蓄積するとすぐに一杯になってしまうため、情報のプライオリティを決めて切り捨てることも必要とのことです。非同期で解析処理をするためにジョブキューサーバのGearmanを利用されているそうで、60個のworkerプロセスが起動しているそうです。バックエンド処理として信頼性は多少犠牲にしても許容される場合で、速度を重視したい時はGearmanがよいと述べられていました。またリンク先の情報を取得する手段として、HTML::LDRFullFeedとHTML::ExtractContentを併用して精度を上げている点や、画像の抽出にContent-TypeとContent-Lengthを見て一定サイズ以上であれば特徴的な画像と判断するといった実践的な工夫を紹介されていました。

最後にまとめとして、Twitter連携サービスはtweetを早く集めること、情報量が膨大になるのでプライオリティを決めて切り捨てること、ボトルネックはDBとジョブキューになるのでそこを高速化する工夫をすることを挙げられていました。

画像

画像

sugyanさん「perl-casual特別企画 とある自社サービスの運用事例」

perl-casual特別企画のとりを飾ったのは、面白法人カヤックで活躍されているsugyanさんのトークです。⁠とある自社サービスの運用事例」と題して、カヤックで実際に運営されているwonderfl.netとjsdo.itという二つのWebサービスについて、構成や実装の事例を紹介されました。

まずはサービス概要の説明からです。wonderfl.netはオンラインでActionScript3.0のコードが書けるサービスです。ユーザのFollow、コードのFavorite、Forkして他の人のコードを改造するといったSNS的な機能も備えています。またライブコーディング機能もあるそうです。jsdo.itはそれのJavaScript, HTML5, CSS3バージョンということでした。

続いてシステム構成の話へ。両方共Amazon EC2で動いていて、Web&Appサーバ1台、DBサーバ1台という構成だそうです。それに加えてwonderfl.netではAS3をコンパイルするサーバが2台、jsdo.itでは画面キャプチャを取るサーバが1台あるとのことでした。

アプリケーションはCatalyst, DBIx::ClassでObject::Containerベースで、ViewはTemplate-Toolkitを用いていて設定はYAMLベースとのことです。またdaemonプロセスとしてはセッション情報や閲覧頻度の高いコンテンツをキャッシュするためにmemcachedを、AS3のコンパイルやキャプチャ取得など重い処理をバックグラウンドで行うためにgearmanを用いているそうです。

Webサーバは当初lighttpd + fcgiで動いていたそうですが、再起動時などに苦労することが多かったので、Plack & Server::Starter導入を経て現在はnginx + Starletとなっているそうです。これによる設定変更してもダウンタイムなしで変更できるようになり、安定して運用出来るようになった人のことです。

認証の面では自前で作りこまずにOpenID、OAuthを利用しています。当初は別OpenIDだと別アカウントになっていたそうですが、UserテーブルとUserAuthテーブルを用意して1対多で紐付けすることにより、異なるOpenIDでログインしてもwonderfl.net、jsdo.it上では同じIDとして認識できるようになったそうです。

今後の展望として、Template-ToolkitからXslateへの移行や、wonderfl.netとjsdo.itのコードの共通化、検索システムの改良、jsdo.itへのライブコーディングの導入などを挙げられていました。

画像

画像

Lightning Talks

最終日のLTです。

charsbarさん「Top tens of 2009-2010」

毎年恒例の輝け全日本最強CPAN選手権の結果発表でした。1位はHIROSEさんであり、トップ10には新しい顔が4人も含まれていました。その後、会場のリクエストに応えて各国のランキングを出していました。

画像

ふしはらかんさん「opts.pm⁠

後夜祭の告知だけをしてLTを終わらせようとしたかんさん。会場のブーイングを受けてきちんとopts.pmの話もしました。型チェックやデフォルト値への対応がなされており、Getopt::Longよりも使いやすいとのことです。

画像

Cornelius (c9s)さん「vim & perl⁠

CorneliusさんはPerlOmniというvimのPerl補完を行うVimスクリプトを紹介されていました。デモではperlomni.vimとAutoComplPopを組み合わせていましたが、高速に補完が行われていました。Moose文法にも対応しているそうです。

画像

上田智さん「もっとMySQL⁠

小規模なWAFは3層である必要はないと問題提起をする上田さん。出した答えは、⁠データストア層だけあれば十分」というとんでもないものでした。そのためにMySQL向けのHTTPサーバを実装し、⁠MySQLにPerlを組み込んでCatalystが提供できるようにしたい」と展望を語っていました。

画像

Koichi Taniguchi (a.k.a. nipotan)さん「There are so many ways to shuffle it⁠

nipotanさんの職場では、⁠自分の進捗を、他人がコミット履歴を見て報告をする」という効果的なメソッドを実行しているそうです。しかし、そこから話は「ペアをシャッフルして決める必要がある」と思わぬ方向へ。randを使わない、タイムアタック、使える文字を限定するなど自分たちで制限を設けてshuffleの実装を競い合っており、shuffleの得意な人材を求めているそうです。

画像

hakobeさん「ページャ実装マニアックス⁠

はてなに存在する108のページャの実装を紹介するというhakobeさん。一口にページャといっても、データのソースがメモリ上にあるのかDB上にあるのか、日付順であるかどうか、件数の扱い、キャッシュ機構の有無、などで様々な亜種ができてしまっているとのこと。すべて紹介しようと息巻いていましたが、もちろん(?)8個を紹介したところで時間切れとなりました。

画像

Tokuhiro Matsunoさん「液晶が割れたためスライドなしでトーク(仮名⁠

筆者が仮でつけたタイトルにある通り、スライドなしでトークを始めたMatsunoさん。WWW::Curlより25%高速なHTTPクライアントを実装したようですが、⁠日本には素晴らしい能力のある人々がいる」として、WWW::Cuarlより100%高速なクライアントもできるはずと断言。さらに、⁠作りたいものがあったらどんどんハッカー達に伝えよう」と日本の素晴らしいハッカー達の意気込みを代弁していました。

画像

Canada, Masakatzさん「岡山.pm。都会.pm。⁠

岡山.pmの主催者のMasakatzさんのトークは、岡山.pmの運用における問題点を切実に訴えるものでした。その問題点とは、とにかく「人が集まらない」こと。過去のテックトークも参加者は8名で、しかも全員が知人の知人だったそうです。岡山の近辺に在住されている方は、ぜひ岡山.pmに参加しましょう。

画像

まかまかさん「Perl同人誌の宣伝⁠

Acme大全2010の著者であるまかまかさんによる同著書の紹介でした。2009年半との違いとして、⁠ダラク(イメージキャラクター)が大きくなった」とスケールアップしていることを強調。特製のLarry Wallさんやdankogaiさんがデザインされたデコシールを特典として挙げ、何度も貼ったり剥がしたりできるとアピールしていました。

画像

dameninngennさん「草とPerl⁠

草"植"系のdameninngennさんは、Grassでは飽き足らずWerlという言語を開発したそうです。このWerlとは、Perlの予約語をすべてwとWに置き換えたもの。さらに一歩踏み込んだdameninngennさんは、WerlとTAKESAKOさんの予約語プログラミングを組み合わせ、任意の文字列をWerlの予約語だけでできたWerlプログラムに変換するwwencodeをデモしていました。

画像

大西康裕さん「Test::Apache::RewriteRules で mod_rewrite のテストを書こう⁠

はてなでページャーをたくさん作ったという大西さんのLTです。社内のhttpd.confファイルにはRewrite定義が179行も含まれており、1行追加するだけでも大変な状態だったそうです。その対策として開発したのがTest::Apache::RewriteRulesというツールで、実際にリクエストをApacheへ通すことで、mod_rewriteによってどのような書き換えが起こるかをテストできるそうです。

画像

Yusuke Wadaさん「Facebookを流行らせたのはボクです⁠

Facebookの話が広まったのはブログの力だ、とするWadaさん。最近はSNSやTwitterが広まっているが、SNSやTwitterでは自己表現をするには不十分で、ブログが最適であると述べました。さらに「まずはYAPC Asia 2010の感想をブログに書いてみよう」と、会場の参加者達にエンジニアが自己表現することの大切さを訴えていました。

画像

Tatsuhiko Miyagawaさん ⁠Keynote - The Tale of Plack⁠

YAPC::Asia Tokyo 2010のセッションの締めくくりは日本が世界に誇るPerl Hacker、Tatsuhiko Miyagawaさんによるキーノートです。⁠The Tale of Plack」と題して、Plackがわずか1年でここまで成功した要因を箇条書きで分析された内容でした。

  • 1) Good artists borrow, Great artists steal.
  • 2) We were coming in late.
  • 3) JFDI
  • 4) Shut the fuck up and write some code.
  • 5) TIMTOWTDI、BSCINABTE
  • 6) Keep It Simple and Stupid
  • 7) Perl a glue language
  • 8) Cache invalidation and name things

1) Good artists borrow, Great artists steal.

過去の取り組みとしてHTTP::Engineを題材にあげ、これもPlackと同様、WSGI/Rackにインスパイアされて開発を進めていたが、既存のものに引きずられていた部分があった。アイデアはborrowしたけど、stealまではいっていなかった。PSGI/Plackでは名前空間も含めてほとんどがRackとWebOb.pyのコピーで、完全にstealした。そこが良かったのではないかという分析でした。

2) We were coming in late.

WSGIは2003年から取り組まれているのに、PSGI/Plackは2009年の後半に始まりました。タイミング的は遅すぎると行ってもいいくらいですが、逆にそれにより何がうまく行って何が駄目だったか、どうしてそういう結論に至ったのかということを歴史から学ぶことが できたとのがよかったとのことでした。

3) JFDI

"Just Fucking Do It"の略で、コードを書くのに誰の許可もいらないということだそうです。実際Plackを開始したときはIRCで2時間ぐらいしゃべった後、最初にリポジトリをつくったのはtokuhiromさんだったそうです。そのように出来る人がやればいいといった開放的な体制は全てのプロジェクトに適用出来るわけではないが、Plackの場合にはよい方向に作用したのではないかということでした。

4) Shut the fuck up and write some code.

「うだうだ言っていないでとにかくコードを書こう」という、Perl界隈ではしばしば使われる口語です。Plack発足時のコミットログでは、miyagawaさん、tokuhiromさんを中心に最初の1週間で27,000行程度のコードがコミットされるなど、とにかく皆でコードを書いていたそうで、それが成功につながったと分析されていました。

画像

5) TIMTOWTDI、BSCINABTE

TIMTOWTDIはPerlの美徳とされる用語で、"There's more than one way to do it"、やり方は一つじゃないという意味です。Tim Toadyのように読むそうで、Perlの父Larry Wall氏のニックネームともなっているぐらい、Perl界隈では重要な標語です。一方でBSCINABTEという言葉もあります。これは"But sometimes Consistency Is No A Bad Thing Either"の略で、ある程度の制約があることも悪くないということです。Perlのオブジェクトシステムは人により色々な書き方が出来ますが、それを統一したMooseを語る際によく使われる言葉だそうです。Plack/PSGIでも、ひとつの統一したインタフェースを用意することで、サーバとフレームワークの組み合わせに自由が生まれることになり、制約によってTIMTOWTDIが促進された点が成功要因になったと分析されていました。

6) Keep It Simple and Stupid

KISSの原則ともいわれる言葉で、設計は可能な限り単純に保ち続けるのがよいという指針です。PSGIの仕様は馬鹿みたい(Stupid)な仕様で、アプリケーションはハッシュリファレンスを受け取って配列リファレンスを返すだけのコードリファレンスという、Perlのプリミティブ要素だけを使った非常に素朴な仕様となっています。しかしこのシンプルな仕様だったからこそ、各フレームワークは容易にこの仕様に対応することができ、成功につながったと分析されていました。

7) Perl a glue language

glueとは糊(のり)といった意味で、perlが様々なシステムのインタフェースをつなげる用途によくつかわれることが多いということを表しています。それに対してPSGIはglue interfaceとも言うべきものになりました。いろいろなフレームワークが同意するAPIを用意するのはとても大変なことですが、KISSの原則によりシンプルな実装とすることで各フレームワークの賛同を得られ、glue interfaceになれたということでした。

画像

8) Cache invalidation and name things

コンピュータサイエンスで難しいこととして、"Cache invalidation"(キャッシュを削除すること)と、"name things"(名前に関すること)の二つがあるといわれるそうです。Ruby界隈ではフレームワークの名前などは名前空間を切らずにトップレベルに置いていることが多いそうです。PSGI/Plackでは名前の面でもRackなどからsteal(盗む)していて、機能を表すために複雑なHTTP::Server::xxxといった名前は付けなかったということです。取っ付き易いに名前(StarmanやTwiggyなど)を採用したことで愛着もわき、長い機能名を表すために不可解な省略名を使う必要もなくなり、コミュニケーションコストも減らせたのがよかったとのことでした。

9) Perl glues people together

最後に"Perl glues people together"ということで、Perlによって人々がつながり、それによっていいものが生まれているということをで締めくくられました。ここでは世界各国で開催されているPerlイベントの風景写真を紹介され、miyagawaさんがコミュニティを大切にされていること、そしてPerlコミュニティが非常に素晴らしいものであることを伝える非常に感慨深い時間となりました。プレゼンテーション終了後も会場からは大きな拍手がなり続き、このプレゼンテーションが多くの人にとって感動的なものであったことが実感できる締めくくりとなりました。

画像

941さん「Closing Talk⁠

クロージングトークは、JPAの941(櫛井)さんです。何枚も重ね着したYAPC関係のTシャツをたびたび脱ぎながら話されました。

全プログラムを終えたということで「皆さんお疲れさまでした」と声掛けした後、今回941さん自身がイベント運営に携わった経緯を振り返りました。そして、スポンサー、会場提供の東工大、スピーカー、参加者のPerl Hackerの皆さん、そしてボランティアスタッフに感謝の言葉が述べれました。

続いて、発表されたトークから参加者の投票で選ばれる「YAPC::Asia Tokyo 2010 Best Talk」が発表されました。結果、エンターテナー賞はcho45さん、ベストトーク賞のRoundupにはnekokakさん、そしてベストトーク賞にはtokuhiromさんがそれぞれ受賞しました。tokuhiromさんは受賞の言葉として、⁠頑張ってこれ(賞品のMacBook Pro)でみなさんの役立つモジュールを書きます」と述べていました。

最後に、941さんは「来年のYAPCでお会いましょう?」⁠来年のスピーカーはあなたです©yusukebe」と語り、今年のYAPCを締めくくりました。

画像

サイン会

イベントの休憩時間中には、Perlの生みの親であるLarry Wallさんによるサイン会が行われていました。

画像

レポートは以上になります。最後までお読みいただきまして、ありがとうございました。

おすすめ記事

記事・ニュース一覧