読者です 読者をやめる 読者になる 読者になる

北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

今日は Yokohama.pm #5 の日です

perl レポート

19:00 にスタートです。詳細はこちら

出ますので、いつものようにメモをまとめる予定です。ustreamはこちららしいです。

ダンコマンドラインツール - xaicronさん

cpanminus
  • CPAN::Shellの代替
  • Plackのリリースが伸びる原因に!?
  • cpan の問題点
    • 起動、メモリ
    • Bundle::CPANを入れるのが大変
    • コードがカオス
  • CPANPLUS
    • 5.10 からコア入りしているけど・・・
    • 重過ぎる
  • miyagawaさんが40分くらいで作った
  • 特徴
    • 単一のPerl Script
    • 高速、省メモリ
    • プラガブル
  • インストール → ダウンロードしてchmod +x か、普通にインストール
  • コマンドは cpanm
    • デフォルトでは表示をほとんど捨ててる。Y/Nが必要な時は --interactive
  • Pluginは17個
    • backpan とか
    • 今のとこは開発者向け。自己責任で
    • ~/.cpanm/plugins に保存する
  • DEMO
    • cpanm CGI とか
    • github:miyagawa/Plack なども(本当は)できる
cpan-outdated
  • cpan -rの代替
  • cpan-outdated | xargs cpanm
  • cpan-outdated | perl -lne 'system("cpanm $_")'
  • DEMO
    • cpan-outdatedの表示
    • 速い!

Kamui - Plack base frame work / nekokakさん

  • 過去6回(前夜祭込)全部発表してる!
  • 特徴
    • CLIでの使用を想定
    • Plackベース、Arkも参照 (元はSledge系)
    • Mobileのプラグインが豊富
      • 運用実績も入る予定(作っているとこ)
    • Object::Container
  • 設定はperlのコードで書ける - config.pl
  • Container の利用例
    • registerの使用, nameの使用
  • View はTT, TMTE, JSONに対応
  • Dispatcher は自前。アトリビュートは使ってない
  • before_dispatch などのフック
  • authorize は、アトリビュートで個別に指定可能
  • DEMO
    • Kamui + moxy
    • 絵文字切り替えのプラグインのデモ
    • {emoji:E6D3}
  • バイルやりたいなら、オススメ
    • 他、DoCoMoのguidやcss展開等
    • 人柱募集

AnyEvent::IRC::Server / kanさん

  • IRCとは・・・略
  • AnyEvent::IRC::Server
    • 拡張することを想定
    • githubにて開発中
    • tokuhiromさんがほとんど作ってる
  • まだ不具合はありそう。クライアントから繋げるのは可能
  • DEMO
    • TwitterのStreaming
    • Proxy (AnyEvent::IRC::Clientと組み合わせ)
      • ギャル文字に変換
  • 今後
    • ミニIRCサーバとして使える程度の実装
    • bot的な拡張(自動応答やタイトル表示等)
    • xircdを対応させる
    • AnyEvent::IRCに同梱?

Inside mbga Open Platform 予告編 / ZIGOROuさん

  • DeNA Technical Seminar の予告編
  • People API
    • ユーザプロフィール、フレンドの取得
  • モバゲーでは最高64万人フレンドの人が居る
    • テーブルが色々散っていて、JOINできない
    • friend , app_owner, people テープルなど
    • 最初にfriendテーブル(ここで10万かも)
    • 次にapp_ownerテーブル
  • max_allowed_packet この値を超えると怒られる
    • 5.1だと1MB
    • int(10) なので 10万件ほど
  • 安全な件数になるように、peopleテーブルを分割する(MEMORYテーブル)
  • 自前の並列ベンチマークツール
    • 例: INとtemporary table とどっちが速いのか
  • Message API, Acrtivity API
    • 即時性は不要 ← Q4Mを利用
    • 生成日時でパーティショニング(1日単位)
    • サマリーテーブル、メッセージ用のqueue
  • MySQL Partitioningについて
    • rangeで分割でき、selectにrange条件が入る場合
    • primary key や UNIQUE 制約が必要
  • queuが2つある
    • notification queue と cache queue(memcachedにキャッシュを作る)
    • selectしてmemcachedへ入れる部分が重かった
    • この部分を分離。slaveからselect。
    • ただし、レプリ遅延によって古いデータをselectしてしまうことが
    • IDにて、最新かのチェックが必要
  • 質疑応答
    • Q. マスタから引いて重いのは校正の問題では?
    • A. そうでもない。件数がすさまじい。構成も初めしょぼかった

