hokkaido」タグアーカイブ

東京・帯広間をジェットスターで安く移動する

おがた (@xtetsuji) です。

2015年になってから頻繁に東京自宅と音更町実家を往復しているのですが、よく「移動ばかりで大変ですね」「お金大丈夫なんですか?」と心配されます。用事があるのは事実なのですが、ほぼ自分の趣味で往復しているようなものなので心配無用です。また、会社を辞めて今は時間もありますし、退職に当たってしばらくは大丈夫なほど貯金はしたつもりです。

本来であればこのITの業界、ネットの進化によってどこにいても仕事ができるはずなのですが、仕事は会社に来てヤレという(この先端IT業界にいるのに)旧態依然の社内勢力によって阻まれるというのが悲しい現実となっています。本当にそれでいいのでしょうか。このことを考察するため、地方都市に赴いてテレワークやリモートオフィスを研究・推進している人とお話ししたりもしましたが、そのお話は別記事で行うことにしましょう。

とはいえ「高額な移動費を払い続けていたら、貯金があったって何ヶ月も持たないんじゃない?」というよくあるご質問に答えるべく、私が最近とっている東京・帯広間の安い移動手段をご紹介します。それは今話題のLCC(ローコストキャリア:格安航空会社)を使ったものです。特にこの記事ではLCCの中でもジェットスター・ジャパンを使ったものにフォーカスしています。

続きを読む

Hokkaido.pm#11 に参加してきました #hokkaidopm

おがた (@xtetsuji) です。

2013年12月28日に行われた Hokkaido.pm#11 に参加してきました。

※参加ブログ記事やスライドURLなどについては、公開されたりしたら都度追加していきます

いつも参加ブログ記事を書くのが遅いので今回はすぐに年内に…。本当は他にも出席したものの、まだ参加ブログ記事を書いていないイベントが結構あるのですが、それは年末年始休暇にまとめて書こうと思います。

参加者の方々によるブログ記事 。

場所は、今回は東札幌駅近くの産業振興センターではなく、札幌駅の北の札幌エルプラザというところでした。ここはHokkaido.pm Casualを毎月催しているところ。

今回も13時30分開始でした。勝手が分かっていて、一度Hokkaido.pm Casualに出席して札幌エルプラザに行ったこともあるので、比較的迷わず行けました。吹雪結構大変だったけど。

自分主導でUstreamをやってみた

自宅で役割のなくなったiPhone 4sがあったので、前回のPerlBeginnersのときにそれにUstreamアプリを入れてUstreamをしてみました。一人でも見てくれれば御の字と思っていたら、数人から反響があって、やってよかったなと思ったので、今回のHokkaido.pmでは、私が名乗り出て、この形式のUstreamをやってみることにしました。幸いHokkaido.pmのUstreamアカウントは随分前から存在していたので、それを利用しました。録画もあります。

前回のPerlBeginnersは短時間イベントなので気付かなかったのですが、iPhoneのUstreamアプリの最大連続録画時間は3時間(180分)ということを知らず、途中でぶった切られています。ちょうど自分が発表する前後でした。

Ustreamは3時間まで

 

ちょうど3時間(180分)寸前でいったん録画が切れているのが分かりますが、そういう事情です。録画が残されていたことが幸いでした。ばらく気づかず、タイミングが悪かった。皆さんもiPhoneのUstreamアプリで長時間ライブ配信をするときには気をつけてください。

いちおう休憩中はオフレコの雑談もあるだろうということで、画像はブルースクリーンを移しつつ、マイクはオフにするという対応をしました、これはこれで良かったかなと思います。3時間以内に収めつつ、収録時間を少し細切れにするとよいんだなというのが今回の教訓でした。

録画は3時間超(13時30分〜17時頃まで)の長丁場ですが、ダラダラ閲覧すると雰囲気が分かっていいかなーと思います。@yusukebeさんの40分トークなど、見所も多かったので、自分の見たいところだけを見るのも良いと思います。

今回はUstream業や会場入りが遅かったことや体調不良などもあり、バタバタしていてメモが疎かです。他のスピーカーの方がスライドを公開したりしたら、随時情報を更新していこうと思います。

13:40~14:00 「今年書いたPerlコードの振り返り」 by @akiym さん

akictfの話から。

特にMac関連のCocoaモジュールが豊富な @akiym さん。私も結構お世話になっています。

  • AnyEvent::SKKServ
  • Cocoa::NetworkChange
  • Regex::VerbalExpression

Cocoaモジュールの作り方について。なぜ「Cocoaのモジュールを書くのか」という問いについては、CocoaのAPIに触りたいからとのこと(高速化ではない)。Perlを使って、Macアプリを使わずにMacの機能にアクセスしたいだけだし、単体モジュールにして言ったほうがみんなが幸せだとtypesterさんがいっていた、とのこと。

最近では「XSUBで書けるようになったので超絶便利」であり、革命とのこと。Cocoa::GrowlやCocoa::Skypeは面倒なことをしているそう。xsubppが…。

MinillaでXSモジュールを作成する場合には minil new -p XS Module して、builder_MyBuilder.pm を作成してminil.tomlを編集。あとは *.xs にゴリゴリと書いていって、makeすると.mが生成される。

Cocoaモジュールは、普通のXSと同じように書けるそうです。Cocoa→Perl、Perl→Cocoaのデータ変換に気をつければいいだけ。それ以外はただのXS。どうやればいいんだ…というときには@typesterさんや@soh335さんを参考にすればよいとのこと。

Mac::Keyboard::LED というモジュールを作った話。Caps Lockを光らせることが出来るやつ。通知に良いかもしれません。

後半はベータバージョンであるPerl5.19の話。hash slice sytaxやpostfix dereferencingなどの便利記法を紹介したあとに、CGI.pmが正式にdeprecatedされた話や、削除されたモジュールの一蘭などを紹介。ようやくCPANPLUSが無くなった。時代ですね。

最後に、ウェブアプリケーションの設計についての、聴衆への質問の投げかけ。

Amon2を使っている理由は単なるコンテキストマシーンであるというところから、Bootstrap3.0対応、Kolon対応が良いという話、Rooter::BoomやTengを使っているという話の後で、Modelというものは何なのかという問いかけでトークが終わりました。質疑応答が盛り上がったものの、MVCにとらわれすぎてはいけないという結論に至ったような気がします。

14:00~14:20 「Hokkaido.pm #11」 @__papix__ さん

自称「どこにでもいる大学生」、@__papix__ さんが大阪から遠路はるばるやってきました。今回はフェリーらしい。

今回のHokkaido.pmのテーマである「今年作ったもの」というのにふさわしく、いくつかの業務・私的に作った作品を紹介していました。

  • Facebook API 変更自動確認ツール Kaopan (これはインターン先の会社で作ったそう)
  • シンフォギア (今のところ自分用スライド公開ツール)

Kaopanは結構便利そうなので、会場からも公開を期待する声が多く聞かれました。

シンフォギアは「Amon2+Teng+SQLite+Text::Markdown::Hoedown」という構成で2日で作ったとのこと。今までの積み重ねと先人の苦労があって2日という短期間で作成できたというのは本人の弁。

先の @akiym さんの話に続いて、MVCについての話も触れられましたが、やはり「とらわれすぎてはいけない」という話。DBはModelとして扱うというよりもDB名前空間で別物として扱うスタイルだということが語られました (このあたりちょっとメモが怪しいかも)。

14:30~14:50 「Hokkaido.pm寿司x11」 @moznionさん

今年の流行語は「DevOps」という話からはじまり、協調を提案する話へ。

その後、TestとDocumentの関わりについて触れ、「DocumentからTestを生成する」アプローチと「TestからDocumentを生成する」アプローチの二種類を比較。 「SYNOPSIS重要」としつつも、「DocumentとTestを同居させる」という結論に。

後半は「TestからDocumentを生成する」というアプローチにフォーカスしてJSON APIのテストを書くとそれのドキュメントを自動生成してくれるautodocの紹介や、Test::JsonAPI::Autodocモジュールの紹介などをされました。

