<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>荒井省三のBlog : DLR</title><link>http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx</link><description>Tags: DLR</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>DLR の COM バインダーに対する考察</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/15/considered-opinion-about-com-binder-in-dlr.aspx</link><pubDate>Mon, 15 Jun 2009 03:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9751697</guid><dc:creator>shozoa</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9751697.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9751697</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx" target=_blank mce_href="http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx"&gt;DLRを使ったExcelプログラミング&lt;/A&gt;というエントリーで、興味深いご指摘をいただきました。それは、&lt;STRONG&gt;COMオブジェクトのリリースを誰が面倒を見てくれるのか&lt;/STRONG&gt;というものです。この問題を考える上で意識しないといけないのが、オブジェクトのライフサイクルの管理という側面です。具体的には、以下のようなものです。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;マネージ オブジェクトは、GCによって回収される。&lt;/LI&gt;
&lt;LI&gt;COM オブジェクトは、COMサーバーが参照カウンタが0になった時点で消滅させる。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;オブジェクトの生存の可否そのものが、異なる観点で管理されているのです。つまり、&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;マネージ オブジェクトは、マネージヒープ上で参照されないものがGCによって回収される。つまり、ルート オブジェクトから辿っていけないオブジェクトが、回収の対象になる。&lt;/LI&gt;
&lt;LI&gt;COMは参照カウンタで管理していおり、マネージコードからはRCWが内部で参照カウンタに対する操作を行う。従って、RCWが回収されない限り参照カウンタがデクリメントされない。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;ということです。COM参照をカウンタを適切なタイミングでデクリメントするには、Marshal.ReleaseComObjectメソッドを呼ぶ必要があります。&lt;BR&gt;(注)GCはCLRホスト内に存在しますので、アプリケーションがアンロードされれば解放されます。アンロード前にCOMサーバーを解放するために、Marchal.ReleaseComObjectを呼ぶかGC.Collectを呼び出す必要があるだけです。&lt;BR&gt;&lt;BR&gt;この考えをベースに.NET Framework 4.0で導入されるDLRについて考えていきます。C#言語では、&lt;STRONG&gt;dynamic&lt;/STRONG&gt;というキーワードによってレイトバインディングが実現されます。dynamicというキーワードを付与した変数は、コンパイルされたILを見るとSystem.Object型がSystem.Runtime.CompilerServices.DynamicAttributeによって振る舞いを変えるようになっています。この振る舞いを変えるという言葉の意味は、以下のようなことを意味しています。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;通常のメソッド呼び出し：IL上は、直接メソッドを呼び出す(MethodInfoを示すマネージポインタである)。&lt;/LI&gt;
&lt;LI&gt;dynamic属性を持つオブジェクトのメソッド呼び出し：名前によってMethodInfoを取得してから、Invokeで呼び出す(この意味で、リフレクションを使ってMethodInfoを取得してからInvokeするのと同じです。厳密には、DLRのバインダーによってこれらの処理が行われます)。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;つまりdynamicというキーワードは、リフレクションを使ってメソッドを呼び出す代わりにDLRが実行時にメソッド名の文字列からメソッドを呼び出してくれることになります。この時のパラメータの型に応じた呼び出しを最適化するために、CallSiteキャッシングという仕組みをDLRは用意しているのです。CallSiteキャッシングによって、同じパラメータを使ったメソッド呼び出しが高速化されるというメリットがあります。つまり実行時に文字列でメンバーを解決するが、繰り返し呼び出す場合の高速化メカニズムが用意されているのがDLRというレイトバインディングになります。今までのメソッド呼び出し比較した場合に、コンパイラが解決するか、実行時に解決するかという違いから速度的にdynamicの方が不利になるケースもあることでしょう。ですが、それは初回のメソッド呼び出し時のオーバーヘッドの違いで、2回目以降は同じとは言いませんが遜色ない程度に早くなると言えるでしょう。&lt;/P&gt;
&lt;P&gt;これらの動的なメンバー呼び出しをCOMオブジェクトに適用するのが、DLRのCOMバインダーの役割になります。COMバインダーの設計思想は、VB6.0と同じようにCOMのAutomationインタフェースを使えるようにすることにあります。このため名前を使ってIDispatch::GetIDsOfNameメソッドでDispIDを取得してから、IDispatch::Invokeを呼び出すメカニズムを提供します。このことは、CLR&lt;STRIKE&gt;に&lt;/STRIKE&gt;のCOMインタロップの仕組みとは異なっています。COMインタロップでは、インタロップ・アセンブリ(TLBから生成-tlbimp.exe-)を生成してアーリーバインディングを実現します。もちろん、自分でコードを記述するかVBコンパイラを使うことで、レイトバインディングを実現することもできました。これらのレイトバインディングが、コードを記述することなくCOMのAutomationインターフェース経由でCOMを扱えるようになるのが、DLRのCOMバインダーです。&lt;/P&gt;
&lt;P&gt;ここまででdynamicキーワードでCOMを扱う時の特徴が理解できたのではないでしょうか。具体的には、以下のようなことです。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;COMオブジェクトのインスタンスは、RCWでラップされている。&lt;BR&gt;参照カウンタは、RCWが管理している。&lt;/LI&gt;
&lt;LI&gt;メンバー呼び出しは、COMバインダーがGetIDsOfName、Invokeを使って呼び出している。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;そうするとCOMオブジェクトのインスタンスを早期に回収するには、プログラマがコードを記述する必要があるということです。この意味において、今までと何も変わらないということができます。異なるのは、メンバーを呼び出す内部の仕組みだけです。&lt;/P&gt;
&lt;P&gt;但し、.NET Framework 4.0ベータ1では実装されていませんが、DLR-0.91のソースコードに含まれるMicrosoft.Scripting.ComRuntimeHelpers.IUnknownReleaseDelegate(Microsoft.Dynamicの中にあります)のコメントなど参照してみてください。この実装などが、DLRの最終形に入ってくればDLRのCOMバインダーでCOMオブジェクトのリリースまで管理してくれる可能性があります。まだ開発途中ですので、DLRの開発方向を調べたい場合はcodeplexのDLRを参照するようにしてください。&lt;/P&gt;
&lt;P&gt;PS.DLRのCOMバインダーは、System.Dynamic.dllアセンブリに実装されています。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9751697" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Rack ベースの Web アプリを IIS で動かしてみました</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/11/running-rack-based-web-application-on-iis.aspx</link><pubDate>Thu, 11 Jun 2009 10:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9726062</guid><dc:creator>shozoa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9726062.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9726062</wfw:commentRss><description>&lt;P&gt;前回にご紹介した Railsカンファレンスの IronRuby on Railsセッションで、Rails以外のWebフレームワークとして&lt;A href="http://rack.rubyforge.org/" target=_blank mce_href="http://rack.rubyforge.org/"&gt;rack&lt;/A&gt;が紹介されていました。rackは、Ruby向けの Webインターフェースを提供するフレームワークで、Ruby on Rails 2.3.x系も内部でrackと統合されています。このrackをIronRubyを使って、IISで動かしてみました。その動かし方を以下に記載します。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1.必要なもの&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://ironruby.codeplex.com/" target=_blank mce_href="http://ironruby.codeplex.com/"&gt;IronRuby 0.5.0&lt;/A&gt; 
&lt;LI&gt;rack 1.0.0 
&lt;LI&gt;&lt;A href="http://github.com/jschementi/ironruby/tree/a271880bc1aef4a7845291535524df76882ec9b4/Merlin/Main/Hosts/IronRuby.Rack" target=_blank mce_href="http://github.com/jschementi/ironruby/tree/a271880bc1aef4a7845291535524df76882ec9b4/Merlin/Main/Hosts/IronRuby.Rack"&gt;IronRuby.Rack&lt;/A&gt; 
&lt;LI&gt;Ruby 1.8系&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;2.rackのインストール&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;「igem install rack」コマンドでインストールします。&lt;BR&gt;私の場合は、PATHとGEM_PATH環境変数を設定後に実行しました。実行すると以下のようなメッセージが出力されます。&lt;BR&gt;&lt;PRE&gt;C:&amp;gt;igem install rack
Successfully installed rack-1.0.0
1 gem installed
Installing ri documentation for rack-1.0.0...
Installing RDoc documentation for rack-1.0.0...
mscorlib:0:in `GetBytes': 値が有効な範囲にありません。
              (System::Text::EncoderFallbackException)
        from :0:in `write'
        from :0:in `puts'
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/
             user_interaction.rb:227:in`alert_error'
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/
             user_interaction.rb:103:in`alert_error'
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/
             command_manager.rb:77:in `run'
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/
             gem_runner.rb:39:in `run'
        from C:/IronRuby0.5.0/bin/igem:24&lt;/PRE&gt;&lt;BR&gt;このエラーはIronRubyのバグのようで、riとrdocのインストールに問題があることを示しています。このエラーを発生させないためには、--no-ri --no-rdocオプションでriとrdocをインストールしない方法があります。&lt;BR&gt;インストールが終了すると、IronRuby 0.5.0のライブラリパスへとrackがインストールされます。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;3.HTTPハンドラをビルドします&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;githubからダウンロードしたIronRuby.Rackをビルドします。 
&lt;LI&gt;私の場合は、以下のような手順で作業を行いました。&lt;BR&gt;git clone git://github.com/jschementi/ironruby.git&lt;BR&gt;コピーしたソースコードの中から、C:\Users\shozoa\wk\ironruby\Merlin\Main\Hosts\IronRuby.Rackフォルダを作業用フォルダへコピー。&lt;BR&gt;IronRuby.Rack.slnファイルをVisual Studioで開いて、IronRuby.RackプロジェクトとIronRuby.Rack.Exampleプロジェクト以外のプロジェクトを削除(環境によって、IronRuby.Rack.Exampleプロジェクトは無効になっているかも知れません)&lt;BR&gt;IronRuby 0.5.0の7つのアセンブリに対して参照をIronRuby.Rackプロジェクトへ追加しました。&lt;BR&gt;これでIronRuby.Rackプロジェクトをビルドできるようになりました。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;4.IISの環境を作成します&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;管理ツールのIISマネージャを開きます。 
&lt;LI&gt;Default Web Sitesの下へ新規のアプリケーションを作成します。&lt;BR&gt;エイリアスを「IronRuby.Rack.Example」にします。&lt;BR&gt;物理パスにコピーしたソースコードの「IronRuby.Rack\IronRuby.Rack.Example」を指定します。 
&lt;LI&gt;IronRuby.Rack.Example\web.config の configセクションを編集します。&lt;BR&gt;&lt;PRE&gt;&amp;lt;section name='microsoft.scripting'
type='Microsoft.Scripting.Hosting.Configuration.Section,
Microsoft.Scripting, Version=0.9.6.10, Culture=neutral,
PublicKeyToken=31bf3856ad364e35'
requirePermission='false' /&amp;gt;&lt;/PRE&gt;&lt;BR&gt;この変更は、アセンブリのバージョン番号とパブリックキートークンが異なるために行っています。 
&lt;LI&gt;Visual Studio で IISのWebプロジェクトを編集するには、IISにいくつかのオプションが必要になります。このオプションとは、Windowsの機能のことです。追加されるには、アプリケーションの追加で以下の機能を追加します。&lt;BR&gt;セキュリティ-要求フィルタリング、Windows認証&lt;BR&gt;管理ツール-IIS6と互換性のある管理－IISメタベースとIIS6構成との互換性&lt;BR&gt;管理ツール-IIS管理コンソール、IIS管理サービス、IIS管理スクリプトとツール&lt;BR&gt;(注)Visual Studio 2008で編集しないのであれば、この作業は必要はありません。私は、IIS7で動作確認を行っています。 
&lt;LI&gt;IronRuby.Rack.Example\Binフォルダへ必要なアセンブリを配置します。&lt;BR&gt;IronRuby.Rackプロジェクトでビルドして出来たアセンブリ(私の場合Debug\Binフォルダにある8つ)をコピーしました。 
&lt;LI&gt;RubyとIronRubyのライブラリに対して、IISを起動するアカウント(Network Service)に対してアクセス権限を付与します。&lt;BR&gt;「C:Ruby」と「C:\IronRuby-0.5.0」へ読み取り権限を私は付与しました。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;5.ブラウザでテストします&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;「http://localhost/IronRuby.Rack.Example」へアクセスします。&lt;BR&gt;&lt;PRE&gt;IronRuby running Rack says "Hello, World"
 at 木 6 11 16:22:32 +09:00 20&lt;/PRE&gt;
&lt;LI&gt;上記のように表示されれば成功です。この表示は、IronRuby.Rack.Example\app.rbに記述されたスクリプトを実行して出力しています。config.ru(rackの構成ファイル)などをカスタマイズすれば、別のアプリケーションへURLをマップしたりすることもできます。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;6.IronRuby.Rackの制限事項&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;GEM_PATH環境変数が「C:\ruby\lib\ruby\gems\1.8」固定になっている(Application.cs)ため、ruby 1.8系のインストールフォルダが「c:\ruby」で無ければならないということです。 
&lt;LI&gt;rackの構成ファイルが、Webアプリケーションのルート直下に無ければならない 
&lt;LI&gt;制限ではないですが、HTTPハンドラは内部でRackupを行っています。&lt;BR&gt;(注)この個所を応用すれば、別のフレームワークもサポートできるかも知れません。 
&lt;LI&gt;Visual Studioの開発用Webサーバーには対応していません。&lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9726062" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/IronRuby/default.aspx">IronRuby</category></item><item><title>IronRuby で Ruby on Rails を動かしてみました</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/09/running-ruby-on-rails-on-ironruby.aspx</link><pubDate>Tue, 09 Jun 2009 09:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9713435</guid><dc:creator>shozoa</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9713435.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9713435</wfw:commentRss><description>&lt;P&gt;昨年のRailsカンファレンスに続いて今年のRailsカンファレンスでは、「&lt;A href="http://en.oreilly.com/rails2009/public/schedule/detail/7883" target=_blank mce_href="http://en.oreilly.com/rails2009/public/schedule/detail/7883"&gt;IronRuby on Rails&lt;/A&gt;」というセッションが行われました。このセッションでは、公開されたIronRuby 0.5.0とRuby on Rails 2.3.2を使って実際にRailsをIronRubyで動かしています。少し(大分かも)前から、IronRubyでRailsを動かすための&lt;A href="http://ironruby.net/Documentation/Rails" target=_blank mce_href="http://ironruby.net/Documentation/Rails"&gt;ドキュメント&lt;/A&gt;が公開されています。このカンファレンスで何を紹介したかというサマリーが、&lt;A href="http://blog.jimmy.schementi.com/2009/05/ironruby-at-railsconf-2009.html" target=_blank mce_href="http://blog.jimmy.schementi.com/2009/05/ironruby-at-railsconf-2009.html"&gt;Jimmyさんのブログ&lt;/A&gt;で紹介されています。Railsを動かすドキュメントを使って、実際にRailsを動かしてみましたので、その手順を以下に記載していきます。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1.環境構築&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://ironruby.codeplex.com/" target=_blank mce_href="http://ironruby.codeplex.com/"&gt;IronRuby 0.5.0&lt;/A&gt; 
&lt;LI&gt;Ruby 1.8系 (私は、&lt;A href="http://rubyforge.org/projects/rubyinstaller/" target=_blank mce_href="http://rubyforge.org/projects/rubyinstaller/"&gt;OneClick Installer 1.8.6-27&lt;/A&gt;を使用しました)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;IronRuby 0.5.0をダウンロードしてC:\IronRuby-0.5.0フォルダへ展開し、OneClick Installerで使ってC:\RubyへRubyをインストールしました。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2.Rails 2.3.2 の導入&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;RubyGems のアップデート 
&lt;LI&gt;Ruby on Rails 2.3.2をRubyGemsを使ってインストール&lt;/LI&gt;&lt;/UL&gt;&lt;PRE&gt;#コマンドプロンプトで作業
gem update --system
gem install rails --v2.3.2 --include-dependencies
&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;　(注)RubyGemsを利用するために、Ruby 1.8系が必要になります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3.環境変数の設定&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;PATH環境変数へ IronRubyのBinフォルダへのパスを追加します。 
&lt;LI&gt;GEM_PATH環境変数へRubyGemsのパスを設定します。&lt;/LI&gt;&lt;/UL&gt;&lt;PRE&gt;SET PATH=%PATH%;C:\IronRuby-0.5.0\bin
SET GEM_PATH=C:\ruby\lib\ruby\gems\1.8&lt;/PRE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4.IronRubyの構成ファイルである「ir.exe.config」のLibralyPathsの値にRuby1.8のライブラリパスを設定します。&lt;BR&gt;&lt;/STRONG&gt;&lt;PRE&gt;&amp;lt;set language="Ruby" value="..\lib\IronRuby;
       c:\ruby\lib\ruby\site_ruby\1.8\;
       c:\ruby\lib\ruby\1.8\" option="LibraryPaths" /&amp;gt;
&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;(注)valueの値は読みやすいように改行していますが、実際に設定する場合は改行を含めないで下さい。またir.exe.configは、IronRuby 0.5.0を展開した中のBinサブフォルダに存在します。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4.SQL Server のActiveRecord Adapter の導入&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://github.com/jschementi/activerecord-mssql-adapter/tree/master" target=_blank mce_href="http://github.com/jschementi/activerecord-mssql-adapter/tree/master"&gt;MS SQL Server Adapter&lt;/A&gt; 
&lt;LI&gt;ダウンロードした「mssql_adapter.rb」を「C:\Ruby\lib\ruby\gems\1.8\gems\activerecord-2.3.2\lib\active_record\connection_adapters」フォルダーにコピーします。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;(注)もちろん、SQL Serverをインストールしておく必要があります。私の場合は、&lt;A href="http://msdn.microsoft.com/ja-jp/sqlserver/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/ja-jp/sqlserver/default.aspx"&gt;SQL Server 2008 Express Edition&lt;/A&gt;で確認を行いました。このアダプターでは、以下のようなデータ型の対応付けが行われています。&lt;BR&gt;&lt;PRE&gt;:primary_key =&amp;gt; "int not null identity(1,1) primary key ",
:string      =&amp;gt; { :name =&amp;gt; "varchar", :limit =&amp;gt; 255 },
:text        =&amp;gt; { :name =&amp;gt; "text" },
:integer     =&amp;gt; { :name =&amp;gt; "int" },
:float       =&amp;gt; { :name =&amp;gt; "float" },
:decimal     =&amp;gt; { :name =&amp;gt; "numeric" },
:datetime    =&amp;gt; { :name =&amp;gt; "datetime" },
:timestamp   =&amp;gt; { :name =&amp;gt; "datetime" },
:time        =&amp;gt; { :name =&amp;gt; "datetime" },
:date        =&amp;gt; { :name =&amp;gt; "datetime" },
:binary      =&amp;gt; { :name =&amp;gt; "varbinary", :limit =&amp;gt; 'MAX' },
:binary      =&amp;gt; { :name =&amp;gt; "image" },
:boolean     =&amp;gt; { :name =&amp;gt; "bit" }
&lt;/PRE&gt;&lt;BR&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;5.WEBrickに対するパッチを投入します&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;「C\Ruby\lib\ruby\1.8\webrick\httprequest.rb」へパッチを投入します。&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;パッチは、&lt;A href="http://gist.github.com/111988" target=_blank mce_href="http://gist.github.com/111988"&gt;githubから&lt;/A&gt;入手します。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;　パッチの内容は、２か所あります。最初に、163行目のHttpRequestクラスのto_sメソッドです。&lt;BR&gt;&lt;PRE&gt;#      ret = @request_line.dup
#      @raw_header.each{|line| ret &amp;lt;&amp;lt; line }
       ret = @request_line ? @request_line.dup : ""
       @raw_header.each{|line| ret &amp;lt;&amp;lt; line } if @raw_header
&lt;/PRE&gt;&lt;BR&gt;&lt;BR&gt;次は、8行目(require)の直後に追加します。&lt;BR&gt;&lt;PRE&gt;# IronRuby bug: IO#read seems to chop off the first char
class TCPSocket
  def read size
    recv size
  end
end
&lt;/PRE&gt;&lt;BR&gt;
&lt;P&gt;&lt;STRONG&gt;6.Railsからエンコード指定を取り除きます。2.3.2のRailsはデフォルトがUTF-8のエンコーディングです。が、IronRubyではUTF-8エンコーディングの文字列が組み合わさるとバグが発生するためです&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;「C:\Ruby\lib\ruby\gems\1.8\gems\rails-2.3.2\lib\initializer.rb」の「initializ_encoding」メソッドの実装をコメントアウトします。&lt;BR&gt;407行目の「$KCODE='u' if RUBY_VERSION &amp;lt; '1.9'」をコメントにします。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;ここまでで、準備が完了です。ここからは、Railsアプリケーションを作成していく作業となります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;7.新しいRailsアプリケーションを作成します&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;「irails IronRubyOnRails」コマンドを使用します。&lt;BR&gt;「3.環境変数」を設定したコマンドプロンプトで作業を行います。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;(注)成功すれば、コマンドプロンプトに「create ....」というログが表示されます。IronRubyでは、各種のコマンドの先頭に「&lt;STRONG&gt;i&lt;/STRONG&gt;」というプレフィックスが付きます。インタラクティブRuby(irb)なら、「iirb」となります。これらのコマンドは、Windows向けにはBATファイルがあり、Linux向けには拡張子無しのシェルスクリプトファイルが提供されています。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;8.データベースの設定を行います&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;IronRubyOnRails\config\database.ymlファイルを編集します。&lt;/LI&gt;&lt;/UL&gt;&lt;PRE&gt;development:
  adapter: mssql
  host: (local)\SQLEXPRESS
  database: ironruby_dev
  integrated_security: true
&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;上記のように設定するか、host、database、integrated_securityパラメータを「connection_string」パラメータで置き換えます。&lt;/P&gt;
&lt;P&gt;続いて「ironruby_dev」という名前のデータベースをSQL Serverで作成します。&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=ja&amp;amp;FamilyID=08e52ac2-1d62-45f6-9a4a-4b76a8564a2b" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=ja&amp;amp;FamilyID=08e52ac2-1d62-45f6-9a4a-4b76a8564a2b"&gt;SQL Server 2008 Management Studio Express&lt;/A&gt;を使用するのが簡単です。 &lt;BR&gt;(注)このパラメータ形式は、SQL Serverをご存じな方には馴染み易いことでしょう。ADO.NETなどで、指定する接続文字列をパラメータとして指定しているのです。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;9.Scaffolding を使ってサンプルのアプリケーションを作成します&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;「ir script/generate scaffold post title:string body:text published:boolean」コマンドをIronRubyOnRailsフォルダで実行します。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;(注)成功すればコマンドプロンプトに「create....」というログが表示されます。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;10.アプリケーションコントローラーのバグ対応を行います。&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;「app\controllers\posts_controller.rb」で「default_url_options」メソッドをpublicに定義します。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;BR&gt;&lt;PRE&gt;class PostsController &amp;lt; ApplicationController
...
...
  # 私の場合は、最後に追加しました
  public :default_url_options
end

&lt;/PRE&gt;
&lt;P&gt;(注)この変更は、&lt;A href="http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=1354" target=_blank mce_href="http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=1354"&gt;IronRubyのバグ1354&lt;/A&gt;に対する対応です。rails 2.3.2では、default_url_optionsメソッドがprotectedとして定義されています。IronRubyでは、publicである必要があります。publicに変更しないでWEBrickを起動すると、http リクエストに対するレスポンスが帰ってきません。default_url_optionsメソッドのエラーがコンソールに出力される場合もあります。&lt;/P&gt;
&lt;P&gt;11.データベースのテーブルを作成します&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;「irake db:migrate」コマンドを実行してテーブルを作成します。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;BR&gt;&lt;PRE&gt;C:\IronRubyOnRails&amp;gt;irake db:migrate
(in C:/IronRubyOnRails)
==  CreatePosts: migrating =================
-- create_table(:posts)
   -&amp;gt; 0.0550s
   -&amp;gt; -1 rows
==  CreatePosts: migrated (0.0990s) ========&lt;/PRE&gt;成功すれば上記のように「create table...」などのログがコンソールに出力されます。失敗すると以下のように「System::Text::EncoderFallbackException」が出力されます。&lt;BR&gt;&lt;PRE&gt;C:\IronRubyOnRails&amp;gt;irake db:migrate
(in C:/IronRubyOnRails)
rake aborted!
rake aborted!
mscorlib:0:in `GetBytes': 値が有効な範囲にありません。
          (System::Text::EncoderFallbackException)
        from :0:in `write'
        from :0:in `puts'
