2011年8月28日日曜日

チーム紹介: Brett Cannon

原文はこちら: Meet the Team: Brett Cannon

この記事は、Python コア開発チームを手短かに紹介する "チーム紹介" シリーズの1つです。

名前:Brett Cannon
所在地:アメリカ、カリフォルニア州のサンフランシスコ
ホームページ:https://profiles.google.com/bcannon
ブログ:http://sayspy.blogspot.com

Python はどのぐらい使っていますか?

2000年の秋から使っています。

コアコミッタになってどのぐらいですか?

2003年4月になりました (PyCon 2003 のすぐ後です) 。

コア開発者として始めたときはどうでしたか?最初のコミットを覚えていますか?

パッチをコミットするときにバグを混入させてしまう人たちは必ずいるので、私はコア開発者になれました (その仕掛けは 2003/2004 年の Python 人気が急上昇して目立つようになる前にコミット権をもっていた人たちが行っていた管理方法がうまくいかなくなったからです) 。2002年8月から始めて、私は Python-Dev Summaries を活発に行っていました (これは約2.5年間も続きました) 。Python-Dev Summaries を書いていたとき、私は修正が必要な小さな課題を定期的に、且つ公正に拾いあげていました。

私の最初のコミット (チェンジセット 28686)は、time.strptime() の文字列のエスケープに関する修正でした (そのコミットが Python への私の最初の貢献になったのはたまたまです) 。

いま開発しているのは Python のどの分野ですか?

普段、私はインポートの仕組みと Python の言語が全ての VM 上でうまく動作するように作業しています。

Python のコア開発を行っていないときは Python でどんなことをしますか?

私は、Python でサーバー側の機能を実装して、自分の博士論文の管理に使っています。その他には、個人的なプロジェクトにできるだけ Python を使っています。将来の Google での仕事は、主に Python を使うつもりです。

プログラミングをしていないときは何をしていますか?

