(57)【特許請求の範囲】
【請求項１】
複数のコンピュータシステムを介する電子文書に対する協同作業を可能にする方法であって、
複数の前記コンピュータシステムのうちの第１のコンピュータシステムが共有セッションを開始するステップであって、前記共有セッションで、現在の前記電子文書の内容全体を表すデータ構造が共有される、ステップと、
少なくとも１つの前記コンピュータシステムを含む第１のコンピュータシステム群に、前記共有セッションへの参加の要求を送信するステップと、
前記第１のコンピュータシステム群のうちの少なくとも１つの前記コンピュータシステムを含む第２のコンピュータシステム群が前記共有セッションに参加する旨の応答を送信するステップと、
前記第２のコンピュータシステム群の各々の前記コンピュータシステムに、現在のデータ構造を送信するステップと、
前記第１のコンピュータシステム及び前記第２のコンピュータシステム群を含む第３のコンピュータシステム群のうちの少なくとも１つの前記コンピュータシステムを含む第４のコンピュータシステム群の各々の前記コンピュータシステムが、前記現在のデータ構造に対する変更を含むユーザ入力を受け取るステップと、
前記ユーザ入力に応答して、前記現在のデータ構造に対する前記変更を表すデータを前記現在のデータ構造に加えるステップと、
前記変更を表すデータを前記現在のデータ構造に加えたことに応答して、前記現在のデータ構造に対する前記変更だけを含むリビジョンを作成するステップであって、
前記データ構造の前記変更が行われたかを定期的に判定するステップと、
前記データ構造の前記変更が行われた場合に、同期化トークンを所有しているか判定するステップと、
前記同期化トークンを所有していない場合に、前記同期化トークンを所有しているコンピュータシステムに前記同期化トークンの要求を送信するステップと、
前記同期化トークンを所有している場合に、前記リビジョンを作成することが許可されるステップと
を備える、ステップと、
前記同期化トークンを所有しているコンピュータシステムを除く前記第３のコンピュータシステム群の各々の前記コンピュータシステムに、前記リビジョンを送信するステップと
を備え、
前記リビジョンは、前記同期化トークンを所有しているコンピュータシステムを除く前記第３のコンピュータシステム群の各々の前記コンピュータシステムで保管される前記現在のデータ構造にマージされ、
前記同期化トークンの前記要求は、前記同期化トークンを要求してからの待ち時間を含み、前記待ち時間が最も長い前記コンピュータシステムに前記同期化トークンが送信されることを特徴とする方法。
【請求項２】
前記同期化トークンを所有している前記コンピュータシステムを除く前記第３のコンピュータシステム群の各々の前記コンピュータシステムが前記リビジョンを受信するステップと、
前記同期化トークンを所有しているコンピュータシステムを除く前記第３のコンピュータシステム群の各々の前記コンピュータシステムにおいて、前記データ構造の内容を表示するステップと
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項３】
前記同期化トークンの前記要求を送信するステップは、
前記同期化トークンを受信したかどうかを判定するステップと、
前記同期化トークンを受信していない旨の判定に応答して、前記同期化トークンに関する新しい要求を生成するステップであって、前記新しい要求は前記待ち時間を含む、ステップと、
前記新しい要求を、前記同期化トークンを所有する前記コンピュータシステムに送信するステップと
を備えたことを特徴とする請求項１に記載の方法。
【請求項４】
前記同期化トークンを受信するステップと、
２つの同期化トークンが存在するかどうかを判定するステップと、
２つの同期化トークンが存在する旨の判定に応答して、前記同期化トークンを所有するコンピュータシステムのそれぞれで同一のアルゴリズムを実行して、前記２つの同期化トークンのどちらを削除しなければならないかを決定するステップと
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項５】
前記同期化トークンの前記要求に応答して、前記同期化トークンが以前に前記第３のコンピュータシステム群のうちの１つの前記コンピュータシステムに送信されたかどうかを判定するステップと、
前記同期化トークンが、以前に送信されている場合に、
前記同期化トークンに関する前記要求内のタイムトゥリブ値を減算するステップと、
前記タイムトゥリブ値が０を超えるかどうかを判定するステップと、
前記タイムトゥリブ値が０を超える場合に、前記同期化トークンを所有している前記コンピュータシステムに前記要求を転送するステップと
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項６】
前記電子文書は、複数のページを含み、前記第３のコンピュータシステム群の前記コンピュータシステムの各々において、前記ページに対する前記リビジョンについて通信チャネルを受信し、前記ページに対する前記リビジョンを受信し、前記リビジョンを受信した時に前記データ構造を変更するように動作する、ページ同期化オブジェクトを実行し、前記ページ同期化オブジェクトは、ページごとに作成されることを特徴とする請求項１に記載の方法。
【請求項７】
前記データ構造は、有向非循環グラフを含むことを特徴とする請求項１に記載の方法。
【請求項８】
コンピュータによって実行される時に、請求項１に記載の方法を前記コンピュータに実行させるコンピュータ実行可能命令が格納されたことを特徴とするコンピュータ読取り可能記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
インターネットの出現および爆発的急増に伴って、リモートコンピュータユーザが一緒に共通のタスクに取り組めるようにするネットワークコンピューティングアプリケーションが作成された。例えば、リモートユーザが共通のホワイトボードを見られるようにするアプリケーション、スライドプレゼンテーションを見たり、対話できるようにするアプリケーション、互いにチャットできるようにするアプリケーション、協同作業の形で他の機能を実行できるようにするアプリケーションが存在する。この種のプログラムは、典型的には、協同作業する必要があるが、離れた位置に位置するユーザの生産性を高める。
【発明の開示】
【発明が解決しようとする課題】
【０００２】
コンピュータネットワークを介するタスクに対する協同作業の以前の解決策の短所の１つは、これらの以前の解決策が、協同作業中に満足なユーザ経験を提供しないことである。例えば、以前の解決策は、典型的には、大量のデータがすべての参加者に継続的に送信されるので、ネットワーク性能の低下をこうむる。多くの場合に、アプリケーションは、データ伝送が行われている間に、劇的に低速になるか、ユーザが入力を行うのを阻止する。この状況では、ユーザは、共有プロセスが行われつつあることを実際に意識し、そのアプリケーションに関していらいらする可能性がある。
【０００３】
以前の解決策で協同作業する間にユーザ経験がこうむるもう１つの理由は、協同作業者の所与のグループ内で、使用可能なネットワーク帯域幅および待ち時間に大きい相違が存在する可能性があるという事実に由来する。例えば、所与の協同作業セッションで、複数のユーザが、高速ローカルエリアネットワーク接続に接続されるが、他のユーザが、低速ダイヤルアップネットワーク接続に制限される場合がある。以前の解決策を使用する場合に、ダイヤルアップを介して接続されたユーザは、共有文書の更新を受信し、行う際に、極端に苦労する場合がある。これは、ユーザを非常にいらいらさせる可能性もある。
【０００４】
本発明のさまざまな実施形態が作られたのは、これらの考慮事項などに関する。
【課題を解決するための手段】
【０００５】
本発明によれば、上記および他の問題は、複数のコンピュータシステムを介する電子文書に対するリアルタイム協同作業の方法、システムおよび装置によって解決される。本発明の実施形態は、共有セッションに参加する複数のユーザが、コンピュータネットワークを介して電子文書を対話式に作成し、変更することを可能にする。電子文書に対する変更は、待ち時間が長く帯域幅の少ないネットワークシナリオであっても、リアルタイムで協同作業を行えるようにする形で、識別され、パッケージ化され、各ユーザに送信される。さらに、文書に対する変更が、増分リビジョンとしてパッケージ化され、参加者に送信されるので、リアルタイムに近い協同作業を可能にするために大量のデータを送信する必要がない。
【０００６】
本発明の一態様によれば、複数のコンピュータを介する電子文書に対するリアルタイムに近い協同作業を可能にする方法が提供される。この方法によれば、協同作業セッションに参加するコンピュータシステムのそれぞれで、共有文書の内容を表すデータ構造を維持することができる。文書を変更するユーザ入力が、コンピュータシステムの１つで受け取られると、その変更を反映するようにデータ構造が更新される。変更に応答して、データ構造に対する変更が、周期的に識別され、編集の結果としてデータ構造に対して行われる変更だけを識別するリビジョンとして収集される。リビジョンは、編集の結果として、文書を表すのに使用されるコアデータモデルに対して行われる変更を識別する。
【０００７】
編集状態の間での有効な進行を保証するために、リビジョンを他の参加者に送信する前に、編集が受け取られるコンピュータシステムで維持されるデータ構造のコピーが、参加者の間で最新のリビジョンであるかどうかに関する判定を行うことができる。データ構造が最新でない場合に、そのデータ構造を最新にするのに必要なリビジョンを、他の参加者から取り出し、データ構造に適用することができる。データ構造が最新になったならば、リビジョンがパッケージ化され、共有セッションの参加者のそれぞれに送信される。リビジョンは、リビジョンのサイズが、コンピュータネットワークを介して素早く送信されるのに十分に小さいことを保証するために、頻繁に作られる。
【０００８】
リビジョンが、他の参加するコンピュータシステムで受け取られると、リビジョンは、その参加するコンピュータシステムで保管されるデータ構造のコピーにマージされる。その後、このデータ構造を使用して、共有文書のディスプレイをリフレッシュし、これによって、参加するコンピュータシステムのそれぞれでほぼリアルタイムに変更を表示することができる。編集を、特定のコンピュータシステムで受け取ることができ、類似する形で他の参加者に送信することができる。
【０００９】
さまざまな参加者の間での編集の有効な進行をさらに保証するために、同期化トークンを使用することができる。同期化トークンは、参加者の間で渡されるデータ構造である。同期化トークンを所有するコンピュータシステムだけが、データ構造に対する新しいリビジョンを作成することを許可される。従って、リビジョンを作る前に、参加するコンピュータシステムは、まず、同期化トークンを所有しているかどうかを判定しなければならない。同期化トークンを所有している場合には、新しいリビジョンの作成および他の参加者へのリビジョンの送信に進行することができる。同期化トークンを所有していない場合には、現在トークンを所有している参加コンピュータシステムに同期化トークンを要求しなければならない。
【００１０】
参加コンピュータシステムの間での同期化トークンの公平な受渡を保証するために、トークンの要求は、要求するコンピューティングシステムがトークンを待っていた時間の長さを示すデータを含むことができる。要求に対する応答が受け取られない場合に、そのコンピュータシステムがトークンを待っていた延長された持続時間を示すもう１つの要求を送信することができる。同期化トークンの所有者は、トークンの要求を受信すると、各要求を検査して、トークンの受け取りを最も長い間待っていた参加者を判定し、そのコンピュータシステムにトークンを送信する。
【００１１】
他の機構を使用して、唯一のトークンがすべての参加者の間に存在することを保証することもできる。例えば、トークンに関する要求が、所定の時間期間の間満足されなくなる場合に、新しいトークンを作成することができる。これは、例えば、トークンを所有するコンピュータシステムが、ネットワークから切断された場合に行うことができる。その代わりに、テストを周期的に実行して、複数のトークンが参加者の間に存在するかどうかを判定することができる。２つの同期化トークンが存在する場合に、決定アルゴリズムを、トークンを所有するコンピュータシステムのそれぞれで実行して、破棄すべきトークンを決定する。
【００１２】
低帯域幅接続を介して接続されたコンピュータシステムが、公平な形でトークンを与えられることを保証する機構も設けられる。複数のトークンが存在することもできるが、重複を最小にする努力が行われる。この機構によれば、トークンに関する要求が受け取られると、トークンが既に別の参加者に渡されたかどうかに関する判定が行われる。トークンが既に送信されている場合に、要求の「タイムトゥリブ」値を減算することができる。タイムトゥリブ値が満了していない場合に、要求を、同期化トークンの新しい所有者に転送することができる。この方法で、低帯域幅接続の参加者からの要求が、広帯域幅ネットワークに効果的に注入される。
【００１３】
本発明は、コンピュータプロセス、コンピューティング装置、または、コンピュータプログラム製品もしくはコンピュータ読取り可能媒体などの製造品として実施することができる。コンピュータプログラム製品は、コンピュータシステムによって読取り可能の、コンピュータプロセスを実行する命令のコンピュータプログラムをエンコードするコンピュータ記憶媒体とすることができる。コンピュータプログラム製品は、コンピューティングシステムによって読取り可能のキャリア上で伝搬される、コンピュータプロセスを実行する命令のコンピュータプログラムをエンコードする信号とすることもできる。
【００１４】
本発明の特徴を表す、上記およびさまざまな他の特徴ならびに長所は、次の詳細な説明を読み、関連図面を再検討することから明白になる。
【発明を実施するための最良の形態】
【００１５】
図面を参照し、図では同一の符号が同一の要素を表す、本発明のさまざまな態様を説明する。具体的にいうと、図１および対応する議論は、本発明の実施形態を実施できる適切なコンピューティング環境の簡潔な全般的な説明を提供することを意図されたものである。本発明を、パーソナルコンピュータのオペレーティングシステム上で稼動するプログラムモジュールに関して実行されるプログラムモジュールの全般的な文脈で説明するが、本発明を、他の種類のコンピュータシステムおよびプログラムモジュールと組み合わせて実施できることを、当業者は理解するであろう。
【００１６】
一般に、プログラムモジュールには、特定のタスクを実行するか特定の抽象データ型を実装する、ルーチン、プログラム、コンポーネント、データ構造、および他の種類の構造が含まれる。さらに、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブルなコンシューマ電子機器、ミニコンピュータ、メインフレームコンピュータ、および類似物を含む他のコンピュータシステム構成と共に本発明を実行できることを、当業者は理解するであろう。本発明は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境で実行することもできる。分散コンピューティング環境では、プログラムモジュールを、ローカルおよびリモートの両方のメモリストレージデバイスに置くことができる。
【００１７】
図１を参照して、本発明の複数の実施形態に関する例示的オペレーティグ環境を説明する。図１からわかるように、ネットワーク４によって、複数のコンピュータシステム２Ａから２Ｄが相互接続される。ネットワーク４が、ローカルエリアネットワーク（「ＬＡＮ」）、またはインターネットなどの広域ネットワーク（「ＷＡＮ」）を含む、すべての種類のコンピューティングネットワークを含めることができることを理解されたい。ネットワーク４は、任意の台数のコンピュータシステム２Ａから２Ｄ、および潜在的にネットワーク４に接続されるかこれを介してアクセス可能な他のコンピュータシステムの間の通信を可能にする媒体を提供する。本発明の一態様によれば、ネットワーク４は、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）ネットワークを含む。
【００１８】
コンピュータシステム２Ａから２Ｄのそれぞれは、１または複数のアプリケーションプログラムを実行できる、汎用のデスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、または他のタイプのコンピュータを含む。具体的には、本発明のさまざまな実施形態によれば、コンピュータ２は、メモ取り（note-taking）アプリケーションを実行するように動作する。当業者に既知のように、メモ取りアプリケーションプログラムは、メモを取り込み、編成する機能性を提供し、このメモには、テキスト、手書き、絵、ドローイング、オーディオ、または他の情報を含めることができる。
【００１９】
本発明の実施形態によれば、メモ取りアプリケーションプログラムは、メモ取りアプリケーションによって生成される文書に対するリアルタイムに近い協同作業も可能にする。本明細書で説明するように、リアルタイムに近いとは、協同作業セッションに参加する各コンピュータシステム２Ａから２Ｄにおける文書の更新が、ネットワーク４が許容する限り、できる限り素早いことを意味する。広帯域幅ネットワーク接続が、コンピュータシステム２Ａから２Ｄをネットワーク４に接続するのに使用される場合に、応答時間は、リアルタイムに達する。より低速のネットワーク接続が使用される場合に、応答時間はより低速になる。しかし、以下で詳細に説明するように、より広帯域幅の接続によって接続される参加者の性能に悪影響を及ぼさずに、より低速の接続を介して共有セッションに参加するコンピュータシステムが、非常に敏感なパフォーマンスを享受することを保証する機構が設けられる。
【００２０】
低速接続のユーザであっても、敏感な経験を有することを保証する形の１つに、同期化トークン６の公平な受渡が含まれる。同期化トークン６は、共有セッションに参加するコンピュータシステム２Ａから２Ｄの間で渡される。同期化トークン６は、このデータ構造を所有するコンピュータシステムが、共有文書の現在の状態に対する更新を行うことを許可するデータ構造である。トークンの所有権は、ユーザがローカル変更を行うことを妨げない。リアルタイムに近い協同作業を提供するための同期化トークン６の利用に関する追加の詳細を、以下、図２から図１１に関して提供する。
【００２１】
本発明の一実施形態によれば、メモ取りアプリケーションは、米国ワシントン州レッドモンドのMICROSOFT CORPORATION社のONENOTEメモ取りアプリケーションプログラムを含む。しかし、本明細書に記載の発明のさまざまな態様を、他の製造業者の他のメモ取りアプリケーションプログラムと共に使用できることを理解されたい。さらに、本明細書に記載の発明的態様は、メモ取りアプリケーションプログラムの文脈で提示されるが、他の種類のアプリケーションプログラムを使用して、本発明のさまざまな態様を実施することもできることを理解されたい。例えば、本発明のさまざまな態様を、文書の内容に関する１または複数の他のユーザとの協同作業が望ましい可能性がある場合に、ワードプロセッシングプログラム、スプレッドシートプログラム、ドローイングプログラム、コンピュータ援用設計プログラム、プレゼンテーションプログラム、および他のすべての種類のプログラムと共に使用することができる。
【００２２】
図２を参照して、本発明のさまざまな実施形態で使用されるコンピュータ２の例示的コンピュータアーキテクチャを説明する。図２に示されたコンピュータアーキテクチャは、中央処理装置８（「ＣＰＵ」）と、ランダムアクセスメモリ１８（「ＲＡＭ」）および読取専用メモリ（「ＲＯＭ」）２０を含むシステムメモリ１２と、メモリをＣＰＵ８に結合するシステムバス１０とを含む、従来のデスクトップコンピュータ、ラップトップコンピュータ、またはタブレットコンピュータを示す。スタートアップ中などにコンピュータ内の要素の間での情報の転送を助ける基本ルーチンを含む基本入出力システムが、ＲＯＭ２０に保管される。コンピュータ２は、さらに、以下で詳細に説明するオペレーティングシステム３２、アプリケーションプログラム、および他のプログラムモジュールを保管するマスストレージデバイス１４を含む。
【００２３】
マスストレージデバイス１４は、バス１０に結合されたマスストレージコントローラ（図示せず）を介してＣＰＵ８に接続される。マスストレージデバイス１４およびそれに関連するコンピュータ読取り可能媒体は、コンピュータ２の不揮発性ストレージを提供する。本明細書に含まれるコンピュータ読取り可能媒体の説明は、ハードディスクまたはＣＤ−ＲＯＭドライブなどのマスストレージデバイスに言及するが、当業者は、コンピュータ読取り可能媒体をコンピュータ２によってアクセスできるすべての使用可能な媒体とすることができることを理解するであろう。
【００２４】
制限ではなく例として、コンピュータ読取り可能媒体に、コンピュータ記憶媒体および通信媒体を含めることができる。コンピュータ記憶媒体に、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または他のデータなどの情報のストレージのための任意の方法またはテクノロジで実施された、揮発性および不揮発性の、取り外し可能および取り外し不能の媒体が含まれる。コンピュータ記憶媒体に、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のソリッドステートメモリテクノロジ、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（「ＤＶＤ」）、または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスク、または他の磁気ストレージデバイス、あるいは、所望の情報を保管するのに使用でき、コンピュータ２によってアクセスできるすべての他の媒体が含まれるが、これに制限はされない。
【００２５】
本発明のさまざまな実施形態によれば、コンピュータ２は、インターネットなどのＴＣＰ／ＩＰネットワーク４を介するリモートコンピュータへの論理接続を使用してネットワーク化された環境で動作することができる。コンピュータ２を、バス１０に接続されたネットワークインタフェースユニット１６を介してネットワーク４に接続することができる。ネットワークインタフェースユニット１６を使用して、他の種類のネットワークおよびリモートコンピュータシステムに接続することもできることを理解されたい。コンピュータ２に、キーボード、マウス、または電子スタイラス（図２に図示せず）を含む複数の他のデバイスから入力を受け取り、処理する入出力コントローラ２２も含めることができる。同様に、入出力コントローラ２２は、ディスプレイスクリーン、プリンタ、または他のタイプの出力デバイスに出力を供給することができる。
【００２６】
上述したように、米国ワシントン州レッドモンドのMICROSOFT CORPORATION社のWINDOWS（登録商標）XPオペレーティングシステムなど、ネットワーク化されたパーソナルコンピュータの動作を制御するのに適するオペレーティングシステム３２を含む複数のプログラムモジュールおよびデータファイルを、コンピュータ２のマスストレージデバイス１４およびＲＡＭ１８に保管することができる。マスストレージデバイス１４およびＲＡＭ１８は、１または複数のプログラムモジュールも保管することができる。具体的にいうと、マスストレージデバイス１４およびＲＡＭ１８は、上述したように、メモ取りアプリケーションプログラム２４を保管することができる。上述したように、メモ取りアプリケーション２４に、メモを取り込み、編成するアプリケーションプログラムが含まれ、このメモには、テキスト、手書き、絵、ドローイング、オーディオ、または他の情報を含めることができる。
【００２７】
メモは、メモ取りアプリケーション２４によって、ノートブック、フォルダ、ページ、およびセクションに編成することができる。ページの中で、メモを、どこにでも入力することができ、後に位置を変更することができる。さらに、黒丸およびリストスタイルならびにフラグおよび強調表示を用いて、メモに強調を追加することができる。フォント、スタイル、サイズ、および色に関する完全な制御も有することができる。ユーザが、メモ取りアプリケーション２４を終了する時に、ノートブックの内容を、マスストレージデバイス１４のメモ取り文書２６に保存することができる。ONENOTEメモ取りアプリケーションプログラムの動作に関する追加の詳細が、米国ワシントン州レッドモンドのMICROSOFT CORPORATION社から公に入手可能である。
【００２８】
文書共有セッションを作成するために、メモ取りアプリケーション２４は、ピアツーピア（「Ｐ２Ｐ」）アプリケーションプログラミングインタフェース（「ＡＰＩ」）２８を使用する。Ｐ２Ｐ  ＡＰＩ  ２８は、ネットワークＡＰＩ３０を使用して、トランスポートプロトコルレベルおよびセッションプロトコルレベルで媒体独立ネットワーキングサービスを提供する。Ｐ２Ｐ  ＡＰＩの媒体独立性は、協同作業セッションが、ＴＣＰ／ＩＰネットワーク上、ＩＰＸネットワーク上、ならびに直接接続されたモデムおよびシリアルケーブルを介して動作できることを意味する。Ｐ２Ｐ  ＡＰＩ  ２８は、クライアント／サーバネットワーキングセッション、ピアツーピアネットワーキングセッション、グループ管理、保証されたメッセージング、保証されないメッセージング、シーケンシングされるメッセージング、シーケンシングされないメッセージング、メッセージフラグメント化および再組立、トラフィックスロットリング、メッセージ優先順位、接続統計、ならびにセッション記述照会を含むＰ２Ｐインフラストラクチャを作成することができる。
【００２９】
本発明の一実施形態によれば、Ｐ２Ｐ  ＡＰＩ  ２８に、MICROSOFT CORPORATION社のDIRECTPLAY APIが含まれる。DIRECTPLAY APIは、パブリックＡＰＩであり、従って、その使用および実装に関する追加の詳細は、MICROSOFT CORPORATION社から公に入手可能である。他の製造業者から入手可能な他のテクノロジを使用して、コンピュータ２Ａから２Ｄの間でピアツーピアネットワーキングセッションを作成することもできることを理解されたい。
【００３０】
マスストレージデバイス１４およびＲＡＭ１８に、電子メールクライアントアプリケーション３４も保管することができる。電子メールクライアントアプリケーション３４を使用して、共有セッションに参加することの勧誘を含む電子メールメッセージを送信し、受信することができる。例えば、コンピュータ２Ａから２Ｄの１つのユーザが、メモ取りアプリケーション２４内で共有セッションを開始することができ、このセッションで、メモ取り文書２６の１または複数のページが共有される。他の参加者を共有セッションに勧誘するために、電子メールクライアントアプリケーション３４を使用して、他の所期の参加者宛の電子メッセージを作成することができる。この電子メールメッセージは、メモ取りアプリケーションプログラム２４に関連し、共有セッションに接続するのに必要な情報（インターネットプロトコルアドレスなど）を含む添付ファイルを含むことができる。
【００３１】
意図された受取人の１人が、セッションイニシエータから電子メールメッセージを受信すると、そのメッセージへの添付ファイルを選択し、実行することができる。添付ファイルの実行は、メモ取りアプリケーション２４を実行させ、このアプリケーションに、添付ファイルに含まれるデータを使用して共有セッションに接続させる。共有セッションに接続されたならば、各参加者のコンピュータシステムで、共有文書のコピーが作られる。この方法で、ユーザが共有セッションに参加すると、その人のコンピュータに保管されるノートブックに、メモ取りアプリケーション２４によってページを挿入することができる。その後、共有セッションのさまざまな参加者によってその文書に対する編集が行われると、文書のさまざまなコピーが、互いに同期化される。セッションイニシエータは、ユーザが個別の基準またはグローバルな基準で共有文書を編集できるかどうかを指定することができる。
【００３２】
電子文書に対する変更の同期化に関する追加の詳細を、以下で提供する。電子メール勧誘を、共有セッションの参加者に送信する必要がないことを理解されたい。共有セッションのネットワークアドレスを、手作業でまたは他の手段を介して参加者に供給することができる。その後、このネットワークアドレスを使用して、手動の形で共有セッションに接続することができる。
【００３３】
図３Ａに移って、新しい共有セッションの作成に関する追加の詳細を提供する。図３Ａからわかるように、文書２６は、共有できる１または複数のページ４０Ａから４０Ｃを含む。ユーザインタフェースボタンまたはメニュー項目４６の選択を介するなど、新しいセッションを開始する要求が受け取られると、要求が、メモ取りアプリケーション２４によって提供される共有セッションＡＰＩ  ４４に送られる。共有セッションＡＰＩ  ４４は、共有セッションの作成および参加を調整し、セッションを管理し、Ｐ２Ｐ  ＡＰＩ  ２８を呼び出して通信を実行し、本明細書に記載の他の機能を実行する。
【００３４】
新しい共有セッションが作成されると、共有セッションＡＰＩ  ４４は、共有されるページ４０Ａから４０Ｃごとに、新しいページ同期化オブジェクト４２Ａから４２Ｃを作成する。各ページ同期化オブジェクト４２Ａから４２Ｃは、対応する共有されるページ４０Ａから４０Ｃにリンクされる。以下で詳細に説明するように、各ページ同期化オブジェクト４２Ａから４２Ｃは、各ページの基礎になるデータモデルに対する変更を監視し、変更を記述するデータモデルに対するリビジョンを作成し、参加するコンピュータシステムのそれぞれで実行される対応するページ同期化オブジェクトにリビジョンを送信する責任を負う。ページ同期化オブジェクト４２Ａから４２Ｃは、他のコンピュータシステムからリビジョンを受信し、受信されたリビジョンをマージし、本明細書に記載の他の機能を実行する責任も負う。
【００３５】
図３Ｂを参照して、新しい文書共有セッションを開始するためにメモ取りアプリケーションプログラム２４によって実行される処理を示すルーチン３００を説明する。このルーチンおよび本明細書で提示される状態機械の議論を読む時に、本発明のさまざまな実施形態の論理動作が、（１）コンピューティングシステムで動作するコンピュータ実行動作またはプログラムモジュールのシーケンスとして、および／または（２）コンピューティングシステム内の相互接続された機械論理回路または回路モジュールとして、実施されることを理解されたい。実装は、本発明を実施するコンピューティングシステムの性能要件に依存する選択の問題である。従って、本明細書で述べる状態図に示され、本明細書で説明する本発明の実施形態を構成する論理動作を、動作、構造デバイス、行為、またはモジュールとさまざまに称する。これらの動作、構造デバイス、行為、およびモジュールを、本明細書に記載の請求項に記載の本発明の趣旨および範囲から逸脱せずに、ソフトウェアで、ファームウェアで、特殊目的ディジタル論理で、およびこれらの任意の組合せで実施できることを、当業者は理解するであろう。
【００３６】
ルーチン３００は、動作３０２で開始され、ここで、ユーザからなど、現在のメモ取り文書の１または複数のページを共有する要求を受け取る。この要求に応答して、ルーチン３００は、動作３０４に継続し、ここで、共有セッションＡＰＩ４４が、Ｐ２Ｐ  ＡＰＩ  ２８を呼び出して、新しいピアツーピアセッションを作成する。動作３０４から、ルーチン３００は、動作３０６に継続し、ここで、新しいセッションで共有されるページ４０Ａから４０Ｃごとに、新しいページ同期化オブジェクト４２Ａから４２Ｃを作成する。各ページ同期化オブジェクト４２Ａから４２Ｃは、ページ４０Ａから４０Ｃにリンクされ、新しい共有セッションに接続される。参加者が、前に作成されたセッションに参加する時に、ページ同期化オブジェクトが、参加者のコンピュータシステムでもインスタンス化されて、そのコンピュータシステムに保管されたページの更新を制御することを理解されたい。
【００３７】
動作３０６から、ルーチン３００は、動作３０８に継続し、ここで、参加者に、新しい共有セッションに参加するように勧誘することができる。上述したように、共有セッションへの参加の勧誘を、電子メールメッセージを介して他の参加者に送信することができる。その代わりに、他の手段を使用して、参加者を勧誘し、他の参加者に共有セッションのネットワークアドレスを送ることができる。動作３０８から、ルーチン３００は、動作３１０に継続し、ここで、他の参加者が共有セッションに参加したかどうかに関する判定を行う。他の参加者が共有セッションに参加するのを待っている間、および共有セッション中に、メモ取りアプリケーション２４を普通の形で操作できることを理解されたい。
【００３８】
動作３１０で、参加者が共有セッションに参加しなかったと判定される場合に、ルーチン３００は、動作３１０に戻り、別の類似する判定を行うことができる。しかし、他のユーザが新しい共有セッションに参加した場合に、ルーチン３００は、動作３１２に継続する。動作３１２で、共有されるページ４０Ａから４０Ｃのそれぞれの現在のリビジョンを、新しい参加者のそれぞれに送信する。以下で詳細に説明するように、リビジョンは、編集の結果としての文書２６を表すのに使用されるコアデータモデルに対して行われた変更を識別する。リビジョンが、以前に参加者に送信されていないので、最初のリビジョンには、共有文書の完全な状態が含まれる。これは、動作３１２で他の参加者に送信される。
【００３９】
動作３１２から、ルーチン３００は、動作３１４に継続し、ここで、参加者のいずれかによって共有文書に対して行われた変更を、交換し、同期化する。本明細書に記載の形でリビジョンを交換し、リビジョンを共有文書にマージすることによって、低速ネットワーク接続を介してネットワーク４に接続されたユーザについても、リアルタイムに近い協同作業を、文書に対して実行することができる。共有ページの同期化に関する追加の詳細を、以下、図８から図１１に関して提供する。
【００４０】
動作３１４から、ルーチン３００は、判断動作３１６に継続し、ここで、共有セッションが終了したかどうかに関する判定を行う。共有セッションが終了していない場合には、ルーチン３００は、動作３１４に分岐し、ここで、同期化処理が継続される。セッションが終了した場合には、ルーチン３００は、動作３１８に継続し、ここで終了する。
【００４１】
図４Ａを参照して、以前に作成された共有セッションに参加するプロセスに関する追加の詳細を提供する。上述したように、電子メールメッセージを、共有セッションへの参加の勧誘として送信することができる。電子メールメッセージは、共有セッションのセッションアドレス５２を含む添付ファイル５０を含むことができる。添付ファイル５０が、コンピュータシステムで起動されると、参加メソッド５４が、セッションアドレス５２を用いて、共有セッションＡＰＩ４４上で呼び出される。参加メソッド５４の呼出しに応答して、共有セッションＡＰＩ４４が、共有セッションに参加する指示を用いてＰ２Ｐ  ＡＰＩ  ２８を呼び出す。これに応答して、Ｐ２Ｐ  ＡＰＩ  ２８は、ネットワーク４を介して共有セッションに接続するように動作する。このプロセスに関する追加の詳細を、以下、図４Ｂに関して説明する。
【００４２】
図４Ｂに、以前に作成された共有セッションに参加する例示的プロセスを示す。ルーチン４００は、動作４０２で開始され、ここで、既存の共有セッションへの参加の勧誘を受け取る。勧誘が選択される時に、ルーチン４００は、動作４０４で継続し、ここで、参加者のコンピュータシステムに保管されたＰ２Ｐ  ＡＰＩ  ２８が、既存共有セッションに参加する要求を用いて呼び出される。ルーチン４００は、その後、動作４０６に継続し、ここで、共有セッションへの接続が確立されたかどうかを判定する。接続を行うことができない場合に、ルーチン４００は、動作４１４に継続し、ここで終了する。接続が確立されている場合に、ルーチン４００は、動作４０６から動作４０８に継続する。
【００４３】
動作４０８で、共有文書に対する現在のリビジョンを、特定のコンピュータで受信する。以前のリビジョンが受信されていないので、最初のリビジョンには、参加者がセッションに参加した時の文書の状態が含まれる。現在のリビジョンが受信されたならば、ルーチン４００は、動作４１０に継続し、ここで、共有ページの内容を、共有セッションの参加者全員の間で同期化する。共有ページの同期化に関する追加の詳細を、以下、図８から図１１に関して提供する。
【００４４】
動作４１０から、ルーチン４００は、判断動作４１２に継続し、ここで、共有セッションが終了したかどうかに関する判定を行う。共有セッションが終了していない場合には、ルーチン４００は、動作４１０に分岐し、同期化処理を継続する。セッションが終了した場合には、ルーチン４００は、動作４１４に継続し、ここで終了する。任意の数の参加者が、図４Ａおよび４Ｂに関して上述した形で共有セッションに参加できることを理解されたい。
【００４５】
図５Ａおよび図５Ｂを参照して、メモ取りアプリケーション２４の動作およびメモ取りアプリケーション２４によってページを表現するのに使用されるデータ構造に関する追加の詳細を提供する。図５Ａに、メモ取りアプリケーション２４によって提供される例示的なオンスクリーンディスプレイを示す。図５Ａに提示された例のページからわかるように、このスクリーンディスプレイは、ユーザがメモをとることができるページ４０Ｄを表す。具体的にいうと、ユーザは、メモ取りアプリケーション２４を使用して、ページ４０Ｄにアウトラインオブジェクト６０Ａを追加することができる。アウトラインオブジェクト６０Ａに、テキスト６２Ａおよび手書き６２Ｂなどの１または複数のアウトライン要素を含めることができる。テキスト６２Ａは、キーボードを使用してタイプすることができ、手書き６２Ｂは、スタイラスを使用して作ることができる。絵６４も、ページ４０Ｄに挿入することができる。図５Ａに示されたディスプレイが、単に例示であり、他の種類のデータを、ページ４０Ｄに入力できることを理解されたい。
【００４６】
図５Ｂに、図５Ａのページ４０Ｄの内容を表すためにメモ取りアプリケーション２４によって維持されるデータ構造を示す。具体的にいうと、有向非循環グラフ（「ＤＡＧ」）７０Ａが、ページの内容を内部的に表すのに使用される。ＤＡＧ７０Ａの最上部に、ページ４０Ｄに対応するノード７２Ａが作成される。ノード７２Ａの下に、アウトライン要素６０Ａに対応するノード７３Ａと、絵６４に対応するノード８０が作成される。ノード７３Ａの下に、アウトライン要素６２Ａおよび６２Ｂに対応するノード７４Ａおよび７４Ｂが作成される。ノード７４Ａの下に、アウトライン要素６２Ａの実際の内容、この例ではテキスト「ｈｅｌｌｏ」を保管するノード７６Ａが作成される。同様に、ノード７４Ｂの下に、アウトライン要素６２Ｂの手書きを保管するノード７８が作成される。この方法で、メモ取りアプリケーション２４は、任意の数のオブジェクトおよび任意のレベルの複雑さを有するページを表すことができる。ＤＡＧ７０Ａが、メモ取りアプリケーション２４によって維持されるページごとに作成されることを理解されたい。また、ＤＡＧの内容が、同期化のプロセスに重要でないことを理解されたい。ＤＡＧのノードに含まれるすべてのデータを、同期化することができる。この方法で、同期化機構に影響せずに、メモ取りアプリケーション２４に特徴を追加し、または除去することができる。下で詳細に説明するように、各ページのＤＡＧに対する変更を識別し、共有セッションの他の参加者にリビジョンとして送信することができる。
【００４７】
図６Ａおよび図６Ｂを参照して、共有されるページを表すＤＡＧに対するリビジョンを取り込むプロセスに関する追加の詳細を説明する。図６Ａに、アウトラインオブジェクト６０Ｂおよびこのアウトラインオブジェクトに含まれるテキスト６２Ｃを含む例示的なページ４０Ｅを示す。ＤＡＧ７０Ｂが、ページ４０Ｅの内容を表す。具体的にいうと、ノード７２Ｂは、ページオブジェクトを表し、ノード７３Ｂは、アウトラインオブジェクト６０Ｂを表し、ノード７６Ｂは、テキスト６２Ｃを表す。新しい共有セッションが開始される時に、ＤＡＧの内容のどれもが、他の参加者に送信されていない。従って、ＤＡＧ全体が、他の参加者に送信されなければならないリビジョン８０Ａであると考えられる。他の参加者がＤＡＧ７０Ｂを受信したならば、ＤＡＧ７０Ｂに対して行われる変更だけが、参加者の間で交換される。このプロセスを、図６Ｂに示す。
【００４８】
図６Ｂに、追加のテキスト６２Ｄを追加された、図６Ａに関して上述したページ４０Ｅを示す。具体的にいうと、テキスト「ＢＡＲ」が、ユーザによってページ４０Ｅに追加されている。その結果、ＤＡＧ７０Ｂは、新しいテキストを表す新しいノード７６Ｃを含むように更新されている。ＤＡＧ７０Ｂの変化を共有セッションの他の参加者に伝搬するために、新しいリビジョン８０Ｂを、このデータ構造からとる。
【００４９】
新しいリビジョン８０Ｂには、ＤＡＧのうちで、最後のリビジョンがとられた時以降にユーザによって変更された部分だけが含まれる。従って、新しいリビジョン８０Ｂに、新たに追加されたテキストを含むノード７６Ｃだけが含まれる。以下で詳細に説明するように、取り込まれたならば、リビジョン７６Ｃをバイトストリームにシリアライズすることができ、このバイトストリームが、他の参加者にブロードキャストされる。リビジョン７６Ｃが、他の参加者によって受信されると、その内容を、ＤＡＧ７０Ｂのローカルに保管されたコピーに適用して、各参加するコンピュータシステムで、ユーザによって行われた変更を反映することができる。次に、ＤＡＧ７０Ｂを使用して、コンピュータシステムのそれぞれでページをレンダリングし、これによって変更を反映し、参加者が、リビジョンに対して要求された依存リビジョンを有することができる。依存リビジョンが存在しない場合には、これを要求しなければならない。レンダリングは、増分的なので、効率的で高速である。リビジョンの送信、同期化、およびマージに関する追加の詳細を、以下で提供する。
【００５０】
図７を参照して、共有セッションのさまざまな参加者の間でリビジョンを送信し、適用するのに使用される機構に関する追加の詳細を提供する。図７に、共有セッションに参加するコンピュータシステム２Ａおよびコンピュータシステム２Ｂを示す。上述したように、コンピュータシステム２Ａおよび２Ｂのそれぞれが、共有されるページ４０Ｆおよび４０Ｇのコピーを維持する。さらに、コンピュータシステム２Ａおよび２Ｂのそれぞれが、共有されるページにリンクされたページ同期化オブジェクトを維持する。コンピュータシステム２Ａは、それぞれページ４０Ｆおよび４０Ｇにリンクされたページ同期化オブジェクト４２Ｆおよび４２Ｇを有する。コンピュータシステム２Ｂは、それぞれページ４０Ｆおよび４０Ｇにリンクされたページ同期化オブジェクト４２Ｈおよび４２Ｊを有する。
【００５１】
共有セッションの参加者の間の通信を単純にするために、ピアツーピアネットワークを、チャネルに区分する。参加者の間で交換される各メッセージは、チャネル識別番号を割り当てられ、チャネル番号を識別するデータが、メッセージと共に送信される。各ページ同期化オブジェクトは、それ自体のチャネルでメッセージを「受信（listens）」する。例えば、図７からわかるように、ページ同期化オブジェクト４２Ｆおよび４２Ｈは、第１通信チャネルでチャネルメッセージ９０Ａを送信することによって通信する。同様に、ページ同期化オブジェクト４２Ｇおよび４２Ｊは、第２通信チャネルでチャネルメッセージ９０Ｂを送信することによって通信する。他のページ同期化オブジェクトは、他のチャネルで同様の形で通信することができる。
【００５２】
新しい参加者が既存の共有セッションに参加すると、メッセージが、セッションを開始したコンピュータシステムに送信される。そのようなメッセージの受信に応答して、ホストは、上述した形で、新しい参加者に現在のリビジョンを送信する。各ページが、新しいチャネルで送信される。参加者が、以前にメッセージを受け取っていないチャネルでメッセージを受信すると、その参加者は、そのチャネルの新しいページ同期化オブジェクトを作成する。参加者は、新しいページも作成し、この新しいページを新しい同期化オブジェクトにリンクする。現在のリビジョンが最初に受信されると、このリビジョンは、他のリビジョンに対する依存性を有しておらず、従って、受信されたリビジョンを使用して、新たに作成されたページを置換することができる。この方法で、新しいページおよび新しいページ同期化オブジェクトが、自動的に各参加コンピュータシステムで作成される。
【００５３】
ページメッセージが、チャネルごとの基礎で送信されるので、ユーザが、衝突する編集およびリビジョンの可能性をもたらさずに、異なるページを同時に編集できることも理解されたい。しかし、複数のユーザが、同一のページを同時に編集する場合に、各ユーザの編集を含むリビジョンが作られ、同時にネットワークに置かれる可能性が生じる。この可能性は、一貫しない状態がネットワークに存在することの追加の可能性をもたらす。この可能性を避けるために、本発明のさまざまな実施形態は、参加者の間で渡される同期化トークンを使用する。同期化トークンは、その所有者がＤＡＧデータ構造の次のリビジョンを作ることを許可するデータ構造である。参加者は、同期化トークンを所有する場合に限って、データ構造に対するリビジョンを宣言することを許可される。ローカル変更を行うために同期化トークンを所有する必要がないことを理解されたい。同期化トークンを使用するプロセスを、図８に関して下で説明する。
【００５４】
図８を参照して、共有データ構造に対する新しいリビジョンを指定するプロセスを示す例示的状態機械を説明する。この状態機械は、状態８０２で開始され、ここで、データ構造に対してローカル変更が行われたかどうかを判定する。変更が行われていない場合には、新しいリビジョンを宣言する必要がない。従って、変更が行われていない場合には、状態は状態８０２に戻る。変更が行われた場合に、状態は、状態８０３に遷移する。状態８０３では、リビジョンを作成する前に、所定の時間期間を待って過ごす。これによって、リビジョンがあまりに頻繁に作られないことが保証される。
【００５５】
状態８０３から、状態は、状態８０８に遷移する。状態８０８では、編集が行われたコンピュータシステムが、同期化トークンの現在の所有者であるかどうかに関する判定を行う。コンピュータシステムが、現在の所有者である場合に、状態機械は、状態８０４に遷移する。コンピュータシステムが、現在の所有者でない場合には、状態機械は、状態８１０に遷移し、ここで、トークンの要求を、同期化トークンの現在の所有者に送信する。その後、状態機械は、状態８１２に遷移する。
【００５６】
状態８１２では、同期化トークンを受け取ったかどうかに関する判定を行う。トークンを受け取っている場合には、状態は状態８０４に遷移する。トークンを受け取っていない場合には、状態は状態８１４に遷移する。状態８１４では、コンピュータシステムが同期化トークンの受信を待っている時間を増やす。以下で詳細に説明するように、待ち時間は、同期化トークンの要求に含まれる。このデータは、どのコンピュータシステムに同期化トークンを送るべきかを判定する時に、参加者によって使用される。具体的にいうと、最も長い間同期化トークンを待っていたコンピュータシステムに、トークンが与えられる。このプロセスに関する詳細は、以下で説明する。
【００５７】
状態８１４から、状態は状態８１６に遷移する。状態８１６で、同期化トークンの要求に対する応答なしで所定の時間期間が経過したかどうかに関する判定を行う。長い時間期間が経過した場合に、これは、例えばトークンの所有者がネットワーク４から切断されたことによって、トークンが失われたことを示す可能性がある。従って、時間期間が経過した場合に、状態機械は、状態８１８に遷移し、ここで、現在のリビジョン／状態を基礎として使用して、新しいトークンを作成する。時間期間が経過していない場合には、状態は、状態８１０に戻り、ここで、同期化トークンの次の要求を、更新された待ち時間と共に送信する。トークン所有者は、要求を拒否することもでき、この場合には、拒否メッセージが受信される。要求元は、短い時間だけ待ち、その後、もう一度再要求する、すなわち、状態８１０に戻る。
【００５８】
状態８１８から、状態は、状態８０４に遷移し、ここで、ＤＡＧの現在の状態が、他の参加者によって行われたすべての他のリビジョンに追い付いているかどうかに関する判定を行う。グラフが最新でない場合には、状態は、状態８０６に遷移し、ここで、データ構造を最新にするのに必要なリビジョンを要求し、他の参加者から受け取る。必要なリビジョンが受け取られたならば、状態は、状態８０６から状態８０４に戻る。
【００５９】
状態８０４で、データ構造が最新であると判定される場合に、状態機械は、状態８２２に遷移し、ここで、上述した形でリビジョンを作り、ネットワーク４を介する送信のためにシリアライズする。その後、状態は状態８２６に遷移し、ここで、ＩＤの形の参照を、トークンに置く。その後、状態は状態８２８に遷移し、ここで、トークンおよびリビジョンを、共有セッションのすべての参加者にプッシュする。その後、以下で説明するようにユーザがスロットリングされていない場合には、状態は状態８２８から状態８０２に戻る。本発明の実施形態によれば、スロットリング機構が存在し、参加者が、受け取った最後のリビジョンの処理を終了した場合に限って、リビジョンが参加者にプッシュされるようになっている。参加者が、その最後のリビジョンの処理を終了した時に、最新のリビジョンが送られる。参加者が、リビジョンのフローについていけない場合には、リビジョンのいくつかがスキップされる可能性がある。これは、参加者の「フレームレート」を下げることと同等である。受け取ったリビジョンをデータ構造にマージするプロセス、複数のトークンの存在を検出し、訂正するプロセス、および公平な形でトークンに関する要求を受け取り、応答するプロセスに関する詳細は、以下、図９から図１１に関して説明する。
【００６０】
図９に移って、リビジョンを含むトークンを受信するプロセスを示す例示的な状態機械９００を説明する。状態機械９００は、状態９０２で開始され、ここで、同期化トークン通知を受信する。トークン所有者は、頻繁に、それがトークンの所有者であることの表示をブロードキャストする。そのような表示を受信する場合に、状態機械９００は、動作９０４に継続し、ここで、２つの同期化トークンが共有セッションの参加者の間に存在するかどうかに関する判定を行う。この判定は、通知を受信した参加者が既にトークンを所有しているかどうかを判定することによって行われる。そうである場合には、２つのトークンが存在する。２つのトークンが存在しない場合には、状態は状態９１２に遷移する。２つのトークンが存在する場合には、状態は状態９０６に遷移する。
【００６１】
状態９０６では、「コンテスト」を実行して、２つのトークンのどちらを使用しなければならず、どちらを削除しなければならないかを決定する。このコンテストには、同期化トークンを所有する両方のコンピュータで実行される決定論アルゴリズムが含まれる。例えば、このアルゴリズムは、各ピアに割り当てられた一意の整数識別番号を単純に比較して、どちらの数が大きいかを判定することができる。より大きい数を有するピアが、コンテストに勝ち、より小さい数を有するピアが、コンテストに負ける。他の種類の決定論アルゴリズムも使用できることを理解されたい。
【００６２】
状態９０６で、コンピュータシステムがコンテストに勝つと決定される場合に、状態は状態９０８に遷移し、ここで、他方のピアがそのトークンを削除することを指示する命令を、トークンを有する他方のピアに送信する。その後、状態は状態９１６に遷移し、ここで終了する。この方法で、トークンの正しい所有者が、普通の形でその所有を継続することができる。
【００６３】
状態９０６で、コンピュータシステムがコンテストに負けたと決定された場合に、状態は、状態９１０に遷移し、ここで、受け取ったトークンを削除する。その後、状態は状態９１２に遷移し、ここで、トークン所有者および最新リビジョンのＩＤを、将来の参照のために記録する。この情報は、後に、誰にトークンを要求するかを知るのに使用される。状態９１２から、状態機械９００は、状態９１６に遷移し、ここで終了する。図８、図９、図１０、および図１２に示されたプロセスが、独立に、潜在的に並列に実行されることを理解されたい。
【００６４】
図１０に移って、公平な形で同期化トークンに関する要求を受信し、これに応答する、例示的な状態機械１０００を説明する。状態機械１０００は、状態１００２で開始され、ここで、同期化トークンに関する要求を受信する。状態機械は、状態１００２から状態１００４に遷移し、ここで、継続する前に、所定の時間期間を経過させる。その後、状態機械は、状態１００６に遷移し、ここで、同期化トークンが、ピアの別の１つに既に転送されているかどうかに関する判定を行う。同期化トークンがまだ転送されていない場合には、状態機械１０００は、状態１００８に遷移する。
【００６５】
状態１００８で、トークンに関する複数の要求が受け取られている場合に、トークンに関する最大の待ち時間を指定する要求がどれであるかに関する判定を行う。その後、状態機械１０００は、状態１０１０に遷移し、ここで、最長の時間を費やして待った同期化トークンに関する要求を送信したコンピュータシステムに、トークンを送信する。この方法で、トークンに関して最も長い間待っていたピアが、トークンを受信する。状態１０１０から、状態機械１０００は、状態１０１２に遷移し、ここで終了する。
【００６６】
状態１００６で、トークンが既に別のピアに送信されたと判定される場合に、状態機械は、状態１０１４に遷移する。状態１０１４では、同期化トークンの要求で示された「タイムトゥリブ」値を、１つ減算する。タイムトゥリブ値は、要求が満了する前に、同期化トークンの新しい所有者に要求を転送しなければならない回数を示す。その後、状態機械は、状態１０１６に遷移し、ここで、要求が満了したかどうかに関する判定を行う。要求が満了している場合に、状態機械は、状態１０１６から状態１０１２に遷移し、ここで終了する。タイムトゥリブ値に基づいて、要求が満了していない場合に、状態は、状態１０１８に遷移し、ここで、要求（減算されたタイムトゥリブ値を含む）を、同期化トークンの新しい所有者に転送する。この方法で、同期化トークンに関する遅れた要求を、高速ネットワークに注入することができる。状態１０１８から、状態機械は状態１０１２に遷移し、ここで終了する。
【００６７】
図１１に移って、協同作業セッションの各ユーザに別々のアンドゥスタックを割り当てる本発明の特徴を示す、例示的な状態機械１１００を説明する。状態機械１１００は、状態１１０２で開始され、ここで、アンドゥスタックを、共有セッションに参加する各コンピュータシステムで、ページごとに維持する。アンドゥスタックは、ＤＡＧに対して行われる変更を追跡し、その結果、これらの変更を、後で、ユーザ要求に応答して「元に戻す」ことを可能にする。
【００６８】
状態１１０２から、状態機械１１００は、状態１１０４に遷移し、ここで、アンドゥ要求を受け取ったかどうかに関する判定を行う。アンドゥ要求が受け取られていない場合には、状態機械１１００は、状態１１０２に戻る。アンドゥ要求が受け取られた場合には、状態機械は、状態１１０６に遷移し、ここで、ＤＡＧに対する逆マージを実行して、元に戻さなければならない編集を判定する。その後、状態は状態１１０８に遷移し、ここで、アンドゥ編集を含む新しいリビジョンを作成する。状態機械は、その後、状態１１１０に遷移し、ここで、新しいリビジョンを、共有セッションの他の参加者に伝搬させる。この方法で、任意の個々のページに対する任意の個々のユーザによる各編集を、簡単に元に戻すことができる。状態１１１０から、状態機械１１００は、状態１１０２に戻り、ここで終了する。
【００６９】
図１２を参照して、グラフに対して行われたリビジョンをマージする例示的な状態機械１２００を説明する。この状態機械は、状態１２０２で開始され、ここで、ネットワークからリビジョンを受信する。このリビジョンが、ＤＡＧに対する最新のリビジョンである（すなわち、古いリビジョンが受信される場合に、これらはＤＡＧに適用されない）場合に、状態が、状態１２０４に遷移し、ここで、ローカル変更が存在するかどうかに関する判定を行う。ローカル変更が行われていない場合に、状態は、状態１２１２に遷移し、ここで、受信したリビジョンを、グラフに直接に適用する。その後、状態は、状態１２１０に遷移し、ここでリターンする。
【００７０】
状態１２０４で、ローカル変更が行われていると判定される場合に、状態は、状態１２０６に遷移する。状態１２０６では、同期化トークンが使用可能であるかどうかに関する判定を行う。トークンが使用可能である場合には、状態は状態１２１０に遷移し、ここでリターンする。この方法で、新しいリビジョンが受信され、文書に対して変更が行われている場合に、状態１２０８で３ウェイマージを実行して、受信したばかりのリビジョンにローカル変更を適用する。ローカル変更は、図８に関して概要を示したプロセスで、他の参加者に送信される。
【００７１】
状態１２０６で、トークンが使用不能であると判定される場合に、状態は、状態１２０８に遷移し、ここで、３ウェイマージを実行する。３ウェイマージの入力は、ネットワークから受信された最新のリビジョンであるベースラインと、ネットワークからの更新（リビジョンから導出される）と、ローカル変更である。最新状態のグラフ、ローカル編集、および受信したリビジョンに対する３ウェイマージを実行することによって、グラフの最新バージョンを計算できると同時に、トークンが使用可能になった時の他の参加者への将来の送信のためのリビジョンとしてローカル編集を維持することができる。状態１２０８から、状態は状態１２１０に遷移し、ここでリターンする。
【００７２】
上述に基づいて、本発明のさまざまな実施形態に、電子文書に対するリアルタイムに近い協同作業のための方法、システム、装置およびコンピュータ読取り可能媒体が含まれることを理解されたい。上述の明細書、例、およびデータは、本発明の構成の製造および使用の完全な説明を提供する。本発明の多数の実施形態を本発明の趣旨および範囲から逸脱せずに作ることができるので、本発明は、特許請求の範囲により規定される。
【図面の簡単な説明】
【００７３】
【図１】本発明のさまざまな実施形態の例示的オペレーティング環境の諸態様を示すコンピュータネットワーク図である。
【図２】本発明のさまざまな実施形態で使用され、これによって提供されるコンピュータシステムの諸態様を示すコンピュータシステムアーキテクチャ図である。
【図３Ａ】本発明のさまざまな実施形態で使用される複数のソフトウェアコンポーネントの諸態様を示すコンピュータソフトウェアアーキテクチャ図である。
【図３Ｂ】本発明の一実施形態による新しい共有セッションを開始するプロセスを示す流れ図である。
【図４Ａ】既存共有セッションに参加する時に使用される複数のソフトウェアコンポーネントの諸態様を示すコンピュータソフトウェアアーキテクチャ図である。
【図４Ｂ】本発明の一実施形態による、既存共有セッションに参加するプロセスを示す流れ図である。
【図５Ａ】本発明の実施形態で使用される例示的スクリーンディスプレイを示すスクリーン図である。
【図５Ｂ】本発明の実施形態で使用されるグラフデータ構造の諸態様を示すデータ構造図である。
【図６Ａ】本発明のさまざまな実施形態でリビジョンを作成するプロセスを示すデータ構造図である。
【図６Ｂ】本発明のさまざまな実施形態でリビジョンを作成するプロセスを示すデータ構造図である。
【図７】本発明のさまざまな実施形態で使用される複数のソフトウェアコンポーネントの諸態様を示すコンピュータソフトウェアアーキテクチャ図である。
【図８】本発明のさまざまな実施形態による電子文書に対するリアルタイムに近い協同作業を提供するプロセスを示す状態図である。
【図９】本発明のさまざまな実施形態による電子文書に対するリアルタイムに近い協同作業を提供するプロセスを示す状態図である。
【図１０】本発明のさまざまな実施形態による電子文書に対するリアルタイムに近い協同作業を提供するプロセスを示す状態図である。
【図１１】本発明のさまざまな実施形態による電子文書に対するリアルタイムに近い協同作業を提供するプロセスを示す状態図である。
【図１２】本発明のさまざまな実施形態による電子文書に対するリアルタイムに近い協同作業を提供するプロセスを示す状態図である。
【符号の説明】
【００７４】
２４  メモ取りアプリケーション
２６  メモ取り文書
２８  Ｐ２Ｐ  ＡＰＩ
４０Ａ，４０Ｂ，４０Ｃ  ページ
４２Ａ，４２Ｂ，４２Ｃ  ページ同期化オブジェクト
４４  共有セッションＡＰＩ
４６  メニュー項目
【図１】
0004714500.tif 000002
【図２】
0004714500.tif 000003
【図３Ａ】
0004714500.tif 000004
【図３Ｂ】
0004714500.tif 000005
【図４Ａ】
0004714500.tif 000006
【図４Ｂ】
0004714500.tif 000007
【図５Ａ】
0004714500.tif 000008
【図５Ｂ】
0004714500.tif 000009
【図６Ａ】
0004714500.tif 000010
【図６Ｂ】
0004714500.tif 000011
【図７】
0004714500.tif 000012
【図８】
0004714500.tif 000013
【図９】
0004714500.tif 000014
【図１０】
0004714500.tif 000015
【図１１】
0004714500.tif 000016
【図１２】
0004714500.tif 000017