2010/08/08

Hokkaido.pm #1

昨日のHokkaido.pm #1のメモ

非同期プログラミング
--------------------
講演者: 牧さん

複数URLにたいしてリクエスト
- LWPで順にリクエスト 
- 遅い場所があると詰まる
- read(2)でブロック

イベント駆動
- イベントループ
- callbackを登録
- socketの読み込み可能とかで発火

AnyEvent
- POE, Danga::Socket, IO::Async,
- ↑互換性なし
- 汎用API
- バックエンドを選べる
- Standard API++
- 新規ならAnyEvent
- AnyEvent vs AE
- 牧さんはAE派

Watcher
- IO watcher + callback等
- Timer
- signal
- idle 待機状態
- AnyEventで注意すること
- guardオブジェクトを利用している
my $timer;
$timer = AE::timer 0, 1, sub {
    # callback無いで必要なくなったらオブジェクトを削除する
    # そのために先に$timerを宣言しないとcallback内から呼べない
    undef $timer;
};

コンディション変数
- $cv = AE::cv {};
- $cv->recvでイベントループに入り,$cv->sendをwatcherのcallbackから呼ぶ
- 複数のwatcherに対応するためには$cv->begin, $cv->endを使う
- $cv->send(@args)でAE::cvのcallbackの引数に値を渡せる

AnyEvent::\*の名前空間にいろいろ入ってる

サーバサイドだとTwiggy
- plackup -s Twiggy
- longpoll
- ブラウザゲームのイベントサーバ

非同期の注意
- 「やりたいから」だと失敗する
- 「必要がある」ときだけ使う
- リアルタイム性
- I/O待ちが多い
- コードが複雑になるから,必要なときだけにしよう


LAPPによるWebアプリケーション
-----------------------------
ここは諸事情によりカット
Imager::DTPは意外と使えるのかも


Perl6 Pattern Match
-------------------
講演者: 山川さん

Perlの正規表現の問題
- なぞの記号
- /xとか←個人的によく使う
- 使用頻度と記号の長さが適当
- ?? ?;とかわからん
- /gとかで動作がかわりすぎ
- ネストしたパターンが困難
- 変数展開がめんどい,サブルール
- 正規表現からPerlを簡単に呼べない
- バックトラッキングの制御がない

Perl6の挑戦
- マッチ演算子が ~~ に
- スペースは常にトークンの区切り文字 /xがデフォルト
- コメント #
- [...]が文字クラスではなく(?:...)に相当
- 文字クラスは<[...]>, 否定 <-[...]>
- 足し引きができる <[a..z]-[aeiou]>
- \**n で {n}, \**n..mで{n,m}
- :s :i //s //i
- 変数キャプチャ $/にマッチ結果 $/[0]でアクセス
- 名前つき正規表現 regexで作成
- 置換がs/からrx/
- /eがなくなった m/pat/{ code }/
- マッチ条件にコードを使える
- 構文解析
- PEG Parserが使える
- 再帰下降パーサ+memo化
- Perl6っぽくする Regexp::Grammer


Perlロギング
------------
講演者: keroyonnさん
- ゆとり系プログラマー
- twitterのクローラとか

前提知識
- print debug
- debugger lvalueにバグあるらしい
- Data::Dumperはちょっと不便
- YAML::Syckだとdumpも読みやすい
- 時間もほしい Time::Pieceが5.10からコア入り
- warn, carp
- exit 1; die, croak
- dieはステータス 255固定
- $!に自分で入れられる

Log::Dispatch
- newしてaddでOutputのサブクラスを追加していく
- Log::Dispatch::Config
- 書式設定とかできる
- Log::WarnDie
- warn, dieをLog::Dispatch等に送る

Log::Dispatch::Outputのサブクラス
- Email系が多すぎ.日本語も通らない
- Email::EmailSender
- エンコード指定できる
- githubにあり
- http://search.cpan.org/~keroyon/Log-Dispatch-Email-EmailSender-0.03/README.pod

Log::Dispatch::Config::Watcher
- L::D::Configを継承してるから使い方は一緒
- 拡張パラメータはWatchに詰め込む
- functionsで監視するファンクションを指定できる
- main::test1とか
- Hook::LexWrapでメソッドの起動,終了をフック


DB処理におけるFixtureの勧め
---------------------------
講演者: ZIGOROuさん

Test::mysqld
- DBIx::Connector
- SQL::SplitStatement
- レプリケーションもできる

MySQLを使ったFixture
- Test::Fixture::DBI - 生DBI用のFixture
- triggerの例
- デモ
- Test::Fixture::DBIにはmake\_database\_yaml.plとかのツールが付属していて,Fixtureデータ等を簡単に作成できるようにしてる


----------------------------------
ここからLT

はじめてのしー・じー・あい
--------------------------
講演者: hotwatermorning

- バグ票→Perl+CGIで作ろう
- まとめて見られない→バグ表だった
- 課題 DB
- プログラミングの魔道書 今回はC++
- PDF版が1000円

画像のモノクロ変換の高速化
--------------------------
- 割り算をビットシフトに
- 早くならない
- 手数を減らす
- for を map
- 配列をscalarに
- 最初からビットシフトしておく
- 一行にまとめた
- 最適化 = ロマン

0 件のコメント:

コメントを投稿