PyCon JP 2011 に参加してきました。

参加メモを残します。
間違いがございましたら、ご指摘ください。

基調講演 [twitter:@tarek_ziade]氏

遠くは広島からこられた方がいました。いやー、遠いですね。
生 Tarek 。もちろん英語!

Package

聴きやすい、はっきりとした英語でいいね!
ななめ聞きしかできないけれど、資料を見つつ聞きました。
パッケージングは大変!

  • 依存関係はどう定義するか。
  • setup.py の役割は何か?
  • 何がインストールされるか?
  • バージョンをどうつけるか?
  • データファイルをどう定義するか?
依存関係はどう定義するか。

依存性の段階でもいろいろあるよ!
モジュール、パッケージ、システム。
あと、Windowsにどう入れるの?
Distutils Setuptools OS-Packaging
大変だけど、PEP 345 Metadata v1.2 で解決できる。

setup.py の役割は何か?

色々するけど、いろいろ書きすぎるし、
Python コードだし、管理が大変。
これを setup.cfg で簡素化していくらしい。
ini 形式。no python needed here! w らしい。
pytohn 3.3 で導入される pysetup でsetup.cfg を
create。sphinx-quickstart と同じ感じで入力していく。
これで解決。

何がインストールされるか?

Distutils、easy_install、Pip の3種類のインストールされた
パッケージ管理フォーマットがある。
ここでも PEP。PEP 376 が参考になる。
インストールされたパッケージを管理するためのPEP。
動画を見せるのはいいね。参考にします。>> PHPCon JP 2011
pysetup を使って管理する。

バージョンをどうつけるか?

tip で書かれたバージョンとか、長すぎる名前とか
過去に実際PyPIで出された。ひどい!
これも PEP 386 Standard version scheme
対策しよう。
1.2.dev<1.2<1.2.2
などのバージョン管理にしよう。

データファイルをどう定義するか?

VIDEO IMAGE ISO などどこにあるか、、、
これはsysconfig.cfg で対処しよう。

Roadmap

Pytohn 3.3 から上記の機能を所有した distutils2 の
利用ができるようになるよ!

今風の 5 Tips

Tips
1. PEP 386 バージョン体型を使う
2. できるだけひとまとめにsetup.pyを作る
3. インストーラの利用を前提としない
4. PyPIに不安定版をリリースしない
5. データファイルに気を付ける

Python 3

3.2まで徐々にバージョンが上がってきた。
パッケージ数は最近やっと500を超えたあたりで
もっと多くのパッケージのバージョンアップが求められる。
だけど、Numpy、SQLAlchemyなどが使える。
でもやはり、Django、Pyramidなどがいまだ移行できず、困った。

感想

aptと似た感じと思ったので、何か参考にしたかどうか
尋ねたかった。

C APIへの誘い![twitter:@cocoatomo]氏

構造体と関数ポインターがわかる人向け。
C使っていないから難しかった。

C API

メモリ操作、文字列操作などを隠蔽している。
C からPython が使えるし、逆もできる。

C API の読み方、使い方

Py[型名]_[処理名]でCの関数名を書く。
ヘッダとライブラリを読みこめばコンパイルできる。
PyNumber_Add は+が対象の処理をいろいろしていて複雑。
初期化->処理->終了処理
の流れで記載する。

Pythonから使う

静的に組み込むことができる。
動的に読み込むことができる。
実際にCで何か作ってないので、わからない。
クラスも作れます。
modules/xxsubmodule.c というサンプルがあるはず。

CによるOOP

関数ポインターとTypeDefで書く。

Pythonエンジニアの作り方 [twitter:@tk0miya]氏

blockdiagの人。#世界の小宮

Pythonに出会ってからの体験談

16-29は他の言語使っていて、ラスト2年Python使った。
あるあるってな感じの人になっている。
新しいツールや手法を取り入れず、ツール作っても
他に似たツールがあったりでリリースぜず、何も作らなかったらしい。
お小遣い帳など。

偶然、同僚がPythonistaだった。
最初は普通の【シンプルかつストイック】な言語だと感じたらしい。

Visioを使っていたが、ファイルの編集に飽き飽きし、blockdiag 作ってしまった。

  • 決心

作る。完璧にしない(80%を目指す)。ただ、ユニットテスト、DVCSを使うとした。
Python使う。

ソフトウェアのリリースを通しての経験
  • blockdiag

パーサ->レイアウトエンジン->画像出力
作る中で色々と勉強になった。
PyPIにてリリースしても全然使ってもらえなかった。

自分がどう変わったのか

