akiyoko blog

akiyoko の IT技術系ブログです

「PyCon JP 2017」に初参加してきました

タイトル

PyCon JP 2017 - connpass (2017.9.8-9)
pyconjp.connpass.com

会場

早稲田大学西早稲田キャンパス63号館
東京都新宿区大久保3-4-1

Twitter

twitter.com


 

全体の感想など

PyConJP、今回が初参加でした。
会場は隅々まで活気があって、参加した人しか分からないパワーや刺激をたくさん受けて過ごした二日間でした。

スケジュールはこちら。
pycon.jp

動画やスライドもこのページに揃っているので、参加できなかった人、見逃したセッションはここでフォローを。



一日目は昼前から参加したのですが、会場まで向かう人がまばらで、会場が大学敷地のかなり奥の方だったので「あれ?合ってんのかな?」とちょっと迷子になりかけました。。

f:id:akiyoko:20170908115140j:plain:w400


そして、初っ端からのお弁当タイム(笑)。
お弁当がタダ(チケット代に含まれている)なのは、会場で初めて知りました。ラッキー!

結構豪華です。

f:id:akiyoko:20170908115758j:plain:w400


それどころか、飲み物(コーヒー、ジュース)も無料で飲めるし、おやつタイムになったら(セルフですが)おやつがもらえるんですね。これも知らなかった。

f:id:akiyoko:20170909152925j:plain:w300
(写真は二日目の「PyConJP 最中」とアメ?)


二日目もお昼から。
脇目も振らず食堂に向かい、颯爽とお弁当を手にします。
わ〜い、選びたい放題や〜(違)

f:id:akiyoko:20170909134227j:plain:w400


休み時間が短くて(人気のセッションの前にはちょっとした席取り?なんかもあって)日頃不摂生している体にはしんどいイベントでしたが、出来たてホヤホヤ(9月9日発刊)の「PythonユーザのためのJupyter[実践]入門」が並んでいたのを休憩中に見かけたので早速購入してみました。

パラパラと立ち読みしたところ、他で見られないような細かい説明が多々あって、一瞬で「これは買い」だと感じました。一部で「鈍器」と言われている(笑)ほど分厚い本に仕上がっていますが、著者曰くどこから読んでもいいらしいので、気軽に読めそうです。しばらくしたら感想をブログに載せようかと考え中です。それにしても 400ページで 3,500円は安い!!



f:id:akiyoko:20170909144253j:plain:w400



PyCon JP とは全然関係ないですが、この翌日から夏休みで屋久杉を見に行ってきたのですが、往復12時間のトレッキングに体力の限界を感じました。。

f:id:akiyoko:20171106030010g:plain

Animated GIF editor and GIF maker で作成)





 

Day 1(9月8日)

メディア会議

  • 7割売れたら合格点
  • 最初の部数が売れたら「売れた」と言っていい
  • Pythonスタートブックが入門本で一番売れてる。1万部?
  • 5万部?売れるとビルが立つ?
  • ディープラーニング本
  • 本を書いたら人生変わる?
    • 出たばっかりなのであんまり。近しい人が声をかけてくれるくらい
    • 達成感はある。承認欲求が満たされる
    • 履歴書に書くとインパクトあるアピールになる
  • Amazonの著者ページは、編集社に権限がある場合も。だから勝手に作られてることも?
  • 本を書くためにすること
    • 公式ドキュメントを一番読んだ。下手なことは書けないので
    • 結城先生の文章の書き方、を読んだ
  • Markdown で一章1ページずつ
    • GitLab でプライベートリポジトリを創った
    • 製品版に近い状態に出力(HTML?)できるような独自のツールがある
  • e-Pub形式にするかしないか?は、飾りの多さによる?
  • Dropboxレビューの機能を使った
    • ページごとに指摘ができる??
  • 定時に帰ってから、3〜4ヶ月間コワーキングスペースに篭って執筆した
  • 〆切は1〜2ヶ月くらい遅れがち
  • 海外の公式に近いドキュメントをボランティアが無料で翻訳しているものは、出版社からするとちょっと脅威に感じる
  • Pytyon本の企画は、「Pythonこれから来るぞ!」というイチ編集者の意気込みから!?


 

