(58)【調査した分野】(Int.Cl.,DB名)
前記SDKをインストールするステップは、前記ユーザデバイスの総合開発環境(IDE)に前記SDKをインストールするステップをさらに含む、請求項1に記載の方法。
前記コードスニペットは、前記リモートサーバ上の少なくとも1つのVCPに、パラメータ値を用いるスニペットを展開することによって、前記リモートプロセスを呼び出す、請求項1に記載の方法。
前記コードスニペットを展開するステップは、前記VCPにアクセスするために前記インストールされたSDKを用いて調整するステップをさらに含む、請求項1に記載の方法。
前記コードスニペットは、前記ローカルコードベースのプログラミング言語と同じであるプログラミング言語で前記VCP上で生成される、請求項12に記載のシステム。
前記SDKをインストールするステップは、前記ユーザデバイスの総合開発環境(IDE)に前記SDKをインストールするステップをさらに含む、請求項12に記載のシステム。
前記コードスニペットは、前記リモートサーバ上の少なくとも1つのVCPに、パラメータ値を用いるスニペットを展開することによって、前記リモートプロセスを呼び出す、請求項12に記載のシステム。
【発明を実施するための形態】
【0010】
記述された以下の実施形態では、「プロセス」は、実行コンピュータ(たとえば、サーバ、パーソナルコンピュータ、モバイルデバイスなど)にすでに格納されている、すぐに実行可能なコードベースまたは事前生成されたプロセスコードを表すものとする。各プロセスは、総合開発環境(IDE)のユーザに対して、名前、プロセスID、アイコン、または他の識別子によって一意に識別される。「実行」は、コンピュータ(ローカルもしくはリモート、またはクラウドベース)上のプロセスの開始を表すものとする。「バンドル」は、共通する属性(API名、共通のパラメータ、SDK、パラメータ名など)によって整理されたプロセスまたは機能の集合を表すものとする。「スニペット」は、リモートプロセスを呼び出すためにユーザによって選択された対応するプログラミング言語を用いてプログラムに挿入されるカスタマイズされたコードの生成されたブロックを表すものとする。多くの場合、選択された言語は、ユーザデバイスのアプリケーションおよび/またはIDEに実装されるためにユーザによって指定されたプログラミング言語のものである。
【0011】
本明細書に開示された実施形態は、リモートサーバ(たとえば「クラウド」)のコードライブラリに関し、ユーザは、プロセスをリモートから選択し、次いで、ローカルアプリケーションまたはソフトウェアプログラムからプロセスにアクセスするために、対応するスニペットおよび/またはSDKをダウンロードすることができる。スニペットは、リモートサーバ上のリモートプロセスコールが、サーバ上のプロセスを実行すること、または異なるリモートサーバまたはリモートでプロセスを展開することを可能にする。スニペットが実行コンピュータ上のリモートプラットフォームと通信できるように、ユーザデバイスは仮想化されたSDKを使用する。リモートプラットフォームは、追加的なサービスの仮想化された構成要素(たとえば、コンパイラ、電子メール、アマゾン、ツイッター、EBAY、ドロップボックスなど)とともに、サービスに対する対応するSDKおよびAPIを含む。コンピューティングプラットフォームは、ハードウェアアーキテクチャおよびソフトウェアフレームワーク(アプリケーションフレームワークを含む)を含み、組合せによりソフトウェアの実行が可能になる。典型的なプラットフォームは、コンピュータアーキテクチャ、オペレーティングシステム、およびランタイムライブラリを含む。
【0012】
典型的なSDKは、プログラマがソフトウェアパッケージ、ソフトウェアフレームワーク、ハードウェアプラットフォーム、コンピュータシステム、ビデオゲーム機、オペレーティングシステム、または同様の開発プラットフォームのためのアプリケーションを開発するのに役立つであろう多数のツール、ライブラリ、文書、およびサンプルコードを含む。APIは、相互に通信するためにプログラムが従うべきルールの組を規定している。ルールは、2つのアプリケーションが相互に通信するために、ルーチン、データ構造などがどのように規定されるべきかを指定している。APIは、ソフトウェアプログラムが相互に対話することを可能にするインターフェースである一方、SDKは、特定のプラットフォームを対象とするソフトウェアアプリケーションを開発するために使用され得るツールの組である。一部の例では、SDKはAPIを含む場合がある。
【0013】
図1は、本発明の1つまたは複数の実施形態によるコード仮想化システム100を示す図である。システム100は、少なくとも1つのユーザデバイス(102a…102n)、ネットワーク110、および少なくとも1つのリモートサーバ(104a…104n)を含む。少なくとも1つのユーザデバイス(102a…102n)は、パーソナルコンピュータ、サーバ、仮想サーバ、マイクロコントローラ(MCU)およびコントローラ、センサ、アクチュエータ、ゲートウェイに接続されたエッジデバイス、特定用途向け集積回路(ASIC)、マイクロプロセッサおよびプロセッサ、セル式電話、スマートフォン、タブレット、ラップトップなどプログラムを格納および実行できる電子デバイスを含む。
【0014】
各ユーザデバイス(102a…102n)は、少なくとも1つのリモートサーバ(104a…104n)に接続するために、ネットワーク110に接続および認証するのに必要なコードを格納する対応するメモリ(112a…112n)を含む。一部の実施形態では、メモリ(112a…112n)は、少なくとも1つのリモートサーバ(104a…104n)からスニペットを受信および展開するためのIDEを格納する。
【0015】
ネットワーク110は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、ワイヤレスローカルエリアネットワークWLAN、セルラーネットワーク、Wi-Fi、インターネット、またはイントラネットネットワークなど、有線および/または無線のネットワークの少なくとも1つまたは組合せを含むことができる。少なくとも1つのリモートサーバ(104a…104n)は、リモートアプリケーションサーバ、ウェブサーバ、メールサーバ、ホストサーバ、データベースサーバ、ストレージサーバなどを含むことができる。少なくとも1つのリモートサーバ(104a…104n)は、プラットフォーム120を格納し、SDKジェネレータ122、スニペットジェネレータ124、および実行エンジン126を通じてなど特定のプロセスコールを実行するために、メモリ(114a…114n)を含む。一部の実施形態では、スニペットジェネレータ124は、また、ユーザデバイス(102a…102n)でのローカルスニペット生成のためにユーザデバイス(102a…102n)に格納され得る。メモリ(114a…114n)は、また、ネットワーク110上で他のサーバ104n(たとえばフェイスブック、ツイッター、電子メール、SMS、MMS、FTPなど)を横断してプロセスをリンクおよび実行するために、ユーザインターフェースモジュール、ユーザプロフィール/アカウントのデータベース、プロセスの集合、SDK、および関連するパラメータを格納することができる。
【0016】
実行エンジン126は、呼び出された、識別されたルーチンを相関させ、コールパラメータを使用してプロセスを実行する(running/executing)ことによって、ライブラリのルーチンへのコールを処理する。一部の実施形態では、実行エンジン126は、別のプロセスコールまたはオリジナルのプロセスコールに出力を送ることができる。
【0017】
一部の実施形態では、プロセスコールパラメータは、ユーザデバイス102aまたはリモートサーバ104aのいずれかに格納される。他の実施形態では、プロセスコールのパラメータは、グラフィカルユーザインターフェースで指定されたユーザに提示される事前生成され事前定義されたフィールドを介してユーザによって直接的に指定される。一部の実施形態では、グラフィカルユーザインターフェースは、IDEの一部である。IDEは、ユーザデバイス102aでユーザに選択されたプログラミング言語のプログラムへの統合のためにリモートサーバ104aによって生成されたスニペットを利用する。
【0018】
一部の実施形態では、IDEは、また、追加的なプロセスを展開し、他のサーバ104n上で提示されたサービスにアクセスするために、サーバ104a上でスニペットを使用して、リモートプロセスコールを実行する。実行は、リモートプロセスコールを以下に
図2でさらに記述する対応する仮想コードプロバイダにリンクする、共通の仮想化されたSDKおよびプラットフォームによって促進される。
【0019】
図2は、本発明の1つまたは複数の実施形態により、コード仮想コードプロバイダ(VCP)245
1…245
Nを使用して、クラウドクライアント205とインターフェースがとられる従来型のサービス構成要素(CSC)210
1…210
Nを実行するためのプラットフォーム200を示している。プラットフォームは、リモートサーバ104a上に格納され得るプラットフォーム120に対応する。以下に、従来型のサービス構成要素210
1…210
Nは、CSC210としてまとめて表され、同様に仮想コードプロバイダ245
1…245
Nは、VCP245としてまとめて表される。プラットフォーム200は、クラウドクライアント205およびVCP245を介してリモートプロセスコールのためのユーザデバイス102をCSC210
1…210
Nにリンクする、仮想化されたSDKを効果的に使用する。
【0020】
CSC210
1は、リモートインターフェース206
1、アプリケーションレイヤ208
1、仮想化レイヤ212
1、および物理装置215
1を含む。各CSC210は、プラットフォーム200によって提示される特定のサービスを表している。たとえば、CSC210
1は、インターネットサービスおよび対応するサーバの場合があり(たとえば、フェイスブック、EBAY、POP3電子メール、ツイッター、アマゾン、SMS、FTP、HTTPなど)、CSC210
2は、従来のローカルデータ情報処理を提供するコンピュータの場合がある(たとえば、画像レンダリング、コードのコンパイル、データ分析、データ記憶など)。
【0021】
物理装置215
1またはマシン(CPU、メモリ、ネットワークルータなど)は、処理およびストレージのリソースをアプリケーションレイヤ208
1で利用可能にするために、仮想化レイヤ212
1において仮想化される。仮想化により、単一のコンピュータにおいて、およびさらに複数のマシンが仮想化されている実施形態において、冗長性および動作帯域幅の増加が生じる。そのような実施形態では、処理の作業負荷は、また、優先度に基づいて、および物理的位置と無関係に、様々な装置に割り当てられ得る。
【0022】
アプリケーションレイヤ208
1は、仮想化されたマシンでのデータベース動作(たとえば、アカウントプロフィールの格納、データの保管など)など、プログラムおよび機能の実行ランタイムを可能にする。リモートインターフェースレイヤ206
1は、ウェブサーバにアクセスし、APIを利用するためのコードを含む。リモートインターフェース206
1は、クラウドクライアント205と通信する(たとえば、シンクライアント、ウェブブラウザ、モバイルアプリケーション、ターミナルエミュレータプログラムなど)。
【0023】
クラウドクライアント205は、アプリケーションレイヤ208
1を用いてVCP245との間のデータの通信を促進する。クラウドクライアント205は、ウェブブラウザ、ターミナルエミュレータ、または他のクライアントのインターフェースを提示することによって、レイヤインターフェース206
1、208
1、212
1、および215
1を簡素化する。本発明の前述の実施形態は、仮想化されたSDKを使用して、プラットフォーム200でのスニペットのリモートプロセスコールコード生成を促進するために、クラウドクライアント205を利用することができる。仮想化されたSDKは、アプリケーションレイヤ208
1に、VCP245によって生成および提示されたプロセスコールをリンクする。
【0024】
VCP245は、仮想サンドボックス、正規化、汎用言語、結果解析、自動的な資格情報検証、簡素化された宣言プロセス、プラットフォームの維持、および監視を可能にする、拡張されたホストされたコードライブラリである。リモートサーバにプロセスおよびアプリケーション/プログラムを完全に展開する前に、プログラムをテストまたは「サンドボックス」することは、プログラム内に含まれる複数のリモートプロセスおよびサービスの追加に伴い、ますます重要になってきた。VCP245は、ユーザデバイス102aにダウンロードされる仮想化されたSDKを使用して、スニペットプロセスコールを調整する。
【0025】
ユーザデバイス102aの観点から、VCP245は、言語をテンプレート化(templating)することによって、仮想化されたSDKを通じて提示された汎用プログラミング言語を可能にするため、構成要素のパラメータだけが必要であり、事前生成されたコードに挿入される。したがって、処理結果も迅速に解析され得る。アクセスは、また、リモートサービスにアクセスするために鍵の事前認証および格納された集中化された管理を使用して、プラットフォーム200によって円滑化される。事前認証は、また、機密にまつわる情報を露出する可能性がある、ユーザデバイス102aとプラットフォーム200との間で通信されるコードのリバースエンジニアを防ぐことによって、より安全なコードを生成する。VCP245は、また、スニペット形式へとプロセスを減らすことによってプログラミングを正規化する。したがって、スニペットは、コードを記述する標準化された方法を表している。
【0026】
たとえば、クラウドで任意のプロセスを呼び出すための5行のコードは、コードの正規化と考えられる。VCP245は、プラットフォーム200が、作成されたアプリケーションがどのように実行されているかのリアルタイムの監視およびログ記録を表示することを可能にする(たとえば、使用統計、エラー処理など)。プラットフォーム200は、また、それぞれのVCPのSDKを維持するために監視を使用するため、プロセスプール230のAPIは、新しい方法、バージョン、およびパラメータを含めるために継続的に改善されている。
【0027】
VCP245
1は、プロセスプール230
1、認証モジュール228
1、SDKリンクモジュール225
1、スニペットジェネレータ124
1、ユーザデータベース232
1、および実行エンジン126
1を含む。一部の実施形態では、単一の実行エンジン126は、すべてのプロセスを展開することができる。
【0028】
説明を簡単にするために、VCP245の各々は、1対1の対応でCSC210に対応している。しかしながら、代替実施形態は、異なる比率またはすべてのCSC210によって提示されたすべてのプロセスを表す単一のVCP245を含むことができる。VCP245は、本発明の1つまたは複数の実施形態によりリモートサーバ104aに格納される。VCP245は、CSC210のプラットフォーム200で提示されるリモートサービスをプロセスプール230に格納された、限られた数の実行可能な事前に決定されたリモートプロセスへと減らす。
【0029】
リモートプロセスは、所与のCSC210
Nで実行され得る望まれる動作に対応する。たとえば、フェイスブックのCSC210
1に対するプロセスは、コメントの投稿、写真の投稿、コメントまたは写真へのいいね(liking)、友達要求の拒否、友達要求の開始、投稿の削除、およびユーザによって望まれる他の動作の制限されたプロセスプール230
1を持つであろう。所与のプロセスプール230のプロセスの数は、したがって、CSC210
1に関連するサービスによって使用可能な動作に制限される。例について続けると、プラットフォーム200には、フェイスブックに製品のレビューを配置するプロセスはないであろう。しかしながら、そのようなプロセスは、アマゾンで使用可能なようにプラットフォーム200によって処理されるであろう。
【0030】
プロセスプール230
1、これはリモートプラットフォーム200および対応するCSC210によって提示される各プロセスに関連するすべての事前生成されたコードを格納する。一部の実施形態では、事前生成されたコードは、事前生成されたコードプロセスを認識するために、リモートアプリケーションレイヤ208
1に必要なネイティブ言語である。他の実施形態では、プログラミング言語は、IDEについてユーザデバイス102aにネイティブな場合がある。
【0031】
スニペットジェネレータ124
1は、スニペットがプロセスプール230
1から関連するプロセスを呼び出すことができるように、対応するSDKを用いてスニペットを作成するために、ユーザによって入力されたパラメータだけでなく、プロセス名を挿入することによって、スニペットを生成する。スニペットパラメータは、選択されたリモートプロセスに関連する事前に定めたフィールドを含むGUIを使用して入力され得る。スニペットパラメータは、また、以前にユーザデータベース232
1に格納されたように取得され得る。ユーザデータベース232
1は、様々なサービスバンドルに対するユーザプロフィール、履歴、および格納された資格情報を含む。他の実施形態では、スニペットは、ユーザデバイス102aでローカルに生成され得る。
【0032】
代替的実施形態では、スニペットジェネレータ124
1は、簡易オブジェクトアクセスプロトコル(SOAP)、表現的状態転送(REST:representational state transfer)モデル、またはcURLを通じてなど、API呼び出しを使用して呼び出されたときにスニペットを生成する。
【0033】
生成されたスニペットは、ユーザによって指定されたか、またはプラットフォーム200によって必要とされるプログラミング言語である。たとえば、ユーザは、JAVA(登録商標)で記述された、ユーザデバイス102aに前から存在するプログラムを持つことができる。関連するスニペットは、前から存在するプログラムにスニペットを直接的に挿入するために、ユーザデバイス102aに、JAVA(登録商標)構文の仮想化されたSDKおよびプラットフォーム200、ならびに対応するライブラリへのプロセスコールを持つ必要があるであろう。
【0034】
認証モジュール228
1は、ユーザから資格情報を受信するか、またはVCP245
1に関連するCSC210
1にアクセスするために、ユーザから以前に入力および格納された資格情報を使用する。認証モジュール228
1は、また、プラットフォーム200へと認証することができる。ユーザデータベース232
1は、CSC210
1の所与のサービスに対するアカウントデータベースである。他の実施形態では、ユーザデータベース232
1は、プラットフォーム200への認証のためのユーザアカウントの集合である。次に、プラットフォーム200は、複数のVCP245および関連するCSC210を横断して認証を調整する。たとえば、リモートサーバ(たとえばTEMBOOサーバ)のプラットフォーム200に同様にログインするユーザは、以前にユーザによって提出されたリモートサーバ104aに格納された事前定義された資格情報を使用して、電子メールサーバおよびEBAYアカウントへと認証する。
【0035】
SDKリンクモジュール225
1は、リモートプロセスの様々なバンドルを形成するために、ユーザデバイス102aおよびAPIで通信するだけでなく、認証モジュール228
1が、ネットワーク110とインターフェースをとることを可能にするためのコードで構成される。SDKリンクモジュール225
1は、また、クロスプラットフォームおよびクロスサービスの対話のために、複数のVCP245を横断して複数のSDKおよびAPIとの通信を調整する。たとえば、SDKリンクモジュール225
1は、仮想化されたSDKで組み合わせられた単一のプロセスコールを形成するために、プロセスプール230および対応するSDK(たとえばEBAY SDK、ツイッターSDK、SMS SDKなど)を調整する。例について続けると、それぞれのプロセスプールからプロセスをリンクすることによって、仮想化されたSDKを用いる単一のプロセスコールは、アマゾンで売られている製品に一致するEBAY価格での落札されたオークションを本質的に同時にツイートおよびSMSテキスト送信することができる。
【0036】
最後に、実行エンジン126
1は、プロセスプール230
1から選択されたプロセスを実行し、リモートプロセスを実行するために、別のリモートサーバ104nまたは対応するCSC210
1にプロセスを展開する。一部の実施形態では、実行エンジン126
1は、また、ユーザデータベースまたはユーザデバイス102aに結果を返すことができる。他の実施形態では、実行エンジン126
1は、また、ユーザデバイス102aのローカルコードベースまたは前から存在するプログラムに埋め込まれた場合、作成されたスニペットがプロセスを呼び出すために使用されたときに、プロセスプール230
1からリモートプロセスを実行する。さらに他の実施形態では、複数のリモートプロセスコールをリンクおよび実行するためなど、複数のVCP245の中での通信を調整するために、異なるSDKSを使用するために、実行エンジン126
1が、SDKリンクモジュール225
1と動作することを必要とする。
【0037】
図3は、本発明の1つまたは複数の実施形態により、総合開発環境(IDE)305とインターフェースをとる
図2に開示された仮想コードプロバイダ245を使用する全体的な方法300を示す図である。方法300は、ユーザデバイス102nでIDE305、およびリモートサーバ104n格納されたVCP245を利用する。方法300は、リモートプロセスを実行するのに必要な対応するCSC210の様々なプログラミング言語およびプラットフォームでリモートプロセスを呼び出すために、IDE305にネイティブの選択されたプログラミング言語で言語スニペットをダウンロードする。記述した実施形態では、単一のVCP245
NおよびCSC210
Nに対応する単一の例示的なスニペットが示されているが、他の実施形態は、複数のスニペットならびに対応するVCP245およびCSC210を含む。
【0038】
IDE305は、リモートコードベースを用いてローカルコードベースを調整し、プログラムまたはアプリケーションがローカルで記述されながら、仮想化されたSDKを使用して、リモートプロセスコールを含めることを可能にする。一部の実施形態では、仮想化されたSDKは、ユーザデバイス102nにダウンロードおよび格納され得る。
【0039】
ユーザデバイス102aが表示され、プロセスの使用可能なバンドルがVCP245
Nを提示し、リモートプロセスが選択される。一部の実施形態では、IDE305のユーザは、特定のプログラミング言語で記述された既存のプログラムを持つことができる。そのような実施形態では、ユーザは、また、スニペットに対して既存のプログラムと同じプログラミング言語を選択する。
【0040】
次に、スニペットはIDE305にダウンロードされる。一部の実施形態では、スニペットは、スニペットジェネレータ124
Nによって生成される。他の実施形態では、スニペットは、VCP245
Nに位置するユーザアカウントへの認証を用いて以前に生成およびリコールされ得る。一部の実施形態では、スニペットは、プロセスに対するパラメータを含めるためにIDE305のユーザによって編集される。あるいは、パラメータは、プロセスプール230
Nからプロセスを選択するときにユーザによって提出され得るため、スニペットは、スニペットにすでに挿入されたパラメータを用いてダウンロードされる。
【0041】
次に、IDE305は、SDKリンクモジュール225
Nにスニペットを展開する。一部の実施形態では、スニペットは、対応するVCP245にスニペットのリモートプロセスコールを関連させるために、仮想化されたSDKを使用して展開される。他の実施形態では、展開されたスニペットは、対応するVCP245に直接的に展開される。
【0042】
SDKリンクモジュール225
Nは、CSC210
Nの選択されたプロセスおよび関連するSDKに関連する事前生成されたコードを取得する。たとえば、アマゾンサーバに対応するCSC210
Nについて、プロセスはアイテムを購入する予定であり、SDKリンクモジュール225
Nは、スニペットから解析されたユーザから提出されたパラメータを使用して、アマゾンサーバの購入にアクセスおよび実行するために使用されたネイティブ言語でプロセスプール230
Nから事前生成されたコードを取得する。例について続けると、アマゾン購入の解析されたパラメータは、製品名およびシリアル番号、ユーザの名前、送付先、ならびにクレジットカード情報を含むであろう。パラメータが挿入された事前生成されたコードは、対応するCSC210
1でリモートプロセスを次に展開する実行エンジン126
Nに送られる。
【0043】
図4は、本発明の1つまたは複数の実施形態によるプロセスコールスニペットを作成する方法を示す流れ図である。方法は、
図1のシステム100および上記の
図2で記述したプラットフォーム200によって実装され得る。方法400は、リモートプロセスコールを生成する。
【0044】
方法400は、ステップ405で始まり、ステップ410へと継続し、CSC210によって提示されたサービスに関連するプロセスコードは、メモリ(たとえば、プロセスプール230)に格納される。プロセスコードは、CSC
Nに特有のネイティブ言語の場合がある。一部の実施形態では、VCP245は、プロセスコードを生成するか、あるいはプロセスコードは事前生成され、パラメータデータの挿入のために準備され得る。
【0045】
次に、ステップ415で、プロセスコードは、属性が分析される。属性は、パラメータ(たとえば変数)、プログラミング言語のタイプだけでなく、CSC210でプロセスコードとインターフェースをとり実行するために必要なSDKまたはAPIを含む。属性は、また、パラメータと所与のプロセスに対するパラメータの機能とのそれぞれの関係に基づいて区別するパラメータを含む。たとえば、電子メール送信(send e-mail)プロセスは、発信元の電子メールアドレス、宛先の電子メールアドレス、件名、現在の時刻、送るべき時間、およびメッセージ本文などのパラメータを必要とする。
【0046】
次に、ステップ420で、パラメータは、CSC210でプロセスを実行する際に、提示されたプロセスおよび役割への相対的関係に基づいて相関される。例では、パラメータの各々は、プロセスにおいて特定のそれぞれの機能および他のパラメータとの関係を持っている。宛先の電子メールアドレスは、電子メールの著者として発信元の電子メールアドレスを用いる、対応するメッセージの件名および本文に関係する宛先の電子メールを必要とするプロセスコードの一部に割り当てられる。送るべき時間(time to send)パラメータは、電子メールがいつ送られるべきかに関する値を含み、それに応じて、電子メール送信プロセス内で実行の時間の機能に相関される。代替的実施形態では、分析されたプロセスコードは、それぞれのCSC210のSDKおよびAPIにネイティブである(たとえば、アマゾン、ツイッターなど)。一部の実施形態では、関係情報は、また、生のパラメータ構成要素のソースを含む。パラメータデータは、ユーザによって手作業で入力する、自動的に入力する(たとえば、格納された認証鍵)、別のプロセスの結果に条件付きに基づく、または別のプロセスのパラメータに関係することができる。
【0047】
ステップ425で、パラメータはプロセスプール230の少なくとも1つのプロセスに割り当てられる。以前の例について続けると、発信元の電子メールアドレスは、電子メールを送るためのプロセスだけでなく、別のプロセスが電子メールサーバへと認証するために必要なPOP3サーバへのログイン資格情報に割り当てられ得る。
【0048】
ステップ430で、プロセスプール320のプロセスは、仮想化されたSDKにリンクされる。仮想化されたSDKは、プロセスプール230のプロセスを呼び出すために、ユーザデバイスにダウンロードされ得る。一部の実施形態では、プロセスを呼び出すステップは、リコールされた格納されたプロセスコードへと挿入されたスニペットからパラメータデータを受信するステップと、仮想化されたSDKにリンクされたCSC210に対してAPIおよびSDKを使用して、対応するCSC210で挿入されたパラメータを用いてプロセスコードを実行するステップとを含む。そのような実施形態では、必要とされるAPIおよびSDKは、また、プロセスプール320の関連するプロセスコードにリンクされる。
【0049】
ステップ435で、方法400は、選択された言語に対して前から存在する言語テンプレートを使用して、複数のプログラミング言語でプロセスプール230の各プロセスに対してプロセスコールスニペットを生成する。次に、方法400は、ステップ440で終了する。
【0050】
図5は、本発明の1つまたは複数の実施形態による追加的なリモートプロセスを用いるローカル開発環境を拡張するための方法500を示す流れ図である。仮想化されたSDKを通じて、方法500は、ユーザデバイス102aのコードベースが小さく、ユーザによって実装されるSDKのみを含むことを可能にする。方法500は、仮想化されたSDKのリモートプロセスコールを処理するリモートプログラミングプラットフォーム200に認証するステップを含む。
【0051】
方法500は、ステップ505で始まり、ステップ510へと継続し、ユーザデバイス102aは、リモートプラットフォーム200にログインする。ユーザのアカウントは認証され、CSC210の様々なリモートサービスに対する以前に格納された鍵および資格情報に関連される(たとえば、データストレージ、電子メール、ウェブサイト、ソーシャルメディア、仲介(brokerage)、バンキングなど)。認証モジュール228は、VCP245の関連する様々なCSC210に認証するために、相互に調整する。一部の実施形態では、プラットフォーム200は、一般的に使用されるルーチン、プロセス、SDK、およびAPIのプロフィール履歴を用いる集中化されたユーザアカウントを含む。プロフィール履歴は、プラットフォーム200ならびに関連するVCP245およびCSC210に対応するユーザデータベース232の両方に対して記録および更新される。
【0052】
方法500は、ステップ515に継続し、リモートプロセスはポピュレートされ、かつ/またはユーザデバイス102aに表示される。ユーザデバイス102aがディスプレイを持っている実施形態では、使用可能なプロセスは、IDE305を介してユーザに表示される。プロセスプール230のリモートプロセスは、特定のCSC210に対して提示された動作に対応するプロセスのバンドルとして表示され得る。たとえば、ツイッターに対応するCSC210は、FOLLOWING機能を使用するすべての下位動作(たとえばFOLLOW、FOLLOW停止、FOLLOW状態など)に対するFOLLOWバンドル、およびTWEETを使用する副次機能に対するTWEETバンドルを含むであろう。
【0053】
方法500は、ステップ520に継続し、選択されたリモートプロセスに関連する仮想化されたSDKが、リモートサーバ104aから要求される。仮想化されたSDKは、すべてのリモートプロセスコールを含むことができるか、または選択されたプロセスへのコールを処理するコードを含むようにカスタマイズされ得る。一部の実施形態では、仮想化されたSDKは、ユーザデバイス102aのプログラミング言語に特有である。仮想化されたSDKは、対応するVCP245で選択されたリモートプロセスを呼び出すために、すべての必要なヘルパー/ツールをコードスニペットに提供する。
【0054】
ディスプレイが使用可能ではない実施形態では、方法500は、選択されたプロセスの対応するSDKをダウンロードするステップを自動化することができる。仮想化されたSDKは、プロセスプールからのプロセスをCSC210の少なくとも1つのリモートサービスに関連する対応するSDKおよびAPIにリンクするSDKリンクモジュール225を介して、リモートプロセスコールを可能にする。たとえば、CSC210がグーグルである場合、仮想化されたSDKは、グーグル検索を実施し、特定のクエリに対して検索の結果を特定のコンピュータに返すためのコマンドを持つグーグルSDKおよびAPIにリンクするステップを含む。
【0055】
ステップ525で、IDE305はリモートプロセスにアクセスし、ユーザデバイス102aの既存のローカルコードベースに仮想化されたSDKを統合するように、関連する仮想化されたSDKをローカルのIDE305にダウンロードおよびインストールすること。仮想化されたSDKは、開発者が彼女/彼のローカルコードベースに(次に、生産のために展開されたコードに)インストールしておく必要がある言語に特有のローカルコードライブラリである。
【0056】
次に、ステップ530で、ダウンロードされた仮想化されたSDKは、(たとえば、ユーザデバイス102aで作成された)ローカルプログラムが、IDE305でユーザによって入力されたパラメータを使用して、サーバ104a上の対応するリモートプロセスを呼び出し実行することを可能にするために使用される。パラメータは、グラフィカルユーザインターフェースを介してユーザに提示される事前定義されたフィールドを介して入力され得る。事前定義されたフィールドは、リモートコールスニペットを作成するのに必要な情報を制限および簡素化する。次に、パラメータのデータは、リモートサーバ104aに送信され、リモートプロセスを含むプロセスプール230の事前生成されたコードに挿入される。
【0057】
以下に
図6でさらに記述するように、仮想化されたSDKは、また、生成されたスニペットに対するサポートを提供する。スニペットは、ユーザデバイス102の動作および/またはプログラミングの環境(たとえばIDE305)にネイティブの選択されたプログラミング言語で生成される。
【0058】
ステップ535で、リモートサーバ104aは、VCP245および実行エンジン125を通じて、リモートプロセスに関連するCSC210およびVCP245に、相関されたリモートプロセスを展開する。
【0059】
ステップ540で、実行されたプロセスのリアルタイムの結果が、また、IDE305のリモートサーバ104aから表示される。したがって、フェイスブック投稿に成功すると、IDE305に通知するために応答を処理するリモートサーバ104aにメッセージを返すことができる。一部の実施形態では、結果は、プロセスコールに関連するCSC210から直接的に返される。たとえば、フェイスブック投稿からの結果は、IDE305に直接的に返され得る。次に、方法500はステップ545で終了する。
【0060】
図6は、本発明の1つまたは複数の実施形態による、様々なプログラミング言語に対する仮想化されたプロセスコールコードジェネレータの方法600を示す流れ図である。方法600は、仮想化されたSDKを適用し、CSC210でリモートプロセスを呼び出すために、ユーザデバイス102aおよび/またはIDE305に対して調整されたスニペットを生成することによって、様々なプログラミング言語間の変換を可能にする。一部の実施形態では、方法600は、仮想化されたSDKを用いてリモートプロセスを呼び出す際の方法500の続きである。
【0061】
方法600はステップ605で始まり、ステップ610に継続し、ユーザデバイス102aに対してリモートプロセスの集合がポピュレートされる。一部の実施形態では、ユーザデバイス102aは、ユーザアカウントがリモートプロセスにアクセスするために、リモートプラットフォーム200にログインする必要がある。ログインプロセスについて、
図5に関してさらに詳細に上に記述している。
【0062】
次に、ステップ615で、少なくとも1つのリモートプロセスが選択される。一部の実施形態では、リモートプロセスは、ユーザデバイス102aのグラフィカルユーザインターフェース(GUI)を通じて選択される。他の実施形態では、リモートプロセスは、ユーザデバイス102aにダウンロードされた仮想化されたSDKの機能を通じてリモートプロセスを呼び出すことによって指定される。
【0063】
ステップ620で、パラメータは、ユーザデバイス102aの選択されたプロセスに対するユーザからの入力である。パラメータは、サービス、タイミング情報、ペイロードデータ、ファイル拡張、およびリモートプロセスを正しく実行するのに必要な他の情報のための認証鍵を含む。パラメータは、リモートプロセスに関連して生成されたスニペットに挿入される。一部の実施形態では、パラメータは、ローカルIDE305を介してユーザによって入力され、他の実施形態では、一部のパラメータエントリは、リモートサーバ104aの格納された資格情報またはデータをリモートで使用して完了され得る。IDE305は、リモートサーバ104a上に格納されたプラットフォーム200と通信する。
【0064】
ステップ625で、ユーザデバイス102aのプログラム(たとえばIDE305)は、関連するプロセスパラメータを用いる選択されたリモートプロセスのリモートプラットフォーム200への展開をローカルにトリガーする。展開は、リモートプラットフォーム200で適切なVCP245およびプロセスプール230を呼び出すために、スニペットおよび仮想化されたSDKを利用する。
【0065】
ステップ626で、パラメータは、スニペットから解析される。解析は、仮想化されたSDKを通じてリンクされるように、選択されたプロセスに対してVCPにパラメータを向けるステップを含む。
【0066】
ステップ628で、解析されたパラメータは、事前生成されたコードに挿入される。一部の実施形態では、CSC210のネイティブ言語、およびプロセスプール230において事前生成されたコード。
【0067】
ステップ630で、プロセスは、CSC210など実際のリモート環境で実行される。たとえば、アマゾンサーバを使用する購入、またはPOP3電子メールの送信など。しかしながら、代替実施形態は、リモートサーバにプロセスおよびプログラムを完全に展開する前に、プログラムをテストまたは「サンドボックス」するためにテスト環境で選択されたプロセスを実行することができる。サンドボックスは、プログラム内における複数のリモートプロセスおよびサービスの追加においてますます重要になってきている。
【0068】
次に、ステップ635で、結果は、ユーザIDEにリアルタイムに表示される。一部の実施形態では、CSC210で展開されたプロセスコールに結果は、また、VCP245へのリモートプラットフォーム200を使用して監視および維持を提供する。ネイティブコードは、スニペットからのパラメータデータを使用して、リモートサーバ(たとえばCSC210)で実行されるように、アプリケーションのスニペットが処理される。そのような実施形態では、次に、プラットフォーム200は、使用およびエラーデータなどの統計をIDE305に返し、VCP245においてAPIおよびSDKを更新するために、アプリケーションを監視およびログオンする。次に、更新は、次のランタイムエラーを減らすために、プロセスプール235の対応する事前生成されたコードに統合される。
【0069】
ステップ640で、選択されたリモートプロセスコールをトリガーするためのコードスニペットは、対応するVCP245によって第1のデフォルトプログラミング言語で生成される。一部の実施形態では、コードスニペットは、CSC210で選択されたリモートプロセスの展開と同時で生成され得る。さらに他の実施形態では、コードスニペットは、プロセスの展開または実行なしで生成され得る。
【0070】
一部の実施形態では、コードスニペットは、また、ネットワーク110のリモートサービスを呼び出し/アクセスすることができる。たとえば、プログラムは、関連するユーザアカウントの事前認証された鍵/資格情報を使用して、同時に、ユーザが指定したメッセージをツイートし、FOURSQUAREでチェックインするために使用されるECLIPSEで記述され得る。そのようなサービスにアクセスするために、スニペットジェネレータは、リモートのツイッターおよびFOURSQUAREのサービスを呼び出し、前述のプロセスを実行するために、ECLIPSEに挿入されるコードスニペットを生成する。以下にさらに記述するように、一部の実施形態では、IDEからのパラメータは、次に、スニペットジェネレータ124を介してスニペット形式を構築するために抽出され得る。
【0071】
一部の実施形態では、コードスニペットは、また、実行タイミング情報を含むことができる。コードスニペットは、インストールされた仮想化されたSDKを使用して、リモートプラットフォーム200にプロセスコールを通信するユーザデバイス102aで、特定のプログラミング言語に対して事前定義されたテンプレートから形成される。
【0072】
ステップ645で、方法600は、ユーザがIDE305で異なるプログラミング言語を選択したかどうかを決定する。一部の実施形態では、方法600は、ユーザによってだけでなく、プラットフォーム200による格納されたユーザプロフィールの個別設定または履歴を介して入力された、既存のプログラミングコードを比較することによって、望まれるプログラミング言語を自動的に検出することができる。他の言語が選択されていない、またはデフォルト言語が正しい言語であると方法600が決定した場合、ステップ655で、スニペットはユーザデバイス102aに送った。しかしながら、別の言語が選択されているか、または検出されたと方法600が決定した場合、ステップ650で、スニペットは、対応する選択された言語に対してテンプレートを使用して、再生成または形式変更される。一部の実施形態では、テンプレートは、変数、リモートAPIへのアクセス鍵、トークン、資格情報など、ユーザデバイス102aまたはサーバ104a上で以前に格納されたパラメータで、ユーザに入力されたパラメータを補足する。
【0073】
ステップ650から、方法は、また、ステップ655に継続し、ユーザデバイス102aおよび/またはIDE305に新しいスニペットを送る。次に、ステップ660で、スニペットは、ローカルコードベースに挿入されるため、ユーザによって記述されたローカルプログラムは、マシンで(たとえば、ユーザデバイス102aのみで)ローカルに実行されることになっているコードに加えて、ネットワーク110を通じてサーバ104a上でリモートプロセスを呼び出すことができる。一部の実施形態では、ローカルコードベースは、また、他のネットワーク化されたマシンにアクセスすることができる。他の実施形態では、ローカルコードベースは、開発者のワークステーションにあるか、または(直接的に、またはGITHUBなどのコード管理システムを通じて)サーバ上ですでに展開されている可能性がある。
【0074】
ステップ665で、ローカルコードおよびリモートプロセスコールは、ユーザIDE内で、またはユーザによって選択されたネイティブ開発環境で実行され得る。次に、方法600は、ステップ670で終了する。
【0075】
図7は、本発明の1つまたは複数の実施形態による例示的なコンピューティングサーバ内のモジュールを示す簡略化されたブロック図である。コンピュータシステム700は、前述の実施形態のサーバまたは電子デバイスを含む本質的に同様の構造を含む。
【0076】
本明細書に記述した、スニペット生成およびリモートプロセスコールのための方法およびシステムの様々な実施形態は、様々な他のデバイスと対話することができる、1つまたは複数のコンピュータシステムで実行され得る。そのようなコンピュータシステムの1つは、
図7に示されているコンピュータシステム700であり、これは様々な実施形態において、
図1〜
図6に示された要素または機能のいずれかを実装することができる。様々な実施形態において、コンピュータシステム700は、上に記述した方法を実装するように構成され得る。コンピュータシステム700は、上記の実施形態の他のシステム、デバイス、要素、機能、または方法を実装するために使用され得る。図示した実施形態では、コンピュータシステム700は、様々な実施形態において、プロセッサで実行可能な実行可能プログラム命令722として(たとえば、プロセッサ710によって実行可能なプログラム命令)、方法400、500、および600を実装するように構成され得る。
【0077】
図示する実施形態では、コンピュータシステム700は、入力/出力(I/O)インターフェース730を介してシステムメモリ720に結合された1つまたは複数のプロセッサ710a〜710nを含む。コンピュータシステム700は、I/Oインターフェース730に結合されたネットワークインターフェース740、およびカーソル制御デバイス760、キーボード770、およびディスプレイ780など1つまたは複数の入力/出力デバイス750をさらに含む。一部の実施形態では、キーボード770は、タッチスクリーン入力デバイスの場合がある。
【0078】
様々な実施形態において、構成要素のいずれも、上記のようにリモートプロセスコールをルーティングおよび実行するために、システムによって利用され得る。様々な実施形態において、ユーザインターフェースは、ディスプレイ780に生成および表示され得る。場合によっては、実施形態は、コンピュータシステム700の単一のインスタンスを使用して実装され得る一方、他の実施形態では、複数のそのようなシステム、またはコンピュータシステム700を構築する複数のノードは、様々な実施形態の異なる部分またはインスタンスをホストするように構成され得ることが考えられる。たとえば、一実施形態では、一部の要素は、他の要素を実装するノードとは異なるコンピュータシステム700の1つまたは複数のノードを介して実装され得る。別の例では、複数のノードは、分散的な方法でコンピュータシステム700を実装することができる。
【0079】
異なる実施形態で、コンピュータシステム700は、限定しないが、パーソナルコンピュータシステム、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、アプリケーションサーバ、ストレージデバイス、スイッチ、モデム、ルータなどのなど周辺機器、または一般的に任意のタイプのコンピューティングデバイスまたは電子デバイスを含む様々なタイプのデバイスのいずれかの場合がある。
【0080】
様々な実施形態において、コンピュータシステム700は、1つのプロセッサ710を含むユニプロセッサシステム、または複数のプロセッサ710を含むマルチプロセッサシステムの場合がある(たとえば、2、4、8、または別の適切な数)。1つのプロセッサ710を含むユニプロセッサシステムは、プログラムの同時データを処理および実行するために、複数のプロセッサに見えるようにシングルプロセッサの機能を分割することができる。プロセッサ710は、命令を実行することができる任意の適切なプロセッサの場合がある。たとえば、様々な実施形態において、プロセッサ610は、様々な命令セットアーキテクチャ(ISA)のいずれかを実装する汎用プロセッサまたは組み込まれたプロセッサの場合がある。マルチプロセッサシステムでは、プロセッサ710の各々は、一般に、必ずではないが、同じISAを実装する。
【0081】
システムメモリ720は、プロセッサ710によってアクセス可能なプログラム命令722および/またはデータ732を格納するように構成され得る。様々な実施形態において、システムメモリ720は、静的ランダムアクセスメモリ(SRAM)、シンクロナス動的RAM(SDRAM:synchronous dynamic RAM)、不揮発性/フラッシュ型メモリ、または他のタイプのメモリなど適切なメモリ技術を使用して実装され得る。図示する実施形態では、上に記述した実施形態の要素のいずれかを実装するプログラム命令およびデータは、システムメモリ720内に格納され得る。他の実施形態では、プログラム命令および/またはデータは、異なるタイプのコンピュータでアクセス可能な媒体、またはシステムメモリ720もしくはコンピュータシステム700から離れた同様の媒体で受信、送信、または格納され得る。
【0082】
一実施形態では、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に直接的に組み込まれ得る。
【0083】
ネットワークインターフェース740は、データが、コンピュータシステム700と1つまたは複数の外部システムなどネットワーク(たとえばネットワーク790)に接続された他のデバイスとの間、またはコンピュータシステム700のノードの間で交換されることを可能にするように構成され得る。様々な実施形態において、ネットワーク790は、限定しないが、ローカルエリアネットワーク(LAN)(たとえばイーサネット(登録商標)または企業ネットワーク)、ワイドエリアネットワーク(WAN)(たとえばインターネット)、ワイヤレスデータネットワーク、セルラーネットワーク、Wi-Fi、他の何らかの電子データネットワーク、またはそれらの組合せを含む1つまたは複数のネットワークを含むことができる。様々な実施形態において、ネットワークインターフェース740は、たとえば、適切なタイプのイーサネット(登録商標)ネットワークなど、有線もしくは無線の一般的なデータネットワークを介して、アナログ音声ネットワークまたはデジタルファイバ通信ネットワークなど、電気通信/電話通信ネットワークを介して、ファイバチャネルSANなど、ストレージエリアネットワークを介して、または他の適切なタイプのネットワークおよび/またはプロトコルを介して、通信をサポートすることができる。
【0084】
入力/出力デバイス750は、一部の実施形態では、1つまたは複数のディスプレイ端末、キーボード、キーパッド、タッチパッド、タッチスクリーン、スキャンデバイス、音声または光学による認識装置、または1つまたは複数のコンピュータシステム700によってデータを入力もしくはアクセスするのに適した他のデバイスを含む。複数の入力/出力デバイス750は、コンピュータシステム700に存在する場合があるか、またはコンピュータシステム700の様々なノードに分散され得る。一部の実施形態では、同様の入力/出力デバイスは、コンピュータシステム700から離れている場合があり、ネットワークインターフェース740を通じてなど有線または無線の接続を通じてコンピュータシステム700の1つまたは複数のノードと対話することができる。
【0085】
一部の実施形態では、図示するコンピュータシステムは、
図3〜
図6の流れ図によって示された方法など、上に記述された方法のいずれかを実装することができる。他の実施形態では、異なる要素およびデータが含まれ得る。
【0086】
コンピュータシステム700は、単に説明のためのものであり、実施形態の範囲を制限することを意図するものではないことを当業者は理解されるであろう。特に、コンピュータシステムおよびデバイスは、コンピュータ、ネットワークデバイス、インターネット家電、スマートフォン、タブレット、PDA、ワイヤレス電話、ポケットベルなどを含む、様々な実施形態の示された機能を実行することができるハードウェアまたはソフトウェアの任意の組合せを含むことができる。コンピュータシステム700は、図示されていない他のデバイスに接続され得るか、または代わりにスタンドアロンのシステムとして動作することができる。さらに、図示する構成要素によって提供される機能は、一部の実施形態では、より少数の構成要素で組み合わせられ得るか、または追加の構成要素に分散され得る。同様に、一部の実施形態では、図示する構成要素の一部の機能は、提供されない場合があるか、かつ/または他の追加的な機能が使用可能な場合がある。
【0087】
当業者は、また、様々なアイテムは、使用される間にメモリまたはストレージに格納されるものとして示されているが、それらのアイテムまたはそれらの一部は、メモリ管理およびデータ完全性の目的のために、メモリと他のストレージデバイスとの間で転送され得ることを理解されるであろう。あるいは、他の実施形態では、ソフトウェア構成要素の一部またはすべては、別のデバイスのメモリで実行され、コンピュータ間通信を介して図示したコンピュータシステムと通信することができる。システム構成要素またはデータ構造の一部またはすべては、(たとえば命令または構造化データとして)コンピュータでアクセス可能な媒体または適切なドライブによって読み込まれる携帯用の物品に格納され得て、その様々な実例については上に記述されている。一部の実施形態では、コンピュータシステム700から離れているコンピュータでアクセス可能な媒体に格納された命令は、送信媒体またはネットワークおよび/もしくはワイヤレスリンクなどの通信媒体を介して伝達される、電気信号、電磁気信号、もしくはデジタル信号など信号を介して、コンピュータシステム700に送信され得る。様々な実施形態は、コンピュータでアクセス可能な媒体で、または通信媒体を介して、前述の記述により実装された命令および/またはデータの受信、送信、または格納をさらに含むことができる。一般的に、コンピュータでアクセス可能な媒体は、たとえばディスクまたはDVD/CD-ROMなど磁気的または光学的な媒体、RAM(たとえばSDRAM、DDR、RDRAM、SRAMなど)、ROMなど揮発性または不揮発性の媒体など記憶媒体またはメモリ媒体を含むことができる。
【0088】
JAVA(登録商標)プログラムに挿入するために生成された例示的なスニペットは、TEMBOO仮想化されたSDKを呼び出す、以下を含む
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{
【0089】
/**
*@param args
*@throws TembooException
*/
public static void main(String[] args) throws TembooException {
【0090】
//Tembooセッションをインスタンス化する
TembooSession session = new TembooSession("demo", "myFirstApp", "6d975bf6-e761-47c7-8");
【0091】
//以前にインスタンス化されたTembooSessionオブジェクトを使用してChoreoをインスタンス化する
QueryArticles queryArticlesChoreo = new QueryArticles(session);
【0092】
//choreoに対してInputSetオブジェクトを取得する
QueryArticlesInputSet queryArticlesInputs = queryArticlesChoreo.newInputSet();
【0093】
//実行に使用するために資格情報を設定する
queryArticlesInputs.setCredential("NYTimesCred");
【0094】
//入力を設定する
queryArticlesInputs.set_Query("obama");
【0095】
//Choreoを実行する
QueryArticlesResultSetqueryArticlesResults = queryArticlesChoreo.execute(queryArticlesInputs);
【0096】
//ECOを使用して結果をプリントする
for (int i = 0; i < queryArticlesResults.getArticles().length; i++) {System.out.println(queryArticlesResults.getArticles()[i].getTitle() + " :: " + queryArticlesResults.getArticles()[i].getByLine());
}
}
}
【0097】
上記の例では、スニペットは、任意のJava(登録商標)プログラムに挿入され得るコードを5行含む。「Tembooセッションをインスタンス化する」ためのコードから始まり、「Choreoを実行する」ためのコードで終わる。コードのこれらの行は、テキストとしてローカルIDEで編集され得て、ユーザが、彼または彼女が呼び出したいchoreoの名前を知っているように将来的に編集される。「package TembooDemoECOs;」行は、特定のクラス:QueryArticlesのインポートを行うことによって仮想化されたSDKを呼び出す。上記の実例は、QueryArticlesに対するコードを含むこの例示的なSDKのインストールで可能である。
【0098】
public class QueryArticles extends Choreography {
【0099】
/** QueryArticles Choreoの新しいインスタンスを作成する。Temboo資格情報の有効な組を含むTembooSessionオブジェクトが供給されなければならない。
*/
public QueryArticles(TembooSession session) {
super(session,
TembooPath.pathFromStringNoException("/Library/NYTimes/ArticleSearch/QueryArticles"));
}
【0100】
/** このChoreoの実行のための入力を規定するために使用されるInputSetオブジェクトを取得する。
@return QueryArticlesInputSet
*/
public QueryArticlesInputSet newInputSet() {
return new QueryArticlesInputSet();
}
【0101】
/**
*パラメータとして指定された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);
}
【0102】
/** QueryArticles Choreoへの入力を指定するのに適切な方法を備えたInputSet。InputSetオブジェクトは、このchoreoを実行するときに入力パラメータを指定するために使用される。
*/
public static class QueryArticlesInputSet extends InputSet {
【0103】
/** このChoreoに対してAPIKey入力の値を設定する。
@param String - (required, string) NYTimesによって提供されるAPI鍵。
*/
public void set_APIKey(String value) {
this.setInput("APIKey", value);
}
【0104】
/** このChoreoに対するBeginDate入力の値を設定する。
@param String - (optional, date) 返すべき発行日の範囲の始点(包含的)を設定する。EndDateとともに使用されなければならない。日付はYYYYMMDDのような形式であるべきである。
*/
public void set_BeginDate(String value) {
this.setInput("BeginDate", value);
}
【0105】
/** このChoreoに対するEndDate入力の値を設定する。
@param String - (optional, date) 返すべき発行日の範囲の終点(包含的)を設定する。BeginDateとともに使用されなければならない。日付はYYYYMMDDのような形式であるべきである。
*/
public void set_EndDate(String value) {
this.setInput("EndDate", value);
}
【0106】
/** このChoreoに対するファセット(Facets)入力の値を設定する。
@param String - (optional, string) 5ファセットまでのカンマ区切りのリスト。これは、応答に含めるべきファセット値の組を示している。この入力に対する承認された値の詳細については、Choreoの文書を参照すること。
*/
public void set_Facets(String value) {
this.setInput("Facets", value);
}
【0107】
/** このChoreoに対するフィールド(Fields)の入力の値を設定する。
@param String - (optional, string) 返すべきフィールドのカンマ区切りのリスト。これらのフィールドがデフォルトで返される:body、byline、date、title、およびurl。
*/
public void set_Fields(String value) {
this.setInput("Fields", value);
}
【0108】
/** このChoreoに対するオフセット(Offset)入力の値を設定する。
@param Integer - (optional, integer) これは10の結果の組が返されることに対応する。結果に目を通すために使用される。レコード0〜9を返すために0に設定する、レコード10〜19を返すために1に設定するなど。
*/
public void set_Offset(Integer value) {
this.setInput("Offset", value);
}
【0109】
/** StringとしてこのChoreoに対するオフセット入力の値を設定する。
@param String - (optional, integer) これは10の結果の組が返されることに対応する。結果に目を通すために使用される。レコード0〜9を返すために0に設定する、レコード10〜19を返すために1に設定するなど。
*/
public void set_Offset(String value) {
this.setInput("Offset", value);
}
【0110】
/** このChoreoに対するクエリ(Query)入力の値を設定する。
@param String - (required, string) (オプションとして特定のフィールドに適用された)キーワードおよび/またはファセットを検索する。構文の実例については、Choreoの文書を参照すること。
*/
public void set_Query(String value) {
this.setInput("Query", value);
}
【0111】
/** このChoreoに対するランク(Rank)入力の値を設定する。
@param String - (optional, string) 結果の順序を設定する。承認された値は、次のとおりである:newest(デフォルト)、oldest、またはclosest。
*/
public void set_Rank(String value) {
this.setInput("Rank", value);
}
}
【0112】
/** QueryArticles Choreoによって返された値に調整された方法を用いるResultSet。
ResultSetオブジェクトは、Choreo実行の結果を取得するために使用される。
*/
public static class QueryArticlesResultSet extends ResultSet {
public QueryArticlesResultSet(JSONObject doc) throws TembooException {
super(doc);
}
【0113】
/** このChoreo実行から「Response」出力に対する値を取得する。
@return String - (json) NY Times APIからの応答。
*/
public String get_Response() {
return this.getResult("Response");
}
【0114】
/** オフセットの値は、10の結果の組に対応する(すなわち、結果0〜9に対してoffset=0、結果10〜19に対してoffset=1など)
*/
public String getOffset() {
return (String)
((JSONObject)getJSONFromString(this.getResult("Response"))).opt("offset");
}
【0115】
/** 検索基準に一致するアーティクル(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;
}
【0116】
/** クエリに提供される検索トークンを含む。
*/
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;
}
【0117】
/** この検索に対するアーティクルの総数
*/
public Number getTotal() {
return (Number)
((JSONObject)getJSONFromString(this.getResult("Response"))).opt("total");
}
}
}
【0118】
上記の例示的な仮想化されたSDKをインストールすることによって、スニペットは、ここでリモートプロセスへのコールを実行することができる。コードスニペットは、関連するVCP245を通じてリモートサーバ104a上の実際のプロセスを呼び出すために仮想化されたSDKコードにリンクする。一部の実施形態では、SDKは、入力パラメータが適切な形式にあることを保証し、次いで、対応するリモートプロセスを呼び出すことを含む。上記の実例では、「choreo」は、ユーザデバイス102aおよび/またはローカルIDE305でのリモートプロセスのグラフィック表示である。
【0119】
本明細書に記述した方法は、異なる実施形態では、ソフトウェア、ハードウェア、またはそれらの組合せにおいて実装され得る。さらに、方法の順序は変更され得て、また、様々な要素を追加、並べ替え、組み合わせ、省略、あるいは修正され得る。本明細書に記述したすべての実例は、限定を目的とせずに提示されている。本開示の利益を受ける当業者には明白なように、様々な修正および変更が行われ得る。特定の実施形態に関連して、実施形態による実現について記述してきた。これらの実施形態は、説明を目的とするものであり、限定を目的としていない。多数の変形形態、修正、追加、および改善が可能である。したがって、単一のインスタンスとして本明細書に記述された構成要素について、複数のインスタンスを提供され得る。様々な構成要素、動作、およびデータストアの間の境界はある程度は自由に決めてよく、また、特定の動作は、特定の説明的な構成に関連して示されている。機能の他の割り当てが想像され、後述する特許請求の範囲の範囲以内に該当する場合がある。最後に、例示的な構成における個別の構成要素として提示されている構造および機能は、組み合わせられた構造または構成要素として実装され得る。これらおよび他の変形形態、修正、追加、および改善は、後述する特許請求の範囲に規定される実施形態の範囲内に該当する場合がある。
【0120】
前述の内容は、本発明の実施形態に関するものであるが、その基本的な範囲から逸脱することなく、本発明の他の実施形態およびさらなる実施形態が考案され得て、その範囲は、後述する特許請求の範囲によって決定される。