ページ

2008年3月7日金曜日

[3DCG?] 革新的な 3D ゲームエンジン...ってバカだろw(もちろんいい意 味で

本文は↓を見てください。
http://shinichiaoyagi.blog25.fc2.com/blog-entry-20.html

[3DCG?] 革新的な 3D ゲームエンジン...ってバカだろw(もちろんいい意味で

新しい3Dゲームエンジン、その名も Microsoft Excel !?
で知りました。

Microsoft Excel: Revolutionary 3D Game Engine?
英文で 5ページありますが、途中に貼られてる画像を見るだけでもなんとなくわかるんじゃないかと思います。

簡単に紹介すると、まず 1ページ目
これがすごい!
"Figure 1: Essence of the 3D engine" (3D エンジンの本質) といったタイトルがついた画像がありますが、まさにこれが 3D エンジンになっています。
シート上に赤丸で数値が書かれていますが、それぞれをざっと説明すると

  1. 投影する際のパラメータです。スクリーンの幅、高さとか。
  2. 各頂点の座標です。
  3. 4×4 の変換行列です。3×3 の回転部分は下の 4 の回転角から求められます。
  4. 回転角です。
  5. 2 と 3 から求めたワールド座標系での各頂点の座標です。
  6. 5 から求めたパースをつけて透視投影した各頂点の座標です。
  7. 6 から求めたスクリーン座標系での各頂点の座標です。
  8. 各辺の両端の頂点の指定と、その頂点たちの座標 (7 のスクリーン座標系の座標) です。

ということだと思います (間違ってたらごめんなさい。なにせ 3D 初心者なので)
4 のところの回転角を変更するとあとは単なるシート上の計算式なので Excel が 3→5→6→7 と再計算してくれて、結果となる 8 が求まります。

いやぁ、、、まぁ、、、確かに言われてみりゃ、そりゃそうなんですが、、、なんというか、、、
その発想はなかったわ
としか言いようがないなwww

続いて 2ページ目
Excel-native Cell Graphics (ECG) が紹介されています。
そのまんまですが、「Excel がネイティブに持ってるセルグラフィックス」 ですね。
2ページ目の画像を見ればわかるとおり 「セルを小さくして、罫線消して、色を塗ればピクセルになるんじゃね?」 ということですw
んで、 3ページ目 ではこの ECG を使って立方体がクルクルするデモが紹介されています。
同じく 3ページ目にある "our example Excel engine files" というリンクからデモファイルが落とせます。
これに入っている ECG_demo_without_grids.xls がそれです。
このファイルを Excel で開き、マクロを有効にし、ECG_Demo マクロを実行してやれば立方体がクルクル回ります。
Excel 2007 でもちゃんと動きました。
この立方体の座標計算は 1ページ目で紹介されていた 3D エンジン (つか、単なる Background という名前のシートだけどw) で行われています。
マクロがやっているのは 4 の回転角のところの角度を書き換えることだけです。
あとは 8 のところの座標を使って線を引いています。

ところで、この 「セルをピクセルに見立てる」 という方法はぜんぜん新しいものじゃありません。
この手法を使ったものはいろいろあるとは思いますが、私が一番印象に残っているのはやはり パッセルマン です。
はじめて見たときは、度肝を抜かれたというか、笑ったというか...敵キャラの動きやサウンドまで再現してるんですから。
ほんと、思わず 「なんで Excel でやる必要があるんだよ!」 と言っちゃいましたよ。
で、作者さんのこの言葉を見て激しく納得するわけです。。。「Excelで動かすことに意義がある!」
wwwww

ちなみに、ずいぶん久しぶりにパッセルマンを起動 (起動と言うのかな?w) してみましたが、Excel 2007 でもちゃんと動きました。

と、話が横にそれました。
さらに 4ページ ですごいことになりますw
4ページ目では Office-level Graphics Abstraction Layer (OGAL) なるものが紹介されています。
4ページ目の冒頭には

もし、リサイズ可能なピクセルや可変アクセプト比といった ECG の拡張機能が必要ないのであれば、別の Excel レンダリングサブシステム -Office-level Graphics Abstraction Layer - を選択することができる。

なんて書いてありますw
最初はなんのことやらわからなかったんですが、これはすごい!
3ページ目のデモファイルに入っている OGAL_demo.xls で動きますから、ぜひ一度動かしてみてください。
Excel に読み込んで、マクロを有効にして、OGAL_demo マクロを実行すれば動くはずです。
まぁ、面倒なときは 4ページ目にある YouTube の動画を見てもらえばそのまんまですが。

いやぁ、本気で最初はどうやってるのかわかんなかったです。
Excel にオートシェープってありますよね?丸とか四角とか書くやつ。あれの三角形を使って三角ポリゴンを描画してるんです。
だからシート上のどこへでも描画できるんですね。
しかも、3D エンジンも強化されています。
Background シートを見てもらえばわかりますが、辺ではなく三角ポリゴンを指定するようになっていて、ライトの向きと環境光のパワーも指定できるようです。
で、法線の向きと面の色も計算するようになっていて、さらに z 値でソートして z 値の深い順に三角ポリゴンを描画することによって陰面処理も行っています。

いやぁ、まじでこれはすごいわ。
つか、バカだろ (もちろん、いい意味でw
なにをやっているかがわかったとき、鳥肌がたっちゃいましたよw
ほんと、世の中にはすごい人がいるなぁwww

最後にいちおう書いときますが、技術的な内容はものすごくちゃんとしたものですが、ECG とか OGAL とかってそれらしい名前をつけたりしているのは著者さんの (半分) ジョークでしょう。
たぶん、マイクロソフトの人に 「OGAL について解説して」 とか言っても 「はぁ?」 と言われると思うのでご注意をwww


2008年2月22日金曜日

GDC 08: Red Rings of DeathしちゃったXbox 360本体をGDC会場で発見

GDC 08: Red Rings of DeathしちゃったXbox 360本体をGDC会場で発見

ちょっwww
これは悲しすぎるw

[.NET] Coming soon to LINQ to SQL

Coming soon to LINQ to SQL より

最初、このタイトルをみたときに 「Coming soon っていつの話だよ。LINQ to SQL なんてとうの昔にリリースされてんじゃん」 と思っちゃいました。

どうやら、SQL Server 2008 の機能をよりよくサポートすべく LINQ to SQL に機能を追加する予定ってことみたいです。

確かに LINQ to SQL ってのは実行時に SQL 文を生成し、ADO.NET を通じて SQL Server を呼び出してるんですから、よりよい SQL 文が作れるようになればパフォーマンスやらいろいろとメリットがあるはずです。
しかも、SQL 文を作ってる LINQ プロバイダは単なるクラスですからあとから提供するのも簡単です。
(Visual Studio 上のウイザードと連携させたい場合とかはいろいろと手間は増えるでしょうが)

今でもかなり賢い SQL 文を生成すると言われていますが、こういう風に SQL Server 2008 のサポートも含めて、改良を続けてくれているっていうのはうれしいですね。

[XNA] XNA Game Studio 3.0, Zune, そして Xbox LIVE community games!

GCD2008 がサンフランシスコで開催されてるのもあって、なにやらいろいろと発表されてるようです。

Announcing: XNA Game Studio 3.0 and Zune より
XNA Game Studio 3.0 では Windows、Xbox 360、Zune のゲームが作れるようになるとのこと。
へ?Zune って XNA Framework が乗ってるの?(乗せれるの?) 知らんかった。
XNA Game Studio 3.0 は 2008年春にプレビューが、2008年 holiday season (クリスマスくらい?) に正式リリース版が予定されてるようです。

Announcing: Xbox LIVE community games より
Xbox LIVE community games っていうのが、ベータが春の後半から、リリースが 2008年 holiday season に予定されてるそうです。
どうやら、XNA Framework で動くゲームをマーケットプレースを通じて配布できるようになるみたい。
そいつはすげぇ!
英文でいろいろと書いてありますが、さがしたらすでに Engadget Japanese で日本語で紹介されてましたw
Xbox 360で自作ゲームを配れるXNA Community Games 詳細
(しかも、こっちの方がより詳しく書いてあるww)

うはぁ、こりゃすごいや。
C# で書いたゲームがマーケットプレースを通じて全世界の人に公開できるのか。
XNA 始まったな

[.NET] Coming soon to LINQ to SQL

Coming soon to LINQ to SQL より

最初、このタイトルをみたときに 「Coming soon っていつの話だよ。LINQ to SQL なんてとうの昔にリリースされてんじゃん」 と思っちゃいました。

どうやら、SQL Server 2008 の機能をよりよくサポートすべく LINQ to SQL に機能を追加する予定ってことみたいです。

確かに LINQ to SQL ってのは実行時に SQL 文を生成し、ADO.NET を通じて SQL Server を呼び出してるんですから、よりよい SQL 文が作れるようになればパフォーマンスやらいろいろとメリットがあるはずです。
しかも、SQL 文を作ってる LINQ プロバイダは単なるクラスですからあとから提供するのも簡単です。
(Visual Studio 上のウイザードと連携させたい場合とかはいろいろと手間は増えるでしょうが)

今でもかなり賢い SQL 文を生成すると言われていますが、こういう風に SQL Server 2008 のサポートも含めて、改良を続けてくれているっていうのはうれしいですね。


[XNA] XNA Game Studio 3.0, Zune, そして Xbox LIVE community games!

GCD2008 がサンフランシスコで開催されてるのもあって、なにやらいろいろと発表されてるようです。

Announcing: XNA Game Studio 3.0 and Zune より
XNA Game Studio 3.0 では Windows、Xbox 360、Zune のゲームが作れるようになるとのこと。
へ?Zune って XNA Framework が乗ってるの?(乗せれるの?) 知らんかった。
XNA Game Studio 3.0 は 2008年春にプレビューが、2008年 holiday season (クリスマスくらい?) に正式リリース版が予定されてるようです。

Announcing: Xbox LIVE community games より
Xbox LIVE community games っていうのが、ベータが春の後半から、リリースが 2008年 holiday season に予定されてるそうです。
どうやら、XNA Framework で動くゲームをマーケットプレースを通じて配布できるようになるみたい。
そいつはすげぇ!
英文でいろいろと書いてありますが、さがしたらすでに Engadget Japanese で日本語で紹介されてましたw
Xbox 360で自作ゲームを配れるXNA Community Games 詳細
(しかも、こっちの方がより詳しく書いてあるww)

うはぁ、こりゃすごいや。
C# で書いたゲームがマーケットプレースを通じて全世界の人に公開できるのか。
XNA 始まったな


2008年2月12日火曜日

[.NET] 明日、明後日はデブサミ 2008

明日、明後日は Developers Summit 2008 に参加します。

何と言っても

の波村さんセッションが楽しみなわけです。

あと、【14-B-5】 MVP & .NET Ladies Lightning Talks Session こちらのセッションにスピーカーとして参加します。
ライトニング・トークス・セッションです。
一人持ち時間 5分程度のミニセッションを順番に行うというものです。
私は Silverlight の紹介を担当します。

ちなみにデブサミに参加するのは去年に続いて 2回目です。
去年は このセッション のスピーカーとして参加させて頂きましたが、時間の許す限り他のセッションも聞かせて頂きました。
デブサミはいろんなジャンルのセッションがあるのでかなりおもしろかったです。
今年もなるべくいろいろなセッションを聞かせてもらおうと思います。


2008年2月6日水曜日

go.windowslive.jp

http://go.windowslive.jp/

こんなサイトがあるんですね。
マイクロソフト (日本) が Windows Live (Windows Live Writer とか Windows Live Messenger とかもろもろ) の紹介なんかをしてるみたいです。

で、その中の 1 コーナーに 使ってみました。Windows Live なんてのがあります。
トップページの Flash からはいまだに vol.1 にリンクされてますが、すでに vol.2 (FEB) 中村繪里子 が公開されています。

実はしばらく前から 使ってみました。Windows Live には 「FEB - ERIKO NAKAMURA」 といった表記があったんですよね。コンテンツ自体は無く、ローマ字表記での名前だけが予告として書いてあったという感じです。
いち早くこれを発見した人がいて、2ch 某スレでは話題になったんですが 「アナウンサーの中村江里子だろ。常識的に考えて」 と。まぁ、私もそう思ってました(^^

が、それでもやっぱりチェックしてる人はいて、2月になってから再び 2ch 某スレで 「更新来てるよ」 と。
半信半疑で見てみると、驚いたことに声優 中村繪里子さんだったんですね。
いや、ほんとに驚いたw
マイクロソフト GJ!
Windows Live の中の人 GJ!!

2007年11月28日水曜日

Silverlight 1.1 Tools Alpha for Visual Studio 2008

Silverlight 1.1 Tools Alpha for Visual Studio 2008 Available for Download より

VS2008 正式版用の Silverlight 1.1 Tools Alpha も出てます。

Silverlight 1.0 SDK アップデート (November 2007)

Silverlight 1.0 SDK がアップデートされています。
MicrosoftR Silverlight 1.0 Software Development Kit (November 2007)

入れる前にコントロールパネルの 「プログラムの追加と削除」 から 「Microsoft Silverlight 1.0 SDK」 と 「Microsoft Silverlight 1.0 SDK Visual Studio 2005 Template」 を削除しておく必要があるようです。

なにが変わったのかのちゃんとしたドキュメントは見つけられていませんが、http://silverlight.net/blogs/news/ には

Get the latest version of the Silverlight 1.0 SDK with clearer installation prompt language and a better performing version of Silverlight.js. Existing Silverlight applications will want to take advantage of the updates to Silverlight.js.

とあります。
どうやら Silverlight.js が変わっただけ?で、既存のアプリも Silverlight.js を差し替えてくれればいいことがあるよ、ということみたい。

2007年11月16日金曜日

VSUG Day 2007 Winter

12/8(土)に東京で、1/19(土)に大阪で VSUG Day 2007 Winter が開催されます。
VSUG にユーザ登録さえすればどなたでも参加できます。

http://vsug.jp/tabid/171/Default.aspx

わんくま同盟 大阪勉強会 #15

わんくま同盟さんは東京・大阪などで活発に勉強会を開催されていますが、このたび縁あって大阪勉強会でスピーカーをさせて頂くことになりました。

詳細は↓を参照してください。
わんくま同盟 大阪勉強会 #15

2007年11月13日火曜日

Windows history videos

CHICAGO とか NT 5.0 とかのレアものも含まれていて、見ていて思わずニヤニヤしちゃいました(笑)

2007年10月16日火曜日

VS2008 では WPF のイベントは手書きだって(しょぼーん)

渋木さん から教えてもらいました。

Add an events section to the properties window for WPF projects

上記は Connect にあった、Visual Studio 2008 へのフィードバックです。
今の VS2008 beta2 では WPF のイベントはプロパティウインドウでは管理できません。Windows.Forms ではプロパティウインドウに 「イベント」 タブがあってイベントハンドラを新しく作ったり、既存のメソッドをイベントハンドラとして関連付けたりすることができます。この機能が WPF のデザイナにはごっそりないわけです。

で、上記のフィードバックは 「この機能がないよ」 というものなんですが、それに対する Microsoft からのコメントが

Suggestion をありがとう。我々もイベントタブはプロダクトに追加すべき重要なものであると同意します。しかし、残念ながら Orcas のスケジュールに収まりません。この機能は将来のリリースの優先順位リストの上の方にあります。

なんてあります。

いやー、正直驚きました。てっきり 「beta2 だから」 まだ無いもんだとばっかり。。。まさか RTM にも無いとは。。。つか、Windows.Forms のデザイナより低機能になっちゃうってこと?と思っちゃうんですが。目玉の一つであるはずの WPF のデザイナがそんなんでいいんだろうか?

一応、書いておくと、WPF のデザイナにイベントを管理する機能がまったく無いというわけではありません。
まず、デフォルトのイベントハンドラはダブルクリックで追加したりコードへジャンプしたりできます。たとえばボタンを配置してそれをダブルクリックすると自動的に Click イベントのハンドラが追加され、そのコードにジャンプしてくれます。しかし、これができるのはボタンなら Click、テキストボックスなら TextChanged などといったデフォルトのイベントだけです。
また、XAML 上では 「MouseDown」 などと入力するとインテリセンスといっしょに 「<New Event Handler>」 といったものが表示れさて、これを選択すれば自動的にイベントハンドラのコードを追加してくれます。こちらはそのコントロールが持つすべてのイベントで使用できます。

2007年10月15日月曜日

beta2 から RTM になるときの LINQ to SQL の変更点

LINQ to SQL breaking changes from beta2 to RTM (compiled from my LINQ forum posts) より

早くも LINQ to SQL の beta2→RTM 時の変更点が紹介されてました。
主に US の MSDN Forum へのリンクなんですが、LINQ to SQL Beta2 to RTM Key Changes なんておもしろいですね。RemoveAll() が RTM 版では DeleteAllOnSubmit() になるそうです。削除されるのはあくまで submit したときであるということをイヤと言うほど明示したメソッド名にしたわけですね(^^;

2007年10月9日火曜日

Microsoft MVP を再受賞

今回も Microsoft MVP を受賞することができました。
今までと同じく Visual Developer - Visual C# です。

2007年10月4日木曜日

.NET Framework のソースコード公開

すでにあちらこちらでニュースになっていますが、、、

Releasing the Source Code for the .NET Framework Libraries より

Visual Studio 2008、.NET Framework 3.5 のリリースに合わせて .NET Framework のライブラリの一部のソースコードが公開されるそうです。公開と言っても Ms-RL という参照のみが許諾され複製、変更などはできないライセンスとなるそうです。
VC++ では template ベースのライブラリである ATL、WTL は当然として、MFC やランタイムなんかもソースが付いてて、入れてさえおけばデバッガで中まで入っていくことができましたから、ちょうどそれとおんなじような感じですね。

とりあえず公開されるのは以下の部分。

  • Base Class Libraries (System, System.IO, System.Collections, System.Configuration, System.Threading, System.Net, System.Security, System.Runtime, System.Text, etc)
  • ASP.NET (System.Web)
  • Windows Forms (System.Windows.Forms)
  • ADO.NET (System.Data)
  • XML (System.Xml)
  • WPF (System.Windows)

その後、以下の部分なんかも含めてもっと公開。

  • WCF
  • Workflow
  • LINQ

これらのソースは 「コメントも含まれている」 そうです。

で、これらのソースはダウンロードしてスタンドアローンにインストールし、テキストエディタなんかで見ることもできますし、以下のように VS2008 で利用することもできるそうです。

VS2008 ではインターネット上にあるシンボル情報 (とソースコード) を利用する機能がサポートされ、デバッガでステップインすると必要に応じてソースコードを取得して .NET ライブラリの中まで入っていけるそうです。また、ステップインだけでなく、たとえばコールスタックをダブルクリックしたりとかでもライブラリのソースを表示することができるそうです。

ところで、冒頭の方に "Today I'm excited to announce that we'll be providing this with the .NET 3.5 and VS 2008 release later this year." なんてありますが、.NET 3.5 と VS2008 って今年後半にリリースされるの?

2007年10月3日水曜日

LINQ でレイトレース...ってバカだろ(いい意味で

Taking LINQ to Objects to Extremes: A fully LINQified RayTracer?より


1つの LINQ クエリー式でレイトレースしてるそうです。
レイトレースってもちろんあれですよ?ピクセルごとに光線の追跡をして 3D 表示するってやつ。


クエリー式のところだけでなく LINQRayTracer.cs も落とせるようになってますので、VS2005 beta2 VS2008 beta2 (※1) で Windows Forms なプロジェクトを作って、Program.cs と Form1.cs を削除して、この LINQRayTracer.cs を追加して実行してやればそのまま動きます。(LINQRayTracer.cs に Main() も含まれています)


まだ内容はよく見てませんし、見てもわかるかどうかはわかりませんが、すごいということはわかりましたwww


※1
10/03訂正 VS2005 beta2 ではなく、もちろん VS2008 beta2 です。

2007年10月2日火曜日

SWF to XAML コンバータ

SWF to XAML Converter より

The ConvertedHarmony という 2つの SWF から XAML へのコンバータが紹介されています。
(SWF は Flash のファイル形式です)

The Converted の方は有料の商品みたいです (trial バージョンあり)。Harmony の方は現在 beta 段階みたいですが、完成後どうなるのかはわかりませんでした。
どちらも WPF XAML と Silverlight XAML をサポートするようです。

The Converted のデモ を見ると結構ちゃんと変換できるもんなんですね。ちなみにこのデモページには XAML ファイルが直に置いてあるので XamlViewer が立ち上がって表示されることになります (いわゆるルーズ XAML)。

Silverlight Enterprise Deployment Guide (英語)

Silverlight が入っていない環境で Silverlight を使ったページを参照すると 「Get Silverlight」 といった画像が表示されてそれをクリックすれば簡単に Silverlight プラグインを入れることができます。(もちろん、そうならないようなページを作ることもできますが、Silverlight.js を使った標準的なページでは自動的にこうなります)

なので、通常は事前に Silverlight を入れておく必要とかはないんですが、エンタープライズな環境ではそうできない場合もあります。企業内の閉じた環境とか、閉じてはいなくても勝手にプラグインを入れられないようになっている環境なんかもあるでしょうし。
そんな場合に Silverlight をどうやって配布したらいいのかのガイドが Silverlight Enterprise Deployment Guide にまとめられています。
(ちゃんと読んだわけではないので内容については聞かないでくださいw)

2007年9月6日木曜日

Silverlight 1.0 SDK と 1.1 SDK Alpha September Refresh

http://silverlight.net/GetStarted/ から表題の 2つの SDK がダウンロードできますが、これらも RC のものから更新されています。

■ Silverlight 1.0 SDK
1.0 SDK は msi になってますので簡単にインストールできます (RC のときも msi でした)。
また、インストール中に Visual Studio 2005 用のテンプレートをインストールできるのも RC と同じです。
SDK の内容は若干フォルダ構成が変わっていますし、サイズも違いますので RC のころからは更新されているようです。

あと、Tools\Silverlight.js フォルダの下にローカライズ版の Silverlight.js ファイルが追加されています。
いったい何がローカライズされているのかと思ったら

    Silverlight.createObjectEx({
source: 'Scene.xaml',
parentElement: document.getElementById('SilverlightPlugInHost'),
id: 'SilverlightPlugIn',
properties: {
width: '400',
height: '400',
background:'#ffffff',
isWindowless: 'false',
version: '1.0',
inplaceInstallPrompt: true
},
events: {
onError: null,
onLoad: Silverlight.createDelegate(scene, scene.handleLoad)
},
context: null
});

というように inplaceInstallPrompt を true にしたときに表示されるメッセージがローカライズされているようです。
Silverlight.js を使うと Silverlight が入っていない環境でページを表示すると 「Get Microsoft Silverlight」 という Silverlight のセットアップへのリンクを含んだ GIF 画像を自動的に表示してくれます。inplaceInstallPrompt を false もしくは未設定の場合は GIF 画像だけですが、true を指定すると GIF 画像と共に


By clicking "Get Microsoft Silverlight" you accept the
Silverlight license agreement
Silverlight updates automatically, learn more

というメッセージが表示されます。
これがたとえば Silverlight.ja-jp.js では、

"Get Microsoft Silverlight" をクリックすると、Silverlight 使用許諾契約書
に同意したものと見なされます。
Silverlight は自動的に更新されます。詳細情報


と表示されるようになります。


とりあえず Silverlight.ja-jp.js を Silverlight.js にリネームして使ってみたらちゃんと動きました。
(Silverlight.ja-jp.js は utf-8 で書かれているので html に <meta http-equiv="Content-type" content="text/html; charset=UTF-8"/> を入れるなり、ASP.NET なら web.config で utf-8 を指定するなりする必要があります)
もちろん、本当ならブラウザの HTTP_ACCEPT_LANGUAGE を見るなりしてどの言語版の Silverlight.js を使用するのかを決定すべきだと思います。今のところ、そういう仕組みはなさそうなので必要なら自分で作りこむ必要がありそうです。


■ Silverlight 1.1 SDK Alpha September Refresh
前回の 1.1 SDK Alpha はかなり巨大でしたが、今回のはずいぶん小さくなっています。解凍してみるとサンプル (QuickStarts) がフォルダごとなくなっています。
ヘルプなんかも微妙にサイズが変わっていますが、どの程度内容が変わっているのかはわかりません。

Silverlight 1.0 リリースと Linux サポートのアナウンス

ScottGu's Blog 「Silverlight 1.0 Released and Silverlight for Linux Announced」 より


■ Silverlight 1.0
Silverlight 1.0 がリリースされたそうです。
まだちゃんとは見てませんが、1.0 RC とは大きな変更はないと思われます (よほどのことがない限り変更は無いと言われてましたし)。


今、http://silverlight.net/GetStarted/ から 1.0 をダウンロードしようとしたら RC のサイトに飛ばされちゃいました。まだ一部準備中?


■ Linux サポート
上記 ScottGu's Blog によると Linux 上の Silverlight 実装 (Moonlihgt) を提供している Novell と正式なパートナーシップを結んだそうです。これで Moonlight は 「Mono Project の人たちが勝手に作った」 というものではなく Microsoft 公認のものになったわけですね。Linux 用の Silverlight Media Codec は Microsoft が実装し、Novell の Moonlight は Silverlight 100% コンパチになるだろう、と書かれています。すばらしい。


■ Silverlight 1.1 アップデート
http://silverlight.net/GetStarted/ を見ると 1.1 の方も Alpha September Refresh になっています。
あれ?こっちもまだ古い方のダウンロードに飛ばされちゃう?


----


9/6 追記
さきほど http://silverlight.net/GetStarted/ を見てみたところ 1.0、1.1 Alpha Sept Refresh ともに新しいものがダウンロードできました。

2007年8月10日金曜日

Re: VB : "Is Nothing" vs "= Nothing" と Nullable Type の強化

Shizuku Blog さんの 「VB : "Is Nothing" vs "= Nothing" と Nullable Type の強化」 を読んでちょっとおもしろそうだったので試してみました。
VB9 の LINQ では "Is Nothing" と書いた場合と "= Nothing" と書いた場合とで同じように振舞う、とのことですが、何がどうなっているのでしょうか?


以下、Visual Studio 2008 beta 2 で試してます。

まずはもっともシンプルそうなコードで。

    Dim ary As Integer?() = {1, 2, Nothing}
    Dim query = From x In ary _
                Where x = Nothing _
                Select x
    Console.WriteLine(query.Count())

これを実行してみると、、、あれ?ちゃんと "0" と表示されます。IL を見ると Where x = 0 と書いたのと同じような感じに解釈されているみたいです。
もちろん、Where x Is Nothing と書いた場合は意図どおり "1" という結果が表示されます。
どうやらここまで単純な場合だと "Is Nothing" と書いてやらないとダメなようです。

では、もうちょっと複雑なコード

    Dim ary() = { _
                    New With {.Name = "a", .Age = New Integer?(20)}, _
                    New With {.Name = "b", .Age = New Integer?(Nothing)} _
                }
    Dim query = From x In ary _
                Where x.Age = Nothing _
                Select x
    Console.WriteLine(query.Count())

おぉ、確かに "1" という結果が表示されます。この場合は "= Nothing" と書いても "Is Nothing" と同じように評価されているようです。
IL を見てみると "= Nothing" 部分は比較するコードは生成されておらず、代わりに Microsoft.VisualBasic.CompilerServices.Operators::ConditionalCompareObjectEqual() メソッドを呼び出すようになっています。この ConditionalCompareObjectEqual() メソッドの中までは調べていませんが、きっと Nullable と Nothing (null) との比較のときは HasValue をチェックするようになっているんでしょう。"= Nothing" と書いても "Is Nothing" と書いてもコンパイラは ConditionalCompareObjectEqual() メソッドを呼び出すコードを生成しています。なので、どちらの書き方をしても当然結果は同じになるわけです。


では、なぜ ConditionalCompareObjectEqual() メソッドが呼び出されるようになるんでしょうか?
それはきっと型が特定できないために late binding しているからでしょう。
ary の型を指定していないので object になっています。そして、そこから取り出した x も object です。Where の条件式 "x.Age = Nothing" の部分はラムダ式として解釈されているわけですが、そのメソッドの型を見ると bool Lambda(object) となっています。引数の object が x ですね。x が object なので x.Age というアクセスもできません (object には Age プロパティなんて無い)。そのため Microsoft.VisualBasic.CompilerServices.NewLateBinding::LateGet() メソッドを呼び出して Age にアクセスしています。そして ConditionalCompareObjectEqual() メソッドを呼び出して null と同じかどうかを判定しているわけです。
もちろん、こんなことになるのは Option Strict が Off の場合だけです。そもそも Option Strict On の場合はあちこちがコンパイルエラーになってしまいます。


では Option Strict On でも通るコード、すなわち late binding しないコードではどうなるでしょうか?


    Public Class Person
        Public Name As String
        Public Age As Nullable(Of Integer)
    End Class
 
    Sub Main()
        Dim ary As Person() = { _
                        New Person With {.Name = "a", .Age = 20}, _
                        New Person With {.Name = "b", .Age = Nothing} _
                    }
        Dim query = From x In ary _
                    Where x.Age = Nothing _
                    Select x
        Console.WriteLine(query.Count())
    End Sub

まぁ、答えは明らかなんですが、当然意図したようには動きません。この場合はきちんと "Is Nothing" としてやる必要があります。
(あれ?query の型は?と思ったらちゃんと IEnumerable(Of Person) と表示される。。。ひょっとして VB の Dim って C# の var の役割も兼ねてるの?)

2007年8月2日木曜日

Silverlight 1.0 RC2 がリリース?

Silverlight RC2 On The Way - We're Getting CLose! より

先週末に Silverlight 1.0 RC1 がリリースされたばかりですが、早くも RC2 がリリースされるようです。
上記の記事には "in the next couple of hours" とあるんですが 「2時間のうちに」 ということだったらすでに RC2 がリリースされてるのかな?"The update is Sunday night's drop." とあるので 7/29(日) の夜にビルドしたもの?
ちなみに RC1 が build 20724 で RC2 が build 20730 だそうです。

ただ、RC2 と言っても、RC1 からの breaking change は 1つも無いし、Silverlight.js や他のコードなども変更する必要はない、とのことです。

と言うか、上記記事の最後の段落に 「はっきり言うと、セキュリティ的な問題を見つけたからこのアップデートを出すわけではなくて、update broadcast system の public test のため」 みたいなことが書かれています。あと Silverlight 1.0 をリリースするまでおよそ 1週間おきくらいにあと何回かする予定、みたいなことも。ということで、そういうことなんでしょう。