Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

今日は「帰ってきた Python Workshop 2010/12」の日です

ケータイの予備バッテリーは2つ持ってきたのにケータイを忘れましたが、気を取り直して出席します! ハッシュタグ#pw1012みたいです。

Session 01. mixiアプリGoogle App Engine

mixiプラットフォームについて / 山下さん
  • mixiPerlの会社・・・Pethonについては別の方に
  • 個人デベロッパーにも近日公開予定
  • developer.mixi.co.jpも参照
  • PC、モバイル、スマートフォンに対応
  • mixiプラットフォームの利点 → ユーザを集めやすい
    • 1ヶ月で40万ユーザとか1週間程度で200万ユーザとか
    • ユーザ登録不要、ユーザによる宣伝
    • Activity, Voice, Invite, Request, Message などのAPIの存在
  • mixiアプリの構成
    • Application ProxyとMedia Cache Proxyがある
    • 1000万〜数億PV/日 (200-500 req/sec) → 普通のサーバだときつい
  • インフラ構築支援サービス
App Engine for Mixi Apps / 松尾さん
  • アクセスにばらつきがある → 時間によるアクセスの波、人気が出るか
  • 人気が出なかった場合は、コストが0で済む!
  • アクティブなアプリが15万、開発者が10万、PVは10億PV/日、最高実績1600QPS
    • ポテンシャルは、この10倍いけるはず
  • Quota → お金により増えるものと、増えないものがある
    • 増えないもの → リクエスト、発信・受信帯域、CPU時間
    • ただし、どうしても困った場合は松尾さんに連絡をすればなんとかなるみたい
  • スケールのために気をつけること
  • GAE1.4出たよ!
  • ロードマップ
    • 30秒以上走らせることができるバックグラウンドサーバ
    • レイテンシィよりアベイラビリティを優先する設定が増える(メンテ時とかも書き込みが可能になる)
バスキュールについて / 田中さん
  • mixiアプリ『華麗なる女優たち』
    • GAE + Pythonを利用
    • 65万人以上登録、DAUは10万以上、ピークは200-300req/sec 1000-1500万/日
  • 開発 → 経験のあるパートナーが居なかったが、頑張ってもらった
  • トラブル事例1: 404 not found が大量発生
    • ImportError により、不完全なインスタンスが立ち上がっていた
    • @shin_no_suke さん → @tokibito さん → コンソールの開発により、解決
  • トラブル事例1: 突発的にLatencyが悪くなる
    • 「JOIN停止」問題。3分間に10秒以上のタイムアウト1000件以上
    • 松尾さんにお願いし、解決。HTTP QUEのタイムアウトを10秒から7秒に下げた
  • GAEのメリット
    • スケーラビリティ → mixi Xmas 2010 は 1週間で200万人。普通に動いている
    • コスト → 1000万リクエスト = 100ドル。1ヶ月30万円程度
  • まとめ: ユーザにはドキドキ、我々はウキウキ
  • 松尾さんより補足
    • 404エラー → Dead line excidate errror?? が起きたときに、モジュールのインポートが終わってしまうのが原因。1.4では改善されている
    • レイテンシーの問題も1.4ではほぼ解決しているはず。しかし、mixiアプリでは松尾さんへ連絡してタイムアウトを下げた方がベター

