Python Unconference 1へ行ってきましたので、レポートです。
割と予習したつもりだったんですが、特にPylons周りでわかんない話が多発しました。頑張ってメモりましたが、内容の正確さは期待しないで下さい( ´△`)。
Unconferenceについて解説
Unconferenceとは、Conferenceほどの大きさではない勉強会で、米国での呼び方にあわせたっぽいです。
Pylonsとその仲間たち 〜フレームワークのためのメタフレームワーク〜 (林 淳哉さん)
- Djangoによる金融ポータルの紹介 http://finance.coolmedia.jp
- モデルは67個
- Pylonsの翻訳プロジェクト http://wiki.pylonshq.com/display/pylonsja/
- TurboGears 2に関しては、ノータッチで
- Pylonsの好きなところ
- Pylonsの大変なところ
- 依存性が非常に高い(ドキュメントの分散・バージョン不整合)
- デバッグ画面がセキュリティリスクに
- 利用事例: Triax CMS ver 0.0.1
- 社内リリースしているそうです
- Pylonsベースの開発環境
- 管理画面を自動生成
- ひな形を自動生成: paster create -t trcms foo
- カスタムコマンド: paster triaxapp news 等
- 開発スタイルをフレームワーク化 - MyCMSを作る
- ひな形がよく出来ており、Pylonsの価値の多くを占めている
- 実際の土台はPasteであり、そのアプリケーショん実装がPylons
- Pylonsとは
- Pylonsの仲間達 → たくさんの依存
- Pylonsがやってること
- WSGI (Web Server Gateway Interface ウイスキー) とは
- PEP333
- Web ServerとApplicationをつなぐ仕様
- Server, Application, Middleware
- Plaggerやデコレータを思い浮かべるとよい
- WSGIによるApplicationリレー
- Middlewareは、Applicationをデコレートする
- Serverからの呼び出しは、Middlewareを流れてApplicationに届く
- Middlewareはenvironに値を格納できる
- Serverの動き
- Applicationの動き
- 2つの引数を受け取るcallableオブジェクト(environ, start_response)
- start_responseでヘッダを出力
- MiddleWareの動き
- Serverから見るとApplication、ApplicationからみるとServer
- environに値やオブジェクトを格納
- Applicationの代わりにresponse
- responseをApplicationに委譲
- MiddleWareの具体例
- WSGIの詳細は、PEP333-ja
- Pylonsのインストール
$ easy_install Pylons $ paster create -t pylons mycms [development.iniを一行編集] $ paster serve development.ini
- ひな形の構造は?
- foo/controllers、foo/models、foo/templates
- development.ini
- foo/config/
- foo/lib/
- config/middleware.py
- Applicationのエントリポイント
- WSGI Applicationを作成する (Middlewareをリレーさせる)
- config/environment.py
- 設定ファイルを読み込む
- paste.deploy: ConfigMiddlewareを environ と paste.deploy へ渡す
- config/routing.py
- RoutesMiddleware
- environにルーティング情報を格納
- lib/base.py
- コントローラーで必ず読み込むファイル
- StackedObjectProxy 変数(どこでも使える)
- モジュールのimportはここを経由して行う(継承ができるから)
- lib/helpers.py
- 便利な関数群
- 主にWebHelpers、自前定義もここで行う
- hで参照できる
- lib/app_globals.py
- グローバル変数の定義(アプリケーション実行中、ずっと有向)
- lib/vars.py (おまけ)
- Pylon標準ではなくTriaxでの話
- vで参照できる定数を定義している
- まとめ
- 質疑応答
この時点で会場は超満員で立ち見がたくさん。Pythonの最近の注目度が伺えますねー。
Google Gears(MiCHiLUさん)
- 今年の5月にGoogleが発表
- キャッシュをしてくれるプラグイン
- Firefox 1.5+, IE 6+ (Safari) + JavaScript
- LocalServer, Database, Workerpool
- LocalServer
- Localで動くWEBサーバー
- プロキシのように動く
- Database
- WorkerPool
- threading。JavaScriptを快適にする?
- 実装は?
- Django Views。jsonを返している
- JavaScript。キャッシュされてるか判定
- SQL on JavaScript
- サンプル: Django offline → 開発止まってます><
- まとめ
- GoogleGearsは便利
- Djangoなら、オフラインドキュメント和訳があります
Gearmanでプログラムの壁を越えろ(村岡 友介さん)
- Danga?
- LiveJournal
- memcached, MogileFS
- Danga = 分散
- Gearman?
- リモートファンクションコールルータ
- 分散型リモートプロシジャーコール
- WorkerがGearmanDに自分をレジストする
- GearmanDは、適当なサーバにタスクを投げる
- プログラムの壁?
- gearmandだと言語の壁を越えられる
- rubyとpythonをワーカーとして呼び出すデモ
- まとめ
- 分散
- 好きな言語でハックしたい
- Q. 「Gearmanのサーバ同士でデータ共有ができるか」
- A. 「調べては居ないが、ワーカーとクライアントをつないでいるだけ」
- Q. 「型は?」
- A. 「クライアントとワーカーで勝手にあわせる」
- Q. 「gearmandはプロクシとして転送しているのか」
- A. 「はい、リクエストとレスポンスを送ってます」
- 宣伝: PythonのVMについて解説されているらしいです*1
PyTCで学ぶPython C拡張の書き方(末永 匡さん)
- PyTCとは?
- TokyoCabinetのPythonバインディング
- key-value型データベースの好実装
- mikio氏がmixiの支援を受けて開発。C言語。
- パフォーマンスが、Berkeley DBよりずっと早い
- CDBには負ける(読み込み専用DBなため)
- TC Btreeの方がTC Hashより速いようだ
- PythonからCライブラリを使うためには??
- ctypes
- SWIG
- SWIGは使わなかった
- Pyrex
- Python+αの文法で拡張モジュールが書ける
- Cのソースが出力される。コールバックも問題ない
- おすすめ。普通はこれ。
- SIP
- Qtのバインディング用
- Boost.Python
- C++ライブラリBoostの一部
- ブルドにBoostが必要
- Cによる拡張モジュール
- Cによる拡張モジュールを選んだ
- 趣味だから
- Tokyo Cabnetのパフォーマンスを崩さぬよう
- 方針
- Pythonでのラッパを必要としない
- Cソース+setup.py
- マクロの活用
- Pythonでのラッパを必要としない
- dict風オブジェクトを作る
- tp_as_mapping, tp_iter, tp_as_sequence
- マルチスレッド
- Tokyo CabinetはI/Oでブロッキング
- GILを解放し、マルチスレッド同時実行性能を上げる
- コールバック関数で、GILの取得が必要
- 定数の格納
- 現状: モジュールそのものの辞書に登録
- 将来的には、型に定数を登録したい
- まとめ
- Q. 「Cheese shopへの登録は?」
- A. 「はい。最新版ならeasy_installでOKのはず」
- Q. 「Rubyのラッパーとの速度差は?」
- A. 「未試行。恐らく、がわの性能ではあまり変わらないでしょう」
habuの紹介(大谷 弘喜さん、遠藤 隆尚さん)
- Plaggerもどき
- プラグインの組み合わせで、RSSの収集と再配信
- 開発経緯
- テストコードの組み合わせ
- 使い方 コマンドラインツール
- コード量
- init.py 331行
- runhabu.py 246行
- ちっちゃい
- Pluginとは?
- Pluginの決まり事
- create(config, environ)オブジェクトを返す
- execute(content) deferredか辞書かそのリスト
- Pluginは? pyhabu-plugins でやってます。
- 変な機能
- Q. 「WEBからインストール機能は何を使って実装?」
- A. 「twistedです。setuptoolsはroot権限がいるから」
- Q. 「habuはcronから実行可能?」
- A. 「できます。デーモンとして常駐させたい」
- Q. 「CGIのように利用することはできる?」
- A. 「CGIからキックできれば可能」
Python系のセミナーには初めて出たんですが、色々と勉強になりました。特にグニャラさんの話が面白かったです。