YAPC::Asia 2012 2日目

YAPC::Asia 2012 2日目を見に行ったのはいいけど聞いた内容を書き留めておくのにふさわしい場所が無かったので急遽はてなダイアリーを始めてメモった。

(仕事の都合で1日目には行けなかったので2日目のみ)

「新しい」を生み出すためのWebアプリ開発とその周辺 (by Yusuke Wada)

小規模Webアプリ / スタートアップで何を作るか。どう作るか。

  • 何を作るか: つまりは「企画」
    • 企画プロセスの最初にあるのは「哲学」
    • 見た目が似ているサービスでも源流となる哲学に違いがあったりする。
  • リスクの検証と対処
    • 考えられる技術的なリスクに関しては、まずはいろいろ試してみる。
  • 事例1: YourAVHost
  • 開発
    • Mojoは依存が少ないのがイケてる。Perl標準モジュールにしか依存していない。
    • OR mapperの作るオブジェクトをそのまんまModelとして扱うのはNG
    • DBはMySQL安定。とりあえずスタートアップにNoSQLは必要ない。
  • 事例2: bokete.jp
    • まとめサイトの効果でアクセス急増 -> しかも継続
    • タイムアウト続出してヤバいことに。
    • スケールアウトしようにもいろんなCatalyst pluginに依存していてうまく移行できず。

Perlでちょいモテデザインパターン (by まんでぃー)

デザインパターンの話。

  • Factoryパターン
    • オブジェクト生成のパラメータがいろいろ複雑な場合、よくあるレシピを関数化してまとめておく
  • Flyweightパターン
    • Factory + Singletonといった感じ。
    • 生成済みのオブジェクトを保持しておいて、2回目移行の生成呼び出しは既存のインスタンスを返す。
  • Perlデザインパターンを実践するにはやっぱりMoose/Mouseを使うのが手っ取り早い

Perl as a Foreign language (by Dan Kogai)

Perlと他のLLについて。

  • 現在のLLの状況: Javascript と その他大勢
  • とはいえ、いろんなコンピュータにデフォルトで入っているのはPerlPythonくらい。nodeはまだないでしょう。
  • Perlはダサいコードでもちゃんと動く
  • シェルスクリプト + α としてのPerl -> 「ミニマルPerlhttp://www.amazon.co.jp/dp/4873113687/
  • Perlは遅いか?
    • 立ち上がりは爆速!
    • node, phpは立ち上がり重い。起動しっ放しが前提か。
  • PerlはTrue TDD
    • テストが通らないとモジュールをインストールしてくれません
  • Unicodeサポート -> PerlRuby1.9が優秀

Perlで始める!初めての機械学習の学習 (by TAKESAKO)

機械学習Kinectについて

Performance Profiling with Devel::NYTProf (by Tim Bunce)

Devel::NYTProfについて。

  • Profiling
    • とりあえず -MDevel::NYTProf しておけばおk
    • HTMLでレポートを出力したり
    • どの関数がどの関数を何回呼んでいるか?
  • Optimization
    • DON'T DO OPTIMIZATION! ハードウェアは安く、エンジニアは高いもの
    • それでも高速化の工夫をやってみるんなら・・・
    • 特にループの中でメソッドコールたくさんやるくらいなら一時変数使う
    • 何もしない関数を呼び出さない (verboseフラグを切ってる時のログ出力関数とか)
    • 呼び出し回数の多い関数で、引数コピーをしない。shiftと@_を使う。
    • キャッシュは効果的だけど、invalidationをどうするか考えとけよ?
    • lightweightなオブジェクトを使ってみる。DateTime::Tinyとか。
    • Perlバージョンを上げてみる。
    • 沢山行われる処理をXS/Cで実装してみる
  • Devel::NYTProfはCoroと一緒に使うと死ぬ
    • Coroは未サポート。"Coro is magic"
    • Coroやthreadのサポートは今後の課題だが、優先度は低め
    • 誰かやってくれない?

Lightning Talks Day 2

  • DNSを使ってHA(High Availability) LB(Load Balancing)
    • 個々のサーバ内にDNSを立てて、DNSを使ってラウンドロビンなりなんなり。
    • 接続先システムのヘルスチェックを担当するDNSは別途一つだけ立てて、ヘルスチェックの結果を各サーバ内のDNSへ同期
    • MyDNSとやらを使っているみたい。
  • Imager::Heatmap
    • 座標データからヒートマップを描画する
  • それPHPでできるよ
    • というか、PHPPerlコードを実行できるという話
  • perl11