2008年4月2日
#
Silverlight + JavaScriptなネタですが、ちょっとしたトランザクション処理と見立てると面白いと思うので、あえてPASSJブログへ、Webリソース読み込みというトランザクション処理、というものを書いてみます。別途MSDNブログにも書きたいと思っています。
このところSilverlightに関わることが増えて、実際に動かすためのコードを書いていることが多いです。その先には技術啓蒙があるものの、「百聞は一見にしかず」で動いているものをお見せして、その裏側のからくりをきちんと説明できる状況に自分自身を置くことを心がけてます。いわゆる借りてきたサンプルを動作させるのではなく、要件に合致したものを組み上げていくということが中心になっているので、実際のコードを書いていることが多くなるわけです。
今のところはSilverlight 1.0による技術的なチャレンジに向き合っていますが、頭で考えたことが現実の形になると本当に面白いものだということを、今更ながら実感しています。私が駆け出しのプログラマーだった頃の日々の喜びみたいなものをIT業界で19年を過ごし、20年目に突入したばかりのおっさんが感じているわけですから、それは本当に面白いんです。また、ものすごい多数の目に触れるものに手を入れていることもあり、ただ面白いだけではなく、ものすごい緊張との戦いであることも事実です。自分自身の興味のためのプログラミングではなく、他人に使ってもらうアプリケーション構築であるので、きちんと要求を満たす、ということは最低条件として、想定しているシナリオ上で予期せぬ例外が発生しないようにする、というのも必ず意識しています。
たとえば、次のページにあるSilverlightアプリケーションには、私が考案した安定稼動のためのロジックが入っています。
http://www.microsoft.com/japan/business/solutions/virtualization/rio.mspx
初期のバージョンは別の方が作られたものですが、インターネット上の配置において予期せぬ問題が発生し、私の調査から安定稼動のためのコードを提示して組み込んでいただき、改良を加えたものです。
この単純なアプリケーションでも、トランザクションの問題のように正常動作か例外か、を切り分けるための再帰呼び出しによる仕掛けが入っています。わかってしまえば単純なことなのですが、その単純なことが未経験者のテスト環境ではわからないことがあります。
多くの場合、リソースの読み込みはルーズに書いてもテスト環境ではうまく行きます。リソースがダウンロードできない状況をテストしていないからです。でも必ずしもHTTP GETが成功するとは限らないのです。成功しなかったら、失敗という状態にあることをアプリケーションが理解する必要があります。しかし、そのために数多くのif文を書くのは可読性においても保守性においても好ましくありません。
で、やったことは、次のようなコードを作ったことです。
var LoadedResourceCount = 0; // 読み込まれた画像の数
var ExpectedNumberOfResources = 38; // 想定している画像の総数
// 読み込み成功:XAML上は"Loaded"にマッピングされるイベントハンドラ
function OnResourceReady(sender, args) {
if (LoadedResourceCount >= 0) { // 画像読み込みエラーが起きてないことを確認して、成功数を加算する
LoadedResourceCount ++;
}
}
// 読み込み失敗:XAML上は"ImageFailed"にマッピングされるイベントハンドラ
function OnResourceFailed(sender, args)
{
LoadedResourceCount = -1; // 読み込みエラーは-1と定義する
}
function IsReadyToRunThisApp()
{
if (LoadedResourceCount == ExpectedNumberOfResources) { // すべて読み込まれたので実行してよい
return true;
}
else {
return false; // まだ読み込みが終わっていないので実行してはいけない
}
}
function IsFailedToRunThisApp()
{
if (LoadedResourceCount == -1) { // 読み込み失敗しているので、実行できない
return true;
}
else {
return false;
}
}
var idTimeout;
function WaitForAllResourceLoaded()
{
if (IsReadyToRunThisApp() == true ) {
clearTimeout(idTimeout);
return true;
}
else if (IsFailedToRunThisApp() == true ) {
clearTimeout(idTimeout);
return false;
}
}
これを準備した段階で、SilverlightのアプリケーションがXAMLをロードし終えた直後に、
idTimeout = setTimeout("WaitForAllResourceLoaded", 500);
// ..
if (WaitForAllResourceLoaded() == false) {
// 何らかのエラーメッセージを表示して、ブラウザの再読み込みを促す
return false;
}
// 以下、正常系
というコードを仕掛ければリソース読み込みが異常な場合は、最初のif文で判断が付き、トランザクション的な発想で成功か失敗かということを切り分けられるというものです。少なくとも正常系までステップが到達していれれば、Silverlightのランタイム上にはダウンロード済みのリソース(この場合、画像を想定)が見えているので、画像が表示できない、という問題は発生しないことになります。
Webアプリケーションなので、詳細レベルでは、HTTP GETのエラーうんぬんてなことを考えることもできますが、HTTPを利用しているランタイム上のフレームワークが、
・HTTP GETの成功 -> ファイルが見つかりダウンロードできた -> Loadedイベントの呼び出し
・HTTP GETの失敗 -> ファイルが見つからない -> ImageFailedイベントの呼び出し
という形になっていることを想像すれば(実際に、私自身も想像して考案したので)、フレームワーク上のイベントを処理すれば細かいことは気にしなくてよい、ということになります。現実に詳細レベルでは、フレームワーク内で非同期のダウンロードが実行されているので、一見簡単な処理で捕捉できないようにも思えますが、フレームワークを信じれば、単純な問題に帰着できるわけです。結局、リソースが準備できなければ、それ以降の処理をあきらめるしかないので、トランザクション的には失敗なわけです。反対に準備できればそれ以降の処理を継続できるので、トランザクション的には成功。
「ネットワークタイムアウトはどうなるの?」という疑問を感じた方へ、TCP/IPは無通信が一定時間継続するとタイムアウトして終了します。これは結局、HTTPレベルでも失敗なわけなので、問題ないと思います。Ajaxの通信でも正常終了時、タイムアウト(またはエラー発生時)のイベント呼び出しが分かれてますよね。これもWebサービスからの応答をトランザクションに見立てて成功・失敗で切り分けようと単純化しているものだと思います。
そんなわけで、Webリソースの読み込みというトランザクション処理を考えるのもありかもしれませんね。で、「待ってダメならあきらめよう」、Windowsだと「(約2分)待ってダメならあきらめよう」みたいな感じで。
これで、ブラウザ上のリッチクライアントでもリソースのダウンロードの成否がはっきりするので、安心して利用できるのではないでしょうか。皆様もお試しあれ。
本内容はデータベースとは無関係ですが、非同期通信におけるトランザクションとしては他にも応用できるかもしれません。何か面白いアイディアを見つけたら教えていただけると幸いです。
2008年2月20日
#
SQL Server 2008に搭載される新機能すべてを備えた最新のプレビュー版が公開されています。
これは日本語評価版として、初めてのCTPです。ぜひお試しを。
ダウンロードは、こちらから。
SQL Server 2008自習書シリーズも要チェック。こちらから。
2008年2月5日
#
仮面ライダー電王ではないのですが・・・。
最近、まわりまわって過去に努力していたことがすべてつながって未来に向かっているような感覚を強くするような体験が毎日のように起こり、忘れていた何かを呼び起こしてくれる人との出会いが続いています。必ずしもそれがリアルな出会いだけとも限らないですし、IT以外の世界の人や世代を超えた人々との出会いも含んでいます。
予知夢とでも言いましょうか、過去に先取りした感じがあったいろんな出来事があって、それがその後、すぐに消滅の道を歩み、自らもその道を断念するということが数多くありました。その都度、「自分が関わると消えてなくなるかもしれない」という変なジンクスの中でいろんな技術と向き合っては離れ(というか離され、が正解かも)、その経緯の中での努力がいったい何につながるんだろう、って疑問に感じてました。
で、昨年の7月くらいからSilverlightを軸に改めていろんなことを積み上げてきたところ、どうやら、過去にやってきたことや、やりたかったことが全部つながるらしい、そのころの概念は今でも通用するかもしれない、ということにふと気がつき始めました。
あまりにも抽象的過ぎるので、もっと具体的に書ける部分を示すと。
・画像処理の経験 -> ビデオ制作の現在、メディア利用のRIAの未来
・モデリングやデータアクセスの経験 -> Entity Framework、LINQ、データバインディング可能なSilverlight
・EAIやサービスマネージメントの経験 -> WCF+WFなサービスとの連携、Composite Application、S + Sの今とこれから
・仮想マシンを使った開発経験 -> Hyper-V、Virtualizationのこれから
他にもあれこれあるんですが、かつて何度も繰り返し手を動かし考えて試行錯誤した日々に会得したものが、今でも通用する、これからも適用できるかもしれない、と思うと、とても不思議なんですが、これからが楽しみで仕方がありません。
昨日わかったことは、私自身が関わってきた分野は、Application Platformという部分に重点が置かれています。決してそれは開発ツールのことではなく、アプリケーションの実行環境という意味で、クライアントもサーバも含み、データベースも包含するものです。
そうやって考えてみれば、いろんな製品やソリューションを通じて、様々なアプリケーションの実行環境をどうにか動かしていくという、Application Managementという部分でも携わってきたことは多く、結果として多岐に及ぶ物事を見てきたようにも思います。
そんなごちゃごちゃしたことを難しく説明するよりも、ひとつのURLを示して、今までにない体験を提供できれば非常に面白いかと思ってます。それがRIAにおけるWebベースのdeploymentの醍醐味だし、サービスの連携やいろんなデータから合成されたビューを提供することで、人間に優しい(判断を苦しむことが少ないという意味で)ソフトウェアがもっと生まれてくるようにも考えています。
まぁ、ともかく、例示が必要だと思うので、ちょいと一発、あまり遠くない将来に、ここで話している内容の一部をきちんと動く形で、世界中の人に見せたいと思ってます。原型はすでにあるので、プラットフォームの進化に適合するのが最重要課題なんですが、それは今月中になんとかするとして。
改めて、あれやこれやと貢献できる未来を目指して、これからも進んでいきます。
2008年1月31日
#
最近はビデオ+アプリケーションで作品を公開しているので、自分自身がやっていることを他人に説明するのにURLや検索エンジンを使えるので、便利だったりします。
検索エンジンによって差があるのですが、知っている人の名前を入力したら、自分自身が手掛けた作品が検索結果の1ページ目に掲載されるってのを見ると、大変だけど地道にビデオ制作を続けるのもよいものだと思ったりしてます。
自分の名前以外で自分に関するものに到達するってのは、面白いものです。
PASSJのブログを始めたころといえば、仕事の内容は企業向けソフトウェア製品の開発なので、まずほとんど一般の人から見えるものは存在しなかったわけですが、それでも必要なお客様に役立とうという気持ちで向き合っていたのは今となんら変わりません。そんなわけで、「UTF-8対応Webアプリケーション・・・」や「楽観的・・・」を書いたときと、今とでは、あんまり気持ち的な違いはないにせよ、大人数でなくてもいいから必要だと感じている人に何か気付きをもたらしたい、という思いで行動できているのは自分自身を振り返ると興味深いところです。
最近のSilverlightによるコンテンツ配信は、よい意味で工数を減らすことを念頭に考えて、自分で書くコードが少ないように、誰がやってもできるように、ってなことを狙ってます。
現在はSilverlight 1.0の範疇でメディアの利用に重きを置いていますが、来るSilverlight 2.0では、データ(特に企業内データ)の可視化という点を踏まえて、何か気付きを提供できないものかと、仕事の片手間にぼーっと考えています。
まわりまわって、LINQあたりやSilverlightのデータバインディングサポートなどで、ようやくデータアクセスと向き合える位置に戻ってこれそうなので、またPASSJブログになんか残せないものかなぁ、って思ってます。それで、自分の名前以外で自分の手がけたことに対してネットから辿りつけるようなものが増えたらって思ってます。
2008年1月28日
#
広く紹介したいのであちこちマルチポストみたいになってしまってますが、Scott Guthrieのインタビューを公開しました。
英語ビデオですが、日本語字幕を手作業で丁寧につけていますので、視聴は難しくないと思います。
Silverlightを利用していますので、お使いのブラウザにインストールの上、下記のURLにアクセスしてください。http://www.microsoft.com/japan/msdn/events/vs2008/scott/interview.html
今回は、Scottの初期の仕事や、ASPからASP.NETになった歴史や、CLRがなぜ発展したのか、とか、彼とASP.NET、.NETのかかわりがよくわかるのではないかと思います。加えて、Visual Studio 2008の新機能についてだけではなく、WPFやSilverlightの未来についても知ることができますので、ぜひご覧ください。
またASP.NETについては、入門者がASP.NETを最速で学ぶ方法、ポストバック(Post back)についての詳しい説明や、Java開発者がASP.NETを理解するためのポイントなどもお話してもらってます。
撮影から公開まで8日程度で作業を終えられたのは、いろんな人の協力があったおかげです。
これからのビデオ配信のひとつの試みとして、また継続してWindows Mediaでのビデオ制作とSilverlightでのビデオ再生にチャレンジしていきたいと思います。
2008年1月19日
#
2007年12月17日
#
今、担当している仕事がデータベースから離れてしまっているので、なかなかチャンスがないのですが、Visual Studio 2008/Windows Server 2008/SQL Server 2008と3大製品がそろう2008年に向けて、なんらか情報を記事としてまとめていきたいと思いつつ・・・。
今回のこれら製品が組み合わさると非常に面白い世界が広がっていくと思っていますが、ともかく、一つ一つがたくさんの機能を提供するので、点で考えるのはとても大変だと思ってます。
仮想化技術も含めれば、過去の資産の統合をしつつ、一方で新しいシステムを拡張していくというシナリオのなかで、開発プラットフォーム、サーバプラットフォーム、データプラットフォーム、それぞれがどう組み合わさっていくのか、はたまたどう組み合わせるのがいいのか、それよりも、それらを活用するためにどんなことから取り組んでいけばいいのか、いろいろと悩ましく、いろいろと楽しみでもあるかと思います。
またトランザクションはどうしたらいいのか、分散環境でのいろんなシステム・サービスからのデータをどう連携していけばいいのか、どうやって全体像を考えたらいいのか、・・・、楽観的ロックでいいじゃんから3年以上経過しているので、何かそろそろ、これからに向けて役立ちそうな記事を残せたらなぁ、とぼんやり考えています。
とはいえ、あまり崇高なネタを考えても、企画倒れに終わるでしょうし、詳細な情報は、今後いろんなチャネルから増えていくようにも思います。そんなわけで、やることがてんこ盛な中でも、なんらか概念的な部分だけをさくっと追いかけられるようなことを目指せればと思ってます。
すべてはこのブログで網羅しないかもしれませんが、ビデオブログなどを組み合わせて、PASSJの皆様になんらか役立つような情報が作れないか、引き続き考えてみたいと思います。
2007年11月15日
#
このところ、今までの経験をフルに活かした仕事に恵まれていて、ビデオ撮影やSilverlightでのアプリケーション開発など、結果として目に見える形で残るものを作れていることを幸せに感じています。
今までも地道なところでコツコツと作業を続けてきてましたが、なかなかその成果を一般に知られることのないところばかりでいたのが、成果をインターネットやイントラネット上で公開できるようなプロジェクトに携わると、数多くの文字で語らなくとも、どんなことをやっているのかをURLで示せるという面白さは、味わってしまうと癖になるかもしれません。
別のブログでも紹介済みですが、IT交差点のSilverlight Viewer、既存のサンプルを応用して、足りない部分はコードを追加して完成させてますが、オンラインでの情報提供への新しい形を示してます。http://www.microsoft.com/japan/powerpro/magazine/viewer/
実はこの紙面にビデオやアニメーションなどを追加するのはそれほど難しいことではなく、情報発信としてのプラットフォームとしていろんな可能性をもった形になっています。加えて、いったん理屈がわかれば、別の情報を掲載するのは簡単で、Silverlightに対する深い知識は必要ではありません。
データベースまたはWebサービスと連携する形で、今後のプラットフォームを開発できればと思ってます。コンテンツさえ提供すれば、視覚化するのは自動化できると思ってます。ただし、あまり複雑なことをやると、インターネットでは適さない可能性もあるので、適度な統合、というところを目指すのがいいかもしれません。
実行可能な形でゆるやかに結合を考え、ささっと形にまとめていく、そんなlightな開発も時にはよいかもしれません。
2007年10月24日
#
いろんなビデオ共有サービスが登場して、ビデオ+ブログという組み合わせは珍しくはなくなってきました。とはいえ、どんな動画でも受け入れられるというものではありません。
そんななか、Channel 8という学生・教育機関向けのビデオブログに投稿されたVirtualization an Windows 7の記事に含まれている内容が形を変えて引用され世界中を駆け巡ったことは興味深いものがあります。
そこには何ら決定事項が含まれているものではなく、進行中の議論にすぎないのですが、いろんな人の関心を引くものであるということや(ある種の)伝言ゲーム的な情報の伝播という悪い面とよい面を考える機会になっているかと思います。
なんにせよ、誰が発信するかによって情報の関心は高まるということだけではなく、2次・3次加工によって、ある種のノイズが混入したり、1次ソースが意図していない情報に改編される可能性が、特に動画の場合に起こりえるということも意識する必要があるのかもしれません。ノンリニア編集によって、時間の組み替えが可能なので、論理の組み替えも可能だったりするわけですが、意図していない動画の加工に対抗する意味で、あえてTC(time code)をつけて配信するのもありなのかもしれないと考えています。
百聞は一見に如かず、ということで、たくさんの文字で表現するよりも、短時間でも動画で伝えた方が便利だと思います。一方で、ブログの読者の多様な価値観ということを悪意に利用されないような編集というのも(簡単ではありませんが)考え始めていくといいのかもしれません。
ずいぶん前の話になりますがPASSJ中部OFFで動画を通じていろんな議論が産まれたことを思い出します。オンラインで一人で見るだけもよし、コミュニティの中でビデオを通じて気付きを起こすための話し合いというのも面白いと思います。何はともあれ、ビデオを撮影した本人がいろんな人と話をするのが一番面白いことではあるのですが、オンラインだと匿名コメントでないとフィードバックがもらえない可能性が高い日本では、オフラインでのミーティング・イベントを組み合わせるのがよいのかもしれません。
またいろんな人と話がしてみたいものです。
そういえば、Channel 9上にSQL Serverのコンテンツってそんなに多くないということに気がつきました。
http://channel9.msdn.com/tags/SQL+Server
PASSJメンバーへの取材で何か産み出せたら面白いかもしれません。
2007年10月23日
#
新しい技術を利用する場合、最初のうちはうまく使いこなせなくて半ばあきらめてしまったり、勘違いしたままおかしな理解を重ねた挙句使えないと誤解したり、いろんな側面での統合を考えていくと、自分で思ったように進まないものです。
しかしそんな状況でもめげずに、地道に物事を理解していくのが大切だと思います。
私の場合は、知識を獲得する上で、うわべだけの理解だとなかなか吸収できないので、概要なり関連する技術なりを並行して見ていくことが癖になっています。結果として一つを理解するために、周辺の2,3の要素を理解する必要があるので、時間はかかります。でも、この積み重ねは結構重要で、後々になって関連する情報を整理する上での判断が素早くできるようになります。
最近いろんな人と話をするなかで、IT技術において働いている人々の年齢や経験の差によって、どうやって技術を習得するか、さらにはどこまで突き詰めることができるのか、明らかに価値観の違いが見受けられるということを気付かされます。ソフトウェアも複雑な構成の中で動作しているものであり、担当範囲や経験しているプロジェクトによって、個々の人々の「しつこさ」が試されるような気がしています。
今から2年前くらいにVisual Studio 2005やSQL Server 2005が登場して、来年には新しいバージョンが登場してきます。皆さんは、これから登場してくる新しい製品に対してどのような準備をされていますか。
急激な変化に対して抵抗が生じる環境と、その変化を喜んで受け入れる環境とでは、これから求められるスキルには違いがあるかもしれません。でもその両者の立場を理解しなければならない人々は多いでしょうし、どんどん登場する新しい技術をどうやって消化し、今後の業務に取り入れていくか、というのは、マネージメントを含めて単純な問題ではないかもしれません。
単なる努力と根性だけではなく、何らかの哲学なり戦略を持って行動していくのがよいのかもしれません。
さて、そろそろ、Visual Studio 2008や新しいデータアクセステクノロジーについても自分なりの見解を出していけるようにしていきたいところです。しばらくはSilverlightやPopfly、ビデオ制作のプラットフォームづくりにかかりきりになりそうですが、来年の1月くらいにはいろいろと追いついてみたいと考えてます。着実に、一歩一歩ですけども。