ページ

2009年5月29日金曜日

[Silverlight] Silverlight 3 は 7月 10日にローンチ

Silverlight 3 to launch July 10 より
「Microsoft は Silverlight 3 と Expression Studio 3 ファミリーを 7月 10日にサンフランシスコでローンチする予定だと company officials が 5月 28日に語った」
だそうです。

しばらく前から 「7月くらいらしい」 なんて噂はありましたが、どうやらほんとみたいですね。
早いなぁ。
そうすると近いうちに Beta 2 とか来るのかな?

Beta 1 だと TextBox 上で IME をオンにするとまともに文字入力できなくなっちゃったりとかしてたけど、それなりには直ってるんだろうか?(直ってないと困るけど)
正直、あわてなくていいからちゃんとしたものをリリースしてほしいなぁ。


2009年5月28日木曜日

[.NET] Parallel.For ループからとっとと抜ける方法

Exiting from Parallel Loops Early より
普通の for ループでは break と書けば簡単にループから抜け出せます。
んじゃ、Parallel.For や Parallel.ForEach では?とかそういう話。

最初に書いておきますが、いまだに Parallel Extension を使ったこともありませんし、試す環境もないのでブログの記事とかリファレンスとかだけを見た知識で書いてます。
なので、間違ってたらごめんなさい。
というか、間違ってたらぜひ教えてください。

で、上記の記事の前半では例外について書かれてます。
普通のループでは例外が発生しても問題ありませんし、ループの中だろうが外だろうが好きなところで catch できます。
しかし、Parallel ループではそうはいきません。
それぞれのイテレーション (ループの一回分のこと) はどのスレッドで実行されるかは不定ですから例外が外に伝わってくるとは限りませんし、どこかのイテレーションで例外が発生してもループが止まるとは限りません。
んじゃ、どうなるか?
上記の記事によるとどうやら

  • Parallel.For / ForEach 内で例外が出るとランタイムがキャッチする。
  • 例外が出た後は新しいイテレーションを開始しないようにする。
  • ただ、すでに並列に動いているイテレーションは最後まで実行される。
  • 動いている全部のイテレーションが終わったら、発生した例外を全部集めて System.AggregateException にぶち込んで、こいつを throw する。

ということみたいです。
コードで書くと、

try
{
Parallel.For(0, N, i =>
{
throw new Exception("例外");
});
}
catch (AggregateException ex)
{
// ex.InnerExceptions.Count は 2 以上の可能性もある
}

ということだと思います。
あと、一つのイテレーションが長い場合、他のイテレーションで例外が発生したかどうかは ParallelLoopState.IsExceptional で判断できるそうです。
Parallel.For / ForEach には body が Action<int, ParallelLoopState> となっているバージョンもあります。
それを使って以下のように書けるわけです。

