ページ

2005年8月25日木曜日

Converting a managed PDB into a XML file

Converting a managed PDB into a XML file. より


C# とか VB.NET のコードをデバッグビルドするとデバッグ用の情報が PDB ファイルに格納されます (C++ とか unmanaged なものでも PDB ファイル自体は同じだと思うけど)。で、その PDB を読み込んで XML に変換するツールが紹介されています。このツール自体は C# で書いてあります(ソースが載っている)。
で、この XML からローカル変数一覧を作ったりする XPath なんかも紹介されています。なるほど、こういった資料なんかが作れるようになるわけか。

Nullable Boxing その3

Nullable Boxing」 「Nullable Boxing その2」 と続いた nullable のデザインチェンジについてのその3。(別に続き物にするつもりはなかったんですが)


The CLR Nullable DCR works!!!!!
デザインチェンジによってどこがどう変わったかサンプルコードによって示してくれています。
ここを見る限り、今までに私が書いたやつで動きとしては正解みたいですね。

2005年8月24日水曜日

Windows SDK のドキュメントが公開

2ch の某スレの 名無しさん♯ さんの書き込みより


Windows SDK のドキュメントが公開されたそうです。
http://windowssdk.msdn.microsoft.com/library/


って、正直 「Windows SDK って何?」 という私なんですが、Target Platforms によると「Windows SDK beta1 は Windows Vista beta1 がターゲット」 とのことです。ほぉ~。


で、


> とりあえずここにリンク。
> ttp://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/SDKintro/html/aea8d91a-0889-4e48-ba45-91433a191e48.asp
> なぜかスクロールバーが出てこないけど、上下にスクロール可能。
(以上、名無しさん♯ さんの書き込みより引用)