Session 02. Harvester - CG映像制作用ジョブディスパッチシステム / 齊藤さん、石川(@yusukei)さん

  • デモ → DIVA 2ndのオープニング映像 (Ustream非公開)
  • 80名ほどのチームで、ソフトは7名。インハウスのツールを開発
  • CG業界ではPythonが使われている
    • Maya, Houdini, Cinema4D, Blender, Nuke への組込
    • C++に続き、2位。3位以降はMEL、JS、Ruby
  • ジョブディスパッチとはなぜ必要?
    • 制作にCPUリソースが必要 → 1:30+3:30の映像で、820日とか
    • 多数のサーバで分散処理
    • レンダーファーム → レンダリング用のサーバ群、140ブレード(1300CPU)、100TB
    • 服や髪のシミュレーションなどにもサーバの作業が必要
    • エンコード、ベイクにも
    • サーバ群を有効利用するために必要
  • Havesterの歴史
    • 初期バージョンは、定期的再起動が必要(cronを利用していた)
    • バージョン2で安定
    • バージョン3は、PushからPullへ設計変更
  • Havesterの構成
    • クライアント → Manager(mod_wsgi) → worker
    • 通信はJSON
    • Python2.6ベース。ManagerはLinux、workerはWindows
    • SQLAlchemy, MySQLdb, mywin32, memchached, paste, zope など
  • 特徴(1): サーバの区分けを台数ではなく割合で設定する
  • 問題 → 台数固定だと、空いてるサーバが有効利用されない
    • 空いているときは割合を超えて利用。混み始めると自動調整
  • 特徴(2): タグにより、特定ノードへ振ることができる
    • OSの種類や、ソフトのライセンスの問題などがあるため
  • 特徴(3): ジョブテンプレートにより、新しいアプリケーションへの対応が簡単
  • ExtJSによるGUI → WEB経由の利点がある
    • ユーザがクライアントアプリを入れなくていい
    • クライアントを強制的にバージョンアップできる
    • クライアントのワークステーションにもサーバを建てている → mod_proxyで逆向きに再リクエスト
  • APIJSONベース → デバグしやすい、HTTPは安定している、ExtJSとの相性
  • ドキュメント
    • WSGIミドルウェアにより実現
    • →WEBからAPIドキュメントを見られる。直接APIを呼び出してテストもできる
  • 運用面 → GUIからの再起動、Zabbixとの連動で監視
  • 苦労話: レンダラーがメモリを使い尽くすと、Pythonがメモリを使えなくなる
    • コネクション時のアロケーションが問題。事前にアロケーションできればいいのだが、そこまでpythonインスタンスを制御できなそう
    • MySQL周りの性能低下
    • JOSNのサイズの肥大化 → Apache の deflate が効果的
    • WindowsのWMIが安定しない
    • time.sleep で interrupt call backの発生(スレッド周り?) → win32のsleepで凌ぐ
    • CPUコアが多過ぎる問題 → 特定のアプリが立ち上がらなかったり、十分な性能が出なかったり
  • 予定 → PullとPush やはり両方したい、電力管理など
  • 質疑応答
    • Q. 実際にどんなタスクを設定するのかを見たい
    • A. クライアントアプリに組み込まれている。
    • Q. ユーザはタスクがどう分割されるかは考える?
    • A. 考えなくてよい。依存関係などもツールが解決する
    • Q. マシンの割合の単位は? ロードアベレージとかCPU時間を見る?
    • A. 台数ベース。

Session 03. Pythonのここがイケてる、イケてない / 司会:郷田まり子さん

自己紹介
  • Java : 庄司嘉織さん(@yoshiori) → ドワンゴのプレミアム会員になってね!
  • Perl : 松野徳大さん(@tokuhirom) → 5年前はPythonのイベントでも話してた
  • PHP : 小泉守義さん(@moriyoshi) → 蓮舫に2位ではいけないのかと言われた系をやってます
  • Ruby : 高橋征義さん(@takahashim) → IT系の電子書籍Pythonの原稿くれる人募集
  • Python : 西尾泰和 さん(@nishio) → 一番使っていた言語は自然言語
