JP5905662B2 - プロテイン、プール、およびスロークス処理環境 - Google Patents

プロテイン、プール、およびスロークス処理環境 Download PDF

Info

Publication number
JP5905662B2
JP5905662B2 JP2010506501A JP2010506501A JP5905662B2 JP 5905662 B2 JP5905662 B2 JP 5905662B2 JP 2010506501 A JP2010506501 A JP 2010506501A JP 2010506501 A JP2010506501 A JP 2010506501A JP 5905662 B2 JP5905662 B2 JP 5905662B2
Authority
JP
Japan
Prior art keywords
data
event
offset
application
generating
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2010506501A
Other languages
English (en)
Other versions
JP2010525494A (ja
Inventor
クレーマー,クウィンドラ・フルトマン
アンダーコフラー,ジョン・エス
Original Assignee
オブロング・インダストリーズ・インコーポレーテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by オブロング・インダストリーズ・インコーポレーテッド filed Critical オブロング・インダストリーズ・インコーポレーテッド
Publication of JP2010525494A publication Critical patent/JP2010525494A/ja
Application granted granted Critical
Publication of JP5905662B2 publication Critical patent/JP5905662B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Description

関連出願
本願は、2007年4月27日に出願した米国(US)特許出願第60/926,116の優先権を主張する。
本願は、2005年2月8日に出願した米国仮特許出願第60/651,290号の優先権を主張する、2006年2月8日に出願した米国特許出願第11/350,6957号に関連がある。
技術分野
実施形態は、計算プロセス内および計算プロセス間におけるデータの表現、操作、および交換に関して説明する。
従来のプログラミング環境は、マルチ・コンピュータ演算装置(CPU)やクロス・ネットワーク実行、あるいは多数の計算プロセス間におけるデータの柔軟な共有を最大限支援していない。
例えば、従来のユーザ対面(user-facing)計算プラットフォーム(例えば、OS X、Microsoft Windows(登録商標)、UNIX(登録商標)上のX Windows(登録商標))は、プロセス間においてイベント・データを伝送する設備(facilities)を提供する。しかし、これら既存のメカニズムの全てには欠点があり、そのためにマルチ・プロセスおよびマルチ・マシン・アプリケーションを構築することが困難となっており、更に複数のプログラミング言語で作業するユーザは、苛立たしい輪を潜り抜けることを余儀なくされている。例えば、従来のイベント・フレームワークは厳しく類型に分けられており、そのためにこれらは柔軟性を欠き、アプリケーション・プログラマに対するシステム販売業者の専有(assumption)が特権として認められており、増々普及しつつある動的言語(例えば、Ruby、Python、およびPerl)の設備との不一致が形成される。また、従来のフレームワークは、2点間データ転送しかサポートしないように構成されており、数個を超える別個のプロセスの活動(activity)を調整することが困難または不可能となる。また、従来のフレームワークは、特定のローカル・メモリ内データ構造に強く依存するので、ディスク上の格納またはネットワークを跨る送信には不向きとなっている。
引用による包含
本明細書において述べる各特許、特許出願、および/または刊行物は、本願において引用することにより、個々の特許、特許出願、および/または刊行物の各々が具体的にそして個々に、引用することにより本願に含まれることを示した場合と同程度にその全体が本願にも含まれるものとする。
本明細書では、大規模マルチ・プロセス相互動作を可能としかつ促進する新規のプログラミングまたは処理環境を含む実施形態を教示する。本明細書において提供する実施形態は、マルチ・コンピュータ演算装置(CPU)およびクロス・ネットワーク実行や、多数の計算処理間における柔軟なデータ共有を最大限支援しない従来のプログラミング環境における問題を克服する。
本明細書では、プロセス間でまたはプロセスを跨って共有しようとするデータをカプセル化する方法およびシステムについて記載する。これらのメカニズムはスロークス(slawx)(「slaw」の複数形)、プロテイン(protein)、およびプール(pool)を含む。概して、スロークスは、プロセス間交換について最低レベルのデータ定義を規定し、プロテインは、中間レベルの構造を規定し、問い合わせおよびフィルタリングのためのフック(hook)を備えており、プールは高レベルの編成およびアクセス・セマンティクス(semantics)を規定する。スロークスは、効率的な、プラットフォームに依存しないデータ表現およびアクセスのためのメカニズムを含む。プロテインは、スロークスをペイロードとして用いる、データ・カプセル化および輸送方式を規定する。プールは、1つのプロセス内部、ローカル・プロセス間、遠隔プロセスまたは分散プロセス間にあるネットワークを跨いだ、そして長期(例えば、ディスク上等における)記憶による、プロテインの構造化された柔軟な集計、順序付け、フィルタ処理、および分散を規定する。
本明細書において記載する実施形態の構成および実施態様には、数個の構造が含まれ、これらが一緒になって多数の処理能力が可能となる。例えば、本明細書において記載する実施形態は、多数の処理間における効率的なデータ交換に備えている。また、本明細書において記載する実施形態は、柔軟なデータ「類別」(typing)および構造も規定するので、データの広範囲の多様な種類および使用をサポートする。更に、本明細書において記載する実施形態は、データ交換のための柔軟なメカニズム(例えば、ローカル・メモリ、ディスク、ネットワーク等)を含み、これらは全て実質的に同様のアプリケーション・プログラミング・インターフェース(API)によって駆動される。更に、記載する実施形態は、異なるプログラム言語で書かれたプロセス間におけるデータ交換も可能にする。加えて、本明細書において記載する実施形態は、データ・キャッシュおよび集計状態の自動保守も可能にする。
以下の説明では、本明細書において記載する実施形態の完全な理解が得られ、その実施を可能にする説明を提示するために、多数の具体的な詳細を紹介する。しかしながら、これらの実施形態は、その具体的詳細の1つ又は複数がなくても、または他のコンポーネント、システム等を用いても実用化できることは、当業者には認められよう。一方、周知の構造または動作は、開示する実施形態の態様が曖昧になるのを避けるために、示さないか、または詳細には説明しないこととする。
以下の用語は、本明細書において用いられる場合、以下の一般的な意味を有することを意図している。「プロセス」という用語は、本明細書において用いられる場合、ある時間期間実行するコンピュータ・プログラムを意味する。この実行は、休止あるいはプロセッサまたはマシン間の転送によって中断される場合もあるので、プロセスを無期限に保留すること、「直列化」すること、あるいはディスクに、メモリ・バス間で、またはネットワーク上で「整列」(marshal)させることも可能である。前述の意味は、当業者によって理解される別の意味を含むこともできる。
「デバイス」という用語は、本明細書において用いる場合、1つ又は複数のプログラムまたはアルゴリズムを走らせるあらゆるプロセッサ主体デバイス、1つ又は複数のプログラムまたはアルゴリズムの下で走るあらゆるプロセッサ主体デバイス、および/または1つ又は複数のプログラムまたはアルゴリズムを走らせる、および/または1つ又は複数のプログラムまたはアルゴリズムの下で走るプロセッサ主体デバイスに結合または接続されているあらゆるデバイスを意味する。「イベント」という用語は、本明細書において用いる場合、走っている即ち実行中のプログラムまたはアルゴリズム、プロセッサ主体デバイス、および/またはプロセッサ主体デバイスに結合または接続されているデバイスと関連のあるあらゆるイベントを意味する(例えば、イベントは、入力、出力、制御、状態、状態変化、処置(action)、データ(データのフォーマットや、データと関連のある処理における段階には無関係)等を含むことができるが、これらに限定されるのではない)。
図1は、一実施形態の下における、スロークス、プロテイン、およびプールを用いたデータ表現を含む処理環境のブロック図である。 図2は、一実施形態の下における、プロテインのブロック図である。 図3は、一実施形態の下における、デスクリップ(descrip)のブロック図である。 図4は、一実施形態の下における、インジェスト(ingest)のブロック図である。 図5は、一実施形態の下におけるスロー(slaw)のブロック図である。 図6Aは、一実施形態の下における、プールの中にあるプロテインのブロック図である。 図6Bは、一実施形態の下における、スロー・ヘッダ・フォーマットを示す。 図6Cは、一実施形態の下においてプロテインを用いる際の流れ図である。 図6Dは、一実施形態の下において、プロテインを組み立てるまたは発生する際の流れ図である。 図7は、一実施形態の下において、スロークス、プロテイン、およびプールを用いたデータ交換を含む処理環境のブロック図である。 図8は、一実施形態の下において、多数のデバイスと、これらのデバイスの1つ又は複数で走る多数のプログラムを含み、プラズマ構造(plasma construct)(例えば、プール、プロテイン、およびスロー)を用いることにより、多数の実行中のプログラムが、デバイスによって発生したイベントを共有し、集合的に応答することを可能にする処理環境のブロック図である。 図9は、一代替実施形態の下において、多数のデバイスと、これらのデバイスの1つ又は複数で走る多数のプログラムを含み、プラズマ構造(例えば、プール、プロテイン、およびスロー)を用いることにより、多数の実行中のプログラムが、デバイスによって発生したイベントを共有し、集合的に応答することを可能にする処理環境のブロック図である。 図10は、別の代替実施形態の下において、多数の入力デバイスを含み、これらが当該デバイスの1つ又は複数で走る多数のプログラム間に結合されており、プラズマ構造(例えば、プール、プロテイン、およびスロー)を用いることにより、多数の実行中のプログラムが、入力デバイスによって発生したイベントを共有し、集合的に応答することを可能にする処理環境のブロック図である。 図11は、更に別の代替実施形態の下において、多数のデバイスを含み、これらが当該デバイスの1つ又は複数で走る多数のプログラム間に結合されており、プラズマ構造(例えば、プール、プロテイン、およびスロー)を用いることにより、多数の実行中のプログラムが、デバイスによって発生したグラフィクス・イベントを共有し、集合的に応答することを可能にする処理環境のブロック図である。 図12は、更に別の代替実施形態の下において、多数のデバイスを含み、これらが当該デバイスの1つ又は複数で走る多数のプログラム間に結合されており、プラズマ構造(例えば、プール、プロテイン、およびスロー)を用いることにより、実行中のプログラムの状態検査、可視化、およびデバッグ処理を可能にする処理環境のブロック図である。 図13は、追加の代替実施形態の下において、多数のデバイスを含み、これらが当該デバイスの1つ又は複数で走る多数のプログラム間に結合されており、プラズマ構造(例えば、プール、プロテイン、およびスロー)を用いることにより、当該プロセス・プールにおいて生成し配置された状態情報の特性に影響を及ぼすまたは制御することができる処理環境のブロック図である。
図1は、一実施形態の下において、スロークス、プロテイン、およびプールを用いたデータ表現を含む処理環境のブロック図である。本明細書において紹介する実施形態の主要な構造には、スロークス(「スロー」(slaw)の複数形)、プロテイン、およびプールが含まれる。本明細書において記載する場合、スロークスは、効率的で、プラットフォームに依存しないデータ表現およびアクセスのためのメカニズムを含む。プロテインは、本明細書において詳細に説明するように、データ・カプセル化および輸送方式を規定し、一実施形態のプロテインのペイロードはスロークスを含む。プールは、本明細書において記載する場合、プロテインの構造化されているが柔軟な集計、順序付け、フィルタ処理、および分散を規定する。プールは、プロテインのための、プロセス内部における、ローカル・プロセッサ間での、リモートまたは分散プロセス間にあるネットワークを跨いだ、そして「長期」(例えば、デスク上)記憶による、データへのアクセスを与える。
図2は、一実施形態の下におけるプロテインのブロック図である。プロテインは、長さヘッダ、ディスクリップ(descrip)、およびインジェスト(ingest)を含む。以下で詳細に説明するが、ディスクリップおよびインジェストの各々は、スローまたはスロークスを含む。
図3は、一実施形態の下におけるディスクリップのブロック図である。以下で詳細に説明するが、ディスクリップは、オフセット、長さ、およびスロークスを含む。
図4は、一実施形態の下におけるインジェストのブロック図である。以下で詳細に説明するが、インジェストは、オフセット、長さ、およびスローを含む。
図5は、一実施形態の下におけるスローのブロック図である。以下で詳細に説明するが、スローは、タイプ・ヘッダ、およびタイプ特定データを含む。
図6Aは、一実施形態の下における、プールの中にあるプロテインのブロック図である。プロテインは、長さヘッダ(「プロテイン長さ」)、ディスクリップ・オフセット、インジェスト・オフセット、ディスクリップ、およびインジェストを含む。ディスクリップは、オフセット、長さ、およびスローを含む。インジェストは、オフセット、長さ、およびスローを含む。
プロテインは、本明細書において記載する場合、プロセッサ間で共有する、あるいはバスまたはネットワークまたはその他の処理構造を跨いで移動する必要があるデータをカプセル化するメカニズムのことである。一例として、プロテインは、ユーザ・インターフェース・イベントに対応するまたは関連するデータを含むデータの輸送および操作のための改良メカニズムを提供する。具体的には、一実施形態のユーザ・インターフェース・イベントは、2006年2月8日に出願した米国特許出願第11/350,697号に記載されているジェスチャ・インタフェースのそれを含む。この特許出願をここで引用したことにより、その内容が本願にも含まれるものとする。更に別の例として、プロテインは、限定ではく、グラフィクス・データまたはイベント、および状態情報等その他多数を含むデータの輸送および操作のための改良メカニズムを提供する。プロテインは、構造化レコード・フォーマット、およびレコードを操作するための1組の関連方法である。本明細書において用いる場合、レコードの操作は、データを構造に入力すること、構造からデータを取り出すこと、およびデータのフォーマットおよび存在を問い合わせることを含む。プロテインは、種々のコンピュータ言語で書かれたコードを通じて用いられるように構成されている。また、プロテインは、本明細書において記載するような、プールの基本的構築ブロックとなるように構成されている。更に、プロテインは、それらが含むデータを不変のまま維持しつつ、プロセッサ間そしてネットワークを跨いで自然に移動できるように構成されている。
従来のデータ輸送メカニズムとは対照的に、プロテインにはタイプが決められていない。タイプは決められていないが、プロテインは、「タイプ状」機能性を実装することに加えて、強力で柔軟性のあるパターン照合設備(facility)を備えている。また、本明細書に記載するように構成されているプロテインは、本質的に多点型でもある(しかし、二点間形態も、多点伝送の部分集合として容易に実現される)。加えて、プロテインはメモリ内、ディスク上、およびワイヤ(ネットワーク)上フォーマット間で異なることがない「ユニバーサル」レコード・フォーマットを定義する(即ち、実行する任意の最適化の種類だけが異なる)。
図2および図6を参照すると、一実施形態のプロテインは、バイトの線形シーケンスである。これらのバイトの中には、ディスクリップ・リストと、1組のキー値対がカプセル化されている。キー値対をインジェストと呼ぶ。ディスクリップ・リストは、綿密(elaborate)であるが効率的にフィルタ可能なプロテイン毎のイベント記述を任意に含む。インジェストは、1組のキー値対を含み、これらがプロテインの実際の内容を構成する。
プロテインのキー値対との関わり、ならびにネットワークに都合がよい(network-friendly)多点データ相互交換に関する中核的観念の一部は、「タプル」の概念を特別に許可する(priviledge)もっと簡単なシステム(例えば、Linda、Jini)と共有される。プロテインは、タプル指向システムとは様々な面で大きく異なり、その相違には、標準的、最適化可能なパターン照合基盤を設けるためにディスクリップ・リストを用いることが含まれる。また、プロテインがタプル指向システムと異なるのは、種々の記憶および言語構造に適したレコード・フォーマットの厳格な仕様、そしてそのレコード・フォーマットに対する「インターフェース」の色々な特定的な実施態様である。
プロテインの説明に戻って、プロテインの最初の4バイトまたは8バイトは、プロテインの長さを指定する。一実施形態では、長さは16バイトの倍数でなければならない。この16バイトの粒度により、バイト整合およびバス整合効率が現在のハードウェアでも達成可能であることを確保する。本来「4ワード整合」型でないプロテインには、任意のバイトを詰めこんで、その長さが16バイトの倍数となるようにする。
プロテインの長さ部分は、次のフォーマットを有する。ビッグ・エンディアン・フォーマット(big-endian format)で長さを指定する32ビット。その下位4ビットはマクロ・レベルのプロテイン構造特性を示すフラグとして機能する。プロテインの長さが2^32バイトよりも大きい場合、その次に来る更に別の32ビット。
一実施形態における16バイト整合条件は、最初の4バイトの最下位ビットがフラグとして利用可能であることを意味する。そして、このため、最下位の3ビット・フラグは、プロテインの長さが最初の4バイトで表現できるのか、または8バイト必要なのかを示し、プロテインがビッグ・エンディアンまたはリトル・エンディアンの内どちらのバイト順序付けを用いるのかを示し、更に、プロテインが標準的構造または非標準的構造のどちらを採用するのかをそれぞれ示すが、プロテインはこのように限定されるのではない。4番目のフラグ・ビットは、今後の使用のために保存されている。
8バイト長フラグ・ビットがセットされている場合、プロテインの長さを計算するには、次の4バイトを読み取り、これらをビッグ・エンディアン、8バイト整数の上位バイトとして用いる(4バイトは既に読み取られ、下位部分を供給する)。リトル・エンディアン・フラグがセットされている場合、プロテインの中にある全ての二進数値データをリトル・エンディアンとして解釈する(それ以外の場合は、ビッグ・エンディアン)。非標準フラグ・ビットがセットされている場合、プロテインの残りの部分は、以下で説明する標準構造に従わない。
非標準プロテイン構造については、プロテインおよびプールを用いるシステム・プログラマには、非標準プロテイン・フォーマットを記述しこれに同期するための種々の方法が利用可能であること、そしてこれらの方法は、空間または計算サイクルが制限されているときに有用となることができることを除いて、ここではこれ以上論じない。例えば、一実施形態では、最短のプロテインは16バイトである。標準フォーマットのプロテインは、実際のペイロード・データをこれらの16バイトにはめ込むことは全くできない(その一番大きい部分は既に、プロテインのコンポーネント・パーツの位置を記述することが任されている)。しかし、非標準フォーマット・プロテインは、その16バイトの内12バイトをデータに用いることができると考えられる。2つのアプリケーションがプロテインを交換すると、これらが発信するいずれの16バイト長プロテインでも常に12バイトを含み、これらは、例えば、リアル・タイム・アナログ/ディジタル変換器からの12個の8ビット・センサ値を表すことを相互に決定することができる。
長さヘッダの直後には、プロテインの標準構造では、更に2つの可変長整数値が現れる。これらの数値は、それぞれ、ディスクリップ・リストにおける最初のエレメント、および最初のキー値対(インジェスト)に対するオフセットを指定する。これらのオフセットは、本明細書では、それぞれディスクリップ・オフセットおよびインジェスト・オフセットとも呼ぶ。これらの数値の各クアッド(quad)のバイト順序は、プロテイン・エンディアンネス・フラグ・ビット(protein endianness flag bit)によって指定される。各々について、最初の4バイトの最上位ビットは数値が4または8バイト幅のどちらであるかを決定する。最上位ビット(msb)がセットされている場合、最初の4バイトは二重ワード(8バイト)数値の最上位バイトとなる。ここでは、これを「オフセット形式」と呼ぶ。ディスクリップおよび対を指し示す別個のオフセットを用いることにより、ディスクリップおよび対を異なるコード・パスによって扱うことが可能となり、例えば、ディスクリップ・パターン照合およびプロテイン・アセンブリに関する個々の最適化を行うことができるようになる。また、これら2つのオフセットがプロテインの先頭にあるため、様々な有用な最適化に対処できる。
殆どのプロテインは8バイト長またはポインタを必要とする程大きくないので、一般に長さ(とフラグ)および2つのオフセット数値は、プロテインの最初の3バイトを占めるに過ぎない。多くのハードウェアまたはシステム・アーキテクチャでは、最初のバイトを超えるある数のバイトのフェッチ即ちリードは、「自由」である(例えば、16バイトは、セル・プロセッサ(Cell processor)の主要バスを介して引き込むには、1バイトと全く同じ数のクロック・サイクルを要する。)
多くの場合、プロテイン内部において実施態様特定またはコンテキスト特定のキャッシング(caching)またはメタデータを許容することは有用である。オフセットの使用により、プロテインの先頭付近に、任意のサイズの「孔」を作成し、その中にこのようなメタデータを割り込ませることができる。8バイトのメタデータを利用することができる実施態様では、多くのシステム・アーキテクチャ上でこれらのバイトを、長さヘッダをフェッチする毎に1つのプロテインに対して自由に得ることができる。
ディスクリップ・オフセットは、プロテインの先頭と最初のディスクリップ・エントリとの間のバイト数を指定する。各ディスクリップ・エントリは、次のディスクリップ・エントリまでのオフセット(勿論、オフセット形態で)を備えており、その後に可変幅の長さフィールド(これもオフセット・フォーマットで)が続き、更にその後にスローが続く。これ以上ディスクリップがない場合、オフセットは、規則上、0の4バイトとなる。それ以外の場合、オフセットは、当該ディスクリップ・エントリの開始と次との間のバイト数を指定する。長さフィールドは、バイト単位で、スローの長さを指定する。
殆どのプロテインでは、各ディスクリップは、スロー・ストリング様式でフォーマットしたストリングであり、4バイトの長さ/タイプヘッダを有し、最上位ビットがセットされ、下位30ビットだけが長さを指定するために用いられ、その後に、ヘッダが指示する数のデータ・バイトが続く。通常通り、長さヘッダはそのエンディアンネスをプロテインから取り込む。バイトは、UTF−8キャラクタをエンコードすると仮定する(したがって、キャラクタ数は必ずしもバイト数と同じではないことを注記しておく)。
インジェスト・オフセットは、プロテインの先頭と最初のインジェスト・エントリとの間のバイト数を指定する。各インジェスト・エントリは、次のインジェスト・エントリまでのオフセット(オフセット・フォームで)を備えており、その後にこの場合も長さフィールドおよびスローが続く。インジェスト・オフセットは、次のディスクリップ・エントリの代わりに次のインジェスト・エントリを指し示すことを除いて、ディスクリップ・オフセットと機能的には同一である。
殆どのプロテインでは、各インジェストは、スロー・コンス・タイプ(slaw cons type)であり、二値リストを備えている。このリストは通常キー/値対として用いられる。スロー・コンス・レコードは、最上位から2番目のビットがセットされており、下位30ビットだけが長さを指定するために用いられる4バイトの長さ/タイプ・ヘッダと、4バイトの値(2番目)エレメントの先頭までのオフセットと、前述の4バイトのキー・エレメント長と、キー・エレメントに対するスロー・レコードと、4バイト長の値エレメントと、最後に前述の値エレメントに対するスロー・レコードとを備えている。
一般に、コンス・キーはスロー・ストリングである。数個のプロテインおよびスロー・コンス長ならびにオフセット・フィールドを跨いでデータを複製することにより、工夫(refinement)および最適化の一層多くの機会が得られる。
前述のように、類型に分けたデータをプロテイン内部に埋め込むために一実施形態において用いられる構造(construct)は、タグ付きのバイト・シーケンス指定および抽象化(abstraction)であり、「スロー」と呼ばれる(複数形は「slawx」となる)。スローは、類型に分けた(恐らくは、集計)データの一片を表すバイトの線形シーケンスであり、プログラミング言語特定APIと関連付けられている。APIは、スロークスを作成し、修正し、メモリ空間、記憶媒体、およびマシンの間で移動させることができる。スロー・タイプ方式(slaw type scheme)は、拡張可能でできるだけ軽量であり、あらゆるプログラミング言語からでも用いることができる共通基盤となることを意図している。
効率的な、大規模プロセス間通信メカニズムを構築することの要望が、スロー・コンフィギュレーションの原動力(driver)である。従来のプログラミング言語は、精巧なデータ構造およびタイプ設備を備えており、プロセス特定のメモリ・レイアウトでは申し分なく動作するが、データをプロセッサ間で移動させたり、ディスク上に格納することが必要となると、これらのデータ表現はいつでも決まって分解する。スロー・アーキテクチャは、第1に、プロセス間通信に対する、非常に効率的で、マルチ・プラットフォームに都合がよい低レベル・データ・モデルである。
しかし、更に一層重要なのは、スロークスが、プロテインと共に、今後の計算機ハードウェア(マイクロプロセッサ、メモリ・コントローラ、ディスク・コントローラ)の開発に影響を及ぼし、それを可能にするように構成されていることである。例えば、広く一般に入手可能なマイクロプロセッサの命令セットに、多少の具体的な追加を行うことにより、スロークスが、殆どのプログラミング言語において用いられている方式と同様に、単一プロセス、メモリ内データ・レイアウトに対しても効率的となることが可能になる。
各スローは、可変長のタイプ・ヘッダと、その後に続くタイプ特定データ・レイアウトとを備えている。例えば、C、C++、およびRubyにおけるスロー機能性を全てサポートする実施形態の一例では、タイプは、各言語からアクセス可能なシステム・ヘッダ・ファイルにおいて定義されているユニバーサル整数(universal integer)によって示される。更に精巧化し柔軟性を高めたタイプ解明機能性(type resolution functionality)、例えば、ユニバーサル・オブジェクトIDおよびネットワーク参照による間接的類型決定も可能である。
一実施形態のスロー・コンフィギュレーションは、スロー・レコードを、例えば、RubyおよびC++双方から言語に優しい様式でオブジェクトとして用いることを可能にする。C++コンパイラ外部の1組のユーティリティが、スロー・バイト・レイアウトの健全性をチェックし、個々のスロー・タイプに特定的なヘッダ・ファイルおよびマクロを作成し、Rubyに対するバインディング(binding)を自動的に発生する。その結果、正しく構成したスロー・タイプは、1つのプロセスの中から用いた場合でも、非常に効率的となる。プロセスのアクセス可能なメモリのいずれの場所におけるいずれのスローでも、コピーや「非直列化」ステップがなくても、アドレスすることができる。
一実施形態のスロー機能性は、以下の内1つ又は複数を実行するAPI機能性を含む。具体的なタイプの新たなスローを作成する。ディスク上またはメモリ内におけるバイトからのスローへの言語特定参照を作成または構築する。タイプに特定の様式でスロー内にデータを埋め込む。スローのサイズを問い合わせる。スロー内部からデータを引き出す。スローのクローンを作成する。そして、スロー内部にある全てのデータのエンディアンネスおよびその他のフォーマット属性を変換する。スローのあらゆる種(species)が以上の挙動を実施する。
図6Bは、一実施形態の下におけるスロー・ヘッダーのフォーマットを示す。以下にスローの詳細な説明を行う。
各スローの内部構造(structure)は、タイプ解明、カプセル化データへのアクセス、および当該スロー・インスタンスについてのサイズ情報の各々を最適化する。一実施形態では、1組のスロー・タイプ全体は、設計上、最小限の全てが揃っており、スロー・ストリング、スロー・コンス(即ち、ダイアッド(dyad))、スロー・リスト、およびスロー数値オブジェクトを含む。スロー数値オブジェクト自体は、半ダース程度の基本的な属性の組み合わせ(permutation)として理解される、広範な1組の個別数値タイプを表す。いずれのスローでも、その他の基本的プロパティはそのサイズである。一実施形態では、スロークスは、4の倍数に量子化したバイト長を有し、これらの4バイト・ワードを、ここでは「クアッド」と呼ぶ。一般に、このようなクアッドに基づくサイズ決定により、スロークスを最新のコンピュータ・ハードウェア・アーキテクチャのコンフィギュレーションと正確に整合させる。
一実施形態では、各スローの最初の4バイトは、ヘッダ構造(structure)を備えている。ヘッダ構造(structure)は、タイプ記述およびその他のメタ情報をエンコードし、特定的なタイプの意味を特定のビット・パターンに帰属させる(ascribe)。例えば、スロー・ヘッダの最初の(最上位)ビットは、そのスローのサイズ(クアッド・ワード単位の長さ)が最初の4バイトのタイプ・ヘッダに従うか否か指定するために用いることができる。このビットがセットされている場合、スローのサイズが当該スローの次の4バイト(例えば、バイト5から8まで)に明示的に記録されていることが分かる。スローのサイズが、4バイトでは表現できないような場合(即ち、サイズが2の32乗以上である場合)、スローの最初の4バイトの次の最上位ビットもセットする。これは、スローが8バイト(4バイトではなく)長を有することを意味する。その場合、検査プロセスが、序数バイト(ordinal byte)5から12までに格納されているスローの長さを発見する。他方で、スロー・タイプの数値が小さいことは、多くの場合、完全に指定した類型ビット・パターンが、4バイトのスロー・ヘッダにおける多くのビットを「未使用のまま残してある」ことを意味し、そのような場合、これらのビットは、スローの長さをエンコードするために用いてもよく、そうしなければ必要となるはずのバイト(5から8まで)を取っておくことができる。
例えば、一実施形態では、スロー・ヘッダの最上位ビット(「長さ従属」フラグ)をセットしないままにしておき、次のビットをセットして、そのスローが「微小コンス」であることを示し、この場合、スローの長さ(クアッド単位)を残りの30ビットにエンコードする。同様に、「微小ストリング」は、ヘッダにおけるパターン001によって印され、スロー・ストリングの長さを表すために、29ビットが残され、ヘッダにおける最初の0001が「微小リスト」を記述する。これは、28ビットの利用可能長表現ビットのために、サイズが2から28クアッドまでのスロー・リストとすることができる。「最大ストリング」(あるいはコンスまたはリスト)は、ヘッダに異なるビット・シグネーチャを有し、ヘッダの最上位ビットは必ずセットされる。何故なら、スロー長はバイト5から8(または、極端な場合には12)において別個にエンコードされるからである。尚、プラズマ実施態様は、スローの組立時に、これらの構造(construct)の「微小」バージョンまたは「最大」バージョンのどちらを採用すべきか「決定する」(決定は、最終的なサイズが利用可能な微小ビットに「納まるか」否かに基づく)が、最大−対−微小の詳細は、プラズマ実施態様のユーザには隠されている。ユーザは、スロー・ストリング、またはスロー・コンス、またはスロー・リストを用いていることしか知らないし、そのことしか気に留めない。
一実施形態では、数値スロークスは、最初のヘッダ・パターン00001によって示される。後続のヘッダ・ビットは、任意の順列に組み合わせることができる1組の直交プロパティを表すために用いられる。一実施形態では、数値が(1)浮動小数点、(2)複素数、(3)符号なし、(4)「広い」、(5)「太くて短い」(stumpy)であるか否かを示すために、5つのこのようなキャラクタ・ビットを用いるが、これらに限定されるのではない((4)「広い」および(5)「太くて短い」の順序を変えて、8、16、32、および64ビット数表現を示す)。2つの追加ビット(例えば、(7)および(8))は、カプセル化した数値データが、2−、3−、または4−エレメント・ベクトルであることを示す(双方のビットが0の場合、数値が「1−エレメント・ベクトル」(即ち、スカラー)であることを示唆する)。この実施形態では、4番目のヘッダ・バイトの8ビットを用いて、カプセル化した数値データのサイズを(クアッド単位ではなく、バイト単位で)エンコードする。このサイズのエンコード処理は、1から256までの間のいずれのサイズでも表すことができるように、1だけずらされる。最後に、2つのキャラクタ・ビット(例えば、(9)および(10))を用いて、数値データが個々の数値エンティティの配列をエンコードすることを示す。数値エンティティの各々は、キャラクタ・ビット(1)から(8)までによって記述されるタイプのものである。アレイの場合、個々の数値エンティティには、各々、追加のヘッダが添付されず、1つのヘッダおよび恐らくは、明示的なスロー・サイズ情報に続く連続データとしてパックされる。
この実施形態では、単純かつ効率的なスローの複製(バイト毎のコピーとして実施することができる)、および非常に単純で効率的なスローの比較が可能となる(この実施形態では、連続と見なされる構成バイトの各々に1対1の一致がある場合に限って、2つのスロークスは同一となる)。後者のプロパティは、例えば、プロテイン・アーキテクチャの効率的な実現には重要である。その重要なそして波及する(pervasive)特徴は、プロテインのディスクリップ・リスト全体を検索できること、または「リスト上で照合」できることである。
更に、本明細書における実施形態は、集計スロー形態(例えば、スロー・コンスおよびスロー・リスト)を簡単かつ効率的に作成することを可能にする。例えば、一実施形態では、スロー・コンスを、いずれのタイプでもよく、これら自体集計を含む、2つの成分スロークスから次のように構築する。(a)各成分スローのサイズを問い合わせ、(b)2つの成分スロークスのサイズ、およびヘッダ・プラス・サイズ構造(structure)に必要な1、2、または3クアッドの和に等しいサイズのメモリを割り当て、(c)最初の4、8、または12バイトにスロー・ヘッダ(およびサイズ情報)を記録し、次いで(d)成分スロークスのバイトを順番に、直後に続くメモリにコピーする。重要なのは、このような組立ルーチンは、2つの成分スロークスのタイプについて何も知る必要がなく、それらのサイズ(そして、バイトのシーケンスとしてのアクセス可能性)だけが問題であることである。同じプロセスは、スロー・リストの作成にも関与する。スロー・リストは、(恐らくは)異質なタイプの任意の多くのサブ・スロークス(sub-slawx)の順序付けしたカプセル化である。
メモリにおける連続バイトとしてのスロー・システムの基本的フォーマットの更に別の成果が、「横断」活動(traversal activities)と関連して得られる。反復使用パターンが、例えば、スロー・リストに格納されている個々のスロークスへの順次アクセスを用いる。プロテイン構造(structure)内部におけるディスクリップおよびインジェストを表す個々のスロークスも同様に横断しなければならない。このような操作は、驚く程単純かつ効率的な方法で遂行される。つまり、スロー・リストにおける次のスローに「進み」、現在のスローの長さをそのメモリ位置に追加し、結果的に得られたメモリ位置が、次のスローのヘッダと同一となる。このような簡素さが可能なのは、スローおよびプロテインの設計が「間接」を避けるからである。つまり、ポインタがなく、データは単純にその全体が本来の場所に存在する。
スロー比較の時点までに、プラズマ・システムの完全な実施態様は、異なるオペレーティング・システム、CPU、およびハードウェア・アーキテクチャに跨ってそしてこれらの間において、異なり互換性のないデータ表現方式の存在を承認しなければならない。このような相違の主要なものには、バイト順序付け方針(例えば、リトル−エンディアン対ビッグ−エンディアン)および浮動小数点表現が含まれ、その他の相違も存在する。プラズマ仕様では、スロークスによってカプセル化したデータが解釈可能である(interprable)(即ち、スローを検査している元のアーキテクチャまたはプラットフォームのネーティブ・フォーマットで現れなければならない)。この要件は、一方、プラズマ・システム自体がデータ・フォーマット変換の責任を負うことを意味する。しかしながら、仕様では、スローが、それを検査するかもしれない実行中のプロセスに対して「完全に可視」になる前に変換を行うことしか規定していない。したがって、どの時点でこのようなフォーマットc変換を実行するかを選択するのは、個々の実施態様次第となる。2つのしかるべき手法があり、それは、(1)個々のスローがパックされていたプロテインから「引き出す」際に、または(2)プロテインが入っていたプールからそのプロテインを抽出する際に、当該プロテインの中にあるスロー全てについて同時に、スロー・データ・ペイロードをローカル・アーキテクチャのデータ・フォーマットに準拠させることである。尚、変換規定は、ハードウェア補助実施態様の可能性も考慮することを注記しておく。例えば、明示的プラズマ能力によって構築したネットワーキング・チップセットは、受信システムの既知の特性に基づいて、インテリジェントにそして「送信の時点」にフォーマット変換を実行することを選択することができる。あるいは、送信のプロセスがデータ・ペイロードを基軸フォーマットに変換することもでき、受信プロセスは、対称的に基軸フォーマットから「ローカル」フォーマットに変換する。別の実施形態では、「メタル」において(at the metal)フォーマット変換を実行する。これが意味するのは、データは、ローカル・メモリの中であっても、常に基軸フォーマットで格納されており、データをメモリから引き出し隣接するCPUのレジスタに入れるときに、メモリ・コントローラ・ハードウェア自体が変換を実行する。
一実施形態の最小(そして読み取り専用)プロテインの実施態様は、プロテインを利用する1つ又は複数のアプリケーションまたはプログラミング言語における動作または挙動を含む。図6Bは、一実施形態の下でプロテインを用いるための流れ図650である。動作を開始すると、652においてプロテインの長さをバイト単位で問い合わせる。654において、ディスクリップ・エントリの数を問い合わせる。656において、インジェストの数を問い合わせる。658において、インデックス番号によってディスクリップ・エントリを引き出す。660において、インデックス番号によってインジェストを引き出す。
また、本明細書において記載する実施形態は、プロテインを作成してデータを充填させる基本的な方法、プログラマによって共通のタスクを容易に行えるようにするヘルパ方法、および最適化を遂行するためのフック(hook)も定める。図6Cは、一実施形態の下においてプロテインを作成する、即ち、発生するための流れ図670である。動作は、672における新たなプロテインの作成から開始する。674において、一連のディスクリップ・エントリを添付する。また、676においてインジェストも添付する。678において、一致するディスクリップの存在を問い合わせ、680において、一致するインジェスト・キーの存在を問い合わせる。インジェスト・キーが得られたなら、682において、インジェスト値を引き出す。684において、ディスクリップ全体でパターン照合を実行する。686において、プロテインの先頭付近に、非構造化メタデータを埋め込む。
前述のように、スロークスはプロセス間交換のための低レベルのデータ定義を規定し、プロテインは問い合わせおよびフィルタ処理のために中間レベルの構造およびフックを規定し、プールは高レベルの編成およびアクセス・セマンティックスについて規定する。プールは、プロテインのためのレポジトリであり、線形シーケンシング(linear sequencing)および状態キャッシング(state caching)に備えている。また、プールは、多数のプログラムまたは多数の異なる種類のアプリケーションによるマルチ・プロセス・アクセスにも備えている。更に、プールは、1組の共通な、最適化可能なフィルタ処理およびパターン照合挙動にも備えている。
一実施形態のプールは、数万ものプロテインを収容することができ、状態を維持するように機能することができるので、個々のプロセスはマルチ・プロセス・プログラム・コードに共通する厄介なブックキーピングの多くの負担を軽減することができる。プールは、利用可能な過去のプロテインの大きなバッファを維持または保持し、プラトニック・プール(Platonic pool)は明示的に無限であるので、関与するプロセスは、プールにおいて意のままに逆方向および順方向の双方に走査することができる。バッファのサイズは、実施態様に左右されるが、勿論、慣例的な仕様では、プロテインをプールの中に数時間または数日保持できることが多い。
本明細書において記載するプール使用の最も慣例的な様式では、既存のプロセス間通信フレームワークが採用する機械論的(mechanistic)二点間手法とは対照的に、生物的比喩に従う。プロテインという名称は、生物的発想を暗示する。生物組織における化学的蛋白質が、多数の細胞因子(cellular agent)によるパターン照合およびフィルタ処理に利用可能であるのと同様に、プールの中にあるデータ・プロテインは、多数の計算プロセスによる柔軟な問い合わせおよびパターン照合に利用可能である。
2つの付加的な抽象化が生物的比喩に同調し(lean)、「ハンドラ」の使用およびゴルジ・フレームワーク(Golgi framework)を含む。プールに関与するプロセスは、一般に、多数のハンドラを作成する。ハンドラは、比較的小さい1群のコードであり、照合条件をハンドル挙動と関連付ける。1つ又は複数のハンドラをプールに類別することにより、プロセスは、状態をカプセル化し新たなプロテインに反応する、柔軟なコール・バック・トリガ(call-back trigger)を設定する。
数個のプールに関与するプロセスは、一般に、抽象的ゴルジ・クラスから継承する。ゴルジ・フレームワークは、多数のプールおよびハンドラを管理するための多くの有用なルーチンを提供する。また、ゴルジ・クラスは、親−子関係もカプセル化し、プールを用いないローカル・プロテイン交換のためのメカニズムを提供する。
一実施形態の下で提供するプールAPIは、種々の方法でプールを実現し、システム特定の目標、ならびに所与のハードウェアおよびネットワーク・アーキテクチャの利用可能な処理能力双方を考慮に入れるように構成されている。プールが依存する2つの基礎的なシステムの常設機構(provision)は、記憶設備およびプロセス間通信手段である。本明細書において記載する、現存する(extant)システムは、共有メモリ、仮想メモリ、および記憶設備用ディスク、ならびにプロセス間通信のためのIPCクエリおよびTCP/IPソケットの柔軟な組み合わせを用いる。
一実施形態のプールの機能性には、限定ではなく、以下が含まれる。プールに関与する。プロテインをプールの中に入れる。次の未見プロテインをプールから引き出す。プール内の内容(例えば、プロテイン)を逆回しまたは早送りする。加えて、プールの機能性には、限定ではなく、以下も含むことができる。プロセスに対するストリーミング・プール・コール・バックを設定する。ディスクリップまたはインジェスト・キーの特定のパターンと一致するプロテインを選択的に引き出す。ディスクリップまたはインジェスト・キーの特定のパターンと一致するプロテインについて逆方向および順方向に走査する。
前述のプロテインは、他のアプリケーションとプロテイン・データ・コンテンツを共有する方法として、プールに供給される。図7は、一実施形態の下において、スロークス、プロテイン、およびプールを用いたデータ交換を含む処理環境のブロック図である。この環境例は、前述のようにスロークス、プロテイン、およびプールの使用によりデータを共有する3つのデバイス(例えば、デバイスX、デバイスY、およびデバイスZ、ここでは纏めて「デバイス」と呼ぶ)を含む。これらのデバイスの各々は、3つのプール(例えば、プール1、プール2、プール3)に結合されている。プール1は、それぞれのデバイスから当該プールに提供または転送された多数のプロテイン(例えば、プロテインX1、プロテインZ2、プロテインY2、プロテインX4、プロテインY4)を含む(例えば、プロテインZ2は、デバイスZによってプール1に転送または提供された等)。プール2は、それぞれのデバイスから当該プールに提供または転送された多数のプロテイン(例えば、プロテインZ4、プロテインY3、プロテインZ1、プロテインX3)を含む(例えば、プロテインY3は、デバイスYによってプール2に転送または提供された等)。プール3は、それぞれのデバイスから当該プールに供給または転送された多数のプロテイン(例えば、プロテインY1、プロテインZ3、プロテインX2)を含む(例えば、プロテインX2は、デバイスXによってプール3に転送または提供された等)。前述の例では、3つのプール間に結合または接続されている3つのデバイスが含まれるが、あらゆる数のデバイスを、あらゆる数のプール間に如何様にでもまたはいずれの組み合わせでも結合または接続することができ、いずれのプールも、あらゆる数または組み合わせのデバイスから提供されるあらゆる数のプロテインを含むことができる。この例のプロテインおよびプールについては、図1から図6を参照しながら先に説明した。
図8は、多数のデバイスと、これらのデバイスの1つ又は複数で走る多数のプログラムを含む処理環境のブロック図であり、一実施形態の下において、プラズマ構造(plasma construct)(例えば、プール、プロテイン、およびスロー)を用いることにより、多数の実行中のプログラムが、デバイスによって発生したイベントを共有し、集合的に応答することを可能にする。このシステムは、マルチ・ユーザ、マルチ・デバイス、マルチ・コンピュータ双方向処理制御状況または構成の一例に過ぎない。更に特定すれば、この例では、多数のデバイス(例えば、デバイスA、B等)およびこれらのデバイス上で走る多数のプログラム(例えば、appsAA-AX、appsBA-BX等)を備えている双方向処理システムが、プラズマ構造(construct)(例えば、プール、プロテイン、およびスロー)を用いて、実行中のプログラムが、これらの入力デバイスによって発生したイベントを共有し、集合的にこれらのイベントに応答することを可能にする。
この例では、各デバイス(例えば、デバイスA、B等)は、それぞれのデバイス上で走っているプログラム(例えば、appsAA-AX、appsBA-BX等)が発生したまたは出力された離散生データ(raw data)を、プラズマ・プロテインに変換し、これらのプロテインをプラズマ・プールに貯入する。例えば、プログラムAXはデータまたは出力を発生し、この出力をデバイスAに供給する。一方、デバイスAはこの生データをプロテイン(例えば、プロテイン1A、プロテイン2A等)に変換し、これらのプロテインをプールに貯入する。別の例として、プログラムBCがデータを発生し、このデータをデバイスBに供給する。一方、デバイスBはこのデータをプロテイン(例えば、プロテイン1B、プロテイン2B等)に変換し、これらのプロテインをプールに貯入する。
各プロテインは、アプリケーションが発生し、プログラム自体についての情報を特定するデータまたは出力を指定するディスクリップ・リストを収容する。可能な場合には、プロテイン・ディスクリップは出力イベントまたは行動について一般的な意味論的意味(semantic meaning)を認めることもできる。プロテインのデータ・ペイロード(例えば、インジェスト)は、プログラム・イベントについての1組の有用な状態情報全体を搬送する。
前述のように、プロテインは、プログラムまたはデバイスの種類には関係なく、プールに結合または接続されているあらゆるプログラムまたはデバイスが使用するために、プールにおいて利用可能となっている。したがって、あらゆる数のコンピュータ上で走っているあらゆる数のプログラムでも、入力プールからイベント・プロテインを抽出することができる。これらのデバイスは、プールからプロテインを抽出するためには、ローカル・メモリ・バスまたはネットワーク接続のいずれかを通じて、プールに関与することができるだけでよい。これによって即座に得られる結果は、イベントを使用または解釈するプロセスから、処理イベントを発生する役割を担うプロセスを切断できるという利点である。別の結果は、イベントのソースおよびコンシューマ(consumer)を多重化し、デバイスを一人で制御できるように、または数人(例えば、プラズマに基づく入力フレームワークは、多くの同時ユーザをサポートする)で同時に用いることができるようにしつつ、結果的に得られるイベント・ストリームは多数のイベント・コンシューマに見えるようになることである。
一例として、デバイスCは1つ又は複数のプロテイン(例えば、プロテイン1A、2A等)をプールから抽出することができる。プロテインの抽出に続いて、デバイスCは、ディスクリップのスローおよびプロテインのインジェストから引き出したまたは読み出したプロテインのデータを、プロテイン・データが対応する処理イベントにおいて用いることができる。別の例として、デバイスBは、プールから1つ又は複数のプロテイン(例えば、プロテイン1C、プロテイン2A等)を抽出することができる。プロテインの抽出に続いて、デバイスBは、プロテイン・データが対応する処理イベントにおいて、プロテインのデータを用いることができる。
プールに結合または接続されているデバイスおよび/またはプログラムは、プロテインの特定のシーケンスを求めて、プールの中を逆方向および順方向に進む(skim)こともできる。これは、例えば、ある種のパターンと一致するプロテインの出現を待ち、次いで逆方向に進み、このプロテインがある種の他のものと共に出現したか否か判断するようにプログラムを設定する際に、有用となる場合が多い。この入力プールに格納されているイベント履歴を利用する設備は、多くの場合、状態管理コードの書き込みを不要としたり、少なくともこのような望ましくない符号化パターンに対する依存を著しく低減する。
図9は、多数のデバイスと、これらのデバイスの1つ又は複数で走る多数のプログラムを含む処理環境のブロック図であり、一代替実施形態の下において、プラズマ構造(plasma construct)(例えば、プール、プロテイン、およびスロー)を用いることにより、多数の実行中のプログラムが、デバイスによって発生したイベントを共有し、集合的に応答することを可能にする。このシステムは、マルチ・ユーザ、マルチ・デバイス、マルチ・コンピュータ双方向処理制御状況または構成の一例に過ぎない。更に特定すれば、この例では、多数のデバイス(例えば、デバイスAおよびBにそれぞれ結合されているデバイスXおよびY)および1つ又は複数のコンピュータ(例えば、デバイスA、デバイスB等)上で走る多数のプログラム(例えば、appsAA-AX、appsBA-BX等)を備えている双方向処理システムが、プラズマ構造(construct)(例えば、プール、プロテイン、およびスロー)を用いて、実行中のプログラムが、これらの入力デバイスによって発生したイベントを共有し、集合的にこれらのイベントに応答することを可能にする。
この例では、各デバイス(例えば、デバイスAおよびBにそれぞれ結合されているデバイスXおよびY)は、デバイス・ハードウェア(例えば、デバイスX、デバイスA、デバイスY、デバイスB等)が発生した離散生データをプラズマ・プロテインに変換し、これらのプロテインをプラズマ・プールに貯入するそれぞれのデバイス(例えば、デバイスA、デバイスB等)上にホストされている1つ又は複数のプログラムの下で、またはこれらと連携して動作するように管理および/または結合されている。例えば、デバイスA上にホストされているアプリケーションABと連携して動作するデバイスXは、生データを発生し、この離散生データをプロテイン(例えば、プロテイン1A、プロテイン2A等)に変換し、これらのプロテインをプールに貯入する。別の例として、デバイスA上にホストされているアプリケーションATと連携して動作するデバイスXが、離散生データをプロテイン(例えば、プロテイン1A、プロテイン2Aなど)に変換し、これらのプロテインをプールに貯入する。更に別の例として、デバイスC上にホストされているアプリケーションCDと連携して動作するデバイスZは、生データを発生し、この離散生データをプロテイン(例えば、プロテイン1C、プロテイン2C等)に変換し、これらのプロテインをプールに貯入する。
各プロテインは、入力デバイスが登録し、デバイス自体についての情報を特定する行動を指定するディスクリップ・リストを収容する。可能な場合には、プロテイン・ディスクリップはデバイスの行動について一般的な意味論的意味(semantic meaning)を認めることもできる。プロテインのデータ・ペイロード(例えば、インジェスト)は、デバイス・イベントについての1組の有用な状態情報全体を搬送する。
前述のように、プロテインは、プログラムまたはデバイスの種類には関係なく、プールに結合または接続されているあらゆるプログラムまたはデバイスが使用するために、プールにおいて利用可能となっている。したがって、あらゆる数のコンピュータ上で走っているあらゆる数のプログラムでも、入力プールからイベント・プロテインを抽出することができる。これらのデバイスは、プールからプロテインを抽出するためには、ローカル・メモリ・バスまたはネットワーク接続のいずれかを通じて、プールに関与することができるだけでよい。これによって即座に得られる結果は、イベントを使用または解釈するプロセスから、処理イベントを発生する役割を担うプロセスを切断できるという利点である。別の結果は、イベントのソースおよびコンシューマを多重化し、入力デバイスを一人で制御できるように、または数人(例えば、プラズマに基づく入力フレームワークは、多くの同時ユーザをサポートする)で同時に用いることができるようにしつつ、結果的に得られるイベント・ストリームは多数のイベント・コンシューマに順に見えるようになることである。
プールに結合または接続されているデバイスおよび/またはプログラムは、プロテインの特定のシーケンスを求めて、プールの中を逆方向および順方向に進む(skim)こともできる。これは、例えば、ある種のパターンと一致するプロテインの出現を待ち、次いで逆方向に進み、このプロテインがある種の他のものと共に出現したか否か判断するようにプログラムを設定する際に、有用となる場合が多い。この入力プールに格納されているイベント履歴を利用する設備は、多くの場合、状態管理コードの書き込みを不要としたり、少なくともこのような望ましくない符号化パターンに対する依存を著しく低減する。
図10は、多数の入力デバイスを含み、これらが当該デバイスの1つ又は複数で走る多数のプログラム間に結合されている処理環境のブロック図であり、別の代替実施形態の下において、プラズマ構造(plasma construct)(例えば、プール、プロテイン、およびスロー)を用いることにより、多数の実行中のプログラムが、入力デバイスによって発生したイベントを共有し、集合的に応答することを可能にする。このシステムは、マルチ・ユーザ、マルチ・デバイス、マルチ・コンピュータ双方向処理制御状況または構成の一例に過ぎない。更に特定すれば、この例では、双方向処理システムは、多数の入力デバイス(例えば、入力デバイスA、B、BA、およびBB等)を備えており、1つ又は複数のコンピュータ(例えば、デバイスA、デバイスB等)上で走る多数のプログラム(図示せず)を備えており、、プラズマ構造(construct)(例えば、プール、プロテイン、およびスロー)を用いて、実行中のプログラムが、これらの入力デバイスによって発生したイベントを共有すること、および集合的にこれらのイベントに応答することを可能にする。
この例では、各入力デバイス(例えば、入力デバイスA、B、BA、およびBB等)は、入力デバイス・ハードウェアが発生した離散生データをプラズマ・プロテインに変換し、これらのプロテインをプラズマ・プールに貯入するそれぞれのデバイス(例えば、デバイスA、デバイスB等)上にホストしたソフトウェア・ドライバ・プログラムによって管理される。例えば、入力デバイスAは生データを発生し、この生データをデバイスAに供給する。一方、デバイスAは離散生データをプロテイン(例えば、プロテイン1A、プロテイン2A等)に変換し、これらのプロテインをプールに貯入する。別の例として、入力デバイスBBは生データを発生し、この生データをデバイスBに供給する。一方、デバイスBは離散生データをプロテイン(例えば、プロテイン1B、プロテイン3B等)に変換し、これらのプロテインをプールに貯入する。
各プロテインは、入力デバイスが登録し、デバイス自体についての情報を特定する行動を指定するディスクリップ・リストを収容する。可能な場合には、プロテイン・ディスクリップはデバイスの行動について一般的な意味論的意味(semantic meaning)を認めることもできる。プロテインのデータ・ペイロード(例えば、インジェスト)は、デバイス・イベントについての1組の有用な状態情報全体を搬送する。
例示のために、ここに、このようなシステムにおける2つの典型的なイベントに対するプロテインを示す。ここでは、プロテインはテキストとして表すが、実際の実施態様では、これらのプロテインの構成部分は、類別されたデータ・バンドル(例えば、スロー)である。g-speak "one finger click" pose(「指1本によるクリック」のポーズ)(関連出願に記載されている)を記述するプロテインは、次の通りである。
Figure 0005905662


別の例として、マウスのクリックを記述するプロテインは次の通りである。
Figure 0005905662


以上のプロテインの見本のいずれかまたは双方は、そのコードの特定の部分を走らせるホスト・デバイスの関与プログラム(participating program)を生ずる可能性もある。これらのプログラムは、一般的なセマンティック・レベルに関係する場合がある。全ての内最も一般的なのは「point」であり、更に具体的な対は「engage, one」である。また、これらは、正確なデバイス:「one-finger-engage」または正に1つの集計オブジェクト(aggregate object)「hand-id-23」のみによってもっともらしく発生されるイベントを求めている場合もある。
前述のように、プロテインは、プログラムやデバイスの種類には関係なく、プールに結合または接続されているあらゆるプログラムまたはデバイスが用いるために、プールにおいて利用可能である。したがって、あらゆる数のコンピュータ上で走るあらゆる数のプログラムでも、入力プールからイベント・プロテインを抽出する。これらのデバイスは、プロテインをプールから抽出するためには、ローカル・メモリ・バスまたはネットワーク接続のいずれかを通じて、プールに関与することができるだけでよい。これによって即座に得られる結果は、イベントを使用または解釈するプロセスから、入力イベントを発生する役割を担うプロセスを切断できるという利点である。別の結果は、イベントのソースおよびコンシューマを多重化し、入力デバイスを一人で制御できるように、または数人(例えば、プラズマに基づく入力フレームワークは、多くの同時ユーザをサポートする)で同時に用いることができるようにしつつ、結果的に得られるイベント・ストリームは多数のイベント・コンシューマに順に見えるようになることである。
プロテイン使用の一例として、デバイスCは1つ又は複数のプロテイン(例えば、プロテイン1B等)をプールから抽出することができる。プロテイン抽出に続いて、デバイスCは、ディスクリップのスローおよびプロテインのインジェストから引き出したまたは読み出したプロテインのデータを、当該プロテイン・データが対応する入力デバイスCAおよびCCの入力イベントを処理する際に用いることができる。別の例として、デバイスAは、1つ又は複数のプロテイン(例えば、プロテイン1B等)をプールから抽出することができる。プロテインの抽出に続いて、デバイスAは、プロテイン・データが対応する入力デバイスAの入力イベントを処理する際に、当該プロテインのデータを用いることができる。
プールに結合または接続されているデバイスおよび/またはプログラムは、プロテインの特定のシーケンスを求めて、プールの中を逆方向および順方向に進む(skim)こともできる。これは、例えば、ある種のパターンと一致するプロテインの出現を待ち、次いで逆方向に進み、このプロテインがある種の他のものと共に出現したか否か判断するようにプログラムを設定する際に、有用となる場合が多い。この入力プールに格納されているイベント履歴を利用する設備は、多くの場合、状態管理コードの書き込みを不要としたり、少なくともこのような望ましくない符号化パターンに対する依存を著しく低減する。
本明細書において記載するシステムの実施形態に用いられる入力デバイスの例には、ジェスチャ入力センサ、キーボード、マウス、消費者電子機器において用いられるような赤外線リモコン装置、およびタスク指向有体媒体オブジェクト(task-oriented tangible media object)、その他にも数多く含まれる。
図11は、多数のデバイスを含み、これらが当該デバイスの1つ又は複数で走る多数のプログラム間に結合されている処理環境のブロック図であり、更に別の代替実施形態の下において、プラズマ構造(plasma construct)(例えば、プール、プロテイン、およびスロー)を用いることにより、多数の実行中のプログラムが、デバイスによって発生したグラフィクス・イベントを共有し、集合的に応答することを可能にする。このシステムは、多数の実行中のプログラム(例えば、グラフィクスA〜E)および1つ又は複数のディスプレイ・デバイス(図示せず)を備えているシステムの一例に過ぎず、プログラムの一部または全部のグラフィック出力が、プラズマ構造(construct)(例えば、プール、プロテイン、およびスロー)を用いて、調整しながら他のプログラムにも利用可能とし、実行中のプログラムが、これらのデバイスによって発生したグラフィック・イベントを共有すること、および集合的にこれらのイベントに応答することを可能にする。
コンピュータ・プログラムが、別のプログラムによって発生したグラフィクスを表示することが有用な場合は多い。広く知れ渡った様々な例には、テレビ会議アプリケーション、ネットワークを用いたスライドショーおよびデモ・プログラム、ならびにウィンドウ・マネージャが含まれる。この構成の下では、プールは、ビデオ、ネットワーク・アプリケーション共有、およびウィンドウ管理をカプセル化したフレームワークを一般化して実施するためにプラズマ・ライブラリとして用いられ、プログラマは、このようなプログラムの現バージョンでは一般には入手できない多数の特徴に追加することが可能になる。
プラズマ合成環境において走るプログラム(例えば、グラフィクスA〜E)は、プールへの結合および/または接続を通じて、調整プールに関与する。各プログラムは、種々の種類のグラフィック・ソースの可用性を示すために、そのプールにプロテインを貯入する。また、グラフィックスを表示するために利用可能なプログラムも、それらの表示処理能力、セキュリティおよびユーザ・プロファイル、ならびに物理的位置およびネットワーク位置を示すために、プロテインを貯入する。
また、グラフィクス・データをプールを通じて送信することもでき、あるいは表示プログラムに、他の種類(例えば、RTSPストリーム)のネットワーク・リソースを指し示させることもできる。「グラフィクス・データ」という用語は、本明細書において用いる場合、広義の連続体(broad continuum)に沿って存在する種々の異なる表現のことを指し、グラフィクス・データの例には、文字で表現される例(例えば、「画像」、または画素のブロック)、手順的例(例えば、典型的なopenGLパイプラインを下って行くような一連の「描画」指令)、および記述的例(例えば、幾何学的変形、クリッピング、および合成動作によって他のグラフィック構造(construct)を組み合わせる命令)が含まれるが、これらに限定されるのではない。
ローカル・マシン上では、グラフィクス・データは、プラットフォーム特定の表示ドライバ最適化を通じて配信することもできる。プールを通してグラフィクスを送信しない場合でも、多くの場合、周期的な画面キャプチャは、調整プールに格納されるので、より内部(esoteric)のソースに直接アクセスできないクライアントであっても、万一のときのグラフィクス(fall-back graphics)を表示することもできる。
本明細書において記載するシステムの利点の1つは、殆どのメッセージ伝達フレームワークおよびネットワーク・プロトコルとは異なり、プールがデータの大量のバッファを維持することである。したがって、プログラムはプールの中に逆戻りして、アクセスおよび使用パターン(調整プールの場合)を見たり、以前のグラフィクス・フレーム(グラフィクス・プールの場合)を抽出することができる。
図12は、多数のデバイスを含み、これらが当該デバイスの1つ又は複数で走る多数のプログラム間に結合されている処理環境のブロック図であり、更に別の代替実施形態の下において、プラズマ構造(plasma construct)(例えば、プール、プロテイン、およびスロー)を用いることにより、実行中のプログラムの状態検査、可視化、およびデバッグ処理を可能にする。このシステムは、多数のデバイス(例えば、デバイスA、デバイスB等)上に多数の実行プログラム(例えば、プログラムP−A、プログラムP−B等)を備えており、一部のプログラムがプールを用いてまたはプールを通じて他のプログラムの内部状態にアクセスするシステムの一例に過ぎない。
殆どの双方向処理コンピュータ・システムは、多くのプログラムを備えており、これらは、1台のマシンまたは多数のマシン上で互いに一緒に走り、ネットワークを跨いで双方向処理を行う。実行時データが各プロセス内部に隠されアクセスするのが困難なので、マルチ・プログラム・システムは、構成設定、分析、およびデバッグするのが難しい。本明細書において記載する一実施形態の一般化したフレームワークおよびプラズマ構造(construct)は、実行中のプログラムがプールを通じてそれらのデータの多くを利用可能にするので、他のプログラムがそれらの状態を検査することができる。このフレームワークによって、従来のデバッガよりも柔軟なデバッギング・ツール、精巧なシステム保守ツール、および1つまたは複数のプログラムが通過した一連の状態を、人の操作者に詳細に分析させるように構成された可視化ハーネスを可能にする。
図12を参照すると、このフレームワークにおいて走るプログラム(例えば、プログラムP−A、プログラムP−B等)は、プログラムの起動時にプロセス・プールを発生または作成する。このプールは、システム・アルマナックに登録され、セキュリティおよびアクセス制御が適用される。更に特定すると、各デバイス(例えば、デバイスA、B等)が、それぞれのデバイス上で走るプログラム(例えば、プログラムP−A、プログラムP−B等)が発生または出力した離散生データをプラズマ・プロテインに変換し、これらのプロテインをプラズマ・プールの中に貯入する。例えば、プログラムP−Aは、データまたは出力を発生し、この出力をデバイスAに供給する。一方、デバイスAは、この生データをプロテイン(例えば、プロテイン1A、プロテイン2A、プロテイン3A等)に変換し、これらのプロテインをプールの中に貯入する。別の例として、プログラムP−Bはデータを発生し、このデータをデバイスBに供給する。一方、デバイスBは、データをプロテイン(例えば、プロテイン1B〜4B等)に変換し、これらのプロテインをプールの中に貯入する。
プログラムの寿命の期間中、十分なアクセス許可を有する別のプログラムがプールに接続し(attach)、プログラムが貯入したプロテインを読み取ることもできる。これは、基本的な検査様式を表し、概念的に「一方向」即ち「読み取り専用」の提案(proposition)である。プログラムP−Aに関与するエンティティが、そのプロセス・プールの中にP−Aによって貯入されたステータス情報の流れを検査する。例えば、デバイスCの下で走る検査プログラムまたはアプリケーションが1つ又は複数のプロテイン(例えば、プロテイン1A、プロテイン2A等)をプールから抽出することができる。プロテインの抽出に続いて、デバイスCは、ディスクリップのスローおよびプロテインのインジェストから引き出した即ち読み出したプロテインのデータを用いて、プログラムP−Aの内部状態にアクセスし、これを解釈し、検査することができる。
しかし、プラズマ・システムは単に効率的なステートフル(stateful)伝送方式であるだけでなく、全方向メッセージング環境であることを思い起こすと、様々な追加モードがプログラム対プログラムの状態検査をサポートする。許可された検査プログラムは、それ自体でプロテインをプログラムPのプロセス・プールに貯入して、生成してそのプロセス・プールの中に入れた状態情報の特性に影響を及ぼし、これらの特性を制御することができる(結局、プログラムPはプロセス・プールに書き込むだけでなく、そこから読み取りも行う)。
図13は、多数のデバイスを含み、これらが当該デバイスの1つ又は複数で走る多数のプログラム間に結合されている処理環境のブロック図であり、追加の代替実施形態の下において、プラズマ構造(plasma construct)(例えば、プール、プロテイン、およびスロー)を用いることにより、当該プロセス・プールにおいて生成し配置された状態情報の特性に影響を及ぼすまたは制御することができる。このシステム例では、デバイスCの検査プログラムは、例えば、プログラム(例えば、プログラムP−A、プログラムP−B等)が、1回だけまたは特定の期間にわたって、通常よりも多い状態をプールにダンプすることを要求することができる。または、デバッグ通信の次の「レベル」を予示しておくと、関与するプログラムは、プログラム(例えば、プログラムP−A、プログラムP−B等)が、デバッグ・プールを通じた双方向処理が個々に可能でありそのために利用可能な、その実行時間環境において残存するオブジェクトを一覧に纏めたプロテインを放出(emit)することを要求することができる。このように通知すると、関与するプログラムはプログラムの実行時においてオブジェクトの中の個々に「アドレス」し、特定のオブジェクトだけが専有し応答するプロセス・プールにプロテインを入れることができる。関与するプログラムは、例えば、オブジェクトが、その成分変数全ての瞬時値を記述した報告プロテインを放出することを要求することもあり得る。それよりも更に重要なのは、関与するプログラムが、他のプロテインを通じて、オブジェクトにその挙動またはその変数の値を変更するように指令できることである。
更に具体的には、この例では、デバイスCの検査アプリケーションが、プールの中に、オブジェクト・リスト(例えば、「要求−オブジェクト・リスト」)の要求を(プロテインの形態で)入れて、次いでこのプールに結合されている各デバイス(例えば、デバイスA、デバイスB等)が抽出する。要求に応答して、各デバイス(例えば、デバイスA、デバイスB等)がプールの中に、その実行時環境において残存する、デバッグ・プールを通じて個々に検査することができそのために利用可能なオブジェクトを一覧に纏めたプロテイン(例えば、プロテイン1A、プロテイン1B等)を入れる。
このようにデバイスからのリストを通じて通知され、オブジェクトのリストに応答して、デバイスCの検査アプリケーションは、プログラム実行中におけるオブジェクトの中の個々にアドレスし、特定のオブジェクトのみが専有し応答するプロセス・プールにプロテインを入れる。デバイスCの検査アプリケーションは、例えば、要求プロテイン(例えば、プロテイン「要求報告P−A−O」、「要求報告P−B−O」)を、オブジェクト(例えば、それぞれ、オブジェクトP−A−O、オブジェクトP−B−O)が、その成分変数の全ての瞬時値を記述する報告プロテイン(例えば、プロテイン2A、プロテイン2B等)を放出するプールに入れる。各オブジェクト(例えば、オブジェクトP−A−O、オブジェクトP−B−O)は、その要求(例えば、それぞれ、プロテイン「要求報告P−A−O」、「要求報告P−B−O」)を抽出し、それに応答して、要求された報告(例えば、それぞれ、プロテイン2A、プロテイン2B)を含むプールにプロテインを入れる。次いで、デバイスCは種々の報告プロテイン(例えば、プロテイン2A、プロテイン2B等)を抽出し、適宜報告の内容に合わせて続く処理行為を実行する。
このように、プラズマを相互交換媒体として用いると、デバッグ処理、プロセス制御、ならびにプログラム対プログラムの通信および調整の間にある区別を究極的に解消し易くなる。
このため、一般化したプラズマ・フレームワークは、疎結合の様式で可視化および分析プログラムを設計することを可能にする。例えば、メモリ・アクセス・パターンを表示する可視化ツールは、基本的なメモリ・リードおよびライトをプールに出力するいずれのプログラムとでも合わせて用いることができる。分析を受けるプログラムは、可視化ツールの存在や設計を知る必要がなく、その逆も成り立つ。
以上のようにプールを用いると、システム性能に不当に影響を及ぼすことはない。例えば、実施形態は、毎秒数十万個のプロテインをプールに貯入することを考慮しているので、比較的冗漫なデータ出力を可能にしても、殆どのプログラムの応答性や双方向処理特性を著しく阻害することはない。
以上に記載したシステムおよび方法の例には、ソース・デバイスのイベントを検出するステップと、イベントを指定するデバイス・イベント・データと、当該イベントの状態情報とを備えている少なくとも1つのデータ・シーケンスを発生するステップであって、デバイス・イベント・データおよび状態情報は、ソース・デバイスのアプリケーションに対応するタイプを有するタイプ特定データである、ステップと、少なくとも1つのデータ・シーケンスを含むようにデータ・カプセルを形成するステップであって、データ・カプセルが、少なくとも1つのデータ・シーケンスのアプリケーション特定表現を備えているデータ構造を有する、ステップとを備えている、方法が含まれる。
一実施形態の少なくとも1つのデータ・シーケンスを発生するステップは、第1個別デバイス・イベント・データを含む第1個別データ集合を発生するステップと、第2個別状態情報を含む第2個別データ集合を発生するステップと、第1個別データ集合および第2個別データ集合を含むように第1データ・シーケンスを形成するステップとを備えている。
一実施形態の第1個別データ集合を発生するステップは、ソース・デバイスの識別データを含むように第1個別データ集合を形成するステップを含み、識別データは、ソース・デバイスを識別するデータを含む。
一実施形態の少なくとも1つのデータ・シーケンスを発生するステップは、第1個別デバイス・イベント・データを含む第1個別データ集合を発生するステップと、第2個別状態情報を含む第2個別データ集合を発生するステップと、第1個別データ集合および第2個別データ集合を含むように、第2データ・シーケンスを形成するステップとを備えている。
一実施形態の第1個別データ集合を発生するステップは、第1個別データ集合オフセットを発生するステップを含み、第1個別データ集合オフセットは、第2データ・シーケンスの第1個別データ集合を指し示す。
一実施形態の第2個別データ集合を発生するステップは、第2個別データ集合オフセットを発生するステップを含み、第2個別データ集合オフセットは、第2データ・シーケンスの第2個別データ集合を指し示す。
一実施形態の第1個別データ集合は、記述リストであり、この記述リストはデータの記述を含む。
一実施形態のデバイス・イベント・データは、類別したデータを表す、タグ付きのバイト・シーケンスである。
一実施形態のデバイス・イベント・データは、タイプ・ヘッダと、タイプ特定データ・レイアウトとを含む。
一実施形態の状態情報は、類別したデータを表す、タグ付きのバイト・シーケンスである。
一実施形態の状態情報は、タイプ・ヘッダと、タイプ特定データ・レイアウトとを含む。
一実施形態では、前述の方法は、少なくとも1つのオフセットを発生するステップと、少なくとも1つのオフセットを含むように、データ・カプセルを形成するステップとを備えている。
一実施形態では、前述の方法は、第1変数長を有する第1オフセットを発生するステップを備えており、第1オフセットは、少なくとも1つのデータ・シーケンスの第1データ・シーケンスのデバイス・イベント・データを指し示す。
一実施形態では、前述の方法は、第2可変長を有する第2オフセットを発生するステップを備えており、第2オフセットは、少なくとも1つのデータ・シーケンスの第1データ・シーケンスの状態情報を指し示す。
一実施形態では、前述の方法は、少なくとも1つのオフセットの第1オフセットを用いて、データ・カプセルを通る第1コード・パスを形成するステップと、少なくとも1つのオフセットの第2オフセットを用いて、データ・カプセルを通る第2コード・パスを形成するステップとを備えており、第1コード・パスおよび第2コード・パスは異なるパスである。
一実施形態の第1オフセットおよび第2オフセットの内少なくとも1つは、メタデータを含み、このメタデータは、アプリケーションのコンテキストに対応する、コンテキスト特定メタデータを備えている。
一実施形態では、前述の方法は、データ・カプセルの長さを含むヘッダを発生するステップと、ヘッダを含むようにデータ・カプセルを形成するステップとを備えている。
一実施形態では、前述の方法は、データ・カプセルをレポジトリに転送するステップを備えている。
一実施形態では、前述の方法は、第2ソース・デバイスの第2イベントを検出するステップと、第2イベントに対応するデータ・カプセルを求めて、レポジトリを検索するステップとを備えている。
一実施形態では、前述の方法は、データ・カプセルと第2イベントとの間にある対応を特定するステップと、特定に応答して、レポジトリからデータ・カプセルを抽出するステップと、データ・カプセルの内容に応答して、第2ソース・デバイスの代わりに第2イベントに対応する処理動作を、第2ソース・デバイスの代わりに実行するステップであって、ソース・デバイスは第1タイプのアプリケーションに対応し、第2ソース・デバイスは第2タイプの第アプリケーションに対応する、ステップとを備えている。
一実施形態のレポジトリは、複数のアプリケーションに結合されており、レポジトリは、複数のアプリケーションに対応する複数のデータ・カプセルを含み、レポジトリは、複数のアプリケーションによる複数のデータ・カプセルへのアクセスを与え、複数のアプリケーションの内少なくとも2つが異なるアプリケーションである。
一実施形態のレポジトリは、複数のデータ・カプセルの状態をキャッシュする処理に備える。
一実施形態のレポジトリは、複数のデータ・カプセルを線形に整列する処理に備える。
一実施形態のデータ構造は、類別されていない。
一実施形態のデータ・カプセルのデータ構造は、デバイス・イベント・データおよび状態情報のプラットフォーム独立表現を規定する。
一実施形態のデータ・カプセルのデータ構造は、デバイスイベント・データおよび状態情報へのプラットフォーム独立アクセスを与える。
一実施形態では、前述の方法は、データ・カプセルを、第1アプリケーション・タイプを有する第1アプリケーションから、少なくとも1つの第2アプリケーション・タイプを有する少なくとも1つの第2アプリケーションに転送するステップを備えており、第1アプリケーション・タイプは第2アプリケーション・タイプとは異なり、少なくとも1つのデータ・シーケンスを発生するステップを、第1アプリケーションによって実行するステップと、転送の間、データ・カプセルの少なくとも1つのデータ・シーケンスを不変のまま維持するステップとを備えている。
一実施形態では、前述の方法は、第2アプリケーションの動作中、少なくとも1つのデータ・シーケンスを用いるステップを備えている。
一実施形態のイベントは、ユーザ・インターフェース・イベントを備えている。
一実施形態のイベントは、グラフィクス・イベントを備えている。
一実施形態のイベントは、状態情報の貯入を備えている。
前述のシステムおよび方法の例は、デバイス・イベント・データとソース・デバイスの識別データとを含む第1データ集合を発生するステップであって、デバイス・イベント・データは、ソース・デバイスが登録したイベントを指定するデータを含み、識別データは、ソース・デバイスを識別するデータを含む、ステップと、イベントの状態情報集合全体を含む第2データ集合を発生するステップと、第1データ集合および第2データ集合の各々は、タイプ特定データ・レイアウトとした類型データ・バンドルを備えており、第1データ集合および第2データ集合を含むようにデータ・カプセルを形成することにより、第1データ集合および第2データ集合をカプセル化するステップであって、データ・カプセルが、少なくとも1つのデータ・シーケンスのアプリケーション独立表現を備えているデータ構造を有する、ステップとを備えている、方法を含む。
前述のシステムおよび方法の例は、第1タイプのアプリケーションの下で走るデバイスのイベントを検出するステップと、イベントを指定するデバイス・イベント・データと、イベントの状態情報とを備えているデータ・シーケンスを発生するステップであって、デバイス・イベント・データおよび状態情報が、アプリケーションに対応するタイプを有するタイプ特定データである、ステップと、データ・シーケンスを含むようにデータ・カプセルを形成するステップであって、データ・カプセルが、データ・シーケンスのアプリケーション独立表現を備えているデータ構造を有する、ステップと、少なくとも1つの第2タイプを有する少なくとも1つの第2アプリケーションの下で走る少なくとも1つの第2ソース・デバイスの第2イベントを検出するステップであって、第2タイプが第1タイプとは異なる、ステップと、データ・カプセルと第2イベントとの間にある対応を特定するステップと、第2イベントに応答して、データ・カプセルのデータ・シーケンスの内容を用いて、動作を実行するステップとを備えている、方法を含む。
一実施形態のデータ・シーケンスを発生するステップは、デバイス・イベント・データを含む第1データ集合を発生するステップと、状態情報を含む第2データ集合を発生するステップと、第1データ集合および第2データ集合を含むように、第1データ・シーケンスを形成するステップとを備えている。
一実施形態のデバイス・イベント・データは、類別したデータを表す、タグ付きのバイト・シーケンスである。
一実施形態のデバイス・イベント・データは、タイプ・ヘッダと、タイプ特定データ・レイアウトとを含む。
一実施形態の状態情報は、類別したデータを表す、タグ付きのバイト・シーケンスである。
一実施形態の状態情報は、タイプ・ヘッダと、タイプ特定データ・レイアウトとを含む。
一実施形態では、前述の方法は、少なくとも1つのオフセットを発生するステップと、少なくとも1つのオフセットを含むように、データ・カプセルを形成するステップとを備えている。
一実施形態では、前述の方法は、第1変数長を有する第1オフセットを発生するステップであって、第1オフセットは、少なくとも1つのデータ・シーケンスの第1データ・シーケンスのデバイス・イベント・データを指し示す、ステップと、第2可変長を有する第2オフセットを発生するステップであって、第2オフセットは、少なくとも1つのデータ・シーケンスの第1データ・シーケンスの状態情報を指し示す、ステップとを備えている。
一実施形態では、前述の方法は、少なくとも1つのオフセットの第1オフセットを用いて、データ・カプセルを通る第1コード・パスを形成するステップと、少なくとも1つのオフセットの第2オフセットを用いて、データ・カプセルを通る第2コード・パスを形成するステップとを備えており、第1コード・パスおよび第2コード・パスは異なるパスである。
一実施形態の第1オフセットおよび第2オフセットの内少なくとも1つは、メタデータを含み、このメタデータは、アプリケーションのコンテキストに対応する、コンテキスト特定メタデータを備えている。
一実施形態では、前述の方法は、データ・カプセルをレポジトリに転送するステップを備えている。
一実施形態では、前述の方法は、第2イベントに対応するデータ・カプセルを求めて、レポジトリを検索するステップと、対応の特定に応答して、レポジトリからデータ・カプセルを抽出するステップとを備えている。
一実施形態のレポジトリは、アプリケーションおよび少なくとも1つの第2アプリケーションに結合されており、レポジトリは、アプリケーションおよび少なくとも1つの第2アプリケーションに対応する複数のデータ・カプセルを含み、レポジトリは、アプリケーションおよび少なくとも1つの第2アプリケーションによる複数のデータ・カプセルへのアクセスを与える。
一実施形態のレポジトリは、複数のデータ・カプセルの状態をキャッシュする処理に備える。
一実施形態のレポジトリは、複数のデータ・カプセルを線形に整列する処理に備える。
一実施形態のデータ構造は、類別されていない。
一実施形態のデータ・カプセルのデータ構造は、デバイス・イベント・データおよび状態情報のプラットフォーム独立表現を規定する。
一実施形態のデータ・カプセルのデータ構造は、デバイスイベント・データおよび状態情報へのプラットフォーム独立アクセスを与える、方法。
前述のシステムおよび方法の例は、第1タイプのアプリケーションの下で走る第1ソース・デバイスのイベントを検出するステップと、イベントを指定するデバイス・イベント・データと、イベントの状態情報とを備えているデータ・シーケンスを発生するステップであって、デバイス・イベント・データおよび状態情報は、アプリケーションに対応するタイプを有するタイプ特定データである、ステップと、データ・シーケンスを含むようにデータ・カプセルを形成するステップであって、データ・カプセルが、データ・シーケンスのアプリケーション独立表現を備えているデータ構造を有する、ステップと、データ・カプセルをレポジトリに入れるステップと、少なくとも1つの第2タイプを有する少なくとも1つの第2アプリケーションの下で走る少なくとも1つの第2ソース・デバイスの第2イベントを検出するステップと、レポジトリを検索し、データ・カプセルと第2イベントとの間にある対応を特定するステップと、データ・カプセルのデータ・シーケンスの内容を用いて、第2イベントに対応する動作を、第2ソース・デバイスの代わりに実行するステップとを備えている、方法を含む。
本明細書において記載したシステムおよび方法は、スロークス、プロテイン、および方法の使用を通じてデータをカプセル化し、カプセル化したデータを転送および使用するシステムおよび方法を含み、処理システムを含み、および/または処理システムの下でおよび/または処理システムと連携して実行する。処理システムは、当技術分野では周知のように、互いに動作するプロセッサ主体デバイスまたは計算デバイスのあらゆる集合体、あるいは処理システムまたはデバイスのコンポーネントを含む。例えば、処理システムは、携帯用コンピュータ、通信ネットワークにおいて動作する携帯用通信デバイス、および/またはネットワーク・サーバの1つ又は複数を含むことができる。携帯用コンピュータは、パーソナル・コンピュータ、セルラ電話機、パーソナル・ディジタル・アシスタント、携帯用計算デバイス、および携帯用通信デバイスの中から選択した多数のデバイスおよび/またはデバイスの組み合わせのいずれとすることもできるが、そのように限定されるのではない。処理システムは、それよりも大きなコンピュータ・システムの中にあるコンポーネントを含むことができる。
一実施形態の処理システムは、少なくとも1つのプロセッサと、少なくとも1つのメモリ・デバイスまたはサブシステムとを含む。また、処理システムは、少なくとも1つのデータベースを含むか、またはこれに結合することができる。「プロセッサ」という用語は、本明細書において一般に用いる場合、1つ又は複数の中央演算装置(CPU)、ディジタル信号プロセッサ(DSP)、特定用途集積回路(ASIC)等のような、あらゆる論理演算装置を指す。プロセッサおよびメモリは、1つのチップ上にモノリシックに集積することができ、多数のチップまたはホスト・コンピュータのコンポーネント間で分散することができ、および/またはアルゴリズムの何らかの組み合わせによって提供することができる。本明細書において記載した方法は、ソフトウェア・アルゴリズム(群)、プログラム、ファームウェア、ハードウェア、コンポーネント、回路の1つ又は複数で、いずれの組み合わせでも実現することができる。
本明細書において記載したシステムおよび方法を具現化するシステム・コンポーネントは、一緒に配置すること、または別個の位置に配置することができる。したがって、本明細書において記載したシステムおよび方法を具現化するシステム・コンポーネントは、単一のシステム、多数のシステム、および/または地理的に離れたシステムのコンポーネントとすることができる。また、これらのコンポーネントは、単一のシステム、多数のシステム、および/または地理的に離れたサブシステムのサブコンポーネントまたはサブシステムとすることもできる。これらのコンポーネントは、ホストシステムの1つ又は複数のその他のコンポーネント、またはホスト・システムに結合されているシステムに結合することができる。
通信経路は、システム・コンポーネントを結合し、コンポーネント間においてファイルを伝達または転送する媒体であればいずれでも含む。通信経路は、無線接続、有線接続、混成無線/有線接続を含む。また、通信経路は、ローカル・エリア・ネットワーク(LAN)、都市エリア・ネットワーク(MAN)、ワイド・エリア・ネットワーク(WAN)、企業固有ネットワーク、事務所間またはバックエンド・ネットワーク、およびインターネットを含むネットワークへの結合または接続も含む。更に、通信経路は、フロッピ・ディスク、ハード・ディスク・ドライブ、およびCD−ROMディスクのような、リムーバブル固定媒体、ならびにフラッシュRAM、ユニバーサル・シリアル・バス(USB)接続、RS−232接続、電話回線、バス、および電子メール・メッセージを含む。
文脈が特に明確に要求しない限り、説明全体を通じて、「備える」(comprise)、「備えている」(comprising)等の単語は、排他的または網羅的な意味とは逆に、包含的意味で解釈することとする。即ち、「含むがそれに限定されない」という意味である。また、単数または複数を用いる単語は、それぞれ、複数または単数も含むこととする。加えて、「ここでは」、「以下では」、「以上」、「以下」および同様の趣旨の単語は、本願のいずれかの特定部分ではなく、本願全体を指すこととする。「または」という単語が2つ以上の項目のリストに関して用いられる場合、その単語は以下の単語の解釈全てに及ぶこととする。リストにおける項目のいずれか、リストにおける項目全て、およびリストにおける項目のあらゆる組み合わせ。
以上におけるプログラミング環境の実施形態の説明は、網羅的であることも、記載したシステムおよび方法を、開示した形態そのものに限定することも意図していない。プログラミング環境の具体的な実施形態およびその例は、本明細書では例示の目的で記載したが、その他のシステムおよび方法の範囲内において、種々の同等な修正も可能であることは、当業者であれば認められよう。本明細書において提案したプログラミング環境の教示は、前述のシステムおよび方法だけでなく、他の処理システムおよび方法にも適用することができる。
以上で説明した種々の実施形態の要素および行為(act)を組み合わせて、更に別の実施形態を提案することができる。これらおよびその他の変更は、以上に詳細に記載した説明を参照すれば、プログラミング環境に対して行うことができる。

Claims (41)

  1. ソース・デバイスによって生成又は出力されるデータ、又は前記ソース・デバイスに対応するプログラムを使用して、前記ソース・デバイスのイベントを検出するステップと、
    前記イベントを指定するデバイス・イベント・データであるディスクリプトと、当該イベントの状態情報であるインジェストとを備えている少なくとも1つのデータ・シーケンスを含むプロテインを発生するステップであって、前記デバイス・イベント・データおよび状態情報は、前記ソース・デバイスのアプリケーションに対応するタイプを有するタイプ特定データを含むスローを備えている、ステップと、
    前記少なくとも1つのデータ・シーケンスを含む前記プロテインを含むようにデータ・カプセルを形成するステップであって、該データ・カプセルが、前記少なくとも1つのデータ・シーケンスを含む前記プロテインを、類別されていない(untyped)データ構造を用いて表現する、ステップと、
    前記データ・カプセルを、第1アプリケーション・タイプを有する第1アプリケーションから、少なくとも1つの第2アプリケーション・タイプを有する少なくとも1つの第2アプリケーションにプールを介して転送するステップであって、前記第1アプリケーション・タイプは前記第2アプリケーション・タイプとは異なり、前記少なくとも1つのデータ・シーケンスを発生するステップを、前記第1アプリケーションによって実行する、ステップと、
    前記転送の間、前記データ・カプセルの少なくとも1つのデータ・シーケンスを不変のまま維持するステップと、
    を備えている、方法。
  2. 請求項1記載の方法において、前記少なくとも1つのデータ・シーケンスを発生するステップは、
    第1個別デバイス・イベント・データを含む第1個別データ集合を発生するステップと、
    第2個別状態情報を含む第2個別データ集合を発生するステップと、
    前記第1個別データ集合および前記第2個別データ集合を含むように第1データ・シーケンスを形成するステップと、
    を備えている、方法。
  3. 請求項2記載の方法において、前記第1個別データ集合を発生するステップは、前記ソース・デバイスの識別データを含むように前記第1個別データ集合を形成するステップを含み、前記識別データは、前記ソース・デバイスを識別するデータを含む、方法。
  4. 請求項2記載の方法において、前記少なくとも1つのデータ・シーケンスを発生するステップは、
    第1個別デバイス・イベント・データを含む第1個別データ集合を発生するステップと、
    第2個別状態情報を含む第2個別データ集合を発生するステップと、
    前記第1個別データ集合および前記第2個別データ集合を含むように、第2データ・シーケンスを形成するステップと、
    を備えている、方法。
  5. 請求項4記載の方法において、前記第1個別データ集合を発生するステップは、第1個別データ集合オフセットを発生するステップを含み、前記第1個別データ集合オフセットは、前記第2データ・シーケンスの第1個別データ集合を指し示す、方法。
  6. 請求項4記載の方法において、前記第2個別データ集合を発生するステップは、第2個別データ集合オフセットを発生するステップを含み、前記第2個別データ集合オフセットは、前記第2データ・シーケンスの第2個別データ集合を指し示す、方法。
  7. 請求項2記載の方法において、前記第1個別データ集合は、記述リストであり、該記述リストは前記データの記述を含む、方法。
  8. 請求項1記載の方法において、前記デバイス・イベント・データは、類別したデータを表す、タグ付きのバイト・シーケンスである、方法。
  9. 請求項8記載の方法において、前記デバイス・イベント・データは、タイプ・ヘッダと、タイプ特定データ・レイアウトとを含む、方法。
  10. 請求項1記載の方法において、前記状態情報は、類別したデータを表す、タグ付きのバイト・シーケンスである、方法。
  11. 請求項10記載の方法において、前記状態情報は、タイプ・ヘッダと、タイプ特定データ・レイアウトとを含む、方法。
  12. 請求項1記載の方法であって、
    少なくとも1つのオフセットを発生するステップと、
    前記少なくとも1つのオフセットを含むように、前記データ・カプセルを形成するステップと、
    を備えている、方法。
  13. 請求項12記載の方法であって、
    第1変数長を有する第1オフセットを発生するステップを備えており、
    前記第1オフセットは、前記少なくとも1つのデータ・シーケンスの第1データ・シーケンスの前記デバイス・イベント・データを指し示す、方法。
  14. 請求項12記載の方法であって、
    第2可変長を有する第2オフセットを発生するステップを備えており、
    前記第2オフセットは、前記少なくとも1つのデータ・シーケンスの第1データ・シーケンスの前記状態情報を指し示す、方法。
  15. 請求項12記載の方法であって、
    前記少なくとも1つのオフセットの第1オフセットを用いて、前記データ・カプセルを通る第1コード・パスを形成するステップと、
    前記少なくとも1つのオフセットの第2オフセットを用いて、前記データ・カプセルを通る第2コード・パスを形成するステップと、
    を備えており、前記第1コード・パスおよび前記第2コード・パスは異なるパスである、方法。
  16. 請求項12記載の方法において、前記第1オフセットおよび前記第2オフセットの内少なくとも1つは、メタデータを含み、該メタデータは、前記アプリケーションのコンテキストに対応する、コンテキスト特定メタデータを備えている、方法。
  17. 請求項1記載の方法であって、
    前記データ・カプセルの長さを含むヘッダを発生するステップと、
    前記ヘッダを含むように前記データ・カプセルを形成するステップと、
    を備えている、方法。
  18. 請求項1記載の方法であって、前記データ・カプセルをレポジトリに転送するステップを備えている、方法。
  19. 請求項18記載の方法であって、
    第2ソース・デバイスの第2イベントを検出するステップと、
    前記第2イベントに対応するデータ・カプセルを求めて、前記レポジトリを検索するステップと、
    を備えている、方法。
  20. 請求項19記載の方法であって、
    前記データ・カプセルと前記第2イベントとの間にある対応を特定するステップと、
    前記特定に応答して、前記レポジトリから前記データ・カプセルを抽出するステップと、
    前記データ・カプセルの内容に応答して、前記第2ソース・デバイスの代わりに前記第2イベントに対応する処理動作を、前記第2ソース・デバイスの代わりに実行するステップであって、前記ソース・デバイスは第1タイプのアプリケーションに対応し、前記第2ソース・デバイスは第2タイプの第2アプリケーションに対応する、ステップと、
    を備えている、方法。
  21. 請求項18記載の方法において、前記レポジトリは、複数のアプリケーションに結合されており、前記レポジトリは、前記複数のアプリケーションに対応する複数のデータ・カプセルを含み、前記レポジトリは、前記複数のアプリケーションによる前記複数のデータ・カプセルへのアクセスを与え、前記複数のアプリケーションは、少なくとも前記第1アプリケーション及び前記第2アプリケーションを含み、前記複数のアプリケーションの内少なくとも2つが異なるアプリケーションである、方法。
  22. 請求項18記載の方法において、前記レポジトリは、複数のデータ・カプセルの状態をキャッシュする処理に備える、方法。
  23. 請求項18記載の方法において、前記レポジトリは、複数のデータ・カプセルを線形に整列する処理に備える、方法。
  24. 請求項1記載の方法であって、前記第2アプリケーションの動作中、前記少なくとも1つのデータ・シーケンスを用いるステップを備えている、方法。
  25. 請求項1記載の方法において、前記イベントは、ユーザ・インターフェース・イベントを備えている、方法。
  26. 請求項1記載の方法において、前記イベントは、グラフィクス・イベントを備えている、方法。
  27. 請求項1記載の方法において、前記イベントは、状態情報の貯入を備えている、方法。
  28. データをカプセル化する方法であって、
    デバイス・イベント・データとソース・デバイスの識別データとを含むディスクリップ・リストを含む第1データ集合を発生するステップであって、前記デバイス・イベント・データは、前記ソース・デバイスが登録したイベントを指定するデータを含み、前記識別データは、前記ソース・デバイスを識別するデータを含む、ステップと、
    前記イベントの状態情報集合全体を含むインジェストを含む第2データ集合を発生するステップと、
    前記第1データ集合および前記第2データ集合の各々は、タイプ特定データ・レイアウトとした類型データ・バンドルを備えており、
    前記第1データ集合および前記第2データ集合を含むようにデータ・カプセルを形成することにより、前記第1データ集合および前記第2データ集合をカプセル化するステップであって、前記データ・カプセルが、前記第1データ集合及び前記第2データ集合の類別されていない表現であるデータ構造を有する、ステップと、
    前記データ・カプセルを、第1アプリケーション・タイプを有する第1アプリケーションから、少なくとも1つの第2アプリケーション・タイプを有する少なくとも1つの第2アプリケーションに少なくとも1つのプールを介して転送するステップであって、前記第1アプリケーション・タイプは前記第2アプリケーション・タイプとは異なり、前記少なくとも1つのデータ・シーケンスを発生するステップを、前記第1アプリケーションによって実行する、ステップと、
    前記転送の間、前記データ・カプセルの少なくとも1つのデータ・シーケンスを不変のまま維持するステップと、
    を備えている、方法。
  29. 第1タイプのアプリケーションの下で走るデバイスのイベントを検出するステップと、
    前記イベントを指定するデバイス・イベント・データであるディスクリプトと、当該イベントの状態情報であるインジェストとを備えている少なくとも1つのデータ・シーケンスを含むプロテインを発生するステップであって、前記デバイス・イベント・データおよび状態情報は、それぞれ前記ソース・デバイスのアプリケーションに対応するタイプを有するタイプ特定データを含むスローを備えている、ステップと、
    前記データ・シーケンスであるプロテインを含むようにデータ・カプセルを形成するステップであって、前記データ・カプセルが、前記データ・シーケンスの類別されていない表現であるデータ構造を有する、ステップと、
    前記データ・カプセルをレポジトリに転送するステップと、
    少なくとも1つの第2タイプを有する少なくとも1つの第2アプリケーションの下で走る少なくとも1つの第2ソース・デバイスの第2イベントを検出するステップであって、前記第2タイプが前記第1タイプとは異なる、ステップと、
    前記第2イベントに対応するデータ・カプセルを求めて、前記レポジトリを検索するステップと、
    前記データ・カプセルと前記第2イベントとの間にある対応を特定するステップと、
    前記対応の特定に応答して、前記レポジトリから前記データ・カプセルを抽出するステップと、
    前記第2イベントに応答して、前記データ・カプセルのデータ・シーケンスの内容を用いて、動作を実行するステップと、
    を備えている、方法。
  30. 請求項29記載の方法において、前記データ・シーケンスを発生するステップは、
    前記デバイス・イベント・データを含む第1データ集合を発生するステップと、
    前記状態情報を含む第2データ集合を発生するステップと、
    前記第1データ集合および前記第2データ集合を含むように、第1データ・シーケンスを形成するステップと、
    を備えている、方法。
  31. 請求項29記載の方法において、前記デバイス・イベント・データは、類別したデータを表す、タグ付きのバイト・シーケンスである、方法。
  32. 請求項31記載の方法において、前記デバイス・イベント・データは、タイプ・ヘッダと、タイプ特定データ・レイアウトとを含む、方法。
  33. 請求項29記載の方法において、前記状態情報は、類別したデータを表す、タグ付きのバイト・シーケンスである、方法。
  34. 請求項33記載の方法において、前記状態情報は、タイプ・ヘッダと、タイプ特定データ・レイアウトとを含む、方法。
  35. 請求項29記載の方法であって、
    少なくとも1つのオフセットを発生するステップと、
    前記少なくとも1つのオフセットを含むように、前記データ・カプセルを形成するステップと、
    を備えている、方法。
  36. 請求項35記載の方法であって、
    第1変数長を有する第1オフセットを発生するステップであって、前記第1オフセットは、前記少なくとも1つのデータ・シーケンスの第1データ・シーケンスの前記デバイス・イベント・データを指し示す、ステップと、
    第2可変長を有する第2オフセットを発生するステップであって、前記第2オフセットは、前記少なくとも1つのデータ・シーケンスの第1データ・シーケンスの前記状態情報を指し示す、ステップと、
    を備えている、方法。
  37. 請求項35記載の方法であって、
    前記少なくとも1つのオフセットの第1オフセットを用いて、前記データ・カプセルを通る第1コード・パスを形成するステップと、
    前記少なくとも1つのオフセットの第2オフセットを用いて、前記データ・カプセルを通る第2コード・パスを形成するステップと、
    を備えており、前記第1コード・パスおよび前記第2コード・パスは異なるパスである、方法。
  38. 請求項35記載の方法において、前記第1オフセットおよび前記第2オフセットの内少なくとも1つは、メタデータを含み、該メタデータは、前記アプリケーションのコンテキストに対応する、コンテキスト特定メタデータを備えている、方法。
  39. 請求項29記載の方法において、前記レポジトリは、前記アプリケーションおよび前記少なくとも1つの第2アプリケーションに結合されており、前記レポジトリは、前記アプリケーションおよび前記少なくとも1つの第2アプリケーションに対応する複数のデータ・カプセルを含み、前記レポジトリは、前記アプリケーションおよび前記少なくとも1つの第2アプリケーションによる前記複数のデータ・カプセルへのアクセスを与える、方法。
  40. 請求項29記載の方法において、前記レポジトリは、複数のデータ・カプセルの状態をキャッシュする処理に備える、方法。
  41. 請求項29記載の方法において、前記レポジトリは、複数のデータ・カプセルを線形に整列する処理に備える、方法。
JP2010506501A 2007-04-24 2008-04-24 プロテイン、プール、およびスロークス処理環境 Active JP5905662B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US92611607P 2007-04-24 2007-04-24
US60/926,116 2007-04-24
PCT/US2008/061457 WO2008134452A2 (en) 2007-04-24 2008-04-24 Proteins, pools, and slawx in processing environments

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2014126090A Division JP2014222506A (ja) 2007-04-24 2014-06-19 プロテイン、プール、およびスロークス処理環境

Publications (2)

Publication Number Publication Date
JP2010525494A JP2010525494A (ja) 2010-07-22
JP5905662B2 true JP5905662B2 (ja) 2016-04-20

Family

ID=39888612

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2010506501A Active JP5905662B2 (ja) 2007-04-24 2008-04-24 プロテイン、プール、およびスロークス処理環境
JP2014126090A Pending JP2014222506A (ja) 2007-04-24 2014-06-19 プロテイン、プール、およびスロークス処理環境

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2014126090A Pending JP2014222506A (ja) 2007-04-24 2014-06-19 プロテイン、プール、およびスロークス処理環境

Country Status (7)

Country Link
US (4) US8407725B2 (ja)
EP (2) EP2150893A4 (ja)
JP (2) JP5905662B2 (ja)
KR (1) KR101545360B1 (ja)
CN (1) CN101689152B (ja)
NO (1) NO20093236L (ja)
WO (1) WO2008134452A2 (ja)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101536494B (zh) 2005-02-08 2017-04-26 奥布隆工业有限公司 用于基于姿势的控制系统的系统和方法
US9075441B2 (en) 2006-02-08 2015-07-07 Oblong Industries, Inc. Gesture based control using three-dimensional information extracted over an extended depth of field
US8531396B2 (en) 2006-02-08 2013-09-10 Oblong Industries, Inc. Control system for navigating a principal dimension of a data space
US8537111B2 (en) 2006-02-08 2013-09-17 Oblong Industries, Inc. Control system for navigating a principal dimension of a data space
US9823747B2 (en) 2006-02-08 2017-11-21 Oblong Industries, Inc. Spatial, multi-modal control device for use with spatial operating system
US8370383B2 (en) 2006-02-08 2013-02-05 Oblong Industries, Inc. Multi-process interactive systems and methods
US9910497B2 (en) 2006-02-08 2018-03-06 Oblong Industries, Inc. Gestural control of autonomous and semi-autonomous systems
EP2150893A4 (en) 2007-04-24 2012-08-22 Oblong Ind Inc PROTEINS, POOLS AND SLAWX IN PROCESSING ENVIRONMENTS
US9740293B2 (en) 2009-04-02 2017-08-22 Oblong Industries, Inc. Operating environment with gestural control and multiple client devices, displays, and users
US9740922B2 (en) 2008-04-24 2017-08-22 Oblong Industries, Inc. Adaptive tracking system for spatial input devices
US8896531B2 (en) * 2008-04-24 2014-11-25 Oblong Industries, Inc. Fast fingertip detection for initializing a vision-based hand tracker
US9952673B2 (en) 2009-04-02 2018-04-24 Oblong Industries, Inc. Operating environment comprising multiple client devices, multiple displays, multiple users, and gestural control
US9495013B2 (en) 2008-04-24 2016-11-15 Oblong Industries, Inc. Multi-modal gestural interface
US10642364B2 (en) 2009-04-02 2020-05-05 Oblong Industries, Inc. Processing tracking and recognition data in gestural recognition systems
US9684380B2 (en) 2009-04-02 2017-06-20 Oblong Industries, Inc. Operating environment with gestural control and multiple client devices, displays, and users
US8723795B2 (en) 2008-04-24 2014-05-13 Oblong Industries, Inc. Detecting, representing, and interpreting three-space input: gestural continuum subsuming freespace, proximal, and surface-contact modes
CN102224476B (zh) * 2008-10-14 2017-08-01 奥布隆工业有限公司 多进程交互系统和方法
US10824238B2 (en) 2009-04-02 2020-11-03 Oblong Industries, Inc. Operating environment with gestural control and multiple client devices, displays, and users
US9317128B2 (en) 2009-04-02 2016-04-19 Oblong Industries, Inc. Remote devices used in a markerless installation of a spatial operating environment incorporating gestural control
US9933852B2 (en) 2009-10-14 2018-04-03 Oblong Industries, Inc. Multi-process interactive systems and methods
US9971807B2 (en) 2009-10-14 2018-05-15 Oblong Industries, Inc. Multi-process interactive systems and methods
EP2612271A4 (en) 2010-08-31 2017-07-19 Annai Systems Inc. Method and systems for processing polymeric sequence data and related information
WO2012122546A2 (en) 2011-03-09 2012-09-13 Lawrence Ganeshalingam Biological data networks and methods therefor
DE102011017305A1 (de) * 2011-04-15 2012-10-18 Abb Technology Ag Bedien- und Beobachtungssystem für technische Anlagen
EP2864896A4 (en) 2012-06-22 2016-07-20 Dan Maltbie SYSTEM AND METHOD FOR THE SAFE HIGH-SPEED TRANSMISSION OF HUGE FILES
WO2014122357A1 (en) 2013-02-07 2014-08-14 Kone Corporation Personalization of an elevator service
US9990046B2 (en) 2014-03-17 2018-06-05 Oblong Industries, Inc. Visual collaboration interface
US8886622B1 (en) 2014-06-03 2014-11-11 Conduce Inc. Interactive visualization of multiple data sources across multiple computers
US10529302B2 (en) 2016-07-07 2020-01-07 Oblong Industries, Inc. Spatially mediated augmentations of and interactions among distinct devices and applications via extended pixel manifold
CN109254858B (zh) * 2018-08-31 2021-07-23 武汉斗鱼网络科技有限公司 活动窗口的数据共享方法、装置、设备及存储介质
CN111310658B (zh) * 2020-02-14 2023-06-27 京东科技信息技术有限公司 一种动作模式识别模型的更新方法和装置

Family Cites Families (137)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1843568A (en) * 1923-03-15 1932-02-02 James C Ledbetter Electric steam iron
US7164117B2 (en) 1992-05-05 2007-01-16 Automotive Technologies International, Inc. Vehicular restraint system control system and method using multiple optical imagers
US4843568A (en) 1986-04-11 1989-06-27 Krueger Myron W Real time perception of and response to the actions of an unencumbered participant/user
US5664177A (en) * 1988-04-13 1997-09-02 Digital Equipment Corporation Data processing system having a data structure with a single, simple primitive
JPH0816877B2 (ja) 1991-06-10 1996-02-21 インターナショナル・ビジネス・マシーンズ・コーポレイション データ処理システム用資源データの実時間捕獲及び減縮方法及びシステム
JP3244798B2 (ja) 1992-09-08 2002-01-07 株式会社東芝 動画像処理装置
US5982352A (en) 1992-09-18 1999-11-09 Pryor; Timothy R. Method for providing human input to a computer
DE69315969T2 (de) 1992-12-15 1998-07-30 Sun Microsystems Inc Darstellung von Informationen in einem Anzeigesystem mit transparenten Fenstern
US5454043A (en) 1993-07-30 1995-09-26 Mitsubishi Electric Research Laboratories, Inc. Dynamic and static hand gesture recognition through low-level image analysis
US7218448B1 (en) 1997-03-17 2007-05-15 The Regents Of The University Of Colorado Extended depth of field optical systems
US5594469A (en) 1995-02-21 1997-01-14 Mitsubishi Electric Information Technology Center America Inc. Hand gesture machine control system
DE69634913T2 (de) 1995-04-28 2006-01-05 Matsushita Electric Industrial Co., Ltd., Kadoma Schnittstellenvorrichtung
US6002808A (en) 1996-07-26 1999-12-14 Mitsubishi Electric Information Technology Center America, Inc. Hand gesture control system
JP3749369B2 (ja) 1997-03-21 2006-02-22 株式会社竹中工務店 ハンドポインティング装置
US6075895A (en) 1997-06-20 2000-06-13 Holoplex Methods and apparatus for gesture recognition based on templates
US6720949B1 (en) 1997-08-22 2004-04-13 Timothy R. Pryor Man machine interfaces and applications
US6340957B1 (en) 1997-08-29 2002-01-22 Xerox Corporation Dynamically relocatable tileable displays
US6807583B2 (en) 1997-09-24 2004-10-19 Carleton University Method of determining causal connections between events recorded during process execution
EP0905644A3 (en) 1997-09-26 2004-02-25 Matsushita Electric Industrial Co., Ltd. Hand gesture recognizing device
US6072494A (en) 1997-10-15 2000-06-06 Electric Planet, Inc. Method and apparatus for real-time gesture recognition
AU2211799A (en) 1998-01-06 1999-07-26 Video Mouse Group, The Human motion following computer mouse and game controller
US9292111B2 (en) * 1998-01-26 2016-03-22 Apple Inc. Gesturing with a multipoint sensing device
JP3660492B2 (ja) 1998-01-27 2005-06-15 株式会社東芝 物体検知装置
US6043805A (en) 1998-03-24 2000-03-28 Hsieh; Kuan-Hong Controlling method for inputting messages to a computer
JPH11316693A (ja) * 1998-05-01 1999-11-16 Nec Software Chugoku Ltd プログラム間データ連携システム及び方法
US6198485B1 (en) 1998-07-29 2001-03-06 Intel Corporation Method and apparatus for three-dimensional input entry
US6950534B2 (en) 1998-08-10 2005-09-27 Cybernet Systems Corporation Gesture-controlled interfaces for self-service machines and other applications
US6501515B1 (en) 1998-10-13 2002-12-31 Sony Corporation Remote control system
JP2000132305A (ja) 1998-10-23 2000-05-12 Olympus Optical Co Ltd 操作入力装置
US6222465B1 (en) 1998-12-09 2001-04-24 Lucent Technologies Inc. Gesture-based computer interface
US7145551B1 (en) 1999-02-17 2006-12-05 Microsoft Corporation Two-handed computer input device with orientation sensor
US6351744B1 (en) 1999-05-28 2002-02-26 Unisys Corporation Multi-processor system for database management
JP4332649B2 (ja) 1999-06-08 2009-09-16 独立行政法人情報通信研究機構 手の形状と姿勢の認識装置および手の形状と姿勢の認識方法並びに当該方法を実施するプログラムを記録した記録媒体
US7050606B2 (en) 1999-08-10 2006-05-23 Cybernet Systems Corporation Tracking and gesture recognition system particularly suited to vehicular control applications
US7229017B2 (en) 1999-11-23 2007-06-12 Xerox Corporation Laser locating and tracking system for externally activated tags
JP3762173B2 (ja) * 1999-11-26 2006-04-05 株式会社東芝 計算機システム及びネットワークシステム並びに記録媒体
DE10007891C2 (de) 2000-02-21 2002-11-21 Siemens Ag Verfahren und Anordnung zur Interaktion mit einer in einem Schaufenster sichtbaren Darstellung
SE0000850D0 (sv) 2000-03-13 2000-03-13 Pink Solution Ab Recognition arrangement
US7109970B1 (en) 2000-07-01 2006-09-19 Miller Stephen S Apparatus for remotely controlling computers and other electronic appliances/devices using a combination of voice commands and finger movements
US7227526B2 (en) 2000-07-24 2007-06-05 Gesturetek, Inc. Video-based image control system
US20020065950A1 (en) * 2000-09-26 2002-05-30 Katz James S. Device event handler
US7058204B2 (en) 2000-10-03 2006-06-06 Gesturetek, Inc. Multiple camera control system
WO2002046916A2 (en) * 2000-10-20 2002-06-13 Polexis, Inc. Extensible information system (xis)
US6703999B1 (en) 2000-11-13 2004-03-09 Toyota Jidosha Kabushiki Kaisha System for computer user interface
US20020085030A1 (en) 2000-12-29 2002-07-04 Jamal Ghani Graphical user interface for an interactive collaboration system
US8300042B2 (en) 2001-06-05 2012-10-30 Microsoft Corporation Interactive video display system using strobed light
US7259747B2 (en) 2001-06-05 2007-08-21 Reactrix Systems, Inc. Interactive video display system
US20040125076A1 (en) 2001-06-08 2004-07-01 David Green Method and apparatus for human interface with a computer
US20020186200A1 (en) 2001-06-08 2002-12-12 David Green Method and apparatus for human interface with a computer
US7151246B2 (en) 2001-07-06 2006-12-19 Palantyr Research, Llc Imaging system and methodology
US20030048280A1 (en) 2001-09-12 2003-03-13 Russell Ryan S. Interactive environment using computer vision and touchscreens
US7159194B2 (en) 2001-11-30 2007-01-02 Palm, Inc. Orientation dependent functionality of an electronic device
US7240330B2 (en) * 2002-02-01 2007-07-03 John Fairweather Use of ontologies for auto-generating and handling applications, their persistent storage, and user interfaces
WO2003071410A2 (en) 2002-02-15 2003-08-28 Canesta, Inc. Gesture recognition system using depth perceptive sensors
US7379613B2 (en) 2002-02-27 2008-05-27 Omnivision Cdm Optics, Inc. Optimized image processing for wavefront coded imaging systems
US7348963B2 (en) 2002-05-28 2008-03-25 Reactrix Systems, Inc. Interactive video display system
US7170492B2 (en) 2002-05-28 2007-01-30 Reactrix Systems, Inc. Interactive video display system
US7854655B2 (en) 2002-07-27 2010-12-21 Sony Computer Entertainment America Inc. Obtaining input for controlling execution of a game program
US7850526B2 (en) 2002-07-27 2010-12-14 Sony Computer Entertainment America Inc. System for tracking user manipulations within an environment
US7576727B2 (en) 2002-12-13 2009-08-18 Matthew Bell Interactive directed light/sound system
US7991920B2 (en) 2002-12-18 2011-08-02 Xerox Corporation System and method for controlling information output devices
US7665041B2 (en) 2003-03-25 2010-02-16 Microsoft Corporation Architecture for controlling a computer using hand gestures
US8745541B2 (en) 2003-03-25 2014-06-03 Microsoft Corporation Architecture for controlling a computer using hand gestures
GB0308943D0 (en) 2003-04-17 2003-05-28 Univ Dundee A system for determining the body pose of a person from images
US7372977B2 (en) 2003-05-29 2008-05-13 Honda Motor Co., Ltd. Visual tracking using depth data
US7694314B2 (en) 2003-08-28 2010-04-06 Siebel Systems, Inc. Universal application network architecture
US7280346B2 (en) 2003-09-29 2007-10-09 Danger, Inc. Adjustable display for a data processing apparatus
US7436535B2 (en) 2003-10-24 2008-10-14 Microsoft Corporation Real-time inking
US20050212753A1 (en) 2004-03-23 2005-09-29 Marvit David L Motion controlled remote controller
US7555613B2 (en) * 2004-05-11 2009-06-30 Broadcom Corporation Storage access prioritization using a data storage device
US7379563B2 (en) 2004-04-15 2008-05-27 Gesturetek, Inc. Tracking bimanual movements
US20050283752A1 (en) * 2004-05-17 2005-12-22 Renate Fruchter DiVAS-a cross-media system for ubiquitous gesture-discourse-sketch knowledge capture and reuse
WO2005116802A1 (ja) 2004-05-25 2005-12-08 Sony Computer Entertainment Inc. 入力装置及び方法、文字入力方法
US7366368B2 (en) 2004-06-15 2008-04-29 Intel Corporation Optical add/drop interconnect bus for multiprocessor architecture
US7519223B2 (en) 2004-06-28 2009-04-14 Microsoft Corporation Recognizing gestures and using gestures for interacting with software applications
US7466308B2 (en) 2004-06-28 2008-12-16 Microsoft Corporation Disposing identifying codes on a user's hand to provide input to an interactive display application
US7559053B2 (en) * 2004-08-24 2009-07-07 Microsoft Corporation Program and system performance data correlation
US7761814B2 (en) 2004-09-13 2010-07-20 Microsoft Corporation Flick gesture
US7613830B2 (en) * 2004-12-10 2009-11-03 Microsoft Corporation Reliably transferring queued application messages
BRPI0606477A2 (pt) 2005-01-07 2009-06-30 Gesturetek Inc sensor de inclinação baseado em fluxo ótico
WO2006074289A2 (en) 2005-01-07 2006-07-13 Gesturetek, Inc. Detecting and tracking objects in images
WO2006074310A2 (en) 2005-01-07 2006-07-13 Gesturetek, Inc. Creating 3d images of objects by illuminating with infrared patterns
US7966353B2 (en) * 2005-01-31 2011-06-21 Broadcom Corporation Method and system for flexibly providing shared access to non-data pool file systems
CN101536494B (zh) 2005-02-08 2017-04-26 奥布隆工业有限公司 用于基于姿势的控制系统的系统和方法
WO2006124935A2 (en) 2005-05-17 2006-11-23 Gesturetek, Inc. Orientation-sensitive signal output
US7428542B1 (en) 2005-05-31 2008-09-23 Reactrix Systems, Inc. Method and system for combining nodes into a mega-node
US20070078966A1 (en) * 2005-09-30 2007-04-05 Rockwell Automation Technologies, Inc. Presentation of automation data
US8537112B2 (en) 2006-02-08 2013-09-17 Oblong Industries, Inc. Control system for navigating a principal dimension of a data space
US9063801B2 (en) 2008-04-24 2015-06-23 Oblong Industries, Inc. Multi-process interactive systems and methods
US8669939B2 (en) 2006-02-08 2014-03-11 Oblong Industries, Inc. Spatial, multi-modal control device for use with spatial operating system
US8681098B2 (en) 2008-04-24 2014-03-25 Oblong Industries, Inc. Detecting, representing, and interpreting three-space input: gestural continuum subsuming freespace, proximal, and surface-contact modes
US8370383B2 (en) 2006-02-08 2013-02-05 Oblong Industries, Inc. Multi-process interactive systems and methods
US8531396B2 (en) 2006-02-08 2013-09-10 Oblong Industries, Inc. Control system for navigating a principal dimension of a data space
US8537111B2 (en) 2006-02-08 2013-09-17 Oblong Industries, Inc. Control system for navigating a principal dimension of a data space
US8769127B2 (en) 2006-02-10 2014-07-01 Northrop Grumman Systems Corporation Cross-domain solution (CDS) collaborate-access-browse (CAB) and assured file transfer (AFT)
JP4781897B2 (ja) * 2006-04-26 2011-09-28 富士通株式会社 センサイベント制御装置
US20070288467A1 (en) * 2006-06-07 2007-12-13 Motorola, Inc. Method and apparatus for harmonizing the gathering of data and issuing of commands in an autonomic computing system using model-based translation
JP4148281B2 (ja) 2006-06-19 2008-09-10 ソニー株式会社 モーションキャプチャ装置及びモーションキャプチャ方法、並びにモーションキャプチャプログラム
US20080040692A1 (en) * 2006-06-29 2008-02-14 Microsoft Corporation Gesture input
US8234578B2 (en) 2006-07-25 2012-07-31 Northrop Grumman Systems Corporatiom Networked gesture collaboration system
US7725547B2 (en) 2006-09-06 2010-05-25 International Business Machines Corporation Informing a user of gestures made by others out of the user's line of sight
US7979850B2 (en) * 2006-09-29 2011-07-12 Sap Ag Method and system for generating a common trace data format
US8356254B2 (en) * 2006-10-25 2013-01-15 International Business Machines Corporation System and method for interacting with a display
US7984452B2 (en) * 2006-11-10 2011-07-19 Cptn Holdings Llc Event source management using a metadata-driven framework
TWI330802B (en) 2006-12-13 2010-09-21 Ind Tech Res Inst Inertial sensing method and system
JP2010515170A (ja) 2006-12-29 2010-05-06 ジェスチャー テック,インコーポレイテッド 機能強化したインタラクティブシステムを用いた仮想オブジェクトの操作
US20090262074A1 (en) 2007-01-05 2009-10-22 Invensense Inc. Controlling and accessing content using motion processing on mobile devices
CN101617271B (zh) 2007-02-15 2015-07-15 高通股份有限公司 使用闪烁电磁辐射的增强输入
CN101632029A (zh) 2007-02-23 2010-01-20 格斯图尔泰克股份有限公司 增强的单一传感器位置检测
US20080222660A1 (en) * 2007-03-06 2008-09-11 Jari Tavi Processing of data of a plurality of applications with a single client application
EP2150893A4 (en) 2007-04-24 2012-08-22 Oblong Ind Inc PROTEINS, POOLS AND SLAWX IN PROCESSING ENVIRONMENTS
WO2008134745A1 (en) 2007-04-30 2008-11-06 Gesturetek, Inc. Mobile video-based therapy
EP2153377A4 (en) 2007-05-04 2017-05-31 Qualcomm Incorporated Camera-based user input for compact devices
US8726194B2 (en) 2007-07-27 2014-05-13 Qualcomm Incorporated Item selection using enhanced control
US7949157B2 (en) 2007-08-10 2011-05-24 Nitin Afzulpurkar Interpreting sign language gestures
US9261979B2 (en) 2007-08-20 2016-02-16 Qualcomm Incorporated Gesture-based mobile interaction
WO2009026337A1 (en) 2007-08-20 2009-02-26 Gesturetek, Inc. Enhanced rejection of out-of-vocabulary words
WO2009042579A1 (en) 2007-09-24 2009-04-02 Gesturetek, Inc. Enhanced interface for voice and video communications
US8341635B2 (en) 2008-02-01 2012-12-25 International Business Machines Corporation Hardware wake-and-go mechanism with look-ahead polling
US8280732B2 (en) 2008-03-27 2012-10-02 Wolfgang Richter System and method for multidimensional gesture analysis
US9740293B2 (en) 2009-04-02 2017-08-22 Oblong Industries, Inc. Operating environment with gestural control and multiple client devices, displays, and users
US9684380B2 (en) 2009-04-02 2017-06-20 Oblong Industries, Inc. Operating environment with gestural control and multiple client devices, displays, and users
US8723795B2 (en) 2008-04-24 2014-05-13 Oblong Industries, Inc. Detecting, representing, and interpreting three-space input: gestural continuum subsuming freespace, proximal, and surface-contact modes
US8269817B2 (en) 2008-07-16 2012-09-18 Cisco Technology, Inc. Floor control in multi-point conference systems
US20100060568A1 (en) 2008-09-05 2010-03-11 Apple Inc. Curved surface input device with normalized capacitive sensing
WO2010030822A1 (en) 2008-09-10 2010-03-18 Oblong Industries, Inc. Gestural control of autonomous and semi-autonomous systems
US8363098B2 (en) 2008-09-16 2013-01-29 Plantronics, Inc. Infrared derived user presence and associated remote control
US8788977B2 (en) 2008-11-20 2014-07-22 Amazon Technologies, Inc. Movement recognition as input mechanism
US8704767B2 (en) 2009-01-29 2014-04-22 Microsoft Corporation Environmental gesture recognition
JP5358834B2 (ja) 2009-02-17 2013-12-04 株式会社ワコム 位置指示器及び入力装置
US8856691B2 (en) 2009-05-29 2014-10-07 Microsoft Corporation Gesture tool
US20100315439A1 (en) 2009-06-15 2010-12-16 International Business Machines Corporation Using motion detection to process pan and zoom functions on mobile computing devices
GB2474536B (en) 2009-10-13 2011-11-02 Pointgrab Ltd Computer vision gesture based control of a device
EP2524279A1 (en) 2010-01-14 2012-11-21 BrainLAB AG Gesture support for controlling and/or operating a medical device
US9465457B2 (en) 2010-08-30 2016-10-11 Vmware, Inc. Multi-touch interface gestures for keyboard and/or mouse inputs
US9213890B2 (en) 2010-09-17 2015-12-15 Sony Corporation Gesture recognition system for TV control
US20120239396A1 (en) 2011-03-15 2012-09-20 At&T Intellectual Property I, L.P. Multimodal remote control

Also Published As

Publication number Publication date
WO2008134452A3 (en) 2009-12-30
CN101689152B (zh) 2016-10-05
JP2014222506A (ja) 2014-11-27
WO2008134452A2 (en) 2008-11-06
KR101545360B1 (ko) 2015-08-19
US20130347006A1 (en) 2013-12-26
EP2163987A2 (en) 2010-03-17
US9804902B2 (en) 2017-10-31
KR20100017321A (ko) 2010-02-16
EP2150893A4 (en) 2012-08-22
EP2163987A3 (en) 2013-01-23
US10664327B2 (en) 2020-05-26
JP2010525494A (ja) 2010-07-22
US8407725B2 (en) 2013-03-26
CN101689152A (zh) 2010-03-31
US20080271053A1 (en) 2008-10-30
US20200250018A1 (en) 2020-08-06
EP2150893A2 (en) 2010-02-10
US20180004583A1 (en) 2018-01-04
NO20093236L (no) 2010-01-15

Similar Documents

Publication Publication Date Title
JP5905662B2 (ja) プロテイン、プール、およびスロークス処理環境
US10565030B2 (en) Multi-process interactive systems and methods
JP5805537B2 (ja) マルチプロセス・インタラクティブ・システムおよび方法
US9063801B2 (en) Multi-process interactive systems and methods
Dinan et al. An implementation and evaluation of the MPI 3.0 one‐sided communication interface
US10990454B2 (en) Multi-process interactive systems and methods
US9933852B2 (en) Multi-process interactive systems and methods
US7243333B2 (en) Method and apparatus for creating and executing integrated executables in a heterogeneous architecture
JP2007509425A (ja) データベースストアにおけるオブジェクト維持のためのシステムおよび方法
US7809894B2 (en) Compare, swap and store facility with no external serialization
US9052970B2 (en) Multi-process interactive systems and methods
Alawneh et al. An exchange format for representing dynamic information generated from High Performance Computing applications
WO2023185401A1 (zh) 一种数据处理方法、编解码加速器和相关设备
Chung HSA Runtime
Osawa 2B: an operating system based on BTRON2 specification
Guan et al. Application of API Functions in the Visualization Platform

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110425

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121030

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130130

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130206

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130430

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130528

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130822

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130829

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131128

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140219

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150807

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151109

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160317

R150 Certificate of patent or registration of utility model

Ref document number: 5905662

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250