2011年12月10日に行われた Hokkaido.pm#6 に行ってきました!
書こう書こうと思いつつ、うっかりこれを書いている日(2011年12月28日)から2週間以上経ってしまっていることに気づいて、「今年やり残したこと」にならないように慌てて書き始めた次第です。本当に遅くてすみません。
前回の Hokkaido.pm#5 に参加したときと同様、今回も東京から札幌へ遠征しました。前回の #5 では「mod_perl温故知新」と銘打った発表を行いましたが、手持ちのモダンPerlな面白い話が特に無かった自分は、今回もmod_perlネタを持って行きました。
YAPC::Asia Tokyo 2011 の gihyo.jp レポートでも、とてつもない速度でレポートを投稿していった @hirataraさんによる「今日は Hokkaido.pm#6 の日です」が前回同様、非常に良いまとめとなっています。本当に迅速にまとめが出来る方には頭が上がりません。また、Hokkaido.pm の Ustream チャンネルには、当日の録画もあります。
以下、各トークへの私なりの感想です。内容については上述のリンクをご覧いただくといいと思います。
@aloelightさん「Carton使ってみた」
モダンPerlの技術を常に追っていらっしゃる、@aloelightさんのCarton話です。→スライド
YAPC::Asia Tokyo 2011 でも、作者である@miyagawaさんが発表されていたCartonでしたが、一日目の午前中だったため、なんだかあの時は会場入るまでバタバタしていて、午前中のトークがあまり頭に入って来なかったんですよね。一日目の午前中は重鎮ぞろいだったってのもあるけど。なので、今回のトークはとても参考になりました。
本人は「簡単すぎて話す事がない」とおっしゃっていましたが、本当に簡単なのかも。まだいじっていませんが、年末年始の休暇中にでも perlbrew の箱庭環境で試してみることにします。パッケージのアンインストールにも対応しているということも改めて知りました。さすが、cpanmより進化しているんだなぁ。
個人的には@aloelightさんと同じ(今の日本でははてブにおされ気味の)Deliciousユーザの私は、@aloelightさんが開発したTweet::ToDeliciousをCartonで動作させるデモが興味深かったです。手元ではpfswatch等も使わせていただいていて、個人的には前回(#5)から色々声をかけていただいたりしてお世話になった(と勝手に思っている)@aloelightさんからは目が離せませんし、その活動をぜひ見習いたいと思って仕方がありません。
▼@akiymさん「botのつくりかた」
Hokkaido.pmが誇る高校生ホープ、@akiymさんのbotのお話です。→スライド
「高校生はIRCを使わない」「高校生はSkypeを使う」という出だし。確かに、IRCは会社とかにいる古い大人が先導して使う道具のようでもあるし、大人数になってワイワイしたいときにこそ真価を発揮するものだよなぁ、と思ったり。そういうわけで、Skypeボットの作り方を…という話の流れでした。
Windows と Linux にはそれぞれモジュールがあって、Skype API を叩くことができるのですが、モジュールがバラバラなので Skype::Any というモジュールを作ったという話。
Mac には同様の Skype API を叩くモジュールは無いようで、Cocoa と対峙しないといけないなぁ、といった話が繰り広げられていました。でも、@akiymさんなら近いうちに何とかしてくれそう、という期待も持っています。
@akiymさんのトークを聴講するたびに、2011年の高校生は本当にすごいなと思わされます。いや、@akiymさんが特に優秀だということは分かっているのですが。自分が2011年に高校生だったらどうなっていただろう…、と思わざるを得ません。
@nekokakさん「Clutch – distributed job system」
既に Perl Job Queue の先鋒として Qudo や Jonk など数々のプロダクトを世の中に出している@nekokakさんによる Job Queue の話。→スライド
Job Queue と Message Queue の違いの話は、今まで多少は気になっていたもののよく分からなくて放置していたのですが、実際に学術的な違い以上のことは考えなくてイイということが知れてよかったです。
Job Queue や Message Queue 等、要所要所で「使っている人いますかー?」というアンケートをされていましたが、手を挙げられずすみません…。会社でも Job Queue や軽量ORMを推進していこうとしているのですが、なかなかうまくいかず。まぁ、会社の主力製品も大規模で、おいそれと新しいものを入れるわけにいかないという言い訳もあるのですが…。来年2012年は個人プロジェクトを立ち上げる等して、そこで@nekokakさんプロダクトを入れていきたいなぁ、と思っています。
@xtetsuji「mod_perl hacks PHP」
はい、私の発表です。感想というか反省点やフォローなど。→スライド
スライドにも書いてありますが「モダンPerlに乗れていない」という通り、あまり手持ちのモダンPerlネタで話せるものもなく(POEの置き換えとしてAnyEventを最近いじり始めたり等してはいますが)、@aloelightさんのツイートにも後押しされて今回もmod_perlネタにしてみました。
まずはタイトルを決めて内容を考えていったのですが、正直タイトルを申請したところで「ちょっと大それてやいないか?」「PHPerに発見されて怒られたら嫌だなぁ」という思惑が頭の中をよぎって、トークの最初は言い訳みたいなものが続くことになってしまいました。
PHPも良いし日々お世話になっている。けど、世間で発注して納品されるPHP製品は残念ながら決して品質の高いものばかりでは無く、既に誰も保守していないPHPに手を加えて機能追加をしないといけない悲劇、また製品保守をしてもらったとしても契約などの縛りで手を加えることができない大人の世界のジレンマもあったりする、といった背景を打ち出してみました。
内容は「PHPに前処理をはさむ」「PHPに後処理をはさむ」の二部構成にしてみました。前処理も後処理も色々な、それこそApacheモジュールでできるあらゆることができるのですが、興味を持ってもらえるテーマは何だろうと考えて、前処理は認証周り、そして後処理は出力フィルタ周り、といった部分を話すことにしました。
「前処理」の認証周りについては「Cookieを読み書きできるからPHPの認証を捨て去ってPerlの認証を入れたり、既存サイトとSSOできるよ!」といったコンセプトを言うだけで、デモを作る時間がありませんでした。本当ならCPANモジュールのApache2::AuthCookie等を使ったデモを見せられれば良かったのですが、持ち時間の20分だとコンセプトの発表にとどめておいて正解でした。前処理といえば、PHPer御用達(今もそうなのかはわかりませんが)のmod_rewriteをPerlTransHandlerで置き換えるといったお話も興味を引くかと考えましたが、それは前回発表したし、トークという場では無い、ブログなどでまとめてお話が出来ればいいなと思って、完全に割愛しました。
認証周りをやると、画面に「〇〇さん、こんにちは」みたいなモノを出したくなるのでは?といった疑問にこたえるべく、Apacheノートについてお話しようと思ったのですが、時間がなく盛り込めずでした。そもそもデモすらしませんでしたからね。AuthenやAuthzのフェーズで認証をしてDBからユーザ名 $username を引けた場合、$r->notes->set( username => $username ) などとして、Apacheノートに記録することができます。これによって、フェーズ間で情報のやり取りができます。少なくともApacheモジュールで動作するPHP(mod_php)にはapache_note()という関数があり、mod_perlから渡したApacheノートを取り出すことができます。これによって、PHP側で認証をするほどの労力を使うことなく、「〇〇さん、こんにちは」を実現することができます。PHPソースコードの改変が必要にはなりますが、最低限で良いというのがメリットです。文字コード等はよしなにお願いします。
「後処理」は、出力フィルタ、ログ、クリーンナップ、と数えるほどしか無いのですが、Apache2から導入されたネイティブの出力フィルタをmod_perlから使う話は面白いのではないかと思って、今回取り上げさせていただきました。本当は出力フィルタの話は結構複雑なのですが、Bucket BrigadeとかそういったApache専門用語は使わず、ソケットから丸呑みして書き換えてやれ、といった20分トーク仕様にしてあります。後処理は簡単でもいいからデモをしてみようと、初デモをしてみました。Pukiwikiの出力を書き換えるというデモでした。本当なら、ドコモ端末から絵文字入り投稿をしたページをソフトバンクで見たらEncode::JP::Mobile等を使ったmod_perl出力フィルタが絵文字変換をしている、といった嬉しいデモを見せたかったのですが、Pukiwikiにドコモ端末から絵文字を投稿したら丸々文字化けしてしまって愕然となり、発表直前に諦めざるを得ませんでした。結局、出力に特定のキーワードがあったらそれを大文字にするとか、簡単なデモで済ませてしまいました。
「時間がかかる処理はまずユーザに画面を出して、実際の処理はJob Queueに任せる」といったものがモダンPerlの鉄則ですが、prefork MPM Apache + mod_perl を使った安上がりな解決方法として、クリーンナップフェーズで処理をする方法があります。そうすれば、ユーザに画面も出してログも書いた後、数十秒かかる処理でも気にすること無くApacheが処理をすることができます。ただ、かかる時間やそのような処理の発生頻度が高い場合には、クリーンナップフェーズで処理をしているApacheが溜まってリクエスト受付処理ができない場合があります。その場合はクリーンナップフェーズで必要な処理をする別プログラムを用意してexec()して処理を移譲してしまえば、そのApacheは消えていなくなってしまい、Apacheの設定に伴って必要があれば親から新しい子プロセスが供給されます。ただ、この場合はexec()のコストも考えないといけないので、これも良し悪しかな。
懇親会までの間に複数の方から「mod_perlを使うとApacheが太りませんか?その対策はどうすれば?」といった質問を受けましたが、こればっかりはどうしようもありませんね。ハードウェアにメモリを潤沢に乗せるか、Apacheの設定MaxRequestPerChildを小さめに設定する、Apache::SizeLimit (mod_perl1)、Apache2::SizeLimit (mod_perl2) を使って太り過ぎて支障が出るほどのApacheに退役してもらう作戦くらいしか回答できませんでした。
関係ない話で熱く語って長くなってしまいましたが、この熱意をトークでも出した「日本mod_perl改造計画」につなげていきたいと考えています。
mod_perlバカと思われている私ですが、まだまだ使ったことのないmod_perlの機能は沢山あります。Plack/PSGIの登場で使いやすいWAFが登場して、特定のウェブサーバに依存せず簡単にウェブアプリケーションを作ることができる嬉しい時代ですが、こういったPHP等の他言語との連携をする場合に、最もシェアの高いApache上で動くmod_perlの「魔法」を使って助かったという人が、私の活動をきっかけに一人でも出てきてくだされば本望です。
@hirataraさん「循環参照のはなし」
冒頭でも触れた、最速でHokkaido.pm#6をレポートしてくださった@hirataraさんによる、循環参照のお話です。→スライド
出だしで、私の冒頭の言葉を拾ってくださって「私もモダンPerlに乗れていない…」と@hirataraさんがおっしゃったときには「いえいえそんなことはー!」って言いそうになってしまいました。Ustreamされているので、さすがにその場では言いませんでしたけど、懇親会で「恐れ多いです」とはお伝えしました(笑)。
循環参照。結構Perlを書いていれば誰しもが知ることになる言葉ですが、普通にコードを書いていればあまり出会わないものと思っていました。ただ、昨今は非同期・イベント駆動フレームワークでサブルーチンリファレンス・コールバックが多用され、そうった状況下で循環参照が発生しやすいといったお話は、非常に参考になりました。さすが AnyEvent 等を極めている@hirataraさんだけあるなぁ、と非常に感心してしまいました。
Perlユーザであれば、昔からの標準モジュールScalar::Utilにあるweaken()でどうにかなるんじゃないの?といった部分についても、そう単純にはいかないよといった話があって、循環参照って古くて新しい、結構難しい問題なんだなと思った次第です。
@onagataniさん「YAPC::Asia Hokkaido 実現に向けて」
以前から開催が計画されていた YAPC::Asia Hokaido 実現に向けての計画を、Hokkaido.pm 代表の @onagataniさんがお話されました。→スライド
当初はLTでのトークの予定でしたが、時間が余ったのでこの枠に移りました。結果15分ほどのトークとなったので、ちょうど良かったのだと思います。
「Hokkaido Perl Workshop」などいくつか名前が提案されていましたが、このトークで「YAPC::Asia Hokkaido」という言葉が正式に打ち立てられたと思います。北海道出身者として、YAPC が北海道で催されるのであれば、これほど嬉しいことはありません。
ただ、トーク後の質問等でも出ましたが、どの時期に開催するとしても何らかのイベントと大抵ぶつかる事や、初の東京以外でのYAPC開催への不安、様々な見積もり、会場をどうするか等、これから解決していかなくてはならない問題は多そうです。
私は東京在住の身であり、実働部隊のスタッフとしてお手伝いし難い部分もありますが、早速 Google Group に加わらさせていただきました。可能な支援は積極的にしていこうと考えています。
LT
- @sugyanさん「たのしい記号Perlプログラミング」
拡張正規表現を使えば7つの記号だけでプログラミングができる!→排他的論理和を活用→Acme::HeptaSymbolize→画像からHello! World.が作れるよ。→かわいいアイコンと北海道でデモ - @koji_magiさん「困ったときのAcme::*」
最近お祝いする人ができた→Acme::Omedetou→ひたすら画面におめでとう→「Hokkaido.pmに参加すると嫁ができる」 - @techno_nekoさん「GUIアプリに必要な3つのこと」
「人見知りの人こそ、スピーカーになって話しかけてもらう」→GUIは痒いところに手が届くことが大切 - @nekokakさん「Object::Container::Exporter」
飛び入りLT参加(すごいです)→Object::Containerはシングルトンにオブジェクト管理用モジュール→Object::Container::Exporterはimportやnew等、さらに色々なことを行ってくれる - @charsbarさん「YAPC::Asia Hokkaido 実現に向けてへの補足」
飛び入りLT参加→直前の@onagataniさんの YAPC::Asia Hokkaido 実現に向けてのトークについて、 このスケジュールだと海外のコレとかぶるよ、といったアドバイス。
雪駄で関東からいらっしゃった@sugyanさんのLTは、Yokohama.pmのUstreamで以前拝見したもののパワーアップバージョンでした。面白い。@koji_magiさんのAcme::Omedetouといい、Acme::*は本当に楽しいPerlの文化です。
@techno_nekoさんが主張する「人見知りの人こそ、スピーカーになって話しかけてもらう」は、私自身が今年実感したことです。枠とネタがあるのなら是非しゃべるべき。そうすれば、人見知りで人に声をかける勇気が必要な方でも、話しかけてもらえます。
飛び入りでLTをするという@nekokakさんと@charsbarさん。さすが熟練者だなぁと思わずにはいられませんでした。また、様々な国内・海外の動向を把握している@charsbarさんはスゴイなぁと感じました。
その後
余剰時間を使うことなく完璧に時間通りに終了し、結構余った時間をロビーで過ごしつつ、懇親会の時間が近づいてきたら数人でタクシーをつかまえて、懇親会の会場へ移動しました。その間、外に積もった雪にはしゃぐ@sugyanさんや@nekokakさんを見て皆さんで楽しんでいました。
懇親会
関数型都市忘年会との合同忘年会でした。テーブルはHokkaido.pmと関数型都市で分かれていて、向こう側のお話は難しくてついて行けなかったので、私は主にHokkaido.pm側の席でいろいろな方とお話をしていました。
今回、取材でいらっしゃった@ya_k0さんから、著名な某ハッカーの素性を拝聴したり、YAPC::Asia Tokyo 2011 でお会いできなかった@hirataraさんと初めておしゃべりをして「モダンPerlに乗り遅れているのは私だけですよー」などと話しかけたり、同じ数学科出身という共通項で勝手に盛り上がってお話をさせていただきました。
その他にも、YAPC::Asia Tokyo 2011以来の再会となったスカイアークシステムの方々を初めとした北海道勢の方々と改めてお話をしたり、気がついたらParumonで盛り上がっている@aloelightさん達を見て羨ましく思ったり、美味しい料理を食べたり、本当に楽しい懇親会となりました。
ここまでお話、特に懇親会の雰囲気については、以下の @ya_k0 さんのブログのまとめが秀逸です。写真が上手い!
私も乾杯のシーンで笑顔を写真に出しています。また、酔って口から出た発言も拾われちゃっていますね。あはは。
二次会
懇親会終了で関数型都市とは分かれて二次会へ。Hokkaido.pmは@onagataniさんが先導して、見つけたお店に入ってみたものの、最初のうちは混雑していてぎゅーぎゅー詰めにされて大変でしたが、後半は客が引いて余裕が出来たスペースを勝手にHokkaido.pm勢が占拠して、事なきを得ました。
初参加という@jamadamさんに、今回の私のトークを褒めていただいたのは嬉しかったですね。レガシーPerlもまだまだ健在だし、一から自分達の自由に作れる会社よりも、ボロボロの製品の保守を引き受けたりコンテンツ移管をしたりといった事のほうが世間では多いんじゃないかとか、そんな話。私の会社もそんな時期があったからこその今回の私のトークだったので、今も一人開発者として奮闘している@jamadamさんと意気投合して、途中から@onagataniさんも入って一緒に楽しく語らいました。
あ、一人開発者って、自分の今の会社での立ち位置も似たようなものじゃん!会社では開発者の求人も募集しているので、そちらもよろしくお願いしますね。2012年はみんなでワイワイ開発したいなー。
まとめ
今年は5月の@onagataniさんとの出会いから、トントン拍子に7月の Hokkaido.pm#5 に初参加+人生初トークとなり、12月の今イベント Hokkaido.pm#6 も参加+トークという、非常に充実した一年となりました。GitHubやCPANに動く有用なものをアップするまでにはまだ到達していませんが、トーク活動共々、実際に動く有用なものを世の中に出していくことも来年2012年の目標にしたいと、Hokkaido.pmに意欲と情熱を貰った一年でした。
今回も長文となってしまいましたが、ここまで読んでいただいた方、ありがとうございます。