Hokkaido.pm #6 に参加した

Hokkaido.pm#6開催のお知らせ | event | Hokkaido Perl Mongers

自分メモ。

  • aloelight(YSASAKI)さん 「Carton使ってみた」
    • Cartonとは
    • "carton install"
      • 依存情報はcarton.lockに これをバージョン管理すると良い
      • "--deployment" carton.lockから情報を取り出してインストール
    • "carton exec"
      • PATHや@INCを適切に設定してコマンド実行してくれる
    • 使用事例
      • Tweet::ToDelicious
        • git clone, "carton install --deployment", "carton exec -Ilib ./bin/***.pl"
        • 簡単!
      • 某サービスのJSON RPC Server
        • OrePANを使用
          • PERL_CPANM_OPT ではなく PERL_CARTON_MIRROR を使うこと
    • 感想
      • Cartonいいね!
      • simpleで簡単
    • おまけ プロジェクト環境の構築
      • perlbrew, cpanm. "create lib $PROJECT" とか "switch perl-5.14.2@$PROJECT" とか
  • akiymさん 「botのつくりかた」
    • AnySanを使う
    • Twitter botの書き方
      • DEMO
    • IRCは高校生はあんまり使わない!
    • Skype botを作りたい
  • nekokakさん
    • まだ転んでないよ!
    • JobQueue & Message Queue
    • Distributed Job Queueについて
      • なぜ作ったか どういうフローで どういう思考で開発したか
    • 経緯
      • daemontoolsの情報をwebで見たい
      • webのユーザでsudoさせるのはイヤ
      • そこでqueueを介してやれば…?
        • Gearman
          • しかしこんなちょっとしたツールのためにgearmandは ><
          • workerプロセス常駐させる無駄とか
        • ZeroMQ
          • しかしまだ仕様が変わるらしいとの噂
        • 自分が望むのは
          • workerプロセス自体がlistenして待ち受けるような
          • せっかくだから自分の思うがままに
    • どういう風に作ったのか
      • 自分の理想とする仕様をとにかく考える
      • 自分が使うとしたらどういうI/Fが良いか
      • さっくりI/Fを書いてみる
        • 使用イメージの疑似コード
      • それから実装
    • みんなは?
      • どんなこと考えながら設計したり実装したりしてるの?
    • Clutch
      • 簡単なプロトコル
        • "$function\r\n$args\r\n" argsはData::MessagePackで
        • Storableの問題点 バージョン違うとserialize/deserialize失敗したり
      • Data::WeightedRoundRobin
        • 重み付けRR
        • すべて同じweightでも完全に均等になるとは限らない、のは注意ね
        • DEMO ...どっかいった
      • 分散
        • memcached, Gearman, MogileFS 分散方法いろいろあるけど
        • 中間での処理がないならRRが良いのでは
      • admin
        • clientがadminに問い合わせてworkerを知るようにする
        • 使うケース、使わないケースでDEMO
        • adminからworkerの生存確認、除外などできたら良いかも?
      • clientでやりたいこと
        • multicast requestを実装したい
          • 例えばMySQLレプリ遅延防ぐために全部に同時にクエリ投げる
        • MQ的な投げっぱなし
    • Job Queueを作る際に気をつけること
      • Jobは可能な限り保護する必要があるか?
      • lockの粒度、lock方法
      • qps
    • 重要なこと
      • どんなモジュールを知っているか、使い方を知っているか
      • 仕事で使わないようなものでもかじっておくと、幅が拡がる
  • xtetsujiさん 「mod_perl hacks PHP
    • mod_perlとかオワコン」禁止
    • mod_perl振り返り
      • 真髄はApacheモジュールで出来ることをPerlで書けること
    • 今回はmod_perl2の話
    • PHPあるある
      • PHPをdisっているわけではない
    • 本題
      • PHPの実行時にPerlで処理を挟みこむ
    • Authen/Authz Hacks
      • PHPの認証がマズかった場合に
      • Apache2::AuthCookie
    • Output Filter Hacks
      • Output Filterの書き方
      • Filterあれこれ
    • まとめ
      • PHPはレスポンスフェーズでは控え目なので思う存分mod_perlが使える
      • mod_perl情報を提供していきたい
  • hirataraさん 「循環参照について」
    • 循環参照とは
      • リファレンスを辿ると自分に戻る状態
      • GCの仕組みによってはメモリリークする
    • Perlはreference counterを使っている
    • 循環参照の例:
      • Template::Plugin::Filter
      • AnyEvent subが実行されてundefされれば問題ない
      • ちょっと変な例
        • Devel:Peekで確認
    • リークを見つける5つの方法
      • psする ("ps -o rss= -p $$")
        • OSからの情報なので確実
      • Test::LeakTrace
        • Test::Moreと合わせて no_leaks_ok
      • Devel::Cycle
        • 結果が見やすい 見つけられるのは基本的に循環参照のみ
      • Devel::Leak::Object
        • Objectに対して
      • DESTROYをいじる
        • DESTROY時にwarnをはさんで調べる…!
        • 解放順を追いやすい
      • おまけ: Devel::Gladiator...?
    • 循環参照を直す5つの方法: コールバック周りは循環参照しやすい
      • 鎖を切る(undefする)
        • 切り忘れするとリークする
      • Scalar::Util::weaken
        • 弱参照にしてやる
        • オーナーを意識しないと解放されてしまうので注意
      • 必要な部分だけを保持する
        • 他の変数に代入して使う
      • 引数渡しにする
      • Data::Decycle
        • 生存期間中はquardオブジェクトを保持する必要あり
    • まとめ
      • 循環参照はリークの素なので避ける
      • 様々な方法で調査しよう
      • リークしないようなコードを書こう
  • onagataniさん 「YAPC::Asia Hokkaido実現に向けて」
    • スタッフ募集!
    • 大枠のスケジュールを確定させる
    • 会計処理 超重要
    • 参加者増の施策を