tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

YAPC::Asia 1日目のまとめ

(ごめんなさい。途中です)一応続き書きました。

自分の聞いてきたセッションを軽くまとめました。

※あくまでも私の聞いた(つもりの)内容と私が書いたメモが元になっておりますので、実際のセッションや発言とは異なる可能性があります。今回は資料がアップされていることが多いので、資料も見てくださいね!

プラコアでは Catalyst をこう使っています! / Plucore way of using Catalyst

Daisuke Komatsu さん
資料(http://vkgtaro.jp/2009/09/11/yapcasia2009)

  • プラコアという会社での、Catalyst の使い方事例
  • Catalyst + mod_perl での開発が多い
    • たまに CGI::Application
  • Catalyst はほぼルーティングのみ
    • サービスクラスをつくり、 Catalyst からは独立させている
      • サービスクラスにほとんどのロジックを置くようにしている
      • テストしやすくするため
    • モデルに Model::MultiAdapter というものを置いている
      • サービスクラス、リクエスト($c->req)、セッション($c->session)を取りたいため
    • PseudoRequest
      • テスト時に、リクエスト、セッションが欲しいときに使う
    • config/log/DB/Validator も独立させている
  • サービスクラス

優しいモダンな WAF の作り方

dann さん
資料(http://dann.g.hatena.ne.jp/dann/20090910/p1)

  • 表題のとおり、モダンな WAF(Web Application Framework)の作り方の話
  • Pluggable(拡張性)/Testability/Full-State(ユーザビリティ)が重要
  • Engine/Dispater/Conponent Manager があれば WAF は簡単に作れる
    • 2〜3hくらいで(私には無理ですが...)
    • Engine: Request/Response を扱う
    • Dispatcher: リクエストされた URI をコントローラに振り分ける
    • Component Manager: コントローラ
  • Plugin
    • コアは小さく
    • 拡張箇所は限定する
    • Hook Point は明確に
    • Hook の仕方は通常下記の 2種類
      • ライフサイクルに対する Hook
      • メソッドを生やす系
    • Hook Point は規約で(Angelos では大文字)
    • 拡張のデフォルトセットを用意しておく

CPAN::Packager による RPM/Deb の自動生成

dann さん
資料(http://dann.g.hatena.ne.jp/dann/20090910/p1)

  • Catalyst など、モジュールの依存関係の複雑なものを RPM/Deb でまとめるためのモジュール
  • 既存ツールの問題
    • cpan-flute2/dh-make-perl : 依存関係を考慮してくれない
    • CPANPLUS::Dist::{Deb,RPM}: 依存関係を一段しか考慮してくれない
    • そもそも、依存関係の誤りがあったときに手修正ができない
  • ある程度は依存関係を自動追跡し、問題がある場合はコンフィグに修正内容を書けるようにした
  • HTTP::EngineRPM を作るデモ

=> 10 くらいの依存モジュールがある。これを解決しながら RPM を作成した

Q.A.

  • 使いたいモジュールのバージョンを明示したい場合は?

=> ローカルに置くモジュールのパスを指定する

  • local::lib との違いは?

=> Pure Perl のモジュールならあまり違いはないかも。XS 使うものや、ディストリビューションのパッケージと共用させたい場合は便利だと思う

  • コンフィグの書き方がよく分からない

=> ドキュメント書きます

  • モジュールのテストは?

=> Deb の場合はテストする。RPM については今後の課題

  • このモジュール自体の依存関係が結構多い

=> CPANPLUS を使っているから。このモジュールのパッケージを置くとよいかも

Key Value Store with O/R Mapper

Kazuhiro Osawa さん
資料: http://yappo.ficia.com/#album/1E8DF4EE-9DB6-11DE-B1EE-7BD1A805B909

  • Data::Model というモジュールの話
  • 定義は普通の ORM っぽい感じ
    • カラムはデフォルト VARCHAR で、定義の必要なものだけ書く
  • データソースに DBI/memcached/(Perl の)hash が使える
  • 1テーブル/1クラス以外も OK
  • Web アプリの DB のクエリの性質を考慮したところ、既存の ORM に良さそうなものが無かったので作ったとのこと
    • ほぼ index スキャン
    • join しすぎない
  • 透過キャッシュ
    • memcached で検索に失敗したら、DB を fallback driver に

...で、MessagePack の話ぐらいから駆け足になったのもあってちょっとついていけなくなってしまった。。。

一日目のセッションはもうちょっとありましたが、また明日。。。
以下 2009/09/15 追記。

simple or mapper DBIx::Skinny

Atsushi Kobayashi さん
資料: http://nekokak.org/presen/yapcasia2009-dbix-skinny/

  • DBI の薄いラッパーの ORM
  • 簡単に使える
  • Plugin がある
  • DBIx::Class の問題
    • 非効率な SQL を出すことがある
    • 直接 SQL も叩けるが、そうすると ORM としての便利機能が使えなくなる
    • 遅い
  • DBIx::Class などの従来の ORM から良いとこ取りしつつ、スクラッチから作った ORM
  • select/update/delete などは普通のORM っぽい感じ
  • リレーションシップはあえて対応していない
    • あると便利なので使ってしまう
    • けれども効率の悪いクエリが生成されがちなので

MooseX::Tourism

Florian Ragwitz さん
資料: 現時点ではアップされていないようです

# 英語で通訳無しだったので、理解度的にはちょっと微妙。
# かなり間違っているかもしれません。。。

  • MooseXに関するガイド
  • MooseX::AttributeHelpers(MXAH)
    • 「一つだけ MooseX のモジュールを選べ」と言われたらコレらしい
    • 名前のとおり、アトリビュートを拡張する
  • Autobox
    • MXAH の Inside-Out(裏返し)
  • TypeConstraints
    • MooseX::Types
      • 型(Type)を作りやすくする
  • MooseX::Types::Structured
    • hash/array のような構造型を作りやすくする(?)
  • MooseX::StrictConstructor
    • コンストラクタの引数チェックができる
  • MooseX::Params::Validate
    • メソッドの引数チェックができる
  • MooseX::Method::Signatures
    • 引数チェックを宣言風に書ける
  • MooseX::NonMoose
    • Moose を使っていないクラスから継承しやすくする
  • MooseX::Traits
    • new_with_traits というメソッドが使える。生成時に Role を適用する

Perl database test using MySQL::Sandbox

Toru Yamaguchi さん
資料: http://www.art-code.org/presen/yapcasia2009/

  • 前半は MySQL::Sandbox というモジュールの解説
  • MySQL::Sandbox は環境に対するテストを意識しているっぽいかんじ
    • CUI コマンドベースでモジュールになっていない
    • 実際の DB の内容をテストするには使いにくい
  • MySQL::Sandbox::Frontend というモジュールを作成した
    • テストコードから簡単に呼べる
  • 問題点
    • 遅い
      • DB を作って/消して で 15sec くらいかかる
      • レプリケーションだともっと遅い
      • インスタンスの生成が重いようだがまだ調査していない。そのうち何とかするかもしれない、とのこと

LT

省略。miyagawanize が面白かったです