ページ

ラベル Silverlight の投稿を表示しています。 すべての投稿を表示
ラベル Silverlight の投稿を表示しています。 すべての投稿を表示

2012年4月23日月曜日

[Silverlight][WP7][WinRT] XAML Spy

(まだダウンロードすらしてないけど)
http://xamlspy.com/
実行中アプリの XAML の内容を閲覧することが出来るツールです。Silverlgith、Silverlight For Windows Phone、WinRT に対応してます。
現在は Preview リリースなので無料で使用できるようです。

ちなみに作っているのは Silverlight Spy と同じところみたいです。

(@biac さんのつぶやきで気付いたので以下追記)
Silverlight は Web ブラウザーを内蔵していて、それ経由でアクセスすることにより任意のアプリの XAML を見ることができるようです。参考: Connecting a Silverlight application (Silverlight Spy も同様の動きでした)

Silverlight for Windows Phone はエミュレーター上で XAP を動かすことによって XAML を見るようです。なので、XAP が入手できるアプリであれば任意のアプリの XAML を見ることができるんじゃないかと思います。参考: Connecting a Windows Phone application

WinRT は Silverlight の Web ブラウザーや Silverlight for Windows Phone のエミュレーターにあたるものが無いようで、あらかじめコードに XAML Spy と通信するためのコードを埋め込んでおく必要があるようです。参考: Connecting a WinRT application ということは、あらかじめこのコードを埋め込んであるアプリの XAML しか見ることはできないことになりますね。

うーん、そうかぁ。
WinRT ランタイムをホストするための仕様なんかが公開されれば、それ経由で XAML にアクセスすることができるかもしれませんが、そうなるまではどうしようもないんでしょうね。

2012年4月10日火曜日

[Silverlight] コントロールのテンプレートを書き換える

某所を見て難しいとか面倒とか言われていたので書いとく。

たとえば、「コンボボックスの IsEnabled が false のときの色を変えたい」なんてときはコントロールテンプレートを書き換えてやることになります。
Silverlight の標準のコントロールのテンプレートは MSDN の 「コントロールのスタイルとテンプレート」 にあります。コンボボックスなら 「ComboBox のスタイルとテンプレート」 です。

実際にコンボボックスを例にやってみます。

MSDN の前半に書かれているパーツやら状態やらは単なる説明なのでどうでもいいです。
XAML が書かれているところのちょっと上に使われている名前空間が書いてあります。xmlns:vsm と xmlns:sys を使ってるとあるのでこれらを書き足してやります。
続いて XAML の <Style TargetType=”ComboBox”> と <ControlTemplate x:Key=”ValidationToolTipTemplate”> を <UserControl.Resources> の中にそのままコピー&ペースト。
必要なのはこれだけです。

<UserControl x:Class="SilverlightApplication1.MainPage"
    ......
    xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    ......>

    <UserControl.Resources>
        <ControlTemplate x:Key="ValidationToolTipTemplate">
             ...MSDN の内容をここにペースト...
        </ControlTemplate>

        <Style TargetType="ComboBox">
             ...MSDN の内容をここにペースト...
        </Style>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="White">
        <ComboBox ... .../>
    </Grid>
</UserControl>

一つだけ注意があります。
MSDN 上では先に <Style ...> が書かれていますが、このスタイルの中で後に出てくる <ControlTemplate x:Key=”ValidationToolTipTemplate”> を使っています。この場合、実際の XAML では <ControlTemplate ...> を先に書いておかないとエラーになってしまいます。

あとはこの XAML を好きなように書き換えれば OK です。
上から眺めていけば

<vsm:VisualState x:Name="Disabled">
    <Storyboard>
        <DoubleAnimation Duration="00:00:00" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="(UIElement.Opacity)" To=".55"/>
    </Storyboard>
</vsm:VisualState>

なんてのが見つかります。名前を見ただけでも 「Disabled になったときに DisabledVisualElement を 0.55 の透明度にする」 ということなんだろうという検討が付きますね。
で、この DisabledVisualElement を探すと

