Hokkaido.pm#9 に行ってきました #hokkaidopm

こんにちは、北海道生まれ北海道育ちで北海道大好きな おがた (@xtetsuji) です。

ブログを書いている3月末から少し時間が経過してしまいましたが、3月9日に行われた Hokkaido.pm#9 に行ってきました。

今回はまとめもUstreamも無いですが、上記リンクからスライドをたどることができます。

前回(#8)は2012年12月末で、フィギュアスケートとSMAPコンサートが重なって、札幌近郊に宿が取れなかったり大変な事になりましたが、今回は穏やかに開催することができました。ただ、全国的に大荒れの天気で吹雪が大変でしたが、それもまた良い思い出。

今回の感想は短めに。スライドについては前述のリンクから御覧ください。

cpanfile

@aloelight さんによるトーク。

Ruby Gemfileの移植であり、依存モジュールの厳密なバージョン定義ファイルであるcpanfileについてのトーク。cpanm や Carton で利用可能とのこと。

cpanfile がどういったものかといったことや、なぜそれが必要なのかといったことは、cpanm や Carton の作者でもある Tatsuhiko Miyagawa さんも書かれています (それの翻訳)。英語ですが、こちらも通読しておくとよいかもしれません。私も勉強します。

私は如何にして心配するのを止めて自分でコードを書くようになったか

@shinotra さんによるトーク。

Hokkaido.pm Casual ではトーク経験があるとのことですが、今回 Hokkaido.pm では初のトークとのこと。それでもかなり好評なトークでした。

実際に作ってみたウェブサービスの話。最近はミドルウェアよりもそれらを使って実際にウェブサービスを作ってみるといった事に興味が集まる傾向にあるのですが、今回も多くの人の興味をひいていました。私も聴いていて楽しかったですし、ウェブで何か作りたいなぁって思わされました。

Games::* – Perlで「ゲーム」しよう

私 @xtetsuji のトーク。

主にペンシルパズルをPerlで解くためにCPANモジュールを使ったり、またゲームとは何かといった哲学的トークを後半に入れた構成でした。

今回は反省材料が多かったです。誤解を与えるような表現があったり、リスペクトのつもりがdis(ディスリスペクト)になっていたり、ネタやギャグがことごとく滑ったり…;。一応記録として、トークを除いてスライドだけ見ると誤解を受けたりする部分を修正した版のスライドをアップしました

個人的な反省項目については下の方に書きます。

最近使っているモジュールの話

JPA招待ゲスト @xaicron さんのトーク。

最前線で活躍している人がいったいどういう環境やモジュールを使っているのかというのは、意外に興味深いところです。「CPANソムリエになる方法」。

上記リンクから、完成版スライドが閲覧できるので、Perlを勉強中の方々はぜひとも目を通して、今の流行りどころはどのあたりなのかといった部分を感じ取ってみると良いと思います。私も最前線を追っかけるのが苦手な人間なので、非常に勉強になりました。

LT

  • @hiratara さん「CurryとHokkaido.pm」
  • @techno_neko さん「PureDataをPerlで鳴らしてみる」
    • YAPCやWEB+DB PRESSでPerlの音職人として名を轟かせている@techno_nekoさんによる新作。今回はTerm::ReadKeyを使ってキーボードをピアノのように打つことで音を出したり、さらなる進化を遂げていました。
  • @xaicron さん「BigShip」
    • Cinammonのクローン「BigShip」のトーク。スライドは無し。違うところはパラレルで動いたり、複数のサーバへばらまけたり…;。
  • @charsbar さん「Quality Assurance Hackathon」
    • QA Hackathon に行って CPANTS のメンテナンスをしてくるといった話。
    • 検索機能に関連してGroongaの話も出てきました。

懇親会

春花秋灯 南四条通り店

17:30開始が好評となったので、今回も17:30開始となりました。

二次会

酒肴酒菜 掌-てのひら-

二次会の場所としては、前回 Hokkaido.pm#8 のときと同じ。活イカ好きの @onagatani さんオススメの場所。

しかも個人的に前日札幌入りした夜に行った二次会もここでした。活イカ三昧ですけど、美味しいから満足。

三次会

らーめん 信玄 南6条店

折りしもの吹雪で人々が散ってしまって、一部の人だけで少し遠方のラーメン屋まで歩いてラーメン食べました。今回はいつも恒例の「すみれ」では無かった。気づかないうちに @onagatani さんがいなくなっていたからかもしれない。

開始が17:30と早いので、三次会まで行っても終電には余裕があるという優しい時間設計。今回の私は、いつものすすきのの宿が取れたのでJRに乗って恵庭まで行くとかいう前回のようなことは無かったです。

自分のプレゼンの振り返り

上記に書いた通り、結構滑った感じの今回のトークでした。テーマ決めるまで時間がかかったり準備不足だったり調子に乗っていたり(スライド半分くらいしかできていないのに前日札幌入りして夜中まで飲んでいた)、色々要因はあると思いますが Hokkaido.pm#5 から5回も登壇すれば、一度は失敗(?)することはあるかー、と思う他ありません。失敗も含めて場数を踏んで、トーク力や開発力をアップしていければいいなと思っています。

Games::* の話は、2006年くらいに一度盛り上がったとのこと。mod_perlでも6年くらい前の流行を追いかけている自分なので、まぁ6年前の流行を再復興できてよかったかなとポジティブに考えています。そうでなければmod_perl芸人やっていけない

折しも、このトークの後で数学や数独の界隈が盛り上がったりしていて、まだペンシルパズル系のネタはいけるかなと考えています。スライドにも書かれている通り、全く対価を求めずに個人的興味だけでスリザーリンクの研究も進めていたり解法モジュールを書いたりしているので、その成果も随時公開していければと考えています。

まとめ

今回はcpanfileの話からウェブサービスを作る話、そしてCPANソムリエになるためのトークなど、前回がスピリチュアルや設計トーク中心だったことを考えると、実践的なトークが多かったように思えます。今回も非常にモチベーションを高めることができたので、次回 #10 もぜひ参加したいです。#5 からの連続参加記録はまだ途切れていない。

次回 #10 は7月予定とのこと。今回は(今回も?)様々なイベントと重なってしまい、参加者数的にはそれほど多くは無かったですが、次回は告知などで私も協力できる部分は協力したりして、多くの参加者の方々に来場していただき、Hokkaido.pm と北海道を体験していただきたいと考えています。記念すべき10回目が盛り上がると良いなと、色々な意味で故郷である Hokkaido.pm には強い思い入れを感じます。

毎回トークする人が固定化するのは良くないと考えているので、新しくトークしたい人がいればぜひとも枠を譲りたいところですが、もしトーク枠があれば、原点回帰してApache mod_perlの話でもしたいですね。Apache 2.4でも、もうそろそろmod_perlが安定版で動作しそうだったり、手元でもまだ「秘密のネタ」を仕込み中だったり、Hokkaido.pm とは切り離してmod_perl活動を進めていきます。

今まで #5 から何回かトークしたmod_perlネタは、面白い(自画自賛というより「こんな変態的なことやる奴いるのか!」的に)割に聴衆にスキルとして持ち帰ってもらえない、という欠点があったように思えます。その場が盛り上がればよいとは思うのですが、何かネタ以外で持ち帰ってもらえるようなネタがあればいいなと思って今回は全く別のテーマにしたのですが、ちょっとアテが外れてしまいました。トークの世界はなかなか難しい。でも、だからこそ面白い。

次回キリの良い10回目、いつにもまして盛り上がれればいいなと思います。北海道の夏は空気も綺麗で涼しくて最高ですよ。2ヶ月前くらいに航空券と宿泊先を抑えればかなり安くなりますし、関東圏在住の方々も、旅行やリフレッシュを兼ねて Hokkaido.pm に行ってみてはいかがでしょうか?

Posterousが2013年4月30日に終了するので色々面倒なことになった

こんにちは、Posterousでブログを開設して失敗したと思っている おがた (@xtetsuji) です。

Posterousが2013年4月30日に終了することが決定しました。アナウンスあり (どうせこれ自身もPosterousブログだし、無くなるだろうからウェブ魚拓)。ITmediaでニュースにもなりました

posterous-is-closing-down

しかし昨年3月にTwitterに買収されてから明らかに開発が滞って、Twitterアカウントでも連日障害報告をしていたり、いたるところでサービス終了を匂わせてはいたのですが、やはり終わってしまうのかという感じです。ユーザ視点で見ると買収も良し悪しですね。Twitter大好きなのでなんともいえない気分です。Posterousの遺伝子がTwitterに受け継がれることを祈るばかりです。

さて、Posterousからブログを引っ越す必要があるわけですが、上記のリンクからも分かる通り、バックアップをZIPファイルで取得できるようです。

posterous-blog-backup-interface

バックアップを予約して、ブログの規模にもよりますが、程なくしてバックアップは完了します。「所定のメールアドレスにメールするね」って書いてありますがこなかった。クソ…;。

で、ダウンロードしたZIPをほどくのですが、以下のような構造になっていました。

ogata@langdechat:~/Downloads/space-3273122-xtetsuji-222e60b8d71f5c7095fab6dd8ea7723d$ ls -l
total 1152
-rw-r--r--@  1 ogata  staff   10342  2 16 14:30 exports.css
-rw-r--r--@  1 ogata  staff     925  2 16 14:30 head.xml
drwxr-xr-x   3 ogata  staff     102  2 16 14:30 image/
-rw-r--r--@  1 ogata  staff    4303  2 16 14:30 index-2.html
-rw-r--r--@  1 ogata  staff     718  2 16 14:30 index-3.html
-rw-r--r--@  1 ogata  staff    4555  2 16 14:30 index.html
drwxr-xr-x  51 ogata  staff    1734  2 16 14:30 posts/
-rw-r--r--@  1 ogata  staff  550443  2 16 14:30 wordpress_export_1.xml

MT形式でのインポート形式への対応ファイルがあるかなーと期待していましたが、どうもそんな考えは甘かったようです。いちおうindex.htmlを開けばそれだけで完結した形式で閲覧はできるので、これ一式をどこかのウェブサーバに持っていけば閲覧は引き続きできると思います。

wordpress_export_1.xml ってのは WordPress へのインポートファイルなのかと思いましたが、中を見たらマルチバイト文字列が化け化けで使いものになりませんでした。これには失笑。posts/ 以下にある XML と HTML、こちらはUTF-8形式で文字化けもせず各記事が1ファイルになって保存されていました。ここから復旧するしかないでしょうね。

数が少なければ、新しいブログに一つ一つ手で入れていくっていうのもアプローチとしてはアリかと思いますが、画像関連が面倒くさい。

ちょっとこれらを著名な日本のブログサイトやブログシステムにインポートするスクリプトを書くことになりそうです。大した仕事では無いと思いますが。少なくとも「MT形式」にさえしてしまえば後はどうにでもなるでしょう。

私は幸い、独自ドメイン post.tetsuji.jp をPosterousに紐付けて使っていました。なので誘導に関しては比較的融通がきくだろうし検索サイトの誘導も比較的容易だと思うのですが、Posterous のサブドメイン ***.posterous.com でブログやっていた人は「住所変更」もできず悲しいことになりそうです。これはPosterous側がposterous.comのドメインでどうアフターケアするか見守るしかありません。

新しいブログ先はどうするか?今回の件で私はブログサイトの永続性に大いに疑問を持ち、正直懲りました。無料のブログサイトでは永続性は期待できない、有料のも疑心暗鬼になっています。本当は自分でホスティングするのが面倒だし自分のオペレーション的な信頼性も低いかなと思って当初他のブログサイトPosterousにホスティングしていたのですが、ちょっともう無いかなと。面倒でも自分でWordPressかMovableTypeを立てるよ、って感じです。

「日本で何年も続いているブログサイトあるよ?」とか「Tumblrは業界最大手だし大丈夫じゃない?」って反応もあるかとは思いますが、前者は前者で無料はちょっと…;有料のもコストがかかる。後者は個人的にリブログという仕組みが肌にあわないというか著作権的に大丈夫なのって気になって使えない。

Posterousの創業者が永遠に終了しないブログサービスを作るって言っているようですが、自分の信頼が地に堕ちたことに気づいていないらしい。

Posterousのバックアップアーカイブを別形式に変換できるようなスクリプトが書けたらまたお知らせします。もしくはリクエストがありましたら Twitter @xtetsuji までお気軽にお寄せください。自分に出来る限りなんとかします。

mod_perlだけで重い処理を行うにはどうすればよいか

自称mod_perlエバンジェリストの おがた (@xtetsuji) です。

2012年のYAPCで「mod_perl王にオレはなる!」とか言っておいて、mod_perl業がおろそかになってしまって非常に恐縮です。最近は別の事に熱中していて…;という言い訳は置いといて、そろそろ本腰を入れてmod_perlしていきます。

Twitterを見ていたらこんなツイートがありました。

[tweet https://twitter.com/_sugarsan/status/301911501659320320]

これに対して @mod_perl_info

[tweet https://twitter.com/mod_perl_info/status/302079473338175488]

…;と返しましたが、mod_perlだけでこういう問題を解決するにはどうすればよいでしょう。

まずは system($cmd.’&’) 作戦から。

mod_perl の Perl CGI エミューレート環境 (Apache::Registry, ModPerl::Registry ファミリー) では、コードはある種のコンパイルをされ、特殊な内部パッケージ名の handler という名前のサブルーチンの中のコードとなります。mod_perl は一度メモリ上に作った特殊な内部パッケージの handler というサブルーチンを繰り返し呼び出すことでコストを抑えています。

mod_perlのPerl CGIエミュレート環境ということで、CGI.pm か CGI::Simple を使っていると仮定すると、system($cmd.’&’) されるのは print $cgi->header(); を行って、必要なHTMLなりテキストなりのアウトプットが完了した時点だと思います。そうでなければユーザに完全なレスポンスを返さずに長時間作業に入ることになってしまい、ユーザはブラウザの前でイライラすることでしょう。

これで問題解決…;と言えるかもしれませんが、いくつかの問題もはらんでいます。

  • この system($cmd.’&’); が呼び出されるアクセスが大量にやってきた場合、全ての子の数(たとえばprefork MPMの場合、MaxClientsの数)以上のアクセスが $cmd の長時間処理にかかりっきりになったら、それ以上のHTTP応答ができなくなる。
  • ユーザに返したいレスポンスを全て返した(HTMLであれば”</html>”までとか)としても、ブラウザはそのHTTPリクエストのレスポンスをたぶん待ち続けるはず。ブラウザがHTMLドキュメントの終了を推測できてDOM解析を完了できたり、KeepAlive等のタイムアウト設定で接続が切れることで、表向きは問題無いように見えるけど、処理としてはエレガントではない。

これをmod_perlだけで解決するにはどうすればよいでしょうか。

ネタ元ツイートの方は exec が CORE::exit と同等 (Apacheの子プロセス自体を終了させる) と言及していますが、実際の exec の挙動は一般的に「現在のプロセスを他のプロセスで置き換える」事です。execはexitと違い、mod_perl側が *CORE::GLOBAL::exec をいじるなどのサポートは行っていないので、元のexecそのものの挙動になります。preforkされた該当の子httpdは $cmd で定義されたコマンドに置き換わり、親から見たら子は突然消えたことと同じことになり、子が設定値的に足りなくなれば親が充足してくれます。ただ、以下の問題があります。

  • mod_perlハンドラhandler中で正規の処理を終わらせていないので、クライアントから見たら接続先のHTTPサーバが突然見えなくなるという乱暴な事になる (大きな問題ではないと思いますが)
  • ログ処理フェーズへ子プロセスが進めないので、当然ながらログが書かれない

前者は少々乱暴でも良いとは思いますが、ログが書かれない事を望むウェブ開発者はいないでしょう。

これら全てをmod_perlだけで穏当に解決するにはどうすればよいか。

まずmod_perlというかApacheは、レスポンスを返すフェーズの後続が以下であることを復習しましょう。

  • レスポンスフェーズ
  • ログ処理フェーズ
  • クリーンナップフェーズ
  • 次の処理待ち…;

長時間かかる仕事 $cmd を実行するのであれば、レスポンスフェーズをきちんと終わらせた後、ログ処理フェーズでログを書いてもらい、$cmd の実行はクリーンナップフェーズで行うのが良いでしょう。大量に来るのであればクリーンナップフェーズで exec して子httpd を $cmd にして、親に「子が親離れした」と思わせてもよい。クリーンナップフェーズであれば既にログも書いているので、exec で子が「いなくなっても」問題は無いでしょう。

それは以下のようなコードで実現できると思います。mod_perl の Registry ファミリーを使った Perl CGI エミュレーションスクリプト中を想定。

my $r = $cgi->r # $cgi is instance of CGI.pm or CGI::Simple
    or warn "non mod_perl environment";
if ( !$r ) { # Pure CGI
    system($cmd.'&'); # Pure CGI の場合は諦めてここで実行
} elsif ( $r->can('register_cleanup') ) { # mod_perl1
    $r->register_cleanup(sub { system($cmd.'&'); }); # exec($cmd) でも OK
} elsif ( $r->can('pool') { # mod_perl2
    $r->pool->cleanup_register(sub { system($cmd.'&'); }); # exec($cmd) でも OK
}
else { die "unknown"; }

もしくはmod_perl環境でもわざとレスポンスフェーズの末尾でsystem()をして、それに掛かった時間をログに載せるという手もあります。

my $r = $cgi->r;
my $start_time = time();
system($cmd.'&');
my $end_time = time();
$r->notes->set( cmd_proctime => $end_time - $start_time ) if $r;

Apche の LogFormat ディレクティブで %{cmd_proctime}n を使って参照できます。

$r->notes->set( cmd_proctime => $value ); でなく $ENV{cmd_proctime} = $value; として LogFormat ディレクティブで %{cmd_proctime}e として参照することもできますが、これはmod_perlではバッドノウハウ。この子プロセスが次に受けたリクエストがこのsystem()処理を行なわいスクリプトでも比較的永続的なプロセスである子は環境変数を持ち越してしまうので、前回の値がかかれてしまう。Pure CGIはそもそもApacheノートや環境変数でmod_log_configに値を渡すことはできない(これについて以前FastCGIでどうすべきかを論じた記事がありますが、それがPure CGIでも参考になると思います)。

mod_perlでも、Apacheの処理フェーズなどを駆使してここまで曲芸ができるという例でした。

上記コードは全て知識を元にした推測で書いています。実証実験はしていません。何か問題があればTwitter等でリプライください。

もっと汎用的にこの問題に取り組みたいということであれば、ジョブキューを使いましょう。例えば「第10回 ジョブキューで後回し大作戦―TheSchwartz,Qudo,Q4M(3):Perl Hackers Hub|gihyo.jp …; 技術評論社」や、書籍「モダンPerl入門」を参照すると良いと思います。

JALマイルの還元率

こんにちは、普段は陸マイラーのおがた (@xtetsuji) です。

ポイント大好き。普段は近所のサークルKサンクスでEdyやカルワザポイントをためて、Tポイント(これは個人的に貯めづらい)、Pontaポイントなども貯めています。一度セッティングすると意識せずにポイントがたまって、後で数千円の「お小遣い」がもらえるのが嬉しい。逆に意識してやっちゃうと「ポイントを貰うために買い物をする」という本末転倒なことになりかねないので、意識しないフロー作りがポイントかもしれません。

ではポイント制度の代表格である航空券のマイルはどこかというと、私はJALです。Edy使っているならANAのほうがいいとか言われるんですが、もともと地元帯広にJASしか航路がなくてJASが買われてJALになって、最近になってANAやAirDoの便がとかち帯広空港に就航しても惰性でJALです。一度大きく傾きましたが、まぁ悪い会社じゃないと思いますよ。ずいぶん以前に株主優待目当てに株買おうと思って買わなかった事がありましたが、今思い出しても冷や汗が出ます。やっぱり自分に株や投機事は無理。

通常は飛行機に乗るともらえるマイルですが、普段の生活でもマイルを貯めることができて、そういう人のことを「陸マイラー」(おかまいらー)といいます。私もクレジットカードをJALカードにして公共料金等の支払いをそこに集約することで、毎月そこそこのマイルがたまっていきます。

陸マイラーの方法についてはプロがたくさんいますので、検索してみるとたくさん出てくると思います。挙句、マイルを貯めるためだけに飛行機に乗る修行僧という人達もいるくらい。

ここでは「ここでは○○円の買い物につき1マイルもらえる」といった話は省略します。純粋に既に手に入っているマイルが1マイルあたり何円かといった還元率について考えたいと思います。

(※「還元率」って言葉で正解かな。ちょっと心配。)

金券や電子マネーに交換する場合

JALはWAONと提携しているのでJALマイルをWAONポイントに変えることができます

  • 10000マイルで10000WAONポイント(100000円)
  • [キャンペーン時]10000マイルで12000WAONポイント(12000円)

キャンペーンの時を考慮しても、1円/1マイル〜1.2円/1マイルですね。

WAONポイントもそうですが、多くのポイントシステムでは1円/1ポイントです。これを下回ることはない。逆に言えば1ポイントあたりどれだけ多くのお金にするかが鍵となってきます。

他にもJAL提携店舗で使えるJALクーポンに交換することもできますが、こちらも10000マイルで12000円のようです。1.2円/1マイル。詳しくはJALクーポンマイルを参照。

パートナークーポンに交換する場合

パートナークーポン特典を参照。

数が結構あったり、古いものがなくなったり新しいものが出てきたり、移り変わりが激しいので、個別の比較はしませんが、大体1マイルあたり1円〜2.5円が相場。中には2000マイルで10000円相当(5円/1マイル)というのもありましたが、「安い」といっても別に欲しくもないものに交換する必要は無いでしょう。

パートナー特典に交換する場合

パートナー特典を参照。

基本的に、SuicaやPASMO、そしてPonta等の1円/1ポイントのサービスに交換するサービスです。

全部観たわけではないですが、ほぼ10000マイル→10000ポイントという相場のようです。つまり1円/1マイル。交換手数料を取られないだけマシといったところでしょうか。普段飛行機に乗らない陸マイラーだけど鉄道はよく利用するといった人には良いかもしれませんが、あまり還元率は得とは言えなさそうです。

JALとっておきの逸品に交換する場合

JALとっておきの逸品を参照。

一見相場が分からない色々な品物が10000マイルから交換できます。例えば10000マイルで交換できるものに10000円の価値があるか?ちょっと分かりませんでしたが、価格.comやAmazonを見れば最安店で10000円以下で手に入りそうな気もします。

本当に欲しいものがあるのか、といった点もポイント。無駄なマイル出費は控えたい。特に家電については型落ちですぐ値段も下がるので割りに合わない(1マイルあたり1円以下)こともありそう。

良くてせいぜい2〜3円/1マイルくらいではないでしょうか。私はあまり期待していない部分です。

フライトで使う

航空会社のマイルというポイントを貯めているのだから、頻繁でなくとも飛行機を利用する人が貯めているのがマイルだと思います。私も出張等で頻繁に飛行機には乗りませんが、年数回の帰省で必ず飛行機に乗ります。

国内線、国際線、提携航空会社と色々ありますが、ここでは一番需要が高そうな国内線について計算してみようと思います。マイル早見表も参考にしてください。

今回は国内線の中でもさらに一番需要が高いB区間について考察してみます。ドル箱路線と言われている羽田と札幌・福岡を往復する人は多いでしょう。片道利用と往復利用がありますが、明らかに往復利用のほうが割が良いのでそちらのみを考察します。

B路線の往復に必要マイル数は

  • 通常15000マイル
  • JALカード会員14000マイル
  • ディスカウントマイル期間12000マイル

ディスカウントマイル期間は閑散期に行われているものです。

ここで重要なのは「航空券を早く買えるか」。JALの場合は約1ヶ月前までに購入すれば先得割引といって航空券が半額程度になります。だいたい片道20000円弱。往復で40000円弱。そうなると通常マイルで換算するとだいたい40000/15000=2.7円/マイルくらい。驚くべき数字でもありません。

逆に直前に買う場合には片道30000円弱、往復で60000円弱になるので60000/15000=4円/マイルと結構割安になります。ただマイル枠という座席枠があるので、これも早く申し込まないと通常座席は空いているけどマイル枠の座席は無いという事態にも陥いるでしょう。

年末年始や大型連休の場合、片道は40000円、往復で80000円ほどに値段が跳ね上がって、これをマイルで交換するとさぞかし還元率が良いと思ってしまいますが、こういう時は確実にマイル航空券の対象外期間です。

それでも上記での、他の商品や他のポイントへ交換するよりも割が良いので、全然詳しい計算はしていませんが、交換できるのであればJALマイルは航空券に交換するのが良いのではないかというのが結論です。

閑散期に早く予約ができて先得割引がきけば、片道15000円、往復30000円程度でB区間を往復できます。そうなると1.5円/マイルと、それほど魅力的な数字ではなくなってしまいますが、こういうときにお金に余裕があるならキャッシュで乗ってさらにマイルを貯めるというのも手ではないでしょうか。

国際線や他の提携航空路線については私もよく分からないので計算していないのですが、他の商品や他のポイントに交換するよりはやはり還元率は良いのかもしれません。

国内線は事前に航空券を先得割引で買って細々とマイルを貯めつつ、陸マイラーでもマイルを貯めて、たまったマイルは先得割引が使えない時期に移動が決まったときや、海外旅行の楽しみなどに温存しておくというのも良いでしょう。

皆さんのマイル運用術についても知りたいです。Twitter @xtetsuji 等へご意見おきかせください。

モバイルSafariでアドレスバーを非表示にするscrollTo(0,1)はバッドノウハウ

昔からスマートフォンは iPhone ユーザの おがた (@xtetsuji) です。iPhone 3G→iPhone 4→iPhone 4S→iPhone 5←イマココ。

パソコンやMacで使っているブラウザがGoogle Chromeなので、同期が便利とかの理由で最近はiPhoneでのウェブ閲覧に標準のモバイルSafariではなくGoogleがリリースしたChrome for iOSを使っているのですが、最近よくアクセスするサイトでは以下のような現象が起こります。

  • ブックマークからアクセスする
  • ページが表示されたらすぐ目的の下方向にスワイプでスクロールする
  • Chromeのページ読み込み進捗バーが消えてページ読み込みが完了する
  • スクロールしていたのにページのトップに戻される

これって、モバイルSafariのアドレスバーを非表示にしたいがためのバッドノウハウなんですよね。Googleで「モバイルSafari アドレスバー (消す OR 隠す)」とかで検索するといっぱい出てくる。

要するに「ページ読み込み(DOM構築)が完全に完了した後に下に1pxスクロールすれば隠せるからJavaScriptでそれをやっちゃえ」っていう発想。ただChromeもそうだけど、モダンなブラウザはページ読み込みが完全に完了する以前からページの一部を表示しはじめる。だから、ブックマークからアクセスしてページが表示されたと思ってスクロールしていると、特にiPhoneはCPUがパソコンより遅いとかネットワークが遅いやらの関係で読み込み完了までの時間がかかるページだと、せっかく下にスクロールしたのに上に戻されるという結果になる。そもそも自分が使っているブラウザはChromeなのでアドレスバー隠すとか全く関係ないし、余計な事に巻き込まれて迷惑なことこの上なし。

検索してみるとjQueryバージョンとか色々あると思うけど、世間で主に流通しているシンプルなJavaScriptコードは以下のようなものだと思う。

window.onload = function() {
    setTimeout(function(){window.scrollTo(0,1);}, 100);
}

なんで0.1秒間を置くのかかよく分からない。このあたりもバッドノウハウたるゆえんじゃないかな。

告白しますが、恥ずかしながら自分も昔これを書いたことあります。昔気にならなかったのは、モバイルSafariを使っていたというよりは、ページレンダリングも何もかも遅くて気にならなかったんじゃないかなと思う。

もしコレを本当にやりたいのであれば、スクロールしていない(Y座標が0である)ことを確認してから行うべき。

window.onload = function() {
    if(window.scrollY == 0)
        setTimeout(function(){window.scrollTo(0,1);}, 100);
}

上記は想像でコード書いたので上手く動くかはわからない。if付け足しただけだし、エラーにはならないと思うけど。

Googleで検索して真っ先に出てきた「千と千尋のアドレスバー隠し – スタジオ・アルカナ技術ブログ」でもこれについては言及していなかった。

本当にアドレスバーから解放されたいのであれば、ハードルは高いけど自分でiPhoneアプリを作るか、もしくは必要なページ遷移を全てAjaxで行うようにしてホームアイコンに置かせてアドレスバーを消すmeta要素を入れるといったほうが良いように思う。後者は典型的なAjaxウェブアプリをiPhoneアプリに見立てる方法として検索すれば色々情報が出てくるので、興味があったら検索してみると良いと思う。

同じこと思っている人はいるだろうと思っていたけど、とりあえず一つ見つけた。

Chrome for iOSを使って、このバッドノウハウが入ったよく使うサイトを快適に使うにはどうしたらいいだろう。開発元に連絡するしかないかなぁ、などと考えている今日この頃でした。

2013年に目指すべきもの

こんにちは、2012年末に記事をポストしてから、2013年はすっかりブログを放置していた おがた (@xtetsuji) です。いけないなぁ、もうちょっとブログ執筆の心理的負担を軽くしたほうがいいかもしれない。いつも文章を書き始めると重くなるのは悪い癖。

2013年も1月終了のお知らせが出て12分の1が終わろうとしている今日この頃ですが、改めて2013年をどうしていきたいか、ちょっと列挙していこうと思います。

2012年を越える

まずはこれ。2012年は9月にYAPCの大舞台に初登壇したりしましたが、そんな昨年を越える活動をしていきたいと考えています。

やっぱり今年もYAPCの発表をしたいなと考えてはいますが、まだこれといったネタは無い状況。

とりあえず大きめの勉強会発表始めとしては3月に札幌で行われるHokkaido.pm#9かなと考えています。場数を踏んで、トークもプレゼンテーション資料も日々進化させていきたいと意気込んでいます。

2012年にYAPCで宣言したmod_perlの活動も「やるやる詐欺」状態になっていますが、これも打開していきますよ。mod_perlの原義も「Perlを使って機能拡張ができる何か」に拡大解釈して、NginxのHttpPerlModuleなどにも進出していく所存です。

他の言語やテクノロジはやらないのかって?その時々のノリかなぁって感じています。JavaやRubyやHaskellもやってみたい。Perlは私にとって特別な存在だけど、しかしプログラム言語は手段であって目的にはあまりしたくない。2012年の終盤から細々と数学を学び直していますが、今年は数学でもっと何か発見をしたいと感じています。そのために何かのプログラム言語等を手段として導入する事があるかもしれない。その最たる例は(プログラム言語では無いですが)LaTeXですね。仕事でもいわゆるWordの糞っぷりに触るたびに憤るくらいなので、それをLaTeXで打開したい。その他にも中途半端にならない程度に色々なことを体験していきたいです。食わず嫌いが一番良くない。何でも体験です。

自分を象徴する何かを作る

私には「○○のおがたさん」という○○の部分が特にありません。「mod_perl」が入るのかもしれませんが、ただのハードユーザの一人でしかなくて、何か有用なプロダクトやモジュールを作ったというわけではない。

今年はサイトでもいいしモジュールでもいいので、何か私を象徴するようなものを作って世の中に公開し、そして人のためになりたいと考えています。

何かを作るという意味では、一度は書籍執筆をしてみたいと考えています。私に今できるネタとしてはmod_perlの何かでしょうか。今は電子書籍出版全盛の時代。電子書籍であれば紙の出版物よりもハードルは低そうです。これもチャレンジしたい。でも紙の出版物を出すことにも憧れます。本を読んだ人からサインを求めらるという体験をしてみたいから。

誤解がないように言うと、自分自身が有名になりたいという欲求はそれほどないです。有名税を払ったりしたくないし。でも有名になる何かは作ってみたい。この気持ち、分かりますかね。

健康に努める

ITの力で色々な物事を成し遂げている使命を持っている私ですが、どんな業界であっても身体が資本。2012年は年中身体を壊していましたが、2013年は健康をキーワードに、健康的な生活を心がけて、病気の元となりそうなものからは極力遠ざかるようにしたいです。

運動も一つのキーワード。かなり適正体重を上回っているので痩せる必要もあるのですが、健康的に痩せたい。そのためには代謝をつけるのが一番なんですよね。そのために、筋トレをしたりといった活動を安価に行なっていきたいと考えています。学生時代、あんなに大嫌いだった体育が自分の健康維持のために重要なものだったとは。社会人になってから痛感することは多いです。

お金に執着する

「人生ではお金で買えない大切なものが…;」と綺麗事を言うのは簡単ですが、お金が無いと日々の生活すらできないのは事実。資本主義社会に生き、会社に属する人間としても、公私共にお金を手に入れるということは必要な事だし、日々どうすればよいか考えるべきことだと感じます。あと、忘れてはならないことは、我々30代が60代になる30年後にはほぼ確実に年金制度は崩壊しているということ。そのための備蓄を今から始めなくてはならないなと痛感する次第です。

「執着する」というと汚らしい気もしますが、それくらいの気概を持っていかないとならないなぁと感じます。

ちなみに私は投機事、いわゆる株やギャンブルの類は本当に苦手で、そういう投機事ではなく、また違法・脱法行為や卑怯な手段ではなく、真っ当に仕事をした結果としての満足を提供した上で対価をいただくという事を念頭に置いて活動していきたいです。

どんな会社にも「副業禁止」という条項は就業規則にあると思うのですが、最近では個人でブログを持って、そこからアフィリエイト収入を得る事なんて珍しくもない時代。どんなものが副業なのか会社で色々な人に質問をしてみたら「確定申告の必要が出てくるほどの収入を得る作業」「会社の仕事に支障が出るほどの作業」といった答えが得られました。通信費全般とまではいきませんが、少なくともレンタルしているVPSの費用くらいはペイできる位の広告収入サイトや課金サイトを作って運営してみたいなと思っています。これは結構本気。

今、諸事情により絶賛貯金目減り中です。誰かおごってください。

英語を勉強する

やはり英語は大切だなと感じています。mod_perlを本格的に勉強しだした2007年頃に鈍器のような洋書を何冊も読みましたが、やっぱり英語という壁があって理解の速度や深まりが今ひとつ甘いんですよね。IT系の洋書を読みこなしてスキルを身につけたいのも、英語を勉強したい動機の一つ。

また、優れたモジュールやプロダクトの開発者が海外の方で、YAPC等で会って感謝の言葉を伝えたくても英語の言葉が口からほとんど出てこない。これは毎年悔しい想いをしていることの一つです。他愛もない中学1年生英語のレベルからスピーキングを脱して、多少の会話ができるようになるのも目標です。スピーキングはいいとして、ヒアリングが最も難しいんじゃないかなと感じています。その辺も強化できるよう、インターネット上の興味深いネイティブスピーカーの会話を何度もヒアリングしてヒアリング力を向上していこうと考えています。

芸術を磨く

中学高校時代は図画工作や音楽の授業があったりしましたが、社会人になってからすっかりそういう芸術方面への参画が無くなってしまいました。ちなみに昔からクラシック音楽が大好きですが、絵の方はからっきしです。

鑑賞者という意味では、クラシック音楽の演奏会に行ったりNMLで日々クラシック音楽を漁ったりしていますが、表現者という意味では全く活動しなくなってしまいました。

昔はリコーダーでモーツァルトの交響曲を器用に吹いたり、マリオペイントについてくるコンポーザーで自作曲を打ち込んだりしていたのですが、そういう芸術の表現者としての活動を再開していきたいです。

今だと発信媒体としてのニコニコ動画や高品質な音楽ソフトが充実している時代。そういうものを使いこなして何か形になるものを残せればと考えています。

あと大人になってしまいましたが、今からでもピアノを習いたいですね。これもお金との相談になりますが、今年の目標としたいです。

見聞を広める

2011年から精力的に色々な勉強会に出て色々な方と出会っていますが、今年はさらに出会いを大事にしたいと考えています。

また、技術や仕事に関係ない話ではありますが、旅行がしたいですね。できれば海外旅行。前述の「英語を勉強する」にも通じますが、驚きの出逢いをしたい。国内でもいいですが、海外だとさらに驚きの出逢いができるんじゃないかなと。そのためには先立つ英語力と金銭が必要なわけで…;。金銭は国内旅行にも必要なわけで、まずは必要なものを揃えるために鍛錬したいと考えています。

またこんなサブタイトルを掲げると「嫁はまだか」「彼女はできたんですか?」と聞かれる気がするので一応書いておこうかなと。私の理想は「話の合う歳の近い女性」だったのですが、三十路過ぎの女性の選り好みにとてもじゃないけどひっかからないことがよく分かりました。外見も良くなければお金も持っていない。外見を変えて金を稼げば良いのかと言われても、そうでもない気がする。特に若い子好きというわけではないし、同世代トークができない寂しさも感じたりするのですが、おこがましくもターゲットを若い世代に切り替えようとしています。…;といっても特に出会いもないし何か今作戦があるというわけではないんですけどね。こういうのは風向きなんだと思います。それよりも私には上述のようにやるべきことが山ほどある。

あまり関係ない話ですが、2012年に流行った「街コン」は今年が山でしょう。少なくない街コンが、地域商店街の閑散期を埋めるためのボッタクリイベントという正体が徐々にバレつつある。街コンに興味を持った時期もありましたが、そういうボッタクリイベントには近寄らないようにしようと思います。

好きな人を応援する

中学生以来アニメからはずっと遠ざかっていたのですが、2009年頃からチラホラとまたアニメを観始めて、2011年から2012年はどっぷりと「ジュエルペット サンシャイン」にハマってしまったのですが、その中で声優という職業の方々の魅力を改めて知りました。前述の「ジュエルペット サンシャイン」出演の声優さんもそうですが、最近観て面白かった「日常」に出演されていた若手声優さんも応援していきたいと感じています。

そのために、今まで得たITの技術を盛大に無駄遣いしたい。ファンサイトを作ったり、トレンドの統計をとったり…;。

ちなみに今応援している声優さんは誰かって?

  • 「ジュエルペット サンシャイン」で結構特殊な主役を演じた松嵜麗さん
  • 「日常」で独特なキャラクター「安中さん」を演じた佐土原かおりさん
  • 「日常」でツンデレキャラクター「立花みさと」が好演だった堀川千華さん

基本的に「20代」「10代から活動とか子役時代があるとか若年キャリアがあるわけではない」「独特の世界観を持っている」「まだそれほど多くの人が応援していない」がキーワード。例えば沢城みゆきさん等も20代で私も好きな声優さんですが(2009年に改めて観始めた「テガミバチ」は沢城みゆきさんが演じるラグ・シーイングが主役)、私が応援するまでもなく既に大御所ですからね。そんな感じ。

「声オタになるんですか?」「リアルに目を背けてそんな事をしていていいんですか?」とか言われそうですが、私の人生を決めるのは私なのでいいかなって感じています。それとこれとは全く別でしょう。そう、そういうのは風向きなんですよ。

環境を変える

社会人になって10年。その間、引越しを一度もしていないんですよね。ボロアパートで貧乏生活。これは前述のお金に関わってくる話になると思いますが、引越しとはいかないまでも、部屋の環境を変えたい、というか部屋の片付けをしたい。

実家の環境だと色々と着想が湧いたり安眠できたり生活リズムが整ったりするのですが、何故か東京の自宅ではこれらがあまり得られた気がしない。多分、部屋が汚いとか、寝具が買い替え時とかそういう事情なんだと思います。

昔から本当に片付けが苦手で、どうすれば片付けができるようになるのか、そういった部分も興味対象であります。部屋を片付けたり、寝具を新調したりしながら、健康面やより良い発想につなげていきたいと考えています。

その他・最後に

長々と書いてきましたが、他にもやりたいことが色々あるような気がします。たぶんカフェで2時間ボーッとしていたら何か一つは出てくる。ただ、それを実現するためにはそれなりの時間がかかるものもあるでしょう。ただ、時間がかかること等を理由に食わず嫌いをしたくはない、思考停止したくないというのは常に考えていきたいです。この辺りは考え方の問題であったり、タスク管理の問題であったりするわけですが、その辺りの環境整備も充実させていきたいですね。

あんまりたくさん掲げても、短い1年の中で実現できることは当然限られるわけで。とりあえずこれくらいにしておきましょうか。残り11ヶ月、年末に振り返って満足できるよう、2013年も頑張っていきます。

2012年を振り返る

こんにちは、おがた (@xtetsuji) です。

題の通り、2012年を振り返ってみたいと思います。いままでブログも遅筆だったり書くのに積極的ではなかったので、こういうエントリは初めてかも。

1月〜3月

仕事では、新年になって新しい技術者雇用をしようという話になった。いままで外部の人に会社の技術者の現状を話すと「よくそれでまわりますね…」と言われるほど少人数で綱渡り運用だったことは自分でも不安に思っていたことなので、一人採用という会社の方針でも非常に嬉しいことだった。うちの会社のネームバリューの無さから業界の大物といった人物を雇えないことから、育てる事を主眼に入れた未経験に近い人を雇用することになった。この会社に努めて10年近く経つ平社員だけど、面接にも同席して数名の方とお話をする中で今の後輩の入社が決まった。業務未経験ではあったものの、在野で勉強をしてIT業界にあこがれを持っていた事や、基本的なウェブアプリケーションをPerlで書けることが採用の決め手につながった。3月1日入社。

上司が書くコードに対して、mod_perl技術への助言などを行うほどmod_perlについて見識を貯めたつもりだったが、ひょんなことから某案件でApache worker MPMとPerl ithreadsを使うことになった。Perl ithreadsは危ないと散々反対したものの、結局紆余曲折あってそれでKVSより少し融通が効くようなサーバを作ることになった。入念なテストは行って、大丈夫だと手応えが出てくるうちに最初に反対したことは忘れて、mod_perlの貴重な経験ができて良かったと思うようになった。この案件にはPerl ithreadsで動くコードを納品することになって、多少トラブルがあったものの、最終的には当初の構想とだいたい同一のものが動くことになった。ただ、しばらく後で上司と飲み会でこの話をした時にあれだけ私の反対を押し切った上司が「あれはもうちょっと時間があればAnyEventとかの別実装のほうがよかったよね」と言っていて多少仰天した記憶があるけど、10年近く働いている中で結構こういうことはあるので、それほど驚愕はしなかった。

仕方がなかった事だけど、2月に会社がDebianプロジェクトに資源を提供していたg15プロジェクトが終了してしまったのは残念だった。一つ自分の肩書きが減った、といっても自分は大したことはしていなかったけど。

2011年5月にHokkaido.pm#5で初トークしてから、YAPC::Asia Tokyo 2012を目指して、それ以降はトーク経験を積んだ。地域PMに限らず、Twitter API勉強会(#twtr_hack)等でもLT登壇。これはあまり上手く行かなかった思い出があるが、場数を踏むという点では良かった。

主なブログエントリ。

4月〜6月

3月に入社した後輩の教育がさかんになった季節。もともとPerl CGIでウェブアプリケーションを作れるスキルはあったが、LinuxやApacheの基礎だったり、社内開発の独特の流れや、mod_perlについての解説等、教え好きの自分の面目躍如だった。ありとあらゆることを教えた。まずはいじり壊しても影響がない社内ツールを教材に、IRCボットをPOE::Component::IRCベースからAnyEvent::IRCベースに書き換えてもらったり機能強化してもらったりと、ウェブアプリケーション以外でもスキルは確固たるものだということを見せつけられた。採用に狂いはなかったなと確信した。開発者という集まりで社内勉強会が開始されたのも4月だった。

社内には私と上司を含めて2名しか事実上専業プログラマーがいない(プログラミング出来る人はいるけど職務上は基本的にしない)という状況だったので、前職がIT系ではなかった後輩には「プログラミングやプログラマって世間ではこうなんだよ」という広い世界を知って欲しかった。そこで、手頃な勉強会を探して @ytnobody さん主催の「Perl Beginners#2」にめぐり合った。後々も毎回参加することになって、後輩に広い世界を知ってもらうよいきっかけになった。自分も振り返りの機会としてとてもよい勉強会だった。

4月から裁量労働制がフレックス制に変更になって、働き方が変わった。後でも振り返ると思うけど、通年を通して色々と病気していた一年間だったものの、裁量労働制のおかげで自宅で仕事…ということがフレックス制によりできなくなり、遅刻という概念が生まれることになった。

4月16日の「foursquare Meetup」といった毛色の異なるイベントにも出席した。foursquareのファンというだけのつながりのイベントだったけど、とても面白いイベントだった。2013年も4月16日に行われることになりそうだけど、ぜひ行ってfoursquareや最近のロケーションベースサービスについて語りたい。

仕事やプログラミング以外では、スゴイ面白くて好きだったアニメ「ジュエルペット サンシャイン」が3月末で終了してしまったことが寂しかった。この後、DVD-BOXを買ったり声優さんのイベントに乗り込む原動力となるのだが、熱い想いを書いたブログエントリが非常に大きな反響を呼んだのには驚いた。

私のトーク活動の出発地点となったHokkaido.pmも第7回目となり、Hokkaido.pm#7にも出席した。

主なブログエントリ。

7月〜9月

9月末にYAPC::Asia Tokyo 2012でトークをするために走り抜けた期間。緊張の申し込みから入念なトーク資料の準備、そして当日の発表まで、大変だったけど結果が良かったので非常に満足な期間でした。

(書き途中なので少し待ってね)

10月〜12月

(書き途中なので少し待ってね)

まとめ

ザ・インタビューズで「今年の漢字は?」と聞かれたときに「集」と答えたように、今年は会社の後輩から勉強会での新しい出会いや古い出会いの温め、そしてYAPCで登壇したことによる新しい出会いなど、私にしては例年にないほど多くの出会いがありました。2013年もこの勢いで多くのよい出会いを作っていきたいと想います。

昨年2011年もそうでしたが「病気のデパート」と言われそうなほど年中身体を壊して、特にYAPCが終わった10月以降は力尽きてしまった感もありますが、来年は体調管理をしっかりしたりすることで2013年はできるだけ健康に過ごしたいと思いました。

俺得開発を細かく行ってはいましたが、個人開発物としてまとまった成果をOSSやウェブサービスの形で外に出すことができなかったのは心残りでした。YAPCで宣言した「mod_perlのエバンジェリストとなって情報サイトや啓蒙活動を行う」というのもその後の体調を崩したりしたことで言いだしっぺで止まっているのも気になるところです。2013年はこの点を払拭して、トーク活動以外の有用なアウトプットをしていくことを目標にします。

皆さん、2012年はありがとうございました。2013年もよろしくお願いします。

Hokkaido.pm#8 に行ってきました #hokkaidopm

こんにちは、北海道生まれ北海道育ちの おがた (@xtetsuji) です。

2012年12月23日に行われた Hokkaido.pm#8 に行ってきました。

その他、2012/12/30 現在でアップされている参加者の皆さんのレポート。

私のレポートよりも参考になると思います。

今回のHokkaido.pm#8は

  • 2012年も年の瀬
  • SMAPのコンサートと時期が重なった
  • フィギュアスケートと時期が重なった

などの理由により参加者が少なかった・参加者が参加に苦労した回でした。かくいう私も、普段は普通に(懇親会の会場となる)すすきのに宿をとるのですが、すすきのどころか札幌駅近郊のホテルがのきなみ満室で、僻地恵庭に宿をとることになりました。

以下、発表、LT、懇親会レポートなどをつらつらと書いていきます。

MojoliciousをPerl5.8で使えるようにする

@jamadamさんによる発表。

前回(#7)の発表から特段新ネタは無いとのこと。スライドは早々に終了して、以後はライブコーディングというかライブメンテナンス作業を見せるという斬新な光景になりました。会場提供のWi-FiではGitHubにアクセスできない等トラブルもありましたが、面白かったです。

プログラマーと仕事 → XSにまつわる話

JPAからいらっしゃった@typesterさんによる発表。

この「XSにまつわる話」はスライドがSpeakerDeckにアップされており、@akiyamさんによる詳細なレポートがあるので、そちらをご覧になると良いと思います。

XSとは何かという話から、実際に@typesterさんがXSを始めることになった話から、XSの初歩まで、盛りだくさんんで非常に参考になりました。「あぁ、XSってこういう時に使うべきなんだ」って、改めて実感がわきました。「高速化」というのはあくまで黒魔術師がやることであって、本来はCで書かれたライブラリを低コストで呼ぶものだということなど。

  • XSに手を出すまで→XS食わず嫌い期
  • lestrattさんとかgfxとか会話意味不明だし難しそう…;
  • iOSアプリのためにCでAMF/RTMPパーサーライブラリを書いた
    →これをXS化したい
  • * Data::AMF::XS
  • XSとは
    • Perlと外の世界をつなぐ物
    • XSで高速なPerlプログラミング!っていうのは異端 (e.g. Mouse, Text::Xslate)
  • 普通の人は、まずライブラリを普通に書いて、それをXSでバインディングを作れば良い
  • 普通の人はXSで書いても高速化しない。
  • XS書くのに必要なもの
    • ターゲットライブラリの使い方(C/C++とかの知識も含む)
    • *XSの知識その1、XSのマクロたちの使い方
    • *XSの知識その2、Perl<=>Cのデータ変換
    • ターゲットライブラリの使い方(@typesterさんの場合) *iOSアプリケーションの開発が大きい
  • Cocoa APIは慣れた物
  • libmsgpack, libev, libuv とかもアプリからよく使う
  • XSの知識その1
    • XSマクロの使い方(.xs内の構文)
    • ST(N)とかXSRETURN(N)とかのマクロ
    • perldoc perlguts
  • XSの知識その2
    • Perl<->C
  • XSモジュールの作り方
    • Module::Insta::XSUtil or Module::Build::Pluggable::XSUtil を使うと非常に簡単
    • 後者は使ったこと無いけど次のモジュールで使おうと思います
    • M::I::XSUtil
    • gfx作 2010年のAdvent Calendarに載っている
  • DEMO: DISCOUNT Cで書かれたMarkdown変換ライブラリ
    • 型変換を自動でやってくれる仕組みがあるのでそれを使うとコード量が減る。
  • XSでObjective-C
  • 二つ方法がある
    • *.xsをかかずにxsubppで生成されたcファイルと同じ形式のファイルを.mで書く
    • *.xsでObjective-Cを書き、xsubppで変換された.cファイルを.mにリネーム
  • *Hacking Mac Cocoa API from Perl (YAPC::Asia 2011)
  • MacRuby的なの?
    • PerlでMacアプリが書きたいわけじゃなく、PerlでMacの機能にアクセスしたいだけ
    • PerlでObjective-Cの構文を表現したりとかするとカオスになるのは目に見えているし
    • 単機能をPerlの流儀で使える単体モジュールにしていったほうが良い
    • Objective-C自体もLLっぽいし、メモリ周りはPerlといっしょ(refcount方式)だし…;
  • まとめ
    • XSはPerlを外の世界とつなぐもの
    • Perlの世界と対象の世界、両方の知識が必要(両方の知識がある人には夢のツール)
    • Perlしかしらないけどあのライブラリ使いたい!ってときは、そのライブラリ使える人に頼む
    • 自分でそのライブラリを勉強しつつかく
    • XSからCを勉強してもいいんじゃない?
    • 牧(dmaki)さん、0mqさんのXSコードは綺麗で参考になる
    • 基本、一回書いたらコピペが多い

PM運営について

Hokkaido.pmのボス(?)@onagataniさんによる発表。

次回は3月初旬開催予定、というか確定。

@onagataniさんだけでは負担。運営やりたい人いる?→@aloelightさんにお願い。

次回はJPAから@xaicronさんが来てくれることになった。

未来をつくるプログラム

引き続き@typesterさんによる発表。

こちらは先ほどのXSのトークとは違ってスピリチュアルトーク。勇気づけられました。

  • 未来をつくるのは技術者
  • せっかくプログラマーになるなら”未来をつくるプログラム”を書こう!
  • 仕事と趣味の話 (収入を得る得ない、人生を賭ける賭けない)
  • シェアタイム
  • アイデアは常に考え続ける →習慣になっていないとできないこと
  • 技術は常に磨く →今できるのか、それとも少し勉強すればできるのか
  • ハックの精神 →ちょっと自分の周りを便利にするの大事
  • ロールモデルをもつ →一人だと難しい
  • ライバルをもつ →こいつには負けたくない
  • 仲間を持つ →一緒に何かをやってくれる人
  • 下に行くほど難しい
  • ロールモデルの人物
    • Tatsuhiko Miyagawa
      • 日本のPerl界のカリスマ
      • つくるもののセンスがいい
      • 速い
      • ログ記事からハック精神に溢れている
    • Brad Fitzpatrick
      • Livejournal
      • Memcached, Gearman, TheSchwartz
      • 自分のサービスのために自分でミドルウェアを作る。
      • Androidガレージ開け、双子の名前アナグラム提案など。
    • Mat S Trout
      • DBIx::Class
    • Marc Lehmann
      • AnyEvent, libev, libeio
  • ライバルの人物
    • Masakazu Ohtsuka
      • こえ部, ナカマップ, Wonderfl, jsdo.it, 写真袋
  • 仲間の人物
    • Shunichiro Fujiwara
      • 信頼のインフラエンジニア
      • ISUCON二連覇
      • チャレンジングだけど不安な事にダメ出しをしてくれる。だけど保守的ではない。
  • プログラマという仕事に誇りを持って!

サルでもわかるOAuth2

@zigorouさんによるトーク。

非常に詳しいトークでしたがテンポも早く、手元のメモそっちのけで聴いていました。こちらはUstreamによる録画があるので、そちらをご覧頂くのがよいかと思います。@zigorouさん自身も、スライドが完成したら公開するとおっしゃっていたので、それを期待しましょう。

LT

  • @__papix__ さん
    • 25歳
    • モジュール作ってみた
    • Module::Setup
    • テストも書く
    • PODを書く
    • Makefile.PLを修正する
  • @moznion さん →スライド
    • 2年前まで道民
    • 学生
    • 数値計算
    • テスト大事
    • テストの書きやすさマジ重要
    • (トーク非常に素早かったです)
  • @techno_neko さん → スライド
    • 名前付き引数のお話
      • 順番で渡す
      • ハッシュで渡す
      • ハッシュリファレンスで渡す
    • Hokkaido.pm Casual
    • ベストエルティニスト
  • @koji_magi さん →スライド
    • Kokusaitenjijoumae.pm
    • リア充爆発しろ
  • @akiym さん →スライド
    • Perl5.18予想
    • state sub, my sub, our sub
    • Perl5.17時点での予想なのでPerl5.18では変わるかも
  • @xtetsuji →スライド
    • スピリチュアルトーク
    • Hokkaido.pmのおかげでYAPCでトークできた
    • ありがとうHokkaido.pm!

懇親会

鶏屋とことん

前回好評だった、本会終了から時間を待たず17時30分から飲み始めるパターン。

今回はすすきの移動ではなく、東札幌駅近くの居酒屋での開催となりました。料理が美味しかった。

本会は参加人数は少なかったですが、そのほとんどの人が懇親会にいらっしゃっていて、非常に密に盛り上がれたと思います。これはこれで楽しかったー。

二次会

酒肴酒菜 掌-てのひら-

外はすっかり吹雪いていましたが、タクシーですすきのに移動して @onagatani さん推薦の活イカの店でイカや日本酒を堪能。これまた美味しかった。

三次会

すみれ 札幌すすきの店

お決まりのコース、すみれでラーメン。

23時30分ごろには解散。

その後

今回はすすきのに宿が取れなかったので、地下鉄とJRを乗り継いで恵庭のホテルに帰ることになりました。ただ、JRで2駅寝過ごしてしまって恵庭で降りられなくて、タクシーで戻ることに。1800円くらいの痛い出費をしてしまいました…;。SMAPとフィギュアスケート…;。

写真は外部リンク(Twilogや4sqなど)から参照してください。現在写真整理中…;。「顔出しNGの人いますかー?」って聞かなかったなぁ、そういえば。今回は下手ながらコンデジで頑張って写真を撮ってみたのですが、無難に限定公開できる場所に公開できればします。

まとめ

今回はガチ技術論というよりもスピリチュアルなトークや概論的な話が多かったような気がしましたが、聴いて奮い立たされる話が多くて面白かったです。

いつも来る人が来れなかったり、参加者が少なくもあったのですが、これに関しては時期的にもアレ的にも仕方がなかったです。3月開催予定のHokkaido.pm#9に期待です。よほど避けられない予定がなければきっと行きます。

久々に大書店「ジュンク堂書店池袋本店」に行ったけど、やっぱり良かった話

昔はかなりの読書家だった おがた (@xtetsuji) です。

今日、本当に久々にジュンク堂書店池袋本店に行ってきました。言わずと知れた日本最大級の売場面積を誇る大書店。

以前は大学が池袋のジュンク堂書店の近所にあったので、専門書(数学科だったので主に数学の専門書)を買いに毎週のように通っていましたが、社会人になってから足が遠のきつつありました。

特に忙しくなってから、一通り仕事での専門書(プログラマーになったので主にコンピュータ書籍)を買うと大体買い方が分かってきたので、ネットで流行をウォッチしてネット書店Amazonで買うという流れが定番になってきました。最近は娯楽でマンガを買ったり、コンピュータ系の雑誌を買ったりすることもありますが、自宅近くの小さめの街の書店で買うことが多いです。

どうして大書店から足が遠のいたか考えてみましたが

  • 自分の拠点から遠くなった
  • 大書店は人の集まるところにあるので、人混みが苦手な自分はそれを避けるようになった
  • 売り場が広いのでついつい歩きまわってみてしまって、結果疲れる

といった要因があるようです。ネット書店や街の書店にはこういうのは無い。

ただ、大書店ならではのメリットというのは確実にあるなぁとも思いました。

  • 品揃えが随一
  • 実際に手にとって見ることができる
  • 棚を俯瞰することができる
  • 新しい本との出会いが多い
  • 運動になる

ネット書店の手軽さを享受したい思いや、街の書店を大切にしたい思いもありますが、たまには大書店に行ってみるのも悪くないですね。新しい本との出会いが多くて、金や読書時間がいくらあっても足りないという新たな悩みも発生しますが…;。

今日購入した書籍は以下。

今回購入した書籍 - 2012年12月

今回はコンピュータ書籍フロア(5階)と、理工学書フロア(6階)を回ってきました。本当は数学書を買うつもりは無く(自宅をまさぐれば、学生時代の数学書はいくらでも出てくるから)、たんに2010年に改訂版が出た「解析概論」の中身を見てこようと思っただけでしたが、「そういえば解析学ばっかりやっていて、ガロア理論は学生時代からさっぱり分かっていないなぁ」と思って一冊買ってきました。表紙はヌルそうな感じですが、中身はしっかり書かれていたので、これをチョイスしてみました。数学書は本当に数が多い。コンピュータ書籍よりもずっと数が多くて、しかもページ数の割に値段も高くて、自分の一冊を見つけるのは本当に苦労します。学生時代は書籍を買うためにバイトをしていたくらいです。

解析概論の改訂版は、中身が本当に綺麗に組版されていて、本当に買う直前まで行きましたが、金がない事と、荷物が重くなること、第3訂を持っている事を考えて、今回は買いたい気持ちをグッと堪えました。

過去の改訂版を持っているから買わなかったといいつつ、「LaTeX2e美文書作成入門」(通称:奥村本)は買ってしまいました。というか、この書籍は学生時代は初版から版が変わる毎に買っていたくらいのLaTeXマニアでした。最近はLaTeXからはすっかり離れてしまっていましたが、MathJaxをいじりはじめたり、仕事の文書作成でもLaTeXを利用してみようかと思い始めたこともあり、最近のLaTeX事情を知るために購入してみました。

「Webサービスの作り方」は今話題のコンピュータ書籍です。Amazonで買おうかと思いつつ思いとどまっていたのですが、店頭に並んでいるのを見てつい買ってみました。

オライリーの書籍も買おうかと思いましたが、池袋ジュンク堂書店ではまだ「2012年秋のオライリーセレクションフェア」が始まっていないようだったので、購入を控えました。良書とネットで散々話題になっている「リーダブルコード」や、Haskellの書籍「Real World Haskell」など以前から興味があった書籍を手にとって買う気まんまんだったのですが、そんなわけで次回へ見送ることに。

オライリーのフェアについては店員さんに聞いて、開始したら電話してもらうことになったので、そうしたらまた足を運びたいと思います。

久々に行ってみた大書店はとても良くて知らない書籍との出会いも結構あったので、Amazon等のネット書店や街の小さな書店と使い分けて、これからも億劫がらずたまには足を運ぼうと思いました。

電子書籍が流行っていますが、紙の書籍もいいものです。ただ、東京の狭い自宅では書籍の保管スペースが…;。もう既に部屋には積み本タワーがいくつも…;。何事もトレードオフなのかもしれませんが、難しい問題ですね。

FacebookとTwitterの連携に対する一つの考え

こんにちは、最近はTwitterで開放的に発言しているおがた (@xtetsuji) です。

ネットを検索していると「TwitterとFacebookを連携すべきか」「Twitterの投稿をFacebookに流すべきか」「Facebookの投稿をTwitterに流すべきか」という疑問が散見されました。私もどうするのがいいのかと思っていたので、興味深く読みあさってみましたが、後述の理由によりあまり参考になりませんでした。

この場合、「すべきです」という「主張」は少なくて、そういう人は主張するまでもなく「やり方」を書いて終わりにする人が多いようです。2012年11月現在であれば、https://twitter.com/settings/profile にアクセスしてTwitter社が提供するTwitter→Facebookの連携投稿が設定できます。Facebook→Twitterの連携投稿も https://apps.facebook.com/twitter/ 等でできるんじゃないでしょうか、以上、って感じです。すべきメリットとかの主張は無し。あらら。

一方、「すべきではない」という主張をする人も一定数いて、特にFacebookに思い入れのある方の一部がそういう主張をしている事が多いようです。ただ、理由が論理的でないところが笑いどころで、「TwitterとFacebookは空気感が違うからです!!!!!!」なんてキリッと言ってしまうところが意味不明。空気感って何だ?文字数の違い?こういう回答をしている人は大抵「Facebook◯◯の会」「SNS◯◯の会」といった肩書きを名乗っているのも面白かったです。思い入れ強いんだね。

…;とは言っても、私のTwitter TL、Facebookニュースフィード、両方じっくり見ていても、そんな空気感の違いがあるようには思えない。Twitterでも承前承前を繰り返して140文字をはるかに越える議論を展開した挙句Togetterでまとめられるケースもあったり、比較的長文が投稿できるFacebookでも一言二言しか投稿しない人がいたり、投稿内容や投稿文字数が醸し出している空気感という違いは無いように感じます。Twitterはエコシステムが発達しているので、画像を添付したりも擬似的にできますし、その点の機能についてはFacebookと大差ない。

まぁ、Twitterは不幸自慢、Facebookはリア充自慢が蔓延している傾向といった違いはありますが、リア充自慢はSNSの歴史が始まってからの伝統みたいなものがありますから。Twitter社はTwitterのことをSNSではなく「マイクロブログ」と読んでSNSではないと否定しているわけで、私もそれに賛同する派です。

ただ、TwitterにはRTがあったり、Facebookには「いいね!」やシェアがあったり、両者には機能的に違うものがあるのは確かです。同じTwitterでも、ウェブで見るのと各種クライアントソフトで見る場合では風景が違うように見えるのは気のせいではないでしょう(Twitter社は現在、Display Requirementsを開発者に強要する事でその違いを排除しようとしているようですが)。

ではどうするべきか、考えてみました。

Twitter→Facebook連携の場合

「Twitter→Facebook連携」と仮に名づけてみましたが、Twitterの特定のアカウントに投稿した内容をFacebookのウォールやページに投稿することです。

この機能はTwitter社が提供していて、2012年11月現在 https://twitter.com/settings/profile にアクセスすればすぐに設定することができます。Facebookでもサードパーティが作った機能もあるけど、たぶん似たり寄ったりだったりTwitter社のDisplay Requirementsで排除されるかもしれなかったり、流動的なので、もしやるのであったらTwitter社公式の機能を使ったほうがいいんじゃないかな、というのが私の考え。

ただ、この機能はTwitter社公式(?)の機能にも関わらず、連投したツイートを本当によくこぼす。後述の議論にもありますが、これでは色々と使えない。

「ところで、Twitter→Facebook連携はすべきなの?すべきでないの?」の私なりの答えをしていませんでした。

私なりの回答をしますと「文脈を持ったツイートをFacebookにフィードするのはやめたほうがいいのではないか、それ以外はご自由にどうぞ」といった感じになるでしょうか。

では「文脈を持ったツイート」とは何かというと

  • 承前を繰り返して複数のツイートで140文字以上の発言をTwitterでする場合
  • 公式RTをした直後に、その公式RTをしたツイートについて言及する場合
  • 非公式RT
  • ハッシュタグを伴ったもの、特に実況、いわゆる「tsudaる」行為

等のこと。

先ほども挙げた通り、Twitter→Facebook連携は、よくツイートをこぼします。例えば A B C Dとツイートを連投した場合、B をこぼすことは結構あります。また、Facebookの恣意的なエッジランクにより、他者のFacebookニュースフィードでは、A B C D の順で表示されるとは限らないという点もポイントです(その人のウォールに行けば順序そのものが見られますが、そこまでする人が一体どれくらいいるでしょうか)。最悪、「Bをこぼされる→FacebookのエッジランクによってニュースフィードからCが重要でないと見なされ表示されない→時系列無視されて D A の順で表示される」といった無茶苦茶なことがこのシステムでは起こりえます

この場合「文脈を持たないツイート」つまり1ツイート完結の話題であれば何の問題もありません。こぼされても、エッジランクで淘汰されても他に影響ありません。ただ、そのツイートが文脈を持っていた場合、他のツイートへのフォローや他のツイートからの参照となっていた場合、時と場合によってはFacebookのニュースフィード上で意味不明となる事があります。

特に上記の現象は連投によって起こる事が多く、実況(tsudaる)行為をする人は、普段Twitter→Facebook連携をしていても、実況時には一時的にオフにするくらいしたほうがいいと思います。他者のニュースフィードを埋めて迷惑をかけるからではなく、文脈無視の無茶苦茶な時系列での情報連投になるかもしれないからです。

RTの話では、公式RTは、たぶん標準のTwitter→Facebook連携ではフィードされないはずです。それなのに「さっきのRT…;」というツイートがFacebookにフィードされても意味不明であることは確かでしょう。非公式RTも文脈を持っていて、Twitterの世界の人はそれを追いやすいかもしれませんが、Facebookの世界に閉じこもっている人にとっては、単体でそれを切りだされても分からないといった問題をはらんでいます。RTを実際のツイート上の文脈で語るようなTwitterの使いかたをしている人には、少なくとも私はTwitter→Facebook連携はおすすめできません。私はそれほどFacebook愛がある人ではありませんが、Facebook愛のある人に嫌われるのはTwitterのRT文脈をFacebookに持ち込むことなんじゃないかと勝手に想像しています。

それ以外の一話完結のツイートの場合、Facebookにフィードされたおかげで、Facebookの返信で話題が盛り上がったり、良いこともあるんじゃないでしょうか。連携関係なく、Facebook内部での投稿の場合は、Facebookのコメント機能を利用することが多いので、それがいわゆるスレッドとして機能することで文脈を表現することができます。

Facebook→Twitter連携の場合

今度は逆のケース、Facebookのウォールに投稿した内容を、Twitterの特定のアカウントでツイートする内容です。

これに関しての私なりの回答をしますと「自分のウォールを公開設定にしている人、そうでない人は投稿時の公開範囲設定を理解した人なら問題無さそう。ただ、140文字を越えるポストを繰り返すとTwitterから読むときにリンクを踏むのが相当面倒くさいと思われる」でしょうか。

なんか複雑になってしまいましたが、これの否定形をしているFacebook→Twitter連携のツイートの見え方を考えると良さそうです。

まずは自分のウォールを公開設定にしていない人は、140文字で収まらない長文投稿や、画像等の添付がある投稿は “fb.me” URL を伴ったツイートとして投稿されます。この先にアクセスすれば投稿内容を見ることができるからTwitterにツイートしても問題無いと思われる人もいるかもしれませんが、私はこれが面倒でなりません。たとえブラウザでFacebookにログインしている状態の人でも、iPhone/Android等のスマートフォンではTwitter専用クライアントを使っているケースがあります。そういう場合、URLクリックをアプリ内ブラウザで開こうとするわけです。そこで自分のFacebookウォールを公開設定にしていない人は「Facebookにログインしないと見られないよ」というページを見ることになるわけです。これは面倒臭い。Twitterのオープンな世界と相容れないと感じます。

Facebook→Twitter連携をしている人でも、普段は「友達のみ」の公開範囲で投稿している人はTwitterへのフィードは発生しないはずです。そういう人はFacebookの「公開」で投稿した場合にのみTwitterへのフィードが発生することが分かっているので、そういうときはTwitter向きのコンパクトな発言をしようと理解するクッションが生まれるはずです(と期待しています)。「友達のみ」にはじっくりとFacebookで長文を語り、世間に「公開」する発言はボソッと一言であれば、Facebook→Twitter連携の親和性が生かされることになるでしょう。

その他のアプリとのFacebookやTwitterの連携の場合は?

FacebookやTwitterは事実上の標準となったことは異論がないと思います。

その他のアプリとのFacebookやTwitterの連携はどうすると良いでしょうか。この場合、2通りの大別をしてみましょう。

  • SNSやマイクロブログ
  • それ以外

SNSやマイクロブログというのは、例えばmixiボイス等のことですね。この場合、mixiボイス→Twitterという連携が考えられます(逆は通常の方法ではできない)。この場合も文脈の議論を持ち出せばいいと思います。mixiボイスならmixiの世界の文脈をTwitterに持ち出したとして、Twitterのみの世界の人に通じるかという思考。mixiボイスで一話完結したボイスをTwitterにフィードするのは何の問題もないと思います。{その他のSNSやマイクロブログ}→Facebookのような連携も同様でしょう。

それ以外のアプリも、TwitterやFacebookへの連携投稿をサポートしているものはたくさんあります。例えばInstagramやFoursquare等。Instagramなどは「写真SNS」などとSNSに強引にくくられるケースもありますが、「いわゆるSNS」と、何らかのキー(Instagramであれば写真)を軸としたゆるいコミュニケーションサイトは別に考えたいところです。

こういうサイトの場合は「一話完結」している場合がほとんどなので、InstagramでTwitterやFacebookに写真投稿、FoursquareでTwitterやFacebookに位置情報投稿というのは一つの話題として良い活用法だと思います。ただ、なぜかはよく分かりませんが、私のTLでは #nowplaying (今聴いている曲) は嫌われる傾向にあるようです。この部分は、通常の投稿同様、何事も限度があって、つまらない写真をInstagramで投稿フィードし続けたり、どうでもいい位置情報をFoursquareで投稿フィードし続けたりしたら、まぁ私でもウザイなぁと思いますね。私はFoursquareのヘビーユーザですが、比較的人の興味をひくと思われる場所のみフィードして、バス停や鉄道駅などへのチェックインはフィードしないようにしています。

じゃぁ、あなたは今どうしているの?

以前はTwitter→Facebook連携をしていましたが、前述の「こぼす」問題、あと私があまりFacebookで好まれるような「リア充投稿」をしないので「ちょっと馴染まないなぁ」ということで、現在は連携を切っています

ただ、Facebook世界の人たちの興味を引くような一話完結のツイートは、別途手作業でFacebookにもクロスポスト(?)するようにしています。私の場合は、Twitterクライアント「夜フクロウ」「Tweetbot for iOS」に投稿するときにツイートをコピーしておいて、Facebookにも合うかなと思った投稿を、OS X / iOS 標準の Facebook 投稿機能でペーストして投稿するというスタイルをとっています。

そういうのが面倒な人の場合、HootSuite等は標準でクロスポストをサポートしているので、そういうクライアントを使うのがおすすめです。私の場合は、Twitterクライアントはユーザストリーム対応じゃないとというこだわりがあるので、夜フクロウやTweetbotを使っているだけに過ぎません。

Instagram、Foursquare等のサイトの投稿は選別しつつTwitterとFacebookにフィードしています。前述の通り、バス停や鉄道駅などのFoursquareチェックインは除きますが、大体はフィードしていますね。その他のアプリについても、だいたいそんな感じ。ただ、ハッシュタグ付きポスト等、Twitterの文脈を強く持っているInstagramやFoursquareの投稿やチェックインの場合はFacebookには投稿しない、といったこともします。

Twitter→FacebookもしくはFacebook→Twitterという連携をしている場合、他のアプリからTwitterとFacebookに同時投稿をした場合に、どちらかに多重投稿をしてしまう可能性があるのもデメリットではあります。私がTwitter→Facebook連携を切った一つの理由でもあります。Facebookのニュースフィードで「それは情弱の所業」と断罪していた人がいたのもキッカケでした。まぁ、Facebookのエッジランクに期待とはいえ、同じ内容の投稿が複数流れてきて気持ちいい人はあまりいないでしょうね。

「TwitterがRSSを殺した」という言葉もあるようですが、ブログの投稿などもTwitterとFacebookに自動ポストするようにしています。私の場合は2012年11月現在Posterousというブログサービスを使っていますが、現在の大抵のブログサービスにはTwitterやFacebookへの更新通知機能は存在するでしょう。そういう点では、RSS/Atomなどのフィードリーダーを知らなかった人も、半リアルタイムで情報をプッシュできるTwitter/Facebookは新しい時代のフィードリーダーといっても過言ではないのかもしれません。

Google+はどうですか?他はどうですか?

Google+も使ってみたいのですが、久々に行ってみたら見事に廃墟になっていて、退散してきました。TwitterのEvil化(API改訂など)、Facebookの独占などが騒がれますが、現状Google+はそもそも書き込みAPIも持たず、それゆえエコシステムも育たないので、そこが解決されない限り使い勝手は悪いよなぁというのが印象です。ウェブの作り込みは見事なんですけどね。

Google+の投稿読み込みAPIは存在するので、Google+を起点としてTwitterやFacebookへフィードするという使い方もあるようです。

Google+の最近は、ハングアウトなど、TwitterやFacebookよりもミーティングや議論に適した機能などがあるので、一度は使ってみたいものですが、人が集まらない限りはどうしようもないなという感想です。

TwitterやFacebookがEvil化しようと不穏な動きをしようと、多少のことでは現状は揺るがないでしょう。3年先はどうか分かりませんが、少なくともここ1年2年はそうであると言えます。プロプライエタリなシステムが嫌いだと公言している人もTwitterやFacebookを(仕方なく?)使っている時代です。SNSは言うにおよばず、Twitterが属するマイクロブログというジャンルも乱立の時代を経て淘汰され、今後はせいぜい「特化型」が細々と生き残るのではないでしょうか。

「使い分け」なんて考える必要無いんじゃない?

全てに平等に情報をフィードして、全てを平等に使うというのももちろんアリかと思います。この記事では「…;すべし」といった強制はしていませんので、この記事が何かの参考になれば幸いです。

はてなブログでMathJaxを使う

こんにちは、ずいぶん昔に数学科で数学を勉強していた おがた (@xtetsuji) です。

2014年3月5日追記: 2014年3月現在、はてなブログはhead要素中に任意の要素を差し込めるようになっています。ダッシュボードからブログを選択して、設定→詳細設定→headに要素を追加、にMathJaxのタグを追加してやるだけで良いです。

はてなブログの設定でMathJaxを全域で有効にする

というわけで以下は古い情報です。

………

さる2012年11月7日はてなブログが1周年だそうで、当時作ったっきり何も書いていなかったはてなブログ ogata.hatenablog.com を思い出しました。「とりあえずサブドメインスクワッティングで ogata 取れるかなー」と思ったら取れちゃった感じ。普段は日本中のオガタさんやテツジさんに負けているのに、たまたまでした。

このメインブログ(?)は2012年11月現在Posterousで運用させてもらっている(色々細かいところが気に食わないので今後変えるかもしれない)のですが、何か別の使い方ができないかなーって考えて、はてなブログのほうは数学とMathJaxの実験場にしてみるかと、数学の記事をいくつか書いてみました。

MathJaxとは、LaTeXやMathMLの記法で数式が書けるJavaScriptライブラリ。Ajaxでいろいろやってくれるスグレモノ。この分野だと、昔はLaTeX記法をクエリ引数に渡して画像化してくれるmimeTeXなんてのものがあって、はてなダイアリー(ブログじゃない古いほう)でも対応しているようだけど、なんとなくMathJaxのほうが手元で実験して良かったなと思った。

理由:

  • mimeTeXは img 要素の src 属性の中に数式情報が入っちゃうけど、MathJax は HTML のソースコードの中に LaTeX 記法がそのまま見えるので、再利用性はさることながら、アクセシビリティという観点からも好ましい。
  • MathJaxが出力する数式のフォントクォリティが意外に良かった。mimeTeXの出力はアンチエイリアスされていないガタガタの線画数式GIF(?)って感じで、Web 2.0 から数年経っているのにコレはないよって感じ。
  • メインブログではもう容易に試せない状態だった。既にPerlの記事がたくさんあって、HTML中に書かれたASCIIのドル記号が数式の区切りや特別な意味を記事全体で持つなんて、今さらできないですよね。
  • 新しいものを試してみたかった。

「アクセシビリティって何?」という方は、全盲や弱視の数学学習者や数学者を想定するといいかなと思います。そういう方に対しても、スクリーンリーダーでLaTeX記法が読みあげられれば意図が伝えられます。結構大事。実は私の学生時代のゼミの先輩も全盲でした。

MathJax では LaTeX のようにASCIIのドル記号で囲む事でインライン数式を表現できるのですが、Perlの記事がたくさんある状態でそれをやったら…。インライン数式とブロック(ディスプレイ)数式の始点と終点の記号をMathJaxの設定で選べはするのですが、なんか面倒だし最初から複雑な事はやらないでおこうということで避けました。

MathJax は LaTeX 記法だけでなく MathML 記法も解釈するらしいですが、手書きで MathML を書く人がいるとは思えないので説明は省略します。

といった前段を済ませたところで、はてなブログに MathJax を埋め込む方法を解説します

MathJax は自分のサーバに設置することもできますが、MathJaxのCDNがあるのでそれをそのまま利用させていただきます

まずはてなブログを一つ作っておく必要があります。既に作ってあるはてなブログで記事を新規作成するわけですが「見たまま編集」から「HTML編集」に切り替えて、冒頭に以下のHTMLを入れます

<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript">// <![CDATA[
MathJax.Hub.Config({
  tex2jax: {
    inlineMath: [['$','$'], ['(',')']],
    displayMath: [['[',']']]
  }
});
// ]]></script>

MathJax公式サイトのCDN(Contents Delivery Network)を使って読み込みます。本当はhead要素内に書けと指示されているものなのですが、それができないのでここで書きます。

はてなブログのバグのようなのですが、上記のHTMLを空白の「HTML編集」画面にコピペするとブラウザがフリーズするようです。もしフリーズが発生するようであれば、ダミーで何か文字を書いておいてコピペするとうまくいくと思います。

複数の記事を作る場合も、都度同じscript要素のHTML断片を冒頭に入れましょう。その記事がこのHTML断片を含んだ他の記事と一緒に表示されるかは分かりません。一意URL(Permalink)から特定記事だけ表示されるかもしれません。また、重複してこれが書かれていても無駄なリクエストは発生しないはずです (HTTP的に言えば、重複してsrc要素へGETをしても重複リクエストへはCDNが304 Not Modifiedを返すか、ブラウザが賢ければJavaScriptファイルをキャッシュするでしょう)。ただ MathJax.Hub.Config() の設定値はブログ全体で統一しておいたほうが良いでしょう。

設定値は色々ありますので、興味があればMathJax公式サイトを参照ください。設定項目のページも参照。

上記の設定は

  • インライン数式の始まりと終わりをASCIIドル記号 “$”、または “(” と “)” の組で宣言
  • ブロック(ディスプレイ)数式の始まりと終わりを “[” と “]” の組で宣言

という内容です。JavaScript のシングルクォート中の “” 記号 (0x5C、円マークかバックスラッシュ記号) の扱いのため、それ自体の表現は と二重で書く必要があります。

サンプルは「OGATA Tetsuji の数学ブログ」 ogata.hatenablog.com で見られますので(2012年11月現在)、HTMLソースを表示させて雰囲気を感じてみてください。

改めて(というかほぼ初めて)触ったはてなブログもそこそこの使い勝手でしたが、MathJaxいいですよー。これほどまでにきれいな数式記号が再現されるとは…。なんか自分、数学好きというか記号好きなのかもしれない。最近は当時勉強した数学を思い出したりしているので、MathJax/LaTeXの体験も兼ねてぼちぼち更新していこうと思います。

「モダンmod_perl入門」のこれまでとこれから #yapcasia

こんにちは、先日YAPCトークデビューした おがた (@xtetsuji) です。

YAPC::Asia Tokyo 2012 に行ってきた感想については以前のエントリでたっぷり書いたので、ここでは、YAPCで初トークした「モダンmod_perl入門」の詳細や、これにいたる経緯、そしてこれからの計画について書いてみようと思います。

トークのフォロー

まずはトークを聴講しにきてくださった方々、ありがとうございます

話したい事がいっぱいあって、20分の枠に収めるのにトーク直前まで四苦八苦していたのですが、時間超過などのカッコ悪いことにならず、何とかうまく話せたかなと自分では思っています。

トーク内容の一部フォロー

SlideShareにアップロードする段階でトークのスライドを見返していて、ちょっと説明不足だったかなというところがあったので、ここで補足させていただきます。

mod_rewriteのPerlTransHandlerでのリファクタリングの話で、「Directory Contextに書かれたmod_rewriteの場合、別途ケアが必要になる場合がある」といった内容に触れました。Directory Context の例として <Location> と .htaccess をスライドで例示していますが、まさに Directory Context の代表と言える <Directory> に触れていないのは、単に忘れていただけです。

実際、mod_rewriteは「URLを書き換える」処理を行っているわけですが、PerlTransHandlerに対応するApacheフェーズでは、まだURLから実ディレクトリへのマッピング処理が完了していません。Apache設定のルートや<VirtualHost>直下に書かれたmod_rewriteの場合は、まだURLから実ディレクトリへのマッピング処理が行われない段階、つまりPerlTransHandlerと同じフェーズで処理されるので問題がないのですが、Directory Contextでは既にURLから実ディレクトリの解決が済んでいるわけです。mod_rewriteは、この部分をうまく解決するために内部的に多少面倒な事を行っています。このようなこともあり、mod_rewrite では $r (Apacheモジュールでいえば request_rec 構造体 r) が持っている uri 情報を実際は書き換えず、書き換えて穏当に実ディレクトリを解決したように見せかける処理を PerlFixupHandler と同等の場所(リクエスト処理フェーズの直前)で行っています。通常は問題にならないと思いますが、レスポンスフェーズで動作するプログラム(CGI, PHP, mod_perl Registryスクリプト等)がURLをつぶさに見る場合に状況によっては mod_rewrite → mod_perl PerlTransHandler の単純な書き換えで同等の動作が保証されない場合もあります。この辺りは mod_rewrite が見事とも言える複雑な処理をしている部分が大きいです。皮肉ですが、mod_rewrite 設定がすぐに魔窟になる所以でもあるでしょう。

PHPとの連携については、PHP以外の言語でもレスポンスフェーズで入出力を処理するものについては同様の事ができるはずですが、自信がなかったので私が経験したPHPとの連携に限ったお話とさせていただきました。PHPがレスポンスフェーズ以外でほとんど仕事をしないポリシーであることはPHPのコア開発者が述べていることでもあります(これはApache以外へのPHPの移植性を考えてのことでしょう)。その明瞭さゆえ、レスポンスフェーズでPHPが動作する場合、他のフェーズでmod_perlを投入することで干渉が起こらないと言っていいのです。

最近はdisられ役になったり、PHPプログラマ自身がそれを自嘲気味にネタにする時代ですが、私はPHPが得意な人・Perlが得意な人で協力しながら開発をする姿も良いと思っていますし、mod_perlがPHPとPerlを繋ぐ糊(glue)となって欲しいという思いもあります。誤解は無いとは思っていますが、少なくとも私のトークではPHPをdisったりする意図はありません。だからといって、多種多彩なプログラム言語で書かれたプログラムが乱立している状況だと保守性もへったくれもないので、必要性に応じて仕事では社内のプログラム言語はある程度統一しておいたほうがいいかなとは思います。

ただ…、過去にPHPで絡ませて頂いた仕事の半分くらいは痛い目に会っているんですよね。これは私が、スキルの低いPHP開発者とたまたま一緒に仕事をせざるを得なかっただけの話かもしれませんが…。しかしそのおかげで、PHPの勉強をサボろうという猛烈な熱意がmod_perl力をさらに向上させたとも言えるでしょう。もちろん、気持よく一緒に仕事をさせていただいたPHPプログラマの方も多くいらっしゃって、勉強させていただいたことも多くありました。その節は本当に助かったと同時に、良質なコードからPHPの勉強も自然とさせていただきました。

認証・許可処理は名前通り PerlAuthenHnadler・PerlAuthzHandler に書くべきでしたが、例示したコンセプト(スケルトン)ハンドラは PerlAccessHandler での設定でした。これには言い訳があって、Authen/Authzは癖があってApacheコアのRequireディレクティブなどと組み合わせないといけないのが面倒だっただけです。本来、PerlAccessHandlerはアクセス制御処理(IPアドレスでのアクセス制限等)を入れるフェーズですが、認証・許可処理を手軽にやるときはPerlAccessHandlerに書いてしまえというのは単なる私の怠け癖です。実際、アクセス制御処理を行う場合、単純なIPアドレス処理のようにヘッダを見ないのであれば、遥か前 PerlHeaderParserHandler のさらに以前である PerlPostReadRequestHandler でやってしまったほうが効率的なのです(多くの処理フェーズを省けるわけですから)。

Perlのスレッド(ithreads)をApacheのworker MPMと合わせて使うことでprefork MPMでは実現できない変数共有といったお話もしました。ただ、スライドでworker MPMはスレッドとプロセスのハイブリッドであると言っているのに変数共有できるのはなぜ?という疑問が湧いた方もいらっしゃったかと思います。これは完全に設定の説明を失念していて、worker MPMで生成されるプロセスを1つにするという設定が必要です(1プロセス・マルチスレッドの状態にする)。詳しい説明はここでは割愛しますが、ざっくりと StartServers、ServerLimit、PerlInterpStart、PerlInterpMax の各ディレクティブの設定値を 1 にしておけば良いはずです。スレッド設定については、MinSpareThreads、MaxSpareThreads、ThreadsPerChild の各種設定値を用途と環境によって適宜調整下さい。

ただ、トークでも何度も繰り返していましたが、現状Perlのスレッド(ithreads)は決して使用をすすめられるものではありません。諸事情あって私はこれを商用環境に投入することになりましたが、原則的に勧められることでは無いと思います。ただ、prefork MPM 以外、worker MPMがあまり陽の目を見ないことと、mod_perlの一つの可能性を知っていただきたかったので、今回トークのネタにしました。

他のmod_{lang}との比較をしようとは以前から考えていたのですが、検索すればあらゆるプログラム言語のmod_{lang}が出てくる状態はカオスでした。もちろん「コンセプトで実装してみました」で後は放置されて実用段階に無いものがほとんどなのですが、mod_ruby や mod_python についてはその名前から今も現役(現在のmod_perlと同等の実用性を持ち、保守がなされている)と誤解している方がまだいるのではないかと思ったので、念押しで解説させていただきました。

mod_ruby は、まだRails以前のRubyのエコシステムがそれほど整備されていなかった当時、Perlに追いつけと主にRegistryスクリプトに対応するものができるようにと mod_perl (mod_perl1) と対応したものを作ったものと私は理解しています。mod_ruby は Apache2 には少なくとも正式には対応されていないはずです。Rails以後は、Lighttpd + FastCGI が定石になって、その後 Rack 方面へと進んだと私は理解しています。

Apacheを拡張するものとしての mod_perl (mod_perl2) に対応するものは、現時点では mod_mruby でしょう。組み込み用途の mruby が今年2012年4月に登場してすぐに登場した mod_mruby ですが、現在も作者の @matsumotory さん (まつもとりょうすけさん) によって精力的に開発が進められています。「ApacheをC以外の他の言語で拡張する」という用途がmod_mrubyで見直され、それがmod_perlの「再発見」にもつながってほしいという期待を持っています。

ベンチマーク関係も不得意な私なのですが、今回は @matsumotory さんの結果を許可を得たうえでスライドに転載してご紹介させていただきました。mod_perlでの追加ベンチマークの補足情報もいただけて、本当に助かりました。会場にはRubyistの方もいらっしゃると思ったので「RubyでApacheやるならmod_mrubyもいいよ」とも伝えたかったのです。相当な機能と歴史を誇るmod_perlですが、現在進行形で開発されているmod_mrubyもmod_perlに追いつけ追い越せで開発されています。mod_perlの開発は今も現在進行形で行われていますが、mod_mrubyのような存在がmod_perl開発への良い刺激になれば良いなと願ってやみません。

20分で膨大なmod_perlのノウハウを語るには足りないと思ったので、アフターストーリーとして今後の展望を述べました。Twitter アカウント @mod_perl_info では時々mod_perlで困っている人をウォッチしてその解決策をご紹介したりしていますが、ウェブサイト modperl.info のほうは私がなかなか取り掛かれずに未完成となっています。作り途中でもいいので、今年中に何とか成果を小出しにでもしていきたいと考えています。ご声援、よろしくお願いします。

mod_perl関連の情報は他のmod_{lang}に比べて豊富ではあるのですが、日本語使用者にとって、やはり英語の情報が大多数なのがネックで、その辺りを解消していきたいと考えています。mod_perl関連のCPANモジュールの翻訳についてはmodperl.infoに閉じ込めずに、perldoc.jpへ積極的にコントリビュートしていきたいと考えてはいますが、まだ計画段階です。私の英語力の足りなさも目下の課題です。

あとどうでもいいことですが、古いネタ「キモーイガールズ」を入れたのは、いつか私が大舞台でこのネタをやってみたかっただけです。私がmod_perlをdisるはずもなく、いわば自虐ネタですね。トークの数時間前にホールで座っていた見知らぬ隣の人が、私が隣にいるとも知らず、私のトークについて「mod_perlの追いやられ感は半端ない」「mod_perlは風前の灯火」と評論してくださった事への皮肉です。もちろん現在それは実際の事であって、怒ったりはしてませんよ。入れる予定は無かったのですが、その事もあって勢いで数時間前にはてなセリフで作って入れちゃいました。はてなラボのサービス、便利!

会場での質問へのフォロー

トーク後の質問タイムで幾つか質問があったのですが、満足に答えられなかったかなという思いがあるので、ここで質問に対する少し詳細なフォローをさせていただきます

まず消費メモリやコストの問題

消費メモリに関しては、初期にかかる量は十分把握できるわけですが、その後mod_perl/Apacheが「太っていく」問題に関して、会場では Apache::SizeLimit / Apache2::SizeLimit を使った解決策を紹介しました。それは、規定以上のメモリを使用した子プロセスが MaxRequestPerlChild の指定に関わらず自発的に終了するという、言わば消極的な解決策ですが、「太っていく」事への対策はこのような対症療法しかないと思います(問題のプロセスを取り出して何らかの操作で「痩せさせる」事ができるでしょうか)。なぜ太っていくのかといえば、mod_perlの処理の中で大きなファイルなどメモリを大きく使用する処理の後で思惑通りの量のメモリを開放してくれなかったり、使っているPerlのバージョン自身に未知および既知のメモリリークのバグがあったり等、様々です。このような問題はスクリプトのコンパイル結果を都度捨てているPHP(mod_php)自身にも見られる問題であり、Apache固有の子プロセス終了関数apache_child_terminateも用意されているくらいです。

また上述のような対症療法以外に、初期にかかる消費メモリを抑える事もご紹介しました。Apacheの親プロセスの起動時に PerlModule ディレクティブで Encode や DBI 等のよく使用するモジュールをプリロードしておくことで、Apacheの親プロセスを子としてforkするときにCopy on Write(CoW)効果が働くことを利用して初期のメモリコストを抑えることができます。この周辺については、Perlの永続プロセスをマルチプロセスで生成するものであれば同様に考えられる問題と解決のようで、FastCGI等でも似たような感じのようです(この辺りは、例えば書籍「Mobageを支える技術」でも軽く触れられていました)。

初期メモリを抑えるためにCoWを利用することのトレードオフは、サーバの初期起動時間が長くなる事でしょうか。あと、あまり素性も分からないモジュールを親でロードしないほうが安定性の面で良いかなとは思います。

また、mod_perlのテスト環境についても質問をいただきました。

実はテスト駆動開発は私の完全に不慣れな分野でして、回答では「mod_perl自身には触れていないのに、なぜかmod_perlのテストについては『モダンPerl入門』にしこたま書いてある」なんて答えて少し笑いをいただきましたが、私の知識はそれくらいです。

テスト駆動開発全盛の昨今、この部分については皆さんも興味があるだろうと思ってスライドを用意はしたのですが、時間の都合で割愛させていただきました。サービススライドに押しやっているので、もし良かったらそちらをご覧いただけると幸いです。

会場では Apache2::FakeRequest を使った $r のフェイクオブジェクトを使うという方法をお答えしましたが、(私の不慣れのせいかもしれませんがこれは)手間はかかります。後は Apache::Test による方法などがありますが、あまり私が語れる部分は少ないのが恐縮です。この部分については今後も勉強していきたいと思います。

書籍「Practical mod_perl」にも、mod_perl1時代の情報でかつ洋書ですが、各種テストやデバッガを交えた開発手法が乗っています。こちらも興味深いので、もっと知りたい方におすすめです。「Practical mod_perl」はCreative Commonsライセンスで公開されているので、書籍が無くてもサイトから読むことが可能です。

ここまでの経緯

個人的なお話で恐縮ですが、このトークに至るまでの私の紆余曲折です。

2003年にプログラムも分からない自分を入れてくれた現在の会社。当時は学生時代に得たサーバ管理の知識で食いつなごうと思ったのですが、見事に素人知識を見透かされてかサーバは任せてもらえず、まずはテキスト処理・ログ処理からPerlを勉強することになりました。

2004年からPerlでのウェブ開発を任されるようになりましたが、当時は右も左も分からず、大変でした。mod_perlの事も言葉だけ聞くだけで、当時は「Perl CGIを速くするものだけどクセがあるから要注意」程度の理解をしていました。柱コンテンツはmod_perl1で動作していましたが、今振り返って見ると、当時はPerl CGIの高速化 (Apache::Registry) を目的とした使い方しかしていませんでした。

2005年から一人プログラマとして企画やデザイナの方々と小中規模のサイトを運営していくのですが、mod_perlの正体がつかめなかったので、私はPure CGI(Apache mod_cgi)でのPerlウェブ開発をしていました。ただ、この時からパフォーマンスを気にするようになって、柱コンテンツに使われているmod_perlを横から研究するようになりました。このころから隠れて(?)mod_perlを勉強するようになり、mod_perlはPerl CGIの高速化だけでなく、Apacheの拡張すらできるものだということを徐々に理解していきました。

これ以降の数年間は仕事の幅も広がり、後輩や一緒に働く外部の方も増え、自分がメインで担当する開発案件以外にも、PHPコンテンツの納品保守や、遊軍として他のPerlウェブ開発プロジェクトのサポートなども担当しました。その中で、それまで勉強してきたmod_perlの知識が色々なところで役に立ったのが印象的です。

数年前から、一緒に働く開発者の人数やプロジェクトの数が整理され、社内の柱コンテンツに戻ってきました。それまで得たmod_perlの見識を投入して、パフォーマンスチューニングや、mod_perlハンドラによる諸々の拡張や新規開発、mod_perl1からmod_perl2へのマイグレーション等、Registryスクリプト利用による高速化のみを目的に当初導入されたmod_perlの可能性を広げていっています。

せっかくこれだけ培ったmod_perlのノウハウを社内に閉じ込めておくのも良くないと考え、2011年からはHokkaido.pmでのトークをメインに、社外にもmod_perl情報をアウトプットしはじめました。今年2012年のYAPC::Asia Tokyo 2012での本トークは、それの集大成としたものです。

これからの計画

私はmod_perlも古くて新しい現役技術と考えてはいるのですが、残念ながら今の世の中的にニーズは少ないのが現状でしょう。私としても会社としても新しい技術を取り入れていく事が将来的なメリットであることは確かで、今後は Plack/PSGI ベースの WAF を積極的に勉強して取り入れていこうと考えています。今のところ、なんとなくMojolicious かなという気分です。少しずつ勉強中。

それでもせっかく得た mod_perl の知識をこのまま自分一人で抱えて枯らしてしまうのはもったいないと思い、今後はその知識を体系化してまとめて外に出していく作業をしていこうとしています。それがトークでも触れたアフターストーリーであり、Twitterアカウントやウェブサイトの開設の野望でもあります。

今回のYAPCのLTソンでもミートアップがありましたが、地域pmが盛んになってきたことは嬉しい限りです。もし地域pm等のPerlの集まりで「mod_perlについて聞きたい」という要望があれば、声をかけてくだされば時間やお金をやりくりしてぜひ訪問したいです(経費をいただいて呼ばれる身分ではありませんので、費用は自分でなんとかします)。

繰り返しになりますが、今回のYAPCでの「モダンmod_perl入門」は、私の数年間のmod_perl開発の集大成的な位置付けでトークしました。今後はmod_perl以外のジャンルにも視野を広げて、求められればmod_perlの事を語れる準備は怠らないものの、今後自発的に発表するものは、多くの皆さんの興味を引く別の話題ができればなと考えています。

今後とも、mod_perl を含めた Perl の世界で、皆さんのお役に立てるアウトプットをしていきたいと考えていますので、どうかよろしくお願いします。ここまでの長文、読んでいただきありがとうございました。

YAPC::Asia Tokyo 2012 に参加して、mod_perlネタで発表もしてきました #yapcasia

こんにちは、Perl大好き おがた (@xtetsuji) です。

簡単にまとめようと思ったのですが長文執筆癖が発動して、また熱く長く書いてしまいましたので、時間のない方は太字部分を中心に遠慮無く読み飛ばしてください

今年も行ってきました、プログラミング言語Perlの祭典「YAPC::Asia Tokyo 2012」(以下YAPC)。なんと今年は「モダンmod_perl入門」というタイトルでYAPC初トークまでさせていただきました。最初はこんな古風なネタで発表枠なんて頂けないと思っていましたが、結果的に発表枠を頂けて本当に感謝です。トークした雑感は後述。トーク内容の突っ込んだ詳細については、別のブログ記事として書こうと思います。

YAPCは2007年から毎年参加していますが、YAPCは年を重ねるごとに面白さが増しているイベントだなと感じます。それは自分が昨年からHokkaido.pmやHachioji.pmといった地域pmに参加し始めて知人が結構増えたことや、YAPCや大きなイベントへ参加慣れしたこともありますが、やはり牧さん(@lestrrat)、櫛井さん(@941)を始めとした、運営に携わる方々の努力の賜物だと思います。この場を借りて御礼を申し上げます。

勤務先でも昨年からYAPCの協賛スポンサーをさせていただくことになったのですが、櫛井さんには今年も遠路はるばる説明のために来社して頂いてありがたい限りです。前夜祭(もしかしたら懇親会かも)の時にも声をかけてくださって、その時にも色々お話をしたかったのですが、なにぶん忙しい方なので軽く話した程度。牧さんは「モダンPerl入門」という書籍を執筆された方で、今回勝手にこの名前をパクった「モダンmod_perl入門」なんてトークを応募した手前、前夜祭で真っ先に探してトーク採用のお礼と勝手にタイトルをパクったお詫び(?)をしました。運営等で忙しそうだったので、こちらも軽く挨拶をした程度でした。書籍「モダンPerl入門」には2009年の発売当初から本当にお世話になっているので、改訂版への淡い期待など、積もる想いで一杯です。

YAPCで初トークした

先ほども書きましたが今回、2007年から参加しているYAPC::Asiaで初めてトークしました。題名は「モダンmod_perl入門」。

2011年5月にスカイアーク勤務で Hokkaido.pm の主催である @onagatani さんと運命的な出会いをしたことがきっかけで、2011年7月に初めて踏み入れたHokkaido.pm#5(参加レポート)。初の地域pm参加と同時に、公での初の20分トークと、色々無茶をした第一歩でしたが、これがキッカケでこの後から勉強会への参加とトークを積極的に行っていくことが出来ました。2011年10月のYAPC::Asia Tokyo 2011」では Hokkaido.pm 組が多数YAPCの大舞台でトークしているのを見て「来年こそは」と心に秘めていた夢が、今年実現した格好です。

「やっぱりYAPCの大舞台だと緊張するかな」と思っていたのですが、1年半各所でトークの場数を踏んできただけあって、意外にもさほど緊張しませんでした。ただ、余裕を持って準備したスライドがいじってもいじっても20分枠に収まらないことで、当日までリハーサルをしたりスライドを削ったりサービススライド枠に押しやるセクションを選定したりといった作業が結構大変でした。とはいえ「ネタが出ない」に比べたら贅沢な悩みです。

「モダンmod_perl入門」の詳細については長くなりそうなので、後日別のブログ記事で書く予定です。

前夜祭

YAPCには2007年から行っているのですが、前夜祭に行ったのが昨年2011年が初めてで、それがとても面白かったので今年も行くことにしました。今年は上司と今年3月に入社した後輩も一緒です。

地下2階の一番広いホールに200人くらい集まったでしょうか。昨年同様トークは聴かず、久々に再会した元先輩や元後輩、Hokkaido.pmやHachioji.pmの方々とご挨拶をしたりしました。

YAPCクラスの大きな場所で初対面して深く知り合いに…;というのはなかなか難しいですが、どなたかのブログにも書いてあった通り、地域pmや他の中小規模の勉強会で会った人達やネット上で交友がある同士の「同窓会」としては非常に面白い場です。

噂通りの美味しい食事にお洒落な飲み物が揃っていて、昨年の前夜祭との違いにビックリしました。

1日目に聴講したトーク

聴講したトーク(敬称略)

15:35の枠は3本並行しているトーク全てが本当に聴講したくて、身体が3つに分裂すればいいのにとか混乱した挙句、午前中で疲れてしまったのと考えすぎて疲れてしまって、結局決められずLTthonを覗いたらとても笑わせてもらえて気分転換になりました。ちょうど、札幌 Hokkaido.pm からいらっしゃった @techno_neko さんが Hokkaido.pm Casual の宣伝と見せかけてスープカレーLTで大爆笑を取っていたとき。このトークは最終日に「初代ベストエルティニスト」に選ばれることになったLTでした。詳細はtechno_nekoさんのブログ記事が詳しいです。

聴講したトークの詳細は、上記リンクからスライドと動画を見ることができます。

遅刻してきたので、Perlの父Larry Wall氏のトークは途中からホールに入ったのですが、既に客席はいっぱい。後ろのほうの席からライブコーディング(もしくはコーディングの録画)を眺めていました。「あぁ、Perlの父も我々と同じようにシェルを使いエディタを使ってPerlを書くんだー」って親近感が湧いたり。Perl6の事は良く分かりませんでしたが、便利そうな構文が結構出てきたりして、「早くPerl6パブリックリリースしないかな」とか「Perl5.xxで構文導入してくれないかな」とか思って聴いていました。

ウェブ上での画像処理とかにも関わったりした経験から、pixivの裏側はどうなっているんだろうと興味を持って聴いていたのですが、mod_small_lightというApacheモジュールとは面白い。Apacheモジュールの積極活用事例は聴いていて興味深いです。nginxへの置き換えなんてことも触れられていて、ngx_small_lightを移植したとか、個人・会社ともに、そのパワフルさに脱帽です。

mixiの新入社員Masaaki Goshimaさんが新しいPerl5の実装系を作ったという話は当初から興味深くて聴講に行きました。まだ数値のみで文字列、特に正規表現周りの処理が未実装(に近い?)状態らしいので、今後の展開に期待。mod_gperlなんてApacheモジュールができたらいいですね。

りーお@DeNAさん(@riywo)のトークも聴講しました。日本人による英語のトークでしたが、いつか私も英語でトークしたい欲に駆られました。ヒアリングまわりで英語のトークについていくのが大変でしたが、スライドのデザインも群を抜いてカッコイイ。Hokkaido.pmでもお話をうかがっていたToryoの公開が待たれます。

Kenichi Ishigaki(@charsbar)さんのDBD::SQLiteのトークは、普段利用しているDBD::SQLiteにはこんなにも沢山の機能があって、こんなにも苦労があるのかといったことを知れた良いトークでした。Tim Bunce氏、Adam Kennedy氏といった神々も集結して石垣さんと英語で議論しているさまは、まさに遠巻きに「すごいなぁ」と思わされました。

その後、Tatsuro HisamoriさんのFreakOut!の裏側、Shunichiro Fujiwaraのベンチマークとプロファイリングといった話が続き、今年のYAPCはパフォーマンスをテーマにした年だなぁということを実感。FreakOut!での合言葉「古典的でも地道にやる」は響く言葉でした。またFujiswaraさんはISUCONでも優勝したほどのパフォーマンスまわりの著名な専門家。両者のトークを聴講してパフォーマンスへのさらなる意識を高めました。

その他、聴いていて印象深かったトークは全部。ハズレ無し。1日目も2日目もできれば全部のトークを聴きたいと思っていたくらいですから。個人的にはトークの並列数を減らして1週間くらいYAPCやりつづけてもいいんじゃないと思うくらい

1日目の懇親会

前夜祭の人数の比ではないくらいの人が集まって、食事も行列状態。すごかった。大群衆に揉まれるのが苦手な人間なので苦労はしましたが、前夜祭同様、いつも会わない方やTwitterやブログでのみ面識のある方との交流がメインでした。食事は早々になくなっちゃったし。

スカイアークの小林社長が会場入りして、乾杯の音頭を取ったのは印象的でした。やはり力強い方だなと。実はスカイアークの小林社長とは昨年の5月の初対面ぶりの再会。久々にお会いして道民トーク・十勝帯広トークで盛り上がりまくりました。楽しかった。その場の勢いで北海道つながりの飲み会を東京でやろうという話が実現してしまったくらい。

2007年からYAPCに参加していますが、今まで引っ込み思案で、Larry Wall氏が来日していても近寄れないでいたのですが、今年は大胆に行こうと、一緒に写真撮影をお願いして快諾していただけました。嬉しかった。

飲み物は潤沢にあったので飲みまくったし、疲れたし(もともと疲れやすい)、明日自分のトークあるしで、2次会等には参加せずに懇親会終了後はそのまま帰宅しました。

2日目に聴講したトーク

聴講したトーク(敬称略)

並行トークがなかった「Perl 今昔物語」は、豪華メンバーゆえ聴くべきか悩んだのですが、その時間にLTthonで「地域pm、勉強会、交流会 ミートアップ」をやっていて、悩んだ挙句「地域pm、勉強会、交流会 ミートアップ」のほうを聴きにいきました。自分が対外的な活動の起点となったのも地域pm(Hokkaido.pm)だったので、昨年くらいからアツい地域pmの現状を知っておきたいと思ったからです。結果的に北はHokkaido.pmから、南はOkinawa.pm(まだ開設準備中?)まで、各地域pm主催者が一堂に会してトークを交わす貴重な場となりました。LTthonの司会を務めていた@uzullaさんの引っ張り方も本当に上手い。会場は笑いが絶えませんでした。

2日目に @ytnobody さんと @typester さんの、CPANを主題とした話が連続でありました。聴いていると、「CPAN Authorになってみたいな」といった野望がふつふつと湧いてくるではありませんか。恩返ししたい!息をするようにモジュール書いてドキュメントで熱い想いをぶつけたい!両トーク、それぞれの側面で話が被っていなくて、両方聴講して熱意2倍。この熱が冷めないうちにPAUSE IDを取って、コンセプトで書いたmod_perlモジュールを成長させてどんどんコミットしていきたいと思ったのでした。

日本が誇る世界的ハッカー @miyagaawa さんのトークは、先日の LL Decade の基調講演で聴いた内容に近いものでした。「PythonやRubyから学ぶ事は多い」というのは、PSGIやPlackの誕生からも分かる通りです。LL Decade で miyagawa さんのトークを聴いた後、私も言語へのこだわりを減らして、他の言語から学べるものは学ぶという姿勢を持つようにしています。それは私のトークにも、mod_mrubyをmod_perlへ新たな刺激を与える良い存在と紹介したりといった部分に影響を与えています。

北海道が誇る高校生Perlハッカー @akiym さんは Skype API を使ったボット作成といった独自性のあるトークを披露。若いのに本当にすごい。この文章書いているオッサンがトークしはじめたのは30歳過ぎてからだよ…;。Hokkaido.pmでも毎回彼のトークは楽しみです。

正直自分の発表直前は、Room 2で給電しながら最後のスライド調整にまわろうとしていたのですが、ついついRoom 2 の話が面白いので聴き入ってしまいました。

Nozomi Mikamiさんのトークはタイトルが初心者枠で正直最初は期待していなかった(非常に失礼)のですが、中学生の頃からのプログラミングに対する強い熱意、そしてインターネットサービス企業(paperboy&co : ペパボ)にカスタマーサポート職で入った後にもその熱意が冷めず、業務外で社内の技術者に質問をしてPerl CGIで小さなブログサイトを完成させていくといった内容。どうしても男性中心になってしまう技術者界隈ですが、プログラミング初心者の女性が果敢に突き進むそのお話、その内に秘めた情熱に心打たれました。初心忘れるべからず。

Masahiro ChibaさんのTengのお話は、Tengのとても分かりやすい導入として参考になりました。といっても、この時間は私の発表の直前だったので、頭に入ってきた内容が少ないのですが、後でスライドを見返して良い資料だなと振り返り。会場にはTengの作者である @nekokak さんもいらっしゃって、発表者のChibaさんは緊張したかと思いますが、時々交わされる作者と発表者とのやりとりにライブ感を感じました。社内でも私に影響されて後輩が社内ツールでTengを使おうとしているので、そこでも良い資料になりそうです。

みんなLTがうまい

1日目のLT、2日目のLT、そして併設の会場でのLTthon。5分間の枠でどれだけ聴衆を楽しませるか。世間でもLTのノウハウがたまってきてはいますが、本当にみなさんLTがうまい。今回も @hiratara さんによる「Perlでおねえさんを救ったお話」や、女性による半ば下ネタかと思わせるような人生ネタ、スカイアークスポンサーセッションによる @onagatani さんコスプレ付きの北の国からネタ「帯広から、愛」等々、本当に笑わせていただきました。

聴講したトークと今年のYAPCのまとめ

今回は特に流行が無くて寂しいとか今後のPerlへの不安といったものも見聞きしたりしましたが、それだけPerl5やそのエコシステムが成熟してきた現れではないかと思います。それは他のLLも同様ではないでしょうか。@charsbar さんが、CPANコミット数がgemコミット数に抜かれつつあるといったLTをしましたが(カウント方法には異議もあるようですが)、今後の推移を見守りたいところです。仮にもPerlの先が暗いのであれば、今年のYAPCはこれだけ多数の協賛スポンサーも聴衆もスピーカーも集まる大規模カンファレンスにはならないでしょう。

逆に過去を振り返ると、Catalyst/DBIC/TT一色の年や、Moose一色の年などもありました。ただ私は各会場で「Moooooooooooooose!!」と叫んでいる光景を見て「ちょっと行き過ぎ、その流行を追っかけている人じゃないとついていけないよこれは…;」と若干辟易としていた側だったので、今年のような、ある種成熟してトーク内容も良い意味で様々なジャンルがあった今年のYAPCは、心の底から楽しめました。

今年の特徴としては、例年以上にPerlに関わらない話が多かったように思えます。特に、Tim Bunce氏の来日にあわせてか、プロファイラやチューニング等、パフォーマンスに関わる話が多かったように思えました。50ms or die! の FreakOut! さんが目立っていたのも印象的です。「平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用」等でも繰り返された「古典的でも地道にやる」は今年のYAPCを代表する名言の一つではないでしょうか。結局、パフォーマンスを追求するとどのLLでも手法は同様になってくるわけで、そういう意味でも今年のYAPCはPerlを書いたことがない人にも楽しめるイベントだったと思います。当然ながら、運営の方々の多大な努力や、LTthonといった画期的なイベントの存在が、今年のYAPCを例年以上に盛り上げた事に異論は無いでしょう。

その後に勝手に極貧飲み会

80人規模で有志による後夜祭が予定されていたのですが「参加したとして、自分のトークが失敗して恥さらしの場になったらどうしよう」とか「1日目の懇親会が人だらけで、人混みに疲れたから2日目は遠慮しようかな」といった考えが働いて申し込みしませんでした。

そのかわり、@onagatani さんを中心とした Hokkaido.pm メンバーが #極貧飲み会 をやろうとしていたので、そちらに合流。最初は4人での飲み会でしたが、途中で @hiratara さんが合流してくれて、こじんまりと盛り上がれました。私の趣向でもありますが、数人規模での飲み会は個々人とゆっくりお話もできて、好きです。 #極貧飲み会 万歳!

これから

とりあえずPAUSE IDを取得してCPAN Authorへの道を一歩踏み出そうと思いました。

また、後輩とは「今年のYAPCで得られたことは何か?」といった話を何度かしていて、我々がこれからすべきことを再認識させられた次第です。

あと、今年のトークがそこそこ好評だったので、来年もトークしたくなりました。mod_perlネタはもういいとしても、今のところnginxのHttpPerlModuleやFastCGIなどmod_perlと似たレイヤーにいる他の興味深い事柄の最新事情を追いかけてそれを発表してみたいですね。来年のYAPCに向けて、勉強と実践、そしてトークの場数をさらに踏む活動の始まりになりそうです。

私と交流してくださったみなさん、トークを聴講しにきてくださったみなさん、楽しいトークを提供してくれたみなさん、そして運営のみなさん。みなさん本当にありがとうございました。来年もYAPCがありさえすれば絶対に参加します。繰り返しになりますが、本当にありがとうございました!

2012年9月の予定

こんにちは、ブログ記事を書く心理的なとっかかりがなかなか無くて、いつもブログを放置して反省している おがた (@xtetsuji) です。

9月の始めは体調不良で寝込んだりしていたのですが、だいぶ回復してきたのと、各種チケット類を買って予定が固まったので、その予定を少し公開します。というか、月末に向けて体調万全でいかないとならない!というのは後述。

まずは北海道へ行く予定。主に帰省と札幌入り。

  • 9月14日(金)午後:東京→帯広
  • 9月14日(金)〜9月19日(水)午前:帯広、というか実家に滞在(予定はあまり無い)
  • 9月19日(水)午後:帯広→札幌
  • 9月19日(水)夕方〜9月20日(木)終日:札幌滞在
  • 9月21日(金)午後:札幌→東京

実家滞在中は特に主だった予定はありません。時間が空けば9月末の資料作りをしているでしょう。

札幌滞在中は Hokkaido.pm Casual#5 に参加する以外は今のところ予定はありません。予定があっても、都合がついた親戚や知人に会うかも程度。今のところ20日は終日予定がありません。本当に何もなければ、札幌観光かホテルにこもって9月末の資料作りやリハーサルをしていると思います。

そして9月末は YAPC::Asia Tokyo 2012。27日(木)の前夜祭から、28日(金)の1日目、29日(土)の2日目、通して参加する予定です。予定というか2日目はトークします。タイトルは「モダンmod_perl入門」。YAPC::Asiaトーク初デビュー。本当、トークが採択されて感激です。いや、感激している暇があったら聴講に来てくださる方のために資料を作りこまないといけないといった意気込みです。今までのmod_perlの知識を集大成したような、そんなトークを予定しています。

YAPCは日本での年に一度のプログラム言語Perlの一大お祭りといったものです。他のプログラム言語を知っている方ならPerlを専業にしていなくても楽しめるイベントだと思います。既にチケットは売り切れてしまいましたが、私はチケットを買ったもののトーク枠で入場できるので、私と知人の方であれば「チケット買いそびれたけどYAPCぜひ行ってみたい」という熱意のある方であればチケットをお譲りしてもいいですよ。Twitterか何らかの連絡手段でお知らせください。

あと個人的にNHK交響楽団の新シーズンが始まって9月の定期公演楽しみだなとか、そんな趣味の予定はいくつかあります。どうでもいいですね。

9月初旬は体調不良でキャンセルした勉強会もいくつかあるのですが、細々と体調が良い時を見計らって行っている勉強会もあります。その部分については私のATNDやZusaarのページを御参照ください。一緒に勉強しませんか?

他にも色々計画していることやタスクが山積しているのですが、なかなか体調が追いついていないといった状況。お披露目出来るものができたら都度ブログでご紹介していきたいと考えています。あと、前月までの勉強会等のブログ記事レポートを書いていないというのは承知しておりまして、これも追って書いていきたいと考えています。遅れたとしても、場の雰囲気を伝えたい、主催者の方へブログ記事という形で貢献したいという気持ちは持ち続けています。遅筆で本当に申し訳ない

北海道の方々、またYAPCで久々の再会となる方々、9月のこれからが楽しみです。ぜひ私と近接するという方がいらっしゃったら声をかけてください。こちらからも気になった方に声をかけていきます。一緒に飲んだり語ったりしましょう

Hachioji.pm#20 に参加してきました #hachiojipm

こんにちは、東京在住なので東京の勉強会にも顔を出し始めた おがた (@xtetsuji) です。

今回、平日開催となった Hachioji.pm#20 に参加してきました。Hachioji.pm は今住んでいるところから比較的近い地方PMなので、頻繁に通ってPerl Mongerの皆さんと交流したいと思っていたのですが、特に春先から眠れないやら激しく腹を壊したりやらすこぶる病気がちだったもので、Hachioji.pm#15 以来の久々の参加となりました。

今回は平日開催ということもあって、参加者は9名と普段より少なめ(当初は定員と同じ10人)。

今回もHachioji.pm公式ページのレポートがアップされていますので、そちらをご覧になると雰囲気が分かると思います。

ちょうど帯広から東京に出張にきていた @masiuchi さんがいらっしゃっていて、Hokkaido.pm 以来の久々の再会が嬉しかったです。

会場は吉祥寺のevinoという名前通りのエビ料理の店。北海道生まれ北海道育ちにも関わらず、エビの皮むきが苦手で服に汁を飛ばしたりしたハプニングもありましたが、料理はどれも美味しいものばかりでした。エビのハンバーグが特に印象的でした。ビールもワインも美味しかった。ちょうど私が座った席の周辺が、自分を含めて北海道出身という状態で、@masiuchiさんと@ytnobodyさんの函館ディープトークやら、ここはHokkaido.pmかと錯覚するような光景も繰り広げられました。

自分も含め、今回の参加者の9人のうち約半数が、9月末の YAPC::Asia Tokyo 2012 のスピーカーだったこともあって「トーク採択おめでとうございます」「期待しています」といった会話が飛び交いました。

今回の Hachioji.pm がなぜ急遽平日開催になったかというと、YAPC::Asia Tokyo 2012 の会場の一角で LTthon (エルティーソン) という LT (Lightning Talk) のマラソンのようなものを行おうというイベントの予定を立てるためとのことでした。トークどころか5分間LTすらしたことのない人にも YAPC::Asia Tokyo 2012 という大舞台の一角で話す機会を与えたい、といった趣旨だったかな。「どんなことを話してもらうんですか?」と質問したら、「家で飼っているメダカの話とかでもいいよ」とのことでした。要するに公序良俗に反しなければ何でもありのLTのようです。気楽ですね。YAPC::Asia Tokyo 2012 に来る人で心当たりのある方に、ぜひともLTthonでのトークデビューを勧めてみたいと思いました。企画の骨格がさらに固まっていくことを待ち望んでいます。

Hachioji.pm恒例の「1枚LT」。今回もお酒を飲みながらパソコンを持ち出してPerlなどを熱く語るという光景が繰り広げられました。今回こそはと、私もLTスライドを準備して念願のHachioji.pm「1枚LT」デビュー。場の反応はそこそこだったこともあって安心しました。

他の「1枚LT」は、@uzullaさんによるLTthonの話、@ytnobodyさんによる新しいWAF「Nephia」を作ってみた話(詳しくは@ytnobodyさんのブログエントリをどうぞ)、合計で3LTでした。最近学習のためにMojoliciousの中身を見て、その巨大さと複雑さに「中身を見て理解するのは相当な根気と努力が要るわー」と挫折しかかっていたところだったので、生まれたての小さなWAFがどのように育っていくのか、「Nephia」をウォッチすることでWAFの成長というものも含めて勉強させてもらおうと思った次第です。

私の「1枚LT」である「すごいmod_perl」は、当初の発表資料に多少の修正を加えた上でSlideshareにアップしました。半分はネタトークです。当初はこんなに YAPC のトーク採択が早いとは思っていなかったので、ここで宣伝して「いいね!」してもらおうと思って準備していたものでしたが、期せずして YAPC で採択されたトーク「モダンmod_perl入門」の宣伝になって良かったです。「すごいmod_perl」はネタトークでしたが、本番の「モダンmod_perl入門」はどこまでネタや笑いどころを入れるかはまだ考えていません。20分はやはり語るに短い。それでも興味深い内容を話して皆さんに興味を持ってもらえるよう、入念に準備したいと考えています。

23時ごろお開き。中野区在住にとって、中央線で中野に近づいてくれるとより足を運びやすいので、今回の吉祥寺開催はとても行きやすかったです。平日開催でしたが、会社が杉並区だったので、荻窪まで行って少し西に行くだけで会社帰りでも簡単に行けました。今後も名前通り八王子での開催が中心となるでしょうが、たまにはもうちょっと中央線の東寄りで開催していただけるといいなぁと贅沢な事を思った夜でした。