「Python Hack-a-thon 2010.07」レポート

Pythonハッカソンは、Djangoハッカソン(8回まで開催)から引き継がれる形で開催されている勉強会です。7月10日、オラクル青山センターにて、4回目の勉強会Python Hack-a-thon 2010.07が開催されました。

Pythonと銘打っていますが、Pythonに限定しない話題も数多く登場します。今回も、Ocaml, C++(?), PHPなどについてのプレゼンもありました。初心者から上級者まで評判が良く、リピート率も高いイベントです。とにかく人気で、とくにここ数回は100人以上の規模での募集にも関わらず、申し込み後すぐにいっぱいになってしまう盛況ぶりです。

画像

Pythonハッカソンは、ハッカソン、ハンズオン、プレゼンテーションの3つのパートで構成されています。本稿では、これらのパートごとに、今回の勉強会についてレポートします。

Note:
もともとは、PythonのウェブフレームワークのDjangoのイベントだったのが、Djangoに限らず様々な話題が登場するようになったために、Pythonハッカソンという名前になったという経緯があります。現在ではPython以外の話題も数多く登場するため、別の名前も検討されています。

ハッカソン

ハッカソンは、参加者が自分で課題を持ってきて自分でやるというスタイルのコーナーです。当日は1/3ほどの人が参加し、周りの人とフリーなディスカッションをおこないました。⁠大学の研究室やサークルの部室の夜中」のような雰囲気というと伝わりやすいかもしれません。中級以上の人に限定されますが、運営側の仕事としては場所の提供だけなので、運営の手間がきわめて低い、エコなスタイルです。

一部の方々に、ハッカソンで取り組んでいることについてのインタビューをしました。

Python本体のデバッグ

プレゼンのセッションでも発表をされた@atsuoishimotoさんが取り組まれていたのは、Python本体のデバッグです。 bugs.python.orgに登録されているバグの中で、正規表現で検索する文字列にUnicode文字列が指定できないというものがあったので直していたんだそうです。

bugs.python.orgのバグ修正をされている方は日本にはほとんどいないんだとか。

画像

Twitterボットの機能拡張

数少ない女性の参加者である@wirohaさんは、自作Twitterボットであるかーりるん@calilunの機能拡張を行っていました。Twitter上でボットに向かって「○○県△△市」「著書名」借りられる?と尋ねると、図書館検索サイト「カーリル」のAPIを利用して調べてくれるという優れモノです。カーリルAPIコンテストでは、なんとグランプリを受賞されていました。@wirohaさんは、今までGAEでしかリリースしたことがないので今度はDjangoで作成したボットにも挑戦したいとのことです。

IPythonのPython3対応

Bazaar関連の開発に携わっており、今回、エキスパートPythonプログラミングのサイン会でサインも行った@methaneさんは、現在は Python3に対応していないIPythonを、Python3で使えなるように修正作業を行っていました。ちなみに、IPythonはできるPythonプログラマ必携のインタラクティブモード拡張ツールで、⁠エキスパートPythonプログラミング』でも紹介されています。

修正作業は、IPythonのコードを純正の変換ツールで変換し、出たエラーを修正されていました。自動でコードを変換してくれるツールもありますが、完全ではないため、一部手作業が必要とのことです。

旧式Macの文字コードに対応するコーデックの開発

某出版社の編集の@turkyさんは、Xmac Japaneseという文字コードのコーデックの開発をされていました。Xmac Japaneseは、昔の出版物の元データにあたるときにたまにぶつかる形式ですが、Shift JISの独自拡張でそのままでは変換できないことも多いため、自作に踏み切ったそうです。

マルチプラットフォーム版の、昔ながらのPSG音源の開発

プレゼンセッションで大規模システムの事例発表をされた@ransuiさんが取り組んでいたのは、昔ながらのPSG音源の開発です。MML(昔はよく使われていた楽譜データ)をパースし、リアルタイムに矩形波を作ったりミキシングしたりして、最後は各OSの音声デバイスをラップした、マルチプラットフォームのライブラリで出力しているとのことです。

画像

ハンズオン

プログラミングに限らず様々なものを学ぶ時には、自分でさわって考えながら学ぶことが不可欠です。話を聞くだけでは限界があります。ですが、まったく未知の分野に挑戦する場合にはつまずきやすいポイントを補助してもらいながら勉強することで効率良く、くじけないで勉強できます。ハンズオンは初心者が安全にスタートでき、その後自分で走れるようにする、体験型チュートリアルセッションです。

