10月15日、
電車遅延のため、
※今回のレポートは全セッションを回れておりません。ご了承ください。
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ではテンプレートを処理する際に、いったん前処理でプログラミング言語風な状態に変換してからパースしているそうです。パーサの実装は手書きで作られていて、オライリー社から出版されているビューティフルコードの
質疑応答ではテンプレートをperlコードに落としこむ実装にせずにあえてバーチャルマシン化した理由について尋ねられていました。それに対してperlのインタプリタはテンプレート処理に特化しているわけではないので、文字列の連結処理などにオーバーヘッドがある、Xslateではそのあたりを最適化していて、高速化できていると説明されていました。また他言語への展開についても質問がありましたが、現状perlの実装に深く依存しているため難しいとのことでした。
twitter上でも次は使ってみたいという声があがるなど、今後注目のテンプレートエンジンだと思いました。
なお、
Yappoさん「Ajax Application Testing」
このセッションは、
JSTAPdを使うためには、
作成したテストは、
最後に、
Jesse Vincentさん「Perl5 is Alive!」
正午から行われたセッションは、
その後、
Jesseさんはまた、
最後に、
overlastさん「Perl で自然言語処理」
overlastさん
自然言語処理とは、人間が普段意思疎通に使っている自然言語をコンピュータに処理させるためのもので、プログラミング言語とは明確に区別されています。自然言語処理を行う上で必要な知識は、対象言語にたいする知識、確率統計の知識、プログラミングスキルの3点を挙げられていましたが、前者2つは少しでよくプログラミングスキルが重要ということでした。
続いて実際に自然言語処理を始める際の3つの心構えとして
- 最初は簡単に実装し、徐々に洗練する
- 機械はミスをする
- データは自前であつめて、自前で管理する
ということを述べられていました。1点目についてはスモールスタートで導入し、ユーザの動向を見てから洗練させるのがよいということでした。2点目については特にコンピュータに詳しくない人などは過剰な期待をしてしまいがちだが、コンピュータに誤った文章を判断させるというのは難しく、ある程度割り切りが必要とのことでした。3点目については自然言語処理はしばしば計算量が多くなるため、ローカルに蓄積しておくほうが有利であるとのことでした。
後半はWebサービスにありがちな悩みと、その解決に活用できるCPANモジュールの紹介でした。ユーザの回遊性を高めたいという悩みには、レコメンドやはてなキーワードのようなアンカーテキストが有効とし、Algorithm::NaiveBayesやText::Dartsを挙げられていました。その他ソート順を変えるのも有効で、ソート順を機械学習させたいといった要件にはAlgorhithm::SVMLightが使えるそうです。またデータを近いものから結合してデータの塊をつくっていくクラスタリングに使えるモジュールとして、Text::Bayonを挙げられていました。
cho45さん「映画にでてくるハッカーになりたい」
cho45さん
まず映画にでてくるハッカーのイメージ像の話からで、
まずはrealtimeresponsegraph.
つづいてrealtimeaccesstracker.
最後はDevel::KTYProfで、こちらはonishiさんが作成されたものだそうです。DBIやmemcachedといった、IOに関わる処理を処理時間とともにターミナルに出力するもので、どこから呼び出されているかも出力されるそうです。こちらもデモが披露され、select文やmemcachedのget処理といったものがカラーでターミナルに出力されていました。
終始会場から笑いが起こるトークで、クロージングでは投票によるエンターテナー賞を受賞されていました。
Kenichi Ishigakiさん「ある連載の舞台裏 - History tells us ...」
「モダンPerlの世界へようこそ」
まず、
そこでIshigakiさんが考えたのはPerlの歴史。CGIの全盛期にPerlを使っていた世代が現在では社会でそれなりの権限を持っていることを取り上げ、
その後、
kazuhoさん「perl-casual特別企画 Unix Programming with Perl」
perl-casual特別企画と冠したセッションです。まずはkazuhoさんより、
まずは正しいコードを書くためにはperlの知識やOSの知識が必要であるとし、今回はOS周りの話でも間違いを起こしやすいケースとして、errno、forkとファイルハンドル、シグナルの3点について解説がありました。
まずはerrnoについてです。ディレクトリを作成する際に、下記のようなコードを書いてしまうことがありがちです。
しかし、このコードでは複数のプロセスから同時にコードが実行される環境ではうまくうごかないケースがあります。正しい対処方法は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紹介タイム
まずは各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。ビール瓶で乾杯
- 設立者の杉山さんありがとうございます
- 2007/
- 岡山.pm/都会.pm - canadieさん
- 2009/
11から - しばらく一人だった。参加人数は8名
- 問題点。人が集まらない。人が集まらないので問題点がでない。問題点すら出ないのが問題
- 人を増やすいいアイデアを募集しています
- 2009/
続いて質問テーマについてそれぞれディスカッションとなりました。
議題1) 地方だからできること、できないこと
まずは地方PMだからできること、出来ないことという内容でディスカッションされました。
Fukuoka.
議題2) 私、実は今悩んでいます 〜地方PMからのホンネ〜
続いて各PMの悩みについてです。
Nagoya.
Okayama.
Kansai.
またNagoya.
議題3) ちょっと教えて!気になる他PMへ質問
三つめの議題は各PM代表者から募った質問をぶつけるコーナーとなりました。
- Q.開催する会場の探し方。有料無料、選定基準、開催曜日
Hokkaido.
- Q.他コミュニティとの面白い試みなどはありますか?
Hokkaido.
- Q.メンバーの平均年齢と男女比
Hokkaido.
- Q.上級者・
初級者がいる中でのトークのレベルなど、運営の仕方について工夫していますか?
Yokohama.
議題4) 今後の豊富
最後に今後の豊富について各PM代表より一言ずつ述べられました。
- Hokkaido.
pm onagataniさん 「スタッフのかたが増えてこないと運営が回らないことがわかった。今後は初診者にやさしい勉強会を拓いていきたい」 - Yokohama.
pm clouderさん 「トーク以外のことも実施していきたい。最近開催数がへってきているので活発化したい」 - Nagoya issmさん 「力まずにゆるく進めたいと思います」
- Kansai lapis25さん 「いままでどおりゆっくり進めたい。初心者にむけては、Rubyとかのロールモデルが周りにあるので、これから検討していきたい」
- Okayama canadieさん 「まずは参加者10人目指したい。フリーディスカッションや、初心者と上級者が教えあうという場をつくっていきたい」
- Fukuoka debilityさん 「これからも周りとの交流をもっとやっていきたい」
xaicronさん「let's database testing!!」
xaicronさんのトークは、
まず、
また、
最後に、
Dan Kogaiさん「use LLEval;」
言わずと知れたDanさんによる、
トークはiPadで行われましたが、
他、
横山 彰子さん「perl-casual特別企画 Perlをするとこんないいことあったよスペシャル」
ファミコン、スーファミが大好きと語る横山 彰子さん。perl-casual特別企画の第3弾は
横山さんはこれまで何度もPerlコミュニティで発表をされていて、ご自身でもSmiley Hackathon、webrick cafeというイベントを主催されているそうです。現在はフリーランスのエンジニアとして、AnyEventやCoroを使ってクローラを開発されていたりするとのことです。
独立してから心がけていることとして、自分を責めすぎないことや、悪い意見も含めて人の意見を聞くことなどを挙げられていましたが、特に印象にのこったのはアウトプットの重要性で、とにかくブログを書いてイベントで発表してアウトプットを続けましょうということを仰られていました。そういった思想がイベントの主催や各種コミュニティでの発表といった積極的な活動姿勢を裏付けていると感じました。
今後の目標として、CPANモジュールを書きたいと宣言されていました。最後にPerlによって尊敬でいる人たちと関われるようになりPerl最高と締めくくられていました。
Toru Yamaguchiさん「Inside Mobage Platform」
DeNAのYamaguchiさんは、
まず最初に、
その後、
最後に、
Yusuke Wadaさん「perl-casual特別企画 NoSQLで作るTwitter解析サービス」
perl-casual特別企画の第4弾は、Perl Casual主催者のYusuke Wadaさんにより、
まずはシステムの基本構成についてです。クロール&表示型サービスは、RSSや検索の結果といった情報元となるリソースと、それらの情報を収集してくるクローラ、情報を格納するデータベース、集めた情報を表示するWEBアプリケーションといった要素で構成されます。
続いてTwibの変遷について発表されました。最初にリリースしたのは2009年8月で当時は3万tweet/
運用環境は自宅サーバで、アプリケーションサーバ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.
続いてシステム構成の話へ。両方共Amazon EC2で動いていて、Web&Appサーバ1台、DBサーバ1台という構成だそうです。それに加えてwonderfl.
アプリケーションは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.
今後の展望として、Template-ToolkitからXslateへの移行や、wonderfl.
Lightning Talks
最終日のLTです。
charsbarさん「Top tens of 2009-2010」
毎年恒例の輝け全日本最強CPAN選手権の結果発表でした。1位はHIROSEさんであり、トップ10には新しい顔が4人も含まれていました。その後、会場のリクエストに応えて各国のランキングを出していました。
ふしはらかんさん「opts.pm」
後夜祭の告知だけをしてLTを終わらせようとしたかんさん。会場のブーイングを受けてきちんとopts.
Cornelius (c9s)さん「vim & perl」
CorneliusさんはPerlOmniというvimのPerl補完を行うVimスクリプトを紹介されていました。デモではperlomni.
上田智さん「もっとMySQL」
小規模なWAFは3層である必要はないと問題提起をする上田さん。出した答えは、
Koichi Taniguchi (a.k.a. nipotan)さん「There are so many ways to shuffle it」
nipotanさんの職場では、
hakobeさん「ページャ実装マニアックス」
はてなに存在する108のページャの実装を紹介するというhakobeさん。一口にページャといっても、データのソースがメモリ上にあるのかDB上にあるのか、日付順であるかどうか、件数の扱い、キャッシュ機構の有無、などで様々な亜種ができてしまっているとのこと。すべて紹介しようと息巻いていましたが、もちろん(?
Tokuhiro Matsunoさん「液晶が割れたためスライドなしでトーク(仮名)」
筆者が仮でつけたタイトルにある通り、スライドなしでトークを始めたMatsunoさん。WWW::Curlより25%高速なHTTPクライアントを実装したようですが、
Canada, Masakatzさん「岡山.pm。都会.pm。」
岡山.pmの主催者のMasakatzさんのトークは、岡山.pmの運用における問題点を切実に訴えるものでした。その問題点とは、とにかく
まかまかさん「Perl同人誌の宣伝」
Acme大全2010の著者であるまかまかさんによる同著書の紹介でした。2009年半との違いとして、
dameninngennさん「草とPerl」
草"植"系のdameninngennさんは、Grassでは飽き足らずWerlという言語を開発したそうです。このWerlとは、Perlの予約語をすべてwとWに置き換えたもの。さらに一歩踏み込んだdameninngennさんは、WerlとTAKESAKOさんの予約語プログラミングを組み合わせ、任意の文字列をWerlの予約語だけでできたWerlプログラムに変換するwwencodeをデモしていました。
大西康裕さん「Test::Apache::RewriteRules で mod_rewrite のテストを書こう」
はてなでページャーをたくさん作ったという大西さんのLTです。社内のhttpd.
Yusuke Wadaさん「Facebookを流行らせたのはボクです」
Facebookの話が広まったのはブログの力だ、とするWadaさん。最近はSNSやTwitterが広まっているが、SNSやTwitterでは自己表現をするには不十分で、ブログが最適であると述べました。さらに
Tatsuhiko Miyagawaさん 「Keynote - The Tale of Plack」
YAPC::Asia Tokyo 2010のセッションの締めくくりは日本が世界に誇るPerl Hacker、Tatsuhiko Miyagawaさんによるキーノートです。
- 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/
2) We were coming in late.
WSGIは2003年から取り組まれているのに、PSGI/
3) JFDI
"Just Fucking Do It"の略で、コードを書くのに誰の許可もいらないということだそうです。実際Plackを開始したときはIRCで2時間ぐらいしゃべった後、最初にリポジトリをつくったのはtokuhiromさんだったそうです。そのように出来る人がやればいいといった開放的な体制は全てのプロジェクトに適用出来るわけではないが、Plackの場合にはよい方向に作用したのではないかということでした。
4) Shut the fuck up and write some code.
「うだうだ言っていないでとにかくコードを書こう」
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/
6) Keep It Simple and Stupid
KISSの原則ともいわれる言葉で、設計は可能な限り単純に保ち続けるのがよいという指針です。PSGIの仕様は馬鹿みたい(Stupid)な仕様で、アプリケーションはハッシュリファレンスを受け取って配列リファレンスを返すだけのコードリファレンスという、Perlのプリミティブ要素だけを使った非常に素朴な仕様となっています。しかしこのシンプルな仕様だったからこそ、各フレームワークは容易にこの仕様に対応することができ、成功につながったと分析されていました。
7) Perl a glue language
glueとは糊
8) Cache invalidation and name things
コンピュータサイエンスで難しいこととして、"Cache invalidation"
9) Perl glues people together
最後に"Perl glues people together"ということで、Perlによって人々がつながり、それによっていいものが生まれているということをで締めくくられました。ここでは世界各国で開催されているPerlイベントの風景写真を紹介され、miyagawaさんがコミュニティを大切にされていること、そしてPerlコミュニティが非常に素晴らしいものであることを伝える非常に感慨深い時間となりました。プレゼンテーション終了後も会場からは大きな拍手がなり続き、このプレゼンテーションが多くの人にとって感動的なものであったことが実感できる締めくくりとなりました。
941さん「Closing Talk」
クロージングトークは、
全プログラムを終えたということで
続いて、
最後に、
サイン会
イベントの休憩時間中には、
レポートは以上になります。最後までお読みいただきまして、