Zopfcode

かつてない好奇心をあなたに。

PyCon JP 2016 行ってきた

今更かよというツッコミはなしで

9月21日〜22日の期間、PyCon JP 2016 Conference Dayに参加してきた。

今までの参加歴はJPで2年連続2回目、KRで1回なので今回は3回目だ。 LT枠にて「CPython VS MicroPython on embedded Linux」という題で発表してきたのでそれについても後述。

ロケーションと変更点

場所は昨年のお台場から大きく変わって、早稲田大学・西早稲田キャンパスでの開催となった。 運営・スポンサーブース・発表内容などは昨年をほぼそのまま踏襲した印象だ。

今年は参加者Slackが初めて追加され、会期の前後を含めコミュニケーションを取ることができるようになっていた。しかしながらこちらに関しては人数が多すぎるせいかあまり書き込みも無く、私は積極的に使うことはなかった。

印象に残ったセッション

ここからのセクションは「登壇者 - タイトル」の書式で書いていく。

Andrey Vlasovskikh - Keynote

JetBrains社のPyCharmコミュニティリードであるVlasovskikh氏は、Python 3.6で搭載される新機能についてKeynoteで語った。JetBrains社らしく「僕はPython 3.xが大好きだけど、ユーザーの皆さんはまだ半分くらい2.7を使っているから別に強制はしないよ。大切な顧客だからね。」と配慮しているのが印象的だった。

「2だけ使っている人・2と3両方使っている人・3のみ使っている人はそれぞれ手を挙げて」という呼びかけに対して、ほとんどの人が「2と3両方使っている」に手を挙げたのはまあ大体わかるといった感じだが、2系のみ使っている人も一定数いるのには驚いた。ちなみに私は堂々と「3のみ使っている」に手を挙げたが、これは一番少数派だった。もっとみんなPython 3使おうぜ。

個人的に気になっている3.6の新機能についても触れられた。ピックアップすると以下である。

総括するとこういった新しい機能アツいしみんなPython 3始めようという感じだった。

Masashi Shibata - 基礎から学ぶ Webアプリケーションフレームワークの作り方

c-bata.link

さすがc-bata先輩 id:nwpct1 だ。我が家に滞在して資料を作りながらRemark.jsの良さを説いていた彼だが、期待を裏切ることのない濃い内容だった。

その中身はというと、WSGIに準拠した3行のコードから始めて、Routerなど機能を追加していきながらWebフレームワークを実装していこうというものだ。 ライブコーディングを最大の要素として含む発表だったが、小さなミスから生じたエラーも素早く修正し落ち着いて発表していたのには感心した。

WSGIはユーザからのリクエストを所定のclassに包んで実装に渡す。具体的には、Callableなobjectを呼び出し、その引数を通じてリクエストの内容を渡す。 PEP 3333に載っている仕様を満たす関数をwsgiref.make_serverに渡せばサーバとして動くことができるが、実際には内部状態を持つclassでリクエストを取り扱いたいのが実情である。 そこどうするんだろと思っていたら、彼曰くフレームワークはclassとして実装し、このclassに__exec__ __call__ を実装することでwsgiref.make_server() へ渡せるようにするとのこと。このように、程よくメタプログラミングに触れられる点もアツかった。

EDIT: 取り消し線の部分について、c-bataパイセンからexecじゃなくてcallね、と指摘頂いた。REPLと相談せずに書くと駄目だね!ありがとう。

tell-k - メタプログラミングPython

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

こちらは「メタプログラミングRuby」という本の内容をPythonに照らして説明するものだ。とはいえ、ほとんどのコードはPythonに読み替えられた後であり、 RubyのHello Worldの書き方すら毎回忘れる私でも十分に理解できた。

Pythonの言語で定義された動作や文法に込められた意味(semantics)を操作できるのがメタプログラミングだが、この発表はメタプログラミングを構成する要素(type object, metaclass, ASTなど)についてコード例を交えつつ解説がなされた。メタプログラミングの代表的な活用例であるGhost methodや、オブジェクトとクラスの関係性の図など有用な情報が満載だった。メタプログラミングの世界に入ろうとしている人やすでに利用している人など、幅広い人にぜひ発表資料を読んでほしいと思う。それぐらい勉強になる発表だった。

Juozas Kaziukenas - Building An Interpreter In RPython

speakerdeck.com

PyPyの実装のために作られたRPythonは、言語の実装を目標としていることは言うまでもない。この発表では、氏の実装したPYHP(PHPのRPythonによる実装)を少し交えつつRPythonでのインタプリタ開発が紹介された。 内容自体は流れをざっと説明したものでありこれだけで何か実装できるというものではなかったが、RPythonのコードがどのようにC言語に落とし込まれるかを表す図など十分参考になった。

Yusuke Miyazaki - 型ヒントについて考えよう

www.slideshare.net

タイトル通りType Hintsについてのプレゼンだ。昨年も「Pythonと型ヒント」という発表があったのだが、そちらは言語仕様そのものに振った高難易度な話題だったのに比べて、こちらの発表はより実用に即した、コードスニペットを交えた発表だった。どこでどのように役に立つかがざっと紹介され、型ヒントについて全く知らない人でもどう嬉しいのかがわかりやすい発表だったと思う。

LTしてきた

speakerdeck.com

昨年のPyCon JPではLTすらやらなかったことを大変後悔したので、今年は絶対LTするぞという強い気持ちで挑んだ。初日は会場に着いた時点でLT枠が埋まっており焦ったが、2日目は出来る限りの早起き(というか徹夜)に成功し枠を得ることができた。それでも最後の1枠だったが。

f:id:puhitaku:20160922090321j:plain

タイトルは「CPython VS MicroPython on Embedded Linux」とお硬いが、内容はいつものルータである。 普段のルータ芸に関するプレゼンではPythonにフォーカスして喋ることがあまりないので、この日はここぞとばかりにPythonまみれのプレゼンをした。

内容を一言で言うと「走るルータで動いているAPIサーバ(CPython)がメモリもCPUも食い過ぎなので、MicroPythonに置き換えるとどうなるか試してみた」というものだ。

前日の懇親会で走るルータを持って歩いて話題を振りまくったのが功を奏したか、反応はかなり上々であり、発表のあとも話しかけていただいたりと満足の行くLTとなった。

MicroPythonとwsgiref

今回LTをやった過程で気づいた事として、MicroPythonでは標準ライブラリの実装の移植がまだ進んでいない。WSGIを利用するためのwsgirefの実装すらも欠いているため、現状ではWSGIに準拠したコードも動かない。 wsgirefがそもそも何をやってるのか、wsgirefから見たWebフレームワークはどんな扱いなのか、そういった事はc-bataパイセンの発表でわかったのでこのあたり自分でwsgirefの実装・contributeができないかなど考えている。とかいいつつ多忙にかまけて11月になってしまったが。

まとめ

今年は事前にProposalをよく見ていなかったため、個人的にいまいちな発表にぶち当たることも多々あった。来年はもうちょっと下調べしてから挑みたい。