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

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

Yokohama.pm テクニカルトーク #3 に参加中

ワタクシは横浜人ですので。

Perlモンテカルロ法 〜最強の○×ゲームエンジン開発〜(jukuin2000さん)

  • モンテカルロ法の説明
    • 乱数と確率を使う - 扇形の面積を求めるデモモンテカルロ法と扇形の面積の公式を元に、πの値を求めるデモ
  • 人工知能の歴史
    • 将棋、チェスはAIが人間を超えつつある
    • 囲碁は人間が断然強い
    • →が、マス数を減らして、AIが勝った == モンテカルロ法
  • 次に打つ手でシミュレートし、勝つ確率がもっとも高い手を選ぶ
  • ○×ゲームで、この手法を実演
  • モンテカルロ法の利点
    • ゲーム特有の戦略(必勝法)が全く不要
      • 作成者より強いプログラム、ゲームに詳しくない人でも書ける
    • どんなゲームでも、ルールと終了条件だけ知ってれば後はひたすらシミュレーションするだけ
  • モンテカルロ法が向いてないもの
    • 将棋 → ランダムに打つと、終局しない(シミュレーションを終えにくい)
  • Q. モンテカルロ法が一番進んでる分野は?
  • A. ゲームのAIから入ってるので、モンテカルロ法自体には詳しくない
  • Q. 後半に行くほど、シミュレーションが少なくなるので、早くなるのか?
  • A. そう。ただし、実際は100万回全てをいきなりやるのではなく、有望な10万手だけを存続するような方法で高速化できる

TPF-J(仮) (lestrratさん)

  • Shibuya.pm見てた人ばかりなので、さっくりとw
  • サポートされていると言うアピール
  • The Perl Foundation(米国) は、利用者ではなくPerl開発者のサポート
  • 学生+ビジネスを囲い込む
  • Perlの4つの指針
    • Life Hack Tool
      • ログとか、Webスクレイプとか、現実の業務
    • 第2言語
      • 別の言語やってる人もにもツールとして使ってもらう
    • システム管理
    • 半歩先の技術
  • やること
    • 出張講師、研修
    • YAPC運営
    • Summer of Code(インターンみたいの)
    • 野良プロジェクトのスポンサ
    • 技術者認定試験
    • リソースの整備(ドキュメント類)
  • 会費
    • 法人50万くらい? 個人5000円、学生無料
    • 予定会員 -> ドワンゴも?w
  • 組織形態: NPO法人では寄付だけなので辛い→一般社団法人*1
  • (法人)会員募集中 → Perlな人材を送ったりできますよ!

ライブコーディング (typesterさん)

時間オーバーしたものの、これは面白かったです。vimEmacs*2Catalystをここまで使いこなせたら、生産性もさぞかし高いでしょうねえ。

  • Catalystwiki作るよ!
  • 名前は Yokohama.pmなんでYiki
  • pmsetupで雛形
  • gitへ放り込む
  • 01_module.tから作る
    • テストを書くってよりも使用イメージを固める
  • File::Temp::tempdirを利用 → テストに便利
  • APIをだらだら書いてみる
    • $yiki->pages
    • $yiki->page('title');
    • $yiki->new_page('title');
    • $yiki->content('this is content');
    • $yiki->save($page);
    • $yiki->render();
  • それぞれ、どんな結果になるかを書いて、そのままテストにしてしまう
  • proveでテスト実行 → 失敗する。ちょっとずつテストを通してく
  • newで失敗 →use Moose
  • pagesで失敗 → pagesメソッドの実装。
    • MooseX::Types::Path::Class を利用 (Fileオブジェクト見たいなの)
    • corceしとく
    • data_dirフィールド と data_ext フィールド
    • ディレクトリのファイル名を舐めて、拡張子を外して返す
  • pageで失敗 → pageの実装
    • タイトルに拡張しつけて取り出す・・・戻り値はYiki::Pageクラス
    • ・・・あれ、テスト通らない → isとok間違えてたっぽい
  • new_pagesがない → new_pagesの実装
    • Yuki::Pageクラスを作成 (titleとcontentを持つだけ)
  • saveがない → saveの実装
    • ページのタイトルと拡張子でファイルを保存
    • テストがこけた? → テスト名をつけてなかったので、ちょっと混乱
  • rendar失敗 => 最後rendarの実装
    • Text::Markdownを利用 = テキストをHTML化
  • モジュール側完成!! → gitにコミット
  • シンボリックリンクCatalystを騙して、Yikiディレクトリの下にYiki::Webというモジュール群を作る
  • Plugin::ConfigLoader, Lightyを利用
  • helperとか言う名前のscript/create.plのエリアスを使ってるみたい
  • Catalyst::Model::Adaptor の利用 (Yikiモジュールがモデルとして使えるようになる)
  • モデル側に手を入れて、yamlを簡単にする
  • :Chained、:PathPath、:CaptureArgs、:PathPart、:Args*3
  • pageをロードできるようにして、完成?
  • typo → detachをdetashとしてた
  • typo → :PathPartだったらしいw
  • テンプレを作成
  • editページを作成 (フォーム作って、コントローラに処理追加)
  • 終了

ここからLTですよー。

twitterのメールゲートウェイtmitterの開発と運用(fjkktkysさん)

  • tmitter : twitterにメールで投稿できる
  • 2ヶ月使わないと抹消!
  • メールは aliases でパイプ渡し
  • MIME::Parserを利用
  • バージョン1
    • クッキーファイルだけ保存
    • パスワードは持ってない
    • API未使用
  • バージョン2
    • パスワードをDBに持つしかない → セキュリティには気をつけてる
    • パスワードをメールアカウントにした実装もあったが、危険では?
    • 高木さんに違法性を指摘されて終了したサービスとか