Kivy


Kivy はつらそう、という感想が多かった。
PyQt はどうなの?

  • キヴィー
  • Kivy Showcase にサンプルが並んでる
  • Kv Language というUI用のメタ言語がある
    • Widget(UI)を簡単に記述できる。CSSとBootstrap(グリッド)に近い
    • 全部Pythonで書くこともできるが、KVと合わせることもできる
  • MITライセンス
  • 2017年現在も開発が盛んに行われている
  • GUI部門で一位!
  • 公式Androidアプリを試してみるのが一番わかり易い
  • Garden
    • 拡張機能。個別にインストール
  • Androidアプリの作成方法は二つ
    • Kivy Launcher
      • Pythnon 2系のみ。Kivy 1.9.1 のみ(最新版ではない)
    • Buildozer(UbuntuVM)
      • Python2/3両対応
  • クロスプラットフォームの検討
    • 2019年目処で全てのデバイスで Python3 対応予定
  • 4つの壁
    • 1. 情報が少ない(特に日本語)
    • 2. インストール
      • 非公式パッケージのインストールがオススメ
    • 3. Kv Language
      • kviewer (デバッガ?)を使うのがオススメ
    • 4. 日本語入力(IME)に問題あり
  • 簡単なアプリならすぐに作れる


 

PythonとRを行ったり来たり

https://github.com/toshiukii/rpy-talk/blob/master/rpy_pyconjp17.ipynb

  • 関西大学での教育系データの分析
  • Python と R の比較
    • 読みやすさ、書きやすさ、言語の総合力 ⇔ 知見の蓄積
    • 機械学習ライブラリ ⇔ 統計パッケージ
    • 実務家ユーザー ⇔ 研究者
    • Jupyter Notebook ⇔ RStudio
    • Rより速いことが多い ⇔ RMarkdownによる文書作成
  • Python, pandas は欠損値の扱いが雑なのがデメリット
  • Jupyter Notebook で Rkernel を使うこともできる
  • feather はカラム志向のデータストア?高速、欠損値の扱いがウリ
  • RPy2
    • Python 2.7, 3.3> で動作
    • Pythonから Rを呼び出す
  • iPythonでセルマジックを使う
    • 「%%R」でセル全体に適用させると、Rのコードをペタッと貼れる
  • Pythonでデータを綺麗にして送り込む?
  • Pandasでは、obuject型ではなくなるべくint/float型に変換しておくと間違いがない
  • WesとHadleyが組んだように、PythonとRも仲良くしようぜ!

 

PythonでOAuth『サーバ』を構築した話


仮想通貨取引所 Zaif の人。
暗号通貨のAPIを使うときの OAuthサーバの話。

  • OAuth 2.0 の話
  • 「OAuth2 規約」
    • パラメータや戻り値が規約で決まっている
  • scopeは「%20(空白)」で区切るという決まりに
  • マスタデータ登録時にリダイレクトURLを登録しておけば、リクエストのパラメータとして redirect_uri は不要
  • state はなりすまし対策。規約では必須ではないが、入れたほうがよい
  • URLのバリデートには「cornice(コーニス)」を使った
    • Pyramidと相性がよい
  • expires_in(利用期限)は3600秒がデフォルトらしい


 

プロダクト開発して分かったDjangoの深~いパーミッション管理の話

hirokiky Slides


