「PyCon mini JP」に行ってきた
Pythonのイベント「PyCon mini JP」に行ってきました。…いや昼からでしたが。思ったよりいろいろなジャンルの話があって楽しく聞いていました。
あと、最後のじゃんけん大会で、オライリーのアナライジング・マルウェアのTシャツをゲットしてしまいました。ありがとうございました。
以下、メモほぼそのまま。
テンプレートエンジンの高速化と失敗談について
- 文字列の連結を速く
- extendで足してjoinが定番
- いろいろな方法をためしたが、結局これが一番
- Tenjinのコード埋め込み
- インデントフリー
- 複数行を1つのメソッドで出力
- この程度のこともやってないテンプレートエンジンも多い
- 40%高速化
- append
- 50%高速化
- メソッド呼び出しのコストが高い
- ここまでで1万ページ/sの性能
- ここからが苦難
- リストに文字列以外のものが入っているとjoinでエラーに
- str()のオーバーヘッド
- str()をビルトイン化してみる
- str()→%演算子
- Noneを空文字に変換
- 性能低下
- エスケープ処理
- 性能低下
- 文字列連結はボトルネックではなかった
- ヘルパー関数がボトルネックだった
- ヘルパー関数をCに
- ヘルパー関数の呼び出しを削除
- これから実装
- Google「ボトルネックは十中八九テンプレートエンジン」
- Djangoのテンプレートエンジン
- Tenjinに置きかえてみた人がいた
- 30%高速化
- Rails 1.2
- ビューが遅い
- 実はヘルパー関数が遅い
- ヘルパー関数を一掃
- 2倍高速に
- ビューが遅い
- テンプレートエンジンの高速化だけではなくビュー層の高速化
- ヘルパー関数、キャッシュ
- 「文字列リテラルをヘルパーに渡すコード」に展開される部分を、展開時にヘルパー展開済みの文字列に展開
- 各言語のTenjin
- Perlだけやたら高速
- 「テンプレートエンジン最強の言語はPerlです」w
- 文字列連結専用の演算子があり、専用のバイトコードになっている
- 文字列を愚直に演算子で連結するのがはるかに高速(4倍)
- 「Pythonでの常識はPerlでの非常識」
- 1つの言語での常識はほかの言語でかわる
- Cで実装しても速いわけではない
- Cで実装したエンジンでTenjinより速いものはほとんどない
ランチタイムLT:Python in Rakuten
- I'll speak in English(会場w)
- …というのは厳しいので日本語で(会場w)
- Rubyだけじゃないよ
- 社内でPythonメーリンリスト 参加者150人
- 人材募集にPythonも
ランチタイムLT:Python in router +α
- ballaloのルーターに仕込んで、Webページにツールバーを追加する
- 携帯から情報をプッシュ
- 実装した
- メモリ少ないので1プロセス
- unix domain socket
ランチタイムLT:Sphinx theme collection 2011 spring
- デフォルトテーマ ダサくね?w
- conf.py
ランチタイムLT:PyCon APAC
- ASIA PACIFIC
- 2010 Singapore
- 「日本でもやりたいね」とうっかり言って今日
- 今年もSingaporeで
ランチタイムLT:私もカンファレンスに連れてって(堀田)
- 海外のカンファレンスに行ったほうがいい、とよく言われる
- われわれの会社
- PyCon
- django
- どこに行くか、誰と話したいのか、を明確にして参加
- PyPiにコードを置いておく
- 自己紹介
- 日本のことを調べておく
- 人口、気温、おいしい酒などのたわいもない話が出てくるので調べておく
- おみやげを持っていく
- 忍者人気w
- コーヒータイムと夜はかならず行く
- Sprintに行く
- 帰ったらLinkedInとtwitterとfacebook
ランチタイムLT:Pythonでフィジカルコンピューティング
- ロボットミドルウェア開発のため、CORBAが使えるスクリプト言語としてPythonを始めた
- HRP-4C未夢の中身
- ハードウェアとソフトウェアの融合
- iPhone
- Kinnect
- ハード+Pythonの3種類
- PCのPythonから
- 小さいデバイスにPython
- Pythonを動かすためにハードを作る
- PCから
- Arduino
- ハードを操作するPythonモジュールが異常に充実
- 小さいデバイスに
- python-on-a-chip(py14p)
- Pythonのバイドコードが動くVM
- Arduino Proなら動く
- スレッドは独自
- Pythonソースは処理できない
- pyImagecreater.pyでバイトコードに
- VMの移植: 6つのハンドラを実装するだけ
- 3色LEDでデモ
- ColorLEDクラス
- のこぎり波ジェネレータ
- GAEで開発環境作れないかな
- Pythonからハードを作る
- 最近のハードウェア
- プログラマブルなハードが流行
- FPGA
- 研究・試作
- MyHDL
- PythonからHDLに変換
- シミュレーションでテストしてからHDLにしてFPGAに
- ハードは手戻りがやりにくいので
- 関数が1つのモジュール
- ふるまいを関数内関数に
- ドラム型LEDディスプレイのデモ(ビデオ)
ハードウェアを用いてPythonを学ぶ
- マイコンをコンピュータのPythonから制御
- ハード屋なのでCしかわからない、C++とかよくわからない
- OSに依存しないソフトをPythonで
- Javaはシリアルポートはあまり対応していない
- Pythonはハード屋が喜ぶライブラリが無駄に豊富
- PyGame
- Matplotlib
- 電光掲示板
- 困ったこと
- シリアル送信時の改行文字の違い
- OSごとのシリアルポートの違い
- PCの性能ごとの実行速度の違い
- 遅いPCでループが遅くなる
- → マイコン側でループさせる
- デモ
- 電光掲示板
- 例外処理が厳しくて落ちる
- 文字が流れる
- Pong
- キーボード操作で1人遊び → 面白くないのでやめたw
- 可変抵抗で操作、Pythonと対決
- Y軸をボールと同期させるので絶対に負けないw
- デモ
- シリアルケーブルが抜けてたw
- つまみの操作が微妙でおもしろいw
- 1か月でPythonを覚えた
- Pythonを擬人化してみたw
- 錦 伊織(仮)
- 胸重要←Pythonのコードはインデントがどんどん飛び出すw
最速WSGI Server研究会
- 高速化の話
- meinheldを作った
- WSGIサーバー
- high performance
- 「nodeナントカ、遅いですよね」w
- WSGI Serverの実装
- 「HTTPサーバーを書けばいいだけです」w
- 仕様 PEP333
- 並列処理
- 最適解はシングルプロセスでfork
- メニーコア
- 「forkできないサーバーは捨てちゃってください」w
- 「いちばん速いコードは書かないコード」
- 必要ないコードは書かない
- C拡張モジュールはPythonと絡むと絡み損
- Cから見るとPythonはやはり遅い
- 過度のチューニングは誤差レベル
- 高速化
- HTTP Perser
- 文字列の解析に時間がかかる
- Cで記述されたものを使う
- Zed's http parser:mongrel、unicornが使ってる
- ry's http parser:node.jsが使ってる
- 時間をキャッシュ
- HTTPのヘッダやログは秒オーダー
- 1秒に1回だけ時間を引けばいい
- 「みなさんnginxのコードを読んでると思うので割愛します」w
- オブジェクトの使い回し
- abでベンチとるとけっこう効果
- HTTP Perser
- マルチスレッドの問題
- GIL
- スレッドで動作させても同時に実行できない
- Python以外で
- 複雑(どこかしらブロックする)、スレッドセーフでないライブラリ
- GIL
- 先人に学ぶ
- Non Blocking I/Oとイベント駆動
- コードの最適化
- Python C API?
- バイトコードが減る、関数の実行フレームを作らなくなる
- C APIはPythonで使う前提:いちいち文字列をコピーしたり
- 自分で使うだけなら自分でやっちゃたほうが
- 基本
- writteをへらすとか
- メモリアロケート
- Pythonのメモリプールを使ったほうが使いまわしが効いて高速
- 大きいデータはプールされないので自前freelist
- Python C API?
- プロファイリングで必ず確認
- CPU profilerで視覚化
- 参照カウント
- 覚えることは少ない
- マクロでログ
- パフォーマンス測定
- google perftool
- リークチェック
- valgrind
- メモリプールがあるのでわかりづらい → メモリプールを使わないPythonを作って確認
- 循環参照の検出は苦手なので、シンプルなコードで確認
- segmentation fault
- gdb
MessagePack
- MessagePack
- JSONに似たデータフォーマット。バイナリ
- スキーマレス
- 0~127は1バイトで表現
- 先頭ビットが0
- NULLもBooleanも1バイト
- MessagePack RPC
- アプリケーションレイヤー
- 送ったのと違う順序でレスポンスが帰ってきても大丈夫
- ログをMessagePackで
- ファイルフォーマットをMessagePackベースに
- Cython
- PythonのようなC
- Whizzer
- MessagePack RPCのPythonクライアント
LT:AppEngineと非同期と私(@jbking)
- 非同期処理はいろいろなところにある
- CPUを無駄にしない技術
- Pythonで
- ジェネレータ
- Tornado
- meinheld
- gevent
- など
- GAE
- Task Queue API、Cron
- 非同期はテストしづらい
- Twistedのテスト
- GAE Testbed
- 作ってる
- GAE Deferred
LT:Python Djangoアプリケーション開発の事例(@horiuchi)
- gumi
- Webアプリの開発
- ソーシャルアプリ
- Perl時代が長かった
- Sledge
- PythonはDjangoが一発でインストールできたw
- TOMATO
- Python製のSWF合成エンジン
- 内製
- 近日公開予定
LT:InfoPileの紹介(石本)
- 会社内で気軽にメールなどを共有
- MUAと同じような使い勝手
- Pure Python
- アドレス帳
- ファイルを共有
- 古いバージョンを参照
- スケッチ機能
- Evernoteのパクりではないw
- デスクトップのように
LT:JSON-RPC 2.0(@aodag)
- MessagePack RPCのJSON版
- Restful
- URL設計めんどくだい
- →POSTに逃げる
- RPC
- 全部POST
- URLは1つ
- 設計が楽
- 実装が楽
- 関数3つ
- テストも楽
- 普通の関数としてユニットテスト
- キーワード引数
- jsonrpc2作った
- PyPiにアップロードされている
LT:グローバルPloneの開発スタイル(寺田)
- Plone
- Zope上のCMS
- Plone 4
- Plone Foundation
- Board
- Frame Work Team
- Core Developers
- trac + subversion
- 開発
- PLIP
- PythonのPEPのようなもの
- 実装
- レビュー
- 使わせてもらっている → 使って、いっしょに成長している
LT:遷移図作成ツールblockdiagの紹介(小宮)
- コマンドラインとSphinxで動く
- Excel方眼紙だと追加削除が大変、ずれる
- →blockdiagを作った
- テキストファイルで記述
- 新機能
- shapeを付けられるようになった
- 矢印の折り返し機能
- グループ表示のネスト機能
- 今日、機能をひとつ追加してきた
- サイトをクローリングしてキャプチャーして画面遷移図
LT:Benchmarker(桑田)
- ベンチマーク用のライブラリ
- 文字列の連結
- 数が少なければjoinより+演算子のほうが速い
- 「+=」と「= と +」
- 微妙に性能が違う
- 長い文字列x += s + '!' は速いが、長い文字列x = 長い文字列x + s + '!' は遅い
- 演算子やメソッドのコスト
- 長い文字列を途中で生成
- Perlは構文解析段階で処理
- ベンチマークをとってみないとわからない
- 続きはWebで
LT:Sphinxからプレゼンスライドを作ってみた(清水川)
- 「プレゼンツールのほうに注目してください」
- 毎月勉強会
- ミニハッカソン
- PyCon JP、次、夏ぐらいにやりたい
- Sphinxで作成して
- s6を組み込んで
- ブラウザで表示
LT:App Engineの紹介(松尾貴史)
- 10万アクティブ開発者/月
- 15万アプリがアクセス/日
- 10奥PV/日
- 「プログラミングGoogle App Engine」
LT:IKAZUCHI(森本)
- コマンドラインから翻訳APIを呼び出す
- poファイルの対訳を表示
- vimから呼び出す
- デモ
- GoogleのAPI
- MicrosoftのAPI
- Yahoo Pipes
LT:量子力学のグラフィックな(小林)
- テキストの数式を計算
- プリプロセッサ
- ディラック方程式
コメント
コメントの投稿
トラックバック
https://emasaka.blog.fc2.com/tb.php/871-315f6043