2014年9月14日日曜日

PyConJP 2014 1日目

PyConJP 2014 @ Tokyo に行ってきました。
https://pycon.jp/2014/
お台場の国際研究交流大学村が会場で、朝から行っていきました。
主に自分メモとして書いときます。
Chrome のタブが膨大になったのでリンクも入れてます。 

これとは関係ないけど、 twitter で見たも書いときます。
線形最適化ツール PuLP 

 

Keynote

Kenneth Reitz の発表。heroku のプロダクションオーナー。
人のコミュニケーションは 1 to 1 から始まっていって、
インターネットの登場で広がって。。。みたいな話から
Python 2 / 3 でコミュニティが分断されつつあるという話につながった。 

PyPiなどでは Python 2 は依然 Python 3 の 20-30 倍ダウンロードされているらしい
だから、もし「自分しか Python 2 をまだ使ってる人はいないかもしれない」
と思っているかもしれないけど、実はいっぱいいる。

傾向として、
昔からのユーザは Python 2系を使い続けて、新しいユーザは Python 3系を使っているらしい。

Kenneth は個人的には2 系が好きだけど、みんな Python 3 try してみて!
と言ってた。うーん。あんま使うモチベーションにならんなあ。
と、思った。

Dive Into Python 3 のそれっぽい章を読んでもうーんって感じ

 

Deep Learning for Image Recognition in Python

Kaggle というデータ解析チャレンジの 猫と犬の画像分類問題で、
Haar-like feature (opencv, mahotas) & Logistic regression (scikit-learn) 
だと正解率 60% ぐらいだけど、
DNN (DeCAF) & Logistic regression (scikit-learn)
だと 96% でてびっくりした
という話。DNN は広がっているなあ。

これをもとに、xxx48 の画像と、よなんとか興行の人の 画像を使って
人工知能で選ぶ JKC48 メンバースカウト機能を Pepper にのせる!

という話をしていて、思いのほかうまく言ってておもしろかった。

DeCAFCaffe になったらしい。

 

Django パフォーマンスチューニング

Django のパフォーマンスをチューニングする話。
django-debug-toolbar を使ってSQL アクセスが無駄に多い部分を見つけ出して、
.select_related, .prefetch_related, .bulk_create とかの JOIN する系メソッドに
置き換えることで、SQL 発行回数を減らせる。

他にも、いろんなテクニックがあって、
Index を適切に使う、Cache を使う、バックエンドを Redis にするとか、 
django-compressor / django-asset とかで静的ファイルを圧縮するとか
いろいろ紹介されてた。

ただし、結局本質的に大事なのはDB設計とミドルウェアの選定だねという
まっとうなアドバイスで締められた。 

あとは、Funkload という、テストシナリオを python で書けて、
複数テストから差分レポートとかトレンドとかを出せるツールが紹介されていた。
今度ためしてみたい。 (Qiita 記事)

 

Python 実装系総ざらい

Python のいろんな実装を紹介する話。

CPython

標準。ctypes/windll で外部 DLL にアクセスしたり、
Python C API, Pyrex, Cython, boost.python で別言語の実装とつないだり、
numpy は numba で JIT コンパイルしたりすると早いよーという話だった。
llvmpy という python の LLVM コンパイラ (でいいのか?)もあるらしい。 

Jython

昔ちょっとつかった。まだ開発がされていたことに衝撃を受けた
GIL が無いらしい。

Iron Python

.NET Framework で動く Python.
Python Tools for VisualStudio なるツールがあるらしい。 
これも GIL なし。 

PyPy

JIT コンパイラが走るはやい Python
JIT ドキュメント
流行りの JITコンパイラは嫌いですか?
が詳しい情報だとか。

PyPyには、
1. 言語を作るツールセットとしての機能
2. 1 の青果物としての Python 実装
が含まれていて最初の「はやいPython」というのは 2のことらしい。
実際、PyPyによる Ruby 実装 Topaz, PHP実装 HippyVM というのがあると。

