先日2011年6月11日に開催されたオープンソースカンファレンス 2011 Hokkaido での CLR/H 枠セッション「WebMatrix を使ってライブで作ろう! スマートフォン対応モバイル ASP.NET Web アプリ」の資料を SkyDrive に公開した。
セッションスライド
http://bit.ly/jWuYv6
「オレのぐっと来た」ソースプロジェクト一式
http://bit.ly/kj17R6
なかなかまとまった時間がとれず、小出しにして申し訳ない。
ソースプロジェクト一式は、ダウンロードしてディスクに解凍・展開したあと、WebMatrix がインストール済みの環境であれば、その解凍・展開したフォルダを右クリックして「Open as a Web Site with Microsoft WebMatrix」を選べば、WebMatrix で編集出来る状態となる(下図)。

ライセンスについては、この程度のデモンストレーションアプリについて、とやかく言うつもりはない。
商用だろうがなんだろうが、ぞんぶんに再利用・改造して頂いて結構である。
どのみち、ソースを変更しない限りは、ユーザー名の絞り込みが「jsakamoto」固定なので、「jsakamotoのぐっと来た」にしかならないし...。
補足 - ズルをしたわけ
セッション中でも告白したし、ツイート(
https://twitter.com/#!/sandinist/status/79373328338530304 ) も頂いているが、この「オレのぐっと来た」はページング処理で最終ページかどうかの判定が甘い。
すなわち、現在のページング中のツイート数が、1ページング中に最大表示可能なツイート数に同じならばまだ次がある、という判断をしている。
これだと、ツイート数がちょうど3の倍数だと、最終ページの判定を誤るわけだ。
どうしてこんな手抜きをしたのか?
実は OData Helper は完璧ではなくて、データの総件数を求める機能が不足しているのだ。
もっとも、OData Helper を使ってとりあえず 全件 Get し、Get できた行の数を LINQ to Object の Count() 拡張メソッドで数えることは、基本的に容易である。
しかしこの戦法だと、求めるデータ量が莫大なときに、通信量やメモリ消費量が大変なことになり、時間がかかってしまう。
おまけに、実は、「ぐっと来た.cc」で公開されている OData を、OData Helper で全件取得しようとしてもいっきには取得できないのだ。
というのも、OData の規格には、
「要求いただいたうち、とりあえず5件返したから、続きはこのURLに来てね」
というマークアップが規定されており、実際、「ぐっと来た.cc」から返される OData はそのような形式になっているのである(至極もっともなことだろう)。
ところが、どうも OData Helper がこれを認識しないっぽいのだ。
よって、通信量とメモリ消費量を度外視したとしても、OData Helper を使う限りは、全件取得して数え上げることもままならない次第である。
もっとも、OData の規格には、件数だけを返すクエリも用意されている。
ただ、先述のとおり、OData Helper には、件数だけを返すクエリを発行する機能は備わっていないようなのだ。
ただし、なんだかんだ言って、結局は OData は HTTP 要求とそれによって返される XML ( や JSON ) に過ぎない。
従って、OData Helper に頼らず、System.Net.WebClient や System.Xml.Linq.XDocument などを使って、直接問い合わせすることで、件数のみを求めることも容易である。
しかしながら、OSC のセッションは 45 分という短い時間の制約があった。
そのため、件数取得の生アクセスのコードを書くことは断念し、ズルをしてお茶を濁した次第である。