清水川です。
各国のPyConを巡って、スピーカーとして発表する修行、今回は4ヵ国目となるマレーシアです。
2015年8月21日(金)~23日(日)にかけて、マレーシアのクアラルンプールでPyCon.MY 2015が行われました。
PyCon.MYは今年初めて開催されるマレーシアのPyConです。昨年はMini PyConとして、マレーシアでどのくらいの人がPyConに参加してくれるのか、運営できるのか、といったことを知るためのお試しバージョンを開催していました。昨年の参加者が70名、今回の参加者が約110名ということで参加者数も増え、カンファレンスとしても大成功だったと感じられました。
筆者はこのカンファレンスでSphinxの翻訳支援(i18n)機能についてと、Sphinxのautodoc機能について紹介する2つの発表を行ってきました。
参考リンク:
クアラルンプールってどんなところ?
東京からマレーシアのクアラルンプール国際空港までは直行便で7.5時間、時差は1時間です。筆者は羽田発23:45の飛行機に乗り、朝6時過ぎにクアラルンプール到着しました。マレーシアの通貨はマレーシアリンギット(MYR)で、1MYR=約30円です。空港で両替すると1MYR=約33円と少し割高なレートでした。
空港から市街地のKL Central駅まで、ERL(Express Rail Link)という特急で40分ほどで、料金は35MYR(約1,050円)です。高架を走るLRT(Light Rail Transit)は、クアラルンプール市内の主要スポットを結ぶ電車です。LRTは4分から8分間隔で運行されていて、料金は0.7MYR(約20円)からと、気軽に利用できる金額です。他に、市内と市外を結ぶKTM Komuterがあり、料金は同じく0.7MYR(約20円)からです。こちらは20分~30分間隔で運行されていて、LRTと比べると待ち時間が長く、タイミングによっては30分待つことになってしまうため利用する際は注意したほうが良いでしょう。
クアラルンプールは車社会のため、ちょっとした移動にも自動車が必須です。タクシーは初乗り3MYR(約90円)で、30分乗った場合でも20MYR(約600円)と、日本よりもずっと安いため気軽に利用できました。
筆者は空港でインターネット接続用のSIMカードを購入しました。今回は事前調査せずに行ったため、安そうな案内をしていたCelcomで購入しました。筆者が持っているSIMフリー端末は海外のLTE通信周波数に対応していないため、3G通信が800MB/1週間で20MYR(600円)のプランを選択しました。SIMカードを利用するにはアクセスポイント名の設定が必要です。後で読んだ説明書にはSMSの送受信によるアクティベーション方法が書かれていましたが、今回は購入時に店員さんがPC端末でアクティベーションしてくれたようです。国によって、SMS送受信が必要か、自分で行うのかなどが異なっているため、日本からPoketWiFiなどの通信デバイスを持参する場合は、SMSを送受信できる機器かどうか確認しておいたほうが良いでしょう。
マレーシアでの会話はほとんど英語でした。ただし、シンガポールの「シングリッシュ」と同様に、マレーシアの英語も発音が独特で訛りが強いため、聞き取るのはとても大変でした。
クアラルンプールの気候は、1年を通して平均30℃くらいですが、滞在中は日中36℃の日もありました。逆に、カンファレンス会場などの建物の中はエアコンが強めに効いていました。今回、筆者は出発直前に風邪をひいてしまったため、会場ではパーカーを着ていても寒くて大変でした。冷房を強く効かせるのは東南アジアの国々では共通のようです。防寒対策をしっかりして、建物外との寒暖の差で体調を崩さないように注意しましょう。
コンセントの形状は、シンガポールと同じBFタイプです。日本のAタイプのコンセントを使うには変換プラグが必要です。電圧は230Vですが、ノートPCの電源アダプタやUSB充電器などは100V~240Vに対応しているので、変換プラグがあれば大丈夫でしょう。
PyCon.MYの様子
21日(金)のワークショップではNon-programmers guide to Pythonと題して、プログラミング未経験者向けのワークショップが開催されました。22日(土)、23日(日)は2つのキーノートと21個のトークセッションが行われました。
カンファレンスデイ初日、8月22日(土)は9:00から受付が始まり、10時からオープニングとキーノートが始まりました。筆者はキーノートが始まる30分ほど前に到着して受付を済ませました。PyCon.MYではPeatixによるチケット販売を行っており、iPhoneアプリで受付票を提示して、ノベルティと名札を受け取りました。受付は混み合うこともなくスムーズでした。
ノベルティのTシャツには、“Make Python Yours”(Pythonをあなたのものに)というキャッチコピーがプリントされています。これは“My PyCon”(マレーシアのPyCon、私のPyCon)というカンファレンス名とかけているそうです。言われて気付いたのですが、趣向を凝らしてあって面白いですね。
今回のカンファレンスには、日本から筆者の他に、寺田さんとイアンさんが参加しました。また、PyCon.MYの座長を務めるイクバルさんも、普段は日本で活動しています。筆者を含むこの4人は、一般社団法人PyCon JPの理事です。普段からの知り合いが一緒に参加していると色々と安心できる反面、日本語でばかり話すようになってしまうので気をつけたいところですね。せっかく海外カンファレンスに行ってるのにもったいない!
Guidebookとシャトルバス
PyCon.MYでは紙のプログラム冊子はありませんでした。代わりに、Guidebookというサービスで、プログラムを配布していました。このサービスはEuroPythonや昨年のPyCon JPでも利用されていて、カンファレンス期間中はとても重宝しました。自分が参加したいセッションをあらかじめチェックしておけば開始時間になると通知が来ますし、カンファレンス中にセッションの時間や部屋が変更になった場合にも反映されます。実際にプログラムの変更は何度かあったのですが、紙の冊子がなく全ての情報がGuidebookに集約されていたおかげで、迷うことなくカンファレンスを楽しむことができました。
今回、駅から会場までの移動のために、シャトルバスが手配されていました。カンファレンス会場は大学の建物を利用していましたが、その会場から最寄りのLRT駅まで、広大なキャンパスを挟んで徒歩30分以上あります。そのため、遠方や海外からの参加者の多くがシャトルバスを利用していました。歩けない距離ではないのですが、36℃の炎天下を30分歩くのは大変なので、とても助かりました。また、バスの時間もGuidebookで提供されていたので、スマートフォンですぐに時間を確認できるのは便利ですね。
コーヒーブレイク&ランチ
コーヒーブレイクとランチは、全てハラルフードとベジタリアンフードで用意されていました。マレーシアの6割前後がイスラム教徒ということもあり、通常の料理はハラルフードなのだそうです。ハラルフードというと、豚肉はNGだったり、許可されている肉でも決められた処理方法に従っていなければならない、など厳しい決まりがあります。このため、料理が単調になるのではないかと思っていましたが、筆者が実際にクアラルンプールに滞在していた期間中、食事についてそのような心配は必要ありませんでした。カンファレンス会場以外にも、ホテルの朝食などを含めて様々なところで食事をとりましたが、ハラルフードかどうかを意識することはほとんどなく、また、どの料理もとても美味しく、食事を楽しめました。
休憩中には、筆者は友人と再会しました。PyCon SG で知り合ったJimとSianです。JimはPyCon.MYのスタッフとして活動していました。また、SianはこのカンファレンスのプラチナスポンサーをしているOnAppの社員として参加していました。2人ともカンファレンス中は忙しそうにしていましたが、後日クアラルンプール市内を車で案内してくれました。シンガポールでの出会いから、また別のカンファレンスで再会したことで友人関係が深まったことを嬉しく思いました。
PyCon.MYの発表紹介
筆者は、2日間でいくつかのセッションに参加しました。ここでは2つセッションについて紹介したいと思います。
Making Money with Python
発表者はBraintreeのDeveloper Advocateの方です。BraintreeはPayPalの支社で、カードによる支払いを簡単にサイトに組み込むためのサービスを提供しています。発表では、実際にBraintreeのSandboxを使って、Flaskのサイトに支払いフォームを組み込んでいく手順をデモを交えながら紹介していました。Pythonを使い始めてまだ8ヵ月だけど、Pythonを使う事でプロトタイプを素早く実装出来たそうです。
Braintreeを使うことの利点は、支払い処理をサーバーサイドで行う事でセキュリティーを担保できる、とのことでした。クライアントアプリなどは解析されて認証トークンを抜かれるリスクがあると言うことです。
スマートフォン上で少額決済を行いたいシーンは、これからもどんどん増えてくると思います。そんなときに手軽に利用できるサービスの1つとして覚えておきたいと思います。デモで紹介された実装コードは、Braintreeのおかげで実装量も少なく、使いやすそうな印象を受けました。
OnAppスポンサーセッション
プラチナスポンサーOnAppのセッションです。OnAppはクラウドストレージサービスを展開する会社で、そのなかでPythonを使っています。多くの処理を同時に行うため、Pythonの並列化が必須なのだそうです。しかし、PythonのThreadはGILがあるため、多くの処理時間をThreadのコンテキストスイッチに費やしていました。
解決方法として、Gevent、multiprocessing、PyPy、PyPy STMなどを比較検討して、現在はGeventを利用することで速度が改善できたそうです。multiprocessingでの実装は速度が改善するかどうか読み切れない場合が多かったため、採用しなかったそうです。
Geventはthreadを使う実装から大きく書き換えずに利用できます。セッションでは、実際の書き換えコード例などを紹介していました。
Q&Aでは、asyncioを試してみた? という質問がでました。残念ながら今はまだPython 2.7を使用しているため、Python 3.4で提供されるasyncioは検証していないそうですが、これから時間をとって速度比較などしていきたい、ということでした。
招待ディナー
カンファレンス1日目の夜に、スピーカー、海外からの参加者を招待したディナーが行われました。店はKokopelli Bistroという一見民家にしか見えないお店です。カンファレンス会場から車で15分の場所にあり、参加者は会場からシャトルバスで移動しました。
この招待ディナーの料理もすべてハラルフードでした。また、マレーシアの多くの人が宗教上の理由から飲酒しないこともあり、アルコールは一切ありませんでした。とはいえ、日本ではこういったディナーでお酒が出てくるのが普通なため、お酒なしではさみしく感じてしまいますね。
ディナーでは、参加者同士それぞれが、Pythonや関連する技術について話したり、飛行機でマレーシアに来るのに何時間かかった、といったような雑談をしていました。日本からは筆者と寺田さんが参加していましたが、訛りの強い英語の会話にはなかなかついて行けませんでした。
会話は苦戦しましたが、このようにスピーカー同士が顔を合わせて雑談をするような場は重要です。PyCon.MY座長のイクバルさんはこのディナーについて、スピーカーや海外からの参加者をおもてなしすることが大事、と言っていました。スピーカーにとっても、遠くまで出かけていって技術ネタを発表しようという人達が集まるので、技術的に濃い話ができ、意見交換できるのは良い企画でしょう。しかし筆者は、この場にそれ以上に重要な役割があると感じました。こういった場で雑談に耳を傾け、なんとなくお互いに顔を覚えることで、翌日以降のカンファレンスで挨拶し、そして次第に強い繋がりになっていく、そういったきっかけを提供してくれていたと思います。そういう意味でも、この場に集まった全員に価値のあるとても良い会食でした。
Sphinxの発表
筆者はカンファレンス1日目と2日目に、それぞれSphinxの翻訳支援(i18n)機能についての発表と、Sphinxのautodoc機能についての発表を行いました。
翻訳支援(i18n)機能についての発表は、参加者が10名で、全参加者の1割未満でした。PyCon.SGで翻訳支援機能の発表をしたときにも思いましたが、カンファレンス参加者が100%英語を使える国では翻訳のニーズがほとんど無いということですね。
Q&Aで「MarkdownのドキュメントをSphinxで扱うための変換ツールがあるか?」という質問がありました。EuroPythonでも話題が出ていましたが、Markdownを他の記法に変換する際に大変なのはHTMLタグが入っている場合です。そして多くの場合、HTMLタグが入っているMarkdownを綺麗にreSTに変換することはできません。質問者には、そのような事情を伝えました。
もう1つの発表、autodocの発表では、始めは30人ほどの参加でしたが、後から人が入って最終的に40人ほどが参加してくれました。
発表の最初に、"docstringを書いたことがある人”が何人いるか尋ねると、20人が手を挙げてくれました。次に、“docstringでAPIリファレンスを生成したことがある人”を尋ねると、0人でした。そこで「このセッションは君たちのためにある!」と言って、本題に入っていきました。
ところで、「この発表は君たちのためにある!」というのは、EuroPythonである発表者が使っていたセリフですが、良い始め方だなあと思ったのでそのまま使わせてもらいました。プレゼンテーションでは参加者の共感を得る内容から始めるのがセオリーですが、こういった会場への質問と、手の挙がる数に合わせたうまい返し方ができると、より参加者を発表に引き込みやすいと思います。人数に合わせて、というところがなかなか難しいですが、うまく使って行きたいですね。
筆者の発表に参加してくれた寺田さんが、後で参加者の様子を教えてくれました。参加者は、Sphinxとautodocの話を真剣に聞いて、メモを取り、スライドにある操作手順などを写真に撮っていたということです。Sphinx自体、マレーシアでほとんど認知されていないのかもしれません。寺田さんの感想としては、「autodocというSphinxの応用的な使い方の話だったけれど、Sphinxの歴史や導入前後の体験、インストール手順などにも軽く触れられていて、Sphinxをまったく使ったことがなくても聞きやすい内容になっていてとても良かった。ただ、話題が次のセクションに進むときはあっさり進めるのではなく、直前にひとことまとめて、溜めがあっても良い」ということでした。導入の分かりやすさは、これまで3回の発表を経て改善してきたところなので、その成果を着実に得られているということが実感できて嬉しかったです。また、新しい改善点も指摘してもらえたので、次に向けて改善しようと思います。
発表内容の詳細については、6月に台湾で行われたPyCon APAC 2015の発表レポートをご参照ください。
おわりに
今回のPyCon.MYでは、2つの発表を行いましたが、カンファレンスが開催される地域に合った内容の発表が重要、ということがよく分かりました。現地で使われている言語の実情を知るのはなかなか難しいですが、プロポーザルを送る前にカンファレンスのスタッフに聞くなど、事前に調べる方法はあっただろうと思います。よほど名の知られた熟練者であれば“話したいことを話せる”のかもしれませんが、まずは“必要とされている事を話す”ところから始めて、少しずつ発表の腕を磨いていきたいと思います。
次回のレポートでは、2015年8月29日(土)、30日(日)に行われたPyCon Korea 2015について紹介します。