月別アーカイブ: 2013年10月

Google日本語入力のローマ字テーブルを設定するとはかどる

おがた (@xtetsuji) です。

ここ最近長文エントリが続いたので、軽めの話題。

最近では「Google日本語入力」がだいぶ普及してきました。無料であること、軽い事、Windows/Mac/Linuxマルチプラットフォームであること、Googleの面目躍如とも言える名詞の変換効率の良さなど、色々な要因があると思います。

さて、Google日本語入力をあまりよく知らない人が驚く機能として「変換モードをオンにして zh って打ったら ← (左矢印) が出た」というもの。これは変換辞書ではなくローマ字テーブルに定義されているものです。これ自体、Googleの発案ではなく、UNIX/Linuxで大昔から使われていた日本語変換ソフトCannaや、その後継として最近使われているAnthy等で普通に定義されて使われているものなんです。

実際に設定から「ローマ字テーブル」のところまでたどってみてください(各OSで若干手順が違うかもしれません)。

Google日本語入力のローマ字テーブル設定

色々な初期定義があることがわかります。このローマ字テーブルの定義に追加をすることで、記号等を素早く出す定義を作ることができます。

かな漢字変換の変換設定を追加することで効率アップという話はいたるところでききます。「よろ」と入れれば「よろしくお願いします」と出るような類。ただ、Google日本語入力ではサジェスト機能があるので、一度実際の変換で覚えさせればそういう設定が必須ではないという優秀さもあります。

ローマ字テーブルの定義を見てみると、zとの合わせ技で一文字の記号を出すという設定が多いのが分かります。ローマ字変換ではあまり使われない子音であることと、qwerty配列キーボードの場合は左手→右手という流れで打てることが意識されていることが分かると思います。なので新規追加する設定では、qやxを選んでもいいのですが、まずは無難にzの「空いているところ」を選ぶとよいでしょう。

設定はボタンを押すことで直感的に出来ると思います (各OS版やGoogle日本語入力のバージョンによって操作に差異があるかもしれません) ので説明は省きます。

以下のスクリーンショットでは、zn と打つと ▼ が出力され、zm と打つと ▽ が出力される設定を追加してみたところです。これは私がよくテキストメールなどでセクションの頭文字として使うことが多い記号だからです。人によっては、四角記号や一般的なセクション記号 § や、ダガー記号 † ‡ を登録しておくとはかどるかもしれません。

ローマ字変換テーブルに設定追加

 

変換辞書の設定との使い分けですが、変換辞書はローマ字変換テーブルと比較して例えば以下のようなデメリットがあるでしょう。

  • 意図した変換候補の順番が常に最新とは限らない。また複数出てきて選択が煩わしいこともある (「さんかく」と打って複数出てきたりする)
  • 逆に変換を意図しない場合に出てきて煩わしいことがある (「よ」で「よろしくお願いします」が出る設定の場合、意図せずそれが出てきて、うっかりチャットに放流したりすることがある等)

逆に、ローマ字変換テーブルは変換辞書と比べて例えば以下のようなデメリットがあるでしょう。

  • キーバインドの数に制限がある
  • 特に定義を多くし過ぎると覚えきれない
  • 設定として変換辞書ほど一般的ではないので、乗り換え時の移植性に困難が伴う可能性がある

「変換辞書」もGoogle日本語入力のサジェスト検索と組み合わせると今までのIMEに比べて随分とはかどりますが、要所要所に「ローマ字変換テーブル」の設定を導入すると結構便利。人によって使い分けはさまざまかと思いますが、色々と模索してみると良いかもしれません。オススメです。

YAPC::Asia Tokyo 2013 で「Apacheの展望とmod_perlの超絶技巧」というトークをしてきた話など #yapcasia

おがた (@xtetsuji) です。

YAPC::Asia Tokyo 2013 トークなど編。その他の「YAPC::Asia Tokyo 2013」関連記事は目次ブログ記事からどうぞ。

いつもそうですが、今回もかなりの長文です(1万文字越え!)。mod_perlに特段の興味のない方は、流し読みでどうぞ!YAPC::Asia Tokyo 2013関連のブログ記事はこれが完結編の予定。

トーク「Apacheの展望とmod_perlの超絶技巧」について

昨年の初トークに続き、今年もYAPC::Asiaの壇上で2度目のトーク「Apacheの展望とmod_perlの超絶技巧」をさせていただきました。2年連続、今年も飽きずに得意の持ちネタであるmod_perlネタをぶつけましたが、今年も採用してくださって本当にありがたいです。世間では古い古いと邪険に扱われがちなmod_perlですが、こういうトークもソーシャルボタン等でそれなりの支持をいただいて嬉しい気持ちです。

最初はタイトルが「mod_perlの展望とApacheの超絶技巧」というタイトルだったのですが、スライドを作って発表が終わって一段落付くまで、Apacheとmod_perlというキーワードが入れ替わっていた事に気がつかないというボケをかましてしまいました。悩んだ挙句、トークページのタイトルをしれっと書き換えるという作戦に出ました。これくらいであれば許されますよね?

前のVimのトークはイベントホールが満席状態だったのに、自分が壇上に立ったら半分くらい人がいなくなったときは焦りました。ただ、イベントホールとメインホールは普段はそんな感じで、多目的教室が狭すぎたという意見も聞きますし、mod_perlというニッチな題材にしては、そこそこの入りだったかなと感じます。

実際、話したかった事は

  • Apache httpd serverは、Nginx等の他のウェブサーバ実装の台頭でこの先どのようになるのか展望を話す
  • mod_perl2 を使って任意のサーバが Apache2 と同等の堅牢性で書けるということのコンセプトを示す

というところだったので、タイトルとしては「Apacheの展望とmod_perlの超絶技巧」のほうが言いたかったことを表しているわけです。

前年は「mod_perlの本質とは何か」ということをmod_perl1とmod_perl2両方を例示して懇切丁寧に解説して大量のスライドが余った感じでしたが、今回はmod_perl1の説明は一切しませんでした。私自身が関わっている業務でもmod_perl1をmod_perl2にマイグレーションして、mod_perl1環境がほとんど残っていないですし(わざと自宅にmod_perl1化石環境を残しているだけ)、展望と超絶技巧を示すには当然mod_perl2だというのが背景にあります。

