ページ

2009年10月22日木曜日

[VS2010][Silverlight] Visual Studio 2010 と Silverlight 3 SDK

Visual Studio 2010 and Silverlight 3 SDK より。
ええと、Silverlight 3 Tools for Visual Studio 2008 と Expression Blend 3 に含まれている Silverlight SDK は 3.0.40624。
今回の Visual Studio 2010 beta 2 に含まれている SDK は 3.0.40818。
で、3.0.40624 が入っているマシンに 3.0.40818 を入れることはできない。
もし、3.0.40624 が入ってるマシンに VS2010 を入れると Silverlight SDK のインストールに失敗する。けど、3.0.40624 を使って VS2010 で Silverlight の開発をすることはできる。

ということなので、Silverlight SDK をアンインストールしておいてから VS2010 を入れた方がいいみたいな感じです。
(あとから 3.0.40624 をアンインストールして 3.0.40818 を入れてもいいのかもしれませんが)

ちなみに 3.0.40818 の変更点は

  • .NET 3.5 との依存性を無くして .NET 4 しか入っていないときもビルドできるようにした。
  • xap 名に Unicode 以外の文字も使えるようにした。
  • リファクタリングとインテリセンスの向上。

とあります。


[Windows7] Windows 7 の 7

Windows 7 って何が 7 なの?ということで、

この CM だと Windows 1.0、Windows/286 2.x、3.0、98、XP、Vista、そして Windows 7 ってことらしいです。
あれ? 95 は? Me は? NT は? 2000 は?とかって無粋なことは聞かないようにw