PyQ の人。

  • Djangoの権限管理の定石
  • Lv1 View で if文
  • Lv1 User にプロパティ is_premium
  • Lv2 デコレータを作る @premium_required
  • Lv2 凝ったデコレータ @subscription_required(STANDARD_PLAN, PREMIUM_PLAN)
  • リクエストのユーザ情報とプランとが密結合。。
  • パーミッションを作る!
    • @user_permission_required("view_premium_articles")
  • Lv3 許可設定
  • パーミッションを採用すると、仕様の変更に強くなった
  • 複雑になっちゃう。。→ライブラリ!
    • Django 自体の Permission
      • DBで管理。User <-> Model のパーミッションだけ
    • django-guardian
      • 一番人気らしい。イケてる版 Djnago の Permission
    • django-rules
      • DB使わずにできる
      • デコレータやテンプレートも使える
  • django-keeper というライブラリ作った!
    • ACLを設定する

 

Day 2(9月9日)

Pythonの本気!RaspberryPiやEdisonを使ったIoTシステムの構築

https://www.slideshare.net/yutakitagami/pycon-jp-2017yuta-kitagami



を書いた人。

  • IoT時代において、「Python 最強だから」
  • Pythonでハードウェアを扱える。ハードウェア用のラブラリがあるから
    • C言語で書かれたライブラリのPythonラッパー
  • Python用のCソースが用意されている
    • py_xxx.c
  • akilib は自作ライブラリ(秋葉原の部品を扱えるライブラリ!)
  • Bottle(イイ!), tynyDB(ちょっと重い), requests
  • OpenCV も C のPythonライブラリ
  • http://elpisapi.net/TestAPI/
    • Bottle で Websocket で通信してる
  • ラズパイもPythonで動かせるが、長時間動かしていると不安定?(勝手にOS落ちてたりする?)
    • 結局Cがよいのでは???
    • Micro Python(組み込み用Python)に期待?
  • ほかの多数のライブラリとの組み合わせだと、Cでは飽和してしまうので無理
    • Cはひとつのことだけに集中するならよい

 

Pythonをとりまく並行/非同期の話

https://tell-k.github.io/pyconjp2017/

  • 並行/並列処理とは?
    • 本当に複数の処理を同時に実行するのが -> 並列処理
    • 複数処理を効率良く切り替えながらあたかも同時に実行するのが -> 並行処理
  • concurrent.futures
    • Python3.2 から追加された並行/並列処理用のライブラリ
  • Pythonのコードを実行できるスレッドは 常に一つのみ という制限
    • CPython がスレッドセーフではない Cライブラリに依存しているから
  • ちなみに、I/O処理や、一部のC拡張モジュールなどでは GILが解放される らしいです
  • CPUバウンドな処理を並列にするには?
    • マルチプロセス で 並列 に実行する
  • 非同期I/O
  • イベントを監視するためのループが イベントループ
  • コルーチン
    • 処理を任意のタイミングで中断/再開できる機能
    • Pythonではジェネレータの拡張構文として実装されている
    • ジェネレータベースのコルーチン
  • Python公式で非同期I/O のための共通のコンポーネント群
    • Python3.5 からは asyn/await構文 (ネイティブコルーチン) が使える

まとめ

  • 並行は並列を包含する概念
  • マルチスレッドはI/Oバウンドには効果あり
  • マルチスレッドはGILがあるのでCPUバウンドには効果なし
  • 並列処理をしたいのであればマルチプロセスが良い
  • C10K問題くらいからシングルスレッドでも非同期処理が必要になった
  • シングルスレッドで非同期処理
  • イベントループ/IO多重化/コルーチンという技術要素で実現
  • Pythonの非同期ライブラリ
  • asyncioの誕生の背景と概要
  • 今後は各種ライブラリがもっとasyncioに対応していくでしょう

 

SREエンジニアがJupyter+BigQueryでデータ分析基盤をDev&Opsする話

  • アプリならPython一択、インフラはBigQuery一択
  • Jupyterなら、主要BIツールにたいてい繋がる
  • 「俺の考えた最強のデータ基盤」は使われない。。
    • 重要なのは、イテレーションを回すこと。やりたいことが日々変わること
    • 事前の十全な準備は無理
  • p.118「タスクの優先順位」おもしろい!