Posted at

PyCon Kyushu 2019 in Okinawa参加レポート


Executive Summary

2019年5月18日(土)に沖縄にて開催されたPyCon Kyushu 2019に参加した。聴衆として158人が参加し、イベントとして盛り上がっていた。トーク総数は13と多く内容も充実し、分野のバランスが取れていた。九州沖縄地方におけるPythonコミュニティの大きさが感じられた。


PyCon Kyushuとは

はじめにPyConに馴染みのない人向けに簡単に説明する。


PyConとは

プログラミング言語Pythonに関するカンファレンスのこと。世界各地で開催されている。

2002年にヨーロッパで開催されたEuroPythonが世界初らしい。その後、2003年にアメリカで開催されたカンファレンスに際して「PyCon」という名称が採用され、世界に広まったようだ。

アメリカ以外で開催されるカンファレンスはf'PyCon {country_name}'という名称を用いることが多い。



PyCon JP



日本におけるPythonカンファレンス



  • PyCon JP


    • 2011年創設。一般社団法人PyCon JPが企画、運営をし、毎年東京で開催されている。今年はカンファレンスが9月16-17日(その前後にチュートリアルとスプリントも)。2013年には、アジア太平洋地域各国持ち回りのPyCon APACとして東京で開催された。



  • PyCon miniシリーズ




  • PyCon Kyushu


    • 2018年(福岡県)から毎年。九州沖縄地方各県が持ち回りで開催していく構想らしい。



  • その他:PyDataやDjangoConなど、テーマを絞ったカンファレンスもある。


PyCon Kyushu 2019 in Okinawaの概要


  • 公式webサイト:https://kyushu.pycon.jp/2019/



  • 日程:2019年5月18日(土)

  • 会場:琉球大学(沖縄県)

  • 参加者数:158人(公式発表、スタッフ除く)

  • 総トーク数:13


    • キーノート(45分):x1

    • トーク(25分):2トラックx6枠

    • その他:懇親会でのLT(5分)x9




当日の様子


会場

琉球大学の3つの施設が併用されたが、離れていて移動に時間が掛かった(特にキーノート後)。スタッフの方の案内があり大変助かった(そしてGoogle Mapも)。とはいえ、恐らく収容人数と費用を考慮してのベストの選択だったと思われる。午後から晴れて暑かったが、雨が降らなくてよかった。


  • 大学会館:オープニング、キーノート、クロージング

  • 工学部1号館:トーク、ランチ、スポンサーブース

  • 北食堂:懇親会

オープニングでの実行委員長挨拶

工学部1号館前

構内には千原池(せんばるいけ)という大きな池があり、橋が架かっていた。


参加者

合計158名。正確な割合は忘れたが、やはり沖縄県内が最も多く、その他の九州地方、それ以外(筆者を含め東京からも)という順だったと記憶している。1週間前に札幌にて開催されたPyCon mini Sapporoと両方に参加した人が数名いた(うちスピーカー2名)。


各トークのメモと感想

発表スライドはほとんどがconnpassのページにて公開されている。詳細はそちらを参照されたい。メモは筆者の備忘(その場で書き取ったものなので、漏れや誤りがあれば指摘して下さい)。


全体を通して

各トークのレベルが高く、楽しめた。開発、データサイエンス、Python言語という各テーマのバランスが良かったと思う。スピーカーが自分で実装・分析した結果をデモとして示したトークもあり、理解しやすいものが多かった。


キーノート:弱いつながりの強さ


スピーカー


メモ




- 自分から遠いネットワークの方が役立つ情報を得られる確率が高い。

- 大きな変化のタイミングは弱い「つながり」がきっかけのことが多い。


