pyconjp2018に参加して来ました

pyconに参加したあと、私生活がごたごたしていたずいぶん遅くなってしまいましたが、blog書きました。

概要

9月15,16,17,18で開催されたpyconjp 2018に参加してきました。
15日はスプリント、16日がチュートリアル、17,18日がカンファレンスといったスケジュールで、自分はスプリントとカンファレンスに参加してきました。
今年のテーマは「ひろがる Python
公式サイト : https://pycon.jp/2018/

スプリント

自分はQuantXというサービスでpythonを使用して株価の予想を行うプログラムを作って見るスプリントに参加しました。
Quantは作ったアルゴリズムを売ることができるので、いいアルゴリズムが実装できればお小遣い稼ぎができるといったサービスです。
スプリントでは既にこのサービスでアルゴリズムを売っている人や、QuantXを運営しているSmart Trade社の人がいたためとてもスムーズに開発を進めることができました。
金融の知識も簡単なことならば、その場にいる人に質問したら教えてくれたりと非常に助かりました。
加えて、talibめっちゃ便利。 これなかったら時間内に何もできなかったと思う。

自分がやったこととしては下記のような感じです。
- チュートリアルを実施して2つのアルゴリズムを実装 - この2つのアルゴリズムを組み合わせてみた - jupyter環境でQuantX FactoryのAPIを叩ける環境をさわってみた

user slack : https://smarttradeusers.slack.com/messages/C5MMXBTRC/? 公式サイト : https://factory.quantx.io/ SDK Doc : https://factory.quantx.io/quantx-sdk/index.html#

1日目

keynote

アルゼンチンでpythonを広げる活動をやっている人。
pythonを広げる活動をするようになった話をその活動の話だった。
活動の中で彼女に振られたり、ヤギを交通事故を起こしたり、ボリビアの内戦に遭遇しながらも活動を続けており、pythonへの情熱が凄まじかった。
print "Hello world" から始まって、現実でもいろんな世界に行くことができた」というまとめが最高にエモかった。

招待講演 東大松尾研流 実践的AI人材育成法

東大 松尾研のリサーチディレクターの中山さん
最初の15分pythonの話がまったくでてこなかったので、途中退出してブースを回っていたのでわからない。
「numpy力」というワードがtwitterで急に流れてきてた。

Webアプリケーションの仕組み

https://scrapbox.io/shimizukawa/PyCon_JP_2018:_Webアプリケーションの仕組み すごく丁寧なWebの裏側の話だった。
web開発は上から下まで幅広い知識が必要だが、フレームワークを使えば全体を知らなくてもOK。
フレームワークがなぜ生まれたのかをゼロから作って追体験していく話。
会場で使っているフレームワークを聞いていたが、django派が多かった。
実際にコードを動かしながら説明しており、非常にわかりやすかった。
発表内容を参考にして、自分でも一度ゼロから追体験してみるべきだと思った。

あなたと私いますぐパッケージング

ここ1年のパッケージングまわりのライブラリの状況とパッケージ管理のベストプラクティスについて。
パッケジング周りについて、ざっくりと理解できるセッションだった。
パッケージングがsetuptoolsに依存しなくなり、他のパッケージング方法がでてくるかもしれないとのこと。
pipenvでパッケージ管理は問題なさそう。

Pythonで時系列のデータを分析してみよう

https://www.slideshare.net/ssuser49f8441/python-114923273 時系列データにstatsmodelsを適用するだけで、わりと簡単にデータ分析ができるといった内容だった。
もう少し発展的な内容を期待していたので、若干物足りなさはあったが、statsmodelsの使用感はなんとなくわかったのでよかった。

Pythonistaの選球眼(せんきゅうがん) - エンジニアリングと野球の目利きになる技術

野球のデータ分析のPFを作ってきた話を過去のpyconでの発表を振り返りながら、最近作った環境の説明。
選球眼とは「毎日発生する【選択と決断】の繰り返しの中で【選択と集中】ができること」
選択するためには「技術力」を磨くこと「決断」を恐れないこと。
集中するためには、実現したいことを「言語化」し、言語化したものから決断する「ルール」を作り、「時間」・「お金」といったリソースを集中することが大事とのこと。

2日目

2日目は若干体調が悪かったので、午後からyoutube liveで視聴しながらtwitterでつぶやいて参加してました。

REST APIに疲れたあなたに送るGraphQL 入門

