(57)【特許請求の範囲】
【請求項１】
リモートファイルシステムの状態を決定することであって、前記リモートファイルシステムの状態は、１または複数の分散コンピュータ資源に含まれている１または複数のリモートフォルダハッシュ値を含み、前記リモートフォルダハッシュ値は、前記リモートファイルシステムの、共有サブフォルダのリモートインスタンスに関連付けられたサブフォルダハッシュ、共有ファイルのリモートインスタンスに関連付けられたファイルハッシュ、共有サブファイルのリモートインスタンスに関連付けられたサブファイルハッシュ、共有ショートカットのリモートインスタンスに関連付けられたショートカットハッシュ、または、これらの組み合わせの内の少なくとも１つに基づいて決定される、前記リモートファイルシステムの状態を決定することと、
ローカルファイルシステムの状態を決定することであって、前記ローカルファイルシステムの状態は、１または複数のクライアントコンピュータ装置に含まれている１または複数のローカルフォルダハッシュ値を含み、前記ローカルフォルダハッシュ値は、前記ローカルファイルシステムの共有サブフォルダの、ローカルインスタンスに関連付けられたサブフォルダハッシュ、共有ファイルのローカルインスタンスに関連付けられたファイルハッシュ、共有サブファイルのローカルインスタンスに関連付けられたサブファイルハッシュ、共有ショートカットのローカルインスタンスに関連付けられたショートカットハッシュ、または、これらの組み合わせの内の少なくとも１つに基づいて決定される、前記ローカルファイルシステムの状態を決定することと、
前記リモートファイルシステムの状態と前記ローカルファイルシステムの状態を比較して、前記リモートファイルシステムの状態内の前記リモートフォルダハッシュ値と前記ローカルファイルシステムの状態内の前記ローカルフォルダハッシュ値とのあらゆる相違を決定することと、
前記ローカルファイルシステムと前記リモートファイルシステム内の、前記リモートフォルダハッシュ値が前記ローカルフォルダハッシュ値と異なる任意の共有フォルダの少なくとも一部を相互に同期することと、
を含む、方法。
【請求項２】
一致しないファイルハッシュ対は、特定の共有ファイルのリモートインスタンスのリモートファイルハッシュと異なる前記特定の共有ファイルのローカルインスタンスのローカルファイルハッシュを含む、請求項１に記載の方法。
【請求項３】
前記一致しないファイルハッシュ対を有する前記特定の共有ファイルを同期すること、
をさらに含む、請求項２に記載の方法。
【請求項４】
前記特定の共有ファイルの前記ローカルインスタンスのタイムスタンプを決定することと、
前記特定の共有ファイルの前記リモートインスタンスのタイムスタンプを決定することと、
前記特定の共有ファイルの前記ローカルインスタンスと前記特定の共有ファイルの前記リモートインスタンスのうちの直近のインスタンスに、前記特定の共有ファイルを同期することと、
をさらに含む、請求項２または３に記載の方法。
【請求項５】
特定の共有ファイルが一致しないファイルハッシュ対を含むか否かを決定することをさらに含み、
前記一致しないファイルハッシュ対は、前記特定の共有ファイルのローカルインスタンスの欠けているローカルファイルハッシュ、または、前記特定の共有ファイルのリモートインスタンスの欠けているリモートファイルハッシュを含む、
請求項１に記載の方法。
【請求項６】
１または複数の分散コンピュータ資源に含まれている１または複数のリモートファイルシステムの状態を決定することと、
１または複数のクライアントコンピュータ装置に含まれている１または複数のローカルファイルシステムの状態を決定することと、
前記リモートファイルシステムの状態と前記ローカルファイルシステムの状態を比較して、共有フォルダのリモートインスタンス、共有サブフォルダのリモートインスタンス、または、共有ファイルのリモートインスタンスが、前記共有フォルダの対応するローカルインスタンス、共有サブフォルダの対応するローカルインスタンス、または、前記共有ファイルの対応するローカルインスタンスのローカルファイルシステム属性と異なるリモートファイルシステム属性を含むか否かを決定することと、
前記リモートファイルシステム属性が前記ローカルファイルシステム属性と異なる前記共有フォルダ、前記共有サブフォルダ、または、前記共有ファイルを相互に同期することと、
を含む、方法。
【請求項７】
前記リモートファイルシステム属性は、前記共有フォルダの前記リモートインスタンスに割り当てられたリモートフォルダ値、前記共有サブフォルダの前記リモートインスタンスに割り当てられたリモートサブフォルダ値、または、前記共有ファイルの前記リモートインスタンスに割り当てられたリモートファイル値を含む、請求項６に記載の方法。
【請求項８】
前記リモートフォルダ値は、リモートフォルダハッシュを含み、前記リモートサブフォルダ値は、リモートサブフォルダハッシュを含み、前記リモートファイル値は、リモートファイルハッシュを含む、請求項７に記載の方法。
【請求項９】
前記リモートフォルダハッシュ、前記リモートサブフォルダハッシュ、及び、前記リモートファイルハッシュは、前記リモートファイルシステムのリモートハッシュテーブルに基づいて決定される、請求項８に記載の方法。
【請求項１０】
前記ローカルファイルシステム属性は、前記共有フォルダの前記ローカルインスタンスに割り当てられたローカルフォルダ値、前記共有サブフォルダの前記ローカルインスタンスに割り当てられたローカルサブフォルダ値、または、前記共有ファイルの前記ローカルインスタンスに割り当てられたローカルファイル値を含む、請求項６に記載の方法。
【請求項１１】
前記ローカルフォルダ値は、ローカルフォルダハッシュを含み、前記ローカルサブフォルダ値は、ローカルサブフォルダハッシュを含み、前記ローカルファイル値は、ローカルファイルハッシュを含む、請求項１０に記載の方法。
【請求項１２】
前記ローカルフォルダハッシュ、前記ローカルサブフォルダハッシュ、及び、前記ローカルファイルハッシュは、前記ローカルファイルシステムのローカルハッシュテーブルに基づいて決定される、請求項１１に記載の方法。
【請求項１３】
共有フォルダ及び共有ファイル同期システムであって、
同期モジュールとファイルシステムとを有する１つまたは複数のコンピュータ可読媒体と、
前記コンピュータ可読媒体に動作可能に結合された処理ユニットであって、前記同期モジュールを実行するように適合された前記処理ユニットと、
を備え、前記同期モジュールは、
リモートファイルシステム内の共有データ構造のリモートインスタンスに関連付けられたリモートファイルシステム属性を決定し、
ローカルファイルシステム内の共有データ構造のローカルインスタンスに関連付けられたローカルファイルシステム属性を決定し、
前記リモートファイルシステム属性が前記ローカルファイルシステム属性と異なるか否かを決定し、且つ、
前記共有データ構造内のコンテンツが前記リモートファイルシステムと前記ローカルファイルシステムで同じになるように、前記リモートファイルシステム内の前記共有データ構造の前記リモートインスタンスを、前記ローカルファイルシステム内の前記共有データ構造の前記ローカルインスタンスと選択的に同期する、
ように構成される、前記共有フォルダ及び共有ファイル同期システム。
【請求項１４】
前記共有データ構造は、共有フォルダ、共有サブフォルダ、共有ファイル、または、これらの組み合わせを含む、請求項１３に記載のシステム。
【請求項１５】
前記リモートファイルシステム属性は、前記リモートファイルシステムに関連付けられたリモートハッシュテーブルから検索された、リモートフォルダハッシュ、リモートサブフォルダハッシュ、または、リモートファイルハッシュを含み、
前記ローカルファイルシステム属性は、前記ローカルファイルシステムに関連付けられたローカルハッシュテーブルから検索された、ローカルフォルダハッシュ、ローカルサブフォルダハッシュ、または、ローカルファイルハッシュを含む、請求項１３に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
クラウドコンピューティングが増加したので、リモートコンピュータまたはリモートコンピュータアレイに関連付けられたリモートメモリ内のファイルやフォルダをユーザがバックアップする能力が劇的に向上した。一定の状況においては、リモートメモリ内のファイルとフォルダへのアクセスが、他のコンピュータ装置を介して追加のユーザに許可されてよい。従って、ファイルとフォルダは、リモートメモリを介して、複数のユーザやユーザ装置に亘って共有され得る。
【０００２】
さらに、個々のユーザは、リモートに記憶された特定のファイルのコピーをダウンロードし、その特定のファイルを編集し、編集したファイルをリモートメモリにアップロードしてよい。次に、編集されたファイルは、複数のユーザと、その複数のユーザの特定のコンピュータ装置を介して共有されてよい。
【０００３】
添付の図面を参照して詳細な説明を行う。図中、参照番号の左端の数字（複数可）は、参照番号が最初に現れる図を示す。異なる図面中の同じ参照番号は、類似または同じ項目を指す。
【図面の簡単な説明】
【０００４】
【図１】共有フォルダ及び共有ファイルを同期するシステムを示す図である。
【図２】ファイルシステムの例を示す図である。
【図３】フォルダの例を示す図である。
【図４】ファイルとマスターハッシュリストをリモートファイルシステムにアップロードするプロセスの例を示すフロー図である。
【図５】共有フォルダ及び共有ファイルを同期するプロセス例のフロー図の第１の部分を示す図である。
【図６】共有フォルダ及び共有ファイルを同期するプロセス例のフロー図の第２の部分を示す図である。
【図７】ローカルファイルシステムからファイルを同期するプロセス例を示すフロー図である。
【図８】リモートファイルシステムからファイルを同期するプロセス例を示すフロー図である。
【図９】フォルダツリーとサブフォルダツリーをトラバースして、同期を要するファイル変更を突き止めるプロセス例を示すフロー図である。
【発明を実施するための形態】
【０００５】
リモートファイルシステムと多くのローカルファイルシステムの間で、共有フォルダ及び共有ファイルを同期するシステムとプロセスを本明細書に記載する。特定の態様においては、現在の共有フォルダ及び共有ファイル同期システムは、１つまたは複数のローカルファイルシステムの現在の状態と、リモートファイルシステムの現在の状態を決定できる状態ベースのシステムである。その後、各ローカルファイルシステムの現在の状態は、リモートファイルシステムの現在の状態と比較されて、相違が存在するか否かを決定できる。相違が存在する場合、共有フォルダ及び共有ファイル同期システムは、特定のローカルファイルシステム、リモートファイルシステム、または、その両方で、これらの各ファイルシステムが、同じコンテンツを含み、互いに複製であるために必要となり得るコンテンツの変更を決定できる。開示の技術の一部の実施形態は、例えば、文書コラボレーション環境で使用できる。
【０００６】
ローカルファイルシステムとリモートファイルシステムは、特定の共有データ構造に記憶されたコンテンツを含み得る。共有データ構造は、共有フォルダ、共有サブフォルダ、共有ファイル、共有サブレベルファイル、共有ショートカット、または、これらの組み合わせを含み得る。各共有フォルダは、共有フォルダのローカルインスタンスと共有フォルダのリモートインスタンスを含むことができ、それらは、同期を行った後、実質的に同じであり、同じコンテンツを含むべきである。各共有サブフォルダは、共有サブフォルダのローカルインスタンスと共有サブフォルダのリモートインスタンスを含むことができ、それらは、同期を行った後、実質的に同じであり、同じコンテンツを含むべきである。さらに、各共有ファイルは、共有ファイルのローカルインスタンスと共有ファイルのリモートインスタンスを含むことができ、それらは、同期を行った後、実質的に同じであり、同じコンテンツまたはデータを含むべきである。さらに、各共有サブレベルファイルは、共有サブレベルファイルのローカルインスタンスと共有サブレベルファイルのリモートインスタンスを含むことができ、それらは、同期を行った後、実質的に同じであり、同じコンテンツまたはデータを含むべきである。最後に、さらに、各共有ショートカットは、共有ショートカットのローカルインスタンスと共有ショートカットのリモートインスタンスを含むことができ、それらは、同期を行った後、実質的に同じであり、同じコンテンツまたはデータを含むべきである。
【０００７】
共有フォルダ及び共有ファイル同期システムは、各ユーザまたはクライアントのコンピュータ装置にローカルにインストールされたローカル同期モジュールと、リモートまたは分散コンピュータ資源のリモート同期モジュールとを利用してよい。ローカル同期モジュール及びリモート同期モジュールは、各ローカルファイルシステムとリモートファイルシステム間で共有フォルダ及び共有ファイル全体のファイル編集が、最新、且つ、同期された状態を保つよう、各ローカルファイルシステム及びリモートファイルシステムの状態に関する情報を交換するために互いに通信できる。
【０００８】
一態様においては、特定の共有ファイル、または、そのコンテンツが、更新、編集、削除、または、他の方法で、変更されているか否かを決定するために、特定の共有フォルダ及び共有サブフォルダに記憶された実際のコンテンツをモニタする代わりに、システムは、各共有フォルダ、共有サブフォルダ、共有ファイル、共有サブレベルファイル、及び、共有ショートカットに関連付けられた属性をモニタすることができる。属性は、特定のフォルダ、特定のサブフォルダ、特定のファイル、特定のサブレベルファイル、または、特定のショートカットに関連付けられた一意の識別子であってよい。フォルダ及びサブフォルダ内に記憶された特定のファイル、サブレベルファイル、及び、ショートカットのコンテンツが変更されると、属性を再計算し、マスターリストに記録できる。
【０００９】
一般に、共有フォルダ、共有サブフォルダ、共有ファイル、共有サブレベルファイル、及び、共有ショートカットを同期する方法は、リモートファイルシステム状態を決定することと、ローカルファイルシステム状態を決定することとを含み得る。さらに、方法は、リモートファイルシステム状態とローカルファイルシステム状態を比較して、共有フォルダのリモートインスタンス、共有サブフォルダのリモートインスタンス、共有ファイルのリモートインスタンス、共有サブレベルファイルのリモートインスタンス、または、共有ショートカットのリモートインスタンスが、共有フォルダの対応するローカルインスタンス、共有サブフォルダの対応するローカルインスタンス、共有ファイルの対応するローカルインスタンス、ローカル共有サブレベルファイルの対応するインスタンス、または、ローカル共有ショートカットの対応するインスタンスのローカルファイルシステム属性と異なるリモートファイルシステム属性を含むか否かを決定することを含み得る。リモートファイルシステム属性がローカルファイルシステム属性と異なる共有フォルダ、共有サブフォルダ、共有ファイル、共有サブレベルファイル、または、共有ショートカットは、例えば、より詳細に以下に記載するように、同期することができる。
【００１０】
特定の態様においては、リモートファイルシステム属性は、共有フォルダのリモートインスタンスに割り当てられたリモートフォルダ値、共有サブフォルダのリモートインスタンスに割り当てられたリモートサブフォルダ値、共有ファイルのリモートインスタンスに割り当てられたリモートファイル値、共有サブレベルファイルのリモートインスタンスに割り当てられたリモートファイル値（ｒｅｍｏｔｅ  ｆｉｌｅ  ｖａｌｕｅ）、または、共有ショートカットのリモートインスタンスに割り当てられたリモートファイル値（ｒｅｍｏｔｅ  ｆｉｌｅ  ｖａｌｕｅ）を含み得る。より詳細には、リモートフォルダ値は、リモートフォルダハッシュを含むことができ、リモートサブフォルダ値は、リモートサブフォルダハッシュを含むことができ、リモートファイル値は、リモートファイルハッシュを含むことができ、リモートサブレベルファイル値は、リモートサブレベルファイルハッシュを含むことができ、リモートショートカット値は、リモートショートカットハッシュを含むことができる。リモートフォルダハッシュ、リモートサブフォルダハッシュ、リモートファイルハッシュ、リモートサブレベルファイルハッシュ、及び、リモートショートカットハッシュは、リモートファイルシステムのリモートハッシュテーブルに基づいて決定することができる。
【００１１】
別の態様においては、ローカルファイルシステム属性は、共有フォルダのローカルインスタンスに割り当てられたローカルフォルダ値、共有サブフォルダのローカルインスタンスに割り当てられたローカルサブフォルダ値、共有ファイルのローカルインスタンスに割り当てられたローカルファイル値、共有サブレベルファイルのローカルインスタンスに割り当てられたローカルサブレベルファイル値、または、共有ショートカットのローカルインスタンスに割り当てられたローカルショートカット値を含み得る。さらに、ローカルフォルダ値は、ローカルフォルダハッシュを含むことができ、ローカルサブフォルダ値は、ローカルサブフォルダハッシュを含むことができ、ローカルファイル値は、ローカルファイルハッシュを含むことができ、ローカルサブレベルファイル値は、ローカルサブレベルファイルハッシュを含むことができ、ローカルショートカット値は、ローカルショートカットハッシュを含むことができる。ローカルフォルダハッシュ、ローカルサブフォルダハッシュ、ローカルファイルハッシュ、ローカルサブレベルファイルハッシュ、及び、ローカルショートカットハッシュは、ローカルファイルシステムのローカルハッシュテーブルに基づいて決定できる。
【００１２】
例えば、一定のデータ管理システムは、特定のファイルがメモリ内のどこに記憶されるかを追跡するために、ハッシュテーブルまたはハッシュマップを利用できる。各ハッシュは、メモリ内の特定のファイルの位置を定める。フォルダは、フォルダハッシュを含み得る。サブフォルダは、サブフォルダハッシュを含み得る。さらに、ファイルは、ファイルハッシュを含み得る。サブレベルファイルは、サブレベルファイルハッシュを含むことができ、ショートカットは、ショートカットハッシュを含むことができる。
【００１３】
サブフォルダハッシュは、サブフォルダに記憶されたファイルに関連付けられたファイルハッシュ、サブフォルダ内に記憶された任意のサブレベルファイルに関連付けられたサブレベルファイルハッシュ、及び、サブフォルダ内に記憶された任意のショートカットに関連付けられたショートカットファイルハッシュの関数であってよい。フォルダハッシュは、フォルダ内のサブフォルダに関連付けられたサブフォルダハッシュ、サブフォルダ内のファイルに関連付けられたファイルハッシュ、サブフォルダ内の（もしあれば）サブレベルファイルのサブレベルファイルハッシュ、サブフォルダ内の（もしあれば）ショートカットのショートカットファイルハッシュ、及び、フォルダ内のファイルに関連付けられたファイルハッシュの関数であってよい。ファイルハッシュ、サブレベルファイルハッシュ、及び／または、ショートカットハッシュの変更はいずれも、ファイル、サブレベルファイル、及び／または、ショートカットが記憶されているサブフォルダに割り当てられたサブフォルダハッシュを変更する。次に、そのサブフォルダが存在するフォルダに割り当てられたフォルダハッシュが、新しいサブフォルダハッシュに応答して、変わる。
【００１４】
従って、各フォルダ、サブフォルダ、ファイル、サブレベルファイル、及び／または、ショートカットに計算して割り当てられたハッシュの状態をモニタすることによって、共有フォルダ及び共有ファイル同期システムは、フォルダ、サブフォルダ、ファイル、サブレベルファイル、及び／または、ショートカットのコンテンツを実際にモニタする必要なく、フォルダ、サブフォルダ、ファイル、サブレベルファイル、ショートカット、または、これらの組み合わせのうちのどれで、データが変更されたかを素早く確認することができる。例えば、同期モジュール、例えば、ローカル同期モジュール、リモート同期モジュール、または、これらの組み合わせは、特定のファイルシステムに関して、現在のハッシュリストを直近のハッシュリストと比較することができる。
【００１５】
同期モジュールは、現在のフォルダハッシュを素早くトラバースして、どのフォルダハッシュが各フォルダの直近に記録されたフォルダハッシュと異なるかを、もし異なっていれば、決定し得る。異なるフォルダハッシュはいずれも、フォルダ内の少なくとも１つのファイル、少なくとも１つのサブレベルファイル、若しくは、少なくとも１つのショートカット、または、フォルダのサブフォルダ内の少なくとも１つのファイル、少なくとも１つのサブレベルファイル、若しくは、少なくとも１つのショートカットが、変更、例えば、更新、編集、削除、作成等されたことを、同期モジュールに示す。マスターハッシュリストにあるフォルダハッシュとは異なるフォルダハッシュを有する任意のフォルダに関して、同期モジュールは、フォルダ内に記憶されたファイル、サブレベルファイル、及び、ショートカットに関連付けられたファイルハッシュ、サブレベルファイルハッシュ、または、ショートカットハッシュをトラバースして、ファイル、サブレベルファイル、及び／または、ショートカットのどれが変更されたかを決定してよい。
【００１６】
さらに、新しい、または、異なるフォルダハッシュを有する各フォルダに関して、同期モジュールは、フォルダ内のサブフォルダに関連付けられたサブフォルダハッシュをトラバースして、どのサブフォルダが、変更されたファイル、サブレベルファイル、及び／または、ショートカットを含むか、もしあれば、決定してよい。その後、異なるサブフォルダハッシュを有する任意のサブフォルダに関して、同期モジュールは、サブフォルダ内のどのファイル、サブレベルファイル、及び／または、ショートカットが異なるハッシュを有するかを決定するために、サブフォルダ内に記憶されたファイル、サブレベルファイルハッシュ（ｓｕｂ−ｌｅｖｅｌ  ｆｉｌｅ  ｈａｓｈｅｓ）、及び、ショートカットに関連付けられたファイルハッシュ、サブレベルファイルハッシュ、及び／または、ショートカットハッシュをトラバースしてよい。異なるハッシュを含むファイル、サブレベルファイル、及び／または、ショートカットはいずれも、変更されたとみなされて、その特定のファイル、サブレベルファイル、及び／または、ショートカットは、直近のアクションを含むように同期される。アクションは、ファイルまたはファイルのコンテンツの更新、編集、追加、削除、または、任意の他の変更を含み得る。
【００１７】
本明細書に記載の１つまたは複数の例は、複数のローカルファイルシステムと１つまたは複数のリモートファイルシステムに亘って共有フォルダ及び共有ファイルを同期するプロセスを提供する。様々な例において、処理ユニットまたはユニットは、モジュールまたはＡＰＩからのプログラミングを介して、本明細書に記載する技術またはプロセスを行うように構成されてよい。処理ユニットまたはユニットは、ＧＰＵ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、別のクラスのデジタル信号プロセッサ（ＤＳＰ）、または、ある例においては、ＣＰＵによって駆動され得る他のハードウェア論理コンポーネントのうちの１つまたは複数を含んでよい。例えば、使用可能なハードウェア論理コンポーネントの例示の種類には、特定用途向け集積回路（ＡＳＩＣ）、特定用途向け標準製品（ＡＳＳＰ）、システムオンチップシステム（ＳＯＣ）、結合プログラム可能論理回路（ＣＰＬＤ）等を含むが、これらに限らない。
【００１８】
一般に、共有フォルダ及び共有ファイル同期システムは、ローカル同期モジュール及びローカルファイルシステムを有する１つまたは複数のローカルコンピュータ可読媒体と、リモート同期モジュール及びリモートファイルシステムを有する１つまたは複数のリモートコンピュータ可読媒体とを含み得る。さらに、共有フォルダ及び共有ファイル同期システムは、ローカルコンピュータ可読媒体、リモートコンピュータ可読媒体、または、これらの組み合わせに動作可能に結合された処理ユニットを含み得る。処理ユニットは、ローカル同期モジュール、リモート同期モジュール、または、これらの組み合わせを実行するように適合することができる。
【００１９】
さらに、ローカル同期モジュール、リモート同期モジュール、または、これらの組み合わせは、リモートファイルシステム内の共有データ構造のリモートインスタンスに関連付けられたリモートファイルシステム属性を決定し、且つ、ローカルファイルシステム内の共有データ構造のローカルインスタンスに関連付けられたローカルファイルシステム属性を決定するように構成できる。ローカル同期モジュール、リモート同期モジュール、または、これらの組み合わせは、リモートファイルシステム属性がローカルファイルシステム属性と異なるか否かを決定し、且つ、共有データ構造内のコンテンツがリモートファイルシステムとローカルファイルシステムで同じになるように、リモートファイルシステム内の共有データ構造のリモートインスタンスとローカルファイルシステム内の共有データ構造のローカルインスタンスを選択的に同期するようにも構成できる。
【００２０】
上記のように、共有データ構造は、共有フォルダ、共有サブフォルダ、共有ファイル、共有サブレベルファイル、共有ショートカット、または、これらの組み合わせを含み得る。リモートファイルシステム属性は、リモートファイルシステムに関連付けられたリモートハッシュテーブルから検索されたリモートフォルダハッシュ、リモートサブフォルダハッシュ、リモートファイルハッシュ、リモートサブレベルファイルハッシュ、または、リモートショートカットハッシュを含み得る。さらに、ローカルファイルシステム属性は、ローカルファイルシステムに関連付けられたローカルハッシュテーブルから検索されたローカルフォルダハッシュ、ローカルサブフォルダハッシュ、ローカルファイルハッシュ、ローカルサブレベルファイルハッシュ、または、ローカルショートカットハッシュを含み得る。
【００２１】
図１を参照すると、共有フォルダ及び共有ファイル同期システムの詳細な例が、一般的に１００で示されている。示すように、共有フォルダ及び共有ファイル同期システム１００は、少なくとも１つのネットワーク１０２を含み得る。例えば、ネットワーク１０２は、インターネット等のパブリックネットワーク、組織及び／若しくは個人のイントラネット等のプライベートネットワーク、または、プライベートネットワーク及びパブリックネットワークの組み合わせ、を含み得る。ネットワーク１０２は、任意の種類の有線ネットワーク、無線ネットワーク、または、これらの組み合わせも含み得る。さらに、無線ネットワークは、例えば、衛星ネットワーク、セルラーネットワーク（例えば、３Ｇ、４Ｇ等）、ＷｉＦｉネットワーク、ＷｉＭａｘネットワーク、他の無線ネットワーク、または、これらの組み合わせを含み得る。さらに、有線ネットワークは、Ｃａｔ−５ケーブル、ツイストペア電話線、同軸ケーブル、光ファイバケーブル、または、これらの組み合わせを介して接続されたイーサネット（登録商標）を含み得る。別の実施態様においては、ネットワーク１０２は、広域ネットワーク（ＷＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、または、これらの組み合わせであってよい。さらに、ネットワーク１０２は、ＰＯＴＳ（ｐｌａｉｎ−ｏｌｄ  ｔｅｌｅｐｈｏｎｅ  ｓｅｒｖｉｃｅ）ネットワークを含み得る。
【００２２】
ネットワーク１０２は、インターネットプロトコル（ＩＰ）、伝送制御プロトコル（ＴＣＰ）、ユーザデータグラムプロトコル（ＵＤＰ）、または、他の種類のプロトコル等、パケットベース及び／またはデータグラムベースのプロトコルを含む通信プロトコルを利用してよい。さらに、ネットワーク１０２は、ネットワーク通信を容易にし、及び／または、スイッチ、ルータ、ゲートウェイ、アクセスポイント、ファイアウォール、基地局、リピータ、基幹装置等のネットワークのハードウェアの基礎を形成する多くの装置も含み得る。
【００２３】
ある例においては、ネットワーク１０２は、さらに、無線アクセスポイント（ＷＡＰ）等、無線ネットワークへの接続を可能にする１つまたは複数の装置を備えてよい。追加の例は、電気電子技術者協会（ＩＥＥＥ）８０２．１１規格（例えば、８０２．１１ｇ、８０２．１１ｎ等）及び他の規格をサポートするＷＡＰを含む、様々な電磁周波数（例えば、無線周波数)を介してデータを送受信するＷＡＰを通して接続性を支援する。
【００２４】
図１にさらに示すように、共有フォルダ及び共有ファイル同期システム１００は、第１の分散コンピュータ資源１０４、第２の分散資源１０６、及び、第Ｎの分散資源１０８を備えてもよく、これらは、ネットワーク１０２に接続されている。様々な例において、分散コンピュータ資源１０４、１０６、１０８は、１つまたは複数のコンピュータ装置を含んでよく、コンピュータ装置は、資源の共有、負荷の均衡化、性能向上、フェイルオーバーサポートや冗長性の提供、または、他の目的のために、クラスタで、または、他のグループ構成で動作する。分散コンピュータ資源１０４、１０６、１０８は、従来のサーバ型装置、デスクトップコンピュータ型装置、モバイル型装置、特定用途型装置、組み込み型装置、及び／または、ウェアラブル型装置等、様々なカテゴリまたはクラスの装置に属し得るコンピュータ装置を含んでもよい。
【００２５】
従って、分散コンピュータ資源１０４、１０６、１０８は、多様な装置型を含んでよく、特定の型の装置に限らない。分散コンピュータ資源１０４、１０６、１０８は、デスクトップコンピュータ、サーバコンピュータ、ウェブサーバコンピュータ、パーソナルコンピュータ、モバイルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、ウェアラブルコンピュータ、埋め込みコンピュータ装置、通信機器、自動車用コンピュータ、ネットワーク対応テレビ、シンクライアント、端末、パーソナルデジタルアシスタント（ＰＤＡ）、ゲームコンソール、ゲーム装置、ワークステーション、メディアプレーヤ、パーソナルビデオレコーダ（ＰＶＲ）、セットトップボックス、カメラ、コンピュータ装置に含まれる内蔵コンポーネント、電気器具、または、任意の他の種類のコンピュータ装置を表してよいが、これらに限らない。
【００２６】
図１は、第Ｎの分散コンピュータ資源１０８に関する詳細をさらに示す。第１の分散コンピュータ資源１０４及び第２のコンピュータ資源１０６は、第Ｎの分散コンピュータ資源１０８と実質的に同じように構成されてよく、第Ｎの分散コンピュータ資源１０８に関して本明細書に記載するコンポーネントの全てまたはいずれかの組み合わせを含み得ることは、理解できる。
【００２７】
図に示すように、第Ｎの分散コンピュータ資源１０８は、任意のコンピュータ装置であってよく、第Ｎの分散コンピュータ資源１０８は、例えば、バス１１４を介して、コンピュータ可読媒体１１２に動作可能または電気的に接続された１つまたは複数の処理ユニット１１０を含み得る。バス１１４は、システムバス、データバス、アドレスバス、ＰＣＩバス、Ｍｉｎｉ−ＰＣＩバス、または、任意の様々なローカル、周辺機器用、及び／もしくは、独立バス、のうちの１つまたは複数を含んでよい。
【００２８】
第Ｎの分散コンピュータ資源１０８は、１つまたは複数のネットワークインタフェース１１６も含んでよく、ネットワークインタフェース１１６は、ネットワーク１０２を介して第Ｎの分散コンピュータ資源１０８と、他のコンピュータ資源若しくは装置との間の通信を可能にする。ネットワークインタフェース１１６は、１つまたは複数のネットワークインタフェースコントローラ（ＮＩＣ）、または、ネットワークを介して通信を送受信する他の種類の送受信装置を含んでよい。特定の態様においては、図１に示すように、実行可能命令をコンピュータ可読媒体１１２に記憶することができ、この実行可能命令は、例えば、オペレーティングシステム１１８、リモート共有フォルダ及び共有ファイル同期モジュール１２０、及び、１つまたは複数の処理ユニット１１０によってロード、実行可能な他のモジュール、プログラム、若しくは、アプリケーションを含んでよい。
【００２９】
あるいは、または、さらに、本明細書に記載の機能は、アクセラレータ等の１つまたは複数のハードウェア論理コンポーネントによって、少なくとも部分的に実行されてよい。例えば、使用可能なハードウェア論理コンポーネントの例示の種類は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、特定用途向け標準製品（ＡＳＳＰ）、システムオンチップシステム（ＳＯＣ）、結合プログラム論理回路（ＣＰＬＤ）等を含むが、これらに限らない。例えば、アクセラレータは、ＦＰＧＡファブリックに埋め込まれたＣＰＵコアを含むＺＹＬＥＸまたはＡＬＴＥＲＡ製等のハイブリッド装置を表してよい。
【００３０】
第Ｎの分散コンピュータ資源１０８のコンピュータ可読媒体１１２は、複数のフォルダ、サブフォルダ、ファイル、または、これらの組み合わせを記憶し得るリモートファイルシステム１２２も含んでよい、または、リモートファイルシステム１２２で仕切られてよい。複数のフォルダ、サブフォルダ、及び、ファイルは、複数の共有フォルダ、共有サブフォルダ、共有ファイル、共有サブレベルファイル、及び、共有ショートカットを含み得る。より詳細には、複数の共有フォルダ、共有サブフォルダ、共有ファイル、共有サブレベルファイル、及び、共有ショートカットは、共有フォルダの複数のリモートインスタンス、共有サブフォルダの複数のリモートインスタンス、及び、共有ファイルの複数のリモートインスタンスを含み得る。
【００３１】
詳細には、リモートファイルシステム１２２は、暗号学的ハッシュ関数、または、他のハッシュ関数を利用して、リモートファイルシステム１２２内に記憶されたファイル及びデータを記憶、検索してよい。ハッシュ関数は、ＭＤ２、ＭＤ４、ＭＤ５、ＭＤ６、ＳＨＡ−０、ＳＨＡ−１、ＳＨＡ−２、ＳＨＡ−３、または、これらの組み合わせ等のＭｅｒｋｌｅ‐Ｄａｍｇaｒｄハッシュ関数の導関数を含んでよい。別の態様においては、ハッシュ関数は、ＲＩＰＥＭＤ（ｒａｃｅ  ｉｎｔｅｇｒｉｔｙ  ｐｒｉｍｉｔｉｖｅｓ  ｅｖａｌｕａｔｉｏｎ  ｍｅｓｓａｇｅ  ｄｉｇｅｓt）ハッシュ関数、ＲＩＰＥＭＤ‐１６０、または、これらの組み合わせを含んでよい。図２及び図３は、以下に記載のように、リモートファイルシステム１２２内で発見され得るファイルシステムの例とフォルダの例に関して、より詳しく示す。
【００３２】
図１は、コンピュータ可読媒体１１２が、コンピュータ可読媒体１１２に記憶されたマスターハッシュリスト１２４を含み得ることをさらに示す。マスターハッシュリスト１２４は、本明細書に記載のように、フォルダハッシュ、サブフォルダハッシュ、及び、ファイルハッシュのリストを含むことができ、フォルダ、サブフォルダ、及び／または、ファイル内のコンテンツが最後にマスターハッシュリストを計算、記録してから変化したか否かを決定するために、マスターハッシュリスト１２４を用いて、フォルダハッシュ、サブフォルダハッシュ、及び、ファイルハッシュの現在の状態をマスターハッシュリスト１２４と比較してよい。
【００３３】
簡単にするために、第Ｎの分散コンピュータ資源１０８等のコンピュータ装置と一般的に関連し得る、または、含まれ得る他のコンポーネントまたは特徴は、図１の第Ｎの分散コンピュータ資源１０８の描写から省略されている。これら他のコンポーネントまたは特徴は、Ａ／Ｃ電源、Ｄ／Ｃ電源、様々なコネクタポート、様々なコード、様々なＬＥＤインジケータ、スピーカ、ハウジング、シャシ、ファン、ヒートシンク、入力装置、出力装置、表示装置等を含み得るが、これらに限らない。
【００３４】
図１は、共有フォルダ及び共有ファイル同期システム１００が、第１のクライアントコンピュータ装置１３０、第２のクライアントコンピュータ装置１３２、及び、第Ｎのクライアントコンピュータ装置１３４を含み得ることをさらに示す。クライアントコンピュータ装置１３０、１３２、１３４は、様々なカテゴリまたはクラスの装置に属してよく、様々なカテゴリまたはクラスの装置は、分散コンピュータ資源１０４、１０６、１０８と同じであっても、異なっていてもよい。これらのカテゴリまたはクラスの装置は、従来のクライアント型装置、デスクトップコンピュータ型装置、モバイル型装置、特定用途型装置、埋め込み型装置、及び／または、ウェアラブル型装置を含んでよい。さらに、クライアントコンピュータ装置１３０、１３２、１３４は、多様な装置の型を含んでよいが、任意の特定の型の装置に限らない。
【００３５】
例えば、クライアントコンピュータ装置１３０、１３２、１３４は、全地球測位システム（ＧＰＳ）装置及び他の衛星ベースのナビゲーションシステム装置を含む衛星ベースのナビゲーションシステム等のコンピュータナビゲーション型クライアントコンピュータ装置、携帯電話、タブレットコンピュータ、携帯電話タブレットハイブリッド、パーソナルデジタルアシスタント（ＰＤＡ）、ラップトップコンピュータ、他のモバイルコンピュータ、ウェアラブルコンピュータ、埋め込みコンピュータ装置、デスクトップコンピュータ、パーソナルコンピュータ、自動車用コンピュータ、ネットワーク対応テレビ、シンクライアント、端末、ゲームコンソール、ゲーム装置、ワークステーション、メディアプレーヤ、パーソナルビデオレコーダ（ＰＶＲ）、テレビのセットトップボックス、デジタルビデオレコーダ（ＤＶＲ）、カメラ、コンピュータ装置に含まれる内蔵コンポーネント、電気器具等の通信機器、または、ユーザ入力を受信するように構成された任意の他の種類のコンピュータ装置も含み得るが、これらに限らない。
【００３６】
さらに、ユーザ等の実体は、クライアントコンピュータ装置１３０、１３２、１３４の各々またはいずれかと関連付けられてよい。実体は、特定のユーザと、ユーザのアシスタント、ユーザのスーパーバイザー、ユーザの配偶者、ユーザの親、及び／または、クライアントコンピュータ装置 １３０、１３２、１３４にアクセスする許可をユーザが与える他の実体等、ユーザによる１人または複数の被指名者とを含んでよい。
【００３７】
図１は、第Ｎのクライアントコンピュータ装置１３４に関する詳細をさらに示す。第１のクライアントコンピュータ装置１３０及び第２のクライアントコンピュータ装置１３２は、第Ｎのクライアントコンピュータ装置１３４と同じように構成されてよく、第Ｎのクライアントコンピュータ装置１３４に関して本明細書に記載されたコンポーネントの全てまたはいずれかの組み合わせを含んでよいことを理解できる。
【００３８】
図に示すように、第Ｎのクライアントコンピュータ装置１３４は、任意のコンピュータ装置であってよく、第Ｎのクライアントコンピュータ装置１３４は、例えば、バス１４４を介して、コンピュータ可読媒体１４２に動作可能または電気的に接続される１つまたは複数の処理ユニット１４０を含み得る。バス１４４は、システムバス、データバス、アドレスバス、ＰＣＩバス、Ｍｉｎｉ−ＰＣＩバス、並びに、任意の様々なローカル、周辺機器用、及び／若しくは、独立したバスのうちの１つまたは複数を含んでよい。
【００３９】
第Ｎのクライアントコンピュータ装置１３４は、１つまたは複数のネットワークインタフェース１４６も含んでよく、ネットワークインタフェース１４６は、ネットワーク１０２を介して第Ｎのクライアントコンピュータ装置１３４と他のコンピュータ資源または装置との通信を可能にする。ネットワークインタフェース１４６は、１つまたは複数のネットワークインタフェースコントローラ（ＮＩＣ）、または、ネットワークを介して通信を送受信する他の種類の送受信装置を含んでよい。特定の態様においては、実行可能命令は、第Ｎのクライアントコンピュータ装置１３４のコンピュータ可読媒体１４２に記憶することができ、これらの実行可能命令は、図１に示すように、例えば、オペレーティングシステム１４８、ローカル共有フォルダ及び共有ファイル同期モジュール１５０、及び、１つまたは複数の処理ユニット１４０によってロード、実行可能な他のモジュール、プログラム、若しくは、アプリケーションを含んでよい。
【００４０】
あるいは、または、さらに、本明細書に記載の機能は、アクセラレータ等の１つまたは複数のハードウェア論理コンポーネントによって、少なくとも部分的に実行されてよい。例えば、使用可能なハードウェア論理コンポーネントの例示の種類は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、特定用途向け標準製品（ＡＳＳＰ）、システムオンチップシステム（ＳＯＣ）、結合プログラム論理回路（ＣＰＬＤ）等を含むが、これらに限らない。例えば、アクセラレータは、ＦＰＧＡファブリックに埋め込まれたＣＰＵコース（ｃｏｕｒｓｅ）を含むＺＹＬＥＸまたはＡＬＴＥＲＡ製等のハイブリッド装置を表してよい。
【００４１】
第Ｎの分散クライアントコンピュータ装置１３４のコンピュータ可読媒体１４２は、複数のフォルダ、サブフォルダ、ファイル、または、これらの組み合わせを記憶し得るローカルファイルシステム１５２も含んでよい、または、ローカルファイルシステム１５２で仕切られてよい。複数のフォルダ、サブフォルダ、及び、ファイルは、複数の共有フォルダ、共有サブフォルダ、共有ファイル、共有サブレベルファイル、及び、共有ショートカットを含み得る。より詳細には、複数の共有フォルダ、共有サブフォルダ、共有ファイル、共有サブレベルファイル、及び、共有ショートカットは、共有フォルダの複数のローカルインスタンス、共有サブフォルダの複数のローカルインスタンス、及び、共有ファイルの複数のローカルインスタンスを含み得る。
【００４２】
特定の態様においては、ローカルファイルシステム１５２は、暗号学的ハッシュ関数、または、他のハッシュ関数を利用して、ローカルファイルシステム１５２内に記憶されたファイル及びデータを記憶、検索してよい。ハッシュ関数は、ＭＤ２、ＭＤ４、ＭＤ５、ＭＤ６、ＳＨＡ−０、ＳＨＡ−１、ＳＨＡ−２、ＳＨＡ−３、または、これらの組み合わせ等のＭｅｒｋｌｅ−Ｄａｍｇaｒｄハッシュ関数の導関数を含んでよい。別の態様においては、ハッシュ関数は、ＲＩＰＥＭＤ（ｒａｃｅ  ｉｎｔｅｇｒｉｔｙ  ｐｒｉｍｉｔｉｖｅｓ  ｅｖａｌｕａｔｉｏｎ  ｍｅｓｓａｇｅ  ｄｉｇｅｓt）ハッシュ関数、ＲＩＰＥＭＤ−１６０、または、これらの組み合わせを含んでよい。図２及び図３は、以下に記載のように、ローカルファイルシステム１５２内で発見され得るファイルシステムの例とフォルダの例に関して、より詳しく示す。
【００４３】
図１にさらに示すように、コンピュータ可読媒体１４２は、コンピュータ可読媒体１４２に記憶されたマスターハッシュリスト１５４を含み得る。マスターハッシュリスト１５４は、本明細書に記載のように、フォルダハッシュ、サブフォルダハッシュ、及び、ファイルハッシュのリストを含むことができ、フォルダ、サブフォルダ、及び／または、ファイル内のコンテンツが最後にマスターハッシュリストを計算、記録してから変化したか否かを決定するために、マスターハッシュリスト１５４を用いて、フォルダハッシュ、サブフォルダハッシュ、及び、ファイルハッシュの現在の状態をマスターハッシュリスト１５４と比較してよい。
【００４４】
マスターハッシュリスト１５４は、第Ｎの分散コンピュータ資源１０８内に記憶されたマスターハッシュリスト１２４のコピーであってよい。時には、マスターハッシュリスト１２４、１５４は全く同じであり得る。しかしながら、フォルダ、サブフォルダ、ファイル、または、これらの組み合わせは、様々なクライアントコンピュータ装置１３０、１３２、１３４で変更されるので、マスターハッシュリスト１２４、１５４は、互いに同期される前は、異なる場合がある。
【００４５】
図１をさらに参照する。第Ｎのクライアントコンピュータ装置１３４は、第Ｎのクライアントコンピュータ装置１３４に接続された、入力装置１６０、出力装置１６２、表示装置１６４、または、これらの組み合わせを含み得る。詳細には、入力装置１６０、出力装置１６２、及び、表示装置１６４は、バス１４４に接続できる。入力装置１６０、出力装置１６２、及び、表示装置１６４は、第Ｎのクライアントコンピュータ装置１３４と通信する能力をユーザに提供してよい。入力装置１６０は、マウス、キーボード、マイクロフォン、タッチスクリーン、ジョイスティック、ハンドヘルドコントローラ、ライトペン、トラックボール、スキャナ、グラフィックタブレット、磁気インクカードリーダ（ＭＩＣＲ）、光学式文字読取装置（ＯＣＲ）、バーコードリーダ、光学式マーク読取装置、または、これらの組み合わせを含んでよい。出力装置１６２は、プリンタ、スピーカ、触覚装置、または、これらの組み合わせを含んでよい。表示装置１６４は、画面、モニタ、プロジェクタ、または、これらの組み合わせを含んでよい。
【００４６】
図１は、共有フォルダ及び共有ファイル同期システム１００が、第Ｎのクライアントコンピュータ装置１３４に接続されたデータストア１６６を含み得ることを、さらに示す。代替の態様においては、共有フォルダ及び共有ファイルローカル同期モジュール１５０、ローカルファイルシステム１５２、マスターハッシュリスト１５４、または、これらの組み合わせは、データストア１６６内に配置されてよいことを理解できる。様々な態様及び例において、データストア１６６は、データベース、データウェアハウス、または、他の種類の構造化若しくは非構造化データストレージ等のデータストレージを含む。ある例においては、データストア１６６は、例えば、ハイパーテキストマークアップ言語（ＨＴＭＬ）表、リソースディスクリプションフレームワーク（ＲＤＦ）表、ウェブオントロジー言語（ＯＷＬ）表、及び／または、拡張マークアップ言語（ＸＭＬ）表のうちの１つまたは複数を含むデータアクセスを可能にする１つまたは複数の表、インデックス、記憶されたプロシージャ等を備えたコーパス、及び／または、リレーショナルデータベースを含み得る。
【００４７】
コンピュータ可読媒体は、コンピュータ記憶媒体、及び／または、通信媒体を含んでよい。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または、他のデータ等の情報を記憶するための任意の方法または技術で実施される揮発メモリ、不揮発メモリ、並びに／または、他の永続的及び／若しくは補助的コンピュータ記憶媒体、取り外し可能及び取り外し不能コンピュータ記憶媒体を含み得る。コンピュータ可読媒体１１２、１４２は、データストア１６６と同様のコンピュータ記憶媒体の例であってよい。
【００４８】
従って、コンピュータ可読媒体１１２、１４２、及び／または、データストア１６６は、装置、及び／または、装置の一部若しくは装置の外部にあるハードウェアコンポーネントに含まれる有形及び／または物理的形態の媒体を含む。それらは、ランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、動的ランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＲＡＭ）、リードオンリメモリ（ＲＯＭ）、マスクリードオンリメモリ（ＭＲＯＭ）、プログラマブルリードオンリメモリ（ＰＲＯＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、コンパクトディスクリードオンリメモリ（ＣＤ‐ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、光カード、若しくは、他の光記憶媒体、磁気カセット、磁気テープ、磁気ディスクストレージ、磁気カード、若しくは、他の磁気記憶装置若しくは媒体、固体メモリ装置、ストレージアレイ、ネットワーク接続ストレージ、ストレージエリアネットワーク、ホストコンピュータストレージ、または、コンピュータ装置がアクセスする情報の記憶、保持に使用可能な任意の他の記憶メモリ、記憶装置、及び／若しくは、記憶媒体を含むが、これらに限らない。
【００４９】
コンピュータ記憶媒体とは対照的に、通信媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または、他のデータを、搬送波または他の送信機構等の変調データ信号で具体化してよい。本明細書の定義では、コンピュータ記憶媒体は、通信媒体を含まない。すなわち、コンピュータ記憶媒体は、変調データ信号、搬送波、または、伝播信号自体のみからなる通信媒体を含まない。
【００５０】
簡単にするために、第Ｎの分散コンピュータ装置１３４等のコンピュータ装置と一般的に関連し得る、または、含まれ得る他のコンポーネントまたは特徴は、図１の第Ｎの分散コンピュータ装置１３４の描写から省略されている。これらの他のコンポーネントまたは特徴は、Ａ／Ｃ電源、Ｄ／Ｃ電源、様々なコネクタポート、様々なコード、様々なＬＥＤインジケータ、ハウジング、シャシ、ファン、ヒートシンク等を含み得るが、これらに限らない。
【００５１】
コンピュータ可読記憶媒体１１２、１４２及び／またはデータストア１６６を使用して、１つまたは複数の処理ユニット１１０、１４０によって実行可能な任意の数の機能コンポーネントを記憶してよい。多くの実施態様において、これらの機能コンポーネントは、１つまたは複数の処理ユニット１１０、１４０によって実行可能な命令またはプログラムを含む。命令またはプログラムは、実行されると、共有フォルダ及び共有ファイル同期システム１００に属する動作を行う動作論理を実施する。共有フォルダ及び共有ファイルを同期することに関する様々な機能及び特徴を実施する１つまたは複数の処理ユニット１１０、１４０で実行されてよい共有フォルダ及び共有ファイル同期システム１００の機能コンポーネントは、本明細書に記載のように、第Ｎの分散コンピュータ資源１０８内にリモート共有フォルダ及び共有ファイル同期モジュール１２０を含み、第Ｎのクライアントコンピュータ装置１３４内にローカル共有フォルダ及び共有ファイル同期モジュール１５０を含む。
【００５２】
ある実施態様において、様々なモジュール１２０、１５０は、数個のクライアントコンピュータ装置１３０、１３２、１３４と少なくとも１つの分散コンピュータ資源１０４、１０６、１０８との間の共有フォルダ及び共有ファイルの同期に関連する動作を行うように処理ユニット１１０、１４０によって実行可能なコンピュータ可読命令を含んでよい。
【００５３】
図２を参照すると、ファイルシステムの例が、一般的に２００で示されている。図２のファイルシステム２００は、第Ｎの分散コンピュータ資源１０８(図１)内のリモートファイルシステム１２２（図１)として使用されてよい。さらに、図２のファイルシステム２００は、第Ｎのクライアントコンピュータ装置１３４(図１)内のローカルファイルシステム１５２（図１)として使用されてよい。別の態様においては、ファイルシステム２００は、第Ｎのクライアントコンピュータ装置１３４(図１)に結合されたデータストア１６６（図１)内に配置されてよい。
【００５４】
図２に示すように、ファイルシステム２００は、第１のフォルダ２０２、第２のフォルダ２０４、及び、第Ｎのフォルダ２０６を含み得る。各フォルダ２０２、２０４、２０６は、名前、識別子、または、他の記述子、例えば、マイドキュメント、フォト、ミュージック、ワーク等を含み得る。さらに、図２に示すように、第１のフォルダ２０２は、第１のサブフォルダ２１０、第２のサブフォルダ２１２、及び、第Ｎのサブフォルダ２１４を含み得る。各サブフォルダ２１０、２１２、２１４は、名前、識別子、または、何らかの他の記述子を含み得る。
【００５５】
第１のフォルダ２０２内の第１のサブフォルダ２１０は、第１のファイル２１６、第２のファイル２１８、及び、第Ｎのファイル２２０を含み得る。第１のフォルダ２０２内の第２のサブフォルダ２１２は、第１のファイル２２２、第２のファイル２２４、及び、第Ｎのファイル２２６を含み得る。さらに、第１のフォルダ２０２内の第３のサブフォルダ２１４は、第１のファイル２２８、第２のファイル２３０、及び、第Ｎのファイル２３２を含み得る。
【００５６】
各ファイル２１６〜２３２は、アーカイブファイル、圧縮ファイル、コンピュータ支援設計ファイル、データベースファイル、デスクトップパブリッシングファイル、ドキュメントファイル、財務記録ファイル、フォントファイル、地理情報システムファイル、グラフィックファイル、リンクファイル、ショートカットファイル、数学的ファイル、オブジェクトコードファイル、ページ記述言語ファイル、個人情報管理ソフトウェアファイル、プレゼンテーションファイル、プロジェクト管理ソフトウェアファイル、参照管理ソフトウェアファイル、科学的データファイル、セキュリティファイル、信号データ（非オーディオ）ファイル、音声（オーディオ）ファイル、ソースコードファイル、スプレッドシートファイル、表形式データファイル、ビデオファイル、ビデオゲームファイル、仮想マシンファイル、ウェブページファイル、何らかの他のファイル、または、これらの組み合わせを含み得る。
【００５７】
図２に示すように、ファイルシステム２００内の第１のフォルダ２０２は、サブレベル１のファイル２３４（別名、第１のサブレベルファイル）、サブレベル２のファイル２３６（別名、第２のサブレベルファイル）、及び、サブレベルＮのファイル２３８（別名、第Ｎのサブレベルファイル）も含み得る。
【００５８】
第２のフォルダ２０４は、第１のサブフォルダ２４０、第２のサブフォルダ２４２、及び、第Ｎのサブフォルダ２４４を含み得る。各サブフォルダ２４０、２４２、２４４は、名前、識別子、または、何らかの他の記述子を含み得る。第２のフォルダ２０４内の第１のサブフォルダ２４０は、第１のファイル２４６、第２のファイル２４８、及び、第Ｎのファイル２５０を含み得る。第２のフォルダ２０４内の第２のサブフォルダ２４２は、第１のファイル２５２、第２のファイル２５４、及び、第Ｎのファイル２５６を含み得る。さらに、第２のフォルダ２０４内の第３のサブフォルダ２４４は、第１のファイル２５８、第２のファイル２６０、及び、第Ｎのファイル２６２を含み得る。
【００５９】
各ファイル２４６〜２６２は、アーカイブファイル、圧縮ファイル、コンピュータ支援設計ファイル、データベースファイル、デスクトップパブリッシングファイル、ドキュメントファイル、財務記録ファイル、フォントファイル、地理情報システムファイル、グラフィックファイル、リンクファイル、ショートカットファイル、数学的ファイル、オブジェクトコードファイル、ページ記述言語ファイル、個人情報管理ソフトウェアファイル、プレゼンテーションファイル、プロジェクト管理ソフトウェアファイル、参照管理ソフトウェアファイル、科学的データファイル、セキュリティファイル、信号データ（非オーディオ）ファイル、音声（オーディオ）ファイル、ソースコードファイル、スプレッドシートファイル、表形式データファイル、ビデオファイル、ビデオゲームファイル、仮想マシンファイル、ウェブページファイル、何らかの他のファイル、または、これらの組み合わせを含み得る。
【００６０】
図２に示すように、ファイルシステム２００内の第２のフォルダ２０４は、サブレベル１のファイル２６４（別名、第１のサブレベルファイル）、サブレベル２のファイル２６６（別名、第２のサブレベルファイル）、及び、サブレベルＮのファイル２６８（別名、第Ｎのサブレベルファイル）も含み得る。
【００６１】
さらに、図に示すように、第３のフォルダ２０６は、第１のサブフォルダ２７０、第２のサブフォルダ２７２、及び、第Ｎのサブフォルダ２７４を含み得る。各サブフォルダ２７０、２７２、２７４は、名前、識別子、または、何らかの他の記述子を含み得る。第３のフォルダ２０６内の第１のサブフォルダ２７０は、第１のファイル２７６、第２のファイル２７８、及び、第Ｎのファイル２８０を含み得る。第３のフォルダ２０６内の第２のサブフォルダ２７２は、第１のファイル２８２、第２のファイル２８４、及び、第Ｎのファイル２８６を含み得る。さらに、第３のフォルダ２０６内の第３のサブフォルダ２７４は、第１のファイル２８８、第２のファイル２９０、及び、第Ｎのファイル２９２を含み得る。
【００６２】
各ファイル２７６〜２９２は、アーカイブファイル、圧縮ファイル、コンピュータ支援設計ファイル、データベースファイル、デスクトップパブリッシングファイル、ドキュメントファイル、財務記録ファイル、フォントファイル、地理情報システムファイル、グラフィックファイル、リンクファイル、ショートカットファイル、数学的ファイル、オブジェクトコードファイル、ページ記述言語ファイル、個人情報管理ソフトウェアファイル、プレゼンテーションファイル、プロジェクト管理ソフトウェアファイル、参照管理ソフトウェアファイル、科学的データファイル、セキュリティファイル、信号データ（非オーディオ）ファイル、音声（オーディオ）ファイル、ソースコードファイル、スプレッドシートファイル、表形式データファイル、ビデオファイル、ビデオゲームファイル、仮想マシンファイル、ウェブページファイル、何らかの他のファイル、または、これらの組み合わせを含み得る。
【００６３】
図２は、ファイルシステム２００内の第Ｎのフォルダ２０６が、サブレベル１のファイル２９４（別名、第１のサブレベルファイル）、サブレベル２のファイル２９６（別名、第２のサブレベルファイル）、及び、サブレベルＮのファイル２９８（別名、第Ｎのサブレベルファイル）も含み得ることも示す。
【００６４】
図３は、３００で示されたフォルダの例である。フォルダ３００は、図１に関連して記載したファイルシステム１２２、１５２、及び、図２に関連して記載したファイルシステム２００と共に使用できる。さらに、フォルダ３００は、図２に示すフォルダ２０２、２０４、２０６のいずれかを表してよい。
【００６５】
図３に示すように、フォルダ３００は、サブフォルダ３０２を含むことができ、サブフォルダ３０２は、第１のファイル３０４、第２のファイル３０６、及び、第Ｎのファイル３０８を含み得る。フォルダ３００は、サブレベル１のファイル３１０（別名、第１のサブレベルファイル）、サブレベル２のファイル３１２（別名、第２のサブレベルファイル）、及び、サブレベルＮのファイル３１４（別名、第Ｎのサブレベルファイル）も含み得る。各ファイル３０４〜３１２は、アーカイブファイル、圧縮ファイル、コンピュータ支援設計ファイル、データベースファイル、デスクトップパブリッシングファイル、ドキュメントファイル、財務記録ファイル、フォントファイル、地理情報システムファイル、グラフィックファイル、リンクファイル、ショートカットファイル、数学的ファイル、オブジェクトコードファイル、ページ記述言語ファイル、個人情報管理ソフトウェアファイル、プレゼンテーションファイル、プロジェクト管理ソフトウェアファイル、参照管理ソフトウェアファイル、科学的データファイル、セキュリティファイル、信号データ（非オーディオ）ファイル、音声（オーディオ）ファイル、ソースコードファイル、スプレッドシートファイル、表形式データファイル、ビデオファイル、ビデオゲームファイル、仮想マシンファイル、ウェブページファイル、何らかの他のファイル、または、これらの組み合わせを含み得る。
【００６６】
図３は、フォルダ３００が、第１のショートカット３１６、第２のショートカット３１８、及び、第Ｎのショートカット３２０を含み得ることも示す。各ショートカット３１６、３１８、３２０は、シンボリックリンク、すなわち、シムリンク若しくはソフトリンクであってよい。さらに、各ショートカット３１６、３１８、３２０は、絶対パス若しくは相対パスの形で、他のファイルまたはディレクトリへの参照を含み得る。
【００６７】
図３に示すように、フォルダ３００は、フォルダハッシュ３３０を含むことができ、フォルダハッシュ３３０は、フォルダ３００がコンピュータ可読媒体のファイルシステム内のどこに記憶されたかを示し得る。サブフォルダ３０２は、サブフォルダ３０２がコンピュータ可読媒体のファイルシステム内のどこに記憶されたかを示し得るサブフォルダハッシュ３３２を含むことができる。さらに、サブフォルダ３０２内の各ファイル３０４、３０６、３０８は、対応するファイルハッシュ３３４、３３６、３３８を含み得る。例えば、第１のファイル３０４は、第１のファイルハッシュ３３４を含むことができ、第２のファイル３０６は、第２のファイルハッシュ３３６を含むことができ、第Ｎのファイル３０８は、第Ｎのファイルハッシュ３３８を含むことができる。各ファイルハッシュ３３４、３３６、３３８は、コンピュータ可読媒体のファイルシステム内のどこに各ファイル３０４、３０６、３０８が記憶されているかを示し得る。
【００６８】
図３は、さらに、サブレベル１のファイル３１０は、関連するファイルハッシュ３４０を含むことができ、サブレベル２のファイル３１２は、関連するファイルハッシュ３４２を含むことができ、サブレベルＮのファイル３１４も、ファイルハッシュ３４４を含むことができることを、示している。各ファイルハッシュ３４０、３４２、３４４は、各ファイル３１０、３１２、３１４がコンピュータ可読媒体のファイルシステム内のどこに記憶されているかを示し得る。第１のショートカット３１６は、ショートカットハッシュ３４６を含むことができ、第２のショートカット３１８は、ショートカットハッシュ３４８を含むことができ、第Ｎのショートカット３２０も、ショートカットハッシュ３５０を含むことができる。各ショートカットハッシュ３４６、３４８、３５０は、各ショートカット３１６、３１８、３２０がコンピュータ可読媒体のファイルシステム内のどこに記憶されているかを示し得る。
【００６９】
特定の例においては、サブフォルダハッシュ３３２は、サブフォルダ３０２に記憶されたファイル３０４、３０６、３０８に関連付けられたファイルハッシュ３３４、３３６、３３８の関数であってよい。言い換えると、サブフォルダハッシュ３３２は、サブフォルダ３０２内に記憶されたファイル３０４、３０６、３０８に関連付けられたファイルハッシュ３３４、３３６、３３８に基づいて計算されてよい。ファイルハッシュ３３４、３３６、３３８のいずれかに対する変更はいずれも、新しいサブフォルダハッシュ３３２を生じる。
【００７０】
フォルダハッシュ３３０は、フォルダ内に記憶されたサブフォルダ３０２に関連付けられたサブフォルダハッシュ３３２、サブフォルダ３０２内に記憶されたファイル３０４、３０６、３０８に関連付けられたファイルハッシュ３３４、３３６、３３８、フォルダ３００内に記憶されたサブレベルファイル３１０、３１２、３１４に関連付けられたサブレベルファイルハッシュ３４０、３４２、３４４、及び、フォルダ３００内に記憶されたショートカット３１６、３１８、３２０に関連付けられたショートカットハッシュ３４６、３４８、３５０の関数であってよい。言い換えると、フォルダハッシュ３３０は、フォルダ内に記憶されたサブフォルダ３０２に関連付けられたサブフォルダハッシュ３３２、サブフォルダ３０２内に記憶されたファイル３０４、３０６、３０８に関連付けられたファイルハッシュ３３４、３３６、３３８、フォルダ３００内に記憶されたサブレベルファイル３１０、３１２、３１４に関連付けられたサブレベルファイルハッシュ３４０、３４２、３４４、及び、フォルダ３００内に記憶されたショートカット３１６、３１８、３２０に関連付けられたショートカットハッシュ３４６、３４８、３５０に基づいて、計算されてよい。従って、サブフォルダハッシュ３３２、ファイルハッシュ３３４、３３６、３３８、サブレベルファイルハッシュ３４０、３４２、３４４、及び、ショートカットハッシュ３４６、３４８、３５０のいずれかに対する変更はいずれも、新しいフォルダハッシュ３３０を生じる。
【００７１】
従って、各フォルダ３００、サブフォルダ３０２、ファイル３０４、３０６、３０８、サブレベルファイル３１０、３１２、３１４、及び、ショートカット３１６、３１８、３２０に計算して割り当てられたハッシュ３３０〜３５０の状態をモニタすることによって、共有フォルダ及び共有ファイル同期システム１００（図１）、例えば、リモート及びローカルの共有フォルダ及び共有ファイル同期モジュール１２０、１５０（図１)は、フォルダ２０２〜２０６、３００、サブフォルダ２１０〜２１４、２４０〜２４４、２７０〜２７４、３０２、ファイル２１６〜２３２、２４６〜２６２、２７６〜２８８、３０４〜３０８、サブレベルファイル２３４〜２３８、２６４〜２６８、２９４〜２９８、３１０〜３１４、ショートカット３１６〜３２０、または、これらの組み合わせ、のうちのどれが変更されたか、または、その中のデータが変更されたかを、フォルダ２０２〜２０６、３００、サブフォルダ２１０〜２１４、２４０〜２４４、２７０〜２７４、３０２、ファイル２１６〜２３２、２４６〜２６２、２７６〜２８８、３０４〜３０８、サブレベルファイル２３４〜２３８、２６４〜２６８、２９４〜２９８、３１０〜３１４、及び、ショートカット３１６〜３２０のコンテンツを実際にモニタする必要なく、素早く、確認できる。
【００７２】
例えば、リモート共有フォルダ及び共有ファイル同期モジュール１２０、１５０は、フォルダ２０２〜２０６、３００、サブフォルダ２１０〜２１４、２４０〜２４４、２７０〜２７４、３０２、ファイル２１６〜２３２、２４６〜２６２、２７６〜２８８、３０４〜３０８、サブレベルファイル２３４〜２３８、２６４〜２６８、２９４〜２９８、３１０〜３１４、及び、ショートカット３１６〜３２０のうちのどれが同期の必要の可能性があるかを決定するために、リモートファイルシステム１２２またはローカルファイルシステム１５２のハッシュ３３０〜３５０の現在のリストを、その特定のリモートファイルシステム１２２またはローカルファイルシステム１５２のハッシュの直近のリスト、例えば、マスターハッシュリスト１２４、１５４と比較してよい。ハッシュ３３０〜３５０のどのハッシュも変わっていない場合、リモートファイルシステム１２２またはローカルファイルシステム１５２の同期は行われない。
【００７３】
リモートまたはローカルの共有フォルダ及び共有ファイル同期モジュール１２０、１５０は、現在のフォルダハッシュ３３０を素早くトラバースして、各フォルダ２０２〜２０６、３００に関して、フォルダハッシュ３３０のどれかが、直近に記録されたフォルダハッシュ３３０と異なっているか、異なっている場合、決定し得る。異なるフォルダハッシュ３３０はいずれも、フォルダ２０２〜２０６、３００のサブフォルダ２１０〜２１４、２４０〜２４４、２７０〜２７４、３０２内のファイル２１６〜２３２、２４６〜２６２、２７６〜２８８、３０４〜３０８が、変更、例えば、更新、編集、削除、作成等されたことを、リモートまたはローカルの共有フォルダ及び共有ファイル同期モジュール１２０、１５０に示す。マスターリスト１２４、１５４のフォルダハッシュ３３０と異なるフォルダハッシュ３３０を有する任意のフォルダ２０２〜２０６、３００に関して、リモートまたはローカルの共有フォルダ及び共有ファイル同期モジュール１２０、１５０は、フォルダ２０２〜２０６、３００内に記憶されたファイル２１６〜２３２、２４６〜２６２、２７６〜２８８、３０４〜３０８に関連付けられたファイルハッシュ３３４〜３３８をトラバースして、ファイル２１６〜２３２、２４６〜２６２、２７６〜２８８、３０４〜３０８のうちのどのファイルが、変更されたかを、もし変更されていれば、決定してよい。さらに、サブレベルファイルハッシュ３４０〜３４４は、サブレベルファイル２３４〜２３８、２６４〜２６８、２９４〜２９８、３１０〜３１４のうちのどのサブレベルファイルが一部変更、更新、または、他の方法で、変更されたかを決定するために、トラバースされてよい。また、ショートカットハッシュ３４６〜３５０は、ショートカット３１６〜３２０のいずれが一部変更または変更されたか否かを決定するために、トラバースされてよい。
【００７４】
さらに、新しいまたは異なったフォルダハッシュ３３０を有する各フォルダ２０２〜２０６、３００に関して、リモートまたはローカルの共有フォルダ及び共有ファイル同期モジュール１２０、１５０は、フォルダ２０２〜２０６、３００内のサブフォルダ２１０〜２１４、２４０〜２４４、２７０〜２７４、３０２に関連付けられたサブフォルダハッシュ３３２をトラバースして、サブフォルダ２１０〜２１４、２４０〜２４４、２７０〜２７４、３０２のうちのどのサブフォルダが、変更されたファイル２１６〜２３２、２４６〜２６２、２７６〜２９２、３０４〜３０８を含むかを、もしあれば、決定し得る。その後、異なるサブフォルダハッシュ３３２を有する任意のサブフォルダ２１０〜２１４、２４０〜２４４、２７０〜２７４、３１０に関して、リモートまたはローカルの同期モジュール１２０、１５０は、ファイル２１６〜２３２、２４６〜２６２、２７６〜２９２、３０４〜３０８のどのファイルが異なるファイルハッシュ３３４〜３３８を有するかを決定するために、サブフォルダ２１０〜２１４、２４０〜２４４、２７０〜２７４、３１０内に記憶されたファイル２１６〜２３２、２４６〜２６２、２７６〜２９２、３０４〜３０８に関連付けられたファイルハッシュ３３４〜３３８をトラバースしてよい。
【００７５】
異なるファイルハッシュ３３４〜３３８を含むファイル２１６〜２３２、２４６〜２６２、２７６〜２９２、３０４〜３０８はいずれも、変更されたと考えられ、その特定のファイル２１６〜２３２、２４６〜２６２、２７６〜２９２、３０４〜３０８は、直近のアクションを含むように同期される。アクションは、ファイル２２０〜２３６、２５０〜２６６、２８０〜２９６、３０４〜３０８、または、ファイル２２０〜２３６、２５０〜２６６、２８０〜２９６、３０４〜３０８のコンテンツの更新、編集、追加、削除、または、任意の他の変更を含み得る。
【００７６】
図４〜図９は、共有フォルダ及び共有ファイルの同期に関連する様々なプロセスを示す。例えば、図４は、ファイル及びマスターハッシュリストをリモートファイルシステムにアップロードするプロセスの例を示すフロー図である。図５及び図６は、共有フォルダ及び共有ファイルを同期するプロセスの例を示すフロー図である。図７は、ローカルファイルシステムからファイルを同期するプロセスの例を示すフロー図である。図８は、リモートファイルシステムからファイルを同期するプロセスの例を示すフロー図である。さらに、図９は、フォルダツリー及びサブフォルダツリーをトラバースして、同期を要するファイル変更を突き止めるプロセスの例を示すフロー図である。
【００７７】
プロセスは、論理フロー図のブロックの集まりとして示され、ブロックの集まりは、動作シーケンスを表し、動作シーケンスの一部または全ては、ハードウェア、ソフトウェア、または、これらの組み合わせで実施し得る。ソフトウェアの文脈では、ブロックは、１つまたは複数のコンピュータ可読媒体に記憶されたコンピュータ実行可能命令を表し、コンピュータ実行可能命令は、１つまたは複数のプロセッサによって実行されて、記載の動作を行う。一般的に、コンピュータ実行可能命令は、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含み、それらは、特定の機能を行い、または、特定の抽象データ型を実施する。動作の記載順は、制限と解釈すべきではない。任意の数の記載したブロックを、任意の順、及び／または、並行して、組み合わせて、プロセスまたは代替プロセスを実施することができ、且つ、ブロックは、必ずしも全て実行する必要はない。検討のため、本明細書のプロセスは、本明細書の例に記載されたフレームワーク、アーキテクチャ、及び、環境を参照して記載するが、プロセスは、広範な他のフレームワーク、アーキテクチャ、または、環境で実施されてよい。
【００７８】
様々なプロセスの記載は、「次に（ｔｈｅｎ）」、「次の（ｎｅｘｔ）」、「その後（ｔｈｅｒｅａｆｔｅｒ）」、「その後（ｓｕｂｓｅｑｕｅｎｔｌｙ）」、「に戻る（ｒｅｔｕｒｎｉｎｇ  ｔｏ）」、「に続く（ｃｏｎｔｉｎｕｉｎｇ  ｔｏ）」、「に進む（ｐｒｏｃｅｅｄｉｎｇ  ｔｏ）」等、ある種の移行を表す言葉、及び、方向を示す言葉を含み得る。これらの語及び他の類似の語は、プロセスの図解を通して読者を導くことのみを意図しており、図に示されたプロセスのステップを行い得る順序を制限することは意図していない。
【００７９】
さらに、図４〜図９に示した様々なプロセスのステップの１つまたは複数は、分散コンピュータ資源１０４、１０６、１０８（図１）またはクライアントコンピュータ装置１３０、１３２、１３４（図１）の１つまたは複数によって、分散コンピュータ資源またはクライアントコンピュータ装置、または、それらにアクセス可能なメモリ装置に記憶された共有フォルダ及び共有ファイルを同期するために、行われてよい。詳細には、図４〜図９に示す様々なプロセスステップの１つまたは複数は、分散コンピュータ資源１０４、１０６、１０８（図１）内のリモート共有フォルダ及び共有ファイル同期モジュール１２０（図１)、クライアントコンピュータ装置１３０、１３２、１３４（図１）内のローカル共有フォルダ及び共有ファイル同期モジュール１５０（図１）、または、これらの組み合わせによって行われてよい。
【００８０】
前述のように、図４は、ファイル及びマスターハッシュリストをローカルファイルシステムからリモートファイルシステムにアップロードするプロセス４００の例を示すフロー図である。プロセス４００は、４０２で開始し、変数をＮ＝１に設定することを含む。変数Ｎは、プロセスが個々のファイルを一度に１つ、いずれのファイルも繰り返すことなしにトラバースするのを可能にするカウンタとして働く整数であってよい。４０４において、プロセス４００は、ローカルファイルシステム内の第Ｎのフォルダのフォルダハッシュを計算すること含み得る。第Ｎのフォルダのフォルダハッシュは、第Ｎのフォルダに関連付けられたデータをメモリまたはコンピュータ可読媒体にマップするのに使用されるハッシュテーブルに基づいて、計算、または、他の方法で決定することができる。メモリまたはコンピュータ可読媒体には、ローカルファイルシステムが記憶される。第Ｎのフォルダのフォルダハッシュは、第Ｎのフォルダ内の各サブフォルダのサブフォルダハッシュ、第Ｎのフォルダ内の各ファイルのファイルハッシュ、及び、第Ｎのフォルダ内のサブフォルダ内の各ファイルのファイルハッシュに基づいている。特定の態様においては、プロセス４００は、ファイルに関連付けられたデータを記憶、検索するのに使用されるデータモデルを活用し得る。プロセス４００は、リモートプロシージャコール（ＲＰＣ）を利用して、ファイルシステム内のデータに関連付けられたハッシュテーブルからフォルダハッシュを検索できる。詳細には、プロセス４００は、ハッシュテーブルからフォルダハッシュを検索するために、ＧｅｔＲｏｏｔＦｏｌｄｅｒ  ＲＰＣ、または、ＧｅｔＲｏｏｔＦｏｌｄｅｒ  ＲＰＣの修正バージョンを利用できる。
【００８１】
４０６において、プロセス４００は、ローカルファイルシステム内の第Ｎのフォルダ内の各サブフォルダのサブフォルダハッシュを計算すること、または、他の方法で決定することを含み得る。第Ｎのフォルダ内の各サブフォルダのハッシュは、第Ｎのフォルダ内の各サブフォルダに関連付けられたデータをメモリまたはコンピュータ可読媒体にマップするのに使用されるハッシュテーブルに基づいて計算できる。メモリまたはコンピュータ可読媒体には、ローカルファイルシステムが記憶されている。第Ｎのフォルダ内の各サブフォルダのハッシュは、第Ｎのフォルダ内のサブフォルダ内の各ファイルのハッシュに基づいている。さらに、特定の態様においては、プロセス４００は、リモートプロシージャコール（ＲＰＣ）を利用して、ファイルシステム内のデータに関連付けられたハッシュテーブルからサブフォルダハッシュを検索できる。詳細には、プロセス４００は、ハッシュテーブルからサブフォルダハッシュを検索するために、ＧｅｔＲｏｏｔＦｏｌｄｅｒ  ＲＰＣ、または、ＧｅｔＲｏｏｔＦｏｌｄｅｒ  ＲＰＣの修正バージョンを利用できる。
【００８２】
プロセス４００は、４０８に移り、第Ｎのフォルダ内の各ファイルのファイルハッシュを計算することを含み得る。これは、第Ｎのフォルダ内の各サブフォルダ内の各ファイルを含む。第Ｎのフォルダ内の各ファイルのハッシュは、第Ｎのフォルダ内の各ファイルに関連付けられたデータをメモリまたはコンピュータ可読媒体にマップするのに使用されるハッシュテーブルに基づいて計算できる。メモリまたはコンピュータ可読媒体には、ローカルファイルシステムが記憶されている。さらに、特定の態様においては、プロセス４００は、リモートプロシージャコール（ＲＰＣ）を利用して、ファイルシステム内のデータに関連付けられたハッシュテーブルから各ファイルに関してファイルハッシュを検索できる。詳細には、プロセス４００は、ハッシュテーブルから各ファイルのファイルハッシュを検索するために、ＧｅｔＲｏｏｔＦｏｌｄｅｒ  ＲＰＣ、または、ＧｅｔＲｏｏｔＦｏｌｄｅｒ  ＲＰＣの修正バージョンを利用できる。
【００８３】
プロセス４００は、４１０に続き、ローカルファイルシステムに第Ｎのフォルダのフォルダハッシュ、サブフォルダハッシュ、及び、ファイルハッシュを記録することを含み得る。第Ｎのフォルダのフォルダハッシュ、サブフォルダハッシュ、及び、ファイルハッシュは、第Ｎのフォルダの識別子、第Ｎのフォルダ内の各サブフォルダの識別子、及び、第Ｎのフォルダ内の各ファイルの識別子に関連付けて、記録することができる。各識別子は、第Ｎのフォルダ、各サブフォルダ、及び、各ファイルに関連付けられた名前、タイトル、または、何らかの他の記述であってよい。４１２において、プロセス４００は、ファイルシステム内に別のフォルダがあるか否かを決定することを含む。
【００８４】
ファイルシステムに別のフォルダがある場合、プロセス４００は、４１４に進むことができ、プロセス４００は、Ｎの値を１増やすことを含み得る。言い換えると、Ｎの値は、Ｎの現在の値に１を足すこと、すなわち、Ｎ＝Ｎ＋１によって再計算することができる。その後、プロセス４００は、４０４に戻ることができ、プロセス４００は、本明細書に記載のステップ４０４〜４１０を行うことができる。４１２において、プロセス４００が、残りのフォルダが無いと決定する場合、プロセス４００は、４１６に進んでよい。
【００８５】
４１６において、プロセス４００は、上記検索したハッシュ値を１つのマスターハッシュレポートまたは１つのマスターハッシュリストにまとめることを含み得る。マスターハッシュリストは、各フォルダのフォルダハッシュ、各フォルダ内の各サブフォルダのサブフォルダハッシュ、及び、各サブフォルダ及びフォルダ内の各ファイルのファイルハッシュを含み得る。マスターハッシュリストは、表としてまとめることができ、ローカルファイルシステムに関連付けられたクライアントコンピュータ装置の日時スタンプ及び識別子を含み得る。４１８において、プロセス４００は、フォルダと、フォルダのコンテンツ、例えば、フォルダ内のサブフォルダ及びファイルとをリモートファイルシステムに送信することを含み得る。例えば、フォルダとフォルダ内のコンテンツは、ネットワーク接続を介して、分散コンピュータ資源のリモートファイルシステムにアップロードできる。その後、プロセス４００は、４２０で終了してよい。
【００８６】
図５及び図６は、共有フォルダ及び共有ファイルを同期するプロセス５００の例を示すフロー図である。プロセス５００は、５０２で開始して、共有フォルダ、共有サブフォルダ、共有ファイル、共有サブレベルファイル、及び／または、共有ショートカットのリモートインスタンスが記憶されているリモートファイルシステム状態を、定期的にポーリングすること、または、他の方法で決定することを含み得る。
【００８７】
リモートファイルシステム状態は、複数のリモートフォルダハッシュ値を含み得る。複数のリモートフォルダハッシュ値は、リモートファイルシステムにおける共有サブフォルダの複数のリモートインスタンスに関連付けられた複数のサブフォルダハッシュ、共有ファイルの複数のリモートインスタンスに関連付けられた複数のファイルハッシュ、共有サブファイルの複数のリモートインスタンスに関連付けられた複数のサブファイルハッシュ、共有ショートカットの複数のリモートインスタンスに関連付けられた複数のショートカットハッシュ、または、これらの組み合わせに少なくとも部分的に基づいて決定することができる。
【００８８】
さらに、リモートファイルシステム状態は、マスターハッシュリストまたは現在のリモートファイルシステムハッシュリストとして編成することができる。ポーリングは、リモートファイルシステムの共有フォルダ及び共有ファイル同期モジュールによって開始でき、結果は、ローカルファイルシステムの共有フォルダ及び共有ファイル同期モジュールに送信できる。逆に、ローカルファイルシステムの共有フォルダ及び共有ファイル同期モジュールが、リモートファイルシステムの共有フォルダ及び共有ファイル同期モジュールに、リモートファイルシステムの共有フォルダ及び共有ファイルに関連付けられたハッシュの現在の状態を求める要求を送信することができる。この要求に応答して、リモートファイルシステムの共有フォルダ及び共有ファイル同期モジュールは、共有フォルダ及び共有ファイルのハッシュの状態をポーリングして、ポーリングの結果をローカルファイルシステムの共有フォルダ及び共有ファイル同期モジュールに送信できる。ローカルファイルシステムの共有フォルダ及び共有ファイル同期モジュールは、リモートファイルシステムの共有フォルダ及び共有ファイルに関連付けられたハッシュの現在の状態、例えば、マスターハッシュリストを受信し得る。
【００８９】
５０４において、プロセス５００は、リモートファイルシステムの現在の状態をローカルファイルシステムで利用可能な資源、または、ローカルファイルシステムの同期モジュールによって決定されたローカルファイルシステム状態と比較することを含み得る。ローカルファイルシステム状態は、ローカルファイルシステム内の複数のローカルフォルダハッシュ値を含み得る。複数のローカルフォルダハッシュ値は、ローカルファイルシステムにおける共有サブフォルダの複数のローカルインスタンスに関連付けられた複数のサブフォルダハッシュ、共有ファイルの複数のローカルインスタンスに関連付けられた複数のファイルハッシュ、共有サブファイルの複数のローカルインスタンスに関連付けられた複数のサブファイルハッシュ、共有ショートカットの複数のローカルインスタンスに関連付けられた複数のショートカットハッシュ、または、これらの組み合わせに少なくとも部分的に基づいて決定することができる。
【００９０】
プロセス５００は、リモートファイルシステム状態とローカルファイルシステム状態を比較して、リモートファイルシステム状態内の複数のリモートフォルダハッシュ値とローカルファイルシステム状態内の複数のローカルフォルダハッシュ値との間の相違を決定することができる。リモートフォルダハッシュ値がローカルフォルダハッシュ値と異なる共有フォルダはいずれも、本明細書に記載のローカルファイルシステム及びリモートファイルシステムに亘って同期することができる。
【００９１】
詳細には、ローカルファイルシステムの共有フォルダ及び共有ファイル同期モジュールは、共有フォルダ及び共有ファイルのローカルバージョンに関連付けられたハッシュのポーリングを行って、現在のローカルハッシュリストを取得できる。現在のリモートハッシュリスト、例えば、マスターハッシュリストは、以前のマスターハッシュリストと比較できる。現在のローカルハッシュリストは、直近に記録したローカルハッシュリストと比較することもできる。さらに、現在のローカルハッシュリストは、現在のマスターハッシュリストと比較されて、現在のローカルハッシュリストのハッシュと、現在のマスターハッシュリストのハッシュとの間の相違を決定し得る。
【００９２】
特定の態様においては、プロセス５００は、特定の共有ファイルが一致しないファイルハッシュ対を含むか否かを決定することを含み得る。一致しないファイルハッシュ対は、その特定の共有ファイルのリモートインスタンスのリモートファイルハッシュとは異なる特定の共有ファイルのローカルインスタンスのローカルファイルハッシュを含み得る。さらに、プロセス５００は、以下に記載するように、一致しないファイルハッシュ対を有する特定の共有ファイルを同期することを含み得る。別の態様においては、一致しないファイルハッシュ対は、その特定の共有ファイルのローカルインスタンスの欠けているローカルファイルハッシュまたはその特定の共有ファイルのリモートインスタンスの欠けているリモートファイルハッシュを含み得る。このような場合、プロセス５００は、その特定の共有ファイルのローカルインスタンスをローカルファイルシステムから削除すること、または、その特定の共有ファイルのリモートインスタンスをリモートファイルシステムから削除することを含み得る。
【００９３】
プロセス５００は、５０６に移ると、ローカルで変更されたファイルがあるか否かを決定することを含み得る。上記比較に基づいて、現在のローカルハッシュリストと、直近に記録されたローカルハッシュリストとの間の相違はいずれも、ファイルがユーザによってローカルに変更されたことを示し得る。さらに、現在のローカルハッシュリストと現在のマスターハッシュリストとの間の相違はいずれも、ファイルがリモートまたはローカルで変更されたことを示し得る。各ファイルに関連付けられたタイムスタンプは、直近のバージョンを示し得る。直近のタイムスタンプを有するローカルファイルは、ローカルで変更されたとみなすことができる。
【００９４】
特に、プロセス５００は、特定の共有ファイルのローカルインスタンスのタイムスタンプを決定することと、特定の共有ファイルのリモートインスタンスのタイムスタンプを決定することと、特定の共有ファイルのローカルインスタンスと特定の共有ファイルのリモートインスタンスのうちの最も直近のものに特定の共有ファイルを同期することを含み得る。例えば、プロセス５００は、特定の共有ファイルのローカルインスタンスをリモートファイルシステムにアップロードすること、または、特定の共有ファイルのリモートインスタンスをローカルファイルシステムにダウンロードすることを含み得る。
【００９５】
５０６において、いずれかのファイルがローカルで変更された場合、プロセス５００は、５０８に進むことができ、プロセス５００は、さらに、ファイルをリモートファイルシステムにアップロードすることも含み得る。一態様においては、変更されたファイル全体をリモートファイルシステムにアップロードできる。別の態様においては、アップロード時間とストレージを節約するために、共有フォルダ及び共有ファイル同期システムは、ファイルから変更をパースし、変更のみをリモートファイルシステムにアップロードできる。アップロード後、共有フォルダ及び共有ファイル同期システムは、リモートファイルシステムにおいて、変更を用いてファイルを更新できる。その後、プロセス５００は、５１０に移ることができる。５０６に戻って、ローカルで変更されたファイルが無い場合、プロセス５００は直接、５１０に移ることができる。
【００９６】
５１０において、プロセス５００は、フォルダ、サブフォルダ、ファイル、または、これらの組み合わせのいずれかが、リモートファイルシステムから削除されたか否かを決定することを含み得る。直近のマスターハッシュリストと現在のマスターハッシュリストの比較に基づいて、システムは、フォルダハッシュ、サブフォルダハッシュ、または、ファイルハッシュのいずれかが現在のマスターハッシュリストから欠けているか否かを決定し得る。欠けている場合、現在のマスターハッシュリストの欠けているハッシュに対応するこれらのフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットは、リモートファイルシステムから削除されたと考えられる。リモートファイルシステムから削除されたフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットがある場合、プロセス５００は、５１２に移ることができる。５１２において、プロセス５００は、対応するフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットをローカルファイルシステムから削除することを含み得る。特定の態様においては、フォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットは、すぐに削除されてよい。別の態様においては、遅延削除を使用してよく、フォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットは、所定時間、削除フォルダまたはキャッシュに置くことができる。所定時間が終了した後、フォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットは、永久に削除できる。削除フォルダまたはキャシュは、暗号化されてもよく、暗号化されなくてもよい。さらに、削除フォルダまたはキャッシュは、ユーザから見えなくてもよく、見えてもよい。
【００９７】
その後、プロセス５００は５１４に続き得る。５１０に戻って、リモートファイルシステムから削除されたフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットがない場合、プロセス５００は、直接５１４に移ることができる。
【００９８】
５１４において、プロセス５００は、フォルダ、サブフォルダ、ファイル、または、これらの組み合わせのいずれかがローカルファイルシステムで削除されたか否かを決定することを含み得る。直近に記録されたローカルハッシュリストと現在のローカルハッシュリストの比較に基づいて、システムは、フォルダハッシュ、サブフォルダハッシュ、または、ファイルハッシュのいずれかが、現在のローカルハッシュリストから欠けているか否かを決定できる。欠けている場合、現在のローカルハッシュリストの欠けているハッシュに対応するフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットは、ローカルファイルシステムから削除されたと考えられる。ローカルファイルシステムから削除されたフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットがある場合、プロセス５００は、５１６に移ることができる。５１６において、プロセス５００は、対応するフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットをリモートファイルシステムから削除することを含み得る。その後、プロセス５００は、図６の６０２に続いてよい。５１４に戻って、ローカルファイルシステムから削除されたフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットが無い場合、プロセス５００は、直接、図６の６０２に移ることができる。
【００９９】
６０２において、プロセス５００は、いずれかのファイルが更新、または、他の方法でリモートで変更されたか否かを決定することを含み得る。さらに、プロセス５００は、任意の新しいファイルがリモートファイルシステムに追加されたか否かを決定することを含み得る。上記比較に基づいて、ローカルファイルシステムの直近のマスターリストと比較した時の現在のリモートハッシュデータ内の相違はいずれも、ファイルが、他のクライアントコンピュータ装置（例えば、他のローカルファイルシステム）のユーザによって変更され、その変更がリモートファイルシステムで変更されたが、現在のローカルファイルシステムを含む、リモートファイルシステムへのアクセスを有するクライアントコンピュータ装置の全てには伝えられていないことを示し得る。さらに、現在のローカルハッシュリストと現在のマスターハッシュリストの間の相違はいずれも、ファイルがリモートまたはローカルで変更されたことを示し得る。各ファイルに関連付けられたタイムスタンプは、直近のバージョンを示し得る。直近のタイムスタンプを有するリモートファイルは、リモートで変更されたと考えられてよい。マスターファイルリスト内に新しいフォルダハッシュ、サブフォルダハッシュ、または、ファイルハッシュがある場合、対応するフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットは、新しいと考えられる。
【０１００】
６０２において、いずれかのファイルがリモートで更新された場合、または、リモートで記憶された新しいファイルがある場合、プロセス５００は、６０４に進むことができ、プロセス５００は、さらに、更新されたファイルと新しいファイルをリモートファイルシステムからローカルファイルシステムにダウンロードすることを含み得る。一態様においては、更新、または、他の方法で変更されたファイル全体をローカルファイルシステムにダウンロードすることができる。別の態様においては、ダウンロード時間とストレージを節約するために、共有フォルダ及び共有ファイル同期システムは、ファイルから更新または変更をパースして、更新または変更のみをローカルファイルシステムにダウンロードし得る。ダウンロード完了後、共有フォルダ及び共有ファイル同期システムは、ローカルファイルシステムにおいて、更新または変更でファイルを更新し得る。その後、プロセス５００は、６０６に移ることができる。６０２に戻って、リモートで更新されたファイルが無い場合、または、リモートファイルシステムに新しいファイルが無い場合、プロセス５００は直接、６０６に移ることができる。
【０１０１】
６０６において、プロセス５００は、共有フォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットのいずれかに対するアクセス許可を、ローカルユーザのいずれかに関して変更したか否かを決定することを含み得る。変更されていない場合、プロセス５００は、６０８で終了し得る。他方、いずれかのローカルユーザに関してアクセス許可が変更されている場合、プロセス５００は、６１０に移り、そこで、プロセス５００は、特定のローカルユーザに関する特定の共有フォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットへのアクセスが許可されているか拒絶されているかを決定することを含み得る。特定の共有フォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットへのアクセスが特定のローカルユーザに対して拒絶されている場合、プロセス５００は、６１２に移り、プロセス５００は、特定のフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットへのアクセスを拒絶されたローカルユーザに関連付けられたローカルファイルシステムから、特定のフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットを削除することを含み得る。その後、プロセス５００は、６０８で終了し得る。
【０１０２】
６１０に戻って、特定の共有フォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットへのアクセスが、特定のローカルユーザに許可される場合、プロセス５００は、６１４に移り、プロセス５００は、その特定のフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットへのアクセスを許可されたローカルユーザに関連付けられたローカルファイルシステムにリモートファイルシステムからその特定のフォルダ、サブフォルダ、ファイル、サブレベルファイル、または、ショートカットをダウンロードすることを含み得る。その後、プロセス５００は、６０８で終了し得る。
【０１０３】
図７を参照すると、ローカルファイルシステムからファイルを同期するプロセスの例のフロー図が、一般的に７００で示されている。プロセス７００は、７０２で開始し、以下のステップを定期的に行うｄｏループに入ることを含み得る。例えば、７０４において、プロセス７００は、変数Ｎを１に設定することを含み得る。変数Ｎは、共有フォルダ及び共有ファイル同期システムが個々のフォルダを一度に１つ、いずれのフォルダも繰り返すことなくトラバースすることを可能にするカウンタとして働く整数であってよい。７０６において、プロセス７００は、ローカルファイルシステムの第Ｎのフォルダの現在のハッシュを検索することを含み得る。第Ｎのフォルダの現在のハッシュは、ローカルファイルシステム内に記憶されたデータのメモリ位置をマップするのに使用されるローカルファイルシステムに関連付けられたハッシュテーブルから検索することができる。詳細には、第Ｎのフォルダの現在のハッシュは、ＧｅｔＲｏｏｔＦｏｌｄｅｒ  ＲＰＣを用いて、ローカルファイルシステムのハッシュテーブルから検索できる。別の態様においては、プロセス７００は、第Ｎのフォルダ内に記憶された任意のサブフォルダ、ファイル、サブレベルファイル、及び／または、ショートカットに関連付けられたサブフォルダハッシュ、ファイルハッシュ、サブレベルファイルハッシュ、及び／または、ショートカットハッシュに基づいて、第Ｎのフォルダの現在のハッシュを再計算できる。プロセス７００は、現在のハッシュを再計算し、その値を使用して、検索した値の精度を検証できる。または、ハッシュテーブルから現在のハッシュを検索する代わりに、プロセス７００は、上記のようにハッシュを再計算することを含み得る。
【０１０４】
ローカルファイルシステムの第Ｎのフォルダの現在のフォルダハッシュを検索した後、プロセス７００は、７０８に進み得る。７０８において、プロセス７００は、ローカルファイルシステムの第Ｎのフォルダの現在のフォルダハッシュをマスターハッシュリストに記録された第Ｎのフォルダの以前のハッシュと比較することを含み得る。特定の態様においては、比較は、第Ｎのフォルダのフォルダハッシュの実際の値を、マスターハッシュリストに記憶された第Ｎのフォルダのフォルダハッシュの直近に記録された値と比較して、第Ｎのフォルダの現在のフォルダハッシュが、第Ｎのフォルダのフォルダハッシュの直近に記録された値と異なるか否かを決定することを含み得る。
【０１０５】
７１０において、プロセス７００は、第Ｎのフォルダの現在のフォルダハッシュが第Ｎのフォルダの以前記録したフォルダハッシュと異なるか否かを決定することを含み得る。特定の態様においては、第Ｎのフォルダの現在のフォルダハッシュは、第Ｎのフォルダ内のサブフォルダと、第Ｎのフォルダ内のファイル、例えば、第Ｎのフォルダ内の任意のサブフォルダとに依存している。第Ｎのフォルダ内のいずれかのファイルのコンテンツが変わる場合、そのファイルのファイルハッシュは変わり、ファイルハッシュの変更に応答して、第Ｎのフォルダのフォルダハッシュも変わる。さらに、第Ｎのフォルダのサブフォルダ内のいずれかのファイルのコンテンツが変わる場合、ファイルのファイルハッシュは変わり、サブフォルダのサブフォルダハッシュは変わる。また、第Ｎのフォルダのフォルダハッシュも変わる。第Ｎのフォルダの新しいフォルダハッシュは、第Ｎのフォルダ内の１つまたは複数のファイルが変更され、従って、同期すべきことを示し得る。
【０１０６】
７１０において、第Ｎのフォルダの現在のフォルダハッシュが、第Ｎのフォルダの以前記録したフォルダハッシュと異ならない場合、プロセス７００は、７１２に移ることができる。７１２において、プロセス７００は、第Ｎのフォルダのフォルダハッシュが変わっていない、または、第Ｎのフォルダの以前記録したフォルダハッシュと同じという表示を記録することを含み得る。さらに、プロセスは、第Ｎのフォルダのコンテンツが、以前保存したコンテンツと同じであり、更新、変更、編集、または、他の方法で変更もされていないという表示を記録することを含み得る。プロセス７００は、共有フォルダ及び共有ファイルへの変更を追跡するために、第Ｎのフォルダのフォルダハッシュと第Ｎのフォルダのコンテンツが変わっていないという表示をファイルに記録し得る。
【０１０７】
プロセス７００は、７１４に続き、ローカルファイルシステムに別のフォルダがあるか否かを決定することを含み得る。無い場合、プロセス７００は、７１６で終了し得る。そうではなく、ローカルファイルシステムに別のフォルダがある場合、プロセス７００は、７１８に進むことができる。７１８において、プロセス７００は、Ｎの値を１増やすことを含み得る。言い換えると、Ｎの値は、Ｎの現在の値に１を足すこと、すなわち、Ｎ＝Ｎ＋１によって、再計算できる。その後、プロセス７００は、７０６に戻ることができ、プロセス７００は、ローカルファイルシステムの次のフォルダに関して上記のように続き得る。
【０１０８】
７１０に戻って、第Ｎのフォルダの現在のフォルダハッシュが、第Ｎのフォルダの以前記録されたフォルダハッシュと異なる場合、プロセス７００は、７２０に移ることができる。７２０において、プロセス７００は、第Ｎのフォルダの現在のフォルダハッシュをマスターハッシュリストに記録することを含み得る。詳細には、プロセス７００は、第Ｎのフォルダの以前のフォルダハッシュ値に関するマスターハッシュリスト内のエントリを第Ｎのフォルダの現在のフォルダハッシュ値で上書きできる。第Ｎのフォルダの以前のハッシュ値は、上書きされる前に、追跡ファイルに記録できる。さもなければ、以前のハッシュ値は、廃棄され得る。
【０１０９】
７２２に移ると、プロセス７００は、ローカルファイルシステムの第Ｎのフォルダをリモートファイルシステムの対応する第Ｎのフォルダと同期することを含み得る。詳細には、ローカルファイルシステムの第Ｎのフォルダ内で変化したファイルは、リモートファイルシステムのそれらのファイルの対応するインスタンスと同期される。プロセス７００は、ローカルファイルシステムの第Ｎのフォルダに関連付けられたフォルダツリーとサブフォルダツリーをトラバースして、どのサブフォルダハッシュ及びファイルハッシュが変化したかを決定することによって、どのファイルが更新、または、他の方法で変更されたかを素早く突き止め、決定できる。
【０１１０】
詳細には、図９に関連して以下に記載するフォルダツリーとサブフォルダツリーをトラバースして同期を要するファイル変更を突き止めるプロセスが、共有フォルダ及び共有ファイル同期システムによって使用されて、ローカルファイルシステム内のフォルダ、サブフォルダ、ファイル、または、これらの一部のうちのどれが、リモートファイルシステムと同期されるべきかを素早く確認してよい。変更または更新されたファイルが見つかると、そのファイルは、リモートファイルシステムで同期される。
【０１１１】
その後、プロセス７００は、７１４に続いてよく、プロセス７００は、ローカルファイルシステムが別のフォルダを含むか否かを決定することを含み得る。含まない場合、プロセス７００は、７１６で終了し得る。含む場合、プロセス７００は、７１８に移って、上記のように続いてよい。
【０１１２】
図８は、リモートファイルシステムのファイルを同期するプロセスの例を一般的に８００で示したフロー図である。プロセス８００は、８０２で開始して、以下のステップを定期的に行うｄｏループに入ることを含み得る。例えば、８０４で、プロセス８００は、変数Ｎを１に設定することを含み得る。変数Ｎは、共有フォルダ及び共有ファイル同期システムが個々のフォルダを一度に１つ、いずれのフォルダも繰り返すことなくトラバースすることを可能にするカウンタとして働く整数であってよい。８０６において、プロセス８００は、リモートファイルシステムの第Ｎのフォルダの現在のハッシュを検索することを含み得る。第Ｎのフォルダの現在のハッシュは、リモートファイルシステム内に記憶されたデータのメモリ位置のマップに使用されるリモートファイルシステムに関連付けられたハッシュテーブルから検索することができる。詳細には、第Ｎのフォルダの現在のハッシュは、ＧｅｔＲｏｏｔＦｏｌｄｅｒ  ＲＰＣを用いて、リモートファイルシステムのハッシュテーブルから検索できる。
【０１１３】
別の態様においては、プロセス８００は、第Ｎのフォルダ内に記憶された任意のサブフォルダ、ファイル、サブレベルファイル、及び／または、ショートカットに関連付けられたサブフォルダハッシュ、ファイルハッシュ、サブレベルファイルハッシュ、及び／または、ショートカットハッシュに基づいて、第Ｎのフォルダの現在のハッシュを再計算することを含み得る。プロセス８００は、現在のハッシュを再計算し、その値を用いて、検索した値の精度を検証できる。または、ハッシュテーブルから現在のハッシュを検索することに代えて、プロセス８００は、上記のようにハッシュを再計算することを含み得る。
【０１１４】
リモートファイルシステムの第Ｎのフォルダの現在のフォルダハッシュを検索した後、プロセス８００は、８０８に進み得る。８０８において、プロセス８００は、リモートファイルシステムの第Ｎのフォルダの現在のフォルダハッシュをマスターハッシュリストに記録された第Ｎのフォルダの以前のハッシュと比較することを含み得る。特定の態様においては、比較は、第Ｎのフォルダのフォルダハッシュの実際の値をマスターハッシュリストに記憶された第Ｎのフォルダのフォルダハッシュの直近に記録された値と比較して、第Ｎのフォルダの現在のフォルダハッシュが第Ｎのフォルダのフォルダハッシュの直近に記録された値と異なるか否かを決定することを含み得る。
【０１１５】
８１０において、プロセス８００は、第Ｎのフォルダの現在のフォルダハッシュが、第Ｎのフォルダの以前記録したフォルダハッシュと異なるか否かを決定することを含み得る。特定の態様においては、第Ｎのフォルダの現在のフォルダハッシュは、第Ｎのフォルダ内のサブフォルダと、第Ｎのフォルダ内のファイル、例えば、第Ｎのフォルダ内の任意のサブフォルダとに依存する。第Ｎのフォルダ内のいずれかのファイルのコンテンツが変わる場合、そのファイルのファイルハッシュが変わり、ファイルハッシュが変わることに応答して、第Ｎのフォルダのフォルダハッシュも変わる。さらに、第Ｎのフォルダのサブフォルダ内のいずれかのファイルのコンテンツが変わる場合、そのファイルのファイルハッシュは変わり、そのサブフォルダのサブフォルダハッシュは変わる。また、第Ｎのフォルダのフォルダハッシュも変わる。第Ｎのフォルダの新しいフォルダハッシュは、第Ｎのフォルダ内の１つまたは複数のファイルが変更され、従って、同期すべきことを示し得る。
【０１１６】
８１０において、第Ｎのフォルダの現在のフォルダハッシュが、第Ｎのフォルダの以前記録されたフォルダハッシュと異ならない場合、プロセス８００は、８１２に移ることができる。８１２において、プロセス８００は、第Ｎのフォルダのフォルダハッシュが変わっていない、または、第Ｎのフォルダの以前記録したフォルダハッシュと同じであるという表示を記録することを含み得る。さらに、プロセスは、第Ｎのフォルダのコンテンツは、以前保存したコンテンツと同じであり、更新、変更、編集、または、他の方法で変更もされていないという表示を記録することを含み得る。プロセス８００は、第Ｎのフォルダのフォルダハッシュと、第Ｎのフォルダのコンテンツが、変化していないという表示を共有フォルダ及び共有ファイルへの変更を追跡するためにファイルに記録し得る。
【０１１７】
プロセス８００は、８１４に続き、リモートファイルシステムに別のフォルダがあるか否かを決定することを含み得る。別のフォルダが無い場合、プロセス８００は、８１６で終了し得る。そうではなく、リモートファイルシステムに別のフォルダがある場合、プロセス８００は、８１８に進み得る。８１８において、プロセス８００は、Ｎの値を１増加させることを含み得る。言い換えると、Ｎの値は、Ｎの現在の値に１を足すこと、すなわち、Ｎ＝Ｎ＋１によって再計算できる。その後、プロセス８００は、８０６に戻ることができ、プロセス８００は、リモートファイルシステムの次のフォルダに関して上記のように続く。
【０１１８】
８１０に戻って、第Ｎのフォルダの現在のフォルダハッシュが、第Ｎのフォルダの以前記録したフォルダハッシュと異なる場合、プロセス８００は、８２０に移ることができる。８２０において、プロセス８００は、第Ｎのフォルダの現在のフォルダハッシュをマスターハッシュリストに記録することを含み得る。詳細には、プロセス８００は、第Ｎのフォルダの以前のフォルダハッシュ値のマスターハッシュリスト内のエントリを第Ｎのフォルダの現在のフォルダハッシュ値で上書きできる。第Ｎのフォルダの以前のハッシュ値は、上書きされる前に、追跡ファイルに記録できる。そうでなければ、以前のハッシュ値は、廃棄され得る。
【０１１９】
プロセス８００は、８２２に移り、リモートファイルシステムの第Ｎのフォルダを、リモートファイルシステムとリモートファイルシステムのフォルダ及びファイルとにアクセスを有する特定の共有フォルダ及び共有ファイル同期システムに関連付けられた各ローカルファイルシステムの対応する第Ｎのフォルダと同期することを含み得る。詳細には、リモートファイルシステムの第Ｎのフォルダ内の変化したファイルは、ローカルファイルシステムのそれらのファイルの対応するインスタンスと同期される。プロセス８００は、リモートファイルシステムの第Ｎのフォルダに関連付けられたフォルダツリー及びサブフォルダツリーをトラバースして、どのサブフォルダハッシュ及びファイルハッシュが変化したかを決定することによって、どのファイルが更新、または、他の方法で変更されたかを素早く、突き止め、決定することができる。
【０１２０】
詳細には、図９に関連して以下に記載する、フォルダツリーとサブフォルダツリーをトラバースして同期を要するファイル変更を突き止めるプロセスは、共有フォルダ及び共有ファイル同期システムによって使用されて、リモートファイルシステム内のフォルダ、サブフォルダ、ファイル、または、これらの一部のうちのどれが、ローカルファイルシステムと同期されるべきかを素早く確認してよい。変更または更新されたファイルが見つかると、そのファイルは、ローカルファイルシステムで同期される。
【０１２１】
図９を参照すると、フォルダツリーとサブフォルダツリーをトラバースして、同期を要するファイル変更を突き止めるプロセスの例のフロー図が９００として示されている。図９に示されるように、プロセス９００は、新しいフォルダが識別されると以下のステップの１つまたは複数を行い得るｄｏループを、９０２で開始できる。例えば、９０４において、プロセス９００は、変数Ｎを１に設定することを含み得る。変数Ｎは、共有フォルダ及び共有ファイル同期システムが個々のサブフォルダを一度に１つ、いずれのサブフォルダも繰り返すことなしにトラバースするのを可能にするカウンタとして働く整数であってよい。
【０１２２】
９０６において、プロセス９００は、新しいフォルダハッシュを有するとして識別されるフォルダ内の第Ｎのサブフォルダの現在のハッシュを検索することを含み得る。第Ｎのサブフォルダの現在のサブフォルダハッシュは、特定のファイルシステム内に記憶されたデータのメモリ位置のマップに使用されるファイルシステムにローカルまたはリモートに関連付けられたハッシュテーブルから検索できる。一態様においては、第Ｎのサブフォルダの現在のハッシュは、ＧｅｔＲｏｏｔＦｏｌｄｅｒ  ＲＰＣを用いて、特定のファイルシステムのハッシュテーブルから検索できる。
【０１２３】
ファイルシステムの第Ｎのサブフォルダの現在のサブフォルダハッシュを検索した後、プロセス９００は、９０８に進むことができる。９０８において、プロセス９００は、ファイルシステムの第Ｎのサブフォルダの現在のサブフォルダハッシュを、マスターハッシュリスト、現在のローカルハッシュリスト、現在のリモートハッシュリスト、または、これらの組み合わせに記録された第Ｎのサブフォルダの以前のサブフォルダハッシュと比較することを含み得る。特定の態様においては、比較は、第Ｎのサブフォルダのサブフォルダハッシュの実際の値を特定のハッシュリストに記憶された第Ｎのサブフォルダのサブフォルダハッシュの直近に記録された値と比較して、第Ｎのサブフォルダの現在のサブフォルダハッシュが、第Ｎのサブフォルダのサブフォルダハッシュの直近に記録された値と異なるか否かを決定することを含み得る。
【０１２４】
９１０において、プロセス９００は、第Ｎのサブフォルダの現在のサブフォルダハッシュは、第Ｎのサブフォルダの以前記録したサブフォルダハッシュと異なるか否かを決定することを含み得る。特定の態様においては、第Ｎのサブフォルダの現在のサブフォルダハッシュは、第Ｎのサブフォルダ内のファイルに依存する。第Ｎのサブフォルダ内のいずれかのファイルのコンテンツが変化する場合、ファイルのファイルハッシュが変わり、第Ｎのサブフォルダのサブフォルダハッシュも変わる。第Ｎのサブフォルダの新しいサブフォルダハッシュは、第Ｎのサブフォルダ内の１つまたは複数のファイルが変更され、従って、同期すべきことを示し得る。
【０１２５】
９１０において、第Ｎのサブフォルダの現在のサブフォルダハッシュが、第Ｎのサブフォルダの以前記録されたサブフォルダハッシュと異ならない場合、プロセス９００は、９１２に移ることができる。９１２において、プロセス９００は、新しいファイルハッシュを有するサブフォルダ内の各ファイルを同期することを含み得る。その後、プロセス９００は、９１４に移ることができ、９１４において、プロセスは、新しいフォルダハッシュで識別されたフォルダに別のサブフォルダがあるか否かを決定することを含み得る。別のサブフォルダがある場合、プロセス９００は、９１６に移ることができる。９１６において、プロセス９００は、Ｎの値を１増やすことを含み得る。言い換えると、Ｎの値は、Ｎの現在の値に１を足すこと、すなわち、Ｎ＝Ｎ＋１によって再計算できる。その後、プロセス９００は、９０６に戻ることができ、プロセス９００は、ファイルシステム内の新しいフォルダハッシュを有すると識別されたフォルダの次のサブフォルダに関して、上記のように続いてよい。
【０１２６】
９１４に戻って、新しいフォルダハッシュを有すると識別された特定のフォルダに別のサブフォルダが無い場合、プロセス９００は、９１８に続き得る。９１８において、プロセス９００は、ファイルシステムが、新しいハッシュを含む別のフォルダを含むか否かを決定することを含み得る。ファイルシステムが、新しいハッシュを有する別のフォルダを含む場合、プロセス９００は、９０４に戻ってよく、本明細書に記載のように続き得る。そうではなく、９１８において、ファイルシステムが、新しいハッシュを備える別のフォルダを有さない場合、プロセス９００は、９２０で終了し得る。
【０１２７】
図９は、フォルダツリーとサブツリーを一度に１つ、すなわち、１からＮの最終値までＮが増加するように順次、トラバースするプロセス９００の例を示す。複数のプロセッサ、マルチコアプロセッサ、マルチスレッド処理、インターリーブマルチスレッド処理、共有処理、または、これらの任意の組み合わせを利用する最新のコンピュータシステムを用いて、複数のフォルダツリーとサブツリーが、同時に、または、実質的に同時に、互いに並行してトラバースされてよいことを理解できる。
【０１２８】
本開示の実施形態は、以下の条項の観点で記載できる。
１．リモートファイルシステムの状態を決定することであって、前記リモートファイルシステムの状態は、リモートフォルダハッシュ値を含み、前記リモートフォルダハッシュ値は、前記リモートファイルシステムの、共有サブフォルダのリモートインスタンスに関連付けられたサブフォルダハッシュ、共有ファイルのリモートインスタンスに関連付けられたファイルハッシュ、共有サブファイルのリモートインスタンスに関連付けられたサブファイルハッシュ、共有ショートカットのリモートインスタンスに関連付けられたショートカットハッシュ、または、これらの組み合わせに少なくとも部分的に基づいて、決定される、前記リモートファイルシステムの状態を決定することと、
ローカルファイルシステムの状態を決定することであって、前記ローカルファイルシステムの状態は、ローカルフォルダハッシュ値を含み、前記ローカルフォルダハッシュ値は、前記ローカルファイルシステムの共有サブフォルダの、ローカルインスタンスに関連付けられたサブフォルダハッシュ、共有ファイルのローカルインスタンスに関連付けられたファイルハッシュ、共有サブファイルのローカルインスタンスに関連付けられたサブファイルハッシュ、共有ショートカットのローカルインスタンスに関連付けられたショートカットハッシュ、または、これらの組み合わせに少なくとも部分的に基づいて、決定される、前記ローカルファイルシステムの状態を決定することと、
前記リモートファイルシステムの状態と前記ローカルファイルシステムの状態を比較して、前記リモートファイルシステムの状態内の前記リモートフォルダハッシュ値と、前記ローカルファイルシステムの状態内の前記ローカルフォルダハッシュ値の間のあらゆる相違を決定することと、
前記ローカルファイルシステムと前記リモートファイルシステム内の、前記リモートフォルダハッシュ値が前記ローカルフォルダハッシュ値と異なる任意の共有フォルダの少なくとも一部を同期することと、
を含む、方法。
【０１２９】
２．特定の共有ファイルが一致しないファイルハッシュ対を含むか否かを決定すること、
をさらに含む、条項１に記載の方法。
【０１３０】
３．前記一致しないファイルハッシュ対は、前記特定の共有ファイルのリモートインスタンスのリモートファイルハッシュと異なる前記特定の共有ファイルのローカルインスタンスのローカルファイルハッシュを含む、条項２に記載の方法。
【０１３１】
４．前記一致しないファイルハッシュ対を有する前記特定の共有ファイルを同期すること、
をさらに含む、条項２に記載の方法。
【０１３２】
５．前記特定の共有ファイルの前記ローカルインスタンスのタイムスタンプを決定することと、
前記特定の共有ファイルの前記リモートインスタンスのタイムスタンプを決定することと、
前記特定の共有ファイルの前記ローカルインスタンスと前記特定の共有ファイルの前記リモートインスタンスのうちの直近のインスタンスに、前記特定の共有ファイルを同期することと、
をさらに含む、条項４に記載の方法。
【０１３３】
６．前記特定の共有ファイルの前記ローカルインスタンスを前記リモートファイルシステムにアップロードすること、
をさらに含む、条項５に記載の方法。
【０１３４】
７．前記特定の共有ファイルの前記リモートインスタンスを前記ローカルファイルシステムにダウンロードすること、
をさらに含む、条項５に記載の方法。
【０１３５】
８．前記一致しないファイルハッシュ対は、前記特定の共有ファイルのローカルインスタンスの欠けているローカルファイルハッシュ、または、前記特定の共有ファイルのリモートインスタンスの欠けているリモートファイルハッシュを含む、条項２に記載の方法。
【０１３６】
９．前記特定の共有ファイルの前記ローカルインスタンスを前記ローカルファイルシステムから削除すること、
をさらに含む、条項８に記載の方法。
【０１３７】
１０．前記特定の共有ファイルの前記リモートインスタンスを前記リモートファイルシステムから削除すること、
をさらに含む、条項８に記載の方法。
【０１３８】
１１．リモートファイルシステムの状態を決定することと、
ローカルファイルシステムの状態を決定することと、
前記リモートファイルシステムの状態と前記ローカルファイルシステムの状態を比較して、共有フォルダのリモートインスタンス、共有サブフォルダのリモートインスタンス、または、共有ファイルのリモートインスタンスが、共有フォルダの対応するローカルインスタンス、共有サブフォルダの対応するローカルインスタンス、または、共有ファイルの対応するローカルインスタンスのローカルファイルシステム属性と異なるリモートファイルシステム属性を含むか否かを決定することと、
前記リモートファイルシステム属性が前記ローカルファイルシステム属性と異なる前記共有フォルダ、前記共有サブフォルダ、または、前記共有ファイルを同期することと、
を含む、方法。
【０１３９】
１２．前記リモートファイルシステム属性は、前記共有フォルダの前記リモートインスタンスに割り当てられたリモートフォルダ値、前記共有サブフォルダの前記リモートインスタンスに割り当てられたリモートサブフォルダ値、または、前記共有ファイルの前記リモートインスタンスに割り当てられたリモートファイル値を含む、条項１１に記載の方法。
【０１４０】
１３．前記リモートフォルダ値は、リモートフォルダハッシュを含み、前記リモートサブフォルダ値は、リモートサブフォルダハッシュを含み、前記リモートファイル値は、リモートファイルハッシュを含む、条項１２に記載の方法。
【０１４１】
１４．前記リモートフォルダハッシュ、前記リモートサブフォルダハッシュ、及び、前記リモートファイルハッシュは、前記リモートファイルシステムのリモートハッシュテーブルに基づいて決定される、条項１３に記載の方法。
【０１４２】
１５．前記ローカルファイルシステム属性は、前記共有フォルダの前記ローカルインスタンスに割り当てられたローカルフォルダ値、前記共有サブフォルダの前記ローカルインスタンスに割り当てられたローカルサブフォルダ値、または、前記共有ファイルの前記ローカルインスタンスに割り当てられたローカルファイル値を含む、条項１１に記載の方法。
【０１４３】
１６．前記ローカルフォルダ値は、ローカルフォルダハッシュを含み、前記ローカルサブフォルダ値は、ローカルサブフォルダハッシュを含み、前記ローカルファイル値は、ローカルファイルハッシュを含む、条項１５に記載の方法。
【０１４４】
１７．前記ローカルフォルダハッシュ、前記ローカルサブフォルダハッシュ、及び、前記ローカルファイルハッシュは、前記ローカルファイルシステムのローカルハッシュテーブルに基づいて決定される、条項１６に記載の方法。
【０１４５】
１８．共有フォルダ及び共有ファイル同期システムであって、
同期モジュールとファイルシステムとを有する１つまたは複数のコンピュータ可読媒体と、
前記コンピュータ可読媒体に動作可能に結合された処理ユニットであって、前記同期モジュールを実行するように適合された前記処理ユニットと、
を備え、前記同期モジュールは、
リモートファイルシステム内の共有データ構造のリモートインスタンスに関連付けられたリモートファイルシステム属性を決定し、
ローカルファイルシステム内の共有データ構造のローカルインスタンスに関連付けられたローカルファイルシステム属性を決定し、
前記リモートファイルシステム属性が前記ローカルファイルシステム属性と異なるか否かを決定し、且つ、
前記共有データ構造内のコンテンツが前記リモートファイルシステムと前記ローカルファイルシステムで同じになるように、前記リモートファイルシステム内の前記共有データ構造の前記リモートインスタンスを、前記ローカルファイルシステム内の前記共有データ構造の前記ローカルインスタンスと選択的に同期する、
ように構成される、前記共有フォルダ及び共有ファイル同期システム。
【０１４６】
１９．前記共有データ構造は、共有フォルダ、共有サブフォルダ、共有ファイル、または、これらの組み合わせを含む、条項１８に記載のシステム。
【０１４７】
２０．前記リモートファイルシステム属性は、前記リモートファイルシステムに関連付けられたリモートハッシュテーブルから検索された、リモートフォルダハッシュ、リモートサブフォルダハッシュ、または、リモートファイルハッシュを含み、
前記ローカルファイルシステム属性は、前記ローカルファイルシステムに関連付けられたローカルハッシュテーブルから検索された、ローカルフォルダハッシュ、ローカルサブフォルダハッシュ、または、ローカルファイルハッシュを含む、条項１８に記載のシステム。
【０１４８】
結論
構造的特徴及び／または方法論的行為に固有の言葉で技術を記載したが、添付の請求項は、記載した特徴や行為に必ずしも限定されないことは理解されたい。むしろ、特徴及び行為は、このような技術の実施態様例として記載している。
【０１４９】
プロセスの例の動作は、個々のブロックの形で示され、これらのブロックを参照して概略を記載している。プロセスは、ブロックの論理フローとして示され、各ブロックは、ハードウェア、ソフトウェア、または、これらの組み合わせで実施してよい１つまたは複数の動作を表してよい。ソフトウェアの文脈では、動作は、１つまたは複数のコンピュータ可読媒体に記憶されたコンピュータ実行可能命令を表し、コンピュータ実行可能命令は、１つまたは複数のプロセッサによって実行されると、１つまたは複数のプロセッサが記載の動作を行うことを可能にする。一般的に、コンピュータ実行可能命令は、特定の機能を行う、または、特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、モジュール、コンポーネント、データ構造等を含む。動作の記載順は、制限と解釈されることを意図しておらず、任意の数の記載の動作は、任意の順で実行されてよく、任意の順で組み合わされてよく、複数の副動作にさらに分割されてよく、及び／または、記載のプロセスを実施するように並行して実行されてよい。記載のプロセス、または、その一部は、１つまたは複数の内部若しくは外部のＣＰＵ若しくはＧＰＵ、及び／または、ＦＰＧＡ、ＤＳＰ若しくは他のタイプのアクセラレータ等の１つまたは複数のハードウェア論理回路等、１つまたは複数の装置１０４、１０６、１０８、１３０、１３２、１３４と関連付けられた資源によって行われてよい。
【０１５０】
上記方法及びプロセスの全ては、１つまたは複数の汎用コンピュータまたはプロセッサによって実行されるソフトウェアコードモジュールで具体化され、及び、当該ソフトウェアコードモジュールを介して完全に自動操作されてよい。コードモジュールは、任意の種類のコンピュータ可読記憶媒体または他のコンピュータ記憶装置に記憶されてよい。方法の一部または全ては、代わりに、特殊なコンピュータハードウェアで具体化されてよい。
【０１５１】
特に、「ｃａｎ」「ｃｏｕｌｄ」「ｍｉｇｈｔ」または「ｍａｙ」等の条件語は、別段の記載のない限り、その文脈内で、ある例は、特徴、要素、及び／または、ステップを含み、他の例は、特徴、要素、及び／または、ステップを含まないことを示すと理解される。従って、このような条件語は、一般的に、ある特徴、要素、及び／または、ステップは、１つまたは複数の例にとって必ず必要であるということを示唆してはおらず、また、１つまたは複数の例が、ユーザ入力若しくはプロンプトの有無にかかわらず、ある特徴、要素、及び／または、ステップが含まれるか否か、または、任意の特定の例で行われるべきか否かを決定する論理を必ず含むということも示唆してはいない。「Ｘ、Ｙ、または、Ｚの少なくとも１つ」という句等の接続語は、別段の記載のない限り、項目、条件等が、Ｘ、Ｙ、Ｚのいずれか、または、これらの組み合わせであってよいことを示すと理解すべきである。
【０１５２】
本明細書に記載された、及び／または、添付図面に示された、フロー図の任意のルーチン記述、要素、または、ブロックは、ルーチンの特定の論理関数または要素を実施する１つまたは複数の実行可能命令を含むモジュール、セグメント、または、コードの一部を潜在的に表すとして理解されるべきである。当業者であれば理解するような含まれる機能に応じて、要素または機能が削除され得る、または、実質的に同時、若しくは、逆の順を含む、図示または記載された順序とは別の順序で実行され得る代替実施態様は、本明細書に記載の例の範囲内に含まれる。多くの変更及び修正が、上記例に対して行われてよく、それらの要素は、他の許容可能な例に含まれるとして理解されるべきであることを強調しておく。全てのこのような修正及び変形は、本開示の範囲内にあり、請求項によって保護されるものとする。
【図１】
0006419319.tif 000002
【図２】
0006419319.tif 000003
【図３】
0006419319.tif 000004
【図４】
0006419319.tif 000005
【図５】
0006419319.tif 000006
【図６】
0006419319.tif 000007
【図７】
0006419319.tif 000008
【図８】
0006419319.tif 000009
【図９】
0006419319.tif 000010