トークが採択されたのは「超絶技巧」という大げさな単語を入れたのも効果あったかなと感じています。「無駄にカッコイイ」などと褒め言葉もいくつか頂きましたし。日常生活では「超絶技巧」なんて言葉は使わないですよね。クラシック音楽ではフランツ・リストの「超絶技巧練習曲」という作品が有名で、そこから単語を採用させていただきました。

肝心のトーク内容については、無難にまとまったかなといった印象。前半の展望と後半の超絶技巧、両方そこそこだったかなと。もっとうまくできれば…という点はもちろん色々あるんですが、終わってから欲を言っても仕方が無いわけで。

中間部にあのトークを意識した「もう一つの本当にあったレガシーな話」というスライド群を入れたのですが、時間の関係で飛ばしてしまいました。内容はスライドままなので、興味のある方は読んでみてください。

mod_perl2でmemcachedサーバを実装するというコンセプトが当日までに完成しなかったのですが、完成したところで20分のトーク中に実演することもなかったので、これからに期待してくださると幸いです。特にこの事例は実用を目指しているというわけでなく、コンセプトとしてこんなことも出来るということを示したいという意図程度です。

mod_perl1はHTTPリクエスト処理しか書くことができませんでしたが、mod_perl2ではTCPコネクション層から処理を書くことができます。これはApache1.3とApache2.xのモジュールAPIと対応しています。Apache1.3では本体にパッチを当てないとSSL接続を直接受けられなかったのが、Apache2.0でmod_sslが生まれて単体で処理が可能となった事などが好例です。

世間は新しいものが受容される環境ばかりではありません。古式ゆかしい納品型受託案件などでAnyEventはまだ新しい実績の乏しいものと見られ敬遠されるケースがあるかもしれません。daemontoolsはdjbアレルギーで拒絶される場面もあるかもしれません。そんな時にApache2/mod_perl2で任意のTCPサーバが書けることがプロジェクトの突破口になることもありうるのでは、という情報を提供したかったということもあります。現にqpsmtpdはApacheをEngineとして動作するmod_perl2モジュールが存在しますし、mod_mrubyやmod_luaなど、新たなApache拡張系の登場も、このジャンルがまだ現役である事の証拠だと思います。先輩であるmod_perlがmod_mrubyやmod_luaへの実用例の開拓者になるって素晴らしいと思いませんか?

トークでお話した通りですが、展望面では、Apache2.6では大きな変更は無いとしても、Apache3.0が依然として謎のベールに包まれています。またApache2.4でのmod_perl2対応がWindows環境で難航していることで今後どうなるのか、見守りたいです。未成熟なevent MPMが今後成熟してNginx等と切磋琢磨していくのかなど、今後もApache/mod_perlから目が離せません。随時ウォッチして、ブログやトークなどでアウトプットしていきければと思います。

会場では @tokuhirom さんが聴講してくださって質問やアドバイスをいただけたのは嬉しかったです。「Apache2をAnyEventのエンジンにするのは?」は、実用とは別に興味深い課題。つい「そのアイデア、頂きました」と言ってしまいました。

後日 @tokuhirom さんが書いたmod_perlに関するブログ記事もリンクしておきます。

「本当にあったレガシーな話」を聴講して

いやはや、1日目に20分mod_perl推し(?)トークをした私でしたが、2日目の @lestrrat さんの「本当にあったレガシーな話」はまさに40分mod_perl dis吹き荒れる真逆のようなトークで、聴講していた私も内心ビクビクしつつ、楽しんで聴講しました。

