2010-07-12

Status Update と Check-in アプリの連携で見る OpenSocial Pages の意義

おはようございます。Nobuhiro Nakajima です。
前のエントリでは、今どんな仕事をしているか? What are you working on? を Twitter のようなライムラインで共有する OpenSocial Pages 向けの Status Update アプリ (サンプル) を紹介しました。
今回は、さらに一歩進めて、今どこで仕事をしているか? を Foursquare のような位置情報で共有する OpenSocial 向けの Check-in アプリ (サンプル) を紹介します。
Check-in アプリを実行すると、今どこにいるかその位置を検出して地図を表示します。そして、コメントを入力して Check-in ボタンをクリックすると、コメントと位置情報を保存します。保存したコメントと位置情報は、Google Apps のユーザ間で共有され、今どこでどんな仕事をしているか、地図上のマーカーと吹き出しで確認できます。
地図の表示は Google Maps API、位置情報の検出は HTML5 の Geolocation API を使っていますので、多くのスマートフォンで動作しますし、PC でも動作するでしょう。
また Check-in すると、次のように、Status Update アプリのタイムラインに、コメントと位置情報を表示しますので、Check-in の内容に対して、タイムライン上でコミュニケーションすることもできます。
さらに、そのコメントには、Check-in アプリへのリンクも含みます。リンクをクリックすると、Check-in アプリを起動して、そのユーザがコメントした位置の地図を表示しますので、そのユーザに何かをお願いしたり、近くにいるユーザを探すこともできます。
OpenSocial Pages は Google Apps の Gmail と連携した Messages API も備えていますので、メールによる通知を Check-in アプリに追加して、メールの中から Status Update アプリや Check-in アプリを起動するといった使い方もできるでしょう。
このように OpenSocial Pages は、小さなアプリがお互いに連携して、それぞれの機能を補う構成をとれるのが大きな特徴です。多機能なアプリをあらかじめ作るではなく、そのときに必要となったことを、そのときに小さく作る、もう存在する機能は連携して使う、そして小さく改善し続ける... といった今までとは異なる新しいサイクルを生み出す手助けを目標としています。
Check-in アプリのガジェット XML は、次のサイトから入手できます。check-in.xml をダウンロードしてください。
OpenSocial Pages Downloads
http://sites.google.com/a/lrlab.to/opensocial-pages/downloads
OpenSocial Pages は Google Apps MarketPlace から Google Apps に直接インストールできます。OpenSocial Pages を Google Apps にインストールするときは、次のボタンをクリックしてください。

2010-07-07

Status Update アプリとスマートフォンから見る OpenSocial Pages の意義、欠点と課題

こんにちは。Nobuhiro Nakajima です。

OpenSocial Pages 向けの Status Update アプリ (サンプル) をアップデートしました。このアプリは 今どんな仕事をしているか? Twitter のようなタイムラインで共有しようというものです。

先日ご紹介した Tweet アプリ (サンプル) は jQTouch を使用した iPhone 専用のアプリでしたが、Status Update アプリは、PC も含めて iPhone、iPad、Android などのスマートフォンでも動作するようにしました。

Status Update アプリ (サンプル) のガジェットXML は、次のサイトから入手できます。status-update.r146.xml をダウンロードしてください。

OpenSocial Pages Downloads
http://sites.google.com/a/lrlab.to/opensocial-pages/downloads

また OpenSocial Pages for Google Apps をインストールすると、既定のガジェット (=ページ) として追加するようにしました。OpenSocial Pages を Google Apps にインストールするときは、次のボタンをクリックしてください。

Status Update アプリが、各種スマートフォンでどう動くのかスクリーンキャプチャをとりました。


OpenSocial Pages は、他のコンシューマ向け SNS とは異なり、アプリを iframe を使わず、ウェブページとして表示して動かします。つまり、従来のウェブページを OpenSocial アプリとして作成できるということです。

そのため、スクリーンキャプチャのように PC も含めて、iPhone、iPad、Android などのモバイルブラウザでも OpenSocial アプリを快適に動作させることができます。