Data::ObjectDriver / clouderさん

  • D::ODとは?
    • 元々MT::ObjectDriver
    • キャッシング+パーティショニングのサポート
    • マスタースレーブ構成の意識 (r_handle, rw_handle)
    • thin → 自分で実装する必要がある。has_aはかろうじてある
  • クラス構成
    • Driverクラス→キャッシュへの接続方法等
    • Objectクラス→モデル
    • 他、ResultSet(開発途上?), Profiler, GearmanDBIなど
  • モデルはBaseObjectのサブクラスとして定義
  • insert → new & save または bulk_insert
  • select → lookup または search または lookup_multi
  • update → save
  • delete → remove
  • has_a (キャッシュの指定も可能)
  • add_trigger → 豊富
  • キャッシュの使用 → Driverを変更するとよい
  • Master/Slave → Driverのr_handleとrw_handleをoverride
  • パーティショニング → Driver::Partition を利用
  • 希望
    • Data::Pageに対応して欲しい
    • count関数使いたい
    • 素のSQLの実行
    • JOINとか

Introduce Application Framework Polocky / polockyさん

  • Polockyとは? - livedoor wiki のキャラ
  • 使い方
    • Polocky::Core をインストール
    • polocky-setup コマンド
  • config は perlスクリプト
  • Plocky::WAF::CatalystLike を利用
    • Catalyst的になる
    • plackup で起動可能
    • stashとか、Catalystチック。
    • 最後は __POLOCKY__
  • WAF::Simple → 軽量
  • CLIツール
  • FileGenerator → ファイルを作成
  • Wikiranking はPolockyで動いている

Twib - 一人で作るはてブもどき編 / yusukebeさん

  • Twibはツイートを元にしたはてブもどき
  • ハードウェアは?
    • Appサーバ×1 と DBサーバ×1 を共有
  • 初期構成
  • 問題
    • ツイートが多い : 1.5/秒
  • Q4Mを導入、Crawlerを別プロセスへ
  • StreamReader を導入
  • 実際のログを表示 / ツ一ターのログとCrawlerのログ
  • 画像API: ついブ数、ユーザ画像、favicon
  • Noe - 2クラス程度の似非フレームワーク
    • テンプレは Text::MicroTemplate
  • チューニング
    • DBIx::Class のクエリを調整
    • 非正規化、likeの廃止
  • とりこぼし対策 → プロセス数増加、 topsy APIなど
  • 今後 → はてブもどき? マーケティング? がんばりんごする

OpenSocial Moblie Application Development / typesterさん

Moxy for OpenSocial
  • moxy
    • バイルアプリ開発用のプロクシサーバ
  • OpenSocialプラグイン
    • OAuth署名
    • リンクを辿れるように (通常はパラメータのみを渡すので)
    • OpenSocialコンテナを通さなくても開発が可能
  • デモ: OAuth機能
    • 直接appにはGETリクエストできない (OAuthの署名があるもののみ)
    • プラグインがあると、OAuthの情報を送れる(設定タブも加わる)
    • 制約: POSTはまだ無理な気がする。開発者募集
