Article

PyCon APAC 2013 のメモ

※ 商品リンクから購入されると少額の報酬が発生することがあります。

ここ数年、秋の定期イベントとなりつつある 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ってライブラリ?今月出した。

https://github.com/benoitc/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_THREADS
  • Iterも使える。 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.9msec

gdbが使える。あるいはprintfデバッグ。

Mock

3.3から標準ライブラリ

石本さんのブログ( http://www.gembook.org )を読むといい

hoka

ツイートを眺めてて他に気になったもの

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

http://mosql.mosky.tw

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 さんになるらしい。来年もよろしくお願いします :-)

Prev Entry

Next Entry