Yokohama.pm テクニカルトーク #4

Yokohama.pm テクニカルトーク #4に参加してきました。
Perl系のイベントへの参加は初めてです。wkwk
http://yokohama.pm.org/2009/03/yokohamapm-4.html
直前まで埼玉県指扇にいたので、神奈川県関内まで必死に大移動しましたよ。

QudoxSkinny by id:nekokak

途中から。
Qudoはおそらくジョブの管理を行うモジュール。

Qudoの設計方針

テストしやすいことを重視、などなど。

Qudoの使用実績

1案件では実際に使用している。
開発はGithab。

DIxPerl by id:lestrrat


perlでDI!!

DIを使わないと
  • 書き直しが面倒
  • クラスが多いと大変
  • 組み立てが必要になる
DIを使えば

設定ファイルに組み立てを切り離せる

PerlのDIモジュール Bread::Board

本番で使っているのは世界で2人だけ?

Bread::Boardは不便なので書き換えた
  • クラスの継承が面倒くさい
  • DSLなので使いづらい

 ↓ このように修正

  • Bread::Boardをオブジェクトベースに変更
  • Mooseとの統合機能を用意
  • DIするオブジェクトへのパスはURLライク
  • クラス定義に依存関係を埋め込める
Bread::Board 新APIを定義

クラスにこう定義すると、

bind_param db  => '/MyApp/Scheme'
bind_param obj => '/MyApp/Obj'

DIコンテナからオブジェクトを取得した際に、db、objパラメータ初期化済みのオブジェクトを取得できる。

Bread::Board 新APIの問題

APIでは、1オブジェクト、1インスタンスの結びつけしかできない。
1オブジェクトを違う定義、違う初期化パラメータで使い回すには、Bread::Board::Declareを使う。


このモジュールは、JavaのDIコンテナを使ったことがあるなら、問題なく使えそうです。

Angelosで学ぶ優しいWAFの作り方 by id:dann


WAFは、Web Application Frameworkのこと

WAF

PerlのWAFはどれを使ったら良いかわからない、という声が多い。
そこで、RubyPythonJavaのWAFの良い所取りをして、Angelosをつくった。

WAFの基本構成


Jakarta TapestryWebObjectsは、確かに、このような作りでした。

WAFの拡張

WAFには、大きく2種類の拡張方法がある。

  • ライフサイクル中にフックを入れる。
  • メソッドを増やす
Angelosでのプラグインの基本ポリシー
  • コアを小さく、多くの物を置き換え可能に。
  • フックを入れられる場所を明示。
拡張を提供する時に、セットですべきこと

デフォルトセットを提供する。

私もフレームワーク作成時には、デフォルトセットを提供するけど、
この方法は、たまに、デフォルトセットのコストが気になったりする。

Perl with Amazon Elastic MapReduce by Nobuo Danjou


Hadoop!!
最近よく聞くように。そろそろ本番で使っても良いころか。

AmazonMapReduceWebサービスを提供し始めた。その利用方法についての説明。

これは、ごくごく最近のニュースですね?

CPANは使えるのか?

使えない。そこで、

use local::lib

を使用して、自分のローカルにモジュールをインストールして回避する。

かんたんオブジェクト指向Simo入門 by id:perlcodesample

Simo

簡単にオブジェクト指向を使えるようにするモジュール。
Mooseより簡単らしい。
制約、トリガー、フィールド、値のフィルタ、読み取り専用、継承など、基本的な機能はある。


Mooseとどちらを使うべきか。
Simoは、確かに分かりやすいが、MooseはモダンPerlに載っていたから、知ってる人が多そう。

CAPとBASEとEventually Consistent by id:yohei

複数のサーバに分散した情報を扱うケースが多くなってきた。
しかし、情報を分散すると難易度が上がってしまう。

CAP定理

C = Consistency
A = Availability
P = Partition tolerance
3つを同時には満たせない、という定理。

  • Consistency = 誰かがデータ更新後、更新後データが返る。
  • Availability = 使い勝手の良さ
  • Partition tolerance = 複数の箇所にデータを置くこと。

実際には、WebサービスではAとPはほぼ必須になるので、
Cをどのように妥協すべきか、という考えになる。

Consistencyの種類
  • Strong Consistency = 更新されたときに、必ず新しいデータにアクセスできる。
  • Weak Consistency = 更新されたときに、必ず新しいデータにアクセスできる、とは限らない。
  • Eventual Consistency = 結果整合性


TODO
結果整合性について調べる

CAPを知らないのは小学生まで


だよね!

perl-completion.elの紹介 by id:IMAKADO

  • 補完
  • perldocを開く
  • モジュールのソースを開く
  • anything.elなどと共存できる
プラグインを高速化するために
  • キャッシュ
  • 関数のインライン展開
  • 外部コマンドを非同期に実行

を利用。

開発状況
デモ
  • モジュール名のリストが出てくる
  • perldoc もでてくる
  • Control-x f でソースを開ける。


動作も軽いようだ。
今日から使わせてもらおう。やってて良かった、Emacs(嘘)。

DBを使わずの簡易ジョブキューシステム by id:masartz

DBを使わない、ジョブキュー管理システム。
memcachedを利用して、ジョブを管理する。
DBを使えないので、できないこともあるらしい。

HTML::AAFindの紹介 by id:komoriya

HTML::AAFindモジュールの紹介。
HTML内のアスキーアートを探すモジュール。
AAの法則を解析!!

なんと

AAの法則
  • スペースが多い
  • あとは、こまけぇ事はどうでもいいんだよ!
やるおで学ぶHTML::AAFind

PC用のAAを携帯で見ると、表示が崩れてしまう。
AAを探し出して、画像に変換して回避する。

おもしろかった。

感想

初めてのPerl系の勉強会でしたが、
Perlよりも、ものの考え方のようなものが勉強になりました。
出遅れたから席後ろになって、スクリーンが見えづらい状態に陥ったのが無念。