雑記帳

ブログを使わずにArrangeNoteで作っている公開雑記帳

Aug 29, 2008 - IronPython 2.0B4とVisual StudioでPythonスクリプトをデバッグ

下の記事で、2.0B4のipy.exeに-Dオプションを指定すると、Visual Studio 2008(SP1で確認)でPythonのスクリプトをちゃんとデバッグできたと書きましたが、 これは誤りで、2.0A6のときに気づいた問題は改善されていませんでしたorz。

これは何を言っているのかというと、PythonのスクリプトファイルをVisual StudioのIDEに表示して、ブレークポイントを設定したりステップ実行すると、現在の停止位置が何故か1行ずれてしまうという問題が起こります。

Visual StudioでIronPythonのスクリプトをデバッグ

IronPython本体を追跡して原因を調査したところ、スクリプトの先頭行に「# coding: エンコード名」を記述すると上記の問題が発生することが分かりました。

と、いうわけで、↓が修正パッチになります。

diff -r -c -P IronPython/Runtime/PythonContext.cs.orig IronPython/Runtime/PythonContext.cs
*** IronPython/Runtime/PythonContext.cs.orig	Fri Jul 25 11:38:12 2008
--- IronPython/Runtime/PythonContext.cs	Thu Aug 28 08:51:37 2008
***************
*** 13,18 ****
--- 13,20 ----
   *
   * ***************************************************************************/
  
+ #define	DEBUGGER_WORKAROUND
+ 
  using System;
  using System.Collections;
  using System.Collections.Generic;
***************
*** 544,549 ****
--- 546,554 ----
              if (encoding == null)
                  throw new IOException("unknown encoding type");
  
+ #if DEBUGGER_WORKAROUND
+             stream.Seek(start_position, SeekOrigin.Begin);
+ #else
              if (!gotEncoding) {
                  // if we didn't get an encoding seek back to the beginning...
                  stream.Seek(start_position, SeekOrigin.Begin);
***************
*** 552,557 ****
--- 557,563 ----
                  // buffering doesn't throw us off)
                  stream.Seek(bytesRead, SeekOrigin.Begin);
              }
+ #endif
  
              // re-read w/ the correct encoding type...
              return new StreamReader(stream, encoding);

これでちゃんと停止中の行にハイライトが表示されるようになったので、修正方法は多分これでよいのでしょう。 呼び出し元に復帰してからの処理をデバッグしていないので、本当に正しいのかどうか、半分ぐらいしか自身がありません。

Aug 21, 2008 - IronPython 2.0B4

IronPython 2.0B4でclr.SetCommandDispatcher(dispatcher)がちゃんと働くようになりました。

これが一体何を意味しているのかと言うと、ipy.exeで対話操作しながらWPFを自由に動かせるようになります。 2.0B2と2.0B4のそれぞれを使って、コマンドプロンプトで以下の操作を実行してみれば分かります。

IronPython 2.0 Beta (2.0.0.4000) on .NET 2.0.50727.3053
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path += [r'x:\IronPython\Tutorial']
>>> from avalon import *
>>> w = Window()
>>> w.Show()

2.0B4では、Tutorialに付属しているavalon.pyのDispatchConsoleCommand関数がちゃんと呼び出されるようになり、 バックグラウンドスレッドで動作しているWPFに対してコマンドをInvokeするので、 コンソールが入力待ちになっている状態であるにも関わらずWPFのウィンドウが自由に動きます。

2.0B2では、DispatchConsoleCommand関数が呼び出されないので、ウィンドウは表示されてもマウスなどの操作を受け付けません。

なお、2.0B4でのclr.SetCommandDispatcher(dispatcher)ですが、Pythonで定義したクラスのメソッドを渡しても正常に動作しませんでした(2.0A6ではPythonクラスのメソッドを渡しても動作できた)。モジュールの関数をdispatcherに指定してやらないといけません。

おまけ: ipy.exeに-Dオプションを指定すると、Visual Studio 2008(SP1で確認)でPythonのスクリプトをステップ単位でちゃんとデバッグ出来ました。 2.0A6のときはIronPythonを修正しないとデバッグ中の行の表示が1つずれていましたが、2.0B4ではちゃんとデバッグ中の行がハイライトになります。Pythonスクリプトの変数も参照できて、これはとても便利。

Aug 18, 2008 - OSI承認ライセンス 日本語参考訳

OSIと言えばOSI参照モデルのことを思い出しますが、 ここで言っているのはオープンソース・イニシアティブのほうです。

オープンソースライセンスの各日本語参考訳がまとめられているwikiがあったので、メモ。

http://sourceforge.jp/projects/opensource/wiki/licenses

Aug 17, 2008 - .NET Framework 3.5 SP1

さて、Visual Studio 2008 SP1と.NET Framework 3.5 SP1では、問題点の修正だけでなく、新たに追加された機能が沢山あるので、以下にリンクをメモ書き。

WPFのビットマップエフェクト関連がGPUによって高速化されるようになっただけでなく、ShaderEffectクラスとPixelShaderクラスを使ってカスタムエフェクトを作れるようになったのは非常に興味深いです。

Aug 17, 2008 - MSDN Library for Visual Studio 2008 SP1

今週の私は夏休みで一週間お休みだったのですが、 妻が出勤のため、主に子供の世話で終わってしまいましたorz。 でも子供と一緒に過ごした毎日は楽しかったです。

さて、今週はVisual Studio 2008 SP1と.NET Framework 3.5 SP1が公開されましたので、早速アップデートを開始しました。

しかし、MSDN Library for Visual Studio 2008 SP1(ENU)でカスタムインストールを選択しているにも関わらず、何故か選択していないOffice DevelopmentやEnterprise Serversがインストールされてしまいます。Web DevelopmentのServer Technologiesもインストールしないようにしたのですが、Web関連のクラスも検索に引っかかってしまって不便です。

何か回避策って無いのでしょうか。

記事の一覧

Copyright © 2008 Koichi Yamamoto