.....&lt;/PRE&gt;&lt;BR&gt;失敗した場合は、「config\database.yml」の設定内容を見直してください。host: (local)\SQLEXPRESSなどを書き間違えると、このエラーが出力されます(私も書き間違いをしていて、このエラー原因を探すのに苦労しました)。&lt;BR&gt;
&lt;P&gt;&lt;STRONG&gt;11.WEBrickを起動してテストを行います&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;「ir script/server」コマンドを実行します。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;BR&gt;&lt;PRE&gt;C:\IronRubyOnRails&amp;gt;ir script/server
=&amp;gt; Booting WEBrick
=&amp;gt; Rails 2.3.2 application starting on http://0.0.0.0:3000
=&amp;gt; Call with -d to detach
=&amp;gt; Ctrl-C to shutdown server
[2009-06-09 17:14:17] INFO  WEBrick 1.3.1
[2009-06-09 17:14:17] INFO  ruby 1.8.6 (2008-05-28) [i386-mswin32]
[2009-06-09 17:14:17] INFO  WEBrick::HTTPServer#start:
                                            pid=4568 port=3000
&lt;/PRE&gt;&lt;BR&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;正常に起動すれば、上記のようなログが出力されます。しかしながら、私の環境(Windows Vista with SP2)では少し時間がかかります。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ブラウザで「http://localhost:3000/」へアクセスすれば、railsのページが表示されることでしょう。&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/rails%20aborted_2.png" mce_href="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/rails%20aborted_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="rails aborted" border=0 alt="rails aborted" src="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/rails%20aborted_thumb.png" width=244 height=178 mce_src="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/rails%20aborted_thumb.png"&gt;&lt;/A&gt; 
&lt;LI&gt;「about your application's environment」をクリックします。&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/about%20application%20environment_2.png" mce_href="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/about%20application%20environment_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="about application environment" border=0 alt="about application environment" src="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/about%20application%20environment_thumb.png" width=244 height=178 mce_src="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/about%20application%20environment_thumb.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;BR&gt;正常に実行されれば実行環境が上記のように表示されます。が、この情報はRailsのInfoControllerが処理する関係で、IronRubyとは表示されることはありません。あくまでも、Ruby 1.8系として表示されるだけです。 
&lt;LI&gt;次に「http://localhost:3000/posts」へブラウザでアクセスします。&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/Listing%20posts_2.png" mce_href="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/Listing%20posts_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Listing posts" border=0 alt="Listing posts" src="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/Listing%20posts_thumb.png" width=244 height=178 mce_src="http://blogs.msdn.com/blogfiles/shozoa/WindowsLiveWriter/RunningRubyonRailsonIronRuby_D6F3/Listing%20posts_thumb.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;BR&gt;上記のようにpostsテーブルの一覧が表示されます。new postsのリンクをクリックしてデータを追加していけば、問題なく動作することを確認していくことができます。&lt;BR&gt;この時点で、コンソールを確認すると以下のようなログが出力されていました。&lt;BR&gt;&lt;PRE&gt;Processing Rails::InfoController#properties
 (for 127.0.0.1 at 2009-06-09 17:21:5) [GET]