RESTの問題点を上げながらGraphQLでそれをどうやって解決しているのかの説明。
後半はAWSのApp SyncでGraphQLを使ってみるデモ。
pythonでGraphQLを使用する話を期待していてので、少し期待外れだったが、GraphQLの概要を理解する意味ではよかった。

複数アプリケーションのプロセスとログを管理するための新しいツールと手法

Jaffleというツール説明 : 複数のpythonアプリケーションと外部プロセスをまとめて管理
https://jaffle.readthedocs.io/en/latest/
開発環境でログの管理を手軽にできるツールがあると確かに便利そうだった。
あとで触ってみる。

Pythonによる異常検知入門

異常検知自体の説明から入り、異常検知の各アルゴリズムの説明とpythonでの実装方法の話だった。
スライドが非常にわかりやすく、異常検知についての理解は深まったが、時間的にpythonでの実装にあまり触れられてなかったのが残念。
異常検知自体の入門としては非常に参考になった。

Django を Zappaで構築してServerless Python のベストプラクティスを探る

いろいろ調査した結果、python で serverless なら zappa だとなったのでそれの発表。
serverless framework ・ zappa ・ chalice について調査し、結果としてzappaが今のところベストプラクティスとのこと。
zappaはDjango zappaが元になっていて、pythonistaが使うなら一番しっくり来るらしい。
Djangoだけじゃなく、flask等でも使うことができるとのこと

感想

  • 今年は初めてスプリントから参加し、合計3日間参加したが、3日間ともとても楽しかった
  • 1日目のkeynoteが最高だった
  • 去年と比べてハッシュタグをつけてつぶやいている人が減った印象
  • 2日目はyoutube liveから参加していたが、すごく見やすくてスタッフさんすごい

python コマンドラインインタフェース比較

目次

  • 概要
  • 環境
  • 調査対象ライブラリ
  • 比較
  • まとめ
  • おまけ

概要

今までpythonを使用してコマンドラインツールを作成する時は、docoptを使っていたのですが、ドキュメントを書いて、パースするタイミングでエラーが出た時の原因の特定に時間がかかって辛いので、他にいい方法がないか調べてみました。

環境

コードを動かした環境は以下。

調査対象ライブラリ

  • optparse
  • argparse
  • docopt
  • click

optparse

