いよいよ最終日です。電池切らさないように頑張ってレポートします(笑)。
You're Doing OO Wrong/Michael Schwernさん(9:50〜10:25)
スピーカーの到着遅れてたようです。5分遅れでのスタートです。
- 継承がオブジェクト指向?→違う
- Howではなく、その操作から何が得られるかに着目する→インタフェース
- 継承がなぜよくない?
- 継承はめちゃめちゃになりやすい←ダイヤモンド継承
- 注意深く継承するのはつまらない
- 特徴に応じてクラス分けすると、クラスが増え過ぎてしまう
- Class::DBI → 色々継承している
- use Moose
- 少ないコードで書ける→OO部分だけ書けばいい
- Mooseでも、機能が欲しいだけでextendsを使うと意味がない→hasを使おう
- Roleはwithで取り込む
- まとめ: isa ×、hasa ○、Role ○
- 自分でOO実装しないで、Moose.pmを利用しよう
Moose/Yuval Kogmanさん(10:39〜11:20)
- Mooseとは?→モダンなオブジェクトフレームワーク
- Class::MOPのためのシンタクスシュガー
- hasによるアクセサの生成
- コンストラクタはMoose::Objectのものを継承
- default → newにパラメータがない場合に利用
- lazyでdefaultの評価を遅延できる
- isa → 型の指定
- coerce → 型強制(キャストみたいな感じ)
- handles → 委譲を行うメソッドを指定
- MooseX::AttributeHelpers + proveiders → 別名での委譲を指定
- before, after→メソッドの実行前と後のフック
- around → 中でnextでメソッド本体を呼べる
- punch_in, punch_out
- 型指定に、or指定やXXXクラスの配列、のような指定ができる
- Role → Javaのインタフェースやmixinのような機能
- 多重継承に変わるもの。
- CPANに上がってるRole → MooseXの、Storage, LogDspatch, Getopt, Param, Clone
- with → クラスにRoleを追加
- requires → 必要なメソッドの指定
- Roleの組み込みでは、コンパイル時チェックをしてくれる
- MooseはClass::MOPで作られている
- Perlのメタオブジェクトの仕組み
- createによってクラスを生成することができる
- Mooseは単なるシュガーであり、処理はMOPのメタオブジェクトが行う
- メタクラスは、クラスの挙動をコントロールしている
- Moose::Meta::Class、Attribute, Method, Method::Accessor, Instance, Role, TypeConstraint...
- Mooseを利用して、XMLとオブジェクトを相互変換
- Mooseの欠点
- ロードが遅い→MooseX::Compile
- 機能によっては遅い→ただし、使った機能の分だけしか遅くはならない
- ハッシュリファレンス以外のオブジェクトの拡張は困難→MooseX::GlobRef::Object
- Mooseの利点
- 質疑応答
Branch Management with SVK/Chia-liang Kaoさん(11:35〜12:00)
SVKについてそんなに詳しくないので、貴重な情報を得られました。svk br って素晴らしそうですね!
- SVK 2.2の新機能 → ブランチ管理
- 昔はコピーコマンドとrmコマンドだった
- その後、ciコマンドとかrlogとかrcsmergeとか→共同開発は無理
- 次はCVS→ディレクトリ、リネーム、ネットが必要*1
- 2002年、SVN
- ブランチとタギングが楽になった
- オフラインでdiffがとれる
- SVK
- svnでは、copyでマージを作ってmergeでマージする
- 機能追加やバグフィクスでブランチを作り、リリースブランチにマージする
- svk では cpでブランチを作って smergeでマージする (mirrorに対して操作する)
- 新機能
- リリースのときの操作
- ポリシー
- trunkはいつでも動くように
- 新機能とバグfixはブランチで
- バージョン管理より開発に集中
- リリースマネージャが、リリース用のマージする
- 衝突→悪夢w
- svkでは、diff,theirs,yours,merge,edit,skipから選べる
- Q&A
2010 modules I haven't yet talked about/Tatsuhiko Miyagawaさん
日本語関連のモジュールが多かったのはちょっとずるいかなと思いましたが、さすがは世界のmiyagawaさん。ぴりりとCOOLなモジュールをずらりと並んでいました。面白かったです。
- HTTP::ProxyPAC
- no capitalization → メソッドの呼び方をXxxYyyからxxx_yyyに変える
- PHP::Session → PHPとセッションを共有する
- 使ったことはないw
- autobox → スカラにメソッドを追加できたりする例
- Time::Duration::Parse → 期間文字列のパース
- Encode::DoubleEncodedUTF8 → バイト列とUTF-8文字が混ざってしまった状態を改善する
- URI::Find::UTF8 → マルチバイト文字混じりのURLを正確に探す
- Lingua::JA::Hepburn::Passport → パスポート用のローマ字に変更する(ヘボン式?)
- LWP::UserAgent::KeyChain → キーチェーンを利用したアクセス管理ができる
- XML::Liberal → しくじったXMLを修正する。
- 正しいXMLに関しては、速度は遅くならない
ランチ(12:20〜13:45)
手が魚臭くなった。
DBIx::Class Crash Course: Using DBIx::Class and other modules to make DB driven apps easy/Emerson Millsさん(13:45〜)
- DBIx::Class(DBIC)
- Catalystのモデルによく使われる
- ごちゃごちゃしたテーブル定義を、メソッド呼び出しで効率よく呼び出せるようにする
- perlのシンタックスでテーブル定義する
- DBIx::Class::Schema(load_components, table, add_columns, set_primary_key,add_unique_constraint)
- has_manyとbelongs_to → 関連
- many_to_manyについて → 関連テーブルを経由する
- selectの仕方 → resultset->search
- ResultSetとは?? → クエリの代理。lazyな動作を担当する
- resultset_classによって拡張可能
- モデルの初期化
- ResultSetの使い方
- search / search_related(関連クラス側の条件で検索)
- create / create_related
- first / all / last
- オブジェクトのメソッドアクセスでデータを取れる
- SQLを生成する
- -or, -and, -in ← 条件
- join, orderby, group ← attribute
- orよりも、inを使った方がいい
- SQLiteは危険、DBIC_TRACE
mod_perlをjob workerとして使う/Masahiro Naganoさん(14:05〜)
Apacheを並列処理に使うって話ですが、mod_perlでメモリの使用量を押さえたり、WEBフレームワークのクラス群がそのまま使えるって利点は目からうろこでした。
- RSSクローラ ← 外部日記の取り込み
- User-Agentは、mixi-crawler/2.00
- 22万県を取得中、19万3千件を2時間弱で取得
- 昔の設計
- 複数サーバを用意し、メンバーIDによって処理を振り分け
- 対障害性 → 1台でも落ちると駄目
- 増設時 → 台数が設定に含まれるため、全サーバの設定書き換え
- 速度が遅い → Perlの起動が遅い
- 新設計
- クロール時間の短縮 2時間以内に1週
- XML::LibXMLベース
- 対応フォーマットを増やす
- 耐障害性、スケーラビリティ
- それpla? → 非同期アグリゲータとして、HTTP::Async
- Net::HTTP::NBによる、非同期HTTPアクセス
- URLが数GBだとまずい
- connectはなぜか同期処理になっている
- ローカル処理、小さいコンテンツになら使っても良い
- mod_perlをworkerとして使う構想
- メルマガの構想から来た
- 1通1通が異なっている
- HTTP::AsyncとMaxClientsの指定によって非同期処理
- kickerの設計がミソ
- 冗長性
- スケラビリティ
- DBの接続時間を減らす
- kickerとkickermanagerに分離
- kickerはある程度動いたら死ぬ。managerはDB処理
- kicker manager
- WheelRun + Component::Server::TCP(外部監視用)
- 2台以上のサーバで動かす(処理はかぶらないように)
- 処理がかぶらないために・・・
- fetcher_seed (0 .. 59) を作る
- 特定のseedのみ処理する
- まとめ
- Tips
- jobを細かく分割する
- 非同期に叩くクライアントが必要(HTTP::Async)
- 質問
Perlとリアルデバイスを繋げるって快感/Kazuhiro Osawaさん(14:35〜14:55)
なんで裸足なのかと思ったら・・・Wiiボードのためだったわけですねw 笑うべきセッションなんでしょうけど、それ以上にYappoさんのセンスにただただ感心するばかりで・・・miyagawaさんといいYappoさんといいIngyさんといい、スーパーハッカーはやることがスマートなんですよね。おいおい、そこそうやって切り開いちゃうか、みたいな。
- Macが前提
- Serial Port, USB, Bluetooth
- Device::SerialPort, Win32::SerialPort
- OS依存的な何かがあるが、引数に互換
- winとdarwinの正規表現の罠w
- Device::VFD::GP1022
- Mac::MissileLauncher (インラインCとか使いまくり)
- 発射のデモ
- すでに実装されてるデバイスの再実装は楽
- Net::Bluetooth??→Macで動かん
- DarwiinRemote
- Wiiリモコン制御ソフト。バランスWiiボードには使えない
- patchあててWiiFitの居たを使えるように
- CamelBones → CocoaとPerlのブリッジ
- 使いにくいっぽい→メンテナ頑張れ
- Mac::WiiRemoteが完成!!!
- Wiiボードでプレゼンを進めるデモ
- ケータイのデモはWiFiが不調で中止
- まとめ: 先人の知恵を利用してデバイスハック
- Chumbyハッカソンやるそうです。
Perlの!数学!妄想夢芝居!/Shinya Hayakawaさん(14:55〜15:15)
Perlのソースコードの集合に対する考察ですが、オチがありませんでしたw 考察対象としてはなかなか面白そうだったのに、ちょっと残念。
From POE to Erlang/Faiz Kaziさん(15:40〜16:20)
例の如く英語聞き取れてません、すみませんw
- Perlでの並列処理は?
- Perl以外の部分で実現できる
- Perlで並列処理を書く?
- PerlはUNIXがホームなので、fork()やselectループが使える
- fork()は遅い、Threadsは恐ろしい、selectは難しい
- POE → スレッドもロックもない、イベントドリブン
- Kernnel
- Processes (not UNIX processes)
- Sessions(unit)
- Event
- POEを使ったサンドイッチの例
- GTK+では、イベントループはシングルスレッド
- 「気をつければ使えるが、お薦めしない」
- use POE::Kernel { loop => "Glib" }
- POEはフレームワークであり、CPANにはたくさんコンポーネントが上がっている
- POE::Filter::Zlib, POE::Filter::Line
- ロックを利用しない→シングルスレッドだから
- POE, STM and Perl6 threds, Erlagn
- Moore's Lawはもう成り立たない??
- クロックではなく、multi-coreの進化となった(better, not faster)
- 並列化モデルには二つある
- 状態共有
- メッセージを送る(Actor Model)
- Erlang
- 生産性の高さ
- ロックなしでの並列化
- 大量の小さなプロセス
- Erlangの利用→Twitterなど
- Erlangの概要
- 値はbindされる
- パイプの記法
- 様々な言語でのラムダの書き方
- Erlangでも関数言語的な書き方ができる
- クイックソートの実装例
- ダブルクリック問題: クリックとダブルクリックのイベントが両方起きてしまう
- erlangなら書きやすい
- erlangはScalaに影響を与えている
XIRCDで加速するIRCライフ/Kan Fushiharaさん
Perl Is unDead/Michael Schwernさん(17:10〜17:55)
- ゾンビはBrainsが必要、PerlもBrainsが必要
- Perl is like COBOL. Perl is dead.
- CPANの利用数、カンファレンスの数は多い
- Perlは死んでない
- Perlはもはやユニークではない
- PerlはWeb1.0は手中に納めたが、2.0は納められなかった
- Folk Programming → 先生に習うことなしにコードを覚える
- Perlは、コードがあって単純で結果がすぐ見れた
- 簡単じゃなくなって来た、結果もわかりにくくなった
- 最近の、簡単、結果がすぐ分かるのは?→JavaScript、Yahoo Pipes、PHP
- PerlではもうFork programmingができない
- BarCamp → 色々なコミュニティの人の話が聞ける
- テクノロジーの話ではなく、何をするかの話をしている
- PearよりWordpressプラグインの方が良質
- Perlの独自文化ができている→他の文化との付き合いがない
- Perlが死んでないことを、もっと知ってもらう必要がある → SEO
- 使いたくなるコードを書くこと
- 最初の10分を簡単にする←PHP
- 他のコミュニティのイベントにも行く
閉幕式(18:00〜18:01)
次回予告→東京京都???
おつかれさまでした!