今日も自分メモ的に実況します。
8:53 T101+102 Room 入り
なんか人が居ないなーと思ったら、開演9:30だったわけですね。勘違いしてたorz つーか、開場時間前に入っちゃった。
9:28
Emerson Millsさんの挨拶。この教室はFONも入るし、何より机があっていい!
9:30 Abusing Domain Specific Languages for Fun and Profit / Jesse Vincent
- DSLとは?
- internal DSLs : 母国語
- Jifty::DBI::Schema, DBIx::SearchBuilder
- Object::Declare (オブジェクトのDSL表現)
- ハッシュやsubなどをなくして、シンプルな定義を作る
- Prototype hacking
- UNIVERSAL::と::AUTOLOADの使用
- Template::Declare (HTMLをDSL風に表現する)
- URLをパッケージ名に擦る
- HTMLタグをクロージャとして定義しておく
- Test::WWW::Declare (WEBのテスト用のDSL)
- DSLを作るのはperlの勉強になるし、設定を簡単にする
- 日本語なDSLも作って下さいw
英語がわからなくて死にそうです( p_q)。
10:15 Introduction to DBIx::Class / Jonathan Rockway
ベルが無いので、ばけつを蹴って時間切れのお知らせをしてくれるみたいです。後、やっぱり無線LANは定期的に切れますね。
- perlのORMの問題
- 全てのテーブルにクラスが必要
- 全てのクエリにメソッドが必要
- Schema テーブルやビューの集まり
- Schema::Loaderでテーブルをロードする
- Schema#resultset() メソッドで結果を取り出す
- Schema#deploy()
- DBIx::Class::ResultSet 検索可能な検索結果を含む
- find() 一つの要素を検索する
- search() SQL::Abstractの文法で検索可能
- ページングの機能
- new()して、insert()する = create()
- updateに関してもupdate()を呼ぶ
- find_or_new() + update_or_create()
- DBIx::Class::Relationship
- リレーションに関する説明
10:38 Asynapse - The missing links between servers and clients. / Kang-min Liu
- PerlとJavaScriptの連携
- SimpleなAPIである
- Asynapse::Model::File
- Javascripからファイルを保存する
- Diffの実装
- JSONで文字列を投げる
- Algorithm::Diff の利用
- AsynapseRecord JavaScriptからROMを利用する
- 後半Cocoaで何やったのかわからず・・・orz
11:10 Mylingual - There's More Than One Language To Do It / Kazuho Oku
11:30 自文書抽出日本的住所 / Kazuhiro Osawa
- Geography::AddressExtract::Japan : 使えるかも
- 都道府県、郡市区町村、大字、小字、番地号
- 正規表現だとノイズが多い
- 県は決め打ちできる
- 郵便番号DBはでかすぎる
- Regexp::Assemble : 動的に正規用言を作るモジュール
- 900行弱で、字くらいまでの全正規表現なら作れる
- 同盟地名の対応 → 町名まであわせて対応
- 住所表記のゆらぎ(1-2-3、一の二の三、一丁目2番地3)
- XXX小学校などが引っかかる
- 異字体 問題
- マイナー
- Sapporo.pm早く作ってw
- Regexp::Trie Fred??
- 住所表記の定義をゲットしたらしい
- 正規表現にパーサを入れるといいかも
12:00 ランチ
臭う店でポークソテー。
無線LAN安定しました。Good JOB!!
午後も引き続きホールです。
13:15 s/ Perl5 Regular Expression / Perl6 Regex and Rule /mixes; / Yoshinori Takesako
- 正規表現にフォーカスしたPerl6
- qr// は rx//となる
- =~ は ~~、 !~ は !~~で、交換可能
- s{Pattern} = 'replace'
- /^ $/m は /^^ $$/、 /\A \z/ は /^ $/に
- xオプションによるコメントがデフォルトに
- \Q \E は <' '>
- [ \t\r\n] は [space], [ \t\r\n]+ は /ws/
- /./s は /./、 /./ は /\N/、 /\n/ は任意の改行にマッチ
- s/ / /e は s/ /{}/
- s/ / /ig みたいなのは、 前に持って来て s:ignorecase:each/ / / みたいな感じ
- 空白マッチ就職子 m:w/ / (\s+と同様の扱いになる)
- 後方参照は、\1 から $0から、(?: ) は [] となった
- [^abc] は <-[abc]>
- / $var / は / <$var> /
- 正規表現に配列を渡せる
- (?{code}) は {code}
- / (...) {fail} / 失敗条件を書ける
- Rule : 正規表現のライブラリ化
- m:perl5/ / でPerl5互換になる
13:37 (Ab)?using Class::C3 / Daisuke Maki
- C3はオブジェクトのメソッドを探すアルゴリズム
- 多重継承時に一部の親のメソッドしか呼べない
- NEXT.pm
- SUPERの代わりにNEXTを使う
- Class::C3
- スーパークラスでuseし、初期化メソッドを呼ぶ
- $self->next::method
- $self->maybe::next::method
- NEXTとC3の動きの違い
- nextする順。NEXT.pmは先に継承を辿れるとこまで辿る。C3の方が自然。
- 速度。C3の方が早い。
- 利用例 : DBIx::Class
- 薄いロジックを多重継承で組み合わせる
- テレビ番組表パーサの例
- プラグインとの違い : インスタンスが一つ
- Mix-inとの違い : 名前空間を奪わない
- C3の欠点
- maybe::nextは遅い
- SUPERに比べると遅い
- 複雑な継承だと動かなくなる
- 動的な@ISA変更はNG ・・・ とドキュメントに書いてあるがデモw*2
- 大規模フレームワークなら使えるでしょう
- リストコンテキストでcanすると全部返ってくるの!?
14:00 CDBI => DBIC / Tokuhiro Matsuno
14:15 入門DBIC::Schema::Loader / Atsushi Kobayashi
- ローダを使わない場合
- ローダーを使った場合
- Loaderのラップ
- componentsを自動設定
- 日付カラムのインフレート
- リファレンスの自動設定
- FromSledge, RandomStringColumns, DigestColumns::Lite, AsFdat, StorageReadOnly, MoFedge::Data::DBIC::*
- created_on, updated_on, *_on, *_at のように、名前を規約でしばってinflate
- リレーション設定の自動化。table_id = table.id など、規約を縛る。blongs_toとhas_manyを設定する
- (中略)
- mod_perlでも大丈夫。初回で情報を拾ってキャッシュ
- DBICのはまりどころ
- コネクションが増え過ぎる
- 循環参照しやすい
- belongs_toの時、勝手にinsertしようとする
- (超高速プレゼンだったため、抜けが多数ですw)
14:30
再び一階に移動。Jiftyは立ち見だったぽいです。そんな注目のセッションとは知らずびっくり。スピーカーのはずのAudrey Tangの姿が見えなかったのは気のせい??
14:47 Building Catalyst Applications / Jonathan Rockway
- Controller
- :Local, :Global, :Private
- :Private は URLとしてアクセスはできない
- ($self, $c, @args)
- $c : Catalyst Context
- @args にはPATH INFOが入る
- View
- $c->uri_for('private/path') URLを得る
- XXXX_create.pl でモデルを作る
- result_setを得るのに$posts = $c->model('DBIC::Posts') と言う書き方ができる
- RESTフルなBLOG を作る
- FormBuilder.render で、TTにフォームを書かせる
- →バリデーションなどが自動化される
- Session で FastMmapを使う
- flash()の使い方
- AJAX
- $c->user, $c->logout
- Test::WWW::Mechanize::Catalyst
- Test::WWW::Selenium::Catalyst
- FastCGI perlbal + axkit
15:30 Pushmi - Subversion replication system / Chia-liang Kao
- Subversionの欠点
- 回線がいつも使えるとは限らない
- 開発者が一番高価なのに、ツールの利用に時間を取られる
- Pushmi : Slaveを作成して透過的に使える
- マスタとスレーブでのconflict は解決できない
- Cronで同期する
- ケーススタディ:70カ所以上の拠点があるゲーム会社
- グラフィックデータが多く、回線が遅い拠点もある
- 読み込みであれば回線がなくてもできる。SVKがあればcmmitもできる
16:00 Inside Net::Amazon::EC2 / Jeff Kim
16:30 Lightnig talks
ドラ登場。
- にぽたん: 正規表現信者の憂鬱
- Atsushi Kobayashi: Perlbal selector Plugin
- ma.la: ブラウザ履歴を利用したRSS Auto-discovery
- md5化して、Livedoor Readerのクロール結果とマッチングさせる
- 履歴中のURLから、どんどん削っていって探す
- あるかないかしたわからない
- Win32::OLEでブックマーク取得可能
- 時間切れ
- Chia-liang Kao: BabelBee - Collaborative Translation Tool
- ふしはらかん: Moxy - Mobile Development Proxy
- wema作者
- ブラウザのプロクシとしてMoxyを指定する
- ブラウザの設定がほとんどいらない
- 今後絵文字機能、ヘッダの表示などの機能追加
- 堂前清隆: (ミニ)カンファレンス中継のあれこれ
- Ingy döt Net: Document Formater
- Jonathan Rockway: Angerwhale
- Blogging tool
- 長野雅広: Expectをつかったサーバ管理レシピ
- Mark Dominus: Debugging the De Bruijn Sequence
- 無言プレゼン。こう言う場だと効果的。
- 全面的にネタw。
- 0からコードを書いて完成させるんじゃなく、完全なコードから削るとよい
- 完全なコードをBruijn Sequenceを利用して作成
- Yappo: Device::USB::MissileLaunchers (live)
- ミサイル発射の生中継
- ほんとに飛んだよ!!
- Thilo Planz: Spidernomic: A self-modifying HTML/Perl/JS file/game
- 時間切れ
17:35 Perl Program Repair Shop and Red Flags / Mark Jason Dominus
- コードをよくするためのコードスタディ
- これはひどい例(join して split)
- コードを繰り返してはイケナイ ( 月文字列を数字に直す例 )
- コードは製品じゃなく、機能が製品
- むしろコードは重荷
- 同じコードが続くと、わずかな違いを見逃してしまいがち
- 繰り返しを避ける
- elseがない → else { die } としよう ( 又は || die とか)
- 見通しをよくするためのコメントは必要
- my 宣言を利用するとこに移す
- 日付計算
- 数値表現→文字列表現は簡単だが逆は難しい
- 数値表現で持ち続けるようにする
- dateプログラムは文字列を求める物で、数値表現を求めるにはtime()
- strftime() を利用して文字列表現に擦る
- 評価を文字列で行わない
- B:Dparseで、Perlがどうコードを評価したかを調べる
- たとえ不完全でも、リファクタリングには十分意味がある
- 行数が短くなった
- パフォーマンスも早くなった
18:22
エンドロール。変なの作ったらしい。なぜかアジアの純真・・・。お疲れ様でした。