(57)【特許請求の範囲】
【請求項１】
仮想コードプロバイダ(VCP)においてカスタマイズされたソフトウェア開発キット(SDK)を生成するように動作する方法であって、
少なくとも1つの従来型のサービス構成要素(CSC)によって提示された複数の事前定義された機能に対応する複数のプロセスコードを分析するステップと、
前記複数の機能の各機能に対してネイティブのSDKを取得するステップと、
前記複数の事前定義された機能のうちの少なくとも2つの機能の選択を受信するステップと、
前記少なくとも2つの選択された機能に対して前記ネイティブのSDKからSDKコードを解析するステップと、
前記解析されたSDKコードをリンクするステップと、
前記リンクされた解析されたSDKコードをカスタムSDKとして格納するステップと
を含む方法。
【請求項２】
前記プロセスコードの他のパラメータおよび少なくとも1つの関連する機能との関係に基づいて前記複数のプロセスのパラメータを相関させるステップをさらに含む、請求項1に記載の方法。
【請求項３】
ユーザデバイスにダウンロードするために前記カスタムSDKを格納するステップをさらに含む、請求項1に記載の方法。
【請求項４】
前記解析されたSDKコードをリンクするステップは、前記ネイティブのSDKの解析された部分を、対応するCSCで前記選択された少なくとも2つの機能を実行するように前記部分が動作するように調整するステップさらに含む、請求項1に記載の方法。
【請求項５】
前記カスタムSDKに対するプログラミング言語の選択を受信するステップをさらに含む、請求項1に記載の方法。
【請求項６】
前記カスタムSDKがプログラミング言語の選択と互換性があるかどうかを決定し、前記カスタムSDKに互換性がないと決定された場合に、前記カスタムSDKを変換するステップをさらに含む、請求項5に記載の方法。
【請求項７】
前記VCPへ認証し、前記受信された選択をユーザによる以前の選択と比較するステップをさらに含む、請求項1に記載の方法。
【請求項８】
以前に生成されたカスタムSDKが、前記受信された選択に対して生成されたことを決定し、前記以前に生成されたカスタムSDKを送信するステップをさらに含む、請求項7に記載の方法。
【請求項９】
ユーザデバイスに表示するために前記VCPのすべての使用可能な機能のリストをポピュレートするステップをさらに含む、請求項1に記載の方法。
【請求項１０】
前記VCPで前記少なくとも2つの機能を実行し、前記CSCにおいて関連するプロセスを展開するために、前記カスタムSDKを利用するステップをさらに含む、請求項1に記載の方法。
【請求項１１】
仮想コードプロバイダ(VCP)においてカスタマイズされたソフトウェア開発キット(SDK)にアクセスするように動作する方法であって、
前記VCPからカスタムSDKを受信するステップと、
ローカル開発環境内でユーザデバイス上にVCPからの前記カスタムSDKをインストールするステップと、
前記VCPによって提示されるようなプロセスコールに対応する機能を実行する前記カスタムSDKへのプロセスコールを用いてプログラムを実行するステップと、
前記VCPからの機能を前記機能に関連する従来型のサービス構成要素(CSC)へと展開するステップと
を含む方法。
【請求項１２】
プロセスコールを用いて前記プログラムを実行するステップは、スニペットの機能に対するパラメータデータを前記VCPに送信するステップさらに含む、請求項11に記載の方法。
【請求項１３】
前記VCPにおいて格納された事前定義されたプロセスにスニペットを相関させるステップをさらに含む、請求項12に記載の方法。
【請求項１４】
機能を展開させるステップは、少なくとも1つのCSCに対して前記VCP上のネイティブのSDKコードを調整するステップをさらに含む、請求項11に記載の方法。
【請求項１５】
a)少なくとも1つのプロセッサと、
b)少なくとも1つのネットワークに結合された少なくとも1つの入力デバイスと、
c)前記少なくとも1つのプロセッサによって実行されたときに、請求項1から7のいずれか一項に記載の方法を実行する、プロセッサで実行可能な命令を格納する少なくとも1つのストレージデバイスと
を含む、リモートプロセスコール生成のためのシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般的に、カスタマイズされたSDKを用いるコード仮想化のための方法、装置、およびシステムに関する。
【背景技術】
【０００２】
コンピュータプログラミング言語の発達および統合により、既存の言語の多くの能力が拡張されてきた。各言語には、プラットフォームおよびデバイス内でそれぞれのサイズ、実行速度、および様々な機能に関して特定の長所および欠点がある。したがって、一部の特定の言語は、対応するデバイスのみで機能するように作られており、ユーザは、多くの場合、複数のプログラミング言語に慣れているか、またはさらには専門家である必要がある。さらに、最近のアプリケーションの構築の性質により、開発者は複数の言語を学習することを強いられてきた。そのようなことから、アプリケーションを記述するということは、もはや1つのプログラミング言語の使用に制限されるものではない。複数の言語を統合および学習することは困難な負担であり、プログラマ/開発者が十分なコーディング熟達度に到達するために、多くの場合、数か月または数年間のトレーニングを必要とする。
【０００３】
アプリケーションは様々な言語から構成され得、サーバ上で展開される場合、プログラマは、フロントエンド言語、サーバ言語、およびバックエンド言語を学習する必要がある。フロントエンド技術は、また、複数の異なる言語(HTML、Java(登録商標)scriptなど)から作られていて、プログラミングをさらに複雑にしている。
【０００４】
さらに、より多くの計算が、ネットワークおよび/またはインターネットを通じて発生し(すなわち「クラウドコンピューティング」)、様々なソフトウェア開発キット(SDK)およびアプリケーションプログラミングインターフェース(API)を用いたプログラミングが、開発者にとって厄介な必要事項となっている。ソーシャルメディア(ツイッター、フェイスブックなど)、データストレージ(ドロップボックス、クラウドドライブなど)、および金融取引(ペイパル、アマゾン、EBAYなど)などの新しいサービスも、プログラマへのプログラム負担を増やしている。その理由は、各サービスは、サービスによって提示されるプロセスを実装するために、それ自身のSDKまたはAPIを必要とする場合があるためである。たとえば、ツイッターでツイートするには、TUMBLRに写真を投稿するのとは異なるコードベースを必要とする。また、サービスにおいてアプリケーションが展開された後まで、これらのサービスの使用法が好都合に示されないこともあり、そのことも回復不能な結果につながる可能性がある。言い換えると、リモートサービスの付随するSDKおよびAPIを理解しながら、複数のプラットフォーム、言語、およびサービスを横断するプログラミングは、学習するのが非常に複雑な状態である。次に、複数のサービスを使用するプログラムは、大きなコードベースおよびそれに伴うSDKを必要とし、提示された機能のごく一部分だけが使用される場合でも大量のメモリを占める。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
したがって、当技術分野には、選択機能を含むカスタムSDKを生成する必要性がある。
【課題を解決するための手段】
【０００６】
本発明の実施形態は、一般的に、カスタマイズされたSDKを用いるコード仮想化のための方法、装置、およびシステムに関する。具体的には、リモートサーバに配置された、事前生成されたコードライブラリ、カスタマイズされたSDK、およびスニペットジェネレータを利用することによって、ユーザデバイスのプログラムは、最小限のメモリストレージスペースを用いて複数のプラットフォームおよびプログラミング言語を横断して複数のサービスを活用する。ユーザデバイスは、ユーザによって選択されたプロセスに必要なコードのみを含む、カスタマイズされたSDKを格納する。ユーザデバイスは、特許請求の範囲により完全に説明するように、図の少なくとも1つに関して図示および/または記述したように、リモートサーバ上で少なくとも1つのリモートプロセスコールを実行し、また次に、本質的に、ターゲットデバイス(たとえば、異なるリモートサーバ)のネイティブ言語でプロセスを展開するために、コードスニペットおよび/またはカスタマイズされたSDKを受信する。
【０００７】
本開示のこれらおよび他の特徴および利点は、全体を通じて同様の参照番号は同様の部分を示している添付の図とともに、本開示の以下の詳細な説明を検討することから理解され得る。
【０００８】
本発明の上に詳しく述べられた特徴が詳細に理解され得る方法、上に要約された、本発明のより特定の記述は、実施形態を参照することによって得られ、その一部は添付された図に示されている。しかし、添付された図は、本発明の典型的な実施形態を示しているにすぎず、したがって、その範囲を制限するものと考えるべきではなく、本発明は、他の同様に効果的な実施形態を認めるものであることに留意されたい。
【図面の簡単な説明】
【０００９】
【図１】本発明の1つまたは複数の例示的な実施形態によるコード仮想化システムを示す図である。
【図２】本発明の1つまたは複数の例示的な実施形態によるコード仮想コードプロバイダ(VCP)を使用する、クラウドクライアントとインターフェースがとられる従来型の(classical)サービス構成要素を実行するためのプラットフォームを示す図である。
【図３】本発明の1つまたは複数の例示的な実施形態による総合開発環境とインターフェースをとる、図2に開示されたカスタムSDKおよび仮想コードプロバイダを使用する全体的な方法を示す図である。
【図４】本発明の1つまたは複数の例示的な実施形態によるカスタムSDKを生成する方法を示す流れ図である。
【図５】本発明の1つまたは複数の例示的な実施形態による特定のプログラミング言語を用いてカスタムSDKを生成するための方法を示す流れ図である。
【図６】本発明の1つまたは複数の例示的な実施形態による、カスタムSDKを使用する様々なプログラミング言語のための仮想化されたプロセスコールコードジェネレータの方法を示す流れ図である。
【図７】本発明の1つまたは複数の例示的な実施形態による例示的なコンピューティングサーバ内のモジュールを示すブロック図である。
【発明を実施するための形態】
【００１０】
記述された以下の実施形態では、「プロセス」は、実行コンピュータ(たとえば、サーバ、パーソナルコンピュータ、モバイルデバイスなど)に格納されている機能のための、すぐに実行可能なコードベースまたは事前生成されたプロセスコードを表すものとする。各プロセスは、名前、プロセスID、アイコン、または総合開発環境(IDE)のユーザにプロセスの機能を示す他の識別子によって一意に識別される。「実行」は、コンピュータ(ローカルもしくはリモート、またはクラウドベース)上のプロセスの開始を表すものとする。「バンドル」は、共通する属性(API名、共通のパラメータ、SDK、パラメータ名など)によって整理されたプロセスの集合を表すものとする。「スニペット」は、リモートプロセスを呼び出すためにユーザによって選択された対応するプログラミング言語を用いてプログラムに挿入されるカスタマイズされたコードの生成されたブロックを表すものとする。多くの場合、選択された言語は、ユーザデバイスのアプリケーションおよび/またはIDEに実装されるためにユーザによって指定されたプログラミング言語のものである。
【００１１】
記述したように、以下の実施形態では、「カスタム」および「カスタマイズされた」SDKは、ユーザによって選択された機能を実装するための必要なSDKデータのみを含めるように調整されたSDKを表すものとする。機能(たとえばプロセス)は、プロセスコードの動作を記述した、ユーザに提示するための記述的な用語および/またはイメージである。一部の実施形態では、機能は、プロセスコードを含む。
【００１２】
本明細書に開示された実施形態は、リモートサーバ(たとえば「クラウド」)のコードライブラリに関し、ユーザは、機能をリモートから選択し、次いで、ローカルアプリケーションまたはソフトウェアプログラムからプロセスにアクセスするために、対応するスニペットおよび/またはカスタムSDKをダウンロードすることができる。スニペットは、リモートサーバ上のリモートプロセスコールが、サーバ上のプロセスを実行すること、または異なるリモートサーバまたはリモートでプロセスを展開することを可能にする。スニペットが実行コンピュータ上のリモートプラットフォームと通信できるように、ユーザデバイスは仮想化されたSDKを使用する。リモートプラットフォームは、追加的なサービスの仮想化された構成要素(たとえば、コンパイラ、電子メール、アマゾン、ツイッター、EBAY、ドロップボックスなど)とともに、サービスに対する対応するSDKおよびAPIを含む。以下にさらに記述するように、仮想化されたSDKは、ユーザによって選択された特定の機能を実行するのに必要なコードのみを含めるようにカスタマイズされる。カスタマイズされたSDKを用いる実施形態は、より少ないメモリを必要とし、一部の実施形態では、カスタマイズされていない場合より速く取得される。コンピューティングプラットフォームは、ハードウェアアーキテクチャおよびソフトウェアフレームワーク(アプリケーションフレームワークを含む)を含み、組合せによりソフトウェアの実行が可能になる。典型的なプラットフォームは、コンピュータアーキテクチャ、オペレーティングシステム、およびランタイムライブラリを含む。
【００１３】
典型的なSDKは、プログラマがソフトウェアパッケージ、ソフトウェアフレームワーク、ハードウェアプラットフォーム、コンピュータシステム、ビデオゲーム機、オペレーティングシステム、または同様の開発プラットフォームのためのアプリケーションを開発するのに役立つであろう多数のツール、ライブラリ、文書、およびサンプルコードを含む。APIは、相互に通信するためにプログラムが従うべきルールの組を規定している。ルールは、2つのアプリケーションが相互に通信するために、ルーチン、データ構造などがどのように規定されるべきかを指定している。APIは、ソフトウェアプログラムが相互に対話することを可能にするインターフェースである一方、SDKは、特定のプラットフォームを対象とするソフトウェアアプリケーションを開発するために使用され得るツールの組である。一部の例では、SDKはAPIを含む場合がある。
【００１４】
図1は、本発明の1つまたは複数の実施形態によるコード仮想化システム100を示す図である。システム100は、少なくとも1つのユーザデバイス(102a…102n)、ネットワーク110、および少なくとも1つのリモートサーバ(104a…104n)を含む。少なくとも1つのユーザデバイス(102a…102n)は、パーソナルコンピュータ、サーバ、仮想サーバ、マイクロコントローラ(MCU)およびコントローラ、センサ、アクチュエータ、ゲートウェイに接続されたエッジデバイス、特定用途向け集積回路(ASIC)、マイクロプロセッサおよびプロセッサ、セル式電話、スマートフォン、タブレット、ラップトップなどプログラムを格納および実行できる電子デバイスを含む。
【００１５】
各ユーザデバイス(102a…102n)は、少なくとも1つのリモートサーバ(104a…104n)に接続するために、ネットワーク110に接続および認証するのに必要なコードを格納する対応するメモリ(112a…112n)を含む。一部の実施形態では、メモリ(112a…112n)は、少なくとも1つのリモートサーバ(104a…104n)からスニペットを受信および展開するためのIDEを格納する。
【００１６】
ネットワーク110は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、ワイヤレスローカルエリアネットワークWLAN、セルラーネットワーク、Wi-Fi、インターネット、またはイントラネットネットワークなど、有線および/または無線のネットワークの少なくとも1つまたは組合せを含むことができる。少なくとも1つのリモートサーバ(104a…104n)は、リモートアプリケーションサーバ、ウェブサーバ、メールサーバ、ホストサーバ、データベースサーバ、ストレージサーバなどを含むことができる。少なくとも1つのリモートサーバ(104a…104n)は、リモートプラットフォーム120を格納し、カスタムSDKジェネレータ1251…125N、スニペット相関モジュール124、および実行エンジン126を通じてなど特定のプロセスコールを実行するために、メモリ(114a…114n)を含む。一部の実施形態では、スニペットジェネレータは、カスタムSDKを使用してリモートプロセスを呼び出すスニペットを生成するために、ユーザデバイス(102a...102n)に格納される。メモリ(114a…114n)は、また、ネットワーク110上で他のサーバ104n(たとえばフェイスブック、ツイッター、電子メール、SMS、MMS、FTPなど)を横断してプロセスをリンクおよび実行するために、ユーザインターフェースモジュール、ユーザプロフィール/アカウントのデータベース、プロセスの集合、SDK、および関連するパラメータを格納することができる。
【００１７】
実行エンジン126は、呼び出された、識別されたルーチンを相関させ、カスタムSDKによって識別されたスニペットでコールパラメータを使用するプロセスを実行する(running/executing)ことによって、ライブラリのルーチンへのコールを処理する。一部の実施形態では、実行エンジン126は、別のプロセスコールまたはオリジナルのプロセスコールにプロセスコールの出力を送ることができる。
【００１８】
一部の実施形態では、プロセスコールパラメータは、ユーザデバイス102aまたはリモートサーバ104aのいずれかに格納される。他の実施形態では、プロセスコールのパラメータは、グラフィカルユーザインターフェースで指定されたユーザに提示される事前生成され事前定義されたフィールドを介してユーザによって直接的に指定される。一部の実施形態では、グラフィカルユーザインターフェースは、IDEの一部である。IDEは、ユーザデバイス102aでユーザに選択されたプログラミング言語のプログラムへの統合のためにリモートサーバ104aによって生成されたスニペットを利用する。
【００１９】
一部の実施形態では、IDEは、また、追加的なプロセスを展開し、他のサーバ104n上で提示されたサービスにアクセスするために、サーバ104a上でスニペットを使用して、リモートプロセスコールを実行する。実行は、リモートプロセスコールを以下に図2でさらに記述する対応する仮想コードプロバイダ(VCP)にリンクする、カスタムSDKおよび仮想化されたプラットフォームによって促進される。
【００２０】
図2は、本発明の1つまたは複数の実施形態により、コード仮想コードプロバイダ(VCP)2451…245Nを使用して、クラウドクライアント205とインターフェースがとられる従来型のサービス構成要素(CSC)2101…210Nを実行するためのプラットフォーム200を示している。プラットフォーム200は、リモートサーバ104a上に格納され得るプラットフォーム120に対応する。以下に、従来型のサービス構成要素2101…210Nは、CSC210としてまとめて表され、同様に仮想コードプロバイダ2451…245Nは、VCP245としてまとめて表される。プラットフォーム200は、クラウドクライアント205およびVCP245を介してリモートプロセスコールをユーザデバイス102からCSC2101…210Nにリンクする、カスタムSDKを効果的に使用する。
【００２１】
CSC2101は、リモートインターフェース2061、アプリケーションレイヤ2081、仮想化レイヤ2121、および物理装置2151を含む。各CSC210は、プラットフォーム200によって提示される特定のサービスを表している。たとえば、CSC2101は、インターネットサービスおよび対応するサーバの場合があり(たとえば、フェイスブック、EBAY、POP3電子メール、ツイッター、アマゾン、SMS、FTP、HTTPなど)、CSC2102は、従来のローカルデータ情報処理を提供するコンピュータの場合がある(たとえば、画像レンダリング、コードのコンパイル、データ分析、データ記憶など)。
【００２２】
物理装置2151またはマシン(CPU、メモリ、ネットワークルータなど)は、処理およびストレージのリソースをアプリケーションレイヤ2081で利用可能にするために、仮想化レイヤ2121において仮想化される。仮想化により、単一のコンピュータにおいて、およびさらに複数のマシンが仮想化されている実施形態において、冗長性および動作帯域幅の増加が生じる。そのような実施形態では、処理の作業負荷は、また、優先度に基づいて、および物理的位置と無関係に、様々な装置に割り当てられ得る。
【００２３】
アプリケーションレイヤ2081は、仮想化されたマシンでのデータベース動作(たとえば、アカウントプロフィールの格納、データの保管など)など、プログラムおよび機能の実行ランタイムを可能にする。リモートインターフェースレイヤ2061は、ウェブサーバにアクセスし、APIを利用するためのコードを含む。リモートインターフェース2061は、クラウドクライアント205と通信する(たとえば、シンクライアント、ウェブブラウザ、モバイルアプリケーション、ターミナルエミュレータプログラムなど)。
【００２４】
クラウドクライアント205は、アプリケーションレイヤ2081を用いてVCP245との間のデータの通信を促進する。クラウドクライアント205は、ウェブブラウザ、ターミナルエミュレータ、または他のクライアントのインターフェースを提示することによって、レイヤインターフェース2061、2081、2121、および2151を簡素化する。本発明の前述の実施形態は、仮想化されたSDKを使用して、プラットフォーム200でのスニペットのリモートプロセスコールコード生成を促進するために、クラウドクライアント205を利用することができる。仮想化されたSDKは、アプリケーションレイヤ2081に、VCP245によって生成および提示されたプロセスコールをリンクする。
【００２５】
VCP245は、カスタムSDKを生成し、カスタムSDKが、ユーザデバイス102Nへのダウンロードおよびインストールに利用できるようにする。VCP245はまた、仮想サンドボックス、正規化、汎用言語、結果解析、自動的な資格情報検証、簡素化された宣言プロセス、プラットフォームの維持、および監視を可能にする、拡張されたホストされたコードライブラリである。リモートサーバにプロセスおよびアプリケーション/プログラムを完全に展開する前に、プログラムをテストまたは「サンドボックス」することは、プログラム内に含まれる複数のリモートプロセスおよびサービスの追加に伴い、ますます重要になってきた。VCP245は、ユーザデバイス102aにダウンロードされるカスタムSDKを使用して、スニペットプロセスコールを調整する。
【００２６】
ユーザデバイス102aの観点から、VCP245は、言語をテンプレート化(templating)することによって、カスタムSDKを通じて提示された汎用プログラミング言語を可能にするため、構成要素のパラメータだけが必要であり、事前生成されたコードに挿入される。したがって、処理結果も迅速に解析され得る。アクセスは、また、リモートサービスにアクセスするために鍵の事前認証および格納された集中化された管理を使用して、プラットフォーム200によって円滑化される。事前認証は、また、機密にまつわる情報を露出する可能性がある、ユーザデバイス102aとプラットフォーム200との間で通信されるコードのリバースエンジニアを防ぐことによって、より安全なコードを生成する。VCP245は、また、スニペット形式へとプロセスを減らすことによってプログラミングを正規化する。したがって、スニペットは、コードを記述する標準化された方法を表している。
【００２７】
たとえば、クラウドで任意のプロセスを呼び出すための5行のコードは、コードの正規化と考えられる。VCP245は、プラットフォーム200が、作成されたアプリケーションがどのように実行されているかのリアルタイムの監視およびログ記録を表示することを可能にする(たとえば、使用統計、エラー処理など)。プラットフォーム200は、また、それぞれのVCPのSDKを維持するために監視を使用するため、プロセスプール230のAPIは、新しい方法、バージョン、およびパラメータを含めるために継続的に改善されている。
【００２８】
VCP2451は、プロセスプール2301、プロセスコードパーサモジュール2281、カスタムSDKジェネレータ1251、スニペット相関モジュール1241、ユーザデータベース2321、および実行エンジン1261を含む。一部の実施形態では、単一の実行エンジン126は、すべてのプロセスを展開することができる。他の実施形態では、VCP2451は、スニペットを生成するためのスニペットジェネレータだけでなく、CSC210NおよびVCP245Nにアクセスするためにユーザ識別情報を検証するための認証モジュールを含む。
【００２９】
説明を簡単にするために、VCP245の各々は、1対1の対応でCSC210に対応している。しかしながら、代替実施形態は、異なる比率またはすべてのCSC210によって提示されたすべてのプロセスを表す単一のVCP245を含むことができる。VCP245は、本発明の1つまたは複数の実施形態によりリモートサーバ104aに格納される。VCP245は、CSC210のプラットフォーム200で提示されるリモートサービスをプロセスプール230に格納された、限られた数の実行可能な事前に決定されたリモートプロセスへと減らす。
【００３０】
リモートプロセスは、所与のCSC210Nで実行され得る望まれる動作に対応する。たとえば、フェイスブックのCSC2101に対するプロセスは、コメントの投稿、写真の投稿、コメントまたは写真へのいいね(liking)、友達要求の拒否、友達要求の開始、投稿の削除、およびユーザによって望まれる他の動作の制限されたプロセスプール2301を持つであろう。所与のプロセスプール230のプロセスの数は、したがって、CSC2101に関連するサービスによって使用可能な動作に制限される。例について続けると、プラットフォーム200には、フェイスブックに製品のレビューを配置するプロセスはないであろう。しかしながら、そのようなプロセスは、アマゾンで使用可能なようにプラットフォーム200によって処理されるであろう。
【００３１】
プロセスコードパーサ2281は、CSC210Nでコードを展開するために、プロセスのネイティブコードだけでなく、必要なネイティブSDKおよびAPIも分析する。プロセスコードパーサ2281は、プロセスの機能の他のパラメータおよび役割との相対的な関連に基づいて、プロセスのパラメータを定義することによってプロセスを分離および整理する。プロセスコードパーサ2281は、CSC210でプロセスコードとインターフェースをとり実行するために必要なSDKまたはAPIを検査する。プロセスコードパーサ2281は、関係のある情報およびプロセスコードをプロセスプール2301に格納する。
【００３２】
カスタムSDKジェネレータ1251は、ユーザデバイス1021で実行するためにユーザによって選択されるVCP2451によって提示されるプロセス/機能を示す、選択データを受信する。カスタムSDKジェネレータ1251は、選択されたプロセスを展開するのに必要なネイティブのSDKを取得する。ネイティブのSDKは、VCP245またはCSC210上に格納され得る。一部の実施形態では、ネイティブのSDKは、カスタムSDKジェネレータ1251によって必要とされるように、CSC210からオンデマンドで取得される。
【００３３】
カスタムSDKジェネレータ1251は、選択されたプロセスにのみ対応するSDKコードを抽出する。次に、抽出されたSDKコードは、複数のネイティブのSDKを横断して複数のプロセスが、選択されたプロセスの実行/展開のためにのみコードを用いてカスタマイズされた単一のSDKを利用することができるように統合される。カスタムSDKジェネレータ1251は、ユーザデバイス102NにダウンロードおよびインストールするためにカスタムSDKを生成する。
【００３４】
プロセスプール2301、これはリモートプラットフォーム200および対応するCSC210によって提示される各プロセスまたは機能に関連するすべての事前生成されたコードを格納する。一部の実施形態では、事前生成されたコードは、事前生成されたコードプロセスを認識するために、リモートアプリケーションレイヤ2081に必要なネイティブ言語である。他の実施形態では、プログラミング言語は、IDEについてユーザデバイス102aにネイティブな場合がある。
【００３５】
スニペット相関モジュール1241は、ユーザデバイス102NにインストールされたカスタムSDKを介してユーザデバイス102Nからプロセスへのコールを受信する。スニペット相関モジュール1241は、また、CSC210Nのクロスプラットフォームおよびクロスサービスの対話のために複数のVCP245を横断して複数のネイティブのSDKおよびAPIとの通信を調整する。たとえば、スニペット相関モジュール1241は、カスタムSDKの組み合わせられた単一のプロセスコールを形成するために、プロセスプール230および対応するネイティブのSDK(たとえば、EBAY SDK、ツイッターSDK、SMS SDKなど)を調整する。例について続けると、それぞれのプロセスプールからプロセスをリンクすることによって、ユーザデバイス1021のカスタムSDKを使用する単一のプロセスコールは、アマゾンで売られている製品に一致するEBAY価格での落札されたオークションを本質的に同時にツイートおよびSMSテキスト送信することができる。
【００３６】
一部の実施形態では、スニペット相関モジュール1241は、また、スニペットがプロセスプール2301から関連するプロセスを呼び出すことができるように、対応するカスタムSDKを使用してスニペットを作成するために、ユーザによって入力されたパラメータだけでなくプロセス名を挿入することによって、スニペットを生成する。スニペットパラメータは、選択されたリモートプロセスに関連する事前に定めたフィールドを含むGUIを使用して入力され得る。スニペットパラメータは、また、以前にユーザデータベース2321に格納されたように取得され得る。ユーザデータベース2321は、様々なサービスバンドルに対するユーザプロフィール、履歴、および格納された資格情報を含む。他の実施形態では、スニペットは、ユーザデバイス102aでローカルに生成され得る。代替的実施形態では、スニペット相関モジュール1241は、簡易オブジェクトアクセスプロトコル(SOAP)、表現的状態転送(REST:representational state transfer)モデル、またはcURLを通じてなど、API呼び出しを使用して呼び出されたときにスニペットを生成する。生成されたスニペットは、ユーザによって指定されたか、またはプラットフォーム200によって必要とされるプログラミング言語である。たとえば、ユーザは、JAVA(登録商標)で記述された、ユーザデバイス102aに前から存在するプログラムを持つことができる。関連するスニペットは、前から存在するプログラムにスニペットを直接的に挿入するために、ユーザデバイス102aに、JAVA(登録商標)構文のカスタムSDKおよびプラットフォーム200、ならびに対応するライブラリへのプロセスコールを持つ必要があるであろう。
【００３７】
実施形態では、認証モジュールの場合、モジュールは、ユーザから資格情報を受信するか、またはVCP2451に関連するCSC2101にアクセスするために、ユーザから以前に入力および格納された資格情報を使用する。認証モジュールは、また、プラットフォーム200へと認証することができる。ユーザデータベース2321は、CSC2101の所与のサービスに対するアカウントデータベースである。他の実施形態では、ユーザデータベース2321は、プラットフォーム200への認証のためのユーザアカウントの集合である。次に、プラットフォーム200は、複数のVCP245および関連するCSC210を横断して認証を調整する。たとえば、リモートサーバ(たとえばTEMBOOサーバ)のプラットフォーム200に同様にログインするユーザは、以前にユーザによって提出されたリモートサーバ104aに格納された事前定義された資格情報を使用して、電子メールサーバおよびEBAYアカウントへと認証する。
【００３８】
最後に、実行エンジン1261は、プロセスプール2301から選択されたプロセスを実行し、リモートプロセスを実行するために、別のリモートサーバ104nまたは対応するCSC2101にプロセスを展開する。一部の実施形態では、実行エンジン1261は、また、ユーザデータベースまたはユーザデバイス102aに結果を返すことができる。他の実施形態では、実行エンジン1261は、また、ユーザデバイス102a上のカスタムSDKを用いてローカルコードベースまたは前から存在するプログラムに埋め込まれた場合、スニペットがプロセスを呼び出すために使用されたときに、プロセスプール2301からリモートプロセスを実行する。
【００３９】
図3は、本発明の1つまたは複数の実施形態により、総合開発環境(IDE)305とインターフェースをとる図2に開示されたカスタムSDKおよび仮想コードプロバイダ245を使用する全体的な方法300を示す図である。方法300は、ユーザデバイス102nでIDE305、およびリモートサーバ104n格納されたVCP245を利用する。方法300は、リモートプロセスを実行するのに必要な対応するCSC210の様々なプログラミング言語およびプラットフォームでリモートプロセスを呼び出すために、IDE305にカスタムSDKをダウンロードする。オプションの実施形態は、また、スニペットをダウンロードするステップを含む。
【００４０】
IDE305は、リモートコードベースを用いてローカルコードベースを調整し、プログラムまたはアプリケーションがローカルで記述されながら、カスタムSDKを使用して、リモートプロセスコールを含めることを可能にする。動作において、ユーザデバイス102aは、VCP245で提示されたプロセス、およびユーザによる選択のためのリモートプロセスの使用可能なバンドルをすべて表示する。選択に基づいて、カスタムSDKは、ユーザデバイス102Nでのインストールのために返される。
【００４１】
スニペットは、ユーザデバイス102Nで生成されるか、またはIDE305にダウンロードされる。スニペットは、リモートサーバ104Nでリモートプロセスのコールを実行するために、プロセスのパラメータデータおよび順序データを含む。
【００４２】
次に、IDE305は、SDKリンクモジュール225Nにスニペットを展開する。スニペットは、対応するVCP245にスニペットのリモートプロセスコールを関連させるために、カスタムSDKを使用して展開される。スニペット相関モジュール124Nは、CSC210Nのための選択されたプロセスおよび関連するネイティブSDKコードに関連する事前生成されたコードを取得する。たとえば、アマゾンサーバに対応するCSC210Nについて、プロセスはアイテムを購入する予定であり、SDKリンクモジュール225Nは、スニペットから解析されたユーザから提出されたパラメータを使用して、アマゾンサーバの購入にアクセスおよび実行するために使用されたネイティブ言語でプロセスプール230Nから事前生成されたコードを取得する。例について続けると、アマゾン購入の解析されたパラメータは、製品名およびシリアル番号、ユーザの名前、送付先、ならびにクレジットカード情報を含むであろう。パラメータが挿入された事前生成されたコードは、対応するCSC2101でリモートプロセスを次に展開する実行エンジン126Nに送られる。
【００４３】
図4は、本発明の1つまたは複数の実施形態によるカスタムSDKを生成する方法を示す流れ図である。方法は、図1のシステム100および上記の図2で記述したプラットフォーム200によって実装され得る。方法400は、選択されたリモートプロセスコールにアクセスするために、リモートプロセスコールおよびカスタムSDKを生成する。
【００４４】
方法400は、ステップ405で始まり、ステップ410へと継続し、CSC210によって提示されたサービスに関連するプロセスコードは、メモリ(たとえば、プロセスプール230)に格納される。プロセスコードは、CSCNに特有のネイティブ言語の場合がある。一部の実施形態では、VCP245は、プロセスコードを生成するか、あるいはプロセスコードは事前生成され、パラメータデータの挿入のために準備され得る。
【００４５】
次に、ステップ415で、プロセスコードは、属性が分析される。属性は、パラメータ(たとえば変数)、プログラミング言語のタイプだけでなく、CSC210でプロセスコードとインターフェースをとり実行するために必要なSDKまたはAPIを含む。属性は、また、パラメータと所与のプロセスに対するパラメータの機能とのそれぞれの関係に基づいて区別するパラメータを含む。たとえば、電子メール送信(send e-mail)プロセスは、発信元の電子メールアドレス、宛先の電子メールアドレス、件名、現在の時刻、送るべき時間、およびメッセージ本文などのパラメータを必要とする。
【００４６】
次に、ステップ420で、パラメータは、CSC210でプロセスを実行する際に、提示されたプロセスおよび役割への相対的関係に基づいて相関される。例では、パラメータの各々は、プロセスにおいて特定のそれぞれの機能および他のパラメータとの関係を持っている。宛先の電子メールアドレスは、電子メールの著者として発信元の電子メールアドレスを用いる、対応するメッセージの件名および本文に関係する宛先の電子メールを必要とするプロセスコードの一部に割り当てられる。送るべき時間(time to send)パラメータは、電子メールがいつ送られるべきかに関する値を含み、それに応じて、電子メール送信プロセス内で実行の時間の機能に相関される。代替的実施形態では、分析されたプロセスコードは、それぞれのCSC210のSDKおよびAPIにネイティブである(たとえば、アマゾン、ツイッターなど)。一部の実施形態では、関係情報は、また、生のパラメータ構成要素のソースを含む。パラメータデータは、ユーザによって手作業で入力する、自動的に入力する(たとえば、格納された認証鍵)、別のプロセスの結果に条件付きに基づく、または別のプロセスのパラメータに関係することができる。
【００４７】
ステップ425で、パラメータはプロセスプール230の少なくとも1つのプロセスに割り当てられる。以前の例について続けると、発信元の電子メールアドレスは、電子メールを送るためのプロセスだけでなく、別のプロセスが電子メールサーバへと認証するために必要なPOP3サーバへのログイン資格情報に割り当てられ得る。
【００４８】
ステップ430で、CSC210のネイティブのSDKは、プロセスプール230のすべてのプロセスに対して取得される。ネイティブのSDKは、CSC2101で特定のプロセスを展開するために、プラットフォーム200によって利用される。ステップ435で、ユーザデバイス102Nから実装される望まれるプロセスの選択は、リモートサーバ104によって受信される。
【００４９】
次にステップ440で、SDKコードは、選択されたプロセスの各々に対してネイティブのSDKSから解析される。ステップ445で、解析されたSDKコードは、CSC210でプロセスを展開するために、プロセスプールならびに他のSDKおよびAPIのプロセスに統合およびリンクされる。
【００５０】
ステップ450で、カスタムSDKは、ユーザデバイス102にダウンロードが可能なように生成および格納される。次に、方法400は、ステップ455で終了する。
【００５１】
図5は、本発明の1つまたは複数の実施形態により特定のプログラミング言語を用いてカスタムSDKを生成するための方法500の流れ図である。カスタムSDKを通じて、方法500は、ユーザデバイス102aのコードベースが小さく、ユーザによって実装されるプロセスに対するSDKデータのみを含むことを可能にする。オプションの実施形態の方法500は、カスタムSDKのリモートプロセスコールを処理するリモートプログラミングプラットフォーム200に認証するステップを含む。方法500は、ユーザデバイス102Nまたは他のユーザデバイス102N-1によって以前に生成および格納されたカスタムSDK要求をユーザデバイス102Nに提示するために認証を使用する。
【００５２】
方法500は、ステップ505で始まり、ステップ510へと進み、リモートプラットフォーム200は、リモートプロセスおよびプログラミング言語選択を受信する。一部の実施形態では、選択された言語は、IDE305のプログラミング言語のものに対応する。一部の実施形態では、ユーザのアカウントは認証され、CSC210の様々なリモートサービスに対する以前に格納された鍵および資格情報に関連される(たとえば、データストレージ、電子メール、ウェブサイト、ソーシャルメディア、仲介(brokerage)、バンキングなど)。一部の実施形態では、プラットフォーム200は、一般的に使用されるルーチン、プロセス、SDK、およびAPIのプロフィール履歴を用いる集中化されたユーザアカウントを含む。プロフィール履歴は、プラットフォーム200ならびに関連するVCP245およびCSC210に対応するユーザデータベース232の両方に対して記録および更新される。
【００５３】
方法500は、ステップ515に進み、リモートプロセスの選択は、カスタムSDKを生成するために以前に使用された選択のリストと比較される。ステップ520で、プロセスの組合せが以前に選択されていた場合、方法500は、以前に生成された習慣SDKを取得するためにステップ525に進む。以前に生成されたカスタムSDKを取得することによって、同じカスタムSDKが繰り返し生成されず、計算のリソースがVCP245に保存される。しかしながら、ステップ520で、方法500が、選択されたプロセスの組合せは、カスタムSDKを生成するために以前に使用されていないと決定した場合、方法500は、ステップ530へと進む。
【００５４】
ステップ545で、カスタムSDKは、上に記述した方法400に基づいて生成される。次に、ステップ550で、生成されたカスタムSDK(またはあるいは、取得されたカスタムSDK)は、ステップ510で受信されたプログラミング言語の選択と互換性があるかどうかが決定される。ステップ550で、カスタムSDKに互換性がないと決定されると、方法500は、ステップ555に進む。しかしながら、方法500が、カスタムSDKに互換性があると決定した場合、方法500は、ステップ560に進む。
【００５５】
ステップ555で、カスタムSDKは、プログラミング言語の選択と互換性があるように変換される。変換は、ユーザデバイス102からカスタマイズされたSDKを使用して、選択された言語が選択されたリモートプロセスを呼び出すように動作可能なように、カスタムSDKをVCP245に格納されたか、代わりにユーザデバイス102上のローカルコードベースに格納された追加的なサポートライブラリにリンクすることができる。
【００５６】
たとえば、サポートライブラリは、JAVA(登録商標)でのプロセスのためにコードにタグを付けるためにメタデータ(たとえばXML)を使用してプログラミング言語間で変換するために、ローカルコードベースにインストールされている。メタデータは、任意のプログラミング言語で対応するメタデータを使用して、コードスニペットとして次に直接的に生成されるプロセスを記述する。一部の実施形態では、サポートライブラリは、カスタムSDKにある。
【００５７】
ステップ560で、カスタムSDKは、ローカルコードベースにダウンロードおよびインストールするために、ユーザデバイス102に格納および提示される。方法500は、ステップ565で終了する。
【００５８】
図6は、本発明の1つまたは複数の実施形態による、カスタムSDKを使用する様々なプログラミング言語に対する仮想化されたプロセスコールコードジェネレータの方法600を示す流れ図である。方法600は、カスタムSDKを適用し、CSC210でリモートプロセスを呼び出すために、ユーザデバイス102aおよび/またはIDE305に対して調整されたスニペットを利用することによって、様々なプログラミング言語間の変換を可能にする。スニペットおよびカスタムSDKの両方は、ユーザによって選択されたプロセスに特有の低減されたコードセットを使用することによって、ユーザデバイス上で最小限のメモリ容量を占める。
【００５９】
方法600はステップ605で始まり、ステップ610に継続し、リモートプロセスの集合がポピュレートされ、ユーザデバイス102aに対して表示される。一部の実施形態では、ユーザデバイス102aは、ユーザアカウントがリモートプロセスにアクセスするために、リモートプラットフォーム200および認証モジュールにログインする必要がある。
【００６０】
次に、ステップ615で、少なくとも1つのリモートプロセスが選択される。一部の実施形態では、リモートプロセスは、ユーザデバイス102aのグラフィカルユーザインターフェース(GUI)を通じて選択される。他の実施形態では、リモートプロセスは、ユーザデバイス102aにダウンロードされたカスタムSDKの機能を通じてリモートプロセスを呼び出すことによって指定される。
【００６１】
ステップ635で、カスタムSDKは、上に記述された方法400に詳述されたリモートサーバ104Nで生成される。カスタムSDKは、ユーザによって選択されたプロセスのみのSDKデータを含む。一部の実施形態では、選択されたプロセスは、ユーザデバイスで呼び出されることを意図したものである。他の実施形態では、選択されたプロセスは、呼び出されることを意図したものより多いが、VCP245による、提示されたプロセス/機能およびプロセスバンドルの総数より少ない。
【００６２】
ステップ640で、カスタムSDKは、ユーザデバイス102Nにダウンロードされる。ステップ645で、カスタムSDKは、IDE305またはユーザデバイス102Nのローカル開発環境にインストールされる。
【００６３】
ステップ650で、ユーザデバイス102aのプログラム(たとえばIDE305)は、関連するプロセスパラメータを用いる選択されたリモートプロセスのリモートプラットフォーム200への展開をローカルにトリガーする。展開は、リモートプラットフォーム200で適切なVCP245およびプロセスプール230を呼び出すために、スニペットおよびカスタムSDKを利用する。
【００６４】
ステップ655で、プロセスは、対応するCSC210上のリモートサーバ104によって展開される。展開するために、パラメータは、スニペットから解析される。解析は、カスタムSDKおよびスニペット相関モジュール124を通じてリンクされるように、プロセスプール230からの選択されたプロセスに対してVCPにパラメータを向けるステップを含む。解析されたパラメータは、事前生成されたコードに挿入される。一部の実施形態では、CSC210のネイティブ言語、およびプロセスプール230において事前生成されたコード。方法600は、ステップ660で終了する。
【００６５】
図7は、本発明の1つまたは複数の実施形態による例示的なコンピューティングサーバ内のモジュールを示す簡略化されたブロック図である。コンピュータシステム700は、前述の実施形態のサーバまたは電子デバイスを含む本質的に同様の構造を含む。
【００６６】
本明細書に記述した、リモートプロセスコールのためのカスタムSDKを生成するための方法およびシステムの様々な実施形態は、様々な他のデバイスと対話することができる、1つまたは複数のコンピュータシステムで実行され得る。そのようなコンピュータシステムの1つは、図7に示されているコンピュータシステム700であり、これは様々な実施形態において、図1〜図6に示された要素または機能のいずれかを実装することができる。様々な実施形態において、コンピュータシステム700は、上に記述した方法を実装するように構成され得る。コンピュータシステム700は、上記の実施形態の他のシステム、デバイス、要素、機能、または方法を実装するために使用され得る。図示した実施形態では、コンピュータシステム700は、様々な実施形態において、プロセッサで実行可能な実行可能プログラム命令722として(たとえば、プロセッサ710によって実行可能なプログラム命令)、方法400、500、および600を実装するように構成され得る。
【００６７】
図示する実施形態では、コンピュータシステム700は、入力/出力(I/O)インターフェース730を介してシステムメモリ720に結合された1つまたは複数のプロセッサ710a〜710nを含む。コンピュータシステム700は、I/Oインターフェース730に結合されたネットワークインターフェース740、およびカーソル制御デバイス760、キーボード770、およびディスプレイ780など1つまたは複数の入力/出力デバイス750をさらに含む。一部の実施形態では、キーボード770は、タッチスクリーン入力デバイスの場合がある。
【００６８】
様々な実施形態において、構成要素のいずれも、上記のようにリモートプロセスコールをルーティングおよび実行するために、システムによって利用され得る。様々な実施形態において、ユーザインターフェースは、ディスプレイ780に生成および表示され得る。場合によっては、実施形態は、コンピュータシステム700の単一のインスタンスを使用して実装され得る一方、他の実施形態では、複数のそのようなシステム、またはコンピュータシステム700を構築する複数のノードは、様々な実施形態の異なる部分またはインスタンスをホストするように構成され得ることが考えられる。たとえば、一実施形態では、一部の要素は、他の要素を実装するノードとは異なるコンピュータシステム700の1つまたは複数のノードを介して実装され得る。別の例では、複数のノードは、分散的な方法でコンピュータシステム700を実装することができる。
【００６９】
異なる実施形態で、コンピュータシステム700は、限定しないが、パーソナルコンピュータシステム、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、アプリケーションサーバ、ストレージデバイス、スイッチ、モデム、ルータなどのなど周辺機器、または一般的に任意のタイプのコンピューティングデバイスまたは電子デバイスを含む様々なタイプのデバイスのいずれかの場合がある。
【００７０】
様々な実施形態において、コンピュータシステム700は、1つのプロセッサ710を含むユニプロセッサシステム、または複数のプロセッサ710を含むマルチプロセッサシステムの場合がある(たとえば、2、4、8、または別の適切な数)。1つのプロセッサ710を含むユニプロセッサシステムは、プログラムの同時データを処理および実行するために、複数のプロセッサに見えるようにシングルプロセッサの機能を分割することができる。プロセッサ710は、命令を実行することができる任意の適切なプロセッサの場合がある。たとえば、様々な実施形態において、プロセッサ610は、様々な命令セットアーキテクチャ(ISA)のいずれかを実装する汎用プロセッサまたは組み込まれたプロセッサの場合がある。マルチプロセッサシステムでは、プロセッサ710の各々は、一般に、必ずではないが、同じISAを実装する。
【００７１】
システムメモリ720は、プロセッサ710によってアクセス可能なプログラム命令722および/またはデータ732を格納するように構成され得る。様々な実施形態において、システムメモリ720は、静的ランダムアクセスメモリ(SRAM)、シンクロナス動的RAM(SDRAM:synchronous dynamic RAM)、不揮発性/フラッシュ型メモリ、または他のタイプのメモリなど適切なメモリ技術を使用して実装され得る。図示する実施形態では、上に記述した実施形態の要素のいずれかを実装するプログラム命令およびデータは、システムメモリ720内に格納され得る。他の実施形態では、プログラム命令および/またはデータは、異なるタイプのコンピュータでアクセス可能な媒体、またはシステムメモリ720もしくはコンピュータシステム700から離れた同様の媒体で受信、送信、または格納され得る。
【００７２】
一実施形態では、I/Oインターフェース730は、入力/出力デバイス750など、ネットワークインターフェース740または他の周辺インターフェースを含む、デバイスのプロセッサ710、システムメモリ720、および任意の周辺機器の間のI/Oトラフィックを調整するように構成され得る。一部の実施形態では、I/Oインターフェース730は、ある構成要素(たとえばシステムメモリ720)から別の構成要素(たとえばプロセッサ710)による使用に適した形式にデータ信号を変換するために、必要なプロトコル、タイミング、または他のデータ変換を実行することができる。一部の実施形態では、I/Oインターフェース730は、たとえば、ペリフェラルコンポーネントインターコネクト(PCI)バス標準またはユニバーサルシリアルバス(USB)標準の変形など、様々なタイプの周辺バスを通じて接続されたデバイスに対するサポートを含むことができる。一部の実施形態では、I/Oインターフェース730の機能は、たとえば、ノースブリッジおよびサウスブリッジなど2つ以上の個別の構成要素へと分割され得る。また、一部の実施形態では、システムメモリ720へのインターフェースなど、I/Oインターフェース730の機能の一部またはすべては、プロセッサ710に直接的に組み込まれ得る。
【００７３】
ネットワークインターフェース740は、データが、コンピュータシステム700と1つまたは複数の外部システムなどネットワーク(たとえばネットワーク790)に接続された他のデバイスとの間、またはコンピュータシステム700のノードの間で交換されることを可能にするように構成され得る。様々な実施形態において、ネットワーク790は、限定しないが、ローカルエリアネットワーク(LAN)(たとえばイーサネット(登録商標)または企業ネットワーク)、ワイドエリアネットワーク(WAN)(たとえばインターネット)、ワイヤレスデータネットワーク、セルラーネットワーク、Wi-Fi、他の何らかの電子データネットワーク、またはそれらの組合せを含む1つまたは複数のネットワークを含むことができる。様々な実施形態において、ネットワークインターフェース740は、たとえば、適切なタイプのイーサネット(登録商標)ネットワークなど、有線もしくは無線の一般的なデータネットワークを介して、アナログ音声ネットワークまたはデジタルファイバ通信ネットワークなど、電気通信/電話通信ネットワークを介して、ファイバチャネルSANなど、ストレージエリアネットワークを介して、または他の適切なタイプのネットワークおよび/またはプロトコルを介して、通信をサポートすることができる。
【００７４】
入力/出力デバイス750は、一部の実施形態では、1つまたは複数のディスプレイ端末、キーボード、キーパッド、タッチパッド、タッチスクリーン、スキャンデバイス、音声または光学による認識装置、または1つまたは複数のコンピュータシステム700によってデータを入力もしくはアクセスするのに適した他のデバイスを含む。複数の入力/出力デバイス750は、コンピュータシステム700に存在する場合があるか、またはコンピュータシステム700の様々なノードに分散され得る。一部の実施形態では、同様の入力/出力デバイスは、コンピュータシステム700から離れている場合があり、ネットワークインターフェース740を通じてなど有線または無線の接続を通じてコンピュータシステム700の1つまたは複数のノードと対話することができる。
【００７５】
一部の実施形態では、図示するコンピュータシステムは、図3〜図6の流れ図によって示された方法など、上に記述された方法のいずれかを実装することができる。他の実施形態では、異なる要素およびデータが含まれ得る。
【００７６】
コンピュータシステム700は、単に説明のためのものであり、実施形態の範囲を制限することを意図するものではないことを当業者は理解されるであろう。特に、コンピュータシステムおよびデバイスは、コンピュータ、ネットワークデバイス、インターネット家電、スマートフォン、タブレット、PDA、ワイヤレス電話、ポケットベルなどを含む、様々な実施形態の示された機能を実行することができるハードウェアまたはソフトウェアの任意の組合せを含むことができる。コンピュータシステム700は、図示されていない他のデバイスに接続され得るか、または代わりにスタンドアロンのシステムとして動作することができる。さらに、図示する構成要素によって提供される機能は、一部の実施形態では、より少数の構成要素で組み合わせられ得るか、または追加の構成要素に分散され得る。同様に、一部の実施形態では、図示する構成要素の一部の機能は、提供されない場合があるか、かつ/または他の追加的な機能が使用可能な場合がある。
【００７７】
当業者は、また、様々なアイテムは、使用される間にメモリまたはストレージに格納されるものとして示されているが、それらのアイテムまたはそれらの一部は、メモリ管理およびデータ完全性の目的のために、メモリと他のストレージデバイスとの間で転送され得ることを理解されるであろう。あるいは、他の実施形態では、ソフトウェア構成要素の一部またはすべては、別のデバイスのメモリで実行され、コンピュータ間通信を介して図示したコンピュータシステムと通信することができる。システム構成要素またはデータ構造の一部またはすべては、(たとえば命令または構造化データとして)コンピュータでアクセス可能な媒体または適切なドライブによって読み込まれる携帯用の物品に格納され得て、その様々な実例については上に記述されている。一部の実施形態では、コンピュータシステム700から離れているコンピュータでアクセス可能な媒体に格納された命令は、送信媒体またはネットワークおよび/もしくはワイヤレスリンクなどの通信媒体を介して伝達される、電気信号、電磁気信号、もしくはデジタル信号など信号を介して、コンピュータシステム700に送信され得る。様々な実施形態は、コンピュータでアクセス可能な媒体で、または通信媒体を介して、前述の記述により実装された命令および/またはデータの受信、送信、または格納をさらに含むことができる。一般的に、コンピュータでアクセス可能な媒体は、たとえばディスクまたはDVD/CD-ROMなど磁気的または光学的な媒体、RAM(たとえばSDRAM、DDR、RDRAM、SRAMなど)、ROMなど揮発性または不揮発性の媒体など記憶媒体またはメモリ媒体を含むことができる。
【００７８】
TEMBOOカスタムSDKを呼び出す、JAVA(登録商標)プログラムに挿入するために生成された例示的なスニペットは、以下を含む。
【００７９】
package TembooDemoECOs;
import com.temboo.Library.NYTimes.ArticleSearch.QueryArticles;
import com.temboo.Library.NYTimes.ArticleSearch.QueryArticles.QueryArticlesInputSet;
import com.temboo.Library.NYTimes.ArticleSearch.QueryArticles.QueryArticlesResultSet;
import com.temboo.core.TembooException;
import com.temboo.core.TembooSession;
public class TembooDemoECOs{
/**
*@param args
*@throws TembooException
*/
public static void main(String[] args) throws TembooException {
//Tembooセッションをインスタンス化する
TembooSession session = new TembooSession("demo", "myFirstApp", "6d975bf6-e761-47c7-8");
//以前にインスタンス化されたTembooSessionオブジェクトを使用してChoreoをインスタンス化する
QueryArticles queryArticlesChoreo = new QueryArticles(session);
//choreoに対してInputSetオブジェクトを取得する
QueryArticlesInputSet queryArticlesInputs = queryArticlesChoreo.newInputSet();
//実行に使用するために資格情報を設定する
queryArticlesInputs.setCredential("NYTimesCred");
//入力を設定する
queryArticlesInputs.set_Query("obama");
//Choreoを実行する
QueryArticlesResultSetqueryArticlesResults = queryArticlesChoreo.execute(queryArticlesInputs);
//ECOを使用して結果をプリントする
for (int i = 0; i < queryArticlesResults.getArticles().length; i++) {System.out.println(queryArticlesResults.getArticles()[i].getTitle() + " :: " + queryArticlesResults.getArticles()[i].getByLine());
}
}
}
【００８０】
上記の例では、スニペットは、任意のJAVA(登録商標)プログラムに挿入され得るコードを5行含む。「Tembooセッションをインスタンス化する」ためのコードから始まり、「Choreoを実行する」ためのコードで終わる。コードのこれらの行は、テキストとしてローカルIDEで編集され得て、ユーザが、彼または彼女が呼び出したいchoreoの名前を知っているように将来的に編集される。「package TembooDemoECOs;」行は、特定のクラス:QueryArticlesのインポートによってカスタムSDKを呼び出す。上記の実例は、QueryArticlesに対するコードを含む以下の例示的なSDKのインストールで可能である。
【００８１】
public class QueryArticles extends Choreography
{
/**  QueryArticles Choreoの新しいインスタンスを作成する。Temboo資格情報の有効な組を含むTembooSessionオブジェクトが供給されなければならない。
*/
public QueryArticles(TembooSession session) {
super(session,
TembooPath.pathFromStringNoException("/Library/NYTimes/ArticleSearch/QueryArticles"));
}
/**  このChoreoの実行のための入力を規定するために使用されるInputSetオブジェクトを取得する。
@return QueryArticlesInputSet
*/
public QueryArticlesInputSet newInputSet() {
return new QueryArticlesInputSet();
}
/**
*パラメータとして指定されたInputSetを使用してChoreoを実行し、Choreoが完了するのを待ち、そして実行結果を含むResultSetを返す。
*@param choreoInputs
*@return
*@throws TembooException
*/
@Override
public QueryArticlesResultSet execute(InputSet choreoInputs) throws TembooException {
JSONObject result = super.executeWithResults(choreoInputs);
return new QueryArticlesResultSet(result);
}
【００８２】
/**  QueryArticles Choreoへの入力を指定するのに適切な方法を備えたInputSet。InputSetオブジェクトは、このchoreoを実行するときに入力パラメータを指定するために使用される。
*/
public static class QueryArticlesInputSet extends InputSet {
/**  このChoreoに対してAPIKey入力の値を設定する。
@param String - (required, string) NYTimesによって提供されるAPI鍵。
*/
public void set_APIKey(String value) {
this.setInput("APIKey", value);
}
/**  このChoreoに対するBeginDate入力の値を設定する。
@param String - (optional, date)  返すべき発行日の範囲の始点(包含的)を設定する。EndDateとともに使用されなければならない。日付はYYYYMMDDのような形式であるべきである。
*/
public void set_BeginDate(String value) {
this.setInput("BeginDate", value);
}
/**  このChoreoに対するEndDate入力の値を設定する。
@param String - (optional, date)  返すべき発行日の範囲の終点(包含的)を設定する。BeginDateとともに使用されなければならない。日付はYYYYMMDDのような形式であるべきである。
*/
public void set_EndDate(String value) {
this.setInput("EndDate", value);
}
【００８３】
/**  このChoreoに対するファセット(Facets)入力の値を設定する。
@param String - (optional, string) 5ファセットまでのカンマ区切りのリスト。これは、応答に含めるべきファセット値の組を示している。この入力に対する承認された値の詳細については、Choreoの文書を参照すること。
*/
public void set_Facets(String value) {
this.setInput("Facets", value);
}
【００８４】
/**  このChoreoに対するフィールド(Fields)の入力の値を設定する。
@param String - (optional, string)  返すべきフィールドのカンマ区切りのリスト。これらのフィールドがデフォルトで返される:body、byline、date、title、およびurl。
*/
public void set_Fields(String value) {
this.setInput("Fields", value);
}
【００８５】
/**  このChoreoに対するオフセット(Offset)入力の値を設定する。
@param Integer - (optional, integer)  これは10の結果の組が返されることに対応する。結果に目を通すために使用される。レコード0〜9を返すために0に設定する、レコード10〜19を返すために1に設定するなど。
*/
public void set_Offset(Integer value) {
this.setInput("Offset", value);
}
【００８６】
/**  StringとしてこのChoreoに対するオフセット入力の値を設定する。
@param String - (optional, integer)  これは10の結果の組が返されることに対応する。結果に目を通すために使用される。レコード0〜9を返すために0に設定する、レコード10〜19を返すために1に設定するなど。
*/
public void set_Offset(String value) {
this.setInput("Offset", value);
}
【００８７】
/**  このChoreoに対するクエリ(Query)入力の値を設定する。
@param String - (required, string) (オプションとして特定のフィールドに適用された)キーワードおよび/またはファセットを検索する。構文の実例については、Choreoの文書を参照すること。
*/
public void set_Query(String value) {
this.setInput("Query", value);
}
【００８８】
/**  このChoreoに対するランク(Rank)入力の値を設定する。
@param String - (optional, string)  結果の順序を設定する。承認された値は、次のとおりである:newest(デフォルト)、oldest、またはclosest。
*/
public void set_Rank(String value) {
this.setInput("Rank", value);
}
}
【００８９】
/**  QueryArticles Choreoによって返された値に調整された方法を用いるResultSet。
ResultSetオブジェクトは、Choreo実行の結果を取得するために使用される。
*/
public static class QueryArticlesResultSet extends ResultSet {
public QueryArticlesResultSet(JSONObject doc) throws TembooException {
super(doc);
}
【００９０】
/**  このChoreo実行から「Response」出力に対する値を取得する。
@return String - (json) NY Times APIからの応答。
*/
public String get_Response() {
return this.getResult("Response");
}
【００９１】
/**  オフセットの値は、10の結果の組に対応する(すなわち、結果0〜9に対してoffset=0、結果10〜19に対してoffset=1など)
*/
public String getOffset() {
return (String)
((JSONObject)getJSONFromString(this.getResult("Response"))).opt("offset");
}
【００９２】
/**  検索基準に一致するアーティクル(article)を取得する。
*/
public NYTimesArticle[] getArticles() {
JSONArray list = (JSONArray)
((JSONObject)getJSONFromString(this.getResult("Response"))).opt("results");
NYTimesArticle[] resultArray = new NYTimesArticle[(list != null) ? list.length() : 0];
if(list != null) {
for(int i=0; i<list.length(); i++) {
try {
resultArray[i] = new NYTimesArticle(list.get(i));
} catch (JSONException e) {}
}
}
return resultArray;
}
【００９３】
/**  クエリに提供される検索トークンを含む。
*/
public String[] getTokens() {
JSONArray list = (JSONArray)
((JSONObject)getJSONFromString(this.getResult("Response"))).opt("tokens");
String[] resultArray = new String[(list != null) ? list.length() : 0];
if(list != null) {
for(int i=0; i<list.length(); i++) {
try {
resultArray[i] = (String) list.get(i);
} catch (JSONException e) {}
}
}
return resultArray;
}
【００９４】
/**  この検索に対するアーティクルの総数
*/
public Number getTotal() {
return (Number)
((JSONObject)getJSONFromString(this.getResult("Response"))).opt("total");
}
}
}
【００９５】
上記の例示的なカスタムSDKをインストールすることによって、スニペットは、ここでリモートプロセスへのコールを実行することができる。コードスニペットは、関連するVCP245を通じてリモートサーバ104a上の実際のプロセスを呼び出すためにカスタムSDKコードにリンクする。一部の実施形態では、SDKは、入力パラメータが適切な形式にあることを保証し、次いで、対応するリモートプロセスを呼び出すことを含む。上記の実例では、「choreo」は、ユーザデバイス102aおよび/またはローカルIDE305でのリモートプロセスのグラフィック表示である。
【００９６】
本明細書に記述した方法は、異なる実施形態では、ソフトウェア、ハードウェア、またはそれらの組合せにおいて実装され得る。さらに、方法の順序は変更され得て、また、様々な要素を追加、並べ替え、組み合わせ、省略、あるいは修正され得る。本明細書に記述したすべての実例は、限定を目的とせずに提示されている。本開示の利益を受ける当業者には明白なように、様々な修正および変更が行われ得る。特定の実施形態に関連して、実施形態による実現について記述してきた。これらの実施形態は、説明を目的とするものであり、限定を目的としていない。多数の変形形態、修正、追加、および改善が可能である。したがって、単一のインスタンスとして本明細書に記述された構成要素について、複数のインスタンスを提供され得る。様々な構成要素、動作、およびデータストアの間の境界はある程度は自由に決めてよく、また、特定の動作は、特定の説明的な構成に関連して示されている。機能の他の割り当てが想像され、後述する特許請求の範囲の範囲以内に該当する場合がある。最後に、例示的な構成における個別の構成要素として提示されている構造および機能は、組み合わせられた構造または構成要素として実装され得る。これらおよび他の変形形態、修正、追加、および改善は、後述する特許請求の範囲に規定される実施形態の範囲内に該当する場合がある。
【００９７】
前述の内容は、本発明の実施形態に関するものであるが、その基本的な範囲から逸脱することなく、本発明の他の実施形態およびさらなる実施形態が考案され得て、その範囲は、後述する特許請求の範囲によって決定される。
【符号の説明】
【００９８】
102a  ユーザデバイス
102n  ユーザデバイス
104a  リモートサーバ
104n  リモートサーバ
110  ネットワーク
120  リモートプラットフォーム
124  スニペット相関モジュール
1251  カスタムSDKジェネレータ
125N  カスタムSDKジェネレータ
1261  実行エンジン
126N  実行エンジン
200  プラットフォーム
205  クラウドクライアント
2061  インターフェース
2062  インターフェース
206N  インターフェース
2081  アプリケーションレイヤ
2082  アプリケーションレイヤ
208N  アプリケーションレイヤ
2101〜210N  従来型のサービス構成要素
2121  仮想化レイヤ
2122  仮想化レイヤ
212N  仮想化レイヤ
2151  物理サーバおよびネットワーク装置
2152  物理サーバおよびネットワーク装置
215N  物理サーバおよびネットワーク装置
225N  SDKリンクモジュール
2281  プロセスコードパーサモジュール
228N  プロセスコードパーサモジュール
2301  プロセスプール
230N  プロセスプール
2321  ユーザデータベース
232N  ユーザデータベース
2451…245N  仮想コードプロバイダ(VCP)
305  IDE
700  コンピューティングシステム
710a  プロセッサ
710b  プロセッサ
710n  プロセッサ
720  メモリ
722  プログラム命令
730  I/Oインターフェース
732  データ
740  ネットワークインターフェース
750  入力/出力デバイス
760  カーソル制御デバイス
770  キーボード
780  ディスプレイ
790  ネットワーク
【図１】
0006494609.tif 000002
【図２】
0006494609.tif 000003
【図３】
0006494609.tif 000004
【図４】
0006494609.tif 000005
【図５】
0006494609.tif 000006
【図６】
0006494609.tif 000007
【図７】
0006494609.tif 000008