6月9-10日に開催された PyCon Taiwan 2012 に参加してきました。
初めて行った台湾ですが、羽田空港から飛行機で3時間半と近く、とても良いところですっかり気に入りました。そんな雰囲気が分かるレポートになっていると思います。記事は3人で執筆しています。
6月9-10日に開催された PyCon Taiwan 2012 に参加してきました。
初めて行った台湾ですが、羽田空港から飛行機で3時間半と近く、とても良いところですっかり気に入りました。そんな雰囲気が分かるレポートになっていると思います。記事は3人で執筆しています。
半月以上前のイベントですが、5月26日に DevOps Days Tokyo 2012 が開催されました。私はお手伝いも兼ねて参加していました。
冒頭のセッションで 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 = 開運」になった経緯が語られています。
それで「開運」かと言えば、そのまんまでしかないのですが、この「開運」に秘められた意味としては、開 = Open, 運 = fortune、それなら open your luck! つまりは better fortune! ですねと言うやり取りが、なかなかに当たらずとも遠からずのような、英語と日本語の違いがあるものの、うまい言葉になったもんだと感心した次第です。
複数の 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 を使っているソースを初めて見かけたので興味深かったです (^ ^;;
Python のテストツールに pytest があります。ここ最近、徐々にテストを書くのに慣れてきて、さらにテスト設計や知見を高めようという思いが強くなってきました。
pytest は、wikipedia:設定より規約 を設計原則とするツールです。Python は明示する文化なのでやや違和感を感じる人もいるかもしれません。さらに xUnit スタイルではない funcarg という関数の引数をフックしてリソースインジェクションを行う仕組みを提供するなど、私にとっては新たな概念を学ぶのにおもしろそうな題材に見えました。
先日 PyCon US 2012 に参加して、pytest の作者 Holger Krekel 氏と出会い、話すことができました。
最初に会ったのはカンファレンスが始まる前日のチュートリアルデーで、手持ち無沙汰な様子に見えたので、ランダムデータテストのやり方を相談してみると、pytest のパラメーターテストやフックの仕組みを教えてくれました。そこで顔を覚えてもらったせいか、その後のカンファレンスやスプリントを通して、サンプル実装したコードをレビューしてもらったり、アドバイスをしてもらったりして、最終的な成果物が以下のプラグインです。
カンファレンスも彼の発表を聴講しました。
日本へ帰国後、すぐに pytest の翻訳を始めました。
本当は2週間ほどで完了し、4月中旬には出来ていました。その後、メーリングリストで Holger 氏と翻訳ドキュメントの公開やメンテナンスについてやり取りをして、最終的には pytest 本体に翻訳ドキュメントを取り込んでもらいました *1 。とはいえ、やはり Sphinx の i18n 機能を使った方が良いかどうかを協議中だったりします。
以下で和訳されたドキュメントが公開されています。
今後のバージョンアップに伴うメンテナンスも継続的に行います。誤字/脱字、誤り翻訳などあれば、こちらまで ご連絡頂けると助かります。
*1:2ヶ月近くかかった理由は Holger 氏が5月末まで休暇中だったため
タイトルは釣りです。
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 仕様が変わったのかな?詳しく調べてはいません。
2010-12-31 に virtualenvwrapper のドキュメントを翻訳したときのバージョンは 2.6.1 でした。
現時点の最新バージョンは 3.2 です。その後も着々と機能拡張、バージョンアップが行われているようです。
メジャー/マイナーバージョンアップにおける履歴から大きな機能追加のみを抜き出してみます。もちろん、それぞれのバージョンでバグ修正や細かな拡張はたくさん行われています。
その他の主なドキュメントの更新内容を紹介します。
最もドキュメントの追加が多かったのがインストールに関する内容でした。
MSYS 環境や拡張プラグインによる PowerShell 環境のサポート、さらに mkproject コマンドによるプロジェクト管理機能が追加され、全般的な設定 にそういった説明も加わっています。
開発者の Doug Hellmann は、積極的にユーザーからの要求に対応したり、バグ修正を行っています。またドキュメントもきちんと更新しています。
更新した和訳ドキュメントの Pull リクエスト を送ったところ、数時間でマージして、Web サイトも更新してくれました。virtualenvwrapper のような、多くのユーザーに使われるパッケージを保守するのは大変かもしれませんが、開発が活発で楽しんでいるのかもしれませんね。
枝廣淳子さんの著書を読んでみたくなって購入しました。
プロの翻訳家を目指しているわけではありませんが、エダヒロ式学習法に興味がありました。もちろん「翻訳とは何か」という氏の哲学もとても興味深い内容です。それを読むと、私は恐れ多くてプロの翻訳家を目指そうとは思えませんでした。
それよりもどういった視点や考え方でその独特の学習スタイルを築いたのかに私は興味をもちました。そのため、ここでは翻訳に特化した話題よりも、勉強方法を考えるきっかけ作りを主に紹介します。
冒頭の序文から興味をそそります。おもしろい公式です。
「好き」x「得意」x「大事」=「天職」
私はプログラミングが「好き」ですが、「得意」ではないし「大事」というのは抽象的過ぎてよく分かりません。しかし、こういった要素があれば、お仕事が楽しそうだという雰囲気は伝わってきます。本書を読み進めながら、これらの要素が何かを考えるきっかけになります。
プロの翻訳家とアマチュアの翻訳者の大きな違いの1つは、持久力です。
あぁ確かに!と思った一文です。私もちょくちょく技術ドキュメントを翻訳していますが、やりかけのまま途中で止めてしまったものや、途中で疲れて完了するのに想定以上の時間がかかったものがいくつもあります。
プロとは、高い品質で分量をこなせないといけないと説いています。
良いなと思える表現をストックしておいて、何度も読み直して慣れ親しんだり、実際に意識して使うと良いと説かれています。
最近、英会話で "absolutely", "exactly", "affordable (price)" を使う機会を狙ってたりします。頭の中でチャンスがあれば言ってやろうと思っていると、その時が訪れたときに良いタイミングで実際に声に出すことができます。慣れないと間が少しぎこちない感じですが (^ ^;;
目はスキャンするのが得意な感覚器で、耳はメリハリをつけた形で情報を取捨選択する感覚器だと説明しています。
本文の中では訳文の仕上げに「声を出して読む」ことで、しっくりこない表現やつながりの悪い表現を見つけるのに大きな効果があると紹介されています。これは訳文のみならず、日本語においても文章を書くこと全般に応用できることも追記されています。
なるほど。声に出して耳から聞くというのは、これまでの私のスタイルにはなかったものなので取り入れていこうと思いました。
いっときの情熱でやれるのは短期間だけであり、中長期で取り組むには「ビジョンと自分マネジメント」という「しくみ」が必要だと主張しています。システム化することが大事であり、続かなかったと自分の意志の弱さを責めても仕方ないというのは、私にとって身にしみる言葉でした。
「バックキャスティング」という言葉を初めて知りました。環境の世界で使われる用語のようです。言葉の定義を氏のメルマガから引用します。
「それが達成できた時に、最終的にどういうところに行きたいのか?」
http://daily-ondanka.com/edahiro/2008/20080207_12.html
ビジョンを描くときに、現状の問題点を改善するのではなく、在るべき姿になったら自分はどうしたいのかを考えるやり方です。これはものごとを現状の延長線上にのみ考えないという視点を得るのにとても良さそうです。
時間をどうマネジメントするか、自分の集中力やパフォーマンス (翻訳の質) をどうやってあるレベル以上に保つかが大事なスキルとなってきます。プロとアマチュアの違いの1つは、「必要な集中力で継続して作業できるか」です。
このためのトレーニング方法として、あえて時間制限を設けて作業するトレーニングが良いそうです。「時間を計る」という行為そのものが見積もりの精度を高めたり、計画作りにも生きてくるようです。
すごく読みやすくてさっと読めてしまうものの、後から読み直して気付く内容がいくつもありました。もちろん翻訳のコツもたくさん紹介されていて参考になります。翻訳を通して英語の勉強をしようと考えている人にとっては一石二鳥な良著だとお奨めできます。
あなたも翻訳家になれる!―エダヒロ式 [英語→日本語]力の 磨き方