2005年5月27日金曜日

ASP.NET 2.0のAJAXサポート

詳しくは@ITの記事の真ん中あたりを見てほしい。

string src = Page.ClientScript.GetCallBackEventReference(
control, "arg", "MyCallback", "ctx", "MyErrorCallback");

とまあ、こんなコードを書く。すると、srcには次のような文字列が入る。
WebForm_DoCallback('****',arg,CallBack,ctx,CallBackErr,true)

これはつまり、WebForm_DoCallback関数を呼び出すJavaScriptだ。****には実際にはcontrol.ClientID(これはHTMLにレンダーされたときのID値だ)が入る。

「WebForm_DoCallback関数とやらはどこで定義されてるんだよ」という疑問はごもっとも。GetCallBackEventReference()を呼び出すと、文字列を返すのと同時に、Page(Javaでいうサーブレットのインスタンスみたいなもんだ)に
<script src="WebResource.axd?d=何か;t=何か" type="text/javascript"></script>

みたいなJavaScript参照が埋め込まれるのだ。で、その参照しているJavaScriptの中にWebForm_DoCallback関数が定義されているというわけだ。

WebForm_DoCallback関数は何するものぞ。オーケイ、コピペしよう。
function WebForm_DoCallback(
eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) {
var postData = __theFormPostData +
"__CALLBACKID=" + WebForm_EncodeCallback(eventTarget) +
"&__CALLBACKPARAM=" + WebForm_EncodeCallback(eventArgument);
var xmlRequest;
var usePost = false;
if (__nonMSDOMBrowser) {
// http:
// And: http:
xmlRequest = new XMLHttpRequest();
if (pageUrl.length + postData.length + 1 > 10000) {
usePost = true;
}
if (usePost) {
xmlRequest.open("POST", pageUrl, false);
xmlRequest.setRequestHeader(
"Content-Type", "application/x-www-form-urlencoded");
xmlRequest.send(postData);
}
else {
if (pageUrl.indexOf("?") != -1) {
xmlRequest.open("GET", pageUrl + "&" + postData, false);
}
else {
xmlRequest.open("GET", pageUrl + "?" + postData, false);
}
xmlRequest.setRequestHeader(
"Content-Type", "application/x-www-form-urlencoded");
xmlRequest.send(null);
}
var response = xmlRequest.responseText;
if (response.charAt(0) == "s") {
if ((typeof(eventCallback) != "undefined") && (eventCallback != null)) {
eventCallback(response.substring(1), context);
}
}
else {
if ((typeof(errorCallback) != "undefined") && (errorCallback != null)) {
errorCallback(response.substring(1), context);
}
}
}
else {
xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
xmlRequest.onreadystatechange = WebForm_CallbackComplete;
__callbackObject.xmlRequest = xmlRequest;
__callbackObject.eventCallback = eventCallback;
__callbackObject.context = context;
__callbackObject.errorCallback = errorCallback;
if (pageUrl.length + postData.length + 1 > 2067) {
usePost = true;
}
if (usePost) {
xmlRequest.open("POST", pageUrl, useAsync);
xmlRequest.setRequestHeader(
"Content-Type", "application/x-www-form-urlencoded");
xmlRequest.send(postData);
}
else {
if (pageUrl.indexOf("?") != -1) {
xmlRequest.open("GET", pageUrl + "&" + postData, useAsync);
}
else {
xmlRequest.open("GET", pageUrl + "?" + postData, useAsync);
}
xmlRequest.setRequestHeader(
"Content-Type", "application/x-www-form-urlencoded");
xmlRequest.send();
}
}
}

IE以外にも対応してるし。おもしろいもんですね。

2005年5月24日火曜日

康隆の結婚式

早稲田教会にて。
時間を間違え遅刻するという大失態。

その後信愛学舎でパーティ。
スピーチは、もっと褒めればよかったね。でもうけは取れたからよし。

結婚自体は、ごくふつうに「良かったな。」と思う。
でもそれ以上に、友人たちに囲まれて、みんなに祝ってもらって、幸せそうにしている二人が、我が事のように嬉しい。

いい式でした。

2005年5月16日月曜日

ウサギ2

冗談のはずがパチスロで勝ってしまい、ウサギを飼うことに。

「飼うならピーターラビットみたいなのがいいなあ。」そうと決まれば下調べ。正月もあけない2000年の1月3日、行動を開始した。
近所のペットショップにもウサギはいたが、もっとたくさんの中から選びたいと思い、あちこちのペットショップに電話をかけまくった。ペットショップだけじゃなくて、里親を募集しているWebサイトも見た。そんな中、大塚のペットショップに電話したら、ウサギが10匹近くいるというので、rolioと2人で向かった。

