PyCon Taiwan 2012 イベントレポート Day 0

6月9-10日に開催された PyCon Taiwan 2012 に参加してきました。

初めて行った台湾ですが、羽田空港から飛行機で3時間半と近く、とても良いところですっかり気に入りました。そんな雰囲気が分かるレポートになっていると思います。記事は3人で執筆しています。

DevOps は開運!?

半月以上前のイベントですが、5月26日に DevOps Days Tokyo 2012 が開催されました。私はお手伝いも兼ねて参加していました。

John Wills 氏のスライド

冒頭のセッションで Enstratus 社の John Wills 氏がスライドに「開運」という文字を表示していました。

昨日、Jay(本イベントの司会で中心人物の堀田直孝氏)と、DevOpsの定義ってなんだろうね、という話をしていて、それは「開運」じゃないかということになり、じゃあ開運のスライドからはじめようと。

DevOpsを実践する企業に共通すること。DevOps Day Tokyo 2012 - Publickey

Jay が DevOps の定義を話しているうちに「開運」になったんだと聞いたのですが、私はその詳しい経緯がよく分かっていませんでした。

このときに来日していた John Willis 氏と Damon Edwards 氏が DevOps について語る DevOps Cafe Podcast & Videos - Show Notes という Podcast を提供しています。
その後、先日の DevOps Tokyo 2012 で収録した Podcast がアップロードされていました。

この対談には Jay も出てきますが、24分頃から「DevOps = 開運」になった経緯が語られています。

DevOps って日本語で何だろうね?

  • Develop x Operation = 開発 x 運用
  • Dev x Ops = 開 x 運

それで「開運」かと言えば、そのまんまでしかないのですが、この「開運」に秘められた意味としては、開 = Open, 運 = fortune、それなら open your luck! つまりは better fortune! ですねと言うやり取りが、なかなかに当たらずとも遠からずのような、英語と日本語の違いがあるものの、うまい言葉になったもんだと感心した次第です。

detox で tox テストを並列実行しよう

複数の Python バージョンでテストを実行するツールに tox があります。

tox ツールそのものがとても便利なのですが、この tox テストを並列実行してくれるツールがリリースされました。

既に tox を使っている環境であれば、detox をインストールするだけで良いです。

$ pip install detox

使い方は tox と全く同じで特別な設定は不要です。tox コマンドを実行する代わりに detox コマンドを実行します。試しに実行してみましょう。

(test)$ detox 
py26 create: /Users/t2y/work/repo/littlehttpserver/.tox/py26
GLOB sdist-make: /Users/t2y/work/repo/littlehttpserver/setup.py
py27 create: /Users/t2y/work/repo/littlehttpserver/.tox/py27
py32 create: /Users/t2y/work/repo/littlehttpserver/.tox/py32
py26 installdeps: :pypi:pytest, :pypi:pep8 
py27 installdeps: :pypi:pytest, :pypi:pep8
py32 installdeps: :pypi:pytest, :pypi:pep8
installdeps py26- py27/ py32-         

この例では、Python 2.6, 2.7, 3.2 の tox テストが並列実行され、依存パッケージのインストール中です。

最終的な実行結果です。

(test)$ detox 
GLOB sdist-make: /Users/t2y/work/repo/littlehttpserver/setup.py
py27 sdist-reinst: /Users/t2y/work/repo/littlehttpserver/.tox/dist/LittleHTTPServer-0.1.2.zip
py32 sdist-reinst: /Users/t2y/work/repo/littlehttpserver/.tox/dist/LittleHTTPServer-0.1.2.zip
py26 sdist-reinst: /Users/t2y/work/repo/littlehttpserver/.tox/dist/LittleHTTPServer-0.1.2.zip
py26 runtests: commands[0]    
py27 runtests: commands[0]               
py32 runtests: commands[0]               
_______________________________ summary ________________________________
  py26: commands succeeded
  py27: commands succeeded
  py32: commands succeeded
  congratulations :)