<Rectangle x:Name="DisabledVisualElement" RadiusX="3" RadiusY="3" Fill="White" Opacity="0" IsHitTestVisible="false" />

となってます。
試しに Fill=”White” を Fill=”Red” にしてみたら Disabled になったときに赤っぽくなるコンボボックスになりました。
XAML をガシガシ書き換えてやれば好きなようにカスタマイズできますので後はお好きなようにどうぞ。

ちなみに、Expression Blend を使うともっと簡単だったりします。
確か、コントロールを右クリックして 「テンプレートの編集」 とか何とかを選んでやるだけでよかったはず。

2011年12月19日月曜日

[Silverlight] Silverlight 5 の 3D アクセラレーションがデフォルトで動かない件

前の記事の 「[Silverlight] Silverlight 5 の 3D アクセラレーションはデフォルトでオフ(オフと言うか拒否)」 について。
正直、自分では 「ふーん、デフォルトでは拒否なんだ」 程度にしか思ってなかったんですが、これってかなり残念な感じかも、という気がしてきました。

Silverlight 5 で 3D なゲームを作っても一般の人にはよくわからない理由で動かないわけです。
動くようにするためには以下の手順で 「許可」 してもらう必要があるわけです。

  1. Silverlight プラグインの上で右クリックして 「Silverlight(S)」 をクリック。
  2. 表示されたダイアログの 「アクセス許可」 タブをクリック。
  3. 一欄から自分のサイトを探してもらう。(URL が列挙されてるだけなのでわかりやすいとは言えないかも。frame で別サイトを組み込んでいたりする場合はどうなるんだろう?)
  4. 見つかったらそいつを選んで 「許可」 ボタンを押してもらう。

単に 「アクセス許可を与えてくれ」 だけじゃ、それなりの人にしかわからないでしょうから、この手順を書いとかなくちゃダメって感じになりますね。
先の記事にも書いたように GraphicsDeviceManager.Current.RenderMode を見ればハードウェアアクセラレーションが使えるかどうかがわかるので、それで表示・非表示してやる感じでしょうか。メッセージボックスだと OK ボタンを押して閉じないと Silverlight プラグイン上で右クリックできないので、見ながら操作できるように XAML で書いといた方がよさそうですね。
アプリにもよるでしょうが、最低限、日本語と英語くらいは用意しておいた方がいいかもしれません。

でも、一番の問題はなぜデフォルトでは拒否されているのか、それを許可するとどうなるのか、をきちんと説明しないといけないことじゃないかと思うんですよ。
HTTPS なんかでもありますよね。オレオレ証明書を使っていて 「警告メッセージが表示されるけど問題ないからそのまま OK してくれ」 なんて説明してるサイトが。問題があるから (問題がある可能性があるから) 警告メッセージがでるわけで、こんないい加減な説明をしていいはずがありません。
これと同じで 「何も考えずに 3D グラフィックスを許可してくれ」 はまずいんじゃないかと思うわけですよ。
けど、きちんとした説明を書く自信なんて無いなぁ。

■ RequestDeviceAccess() は無いの?
Silverlight 4 からはカメラやマイクが使えるようになってますが、これも知らないうちにオンにされたりしたら困るわけで、ちゃんと使う前に許可を得なくちゃいけません。
そのために CaptureDeviceConfiguration.RequestDeviceAccess() という静的メソッドが用意されています。
このメソッドを呼び出すだけで

Silverlight5_CameraAccess.png

このダイアログが表示されます。
右クリックしてどうのこうのとしなくても、このダイアログで簡単にアクセス許可の可否を選択できます。
「回答を保存する」 をオンにすれば右クリックで出るダイアログの 「アクセス許可」 のところにちゃんと記録されます。
もちろん、今の言語にあわせて日本語なり、英語なりで表示されます。
「詳細情報」 のリンクをクリックすればマイクロソフトのプライバシーポリシーの説明が表示されます。

