ページ

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 で知りました。

Live Search キャンペーン

Local Search Japan Promotion より

Live Search キャンペーン なんてやってたんですね。

2006年12月13日水曜日

Visual Studio 2005 日本語版で WPF/E する方法

Using WPF/E with International Versions of Visual Studio より


WPF/E SDK Dec CTP を入れるとスタートメニューに 「Install WPFE VS Template」 というのが追加されます。しかし、こいつを実行しても 「このテンプレートは Visual Studio 2005 Web Application Projects に依存してるからダメ」 と言われてテンプレートを入れることができません。で、依存しているという Web Application Projects が VS 日本語版には入れることができないので、WPF/E Template も入れることができません。(参考: MSKK ASP.NETアプリケーションマーティング担当者(鈴木祐巳,Masami Suzuki)Weblog


この問題の解決法が上記記事で紹介されています。(解決法というか、Template がやってくれることを手動でやるっていう感じですが)
主要なところだけ大雑把に訳すと、



  1. Visual Studio で Web サイトをファイルシステムに新規作成する (メニューの 「ファイル」-「新規作成」-「Web サイト」)
  2. その Web サイトの下に "js" という名前のフォルダを作り、上記記事に添付してある wpfestuff.zip ファイルの中の agHost.js と eventhandlers.js をコピーする
  3. wpfestuff.zip ファイルの中の plugin.xaml を Web サイトのメインフォルダにコピーする
  4. あとは、wpfestuff.zip ファイルの中の Default.html をコピーして使うか、もしくはこれの内容みたいな感じで aghost を作ればいい。

という感じです。


実際にやってみると、確かに VS 2005 上で WPF/E な開発ができるようになりました。けど、上の手順を見ればわかるとおり 「必要な .js と .xaml と .html を入れただけ」 です。XAML をデザインビューでデザインできるわけではないみたいです (Cider が使えない)。また、直接 XAML を編集するときにもインテリセンスが効きません。


XAML のインテリセンスは WPF とは namespace が違うために効かないんだと思いますが、WPF/E SDK Dec CTP をインストールすると C:\Program Files\Microsoft SDKs\WPFE\Help\XSD フォルダに wpfe.xsd が入っています。こいつをプロジェクトに含めてやればインテリセンスが効くようになります (一部、波線が消えないみたいですが、インテリセンスがないよりはまし)。もちろん、C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas あたりに放り込んでもいいと思いますが、その辺はお好みで。


あと、上記の記事には 「WPF/E Dec CTP では XAML の中の international text はサポートされていない」 とあります。まさか、日本語が表示できないなんてことは、、、と思いやってみると、表示できませんね。「non-English を使いたいときは画像を貼り付けてくれ」 だそうです。

Calc 5 - 3D グラフも描けるオンライン電卓

Calc 5: Online 3D Calculator より

(さっきの CodeProject の記事も http://ajaxian.com/ で紹介されていて知りました)

3D グラフも描けるオンライン電卓 Calc 5 が紹介されています。右側の "Samples" のところを適当にクリックして OK ボタンを押すと結果が表示されます。

で、当然 「グラフはどうやって描いてるの?」 というのが気になりますw もちろん、ポストバックして gif に描いてるなんてことはありません (それじゃ、なんにもおもしろくないしw)。IE の Developer Toolbar で見てみると <div> を配置して描いてるってわけでもないようです。
http://www.calc5.com/help.html の一番下によると canvas を使っているそうです。げっ、そんなものがあったんだ。まったく知らなかった。
  Mozilla Developer Center の解説(日本語)
  http://developer.mozilla.org/ja/docs/Drawing_Graphics_with_Canvas
ただ、IE は canvas をサポートしてないのでエミュレータを使わなくちゃいけなかった、とあります。検索してみると ExplorerCanvas などがあるようです (Calc 5 がこれを使っているのかどうかは知りません)。

ラインを描画する

Drawing lines in Mozilla based browsers and the Internet Explorer より

ブレゼンハムのアルゴリズムをもちいてラインを描画する方法が紹介されています。ディスプレイのようにピクセルで構成されているデバイスにラインを描画する場合、単に y = ax + b みたいな式を使うとあまりきれいな線になりません。そんなときに使うといいのがブレゼンハムのアルゴリズムです。上記リンク先は英語ですが、このアルゴリズムを日本語で解説しているサイトもたくさんあると思います。私は DDA (Digital Differential Analyzer: デジタル微分解析) って覚えてたんだけど、DDA が総称的で、ブレゼンハムが具体的なアルゴリズム名ってことでいいのかな?

いや、まぁ、そんなことはどうでもいいんですよ。上記の記事で気になったのは 「HTML 上の JavaScript で setPixel とかっていったいどこに何を描いてるの?」 っていうこと。ソースを見てみると setPixel は <div style="position:absolute;" /> を配置してるだけ。ピクセルは background-color で色をつけた <div> なんですね。なるほどなぁ。

2006年12月8日金曜日

ユーザー エクスペリエンス ガイドライン

ユーザー エクスペリエンス ガイドライン より

エバンジェリストの大野さんが Vista と WPF のデザインガイドラインを紹介されていました。残念ながら今のところ英語のみとのことです。「今のところ」 ということはそのうちには日本語化されるのかな?

WPF の方をちらっとだけ見てみましたが、すべきこと、してはだめなことを箇条書きにしてある程度のシンプルなものですね。

ASP.NET AJAX のアクセシビリティ

ScreenReader Accessibility and Partial Updates in ASP.Net AJAX より

ASP.NET AJAX に限らず AJAX 全般に言えることですが、アクセシビリティってどうなんだろう?というのはちょっと気になってました。アクセシビリティにもいろいろあると思いますが、ここでは目の不自由な方が読み上げソフトを使って Web を閲覧するような場合を想定しています。

私はアクセシビリティについて詳しいわけじゃありませんが、それでも、HTML は読み上げやすい (読み上げに向いている) もんじゃないかと思うわけです。見てくれを CSS に追い出して、文章の構造だけをマークアップしてあれば読み上げ時のノイズも減るでしょうし。それが AJAX で動的にグリグリ変わっちゃったりしたら読み上げようがなくなっちゃうんじゃないかと思うわけですよ。

で、上記の記事ですが、現状の ASP.NET AJAX の UpdatePanel は市場にあるポピュラーなスクリーンリーダーソフトで完璧に読み上げることはできない、ということだそうです。で、部分的な更新 (ポストバック) を行うページにドロップしとくだけでスクリーンリーダーへのアクセシビリティを提供してくれるコントロールを書いてみたそうです。I am posting the control herewith とありますからそのうちに公開されるんじゃないかと思います。

ちゃんとこういうことも考えているっていうのはうれしいですね。(上記記事にも、多くの政府機関から要求もされている、とありますから考えざるを得ないっていう面もあるんでしょうが)

もちろん、読み上げられればそれでいいというわけじゃなく、操作するという面からのアクセシビリティも考える必要はあると思います。WPF アプリなんかでも気をつける必要はありそうですね。さっき紹介した Healthcare なんかでもマウスなし・キーボードオンリーで操作してみようと思ったらほとんどできませんでした(^^; タブキーでフォーカス移動したらフォーカスがどこにあるのかさっぱりわからなくなっちゃうし、ボタンにショートカットキーも表示されてないし。まぁ、このデモは Tablet PC みたいなデバイスで使うことを想定しているような感じがありますから、これはこれでいいのかも知れませんが。

UniveRSS - 3D な RSS Reader

UniveRSS - a 3D Vista RSS reader

WPF で作られている 3D な RSS Reader です。実用的なのかどうかは知りませんw
ただ、XP SP2 環境では動かせませんでした。ソースを見ると Microsoft.Feeds.Interop とかを参照しているので IE7 の Feed API なんかが必要なんだと思います。(for Vista となっているので IE7 を入れても XP SP2 では動かないのかもしれませんが)

Healthcare (WPF のサンプル)

WPF Healthcare sample source is out より

WPF のデモというと必ずと言っていいほど登場する Healthcare ですが、ソース込みでダウンロードできるようになってました。
http://wpf.netfx3.com/files/folders/applications/entry6608.aspx
バイナリも入ってますので Avalon Patient Monitoring\bin\Release\Avalon Patient Monitoring.exe を起動してやれば動きます。XP SP2 上の .NET Framework 3.0 RTM でちゃんと実行できました。もちろん、Visual Studio 2005 でビルドもできました (いろいろと警告が出ますが)。

2006年12月7日木曜日

Script# 0.2.0.0

WPF/E and Script#?より

Script# が 0.2.0.0 になってます。
Script# っていうのは IL の替わりに JavaScript を生成する C# コンパイラです。HTML 内から呼び出す JavaScript を C# で書けるわけですね。もっともバージョンが 0.2.0.0 ってところからもわかるようにまだまだ 実験的なものっていう感じです。「デバッグはどうやってすんのよ」 とかいろいろと問題はあると思いますし。
で、今回のバージョンアップは WPF/E 対応みたいです。さすが、さっそくですね。たぶんバージョンアップと言ってもコンパイラとかが変わったわけじゃなくライブラリが追加されただけとかじゃないかと思います。

ASMX を STA スレッドで動かす方法

Running ASMX Web Services on STA Threads より

MSDN Magazine 2006/10月号の Wicked Code が紹介されています。
まだよく読んではいませんが、ASP.NET はデフォルトで MTA で動いてるけど、うまいこと HttpHandler を書いてやって .asmx を STA で動かすっていうことみたいです。(違かったらすみません)

# 必要になることがあるのかどうかはわからないけど、
# こういうネタには反応してしまうw

2006年12月5日火曜日

Anders Hejlsberg 氏と Chris McConnell 氏の対話ビデオ

Anders Hejlsberg and Chris McConnell: Reflections on LINQ, Desktop Search, WinFS, Functional and Intentional Programming より

Anders Hejlsberg 氏と Chris McConnell 氏の対話ビデオです。
Anders Hejlsberg 氏は、まぁ、ここを見ている人には説明不要でしょうw
Chris McConnell 氏は Desktop Search チームのアーキテクトだそうです。Channel9 の人が McConnell 氏に会ったときに 「Anders とはまだ会ったことがないんだよな。Desktop Search がらみで LINQ のこととかについて話してみたいな。あと、彼が Intentional Programing についてどう思ってるのかとか」 なんて話があって、「そこに Anders がいるから話そうよ。撮影するね」 となったみたいです。(軽いなw) TechEd のスピーカーラウンジで撮影されたものだそうです。

んが、聞き取れないなぁ。翻訳とは言わないから transcript が欲しいなぁ。

My Web Pages Starter Kit

Final version of ‘My Web Pages Starter Kit’ is here より

CodePlexMy Web Pages Starter Kit というのがあるそうです。
私はダウンロードもしてませんが、これは ASP.NET 2.0 ベースの個人向け CMS で、設定も簡単で、ファイルベースで、もちろんソースもついてて、というようなものみたいです。今は英語とドイツ語のみみたいですが、多くの他の言語のローカライゼーションキットも入手可能になると書かれてます。

読め: Optimizing WPF Application Performance

Required Reading: Optimizing WPF Application Performance より

MSDN Library に入っている Optimizing WPF Application Performance は必読だそうです。

Snoop - WPF アプリのデバッグ用ツール

Check out Snoop - a very useful tool for debugging WPF applications より

Snoop というツールが紹介されています。WPF アプリ用の Spy++ という感じで、ウインドウの構成やメッセージ (イベント) なんかを表示できるようです。

WPF で Vista ガジェットを作る

Writing a Gadget in Visual Basic and Windows Presentation Foundation より

WPF で Vista ガジェットを作る方法が紹介されています。
iframe を使って貼り付けるというのがよくありますが、これは COM として公開したコントロール (ActiveX コントロール) の表示面に ElementHost を貼り付けといてそこで WPF を動かしているみたいです。当然 HTML には ActiveX コントロールを貼り付けるわけですね。
# うれしいのかなんなのかちょっと微妙だなw

windowsvistaretail.com

Preparing for Windows Vista retail on www.windowsvistaretail.com より

なにやら
http://www.windowsvistaretail.com/index.html
こんなサイトが紹介されています。
ちゃんと
http://www.windowsvistaretail.com/index_jp.html
日本語もあります。 
1月末のコンシューマー向け Vista を販売する側の勉強用みたいなんですが、なんでこんなアニメーションなんだろw しかも、ドメイン名まで取ってw

2006年11月7日火曜日

.NET Framework 3.0 が RTM

.NET Framework 3.0 の正式版がダウンロードできるようになったようです。まだ、英語版だけなのかな?
Windows Vista, .NET Framework 3.0 Runtime and Windows SDK Downloads

# つか、Vista と同時期だと思ってたよ

おまけ
2007 Microsoft Office System Is Golden
Office 2007 も RTM だそうです。

2006年10月31日火曜日

VSUG Day 2006 Winter (11月25日)

VSUG Day 2006 Winter が 11月25日(土) に開催されます。


VSUG Day 2006 Winter

第1回 VSUG アカデミー for Students (11月10日)

第1回 VSUG アカデミー for Students が開催されます。プログラミングに興味がある学生さんが対象です。
開催日時も 11月10日(金) の 19時からと学校が終わったあとに参加ができる時間になってますね。
もちろん、無料とのことですので興味のある方は参加されてみてはいかがでしょう?


第1回 VSUG アカデミー for Students

2006年10月3日火曜日

Microsoft MVP を受賞

Microsoft MVP を受賞しました。
今までと同じく Visual Developer - Visual C# です。

2006年9月15日金曜日

VSUG アカデミー (9/27)

第2回 VSUG アカデミー
http://vsug.jp/tabid/132/Default.aspx

9/27(水) に第2回 VSUG アカデミーが開催されます。平日ですが 19:00~21:10 と就業後に参加可能な時間です。
データベース・データアクセスフォーラムのフォーラムリーダー 渡辺 俊史さんの ADO.NET 2.0、日本オラクル 一志 達也さんの Oracle 活用の二本立てです。
# 一志さんは Oracle 本の執筆もされている方のようですね

2006年9月12日火曜日

Atlas 1.0 のロードマップと名称

"Atlas" 1.0 Naming and Roadmap より


以下、覚え書きとして要約 (完全訳ではありません。詳細は上記を参照してください)


■ リリース日
Atlas 1.0 は今年の終わりまでに出す予定とのこと。Beta、RC と出していって、フィードバックをもらいながら最終的な日付を決定するそうです。
また、1.0 がリリースされたら Microsoft の製品として 24時間 365日きちんとサポートされる製品となるそうです。


■ Atlas の提供プラン
まずはコアとなる部分に注力してリリースするようです。コアというのは、クライアントサイドのコントロールやコンポーネントの作成に必要な部分や、ASP.NET と統合されたサーバサイドの機能の部分などを指しているようです。
そのため、今の CTP にある機能のいくつかは落されるそうですが、それらもコアとは別にダウンロードして使用できるようになるそうです。どうやらそれらも Go-Live ライセンスになるようです。


機能リスト、リリースプラン、CTP からの変更点などの詳細を記したホワイトペーパーは 2、3週間後くらいに予定されているようです。


■ 名称
Microsoft AJAX Library
クライアントサイドで動く JavaScript の部分。PHP とか ColdFusion とか、サーバが ASP.NET 以外であっても使用できる。
# "Ajax" じゃなくて "AJAX" なのか。


ASP.NET 2.0 AJAX Extensions
ASP.NET に統合されてるサーバサイドの部分。今まで <atlas:> と表記されていたところは <asp:> と表記することになる。


ASP.NET AJAX Control Toolkit
今までの Atlas Control Toolkit。


■ 最後に
来年の Visual Studio "Orcas" では JavaScript のリッチなインテリセンス、デバッギング、 ASP.NET AJAX Extensions のための WYSIWYG デザイナのサポート、他のたくさんのグレートな機能がある。

2006年9月8日金曜日

Lingr

ものがたり: 「Lingr」 より


CNET Japan: 「Lingr(リンガー)をリリースしました」 が紹介されているんですが、これおもしろいですね。


チャットってこれでいいんじゃない?(笑)>某さん

2006年7月27日木曜日

DELLユーザー驚愕

DELLユーザー驚愕 より


ワロス。なにやってんだよ>Dell


 


って、あれ?
どう見ても Microsoft 純正キーボードも "タ" じゃなくて "夕" です。本当にありがとうございました。

2006年7月25日火曜日

回転寿司とラーメンズ

Local: Sushi Etiquette + My Favorite Sushi Opens in Redmond より


Noah Coad さんは 「お寿司が好き。めっちゃ好き。調理した魚より生の魚を食べる方がいいくらい」 だそうです。シアトル近郊の Bellevue (ベルビュー) にある Sushi Land というレストランで 1~2週間に 1回は奥様とお寿司を食べているそうです。そこでは、1ドル、2ドル、3ドルと色分けされた小さなお皿にシェフがお寿司を載せて、それがコンベアーベルトで運ばれていて、回ってきた好きなものを取り上げるそうです。。。回転寿司のことですね。コメント欄にありますが "revolving sushi" と言うそうです。


と、まぁ、それはいいんですが、記事の後半で 「TechEd のときに友達に Google ビデオにお寿司のエチケットのおもしろいビデオがあると教えてもらった」 と
http://video.google.com/videoplay?docid=-4946101556303618610&q=sushi+Etiquette
が紹介されています。
って、あれ?この間見たときはあったんですが、リンク切れちゃってますね。なので、同じものの YouTube を紹介
http://www.youtube.com/watch?v=pIb6ZSqal64
まぁ、有名なので知っている人も多いとは思いますが、いちおう言っておくとこれは ラーメンズのネタ です。ただ、これを見た外人さんが間に受けないかが心配w (まぁ、「めっちゃワロタ」 みたいなコメントもついてるので大丈夫でしょうがw)


ちなみに、有名な Flash の 「千葉!滋賀!佐賀!」 も元は ラーメンズのネタ です。

2006年7月24日月曜日

Re: 日本における時差のシナリオに関してご意見をお聞かせください

日本における時差のシナリオに関してご意見をお聞かせください より


■ 最初に私が遭遇したことがあるシナリオを、、、
以前に (今も?) 世界中の株価や為替を扱うシステムに関わったことがあります。データベンダーから取得する株価や為替といったデータの日時は内部的には GMT (UTC) で表現されていました。しかし、こういったデータは現地時間も重要なファクターなので、人が参照するときには現地時間に変換してやる必要があります。もちろん、単に時差を変換するだけではなくサマータイムも考慮してやる必要があります。たとえばニューヨーク証券取引所 (NYSE) の取引時間は現地時間で 9:30~16:00 です。これは日本時間の 23:30~06:00 になりますが、ニューヨークがサマータイム期間中の場合は 22:30~05:00 になります。サマータイムを考慮しないと一時間もずれることになるので大事です。また、過去数年間分のチャートを描いたりもしますので、今年だけではなく過去のサマータイムのルール情報も必要です。データベンダーより過去 10年分とか 20年分とかのデータを購入して追加するといったことも考えられるのでそれなりの期間のサマータイムのルール情報が必要となります。


■ 続いてタイムゾーンとサマータイムについて
普通にタイムゾーンとか時差とかと言うと 「日本の JST は GMT に対して +9時間」 とか 「アメリカの EST は GMT に対して -5時間」 とかといった感じでかなり単純です。変換も単純に加減算するだけです。(ちなみに、タイムゾーンは 「GMT に対して -2:30」 とか分刻みのところもあります。1時間単位のみというわけではありません)
しかし、サマータイムはこんなに単純ではありません。たとえば、今のアメリカのサマータイムは 「4月の第一日曜日の午前 2時に時計を 1時間進め、10月の最終日曜日の午前 2時に時計を 1時間戻す」 というルールになっています。これだけの情報があればサマータイムも考慮した時差の変換ができます。しかし、現実には



  • アメリカやカナダなどは州・自治体ごとにサマータイムを導入するかどうかを決められるらしい。

  • アメリカでは 2007年からサマータイムの開始日が 3月の第二日曜日に変わるらしい。

  • アメリカの最近 30年ほどだけを見てもサマータイムの開始日は、1967~1973 は 4月の最終日曜日、1974 は 1/6、1975 は 2/23、1976~1986 は 4月の最終日曜日、1987~ は 4月の第一日曜日、と変わってきている (あってるかどうか確認はしてませんので注意)。

のように、サマータイムのルールは地域ごとにも変わりますし、年ごとにも変わっていきます。ある日時を GMT とローカルタイムとで変換したい場合は、該当地域の該当する年のサマータイムのルールの情報がないと変換することができません。また、サマータイムのルールが変更されることもありますし、サマータイム自体が導入されたり廃止されたりもします。そのため、サマータイムのルール情報もその都度更新する必要があります。


■ Windows でのサマータイム
Windows では GetTimeZoneInformation API を使ってタイムゾーンの情報を取得することができます。ただし、これはコントロールパネルで設定されているタイムゾーンの情報を取得できるだけで、任意のタイムゾーンの情報が取得できるわけではありません。また、サマータイムのルール情報も含まれてはいますが、これも今現在のルール情報だけで過去のサマータイムのルール情報などはありません。
ちなみに、タイムゾーンの情報はレジストリの HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones に入っているようです。ここの TZI というのはバイナリですが、中身は

    struct {
LONG Bias;
LONG StandardBias;
LONG DaylightBias;
SYSTEMTIME StandardDate;
SYSTEMTIME DaylightDate;
};


と TIME_ZONE_INFORMATION 構造体の一部をそのまま書き出しただけみたいです。
いずれにしろ、上に書いたようなシナリオでは任意の地域の任意の年のサマータイムのルール情報が必要になりますから、Windows の持っている情報はまったく使い物になりません。


■ tzdata
Unix では tzdata というタイムゾーンデータが使われているようです。
ftp://elsie.nci.nih.gov/pub/
こちらで配布されています。
この ftp サイトを見ると今だと tzdata2006g.tar.gz というファイルがありますが、これをダウンロードして解凍すると northamerica といった拡張子なしのファイルが出てきます。これはテキストファイルですので適当なテキストエディタで見ることができます。見てみると多数のコメントと共に様々な地域のタイムゾーンとサマータイムのルール情報が記述されていることがわかると思います。また、asia ファイルの Japan のところを見ると 1948~1951 の間に日本にもサマータイムがあったことも記述されています。
このように tzdata は地域別・年別のタイムゾーン・サマータイムのルール情報がわかっている範囲ですべて格納されているデータベースとなっています。


tzcode の方にソースが含まれているのですが zic を使うと tzdata をテキストからバイナリに変換することができます。そして、これも tzcode にソースが含まれていますが tzdata 対応版の localtime を使うとサマータイムを厳密に考慮した時差の変換ができます (実際には zic でバイナリ化した tzdata が使われます。これはパフォーマンスなどのためじゃないかと思います)。上述のようにサマータイムを考慮しようとすると JST、EST といった大雑把なゾーンの指定では足りません。なので、tzdata では Asia/Tokyo、America/New_York というような名称で指定するようになっています。アメリカのインディアナ州などでは自治体ごとにサマータイムの対応が異なったそうですが、これもちゃんと America/Indianapolis、America/Indiana/Indianapolis、America/Indiana/Marengo、America/Indiana/Knox、America/Indiana/Vevay といった名称で指定できるようになっています。


実際に tzdata 対応 localtime で "1974/01/05 09:00:00" を GMT から America/New_York に変換すると "1974/01/05 04:00:00" になります。"1974/01/06 09:00:00" を GMT から America/New_York に変換すると "1974/01/06 05:00:00" になります。これはアメリカのサマータイムは 1974年だけは 1月 6日の午前 2時から始まっているからです。
このように tzdata を使うと世界中の地域の過去から未来までの日時を正しくサマータイムを考慮しつつ変換することができます。確かソースは含まれていなかったように思いますが、反対に現地時間を GMT に変換する関数も実装できるでしょうし (というかしました)、それらがあればあるローカルタイムから他のローカルタイムに変換することも可能になります。
ちなみに tzdata にはうるう秒の情報も入っているようです。


ところで、tzdata は tzdata2006g.tar.gz といったファイル名になっていますが、これは 2006年にリリースされた g 番目のデータということを意味します。更新があると末尾のアルファベットがインクリメントされていきます (次は tzdata2006h )。あらたなサマータイムのルール情報が追加されるだけではなく、過去の情報が修正されることもあるようです。たとえば 「内戦状態にある時はよくわからなかったけど、あとで調べてみたら実はその国ではサマータイムが導入されていた」 なんてこともあったりするようです。


また、http://www.w3.org/TR/timezone/ こことかにも tzdata のことは出てきたりします ("Olson time zone database" としても知られる [tzinfo] 、といった感じで書かれてます)。なので、tzdata 自体は結構メジャーな存在なのだと思いますが、標準化という意味で tzdata がどのような位置づけにあるのかなどは私はまったく知りません。たとえば、Asia/Tokyo といった表記法は RFC などにまとめられているのか、それとも tzdata 独自のオレオレ仕様なのか、とかそういったことはよくわかりません。


■ ディベロッパー製品開発統括部 Blog に答えてみる
と、前置きが異常に長くなっちゃいましたが(^^; トラックバック先の 「日本における時差のシナリオに関してご意見をお聞かせください」 に答えてみます。


まず、「歴史的経緯からサマータイムのルールが年毎に変わっていたもののサポート」 というのは、上記の tzdata がサポートしているような年ごとのサマータイムの状況をサポートするということだと理解しました。この場合に気になるのは、この場合 "JST"、"EST" というような表記法では範囲が広すぎて役に立たないことです。上述したようにアメリカやカナダなど州・自治体でサマータイムのルールが違うことも多くあるため、tzdata のような Asia/Tokyo、America/New_York、America/Indiana/Marengo といった表記法が必要になると思います。ちなみに、ニューヨークもインディアナ州も EST (EDT) みたいです。しかし、インディアナ州は自治体ごとにサマータイムを導入するかどうかが違ったため 「EST を使っているところの 1980年のサマータイムの開始日は?」 と聞かれても答えは出ません。「インディアナ州 Marengo の」 というところまで地域を限定してやる必要があります。tzdata の America/Indiana/Marengo という表記法ならばこのようなものにも対応できます。


> 1. ユーザー設定のタイム ゾーンの作成(時間帯を、既定でコンピュータ上にあるもの以外に、プログラム的に作成すること)
> 2. ユーザー設定のタイム ゾーンを恒久的にコンピュータ上に書き戻す


ここでいうタイムゾーンとはサマータイムのルール情報も含んだものでしょうか?そうであれば、サマータイムのルール情報に更新があった場合にたとえば Windows Update / Microsoft Update などを通じて速やかにデータが更新されないと困ったことになる可能性があります。しかし、現実にはマイクロソフト社側で即座に対応するのは難しい場合もあると思いますので、独自にタイムゾーンを作成できたほうが望ましいと思います。また、北海道サマータイム に対応した Asia/Hokkaido タイムゾーンを作りたいというような人もいるかもしれません。


> 3. サマー タイム設定を切った状態でタイム ゾーンのコピーの作成


これは 「ほんとうはサマータイムが実施されているけど、実施されていないと仮定した場合のタイムゾーンを作成する」 ということでしょうか?そうであれば、あまり必要ないような気がします。


> 4. サマー タイムのため、時計の時刻を前後した際のローカル タイムが未確定、もしくは曖昧/重複にあるかどうかを問い合わせる関数


いちおう確認させて頂くと、たとえば、アメリカのサマータイム開始日は午前 2時に時計が 1時間進むので午前 2時は存在しないことになります。サマータイム終了日は午前 2時に時計が 1時間戻るので午前 1時台が 2回あることになります。このような 「存在しない時刻」 と 「2回同じ時刻があるため曖昧になる時刻」 を判定する関数ということでいいでしょうか?
このような関数が必要になる場面は少ないかもしれませんが、あったほうがいいように思います。
また、ローカルタイムから GMT に変換する関数がある場合は、この関数に 「存在しない時刻」 や 「曖昧な時刻」 を渡した場合の挙動も明確にする必要があると思います。個人的には例外でこけるのではなく、それなりの時刻に変換してもらったほうがいいように思います (曖昧な場合はより小さい時刻として扱う、などのルール付けは必要ですが)。


> 5. 歴史的経緯によって基本になる差分が年毎に変わったタイムゾーン(前述の夏時刻法に対する実装が関係してきます)


サマータイムにきちんと対応する場合はとうぜん必要です。というか、対応して欲しいです。


> 6. 稼動中のコンピューターの現在のタイム ゾーンの変更


あまり必要性は感じません。


> 7. スレッド単位、もしくはプロセス単位のアンビエント タイム ゾーン*1の設定


あまり必要性は感じません。


> 8. 一行で簡潔に変換を可能にするヘルパ関数(TimeZone.Convert(time, "Pacific", "Eastern") のような)


あると便利だと思いますが、なくても Pacific → GMT → Eastern と変換すれば済むことだと思います。


> 9. "PST", "EDT"といったタイム ゾーンを組み込んだDateTimeに対する解析と書式設定


RFC や W3C などにあるような書式には対応して欲しいです。
また、サマータイムのために Asia/Tokyo のような表記法を導入する場合は、それにも対応して欲しいです。

2006年7月21日金曜日

あれ?Expression は 2008年?

ITmedia: MS、Expressionデザインツールのパートナー企業を募集
eWeek: Microsoft Seeks Partners for Push into Design Tools


ITmedia の方が翻訳記事で、eWeek の方が元記事だと思います。記事の内容のほとんどは今まで聞いたことがあるようなことですが、、、


ITmedia:
また、バイラム氏がWPCでのプレゼンテーションで見せたスライドによれば、Expression Graphic DesignerとExpression Interactive DesignerはMicrosoftの2008年会計年度にリリースされる見通し。
さらに同様のスライドによれば、Expression Web Designerは、バイラム氏が「今年の年末に」と言っていたように、2006年中に提供されるもよう。


eWeek:
And some of the slides that were part of Byrum's presentation at his Microsoft WPC session said that the Expression Graphic Designer and Expression Interactive Designer will be available in "FY08," or Microsoft's fiscal year 2008.
Those same slides said Expression Web Designer would be available in 2006, or "at the end of this calendar year," as Byrum said.


ええっ?Expression Graphic Designer / Interactive Designer は 2008年?!きっと会場にいた人たちも 「おいおい、再来年かよ」 と思ったんだろうなぁ。


ただ、「これらの製品のリリーススケジュールはまだ決まっていない」 「いずれも正式な出荷日は決まっていない」 ということなので、まだなんとも言えない感じ。あと、ほんとに正式リリースが 2008年ということになったとしても、それまでの間は CTP とか Beta とかを Go-Live で使っておけっていうことになると予想してみる (ほんとに勝手な予想で何の根拠もありません)。

ファイルのアクセスコントロールリストを操作する

Copying Access Control List (ACL) entries between files [Kim Hamilton] より


.NET Framework 2.0 にはファイルのアクセスコントロールリスト (ACL。Administrator のみ書き込み可で Everyone は読み取りのみ、とかそういうやつ) を操作するクラスやメソッドが追加されてたんですね。ぜんぜん気付いてなかった(^^;

VS2005 プラグイン - XPathmania

Tools: XPathmania, XPath in VS より


Mvp.Xml XPathmania という Visual Studio 2005 用のツールが紹介されています。
このツールは、VS2005 で XML ファイルを表示しているときに任意の XPath を適用してみた結果を簡単に調べることができるというものです。


使い方はダウンロードしてきてセットアップするだけです。VS2005 を起動すると 「表示」-「その他のウインドウ」 に "XPathmania" という項目が増えているはずです。これをクリックしてやると XPathmania のウインドウが開きます。このウインドウは他のプロパティウインドウなどと同じようにドッキングできます。
あとは、適当な XML ファイルを表示している状態で、XPathmania のウインドウに XPath を入力して Query ボタンを押せばその結果が "Match" のところに表示されます。また、"Match" のところだけではなく、XML ファイル側も強調表示されますし、"Match" のところのある行をダブルクリックすると対応する要素が強調表示されます。


なお、日本語版の VS2005 でちょっと使ってみましたが問題なく動作するようです。

2006年7月20日木曜日

Vista July CTP と .NET Framework 3.0 July CTP

Vista July CTP と .NET Framework 3.0 July CTP が出てますが、、、
http://blogs.msdn.com/tomarcher/archive/2006/07/17/668572.aspx#NotesJulyCtp
によると 「"Orcas" Development Tools for .NET Framework 3.0 の July CTP はない」 んですね。

2006年7月19日水曜日

Shared Source Microsoft Device Emulator 1.0

Shared Source Microsoft Device Emulator 1.0 Release より


「Shared Source Device Emulator は Device Emulator V1.0 のソースコードを圧縮したアーカイブで、Visual Studio 2005 を使ってビルドできる」 そうで、「Device Emulator は Windows CE と Windows Mobile オペレーティングシステムの走る CPU とマザーボードのソフトウエアシミュレータです」 だそうです。


へぇ、実際にダウンロードしてみたわけではないですが、こんなものまでシェアードソースで提供してくれるなんて、すごいな

Windows.Forms なアプリを glass にする その2

Vista: Glass in C# より


Windows.Forms なアプリを Vista の Glass 対応にする方法が紹介されています。以前に 「Windows.Forms なアプリを glass にする」 でも別の記事を紹介しましたが、やっていることはほとんど同じで DWM (Desktop Window Manager) の API を呼び出しているだけです。ただ、今回のは



  • Environment.OSVersion.Version.Major が 6 未満かどうかチェックしてる

  • WndProc をオーバーライドして WM_NCHITTEST (0x84) で HTCLIENT (1) のときに Glass 上かどうか調べて Glass 上のときは HTCAPTION (2) を返すようにする

なんてところが新しいです。


Desktop Window Manager on Vista より
マイクロソフトの川西さんの blog では VC++ で DWM API を使って Glass 対応にする例が紹介されています。

C# 2.0 の匿名メソッドを使って関数型的なリスト処理をする

Functional list processing in C# 2.0 with anonymous delegates より


「関数型言語のベネフィットのひとつは非常に柔軟なリスト処理ができるってことだよね」 みたいな感じで始まってるんですが、最初に 「ある条件に一致する要素すべてを削除する RemoveAll<T> メソッド」 の実装例を紹介しています。この 「ある条件」 を Predicate<T> で渡せるようにしておくと匿名メソッドで指定することもできるし便利っていうことで、記事の中ほどで List<T> が持っている Predicate<T> や Comparison<T> を引数に取るメソッドをずらずらっと紹介しています。


このずらずらっと紹介しているのの最後が ConvertAll メソッドなんですが、これを使ったサンプルとして


    static List<string> GetBigFiles(string directory, int bigLength)
{
List<string> paths = new List<string>(Directory.GetFiles(directory));
return paths.ConvertAll<FileStream>( File.OpenRead )
.FindAll( delegate(FileStream f) { return f.Length >= bigLength; } )
.ConvertAll<string>( delegate(FileStream f) { return f.Name; } );
}


こんなのが紹介されています。
ディレクトリのファイル名一覧を List に入れておいて、読み取り用にオープンして、FileStream にして、ファイルサイズが指定されたバイト数より大きいか判断して、その FileStream の Name を再び List にして、それを返す。。。
いいっスw 実用で使うコードにこんなの書かれると 「ちょっと待てよ」 と思っちゃうとは思いますがw、こういうの大好きwww


で、続いて


    void foo()
{
Debug.Write("entering foo()");
try
{
// 処理をする
}
catch (Exception e)
{
// 例外を処理する
throw;
}
Debug.Write("exiting foo()");
}


の 「処理をする」 と 「例外を処理する」 の部分も delegate で与えちゃう例が紹介されています。
これもいいなw

VB9 の XML Namespace

VB 9.0 Xml: Improvements to global Xml namespaces より


VB9 ではソースコード中に XML がそのまま書けるようになるそうですが、XML のネームスペースの指定は、


Imports xmlns:ns = "http://www.w3.org/1999"
Dim name As XName = ns + "Root"


なんて書き方ができるようになる模様。
つか、すでに VB9 は "VB" という言語であって BASIC ではないなw

2006年7月11日火曜日

え、MVP?

Awarded Microsoft MVP より


MVP を受賞されたそうです。。。初受賞なんでしょうか?。。。てか、もう MVP とかそういう枠は超えちゃってると思うんですが。。。


私が始めてペゾルド氏の 「プログラミング Windows (日本語翻訳版)」 を読んだのは Windows 3.0 日本語版がリリースされるかどうかといったころだったと思います。ただ、読んでたのは Windows 2.11 向けの最初の 「プログラミング Windows」 です (グレーのカバーで Volume 1 と 2 に分かれてたと思う)。
で、「プログラミング Windows」 を読んでたら実際にコードを書いてみたくなって、Windows 3.0 日本語版向けの SDK を大阪 日本橋で買ってきちゃったんですね。当時は SDK は商品として別売りされていて、確か定価は 98,000円。これが値引きされてて (きっと、買う人がいなかったんでしょう(^^; ) 7万円くらいで買ったように記憶してます。もちろん、あくまで趣味なので自腹。かなりきつかったなぁ(^^; ちなみに、この SDK、中身はフロッピーが 10枚くらい? (もっとあったかも) でこれに .h や .lib などが入ってました。CodeView (デバッガです) も入ってたかな?あと、本になったリファレンスマニュアルやプログラミングガイドなんかが 7~8冊くらいだったかな?これらが後の MSDN Library や Platform SDK、Windows SDK になっていくわけですね。で、そうこうしているうちに Windows 3.0 向けの 「プログラミング Windows」 も出版されたのでもちろん購入。その後の 3.1 向け、95 向けなんかの 「プログラミング Windows」 も買ったんじゃなかったかなぁ?いやぁ、なつかしいなぁ(^^


ところで、ペゾルド氏の blog は WPF や XAML が中心で、2006年秋に 「Applications = Code + Markup」 という WPF、XAML の本が予定されているそうです。

2006年6月24日土曜日

.NET Framework 3.0 June 2006 CTP

出てますね。


Readme for .NET Framework 3.0 June CTP


Microsoft Pre-Release Software Microsoft .NET Framework 3.0 - June 2006 CTP
(Japanese の Language Pack が見つからない)


Windows SDK for .NET Framework 3.0 June CTP


Microsoft Visual Studio Extensions - Development Tools for .NET Framework 3.0


Visual Studio 2005 Extensions for Windows WorkFlow Foundation

ADO.NET vNext

ADO.NET vNext っていうのは ADO.NET の次のバージョンのことです。Orcas といっしょにリリースされるんだと思います。一部では ADO.NET 3.0 と呼ばれてたりもします。


ADO.NET vNext: The Entity Framework, LINQ and more
今までの ADO.NET は SqlConnection とか Sql Command とかデータベースとやり取りするためのクラスライブラリでしたが、ADO.NET vNext ではそういったローレベルだけでなく、抽象化したもっとハイレベルのレイヤも受け持つようになるようです。


そのハイレベルのレイヤっていうのは、ようするに O/R マッピングのことみたいです。データベース上のスキーマ (テーブルやビュー) はリレーショナルデータベースにむいたような構造にしてやらなくちゃいけないことが多いですし、そのままクラス / オブジェクトとして表現してもいまいちな場合が多いです。そこで、データベース上のスキーマとは別にクラス向き (オブジェクト指向向きと言ったらいいのかな?) のモデルを作ってやって、それらをマッピングしておけばいいだろうということです。で、このモデルを定義するための規則が ADO.NET Entity Data Model っていうやつみたいです。ADO.NET Tech Preview: Entity Data Model に Entity Data Model の詳細が書かれています。で、この枠組み全体を ADO.NET Entity Framework とかって呼んでるみたいです。


Next-Generation Data Access: Making the Conceptual Level Real こちらの資料にちょっと具体的な感じがありますが、真ん中チョイ下くらいの 「Making the Conceptual Level Real」 のところの 「Build the Conceptual Model」 がエンティティデータモデルで書いたモデルの例みたいです。XML で書かれてますが、とうぜん Visual Studio 上ではデザイナが提供されるんでしょう。そして、「Figure 7」 にあるような感じでデータベース上のスキーマとモデルとのマッピングを行い、これらからクラスが自動生成されるそうです。


モデルから作成されたクラス (オブジェクト) は、マッププロバイダ経由で使うようです。具体的には MapConnection、MapCommand といったクラスが用意されていて、SQL でアクセスできます。ただ、普通のリレーショナルデータベースとは違うので普通の SQL では機能が足らず Entity SQL というのが定義されているようです。The ADO.NET Entity Framework Overview とかに Entity SQL について書かれています。


ADO.NET vNext screencast
こちらにスクリーンキャストがあります (英語)。
普通に ADO.NET 3.0 と言ってますね。あと、CTP は夏の後半に出るとかなんとか。
最初は普通に ADO.NET 2.0 でアクセスするコードを書いてます。それをマッププロバイダ (MapConnection、MapCommand) と Entity SQL を使ってアクセスするように改造していっています。モデルは事前に作ってあったのを使っているみたいです。モデルをデザインやマッピングなどをどういう風にやるのか見てみたかったんですが、その辺は出てきません (というか、まだデザイナが無くて XML をガリガリ書かないといけないから見せられない、と想像してみる(^^; )。そして、さらにそのコードを LINQ を使うように書き換えていっています。最後で insert や update に相当することもできるというのもデモしてます。また、このときにデータベース上では複数のテーブルが一つのクラスへとマップされている場合に、オブジェクトを更新するとちゃんとそれぞれのテーブルを更新する SQL が自動的に発行される様子をプロファイラを使って見せています。


エンティティデータモデルもおもろいですが、LINQ を使った時点でマッププロバイダとかを気にする必要がほとんどなくなっちゃうとこもかなりおもしろく感じました。相手がデータベースなのか ADO.NET Entity Framework なのかは LINQ の中で勝手にうまいことやってくれるので、コード上はたいした違いはないっていうことですね。

あれ?WinFS?

WinFS Team Blog: 「WinFS Update」 より


えーっと、しっかり読んでないので誤読ってるかも知れませんが。。。


「WinFS beta1 について書いてから 1年近くたっちゃった。けど、私たちはその後も元気でやってるよ」 なんて感じで始まるんですが。。。 Orcas に入る次のバージョンの ADO.NET (ADO.NET vNext。エンティティデータモデルだとかいろいろな新機能があって、今までの ADO.NET とは大きく変わる) は WinFS から来たものだとかなんとか。そして、WinFS の非構造データのリレーショナルデータベースへの統合?(integration of unstructured data into the relational database) や DBA 無しでの自動チューニング?(automation innovations that make the database "just work" with no DBAs) なんかは次の SQL Server (コードネーム Katmai) に入るとかなんとか。読んでるうちに 「じゃ、WinFS って何が残るの?」 と思ってきたんですが、後半を読むと Orcas と Katmai の基礎部分としてどうのこうのとか、もう WinFS はスタンドアローンコンポーネントとしては提供されないとかなんとか。。。えーっと、これって WinFS は終了ってこと?


コメント欄の最初
「So WinFS would be similar to Cairo? (WinFS って Cairo と同じになるの?)」
うーん、やっぱりそういうことなのか。。。

2006年6月22日木曜日

BumpTop Prototype

BumpTop Prototype より


新しいデスクトップの操作方法のデモムービーです。
(今は WMV は落ちてきませんが YouTube は見れました)


なんかすごくおもしろい、これ。けど、こんなデスクトップになったらいろんな書類が山積みになって探し出すのが大変になっちゃいそう (整理整頓しろって話ですが(^^; )。
もういっそ、Multi-Touch Interaction ResearchYouTube) と合体させちゃって欲しいな(笑)

WPF MSDN Browser と MSDN/TechNet Publishing System (MTPS) Content Service

WPF MSDN Browser より


WPF を使って実装した MSDN のクラスライブラリリファレンスを参照できるブラウザが紹介されています (ソースとバイナリは下の方の "Try It" のところ)。
起動して右上のテキストボックスのところに "System.String" などと入力してエンターキーを押すと MTPS Content Service から情報を取得して表示されます。


つか、MSDN/TechNet Publishing System (MTPS) Content Service なんていうものがあったんですね。
これは、http://msdn2.microsoft.com/library と同じ内容が取り出せる XML Web Service みたいです。ブラウザで http://services.msdn.microsoft.com/ContentServices/ContentService.asmx にアクセスすれば解説が表示されます (英語)。

Lang .NET Symposium 2006

OPC Diary: 「Lang .NET Symposium 2006」 より


Microsoft アメリカ本社で Lang .NET Symposium 2006 というのが 8/1~8/3 (7/31~8/2?) に開催されるそうです。Overview によると 「Lang .NET 2006 Symposium はプログラミング言語、マネージドな実行環境、コンパイラ、マルチランゲージライブラリ、IDE (統合開発環境) のディスカッションのためのフォーラム。...」 だそうです。


で、スピーカーがすごいですね。ググってみてわかったところでは、



  • John Gough … Ruby.NET の人みたい。

  • Miguel de Icaza … Novel の Miguel 氏だから Mono の中の頂点の人ですね。

  • Mike Barnett … MS Research で Spec# をやってる人。

  • Anders Helsjberg … "あの" C# and LINQ のヘルスバーグ氏。

  • Jim Hugunin … IronPython の開発者。

  • Polita Paulus … BLINQ の人だそうです。(って BLINQ ってなに?)

  • Don Syme … MS Research で F# を作ってる人。(F# is developed and maintained by Don Syme and James Margetson. だそうです)

  • Paul Vick … 去年日本にも来た VB9 の人。

なんていう感じ。。。ほんとにすごいな、こりゃ。

2006年6月21日水曜日

Open XML File Format 用のコードスニペット

Open XML Code Snippets Live! より


Office 2007 で使われる Open XML File Format と Open Packaging Conventions を操作するコードのスニペット集が紹介されています。
ちなみに、.NET Framework 3.0 には System.IO.Packaging API があってパッケージを簡単に扱うことができます (らしいです)。まぁ、パッケージと言っても単なる zip なので System.IO.Packaging なしでもなんとでもなるんでしょうが。


どんなスニペットが含まれてるかは、
Code Snippets for Open XML Development
にリストがあります。

WPF グラフィックパフォーマンス Q & A (英語)

WPF Graphics Performance Q & A - Some explanations about WPF graphics architecture & overhead より


まだ読んでません。MSDN のアーティクルとして公開される予定だけど、一足先に blog にさらしとく、ということみたいです。


# そのうち読もう

WPF のサンプル (beta2 用)

Beta2 WPF Samples Available as Zipped Download より


zip で固めた WPF のサンプル (beta2 用) がダウンロードできるそうです。91Mバイトもあるそうですが、これは Windows SDK についてるサンプルとは別物なのかな?(まだ、中身は見てません)

Cider のカスタマイズ その場でのテキスト編集

Implementing a "Insitu editor" using CIDER Adorner extensibility model より


Visual Studio のデザイナ上でのプロパティ (たとえば Text プロパティとか) の編集はプロパティウインドウで行うのが基本ですが、Cider (コードネーム。Visual Studio 向け WPF 用デザイナのアドオン) ではその場で編集ができるようです。で、カスタムコントロールを作るときに ExtensionAttribute をつけておけばそういったことへの対応もできるよ、というサンプルが紹介されています。


まぁ、Cider の仕様が固まったわけでもないと思いますので、このサンプルがこのまま役に立つかどうかはアレですが、Cider はさらにいろいろとできるようになってるみたいだな、という覚え書き。


ところで "Insitu" って手持ちの辞書に載ってなかったんですが、
http://www.m-w.com/dictionary/insitu
これか。「自然な場所で」 みたいなニュアンスで使ってるのかな?

2006年6月14日水曜日

DLinq でプロシージャとファンクションのサポート

Spring Linq CTP finally hits the shelves!
DLinq User-Defined Function support より


sqlmetal というツールを使って DLinq で必要になるソースコードを自動作成してくれるそうですが、このとき /sprocs というオプションをつけておくとストアドプロシージャを呼び出すためのコードも作成してくれるそうです。
この 「ストアドプロシージャを呼び出すためのコード」 ですが、MethodInfo.GetCurrentMethod() を引数に ExecuteStoredProcedure を呼び出すというような感じで書かれています。これからすると、呼び出し元メソッド自身の Attribute なんかを見て呼び出すべきプロシージャの名前や引数を決定して、普通に呼び出すだけみたいですね (けど、これだと実行のたびに解釈しなくちゃいけないような気がする)。


同じく /functions をつけておくとユーザ定義関数 (User Defined Function) を呼び出すためのコードを作成してくれるそうです。
こちらは Expression Tree を作り出すコードが作り出されています。そのおかげで、


var q = from c in db.Categories
            select new {c.CategoryName,
            Total=db.TotalProductUnitPriceByCategory(c.CategoryID)};


という C# 上のコードが


SELECT [t0].[CategoryID],
               [dbo].[TotalProductUnitPriceByCategory]([t0].[CategoryID]) AS [value]
FROM [Categories] AS [t0]


という SQL に展開されるわけですね (すなわち、ユーザ定義関数は SQL 上で実行されるのであって、C# 上で実行されるのではない)。

Chatting about LINQ and ADO.NET Entities (Anders Hejlsberg 氏と Sam Druker 氏へのインタビュービデオ)

Chatting about LINQ and ADO.NET Entities


Anders Hejlsberg 氏と Sam Druker 氏が LINQ とか ADO.NET についてしゃべってるビデオです。
まだ、冒頭部分しか見てませんがこりゃきびしいな (英語を聞き取るのが)。transcript があるといいんだけど。。。

MSDN Wiki beta

MSDN Wiki Beta より


MSDN Wiki beta がリリースされたそうです。
もともとオンライン上に Visual Studio 2005 と .NET Framework 2.0 のドキュメントがありますが、MSDN Wiki はこれらを誰でも修正できるようにしたものです。まぁ、さすがに誰でも自由にとなっちゃうと、わけがわからなくなるので "Community Content" セクションに追記できるという形式になっているようです。
また、今は英語版だけですがローカライズ版も予定しているとあります。

netfx3.com

http://www.netfx3.com/


Microsoft が運営している .NET Framework 3.0 のサイトです。


また、すでに
http://www.windowscommunication.net/ は http://wcf.netfx3.com/ に
http://www.windowsworkflow.net/ は http://wf.netfx3.com/ に
飛ぶようになっています。

.NET Framework 3.0

.NET Framework 3.0 より


# もうあちこちで紹介されてますが。。。


コードネーム WinFX は正式名称 .NET Framework 3.0 となったそうです。
今まで WinFX と言うと WPF、WCF、WF のことを指していたようなイメージもありましたが、.NET Framework 3.0 は



  • 今までの .NET Framework 2.0 のすべて (ASP.NET、WinForms、ADO.NET、その他のベースクラスライブラリや CLR そのものなどなど)

  • Windows Presentation Foundation (WPF)

  • Windows Communication Foundation (WCF)

  • Windows Workflow Foundation (WF)

  • Windows CardSpace (WCS) これはコードネーム "InfoCard" と呼ばれていたものだそうです。

をあわせたものということみたいです。(上記の Somasegar 氏の記事にある画像を見ると一目瞭然ですが)


ということは、このままいくと 2.0 → 3.0 ではランタイム自体の変更はないということですね。1.x → 2.0 のときは Generics などいろいろな機能拡張がありましたからランタイム自体も変更されています。しかし、2.0 → 3.0 ではランタイムは同じで WPF、WCF などのクラスライブラリが追加されるだけということになります。もちろん、ランタイムの機能追加はないとしてもパフォーマンスやセキュリティ向上のために修正されないとは限りませんから 3.0 のランタイムが今の 2.0 のままとは限らないと思いますが。


そういや、LINQ に対応する C# の言語仕様は C# 3.0 と呼ばれてるけど、これはこのままなのかな?LINQ が出てくるときの .NET Framework ってどうなるんだろ?まさか、.NET Framework は 4.0 で、C# 言語仕様は 3.0 で、ランタイムは 2.0 なんてことになる?(笑) (ちなみに LINQ Technical Preview ではコンパイラとクラスライブラリの追加だけでランタイムは 2.0 のままのはず)

2006年6月7日水曜日

Windows Live Mail Desktop Beta

Windows Live Ideas にもおもしろそうなものがあります。


注意
.NET Passport (今は Microsoft Passport Network って言うのかな?いや、Windows Live ID?よくわからん(笑)) にサインインしている状態だと  Windows Live Ideas  を見てもたいしたものがないかもしれません。その場合は、いったんサインアウトしてみてください。(.NET Passport の言語設定を見ているようです)
サインアウトしても日本語環境からだと大差ないかもしれません。その場合は、IE のメニュー 「ツール」-「インターネットオプション」 の 「言語」 で "英語 (U.S.) [en-us]" を追加して "日本語 [ja]" よりも上になるようにしてみてください。Microsoft のサイトはブラウザの言語 (たぶん Accept-Language ) を見て自動的に言語を切り替えるものがあります。この設定をすると Accept-Language: en-us,ja; になって英語版のページが表示されるようになります。


Windows Live Mail Desktop Beta
新しいメールソフトを開発中みたいです。



  • 複数のメールアカウントを一箇所でスピーディにアクセス (AOL や Gmail も OK)。

  • Web ベースのメールソフトと共にデスクトップアプリのパワーを。

  • メールと同じくらい簡単に newsgroup と RSS feed を取得可能。

  • オフラインのときもメールの作成、削除、管理が可能。

  • オンラインストレージは 2Gバイト。

  • メールアドレス自動補完や他の便利な機能など、メールをスピーディに書けるようにする今まで無かったような機能。

  • メッセージについてのことをすぐに MSN Spaces blog にエントリできる。

  • プログラムの中で MSN Messenger で連絡を取れる。

  • メールの写真を簡単に作成、編集。

blog の方にもいろいろと書かれていますし、スクリーンショットもあります。
どうやらアプリ自体は Windows アプリで、ストレージを Internet 上にも持って同期するというような感じでしょうか?あと、広告が表示されるみたいですね (そのかわり無料になるということかな?)。

Google Notebook, Google Trends, ...

先ほど Google Spreadsheets を紹介 しましたが Google Labs にはいろいろとおもしろいものがあります。


Google Notebook
インストールしておくと IE のツールバーとステータスバーにノートのアイコンが追加され、範囲選択している部分を記録しておくことができます (画像なども含む)。気になった部分を自分用に記録しておくこともできますし、Public なノートブックも作れるようです。


Google Trends
見てみりゃわかると思います。「C#,VB」 のようにキーワードをカンマで区切って複数入れるとそれぞれを比較することもできます。


Google Reader
ブラウザ上で動く RSS Reader です。


他にもいろいろ。。。

Google Spreadsheets

Google Spreadsheets


まだ limited test ということで実際に使うことはできませんけど、Web ブラウザ上で動くスプレッドシートを Google が開発中ということだそうです。


http://www.google.com/googlespreadsheets/tour1.html
なんかを見ると



  • ゼロから作ることができ、数値の書式、カラムのソート、計算式の追加などを含むすべての基本的な操作ができる。

  • CSV か XLS を計算式や書式を維持したままでスプレッドシート/ワークシートにアップロードできる。

  • ツールバーボタンのクリックで太字、アンダーライン、フォントの変更、セルの背景色の変更などができる。

 



  • あなたのスプレッドシートにアクセスできる人を選択できる。ドキュメントを共有したい人のメールアドレスを入れて、メッセージを送るだけ。

  • スプレッドシートを共有すると指定した人はサインインするだけでそれにアクセスできる。

  • 複数の人が同時に編集/参照できる。アクセス中の人はチャットウインドウに表示される。

 



  • ダウンロード不要。インターネットに繋がっているコンピュータがあればいい (サポートブラウザは IE6 (Windows)、FireFox 1.07+ (Windows, Mac, Linux) )

  • オンラインストレージと自動保存があるのでハードディスクの故障や停電を心配する必要はない。

  • スプレッドシートを CSV、XLS、HTML でダウンロードできる。

といったものだそうです。
すごいなぁ。

2006年6月6日火曜日

Script# がアップデート(v0.1.1.0)

Script# Update and Addition to Projects List より


以前 「Script#」 「Script# を入れてみました」 にて紹介した Script# ですが、Nikhil 氏のサイト上に Script# のプロジェクト のページを作ったそうです。また、微妙にバージョンアップして v0.1.1.0 になったそうです。(プロジェクトのページの右にある Downloads のところの Binaries からダウンロードできます)


v0.1.1.0 は不具合修正と機能追加がされているそうです。また、ダウンロードした zip の中に Script#.pdf があって、まだちゃんと読んだわけではありませんが、これには Script# の動作の仕組み、Script# の使い方、どのような C# コードがどのような JavaScript コードになるか、どんな制限があるかといったことが書かれているようです (英語)。ただし、まだ [TODO] や ??? とだけ記述されているところも結構あるようです。

Subscriber Download に VSTS Trial VPC (英語版) が登場

Visual Studio Team Suite Trial VPC available to MSDN Subscribers より


Subscriber Download に Visual Studio 2005 Team Suite と Team Foundation Server の Trial 用の Virtual PC イメージが登場したそうです。ただ、まだ英語版しかないみたいですが。


2つに分かれているのでこれらをダウンロード、解凍して、Virtual PC に突っ込めば、VSTS と Team Foundation Server をすぐに試すことができるし、評価のためのデモプロジェクトまで入っているそうです。

Windows.Forms なアプリを glass にする

How to get “glass” into your application using WPF or WinForms より


Windows.Forms なアプリを Vista の glass に対応させる方法が紹介されています。2つの blog へのリンクですが、どちらも DwmExtendFrameIntoClientArea API を使っているというのは同じですね。

WeakReference の Dictionary

Presenting WeakDictionary[TKey, TValue] より


WeakReference を格納する Dicrionary の実装例が紹介されています。紹介されているのは Key も Value も WeakReference を格納できるタイプです。もちろん、Key が使用中に GC に回収されては困るので WeakKeyReference<T> というクラスを作って HashCode だけを別に持つようにしたりしているようです。


(使うことがあるかどうかはわからんけど、なんとなく気になったのでメモ)

2006年6月2日金曜日

www.seewindowsvista.com

http://www.seewindowsvista.com/


ドメイン名のまんまです。ただ、Vista が見れるというよりも、Vista 上のいろいろなアプリケーションのデモムービー (イメージムービー) というような感じですが。「アプリケーションならば Vista じゃなくてもいいんじゃ?」 という気もしないでもないですが、WPF が主っぽいアプリが多いってことで (まぁ、WPF も Vista に限らず動くわけですが(^^; )。

2006年6月1日木曜日

Ajax な IconDB

IconDB - Ajax-enabled Icon Search より


IconDB というサイトが紹介されています。"book" とか "computer" とか適当に検索するとなかなかかっこいいアイコンがいろいろと表示されます。


というか、http://www.challenger.se/ このサイトすごいですね。左に 「にゅ~」 っと出てくるメニュー、上にタブ、背景も変えられたりと、、、それぞれの記事がパネルになってるのは wema みたいな感じですね。
あと、Challenger っていうのもすごいです。Demo のところに行って "Enter" すると動かしてみることができます。Logon 画面が出てきたら guest のまま "Logon" で OK です。動かしてみれば何なのかはすぐわかりますが、IE 上に作ったデスクトップです。ほんと、すごいな。

LINQ の screencast (Anders Hejlsberg 氏)

The Screening Room #5: LINQ


Jon Udell 氏の blog でインタビュアーが Jon Udell 氏、プレゼンターが Anders Hejlsberg 氏、 Paul Vick 氏という screencast が公開されています。(XElement で始まるコードが書かれている画像をクリックすると始まります)


50分くらいありますが、ほとんどが Anders Hejlsberg 氏が VS 上でデモってるという感じです。残念ながら、とうぜんすべて英語です (せめて transcript があったらいいのになぁ)。
最初は XLinq というか XElement のデモから始まって、コード内に XML を書く代わりの 「Paste XML as XElement」 なんていうおちゃめな機能も紹介されています。DLinqObjects という VS のテンプレート (拡張子が .dlinq) を使ってサーバエクスプローラからテーブルをドロップすると自動的に .cs が生成されるなんていうのが紹介されて、Northwind を使っての DLinq のデモが紹介されています。ここの中に QueryExpression.Lambda( ... ) を使って文字列から動的に Where に使うフィルターを生成するなんていうのがナニゲに紹介されていますが、これ、個人的にはかなり興味深いです。最後の方ではデータベースへのクエリーと XML へのクエリーを組み合わせて使うデモも行われています。

Visual Studio 2005 Team Edition for Database Professionals

Visual Studio 2005 Team Edition for Database Professionals


VSTS に新しい Edition が追加されるようです。どうも、



  • 新しい Visual Studio Database Project は、データベースのスキーマをインポートしてソースコントロール下におくことができる。また、スキーマの変更をデプロイするときには、そのプロジェクトシステムで更新用スクリプトかパッケージを作成でき、選択したデータベースへそれらをデプロイする機能も提供する。

  • データベース上のいろいろなオブジェクトのリネームを簡単にできるようにする Rename Refactoring 機能。リネームしたオブジェクトに該当するすべての参照もちゃんと処理する。(C# のリファクタリング機能みたいなものですね)

  • より使いやすくなった新しい T-SQL エディタ。VS 上での複数クエリの同時実行もサポート。

  • 2つのデータベース間のスキーマの比較とスキーマを同期するためのスクリプトの更新。

  • 2つのデータベース間のデータの比較とデータを同期するためのスクリプトの更新。

  • T-SQL やマネージドコードを使ってのデータベースのユニットテスト環境。

  • DataGenerator。どうやらデータベースのユニットテストをするにあたってテストコードが前提としているデータをデータベースにきちんとセットするといったような data generation plan を作成するといったものみたい。

といった機能が搭載されるようです。


CTP は 2006年 7月 11日に提供開始みたいです。


"Get Visual Studio Team Edition for Database Professionals for Free when you upgrade to Team Suite" とあります。どうやら Team Suite には無償で追加されるみたい。 

2006年5月30日火曜日

Windows Live Gadget SDK

Announcing Windows Live Gadget SDK より


Live.com で使えるガジェットを作るための SDK の最初の public release だそうです。とは言っても、
http://microsoftgadgets.com/livesdk/index.htm
の最初のとこには赤字で 「まだ beta の段階だからね」 と書いてあります。

Windows Live Local と Virtual Earth SDK

New Windows Live Local - with traffic data, updated developer support, and more!
アメリカだけみたいですが Windows Live Local で交通情報(渋滞情報)がわかるようになったそうです。あと、イギリスの画像が増えたとか。他にも MSN Messenger で Share できたり、お気に入りに登録できたり、印刷できたりといろいろと機能追加されたみたいです。


Windows Live Local Comes to the UK - And Much More...
こちらには 「お気に入り Top 10」 みたいな感じでいろいろ並んでます。なんか NASA World Wind に Virtual Earth の地図を表示するプラグインなんてものまであります(^^;


Windows Live Local for Outlook
Outlook 上で Windows Live Local を使うアドオンだそうです。(私は試してませんが)
地図、経路探索、所要時間測定などの Windows Live Local の機能が Outlook 上で使えるようになるのと、待ち合わせ場所をこれを使って送信するといったこともできるそうです (受信側はアドオンは必要ない、と書いてあります)。ただ、U. S. English only と書いてあるので日本語版の Outlook では動かないかもしれません。


Virtual Earth Interactive SDK
インタラクティブな SDK だそうです。
左のツリーでやりたいことを選ぶと、そのデモ、ソース、関連するリファレンスが表示されます。


それにしても、、、
衛星写真はあとでもいいから、せめて日本の地図をもうちょっとまともにして欲しいなぁ。

SQL Server 2005 累積 hotfix パッケージ

Microsoft launches cumulative package for SQL Server 2005 より


2006年 4月に Service Pack 1 が出たばかりですが、どうやらそれに入りきらなかった hotfix をまとめたものが
http://support.microsoft.com/kb/918222
から入手できるということみたいです。(まだ英語のページしかないようですが、日本語版に適応していいのかどうかはわかりません)


ちなみに、



  • 素の SQL Server 2005 は 9.00.1399.06

  • SQL Server 2005 SP1 は 9.00.2047.00

  • 上の Cumulative packege を当てた SQL Server 2005 は 9.00.2153.00

となるそうです。

2006年5月26日金曜日

Script# を入れてみました

Script#」 で取り上げた Script# ですが、試しに入れてみました。以下、セットアップ方法。



  1. Script# Prototype の下のほうにある "download" のリンクから zip を落してきて、適当なフォルダに解凍します。中に入っている readme.txt にセットアップ方法が書いてありますが、微妙に注意点とかもあるので、以下に書いときます。

  2. %SystemRoot%\Microsoft.NET\Framework\v2.0.50727 に以下のファイルをコピーします (readme.txt には v2.0.50207 とありますが、.NET Framework 2.0 の RTM は 2.0.50727 のはず)

      nStuff.ScriptSharp.targets
      nStuff.ScriptSharp.dll
      ssc.exe
      Script.ScriptFX.Core.dll
      sscorlib.dll

  3. %ProgramFiles%\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp フォルダに "Script#" フォルダを作成し、その中に ScriptSharpProjectTemplate.zip を解凍して入れます。これで、この "Script#" フォルダの中には Script#.VSTDIR ファイルと 1033 フォルダがあるはずです。日本語版の Visual Studio 2005 だと 1033 のままだと認識してくれないようなので、1041 にフォルダ名をリネームします。

  4. devenv /installvstemplates を実行します。devenv.exe は通常 %ProgramFiles%\Microsoft Visual Studio 8\Common7\IDE に入っています。この /installvstemplates の実行なんですが、画面にはなにも表示されませんがちょっと時間がかかります。タスクマネージャで devenv.exe が終了したか確認するとか、コマンドプロンプトで start /wait を使って実行するとかして、/installvstemplates が終了するまで待ってあげてください。

  5. これで VS2005 を起動して新規プロジェクトの作成をすると C# の下に Script# があるはずです。

プロジェクトを作る方法。



  1. 「新規作成」-「Web サイト」 で ASP.NET のソリューション/プロジェクトを作成。(とりあえず WebSite1 とします)

  2. 試しに default.aspx にラベル (id="Label1") を貼り付けます。

  3. ソリューションに新しいプロジェクトを追加します。このとき、Script# Class Library を選択します。(とりあえずプロジェクト名は Script とでもしときます) たぶん、Script# のプロジェクトを作るとセキュリティ警告が出ると思いますが、適当に対処してくださいw

  4. Class1.cs は削除して、Default.cs あたりを作って適当にコードを書きます。たとえば以下みたいな感じ。

        using System;
        using ScriptFX;
        using ScriptFX.UI;
        
        namespace Script
        {
            public class Default : IScriptlet
            {
                void IScriptlet.Start()
                {
                    Label lbl = new Label(Document.GetElementById("Label1"));
                    lbl.Text = "あいう";
                }
            }
        }

  5. WebSite1 の下に Bin フォルダを作って、そこに nStuff.ScriptSharp.Web.dll をコピーします。

  6. WebSite1 の 「参照の追加」 でさっき作った Script プロジェクトを参照します。

  7. WebSite1 の web.config に以下のように追加します。もしくは、aspx に <%@ Register tagPrefix="nStuff" assembly="nStuff.ScriptSharp.Web" namespace="nStuff.ScriptSharp" %> と書いても構いません (web.config に追加しておけば、aspx ごとに書き足す必要がなくなります)。

        <configuration>
            <system.web>
                <pages>
                    <controls>
                        <add tagPrefix="nStuff" assembly="nStuff.ScriptSharp.Web" namespace="nStuff.ScriptSharp" />
                    </controls>
                </pages>
            </system.web>
        <configuration>

  8. default.aspx に
        <nStuff:Scriptlet ID="Scriptlet1" runat="server" ScriptAssembly="Script" ScriptletType="Script.Default" />
    と追加します。場所はどこでもいいみたいです。
    ちなみに、ScriptAssembly は Script# のコンパイル結果が入っているアセンブリ名、ScriptletType はそのアセンブリの中の 「ネームスペース.クラス名」 です。

これで Script# を使ったページができたはずです。上記のように作った default.aspx を IE で表示してみるとちゃんとラベルが "あいう" になる、、、、ありゃ、文字化けしてる。。。


日本語を使う方法


上記の場合だと、Script プロジェクトの Default.cs が Script# のコードですが、このファイルは日本語 VS2005 ではデフォルトで Shift_JIS になっているようです。これを 「ファイル」-「保存オプションの詳細設定」 で 「Unicode (UTF-8 シグネチャ (BOM) 付き)」 にします。これで保存してビルドしなおしてやればちゃんと日本語も使えるようです。

2006年5月24日水曜日

VB9 のクロージャを使った関数

Factorial in VB 9.0 using closures. より


Function fac(ByVal x As Integer) As IEnumerable(Of Integer)
    If x = 0 Then Return {1}
    Return From dummy In {Nothing} _
        Select x * fac(x - 1)(0)
End Function


うわーん、ついていけないよう(笑)
ええと、{ ... } というのは集合というか Array なんだな。で、Return From って yeild return みたいなもの?そのあとの Select は?んー、まじでちょっとわかんないとこがあるな。そもそも今の VB ってイテレータとかそういったのはどうなってるんだっけ?

WinFX beta2 とか Office 2007 beta2 とか Vista beta2 とか

WinHEC にあわせてなのかはよくわかりませんが、いろいろな beta2 が出たようなのでとりあえず控え。


The Beta Experience
http://www.microsoft.com/betaexperience/


WinFX 関連
How to install WinFX Runtime Components(Beta 2 Build/RC0)(Release date:5/23/2006)
The Windows SDK Beta 2 is live
Go-Live License for WinFX Runtime Components V3.0 Beta 2


WPF の変更点
What's New in WPF Beta 2?


WCF の変更点
Detailed WCF API changes between FEB CTP and Vista beta 2(RC0)
WCF Breaking Changes between Feb CTP and Vista Beta2(RCO)


http://msdn.microsoft.com/windowsvista/ や http://msdn.microsoft.com/winfx/ も新しくなったという話
New Windows Vista and WinFX Sites Launched


Office 2007 beta2
Office 2007 beta2


Office 2007 beta2 用 VSTO
Now Available: Visual Studio Tools For Office "V3" - June Community Technology Preview (CTP)


Windows SharePoint Services V3 (Beta) SDK


Vista beta2
Windows Vista beta2

Script#

Script# Prototype より


うーん、この発想にびっくり(^^;
Script# とは HTML 上に JavaScript を書く代わりに C# で書けるようにするもの、ということです。上記記事では HelloWorld.cs という C# コードが紹介されています。また、記事中にデモビデオがありますが、この中でもほとんど同じようなデモコードを書いています。その C# コードが HTML 上のスクリプトとして実行される部分です。記事では ssc という Script# コンパイラでコンパイルすると解説されています。ビデオの中では Visual Studio 2005 の中で自動的にビルドしています。記事の方を見ると一目瞭然なんですが、HellowWorld.cs を ssc でコンパイルした結果は HelloWorld.js なんです。また、js ファイルではなく dll にすることもできるとありますが、これは dll の中にリソースとして js をそのまま格納しているだけです。dll だからといって IL が生成されるわけじゃありません。さらに、オプションで、人間が読みやすいような js ファイルとするかスペースなどを削り可能な限りコンパクトにした js ファイルとするかを指定できるそうです。あとは、この js ファイルを HTML 内の <script> タグで普通に読み込んでやれば OK というわけです。nstuff:Scriptlet というのも用意されていますが、これも単に <script> タグを生成してくれるサーバコントロールということみたいです。


こんなことができる種明かしは、記事の "How does it work?" に書かれているとおり 「本質的に Script# コンパイラは IL の代わりに JavaScript を生成する C# コンパイラである」 というだけなんですね(^^ C# のコードでは using ScriptFX; using ScriptFX.UI; としていますが、これらは C# 的に正しくなるようにってことと、VS2005 上でインテリセンスが効くようにっていうだけで、中身は空っぽじゃないかと思います。

2006年5月23日火曜日

Service Factory って何?

GotDotNet の CodeGallery に patterns & practices: Web Service Software Factory Community というのがあります。具体的に何なのかはよくわかんないんですが、ちょっと気になるのでメモ。


関連 blog
Service Factory: Helping you design interoperable web services

CodePlex はさすがに 2週間じゃできないみたいです(^^;

Japan.internet.com の Microsoft、自前のコミュニティ開発サイトを立ち上げ の記事が元で 「CodePlex って 2週間で作った?」 という誤解が生まれちゃってるみたいです。


takanaoさん 「CodePlex
ナオキさん 「Microsoft、自前のコミュニティ開発サイトを立ち上げ


Japan.internet.com の記事で、WiX の作者である Rob Mensching 氏の blog 「Thoughts about the CodePlex Beta」 が取り上げられていますが、これは 「ここ 2週間くらい SourceForge の具合が悪かったりしたので CodePlex に移ることにした」 ということみたいです。また、「私が知った興味深かったことのひとつは CodePlex Beta が月曜日にライブしたって記事だった」 などともありますので、氏はあくまで CodePlex の利用者ということみたいです。


Rob Mensching 氏の記事からもリンクされていますが、James Newkirk 氏 「CodePlex.com Beta」 には James Newkirk 氏は 13ヶ月以上前(2005年 4月 4日)に patterns & practices チームを離れて、開発者のためのコミュニティサイトを作るチームに参加したとあります。これが CodePlex とのことです。


というわけで、少なくとも 13ヶ月以上はかかってるようです。なお、上では 「参加した」 と表現しましたけど、we assembled a team of people ... なので 「参加した」 というよりも 「チーム立ち上げのために召集された」 ということなのかもしれません。

2006年5月22日月曜日

CodePlex

http://www.codeplex.com/


Microsoft 運営のソースコード共有サイトみたいです。バックエンドは C# / .NET Framework 2.0 / Team Foundation Server とのこと。

Phoenix Framework の紹介ビデオ

Jim Hogg: Phoenix Framework


コンパイラのバックエンド技術である Phoenix Framework の紹介ビデオです(英語)。
って、私は Phoenix ってなんなのかぜんぜんわかってません(^^;

LINQ May 2006 CTP

Microsoft Visual Studio Code Name “Orcas” Language-Integrated Query, May 2006 Community Technology Preview


今さらですが LINQ の新しい CTP です。しかし、日本語版の VS2005 にはうまく入れられないとかなんとか。。。


May LINQ CTP available now! Somasegar 氏の記事
Latest LINQ CTP available for download 変更点など

SideShow の紹介ビデオ

http://on10.net/TheShow/2890/


SideShow の紹介ビデオです(英語)。
って、SideShow って何だ?Vista と連動して、ちっちゃい省電力なデバイスで .NET Micro Framework だかなんだかが動いてる?うーん、聞き取れん orz


ちなみに http://on10.net/ は http://channel9.msdn.com/ と同じく Microsoft がやっているサイトです。

Ajax な Subversion ブラウザ

https://bssvnbrowser.bountysource.com/


Ajax な Subversion ブラウザだそうです。すごいなぁ。

アセンブリのロード時にエラーが出たときのデバッグに関するドキュメント

Good reference document for debugging assembly loading errors


アセンブリのロード時にエラーが出たときのデバッグに関するドキュメントが紹介されています。(まだ読んでませんが)

Visual Studio 2005 Web Application Projects

Visual Studio 2005 Web Application Projects


中身は見てない (というかダウンロードもしてない) んですが、VS.NET 2003 と同じような ASP.NET のプロジェクトを VS 2005 でできるようにするものってことなのかな?

Paint.NET

以前にも紹介 した Paint.NET ですが、Paint.NET crosses 2 million downloads, and other news によると今までに 200万ダウンロード以上もされたそうです。


あと Paint.NET ... on Linux?! こちらで Paint.NET を Mono で動かしたという Miguel 氏 (Mono の中の頂点の人) の記事が紹介されています。

Consolas Font Pack for Microsoft Visual Studio 2005

Consolas Font Pack for Microsoft Visual Studio 2005


上記から Consolas というフォントがダウンロードできます。
これは、テキストエディタに適した固定ピッチの ClearType フォントだそうです。


ダウンロードして setup.exe を実行して、Visual Studio 2005 を起動すれば自動的に設定が変わっています。が、なぜか私のところでは 「ツール」-「オプション」 メニューの 「環境」-「フォントおよび色」 で一度 OK ボタンを押してやらないと MS ゴシックのままでした。もちろん、Consolas フォントには日本語は含まれていないと思いますが、Visual Studio 上では日本語部分はMS ゴシックで表示されるようです。
ちなみに、元に戻すには同じく 「ツール」-「オプション」 メニューの 「環境」-「フォントおよび色」 の 「テキストエディタ」 のフォントを MS ゴシックにしてやれば OK です。


で、この Consolas フォント、、、見やすいのかなぁ。まぁ、慣れの問題もあるでしょうからしばらく使ってみようかと思います。

2006年5月2日火曜日

Microsoft と New York Times が WPF を使ったニュースリーダーを提供

New York Times 'Times Reader' built on WPF より


Times Reader という New York Times 用のスマートクライアントなアプリケーションを今後数ヶ月くらいで提供する予定ということみたいです。で、このアプリが WPF ベースであると。


Microsoft からのプレスリリースは、
http://www.microsoft.com/presspass/press/2006/apr06/04-28TimesReaderPR.mspx
こちらにありました。

2006年5月1日月曜日

今週くらい?に Atlas Control Toolkit がリフレッシュ

Atlas Control Toolkit Refresh Hopefully Shipping Next Week より


Atlas Control Toolkit がいろいろと修正や機能追加されてリリースされるようです。4/28(金) の記事で 「できれば来週半ば」 と書いてあるので今週の半ばくらいってことでしょうか?

2006年4月26日水曜日

Generic なメソッドを動的生成する

Generic dynamic method using DefineMethod
Generic なメソッドを DefineMethod を使って動的に生成する例が紹介されています。


DynamicMethod and TypeBuilder.DefineMethod
DynamicMethod と DefineMethod の比較です。DynamicMethod は型とかアセンブリとかが必要ないというのが一番の違いみたいです。 

2006年4月24日月曜日

JavaScript でアニメーションエフェクト

[JavaScript] リアルタイム描画のアニメーションエフェクト処理クラス


Ajax とか見てると 「JavaScript でここまでやるか / やれるのか」 と思うことが多いんですが、このゆうすけさんのも凄いです。。。


<img> タグを cloneNode して clip で表示する範囲を調整、、、なるほどなぁ。おぉ、clip って <img> だけじゃなくて、なんにでも働くんだ。知らなかった。

2006年4月21日金曜日

Mac ラボツアー

A Tour of Microsoft's Mac Lab より


どうもこれを書かれた David Weiss さんは Microsoft の MacBU (Business Unit) の人みたいです。で、「プレス向けイベントや私たちの MVP といった特別な訪問者があるときに、しばしば Mac ラボツアーをやって私たちがやっていることを説明する」 なんてあります。そして、上記の記事は 「バーチャル Mac ラボツアー」 だそうです。


記事は英語ですが、写真を見るだけでもおもしろいです。私は Mac はよくわかんないんですが、G3 だとか G4 だとかがずらり。中でも Mac Mini が 150台並んでいる姿はすごいです。壁新聞 (Published!) の写真には "Intel Inside" の旗がついてる Intel 人形がいますね。まっ、今は Mac も Intel Inside ですからねぇ。

2006年4月18日火曜日

DLINQ は魔法でできています

波村さんの blog: DLINQ は Magic か?


LINQ は 「配列とかからのクエリー」 と 「データベースからのクエリー」 の両方をおんなじ構文で書けますが、どんな魔法を使ってるんだ?という問いへの回答です。詳しくは上記の波村さんの blog を見ていただくとして、要するに 「魔法なんかじゃない。単にコンパイラが構文を解釈した結果、違うものが呼び出されるだけ」 てな感じです。


まぁ、これは特に目新しい話じゃないです。というか、「魔法」 を導入する替わりに extension method とか lambda 式とかのもろもろが導入されたわけですね。
んが、なんと、、、


同じく波村さんの blog: DLINQ Is Magic


4/17 に DLINQ は魔法になったそうです(^^;
(魔法になったのは LINQ そのものではなく、あくまでも DLINQ の部分みたいですね)

Re: Nullableを含めた3項演算子

中さんのところの Nullableを含めた3項演算子 に反応。


なるほど。3項演算子は 2項目と 3項目の型だけで 3項演算子の評価結果の型を判断してて、その評価結果がどう使われてるかまでは考慮してないんでしょうね。まぁ、これはこれで仕方ないような気はします。


けど、if 文にまでしなくても int? であることを教えてあげればコンパイルできると思うんですが、それではダメですか?
  int? ユーザID = row == null ? (int?)null : row.ユーザID;
もしくは
  int? ユーザID = row == null ? null : (int?)row.ユーザID;
てな感じで。

2006年4月17日月曜日

VB2005 のアプリケーションフレームワークを C# で使う

USERS GROUP の C# ML でしったんですが、VB2005 の Windows.Forms なプロジェクトにはアプリケーションフレームワークなんていう機能があるんですね。


VB2005 のプロジェクトのプロパティに 「アプリケーションフレームワークを有効にする」 なんていうチェックボックスがあって、「シャットダウンモード」 を 「最後のフォームが閉じるとき」 にすると、開いているフォームがなくなったときに自動的にアプリケーションが終了するようになります。C# で同じことをしようとすると自分でフォームの数なんかを管理したりするコードを書かなくちゃいけません (よね?プロジェクトのプロパティを見ても C# にはアプリケーションフレームワークに該当するような設定はないみたいなんで)。
けど、VB がそんなに特殊なことをやってるとは思えません。きっと、どっかに (きっと Microsoft.VisualBasic あたり) アプリケーションフレームワークの機能を実現するクラスがあるんじゃないかと思います。。。って、ありました。


というわけで、VB がやっているのと同じことを C# でやってみました。



  1. Microsoft.VisualBasic.dll を参照設定に追加する。

  2. Program.cs の内容を以下のようにする。(namespace と OnCreateMainForm() メソッドの内容はプロジェクトにあわせて修正してください。OnCreateMainForm() メソッドは名前のとおり、起動時に最初に表示するフォームを設定してあげるメソッドです)

using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace CSWindowsApplication
{
internal class Program : Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.SetCompatibleTextRenderingDefault(false);
Program app = new Program();
app.Run(args);
}
public Program() : base(Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
{
this.IsSingleInstance = false;
this.EnableVisualStyles = true;
this.SaveMySettingsOnExit = false;
this.ShutdownStyle = Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterAllFormsClose;
}
protected override void OnCreateMainForm()
{
this.MainForm = new CSWindowsApplication.Form1();
}
}
}


これだけです。
上記のコードの意味は見てもらえばだいたいわかるんじゃないかと思います。また、上記には書いてませんが OnStartup()、OnStartupNextInstance()、OnShutdown() イベントなどを override することもできます。また、スプラッシュウインドウを表示するときは、適当なフォーム、たとえば、frmSplash を作成しておいて、


        protected override void OnCreateSplashScreen()
{
this.SplashScreen = new frmSplash();
}


としてやれば OK です。frmSplash は ControlBox、MaximizeBox、MinimizeBox、ShowIcon、ShowInTaskbar を全部 False にして StartPosition を CenterScreen に、Text をなしにしてやるとそれらしくなるんじゃないかと思います。

2006年4月14日金曜日

Google Calendar BETA

Google Calendar


Google Calendar BETA がリリースされたみたいです。ちょっとさわってみただけですが、かなり Ajax な感じ。

"Atlas" Control Toolkit

昨日、Atlas の April CTP がリリースされたと書きましたが (「"Atlas" April CTP Release」) どうも "Atlas" Control Toolkit がリリースされたことが重要みたいです。


この Atlas Control Toolkit というのは、Atlas コントロール (Ajax なコントロール) のサンプルと開発を簡単にするためのコンポーネントの集合だそうです。 実際にこの Toolkit に含まれている 9つのコントロールが "Atlas" Control Toolkit で紹介されています (デモページで動かしてみることもできます)。


Atlas Control Toolkit (And Why It is Really Cool)
こちらによると、最終的には 50~100 の便利でハイクオリティな Atlas コントロールを Toolkit に含める予定とのことです。あと、コントロールに関する部分はソースコントロールのリポジトリを設置して Microsoft の内外を問わずいっしょに開発できるようにする予定とのことです。

2006年4月11日火曜日

Yahoo! Instant Search BETA

Yahoo! Instant Search BETA
http://instant.search.yahoo.com/


検索文字列を入れるところに "boston weather" と入れるとエンターキーなどを押さなくてもボストンの天気が表示されます。また、"22 5th ave new york ny" と入れるとニューヨークの地図が表示されますし、"msft" と入れると Microsoft 社の株価が表示されたりします。なかなかおもしろいです。


 

XPS Viewer

今までは WinFX CTP が入ってれば XPS も表示できるって感じでした。というか IE 上で XAML を表示されると XPSViewer.exe が動いてるんですけどね。


それが、WinFX が入っていない Windows Server 2003、XP、2000(SP4) で XPS を表示できるビューワーのベータ版がリリースされたようです。
http://www.microsoft.com/whdc/xps/viewxps.mspx
こちらの 「Opening XPS Documents with XML Paper Specification Essentials Pack (Beta 1)」 です。

WPF 入門ビデオと Expression 紹介ビデオ

Mix06 Thailand Demo
WPF の入門ビデオです。XAMLPad を使って簡単な XAML を書くところから始まって Visual Studio 2005 と Expression Interactive Designer を使うっていうところまで 20分ほどで紹介されいます。英語ですが、ほとんど XAML をガシガシ書いていってるだけなので見てるだけでもだいたいわかりました。


Microsoft Expression Tours & Demos
こちらも英語ですが、Expression の Graphic Designer、Interactive Designer、Web Designer のそれぞれの紹介ビデオとトレーニングビデオがあります。

WinFX と Vista は 2006年 11月リリース予定

WinFX and Windows Vista Timeline - what you need to know... より


最近 Vista の出荷は 2007年 1月以降になる、というニュースがありましたが、それに関して上記の記事では、


「ビジネスカスタマは Vista を?2006年 11月に入手できるだろう。Vista には WinFX が含まれるだろう。同時に WinFX はすべてのカスタマがダウンロードできるようになるだろう (Windows XP と Windows Server 2003 用)。最終の WinFX はこのときまで入手できないと思うが、WinFX と Vista の CTP のリリースは続ける。
WCF と WF は WinFX Jan CTP で go-live ライセンスになった。WinFX 全体の go-live ライセンスは今年の後半?-8月くらいとか- を予定している」


なんてことが書かれています。たぶん、ボリュームライセンスとか MSDN Subscriber Download とかでは 2006年 11月から入手できるようになって、パッケージとして小売されるのが 2007年になるってことなんでしょうね。Visual Studio 2005 日本語版も 2005年 12月 15日から MSDN Subscriber Download などで入手できるようになって、パッケージが小売されるようになったのは 2006年の 2月になってからでしたから、これと同じような感じですね。けど、Vista が入手できる人とできない人がいるっていうのは混乱を招きそうな気もしますけど大丈夫かなぁ。Visual Studio と違って、ものすごくたくさんの 「ふつーの人」 が対象ですからねぇ。

2006年4月7日金曜日

SQL Server Everywhere Edition

SQL Server 2005 Update from Paul Flessner


Microsoft の Senior Vice President of the Server Applications である Paul Flessner 氏からの 2006/4/6 付けのリリースです。
真ん中よりちょっとしたの 「Dynamic Applications.」 とタイトルされているところなんですが 「今日、新しく SQL Server ファミリーに追加される SQL Server Everywhere Edition を発表したい」 なんてあります。どうやらこの Edition は 「すべてのタイプのクライアントのストレージとして使えるライトウエイトでコンパクトでしかしリッチな他の SQL Server Editions のサブセット」 ということみたいです。もちろん、他の Edition の SQL Server とシームレスに同期を取れるし、プログラミングモデルも共通とのことです。
SQL Server Everywhere Edition の最初の CTP は今年の夏、正式出荷は今年の終わり(2006年 12月) の前にしたいってことのようです。


他の情報を探してみると、、、


The little database that could. Deploying SQL Mobile as a local / single user database across Microsoft Mobile devices
こちらの冒頭に UPDATE が書かれてますが、SQL Mobile というものが SQL Server Everywhere Edition に進化したってことなんでしょうか?SQL Server 2005 Mobile Edition というのは (私は内容はまったくしらないのですが) Visual Studio 2005 といっしょにリリースされているみたいですし (C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v3.0 をみたらちゃんとそれらしきものが入ってました)。


SQL Mobile is now called SQL Everywhere and its true, SQL Everywhere runs everywhere
こちらによると、やっぱりどうも SQL Mobile が SQL Everywhere になった (なる) ということみたいです。SQL Mobile は Windows モバイルデバイスとタブレットだけだったが、Everywehere はデスクトップもサポートするようになる、ということみたいです。で、どうやら単にファイルをコピーするだけでモバイルデバイス、デスクトップを問わずデータベースの移動ができるようになるみたいです。また、SQL Server 2005 がサービスなのに対して SQL Everywhere は DLL ベースになるそうです。データベースが Windows サービスベースであるために発生するインストールやメンテナンスのハードルをなくす、なんて感じで書いてあるみたいなのでひょっとして DLL をコピーするだけでセットアップ終わり、という感じになるんでしょうか?

2006年4月5日水曜日

ALE - Ajax Linking and Embedding

A Pint of ALE - Ajax Linking and Embedding より


たとえば Word の文書に Excel のスプレッドシートを貼り付ける。普段は表が見えているだけ。だけど、その表をダブルクリックすると内容が編集できる (Word の中で Excel が動いている)。こんなのを Windows では Object Linking and Embedding 略して OLE という技術で実現しています。OLE の詳細はばっさり略 (というか、すべてを解説できる人なんているんだろうか)。


同じようにある Ajax な文書に他の Ajax なサイトで作ったスプレッドシートを貼り付ける。スプレッドシートといっても普段は単なる HTML。けど、それを編集モードにすると Ajax なスプレッドシートが動き出す。こんなのを実現する Ajax Linking and Embedding 略して ALE ってのが提案されています。


いやぁ、おもしろいなぁ。確かにできない話じゃないですね。よくは読んでませんが、上記の提案では編集自体は IFrame の中で動くようにして、Ajax 側では if (window.ALE == true) ってすれば ALE による編集モードかどうか判断可能。また、ALE 対応 Ajax コンポーネントは create、serialize、deserialize、getHTML なんていうようなメソッドを window に持たせるようにする。ALE フレームワークはこれらのメソッドを使用して表示モードや編集モードを行き来する。といった感じみたいです。


しかし、、、なんというか、、、Ajax ってすごいなぁ。。。。


すごいって言えば、上記記事の "Zimbra Preview Hosted Demo" のところから Zimbra のプレビューが見れますが、これもすごいなぁ。(このプレビューの左側にある notebook アイコンで ALE のプレビューが見れると書いてあると思うんですが、スクリプトエラーになっちゃいます。IE だとダメなのかな?)

2006年3月31日金曜日

Visual Studio Information for Borland Delphi Developers

Visual Studio Information for Borland Delphi Developers


へぇ、msdn.microsoft.com の中に Delphi ユーザー向けのページなんてあるんですね。
内容は Q&A 形式ですが、「Delphi で作ったアプリがいっぱいあるんだけど今後もちゃんと動く?」 「大丈夫だよ」 とか 「Delphi に変わる Microsoft 製品は?」 「Visual Studio」 とかって感じで、とうぜん Visual Studio の宣伝です。
けど、おもしろいと思ったのが最後の質問



  1. アンダース ヘルスバーグ(Anders Hejlsberg) は Borland Delphi の開発に関わってたけど、最近何年かは Microsoft で働いてるよね。彼は何をしてきたの?

    Anders Hejlsberg は .NET Framework と C# として知られている言語の中心的なアーキテクトの一人だよ。これらのプロジェクトについては、
    ■Behind the CodeRoom: Life and Times of Anders Hejlsberg:
        http://channel9.msdn.com/Showpost.aspx?postid=159952
    ■The C# Design Process: A Conversation with Anders Hejlsberg:
        http://msdn.microsoft.com/vcsharp/homepageheadlines/hejlsberg/default.aspx
    なんかで見れる。
    ごく最近は、アンダースは Language Integrated Query (LINQ) として知られている .NET Framework の改革をやっているよ。このテクノロジーに関する議論はこちら: http://channel9.msdn.com/ShowPost.aspx?PostID=114680

Microsoft Windows 1.03

Microsoft Windows 1.03 and other tools, 1985 より


Windows 1.03 のフロッピー、インストール、起動、実行なんかのスクリーンショットが紹介されています。へぇ、初めて見ました。
ちなみに、この Windows 1.03 は
http://www.digibarn.com/collections/index.html
こちらのコレクションのうちのひとつです。すごいなぁ。

2006年3月30日木曜日

kiko.com

http://www.kiko.com/


Web ベースのカレンダーサイトです。ドラッグ&ドロップできたりとか 「今風」 な操作ができるようになっています。ちなみに、About によると Linux 上の Ruby+PostgreSQL とのことです。あと、DojoPrototype という Ajax な JavaScript Toolkit を使ってるそうです。(Dojo っていうのは聞いたことがあるような気がするけどこの辺はよく知らない)

WPF/E の書き方

WPF/E Code Walkthrough より


「まず最初に XAMLPad を使って簡単な XAML を書いてみよう」 と


<Canvas xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
 <Rectangle x:Name="myRect" Fill="orange" Width="100" Height="100" Canvas.Top="10" Canvas.Left="10"/>
</Canvas>


という XAML が紹介されています。


そして次に 「WPF/E のブラウザホストは Netscape 形式のプラグインと ActiveX コントロールがある。プラグインの方は XAML をファイル、文字列、エレメントの innerHTML から読み込める。この innerHTML からの読み込みを使ってみると。。。」 と HTML に WPF/E を埋め込んだ例が紹介されています。
へぇ、<script type="text/xaml" id="WpfeControllXaml"> として XAML を書いておいて、プラグインには SourceElement="WpfeControllXaml" なんてしてやれば、この <script> エレメントの innerHTML を XAML として読み込んでくれるんですね。<script> にしてるのは XAML の部分が HTML と認識されないようにするためでしょうね。HTML と認識されてもかまわないなら <div> でもなんでもかまわないんだと思います。


次は 「FireFox、Netscape、Safari ではなく IE を対象とするなら」 と <object> タグを使った例が紹介されています。


最後に、HTML 内のテキストボックスと JavaScript を使って、WPF/E プラグインの中の四角形の属性を操作する例が紹介されています。テクストボックスに red と入れておいてボタンをクリックすると Rectangle の Fill が orange から red に変わって赤くなるんですね。


うーん、これ、おもしろいなぁ。この方法だと 「そういう文字列を埋め込んだ HTML」 を作ればいいだけだから、Web サーバの環境はなんでもいいことになりますしね。

WPF と WPF/E

WPF、WPF/E の情報がいろいろとあったのでまとめて


Microsoft goes cross-platform with WPF/Everywhere
Tim Anderson 氏が Forest Key 氏 (Microsoft の Director of Developer Tools Product Management) と話したことをまとめた記事です。WPF と WPF/E の概論といった感じです。何箇所かで "great article" といった感じで紹介されてました。


XAML and IL
上の Tim Anderson 氏の記事のコメントが発端みたいですが MSDN Forum に 「XAML と IL の関係がはっきりしない」 と質問して、それに対する回答です。
XAML の持ち方としては、



  1. アセンブリにコンパイル
    .csproj/.vbproj ファイルに <Page Include="Page1.xaml" /> と含めるとアセンブリにコンパイルされて含まれる (.baml と関連する .g.cs/.g.vb)

  2. アセンブリにインクルード
    .csproj/.vbproj ファイルに <Resource Include="Page1.xaml" /> と含めるとアセンブリにインクルードされる (XAML はテキストファイルのまま)

  3. アプリと分離
    .csproj/.vbproj ファイルに <Content Include="Page1.xaml" /> と含めると exe とは分離される (ClickOnce 風。.exe.manifest にリストされる)

  4. その他
    .csproj/.vbproj に含めずにサーバ上やファイルシステム上に置く

といった種類があるみたいです。そして、WPF は A のパターンが基本、XPS はテキスト形式のままの XAML を持つ (XPS の中に IL を持つことはサポートしない。XPS はいろいろなデバイスやプリンタで使われるので扱いやすいようにテキスト形式のままにする)、WPF/E は XML ファイルのままの予定 (zip にすればサイズは小さくできる)、という感じみたいです。


XAML Language and XAML Formats
XAML 言語の種類を整理してくれてます (XAML の "L" は Language の "L" じゃないのかな?であれば、XAML Language っておかしいような気がするけど)。



  1. XAML Language - コア言語。XamlReader が XML 内のエレメント、アトリビュート、内容をオブジェクトのツリーとしてどう取り扱うかを定義する。XAML Language の仕様ままだ公開してない。Chuck の XAML の記事 がいいスタートになる。

  2. WPF XAML - WPF の内容 (ベクタグラフィックス、コントロール、3D、ドキュメントなど) を記述するエレメントのセット。WPF XAML のリファレンスは Windows SDK にある。

  3. XPS XAML - XPS のための WPF XAML のサブセット。XPF は XML Paper Specification のことで、独立したオープンな仕様である。この仕様は XPS ドキュメントファイルフォーマット (ページを持つ電子文書の XML ベースの表現) のアーキテクチャを記述する。仕様はこちら オーバービュー 仕様書

  4. WPF/E XAML - クロスプラットホームのための WPF XAML のサブセット。たとえば、現在の予定では 3D はなく、いくつかのコントロールがない。

  5. WF XAML - Windows Workflow のアクティビティなどの内容を記述する要素のシリーズ。More Info.

3 Coding Styles for Avalon Applications
WPF には 3種類の作り方があるそうです。



  1. 全部コードで書く。

  2. コード + XAML (実行時に XamlReader で読み込む)

  3. コード + コンパイルされた XAML (Microsoft の開発ツールはこのスタイルを推奨する)

リンク先にはサンプルコード + XAML も載ってます (1年ほど前の記事なので Avalon になってますが、後半に Feb 2006 CTP 用に修正したサンプルも載ってます)。


Dynamically load a Xaml file from a C++ app
C++/CLI で WPF してます。XamlReader を使ってるのはまだ C++/CLI 用の WPF 開発環境がないからでしょうね。


Short Video showing basic XAML and Databinding
XAML でのデータバインディングの紹介ビデオが紹介されています。

2006年3月24日金曜日

Paint.NET 2.6

Paint.NET Language Pack (日本語版)」 で紹介したときは .NET Framework 2.0 用の Paint.NET 2.6 はまだ RC1 でしたが先月くらいに正式版になっています。日本語 Language Pack はまだ 2.5 用のものしかありませんが、特に問題はないみたいです (そんなに使い込んでるわけではありませんが)。


Paint.NET plugins! Effects and a JPEG 2000 handler
Paint.NET 2.6 のプラグインが紹介されています。プラグインをダウンロードしたら C:\Program Files\Paint.NET\Effects に DLL をコピーするだけです。これで Paint.NET を起動すると 「エフェクト」 メニューの内容が増えているはずです。
で、CodeLab プラグインというおもしろいプラグインがありました。このプラグインを入れて 「エフェクト」-「Code Lab」 メニューを選択するとダイアログが開きます。このダイアログに C# でコードを記述するとそれがリアルタイムに画像に適用されます。ソースをロードしたりセーブしたりもできますし、「Make DLL」 ボタンを押すと DLL を作成することもできます。ZIP ファイルに入っているサンプルコードを見ればコードの書き方はだいたいわかると思います。

2006年3月23日木曜日

XNA Framework - Xbox 360 で .NET Framework と C# が動く

CLR Everywhere より


XNA Studio ってのはだいぶ前に聞いたことがあって、ゲーム開発を管理するための VS2005 (VSTS と言ったほうがいいのかな?) の拡張のことらしい、という程度のことだけしかしりませんでした。
なので、上記の記事に 「今週の Game Developers Conference でのビッグニュースは XNA Framework だ」 みたいなことが書いてあってもよく意味がわかりませんでした (XNA Studio と XNA Framework をごっちゃにしてました)。よくみたら XNA Studio と XNA Framework は別物なんですね。「XNA Framework は、ゲームデベロッパが高い生産性を持つ C# 言語を使って Windows と Xbox 360 で動くクロスプラットホームなゲームをより簡単に作ることを手助けする .NET Framework のカスタム実装と新しい game-development-specific ライブラリを含む」 とかなんとか書いてあります。へぇ、Xbox 360 のゲームも C# で書くようになりますか。


ところで、上記の記事にも 「XNA Framework は WPF をサポートするのかな?」 なんて書いてありますね。WPF/E は動くようにするような気もしますが、フルの WPF となるとどうなのかな。

Office Developer's Conference のキーノートスピーチ

MSDN Webcast: Office System Developers Conference Keynote with Bill Gates and Kurt DelBene


こちらで 3/21 に行われた Microsoft Office Developer's Conference のキーノートスピーチのビデオが見れます。もちろん、すべて英語で 2時間くらいあるみたいです。

VSTO March 2006 CTP

CTP for Visual Studio Tools for Office より


Visual Studio Tools for Office の CTP がリリースされたそうです。
って、VSTO って VS2005 といっしょにリリースされていたはずでは?と思ったんですが、どうやら Office 2007 beta1 (コード名 Office 12) に対応した VSTO の CTP とのことです。


ダウンロードページ
http://www.microsoft.com/downloads/details.aspx?FamilyID=2e85132b-7370-4137-a19a-15752ea83952&displaylang=en
によると、この CTP を入れるには今の VSTO もしくは VSTS が必要みたいです。また、WinFX Feb 2006 CTP も必要とあります。ん?これはこの VSTO CTP が WinFX を使ってるんでしょうか?それとも Office 2007 が WinFX を使ってる?

OpenXmlDeveloper.org

Microsoft Office Developer's Conference のビル・ゲイツ氏のキーノートスピーチで OpenXmlDeveloper.org がアナウンスされたそうです。


Learn more about OpenXML によると Office Open XML Formats (ECMA で標準化中) に関する情報提供や質問の場となるようです。もちろん、この OpenXmlDeveloper.org は Microsoft が運営しているんでしょうが、フォーラムを見ると Java や Linux といったグループもちゃんと用意されていますね (まだ投稿はないみたいですが(^^; )。


Office Open XML Formats ってのは、もちろん次期 Office がネイティブフォーマットにするという XML ベースの docx とか xlsx とかってやつのフォーマットのことです。docx とかは実際には ZIP で、この中に XML ファイルとか画像ファイルとか必要なものが一通り入ってるわけですが、ZIP の中にどんな風に収めるかというのは Open Packaging Conventions という仕様としてまとめられています。


# それにしても Office Open XML Formats の ECMA の最初のドラフトが 2000ページ近くあるっていうのはすごいな。

2006年3月22日水曜日

WPF/E は C#、VB をサポートする?

WPF/E - Windows Presentation Foundation Everywhere at MIX06 より


WPF/E っていうのは WPF Everywhere のことだそうです。WPF (Windows Presentation Foundation) は、表示の定義は XAML ですがコード部分は C# なり VB なりで記述しますから .NET Framework の存在が前提になっています。これの表示部分だけを抽出したのが WPF/E です。機能を絞り込んでコンパクトにした代わりにいろいろな OS、いろいろなブラウザ用の WPF/E エンジン (プラグイン) が提供される予定になっているそうです。で、WPF/E ではイベントなどのコードの記述は JavaScript を使用すると聞いてました。


で、上記の記事です。箇条書き部分をざっと訳してみます。。。



  1. WPF/E エンジンは、組み込まれた IL スクリプトエンジンを持つ。これは、IL (C# や VB) コードをどこでも実行できるってことをあなたに与える。とうぜん、クラスライブラリは制限されているが。
  2. WPF/E エンジンには、あなたがどこでもビデオを再生できるように、 Media Player チームによる media stack built が付属するだろう。これは、マシンやブラウザにプレイヤーがインストールされているかどうかに関わらず、ビデオを再生できるようになるということを意味する。
  3. Microsoft は、IE、Firefox、Safari、Mozilla を Windows、Apple、(Linux、Solaris はサードパーティによって) サポートするだろう。
  4. Just kidding :-)

。。。って、えーと、この 4番の "Just kidding" ってどういう意味でしょう?普通に考えると "冗談だよ" って意味なように思うんですが。。。


(3/22 16:20 修正・追記)
上記の 「4. Just kidding :-)」 の意味がよくわかりませんが、1~3 の内容は別に冗談というわけではないようです。
http://content.mix06.com/content/sessions.aspx
↑に MIX06 のセッション一覧があります。これの 「NGW036 - A First Look at Windows Presentation Foundation Everywhere (WPF/E): a Cross-Platform subset of WPF」 の PPT 資料: NGW036_Stegman.ppt を見ると 「WPF/E は x-platform .NET runtime をホストする。 C#、VB.NET コードは IL にコンパイルされる。IL はセキュアで管理された環境で実行される」 などといった内容が書かれています。また、外部パッケージ (拡張子 .wpfe) に XAML と IL をまとめておくようなこともできるようです。

WPF で WndProc をフックする方法

Subclassing Window's WndProc より


WPF で WndProc をフックする方法が紹介されています。
こういうのが紹介されるっていうことは、やっぱり必要になっちゃう場合もあるってことなんでしょうねぇ。

2006年3月17日金曜日

WWF beta 2.2

Windows Workflow Foundation Beta 2.2 Released Today より


Windows Workflow Foundation の Beta 2.2 がリリースされたそうです。

The Microsoft "Made In Express" Contest

http://www.madeinexpresscontest.com/


The Microsoft "Made In Express" Contest というものが始まったそうです。日本語で言うと 「 "Express で作ろう" コンテスト」 といったところでしょうか。Visual Studio 2005 Express and/or SQL Server 2005 Express を使って作ったソフトのコンテストですが、単にソフトの出来栄えをきそうだけじゃないようです。ルールによると、



  • まずは 3/13~4/30 のアイデアフェーズに 「自分がファイナリストになったら何を作るか」 「なぜ自分がファイナリストに選ばれるべきなのか」 といった申し込み and 自己アピールを提出するようです。

  • そして、5/1~5/14 にファイナリストの選出が行われます。

  • みごとファイナリストに選ばれたら 5/15~8/6 のプロジェクトフェーズに実際にソフトを作ります。このとき、その進捗具合を Made In Express コンテストのウエブサイトに用意される Made In Express blog で公開しながら進めます。もちろん blog の内容も審査対象となるようです。

  • そして、9/1 までに審査員による勝者が決定され、また、ウエブ上での投票によって Community Choice Winners が選ばれます。

という 「作る過程をさらけだすコンテスト」 となるようです。
"worldwide contest" と書いているところもありましたから日本からも参加できると思いますが、きっと、申し込みや blog の記事なんかは英語でやらないといけないんでしょうね。