JP5710156B2 - コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム - Google Patents
コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム Download PDFInfo
- Publication number
- JP5710156B2 JP5710156B2 JP2010124795A JP2010124795A JP5710156B2 JP 5710156 B2 JP5710156 B2 JP 5710156B2 JP 2010124795 A JP2010124795 A JP 2010124795A JP 2010124795 A JP2010124795 A JP 2010124795A JP 5710156 B2 JP5710156 B2 JP 5710156B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- client
- user
- change instruction
- branch
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/10—Office automation; Time management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/194—Calculation of difference between files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/197—Version control
Description
しかしながら、共同編集が可能であることによって、Webオフィス・ソフトウェアは次の問題点を有する:(1)編集されたくないオブジェクトが、他の共同編集者(ユーザ)によって編集されてしまうことがある;(2)例えばGoogle Docsは文章の一部をロックする機能を提供している。しかし、この機能はメインユーザ以外の他のユーザの編集をも妨げてしまう。
当該サーバは、第1のユーザに関連付けられた第1のクライアント・コンピュータ(以下、第1のクライアントともいう)と第2のユーザに関連付けられた第2のクライアント・コンピュータ(以下、第2のクライアントともいう)とにネットワークを介して接続可能である。
上記方法は、サーバが、
上記第2のユーザによる編集が許されないオブジェクトが上記第1のユーザによって指定されることに応じて、当該指定されたオブジェクト(以下、指定オブジェクト)を示す情報を上記第1のクライアントから受信するステップと(図7A(以下、同じ))、701)、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第2のユーザによる変更の指示を示す変更指示データを上記第2のクライアントから受信し、当該受信した変更指示データを上記記憶部に格納するステップと(702〜703)、
上記第2のクライアントからの上記変更指示データの受信に応じて、上記指定オブジェクトについてのブランチ・データを作成するステップ(704)と、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第1のユーザによる変更の指示を示す変更指示データを上記第1のクライアントから受信し、当該受信した変更指示データを上記記憶部に格納するステップであって、上記ブランチ・データに対して、上記第1のクライアントから受信した変更指示データに対応する操作が反映される、上記格納するステップ(705〜706)と、
上記第1のクライアントから受信した上記変更指示データに対応する操作列(第1の操作列)と上記第2のクライアントから受信した上記変更指示データに対応する操作列(第2の操作列)とをマージすることが可能であるかをオペレーショナル・トランスフォーメーション(以下、OTともいう)を使用して判断するステップ(709)と、
上記マージすることが可能であることに応じて、OTを使用して、上記第1の操作列を上記第2のユーザのコンテンツ・データに適用するステップ(710)と
を実行すること含む。
本発明の別の実施態様において、上記マージすることが可能であることが、上記指定オブジェクトについてのブランチ・データの作成後における上記第2の操作列全てをOTで計算した結果であるHtと、上記指定オブジェクトについてのブランチ・データの作成後における上記第1の操作列全てをOTで計算した結果であるHbとの距離がゼロであることである(804)。
上記指定オブジェクトが指定される前に、上記第1のユーザによるオブジェクトの変更の指示を示す変更指示データを上記第1のクライアントから受信するステップと、
当該受信した変更指示データを用いて、上記第2のユーザのコンテンツ・データを同期するステップと
を実行することをさらに含む。
上記方法は、
上記第2のクライアントが、
上記第2のユーザによる編集が許されないオブジェクトが上記第1のユーザによって指定されることに応じて、当該指定オブジェクトを示す情報を上記第1のクライアントから受信するステップと(図7B(以下、同じ))、722)、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第2のユーザによる変更の指示を示す変更指示データを上記第2の記憶部に格納するステップと、
上記変更指示データを上記第1のクライアントに送信するステップと(723)
を実行することを含み、
上記第1のクライアントが、
上記第2のクライアントからの最初の上記変更指示データの受信に応じて、上記指定オブジェクトについてのブランチ・データを上記第1の記憶部内に作成するステップと(724)、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第1のユーザによる変更の指示を示す変更指示データを上記第1の記憶部に格納するステップであって、上記ブランチ・データに対して、上記第1のクライアントから受信した変更指示データに対応する操作が反映される、上記格納するステップと(725)、
上記第1のクライアントから受信した上記変更指示データに対応する操作列(第1の操作列)と上記第2のクライアントから受信した上記変更指示データに対応する操作列(第2の操作列)とをマージすることが可能であるかをOTを使用して判断するステップと(727)、
上記マージすることが可能であることに応じて、上記第1の操作列を上記第2のクライアントに送信するステップと(728)
を実行することを含み、
上記第2のクライアントが、
上記第1の操作列を受信することに応じて、OTを使用して、上記第1の操作列を上記第2のユーザのコンテンツ・データに適用するステップ(729)
をさらに実行すること含む。
上記方法は、
上記第2のクライアントが、
上記第2のユーザによる編集が許されないオブジェクトが上記第1のユーザによって指定されることに応じて、当該指定オブジェクトを示す情報を上記第1のクライアントから受信するステップと(図7C(以下、同じ)、742)、
上記指定オブジェクトについての上記第2のユーザによる変更の指示を示す変更指示データを上記第2の記憶部に格納するステップと、
上記第2のユーザによる最初の変更の指示が生成されることに応じて、上記指定オブジェクトについてのブランチ・データを上記第2の記憶部内に作成するステップであって、上記ブランチ・データに対して、上記変更指示データに対応する操作が反映される、上記作成するステップと(746)、
上記第2のユーザによる最初の変更の指示が生成されることに応じて、上記指定オブジェクトが変更されたことを示すデータを第1のクライアントに送信するステップと(744)
を実行することを含み、
上記第1のクライアントが、
上記指定オブジェクトが変更されたことを示すデータを受信することに応じて、上記第1のユーザによる変更の指示を示す変更指示データを上記第2のクライアントに送信するステップと(745)
を実行することを含み、
上記第2のクライアントが、
上記第1のクライアントからの上記変更指示データに対応する操作列(第1の操作列)と上記第2のクライアントからの上記変更指示データに対応する操作列(第2の操作列)とをマージすることが可能であるかをOTを使用して判断するステップと(747)、
上記マージすることが可能であることに応じて、上記第1の操作列を上記第1のクライアントに送信するステップと(748)
を実行することを含み、
上記第1のクライアントが、
OTを使用して、上記第2のクライアントから送信された上記第1の操作列を上記第2のユーザのコンテンツ・データに適用するステップ(749)
を実行することを含む。
上記第1のクライアントが、
上記第2のユーザによって編集されたコンテンツ・データを表示させるという上記第1のユーザの指示に応じて、上記第2のユーザによって編集されたコンテンツ・データを表示するステップと、
上記第1の操作列と上記第2の操作列との差分の大小を第1のユーザに示すステップと
をさらに実行することを含み、
上記適用するステップが、上記第1のユーザによる指示に従い実行される。
上記サーバは、
上記第2のユーザによる編集が許されないオブジェクトが上記第1のユーザによって指定されることに応じて、当該指定オブジェクトを示す情報を上記第1のクライアントから受信する第1の受信部と、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第2のユーザによる変更の指示を示す変更指示データを上記第2のクライアントから受信する第2の受信部と、
上記第2のクライアントからの上記変更指示データの受信に応じて、上記指定オブジェクトについてのブランチ・データを作成する作成部(305)と、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第1のユーザによる変更の指示を示す変更指示データを上記第1のクライアントから受信する第3の受信部と、
上記第2のクライアントから受信した上記変更指示データ、上記第1のクライアントから受信した上記変更指示データ、及び上記ブランチ・データを格納する格納部であって、上記ブランチ・データに対して、上記第1のクライアントから受信した変更指示データに対応する操作が反映される、上記格納部(304)と、
上記第1のクライアントから受信した上記変更指示データに対応する操作列(第1の操作列)と上記第2のクライアントから受信した上記変更指示データに対応する操作列(第2の操作列)とをマージすることが可能であるかをOTを使用して判断する判断部(306)と、
上記マージすることが可能であることに応じて、OTを使用して、上記第1の操作列を上記第2のユーザのコンテンツ・データに適用する適用部(307)と
をさらに備えている。上記第1の受信部、上記第2の受信部及び上記第3の受信部は、1つにまとめられていてもよい(303)。
本発明ではまた、共同編集のユーザ全員が、コンテンツ・データ中のオブジェクトが保護されているかどうかを意識することなく、全てのオブジェクトを自由に編集可能である。
本発明ではまた、共同編集者の数は多い場合に、他のユーザによる予期せぬ変更に対処することができる。
本発明は、例えば、e−ラーニングで生徒が講義資料を共有し、講義資料に自由に書き込みを許しつつも、自分のメモを変更されたくないが、出来るだけ同じ内容を共有したい場面で有効である。
コンピュータ(101)は、CPU(102)とメイン・メモリ(103)とを含み、これらはバス(104)に接続されている。CPU(102)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、インテル社のCore i(商標)シリーズ、Core 2(商標)シリーズ、Atom(商標)シリーズ、Xeon(商標)シリーズ、Pentium(登録商標)シリーズ、Celeron(登録商標)シリーズ、AMD社のPhenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(商標)シリーズ又はSempron(商標)が使用されうる。バス(104)には、ディスプレイ・コントローラ(105)を介して、ディスプレイ(106)、例えば液晶ディスプレイ(LCD)が接続されうる。ディスプレイ(106)は、コンピュータの管理のために、通信回線を介してネットワークに接続されたコンピュータについての情報と、そのコンピュータ上で動作中のソフトウェアについての情報を、適当なグラフィック・インタフェースで表示するために使用される。バス(104)にはまた、S−ATA又はIDEコントローラ(107)を介して、ディスク(108)、例えばハードディスク又はシリコン・ディスクと、ドライブ(109)、例えばCD、DVD又はBDドライブとが接続されうる。バス(104)にはさらに、キーボード・マウスコントローラ(110)又はUSBバス(図示せず)を介して、キーボード(111)及びマウス(112)が接続されうる。
ディスク(108)には、オペレーティング・システム、J2EEなどのJava(登録商標)処理環境を提供するプログラム、その他のプログラム、及びデータが、メイン・メモリにロード可能に記憶されている。
ドライブ(109)は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラムをディスク(108)にインストールするために使用される。
通信インタフェース(114)は、例えばイーサネット(登録商標)・プロトコルに従う。通信インタフェース(114)は、通信コントローラ(113)を介してバス(104)に接続され、コンピュータ(101)を通信回線(115)に物理的に接続する役割を担い、コンピュータ(101)のオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は、有線LAN環境、或いは例えばIEEE802.11a/b/g/nなどの無線LAN接続規格に基づく無線LAN環境であってもよい。
各クライアント(202a〜202c)は、各ユーザ(203a〜203c)によって操作されうる。なお、図2Aでは、クライアントが3台描かれているが、クライアントの数は2台であってもよく、または3台より多くてもよい。
クライアント(212)は、仮想クライアント(212a及び212b)を実装している。仮想クライアント(212a及び212b)は、同じオペレーティング・システムを実装していてもよく、又は異なるオペレーティング・システムを実装していてもよい。各クライアント(212a及び212b)は、各ユーザ(213a及び213b)によって操作されうる。なお、図2Bでは、仮想クライアントが2台描かれているが、クライアントの数は3台以上であってもよい。
各シン・クライアント(222a〜222c)は、各ユーザ(223a〜223c)によって操作されうる。なお、図2Cでは、シン・クライアントが3台描かれているが、シン・クライアントの数は2台であってもよく、または3台より多くてもよい。
図2Dはサーバが不要な例である。各クライアント(232a及び232b)は、各ユーザ(233a及び233b)によって操作されうる。なお、図2Dでは、クライアントが2台描かれているが、クライアントの数は2台より多くてもよい。
サーバ(301)は、クライアント(302a及び302b)と接続している。サーバ(301)は、受信部(303)、記憶部(304)、作成部(305)、判断部(306)及び適用部(307)を備えている。サーバ(301)はまた、バッファ・コントロール部(308)を備えていてもよい。サーバ(301)はさらに、提供部(309)を備えていてもよい。
受信部(303)は、クライアント(302a)及びクライアント(302b)の一方から、指定オブジェクトを示す情報を受信する。また、受信部(303)は、クライアント・コンピュータ(302a)及び/又はクライアント(302b)から、変更指示データを受信する。
バッファ・コントロール部(308)は、適用部(307)が第1の操作列を第2のユーザのコンテンツ・データに適用後に、ブランチ・データ及び第1のクライアントからの変更指示データを記憶部(304)から削除する。記憶部がバッファ(304a及び304b)を備えている場合、ブランチ・データ及び第1のクライアントからの変更指示データを格納しているバッファそのものをクリアーにするようにしてもよい。
クライアント(312a)は、クライアント(312b)と接続している。クライアント(312a)は、受信部(313)、記憶部(314)、作成部(315)、判断部(316)及び適用部(317)を備えている。クライアント(312a)はまた、バッファ・コントロール部(318)を備えていてもよい。クライアント(312a)はさらに、提供部(319)を備えていてもよい。
受信部(313)は、クライアント(312b)方から、指定オブジェクトを示す情報を受信する。また、受信部(313)は、クライアント・コンピュータ(312b)から、変更指示データを受信する。
バッファ・コントロール部(318)は、適用部(317)が第1の操作列を第2のユーザのコンテンツ・データに適用後に、ブランチ・データ及び第1のクライアントからの変更指示データを記憶部(314)から削除する。記憶部がバッファ(314a及び314b)を備えている場合、ブランチ・データ及び第1のクライアントからの変更指示データを格納しているバッファそのものをクリアーにするようにしてもよい。
(1)操作列 H のうち i 番目の操作を H[i]とする。
(2)操作列 H に含まれる操作の個数を |H| とする。
(3)操作列 H に含まれる各操作 O は、下記(A)〜(L)に述べる情報を持つ。
O.t= ins であれば、操作Oが文字列の挿入操作である。
O.t= del であれば、操作Oが文字列の削除の操作である。
(B)O.p は、文書中での操作を適用する位置を示す。
O.t= ins, O.p=1 であれば、文書の1文字目の後に文字を挿入する。
O.t= del, O.p=3 であれば、文書の3文字目の文字を削除する
(C)O.len は、文書中での変更される文字列の長さを示す。変更は文書中に文字を挿入すること、又は文書中の文字を削除することを含む。
文字列“abc”が文書中に挿入されるとき、O.len = 3 である。
(D)O.s は、文書中に挿入する文字列、又は文書から削除される文字列を示す。
文字列“abc”が文書中に挿入されるとき、O.s = “abc” である。
(E)O1 ⊥ O2は、同じ状態の文書に対して起こった操作であることを示す。すなわち、2つの操作O1及びO2は、コンテクスト等価(Context equivalent)であることを示す。コンテクスト等価である場合、OTによってコンテクスト等価でない操作に変換する必要がある
(F)O1 → O2は、O1がO2の前に起こっていることを示す。
O2の操作には既にO1の操作の影響が含まれているので、OTの必要はない。
(G)O1 |→ O2 は、O1がO2の前に起こっていて、且つ、O1を実行後の状態はO2を実行する前の状態であることを示す。すなわち、2つの操作O1とO2は、コンテクスト先行(Context preceding)である。
(H)IT(Ob, Oa) は、インクルージョン・トランスフォーメーション(Inclusion Transformation)であり、Ob の操作にOaの操作の影響を含めて、新しい操作Ob’を作ることを示す。
Oa⊥ Ob のとき、Oa |→ Ob’ となる。
(I)ET(Ob, Oa) は、エクスクルージョン・トランスフォーメーション(Exclusion Transformation)であり、Ob の操作からOaの操作の影響を取り除くことを示す。
(J)SWAP(Ob, Oa)は、Oa |→Ob のときに Ob’ |→ Oa’ となる操作 Oa’, Ob’を作ることを示す。ITとETとを組み合わせて、SWAPができる。
(K)MERGE(Ob, Oa)は、Oa |→Ob のときにOa’ |→ Ob’ であり、且つ操作の位置がオーバラップしない2つの操作を作ることを示す。
(L)H1・H2は、2つの操作の履歴 H1,H2 をつなげたものを示す。
(a)SWAP
O1|→ O2 のときに、以下の操作によって、O2’ |→ O1’ となる操作が得られる。
O2’ = ET(O2, O1);
O1’ = IT(O1, O2’);
return (O2’, O1’);
}
O1|→ O2 のとき、以下の操作によって、O1’ |→ O2’ であり、且つ2つの操作の位置がオーバラップしていない操作が得られる。
Webオフィス・ソフトウェアで共同編集をサポートするために、第1のクライアント(401)と第2のクライアント(402)は、互いの操作列を送受信する。
第1のクライアント(401)は、第1のユーザ(403)による文書の編集操作を受信し、その操作列を第2のクライアント(402)にネットワークを経由して送信する。
第2のクライアント(402)は、第2のユーザ(404)による文書の編集操作を受信し、その操作列を第1のクライアント(401)にネットワークを経由して送信する。
しかし、図4Aの例に示すように、第1のクライアント(401)と第2のクライアント(402)との間でデータが同期しないことがある。
ステップ411及びステップ421で、第1のユーザ(403)及び第2のユーザ(404)は、同じ文章の内容“CLOUD”から編集をそれぞれ開始する。
ステップ412で、第1のクライアント(401)は、4文字目を消去する操作を第1のユーザ(403)から受け取る。従って、“CLOUD”は、“CLOD”となる。一方、ステップ422で、第2のクライアント(402)は、2文字目を消去する操作を第2のユーザ(404)から受け取る。従って、“CLOUD”は、“COUD”となる。
次に、ステップ413で、第1のクライアント(401)は、ステップ422で行われた2文字目を消去する操作列を第2のクライアント(402)から受け取る。従って、“CLOD”は、“COD”となる。一方、ステップ423で、第2のクライアント(402)は、ステップ412で行われた4文字目を消去する操作列を第1のクライアント(401)から受け取る。従って、“COUD”は、“COU”となる。
よって、第1のクライアント(401)での編集結果は“COD”であり、一方、第2のクライアント(402)での編集結果は“COU”である。従って、第1のクライアント(401)と第2のクライアント(402)との間でコンテンツが一致しない。
以上の通りであるから、図4Aの例では、同期が操作列の送受信において失敗している。
ステップ431及びステップ441で、第1のユーザ(403)及び第2のユーザ(404)は、同じ文章の内容“CLOUD”から編集をそれぞれ開始する。
ステップ432で、第1のクライアント(401)が、4文字目を消去する操作を第1のユーザ(403)から受け取る。従って、“CLOUD”は、“CLOD”となる。一方、ステップ442で、第2のクライアント(402)が、2文字目を消去する操作を第2のユーザ(404)から受け取る。従って、“CLOUD”は、“COUD”となる。
次に、ステップ433で、第1のクライアント(401)が、ステップ442で行われた2文字目を消去する操作列を第2のクライアント(402)から受け取る。OTによって、第2のクライアント(402)から受け取ったこの操作がステップ432の4文字目を消去する操作(ステップ432)に依存しないことが判定されるので、当該操作は、そのまま実行される。従って、“CLOD”は、“COD”となる。一方、ステップ443で、第2のクライアント(402)は、ステップ432で行われた4文字目を消去する操作列を第1のクライアント(401)から受け取る。OTによって、第1のクライアント(401)から受け取ったこの操作が前の2文字目を消去する操作(ステップ442)に依存することが判定される。そして、OTによって、当該操作は4文字目を消去する操作から3文字目を消去する操作に変換されて実行される。従って、“COUD”は、“COD”となる。
よって、第1のクライアント(401)及び第2のクライアント(402)での編集結果はいずれも“COD”であるので、第1のクライアント(401)及び第2のクライアント(402)との間でコンテンツが一致する。
以上の通りであるから、図4Bの例では、OTを使用することによって、同期が操作列の送受信において成功している。
サーバ(501)で第1のクライアント(502)及び第2のクライアント(503)からそれぞれ操作列1(511)及び操作列2(512)を受信したとする。
操作列1(511)はA〜D及びF〜Hの各操作からなり、Cは削除する操作であり、G及びHは挿入する操作であることを示す。
操作列2(512)はA〜B及びD〜Hの各操作からなり、B、D及びGは削除する操作であり、Eは挿入する操作であることを示す。
操作列1(511)及び操作列2(512)を、OTを適用してマージした結果、操作列1のG(挿入である)は、操作列2のG(削除である)によって消されてしまう。そして、操作列1(511)及び操作列2(512)をマージした操作列(513)は、A〜F及びHの各操作からなり、B、C及びDは削除する操作であり、Eは挿入する操作であることを示す。結果的に、OTによるマージされた操作列は、A〜F及びHである。操作列1(511)及び操作列2(512)をマージした上で、1つの操作列として実行しても、同じ結果が得られる(513)。
さらに、マージによって、送受信するデータの削減が可能である。
各ステップの主体は、ブランチ・データ(602)とトランク・データ(601)とのコンテンツの比較を行うハードウェアである。図2A〜図2C及び図3Aに示すようなサーバ−クライアント関係にあるシステムの場合、図6に示す各ステップの主体はサーバである。図2D及び図3Bに示すようなクライアント−クライアント関係にあるシステムの場合、各ステップの主体は第1のクライアント又は第2のクライアントのいずれかであり、上記比較を行うハードウェアである。図8及び図10〜図15についても同様である。
ステップ612では、サーバは、第2のユーザが当該指定オブジェクトに変更を加えたかどうかを監視する。当該監視は、第2のクライアントから送信されるオブジェクトの変更の指示を示すデータにより行われる。変更の指示を示すデータは、例えばオブジェクトのIDと、当該IDで指示されているオブジェクトへの操作の情報である。具体的には、あるオブジェクトの色を変える場合では、オブジェクトの変更の指示を示すデータは、当該オブジェクトのIDと当該オブジェクトに新たに設定された色である。第2のユーザが指定オブジェクトを変更していない間は、第1のユーザによる変更の指示を示すデータがサーバに送信され、そして、当該サーバのメモリ内にあるトランク・データに対して変更が加えられる(なぜならば、下記に述べるようにブランチ・データがまだ作成されていなためである)。トランク・データとは、上述したように、共同編集における幹となるデータである。
ステップ613では、サーバは、第2のユーザが指定オブジェクトを変更したことを検出する。
ステップ614では、サーバは、上記検出に応じて、当該変更された指定オブジェクトについてのブランチ・データをサーバのメモリ内に自動的に作成する。ブランチ・データとは、上述したように、トランク・データから分岐したものであり、指定オブジェクトのコピーである。サーバはまた、第1のクライアントから送信される指定オブジェクトについての変更の指示を示すデータを上記ブランチ・データが格納されているメモリ内に格納する。
ステップ615では、サーバは、第2のクライアントから送信される指定オブジェクトについての変更の指示を示すデータを上記トランク・データが格納されているメモリ内に格納する。サーバは、指定オブジェクトについての変更の指示を示すデータが第1のクライアントからのものであるか、第2のクライアントのものであるかを、例えばクライアントIDにより識別し、当該データが第1のクライアントからのものである場合には当該データを上記ブランチ・データが格納されているメモリ内に格納し、一方当該データが第2のクライアントからのものである場合には当該データを上記トランク・データが格納されているメモリ内に格納するようにしうる。
ステップ616では、サーバは、トランク・データ(601)が格納されているメモリ内の変更指示データに対応する操作列と、ブランチ・データ(602)が格納されているメモリ内の変更指示データに対応する操作列とがマージ可能であるかどうかを判定する。当該判定において、OTが適用される。OTを使用することで、効率的な計算をすることが可能である。トランク・データ(601)の上記操作列とブランチ・データ(602)の上記操作列との比較をOTの枠組みで行うことにより、比較のリアルタイム性が確保される。第2のユーザの編集内容が第1のユーザの編集内容のサブセットとなっているとき、サーバは、ブランチ・データ(602)の内容がトランク・データ(601)の内容とマージ可能であると判定する。そして、サーバは、OTを使用して、第1のユーザによる操作列を第2ユーザのコンテンツ・データ(すなわち、指定オブジェクトについてのブランチ・データの作成後におけるトランク・データ(601)である)に適用する。その後、サーバは、ブランチ・データ(602)を上記メモリから削除する。このように、マージできるときにブランチ・データ(602)をメモリから削除するので、ファイルが必要以上に分散することを防ぐことが可能である。ブランチ・データ(602)の削除によって、トランク・データ(601)に戻る。
ステップ617では、サーバは、ステップ612に戻り、第2のユーザが当該指定オブジェクトに変更を加えたかどうかを新たに監視する。すなわち、サーバは、指定オブジェクトを示す情報を新たに待つ。
以下では、図3Aに示すようなサーバ−クライアント環境にあるシステムの場合を例に述べる。図3Aに示すクライアント−サーバ環境において、クライアント(302a)が第1のクライアントであり、及びクライアント(302b)が第2のクライアントであるとして説明する。
ステップ701では、サーバは、編集対象のコンテンツ・データのトランク・データを当該サーバのメモリ内に作成し、保存する。サーバは、第1のクライアント及び第2のクライアントからデータを受信する。当該データが、オブジェクトの変更である場合、上記メモリ内にあるトランク・データに対して変更を加える。当該データが指定オブジェクトを示す情報である場合、当該データを送信したクライアントを第1のクライアントとし、その他のクライアントを第2のクライアントとする。当該指定オブジェクトは、第1のユーザが第2のユーザによる編集が許されないオブジェクトとして指定したものである。
ステップ702では、サーバは、コンテンツ・データ中のオブジェクトの変更の指示を監視する。
(a)当該オブジェクトの変更指示データが、指定オブジェクト以外のオブジェクトに対する変更指示データであれば、当該オブジェクトの変更指示データが第1のユーザからの変更指示データであるか又は第2のユーザからの変更指示データであるかを問わずに、上記メモリ内にあるトランク・データに対して変更が加えられる。
(b)当該オブジェクトの変更指示データが、指定オブジェクトに対する変更である場合、処理はステップ703に進む。
ステップ703では、サーバは、指定オブジェクトに対する変更指示データが、第1のユーザからのものであるか、又は第2のユーザからのものであるかを判定する。当該判定は、例えばクライアントのIDを使用して行われる。
(c)当該オブジェクトの変更指示データが第1のユーザからのものである場合、上記トランク・データに対して変更が加えられる。そして、処理はステップ702に戻る。
(d)当該オブジェクトの変更指示データが、指定オブジェクトに対する変更であり、当該オブジェクトの変更の指示が第2のユーザからのものである場合、処理はステップ704に進む。
ステップ704では、サーバは、上記(d)の場合に、当該サーバのメモリ内に、指定オブジェクトについてのブランチ・データを自動的に作成する。ここで、ブランチ・データは指定オブジェクトについてのものであり、指定オブジェクト以外のオブジェクトについてブランチ・データは作成されない。メモリのコストを削減するためである。
ステップ705では、サーバは、オブジェクトの変更指示データを監視する。
(e)当該オブジェクトの変更指示データが、指定オブジェクト以外のオブジェクトに対する変更指示データであれば、当該オブジェクトの変更指示データが第1のユーザからの変更指示データであるか又は第2のユーザからの変更指示データであるかを問わずに、上記メモリ内にあるトランク・データに対して変更が加えられる。そして、処理はステップ702に戻る。
(f)当該オブジェクトの変更指示データが、指定オブジェクトに対する変更指示データである場合、処理はステップ706に進む。
ステップ706では、サーバは、指定オブジェクトに対する変更指示データが、第1のユーザからのものであるか、又は第2のユーザからのものであるかを判定する。当該判定は、例えばクライアントのIDを使用して行われる。
(g)当該オブジェクトの変更指示データが第2のユーザからの変更指示データである場合、処理はステップ707に進む。
(h)当該オブジェクトの変更指示データが第1のユーザからの変更指示データである場合、処理はステップ708に進む。
ステップ707では、サーバは、第2のユーザからの変更指示データに対応する操作列をトランク・データとして保存する。そして、処理はステップ702に戻る。
ステップ708では、サーバは、第1のユーザからの変更指示データに対応する操作列をブランチ・データとして保存する。
ステップ709は、ブランチ・データが作成されてから所定の時間を経過することによって、又はユーザからの指示によって(下記図14及び図15を参照)開始される。サーバは、トランク・データの変更指示データに対応する操作列と、ブランチ・データの変更指示データに対応する操作列とがマージ可能であるかどうかを判定する。当該判定において、OTが適用される。マージが可能である場合は、処理はステップ710に進む。マージが不可能である場合は、処理はステップ702に戻る。
ステップ710では、サーバは、マージが可能であるとの判断に応じて、OTを使用して、第1のユーザによる操作列を第2ユーザのコンテンツ・データ(すなわち、指定オブジェクトについてのブランチ・データの作成後におけるトランク・データである)に適用する。
ステップ711では、マージ適用後に、当該処理を終了する。
以下では、図3Bに示すようなクライアント−クライアント環境にあるシステムの場合を例に述べる。図3Bに示すクライアント−クライアント環境において、クライアント(312a)が第1のクライアントであり、及びクライアント(312b)が第2のクライアントであるとして説明する。
ステップ721では、第1のクライアント及び第2のクライアントの一方のユーザが他のユーザによって編集されたくないオブジェクトを指定する。指定オブジェクトを指定したクライアントが第1のクライアントであり、その他のクライアント全てが第2のクライアントである。第1のクライアントは、指定オブジェクトを示す情報を第2のクライアントへ送信する。
ステップ722では、第2のクライアントは、第1のクライアントから指定オブジェクトを示す情報を受信し、当該第2のクライアントの記憶部に格納する。
ステップ723では、第2のクライアントは、指定オブジェクトを示す情報を受信後に、指定オブジェクトについて第2のユーザによる変更の指示を示す変更指示データを受信した場合、当該変更指示データを第1のクライアントに送信する。当該変更指示データの送信は、所定の時間ごとに、所定の変更指示データ数ごとに、又はユーザの指示により行われるようにしてよい。
ステップ724では、第1のクライアントは、第2のクライアントからの最初の変更指示データの受信に応じて、指定オブジェクトについてのブランチ・データを当該第1のクライアントの記憶部内に作成する。
ステップ725では、第1のクライアントは、指定オブジェクトを示す情報を受信後に、指定オブジェクトについて第1のユーザによる変更の指示を示す変更指示データを当該第1のクライアントの記憶部内に格納する。
ステップ726では、第2のクライアントは、ステップ723の上記変更指示データを第2のクライアントの記憶部に格納する。なお、当該格納は、ステップ723において上記変更指示データの第1のクライアントへの送信前に、又は送信と同時に行ってもよい。
ステップ727は、ブランチ・データが作成されてから所定の時間を経過することによって、又はユーザからの指示によって(下記図14及び図15を参照)開始される。トランク・データ全ては、当該開始の決定に応じて、第2のクライアントから第1のクライアントに送信するようにしてよい。代替的には、トランク・データは、その作成ごとに、第2のクライアントから第1のクライアントに送信するようにしてよい。第1のクライアントは、トランク・データの変更指示データに対応する操作列と、ブランチ・データの変更指示データに対応する操作列とがマージ可能であるかどうかを判定する。当該判定において、OTが適用される。マージが可能である場合は、処理はステップ728に進む。マージが不可能である場合は、処理はステップ725に戻る。
ステップ728では、第1のクライアントは、トランク・データの変更指示データを第2のクライアントに送信する。
ステップ729では、第2のクライアントは、マージが可能であるとの判断に応じて、OTを使用して、第1のユーザによる操作列を第2ユーザのコンテンツ・データ(すなわち、指定オブジェクトについてのブランチ・データの作成後におけるトランク・データである)に適用する。適用後に、第2のクライアントはブランチ・データを削除してもよい旨のメッセージを第1のクライアントに送信する。
ステップ730では、マージを適用後に、或いは第1のクライアントからブランチ・データを削除した旨のメッセージを受信することに応じて、当該処理を終了する。
図7Bと同様に、以下では、図3Bに示すようなクライアント−クライアント環境にあるシステムの場合を例に述べる。図3Bに示すクライアント−クライアント環境において、クライアント(312a)が第1のクライアントであり、及びクライアント(312b)が第2のクライアントであるとして説明する。
ステップ741では、第1のクライアント及び第2のクライアントの一方のユーザが他のユーザによって編集されたくないオブジェクトを指定する。指定オブジェクトを指定したクライアントが第1のクライアントであり、その他のクライアント全てが第2のクライアントである。第1のクライアントは、指定オブジェクトを示す情報を第2のクライアントへ送信する。
ステップ742では、第2のクライアントは、第1のクライアントから指定オブジェクトを示す情報を受信し、当該第2のクライアントの記憶部に格納する。
ステップ743では、第2のクライアントは、指定オブジェクトの最初の変更が第2のユーザによって行われることにより、指定オブジェクトについてのブランチ・データを当該第2のクライアントの記憶部内に作成する。そして、第2のクライアントは、指定オブジェクトについてのブランチ・データが作成されたことを第1のクライアントに知らせるメッセージを送信する。
ステップ744では、第1のクライアントは、ステップ743のメッセージを受信する。
ステップ745では、第1のクライアントは、ブランチ・データが作成されたメッセージの受信することに応じて、当該メッセージに含まれるブランチ・データの作成時間以降の第1のユーザによる変更の指示を示す変更指示データを、トランク・データとして当該第2のクライアントの記憶部内に格納する。
ステップ746では、第2のクライアントは、指定オブジェクトを示す情報を受信後に、指定オブジェクトについて第2のユーザによる変更の指示を示す変更指示データを、ブランチ・データとして当該第2のクライアントの記憶部内に格納する。
ステップ747は、ブランチ・データが作成されてから所定の時間を経過することによって、又はユーザからの指示によって(下記図14及び図15を参照)開始される。トランク・データ全ては、当該開始の決定に応じて、第1のクライアントから第2のクライアントに送信するようにしてよい。代替的には、トランク・データは、その作成ごとに、第1のクライアントから第2のクライアントに送信するようにしてよい。第2のクライアントは、トランク・データの変更指示データに対応する操作列と、ブランチ・データの変更指示データに対応する操作列とがマージ可能であるかどうかを判定する。当該判定において、OTが適用される。マージが可能である場合は、処理はステップ748に進む。マージが不可能である場合は、処理はステップ746に戻る。
ステップ748では、第2のクライアントは、ブランチ・データの変更指示データに対応する操作列を第1のクライアントに送信する。
ステップ749では、第1のクライアントは、マージが可能であるとの判断に応じて、OTを使用して、ブランチ・データの変更指示データに対応する操作列を第1ユーザのコンテンツ・データ(すなわち、指定オブジェクトについてのブランチ・データの作成後におけるトランク・データである)に適用する。適用後に、第1のクライアントはブランチ・データを削除してもよい旨のメッセージを第2のクライアントに送信する。
ステップ750では、マージを適用後に、或いは第2のクライアントからブランチ・データを削除した旨のメッセージを受信することに応じて、当該処理を終了する。
ステップ801では、サーバは、ブランチ・データ(602)とトランク・データ(601)との比較を、OTを適用して開始する。
ステップ802では、サーバは、ブランチ・データ(602)を作成後に第1のユーザ以外の第2のユーザ全てによって変更された指定オブジェクトについての操作列全てをOTで計算し、結果Htを得る。Htとは、トランク・データに対する第1のユーザ以外の第2のユーザ全てによる操作列である。
ステップ803では、サーバは、ブランチ・データ(602)を作成後に第1のユーザのみによって変更された指定オブジェクトについての操作列全てをOTで計算し、結果Hbを得る。Hbとは、ブランチ・データに対する第1のユーザだけによる操作列である。
ステップ804では、サーバは、OTを用いて、ブランチ・データとトランク・データとがマージ可能であるかどうかを判定する。マージ可能である条件の1つは、指定オブジェクトについてのブランチ・データの作成後におけるHtの操作列全てをOTで計算した結果であるHtが空であることであり、又はマージ可能である条件の他は、指定オブジェクトについてのブランチ・データの作成後におけるHtの操作列全てをOTで計算した結果であるHtと、指定オブジェクトについてのブランチ・データの作成後におけるHbの操作列全てをOTで計算した結果であるHbとの距離が0(ゼロ)であることである。距離が0でない場合、すなわちマージ不可能である場合には、ステップ806に進み、比較のプロセスを終了する。
ステップ805では、サーバは、マージ可能であると判定することに応じて、ブランチ・データとトランク・データをマージする(ステップ806)。
ステップ806では、サーバは、上記比較のプロセスを終了する。
(1)Onewは、新しくトランクに適用された操作を示す。
a)Onew は、トランクを編集中のユーザ間のコンテンツの同期をするために、既にOTによって、Htの全ての操作に対して、コンテクスト等価でない操作に変換されている。また、最後にトランクに対して適用された操作に対して、コンテクスト先行になっている。
Oi→Onew, 0<i<|Ht|
O|Ht|-1 |→ Onew
b)ブランチの操作列に関しては、一人で操作しているので、コンテクスト等価な操作はないため、ブランチに対する新しい操作をOnewとすると、
Oi→Onew, 0<i<|Hb|
O|Hb|-1 |→ Onew
が常に成り立つので以下省略する。
Ht= Htd・Hti
a)Htd は、Ht の中で文字の削除の操作を示す。Ht の他の操作と変更点がオーバラップする場合、既にマージされている。 Htd は文字を削除する位置によって降順にソートされている。
a1)Hti のオーバラップする操作と既にマージされていることにより、Htd に含まれる削除の操作は元のコンテンツに対する削除の操作のみである。
a2)文字の挿入位置によって逆順にソートされていることで、 Htd に含まれる操作の位置は、元のコンテンツに対する位置と同一になる。ET(Htd[i],Htd[i-1])=Htd[i] が常に成り立つためである。
b)Hti は、Ht の中で文字の挿入の操作を示す。Ht の他の操作と変更点がオーバラップする場合、既にマージされている。 Htiは文字を挿入する位置によって逆順にソートされている。
b1)文字の挿入位置によって逆順にソートされていることで、Hti に含まれる操作の位置は、元のコンテンツに対する位置と同一になる。ET(Hti[i],Hti[i-1])=Hti[i] が常に成り立つためである。
オブジェクトの色又は位置については操作列の比較は簡単であり、例えばオブジェクトの色や、サイズなどのオブジェクトの属性を比較して、異なる属性の数をそのまま距離にして行うことによって可能である。
テキストの変更についての操作列の比較を下記に説明する。説明を容易にするために、プレインテキストの例で説明する。OTを一般のXMLに拡張するのは、各操作を適用する位置 O.p を整数値を持つベクトルで表すことによって可能である。例えば、下記URLに記載されている技術を使用することにより可能である:http://portal.acm.org/citation.cfm?id=587088(Aguido Horatio Davis等、”Generalizing operational transformation to the standard general markup language”, Computer Supported Cooperative Work, Proceedings of the 2002 ACM conference on Computer supported cooperative work, ACM, 58-67, 2002)(上記非特許文献6)。操作列は、文字の削除についての操作列、文字の挿入についての操作列の順に保持することによって、各操作を最大限にマージでき、そして操作列を小さくできる。例えば、下記URLに記載されている技術を使用して可能である:http://portal.acm.org/citation.cfm?id=675712(Haifeng Shen等、”A Log Compression Algorithm for Operation-based Version Control Systems”, COMPSAC,Proceedings of the 26th International Computer Software and Applications Conference on Prolonging Software Life: Development and Redevelopment, IEEEComputer Society, 867-872, 2002)(上記非特許文献5)。
また、Htdの操作は、Htiのうち操作の位置がオーバラップするものとマージされている。また同様に、Hbdの操作は、Hbiのうち操作の位置がオーバラップするものとマージされている。よって、文字の削除についての操作列Htd及びHbdは他の操作とマージされているため、元のコンテンツに対する削除の操作のみであり、挿入操作で新しく追加される文字についての削除の操作は含まない。
操作列を、文字の削除についての操作列、文字の挿入についての操作列の順に保持するのに加えて、Htd、Hti、Hbd、Hbi それぞれを各操作を適用する位置 O.p によって降順にソートして保持する。この計算方法の詳細は、下記にupdateHとして述べる。
例1: [O1(1, “abc”),O2(5, “xyz”)] の2つの操作列を、元のコンテンツが“親譲りの無鉄砲で小供の時から損ばかりしている”という文書に適用する場合
結果1: “親abc譲xyzりの無鉄砲で小供の時から損ばかりしている”
結果1では、O2は、元のコンテンツに対して、2文字目に挿入されている。
例2: [O1(5, “VW”), O2(2,“DEF”)] の2つの操作列を、元のコンテンツが“親譲りの無鉄砲で小供の時から損ばかりしている”という文書に適用する場合
結果2:“親譲DEFりの無VW鉄砲で小供の時から損ばかりしている”
Hti及びHbiについては、Htd及びHbdそれぞれが履歴の前方にあることによって編集の位置がずれている。Hti及びHbiから、Htd及びHbdの影響を除けば、挿入の操作についてもトランク・データとブランチ・データの操作列を比較することによって、コンテンツ同士の比較をすることができる。この計算方法の詳細は、下記にexcludeDeleteとして述べる。
editDistanceは既存の文字列間の編集距離を計算する手法を用いる。Htd とHbd の計算は、HtiとHbiの距離の計算と同様であるので省略する。
dist ← 0;
y ← 0;
for (x=0; x<|Hti|; x++) { // トランク・データに対する挿入の操作についてブランチ・データとの差分を調べる
if (y<|Hbi|) {
while (Hbi[y].p > Hti[x].p) { //トランク・データの操作と関係のない位置のブランチ・データの操作をスキップする
y++;
}
if (Hti[x].p==Hbi[y].p) { // ブランチ・データ及びトランク・データの操作が同じ位置を編集する
dist += editDistance(Hti[x].s, Hbi[y].s); //編集距離を計算する
} else { // ブランチ・データに同じ位置の編集がない
dist += Hti[x].len; // トランク・データの編集内容がそのまま差分になる
}
} else { // 既に、ブランチの操作全てを調べたとき
dist += Hti[x].len; // トランク・データの編集内容がそのまま差分になる
}
}
return dist;
}
updateHは、Ht に新しい操作 Onew を追加して、上記のHt と同様の条件を満たす操作の履歴 Ht’ = Htd’・Hti’ を得る関数である。updateH(Ht, Onew) について、下記に詳述する。
H‘← H・Onew; // 新しい操作をトランク・データの操作列に追加
for (i=|H’|-1;i>0; i--) {
if (H’[i].p≧H’[i-1].p ∧ H’[i].p≦H’[i-1].p+ H’[i-1].len) { // 新しい操作と編集位置とがオーバラップしている
(H’ [i], H’[i-1]) =MERGE(H’[i], H’[i-1]); // 操作をマージする
}
if (H’[i-1].t=del ∧ H’[i-1].p < H’[i-2].p){
break; // 新しい操作はこれ以上マージできる操作がない
} else {
(H’[i], H’[i-1]) =SWAP(H’[i], H’[i-1]); // 新しい操作をさらに配列の前方に移動してマージできる操作があるか調べる
}
}
if (Onew’.t=ins) { // Onew’ が挿入の操作であれば、Hi の中の適切な位置に移動する
while (H[i+1].t=del ∨ H[i+1].p>H[i].p) {
(H’[i], H’[i+1]) =SWAP(H’[i], H’[i+1]); // 新しい操作を操作の位置で正しくマージされるまで配列の後方に移動する
i++;
}
} else {
// Onew’ が削除の操作であれば既にソート済み
}
return H’;
}
トランク・データ及びブランチ・データの操作列 Ht, Hb の中の挿入に関する操作列 Hti及びHbi の編集位置は、Htd及びHbd の影響を受けている。Hti及びHbi に対して以下の計算を行うことで、Htd及びHbd による影響が取り除かれる。
Hi’ ← Hi;
for (i=0; i<|Hi|; i++) {
for (j=0; j<|Hd|; j++) {
Hi’[i] = ET(Hi’[i],Hj[j]);
}
}
return Hi’;
}
calculateDistanceは、トランク・データとブランチ・データとのコンテンツの距離は、以下のようにHtd及びHbd の距離と、Hti及びHbi の距離の和として計算できる。
dist ← 0;
d ist += calculateDistance(Htd, Hbd);
Hti’ ← excludeDelete(Hti, Htd);
Hbi’ ← excludeDelete(Hbi, Hbd);
dist += calculateDistance(Hti’, Hbi’);
return dist;
}
図10では、トランク・データに複数の図形(三角形、丸)が描かれている。
ステップ1001では、第1のユーザは、図形 丸について編集されたくないために、丸を指定オブジェクトとして選択する。
ステップ1002では、第2のユーザが指定オブジェクトである丸を上に移動する[(1)の操作]。
ステップ1003では、第2のユーザが指定オブジェクトを移動したことに応じて、丸だけをブランチ・データとしてバッファ内に作成する[(2)の操作]。
ステップ1004では、第1のユーザが丸を左に移動する[(3)の操作]。
ステップ1005では、トランク・データとブランチ・データとがマージ可能であるかをOTを適用して判断する。
ステップ1006では、マージ可能であることに応じて、(1)の操作は(3)の操作でキャンセルされるので(マージ)、丸は左に移動される。また、ブランチ・データが、バッファから削除される。
図11では、トランク・データに図形(三角形)及びテキスト(ABC)が描かれている。
ステップ1101では、第1のユーザは、テキスト ABCについて編集されたくないために、ABCを指定オブジェクトとして選択する。
ステップ1102では、第2のユーザが指定オブジェクトであるABCのうち、2文字目(B)に下線を入れる[(1)の操作]。
ステップ1103では、第2のユーザが指定オブジェクトを編集したことに応じて、ABCだけをブランチ・データとしてバッファ内に作成する[(2)の操作]。
ステップ1104では、第1のユーザが1〜3文字目を斜体にする[(3)の操作]。
ステップ1105では、第1のユーザが1〜3文字目に下線を入れる[(4)の操作]。
ステップ1106では、トランク・データとブランチ・データとがマージ可能であるかをOTを適用して判断する。
ステップ1107では、マージ可能であることに応じて、(1)の操作は(4)の操作でキャンセルされる(マージ)。結果として、ABCは斜体にされ、ABCに下線が付される。また、ブランチ・データが、バッファから削除される[(5)の操作]。
図12では、トランク・データに図形(三角形)及びテキスト(ABC)が描かれている。
ステップ1201では、第1のユーザは、テキスト ABCについて編集されたくないために、ABCを指定オブジェクトとして選択する。
ステップ1202では、第2のユーザが4文字目にDを挿入する操作をしたために、指定オブジェクトであるABCの4文字目にDが挿入される((1)の操作)。
ステップ1203では、第2のユーザが指定オブジェクトを編集したことに応じて、ABCだけをブランチ・データとしてバッファ内に作成する((2)の操作)。
ステップ1204では、第1のユーザが1文字目にAを挿入する操作をしたために、指定オブジェクトであるABCの1文字目にAが挿入される((3)の操作)。
ステップ1205では、第1のユーザが5文字目にDを挿入する操作をしたために、AABCの5文字目にDが挿入される((4)の操作)。
ステップ1206では、トランク・データとブランチ・データとがマージ可能であるかをOTを適用して判断する。
ステップ1207では、マージ可能であることに応じて、(1)の操作は(4)の操作でキャンセルされる(マージ)。結果として、ABCの1文字目にAが挿入され、AABCの5文字目にDが挿入されて、AABCDとなる。また、ブランチ・データが、バッファから削除される。
図13では、トランク・データに、タイトル「Objectives」の下にあるテキスト「− Provide a tool for easy access to the Web」(以下、「テキスト1」及びテキスト「− Make Web a new information resource」(以下、「テキスト2」)、図形(矢印)及びテキスト(Reduce information gap.)が描かれている。
ステップ1301では、第1のユーザは、タイトル「Objectives」及びそのタイトル下に配置されるテキストについて編集されたくないために、タイトル「Objectives」を指定オブジェクトとして選択する。なお、タイトル「Objectives」を選択することによって、そのタイトル下にあるテキストについても編集されたくないことを示すことができるとする。
ステップ1302では、第2のユーザが指定オブジェクトを編集する。第2のユーザは、タイトル「Objectives」下のテキスト1の最後及びテキスト2の最後に、文字列「for blind」及び文字列「for blind」をそれぞれ挿入する操作をした。
ステップ1303では、ステップ1302の第2のユーザが指定オブジェクトを編集したことに応じて、タイトル「Objectives」及びそのタイトル下にあるテキストだけをブランチ・データとして記憶装置内に作成する。
そして、第1のユーザが、タイトル「Objectives」下のテキスト1の最後に文字列「for blind」を挿入し、テキスト2の1つめの語「Make」と2つめの語「Web」の間に語「the」を挿入し及びテキスト2の最後に文字列「for blind」を挿入し、並びにテキスト3として「provide tool for web developers」を挿入する操作をした。
ステップ1304では、トランク・データ(1302)とブランチ・データ(1303)とがマージ可能であるかをOTを使用して判断する。その結果、マージ可能であると判断される。従って、第1のユーザの操作列が、OTを使用して、第2のユーザの操作列であるトランク・データ(1302)に適用される。
ツリー構造(1312)は、ブランチ・データが作成された後のトランク・データについてのものであり、タイトル「Objectives」内の各テキスト1、2及び3がツリー構造で表現可能であることを示す。ステップ1302では、テキスト1及びテキスト2に文字列「for blind」がそれぞれ追加されている。しかし、ステップ1301のツリー構造(1311)と比較して、ステップ1302のツリー構造(1312)は、親ノード及び子ノードとも変化していない。
ツリー構造(1313)はブランチ・データについてのものであり、タイトル「Objectives」内の各テキスト1及び2がツリー構造で表現可能であることを示す。ステップ1303では、テキスト3が追加されている。そこで、ステップ1301のツリー構造(1311)と比較して、ステップ1303のツリー構造(1313)において、第1層目のテキスト3についての子ノードが追加されている。
ツリー構造(1314)はトランク・データについてのものであり、タイトル「Objectives」内の各テキスト1、2及び3がツリー構造で表現可能であることを示す。テキスト1が、トランク・データ(1302)及びブランチ・データ(1303)で同じである。よって、テキスト1は、トランク・データ(1302)とブランチ・データ(1303)との間でマージ可能である。
トランク・データについてのツリー構造(1311)とブランチ・データについてのツリー構造(1312)に対する操作列の差分を計算することにより、コンテンツの差分を求めることができる。
1411は、トランク・データの操作列とブランチ・データの操作列との差分の大小をグラデーションで示している。グラデーションは、例えば差分が大きいほど赤色になり、差分が小さいほど緑色になるようにしてよい。
元のコンテンツは、図13の1301と同じであり、タイトル「Objectives」の下にテキスト1及びテキスト2を有する。
トランク・データ(1401)では、元のコンテンツに対して、タイトル「Objectives」下のテキスト1の最後に文字列「for blind」が挿入され、テキスト2の1つめの語「Make」と2つめの語「Web」の間に語「the」が挿入され及びテキスト2の最後に文字列「for blind」が挿入されている。
ブランチ・データ(1402)では、元のコンテンツに対して、タイトル「Objectives」下のテキスト1の最後に文字列「for blind」が挿入され、及びテキスト2の最後に文字列「for blind」が挿入されている。
従って、トランク・データ(1401)とブランチ・データ(1402)とのコンテンツのOTで求められる差分は小さい。そこで、ブランチ・データが作成されたオブジェクトの近傍に又は吹き出しで当該差分の大小を示すアイコンを表示し、その色を緑で表示する。ユーザは、該アイコンの色が緑であるので、マージがまだ必要でないと判断することが可能である。
トランク・データ(1403)では、トランク・データ(1401)に対して、テキスト3として「provide tool for web developers」が挿入されている。
ブランチ・データ(1404)では、トランク・データ(1402)と同じである。
従って、トランク・データ(1401)とブランチ・データ(1402)とのコンテンツの差分は大きい。そこで、ブランチ・データが作成されたオブジェクトの近傍に又は吹き出しで当該差分の大小を示すアイコンを表示し、その色を赤で表示する。ユーザは、該アイコンの色が赤であるので、マージが必要であると判断することが可能である。
上記コンテンツの差分の計算は、上記に示したcalculateDistanceのように、コンテンツの差分を動的計画法で計算できる。
上記コンテンツの差分が特に小さい場合に、マージを促す上記ユーザ・インタフェースを提供することによって、マージを促進することが可能である。
元のコンテンツは、図13の1301と同じであり、タイトル「Objectives」の下にテキスト1及びテキスト2を有する。
ブランチ・データ(1501)では、元のコンテンツに対して、タイトル「Objectives」下のテキスト1の最後に文字列「for blind」が挿入され、及びテキスト2の最後に文字列「for blind」が挿入されている。
ブランチ・データ(1502)のコンテンツは、ブランチ・データ(1501)と同じである。
トランク・データ(1503)では、元のコンテンツに対して、タイトル「Objectives」下のテキスト1の最後に文字列「for blind」が挿入され、テキスト2の1つめの語「Make」と2つめの語「Web」の間に語「the」が挿入され及びテキスト2の最後に文字列「for blind」が挿入され、並びにテキスト3として「provide tool for web developers」が挿入されている。
ステップ1511では、第1のユーザ(編集されたくないオブジェクトを指定したユーザ)は、ブランチ・データ(1501)のコンテンツを見ている。第1のユーザは、トランク・データの状態を視覚化するアイコンをクリックする。当該アイコンは、例えば、指定オブジェクトの近傍に又は吹き出しで表示されうる。
ステップ1512では、トランク・データ(1503)のコンテンツが、第1のユーザのモニタ画面に表示される。トランク・データ(1503)のコンテンツの表示は、例えばブランチ・データ(1502)の近傍に又は吹き出しで表示されうる。第1のユーザのモニタ画面は、トランク・データ(1503)のコンテンツの表示とともに、ブランチ・データ(1502)とトランク・データ(1503)とをマージするかどうかの指示を可能にするアイコンを備えていてよい。当該アイコンは、例えば「上書き」及び「キャンセル」である。「上書き」アイコンは、ブランチ・データ(1502)とトランク・データ(1503)とをマージすることを指示するアイコンである。「キャンセル」アイコンは、ブランチ・データ(1502)とトランク・データ(1503)とをマージすることを指示しないアイコンである。
ステップ1513では、第1のユーザが「上書き」をクリックすることによって、ブランチ・データ(1502)の操作列をトランク・データ(1503)に適用することにより、ブランチ・データ(1502)とトランク・データ(1503)のコンテンツがマージされる。そして、ブランチ・データ(1502)がバッファから削除される。
Claims (13)
- 第1のユーザに関連付けられた第1のクライアント・コンピュータ(以下、第1のクライアント)と第2のユーザに関連付けられた第2のクライアント・コンピュータ(以下、第2のクライアント)とにネットワークを介して接続可能なサーバ・コンピュータ(以下、サーバ)がコンテンツ・データ中のオブジェクトの共同編集を可能にする方法であって、前記サーバは、ユーザによる前記オブジェクトの変更の指示を示す変更指示データを格納する記憶部を備えており、
前記サーバが、
前記コンテンツ・データ中の前記第2のユーザによる編集が許されない前記オブジェクトが前記第1のユーザによって指定されることに応じて、当該指定されたオブジェクト(以下、指定オブジェクト)を示す情報を前記第1のクライアントから受信するステップと、
前記指定オブジェクトを示す情報を受信後に、前記指定オブジェクトについての前記第2のユーザによる変更の指示を示す変更指示データを前記第2のクライアントから受信し、当該受信した変更指示データを前記記憶部に格納するステップと、
前記第2のクライアントからの前記変更指示データの受信に応じて、前記指定オブジェクトについてのブランチ・データを作成するステップと、
前記指定オブジェクトについての前記ブランチ・データの作成後に、前記指定オブジェクトについての前記第1のユーザによる変更の指示を示す変更指示データを前記第1のクライアントから受信し、当該受信した変更指示データを前記記憶部に格納するステップであって、前記ブランチ・データに対して、前記第1のクライアントから受信した変更指示データに対応する操作が反映される、前記格納するステップと、
前記第1のクライアントから受信した前記変更指示データに対応する操作列(以下、第1の操作列)と前記第2のクライアントから受信した前記変更指示データに対応する操作列(以下、第2の操作列)とをマージすることが可能であるかをオペレーショナル・トランスフォーメーション(以下、OT)を使用して判断するステップと、
前記マージすることが可能であることに応じて、OTを使用して、前記第1の操作列を、前記第2のユーザが共同編集中のデータに適用するステップであって、前記第2のユーザが共同編集中の前記データは前記指定オブジェクトについての前記ブランチ・データの作成後におけるトランク・データであり、当該トランク・データは、前記共同編集における幹となるデータであり、及び、前記ブランチ・データは前記トランク・データから分岐したものであり且つ前記指定オブジェクトのコピーである、前記適用するステップと
を実行すること含み、
前記指定オブジェクトについての前記ブランチ・データの作成後に、前記ブランチ・データ及び前記第1のクライアントからの前記変更指示データが前記記憶部中の第1のバッファに格納され、前記第2のクライアントからの前記変更指示データが前記記憶部中の第2のバッファに格納される、前記方法。 - 前記マージすることが可能であることが、
前記指定オブジェクトについてのブランチ・データの作成後における前記第2の操作列全てをOTで計算した結果であるHtが空であることである、請求項1に記載の方法。 - 前記マージすることが可能であることが、
前記指定オブジェクトについてのブランチ・データの作成後における前記第2の操作列全てをOTで計算した結果であるHtと、前記指定オブジェクトについてのブランチ・データの作成後における前記第1の操作列全てをOTで計算した結果であるHbとの距離がゼロであることである、請求項1に記載の方法。 - 前記サーバが、
前記適用するステップの後に、前記ブランチ・データ及び前記第1のクライアントから受信した前記変更指示データを前記記憶部から削除するステップ
をさらに実行することを含む、請求項1〜3のいずれか一項に記載の方法。 - 前記判断するステップが、前記第1の操作列と前記第2の操作列との差分の大小を第1のユーザに示すためのユーザ・インタフェースに、当該差分の大小についてのデータを提供するステップをさらに含む、請求項1〜4のいずれか一項に記載の方法。
- 前記サーバが、
前記指定オブジェクトが指定される前に、前記第1のユーザによる前記オブジェクトの変更の指示を示す変更指示データを前記第1のクライアントから受信するステップと、
当該受信した変更指示データを用いて、前記第2のユーザが共同編集中の前記データを同期するステップと
を実行することをさらに含む、請求項1〜5のいずれか一項に記載の方法。 - コンテンツ・データ中のオブジェクトの共同編集を可能にするサーバ・コンピュータ(以下、サーバ)であって、前記サーバは、第1のユーザに関連付けられた第1のクライアント・コンピュータ(以下、第1のクライアント)と第2のユーザに関連付けられた第2のクライアント・コンピュータ(以下、第2のクライアント)とにネットワークを介して接続可能であり、
前記サーバが、
前記コンテンツ・データ中の前記第2のユーザによる編集が許されない前記オブジェクトが前記第1のユーザによって指定されることに応じて、当該指定されたオブジェクト(以下、指定オブジェクト)を示す情報を前記第1のクライアントから受信する受信部と、
前記指定オブジェクトを示す情報を受信後に、前記指定オブジェクトについての前記第2のユーザによる変更の指示を示す変更指示データを前記第2のクライアントから受信する受信部と、
前記第2のクライアントからの前記変更指示データの受信に応じて、前記指定オブジェクトについてのブランチ・データを作成する作成部と、
前記指定オブジェクトについての前記ブランチ・データの作成後に、前記指定オブジェクトについての前記第1のユーザによる変更の指示を示す変更指示データを前記第1のクライアントから受信する受信部と、
前記第2のクライアントから受信した前記変更指示データ、前記第1のクライアントから受信した前記変更指示データ、及び前記ブランチ・データを格納する格納部であって、前記ブランチ・データに対して、前記第1のクライアントから受信した変更指示データに対応する操作が反映される、前記格納部と、
前記第1のクライアントから受信した前記変更指示データに対応する操作列(以下、第1の操作列)と前記第2のクライアントから受信した前記変更指示データに対応する操作列(以下、第2の操作列)とをマージすることが可能であるかをオペレーショナル・トランスフォーメーション(以下、OT)を使用して判断する判断部と、
前記マージすることが可能であることに応じて、OTを使用して、前記第1の操作列を前記第2のユーザが共同編集中のデータに適用する適用部であって、前記第2のユーザが共同編集中の前記データは前記指定オブジェクトについての前記ブランチ・データの作成後におけるトランク・データであり、当該トランク・データは、前記共同編集における幹となるデータであり、及び、前記ブランチ・データは、前記トランク・データから分岐したものであり且つ前記指定オブジェクトのコピーである、前記適用部と
をさらに備えており、
前記指定オブジェクトについての前記ブランチ・データの作成後に、前記ブランチ・データ及び前記第1のクライアントからの前記変更指示データが前記記憶部中の第1のバッファに格納され、前記第2のクライアントからの前記変更指示データが前記記憶部中の第2のバッファに格納される、前記サーバ。 - 前記マージすることが可能であることが、
前記指定オブジェクトについてのブランチ・データの作成後における前記第2の操作列全てをOTで計算した結果であるHtが空であることである、請求項7に記載のサーバ。 - 前記マージすることが可能であることが、
前記指定オブジェクトについてのブランチ・データの作成後における前記第2の操作列全てをOTで計算した結果であるHtと、前記指定オブジェクトについてのブランチ・データの作成後における前記第1の操作列全てをOTで計算した結果であるHbとの距離がゼロであることである、請求項7に記載のサーバ。 - 前記適用の後に、前記ブランチ・データ及び前記第1のクライアントから受信した前記変更指示データを前記記憶部から削除するバッファ・コントロール部をさらに備えている、請求項7〜9のいずれか一項に記載のサーバ。
- 前記第1の操作列と前記第2の操作列との差分の大小を第1のユーザに示すためのユーザ・インタフェースに、当該差分の大小についてのデータを提供する提供部をさらに備えている、請求項7〜10のいずれか一項に記載のサーバ。
- 前記指定オブジェクトが指定される前に、前記第1のユーザによる前記オブジェクトの変更の指示を示す変更指示データを受信し、当該受信した変更指示データを用いて、前記第2のユーザが共同編集中の前記データを同期する、請求項7〜11のいずれか一項に記載のサーバ。
- 第1のユーザに関連付けられた第1のクライアント・コンピュータと第2のユーザに関連付けられた第2のクライアント・コンピュータとにネットワークを介して接続可能なサーバ・コンピュータに、請求項1〜6のいずれか一項に記載の方法の各ステップを実行させるコンピュータ・プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010124795A JP5710156B2 (ja) | 2010-05-31 | 2010-05-31 | コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム |
US13/118,647 US8639659B2 (en) | 2010-05-31 | 2011-05-31 | Method enabling collaborative editing of object in content data, computer system, and computer program product |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010124795A JP5710156B2 (ja) | 2010-05-31 | 2010-05-31 | コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2011253229A JP2011253229A (ja) | 2011-12-15 |
JP5710156B2 true JP5710156B2 (ja) | 2015-04-30 |
Family
ID=45023194
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010124795A Expired - Fee Related JP5710156B2 (ja) | 2010-05-31 | 2010-05-31 | コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US8639659B2 (ja) |
JP (1) | JP5710156B2 (ja) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106202021A (zh) * | 2010-11-02 | 2016-12-07 | 谷歌公司 | 由多个用户对博客的实时同步文档编辑 |
US11611595B2 (en) | 2011-05-06 | 2023-03-21 | David H. Sitrick | Systems and methodologies providing collaboration among a plurality of computing appliances, utilizing a plurality of areas of memory to store user input as associated with an associated computing appliance providing the input |
US10402485B2 (en) | 2011-05-06 | 2019-09-03 | David H. Sitrick | Systems and methodologies providing controlled collaboration among a plurality of users |
US9756125B2 (en) * | 2011-06-16 | 2017-09-05 | Telefonaktiebolaget Lm Ericsson (Publ) | Client and a server and methods thereof for data management relating to shared data storage |
KR101969583B1 (ko) | 2012-01-10 | 2019-08-20 | 삼성전자주식회사 | 컨텐츠 관리 방법과 장치 및 기록 매체 |
JP2013191003A (ja) * | 2012-03-14 | 2013-09-26 | Hitachi Solutions Ltd | ブランチリポジトリ管理システム |
US9367570B1 (en) * | 2012-04-09 | 2016-06-14 | Google Inc. | Ad hoc queryable JSON with audit trails |
US20150095822A1 (en) * | 2012-07-02 | 2015-04-02 | eScoreMusic, Inc. | Systems and methods for music display, collaboration, annotation, composition, and editing |
US9237170B2 (en) * | 2012-07-19 | 2016-01-12 | Box, Inc. | Data loss prevention (DLP) methods and architectures by a cloud service |
US20140082472A1 (en) * | 2012-09-14 | 2014-03-20 | David H. Sitrick | Systems And Methodologies For Event Processing Of Events For Edits Made Relative To A Presentation, Selecting A Selected Set Of Events; And Generating A Modified Presentation Of The Events In The Selected Set |
US20140082473A1 (en) * | 2012-09-14 | 2014-03-20 | David H. Sitrick | Systems And Methodologies Of Event Content Based Document Editing, Generating Of Respective Events Comprising Event Content, Then Defining A Selected Set Of Events, And Generating Of A Display Presentation Responsive To Processing Said Selected Set Of Events, For One To Multiple Users |
US9372833B2 (en) | 2012-09-14 | 2016-06-21 | David H. Sitrick | Systems and methodologies for document processing and interacting with a user, providing storing of events representative of document edits relative to a document; selection of a selected set of document edits; generating presentation data responsive to said selected set of documents edits and the stored events; and providing a display presentation responsive to the presentation data |
US9542379B1 (en) * | 2012-09-19 | 2017-01-10 | Amazon Technologies, Inc. | Synchronizing electronic publications between user devices |
US8909596B1 (en) * | 2013-01-08 | 2014-12-09 | Google Inc. | Operational-transform-compatible representation of 2-dimensional page layout data |
US9460073B2 (en) | 2013-02-27 | 2016-10-04 | Google Inc. | Systems and methods for mutations and operational transforms in a collaborative spreadsheet environment |
AU2015204414A1 (en) * | 2014-01-07 | 2016-06-23 | Attache Software Australia Pty Limited | Document and object manipulation |
US20160321226A1 (en) * | 2015-05-01 | 2016-11-03 | Microsoft Technology Licensing, Llc | Insertion of unsaved content via content channel |
JP6172245B2 (ja) * | 2015-11-27 | 2017-08-02 | 株式会社リコー | 情報処理システム、端末装置、プログラム及び画像付与方法 |
US10902185B1 (en) | 2015-12-30 | 2021-01-26 | Google Llc | Distributed collaborative storage with operational transformation |
CN105739859A (zh) * | 2016-01-25 | 2016-07-06 | 广东欧珀移动通信有限公司 | 一种阅读标记方法以及终端设备 |
WO2018026033A1 (ko) * | 2016-08-04 | 2018-02-08 | 주식회사 한글과컴퓨터 | 문서의 동시 편집을 지원하는 문서 협업 지원 장치 및 그 동작 방법 |
KR102247248B1 (ko) * | 2019-05-10 | 2021-05-03 | 주식회사 티맥스에이앤씨 | 공동 편집 파일을 공유하는 방법 및 서버 |
US11366583B1 (en) * | 2021-02-02 | 2022-06-21 | Bank Of America Corporation | Computer-to-computer users# edit and event transfer and synchronization |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07182369A (ja) * | 1993-12-24 | 1995-07-21 | Matsushita Electric Ind Co Ltd | 文書ファイル管理装置及び文書統合装置並びに文書管理システム |
US6240414B1 (en) * | 1997-09-28 | 2001-05-29 | Eisolutions, Inc. | Method of resolving data conflicts in a shared data environment |
JP3915331B2 (ja) | 1999-08-10 | 2007-05-16 | 富士ゼロックス株式会社 | 共有ドキュメントの編集装置及び編集方法 |
US6765498B1 (en) * | 2000-06-07 | 2004-07-20 | Honeywell International Inc. | Embedded digitization system |
JP2002140344A (ja) | 2000-10-31 | 2002-05-17 | Toshiba Corp | 文書管理方法および文書管理装置 |
KR100392667B1 (ko) | 2000-11-28 | 2003-07-23 | 주식회사 네스캡 | 유기전해질을 이용한 금속산화물 전기화학 의사커패시터 |
US6442483B1 (en) * | 2001-08-21 | 2002-08-27 | Arthur George Doglione | System and method for defining and creating surrogate addresses for township and range quarter sections |
US7774388B1 (en) * | 2001-08-31 | 2010-08-10 | Margaret Runchey | Model of everything with UR-URL combination identity-identifier-addressing-indexing method, means, and apparatus |
JP2007514709A (ja) | 2003-12-17 | 2007-06-07 | チバ スペシャルティ ケミカルズ ホールディング インコーポレーテッド | 化粧品用メロシアニン誘導体 |
US8250613B2 (en) * | 2004-04-29 | 2012-08-21 | Harris Corporation | Media asset management system for managing video news segments and associated methods |
US7743064B2 (en) * | 2004-04-29 | 2010-06-22 | Harris Corporation | Media asset management system for managing video segments from fixed-area security cameras and associated methods |
US8230467B2 (en) * | 2004-04-29 | 2012-07-24 | Harris Corporation | Media asset management system for managing video segments from an aerial sensor platform and associated method |
US20080263101A1 (en) | 2004-11-12 | 2008-10-23 | Justsystems Corporation | Data Processing Device and Data Processing Method |
US7991754B2 (en) * | 2005-12-05 | 2011-08-02 | Oneimage, Llc | System for integrated utilization of data to identify, characterize, and support successful farm and land use operations |
US8185567B2 (en) * | 2006-01-02 | 2012-05-22 | Telecommunication Systems, Inc. | Location aware content using presence information data formation with location object (PIDF-LO) |
KR100902336B1 (ko) | 2007-07-20 | 2009-06-12 | 한국전자통신연구원 | 동일채널 중계장치 및 그 방법 |
WO2009032710A2 (en) * | 2007-08-29 | 2009-03-12 | Nirvanix, Inc. | Filing system and method for data files stored in a distributed communications network |
GB2464948A (en) * | 2008-10-29 | 2010-05-05 | Quolos Limited | Online collaboration |
US20100146114A1 (en) * | 2008-12-04 | 2010-06-10 | Morris Robert P | Methods, Systems, And Computer Program Products For Accessing A Resource Based On Metadata Associated With A Location On A Map |
US20100146132A1 (en) * | 2008-12-04 | 2010-06-10 | Morris Robert P | Methods, Systems, And Computer Program Products For Accessing A Resource Having A Network Address Associated With A Location On A Map |
US20100257457A1 (en) * | 2009-04-07 | 2010-10-07 | De Goes John A | Real-time content collaboration |
US8346768B2 (en) * | 2009-04-30 | 2013-01-01 | Microsoft Corporation | Fast merge support for legacy documents |
US9068849B2 (en) * | 2009-05-04 | 2015-06-30 | Tomtom North America, Inc. | Method and system for reducing shape points in a geographic data information system |
US8886455B2 (en) * | 2009-12-17 | 2014-11-11 | Tomtom International B.V. | Navigation apparatus, audible instruction generation system and method of generating audible instructions |
US20110231483A1 (en) * | 2010-03-19 | 2011-09-22 | Neil Alexander Derraugh | System, method and computer program for delivery of targeted invitations to participate in market research, based on observed geospatial behaviour |
US20110231416A1 (en) * | 2010-03-22 | 2011-09-22 | Brandon Lee Goodchild Drake | Analyzing script for scanning mass internet content |
US8265871B1 (en) * | 2011-03-31 | 2012-09-11 | Google Inc. | Mobile record information entry and geotagging |
US20130013414A1 (en) * | 2011-07-05 | 2013-01-10 | Haff Maurice | Apparatus and method for direct discovery of digital content from observed physical media |
-
2010
- 2010-05-31 JP JP2010124795A patent/JP5710156B2/ja not_active Expired - Fee Related
-
2011
- 2011-05-31 US US13/118,647 patent/US8639659B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2011253229A (ja) | 2011-12-15 |
US20110296317A1 (en) | 2011-12-01 |
US8639659B2 (en) | 2014-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5710156B2 (ja) | コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム | |
US10915219B2 (en) | Tracking changes in collaborative authoring environment | |
US10554664B2 (en) | Activity feed for hosted files | |
JP6426740B2 (ja) | クラウド環境における共同ビデオ編集 | |
JP6159338B2 (ja) | 汎用サービスを通してのリアル・タイムのドキュメント・プレゼンテーション・データの同期 | |
JP6322140B2 (ja) | 協働遠隔アプリケーションの共用および注釈のための双方向デジタル表層を含む非連結アプリケーション拡張 | |
US7475075B2 (en) | Integration rich client views in server presentations | |
US11677697B2 (en) | Smart attachment of cloud-based files to communications | |
KR20140125361A (ko) | 웹 애플리케이션에서의 협업 통신 기법 | |
KR20140038399A (ko) | 문서 기반의 맥락적 통신 | |
US10033676B2 (en) | System and method for annotating a transcript of an ongoing group chat session | |
US9046982B2 (en) | Representing a graphical user interface using a topic tree structure | |
CA2799617A1 (en) | Role-based presentation views | |
US10685169B2 (en) | Messaging application with presentation window | |
KR102587631B1 (ko) | 컴퓨터 애플리케이션 소프트웨어에서 동시 협업 실행취소 작업을 위한 방법 및 시스템 | |
TW201537477A (zh) | 筆記本應用程式中之呈現式歷史資訊之使用 | |
US8413074B2 (en) | Mechanism for collaboratively exchanging navigation information in a distributed document review | |
US20170220232A1 (en) | Smart slides in a presentation program | |
Wang | Powermeeting: gwt-based synchronous groupware | |
US20240143266A1 (en) | Shared screen tools for collaboration |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20130218 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20130924 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20131112 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20131210 Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20131210 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20140801 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20141030 Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20141030 |
|
TRDD | Decision of grant or rejection written | ||
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20150217 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20150217 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20150217 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20150304 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5710156 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |