(wrist blog)

twitterはこちら http://twitter.com/wrist

PyConJP2015の今更な参加記

昨年に引き続き2015/10/10-11に東京までPyConJP2015に参加しに行って来ました。開催から3週間経ってしまいましたが、やはり記録に留めておきたいと思ったため今更参加記を書きたいと思います。

1日目

会場は去年と一緒だったので特に迷わずに辿りつけました。

朝7時頃に伊丹空港を出て8時頃に羽田空港に着く飛行機に乗ったのでオープニングには無事に間に合いました。

keynote

  • 資料
  • 中継が上手く行かないか何かで一回やり直しになった
  • アプリケーションのエラー検知、メトリクス、ロギングの話を非常に丁寧にしていた印象

強くなるためのプログラミング ープログラミングに関する様々なコンテストとそのはじめ方ー

  • 資料
  • Pythonアイドルくーむさんの発表
  • 競技プログラミングの話をジャンル別(アルゴリズム、ゲームAI、データマイニング、セキュリティ、サーバインフラ)に分けて紹介
  • アルゴリズム
  • ゲームAI
    • そもそもゲームAIのコンテストがあることを知らなかったので新鮮
    • Codingame, CODE VS
  • データマイニング
    • kaggle
  • サーバインフラ
    • ISUCON
  • セキュリティ
    • SECCON
    • 本も出ている(セキュリティコンテストチャレンジブック)

Python と型ヒント (Type Hints)

  • 資料
  • Python3.5から導入された型ヒントについての話
  • Python3.0で導入された関数アノテーション(PEP484)やmypyプロジェクトを背景に、型ヒントがどのような用途で使われるかを説明
  • 型ヒントが付与されていないサードパーティ製のライブラリに対して前方宣言のような形で型ヒントを外部ファイルで定義可能なスタブの仕組みもあるが、全てのサードパーティ製のライブラリに対してメンテされる訳でもないので運用上の問題もあるのでは、といった話が出ていた
  • 型チェックを真に誰が必要とするかについては上記リンクの記事にも言及あり

Lunch

何種類からか選べたが写真を撮り忘れたためもはや何を食べたか覚えていない

日本のオープンデータプラットフォームをPythonでつくる

  • 資料
  • 政府統計の窓口のサイトとしてe-Statというものがあるが、検索は遅いわデータはエクセルで配布されているわで非常に使い勝手が悪いので、それを使いやすくするデータプラットフォームを開発しているという話
  • スケジューラとしてGoogle CalendarとTornadoを組み合わせて手動でカレンダー上に登録したスケジュールに従ってジョブを実行
  • ジョブはrq(参考)というジョブキューを使ってタスク分散
  • スクレイピングはBeautifulSoupとlxml
  • Excel, PDFのパージングはpython-excel, pypdf, pandasのread_excel()
  • 整形等はpandas経由
  • 全文検索はelastic search
    • Mecabを使うためのダーティハックをしているとのこと
  • RESTサーバはTornado
  • マイクロサービス構造を意識しており、python製のプロセス管理ツールsupervisor(参考)を使ってサーバプロセスを管理し、zmqを使って非同期メッセージングを実現
  • デプロイはsaltstack(chefみたいな構成管理ツール)とJenkinsを利用、監視はZabbix

Pythonで作る俺様サウンドエフェクター

  • 資料
  • 自分は音響信号処理が専門なので量子化や標本化といった概念は日常的に触れているが、その辺りを専門外の人に対しても非常に丁寧に説明していた印象
  • 音のデモはやはりリアルタイムに魅せられるのでインパクトが大きい

Break

写真にヘルシープログラマが写っているが買えば良かった感。 ガチャは一応引いた。

ゴミ箱にコップをどうやって捨てるかで性格を診断するということなのか。

Let it crash: what Python can learn from Erlang.

  • 資料
  • gunicornの作者によるPythonErlangから何が学べるかのトーク。
  • Erlangの信頼性はプロセスのisolation、パターンマッチング、メッセージパッシング、共有メモリがないことから来ている
  • Erlangはプロセスがエラーを起こしても全体として動き続けるし、それを検知して自動復帰する事が可能であるがPythonでは1スレッドで動作していたりGILなどもあってプロセスのisolationが困難
    • Supervisor、ロードバランサやProxy、コンテナといったシステム側で対処
  • イミュータブルなデータ構造はテストやスレッドセーフの観点から好ましいがPythonで実現するためにはFunktown, Pysistenceといったライブラリが存在
  • Erlangに存在するようなパターンマッチを実現するためのpatternsというライブラリがある

Packaging最前線

  • setuptoolsのバージョンが去年から10以上上がった
    • PEPへの追従のためもあるがそれでも12以降は不明
  • pipはバージョン7.0からはeggではなくデフォルトでwheelを使用するようになった、wheel形式であればpipはキャッシュしてくれるようになる
  • python3.4から導入されたensurepipはpipとsetuptoolsをpythonと同時に入れてくれる仕組みだが、linuxディストロは独自にpipを管理しているのでensurepipが入らないことがある
  • distlib: パッケージ関連のPEPを実装しているライブラリ、pipが内部で使っている
  • site: サードパーティ製のライブラリがインストールされるsitepackageの場所を確認するために利用
    • debianはsitepackagesが沢山ある謎パッケージ機構
  • distlib.databaseを使うと依存関係グラフを表示可能だがpipでは何故かできない