ただし、モバイルブラウザという性質上、残念ながら今のところ Flash は使えません。が、OpenSocial Pages は、HTML5 でウェブページをレンダリングするようにしていますので、HTML5 のテクノロジを使ったリッチアプリを動作させることはできます。

また、Android は Flash のサポートを表明していますので、近い将来 OpenSocial Pages + Android で Flash ベースの OpenSocial アプリを動作させることもできるようになります。

Status Update アプリは、今どんな仕事をしているか、Twitter でいうところの "つぶやき" を Google Apps ドメインのユーザ間で共有できる アプリです。その "つぶやき" が、他のドメインや公のユーザに公開されることはありません。

OpenSocial Pages は Google Apps のユーザとグループをインポートして、必要に応じて同期できます。つまり、OpenSocial Pages を Google Apps にインストールすると、Google Apps の既存ユーザとグループをソーシャルグラフとして、Google Apps に閉じた OpenSocial アプリを動作させることができるということです。

Status Update アプリは、とても小さく単純なもの(OpenSocial と JavaScript の知識があれば誰でも作れる)ですが、これら OpenSocial Pages の特徴によって、役立つものとなります。

例えば、スマートフォンの特徴と HTML5 の特徴を活かして、"つぶやき" に位置情報を付与するようにして、今どこでどんな仕事をしているか、お互いに共有できるアプリに改善することもできるでしょう。

OpenSocial Pages を使うには OpenSocial と JavaScript の知識が必要で、ウェブ開発者がいないと使えないという欠点があり、大きな問題であると課題として認識しています。

現状は、ウェブ開発者がいて、自らアプリを開発して、仕事の役に立ててもらうというスコープですが、将来は Google Friend Connect Social Gadgets や Facebook Widget、Twitter @anywhere くらいの感覚で利用できるようになればと考えています。

ODataとGDataはAtomPubに合流して、ウェブで誰でも標準手続きでデータを適切に操作できるようになるの?

こんにちは。Nobuhiro Nakajima です。今回のネタは素人視点の雑感です。

しばらくの間、Open Data Protocol (OData) とは、どういったものか概要を調べてみたのですが、それをどうまとめて紹介すればよいか悩んでいて、書き出しに困っているところです。

OData は、もともと Microsoft の ADO.NET Data Services という実装があって、Microsoft がその仕様部分を OData として提案し、オープンでスタンダードな仕様として採用を促しているものです。そして、現在 Microsoft は ADO.NET Data Services を改めて WCF Data Services として OData の実装を提供しているという図式のようです。

OData は、机上の仕様ありきなものでななく、技術情報も実装(製品も含む)も進んでいるため、ネット上でさまざまな情報を入手できます。次のサイトが、入口として使えそうです。

Open Data Protocol (OData)
http://www.odata.org/

WCF Data Services (formerly ADO.NET Data Services)
http://msdn.microsoft.com/en-us/data/bb931106.aspx

ですので、このエントリでは、OData そのものを紹介するのではなく、OData を調べていて、私なりに気がついたことや、関心をもったことを紹介することにします。*1

OData は、WEB のデータを共有したり、操作するための AtomPub (RFC 5023) ベースのプロトコルです。そのため、Google Data Protocol (GData) と比較されることが多いようですが、(少し乱暴かもしれませんが) OData と GData は AtomPub 拡張方法に違いはあっても、目的や位置付けは同じものという印象を受けました。

Open Data Protocol Q&A にある次の質問と回答が、気になる多くのものごとを表していそうです。
Q:  How should I think about OData vs. GData A: There is no OData vs. GData.  Both are based on ATOM and JSON. Both protocol support our goal of an open data protocol for the Web. We intend on working with others in the community, including Google, to move the features of OData into future version of AtomPub or other appropriate standards. We encourage Google (GData) to join us in these conversations.
OData も GData も同じ仕様をベースとしていて、目指しているところも同じでしょう。OData の仕様は、将来の AtomPub などの標準仕様に持ち込むつもりなので、Google (GData) も話し合いに参加したほうがいいよ。(超意訳) といったところでしょうか。

