こんにちは、おがたです。
8月31日に行われた Hokkaido.pm#10 に参加してきました。
- ATNDの参加募集
- Hokkaido.pm#10 を8/31(土)に開催します | event | Hokkaido Perl Mongers
- Hokkaido.pm#10 開催報告 | event | Hokkaido Perl Mongers
- Hokkaido.pm#10 まとめ – Togetter
詳細は上記の開催報告が詳しいです。参加者のブログ記事もまとめられています。
場所はいつものところ
いつもよりかなり遅めにホテルを出たのですが、現地に向かう途中で @ytnobody さんにあったり、@akiym さんにあったりしました。13時開場を13時開始と勘違いしていてみんな焦っていたという…。
あと、開始直前に LOCALの @koiwa さんが颯爽と現れて、学生支援の(?)クオカードを置いて行きました。「せっかくだから少し見ていきませんか」って言ったのですが、用事があるらしく、一瞬だけ来て颯爽と去って行きました。
今回も前回同様Ustream生放送はありませんでしたが、@onagatani さんが一部を録画していたようです。後日公開されてるかもしれません。期待。
今回は開催に当たって大きなイベントを避けたつもりが、どうやらバレーボールの世界大会にぶつかってしまったようで、2ヶ月前にも関わらず宿泊先をおさえるのに相当大変な思いをしました。最初は「どうしてこんなに予約埋まっているの?」って感じでした。以前(#8)のSMAPとフィギュアスケートがぶつかったときのような、恵庭まで遠くに宿をとるのは避けたいと思ったので、結構お高いホテルでしたが空室があったすすきのの宿に宿泊しました。
以下、私の手元のメモより。メモを取りきれなかった部分もありますので情報としては不完全、ダイジェスト版だと思ってください。詳細は、上記まとめエントリから各スライド資料を参考にするなどしていただければと思います。
Contents
フォームバリデーションを自動化してみた
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秒」は困る。
後方互換性に対する姿勢
- 最重要
- 動いていたコードが動かなくなるのはすごく嫌
結局は他人に聞くのが一番いい
- 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があるから補完されているという雰囲気もああるようですが、私に取ってついでに帰省するきっかけにもなるし、どんどん開催して欲しいです!