Pythonのイケてるとこ
  • @yoshioriさん
    • インデント
    • END=falseとかけばENDも使える
    • Javaと比べるとすべてがPythonの方がいい
    • ダックタイピング、インタプリタ
    • 0、空の文字、空の配列がfalseになる
  • @tokuhiromさん
    • インデントくらいしかない
    • Pythonの人がPerl使うときはAcme::Pythonicを使うといい
    • メソッドの定義をいじりやすい
    • blessが要らない
    • インタプリターのコードが(Perlより)読みやすい
    • 略語を覚えなくていい
    • 標準ライブラリが多い (PerlはHTTPクライアントもない。次くらいには入る)
  • @moriyoshiさん
    • Python嫌い、Ruby最高
    • 標準ライブラリの充実
    • PHPでも多いのでは?? → 標準関数が多いだけでまとまりがない
    • ドキュメントが充実 (PHPには劣るが)
  • @takahashimさん
    • RubyRailsのための言語として見られることが多い。それ以外の分野はPythonが普及
    • GAEへの対応
    • Rubyは英語っぽいDSLが流行過ぎ。Pythonではないのでは? しっかりしてるイメージ
  • @nishioさん
    • インデント
    • Javaは静的言語だからIDEサポートが嬉しいのではないか
    • IDEの素晴らしさで言語的なものではない」
    • IDEも含めての言語では?
    • 「個人的にはEclipse最強。静的・動的型付けは、IDEの違いではなく、性質ではない」
Pythonはここがイケてない
  • @takahashimさん
    • インデント
    • 本の表紙の蛇が女性に辛い → 「萌え擬人化すればいいのでは?」 → 女性には買いにくい
    • 見た目は大事。RoRはサイトのかっこよさにも勝因がある
  • @moriyoshiさん
    • インデント
    • テンプレート言語として見ると非常によくない → HTMLに混ぜると、インデントが・・・
    • 「式だけで書けば、インデントフリーです!」
  • @tokuhiromさん
  • @yoshioriさん
    • Python3で後方互換を捨てたのだけど、 len とか str がOOPじゃない
    • 予約語が少ないってのが嘘っぽい (trueとか覚えなきゃいけないし)
    • Noneがちょっと・・・nullとかnilがいい
    • 「lenとかstrはシンタックスシュガー」
    • 予約語は少ないほどいいってもんじゃない。C++とか」
他の言語について
  • @nishioさん
    • PHPは@moriyoshiさんがハックしてくれるのがいい
    • PHPによって、数学の良さを学べる
    • PHPは、a == b, b == c → c == a が成り立たないことがあるという仕様」
    • Perlは、動的スコープと静的スコープの切換えが楽。
    • 「my, local」
    • 「動的スコープはいるの?」「グローバルだとマルチスレッドで困る」
    • Javaはまともなスレッドがある。 util.concurrent とかもよい
    • RubyPythonではマルチコアを有効利用できない」
会場より
  • Q. Pythonのselfはどうなの? めんどうくさい
  • A. めんどうくさいです
    • selfのせいで、引数の数が合わないときのエラーメッセージがわかりにくい

Session 04. ライトニングトーク

Python sf / 小林さん
  • 計算ソフトとL.L.のお話
  • Python sf → ワンライナーでの計算
    • 3+4の計算の例
    • 数値微分、ベクトル積などを実装
    • 複素数のtanの分布関数を表示させる例
  • 元利均等払い → 等比級数
    • Python sfでの計算のデモ
遷移図生成ツールblockdiagの紹介/ @tk0miyaさん
  • 遷移図 → 画面を箱、遷移を矢印 → visioで作るの大変
    • 追加、削除が大変
    • ずれる
    • Excelのバージョンの問題、Sphinx は画像になる・・・
  • blockdiag
diagram {
 A -> B -> C;
      D -> E;
}
    • SVNで管理しやすい
    • 自動的にレイアウト
    • 日本語対応
    • PyPIにあるよ
    • 色、装飾なども可能
    • 矢印へのlabel付け、分岐など
  • デモ: WEB上でできる画面
    • group化
  • Sphinx 用のプラグインもある
  • 今後 → ノード形状の切換え、レイアウトエンジン、遷移図以外への対応
    • →画面設計書にも
SciPy-Japan 2011 Project / Bertrandさん
  • NumPy, SciPy を日本でもやりたい
  • カンファレンスは、欧米だけでなくインドでも開かれている
  • どんな内容がいい?
    • 日英の両語で
    • キーノート、トーク、スプリント、懇親会
  • まずはボランティアを集める → PyJUGの忘年会、scipy-japan@googlegroups.com、IRC で #scipyjapan@chat.ap.freenode.net (12/15の21:00より)