ページ

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

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月27日金曜日

Visual Studio 2008 beta 2 と .NET Framework 3.5 beta 2 がリリース

すでにあちこちで書かれてますが、予定通り Visual Studio 2008 beta 2 と .NET Framework 3.5 beta 2 がリリースされたみたいですね。

VS2008 のダウンロードは
http://msdn2.microsoft.com/en-us/vstudio/default.aspx
にまとまってるみたいです。
Standard、Professional、Team Suite の各エディションや Virtual PC イメージなんかもあるようです。
あと、どうやら MSDN Subscriber Downloads だけではなく、Download Center から誰でもダウンロードできるみたいですね。

Express Edtion もあるみたいです。
http://msdn2.microsoft.com/ja-jp/express/future/default.aspx
# しかし、この VS2008 Express Edtion のサイトはえらくかっこいいな

ところで、.NET Framework 3.5 の方はどこがどれくらい変わってるんでしょう?
Lester's WPF blog: 「3.5 released with many features!!!」 なんかみると WPF なんかは細々と変わっているみたいなんですが。

2007年7月25日水曜日

Visual Studio 2008 Beta 2 はもうすぐ?

BetaNews: 「Visual Studio 2008 Beta 2 Coming Thursday」

Visual Studio 2008 Beta 2 が今週の木曜日に出るとあります。
元記事として ScottGu's Blog: 「First Look at IronRuby」 が紹介されています。けど、この記事ってタイトルどおり IronRuby の紹介で (これはこれでおもしろいですが)、いったいこれのどこに VS2008 の話があるんだろうとすぐにはわかりませんでした。
で、よく見ると、この記事についた最初のコメントに 「VS2008 をめっちゃ待ってるんだけど、もうすぐ?」 みたいなことが書かれて、それに対して ScottGu 氏が 「今週後半に出るからもうちょっとだけ待ってね」 なんて答えてるんですね(^^
さらにもうちょっと下のコメントで 「beta 2 の機能は完璧?」 という質問があって、それに対して 「今週後半に出る VS2008 と .NET 3.5 beta 2 の機能はほとんど完璧。beta 2 のフィードバックに基づいていくつかの小さな機能の追加・変更はするだろうけど、機能の 99% はもうあるよ」 なんて感じのことを答えています。

# Silverlight もサポートしてくれるとうれしいけど、時期的に考えて無理だろうなぁ

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 にいっちゃってるんですけどね

2007年7月11日水曜日

Silverlight 1.0 beta と 1.1 alpha の両方をインストールできる?

Silverlight 1.0 beta と 1.1 alpha が同時にリリースされたわけですが、これらをいっしょに入れることができるのか?が気になりました。


Silverlight Feb 2007 CTP まで
Silverlight コントロールを貼り付ける場合は、HTML 内で agHost.js を
<SCRIPT src="agHost.js" type="text/javascript"></SCRIPT>
しておいて、new agHost( ... ); としてました。(agHost.js は SDK に入っていました)


Silverlight 1.0 beta
agHost.js に代わり Silverlight.js が SDK と共に提供されるようになりました。
また、Sys.Silverlight.createObject( ... ) or createObjectEx( ... ) と namespace 風の関数名になりました(この namespace 風の手法は Microsoft AJAX Library と同じです)。createObject() には要求するバージョンを指定する引数がありますが、1.0 beta の場合は "0.9" と指定するそうです。


ついでに Silverlight の本体を調べてみると、IE アドオンは AgControl Class (ProgID は AgControl.AgControl) という名前で、本体は C:\Program Files\Microsoft Silverlight\npctrl.dll です。同じフォルダに agcore.dll というのもあり、どちらもバージョンは 0.8.5.0 でした。


Silverlight 1.1 alpha
1.1 alpha も 1.0 beta と同じく Silverlight.js を使用します。1.1 alpha SDK に入っている Silverlight.js を見てみると 1.0 SDK に入っているものと冒頭のコメント以外は同じでした。冒頭のコメントには 「このファイルは 1.0 beta と 1.1 alpha の両方にコンパチブルで、1.1 alpha を使うときは 0.95.0 と指定しろ」 とちゃんと書いてあります。ちなみに 1.0 beta の Silverlight.js も冒頭のコメントには書いてありませんが、コードの中では 0.95.x を判定していたりするのでもともと両方に対応していることになります。
というわけで、Sys.Silverlight.createObject() に "0.95.0" と指定すると 1.1 alpha になります。


で、どうやら 1.1 alpha の本体は 1.0 beta と同じく AgControl Class (ProgID は AgControl.AgControl) みたいです。ProgID も同じで、入ってる場所も 1.0 beta と同じく C:\Program Files\Microsoft Silverlight\ でした。すなわち 「1.1 alpha を入れると 1.0 beta が上書きされる」 ということになってるようです。ただ、npctrl.dll も agcore.dll もバージョンは 0.8.5.0 のままになっています。ファイルの内容が同じなのかどうかまでは調べてませんが、1.0 beta と互換性はあるんでしょう (Silverlight.js みたいに 1.0 beta のものも実は 1.1 alpha に対応しているのかも知れませんが)。


この C:\Program Files\Microsoft Silverlight\ を見てみるとなかなか興味深いです。
mscorlib.dll、System.dll、System.Silverlight.dll などなどが入っています。で、.NET Framework 2.0 SDK の ildasm で見てみるとちゃんと中身が見れました。
"mini-CLR" の本体は coreclr.dll なのかな?


まとめ
はっきりしたことは言えませんが、1.0 beta と 1.1 alpha の両方を入れられるか?と言うよりも、1.1 alpha を入れると 1.0 beta が上書きされるということみたいです。で、1.1 alpha が 1.0 beta と同じ機能をサポートしているということみたいです。

2007年5月8日火曜日

VSUG Day 2007 Summer

VSUG Day 2007 Summer
2007/6/1(金)
コクヨホール(東京・品川)
参加無料
http://vsug.jp/tabid/151/Default.aspx

私も Silverlight のセッションをさせていただくことになりました。
セッションスケジュールを見ると 「私なんかが混ざっていいのかしら?」 と思うような豪華スピーカー陣です(^^;
ご興味のある方はぜひご参加下さい!

2007年5月1日火曜日

Silverlight 1.1 alpha を入れるときにエラー発生

Silverlight 1.1 alpha を Windows XP SP2 にインストールするときにエラーが発生( Install failed )しました。"Get more information" のリンクをクリックすると Error 3010 だそうです。説明を読むと 「インストールは成功した。けど、リスタートが必要。インストールを完了するためにマシンをリスタートしてね」 と英文で書かれてました。うーん、こんなのを Install failed と表示するとは。。。びっくりするじゃないか(^^;
まっ、alpha なんだから文句は言えないですけどね。

ちなみにマシンを再起動せずに IE だけ立ち上げなおしてあげたらちゃんと動いているように見えました。(もちろん、その後ちゃんと再起動しましたが)

Silverlight 1.0 beta と 1.1 alpha

4/30~5/2 の日程で MIX07 がラスベガスで開催されていますが、そこで Silverlight (コードネーム "WPF/E") のいろいろが発表されたようです。

まず、Silverlight の新しいサイトが公開されています。
http://silverlight.net/

また、MSDN Silverlight Dev Center もあります。
http://msdn2.microsoft.com/en-us/silverlight/

これらを見るとわかるように同時に 1.0 beta と 1.1 alpha が公開されました。

Silverlight 1.0 beta
今まで Silverlight の最新版は Feb 2007 CTP でした (Feb 2007 CTP の公開されたときはまだ "WPF/E" という名前でしたが)。これの beta 版が今回リリースされた 1.0 beta です。CTP→1.0 beta の変更点は What's New in Silverlight (1.0 Beta and 1.1 Alpha)? にまとめられているようです。ざっと見たところ 「細かいところはいろいろと変わっている」 という感じでしょうか。

また、1.0 beta は "Go-Live" ライセンスとなったそうです。
あと、ダウンロードするときに 「以下のライセンスを読んで "I Accept" をクリックしろ」 と出てきます(今のところ英文です)。このライセンスに 「2007年 8月 1日まで有効」 とあります。ライセンス的に日付を切っているだけなのか、実際に時限装置が内蔵されているのかはわかりませんが、意外と短いです。少なくともそれまでには次の beta、もしくは、正式版がリリースされるってことなんだと思います。

Silverlight 1.1 alpha
発表的にはこちらの方がインパクトは大きいですが、Managed Code の実行をサポートした Silverlight の alpha 版です。
Silverlight 1.0 ではプログラムの部分は JavaScript で記述します。これが JavaScript だけではなく C#、Visual Basic などでも記述できるようになります。また、IronPython、IronRuby などでも記述できるようです。

私自身まだよくわかってませんが、フルバージョンの .NET Framework とはまったく異なったランタイムによって実行されるようです。"mini-CLR" といった書き方がされていることもあるようです。
さらに Dynamic Language Runtime (DLR) というダイナミックな言語 (Python とか Ruby とか) のためのランタイムもあわせて発表されました。DLR は CLR の上に乗っかるという位置づけになるようです。この DLR が Silverlight の "mini-CLR" にも含まれているので C#、Visual Basic だけでなく Python や Ruby も使えるようになるということみたいです。
Silverlight の "mini-CLR" の BCL (ベースクラスライブラリ) ですが、どの程度のクラスが用意されているのかよくわかりません。1.1 alpha SDK もダウンロードしてみたんですが、クラスリファレンスが見当たりません。Quick Start なんかを見てるみると XmlReader なんかを使ってたりもするんで、Web 上で使いそうなものはある程度は用意されているみたいなんですが。

2007年4月18日水曜日

Google Office

ZDNet.com : 「Google presentation app on the way」 より

今 Web 2.0 Expo というのをやってるそうですが、そこで Google CEO が Google Docs and Spreadsheets にプレゼンテーションアプリケーションを加えることをアナウンスしたそうです。

ちなみに Google Docs and Spreadsheets というのは http://docs.google.com/ のことですね。すでに Word (みたいなもの) と Excel (みたいなもの) がブラウザ上で動いてます。ちょっと試してみたことがある程度ですが、日本語も使えるようです。また、Google へのセーブだけでなく、.doc や .xls での保存もできますし、.pdf での保存もできます。
これに PowerPoint (みたいなもの) が加わるというわけですね。

すごいなぁ、Google。

2007年3月28日水曜日

Visual Studio "Orcas" と Visual Studio Team System "Rosario"

Visual Studio Team System - Furure Releases

ロードマップが更新されたそうです。
これによると Orcas は Beta 1 が 2007年第2四半期、Beta 2 が 2007年半ば、RTM が TBA。TBA って何? "To Be Announced" で 「そのうちアナウンスされる」 ってこと?

さらに新たなコードネームが公開されました。その名も
Visual Studio Team System "Rosario"
です。
ロサリオってアルゼンチンの都市の名前みたいですが、オーカス島からずいぶん遠くにいっちゃいましたね(笑)
で、この Rosario ですが、上記の記事によると 「ビジネスの優先順位に従ってリソースを積極的にロードバランスするための複数プロジェクトのプロジェクト管理」 だとか 「プロジェクトの状態や進捗を確認するための統括的なメトリクスとダッシュボード」、「デベロッパとテスタがパグをすばやく確認し、コミュニケートし、優先順位をつけ、診断し、解決することができるようにするパワフルな新しい機能」 だとかそういったことが書かれています (他にもいろいろ書かれています)。これらからわかるように、おそらくは Team System の各機能を発展、進化させたものなんでしょう。だから、Visual Studio "Rosario" ではなく Visual Studio Team System "Rosario" なんですね。Orcas では .NET Framework も 3.5 になると言われていますが、これらから考えると Rosario では .NET Framework は変わらないのかな?

2007年3月22日木曜日

C# 3.0 の partial methods

C# 3.0 (Visual Studio "Orcas" / .NET Framework 3.5) には partial methods が追加されるそうなんですが、情報があまりないのでググってみました。(Orcas CTP のドキュメントに記載されているそうですけどね)

Anders Hejlsberg on the future of C#: Partial methods
C# 3.0 Partial Method Definitions

上記の内容からすると、、、

// 定義
partial void onNameChanged();

// 実装
partial void onNameChanged()
{
??? // 内容
}

そして、partial method の制約は

  • partial class の中だけで使用可。
  • partial method は partial キーワードをつける必要があり、戻り値は void でないといけない。
  • partial method は ref パラメータは使えるが out パラメータは使えない。
  • partial method は暗黙に private で、 それゆえ virtual にはできない。
  • partial method は extern にはできない。
  • partial method は static と unsafe はつけられる。
  • partial method は generic にできる。
  • partial method の delegate は作れない。

といったものがあるそうです。

で、partial method っていうのが何をするものかというと、「実装があったらその実装を呼び出すようにするし、なかったら何もしない」 と言う風にコンパイラが解釈してくれるものだそうです。

たとえば、Hoge.designer.cs に

??? partial class Hoge
??? {
??????? partial void onNameChanged();

??????? private void Func()
??????? {
??????????? onNameChanged();
??????? }
??? }

とあった場合に、Hoge.cs で

??? partial class Hoge
??? {
??????? partial void onNameChanged()
??????? {
??????????? // 何かする
??????? }
??? }

と書けば Func() が呼び出されたときに Hoge.cs の onNameChanged() が呼び出されるようになります。Hoge.cs に partial void onNameChanged() の実装がなければ Func() は何もしないメソッドになるわけです (Func() にある onNameChanged() の呼び出しが削除される)。
もちろんこれはコンパイル時に解釈されます。virtual のように実行時に解釈されるわけではありません。ですので、IL などにはなんら変更はなく、C# コンパイラが拡張されただけです。(だと理解してます)

上の例でも .designer.cs と書いたように、自動生成されるコードで便利なように追加された機能といっていいと思います。

www.windowsvista.si - WPF/E のサンプル

Microsoft MVP Global Summit に参加してきました。この話はあらためて書きたいと思いますが、そこで Scott Guthrie 氏 が紹介していた WPF/E を使ったサイト。

http://www.windowsvista.si/

画像が多用されているので最初はロードに時間がかかります。
英語でもないので何が書いてあるのかはよくわかりませんが、表示されたら左側のアイコンをクリックすればログインできます。
すると、ロード画面のあとデスクトップが表示されて、、、

やってみればどんなサンプルなのかはわかるでしょう(笑)
いちおう書いておくとリモートデスクトップとかではなく、単に WPF/E で 「それらしく」 作っているだけです、念のため。

しかし、
http://www.windowsvista.si/main.htm?show3d=1&content=home
とか、WPF/E は 3D をサポートしてないのにいったいなにをどうなっているのやらわけがわかりません(^^;

2007年2月6日火曜日

ドミノ軒

Windows Vista Web Showcase: デモ 1 (DOMINOKEN)

WPF を使ったデモです。「リアルタイム 3D レンダリング機能を活用した、ちょっと変わったインタラクティブ ミュージカル ムービー」 だそうです。

上記ページにも 「このデモは Windows Vista 上での実行を強く推奨しています」 とあります。けど、デモ自体は xbap だし、「.NET Framework 3.0 が入ってれば動くんじゃないの?」 と思えます。つか、XP SP2 + .NET Framework 3.0 の環境でも問題なく動いているように見えます。

ドミノ軒のことは
Microsoft.com ブログ: 「新しいインターフェースの新サイトとWPFデモ
で知りました。
こちらにも 「WPFというのは、Windows Vistaに標準搭載されている新しい表示のためのテクノロジー」 とあります。確かにそのとおりです。.NET Framework 3.0 が標準搭載されているのは今のところ Vista だけで、XP SP2 や Windows Server 2003 SP1 では別途ダウンロードしてセットアップしてやる必要があります。まだ Windows Update/Microsoft Update にも入っていませんし。

しかし、こんな紹介じゃ 「WPF は Vista だけの新機能」 と思われちゃうんじゃないだろうか?個人的には反対に 「WPF を始めとする .NET Framework 3.0 の機能は Vista じゃなくても OK だよ」 ということを前面に出して欲しいくらいなんだけどなぁ。まぁ、マーケティング的には 「Vista はすごい」 ということにしたいのはよくわかるんだけどね。

2006年12月26日火曜日

JavaScript で LINQ 風のことをやる

Script and LINQ? より

いやぁ、おもしろいです。「JavaScript で LINQ 風の書き方なんて簡単にできるんじゃね?」 という話が紹介されています。以下、理解したことを自分なりにまとめておきます。 

まず JSON を使えば ※1 Anonymous Type と Initializer みたいなことができます。
(※1 「JSON を使えば」 っていうのもなんか変な言い方ですね。「JSON で使っている記法を使えば」 と言ったらいいのかな?)

// JavaScript
var person = { Name: "Hoge Taro", Age: 20, Tel: "111-1111" };

これだけで C# の

// C#
class Person
{
public string Name;
public int Age;
public string Tel;
}
Person person = new Person();
person.Name = "Hoge Taro";
person.Age = 20;
person.Tel = "111-1111";

とほとんど同じような意味になるわけです。
そして、配列だって

// JavaScript
var persons = [
{ Name: "Hoge Taro", Age: 20, Tel: "111-1111" },
{ Name: "Hoge Jiro", Age: 18, Tel: "222-2222" },
{ Name: "Hoge Saburo", Age: 15, Tel: "333-3333" }
];

と書けます。


さて、次に

// C#
var result =
from p in persons
where p.Age <= 18
select new {
Name = p.Name,
Age = p.Age
};

といういかにも LINQ という書き方についてです。
さすがに標準の JavaScript でこういう書き方はできません。しかし、

// JavaScript
var result =
persons.filter(function(p) { return p.Age <= 18; })
.map(function(p) {
return { Name: p.Name, Age: p.Age };
});

と書けます。LINQ を Extension Method を呼び出す形で書いたときとよく似てますね。
JavaScript では配列は Array クラスですが、上記の filter とか map とかは Array クラスのメソッドです。どうやら Mozilla ではこういったメソッドがサポートされているようです。しかし、IE では 「サポートされていないメソッド」 となってエラーになってしまいます。


「んじゃあ、使えないじゃん」 となるんですが、もともと JavaScript では実行時にメソッドとかを足していってクラス (みたいなもの) を作るわけです。ならば、Array クラスに filter とか map とかを自分で足してやればいいわけですね。


というわけで、以下のコードは IE6 でちゃんと動きました。
ちなみに、以下の filter とか map とかは一から自分で書いたわけじゃありません。Script# に含まれている sscorlib.js から拝借したものです (ちょっとだけ変更してますが)。
いやぁ、JavaScript ってすごいですね。この記事を読んだときは感動しちゃいました。

<script>
Array.prototype.filter = function(filter_function)
{
var result = [];
for (var i = 0; i < this.length; ++i)
{
if (filter_function(this[i]))
{
result[result.length] = this[i];
}
}
return result;
}

Array.prototype.map = function(map_function)
{
var result = [];
for (var i = 0; i < this.length; ++i)
{
result[result.length] = map_function(this[i]);
}
return result;
}

var persons = [
{ Name: "Hoge Taro", Age: 20, Tel: "111-1111" },
{ Name: "Hoge Jiro", Age: 18, Tel: "222-2222" },
{ Name: "Hoge Saburo", Age: 15, Tel: "333-3333" }
];

var result =
persons.filter(function(p) { return p.Age <= 18; })
.map(function(p) {
return { Name: p.Name, Age: p.Age };
});

for (var i = 0; i < result.length; ++i)
{
alert(result[i].Name + "," + result[i].Age);
}
</script>

Wikipedia Explorer beta

Wikipedia Explorer beta より

Wikipedia Explorer というものが紹介されています。これは WPF を使ったアプリケーションで、Wikipedia の内容を表示したり、関連している単語を 3D で表示したりするものみたいです。ClickOnce アプリケーションとして公開されているので .NET Framework 3.0 が入っていればすぐに実行できます。

なかなかおもしろいと思うんですが、残念ながらソースは公開されていないみたいです。あと、ja.wikipedia.org には対応していないみたいです。

2006年12月25日月曜日

WPF/E のドキュメントと QuickStart

Getting ready for the new year with a refreshed "WPF/E" SDK より

WPF/E SDK のドキュメントがアップデートされたようです。
“WPF/E” (codename) Software Development Kit (SDK) Community Technology Preview (Dec 2006) もタイトルは Dec CTP と以前と変わっていませんが、日付が 2006/12/22 になっています。試しにいったん WPF/E SDK を削除してから入れなおしてみましたが、確かにファイルのタイムスタンプは変わっているようです。が、どこがどう変わったのかはよくわかりません。

あと、WPF/E SDK ドキュメントが
http://msdn2.microsoft.com/en-us/library/bb188266.aspx
こちらで公開されるようになった、あと、QuickStart が
http://wpfesdk.members.winisp.net/quickstart/
こちらで公開されたということみたいです。(今見てみたら左側のメニュー部分がうまく動いてないようですが、おそらく WPF/E SDK に入っている QuickStart と同じものじゃないかと思います) 

WPF/E Pad

WPF/E Pad より

XAML Pad の WPF/E 版という感じの WPF/E Pad が紹介されています。上記記事のスクリーンショットの画像が WPF/E Pad へのリンクになっています。そう、WPF/E Pad 自体が WPF/E で書かれているみたいです。テキストエリアの XAML を適当に編集して 「Load」 ボタンを押すと反映されるようです。

ソースもダウンロードできるので実用的価値よりも WPF/E のサンプルとしておもしろいかも。

2006年12月22日金曜日

Dojo でベクタグラフィックス

Create cross browser vector graphics with Dojo より

新しい dojo.gfx ライブラリは SVG、Canvas、VML の違いなんかを抽象化してくれるクロスブラウザなベクタグラフィックスライブラリだそうです。上記記事からリンクされている creating cross browser vector graphics with Dojo にはもう少し詳しい解説とサンプルなんかがあります。すごいなぁ。

2006年12月19日火曜日

Don't Click It

http://dontclick.it

すごいドメイン名ですね。Don't Click It (クリックするな)
勇気を持ってw アクセスしてみると全面に Flush を貼り付けたサイトが表示されます。英語で 「このインターフェースの中にボタンはないよ。代わりに違う方法でコンテンツをナビゲートするんだ。すぐになれるよ」 みたいなことが書いてあります (かなり適当な訳)。で、"click here" のところをクリックすると、、、

そっから先はいっさいクリックが必要ない世界です。使い方はさわってればすぐにわかると思います。私はものすご~くおもしろいと思いました。
ちょっとすると突然アンケートが表示されます。"Do you miss the click within this interface?" この miss は 「失敗する」 じゃなくて 「不自由する。さびしく思う」 の方じゃないかと思うんですがどうでしょう?
  「このインターフェースの中にクリックがなくてさびしい?」
    "YES - I miss to click buttons a lot!" (はい、ボタンをクリックできなくてさびしいよ)
    "NO - I am happy not clicking" (いいえ、クリックが無くてめっちゃハッピー)
こんな感じ?もちろんこのアンケートもクリックなしでサブミットできます。

ちなみに、クリックすると怒られます。Accidental か Intentional か (アクシデントか意図的か) を聞かれますので答えてあげてください。もちろん、クリックなしで。

このサイトのことは Don't Click It で知りました。