今日はYAPCの2日目です。昨日と同様に、gihyo.jpさんの特集にもレポートを掲載しますので、完成をお楽しみに!
Chia-liang Kaoさん「AnyMQ, Hippie and the real-time web」
電車遅延のため、開始が10分遅れるそうです。
- Plack/PSGI → アロンアルファ
- Streaming Interface がある
- CGI.pm は使うべきでない
- AnyEvent
- 様々なイベントループのサポート
- POEは面倒
- AnyMQ - Tatsumaki::MessageQueueをインスパイア
- Comet
- 色々なとこで使われている
- 色んなハックで成り立っている → MXHR, iframe, スピナー, 接続数制限
- WebSocket
- ws://とかwss://とか
- Upgrade: WebSocket などのヘッダを追加して実現
- \x{00} \x{ff} で囲む
- Origin と Sec-WebSocket-Origin ヘッダ
- Web::Hippie
- Web::Hippie::Pipe
- 双方向通信の抽象化 (MXHR, poll, Websocket, AnyMQ)
- これもミドルウェア(bus として AnyMQを指定)
- $env に hippie.listener, hippie.bus hippie.message のサポート
- JS側でもnew Hippie.Pipeをして、メッセージを受け取る
- デモ → 株価とチャット
Yappoさん「Ajax Application Testing」
- FICIA → Flash を使っていない写真共有サービス
- 既存のツール → JSUnit, Selenium, QUnit, Test::QUnit
- JSTAPd
- JavaScriptエンジンを通す、Ajaxコードのテスト、CLI(make test)
- Ajaxアプリテストツール、Tap対応、JSDeferred-ish
- モックアップを*.tに書ける
- テストサーバup、ブラウザ立ち上げ、テスト実行、ブラウザ終了(Fxは無理)
- ユーザが利用する可能性のある
- インストールはcpanmかgithubから
- 使い方
- jstapd -n プロジェクト名 で作成、--jstapd -d プロジェクト名 でサーバ起動
- 自動作成されるファイル。
- テストコードの記法
- テストケースを増やす
- .tを増やし、 JSTAPd::Suiteをuse, tests {...} を指定
- .jsと.htmlも追加するとよい
- Ajaxのテスト
- JSDeferred 的な記法 → jstapDeferred
- wait, next は JSDeferred と同様
- 非同期となるため、jstapDeferredを使わないとすぐテストが終了してしまう
- pop_request で$.ajax 時のwaitが可能
- .tファイルには、server_api関数。戻り値はJSONとしてブラウザに戻る
- Makefile.PL → prove -vr で代用できる
- JSTAPdの実装
- Twiggy → テストが終わるまでlong polling
- 今後 → 他言語でのサーバ実装、開発者募集
- おまけ(時間がないのでまとめだけ) → 必要なデータだけを処理、ユーザ操作の邪魔にならないように
- 質疑応答
Jesse Vincentさん「Perl5 is Alive!」
- @obra にtweetしましょう
- パンプキンとは? → 後で
- Perl5は16歳
- 5.12.0をリリースするのは恐かった → 今ではPerlの安定板は 5.12.0
- Perl6は? → 別の言語。7/29にrakudo.orgがリリース済
- これからは Perl6 の時代でも Perl5 の時代でもある
- 5、6はバージョンではない。別の言語。6は妹。
- 作者はどちらもLarry Wall氏だが、Larry氏の脳のバージョンが違う
- 5.12系のいいことは?
- pumpking → Pumpkin King, Patch pumpking
- 変なパッチを当てない、リリースをきちんとする
- 5.10系には5年がかかり、二人のpumpkingが変わっている
- 5.10.1はメンテナンスリリースだが、大量の修正があった(2,800 commits)
- →とてもメンテナンスじゃない
- pumpking を燃え尽きさせてはいけない
- 現在は @obra さん
- リファクタリングをする
- @obraさんは、Cハッカーではない → 誰かにお願いする
- Patch の適用 → 誰かにお願いする
- Release → 誰かにお願いする
- Language Designer → 一部をやる
- 好みの調停、論争の解決、人事、PM → @obraさんがやる
- 5.10に比べて、5.12以降の開発は非常にスムーズ。毎月20日前後にマイナーバージョンを出す
- 手順の明文化 → 今では、開発版は数時間でリリースできる
- pumpkingがリリースする必要はない
- メンテナンス版のポリシー
- 昔はなるべく多くの機能を入れていた → なるべく機能を入れない(不具合修正のみ)
- 5.12.1, 5.12.2 ではbugfixしかしていない。3ヶ月置きに出している。
- 2011-04-20 には、5.14系 が出る。
- perl5.12の試し方 → perlbrew
- 質問
Kenichi Ishigakiさん「ある連載の舞台裏 - History tells us ...」
- 次の原稿はまだできていない(!)
- 「なぜ連載スタイルを変えないのか」
- 連載が始まった経緯 → Mojoliciousの連載
- コミュニティに注目している → Larry氏の言葉「Perl6はコミュニティに作って欲しい」
- modernism(ギークのため?機能美)とpostmodernism(スーツのため?)
- モダンPerlは、流行って意味だけではない
- strawbery perl → Perlを普及させるならWindowsは大事
- 取り上げたかったもの → Moose, Rakudo, Sub::*, Devel::*, Catalyst
- 動向が早過ぎるので、落ち着いてから
- 隔週 → 最新の情報を配布するには遅い(早いメディアの例: tokuhirom氏のブログ)
- 陳腐化しない内容
- 読者層 → ギークは飽きっぽい
- How Toをやるには人的リソースに限りがある
- WEB+DB PressやSoftware Designなどの雑誌や書籍に任せる
- perl-users.jp や perl-mongers.org
- 日本人が関与するものは改めて紹介は不要
- モダンPerlは「ビジネスツール」
- Perlは赤ちゃん言葉から大人の言葉まで話せる
- 仕事を終わらせる、仕事を得るツール
- やるべきこと → 偏見を無くす「遅い、醜い」
- perlには4つの時代がある
- 「10年前」がテーマ
- いいことも悪いことも書く
- どのようにネタを仕入れているのか
- CPANのインデックスファイル → authors/00shois.xmlなど
- CHANGESにない場合 → MANIFESTを見る
- MANIFESTからテストの中身をそのまま見られる
- その他、AUTHORSやSYNONIPS
- CPANになければ・・・BackPANも利用
- さらに、ソース, DIFF, CPANTSも情報
- モジュールの情報が集まったら → ソース, Wikipedia, 過去のYAPC
- perlfoundation でお金の流れから注視しているとこがわかる
- ほか、youtubeやスライド、各プロジェクトのサイト(noc.perl.orgにも情報有り)
- www.perl.org/community.html
- lists.perl.org MLの一覧 → ただし、GMANE, MarkMailの方が見やすい
- IRCのログ irc.perl.org にチャネルがある → ただし、secretのチャネルもある。ブログに張り付けたりするのはマナー違反
- www.perl.comの記事 → 編集者さんのついている記事
- 雑誌類 → Perl Review, $foo(de)
- Advent calendar や use.perl.org(→ blogs.perl.org)
- これらは一部で、他にもたくさん読んでいる。1つの記事に1〜2日、1週間以上かかる
- 歴史を調べてると、色々なことがわかる → the futureやa future。
- 記事を読んで、今のPerlの姿を見て欲しい。
xaicronさん「let's database testing!!」
- DBのテスト → insert, update, trigger などの事故を未然に防げる
- 今日の話は、MySQL(ORMの話はなし。自社ではDBIをそのまま使うことが多いため)
- 鉄則 → ローカルでテストできること
- ステージング環境や自分PCで立ち上げっぱなしのDB → 毎回結果が変わるのでNG
- SQLiteはNG → 環境が違って意味がない
- Test::mysqld (@kazuhoさん作)
- mysqldの自動起動、終了。$mysqld->dsn で接続情報がもらえるのでそこにつなぐ
- デモ
- Text::Fixture::DBI を使ってデータ投入
- テーブル作成、triger や procedure、既存のDBからschema定義の取得など。YAML出力も。
- デモ
- これらを直接使うのは面倒。テスト用モジュールを作るのがオススメ。
- DBIと親和性が高いモジュール
- テストの流れ
- mysqldを立ち上げ、 fixtureでデータを入れ、値を取得してそれが正しいかをチェック
- fixtureには接続情報を渡し、yamlで初期化
- Test::mysqldの問題点 → make test が遅い
- Maketestの変更にて対応可能 → Module::Install::ExtendsMakeTest を使うと簡単
- → replace_default_make_test がMakefile.PLから使えるようになる
- 高速化!
Dan Kogaiさん「use LLEval;」
Toru Yamaguchiさん「Inside Mobage Platform」
- Open Social Container
- 用語
- ZOOKEEPERでのcanvasの例
- Apache Shindig とは
- Applicationは直接外に出れない(XHRの制約)ので、Gadgetサーバに代理してもらう
- 認証 - Security Token or OAuth
- SocialAPIの作り方
- Dispatcher → 設定はすべて *.pl 。Router::Simpleの利用。
- Intercepting Filterパターンを利用
- モデル
- APIで必要なロジックの記載。戻り値はFormatterにてArrayRefやHashRefなどに整形
- オブジェクトは利用しない
- Object::Container にすべて突っ込む。fork前にやる(Copy on Write)。Configで制御
- DB, Memcachedへのアクセス
- DBIx::DBHResolver
- オブジェクトとしてもクラスとしても動作
- 各種設定ファイルでの記述(Config::Any)
- DBIサブクラス、DBIx::Connectorでも接続可能
- ShardingしたDBの管理機能(予め分割方法は決めておく。JOINは適材適所)
- resolve_node_keys()
- DBIx::Connector → レキシカルなハンドル、txn + commit
- SQL::Abstract
- JOINやGROUP BY が複雑だと、ヒアドキュメント
- 表現力が足りない部分もある。新しいSQL作成モジュールがあってもいいかも
- Plugin::InsertMulti バルクインサート。ただし、1000件くらいを上限にすべき
- MySQLのパーティショニング → 日時の Range Partitioning が主
- MySQLのTRIGGER
- Worker
- 最近の事例: Cache::Memcached::Fast に no_wait がなかった
- Q4Mは実績があり、十分信用できる。ただし、初めて経験するような動作も起きるので覚悟は必要
- 質疑応答
Lightning Talks
charsbarさん「Top tens of 2009-2010」
ふしはらかんさん「opts.pm」
- 後夜祭来てね! 以上!!
- えーー(ブーイング)
- opts.pm → コマンドラインオプション
- Getopt::Long はまだまだ使いにくい
- 型、デフォルト値の指定、usage、オブジェクトへの変換
上田智さん「もっとMySQL」
Koichi Taniguchi (a.k.a. nipotan)さん「There are so many ways to shuffle it」
hakobeさん「ページャ実装マニアックス」
- ページャとは? → Googleとかで検索すればわかる
- 108のページャ実装を紹介
- Hatena::Bookmark::Pager (Data::Pageベース)
- Hatena::Diary::PagerMaker (HTMLを直接生成)
- Hatena::UgoMemo::Pager (データ生成までページャにやらせる)
- app->pager があったりする
- ページャとは → SQL結果、件数、日付、キャッシュ等の要素
- 残り105個
- Hatena::UgoMemo::Pager::Merged (SQLから)
- Hatena::UgoMemo::Pager::ArrayRef (ArrayRefから)
- CachedqueryOffset, Binary, Lite・・・
- ゴーーン!(時間切れ)
Tokuhiro Matsunoさん「液晶が割れたためスライドなしでトーク(仮名)」
Canada, Masakatzさん「岡山.pm。都会.pm。」
まかまかさん「Perl同人誌の宣伝」
dameninngennさん「草とPerl」
大西康裕さん「Test::Apache::RewriteRules で mod_rewrite のテストを書こう」
- はてなでページャーをたくさん作った
- mod_rewrite → スイス製アーミーナイフ
- RewriteRule → テストツール。
- 自信を持ってhttpd.confに1行追加できるようになります
Yusuke Wadaさん「Facebookを流行らせたのはボクです」
miyagawaさん「The Tale of Plack」
- 2本しか飲んでないそうです
- しばらくはSan Franciscoに住むが、日本には定期的に帰ってきたい
- six apartはSAY: (SAYMEDIA.COM)
- six apartの名前の由来 → 創業者2人の誕生日が6日離れていたから
- SAY: は ビルトイン関数だから、まあいい名前
- PSGI/Plack
- Plackは受け入れられている
- 今回のPlackに関係するトーク → 10以上。
- 利用している企業も増えている → 11社の例
- なんでPlackが成功したのか?
- 1) 借りるより、盗む → HTTP::Engineは借りるだけで既存の部分は残っていた
- Plackは、RackとWebOb.py からほとんどを盗んだ。
- 2) 後発の利点
- 3) JFDI → Just F*cking Do IT
- やるしかない。やりたい人が勝手にやってよい「Don't ask us do it.」
- 4). stfuawsc "Shut the fuck up and write some code."
- 喋っている暇があればとにかくコードを書く
- 5). TIMTOWTDI (TimTowdy)
- BSCINABTE (But sometimes consistency is not a bad thing either) = bicarbonate?
- →流行っている。Moose などのコンテキストで使うことが多い。
- PSGI → サーバとクライアントで共通のインタフェースができた
- TIMTOWTDI かつ BSCINABTE
- 6). KISS(keep it si
nmple*1 and stupid) (UNIXの標語)- なぜOOにしないのか? → シンプルにしたほうがよい
- 7)Perl: a glue language
- 8). 名前の付け方を変えている
- 9). People
- たくさんの参加者との交流 → 世界各地で撮ったPerl Mongersの写真を次々と公開(何十枚?)
- 色んな人とチャット、プレゼン、ビールで交流
- 今日はなぜ集まっているのか?
- YAPC::Asia → 毎年大きくなって来ている
- 2回目以降の開催は大変
- 開催が大変であれば、Jesse氏のように適切な仕組みを整備し、みんなで続けて欲しい
- 次回以降も(日本か、どこかで)話ができることを楽しみにしている
941さん「クロージング」
- YAPCでのダメージ → 足と愛機(S90)が壊れた
- 開発チームだが開発はしない → ブログ、イベント担当
- YAPCが成功するより先に @941++ と言われて脅されて頑張ってるw
- YAPC 2010の某日
- Twitterで要望を聞いた → 0件
- Tシャツ変更タイム(何枚来てるの?)
- たくさんのスポンサー、東工大さんに感謝 → 東工大Tシャツ
- メインスピーカー、スピーカー、会場の人々、に感謝
- ボランティアスタッフは壇上に
- エンターテイナー賞の発表(SQL文で集計)
- ベストトーク賞 次点
- nekokakさん「省サーバ運用」 (Mac mini メモリ8GB)
- 抽選タイム
- LUFB9GXEの人 → iPod nano (use strict; の刻印入り)
- ベストトーク賞
- tokuhiromさん「モダンな Perl5 開発環境について」 → MacBook Pro 8GB
- 「頑張ってこれでみなさんの役にたつモジュールを書きます」
- 「来年のスピーカーはあなたです」 (c) yusukebe
- 最後に @941 さんに拍手 → 来年もお願いします
合わせて読みたい
- もう一人のgihyo.jpレポーター → YAPC::Asia Tokyo 2010にgihyo.jpさんのレポータとして参加させていただいた
- 動画 → YouTube
- スピーカのアカウントの一覧 → YAPC::Asia2010スピーカーの(Twitter/Blog/github/cpan)アカウント
- スピーカのスライドの一覧 → YAPC::Asia 2010
*1:Thanks to @techno_neko