「PyCon Taiwan 2012」参加レポート

PyCon Taiwan 2012, Day 1

6月9日、10日の2日間、PyCon Taiwan 2012が開催されました。開催前日のレポートに続き、開催初日のレポートをお届けします。

会場に向かう

ついにPyCon Taiwan 2012がはじまります。朝食を食べてから台北市内のホテル中源大飯店をチェックアウトし、タクシーで会場へ向かいます。会場のAcademia Sinicaは台北市郊外にあり、駅から多少距離があるためタクシーでの移動が便利です。

会場はAcademia Sinica(中央研究院)の敷地内にあるHumanities & Social Sciences Building(人文社會科學館)という建物のInternational Conference Hall(國際會議廳)です。台北で行われているオープンソース関連のイベントでは非常によく利用されている会場だそうですが、とても立派で綺麗な会場でした。

人文社会科学館の外観
人文社会科学館の外観

さて入場登録をして会場に入ろうと思った時に事件が発生しました。

なんと日本からの参加者の一人、村岡さんがPyCon Taiwanの参加申込をしていないと言うのです! 確かに彼が「じゃあ私も行く」と言ったのは他のメンバーがチケット購入とかを済ませた後だったため、話題に上がらなかったということはありますが、なんというミス……会場入りの直前に挨拶を交わしていたPyCon Taiwanのchairperson(座長)Yung-Yu Chen氏に事情を説明し、なんとか当日支払いで会場に入れてもらい事なきを得ました。

もしも海外から参加して「チケットがないから入れない」ということになったら、泣くに泣けないですね。さすがにオープンソース系のイベントでそのようなことにはならないとは思いますが、みなさん海外の技術系イベントに参加するときにはご注意ください。

PyCon Taiwan会場の国際会議場
PyCon Taiwan会場の国際会議場

PyCon Taiwanのタイムテーブルと各資料へのリンクは、次のページから参照できます。

Keynote: Large-scale array-oriented computing with Python

もりもとです。最初の基調講演はTravis Oliphant氏による、科学技術分野のPython実績や用途、関連プロジェクト、今後の展望について紹介したものでした。彼はSciPyNumPyの開発者であり、Guide to NumPy(パブリックドメインで公開)の著者です。もともとは科学者でしたが、科学系ソフトウェアの開発者に転向したようです。

Travis Oliphant氏
Travis Oliphant氏

以下に彼の経歴や発表スライドが公開されています。

What is wrong with Python?

Pythonの悪いところ
Pythonの悪いところ

この前のスライドで Python の良いところを説明していました。Pythonの良いところは、調べればたくさん見つけられるので、ここでは悪いところのみを紹介します。 自分が取り組んでいるプロジェクトやソフトウェアの良いところ、 悪いところを認識しておくのは、適材適所を選択したり、活用する上で重要なことだと思います。

スライドから引用しながら補足します。いくつか納得する項目もあるものの、いま正に改善しようと取り組んでいる項目もあります。

パッケージングがまだ万全というわけではない(distribute, pip, distutils2が期待通りではない)
Python 3.3から packaging (distutils2)ライブラリが導入予定でしたが、現時点の開発状況を鑑みて3.4に延期しようという話題が開発者メーリングリストで行われています。まだもう少し時間がかかりそうです。
匿名ブロック(Anonymous Block)がない
“Anonymous Block⁠で調べるとPEP 343 The ⁠with⁠⁠ Statementが出てくるのですが、 ここで言う匿名ブロックとは、PythonコードやASTに対するlambdaブロックのようなものを意図しています
CPythonランタイムは、古くなってしまったので改良が必要(GIL, グローバル変数、動的コンパイル対応)
軽量DSLを作るために必要な言語拡張の仕組みが“import hooks”しかない
Python 3.1から追加されたimportlibで解決しようとしています。importlibはPythonのimport文の実装を提供し、Pythonのランタイムによらず、様々なAPIとフックを提供することで拡張を簡単にします。
複数のランタイムの煩わしさ
PyPyの人気が出てきて、Cross-Pythonというキーワードもちらほら聞くようになりました。 従来からのJython, IronPythonに加え、Python 3への移行も着実に進む中、いまが過渡期なので仕方ないですね。
配列指向(array-oriented)とNumPyを完全に理解しているPython開発者が少ない

Array-Oriented Computing

配列指向(Array-Oriented)の解法例として、フィボナッチ数列を求める実装とそのベンチマーク結果を紹介していました。

イテレーティブな実装
def fib1(N):
    """
    >>> fib1(10)
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
    """
    result = [0, 1]
    for k in range(2, N):
        result.append(result[k - 1] + result[k - 2])
    return result
Formulaを使った実装
from numpy import roots, arange

