Python Hack-a-thon 2011.02 参加メモ

概要

イベント名 Python Hack-a-thon 2011.02
URL http://atnd.org/events/9977
日時 2011/02/19 9:00-19:00
場所 オラクル青山センター 13F S3,4,5,6

関連リンク

twitterハッシュタグ #aodag
togetter http://togetter.com/li/102904

@ Python GC

  • python.jp ドメイン保持者
  • 日本人で唯一PEP書いてる人
  • python の GC
    • 参照カウント
      • 循環参照は解放できない
      • Python2.0 以前はこれしか実装してなかった
    • マーク&スイープ
      • C のコードで 300 行ほど
  • GC の処理時間
    • gc.collect()
      • 2.6 > 2.7 > 3.1
      • 全体としては 100万オブジェクトで秒のオーダー
  • GC はまりどころ
    • gc.garbage がゴミであふれる
      • __del__() を持つオブジェクトはマーク&スイープで解放できない
      • gc.garbage というリストに貯められる
      • __del__() は悪。使うべからず
    • 意図しない循環参照
      • ログ用にトレースバック情報を貯める
      • 使いかけのジェネレータを放置
      • マーク&スイープは finally 節を持つジェネレータを解放しない
    • 大量のオブジェクトを生成するとやけに遅い
      • 若い世代のオブジェクトが大量にできると GC の負荷が高い
      • gc.disable() で一時的に GC 停止
      • 2.7 では改善
    • マルチスレッドで gc.disable()、gc.enable()
      • 知らないスレッドで __del__() が動く

@ twitter/gizzard

  • DB ネック = Disk I/O ネック
  • mobile データトラフィックの増加
    • 2015 6.3EB
    • 92% CAGR 2010-2015
  • Sharding
    • むずい
    • Partitioning + Replication
    • Partitioning
      • Scaleout
      • replicate(1) -- data-store(n) の構造が一般的
    • Replication
      • HA
    • not able to
      • Table JOIN
      • Record Grouping
  • Gizzard
    • FlockDB
      • GraphDB
    • Haplocheirus
    • Web/AP と DB の中間層
    • 作成の経緯
      • Cassandra と MySQL との A/B テスト
    • Web/AP
      • Thrift により比較的簡単にアクセス可能
    • sharding codes は scala
    • Gizzard Demo app, Rowz
    • MySQL Spider は Gizzard に似ている

@ Kinect

Kinect
    • ドライバ開発した人には賞金をやる!→速攻でドライバができたのが昨年末
    • Xbox360用のコントローラ
    • 13,000円
    • Natural Input デバイス
ドライバ
  • libfreenect
  • OpenNI (official)
    • Windows
    • Mac とかで動かすにはハックが必要
    • C++, python
    • Skeleton Detection
      • これが一番の違い
      • メチャクチャ CPU を食う
ハック
  • 「正しくない」使い方
  • Media art
  • Game Controller
    • Sex Game 用途は MS は認めていない
    • でも検索するといっぱい出てくるらしい
How to Use
  • API
    • getDepthAt(x,y)
    • getColorAt(x,y)
  • OpenCV

@ facebook/pfff

  • pfff(ぷふ)
    • OCaml 製の PHP 用ツール
    • Analyzer for codebase
      • ツール群
  • 関連ツール
    • ctags/gtags
    • cscope
    • lxr
  • (招来)対応(するかもしれない)言語
    • たくさん
  • 実際に対応している言語
  • ツール
    • codemap コードの雰囲気可視化
      • サイズ、呼び出し回数などで作るツリーマップ
    • sgrep 構文を考慮した grep
    • scheck コード上のミスを発見

@ reroom

  • リルム
  • 部屋じまんコミュニティ
  • nginx + django
  • gunicorn
  • meinheld
    • マインヘルド
    • gunicorn の worker
  • 1000円ぐらいの VPS で、数時間 10万PV は余裕

@ Art of Community

  • 目指すは結果の出せる強力なコミュニティ
  • 必要なこと
    • 参加者ががんばろうと思うコミュニティを作る
    • 権限委譲・透明
  • 1章:理論的な話
    • コミュニティに必要なのは一体感
    • 信用貯金重要
    • 信用いっぱい、偉い人
    • 自分を作らない- 2章:コミュニティのスタート
    • どんなコミュニティ?
      • 読み手主体
      • 書き手主体
      • 実績主義
    • ミッションステートメント
    • 活動のサイクル
  • 3章:コミュニケーション
    • 外部発信 6章
    • 運営が受け取るためのコミュニケーション 7章
    • ML
    • フォーラム
    • IRC
    • 他、しゃべり方など
  • 4章:プロセス
    • 目的達成をシンプルにする
    • ルールで固めない
      • ルールマニアはよくない
    • 権限付与
  • 5章:補助するためのツール
  • 6章:Buzz
    • Sphinx を広めたい!本を売りたい!どうする?
  • 7章:コミュニティの評価
    • 分析
  • 8章:運営
    • 組織、エスカレーション
    • 公共の施設を借りる場合など
    • タイプ
      • 独裁的なリーダーシップ
      • 啓蒙的な独裁体制 KDE とか
      • 委任 Ubuntu とか
  • 9章:対立への対処
  • 10章:イベントの運営
  • 11章:イベントマネージャの雇用

