北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

今日は Yokohama.pm の日です

こちらでustされますので、早めにテレビの前に集まりましょう!

QudoxSkinny / nekokakさん

DBIx::Skinny
  • 昔はSQL::Parser。今はルールベースでオブジェクトにマッピング
  • Data::Modelに近い
  • setupで接続情報、install_tableでテーブル情報
  • install_utf8_columnsとかinstall_inflate_rule → ルールベースでの設定
  • SQL::Parserを使うの辞めたら、開発が盛んになった → 速くなったら戻ってくる
  • まとめ: やりたいことは大体出来る。githubにあるのでどうぞ
Qudo
  • TheSchwartzにかわるJobQueueシステム
    • Skinnyをベースにしたかった
    • githubの練習がしたかった
    • TheSchwartzのスペルが覚えにく過ぎる。拡張がむずい。挙動を知りたい
  • QueueDoでクドー
  • 特定のO/Rマッパに依存しない
    • TheSchwartzはDOD*1べったり
    • ラップしてる。作って欲しい。
  • 拡張しやすい → HookPointがある。欲しければ足す。
  • 設計: Master → Manager*2 → Worker → Job
  • エラーをどこまでも溜めれる
    • TheSchwartzはエラーを一定数以上保持しない
  • reenqueue(リトライ)しやすい
  • 監視系のメソッドの準備
  • Qudo::Test でテストしやすい
    • Qudoの開発で最初に書いた部分
  • Plugin作成可能
  • Qudoの使い方
    • Workerを実装 (workを実装)
    • enqueue用Qudoオブジェクトの作成
    • Manager用のQudoオブジェクトの起動
  • Qudo::Hookを継承してフックを作る
    • 登録周りは調整予定
  • Qudo::Pluginを継承してPluginを作る
    • register_pluginsする
    • こっちも調整予定
  • デモ
  • 実績: 社内で1案件あり。今後はTheShwartzと置き換える
  • githubにあり。目標はCPANうp
  • 質疑応答
    • Q. 自分で描いたWorkerとかもテスト可能?
    • A. 見るDBさえ変えれば、テスト可能

DI x Perl / lestrratさん

  • DI = Dependency Injection
    • オブジェクトの自動組み立て
    • 依存関係を満たして初期化
  • 手動組立の問題
    • 書き直し、依存関係、オブジェクトが多い、面倒
  • DIの仕組み: Assembler + クラス定義 + 依存関係定義 → オブジェクト群
  • PerlのDIコンテナ → Bread::Board*3
    • 本番で使ってるユーザは恐らく一人(作者談)
    • と、33rpm
    • dannさん
  • 今までのBread::Board
    • APIDSL
    • 自分のアプリにあわせて継承する
    • 構成要素がサービスごとに切られてる( schema/master 等)
    • 結局全部自分で定義している
  • 牧さんが3月頃にBread::Boardをforkしたとのこと
    • 現在、APIを踏襲してport中
  • 新しいbread::Board
    • DSLはBread::Board::Declareへ
    • MooseX::Bread::BoardでMooseとの親和性
    • PATHはURLライク(Path::Router パッチ適用済)
    • クラス定義に依存関係を埋め込む
  • 注意: 以下は牧さんが提案した段階のものなので、まだ決定ではない
  • inject, param, get ←これだけだとService Locator
  • Mooseと融合してDIになる
    • MooseX::Bread::Board
    • bind_param で、Bread::Boardに設定する
    • Bread::Boardが持つ情報は、 param:// と言う名前で指定
    • bind_constructor → new以外のコンストラクタを使える
    • inject_namespace で、依存関係を読み込み、 getでオブジェクトを取得する
  • 1クラスについて複数インスタンスを使う場合は、直接BreadBoard APIを叩く
  • 他の言語のDIとの差
    • プログラム可能、クラス定義に埋め込み可能、XML不要
  • 質疑応答
    • Q. MooseX::Bread::Board してるクラスはBread::Board経由じゃなくても普通に使えるのか?
    • A. 普通に使える。metaクラスに情報を入れてるだけ

Angelosによる優しいWAFの作り方 / dannさん

  • 各言語のWAF
    • Perlは拡張が多すぎてわかりにくい
    • Rubyはプラガブルじゃない
    • PythonWSGIがすごい
    • JavaはDIがいいけどプラガブルじゃない
  • WAFの構成要素
    • Engine,Dispatcher,Component Loder
    • Engineをnew,run
    • Engine -> Dispatcher
    • Dispatcher -> Component Loader でコンポーネントを探し、Controlerを実行
  • Angelosの構成要素
    • HTTP::Engine
    • HTTP::Router
    • Bread::Board
    • conf/routes.pl → Railsっぽい定義
    • シンプルなWAFはこれだけ!
  • プラグインの種類
    • ライフサイクルへHook系
      • Class::Trigger
      • MouseX::Object::Pluggable (Role + method modifier)
    • メソッド生やす系
      • Exproler
      • 多重継承
      • Mouse::Role
  • Angelosでは
    • hook → Role + Method modifier
    • 生やす系 → Role
    • コアは小さく
    • Hookポイントをわかりやすく → メソッドの命名規約 (大文字にする)
    • "適切に"拡張箇所を限定。
    • beforeやafterで、ACTION(等)にHookをかける
      • 良: before,after,aroundが使える。シンプル。
      • 悪: メソッドがバッティングするかも
  • 適切なデフォルトセットの提供が大事
    • ないと、Tipsが必要になる
    • バイル用 や PC用 など。
    • application flavor ← プラグインのデフォルトセットを生成
  • WAF作りは簡単になってる。githubにて開発中!
  • 質疑応答
    • Q. どこでDI使うの?
    • A. コンポネーンとの組み立てで使うのが一般的。DIするとテストしやすい