3D グラフィックスには RequestDeviceAccess() に相当するものって無いですよね?
デフォルトで拒否でいいからこれを用意して欲しいなぁ。

2011年12月15日木曜日

[Silverlight] Silverlight 5 の 3D アクセラレーションはデフォルトでオフ(オフと言うか拒否)

Silverlight 5 では GPU アクセラレーションが強化されて 3D とかも速くなったとかなんとか。。。ということだったので、試してみようと
http://david.blob.core.windows.net/babylon/Babylon.html

にアクセスしてみました。ここは、Code Recipe でコードが公開されている Babylon 3D engine のデモサイトです。

が、サイトにアクセスすると以下のようなメッセージボックスが表示されて正常に実行されません。

Error during initialization:Hardware rendering is disabled by security reason. Please right click on your silverlight plugin, go to permissions tab and allow 3D for this application.

解決策はこのメッセージに書いてあるとおりなんですが、Silverlight 上で右クリックしてコンテキストメニューを表示、「アクセス許可」 で 「3D グラフィックス」 を 「許可」 してやります。それからページをリロードしてやれば今度はメッセージボックスが表示されること無く、実行されるはずです。

Silverlight5_Allow3D.png

明示的に許可してやらないとダメなんですね。
確か WebGL もセキュリティ的な問題があるというような記事を読んだような記憶があるんですが、これも同じような理由でしょうか?GPU のことも、セキュリティのこともあまり詳しくはありませんが、確か以下のような話だったような。。。

Silverlight はサンドボックス内で実行されているのでどうがんばってもマシンに悪影響を与えることはできません。Silverlight ランタイムがいろいろがんばってセキュリティ的な悪影響を与えないようにしてくれてるわけです。しかし、GPU やグラフィックスドライバといった 3D アクセラレーションの部分は Silverlight ランタイムの管理外になってしまいます。今どきの GPU はすごく高機能で、単に画像を表示するだけではなく、シェーダー言語と呼ばれる C 言語風の言語で処理内容を定義するようなことができます。このあたりを利用して物理演算なんかも GPU でやってしまおうという DirectCompute、OpenCL、CUDA なんてものもあります。確か Silverlight 5 はシェーダーモデル 2.0 のシェーダー言語をサポートしていたんじゃないかと思います。こういったシェーダー言語の部分も含めて Silverlight の管理外となってしまうわけです。もちろん、GPU が 「マネージド」 になってて Silverlight ランタイムと同様に安全性を検証できるようになっていれば問題ないんでしょうが、もともと 「いかに高速に処理するか」 をメインテーマに進化してきたものなのでセキュリティ的な面からはいろいろとまずい所があるんでしょう。
そんなわけで 3D アクセラレーションに関する部分については Silverlight ランタイム側で安全性を保証できない、だから明示的にユーザーが許可してね、ということなんじゃないかと思います。

ところで、Babylon のデモサイトですが、“Predefined scenes:” のところでシーンファイルを選んでやるとデモ用に用意されたシーンが描画されます。データを読み込むのには時間がかかりますが、読み込んでしまえば 60fps で動いてました。

また、この 「3D アクセラレーションが使用可能か?」 の判断方法については Bobylon 3D engine の作者さんのブログにも書いてありました。
Silverlight 5 is out!
GraphicsDeviceManager.Current.RenderMode を見ればハードウェアアクセラレーションが使えるかどうかがわかり、GraphicsDeviceManager.Current.RenderModeReason を見ればハードウェアアクセラレーションが使えない理由がわかるようです。

2011年6月27日月曜日

[Silverlight] Silverlight を囲む会 in 大阪 #19 に参加しました

Silverlight を囲む会 in 大阪 #19 に参加してきました。
今回のメインテーマは SharePoint。
SharePoint MVP でもあり、SharePoint をメインに扱う会社の代表取締役でもある山崎さんをスピーカーに迎えて。
私自身は SharePoint のことはほとんど初心者レベルだったので、初めて知るようなことが多く、いろいろとおもしろかったです。
Silverlight Web パーツの開発のお仕事なんてできるとおもしろそう(残念ながら今のところ SharePoint を使っているという人(個人・法人)の心当たりがまったくありませんが)