OData のライセンスは Microsoft Open Specification Promise (OSP) に基づき、GData のラインセンスは Patent License に基づきます。両者とも条文を読む限りでは、オープンライセンスに見えるのですが、その根本的な違いがどこにあるのか、理解できませんでした。どなたか教えてほしいです。

OData は Microsoft 以外のサードパーティでの採用が進んでいます。OData に基づいて、サービスやデータを提供する者を、OData Producer と呼ぶようで、その OData Producer のリストは、次のサイトで入手できます。

OData producers
http://www.odata.org/producers

OData Producer は、SharePoint や SQL Server、Azure など Microsoft 製品群でサポートが進んでいるようです。これは Google が Google サービスを GData で提供しているのと同じ位置付けに見えます。

OData は、Microsoft 以外にも、IBM WebSphere といったメジャー製品でも採用され、また、Microsoft .NET Framework やオープンソースの Java REST フレームワークである Restlet OData Extention を使って、自らの製品やサービスとして OData Producer を実装できるようです。Facebook も Facebook Insights という OData を使った Preview を Live しています。

さらに Microsoft は、OData Producer がデータを提供できる場として、MarketPlace を立ち上げています。

Microsoft Codename “Dallas”
http://pinpoint.microsoft.com/en-US/Dallas

このサイトは OData Producer のディレクトリを提供していて、OData Consumer (OData の利用者をこう呼ぶ) が OData Producer のサービスを購読するというスタイルをとります。Type Free という項目表記もあるため、将来は、自ら保有するデータで有料で提供して、収益を得るというビジネスモデルも組み込まれているようです。

さらに Microsoft は、政府機関のデータを提供する Open Government Data Initiative (OGDI) というサービスを立ち上げていて、データフォーマットとして OData を採用しています。

Open Government Data Initiative (OSDI)
http://ogdisdk.cloudapp.net/

OData は OData Consumer 向けの製品やクライアントライブラリも提供しています。

OData Consumer
http://www.odata.org/consumers

OData Cousumer は、Data Viewer ものや Excel でサポートされているようで、これから Microsoft のクライアント製品群でのサポートが進んできそうです。また、クライアントライブラリを使って、自らの製品やサービスとして OData Consumer を実装できるようです。これも Google サービスと GData Client Library と同じ位置付けに見えます。

OData は、まず Microsoft とサードパーティの製品で OData をサポートして、すそ野を広げて、データを保有する人を巻き込んで OData Producer を増やすというのが現状でしょうか。これをクリアすると、OData Consumer は、ひとつの方法で、あらゆるデータを利用できるようになり、さらに... というエコシステムの構築が OData の狙いということになりそうです。

OData の仕様には、認証や認可の既定はなく、それぞれのケースで最適な方法があるという立場をとっているようです。

GData 自体も、認証や認可の既定はありませんが、GData は、Google サービスありきのため、各サービスは Google アカウントで認証し、AuthSub や OAuth といった認可の手続きが共通の取り決めとなっています。このことが、GData が Web での利用を現実的にしていて、GData (を実装したサービス) のアドバンテージになっていると強く感じます。

OData はどういった方向性に進んでいくんでしょうか。単なるデータプロトコル仕様だけでは、Web の世界では、全体的な見通しが立たない気がしています。GData と OData の仕様が合流して、新しい AtomPub になったとして、その後、ウェブで誰でも標準手続きで、あらゆるデータを適切に操作できるようになるのでしょうか。

そのあたりのビジョンをガチンコしていけば、なんかエキサイティングなウェブが開けていけそうな気がした OData の紹介でした。


*1 私は WCF Data Services や OData の専門家ではありませんので、もし見識違いや誤りがありましたら、ご指摘いただけますと幸いです。

2010-07-03

OpenSocial Pages のタイムラインは AppEngine for Java の Data Store でどのように実現しているか

こんにちは。Nobuhiro Nakajima です。

