RSS Collaboratorの内部構造について

TechCollab2007-03-18


さて、今日はVistaソフトウェアコンテストに応募したソフト「RSS Collaborator」の内部設計についてを暴露して行こうと思います*1。いつぞやかのエントリ(http://d.hatena.ne.jp/TechCollab/20070208)にも軽く書きましたが、今日はそれを少し掘り下げて書いてみます。

このRSS Collaboratorとは、このソフトを使用しているマシン間で個々のマシンの持つRSSフィードを公開、共有するソフトウェアであり、WPFRSS Platform API、PeopleNearMe(以下PNM)の実装技術により構成されていることは前に述べました。

RSS Platform APIを利用してマシンで購読しているRSSフィードをOPMLT形式*2としてエクスポートし、これをPNMネットワークにオブジェクトとして注入しています。で、これら一連の動作をWPFでリッチに表現しているという感じです。

上の図の1つ1つの球がPNMネットワーク内のPeerを表しているものです。もし、ソフト起動中にPNMネットワーク内のマシンがRSS Collaboratorを起動したらそれをリアルタイムに検知し、球がひとつにょきっと増えるようになります。


またこのソフトでは、ソフトをインストールしているマシンに対してソフトの起動を促す(Invite)こともできます(上図)。これはPNMのAPIとして標準に用意されているものです。


この球(Peer)をクリックすると、そのマシンが購読しているRSSフィードに付与されているタグが表示されます。付与されている数の多いほどタグ名が大きく表示されます。で、ここのDeployというボタンをクリックすると。。。

上のように画面が回転しそのPeerの持つRSSフィードの閲覧画面へ遷移します(ここは意外と頑張ったとこです;)。

RSSフィードの閲覧画面は上のような感じです。上半分のCoverFlowテイストなUIで現在選択中のタグが付与されているRSSフィードの画像が表示されます。画像がないものはRSSのデザインが表示されます。下半分には選択されたRSSフィードのコンテンツの一覧が同時に表示されます*3。で、見たいコンテンツを選択すると図にあるようにそれが拡大されて表示されます。これはFlowDocument系のClassで実現しているので、もちろんそこから、別なWEBページへ飛ぶことも可能です。

また、Enclosureにも対応しています。enclosureの指定があるコンテンツに対しては、クリップのようなアイコンが付与されます。このアイコンをクリックすることでダウンロードを開始することができ、そのダウンロード状況に応じてアイコンの形状も変化していきます。ダウンロード完了した状態のアイコンをクリックすると、そのEnclosureのコンテンツを関連付けされた別アプリで閲覧することができます。

これらのRSSフィードですが、他人のフィードを自身のマシンに取り込むことも可能です。取り込む場合は球(Peer)をドラッグして、上のアイコンにドロップすればいいだけです(上図でいうところの四角いやつです)。

以上、長くなってしまいましたが、これが「RSS Collaborator」の動作シナリオとなります。公開されたならば是非皆さん使ってやってください。なかなか同ネットワーク上に複数のVistaマシンのある環境というのも難しいとは思いますが。。また、このソフトのソースを見てみたいんだけど、このソフトこうすればよくなるんじゃないのかな、こんなアイデアがあるんだけど試しにつくってみてよ、などの相談、ご指摘など頂けたら幸いです。


そういや、Vistaソフトウェアコンテスト入賞作品の公開ダウンロードがなかなか始まりませんね。年度末だし皆さんお忙しいのでしょうね。

ここで話してきましたPeopleNearMeですが、.Net Framework 3.5(Orcas)からManagedとして公開される(System.Net.PeerToPeer)ようですけどいまいち実態はまだ把握できていません。興味のある方、知識の深い方がいましたら是非ご教授くださいませ(Preview: New Networking Features in the .NET Framework V3.5 codenamed Orcas – Windows Core Networking)。


このブログですが最近いまいち書くネタが定まってないですね。これは目標がはっきりしていないことの現れでしょう。目標ができたらここに書くことも定まる…………はずです。頑張ってネタを探しますかね!

*1:公開されているものだけじゃ全然わからないというご指摘を多々いただきましたので。。

*2:OPMLにtag属性を付与した独自に定義した形式

*3:これって既存のRSSリーダーにはなく自分が欲しかった機能。つまりフィードの一覧を一気に見たかったのです。