(57)【要約】  【解決手段】  データ共有を伴うインスタントメッセージングについて説明する。データを共有する１つ以上のクライアントが現在有効でなくても、インスタントメッセージングセッションに関連したデータを共有するために、説明された１つ以上の技法を使用できる。【選択図】  図３
2009500698.tif 000002
【特許請求の範囲】
【請求項１】
インスタントメッセージングセッションの間、クライアントによって、他の１つ以上のクライアントと共有されるデータを指定するステップ（６０２）であって、前記インスタントメッセージングセッションの間、前記他の少なくとも１つのクライアントが有効でないものと、及び
前記他のクライアントそれぞれが有効であるときに、前記データを前記クライアントと同期させるステップ（６１２）と、を含む方法。
【請求項２】
前記同期させるステップが、ピアツーピアネットワーク上で実行されること、を特徴とする請求項１記載の方法。
【請求項３】
前記指定するステップが、前記インスタントメッセージングセッションの間、通信されるインスタントメッセージを表示するために構成されるユーザインタフェースを介し実行されること、を特徴とする請求項１記載の方法。
【請求項４】
前記指定するステップが、前記他の１つ以上のクライアントと共有されるデータに対応するフォルダの表示を含むユーザインタフェースを介し実行されること、を特徴とする請求項１記載の方法。
【請求項５】
前記クライアント及び前記その他のクライアントに含まれないストレージのデータをストアするステップを更に含み、前記同期させるステップが、前記他の少なくとも１つのクライアントが有効であるときに、前記ストレージにストアされたデータを前記他の少なくとも１つのクライアントに提供することを含むことを特徴とする請求項１記載の方法。
【請求項６】
前記ストレージが、ウェブインタフェースを介しアクセスできること、を特徴とする請求項５記載の方法。
【請求項７】
前記指定するステップが、複数の前記他のクライアントを有するグループによって共有されるデータに対応するフォルダの表示を含むユーザインタフェースを介し実行され、及び
前記グループのメンバーが、前記インスタントメッセージングセッションの終了を過ぎても存続するように構成された永続オブジェクトによって指定されること、を特徴とする請求項１記載の方法。
【請求項８】
前記データが、データ項目に対する１つ以上の変更を記載する前記データ項目のサブセットであること、を特徴とする請求項１記載の方法。
【請求項９】
さらに、前記データの同期をスケジューリングするステップ、を含む請求項１記載の方法。
【請求項１０】
複数のクライアントによって共有されるデータが同期されるか否かを決定するステップ（８０２）と、及び
前記少なくとも１つのクライアントがインスタントメッセージングを介し有効でない間、前記決定に基づき、前記データの同期をスケジューリングするステップ（８０６）と、を含む方法。
【請求項１１】
前記決定するステップが、インスタントメッセージを表示するために構成されるユーザインタフェースとの対話を監視することに少なくとも一部基づくこと、を特徴とする請求項１０記載の方法。
【請求項１２】
さらに、前記１つ以上のクライアントの存在を決定するステップを含み、前記スケジューリングするステップが、前記決定された存在に少なくとも一部基づいて実行されること、を特徴とする請求項１０記載の方法。
【請求項１３】
前記決定するステップが、前記データに対応するバージョンベクトルを有する同期交渉メッセージに少なくとも一部基づくこと、を特徴とする請求項１０記載の方法。
【請求項１４】
前記決定するステップが、前記１つ以上の複数のクライアントを記述する存在情報の一部としてストアされたバージョンベクトルを利用することに少なくとも一部基づいて実行されること、を特徴とする請求項１０記載の方法。
【請求項１５】
前記スケジューリングするステップが、前記データを受信する前記クライアントに対応する１つ以上の最新の特性に少なくとも一部基づくこと、を特徴とする請求項１０記載の方法。
【請求項１６】
前記スケジューリングするステップが、前記データをもたらす前記少なくとも１つのクライアントの１つ以上の特性に少なくとも一部基づくこと、を特徴とする請求項１０記載の方法。
【請求項１７】
前記スケジューリングするステップが、同期される前記データの１つ以上の特性に少なくとも一部基づくこと、を特徴とする請求項１０記載の方法。
【請求項１８】
インスタントメッセージングの間、他の少なくとも１つのクライアントと共有されるために指定されたデータを同期させるか否かを決定すること（８０２）、及び
前記決定に基づき、前記データと他の少なくとも１つのクライアントとをいつ同期させるかをスケジューリングすること（８０６）、を
コンピュータに対して実行されるときに指示するコンピュータ実行可能命令を含む１つ以上のコンピュータ可読メディア。
【請求項１９】
前記コンピュータ実行可能命令が、インスタントメッセージを表示するために構成されるユーザインタフェースを出力することと、インスタントメッセージングセッションの間、インスタントメッセージとして通信される入力を受理することとを前記コンピュータに指示すること、を特徴とする請求項１８記載の１つ以上のコンピュータ可読メディア。
【請求項２０】
前記コンピュータ実行可能命令が、前記他の少なくとも１つのクライアント、前記データ、及び前記コンピュータに基づいた特性を利用し、スケジューリングすることを前記コンピュータに指示すること、を特徴とする請求項１８記載の１つ以上のコンピュータ可読メディア。
【発明の詳細な説明】
【背景技術】
【０００１】
パーソナルコンピュータ、無線電話、メディア装置などの拡がっている多様な装置を使用し、ユーザがインスタントメッセージを通信できるように、インスタントメッセージングの普及が増加している。インスタントメッセージングは、例えば２人以上のユーザがインスタントメッセージングセッションの間にネットワークを介し、メッセージを交換可能にするために利用できる。２人のユーザが同時にオンラインであるときには、２人のユーザ間でインスタントメッセージを実時間に交換できる。このように、典型的な話し会話に２人のユーザが参加する方法をまねるやり方で、テキスト会話を支援するためにインスタントメッセージを利用できる。
【発明の開示】
【発明が解決しようとする課題】
【０００２】
しかし、典型的なインスタントメッセージングセッションは、インスタントメッセージングセッション以外で持続可能なデータ共有の技法を提供しない。例えば、典型的なインスタントメッセージングセッションにおいて、データを共有することは一般に、ユーザそれぞれが同時にオンラインであることを必要とする。したがって、ユーザがインスタントメッセージングセッションを介し有効でない場合、オンラインである他のユーザによって共有されるデータが、そのユーザには提供されない。さらに、インスタントメッセージングセッションの間でどんな共有状態も持続されない。これは、データのどのバージョンが最新か、特定のバージョンがクライアントそれぞれからの変更を含むか否かのような手動で管理するのが困難となり、ユーザ間でデータの矛盾を導くことになり得る。これらの矛盾はユーザのフラストレーションを生じ、その結果、インスタントメッセージング経験を減少させることになり得る。
【課題を解決するための手段】
【０００３】
データ共有を伴うインスタントメッセージングについて説明する。ユーザが同時にオンラインでなくても、１つ以上のインスタントメッセージングセッションに関連し、ユーザ間でデータの共有を可能にするために、１つ以上の技法を使用できる。追加として、ユーザそれぞれが「最新の」データのコピーを有するように特定のユーザ間でデータを同期させるためにこれらの技法を使用できる。さらに、様々な考慮に基づくデータの同期をスケジューリングするためにこれらの技法を利用できる。
【０００４】
「発明を実施するための最良の形態」においてさらに後述されるいくつかの概念の選択を簡易な形式で紹介するために、この概要を提供する。この概要は、請求項記載の対象の重要な特色又は本質的な特徴を特定することを意図せず、また、請求項記載の対象の範囲を決定する際の支援として使用されることも意図しない。
【０００５】
同じ参照番号は、同種の構造及びコンポーネントを参照する論述における例において、利用される。
【発明を実施するための最良の形態】
【０００６】
概観
データ共有を伴うインスタントメッセージングについて説明する。インスタントメッセージングの間、従来のデータ共有（例えば、ファイル転送）は、データ共有をするユーザそれぞれが同時に有効であるとき、例えばメッセージングサービスにログオン時だけ、生ずることができて、一度に１つのファイルを転送するために使用できるだけであり、複数のインスタントメッセージングセッション間で、共有状態を持続できない。それゆえ、ユーザ間の対話は、ユーザそれぞれが現在有効であるか否かによって制限され、例えば子供の写真アルバムの状態をセッションに渡って確立するのは許可されない。したがって、クライアントそれぞれが現在有効であるか否かにかかわらず、クライアントがデータを共有できるようにインスタントメッセージングがデータ共有を取り入れることが可能な技法を説明する。
【０００７】
例えば２人のユーザは、インスタントメッセージの使用を介しインスタントメッセージングセッションの間、通信できる。セッションの間、第１のユーザは、インスタントメッセージングセッションを実行するために使用されるインスタントメッセージングユーザインタフェースを介し共有される特定のデータ項目を指定できる。例えば、インスタントメッセージングセッションは、第１のユーザのコンタクト先リストにおいて指定された任意のユーザ又はユーザのグループのために、インスタントメッセージングセッションの間、確立され得る「共有空間」を提供できる。この共有空間によって第１のユーザはファイルを共有することができ、その共有空間において、他のすべてのユーザに対し、他のこれらのユーザが現在オンラインでなくても、ファイルを更新させることが目に見えるようにできる。少しの間に第１のユーザは、第１のユーザのコンタクトリスト上の他の任意のユーザ、第１のユーザのコンタクトリスト上の特定のユーザ、第１のユーザのコンタクトリスト上のユーザのグループなどにアクセス可能なような共有空間を表わすフォルダを指定できる。第１のユーザはその後、その共有空間（例えばフォルダ）へデータをドラッグでき、一旦オンラインになると、そのフォルダのコンテンツは、他のユーザによって維持される同様のフォルダと同期する。このように、他のユーザそれぞれは、インスタントメッセージングセッションを介し、同時に有効である他のユーザに依存せず同期されたデータバージョンが提供される。さらに、他のユーザはまた、第１のユーザへ同期して戻すデータに対して変更を行うことができる。共有される空間（例えばフォルダ）は、複数のインスタントメッセージングセッションに渡って持続され得る。
【０００８】
以下の論述において、データ共有を伴うインスタントメッセージングを提供するための技法を使用するための例示的な環境及び操作可能なユーザインタフェースを最初に説明する。その後、例示的な環境及び他の環境によって提供され得る例示的な手順について説明する。
【０００９】
例示的環境
図１は、データ共有を伴うインスタントメッセージングを実施するために操作可能な例示的な実装における環境（１００）の図である。環境（１００）は、ネットワーク（１０６）上の複数のクライアント（１０４（１）〜１０４（Ｎ））によってアクセス可能なメッセージングサービス（１０２）を含む。ネットワーク（１０６）にアクセスするための様々な方法で、クライアント（１０４（１）〜１０４（Ｎ））を構成できる。例えば、１つ以上のクライアント（１０４（１）〜１０４（Ｎ））が、デスクトップコンピュータ、モバイルステーション、エンターテインメント機器、ディスプレイ装置と通信可能に接続されたセットトップボックス、無線電話、ゲーム機コンソールなどの計算装置として構成され得る。このように、クライアント（１０４（１）〜１０４（Ｎ））は、大量の記憶及び処理リソースを有する十分なリソースの装置（例えば、パーソナルコンピュータ、ゲーム機）から限られたメモリ及び／又は処理リソース装置を有する少ないリソース（例えば、従来のセットトップボックス、携帯用ゲームコンソール）まで及ぶことができる。クライアント（１０４（１）〜１０４（Ｎ））はまた、クライアントを操作する人及び／又はエンティティと関連され得る。言い換えると、１つ以上のクライアント（１０４（１）〜１０４（Ｎ））は、ユーザ、ソフトウェア及び／又は装置を含む論理的なクライアントと言うことができる。
【００１０】
追加として、ネットワーク（１０６）は、インターネットとして例示されるが、ネットワークはさまざまな構成を仮定できる。例えば、ネットワーク（１０６）は、広域ネットワーク（ＷＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、ワイヤレスネットワーク、公衆電話ネットワーク、イントラネットなどを含み得る。さらに、単一のネットワーク（１０６）を示すが、複数のネットワークを含むようにネットワーク（１０６）を構成できる。例えば、クライアント（１０４（１））は、ピアツーピアネットワークを介し、クライアント（１０４（Ｎ））と通信可能に接続され得る。クライアント（１０４（１））、（１０４（Ｎ））それぞれはまた、インターネット上でメッセージングサービス（１０２）と通信可能に接続され得る。他の様々な例もまた、想定される。
【００１１】
複数のクライアント（１０４（１）〜１０４（Ｎ））それぞれは、複数のメッセージングモジュール（１０８（１）〜１０８（Ｎ））それぞれのうち１つを含むものとして例示される。それぞれのクライアント（１０４（１）〜１０４（Ｎ））が、それぞれの存在情報をメッセージングサービス（１０２）へ通信でき、クライアント（１０４（１）〜１０４（Ｎ））のうち別の１つとのインスタントメッセージングセッションに参加できるように、メッセージングモジュール（１０８（１）〜１０８（Ｎ））それぞれを実行できる。インスタントメッセージングセッションに参加するときに、インスタントメッセージングは、クライアント（１０４（１）〜１０４（Ｎ））それぞれが相互にテキストメッセージを送信することができるようなメカニズムを提供する。クライアント（１０４（１）〜１０４（Ｎ））のうち１つが無効、例えば、オフラインであるときに、テキストメッセージのロギングなどによる遅延送信もまた利用され得るが、インスタントメッセージは通常、実時間で通信される。このように、インスタントメッセージングがメッセージ交換を支援し、双方向のライブチャットのために設計されている点で、インスタントメッセージングは、電子メール及びインターネットチャットの組み合わせと考えることができる。したがって、同期通信としてインスタントメッセージングを利用できる。例えば、音声の電話通話のように、クライアント（１０４（１）〜１０４（Ｎ））それぞれが、インスタントメッセージが受信されるときに相互のクライアントに応答できるように、インスタントメッセージングセッションをリアルタイム（実時間）で実行できる。
【００１２】
一実装において、メッセージングモジュール（１０８（１）〜１０８（Ｎ））は、メッセージングサービス（１０２）の使用を介し相互に通信する。メッセージングサービス（１０２）は、例えば、メッセージングモジュール（１０８（１）〜１０８（Ｎ））の間でインスタントメッセージを送るために実行可能なメッセージングマネージャモジュール（１１０）を含み得る。例えば、クライアント（１０４（１））は、クライアント（１０４（Ｎ））に対する通信のために、メッセージングモジュール（１０８（１））にインスタントメッセージを形成させることができる。メッセージングモジュール（１０８（１））は、メッセージングサービス（１０２）に対してインスタントメッセージを通信させるために実行され、その後メッセージングサービスは、ネットワーク（１０６）上でクライアント（１０４（Ｎ））にインスタントメッセージを送るためにメッセージングマネージャモジュール（１１０）を実行する。クライアント（１０４（Ｎ））は、インスタントメッセージを受信し、インスタントメッセージを表示するためにメッセージングモジュール（１０８（Ｎ））を実行する。
【００１３】
別の実装においては、クライアント（１０４（１））、（１０４（Ｎ））が通信可能に直接結合されているときに、１つから別の１つへ（例えばピアツーピアネットワークを介し）、インスタントメッセージがメッセージングサービス(１０２)を利用せずに通信され得る。クライアント（１０４（１）〜１０４（Ｎ））によるピアツーピアネットワーク使用の更なる論述は図２と関連して見出される。
【００１４】
クライアント（１０４（１）〜１０４（Ｎ））それぞれはさらに、それぞれの共有モジュール（１１２（１）〜１１２（Ｎ））を有するように例示される。共有モジュール（１１２（１）〜１１２（Ｎ））は、インスタントメッセージングと関連してクライアント（１０４（１）〜１０４（Ｎ））の間でデータを共有するために実行可能である。例えば、クライアント（１０４（Ｎ））が有効（例えば、現在メッセージングサービス（１０２）にログオンされている）でなくても、クライアント（１０４（Ｎ））が、後で指定されるデータを受信できるように、インスタントメッセージングユーザインタフェースを介しクライアント（１０４（Ｎ））と共有するために指定されたデータを受信し、指定されたデータがストアされるように共有モジュール（１１２（１））を実行できる。
【００１５】
さまざまな方法によって複数の位置に指定されたデータをストアすることができ、それは、クライアントデータ（１１４（ｄ））（ここで「ｄ」は、１〜「Ｄ」までの任意整数であってよい）がネットワーク（１０６）を介してアクセス可能なストレージ（１１６）にストアされていること、すなわちクライアントデータ（１１４（ｄ））が「クラウド（インターネット）」を介し有効であることとして図１に例示される。例えば、クライアント（１０４（１）〜１０４（Ｎ））のサブセットがデータを含むように、複数のクライアント（１０４（１）〜１０４（Ｎ））によるピアツーピアネットワークを介し、ストレージ（１１６）を提供できる。したがって、複数の内の以前無効だったクライアントが有効になるとき、そのクライアントは、クライアント（１０４（１）〜１０４（Ｎ））のサブセットからデータを受信できる。別の実施例において、ストレージ（１１６）は、メッセージングサービス（１０２）の一部として含まれる。例えば、メッセージングサービス（１０２）は、クライアントデータ（１１４（ｄ））と同期し、クライアントデータの同期やその他、図２と関連して見つけることができるさらなる論述をスケジュールするような、複数のクライアントデータ（１１４（ｄ））のストレージを管理するために実行され得る共有マネージャモジュール（１１８）を含むことができる。
【００１６】
ストレージ（１１６）にはまた様々な方法でアクセスできる。例えば、ストレージ（１１６）、さらに具体的に言うとストレージ（１１６）を介し有効なクライアントデータ（１１４（ｄ））は、ウェブベースのインタフェースを介し有効にされ得る。このインタフェースを介し行われた変更は、対応するクライアントに伝播されて、衝突（コンフリクト）検出及び解決規則を受けられる。メッセージングサービス（１０２）及び／又は複数のクライアント（１０４（１）〜１０４（Ｎ））にアクセス可能な単独で動作する専用ストレージシステムなどのストレージ（１１６）の他の様々な実施例もまた本趣旨及び範囲から逸脱することなく想定され得る。
【００１７】
「インターネット」を介しクライアントデータ（１１４（ｄ））を提供することにより、クライアント（１０４（１）〜１０４（Ｎ））それぞれが有効でないときもデータを共有できるか又はアクセスできる。ストレージ（１１６）は、これら他のクライアントが現在オンラインでなくてもクライアント（１０４（１）〜１０４（Ｎ））がクライアントデータ（１１４（ｄ））を共有し、共有空間においてクライアントにとって相互に目に見えるデータ更新をさせる共有空間を提供する。例えば、クライアント（１０４（１））は、クライアント（１０４（Ｎ））に対してアクセス可能な共有空間を示すフォルダを指定できる。クライアント（１０４（１））のユーザは、その共有空間（例えば、フォルダ）へデータをドラッグ可能であって、クライアント（１０４（Ｎ））がオフラインであるときに、クライアント（１０４（１））が一旦、オンラインになると、そのフォルダのコンテンツは「インターネット」におけるストレージ（１１６）を介しクライアント（１０４（Ｎ））により維持されている同様のフォルダと同期する。このように、インスタントメッセージングセッションを介し、同時に有効な他のクライアント（例えばクライアント（１０４（１）））に依存しない同期されたバージョンのデータをクライアント（１０４（Ｎ））に提供する。追加として、クライアント（１０４（Ｎ））はまた、クライアント（１０４（１））がオフラインであるときに「インターネット」におけるストレージ（１１６）を介し、クライアント（１０４（１））と同期して戻されるクライアントデータ（１１４（ｄ））の変更を行うことができる。図６〜１０と関連し、クライアントデータ（１１４（ｄ））の共有のさらなる論述が見出される。
【００１８】
例示的な環境（１００）は、データ共有を伴うインスタントメッセージングを使用するために構成される例示的な実装の例証であるが、様々な方法で例示的な環境が再配置され得る。例えば、共有マネージャモジュール（１１８）及びストレージ（１１６）は単独で動作するシステムにおいても提供できる。インスタントメッセージングは、メッセージングサービス（１０２）を利用せずに実行される実装においても、共有マネージャモジュール（１１８）及びストレージ（１１６）は複数のクライアント（１０４（１）〜１０４（Ｎ））によって提供され得る。例えば、共有モジュール（１１２（１）〜１１２（Ｎ））は、複数のクライアントデータ（１１４（ｄ））を管理するために、共有マネージャモジュール（１１８）の機能を取り入れることができる。追加として、共有モジュール（１１２（１）〜１１２（Ｎ））及びメッセージングモジュール（１０８（１）〜１０８（Ｎ））は、共に例示されているが、個別に提供され、それぞれのアプリケーションプログラミングインタフェースを介し通信できる。
【００１９】
一般に、ソフトウェア、ファームウェア（例えば、固定論理回路）、手動処理又はこれらの実装の組み合わせを使用し、本明細書に記載された機能のいずれも実施できる。本明細書に一般に使用される「モジュール」、「機能」及び「論理」という語句は、ソフトウェア、ファームウェア又はソフトウェアとファームウェアの組み合わせを表す。ソフトウェア実装の場合、モジュール、機能又は論理は、プロセッサ（例えば、ＣＰＵ又は複数のＣＰＵ）上で実行されるときに指定されるタスクを実行するプログラムコードを表す。１つ以上のコンピュータ可読メモリ装置にプログラムコードをストアすることができ、図２と関連し、更なる説明が見出される。後述するインスタントメッセージング技法の特徴は、プラットホームとは独立であり、これは様々なプロセッサを有する多様な商用計算プラットホームにおいて、インスタントメッセージング技法を実施できることを意味する。
【００２０】
図２は、図１のメッセージングサービス（１０２）、複数のクライアント（１０４（１）〜１０４（Ｎ））及びストレージ（１１６）をさらに詳細に示す例示的な実装におけるシステム（２００）の図である。複数のサーバ（２０２（ｓ））によって実施されるメッセージングサービス（１０２）が例示され、そこでは、「ｓ」が１から「Ｓ」までの任意整数であってよい。図２に複数のクライアント（１０４（１）〜１０４（Ｎ））がクライアント装置として例示される。例えば、複数のサーバ（２０２（ｓ））及びクライアント（１０４（１）〜１０４（Ｎ））は、それぞれのプロセッサ（２０４（ｓ））、（２０６（１）〜２０６（Ｎ））及びそれぞれのメモリ（２０８（ｓ））、（２１０（１）〜２１０（Ｎ））を含んで例示される。
【００２１】
プロセッサはそれらが形成される材料又はそこで使用される処理メカニズムによって制限されない。例えば、半導体及び／又はトランジスタ（例えば、電子集積回路（ＩＣ））からなるプロセッサを含むことができる。前記文脈では、プロセッサ実行可能命令は、電子的に実行可能な命令であり得る。代替として、プロセッサの又はそのためのメカニズム及び計算機装置の又はそのためのメカニズムは、量子コンピューティング、光学コンピューティング、（例えばナノテクノロジーを使用する）機械的コンピューティングなどを含むが、これらに限定されることはない。追加として、単一のメモリ（２０８（ｓ））（２１０（１）〜２１０（Ｎ））が、サーバ（２０２（ｓ））及びクライアント（１０４（１）〜１０４（Ｎ））それぞれのために示されるがランダムアクセスメモリ（ＲＡＭ）、ハードディスクメモリ、取り外し可能メディアメモリなどのさまざまなタイプ及びメモリの組み合わせを使用できる。
【００２２】
複数のクライアント（１０４（１）〜１０４（Ｎ））それぞれは、プロセッサ（２０６（１）〜２０６（Ｎ））それぞれにおいて実行され、それぞれのメモリ（２１０（１）〜２１０（Ｎ））においてストアされるように例示された複数のメッセージングモジュール（１０８（１）〜１０８（Ｎ））それぞれのうち１つを含む。前述のように、メッセージングモジュール（１０８（１）〜１０８（Ｎ））は、ネットワーク（１０６）上のメッセージングサービス（１０２）の使用を介した間接的な通信及び／又はピアツーピアネットワーク（２１２）上の直接的な通信のいずれかにおいて、インスタントメッセージングセッションを提供するために実行可能であって、ピアツーピアネットワーク（２１２）が、ネットワーク（１０６）から又はそれへのオーバレイとして個別に提供され得ることを示す二重矢印によって図２に例示される。
【００２３】
インスタントメッセージングを提供する様々な方法でメッセージングモジュール（１０８（１）〜１０８（Ｎ））を構成できる。前に説明したように例えば、メッセージングサービス（１０２）などを介し、ピアツーピアネットワークオーバレイなどにおいて、インスタントメッセージングそれ自体を提供するために実行可能な専用モジュールとしてメッセージングモジュール（１０８（１）〜１０８（Ｎ））を構成できる。別の実施例において、メッセージングモジュール（１０８（１）〜１０８（Ｎ））は、インスタントメッセージングを提供するウェブサイトとして構成されたメッセージングサービス（１０２）にアクセスするために実行可能な通信モジュール（例えばＡｃｔｉｖｅＸ又はウェブブラウザの内部で実行する同様のコントロール）として構成される。言い換えると、ウェブブラウザ内部で実行するコントロールは、ウェブサイトとの対話を介しメッセージングモジュール（１０８（１）〜１０８（Ｎ））の機能を提供するために構成される。そのような例においては、前述のようなクライアントデータ１１４（ｄ）のストレージを介しウェブブラウザが、クライアント間でデータを共有できるように、ウェブインタフェースを介したアクセスのためのストレージ（１１６）を構成できる。
【００２４】
様々な方法で複数のメッセージングモジュール（１０８（１）〜１０８（Ｎ））を複数のクライアント（１０４（１）〜１０４（Ｎ））に提供できる。一実装において、インスタントメッセージングセッションを開始するリクエストに応答するメッセージングサービス（１０２）による（及び、さらに具体的に言うと、メッセージングマネージャモジュール（１１０）の実行を介し）メッセージングモジュール（１０８（１）〜１０８（Ｎ））を提供する。例えば、クライアント（１０４（１））は、クライアント（１０４（Ｎ））とのインスタントメッセージングセッションの開始をリクエストできる。クライアント（１０４（Ｎ））が、インスタントメッセージングセッションの開始を受理する場合、インスタントメッセージングセッションを提供するために、それぞれのクライアント（１０４（１）〜４０４（Ｎ））における実行のためのネットワーク（１０６）上のメッセージングモジュールと通信するために、メッセージングマネージャモジュール（１１０）がプロセッサ（２０４（ｓ））で実行される。異なる実装においては、メッセージングモジュール（１０８（１）〜１０８（Ｎ））がクライアント（１０４（１）〜４０４（Ｎ））のユーザによってダウンロードされ、インストールされ得る。
【００２５】
メッセージングモジュール（１０８（１）〜１０８（Ｎ））それぞれは、複数の複製モジュール（２１４（１）〜２１４（Ｎ））のそれぞれの１つ及び複数のスケジューリングモジュール（２１６（１）〜２１６（Ｎ））のそれぞれの１つを有するように示される。複製モジュール２１４（１）〜２１４（Ｎ）は、ファイルやディレクトリのような、複数のクライアント（１０４（１）〜１０４（Ｎ））によって共有されるデータの同期を受け持つ機能を表わす。例えば、クライアント（１０４（１）〜１０４（Ｎ））それぞれは、１つ以上の共有空間を定義することにより、クライアント（１０４（１）〜１０４（Ｎ））によって維持されるデータ（２２０（１）〜２２０（Ｎ））を共有する方法を指定するために使用されるコンタクト先のリスト（２１８（１）〜２１８（Ｎ））それぞれを含むことができる。例えば、クライアント（１０４（１））のコンタクト先のうち１つ（２１８（１））は、クライアント（１０４（Ｎ））（例えば別名、分かりやすい名前、ネットワークアドレスなど）を参照可能であり、同様にクライアント（１０４（Ｎ））のコンタクト先のうち１つ（２１８（Ｎ））は、クライアント（１０４（１））を参照でき、前述のコンタクトを使用し、クライアント（１０４（１））及び（１０４（Ｎ））は共有スペースを確立できる。複製モジュール（２１４（１）〜２１４（Ｎ））は、実行されるとき、コンタクト先（２１８（１）〜２１８（Ｎ））によって参照されるクライアント（１０４（１）〜１０４（Ｎ））それぞれが、クライアントデータ（２２０（１））の同期されたバージョンを有するように、ピアツーピアクライアントデータ（２２０（１）〜２２０（Ｎ））の複製を実行できる。
【００２６】
例えば共有マネージャモジュール（１１８）との対話を介して、複製モジュール（２１４（１）〜２１４（Ｎ））は、クライアント（１０４（１）〜１０４（Ｎ））が、それらのクライアントデータ（２２０（１）〜２２０（Ｎ））に対して変更し、その変更をクライアントデータ（１１４（ｄ））に同期させ、クライアントによって要求される明示的な動作をせずにデータを共有しているクライアント相互が見ることができるように、クライアントデータ（２２０（１）〜２２０（Ｎ））とクライアントデータ（１１４（ｄ））とを同期させることができる。言い換えると、モジュールにより自動的にユーザの介入なしに同期を実行できる。さらに、クライアントデータ（１１４（ｄ））のストレージ（１１６）の使用を介し、クライアント（１０４（１）〜１０４（Ｎ））それぞれが現在、有効でなくても、例えば、メッセージングサービス（１０２）へログオンし、メッセージングサービス（１０２）などを使用せずに複数のクライアント（１０４（１）〜１０４（Ｎ））によって実行されるピアツーピアのインスタントメッセージングセッションにログオンされていても、変更が実行され、伝播され得る。一実装においては、データ項目全体の（例えばファイルとディレクトリ）の複製もまた想定できるが、変更されたデータ及びデータ項目全体ではない（例えば変更されたファイルのサブセット）が、ハードウェア、ソフトウェア及びネットワークリソースを節約するために模写される。例えば、クライアントデータ（１１４（ｄ））は、「ストアアンドフォワード」技法を使用してクライアントデータ（１１４（ｄ））を共有するクライアントそれぞれと通信される変更されたファイルのサブセットを記述できる。これによってストレージ（１１６）におけるスペースが再利用できる。例えば、部分的なコピーの場合、ストレージ（１１６）は、共有されるファイルそれぞれのためのデータを除き、ディレクトリ構造及びファイルのメタデータについての情報を保存でき、その場合、複数のクライアント（１０４（１）〜１０４（Ｎ））にまだ複写されていないファイルのためのデータだけがストレージ（１１６）において保たれ得る。ファイルが一旦、複数のクライアント（１０４（１）〜１０４（Ｎ））に複写されると、ストレージ（１１６）におけるスペースを自動的に再利用できる。
【００２７】
複製モジュール（２１４（１）〜２１４（Ｎ））及び／又は共有マネージャモジュール（１１８）はまた、競合する変更を検出しフラグを立てるようにクライアントデータ（２２０（１）〜２２０（Ｎ））と（１１４（ｄ））との同期を管理できる。モジュールはその後、どの変更が保たれるべきか、削除されるべきかなどを決定するような修正に関する競合をクライアント（１０４（１）〜１０４（Ｎ））に通知できる。複製モジュール（２１４（１）〜２１４（Ｎ））は、図６〜７及び９〜１０に関連し、さらなる論述が見出される他のさまざまな機能を提供できる。
【００２８】
スケジューリングモジュール（２１６（１）〜２１６（Ｎ））は、それぞれの複製モジュール（２１４（１）〜２１４（Ｎ））によって実行される同期をスケジューリングするために構成される機能を表わす。例えば、スケジューリングモジュール（２１６（１）〜２１６（Ｎ））は、処理リソース（例えば、ＣＰＵサイクル）、メモリリソース（例えば、使用されるメモリ容量、メモリはどのくらいの頻度でアクセスされているかなど）、ネットワークリソース（例えば利用される帯域幅）など同期を実行するために使用されるリソースを管理するための複製活動を制御できる。追加として、スケジューリングモジュール（２１６（１）〜２１６（Ｎ））は、図８に関連してさらなる論述が見出される、他のさまざまな問題に基づく同期をスケジューリングできる。
【００２９】
複数のクライアント（１０４（１）〜１０４（Ｎ））間でクライアントデータ（２２０（１）〜２２０（Ｎ））及び（１１４（ｄ））を共有するために提供される共有空間は、様々な方法で構成できる。例えば、クライアント（１０４（１）〜１０４（Ｎ））それぞれは、「クライアント」フォルダ（２２２）、１つ以上の「特定のクライアント（単数又は複数）との共有」フォルダ（２２４）、「グループ」共有フォルダ（２２６）、及びデータ項目のためのストレージのその他の表示（２２８）を有し得る。ストレージ（１１６）におけるクライアントデータ（１１４（ｄ））として、これらのフォルダの１つ以上のコピーもまた維持できる。例えば、クライアントフォルダ（２２２）は、クライアント（１０４（１）〜１０４（Ｎ））のうち特定の１つに対応し、クライアントフォルダのコピーを有するクライアント相互に複製されたデータを含む。一実装において、他のクライアントは、クライアントがフォルダにドロップする任意のクライアントデータ（例えばファイル、フォルダなど）を受信するが、そのデータを変更も修正もできない。異なる実装において、クライアントすべては、データを変更又は修正できる。
【００３０】
クライアント（１０４（１）〜１０４（Ｎ））それぞれのコンタクト先のリスト（２１８（１）〜２１８（Ｎ））内に含まれるコンタクト先それぞれを「特定のクライアント（単数又は複数）との共有」フォルダ（２２４）に提供できる。例えば、他方のクライアント上のローカルにストアされた別のバージョン又はストレージ（１１６）のクライアントデータ（１１４（ｄ））と同期するフォルダへローカルにストアされたバージョンへのアクセスを有するユーザそれぞれによる、このフォルダ内のデータ項目に対して実行許可される変更によって、他のコンタクト先との共同作業のためにこのフォルダを利用できる。「グループ共有」フォルダ（２２６）もまた、共同作業のために提供できる。
【００３１】
「特定のクライアント（単数又は複数）との共有」フォルダ（２２４）及び「グループ共有」フォルダ（２２６）の双方は、持続されるグループの概念を利用できる。例えば、グループ（例えば「特定のクライアント（単数又は複数）との共有」フォルダ（２２４）の実体中の２人のグループ、「グループ共有」フォルダ（２２６）の中の２人以上のグループ）の持続は、特定のグループ内のメンバーを指定する複数の永続オブジェクト２１６（ａ）（ここで「ａ」は１〜「Ａ」までの任意整数である）の使用を介し、提供され得る。例えば、永続オブジェクト（２１６（ａ））それぞれは、グループに参加することが許可されているクライアントのコレクションへの参照（リファレンス）を含むことができる。したがって、グループの参加者それぞれは、グループ共同作業を可能にするような、グループのメンバーによって共有されるデータを含む対応するフォルダ（例えば、「特定のクライアント（単数又は複数）との共有」フォルダ（２２４）又は「グループ共有」フォルダ（２２６））を有することができる。さらに、ストレージ（１１６）においてクライアントデータ（１１４（ｄ））として「グループ共有」フォルダの１つ以上のコピーもまた維持できる。様々な異なる方法でストレージ（２１８）は提供できるが、メモリ（２０８（ｓ））に含まれるストレージ（２１８）及びローカルのコピー（２１８（１）〜２１８（Ｎ））として永続オブジェクト（２１６（ａ））が例示される。
【００３２】
複数の永続オブジェクト（２１６（ａ））それぞれは、その永続オブジェクトを作成したモジュールの実行の終了のあとも存続し、及び／又は、永続オブジェクトを作成したモジュールの実行セッションを過ぎて存続する永続的なものである。例えば、クライアント（１０４（１））において、永続オブジェクト（２１６（ａ））を形成しストアするためにメッセージングモジュール（１０８（１））を実行できる。したがって、メッセージングモジュール（１０８（１））の実行が終了されても、永続オブジェクト（２１６（ａ））は、クライアント（１０４（１）〜１０４（Ｎ））の「ログオン」で、次回呼ぶことができる。このように、永続オブジェクト（２１６（ａ））を作成するために利用された過去のインスタントメッセージングセッション後、永続オブジェクトなどを作成するのに利用されたモジュール（例えばメッセージングモジュール（１０８（１）））の過去の実行後、永続オブジェクト（２１６（ａ））は持続できる。
【００３３】
他の様々な機能を提供するためにもまた、永続オブジェクト（２１６（ａ））を利用できる。例えば、永続オブジェクト（２１６（ａ））においてクライアントのリファレンスの持続を提供することによって、クライアント（１０４（１）〜１０４（Ｎ））のうちどれがオンライン活動に参加するかを選択する複数の手動ステップを実行することもオンライン動作への参加が望まれている通知などを送信することも必要なしに、（例えば、インスタントメッセージング、共有、オンラインゲームなどの）オンライン動作に参加するクライアント（１０４（１）〜１０４（Ｎ））を招待するために永続オブジェクト（２１６（ａ））を再利用できる。追加として、参照されるクライアント（１０４（１）〜１０４（Ｎ））のうちいずれか１つのコンタクト先（２１８（１）〜２１８（Ｎ））において、呼ぶことができるか又は複写されるために、永続オブジェクト（２１６（ａ））を構成できる。例えば、クライアント（１０４（Ｎ））は、クライアント（１０４（１））によって生成された永続オブジェクト（２１６（ａ））を活用できる。さらに、永続オブジェクト（２１６（ａ））によって参照されるクライアントそれぞれは、別のクライアントのリファレンスを含むように永続オブジェクト（２１６（ａ））の変更ができ、その結果、永続オブジェクトによって記述されるグループのメンバーが増加する。以下留意すべきは、永続オブジェクト（２１６（ａ））が、共有関係を指定するために利用され、そこで指定されたクライアントそれぞれが同時にオンラインであることが要求されないことである。
【００３４】
図３は、インスタントメッセージングに関連したクライアント間でクライアントデータを共有するために共有空間を利用する図１の複数のクライアントを示す例示的な実装（３００）の図である。クライアント（１０４（１））、（１０４（ｎ））、及び（１０４（Ｎ））をそれぞれ名前「アダム」、「ボブ」及び「シャーリーン」を有するものとして例示し、したがって、以下の論述において、「クライアント（１０４（１））」又は「アダム（１０４（１））」、「クライアント（１０４（ｎ））」又は「ボブ（１０４（ｎ））」などと呼ぶことができる。
【００３５】
アダム（１０４（１））は、「私の共有」フォルダ（３０２）、「ボブ」フォルダ（３０４）、「シャーリーン」フォルダ（３０６）、「グループ」フォルダ（３０８）及び「アダム／ボブ」フォルダ（３１０）を含むものとして例示される。ボブ（１０４（ｎ））は、「私の共有」フォルダ（３１２）、「アダム」フォルダ（３１４）、「シャーリーン」フォルダ（３１６）、「グループ」フォルダ（３１８）及び「アダム／ボブ」フォルダ（３２０）を含むものとして例示される。同様に、シャーリーン（１０４（Ｎ））は、「私の共有」フォルダ（３２２）、「アダム」フォルダ（３２４）、「ボブ」フォルダ（３２６）及び「グループ」フォルダ（３２８）を含む。
【００３６】
「私の共有」フォルダ（３０２）、（３１２）、（３２２）は、これらのフォルダ内に置かれたデータを他のクライアントの上の対応するフォルダ（３０４）、（３０６）、（３１４）、（３１６）、（３２４）、（３２６）と共有できるように作動する。例えば、アダム（１０４（１））の「私の共有」フォルダ（３０２）は、ボブ（１０４（ｎ））及びシャーリーン（１０４（Ｎ））の「アダム」フォルダ（３１４）、（３２４）それぞれに対応している。このように、フォルダ（３０２）に置かれたデータは、フォルダ（３０２）からフォルダ（３１４）、（３２４）までの破線によって例示されるように、フォルダ（３１４）、（３２４）へ自動的に複製される。このようにして、ボブ（１０４（ｎ））及びシャーリーン（１０４（Ｎ））は、アダム（１０４（１））から発せられたデータを容易に決定できる。対応する破線によって示されるように同様の機能がまた、ボブ（１０４（ｎ））及びシャーリーン（１０４（Ｎ））それぞれの「私の共有」フォルダ（３１２）、（３２２）によって使用され得る。
【００３７】
彼らは同じグループに属しているので、アダム（１０４（１））、ボブ（１０４（ｎ））及びシャーリーン（１０４（Ｎ））はまた、グループフォルダ（３０８）、（３１８）、（３２８）を介しデータを共有できる。前に説明したように、グループは、グループのメンバーを指定する永続的オブジェクト（２１６（ａ））に基づき形成され得る。これらのフォルダ（３０８）、（３１８）、（３２８）において変更されたデータは、クライアント（１０４（１））、（１０４（ｎ））、（１０４（Ｎ））の間で自動的に同期され得る。
【００３８】
２人のユーザ間の共同作業に対してもまたフォルダを提供できる。例えば、「アダム／ボブ」フォルダ（３１０）、（３２０）は、両方のクライアントがこれらのフォルダに含まれるデータを追加、修正、削除するか、もしくは変更できるような共同作業のために、（例えば２人のグループである）アダム（１０４（１））及びボブ（１０４（ｎ））の間で共有されるデータを表すことができる。
【００３９】
様々なフォルダによって提供される共有空間について説明してきたが、メッセージングサービス（１０２）で実施される（ストレージ（１１６））関連のように、その趣旨及び範囲から逸脱せずに、さまざまな表現を利用できる他の様々な方法で共有空間を提供できる。さらに、フォルダ（３０２〜３２８）によって表される共有空間はまた、様々な方法で構成され、その実施例が以下の図に示される。
【００４０】
図４は、他の少なくとも１つのクライアントとデータを共有するためのインスタントメッセージング及び図３における共有空間を提供するために構成される例示的な実装（４００）におけるユーザインタフェースの図である。クライアント（１０４（１））におけるメッセージングモジュール（１０８（１））の実行を介してユーザインタフェース（４０２）が表示される。ユーザインタフェース（４０２）は、別のクライアント、この場合においては図３のボブ（１０４（ｎ））とのインスタントメッセージングのセッションの間、通信されるインスタントメッセージを表示するために構成されるインスタントメッセージング部（４０４）を含む。メッセージを送信するために「送信」ボタン（４０８）表示を含むテキスト入力部（４０６）を介し、テキストを入力することができ、選択すると、インスタントメッセージングセッションに参加しているクライアントそれぞれに入力されたテキストを通信できる。
【００４１】
ユーザインタフェース（４０２）はまた、共有部（４１０）を含む。ユーザインタフェース（４０２）の共有部（４１０）は、「私の共有」フォルダ（３０２）、「ボブ」フォルダ（３０４）、「シャーリーン」フォルダ（３０６）、「グループ」フォルダ（３０８）」及び「アダム／ボブ」フォルダ（３１０）を含む図３に関連し前に説明したフォルダの表現を含む。このように、インスタントメッセージング及びデータ共有を提供するために、ユーザインタフェース（４０２）を構成できる。
【００４２】
前に説明したように、他の１つ以上のクライアントが、シャーリーン（１０４（Ｎ））のように現在オンラインでなくてもデータを共有できる。例えば、グループフォルダ（３０８）にドラッグされたデータは、現在有効であるクライアントそれぞれ（例えば、ボブ１０４（ｎ））と即座に共有され、そのフォルダによって指定される他のクライアントの、例えば、シャーリーン（１０４（Ｎ））が有効になる時の後の通信のために、ストアされ得る。フォルダ同期のさらなる論述を図６〜１０と関連して見出すことができる。
【００４３】
図５は、データを他の少なくとも１つのクライアントと共有するために、インスタントメッセージング及び図３の共有空間を提供するために構成される例示的な実装（５００）における別のユーザインタフェースの図である。図４と同様に、クライアント（１０４（ｎ））におけるメッセージングモジュール（１０８（ｎ））の実行を介し、ユーザインタフェース（５０２）を表示する。図５のユーザインタフェース（５０２）は、複数のクライアントの表現、クライアント（例えば、「アダム」、「シャーリーン」、「デイブ」）に対応する名前、それぞれのクライアントがデータ共有を支援するかどうかに関する指示、及び、データ共有が支持されている場合、新しいか又は更新されたデータがそれらのクライアントから有効に来ているか否かのしるし（例えば「きらめき」）を含む共有部（５０４）を含む。
【００４４】
例えば、アダムの表示は、アダムがデータ共有を支援するのを示すフォルダとして示される指示を含む。さらに、「アダム」フォルダにおける視覚表示は、そのフォルダに含まれるデータに対する変更をボブ（１０４（ｎ））に通知するのに使用され、この場合、フォルダに星（「又はきらめき」）のオーバレイを介し例示される。このように、ボブ（１０４（ｎ））は、フォルダのコンテンツがユーザインタフェース（５０２）の別の共有部（５０６）に表示できるようにフォルダを選択できる。
【００４５】
もう一方の共有部（５０６）は、アダム（１０４（１））とボブ（１０４（ｎ））との間で共有されるサブフォルダを含むものとして例示され、この場合、休暇写真（５０８）、仕事のプロジェクト（５１０）、文書（５１２）、及び子供のホームビデオ（５１４）を含む。このように、ボブ（１０４（ｎ））は、共有データに対して修正が行われたことを通知され、インスタントメッセージングユーザインタフェースにおける表現を介したナビゲーションを使用し、それらの変更を調査できる。以下留意すべき点は、シャーリーン（１０４（Ｎ））がデータ共有を支援する指示（例えばフォルダ）は、データが修正されたという指示を含まないことである。したがって、ボブ（１０４（ｎ））は、ボブ（１０４（ｎ））とシャーリーン（１０４（Ｎ））によって共有されるデータの状態に関する知識が保たれる。また、以下留意すべきは、「デイブ」は共有の指示を含まず、したがって、データ共有を支援しないことである。データ共有を支援する例示的なインスタントメッセージングのユーザインタフェースについて論述したが、他のさまざまなユーザインタフェースが、その趣旨と範囲から逸脱せずにデータ共有を支援するために利用されるのもまた明らかである。
【００４６】
例示的手順
以下の論述では、前に説明したシステム及び装置を利用し、実施可能なデータ共有を伴うインスタントメッセージングについて説明する。ハードウェア、ファームウェア又はソフトウェア又はそれらの組み合わせで手順それぞれの特徴を実施できる。本手順は、１つ以上の装置で実行される操作を指定する１組のブロックとして示され、それぞれのブロック（例えば図６〜８）及び矢印（例えば図９〜１０）による操作を実行するために示された順序には、必ずしも制限されない。以下の論述の一部において、図１の環境（１００）及び／又は図２のシステム（２００）を参照する。
【００４７】
図６は、データを共有する共有クライアントの１つが利用できないときであっても、インスタントメッセージングセッションに関連して共有されたデータが同期される例示的な実装における手順（６００）を表わすフロー図である。メッセージングモジュール（１０８（１））を使用する間、クライアント（１０４（１））は、共有される新しいデータを指定する（ブロック６０２）。例えば、クライアント（１０４（１））は、共有ユーザインタフェース（４００）又は（５００）における共有フォルダ（４０４）又は（５０６）の表示を使用することによって、それらのデスクトップからファイルを共有フォルダ、例えば、フォルダ（３０２）、（３０８）、（３１０）それぞれへドラッグすることができる。
【００４８】
共有データがその後、他のどのクライアント（単数又は複数）に受信されるか決定される（ブロック６０４）。例えば、共有モジュール（１１２（１））は、フォルダに置かれたデータが特定のクライアントと共有されることを、その写真のしるしが受信されたフォルダの検査を介し決定できる。指定されたデータはその後、インスタントメッセージングを介し、有効な他のクライアントと同期する（ブロック６０６）。例えば、メッセージングモジュール（１０８（１））は、特定のクライアントそれぞれの存在を決定し、ネットワーク（１０６）又はピアツーピアネットワーク（２１２）を介し、彼らと接続することによって有効なそれらのクライアントとそのデータを同期させる。図７と関連し、存在のさらなる論述を見出すことができる。
【００４９】
指定されたデータは、有効でない他のクライアントとの通信のためにストアされる（ブロック６０８）。例えば、メッセージングサービス（１０２）を使用した接続によりストレージ（１１６）にクライアントデータ（１１４（ｄ））としてデータをストアすることができる。したがって、以前、有効でなかった少なくとも１つのクライアントが有効になると（ブロック６１０）、指定されたデータが、その少なくとも１つのクライアントと同期する（ブロック６１２）。このように、クライアントそれぞれが現在有効であるか否かに関わらず、複数クライアントによる共有及び同期のためのデータを指定できる。
【００５０】
図７は、インスタントメッセージングのための有用性に関連し、クライアント間でデータを共有するために、クライアントの存在（プレゼンス）が利用される例示的な実装における手順（７００）を示すフロー図である。インスタントメッセージングユーザインタフェースとの対話を介し、第１のクライアントが共有データと対話する（ブロック７０２）。例えば、第１のクライアントは、データを共有フォルダに追加でき、既にフォルダに含まれたデータを変更し、フォルダからデータを削除することなどができる。
【００５１】
対話が複製のトリガとなるか否かをその後決定する（決定ブロック７０４）。例えば、共有モジュール（１１２（１））は、複製される必要があるクライアントデータに対して変更がされたか否かを決定するために、クライアントデータ（２２０（１））とクライアント（１０４（１））の対話を監視できる。そうでない場合（決定ブロック（７０４）からの「否定時」）、対話が監視され続けられる（ブロック７０２）。
【００５２】
対話が複製をトリガするとき（決定ブロック（７０４）から「肯定時」）、データを共有するためにクライアントのどれが指定されるかが決定される（ブロック７０６）。例えば、フォルダ（３１４）としてクライアント（１０４（ｎ））（すなわち、「ボブ」）及びフォルダ（３２４）としてクライアント（１０４（Ｎ））（すなわち「シャーリーン」上にそのコピーが含まれるデータを「私の共有」フォルダ（３０２）の中に含むことができる。別の実施例においては、永続オブジェクトなどによって指定されたグループフォルダ（３０８）にデータを含むことができる。
【００５３】
決定されたクライアントそれぞれの存在がその後、確認される（ブロック７０８）。例えば、メッセージングモジュール（１０８（１））は、クライアントが「オンライン」、「オフライン」、「オンラインだがインスタントメッセージを受信していない」であるか否かなどのようなインスタントメッセージングのための有効性に関連し、クライアント（１０４（１）〜１０４（Ｎ））それぞれの存在を決定できる。このように、データの共有は、インスタントメッセージングを介し提供された存在の概念を活用できる。
【００５４】
データはその後、クライアントが存在するとき、クライアントそれぞれと共有される（ブロック７１０）。様々な方法でこれを実行できる。例えば、クライアントの存在は、メッセージングモジュール（１０８（１））と共有モジュール（１１２（１））の対話を介し監視できる（ブロック７１２）。クライアントはその後、メッセージングサービスに「ログオン」されるか否かが決定される（決定ブロック７１４）。例えば、メッセージングモジュール（１０８（１））は、複数のクライアント（１０４（ｎ）〜１０４（Ｎ））のうちどれが現在ログオンしているか否かを決定するために、メッセージングマネージャモジュール（１１０）と通信できる。クライアントがログオンされる場合（決定ブロック（７１４）からの「肯定時」）、共有されるデータ項目が、第１のクライアントによる対話を反映するために同期する（ブロック７１６）。クライアントがログオンしていない場合（決定ブロック（７１４）からの「否定時」）、クライアント存在が再び監視される（ブロック７１２）。このように、この実装においては、クライアントが有効になるのに従ってクライアントによって共有されたデータが同期する。しかし、別の実装においては、データの同期がスケジューリングされ、以下の図と関連し、その実施例を見出すことができる。
【００５５】
図８は、インスタントメッセージングに関連し共有されるデータの同期がスケジューリングされる例示的な実装における手順（８００）を表わすフロー図である。共有するために同期するデータ項目がどれであるか決定する（ブロック８０２）。例えば、実行されると、共有モジュール（１１２（１））は、他の少なくとも１人のクライアントと共有されるために指定されているデータ項目との、クライアントによる対話を監視できる。
【００５６】
その後、同期するべきデータ項目をどのクライアント（単数又は複数）が受け取るべきかに関する決定がされる（ブロック８０４）。例えば、クライアントは、複数の異なるデータ項目と対話でき、共有モジュール（１１２（１））は、どのクライアントが、異なるクライアントと共有するために指定された異なるフォルダを介し、データ項目のうちどれを共有するかを決定できる。
【００５７】
決定されたクライアント（単数又は複数）のためのデータ項目の同期がその後、スケジュールされる（ブロック８０６）。スケジューリングは様々な特性に基づくことができる。例えば、データ項目の同期のスケジューリングをするために、決定されたクライアントの特性（ブロック８０８）を利用できる。例えば、特性は、決定されたクライアントが現在メッセージングサービスにログオンしているか否か、クライアントの歴史的な存在傾向を説明するデータ（例えばクライアント「ｘ」は通常「ｙ」の期間有効である）、クライアントのハードウェア及び／又はソフトウェアリソース（例えば接続速度及びデータを受信するためにクライアントが必要とする総時間）などを含むことができる。
【００５８】
別の実施例においては、サイズ、他のデータ項目と関連する優先権などのような同期するべきデータ項目の特性（ブロック８１０）が利用される。更なる実施例においては、メモリサイクル、データなどを送信するためのクライアントのネットワーク回線容量などのような同期しているクライアントの特性（ブロック８１２）が利用される。このように、同期のスケジューリングをするために様々な特性を利用できる。いくつかの実施例について論述したが、他の様々な実施例もまた、その趣旨と範囲から逸脱せずに想定されるのが明らかである。
【００５９】
バージョンベクトル
前に図３〜５で示したように、ユーザインタフェースにおいては、フォルダとして共有空間を表すことができる。クライアントが同時にオンラインであるか否かに関わらず、これらのフォルダのコンテンツは、クライアント間で同期できる。こうして、２つのクライアント間で共有されるスペースの場合、これはそれらの共有フォルダにおいてクライアント双方が最終的に（すなわち、同期完了のとき）同一のデータセット（例えばファイル及びサブフォルダ）を有することを意味できる。グループ（例えば永続オブジェクト（２１６（ａ））を使用し、形成されたグループ）のメンバーすべての間で同期される空間の場合、これはグループ又はサークルのメンバーそれぞれが、それらの共有フォルダにおいて最終的に同一のデータを有することを意味できる。
【００６０】
様々な方法でデータの同期を達成できる。例えば、データを同期させるための複製モジュールにより、複数のマスタ状態に基づくファイル複製技法を使用できる。この技法は、レプリカ又は同期されるべきフォルダそれぞれのコピーのために、「バージョンベクトル」と呼ばれるグローバルな状態計算を含む。２つのバージョンベクトルの比較によって、複製モジュールは例えば、２つのコピーが同期されるべきか否かを決定できる。バージョンベクトルが同一の場合、そのコピーは同期していると考えられる。しかし、バージョンベクトルが異なる場合、複製モジュールは、データ項目（例えば、ファイル又はフォルダ）のどれが同期されるべきかを効率的に決定するために、バージョンベクトルの相違を使用できる。
【００６１】
バージョンベクトルは、同期するべき異なる多くのコピーと等しい多くのエントリを含み得る。その数は一般に同期を保つべきデータ項目の数よりもはるかに少ないので、これは有利になり得る。例えば、数万のファイルが共有空間にあっても、２つのクライアントのアダム（１０４（１））とボブ（１０４（ｎ））との間で共有される空間に関して、各クライアントそれぞれのためのコピーの数は通常各々にたいして１つの、２つだろう。例えば、「Ａ」及び「Ｂ」それぞれによって示されるクライアント（１０４（１））及び（１０４（ｎ））上の２つのコピーを用いて、２つのコピーに対してあり得るバージョンベクトルの一例を以下に示す：
コピーＡのバージョンベクトル：｛Ａ→１５，Ｂ→３００｝
コピーＢのバージョンベクトル：｛Ａ→１２，Ｂ→５００｝
しかし、以下留意すべきは、２つのクライアント間で共有される空間に関する場合であっても２つ以上のコピーが含まれることがあり得るということである。例えば、クライアントのアダム（１０４（１））が２台の異なる機器「ＭＡ１」、「ＭＡ２」を使用しメッセージングサービス（１０２）と対話し、クライアントのボブ（１０４（ｎ））が単一のマシン「ＭＢ」を使用しメッセージングサービス（１０２）と対話する場合を考えよう。この場合、（ＭＡＩ、ＭＡ２及びＭＢそれぞれの上に）データのコピー３部があり、その結果、バージョンベクトルは、以下のような例の３つのエントリそれぞれを含む：
ＭＡ１上のコピーＡのバージョンベクトル：｛ＭＡ１→１８，ＭＡ２→３３，ＭＢ→３００｝
ＭＡ２上のコピーＡのバージョンベクトル：｛ＭＡ１→１３，ＭＡ２→５８，ＭＢ→３００｝
ＭＢ上のコピーＢのバージョンベクトル：｛ＭＡ１→１１，ＭＡ２→１０，ＭＢ→７７７｝
２台の機器間の効率的な同期問題についてバージョンベクトルを介し記述できるが、マシンのどれが同期するべきか否かを効率的に決定するための技法が依然として望まれている。例えば、クライアント「アダム」は、１００個のコンタクト先（２１８（１））を有し、それらのコンタクトそれぞれと共有空間を維持できる。そのため、アダム（１０４（１））がオンラインとなるとき、アダムのメッセージングモジュール（１０８（１））がバージョンベクトルを交換するために１００個のコンタクト先すべてに接続し、同期が望まれているか否かを決定する力ずくのアプローチが要求され、リソースの効率の悪い使用をもたらし得る。したがって、以下の図と関連し見出される共有データの効率的な同期を提供するために様々な技法、例を使用できる。
【００６２】
双方の実施形態は、等価性に関するバージョンベクトル比較に依存するので、ベクトル全部の代わりにバージョンベクトルのコンパクト表現を使用することにより、少ないデータをストアし送信するために、さらにバージョンベクトルは最適化され得る。そのようなコンパクト表現を達成する１つの方法は、ベクトルの正準表現からハッシュを計算することである。任意のハッシュアルゴリズムが使用できるが、（メッセージ・ダイジェスト・アルゴリズム５（ＭＤ５）又はセキュア・ハッシュ・アルゴリズム１（ＳＨＡ−１）などの）暗号性の安全なものは、異なるバージョンベクトルに関する等価なハッシュすなわち衝突（コリジョン）のリスクを減少させる。後述において、「バージョンベクトル」という語句は、ベクトル全部又はベクトルのコンパクト表現いずれかを互換性を持って意味するように使用される。
【００６３】
図９は、インスタントメッセージングに関連して共有されるべきデータを指定するための存在記録において、バージョンベクトルが発行される例示的な実装（９００）の図である。この技法は、存在記録（９０２（１））、（９０２（ｎ））それぞれの一部としてそのバージョンベクトルそれぞれを発行するクライアント（１０４（１））、（１０４（ｎ））それぞれに基づく。これらの存在記録の最新のコピー（９０２（ｍ））は、クライアント（１０４（１））、（１０４（ｎ））がサインオンされている限り、メッセージングサービス（１０２）によって維持される。クライアント１０４（１）、１０４（ｎ）のうち１つがメッセージングサービス（１０２）にログオンする度に、クライアント（１０４（１））、（１０４（ｎ））それぞれによって維持されるバージョンベクトルのうち１つが変化する度に、これらの存在記録（９０２（ｍ））は更新され得る。
【００６４】
例えば、アダム（１０４（１））は、ボブ（１０４（ｎ））との共有空間を有する。クライアント（１０４（１））、（１０４（ｎ））それぞれは、それぞれの存在記録（９０２（１））、（９０２（ｎ））において「ＶＶＡ」及び「ＶＶＢ」としてそれぞれ例示される、それぞれのバージョンベクトル、共有フォルダ（９０４（１））、（９０４（ｎ））それぞれのコピーを維持する。以下の手順はその後、２つのフォルダが同期されるべきか否かを決定するために実行され、そうならば、同期が実行される。
【００６５】
クライアント（１０４（１））がメッセージングサービス（１０２）にサインオンするときはいつも（及び／又はそのバージョンベクトル「ＶＶＡ」の１つが変化するときはいつも）、変更（ＣＨＧ）コマンド（９０４）を送信すること（矢印９０６）によって、クライアント（１０４（１））は、その存在情報の変更をメッセージングサービス（１０２）に通知する。存在記録（９０２（１））から得られるクライアントの（１０４（１））のバージョンベクトルそれぞれについての情報を伴い、ＣＨＧコマンドの一部として送信される情報は増加する。クライアント（１０４（１））が接続されている接続サーバ（２０２（１））は、クライアントの存在サーバ（２０２（ｐ））にこの情報を送る（矢印９０８）。存在サーバ（２０２（ｐ））は、クライアントの分かりやすい名前、ステータスコードなどを反映するために、クライアント（１０４（１））に関する（この場合、存在記録（９０２（ｍ））として構成される）存在データ（９１０）を更新する。追加として、存在サーバ（２０２（ｐ））は、クライアントの（１０４（１））バージョンベクトルそれぞれについての情報をストアする。
【００６６】
クライアント（１０４（ｎ））が、そのコンタクト先のリスト（２１８（ｎ））上にクライアント（１０４（１））を有するので、クライアント（１０４（１））が存在の変更があるときはいつも、メッセージングサービス（１０２）は、（（矢印９１６）によって例示された対応する接続サーバ（２０２（ｎ））を介し）クライアント（１０４（ｎ））に新情報を有するコマンド（９１４）を送信する。コマンド（９１４）は、クライアント（１０４（１））、（１０４（ｎ））による任意の共有空間に関する存在データ（９１０）から得られるクライアント（１０４（１））からのバージョンベクトル情報を含む。一実装においては、存在サーバ（２０２（ｐ））は、クライアント（１０４（１））の他のバージョンベクトルに関する情報をフィルタでき、それによってリソースを節約し、クライアント（１０４（１））のプライバシを保護する。
【００６７】
コマンド（９１４）を受信次第、クライアント（１０４（ｎ））は、受信されたバージョンベクトル「ＶＶＡ」とそれ自身のバージョンベクトル「ＶＶＢ」とを比較する。ベクトルが一致する場合、共有フォルダ（９０４（１））、（９０４（ｎ））は同期されている。しかし、ベクトルが一致しない場合、共有フォルダ（９０４（１））、（９０４（ｎ））の同期は、ネットワーク（１０６）又はピアオーバレイ（２１２）上の接続を介し実行される。
【００６８】
クライアント（１０４（ｎ））は、例えばクライアント（１０４（１））にコンタクトし、共有フォルダ（９０４（１））、（９０４（ｎ））を同期させるプロトコルを実行できる（矢印９１８）。同期が必要とされるか否かを決定するために、コンパクトな表現が、前に使用された場合、このプロトコルは、バージョンベクトル全部の交換を含むことができる。そのプロトコルの完了に続いて、クライアントそれぞれは、自らのバージョンベクトルを更新し、新しい値で存在記録（９０２（１））、（９０２（ｎ））それぞれを更新する。
【００６９】
図１０は、同期交渉メッセージ（ＳＮＭｓ）が、クライアント間で共有されるデータの複製をトリガするために利用される例示的な実装図（１０００）である。この技法においては、クライアント（１０４（１））、（１０４（ｎ））がＳＮＭｓを他のクライアントにいつ送信するかを決定するために、メッセージングサービス（１０２）からの定期的な存在通知を使用する。ＳＮＭｓは、同期を利用し得るフォルダのためのバージョンベクトルを含む。この技法は、存在サーバにおいて追加的なストレージを利用せず、最小量の帯域を使用する。
【００７０】
この技法は、クライアント（１０４（１））、（１０４（ｎ））の間において、信頼性のある単方向の通信のために使用され得る同期交渉メッセージ（ＳＮＭ）（１００２）と呼ばれる新しいメッセージングプロトコルのプリミティブに基づく。ＳＮＭメッセージは、意図される受取人（例えばクライアント（１０４（ｎ）））を特定する目的地インスタントメッセージングハンドルと、バージョンベクトル及び共有空間のための識別子を含むペイロードを含む。
【００７１】
クライアント（１０４（１））は最初に、メッセージングモジュール（１０８（１））及びその対応する共有モジュール（１１２（１））の実行を介し、ＳＮＭメッセージ（１００２）（矢印１００４）をコンタクト先クライアント（１０４（ｎ））に送信するための少なくとも１つの条件が満たされたかを決定する。様々な条件を利用できる。例えば、クライアント（１０４（１））のバージョンベクトルの１つが（例えば、共有ファイルへのローカルの変更、完全な同期などの結果として）変更され、その共有関係に関するそのコンタクト先のうち少なくとも１つ（例えば、クライアント（１０４（ｎ）））はオンラインである。別の例において、それが共有関係を有するそのコンタクト先のうち１つ（例えばクライアント（１０４（ｎ）））がオンラインとなる。以下留意すべきは、クライアント（１０４（１））の最新のバージョンベクトルが、コンタクト先、例えばクライアント（１０４（ｎ））のためにキャッシュされたものと異なる場合、機器毎を基本とする特定のコンタクト先（例えばクライアント１０４（ｎ））向けに最後に知られたバージョンベクトルをキャッシュすること、及び、ＳＮＭメッセージ（１００２）を送信すること、によってこれを最適化できることである。
【００７２】
送信されたＳＮＭメッセージ（１００２）が、メッセージングサービス（１０２）（さらに具体的に言うと、接続サーバ（２０２（１））、（２０２（ｎ）））によって、クライアント１０４（ｎ）へ送られる（矢印１００６）。ＳＮＭメッセージ（１００２）を受信次第、クライアント（１０４（ｎ））は、受信されたバージョンベクトル「ＶＶＡ」とそれ自身のバージョンベクトル「ＶＶＢ」とを比較する。バージョンベクトルが一致する場合、われわれは共有フォルダ（９０４（１））、（９０４（ｎ））が同期されたことがわかる。
【００７３】
バージョンベクトルが異なる場合、クライアント（１０４（ｎ））は、ネットワーク（１０６）又はピアツーピアオーバレイ（２１２）を介し、クライアント（１０４（１））とコンタクトし、フォルダ（９０４（１））、（９０４（ｎ））を同期させるためにプロトコルを実行する（矢印１００８）。従来と同様に、同期が望まれていたか否かを決定するためにコンパクト表現が使用される場合、このプロトコルはバージョンベクトル全部の交換を含むことができる。プロトコルの完了に続いて、クライアント（１０４（１））、（１０４（ｎ））それぞれは、バージョンベクトルそれぞれを更新する。
【００７４】
結論
本発明は、構造上の特色及び／又は方法論的な振る舞いが特定の言語で説明されたが、添付の請求項で定義された発明が、説明された特定の特徴又は振る舞いに必ずしも限定されないことが理解されるだろう。むしろ、特定の特徴及び振る舞いは、請求の範囲に記載されている発明を実施する例示的な形式として開示される。
【図面の簡単な説明】
【００７５】
【図１】データ共有を伴うインスタントメッセージングを実現するために実施可能な例示的な実装における環境の図である。
【図２】図１のメッセージングサービス、複数のクライアント及びストレージをさらに詳細に示す例示的な実装のシステム図である。
【図３】インスタントメッセージングに関連し、クライアント間でクライアントデータを共有するために共有空間を利用する図１の複数のクライアントを示す例示的な実装の図である。
【図４】他の少なくとも１つのクライアントとデータを共有する図３のインスタントメッセージング及び共有空間を提供するために構成された例示的な実装におけるユーザインタフェースの図である。
【図５】他の少なくとも１つのクライアントとデータを共有する図３のインスタントメッセージング及び共有空間を提供するために構成された例示的な実装における別のユーザインタフェースの図である。
【図６】データを共有するクライアントの１つが有効でないときであっても、インスタントメッセージングセッションに関連し共有されたデータが同期される例示的な実装における手順を表すフロー図である。
【図７】インスタントメッセージングのための有効性に関連し、クライアントの存在がクライアントの間でデータを共有するために利用される例示的な実装における手順を表すフロー図である。
【図８】インスタントメッセージングに関連し、共有されたデータの同期がスケジュールされる例示的な実装における手順を表すフロー図である。
【図９】インスタントメッセージングに関連し共有されるデータを指定するために存在記録においてバージョンベクトルが発行される例示的な実装の図である。
【図１０】クライアント間で共有されるデータの複製のトリガとするために利用される同期交渉メッセージの例示的な実装の図である。
【図１】
2009500698.tif 000003
【図２】
2009500698.tif 000004
【図３】
2009500698.tif 000005
【図４】
2009500698.tif 000006
【図５】
2009500698.tif 000007
【図６】
2009500698.tif 000008
【図７】
2009500698.tif 000009
【図８】
2009500698.tif 000010
【図９】
2009500698.tif 000011
【図１０】
2009500698.tif 000012