API呼び出し用非同期プロクシサーバ
  • appからOpenSocialコンテナにAPIを送る必要がある
    • APIの待ち時間が勿体ない
    • 外部API(twitterなど)を叩く場合も同様
  • 問題: 非同期は大変
    • モジュールが使えない
    • PHPとか非同期
  • 対策: APIの待ちのみを非同期
    • Plack::App::Reproxy
    • X-Reploxy-Callback を追加 (結果をPOSTする先)
    • 高速化したい

Module::Setup 2 / yappoさん

  • スマイリーハッカソンで機能追加された
  • みんながパッチあててくれた
  • h2xs, pmsetup, ModuleStarter
    • pmsetupベースに、雛形から作れるように
  • チュートリアル
    • cpanm Module::Setup
    • module-setup --init で設定 : フレーバーができる
    • config.yaml いじれば初期情報は変えられる
    • module-setup Your::Class
  • GitHub フレーバー
  • 他、CatalystStarter, PBP, XS などのフレーバー
  • フレーバーの編集方法
    • ~/.module-setup/flavors/ の中のディレクトリを編集
    • 再配布したいときは、--pack機能を
    • --executable で、専用スクリプトを作る
  • --test でフレーバーのテスト
  • フレーバーの継承 (パッチ)
  • プラグイン
  • 依存が多過ぎる
    • 今後 Module::Setup::Coreを作る予定
  • 質疑応答
    • Q. Module::Starter のような後からファイルの追加は?
    • A. 仕組みはある。使い方を忘れた。今後もっと簡単にするのでそちらを。

Template::Semantic / tomi-ruさん

  • pure HTML に埋め込む
  • Template::Refine → ループがない。TTと違い過ぎ
  • 注意: XMLじゃないと駄目
    • XML::LibXML ベース
  • 用途
    • テンプレへの埋め込み、の仕事を減らせる
    • アプリの出力をちょこっと修正
  • process にハッシュリファレンスで値を渡す
  • 通常はHTMLエスケープされる。リファレンス渡しするとHTML
  • undefを渡すと消去
  • ループも可能
  • processメソッドで、複数回の適用
  • Template::Semantic::CookBook を見よう
  • XML::LibXML を XML::Liberal程度の厳格さにしてる
  • 質疑応答
    • Q. HTML5だとXMLじゃなくなるんじゃ?
    • A. XML::LibXMLの進化に期待

最新Perl事情 - 5.12の新機能完全解説! / gfxさん

  • Parrot上で動く噂はなかったことに
  • 5.10の後継
  • 機能の整理 (Depricatedするなど)
  • use 5.011 = use strict
  • sub foo { ... } が動く (... はdie)
  • keys @array や each @array (Perl6的)
    • values @array もできるけど・・・
  • delete local $hash{elem}
  • package Foo 0.009001 ← コンパイルと同時にバージョン設定
  • overload
  • PL_keyword_plugin : よりよいソースフィルタ
  • deprecations
    • *.pl は軒並み駄目
    • UNIVERSAL isa や can (blessedとかを使う)
    • Switch (switchを使う)
    • bytes.pm
  • Perl 5.14へ (妄想)
    • $obj->grep { /foo/ };
    • OOサポートモジュール*1のコア入り
    • 5.14の開発に関わりたい (の前に修飾)
  • 質疑応答
    • Q. ブロック渡しは今でもできるのでは?
    • A. sub {} で。

"Webを支える技術"の告知 / ikasam_aさん

  • 4月に出る
  • WEBの基本形
    • URI, HTTP, Hyper media
  • WEBサービスの実践的な設計
    • WEBらしい設計
  • Text::Acme::Inao ではパースできない
  • レビューアとして参加してます!!

感想

kidとかTeedaとか好きだったんで、Template::Semanticには興味津々でした。

後、 5.12 の話も大変参考になりました。 ...演算子(Yada-Yada-Yada operator)はシンプルでいいですねww 5.14の開発にも期待です。

最後に、主催のid:clouderさんと懇親会幹事のid:masartzさん、お疲れ様でした!

*1:やっぱ Mouse ?懇親会で、Mouseはコアにするのはちょっとなーって話。