.netcpu だそうです。
http://www.dotnetcpu.com/
Microsoft のサイト上でも紹介されています。
http://msdn.microsoft.com/mobility/
なんか Microsoft .NET Embedded CLR とかって書いてありますが、Embedded なんてあったんですね。
.netcpu だそうです。
http://www.dotnetcpu.com/
Microsoft のサイト上でも紹介されています。
http://msdn.microsoft.com/mobility/
なんか Microsoft .NET Embedded CLR とかって書いてありますが、Embedded なんてあったんですね。
Team System Community Technology Previews (CTPs) より。
この記事自体は 「CTP って何よ?」 っていうような話です(だと思う(^^; ちゃんと読んでません(^^; )
気になったのはこの記事に対して書かれたコメント。
> The Team System December CTP is on final approach. You can expect it before the holidays.
どうやら December が出るみたいですねぇ。
holidays というとクリスマス休暇のことなのかな?
# 大きく変わってるのなら入れてみようとは思いますけど、どうなんだろ?
Oracle 10g Release 2 to support the CLR、Orcale and the CLR より。
なんか、Oracle OpenWorld, San Francisco で、
なんていうアナウンスがされたみたいです。
こりゃびっくり。
マイクロソフトの無料 blog サイトである MSN Spaces ですが、英語版のベータも始まったそうです。
多くのところで http://spaces.msn.com/ という URL で紹介されているんですが、これって以前からある日本語版とまったく同じなんですよねぇ。どうやったら英語版が見れるのか探しちゃいました。
どうやら
とすればいいようです。
まぁ、言語が違うだけで機能は同じみたいですが。ただ、「最近更新されたスペース」などに表示されるものが言語によって変わります(どこを見て切り替えてるのかは知りません。使用言語とかって設定するところあったっけ?)
# あと、英語版の追加にあわせて背景が変えられるとかいくつか機能が追加されているようです。
Avalon CTP on MSDN Subscriber Downloads より
明日、MSDN Subscriber Downloads に WinFX SDK Community Technology Preview がリリースされる。。。
えっ?まじ?まじっすか?
すぐ下 に書いた Spec# ですが、 名無しさん♯ に教えていただいた(どうもです)
http://research.microsoft.com/projects/T5/ppt/SpecSharpShort.ppt
を見ると確かに VS.NET 2003 らしきもので動いてますね。
それと、よくわからないと書いた object invariant ですが、この PPT を見てなんとなくわかりました。
class T {
int[] bufferInt;
bool[] bufferBool;
invariant bufferInt.Length == bufferBool.Length;
みたいに整合性のチェックを指定できるようです。
ただ、「いったいどのタイミングでチェックするのよ」 という問題があります。複数スレッドから同時アクセスされる可能性まで考慮すると、自動的に適切なタイミングでチェックすることは非常に難しくなります。そこで、expose (o) { . . . } という構文も追加されているということなようです。
なるほどです。method contracts と object invariants をきちんと使用すれば、インスタンスが正常な状態に保たれているかをかなり正確にチェックすることができそうです。むしろ問題は、正確なチェックをするような method contracts や object invariants を書けるかどうかかなぁ(^^;
Spec# for Visual Studio .NET 2003 より。
Spec# っていうのは C# のスーパーセットで、
を追加したものとのことです。
# Spec# 自体は、すでに 名無しさん#さんのところ で既出です。
これは、まだペーパーだけなのかな?Microsoft Research の Download を見てもそれらしいのはないですし。
けど blog のタイトルが "for Visual Studio .NET 2003" とやけに具体的ですし、記事の中にも 「Visual Studio と統合された Spec# コンパイラ」 とか 「test generation と model-based testing のための SpecExplorer tool へのインターフェース」 とかって書かれています。Cω みたいにそのうち preview リリースとかがでるのかもしれませんね。
あと、この SpecExplorer というのもちょっと気になります。ググってみると、どうやら model-based testing のツールらしいんですが。。。
それと、いちおう書いておきますが、この Spec# は Cω (シーオメガ) と同じように Microsoft Research (Microsoft の研究機関) で研究中のものです。この先 Spec# や Cω がどうなるのかはなんともいえません。個別の言語としてリリースされる可能性もあるでしょうし、Spec# や Cω の機能の一部が将来の C# に取り込まれるという形になるかもしれません。ひょっとすると F# のように MS Research で育って、(Visual Studio とは関係なく) いつのまにか version 1.0 がリリースされたりするかもしれません。Spec# や Cω はそういった代物です。
Beyond Google... Koders.com - Open Source Code Search Engine より。
こちらで紹介されている www.koders.com ってなかなかおもしろいです。
いろいろなオープンソースなコードの中を検索することができます。ただ、残念ながら .NET 系のプロジェクトはまだそんなに多くはなさそうなんですが。
うーん、実に様々なものを Virtual PC で動作させています。気になったものをいくつか紹介。
The other reason why I love Virtual PC
CP/M-86 と Windows 1.01。
うーん、さすがに Win 1.01 は初めて見ました。
More Operating System Nostalgia
Windows 2.03、3.0。
2.03 も初めてです。3.0 は使ってましたけど。
Windows 3.11 on Virtual PC
日本語版が出ることはなかった Windows 3.11 for Workgroups です。
Win32s under Virtual PC
Windows 3.11 上の Win32s v1.3 は動作せず v1.25 なら問題ないとのことです。Win32s を使う場合は注意が必要ですね(って、そんなやついるのか?)
また、この記事のコメントで 「WinG は動作するか?」 との質問が出ていますが、これも問題ないとのことです(いや、だから。。。 しかし WinG とはなつかしいな)
Microsoft BOB lives!
そういや、こんなのも聞いたことあります。これも日本語版は出なかったんですよね?
OS/2 2.11 under Virtual PC
うむぅ、OS/2 は Warp はちょこっとさわったことくらいはありますが、2.11 はさわっこともありません。
ほんとすごいです(^^;
もちろん、他にも Virtual PC に関するちゃんとした記事もあるみたいです。 (私は読んでませんけど(^^; )
neowin.net Exclusive: MSN Desktop Search Revealed
なんか、MSN Desktop Search なるもののスクリーンショットがあります。
どうやら
http://blogs.msdn.com/msnsearch/archive/2004/11/15/257377.aspx
internal pre-release ビルドらしいです(^^
# リークものに対して、こんな風に Microsoft の人がコメントつけるのも珍しいな。。。
Safari Visual Studio Help Integration (VSHI) Beta より。
Visual Studio 2005 beta のヘルプに Safari の検索などを統合するためのツールの beta みたいです。
って、Safari って何よ?ということなんですが、プログラマや IT プロフェッショナル向けの書籍 1,300冊程度を検索・閲覧できる有料サービスみたいです。
詳しい説明は How Safari Works こちらにあります。
どうやら、検索は自由にできて、数センテンスをプレビューできる、気に入ったら自分の本棚に移動して読む、本棚がいっぱいになったらアップグレードするか要らない本と交換する、という感じでしょうか?(どのみち洋書しかないですし、あんまり詳しく読んでません(^^; )
日本語でもこういうサービスあったらいいなぁ。
PInvoke Library Load/Unload Behavior – Freeing Unmanaged Libraries より。
.NET で レガシーな DLL を使うときは PInvoke して使うことになるわけですが、PInvoke では一度 DLL を Load したら二度と Unload することはできません。これを無理やり Unload してしまう方法のようです。
なるほどぉ、PInvoke なメソッドを呼び出す直前に LoadLibrary しておいて、Unload したくなったら GetModuleHandleExA でハンドルを取ってやって FreeLibrary してしまうわけか。そのときに LoadLibrary と辻褄があうように FreeLibrary がゼロを返すまで繰り返し呼んでやると。
って、これはいくらなんでも強引過ぎやしないか?w
元記事でも 「まったくお勧めできない」 と書かれてますので注意w
詳しくは元記事を。
上記の記事からリンクされている Dynamic PInvoke より。
おぉ、.NET Framework 2.0 では Marshal.GetDelegateForFunctionPointer なんていうのが追加されるんですね。
これを使うと、Win32 API の LoadLibrary、GetProcAddress で取得した関数ポインタを delegate に変換できるみたい。なので、上記のような無茶をせずにごく自然に LoadLibrary、FreeLibrary ができるようになるわけか。
あと、元記事に 「今まで DllImport を使って指定してた PreserveSig だとかはいったいどうやって指定するんだ」 というするどい突っ込みがされていますが、これもきちんと UnmanagedFunctionPointerAttribute が追加されるので問題なしとのこと。
MSN Search (beta)
http://beta.search.msn.com/
Microsoft 製の新しい検索エンジンの beta リリースみたいです。
msnsearch's WebLog で知りました。
なにげに http://beta.search.msn.co.jp/ にアクセスしてみたら、ちゃんと日本語版もありました。けど、 "C#" で検索するとシャープが無視されて "C" で検索したのと同じ結果になっちゃうとか、.com にはある Images が .co.jp にはないとか、どうも日本語版のほうはバージョンが古いような気がします。ちなみに、日本語の検索はどちらも OK みたいです。
MSN Search (beta) のヘルプを見ていて気付いたんですが MSN Sandbox なんてのがあるんですね。なんかいろいろ紹介されています。
へぇ、Newsbot なんてのまであるんですね。
Design Guidelines Update: Names of Generic Type Parameters
によるとタイプパラメータの命名規則が変更になったようです。
タイプパラメータというのは、たとえば、
public class List<T> { … }
の "T" のことです。
この "T" という名前については、以前の命名規則だと "T"、"U" などのように大文字 1文字とすることになっていました。それが、先頭を "T" でつけたわかりやすい名前をつけること、となりました。ただし、わかりやすい名前にする意味がないものは "T" などのままでも OK です (たとえば、上記の List なんかはもともとあらゆる型を受け入れるわけで、わかりやすい名前なんてつけようがないから "T" で OK)。
また、BCL (Base Class Library。.NET Framework に標準で入っているクラスライブラリだと思ってもらえばいいです) に含まれている Generic なクラスについても新ガイドラインにあわせて命名を変更することを検討中とあります。
いちおう、最初のところに "we decided to modify the generic type parameter naming guidelines." とあるので、ガイドラインがこのように変更されることは確定しているようです。
ただし、ガイドライン自体が確定したわけではないので、今後再変更されることも十分ありえると思います。
以前取り上げた Paint.NET ですが、新しい URL は http://www.eecs.wsu.edu/paint.net/ こちらのようです。
History のところに Paint.NET は Washington Sate University で 2004年春に作られたのが始まりで (Computer Science senior design project というのはゼミかなんかなのかな?)、開発メンバーの 1人である Rick Brewster 氏は今は Microsoft で働いているなんてありますね。
その Rick Brewster 氏の blog はこちらのようです。
http://blogs.msdn.com/rickbrew/
Windows XP Professional (Service Pack 2) での話なんですが、いつの間にか C:\Windows\Temp (正確には %WINDIR%\Temp ) のアクセス権が "aspnet_wp" と "NETWORK SERVICE" だけになっちゃってました(すなわち、Administrator ですら読み書きできない)。いつからこうなっていたのかは定かではありませんし、ひょっとすると最初からこうなっていたのかもしれません(けど、最初からっていうことはないと思う)。ただ、こうなっていることに気付いたのは WinXP SP2 を入れた後なので、やっぱり SP2 が怪しいような。。。
実は WinXP SP2 を入れた直後から Windows Update ができなくなってました。
Windows Update のサイトにアクセスすると 「最新バージョンの Windows Update ソフトウェアを確認しています ...」 というのが表示されて ActiveX コントロールをダウンロード・セットアップしようとするんですが、しばらくまったあと 「申し訳ありません」 というメッセージとともに 0x8DD00004 というエラーが表示されてしまっていました。検索してみるといろいろ 「Windows Update が動かない場合の対処方法」 が公開されてますが、これらを参考にどんな対処をおこなっても Windows Update できるようにはなりませんでした。
けど、自動更新は動いているし 「まっ、そのうちなんとかなるだろ」 とあきらめてました。
次に困ったのは MSDN Subscriber Downloads にある SQL Server 2005 CTP - October 2004 - Developer Edition (English) を入れようとしたときです。
まず、SQL Server 2005 CTP Oct 2004 のセットアップ中に MSXML3 がエラーになってセットアップが先に進めなくなってしまいました。セットアップ CD-ROM (実際は iso イメージですが) の中にある MSXML3.MSI を直に実行してみてもやはりエラーになります。msiexec でログを取ってみたりとかいろいろしたんですが、エラーの原因はわかりませんでした。仕方ないので MSXML3.MSI を他のものに置き換えるという荒業を使ってセットアップを進めました( SQL Server 2005 CTP Oct 2004 に含まれる MSXML3 は MSXML 3.0 SP6 らしいんですが、それを Microsoft からダウンロードしてきた MSXML 3.0 SP5 の MSI に置き換えました。もちろんバージョンが違うのでこんなことをしても正常に動く保証はまったくありません)。
こうやって無理やりセットアップを進めたところ、かなり時間がたってからなにやらメッセージが表示されました。曰く 「C:\Windows\Temp の permission を確認しろ」 とかなんとか。。。
さっそく C:\Windows\Temp を Administrators が読み書きできるようにしてみたところ Windows Update も MSXML3.MSI のセットアップ(SQL Server 2005 CTP Oct 2004 のセットアップ) も問題なくできるようになりました。
うーん、まさかこんなところに原因があるとは。というか、いまどきって "C:\Documents and Settings\USERNAME\Local Settings\Temp" のほうを使うべきなんじゃないのかなぁ?
Visual Studio 2005 Express Editions Community Technical Preview October 2004 は http://lab.msdn.microsoft.com/vs2005/downloads/default.aspx からダウンロードできます。ダウンロードできるようになったのは 10/18 くらいですね。
あと、VS 2005 とは別に SQL Server 2005 でも CTP Oct 2004 が出ています。こちらは MSDN Subscriber Downloads からもダウンロードできます(Server の下です)。また、MSDN Subscriber Downloads には Express だけでなく Developer Edition、Developer Edition 64bit があります。これらがダウンロードできるようになったのが 10/15 くらいです。
それと、この SQL Server 2005 CTP Oct 2004 と並んで Visual Studio 2005 for the SQL Server 2005 CTP - October 2004 というのが MSDN Subscriber Downloads からダウンロードできるようになってます。こちらも 10/15 くらいからです。
で、この Visual Studio 2005 for the SQL Server 2005 CTP - October 2004 というのがダウンロードできるようになっていることには 10/18 くらいには気付いたんですが、ちょうどその頃から 「C# エディット&コンティニューなんかをサポートした VS 2005 CTP Oct 2004 が近々リリースされる」 というニュースが出てきたんですよね。ということは、提供時期から考えてこの Visual Studio 2005 for the SQL Server 2005 CTP - October 2004 というのは VS 2005 CTP Oct 2004 とは別物なのか?それともこれが VS 2005 CTP Oct 2004 なのか?と訳わかんなくなっちゃってました。
で、見つけました。
http://blogs.msdn.com/danielfe/archive/2004/10/18/244275.aspx
こちらのコメントに 「VS 2005 CTP Oct 2004 は Express Edtion のみ。full バージョンは提供しない」 と書かれてます(ついでに 「Express Edtion のフルダウンロード版も提供しない」 と書かれてますね)。
ということは、Visual Studio 2005 for the SQL Server 2005 CTP - October 2004 というのは VS 2005 CTP Oct 2004 とは違うものということになります。
だとすると。。。。
わかる人がいたら教えて欲しいのですが、そうするとこの Visual Studio 2005 for the SQL Server 2005 CTP - October 2004 というのは SQL Server 2005 CTP Oct 2004 と同じマシンにセットアップできるようにした VS 2005 beta 1 ということでしょうか?(使っている .NET Framework 2.0 の細かいバージョンが違うとかの理由で SQL Server 2005 CTP Oct 2004 と VS 2005 beta 1 は共存できないそうなので、その対策をしただけの VS 2005 beta 1?)
それとも、VS 2005 beta 1 と VS 2005 CTP Oct 2004 の中間のビルドなんでしょうか?
はたまた、上記の blog のコメントが間違いで、実は VS 2005 CTP Oct 2004 の full バージョンなんでしょうか?
# って、こんなことは Microsoft の中の人に聞かないとわからないかな?(^^;
どうやら .NET Framework 2.0 beta 2 で System.Xml が変わるようです。
http://blogs.msdn.com/dareobasanjo/archive/2004/10/13/241591.aspx
んで、.NET Framework 2.0 での XQuery サポートは取りやめになってしまったようです。これはちょっとショック。まぁ、確かに Working Draft に沿ったものをあまり普及させちゃうのもどうかと思いますし、recommendation になるのが 2005年後半ということだと VS 2005 のリリースのほうが先になっちゃいますから仕方ないのかなぁ。
(となると SQL Server 2005 の XQuery も今後どうなるのか気になってくるなぁ)
すでにあちこちで書かれてますが VS 2005 の C# でもエディット&コンティニューをサポートしてくれるらしいです。
おおもとのアナウンスは http://blogs.msdn.com/somasegar/archive/2004/10/15/242853.aspx の模様。
「エディット&コンティニュー(英語だと Eidt & Continue)」 っていうのは、デバッグ実行時にブレークポイントなどでいったん止めてコードを編集、そのまま (ビルドしなおすといったことなしに) 続きを実行するというやつです。
これは VB6 では普通にできることでした。しかし、VS.NET 2002、2003 では C# はもちろん VB.NET でもサポートされなくなりました。必ずいったんデバッグ実行を終了してビルドしなおしてやらないといけなくなったわけです。これが VS 2005 で復活します。というか、.NET Framework 2.0 自体にエディット&コンティニューに必要な機能が追加されます。そして VB2005 ではこのエディット&コンティニューがサポートされることは最初から決まっていたようです。しかし、C# ではサポートされないと言われていました(実際、今出ているベータではサポートされてません)。それが今回 C# でもサポートされるということになったようです。
http://blogs.msdn.com/ericgu/archive/2004/10/15/242931.aspx こちらに簡単にですが経緯が書かれてます。ようするに、リファクタリング機能とエディット&コンティニューを天秤にかけた結果、リファクタリング機能を優先した、けどエディット&コンティニューに対する要望もすごかったので、結局こちらもがんばった、ということのようです。
Daigo Hamura さんのところにもおもしろい裏話が(^^;
http://blogs.users.gr.jp/daigoh/archive/2004/10/16/5412.aspx
http://blogs.users.gr.jp/daigoh/archive/2004/10/16/5417.aspx
C# / .NET Framework 1.1 で作られたペイント系のソフトです。ものすごく cool です。
http://rbrewster.members.winisp.net/pdn.html
ソースも公開されてるところがさらに cool です。
# MIT ライセンス改だそうです。私はよく知りません(^^;
ところで、この Paint.NET は WindowsXP SP1 以降じゃないとセットアップできません。ソースからビルドした場合も、WindowsXP SP1 以降じゃないと例外が出て起動できないようです。
ちょっと Windows 2000 で動かしてみたかったので(というか、今の私の環境が Windows 2000 なので)ちょっと見てみました。
ソースの PdnLib\PdnBaseForm.cs の
をコメントアウトしてビルドする。
これだけで一応 Windows 2000 でも動くようになりました。といっても、詳細に調べたわけでもありませんし、作者さんに確認したわけでもありませんので、あくまでも自己責任で。
AILight さんとこの掲示板 で出ていたので公開。
指定した時間がたつと勝手に閉じるようにしたメッセージボックスです。
たとえば、こんな風に使います。
MessageBoxTimeout.Show("テスト", 5000);こうすると 5秒(5000ミリ秒)たつとボタンを押さなくても勝手にメッセージボックスが閉じます。もちろん、ボタンを押したときは普通のメッセージボックスと同じように即座に閉じます。
仕組みは、別スレッドでタイムアウトを監視していて、時間がきたらメッセージボックスに PostMessage して 「キャンセルしたことにしちゃう」 というものです。PostMessage すべきメッセージボックスを探すときに、そのメッセージボックスを開いたスレッドと同じスレッドのみを対象としているので別プロセス or 別スレッドが表示しているメッセージボックスを間違って閉じちゃうということはないはずです。
ただ、以下のソースを見てもらうとわかるとおり Win32 API を使いまくりです。というか、このクラスってずいぶん前に Win32 API / C++ で作ったものを C# に置き換えただけだったりします。ほんとは、.NET らしい実現方法があるのかもしれませんが、とりあえずこれで良しとしています(^^;
using System;using System.Runtime.InteropServices;using System.Threading;using System.Windows.Forms;using System.Text;/// <summary>/// タイムアウトつきのメッセージボックスを表示するクラスです。/// </summary>public class MessageBoxTimeout
{ [DllImport("kernel32.dll")]private static extern uint GetCurrentThreadId();
private delegate int EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
[DllImport("user32.dll")]private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);
[DllImport("user32.dll", SetLastError=true)]
private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
[DllImport("user32.dll")]private static extern int GetClassName(IntPtr hWnd, [Out] StringBuilder lpClassName, int nMaxCount);
[DllImport("user32.dll")]private static extern bool IsWindowEnabled(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]private static extern bool PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
/// <summary> /// 別スレッドでタイムアウトを監視するためのクラスです。 /// </summary>private class TimerThread
{ private DateTime timeoutTime;private uint currentThreadId;
private bool terminateFlag;
private Thread thread; /// <summary> /// コンストラクタです。 /// メッセージボックスのタイムアウト監視を開始します。 /// </summary> /// <param name="timeoutMillisec">タイムアウト値(ミリ秒)。</param>public TimerThread(int timeoutMillisec)
{ this.timeoutTime = DateTime.Now.AddMilliseconds(timeoutMillisec); this.currentThreadId = GetCurrentThreadId();this.terminateFlag = false;
this.thread = new Thread(new ThreadStart(this.ThreadProc));
this.thread.Start();}
/// <summary> /// スレッド関数です。 /// </summary>private void ThreadProc()
{while (!this.terminateFlag)
{Thread.Sleep(100);
if (DateTime.Now > this.timeoutTime)
{ // タイムアウトが発生 // EnumWindows API を使ってメッセージボックスウインドウを探すEnumWindows(new EnumWindowsProc(this.EnumWindowsProc), new IntPtr(0));
return;}
}
}
/// <summary> /// メッセージボックスウインドウを探して、見つかった場合は閉じます。 /// </summary> /// <param name="hWnd"></param> /// <param name="lParam"></param> /// <returns></returns>private int EnumWindowsProc(IntPtr hWnd, IntPtr lParam)
{ uint processId; uint threadId; threadId = GetWindowThreadProcessId(hWnd, out processId);if (threadId == this.currentThreadId)
{StringBuilder className = new StringBuilder("", 256);
GetClassName(hWnd, className, 256);
if (className.ToString() == "#32770" && IsWindowEnabled(hWnd))
{const int WM_COMMAND = 0x111;
PostMessage(hWnd, WM_COMMAND, new IntPtr(2), new IntPtr(0));
return 0;}
}
return 1;}
/// <summary> /// タイムアウト監視用スレッドを終了させます。 /// </summary>public void Terminate()
{this.terminateFlag = true;
this.thread.Join();}
}
/// <summary> /// 指定したテキストのボタンを表示するメッセージ ボックスを表示します。 /// </summary> /// <param name="text">メッセージ ボックスに表示するテキスト。</param> /// <returns><see cref="DialogResult"/> 値の 1 つ。</returns>public static DialogResult Show(string text, int timeoutMillsec)
{ TimerThread tt = new TimerThread(timeoutMillsec); try { return MessageBox.Show(text);}
finally {tt.Terminate();
}
}
/// <summary> /// 指定したテキスト、およびキャプションのボタンを表示するメッセージ ボックスを表示します。 /// </summary> /// <param name="text">メッセージ ボックスに表示するテキスト。</param> /// <param name="caption">メッセージ ボックスのタイトル バーに表示するテキスト。</param> /// <returns><see cref="DialogResult"/> 値の 1 つ。</returns>public static DialogResult Show(string text, string caption, int timeoutMillsec)
{ TimerThread tt = new TimerThread(timeoutMillsec); try { return MessageBox.Show(text, caption);}
finally {tt.Terminate();
}
}
/// <summary> /// 指定したテキスト、キャプション、およびボタンのボタンを表示するメッセージ ボックスを表示します。 /// </summary> /// <param name="text">メッセージ ボックスに表示するテキスト。</param> /// <param name="caption">メッセージ ボックスのタイトル バーに表示するテキスト。</param> /// <param name="buttons">メッセージ ボックスに表示されるボタンを指定する <see cref="MessageBoxButtons"/> 値の 1 つ。</param> /// <returns><see cref="DialogResult"/> 値の 1 つ。</returns>public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, int timeoutMillsec)
{ TimerThread tt = new TimerThread(timeoutMillsec); try { return MessageBox.Show(text, caption, buttons);}
finally {tt.Terminate();
}
}
/// <summary> /// 指定したテキスト、キャプション、ボタン、およびアイコンのボタンを表示するメッセージ ボックスを表示します。 /// </summary> /// <param name="text">メッセージ ボックスに表示するテキスト。</param> /// <param name="caption">メッセージ ボックスのタイトル バーに表示するテキスト。</param> /// <param name="buttons">メッセージ ボックスに表示されるボタンを指定する <see cref="MessageBoxButtons"/> 値の 1 つ。</param> /// <param name="icon">メッセージ ボックスに表示されるアイコンを指定する <see cref="MessageBoxIcon"/> 値の 1 つ。</param> /// <returns><see cref="DialogResult"/> 値の 1 つ。</returns>public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, int timeoutMillsec)
{ TimerThread tt = new TimerThread(timeoutMillsec); try { return MessageBox.Show(text, caption, buttons, icon);}
finally {tt.Terminate();
}
}
/// <summary> /// 指定したテキスト、キャプション、ボタン、アイコン、および既定のボタンを表示するメッセージ ボックスを表示します。 /// </summary> /// <param name="text">メッセージ ボックスに表示するテキスト。</param> /// <param name="caption">メッセージ ボックスのタイトル バーに表示するテキスト。</param> /// <param name="buttons">メッセージ ボックスに表示されるボタンを指定する <see cref="MessageBoxButtons"/> 値の 1 つ。</param> /// <param name="icon">メッセージ ボックスに表示されるアイコンを指定する <see cref="MessageBoxIcon"/> 値の 1 つ。</param> /// <param name="defaultButton">メッセージ ボックスの既定のボタンを指定する <see cref="MessageBoxDefaultButton"/> 値の 1 つ。</param> /// <returns><see cref="DialogResult"/> 値の 1 つ。</returns>public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, int timeoutMillsec)
{ TimerThread tt = new TimerThread(timeoutMillsec); try { return MessageBox.Show(text, caption, buttons, icon, defaultButton);}
finally {tt.Terminate();
}
}
/// <summary> /// 指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、およびオプションを表示するメッセージ ボックスを表示します。 /// </summary> /// <param name="text">メッセージ ボックスに表示するテキスト。</param> /// <param name="caption">メッセージ ボックスのタイトル バーに表示するテキスト。</param> /// <param name="buttons">メッセージ ボックスに表示されるボタンを指定する <see cref="MessageBoxButtons"/> 値の 1 つ。</param> /// <param name="icon">メッセージ ボックスに表示されるアイコンを指定する <see cref="MessageBoxIcon"/> 値の 1 つ。</param> /// <param name="defaultButton">メッセージ ボックスの既定のボタンを指定する <see cref="MessageBoxDefaultButton"/> 値の 1 つ。</param> /// <param name="options">メッセージ ボックスで使用する表示オプションと関連付けオプションを指定する <see cref="MessageBoxOptions"/> 値の 1 つ。</param> /// <returns><see cref="DialogResult"/> 値の 1 つ。</returns>public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, int timeoutMillsec)
{ TimerThread tt = new TimerThread(timeoutMillsec); try { return MessageBox.Show(text, caption, buttons, icon, defaultButton, options);}
finally {tt.Terminate();
}
}
}
9/10(金) TechEd 4日目
■ T2-367 SQL Server 2005 : SQLCLR - .NET Framework ベースのデータベースプログラミング -
スピーカーはマイクロソフトの梅津さん。Room B。
うーん、やっぱり面白いです、SQLCLR。
テーブル値ファンクションを SQLCLR で作るといろんなことに使えそうですよねぇ(具体的になにに使えるかはすぐには思いつかないですが(^^; )。
SQLCLR と直接関係あるわけじゃありませんが、パフォーマンスログを取っておけば、プロファイラでプロファイルといっしょに表示されるそうです。どこで負荷が高くなっているのかなんかを追いかけるときに便利ですね。
SQLCLR でもユーザ定義関数の場合はデータアクセスは読み込みのみ可だそうです(T-SQL も同じだっけかな)。ただ、その際は DataAccessAttribute で明示してあげる必要があるそうです。
[SqlProcedure] の場合、引数を ref にすると T-SQL の output になるそうです。また、戻り値がデフォルトで void ですが SqlInt32 に変えることはできるそうです。
System.Web.Mail は SQLCLR からは使えないけど、Web Service は普通に呼べるという話がありました。どちらも TCP を使った通信という意味では似たようだと思うんですけど、なんでこういう違いがあるんでしょう?こういったセキュリティ回りのことは要調査でしょうね。
最後のほうで、「データアクセスには T-SQL を使うべき」 「ビジネスロジックは論理的にわけるべき(すべてを SQLCLR で済ましたりしない)」 という話がありました。
やっぱりそうですよねぇ。
T-SQL ではなく SQLCLR を使うべきところとしては、
ということでした。
■ T5-418 Web Service Enhancements 2.0 を利用したメッセージングアプリケーションの構築
スピーカーはアマゾンジャパンの吉松さん(MVP でもある)。Room B。
とてもおもしろいセッションでした。実はアンケートの 「一番よかったセッション」 で私はこのセッションを上げました。
そうかぁ、Web サービスは RPC over Web ではなかったんですねぇ。
目から鱗という感じでした。
# けど、便利で楽チンだからという理由で WebMethod を使っちゃダメですか?
# あれ?けど、.NET Remoting over HTTP にすれば済んじゃう場合がほとんどで、
# WebMethod を使ったほうがいい場合なんてほとんどないかも。
■ Peer Talk Lunch
スピーカーの方やエバンジェリストの方などと話をしながら食事(立食)ができるランチです。
私も何人かの方とお話させていただきました。
# しかし、こういう場になると必ず文字コード認識とタイムゾーン、
# MSHTML の話をしているような気がする>某その筋の方(^^
■ T5-409 上級者のための ASP.NET プログラミング
スピーカーは NEC の山崎さん(MVP でもある)。Room A。
正直言って、このセッションはちょっと残念なセッションでした。
いや、別に内容自体がどうこうというわけじゃないんですよ。ただ、このセッションの内容が上級者向けとはとても思えないというか。この内容で喜ぶのは初心者レベルの人で、中級者くらいの人にはちょっとした復習くらいじゃないのかなぁ。
それと、途中で出てきた設定ファイルの読み込みについては、IConfigurationSectionHandler だけじゃなく XmlSerializer と組み合わせて使ったほうがいいんじゃないかと思うんですが。
■ T2-368 SQL Server 2005 : XML テクノロジー
スピーカーはマイクロソフトの高橋さん。Room B。
いやー、やっぱり SQL Server 2005 の XML はおもしろいなぁ。
SQL Server 2005 では XML データ型が増えてるわけですが、XML データ型は Uniqe 制約、キー制約はつけることはできないそうです(そりゃそうだ)。
XML データ型は 「実際には XML インスタンスを格納する」 とのことでした。んで、ここで疑問。
格納されている XML インスタンスって具体的には何なんでしょう?まさか XML を文字列で保存してるってわけじゃないんですよね?ひょっとして CLR の XmlDocument をシリアライズしたものなんでしょうか?それとも独自の DOM だったりするんでしょうか?
それから XML データ型のサイズは 2G までってことだったんですが、何が 2G までなんでしょう?XML を文字列で表現したときの上限が 2G なんでしょうか?(その場合、utf-8 か utf-16 かでずいぶん違うな) それとも DOM をシリアライズした結果が 2G なんでしょうか?(でも、それじゃ入れてみないことにはどれくらいのサイズになるのかわかんないな)
うーむ。
XML Schema を指定したほうがあらかじめ解釈の準備ができるため速いというようなことも言っていたような。これもちょっと気になるところですね。
ただ、スキーマの取り扱いにはちょっと面倒なところもありますね。慣れが必要そう。
そういえば、XML データ型内のノードなどに対してインデックスを作れるそうです(XML インデックス)。ただ、プライマリ XML インデックスが必要で、これはルートノードなどに作るそうです。するとセカンダリ(というかプライマリ以外)のインデックスが作れるようになり、これはタグ、値、パスに対して作成できるそうです。
ちょっとタグとパスがどう違うのかとか属性は?とかよくわかんないところもありますが、なんにしろ 「いろいろとインデックスが作れる」 ということのようです。
そういや、SQL の select にあたるのが XQuery で、select 以外のところは XML-DML と言うそうです。ほんとは XQuery に更新系も含まれてくれるといいんですけどね。
■ T5-407 Windows フォームにおけるパフォーマンス向上の実現
スピーカーはマイクロソフトの平井さん。Room B。
基本的なことだと思えるような部分もありましたけど、なかなかおもしろいセッションでした。
言われてみればそりゃそうなんですが、
なんてのは忘れがちなところですね。
マルチスレッディングのところで Form.Invoke を指して 「ここは必ず Invoke です。ここを BeginInvoke にすると、また、別のスレッドにいっちゃいますからうまく動きません」 みたいなことを言ってましたがそんなことないですね。Form.BeginInvoke は別のスレッドになんていきません。非同期 delegate の Invoke、BeginInvoke と Form(Control)の Invoke、BeginInvoke とでごっちゃになっちゃってたものと思われます。
Windows.Forms の場合 ngen も効果があるかも、というのは 「へぇ~」 でした。
あと、最後のほうでさらっと 「Class よりも Structure」 みたいなのがあったんですが、これはちょっと危ないですね。ArrayList に出し入れしたい場合などは Structure だと Boxing が発生するためかえって遅くなる可能性があると思います。もちろん、そうじゃないときはヒープを確保する必要がないので Structure のほうが速いはずなんですが。
■ (やっぱり) 飲み会
MVP な方、コミュニティな方、マイクロソフトな方など(27人くらい)でお疲れさま会。
その後、11名ほどで二次会。
9/9(木) TechEd 3日目
■ T5-348 ASP.NET 2.0 概説
スピーカーはマイクロソフトの近藤さん。Room A。
どれも聞いたことはある内容だったんですが、あらためて聞くとやっぱりすごいですねぇ。
などなど。
実は ASP.NET 2.0 は (あまり) 追いかけてなかったんですが、やっぱりおもしろそうです。
■ T5-337 Visual Studio 2005 における ADO.NET 2.0 の新機能
スピーカーはマイクロソフトの高橋さん。Room A。
ADO.NET 2.0 の新機能は山盛りだそうです(^^;
その中の一部を取り上げたセッションだったわけですが、ここではさらにその一部を。
DataSet.RemotingFormat で binary Remoting にすればパフォーマンスが改善する(かも)だそうです。もちろん、デフォルトではオフ(XML ベースのシリアライズ)。これは互換性のため。んで、バイナリフォーマットと言っても、データの中身(数値とか) は文字列のままで、タグの部分とかがバイナリになるそうです。また、データの量が少ない場合やフィールドが 1つしかないような場合などはバイナリにしたほうがサイズが大きくなってしまう場合もあるそうです。なので 「常にバイナリにしたほうがいい」 というような種類のものではないみたい。
DataTable が機能拡張されて DataSet と同等なメソッドが追加されるそうです。なので、リレーションとかが必要ない場合は DataSet ではなく DataTable を使えばよりシンプルになると。
抽象化されたデータプロバイダが追加されるそうです(DbXXX クラスたち)。
それに DbProviderFactories なんかも追加されるので、これを使って
DbProviderFactory factory = DbProviderFactories.GetFactory(provider-name);
DbConnection con = factory.CreateConnection();
DbCommand cmd = factory.CreateCommand();
なんて感じにプロバイダ非依存なコードが書きやすくなるとのこと。
MDAC は 2.8 でおしまい。以後は Windows プラットホームの一部としてリリースされて、SQL Server に関する部分のみが SQL Server のリリースにあわせて SNAC としてリリースされるそうです。
SqlDependency はおもしろそうでした。相手は SQL Server 2005 に限られるようですが、SqlCommand を指定して SqlDependency を作りイベントハンドラを登録しておくと、更新があったときにそのイベントハンドラが呼び出されるというものです。SQL Server 2005 の Query Notification をベースに実装されているそうです。ただ、(現状では) SQL 文に制約があり、詳細は SQL Server 2005 の BooksOnline を Notification などで検索すると書いてあるらしいです。
とりあえず、わかっている範囲では
だそうです。
似たようなものに SQL Server 2005 の Notification Service とか Service Broker とかがあるとのこと(この辺はあんまり押さえてないなぁ)。
あと、Multiple Active ResultSet(MARS) といって、1つのコネクションだけを使って複数の SqlDataReader で読み込むことができるようになるそうです。つか、今までできなかったことに気付いてませんでした(^^; 基本的にコネクションプーリングに任せて、1コネクション 1クエリと思ってましたので。
■ お昼ごはん
ロイホにて。
■ T5-339 Visual Studio 2005 Team System の概要
■ T5-365 Visual Studio 2005 Team System が提供する革新的開発プラットフォーム
Team System の話です(そりゃそうだが)。
内容自体は盛りだくさんでした(というか Team System 自体が盛りだくさんなのか)。
けど、盛りだくさんすぎて自分の中でも整理できてないので、ここではこれだけ。
■ T5-417 N 階層アプリケーションにおけるステート管理
スピーカーはオムニドメインの古山さん。Room B。
実は楽しみにしていたセッション。んで、実際おもしろかった。
私もかなり気になってる部分なんですよね。
もちろん、セッションの内容は 「こうすればステート管理は万事 OK」 というものじゃなかったです(そんなものがあれば誰も苦労しないんですけどね)。基本的には 「要件にあわせてうまいこと考える」 ということになっちゃうみたいです。セッションの中でも 「ぜんぜん考えてなくて無茶苦茶なシステムもある。あとで修正しようとしても作り直しに近いくらい大変になることもある」 なんていう話も出てました。初めからちゃんと考えましょうね。
■ Welcome to INETA Japan Events!
Room E で行われたパネルディスカッション「次期開発環境を語ろう」 にパネラーとして参加させていただきました。
http://www.ineta.jp/activity/event/teched04/teched04.htm
河端さん司会のもと、パネラーとして渋木さん、生形さん、堀田さん、私、そしてゲストのキャメロンさんが参加して Cω を語るというものです。
基本的には、河端さんがサンプル (セットアップすると自動的に入るもの) を示しながらいろいろとデモってくれて、それを見ながらみんなで突っ込みを入れるという構成でした。いやぁ、あらためて見るとやっぱり Cω っておもしろいですねぇ。これがそのまま C# 3.0 になるとはとても思えませんが、プログラミング言語の一つの方向性ではあると思います。
んで、スケジュール上は Cω 以外の話題もするはずだったんですが、結局 Cω の話題だけで時間を使い切っちゃいました(^^;
パネラーとして参加させていただくことができ、とても楽しかったです。
INETA Japan のみなさん、パネラーのみなさん、また、セッションに参加してくださったみなさんに感謝致します。
■ (やっぱり今日も) 飲み会
MVP 10人ほどで中華屋さんに行きました。
その後、4人ほどで二次会 (居酒屋) へ。
9/8(水) TechEd 2日目
■ キーノートスピーチ
あちこちで紹介されてますし、内容はばっさり省略(^^;
いや、昨日 (というか今朝か?) ちと飲みすぎたらしく、ヘロヘロだったんでぜんぜんメモってなかったんです(^^;
一応、聞いてはいたんですけどね。
■ Visual Studio 2005 Team System テクニカルラウンドテーブル
これは通常のセッションではありません。MVP 向けの特別セッションです。
ただ、機密事項とかではなく、内容自体はすでにリリースされている 「Visual Studio 2005 Beta 1 Refresh with Visual Studio 2005 Team System」 をベースにしたものです。
Team System の部分は今まで Microsoft の製品としては存在しなかったジャンルですし、実際に見てみるといろいろと要望が出てきますね。で、Visual Studio 2005 はすでに Beta の段階ですが、Team System の部分はまだ Community Technology Preview の段階です。なので、まだ間に合うかもしれません。皆さんも何か気付いたところがあったらじゃんじゃん要望を出しましょう。
# といっても、試すための環境を作るのが大変なんだけどね(^^;
■ お昼ごはん
中華屋さんでラーメンとチャーハンのセットを食べました。
■ T5-336 Visual Basic 2005 における言語の強化点
スピーカーは NEC の山崎さん(MVP でもある)。Room B。
個人的には一応押さえていたところばかりだったので、特に目新しいことはなかったです。
ただ、MyApplication の Startup イベント、Shutdown イベントなどなどといったものがあるんですね。これって C# にもあるんだろうか?
セッション終了後に キャメロンさん と出会いました。キャメロンさんは、今年の春くらいまでは Microsoft で VB.NET/VB2005 の開発をしていた方で、Microsoft を退職後、今は日本にいらっしゃいます(日本語を勉強中だそうです)。
で、キャメロンさんから 「VB は好きですか?」 と聞かれたんですが、、、「ごめんなさい。私は C# が好きです」(いや、別に謝る必要はないんだけどね(^^; )
次の C# のセッションも聞きたかったので、休憩時間が終わったところでお別れしました。もっとお話したかったんけどね。
■ T5-335 Visual C# 2005 における言語の強化点
スピーカーは NRI の矢嶋さん(MVP でもある)。Room B。
個人的にはすべてガイシュツだったため、ばっさり省略(^^;
■ T5-347 Win32 / MFC アプリケーションにおける .NET Framework の利用
スピーカーは NRI の矢嶋さん(MVP でもある)。Room B。
てっきり、C++/CLI ベースの話なのかと思っていたら、現行の VS.NET 2003 の Managed C++ の話でした。
けど、かなーり面白かったです。どうやら Windows.Forms なコントロールは、ActiveX コントロールとして必要なインターフェースを意外と揃えていて、うまく使ってやればそれなりに MFC に組み込める(MFC のビューとして使える) ということらしい。(と、こんだけじゃ何のことやらわかんないでしょうけど)
実際、そこまでして MFC を使うことがあるかどうか怪しいけど、技術的な話としてはほんとに面白かったです。
■ らっぷあらうんど TechEd -Day2-
吉松さん、溝淵さん、山崎さん、テクニカルエバンジェリストの西谷さんによるらっぷあらうんど。
みんなでわいわいがやがや質問コーナーって感じです。こういうのって面白いですねぇ。
後ろにはエバンジェリストな皆さんがずらっと控えてました。
■ TechEd & MSDN 10th Anniversary Party
豪華景品のウルトラクイズあり、セグウエイの試乗会あり、ラジコンカー大会ありのなかなか盛大なパーティでした。ただ、音響がうるさすぎてちょっと話をするのに困りましたね。
そこで、そこそこで切り上げて、その後 4人ほどで飲み屋さんに行きました(まぁ、うるさくなくても飲みに行っただろうけど)。