でも素晴らしツールだから、公開しよう、発表してこうと思った。
Demoを入れると伝わるよ!!

after Python

Python 勉強、開発の違い 開発者と利用者の関係
アウトプットとインプットの相互作用 コミュニティの力

  • 開発

結局勉強になるが、実際に体験できた。

まとめ
  • 何かを作りましょう
  • ブログ、発表などでアウトプットしましょう
  • 楽しもう!

ブーイングなんてされない。
発表では顔を上げてもらうようにしよう。

感想

何かパッケージなんでもいいので、パッチ当ててみたい。
PHPCon の発表が ls コマンドの説明レベルなので困った。

お昼

[twitter:@bakorer]氏
[twitter:@kazutoyo]氏
[twitter:@wakadannacom]氏
と知り合った!
[twitter:@shimizukawa]氏に再来週の
スタートSphinxの助言をいただけた!

Guidoへの5つの質問

英語のみ極端な多言語化法やだと、PEP 3131 をみて。
ユニコード使えるよ。

  • Pythonを追加しし後悔した機能。

reduce()

  • Python3への置換えで重要な点

ライブラリの書き換え

  • Python以外の進めたいg年後

C言語

  • 今後のPythonへ影響を与える事象は?

生物や、神経系、ソーシャルグラフが影響を与えるのでは?
http://goo.gl/jtnBK

Pythonで創るソーシャルゲームの未来 [twitter:@horiuchi]氏

GUMI CTO horiuci

ソーシャルゲーム業界の現状、ポジション

現状は右肩上がりらしい。来季は3000億円の市場
Zyngaの規模だと、3兆円ぐらいの株価総額になりそう。
現状は、ゲームの飽和状態。

Pythonの利用状況

いろいろPythonとかsouth、capistranoRedmineを使っている。
AWSに環境を作っています。

世界へ

世界No.1を目指す。
すなわち、FacebookスマホNo.1を目指す。
そのためには、継続的にヒットを出す。
ノウハウの構築共有、ユーザ獲得を目指す。

QA
  • なぜPythonを選んだのか

偶然。
Pythonが好きなエンジニアがいた。

  • 苦労した点、良かった点

言語的に意識が高いエンジニアが集まりやすい。
バージョンによる差が少ないので、習得が早い。

Tuning Python Code [twitter:@methane]氏

ボトルネックを探す

DiskIO Network Latency PacketLoss TTL
ボトルネックになりやすいよね。
探すには、top dstat strace などを使って探しましょう。
strace -c python -c などで
システムコール何回呼ばれたか探せます。
CPUがボトルネックだったら
deterministic: 関数に入った時と出たときの時間がわかる
statstical: プログラムのどこを今実行しているのかわかる
deterministicはバイナリが必要だったり、遅くなったりする。
stasticalは十分な時間をとらないと行けないし、stdlibにはない。
cputime(計算した時間) wallclocktime(実時間) を測れる。
sigperf(稲田さんが作成されたもの)を使うと
実行中の状態を取得できる。

早いコードを書く

まずは、より良いデータ構造とアルゴリズムを選択すること。
その上高速化する。
遅い理由としては、下記のPython由来の問題がある。

  • インタープリタである
    • バイナリーを作成する必要がある
  • 動的言語である
    • 名前を探しつつ実行する
  • オブジェクトはとても重い
    • GCにも時間がかかる。

バイナリーレベルでは、特にループの中で、
グローバル変数、関数を呼ばないようにする。
ローカル変数に入れるのもよい。
できるだけ、Cで書かれているものを利用する。
循環参照も削除する。

Pythonを高速化する

Cythonを利用すると、PythonからCのコードへ
移すことができる。
9倍まで高速化できた。
PyPyを使うと、JITが聞くので早くなる。
4倍に早くなる。
並列化も使える。

感想

関数、変数をfor内のローカル変数に割り当てると
早いと聞いたが、自動でバイナリ作成時に最適化されてないのかな
と思いました。
その後、直接発表者に上記質問をぶつけてみたところ、
Python動的言語で、実行時までどの関数が呼ばれるか
わからないから無理、とのことでした。
誰得?俺得。

Pythonで働くということ

各社各社で違うんだなあと思った。
GUMIはいけいけの体育会系だし、
BeProudは職人気質、
Nexediは独自路線。
どの会社も面白そうですね。

Closing

皆様お疲れ様でした。

エキスパートPythonプログラミング

参加した方で、この本を高評価している人が多かった。
私もこの本が Python 界のスタンダードになればいいなと思います。

エキスパートPythonプログラミング

エキスパートPythonプログラミング