https://docs.python.jp/3.6/library/optparse.html

  • 標準ライブラリ
  • 現在は廃止予定となっており、argparseの利用が推奨(https://www.python.org/dev/peps/pep-0389/)
    • 別に使えないわけじゃないので、とりあえず今回の選定対象には入れてあります
  • ライブラリの機能として以下をサポートしていない(実装しだいで実現できなくはない)
    • 位置引数
    • サブコマンド

argparse

https://docs.python.jp/3.6/library/argparse.html#module-argparse

  • 標準ライブラリ
  • optparseの後継なので、optparseから乗り換えがし易い

docopt

http://docopt.org/

  • ドキュメントベースのコマンドラインインターフェース
  • 同じインターフェースが様々な言語で実装されている

click

http://click.pocoo.org/5/

比較

シンプルなインターフェイスの例としては ls コマンドのような command [option]インターフェイスを、サブコマンドをサポートするインターフェースの例としてgit コマンドのようにgit command [option]インターフェイスを実装して比較します。 実装したコードは下記になります。 https://github.com/replicity/compare_python_command_line_parse_libraries

実装したまとめと使ってみた所感

  • それぞれパースした結果をoptparseはマップとリスト、argparseはNamespace、docoptはマップ、clickはメソッドの引数として扱う
  • オプションの作成方法自体は異なるが、シンプルなインターフェイスの場合には機能的な大きな違いはオプション以外の引数がある時にoptparse以外はエラーになり、optparseはリストとして返すぐらい
  • シンプルなインターフェイスを作るだけなら、optparse以外ならどれを使っても問題はなさそう
  • サブコマンドをサポートするインターフェイスを作成しようとするとoptparseはライブラリの機能としてはサポートしていないので、サブコマンドを判断して処理する箇所を自前で実装することになる
  • どのサブコマンドでも使用するオプション(共有オプション)をサポートしているのはargparseだけ
  • clickは位置引数にhelpメッセージを指定できない : http://click.pocoo.org/6/documentation/

まとめ

結局どれを使うのがいいかというとこですが、機能についてまとめた表が下記になります。

ライブラリ 位置引数 オプション 型変換 ヘルプ自動生成 サブコマンド 共有オプション
optparse × × - (サブコマンドをサポートしていない)
argparse
docopt × - (ヘルプを元にインターフェイスを作成) ×
click △(helpメッセージは設定不可) ×

機能だけで見るならargparseが一番高機能です。
ただ、正直argparseでサブコマンドがあるインターフェイスを作るとそれだけでコード量が多くなって辛いです。
clickはサブコマンドの作成が非常に楽でよく考えられている印象でした。
docoptはドキュメントを最初に書くタイミングである程度実装のイメージが固まったり、設計を見直すきっかけになったりするので、ドキュメントを書くのが苦痛じゃないなら選択肢としては良さげだと思います。
ただ、docoptでエラーが出た時にエラーの原因を特定するのが結構困難なので、そこは注意が必要かと。

まとめると、基本的にはclickを使用して他の言語とインターフェイスを揃えたい時はdocopt、どうしてもargparseじゃないと実装できないものがある場合だけargparseを使うのが良さげ。

おまけ

invoke

コマンドラインインターフェイスを構築するものとして少し毛色が違うがinvokeというライブラリもあるので、使ってみました。 http://docs.pyinvoke.org/en/latest/index.html#

invokeはデコレーターベースのコマンドラインインターフェースで、複数のタスクを定義し、そのタスクを組み合わせて何かをする時に場合にはこちらが良さげでした。
具体的にはtask1の後にtask2を連続で実行するといったような場合。

inv task1 task2

また、オプションの解釈に関しては触ったライブラリの中ではinvokeが一番優秀な印象でした。
詳しくはこちらに書いてあります : http://docs.pyinvoke.org/en/latest/concepts/invoking-tasks.html#task-command-line-arguments

clickとの比較として下記。

ライブラリ 位置引数 オプション 型変換 ヘルプ自動生成 サブコマンド 共有オプション 複数のタスクの連続実行
click △(helpメッセージは設定不可) × ×
invoke △(複数の値を指連続で指定する方法にくせがある) △(boolとそれ以外) × - (サブコマンドをサポートしていない)

python-prompt-toolkit

インタラクティブコマンドラインツールを作成できるライブラリとしてpython-prompt_toolkitがあり、これを利用することで実行後にサブコマンドを選択したり、オプションをインタラクティブにセッティングしていくようなツールを簡単に作ることが可能になる(e.g. click-repl)。
https://github.com/jonathanslenders/python-prompt-toolkit/tree/master

なお、2018/5/5現在pipでいれると1.0.15がインストールされるが、githubには2.0のブランチがあり、リポジトリのREADMEに書かれているように1.0と2.0ではいろいろと変わっているようなので、これから使い方を覚えるなら2.0を使うほうが良さげでした。

Please notice that this is the 2.0 branch of prompt_toolkit. It is incompatible with the 1.0 branch, but much better in many regards. On Pypi you'll still find the 1.0 branch, but a release should follow soon. In the meantime, don't hesitate to test this branch and report any bugs.

ref

JVM周辺ツールについてまとめる

はじめに

JVMの周辺ツールをたまに使用するが、使うタイミングで毎回調べているので、一度しっかりとまとめようと思う。
実行結果はJava8のものになります。

jcmd

https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/jcmd.html#CIHEEDIB
JDKをインストールした時に付属している。
JMVに対して診断コマンドを送ることができる。
フライトレコーダーの制御や、GCを強制的に起動させるいった操作が可能。
Java9ではコマンドが増えている。
主に使っている機能は下記

  • JFRの制御
  • スレッドダンプ
# プロセス番号の確認
$ jcmd    
5361 sun.tools.jcmd.JCmd
5146 info.repli.sample.mbeans.Hello

# 送信できる診断コマンドの一覧
$ jcmd 5164 help
5146:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
help

For more information about a specific command use 'help <command>'.

# JFRの起動
## 商用機能のアンロック
jcmd 5146 VM.unlock_commercial_features

##起動
jcmd 5146 JFR.start filename=/tmp/`hostname`-`date -u +"%Y-%m-%d"`.jfr duration=180s settings=$JAVA_HOME/jre/lib/jfr/default.jfc

# スレッドダンプ
jcmd 5146 Thread.print

# GC実行
jcmd 5146 GC.run # System.gc()
jcmd 5146 GC.run_finallization  # System.runFinalization()

jconsole

JVMの情報や、提供されているMBean情報の取得、操作ができるGUIツール。
JDKをインストールすると付属している。
https://docs.oracle.com/javase/jp/7/technotes/guides/management/jconsole.html

# 起動
$ jconsole

f:id:replicity:20180213013905p:plain
f:id:replicity:20180213013907p:plain

リモートのプロセスに接続することも可能。

jmxterm

MBean情報の取得、操作がコマンドラインでできるツール。
JDKとは別にインストールする必要あり。
後述するSJKのmxコマンドでも同じことはできる。

ダウンロード
http://wiki.cyclopsgroup.org/jmxterm/download.html

使い方
ダウンロードした jmxterm-1.0.0-uber.jar をJMXコンソールにアクセスしたいサーバに持っていく。

インタラクティブに使用

# java -jar jmxterm-1.0.0-uber.jar -u <USER> -p <PASS> -l <hostname>
Welcome to JMX terminal. Type "help" for available commands.
$> beans #MBeanの一覧が出力される
...
$> get <取得したいMBeanのAttributeを指定>

JFRとJMC

JFR : https://docs.oracle.com/javacomponents/jp/jmc-5-4/jfr-runtime-guide/about.htm
JMC : https://docs.oracle.com/javacomponents/jp/jmc-5-5/jmc-user-guide/jmc.htm
※ JFR(Java Flight Recoder)とJMCは共に本番環境で使用するには商用ライセンスが必要になる。

そういえば、去年、JFRがOpenJDKに寄贈されるってブログにかかれて少し話題になっていたけど、その進捗どんな感じなんだろう。
https://blogs.oracle.com/java-platform-group/faster-and-easier-use-and-redistribution-of-java-se

jcmd等からJFRを起動し、出力されたファイルをJMCで読むことで、JFRを実行していた間のJVMの様々な情報が確認できる。
ちなみにJava9からはJMCのUIが大幅に変わっています。

f:id:replicity:20180213013910p:plain

SJK(Swiss Java Knife)

https://github.com/aragozin/jvm-tools
JVMトラブルシューティングに便利なツール群
付属しているコマンドは下記

  • ttop : topコマンドのJVMのようなもの、スレッド単位でのCPU使用率を表示する
  • jps : JVMのプロセス表示、jcmdを引数なしで実行した場合と同じだが、フィルタや表示のカスタマイズができる
  • hh : ヒープヒストグラム表示、jcmdのGC.class_histogramの高機能版、オプション次第ではフルGCが発生する
  • gc : GCの実行状態を監視して表示
  • mx : MBean情報の取得と操作、jconsoleやjmxtermと同じことができる
  • stcap : スレッドダンプと一定期間取得
  • ssa : stcapで取得したスレッドダンプを解析
  • stcpy : スレッドダンプファイルをまとめたり、フィルタしたりといった操作を実施

おわりに

基本的にはjcmdとSJKを抑えておけば問題ないと思います。
自分はSJKの存在を知る前にjconsoleとjmxtermを使っていたのでMBean系の操作はこの2つを使用し続けてます。

VimConf2017 行ってきた

Vimmerのお祭りである、VimConfに行ってきました。
http://vimconf.vim-jp.org/2017/

会場は秋葉原駅から徒歩2分のアキバホールで、席には電源完備されていて心置きなくvimができる環境。 スライド、動画が後日公開されるらしい。

感想

  • 便利そうな設定やプラグインについて知れてよかった
  • 以外とwindowユーザ多い
  • 会場がすごい人だらけですごかった
  • どのセッションもすばらしくて非常に濃いカンファレンスでした f:id:replicity:20171106013607j:plain

各セッションの感想とメモは下記。

Vim, Me and Community

https://docs.google.com/presentation/d/14pViuMI_X_PiNwQD8nuGRG72GUqSeKDqoJqjAZWS39U/edit
vimを使い初めてからの話が主で、最後にすこしvimのコミュニティについての話 。
プラグイン開発をどうやって初めて行ったか、何に気をつけて作っているかは興味深い話だった。

The Past and Future of Vim-go

https://speakerdeck.com/farslan/the-past-and-future-of-vim-go
vim-goの作者
vim本体でのgoのサポートが終わったので、vim-goを作った
なんでvim-goが有名になったか

  • 小さいpluginがありすぎていた
  • 他のpluginにロードマップがなかった
  • ドキュメントがない問題を解決した
    • この作業は面白くない
    • markdownサポートのPRをまっている
  • UXを向上していった

どうして必要なのかを説明してとても勉強になった。

Creating your lovely color scheme

カラースキームの話
Icebergの作者
人生の33%はcolor schemeらしい

  1. 最初にコンセプトを決めると、後々役に立つ時がある
  2. 代表的な色を決める
    • preferred groupってやつがあってこれに設定すると他のにも引き継がれる
    • HSB/HSLを使うのがおすすめ
    • カラーパレットを作る時は基準を決めて色相だけを変える
  3. lovelyにする
    • ポジティブを増やす、ネガティブを減らす
    • ポジティブ
      • file typeのサポートを増やす
      • pgment.vim と colorswatch.vimが便利
      • 有名なプラグインに対応していく
      • identitiesを少し足すのもいい
    • ネガティブ
      • 256環境をサポートする
      • 警告色を考える
      • 色覚についても考える
  4. 先人をどこから探すか

color schemeを作る時以外にもプレゼンのデザイン考える時とか参考になりそうな内容だった。

vim-mode-plus: The most ambitious vim emulator in the world

https://qiita.com/t9md/items/236d09fea9bcdfabdcea
atomvim-modeを作るプラグインの話。
単純にvim-modeがあるだけじゃなくて、便利な機能が追加されていて、それの紹介もあった。
特にmove-{up|down}-to-edgeが便利そうだった。

Vim and Compatibility

http://lamsh.github.io/slide/2017/20171104_VimConf2017/index.html
POSIX原理主義といろんな環境で動くvimrcを書く方法についての話。
OSと文字コードの対応が特に大変そうな感じで、実際には自分が触る環境は多くても3種類ぐらいなのでその中で動けばいいかなーって感想。

neosnippet.vim + deoppet.nvim

https://www.slideshare.net/Shougo/neosnippetvim-deoppetnvim-in-vim-conf-2017
暗黒美夢王さん!
テキストエディタは世界のすべて」

スニペットプラグインについての話。

  • neosnippet.vim
    • marker type snippet plugin
    • 日本では有名
    • snipMate syntax
  • snopMate.vim
    • 有名
    • 最近は開発が活発ではない
    • マーカータイプではない
  • UltiSnips
    • snipMateとは互換性がない
    • 外国ではおそらく一番有名
    • 多機能
    • マーカータイプではない
    • neovimでは遅い

マーカータイプのスニペットプラグインとは

  • カーソルの移動先にマーカーを作って、そこに移動する
  • 実装が楽

マーカーがないやつの特徴は

  • 実装が大変
  • パフォーマンスもよくはない
  • つねにバッファを監視してうごく
  • カーソルを戻す実装がしやすい

開発中のスニペットプラグイン 「Deoppet.nvim」 https://github.com/Shougo/deoppet.nvim

  • neosnippet互換のsyntax
  • マーカーがないタイプのスニペットプラグイン
  • extended Marks というneovimの新機能を使う予定(現在PRにある機能 )
  • 試すためにはneovimの特定のブランチを自分でビルドして黒魔術する必要がある

How ordinary Vim user contributed to Vim

https://speakerdeck.com/daisuzu/how-ordinary-vim-user-contributed-to-vim
vim本体にpatchを送る話。
「必要なものはコントリビューターになりたいという強いパッション」

送ったパッチの話

  • 辞書ファイルにパスを指定できなくなった問題を直した
    • ある朝vimをビルドするとエラーが
    • ちょうどvimconf2016のあとでpatch熱があった
    • パッチとテストを書いた、コミュニティの状態を調べた結果、送ったのはテストだけ
  • シソーラス補完のファイルのパスのチェックがなかった
    • 辞書ファイルのチェックをシソーラス補完にも追加した
  • インサートモードの補完がなかなかでない問題があった
    • 補完候補を表示するなかで不要な処理をしていた
    • 自分以外にも気づいた同僚がいたので、コントリビューターに仕立て上げようとした
    • 転職することになったので、同僚に任せずにパッチを書いた

patchを送る先

  • vim_dev
    • google group
    • gistにパッチを貼っておくとか
    • 承認制
  • github
    • PRを遅ればいい
    • ただし、Githubのマージボタンは使っていない

この発表が一番記憶に残っている。
淡々と話していましたが、実際はすごいことを成し遂げていてとても素晴らしいと思いました。

The new syntax highlighter for Vim

https://speakerdeck.com/pocke/the-new-syntax-highlighter-for-vim syntax highlighterの話。
iro.vim : 新しいsyntax-highlighterを作った、まだサポート言語は少ないがrubyはだいたいいける
言語自体のパーサーを使用して、間違ったハイライトをしない用に作っている(ASTベースでのsyntax-highlighter)。
パフォーマンスの問題はある、rubyなら10000行を超えると落ちる -> しかしパースの問題ではなくて、vimでmatchadpos()を大量にしようすると遅くなるらしい。

You've been Super Viman. After this talk, you could say you are Super Viman 2 -- Life with gina.vim

gina.vimの紹介

  • git用のプラグイン
  • 簡単なコマンド
  • TAB補完できる
  • . で繰り返しできる

めっちゃ便利そう

pythonでのdebug(pdb,pudb)のメモ

Pythonのdebugで使用するpdbとpudbについてのメモ

pdb

対話形式のデバッガ、標準ライブラなのでインストールなしで使える
https://docs.python.jp/3/library/pdb.html

主なコマンドは下記

コマンド 効果
b ブレークポイントを設定
c ブレークポイントまで移動
n 現在の行を実行し、次の行で停止。次の行が関数だった場合は関数の中では止まらない
s 現在の行を実行し、次の行で停止。次の行が関数だった場合は関数の中で停止
p 変数の値を表示
pp pretty-printで変数を表示
q デバッガ停止
r 関数を抜ける
list 実行中の行の周辺を表示
whatis 式の型を表示
# python -m pdb スクリプト名
$ python -m pdb sample.py
(Pdb) b 19 # <- 19行目にブレークポイントを設置
(Pdb) n # <- 1行実行
-> from __future__ import print_function
(Pdb) list # <- 現在の行の周辺を表示
  1     # vim: fileencoding=utf-8
  2
  3     from __future__ import division
  4  -> from __future__ import print_function
  5     from __future__ import unicode_literals
  6     from __future__ import absolute_import
  7     try:
  8         from future_builtins import ascii, filter, hex, map, oct, zip
  9     except ModuleNotFoundError:
 10         pass  # running python version is 3
 11
(Pdb) c # <- ブレークポイントまで移動
-> x = div(x, i)
(Pdb) list
 14         return x / y
 15
 16     def main():
 17         x = 6
 18         for i in [3, 2, 1]:
 19 B->         x = div(x, i)
 20         return x
 21
 22     if __name__ == '__main__':
 23         main()
[EOF]
(Pdb) c
-> x = div(x, i)
(Pdb) list
 14         return x / y
 15
 16     def main():
 17         x = 6
 18         for i in [3, 2, 1]:
 19 B->         x = div(x, i)
 20         return x
 21
 22     if __name__ == '__main__':
 23         main()
[EOF]
(Pdb) p i # <- iの値を表示、ループの2回目なので、i は現在2
2
(Pdb)

起動時に指定する以外にも、import pdb; pdb.sey_trace() を記述することで、コード中で起動することもできる。

# vim: fileencoding=utf-8

from __future__ import print_function

def main():
    print('hoge')
    import pdb; pdb.set_trace()  # ここでpdbを起動する
    print('fuga')

if __name__ == '__main__':
    main()

pudb

pdbよりも高機能なデバッガ、こちらはインストールが必要

$ pip install pudb

基本的な操作はpdbと同じ。 困った時は?でヘルプがでるのでそれを見ればいい。 <C-x>pythonを実行できるペインに移動でき、ここでreplのようにいろいろ試せるのが便利。

起動は下記

$ pudb3 sample.py

pyconjp 2017に参加して来ました

概要

9月7,8,9,10で開催されたpyconjp 2017に参加してきました。
カンファレンスは8,9でしたが、7にチュートリアル、10に開発スプリントが開催されています。
また、今年はCfPをだしたが採択されなかったトークを喋るRejectConも開催されたようです。
今年のテーマは「OUTPUT & FOLLOW」
公式サイト : https://pycon.jp/2017/ja/

セッション感想

セッションのスライドはだいたい公開されており、toggterにもまとまっていたので詳しくはそちら
セッションのメモは以下

野球を科学する技術〜Pythonを用いた統計ライブラリ作成と分析基盤構築

https://speakerdeck.com/shinyorke/ye-qiu-woke-xue-suruji-shu-pythontotong-ji-raiburaritofen-xi-ji-pan-number-pyconjp

  • 野球ユニフォームで登壇が正装
  • 分析基盤を構築した話をする
    • 気軽に作って壊せる
    • 使いたい・試したいライブラリを積極活用
    • OSSにする
  • DBはMySQL
  • データはスクレイピング(Scrapy)、時系列データとして使いたいのでAirflow
  • 実験はjupyter
  • scrapyはクローラー界のRoRと読んでいいぐらい高機能
  • airflow
    • ジョブ管理
    • 結構高機能
    • 意外と苦労した
  • 分析
    • 定期的に見るか、分析に使うかで使い分ける
    • 定期的はRedash
    • 実験とかはjupyter

Pythonで大量データ処理!PySparkを用いたデータ分析のきほん

https://speakerdeck.com/chie8842/pythondeda-liang-detachu-li-pysparkwoyong-itadetachu-li-tofen-xi-falsekihon

Kivyによるアプリケーション開発のすすめ

https://www.slideshare.net/JunOkazaki1/pyconjp2017-kivy

  • python3.5
  • mac,Linuxでも動くはず
  • MITライセンス、Qtとは違う!
  • UIはkvという独自言語
    • kvはCSSのBootstrapのようなもの
    • kvを使用するのが普通、その方がコードが簡潔
  • kivyを今使うのは結構たいへんそう
  • デモは良さげ

len()関数がオブジェクトの長さを手にいれる仕組み

https://www.slideshare.net/shimizukawa/how-does-python-get-the-length-with-the-len-function

  • len()が戻り値の型をintで保証
  • Adapter Patternで実装されている
  • スライドがすごく分かりやすかった
  • 公式ドキュメントの「デザインと歴史」を読めばいろいろわかりそう https://docs.python.org/ja/3/faq/design.html

Pythonistaで始めるiOSプロトタイプ開発

Python機械学習によるWebセキュリティの自動化

https://www.mbsd.jp/insight.html https://t.co/thfG8n2080

  • Webアプリケーション診断を自動化
  • 従来
    • アプリをクローリングして疑似攻撃
    • 判定
  • 少ない手数で脆弱性を検出する(いろいろするわけではない)
  • LSTM
  • 高度すぎてついていけなかった

2日目keynote

https://speakerdeck.com/sinhrks/pandasdefalseosshuo-dong-shi-li-tozui-chu-false-bu

  • pythonと科学計算
    • プログラマー以外でもpythonを使ってプログラムをする人が増えてる
    • SciPy2017に行ってきた話 9日間開催
      • クレータの解析をpythonでした話
  • pandasのOSS活動
    • pandas : データ分液のためのデータ構造を提供するパッケージ
      • 現実の汚いデータ(フォーマットがバラバラ)を効率的に扱えるのが便利
      • データの理解、データ準備に使用される
  • OSS活動 最初の一歩
    • コミッタの役割の話は興味深い
      • インフラの整備とかもやってる
      • プロダクトとコミュニティの品質の維持をやるのが大事
      • プロダクト品質の維持

Pythonで実現する4コマ漫画の分析・評論 2017

https://slideship.com/users/@esuji/presentations/2017/08/FSKS46VL9ivVSpUE4Gaamh/

  • 情熱駆動開発!!
  • OCR三国志の人と同じGoogle OCR
  • 誰が何処に出ているか等も分析したい
    • dlibの物体検出器で人物判定
    • 横向き、後ろ向き、顔の重なりがあるのでそれを調査
      • 期待した精度はでなかった
    • 検出人物の分類
      • CNNを利用
      • だめだった

The theory of Serverless development by Python (理論から学ぶPythonによるサーバレス開発)

https://slideship.com/users/@marcy-terui/presentations/2017/09/9PzXZzcJfBR1ENEMmMbGSf/ https://www.slideshare.net/acloudguru/ant-stanley-being-serverless

  • Serverlessとは
    • 管理すべきサーバがない
    • サーバOSがない
    • 常駐サーバプロセスがない
  • Function as a Service
    • 関数単位で独立した環境とリソースを提供
    • 関数単位で横にスケール
    • 高い抽象度
  • Function SaaS
    • 単独ではサービスとしては簡潔しない
      • Fully featured Saasはその逆で単独で簡潔するもの
      • APIエンドポイント,データストア,認証、検索
    • プラットフォームの一部だったり
  • Serverlessがどうして登場したのか
  • どのように実装するか
    • 実態はDockerが多い
      • 特定のイベントによってコンテナが起動されて関数が実行される
      • VMよりも起動のオーバーヘッドは小さいが、オーバーヘッド自体はある
      • オーバーヘッドがあるので、一度起動したコンテナを再利用することもある
    • イベント駆動
      • 何かがトリガーとなって起動する(タイマー、クラウドリソースの変化、画面操作etc)
      • 1イベントにつきふうくすうのFunctionを実行可能
    • pull型のPub/Subモデル
  • Serverlessに向いているもの
    • IoT
      • IN/OUTが明確で各ステップでスケール調整できるのがGood
    • ユーザ行動データ解析
    • 特定のイベントに連動していろんなSaaSが動くやつ
    • 普通のWeb APIアプリケーションには向いていない
      • RequestとResponseが一対一で同期的だから
  • DBAとのコネクションコストを考える

Clearer Code at Scale: Static Types at Zulip and Dropbox

英語セッションだったので聞くのに必死でメモはなし
英語スライドに機械翻訳ぽい日本語があった
- mypyの話 https://github.com/zulip/zulip/blob/master/docs/mypy.md http://qiita.com/t2y/items/2a1310608da7b5c4860b

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

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

  • python3.6リリースパーティーで聞いた話と大体同じ
  • asyncio のイベントループポリシーを差し替えることができるのは知らなかった

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

https://speakerdeck.com/yuzutas0/20170909

カンファレンス感想

  • 初日は新大久保から歩いてみたら結構遠くて辛かったので、今後ここが会場になることがあれば素直に西早稲田駅からいくのがおすすめ
  • 無限コーヒーと無限オレンジジュースは嬉しい
  • 毎年pyconjpのおやつは美味しくて密かに楽しみにしてたが、今年も美味しかった
  • ゴミ箱のインデントは健在
  • ポスターセッションは楽しい、他のカンファレンスでも取り入れて欲しい
  • 1日目のkeynoteで同時翻訳レシーバーを手に入れそこねたがゆっくり喋ってくれていたのでなんとか聞き取れた(メモは取れてない)
  • ブースで話していたらいつの間にセッションが始まっていたので、アナウンスがあると嬉しい

Neovimでgolangを書く設定 備忘録

概要

Macgolangをインストールし、Neovimで書く環境を整えます。

インストール

まずはgolangをインストールします。

$ brew install go
$ nvim .zshrc #下記を追加
if [[ -d /usr/local/opt/go ]];then
    export GOPATH=$HOME/work.go
    export PATH=$PATH:$GOPATH/bin:/usr/local/opt/go/libexec/bin
fi

設定

設定するものは下記です。

GOPATH

golangで使用するディレクトリをGOPATHに指定する必要があるので、設定します。
GOPATH : https://github.com/golang/go/wiki/GOPATH

.zshrcに下記を追加します。
今回は~/devをGOPATHに指定しています。

#go
if [[ -d /usr/local/opt/go ]];then
    export GOPATH=$HOME/dev
    export PATH=$PATH:$GOPATH/bin:/usr/local/opt/go/libexec/bin
fi

GOPATHを指定すると、今後はgo getでインストールするgolangのライブラリがこの下にインストールされるようになります。

補完

deoplete.nvimを使っているので、deoplete-goをセットアップすればいいです。
設定も公式サイトのものをとりあえずそのまま使用しています。
deoplete-go : https://github.com/zchee/deoplete-go

依存しているものをインストールします。

$pip2 install --upgrade neovim
$pip3 install --upgrade neovim
$go get -u github.com/nsf/gocode #GOPATHで指定したディレクトリの下にインストールされる

dein_lazy.tomlに下記を追加します。

[[plugins]]
repo = 'zchee/deoplete-go'
on_ft = 'go'

vim-go

ちょっと前だとvim-goはneovimに対応してなかったようですが、今は使えるようになっているみたいなのでvim-goを入れます。
dein_lazy.tomlに下記を追加します。

[[plugins]]
repo = 'fatih/vim-go'
on_ft = 'go'

インストールしたら下記をneovimで実行すると、vim-goで使うライブラリがGOPATHの下にインストールされます。

:GoInstallBinaries

vim-go自体にチュートリアルがあるのでそれをやれば一通りの使い方はわかりそう
vim-go-tutorial : https://github.com/fatih/vim-go-tutorial

シンタックスチェック

neovimではSyntasticの代わりにneomakeでシンタックスチェックをするので、neomakeをインストールします。
dein.tomlに下記を追加します。

[[plugins]]
repo = 'neomake/neomake'