(57)【特許請求の範囲】
【請求項１】
サーバコンピュータにドキュメントを記憶すること、
ウェブベースのアプリケーションで前記ドキュメントを修正するための複数のユーザコマンドを受信すること、
前記受信したコマンドをシリアル化すること、
前記ドキュメントとは別にコマンドストリームの中に前記シリアル化されたコマンドを順次に記憶すること、
前記サーバコンピュータが高負荷のサーバコンピュータであるかを判定すること、
前記サーバコンピュータが高負荷のコンピュータである場合に、次いで、前記ドキュメントに対し進行中のドキュメント編集セッションがあるかを判定すること、
進行中のドキュメント編集セッションがある場合に、前記コマンドストリームを前記ドキュメントに適用すること、次いで前記ドキュメントを非高負荷のサーバコンピュータへ移動すること
を含むことを特徴とするコンピュータ実施方法。
【請求項２】
前記ドキュメントを保存するための要求を受信すること、
前記要求の受信に応答して、番号順に前記ドキュメントに前記コマンドストリームの中の前記コマンドを適用し、前記ドキュメントを保存すること
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
第１のアプリケーションは修正されたドキュメントを作成するために前記ドキュメントを修正し、第２のアプリケーションは前記修正されたドキュメントに前記シリアル化されたコマンドストリーム内の前記コマンドを適用することを特徴とする、請求項２に記載の方法。
【請求項４】
前記第１のアプリケーションが、デスクトップクライアントアプリケーションを含み、前記第２のアプリケーションが、ウェブアプリケーションを含むことを特徴とする請求項３に記載の方法。
【請求項５】
大容量記憶装置に前記ドキュメントおよび前記コマンドストリームを保存すること、
揮発性メモリから前記コマンドストリームをアンロードすること、
第２のコマンドを受信すること、
前記第２のコマンドの受信に応答して、前記大容量記憶装置から前記ドキュメントをロードし、前記ドキュメントに前記コマンドストリームを適用し、前記第２のコマンドをシリアル化し、前記ドキュメントとは別に前記コマンドストリームの中に前記シリアル化された第２のコマンドを記憶すること
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記進行中のドキュメント編集セッションが、サーバコンピュータ上で前記ドキュメントを編集するためのダウンレベルのアプリケーションプログラムを実行しているかを判定すること、
前記進行中のドキュメント編集セッションが、サーバコンピュータ上でダウンレベルのアプリケーションプログラムを実行している場合に、次いで、前記進行中のドキュメント編集セッションと関連する前記ドキュメント及び前記コマンドストリームを、前記ドキュメントを編集するためのアップレベルのアプリケーションプログラムを実行するサーバコンピュータに移動すること
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記アップレベルのアプリケーションプログラムを実行するサーバコンピュータにドキュメントを移動する前に、前記コマンドストリーム内の前記コマンドを番号順に前記ドキュメントに適用すること
をさらに含むことを特徴とする請求項６に記載の方法。
【請求項８】
コンピュータ実行可能命令を記憶したコンピュータ可読記憶媒体であって、前記命令は、コンピュータによって実行されると前記コンピュータに、
サーバコンピュータ上にドキュメントを記憶させ、
ウェブベースのアプリケーションで前記ドキュメントを修正するための複数のユーザコマンドを受信させ、
前記受信されたコマンドをシリアル化させ、
前記ドキュメントとは別にコマンドストリームの中に前記シリアル化されたコマンドを順次に記憶させ、
前記ドキュメントを保存するための要求を受信させ、
前記要求の受信に応答して、前記サーバコンピュータが高負荷のサーバコンピュータであるかを判定させ、
前記サーバコンピュータが高負荷のコンピュータである場合に、次いで、前記ドキュメントに対する進行中のドキュメント編集セッションがあるかを判定させ、
進行中のドキュメント編集セッションがある場合に、次いで、番号順に前記ドキュメントに前記コマンドストリームの中の前記コマンドを適用させ、前記ドキュメントを保存させ、次いで
前記保存されたドキュメントを非高負荷のサーバコンピュータへ移動させる
ことを特徴とするコンピュータ可読記憶媒体。
【請求項９】
第１のアプリケーションが、前記ドキュメントを修正して、修正されたドキュメントを生成し、第２のアプリケーションが、前記シリアル化されたコマンドストリームの中の前記コマンドを前記修正されたドキュメントに適用することを特徴とする請求項８に記載のコンピュータ可読記憶媒体。
【請求項１０】
前記第１のアプリケーションが、デスクトップクライアントアプリケーションを含み、前記第２のアプリケーションが、ウェブアプリケーションを含むことを特徴とする請求項９に記載のコンピュータ可読記憶媒体。
【請求項１１】
コンピュータ実行可能命令をさらに記憶し、前記命令は、前記コンピュータによって実行されると前記コンピュータに、
前記ドキュメントおよび前記コマンドストリームを大容量記憶装置に保存させ、
前記コンピュータの揮発性メモリから前記コマンドストリームをアンロードさせ、
第２のコマンドを受信させ、
前記第２のコマンドの受信に応答して、前記大容量記憶装置から前記ドキュメントをロードさせ、前記ドキュメントに前記コマンドストリームを適用させ、前記第２のコマンドをシリアル化させ、前記ドキュメントとは別に前記コマンドストリームの中に前記シリアル化された第２のコマンドを記憶させる
ことを特徴とする請求項８に記載のコンピュータ可読記憶媒体。
【請求項１２】
コンピュータ実行可能命令をさらに記憶し、前記命令は、前記コンピュータによって実行されると前記コンピュータに
前記進行中のドキュメント編集セッションが、サーバコンピュータ上で前記ドキュメントを編集するためのダウンレベルのアプリケーションプログラムを実行しているかを判定させること、
前記進行中のドキュメント編集セッションが、サーバコンピュータ上でダウンレベルのアプリケーションプログラムを実行している場合に、次いで、前記進行中のドキュメント編集セッションと関連する前記ドキュメント及び前記コマンドストリームを、前記ドキュメントを編集するためのアップレベルのアプリケーションプログラムを実行するサーバコンピュータに移動させること、
をさらに含むことを特徴とする請求項９に記載のコンピュータ可読記憶媒体。
【請求項１３】
コンピュータ実行可能命令をさらに記憶し、前記命令は、前記コンピュータによって実行されると前記コンピュータに
前記アップレベルのアプリケーションプログラムを実行するサーバコンピュータにそのドキュメントを移動する前に、前記コマンドストリーム内の前記コマンドを番号順で前記ドキュメントに適用させること
をさらに含むことを特徴とする請求項１２に記載のコンピュータ可読記憶媒体。
【請求項１４】
サーバコンピュータ上にドキュメントを記憶すること、
ウェブベースのアプリケーションで前記ドキュメントを修正するための複数のユーザコマンドを第１のアプリケーションにおいて受信すること、
前記第１のアプリケーションによって前記受信されたコマンドをシリアル化すること、
前記ドキュメントとは別にコマンドストリームの中に前記シリアル化されたコマンドを順次に記憶すること、
修正されたドキュメントを作成するために第２のアプリケーションによって前記ドキュメントを修正すること、
前記サーバコンピュータが高負荷のサーバコンピュータであるかを判定すること、
前記サーバコンピュータが高負荷のサーバコンピュータである場合に、次いで、前記ドキュメントに対する進行中のドキュメント編集セッションがあるかを判定すること、
進行中のドキュメント編集セッションがある場合に、次いで、前記第１のアプリケーションによって前記コマンドストリームの中の前記シリアル化されたコマンドを前記修正されたドキュメントに適用すること、次いで
前記ドキュメントを非高負荷のサーバコンピュータへ移動すること
を含むことを特徴とするコンピュータ実施方法。
【請求項１５】
第１のアプリケーションで前記ドキュメントを保存するための要求を受信すること、
前記要求の受信に応答して、番号順に前記ドキュメントに前記コマンドストリームの中の前記コマンドを適用し、前記ドキュメントを保存すること
をさらに含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
大容量記憶装置に前記ドキュメントおよび前記コマンドストリームを保存すること、
揮発性メモリから前記コマンドストリームをアンロードすること、
第２のコマンドを受信すること、
前記第２のコマンドの受信に応答して、前記大容量記憶装置から前記ドキュメントをロードし、前記ドキュメントに前記コマンドストリームを適用し、前記第２のコマンドをシリアル化し、前記ドキュメントとは別に前記コマンドストリームの中に前記シリアル化された第２のコマンドを記憶すること、
をさらに含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記進行中のドキュメント編集セッションが、サーバコンピュータ上で前記ドキュメントを編集するためのダウンレベルのアプリケーションプログラムを実行していることを識別すること、
前記進行中のドキュメント編集セッションが、サーバコンピュータ上でダウンレベルのアプリケーションプログラムを実行している場合に、次いで、前記コマンドストリーム内のコマンドを前記ドキュメントに適用すること、
前記ドキュメントを編集するためのアップレベルのアプリケーションプログラムを実行しているサーバコンピュータに前記ドキュメントを移動すること、
をさらに含むことを特徴とする請求項１４に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
リッチドキュメントの作成および編集を可能にするワールドワイドウェブ（「ウェブ」）アプリケーションが開発されてきた。たとえば、ウェブアプリケーションは、ワードプロセッシングドキュメント、スプレッドシード、プレゼンテーション、および他のタイプのドキュメントを作成および編集するために使用することができる。これらのドキュメントはまた、互換性のあるクライアントアプリケーションで作成および編集することができる。たとえば、ワードプロセッシングクライアントアプリケーションは、デスクトップまたはラップトップコンピュータ上で実行され、ワードプロセッシングドキュメントを作成するために使用することができる。そのワードプロセッシングドキュメントは、次いで、適切なウェブアプリケーションを使用して編集することができる。
【０００２】
現在のウェブアプリケーションの１つの問題は、ウェブアプリケーションのユーザが、クライアントアプリケーションを使用する別のユーザによるドキュメントの編集と同時に、そのドキュメントを編集するときに生じる。このシナリオでは、そのドキュメントの２つのバージョンが生成される。そのドキュメントの１つのバージョンは、ウェブアプリケーションを使用して行われる編集を含み、そのドキュメントの第２のバージョンは、クライアントアプリケーションを使用して行われた編集を含む。そのドキュメントの２つのバージョン間の変更を一致させる（reconcile）ことは難しい場合がある。
【０００３】
現在のウェブアプリケーションの別の問題は、ウェブブラウザアプリケーションなどのクライアントアプリケーションがそのウェブアプリケーションを提供するサーバから切断されるときに生じる。このシナリオでは、接続が再確立されたときに、編集されたドキュメントをその前の状態に戻すことは難しい場合がある。その結果として、ドキュメントへの編集は、切断が生じるときに失われ得る。
【０００４】
現在のウェブアプリケーションの他の問題は、サーバコンピュータ間で進行中の編集セッションを移動させることが難しい場合があるために生じ得る。たとえば、ウェブアプリケーションを実施し、編集セッションを提供するウェブサーバに過重な負荷（overload）がかかる場合、進行中の編集セッションを別のサーバに移動させてロードバランスをとることは難しい場合がある。同様に、進行中の編集セッションを有するサーバコンピュータ上でウェブアプリケーションをアップグレードすることは難しい場合がある。
【０００５】
これらのおよび他の考慮すべき事項に関して、本明細書で行われる開示は提示される。
【発明の概要】
【０００６】
ドキュメント編集コマンドをシリアル化するための技術が、本明細書で説明される。本明細書で提示される概念および技術の実装形態を介して、単一のドキュメントが生成され得、このドキュメントは、ウェブアプリケーションおよびクライアントアプリケーションの両方を使用して行われるドキュメントに対する修正を含んでいる。本明細書で提示される概念および技術の実装形態を介して、ドキュメントの編集された状態がまた、ウェブアプリケーションからの切断に続いて再作成され得る。加えて、ウェブアプリケーションを提供するサーバは、編集セッションが進行中の間にも、ロードバランスをとりアップグレードすることができる。
【０００７】
本明細書で提示される一態様によれば、ウェブアプリケーションは、ドキュメントの作成および編集のために提供される。たとえば、一実装形態では、そのウェブアプリケーションは、従来のウェブブラウザアプリケーションプログラムを使用してプレゼンテーションドキュメントを作成および編集するための機能を提供する。ウェブアプリケーションは、そのドキュメントを記憶する、またはそのドキュメントを記憶するネットワークの場所へのアクセスを有する。
【０００８】
ドキュメントを修正するためのコマンドが、ウェブブラウザアプリケーションプログラムを介して生成され、サーバコンピュータ上で実行するウェブアプリケーションに送信される。そのウェブアプリケーションは、それらのコマンドを受信し、それらのコマンドをシリアル化する。これは、たとえば、このコマンドが受信された時間を指示するコマンドにデータを追加するステップと、そのコマンドを時間順に配列するステップとを含み得る。そのシリアル化されたコマンドは、次いで、コマンドストリームの中に記憶される。そのコマンドストリームは、ドキュメントとは別個に記憶される。そのコマンドストリームは、本明細書で「デルタ」と称すことがある、元のドキュメントとその現在の状態との間の差を表すことを理解されたい。コマンドストリームの中に記憶されたコマンドをドキュメントに適用すると、そのドキュメントの現在の状態をもたらすことになる。
【０００９】
別の態様によれば、コマンドストリームは、ドキュメントを保存するための要求がウェブアプリケーションを介して受信されたときに、そのドキュメントに適用され得る。たとえば、そのドキュメントを保存するための要求が受信されたとき、コマンドストリームの中のコマンドは、番号順（すなわち、それらのコマンドが最初に作られた順番）でドキュメントに適用され得る。そのドキュメントは、次いで、それらのコマンドがそのドキュメントに適用された後には、保存され得る。
【００１０】
別の態様によれば、前述のコマンドストリームは、共同編集を可能にするために使用することができる。たとえば、一例では、クライアントアプリケーションは、ドキュメントを修正して、修正されたドキュメントを作成することができる。ウェブアプリケーションは、同ドキュメントを編集するために使用可能であり、コマンドストリームの作成をもたらす。そのドキュメントの２つのバージョン間で変更を一致させるために、コマンドストリームの中のコマンドが、修正されたドキュメントに適用され得る。この方法で、結果として生じるドキュメントは、クライアントアプリケーションによってそのドキュメントに適用された編集と、ウェブアプリケーションによってそのドキュメントに適用された編集とを含む。
【００１１】
別の態様によれば、前述のコマンドストリームは、ウェブアプリケーションの性能を改善するために使用することができる。たとえば、ウェブアプリケーションは、前述のようなドキュメントのために、ランダムアクセスメモリ（「ＲＡＭ」）などの揮発性メモリ内でコマンドストリームを保持するように構成され得る。メモリを解放するために、ドキュメントおよびコマンドストリームは、ハードディスクドライブなどの大容量記憶装置に記憶することができ、揮発性メモリからアンロードすることができる。追加のコマンドがそのドキュメントについて受信されるとき、そのドキュメントは、そのドキュメントに記憶されたコマンドストリームを適用することによって、その現在の状態に戻すことができる。追加のコマンドは、次いで、前述の方式でコマンドストリームの中にシリアル化され得る。
【００１２】
別の態様によれば、コマンドストリームは、ウェブアプリケーションを提供するサーバコンピュータ上で動的ロードバランシングを実行するために使用され得る。この実装形態では、１つまたは複数の高負荷のサーバコンピュータが識別される。進行中のドキュメント編集セッションが、次いで、その高負荷のサーバコンピュータ上で識別される。識別された編集セッションの各々について、ドキュメントのコマンドストリームがそのドキュメントに適用される。そのドキュメントは、次いで、非高負荷のサーバコンピュータに移動される。他の実施形態では、そのコマンドストリームおよびドキュメントは、そのドキュメントへのそのコマンドストリームの適用なしに、非高負荷のサーバコンピュータに移動され得る。そのドキュメントが移動される先のサーバコンピュータは、次いで、その編集セッションを処理する責任を引き継ぐ。
【００１３】
別の態様によれば、コマンドストリームは、ウェブアプリケーションを提供するサーバコンピュータ上で中断のないアップグレードを実行するために使用され得る。具体的には、進行中の編集セッションが、ウェブアプリケーションのダウンレベルのバージョンを実行しているサーバコンピュータ上で識別される。識別された進行中の編集セッションに関連するドキュメントおよびコマンドストリームが、次いで、そのウェブアプリケーションのアップレベルのバージョンを実行するサーバコンピュータに移動される。その編集セッションは、次いで、そのドキュメントおよびコマンドストリームが移動された先のサーバコンピュータで再開される。ダウンレベルのサーバ上の進行中の編集セッションのすべてがこの方式で移動された後は、そのサーバ上のウェブアプリケーションがアップグレードされ得る。一実装形態では、そのコマンドストリームの中のコマンドは、アップレベルのウェブアプリケーションを実行するサーバコンピュータにそのドキュメントを移動する前に、そのドキュメントに適用される。
【００１４】
本明細書に記載のコマンドストリームはまた、取消し／やり直し、ドキュメント回復などの他の目的でも使用され得ることを理解されたい。本「概要」は、以下の「発明を実施するための形態」でさらに説明される、簡易化された形での概念の選択を紹介するために提供されることもまた理解されたい。本「概要」は、特許請求される主題の重要な特徴または本質的特徴を識別するものではなく、本「概要」はまた、特許請求される主題の範囲を限定するために使用されるものでもない。さらに、特許請求される主題は、本開示のいずれかの部分で言及されたいずれかのまたはすべての欠点を解決する実装形態に限定されるものでもない。
【図面の簡単な説明】
【００１５】
【図１】本明細書で開示される実施形態の１つの例示的動作環境を示すソフトウェアおよびネットワークアーキテクチャ図である。
【図２】本明細書で開示される一実施形態でドキュメント編集コマンドをシリアル化するための本明細書で開示される様々なコンポーネントの態様を示すソフトウェアアーキテクチャ図である。
【図３】本明細書で開示される実施形態で生成および使用されるコマンドストリームの態様を示すデータ構造図である。
【図４】本明細書で開示される一実施形態によるコマンドストリームをシリアル化するための１つの例示的プロセスを示す流れ図である。
【図５】本明細書で開示される一実施形態におけるウェブアプリケーションおよびクライアントアプリケーションの両方で行われる編集を含んだ、修正ドキュメントを生成するための１つのプロセスの態様を示すデータ構造図である。
【図６】本明細書で開示される一実施形態におけるコマンドストリームを使用してウェブアプリケーションの性能を最適化するための１つの例示的プロセスを示す流れ図である。
【図７】本明細書で開示される一実施形態におけるコマンドストリームを使用してウェブアプリケーションを提供するサーバコンピュータの動的なロードバランスをとるための１つの例示的プロセスを示す流れ図である。
【図８】本明細書で開示される一実施形態におけるコマンドストリームを使用してウェブアプリケーションをアップグレードするための１つの例示的プロセスを示す流れ図である。
【図９】本明細書で開示される様々な実施形態を実装することができるコンピュータシステムのための例示的コンピュータハードウェアおよびソフトウェアアーキテクチャを示すコンピュータアーキテクチャ図である。
【発明を実施するための形態】
【００１６】
以下の詳細な説明は、ドキュメント編集コマンドをシリアル化するための技術を対象とする。簡単に上述したように、ドキュメントを編集するためのシリアル化されたコマンドを含む、コマンドストリームが、本明細書に記載の技術を使用して生成され得る。このコマンドストリームは、修正されたドキュメントに適用されて、単一のドキュメントを生成することができ、ウェブアプリケーションおよびクライアントアプリケーションの両方を使用して行われるドキュメントに対する修正を含んでいる。コマンドストリームはまた、ドキュメントを編集するためのウェブアプリケーションからの切断に続いてそのドキュメントの編集された状態を再作成するために、編集セッションが進行中であってもそのウェブアプリケーションを提供するサーバコンピュータのロードバランスをとるために、編集セッションが進行中にウェブアプリケーションを提供するサーバのアップグレードを実行するために、および他の目的で使用され得る。
【００１７】
本明細書に記載の主題は、コンピュータシステム上のオペレーティングシステムおよびアプリケーションプログラムの実行と連動して実行するプログラムモジュールとの概括的な文脈で提示されるが、他の実装が他のタイプのプログラムモジュールとの組合せで実行可能であることが、当業者には認識されよう。概して、プログラムモジュールは、ルーチン、プログラム、コンポーネント、データ構造体、および特定のタスクを実行するまたは特定の抽象データ型を実装する他のタイプの構造体を含む。さらに、本明細書に記載の主題は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサを用いるまたはプログラム可能な家庭用電化製品、ミニコンピュータ、およびメインフレームコンピュータなどを含む、他のコンピュータシステム構成で実施され得ることが、当業者には理解されよう。
【００１８】
以下の詳細な説明では、例として特定の実施形態または例によって示され、かつ本明細書の一部を成す添付の図面が参照される。次に、同様の数字はいくつかの図面をとおして同様の要素を表す図面を参照すると、ドキュメント編集コマンドをコマンドストリームの中にシリアル化するための、およびそのコマンドストリームを使用するためのコンピュータシステムの態様および方法論が説明される。
【００１９】
図１は、本明細書で開示される実施形態の１つの例示的動作環境を示すソフトウェアおよびネットワークアーキテクチャ図である。図１に示す動作環境１００は、ウェブブラウザアプリケーションプログラム１０２を実行するクライアントコンピュータ１０４にウェブアプリケーション１１４を提供するように構成される。本明細書において「ウェブアプリケーション」という用語は、ＨＴＴＰ、ＳＯＡＰ、および非同期ＪＡＶＡＳＣＲＩＰＴ（登録商標）などの標準プロトコルおよび技術を介してアクセスおよび使用することができるアプリケーションを包含するものである。「ウェブアプリケーション」という用語は、ワールドワイドウェブを介して利用可能なアプリケーションのみに限定されるべきではない。そうではなくて、ウェブアプリケーション１１４は、広域ネットワーク、ローカルエリアネットワーク、ワイヤレスネットワーク、および他のタイプのネットワークを含むがこれらに限定されない、実質的に任意のタイプのネットワーク１０８を介してアクセス可能であり得る。
【００２０】
図１に示す動作環境１００では、いくつかのフロントエンドサーバ１０６Ａ〜１０６Ｃが設けられてフロントエンドサーバコンポーネント１１０を実行する。ウェブブラウザアプリケーションプログラム１０２から受信されるウェブアプリケーション１１４への要求は、フロントエンドサーバ１０６Ａ〜１０６Ｃに対してロードバランスがとられる。この方法で、フロントエンドサーバ１０６Ａ〜１０６Ｃは、特定のドキュメント編集セッションのために割り当てられ得る。特定の編集セッションのためにウェブブラウザアプリケーションプログラム１０２によって生成されるコマンドは、その編集セッションに割り当てられたフロントエンドサーバ１０６Ａ〜１０６Ｃ上のフロントエンドサーバコンポーネント１１０によって受信される。これらのコマンドは、次いで、バックエンドサーバコンピュータ１１２Ａ〜１１２Ｃのうちの１つで実行するウェブアプリケーション１１４のインスタンスに転送される。バックエンドサーバコンピュータ１１２Ａ〜１１２Ｃはまた、ウェブアプリケーション１１４が効率の良い形で動作することを確保するために、ロードバランスがとられ得る。
【００２１】
同じく図１に示すように、バックエンドサーバ１１２Ａ〜１１２Ｃの各々は、オペレーティングシステムおよびウェブアプリケーション１１４などの実行可能なプログラムコードを記憶するための１つまたは複数のディスク１１６Ａ〜１１６Ｃを保持する。ディスク１１６Ａ〜１１６Ｃはまた、ドキュメント１１８Ａ〜１１８Ｃを記憶するために使用することができる。ドキュメント１１８Ａ〜１１８Ｃはまた、ネットワーク１０８または別のネットワークを介してアクセス可能な別の場所に記憶することができる。
【００２２】
一実装形態によれば、ウェブアプリケーション１１４は、１つまたは複数のドキュメントタイプを作成および編集するための機能を提供する。たとえば、ウェブアプリケーション１１４は、ワードプロセッシングドキュメント、スプレッドシードドキュメント、プレゼンテーションドキュメント、または別のタイプのドキュメントを作成および編集するように構成され得る。以下にさらに詳しく説明するように、クライアントコンピュータ１０４上で実行するクライアントアプリケーションはまた、ウェブアプリケーション１１４によって生成されるドキュメント１１８Ａ〜１１８Ｃと互換性のあるドキュメントタイプを作成および編集するように構成され得る。たとえば、ドキュメントは、クライアントアプリケーションを使用するクライアントコンピュータ１０４で作成され、次いで、ウェブアプリケーション１１４によって編集され得る。同様に、ドキュメントは、ウェブアプリケーション１１４で作成され、次いで、クライアントコンピュータ１０４上で実行するクライアントアプリケーションを使用して編集され得る。
【００２３】
図１に示す動作環境１００は、単なる例示に過ぎず、他のタイプの動作環境もまた使用され得ることを理解されたい。たとえば、他の実施形態では、フロントエンドサーバ１０６Ａ〜１０６Ｃは、使用されなくてもよい。加えて、他の実施形態では、より多くのバックエンドサーバ１１２Ａ〜１１２Ｃ、またはより少ないバックエンドサーバ１１２Ａ〜１１２Ｃもまた、使用され得る。さらに、単一のクライアントコンピュータ１０４が図１に示されるが、図１に示す動作環境１００は、より多数のクライアントコンピュータ１０４を同時にサポートすることができることを理解されたい。本明細書に記載の概念および技術をサポートすることができる他のタイプの動作環境が、当業者には明らかになり得る。
【００２４】
図２は、本明細書で開示される一実施形態においてドキュメント編集コマンドをシリアル化するために本明細書で開示される様々なコンポーネントの態様を示すソフトウェアアーキテクチャ図である。図２に示すように、また簡単に前述したように、クライアントコンピュータ１０４のユーザは、ウェブブラウザアプリケーション１０２を使用してウェブアプリケーション１１４と対話することができる。具体的には、ドキュメント１１８を修正するためのコマンド２０２が、ユーザによってクライアントコンピュータ１０４で生成され得る。たとえば、ドキュメント１１８がプレゼンテーションドキュメントである場合、コマンド２０２は、そのプレゼンテーションに新しいスライドを追加する、そのプレゼンテーションにグラフィック要素を追加する、そのプレゼンテーションでテキストを追加もしくは修正する、または任意の他のタイプの編集タスクを実行するためのものとすることができ得る。ドキュメント１１８がワードプロセッシングドキュメントである場合、コマンド２０２は、そのドキュメントにテキストを追加する、テキストをフォーマットする、グラフィックを追加する、またはそのドキュメントに他の編集を実行するためのものとすることができる。したがって、本明細書においてコマンドという用語は、ドキュメントを編集するための任意のタイプのコマンドを指すことを理解されたい。
【００２５】
クライアントコンピュータ１０４で生成される各コマンド２０２は、どのようにその編集がドキュメント１１８に行われるべきかを識別するデータを含む。そのデータは、拡張可能マークアップ言語（「ＸＭＬ」）、２進コード化、または別のフォーマットを使用して、指定され得る。たとえば、コマンド２０２が、ドキュメント１１８中のテキストを編集するためである場合、コマンド２０２内に記憶されるデータは、その編集が生じるべきドキュメント内の場所と、その編集がどのように実行されるべきかを記載することができる。コマンド２０２がプレゼンテーションにスライドを追加するためである場合、コマンド２０２は、新しいスライドが追加されることになる場所、その新しいスライドのタイトル、および他の情報を指示するデータを含み得る。他のタイプのコマンドもまた、同様に表すことができる。
【００２６】
簡単に上述したように、コマンド２０２は、クライアントコンピュータ１０４で生成され、フロントエンドサーバ１０６Ａなどのフロントエンドサーバに送信される。次いで、フロントエンドサーバ１０６Ａは、コマンド２０２をバックエンドサーバ１１２Ａなどの適切なバックエンドサーバ１１２に送信する。簡単に上述したように、各バックエンドサーバ１１２は、ウェブアプリケーション１１４のインスタンスを実行する。やはり簡単に上述したように、各バックエンドサーバ１１２は、コマンド２０２が適用されるべき先のドキュメント１１８を記憶するディスク記憶装置１１６を保持する、またはそこにアクセスできる。しかし、ドキュメント１１８に直接コマンド２０２を適用するのではなくて、ウェブアプリケーション１１４は、コマンドストリーム２０６を保持する。
【００２７】
以下にさらに詳細に論じるように、コマンドストリーム２０６は、コマンド２０２Ａ〜２０２Ｎのシリアル化されたシーケンスを含む。コマンド２０２をシリアル化するために、ウェブアプリケーション１１４は、そのコマンドが生成された絶対または相対的時間を指示するコマンド２０２Ａ〜２０２Ｎにデータを追加することができる。シーケンス番号などの他のタイプのデータもまた、コマンド２０２Ａ〜２０２Ｎをシリアル化するために使用することができる。コマンド２０２Ａ〜２０２Ｎは、次いで、順番にコマンドストリーム２０６内に記憶される。図２に示す例では、コマンドストリーム２０６は、バックエンドサーバ１１２の揮発性メモリ２０４内に記憶される。他の実施形態では、コマンドストリーム２０６は、ディスク１１６で記憶され得ることを理解されたい。
【００２８】
図３は、本明細書で開示される実施形態で生成および使用されるコマンドストリーム２０６の態様を示すデータ構造図である。具体的には、図３は、コマンド２０２Ａ〜２０２Ｎが生成された順による順番でシリアル化および配置されたコマンド２０２Ａ〜２０２Ｎを示す。したがって、コマンド２０２Ａ〜２０２Ｎを記憶するコマンドストリーム２０６は、修正前のドキュメント１１８とその現在の状態の間のデルタを表すことを理解されたい。以下にさらに詳しく説明するように、ウェブアプリケーション１１４は、ドキュメント１１８の現在の状態を生成するために、番号順でコマンドストリーム２０６にコマンド２０２Ａ〜２０２Ｎを適用することができる。このプロセスおよびこのプロセスのいくつかの適用例に関する詳細が、図４〜８を参照して、以下に説明される。
【００２９】
図４は、本明細書で開示される一実施形態によるコマンドストリームをシリアル化するための１つの例示的ルーチン４００を示す流れ図である。図４およびその他の図に関して本明細書に記載される論理演算は、（１）コンピュータ実装行動もしくはコンピュータシステム上で走るプログラムモジュールのシーケンスとして、および／または（２）コンピュータシステム内の相互接続された機械論理回路もしくは回路モジュールとして、実装される。本実装形態は、コンピュータシステムの性能および他の要件に応じて選択できる。したがって、本明細書に記載の論理演算は、動作、構造的デバイス、行動、またはモジュールとして様々に称される。これらの動作、構造的デバイス、行動およびモジュールは、ソフトウェア内に、ファームウェア内に、専用デジタル論理内に、およびそれらの任意の組合せで実装され得る。本明細書で図示および記載するものより多くの動作が実行されても、または少ない動作が実行されてもよいことを理解されたい。これらの動作はまた、本明細書に記載のものとは異なる順番で実行され得る。
【００３０】
ルーチン４００は、ウェブアプリケーション１１４がコマンド２０２を受信する動作４０２で開始する。コマンドの受信に応答して、ルーチン４００は動作４０４に進み、そこでウェブアプリケーション１１４がコマンド２０２をシリアル化する。これは、たとえば、コマンド２０２が受信された絶対または相対的時間を指示するコマンド２０２にデータを追加することを含み得る。コマンド２０２をシリアル化するための他のタイプの機構もまた、使用され得る。コマンド２０２がシリアル化された後には、ルーチン４００は、動作４０４から動作４０６に進む。
【００３１】
動作４０６では、シリアル化されたコマンド２０２が、コマンドストリーム２０６内に記憶される。ルーチン４００は、次いで、動作４０８に進み、そこで、ウェブアプリケーション１１４は、要求がそのコマンドストリームに対応するドキュメント１１８を保存するために受信されたかどうかを判定する。受信されない場合、ルーチン４００は、前述の動作４０２に進み、そこで、追加のコマンド２０２が、前述の方式で受信およびシリアル化される。要求が動作４０８で受信されてドキュメント１１８を保存した場合、ルーチン４００は、動作４１０に進む。
【００３２】
動作４１０で、現在のドキュメント１１８のコマンドストリーム２０６内のコマンド２０２Ａ〜２０２Ｎが、番号順にドキュメント１１８に適用される。この方式で、コマンドストリーム２０６内に記憶されたコマンド２０２Ａ〜２０２Ｎは、それらが生成された順番で、ドキュメント１１８に適用される。コマンドストリーム２０６の適用の後のドキュメント１１８は、ドキュメント１１８の現在の状態を表す。コマンドストリーム２０６がドキュメント１１８に適用された後は、ルーチン４００は、動作４１２に進み、そこでドキュメント１１８がディスクに持続される。ルーチン４００は、次いで、動作４０２に進み、そこで、追加のコマンド２０２が受信され、シリアル化され、コマンドストリーム２０６内に記憶される。
【００３３】
図５は、本明細書で開示される一実施形態でウェブアプリケーションおよびクライアントアプリケーションの両方で行われる編集を含む修正されたドキュメントを生成するための１つのプロセスの態様を示すデータ構造図である。簡単に上述したように、デスクトップクライアントアプリケーション５０２は、ウェブアプリケーション１１４によって生成されたドキュメントを編集することができるクライアントコンピュータ１０４上で使用することができる。たとえば、簡単に上述したように、ワードプロセッシングデスクトップクライアントアプリケーション５０２は、ウェブアプリケーション１１４によって生成されたドキュメント１１８Ａを編集するために使用され得る。同様に、ウェブアプリケーション１１４は、デスクトップクライアントアプリケーション５０２によって作成されたドキュメント１１８Ａを編集するために使用され得る。図５の例では、デスクトップクライアントアプリケーション５０２を使用して、元のドキュメント１１８Ａへの修正５０４が行われている。結果として生じるドキュメントは、修正されたドキュメント１１８Ｄである。
【００３４】
１つのシナリオでは、ウェブブラウザアプリケーションプログラム１０２はまた、ウェブアプリケーション１１４を使用して、元のドキュメント１１８Ａへの修正を行うことができる。一方、上述したように、ウェブアプリケーション１１４によって行われた元のドキュメント１１８Ａへの修正は、コマンドストリーム２０６内に表される。たとえば、図５に示す例では、２つのコマンド２０２Ａ〜２０２Ｂを含むコマンドストリーム２０６が生成されている。
【００３５】
ウェブアプリケーション１１４によって生成されたドキュメントのバージョンとデスクトップクライアントアプリケーション５０２によって生成されたドキュメントのバージョンとを一致させるために、ウェブアプリケーション１１４は、修正されたドキュメント１１８Ｄにコマンドストリーム２０６内のコマンド２０２Ａ〜２０２Ｂを適用するように構成され得る。この方法で、デスクトップクライアントアプリケーション５０２によってドキュメント１１８Ａに行われた修正５０４を含み、そして、ウェブアプリケーション１１４によってドキュメントに行われた修正も含む、更新されたドキュメント１１８Ｅが生成される。この方式で更新されたドキュメント１１８Ｅを生成することによって、本明細書で開示される概念および技術は、デスクトップクライアントアプリケーション５０２およびウェブアプリケーション１１４を使用する同時の編集（「同時編集」）を可能にする。
【００３６】
更新されたドキュメント１１８Ｅには矛盾が存在し得ることを理解されたい。たとえば、デスクトップクライアントアプリケーション５０２は、ドキュメント１１８Ａ内のテキストの一部を削除するために使用されることがある。同時に、ウェブアプリケーション１１４が、デスクトップクライアントアプリケーション５０２によって削除されたテキストを編集するために使用されることがある。この例では、コマンドストリーム２０６が修正されたドキュメント１１８Ｄに適用されるとき、矛盾が存在することになる。様々な機構が、その矛盾を解決するために、使用され得ることを理解されたい。たとえば、ユーザは、矛盾する編集の間で選択をするように求められ得る。他の機構もまた、クライアントアプリケーション５０２でおよびウェブアプリケーション１１４でドキュメントに行われた修正間の矛盾を解決するために、使用され得る。
【００３７】
図６は、本明細書で開示される一実施形態においてコマンドストリーム２０６を使用してウェブアプリケーション１１４の性能（performance）を最適化するための１つの例示的ルーチン６００を示す流れ図である。ルーチン６００は、ウェブアプリケーション１１４で受信されたコマンド２０２がコマンドストリーム２０６内にシリアル化される動作６０２で開始する。ルーチン６００は、次いで、動作６０２から動作６０４に進み、そこで、ドキュメント１１８およびその関連するコマンドストリーム２０６がディスク１１６に保存される。ドキュメント１１８およびコマンドストリーム２０６が保存された後は、ルーチン６００は、動作６０６に進み、そこで、コマンドストリーム２０６がメモリ２０４からアンロードされる。図２に示すように、コマンドストリーム２０６は、バックエンドサーバ１１２の揮発性メモリ２０４内で記憶され得る。揮発性メモリ２０４からコマンドストリーム２０６をアンロードすることによって、メモリ２０４は、他の使用のために解放され得る。
【００３８】
動作６０６から、ルーチン６００は、動作６０８に進み、そこで、ウェブアプリケーション１１４は、追加のコマンド２０２が、保存されたドキュメント１１８について受信されたかどうかを判定する。受信されない場合、ルーチン６００は、動作６０８に進み、そこで、別のそのような判定が行われる。コマンドが受信された場合、ルーチン６００は、動作６１０に進み、そこで、ドキュメント１１８がディスクからロードされる。ディスクに記憶されたコマンドストリームはまた、バックエンドサーバ１１２の揮発性メモリ２０４にロードされ得る。
【００３９】
ルーチン６００は、次いで、動作６１２に進み、そこで、記憶されたコマンドストリーム２０６が、前述の方式でドキュメント１１８に適用される。上述したように、これは、コマンドストリーム２０６内のすべてのコマンドの適用に続くドキュメントの現在の状態を表すドキュメント１１８をもたらす。ルーチン６００は、次いで、動作６１４に進み、そこで、新しく受信されたコマンドが、前述の方式でコマンドストリーム２０６内でシリアル化される。動作６１４から、ルーチン６００は、動作６１６に進み、終了する。
【００４０】
図７は、本明細書で開示される一実施形態においてコマンドストリームを使用してウェブアプリケーションを提供するサーバコンピュータ１１２の動的なロードバランスをとるための１つの例示的ルーチン７００を示す流れ図である。ルーチン７００は、動作７０２で開始し、そこで、高負荷のバックエンドサーバ１１２Ａ〜１１２Ｃが識別される。高負荷のサーバコンピュータは、ＣＰＵサイクル、メモリ利用、大容量記憶装置の利用および／または他のタイプのリソースの高い利用度などのそのリソースの比較的高い利用度を経験しているサーバコンピュータである。高負荷のバックエンドサーバ１１２Ａ〜１１２Ｃが識別された後は、ルーチン７００は、動作７０４に進む。
【００４１】
動作７０４で、別のバックエンドサーバに移動されることになる識別された高負荷のバックエンドサーバ１１２Ａ〜１１２Ｃ上の１つまたは複数の編集セッションが、識別される。別のサーバ１１２に移動されることになる進行中の編集セッションが、ランダムに、または別の方法で、編集セッションによって使用されるリソースに基づいて、識別され得る。別のサーバ１１２に移動されることになる１つまたは複数の進行中の編集セッションが識別された後は、ルーチン７００は、動作７０６に進む。
【００４２】
動作７０６で、識別された編集セッションのコマンドストリーム２０６内のいくつかのまたはすべてのコマンドが、関連ドキュメントに適用され得る。この方式で、各ドキュメントは、別のバックエンドサーバ１１２にそのドキュメントを移動するより前にその現在の状態にされ得る。このプロセスは、任意選択であり、コマンドストリーム２０６は、別のバックエンドサーバ１１２に編集セッションを移動するより前の進行中の編集セッションに関連付けられたドキュメントに適用され得ることを理解されたい。
【００４３】
動作７０６から、ルーチン７００は、動作７０８に進み、そこで、識別された進行中の編集セッションのドキュメント１１８およびコマンドストリーム２０６が、非高負荷のバックエンドサーバ１１２Ａ〜１１２Ｃに移動される。進行中の編集セッションが移動される先のバックエンドサーバ１１２Ａ〜１１２Ｃが、ＣＰＵ利用、メモリ利用、ディスク利用、および／または他のタイプのリソースの利用などの宛先バックエンドサーバによるリソースの利用に基づいて、識別され得る。進行中の編集セッションが移動された先のバックエンドサーバ１１２Ａ〜１１２Ｃは、次いで、進行中の編集セッションを処理する責任を引き継ぐ。この方式では、進行中の編集セッションについて受信された任意の新しいコマンドが、宛先バックエンドサーバ１１２Ａ〜１１２Ｃによって処理されることになる。したがって、バックエンドサーバ１１２Ａ〜１１２Ｃは、進行中のセッションを中断することなしに動的にロードバランスがとられ得ることを理解されたい。動作７０８から、ルーチン７００は、動作７１０に進み、そこで終了する。
【００４４】
図８は、本明細書で開示される一実施形態におけるコマンドストリームを使用してウェブアプリケーションをアップグレードするための１つの例示的ルーチン８００を示す流れ図である。ルーチン８００は、動作８０２で開始し、そこで、ウェブアプリケーション１１４のアップレベルのバージョンが、編集セッションを現在サポートしていないバックエンドサーバ１１２上で配備される。ルーチン８００は、次いで、動作８０４に進み、そこで、アップグレードされたサーバ１１２が、編集セッションの提供の開始を可能にされる。アップレベルのサーバ１１２が編集セッションの提供を可能にされた後は、ルーチン８００は、動作８０６に進む。
【００４５】
動作８０６で、ダウンレベルのウェブアプリケーション１１４を実行するバックエンドサーバ１１２上の進行中の編集セッションが、識別される。識別された進行中の各編集セッションについて、コマンドストリーム２０６内のコマンド２０２が、関連ドキュメントに適用される。ルーチン８００は、次いで、動作８０８に進み、そこで、進行中の編集セッションのドキュメントがウェブアプリケーション１１４のアップレベルのバージョンを実行するアップグレードされたサーバ１１２に移動される。ドキュメントが移動される先のサーバコンピュータは、次いで、進行中の編集セッションを提供する責任を引き継ぐ。
【００４６】
進行中の編集セッションのすべてがダウンレベルのバックエンドサーバ１１２から移動された後は、ルーチン８００は、動作８１０に進み、そこで、ダウンレベルのサーバコンピュータが、ウェブアプリケーション１１４のアップレベルのバージョンでアップグレードされ得る。ルーチン８００は、次いで、動作８１０から動作８１２に進み、そこで終了する。前述を考慮して、ウェブアプリケーション１１４は、進行中の編集セッションを妨げることなしにアップグレードされ得ることを理解されたい。
【００４７】
図９は、本明細書で提示される様々な実施形態を実装することができるコンピュータシステムの例示的コンピュータハードウェアおよびソフトウェアアーキテクチャを示すコンピュータアーキテクチャ図である。図９に示すコンピュータアーキテクチャは、従来のデスクトップ、ラップトップコンピュータ、またはサーバコンピュータを示し、本明細書に記載の様々なソフトウェアコンポーネントを実行するために使用され得る。
【００４８】
図９に示すコンピュータアーキテクチャは、中央処理装置９０２（「ＣＰＵ」）と、ランダムアクセスメモリ９１４（「ＲＡＭ」）および読取り専用メモリ（「ＲＯＭ」）９１６を含むシステムメモリ９０８と、ＣＰＵ９０２にメモリを結合させるシステムバス９０４とを含む。起動中など、コンピュータ９００内の要素間で情報を転送するのを助ける基本ルーチンを含む基本入力／出力システム（「ＢＩＯＳ」）が、ＲＯＭ９１６内に格納される。コンピュータ９００は、以下でさらに詳しく説明される、オペレーティングシステム９１８、アプリケーションプログラム、および他のプログラムモジュールを格納するための大容量記憶装置９１０をさらに含む。
【００４９】
大容量記憶装置９１０は、バス９０４に接続された大容量記憶装置コントローラ（図示せず）を介してＣＰＵ９０２に接続される。大容量記憶装置９１０およびその関連コンピュータ可読記憶媒体は、コンピュータ９００の非揮発性記憶スペースを提供する。本明細書に含まれるコンピュータ可読媒体の記載は、ハードディスクまたはＣＤ−ＲＯＭドライブなどの大容量記憶装置を指すが、コンピュータ可読記憶媒体は、コンピュータ９００によってアクセス可能な任意の使用可能なコンピュータ記憶媒体でもよいことが、当業者には理解されよう。
【００５０】
限定ではなく、例として、コンピュータ可読記憶媒体は、コンピュータ可読命令、データ構造体、プログラムモジュールまたは他のデータなどの情報の記憶のための任意の方法または技術で実装された、揮発性および非揮発性の、取外し可能なおよび取外し不可能な媒体を含み得る。たとえば、コンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他の固体状態メモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（「ＤＶＤ」）、ＨＤ−ＤＶＤ、ＢＬＵ−ＲＡＹ（登録商標）もしくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶もしくは他の磁気記憶装置、または所望の情報を記憶するために使用可能な、およびコンピュータ９００によってアクセス可能な任意の他の持続性媒体を含むがこれらに限定されない。
【００５１】
本明細書で開示されるコンピュータ可読媒体はまた、通信媒体を包含することを理解されたい。通信媒体は、通常は、搬送波または他の移送機構などの変調されたデータ信号内でコンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータを実施し、任意の情報配信媒体を含む。「変調されたデータ信号」という用語は、その信号内の情報をコード化することなどの形で設定または変更されたその特性のうちの１つまたは複数を有する信号を意味する。限定ではなく、例として、通信媒体は、配線式ネットワークもしくは直接配線式接続などの配線式媒体と、音波、ＲＦ、赤外線および他のワイヤレス媒体などのワイヤレス媒体とを含む。前述のいずれかの組合せもまた、コンピュータ可読媒体の範囲に含まれよう。コンピュータ可読記憶媒体は、通信媒体を包含しない。
【００５２】
様々な実施形態によれば、コンピュータ９００は、ネットワーク９２０などのネットワークを介する遠隔コンピュータへの論理接続を使用するネットワーク化された環境で動作し得る。コンピュータ９００は、バス９０４に接続されたネットワークインターフェースユニット９０６を介してネットワーク９２０に接続することができる。ネットワークインターフェースユニット９０６はまた、他のタイプのネットワークおよび遠隔コンピュータシステムに接続するために使用され得ることを理解されたい。コンピュータ９００はまた、キーボード、マウス、または電子スタイラス（図９に示さず）を含むいくつかの他のデバイスからの入力を受信および処理するための入力／出力コントローラ９１２を含み得る。同様に、入力／出力コントローラは、ディスプレイ画面、プリンタ、または他のタイプの出力デバイス（これも図９に示さず）に出力を提供することができる。
【００５３】
簡単に前述したように、いくつかのプログラムモジュールおよびデータファイルは、ネットワーク化されたデスクトップ、ラップトップ、またはサーバコンピュータの動作を制御するのに適したオペレーティングシステム９１８を含むコンピュータ９００の大容量記憶装置９１０、およびＲＡＭ９１４内に記憶され得る。大容量記憶装置９１０およびＲＡＭ９１４はまた、１つまたは複数のプログラムモジュールを記憶することができる。具体的には、大容量記憶装置９１０およびＲＡＭ９１４は、ウェブブラウザアプリケーションプログラム１０２および／またはウェブアプリケーション１１４と、前述のその他のソフトウェアコンポーネントとを記憶することができる。大容量記憶装置９１０およびＲＡＭ９１４はまた、コマンドストリーム２０６などの他のプログラムモジュールおよびデータを記憶することができる。
【００５４】
概して、ソフトウェアアプリケーションまたはモジュールは、ＣＰＵ９０２にロードされ、実行されるときに、ＣＰＵ９０２およびコンピュータ９００全体を汎用コンピュータシステムから本明細書で提示される機能を実行するようにカスタマイズされた専用コンピュータシステムに変換することができる。ＣＰＵ９０２は、任意の数の状態を個々にまたは集合的に仮定し得る、任意の数のトランジスタまたは他のディスクリート回路要素から構築され得る。より詳細には、ＣＰＵ９０２は、ソフトウェアまたはモジュール内に含まれる、実行可能命令に応答して、１つまたは複数の有限状態機械として動作することができる。これらのコンピュータ実行可能命令は、状態間のＣＰＵ９０２遷移がどのようであるかを指定することによって、ＣＰＵ９０２を変換し、それによって、ＣＰＵ９０２を構成するトランジスタまたは他のディスクリートハードウェア要素を物理的に変換することができる。
【００５５】
大容量記憶装置上にソフトウェアまたはモジュールをコード化することはまた、大容量記憶装置または関連コンピュータ可読記憶媒体の物理構造を変換し得る。物理構造の個々の変換は、本明細書の異なる実装形態で、様々な要因に依存し得る。そのような要因の例は、そのコンピュータ可読記憶媒体を実装するために使用される技術、コンピュータ可読記憶媒体が１次もしくは２次記憶装置として特徴付けられるかどうか、および同類のものを含むが、これらに限定されない。たとえば、そのコンピュータ可読記憶媒体が、半導体に基づくメモリとして実装される場合、ソフトウェアまたはモジュールは、そのソフトウェアがその中でコード化されるとき、半導体メモリの物理状態を変換し得る。たとえば、そのソフトウェアは、トランジスタ、コンデンサ、または半導体メモリを構成する他のディスクリート回路要素の状態を変換し得る。
【００５６】
別の例として、コンピュータ可読記憶媒体は、磁気または光技術を使用して、実装され得る。そのような実装形態で、ソフトウェアまたはモジュールは、そのソフトウェアがその中でコード化されるとき、磁気または光媒体の物理状態を変換することができる。これらの変換は、所与の磁気媒体内の特定の場所の磁気特性を変更することを含み得る。これらの変換はまた、所与の光媒体内の特定の場所の物理的特徴または特性を変更して、それらの場所の光特性を変えることを含み得る。物理媒体の他の変換が、本明細書の範囲および趣旨を逸脱することなしに、本議論を円滑に進めるためにのみ提供される前述の例において可能である。
【００５７】
前述に基づいて、コマンドストリームにドキュメント編集コマンドをシリアル化するためのおよびコマンドストリームを使用するための技術が本明細書で提示されることを理解されたい。本明細書で提示される主題は、コンピュータ構造的特徴、方法論的行動、およびコンピュータ可読媒体に特有の言語で説明されるが、添付の特許請求の範囲で定義される本発明は、必ずしも本明細書に記載の特定の特徴、行動、または媒体に限定されないことが、理解されよう。そうではなくて、それらの特定の特徴、行動および媒体は、本特許請求の範囲を実装する例示的な形として開示される。
【００５８】
本明細書に記載の主題は、例としてのみ提供され、限定として解釈されるべきではない。様々な修正および変更が、図示および記載される例示的実施形態および適用に従うことなしに、そして、以下の特許請求の範囲に記載の本発明の真の趣旨および範囲を逸脱することなしに、本明細書に記載の主題に行われ得る。
【図１】
0005898685.tif 000002
【図２】
0005898685.tif 000003
【図３】
0005898685.tif 000004
【図４】
0005898685.tif 000005
【図５】
0005898685.tif 000006
【図６】
0005898685.tif 000007
【図７】
0005898685.tif 000008
【図８】
0005898685.tif 000009
【図９】
0005898685.tif 000010