また、30分ほどのショートセッションでしたが、マイクロソフトのエバンジェリストである大西さんの Windows Phone 7 Mango の紹介。
休憩時間中に実機もさわらせてもらいました。
あぁ、Mango が楽しみ。

伊勢シンさんの 「Socketプログラム Siverlight for Windows Phoneへの移植のポイント」 もおもしろかった。
伊勢シンさんは 「誰得だよ」 とおっしゃってましたが、私にとっては結構 「俺得」 でしたw

最後にいろいろなプレゼントの抽選会。
先週の VSUG DAY 2011 Summver 東京 の際にマイクロソフトの高橋忍さんから 「大阪で勉強会があったときにでも配ってください」 と Windows Phone 開発技術情報 DVD と WP-Arch シールを頂いていたのでそれも希望者に配布しました。DVD は 20枚くらいあったので余ると思ってたんですが、品切れになっちゃいました。ということは、ほぼ全員が持って帰ったってことですね。やっぱり、直前に大西さんに Mango 実機を見せてもらってるし、みんな興味を持ったのかもしれませんね。

その後はお楽しみの懇親会。
その後、大西さんを交えての二次会、さらに三次会と楽しい一日でした。

2011年6月16日木曜日

[.NET] スレッドセーフな ObservableCollection<T> が欲しい

Windows Phone 7 のコードを書いていると今まで以上に UI スレッドをブロックしたくなくなるんですよね。(ぬるぬるにしたいからw)

で、今更ながらに ObservableCollection<T> についてどうにかならないか考えてたんですが、どうにもなりそうにないですねぇ。
ObservableCollection<T> は INotifyCollectionChanged を実装してコレクションに変更があったことを通知してくれるようになってるわけですが、この INotifyCollectionChanged の CollectionChanged イベントは 「何番目の要素が変更されたか」 といった情報も伝えるようになってます (NotifyCollectionChangedEventArgs 参照)。で、CollectionChanged イベントを受け取るのは ListBox などの UI 要素であることが多いわけです。必ずしもそうと決まっているわけではないですが、ObservableCollection<T> を使うのは ListBox などの ItemsSource にしたいから、という場合がほとんどじゃないかと思います。そして、ListBox などの UI 要素のほとんどの機能は UI スレッド以外から呼び出すことはできません。呼び出すと例外が発生します。そのため、CollectionChanged イベントも UI スレッド以外で発生させるのは危険ということになります。
ObservableCollection<T> に対して Insert や Remove などを行うと自動的に CollectionChanged イベントが発生するわけですから、結局のところ UI スレッド以外でこういったコレクションの内容を変更することはできないわけです。もちろん、Insert や Remove の処理自体は別スレッドで行って、CollectionChanged イベントの発行のみ UI スレッドでやるという実装も可能ですが、CollectionChanged イベントの呼び出しが終わるまでコレクションの内容が NotifyCollectionChangedEventArgs の内容と整合性が取れていることを保証しなくちゃいけませんから、結局のところあんまり別スレッドで Insert、Remove などの処理を行う意味は無いって感じになってしまいます。

ObservableCollection<T> 単体で考えればスレッドセーフにする意味があるかもしれませんが、ListBox の ItemsSource にデータバインディングしている ObservableCollection<T> と考えると ListBox の中身まで含めて都合をつけなくちゃいけないのでどうにも手の出しようがないって感じですね。
こういう風に考えると、この記事のタイトルは 「スレッドセーフな ObservableCollection<T> が欲しい」 ではなくて、「UI 要素に任意のスレッドからアクセスできるようにして欲しい」 というところに行き着いちゃうわけです。

