IronPython 2.0 の OLE オートメーション・サポート

ShiroさんのブログにIronPython 2.0 Beta4でOLEオートメーションサポートがどのようになるかが詳しく解説されています。彼の記述した内容の概要は、以下のようなものです。 IronPython 1.x系では、オンザフライでインタロップ・アセンブリを生成するか、インタロップ・アセンブリを明示的に指定してCOMオブジェクトを使用する(チュートリアルにあるマーリンのデモがこれです)。 IronPython 2.0Beta3では、デフォルトでPIAかインタロップアセンブリを生成します(実際に私がBeta2で実験すると、-X:PreferComDispatchスイッチによってSystem.__ComObjectを使用していますし、Beta3ではスイッチが削除されています)。 IronPython 2.0Beta4では、デフォルトでSystem.__ComObejctを使用するようになります。-X:PreferComInteropAssemblyスイッチを使うことでインタロップ・アセンブリを使用するようになります(彼のブログでは、DLR_PreferComInteropAssembly環境変数と書かれています)。 DLR上のOLEオートメーション・サポートは、1)Type.GetTypeFromProgIDメソッド、2)clr.AddReferenceToTypeLibrary関数を使う方法と従来通りインタロップ・アセンブリを使用する方法になります。このような仕様にした理由として、VB6のCreateObject関数と同様の仕様にするためであると彼は説明しています。 ChageSet34570を使って試してみると彼のブログに記述されているような動作を確認することができました。但し、DLR_PreferComInteropAssembly環境変数だけは動作しませんでした。ソースコードを調べていくと、環境変数としてのサポート機能はまだ実装されていないようです。これ以外にもOLEオートメーション・サポートに関する内容がShiroさんのブログに記述されていますので、ご興味がある方は参照してください。

1

ドメイン特化型開発の書籍

色々な方たちのご協力を得ながらDomain-Specific Development with Visual Studio DSL Toolsの書籍の作業を行っていました。このほど出版していただける日経BPソフトプレスさんから TechEd 2008 Yokohamaで関連書籍のイベントを開催していただけることになりました。微力ながら私も参加させていただきますので、宜しくお願いいたします。

1

IronRuby アルファのリリース

John Lam が OSC2008で最初のバイナリーセットであるアルファをリリースしたとアナウンスしています。RubyForgeのIronRubyプロジェクトからダウンロードできます。合わせて、IronRubyの協力者向けの(Contributor)プロジェクトもアナウンスされています。 これから色々と試してみる予定です。リポジトリをチェックすると127になっています。


DLR ホスティング API の概要

Silverlight 2.0 Beta2やIronPython 2.0 Beta3に含まれているDLRのホスティングAPIの概要図を作成しました。 TechEd Yokohamaに向けて準備したものです。この作業の中でBeta2向けに移植した簡単な言語シリーズもBeta3向けに移植しています。Beta2からBeta3への移行は、それほど難しくないので、TechEd Yokohamaが終了してから公開する予定でいます。それまでに新しいベータがでなかればという条件が付きますけど。 会場では可能な限り最新版のDLRでお見せしたいと考えています。

1

TechEd2008 の資料を作成中です

IronPython 1.1.2RC1がリリースされています。バグフィックスが主体のようです。今は、今年のTechEd Yokohama のプレゼンテーション資料の作成を行っています。テーマは「Lightweight Language」にしたので、内容を色々と検討しています。今、考えているのは以下のようなものです。 DLRホスティングモデル(コンソール、Silverlight 2.0) オブジェクト共有(DynamicObject) 俺様言語 DynamicSiteの利点と欠点 etc DLRのASTに関しては、プレアルファから極端な変更がないので、基本的な考えは昨年のセッションを参考にすれば良いかと考えています。今回はホスティングモデルの拡張性を中心にしようかと考えています。ホスティングモデルが理解できれば、John Lamが公開しているASP.NET MVC + IronRuby や Silverlight 2.0のDLR対応も理解できるようになりますので。 #IronPythonのChangeSet 34286とIronRuby SVN Rev123を調べていて気が付きましたが、IronRuby側のDLRがIronPythonに同期し始めている模様です。

1

Dynamic Silverlightの記事が公開されました

遅まきながら日経ソフトウェア7月号に掲載された「Silverlightで動的言語を使う」の記事が日経BP IT Proでオンライン公開されました。詳細な記事というより、IronPythonやIronRubyでSilverlightアプリが作れるという紹介程度なんですけど…SilverLight2.0 Beta2でIronPythonを使う場合に、追加のアセンブリを読み込むにはimport clrclr.AddReference(“アセンブリ名”)とすることで読み込むことができるようになっています。Beta1の場合は、アセンブリの完全名である必要があったのですが、Beta2から使いやすくなっています。IronRubyの場合は、requireでアセンブリの完全名を記述するのは、Pre Alphaの頃と同じですのでご注意ください。

1

