(58)【調査した分野】(Int.Cl.,DB名)
前記コンテンツアイテムは、コンテンツアイテムのコレクション、メッセージ、データ構造、画像、ビデオ、またはリンクのうちのひとつ以上を含む請求項1から4のいずれか1項に記載の方法。
前記データベースは、前記ユーザの全ての写真、前記ユーザの全てのルーム、またはそれらのルームの全てのコンテンツのうちのひとつ以上を保持する請求項6から8のいずれか1項に記載の方法。
前記コンテンツアイテムへの様々なアクセスレベルを有するひとつ以上のリスナにローカルキャッシュによりアクセスを提供することによって、前記ローカルキャッシュに前記コンテンツアイテムを登録することをさらに含む請求項1から5のいずれか1項に記載の方法。
【発明を実施するための形態】
【0019】
ユーザデバイス上で、クラウドベースのコンテンツマネージメントシステムへのアクセスを提供するシステムおよび方法が開示される。種々の例示的な実施の形態では、コンテンツが既にコンテンツマネージメントシステムのサーバにアップロードされていたかのように、ユーザデバイス上でユーザによって自身のユーザアカウントにローカルに追加されたコンテンツが表示されてもよく、かつコンテンツとの全ての相互作用が容易になされてもよい。
【0020】
この機能は、既存のコンテンツマネージメントシステム又はサービスに組み込まれてもよく、または別々のアプリケーションとして提供されてもよく、または強化されたコンテンツマネージメントサービスを提供する別々のアプリケーションにおける多くの特徴のうちのひとつとして提供されてもよい。例示的なコンテンツマネージメントアプリケーションは例えばスマートフォンなどのユーザデバイスで実行されてもよく、コンテンツマネージメントシステムに登録されたユーザのアカウントにアクセスしてもよい。このようなアプリケーションは、例えば共有仮想空間機能などの複雑な多者相互作用をサポートしてもよい。ユーザデバイスでローカルに実行されるコンテンツマネージメントアプリケーションは最終的にはそのようなひとつ以上のサーバによりサポートされてもよいが、あたかもそのアプリケーションがユーザデバイスでローカルで実行されているかのように共有仮想空間機能が見えるようにコンテンツマネージメントアプリケーションを使用することで、拡張機能が利用可能となってもよい。これは、ユーザデバイスがサーバと弱く接続されているか断続的に接続されているか切断されているか否かによる。ユーザが、接続が制限されている場合でもそのユーザのデバイスが十分に対話的であるように感じることを可能とすることにより、ユーザに提供されるユーザ体験と機能の充実性とを大きく向上できる。
【0021】
なお、以下、「デバイス(device)」及び「コンテンツマネージメントシステム(content management system)」との語は、この中で、広範なストレージプロバイダ及びデータマネージメントサービスプロバイダと、電子デバイスとユーザデバイスとを広く指すものとして用いられる。また、「コンテンツアイテム(content item)」との語は、この中で、広範なデジタルデータ、ドキュメント、テキストコンテンツアイテム、音声コンテンツアイテム、ビデオコンテンツアイテム、コンテンツアイテムの一部、及び/又は他の種類のデータを広く指すものである。コンテンツアイテムはまた、ファイル、フォルダ、又は、コンテンツアイテムのコレクション、プレイリスト、アルバムのような異なる振る舞いで一緒にコンテンツアイテムをグループ化する他の機構を含み得る。ここで、「ユーザ(user)」の語もまた、この中で広く用いられ、シングルユーザ、複数のユーザ、認証されたアカウント、代わりに自動的に動作する又は人間の命令により動作するアプリケーション又はプログラム、任意の他のユーザタイプ、又はこれらの任意の組み合わせに相当し得る。ここで、「ジェスチャ(gesture)」及び「複数のジェスチャ(gestures)」との語はまた、この中で広く用いられ、1以上の運動、動き、ホバリング、推論、サイン、又は1つ以上のセンサとの任意の他の物理的な相互作用、又は、発話によるコマンドや網膜の追跡に基づく目の動きの解釈などの、これらの任意の組み合わせに相当し得る。「連続するリアルタイム画像(continuous real-time image)」はまた、この中で広く用いられ、1つ以上の撮影コンポーネントを介して撮影されたライブ画像、撮影された連続画像、記録された画像、又は撮影コンポーネントを介して撮影され得る任意の他の種類の画像、又はこれらの任意の組み合わせに相当し得る。
【0022】
本発明は、様々なコンポーネント及びコンポーネントの配置、様々な技術、方法、又はステップの手順と配置を具体化し得る。参照される図面は、実施の形態を説明することのみを目的としており、本発明を限定するものとして解釈されるものではない。それぞれが互いに独立して又は他の特徴との組み合わせにおいて用いることができる、様々な発明の特徴が以下に記載される。
【0023】
図1は、様々な実施の形態に従う例示的なシステムを示す。システム100は、ネットワーク106を跨いでコンテンツマネージメントシステム104と通信するユーザデバイス102aと102bとを含む。2つのユーザデバイスのみがシステム100内に示されているが、任意の数のユーザデバイスがコンテンツマネージメントシステム104及び/又はネットワーク106と作用し、上述の説明は単なる例示であることを、当業者は認識する。
【0024】
ネットワーク106は、伝送制御プロトコル及びインターネットプロトコル(「TCP/IP」)、ハイパーテキスト・トランスファー・プロトコル(「HTTP」)及び/又はワイヤレス・アプリケーション・プロトコル(「WAP」)を含み、但しこれらに限定されない、任意の数のプロトコルを含み得る。例えば、ユーザデバイス102aとユーザデバイス102b(まとめると102)とは、TCP/IPを用いてコンテンツマネージメントシステム104と通信し、そして、上位レベルでは、コンテンツマネージメントシステム104におけるウェブサーバとHTTPを用いて通信するために、ブラウザを用い得る。
【0025】
様々なユーザデバイス102は、デスクトップコンピュータ、モバイルコンピュータ、モバイル通信デバイス(例えば携帯電話機、スマートフォン、タブレット)、テレビ、セットトップボックス、及び/又は、任意の他のネットワーク利用可能デバイス、を含む、但しこれに限定されない、コンテンツマネージメントシステム104と通信する。様々なタイプのユーザデバイスは、スマートフォン、携帯電話機、タブレットコンピュータ、パーソナルデジタルアシスタント(PDAs)、ラップトップコンピュータ、デジタル音楽プレイヤ、及び/又は、タッチ感応式表示インターフェースを含むことができる、任意の他の種類のユーザデバイスを含む、但しこれに限定されない、ものであり得る。様々なタッチ感応式表示インターフェースは、液晶ディスプレイ(LCD)、モノクロディスプレイ、カラーグラフィックスアダプタ(CGA)ディスプレイ、エンハンストグラフィックスアダプタ(EGA)ディスプレイ、可変グラフィックスアレイ(VGA)ディスプレイ、任意の他のディスプレイ、を含む、又はこれらの任意の組み合わせを含む、但しこれに限定されない、ものであり得る。ある実施形態では、タッチ感応式ディスプレイインターフェースは、ジェスチャを受け付けて検出するために、1つ以上のプロセッサに接続されたマルチタッチパネルを含み得る。マルチタッチパネルは、例えば、1つ以上の行トレースを有し、及び/又はライントレースを駆動する、及び1つ以上の列トレースを有し、及び/又はラインを検知する、容量性の検知媒体であり得る。マルチタッチパネルは、この中でタッチ感応式ディスプレイインターフェースの1つの例として記載されるが、当業者は任意のタッチ感応式ディスプレイインターフェースが使用されることを認識する。更に、様々な種類のユーザデバイスは、ある実施形態では、1つ以上の撮影コンポーネントを含み得る。例えば、ユーザデバイス102は、前向きカメラ及び/又は後向きカメラを含み得る。
【0026】
コンテンツマネージメントシステム100は、ユーザが認証されたアカウントを使ってコンテンツを蓄積できるようにし、また、検索、修正、ブラウズ、同期及び/又は他のアカウントにコンテンツを共有するようなマネージメントタスクを実行する。ある実施形態では、ユーザデバイス102上の対応するユーザインターフェース(例えばスタンドアロンアプリケーション、クライアントアプリケーション等)は、ユーザがコンテンツマネージメントシステム104のモジュールによって提供される機能を実行することができるように、コンテンツマネージメントインターフェースモジュールを用いて実装され得る。システム100の更なる詳細な記載は、
図6を参照して以下に示される。
【0027】
図2は、それぞれがネットワーク(例えば携帯電話ネットワーク)を跨いでコンテンツマネージメントシステムサーバに接続される、3つのユーザデバイス(例えばスマートフォン)の3のユーザの、簡略化された例示的なネットワークを模式的に示す。
図2を参照すると、コンテンツマネージメントシステム(「CMS」)サーバ200およびユーザデバイス202a、202b、202cが示される。ユーザデバイス202aはネットワーク1 206aを介してCMSサーバ200と接続され、ユーザデバイス202bはネットワーク2 206bを介してCMSサーバ200と接続され、ユーザデバイス202cはネットワーク3 206cを介してCMSサーバ200と接続される。ユーザデバイス202a−cはCMSサーバ200と異なるネットワーク接続を介して接続され、かつ、物理的に異なる場所に位置する可能性があるので、ネットワーク接続を介した相互作用は異なるネットワーク遅延を伴う可能性があり、かつユーザデバイス202a−cのうちのひとつ以上は1日のうちの様々な時点でネットワーク接続の喪失を経験するかもしれない。
【0028】
コンテンツマネージメントアプリケーションはユーザデバイス202a−cのそれぞれにおいてローカルで実装されるものの、ユーザ間の競合は発生しうる。例えば、3人のユーザのそれぞれが3人のユーザ全てで共有される仮想空間を生成することを要求する場合、ユーザデバイス202aから発せられた要求が、ユーザデバイス202bからの要求のほうが先に発せられたにもかかわらず、CMSサーバ200に先に届く場合が生じうる。したがって、サーバは、共有仮想空間を生成する最初の要求がユーザデバイス202bから発せられたにもかかわらず、ユーザデバイス202aを共有仮想空間を始めたものとみなす場合がある。そのような競合条件により、CMSサーバ200および/またはユーザデバイス202a−cにコンテンツアイテムや共有仮想空間の重複した複製物が生成されるなどの望まない結果が生じる可能性がある。
【0029】
図2の模式的なネットワークは、ユーザデバイス202a−cでローカルに実行されるコンテンツマネージメントアプリケーションが完全な相互作用性を提供するべきものである場合に、そのアプリケーションが、CMSサーバ200との接続を必要な帯域をサポートするのに十分な高いサービス品質で維持することをどのように必要とするかを示す。ネットワーク接続の問題により、関連コンテンツの少なくともいくつかがCMSサーバ200で受け付けられる前に、(i)オブジェクトが生成されること(例えば、ユーザが写真のアップロードを試行する)や(ii)複数参加者、複数コンテンツアイテムのデータ構造やデータ構成が生成されること(例えばユーザが共有仮想空間を生成する)や(iii)ユーザがコンテンツアイテムやデータ構造と相互作用すること、などの多くのインスタンスが生じうる。このようなインスタンスには、本発明の例示的な実施の形態に従う様々なシステム及び方法が有効である。
【0030】
コンテンツおよびそのコンテンツとの相互作用の複雑なローカル生成の例:「ルーム」
本発明のある側面を十分に説明するため、共有仮想空間機能についてのローカルな相互作用が参照される。そのような機能は、本願と共通の譲渡の下「共有仮想空間を提供するシステム及び方法」と題して出願された、米国仮特許出願第61/945,814号に詳細に記載される。その出願の開示内容はここに参照により本願に組み入れられる。
【0031】
ルームアプリケーションは複数参加者共有仮想空間を記述し、「ルームズ(rooms)」または単数の「ルーム(room)」として知られる場合がある。ルームは、コンテンツマネージメントシステムのユーザの集合によってアクセス可能な仮想空間として定義されてもよい。そこでは、ユーザはコンテンツアイテムや該アイテムに関するメッセージを相互に共有してもよい。コンテンツマネージメントシステムは、ユーザのルームおよび全てのコンテンツアイテム、メッセージ、並びにそれらに関連する相互作用を管理してもよい。ルームの複数参加者は、ルームの生成者と、最初のコンテンツを生成者と共有した全ての他の者と、および/または続いて招待された他の者と、を含んでもよい。これらの参加者はルームの「メンバ」と称される場合がある。
【0032】
ある実施の形態では、ルームは、コンテンツマネージメントシステムのユーザがコンテンツアイテムやコンテンツアイテムについてのメッセージを他のユーザと共有したときにいつでも、自動的に生成されてもよい。一例では、ひとつ以上のコンテンツアイテムをユーザの連絡先のひとつ以上と共有するための共有要求が受け付けられてもよい。その共有要求の受け付けに応じて、ひとつ以上の共有コンテンツアイテムの複製やそれへのリンクを含むルームが自動的に生成されてもよい。ルームは、システムサーバの割り当てられたメモリ位置(例えば、
図1のデータストア118)に関連付けられてもよい。ルームは、ユーザおよび他のメンバの両方からアクセスされてもよく、各メンバはさらなるコンテンツ(例えばコンテンツアイテムおよびメッセージ)をルームに追加してもよい。任意のコンテンツがルームに追加されたときはいつでも、全てのメンバ参加者に通知してもよい。ある実施の形態では、他の非メンバに通知してもよく、コンテンツマネージメントシステムのユーザとして登録されていない者に対してさえも通知してもよい。通知は、インバンド(すなわち、コンテンツマネージメントシステム内の通信を介して又はそのようなシステムによって提供されるアプリケーションを介して)、アウトバンド(例えば電子メールやSMSやソーシャルメディアの通知やポストを介して)、又はこれらの通信経路の任意の組み合わせであってもよい。
【0033】
ルームアプリケーションで使用されたように、ルームは「メンバ」を有すると言える。実施の形態によっては、メンバは、ルーム機能を提供するコンテンツマネージメントシステムの排他的な登録ユーザであってもよい。他の例示的な実施の形態では、コンテンツマネージメントシステムの未登録ユーザは全体的にまたは部分的にルームのメンバとして指定されてもよい。これらの実施の形態では、所与の者は、その者のコンテンツマネージメントシステムの登録ユーザとしての地位に依らずに、ルームのメンバであってもよい。
【0034】
ある実施の形態では、ルームのメンバに、ルームの任意のコンテンツをコンテンツマネージメントシステム上の自身の個人アカウントに複製すること、および/または電子メールやSMSを介して他の者にそのようなコンテンツの複製を自由に送るかソーシャルメディアアプリケーションにポストを自由に送ること、を許可してもよい。ルームはルームコンテンツを保持しルームコンテンツとの相互作用を促進するよう設計された恒久的または準恒久的なデータ構造であるため、ルームに招待された参加者のそれぞれはいつでもルームにアクセスでき、便利である。ある実施の形態では、ルームに追加されたコンテンツアイテムは別々の「ルーム(rooms)」データベースにコピーされ、ロックされてもよい。すなわち、コンテンツアイテムの元の所有者が後に元のコンテンツアイテムを自身のユーザアカウントのなかで変更した場合であっても、そのような変更はルームの外のコンテンツアイテムには適用されなくてもよい。ルームに追加された任意のコンテンツは、例えば無期限であってもよい所定の期間、ルームにセーブされてもよい。
【0035】
ある実施の形態では、ユーザによって共有仮想空間に対して要求されたローカル変更(例えば、コンテンツやポストの追加、新たな者の追加など)は、その変更が要求されるとすぐにローカルで表示されてもよい。変更をローカルで表示する前にその変更がサーバに送信されることを待つことは不要であってもよい。したがって、多くのルームがローカルで生成されてもよく、種々のコンテンツアイテムがルームに追加されてもよく、種々の者がルームにメンバとして追加されてもよく、これらは、この情報がコンテンツマネージメントシステムのサーバに届く前に生じてもよい。ユーザにとっては、それはあたかも相互作用が生じるとすぐに要求が完了したかのように見えてもよい。この機能は、本発明のシステムおよび方法によって可能となってもよい。したがって、「ルーム」機能は本発明の種々の態様を説明するための明らかな例としての役割を果たしてもよい。そのようなルームの複雑さは本発明の種々の実施の形態によって解決される課題を際立たせるからである。
【0036】
上述の通り、種々の例示的な実施の形態では、ユーザコンテンツおよびそれとの相互作用は、最終的には、コンテンツマネージメントシステムのサーバによって管理されてもよい。しかしながら、ユーザは、データ通信ネットワークを介してサーバと通信するユーザデバイス上で実行されるコンテンツマネージメントアプリケーションによって提供されるユーザインターフェースを介して、コンテンツマネージメントシステムとやりとりしてもよい。そのような実施の形態では、(i)コンテンツアイテムやコンテンツデータ構造(例えば、写真、ビデオ、「ルーム」など)の生成、(ii)コンテンツアイテムやメッセージのユーザアカウントまたは既存のルームへの追加、(iii)ルームからコンテンツマネージメントシステム内の個人的アカウントへのコンテンツのダウンロード、および(iv)ユーザ自身のアプリケーションとの相互作用に対する他の応答、に関して、ユーザデバイスのユーザがユーザインターフェースのシームレスな応答を体験できることは非常に望ましい。これらの目的は、ユーザインターフェースとコンテンツマネージメントアプリケーションとの間のユーザデバイス上の接続性は恒久的である一方、コンテンツマネージメントアプリケーションとリモートサーバとの間の接続はしばしば断続的であり得るため、容易に達成できるとは限らない。
【0037】
ある実施の形態では、コンテンツは一意のインデックス番号又はコンテンツに割り当てられ又は関連付けられた識別子を参照して管理されてもよい。標準的なコンテンツマネージメントシステムでは、各ユーザには一意の識別子が割り当てられ、そのユーザの全てのコンテンツ及び相互作用は、コンテンツマネージメントシステムが適切にコンテンツアイテムを自身のアカウントに蓄積すると共に、サポートされた様々な相互作用を該アカウントで実装できるようにするために、一意の識別子を利用してもよい。
【0038】
ユーザがあるコンテンツの共有を開始することによりルームを生成するか、コンテンツをルームに追加するか、によらずに、サーバにとっては動作は基本的に同じに見えてもよい。しかしながら、前者の場合、共有が行われたときにルームIDは存在せず、一方で後者の場合、ルームIDは既に存在する。ユーザが最初にルームを生成する場合、ルームIDに対する要求はコンテンツマネージメントアプリケーションからコンテンツマネージメントシステムのサーバに送信されてもよい。サーバからルームIDを受け取るまでコンテンツマネージメントアプリケーションが待たなければならない場合、ルームIDが受信されるまで該アプリケーションはルームを生成したりルーム内でコンテンツを示したりすることができない。この処理は、クライアントアプリケーションとサーバとの間の接続性が断続的である場合に待ち状態を引き起こす可能性がある。ユーザデバイスと遠隔サーバとの間の弱いまたは断続的なデータ接続が完全ローカル機能の見かけを損ねないようにするために、サーバがアクションに応答していない場合やサーバが要求を満たしていない場合やサーバが要求を処理していない場合であっても、ユーザによって要求されたアクションはユーザインターフェースに反映されてもよい。
【0039】
例えば、簡単なケースを例にとると、ユーザデバイスがコンテンツマネージメントシステムのサーバと弱いまたは断続的な接続を有しているかまたはそのサーバと接続されていない状況でも、ユーザはルームを生成すると決めてもよい。ユーザはルームで共有する多くのコンテンツアイテムを選択し、ルームに追加する多くの者を選択してもよい。共有に際して、コンテンツマネージメントアプリケーションはユーザデバイス上にルームを生成してもよい。その時点で、コンテンツマネージメントアプリケーションはユーザインターフェースに新たなルームを知らせてもよく、サーバに新たなルームを知らせるよう少なくとも試みてもよい。サーバがそのときアクセス可能でなければ、サーバに新たなルームを知らせるメッセージは、適切なネットワーク接続が利用可能となったときにサーバに送られるべきものとしてキューに入れられてもよい。いずれにせよ、ユーザがルームにコメントを追加した場合、それは、そのメッセージがサーバにまだ送信されていないかサーバで処理されていない場合でも、ローカルユーザインターフェースのルームに表示されてもよい。すなわち、ユーザがルームにコメントしても実際かなりの時間そのコメントが見えないとそのユーザは当惑しうるので、「ギャップを埋める」ために何かがローカルでなされなければならない。したがって、接続が依然として貧弱または存在しない場合でも、本発明の例示的な実施の形態では、ユーザはそれにもかかわらずスムーズでほぼシームレスなローカル体験を経験できる。そのような実施の形態では、コンテンツマネージメントアプリケーションは、後にサーバに「ルームを生成してルームIDを割り当てよ」というメッセージを送信するまで待つ間に、ユーザデバイス上で活動をシミュレートしてもよい。
【0040】
活動をシミュレートするために、コンテンツマネージメントアプリケーションはローカルIDおよび新たなポストテーブル(例えば、どのポストがルームにあり、どのルームがあるかなどを管理するテーブル)を生成してもよい。コンテンツマネージメントアプリケーションは、あたかも新たなルームがグローバルに存在し、コンテンツがルームに本当にポストされたかのように、ローカルでこれらの結果を生成してもよい。サーバが応答したときに各ユーザデバイス上でのシームレスな相互作用を維持するために、グローバルルームIDをローカルルームIDと関連付け、ローカルルームIDをグローバルルームIDで置き換えてもよい。アクションが2度実行されることを防ぐために、またはアクションが全く実行されないことを防ぐために、ローカルルームIDがキューに入れられたインストラクションに含まれる場合、インストラクションがキューに入っているがまだ実行されていない間に、またはインストラクションが実行された後に、IDの交換が生じてもよい。インストラクションが実行されている間に交換が生じると、不確実性が生じうる。
【0041】
例えば、ユーザはスマートフォンで写真を撮り、またそのユーザはそのスマートフォンでルームアプリケーションを実行していて新たなルームにおいてひとつ以上の他のユーザと写真を共有しようとするかもしれない。スマートフォンがコンテンツマネージメントシステムのサーバと接続されていない(例えば、ネットワークの問題のために)場合、写真およびルーム生成要求は、ローカルで実施される一方でサーバへのアップロードのためにキューに入れられたままとなってもよい。したがって、これらの写真および新たなルームにはローカルIDのみが関連付けられてもよい。ルームや各写真に対するグローバルIDを要求するタスクおよび写真をルームに追加するタスクは、ローカルで実行される一方でキューに入れられてもよい。これらのインストラクションのうちのいくつかが実行されている途中にサーバとの接続が回復した場合、タスクに抜けが無いように、かつタスクが2度実行されないように(すなわち、ローカルIDを参照して1回目の実行が行われ、かつグローバルIDを参照して2回目の実行が行われる)、ローカルIDとグローバルIDとの置き換えを管理する必要があるであろう。
【0042】
従来の(サーバベースの)アプローチ
遅い、断続的な、存在しない、またはそうでなければ貧弱なネットワーク接続が大きな待ち状態をどのように導入するかを示すため、
図3は、ユーザデバイスで実行される従来のコンテンツマネージメントシステムアプリケーションの例示的な処理の流れを示す。
図3に示される例示的な従来のアプリケーションでは、ユーザによって生成されたコンテンツアイテムやデータ構造や動作を、コンテンツマネージメントシステムがその生成を認めてオブジェクトや構造や動作にグローバルIDを割り当てるまでの間管理する方法やシステムは存在しない。
【0043】
図3を参照すると、処理の流れは開始で始まり、ステップ310に進む。そこではユーザAが写真をアップロードし、その写真をユーザデバイスを介してユーザB、ユーザCのそれぞれと共有する。説明のために、
図3に示されるアプリケーションは、ルームアプリケーションで説明された新規な「ルーム」機能を組み入れるがまるで従来のサーバベースのシステムに実装されたかのように描かれるコンテンツマネージメントアプリケーションである。そのようなアプリケーションでは、ユーザは写真やビデオなどのコンテンツアイテムをひとつ以上の他のユーザとコンテンツマネージメントシステムのサーバで共有することによって共有仮想空間を生成可能である。コンテンツマネージメントシステムのサーバは、コンテンツアイテムの受領と、ルームの生成と、関与するユーザデバイスとの後の通信と、を管理する。最初の共有がなされると、コンテンツマネージメントシステムによって管理される共有仮想空間が存在してもよい。したがって、ステップ310では、以下の2つの論理オブジェクトが生成されてもよい。(1)ユーザAのユーザデバイスからコンテンツマネージメントシステムにおけるその者のアカウントへアップロードされたコンテンツアイテム、および(2)ユーザBおよびユーザCと共有されることが指定されたコンテンツアイテムがサーバで受け付けられた後にコンテンツマネージメントシステムによって定義されてもよい共有仮想空間。したがって、グローバルIDを割り当てる必要がある2つのオブジェクトが存在する。加えて、コンテンツマネージメントシステムはコンテンツアイテムを共有仮想空間と関連付ける必要がある。この関連付けは、共有仮想空間と関連付けられた記録に反映されてもよい。
【0044】
処理の流れはステップ310からステップ320へと進み、そこではユーザデバイスは310で説明されたユーザアクションを処理する。したがって、ユーザデバイスはコンテンツアイテムおよび共有仮想空間に対するグローバルIDを要求する。ここで、
図3の説明的な処理ではグローバルIDのみが存在することは理解されるべきである。コンテンツアイテムがユーザBおよびCと共有されると、共有仮想空間がユーザAによって生成されてもよい。それは「ABCルーム」と称される。ルームや共有仮想空間をそのルームのメンバにしたがって指定するのが簡単で便利だからである。上述の通り、これらのオブジェクトの両方に対するグローバルIDが必要とされるだけでなく、コンテンツアイテムとABCルームとをそれらのグローバルIDによって関連付けるためのインストラクションを送信する必要がある。
【0045】
処理の流れは320からステップ330へ進む。本発明との違いがここに存在する。すなわち、ユーザデバイスは、それがそれらのオブジェクトを存在するものとして扱うことができる前に、および/またはそれがそれらのオブジェクトをユーザデバイス上のコンテンツマネージメントアプリケーション内で表示する前に、コンテンツマネージメントシステムのサーバからグローバルIDが送られてくるのを待たなければならない。ネットワーク遅延や接続に何ら問題がなければ、ユーザはステップ330による遅れやアーチファクトを感じることはない。しかしながら、何らかの理由でネットワークの遅延がある場合、またはネットワークの輻輳がある場合、または例えば、ユーザがスマートフォンを用いセルラネットワークを介してコンテンツマネージメントシステムにアクセスしておりそのユーザがシグナルがほぼ無いかぎりぎり在るか存在しないようなエリアを進んでいる場合、ユーザデバイスがネットワークから切断されている長い期間が存在しうる。そのような場合、ステップ330は非常に苛立たしいものとなりうる。写真がコンテンツマネージメントアプリケーションで表示されるまで、コンテンツアイテムを共有可能となるまで、ルームが存在するようになるまで、およびコンテンツアイテムがルームで表示されるまで、ユーザは数秒、数分、数時間またはそれ以上も待つことを要求されるかもしれない。
【0046】
処理の流れはステップ330からステップ340へと進み、そこではユーザデバイスは(i)コンテンツアイテムおよび(ii)ABCルームのそれぞれに対するグローバルIDを受け付ける。次に、処理の流れはステップ350へと進み、そこではユーザデバイスはここでグローバルIDを使用して、(a)写真をユーザのアカウントに格納し、(b)ABCルームを生成し、かつ(c)写真をルームのデータベースに格納することでその写真がABCルームに関連付けられて表示されるようにしてもよい。処理の流れはステップ350からステップ360へと進み、そこではユーザデバイスはユーザAのアカウントにおいて写真を表示し、ユーザのコンテンツマネージメントシステムアプリケーション内でABCルームを表示し、かつABCルーム内で写真を表示する。処理の流れはそこから出て終わる。
【0047】
上述のように、ユーザデバイスがコンテンツマネージメントシステムにぎりぎり接続されているか弱く接続されているか接続されていないときにいつでも、ユーザは
図3に示される処理の流れの大きな欠点を感じてしまうことになろう。この状況を改善し、付随する待ち状態や競合状態や他の欠陥を防ぐために、種々の例示的な実施の形態において
図4に示される例示的な処理の流れが実装されてもよい。
【0048】
ユーザデバイスのユーザインターフェースモジュールおよび処理モジュールへの分割;各モジュールの機能
本発明の例示的な実施の形態では、ユーザデバイスは2つのモジュールに分割されてもよい。これは
図4に模式的に示される。それを参照すると、ユーザデバイス410はユーザインターフェース(「UI」)モジュール415とプロセッサモジュール420とを有する。UIモジュール415は、プロセッサモジュール420との恒久的な(配線による等)接続430を有する。プロセッサモジュール420はネットワーク通信を扱ってもよい。プロセッサモジュール420はコンテンツマネージメントシステム(「CMS」)サーバ460とのデータネットワーク440を介した断続的接続450を有する。
【0049】
プロセッサモジュール420は、例えばアンドロイド(登録商標)およびiOSタイプのデバイスを含む、種々のコンピュータプラットフォームで使用可能なソフトウエア共有ライブラリを含んでもよい。上述の通り、プロセッサモジュール420はCMSサーバ460との接続を維持し、したがってサーバとユーザデバイス410上で実行されるコンテンツマネージメントアプリケーションとの間で情報を交換する。プロセッサモジュール420はUIモジュール415に、ユーザのアカウントのビューを、グローバルデータおよびローカルデータの両方を考慮に入れた形で、提供する。したがって、例えば、ルームアプリケーションでは、プロセッサモジュール420はユーザのルームおよび各ルームのコンテンツに関するデータを提供してもよい。そのデータは、(i)サーバと同期したデータと(ii)ローカルで生成されたがサーバとまだ同期していないデータとを組み合わせる。
【0050】
本発明の例示的な実施の形態では、プロセッサモジュール420は「キャッシュ」と称されるデータベースを備えてもよい。キャッシュは基本的にサーバ状態のローカルキャッシュである。この「キャッシュ」データベースは、ユーザの写真の全て、ユーザのルームの全て、およびそれらのルームのコンテンツの全てを保持してもよい。そのデータベースは例えば「デルタ」スレッドによって最新の状態に維持されてもよい。デルタスレッドは、ユーザデバイスがCMSサーバ460との十分な接続を有するときに実行され、サーバに例えば「私はA点までにおいてこの全データを有する」と知らせるような、連続的に実行されるプロセスであってもよい。CMSサーバ460は次いで、キャッシュは最新の状態であると応答するか、またはキャッシュに追加される必要がある新たな情報を提供してもよい。ユーザデバイス410が新たなデータを生成していない場合、デルタスレッドは実行され、CMSサーバ460から変更を受け付け、その変更をキャッシュに適用する。したがって、ユーザが実際コンテンツや相互作用を追加しないような場合、比較的シンプルである。UIモジュール415は基本的に、プロセッサモジュール420に、例えば所与のルームやルームの集合のコンテンツを要求する。プロセッサモジュール420は次いでキャッシュを参照し、現在のデータを返す。このデルタスレッドが変更すると、プロセッサモジュール420は、UIモジュールが特定のルームまたはルームの集合に対する興味を表明した場合、UIモジュール415にこれらの変更をプッシュしてもよい。後により十分に説明される通り、UIモジュール415はルームについてリスナを登録することにより、興味を表明してもよい。このようにすることで、個々全てのキャッシュに対する更新をプロセッサモジュール420からUIモジュール415にプッシュする必要がなくなり、したがって処理量を低減し電力消費を最小化できる。
【0051】
ある特定の例では、ユーザはいくつかのルームのメンバであってもよい。しかしながら、その者が実際よく見たり相互作用したりするのはそれらのルームのうちの小さな部分集合のみであってもよい。それらのルームに対して興味が表明される。しかしながら、その者が6ヶ月間訪れたことのないルームについては、キャッシュの変更をプッシュする必要はなく、またそのようなルームのコンテンツに対する変更についてそのユーザにアラートを出す必要もない。
【0052】
リスナ機能
本発明の例示的な実施の形態では、上述の通り、UIモジュール415はコンテンツアイテムや他のユーザやルームに対する興味を、例えばそのコンテンツに対する「リスナ」を登録することによって表明してもよい。例えば、ルームリスナやポストリスナや「ルームメンバ」リスナまでもが存在してもよい。したがって、デルタスレッドが実行されると、それはサーバ状態の変更をピックアップし、登録リスナのいずれかがその変更に興味があるか否かを判定してもよい。もしある場合、例えば「ここに新たなルームがある、ここに更新されたルームがある、ここに新たなポストがある、ここにこのポストに入る写真がある」と述べつつ、これらのリスナにメソッドを呼び出してもよい。
【0053】
それは、ユーザが実際何も変更していないようなシンプルな場合のことである。より複雑なケースは、ユーザがUIモジュール415を介してローカルコンテンツを生成しているような場合である。そのような場合、ローカルデータベースに既に格納されたがまだCMSサーバ460に送信されていないデータや状態があってもよい。このデータは、持続的に保持可能なように、プロセッサモジュール420のユーザデバイス「キャッシュ」にも格納されてもよい。したがって、ユーザがポストを生成し、次いで例えばその者のスマートフォンがクラッシュした場合、アプリケーションはそのポストをセーブしてもよい。その結果、ユーザがそのフォンを再スタートしたとき、そのポストは、失われること無く、コンテンツマネージメントシステムサーバに送信可能となる。
【0054】
本発明の例示的な実施の形態では、コンテンツマネージメントアプリケーションとのユーザの相互作用は種々の動作を生成してもよい。そのような動作は動作キューに送信されてもよい。例えば、ユーザがルームに対してとったアクションは動作キューにおいて表現されてもよい。これらのアクションは、例えば、新たなルームの生成、新たなポストの生成、ルームへのメンバの追加、ポストからの写真の保存、またはユーザがルームについての通知の受信を止めるようルームを「既読」とマークすること、を含んでもよい。これら全ての事象はルームまたはルームのリストのユーザビューに影響を与えうる。したがって、それら全ては、ユーザに適切なUIビューを描いてみせるために、既存の状態の上に適用されてもよい。したがって、ユーザが見たいものは、(i)データベース内にあり、サーバとマッチされた既存の状態、プラス(ii)UIが表すべきものを得るために、その状態の上となるようキューに入れられたローカル動作の全てのリプレイ、である。したがって、例えば、(サーバ観点で)2つのルームがあり、かつ(ユーザデバイス観点のみで)ユーザが2つの新たなルームを追加した場合、それらの2つの新たなルームがまだサーバに送信されていない場合であっても、UIモジュール415は、ユーザがアプリケーションを使用するとき、4つ全てのルームをユーザに描いてみせてもよい。
【0055】
例として、次にシンプルなケースが提供される。ユーザはキャッシュに既にひとつ以上のルームを有し、動作キューにおいていくつかの新たなルームを要求してもよい。例えば、前にキューに入った動作が依然として実行されているか、ユーザデバイスが適切な接続を有さないために、これらの新たなルームはCMSサーバ460にまだ送信されていなくてもよい。UIモジュール415は次いでリスナを登録してもよい。本発明の例示的な実施の形態では、UIモジュール415は次いでサーバが既に知っているルームに関する情報をキャッシュからフェッチしてもよい。プロセッサモジュール420は次いで動作をそれらが生成された順序で実施し、2つの新たなルームを追加するようユーザのルームリストを更新してもよい。その2つの新たなルームはこの時点ではローカルにのみ知られている。動作が既存のルームを変更する場合、プロセッサモジュール420はキャッシュからフェッチされたルームのコピーを変更してもよい。これは例えばポストの数をインクリメントしたり、新たなメッセージを追加したり、新たなコンテンツアイテムを追加したりすることによる。動作が新たなルームに対応する場合、プロセッサモジュール420はキャッシュに既に保持されているルームのリストに追加してもよい。したがって、キャッシュデータをとり、それを動作キューデータと組み合わせた後、プロセッサモジュール420はリスナに送信可能な情報集合を有してもよい。例えば、プロセッサモジュール420はUIにおいてユーザに示される必要があるルームのビューを所有してもよい。
【0056】
したがって、動作ビューはユーザデバイスにローカルであってもよいことは理解されるであろう。加えて、ある動作はそれらがサーバに送信される前に遅れる可能性があることを注意しておく。例えば、ユーザが10個の写真を共有し、10個全ての写真がまだカメラアップロードされていない(すなわち、ユーザのコンテンツマネージメントシステムに追加されていない)場合、写真を共有する動作は進める前に、10個の写真がアップロードされてしまうまで待ってもよい。その共有動作が往生する間にデバイス上で他の動作が実行されてもよいが、そのルームに対する他の動作は実行されてはならない。したがって、その意味で、係属中のアップロードはそのルームにおける全てのことについてのブロッカとして作用してもよい。したがって、動作キューは単なる先入れ先出しよりも少し複雑であることは注意されるべきである。
【0057】
本発明の例示的な実施の形態では、ユーザがコンテンツを追加した場合、またはユーザがUIモジュール415を介して何らかのアクション、例えばルームへのポストの追加、を起こした場合、プロセッサモジュール420は、それがその動作をローカルで処理するときにCMSサーバ460に並列コマンドを送信してもよい。次に、CMSサーバ460は、サーバデータベースを更新し、コンテンツマネージメントアプリケーションが実行されている全てのユーザのデバイスをピンすることによって、そのコマンドを処理してもよい。その結果、そのようなデバイスのそれぞれはデルタスレッドを実行し、その状態をキャッシュデータベースに適用するのは上述の通りである。(例えば特定のユーザデバイスとのネットワーク接続の欠如のために)デルタスレッドが動作しない場合、それは例えば続けてリトライしてもよい。ユーザデバイスがコンテンツマネージメントアプリケーションを実行している限り、デルタスレッドはサーバとの通信を試行できる。さらに、接続が失われると、デルタスレッドは接続が回復するまで待つことができる。
【0058】
図2に示される模式的ネットワークを再度参照すると、ユーザデバイス202a−cが既存のルームを変更するか、または同じ人々との同じルームの生成を試行している場合、それらのいくつかまたは全てが接続を失うことの結果として、および上述の通り全てのユーザアクションがローカルで処理されるために、ユーザデバイス202a−cのそれぞれは皆が共通して知っていることプラスその者のみが知っていることのみを認知する可能性がある。したがって、
図2のユーザのうちの2または3のユーザはそれぞれ、同じルームを生成し、それに異なる一連の写真を入れるかもしれない。全てのユーザデバイスが接続状態に戻ると、サーバデータベースに書き込まれた順番で全てが収束し、したがって、コンテンツマネージメントシステムサーバが新たなルームを登録し、ユーザのデルタスレッドのそれぞれがコンテンツマネージメントシステムサーバと同期すると、ローカルビューは変更されてもよい。したがって、ローカルの活動は、他の活動(ローカルデバイスは、他の活動がローカルで実施されたときに他の活動について知らなかった)がローカルの活動を上書きする程度で変更されうる。
【0059】
本発明の例示的な実施の形態では、この処理は以下の態様で動作してもよい。ルーム内の全てのポストは、全てのルームと共に、自身に関連付けられた「ソートキー」を有してもよい。サーバ上のソートキーは例えばそのアイテムがサーバデータベースに書き込まれた時刻を記録するタイムスタンプから生成されてもよい。ソートキーはストリングのようなものであり、例えば「aaa」や「aab」などのような、デバイスがどのようにソートするかを知っているものである。そのような例示的な実施の形態では、ユーザがローカルで生成するいかなるものも、サーバ上のいかなるものよりも大きくなることが保証されているソートキーを有するであろう。したがって、ユーザがローカルで生成する全てのものは、基本的にサーバ上のあらゆるものの最新の端部にソートされてもよい。しかしながら、それがサーバに書き込まれるにつれて、それはそれがサーバに行き着いたときに基づく新たなソートキーを受け付けてもよい。それにより、全ての者(すなわち、全てのメンバ)は最終的にルームの矛盾の無いビューを得ることができる。
【0060】
したがって、ユーザがポストを追加すると、そのポストを追加するためのサーバに対するコマンドはそのポストの新たなサーバ表現を返す。それはユーザのローカルキャッシュに書き込まれるものであって、同時に動作は消去される。したがって、その場合、ルームのユーザローカルビューは、例えばその者が写真を撮ってそれをオフラインで見ていた場合、おそらくは変わりうる。
【0061】
したがって、例えば、複数の参加者がルームに関与することに起因して、かつ上述の通りそれらの参加者のそれぞれがコンテンツマネージメントシステムサーバに断続的にアクセスすることに起因して、
図2に示される通り、所与のルーム、例えば「AMNルーム」、のあるメンバはポストAを見てポストBを追加してもよく、したがってその者はその者のデバイス上のAMNルームにポストAおよびポストBを見る。加えて、AMNルームの他のメンバはオフラインであり、ルームにポストAを有し、次いでポストCを追加してもよい。したがって、そのメンバはその者のデバイス上でポストAを見て、その後同じルームでポストCを見てもよい。両方のユーザは最終的には、例えばどちらのユーザが最初に接続を回復するかに依って、AMNルーム内のポストA、B、CまたはA、C、Bのいずれかに行き着くであろう。
【0062】
本発明の例示的な実施の形態では、各ユーザデバイスが接続を再度得て動作をサーバに書き込むにつれて、矛盾の無い(グローバルな)ソートキーが得られ、したがって例えばAMNルームの両方のメンバは同じものを見ることとなろう。最終的には、そのような衝突を解決するためにある規則が選択されなければならない。そのような規則は例えばコンテンツマネージメントシステムに最初にセーブされたものが勝つというようなものであってもよい。したがって、所与のユーザについて、そのユーザがオンラインに復帰したときにそのユーザのポストの上にポストが挿入される可能性がある。
【0063】
2人のユーザがそれぞれ相手とルームを生成する場合や、例えば相手および同じ追加的参加者とルームを生成する場合であってその2人のユーザが両方ともオフラインである場合は、他の興味のあるケースである。ある実施の形態では、ルームアプリケーションで説明したように、ルームは、ルームのメンバである人々の一意の集合によってサーバ上で定義される。したがって、それらのポストの両方はコンテンツマネージメントシステムによって同じルームに表示されるであろう。なぜならば、アリスがボブとコンテンツを共有し、ボブがアリスとコンテンツを共有する場合、それはサーバ上のアリス−ボブルームであって、どちらのコマンドがサーバに最初に届いたかに依らないからである。それらの者が両方ともオフラインのときにそれを行ったとしても、それらの者が両方ともオンラインに復帰したときにはそれらの者はポストについて同じグローバルID、およびルームについて同じグローバルIDに行き着くであろう。なぜならば、サーバはそれらを単にマッチングするのであって、ルーム生成がそれらの者のそれぞれにおいてオフラインで生じたとしてもそれらは2つの別個のルームには行き着かないからである。唯一の難事は、最初にオンラインに復帰した者がどちらであっても、その者のポストがルームで最初にリストされることである。これは、ルームにおいてポストが時系列でリストされることを前提とする。
【0064】
しかしながら、関連の例では、ユーザAがユーザB、CおよびDとルームを生成し、ユーザBがユーザA、C、EおよびFとルームを生成し、ユーザAおよびBの両方がそのときオフラインである場合、おのおのは最初、それらの者がルームに追加したポストが何であれそのようなポストを伴う生成されたルームを見る。したがって、ユーザAは、自己のユーザデバイス上で、自己が最初にルームに追加した写真が何であれその写真と自己がその後追加したポストとを伴うABCDルームを見る。同様に、ユーザBは、自己のユーザデバイス上で、自己が最初にルームに追加した写真が何であれその写真と自己がその後追加したポストとを伴うABEFルームを見る。しかしながら、それぞれがオンラインに復帰したとき、ABCDルームおよびABCEFルームの両方が存在するであろう。前者はユーザAからのコンテンツを伴い、後者はユーザBからのコンテンツを伴う。ユーザA、Bのそれぞれはコンテンツを互いと共有することを意図していたのではあるが、2つのルームがマージされない場合、コンテンツは同じルームに存在できない。ルームアプリケーションで述べたように、ユーザの一意の集合のそれぞれは自身のルームであり、ルーム内にはポストがある。各ポストの中には例えば写真やメッセージなどのアイテムがある。
【0065】
プロセッサモジュール420はリスナが実装しなければならないインターフェースを定義するが、実際の実装はUIモジュール415において行われることを注意しておく。したがって、ある例示的な実施の形態では、プロセッサモジュール420はいわば、UIモジュール415に「あなたはこれらのメソッドを有するオブジェクトを生成する必要がある」と言うものであり、次いでUIモジュール415は各プラットフォームの各リスナについて実装を生成する。したがって、リスナが生成され、次いでUIモジュール415によって必要とされなくなるとリスナは死ぬ。追加的に、ある例示的な実施の形態では、UIモジュール415は、ユーザが実際に所与のルームを見るまでは、そのルーム内のポストに対する興味を表明しなくてもよい。しかしながら、そのような例示的な実施の形態では、ルームのリストについて、UIモジュール415はアプリケーションが実行されている期間中はずっとそれを維持してもよい。この場合、ユーザがそのパネルをスライドオープンしたときにすぐにルームのリストをユーザに示すことができる。ある実施の形態ではこれは単にルームのリストであってもよく、他の実施の形態ではそれはルームのリストおよびルームに追加された新たなポストに関する通知の両方であってもよい。
【0066】
UIモジュール415が何についてのリスナを登録するかを決定する基準は変わってもよく、いくつかのファクタに依存してもよいことは理解される。目標は、ユーザがUIモジュール415に表示させたいと思う蓋然性の高い任意のタイプのコンテンツについてのリスナを登録することである。それは例えば最近見られたルームおよびコンテンツであってもよく、この場合の「最近」は種々の尺度を使用して定義されてもよく、または参加の頻度や相互作用の頻度が高いルームおよびコンテンツであってもよい。
【0067】
ローカルIDのグローバルIDでの置換
本発明の例示的な実施の形態では、全てのコンテンツには2つの識別子が割り当てられてもよい。例えば、ルームアプリケーションでは、ルームおよびポストの両方は2つのIDを有するか、2つまでのIDを有してもよい。同じことは、写真やビデオなどの標準的なアプリケーションにおける任意のタイプのコンテンツやコンテンツアイテムにも言える。したがって、サーバに書き込まれた任意のポストやサーバに書き込まれた任意のルームはグローバルIDを有してもよい。グローバルIDは例えばエッジストア(Edge-stored)128ビット数や他の数や十分に大きなストリングであってもよい。一般に、グローバルIDは、全てのコンテンツをコンテンツマネージメントシステム全体に亘って一意に特定するのに十分なほど大きい必要がある。しかしながら、上記説明から明らかなように、全てのオフライン動作をサポートするために、例えばローカルで生成されたがまだサーバに送信されていないポストおよびルームを参照するローカルIDもまた必要である。したがって、本発明の例示的な実施の形態では、UIモジュール415が例えば写真やポストやルームなどのコンテンツアイテムを生成すると、UIモジュール415はプロセッサモジュール420からローカルIDを受け付ける。UIモジュール415は必要がある限りそのローカルIDを使用し続けてもよい。上述の通り、動作がサーバに行き着くと、プロセッサモジュール420はキュー内のローカルIDを参照する全ての動作を、新たに受け付けたグローバルIDで更新してもよい。
【0068】
それにもかかわらず、ルックアップテーブルやトランスレーションテーブルなどは維持されてもよい。これは、例えば、UIモジュール415がローカルID Xを伴うルームを生成し、プロセッサモジュール420に種々のポストをルームXに追加するよう言い続けている場合であって、プロセッサモジュール420の内部ではルームXは既に新たなグローバルIDを伴うルームYにアップグレードされている場合、プロセッサモジュール420は、ルームX(これはUIモジュール415が古いローカルIDを使用することでルームXを知ることによる)へのポストを求めるUIモジュール415からのこれらの入来要求を、ルームYへのものすなわちプロセッサモジュール420内でローカルで(かつコンテンツマネージメントシステムサーバでグローバルに)使用されているグローバルIDへのものであると翻訳できる必要があるためである。したがって、本発明の例示的な実施の形態では、ローカルIDとグローバルIDとを関連付けるトランスレーションテーブルは、UIモジュール415から来てローカルIDを参照する動作が無くなるのに十分な期間、維持されてもよい。しかしながら、そのような期間の後はそれは破棄されてもよい。これは例えば、後述のようにユーザデバイス上のアプリケーションがリスタートされたときであってもよい。
【0069】
ローカルIDの追加的な使用法:ポスト有効性;ローカルIDの持続性
この時点までの説明において、十分なローカル機能や、新たにオフラインで生成されたコンテンツおよびそのようなコンテンツを整理するためのデータ構造(例えば、ルーム、アルバム、コレクション等)との基本的に即時の相互作用を促進するために、ユーザデバイス上で内部的にローカルIDを使用してもよい。しかしながら、ローカルIDは他の用途を有してもよい。したがって、本発明の例示的な実施の形態では、ローカルIDを使用することで、例えばルームやポストなどのコンテンツを生成するときにアイテムの有効性を保証してもよい。
【0070】
潜在的な課題として、プロセッサモジュール420がコンテンツマネージメントシステムサーバに例えば新たなルーム、例えばルームABC、を生成するよう告げることがある。しかしながら、サーバからプロセッサモジュール420への応答は、ルームが実際生成されたことを教えるものであるが、ユーザデバイスのクラッシュやネットワーク接続の喪失などのためにその応答が失われることがある。そのような場合、プロセッサモジュール420は、CMSサーバ460によって生成が成功したと告げられるまで、この動作をリトライし続けるであろう。サーバにとっては、そのような要求のリトライは複数の要求のように見える。しかしながら、例えばルームやポストなどのコンテンツを生成するためのこれらの動作のそれぞれが、ユーザデバイスのプロセッサモジュールによって割り当てられたグローバルに一意なローカルIDでタグ付けされている場合、サーバはこれら2回目や3回目の要求を無視し、それが既に生成した同じグローバルIDを単に返すことができる。それは同じローカルIDを伴う要求を探し、それを重複として破棄してもよい。そうすることで、ユーザデバイスが何かを生成する要求をサーバに2回以上送信した場合でも、重複は生成されないであろう。したがって、種々の例示的な実施の形態では、ローカルIDはUI観点への翻訳からと、アイテムの有効性を保証するためと、の両方において有用である。
【0071】
したがって、そのような例示的な実施の形態では、プロセッサモジュール420はローカルIDを含む要求をCMSサーバ460に送信してもよい。そのような要求は、例えば、「ユーザAによるユーザMおよびNとのルームの生成、ローカルID AFF2 B994 D223 1178 ユーザAのデバイス XYZ」というフォームを有してもよい。次いで、コンテンツマネージメントシステムサーバはこれらのローカルIDをトラックすることによって、例えば同じコンテンツアイテムやルームに対する後の重複要求を拒否したり単に無視したりしてもよい。
【0072】
したがって、最初にルームが生成されたときに、それに割り当てられたローカルIDが存在する。ルームを生成するためのその最初の要求がコンテンツマネージメントシステムサーバに到着するとすぐに、PMは動作キューを見てそのルームに関する全ての係属中の動作を、受け付けられたグローバルルームIDを使用するよう更新する。しかしながら、ある実施の形態では、ポストIDについて、個々全てのポストは、それが既存のルームに対して生成されたものであっても、ローカルポストIDを有することは注意されるべきである。ポストIDはその特定のポストの内部でのみ使用され、したがって置換されることはない。なぜならば、それらは動作がサーバで成功するとすぐに動作と共に消えるからである。
【0073】
しかしながら、ローカルルームIDはルームが生成されるとすぐに破棄されてもよい。ある実施の形態では、UIモジュール415はそれがリスタートするまでローカルIDを維持してもよい。しかしながら、UIモジュール415において次回アプリケーションがリスタートすると、ユーザデバイスはそのローカルルームIDについて全く知らないであろう。したがって、(PMがコンテンツマネージメントシステムサーバからグローバルIDを受け付けると、)UIモジュール415とプロセッサモジュール420との不和に対処するためにトランスレーションテーブルが存在する。例示的な実施の形態では、UIモジュール415がコンテンツやポストやルームをそのIDで参照可能とすることが望ましく、その場合プロセッサモジュール420は必要に応じてそれらを単に翻訳すればよくなる。上述の通り、アプリケーションがリスタートすると、トランスレーションテーブルを保存する必要はなくなるかもしれない。
【0074】
ローカルIDの他の興味のある側面すなわちプッシュ通知に関する側面があることは注意されるべきである。プッシュ通知はiPhone(登録商標)で一般に使用されているものであり、サーバはユーザにメッセージを送り、該メッセージは小さなポップアップメッセージや通知として現われる。それはユーザにアプリケーションを立ち上げさせることもある。これは例えば、ユーザがCNNやザウェザーチャネル(登録商標)などから電子メールやアラートを受け、ポップアップや通知をタップして関連するウェブサイトに行くようなことである。本発明のコンテキストでは、そのようなプッシュ通知は基本的にCMSサーバ460とUIモジュール415との間の接続として使用されてもよい。その接続はユーザデバイスのプロセッサモジュール420によって仲介されない。以下は例示的シナリオである。ユーザが自己のiPhone(登録商標)で実行されるコンテンツマネージメントアプリケーションでルームを生成した場合、UIモジュールはそのルームのローカルIDをメモリに格納する。サーバがそのルームのグローバルIDを生成した後、iPhone(登録商標)のプロセッサモジュールがまだコンテンツマネージメントシステムサーバからメッセージの返信を受けていない場合、かつ次の数分の間にだれかがそのルームに応答した場合、コンテンツマネージメントシステムサーバはその応答を見ると、元のユーザのiPhone(登録商標)にプッシュ通知を送信してもよく、そのプッシュ通知はそのルームのグローバルIDまたはその抽象化物またはそのコンテンツへのリンクを有してもよい。これらの通知がどれくらい大きくなれるかについては非常に厳しい制限があるので、一般にローカルIDをも含めるのに十分な余地はない。
【0075】
したがって、コンテンツマネージメントシステムサーバは遠隔IDを送信してもよい。なぜならば、それは、他のルームのメンバからのポストが既にサーバに到達している限り、皆にとって便利だからである。したがって、これは、遠隔IDがプロセッサモジュールを通過すること無く急いでUIモジュールに戻ることができる方法である。
【0076】
図5:ルームアプリケーション内の例示的な処理の流れ
図5を参照すると、本発明の例示的な実施の形態に係る例示的な処理の流れが示される。処理の流れは開始で始まり、ステップ510に進む。そこでは、ユーザAは写真をアップロードし、ユーザデバイス上でそれをユーザMおよびユーザNと共有する。または例えばユーザAは既存の写真をユーザMおよびNと共有する。この機能は
図3の310と類似しており、複数のオブジェクトを生成する。複数のオブジェクトはコンテンツマネージメントシステムによって特定される必要があり、その結果それらのオブジェクトは実装または実行可能となる。例えば、ユーザAが写真をアップロードするとき、その者は識別子が割り当てられなければならない新たなコンテンツアイテムを生成する。ユーザがさらにそれを2人の他のユーザ、例えばユーザMおよびユーザN、と共有するとき、上述およびルームアプリケーションで説明した通りルームが生成される。ルームにはIDが割り当てられる必要があり、そして実装される。「実装」により、ルームがコンテンツマネージメントシステム上のユーザのアカウント内に現われることが分かる。あるいはまた、ユーザが既存の写真をユーザMおよびNと共有するのみである場合、写真は既にID、表面上はグローバルID、を有しており、新たなそれを生成する理由はないから、このユーザアクションで生成されるのはルームのみである。
【0077】
しかしながら、この処理は実際は多くのステップを含む。ルームが生成されねばならず、それにID(すなわち、「ルームID」)が割り当てられる。加えて、例えばルームアプリケーションで説明した通り、(i)最初にコンテンツアイテムをルームのメンバと共有することにより、または(ii)後にコンテンツアイテムを既存のルーム内で共有することにより、ルームに置かれた任意のコンテンツアイテムについて、そのコンテンツアイテムのコピーを生成し、別個のデータベースに格納しなければならない。同時に、共有元のアカウントに原本を格納しなければならない。それが変更されないようにするためである。これはルームのいくつかの例示的な実施の形態のプロトコルであり、ルームアプリケーションでより十分に説明される。写真やコンテンツアイテムの別個のコピーを生成することに加えて、それはレコード内でルームと関連付けられてもよい。該レコードは、ルーム内の全てのアイテムおよびメンバに関する情報と、それらのコンテンツアイテムに関するルーム内でのメンバによる相互作用と、を保持する。例えば、ある例示的な実施の形態では、ルームのメンバは、(i)コンテンツアイテムに関するメッセージをポストし、(ii)自身のアカウントにコンテンツアイテムをコピーし、かつ(iii)望まれる場合に他のタスクを実行してもよい。それらのそれぞれについて、関与するオブジェクトの識別子と関与するルームの識別子とを参照するインストラクションがユーザデバイス上で発行されるであろう。
【0078】
処理の流れはステップ510から分岐し、ステップ520および525に並行して進む。この分岐は、ネットワークへの接続が遮断されている又は断続的である場合であっても、ユーザデバイス上のシームレスな相互作用を容易にする、本発明の例示的な実施の形態に係る新規な機能を説明するものである。520を参照すると、ユーザデバイスのプロセッサモジュールは写真のグローバルIDを要求し、ステップ510での共有により生成された「AMNルーム」のグローバルIDを要求する。これは
図3の320と十分に類似する。しかしながら、並行して、および遅延や待ち期間無く(すなわち同時に)、525において、プロセッサモジュールはローカルIDを写真およびAMNルームに割り当てる。これにより、ルームと同様、写真は、コンテンツマネージメントシステムサーバによって正式に認識されてなかったとしても、ユーザデバイスにおいて「存在(exist)」することができる。さらに、この並列処理は510におけるユーザアクションが発生すると直ぐに始まってもよい。これにより、遅延を回避し、シームレスなローカル相互作用を生成し、それをユーザに感じさせることができる。
【0079】
処理の流れはステップ520および525からステップ530へと進み、そこではプロセッサは525で生成された各ローカルIDをルックアップテーブルやトランスレーションテーブルなどに格納する。それらのテーブルは、接続が回復するとコンテンツマネージメントシステムサーバから受け付けることが想定されている対応するグローバルIDのそれぞれのためのスペースを有する。例えばトランスレーションテーブル、データベースレコード、又は、何らかの他の便利で論理的な関連であって、高速かつ容易にグローバルID‐いったんコンテンツマネージメントシステムのサーバから受信すると‐とステップ525において生成されたローカルIDとをマッチするための後続処理を可能にする論理的な関連、などの任意のデータ構造が、ルックアップテーブルの代わりに使用されてもよい。
【0080】
処理の流れはステップ530から再び分岐し、一方の経路はグローバルIDを扱い、他方の経路はローカルIDを扱う。したがって、ステップ540において、UIモジュールは写真およびAMNルームのそれぞれについてリスナを登録する。この点で、ステップ540は
図3のステップ330と類似する。しかしながら、並行して545では、プロセッサモジュールは(i)写真をユーザのアカウントに追加し、(ii)AMNルームを生成し、かつ(iii)写真をAMNルームに格納する。これらは全てローカルIDを使用する。ここで説明される写真のアカウントへの追加は、写真が生成されるとすぐに、それが操作される前にサーバがグローバルIDを返送するのを待つこと無く、ユーザのアカウント内で写真を表示することを暗示する。
【0081】
同様に、ルームアプリケーションで示されたように、AMNルームがコンテンツマネージメントシステムサーバの観点からはまだ「存在」しないにもかかわらず、AMNルームはユーザのコンテンツマネージメントシステムアプリケーション内で表示されてもよい。ここで、留意すべき重要なことは、ユーザAによって生成されたAMNルームはユーザAのユーザデバイス上で表示されることであり、これは同様なAMNルームがユーザMまたはユーザNによって既に、例えば自身の写真をユーザAおよびNまたはユーザAおよびMと共有することによって生成されている場合であってもそうである。また事情次第では、コンテンツマネージメントシステムサーバの観点から他の「AMNルーム」が既に存在することである。言い換えると、並列AMNルームがユーザAの、ユーザMのおよびユーザNのユーザデバイスのそれぞれにおいて現われうる。しかしながら、それらのうちのひとつのみがコンテンツマネージメントシステムサーバによって認識されているか認識され、最終的にはグローバルIDが割り当てられるであろう。
【0082】
処理の流れはステップ540からステップ550へと進み、そこではユーザデバイスのプロセッサモジュールのデルタスレッドは写真およびAMNルームのそれぞれについてグローバルIDを受け付け、ルックアップテーブルにおいてそれらを対応するローカルIDに関連付ける。例えば、ルックアップテーブルの各ローカルIDに対して、対応するグローバルIDが関連付けられる。これは、例えば、ユーザデバイスがグローバルIDを要求するときにローカルIDやそれへの参照を含めることで達成可能である。その結果、グローバルIDがサーバから返ってきたときには、それがどのローカルIDと対応するかが知られていることとなる。また、これにより、ユーザデバイスがステップ520の同じリクエストを繰り返し再送信し、かつサーバからの応答を受信しなかった場合に、複数のグローバルIDが誤って割り当てられることを防ぐことができる。これは、例えば、ネットワーク遅延が発生したりユーザデバイスのクラッシュが発生し、そのクラッシュの後にキャッシュ等からユーザデバイスによって要求が再送された場合に生じうる。あるいはまた、例えば、(ステップ520において)サーバに送信されたグローバルIDの要求は、サーバが重複した要求を除去できるように、動作又はインストラクション番号又は他の一意の識別子を含んでもよい。
【0083】
同様に、
図5の右側において、処理の流れはステップ545からステップ555へと進み、そこではユーザデバイスは、写真IDやルームIDや他のものであれ適切なローカルIDを使用して、写真やルームを含む動作キュー内の全ての動作を参照する。これは、ユーザAが、その者が望む限り、写真および新たに生成されたルームの両方を操作し、動かし、かつそれらと相互作用し続けることができることを意味する。写真が関与する全ての相互作用、例えば写真にメッセージを添えたり「いいね(like)」インジケータをアクチベートしたりすることや、他の任意の相互作用、例えば写真をルームのメンバでない他の者と共有すること、は、ユーザデバイスによって、写真のローカルIDを使用して参照される。同様に、ユーザが今度は追加的な写真を、それらが既に自己のアカウントにアップロードされたか否かにかかわらず、ルームAMNに追加すると決定した場合、それらの写真がまだローカルIDを有していない場合は、それらの写真の全てにローカルIDが与えられ、それらの写真は、ステップ525で割り当てられたルームのローカルルームIDを使用してルームAMNと関連付けられるであろう。したがって、ユーザデバイスが接続されていない期間の長さに依存して、どれだけ多くのオブジェクトが生成され、それらのオブジェクトとの相互作用を要求するどれだけ多くのインストラクションがキューに入り、それら全ては唯一の利用可能なID、すなわちステップ525で割り当てられたローカルID、を使用してなされるかを、容易に想像することができる。
【0084】
処理の流れはステップ550および555からステップ560で再度統合され、そこではプロセッサモジュールは今やステップ550でグローバルIDを受け取っているので、キュー内の動作の各ローカルIDを対応するグローバルIDで置き換え、これらのアイテムのそれぞれがUIにおいて登録リスナを有している限り、グローバルIDをUIにプッシュする。しかしながら、上述の通り、プロセッサモジュールにて登録リスナのないグローバルIDが受け付けられた場合、(それが特定するアイテムはユーザに表示されることを想定されていないので)そのグローバルIDをUIモジュールにプッシュする必要はなく、したがって、種々の例示的な実施の形態では、それはUIにプッシュされないであろう。したがって、ユーザAのアカウントに現われるコンテンツアイテムや、ルームにコピーされルームと関連付けられたコンテンツアイテムや、上記の任意のものは全て、以前はユーザデバイスにおいてローカルIDのみで参照可能であった。そのようなコンテンツアイテムを参照するために使用されている全てのローカルIDは、今やそのローカルIDが新たに取得されたグローバルIDで置き換えられるよう処理され、その結果、ユーザデバイスのローカル状態はサーバの状態と同期されうる。
【0085】
処理の流れはステップ560からステップ570へと進む。ここでは、処理は、ユーザがさらなる写真を自己のアカウントに追加したか、または他の共有を要求したか(すなわち、追加されたコンテンツアイテムや追加されたルームやルームへのコンテンツの追加やキューへのインストラクションの追加があるか)を尋ねてもよい。YESの場合、処理の流れはステップ510に戻り、そこでは、写真の場合、写真がまだユーザのアカウントの一部でないならその写真がアップロードされ、共有の場合、他のユーザとの共有は銘記され、それらの共有の結果として生成される必要があるルームが生成される。570においてノーである場合、処理の流れは終了する。
【0086】
なお、
図5の処理の流れは、単なる説明であって、コンテンツマネージメントシステムでID番号が割り当てられ得る、任意のコンテンツアイテム、データ構造、メッセージ又はそれとの相互作用に等価に適用されることを注意しておく。
【0087】
図6は、様々な実施の形態に従う例示的なシステムを示す。ある実施の形態では、
図6のシステム600は、システム100の要素をより細かいレベル(例えばモジュール、アプリケーション等)で表わすことを除き、
図1のシステム100と実質的に類似し得る。
【0088】
ある実施の形態では、ユーザデバイス102は、ユーザデバイス102上のコンテンツアイテムシステム108a及び108b(まとめると108)内にローカルに蓄積されたコンテンツアイテム110a及び110b(まとめると110)、及び/又はコンテンツマネージメントシステム104(例えばデータストア118)上に離れて蓄積されている等のコンテンツアイテムを、生成し、アクセスし、修正し、及び管理するために使用され得る。例えば、ユーザデバイス102aは、コンテンツマネージメントシステム104のデータストア118に離れて蓄積されているコンテンツアイテム110bにアクセスし得、ユーザデバイス102a上のコンテンツアイテムシステム108a内にコンテンツアイテム110bをローカルに蓄積する場合もしない場合もある。引き続きこの例では、ユーザデバイス102aは、コンテンツアイテム110bを、一時的に、ユーザデバイス102a上のキャッシュ内にローカルに蓄積し、コンテンツアイテム110bの版(revisions)を生成し、コンテンツアイテム110bの版は通信されてコンテンツマネージメントシステム104のデータストア118に蓄積され得る。オプションとして、コンテンツアイテム110aのローカルコピーはユーザデバイス102aに蓄積され得る。ある実施の形態では、データストア118は、コンテンツアイテムの1つ以上のコレクション132を含み得る。例えば、コレクション132は、類似する属性(例えばメタデータ)を有する、及び/又は類似のコンテンツを含む1つ以上のコンテンツアイテムを含み得る。
【0089】
ある実施形態では、ユーザデバイス102は、デジタル画像及び/又はビデオを撮影し記録するためのカメラ138(例えば138a及び138b)を含み得る。ユーザデバイス102は、画像などのコンテンツアイテムをカメラ138を使用して取得、記録および/または格納してもよい。例えば、カメラ138は画像を撮影及び記録し、画像をメタデータと共に蓄積し得る。メタデータは、以下の生成時のタイムスタンプ、ユーザの位置情報、方向、回転、タイトル及び/又は任意の他の属性又は撮影された画像に関連するデータを含みうるが、これらに限らない。メタデータの値は、属性112として、名前と値の組、タグ値の組、及び/又は任意の他のこれらの方法または組み合わせを蓄積して、メタデータとコンテンツアイテムとを関連付けてメタデータのタイプを容易に特定する。ある実施形態では、属性112は、これに限らないが、Exchangeable Image File Format(「Exif」)、JPEG File Interchange Format (Jfif)、及び/又は他の標準を含む、特定の標準によって定義されたタグと値の組であり得る。
【0090】
ある実施の形態では、ユーザデバイス102は、時刻標準化モジュール146を含み得、コンテンツマネージメントシステム104は、時刻標準化モジュール148を含み得る。時刻標準化モジュール146(例えば146aと146b)は、コンテンツアイテムと共に蓄積される日時を標準化するために用いられ得る。時刻標準化モジュール146、対応する時刻標準化モジュール148及び/又は任意のこれらの組み合わせは、蓄積されるコンテンツアイテムの日時を標準化するために用いられる。標準化された日時は、コンテンツアイテムを、ソート、グループ化、比較の実行、基本的な数式の実行、及び/又はクラスタ形成するために用いられる。
【0091】
ある実施の形態では、ユーザデバイス102は、組織化モジュール136を含み得、コンテンツマネージメントシステム104は組織化モジュール140を含み得る。組織化モジュール136(例えば136aと136b)は、コンテンツアイテムをコンテンツアイテムのクラスタやコレクションに組織化するため、コンテンツアイテムを組織化して、ユーザインターフェースの表示のためのコンテンツアイテムのサンプリングを提供するため、及び/又は表示のための組織化されたコンテンツアイテムを検索するために使用され得る。組織化モジュール136は、任意のクラスタリングアルゴリズムを用い得る。組織化モジュール136は、ユーザデバイス102のユーザインターフェースの表示のためのコンテンツアイテムやコンテンツマネージメントシステム104のコンテンツアイテムを組織化するために、クラスタのための類似するコンテンツアイテムを特定するために用いられ得る。様々な類似性の規則に従う各コンテンツアイテム間の類似性の情報を具体化する1つ以上の数値的表現を生成するために、類似性の規則が定義され得る。組織化モジュール136は、コンテンツアイテムをクラスタ化するために、コンテンツアイテム間の類似性の参照として数値的表現を用い得る。
【0092】
ある実施形態では、コンテンツアイテムはクラスタに組織化されて、検索要求に応じた類似のコンテンツの検索を援助し得る。例えば、組織化モジュール136aは、2つの画像が類似することを特定し得、これらの画像を共に1つのクラスタにグループ化し得る。組織化モジュール136aは、独立して、及び/又は対応する組織化モジュール(例えば140及び/又は136b)と共同してクラスタを決定するために、コンテンツアイテムを処理し得る。ある実施の形態では、組織化モジュール136aは、対応する組織化モジュール(例えば140及び/又は136b)と特定したクラスタのみを表示のために提供し得る。この例を続けると、クラスタを決定するためのコンテンツアイテムの処理は、新たなコンテンツアイテム及び/又は新たな類似性の規則を受け取る際に実行され得る繰り返し処理であり得る。
【0093】
ある実施の形態では、ユーザデバイス102aは分類モジュール150aを含んでもよく、ユーザデバイス102bは分類モジュール150b(分類モジュールを150と総称する)を含んでもよく、それらの分類モジュールを独立して使用するか、コンテンツマネージメントシステム104に含まれる分類モジュール152と組み合わせて使用するか、および/またはそれらの任意の組み合わせを行うことで、コンテンツアイテムを分類し、コンテンツアイテムを修正し、および/または画像を分類してもよい。例えば、分類モジュール150及び/又は152は、画像が文章を含むかを判定し、含む場合に蓄積される文章の種類を判定するために用いられ得る。コンテンツアイテムの修正は、コンテンツアイテムの表示を改善(画像内の文章の表示を修正)するために、コンテンツアイテムを訂正し、更なる変換を実行し、及び/又はコンテンツアイテムをクロップし得る。
【0094】
ある実施の形態では、ユーザデバイス102aは、検索モジュール142aを含み得、一方、ユーザデバイス102bは、合わせて検索モジュール142として参照され得る、検索モジュール142bを含み得る。コンテンツマネージメントシステム104は、対応する検索モジュール144を提供し得る。検索モジュール142及び144は、ユーザデバイス102及び/又はコンテンツマネージメントシステム104の両方に置かれたコンテンツアイテムの検索をサポート可能であり得る。1つ以上のコンテンツアイテムを要求する検索リクエストは、検索モジュール142及び/又は144によって受け取られ得る。ある実施形態では、検索は、マネージメントサービスの提供の際にコンテンツアイテムに割り当てられるメタデータ及び/又は属性を検索することによって処理され得る。例えば、コンテンツアイテムと共に蓄積されたクラスタマーカは日付によってコンテンツアイテムを発見するために用いられ得る。この特定のシナリオでは、クラスタマーカは、クラスタマーカと共に蓄積されたコンテンツアイテムの大まかな時刻、平均時間を示し得、このマーカは、特定のクラスタマーカを有するコンテンツのクラスタを検索し、検索結果を返すスピードを増加させるために用いられ得る。
【0095】
コンテンツマネージメントシステム104によって管理されるコンテンツアイテム110は、それぞれのユーザデバイス102のコンテンツアイテムシステム108にローカルに蓄積され得、及び/又はコンテンツマネージメントシステム104のデータストア118に離れて蓄積(例えばデータストア118内のコンテンツアイテム134)され得る。コンテンツマネージメントシステム104は、管理するコンテンツアイテムの同期処理を提供し得る。属性112a及び112b(合わせると112)または他のメタデータも、コンテンツアイテム110と共に蓄積され得る。例えば、特定の属性は、コンテンツマネージメントシステム104によって管理及び/又は同期処理されるユーザデバイス102にローカルに蓄積されたコンテンツアイテムを追跡するために、コンテンツアイテムと共に蓄積され得る。ある実施形態では、属性112は、拡張された属性、リソースフォーク、又は、コンテンツアイテムシステム108等のコンテンツアイテムシステムによって解釈されないコンテンツアイテムと共にメタデータを蓄積可能な任意の他の実装を用いて実装され得る。特に、属性112a及び112bは、コンテンツアイテムのためのコンテンツの識別子であり得る。例えば、コンテンツの識別子は、コンテンツアイテムを識別する、ユニーク又はほぼユニークな識別子(例えば番号や文字列)であり得る。コンテンツアイテムと共にコンテンツ識別子を蓄積することにより、コンテンツアイテムを追跡し得る。例えば、ユーザがコンテンツアイテムシステム108階層の中でコンテンツアイテムを他の場所に動かした場合および/またはユーザがコンテンツアイテムを変更した場合、コンテンツアイテムはユーザデバイス102のコンテンツアイテムシステム108の中で依然として特定可能である。コンテンツ識別子で特定されたコンテンツアイテムに対する任意の変更又は修正は、コンテンツマネージメントシステム104によって提供される同期及び/又はバージョン管理サービスのためにアップロード又は提供され得る。
【0096】
スタンドアローンのコンテンツマネージメントアプリケーション114aと114b(合わせると114)、クライアントアプリケーション、及び/又はサードパーティアプリケーションは、ユーザデバイス102a及び102b上でそれぞれ実行されて、ユーザがコンテンツマネージメントシステム104と相互作用するユーザインターフェースを提供する。コンテンツマネージメントアプリケーション114は、コンテンツマネージメントインターフェースモジュール154と共に提供される、ユーザデバイス102のための機能とアクセス可能なモジュールを外部に提供し得る。ウェブブラウザ116aと116b(合わせると116)は、コンテンツマネージメントインターフェースモジュール154と共に外部に提供され、コンテンツマネージメント104の機能を提供し得るクライアントアプリケーションのウェブページフロントエンドを表示するために用いられる。
【0097】
コンテンツマネージメントシステム104は、ユーザが認証されたアカウントを使ってコンテンツを蓄積できるようにし、また、検索、修正、ブラウズ、同期及び/又は他のアカウントにコンテンツを共有するようなマネージメントタスクを実行する。コンテンツマネージメントシステム104の様々な実施形態は、コンテンツマネージメントインターフェースモジュール154、アカウントマネージメントモジュール120、同期モジュール122、コレクションモジュール124、共有モジュール126、ファイルシステム抽象化128、データストア118、及び組織化モジュール140を含む要素を有し得るが、これらに限らない。コンテンツマネージメントインターフェースモジュール154は、コンテンツマネージメントシステム104のサーバサイド又はバックエンドの機能/性能を外部に提供し得る。例えば、ユーザデバイス102の対応するユーザインターフェース(例えばスタンドアローンのアプリケーション、クライアントアプリケーション等)は、コンテンツマネージメントインターフェースモジュール154を用いて実行され、ユーザがコンテンツマネージメントシステム104によって提供される機能を実行できるようにし得る。
【0098】
ユーザデバイス102に表示されるユーザインターフェースは、アカウントマネージメントモジュール120を用いて、ユーザがアカウントを生成し、及び/又はユーザがアカウントを使用することを認証するために用いられ得る。アカウントマネージメントモジュール120は、ユーザ及び/又はユーザデバイス102によるアカウントの使用を、ユーザ名/パスワード、デバイス識別子、及び/又は任意の他の認証方法を用いて認証する機能を提供し得る。アカウント情報130は、データストア118内でアカウントのために管理され得る。アカウント情報は、個人情報(例えば、電子メールアドレス又はユーザ名)、アカウント管理情報(例えば、「無料」や「有料」等のアカウントの種類)、使用情報(コンテンツアイテムの編集履歴)、許可された最大のストレージ空間、使用済みストレージ空間、コンテンツの蓄積場所、セキュリティ設定、個人の構成設定、コンテンツの共有データ等を含み得るが、これらに限らない。コンテンツマネージメントシステム104のストレージ空間の量は、予約され、分配され、確保され、蓄積され、及び/又は認証されたアカウントによりアクセスされ得る。アカウントは、データストア118内のそのアカウント用のコンテンツアイテム134及び/又はコンテンツアイテム110にアクセスするために、及び/又は、コンテンツアイテム134及び/又はコンテンツアイテム110を、他のアカウントから共有されたアカウントからアクセス可能にするために用いられ得る。ある実施の形態では、アカウントマネージメントモジュール120はコンテンツマネージメントシステム104の任意の数の他のモジュールと相互作用してもよい。
【0099】
ある実施の形態では、コンテンツマネージメントシステム104のアカウントは、アカウントによって認証された1つ以上のユーザデバイス102から書類、テキストアイテム、音声アイテム、ビデオアイテム等のコンテンツを蓄積するために用いられ得る。コンテンツはまた、異なる振る舞いである、又はコンテンツアイテムを互いにグループ化する他のメカニズムを用いた、様々な種類のコレクションを含み得る。例えば、アカウントは、任意のユーザからアクセス可能にした公開コレクションを含み得る。ある実施形態では、公開コレクションはウェブでアクセス可能なアドレスに割り当てられ得る。このウェブでアクセス可能なアドレスへのリンクは、公開されたフォルダのコンテンツにアクセスするために用いられ得る。他の例では、アカウントは、写真及び/又はビデオを蓄積し得る写真コレクションを含み得、写真及び/又はビデオの目的に合わせた特定の属性及び行為を提供し得る。アカウントはまた、音声アイテムを再生し、他の音声に関連する行為を実行する機能を提供する、音声コレクションを含み得る。アカウントはさらに、特定の目的のコレクションを含み得る。アカウントはまた、複数のユーザアカウントとリンクし、これらのアカウントから利用可能な共有コレクション又はグループコレクションを含み得る。ある実施形態では、共有コレクションへのアクセスは、共有コレクションにアクセスすることが可能な異なるユーザに対して異なり得る。
【0100】
コンテンツアイテム110及び/又はコンテンツアイテム134は、データストア118に蓄積され得る。ある実施形態では、データストア118は、ストレージデバイス、複数のストレージデバイス、又はサーバであり得る。或いは、データストア118は、1つ以上の通信ネットワークを介してアクセス可能なクラウドストレージプロバイダ又はネットワークストレージであり得る。コンテンツマネージメントシステム104は、コンテンツアイテムのシステム抽象化128(例えば、コンテンツアイテムのシステムデータベース抽象化レイヤ)を用いて、複雑さや詳細をユーザデバイス102から見えないようにして、コンテンツマネージメントシステム104によって蓄積されたコンテンツアイテムがどこにあるのかをユーザデバイス102が正確に知る必要がないようにし得る。実施形態は、ユーザデバイス102に現れるように、コンテンツアイテムを同一のコレクションに階層的に蓄積し得る。或いは、コンテンツマネージメントシステム104は、様々な順番、配置、及び/又は階層でコンテンツアイテムを蓄積し得る。コンテンツマネージメントシステム140は、コンテンツアイテムを、ネットワークアクセス可能ストレージ(SAN)デバイス、redundant array of inexpensive disks(RAID)等に蓄積し得る。コンテンツマネージメントシステム104は、コンテンツアイテムを、FAT、FAT32、NTFS、EXT2、EXT3、EXT4、ReiserFS、 BTRFS等の1つ以上のパーティションタイプを用いて蓄積し得る。
【0101】
データストア118はまた、コンテンツアイテム、コンテンツアイテムの種類、及び様々なアカウント、フォルダ、コレクション、又はグループとのコンテンツアイテムの関係を表すメタデータを蓄積し得る。このコンテンツアイテムのためのメタデータは、コンテンツアイテムの一部として、及び/又は別々に蓄積され得る。メタデータは、オブジェクト指向データベース、リレーショナルデータベース、コンテンツアイテムシステム、又は任意の他のデータのコレクションに蓄積され得る。ある実施形態では、データストア118に蓄積された各コンテンツアイテムは、システム全体にわたってユニークな識別子が割り当てられ得る。
【0102】
ある実施形態では、データストア118は、コンテンツアイテムの複製やコンテンツアイテムのチャンクを特定することにより、要求されるストレージ空間の量を低下させ得る。複数のコピーを蓄積する代わりに、データストア118は、コンテンツアイテム134の1つのコピーを蓄積し、1つのコピーと複製をつなぐためのポインタや他の機構を使用し得る。同様に、データストア118は、より効率的にコンテンツアイテム134を蓄積すると共に、コンテンツアイテムの変化、コンテンツアイテムの異なるバージョン(バージョンツリーの分岐を含む)、及び変更履歴を追跡するコンテンツアイテムバージョン管理を用いることによって、アンドゥ(Undo)操作の機能を提供し得る。変更履歴は、元のコンテンツアイテムのバージョンにいつ適用したか、変更されたコンテンツアイテムのバージョンをいつ生成したかの変更の組を含み得る。
【0103】
コンテンツマネージメントシステム104は、1つ以上のユーザデバイス102からのコンテンツの自動同期処理をサポートするように構成され得る。同期処理は、プラットフォーム非依存であり得る。すなわち、コンテンツは、種類、機能、オペレーティングシステム等の異なる、複数のユーザデバイス102にわたって同期処理され得る。例えば、ユーザデバイス102aは、コンテンツマネージメントシステム104の同期モジュール122を介して、ユーザデバイス102のコンテンツアイテムシステム108内のコンテンツを、ユーザアカウントに関連付けられたコンテンツと同期するクライアントソフトウェアを含み得る。ある場合では、クライアントソフトウェアは、新規の、削除された、修正された、コピーされた又は移動されたコンテンツアイテムやフォルダ等のような、指定されたコレクション及びそのサブコレクション内のコンテンツに対する任意の変更と同期し得る。既存のコンテンツマネージメントシステムと結合するクライアントソフトウェアのある例では、ユーザはローカルフォルダのコンテンツを直接操作し得る一方で、バックグラウンドプロセスが変更のためにローカルコンテンツを監視し、コンテンツマネージメントシステム104に変更を同期する。ある実施形態では、バックグラウンドプロセスは、コンテンツマネージメントシステム104において更新されたコンテンツを特定し、ローカルコレクションに変更を同期する。クライアントソフトウェアは、同期処理の動作の通知を提供し得、コンテンツマネージメントシステムのアプリケーション内でコンテンツ状態の表示を直接提供し得る。ある実施形態では、ユーザデバイス102は利用可能なネットワーク接続を有し得ない。このシナリオでは、クライアントソフトウェアは、コンテンツアイテムの変更に対してリンクされたコレクションを監視し、ネットワーク接続が可能になった際のコンテンツマネージメントシステム104への後の同期のために、これらの変更をキューに入れ得る。同様に、ユーザは、コンテンツマネージメントシステム104との同期を手動で停止又は一時停止し得る。
【0104】
ユーザはまた、コンテンツマネージメントインターフェースモジュール154によって生成及び提供されたウェブインターフェースを介してコンテンツを視認し又は操作し得る。例えば、ユーザはコンテンツマネージメントシステム104によって提供されたウェブアドレスへウェブブラウザ内で移動し得る。コンテンツアイテムの新たなバージョンをアップロードするなどの、ウェブインターフェースを介してなされたデータストア118のコンテンツへの変更や更新は、ユーザアカウントに関連付けられた他のユーザデバイス102へ逆に伝達され得る。例えば、複数のユーザデバイス102のそれぞれはそのクライアントソフトウェアを用いて、1つのアカウントと関連付けられており、アカウント内のコンテンツアイテムはユーザデバイス102のそれぞれとの間で同期し得る。
【0105】
コンテンツマネージメントシステム104は、コンテンツ及び/又はコンテンツのコレクションの公開又は非公開による共有を管理するための共有モジュール126を含み得る。共有モジュール126は、独立して、又はユーザデバイス102aにある対応する共有モジュール152a及びユーザデバイス102bにある対応する共有モジュール152b(合わせると共有モジュール152)と連携して、共有を管理し得る。公開によるコンテンツの共有は、コンテンツアイテム及び/又はコレクションを、コンテンツマネージメントシステム104を用いたネットワーク通信において任意のデバイスからアクセス可能にすることを含み得る。非公開によるコンテンツの共有は、データストア118内のコンテンツアイテム及び/又はコレクションを、2つ以上のユーザアカウントと結びつけて、各ユーザアカウントがコンテンツへアクセス可能にすることを含み得る。この共有は、プラットフォーム非依存で実行され得る。すなわち、コンテンツは、種類、機能、オペレーティングシステム等の異なる、複数のユーザデバイス102にわたって共有され得る。例えば、1つ以上の共有リンクが、共有されたコンテンツアイテムにアクセスするためにユーザ又はユーザのコンタクトに提供され得る。コンテンツはまた、異なるユーザアカウントの種類にわたって共有され得る。特に、共有モジュール126がコレクションモジュール124と共に用いられることにより、仮想的なコレクションを他のユーザ又はユーザアカウントと共有することができ得る。仮想コレクションは、ユーザデバイス102のコンテンツアイテムシステム108内の様々な場所に蓄積され得る、及び/又はコンテンツマネージメントシステム104に離れて蓄積され得るコンテンツ識別子のコレクションであり得る。
【0106】
ある実施形態では、コンテンツマネージメントシステムを用いた、アカウントのための仮想コレクションは、コンテンツアイテムのための1つ以上の識別子のコレクションに対応し得る(例えば、ストレージのコンテンツアイテムを特定する)。仮想コレクションは、コレクションモジュール124を用いて、コンテンツマネージメントシステムによって蓄積され及び/又は管理された既存のコンテンツアイテムから選択され、データストレージにある既存のコンテンツアイテムと仮想コレクションを関連付ける(例えば、蓄積場所、コンテンツ識別子、又は蓄積されたコンテンツアイテムのアドレスを関連付ける)ことにより生成され得る。既存のコンテンツアイテムと仮想コレクションを関連付けることにより、コンテンツアイテムは、コンテンツアイテムをコレクション内に置くために、データストレージ内の他の場所にコンテンツアイテムを蓄積する(例えばコンテンツアイテムをディレクトリにコピー及びペーストする)必要がない仮想コレクションの一部として指定され得る。
【0107】
ある実施形態では、コンテンツマネージメントシステム104は、各エントリや行がデータストア118の各コンテンツアイテムの場所を特定する、コンテンツアイテムのためのコンテンツディレクトリ又はデータベーステーブル/エントリを管理するように構成され得る。ある実施形態では、ユニーク又はほぼユニークな識別子がデータストア118に蓄積される各コンテンツアイテムのために蓄積され得る。
【0108】
ある実施形態では、メタデータが各コンテンツアイテムのために蓄積され得る。例えば、メタデータは、コンテンツアイテムを特定するために用いられるコンテンツのパスを含み得る。コンテンツのパスは、コンテンツアイテムの名前と、コンテンツアイテムに関連付けられたコンテンツアイテムの階層(例えば、ユーザデバイス102内のローカルな蓄積に対するパス)とを含み得る。コンテンツマネージメントシステム104は、コンテンツのパスを使用して、従来的な階層的なビューを用いたユーザインターフェースに、適切なコンテンツアイテムの階層でコンテンツアイテムを表示し得る。データストア118内のコンテンツアイテムの場所を特定するコンテンツのポインタもまた、コンテンツ識別子と共に蓄積され得る。例えば、コンテンツのポインタは、メモリ内のコンテンツアイテムの正確な蓄積アドレスを含み得る。ある実施形態では、コンテンツのポインタは、そのそれぞれがコンテンツアイテムの一部を含む複数の場所を指し示し得る。
【0109】
コンテンツのパス及びコンテンツのポインタに加えて、コンテンツアイテムのエントリ/コンテンツアイテムデータベースのデータベーステーブルの行は、コンテンツアイテムへアクセス可能なユーザアカウントを特定するユーザアカウント識別子を含み得る。ある実施形態では、複数のユーザアカウント識別子は、コンテンツアイテムが複数のユーザアカウントにわたって共有されたことを特定する1つのコンテンツエントリと関連付けられ得る。
【0110】
非公開によりコンテンツアイテムを共有するため、共有モジュール126は、コンテンツアイテムと関連付けられたコンテンツエントリ又はデータベーステーブルの行にユーザアカウント識別子を追加するように構成され得、これにより、コンテンツアイテムへの追加されたユーザアカウントのアクセスを登録する。共有モジュール126はまた、コンテンツアイテムへのユーザアカウントのアクセスを制限するため、コンテンツエントリ又はデータベーステーブルの行からユーザアカウント識別子を削除するように構成され得る。共有モジュール126はまた、仮想コレクションのためのデータベーステーブルへのユーザアカウントの追加又は削除に用いられ得る。
【0111】
公開によりコンテンツを共有する場合、共有モジュール126は、任意のブラウザが何らかの認証を要することなく、コンテンツマネージメントシステム104へのアクセスを可能にする、uniform resource locator(「URL」)等のカスタムネットワークアドレスを生成するように構成され得る。これを実現するため、共有モジュール126は生成されたURLにコンテンツ識別データを含めるよう構成されてもよい。このコンテンツ識別データは、要求されたコンテンツアイテムを適切に特定して返信するために後に用いられてもよい。例えば、共有モジュール126は、生成されたURLにユーザアカウント識別子とコンテンツのパスを含むように構成され得る。URLの選択のうえで、URLに含まれるコンテンツ識別子のデータは、コンテンツ識別子のデータを受信して適切なコンテンツエントリを特定し、このコンテンツエントリに関連付けられたコンテンツアイテムを返信し得る、コンテンツマネージメントシステム104に送信され得る。
【0112】
公開により仮想コレクションを共有するため、共有モジュール126は、任意のブラウザが何らかの認証を要することなく、コンテンツマネージメントシステム100へのアクセスを可能にする、uniform resource locator(「URL」)等のカスタムネットワークアドレスを生成するように構成され得る。これを実現するため、共有モジュール126は生成されたURLにコレクション識別データを含めるよう構成されてもよい。このコレクション識別データは、要求されたコンテンツアイテムを適切に特定して返信するために後に用いられてもよい。例えば、共有モジュール126は、生成されたURLにユーザアカウント識別子とコレクション識別子を含むように構成され得る。URLの選択の際、URLに含まれるコンテンツ識別データはコンテンツマネージメントシステム104に送信されてもよく、このコンテンツマネージメントシステム104は受信されたコンテンツ識別データを使用して適切なコンテンツエントリ又はデータベースの行を特定し、このコンテンツエントリ又はデータベースの行に関連付けられたコンテンツアイテムを返信してもよい。
【0113】
URLの生成に加えて、共有モジュール126はまた、コンテンツアイテムへのURLが生成されたことを記録するように構成され得る。ある実施形態では、コンテンツアイテムに関連付けられたコンテンツエントリは、コンテンツアイテムへのURLが生成されたかを示すURLフラグを含み得る。例えば、URLフラグは、最初に0又は「偽」が設定される二値であり得、コンテンツアイテムへのURLが生成されていないことを示し得る。共有モジュール126は、コンテンツアイテムへのURLが生成された後にフラグの値を1又は「真」に変更するように構成され得る。
【0114】
ある実施形態では、共有モジュール126はまた、生成されたURLを非活性化するように構成され得る。例えば、各コンテンツエントリもまた、生成されたURLからの要求に応じてコンテンツが返信されるべきかを示すURL活性フラグを含み得る。例えば、共有モジュール126は、URL活性フラグが1又は「真」に設定されている場合に生成されたリンクによって要求されたコンテンツアイテムのみを返信するように構成され得る。URL活性フラグの値又は二値の変更は、URLが生成されたコンテンツアイテム又はコレクションへのアクセスを容易に制限し得る。これにより、ユーザは、コンテンツアイテムを移動したり生成されたURLを削除したりする必要なく、共有コンテンツへのアクセスを制限することができる。同様に、共有モジュール126は、URL活性フラグの値を1又は「真」に再び変更することによりURLを再活性化し得る。従って、ユーザは、新たなURLを生成する必要ななくコンテンツアイテムへのアクセスを容易に回復させる。
【0115】
例示的なシステム
本発明の例示的な実施形態では、C、C++、Java(登録商標)、JavaScript(登録商標)、Python、Ruby、CoffeeScript、assembly language等の任意の適切なプログラミング言語を用いて特定の実施形態のルーチンを実装し得る。手続型又はオブジェクト指向等の異なるプログラミング技術が用いられ得る。ルーチンは、1つの処理デバイス又は複数のプロセッサ上で実行し得る。ステップ、操作、コンピュータ処理は特定の順番で表され得るが、この順番は異なる特定の実施形態において変更され得る。ある特定の実施形態では、本明細書において連続的に示された複数のステップは、同時に実行され得る。
【0116】
特定の実施形態は、命令実行システム、装置、システム又はデバイスと共に使用するためのコンピュータ可読ストレージデバイス又は非一時的なコンピュータ可読媒体に実装され得る。特定の実施形態は、ソフトウェア又はハードウェア又は両方の組み合わせの制御ロジックの形式で実装され得る。この制御ロジックは、1つ以上のプロセッサで実行されたときに、特定の実施形態に記載されたものを実行するために動作可能であり得る。
【0117】
特定の実施の形態は、プログラムされた汎用デジタルコンピュータを用いて、特定用途向け集積回路、プログラマブルロジックデバイス、FPGA(field programmable gate arrays)、光、化学、バイオ、量子又はナノ加工のシステム、コンポーネント及び機構を用いて、実装され得る。一般に、特定の実施形態の機能は、この分野で知られるあらゆる手段により実現され得る。分散化、ネットワーク化されたシステム、コンポーネント、及び/又は回路が用いられ得る。データの通信又は伝送は有線、無線又は任意の他の手段によりなされ得る。
【0118】
用例/図に図示された要素の1つ以上は、より分割された又は統合された方法で、又は、削除され又はある場合に動作しないものとして、特定のアプリケーションに従って有用なものとして扱われて、実装され得る。ストレージデバイス等の機械可読媒体に蓄積され得るプログラムやコードを実装して、上述した任意の方法をコンピュータに実行させることは、思想及びスコープの範囲内であり得る。
【0119】
この中の記載及び以下の請求項のあらゆる箇所で用いられるように、「a」、「an」及び「the」はコンテキストが明示的に述べない限り複数の参照を含む。また、この中の記載及び以下の請求項のあらゆる箇所で用いられるように、「in」の意味はコンテキストが明示的に述べない限り「in」及び「on」を含む。
【0120】
種々の動作モードにおける十分な数の相互作用フィーチャを可能とするユーザインターフェースをユーザに提供する方法が説明されたが、そのようなものに対して本発明の範囲および思想から逸脱すること無く多くの変更をなすことができることは理解されるべきである。この分野における当業者から見てクレームされた主題から実質的でない変更、知られていないもの又は後に考案されたものは、請求項のスコープと均等であると想定される。従って、この分野の当業者に現在明らかな代用物又は後に知られたものは、定義された要素のスコープ内であると定義され得る。本発明の記載された実施形態は、限定では無く説明の目的のために示されたものである。