「ObservableCollection threadsafe」 で検索するとすぐに Thread safe observable collection この記事が見つかりました。
見てみると、これもやはりほとんどのメソッドを Dispatcher 経由で UI スレッドにスイッチしてますね。参照系は ReaderWriterLock で別スレッドからでもアクセス可にしてあるので、その部分はパフォーマンス向上に繋がるかもしれませんが、それくらいかなぁ?
あと、この例では Dispatcher.Invoke() メソッドを使って UI スレッドに同期的にスイッチしていますが、Silverlight/WP7 には Invoke() は無いんですよねぇ。(BeginInvoke() しかありません)
Dispatcher.BeginInvoke() を使って非同期的に UI スレッドにスイッチするとなると、上にも書いたように UI スレッド側での CollectionChanged イベントの呼び出しが終わるまでコレクションの内容を維持してやるとかいった仕組みが必要になります。(CollectionChanged イベントの呼び出しが終わるまで次の Insert や Remove の実行をブロックするとか) そういう実装もやれないことは無いですが、あんまりパフォーマンスは良くならないような感じがしちゃいます。

と、言うわけで、この件は考えるのやめましたw
何かいいアイデアがあったら教えてください。

2011年6月9日木曜日

[Silverlight] Silverlight 4 の ScrollViewer がマウスホイールでスクロールしない!(バグってる?)

確か記憶では、、、

Silverlight 2 のころはそもそもマウスホイールはサポートされてなかったので HtmlPage のホイールイベントをひろってどうのこうのと。。。

そして、Silverlight 3 では Silverlight Toolkit に ScrollViewer のマウスホイール対応クラスが入ってて scrollViewer.SetIsMouseWheelScrollingEnabled(true) って呼び出せばいいだけになってくれて。。。(ちなみに、SetIsMouseWheelScrollingEnabled は ScrollViewer の拡張メソッドとして実装されてるとのでこういうことができる)

それから、Silverlight 4 で標準でサポートされて、ScrollViewer は何もしなくてもマウスホイールでスクロール可能になった!

、、、ような気がするんだけど、Silverlight 4 でマウスホイールに反応しない。
検索してみたら Connect にこんなのあった
Mouse wheel does not work correctly with the Silverlight 4 ScrollViewer
うーむ、ブラウザーのせいなのか何のせいなのかわかんないけど、どうやらダメなときはダメみたい。
で、「回避策」 にあるように

<ScrollViewer Background="Transparent" ... > 

としてやれば OK だった。
うーむ。

Background を透明にしたくないってときは以下のような感じでいけるみたい。

private void LayoutRoot_MouseWheel(object sender, MouseWheelEventArgs e)
{
    var point = e.GetPosition(this.scrollViewer1);
    if (point.X < 0 || this.scrollViewer1.ActualWidth <= point.X || point.Y < 0 || this.scrollViewer1.ActualHeight <= point.Y)
    {
        // マウスが ScrollViewer の上で無い
        return;
    }

    if (!e.Handled)
    {
        double position = CoerceVerticalOffset(this.scrollViewer1, this.scrollViewer1.VerticalOffset - e.Delta);
        this.scrollViewer1.ScrollToVerticalOffset(position);
        e.Handled = true;
    }
}

private double CoerceVerticalOffset(ScrollViewer viewer, double offset)
{
    return Math.Max(Math.Min(offset, viewer.ExtentHeight), 0.0);
}

どういうわけかわかんないけど、Background が Transparent で無いときはなぜか ScrollViewer に MouseWheel イベントがこず、背面の LayoutRoot の方にいっちゃうみたい。なので、LayoutRoot の方で MouseWheel を受けて ScrollViewer をスクロールさせてやる、と。
ちなみに、スクロール部分のコードは Silverlight Toolkit の SetIsMouseWheelScrollingEnabled のあたりでやってることそのまんまです。

2011年6月6日月曜日

[Silverlight][WP7] DependencyProperty.RegisterReadOnly が無い