まぁ、真面目な話、
@IT: 「Windows OSのバージョンを判別するには?【Vista対応】[2.0のみ、C#、VB]
にあるように API 的には Vista がバージョン 6 で、その次だから 7 なんですけどね。

Windows 7 とは直接関係ないみたいですが、こんなのもありました。
BBC NEWS: 「In Pictures: Windows into history
Windows 1.0、2.0、3.0、3.1、95、98、Me、XP、Vista、7 のスクリーンキャプチャが見れます。

2009/10/22 18:00 追記
安藤さんからコメントをもらって気付きました。
http://msdn.microsoft.com/ja-jp/windows/dd882526.aspx
なんかにあるように Windows 7 の内部バージョンは 6.1 です。
(RC を元に記述とあるけど RTM でも変わってないよね?)
内部バージョンが 6 である Vista の次の OS だから Windows 7 という名前になったのかもしれないけど、Windows 7 の内部バージョンは 6.1、ということみたいですからご注意を。


[C#] C# 4.0 の Indexed Properties

Indexed Properties in C# 4.0 より。
ええと、何やら C# 4.0 では

// before
excel.get_Range("A1").set_Value(Type.Missing, "ID");

// after
excel.Range["A1"].Value = "ID";

と書くことができるそうです。
Visual Studio 2010 beta 2 で対応しているとのこと。

ん?こんな機能あったっけ?
と思ったんですが、上記記事に 「C# 4.0 language specificationC# Future page にもまだ公開されてない。なぜなら、ごく最近デザインチェンジがあって実装されたから」 とかあります。

記事によると、Indexed Properties は、get_X()、set_X() を X[] として呼び出せるようにするシンタックスシュガーで、C# コンパイラが get_ もしくは set_ の呼び出しに置き換えるそうです。
また、パラメータはすべてオプショナルとのこと。そしてパラメータ無しの場合は [] 自体を省略できるし、[] を書いても合法だそうです。(省略できるってのはすごいな)

IDE のインテリセンスやパラメータヘルプなども対応済みとのこと。ただし、Quick Info はまだ get_ set_ 形式のものを表示するそうです。

うーん、まぁ、確かに get_ set_ はすっきり書けるようにはなりますが...
ところで、私は最初の例がそもそも理解できてません。
Value = “ID” は Value[] = “ID” と同じで、なので set_Value(“ID”) になるってのはわかります。
けど、何でそれが set_Value(Type.Missing, “ID”) と同じ意味になるんだろ?
C# 4.0 の Optional Arguments が使われてるとしても、あれは C++ と同じでパラメータの最後からしか省略できないはずですし。
Named Arguments が使われてるわけじゃないですし。
まさか型から引数の位置を推測するなんてことができるようになるわけじゃないですよね?
これって、単にサンプルの書き間違いで Type.Missing が余計だったってこと?
# Visual Studio 2010 beta 2 を入れてないので試せない orz


2009年10月21日水曜日

[Silverlight] Silverlight Toolkit October 2009 リリース

Visual Studio 2010 beta 2 のリリースにあわせて Silverlight Toolkit October 2009 がリリースされています。

変更点 の最初には VS2010 beta 2 をサポートとあるので、これが一番の変更点なのかな?
「VS2010 のすばらしいデザイン・タイム・エクスペリエンスを提供するためにすべてのコントロールがアップデートした」 そうです。
Silverlight (and WPF) Data Visualization classes unsealed [Silverlight Toolkit October 2009 release now available!]」 には VS2010 のデザイナがいいもんで Blend を使うのをやめちゃったデベロッパーもいる、なんてことが書いてありますねw

VS2010 対応以外にもチャートとドラッグ&ドロップ対応が大きいみたいです。
チャートのことはよくわからないので置いておいて、ドラッグ&ドロップについて。
Tim Heuer さんの 「Silverlight Toolkit adds DragDrop targets!」 にコード例なんかがあります。実際に動くサンプルは こちら
たとえば、ListBox だと、単に ListBoxDragDropTarget で囲んでやればドラッグ&ドロップできるようになるみたいですね。
今実装されているのは

  • ListBoxDragDropTarget
  • TreeViewDragDropTarget
  • DataGridDragDropTarget
  • DataPointSeriesDragDropTarget

とのこと。
(DataPointSeriesDragDropTarget って何かと思ったら、チャートをドラッグ&ドロップターゲットにするものみたいですね)


2009年10月20日火曜日

[Silverlight] Silverlight Streaming by Windows Live 終了のお知らせ

私は使ったことないんですが、http://silverlight.live.com/ の Silverlight Streaming by Windows Live が終了するそうです。
詳しいことは
Important News for Users of the Microsoft® Silverlight(TM) Streaming by Windows Live(TM) Beta October 2009
にあります。
どうやら Silverlight Streaming by Windows Live はそのうち終了で、2009年末にローンチ予定の Windows Azure ベースのものに移行するということみたいです。ただし、Silverlight Streaming を直接置き換えるわけじゃないし、Azure はコストも必要になるなどいろいろと違うとかなんとか。

あと、Silverlight Streaming by Windows Live にあるコンテンツは各自ダウンロードしておいてくれということでその手順が載っています。


[VS2010] Visual Studio 2010 beta 2 リリース / 正式版は 2010年3月22日

あいかわらず Visual Studio 2010 をさわったことないんですが...

Microsoft のプレスリリース: Visual Studio 2010 and .NET Framework 4 Deliver Beta 2 in Final Stretch to March 22 Launch
Visual Studio 2010 beta 2 が本日 10/19 にリリース。
正式版は 2010/03/22 にローンチだそうです。

■ beta 2 で変わったところ
Somasegar’s Weblog: Announcing Visual Studio 2010 and .NET FX 4 Beta 2 より。
いろいろと VS2010 の追加点が書かれているのでざっとあげてみると、

  • beta 2 には SharePoint 2010 用のツールが統合されてる。
  • Windows 7 アプリケーション開発をサポートするランタイムとツールも含まれている。
  • 新しい Windows Azure ツールテンプレートで Windows Azure アプリの開発を始めるのが簡単になる。
  • Silverlight 3 データバインディングのサポートが向上したのでコードを書くのに専念できるようになる。(プレスリリースの方にはドラッグ&ドロップでデータバインドできるようになる、とある)
  • VS2010 のすべてのバージョンに Team Foundation Server が含まれる。
  • ソースコントロールやバグトラッキング、自動ビルドなどを小さなチームでも使える。
  • TFS Basic はシンプルでスリム。サーバやクライアント PC にインストールできる。

とかなんとか。

■ VS2010 のラインナップ
VS2010 は

  • Express
  • Professional
  • Premium
  • Ultimate

というラインナップになる模様。
詳細は http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx#compare など。

■ Go Live ライセンス
“Going live” with Visual Studio 2010 Beta 2」 によると、beta 2 からは go live ラインセンスなんですね。

■ F#
F# Beta 2」 によると、VS2010 beta 2 に含まれている F# は beta 2 だそうです。
あと、VS2008 用の F# CTP もアップデートしたそうです。

■ ロゴマーク
↓のロゴマークですが、

visualcsharp_2.png.jpg

VS2010 Beta2, and two loops too」 によると 「メビウスの輪じゃないよ」 とのことです。
(どうでもいい情報かもしれませんがw)


2009年10月16日金曜日

[Windows7][WPF] キャプションバーの無いウインドウでエアロシェイク

Implementing Aero Shake in a WindoStyle None WPF Window より。
Windows 7 でキャプションバーをふるふるするとそれ以外のウインドウが最小化してくれるエアロシェイク、あれってキャプションバーが無い時どうすんの?という話。

記事では WPF で WindowStyle=”None” としてキャプションバーが無いウインドウを作っています。
で、単に MouseLeftButtonDown イベントで DragMove() メソッドを呼び出してやればいいそうです。
すっごい簡単。
けど、こんなの知らないとわかんないな(笑)
ちなみに、この場合、キャプションバーをドラッグしてるのとほとんど同じ動作をするようです。なので、エアロシェイクに対応するだけでなく、ウインドウを移動できるようにもなっちゃいます。

ちょっと試してみましたが、もちろん Window だけではなく、たとえば TextBlock の MouseLeftButtonDown イベントで DragMove() を呼び出してやっても同じように動きました。

# Windows.Form のときは WM_NCHITTEST で HTCAPTION を返してやるとかかな?


2009年10月14日水曜日

[WindowsCE][Silverlight] Windows Embedded CE 6.0 R3 の Silverlight for Windows Embedded って Silverlight なの?

前に書いた 「[WindowsCE][Silverlight] Windows Embedded CE 6.0 R3 が RTM。そしてこいつには Silverlight が入ってる」 で Windows Enbedded に Silverlight for Windows Embedded なるものが入っていると紹介しましたが...
その記事でも 「MonoTouch みたいにネイティブコードにコンパイルしてから動かすということは無いんじゃないかと思ってるんですがどうなんでしょ」 とか書いたんですが...

InfoQ: 「Windows Embedded CE向けSilverlightは本当のSilverlightではない

ネイティブコードにコンパイルどころか、初めからネイティブな C++ しかサポートされないそうです。
また、Silverlight for Windows Embedded は完全に新しい API セットだそうです。
えーと、これのどこが Silverlight ?

Silverlight for Embedded tutorial
こちらに Silverlight for Windows Embedded のコード作成例が紹介されています。
最初に簡単な XAML を Expression Blend 2 で作成。
Blend は C# と VB にしか対応していないのでソースコードを作成しちゃダメとのこと。イベントハンドラなんかが作成されないようにオプションの Visual Studio との統合をオフにしちゃえだそうです。
続いて Platform Builder で Win32 アプリケーションプロジェクトを作成して、プロジェクトにリソースを追加、リソースにカスタムリソースとしてさっき作った XAML ファイルをインポート、という手順で XAML ファイルをとりこんでいます。
あとはコードを書けば OK。
記事に載っているコード例を見ればわかりますが、IXRApplication やら IXRVisualHost やら IXRFrameworkElement やらといったバリバリの COM の世界です。イベントハンドラの戻り値も HRESULT だし。デリゲートもメンバ関数ポインタを渡して作るんですね。(デリゲートも COM なので、使い終わった後に Release() してやらないといけないのがなんとも)

うーん、確かにインターフェースは似せてあるようなので、COM バージョンの Silverlight だと言われればそんなような気もしますが...
けど、それって Silverlight なの?
少なくとも 「C# や VB で Silverlight アプリを作れます」 と言う人が C++ や COM の知識無しに Silverlight for Windows Embedded に手を出すと大変な目にあいそう。
CE 上のアプリをネイティブ C++ で書いていたような人にとっては 「COM ベースの UI フレームワークが増えただけ」 と言う感じなのかな?


2009年10月2日金曜日

[MSMVP] Microsoft MVP を受賞できませんでした

すでに Twitter でつぶやいてるし、だいたいの人はご存じだと思うんだけど、一応書いときます。
# ちなみに私の Twitter アカウント http://twitter.com/ShinichiAoyagi

2002年 10月から今まで続けて Microsoft MVP を受賞してきましたが、残念ながら今回は受賞できませんでした。
まぁ、ここ一年はオンライン・オフラインともにほとんどコミュニティ的な活動はありませんでしたからね。
自分でも 「今回は無理だろうなぁ」 と思ってたんですが、やっぱり無理でした。

とはいえ、私自身は今までと変わらずやっていくつもりですのでこれからもよろしくお願いします。


2009年9月30日水曜日

[Silverlight] Silverlight 3 FireStarter のビデオが公開されてた

2009/9/17 にレッドモンド (MSCC) で開催された Silverlight 3 FireStarter のビデオが公開されました。
http://www.msdnevents.com/firestarter/

当日のセッションスケジュール
Silverlight-3 FireStarter…

あと、セッションで使われた PPT がこちらにあります。
Silverlight-3 FireStarter Slides…


2009年9月24日木曜日

[WindowsCE][Silverlight] Windows Embedded CE 6.0 R3 が RTM。そしてこいつには Silverlight が入ってる

Microsoft Delivers Rich User Experiences and Windows 7 Connectivity With New Windows Embedded CE Release より。
2000/9/22 付けのプレスリリースですが、Windows Embedded CE 6.0 R3 が RTM したそうです。
そしてこいつには Silverlight for Windows Embedded が入ってるそうです。
というか、「革新的な Silverlight for Windows Embedded ユーザインターフェース (UI) フレームワークを通して Silverlight のリッチなアプリケーションエクスペリエンスを提供する」 なんてあるので UI 部分の中核を Silverlight が担っているかのような印象を受けます。(Windows Embedded のことをよく知らないので大ウソの可能性ありw)

この Silverlight for Windows Embedded というのは out-of-browser で Microsoft Silverlight テクノロジのネイティブコード実装だそうです。
Windows 自体も普通の Windows とはいろいろと違うでしょうし、初めから out-of-browser 前提だったりと、きっと Silverlight for Windows Embedded は普通の Silverlight とはいろいろと違うんでしょうね。
けど、どうやら開発環境は Visual Studio や Expression Blend ということみたいなので、マネージドコード自体は同じということになるのかな?
(MonoTouch みたいにネイティブコードにコンパイルしてから動かすということは無いんじゃないかと思ってるんですがどうなんでしょ)

ちなみに、この Windows Embedded がどんなところに使われるかですが、記事にはスマートフォンや Windows ベースの小型ノートブックなどが例にあげられています。
まぁ、私は 「Windows Embedded と Windows Mobile ってどう違うの?」 というレベルなのでイマイチよくわかってないんですが。


2009年9月18日金曜日

[Silverlight] Wiki-OS がバージョンアップして Silverlight になってた!

先日、「[.NET][Internet] Wiki-OS ... すげぇ!!」 で紹介した Wiki-OS がバージョンアップしたそうです。
https://www.wiki-os.org/
さらにすげぇ!

Wiki-OS completely rewritten in Silverlight! Cross-platform, categories, ability to embed applications, and more」 によると、今回 Silverlight 3 で完全に書き直したそうです。
元は WPF (xbap) だったため .NET Framework 3.0 以上がインストールされた Windows 上でしか動きませんでしたが、Silverlight になったため Windows、Mac OS で動くようになったそうです。(Linux はもうすぐとのこと)

さっそくアクセスしてみたところ、あちこちがアニメーションするようになっていたり、デザインが変わっていたり、いろいろと変わっているようです。ただ、XAML・C# をエディットするアプリがえらく簡素なものになっていたりと 「あれ?」 と思うところもあります。まぁ、developer preview と書いてありますし、まぁ、そういうことでしょう。
ちなみに、アプリケーションの作り方 (クラスライブラリとか) なんかも Silverlight に合わせて変わっているみたいです。

あと、今までアプリケーションへのリンクがありましたが、アプリケーションを embed する機能が追加されています。
これはちょっとおもしろいかも。
Wiki-OS 上に Silverlight アプリを作って、それを自分のブログに貼り付けたりできるわけです。
まぁ、今の Wiki-OS だといつの間にか他の人に改造されちゃったりするわけですがw (けど、それはそれでおもしろいかも)
この embed は <object> タグを埋め込むことになりますので、一応 enableHtmlAccess を true にはしない方がいいんじゃないかと思います。(これを true にすると Silverlight アプリから HTML DOM にアクセスできるようになる)
もちろん、Wiki-OS が表示する埋め込み用 HTML には enableHtmlAccess の指定はありません。(なのでデフォルトの false になります)
参考 MSDN ライブラリ:「HTML ブリッジのセキュリティ設定

というわけで、以下、試しに Calculator を貼り付けてみるテスト(うまくいくかな)


2009年9月15日火曜日

[.NET][Internet] Wiki-OS ... すげぇ!!

https://www.wiki-os.org/
これはすごいな。

どうやら .NET Framework 3.0、WPF で作られているようなので実行にはそれらが必要です。
(ブラウザ上で動きますが、本体は xbap みたいです)

アカウントが無くても左下の “Applications” から Calculator (電卓) とか Cube 3D (四角形がグリグリするデモ) とかいろいろと実行できます。
と、これだけだと普通の 「ブラウザ上に作ったデスクトップ環境」 ですが、すごいのはこれらのアプリが編集できちゃうってとこ。

ただ、編集するにはアカウントが必要なようです。
左上の “Create an Account (free)” でアカウントを作成できます。
(メールアドレスなんかを入力して OK するとアクティベーションコードが書かれたメールが送られてくるのでそいつを入れてやります)

左下の “Applications” の “Create New Project...” で新規にアプリを作成できます。
アプリは XAML と C# コードで作ります。
編集画面も Visual Studio 風なので WPF とか Silverlight とかをやったことのある人ならだいたいわかるんじゃないかと思います。
また、各アプリのタイトルバーにある “edit” をクリックすればそのアプリを変更することができます。
そう、既存のアプリを自由に変更できるんです。(ただし、Accounts Manager などクリティカルなアプリは一般ユーザでは変更できないようになっています)
もちろん、アプリの変更はすべての人に影響します。
誰かが電卓に機能追加してくれればそれをみんなが使うことができるわけです。
”Applications” の “View All...” に他の人が作ったものも含めてすべてのアプリが載っています。
誰がいつどんな変更をしたのかはタイトルバーの “menu” の “View History of Changes...” を見ればわかりますし、”Applications” にある History アプリを使えばすべての変更履歴を見ることができます。
また、この History ウインドウの “Undo Selected” を使えば変更を元に戻すことができます。

いやぁ、この発想はすごいなぁ。
確かに Wiki OS だわ。
こんな発想、どっから思いつくんだろう。


2009年9月9日水曜日

[IIS][Silverlight] Live Smooth Streaming もうすぐリリース (was: マイクロソフト、「Silverlight 4」の詳細を明らかに)

最初に見たのは CNET Japan の 「マイクロソフト、「Silverlight 4」の詳細を明らかに」 というニュース。
Silverlight 4 の詳細が明らかになったんだったらぜひ知りたいところだけど、Silverlight 4 に関係ありそうなのは 「オフラインコンテンツ向けにも「PlayReady」デジタル著作権保護(DRM)技術のサポート機能を拡大する」 という部分だけって感じでイマイチよくわからない。
ブラウザ上で動く Silverlight がどうオフラインコンテンツと関係するのかもよくわからないし。

原文の方の 「Microsoft offers some Silverlight 4 details」 を見ても書いてあることはほとんど同じみたい。

で、おぎわらさんのところ で元ネタが Microsoft PressPass (Microsoft からのプレスリリース) の 「Microsoft Raises the Bar for Delivery of Live HD Online Video Using HTTP」 だと知った。
ん~、CNET の記事とはずいぶんイメージが違うな。

このプレスリリースって Live Smooth Streaming に関することが主で、その関連で Silverlight とか Silverlight 4 の話が出てきてるだけですね。

どうやら、今まで IIS Smooth Streaming と呼ばれていたものは Live Smooth Streaming と呼ばれるようになったみたいです。
そして、Live Smooth Streaming を実現するためのサーバ (IIS のアドオン) が IIS Media Services 3.0 というもので、これは 30日以内くらいにリリースされる予定とのこと。
また、9/11~15 にアムステルダムで開催される International Broadcasting Conference (IBC) で Silverlight 4 で作られた最新のメディア機能をプレビューするそうです。
この Silverlight 4 には、ネイティブなマルチキャストサポートや Microsoft PlayReady テクノロジによるオフラインなデジタル著作権管理 (DRM)サポートなどが含まれているとのこと。
加えて、IIS Smooth Streaming Transport Protocol と Protected Interoperable File Format (PIFF) 仕様を Microsoft Community Promise の元でリリースするとのことです。

一応書いておくと IIS Media Services 3.0 による Live Smooth Streaming のクライアントは Silverlight 3 です。
Silverlight 4 ではさらに進化するのかも知れませんが、Silverlight 4 までお預けということではありません。

後半に Silverlight 4 についてもうちょっとだけ書かれています。
IBC では Silverlight 4 のメディア機能の早期プレビュー版のデモをするようですが、これはオフライン PlayReady DRM の拡張と out of browser によって次世代のムービー視聴体験ができるようになることを示すそうです。
これらの機能によって、デジタルコピーやインターネット経由での配信であっても、消費者が DVD やブルーレイで得ていたのと同じようなリッチでインタラクティブなエクスペリエンスをムービー製作業者や小売業者が提供することが可能になるそうです。また、ムービー製作業者がネットワーク経由での更新や特典、生のイベントを提供したり、過去にムービーを購入した消費者との関連を強化したりできるようになるそうです。(この辺の英文はあまり自信がありません)

ちなみに、CNET のニュースでは 「offline content」 となっていますが、プレスリリースにはそういう言い回しは無く、あるのは 「offline DRM」 もしくは 「offline PlayReady DRM」 です。
特に後者はそのあとに 「and out of browser capabilities.」 と続いています。
普通に考えて 「オフラインコンテンツ向け」 じゃなく 「オフラインでも動作可能な DRM」 という意味なんじゃないかと。
特に out of browser と組み合わせればオフラインであっても DRM が働いたうえで Silverlight でムービーが視聴できるということなんじゃないかと。

あと、IIS Media Services 3.0 のリリースと同時にデベロッパ向けに Smooth Streaming player 開発キットのベータ版が提供されるそうです。
この開発キットではテンプレートを使ってカスタムプレイヤーを簡単に作ることができるとのこと。


[Silverlight] Silverlight 4 に欲しい機能は?

Silverlight feature suggestions より。
どうやら Silverlight 4 にどんな機能を盛り込むか意見募集中ということみたいです。
Tim Heuer 氏からは “Do you have a need to convert Flash applications?"、"How do you prefer to learn Silverlight?"、"Are you using the provided Silverlight Toolkit themes in your applications?" という 3つの問いが載っています。(1番目と 3番目は投票できるようになっています。2番目のはブログにコメントして欲しいとのこと)

あと、Silverlight Feedback Forum なんてものもあります。
見ればわかるとおりフォーラムというよりは投票所で、一人 10票まで投票できます。


2009年9月2日水曜日

[.NET] All-In-One Code Framework がアップデート

以前に 「[.NET] All-In-One Code Framework ってなんぞ?」 で紹介した All-In-One Code Framework が 2009/08/26 にアップデートしたそうです。

交信内容は
http://cfx.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32006
にあります。
Windows 7 のサンプルなどいくつかのサンプルが追加されています。

って言うか、今まで全然気づいてなかったんですが、2009/07/30 には Silverlight 3 だとかいろいろ追加されてますし、結構頻繁にアップデートされてたんですね。


[Silverlight] Silverlight 3 がマイナーアップデート

Silverlight minor update released today」 によると Silverlight 3 が GDR 2 (3.0.40818.0) にマイナーアップデートしたそうです。
更新履歴が http://www.microsoft.com/silverlight/resources/technical-resources/ の “Deployment/IT Administration" をクリックして、"Release History" にあります。
これによると

  • Unicode キャラクターサポートの拡張。特に GB18030 について。
  • ネットワークパフォーマンスの向上。
  • ビデオシーキングの向上。

だそうです。
Tim Heuer 氏の記事の感じでは GB18030 がらみが主なのかな?

ちなみに、Silverlight Tools には更新は無いけど、Silverlight SDK はアップデートされてるようです。
また、development runtime も更新されています。
...と、あるんですが、日本語版も同時に更新されるんだろうか?

あれ?
http://msdn.microsoft.com/ja-jp/silverlight/
の 「Silverlight 3 ソフトウエア開発キット(SDK)」 のリンクをクリックすると ページが見つかりません になっちゃうな。更新中?


2009年8月28日金曜日

[Silverlight] Popfly Game Engine のソースコード公開

2009年 8月 24日をもって終了してしまった Popfly ですが、その一部のソースコードが CodePlex にて公開されたそうです。
http://popflygameengine.codeplex.com/

Popfly Parting Present」 によると、Microsoft 内の Web サービスと密に結びついていたり、他のプロダクトからのコードを含んでいたり、MS データセンター無しでは使いようが無かったり、といろいろな理由で Popfly の大部分のソースコードは公開することが不可能とのことです。
公開された Popfly Game Engine はゲームデータファイルを読み込んで実行する部分とのこと。
クリエータ (ゲームデータファイルを作る機能) は含んでませんが、データファイルを作るのに参考となる情報は十分に含まれているそうです。
また、サーバと通信するような機能 (ハイスコアやバッジといったものをサーバに保存するような機能) に関する部分も含まれていないとのこと。
しかし、Silverlight, C# でシンプルなゲームエンジンを作る方法を示したコードとしておもしろいものであると思っているとのことです。


[Silverlight][HTML5] uuCanvas.js - HTML 5 の &lt;canvas&gt; を Silverlight で実装

昨日の 「[Silverlight][HTML5] HTML 5 の <canvas> を Silverlight で実装してみたって。。。その発想は無かった」 にコメントを頂きました。

nitoyon さんより

日本でも同じようなことを試してるかたがいらっしゃいます!
http://d.hatena.ne.jp/uupaa/20081114/1226596120

こりゃすごい。
この記事にある 「Silverlight による HTML5::Canvas の実装」 は uuCanvas.js として↓にまとめられています。

http://uupaa-js-spinoff.googlecode.com/svn/trunk/uuCanvas.js/README.htm
uuCanvas.js は HTML 5 の <canvas> をサポートするための JavaScript ライブラリなんですが、Chrome、Safari、Opera、Firefox ではそれぞれのブラウザが持つ <canvas> を、IE では Silverlight で <canvas> 相当の機能を実現するようになっています。(IE で Silverlight が入っていない場合は VML を使うようになってるそうです)
なので、ちょっとしたお約束を守っておけば同じ HTML で IE でもそれ以外でも <canvas> を使うことができます。
詳しいことは uuCanvas.js のサイトを。
また、いろいろなデモもあります。

昨日紹介した記事にも “Aside: Yes, I know I'm not the first person to add <canvas> support to IE. :)” なんてありましたから、いろんな人がいろんな方法で <canvas> を実装したりしてるんでしょうね。
私は、昨日の記事を書くときに 「へぇ、<canvas> ってこういう機能なのかぁ」 と初めて <canvas> のことを知った (それまでは名前しか知らなかった) ような人なのでまったく知りませんでした。


2009年8月27日木曜日

[Silverlight][HTML5] HTML 5 の &lt;canvas&gt; を Silverlight で実装してみたって。。。その発想は無かった

Using one platform to build another [HTML 5's canvas tag implemented using Silverlight!] より。
Microsoft の Silverlight と WPF のデベロッパの方のブログですが、HTML 5 の <canvas> を Silverlight で実装してみたそうです。
いやぁ、すごい。
つか、その発想は無かったな。

記事にはいろいろと <canvas> を表示させてみたスクリーンキャプチャが貼り付けられています。
ただ、さすがにネット上のページを自由に表示できるというわけではなく、自分で HTML を画いてる必要があります。
まずは、<head> の中あたりにでも

<script type="text/javascript" src="Html5Canvas.js"></script>

と追加してやります。
そして、たとえば、

<canvas id="canvas1" width="150" height="150"></canvas>
<script type="text/javascript">
function draw() {
var canvas = document.getElementById('canvas1');
:
}
</script>

という風に <canvas> が使われていた場合は、<canvas>~</canvas> を

<script type="text/javascript">
InsertCanvasObject("canvas1", 150, 150, draw);
</script>

と置き換えてやります。
<canvas> を操作するための JavaScript たち (上記の draw() 関数など) はそのままで OK です。
これで InsertCanvasObject のところに Silverlight アプリが作られて、その中から draw() 関数が呼び出されます。

また、<canvas> の仕様をすべて実装したというわけではないそうです。
Mozilla のサンプルページの最初の 5ページを動かすのに十分な分だけサポートされているそうです。(たぶん Mozilla Developer Center's Canvas tutorial のことだと思う)
また、記事の最初の方に

  • Paths and shapes (move/line/curve/arc/clipping/etc.)
  • Strokes and fills (using solid colors/gradients/images/etc.)
  • Images
  • Context save/restore
  • Transformations (scale/rotate/translate/etc.)
  • Compositing (alpha/blending/etc.)
  • Text (font/alignment/measure/etc.)
  • Pixel-level manipulation
  • Shadows

というリストがありますが、これのイタリックになっているものは何も実装していないそうです。

ソースコードは記事の下の方にある "[Please click here to download the complete source code to Html5Canvas and the sample application shown above.]” というリンクからダウンロードできます。
Html5Canvas.Web プロジェクトを 「スタートアッププロジェクトに設定」 して、TestPage.html を 「スタートページに設定」 して実行すればサンプルページが開きます。
ちなみにソースは Ms-PL とのこと。

ちょこっとだけソースを見てみました。
CanvasRenderingContext2D.cs が処理のほとんどを行ってるんですが、思った以上にシンプルです。
というか、<canvas> の fillRect は XAML の Rectangle に、drawImage は Image に、Path は PathGeometry に、というようにほぼ単に XAML に置き換えてるだけなんですね。
記事にも <canvas> のことを調べてたら Silverlight でネイティブにサポートされているのと同じものが多いと思ったというようなことが書いてありますが、ほんとにそうなんですね。


[Silverlight] Parallel で最適化してみる例

Silverlight 3 のサンプルを Parallel で最適化してみたという例がなかなかおもしろかったので紹介。

もともとは 「Flirting With Silverlight」 にある Silverlight 3 のサンプルです。
(「ActionScript に比べてどうよ?」 みたいなところから始まっているようですが、そのあたりはここでは割愛)
”Example” が Silverlight 3 アプリへのリンクになってます。
見てもらえばそのままですが、これは WriteableBitmap にパーティクル(点々)を描いてみるというサンプルです。
マウスを乗っけるとグリグリと動きます。

このサンプルを Parallel を使って並列化してみたというのが 「Adding Concurrency Optimization in Silverlight 3」 です。
並列化と言ってもそんなに難しいことはしていません。
まず、.NET Framework 4.0 に追加される予定の Parallel.For をまねて ParallelFor メソッドを作ります。
この ParallelFor メソッドは記事に丸ままコードが載っています。
次に、OnStoryboardCompleted メソッドの中の 2ヶ所のループをこの ParallelFor を使うように変更します。
変更結果も記事に載ってますので、ここでは要点だけ。

まずは、

while (--index > -1) 
bitmap.Pixels[index] = 0x000000;

というループ。
これは WriteableBitmap の全ピクセルを 0x0 で埋める、すなわち、真っ黒に塗りつぶすためのコードです。
これを単に ParallelFor を使ったループに変更します。

もうひとつは

while (null != particle)
{
x = particle.X;
y = particle.Y;
z = particle.Z;
:
}

というループ。
こちらは ParallelFor できるように以下の修正を加えたそうです。

  • w、xi、yi といったループの外で宣言されているけど、実はループの中でしか使っていないというローカル変数をループの中に移動。
  • 元のコードでは particle という線形リストになっていたものをあらかじめ配列に格納しておいてそちらを参照するように変更。

コードを見比べてもらえばわかりますが、並列化できるようにしたって言うだけでそんなに大した変更ではありません。

さて、結果です。
OnStoryboardCompleted メソッドは 1フレーム描画するたびに呼ばれるようですから、この 2ヶ所を並列化しただけでもそれなりに効果があります。
記事前半にある “Silverlight Version, optimized to leverage Concurrency” が Silverlight アプリへのリンクになってます。
このアプリではスライダでいくつのスレッドで並列化するのか指定することができるようになってます。
私の環境だとスレッド数 1 だと 34fps くらい、スレッド数 8 だと 89fps くらいでした。
Core i7 で論理コア数 8 なんですが、スレッド数を 8 にした状態でタスクマネージャで見ていると、きちんとすべてのコアが動いてます。
けど、スレッド数をそれ以上に増やすとなぜか fps も下がって、しかも寝ているコアが出てきます。
うーん、なんかコアをうまく使えてないような。

ということで、スレッド数を多くした時の挙動はアレですが、論理コア数と同じスレッド数にしているときにはかなりのパフォーマンス向上が見込めそうです。
もちろん、論理コアがもともと 1しかないような場合にはオーバーヘッドの分だけパフォーマンス低下があるかもしれませんが。

ちなみに、ソースコードは記事の最後の方にある “Strange Attractor Project” というリンクからダウンロードできます。
大元の記事のコードでは StoryBoard で OnStoryboardCompleted を呼び出すというやり方でしたが、OnStoryboardCompleted メソッドが HandleRendering と改名され、CompositionTarget.Rendering イベントで HandleRendering を呼び出すというように変更されています。
StoryBoard だと最大 fps で動かせないでしょうからね。


2009年8月24日月曜日

[VS2010] Visual Studio 2010 のスタートスクリーンをカスタマイズする

Customizing the Visual Studio 2010 Start screen より。
Visual Studio 2010 のスタートスクリーンをカスタマイズする方法が紹介されています。
スタートスクリーンも XAML で書かれているそうです。

(一部のみ抜粋して翻訳)

試すには、まず 「Documents\Visual Studio 10」 フォルダの下にでも 「StartPages」 フォルダを作る。
そして、「Microsoft Visual Studio 10.0\Common7\IDE\StartPages」 フォルダの内容をコピーする。
VS2010 でプロジェクトを開いて、後は自由に編集!

スタートスクリーンのルートは 3つの行の Grid になっている。最初の行は Visual Studio のロゴを、3つ目の行は RSS フィードコントロールを含んでいる。すべてのアクションは真ん中の行にある。注意:真ん中の行はカスタムの VS コントロールを含んでいる。これは次のベータでまたカスタマイズされて置き換えられるだろう。

で、Border の Background を変えて背景色を変えたり、リンクを追加してみたりといった変更例が載っています。
あれ?変更した後にどうすればいいのか書いてないんですが、単に 「Microsoft Visual Studio 10.0\Common7\IDE\StartPages」 フォルダに XAML ファイルを放り込んでやればいいのかな?
# あいかわらず VS2010 を見たこともないので自分では確認できないです

さぁ、これで、きっと誰かがスタートスクリーンを痛IDE化してくれるはずw


2009年8月20日木曜日

[C#] Spec# が CodePlex に登場

Microsoft Research にあった Spec# が CodePlex に登場してました。
http://specsharp.codeplex.com/
と言っても、チュートリアル は 「もうすぐ」 と書いてあるだけですし、ドキュメントは Microsoft Research の方を見てくれ、とかそんな感じなんですが。

Spec# というのは C# に契約指向? (contract oriented) な機能を追加したものです。
Eiffel に 「表明」 と呼ばれる機能がありますが、あんなやつです。
Generics みたいに Microsoft Research で生まれて、その後本家 .NET Framework に取り込まれたものもありますが、Spec# が今後どうなっていくのかはわかりません。
F# も Microsoft Research 生まれですね。

以下、Spec# のわかりやすいところを紹介してみます。

■ NonNull

public Method(object! o)
{
...
}

こんな風に引数の型名に ! を付けると 「null であってはならない」 ことを表明できます。

■ PreConditions

public void Method(int a)
requires a > 0;
{
...
}

こんな風に requires でメソッド開始前の必要条件を指定できます。
「requires ValidString(s)」 みたいにチェック用メソッドを自分で定義してチェックさせることもできるようです。
で、条件を満たさない場合は RequiresException が発生する、のかな?(PPT にそう書いてありました)

■ PostConditions

public int Method(int x, int y)
ensures result == x + y;
{
return x + y;
}

こんな風に ensures でメソッド完了後の必要条件を指定できます。
上記の例では result キーワードを使って戻り値をチェックしてますが、他にもプロパティの値をチェックしたりといったことも書けるようです。
というか、requires と ensures には boolean を返す式をなんでも書けるんじゃないかと思います。

■ その他
Program Verification Using the Spec# Programming System [PPT] なんかを見ると他にもいろんな機能があるようです。
上記の例はいずれもメソッド単位のチェックですが、もっと細かくループ単位でのチェックだとか、反対にクラスのインスタンス単位でのチェックなんかもできるみたいです。


2009年8月18日火曜日