r1, r2 = roots([1, -1, -1])
C = 1.0 / (r1 - r2)

def fib2a(N):
    """
    >>> fib2a(10)
    array([  0.,   1.,   1.,   2.,   3.,   5.,   8.,  13.,  21.,  34.])
    """
    n = arange(N, dtype=float)
    return C * (r1 ** n - r2 ** n)
LFilterを使った実装
from scipy import array
from scipy.signal import lfilter
from numpy import zeros

b = array([1.0])
a = array([1., -1, -1])
zi = array([0, 1.0])

def fib3a(N):
    """
    >>> fib3a(10)
    array([  0.,   1.,   1.,   2.,   3.,   5.,   8.,  13.,  21.,  34.])
    """
    y, zf = lfilter(b, a, zeros(N, dtype=float), zi=zi)
    return y

これらの実装によるベンチーマーク結果です。

配列指向の実装によるベンチマーク比較
配列指向の実装によるベンチマーク比較

筆者は、SciPy/NumPyに明るくないためFormulaやLFilterを使った実装のアルゴリズムを理解できていませんが、イテレーティブな実装よりも高速に動作するというのが衝撃的でした。試しに私の環境でもIPythonで計測してみました。スライドのベンチマークと同じような結果が得られました。

In [11]: timeit -n 3 iterative_fib.fib1(1000)
3 loops, best of 3: 752 us per loop

In [12]: timeit -n 3 using_formula.fib2a(1000)
3 loops, best of 3: 348 us per loop

In [13]: timeit -n 3 using_lfilter.fib3a(1000)
3 loops, best of 3: 54.6 us per loop

関連プロジェクト

その他にもNumPyの良いところ、悪いところ、Zen of NumPyといったNumPyの特徴や、ndarrayオブジェクトによる配列指向の応用や考え方の説明がありました。発表の中で触れられたSciPy/NumPyに関連するプロジェクトを紹介します。

Blazeプロジェクト
次世代NumPyとPyTablesによるout-of-coreな仕組みや分散テーブルを提供する。
Numbaプロジェクト
LLVMでPythonのバイトコードをコンパイルしてNumPyのランタイムを最適化する。
pandas
高速、且つ汎用的なデータ生成/解析のためのライブラリやそのツール。

筆者は、業務アプリやWebアプリの開発を主にしてきたので、こういった科学技術分野の動向は全く分かりません。しかし、ソーシャル化による集合知やBig Data解析といった話題が、今後より一般的になるにつれて関わることも増えてきそうな気がします。そんなとき、Pythonでプログラミングできることを想像すると、新しい分野に対しても挑戦する意欲がわいてきます。

Clime: Simply CLI-ize Your Program!

鈴木たかのりです。Keynoteのあとはティータイムをはさんで1枠30分の通常のセッションが始まります。ここでは一つ目の発表MoskyさんによるClimeのセッションを紹介します。

Moskyさん
Moskyさん

以下にMoskyさんの発表スライドが公開されています。

Moskyさんは現在Pinkoiという企業でインターンとして働いている、台北の大学生です。Pinkoiは台湾のデザイナーが作った商品を販売するためのプラットフォームのようで、バックエンドにはPythonが使われています。サイトを見てみるとEtsyの台湾版という感じで、台湾のデザイナー等が作成したハンドメイドのプロダクトを売買するマーケットのようです。

彼女は他にもUbuntu-twのメンバーだったり、COSCUPという台湾のOSC (Open Source Conferecen)のようなイベントのスタッフだったりと、精力的にOSS関連の活動をしているようです。若いのにすごいなと感心しました。

本題のClime説明ですが、ClimeはCLI-ize MEの略で様々なPythonの関数をCLI(Command Line Interface)で呼び出せるようにするというモジュールです。

ある日Moskyさんはinitdb.pyrcleardb.pyをコマンドラインから呼び出すためにdb.py initdb.py clearとして実行できるようにしようとargparseを使おうと思ったけど挫折したそうです。そこで、コマンドラインでdb.py initdb.py clearと実行するとdb.pyの中のinit()clear()を呼び出すという方法がシンプルでよいのではないかと考えてClimeの作成に着手したとのこと。

実際にClimeを使ってPythonコードをコマンドラインインタフェースに対応させてみましょう。ClimeはPyPI(Python Package Index)で公開されているので、 pip install clime等でインストールが可能です。使い方は簡単で、例として次のように指定された文字列を指定された回数繰り返す簡単な関数 repeat()を作成します。3行目にclime.nowをimportしているのがポイントです。

# filename: repeat.py

import clime.now

def repeat(string, time=2):
    '''repeat string n times

    options:
        -n N, --time N  repeat N times.
    '''

    print string * time

