※ 商品リンクから購入されると少額の報酬が発生することがあります。
ここ数年、秋の定期イベントとなりつつある Python の国際カンファレンスに今年も行ってきました。
普段は人の顔が写った写真は公開しないけど、イベント自体が撮影を前もって断っていたのでここに置いてみた http://www.flickr.com/photos/tsuyukimakoto/sets/72157635561890295/
去年は担がれてパネルに参加させてもらいましたが、今回は通常のパトロン枠で参加です(ほんの少し余計に参加費払うとすいた受付を通れてパンフにアイコンとURLが乗って参加パスのストラップカラーが違って優越感までモテちゃうお得な参加枠です。費用は学生補助、遠方補助に役立てられるらしいです)。
以下、ただのメモ 2013/09/14 --------------------------------------------------------------------------- 台風18号接近中
各セッションの動画 http://www.youtube.com/user/PyConJP
Experimentation in porting the Go concurrency model to Python3
http://www.youtube.com/watch?v=jsMDIE0qq3A
goroutinesはshare nothingだし、Pythonにぴったり(GIL)
Pythonにはビルトインのcoroutineが無い
offsetってライブラリ?今月出した。
python-fibers continulets on pypy
科学とPython
http://www.youtube.com/watch?v=euGmoZadZ5c
numpy.linalg.solve(a,b)
グラフ理論 NetworkX
ロボット制御 Python Robotics
数式処理 SAGE
金融光学 Financial modelling in python
最適か問題 Mathmatical Optimization and Python
化学
生物学 E-cell / BioPython / Pymol / MMTK
Fabric for fun and profit
こっち系のもの
Ansible (Server Configuration)
Invoke (Build Page)
How the Mock library helps me developing client-side applications
テストで @patch('callable', Mock(return_value=True))とかするとMockで置き換えられる。 MagicMockってのもある(@patchはこれ)
__builtins__.openにパッチ当てたり
side_effect
外部APIを使うもののテストとかに特に便利っぽい。エラーの戻りをきちんと扱えるかとか。
実践 C 拡張モジュール開発
https://speakerdeck.com/mopemope/shi-jian-c-kuo-zhang-moziyurukai-fa
Rustはやめておけ ctypesで十分なことが多い pypyは高速だし、それだけでいいかも
ctypesはインタプリタで実行されるのでそこまで速くない
Cythonは学習コスト高い
Cythonの構文とか
C/API 自体も知らないといけないし
Cのデバッガだけじゃ駄目
PyCFunctionはFrame(Frame自体もPyObject)を生成しない
これだけで2割くらい速くなることがある
valgrind(メモリチェックツール)
Python自体を専用にビルドする
--prefix=hoge --with-pydebug --with-valgrind
→ メモリプールが無効化されてリーク検出が楽チンになる(debug)
→ 生存オブジェクトの数とかがインタプリタに表示される
coredumpを吐けるように
$ ulimit -c unlimited
setuptools, distributeのインストール
→ python setup.py develop すると開発ディレクトリがライブラリパスになって楽チン
CとPythonのソースは分けた方がいいかも
→ https://github.com/mopemope/jega
→ srcにCいれてプロジェクト名にpython入れたり
Makefileはいらない。 setup.pyで
utility関数書いておく
ソースは1機能毎に分ける。ヘッダとソースをついにする。
共通のヘッダも。モジュールのメインに対応するソースに書くと良い。
命名規則
構造体 PyObjectの場合は大文字から、その他は _t で終わる
接頭語
モジュール HogeMod_xx
返り値
例外の場合には NULL を返す
None を返す場合には Py_RETURN_NONE マクロ
通常は int で、エラーのときには負の値
GILを必要に応じて解放したりする
Py_BEGIN_ALLOW_THREADS
.. io待ちとか
Py_END_ALLOW_THREADSIterも使える。 PyObject_GetIter PyIter_Next
PySequence_Fast 速い(事前にサイズがわかってないといけない)
デバッグはDEBUGマクロでログイングした方が楽チンかも
do{}while(0) はコンパイラが無いことを知ってくれる
大きくなってきて拡張を分割したい場合
gventの用に分ける(setup.py見たらわかりそう)
C/APIから動的にモジュールを作る(CのCode)
C/APIからモジュールをimportできる(関数はキャッシュしておいた方が良い)
はまりやすいやつ GC が走る前にオブジェクトが回収済み
Cython(シャイソン?サイソン?)による拡張モジュール開発
http://www.slideshare.net/atsuoishimoto/introduction-to-cython
いろんな人の発音を聞いた感じだとシャイソンって読む?
拡張モジュールは通常C/C++で開発されたもの。
お前はPyObject_SetItem()、PyList_SetItem()、PyList_SET_ITEM()の違いを覚えているのか!?
CythonはPython専用のプログライング言語でコンパイラ
Pyrex → Cython
利用プロジェクト
lxml
Sage www.sagemath.
SciPy
PyYAML
PythonのCodeをCythonでコンパイルしたりできる。ジェネレータとか一部非互換。
属性のcdef、publicをつけるとPythonからも見える
型宣言もできるけど、ビルド時にエラーにならない条件もある。ただ、宣言しておくとCodeの最適化がされたり、ビルド時にエラーになったりする。
C側をimportもできる。
cdef extern from "hoge.h"
標準Cランタイム関数は定義済み。cimportで読み込む。
from libc.math cimport sin
? OpenMP?(マルチプロセスライブラリ)
with nogil: GILを解放して動かせる。いっさいPythonのライブラリが使えない。
c++も使える。
Cythonソースファイル → cythonコマンド → (Cソースファイルができる) リンクしたりする
setup.pyで from Cython.Build import cythonaize して sythonaizeでext_modulesにCythonソースファイルを指定すると良い。
pyximportをimportして、pyximport.install()しておくと、Cythonのモジュールをimportしたときに動的にコンパイルされる(簡単なものだけ)
newtonでベンチした感じ
Python : Cython : Cython(型指定:Early binding)
36.3msec : 21.7 msec : 2.89msec
#pure c より少し遅い関数呼び出し(takというよくでるやつ)でtak(18,9,0)した感じ
Python : Cython : Cython(cdef)
2.74sec : 1.47sec : 36.9msecgdbが使える。あるいはprintfデバッグ。
Mock
3.3から標準ライブラリ
石本さんのブログ( http://www.gembook.org )を読むといい
hoka
ツイートを眺めてて他に気になったもの
boto?
http://www.slideshare.net/understeer/20130914-py-conapacawspublic
PythonのAWS操作ライブラリのbotoはaws sdkの中の人が作っている?Perlはオワコン?
Python3用のbotoはneoブランチで?
Party
都庁展望台 Tokyo Cafe 202 っていう都庁の南展望台貸し切り!
喫煙所も1階下の見晴らしのいいところで快適。ご飯もおいしかったし広かったしとても良かった。
台風接近中だったのでデジイチは持たずに出て、D90と70Dに挟まれて地団駄を踏んだ。「なんでそんなちっちゃいのもってるんですかー」っていじられた。
この辺にアフィリエイトを張り付けてある忍者ケーブルとか乾燥剤とかを布教活動した https://www.tsuyukimakoto.com/blog/2013/07/28/i_bought_d7000/ https://www.tsuyukimakoto.com/blog/2013/09/08/avoid_camera_lens_fungus/
プレゼント大会にパーフェクトPythonが3冊出たので番長以外の著者陣5人で前に出た。Rubyに負けて悔しくないのか!買ってー!
2013/09/15
台風さらに接近中
デジイチを持って江の電の駅に着いたらアナウンスが流れてた。運転見合わせ中。無人駅だからアナウンス流れるまでわからず待ってた。
ついて早々、デジイチ持ってきましたねと突っ込まれる。さんざん愚痴ってたからだ。受付美女とか受付おじさまとかを撮って満足。
入門Ansible
http://www.slideshare.net/takushimizu/ansible-26200860
https://github.com/takuan-osho/pyconapac2013-ansible-session
以下を自動化するためのもの
構成管理
アプリのデプロイ
継続的デリバリー
自動化できるメリット
ミスが減る
新規構築が速くなる
実験環境が作りやすい
複数代、並列に設定できる
他
ベキトウ性
Battery Included
Push型(Python2.4がエージェント)
設定YAML
ローカルホスト側に必要なもの
Python2.6以上
PyYAML
Jinja2
paramiko (おっふぅ…)
設定対象に必要なもの。
Python2.4以上
jsonモジュール(2.5からはjsonモジュールが標準なので改めていれる必要ない)
Ansibleはちょっとマジで使うかも。
Chefとかは、設定対象にエージェントを入れるところに自己矛盾をはらんでいる気がしてしまって辛いんだけど、AnsibleはLinuxにはほぼ間違いなくPython2.4以上が入っていることを前提に、別途エージェントを入れなくていいというPythonならではの利点をうまく活かしている。理想じゃなくって現実を大事にするPythonのプロダクト好きだわー。gcc入ってなくてもPythonは入ってるからね。
Luigi, The Friendly Pipeline Plumber
自分が PyCon APAC2013 の CFP に何か面白そうなものは無いかなと探してたときに気になったやつ。結局インストールしかしなかったので、期待して聞いた。
あの配管工の名前。 https://github.com/spotify/luigi
Spotify が使って/作ってる。
Hadoopやらのサポートがあるので、上に載せるものだけ書けば良さそう。
Concepts
Target
Task
Parameter
万が一こけても、こけたところの続きからやりやすい
input -> Task -> output -> Target
Target -> input -> Task -> output
IanさんのgithubにデモのCodeがある https://github.com/IanLewis/luigi-demo
いずれ実際に使う日がやってくるか…なぁ
Let Python talk native
moriyoshi がテンパってるの始めて見た。ls cd ls cd!
E-cellプロジェクトの経験から話す
CAPIはスピードアップ用なら良い
FFI Foreign Function Interface 言語間のラッパ
ABI Application Binary Interface
SWIG / ctyps (libffi-based, runtime FFI) / cffi / Cython / Boost.Python
用途によるけど SWIG か Boost.Python か?
mopemope の CAPI の話と、 atsuoishimoto の Cython の話も聞いたので、ドウシタモンカと思っている。
集合写真
去年の PyCon JP では喫煙所でがっはがっは笑ってたら集合写真終わってて哀しかったので今年はきちんと写った。
http://apac-2013.pycon.jp/_static/pyconapac2013-group-photo.jpg
More than SQL, but Less than ORM
SQLラブなので気になってた。
http://www.youtube.com/watch?v=OvET6zojl1A
sqlmapのlevel5、risk3をパスしてる
breedでpartialな関数作れる
O/Rちっくなものも簡単なベースクラス書けばできちゃうってデモも。
基本的にはクエリビルダなんだけど、 select 自体を評価すると面白い。中身見てみよう。
生SQL良く書くので、ちょっとこれでベース用意しておくのいいかも。どこまでできるのか把握しておこう。
なんとなく思ってたよりも面白い感じ。セキュリティに関してはDBAPIのライブラリに任せ…と思ったけど文字列でSQL組み立ててた時代の記憶によると mosql に頼っていい気がしてきた。
MAKE BETTER PACKAGE ECOSYSTEM
設定やら何やらもDRYにソフトウェアを効率よく公開しようぜって話。Abstractをよく読んでおけば良かったかも。 Herokuの中の人、早口でマシンガン。
LT
一発目の esehara さんの勢いにやられた。 GO! OK!
かなりの人が英語でやってた。
hoka
ツイートを眺めてて他に気になったもの
gurobi 最適化のsolver
Nodebox
楽しかった
さらに台風が大接近のなか新宿は工学院大学では sprint が行われているようですが、自分は不参加なので2日間で終了。
PyCon APAC 2013は、気づけば当日は電車代以外にお金を使わなかった。
大きな技術系のイベントって、長めの休憩があると自分のコミュ力の無さに絶望したりするんだけど、 PyCon はランチも弁当が用意されていて、食堂に大量のボッチがいるので、ボッチだけの席とかになると絶望も無いし顔見知りができたりするので良い。ボッチだけど話したい人には ymotongpoo が呼びかけを行ってたし、素敵。コーヒーブレイクもあるよ。
会場提供の工学院大学をはじめ(新宿駅からずっと屋根付きで到着できるので悪天候でもへっちゃら)、スタッフ、スポンサー、スピーカーには感謝いっぱい。
来年の PyCon APAC は台湾開催らしい。
そして、来年の PyCon JP の座長は takanory さんになるらしい。来年もよろしくお願いします :-)