感想


  • キーノート(基調講演)としては対象を絞り過ぎていたと思う(主にデータサイエンティスト志望の学生)。

  • 冒頭に、タイトルにある「つながり」を作るという趣向で、隣同士の自己紹介タイムを取ったのは良かったと思う。

  • データサイエンスの文脈でTokyo.Rの設立などRコミュニティに関する話を聞けたのは、個人的には、スピーカー同様にRユーザーとして好奇心を満たされる内容であった。一方で、Rと接点がない人には内輪ネタのように感じられたかも知れない。

  • 「弱いつながりの強さ」というテーマを貫き切れず、些か散漫に感じられた部分もあった。

  • Tokyo.Rのように「Enjoy!」で締め括ったのは小ネタ。



沖縄Pythonコミュニティの紹介とtesseract-ocr ver.4(LSTM)を用いたオフラインOCRの改善・学習手法


スピーカー


メモ


沖縄のPython・機械学習コミュニティ


  • PyData.Okinawa

  • 最近は小規模なものも多い。

  • コミュニティ数と参加者数には高い相関がある。

  • BeginnersLabの勉強会はリモート参加可能


tesseract-ocr


  • LSTMによるOCR


    • GPUなし



  • Google

  • 日本語のエラーレート 11%強

  • 利点:新しい文字を学習できる

  • OpenCV

  • 文字認識の類似度の算出


    • ゲシュタルトパターンマッチング





感想


  • 沖縄のPythonコミュニティとtesseract-ocrという2つの異なるテーマが詰め込まれていて、少し駆け足に感じられた(運営側の手違いにより開始が遅れたのも一因)。それぞれについて、同じ25分の枠で詳しい発表を聞いてみたいと思った。

  • tesseract-ocrのデモ(アニメに登場する仮想の文字の判別)は分かりやすかった。


Pythonにおける並列処理プログラミング


スピーカー


メモ


並行処理・並列処理


  • 並行と並列


    • 並行:論理的に同時

    • 並列:物理的に同時




処理モデル


  • マルチスレッド


    • 1つのプロセス内で複数のスレッドを実行

    • GILの制限があっても有効なケース:I/Oが発生する処理

    • concurrent.futuresモジュール

    • 並列化する注意点


      • 単に並列化すれば良いという訳ではない。

      • ボトルネックが何か?





  • マルチプロセス


    • 異なるプロセス上のPythonインタプリタで実行

    • GILなし

    • CPUのコア数が上限

    • 演算中心の処理はマルチプロセスでは速度が向上しないことがある。


      • Numpyがマルチスレッド処理をしている場合





  • 非同期プログラミング


    • ブロッキングI/O


      • データの受信完了を待つ



    • ノンブロッキングI/O


      • 完了を待たない



    • asyncio

    • 非同期で扱うオブジェクト


      • Eventloop

      • コルーチン

      • task



    • 1スレッドで複数タスクを処理できる

    • asyncなライブラリ







感想


  • 並列処理の初心者(筆者含む)を対象に、丁寧に説明していて分かりやすかった。


Pythonでの開発を効率的に進めるためのツール設定


スピーカー


メモ


エディター


  • 機能


    • シンタックスハイライト

    • 賢い補完

    • 静的チェックの結果表示


      • スニペットの展開

      • プログラム可能な機能





  • 優秀なもの


    • emacs

    • vim

    • vs code

    • pycharm



  • jedi


    • コード補完のエンジン



  • コード補完


    • type annotation

    • .の連鎖を減らす




クオリティチェック


  • pylintは厳しすぎる


    • 通すための改修に手間が掛かる。

    • flake8の方がよい。



  • flake8


    • pycodestyle + pyflakes

    • デファクトスタンダード


      • コードレヴュー前に通すべき





  • mypy


    • type annotationのチェック

    • ignore_missing_imports

    • type annotationを提供していないライブラリが多い。