で、最近は同様に numpypy というのも作られ始めているらしい。

Pyston

LLVM 上で Python をコンパイルする試み。 Dropbox で使っている/開発している

Micro Python

組み込みで動く python 

 

Effective Numerical Computation in Numpy, Scipy

基本的な話の、 
Broadcasting (要素ごと積とかできるやつ) とか、
Indexing (インデックスに値の集合をわたせるやつ ) の話とかと、
疎行列ライブラリ scipy.sparse の話があった。
ちなみに、疎行列とは、ほとんどの値が 0 の行列のこと。 

lil_matrix という代入がはやいオブジェクトで行列を構成して、
csr_matrix (rowアクセスがはやい) or csc_matrix (column アクセスがはやい) に
変換すると、速度あがるよーという内容。
ただし、実は csr/csc_matrix には内部構造の indptr, data, indices というのがあって、
それを直接操作するとさらにはやくなる。

どれぐらい疎だと疎行列のメリットが生かせるんだろうか

トーク中に紹介された Numpy Medkit が詳しくてよかった。
ただし、個人的にこれ系の資料では、 EuroScipy の Tutorial がベスト  

Introduction to Scientific Programming in Python

科学技術計算に使える Python ツールの紹介。

この辺の基本的なツール

ただし、商用というかそういう系だと、速度を上げるには最適化がいるので、
anaconda, canopy のような、最適化済 python ライブラリが便利らしい。

4h の解説動画 http://www.youtube.com/watch?v=3Fp1zn5ao2M が紹介されていた。長い!

リファクリングツール

Python でリファクタリングするためのツールの紹介。 

コーディングスタイル系

PEP8 / PEP257 が標準コーディング規約
pep8, pep257, pyflakes みたいな自動チェックツールがある。
基本的には flake8 を使えば OK.
カスタマイズはいろいろできて、例えば #NOQA を行に入れるとそれを蒸しするとかいろいろ。

自動修正系

autopep8, autoflake, docformatter, eradicate, unify とかがある。

自動補完

jedi が vimmer にはよいらしい。

リファクリングツール

Rope がおすすめ。名前の変更、関数の別ファイルへの移動、引数変更などがいい感じにできる

コードメトリクス

静的コード解析。 Radon がおすすめだとか。

 

Python を支える技術 ディスクリプタ編

__get__, __set__, __delete__ を定義したクラスのことをディスクリプタという。
で、関数呼び出しなんかがこのプロトコルに従って行われている。

この辺を理解すると、内部構造がわかって良さそうだが、だいぶディープだった。

 

Lightning Talks (5min の発表)

Gunosy の広告配信サーバ

50msec or die の世界では
高速APIサーバ (Tornado, PyPy)
統計解析 (Numpy/Scipy/Cython/Numba/Bokeh)
並列処理(Celery)がいる。
全部 Python でやることで、3人ぐらいでもまわせるらしい。すごいな

スタンドアロンアプリ

GUI アプリ pydun を pyQt で書いて、PyInstaller でインストーラも作ったよって話。
世界樹の迷宮のマップ作成ツールだとか。

ちらっと見せられた地図は新・世界樹の迷宮のスノーウルフが出てくるとこかなーと
思ったんだけども、真相はわからん。

最初から最後まで非常によくできていた。 

非エンジニアが PyConJPスタッフしてみた話

エンジニアを理解するためにスタッフしてみた人事スタッフの話。
こういう歩み寄りはとてもすばらしい。

あと、人事スタッフの仕事のなかにデプロイとか入ってて、
こういうのがフルスタック人事っていう人なのかーと思った。

Django REST framework

REST フレームワークで、いろいろ Pyramid に似てるとかいう話だけども、
Django を使わないので残念ながらあんまついていけなかった。 
Django REST framework 

0 件のコメント:

コメントを投稿