今日からが本当のYAPCです。まもなく、東京工業大学大岡山キャンパスに向けて移動します。
昨日と同様に、gihyo.jpさんの特集にもレポートを掲載しています。gihyo.jpさんにはもう一人 @usuihiro さんもレポートを書かれていますので、そちらも合わせて会場の雰囲気を感じて頂ければと思います。
Daisuke Makiさん「Welcome, Perl!」
Larry Wallさん「That Goes Without Saying (or Does It?)」
- 日本語と英語の違い
- must <=> なければなりません (英語が短い)
- must not <=> いけない (日本語が短い)
- 英語には複数形がある
- RMS(Root Mean Square)
- Perlで必須な物
- @, $
- {}
- () → 必要な時と不要なときがある
- 「@ints = 1 .. 10」と書けるが、Perl5では「@ints = 1, 2, 3」と書けない
- 結果を格納する $r
- CPANモジュールを使う → List::Util の reduce
- Perl6では
- reduce を [+] と書ける
- map にはカンマが必要 → ただし、 @nums X** 2 と書ける
- 引数は、subの行に書ける
- $r を完全に消せる
- print "\n" → say
- Perl6では、 + はスカラコンテキストを与える
- Perl5ですでに使えるもの → say, smart matching, given/when, Moose
- 将来もPerl5でサポートされないもの → type system, multi method dispatch, lazy context
- Ada
- with と use, begin と end, nums'Range, 1..10が簡単に書けない
- ファットアロー =>
- Java
- import(java.*), class, "public static", 型, C形式のループ
- Math.とかSystem.outとか
- JS
- function(長い)
- reduceの初期値が必要(Perl6では+なら0、*なら1、<ならtrueが使われる)
- Python
- __future__ のインポート、インデント
- range(1, 11) (# 1 .. 10 とコメントしないとわからないよ)
- Perl6より短く書けるのは、Mathmatica (これは当たり前)
- J → 短過ぎる
- このような見本は、 http://rosettacode.org/ で見られる
―Sqiral matrix, Zig-zag matrix の例
- 「Please have a wonderful conference. You must!」
石橋利真さん「最近のPerlな物作り事例」
- MTLでの業務
- suumoの事例
- suumo的なサービスを横展開
- 開発環境を整えると、長期に渡って開発を続けられる
- 本番環境でもテストを回している → 設定、CPANモジュール漏れの発見。テスト用DBを用意。
- Subversion に CPANモジュールも投入。svn up でデプロイ。
- 動的ライブラリも、.soをsvnへ登録
- *.conf もsvnへ。全環境分を登録し、symlinkで切り替え
- symlink 変更スクリプトを用意している
- 複数サービスによるロジックの共有
- (環境まで含めた)フレームワーク
- インフラ
- Hardware + XenServer
- VMの複製コピーができるので楽
- 仕事の仕方 → 企画、サイト設計、業務フロー、開発、運用、すべてにエンジニアが参加
- 仕事のスケール → 営業、顧客サポートまで含む大きな体制
- 金銭的にも、大きな額が動く(1,000社程度の契約)
- 様々なオープンソースを利用している(Thanks To!)
kawanetさん「Mashup Awards 6」
Kensuke Kanekoさん「30days Albumの裏側 後日談」
- 30days Album
- 素結合を意識したシステム構成
- MogileFSの障害対応
- データアクセス不可の障害発生 → ストレージプールから切り離し、再度戻す
- mogadm にて deviceを "dead"にする。復帰時は"alive"に戻す
- コピーの確認 → X-REPROXY-URLヘッダを見る。又は、file_onテーブルを見る
- 障害が起きても、サービスは停止しない。
- perlbal の再起動(キャッシュのクリア)
- MogileFSのリバランス
- 自作サーバ MP-100 (馬崎さんパワー100Kg、の略)
- FLVの疑似ストリーミングとは
- Perlbalプラグインを作成した
- PerlbalとRangeヘッダ
- Perlbal は Rangeヘッダリクエストでエラーが出る → X-REPROXY-EXPETED-SIZE が原因
- Content-Length と一致するか比較していた。ストレージサーバがRangeヘッダを考慮してなかった。
- 複数のRangeヘッダについては無視(仕様がややこしい)
Tatsuro Hisamoriさん「ソーシャルアプリ向け システム監視運用の勘所」
malaさん「Studying HTTP with Perl」
- PerlのHTTPクライアント(非並列)
- PerlのHTTPクライアント(並列)
- HTTP::Async, LWP::Parallel → 古く、オススメできない
- AnyEvent::HTTP → AnyEvent ware。コードを追いやすい
- Coro::LWP → LWPをCoro対応させる。ただしCoroは黒魔術。Perlプロセス全体に影響有。
- AnyEvent::Curl
- 使いどころ
- LWPの性能限界を超えている時
- ブロックしてはいけないとき(つまり、WWW::Curlでは駄目なとき)
- LWPを利用した機能があるときは、LWP::Compat
- curl_multi_fdset でとりだしたfdを AnyEventで監視
- Perl並列処理入門
- perlのthreadはバグッてるので使わないこと
- forkによるマルチプロセス
- イベント駆動(I/O多重化)
- forkの特徴
- スケジューリングはOS任せ
- マルチコアを生かせる
- forkのコストの高さ、メモリ消費の大きさ
- イベント駆動
- AnyEvent, POE → メモリが少なくて住む
- Coro → 直感的なコードを並列化できる・・・が、ハマりどころ多い
- 現実解 → イベント駆動 + prefork
- AnyEvent::DBI → forkして実行する
- prefork型 → mod_perl, starman, starlet, Paraller::Prefork, WWW::Curl
- イベント駆動 → Twiggy, Corona, AnyEvent::HTTP, Coro::LWP,AnyEvent::Curl
- スレッド間の強調動作をするときに向いている → 同一ホストへのリクエストを制限する時など
- クライアント → 相手の応答速度が予想できればWWW::Curl、そうでなければAnyEvent::Curl
- パフォーマンスチューニング
- HTTPヘッダのパースをXS化。ただし、パースしない方が速い
- まだXSで落ちたりするので注意
- デフォルトのcurlは名前解決でブロック
- RPCのプロトコルはHTTPの方が有利
- 例えば、 Kyoto Tycoon (mikio hirabayashiさん)
- アクセスが楽、表現力がある、非同期アクセスにも強い
- HTTPのオーバヘッドの解決 → Keep-alive、複数データをまとめて1リクエストで転送すればよい
- HTTPの性能限界 → echoサーバとHTTPをkazuhookuさんが比較。チューニングされたhttpdは十分に速い
- curlにはまだ高速化の余地がある → gfxさんがやってくれるのではないか
- HTTPクライアントのテスト方法
伊藤直也さん「Perl/PHPと大規模Web開発」
- LLフレームワークの近況
- Perlでは
- Mojolicious
- Sebastien Riedel氏作
- Mojolicious::Lite → Sinatraライクな記法
- websocket 対応
- PHPでは
- 言語によって大きな差異はないが、好みはある
- 中から大規模とは → 500から10000台以上
- 収益化までに数年かかっている → 数人で立ち上げたシステムを数十人で運用開発
- 昔のアーキテクチャを使い続ける必要。運用を続けなければならい。
- 「レガシー」とは違う → プロトコルはHTTPであり、枯れている。LL言語は後方互換が高い
- フレームワークの内製バージョンができる理由 → 自社目的の拡張をしたいため。公開はしにくい
- アーキテクチャの刷新
- スケーラビリティ
- 言語での優位性は低い
- I/Oの分散や全体の設計が大切
- 3層構造、スケールアウト、パーティショニング、キャッシュ、メッセージング
- 大規模Webサービスは、成長し続けることが大切
- レガシー部分を蘇らせるのが腕の見せ所
- 言語での優位性は少ない → 精神面では、好きな言語を使った方がよいけど
- Perl → PHP の移行コストは?
- 少ない。CPANは欲しい
- 次世代Web技術が大事で、言語の知識の比率は少ない
- ツールはPerlで作っている → メンテをどうするかが課題
- 質疑応答
- Q. use backslash はいつ公開?
- A. そのうち公開します
Lightning Talks
Fumiko Kuranoさん「Inside webcast of Gozan-no-Okuribi in Kyoto」
Yappoさん「Happy AnySan Hacking」
Naoki Tomitaさん「OFPM」
Kamipoさん「MySQLのPluginいろいろ」
issmさん「「名古屋でPerlをゆるく語る会」をはじめました」
bayashiさん「YAPC::EU 2010 Reports」
峰松 浩樹さん「基幹システムがperlでどうしてこうなった」
合わせて読みたい
- もう一人のgihyo.jpレポーター → YAPC::Asia Tokyo 2010にgihyo.jpさんのレポータとして参加させていただいた
- 動画 → YouTube
- スピーカのアカウントの一覧 → YAPC::Asia2010スピーカーの(Twitter/Blog/github/cpan)アカウント
- スピーカのスライドの一覧 → YAPC::Asia 2010