フォーマッタ


  • black


    • ほとんど設定変更できないので、諦めがつく。

    • なぜか1行の文字数上限が88



  • isort


    • import文のソート

    • 標準ライブラリ、サードパーティ、開発中ソースツリー



  • blackとisortを組み合わせる。


    • Vertical Hanging Indent

    • multi_line_output=8

    • line_length=88



  • blackとflake8


    • 衝突


      • 演算子の改行位置

      • スライス演算子の前後スペース

      • flake8の独自解釈なのでblackに従う。





  • CIで使う


テスト


  • pytest


    • テストフレームワーク

    • テストランナー

    • unittestで書いたテストでも実行可能

    • 賢いテストレポート

    • 成功したテストは表示しない

    • assert失敗時に変数の内容を表示




プロファイル


  • prolifer


タスクランナー


  • nox

  • cookiecutter



感想


  • 品質の高いコードを書いて効率よく開発を進めるという論点から説明がされていて、駆け足だったが明快だった。

  • 「レヴュアーの時間を奪う前にチェックを掛ける」という言葉は肝に銘じたいと思った。


“Similar-Dish” Function in SnapDish - Pythonを使った料理の意味検索 -


スピーカー


メモ


  • 料理投稿が「似ている」とは?


    • 投稿の「意味」の近さを計算できる。



  • テキストと画像を分散表現

  • word2vec


    • gensim

    • 同じ投稿or辞書の同じ項目に紐づく単語は近接関係ありとする。

    • anything2vec


      • 近接関係を定義できるものへ応用できる





  • ニューラルネットによる画像のベクトル化


    • GoogLeNet





感想


  • 理論や技術の説明が端的で分かりやすかった。

  • デモがあると良かった(iPhone版アプリにはまだ実装されていない機能だった)。


アイデアを小さく始めて、小さく育てていく方法 ~ ハッカソンで深層学習モデルを作って運用するまで


スピーカー


メモ


塩漬けになった理由


  • 最初に凝ったことをしようとし過ぎた。

  • 締め切りもないのに凝ったアイデアをこねだすと永遠に頭の中から出てこない


ハッカソン


  • Demo or die


    • アイデアは動いてなんぼ



  • 普段試せない技術を好きに試したい。


    • 深層学習でなくても実現可能なはず。

    • 業務とは逆。




How


  • OpenCV

  • 机の色

  • Google Colaboratory

  • Azure DLVM

  • 学習の途中結果をslackに通知


    • Web APIが使いやすい。




判定


  • 画像判別

  • 物体検出


    • シーンが複数かどうか




小さいものを0から作る


  • 何度も繰り返す。



感想


  • 何より、ハッカソンに参加して自分のアイディアを形にしたスピーカーの熱い思いが伝わってきた。

  • モデル構築の工夫や趣味プロジェクトの進め方など、大いに参考になった。


Pythonと型ヒントとその使い方


スピーカー


メモ


Instroduction of Type Hints


  • Type Hints function


    • Annotation only


      • mypyを使うとチェックに反映できる。





  • typing module


    • Union型


      • from typing imort Union



    • NamedTuple


      • from typing import NamedTuple






Usage of Type Hints


  • How to write


    • PEP526



  • How to get Type Hints Info


    • __annotations__




Benefits of Type Hints


  • Code style

  • Code completion


mypy


  • Guidoも開発メンバー


  • mypy --ignore-missing-imports


    • CI





感想


  • Type Hintsの基本が理解できたと思う。

  • 動的型付け言語であるPythonにおいてバグを減らして効率よく開発するためにType Hintsを使うとよい、というメッセージが明確だった。


まとめ

沖縄におけるPythonコミュニティのプレゼンスを感じた(開発、データサイエンス共に)。交通の便を考えると県外からも多くの参加があり、まだ2回目だがPyCon Kyushu という地域開催イベントの裾野の広さが窺えた。開催地は変わるが来年も是非参加したい。企画、準備、運営に携わられたスタッフの皆さん、ありがとうございました!


おまけ

懇親会のごちそう(写真を撮り忘れたが、ビールは全てオリオンビールが供された。)