YAPC::Asia 2008で見たいセッション

YAPC::Asia 2008は気になるセッションがたくさんあって困っていたんだけど、実際にはセッションを見ることはほとんどできなかったので今チェックしています。実はスライドはほとんどWeb上にあるし、動画もアップされるし、内容をチェックするだけなら会場に行かなくてもそれほど不自由はしないんですね。

それでも会場に行くメリットは、「実感できる」ということだと思いました。会場である(今回は)東工大の環境の素晴らしさとか、どれだけたくさんの人が参加しているのかとか、みんなとても楽しそうにしていることとか、日本語だけじゃなくて英語が普通に飛び交ってたりとか。さらにスタッフとして参加して、イベントを作り上げるためにどれだけの人ががんばっているかとか、最近は当たり前のように見ているストリーミング中継が実際にみんなの努力によって行われていることとか、そういうことを「実感できて」よかった。すごく楽しかったです!

で、以下が気になるセッションとチェックした結果。まだ全部チェックしきれてない・・ので随時更新する予定。

Tatsuhiko Miyagawa - Welcome to YAPC::Asia 2008

Kang-min Liu (gugod) - Continuous Testing

http://blog.gugod.org/2008/05/test-continuous-tool-that-makes-module.html

Test::Continuous

ファイルの変更を監視して必要なテストだけ実行できる。
継承関係も追って監視できる?

package Bar;
use base 'Foo';
1;

でFoo.pmが変更されたときBar.pmをテストするbar.tを走らせられる?

Tokuhiro Matsuno (tokuhirom) - about Perl5.10