Note:
詳しくは技術評論社から好評発売中のつまみぐい勉強法で紹介しましたので、そちらをお買い求めください(宣伝⁠⁠。

Sphinx講座(講師:@shibukawa)

Sphinxとは、Pythonの公式ドキュメントにも使用されている、ドキュメントを作成するためのツールです。reStructuredText(reST)で記述することにより簡単にHTMLやPDFを生成することができます。

インストール方法と簡単な使い方を教わった後は各自手を動かして実際にドキュメントを作成してみることに。講師は渋川が担当しました。

Sphinxを使用すれば短時間で簡単にきれいなドキュメントが作れるのでその場で出来を確かめつつ、各自サクサクと作っていきます。テーマは、自分の異性の好みのタイプをSphinxを使ってまとめてみるという面白い物を選びました。

画像

Python初級者コース (講師:@aodagさん)

関数の作り方、リストの使い方などのPythonの基礎を解説したドキュメントとそれを使って作れる課題が用意されていて、参加者は各自ドキュメントを読んだり、課題に取り組んで分からないことがあったときには講師である@aodagさんに質問するといったスタイルでした。初級コースとはいえ参加者のレベルはバラバラで、IPythonのインストールから入る人もいれば黙々と課題を完成させている人までさまざまです。

普段から「シュークリームくれればPython教えるから」という@aodagさんらしく、ドーナツなどのスイーツをみんなで持ち寄って楽しく行われました。

画像

Python中級者コース(講師:@shimizukawaさん)

Python中級コースでは、virtualenvを使った複数の開発環境を簡単に作る方法や、Pythonのパッケージの作り方とパッケージデータを置くためのPyPIへの登録方法、buildoutという環境構築手順を自動化する方法などを教わりました。講師は@shimizukawaさんです。

情報交換やトラブルシューティングなど参加者同士の交流もあり、とても有意義なハンズオンになりました。

画像

Flask(講師:@mopemopeさん)

Ruby界ではイケメンスーパープログラマーとしてDHHが有名ですが、Python界のイケメンスーパープログラマーで、なおかつ若い、オーストリア人のArmin@mitsuhikoが最近リリースしたのが、Flaskというウェブアプリケーションフレームワークです。そのできたてのフレームワークのチュートリアルが@mopemopeさんによって行われました。

参加された方によると、Flaskのホームページに載っているサンプルを実行しながら基礎的な使い方を説明しているという内容だったとのことです。

画像

Blender(講師:@nanimosaさん)

Pythonが組み込まれていて、なおかつプロレベルの高品位のCGが作れるオープンソースの3DCGツールがBlenderです。Blenderのユーザグループのメンバーとしても積極的に活動されている@nanimosaさんによるハンズオンです。他のハンズオンの倍近い時間でたっぷり行われました。

3Dツールは、その空間の歩き方(カメラの移動や回転、ズーム)やモノの動かし方などがソフトウェアによって様々ですし、ショートカットなどを多様するため、なかなか一人で始めるには気が重かったり、つまずきやすい部類に入ります。午後にはPythonスクリプトによるBlenderの操作から、アニメーション作成の作成まで行われました。作成されたアニメーションはyoutubeにあがっています。なんとこのアニメーション、ソースコードはたったの10行くらいで作れてしまうそうです。

画像

プレゼンテーション

5~20分のプレゼンタイムです。プログラミングに関する高度な話題から、道徳的な話題、技術的な話からネタまで、言語もPythonにとどまらず、C++や恒例のPHPまでバリエーション豊かな発表が集まりました。

えがわさん「PythonはあなたのAndroidライフを応援します」

IMoNi開発者であるえがわさん@t_eggによる、Androidのさまざまな所でPythonが利用されている、という発表でした。具体的にソースコードの中を調査した結果が紹介されました。

ご存知の方も多いと思いますが、Androidの開発にはJavaを用います。省メモリが要求される環境ではまだスクリプト言語が主流にはなっていませんが、えがわさんによると、サーバ部分や開発補助ツール、テストコードなど、実機の周りの幅広いところでPythonが活躍しているとのことです。おもしろいなと思ったのは、HTTPクライアントのテスト用の、行儀の悪いサーバのふりをするPythonスクリプトもあるという点です。

驚いたのは、AndroidのソースツリーになぜかQuakeのソースコードがまるごと含まれているということです。その中のデータ変換用に、やはりPythonが利用されている、とのことでした。

画像

なんもさん「Blender 2.5」

午前からハンズオンでもフル回転のなんもさんによる、Blender 2.5の紹介です。Blenderには元々Pythonのサブセットが含まれており、Pythonで拡張できるようになっていました。現在開発中(ハッカソン時点でアルファ2)の2.5からは、Python 3.1のフルセットが含まれています。そして、アーキテクチャもリファインされ、Excel VBAのようにUIのすべての操作をPythonコードでマクロとして保存できるようになっていたり、3D空間のすべての要素をPythonから操作できるようになりました。

プレゼンの中では、オブジェクトを振動させるデモのほか、 Pythonの組み込みのネットワークライブラリと連携し、Twitterから最新のメッセージを取り出してきて、3D空間に表示するというデモが行われました。

Camlspotterさん「Ocaml」

シンガポールから直行で登場のCamlspottterさんによる、関数型言語OCamlの紹介です。Camlspotterさんによると、関数型言語は怖くない、オブジェクト指向言語の方が要素が多くて難しいそうです。いくつかの事例をあげながら、OCamlの強みや弱みなどが紹介されました。

OCamlは割り切った設計になっており、強力な型システムと実行効率の高さが特徴です。OCamlの型システムは、⁠間違ったチューブを差さないための仕組み(C++は無理矢理差す⁠⁠」だそうです。

一方で、アカデミック出身で、仕様策定者が別の興味に行ってしまったため、⁠仕様が枯れて干からびている」⁠自分をコンパイルする最低限のライブラリしかない」のが欠点。その欠点を克服するために、ユーザベースで作られている標準に代わるライブラリセットや、Pythonと双方向の呼び出しを行えるようにするPyCamlの紹介がありました。これで、⁠OCamlになくてうらやましい)Matplotlibも使えるようになるそうです。

ちなみに、関数型言語というとコワイ人が多いとのことですが、Camlspotterさんによると「コワイ人はかなり先の話をしている」⁠一般の人はそういう人のことは無視して、生産性の高い部分だけ重目していればよい」そうです。

8月28日には、OCaml Meeting 2010 in Nagoyaが行われます。

ふるかわとおるさん「Python 2.7」

BeProudのbuchoこと、ふるかわとおるさん@torufurukawaによる、Python 2.7の簡単な紹介です。このハッカソンの数日前にPython 2.7が公開されました。

Pythonには2系と3系がありますが、この2.7が2系の最後で、今後は3系に移行すると現時点では公式には発表されています。現在では2系では積極的に機能追加は行われておらず、今回の変更点も、3.1で取り入れられた便利な機能のバックポートが主です。発表の中で紹介されたのは、 orderddictと、dict/set向けのリテラル表記/リスト内包の拡張と、unittest2です。

{1,2,3} # -> set([1, 2, 3])と評価される
{i: for i in } # -> 辞書のリスト内包表記も

また、今まで機能が弱かったunittest2も拡張され、テストの表現力が高められました。たとえば、シーケンスに値が含まれるテストも、次のように書けるようになり、失敗時のメッセージも読みやすくなります。

self.assert_(1 in listobj) # 2.6まで
self.assertIn(1, listobj)  # 2.7

このセッションでは、初心者では判断のつきにくい「どのバージョンを使うべきか?」という問いに対し、⁠Python 3系に興味があるけど、いろいろな理由で試せない人向け」と答えていました。

画像

石本さん「PEP-3138-Python 3.0のオブジェクトの文字列表現」

さまざな翻訳を行ったり、python.jpのオーナーをしていたり、日本の Pythonプログラマでお世話にならなかった人はいないと思われる石本さんによる発表です。石本さんは、日本人で今のところ唯一のPEP(Pythonの機能拡張を行う場合の提案書)作者です。今回の発表は、このPEPの内容紹介です。

Python 2系までは、デバッグ用に文字列を表示しようとすると、ascii文字のみしか表示されず、日本語などはエスケープされていてそのままでは読めません。デバッグ時に困る場面もよくあります(経験あり⁠⁠。とくにstderrでは、エラーメッセージが読めないと困ります。かといって、考えずに出力すると、環境によってはユニコード変換のエラーが発生し、エラーの詳細が分からなくなって本末転倒です。Pythonではエンコード時のエラー処理を選択できます。 stderrでは、デフォルトで変換できなかった文字(と空白文字や印字不能文字)はエスケープして表示されるようになりましたString representation in Python 3000(PEP-3138)⁠。

基礎的な力が試されるようなプレゼンでした。

画像

Isoparametricさん「本当にあったコワイはなし。あなたの知らないCとC++の世界」

ネタ満載なプレゼンでした。C++の紹介をしていたと思ったら、今まであった恐ろしい開発現場がいくつも紹介されていました。下手に紹介するよりも、資料をご覧ください。想像を絶する世界です。個人的に一番衝撃だったのは「○○でフォルダを分ける」というものでした。

画像

磯蘭水さん「月間10億単位のリクエストを捌く PythonベースWebシステムの話」

古参のPythonプログラマーの蘭水さんの発表です。Pythonが活躍する、ウェブの広告配信システムの紹介です。ウェブの広告は、ウェブサイトの表示の時に埋め込まれます。例えば、広告のシステムが1秒かかると、ユーザの環境でページが表示されるのもそのまま1秒かかってしまいます。ウェブのレスポンスを左右する、速度命のシステムです。プレゼンの中ではアーキテクチャからログまで、長大なデータをすばやく扱うための様々なテクニックが紹介されました。

実際には 0.3秒で結果を返す必要があり、ネットワークの遅延を考慮すると、システムの応答時間は100mS以内とのことです。フレームワークやテンプレートエンジンを使わず、なるべく直書きして速度を稼いでいるとのことです。また、管理情報の更新は非同期にして、インデックスサーバの負荷の低い時にのみ情報を書き込むなど、さまざまな工夫をこらし、⁠びっくするほど少ない台数」を実現しているそうです。

また、ログはRDBMSなどを使うと遅くなってしまいますが、書き換えはしないというログの特性を活かし、書き換えができない代わりに高速アクセスのできる、CDBを利用しているとのことです。そのほか、ファイルのオフセット情報のリストを作っておき、bzip2で圧縮されたファイルを直接読みにいくということも行っているそうです。

最後に、Pythonがいかに開発の現場を明るく楽しくしているのか、という紹介で締めくくられました。

画像

新沼大樹さん「ウェブ魚拓」

新沼大樹さんによる、今まであまり語られることのなかった、ウェブ魚拓の話です。ウェブ魚拓とウェブの炎上は切っても切れない関係です。魚拓に込めた社会的意義について、雄弁で笑いもたっぷりに語られました。

ウェブ魚拓の誕生は北朝鮮が拉致を認めた時にさかのぼります。それまで「拉致なんかない」と掲げていた社民党のウェブページが急に消され、2ch上で騒動となりました。その時に「一度公開したからには責任が生じる」⁠ウェブの世界に緊張感を」というコンセプトの元に5日間で作られたのがウェブ魚拓です。社会的に問題になるようなとき、アクセスが殺到して魚拓が落ちることもあったそうですが、その時は「闇の勢力に魚拓が消された」という噂が駆け巡ったこともあるそうです(実際は再起動して復旧⁠⁠。

炎上について感じられるのは、火だねは炎上する側にあるということだそうです。通常なら叱られるようなケースでも、内輪の中でエスカレートして怒られないままで暴走したケースなどが、派手に燃え上がることが多いそうです。燃え上がると、騒ぎを収めるためにページの削除を依頼してくる人もいるそうですが、⁠炎上は口汚いが、叱ってくれるお母さんのようなもの」⁠こういうことをやっちゃいけないと感じてもらうことが大切」という哲学の元、ネット社会の自浄作用の支えとなるべく、サービスの維持につとめているそうです。

「ネットの闇」のように語られることもありますが、炎上するケースでは、現実社会でも問題になるようなケースが同じように問題になります。また、現在ではテレビなどでも匿名のメッセージが使われることも多く、ネットも現実世界も、同じ意識を持つことが大切です。そのような努力の甲斐あってか、現在では裁判の証拠としても使われることもあるそうです。

このレポートには書けないような様々な例も数多く紹介され、盛り上がりっぱなしのプレゼンでした。

画像

@moriyoshiさん「すべらない話」

@moriyoshiさんによる、Pythonハッカソン恒例のすべらない話です。今回も、高度すぎるPHPネタでした。

「PHPは遅い」という話を聞いて色々ベンチマークを取ってみたが、ほとんどのケースで Pythonに勝てず、PHPに最後の花をもたせるべく、PHPでXlibと通信するライブラリphp-Xlibを作り、GUIが行えるようにしたということです。

とにかくテンポが良く、次の日にあった参議院選挙とかけてスーツのコスプレで「最後のお願いに参りました」とぱっと登場するなど、円熟のPHPネタでした。

画像

サイン会も行われました!

今回は、⁠つまみぐい勉強法』⁠技術評論社刊)『エキスパートPythonプログラミング』⁠アスキーメディアワークス刊)のサイン会も行われました。

画像

次回について

次回の募集も、申し込み開始後すぐにいっぱいになってしまったのですが、かなり先のイベントということもあり、キャンセルも相当数でます。いっぱいになっていても、20人や30人やそこらのキャンセル待ちであれば入れる可能性は大です。

ただし、ハンズオンにしてもハッカソンにしても、自主性が多少なりとも要求されます。その点が乗り越えられれば、とても楽しい会だと思います。

おすすめ記事

記事・ニュース一覧