webサービスかモジュールのなんか(仮)Perl Meets Music(bayashiさん)

  • FIMML + JSMML テキストで音楽を鳴らせる
  • Perlはテキストなら作れる
  • 入力文字を文字種で分割し、音楽コードに変更
  • 利用モジュール
    • Music::Scales : 構成音を得る
    • Music::Chord::Namer : 構成音からコード名
    • Music::Chord::Note : コードから構成音
  • 結論: 音楽をもっと学ばないと

TheSchwartzの拡張 (masartzさん)

  • TheSchwartzの利用目的 : NWで分離されてたり、負荷が大きかったり
  • 問題が色々
  • Reload → workerプロセスはうごきっぱだから
    • TheSchwartz::Worker::Plugin::ModuleReload
  • Parallel - ジョブを作る度にplファイル作るの嫌だ
    • Parallerl::Prefork
  • Log → errorテーブルにインサートしかされない。ファイルに出せるようにした
  • Manager → Reload, Parallel, Log をまとめて生やせるWorkerのベース
  • PreData を今後やりたい
  • まとめ: 全体的に他力。今後はCodeRepos

ここまでLTでしたー。

疲れたアナタにメソッド☆キャッシュド(bonnuさん)

  • たんぽぽ開発グループ所属(たんぽぽ的な作業を無くすらしい)
  • 前提: キャッシュ=Cache::Memchached::Fast、O/Rマッパは使ってない
  • キャッシュが使われるシーン → 頻繁なアクセスがあるとこは全部
  • 回数が多い(名前とか誕生日)
    • マイ**シィ判定は、"$id1-$id2"と言うキーにLINKEDを入れて表す。$id1と$id2はソート
  • クエリが複雑で高負荷(誕生日の人一覧とか見える日記一覧とか)
  • レコードまるごとキャッシュ
  • キャッシュしたいものの格納方法とかタイミング、全部バラバラ
  • これまではキャッシュクラスを利用
    • 巨大なクラスで、モデルをラップしている
    • 悪いところ: 巨大過ぎ。影響でかい
  • 新しい方法 → 中央集権をやめる
  • Method::Cached
    • attribute でキャッシュを指定
    • ドメイン単位で、キャッシュクラスを指定
  • すでにAttribute::Cachedってのがあったらしい
  • TODO: まだ間違いがある、ドキュメントとか、キャッシュの有効期限に関数リファレンスとか

泣く子も黙るRPC(piarraさん)

  • RPCとは? リモートの関数をコール
    • CPANにたくさんモジュールあるよ
  • 本番サーバと開発サーバのキャッシュが違う
    • 開発サーバから、本番サーバのキャッシュメソッドを呼べるようにする
    • APIはRPCClient->new('MyCache')->method() なイメージ
  • サーバ側はCGIで実装、クライアントはgetするだけ
    • デモ
  • ExcelVBAからRPC → マクロで簡単にサーバ上の値が扱える*4

Offline Webapp(ZIGOROUさん)

  • Perlじゃないです!ニッチです。
  • DOM Storage (IE8, Fx2, Fx3, Safari4 で対応)
    • localStorage → ずっと残る
    • sessionStorage → ブラウザ閉じると消える。windowごと
    • 値を追加したり削除するとDOMイベントが発生
  • Cookieとの違い
    • 時間は指定不可
    • 容量が多い
  • Ex DOM Storage (IE6と7でのDOMStorage実装) 今日の話のメイン
  • DHTML Behaavior 任意の要素にイベントハンドラを追加できる仕組み
  • userData Behavior : IEにデフォルトでつくクライアントサイドストレージ
    • ライフサイクル的には用途に合う
    • keyの列挙がうまく行かないので、JSONで保存
    • ロックがうまくいかない
  • HTC(HTML Component Behavior)
  • <script>要素によって、localStorageとsessionStorageを表現する
  • 問題点
    • storageイベントが、異なるwindowにうまく共有されない
  • まとめ: DOM Storageがもうすぐクロスブラウザな技術になるよ!!

鹿(Yappoさん)

  • DSLによる軽量クラスビルダー*5
  • 昨日から初めて、すでに進捗80%
  • 利点
    • とても速い(特に起動)
    • 依存がない
    • 使用メモリが少ない
  • Mouseと比べると??
  • Shikaにないもの
    • 型チェック - デプロイしたらもう要らないでしょう
    • MOP
    • リードオンリーアクセサとか
    • does
    • make_immutable
    • その他、重い処理は要らね
  • 作成同期
    • HTTP::Engineの問題 → 依存が大きい、メモリ使用量
    • no Moose, use Shika
    • Shikaにして、make testでは2倍以上高速化*6
    • CGIでの実測も8倍とか
    • メモリの実測も、1/2以下

DBIx::Skinny (nekokakさん)

  • DBIx::Skinny 超薄いO/Rマッパ
  • DBIC便利だけど、もっとLiteに柔軟に
  • DBI直接だと、inflate、utf8flag
  • SQLで検索、条件指定で検索、resultsetっぽいのとか
  • 問題
    • SQL::Parserでパースしてるが、SQL::Parserの機能が弱い
    • SQLBNFを利用してパーサ作る?? → id:ZIGOROUさん
  • 速度では、Data::Modelがダントツ(Yappoさん++)

*1:来週月曜に公益法人法として施行されるっぽい

*2:ごめんなさいごめんなさいごめんなさい

*3:Catalystわからずorz

*4:これはExcel中毒の人を黙らせるにはいいツールになりそうだなあ

*5:Mooseじゃない!!w

*6:testはコンパイルフェーズが多いので