Perl With Amazon Elastic MapReduce / lopnorさん

  • MapReduce(hadoop)
    • cat | mapper.pl | reducer.pl のイメージ
  • elasticmapreduce → amazonWEBサービス
    • コマンドラインからrubymapreduceが投げれる
    • credentials.jsonamazonの設定。s3nにログを吐き出させる
    • elastic-mapreduce コマンドを使う。
      • input、output、mapperやreducerもs3nに置くイメージ
    • mapper、reducerは標準入力、標準出力に対して書く
  • CPANは使えるのか? → local::lib
    • "jar"で固めてs3nに上げれば、--cache-archive にて指定できる
    • 指定の最後に#perl5 とすれば、perl5と言う名前でシンボリックリンクが張られる
    • use libで利用できる
  • お値段は、インスタンス1個分で1時間。ちょうど1時間に終わるように横に並べるのがお得。
    • outputディレクトリが重複してると、エラーとなるので注意。
  • 質疑応答
    • Q. Hadoopを使ってて、止めたい時はどうするの?(reducer間違ってた、とか)
    • A. WEBインタフェースから terminate 可能

かんたんオブジェクト指向Simo入門 / perlcodesampleさん

  • Simo : Class::AccessorとMooseの中間
    • アクセサ定義、new、デフォルト値、制約
    • 制約違反時に例外を投げる
    • オブジェクト操作用のメソッド
  • use Simo;
    • use strict; use warnings; はインポート
    • アクセサは、 ac() 関数を呼ぶ sub hoge { ac };
    • ac() にデフォルト値を指定可能 → Mooseと違い、Storable::dclone
    • ac auto_build => 1 → 関数によるフィールド初期化
    • ac constrain → 型チェック
    • ac filter → 値の変換
    • ac trigger → 値設定時に呼び出される
    • ac read_only → 読み取り専用
    • sub REQUIRED_ATTRS {} → 必須項目。これだけインタフェースが違う
  • 継承: use Simo base => 'Super';
    • mixin → 実際は多重継承。コードの読み手に伝える
  • Simo::Util::o → オブジェクトを作る
  • まとめ: 短いコードでモジュールを記述可能

CAPとBASEとEventually Consistent / yoheiさん

  • Perlとの出逢い: 1995年 jperl → 訪問者リスト
    • ラクダ本 ← ネット上に画像がないらしい
  • 複数サーバの必要性。分散重要。
    • しかし、分散は難しい → 遅延、整合性、可用性
  • CAP定理: 形式的に証明される
    • Consistency 他の人の更新が見える
    • Availability いつでもデータにアクセスできる
    • Partition tolerance データを複数のサーバに保管できる
    • 同時に満たすことができない
  • 最近のWEBサービスではAとPが必須 → Consistencyを妥協
  • Consistency
    • Strong Consistency → すぐに他人の更新が見える
    • Weak Consistency → すぐに他人の更新が見えるとは限らない
    • Eventual Consistency → データ複製の時間が過ぎれば、更新にアクセスできる(更新前であれば)
    • 「結果整合性」でググれ
  • MySQLレプリケーションでの例
    • マスタにSQLが発効されてから、スレーブのSQLが実行されるまで → Inconsistency Window
    • この例ではInconsistency Windowは数秒。DNSでは逆に1日とか。
  • 最新のトピック
    • 構造化オーバレイ
    • Consistent Hashing
    • Key-value-store
    • アーキテクチャ → メッセージキュー、キャッシュ
    • 局所的な状態整合
    • DBMS技術 + P2P技術 + 分散システム記述
  • 注意点
    • ACIDよりBASEがいいってわけじゃない。CAPが全てってわけじゃない
    • 最適な整合性モデルを採用するのが重要
  • 続きはWebで。blogを見て下さいとのこと
  • 質疑応答
    • Q. モデル分けは何種類?
    • A. 3種類。Strong (課金系), Eventual(ブログ系), Weak(個人重視)的な分け方だと思う。

perl-completion.elの紹介 / IMAKADOさん

  • できること
    • 補完、perldoc、find file(module)
  • 高速化
    • キャッシュ、関数のインライン展開
  • TODO
  • デモ

Memcache-Queue / masartzさん*4

  • TheSchwartz はきつい。Qudoに参加。満足
  • ダンPerlでMooooooseしたくなった
  • Memcachedを利用。カウント情報も保存。
  • デモ
  • 問題
    • Memcachedがリスタートすると・・・
    • Moose がないと駄目
  • TODO
  • lestrrat++。ソースはgithub。オススメはQudo。

HTML::AAFindの紹介 / komoriyaさん

  • HTML::AAFind → アスキーアートを探す
  • AAはケータイから見れん → 画像化するといい
    • AAだけを洗い出す必要性。法則を探る
      • br区切り
      • スペースが多い
      • その他、eucとか
  • AAの画像変換は、後日!
  • CodeReposにソース


閉会の挨拶。お疲れ様でした!!

懇親会

ゴーヤチャンプルー美味かったです。

*1:O/Rマッパーらしい

*2:中間管理職頑張れ

*3:前身はIOCモジュール

*4: TheMasartzさん(笑)