Lightning Talks

  • 3分でサーバオペレーションコマンドを作る技術
    • 資料
    • fabricとClickの紹介
      • fabricはライブラリとしても使える
      • Clickはサブコマンドを伴うCLIツールを簡単に作るためのライブラリ
        • argparseは取り扱いが面倒
        • デコレータでサブコマンド指定ができる
        • fabricとの組み合わせで独自サーバオペレーションコマンドが作れる
  • PyCon Canada 2015
  • Djangoから各種チャットツールに通知するライブラリを作った話
    • 資料
    • djangoからHipChatやSlackなどに簡単に通知するためのライブラリdjango-channelsの紹介
  • pandasによるデータ加工の注意点やライブラリの話
    • 資料
    • akashi.pyの存在を知った
    • pandas_validatorというpandasのDataFrameに対するバリデーションを可能とするライブラリの紹介
  • Dask: 軽量並列計算フレームワーク
    • 資料
    • Daskという軽量並列分散フレームワークの紹介
    • pandasのDataFrameを分割して処理することが可能
    • 四則演算や統計量を求める計算などが可能、compute()を実行することで初めて演算が実行される

Party

今年は関西方面から知ってる人が来るとは思っていなかったため、ぼっちPartyではないかなどと内心不安に思っていたら神戸R主催の河原さんが来ていたので違和感なくPartyに参加できた。河原さん経由で知り合いになれた方もできたので良かった。また、昨年知り合った方々の大半が今年も来ていたのも印象深く、来年も都合が会えばぜひ参加しようという気分になれた。

2日目

最近会社でモノタロウで買った商品が梱包されていたであろう箱を見つけたのでテンション上がった。

keynote

  • 資料
  • ビープラウド社長の佐藤さんの基調講演
  • これからの時代知識労働者はどう働くべきか、創造的なエンジニアになるためには、といった問いに対する答えを与えるような内容
  • 構成が上手いのか伝えようとする内容が頭にすっと入って来る感じで聴いていて心地良く、keynoteに相応しい内容だと感じた

Job Fair / Poster Session

ポスターセッションを見に行った後にジョブフェアを見た。ポスターセッションは2部屋あることに気付かず片方見ずに出て行ってしまった。

PyData Tokyoのステッカーを貰えたのが嬉しかった。 PyData Osakaもぜひ開きたいと宣言してしまったので実現に向けて動いていきたい。

pandas internals

  • 資料
  • pandasの内部に関する話
  • pandasはPANel DAta Systemの略
  • カラムは型ごとにブロックとして固めて保持
  • パフォーマンスが重要な関数はCythonで書かれている
    • 27,000行がCython
  • Reindex
    • インデックスラベルがユニークか否かで処理を分ける
    • ラベルからインデックスを得る部分はCのハッシュテーブルに対するCythonラッパーを利用、型別に最適化したエンジンが存在
    • インデックスはキャッシュ可能なのでユニークなインデックスであるかはキャッシュ
  • GIL解放
    • pandas 0.17.0以降では並列化のためにGILを解放して処理
  • パフォーマンスを出すためには
    • できるだけ組込みの関数を使う
      • 特にapplyは気を付ける必要あり、文字列カラム同士の結合だとapplyを使うと14.3s掛かるところがDataFrameの二項演算だと92.5msで済む
    • pandasのメソッドは基本的にビューではなくコピーを返す。従って二項演算を繰り返すとのその回数分コピーが発生してしまうため、最低限に留めるべき
    • dtypeとしてobjectを使うのは避ける
      • "str"は"object"として扱われる
      • dtypeを"Categorical"にした場合、59.7msかかっていた処理が17.2ms
    • joinする際に2つのテーブルのインデックスがソートされてなかったり一意でなかったりNaNが発生したりすると遅くなる

uWSGI/Dockerを利用したWebサービス運用事例

  • 資料
  • 日経新聞における運用事例
  • uWSGIは高機能、gunicornはシンプル
  • nginxと合わせた場合、単独の場合、などでベンチマークを取った結果uWSGIが早い
  • Gracefulな更新のための手法毎の比較

break

Pythonライブラリ厳選レシピはリファレンスとして普通に便利そうだったので購入。 購入時点で既に残り4部だった。 その後で著者陣のサインも頂けたので感無量。

セカイノカオ by チーム・カオ

  • 資料
  • PyConは合コンではない
  • 東京都現代美術館に展示した話、月の表面の顔検出の話、ジオタグ付きの画像に対し感情推定して地図上に表示する話など
  • 昨年もatelierhideさんの話を聞いたけど、pythonを使って面白いアイデアを実現することに対し本気で取り組まれていてすごいと思う

アドネットワークのデータ解析チームを支える技術

  • 資料
  • アドネットワークにおいて広告主、メディア、客、運営会社全員の利益を最大化するような問題に取り組む
  • BigQueryの結果をpandasで取得してJupyter Notebookで可視化するの超便利そう

Lightning Talks

  • TOC思考プロセスで考えるPython2->3移行問題
    • 資料
    • todogzmさんのLT、2から3に移行するにはどうすれば良いのか、という内容。モノタロウは2系の独自フレームワークを使っているとのこと。
  • Diversity in Brazil
  • PyConJPの舞台裏
    • 舞台裏や予算についてなど
    • 今年もEarlyBirdの時点で申し込めたので費用は8,000円で済んだのですが、パーティー代3,000円、弁当代1,000円x2だとすると3,000円だけで参加出来ているので非常に安く感じます。
  • sqldf for pandas
    • 資料
    • pandasのDataFrameに対してSQLが書けるライブラリ
  • ソーシャルログインを補完: PayPal APIを使った信憑性の高いユーザーデータベースの構築

Closing

じゃんけん大会は一切勝てず何も貰えなかったがモノタロウ侍が可愛かったのでそれだけで良かった、そう、それだけで良かったんや…

終了後

帰りは新幹線で大阪へ。 酒飲みながら帰ったためかこの時に書いた文章がミスって消えたのが開催から3週間放置した一番の原因であるのは内緒。

戦利品

パンフレット類は割愛したので実際にはもっとある。

参考

全スライドまとめ