Completed in 584ms (View: 189, DB: 0) | 200 OK
             [http://localhost/rails/info/proerties]


Processing PostsController#index
 (for 127.0.0.1 at 2009-06-09 17:25:21) [GET]
Rendering template within layouts/posts
Rendering posts/index
Completed in 735ms (View: 540, DB: 0) | 200 OK
            [http://localhost/posts]&lt;/PRE&gt;&lt;BR&gt;これらのログが表示されるのが、私の環境では少し遅くなっています。ブラウザでは問題なく動作しているのですが、WEBrickのログ出力が遅くなるという問題があるようです。もしかすると、環境依存かもしれません。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;ここまでの動作で、IronRubyを使ってRuby on Rails 2.3.2が動作していることを確認することができました。データベースとしては、SQL Serverです。まだまだパフォーマンス的な問題や、バグが残っているにしてもIronRubyによる Ruby on Railsの実現が近くなってきたのを感じ取ることができます。是非、皆さんも試してみてください。そしてバグを見つけたら、フィードバックをしてください。&lt;/P&gt;
&lt;P&gt;PS.昨年のRailsカンファレンスでもIronRubyでrailsを動かしていますが、日本では情報が少ないように感じています。是非、皆さんも動かしてみてください。&lt;/P&gt;
&lt;P&gt;追記:WEBrickへのパッチを投入するファイル名を追加しました。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9713435" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/IronRuby/default.aspx">IronRuby</category></item><item><title>DLR を使った Excel プログラミング</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx</link><pubDate>Tue, 02 Jun 2009 07:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9683535</guid><dc:creator>shozoa</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9683535.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9683535</wfw:commentRss><description>&lt;P&gt;Visual Studio 2010ベータ1のウォークスルーの中に &lt;A href="http://msdn.microsoft.com/en-us/library/dd867746.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd867746.aspx"&gt;Office プログラマビリティ&lt;/A&gt; があります。このウォークスルーの中で、1か所だけ 動的呼び出しになると記述されたところがあります。この個所を、このウォークスルーではNo PIA(埋め込みPIA)というシナリオを確認するために、最終的には、キャストします。なぜキャストするかといえば、埋め込みPIAでは必要な型情報のみを取り込むからだと説明されています。この内容は、さておきNo PIAにしないコードの抜粋を以下に引用します。 &lt;PRE&gt;public class Account
{
    public int ID { get; set; }
    public double Balance { get; set; }
}

using Excel = Microsoft.Office.Interop.Excel;
class Program
{
    static void Main(string[] args)
    {
        var checkAccounts = new List&amp;lt;Account&amp;gt; {
            new Account { ID = 345, Balance = 541.27 },
            new Account { ID = 123, Balance = -127.44 } };
    
        DisplayInExcel(checkAccounts, (account, cell) =&amp;gt;
        {   cell.Value2 = account.ID;
            cell.get_Offset(0, 1).Value2 = account.Balance;
            if (account.Balance &amp;lt; 0)
            {   cell.Interior.Color = 255;
                cell.get_Offset(0, 1).Interior.Color = 255;
            }
        });
    }

    public static void DisplayInExcel(
           IEnumerable&amp;lt;Account&amp;gt; accounts,
           Action&amp;lt;Account, Excel.Rage&amp;gt; DisplayFunc)
    {
        var xl = new Excel.Application();
        xl.Workbooks.Add();
        xl.Visible = true;
        xl.get_Range("A1").Value2 = "ID";
        xl.get_Range("B1").Value2 = "Balance";
        xl.get_Range("A2").Select();
        foreach (var ac in accounts)
        {   DisplayFunc(ac, xl.ActiveCell);
            xl.ActiveCell.get_Offset(1, 0).Select();
        }
        xl.get_Range("A1:B3").Copy();

        &lt;FONT color=#ff0000&gt;xl.Columns[1].AutoFit();
        xl.Columns[2].AutoFit();&lt;/FONT&gt;
    }
}
&lt;/PRE&gt;&lt;BR&gt;「&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;xl.Columns[1].AutoFit();&lt;/FONT&gt;&lt;/STRONG&gt;」が実行時に解決されて、AutoFitメソッドが呼ばれます。この実行時に解決するというのは、xl.Columns[1]が実行時にRangeオブジェクトを返すために、AutoFitメソッドを呼び出せるようになるという意味です。このウォークスルーでは埋め込みPIAを確認するためですが、最終的に「((Excel.Range) xl.Columns[1]).AutoFit();」とキャストを追加するようになります。 
&lt;P&gt;　しかし、.NET Framework 4.0ベータ1には動的呼び出しをサポートするために DLRが含まれています。DLRを使うようにすることで、埋め込みPIAどころか、型情報自体を実行時に解決することができます。そのように改造した Programクラスを以下に示します。&lt;BR&gt;&lt;PRE&gt;&lt;FONT color=#ff0000&gt;//using Excel = Microsoft.Office.Interop.Excel;&lt;/FONT&gt;
class Program
{
    static void Main(string[] args)
    {
        var checkAccounts = new List&amp;lt;Account&amp;gt; {
            new Account { ID = 345, Balance = 541.27 },
            new Account { ID = 123, Balance = -127.44 } };
    
        DisplayInExcel(checkAccounts, (account, cell) =&amp;gt;
        {   cell.Value2 = account.ID;
            cell.&lt;FONT color=#ff0000&gt;Offset&lt;/FONT&gt;(0, 1).Value2 = account.Balance;
            if (account.Balance &amp;lt; 0)
            {   cell.Interior.Color = 255;
                cell.&lt;FONT color=#ff0000&gt;Offset&lt;/FONT&gt;(0, 1).Interior.Color = 255;
            }
        });
    }

    public static void DisplayInExcel(
           IEnumerable&amp;lt;Account&amp;gt; accounts,
           Action&amp;lt;Account, &lt;FONT color=#ff0000&gt;dynamic&lt;/FONT&gt;&amp;gt; DisplayFunc)
    {
        &lt;FONT color=#ff0000&gt;dynamic&lt;/FONT&gt; xl = &lt;FONT color=#ff0000&gt;GetComInstance("Excel.Application")&lt;/FONT&gt;;
        xl.Workbooks.Add();
        xl.Visible = true;
        xl.&lt;FONT color=#ff0000&gt;Range&lt;/FONT&gt;("A1").Value2 = "ID";
        xl.&lt;FONT color=#ff0000&gt;Range&lt;/FONT&gt;("B1").Value2 = "Balance";
        xl.&lt;FONT color=#ff0000&gt;Range&lt;/FONT&gt;("A2").Select();
        foreach (var ac in accounts)
        {   DisplayFunc(ac, xl.ActiveCell);
            xl.ActiveCell.&lt;FONT color=#ff0000&gt;Offset&lt;/FONT&gt;(1, 0).Select();
        }
        xl.&lt;FONT color=#ff0000&gt;Range&lt;/FONT&gt;("A1:B3").Copy();

        xl.Columns[1].AutoFit();
        xl.Columns[2].AutoFit();
    }
    &lt;FONT color=#ff0000&gt;// COMインスタンス作成用のヘルパーメソッド
    public static dynamic GetComInstance(string progID)
    {   Type comType = Type.GetTypeFromProgID(progID);
        return System.Activator.CreateInstance(comType);
    }&lt;/FONT&gt;
}
&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;プロジェクトからPIAアセンブリへの参照を削除して、ビルドすれば DLR を活用した動的呼び出しが完成します。C#では、PIAを使っている時にGet_RangeやGet_Offsetというメソッドだったことにも注意してください。VBと同じように「Get_」プレフィックスのつかないメソッドで呼び出せるようになります。これは、dynamicキーワードによってC# Binderが DLR のCOM呼び出し(VB6のレイトバインディングと同等)を呼び出すからです。&lt;/P&gt;
&lt;P&gt;VB のウォークスルーのコードも、型名を Object に変更すれば、同じように動的呼び出しを実現することができます。VBの場合は、VBコンパイラがVB Binderである &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.compilerservices.newlatebinding(VS.100).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.compilerservices.newlatebinding(VS.100).aspx"&gt;NewLateBindingクラス&lt;/A&gt;を利用するコードを出力することで実現しています。&lt;/P&gt;
&lt;P&gt;PIAがあれば実行時の型変換の規則がありますので実行速度的には良いでしょうが、DLRを使った動的呼び出しも私には良さそうに思えます。皆さんは、どちらがお好きでしょうか？&lt;/P&gt;
&lt;P&gt;追記:VBではNewLateBindingクラスが活躍しますが、DLRに対する呼び出しなどは IDOBinderクラスとIDOUtilsクラスを使って処理しているようです。C#では、CTPの時と違いMicrosoft.CSharp.dllアセンブリにRuntimeBinderネームスペースが存在しています。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9683535" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category></item><item><title>IronPython 2.6 CTP for .NET Framework Beta1 が公開されました</title><link>http://blogs.msdn.com/shozoa/archive/2009/05/21/released-ironpython-2-6-ctp-for-net-beta1.aspx</link><pubDate>Thu, 21 May 2009 02:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9633067</guid><dc:creator>shozoa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9633067.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9633067</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://ironpython.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27320" target=_blank mce_href="http://ironpython.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27320"&gt;.NET Framework 4.0 ベータ1に同期したCTP&lt;/A&gt;が公開されました。これで C#のdynamicキーワードを使って、Pythonスクリプトを実行することができます。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9633067" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/Python/default.aspx">Python</category></item><item><title>Visual Studio 2010 Beta1 がリリースされました</title><link>http://blogs.msdn.com/shozoa/archive/2009/05/19/released-visual-studio-2010-beta1.aspx</link><pubDate>Tue, 19 May 2009 09:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9627062</guid><dc:creator>shozoa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9627062.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9627062</wfw:commentRss><description>&lt;P&gt;Visual Studio 2010ベータ1が MSDN サブスクリプション会員向けにリリースされました。Readmeによると &lt;A href="http://msdn.microsoft.com/en-us/library/dd831853(VS.100).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd831853(VS.100).aspx"&gt;ドキュメント&lt;/A&gt;はオンラインだけの提供だそうです。&lt;BR&gt;アナウンスされていましたように F# が含まれています。ドキュメントでは、 &lt;A href="http://msdn.microsoft.com/en-us/library/dd233154(VS.100).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd233154(VS.100).aspx"&gt;Visual F#&lt;/A&gt; となっています。含まれているのは、F# のコアだけでパワーパックなどは含まれていません。&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd409230(VS.100).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd409230(VS.100).aspx"&gt;.NET Framework 4.0 What's New&lt;/A&gt; には、BigInteger や Tuple といった新しいデータ型が追加されたと記載されています。そして、DLR をサポートするネームスペースである &lt;A href="http://msdn.microsoft.com/en-us/library/system.dynamic(VS.100).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/system.dynamic(VS.100).aspx"&gt;System.Dynamic&lt;/A&gt; も追加されています。&lt;/P&gt;
&lt;P&gt;Visual Studio 2010 Beta1 に同期した IronPython のバイナリなどが公開されれば、C# の dynamic キーワードで Python スクリプトなどを試せることでしょう。&lt;/P&gt;
&lt;P&gt;PS. コードギャラリの C# Future や VB Future のサンプルコードがベータ1向けに更新されています。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9627062" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/F_2300_/default.aspx">F#</category></item><item><title>Silverline を試してみました</title><link>http://blogs.msdn.com/shozoa/archive/2009/03/23/tried-silverline.aspx</link><pubDate>Mon, 23 Mar 2009 09:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9500613</guid><dc:creator>shozoa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9500613.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9500613</wfw:commentRss><description>&lt;P&gt;昨年のRails Conference 2008 でデモが行われた Ruby on Rails のプラグインである Silverline を試してみました。このプラグインは、RoR 上で Silverlight アプリを生成するためのものです。&lt;A href="http://silverline.schementi.com/" target=_blank mce_href="http://silverline.schementi.com/"&gt;Web上でのデモ&lt;/A&gt;も確認することができます。この環境を構築するの使用したのは、以下のものになります。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://rubyforge.org/projects/rubyinstaller/" target=_blank mce_href="http://rubyforge.org/projects/rubyinstaller/"&gt;One Click Ruby Installer&lt;/A&gt;&amp;nbsp; 1.8.6-27 RC2 
&lt;LI&gt;Ruby on Rails 2.0.2&lt;BR&gt;gem install rails --version 2.0.2 --include-dependencyでインストール 
&lt;LI&gt;&lt;A href="http://github.com/jschementi/silverline/tree/master" target=_blank mce_href="http://github.com/jschementi/silverline/tree/master"&gt;Silverline&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://github.com/jschementi/silverline-demos/tree/master" target=_blank mce_href="http://github.com/jschementi/silverline-demos/tree/master"&gt;Silverline-Demos&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://rubyforge.org/frs/?group_id=254&amp;amp;release_id=25302" target=_blank mce_href="http://rubyforge.org/frs/?group_id=254&amp;amp;release_id=25302"&gt;sqlite3-ruby 1.2.4&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://sqlite.org/" target=_blank mce_href="http://sqlite.org/"&gt;SQLite&lt;/A&gt; 3.6.11&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;BR&gt;Ruby on Rails をgemでインストールした時に問題になったのが、proxy設定です。これには、「--http-proxy http://&amp;lt;サーバのIPアドレス&amp;gt;:&amp;lt;ポート名&amp;gt;」オプションを指定することで対応しました。必要なモジュールのインストールが完了したという前提で、Silverline-demosに含まれるサンプルを動作させた方法を以下に記述します。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;新規のRailsアプリケーションを作成する&lt;BR&gt;コマンド「rails new-silverline」を使って新規のrailsアプリケーションを作成します。 
&lt;LI&gt;以下はrailsの環境設定です&lt;BR&gt;&lt;PRE&gt;config\database.ymlファイル
development:
  adapter: sqlite3
  encoding: utf-8     # 追加
  database: db/development.sqlite3
  timeout: 5000
&lt;/PRE&gt;&lt;BR&gt;&lt;PRE&gt;config\environment.rbファイル

Rails::Initializer.run do |config|
  #
  :略
  :
  # 以下を追加
  config.action_controller.default_charset='UTF-8'
end&lt;/PRE&gt;&lt;BR&gt;
&lt;LI&gt;Silverlineプラグインのインストール&lt;BR&gt;gitを使ってcloneしたsilverlineフォルダを vendor\pluginsフォルダへコピーします。 
&lt;LI&gt;app\controlers\client_controller.rbを準備&lt;BR&gt;silverline-demos\app\controlers\client_controller.rbをコピーします。この理由は、silverlineプラグインがclient_controller.rbをチェックするためです。 
&lt;LI&gt;app\views\layouts\client.html.erbを準備&lt;BR&gt;silverline-demos\app\views\layouts\client.html.erb をコピーします。これが、先程のコントローラーに対するビューになります。&lt;BR&gt;この時点で「ruby script/server」でサーバーを起動して、http://localhost:3000/clientへ アクセスすることで動作を確認することができます。「Show Time」をクリックすることで、時刻を取得した新しいページがレンダリングされると思います。 
&lt;LI&gt;私の場合は、public\silverline.html(demosで提供されるindex.html)とpublic\clientaccesspolicy.xmlを準備しました。&lt;BR&gt;両方ともsilverline-demos\publicにあります。&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;ここまでで、本当に基本的なSilverlightアプリケーションが動作しました。UIとしては、HTMLでコードとしてはIronRubyというものです。この動きの延長として、Read Evalute Print Loop(略してrepl、Web上のコンソール)のサンプルとして「TryRuby」があります。このTryRuby環境の作り方を以下を記述します。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;必要なファイルをsilverline-demosからコピーします。&lt;BR&gt;app\controllers\tryruby_controller.rb&lt;BR&gt;app\helpers\tryruby_helper.rb&lt;BR&gt;app\views\layouts\tryruby.html.erb&lt;BR&gt;app\views\tryruby(_evalute.rb、index.html.erb)&lt;BR&gt;app\public\images(loading2.gif、loading.net.gif)&lt;BR&gt;app\public\javascripts(scrolling.js)&lt;BR&gt;app\public\stylesheets(error.css) 
&lt;LI&gt;index.html.erbの11行目を以下のように修正します&lt;BR&gt;シングルクオーテーションが抜けているためです&lt;BR&gt;&lt;PRE&gt;&amp;lt;a href="javascript:void(0)" mce_href="javascript:void(0)" id="next" onclick="alert('next')"&amp;gt;&lt;/PRE&gt;
&lt;LI&gt;&lt;PRE&gt;config\route.rb に JSON のマップを追加します&lt;BR&gt;map.connect "tryruby/instructions.:format",
 :controller =&amp;gt; 'tryruby', :action =&amp;gt; 'instructions'&lt;BR&gt;&lt;BR&gt;これで &lt;A href="http://localhost:3000/tryruby" mce_href="http://localhost:3000/tryruby"&gt;http://localhost:3000/tryruby&lt;/A&gt;へアクセスすることで動作を確認&lt;/PRE&gt;
&lt;LI&gt;&lt;PRE&gt;することができます。&lt;/PRE&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;PRE&gt;このTryRubyサンプルは、&lt;/PRE&gt;
&lt;P&gt;起動時にSilverlightからRoRのtryruby\instructionsへリクエストします。そして、返ってきたJSON形式のデータを使って、操作のガイドを表示するようになっています。&lt;/P&gt;
&lt;P&gt;silverline-demos自体を動作させるためには、以下の2つの操作が必要になります。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;「raike db:migrate」コマンドでsqlliteの環境を作成する。&lt;BR&gt;これは、postsというサンプルがDBを使用するためです。&lt;/LI&gt;
&lt;LI&gt;vender\plugins\silverlineフォルダへ、silverlineプラグインの内容をコピーする。&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;他にも動作のおかしな所もありますが、基本的な動作を以上の操作で確認することができます。これが、Ruby on Railsに対するプラグインであるsilverlineの動作になります。&lt;/P&gt;
&lt;P&gt;silverlineが行っている動作は、2つあります。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;サーバー側で必要なコンテンツを生成すると同時にclient.xapを生成して、コンテンツをブラウザに返す&lt;/LI&gt;
&lt;LI&gt;クライアント側のｌclient.xapに含まれたIronRubyスクリプトを使って、XAMLやJSONへのリクエストをサーバーへ投げること。&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;これらの動きを行うために、コントローラーやビュー(サーバー側とSilverlight側)を提供しているのがSilverlineとなります。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9500613" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/IronRuby/default.aspx">IronRuby</category></item><item><title>Tech Days 2009 Dynamic Language Runtimeで使用したサンプル</title><link>http://blogs.msdn.com/shozoa/archive/2009/01/29/tech-days-2009-dynamic-language-runtime-s-samples.aspx</link><pubDate>Thu, 29 Jan 2009 10:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9382672</guid><dc:creator>shozoa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9382672.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9382672</wfw:commentRss><description>&lt;P&gt;Tech Days 2009のT3-403 Dynamic Language Runtimeで使用したサンプルコードを公開します。このサンプルには、以下のものが含まれています。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;DynamicCS：C#4.0のDynamicキーワードを使ったサンプルです。このサンプルの実行には、Visual Studio 2010CTPとIronPython v2.0 for VS10 CTP(&lt;A href="http://www.codeplex.com/IronPython/" mce_href="http://www.codeplex.com/IronPython/"&gt;http://www.codeplex.com/IronPython/&lt;/A&gt;)が必要になります。&lt;/LI&gt;
&lt;LI&gt;AstTest:DLR 0.9のASTのみを使った Hello Worldサンプルです。&lt;/LI&gt;
&lt;LI&gt;ToosSupport:セッションでは使用しませんでしたが、DLR 0.9のホスティングAPIを使ってIronPythonを使ったAPIの使い方のサンプルです。&lt;/LI&gt;
&lt;LI&gt;MyCalc:セッションでは使用しませんでしたが、DLR 0.9を使って作成した簡単な四則演算の言語サンプルです。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;ご利用は、自己責任でお願いいたします。&lt;BR&gt;&lt;BR&gt;セッションに参加した方々へのお願いです。&lt;BR&gt;是非ともDLRやIronPython2.0、IronRubyを試してください。そして試した結果のフィードバックをしてください。開発チームは、皆さんのフィードバックを心待ちにしています。宜しくお願いいたします。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9382672" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/shozoa/attachment/9382672.ashx" length="1601716" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/Python/default.aspx">Python</category></item><item><title>Tech Days 2009 の準備に追われています</title><link>http://blogs.msdn.com/shozoa/archive/2009/01/22/now-making-contents-for-tech-days-2009.aspx</link><pubDate>Thu, 22 Jan 2009 05:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9361420</guid><dc:creator>shozoa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9361420.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9361420</wfw:commentRss><description>&lt;P&gt;只今、&lt;A href="http://www.microsoft.com/japan/events/techdays/default.mspx" target=_blank mce_href="http://www.microsoft.com/japan/events/techdays/default.mspx"&gt;Tech Days 2009&lt;/A&gt;の準備に追われています。今回は、T3-403 Dynamic Language Runtime と T3-310 F#入門を担当しています。&lt;BR&gt;&lt;BR&gt;F#に関しては、.NET対応の関数型言語ということでご存じの方もいらしゃると思います。私自身は、関数型に精通しているわけでもないのですが、手続き(命令)型に慣れていると関数型の考え方が理解しにくいかも知れません。何と言っても、Immutableという特徴がありますし、この意味に置いては変数という表現方法が無いと言っても過言ではないと思います。つまり状態(値)を保持する値(領域)に対する操作(たとえば、加算、減算など)が無いということです。四則演算した結果を新しい値(領域)として作成するという特徴を持っています。もちろん値を書き換えるために、mutableな変数も作成できるのですが。もちろん、これだけではなく、何と言ってもExpression(式)を定義できるところに特徴があります。式の中には、演算式、ラムダ式などが含まれています。&lt;BR&gt;F#を知るための情報源を以下に記載します。&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/en-us/fsharp/default.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/fsharp/default.aspx"&gt;F# Developer Center&lt;/A&gt;&lt;BR&gt;&lt;A href="http://code.msdn.microsoft.com/fsharpsamples/" target=_blank mce_href="http://code.msdn.microsoft.com/fsharpsamples/"&gt;F# サンプル(MSDN コードギャラリ）&lt;/A&gt;&lt;BR&gt;&lt;A href="http://www.codeplex.com/fsharpsamples/" target=_blank mce_href="http://www.codeplex.com/fsharpsamples/"&gt;F# サンプル(コミュニティベース)&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;現在試せる2008 Sep CTPである1.9.6.2に合わせて文法などを見るにはコードギャラリのサンプルのサンプル101が便利です。それから、&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=348f73fd-593d-4b3c-b055-694c50d2b0f3&amp;amp;DisplayLang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=348f73fd-593d-4b3c-b055-694c50d2b0f3&amp;amp;DisplayLang=en"&gt;Parallele Extentions 2008 Jun CTP&lt;/A&gt;にもF#のサンプルでRaytracerが含まれています。このサンプルは、1.9.6.2よりも前のバージョンで作成されたものです。このサンプルを1.9.6.2に移植するには、以下の手順で操作をします。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Visual Stduio 2008でF#の新しいアプリケーションを作成します。&lt;/LI&gt;
&lt;LI&gt;ソリューションエクスプローラーで、program.fsを削除します。&lt;/LI&gt;
&lt;LI&gt;サンプルのraytracer.fsを追加します(追加する順番が重要です)。&lt;/LI&gt;
&lt;LI&gt;サンプルのharness.fsを追加します(追加する順番が重要です)。&lt;/LI&gt;
&lt;LI&gt;ソリューションエクスプローラで、Parallele Extensionsで提供されるSystem.Threading.dllへの参照を追加します。&lt;/LI&gt;
&lt;LI&gt;System.Drawing.dllとSystem.Windows.Forms.dllへの参照を追加します。&lt;/LI&gt;
&lt;LI&gt;プロジェクトのプロパティでWindows アプリに設定します。&lt;/LI&gt;
&lt;LI&gt;harness.fs の do startStopButton.Click.Addメソッド呼び出し内の「renderTask &amp;lt;- Task.Create(renderLoop, taskManager )」を「renderTask &amp;lt;- Task.Create( (fun o -&amp;gt; renderLoop o ) , taskManager, TaskCreationOptions.None )」に修正します。&lt;/LI&gt;
&lt;LI&gt;ビルドします。&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;もし、raytaracer.fsとharness.fsの追加順番を間違えたら、プロジェクトファイルをテキストエディタで開いて、定義している順番を訂正してください。ビルド順序が、raytracer.fs、harness.fsになっている必要があるからです。&lt;/P&gt;
&lt;P&gt;DLR に関しては、昨年に0.9というIronPython 2.0に同期したバージョンが公開されています。そして、ドキュメント類も一緒に公開されています。このバージョンのホスティングモデルも&lt;A href="http://blogs.msdn.com/shozoa/archive/2008/09/19/dlr-beta5-s-detail.aspx" target=_blank mce_href="http://blogs.msdn.com/shozoa/archive/2008/09/19/dlr-beta5-s-detail.aspx"&gt;IronPython 2.0 ベータ5&lt;/A&gt;と同じになっています。このため以前から作成していた、簡単な言語を作るシリーズのサンプルもベータ5に対応したものが、そのままで動作しています。PDCで公開されたVisual Studio 2010CTPにおけるDLR対応を確認するには、&lt;A href="http://www.codeplex.com/IronPython/" target=_blank mce_href="http://www.codeplex.com/IronPython/"&gt;IronPython v2 VS10 CTP&lt;/A&gt;が必要になります。 この組み合わせで、C#に追加されたdynamicキーワード使った場合に、C#ようのBinderが使われていることを確認しています。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9361420" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/F_2300_/default.aspx">F#</category></item><item><title>IronPython 2.0 リリース</title><link>http://blogs.msdn.com/shozoa/archive/2008/12/11/ironpython-2-0-release.aspx</link><pubDate>Thu, 11 Dec 2008 06:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9194508</guid><dc:creator>shozoa</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9194508.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9194508</wfw:commentRss><description>&lt;P&gt;ついに&lt;A href="http://www.codeplex.com/IronPython/" target=_blank mce_href="http://www.codeplex.com/IronPython/"&gt;IronPython 2.0&lt;/A&gt;がリリースされました。それと同期するように&lt;A href="http://www.codeplex.com/dlr/" target=_blank mce_href="http://www.codeplex.com/dlr/"&gt;DLR&lt;/A&gt;も公開されています。ふむDLRのバージョンは0.9となっていますが、12/10にUpされているのでRC2に同期した0.9から、どの程度更新されたかは不明です。&lt;/P&gt;
&lt;P&gt;DLR-0.9をダウンロードしてみると、中にIronRuby、ToyScript、IronPythonも含まれています。IronPython.dllのバージョンを見ると2.0.11121.0なのでIronPython 2.0に含まれているのと同じバージョンになります。異なるのはタイムスタンプだけです。また、DLRに関するドキュメントがWORD文書で5つほど含まれています。DLRをホスティングするには、dlr-spec-hosting.docという文書が有益です。&lt;/P&gt;
&lt;P&gt;PS:Silverlight Dynamic Lamguage SDKに含まれているバイナリと同じものが、DLR-0.9に含まれています。今回のソースコードに対応したものは、まだ公開されていないようです。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9194508" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/Python/default.aspx">Python</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/IronRuby/default.aspx">IronRuby</category></item><item><title>IronPython 2.0RC2</title><link>http://blogs.msdn.com/shozoa/archive/2008/11/27/ironpython-2-0rc2.aspx</link><pubDate>Thu, 27 Nov 2008 12:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9146079</guid><dc:creator>shozoa</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9146079.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9146079</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://www.codeplex.com/IronPython/" target=_blank mce_href="http://www.codeplex.com/IronPython/"&gt;出ていました&lt;/A&gt;。RC2に同期しているらしい、&lt;A href="http://www.codeplex.com/dlr/" target=_blank mce_href="http://www.codeplex.com/dlr/"&gt;DLR 0.9&lt;/A&gt;も公開されています。&lt;/P&gt;
&lt;P&gt;今月は、忙しくてなかなかブログを更新できていません。Silverlight Dynamic Languageシリーズも次回位で終了にしたいのですが、時間が取れていません。期待して方々に、改めてお詫びを申し上げます。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9146079" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/Python/default.aspx">Python</category></item><item><title>DLR プロジェクト</title><link>http://blogs.msdn.com/shozoa/archive/2008/10/29/DLR-Project.aspx</link><pubDate>Wed, 29 Oct 2008 12:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9021906</guid><dc:creator>shozoa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9021906.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9021906</wfw:commentRss><description>&lt;P&gt;ちょっとしたお知らせです。&lt;BR&gt;DLR自体が&lt;A class="" title=単独のプロジェクト href="http://www.codeplex.com/dlr" target=_blank mce_href="http://www.codeplex.com/dlr"&gt;単独のプロジェクト&lt;/A&gt;として11月から開始されるようです。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9021906" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Silverlight Dynamic Language SDK の使い方4</title><link>http://blogs.msdn.com/shozoa/archive/2008/10/28/silverlight-dynamic-language-sdk-4.aspx</link><pubDate>Tue, 28 Oct 2008 08:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9019735</guid><dc:creator>shozoa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9019735.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9019735</wfw:commentRss><description>&lt;P&gt;今回は、 Chiron.exeの/bや/z、/mオプションで作成されるアプリケーション・マニフェストを説明します。例題とするのは、&lt;A href="http://silverlight.net/samples/sl2/dlrconsole/index.html" target=_blank mce_href="http://silverlight.net/samples/sl2/dlrconsole/index.html"&gt;DLR Console&lt;/A&gt;で使用されているAppManifest.xamlです。&lt;BR&gt;&lt;PRE&gt;&amp;lt;Deployment 
  xmlns="http://schemas.microsoft.com/client/2007/deployment"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  RuntimeVersion="2.0.31005.00" 
  EntryPointAssembly="Microsoft.Scripting.Silverlight"
  EntryPointType=
  "Microsoft.Scripting.Silverlight.DynamicApplication"
&amp;gt;
  &amp;lt;Deployment.Parts&amp;gt;
    &amp;lt;!-- Add additional assemblies here --&amp;gt;
    &amp;lt;AssemblyPart Source="Microsoft.Scripting.Silverlight.dll"/&amp;gt;
    &amp;lt;AssemblyPart Source="Microsoft.Scripting.Core.dll" /&amp;gt;
    &amp;lt;AssemblyPart Source="Microsoft.Scripting.dll" /&amp;gt;
    &amp;lt;AssemblyPart Source=
          "Microsoft.Scripting.ExtensionAttribute.dll" /&amp;gt;
    &amp;lt;AssemblyPart Source="IronPython.dll" /&amp;gt;
    &amp;lt;AssemblyPart Source="IronPython.Modules.dll" /&amp;gt;
    &amp;lt;AssemblyPart Source="IronRuby.dll" /&amp;gt;
    &amp;lt;AssemblyPart Source="IronRuby.Libraries.dll" /&amp;gt;
    &amp;lt;AssemblyPart Source="Microsoft.JScript.Runtime.dll" /&amp;gt;
    &amp;lt;AssemblyPart Source="Microsoft.JScript.Compiler.dll" /&amp;gt;
  &amp;lt;/Deployment.Parts&amp;gt;
&amp;lt;/Deployment&amp;gt;&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;最初に取り上げるのが、Deployment要素のEntryPointAssembly属性とEntryPointType属性です。ここには、以下のように記述されています。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;EntryPointAssembly="Microsoft.Scripting.Silverlight"&lt;/STRONG&gt; 
&lt;LI&gt;&lt;STRONG&gt;EntryPointType="Microsoft.Scripting.Silverlight.DynamicApplication"&lt;/STRONG&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;属性名が表しているようにSilverlight2.0対応のランタイムが起動するプログラムが格納されたアセンブリと開始するクラスを指定しています。このDynamicApplicationクラスこそが、SilverlightとDLRを結びつけるものです。このエントリポイントのモデルは、DLRに限った話ではなくC#やVBを使ったSilverlightアプリケーションでも使用されているものです。そして、DynamicApplicationクラスはSystem.Windows.Applicationクラスを継承しています。&lt;/P&gt;
&lt;P&gt;Deployment.Parts要素内のAssemblyPart要素にSilverlightランタイムが読み込むアセンブリをSource属性で指定します。ここで指定しているアセンブリを以下に示します。&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width=519 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=210&gt;アセンブリ名&lt;/TD&gt;
&lt;TD class="" vAlign=top width=303&gt;説明&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=210&gt;Microsoft.Scripting.Silverlight.dll&lt;/TD&gt;
&lt;TD class="" vAlign=top width=303&gt;Silverlight 2.0ランタイムのエントリポイントです。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=210&gt;Microsoft.Scripting.Core.dll&lt;/TD&gt;
&lt;TD class="" vAlign=top width=303&gt;DLRの本体です。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=210&gt;Microsoft.Scripting.&lt;BR&gt;ExtensionAttribute.dll&lt;/TD&gt;
&lt;TD class="" vAlign=top width=303&gt;IronPython 2.0RC1から追加されたDLRの補助アセンブリです。ビルド時のSystem.Core.dllとの衝突を回避するために導入されました。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=210&gt;Microsoft.Scripting.dll&lt;/TD&gt;
&lt;TD class="" vAlign=top width=303&gt;DLRを使用するための各種ヘルパーです。&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;BR&gt;これ以外のアセンブリが、動的言語のためのものです。アセンブリ名から、IronPython、IronRuby、Managed JScript用がどれかというのは自明でしょう。そしてSource属性は、上記のような書き方以外にURLによる記述も可能です。URLを使った表記の場合は、相対パスではなく絶対パス(http://で始まる)の記述になります。URLで記述した場合は、xapファイル内に対象のアセンブリを含める必要はありません。&lt;/P&gt;
&lt;P&gt;プログラムを開発する上でSilverlight SDKなどで提供される拡張アセンブリを使用する場合は、AssemblyPart要素に記述する必要とxapファイルに含める必要があります。Visual StudioのSilverlightプロジェクトでは、この一連の作業をVisual Stduioが行ってくれます。動的言語で開発する場合は、自分でAppManifest.xamlへの記述とxapファイルへのアセンブリをパッケージングする必要があります。後は、使用される動的言語によって追加したアセンブリに対する参照を記述するれば、スクリプトの中から使用することが可能になります。&lt;BR&gt;&lt;PRE&gt;#IronPython
import clr
clr.AddReference(アセンブリ識別子かアセンブリ名)
import文かfrom -- import 文で参照を行う&lt;/PRE&gt;&lt;BR&gt;&lt;PRE&gt;#IronRuby
require 'アセンブリ識別子'
&lt;/PRE&gt;&lt;BR&gt;
&lt;P&gt;上記のように参照を行うことで、スクリプトの中から自由に参照したアセンブリを使用することができるようになります。ちなみに、アセンブリ識別子とは「System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e」という形式のことです。&lt;/P&gt;
&lt;P&gt;最後に添付のapp.pyは、最初にご紹介したDLR Consoleのキーマッピングを日本語キーボード用に変更(TextInputHandlerクラス)したものです。ライセンスは、Silverlight Dynamic Language SDKがMS-PLですので、それに準拠したご使用をお願いいたします。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9019735" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/shozoa/attachment/9019735.ashx" length="75184" type="application/octet-stream" /><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/Python/default.aspx">Python</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/IronRuby/default.aspx">IronRuby</category></item><item><title>Silverlight Dynamic Language SDK の使い方3</title><link>http://blogs.msdn.com/shozoa/archive/2008/10/27/silverlight-dynamic-language-sdk-3.aspx</link><pubDate>Mon, 27 Oct 2008 10:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9017698</guid><dc:creator>shozoa</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9017698.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9017698</wfw:commentRss><description>&lt;P&gt;Dynamic Language SDK で提供されるスクリプトのserver.batとは、chiron.exeをラップしただけのものです。このため指定できるオプションを確認するには、「/?」か「/h」オプションを指定します。指定できるオプションを以下に示します。&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width=506 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=145&gt;オプション&lt;/TD&gt;
&lt;TD class="" vAlign=top width=359&gt;
&lt;CENTER&gt;説　　　明&lt;/CENTER&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=149&gt;/d:パス 又は /dir、/directory&lt;/TD&gt;
&lt;TD class="" vAlign=top width=359&gt;アプリケーション(スクリプトやプログラム)を格納しているフォルダを指定します。デフォルトは「app」になります。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=153&gt;/x:xapファイル 又は /xap、/xapfile&lt;/TD&gt;
&lt;TD class="" vAlign=top width=359&gt;xapファイルを作成する場合に「/x:app.xap」のようにxapファイルを指定します。/dで指定したフォルダの中身がxapファイルに格納されます。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=156&gt;/n 又は /nologo&lt;/TD&gt;
&lt;TD class="" vAlign=top width=359&gt;バナーの表示を抑制します。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=158&gt;/s 又は /silent&lt;/TD&gt;
&lt;TD class="" vAlign=top width=359&gt;コンソール出力を抑制します。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=160&gt;/z:xapファイル 又は /zipdlr&lt;/TD&gt;
&lt;TD class="" vAlign=top width=359&gt;DLRアプリケーション向けのxapファイルを生成します。/dで指定したフォルダにAppManifest.xamlが存在しなければ自動的に生成します。/xオプションとの違いは、スクリプトファイルを解析して必要なアセンブリと生成したAppManifest.xamlをxapファイル内に含めることです。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=161&gt;/w 又は /webserver&lt;/TD&gt;
&lt;TD class="" vAlign=top width=359&gt;テスト用のWebサーバーを起動します。デフォルトのポートは、2060になります。ポートを指定する場合は、/w:ポート番号と指定します。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=162&gt;/b 又は /browser&lt;/TD&gt;
&lt;TD class="" vAlign=top width=359&gt;テスト用のWebサーバーを起動して、ブラウザを起動します。開始時のURLを指定するには、/b:パスオプションを指定します。/dオプションを組み合わせれば、WebサーバーのトップURLの場所を指定することができます。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=163&gt;/m 又は /manifest&lt;/TD&gt;
&lt;TD class="" vAlign=top width=359&gt;アプリケーション・マニフェスト(AppManifest.xaml)を生成します。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=164&gt;/? 又は /h、/help&lt;/TD&gt;
&lt;TD class="" vAlign=top width=359&gt;ヘルプを表示します。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=164&gt;/r:パス 又は /refpath&lt;/TD&gt;
&lt;TD class="" vAlign=top width=359&gt;参照するアセンブリへのパスを指定します。デフォルトは、Chiron.exeが存在するフォルダを参照します。&lt;BR&gt;このオプションは、ヘルプに表示されません。&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;オプションの使い方は、ヘルプコマンドで確認するか、SDKに含まれるReadme.txtに記述されています。&lt;BR&gt;&lt;BR&gt;前回に解説したプログラムをテスト実行するだけであれば、「chiron.exe /b /d:アプリケーションフォルダ」を実行することでブラウザで実行することができます。&lt;/P&gt;
&lt;P&gt;配布用にXAPファイルを作成するには、以下のようにコマンドを入力します。&lt;BR&gt;&lt;PRE&gt;chiron.exe /d:アプリケーション・フォルダ /z:app.xap
&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;これでXAPファイルが出来ますので、index.htmlとjavascriptフォルダ、stylesheetsフォルダ、作成したXAPファイルをWebサーバーへ配置すれば本番環境への移行が完了します。&lt;/P&gt;
&lt;P&gt;chiron.exe&lt;STRIKE&gt;に&lt;/STRIKE&gt;は/xオプションでXAPファイルを作成できますが、このオプションは動的言語に特化したものではありません。どういう場合に使うかというと、既存のXAPファイルを展開して、中身のリソース(画像など)を入れ替えた場合などの再XAP化に使用することができます。つまり、リソース入れ替えでVisual StudioのリビルドなどをしなくてもXAPファイルを作成できるのです。具体的には、以下のようなコマンドを入力します。&lt;BR&gt;&lt;PRE&gt;chiron.exe /d:アプリケーション・フォルダ /x:app.xap
&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;/dオプションで指定したフォルダに配置したファイル(AppManifest.xaml、dllなど)をそのままxapファイルにパッケージ化します。&lt;BR&gt;&amp;nbsp;&lt;BR&gt;/bオプションや/wオプションでWebサーバーを起動した場合は、ブラウザ・リクエストによるログがコンソールに表示されます。このコンソールを終了する場合は、コンソールで「CTRL+C」を入力するか、ブラウザで「&lt;STRONG&gt;http://localhost:2060/bye!&lt;/STRONG&gt;」のように「bye!」コマンド入力してください。これで、Webサーバーが終了します。&lt;/P&gt;
&lt;P&gt;追伸：&lt;A href="http://www.codeplex.com/IronPython/" target=_blank mce_href="http://www.codeplex.com/IronPython/"&gt;IronPython 2.0 RC1&lt;/A&gt;が先週にリリースされました。今回はToyScriptのサンプルも公開されていますので、DLRの使い方を調べやすいと思います。&lt;/P&gt;
&lt;P&gt;追記：RednaxelaFXさんのご指摘で、/nologの書き間違いを/nologoに訂正しました。それと/zオプションに/xオプションとの違いを追記しました。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9017698" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/Python/default.aspx">Python</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/IronRuby/default.aspx">IronRuby</category></item><item><title>Silverlight Dynamic Language SDK の使い方2</title><link>http://blogs.msdn.com/shozoa/archive/2008/10/22/silverlight-dynamic-language-sdk-2.aspx</link><pubDate>Wed, 22 Oct 2008 05:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9010646</guid><dc:creator>shozoa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shozoa/comments/9010646.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shozoa/commentrss.aspx?PostID=9010646</wfw:commentRss><description>&lt;P&gt;今回は、SDKで提供されるテンプレート集の構造を説明します。最初にindex.htmlのobjectタグを解説します。&lt;BR&gt;&lt;PRE&gt;&amp;lt;object data="data:application/x-silverlight,"
        type="application/x-silverlight-2" 
        width="100%" height="100%"&amp;gt;
  &amp;lt;!-- 
     XAPファイルを指定します。指定したファイル名が
      開発中に使用するフォルダ名になります。
    --&amp;gt;
  &amp;lt;param name="source" value="python.xap"/&amp;gt;

  &amp;lt;!-- 
      "initParams"はkey=valueの形式で、カンマ区切りで複数の
       パラメータを指定できます。
    --&amp;gt;
  &amp;lt;param name="initParams" value="debug=true,
         reportErrors=errorLocation" /&amp;gt;
        
  &amp;lt;!-- Silverlightランタイムのエラーを処理する
        javascript関数を指定します。この関数は
        javascripts/error.js で定義されています。 --&amp;gt;
  &amp;lt;param name="onerror" value="onSilverlightError" /&amp;gt;
      
  &amp;lt;!-- 
      他のパラメータは、Silverlightのプロパティです。
   --&amp;gt;
  &amp;lt;param name="background" value="white" /&amp;gt;
  &amp;lt;param name="windowless" value="true" /&amp;amp;lg;

  &amp;lt;!-- 
      Silverlight ランタイムのインストール用のリンクです。
    --&amp;gt;
  &amp;lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" 
 　　　　 style="text-decoration: none;"&amp;gt;
    &amp;lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" 
         alt="Get Microsoft Silverlight" 
         style="border-style: none"/&amp;gt;
  &amp;lt;/a&amp;gt;
&amp;lt;/object&amp;gt;&lt;/PRE&gt;&lt;BR&gt;
&lt;P&gt;以下に指定しているパラメータの説明を記載します。&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width=487 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top align=middle width=122&gt;パラメータ名&lt;/TD&gt;
&lt;TD class="" vAlign=top align=middle width=363&gt;説　　　明&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=125&gt;objectタグのtype&lt;/TD&gt;
&lt;TD class="" vAlign=top width=363&gt;"application/x-silverlight-2"がSilverlight2.0の指定です。HTTPサーバーのMIMEタイプに拡張子xapを設定する必要があります。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=127&gt;source&lt;/TD&gt;
&lt;TD class="" vAlign=top width=363&gt;xapのファイル名を指定します。開発中の場合は、ファイル名(拡張子除き)のフォルダを作成します。この例では、「python」フォルダになります。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=128&gt;initParams&lt;/TD&gt;
&lt;TD class="" vAlign=top width=363&gt;DynamicApplicationに対してカンマ区切りで複数のパラメータを指定します。これが動的言語を起動するために必須のものです。&lt;BR&gt;&lt;STRONG&gt;start:&lt;/STRONG&gt;複数のスクリプトファイルがあれば、エントリーポイントとなるスクリプトファイルを指定します。defaultは、「app」になっています。&lt;BR&gt;&lt;STRONG&gt;debug：&lt;/STRONG&gt;エラー時にスタックトレースを出力するかどうかを指定します(デバッグ用です)。defaultは、falseです。&lt;BR&gt;&lt;STRONG&gt;reportError：&lt;/STRONG&gt;エラーが発生した場合にエラー内容を出力するHTML要素のIDを指定します。この例では「errorLocation」を指定しており、HTML内でdivタグで定義しています。defaultはnullです。&lt;BR&gt;&lt;STRONG&gt;exceptionDetail：&lt;/STRONG&gt;例外の詳細情報(マネージ スタックトレース)を出力するかどうかを指定します。defaultは、falseです。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=129&gt;onerror&lt;/TD&gt;
&lt;TD class="" vAlign=top width=363&gt;Silverlightランタイムのエラーを処理するjavascript関数を指定します。&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;BR&gt;Silverlight2.0で動的言語を使う上で重要なのが、initParamsパラメータになります。ここで動的言語の起動用の様々な指定を行っています。このパラメータは、Microsoft.Scripting.Silverlight.DynamicApplicationクラスのコンストラクタに渡されます。独自のパラメータを指定した場合は、DynamicApplicationクラスのInitParamsプロパティを使って辞書オブジェクトへアクセスすることができますので、起動時に自分用のパラメータを指定することも可能です。&lt;/P&gt;
&lt;P&gt;python言語のテンプレートでは、python.xapが指定されていますのでpythonフォルダ内にapp.pyがあることになります。このapp.pyの内容を以下に示します。&lt;BR&gt;&lt;PRE&gt;from System.Windows import Application
from System.Windows.Controls import UserControl

class App:
  def __init__(self):
    root = Application.Current.LoadRootVisual(
                         UserControl(), "app.xaml")
    root.Message.Text = "Welcome to Python and Silverlight!"

App()
&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;Pythonコードで、Appクラスを定義してからAppクラスのインスタンスを作成するようになっています。ここでのポイントは、System.Windows.Applicationクラスの使い方にあります。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;from 文は、C#のusing文、VBのImports文に相当します。 
&lt;LI&gt;Application.CurrentプロパティでApplicationクラスのインスタンスを取得します。このインスタンスがDynamicApplicationクラスになっています。 
&lt;LI&gt;LoadRootVisualメソッドを使ってXAMLファイルを読み込んでいます。このメソッドの1つ目の引数がUserControlのインスタンスで、2つ目の引数がXAMLのファイル名です。戻り値に、XAMLファイルで指定したルートオブジェクトが戻ります。1つ目の引数に指定するオブジェクトは、XAMLファイルのルートで指定したものになります。よって、Canvasタグが指定されている場合はCanvasオブジェクトになります。 
&lt;LI&gt;root.Message.Textプロパティに文字列を指定しています。Messageオブジェクトは、XAMLファイルで定義されたTextBlockのインスタンスです。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;以下にapp.xamlを示します。&lt;BR&gt;&lt;PRE&gt;&amp;lt;UserControl x:Class="System.Windows.Controls.UserControl"
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&amp;gt;
  &amp;lt;Grid x:Name="layout_root" Background="White"&amp;gt;
    &amp;lt;TextBlock x:Name="Message" FontSize="30" /&amp;gt;
  &amp;lt;/Grid&amp;gt;
&amp;lt;/UserControl&amp;gt;
&lt;/PRE&gt;&lt;BR&gt;このapp.xamlをapp.pyと同じフォルダに配置します。従ってPythonのコードで指定しているXAMLファイル名を変更すれば、app.xamlである必要はありません。テンプレート集では、スクリプトファイルの名前がdefaultでappになっているために、XAMLファイルも同じように合わせていると思われます。&lt;BR&gt;app.pyをユニコードのエンコードにして、設定している文字列を日本語にしてみてください。問題なく、日本語が表示されます。Silverlightで日本語を含むマルチバイトの言語を使用するには、スクリプトファイルのエンコードをユニコードにする必要があります。これは、使用する言語に左右されません。Silverlight上の言語実装が、このようになっている模様です。事実、IronPython2.0ベータのインタラクティブシェルなどで試すとファイルエンコーディングを指定して様々なエンコードのスクリプトファイルを処理することができます。よって、Silverlightで動作させるために削減された機能の1つが、スクリプトファイルのエンコーディング指定のようです。 
&lt;P&gt;追伸：サンプルのcollateraldamageのPython版について&lt;BR&gt;ゲームのサンプルですが、Python版を試すとエラーが発生します。リーソースが見つかりませんというものです。エラーが発生しても継続することはできます。このエラーを回避するには、index.html内のonSilverlightError関数に以下を追加する必要があります。&lt;BR&gt;&lt;PRE&gt;  else if (errorType == "ImageError")
  {
      // ImageErrorを握り潰す
      return;
  }
&lt;/PRE&gt;これでリソースイメージエラーが発生しなくなります。&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9010646" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shozoa/archive/tags/DLR/default.aspx">DLR</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/Python/default.aspx">Python</category><category domain="http://blogs.msdn.com/shozoa/archive/tags/IronRuby/default.aspx">IronRuby</category></item></channel></rss>