ちょっと狭くて暗めのそこには確かにウサギがたくさんいた。ピーターラビットっぽいのもいた。ブサイクなのもいた。面白かったのが、白い色に黒斑のウサギ兄弟。彼らはみな目の周りに隈取のような模様があったのだ。「ははは、こいつら歌舞伎みたいだなあ。」と笑い飛ばした後、お目当てのピーターラビットみたいなのを抱いてみる。うん、かわいい。かわいいんだけれど…
心のどこかに引っかかるものが。そうだ、あいつらだ。あの歌舞伎ウサギ。好みとはぜんぜん違うウサギのくせに、何か心に訴えかけてくるものがある。おかしいな。かわいくないのに。かわいくないのに。
ちっくしょー、お前を連れて帰らなかったら、きっと後悔する!

運命的な出会いというのは、こういうことなのだろうか。3匹の歌舞伎兄弟の中で一番元気そうで人なつっこそうなのを選び、家につれて帰った。

2005年5月14日土曜日

Visual Studio 2005 Team System

Windows Developerマガジンに、VSTSについて原稿を書きました。次号にVSTS Beta 2 日本語版が付録添付されるのに合わせてということです。

記事の内容は機能の簡単な紹介程度です。さてどのくらい赤が入るでしょうか……



2005年4月25日月曜日

Visual Studio 2005 Beta 2 日本語版

MSDN サブスクライバ ダウンロードに登場しました。



  • Visual SourceSafe 2005 Beta 2 (Japanese)

  • Visual Studio 2005 Team Edition Test Load Agent Beta 2 (Japanese)

  • Visual Studio 2005 Team Suite Beta 2 (Japanese)

  • Visual Basic 2005 Express Beta 2 (Japanese)

  • Visual C# 2005 Express Beta 2 (Japanese)

  • Visual C++ 2005 Express Beta 2 (Japanese)

  • Visual Web Developer 2005 Express Beta 2 (Japanese)


GW直前だと予想していたけど、それより早かった。

(4/25追記)あれ?消えた?

(4/26追記)公式発表出ました。



2005年4月2日土曜日

IronPython

CPLからShared Sourceに変わったのはその通りなんだけど、Shared Sourceといっても1種類ではなくって、ソフトウェアによってその内容は変わるので、毎回きちんとライセンス条項を読まないとだめぽ。

http://www.gotdotnet.com/workspaces/License.aspx?id=ad7acff7-ab1e-4bcb-99c0-57ac5a3a9742

FAQのところに「OSI準拠ではありません」と書いてある。それはいいんだけど、不勉強なもので、どの条項がOSI基準を満たしていないのかよくわかってないです。誰か教えてくれないかなあ。

2005年3月25日金曜日

Visual Studio Hacks

(オレンジニュース経由)

O’ReillyのHacksシリーズに新刊が。これいいなあ。VS.NETはいろんなカスタマイズが可能だったり、いろんなアドインを作れたり、あるいはデザイン時サポートなんて機能もあったりする*んだけど、いまいち使いこなせていない。そんなときにこの本があるといいだろうな。欲しいなあ。


(追記)デザイン時サポートはVS.NETだけで使う機能ではない。コメント参照のこと。



2005年3月18日金曜日

MSH - The next Windows Command Shell

(draft)
http://channel9.msdn.com/wiki/default.aspx/Channel9.MSHWiki

リッチクライアントの一例

損保ジャパンDIY生命保険
フコク生命保険選びフィット
はFlashでできている。

道具にXXXを使ったからこういうUIができた、という話ではないのだ。目的(資料を請求してもらう数を増やしたい)達成のためにはどういうUIであるべきか(入力させる量を減らす、おすすめプランの提示までにかかる時間を短縮する、利用者が関心を持った情報のみ詳しく提供する)をしっかり検討しないといけなかったはず。

こういう検討って業務アプリケーションでは充分になされてない印象がある。あるんだけども、そういう検討の結果リッチなUIが必要だという結論が出てくるような業務アプリケーションってなんだろう。

データ入力系は除く。あれはキーボードによる高速操作が要求されているのであって、(Webでは困難であったとしても)それをリッチなUIと呼ぶのかは疑問だ。

2005年3月17日木曜日

みんなで作る Tech・Ed 2005

GotDotNet JapanでのMS長崎さんの投稿によると、今年のTech Edのセッションテーマを公募するそうだ。

僕自身は、新技術に興味があるのは当然だが、パフォーマンスチューニングやデバッグの実践的な手法(たとえば、パフォーマンスカウンタをどう読んでどうフィードバックするか)なんてことにも関心がある。

他の参加予定のみなさんは、どんなことに興味をもっているんでしょうか。それも含めて楽しみです。