PyGotham 2019 参加記
概要
先週末、マンハッタンで開催された年次カンファレンスPyGothamに登壇者として招いていただきました。イベントから得られるものを最大限にするため、参加して学んだことをまとめたノートを作成しました。どなたかの参考になればと思い、共有します。

評価とレビュー
| 項目 | 評価 |
|---|---|
| トークの質 | C |
| 運営のスムーズさ | A |
| 会場 | A |
| 自分のトークの出来 | B |
トークの質
今年のトークは、全体としてやや期待外れでした。気に入ったものもいくつかありましたが(下記参照)、物足りなく感じるものが多かったです。
原因の一つは、単に私が想定された聴衆ではなかったことです。多くの枠が機械学習のトークで占められていました。機械学習自体は面白いと思いますが、仕事で使っていないので、入門的なMLトークはもう十分という感覚でした。
運営のスムーズさ
PyGothamの運営チームには拍手を送りたいです。イベントを完璧に回していました。登壇者として、必要な情報を必要なタイミングで受け取れました。私が見たすべてのトークで音響・映像機材は問題なく動作し、進行もすべて時間どおりでした。食事もおいしく量も十分でしたが、炭水化物がやや多めでした。
会場
ペンシルベニアホテルはカンファレンスの会場として素晴らしかったです。ステージは3つあり、座席も十分だったので、窮屈に感じたり見たいトークに入れなかったりすることはありませんでした。各部屋が近く、トーク間の移動も容易でしたし、参加者同士で廊下で会話するスペースも十分にありました。
自分のトークの出来
下記の「自分のトークの振り返り」をご覧ください。
お気に入りのトーク
Archiving the Internet Before it All Rots Away
登壇者: Nick Sweeting(Monadical)
ウェブページのアーカイブにこれほど大きなコミュニティがあり、ツールもこれほど成熟しているとは知りませんでした。Nickは、中央集権的なデータリポジトリがいかに失われやすいかを指摘しました。それはアレクサンドリア図書館のような古代の事例でも、GeocitiesやTumblrのようなデジタル情報でも同じです。こうしたリポジトリは、一般の人々が自分自身でアーカイブし保存できるツールを持つことで生き残るのです。
Nickはウェブページをアーカイブするためのさまざまなツールや、インターネットアーカイブに取り組む団体・オンラインコミュニティを紹介してくれました。ツールは想像以上に成熟しており、JavaScriptやRPCを多用してHTMLを動的に生成するシングルページアプリケーション(SPA)をアーカイブできるツールも複数あります。一般的なユーティリティにも強力なアーカイブ機能が備わっているほどです。
Nickは次のwgetコマンドを紹介しました。JavaScript、CSS、画像を含めてウェブページ1件を丸ごとダウンロードできます。
wget \
--no-verbose \
--adjust-extension \
--convert-links \
--force-directories \
--backup-converted \
--span-hosts \
--no-parent \
-e robots=off \
--restrict-file-names=windows \
--timeout=60 \
--warc-file=archive.warc \
--page-requisites \
--user-agent="Lalala this is chrome I promise..." \
--load-cookies="mycookies.txt" \
--compression=auto \
--no-check-certificate \
--no-hsts \
"https://2019.pygotham.org"--compression=autoフラグを外してください。お使いのバージョンのwgetでは対応していないためです。その他、良かった点は次のとおりです。
- Nickが紹介してくれたkiwixは、私にとって初めて知るプロジェクトでした。WikipediaやStack Overflowのような大規模なコンテンツサイトのオフラインコピーを提供し、ローカルで実行できます。
- Nickはアーカイブ関連のリソースやコミュニティのディレクトリを管理しています。
Maintaining a Python Project When It’s Not Your Job
登壇者: Hynek Schlawack
Hynekは人気のオープンソースプロジェクト(attrs、structlog)をいくつもメンテナンスしており、外部からのプルリクエストをレビューする時間は限られています。レビュー時間を最小限に抑え、コントリビューター自身がバグを見つけられるようにするために、自動化ツールを活用しています。これは、私のコードレビューにおける第一原則である「退屈な作業はコンピューターに任せる」にぴったり合う考え方でした。
Hynekは楽しく活気のあるスピーカーです。「こんにちは、Hynekです。あなたが知らなかったヨーロッパの友人です」というジョークで始め、トーク全体が楽しく、時にユーモラスな内容になることを予感させます。
その他、良かった点は次のとおりです。
- 知らなかったツールをいくつか教えてもらいました。
- isort: Pythonのimport文をソートします。
- 私もPython 3のボイラープレートプロジェクトに導入しました。
- このツールの欠点は、「自動で修正する」(ビルドチェックで求めている動作ではない)か「不親切なエラーメッセージを出す」かの2つのモードしかないことです。
- Black: Pythonコードの空白を整形します。
- 面白いツールですが、私が愛用しているyapfと比べて特に優れている点は見当たりませんでした。
- tox: 異なる仮想環境でPythonのテストスクリプトを実行します。
- 5年ほど前に使った覚えがあるのですが、当時は単体テストで挙動をモックするために使っていました。今のプロジェクトはまったく別物なので、mockが標準ライブラリに入った後に方向転換したのか、単に私が勘違いしているのかよく分かりません。
- いずれにせよ、なかなか便利そうです。複数のPython環境で動作するプロジェクトは作ったことがありませんが、引き出しに入れておくと役に立ちそうです。
- isort: Pythonのimport文をソートします。
- Hynekのプルリクエストのチェックリストやコントリビューター向けドキュメントの例が気に入りました。
- トークのテキスト概要を公開している人を見たのは初めてでしたが、Hynekの概要はとても役に立ちました。
Make You An Async For Great Good!
登壇者: Mark Smith(Nexmo)
Markは並行処理コードを書くためのPythonライブラリであるasyncioモジュールを紹介しました。彼はmysyncioという簡易版を自作することで、このライブラリの仕組みを理解したそうです。
Markがあれほど少ないコードでasyncioの機能の多くを再実装していたことに驚きました。彼の実装では、スレッドセーフ性や例外処理といった本物のasyncioモジュールの重要な機能は省かれていましたが、中核的な機能は実現していました。並行プログラミングは直感的に理解するのが難しいことが多いので、魔法を解いたようなMarkのライブラリを見て、asyncioがより理解しやすくなりました。
自分のトークの振り返り
登壇者: Michael Lynch(筆者)
自分のトークには手応えを感じました。5〜7回ほど通しでリハーサルするなど、準備の度合いには満足しています。ただ、カンファレンス直前の週まで先延ばしにせず、もっと早くからリハーサルを始めていればよかったと思います。
PyTexasでのトークの後、改善点として「もっとゆっくり話す」「ノートPCを下向きに見すぎない」とメモしていました。PyGothamでは、ゆっくり話すことを意識しすぎたせいか、自分の話に飽きているかのように平板な口調になってしまいました。最初の5〜10分を過ぎると良くなりますが、今後のトークでは話に感情を込めることを意識したいと思います。
一番の失敗は、画面をミラーリングするのではなく、Googleスライドの「発表者ビュー」で投影してしまったことです。画面上のタイマーがペース配分に役立つと思ったのですが、自分のスライドが見えなくなることを失念していました。内容は十分に頭に入っていたので、発表者ビューの小さなサムネイルだけで大半は話せましたが、何度か聴衆から目を離してスクリーンの文字を読まなければならない場面がありました。
うまくいったこと
- 話す内容に自信を持てました。
- 話すスピードを落とし、聴衆に意識を向け続けることができました。
改善が必要なこと
- 「発表者ビュー」ではなくノートPCの画面をミラーリングすることを忘れないようにします。
- ゆっくり話すことと平板な口調で話すことは別です。これらのカンファレンスに参加できて嬉しいので、その熱意をもっとトークで表現したいです。
- 内容自体がやや事務的で、もっと気軽さやジョークが必要です。
- 準備が慌ただしくならないように、もっと早くからリハーサルを始めます。
かかった費用
| 費目 | 金額 |
|---|---|
| 電車代 | $95.00 |
| 宿泊費(2泊) | $0(友人宅に宿泊) |
| Uber代 | $9.08 |
| 食費 | $5.44 |
| 合計 | $109.52 |
PyTexas参加時に使った約1,200ドルと比べてみてください。すべてのカンファレンス主催者が、私の自宅から車や電車で行ける距離で開催し、近くに泊めてくれる友人がいることを確認してくれれば、とても助かるのですが。
時間的には、5〜10時間ほど準備に費やしました。PyTexasで使ったスライドがすでにあったので、今回は準備がずっと楽でした。前回の反省を踏まえて少し手直しはしましたが。
その他の雑感
「どう改善できるでしょうか?」
以前のカンファレンスでは、トークが良かったと声をかけてくれた方に、ただ「ありがとうございます」と返すだけでした。今年は「ありがとうございます。改善すべき点はありますか?」と聞いてみました。皆さん少し驚いた様子でしたが、たいてい一度考えてから提案をしてくれました。
カンファレンスではフィードバックが不足しがちです。誰もが話し方やスライドの分かりやすさを改善できますが、登壇者は何がうまくいっていて何がそうでないのか、十分な情報を持っていません。私自身、トークを見ていて「簡単に直せるのにもったいない」と思う場面に何度も出くわします。ただ、特に登壇者がただでさえ緊張している内容について、求められてもいないアドバイスをするのは失礼にあたります。
今後、トークの後に声をかけていただいた際には、お礼を伝えつつ、どうすればより良くなるかを尋ねることを忘れないようにします。もし私のトークをご覧になった方がいれば、ぜひ改善点を教えてください。
カンファレンスはアイデアが生まれる場所
カンファレンスは創造的な思考を刺激してくれます。会場に座るまでいつも忘れているのですが、参加するたびにそう感じます。カンファレンスでなければ思いつかなかったようなアイデアが生まれるのです。
ときにはトーク中に考えがあちこちに飛ぶからなのかもしれませんし、登壇者が思考プロセスを語ることで、普段とは違う発想が自分の中に生まれるからなのかもしれません。いずれにせよ、参加するたびに、自分のビジネスや今後取り組みたいプロジェクトについて良いアイデアを持ち帰ることができます。
仮想通貨を盗む話をトークにすべきだ
そうした、普段なら思いつかないアイデアの一例として、PyGothamで「How I Stole Your Siacoin」をカンファレンストークにすべきだと気づきました。面白いストーリーでPythonを使っていますし、レーベンシュタイン距離や公開鍵暗号といったトピックを楽しく説明できます。これまでカンファレンストークにする発想はありませんでしたが、一度思いつくとあまりにも当然のことのように感じられました。
もしかすると、何も求めるべきではないのかもしれない
今年前半のPyTexasの後、新しいプロジェクトを探していたことに気づき、会場には大勢のテックワーカーがいたのだから、仕事上の困りごとについて話しかけてくれるよう頼めばよかったと反省しました。誰しも、マネージドサービスに任せたいと思う業務はあるはずです。(願わくば)自分が有能な開発者であることを示せていたので、何か作ってほしいと頼んでくれる人もいたかもしれません。
PyGothamでは、トークの最後に、仕事で足りないと感じているマネージドサービスについて気軽に声をかけてくださいと呼びかけました。しかし、反応は何もありませんでした。
最悪でも「MailChimpが欲しいけど、無料で無制限に使えるものがいい」といった的外れなアイデアくらいは聞けるだろうと思っていましたが、まったく何もありませんでした。なので、この戦略にはあまり価値がないのかもしれません。今後は、この場を使ってWhat Got Doneの新規ユーザーを集めることに使ってみようと思います。
CFPのレビューは勉強になる
カンファレンスに登壇する際、スピーカーは「CFP(Call for Proposals、公募)」を提出します。なぜ自分が登壇すべきなのか、イベントのスケジュールで参加者を惹きつける紹介文をどう書くべきかなどを、数段落で説明するものです。
PyGothamは、参加者がすべてのCFPを見て投票できるという、私が初めて経験したカンファレンスでした。自分でもいくつかCFPを書いたことはありますが、他の人のCFPを読んだことはなかったので、どのトークが採択されるかに(多少なりとも)投票権を持つ立場として経験できたのは、とても勉強になりました。
いくつか気づいたことを挙げます。
- CFPのレビューは本当に疲れます。
- たしか提出数は約300件でした。3〜4回に分けて行いましたが、エネルギーの違いから、どうしても人によって寛容さや忍耐強さにムラが出てしまったと思います。
- 自分の興味と参加者全体の興味のバランスを取るのは難しいです。
- 例えば、私自身は機械学習のトークにそれほど興味はありませんが、他の多くの人は興味を持っています。そうした場合、賛成票を入れるべきか、反対票を入れるべきか迷います。
- CFPでは横柄な態度はマイナスになります。
- CFPの記入自体を面倒がっているかのような提出者もいました。「あなたのトークは何についてのものですか?」という質問の後に「参加者はあなたのトークから何を持ち帰るべきですか?」といった質問が続くのですが、後者に対して「上記参照」や「最初の質問と意味のある違いはない」といったぞんざいな回答をしている人を何人も見かけました。
- 100件のCFPをレビューして90%を落とさなければならないとき、そうした横柄なものは最も落としやすい対象になります。
年に3回の登壇は良い目標
年初に、2019年は3つのカンファレンスで登壇するという目標を立てました。PyGothamでその目標を達成できました。
- NERD Summit 2019
- PyTexas 2019(参加記)
- PyGotham 2019
振り返ってみても、年3回というのは良い目標だったと感じています。カンファレンスごとに1〜2週間は疲れが残りますが、良いアイデアを得られたり、そうでなければ出会わなかったツールや手法に触れられたりします。
記事をランダムに読む