http://svn.coderepos.org/share/docs/tokuhirom/20080515-yapc-perl510/

  • say
  • dor(//)
  • state
  • switch(given-when, foreach-when)
  • 正規表現のnamed capture(?)を$+{keyword}で参照?
  • stacked filetest(if -e -f -x $file)

などなど

Dan Kogai - PSL = Perl as a Second Language

http://www.dan.co.jp/~dankogai/yapcasia2008/psl.html

  • Perl does NOT have an OO built-in.

Perl5のOOは

    1. reference - データを格納できる
    2. bless - オブジェクトが何をできるか見つけられる

だけ。だからOOをやろうと思ったら

    1. データの格納方法を決めて
    2. 何ができるか見つける方法をデータに教えればよい

InsideOutとかMooseとか。

  • Perl is a context-oriented language.
    • scalar/list

Kenichi Ishigaki (charsbar) - Web is not the only one that requires frameworks

http://d.hatena.ne.jp/charsbar/20080521/1211358715

  • スクリプト用のフレームワーク
    • 欠点
      • インストールが面倒(特にお客さんに入れてもらう場合は)
      • シェルの便利機能が使いづらくなる可能性も
    • 利点
      • おなじことを何度も書かずに済む
      • more テスト
      • more POD
      • more 記述的なコマンドリスト
      • 継承、挙動の変更がしやすい
  • 何を使えばいいの?
    • App::CLI
      • since June, 2005
      • SVKやJiftyで使われてる
      • 依存モジュールはすべてPerl 5.10のコアモジュール
      • ドキュメントがほとんどない(けど簡単だよ)
      • 1コマンド1モジュール
      • mycli.pl command
      • CPAN版にはいくつかバグがあるので最新版を使いましょう(2008年5月23日現在のCPAN版は0.07)
    • App::Cmd
      • since October, 2007
      • インストールはちょっと難しくなる(コンパイラPerl 5.10のコアモジュール以外が必要)
      • マニュアル類は充実
      • 1コマンド1モジュール
    • MooseX::App::Cmd
      • since January, 2008
      • 依存モジュール多い
      • Mooseなのできれいに書ける
      • Mooseなので起動が遅い
    • その他
      • CPAN.pmみたいにェル付きのもの
      • PPMみたいにGUI付きのもの
      • Plaggerみたいなもの

Jesse Vincent - Step 3: Prophet - A peer to peer replicated property database

http://www.slideshare.net/obrajesse/prophet-a-peer-to-peer-replicated-disconnected-database

よくわかんなかった。

Chia-liang Kao (clkao) - Running Perlish Small Business with Perl

Daisuke Murase (typester) - FormValidator::Assets

http://svn.coderepos.org/share/docs/typester/formvalidator-assets/

  • 同じ入力項目はフォームが違ってもルールを1回だけ定義したい。DRY!
  • inputフィールドのnameベースのバリデーション
  • assets

Hiroshi Sakai (ziguzagu) - OpenSource TypePad Mobile

http://www.slideshare.net/ziguzagu/open-source-type-pad-mobile

  • ケータイで閲覧する部分(管理側ではなく)
  • TypeCast
  • Atom API経由で取得したデータを各携帯キャリアに最適化したHTMLに変換?
  • How to generate
    • MTOSのテンプレートエンジンを使用
    • a/imgタグのURLを変換(TypeCast経由に)
    • コンテンツ分割(対サイズ制限)
  • Filtering
    • HTMLタグ書き換え(DOCTYPE, accesskey, istyle, etc..)
    • CSSの適用
    • 文字コード変換
  • CPAN
    • HTML::Split
    • HTML::MobileFilter
  • 将来的にはTypePadに限らずAtom APIを持つサービスをモバイル対応できるようになる?

Masahiro Nagano (kazeburo) - memcached in mixi

http://alpha.mixi.co.jp/blog/?p=169

  • nagiosで監視
  • rrdtoolでグラフ化(通信量、クエリー数、使用量)
  • 特定のmemcachedにアクセス集中
  • 無限loopが起きる問題
  • 分散処理はアプリ側
    • keyのCRC値とサーバ台数の剰余
      • サーバー台数の増減があるとヒット率が大幅に下がる
    • そこでConsistent-Hashing
      • サーバー台数の増減の影響を局所化できる(詳しい仕組みはわからん)
      • Set::ConsistentHash + Cache::Memcached
      • Cache::Memcached::libmemcached
      • Cache::Memcached::Fast
  • memcached互換アプリケーション

Yuval Kogman (nothingmuch) - Moose

http://conferences.yapcasia.org/ya2008/talk/1017

  • Moose is not experimental, toy, accessor builder, source filter, black magic, perl 6 in perl5
  • Moose is a complete modern object framework for perl
  • Moose is syntac sugar for Class::MOP
  • Moose is stable & production ready
  • lazyはdefaultを遅延させる。newではなく最初に$object->staffが呼ばれたときに呼ばれる
  • 欠点
    • ロード時間
      • MooseX::Compile
    • いくつかの機能が遅い
    • hashrefじゃないクラスの拡張はトリッキー
  • 利点
    • 退屈なことを減らせる
      • 決まり文句を書かなくていい
      • 繰返しを減らせる
      • typoを減らせる
    • 短い
      • less code means fewer bugs
    • テストが少なくていい
      • Moose is well tested
      • focus on your code's purpose
    • 読みやすい
      • コードが文章みたいになってる
      • やりたいことだけを書ける。OOに仕掛けとかは書かなくて済む
    • Meta object protocol
      • PerlのOOをきれいに
      • provides introspection
      • enables powerful abstractions

Daisuke Maki - Getting Your Feet Even Wetter With XS

  • PerlC言語をつなげるためのフレームワーク
  • SV
    • 最も基本的な型
    • すべての親
    • 文字列、数値、リファレンスを格納できる
    • 任意の型のポインターを格納
    • SVの種類
  • SV以外
  • SVの中身を取得する
  • SVの中身は何?
  • Perlの代わりにXSを書かない。XSはつなぎ役だから!
  • Cの構造体をPerlとやりとりする
    • typemap
  • GCのタイミング
  • SvMAGIC

XSは1回しか書いたことがないんだけど用語とかの意味がわかんなくて苦労した。それこそSVとかSvOKとか。
てきとーなXSコードを見ながらこつこつ調べていって書いた覚えがある。
typemapとかMAGICとかは初めて聞いた。そして意味わからない><

Naoki Tomita (tomi-ru) - use Encode::JP::Mobile; - Perl標準の機能を使った絵文字の相互変換

http://www.slideshare.net/tomita/use-encodejpmobile

  • Perl標準のEncodeモジュールの方式で絵文字を含んだ文字列をencode/decodeできる
  • FormからPOSTされたデータをdecodeしてアプリ内ではUnicode(flagged utf-8)で扱い、DBにはutf-8でencodeして格納
  • DBから取り出す時にdeocdeしてアプリ内ではUnicode(flagged utf-8)で扱い、モバイル端末用にencodeして表示

これがキホン。さらに、

  • 文字列から絵文字を除去
  • PC向けに絵文字を画像で表示

といったことも可能。

Naoya Ito - Introduction to DBIx::MoCo

http://www.slideshare.net/naoya1977/introduction-to-moco/

  • Databaseクラス(接続情報)とModelクラス(スキーマ情報)
  • Ruby-like list operations
  • prefetch
  • inflate/deflate(explicit or implicit)
  • Transparent caching
  • Test fixture

tokiharu noto - Introducing "MobaSiF" (Mobile Simple Framework)

http://conferences.yapcasia.org/ya2008/talk/1014

  • MobaSiF == "Mobile Simple Framework"
  • 2003年11月から開発
  • 一部ではXSも使ってる
  • large-scale mobile servicesでの実績がある
  • Linux/Perl 5.8x/Apache/MySQL5.0.x
  • DoCoMo FOMA/au WIN/SoftBank 3GC
  • 絵文字
  • MTemplate
    • 共通テンプレートは各キャリア用にコンパイルされる(バイナリテンプレート?)
    • C言語 + XS
    • タグ
      • 変数置き換え(HTMLエスケープ、URIエスケープ、そのまま)
      • if文
      • ループ
      • キャリアスイッチ(#ifdefみたいなの)
      • インクルード
      • 定数
      • スタイル
  • dispatcher
  • benchmark
    • TT, Encode::JP::Mobile, Catalystと比較して高速
  • misc
    • DA.pm - DBハンドルの管理
    • Daemon.pm - デーモンを簡単に作るためのヘルパー
    • MLog.pm - ログの記録
    • mobamail - will be available
  • License
    • Attistic or GPLv2
  • Now available!

Emerson Mills - DBIx::Class Crash Course: Using DBIx::Class and other modules to make DB driven apps easy

Masahiro Nagano (kazeburo) - mod_perlをjob workerとして使う

http://alpha.mixi.co.jp/blog/?p=169

  • 古い設計から新しい設計へ
    • サーバーの耐障害性の強化、サーバー増設の簡単化
    • 処理速度の向上(起動時間、XML::Parser => XML::LibXML)
    • Atom 1.0対応
  • Plagger
    • 非同期のAggregator(HTTP::Async)
      • オンメモリ - 取得データが数GBだったらどうする?
      • connectは同期処理
  • mod_perlをworkerとして使う
    • 最初はメルマガ - HTMLを生成する代わりにメールを送る
    • ジョブを起動するkickerとそれを管理するmanager
    • Web Appの資産がそのまま使える(Apache、WAF)
    • スケールする
    • jobを細かく分割して並列性を上げ、障害時の影響範囲を狭める

Jonathan Rockway (jrockway) - Improving your Catalyst application

http://conferences.yapcasia.org/ya2008/talk/1036

  • Action Dispatching(Catalystを知ろう!)
  • Catalyst::Action::REST(GETとPOSTを分けるのが簡単)
  • Controllerにロジックを書くとテストできないし再利用もできない
  • Catalystに依存しないようにロジックを書けばテストができるようになる
  • Catalystからそれを使う場合はCatalyst::Model::Adaptorが使える
  • configを書く場所
    • Class
      • デフォルト値を書く
    • MyApp
      • デフォルト値を上書き
    • config file
      • Class/MyAppの設定を上書き
  • ACCEPT_CONTEXT
  • Moose
  • Base Controllerを書こう
  • DBIx::Class
    • MapMaker
    • Restricted resultsets
  • New Authentication system

おまけ

  • App::TemplateServer
    • アプリなしでテンプレートファイルをserveする
    • データをYAMLで与えることができる(っぽい)
    • テンプレートのテストに使える

Jesse Vincent - Everything but the secret sauce

http://conferences.yapcasia.org/ya2008/talk/984

  • Hiveminderを作る過程で便利なツールをいっぱい作った
  • バグを素早く検出
    • テストがたくさんあって全部実行するのに時間がかかる(30min)
      • prove -j 5 --fork(テストを並列実行、22min)
      • TAP::Harness::Remoteを使ってサーバーで実行(16.5min)
      • サーバーで並列実行(12min)
      • EC2の4台のサーバーで実行(89sec)
  • Carp::REPL
  • Template::Declare
    • Perlでテンプレートを書ける
  • CSS::Squish
    • CSSコンパイラ
    • CSSをまとめて1つのファイルにする。ファイル名はMD5。ブラウザにキャッシュさせる
  • App::ChangeLogger
    • リリースは手作業が多くて大変
    • shipitすればだいぶ楽だけど変更履歴は?
  • Shipwright
    • 依存モジュールが多いアプリはインストールが大変
    • すべてをバージョン管理下においてパッケージングする
      • 過去のビルドを再現できる
      • あの依存モジュールが変更されたよ!といって慌てる必要がなくなる
    • ビルド順も制御できるよ
  • Date::Extract
    • 文字列から日付を抽出
  • ユーザーがフィードバックしやすくすること
    • 返信すること
  • Net::IMAP::Server
  • タスク管理

Shipwrightは実際に使ってるけど便利です。一番始めに依存関係の解決とインストール順の解決が必要で、それは全自動というわけにはいかなくて大変だけど、これが終わってしまうと後はラク。インストール時に実行するコマンドも完全に制御できるってのもいい。例えば絶対にインストールが成功して動くことがわかってる場合にはmake testをスキップするようにすれば時間の節約にもなるし。適当なディレクトリを作ったりとか、なんかのシェルスクリプトをインストール後にコピーするとかmake installしたあとになんでもできるのも便利。

Atsushi Kobayashi (nekokak) - 古今東西ORマッパー

Casey West (cwest) - Build Domain Specific Languages with Perl

Kazuho Oku - Architecture of Pathtraq - building a computation-centric web service

http://www.slideshare.net/kazuho/yapcasia-2008-tokyo-pathtraq-building-a-computationcentric-web-service

  • スケールアウトの話
    • memory intensiveなサービスではサーバあたり32GB - 64GBのメモリ容量が最安
    • データベース分割はしない。タスク単位で別サーバへ移動
  • データの圧縮
    • URLの圧縮
      • URLは圧縮可能(schema、 www.、 .com、 .html)
      • 圧縮状態のままインデックスを使用して検索可能に
      • MySQL UDF(ユーザ定義関数)
      • InnoDBプラグイン
    • カウンタの圧縮
      • MySQL UDF
      • 理解できない・・
  • クエリキャッシュ
    • ログ分析は集約演算(重い)
    • Cache::Swifty
      • 読み込みが速い
  • Filter::SQL
    • SQL中心の開発
    • Perlはグルーコードとしての役割(DBIは複雑すぎる)
  • メッセージキュー
    • Q4M
      • MySQL 5.1のプラガブルストレージエンジン
      • Trunstable, Fast
      • Queue::Q4M

Faiz Kazi (fuzz) - From POE to Erlang

http://conferences.yapcasia.org/ya2008/talk/1055

  • Perlの並行プログラミング
    • ithread
      • スレッドは難しい
    • fork
      • slow, overhead
    • select
      • 理解しづらい
    • POE
      • selectは難しいけどフレームワークがある
      • イベント駆動
      • POE with .. Kernel, Process, Session, Event, yield
  • プロセッサ
    • マルチコア
  • Models for Concurrency
    • 2つの理論
    • Shared State Concurrency
    • Message Passing Concurrency
  • Erlang

最近Perlネットワークプログラミングを読んでPerlの並列プログラミング(fork, thread, select, 非同期IOなど)を勉強していたので興味深かった。Erlang勉強したい。

Jeff Kim - Gungho and cloud computing, a scalable crawling and processing framework

Jose Castro (cog) - What I've learned in Tokyo

Michael Schwern (Schwern) - Perl Is unDead