これだけで、repeat.pyがコマンドラインで実行できるようになります。docstringに書いてある内容がヘルプで読み出せるのも非常に便利そうです。以下が実行例です。

$ python repeat.py twice
twicetwice

$ python repeat.py -n3 thrice
thricethricethrice

$ python repeat.py --help
usage: [--time N | -n N] STRING
   or: repeat [--time N | -n N] STRING

$ python repeat.py repeat --help
usage: [--time N | -n N] STRING
   or: repeat [--time N | -n N] STRING

repeat string n times

options:
    -n N, --time N  repeat N times.

これだけです。シンプルですが、作成した関数を簡単にコマンドライン引数対応するにはなかなか面白い選択肢だなと感じました。

コードはGithubのmoskied/climeで管理されており、ドキュメントもClime v0.1.4 documentationで公開されていて、とてもきちんとしています。後述するランチの時に、池さんが彼女に「素晴らしいプロダクトなのでぜひ継続して開発してほしい」と伝えたところ「Githubにコードはあるので、協力待ってます!!」と答えていました。興味を持たれた方はぜひコードを見てみてください。

いくつかのセッション発表にあったのですが、自身が所属する会社で「人材募集していますよ」というスライドが入っていました。MoskyさんもPinkoi Want You!という形で紹介をしていました。詳細ページに行くと中国語で全然読めませんでしたが、人材募集が活発なのは非常にいいことだと思いました。

Pinkoi Want You!
Pinkoi Want You!