OpenSocial Pages for Google Apps は OpenSocial Activities API という Twitter でいうところのタイムライン API を備えています。また Activities は Twitter でいうところの Friends (Following)、Lists、Mentions という人と人の関係(ソーシャルグラフ)で絞り込めるようになっています。


OpenSocial Pages は Google AppEngine for Java でホストしています。そして Activity の格納と検索は Data Store (JDO) で実現していて、エンティティの主な構造は、次のようにしています。

エンティティの構造

Twitter でいうところの User を表すエンティティです。この User が、誰に Follow されているか、どのグループに属するかを保持させています。
public class User {
  private String id;
  private Set<String> followerIds; // 誰に Follow されているか
  private Set<String> groupIds; // どのグループに属するか
}
Twitter でいうところの Lists を表すエンティティです。
public class Group {
  private String id;
}
Twitter でいうところの Status を表すエンティティです。この Activity が誰のもので、誰が関係するのか保持させています。followerIds と groupIds は Person のコピーを保持させています。mentionIds は Twitter でいうところの、テキスト中の @username で引用された User たちを保持させています。
public class Activity {
  private Long id;
  private String userId; // Person#id
  private String title; // テキスト
  private Set<String> followerIds; // Person#followerIds のコピー
  private Set<String> groupIds; // Person#groupIds のコピー
  private Set<String> mentionIds; // テキスト中の @username たち
}
Follow と Unfollow

User A が User B を Follow するとき、User B の followerIds に User A の userId を追加します。また Unfollow するときは、User B の followerIds から User A を除外します。

Group の参加と退会

User が Group に参加するときは、User の groupIds に自身の userId を追加します。また、退会するときは、User の groupIds から 自身の userId を除外します。

Activity の送信

送信する User の followerIds と groupIds を Activity の followerIds と groupIds にコピーして格納します。さらに、テキスト中の @username に該当する User の userId を mentionIds に格納します。

検索クエリ

User の Activity を検索するときは、Activity エンティティに対して、次のフィルタを使っています。
Query#setFilter("userId == :userId");
User が Follow している Friends の Activity を検索するときは、次のフィルタを使っています。このときの userId は、自分自身の ID を指定します。
Query#setFilter("followerIds == :userId");
Group に所属している User たちの Activity を検索するときは、次のフィルタを使っています。
Query#setFilter("groupIds == :groupId");
User が関係する Activity を検索するときは、次のフィルタを使っています。
Query#setFilter("mentionIds == :mentionId");

Activity の再構築

User A が User B を Follow したとき、User B の 全 Activity (*1) の followerIds に User A の userId を追加します。また Unfollow したときは、followerIds から除外します。

User が Group に参加するときは、User A の 全 Activity (*1) の groupIds に Group の groupId を追加します。また、退会したときは、groupIds から除外します。

前者と後者とも Task Queue を使って Activity を更新しています。

利点と欠点、そして課題

まず、基本方針は、シンプルなデータ構造とすること、そして、参照のコストを均一化するの(と削除)を最優先にしました。

この方法は、どんなに User が増えて、どんなに Follow したり、Group に参加したりしても、検索クエリのコストは一定なのが利点です。ただし、Follow/UnFollow、Groupの参加/不参加が発生したとき、過去にさかのぼって Activity を再構築する必要があるのが、大きな欠点です。

Activity がいくら蓄積されようとも、Activity 自体のコピーは保持していないため、Activity の削除は用意というのも利点です。ただ、User 自体を削除したとき、その User の 全 Activity を削除する必要がありますが、現状は削除せず、残したままとしています。

*1 Activity はどんどん蓄積されるものなので、時間が経過するにしたがって、全 Activity を更新するのは、現実的に難しくなってきます。そこで OpenSocial Pages では、新しいものの内 n 件分、もしくは n 日分の Activity のみ再構築の対象にするように妥協しています。古い Activity は重要度が低いよねという考え方です。

できれば、古い Activity もすべて再構築したいというのが課題です。古い Activity は即時で再構築することは絶対条件ではないため、バッチ的なものや、無駄な再構築が起こらないようにスケジューリングするとかいった方法でもよさそうです。