1つの tox 環境でテストが通ったときに素早く他の環境でも実行したい、ちょっとした修正を行ったときに他の環境でも一応テストしてみたい、といった用途にとても便利です。何よりも CPU パワーが有り余ってるマシンで並列処理を実行するのは気持ち良いです。

detox は、並列処理に eventlet を使っていて、detox のソース自体も百数十行というシンプルなものです。eventlet の GreePool から greenthread でプロセスを実行しているようです。私は eventlet を使っているソースを初めて見かけたので興味深かったです (^ ^;;

pytest のドキュメントを翻訳しました

Python のテストツールに pytest があります。ここ最近、徐々にテストを書くのに慣れてきて、さらにテスト設計や知見を高めようという思いが強くなってきました。

pytest は、wikipedia:設定より規約 を設計原則とするツールです。Python は明示する文化なのでやや違和感を感じる人もいるかもしれません。さらに xUnit スタイルではない funcarg という関数の引数をフックしてリソースインジェクションを行う仕組みを提供するなど、私にとっては新たな概念を学ぶのにおもしろそうな題材に見えました。

Holger Krekel 氏と出会い

先日 PyCon US 2012 に参加して、pytest の作者 Holger Krekel 氏と出会い、話すことができました。

最初に会ったのはカンファレンスが始まる前日のチュートリアルデーで、手持ち無沙汰な様子に見えたので、ランダムデータテストのやり方を相談してみると、pytest のパラメーターテストやフックの仕組みを教えてくれました。そこで顔を覚えてもらったせいか、その後のカンファレンスやスプリントを通して、サンプル実装したコードをレビューしてもらったり、アドバイスをしてもらったりして、最終的な成果物が以下のプラグインです。

カンファレンスも彼の発表を聴講しました。

pytest ドキュメント翻訳

日本へ帰国後、すぐに pytest の翻訳を始めました。

本当は2週間ほどで完了し、4月中旬には出来ていました。その後、メーリングリストで Holger 氏と翻訳ドキュメントの公開やメンテナンスについてやり取りをして、最終的には pytest 本体に翻訳ドキュメントを取り込んでもらいました *1 。とはいえ、やはり Sphinxi18n 機能を使った方が良いかどうかを協議中だったりします。

以下で和訳されたドキュメントが公開されています。

今後のバージョンアップに伴うメンテナンスも継続的に行います。誤字/脱字、誤り翻訳などあれば、こちらまで ご連絡頂けると助かります。

*1:2ヶ月近くかかった理由は Holger 氏が5月末まで休暇中だったため

pytest-pep8 を 0.7 から 0.8 にアップグレードしたらテストが失敗するようになった

タイトルは釣りです。

pytest で pep8 のテストを行う pytest-pep8 プラグインがあります。次のようなサンプルコードを用意します。

(test)$ vi sample.py 
x=3
class A(object): pass

def f(x):
    return x

このサンプルコードを pep8 でチェックすると、たくさんのエラーが出ます。

(test)$ pep8 -r sample.py 
sample.py:1:2: E225 missing whitespace around operator
sample.py:2:1: E302 expected 2 blank lines, found 0
sample.py:2:16: E701 multiple statements on one line (colon)
sample.py:4:1: E302 expected 2 blank lines, found 1
sample.py:6:1: W391 blank line at end of file

同じように pytest-pep8 0.7 で実行します。

(test)$ py.test --version
This is py.test version 2.2.4, imported from /Users/t2y/.virtualenvs/test/lib/python2.7/site-packages/pytest.pyc
setuptools registered plugins:
  pytest-pep8-0.7 at /Users/t2y/.virtualenvs/test/lib/python2.7/site-packages/pytest_pep8.pyc

(test)$ py.test --pep8 sample.py 
========================= test session starts ==========================
platform darwin -- Python 2.7.3 -- pytest-2.2.4
pep8 ignore opts: (performing all available checks)
collected 1 items 

sample.py F

=============================== FAILURES ===============================
______________________________ PEP8-check ______________________________
/Users/t2y/tmp/t/sample.py:1:2: E225 missing whitespace around operator
x=3
 ^
/Users/t2y/tmp/t/sample.py:2:1: E302 expected 2 blank lines, found 0
class A(object): pass
^
/Users/t2y/tmp/t/sample.py:2:16: E701 multiple statements on one line (colon)
class A(object): pass
               ^
/Users/t2y/tmp/t/sample.py:4:1: E302 expected 2 blank lines, found 1
def f(x):
^
/Users/t2y/tmp/t/sample.py:6:1: W391 blank line at end of file

^

======================= 1 failed in 0.01 seconds =======================

全く同じエラーが出ます。何もオプションを付けずに使っている分には問題ありません。

ここで pytest.ini に PEP8 のコーディングスタイルを無視するオプションを追加します。

(test)$ vi pytest.ini 
[pytest]
pep8ignore = E302 E701

E302 と E701 のエラーだけを無視して、E225 と W391 のエラーは出力されるはずなのですが、、、

(test)$ py.test --pep8 sample.py 
========================= test session starts ==========================
platform darwin -- Python 2.7.3 -- pytest-2.2.4
pep8 ignore opts: E302 E701
collected 1 items 

sample.py .

======================= 1 passed in 0.01 seconds =======================

pytest-pep8 0.7 では、テストが成功してしまいます。これは pep8ignore に設定した無視したいエラー総数が、PEP8 違反としたいエラー総数よりも多いときにテストが成功してしまう不具合がありました。

pytest-pep8 0.8 ではこの不具合が修正されています。

(test)$ pip install pytest-pep8==0.8
(test)$ py.test --pep8 sample.py 
========================= test session starts ==========================
platform darwin -- Python 2.7.3 -- pytest-2.2.4
pep8 ignore opts: E302 E701
collected 1 items 

sample.py F

=============================== FAILURES ===============================
______________________________ PEP8-check ______________________________
/Users/t2y/tmp/t/sample.py:1:2: E225 missing whitespace around operator
x=3
 ^
/Users/t2y/tmp/t/sample.py:6:1: W391 blank line at end of file

^

======================= 1 failed in 0.01 seconds =======================

今度は正しく E225 と W391 のエラーが検出されましたね。

おそらく pep8ignore オプションを設定していると、1つ2つのエラーを見逃してしまっている可能性があります。あるとき pytest-pep8 をアップグレードしたら、ソースいじってないのにエラーが出るようになったと不思議に思うことがあるかもしれません。

参考までに修正された内容です。

もしかしたら、あるときに pep8 の API 仕様が変わったのかな?詳しく調べてはいません。

virtualenvwrapper のドキュメント (和訳) を更新しました

2010-12-31 に virtualenvwrapper のドキュメントを翻訳したときのバージョンは 2.6.1 でした。

現時点の最新バージョンは 3.2 です。その後も着々と機能拡張、バージョンアップが行われているようです。

ドキュメント (和訳) の更新内容

その他の主なドキュメントの更新内容を紹介します。

インストール

最もドキュメントの追加が多かったのがインストールに関する内容でした。

MSYS 環境や拡張プラグインによる PowerShell 環境のサポート、さらに mkproject コマンドによるプロジェクト管理機能が追加され、全般的な設定 にそういった説明も加わっています。

まとめ

開発者の Doug Hellmann は、積極的にユーザーからの要求に対応したり、バグ修正を行っています。またドキュメントもきちんと更新しています。

更新した和訳ドキュメントの Pull リクエスト を送ったところ、数時間でマージして、Web サイトも更新してくれました。virtualenvwrapper のような、多くのユーザーに使われるパッケージを保守するのは大変かもしれませんが、開発が活発で楽しんでいるのかもしれませんね。

あなたも翻訳家になれる! エダヒロ式 [英語→日本語]力の磨き方

枝廣淳子さんの著書を読んでみたくなって購入しました。

プロの翻訳家を目指しているわけではありませんが、エダヒロ式学習法に興味がありました。もちろん「翻訳とは何か」という氏の哲学もとても興味深い内容です。それを読むと、私は恐れ多くてプロの翻訳家を目指そうとは思えませんでした。

それよりもどういった視点や考え方でその独特の学習スタイルを築いたのかに私は興味をもちました。そのため、ここでは翻訳に特化した話題よりも、勉強方法を考えるきっかけ作りを主に紹介します。

エダヒロの天職公式

冒頭の序文から興味をそそります。おもしろい公式です。

「好き」x「得意」x「大事」=「天職」

私はプログラミングが「好き」ですが、「得意」ではないし「大事」というのは抽象的過ぎてよく分かりません。しかし、こういった要素があれば、お仕事が楽しそうだという雰囲気は伝わってきます。本書を読み進めながら、これらの要素が何かを考えるきっかけになります。

プロとアマチュアの決定的な違いとは

プロの翻訳家とアマチュアの翻訳者の大きな違いの1つは、持久力です。

あぁ確かに!と思った一文です。私もちょくちょく技術ドキュメントを翻訳していますが、やりかけのまま途中で止めてしまったものや、途中で疲れて完了するのに想定以上の時間がかかったものがいくつもあります。

プロとは、高い品質で分量をこなせないといけないと説いています。

その表現を「知っている」と「使える」は違います

良いなと思える表現をストックしておいて、何度も読み直して慣れ親しんだり、実際に意識して使うと良いと説かれています。

最近、英会話で "absolutely", "exactly", "affordable (price)" を使う機会を狙ってたりします。頭の中でチャンスがあれば言ってやろうと思っていると、その時が訪れたときに良いタイミングで実際に声に出すことができます。慣れないと間が少しぎこちない感じですが (^ ^;;

訳文の欠点を見つける - 声を出してチェック

目はスキャンするのが得意な感覚器で、耳はメリハリをつけた形で情報を取捨選択する感覚器だと説明しています。

本文の中では訳文の仕上げに「声を出して読む」ことで、しっくりこない表現やつながりの悪い表現を見つけるのに大きな効果があると紹介されています。これは訳文のみならず、日本語においても文章を書くこと全般に応用できることも追記されています。

なるほど。声に出して耳から聞くというのは、これまでの私のスタイルにはなかったものなので取り入れていこうと思いました。

2つの必須事項 - ビジョンと自分マネジメント

いっときの情熱でやれるのは短期間だけであり、中長期で取り組むには「ビジョンと自分マネジメント」という「しくみ」が必要だと主張しています。システム化することが大事であり、続かなかったと自分の意志の弱さを責めても仕方ないというのは、私にとって身にしみる言葉でした。

バックキャスティングでビジョンを描く

「バックキャスティング」という言葉を初めて知りました。環境の世界で使われる用語のようです。言葉の定義を氏のメルマガから引用します。

「それが達成できた時に、最終的にどういうところに行きたいのか?」

http://daily-ondanka.com/edahiro/2008/20080207_12.html

ビジョンを描くときに、現状の問題点を改善するのではなく、在るべき姿になったら自分はどうしたいのかを考えるやり方です。これはものごとを現状の延長線上にのみ考えないという視点を得るのにとても良さそうです。

自分の力を120パーセント引き出す時間の使い方

時間をどうマネジメントするか、自分の集中力やパフォーマンス (翻訳の質) をどうやってあるレベル以上に保つかが大事なスキルとなってきます。プロとアマチュアの違いの1つは、「必要な集中力で継続して作業できるか」です。

このためのトレーニング方法として、あえて時間制限を設けて作業するトレーニングが良いそうです。「時間を計る」という行為そのものが見積もりの精度を高めたり、計画作りにも生きてくるようです。

まとめ

すごく読みやすくてさっと読めてしまうものの、後から読み直して気付く内容がいくつもありました。もちろん翻訳のコツもたくさん紹介されていて参考になります。翻訳を通して英語の勉強をしようと考えている人にとっては一石二鳥な良著だとお奨めできます。