IronPython ソースコード・リポジトリ

 IronPython 2.0 Beta3が公開されてから気がついたのですが、ソースリポジトリにBeta3が入っていないですねぇ。何ででしょうね。少し、不思議な気がしています。まだまだ準備に入れていないのですが、今年のTechEd横浜でもDLR関係のセッションを持たせていただくことになりました。内容などはまだまだこれからです。 米国のTechEdでは、IronPythonとIronRubyのハンズオンがあったようです。それと今月の初めにあったRailsConfでIronRubyを使ってRuby on Railsを動作させたようです。最近のJohn Lamのブログには、IronRubyでASP.NET MVCのサンプルが掲載されています。これらのサンプルも面白いと思うのですが、やはりDLRの面白さはオブジェクトの共有にあると思うので、この点からは色々と考えなきゃと思っていたりします。 何か、取り留めもない話になりましたけど近況報告ということです。#6/28は、札幌におりますので、OSC2008にいらっしゃる方が居りましたら、お気軽にお声をおかけ下さい。

1

[TechEd] PowerShellについて

TechEdでリリース済みの動的言語ということでPowerShellを簡単に説明しました。PowerShellで実行できるコマンドには、以下の4種類があります。 コマンドレット:PowerShell独自のコマンドで「動詞-名詞」というネーミング。 関数:一連の手続きに名前を付けたもの。 スクリプトコマンド:各種のコマンドなどをファイルに保存したもの。 ネイティブコマンド:実行可能プログラム(EXEなど)。 特にネイティブコマンドは重要で、これを使うと「cscript.exe xxxx.vbs」などのWSHのスクリプトをPowerShellの中から実行することができます。つまり、既存のスクリプト資産を移行しなくてもPowerShellで操作できるように配慮されているのです。 デモでお見せした電卓は、以下のようなものです。 これはWindows Formsを使って作成しています。このGUIを作成するときに特徴的な書き方をしているのが以下のようなコードです。,”C”+1..3+,”/”+4..6+,”*”+7..9+,”-“,0,”.”,”=”,”+”|ForEach-Object {new-button $_}   「new-button」という関数をパイプラインで呼び出しています。パイプラインに渡している配列が、ボタンに表示されている文字列なんです。もちろんFor文やForEach文で作成するという方法もありますが、パイプラインを使ってForループと同じことができるんです。PowerShellって… デモでは、このようなGUIのサンプルもお見せしましたが、PowerShellでのGUIプログラミングには、鬼門も潜んでいます。何かと言うとPowerShell.exeは、マルチスレッドで動作している点がGUIと相性が悪いのです。たとえばWindows FormsのWebBrowserコントロールなどは、シングルスレッドでないと利用することができないという制約を持っています。このようなコントロールを普通には扱えないのです。もちろん、独自のコマンドレットを使ったりすれば可能ですし、そういうコマンドレットを公開している方達もいらっしゃいます。 慣れてくると便利なツールです。PowerShellって。I-Oリダイレクションもサポートしていますし、CSVなどもサポートしていますから。色々な情報を集めてテキストファイルへ出力とかが簡単なんですね。

1

[TechEd] DLR電卓について

TechEdのデモでお見せしたDLR電卓とは、以下のようなものです。 SilverLight1.1アルファのサンプルである、DLR Consoleを使って電卓アプリをPythonとJScriptから操作するというサンプルです。このサンプルをLL魂でもお見せしているのですが、LL魂で使ったコードから60%のリファクタリングを行ったものをTechEdでは使用しました。見た目は同じなのですが、UIの作成方法が完全に異なっています。具体的に異なっている点は以下です。 UIのコードをXAMLで定義。 XAMLファイルを動的に読み込む  UIのコードをPythonで作成していた部分を完全にXAMLに分離しています。分離したXAMLファイルをHTTP Requestを使ってXAMLを読み込まなければなりません。読み込んだXAMLをXamlReaderでオブジェクトにするという方法を使っています。というのもSilverLightはブラウザのプラグイン技術なので、クライアントサイドで動作するからです。メインのXAMLであれば起動時に読み込めるのですが、それ以外のファイルとなるとサーバーからファイルをHTTPを使って読み込む必要があるからです。このような理由からLL魂で使ったサンプルでは、XAMLではなくPythonコードのみで作成していました。 このサンプルを使って動的言語ということで、 動的にUIを作る。 動的にイベントハンドラを登録する。 という内容をお見せしました。コマンドを入力しながら、自由に操作できるという特徴をお見せしたかったからです。もっとも作り込まれたプログラムになると、インタラクティブにコマンドを入力するということは無いと思うのですが、作成途中を確認するコンソールという意味ではDLR Consoleが役に立つと私が考えているからです。

2

[TechEd]明日からTechEd横浜が始まります

明日から今年のTechEd Yokohamaが始まります。その準備に追われているのですが、実はまだデモの内容で悩んでいます。作成済みのデモコードを大幅に手直ししたり、新しいデモ内容を作ってみたりしています。というのも私の担当しているセッションの会場がAルームなもので、会場が広いからどのようなモノをお見せしたものかなという悩みがあるからです。このような状況ですので、さっきもデモの内容を確認したりしています。 デモのテーマとしては、以下のようなものを考えています。 現状でできること DLRのオブジェクト共有 Python ASTとDLR ASTを覗く IronRuby 1.0アルファでできること さてさて、どうしよう。

2