YAPC::Asia Tokyo 2010

今回、スポンサー枠でYAPC Asia Tokyo 2010のチケットが手に入ったので、初めてYAPCに参加してきました。
会社が技術に理解があるのは、すばらしい。前の会社にいたら、少なくとも今回は参加していなかった。
やはり今回も少し道に迷ったが、偶然、広報の方に出会って案内してもらった。


今回もらったノベルティグッズなど。

グリーのノートとボールペンとシールは今年作ったノベルティ
mixiはバッグ(すごく助かった)と、フリスク
DeNAからはモバゲーのコインと交換できるカードをもらえた。


モバコインカードは配りやすくて、
サービス導入にも良くて、良いアイデアだなぁ、などと思ったのでした。

Web APIのすすめ 巨人にさらなる力を by @xaicron

http://blog.livedoor.jp/xaicron/archives/51178458.html
http://blog.livedoor.jp/xaicron/:@xaicronさんは、DeNAオープンソーシャルをやっている方。

Web APIの種類

  • パブリックに使えるもの

Google Mapなど。
API公開後のアクセス数は予想不能

  • 認証が必要なもの、内部的に使っているもの

オープンソーシャルAPIなど。
通常、ユーザー登録が必要なので、アクセス数はユーザー数から予想可能。

Web APIで重要なもの

早さが重要。早くないと使う気が起きない。

提供すべきWeb API

Web APIが流行るかどうかは誰にもわからない。公開してみるしかない。

高速なWeb APIの提供方法

既存のWAFは使わない。無駄な機能の無い、おれおれWAFが良い。

データ形式

Web APIが、XMLYAMLの形式で結果を返しても、誰も嬉しくない
そうなのか。

Webフレームワークつくるなら

ちょっとしたものならすぐ書ける。
たしかに、問題はOAuthの認証まわりくらいかな。

実践編

  • 高速なディスパッチャーは簡単に書ける
  • 問題はモデルの構造。
  • perlのパフォーマンスでは、メソッドの呼び出しを減らすことでパフォーマンスを上げられる。
  • オブジェクトの生成を減らすのが有効。ORマッパーはコスト高い。

運用編

  • ログ出力は必要。

APIを公開した場合、問い合わせに対応するためにログは超必要だなぁ。

まとめ

おれおれフレームワークは簡単に作れるから、恐れずに作ってみましょう。

nginx & Perl by sfujiwara

http://d.hatena.ne.jp/sfujiwara/20101016/1287205507

nginx

HTTPのプロキシ
マルチプロセス + non blocking IOなサーバー
割り込みがあったら、そちらの処理を先に行う。少ないプロセスで沢山の処理を行える。

いろいろモジュール紹介

Perlの組み込み

自動的には入らないのでビルドが必要。

nginxの注意点

時間のかかる処理は書いてはいけない
アプリケーションの処理は書いてはいけない。
プロキシだし、通常、処理を書く必要ないでしょう。

Ajax Application Testing by Yappo

http://blog.yappo.jp/yappo/archives/000722.html
Ajax用のテストツールの紹介。
デスクトップが汚い、と評判。この人はいろいろと面白いな。

JSTAPd

JSTAPdは、Ajaxアプリに特化したテストツール。
AJAXCLIからテスト実行る。
リクエスト、レスポンスのテストを簡単に書ける状態にしたもの?

Perl 5 is Alive! by Jesse Vincent

エンターテイナー。話が面白かった。

  • Perl5はまだまだ使えるし、機能も増えていっている。
  • というか、Perl5と、Per6は別の言語
  • 5と6の違いはLarryの脳のバージョンの違い
  • Perl5は死んだ? 悪いクスリでもやってるのでしょう
  • 5.12では、ユニコードのさらなるサポートや、いくつかのシュガーシンタックスのサポート
  • メンテナンスリリースだったはずだが、沢山の機能が増えている。
  • pumpkingがどんどん抜けていく。なんとかしたい。メンテナンスリリースの時の機能追加は、ひかえめに頼む。
  • Perl6(Rakudo Star)は、2010/7/29、にリリースされている。

Perl で自然言語処理 by @overlast

http://www.slideshare.net/overlast/perl-5460697

こつ

  • 最初は簡単に。徐々に洗練すると良い。
  • 機械はミスする。少しの間違いは許容すること
  • データは自分で集めて、自前で管理すること

Webサービスによくある悩み

Webユーザーの回遊性を高めたい
  • レコメンドを使う

興味が似ているユーザーを検索して表示。
例. CPAN Algorithn::NaiveBayes

  • アンカーテキストをつける

例. CPAN Text::Darts

データがあるけど、検索機能がない

用意する。

単語A、単語Bって一緒にならないの?