すごく今さらですが、Silverlight・Windows Phone 7 には DependencyProperty.RegisterReadOnly() メソッドが無いんですね。
うーむ。
探してみたら
Sometimes you just gotta do the best you can [Tip: Read-only custom DependencyProperties don't exist in Silverlight, but can be closely approximated]
こんな記事はありましたが。。。
SetValue されたときに元の値に戻して例外を発生させるという力業。。。つか、ちっとも ReadOnly じゃないじゃん。
RegisterReadOnly() メソッドくらい用意しておいてくれてもよかったような。

2011年5月27日金曜日

[Silverlight] OOB のブラウザーコントロールでローカルファイルをブラウズできない?

Silverlight のブラウザー外実行 (Out Of Browser) では WebBrowser コントロールが使えますが、これってどうやらローカルにあるファイルは表示できないんですね。

Silverlight 自身は OOB のときは分離ストレージ (IsolatedStorage)、「昇格された信頼」 な OOB のときはそれに加えて MyDocuments、MyMusic、MyPictures、MyVideos フォルダーにアクセスできます。なので WebBrowser コントロールも少なくともそれらの場所にあるファイルにはアクセス出来るもんだと思ってました。
しかし、”file:///c:/.../index.htm” とか “c:\...\index.htm” とかいろいろ試してみましたがどうやってもアクセスできません。

うーむ、これってできないんですかねぇ?

検索してみると、ファイルを String に読み込んで WebBrowser.NavigateToString() で表示することなら出来る、という記事はみつかるんですが、やっぱりみんな普通には表示できてないみたいな感じ。
完全にオフラインで動かすために、最初に HTML やらなんやらの必要なものをローカルにコピーしておいて以後はそれを参照する、ってな需要ってあると思うんだけどなぁ。(というか、それをやろうとして出来ないことに気付いたんだけど)

Silverlight 5 で何か変わってるんだろうか?(まだ 5 のノーチェック)

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年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月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週間おきくらいにあと何回かする予定、みたいなことも。ということで、そういうことなんでしょう。

2007年8月1日水曜日

Silverlight 1.0 SDK RC1 と 1.1 SDK Alpha Refresh

http://silverlight.net/GetStarted/
こちらに SDK なども一通りまとめられていますが、これらを入れてみました。

■ Silverlight 1.0 SDK RC1
前回までは単なる ZIP でしたけど、今回はちゃんと MSI になってますね。
ダウンロードしてダブルクリックすれば簡単に入れられます。この SDK にはドキュメントと QuickStarts などが含まれています。

また、セットアップ時に Visual Studio 2005 用のテンプレートも入れてくれます。
これで、Visual Studio 2005 でプロジェクトの新規作成をすると 「Silverlihgt Javascript Application」 を選択できるようになります。
もちろん、1.0 ですから mini-CLR ではなく JavaScript ですし、VS2005 ですから XAML をデザインできるわけではありませんけど。

ちなみに、Silverlihgt.js の Silverlight.createObject() に指定するバージョンですが、beta までは "0.9" でしたが RC1 からは "1.0" となったようです。

■ Silverlight 1.1 SDK Alpha Refresh
こちらはまだ ZIP のままです。ただ 1.0 SDK RC1 が 20MByte 程度なのに対して 1.1 SDK は 200MByte くらいあります。なんでこんなにサイズが違うのかと思ったら QuickStarts などで使っている画像なんかがでかいみたいです(笑)
1.0 SDK と同じくドキュメントと QuickStarts がメインです。Tools フォルダの下に SilverlightControlsStarterKit が入っていますが、内容は前回の SDK とあまり変わっていないようです。

1.1 SDK Alpha Refresh とは別にダウンロードできる 「Microsoft Silverlight Tools Alpha Refresh for Visual Studio (July 2007)」 を入れると Visual Studio 2008 にテンプレートが追加されます。これを入れるとプロジェクトの新規作成に 「Silverlight Project」 と 「Silverlight Class Library」 が追加されるようです。

Silverlihgt.js の Silverlight.createObject() に指定するバージョンは、"0.95" から "1.1" に変わったようです。
1.1 SDK Alpha Refresh に入っている QuickStarts などのサンプルを見ていると一部 "0.95" のままになっているものがあるようです。当然 "0.95" のままだと動きませんので注意。

2007年7月31日火曜日

Silverlight Update とは

How Silverlight Update Works より

どうやら Silverlight ランタイムには自分自身を更新する機能が含まれているようです。

Silverlight Update は、

  1. セキュリティアップデート。24時間ごとにセキュリティアップデートがあるかどうかチェックする。
  2. 機能アップデート。30日ごとに機能アップデートがあるかどうかチェックする。たとえば、Silverlight RC は 30日ごとに 1.0 リリースをチェックするなど。

の 2種類があって、アップデートがあると自動的にバックグラウンドでダウンロードして、サイレントモードでインストールしてくれる。ロードされた DLL をアンロックする必要があるなどブラウザをリスタートする必要があるときでも、機能アップデートのときはプロンプトを表示したりしない (次回にブラウザを起動したときにアップデートされる)。ただし、セキュリティアップデートのときはプロンプトを表示して、ブラウザを再起動するように要求する。

というようなものだそうです。他にもいろいろと書いてありますので、興味のある人は上記記事を参照してみてください。

今まで Silverlight なところで右クリックすると 「About Silverlight」 といった感じのコンテキストメニューが出ていたと思います。これが RC からは 「Silverlight Configuration」 に変わっています。これの Update タブで自動的にアップデートするかどうかを設定できるようです。

この設定ダイアログについて
Michael's Blog: 「Silverlight Configuration Tool」
で紹介されていました。

c:\Program Files\Microsoft Silverlight\ フォルダの slup.exe がこのダイアログの本体だそうです。
また、Updates の設定によって変更されるレジストリ値も紹介されています。
# できれば slup.exe から slconfig.exe にでもリネームして IsolatedStrage なんかの設定とかもできるようにしてよ。みたいなことも書かれてますね。そりゃそうだな。

Silverlight 1.0 RC1 と 1.1 Alpha Refresh がリリース

すでに先週末のことですが、Silverlight 1.0 RC1 がリリースされました。
また、あわせて 1.1 Alpha も 1.0 RC1 にあわせたバージョン (1.1 Alpha Refresh と呼ばれています) がリリースされました。
ダウンロード先については↓がわかりやすそうです(英語ですが)
Tim Sneath: 「Silverlight 1.0 RC1 is Here!」
また、ここに beta リリースをアンインストールする必要は無い、単に RC1 のインストーラを実行すれば OK、とあります。あと、今までの beta と RC1 は互換性がないから多くのサンプルは動かないとあります。

もちろん、Silverlight を使ったページ、たとえば http://silverlight.net/quickstarts/ なんかを表示すると

Get Silverlight RC

なんていう画像が表示されて、これをクリックしてもダウンロードサイトにいけます。
(↑は単なる画像です。ダウンロードサイトへのリンクにはなっていません)
この画像経由で 1.0 beta、1.1 alpha が入っている環境に 1.0 RC1 を入れてみましたがちゃんと入りました。ただ、IE を再起動してやる必要はありました。これは 1.1 alpha とかのせいかもしれません。
さらにこの環境に 1.1 Alpha Refresh を入れてみました。マシンをリブートしてから入れないとうまく入りませんでしたが、ちゃんと動くようになりました。

2007年7月18日水曜日

Silverlight 1.0 RC がもうすぐらしい

Preparing for Silverlight 1.0 RC and Beyond より

Silverlight 1.0 RC が 2週間以内くらいに出てくるそうです。
基本的にいくつかのバグを直した安定バージョンということみたいですが、beta と RC との間ではいくつかの breaking change もあるそうです。
上記の記事から SDK の special preview がダウンロードできます。これには beta と RC との両方に対応した silverlight.js、beta と RC との間の変更点についてのドキュメント、などが含まれています。(こういったものが入っているだけで SDK 自体が入っているわけではありません)

# けど、私の興味はすっかり Silverlight 1.1 にいっちゃってるんですけどね