[tweet https://twitter.com/xtetsuji/status/381289572115562497]

さて、会場で爆笑していた人の中で、あまりmod_perlに詳しくない方のために、私なりの解説をしてみようと思います。

その前に注意点として、私はこの内部コードの事を当然知らないわけで、憶測や推測で語っている立場だということ。また、私自身の無知や無理解による誤解や間違いが含まれている可能性があるということ。これらをご留意下さい。

前提として、@lestrrat さんの「脱mod_perl、PSGI化推進」という方向性は2013年の今の選択として正しいと私も考えています。一度PSGI化してしまえば、Plack::Handler::Apache1を使って「裏返し」にmod_perl1を据えることさえ可能だからです(はたしてそれをしたいかは別として)。Plack::Handler::* の数だけ裏側のウェブサーバの実装とPerlの永続化手法も選び放題です。このメリットは計り知れません。その他に得られるメリットも枚挙にいとまがない。

このトークの「mod_perlをPSGIに書き換える一大事業」は大きく分けて二部あって、前半が「mod_perl1ハンドラ(sub handler)で書かれたアプリケーション」、後半が「mod_perl1に密に依存したSledge」でしょう。mod_perl1の問題点は前半で大体語りつくされており、後半も色々な試行錯誤があるものの、前半の部分に話の比重が置かれてか、軽めな印象を覚えました。

前半のmod_perl1ハンドラで書かれたアプリケーションの話。Apache::Request->instance と言われて一瞬意味がわからなかったのですが、libapreq のことだったんですね。

mod_perl1で「リクエストオブジェクト ($r)」と呼ばれるものは主に2つあって、

  • Apache オブジェクト (ref $r eq ‘Apache’)
  • Apache::Request オブジェクト (ref $r eq ‘Apache::Request’) a.k.a. libapreq

というものがあります。今回 @lestrrat さんが語っていたのは後者の Apache::Request のほう。

「もともとmod_perlはApacheのモジュールをC言語ではなくPerlを使って書けるようにしたもの」というコンセプトに立ち返ってC言語でのApacheモジュールの開発に降りて考えると、mod_perl1でいうApache オブジェクトが、Apache1.3 での mod_*.c 内での原始的なリクエスト構造体 (request_rec 構造体) の対応です。ただ、この request_rec 構造体はHTTPリクエストを扱うにはあまりにも貧弱で、例えばファイルアップロード(multipart/form-data)のPOSTデータを受け取ってそれをほどくことすら自前ではできません。C言語を書くプログラマにとってこれはあまりに苦痛でしかないことは容易に推測できるわけで、これを補うために libapreq というライブラリが Apache側から提供されました。これを使えば大体のHTTPリクエスト処理ができるようになります。このlibapreqのPerlバインディング(XS)がApache::Requestと理解していただいて良いでしょう。

資料には Apache->uplaod() で Apache オブジェクト (request_rec 構造体) から upload オブジェクトを取得できるとされていましたが、upload オブジェクト (Apache::Uploadオブジェクト) を取得するためには確か libapreq / Apache::Request の力が必要なはずです。ここでは「Apacheオブジェクトは貧弱、Apache::Request (libapreq) オブジェクトは強力」ということを覚えておいてください。というか、libapreq はあまりにも強力なものです。良くも悪くも。

実は私は、ジョークやコンセプト以上の目的で libapreq / Apache::Request を使ったことがありませんでした。なので Apache::Request->instance という文字列が出てきて理解するまで10秒くらいかかったのはここだけの話。この呪文 Apache::Request->instance は、どこでも都合よく強力なApache::Requestリクエストオブジェクトを虚空から取り出せる呪文のようなもの。1つのリクエストサイクル中でリクエストオブジェクトは実質的にシングルトンであるとはいえ、このクラスメソッドを使ってしまうことで、コードの量が多くなればなるほど可読性は大いに下がると推測されます。

Perl CGIのRegistry高速化は別として、ハンドラとしてのmod_perl はあくまでも「複雑なことをさせない」「外部との密結合を避ける」ことが大事だというのが私のモットーだったので、libapreq / Apache::Request を使った時点でそのモットーが崩れるというのが私の意見。要するに libapreq / Apache::Request を使った時点で、複雑なウェブアプリケーションをmod_perlハンドラで書くという船出をしてしまったようなものと言えるかもしれません。

「単純なことをする」「疎結合である」という要件が満たされるのであれば、速度や可搬性を持った良いmod_perlハンドラアプリケーションが書けるでしょう。例えば簡潔なJSONを出力するAPIなどのようなもの。HTMLの画面を出力するサーバとは分離したApache/mod_perl世界があるときなど、こういう手法は悪くないと思います。将来の移植性に置いても心配はそれほど無いはず。

トークでは「$rは多機能過ぎる」という下りがありましたが、まさに$rはmod_perl1のオブジェクトという存在以上に「Apache1.3そのもの」であると言っても過言ではないでしょう。この「多機能」というキーワードには、モダンなフレームワークが持つコンテキストオブジェクトのような移譲による役割分担をせずに、$rだけであらゆることをやろうとするという雑然としたメソッドの世界観を含んでいると感じました。また「ブラウザからのHTTP接続の切断」といった状況すら検知できる(皆さんがお使いのHTTPサーバやフレームワークではできますか?)という意味での強力さに手を出してしまうと移植性が途端に低下してしまい、Apacheロックオンの危険性を感じる立場もあるでしょう。

mod_perl1ハンドラは、いわばC言語を使わずPerlを使って書かれたApache1モジュールそのもの。サイトexample.jpの画面とロジックを作るとき、mod_examplejp.cを作ろうと普通の人は考えないのと同じ理由で、mod_perlで画面とロジックを書く事は迷宮への入口を思わせます。HTMLの画面としてのレスポンス結果を作成するのは、mod_statusくらいのHTTP GET単発画面を出す程度の簡単さがギリギリラインかなと思います。そうでなければ移植性を考えてPerl CGIを書いた上でmod_perl高速化環境を使うか、この層を抽象化したフレームワークを使いたいところです。

後半のSledgeをPSGI化する話。実際にSledgeを使ったアプリケーションを書いたことは無かったのですが、私が当時mod_perlハンドラを学び始めた頃の活きた教材がSledgeでした。

標準のSledgeはPerlの永続プロセス手法としてmod_perl1(2ではない)以外のバックエンドを持っていない事がまず問題です(CGIは非永続プロセス手法なので考慮外)。SledgeをPSGI化する外部の試みのいくつかも、大規模サイトに投入するにはネックとなることがトークで語られていました。

余談ですが、SledgeのAPI自体も非常にmod_perl1の影響を受けているようで、コンテキストオブジェクト (という名前が正しいのかな) のメソッド名はmod_perl1のリクエストオブジェクトのメソッド名を築一参考したと容易に推測可能なものです。これは、当時よくHTTPリクエストを抽象化していたものがCGI.pm以上にmod_perlのリクエストオブジェクトだったから、それ以外の実装がなかったから、という理由なのでしょう。当時「HTTPリクエストの抽象化」を意識できる教材は、SledgeかJavaのTomcat、Strutsくらいしか無かったような気がします。このような先人の苦労が今のPlack::Requestに結実していくのです。

トークでも語られましたが、Sledgeのmod_perl1部分はApacheオブジェクトは当然として、なんとそれの進化系であるApache::Requestに完全に依存しています。まずフェイクオブジェクト(のようなもの)を作成するという @lestrrat さんの作戦は、問題解決への鋭いアプローチだと感じました。

$r->status(200) + return 404 のくだりは私も理解が足りない部分だったのですが、エラー時にmod_perl1がヘッダ類を出力するときの癖というのは結構あります。Apache1.3コアのErrroDocumentディレクティブもそうですが、エラー画面を出力するという処理には内部リダイレクトという処理が関わってきて、それがApache1.3/mod_perl1上でのヘッダ処理をややこしくしているのではないかと感じています。私の定石は「$r->status()は使わない」「$r->send_http_headerをしたあとでステータスコードをreturnする」です。確かに $r->status() を使うと変な事が起こりがちかも。

Plack化の最初でパフォーマンスが落ちたという話。Plack::Request中でクエリ引数処理が重かったとのこと。Plack::Requestのクエリ引数のパース処理はPure Perlだったと思いますが、mod_perl1は古ぼけていていもクエリ引数のパースはmod_perl1のネイティブAPIがやるので爆速なはずです(libapreqを使う使わないに関わらず、内部的にはC言語での実装です)。

トークで語られたような当時のPlack::Request中にあった重複処理などを改善していく話はエキサイティングでしたね。そもそも、Plackの目的がパフォーマンスよりもPSGIのリファレンス実装やPlack::Handler::*によるウェブサーバの差異の吸収といった部分を優先している(ように見える)ことからも、見逃されていた重複処理があっても仕方が無いかなという気はします。クエリ引数のパース処理が目に見えてパフォーマンスにおいて支配的になるのは大規模サイトだということも、今まで見逃されてきた(?)一因でしょう。こういう観点からも、Plackの大規模サイトへの投入は興味深い事例だと感じました。

ここまで長々と私の解説を書いてみましたが、誤解や間違いがありましたらご指摘下さい。

両方のトークを比較する

長文での説明でしたが、私のトークと @lestrrat さんのトーク、対立するものではなく、向いている方向が違うという感じなんですよね。

  • @xtetsuji のトークは最新のPerlとmod_perl2の先端を使い尽くす
  • @lestrrat さんのトークは太古のPerlとmod_perl1の呪縛から解放する

そういう意味では、両方のトークを聴講した方が、mod_perl というものをどう受け取ったのか、興味深い部分ではあります。

聴講中に

[tweet http://twitter.com/xtetsuji/status/381306340414476288]

なんてツイートをいただいてどうしようかと思いましたが、時間切れで質問タイムはナシ。でも聴講時の私の認識は今よりも甘く、結果的に質問しなくて良かったかなと感じています。

@lestrrat さんからは

[tweet http://twitter.com/xtetsuji/status/381297867916185600]

と返していただいて微笑ましい感じでした。トーク後に10秒ほど会話をさせていただきましたが、両者の考えが互いに良い意味で伝わったような気がします。対立関係じゃないですよ!(笑)

今もmod_perlを採用している人達からの声とそれへの返答

その後、後夜祭などで声をかけてくださった方で、今も業務でmod_perl1アプリケーションを動かし続けている方が結構いることに驚きました。「動くものは触らず」の原則はあるでしょう。それについては否定できません。ただ、古いものを使い続けることへのある種の漠然とした不安を持っているという印象を覚えました。今回のレガシーな話のトークの影響も少なからずありそうです。

私が業務でmod_perl1からmod_perl2へマイグレーション作業をすることになったのは、Ops側が最近掲げた「Debian stable付属パッケージを全ての拠り所にする」というポリシーが大きいです(他にも細かな理由はありました)。Debian stableは既にApache1.3/mod_perl1を外してしまったため、マイグレーションの必要性があったわけです。私はDebian原理主義者的な部分があるほどのDebian好きなので、このポリシーには歓迎をしていて、ブランチを切って一気にマイグレーション作業を完結させました。

ただ、mod_perl1/2の知見が少ない企業が、今も引き継がれ残るmod_perl1アプリケーションをmod_perl2にマイグレーションすることは現実的ではないと感じます。mod_perl1→mod_perl2はApacheのモジュールAPIに対応するように、ある種のAPIの断絶があります。作業としては楽なものではなく、Plack等の別の基盤に載せ替える作業と大して変わらない作業量かもしれません。そうであればPSGI化するほうが良いに決まっていることは前段で述べた通り。

私、ネタとして「mod_perl芸人」的な部分を狙っていると言われればそうなのですが、ビジネス上大事な場面や商用環境でまで何でもmod_perlという立場ではありません。何でも適材適所というのは上述でも繰り返していること。むしろ、最近は業務でも個人でも、ネタ以外でmod_perlプログラムあまり書かず、AnyEventやMojoliciousを使うことが多いんですよね。まぁ、デプロイは慣れたApache2とmod_perl2(Plack::Handler::Apache2)を使って…ということはありますが、MonocerosのコードリーディングをしたりNginxのHttpPerlModuleを調べたり、そういう方向への研鑽も続けています。

ただ、せっかく得たmod_perlの知識。mod_perlを何かにマイグレーションしたい方や、mod_perlアプリケーションを何らかの理由で保守したり新規開発したりといった方へのアドバイス等に活用していきたいと考えています。@xtetsuji や @mod_perl_info にお気軽にご相談ください。

これからどういう活動をするの?

嬉しいことに「mod_perl芸人」はそこそこウケがいいので、小さな場では時々ネタを披露しようと思います。あと前述のようにレガシーに悩んでいる方のために、Apache/mod_perlのウォッチ活動は続けていきたいと思っています。リクエストがあれば、トークやマイグレーション等のアドバイスなどの活動は積極的に行っていきます。ブログなどのネット上でも細々と活動していくつもりです。

私は「新しいもの=善、古いもの=悪」という図式には完全には賛同できない部分があります。初学者の「CGIでゴメンナサイ」発言だなんて「大規模になって立ち行かなくなったときに改めて考えればいいのであって、まず動くものが作れる事がまず大事ですよ」「フレームワークは余裕があれば」と声をかけることもしばしば。それとは同時に、Perlの歴史が長いことで、古い真の意味で廃れた情報が未だに現役の如くネット上に残り続ける負の側面も知っています。何が良くて何が悪いのか、何が正しくて何が正しくないのか、そういう部分も意識して、誤解がないように各スキル層へのアプローチをしていきたいと考えています。

[tweet https://twitter.com/xtetsuji/status/395061721900920832]

Mojolicious飲み会等、新しい試みもしています。私の新しい側面にもご期待いただければと思います。

「来年のYAPC」(期待)のような大きな場での発表は、特段リクエストがなければmod_perlトークはしないかなと思っています。さすがに3度目は無いかなぁと。MPMは別として、APIとしてのApache2は既に枯れており、2回のYAPC壇上で話した内容が大枠の説明を網羅していることでしょう。

今年の YAPC::Asia Tokyo 2013 でも様々なジャンルのトークが行われました。Perlというプログラム言語の可能性は広く、これからも広がり続けることでしょう。そのための力となるべく、様々な事に取り組んで、微力ながらPerlというプログラム言語でありコミュニティを盛り上げていきたいというのが、私の今後の活動だと認識しています。

これからも精力的に活動していきますので、どうぞよろしくお願いします!

YAPC::Asia Tokyo 2013 ハッカソンとその後 #yapcasia

おがた (@xtetsuji) です。

YAPC::Asia Tokyo 2013 後日編。その他の「YAPC::Asia Tokyo 2013」関連記事は目次ブログ記事からどうぞ。

ハッカソンに行くまで

YAPC::Asia 2013 Hackathonのページに書いてある通り、「例年はスピーカーならびに、スピーカーの招待者を基本有参加資格者としております」と書かれたイベント。私もトークをしたスピーカーの一人であるので有参加資格者ではあったのですが、どんな場所か分からず、出ようかどうか前日からさんざん迷っていました。

当日は疲れて動けないということもなかったので、とりあえず外に出て別の場所に行っていましたが、行こうかどうか悩んでいたものの、@YappoさんからMentionをもらって、行こうと決めていざフリークアウトへ行きました。

ハッカソンに行ってみた

表参道駅までやってきて、フリークアウトのオフィスが入っているビルを探してやってきました。恐る恐る入り口を開けると、そこは広大かつ綺麗なオフィスと、名だたるPerlハッカーの皆さんが各所で静かに黙々と作業をしている光景。

Foursquareにもvenueがあったので当然チェックイン。

メイヤーは @hiratara さんでした。

[tweet https://twitter.com/xtetsuji/status/381657005502390272]

オフィスが広大で綺麗なところに感動しました。特に感動したのは無限水、そう、自由に無料で飲めるミネラルウォーター。よく「その会社の福利厚生はミネラルウォーターを提供するかで表れる」と言われることがありますが、ここにはその夢の無限水があったのです。すごい!それだけでなく、カップのジュースやスープの自動販売機があったので、何か飲もうとお金を投入しようとしたら何と無料。ボタンを押すだけでジュースやスープが出てくる!すごいすごすぎる!どこからどこまでも夢のオフィスでした。しかも飲み物だけでなく、自由に食べても良いお菓子まであるという!オフィスグリコとか目じゃないこの太っ腹さ。感涙ものです。

写真を撮っていいものか、みんな真剣に作業をしている感じで聞きづらかったし、何しろお邪魔している他社様のオフィスなので、写真はほとんど撮りませんでした。撮影OKだったら記念に撮っておけばよかったな。

しかも、冷蔵庫にはビールがあるから自由に飲んで下さいとのことで、もう気分は最高潮。

[tweet https://twitter.com/xtetsuji/status/381672497642364928]

皆さん一箇所に固まらず、バラバラに座っている感じではあったのですが、私が座った席のテーブルの右斜め向かいには@miyagawaさんがいらっしゃって、黙々と作業していました。なんという豪華な空間!

私がしていた作業は、とりあえずYAPC感想ブログ第一弾を書いて…といったところで、その後は未完成だったmod_perl2で動作するmemcachedサーバであるModPerl::Memcachedを作っていたのですが、ビールを飲んだところで疲れと眠気が出てきて、ここからは眠気との戦いになってしまいました。眠気覚ましに立って歩いていても、皆さんお疲れの模様でした。さすがに3日間ぶっ続けのYAPC::Asiaでしたから、疲れが出て当然ですね。

結局、私の手元では眠気が邪魔して単純なミスに気づかず、memcachedサーバの実装は全然進まなかったのですが、各所ではPlackの実装についての議論が交わされていたり、第一線のPerlハッカーが一箇所に集まって作業をした成果が出ているようでした。Plack::Request::WithEncodingも、この場で@miyagawaさんや@tokuhiromさんが@moznionさんと議論をしながら骨格が作られたものです。

ハッカソンというものに出ること自体が初めてで、こういう空間はもちろん初めてだったのですが、第一線のPerlハッカーに囲まれて作業するだけでも刺激的な数時間を過ごすことができました。少し悩んだけど、勇気を出して(?)出て良かった!

会場のフリークアウトさんの写真は全然撮れませんでしたが、@941 さんのブログの行ってきた記事を見てみると雰囲気がわかるかと思います。

会場を提供していただいたフリークアウトさん、本当にありがとうございました!終始感動しっぱなしでした。

タイムテーブルでは23時まで続くと書かれていたハッカソンでしたが、19時くらいには「そろそろ食事へ…」という雰囲気になって、お開きになりました。

ハッカソン懇親会

ハッカソンの懇親会は、フリークアウトさんのオフィス近くのもつ鍋屋に来ました。

昼間からビールを飲みながらコードを書いていたわけですが、ここでもビール。美味しい鍋を食べながら会話が弾みます。

私の席は、鍋をどうすればいいかアタフタしていたら、@charsbar さんに色々と面倒を見てもらうことになって、なんだか有り難いやら申し訳ないやら。豪華なメンバーしか集めていないハッカソンだけあって、どこの席も豪華なPerlハッカーです(私という平凡なPerlプログラマ目線)。ここでもPerlやプログラム言語全般についての話が盛り上がりました。刺激的な空間です。

YAPC::Asia 開催中にもすれ違っていたはずなのですが、初めて @__gfx__ さんとお話ができました。色々な優秀で著名な方の話を聞くと、見聞が広がっていいですね。

YAPC::Asia Tokyo 2013 その後

今回、挨拶や有名人見たさの野次馬以上に、実質的に初めて本格的な議論を交わしたPerlハッカーの方々も多く、出会いって大切だなと感じると同時に、今後とも情報交換など良好なお付き合いをしていきたいと感じました。そのためには自分自身もその目線まで上がらなければと感じた数日間。ギブアンドテイクの世界、私もPerlの世界に多少なりとも貢献出来るよう、これからも頑張っていくぞと、やる気をもらえたYAPC::Asiaとハッカソンでした。

「来年のYAPC問題」については、別記事でも何回か書いた気がしますが、特に心配しなくてもいいんじゃないかなと思います。もちろん、誰かが発起して協力を求めるのであれば、出来る限りの協力をしたいと考えています。みんなでPerlを盛り上げていきたいです。

私のその後は「YAPC燃え尽き期」か、しばらくは疲れた感じで惰性で(?)9月を過ごし、10月へ入っていくことになるのでした。10月に入ってから、この記念すべきYAPC::Asia Tokyo 2013を記録に残すべく、少しずつ振り返りブログ記事を書いているといった感じです。

あ、そういえば、1日目の懇親会で出会ったMojolicious仲間と一緖に、その後9月25日に「Mojoliciousやmod_perlを話題にした飲み会 #2」を開いたのでした。この会自体が @jamadam さんが東京にいるときに開こう的ノリなのですが、今後も継続して開催していきたいと感じました。Mojoliciousユーザ、結構たくさんいるという印象を今回のYAPCで持ったものの、横のつながりがなかなか出来ていなくて、情報交換の場がもっとあってもいいかなと。

10月も後半になって、YAPC::Asia Tokyo 2013から1ヶ月が経ち、個人でのプログラミング活動も徐々に盛り上がりつつあります。これからも何かあったら当時のアツい日々を思い出して、自分自身のプログラミング活動の活力としていきたいと感じました。

YAPC会期中やその前後で、色々な新しい企画への誘いもあったり、自分自身でもこんなイベントが欲しいというアイデアが色々出ました。疲れを取って落ち着いた後は、また面白い日々が過ごせそうです。

本当に良いイベントを前夜祭からハッカソンまで、通算4日間、存分に経験した2013年9月。これから「次のYAPC」まで、この体験を思い出して頑張っていけそうです。微力ながら、私も未来を切り開いていく一人として邁進していきたいと心に誓いました。

YAPC::Asia Tokyo 2013 2日目 #yapcasia

おがた (@xtetsuji) です。

YAPC::Asia Tokyo 2013 2日目編。その他の「YAPC::Asia Tokyo 2013」関連記事は目次ブログ記事からどうぞ。

聴講したトークなど

列挙していきます。

トーク雑感

@yusukebe さんのMojoliciousトーク、相当期待していたのですが初心者向けで、多くは既に知っていることが多かったです。とはいえ振り返りができたり、自分が取っていた手法は間違いじゃないんだということを確認できて良かったトークでした。@yusukebe さんには日本有数のサイト開発運用経験を元にMojoliciousの書籍執筆を期待したいです。絶対買います。

@goccy54 さんの「これからのPerlプロダクトのかたち」は、昨年の氏のトーク同様、多くの注目が集まっていました。gperlの構文解析の成果を現状のPerl5にポートして、それによってiOS開発ができる(RubyでいうRubyMotionのような)PerlMotionを作成中という話も期待が持てます。すでに構文解析の成果をPerl5で実現したモジュールは各所で使われており、PPIより速いと好評のようです。さすがPerlを根底から理解しようとした強者ならではのトークでした。

@typester さんによるEmacsの話は、Emacsユーザとして初歩的ではあったものの、いまどきの流行を知ることが出来て良かったです。anything.el すら面倒で入れていなかったのですが、今はまた別のブームがあるようで、まだCarbon Emacsの環境をCocoa Emacsに作り替えるタイミングで、スライドを見ながら大いに参考にしようと思っています。

@lestrrat さんによるレガシー話。Apache1.3+mod_perl1+Sledgeという構成のlivedoorBlogをPSGI化したという話でしたが、40分まるまるmod_perl disで、前日にmod_perlトークをした私は終始ハラハラしながら聴講していました。とはいえ、どこに真意があるのかはmod_perlをかなり使っている私は分かっていて、同意することしきりではありました。

壇上でmod_perl disが繰り広げられているときに、こんなツイートをいただいて、どうしようかなって思ったり。結局質問タイムが無くて公開の場で質問する機会は無かったのですが、結果的にそれで良かったかなと思っています。

会場で爆笑していた人がたくさんいましたが、何がダメだったのか、本質を見抜いていた人はどれだけいたのかなぁ。これについても語ると長くなるので、別ブログ記事で解説したいと思っています。

@maka2_donzoko さんによるボードゲーム話、「サラダ枠」とのことで、毎年楽しみにしている枠でもあります。今年も本当に面白かった。JSON::PP などの重要モジュールのメンテナーでもあるまかまかさんですが、人を楽しませる心意気には感心することしきりです。このトークは動画もスライドも、見たら元気が出るトークです。

PhantomJSの話、以前から気になっていたJavaScriptプロダクトだったので、結構興味深かったです。Seleniumとどういう違いがあるのかな…未だに理解不足な部分が多いですが、とっかかりとしてPhantomJSをいじってみようというキッカケになったことは良かったです。

@myfinder さんの、フルテストも50msec話は面白かったですね。日々増えるテスト、さすがに50msecでは終わらないそうですが、それにしてもテストが根付いた文化というのはうらやましいというか私の境遇からは想像できないので、終始感心しっぱなしでした。テストがあるおかげで安心してデプロイが出来て、新しいものを躊躇すること無くリリースできる好循環。モダンな開発環境が整った時代から始まった会社とはいえ、さすがフリークアウト。

LT雑感

1日目に続き、2日目のLTも盛り上がりました。こちらも、5分弱の録画ビデオが公開されているので、1日目同様、笑いたい時、楽しみたい時に見返すとよいかもしれません。

印象に残ったLTから抜粋してご紹介。

  • 今年のPerl同人活動報告 と銘打った @maka2_donzoko さんの同人報告。今年も大舞台で同人活動宣言。これは期待。
  • @azumakuniyuki さんの、JSONでメールが送信できるHainekoの話。とある要請で作ったようですが、当面メールが無くなることがないわけで、Ajaxなどを使ってメールを送信したいという要求を満たすことができるのではないでしょうか。興味深いです。
  • @barimi さんの「初めてのPerl ~ つぶやいてないでコードかけ ~」。@yusukebe さんを味方につければ素人でも5日でTwitterボットが書ける!冗談っぽい話ではありますが、人に聞くというのは大切なことですね。
  • @__papix__ さんによる「Perl入学式2013年度中間報告」。これからも期待しています。
  • @cubicdaiya さんによる Nginx に mbruby を組み込む話。Pixivでは Nginx+mrubyを精力的に使っているのでしょうか。なかなか興味深い。こういうトークも自然と受け入れられるところがPerlの祭典であってエンジニアの祭典でもあるYAPC::Asiaの懐深さなのかもしれません。mruby期待しています。
  • @takesako さん、今年は○×クイズでLT。いやはや、全員起立の参加型LTなんて初めてでしたよ。そして難問をクリアしたのがラクダ本の和訳をした近藤先生というのだから、なんというチート。面白かったです。

Keynote

LINE社の池邉さんによるKeynote。例年、この最後の枠はスピリチュアルというか、エンジニアという立場を俯瞰した視点でのトークがなされますが、今年もじんわりと響くトークでした。

池邉さんはlivedoor時代(もっと前?)から長く会社の技術を支えてこられて今の位置にいたりするわけで、業界の人間として何か感慨深いものがありました。大昔のYAPCで池邉さんのトークを聴講したこともありましたが、その時から立場が変わって、たとえ人の上に立つ立場となっても技術者視点を忘れないということは大切だなーと思いました。

Closing

例年のYAPC::Asia同様、牧さんによるClosing。今年の入場者数が1000人越えといった発表の後、牧さんと櫛井さんが今年でYAPC::Asiaの運営から卒業するという突然の発表。そして来年のYAPCは誰かが名乗りでないと開催されないという、さらに衝撃の発表。

しかしながら、地方でYAPCするぞというLTもあったり、今年の規模を越えることはできないにしても、来年のYAPC::Asiaは何らかの形で行われるのではないか、私はそう期待していますし、何か協力できることがあれば出来る限り積極的に協力していきたいです。

昼食

ちょっと時間を巻き戻して正午の昼食ですが、1日目同様2日目も学食へ行きました。慶応大学の学食、本当に安くておいしい。生活圏内に欲しいくらいでした。

昨日は気付かなかったけど、4sqにvenueがあったのでチェックイン。冷麺うまかった。

勝手に後夜祭

Closingの後、勝手に後夜祭に参加。

狭い店の中に60人以上が入って、鉄板の暑さと人の暑さですごいことに。ぎゅうぎゅう詰めの中、著名なPerl Monger達が立ったり座ったり暑い暑い言いながら懇親を深めました。

初期フードメニューはこんな感じ。食べ飲み放題でしたが、コナモノなのですぐに満腹になりました。

勝手に後夜祭の初期メニュー

そしてこの人のひしめき合う狭さ!

勝手に後夜祭の狭さ

あまりの狭さに懇親よりも「暑い暑い」と言っている時間が長かった気もしますが、それでも様々な方と会話ができたりして楽しかったです。金銭的時間的に余裕があれば、こういう場には積極的に参加したいですね。それだけ実りのある会話ができて、実りのある時間が過ごせます。

23時頃に解散。前夜祭も含めて3日間の疲れが出ないうちに帰宅となりました。

噂によると、八王子近辺在住のHachioji.pm勢はこの後、朝まで八王子で飲んでいたとか。すごい。

今後に向けて

3日間のYAPC::Asia Tokyo 2013の最後が「牧さんと櫛井さんのYAPC::Asia運営卒業。来年のYAPC::Asiaは誰かがやらない限り行われない」というものでしたが、きっと誰かがやってくれると楽観できるのは、この3日間で実感したPerlコミュニティの熱い想いがあるからでしょう。地域.pmもたくさん増え、それに伴って全国各地に心強いPerl Mongerが増えている現実もあります。東北勢も来年のYAPC::Asiaを東北でやりたいと名乗り出ました。YAPC::Asiaという名前のイベントや今回のような規模ではないものの、きっと来年も「YAPC::Asia」は行われる、そう信じています。

ひとまず前夜祭を含めて3日間の心地良い疲れを持ち帰って帰宅しましたが、実はさらに次の日に行われたハッカソンにも参加してきました。

というわけで、その後のハッカソンの話と、私のトークにまつわる話へ続きます。

YAPC::Asia Tokyo 2013 1日目 #yapcasia

おがた (@xtetsuji) です。

YAPC::Asia Tokyo 2013 1日目編。その他の「YAPC::Asia Tokyo 2013」関連記事は目次ブログ記事からどうぞ。

オープニング、そして基調講演

前夜祭で遅くに帰宅して1日目の自分のトークの準備をしていたので、朝起きられるか不安でしたが、夢と希望の力で起きてオープニングには余裕で間に合いました。人間は夢と希望で活動していると実感した瞬間。

恒例の櫛井さんのオープニング。その後の基調講演。今回の冒頭の基調講演も前年同様英語のプレゼンテーションではありましたが、スライドが分かりやすかったのと、発音した英語が多少追えたので、なんとか楽しむことができました。Perl5.18の今や、これからのPerl5といったものが垣間見えて、これからの楽しみが増えました。

聴講したトークなど

列挙していきます。

トーク雑感

@kazeburo さんのMonocerosのトークは期待していたので、絶対聴講するぞと以前から思っていました。Monocerosというウェブサーバ自体の魅力の他にも、UNIX/Linuxでサーバを書くための作法というようなものも学べたのが良かったです。straceの出力を出して「これ読めますよね」という@kazeburoさん、さすがです。Monocerosのコードリーディングは細々と続けています。

学術分野におけるPerl、普段Perl入学式や地域.pmなどでお会いしている@__papix__さんによるトークでした。GPGPUを使った部分など、なかなか高度な事にチャレンジしているんだなと感心しきりでした。

普段はEmacs使いの私ですがVimにも興味があったので、Vimのトークを聴講しました。なかなか練られたプレゼンテーション手法に感心。後日公開されるスライドを読み返しながらVimの設定をしてみようと思います。

私自身のトークの振り返りは長くなりそうなので別記事で…。

@hiratara さんによる型付きPerlの話は、部屋があふれるほどの盛況ぶり。後ろの床に座って聴講していましたが、本当に難解でよく分からなかったというのが正直な感想。このあたりも勉強しないとなという意識付けが出来たのは良かったです。

次に聴きたいトークまで間があるし、多目的教室はいつも盛況で入れない状況だったので、しばらくロビー内などをブラブラしていました。ロビーの隅っこでは床に座り込んでparumonをしているHokkaido.pmの人たちがいたり、なかなかバラエティにとんだ風景でした。

床でparumon

@tokuhirom さんによるFuture Perlのお話は、午前中の基調講演とはまた角度が違った面白いトークでした。Perl6の実装は色々あれど、どれも開発フェーズが混迷していたり遅かったり使うのはちょっと…という印象を持っていましたが、Seisはなかなかいいところまで来ているという印象。私を含め、今まであまりPerl6に興味がなかった人もPerl6を使いたくなったトークではないでしょうか。前年のYAPCまでとは違い、今年はそういう未来についてのトークが熱かった印象。

@toku_bass さんのライブコーディングも会場が盛況。入場すら厳しい部屋から人があふれるほどの状況で、チラッと拝見しました。ただ、壇上に @toku_bass さんがいなかったにも関わらず、画面は進み声は聞こえるという不思議な光景。あとで聞いたら、立ちながらのライブコーディングは厳しいということで、最前列に座って作業していたとのことでした。今年のYAPCもPerl初心者中級者といった人が結構いたと思うし、そういう人にPlackの内部を見せながらウェブアプリケーションを書いていくライブコーディングは有用だったことでしょう。

LT雑感

LT1日目も盛り上がりました。タイムテーブルは公式Twitterで告知されているので、それに従って印象深いものを抜粋して振り返ってみようと思います。公式にビデオが上がっているものは、LTの時間制限の性質上、4〜5分で見られるものなので、何か愉快な気持ちになりたい時に、人生落ち込んだ時、ちょっと何か見て笑いたい時にも使えそうです。

  • ギークな異性を落とす魔法の言葉はネタ枠として大成功でしたね。200 OK
  • How to inspect a RUNNING perl processは既存のPerlプロセスを外部から観察する方法という込み入ったシステム的な内容でしたが、デバッグ時に参考になる部分も多く、今後この手法を使ってdaemonを開発したりしていきたいなと感じました
  • YAPC::NA 2013に行ってきたは、昨年ベストスピーカー賞を獲得した@yusukebeさんがそれでYAPC::NA 2013に行ってきた記録ですが、一度は海外のカンファレンスに行ってみたいと思わされたトークでした。英語の壁などありますが、金と時間があって行く機会を作れば乗り越えられそうな気が十分します。
  • んだっちゃだれ Sendai.pmは、今元気なSendai.pmの話。YAPC::Tohoku(仮称)の話も出てきて非常に盛り上がりました。東北は青春18きっぷで途中下車した盛岡くらいしか経験がないので、今度じっくり東北観光をしたい。
  • オープンソースプロダクトに貢献することはSixApartの方のトーク。一度movabletype (MTOS) をforkして、とある改良を入れようとしたのですが、どうしても克服できない点があって諦めた経験あるんですよね。でも行動に起こしただけ数年前の自分自身より進歩あるかなって思いました。
  • 1日目LTのトリである2013年代のBlogツールRijiの紹介は、もう@songmuさんの突然の中国語トークに全てを持って行かれた感がありますね。「YAPC::Asia なんだし例年台湾等からも聴講者が来るわけで、日本語以外のLTがあってもいいじゃない」という考えには大いに同意であります。いやはや、これは一筋縄では真似できない偉業です。

会場の雰囲気

このあたりは櫛井さんのブログが非常に詳しく写真も綺麗なのでそちらを参照していただくことにして、私が撮った数少ない写真からいくつかピックアップ。 各トークについては原則的にYouTubeで動画が公開されているので、そちらを参照すると雰囲気が分かると思います。

個人スポンサーの提灯

個人スポンサーのちょうちん。私のものも飾られていて「お〜」ってなりました。その後、2日目の終盤に持ち帰りました。

昼食

2日目もそうだったのですが、1日目もHachioji.pmあたりの人と集まって、生協の学食に行って食べました。安いしうまい。 YAPC自体に慣れてきたからか、外がそれほど暑くなかったからか、トーク会場との移動にそれほど困難を伴わなかったのも良かったところ。

懇親会

2007年から2010年まではボッチで食事だけして帰ってくる懇親会でしたが、2011年夏のHokkaido.pmとの交流開始から3年弱、Hachioji.pmにもよく顔を出すことにしていたら知っている人が増えて、この場が色々な場から集まる人達が一堂に会する同窓会的場所になってきました。

個人的にも長年のボッチ体験を回想して、ポツンとしている人やグループを見かけたらなるべく話すようにしましたが、私自身へ声をかけてくれる人も結構いたりして、色々限界もありましたが、多少のボッチ対策には貢献できたでしょうか。Mojoliciousを使っている会社の方々のグループがあって、数人の方とはPerlBeginnersかPerl入学式で面識があったのですが「@jamadamさんに会ってみたい」と言われたので、探して引きあわせたりしました。それが後日のMojolicious飲み会につながったりもしたので、なかなか有意義だったと思います。

それだけでなく、今年は勇気を出して@miyagawaさんにも話しかけて、Plack::Handler::Apache2まわりの話の質問を投げかけてみました。勇気を出した割には意外に気さくに受け答えしてくれたので、自分が無意識に作ってしまっている「著名な成果を出した人への心理的障壁」を感じましたね。消極的なの良くない。拙作のModPerl::PSGIについても、名前の良し悪しといった評論をしてもらって、非常にありがたかったです。先日のHokkaido.pm#10の時にゲストで来た@tokuhiromさんと話した時もそう思ったのですが、そういう殻はどんどん打ち破って話しかけていくべき、そう感じました。 そういう意味では、英語コンプレックスから、海外より来日したゲストの方々と話せなかったのは数少ない心残りな点でした。

懇親会の食事1 懇親会の食事2

 大人のYAPC

こちらにも申し込みをしていましたが、これは「ヤバい、面白かった」としか書けないです。守秘義務があるので。でもこういう試みは絶対求められていると感じた次第です。この独立イベントを手配してくれた@lestrratさんと@yusukebeさんには感謝です。

時間的に懇親会とかぶっていたので、懇親会を途中で抜けて、途中から大人のYAPCに入った感じでした。もっと懇親会を楽しめればよかったなという気持ちと、大人のYAPCを最初から聴きたかった気持ちが両方。両方とも稀有なイベントゆえですね。

飲み会

その後、1日目の自分のトークが終わった開放感からも飲みに行こうと思い、会場の1階にあるHUBに行って飲みました。さすがというくらい、様々なPerl Mongerが集まっていて非常に刺激的な場所でした。これぞYAPCという光景が確かにここにありました。

この場では、Hachioji.pmの人々と歓談したり、Hokkaido.pmの人達もいたので話したりしました。有用なメール関連ツールを精力的に開発している京都の @azumakuniyuki さんとお会いできてお話できたのは大きな収穫でした。その後 @azumakuniyuki さんから「Hokkaido.pm の @aloelight さんいますか?」と言われて「あぁ見かけましたよ、こっちです」といった感じで新たな接点が生まれたり、適度にPerl Mongerが密集した良い場となりました。

その後、終電が近い人から徐々に解散していき、私も23時30分には電車に乗って帰路に付きました。

2日目に続きます。