@ Redis

  • redis cluster
    • シンプルなロジック、まず動くものが重要という思想
    • redis のデータ構造はそのまま使える(はず)
    • 10 ノードぐらいで動かす
  • redis
    • KVS
    • リスト、セットなど多様なデータ構造
    • アトミック操作、トランザクション操作
    • 非同期で複製
    • 事例
      • WoW の avatars
      • stackoverflow.com (cache layer)

(私用で中座してたためこの間の話は聞いていない)

@ membase

(途中から)

  • membase、管理用 web コンソールがある
  • 1クラスタNノード
  • 1ノードMバケット
  • バケットは Membase のストレージ単位
  • バケット単位で memcache protocol 互換のストレージサーバが利用可能
  • Moxi
  • CouchBase は SQLite3 部分を CouchDB のストレージエンジンに変えたいらしい

@ blockdiag

  • blockdiag
    • Excel方眼紙が嫌だったから作った
    • 画像生成ツール
    • graphviz っぽい文法
  • レイアウトエンジン
  • 描画エンジン
    • PILとかReportLabとか
    • PILっぽいインタフェースで中間層を作っている
  • インタラクティブシェル
    • AppEngine上で動いている
    • blockdiagそのものだと勘違いされてる(気がする)
  • Webクローラでページ関係を図示
    • PyQtでキャプチャ取得

@ OpenStack

  • 開発体制
    • LauncPad
    • bzr
    • IRC
    • python PEP8 必須
    • Design Summit
      • 4ヶ月に1回
  • バージョン
    • 2/4 bexer リリース
      • ipv6対応
      • HyperV対応
    • Cactus 4/17

@ Convore

  • グループチャット
  • アーキテクチャ
    • POST
      • Web -> Celery -> Redis キューにセット
    • redis は Blocking GET してる
      • データがあるときだけ GET

@ PyCUDA

  • GPUの特徴
    • コア数多い
    • メモリアクセス高速
    • 演算能力の費用対効果が高い
    • 近年の性能向上率が高い
    • 何でも速くなるわけじゃない
    • 条件分岐の機構が CPU と違うので工夫が必要
    • メモリアクセスの最適化が重要
  • GPGPUアーキテクチャ
    • ヘテロジニアスコンピューティング
    • メモリ間転送がボトルネック
  • CUDA
    • NVIDIA GPU向けIDE
    • パフォーマンスを上げるためにはカーネル関数内でのメモリアクセスの最適化が重要
  • AWS
  • GPUArray
    • numpy.ndarray のような API
    • numpy とはメモリが別に確保
    • GPU に展開して処理
    • sum(), min(), max() なども用意
    • 10**8 のオーダーまでは GPU の方が遅い

@ Debug It

  • debug
  • 今回の目標 printf デバッグを減らす
  • printf デバッグ
    • 導入がメチャ簡単
    • 出力された値を見ることしかできない
  • pdb を使おう
    • 導入がメチャ簡単
    • python -mpdb demo.py
  • pdb デモ
    • その場メソッドに引数渡して返り値を見たりとかできる
  • pdb -> pudb
  • pdb のダメな点
    • 1文字変数を見れない
  • pudb
    • easy_install pudb
  • フレームワークの debugger
    • django-debug-toolbar
  • Werkzurg built-in
  • テストツール
    • doctest
    • nose
      • おすすめ
  • CI, VCS, 環境分離(virtualenv, buildout)

ウェブ魚拓

(色々な意味でダークな話なので心の内にとどめておく)

@ すべらない話

  • PHP魔改造
    • php をサーバとして起動
    • '-S' オプション追加
    • きちんとバインドできる

次回予定

  • 7月ぐらい
  • 募集は5月ぐらい

おまけ:で、お前は何やったの?

集合知プログラミング」7章、決定木を実装してました。
半日で動くところまでは行きましたが、サンプルコードがあまりに再利用性がないので結局作り直すことに。
概念自体はそんなに難しくないので、ちゃんと再利用性のあるやつを一つきちんと作っておきたいですね。

集合知プログラミング

集合知プログラミング

これ読んだときは python 大して知らなかったので気になりませんでしたが、あらためて読み直すと巷の評判通り結構適当なコード書いてますねこの本……。