私は TV で放送している映画のちょっとしたマニアです (2000年の夏の猛暑のときにテレビを失ったことは、偶然起こった最も良いことでした。それは妻と結婚したことであり、私が目的をもって行動した最良の出来事でした。TV を見ないときは、たくさん読書をします。主に雑誌やウェブサイトですが、常に何冊かの本を読みかけ状態です。

2011年8月13日土曜日

チーム紹介: Michael Foord

原文はこちら: Meet the Team: Michael Foord

この記事は、Python コア開発チームを手短かに紹介する "チーム紹介" シリーズの1つです。

名前:Michael Foord
所在地:イギリスのノーサンプトン
ホームページ:http://www.voidspace.org.uk/

Python はどのぐらい使っていますか?

私は2002年に趣味として Python を使い始めました。その後、2006年から仕事においても Python を使うようになりました。私が Python でプログラミングを始めたきっかけは、電子メールのゲームでそのゲーム情報を集計するプログラムを書いたチームと一緒に開発したことでした。私たちの誰もしばらくそのプログラムを完成できずにいて、たまたま SmallTalk を使うことが決定していました。あるとき、誰かが Python を試してみようと提案し、私はすぐに Python と恋に落ちてしまいました。

コアコミッタになってどのぐらいですか?

私は2009年の PyCon でコアコミッターになりました。もともとは IronPython との関連があったからです。

コア開発者として始めたときはどうでしたか?最初のコミットを覚えていますか?

PyCon 2009 のスプリントの期間中、Google が提供した unittest に対する改善を取り込むために Gregory Smith やその他のコア開発者たちと一緒に開発をしました。

いま開発しているのは Python のどの分野ですか?

PyCon スプリントでの unittest の初作業後も、メンテナーが不在だった unittest の課題の修正や改善を行っています。私は unittest のメンテナーだけでなく、他の標準ライブラリにも貢献しています。

その他に様々なマイナーな方法で Python をサポートすることに関与しています。例えば、Planet Python をメンテナンスしたり、PSF メンバーになったり、python.org のウェブマスターを手伝ったりしています。

Python のコア開発を行っていないときは Python でどんなことをしますか?

私の日々の仕事は、Canonical 社のウェブ開発です。私は、Canonical 社のウェブサイトに関するウェブサービスインフラの作業をしていて、Ubuntu と結びついたサービスにも携わっています。それは楽しい仕事ですし、チームも素晴らしいです。

時間の空いたときに、 unittest2 (その他のプラットフォーム向けに unittest の改善のバックポート)、 mock (モックオブジェクトを提供してテスト中にモンキーパッチをサポートするテストライブラリ)、その他の多くの機能に関するプロジェクトに取り組みます。

私はもっとコーディングしたいのですが、IronPython in Action という書籍を書くために2年間の大半をかけて専念したことにより、すぐに大規模なプロジェクトには関わらないように考えています。

プログラミングをしていないときは何をしていますか?

私はノーサンプトン (イギリス) の教会に関わっていて、かなり多くの時間を割いて、自分たちが行うチャリティの管理を手伝っています。これは、なぜ Canonical 社で働くのが良いかという理由の1つです。私は自宅で仕事ができて、この街に根をおろし、どこへも行きたくありません (気候があわないところは住めない) 。言うまでもなく、ノーサンプトンでは Python プログラミングがあまり活発ではありません。私の最初のプログラミングの仕事は、ロンドンの素晴らしいチームと一緒に行ったもので、自宅を出てから職場まで通勤に片道2時間かかりました。4年間の通勤をやり繰りしました。その仕事は本当に楽しいものでしたが、通勤から逃れられるなら私は戻りたくありません。

さらに私は XBox 向けのゲームをします。不運にも好きなゲームを見つけてしまったときは、何週間もそのゲームに引き込まれるので私は注意するようにしています。この理由のために World of Warcraft や EVE Online といったゲームはしないようにしています。また、毎月のノーサンプトンのギークミーティングの運営も行っています。そこには Python ユーザーグループの Python プログラマーはあまりいませんが、あらゆる類いの優れたギークたちが集まります。普通は、ただパブに集まって気軽に話したり、自分たちの最新のガジェットを披露します。

2011年7月12日火曜日

Windows 向け Python ランチャー

原文はこちら: A Python Launcher For Windows

Mark Hammond (pywin32 の作者であり、長い間 Windows 環境の Python サポーター) は、 PEP 397 を提案しました。その PEP は Windows 環境の新たな Python ランチャーについて記述したものです。Vinay Sanjip (標準ライブラリ logging モジュールの作者) は、つい先日そのランチャーを実装して、いま https://bitbucket.org/vinay.sajip/pylauncher/downloads からダウンロードできます。

このランチャーは、Python 2 と 3 が同時に利用可能であり、Windows 環境の Python スクリプト (.py.pyw ファイル) に対して、実行する Python のバージョンを指定します。

Windows ユーザーは、残っている問題を解決する Python 開発者を支援するために、このランチャーをダウンロードしてテストすることを検討してください。このランチャーは、独立したアプリケーションとしてパッケージングされていて、現在、利用できる Python のバージョンをサポートします。目的としては、ランチャーが完成したら、Python 3.3 の一部として提供する予定です。(依然として、以前のバージョンのユーザー向けに独立したアプリケーションとして利用できるようにする予定ではあります)

このランチャーは2つのバージョンが利用できます。 Program Files ディレクトリにインストールする launcher.msi と、Windows の System32 ディレクトリにインストールする launchsys.msi です (64 ビット Windows 向けの 64 ビットバージョンも用意されています) 。

ランチャーについての詳細


ランチャーの動作についての完全な仕様は PEP 397 に記述されています。次に基本的な原則をまとめます。

  • ランチャーは、 py.exe (コンソールバージョン) と pyw.exe (GUI バージョン) の2つの実行可能ファイルを提供する。
  • ランチャーは、 .py (コンソール) と .pyw (GUI) の拡張子をもつファイルのハンドラとして登録される。
  • スクリプトを実行すると、ランチャーは Unix スタイルの #! (シェバング) を探す。そして python (システムデフォルトの Python)、 python2 (デフォルトの Python 2 リリース)、 python3 (デフォルトの Python 3 リリース) の実行可能ファイルを認識する。このバージョン指定の詳細レベルは、ユーザまたはマシン毎に簡単に変更できる。
  • 独立して使う場合、 py.exe コマンドランチャーは Python 対話型インタープリターを起動する。次の用途にコマンドラインスイッチがサポートされる。 py -2 が Python 2 を、 py -3 が Python 3 を、 py がデフォルトバージョンを起動する。

シンプルな使い方


ランチャーをインストールすると、 .py.pyw スクリプトファイルが関連付けされます。他に自分で設定しない限り、スクリプトはシステム上のデフォルトの Python を使って実行されます。そのため、特に変更は見られません。もしコンソールをよく使うなら、1つだけ設定を行った方が良いかもしれません。それは PATHEXT 環境変数 に .py を追加することで、スクリプトが別のコンソールで実行されないようにします。

Python 2 を使う必要があるスクリプトを指定するには、単に次の1行を
#!/usr/bin/env python2
そのスクリプトの最初の行に追加してください。(これは Unix 互換な書き方ですが、Unix 互換を必要としない場合は #!python2 でも構いません) 。

一方、Python 3 を使う必要があるスクリプトを指定したいなら、次の1行を最初の行に追加してください。
#!/usr/bin/env python3
また次のいずれかのコマンドを使って、Python インタープリターを起動できます。
# Python のデフォルトバージョン
py
# Python 2
py -2
# Python 3
py -3
実行するには、 py.exe の実行可能ファイルのパスが通っている必要があります。これはインストーラーの launchsys バージョンでは自動的に追加されますが、 launcher.msi のバージョンでは PATH に対して手動でインストールディレクトリ (C:\Program Files\Python Launcher) を追加する必要があります。

参考文献


次に紹介する python-dev メーリングリストのスレッドで重要な議論が行われています。

CPython 3.2.1 リリース

原文はこちら: CPython 3.2.1 Released

python-dev チームを代表して、リリースマネージャーを務める Georg BrandlCPython 3.2.1 の最終リリースを発表しました。Windows インストーラーと tar ボールが7月10日に提供されています。ぜひ、このリリースへアップグレードを検討してください。

What's New ドキュメントに 3.2 の新機能一覧が、ソースファイルに含まれる Misc/NEWS ファイルにバグ修正の一覧があります。

このリリースに関する問題、または何か他に問題を見つけたら http://bugs.python.org/ へ報告してください。

2011年7月7日木曜日

3.2.1 RC2 リリース

原文はこちら: 3.2.1 Release Candidate 2 Released

6月リリース に続いて、3.2.1 系の2番目のリリース候補 (RC2) が 提供されています 。5月15日にリリースされた最初のリリース候補から、40以上の問題を修正しました。3.2.1 の正式リリース前にもう1度確認する意味も含めて、みなさんのプロジェクトでこの RC2 をテストするのをお奨めします。

修正箇所

I/O
#1195 は修正するのに2、3年かかりましたが、 fgets を呼び出す前に clearerr を行うシンプルな修正により、 input() 内部で CTRL-D による sys.stdin.read() の中断に関する問題を解決しました。 io システムは、 #12175 において、 read()None を返すときに、その返り値の None と共に readall メソッドでクリーンアップするようにしました。そして、ファイルが開けないときは ValueError を発生させます。

#11272 は、RC2 で行われた修正内容ではありませんが、3.2.1 の重要な修正内容で、Windows 環境での文字列の後ろに続く \r に関する input() の修正です。この問題は何度も報告され、多くの人に影響を与えていました (disutils の upload コマンドなど) 。3.2.1 がうまく解決してくれることを望みます。
Windows
3.2.0 は、Windows 向けに os.symlink という新機能を追加しました。この機能は #12084 の問題からきていて、 os.stat は、Windows のシンボリックリンクを間違って評価するので、内部の様々な stat 関数の仕組みが修正されました。

あるユーザーが os.path.isdir が遅いことに気付きました。この原因は、前述した os.stat の修正によるもので、特にシンボリックリンクを評価するときに通常ファイルより2倍遅くなっていました。 os.path.isdir は、パフォーマンスのボトルネックにはならないとはいえ、インタープリター上で何度も呼び出されます。 GetFileAttributes を使う #11583 の修正により、ほんの少しだけ高速化されます。
subprocess
誤った引数で Popen オブジェクトを作成すると AttributeError が発生していましたが、その問題は #12085 で報告され、その報告者が修正しました。3.2.0 での変更に伴い、環境変数が空のとき、特に env 引数を Popen は正しく扱っていませんでした。 #12383 でその問題が報告され、すぐに修正されました。
その他
3.2.1 RC2 の全ての変更内容を知りたい方は、 チェンジログ をチェックアウトして いますぐダウンロード してください!

いつものように、どんな問題でも http://bugs.python.org へ見つけた問題を報告してください。私たちは、みんなの協力により品質の高い Python をリリースできることに感謝しています。

2011年6月15日水曜日

6月リリース - 2.6.7, 2.7.2, 3.1.4

原文はこちら: June Releases - 2.6.7, 2.7.2, 3.1.4

6月は、全てのアクティブなブランチでアップデートがリリースされるという Python にとって関心の集まる月となります。

2.6.7


Python 2.6.7 はソースリリースのみですが、3つのセキュリティの脆弱性への対策が行われました。現在、2.6 系はセキュリティモードであり、これらのリリースは、基本的には必要に応じて2013年10月まで、ソースのみ提供されます。もしバイナリインストーラーが必要なら、2.7 か 3.2 へアップグレードすることを検討してください。

2.6.7 は、以前このブログで紹介した urllib の脆弱性 の対策を含んだ最初のリリースです。さらに smtpd の DoS (課題 #9129 ) と SimpleHTTPServer.list_directory の XSS (課題 #11442 )の脆弱性も修正されています。

2.7.2


2.x 系の最後のマイナーバージョンである 2.7 は、2010年11月の 2.7.1 から 150 個以上のバグ修正が行われています。 2.7.2 のソースとバイナリインストーラーは、6月12日現在で利用できる状態にあり、2.6.7 の節で説明したセキュリティの脆弱性の修正も含まれています。

他にもたくさんのクラッシュする不具合が修正されました。例えば、別スレッドがメモリに関する変更を行ったときに Python が管理下にないメモリを不正利用してしまう不具合や、クラスから __abstractmethods__ を削除するとき、メモリマップファイルへ更新前のファイル長でアクセスしてしまうことなど、その他にもいくつか修正されました。

getpass のある修正が、CTRL-C と CTRL-Z の扱いに関してリグレッションを引き起こしていた問題が修正されました。 multiprocessing は、実行中に固まったような Windows サービスの扱いと multiprocessing.Pool ワーカーの終了時の競合状態への修正を含めた、たくさんの修正が行われています。 mmap は、 32 ビットビルドでも 4GB 以上のファイルサイズとオフセットを扱えるように修正されました。また、書き込みできないマップファイルへ書き込もうとしたときに、セグメンテーションフォールトではなく TypeError を発生させるようになりました。

全ての変更内容については 2.7.2 NEWS ファイル をご覧ください。

3.1.4


3.1.4 は 3.1.x 系の最後のバグ修正リリースです。3.2 へ移行するにつれて 3.1 はセキュリティモードに入ります。3.1.4 は2010年11月の 3.1.3 リリースから 100 個以上のバグ修正を含みます。2.7.2 と同様に、バイナリインストーラーが6月12日現在で利用できます。3.1.4 は、2.6.7 で説明したセキュリティ脆弱性の修正を含む最初の 3.x 系のリリースです。

3.1.4 は、オブジェクトを調べる __dir__ に関するいくつかの問題や、 os.statos.utime の Windows 環境の実装における2038年以降の日付の問題、たくさんの 64 ビットのクリーンアップの問題を修正しました。 io ライブラリは、データが読み込めなくて、他の場所で適切な例外が発生したときに None を返す変更がたくさん見られます。64 ビット Windows 環境での ctypes のコールバック引数が修正されて、クラッシュしないように改善されました。

全ての変更内容については 3.1.4 NEWS ファイル をご覧ください。

3.2.1


3.2.1 は、現在、リリース候補 (RC) の段階です。RC1 は既に完了し、すぐに RC2 がリリースされるでしょう。私たちは、ユーザが発見したどのような不具合にも対応できるように、3.2 RC を実際に試してくれる方へとても感謝しています。もしバグを発見したら bugs.python.org へ登録するようにしてください。

2011年5月24日火曜日

Python コアメンターシッププログラム

原文はこちら: The Python Core Mentorship Program

Jesse Noller は、最近 Python コアメンターシップ プログラムの設立を 発表しました 。このプログラムの背景にある想いは、学生や他プロジェクトの開発者を含めた幅広いプログラマに対して、メンター (指導者) として協力してくれる経験豊富な貢献者とやり取りして、Python コア開発を楽しんでもらえるように手を差し伸べることです。

貢献者の募集


メンターたちは経験のレベルに関わらず、貢献者たちとけんか腰で接さず快適な雰囲気で必要な情報を教えたり、質問に答えたりするのに協力します。貢献者は、関連メーリングリストの議論、バグトラッカー、Mercurial、コードレビュー、その他全てを含むプロジェクトに貢献するプロセス全体を通して助言を受けます。

早期の成功


このプログラムは既に成功を収め、その参加者は積極的にたくさんのパッチをコミットしています。さらに、メーリングリストで多方面から建設的な議論が行われ、多くの問題に対する正しい方向付けとなる道しるべになっています。

行動規範


このプログラムは、 ウェブサイト で行動規範を紹介しています。この行動規範は、多くの新たな貢献者が、メーリングリストや経験豊富な開発者とやり取りするときに、普通に抱くような不安や懸念を和らげることを目的としています。Jesse やその他のメンターたちは、このプログラムが Python コア開発の利益になるだけでなく、長期的には他のプロジェクトのモデルの1つにもなり得ることを期待しています。さらに Python の貢献者全体の多様性を高めるのにもつながることを望んでいます。

参加表明


このプログラムは メーリングリスト を通して行われ、分かりやすく簡潔な専用の ウェブサイト もあります。もしも、あなたが質問することからコア開発を始めてみたいと考えている。または、あなたが (Python コア開発も) 経験のある開発者であっても、他のメーリングリストへ投稿しようか気がかりな質問をもっているのなら、それはまたとない絶好の機会です。まずは質問することから始めてみましょう!

2011年5月20日金曜日

ポルトガル語、ドイツ語、韓国語、中国語 (繁体字) の翻訳

原文はこちら: Portuguese, German, Korean, and Traditional Chinese Translations

Python Insider の 翻訳プロジェクト は今も拡大を続けています! ポルトガル語, ドイツ語, 韓国語, 中国語 (繁体字) の翻訳ブログを立ち上げました。各言語のブログの翻訳者は、既に過去の記事の翻訳を進めています。他の翻訳ブログと同様に、これらの並列した翻訳ブログは、オリジナルの Python Insider の記事から少し遅れるかもしれません。

2011年5月14日土曜日

Python 3.3 で導入されるデバッグに役立つ faulthandler モジュール

原文はこちら: New faulthandler module in Python 3.3 helps debugging

プログラムが強制終了したり、固まったりしたことをユーザが報告する際にできることは、その状況の再現手順の概要とより詳細な情報を収集しようとすることだけです。信頼できるユーザーからの再現手順であっても、オペレーティングシステムやコンパイラといった環境の違いから、開発者として再現できないこともよくあります。運が良ければ、ユーザーがデバッグツールをインストールしてくれますが、誰かが同じ環境で詳細な情報を収集してくれるまで、ほとんどの時間を待っていなければなりません。

致命的なエラー


Python 3.3 で導入される新たなモジュール faulthandler は、この問題に役立ちます。 faulthandler は、セグメンテーションフォールト、ゼロ除算、処理の中断、バスエラーといった致命的なエラーのトレースバックをダンプする機能を提供します。Python の実行ファイルに対して -X faulthandler オプションを指定するか、もしくは環境変数 PYTHONFAULTHANDLER=1 を設定してから、 faulthandler.enable() を使ってアプリケーション内部で有効化します。出力結果は次のようになります。
Fatal Python error: Segmentation fault

Current thread 0x00007f7babc6b700:
  File "Lib/test/crashers/gc_inspection.py", line 29 in g
  File "Lib/test/crashers/gc_inspection.py", line 32 in <module>
Segmentation fault

タイムアウト


faulthandler は、 faulthandler.dump_tracebacks_later(timeout) を使って、タイムアウトした後にトレースバックをダンプすることもできます。そのタイマーを再起動するために再び呼び出すか、そのタイマーを停止するために faulthandler.cancel_dump_tracebacks_later() を呼び出します。出力結果は次のようになります。
Timeout (0:01:00)!
Current thread 0x00007f987d459700:
  File "Lib/test/crashers/infinite_loop_re.py", line 20 in <module>
timeout 秒毎にトレースバックをダンプするには repeat=True オプションを使ってください。または、そのプログラムが不安定な状態のときに、例えばファイルをフラッシュせずに、すぐに終了するには exit=True を使ってください。

ユーザシグナル


プログラムを実行しているホストへアクセスできるなら、 signal を受け取ったときに、トレースバックをダンプするシグナルハンドラをインストールするために faulthandler.register(signal) を使ってください。UNIX 上では、例えば、 SIGUSR1 シグナルを使えます。 kill -USR1 <pid> は、カレントのトレースバックをダンプします。この機能は Windows 上では使えません。出力結果は次のようになります。
Current thread 0x00007fdc3da74700:
  File "Lib/test/crashers/infinite_loop_re.py", line 19 in <module>
もう1つの方法は、プログラム内で明示的に faulthandler.dump_traceback() を呼び出します。

セキュリティの問題と出力ファイル


faulthandler は、セキュリティの理由からデフォルトで無効化されています。その主な理由は sys.stderr のファイルディスクリプタに保存して、そこへトレースバックを書き込むからです。もし sys.stderr がクローズされて、ファイルディスクリプタが再利用される場合、そのファイルディスクリプタはソケット、パイプ、重要なファイル、またはその他に使われる可能性があります。デフォルトでは、 faulthandler はトレースバックを sys.stderr へ書き込みますが、別のファイルも指定できます。詳細は faulthandler ドキュメント を参照してください。

古い Python バージョン向けのサードパーティモジュール


さらに faulthandler は、 PyPI 上で Python 2.5 から 3.2 を対象としたサードパーティーモジュールとしてメンテナンスされています。Python 3.3 のモジュールとサードパーティモジュール間での主な違いは dump_tracebacks_later() の実装です。Python 3.3 は、ロックのタイムアウトをもつスレッドを使うのに対して、サードパーティモジュールは SIGALRMalarm() を使います。

Python 3.3 の新機能であるロックのタイムアウトは、マイクロ秒単位の精度です。旧バージョンで使われる alarm() タイマーは、秒単位の精度です。さらに SIGALRM シグナルは、 EINTR エラーで失敗したカレントのシステムコールを中断させる可能性があります。

早期の成功


新たな faulthandler モジュールは、既に buildbot の競合状態を追跡するのに役立っています。このモジュールがあなたのプログラムにおいても役立つことを願っています。

2011年5月9日月曜日

ルーマニア語と中国語 (簡体字) の翻訳

原文はこちら: Romanian and Simplified Chinese Translations

今日、Python Insider チームは、新たに2つのブログの発表ができるのをとても嬉しく思います。 ルーマニア語中国語 (簡体字) の翻訳者が 翻訳プロジェクト に参加しました。そして、既に公開済みの記事の翻訳が始められています。その他の言語の翻訳と同様に、これらの並行した翻訳ブログは、オリジナルの Python Insider の記事から少し遅れるかもしれません。

2011年5月8日日曜日

Jython リポジトリを Mercurial へ移行

原文はこちら: Jython Migrates to Mercurial

Jython リポジトリが Subversion から Mercurial へようやく移行しました。不運にも Subversion のリポジトリから別のリビジョン管理システムへきれいに移行するのが難しく、この作業には長い時間がかかりました。

新たな Jython の公式リポジトリは、以下にホスティングされています。

http://hg.python.org/jython

このリポジトリは BitBucket ミラー があり、簡単にソースを分岐させられます。

また、(Mercurial ブックマーク に変換された) 開発用ブランチをもつ大きな読み取り専用リポジトリも http://hg.python.org/jython-fullhistory でホスティングされています。

Mercurial に移行したことで Jython への貢献、リポジトリの分岐、Jython 2.6 のビルドを手伝ったりするのがもっと簡単になります!

2011年5月7日土曜日

Python 3.3 から OS/2, Windows 2000, VMS のサポート終了へ

原文はこちら: Python 3.3 to Drop Support for OS/2, Windows 2000, and VMS

折に振れ、実際に使われている状況とあうようにサポート対象のオペレーティングシステムのリストから取り除く日がやってきます。そのことに加え、リリースの品質を保つには誰かが開発の作業を完了させる必要があるので、あるプラットフォーム向けに貢献してくれる開発者を確保することも重要な意義をもちます。その他の要因としては、オペレーティングシステムがリリースされてからの年数や今後の開発における障害、またサポート対象リストを保持するためにかかる作業コストもあります。

Victor Stinner は、OS/2 のサポートに関する 当初の質問 の1年後に、CPython の OS/2 と VMS のサポートをやめること を最近、提案しました。Victor の当初の質問は、一見したところ、Unicode の取り組みに関することで、具体的には PEP 383 のサロゲートエスケープハンドラ経由で環境変数をサポートする os.execvpe() の問題でした。OS/2 と VMS は、現在、開発チームへの参加表明もなく、リリースプロセスにおいてもテストされていません。

この記事を書く過程において、その辺の道ばたに捨ててあると思われる Windows 2000 のサポートをやめる 以前の議論 についても 私は考えさせられましたCOMSPEC から command.com に変更するシステム設定も逃げ場のない状況だと仮定されました。 いまのところ 、Windows 2000 と COMSPEC の2つも OS/2 と VMS に加えて追加されました。Windows 2000 は、2010年にそのサポートが終了し、オペレーティングシステムのレガシー API に対応する義務を減らすことで、開発が楽になるのでサポートをやめる予定です。

こういったシステムのサポートをやめるために、Victor と私は PEP 11 を更新することから始めました。

PEP 11


この PEP は、もうサポートされていないオペレーティングシステムの概要と、そのリストへそういったシステムを追加するためのプロセスを説明します。

あるオペレーティングシステムのサポートをやめるプロセスが開始できると決定した時点で正式にサポート終了として発表します。この発表は伝統的に開発中のバージョンから適用されるので、Python 3.3 から OS/2, Windows 2000, VMS のサポートをやめます。

最初の段階は、適正に引き継ぐというよりも白旗を揚げます。これは誰もそのコードをメンテナンスせず、そのリリースの品質を保証しないという合図です。対象のプラットフォームを利用するユーザに対して、そのプラットフォームはサポートしないと警告を出すように、コンパイルやインストールに変更が行われます。"What's New" のドキュメントに、新たにサポートが終了したプラットフォームのリストが注釈として追加されます。

サポートをやめるリリースサイクルとしては、その次のバージョンで適正にそのコードが削除されます。この場合は 3.4 でそのコードを削除します。おそらくコードの削除は大掛かりなものにならないはずですが、その作業に関わる開発者は、 #ifdef ブロック、 configure セクション、サポート対象外のコードを削除するかもしれません。

あなたができること


もし、あなたが OS/2 または VMS のユーザだとしたら、そういったプラットフォームをサポートするためにできることは少ししかありません。
メンテナになる
活発な開発者がいるということ以上のサポートはありません。Andrew MacIntyre は、これまでかなりの期間、OS/2 のメンテナをしています。そして、彼は OS/2 は Unicode サポートに関連した Victor の当初の質問に対してはっきりと回答しました。つまり、誰かを中心にして行う必要があります。VMS は、http://www.vmspython.org を通して外部からサポートする人が現れました。しかし、 課題 11918 で議論されたように、誰かが継続された VMS サポートをアップストリームで行う必要があります。

いずれかのプラットフォームのメンテナを引き継ぐことに興味があるなら、現在の開発プロセスの 開発者ガイド を参照してください。
ビルドスレーブに貢献する
活発な開発者がいると、そのプラットフォームが生き続ける可能性が高くなります。ビルドスレーブがあれば、そのプラットフォームは何とか存続するかもしれませんが、生き残りも品質も保証されません。

Python は、継続的インテグレーションのために Buildbot を使っています。そして、Linux, Mac, Windows, Open Indiana (Solaris) における様々なバージョン、アーキテクチャ、設定のビルドスレーブが 現在、提供されています 。OS/2 または VMS のビルドの速いマシンを寄付することで、そういったプラットフォームがメインストリームのプラットフォームと同等以上のメッセージを受け取れるようになります。

もし OS/2 や VMS が生き続けられるように時間、またはハードウェアを支援できるなら、その取り組みと協調するために python-dev メーリングリストにご連絡ください。

2011年5月6日金曜日

Python Insider 翻訳プロジェクト

原文はこちら: Python Insider Translation Project

このブログのコンテンツは全世界の Python コミュニティに役立つように、なるべく多くの人たちに読んでもらえるようにすることが優先事項の1つだと考えています。私たちの取り組みをもっと拡大するために、他の言語へ翻訳したブログを作成する翻訳チームを編成しました。いま 日本語スペイン語 に翻訳されたブログが進められています。

翻訳されるには、オリジナルの Python Insider の記事が公開されてから少し時間差があるでしょうが、なるべく最新の記事が翻訳されている状態に近付けようとしています。

協力者、募集


翻訳チームはまだメンバーが少なく、協力してくれる方を募集しています。既に翻訳が進められている言語、または他の言語への展開を手伝ってくれる方を必要としています。どちらでも良いので手伝ってくれるなら、Doug Hellmann (doug dot hellmann at gmail) までご連絡ください。

2011年5月5日木曜日

チーム紹介: Brian Curtin

原文はこちら: Meet the Team: Brian Curtin

この記事は、Python コア開発チームを手短かに紹介する "チーム紹介" シリーズの1つです。

名前:Brian Curtin
所在地:イリノイ州のシカゴ
ホームページ:http://blog.briancurtin.com/

Python はどのぐらい使っていますか?

日常的に使うようになって6年になります。Python を機会に応じて大学のクラスで使うよりも前に夏のインターンシップで使っていました。

コアコミッタになってどのぐらいですか?

3月24日でちょうど1年を迎えました。

コア開発者として始めたときはどうでしたか?最初のコミットを覚えていますか?

仕事で拡張モジュールを書いているときにドキュメントのバグに気付いたのが始まりでした。それから、簡単なパッチを投稿して Georg Brandl がすぐにコミットしてくれました。そのちょっとした成功と修正されたばかりのソースコードをチェックアウトしてから、自分が使っているモジュールについてもっと深く学びたくなりました。そして、zipfile をサポートするコンテキストマネージャを追加するためのパッチを書くようになりました。

初期のコミットは、ドキュメントをシンプルにするための修正でした。最初のコードのコミットは、winreg モジュールに機能追加して、テストカバレッジを上げるものでした。

いま開発しているのは Python のどの分野ですか?

CPython の開発に関わっている数人しかいない Windows ユーザーの1人として、Windows ユーザーが遭遇する問題はどんなものでも注意を向けるようにしています。そのため、私が使っていなかったモジュールも含め多くの標準ライブラリに触れる機会がありました。私はインタープリタそのものにはあまり関わっていませんが、今後は関わりたいと考えています。

Python のコア開発を行っていないときは Python でどんなことをしますか?

C++ 言語で書かれた商取引データベースの様々なテストツールをビルドします。簡単に正規表現テスト、パフォーマンステストが書ける データ API の拡張モジュールがあり、いつもビルドばかりしています。

プログラミングをしていないときは何をしていますか?

私は熱烈な野球ファンです。春の大学野球、夏の様々なリーグの審判を務めています。シカゴ・カブスの試合観戦にも行きます。

2011年5月4日水曜日

チーム紹介: Nick Coghlan

原文はこちら: Meet the Team: Nick Coghlan

この記事は、Python コア開発チームを手短かに紹介する "チーム紹介" シリーズの1つです。

名前:Nick Coghlan
所在地:オーストラリアのブリズベン
ホームページ:http://www.boredomandlaziness.org

Python はどのぐらい使っていますか?

1999年頃、ネットワーク講座の講師が Python 1.5.2 を使っていて初めて出会いました。2002年頃から仕事で自動テストに使い始めて、その後ずっと使い続けています。

コアコミッタになってどのぐらいですか?

2005年に PEP 343 (主にコンテキストメソッドを捨てる) を更新するために Guido からコミット権をもらいました。

コア開発者として始めたときはどうでしたか?最初のコミットを覚えていますか?

パッチの提供については、2004年に3ヶ月間休んで、Raymond と Facundo と協力して decimal モジュールの、主に通信会社のベンチマークを実行して高速化する方法を見つけて、たくさんのパッチを提供しました。decimal モジュールの見知らぬ人のハック (特殊ケースを調べる高速なパスや、整数桁のタプルを整数に変換するときに文字列を利用するといったもの) は、当時に由来しています。

最初のコミットは、PEP 343 に関するものでした。その後、おそらく AST コンパイラのブランチに追加されて、2.5 に含められたはずです。

いま開発しているのは Python のどの分野ですか?

runpy, functools, contextlib が主に私の受信箱に入っています。他には、Brett と Victor がインポートでやろうとしたこと、Raymond が collections と itertools でやろうとしたこと、コンパイラに対して起こるものに注目しています。また、ものごとの文化的側面にも高い関心があります。

Python のコア開発を行っていないときは Python でどんなことをしますか?

実際にはあまりありません。仕事での Python の役割は普通に使っているだけなので、そこでハックをすることは多くありません。デジタル音楽ライブラリを整理するプログラムがとても欲しいですが、そういったスクリプトは、ちょっとしたハックですぐにできます。

プログラミングをしていないときは何をしていますか?

テコンドー、コンピュータゲーム、サッカー、読書などです。

2011年5月3日火曜日

新しいブログデザイン

原文はこちら: New Blog Design

もし Python Insider JA をフィードリーダーで読んでいるなら、 Marcin Wojtczuk が作成してくれた新しいページデザインを見ていないかもしれません。軽量な雰囲気でとても素晴らしく、この成果をとても嬉しく思います。

Marcin、時間をかけて、がんばってくれてありがとう!

2011年5月2日月曜日

urllib/urllib2 のセキュリティ脆弱性の修正

原文はこちら: urllib Security Vulnerability Fixed

Guido van Rossum は、Python の URL ライブラリのセキュリティ脆弱性である CVE-2011-1521 の 修正を最近行いました 。セキュリティ関連の問題は稀にしか起こりませんが、問題が発覚したときは、その問題の報告、対応、修正といった背後にあるプロセスをコミュニティで行ってもらう良い機会です。

問題を報告する


もし CPython 内部にあるセキュリティの問題を発見した場合、私たちが最初にお願いすることは、その問題の詳細を秘密にしておいてもらうことです。発見した問題は確かにセキュリティの脆弱性だと判断されてから、簡潔且つ詳細なレポートを作成することで、あなたの情報をコア開発者へ伝えることが重要になります。

優れたレポートは、システムの関連部分がその問題によってどのように影響を受けるかを分かりやすく説明してくれます。その問題がプラットフォーム依存、またはある依存関係のために発生するなら、その情報も同様に役に立ちます。影響のあるバージョンも分かると有益で、その脆弱性は全てのリリースバージョンで同じテストが行われます。最後に、その問題を表すテストケースを持っているなら、バグレポートに含めるようにしてください。作成されたレポートは security@python.org グループへ送られます。

Google セキュリティチームの Niels Heinen は、最近 優れたレポートを投稿しました 。彼は、標準ライブラリの urlliburllib2 モジュールの HTTP 302 リダイレクト処理に問題があると発見しました。彼が発見したのは、サーバにあるデータやシステム情報を漏洩させる可能性がある不適切なスキームでリクエストをリダイレクトできるというものでした。Neils の初期のレポートによると、こういったリダイレクト処理の問題を明らかにする2つのシナリオを説明しています。

1つ目は urllib/urllib2file:// URL スキームのためにハンドラを提供するので、 file:///etc/passwd に対するリダイレクトはパスワードファイルを漏洩させてしまいます。さらに Neils は、 file:///dev/zero のようなシステムデバイスへのリダイレクトも、サービス拒否攻撃を引き起こすリソース消費につながることを説明しました。

レポートに対応する


セキュリティレポートの機密性のために security@python.org のメーリングリストは、レポートを分析して対応できる信頼のある開発者のみの小さなグループで構成されています。このメーリングリストへのメールを暗号化したいなら、 セキュリティニュース ページの OpenPGP の詳細について参照してください。

このメーリングリストのグループが実際にセキュリティ上の脆弱性があると判断したら、修正パッチが添付された公開バグレポートが作成されることになります。今回は Guido van Rossum が、その問題があることを 課題 #11662 で公表し、初期のパッチで対応しました。

問題を修正する


Guido の修正パッチは http://, https://, ftp:// の URL スキームへのリダイレクトを制限しません。FTP のリダイレクトは、許容範囲内と考えられ、実際にダウンロードミラーシステムで、地理的に近い FTP サーバーへのリクエストをリダイレクトするときなど、一般的に利用されています。

Python 2.x では、 FancyURLopenerredirect_internal メソッドが不適切なスキームでリダイレクト処理をリクエストしようとしたときに IOError を発生させます。 HTTPRedirectHandlerhttp_error_302 も同じように動作して HTTPError を発生させます。Python 3 の urllib.request は同じ修正が行われました。その修正パッチには、有効なスキームと無効なスキーム両方のリダイレクト処理を行う2つのテストが含まれています。

この修正を受け取るユーザに関して、Python 2.5 の最後のセキュリティリリースが間もなく行われます。メンテナンスブランチ 2.6, 2.7, 3.1, 3.2 の次のパッチリリースは予定されていませんが、全てのブランチにこの脆弱性に対する修正が行われています。

2011年5月1日日曜日

チーム紹介: Tarek Ziadé

原文はこちら: Meet the Team: Tarek Ziadé

この記事は、Python コア開発チームを手短かに紹介する "チーム紹介" シリーズの1つです。

名前:Tarek Ziadé
所在地:フランスのブルゴーニュ地方ディジョン市近郊の Turcey
ホームページ:http://ziade.org

Python はどのぐらい使っていますか?

約10年です。

コアコミッタになってどのぐらいですか?

2008年12月21日になりました。

コア開発者として始めたときはどうでしたか?最初のコミットを覚えていますか?

私は Distutils のメンテナンスならびにそのツールを進化させるためにコア開発者になりました。

私のコア開発者としての最初のコミットは、コミッタになる前に自分が提案した distutils の機能の小さなバグ修正でした。それは1週間前に追加された、複数の pypi サーバで動作する upload コマンドと Distutils のレジスタを設定する Python で書かれた機能でした。

私はもらったばかりのコミット権で誕生日の2008年12月24日(水)にコミットしました。また、その日は Python 0.9.4 リリースの17周年記念の日でした。

いま開発しているのは Python のどの分野ですか?

sysconfig, distutils, packaging (3.3 に追加される), shutil, pkgutil や機会に応じてその他のライブラリも含めた標準ライブラリです。

Python のコア開発を行っていないときは Python でどんなことをしますか?

私は Mozilla のサービスチームで働いていて、Python を使ったウェブサービスを開発しています。

プログラミングをしていないときは何をしていますか?

漫画/グラフィック小説を読んだり、本を執筆したり、子どもと遊んだり、妻とワインを飲んだりします。他には1848年に建てた家を改築しようと挑戦しています。

2011年4月30日土曜日

AST (抽象構文木) の変更管理ポリシーの策定

原文はこちら: Formalizing the AST Change Control Policy

Python は、 AST モジュール を使用して、ソースコードをコンパイルした形で表現される AST (抽象構文木) を見えるようにしています。AST モジュールを使用すると、ソースコードを構文解析してバイトコードにコンパイルされる途中の過程で、ユーザが AST で表現されたものを操作したり検査したりできます。

Python コードの構文や意味論は、 言語リファレンス で定義されていますが、AST モジュールは、CPython の実装における詳細であり、他の Python 実装で実装される必要があるわけではありません。

AST の互換性


(これまでのところ、raw バイトコードというより) AST で動作する CPython オプティマイザを書き直す 作業 の一環として、Eugene Toder は AST の構造を変更する必要がありました。CPython の実装のように、後方互換性のポリシーが AST に適用されるものかどうか、すぐに分からないので、Eugene は python-dev で 質問しました 。AST が変更されるときに後方互換性を保証する必要はありますか?

その互換性は 必要ない という合意になりました。AST モジュールには定数 ast.__version__ があります。これは使用する AST のバージョンに依存してその動作が変わることをユーザへ伝えるコードです。実装に特化したモジュールにとってはこの情報が十分な互換性と考えられました。

他の Python の実装


実際の事実として、Jython と IronPython 双方のメンテナは、彼らのプロジェクトのそれぞれの実装も AST モジュール、またはその機能を提供するモジュールと互換性があることを指摘しました。たとえそうでも、彼らはそのことから AST モジュールを凍結すべきだという考えではありませんでした。そして、AST が互換性のない方法で変更されても ast.__version__ という定数も変更されるのであれば十分だと考えています。

議論になったポイントの1つは、他の実装の AST 表現が CPython と互換性があることを保証するのに便利な test_ast.py のテスト一式です。 test_ast.py のカバレッジを上げることは、Python の内部構造に関わりたい人にとって良いプロジェクトになります!

この後どうなるの?


議論を起こした パッチ はまだ CPython に取り込まれていません。そのため、しばらくは何も起きません。しかし、そのパッチがコミットされると、AST は互換性のない方法で変更する 予定 です。 ast.__version__ 定数は、このことを反映して変更します。そのため、ユーザコードでも分かりますが、変更が必要になります。一般的にこの内容は将来的に AST の変更を扱う方法になるでしょう。

Python の開発者は、AST がどのぐらい広く使われているか、このポリシーの変更がどのぐらい影響するのかに関心があります。もし、この変更が影響を及ぼすコードをもったユーザがいたら、 python-dev の議論 に参加されることをお奨めします。

2011年4月29日金曜日

Thomas Heller が ctypes メンテナを辞任

原文はこちら: Thomas Heller Steps Down as ctypes Maintainer

Python の開発コミュニティは ctypes メンテナである Thomas Heller から長い間、恩恵を受けています。今月の初め、Thomas は Python 2.5 以来、彼のホームであった CPython プロジェクトの ctypes から 去ることを発表しました

私は Thomas と話す機会があり、彼が Python と共に歩んだ歴史と参加した ctypespy2exe プロジェクトについて尋ねてきました。

Python


1999年に遡ります。Thomas は、Python を学ぶための情報源を探していたところ Mark Lutz の Programming Python を手に入れて、すぐにその言語に夢中になりました。彼は Windows 向けに書いた巨大な C 言語のプログラムの拡張言語として Scheme に置き換えている途中でした。

彼が開発チームに加わった経緯について、彼の最初の CPython (そして、オープンソース一般) への貢献は、 distutils に対する Windows 関連の小さなパッチでした。 distutils への彼の興味は、最終的に Windows インストーラをポイント・アンド・クリックで作成する bdist_wininst コマンドを作成することにつながりました。そこから Greg Ward は彼を python-dev グループに招待し、最終的に彼はコミット権を得ました。

py2exe


多くの Windows ユーザーと同様に、彼も1つの実行ファイルとして包まれた Python アプリケーションをデプロイする必要性がありました。この問題に対する初期のアプローチは、Python の著名人である Fredrik Lundh の squeeze と Christian Tismer の sqfreeze を参考にしました。そして、Thomas は Gordon McMillan の Installer プロジェクトへ複数のパッチを投稿しました。

彼は distutils に興味があったので、パッケージングライブラリの拡張機能に Installer が移植できないかを検討しました。しかし、結局は既存の distutils フレームワークを活用するためにそのソースを書き直すことになりました。最終的に、彼はそのプロジェクトを py2exe というシンプルで分かりやすい名前にしました。

ctypes


ctypes のアイディアは、当時 pywin32 が提供していたものを超える要求から出てきたものです。さらに彼の Scheme での作業は Windows API へのインタフェースを必要とし、それは彼の Python での作業においても全く同じものでした。そのため、彼は自分のプロジェクトをやり続けたかった。

ctypes は、Thomas がそのプロジェクトを公開してほしいという数え切れない要望を受け取ったことから、2003年の Python 2.3 リリースにあわせて最初のリリースを公開しました。彼の Starship ページ には小さな個人プロジェクトに使われているライブラリのように説明されていますが、このライブラリは、たちまちに広く使われるようになりました。

彼はもともと Windows 上でこのプロジェクトを開始しましたが、すぐに Linux 移植の要望を聞くようになり、コミュニティが彼を支援する形になりました。Linux 移植は libffi を導入しました。彼もまた Windows 上での低レベル実装を置き換えるために libffi を使い始めました。

2006年に Python 2.5 の標準ライブラリとして受け入れられた ctypes 1.0 がリリースされました。彼の数年間に及ぶ開発と年間何度もリリースを行う活動の結果、Python と共に提供される ctypes はデフォルトとして広くユーザに使われています。

今日の ctypes が在るのは、多くの人が関わってくれた結果です。Thomas は関わってくれた全ての人に感謝していて、特に Robin Becker へお礼を述べます。Robin は、プロジェクトの初期段階で尽力され、知識と励ましの双方を提供してくれました。

ctypes の新たなメンテナ募集


Thomas が長年かけてがんばってくれた後に、このプロジェクトが停滞するのを我々は見たくありません。あなたが C 言語の経験をもち Python プロジェクトを支援する時間があるなら、コミュニティはあなたの貢献に深く感謝します。新しい 開発者ガイド を調べた上で詳細は バグトラッカー を検索してください。

更新: リンクを修正しました。

2011年4月28日木曜日

チーム紹介: Benjamin Peterson

原文はこちら: Meet the Team: Benjamin Peterson

この記事は、Python コア開発チームを手短かに紹介する "チーム紹介" シリーズの1つです。

名前:Benjamin Peterson
所在地:アメリカのミネソタ州
ホームページ:http://benjamin-peterson.org
ブログ:http://pybites.blogspot.com

Python はどのぐらい使っていますか?

3.5年です。

コアコミッタになってどのぐらいですか?

この3月25日でちょうど3年です。

コア開発者として始めたときはどうでしたか?最初のコミットを覚えていますか?

私の最初の提案は、個人的に Guido 自身によって却下されました 。運が良いことに、私は強く主張して、いくつかのパッチが受け入れられました。最初のコミットは Misc/ACKS ファイルの順番を並び替えたものだと思います。

いま開発しているのは Python のどの分野ですか?

パーサ、コンパイラ、インタプリタのコアが好きですが、Python のコア開発の全ての分野に手を出していると知られています。但し Windows 以外ね!

Python のコア開発を行っていないときは Python でどんなことをしますか?

Python で Python インタープリタ (http://pypy.org) を実装しています!このように、私は心の底から Python 実装者なんです。:) Python 2 と 3 の互換ライブラリである six (http://pypi.python.org/pypi/six) の開発者でもあります。

プログラミングをしていないときは何をしていますか?

音楽を創ったり、クラリネットを吹いたり、数学の本を読みます。時々ちょっとしたハイキングにも出かけます。

2011年4月27日水曜日

Python 2.7 と 3.x における段階的な廃止プロセス

原文はこちら: Deprecations between Python 2.7 and 3.x

最近の python-dev の議論 で、Python 2.7 から Python 3.x の最新バージョンへ移行するときに遭遇する、いまの Python の段階的な廃止プロセスのポリシーに関する問題が浮き彫りになりました。この問題の結果として、Python ユーザが古いバージョンを調べずに Python 2.7 から 3.x の最新バージョンへ普通に移行するという事実を考慮して、開発チームはいまの段階的な廃止プロセスのポリシーを変更しました。

背景


Python は後方互換性に対して強いコミットメントをもっています。互換性のガイドラインに準拠しない限りどんな変更も認められません。それは正しいプログラムが Python の新しいバージョンで実行できるというのが本質的なところです。しかし、このことは必ずしも可能だとは限りません。例えば、API が明確に分割されていて、他のものに置き換えられる必要がある場合です。そういった状況では、Python は段階的な廃止プロセスのポリシーに従い、1年間の移行期間を設けた上で、その削除される機能を公式に廃止します。移行期間中は、開発者が自分たちのコードを修正できるように廃止予定であることを表す警告を提示しなければなりません。Python の段階的な廃止プロセスのポリシーの詳細は PEP 5 に記載されています。その変更は新しい Python のリリースのみに行われるので、通常はリリース間で18ヶ月間の猶予があります。これは1つのリリースが標準の廃止期間であることを意味します。

このポリシーに対する例外の1つが Python 3 でした。Python 2 から Python 3 へのメジャーバージョンの変更は、特別に後方互換性を壊してでも、Python の開発者が既存ポリシーの範囲内ではシンプルに修正できない課題を是正する機会であることを目的としていました。例えば、デフォルトの文字列を Unicode にすることやリストの代わりにイテレータを返すことです。

並行開発


多くの推計では、Python 3 への移行期間は5年かかると言われています。Python 2 と 3 の並行開発が行われることがありました。

Python 2.7 は Python 2 の最終リリースになります。そのメンテナンス期間は、かなり期間延長されることが合意されています。最終的には、Python の新バージョンへ移行したい開発者は Python 3 へ大きな変化を遂げる必要があります。

ここに1つ問題があります...

廃止機能にびっくり


python-dev のスレッド で、ある特別な C API の関数 PyCObject_AsVoidPtr に注目が集まり、その関数は適切な警告もなく削除されました。さらにこれは遵守すべき段階的な廃止プロセスのポリシーを破るものでした。一体何が起こったのか?

この変更は、古い API (PyCObject) から新たに改善された (PyCapsule) への大きな移行の一部でした。この問題は PyCObject がデフォルトで、実際には Python 2.6 でのみ、その API が利用可能です。そして、Python 2.7 で廃止されました。Python 3.2 では、その API は存在せず新しい PyCapsule が使用されます。Python 2.7 リリース (2010年7月) から Python 3.2 リリース (2011年2月) への廃止期間は約7ヶ月間でした。この廃止期間は最低12ヶ月間よりもかなり短く、開発者が Python リリースの妥当な期間をサポートするのが難しくなります。

3.0 から 3.1 、そして 3.2 へ移行する廃止期間は大丈夫です。廃止期間をもつ Python 3.1 は2010年3月にリリースされて、3.x リリースの途中であり、ほぼ12ヶ月間の廃止期間が有効でした。しかし、実際には開発者にとってその廃止期間が有効ではありませんでした。開発者は Python 2.7 から直接、最新の 3.x バージョン、この場合は 3.2 へ移行して、結果としてこの問題に遭遇しました。これは決して python-dev で意図されたものではなく、PEP5 にも Python の並行バージョンについての記載がありません。どちらのバージョンも開発が行われている状況というのを考慮していませんでした。

さて、どうしよう?


PyCObject/PyCapsule API の非互換は明らかに問題でしたが、その一時的な回避策を講じることは不可能ではありません。しかし、python-dev で対処するには難しい問題であり、少なくとも今回の件がそうでした。全体的にこういったことが起こっているわけではありません。

PyCObject/PyCapsule の特殊な事例のために、この問題は既に存在しているので、対処するために行われたことは十分ではありません。 PyCObject を復活させることは、非互換な機能を追加することになるので、実際には選択肢になりません。しかし、つまらない方法ではあるけれど、どちらの API でも利用できるように適合するコードを書くことはできるというのが一般的な見解でした。実際、Python 3.1 では PyCObject API は PyCapsule API のラッパーとして実装されていました。Python 3.1 の実装がサードパーティ製品の用途に展開できると、それを必要とする者から提案がありました。さらに、開発者の移行を支援するドキュメントとその変更の背景にある理由を記述するために、変更に関する "遡及効果のある" PEP に記載する内容だと合意されました。

もう1つ一般的な注釈として、Python の開発チームは、いまこの問題に気付いて再発しないように取り組んでいます。Guido はその状況の レビューを投稿しました 。そして、Python 3 は当分の間、段階的な廃止プロセスを保守的なものにすべきだと提案しました。最低限、廃止予定の API は、開発者が Python 2.7 から移行できるように、実際に削除される前段階で長めに保持されます。

さらに間接的には、このスレッドで幅広いユーザに対して Python の変更を効果的且つタイムリーに伝える方法について課題が残りました。まさにこのブログが正面から取り組んでいる課題です。

つまりは、どういうこと?


まず第一に Python の開発者が全てにおいて、いつも正しいというわけではありません。開発者の生活に困難をもたらすという意味ではなく、単に開発期間中に発見されないものもあるということです。

次にその問題を修正することは、良いことよりも悪影響をもたらすので PyCObject の API は復活させません。復活させることで、その変更に関連する開発者を助ける可能性はありますが、全体として互換性の問題をより複雑にしてしまいます。その一方でこの問題に耐えて進歩しなければなりません。今回は教訓が得られたので、次に同じ間違いをすることはありません。

この問題が示したことは、Python の開発者はユーザからの意見を聞きたいということです。互換性はとても重要です。そして、新しいバージョンになるべく問題を発生させずに移行できるようにあらゆる努力が行われています。特に標準ライブラリの開発者は、妥当なレベルの努力で複数の Python バージョンをサポートすべきです。

最後に Python の開発者は 2.7 を放棄していません。新しい機能が取り込まれず、2.8 もリリースされませんが、それでも 2.7 を使用するユーザの視点を大事にしています。2.7 を使用するユーザの準備が整ったときに 3.x への移行を保証することは、Python コミュニティ全体にとって極めて重要なことです。

2011年4月26日火曜日

ポーリングについて futures と並列実行

原文はこちら: Of polling, futures and parallel execution

いまのコンピューティングの大きな関心ごとの1つは省電力です。多くの携帯デバイス (ラップトップ、タブレット、ネットブック) にとって大きな課題です。最新の CPU はアイドル状態のときに段階的に低消費電力状態に入ります。アイドル状態が長くなると、より深い低消費電力状態になりバッテリーの消費量も少なくなります。そのため、たった1回の充電でデバイスのバッテリーライフが長くなります。

低消費電力状態にはポーリングという敵がいます。あるタスクが定期的に CPU を利用するとき、潜在的変化を調べるためにメモリの位置を読み込むような些細な処理であっても、CPU は低消費電力状態から復帰してきて、その内部構造を全てを利用します。単調で定期的な実行状態はその目的の処理を完了してから随分経った後で再び低消費電力状態へ入ります。インテル社は、ポーリングという動作そのものを 電力を浪費する懸念事項と考えています

Python 3.2 は、並列タスクを起動する concurrent.futures モジュール という新たな標準ライブラリを提供します。そのライブラリは並列タスクが終わるのを待ちます。そのコードを詳しく調べてみると、ワーカースレッドやプロセスの一部にポーリングが使用されていることに気付きました。"一部" というのは、 ThreadPoolExecutorProcessPoolExecutor の実装が違っているからです。前者はそれぞれのワーカースレッドがポーリングを行います。一方、後者はワーカープロセスと通信するために使用される1つのキュー管理スレッドのみがポーリングを行います。

ここでは、ポーリングはシャットダウンの手続きが開始されるときを検出するというたった1つの処理のみに使用されていました。呼び出し可能オブジェクトをキューイングする、もしくはキューに追加されたその直前の呼び出し可能オブジェクトからの結果を取得するといったその他のタスクは、同期キューオブジェクトを使用します。これらのキューオブジェクトは、使用している Executor の実装に依存した threadingmultiprocessing モジュールのどちらかにあります。

そのため、私は シンプルな解決方法 を思い付きました。私はこのポーリングを None という組み込みのセンチネルに置き換えます。キューが None を受信すると、待ち状態のあるワーカーは自然に起動してシャットダウンすべきかどうかを確認します。ProcessPoolExecutor では、1つのキューマネジメントスレッドに加えて、N 個のワーカープロセスを起動させる必要があるといった、ちょっと厄介な問題があります。

私の最初のパッチでは、それでもポーリングのタイムアウトを持たせていました。ある時点でワーカーが起動するかなり長いタイムアウトです (10分間) 。コードがバグっているときに発生する長いタイムアウトですが、必要なときに前述したセンチネルを通してシャットダウンの通知を取得できませんでした。好奇心から、私は multiprocessing のソースコードを読み始めて、また別の興味深い見解が得られました。Windows 環境では、ゼロ以外の有限なタイムアウトをもつ multiprocessing.Queue.get() がポーリングを使用します (私は 課題 11668 を登録しました) 。それは 1 ミリ秒のタイムアウトから始まり、ループする毎に増加する高頻度のポーリングを使用します。

それでもタイムアウトを使用していると言うのは確かにそうですが、そのタイムアウトが長く、Windows 環境で私のパッチは役に立ちません。それは 1 ミリ秒毎に起動して実行するように実装されているからです。私の最新のパッチは全くタイムアウトを使用しないので、プラットフォームに関係なく定期的に起動することはありません。

歴史的に説明すると、Python 3.2 以前では、 threading モジュールの全てのタイムアウト機能や、 multiprocessing それ自身が様々なタスクのためにワーカースレッドを使用するので multiprocessing においてもそのほとんどがポーリングを使用します。これは 課題 7316 で修正されました。

2011年4月25日月曜日

2011 言語サミットレポート

原文はこちら: 2011 Language Summit Report

今年の言語サミットは、PyCon が始まる前日の3月10日(木)にアトランタで開催されました。出席者は、 CPython, PyPy, Jython, IronPython, Parrot VM のメンバー、 Fedora, Ubuntu, Debian のパッケージャ、 Twisted プロジェクトの開発者やその他のプロジェクトのメンバーが集いました。

開発ブログ


最優先課題の1つは、PSF の広報ディレクターを務める Doug Hellmann がまさにこのブログの議論を始めました。python-dev メーリングリストの流量の多さ、且つ頻繁に議論が活発になりがちなために、ユーザにとって開発のニュースを知るお手軽な方法としてブログが望まれました。このブログでは、PEP、大きな意思決定、新機能、致命的なバグ修正、そして開発プロセスの中で何が起こっているのかの親しみやすい話題も提供していこうと計画しています。

全ての Python の実装はこのブログに投稿できます。例えば、PyPy は既に 自らのプロジェクトで活発なブログ をもっていますが、彼らは同じようにこのブログにもそのニュースを投稿することに協力的です。関連した議論は python.org ダウンロードページ でも紹介されている代替の実装につながります。そういったリリースもまた python.org のトップページでニュースとして掲載されます。

互換性の警告


Python 3.2 で CPython の参照カウントに依存したコード領域をユーザが検出できるように ResourceWarning を導入しました。この警告はユーザがもっと優れたコードを書くのに役立つだけでなく、安全なクロス VM コードを書けます。さらにクロス VM な互換性のために CompatibilityWarning という新たな警告の型が提案されました。

このアイディアは、最近登録された PyPy の開発者が発見した CPython のバグがきっかけでした。 課題 #11455 は、CPython では、ユーザが __dict__ に非文字列のキーをもつ型を生成できるということを説明します。それは少なくとも PyPy や Jython ではサポートされていません。理想としては、まさに ResourceWarning と同様に、ユーザがそういったケースを検出するために警告を有効にできるようにします。

標準ライブラリの独立化


いま CPython のソースを Subversion から Mercurial へ移行することが完了しました。標準ライブラリを独立したリポジトリへ分割して外部へ出そうというアイディアが復活しました。代替の実装の開発者は、彼らの開発プロセスが大幅に簡略化できるのでこの方針転換に高い関心をもっています。これまでは CPython のスナップショットを取り、C 拡張をピュア Python のバージョンなどに置き換える特殊なパッチを任意の実装に適用しています。

この方針転換は今後 PEP として提案される必要があります。そして、議論の争点の1つとしてバージョン管理をどう行うかが話し合われます。標準ライブラリは任意の実装の外部にあるので、そのライブラリ自身がバージョンをもつようになります。さらにテストも同様にバージョンを考慮する必要があります。

標準ライブラリを外部へ出すことの別の話題は、ピュア Python 実装とそれに対応する C 拡張に関するものでした。PyPy プロジェクトの Maciej Fijalkowski が時間をかけて話しました。モジュールによっては、ピュア Python と C 拡張で少し機能の違いがあります。外部へ出すことの議論が進むにつれて、PyPy プロジェクトのグループは、その利用がどこへも不利益をもたらさないように、そういったモジュールを変更するためにより厳密な方法を提案しました。さらに、C 拡張はパフォーマンスの向上が図れるときのみに作成し、ピュア Python 実装が C 拡張よりも優先されることが決定されました。

パフォーマンスベンチマークサイト


PyPy スピードセンターは、PyPy のパフォーマンス結果を提示するという偉大な功績を収めました。python.org と同じような performance.python.org をどうにかホスティングして、全ての VM を参加させることについて議論しました。パフォーマンスのベンチマークに加えて、その他にもメモリ使用量、テスト結果、言語の互換性なども考慮されます。これまで PyPy 対 CPython の検証を行っていたように、複数の Python 実装と連携するインフラを適合させるように取り組む必要があります。

Allison Randal が役員を務める オレゴン州立大学のオープンソース研究所 に高パフォーマンスのマシンを設置するお話が、新たなスピードセンターが活躍するための場として議論されました。Jesse Noller は、その研究所に設置するハードウェアを手に入れるために尽力することに言及しました。寄付は歓迎しています!

あなたが、またはあなたの組織がこの話題に関連して寄付に興味をもっているなら、 Python ソフトウェア財団 へ連絡して、 寄付のページ で支払ってください。

モラトリアムの解除


CPython 3.3 の開発が開始されると同時に言語の変更に対してのモラトリアムが解除されます。水門は開かれていますが、代替の実装が追いつけるように変化の速度を遅くしている上に、言語の変更は保守的なものになると予想されます。モラトリアムの結果、どの代替の実装も 3.x に追いつけなかったけれど、PyPy と IronPython は最近 2.7 との互換性を保持して、IronPython は 3.x の開発が始まっています。

3.3 に期待されている言語の変更として、承認済みの PEP 380 が楽しみです。この PEP は、あるジェネレータが別のジェネレータへ yield できるようにする yield from <expr> という構文を導入します。これ以外には、特に言語の変更の見通しはありません。

例外属性


その次の話題は、ユーザへ文字列のメッセージを強制させるよりも、もっと良い属性を提供する例外についての迅速な議論がありました。例えば、ImportError は、インポートに失敗したことを調べて解析するよりも、そこへ簡単にアクセスする方が便利です。

この実装は、例外オブジェクトの初期化時にキーワード引数のみを受け取ります。いまでも ImportError ケース のためにパッチが存在します。

貢献者の同意


貢献者の同意についても議論されました。いくつかの電子契約フォームが水面下で進められています。Google の 個別貢献者の同意 は、新たなシステムがうまく機能するようにそういった発想のために参考になるものの1つです。この話題は長期間、議論されてきました。たくさんの人がこの分野の解決策を待っています。さらに、アメリカ以外の地域でも有効な電子契約への移行を保証するために研究が行われています。

Google サマーオブコード


Martin von Löwis は、PSF の傘下にある Google サマーオブコードを紹介する会議を設けました。メンターとしての役割を行わない開発者も望まれます。つまり、研究する学生のためのプロジェクトを提案することです。プロジェクトを提案することが、メンターになることをほのめかすものではないことを覚えておいてください。何らかの方法で協力したいなら、PSF の プロジェクトとメンターの公募 を参照してください。

Distutils


Distutils2 が取り上げられました。Tarek Ziadé は、彼らのスプリントのゴールは Python 3 への移植を完了して、Python の標準ライブラリへの最終的なマージの準備をしていると話しました。さらにマージと共に新たな名前 packaging となります。packaging チームは、Python 2.4 から 3.2 までをサポートする Distutils2 という名前で独立したパッケージを提供することも計画しています。

PyCon スプリントの大きなグループの1つだった packaging スプリントは、大成功でした。彼らの現在の成果は標準ライブラリのマージを待っている Bitbucket にあります。

代替の VM の未来


IronPython は、将来の計画と 3.x リリースを次に控えていることについて話しました。開発プロジェクトが Microsoft から引き継がれ、彼らは PyCon の場で初めてのコミュニティベースのリリースとなる 2.7.0 リリースをアナウンスし、数ヶ月以内に 3.x を対象に開発を始めます。

Jython は最近 2.5.2 がリリースされて 2.6 リリースの計画が始まりました。2.6 と 2.7 の違いはそう大きくないので 2.7 へジャンプすることを提案する人もいましたが、もしジャンプするなら最初のリリースは時間を要するかもしれません。"リリースは早めに、リリースは頻繁に" は、その話し合いの中で出た引用の1つです。彼らは任意の 2.6 から 2.7 の違いを調べた後で 2.6 から 3.x へ進める可能性があります。

開発資金


3.x 開発計画の中で開発資金を使って代替の実装が 3.x へ追いつくのをスピードアップできる可能性があるかという話題がありました。資金を投入することはできるけれども、PSF への提案は、全てが議論される前に作成する必要があります。そういった取り組みの助成金を受けるのに興味がある人たちは PSF の役員会へ連絡してください。

ベースライン Python


Jim Fulton は、彼が "ベースライン" Python と呼ぶものについて議論を始めました。彼が Python アプリケーションをデプロイしてきた経験では、システムの Python は予測不可能で対象とするのが難しいと分かりました。Fedora と Ubuntu/Debian のパッケージングの専門家と一緒に、なぜシステムの Python がそのようにデプロイされるかの理由を知ることができました。

Fedora では、基本となる Python のインストールは Live CD を考慮しています。そのため、少しの依存関係をもつとても小さなインストールで、基本的には最低限の実行環境です。その他の違いは、ディレクトリの配置、distutils のような標準的なライブラリモジュールの除去、またはディストリビューションが提供する廃止されたライブラリです。

すぐに明確な解決策は出ませんでしたが、この関係者はその問題に継続して取り組んでいます。

3.3 の機能


2つの PEP を含めた 3.3 の機能の話題がありました。名前空間パッケージを扱う PEP 382 はそのサイクルのある地点で現れます。さらに distutils のマージの話題の中でも話されました。

柔軟な文字列表現を定義する PEP 393 も議論され、Google サマーオブコードのプロジェクトとして学生の興味をひいていました。その実装に加えて、それらが受け入れられるかを把握するために新たな内部のメモリ特性とパフォーマンスに取り組む必要があります。

Unladen Swallow


Unladen Swallow は、現在 "休息" 状態にあり、CPython 3.3 にそのままは含められません。その分野の専門家がその作業を行えなくなり、さらに発展させるには複数の優秀な専門家を特定する必要があります。議論の中では、開発資金を使って Unladen Swallow を次の段階へ進められるものかどうかが再度、議論されました。この内容に興味があるチームは PSF へ問い合わせてください。

Unladen Swallow は、休息状態であり、今後はどうなるか分かりませんが、このプロジェクトは Python とオープンソースコミュニティ全般に対して大きな貢献を行いました。Unladen Swallow で使用されるベンチマークツールは、例えば、代替の実装をテストするのにかなり便利です。さらに、Unladen Swallow の開発者から LLVM や Clang への貢献は、同様にそういったプロジェクトを助けるものでした。

その他に2つのパフォーマンスのアイデアも Dave Malcolm のインライン関数の提案を含め、手短かに議論されました。Martin von Löwis は彼が開発中の JIT 拡張モジュールを話しましたが、PyPy 開発者はこの種の JIT の有効性に懐疑的な見解を示しました。

非同期フレームワークの道を敷き詰める


その日の最後の議論は、標準ライブラリへ Twisted のライブラリを統合するものでした。主なアイデアは、Twisted やその他の非同期プログラミングフレームワークへ簡単に移行できる asyncore を代替するものでした。

このプロセスは PEP として提案されていて、非同期のイベントループがなかったら、WSGI リファレンスと同じような目的を提供する方法がいくつか提案されています。PEP の著者に加え、Twisted プロジェクトやその他の開発者は、みんなが同意するように取り組む必要があります。

その他の情報


詳細な情報については、CPython 開発者である Nick Coghlan の rough noteshighlights を参照してください。

2011年4月24日日曜日

Python Insider へようこそ!

原文はこちら: Welcome to Python Insider!

Python Insider は Python コア開発チームの公式ブログです。このブログは開発メーリングリストを購読していないユーザ向けにそのメーリングリストで議論された話題の概要を知る方法の1つです。特に Python の開発で積み重ねられてきた変更内容について学ぶのに良いです。Python の開発状況というのは、例えば、最近 Mercurial ホスティングへの移行が完了したこと、新たに承認された Python 拡張提案 (PEP)、API の変更、その他の Python のコア開発で進められている成果の大きなものについて紹介します。

このブログは python-dev メーリングリスト や個々の開発者ブログ (サイドバーのリンクを参照) に置き換わるものというよりも、新たな情報源となるものです。メーリングリストでの議論が完了した後に、もしくはもっと有志のユーザに関わってもらう必要がある段階になったときに、公けに議論する場を提供します。このブログで議論してもらっても良いですが、その話題に興味を持った開発者やユーザが python-dev メーリングリストに参加して、直接その議論や開発に関わってくれることを期待しています。

このブログを躍進する Python と出会う機会にしてください。

購読


Python Insider を購読する方法は以下の通りです。


日本語翻訳を購読する方法は以下の通りです。


協力者、募集


チームには、ブログの記事を書く専門のライターはいますが、Blogger テンプレートのウェブデザインのスキルをもった人がいません。ブログのデザインを格好良くするために手伝ってくれるなら、Doug Hellmann (doug dot hellmann at gmail) まで連絡をください。