多岐に渡る活躍の中でもとりわけテストや品質管理に造詣が深い @moznion さんのトークでした。トークやスライドのテンポも面白く、Ustream録画やスライドは要必見です。

14:50~15:10 「」 @charsbarさん

翻訳家の@charsbarさんが余っている20分枠に急遽登壇。

最初はCPANTSなどの品質管理系の話から始まりました。

その後、本業である翻訳業の中で手間だったラテン語の辞書を引くためにMojoliciousアプリケーションを書いた話などが印象的でした。

最近編集(?)を手がけた「世界の名酒事典 2014年版」の紹介などもありました。興味深い。手広いです。

最後に、WindowsのiTunesで英語の勉強などで歌詞をブラウザでリアルタイム表示させたいといった要望を手軽にかなえるために書いたというウェブアプリケーションをご紹介。これはMojolicious Advent Calendar 2013でも紹介されていた記事のデモでした。MojoliciousとWebSocketの組み合わせ。これもまた興味深かったです。

15:20~16:00 「今年見たPerlコミュニティそしてこれから」 @yusukebe さん

講師派遣は無かったのですが、今回メインとなった40分トークを飾ったのが、最近JPAの理事に就任された@yusukebeさんのトークでした。

技術的なことよりも、それを支える方法であるとか、盛り上げるアイデアだったりといった展望について熱く語られたトークでした。スライド公開後のネットでの反響もかなりあったようです。スライドも公開されていますし、Ustreamにも録画がありますので、ITエンジニアコミュニティに興味のある人であれば、元気がもらえるスライド・トークでしょう。私が書いたメモを公開するより、このスライドをテンポよくめくっていったほうがよく雰囲気が分かると思います。興味があればUstream録画も見るとよいといった感じです。

今回の名言「PerlMongerよ、旅に出よ!」は、Perlプログラマだけでなく、全てのOSSに携わるITエンジニアに言えることではないでしょうか。数学などの頑張れば一人で出来る学問でさえ、ネットを使ってみんなで協力するだけでなく、学会発表や研究交流のために各地に旅費を払って行くわけです。場所が変わって、そこで得られる知見といったものは何にも代えがたいものがあるでしょう。私も関東圏と北海道のみが活動圏だったので、今後は西や南のほうや海外へ、出来る限りもっと積極的に足を運びたいと感じました。

16:10~16:30 LT

今回のLT、最初は応募が少なかったのですが、結果的に飛び入りが多くて活況となりました。

まずトップバッターは飛び入り参加の @itrysd さん。ギターの音を奏でられる本格的なウェブサイトを作ったそのデモは、なかなか興味が惹かれるものがありました。本公開が待ち遠しいです。

@techno_neko さんの「本当にあったGrepが遅い話」は、耐久テストのような問題が出されて、なかなか面白い感じでした。非常に疎な配列の作成が新しいPerlであれば実行可能であるという結論は、なかなか興味深かったです。

次は私のトークでしたが、その話は後ほど。

再び登場 @__papix__ さんによる「Hokkaido.pm#11 Lightning Talk」。今年書いたモジュールを色々列挙。@moznionさんが「成果を横取りされた」と言っていたのが面白かったです。Acme::SuddenlyDeathが今年2013年とは…。随分前のことだと思っていたので、意外に2013年は長かったのかなぁとも思いました。貴重な感覚です。

@onagatani さんによるAWSの紹介。スカイアークがAWSを主導していること、とても興味深かったです。

@aloelight さんの「今年書いたPerlのコード」は本格的なモジュールがいくつも出てきて驚愕しました。Tamanegiは興味深いですね。公開を楽しみにしています。

※LTのメモが疎かだったので、順番などが狂っている可能性があります。

私のLTについて

今年作ったもの2013」と題して発表させてもらいました。スライドも公開済みです。

実際2013年は色々あってあまりPerlのプログラムを書かなかったのですが、APIラッパーの類や、書き捨てスクリプトであったり、そのあたりを含めて紹介させていただきました。他の人が発表している本格的なものに比べて見劣りするなぁとは思いましたが…。

特に今年は、12月11日から12月24日まで胃潰瘍で入院をしていて、今回の Hokkaido.pm#11 にも出られるかどうかというギリギリの感じでした。Twitterに同報通信的に状況を報告していったのですが、同情をもらおうとかそういう意図は全く無かった(詳しくは「入院中、そして伝えたいこと少し」を参照)ものの、意図せず色々なITエンジニアの方から心配をしていただき、2011年7月のHokkaido.pm#5から開始したコミュニティ活動によって「作った」というよりも「豊穣された」温かいコミュニティにトークの中で感謝をしたかったということがあります。

とはいえ、ディスプレイトラブルであったり、ちょうど180分のUstreamトラブルであったり、久々にハマった発表だったので、なんかそのあたりを落ち着いて話すことが出来なかったのが心残りでした。

ご心配くださった方、お見舞いに来て下った方、本当にありがとうございました。

懇親会

今回もすすきのへ移動しての開催でした。札幌駅近くだったので、今回は30分ほど歩いて移動することに。入院していたこともあって、久々に長時間歩いたので結構疲れましたというか汗をかきました。

鍋料理、お腹に優しくてとても助かりました。移動できない狭さだったので多くの方との交流はなかなか難しかったのですが、それでも近くの席の人達と盛り上がれました。

二次会

@onagatani さんが大好きな活イカのいる、いつものあの場所でした…がシケで活イカはいませんでした。

少し人数が減って、多くの方との交流がより弾みました。@onagatani さんともようやく二次会でゆっくり話すことができて満足。

その後

大体Hokkaido.pmの三次会は@onagataniさんが大好きなラーメンで締めるのが通例なのですが、病み上がりでラーメンのような脂っこいものが食べれないことなどもあって、行きませんでした。噂では、@onagatani さんと @jamadam さんの二人でラーメンに行ったようです。

まとめ

久々のHokkaido.pmだったなーという気がします。Casualが毎月開催されているのでそちらに比重が置かれてしまう感じもありますが、北海道外からの参加者も集めて大々的に出来るHokkaido.pm本会というのも趣がありますし、私も大好きな北海道に行く口実ができてとても良いです。噂では、また3ヶ月に一度くらいのペースで次回が開催されるらしいとのことで、大いに期待したいところです。

Hokkaido.pm#10 に参加してきました #hokkaidopm

こんにちは、おがたです。

8月31日に行われた Hokkaido.pm#10 に参加してきました。

詳細は上記の開催報告が詳しいです。参加者のブログ記事もまとめられています。

場所はいつものところ

いつもよりかなり遅めにホテルを出たのですが、現地に向かう途中で @ytnobody さんにあったり、@akiym さんにあったりしました。13時開場を13時開始と勘違いしていてみんな焦っていたという…。

あと、開始直前に LOCALの @koiwa さんが颯爽と現れて、学生支援の(?)クオカードを置いて行きました。「せっかくだから少し見ていきませんか」って言ったのですが、用事があるらしく、一瞬だけ来て颯爽と去って行きました。

今回も前回同様Ustream生放送はありませんでしたが、@onagatani さんが一部を録画していたようです。後日公開されてるかもしれません。期待。