余談ですが、彼女はスライドをめくる時に「ハッ」⁠ハッ」と言っていて、日本からの参加者でウケていました。実際には「阿(ア⁠⁠」らしく「◯◯なんですよね」の語尾の「ね」みたいに言い方をやわらげるときに使うそうです。台湾でプレゼンテーションするときにはぜひご活用ください。

Lightning Talks

西本です。一日目の最後に行われた閃電秀(Lightning Talks)の模様を紹介します。科学技術からゲームまで、ツール紹介からビジネスまで、話題の幅が広いLTでした。

LTに限らず、PyCon Taiwanの発表の多くは中国語による講演でした。しかし、たとえ話が聞き取れなくても、何について話しているのか分かれば、自分の知識で補完したりその場でネット検索したりして、なんとか話についていけます。PyCon Taiwanでは中国語の発表でもスライドが英語で書かれていて、中国語が聞き取れない私にはとても助かりました。また、中国語の講演の途中に出てくる英語のキーワードが英語らしい発音であることが多く、聞き取りやすいと感じました。

All-In-One Scientific Research With SageTeX

数式処理システムSage(Sagemath)はいわゆるMathematicaのようなソフトウェアですが、Pythonを基盤としてオープンソースで開発されているのが特徴です。SageのコードをLaTeXに埋め込むSageTeXという機能もあり、これを使えば計算結果やグラフを直接LaTeX文書に取り込むことができます。つまり「研究から論文作成まで」オールインワンの科学研究環境を実現できるわけです。

fabric ― deployment tool

  • スピーカー:jslee

SSHで複数のマシンにデプロイを行うソフトウェアfabricの紹介です。Yahoo! Taiwanではかつてyinstというperlベースの独自ツールが使われていましたが、現在はfabricを使っているそうです。

Simple Way Adding GUI to Python Scripts

PyCon JP 2011でも発表してくれたhychen氏による発表です。シェルスクリプトを介してコマンドラインからGTK+ダイアログボックスを表示するツールZenityを、Pythonから簡単に使えるようにするVSGUIという自作ツールの紹介でした。

次の簡単なコードで、ファイル選択ダイアログのGUIを表示することができます。

from vsgui.api import *
ret = ask_filepath(directory='/tmp')
info(ret)
vsguiで生成されたファイル選択ダイアログ
vsguiで生成されたファイル選択ダイアログ

PySX, a playstation emulator in python

PySXというPythonで動作するプレイステーションのエミュレーターの紹介です。すでにプレイステーションのエミュレーターはこの世に存在するのに、あえてPythonで実装し直すという、ある意味変態的なプロジェクトです。

実際にPC上でプレイステーションが起動する様子を見せてくれました。まだ、そのくらいしか動作していないそうです。

プレイステーションの起動画面
プレイステーションの起動画面

Osube - Represent You

  • スピーカー:Scott Lambert

モバイルビデオに関するスタートアップ企業Osubeの紹介です。OsubeはPyCon Taiwanのスポンサー企業でもあります。まだサービスはリリースされていませんが、バックエンドはDjangoで開発をしているそうです。

osubeのアーキテクチャ
osubeのアーキテクチャ

また、台湾のオフィスにはOsube Cafeというスペースがあり、meetupイベントなどに是非使ってくださいと言っていました。

Python and Startup

DjangoとMongoDBなどを使ってサービスを立ち上げた話をしていました。House123という不動産取引のためのサービスのようです。

PyCon Taiwanの雰囲気

再び、鈴木たかのりです。ここではセッション以外のPyCon Taiwanの雰囲気について紹介します。

PyCon Taiwanでは入場時にノベルティがロゴ入りの紙袋に入って配られました。中身はプログラムガイド(カラー)の冊子とステッカーが2枚入っていました。PyCon TaiwanのTAIPEI 101と蛇をかけ合わせたロゴはとてもステキだと思います。ただ、ステッカーは少しサイズが大きすぎるので、自分のMacBook Airには貼らずに日本へのお土産にしました。

PyCon Taiwanグッズ
PyCon Taiwanグッズ

会期中は2日間とも午前と午後にTea Break、昼にランチタイムが設けられました。Tea Breakでは軽食やケーキ、ベジタリアンの方向けのものまで用意されており、非常に充実していました。

Tea Breakの様子
Tea Breakの様子

また、ランチタイムには魚、鶏、豚などのお弁当が出ます。一般の参加者はカフェテリアのような場所で食事をとっていたようです。私たちは発表者やスタッフが使用するVIP ROOMで一緒に食事をさせていただきました。そのおかげで台湾のスタッフやスピーカーと交流できて、非常に濃密な時間を過ごすことができました。

お弁当も中華
お弁当も中華
ランチタイムにPyCon Taiwanスタッフと交流
ランチタイムにPyCon Taiwanスタッフと交流
日本からのおみやげに喜ぶYung-Yu Chen氏
日本からのおみやげに喜ぶYung-Yu Chen氏

1日目のプログラムの終了後はBoF(Birds of a Feather)という形式のユーザー同士の集まりが開催されました。ノンアルコールでピザをつまんだりして活発に議論をしていたようです(台湾のみなさんは私とは違って真面目ですね!!⁠⁠。

BoFは中国語のみのため私達は参加しませんでしたが、教育ツールとしてのPython、PythonでのWeb開発、Pythonの台湾グループの立ち上げなどについて、夜遅くまで議論が行われました。BoFの内容についてはPyCon.TW/2012/BoF - PyTUG wikiのページに中国語でまとめられています。

BoFの様子
BoFの様子

PyCon Taiwan1日目終了

この日はAcademia Sinicaの中にある宿泊施設を利用しました。Center of Academic Activities(中央研究院學術活動中心)はホテルの他にレストラン、カフェなども併設している施設です。

ホテルの部屋は非常に広く快適で、無線LANにも繋がります。また、学術関係の宿泊施設らしく机が2つあり、コンセントもたくさんついていて、私達のような人種には非常に便利でした。

日本から行った他のメンバーはホテルに併設してある中華レストランで夕食を食べたそうですが、安くて普通においしかったそうです。

Academia Sinicaの宿泊施設
Academia Sinicaの宿泊施設
謎の可愛らしいディスプレイのレストラン
謎の可愛らしいディスプレイのレストラン

私はホテルのレストランでは食べず、昨日に引き続き夜市(ナイトマーケット)に出かけました。この日行ったのは 饒河街観光夜市です。Academia Sinicaから少し距離があり、バスに乗って30分ほど移動する必要があります。ちなみにバスは東京に比べてスピードを出すからか、結構揺れて少し気持ちが悪くなりました。

どうやっていくのか調べるためにAndroidのGoogleマップで検索すると、Academia Sinicaから夜市に行くための乗り降りするバス停、バスの系統番号まで表示されました。右も左も分からない私でも安心して移動することができ、便利すぎてびっくりしました夜市へのバスルート⁠。

バスの車内
バスの車内
饒河街観光夜市の入り口
饒河街観光夜市の入り口
夕食は猪脚麺線(具に豚足の入った細い麺)
夕食は猪脚麺線(具に豚足の入った細い麺)
今日も食後にかき氷
今日も食後にかき氷
ところどころおかしな日本語
ところどころおかしな日本語

この日私が使ったお金はこんな感じです。夜市にしか出かけていないので全然減っていません。しかも夜市での買い食いよりも、その後のセブンイレブンの方がお金を使っているという事態になりました。

項目金額(TWD)日本円
前日の残金2,6087,110.14
ホテル代事前に支払い済
タクシー3701,008.72
猪脚細麺120327.15
かき氷50136.31
西瓜汁2054.53
おみやげ(セブンイレブン)5091,387.68
残金1,5394,195.75

次回予告

さて、次回はPyCon Taiwan2日目の様子をお届けします。ついに日本からPyCon Taiwanに参加した最大の目的である「PyCon JPの宣伝プレゼン」が行われます。

[2日目のレポートに続く。]

おすすめ記事

記事・ニュース一覧