Parallel.For(0, N, (i, loopState) =>
{
// いろいろ処理

if (loopState.IsExceptional) { // 他のイテレーションで例外が出てるので終了する return; }
// いろいろ処理 });

続いてループを抜ける件について。
これには ParallelLoopState.Stop() メソッドと Break() メソッドが使えます。
まずは、Stop() メソッドについて。

  • Stop() が呼ばれた後は新しいイテレーションを開始しないようにする。
  • ただ、すでに並列に動いているイテレーションは最後まで実行される。
  • 他のイテレーションが Stop() を呼んだかどうかは ParallelLoopState.IsStopped で判断できる。
  • 動いている全部のイテレーションが終わったら、Parallel.For / ForEach が終了する。
  • Stop() が呼ばれたかどうかは ParallelLoopResult.IsCompleted で判断できる。ちなみに、ParallelLoopResult は Parallel.For / ForEach の戻り値。

ということみたいです。
コードで書くと以下みたいな感じ。

Parallel.For(0, N, (i, loopState) =>
{

if (loopState.IsStopped) { // 他のイテレーションが Stop() を呼んだので終了する return; }

if (終了条件) { // もう終わる loopState.Stop(); return; }
});

続いて Break() です。
これは、http://msdn.microsoft.com/en-us/library/system.threading.parallelloopstate.break(VS.100).aspx を見ると、

  • Break() が呼ばれた後はより大きい数のイテレーションは開始しないようにする。
  • すでに並列に動いているイテレーションは最後まで実行される。
  • 一番小さい数が ParallelLoopState.LowestBreakIteration にセットされる。
  • Break() が呼び出されたかどうかは ParallelLoopState.LowestBreakIteration が null かどうかで判断できる。(ParallelLoopState.LowestBreakIteration は Nullable<long> です)
  • ParallelLoopState.LowestBreakIteration が確定したら、Parallel.For / ForEach が終了する。
  • Break() が呼ばれたかどうかは ParallelLoopResult.LowestBreakIteration で判断できる。

ということみたいです。
ちょっとどう表現したらいいのかアレなんですが、要するに以下みたいなことだと思います。

0~1000 の Parallel.For ループがあったとします。
このうち、100番のイテレーションで Break() を呼んだとします。
すると 101~1000 のイテレーションは実行する必要が無いことが確定します。
また、この時点では ParallelLoopState.LowestBreakIteration に 100 がセットされます。
Parallel ループでは、イテレーションが並列で実行されるだけでなく、どういう順番で実行されるかも不定です。
ですから、0~99 のイテレーションに実行していないものがあるかもしれません。
もしあったらそれらのイテレーションを実行します。
そして、Break() を呼び出すより小さいイテレーションがあったらその数に ParallelLoopState.LowestBreakIteration が更新されます。
こうして Break() を呼び出す最小のイテレーションを求めて、その数が ParallelLoopState.LowestBreakIteration にセットされ Parallel ループが終了します。

どうだろ?
あってるかなぁ?
試す環境が無いのでちょっと自信が無いところもあるんですが、きっとこういうことだと思います。

Parallel Extensions なんてだいぶ前から CTP とか出てたし、最初はこういった解説ぐらいいくらでもあるんだろうと思ってたんですよね。
で、なにげにググってみたら ParallelLoopState だと 36件、ParallelLoopResult だと 6件という、びっくりするような結果で、もちろん日本語のページは一つも無し。
なので試す環境も無いくせに思わず書いてみましたw

あと、Parallel ループの中で気軽に使える ConcurrentQueue、ConcurrentStack なんていうスレッドセーフ版のコレクションも増えてるんですね。
http://msdn.microsoft.com/en-us/library/system.collections.concurrent(VS.100).aspx
これはなにげに便利そうだな。


[.NET] .NET Framework 4.0 での NGen の進化

Improvements to NGen in .NET Framework 4 より
FX 3.5 SP1 で NGen がメジャーチェンジしていたそうです。
その内容については MSDN Magazine の 「CLR Inside Out: CLR Optimizations In .NET Framework 3.5 SP1」 にあるとのこと。
この記事は日本語訳もあります。「CLR 徹底解剖: .NET Framework 3.5 SP1 の CLR の最適化

この MSDN Magazine の記事によると FX 3.5 SP1 で起動パフォーマンスがかなり向上したとのことですが、ブログの記事によると FX 4 でも起動パフォーマンスの向上を行っているようです。
NGen 関連の改良のようですが、”Best of all, you don’t have to do anything to get these benefits ? they’ll happen automatically when you use .NET 4.” とあります。
これは、「これらの利益を受けるのに何もする必要はないよ。.NET 4 を使うだけでいい」 という意味だと思うんですがあってるかなぁ?
だとすると、NGen.exe を使って自分でどうこうしておかなくちゃいけないとかそういうものではなく、勝手に起動パフォーマンスが良くなるってことですね。
(すべてのアセンブリが自動的に NGen されるようになったというわけじゃないと思うんだけど、どうなんだろう?大量のベースクラスライブラリや GAC に入っているアセンブリが NGen されてるから自然とすべての人に恩恵があるってことなのかな?ちょっとこの辺がよくわからない)

で、ブログの記事では 4つの NGen の進化について書かれています。

  • NGen SxS: CLR が SxS になったので NGen も SxS になった。
  • Multi-proc NGen: NGen がマルチコア/マルチプロセッサを使うようになった。
  • Targeted Patching: 今まではあるアセンブリが変更されるとそれを使用していたすべてのアセンブリを NGen しなおす必要があった。これを、変更が外部に影響しない (メソッドの中が変わっただけでインターフェースは変わっていないなど) 場合は NGen しなおさないようにした、ということみたい。
  • No NGen in partial trust: 今までは部分信頼でもロードできて実行できるイメージを作ってたけど、部分信頼なんて必要無さそうなので FX4 では止めた。もし、部分信頼が必要だっていう人がいたら教えて。といったことが書かれてるみたいだけど、正直この “No NGen in partial trust” の部分については意味が良くわからない。

2009年5月27日水曜日

[VS2010] ボックスセレクションで複数行編集!

The new Box Selection, now with Multi-Line Editing! より
Visual Studio 2010 ではボックスセレクションができるんですね。
↓の動画を見れば一目瞭然です。(英語ですが見りゃわかります)

<br/><a href="http://video.msn.com/video.aspx?vid=3e57917d-1b92-4188-b898-25a1d64a408e" target="_new" title="Box Selection and Multi-Line Editing Demo">Video: Box Selection and Multi-Line Editing Demo</a>

ボックスセレクションは 「Alt キーを押しながらマウスをドラッグ」 って言ってるのかな?

まぁ、テキストエディタなら当たり前にある機能だったりしますけどね。


2009年5月26日火曜日

[Silverlight] ブラウザにログ出力

Silverlight Logging Extension Method より
「Silverlight はブラウザ上で動くので Console.WriteLine() はできません。System.Diagnostics.Debug.WriteLine() は Visual Studio のアウトプットウインドウに出力されます。けど、デプロイした後や VS が無いような場合に簡単にログ出力できません」
てな感じで、そんなときに使える console.log 関数が紹介されています。

Firefox に Firebug が入れてあれば

<script type="text/javascript">
console.log("test");
</script>

なんてすると Firebug の Console に出力されます。
知らなかったんですが、上記の記事によると console.log 関数は IE8 でもサポートされているみたいです。
で、上記記事では console.log 関数を Silverlight から呼び出す方法が紹介されています。

var console = (HtmlPage.Window.Eval("console.log") as ScriptObject);
if (console != null)
{
console.InvokeSelf(obj);
}

Eval で “console.log” を評価させて function を取得してるんですね。
なるほどなぁ。
GetProperty でオブジェクトをたどりながら取得するっていうのが普通の方法じゃないかと思いますが、Eval で評価させちゃうってのは楽チンでいいですね。オーバーヘッドはちょっと大きそうですが。


[VS] Visual Studio Gallery (と、VS2010 のエディタの機能拡張)

New Visual Studio Gallery is Live より

Visual Studio Gallery が新しくなったそうです。
(以前はどういうものだったのか私は知らないんですが)
名前の通り、Visual Studio 向けのプロダクトやエクステンションのギャラリーです。
Visual Studio 2010 向けを中心とするようですが、今見てみたところ 2005 や 2008 向けもあるようです。

それにしても Image Insertion とかおもしろいよなぁ。

Image Insertion はソースの中に画像を置けるようにしちゃう VS2010 用アドオンです。
仕組みについては書かれてないみたいですが、たぶんソースコード上は ”//#[IMAGE:ファイル名]” 見たいな感じでコメントが書かれているだけで、アドオンがそれを読み取って対応する画像を表示するというようなもんでしょう。
これって XML コメントの中にも書けるとおもしろいと思うんだけどどうなんだろう?
(けど、それには Sandcastle 側が対応しないとダメか。そういや Sandcastle は Visual Studio 2010 で統合されてるとかって話だったように思うけど、どうなってるんだろう?)

他にもインテリセンスの表示を WPF ベースにしていろいろと機能追加する IntelliSense Presenter、正規表現を編集したりテストしたりできる Regex Editor なんてのもあります。

実は Image Insertion、IntelliSense Presenter、Regex Editor の 3つは http://editorsamples.codeplex.com/ にある Visual Studio 2010 のエディタを機能拡張するサンプルだったりします。
どうやら VS2010 では結構簡単にいろいろと機能拡張できるようになっているみたいですね。
そのおかげか、タブとスペースを可視化してくれる Reasonable Visible Whitespace、現在行をハイライト表示してくれる Current Line Highlighter といったあるとちょっとうれしいようなものが早くも登録されています。


2009年5月22日金曜日

[VS2010] マネージドコードのダンプデバッグと IL インタープリタ

Virtual code execution via IL interpretation
「Visual Studio 2010 Beta 1 にはマネージドコードのダンプファイルデバッグと今からブログに書くすんげー機能が含まれてるよ」 なんて感じで始まってるんですが。。。

ダンプファイルデバッグっていうのは、「CLR 4.0 advancements in diagnostics」 にクラッシュダンプファイルを Visual Studio で開くとマネージドの状態 (スタックとかローカル変数とか) を見ることができる、とかなんとか書いてあるんですが、つまりそういうことだよね?
うっひゃー、これはうれしいな。

で、
「ダンプデバッグはとても便利だし、長いことリクエストされてた機能だけど、ダンプファイルといっしょにプロセスが生きているわけじゃないので property-evaluation は動かない。property-evaluation はファンクションだとか ToString() だとかプロパティのゲッターだとかが実行されているスレッドをデバッガが乗っ取るっていう仕組みだからね。ダンプデバッグするときには乗っ取るスレッドはもう動いてないし」
なんてことが書かれてます。(超いいかげんな訳)
ようするに、デバッガでプロパティの値を見たりする機能は、対象となるプロセスが動いていることを前提としてるってことなんでしょう。

で、
「ダンプファイルのロードに加えて、ファンクションの IL オペコードをインタープリタで動かして、実行をシミュレートできるようにした。デバッガで結果を表示できるように」
なんてあります。
(原文が太文字になってるところを同じく太文字にした)
おぉ、すげぇ、まじっすか!

簡単なサンプルコードが載ってて、その下に 「Main() の終わりのところで止めて、”Debug - Save Dump As ...” でダンプファイルを書き出して、”File ? Open ? File ...” でダンプを読み込んでみるべし」 とあります。
「普通なら dict, p といったローカル変数と生フィールドが見えるけど、プロパティの内容とか ToString() した値とかは見れない。こんな風にね」
と、キャプチャした画像が載ってます。

「しかし、インタープリタがあれば、実行をシミュレーションできる。ウォッチウインドウを見てみるべし」
ということで、ウォッチウインドウのキャプチャ画像があります。
これの Value の 「Count = 0x00000002*」 のように最後に “*” が付いているのが IL インタープリタによってシミュレーション実行して求めた値だそうです。

以降、「どうやって動いてる?」 とか 「他にできること」 といった解説が続いてます。

うっひゃー、これは確かにすごいや。
なんか他のことにも使えそうな気がする。
ところで、ダンプじゃなく普通にステップ実行するときに IL レベルでステップってできるようになったのかな?
今までってソースの下はすぐ JIT 後のアセンブラだったよね?
IL でステップしてみたいと思うことがあるんだけどな。


[Silverlight] Visual Studio 2010 Beta 1 と Silverlight (Beta 1 でもマルチターゲット可能らしい)

当分、VS 2010 Beta 1 を入れる予定は無いんですが。。。

Silverlight and Visual Studio 2010 Beta 1
Visual Studio 2010 では Silverlight 開発のマルチターゲットと Silverlight のデザイン編集 (XAML を直接書き換えるのではなく) ができるようになります。
で、上記記事によると VS 2010 Beta 1 でもマルチターゲットにできるそうです。
ただし、以下の手順でセットアップする必要があるようです。

クリーンな環境だとして、

  1. Visual Studio 2010 Beta 1 を入れる。
  2. Silverlight 2 SDK を入れる。注意:Silverlight 2 Tools を入れようとするとエラーが出て失敗する。なので、Silverlight 2 Tools ではなく SDK を入れること、とあります。
  3. Silverlight 3 Beta SDK を入れる。注意:こちらも Silverlight 3 Tools ではダメ。Tools を入れること、とあります。
  4. Silverlight 3 Beta Developer Runtime を入れる。

だそうです。
どうやら、Tools ではなく SDK を入れてやる必要があるみたいですね。
こうしておくと、プロジェクトを新規作成したときに出るダイアログでバージョンを選択できるようになるようです。

記事の後半に

  • VS 2010 Beta 1 には 「Silverlight Navigation Application」 のテンプレートが無い。(VS 2008 + Silverlight 3 Beta Tools の場合はある)
    欲しけりゃ、テンプレートを VS 2008 でエクスポートして、VS 2010 でインポートしてくれ
  • .NET RIA Services を VS 2010 Beta 1 といっしょにインストールすることはできない

といった制限について書かれています。「まだベータの段階だってことを理解してほしい」 とも。


2009年5月20日水曜日

[Silverlight] カレンダーコントロールの祝日の背景色を変える

How to customize holiday appearance in the Silverlight Calendar [Jason Cooke]
Silverlight のカレンダーコントロールの祝日の背景色を変える方法が解説されています。
ただ、これはいろんな場合に応用できる方法ですので、カレンダーだとか祝日だとかはあんまり関係なかったりします。

まず、System.Windows.Data.IValueConverter を実装したコンバータを用意しておきます。
こいつは日付を受け取り、祝日だったらオレンジを、以外なら白を返します。
XAML 上では Resources でコンバータを取り込んでやって、あとはカレンダーコントロールのテンプレートを差し替えて背景色を決めるのにコンバータを使うようにしてやれば OK です。

同じ要領で何かを何かに変換するコンバータを作ってテンプレートを差し替えてやれば結構いろいろなことができそうですね。
むしろ、どのコントロールがどんなスタイル・テンプレートを持っているのかわかりにくい方が問題になるかも。
今回のカレンダーコントロールにしても 「カレンダーのそれぞれの日が CalendarDayButton になってて Grid で描かれてる」ってことを知ってれば 「じゃあその Grid の Background を変えればいいかな」 と発想できますが、そういったことを知らないとまずはそれらを調べるところから始めないといけませんからね。
今回のカレンダーコントロールのように Silverlight Toolkit に含まれているコントロールであれば、Toolkit のソース・XAML を眺めてみるってのもいいかもしれません。
けど、個人的には Silverlight Spy で中身を覗いちゃうのが一番わかりやすいような気がしてます。


[.NET] 4.0 の System.Lazy&lt;T&gt;

.Net Framework 4.0: Using System.Lazy<T>
ほう、System.Lazy<T> なんてものもあったのか。
サンプルのとおり、使用するときまで生成を遅らせる、ってものですね。

記事の最後に Lazy Computation in C# へのリンクがあります。
これはコミュニティコンテンツで C# MVP の方が書かれた Lazy<T> についての記事です。
しかし、2007年 12月かぁ。
ひょっとして、これを見て .NET Framework 4.0 に Lazy<T> が正式採用されたんだろうか?

まぁ、それはいいとして、この記事の大部分は Lazy<T> 自体の解説です。
見ればわかる通り、単にデリゲートを取っておいて初めて使うときにそいつを呼び出してやるというだけですね。
で、最後の方にサンプルがあります。
コンボボックスにフォント名とそのフォントで文字を描画したサンプルビットマップをデータバインドしてるんですが、このビットマップを Lazy<Bitmap> としています。
こうすれば、多数の使うかどうかわからないビットマップをあらかじめ作るってことをしなくて済むってわけですね。
まぁ、これくらいなら毎回描画しちゃった方がよっぽど速いだろという気もしないでもないですが(^^;


2009年5月19日火曜日

[VS] Visual Studio の T4 でコードジェネレーション

Visual Studio MAGAZINE: Visual Studio's T4 Code Generation
T4 (Text Transformation Templating Toolkit) というものについて解説されています。(まだ読んでないけど)
T4 は VS 2008 には標準で入ってるそうです。
VS 2005 の場合は DSL Toolkit を入れてやると入るみたいです。
で、こいつは ASP.NET みたいな感じのタグベースのコードジェネレータだそうです。

あと
Visual Studio 2010 Beta 1 shows lots of T4 usage + tangible T4 Editor for VS2010 Beta 1 is available!
によると、VS 2010 beta 1 でももちろん T4 は使われているそうです。
それとこの記事では tangible T4 Editor というものが紹介されています。
どうやらこれは T4 用のコードを書くときに使えるインテリセンスやハイライト表示、テンプレートギャラリなどをまとめたもの見たい。
Free 版(無料)と Pro 版(有料)があり。
この Tangible T4 Editor は、UML 形式のユースケース図、コンポーネント図、ステートチャート図、クラス図、アクティビティ図を書くような機能もあるみたいなんだけど、これはどういうことなんだろ?
T4 Editor に T4 を使ってこういった図を作るテンプレがついているってことなんだろうか?
このモデリング機能だけ別にしてもいいくらいのように思えるけど。
Free 版でも UML-Style Diagrams は書けるみたい。(けど、自動レイアウトとかビットマップにコピーとかができない)

ちなみに Tagible T4 Editor はすでに VS 2010 beta 1 に対応済みだそうです。
http://tangibleengineering.blogspot.com/2009/05/tangible-t4-editor-for-visual-studio.html
仕事速ぇ


[XNA] XNA 3.1 のアバター機能

XNA Game Studio 3.1 は日本語版が夏くらいに出るとかってニュースになってましたね。
英語版はもう出たんでしたっけ?
まだかな?
と、あいかわらず XNA とかわかってないんですが、ちょっと気になった記事があったので。

Avatar API preview for XNA Game Studio 3.1
「3.1 の機能がアナウンスされてから何人かの人にアバター API について聞かれた」 ってことで、XNA 3.1 の新機能のアバター API について書かれてます。

ここで言うアバターっていうのはアレですね。
Xbox Live で出てくる 3DCG の人型のやつ。
それを表現するのが AvatarDescription だそうです。
AvatarDescrition はアバターのモデル、テクスチャ、色、スケールなどが格納されていて、3種類の方法で作ることができるそうです。
その 3種類の方法は、SingedInGamers のプロパティから取得する、ランダムに作成する、ネットワークやファイル経由でもらったバイト配列から生成する、だそうです。

AvatarDescription を描画するのが AvatarRenderer。
ワールドとビューの変換行列を指定することができるようです。
また、Draw メソッドにはパラメータが 2つあって、ひとつはアバターのボーンの移動量を指定する IList<Matrix>。
ちなみにアバターのボーンは 71本とのこと。
もうひとつのパラメータは AvatarExpression で、これはテクスチャで描かれている口、眼、眉の状態を表す enum 値を指定するものです。

AvatarAnimation はどうやらプリセットされたアニメーションを取得することができるもののようです。
Avatar animation updates
こちらの記事に AvatarAnimation の現在位置は Update メソッドか CurrentPosition プロパティでセットできるとあります。

んで、
What to do while an avatar loads?
によるとアバターがロード中の場合にエフェクトを表示するかどうかなんてのも簡単に指定できるようです。
(スタートレックの 「転送!」 みたいな感じ?)

さらに
Lights, Camera… Avatar!
によると、ライトの向き、色、環境光の色も指定できるそうです。

いやぁ、なんと言うか、アバター API ってちょっと絵を表示するようなものかと思ったらやたら本格的なのねw
ボーン数 71本っていうと、手の指にもちゃんとボーンが入ってるくらいかな?


2009年5月13日水曜日

[jQuery] Glimmer &ndash; jQuery 使用要素をインタラクティブにデザインできる WPF ベースのツール

http://visitmix.com/lab/glimmer

Glimmer というツールがリリースされています。
Glimmer は jQuery を使った要素を Web ページ上に簡単、かつ、インタラクティブに作成できる WPF ベースのツールだそうです。
と言っても、何のことやらわかりませんねw

どうやら Glimmer には

といった機能があって、これらを HTML やら CSS やら JavaScript やらを書いたりしなくても、GUI 上でいろいろ設定するだけで必要な HTML、CSS を作りだしてくれるツール、ということみたいです。

まぁ、Glimmer 自体は驚くようなツールでは無いと思うんですが、Microsoft が jQuery を使ってるのがちょっと意外に感じたり(笑)

ダウンロードは↓ですがどうやら Glimmer 自身のソースコードもあるようです。
http://code.msdn.microsoft.com/glimmer/Release/ProjectReleases.aspx?ReleaseId=2578


[IE8] IE8 で Silverlight のデバッグをする場合、、、

いまだに Windows 7 も IE8 も入れてません。
と言うか、どちらもまだ見たこともありません。
完全に時代に置いて行かれちゃってます orz
そんな私ですが、いつの日か IE8 を使うようになったときのための覚え書きw

Debugging Silverlight in IE8 (on Windows 7)

IE8 のオートリカバリー機能は Web サイトが応答を返さなくなったときに 「このページをリカバリーするか」 それとも 「このページを閉じるか」 を聞いてきてくれるものみたいです。
ところが、Silverlight をデバッグしているときなんかにもこのダイアログが出てきてとてもうっとおしい、とあります。

えっと、IE8 を使ってないので詳細はよくわかりませんが、Visual Studio で Silverlight の中でブレイクしたりしていると IE8 が 「サーバが応答を返さなくなった」 と判断してしまいこのダイアログが出るのでうっとおしい、ということかな?
いや、うっとおしいというか、リカバリーっていうのがリロードを行うことだとしたらそうするか閉じるかの選択肢しか無いみたいだからデバッグしてらんなくなっちゃうか。

で、そんなときはオートリカバリーをオフにしちまえば OK、ということでオートリカバリー機能をオフにする方法が紹介されています。
(レジストリをいじってデフォルトの “2” から “0” にしてしまえばいいとのこと)

と、ここまで書いて気付きましたが、コメントに 「レジストリをいじる必要はないよ。Tools ? Internet Options ? Advanced タブに Enable Automatic Crash Recoverry ってのがあるよ」 ってありますね。

ところで、タイトルは “Debugging Silverlight” となっていますが、うっとおしい理由が上記であってるなら Silverlight に限らず ASP.NET でブレイクをしているときとかにも同じことになりそう。


[Silverlight] Silverlight 3 + Blend 3 の Action、Trigger、Behavior

すみません、単なる覚え書きです。
(まだよく読んでない)

Mike Taulty 氏がブログに Silverlight 3 + Blend 3 の Action、Trigger、Behavior についてのまとめ記事的なものを書いてた。
Expression Blend 3: More on Actions, Triggers, Behaviors

さらに
Expression Blend 3: Trying a drag-and-drop behavior (part 1)
という、要素を他の要素にドラッグ&ドロップできるようにする Behavior を実装してみる記事もある。
ドラッグ中の表示を WriteableBitmap を使って行ったりと結構ちゃんとしている模様。
(Part 1 とあるからもう少し続くのかな)

しかし、このあたりの情報ってまだあんまり無いと思うけど、いったいどうやって調べてるんだろう?と思ってなにげに About 見たら Microsoft UK の Developer and Platform Group の人だったw
中の人だったのか


[Silverlight] Silverlight がマルチキャスト対応に!

Multicast Comes to Silverlight! より

ええと、まず、私はそもそも今どきのマルチキャスト事情って全然わかってないんですが(笑)
結構使われているんでしょうか?

それはさておき。上記の記事によると Silverlight でマルチキャストが可能になったようです。
記事は 2009/05/11 付けですが、ニューヨークの Streaming Media East show で Qumu 社から発表があったそうです。
さすがに Silverlight だけで実現しているわけではなく、マルチキャストプラグインがあり、それをクライアントにインストールしておくことによって Silverlight でマルチキャスト対応のアプリを実行できるようになるようです。
プラグインは ActiveX と NPAPI があり、Windows と Mac の IE、Safari、Firefox に対応しているとのこと。
このプラグイン自体は http://projectstarlight.codeplex.com/ でオープンソースとして公開されていて、どうやら Microsoft との共同開発みたいです。

上記記事は結構長文で、もっといろいろと書かれてますので (英語ですが) 興味のある方は見てみてください。


2009年5月1日金曜日

[ASP.NET AJAX] Visual Studio AJAX Profiling Extensions Power Tool

Microsoft Visual Studio AJAX Profiling Extensions Power Tool なるものがリリースされていました。
http://code.msdn.microsoft.com/AjaxView

もともとは http://research.microsoft.com/en-us/projects/ajaxview/ にある AjaxView という Microsoft Research の研究開発だったみたいです。
自分では試してないんですが、どうやら IIS 7 のエクステンションになっていて、これを入れると JavaScript の関数呼び出しの前後に勝手にコードを追加し、それによってプロファイルを取る、というものみたいです。
結果は profiling results にあるような感じで見ることができるようです。


[.NET] .NET Web Developers Road Show &ndash; ASP.NET, ASP.NET AJAX, Silverlight などなどを使ったサンプルソリューション

.NET Web Developers Road Show ? ASP.NET, ASP.NET AJAX and Silverlight 3 in Action… Now Done and we’re back in the Office…

タイトルの通りなんですが

  • データベースは SQL Server 2008 Express
  • データアクセスレイヤは ADO.NET Entity Framework
  • いくつかのビジネスルールを通じてデータをフィルタするのに ADO.NET Data Service
  • 見てくれは ASP.NET。ASP.NET AJAX も使ってる
  • 写真の表示とかタイムライン表の表示とかに Silverlight 3

といった内容のサンプルソリューションが CodePrex に上げられたそうです。
http://webdevroadshow.codeplex.com/

# 私はまだダウンロードすらしてないんですが、ちょっと見てみようかな


[WPF][Silverlight] Blend 3 Behavior のギャラリー

前に書いた 「[WPF][Silverlight] ビヘイビア(behavior)- Blend 3 との連携機能」 の記事にマイクロソフト・エバンジェリストの 大西さん にコメントもらいました。

Blend 3 Behavior のギャラリー
http://gallery.expression.microsoft.com/site/items/behaviors

すでに Behavior のギャラリーなんてあるんですね。
まだ数は少ないですがいくつか登録されています。

んで、ギャラリーを眺めててふと思った。「Behavior ってすごいんじゃね?」
正直、今までは 「コードをカプセル化できてちょっと便利になるかなぁ」 くらいに思ってたんですよね。
けどコードをカプセル化できるってことは、ほとんど何でもできるわけで、、、

ギャラリーに Behaviors from MIX'09 というのが登録されていますが、これは MIX09 のセッションで使われた Behavior を収めたものみたいです。
今さらですがこのセッション 「Creating Interactivity with Microsoft Expression Blend」 を見てみました。
(あいかわらず英語のリスニングはほとんどダメですが、デモ中心のセッションなので画面を見てるだけでもだいたい何をやってるかはわかりました)

こいつはおもしろい。
セッション内ではマウスジェスチャとかドラッグしてコントロールをぐりぐり動かしたりとかといった見栄えのするものが中心だけど、これっていろんな応用ができそうだなぁ。