今回は開催に当たって大きなイベントを避けたつもりが、どうやらバレーボールの世界大会にぶつかってしまったようで、2ヶ月前にも関わらず宿泊先をおさえるのに相当大変な思いをしました。最初は「どうしてこんなに予約埋まっているの?」って感じでした。以前(#8)のSMAPとフィギュアスケートがぶつかったときのような、恵庭まで遠くに宿をとるのは避けたいと思ったので、結構お高いホテルでしたが空室があったすすきのの宿に宿泊しました。

以下、私の手元のメモより。メモを取りきれなかった部分もありますので情報としては不完全、ダイジェスト版だと思ってください。詳細は、上記まとめエントリから各スライド資料を参考にするなどしていただければと思います。

フォームバリデーションを自動化してみた

Mojoliciousのスペシャリストで、雑誌「月刊I/O」2013年8月号にMojoliciousの記事を寄稿したり、mojo-legacy などでも有名な @jamadam さんによる発表。

  • バリデーションルールを書くのは大変。DBフィールドを全部網羅しても不足。1000くらいある。
  • 書いた → Mojolicious::Plugin::FormValidatorLazy
  • ミドルうウェア的な位置づけでバリデーションをする。
  • 署名をつける
  • 問題点
    • JavaScriptバリバリのアプリでは役に立たない
    • スキーマの生成が高負荷
    • あくまでセーフティネット
    • ブラウザの差異を吸収するJSが必要
  • Web Application Firewallという分野で既出?

Perl meets ■■■ → Perl meets Leap Motion

Hokkaido.pm が誇る若手のホープ @akiym さんによるトーク。

大学生。「Herokuで学ぶ、初めてのPerl」という話を YAPC::Asia Tokyo 2013 でする。

  • akictf / CTF: セキュリティ競技大会

Perl meets Leap Motion? → なにそれ?

  • 次世代デバイス
  • 手のひら、指を細かく認識
  • WebSocketでデータを取ってくることができる

#1. air pointer

  • マウス操作
  • OS X でマウスをコントロールする方法
  • WindowsならWin32::GuiTest
  • Cocoa::GuiTest みんな大好きCocoaモジュール
  • マウスを動かす
  • ただし不安定

まとめ

  • PerlからLeap Motionを扱ってみました→夢広がっています
  • Cocoaモジュールが足りない

時間が余ったので「GitHub止まりモジュール」5選

  • #1. Text::PicoTemplate
    • ユーザーにテンプレートを書いてもらう
    • – Text::MicroTemplateはPerlのコードが実行出来るようになっている
    • – 変数のみサポート
    • – s/// でやれば
    • – もう少し柔軟に対応したい
  • #2. Text::ChineseNummeral::JA
    • 漢数字→数字
    • 正規表現でゴリゴリ → ワイルド
  • #3. Cocoa::NetworkChange
    • ネットワークが変更されたときに何かをする (OS X専用)
    • 例えば特定のWi-Fiにアクセスしたときにログイン処理をするとか → 大変捗っている
    • is_network_connected()
  • #4. Iroh
    • もうひとつのTeng
    • ネーミングがおかしい
    • T*nga – a  = Teng
    • no inflate, deflate, iterator
    • というかTeng使っています
  • #5. WWW::Fc2Video::Download
    • WWW::なんとか::Downloadシリーズ
    • FC2動画が足りない!
    • 単純にスクレイピングだけでは不可能
    • 良モジュール!

https://github.com/akiym をどうぞ。

イベント駆動とノンブロッキング

私 (@xtetsuji) のトークです。

詳細は Slideshare にアップしたスライド からどうぞ。

以前から @aloelight さんに「YAPC (mod_perlの展望とApacheの超絶技巧) の前哨戦みたいなトークどうですか?」と言われていたのですが、そういえばイベント駆動ウェブサーバのことをよく分かっていないなー、ということで、その勉強の記録をまとめてトーク素材にしてみました。むしろ、ブロッキングだとかそういう事を何となく理解したつもりになって、イベント駆動自体の理解を深めずにAnyEvent周辺を使っていたこともあるし、Apache 2.4 で正式リリースされた event MPM の理解にもつながるだろうということもありました。さらに社内の部内勉強会でそのあたりを突っ込むきっかけもあったので、さらにちょうどよいきっかけとなりました。

ウェブサーバを自分自身で書いてしまう凄腕のプログラマーとか、分かっている人は分かっているのでしょうが、StarmanやStarletやTwiggyやHypnotoadなどのイベント駆動ウェブサーバの使用者側の多くの人の中で「なんとなくググって出てきた方法で起動させたら動いたので、なんとなく使っている」という人もいるのではないかとは感じていました。数カ月に一回のHokkaido.pmだからといって肩筋を張って自分ができうる限りの難しい話をするよりも、恥を忍んでこのような初歩的なトークをしてみるのも悪くないかなと思って、今回のトーク資料を作った感じです。

普段のmod_perlネタはあまり反響がない(?)のですが、今回はSlideshare上でもそこそこ資料に対する反響もあったようで、やはり興味を持ってくれる人は持ってくれるんだなということはわかりました。

懇親会で @tokuhirom さんから、epoll や IO::Select を中心に調べてみるとよいといった話を聞くことができました。epoll については勉強会や独自勉強の過程でも出てきたキーワードで、自分自身Linuxの基礎の勉強が足りないなと痛感していたところでした。雑事が落ち着いたところで、持ち運ぶのも重量級な1600ページを越える書籍「Linuxプログラミングインタフェース」を買って重要箇所から拾い読みして勉強する予定です。さすがに書籍の体積と重量が凄まじいので、先日発表されたKindle Paperwhiteの最新版を予約しました。PDFの電子書籍版を購入する予定です。時代は電子書籍なんでしょうね。紙の書籍の質感は大好きなのですが、自宅の本棚が満杯なのを見てそう痛感する次第です。

ここ最近の取り組み

TengやQudoなど多数のPerl CPANモジュールの開発者として有名な @nekokak さんによるトーク。以前 JPA 派遣講師として来てくださいましたが、今回は自費で参加してくれました。

現在は DeNA に在籍しており、普段はあまりコードを書かないマネージメントをされているようです。

  • Gmailとスプレッドシートが友達。
  • 海外とのコミュニケーションのため、英語のスラングの勉強ばかり
  • commit log に fuck fuck 書くようになりました

共通技術基盤という組織について。

  • 自分たちで解決した問題を宣伝
  • いろんな所に首突っ込んで宣伝
  • 一緖にやってくれそうな別部署捕まえて進めていく
  • 社内tech talkとかやってどういう取り組みやってるか宣伝

BaranというPerlモジュールの名前空間を作ったら社内でウケた。

  • 名前の元々の由来は弁当に入っている仕切り「バラン」→そういう影を支えるモジュール
  • Baran::DBI
  • DBIx::Handler のラッパー
  • Baran::Memcached
  • Cache::Memcached::FastのDeNAラッパー
  • Baran::PushNotification
  • DeNAのInfraに特化した内部共通モジュールとして成長
  • DeNAに依存しない物はCPANモジュールにしたい
  • Baran::PushNotificationとか普通にCPANモジュールとしてアップしたい

プッシュ通知はバッドノウハウ。CPANモジュールをそのまま使うと結構ハマる。

新しい取り組みについて。

  • 新規プロジェクトを始めるときは必ず何か今までにやったこと無いことを取り入れるようにしてる
  • 例えばNginxは他部署に黙って採用して既成事実化したりした
  • JSON-RPC

SOA化の推進。

  • 細かく分割しよう
  • JSON-RPCのmethod単位でplackup
  • methodによってrequestの数とかが異なるので用途ごとにスケール出来るように

マネージャーになるときに思ったことや聞かれたこと。

  • よくコード書きたくならないですか?
    • 自分が書いたほうが速いこともある
    • 書きたいこともある
    • でも本気で書いたら負け
    • 一人で挙げられる成果なんてたかが知れてる
    • チームで高いアウトプットを出せるようにするのがマネージャー

「GitHub止まりモジュール」

  • Komainu
    • Fluentdに置き換えられていってます
  • Class::Anon
  • Data::Koyomi

「Pager Duty」というサービスを多く使っている。アラート用のサービス。メールを投げると誰も反応しないと電話がかかってくる。お金がかかる。SMSはカネがかかる。

CPANと私

JPA派遣講師としていらっしゃった @tokuhirom さんによるトーク。

Thanks to JPA++

自己紹介

  • Web Application Engineer
  • サーバサイド
  • 自社サービス
  • 書いている言語は色々ある:Perl5, Perl6, Ruby…
  • 最近はHTMLよりもJSONを出力するAPIを書いている

CPANモジュールの話をしようと思ったら @xaicron とかぶる

立場が変われば技術もかわる

  • 受託とか
  • 納期とか

アジェンダ

  • CPANモジュールの選び方
  • おすすめのCPANモジュール
  • CPANモジュールを取り扱うためのモジュール
  • 将来への展望とYAPC

CPANモジュールの判別

僕が重要視すること

  • 他人のコードのせいで動かないことはキライ
    • Cratalystみたいにコードがぐっちゃぐちゃなもの

客観的な選別手段

  • 最終更新日
  • CPAN Testersの結果
  • t/が寂しいモジュールは使わない
  • バグトラッカーへの登録数をみる

作者による選別

  • 個性に溢れすぎているCPAN Authors
  • 人ごとの癖がわかると、わりとなんとかなる
  • gfxだから高速
  • ○○さんはテストを動かさないでリリースする
  • ○○さんはインターフェースが重厚
  • ○○さんのモジュールは実際にはつかってない
  • ○○だから非互換の変更をする
  • ○○さんは自分で書くけど使っていない
  • ○○は非互換な変更をする

信頼おけるパールハッカーの例

  • dgolden
  • rjbs
  • miyagawa
  • gfuji
  • mschwern
  • makamaka

速度

  • 当たり前ですね
  • メモリ消費量

Moose依存はダメ。「0.7秒」は困る。

後方互換性に対する姿勢

  • 最重要
  • 動いていたコードが動かなくなるのはすごく嫌

結局は他人に聞くのが一番いい

  • Twitter
  • Lingr
  • etc.

Fukuoka.pmはFacebookページがあるらしい。

Hokkaido.pmにはFacebookページがあるらしいんですけど…

最終的に自分でメンテしてもいいな、というものだけを選ぶ。

流行り廃り

  • アーリーアダプターの穴掘り
  • つきあう必要なし

流行りは廃りでもある。ある程度落ち着いてからでいい。

CPANモジュールの選び方の実例。「@xaicronとかぶっていないのをえらんでみました。」

アプリケーションサーバ → Plack+PSGI

  • ◎ Starlet
  • ◎ Twiggy
  • ○ Starman
  • × FCGI
  • – CGI
  • – mod_perl

Starman vs Starlet

  • Starletはかずほさんが一から書いたもの
  • Starman は Catalyst の何かからポートした物

Starlet は中身が追える。@kazeburo さんも読んでいる。良い。

FastCGIは一番無い選択肢。中途半端。ApacheのFastCGIの実装には癖がある。FastCGIの仕様を忠実に守った実装がない。

オブジェクト関連

  • ◎ Class:Accessor::Lite
  • ○ Class::Accessor::Fast
  • × And others
  • ◎Moo
  • ◎Mouse
  • ○Moose
  • ×Any::Moose
  • ×And others

Mooはほとんど問題無いけど、一部モジュールを呼ぶとMooseにアップグレードするというのが問題。

MooはCPANモジュールを作るときに使う。

MouseはMoose陣営から嫌われている。

オブジェクト関連の今後の展開。

  • p5-mop-redux
  • たぶんコアへ
  • たぶん5.20には間に合わない

CPANインストーラー

  • ◎ cpanm
  • × The CPAN Shell
  • × CPANPLUS

O/R Mapper

  • ◎ Teng
  • ○ DBIx::Skinny
  • ○ DBIx::Class (DBIC)
  • × Class::DBI (CDBI)

DBICは海外ではそれなりに使われている。

日付関連

  • ◎Time::Piece
  • ○DateTime

月末問題やタイムゾーン問題というものがある。

JSON

  • ◎ JSON::PP
  • ◎ JSON::XS
  • ○ JSON
  • × Cpanel::JSON
  • × JSON::Any

JSON::Anyは絶対に使ってはいけない。PPとXSを自動で切り替えるモジュールはあまり使わないほうがいい。

JSON::PPは標準添付になっている安心感。速度気にしない場合はJSON::PPで問題無い。

CPANモジュールの使い方

実際、どういうふうに使っていくか

  • plenv
  • cpanm
  • carton

plenv

  • plenv = Perlバイナリの管理
  • perlbrewみたいなもの
  • 複数バージョンのPerl5をきりかえて使う
  • 最新のPerl5をつかう
  • 通常は普通にシステムPerl使えばいい
    • Macだとsystem Perlが腐っているので必須。
    • Linuxならsystem perlをつかってもいい。
      • ただし、system perl は -Dusethreads → 速度劣化
  • アプリケーション単位でperlのバージョンを変えられる
  • 環境変数でバージョン切り替え

plenv global と plenv local の話

plenv local では、古いPerlがこのプロジェクトでは有効に…といったことができる。

$ cat ./.perl-version
5.8.1

環境変数でも指定可能

$ PLENV_VERSION=5.19.0 perl -v

仕組みは、シェルスクリプトを ~/.plenv/shims/perl に置いている。

どうやってバージョンを指定するか

  • PLENV_VERSION
  • .perl-version (plenv local) → ほぼこれ使っていない
  • ~/.plenv/version (plenv global)
  • システムPerl

以上簡単なplenvの使い方。

cpanmの話

  • CPANモジュールのインストールにはcpanmを使います
  • plenv install-cpanm
  • perlbrew の install-cpnam は壊れていた!
  • cpanmはインストールしなくても使える!
  • cpan とか perl -MCPAN -eshell やめておいたほうがいい (とくにperl -MCAPn -eshell の CPAN Shell は)
    • 古のやり方
  • cpanm -n Carton

簡単でしょ

carton

cpanfile というファイルに依存関係を書いておくと

$ carton install

local/ 以下にモジュールがインストールできる。インストールしたバージョンを cpanfile.spapshot に記録。cpanfile.snapshot を元に local/ を復元できる

GitHub止まりモジュール

  • Perl5 is DSL for CPAN
  • Another DSL?
  • Perl6!
    • YAPCでは詳しく話す。
  • Perl6 to Perl5 transpiler
    • like Coffee script
    • With XS hacks
  • Passed 3% in test suites
  • Seis 面白い

LT: Asset Pipeline

Hokkaido.pm の主催者の一人で色々とお世話になっている @aloelight さんによるLT。

  • 複数のJavaScriptやCSSを結合してminifyしてくれる機能
  • Plack::Middleware::Assets::RailsLike というのを作った

主な機能

  • JavaScript、CSSの結合と最小化
  • LESS, Sass/Scssの展開
  • Cache
  • Pre-compile

LT: PDLを使ってみよう

Perl meets beats でおなじみの @techno_neko さんによるLT。

  • http://pdl.perl.org/ で数値計算。行列計算とか。

後半、音がならないとつまらないよね!ということで、PDLで音楽を鳴らしていました。

LT: 気象のお話とか

東京から来た北海道生まれでPerl Beginners主宰の @ytnobody さんによるLT。今回Hokkaido.pm初参加?

  • MetXML という気象情報XML
  • XML::XPath::Diver 書いた
  • Nephia という WAF を書いている
    • JSON API

LT: Riji さわってみた

Hokkaido.pmの常連の一人である @koji_magi さんによるLT。

  • Rijiは @songmu さんが作成したブログ作るツール

懇親会

今回も最近のHokkaido.pm恒例の、17時あがりの17時30分懇親会スタートスタイル。諸事情で少し開始が遅れて18時頃の開催となってしまいましたが、それでも余裕たっぷりです。この余裕が懇親会での気楽さとなっている、そんな気がします。

一次会

でした。もしかしたら「南4条店」のほうだったかも。このあたり、この店のチェーン店が密集していてよく分からなかった。

普段、私は東京にいるにも関わらず、札幌にいたほうが東京の有名人の方々と密にコミュニケーションが出来るといういつもながらの不思議を味わっていました。

@tokuhirom さんとは最初私のほうがたどたどしく会話していましたが、徐々に慣れてきた感じでした。この場で私のトークに対して epoll であったりというアドバイスを頂いて「なんか発表中に指摘しづらかった」とのこと。私のトーク、なんか割り込みづらい雰囲気でもあったのかな…。Dan the Question がしやすいトーク作りを目指そう。

十数人の参加で、結構盛り上がりました。Facebook には Hokkaido.pm のボスである @onagatani さんがアップした写真もあるので、アカウントがあるかたはそちらも御覧ください。

二次会は、活イカがいれば「酒肴酒菜 掌-てのひら-」になるところでしたが最近は活イカが不漁とのことで

となりました。こちらでも盛り上がりました。活イカ食べたかったけど、ここも美味しかった。

三次会は、普段は @onagatani さんが先導してみんなでラーメン屋に行くコースなのですが、@onagatani さんが次の日に社員旅行があるらしく帰ってしまったので、ここで一旦解散となりました。ごく一部の人達で、ノリのよい @itrysd さんに連れられて行ったが以下のお店。

いわゆるすすきのによくあるパブです。ただ、パブの相場にしては安かった。@ytnobody さんと@itrysd さんがひたすら弾けまくっていました。

この後、四次会らしきものもあったようですが、私はホテルへ戻りました。午前3時前。

起床したら午前10時を過ぎていて、午前11時チェックアウトのホテルでひたすら焦りました。お高いホテルを取ったのに、室内を全然堪能できないという残念状態。

この後、札幌から地元とかち帯広へ帰省することになるのですが、それはまた別の機会に書きます。

前日の話

話は逆戻りしてしまいますが。Hokkaido.pm#10 はいつもの Hokkaido.pm のように前日入りしていました。前日8月30日に集まれた一部で、ジンギスカンの食べ放題の店に行ってきました

すすきの駅のすぐ近くにあるビルのテナントでしたが、かなり美味しかった。食べ放題であの美味しさ、その割にはコストパフォーマンスが良かった。ただ、しばらく肉は食べなくていいなー、って感じになりました。年を取った証拠ですね。しばらくは野菜や魚の食生活をしたいです。

前日で、特に私はスライドが出来ていないにも関わらず二次会にも行ってしまいました。

活イカの店ですが、前述の通り不漁で活イカはいませんでした。しんみり日本のお酒を飲んでいました。

この後、ホテルに戻ってスライドの残りを作っていたものだから、一日目も起きたのが遅くなって結構焦りました。

まとめ

今回は @akiym さんが出した「GitHub止まりモジュール」という言葉が一番流行った感じでしたね。その後の発表の人達もみんな自分のGitHub止まりモジュールの事に言及していました。なぜGitHub止まりなのかは色々事情はあると思いますが、CPANに上げるべきタイミングはいつなのか、色々悩むところ多いですからね。私は主にテストが書けないモジュールのアップは躊躇している感じです。

今回も楽しい Hokkaido.pm をありがとうございました。前回 #9 の 3月から半年近い期間が空いてしまいましたが、3ヶ月に1度くらいのタイミングでの開催を期待しています。Hokkaido.pm Casualがあるから補完されているという雰囲気もああるようですが、私に取ってついでに帰省するきっかけにもなるし、どんどん開催して欲しいです!

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 に行ってみてはいかがでしょうか?

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に期待です。よほど避けられない予定がなければきっと行きます。

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

こんにちは、遅筆癖を直したい おがた (@xtetsuji) です。

2012年5月13日に行われた Hokkaido.pm#7 に行ってきました。

…;と、このブログを投稿している7月末になって「何をゴールデンウィーク明2ヶ月前の話をしているんだ!」とお叱りを受けるかもしれません。ごめんなさい。遅筆な上に、ついつい文章を書き始めると長文になってしまって時間がかかるので、書き始めるまでの心理的障壁が大きいんです。

あとブログ記事が遅れた要因として

  • 会社が「おまえよく発表後に体調崩すから発表しちゃダメ」と言われたのに飛び入りLTした事を会社に律儀に報告して許しを乞う(5月中旬)
  • 発表に使ったMyApache2::Sinatraticに大バグ発見。Apache上の複数のVirtualHostで使っただけで崩壊なのには自分ながらガッカリした。修正開始。(5月下旬)
  • 体調を崩す。元々弱い腹に胃腸炎が襲来。(6月上旬から中旬)
  • 胃腸炎の後遺症で戻りかけていた睡眠リズムが崩壊して体調が中々戻らない(6月下旬)
  • MyApache2::Sinatraticさらに修正(7月上旬)
  • 忙しかったり体調不良が続いたり(7月中旬)

といった事情もあります。言い訳。MyApache2::Sinatraticはなんとか「動くように見える」レベルまで修正しました。後述。

今回は簡潔に行きます!要約大切!(いまのところの意気込み) → …;と思って書き始めましたが、結構な長文になってしまいました…;とばし読み流し読み大歓迎!もしくは「あとで読む」に放りこんで、時間のあるときにどうぞ!

Hokkaido.pmは #5 から連続3回目の参加です。今回も東京から札幌へ遠征をしました。

このブログの過去記事より過去のHokkaido.pm。

今回は公式サイトの開催報告が良くまとまっていて見やすいです。動画もスライドも開催概要もここからたどることができます。私もトゥギャッターで協力しました。今回のテーマは「Webアプリ「再」入門」。特にWAF(Web Application Framework)の話が多くをしめました。

今回も各トークの私なりの感想を簡潔に書いてみたいと思います。

「ゼロからはじめるAmon2」@akiymさん

Hokkaido.pmの高校生Perlハッカー@akiymさん。「WAF初心者」とのこと。

「WAFとは?」という問いかけから、Amon2の基本的な使い方を紹介。

「Perl WAF といえば Catalyst?」という時代もあったけど、「なるべく学ぶことは少なくしたい。再入門に時間なんてかけてられない」。確かにそうです。

Perlにおける軽量WAFとして、「Amon2」「Dancer」を例示。Amon2がjQueryやTwitter Bootstrapを同梱していたり、Text::Xslateを標準テンプレートに採用しているといったメリットを提示。

スケルトン生成からデモへ。

flavorとしてBasic(デフォルト)とLarge、Liteがある。Amon2::Lite # Mojolicious::Liteっぽい。

コード例から、コンテキストオブジェクト $c からの基本を解説してくださいました。RequestやResponseはPlackからのシンプルな継承。設定ファイル config/{development,deployment,test}.pl を紹介して、これを PLAC_ENV で切り替えられるというお話。

% plackup -E deployment app.psgi

dispatcherはRouter::Simple。

詳細はスライドを見ていただければよくわかりますが、基本的なスケルトンコードを例示。いわゆるSinatraライクですね。

プラグインも紹介。

  • Web::CSRFDeefender → CSRF対策(トークンを埋め込む)
  • Web::FillInFormLite → $c->fillin_form(); # HTML::FillInForm::Lite
  • Web::JSON → $c->render_json();
  • Amon2::Auth → Twitter, Github, Facebook, Loctouch をサポート
  • Amon2::DBI → $c->dbi

実際にウェブアプリを作ってみるというデモもありました。

まずは「オレオレGyazo」を 「% amon2-setup.pl Gyazo」 として生成。FillIn や CSRF は要らないので削除、dispatcher にべた書き(このあたりはスライドが詳しいです) → 短縮URLの実装もやる → SQLite

ネタ的なおまけとして「KENT WEB」をAmon2で書きなおそう!なんてのもあって会場は爆笑。

  • Amon2::DBI
  • Teng
  • Form::Validator::Lite

素材はこれら。「KENT WEB」が最先端の技術で蘇りました。スゴイ。

まとめ:

  • Amon2は非常にシンプルなWAFで、使い勝手がいいのでおすすめ。
  • WAFは好み e.g. Catalyst, Mojolicious
  • Amon2はコードも読みやすいし複雑なことをしていないのでオススメ

簡単なWAFと呼ばれたAmon2のことが概観できて楽しかったです。

「DancerでWebアプリ再入門」 @aloelightさん

こちらもHokkaido.pmの顔ともいえる@aloelightさんのお話。札幌の会社でPerlの開発やインフラまわりをお仕事にされている方です。

今回のHokkaido.pm#7のテーマ「Webアプリ「再」入門」ということでDancerを使ってみた話。

先行の発表者が宣言したWAFを除いて、残ったものがCatalyst、CGI::Application、Kossy あたり…; その中で一番簡単そうで世界で知名度が高かったのが Dancer だったとのこと。

早速ウェブアプリを作ってみたとのことです。文字通りの機能を持つ「AWS Health Info」

  • Twitterアカウントでログイン
  • AWS Service Health をチェック
  • 登録者にお知らせ

次の一声「間に合いませんでした!」惜しい!業務でAWS触り始めた私も「AWS Health Info」に興味津々だったのに…;。

次にDancer の紹介と特色を紹介。特徴としては以下のようです。

  • Sinatra系のPerl整WAF # 最初から
  • すっごくシンプル
  • 豊富なプラグイン
  • 意外と豊富なドキュメント

インストールは簡単「$ cpanm Dancer」。依存 CPAN モジュールも少ないのだそうです。

Sinatraライクな文法なのは前述で触れられましたが、まさかサブルーチンリファレンスで文字列を返却するだけでレスポンスが書けるとは…; → use Dancer; get ‘/’ => sub { return “Hello, world”; }; dance; # これだけのスクリプトで 5000 番ポートで待ち受けるdaemonの完成。

もう少し複雑なアプリケーションの場合は「$ dancer -a MyApp」とするとスケルトン雛形が作成されるのでMyApp/lib/MyApp.pm にアプリを書くとよいそう。シンプル。基本は use Dancer; するだけ。

豊富なプラグインもあります。現時点で Dancer::Plugin 系が 94件。

メジャーなPluginのご紹介。

  • Dancer::Plugin::Database
  • Dancer::Plugin::DBIC
  • Dancer::Plugin::Email
  • Dancer::Plugin::Thubnail
  • Dancer::Plugin::Facebook

もっと知りたい方は「Dancer plugins ecosystem」http://advent.perldancer.org/2011/17 へGo!、だそうです。

Pluginの作り方も簡単とのこと。

ドキュメントも豊富。

  • Dancer::Introduction
  • Dancer::Tutorial
  • Dancer::Cookbook
  • Dancer::Plugins
  • Dancer::Deployment

Dancerの基本文法をご紹介。ここらへんは上述のように簡単。詳しくはスライドや動画を御参照いただけると良いと思います。Config、Cookie、Session、Templateにもそれぞれ独特のDSL構文(所定のオブジェクトを返す0以上の引数サブルーチン)があって、簡潔さを目指しているなぁというところが伝わりました。

ちなみに標準のテンプレート Dancer::Template::Simple には IF,LOOPが無いので Dancer::Template::TemplateToolkit を代わりに使いましょう、とのことでした。

データベースもやっぱりシンプル。use Dancer::Plugin::Database; をすると database というDSL構文が使えるようになってシンプル。前述の Config 等についても、use Dancer::Config をすると config 構文が使えて同様、等々。

これも前述のようなDSL構文が徹底されたリダイレクトやロギングといった部分を解説し終えた後、AWS Health Info のソースコードを読みながら、その雰囲気を味わいました。

やはり前述のような構文が多様されているため「MojoliciousやAmon2と違って $ が少ない」のが特長とのこと。

Twitter連携についてアドバイス。

  • Net::Twitter は Moose 依存
  • Net::Twitter::Lite はそうじゃないのでそっちを使おう

テストには Dancer::Test というのが用意されているので、それを調べて使いましょう、とのことでした。

感想としては、インポートされるDSL構文(詳細を説明すればオブジェクトを返すサブルーチン型のシンボルようなもの)が多くなるものの、メモリ等のコストとしては大したこと無いでしょう。こういうコンセプトのWAFも興味深い。ただ、日本での使用者人口がまだそれほど居なさそうで、何か困ったときの拠り所や頼れる人が不足しているのではないかという一点のみが懸念点でした。それ以外については、これほどシンプルさを目指したことに感心しきりでした。

「Mojoliciousをウェブ制作現場で使ってみてる」@jamadamさん

前回の Hokkaido.pm#6 の二次会で「初対面」して熱いトークをしたのが @jamadam さんでした。その時は全然知らなかったのですが、氏は Mojolicious のヘビーユーザ。英語のMojolicious ML へのコミットや、GitHub に自作の Mojolicious アプリケーションを精力的にアップしている方でした。私も @jamadam さん作だと知らずに使っていた Mojolicious アプリケーションもあって驚いたくらいです。北海道、Hokkaido.pmは、知れば知るほど猛者の集まりです。北海道出身の私は当然北海道ひいきですが、東京の人は地方を見くびっちゃいけない!

Mojolicious は現在の Perl WAF の中でも情報がいっぱいあります。

  • Mojoliciousアプリを簡素に記述できるMojolicious::Lite
  • MojoliciousというWAF
  • Mojoというモジュール群

このあたりの話をまずざっくりと解説されました。モジュール群の継承関連図の美しさ(本人作)には会場も息を飲みました。

最小のMojoliciiousアプリの例示「use Mojolicious::Lite; app->start;」

話はMojoliciousのモジュールMojoの構造の話へ。このあたりは内部設計まで踏み込んで解説されました。そしてMojoやMojolicious関連クラス群の親クラスMojo::Baseの使い方へ。

Mojoliciousはバージョン2.0からPerl5.8サポートが切られ、Perl5.10以上を必要とするようになってしまい、困ったのでmojo-legacyを作ったとのこと。レガシーな環境へのデプロイの仕事を多く持つ @jamadam さんならではの作品ですが、その原動力には感心するばかりです。ただし、本家Mojoliciousのいくつかのテストが失敗するのが困っているとのこと。それでもmojo-legacyは実践投入されているようです。mojo-legacy の話は紹介で終わり。

本題は「ウェブ制作の現場ではデザイナー主導で組みあがったサイトに動的コンテンツを後付けすることが多い。」「それってPHPが最適解」「でもPerlでやる」という一連の流れ。やっぱりPerl!

実践コードをいくつかご紹介されました。紹介された処理をプラグインにまとめたりもしたそうです。詳細はスライドや動画を御参照ください。

感想としては、WAF素人の私としては、今使うなら日本でも使用者人口が増えてきた Mojolicious かなぁ…;と考えていたので、非常に参考になるトークでした。@jamadam さんが内部設計に詳しくそこにフォーカスをあてたトークだったため、前2つのAmon2やDancerのトークよりも難解さを感じはしましたが、まずは Mojolicious::Lite からコツコツとためしてみようと思います。

「Ops Tools with Perl」@riywoさん

東京から招待されたDeNAの @riywo さんによる Ops (運用) 関連のトークです。

Ops に役立つ Perl 製ツールの紹介をしてくださいました。

まずは有名な @kazeburo さんによる作品 CloudForecast。中身のウェブインターフェースはWAFなのですが、Kossyの元祖であるShirahata.pmというものを使っているのだそうです。Shirahata.pm、名前すら聞いたことありませんでした。

次は GrowthForecast の紹介。こちらのウェブインターフェースは WAF Kossy とのこと。

話はウェブから離れつつ、「はかどる系」のお話へ。

Alien::RRDtool の紹介。名前の通り RRD のモジュール。

chase-tail というツールの紹介。@hirose31 さん作。tail をしながら、指定したものがあればお知らせしてくれる系(だったかな)。これはシンプルなツールゆえ、すぐに活用ができそうです。以下のようなコマンドラインですぐに使えるそうです。

$ tail -f error_log | chase-tail -l 10 -t various_error

そして App::Ikachan のお話。@yappo さん作。これは私も使っています。簡単なHTTPでしゃべらせることができるIRCボット。障害が起こった時等、curl 等のよくあるHTTPクライアントツールで ikachan を叩けば、ikachan が IRC 上ですぐに教えてくれるといった使い方。

@riywo さんは「Touryo」というツールを作っているそうです。コンフィグ管理ツール。ただ、まだソースコードを出すことができないそう。会社でコンフィグ管理の必要性が発生した際に、ChefやPappetでは収まらない要求があったために自作したとのこと。基本はCLIツールだが、ウェブ管理画面もあって、それはAmon2中心に作っているのだそうです。

コンフィグはサーバごとに微妙に違ってくるケースがあって、それが既存ツールでうまくできない部分なのだそう。Touryo、公開が待たれますね!

内部的にはサーバにSSHしているけど、Net::SSH は ~/.ssh/config を読まないので使わなかったとのこと。そういう制限があるんですね。IPC::Cmd で ssh を呼び出すというスタイルを取っているそうです。これなら ~/.ssh/config も反映される。

最後に「どんな言語を使えば良いか?」という問いかけ。色々なスタイルの言語がある。スクリプト型、コンパイル型といった分類。手続き型、オブジェクト指向、関数型言語といった分類。普及しているか否かといった分類。

やはり選ぶとしたら普及している言語を選ぶべきという話。ライブラリが充実していることと、みんなが読めることがその理由

そしてTouryo等でPerlを採用したのは「I love Perl」だから。早く書けるし、なにより自分の周りにPerl Mongerがたくさんいたこと、そしてCPANの存在。

感想としては、私の会社ではインフラや運用はプログラマや開発とは部署が完全に分かれていて、インフラや運用で専用ツールを作るといった発想が無かったです。インフラ部署に行くとプログラムからは離れてしまって寂しいのではという印象すら持っていた。もちろん、既存ツールを使うという選択肢はインフラ部署で取られてはいますが(Nagiosとか)。私も元々インフラ志望だったこともあり、プログラムで「はかどる系」を促進していく、@riywo さんのようなインフラ運用を担うプログラマに憧れを抱きました。

LT

ここはメモが欠落しているのですが、記憶では1枠のLTがあったのみで今回は枠が2つ余っていました。冒頭で書いた通り、会社から「発表すんな」と言われていたのですが、こっそり秘蔵ものを持っていたので、空いているLT枠の話を聞いた時に休憩時間の10分間で簡単なスライドを作って「飛び入りLT」をやってのけました

このLTには動画がありません。会社にバレたときに怒られる可能性があったので、Ustreamを切ってもらったのでした。その後、会社から「それくらいいいんじゃない」と言われたので安堵しましたが…;。また、当初のスライドは10分で作った15枚くらいのスライドで、実際は後半3分ほどは拡大したEmacsにコードを移してカーソルを動かしながら解説したのでした。

私は mod_perl Hacker (Baka) として Hokkaido.pm で前2回トークをしているので「今回もmod_perlで無茶しやがって…;」といった笑いを頂くことができて嬉しかったです。テーマに従って、素の mod_perl を WAF っぽくするという無茶ネタ。興味ある方はぜひスライドをご覧ください。

その後

それでも余ったLT枠の時間で @onagatani さんが Hokkaido.pm についてのお話をされて、さらにそれでも余った時間のため、いつも押し押しになるにも関わらず時間を余しての終了。

懇親会までの時間も必然的に余るわけで「もう懇親会の会場に行っちゃおうか」という声が自然と沸き起こり、普段は19時あたり開始の懇親会をが17時45分に始まることになりました。

懇親会

居酒屋の座敷部屋での懇親会でした。東京からいらっしゃった@riywoさんのために、北海道の海の幸が存分に振舞われました。「カニの刺身が食べられるのはHokkaido.pmだけ」。美味しいものが食べたい方はぜひHokkaido.pmへ行きましょう!トークの質も(私は置いといて)みんな濃い!今最も熱い地方.pmのひとつと断言して良いのではないでしょうか。

二次会

バーのようなところに入ったのですが、すし詰め部屋に押し込まれてトイレに行くだけで大混乱、しかも外野が騒々しい(ダーツやってた?)という中々の環境でしたが、懇親会で入ったアルコールで皆さん打ち解けて話ができました。

三次会

三次会恒例のラーメン。@onagatani さん自信のコースです。東京からいらっしゃった方々も札幌ラーメンに舌鼓を打っていました。

そして、開始が早かったことで、Hokkaido.pm にしては異例の23時解散となりました。結果的に開始が早かったことで解散も早く、身体への負担も減った感じです。次回も懇親会は17時45分開始くらいにしても良いのではないでしょうか。

まとめ

結局長文になってしまいましたね…;。ここまで熟読してくれた方、飛ばしながらも読んでくださった方、ありがとうございます

当日リアルタイムにEvernoteにメモを取っていたので、トークの概要の大方はコピペ修正で編集しています。それでも執筆時間は2時間ほど。遅筆…;(なのかな)。でもせっかくの熱いHokkaido.pmの活動、なるべく活字として残しておきたいという思いをどうか汲みとってやってください。

Hokkaido.pm#5 で初pm参加 + 初トークをしてPerl仲間が劇的に増えました(YAPC::Asia Tokyo は2007年から参加しているけどいつもぼっちでした)。東京在住ですが北海道出身の私にとって、Hokkaido.pmは文字通り私の故郷でありパワースポットであり、意欲や情熱などの大切なものを色々頂いている本当に素晴らしい場所です。主催の @onagatani さん、@aloelight さん、その他常連の皆さん、本当にいつもありがとうございます。次回も都合をつけて絶対に参加します!今から本当に楽しみです。

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

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に意欲と情熱を貰った一年でした。

今回も長文となってしまいましたが、ここまで読んでいただいた方、ありがとうございます。

Hokkaido.pm#5 参加レポート

Hokkaido.pm#5 に参加しました!

東京在住なこともあって、PerlといえばYAPC::Asiaには毎年聴講には行ってはいるのですが、その他の小中規模の勉強会やカンファレンスの出席には、恥ずかしがり屋の性格が出たりしてなかなか足が向きませんでした。そんな中、今年(2011年)のゴールデンウィークの谷間に永谷さん(@onagatani)とお会いしたことがきっかけで、Hokkaido.pm初参加の上に人生初スピーカーまでやることになりました。本当にありがたい出会いでした。

自分の発表分「mod_perl温故知新」の振り返りも含め、参加者の皆さんの聴講内容を自分なりに振り返っていきたいと思います。

最も素早くレポートをブログにアップした@hirataraさんの記事「今日はHokkaido.pm #5の日です」や、参加者の皆さんのレポートを集めた@aloelightさんの「Hokkaido.pm#5の参加レポート一覧」は今回のイベントの良い参考になると思います。

以下、レポートというか私の主観が入った感想文寄りになっています。長文ゴメンナサイ。

@charsbarさん「今年の夏休みは」

PerlでSDL、ゲームを作る。Perlではそこそこ知られている?ニコ動で検索するとPerlでSDLやってる動画が出てくる。Ruby SDLは元気とのこと。

ゲームはLTのネタとしていいよという話が出ました。2006年に数独をテーマにして好評だったとのこと。今回のLTでもマ◯オが動いていたので、まさにタイムリー。

倉庫番が軽快に動いていました。6000行程度のこと。

次が自分の発表だったので、メモはそこそこ、聴講しながらも緊張していて内容があまり頭に入ってきていませんでした。申し訳ないです@charsbarさん…

@xtetsuji「mod_perl温故知新」

はい、私自身の発表です

人生初スピーカーなので「持ち時間20分。20秒1枚で80枚スライド作ればいいかな(算数がそもそも間違っているところもポイント)」と血迷ったことを考えた挙句、緊張と気合を入れすぎて100枚近く作ってしまい、前日の夜に慌てて枚数をreduceしたものの、90枚程度になってしまいました。スピーチ練習の時も20分に収めようと思って早口芸人のようになってしまい、大丈夫かな…でももう時間ないし…といった状態で望んだ次第です。

スライドにも書いた通り、あまり新しめのネタを持っていなかったのと、mod_perlなら私自身いろいろな知見を持っているということもあって、テーマをmod_perlにしました。正直「mod_perlはオワコン」なんて質問が来ないかドキドキでしたが(冒頭でPlackの話を出したのもそんな恐怖心からだったり)、後でTwitterを眺めてみると「PerlTransHandlerをmod_rewriteのリファクタリングに使う」といった前段のネタに関心してくれた方も居らっしゃったようで安心しました。

それこそ辞書のように分厚いApache C APIの書籍やmod_perlの書籍自体が出ているくらい(しかもツライことにほとんどが洋書)で、そんなmod_perlの全容を話すことは20分では到底できませんが、Connectionサイクル・フェーズでSMTPサーバを実装して商用サービスに投入して安定稼働させている、という部分のコンセプト紹介と多少の自慢ができてよかったです。

スライド中でも解説しましたが、qpsmtpd自体にもApache2のConnectionサイクル・フェーズで動作させる Apache::Qpsmtpd なるものがありますので、今回のApache2の意外な利用法に興味を持った方はそちらをご覧いただくと良いと思います。

余った時間をいただいて25分にしていただいたのにも関わらず、IV部のnginxの解説(PerlEmbeddedModuleとmod_perl1の類似性)とまとめ・参考文献までたどりつけなかったのは明らかに盛り込みすぎでした。ここは反省点でしたが、多様なウェブサーバ・WAFの選択肢がすでにある現代でも、むき出しのmod_perlに興味を持っていただける方が少なからずまだいらっしゃることは分かったので、今後は日本語の情報を私の手で出していければなと思った次第です。

以上、反省会終了です。ご意見いただければ私の活力になります!

スライドは近日中にどこかにアップします。アップしたら Twitter @xtetsuji などでお知らせします。

(2011/07/22追記)

SlideShareにアップしました http://slidesha.re/ofTYRS

また、以下のUstream録画から私の発表の様子をご覧になれます。

@lapis_twさん「libperl++」

C++のコードをPerlで使えるようにするライブラリの話?私、CとかC++分かりません!けど、書ける人できる人尊敬します!

XSはCのバインディングだけど、ExtUtils::XSppというのがあってこれがC++のバインディング、みたいな話。

デモが動かなかった!YAPC::Asia2010では動いたのに!

CやC++を勉強してみようと思ったセッションでした。

@nekokakさんのセッション

様々な有用なプロダクトを世の中に輩出している@nekokakさんですが、今回は特定プロダクトに偏った話ではなく、ご自身の経歴や、エンジニアはどうあるべきか、といった「スピリチュアルな話」をされました。

昨年のYAPC::Asia2010で「省サーバ運用」を発表してベストスピーカー賞を受賞するほど共感を多数もらい、みんなが感じていたことだと思ったとのこと。

「カンファレンスは情熱をもらう場所」という言葉には心打たれました。YAPC::Asiaに聴講しに行ってもそうですが、発表者になるとフィードバックが返ってくることで、もらえる情熱はより多くなることも今回実感しました。

相反する事象「自分で作ったものが使えない」「自分で作ったものを使え」といったお話も。TengやDBIx::Skinnyは自社では使えない…けどそこは折り合い。自プロダクトにこだわりすぎてはいけない。だけど、KamuiもQudoもDBIx::Skinnyも自分が使うために作ったもの。そうでないと良い物は作れない。「ドッグフードを食べよ」はまさに的を射た言葉でした。

尊敬するエンジニアに樋口さんと@tokuhiromさんを挙げられていました。客観的に判断ができ、視野が広い、そしてなにより技術力がある方々であると(私がざっくりと表現してしまいましたが)。

エンジニアはモノを{作る,使う}だけで終わらない事。リーマンプログラマも製品開発に必要な要員ではあるが、自分がどうなるかは全ては自分次第。

nekokakさん自身の歴史。謙遜は入っているとは思いますが、社会人最初の2〜3年は文系出身のリーマンプログラマだったとのこと。そして少しずつステップアップしていって、YAPC::Asiaに応募するまでになった。

DevOpsの話。開発と運用のコラボ。小規模な会社だと開発者==運用者であることが多いですが、開発者とインフラ担当者の分断めいたものを一時体験した私にとっては、結構興味深い話でありました。チーム一丸となって相互理解をして作業していきたい私にとっても、今後DevOpsはウォッチしていくキーワードになると思います。

「この中でYAPCで発表する人」と挙手アンケートがあった気がします。私は前の席に座っていたため会場を全貌できていなかったのですが、挙手する人は(ほとんど or 全く)居なかったようです。確かに私も次がYAPCだとさすがに敷居が高いので、もしYAPCでやるなら数年後、地方.pmや地方OSCでスピーカーとして修行を積んだ後かな!と心の中で思いました。でもいつか立ってみたいYAPC::Asiaの壇上!

WEB+DB PRESS PerlHackersHubへの投稿→JobQueue。Perlコミュニティを盛り上げていこう!ぜひ北海道から、という締めのお言葉でした。

個人的なことですが、YAPC::Asia2010で「省サーバ運用」のセッションを聴講してから、私は@nekokakさんのファンになりました!懇親会等でも相談に乗っていただきましたが、著名な方と近距離で話せるHokkaido.pm、オススメです。

JPA++

@dont_cocoaさん「テスト駆動開発」

TDDのお話。

TDDBCというTDDについての勉強会?が札幌で行われた。@t_wadaさん主導、ペアプロ形式。

例としてwalk,say,stopの3メソッドを実装するPersonクラスを例に説明。実際に実装をしていく簡単な例は、あまりTDDのことを知らない(必要性は以前から感じていたけど)私みたいな人にとっては非常にありがたかったです。最初は必ず自明にFAILするテストコードを書いてそれをPASSするコードを実装していく、の繰り返し。

TDDをやってみて感じたことは、見通しの良いコードを書くようになったとのこと。確かにそうかも。

質問タイムで、異常系のテストへの対応と、VCSとのつながりについて話題に上がりました。注目されています。私の会社でも少しずつTDDを導入していきたいと思いました。

LT

  • @akiymさん「Base64を再実装する」
    高校生!Amon2にモジュールをコミットしたり、いくつかのプロダクトにpull-reqしている 。アクティブな方。
    Base64はイケてない!→アルファベットと数字→じゃぁひらがなで→Acme::Collector64→Japanese64と読んだらいいよ→ 秘密の暗号やふっかつのじゅもんにどうぞ→ひらがなじゃなくても魚へんの漢字でもできるよ(demo)→カッコイイ
  • @koji**さん「道具の要らないHello World」
    スライド無し、ノートパソコン無し。何も「武器」を持たず壇上に立つ姿はある意味かっこ良かった。
    perl -e ‘print “Hello world!”‘ と指で書く。ここから色々な要素を解説していく。Googleに頼らないでまずいじってみる。
  • @hirataraさん「ウヰスキーとPSGI」
    uWSGI=>ウィスキーと読む。面倒なので Plack::App::uWSGIを書いた。 デモでウェブサーバに接続してみる。
  • @techno_nekoさん「Perl meets beat」
    テクノ好き。 ハンドル名にもtechnoが入っているくらい。なので今回PerlでWAVファイルを生成してPerlでテクノを実践してみた→音がリズムよく鳴った→会場湧く→質問「それどのソフトで作った音ですか?」疑惑(ネタ)
  • @keroyonn_さん「Perl meets 次世代ゲームコンソール」
    iPhone/AndroidにはPerlの開発環境がない(SL4Aはあるけど…) →iPhone/Androidの数よりウェブサーバの数のほうが多い→圧倒的じゃないか!→デモであのマ◯オを動かす→会場湧く→実装は AnyEvent+TermKey+Curses→銭が欲しい→流通はCPANで無料配布して暇なサーバ監視員を堕落させる→堕落したサーバ監視員を監視するサービスを経営者に売る

その後

懇親会まで時間があったので、@techno_neko さんの疑惑を晴らすべく、数名の方が実際にGitHubにアップされているコードで実験。実際に音がなって疑惑解消。

懇親会

北海道ビール園(札幌ビール園ではない)でカニづくし。すごかった。北海道の美味しい食べ物が食べたい人はぜひHokkaido.pmへ来るといいと思います。

二次会

場所を移してまったり飲み。@onagataniさんが@nekokakさんにKamuiラブしていた。今ならAmon2じゃない?といった話の流れ、等々。

まとめ

Hokkaido.pm は初参加でしたが、レベルの高い話を聴講できたり、自分も初スピーカー体験ができたり、懇親会では有名人の方々と近い距離でお話ができたりと、とても楽しい体験ができました。

私自身は、その後五次会まで参加して、特に四次会では@aloelightさんとmod_perlについて熱心に語らせていただきました(一方的に熱が入ってしまいスミマセン…)。ずっとお会いしたかった@usa2jpさんとも二次会の後半から五次会までお話できて、とてもよい経験ができました。

あ、初トゥギャりしてみました「Hokkaido#5 まとめ」http://togetter.com/li/164058

以上、長文になってしまいましたが、Hokkaido.pm#5 参加レポートでした。ここまで読んでいただいた方、ありがとうございます。