としたにあんの左脳

備忘録です.

PyCon APAC 2013 カンファレンスデイ1 感想 & メモ

自分の見たセションについての感想と残したメモを

PyConAPAC 2013

YouTubeチャンネル

基調講演

スピーカー: georg brandl さん

  • Python 3.2 と 3.3 のリリースマネージャー

  • Sphinxの作者!

動画

内容:

このプロジェクトについて.

中性子の実験に使うデバイスの制御にPythonを使ってるらしい.

PyEval_SetTrace()を使うとデバッグが簡単らしい.

おとなしく同時翻訳聞けばよかった; ;

パッケージの今と未来

スピーカー: aodagさん

内容: Pythonのパッケージの内容を詳しく説明してくださった.

  • pip とか easy_install とか virtulenv とかの説明

  • setuptools, distutil, wheel とかのパッケージ作成

slideshare

メモ:

  • パッケージングの基礎知識

    • distutils

    • setup.py

  • pypa python package authorities

  • virtualenv

    • setuptools, pip入れてくれる
  • setuptools/distribute

  • distributeはsetuptoolsに取り込まれた

  • ライブラリの依存関係

  • entry_point

  • setup.cfg

  • wheel

  • distlib

  • 今はsetuptools setup.py

  • wheelはデプロイ用


sphixと僕

スピーカー: tell_kさん

内容:

Sphixでのドキュメントの作り方/機能を初心者にもわかりやすく説明してくださった.

スライド

メモ:

Cassandra for Pythonistas

スピーカー: sebastibeさん

(動画)http://www.youtube.com/watch?v=cWLVB1qnFB4

How the Mock library helps me developing client-side applications

スピーカー: clsungさん

github

内容:

python3.3で登場したらしいunittest.mockについて.

メモ:

  • Mock用ライブラリ

    • Mox

    • Flexmock

    • etc...

  • python3.3

    • unittest.mock
  • patch

実践! Python C拡張モジュール開発

スピーカー: mopemopeさん

github

SpeakerDeck

内容:

C-APIを使ったC拡張子モジュールの作り方,Tips, パフォーマンスについて.

メモ:

  • Cで書く意義

    • Cのライブラリを呼ぶならctypes

    • しかし,ctypesは所詮インタプリタ

    • Cythonは学習コストが高い

    • PyCFunction

  • 開発に必要なもの

    • C/APIドキュメント

    • Cコンバイラ

    • 開発用python

      • デバッグモードでコンパイルする --with-pydebug --with-valgrind
    • valgrind

    • gdb

    • coredumpを吐けるようにしておく

      • ulimit -c unlimited
  • プロジェクト構成(jegaプロジェクト)

    • src

      • Cコード

      • Cヘッダ

    • jega

    • tests

      • test
    • lib

      • 3rdパーティーのライブラリ
  • ビルド方法

    • setup.pyでできる.(Distutils)

    • Makefileはいらない.

  • setup.pyの書き方

    • util関数を書いておく
  • ソース・ファイル

    • 1機能毎に分ける

    • ヘッダとソースは対

  • Tips

    • Noneを返す場合

      • Py_RETURN_NONE マクロ
    • C/APIドキュメントにある返り値や説明を必ず読む

     + リファレンスカウンタ

         * Py_INCREFして返す
    
         * 呼び出し側でPy_DECREF
    
    • C/API側でもiterできる

      • PyObject_GetIterでiter取り出し

      • PyIter_Nextでくり返し

    • Cマクロを使おう

      • デバッグモードを実装しておくと便利

      • マクロでログ出すようにする

        • os.environ.get
      • jega.hに書いてある.

    • 大規模モジュール分割

      • Extensionsを複数設定
    • Python側のコードも呼び出せる

      • キャッシュしておくべき

      • PyImport_ImpirtModule

    • テストはPythonでテストを書く

      • py.testなどを使う

      • 処理を大量に繰り返すテストを書く

    • 大事なこと = 必要性を考える

Cythonによる拡張モジュール開発

スピーカー: Atsuo Ishimoto さん

slide share

内容:

cythonを使った拡張モジュールの作り方,書き方の違い(pythonとして宣言するか,Cとして宣言するか)によるパフォーマンスの違いなど.

メモ:

  • python風のコードからC/APIのCコードを生成する

  • 型には気をつけたほうが良さそう

  • コード最適化をしてくれる

  • 既存のライブラリを使うこともできる

  • cimportで定義済みライブラリ

  • STLも行ける

  • numpy, openMPも使える

  • C/C++のデータ型も使える

  • GIL制御

  • C++サポート

  • distutils : language = c++

  • cythonにくわせるとCソースファイルが生成

  • Distutilsでビルドができる

    • form Cython.Build import cythonize
  • pyximport モジュール

  • 1~3割高速化

  • 型チェックなどが入るとCythonでも早くならない

    -  データ型をはっきりさせてあげる(10倍早くなった!)
    
  • Pythonの関数オブジェクトは重い

    • C言語の関数を定義してあげればよい=cdef(超早くなる)
  • 出来るだけC/C++の関数を呼び出す

  • cpdef

  • gdb使える

about mock

スピーカー:podhmoさん

スライド

内容:

ubittest.mockの中身まで詳しく説明してくださった.実装できそうですね?って言ってた.

動作原理からやってはいけないこととかまで.

メモ:

  • 3.3 から

  • 基本的には,mock.patch()

  • enter, exit

  • tempfile

  • __callFUT

  • spec / autospec

specをつけましょう