何かよいアイディアはないものでしょうか? エンティティグループとか、エンティティのエンティティとかうまく使えば、別の方法があるのかもしれないです。

2010-07-02

Google Apps Marketplace で OpenSocial Pages をぽちっと Google Apps にダイレクトインストールできるようにしました

こんにちは。Nobuhiro Nakajima です。

OpenSocial Pages を Google Apps MarketPlace からぽちっと Google Apps にダイレクトインストールできるようにしてみました。

このエントリでは Google Apps MarketPlace から Google Apps に OpenSocial Pages に登録する流れを紹介します。Google Apps MarketPlace の掲載手順や Google Apps との連携方法など、具体的な話題は、別途エントリで紹介します。

OpenSocial Pages がどんなものか知りたい方は、次の紹介エントリをご覧ください。

* OpenSocial Pages という新しい取り組みの紹介です
* OpenSocial Pages はソーシャルデータ駆動による Social Gadget の消費スタイルを提案するものです

Google Apps MarketPlace は Google が運営するサイトで、サードパーティのベンダが、全世界の Google ユーザに、ビジネス向けの製品やサービスを紹介する場となっています。

Google Apps Marketplace
https://www.google.com/enterprise/marketplace/
The Google Apps Marketplace offers products and services designed for Google users, including installable apps that integrate directly with Google Apps. Installable apps are easy to use because they include single sign-on, Google's universal navigation, and some even include features that integrate with your domain's data.


OpenSocial Pages は、次のとおり Google Apps > Productivity カテゴリに掲載されています。



Google Apps MarketPlace では、ベンダのプロフィールを掲載できます。Nakajiman Software のプロフィールは、次のとおりです。ベンダの基本情報と製品リストを掲載できます。

Vendor Profile: Nakajiman Software Inc.



製品ごとのプロフィールも掲載できます。OpenSocial Pages のプロフィールは、次のとおりです。

OpenSocial Pages for Google Apps



Google Apps MarketPlace は製品の紹介にとどまらず、Single Sign-On (SSO) に対応した製品であれば、Google Apps MarketPlace からその製品を Google Apps に直接インストールできる仕組みを備えています。

OpenSocial Pages も直接インストールできるようにしています。OpenSocial Pages のインストールはとても簡単です。OpenSocial Pages のプロフィールから Add it now ボタンをクリックします。そして、インストール先の Google Apps ドメインを入力して Go ボタンをクリックします。



すると、Google Apps Dashboard に遷移し、OpenSocial Pages の利用規約への同意を求められます。このとき Terms of Service が OpenSocial Pages の利用規約にリンクされています。



利用規約に同意すると、インストールする製品から Google Apps にアクセスする内容を表示し、認可するか求められます。OpenSocial Pages は Google Apps の Uesr と Group をインポートするため、User と Group へのアクセス (Read Only) を求めています。



アクセスを認可して Enable app now ボタンをクリックすると、Google Apps で OpenSocial Pages が使えるようになります。



インストールすると、Google Apps に OpenSocial Pages のリンクが追加されます。



インストールすると、Gmail などのナビゲーションに OpenSocial Pages のリンクが追加されます。



OpenSocial Pages は Google Apps Dashboard から、いつでもアンインストールできます。また、状況に応じて、無効にしたり、アクセスの認可を取り下げることもできます。



OpenSocial Pages にアクセスすると、Google Apps アカウントによるログインを求められます。



OpenSocial Pages にログインすると、既定のページ(=ガジェット)がされます。このページは OpenSocial の People API を使って、ログインユーザの名前を表示するようにしてあります。この名前は Google Apps アカウントからインポートしたものです。



OpenSocial Pages のコントロールパネルにアクセスして、初期のセットアップをします。



あとは OpenSocial Apps や Social Gadgets を開発するノリでページを編集していきます。

Google Apps MarketPlace での露出は、ユーザレビューと評価による基準しかないようです。もしも関心がありましたら OpenSocial Pages をお試しいただき、マイナス面でも構いませんので、レビューや評価を頂けますと幸いです。