この書き込みがないとスクロールできることに気づかなかった予感(^^;
上からちょこちょこと眺めていくと、、、うーん、新しく追加された Transacational NTFS も unmanaged な API だけみたいな感じ。Shell とか見てみても managed な解説はほとんど見つからないんですが、、、
おっ、一番下に WinFX がちゃんとあるぞ。どれどれ。。。WinFX Software Developer Kit によると 「このリリースには .NET Framework 2.0 とコードネーム Avalon とコードネーム Indigo が含まれている」 やっ、やっぱり WinFX っていうのは 2.0+Avalon+Indigo だけですか?

F# 1.1

A Taste of What's New in F# 1.1 より


F# 1.1 の最初の technology preview が数日中に出るみたいです。そして、その 1.1 で新しくなった点が紹介されています。。。みたいです。正直言って F# や ML ってぜんぜんわかんないので、見てもさっぱりわかりません(^^; 時間があったら勉強してみたいと思ってるんですが。


ちなみに、F# の本拠地は http://research.microsoft.com/projects/ilx/fsharp.aspx
今のバージョンは 1.0.8.6 みたいです。

GotDotNet CodeGallery

New on GotDotNet: CodeGallery より


GotDotNet に CodeGallery っていうのが増えたみたいです。「Workspaces はコードの開発やチェックインなんかに加わるのが主目的。CodeGallery はコードについてはアップロードとダウンロードくらいに制限して、そのかわりにアップロードしてあるコードについてのメンバーからのフィードバックをシェアしたりするのが目的」 という感じみたいです。けど、正直言って CodeGallery と Workspaces ってほとんどおんなじような気がする。。。

CodeKeep.net

Interesting idea... より


CodeKeep という新しいコミュニティが midwest のコミュニティメンバーたちによって始められたそうです。GotDotNet や SourceForge はプロジェクト指向になりがちだけど、CodeKeep はコードの断片(スニペット)を置いておいたり公開したりできる場所、ということなようです。

Team Foundation Server は来年 (追記)

すぐ下に書いた 「Team Foundation Server は来年」 にちょっと追記(というか訂正というか)。


開発部門の副社長である Somasegar 氏の blog にVisual Studio 2005 のリリースについて書かれてました。


Visual Studio 2005 update


どうやら 9月に RC1 (Release Candidate 1) が出て、そのとき同時に Team Foundation Server beta3 (以下 TFS と略) が出て、その時点で TFS の Go Live ライセンスが提供されるということみたいです。また、リアル・ワールドで TFS を使って MSDN Product Feedback Center でフィードバックをちょうだい、といったようなことも書かれてます。


 

2005年8月22日月曜日

Team Foundation Server は来年

eWeek: Microsoft Readies Release Candidate, RTM of Visual Studio 2005 より


「RTM を 11/7 にローンチする」 と書いてあります。まぁ、既報のとおりですね。で、続いて 「その RTM には Team Foundation Server の beta 3 も含まれる予定だ。Team Foundation Server の出荷は 2006 年の第1四半期のつもりだ」 なんてあります。うーん、そうきたかぁって感じ(笑)。まぁ、個人的には Team Foundation Server をすぐに導入する予定はないし、別に構わないと言えば構わないんですが。それに 「Team Foundation Server beta3 では Go Live ライセンスも提供される」 とありますから、まったく使えないわけじゃなくて、beta 3 でよければ導入しようと思えばできるみたいですし。
記事の中ほどには PDC のあたりに Release Candidate を出す予定といったことが書いてあります 。ということは 9月の後半かぁ。August CTP を入れるべきかどうか、やっぱり微妙だなぁ(笑

ASP.NET 2.0 の beta2→RTM の変更点

Changes to ASP.NET 2.0 from Beta2-->RTM より


ASP.NET 2.0 の beta2→RTM の変更点の情報が公開されているそうです(英語)。
Major Changes for Visual Web Developer 2005 and ASP.NET 2.0 from Whidbey Beta 2 to RTM

Visual Studio 2005 Express August CTP

Visual Studio 2005 Express August CTP 英語版が公開されたようです。
http://lab.msdn.microsoft.com/vs2005/get/default.aspx#express


# 日本語版はでるのか?Express 以外の Edition が MSDN Subscriber Download でダウンロードできるようになるのか?などはよくわかりません。


で、例によって以前の beta2 や CTP などをきれいさっぱりアンインストールしてから入れるように、とのことです。
Visual Studio 2005 Express August CTP are available こちらの記事では文字を真っ赤に反転させて強調してます。
アンインストールの仕方については、http://lab.msdn.microsoft.com/vs2005/get/default.aspx このページの最初のところにこれまた赤字でリンクが書いてあります。


で、この August CTP ですが、"Internal RC0" Express SKU's Available! こちらなんかでは Internal RC0 なんていう表現もされてます。おっ、なんか 「MSDN subscribers にリリースする真っ最中」 みたいなことも書いてある? ということは、やっぱり Express 以外の Edition も公開されるのかな?
(私自身は August CTP を入れるかどうかは考え中。nullable のデザインチェンジの件もあるし、入れてみたいとは思ってるんですが。。。)

WHAT IS VIRTUAL EARTH? その2 - 開発者向け情報

ついさっき書いた 「WHAT IS VIRTUAL EARTH?」 についてです。


あのビデオを知ったのは 「More MSN, this time the Virtual Earth video」 で紹介されていたからです。で、リンク先がビデオのページだったので、てっきりあのビデオのタイトルが "WHAT IS VIRTUAL EARTH" なのかと思ってました。けど、あらためてみてみたら http://www.virtualearthinfo.com/ このサイト全体がこういうタイトルみたいですね。


"Links & Features" のところの "This is how Microsoft created Virtual Earth" があのビデオのページへのリンクですね。


で、その下に "Developers should go here to find out how they can create applications that use Virtual Earth" (デベロッパは Virtual Earth を使ったアプリケーションを作る方法を知るためにここに行くべき) なんていうリンクがあるのに気づきました。リンク先は Via Virtual Earth というサイトですが、Virtual Earth の API などが公開されているようです。

WHAT IS VIRTUAL EARTH?

MSN Virtual Earth がビデオで紹介されています。。。のかなぁ?
http://www.virtualearthinfo.com/video.asp


正直、ほとんど聞き取れませんが(泣)、「Virtual Earth を始める。そのために各地域の情報が必要だ。世界中のね」 てな感じで始まってます(と思います)。そして、ユニフォームに身を包み、情報を調べに行くんですが、Virtual Earth の情報ってこうやって集めてたんですね(違


なんていうか、、、こんなのを大真面目に作れる Microsoft ってやっぱりすごいと思います(笑

2005年8月19日金曜日

RSS 3 と Atom 1.0

RSS 3 specs published より
RSS 3 の仕様が公開されたそうです。Slashdot での紹介が引用されていますが、RSS 3 Lite-type Specification の最初のドラフトとのことです。で、この RSS 3 は RSS 2.0 のギャップを埋めたり、不必要な機能を削除したりした手直し版で、完全に後方互換性があるとのことです。


Atom 1.0 specs published より
Atom 1.0 の仕様が公開されたそうです (7月には公開されていたみたいですが)。アナウンスが引用されてますが、それによると 「RFC ナンバーはまだついてないけどオフィシャルなものだよ」 ということらしいです。Atom ってよく知らないんですが、どうも 0.3 と 1.0 では互換性がないみたいですね。


うーん、しかし RSS・Atom っていったい何種類の仕様があるんだ? 

2005年8月18日木曜日

yield のネスト

Nesting C#'s yield より


えーっと、この記事は


  GetValues() が IEnumerable を返すとして
    yield GetValues();
  とは書けないんだよね。
  末尾の再帰として書くとこんなことができる(とサンプルコードを提示)。
  けど、やっぱり、
    yield GetValues(top-1);
  なんて書けるといいのに。このほうが、コンパイラの最適化のチャンスも増えるし。


というようなことが書いてある模様。


うーん、まだ yield の動作がピンとこないなぁ(いちおうわかったつもりになってたんだけど、こんな風にネストしちゃうとすぐにはよくわからないよ。。。)

Nullable Boxing その2

Nullable Boxing」 で書いた nullable のデザインチェンジについてのその2。


Somasegar's WebLog:Nulls not missing anymore
開発部門の副社長である Somasegar 氏 の blog で今回のデザインチェンジについて書かれています。まず、



  • nullable なものを box 化すると null だったときは null に、null でなかったときはそれなりの値になる。

と。これはわかりやすいので OK と。
で、unbox 化のほうですが、私が上の記事で書いたように



  • たとえば int? を box 化すると、それは int でもあり int? でもある。
    だから
      int? i = 1;
      object o = i;
      int x = (int)o;
    と書ける。

というだけでなく、



  • int を box 化したものも、int てもあり int? でもある。
    だから
      int i = 1;
      object o = i;
      int? x = (int?)o;
    と書ける。

ということになるようです。
なるほどなぁ。型システムが nullable を認識しているから、unbox 化する際に nullable を引っぺがすことも、nullable にすることも自由にできるってわけですね。
しかも、
  int? x = 0;
  IComparable ic = x;
というようなこともできると。これは、int? である x から int を取り出して、その int が implements している IComparable を取り出している、ということでいいのかな?


sab39:How to completely screw up a good idea: Nullable types in C# 2.0
こちらの blog は日付 (2005年 4月 19日) から言って、今回のデザインチェンジとは無関係に書かれたものだと思いますが nullable の動作についてとてもわかりやすい表が載ってます。この表は



  • 普通の参照型
  • 理想的 (ideal) な nullable
  • Nint (C# で自分で実装した struct みたいです)
  • C# 2.0 beta2 での nullable

の比較になっているんですが、今回のデザインチェンジの内容からするとほぼ 「ideal な nullable」 の列の動作になったということなような気がします。(int? y = t ? 1 : null; という三項演算子はさすがに無理なような気がする。型システムというより C# コンパイラががんばればできそうな気はするけど)

2005年8月12日金曜日

その後の start.com/3

start.com/3 がバージョンアップ」 でもバージョンアップを紹介した http://www.start.com/3/ ですが、その後もちゃくちゃくとバージョンアップしているようです。


いつの間にか .NET Passport でサインインできるようになってますし、いろいろと機能追加もされてるみたいです。


あと、Startlets とかに入っている MSN Bloggers Map が興味深いです。 MSN Virtual Earth を使って blog を書いている人の場所(Microsoft のビルディングだったりしますが)を表示しています。ってか、MSN Virtual Earth の API って公開されてましたっけ?

RSS Feeder .NET sample

Great .NET Smart Client Blog Aggregator with BSD License より


CodeProject の 「RSS Feed Aggregator and Blogging Smart Client」 という記事が紹介されています。この記事は RSS Feeder という実際に使える RSS リーダーアプリケーションの解説記事なんですが、この RSS Feeder は 「Enterprise Library のアプリケーションブロック、Outlook インテグレーションのデモンストレーション、オフラインキャッシング、非同期コミュニケーション、マルチスレッド UI アップデートロジックなど多くの特徴を持った Windows Forms スマートクライアントアプリのすばらしいサンプル」 とのことです。そしてまた 「Omar 氏は寛大にも BSD ライセンスの元でそれを提供している。だから RSS Feeder をバラバラにしたり、解析したり、あなた自身のコードに断片を組み込むことでさえできる」 とのことです。

2005年8月11日木曜日

TechEd 2005 Yokohama レポート - 8/3(水) 2日目

8/3(水) 2日目


■ キーノートスピーチ
寝坊、というか二日酔いというか、で 30分遅れくらい遅れちゃいました。
VSTS のデモはもうすでに何回も見たことあるような気がする。というか、去年も同じようなデモを見たことがあるような気がしないでもないw
SQL Server のインテグレシーションサービス?のデモ(データマイニング)は、正直意味がよくわからないけど、SQL Server 2005 はすごいということが言いたいってことはわかった(笑)
で、SQL Server 2005 の新機能であるデータベースミラーリングのデモ。。。おいおい、マシンを爆破しちゃったよw しかし、なんかこれは便利そう。クラスタリングみたいに共有ディスクとかなしにクラスタリングと同じようなことができるってこと? しかも、待機系はライセンス不要、ウィットネス(監視するサーバ)は SQL Server Express (もちろん無料)でもいいんだって。
Windows Server 2003 R2 の新機能の ADFS でシングルサインオンが実現できる?これはフォーム認証のときとかも自動的にできるのかな?詳細はよくわからんな。
豆蔵がどうのこうのと。。。なんのことかよくわかんないけど、あとで調べてみようかな?


おぉ、やっぱり発表日の発表が来たー! 11月 17 日 Visual Studio 2005、SQL Server 2005、BizTalk Server 2006 東京にて発表だって。当然、日本語版のことでしょう。えーと、発表というのは発売開始ということなのかな?(BizTalk Server 2006 の発売は来年になるっていうのは発表済みなので、これは別として)。。。あとでマイクロソフトの人に聞いてみたところ 「今のところは 11/17 に発表するということしか言えません」 とのこと。少なくとも今の時点では 11/17 にパッケージが店頭に並ぶという意味ではないみたい。残念。パッケージ(箱物)はあとでもいいから、せめて、MSDN Subscriber Download で製品版がダウンロードできるようになってくれるとうれしいんだけど。


■ T2-318 SQL Server 2005 高可用性ソリューション
キーノートスピーチでもずいぶん楽しそうなことしてたし、SQL Server 2005 のセッションを聞いてみることにした。
へぇ、Standard でもフェールオーバークラスタリング(2台まで)をサポートするって。ほぅ、8ノードクラスタか(SQL Server 2000 は 4ノードまで)。
続いてキーノートスピーチでも取り上げられてたミラーリングの話。なになに、、、



  • 同期モードと非同期モードがあって、自動的にフェイルオーバーするかどうか自分で決められる。

  • 同期モードは若干パフォーマンスが落ちる。けど、金融系なのでいろいろとテストしてるが「そんなに気にするほどじゃないんじゃないかな」という感触らしい。

  • 普通に TCP で通信してるみたいだけど、ちゃんと暗号化されてる。

  • プリンシパルとミラーは決定的なものではなく、プリンシパルがダウンした場合、ミラーがプリンシパルになって、元プリンシパルが復旧後はミラーになる。

  • クライアント側は SDAC が必要らしい。

  • 同じマシンの別インスタンス間でもミラーリングできる。

  • そして、ミラーリングのデモ。設定も簡単みたいだし、こりゃいいかも。

データベーススナップショットもイイ! なるほど、スナップショットっていうのは、ほんとうにデータベースのコピーを取るわけじゃなくて Copy On Write で更新があったページのみスナップショットを取っていくのか。だからそんなにディスクも消費しないし、スナップショット取るのも一瞬であると。バックアップの代わりに使ったり、日次処理や月次処理なんかを走らせる場合にスナップショットに対して実行したりできると。復元するのはバックアップから復元するみたいに restore database でできるのか。ただ、もちろん見かけ上スナップショットを取ってるみたいに見せてるだけだから、ほんとうの意味でのバックアップじゃないんだよ、ってことをわかってない奴が出てくると困るな(データベースが壊れたらスナップショットごと壊れる)。
パーティショニングも便利そうではある。


■ お昼ごはん
MVP な人たちなどと海の見えるレストランで。しかし、二日酔いで調子が悪いぞ(笑)


■ T3-330 64-bit 環境における .NET Framework アプリケーションの開発
64bit の wordpad が 32bit の PowerPoint をちゃんとインプレースアクティベーションできる。ほぉ。
.NET Framework 1.1 を 64bit OS で動かす。。。WOW64 で動く。ただし、IPF では IIS にホストされて動く ASP.NET みたいなのはパフォーマンスが出ないのでお勧めできない。
VS2005 は 32bit アプリケーションだけど 64bit 対応している。64bit OS 上で 32bit、64bit 両方のデバッグもできる。32bit 上の OS からリモートデバッガでデバッグすることもできる。リモートデバッガも 32bit 版、64bit 版の両方がある。64bit OS 上でアプリを動かしてリモートデバッガを起動、32bit OS 上の VS2005 で「プロセスにアタッチ」でデバッグしたいマシンに接続してデバッグ可能。
64bit .NET Framework ではエディット&コンティニューはサポートされてない。けど、64bit OS 上の VS2005 で 32bit アプリとしてデバッグしてるときはエディット&コンティニューできる。なるほどねぇ。よくできてるなぁ。
それに、.NET Framework ベースのアプリケーションは基本的に 32bit だろうが 64bit だろうが問題なく動く様子。どちらで動かしたいのかは PE を書き換えるとか config で指定するとかいろいろと方法はあるらしい。
ただ、P/Invoke とかは気をつけないとだめだろうなぁ。その辺の話は特になし。ほんとはこの辺が一番問題になってくると思うけど。


■ T3-335 スマートクライアントアプリケーションの開発
スマートクライアントの概要とか。
パフォーマンスを上げるためにキャッシュしよう。これは Enterprise Library の Cache Manager なども使える。SOAP ヘッダを使ってキャッシュの有効期限を送ったり。
SoapExtention を使わなくても .NET Framework 2.0 では SOAP の圧縮・解凍をサポートしている?
他にも Application Block (Enterprise Library) を使ったデモ。
やっぱり Enterprise Library をもうちょっと勉強してみないとダメだなぁ。


■ T3-337 Visual Studio 2005 で改善された Windows フォーム
このセッションでは爆発するようなサーバはないんだって。残念w
正直言ってどっかで見たような話だったけど(笑)、それでもあらためて見るとやっぱり .NET Framework 2.0 の Windows.Forms はいい感じだなぁ。


■ Microsoft TechEd 2005 Attendee Party
ゲストはコージー富田。さすが、おもしろいぞ。
抽選会は思いっきりはずれ。残念。しかし、Intel のマザーボードってのも微妙な景品だなぁ。マザーボードだけもらったら Intel の CPU 買わなくちゃいけないじゃん(笑) 最後の締めは XBox 360 だったけど、途中の TechEd 2006 US (Boston) にペアで招待のほうがはるかにいい景品のような。。。(笑) ん? XBox 360 にあたった人ってどっかで見覚えが。。。おぉ、あれは A さん(仕事上でのお知り合い)じゃないか!


■ スペシャルナイト(笑)
パーティ後はロイホで MVP な人なんかと 1時くらいまでおしゃべり。
その後、ホテルの部屋に戻ってさらにおしゃべり。寝たのは 3時くらいだったかなぁ。

Ajax を使った日本語 Full IME

Ajax を使った日本語 Full IME


とりあえず、すごいです。。。
blog はこちら http://chasen.org/~taku/blog/archives/2005/08/ajax_ime_2.html

maplog.jp 地図からの blog 検索

昨日 「FeedMap BlogExplorer!」 で feedmap について書いたからかどうかは知りませんが、偶然に maplog.jp というものを知りました。feedmap は、自分で blog の座標を登録するというものでしたが、maplog.jp はちょっと違います。


maplog.jp は、表示されている地図上に登場するキーワードが含まれている blog 記事を検索してくれるというものです。地図の表示には Google Maps を使っています。

2005年8月10日水曜日

FeedMap BlogExplorer!

feedmap っていうのがあります。これは blog の RSS への URL と場所を登録しておくと、その blog を地図上で表示してくれたり、ご近所の blog を探してくれたりといったサービスです。


で、その beedmap を MSN Virtual Earch と合体してみたそうです。
FeedMap BlogExplorer! 
右クリックして "explorer" するか、"explorer" をクリックするかすると blog を表示します。


おもしろいんだけど、日本語が化けてるんだよなぁ。(っていうか、ASCII 以外は壊滅状態)

TextReader based off C# Yield

TextReader based off C# Yield より


まだ読んでないけど、おもしろそーだったので記録。

TechEd 2005 Orlando の ASP.NET 関連セッションが公開されてます

TechEd 2005 Orlando の ASP.NET 関連セッションが公開されてます。
http://msdn.microsoft.com/asp.net/community/events/teched2005/default.aspx


私は見てませんが (見ても英語が聞き取れませんが(^^; )、ASP.NET だけでなく他のカテゴリもこんな感じで公開してくれるとうれしいなぁ。もっと言うと、このあいだの TechEd 2005 Yokohama のセッションもこんな感じで公開してくれないかなぁ。

PDC 2005 での C# 3.0

PDC 2005 のセッションが公開されていますが、その中で目に付いたもの。


TLN307 - C#: Future Directions in Language Innovation from Anders Hejlsberg
タイトルどおり Anders Hejlsberg 氏による C# 3.0 のセッション。
extension methods、lambda expressions、type inference、anonymous types なんてものが語られる模様。


TLN306 - The .NET Language Integrated Query Framework: An Overview
こちらもスピーカーは Anders Hejlsberg 氏。
Orcas では統一したプログラミングモデル、かつ、C# や VB に統合されたクエリーでもってリレーショナルなテーブル、 XML、メモリ内のオブジェクトなんかを扱えるようにするつもり、ということな模様。


すげーおもしろそう。
# って、PDC になんて行けないんですが。。。
# 行ったとしても英語わかんないですし(^^;

C# で関数型プログラミング カリー編(らしい)

Functional Programming in C# - Currying より


Generics を使って関数型言語で言うところのカリーを書いてみようってことみたいです。
けど、関数型言語はよくわからないし、カリーもよくわかりません(汗) なので、上記の記事を見てもいまいちピンとこなかったりします(^^; もちろん、ソースを見れば 「何をしているのか」 はわかるんですが、「どうしてこういうことがしたいのか」 「こういうことができると何がうれしいのか」 がいまいちわかんないんですよね。けど、ソース自体はとってもおもしろい。


それと、コメントのところを見ていくと Don Box 氏からのトラックバックがあります。
Sriram on Currying in C# 2.0
なんか "Look for the C# 3.0 version in September." なんて書いてあるんですが。。。9月って PDC のことなんだろうなぁ。

Nullable Boxing

TechEd 2005 Yokohama の初日(8月2日)の 「L3-1 C# 2.0 and IDE Tips & Tricks Part1」 のセッションで言われていたことです。スピーカーの波村さんによると 「今日から公開していいと言われた内容です。このデザインチェンジが行われたのは、ここ 1ヵ月半くらいのことです」 ということです。


で、どういったデザインチェンジかというと、
 void Foo<T>(T t)
 {
   Console.WriteLine("Foo<T>: {0}", t == null);
 }
 void Test()
 {
   int? i = null;
   Foo(i);
   Console.WriteLine("i == null: {0}", i == null);
   Console.WriteLine("(object)i == null: {0}", (object)i == null);
 }
これを実行するとどうなるか?という部分です。


実際に beta2 で実行すると
 Foo<T>: False
 i == null: True
 (object)i == null: False
となります。



  • 最初の Foo<T> では T は当然 int? となっています。問題は t == null の部分ですが、この部分の JIT による解釈は 「int? は値型の一種。値型は null には成り得ない。だから常に false」 ということになるそうです (波村さんに聞いたらこんな風におっしゃってたと思います)。int? は Nullable<int> ですし、Nullable<T> は struct ですから、「値型の一種」 というより値型そのものですね。だから null にならないのは当然とも言えます。(と思う。こういう解釈であってるのかな?)

  • 2番目の i == null は C# コンパイラが i.HasValue を呼び出すべきということを判断できます。なので、そのような IL が出力されます(実際に ildasm で見てみると i.HasValue を呼び出しているのがわかります)。

  • 最後の (object)i == null も Foo<T> と同じような感じで i を box 化して null と比較する IL が生成されます。だからこれは常に false です。

これはこれで正しいわけですが、やはりわかりにくいしバグの元でもあるので 「なんとかしようよ」 ということになったそうです。どうなんとかするかと言うと、「nullable を box 化したときに元が null であればちゃんと null になる(null と比較したとき true になる)」 となるようにしたってことでした。これによって、
 Foo<T>: True
 i == null: True
 (object)i == null: True
となることになります。


あと、
  int? i = null;
  object o = i;
  Console.WriteLine("o is int: {0}", o is int);
  Console.WriteLine("o is int?: {0}", o is int?);
の結果が
 o is int: True
 o is int?: True
となるようにも変更されるとのことでした。
beta2 では
  int? i = 1;
  int x = (int)i;
というコードをコンパイルできます。これは C# コンパイラによって
  int x = i.Value;
と解釈されています(IL を見るとそうなってます)。さて、それでは、
  int? i = 1;
  object o = i;
  int x = (int)o;
はどうでしょうか?これは beta2 では実行時エラーが発生します。o に格納されているのは box 化された int? なので int にキャストすることはできません。これを実行可能にするには、
  int x = (int)(int?)o;
のように int? にキャストしてから int にキャストしてやる必要があります。結局、int? を直接 int にキャストすることはできるのに、いったん box 化すると int にキャストすることはできなくなる、というふうに見えることになります。これが上記のように 「int? を box 化したものは int? でもあり int でもある」 となれば問題なく
  int? i = 1;
  object o = i;
  int x = (int)o;
というコードを実行できることになります。。。ということであってるのかなぁ?


まだ実際の処理系がないので、いまいち合ってるのかどうか自信はありませんが、こんなような感じみたいです。

TechEd 2005 Yokohama レポート - 8/5(金) 4日目

8/5(金) 4日目


午前中は MVP 関連の打ち合わせとか雑談とか。
しかし、やっぱり英語は必要だなぁ。ものすごくゆっくりしゃっべってくれてたけど、それでもほとんどわかんなかったよ。


■ Peer Talk Lunch
あれ?今年は 1,500円取られないんだ。去年は 1,500円取られたと思うけど。うーむ、このために 1,500円分の食券を取っておいたんだけど、あまっちゃったよ。
で、おなか減ったし最初にガッとおなかいっぱい食べて、その後、C# のことやらスレッドのことやらいろいろとおしゃべり。


■ T2-314 Web Services Enhancements (WSE) 3.0 の新機能
ASMX って 「アスムエックス」 と発音するの?
ほぅ、WebMethod を TCP で(IIS なしで) ホストできるようになるんだ。
へぇ、DIME とか WS-Attachiments とかなくなって MTOM ってのになったんだ。
SOAP Toolkit Version 3に SOAP の内容をキャプチャして表示するツールが付いてるとのこと。なら、WSE 3.0 にも付けてくれればいいような気がする。


■ T3-407 Visual Studio 2005 Team Foundation Server 詳細
なかなか自分で Foundation Server をセットアップすることはできなさそうだから、このセッションを聞いてみた。
チームビルドってクライアント側の VS2005 からサーバでビルドするように指示ができるんだ。
レポートもいいし、チェックインポリシーもいいなぁ。
ほぅ、デモ・評価用に 1台にすべてを入れることもできるんだ。beta2 では Active Directory は Windows Server 2003 のものが必要。リリースでは 2000 もサポート。Workgroup もサポートする予定で、Workgroup の場合は App Tier と Data Tier は同じマシンにしなくてはいけないなど、若干の制限がある可能性がある。
OS → SP → AD 構築 → IIS → SQL Server の順で入れる必要あり。
Version Control Proxy Service なんてものもあるんだ。離れた拠点で開発する場合、ソース管理のプロキシとなるもの。beta2 には含まれていない。
やっぱり、ワークアイテムとワークフローっていいなぁ。
へぇ、自分でクライアントを作れるくらい、完璧にオブジェクトモデルが公開されてるんだ。もっと深いところでカスタマイズすることもできるように、ちゃんと公開されてるんだ。


■ T2-404 .NET Framework を利用したシステムにおけるスケーラビリティとパフォーマンスへの考慮
「.NET アプリケーションのパフォーマンスとスケーラビリティの向上」 この記事を元にしたセッションでした。正直、私は 「こうすりゃ速くなるぞ」 みたいなガリガリなセッションを期待してたんですが。けど、これはこれでおもしろかったです。スケーラビリティやパフォーマンスは、最初から考えておくべきことであって、あとになってから考えるものじゃないというのはまったくもってそのとおりだと思います (けど、結構軽視されちゃうんだよね)。


■ 晩御飯
何人かの人たちと晩御飯。
その後、新幹線で自宅へ。

TechEd 2005 Yokohama レポート - 8/4(木) 3日目

8/4(木) 3日目


■ T3-325 Visual C++ 2005 の新機能と既存コードの改善・活用
話の中心は C++/CLI と最適化。
うーん、「IL という中間言語を実行する .NET に比べて C++ は理屈の上でもパフォーマンスが高くなる」ってそれは違うような。JIT が十分に高性能であれば同等になるはずだし、むしろ逆に 「理屈の上では」 実行時に最適化することが可能になるので IL を使ったほうがパフォーマンス的には有利になると思うんだけど (あくまで理屈の上ね)。
へぇ、C++/CLI は Microsoft 固有の構文ではないんだって。。。うーん、こういう説明もありなのかもしれないけど、ちょっと誤解を招きそうな気がするなぁ。確かに ECMA に提出されてるし standard になればオープンなものになるけど、その説明じゃ 「Microsoft 以外の誰かが構文を決めた」 みたいに取られちゃうような。。。
/clr には mixed、pure と verifiable があるのか。この辺の区別とかはよくわかってないなぁ。セッションの内容でも具体的になにが違うのかはよくわからんかった。
えっ、/clr でも cl とリンカを通るんだって。C# で作った .netmodule をリンカでリンクすることが可能なんだ。じゃあ、C# と VB.NET で作った .netmodule をリンカでリンクすることもできるんだ。と思ってたら、そのまんまのことをデモで実演してくれた。
やっぱり、最適化はすごいな。リンカでの最適化って VS.NET2002 からあるのか。けど、2005 でかなり良くなったらしい。Microsoft 社内でも広く使われてるって。
Profile Guided Optimization (ガイド付き最適化) はやっぱりすごいな。30% くらい性能がよくなる? これも Microsoft 社内で広く使われてるらしい。しかし、昨日の夜もこの話題で盛り上がったけど、プロファイルを取った内容で最適化するっていうのは、どんなプロファイルを取るかで最適化の結果が変わることになるから、安定した結果が出るのかどうか不安になるよなぁ。
「プログラム全体にわたる最適化などはコンパイラステップとリンカステップに分かれていることが有利に働いている」 みたいなことを言ってたけどほんとかな?コンパイラとリンカに分かれてることは関係ないように思うんだけど。そもそも、こういう最適化って JIT が内部でやろうとしてるようなことを C++ でもやるようになってきたっていう気がしないでもない。
あと、IDE 上の強化点についての紹介。この辺は C# とか VB.NET とかとまったく同じとのこと。


■ T3-331 セキュアなアプリケーション構築のための Visual Studio 2005 における強化点
なるほどなぁ。「1人の侵入者を防ぐためには 1000人規模で 24時間 365日警備する必要があったりする。それくらいセキュアに保つのは大変」 確かに。「セキュアに保ち続けるというモチベーションの維持が大事。銭形警部のように」 ふむふむ。
静的コード分析が重要、これで一定の品質に保つ。PREfast は C/C++ の静的コード分析ツール。FxCop がマネージド向けの静的コード分析ツール。FxCop でチェックする命名規則などももちろんカスタマイズできる。しかし、非常に難解。


■ お昼ごはん
何人かと近くのレストランで。


■ スペシャルセッション
MVP スペシャルセッションに参加しました。内容は C# とかそういったことです。


そこで出た話なんですが、MSDN Product Feedback なんかを使って、もっともっとフィードバックをして欲しいそうです。フィードバックされた内容をどのように扱っているかをちょっと教えていただけましたが、(詳細は書きませんが)ものすごくちゃんとしていると感じました。ここまでやってくれているんだからフィードバックしないともったいないと思うくらいです(笑)。なにかある人はじゃんじゃんフィードバックしちゃいましょう(ちなみに MSDN Product Feedback はページは英語ですが、日本語で書き込んでも問題ありません)。


■ T2-377 SQL Server 2005 SQL CLR と T-SQL の利用と選択
演算処理などは SQLCLR のほうが T-SQL よりはるかに速い。
SQLCLR はどこで使うべきか?T-SQL が苦手とするような処理、作りにくい処理。まずは拡張ストアドプロシージャは SQLCLR にすべき。そもそも拡張ストアドプロシージャはサポートはされるが推奨はされない機能となった。次にユーザ定義関数。ユーザ定義関数は多くの場合演算処理のために作られるので SQLCLR で書くべき候補となる。テーブル値関数を SQLCLR で実装するとインメモリのストリームになるので速い。T-SQL で実装するとtempdb を使用するのでオーバーヘッドが発生する。反対にデータ処理は向いていない。


へぇ、VS2005 のプロジェクトのプロパティにデータベースなんて項目もあるんだ。


alter table hoge
add hogehoge as hogehoge2 persisted
この persisted も SQL Server 2005 の新機能。計算列の計算結果を保存する。


SQL 型と CTS 型は完全にマップされている訳ではない、最大・最小値が違うなどいろいろある。System.Data.SqlTypes を使ったほうがいい。そして null は IsNull でチェックする。。。そういや、このあたりって nullable が使われるようにはならないのかな?


T-SQL → CLR、CLR → T-SQL ともにアクセス許可セットの影響は受けない。なぜなら T-SQL にアクセス許可セットの考え方自体がないから。しかし、CLR(セーフ)→CLR(セーフ以外)の呼び出しなどをする場合は SecurityException が発生する。では、CLR(セーフ)→ T-SQL → CLR(セーフ以外)とした場合は?これも SecurityException が発生する。正しくアクセス許可セットを設定し、きちんと管理する必要がある。


■ Welcome to INETA Japan Event 2005!
ほんと、おもしろかったです。構成もよくできてたし。お客さんもほとんど満席状態でした。


■ スペシャルナイト(笑) その1
マイクロソフトの方々や MVP の方々などと飲み会。


■ スペシャルナイト(笑) その2
その後、また買い出ししてホテルの部屋で飲み(笑)。けど、途中で寝てた。んだけど、なんか聞くところによると、突然起き上がって 「お開きにしましょう」 とか言ってたらしい。で、お開きになったらしい。覚えてないなぁ(笑)

TechEd 2005 Yokohama レポート - 8/2(火) 1日目

今年も TechEd 2005 Yokohama に参加しました。
以下はそのときのメモです。


8/2(火) 1日目 ラーニングディ


朝 6:30 発の新幹線で横浜へ。
TechEd 会場であるパシフィコ横浜に着いたのは 9:30 くらい。すでに最初のセッションは始まってしまってるけど、新横浜に止まる新幹線はこれが始発なのでしょうがない。なので最初のセッションはあきらめてとりあえず MVP ラウンジに行ってみた。濃いぃ人たちとともになぜかそこにはキティちゃんが。。。(笑) キティちゃんと遊んだりして、ちょっと時間をつぶしたあと、さっそく最初のセッションへ。TechEd まで来ていつまでもキティちゃんと遊んでるわけにもいかないですしね(^^;


■ L7-2 Windows Server をインターネット環境に展開する
~ほんとうに大丈夫?どうすればいいの?~ (Part II)
内容はタイトルのとおりでした。「不要なサービスは止めろ」「不要なポートは閉じろ」その他もろもろ、、、と。基本的には「セキュアになるようにちゃんと設定しましょう」ってことでした。常識と言えば常識なのかもしれないけど、(私は IT Pro ではないし)こういうふうにあらためてきちんと筋道立てて説明してもらうと「なるほどなぁ。そりゃそうだよなぁ」という感じで結構おもしろかったです。あと、最後のほうの 5台のデモマシンを使っての ISA Server のデモもおもしろかったです(ISA Server って見るのも初めてだったしw)。
そういや、Windows Server 2003 は SP1 を当てたメディアでセットアップするとポートを閉じた状態で起動するんだって。確かにそうじゃないとなぁ。


■ お昼ごはん
MVP な人たちなどと近くのお店で。私は、お刺身の定食を選択。
今年も 4日間で 6,000円分の食券がついてました。この食券は TechEd 会場となっているパシフィコ横浜の近辺にあるほとんどのお店で使えます。


■ L8 Community Server を使ったビジネスブログサイト構築法
ここの blog は .Text を使ってますし、改造したりするために結構 .Text のソースを見たりもしましたからそれなりには理解できてると思います。で、Community Server (以下 CS)の blog 部分は .Text がベースになってるわけで、いまさらあらためて聞くまでもないような気はしたんですがw。。。なんとなくこのセッションを選んじゃいました(笑)
前半は blog そのものについて。スピーカーの鈴木さん曰く



  • Blog ツールはコンテンツ・マネジメント・システム(CMS)の一種。

  • ブログはインターネットで公開している日記。

で、「日本で言うブログはカタカナのブログなんだと思う」とのこと。ふむ、なるほど、確かにそんな感じはする。
中盤は CS の特徴の紹介。最後のほうは実際に CS をインストール・セットアップしてみるデモ。そか、CS ではユーザのロールとか、blog グループとかができるようになってるんだ。この辺は .Text よりずいぶん進化しているな。んで、時間が足りなくなっちゃってすごく駆け足でインストールするデモが行われたんだけど、なんか .Text でのインストールのわかりにくさが嘘みたいに簡単になってるw


■ L3-1 C# 2.0 and IDE Tips & Tricks Part1
波村さんのセッション。とってもおもしろかった。最終アンケートの 「4日間とおして最もよかったセッション」 にこのセッションを上げました。


C# チームが入ってるビルディングを MSN Virtual Earth の画像で紹介してくれたり、仕様が来るまで待ってられないのでノートが来た時点で実装しちゃうとかなんていういかにも「中の人」ってな感じの話で始まり。


で、C# 2.0 の追加機能の話。最初は Generics。しかし、いくらなんでも説明が速すぎかも(笑)。このスピードだとある程度知識がないとついていけないかもしれませんね。
以下、いろいろ



  • 1.0 と 1.1 ではたとえば int 用のコレクションなんていう感じの特化したクラスを作ってパフォーマンスを上げたりしてた (確かにアクセスするたびに box 化、unbox 化が必要になるのはきついだろうな)。これが 2.0 では Generics にすることによってこういうようなユーティリティクラスが不要になった。

  • Dictionary<string, List<string>> と書ける。C++ のように > > とスペースを入れる必要はない。これは、ちゃんとパーサを変更して解釈してる。

  • 「default(T) を入れました」 なんていう表現がおもしろいなぁ(「○○という機能があります」じゃなくて「入れました」というのは中の人じゃないと言えないよなぁ)。

  • void Foo<T>(T x) {
     int j = (int)(object)x;
    }
    (int)x とは書けない(x が int にキャストできるのかどうかコンパイラには判断不可能なので)。なので (int)(object)x と書く必要あり。こうかいても JIT によって最適化されるので無駄は発生しない。

  • if (x == null)
    x が value type のときは常に false (value type が null になることはありえないので)。この場合も JIT によって最適化されるので無駄は発生しない。

  • public static int Foo(int i) { }
    public static T Foo<T>(T t) { return default(T); }
    public static T Bar<T>(T t) { return Foo(t); }
    このようなオーバーロードには注意。
    Foo(1) と呼び出せば一番近い Foo(int) の呼び出しと解釈される。しかし、Bar(1) と呼ぶと return Foo(t); は Foo(int) ではなく Foo<T> の呼び出しと解釈される。コンパイル時には Bar<T> 内の Foo(t) にシグネチャが最も近いのは Foo<T> になるので当然。当然ではあるか、とてもわかりにくいバグになる可能性が高い。注意すべし。というか、こういうコードは書かないほうがいい。

  • 波村さん曰く「constraint は慣れてくると書かないと気持ち悪い」

続いて Anonymous Methods。



  • 「C# 3.0 になるとますます関数型言語に近づくんですが。。。今回はそれは話せませんので、また、次回に」 うーん、聞きたいぞw

  • 「delegate { MessageBox.Show(...); } という書き方でもλ式に見えないというフィードバッグがあった。C# 3.0 ではなんとかしてみたい」 ほぅ。

  • 「Anonymous Methods をイベントにフックアップしてます」 ふーん、フックアップって言うのか。

次に Nullable。



  • Longhorn (Windows Vista) には 5種類くらいの Nullable の実装があった。それくらい需要があるのになんで標準的にランタイムでサポートしないんだ?という話もあってランタイムと C# コンパイラもサポートすることになった。

  • int? x = i; こんなふうに non nullable から nullable にすることをラッピングというみたい。で、反対に int i = (int)x; をアンラッピングというみたい。

  • Nullable Boxing。今日から公開していいと言われた内容。ここ 1ヶ月半でデザインチェンジが行われて、nullable を box 化に関して動作が変わったらしい。詳細は長くなるので別記事に書きます。

最後に Iterator。



  • 実は Iterator はバグがいくつも見つかってカットするかどうかの議論にもなったらしい。

  • しかし、C# 3.0 でも重要なフィーチャーになるし重要ということで生き残ったらしい。

  • Iterator はあまり注目されないが、とても便利とのこと。


■ L3-2 C# 2.0 and IDE Tips & Tricks Part2
Part1 に続いて 2コマ目。
1コマ目は C# の新しい言語機能の話でしたが、2コマ目は Visual Studio 2005 の新機能の紹介が中心。



  • AppWeek とは?仕事を離れて実際のアプリケーションを書いてみる週。月曜日にデザイン、火~木の 3日間に実装、金曜日にプレゼンという感じ。最近あった AppWeek では 30人で 200くらいのバグを見つけた。

  • VS はソースコードが 20G。HQ だけでも 2000人。ほへぇ。

  • メタデータソースビュー。メタデータを元に C# のソースで表示してくれる。おもしれー。XML ドキュメントのヘルプも見れてる。

  • 「すべての参照の検索」 とかは 2003 では単なる文字列検索。2005 ではちゃんと C# コンパイラと同等のパースツリーから表示している。

  • VS2005 のプロジェクトのプロパティは VB で作られている(だから遅い。。。?)

  • dim スニペットを書こう!(いや、冗談ですw)

  • プロパティの自動生成(コンパイラサポート)、new のときの型の自動判断は 「アンダースがダメだと決定した。『C# は VB じゃないんだ』」

  • ASP.NET にはやっぱりエディット&コンテニューはない?(詳細不明)

■ コミュニティパーティ
MVP、コミュニティリーダー、MCP 上位資格者、そしてマイクロソフトや Microsoft の方々とのパーティ。MVP な人や波村さんなどと C# や Vista の話なんかで盛り上がりました。


■ スペシャルナイト(笑)
MVP な人たちなどとコンビニに買出しに行ってホテルの部屋で飲みました。途中から参加した人たちなんかもいて、多いときは 10人以上くらいいたかな。私は 2時くらいにダウンしました。他の一部の人たちは明け方まで飲んでたらしい(^^;