Hokkaido.pm #10 に行ってきたのでメモを晒したり感想をかいてみるよ!
8/31(土)に開催されたHokkaido.pm #10 に参加してきました!!
以前より参加したいなーという思いはあったのですがなかなか都合が付かず、これまではずるずると参加せずじまいでした。 今回関東から実際に参加してみて、「またいきたい!」と思わせるものでしたので、道内にお住まいのPerlに興味がある方はぜひ、次回以降参加するとよいと思います。
今回僕が発表に使ったスライドはこちら。
懇親会では極端に飲みすぎて、気がついたら北広島の駅にいた、という大失態をやらかしたり、一緒に飲んでいたメタルなCPAN Authorの@itrysdさんの一言にじんわり来たり、onちゃんグッズを忘れて着払いで送っていただく等のイベント(?)も発生し、とても心に残る思い出となりました!
あと、こういう勉強会に参加するときはYAPCレポーターだったときのくせもあり、自分なりにザクザクッとしたメモをとっているのですが、折角なのでこれもほぼそのまま載せておきます。
レポートメモ
@jamadam - フォームバリデーションを自動化してみた
field != validation rule
formのDOM構造からValidation Ruleを自動化
Mojolicious::Plugin::FormValidatorLazy
HTML5で<input pattern="\d\d\d">のようにパターン指定したり、<input type="number">のような型指定をしたりできる
問題点など
JSバリバリのアプリでは役に立たない
schemaの生成が高負荷
Web Application Firewallという分野で既出か。
session fixationの問題があるとの指摘がありました
@akiym - Perl meets ******* (Leap Motion)
最近作ってるもの
akictf - セキュリティ系のクイズを提供する
Leap Motion
次世代デバイス
手のひら、細かく認識
WebSocketでデータを取ってこれる
Device::Leap
とりあえずかいたっぽい
モーションを取れない
いけてない
AnyEvent::LeapMotion をつくった
OS Xでマウスを動かすモジュール Cocoa::GuiTestを作った。まだ不安定。
まとめ
PerlからLeap Motion
Cocoaモジュール、まだすくない。
github止まりモジュール5選
Text::PicoTemplate - 変数のみサポート。置換よりは柔軟に。
Text::Chinese::Numelize - 漢数字を数字に。正規表現で。
Cocoa::NetworkChange - ネットワークが変更された時のトリガを提供。(OSX用)
Iroh - Yet Another Teng (Iroha からaを引いた)
WWW::FC2::Download::Video - www::なんとか::downloadシリーズ。うふふ動画ほしいれすw
@xtetsuji - イベント駆動とノンブロッキング
後輩とAnyEvent::IRC::ClientとTwiggyの勉強をしていたとき、AE::timerなどとも連携してイベント駆動を実感。
後輩「今作っているIRCBotが時折応答しなくなるんですが」
ブロッキングとかノンブロッキングとかなんだ? - こっそりググる
i/oブロッキング - ブロッキングの代表例、I/O。
色々実験。AE::timerのcbでsleep 10; など。
AnyEvent.pmを読む
AnyEvent::Loop にwhile 1; があるはず・・・
sub run { one_event while 1; }
timesシステムコールをなるべく抑えるっぽい絶妙な仕組み
効率化なのか、すごいリファレンス
ビット演算
読んで理解すれば充実感にひたれる?
ここまでのまとめ
イベント駆動=並列処理を実現するための手法の一つ
他にはfork, threadなど
イベント駆動ウェブサーバ
C10K問題への対処
NginxやPerl製各種webサーバの登場
ApacheもEvent MPMを2.4から正式リリース。 - まだパフォーマンスがそこまで出ていない
Apache Prefork MPMの頭打ち問題
Nginx HTTP Perl Module
mod_perl 1 の書法の影響が見られる
HTTPに特化したもの
N/W I/Oでとめないように気をつけるのは昨今の他のwebサーバと同様。 -> job queueへ依頼。
ModPerl::PSGI - mod_perl2でかかれたPSGI実装
URIのパースコストは結構高いケースがあったりする
@nekokak - Not Tech Talk 最近の取り組み
前はエディタ、今はgmailとスプレッドシートがお友達
スラングまじりの英語の学習
fxxk fxxk ばっかかいてたら新卒に怒られる。
共通技術基盤
新規事業とかやって色々作る
やっぱみんな同じとこで困っておなじように問題解決
自分のチームで共通技術基盤チームをつくった
自分たちで解決した問題を宣伝
いろんなとこに首突っ込んで宣伝
遺書にやってくれそうな別部署捕まえてすすめていく
社内鉄区トークとかやってどういう取り組みをしているか宣伝
そして生まれた - Baran (バラン)
DeNA内のInfraに特化した内部共通モジュール群になった
会社依存のない物はCPANモジュールにしたい(Baran::PushNotification など)
新しい取り組み
新規PJを始めるときは必ず新技術を取り入れるようにしてる
nginx
JSON-RPC Server Framework(Shiva)
Auth Proxy Server(Vishnu)
SOA化の推進
JSON-RPCのmethod単位でplackup -> リクエスト数がメソッドによって異なるので用途ごとにスケールできるように
マネージャになるときに思ったこと
コードかきたくなることもあるが、本気でかいたらまけ
一人で上げられる成果はたかが知れてる
github止まりモジュール
Komainu - fluentdにおきかえられt
Class::Anon
Data::Koyomi - NASAのデータAPI(月の運行データ)が必要
PagerDuty
アラート用のサービス。アラートメールを受けるようにしといて、誰も反応しなければ優先順に基づき電話がかかってくる。
@tokuhirom - CPANと私
立場が変われば技術も変わる
受託、納期・・・
CPANモジュールの選び方
他人のコードのおかげで動かないことは嫌い
モジュールの客観的な選別手段
更新日を見る
CPANTestersの結果を見る
t/が寂しいモジュールは使わない
バグトラッカーへの登録数をみる
作者による選別
CPAN Authorsは個性にあふれすぎだが、くせがわかると割と何とかなる。
***は高速
***はテスト動かさない、インタフェース重厚
***さんのモジュールは実際には使ってない
***さんだから非互換の変更をする
etc., etc...
信頼の人たち
gfx, dgolden, miyagawa, rjbs, makamaka ...
速度
メモリ消費量
後方互換性
最重要
動いてたコードが動かなくなるのはすごく嫌
結局他人にきくのが一番良い
Twitter, Lingr, などなど。
最終的には自分でメンテしてもいいな、というものを選ぶ。
補足
流行り廃り
アーリーアダプターの穴掘りに付き合う必要なし
実例
アプリケーションサーバ
Starlet good
Twiggy good
Starman catalystのサーバをplack向けにしたもの、Net::Serverベース。中身が追えない。
FCGI bad - 中途半端でくせがある。
CGI - まれに使う
mod_perl - apacheつかってない
オブジェクト指向関連
Class::Accessor::Lite good
Class::Accessor::Fast
Mouse good
Moo 微妙だけどCPANモジュールかくのに使う。海外ではMouse嫌われてるようなので、Mooだとよい
Moose bad
AnyMoose bad
今後はMOP::Redux
CPAN インストーラ
cpanm good
cpanshell bad
cpanplus bad
ORM
Teng good
DBIx::Skinny コードが嫌い
DBIx::Class Mooになって素直にメンテされてるが、使う理由が無い。どこでクエリが発行されてるのかわからなくなる
Class::DBI bad
日付関連
Time::Piece good
DateTime bad おもい。日付の計算の挙動がだめ
JSON
JSON::PP good 十分な速度
JSON::XS good
JSON.pm つかうなら上記いずれかを直接。
Cpanel::JSON bad
JSON::Any bad
CPANモジュールの使い方
plenv, cpanm, carton
Linuxならsystem perlを使っても良い、が、-Dusethreadsなので速度遅い
Perl-Build
perl5 builder/installer
PLENV_VERSION環境変数でもversion指定可能
cpanmのはなし
plenv install-cpanm
インストールしなくても使える
cpan とか perl -MCPAN -eshellとかやめたほうがいい
cpanm -n Carton
cartonのはなし
cpanfileに依存関係をかいておく
carton installで一通り入ってくれる。
cpanfile.snapshotを元にlocal/を復元できる
github止まりモジュール
O/R Mapper-resultset
PVIP Perl6パーサ
Seis - Pwel5 is DSL for CPAN... Another DSL ? PERL6!
Perl6 to Perl5 transpiler
like coffee script
内部的にautobox使っている。autoboxはパフォーマンス面でみても悪くない
seis の demo
LT
@aloelight - Plack::Middleware::Assets::RailsLike
@techno_neko - PDLをつかってみよう
@ytnobody - 天気関連のものやXML関連のものについて
@irtysd - Guiter::Scale のはなし