正規化する。
代表表記を決めて、寄せる。

ユーザーが全てのアイテムを見てくれない

ランダム表示するなどして対応。

出力結果の順番

ソート順を変える
ソート順を機械学習させる

データにカテゴリ化

感想

自分は今はWebサービスをしているので、発表内容はとても参考になりました。

映画に出てくるハッカーになりたい by cho45

http://subtech.g.hatena.ne.jp/cho45/20101016/1287204627

ハッカーの特徴

  • 文字が流れる
  • 暗号を使う

何故ハッカーになりたいか

もてたいから

ハッカーになるため、何をするか

何かプログラムを作ろう
ただし、実用性も欲しい

tail -f

これをもっとかっこよく
リアルタイムにグラフを作って表示。

Unix Programming with Perl by Kazuho Oku

ちょっと席が足りなかった。

エラーNO

ディレクトリが無いときにどうするか。
ディレクトリの存在チェックするだけでは不十分。
→ Errnoモジュールで判定しましょう。

$!とErrnoモジュールとの違い

$! は数字と判定すると数字が返り、文字と判定するとメッセージが返る
Errnoは システムのエラーナンバーを返す。

  • エラーナンバーを調べるには、manを使う。
$ man 2 mkdir

fork

forkはメモリをコピーする。
元のプロセスがもっていたファイルのロックを、新しいプロセスでも同じファイルのロックを見てしまう。
ファイルハンドラーなども、同じものを見てしまう。

防ぐには

ファイルはクローズしておくと良い。

Unix Signal

突然、ネットワークが止まる。
SIGPIPEにより、何かしら失敗したときに止まってしまう。

防ぐには

SIG{PIPE} = 'IGNORE'
をセットすれば良い。

Welcome Perl 6! Is Rakudo Star useful? by risou

Rakudo Star

2010/07/29に出た、Perl6の実装。
最新は9/28版
使える機能、まだ使えない機能がある。

Rakudo Starの心配点

  • 使いやすさ
  • 早さ

Easy Using

  • Perl5はとても便利。モジュールも多い。
  • Perl6のモジュールが少ないので、利便性はPerl5には及ばない。
  • 情報がない。

Speed

  • 遅い。

Rakudo Starは使えるか

  • Perl5 is alive
  • Perl5に、Perl6の機能が入ってきたので、Perl5でも良いんじゃない?
  • Perl6は、正規表現が良いので、使っている。

Inside mbga platform by Toru Yamaguchi

http://www.slideshare.net/zigorou/inside-mobage-platform

  • PC向けは全て 2-Legged OAuth

個人的には、この発表内で最も注目した発言。
実は認証まわりをどうしているのか、いろいろ疑問だったのだが明言してくれたことで解決。
Yahooモバゲーで思い切って2-Legged使うということは、他のモバゲーのサービスのいくつかの認証も2-Legged OAuthを使っているに違いない。

オープンソーシャルのコンテナの作り方

他社の状況を結構つかんでいるようだ。

  • データ形式はPCがJSON、サーバー間でやりとりする場合はREST。
  • 直すべき箇所をいろいろ。

PHP版のShindigも作りがJava版と似ているので、直す場所は大体おなじになります。
PHP版のShindigは、PHPだけど、PHPの流儀では書かれていないのです。

  • Shindigには、いろいろ不満があるようだ。

Web APIの作り方

  • Web Frameworkは極力使わない。
  • リクエスト → フィルターチェイン(フィルター x いくつか) → コントローラー
  • レスポンスは同じ経路を通って返す。
  • データの加工は、データを取ってから、フォーマッターに渡す。
  • 挙動の微妙な違いは設定を変えて起動。それぞれの設定毎にインスタンスを用意しておく。

DBアクセス

  • データをとって、Object::Contrainerに突っ込んでいる。
  • データ取得はDBI直を、ちょっと工夫したもの。Shardできるようにしてある。
  • 接続先はmemcachedで管理している。
  • トリガーを集計のトリガーなどで利用している。

質問

ShindigPerl処理間のデータやりとりを質問してみた。

感想

業務が被っていたので、とてもとても参考になりました。
今回のYAPCでは、良い発表にたいして投票を行う事ができます。
この発表を聞いたとき、既に投票済みだったけれど、残っていたら、この発表に投票したかった。
この発表だけでYAPCに参加した価値がありました。

おまけ

聞いた話から、mbga platform の作りを予想してみた。
前半はてきとー。よく考えたら、サーバーが処理してくれればワーカーとかいらない。
データを取って、加工して返す。図に入れなかったけど、データベースとの間にキャッシュとか用意されていると思う。
http://img.f.hatena.ne.jp/images/fotolife/t/taku-o/20101017/20101017070038_original.png?1287266480