(57)【要約】リモートアプリケーションへのアクセス技術を説明する。いくつかの実施形態はクライアント機器のウェブブラウザを介してホストシステムで実行されるアプリケーションへのアクセスを提供する。ウェブブラウザを操作するユーザは統一資源識別子を介してアプリケーションへのアクセスを要求することができる。ホストシステム上で実行されるサービスが要求を受信し、アプリケーションへのアクセスを促進する。アクセスの促進は、アプリケーションによって生成されホストシステムに格納されているウィンドウまたはグラフィカルユーザインターフェースに対応するウェブブラウザの画像データへの伝送を含むことができる。ウェブブラウザ内で実行されるクライアントロジックが画像データを受信し、クライアント機器にアプリケーションウィンドウのローカルコピーを表示する。クライアントロジックはローカルウィンドウに対するユーザ入力イベントもリモートプレゼンテーションサービスに転送し、そのイベントをホストシステムのウィンドウ／アプリケーションに転送する。
2015529878.tif 000002
【特許請求の範囲】
【請求項１】
ディスプレイ装置を有するクライアント機器上で実行されるリモートウェブクライアントを介してホストコンピューティングシステム上のアプリケーションへのアクセスを提供するための、ホストコンピューティングシステムにおける方法であって、
前記ホストコンピューティングシステム上で実行されるアプリケーションによって生成される出力グラフィカルユーザインターフェースを格納するためのディスプレイバッファを含む前記ホストコンピューティングシステム上で実行される前記アプリケーションを特定する統一資源識別子を提供し、
前記リモートウェブクライアントから受信するとともに前記統一資源識別子に基づいた要求であって、前記アプリケーションに対するアクセスの要求を受信し、
前記ホストコンピューティングシステムの前記ディスプレイバッファからの前記アプリケーションの前記グラフィカルユーザインターフェースを前記リモートウェブクライアントに表示させ、表示されたグラフィカルユーザインターフェースに対してユーザによってなされる入力の指示を前記リモートウェブクライアントから受信することによって、前記ホストコンピューティングシステムの前記アプリケーションとのユーザ対話を促進すること
を備える方法。
【請求項２】
前記アプリケーションへのアクセス要求を受信することは、１つ以上の引数とともに前記アプリケーションを識別するＨＴＴＰ要求を受信することを含む請求項１に記載の方法。
【請求項３】
前記１つ以上の引数はファイルを示す指示を含み、その示されたファイルで前記アプリケーションの実行を開始することをさらに含む請求項２に記載の方法。
【請求項４】
前記１つ以上の引数は好みのウィンドウ状態を示す指示を含み、前記好みのウィンドウ状態に基づいて前記グラフィカルユーザインターフェースを表示させることをさらに含み、前記好みのウィンドウ状態は、ウィンドウ最大化、ウィンドウ最小化、およびウィンドウサイズのいずれかまたは組合せである請求項２に記載の方法。
【請求項５】
前記１つ以上の引数は前記ホストコンピューティングシステムのユーザ環境を示す指示を含み、前記ユーザ環境に基づいて前記アプリケーションの実行を開始することをさらに含む請求項２に記載の方法。
【請求項６】
前記ホストコンピューティングシステムは仮想マシンであり、前記ユーザ環境は仮想デスクトップであり、前記リモートウェブクライアントに前記グラフィカルユーザインターフェースを表示させることは、前記リモートウェブクライアントに、前記仮想デスクトップの全部より小さい前記仮想デスクトップの一部を表示させることを含む請求項５に記載の方法。
【請求項７】
前記ホストコンピューティングシステムは物理的マシンであり、前記ユーザ環境に基づいて前記アプリケーションの実行を開始することは、前記物理的マシンにインストールされたアプリケーションであって、前記ユーザ環境によって特定されるユーザアカウントを介してアクセス可能であるアプリケーションを実行することを含む請求項５に記載の方法。
【請求項８】
前記アプリケーションとのユーザ対話を促進することは、前記アプリケーションへのアクセス要求の受信に応答して、前記ウェブクライアントによって実行されるときに、前記ウェブクライアントを介して前記グラフィカルユーザインターフェースを表示するとともに、前記ホストコンピューティングシステムにユーザによってなされる入力の指示を伝送するように構成されるコードモジュールを伝送することを含む請求項１に記載の方法。
【請求項９】
前記アプリケーションとのユーザ対話を促進することは、ＨＴＴＰ接続を介して前記リモートウェブクライアントと前記ホストコンピューティングシステム上で実行されるプレゼンテーションサービスとのユーザ対話を促進することを含む請求項１に記載の方法。
【請求項１０】
前記リモートウェブクライアントに前記グラフィカルユーザインターフェースを表示させることは、
前記リモートウェブクライアントに、前記グラフィカルユーザインターフェースの第１ウィンドウを表す画像データを伝送し、
前記リモートウェブクライアントに、前記第１ウィンドウのコピーとして前記画像データを含む第２ウィンドウを表示させることを含む請求項１に記載の方法。
【請求項１１】
前記リモートウェブクライアントに前記グラフィカルユーザインターフェースを表示させることは、前記リモートウェブクライアントに、ＨＴＭＬ５ｃａｎｖａｓ要素を介して前記グラフィカルユーザインターフェースを表す画像データを表示させることを含む請求項１に記載の方法。
【請求項１２】
前記アプリケーションとのユーザ対話を促進することは、
前記グラフィカルユーザインターフェースの修正部分を含む１つ以上の画像ブロックを判断し、
前記１つ以上の画像ブロックを前記リモートウェブクライアントに伝送することを含む請求項１に記載の方法。
【請求項１３】
前記リモートウェブクライアントから入力の指示を受信することは、前記リモートウェブクライアントからマウスイベントとその対応する位置を示す指示を受信することを含む請求項１に記載の方法。
【請求項１４】
前記マウスイベントの位置を前記ホストコンピューティングシステムの座標系に変換することをさらに含む、請求項１３に記載の方法。
【請求項１５】
前記ホストコンピューティングシステム上で実行される複数のアプリケーションに関する情報を追跡することをさらに含み、前記追跡する情報はアプリケーション識別子、アプリケーションのウィンドウの位置、アプリケーションのウィンドウサイズ、およびアプリケーションのイベントのいずれかまたは組合せを含む、請求項１に記載の方法。
【請求項１６】
ウェブクライアントを介してリモートアプリケーションへのアクセスを提供するシステムであって、
プロセッサと、メモリと、ディスプレイバッファと、アプリケーションと、前記ディスプレイバッファに格納される第１ウィンドウと、前記メモリに格納されるリモートプレゼンテーションサービスモジュールとを含むホストコンピューティングシステムを備え、
前記プロセッサによって実行されたときに、前記リモートプレゼンテーションサービスモジュールが、
ディスプレイ装置を有するクライアントコンピューティング機器上で実行されるリモートウェブクライアントから受信するとともに前記アプリケーションを識別する統一資源識別子に基づいた要求であって、前記アプリケーションに対するアクセスの要求を受信し、
前記リモートウェブクライアントに、前記第１ウィンドウに基づく第２ウィンドウを前記クライアント機器の前記ディスプレイ装置に表示させるとともに、前記リモートウェブクライアントから、表示された第２ウィンドウに対してユーザによってなされる入力の指示を受信することによって、前記アプリケーションとのユーザ対話を促進する
ように構成されているシステム。
【請求項１７】
前記リモートプレゼンテーションサービスモジュールは、
クライアントロジックを前記ウェブクライアントに伝送するようにさらに構成されており、前記クライアントロジックは、前記クライアントコンピューティング機器で実行したときに、
前記リモートプレゼンテーションサービスモジュールから、前記第１ウィンドウを表す画像データを受信し、
前記画像データを前記クライアントコンピューティング機器の前記ディスプレイ装置に提示し、
前記リモートプレゼンテーションサービスモジュールに、ユーザによってなされる入力の指示を伝送する
ように構成されている請求項１６に記載のシステム。
【請求項１８】
前記クライアントコンピューティング機器は、スマートフォン、タブレットコンピュータ、ラップトップコンピュータおよびデスクトップコンピュータのうちの１つである請求項１７に記載のシステム。
【請求項１９】
前記リモートプレゼンテーションサービスモジュールは、前記アプリケーションへのアクセス要求に応答して、前記クライアントコンピューティング機器に、ＨＴＴＰトランザクションの一部として前記クライアントロジックを伝送するようにさらに構成されている請求項１７に記載のシステム。
【請求項２０】
前記ホストコンピューティングシステムは、それぞれが１つ以上のアプリケーションをホストし、それぞれが前記１つ以上のアプリケーションへのリモートアクセスを個別のウェブクライアントに提供する複数の仮想マシンを含む請求項１６に記載のシステム。
【請求項２１】
前記統一資源識別子は、前記アプリケーションを識別する第１部分と、前記アプリケーションを介して開くファイルを識別する第２部分と、好みのウィンドウサイズを指定する第３部分とを含む請求項１６に記載のシステム。
【請求項２２】
前記リモートプレゼンテーションサービスモジュールは、前記ウェブクライアントから受信するマウス入力イベントの位置を前記コンピューティングシステムの座標系に変換するようにさらに構成されている請求項１６に記載のシステム。
【請求項２３】
前記コンピューティングシステムは前記クライアントコンピューティング機器とは異なるオペレーティングシステムを実行しており、前記アプリケーションは前記クライアントコンピューティング機器のオペレーティングシステムでネイティブにランするように構成されていない請求項１６に記載のシステム。
【請求項２４】
前記リモートウェブクライアントはウェブブラウザアプリケーションである請求項１６に記載のシステム。
【請求項２５】
前記第２ウィンドウは前記第１ウィンドウの同一コピーではなく、前記リモートプレゼンテーションサービスモジュールは前記第１ウィンドウから画像データの圧縮表現を前記ウェブクライアントに伝送するように構成されている請求項１６に記載のシステム。
【請求項２６】
コンテンツを含む非一時的なコンピュータ読取可能媒体であって、前記コンテンツは、実行された時に、ホストコンピューティングシステムに、ディスプレイ装置を有するクライアント機器上で実行されるリモートウェブクライアントを介して前記ホストコンピューティングシステム上のアプリケーションへのアクセスを提供する方法を行わせるように構成されており、
前記方法が、
前記ホストコンピューティングシステム上で実行されるアプリケーションへのアクセス要求を受信することであって、前記アプリケーションは前記ホストコンピューティングシステムのローカルディスプレイ装置に表示するための第１ウィンドウを有し、前記要求は前記リモートウェブクライアントから受信されて、前記ホストコンピューティングシステムおよび前記アプリケーションを特定する統一資源識別子に基づいている、前記受信することと、
前記リモートウェブクライアントに、前記第１ウィンドウに基づく第２ウィンドウを前記クライアント機器の前記ディスプレイ装置に表示させ、前記リモートウェブクライアントから、前記表示される第２ウィンドウに対してユーザによってなされる入力の指示を受信することによって、前記ホストコンピューティングシステムの前記アプリケーションとのユーザ対話を促進することを含むものである、コンピュータ読取可能媒体。
【請求項２７】
前記コンテンツは、前記コンピューティングシステムのメモリに格納されて、前記コンピューティングシステムに前記方法を行わせるように構成されている命令を含む請求項２６に記載のコンピュータ読取可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、デスクトップアプリケーションへのリモートアクセスのための方法、技術およびシステムに関し、より具体的には、ウェブクライアントを介してリモートコンピューティングシステム上で実行されるアプリケーションへのアクセスを提供する方法、技術およびシステムに関する。
【背景技術】
【０００２】
アプリケーションへのリモートアクセスを提供する様々な手法がある。Ｘウィンドウ（X Windows）を用いるある手法では、第１コンピューティングシステム上でランしているアプリケーションが第２コンピューティングシステムにグラフィカルウィンドウを表示することができる。第２コンピューティングシステムのユーザによってなされるマウスのクリック、キー打ち、および他の入力イベントは第１コンピューティングシステムに転送される。第１コンピューティングシステム上で実行中のアプリケーションは、第２コンピューティングシステムのディスプレイをそのディスプレイとして使用する。つまり、第１コンピューティングシステムにそのウィンドウを表示しない。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
このＸウィンドウの手法は、第２コンピューティングシステムが比較的複雑でしばしば構成するのが難しいソフトウェアであるＸサーバを含むという要件を含めて、多数の欠点がある。さらに、プログラムの実行の開始は通常多段階の手動プロセスである。第２コンピューティングシステムのユーザはまず手動で第１コンピューティングシステムにログオンし（例えばＴＥＬＮＥＴまたはＳＳＨを介して）、第２コンピューティングシステムをディスプレイ装置として使用するように第１コンピューティングシステムを構成する。それから、ユーザは第１コンピューティングシステムがディスプレイとして第２コンピューティングシステムを使用できるように第２コンピューティングシステムを構成する。次に、ユーザは第１コンピューティングシステムに戻って、所望のアプリケーションを実行すると、このアプリケーションが第２コンピューティングシステムにそのウィンドウを提示する。
【０００４】
別の手法では、第１コンピューティングシステム上で実行するサーバであるＶＮＣ（仮想ネットワークコンピューティング）が、画像データを表示するために第１コンピューティングシステムのフレームバッファから第２（クライアント）コンピューティングシステムに伝送する。ＶＮＣは、専用クライアントアプリケーションを第２コンピューティングシステムにインストールするための要件を含めて多数の欠点がある。さらに、ＶＮＣは第１コンピューティングシステムの画面全体を表示することに限定されており、これは通常、オペレーティングシステムのユーザインターフェース全体（例えばデスクトップ）である。ＶＮＣは異なるアプリケーションウィンドウを区別し、または個別に提示しもしくは管理することができない。さらに、第１コンピューティングシステムにおいてアプリケーションを起動するには多段階の手動プロセスを必要とし、その多段階の手動プロセスは、第２コンピューティングシステムのユーザが第１コンピューティングシステムの名称または識別子を呼び出し、第１コンピューティングシステムのデスクトップを第２コンピューティングシステムに表示するために第１コンピューティングシステムへの接続（例えばセッション）を確立し、さらに表示された第１コンピューティングシステムのデスクトップを介してアプリケーションの実行を手動で開始するプロセスを含む。
【課題を解決するための手段】
【０００５】
ここに説明する実施形態は、デスクトップアプリケーションへのリモートアクセスのため、より具体的には、ウェブクライアント（例えばスタンドアローン型ウェブブラウザ、より大きなアプリケーションのウェブ対応コンポーネントなど）を介してリモートコンピューティングシステム上で実行されるアプリケーションへのアクセスを提供するための改良されたコンピュータベースおよびネットワークベースの方法、技術およびシステムを提供する。
【０００６】
例示的な実施形態は、説明される技術の少なくとも一部を行うリモートアプリケーションプレゼンテーションシステム（ＲＡＰＳ）を提供する。いくつかの実施形態では、ＲＡＰＳはサーバまたはホスト側コンポーネントおよびクライアント側コンポーネントを含み、ここではそれぞれリモートプレゼンテーションサービスおよびリモートプレゼンテーションクライアントという。
【０００７】
リモートプレゼンテーションサービス（ＲＰＳ）はホストコンピューティングシステム上で実行してホストコンピューティングシステム上のアプリケーションへのリモートアクセスを促進する。通常、ＲＰＳは、ホストコンピューティングシステム上のアプリケーションを識別する統一資源識別子（ＵＲＩ）を介してホストコンピューティングシステム上のアプリケーションへのアクセスを提供する。初めに、ＲＰＳはリモートウェブクライアントからアプリケーションにアクセスするためのＵＲＩに基づく要求を受信する。この要求は、例えば、アプリケーションの識別を含め、ＵＲＩからのデータを含むＨＴＴＰ要求とすることができる。次に、ＲＰＳはリモートウェブクライアントに、ホストコンピューティングシステムで実行されるアプリケーションのウィンドウからまたはホストコンピューティングシステムで実行されるアプリケーションのウィンドウを表す画像データを表示させる。例えば、ＲＰＳは画像データのコピーをウィンドウからリモートウェブクライアントに伝送し、そこで対応するディスプレイ装置に表示される。さらに、ＲＰＳはリモートウェブクライアントから、表示されたアプリケーションの画像データに対してユーザによってなされる入力の指示を受信し、さらにそれがホストコンピューティングシステム上で実行されるアプリケーションによって処理される。
【０００８】
様々な種類または形態のホストコンピューティングシステムを採用することができる。ある実施形態では、ホストコンピューティングシステムはユーザの自宅または職場のパーソナルコンピュータ（例えばデスクトップシステム）とすることができ、ユーザはそれにインストールされたアプリケーションにリモートでアクセスすることができる。別の実施形態では、ホストコンピューティングシステムは、複数の個別のクライアントによってアクセスするために１つ以上のアプリケーションをホストするように構成されているサーバシステムとすることができる。このような実施形態は、複数のユーザ間で、高価かつ需要が限られたソフトウェアアプリケーションまたはスーツ、あるいは高価かもしくは需要が限られたソフトウェアアプリケーションまたはスーツの共有を促進することができる（例えば法人環境において）。別の実施形態では、ホストシステムは仮想マシンモニタ、ハイパーバイザおよび他のメカニズム、あるいは仮想マシンモニタ、ハイパーバイザまたは他のメカニズムによって、例えば複数の他の仮想マシンとともに管理される仮想コンピューティングシステム（例えば仮想マシン）である。このような実施形態は、複数の個別の主体または組織へのオンデマンドのコンピューティング資源およびアプリケーションの割当および分配を促進することができる。
【０００９】
説明する技術は異種システムおよび機器間のリモートアクセスを促進することにも留意する。特に、実行可能なアプリケーションがクライアント機器でランしていない（例えばクライアント機器のオペレーティングシステム、マシンアーキテクチャおよび命令セット、あるいはオペレーティングシステム、マシンアーキテクチャまたは命令セットがホストシステムのものと異なる）ため、クライアント機器が十分な資源をもっていない（例えばクライアント機器はアプリケーションもしくはそのデータを格納するための十分なディスクスペースがない）など、ユーザは、クライアント機器でネイティブに（もしくはその他）実行されないアプリケーションと対話するためにクライアント機器を使用することができる。さらに、専用ソフトウェアをインストールすること、またはホストシステムにクライアント機器をディスプレイとして利用する権限を与えることなどにより、通常、クライアント機器を手動で構成する必要はない。
【図面の簡単な説明】
【００１０】
【図１Ａ】例示的な実施形態によるホストコンピューティングシステム上で実行中のアプリケーションへのリモートアクセスを示す例示的なブロック図である。
【図１Ｂ】例示的な実施形態によるホストコンピューティングシステム上で実行中のアプリケーションへのリモートアクセスを示す例示的なブロック図である。
【図１Ｃ】例示的な実施形態によるホストコンピューティングシステム上で実行中のアプリケーションへのリモートアクセスを示す例示的なブロック図である。
【図２Ａ】例示的な実施形態による画像データとユーザインターフェースイベントの伝送および処理を示す例示的なブロック図である。
【図２Ｂ】例示的な実施形態による画像データとユーザインターフェースイベントの伝送および処理を示す例示的なブロック図である。
【図３Ａ】例示的な実施形態により実施されるリモートアクセスプロセスの例示的なフロー図である。
【図３Ｂ】例示的な実施形態により実施されるリモートアクセスプロセスの例示的なフロー図である。
【図４】例示的な実施形態によるリモートアプリケーションプレゼンテーションシステムのコンポーネントを実装するための例示的なコンピューティングシステムの例示的なブロック図である。
【発明を実施するための形態】
【００１１】
システムの概要と動作の実施例
図１Ａ〜図１Ｃは、例示的な実施形態によるホストコンピューティングシステム上で実行中のアプリケーションへのリモートアクセスを示す例示的なブロック図である。特に、図１Ａ〜図１Ｃは、クライアント機器１２０上で実行中のウェブブラウザ１１０を介して、ホストコンピューティングシステム（ホストシステム）１２２上で実行中のアプリケーション１２３へのリモートアクセスを示す。ホストシステム１２２はリモートプレゼンテーションサービス（ＲＰＳ）１００を含む。ホストシステム１２２はデスクトップコンピュータ、サーバシステム、仮想化システムなどとすることができる。
【００１２】
クライアント機器１２０でウェブブラウザ１１０を操作するユーザは、統一資源識別子（Uniform Resource Identifier：ＵＲＩ）１０５を介してアプリケーション１２３へのアクセスを開始する。ＵＲＩ１０５は、ウェブブラウザ１１０のテキスト入力フィールドによるなど、手動で入力することができる。他の実施例では、ＵＲＩは、リンク、ボタン、ショートカット、ブックマーク、アイコンなどによるなど、何か他のユーザインターフェース要素または制御を介してアクセスすることができる。いくつかの実施形態では、ＵＲＩ１０５の一般的な形式は、ｈｔｔｐ：／／ｈｏｓｔ−ｓｙｓｔｅｍ−ｉｄ／ａｐｐｌｉｃａｔｉｏｎ−ｉｄ？ａｒｇｓであり、ここでｈｏｓｔ−ｓｙｓｔｅｍ−ｉｄはホストシステム１２２を特定し、ａｐｐｌｉｃａｔｉｏｎ−ｉｄはアプリケーション１２３を特定し、ａｒｇｓがアプリケーションおよびＲＰＳ１００、あるいはアプリケーションまたはＲＰＳ１００の引数またはパラメータを特定する。ＵＲＩ１０５に基づき、ウェブブラウザ１１０はアプリケーション１２３へのアクセス要求を形成して、ホストシステム１２２上のＲＰＳ１００に伝送する。要求はホストシステム１２２の識別子、アプリケーション１２３、および１つ以上の引数、パラメータ、または他のデータのうちの１つ以上を含むことができ、その全部もしくは一部をＵＲＩ１０５から取得することができる。
【００１３】
アプリケーション１２３へのアクセス要求の受信に応答して、ＲＰＳ１００はアプリケーション１２３へのアクセスを促進する。まず、ＲＰＳ１００は、まだランしていなければアプリケーション１２３の実行を開始することができる。アプリケーション１２３はアプリケーションウィンドウ１２４を生成し、これは通常、アプリケーション１２３のグラフィカルユーザインターフェースを提示し、提供し、またはその他表す。ウィンドウ１２４は必ずしもホストシステム１２２によって表示する必要はない。例えば、ウィンドウ１２４はホストシステム１２２のディスプレイバッファ（例えばフレームバッファ、ビデオメモリ）または他のメモリ（例えばシステムメモリ、永続性記憶装置）に格納することができる。以下の図４に関して例示的なディスプレイバッファ４０７を説明する。いくつかの実施形態では、ホストシステム１２２がデータセンターの一部であるときなど、ホストシステム１２２はローカルディスプレイ装置を含まない。
【００１４】
ＲＰＳ１００はアプリケーションウィンドウ１２４へのアクセスを取得し、これはウィンドウ更新の通知の受信と、アプリケーション１２３および／またはウィンドウ１２４への／からのユーザ入力イベントおよび／または他の入力の提供との両方を含むことができる。ウィンドウ更新は、ウィンドウ１２４に表示される画像データが変わるとき、ウィンドウ１２４が移動、サイズ変更、最小化するときなどを含め、多様な条件またはイベントのためにＲＰＳ１００に配信することができる。ユーザ入力イベントはキー打ち、ポインタイベント（例えばマウスのクリック、移動、ドラッグ）、音声入力などを含むことができる。
【００１５】
アプリケーションウィンドウ１２４から受信したウィンドウ更新に応答して、ＲＰＳ１００はウィンドウ画像データをウェブブラウザ１１０に伝送し、そこでリモートアプリケーションウィンドウ１２５として表示される。このように、ウェブブラウザ１１０のユーザはリモートアプリケーションウィンドウ１２５と対話（例えば、クリック、タイプ）することができる。応答して、ウェブブラウザ１１０はユーザ入力イベントの指示をＲＰＳ１００に転送する。さらに、ＲＰＳ１００は受信したユーザ入力イベントをアプリケーション１２３に配信し、それによってアプリケーション１２３の状態が変更される。アプリケーション１２３の状態が変更すると、ウィンドウ１２４が更新され、それに対応してリモートアプリケーションウィンドウ１２５が更新されることになる。
【００１６】
ウィンドウ１２５はウィンドウ１２４の同一コピーでなくてもよいことに留意する。一実施例として、ＲＰＳ１００によって伝送される画像データは移送中に失われることがあり（例えば破棄されたパケット）、その結果ウィンドウ１２４と１２５とに相違が生じることになる。別の例では、非可逆圧縮技術を使用して画像データを伝送することがあり、これもウィンドウ１２４と１２５とに違いが生じることになる。また、携帯機器の小さな画面に合わせるためにウィンドウ１２５のサイズを縮小するダウンスケーリングを行うときなど、クライアント機器１２０でスケーリングを行うこともある。
【００１７】
図１Ｂは、クライアント機器１２０上で実行中のリモートプレゼンテーションクライアントの動作を記述している。図１Ｂでは、ウェブブラウザ１１０はＵＲＩ１０５に基づくアプリケーション要求をＲＰＳ１００に伝送する。述べたように、いくつかの実施形態はｈｔｔｐ：／／ｈｏｓｔ−ｓｙｓｔｅｍ−ｉｄ／ａｐｐｌｉｃａｔｉｏｎ−ｉｄ？ａｒｇｓの形式を有するＵＲＩを使用する。したがって、ＵＲＩ用語を使用して、ホストシステム１２２はＵＲＩのオーソリティ／ホスト部分（例えばｈｏｓｔ−ｓｙｓｔｅｍ−ｉｄ）により特定され、アプリケーションはＵＲＩ１０５のパス部分（例えば／ａｐｐｌｉｃａｔｉｏｎ−ｉｄ）によって特定され、引数はＵＲＩ１０５のクエリ部分（例えばａｒｇｓ）によって指定される。特に、ｈｔｔｐ：／／ｍｙｈｏｓｔ．ｃｏｍ／ｍｙａｐｐｓ／ａｐｐ．ｅｘｅ？ｆｉｌｅ＝ｆｉｌｅ１．ｔｘｔ＆ｄｉｍ＝８００ｘ６００の例示的なＵＲＩと仮定すると、ホストシステム１２２はｍｙｈｏｓｔ．ｃｏｍとして特定され、アプリケーションは／ｍｙａｐｐｓ／ａｐｐ．ｅｘｅとして特定され、パラメータまたは引数はｆｉｌｅ＝ｆｉｌｅ１．ｔｘｔ（例えばアプリケーションでファイルｆｉｌｅ１．ｔｘｔを開く）およびｄｉｍ＝８００ｘ６００（例えばウィンドウサイズを８００×６００画素に設定する）である。
【００１８】
いくつかの実施形態では、アプリケーション１２３はそのファイルシステムの位置（例えば／ｍｙａｐｐｓ／ａｐｐ．ｅｘｅ）を使用してＵＲＩ１０５内で直接特定することができるが、他の実施形態は追加の間接レベルを提供することができる。特に、いくつかの実施形態はＲＰＳ１００が実行またはアクセスするべきアプリケーションを判断するために調べるキーまたは他の識別子を使用することができる。このような実施形態では、ＵＲＩ１０５の例は、ｈｔｔｐ：／／ｍｙｈｏｓｔ．ｃｏｍ／ｌａｕｎｃｈ？ａｐｐｉｄ＝１２３４５＆ａｒｇ１＝ｖａｌ１＆ａｒｇ２＝ｖａｌ２＆ｗｓ＝ｃｌｏｓｅｄとすることができる。この例では、アプリケーション１２３はクエリパラメータ（例えばａｐｐｉｄ＝１２３４５）として特定されることに留意する。受信時、ＲＰＳ１００は識別子１２３４５を調べて、アクセスするべきアプリケーションを判断する。
【００１９】
いくつかの実施形態では、ユーザ識別子もＵＲＩ１０５の一部として表すことができる。特に、複数のユーザがホストシステム１２２を共有している、またはホストシステム１２２にアクセスしている場合、ＵＲＩ１０５はユーザの識別子および他のユーザ固有データ、あるいはユーザの識別子または他のユーザ固有データ（例えばユーザ環境識別子、ユーザデスクトップ位置、ホームディレクトリ）を含むことができる。このような環境では、ＵＲＩ１０５の一般的な形式は、ｈｔｔｐ：／／ｈｏｓｔ−ｓｙｓｔｅｍ−ｉｄ／ｕｓｅｒ−ｐａｒｔ／ａｐｐｌｉｃａｔｉｏｎ−ｉｄ？ａｒｇｓとすることができ、ここでユーザ部分はユーザおよびユーザ固有データ、あるいはユーザまたはユーザ固有データを特定する。ＵＲＩ１０５のクエリ部分の一部としてユーザ固有情報を提供するなど、他の構造または表現も考えられる。他の実施形態では、ＵＲＩ１０５のｈｏｓｔ−ｓｙｓｔｅｍ−ｉｄ部分は代わりに、要求を調べて、適したホスト（例えば十分なコンピューティング資源をもつホストまたは要求されるアプリケーションがインストールされているホスト）にディスパッチ（例えばリダイレクト）するように構成されているディレクトリサービスを参照またはその他特定することができる。
【００２０】
アプリケーション要求に応答して、ＲＰＳ１００はクライアントロジックをウェブブラウザ１１０に伝送し、そこでリモートプレゼンテーションクライアント（ＲＰＣ）１０２として実行される。ＲＰＣ１０２はＪａｖａＳｃｒｉｐｔで、Ｊａｖａアプレット、ＡｃｔｉｖｅＸコントロールとして、または一般にウェブブラウザ１１０もしくはクライアント機器１２０の状況内でコードを実行するのに適した他の技術を使用して実装することができる。いくつかの実施形態では、ＲＰＣ１０２はここで図示するウェブブラウザ１１０の一部として（例えばプラグインとして、および／または同じメモリアドレス空間内でおよび／またはアプリケーションの状況内で）実行することができる。他の実施形態では、ＲＰＣ１０２はウェブブラウザ１１０とは独立した個別プロセスとして実行し、プロセス間通信技術（例えばパイプ、信号、メッセージ）を使用してウェブブラウザ１１０と通信することができる。クライアントロジックをウェブブラウザ１１０に伝送することにより、ウェブブラウザ１１０のユーザはクライアント機器１２０にクライアントソフトウェアを手動で構成またはインストールしなくても、アプリケーション１２３にアクセスすることができる。
【００２１】
ＲＰＣ１０２がアクティブになれば、ＲＰＳ１００は、リモートアプリケーションウィンドウ１２５として表示するために、アプリケーションウィンドウ１２４を表す画像データを伝送する。通常、ＲＰＳ１００は最初にリモートアプリケーションウィンドウ１２５として表示するために、アプリケーションウィンドウ１２４全体の正確なもしくは実質的なコピーまたは表現をＲＰＣ１０２に伝送する。このように、ＲＰＣ１０２は最初に完全なウィンドウをユーザに提示する。画像データはビット単位で（例えば１ビット単位のコピー）、または可逆（例えばエントロピー符号化、ランレングス符号化）および非可逆圧縮（例えば色空間縮小、変換符号化、ベクトル量子化）のうち少なくとも一方を含む１つ以上の圧縮技術を使用して、ＲＰＳ１００からＲＯＣ１０２に伝送することができる。いくつかの実施形態では、圧縮の種類および量、あるいは圧縮の種類または量は、利用できる通信帯域幅、クライアント機器１２０のディスプレイ装置の特性など、１つ以上の要因に基づくことができる。圧縮レベルは同様にまたは代わりに、利用できるネットワーク帯域幅の量など、変化する状況に応じてリアルタイムで交渉または変化することができる。
【００２２】
ＲＰＣ１０２は、リモートアプリケーションウィンドウ１２５に関して、クライアント機器１２０が収集したユーザ入力イベントに関する情報の伝送も担う。いくつかの実施形態は、ユーザ入力イベントを表すまたは示すために、プロトコル、メッセージセット、クラス階層などを提供する。例えば、ＲＰＣ１０２はウェブブラウザ１１０から受信したＪａｖａＳｃｒｉｐｔベースのイベントを、ＲＰＣ１００に伝送するために別のフォーマット（例えばシステム独立フォーマットまたはシステム従属フォーマット）に変換することができる。
【００２３】
ＲＰＳ１００は、ＲＰＣ１０２から受信するユーザ入力イベントに関する情報の受信および処理を担う。イベントの処理は、イベントを生成するおよびイベントを特定のプロセスまたはウィンドウに配信する、あるいはイベントを生成するかまたはイベントを特定のプロセスまたはウィンドウに配信するオペレーティングシステムの機能の起動によるなど、ユーザ入力イベントのアプリケーション１２３およびアプリケーションウィンドウ１２４、あるいはアプリケーション１２３またはアプリケーションウィンドウ１２４への転送を含むことができる。イベントの処理は、それをアプリケーションウィンドウ１２４に転送する前に、ユーザ入力イベントの翻訳、フォーマット変更またはその他修正も含むことができる。例えば、ＲＰＳ１００がシステム独立フォーマットで表されるユーザ入力イベントを受信すると、ＲＰＳ１００はホストシステム１２２上で実行される特定のオペレーティングシステムに合わせたシステム従属フォーマットでイベントを生成することができる（例えばウィンドウズイベント）。別の例として、ＲＰＳ１００は、マウスクリックの座標をクライアント機器１２０（例えばリモートアプリケーションウィンドウ１２５、ウェブブラウザ、またはデスクトップ）の座標系からホストシステム１２２の座標系に変換するなどの位置変換演算を行うことができる。ある場合には、ＲＰＳ１００は、リモートアプリケーションウィンドウ１２５が小さな携帯機器の画面に合うように縮小されたときなど、入力イベントをスケーリングすることができる。
【００２４】
ＲＰＳ１００は更新後の画像データをアプリケーションウィンドウ１２４からＲＰＣ１０２に伝送することもさらに担う。特に、アプリケーション１２３に配信される入力イベントおよび他の入力イベントのうち少なくとも一方または状態変化に応答して、アプリケーション１２３はアプリケーションウィンドウ１２４を経時的に変更させる。ＲＰＳ１００は、アプリケーションウィンドウ１２４の変更部分または更新部分（例えばブロック）を特定するなど、アプリケーションウィンドウ１２４の変更を特定する。更新されたウィンドウ部分が１つ以上あれば、ＲＰＳ１００はＲＰＣ１０２にその更新されたウィンドウ部分を表す画像データを伝送する。通常、伝送される画像データは、ＲＰＣ１０２がリモートアプリケーションウィンドウ１２５のどの部分を更新するべきかを判断できるように、位置情報を含む。
【００２５】
ＲＰＳ１００は他のデータおよびメッセージ、あるいは他のデータまたはメッセージをＲＰＣ１０２に伝送することができる。例えば、ＲＰＳ１００は、ホストシステム１２２を介してランしているまたは利用できるプロセスのリストなどのプロセス管理情報を伝送することができる。同様に、ＲＰＳ１００は、プロセス終了／一時停止、ウィンドウ最小化または最大化など、ＲＰＣ１０２から受信するプロセス制御メッセージまたはコマンドに応答することができる。別の例として、ＲＰＳ１００は、新しいウィンドウが生成されたことおよび開いたことのうち少なくとも一方、ウィンドウが指定位置に移動したこと、ウィンドウがサイズ変更されたこと、ウィンドウが閉じたことなど、アプリケーション１２３およびウィンドウ１２４、あるいはアプリケーション１２３またはウィンドウ１２４に対するイベント情報を伝送することができる。
【００２６】
図１Ｃは、仮想化環境で動作する実施形態を示す。図１Ｃでは、ホストシステム１２２は、プロセッサ、メモリ、永続性記憶装置、ネットワーク機器、ディスプレイ装置など、物理的なハードウェアを有するホストハードウェア１３３を含む。ホストシステム１２２は複数の仮想マシン１３１ａ〜１３１ｎの実行のために仮想オペレーティングプラットフォームを提供するように構成されている仮想化インフラストラクチャ１３２（例えば仮想マシンモニタ、ハイパーバイザ）も含む。
【００２７】
図示する例では、仮想マシン１３１ａおよび１３１ｂはそれぞれ、クライアント機器１２０ａ〜１２０ｄのうちの１つ以上によってリモートアクセスを促進するＲＰＳ１００を含む。１台のＲＰＳ１００（例えばＲＰＳ１００ａ）は複数のクライアント機器による１つ以上のアプリケーションへのアクセスを促進することができる。いくつかの仮想マシン（例えば仮想マシン１３１ｎ）はＲＰＳ１００を含まなくてもよく、リモートでアクセスされないアプリケーションまたは作業負荷を実行していてもよいことに留意する。また、ホストシステム１２２はここでは複数の仮想マシン１３１ａ〜１３１ｎ（そのいくつかはリモートプレゼンテーションサービスを含む）をホストするように示されているが、ホストシステム１２２は代わりに仮想マシン１３１ａ〜１３１ｎのうちの１つであってもよい。
【００２８】
図２Ａおよび図２Ｂは、例示的な実施形態による画像データおよびユーザインターフェースイベントの伝送と処理を示す例示的なブロック図である。特に、図２ＡはＲＰＳ１００とＲＰＣ１０２との間のユーザ入力および画像ブロックの流れを示す。図２Ａでは、ＲＰＣ１０２はユーザ入力イベント２００および２０２のストリームをＲＰＳ１００に伝送し、そこでそれはアプリケーションウィンドウ１２４に転送される。さらに、ＲＰＳ１００は画像ブロック２１０〜２１２のストリームをＲＰＣ１０２に伝送し、そこでそれはリモートアプリケーションウィンドウ１２５上にまたはその一部として提示される。上記述べたように、他のデータおよび制御メッセージ、あるいは他のデータまたは制御メッセージをＲＰＳ１００とＲＰＣ１０２との間で伝送することができる。
【００２９】
図２Ｂは、例示的なリモートプレゼンテーションクライアントが受信する画像ブロックの処理の例を示す。より具体的には、図２Ｂは、図２Ａの４つの画像ブロック２１０〜２１２が受信されるときに、計算機アプリケーションのリモートアプリケーションウィンドウ１２５が経時的にどのように変化するかを示す。リモートアプリケーションウィンドウ１２５は４つの時点で描かれており、参照番号１２５ａ〜１２５ｄで示される。
【００３０】
初めに、リモートアプリケーションウィンドウ１２５は、リモートアプリケーションウィンドウ１２５ａで示されるように空である。次に、画像ブロック２１０を受信する。画像ブロック２１０はアプリケーションウィンドウ１２４全体の「キーフレーム」またはコピーである。当該キーフレームはセッション開始時点（例えばアプリケーションがスタートするとき）およびアプリケーションウィンドウが最小化された状態に置かれた後で最大化されるときなどの他の時点のうちの少なくとも一方で送信することができる。画像ブロック２１０はリモートアプリケーションウィンドウ１２５ａに組み込まれて（例えば合成または「追加」されて）、リモートアプリケーションウィンドウ１２５ｂを生じる。
【００３１】
次に、画像ブロック２１１を受信する。画像ブロック２１１は、数字４を入力するキー打ちまたはマウスのクリックとすることのできるユーザ入力イベント２００を処理する基本の計算機アプリケーションから得られる数字表示エリアの変化に対応する。画像ブロック２１１はさらにリモートアプリケーションウィンドウ１２５ｂに追加されて、リモートアプリケーションウィンドウ１２５ｃを生じる。リモートアプリケーションウィンドウ１２５ｃはその数字表示エリアに数字４（ウィンドウ１２５ｂのように０ではなく）を表示する。
【００３２】
次に、画像ブロック２１２を受信する。画像ブロック２１２は、数字２を入力するキー打ちまたはマウスのクリックとすることのできるユーザ入力イベント２０２を処理する計算機アプリケーションから得られる数字表示エリアの変化に対応し、過去に表示した数字４を数字４２に更新させる。画像ブロック２１２はさらにリモートアプリケーションウィンドウ１２５ｃに追加されて、リモートアプリケーションウィンドウ１２５ｄを生じる。リモートアプリケーションウィンドウ１２５ｄは数字４２（ウィンドウ１２５ｃの４ではなく）を表示する。
【００３３】
図２Ｂに図示する実施形態は、２つの時点間で更新されたウィンドウ部分のみを伝送することにより、ネットワーク帯域幅を節約する。いくつかの実施形態では、変更または更新後の画像ブロックの送信などの最適化は採用しなくてもよく、代わりに、各ウィンドウの更新のためにキーフレームを送信できることに留意する。他の例では、図示するもの以外の画像ブロック（例えば異なるサイズ）も伝送することができる。
【００３４】
以下の表１は、クライアント機器１２０上で実行するために、リモートプレゼンテーションクライアントのＪａｖａＳｃｒｉｐｔベースの実装により使用できるであろうＨＴＭＬおよびＪａｖａＳｃｒｉｐｔ疑似コードの一覧を含む。
【００３５】
【表１】
2015529878.tif 000003
表１のリストは、ＨＴＭＬ  ＣＡＮＶＡＳ要素（４行目）を定義し特定する。さらに、６〜４５行目は、例示的なリモートプレゼンテーションクライアント１０２の少なくとも一部を実装するＪａｖａＳｃｒｉｐｔ疑似コードを含むＳＣＲＩＰＴ要素を定義する。いくつかの実施形態では、図示するロジックは、ウェブブラウザ１１０がリモートプレゼンテーションサービス１００に行うＵＲＩベースの要求に応答して、リモートプレゼンテーションサービスから受信する。他の実施形態では、図示するロジックは、キャッシュ内または予めインストールされているソフトウェアとしてなど、クライアント機器１２０に予め存在することができる。
【００３６】
１２〜２２行目はユーザ入力イベントを処理する手法を示す。特に、イベントハンドラ（「ｍｏｕｓｅＥｖｔＨａｎｄｌｅｒ」と呼ばれる）が定義されて（１２〜１５行目）、登録される（１７〜２２行目）。イベントハンドラは受信したイベントをリモートプレゼンテーションサービス１００に伝送するために非同期的に動作する。
【００３７】
２５〜３９行目は、リモートプレゼンテーションサービス１００から受信したメッセージを処理する手法を示す。特に、名付けられた関数（「ｈａｎｄｌｅＭｅｓｓａｇｅｓ」）は、リモートプレゼンテーションサービス１００からメッセージを繰り返し受信して処理するメッセージハンドリングループを実行する。２９〜３１行目で、関数は受信した画像ブロックを、そのブロックをＣＡＮＶＡＳ要素に引き込んでディスプレイ装置に提示させることによってハンドリングする。３２〜３７行目に示すように、他の種類のメッセージも受信して、処理することができる。
【００３８】
表１に関して説明する手法はＨＴＭＬ  ＣＡＮＶＡＳ要素を利用するが、他の実施形態は異なる技術を使用することができる。特に、いくつかの実施形態は、ＣＡＮＶＡＳ要素を提供していないバージョンのＨＴＭＬをサポートするおよび他の限定的なレンダリング環境（例えばフレームバッファなし）のうちの少なくとも一方を有する。当該技術は、２０１２年４月１７日に出願されたＰｒｅｓｅｎｔｉｎｇ  Ｄｙｎａｍｉｃａｌｌｙ  Ｃｈａｎｇｉｎｇ  Ｉｍａｇｅｓ  ｉｎ  ａ  Ｌｉｍｉｔｅｄ  Ｒｅｎｄｅｒｉｎｇ  Ｅｎｖｉｒｏｎｍｅｎｔという発明の名称の米国特許出願第１３／４４９０７６号（代理人整理番号第Ａ６６７号）にさらに詳細に記述されている。
【００３９】
例示的な実施形態を示すためにウェブブラウザを介したリモートアクセスを使用しているが、リモートアクセスは他の実施形態では異なる種類のクライアントを介して提供することができる。例えば、携帯機器、アプリ、デスクトップソフトウェアスイート、キオスクシステムなど、別のアプリケーションまたはシステム内に埋め込まれているウェブ対応コンポーネントを介してリモートアクセスを提供することができる。また、異なるウェブまたはネットワークプロトコルが考えられ、技術はＨＴＴＰの使用にのみ限定されない。特に、ＨＴＴＰＳ、ＦＴＰなどを含め、他のスキームもサポートおよび利用、あるいはサポートまたは利用することができる。また、ＲＥＭＯＴＥＡＰＰ（例えばｒｅｍｏｔｅａｐｐ：／／ｍｙｈｏｓｔ．ｃｏｍ／ｐａｔｈ／ｔｏ／ａｐｐ？ａｒｇ１＝ｖａｌ１）などのカスタムスキームおよびスキーム名も提供できる。
【００４０】
また、説明する技術を実装または遂行するために異なる種類の機器またはシステムを使用することもできる。例えば、クライアント機器１２０は、携帯機器（例えばスマートフォン）、タブレットシステム、キオスクシステム、埋め込みシステム（例えば車内）などを含め、リモートプレゼンテーションクライアントまたは同様なロジックを実行するための十分な処理能力を有するあらゆるコンピューティング機器とすることができ、またはそれを含むことができる。さらに、ホストシステム１２２は物理的なシステムである必要はなく、むしろ物理的なハードウェアにホストされ、ハイパーバイザ、仮想マシンモニタ、または同様なメカニズムにより管理される仮想マシンとすることができる。
【００４１】
また、ここでは主に一定の用語を使用しているが、同等の実施形態および実施例を得るために他の用語を互換可能に使用することができるであろう。例えば、リモートアクセスのフィールドまたは同様なもしくは関連フィールドの同等の用語は、「ホストシステム」、「クライアント機器」、「ウェブクライアント」などの用語に置換できることはよく知られている。特に、「ホストシステム」という用語は「ホスト」、「ホストコンピュータ」、「アプリケーションホーム」、「サーバ」または同様な用語と互換可能に使用することができる。同様に、「ウェブクライアント」という用語は「ＨＴＴＰクライアント」、「ネットワーククライアント」、「ネットワークアクセスクライアント」または同様な用語と互換可能に使用することができる。さらに、用語は明示的に述べることも述べないこともある代替スペルを有することもでき、当該用語のすべてのバリエーションが含まれることが意図される。
【００４２】
ここに説明する例示的な実施形態は、ウェブクライアントを介してリモートアプリケーションのアクセスを提供するために使用されるリモートアプリケーションプレゼンテーションシステムを実装するアプリケーション、ツール、データ構造および他のサポートを提供する。説明する技術の他の実施形態は、一般に「細い」ネットワーククライアントを開発し、提供するためおよびゼロコンフィギュレーションアプリケーションインフラストラクチャを実装するための少なくとも一方の目的を含め、他の目的のために使用することができる。以下の説明では、説明する技術の完全な理解を与えるため、データフォーマットやコードシーケンスなど、多数の特定の明細を記載している。説明する実施形態はここで説明する特定の明細のいくつかがなくても、またはロジックの順序に関する変更、異なるロジックなど、他の特定の明細とともに実施することができる。したがって、説明する技術および機能、あるいは説明する技術または機能の範囲は、特定のルーチン、モジュール、コンポーネントなどに関して説明する態様の特定の順序、選択、または分解によって制限されるものではない。
【００４３】
例示的なプロセス
図３Ａおよび図３Ｂは、例示的な実施形態によって行われるリモートアクセスプロセスの例示的なフロー図である。
【００４４】
図３Ａは、ある実施形態により行われるリモートプレゼンテーションサービスプロセス３００の例示的なフロー図である。図示するプロセスは、例えば、上記説明したホストコンピューティングシステム１２２上で実行されるリモートプレゼンテーションサービス１００によって行うことができる。
【００４５】
ブロック３０１で、プロセス３００はリモートウェブクライアントから、ホストコンピューティングシステム上のアプリケーションへのアクセス要求を受信する。いくつかの実施形態では、受信する要求は、パス（例えばアプリケーションを特定する）と何らかのクエリ引数（例えばＵＲＩで「？」の後に出現する名前と値の組）など、ホストコンピューティングシステムおよびアプリケーションを（直接もしくは間接的に）特定するＵＲＩの少なくとも一部を含むＨＴＴＰ要求である。
【００４６】
ブロック３０２で、プロセス３００は、ウェブクライアントに、ホストコンピューティングシステム上に格納されているアプリケーションのウィンドウを表す画像データを表示させる。ウェブクライアントに画像データを表示させることは、ウェブクライアント（またはそれによってもしくはそこで実行されるあるモジュール）に、ホストコンピューティングシステム上に格納されているウィンドウの全部または一部の表現（もしくは一般にグラフィカルユーザインターフェース）を伝送することを含むことができる。このように、プロセス３００は、ウェブクライアントに、ホストコンピューティングシステムのウィンドウの少なくとも実質的なコピーであるウィンドウを表示させる。プロセス３００は、ある過去の時点から更新または変更されたウィンドウの部分のみを特定して伝送することができる。画像データがリモートウェブクライアントで受信されると、ユーザが閲覧するためにディスプレイ装置に表示される。伝送された画像データは可逆または非可逆圧縮技術を用いて圧縮することができる。ホストコンピューティングシステム上に格納されているウィンドウは、ホストコンピューティングシステムによって必ずしも表示する必要はない。例えば、それはホストコンピューティングシステムのメモリ（例えばディスプレイバッファ、システムメモリ、ディスク）に格納することができるが、表示しなくてもよい（例えばホストコンピューティングシステムがディスプレイ装置をもたないため、ホストコンピューティングシステムのディスプレイ装置の電源が切れているため）。
【００４７】
述べたように、帯域幅を節約するために、プロセス３００は現在のウィンドウ画像と過去のウィンドウ画像（過去のウィンドウ更新イベント時に格納されたもの）とのブロックごとの比較を行うことにより、修正された画像ブロックのみを判断して、伝送することができる。８×８、１６×１６、８×１６などを含め、異なるブロックサイズおよび形状が考えられる。いくつかの実施形態では、ブロックサイズは、ネットワークのレイテンシ、修正の範囲と量などの要因に基づいて動的に判断することができる。例えば、２つの隣接した正方形ブロックは、ネットワークトランザクション（例えばＴＣＰおよびＨＴＴＰ接続のうちの少なくとも一方、ならびに対応する切断）の数を減らすために、１つの方形ブロックとして伝送することができる。
【００４８】
ブロック３０３で、プロセス３００はウェブクライアントから、表示された画像データについて行われるユーザ入力の指示を受信する。ユーザがリモートウェブクライアントで表示された状態のウィンドウと対話すると、ウェブクライアントはユーザ入力イベントを収集し、その指示がこのプロセスに伝送される。ユーザ入力イベントはポインタイベント（例えばマウス、スタイラス、タッチスクリーンのアクション）、キーボードイベント、キーパッドイベント、音声イベント、ジェスチャーベースのイベントなどを含むことができる。
【００４９】
ブロック３０４で、プロセス３００はユーザ入力の指示をアプリケーションに転送する。ユーザ入力の指示の転送は、ホストコンピューティングシステム上のアプリケーションに提供される（例えばオペレーティングシステムの呼び出しを介して）イベントの生成を含むことができる。
【００５０】
通常、プロセス３００はブロック３０２、３０３および３０４の動作を繰り返し行うので、更新後の画像データを継続的にリモートウェブクライアントに伝送し、ユーザ入力イベントを継続的にホストシステムのアプリケーションに転送する。
【００５１】
プロセス３００は追加の動作を行うことができる。例えば、プロセス３００はウェブクライアントを介してホストコンピューティングシステムにウィンドウのコピーを表示し、ユーザによってなされる入力の指示をホストコンピューティングシステムに伝送するように構成されているコードモジュールも伝送することができる。コードモジュールは、例えば、前述したリモートプレゼンテーションクライアント１０２とすることができる。コードモジュールは、図３Ｂに関して以下説明するものなどのプロセスを行うことができる。
【００５２】
図３Ｂは、ある実施形態により行われるリモートプレゼンテーションクライアントプロセス３１０の例示的なフロー図である。図示するプロセスは、例えば、上記説明したクライアント機器１２０上で実行されるリモートプレゼンテーションクライアント１０２によって行うことができる。
【００５３】
ブロック３１１で、プロセス３１０はリモートホストコンピューティングシステム上のアプリケーションを特定する統一資源識別子を受信する。ＵＲＩは、ユーザの手入力（例えばウェブクライアントのＵＲＩ入力エリアへの入力またはタイプ）による、ＵＲＩに基づくリンクを含むウェブページによる、ユーザのデスクトップのショートカットによるなど、様々なソースから受信することができる。いくつかの実施形態では、ＵＲＩはリモートプレゼンテーションサービス１００が提供する「スタート」または「ホーム」ページの一部とすることができる。他の実施形態では、ＵＲＩはデスクトップのショートカットまたは他のアイコンの一部とすることができる。
【００５４】
ブロック３１２で、プロセス３１０はアプリケーションへのアクセス要求を伝送し、該要求は統一資源識別子に基づく。要求の伝送は、パス（例えばアプリケーションの特定）およびクエリ引数（例えばＵＲＩの「？」の後に出現する名前と値の組）など、ＵＲＩの少なくとも一部を含むＨＴＴＰ要求の形成を含むことができる。
【００５５】
ブロック３１３で、プロセス３１０は、ホストコンピューティングシステムに格納されているアプリケーションのウィンドウを表す画像データを受信する。前述したように、プロセスはアプリケーションに関連したウィンドウの画像ブロックまたは他の表現を受信することができる。ウィンドウは少なくともホストコンピューティングシステムにより、またはホストコンピューティングシステム上に格納されている（例えばディスプレイバッファ内、システムメモリ内、ディスク上）。ウィンドウはホストコンピューティングシステムによって（例えばホストコンピューティングシステムのディスプレイ装置に）現時点で表示することもできる（が、その必要はない）。
【００５６】
ブロック３１４で、プロセス３１０はウェブクライアントを介して画像データを表示する。表１に示すように、受信する画像データ（例えば画像ブロック）は、ＨＴＭＬ  ＣＡＮＶＡＳタグを介して表示することができ、それによってホストコンピューティングシステムに格納されているウィンドウまたはグラフィカルユーザインターフェースのコピー（もしくは実質的なコピー）を表示する。他の実施形態では、異なる描写メカニズムを利用することができる。例えば、プロセス３１０は、層状に重ねられて、対応するｚ座標レベルを指定することにより提示される画像ブロックをＤＩＶ要素内に埋め込むことによって、受信した画像データを表示することができる。
【００５７】
ブロック３１５で、プロセス３１０は表示される画像データについてユーザによってなされる入力の指示を伝送する。表１に示すように、プロセス３１０は、表示される画像データについてユーザが入力イベントを行うときに呼び出されるかまたはその他通知されるイベントハンドラを登録することができる。プロセス３１０はさらにこれらのユーザ入力イベント（またはその何らかの表現）をリモートホストシステムに伝送する。伝送前に、プロセス３１０は受信したイベントを機器独立フォーマットに変換してから、それをホストコンピューティングシステムに伝送することができる。
【００５８】
通常、プロセス３１０はブロック３１３、３１４および３１５の動作を繰り返し行うので、クライアント機器にローカルに表示されるウィンドウをホストシステムから受信される画像データで継続的に更新し、ユーザ入力イベントをホストシステムのリモートプレゼンテーションサービスに継続的に転送する。
【００５９】
プロセス３１０は追加の動作を行うこともできる。例えば、プロセス３１０はリモートプレゼンテーションサービスからも、新しいウィンドウが現れた、またはウィンドウが閉じた、サイズ変更したなど、イベント、メッセージまたはコマンドを受信することができる。
【００６０】
例示的なコンピューティングシステムの実装
図４は、例示的な実施形態によるリモートアプリケーションプレゼンテーションシステムのコンポーネントを実装するための例示的なコンピューティングシステムの例示的なブロック図である。特に、図４はＲＰＳ１００の実装に利用できるコンピューティングシステム４００を示す。図４に関して説明する技術はＲＰＣ１０２も実装することができ、または代わりにＲＰＣ１０２の実装に適用することができる。
【００６１】
ＲＰＳ１００を実装するために、適切に指示された１または複数の汎用のまたは専用のコンピューティングシステムまたは機器を使用できることに留意する。さらに、コンピューティングシステム４００は１つ以上の個別のコンピューティングシステムまたは機器を備えることができ、分散配置されてもよい。また、図示する各ブロックは特定の実施形態に適切な１つ以上のブロックを表すことができ、または他のブロックと組み合わせることもできる。また、ＲＰＳ１００はここに説明する能力を達成するソフトウェア、ハードウェア、ファームウェアに、または何らかの組合せで実装してもよい。
【００６２】
図示する実施形態では、コンピューティングシステム４００はコンピュータメモリ（「メモリ」）４０１と、ディスプレイ４０２と、１つ以上の中央処理装置（ＣＰＵ）４０３と、入出力機器４０４（例えばキーボード、マウス、ＣＲＴ、またはＬＣＤディスプレイなど）と、他のコンピュータ読取可能媒体４０５と、ネットワーク接続４０６と、ディスプレイバッファ４０７とを備える。ＲＰＳ１００はメモリ４０１に常駐している状態が示されている。他の実施形態では、コンテンツの一部、ＲＰＳ１００のコンポーネントの一部もしくは全部は、他のコンピュータ読取可能媒体４０５に格納することができるおよび他のコンピュータ読取可能媒体４０５で伝送することができる、あるいは他のコンピュータ読取可能媒体４０５に格納することができるかまたは他のコンピュータ読取可能媒体４０５で伝送することができる。ＲＰＳ１００のコンポーネントは好ましくは１つ以上のＣＰＵ４０３で実行し、ここで説明する技術を実装する。他のコードまたはプログラム４３０（例えば管理インターフェース、ウェブサーバなど）と、例えばデータレポジトリ４２０などの他のデータレポジトリもメモリ４０１に常駐し、好ましくは１つ以上のＣＰＵ４０３で実行する。注目すべきことに、図４のコンポーネントのうちの１つ以上が特定の実装に存在しなくてもよい。例えば、いくつかの実施形態は他のコンピュータ読取可能媒体４０５またはディスプレイ４０２を設けていなくてもよい。
【００６３】
ＲＰＳ１００はネットワーク４５０を介してクライアント機器１２０および第三者システムまたはアプリケーション４５５と対話する。ネットワーク４５０は、遠くに位置する人および機器間、あるいは遠くに位置する人または機器間の通信を促進する媒体（例えばツイストペア、同軸、光ファイバ、無線周波）、ハードウェア（例えばルータ、スイッチ、リピータ、トランシーバ）、およびプロトコル（例えばＴＣＰ／ＩＰ、ＵＤＰ、イーサネット、Ｗｉ−Ｆｉ、ＷｉＭＡＸ）のあらゆる組合せとすることができる。第三者システムまたはアプリケーション４５５は、リモート管理および監視コンソール、ウェブクライアントコンポーネントを埋め込んでいるアプリケーションなどを含め、ＲＰＳ１００にデータを提供し、またはＲＰＳ１００からのデータを利用するあらゆるシステムを含むことができる。
【００６４】
ＲＰＳ１００は、コンピューティングシステム４００のメモリ４０１で実行する状態が示されている。述べたように、ＲＰＳ１００は、ここではやはりメモリ４０１内に示されているアプリケーション１２３へのリモートアクセスを促進する。アプリケーション１２３は、アプリケーション１２３のグラフィカルユーザインターフェースを表す、またはその一部である対応するウィンドウ１２４を有する。
【００６５】
アプリケーション１２３のアプリケーションウィンドウ１２４は、ここではディスプレイバッファ４０７に格納された状態が示されている。ディスプレイバッファ４０７は、ディスプレイ４０２に表示するために画像データの１つ以上のフレーム（例えば画素）を格納するために使用されるハードウェアフレームバッファ、ビデオメモリもしくは他のメモリバッファとすることができ、またはそれを含むことができる。アプリケーション（アプリケーション１２３など）は、ディスプレイバッファ４０７のコンテンツを修正するグラフィックスライブラリ機能を呼び出すことによりディスプレイバッファ４０７にアクセスする。ディスプレイドライバおよび他のシステムモジュール、あるいはディスプレイドライバまたは他のシステムモジュールが、ディスプレイバッファ４０７のコンテンツを定期的にディスプレイ４０２に転送させる。いくつかの実施形態は、例えばソフトウェアおよびシステムメモリ４０１の組合せを使用することにより、ハードウェアフレームバッファまたは同様な機器を模倣する仮想化ディスプレイバッファ４０７を設けることができることに留意する。いくつかの実施形態はディスプレイ４０２を含まず、またはアプリケーションウィンドウ１２４を提示するために必ずしもディスプレイ４０２を使用するわけではないことにも留意する。
【００６６】
例示的な実施形態では、ＲＰＳ１００はアプリケーションマネージャ４１１と、セッションマネージャ４１２と、ユーザインターフェースマネージャ４１５と、アプリケーションプログラムインターフェース（ＡＰＩ）４１６と、データストア４１８とを含む。ユーザインターフェースマネージャ４１５およびＡＰＩ４１６は、他の実施形態では、これらのコンポーネントのうちの１つ以上が行う機能をＲＰＳ１００の外部で行えることを示すために、点線で描かれている。
【００６７】
アプリケーションマネージャ４１１は、ＲＰＳ１００を介して利用できるアプリケーションに関する情報の追跡を担う。例えば、アプリケーションマネージャ４１１はアプリケーション識別子（例えば名称、ファイルシステムの位置、プロセス識別子）、アプリケーションがランしているかどうか、アプリケーションウィンドウ情報（例えばハンドル、位置、寸法）などに関する情報、またはそれに対応する情報を格納することができる。アプリケーションマネージャ４１１は、ユーザ入力イベントをアプリケーションに転送する、ウィンドウの更新の指示を提供するなどして、アプリケーションを実行し、アプリケーションと通信するためのインターフェースも提供することができる。他の実施形態では、このようなインターフェースは以下に述べるＡＰＩ４１６としてもよく、または代わりにＡＰＩ４１６を介して提供することができる。
【００６８】
セッションマネージャ４１２は、リモートクライアント機器１２０と対応するアプリケーションとの間の１つ以上のセッションのハンドリングを担う。セッションのハンドリングは、クライアントロジック（例えばリモートプレゼンテーションクライアント１０２）をクライアント機器１２０に伝送することにより、セッションの開始を含むことができる。セッションのハンドリングは、クライアント機器１２０からのユーザ入力イベントの指示の受信と、その入力イベントの適切なアプリケーションへの転送も含むことができる。
【００６９】
セッションのハンドリングは、アプリケーションウィンドウ１２４が更新されたという指示の受信もさらに含むことができる。応答して、セッションマネージャ４１２はアプリケーションウィンドウ１２４のどの部分が変更されたのかを判断し（例えば以前の更新を受信して以降）、さらにその変更された部分のコピーまたは他の表現（例えば圧縮データ）をクライアント機器１２０に伝送することができる。
【００７０】
ＵＩマネージャ４１５は、ＲＰＳ１００およびその様々なコンポーネントとのユーザの対話を促進するビューおよびコントローラを提供する。例えば、ＵＩマネージャ４１５はＲＰＳ１００への対話型のアクセスを提供できるので、ユーザは、ＲＰＳ１００にユーザの嗜好（例えばクライアント機器の設定、画面の嗜好、圧縮レベル）、ユーザの資格情報（例えばパスワード）などに関する情報を提供するなどして、ＲＰＳ１００の操作を構成することができる。いくつかの実施形態では、ＵＩマネージャ４１５の機能へのアクセスは、例えば他のプログラム４３０の１つとして実行されるウェブサーバを介して提供することができる。当該実施形態では、第三者システム４５５のうちの１つで実行されるウェブブラウザを操作するユーザは、ＵＩマネージャ４１５を介してＲＰＳ１００と対話することができる。
【００７１】
ＡＰＩ４１６はＲＰＳ１００の１つ以上の機能へのプログラムによるアクセスを提供する。例えば、ＡＰＩ４１６は、他のプログラム４３０または何か他のモジュールのうちの１つによって呼び出すことのできるＲＰＳ１００の１つ以上の機能とのプログラムによるインターフェースを提供することができる。例えば、ＡＰＩ４１６はアプリケーションを制御する（例えば起動する、終了する）機能、イベントをアプリケーションに渡す機能、アプリケーションからイベントを受信する機能、更新したスクリーンデータを取得する機能、および同様な機能へのアクセスを提供することができる。このように、ＡＰＩ４１６は、ユーザインターフェース、プラグイン、アダプタ（例えばＲＰＳ１００の機能を携帯アプリケーションに統合するため）など、第三者ソフトウェアの開発を促進する。
【００７２】
さらに、ＡＰＩ４１６は、少なくともいくつかの実施形態では、クライアント機器１２０および第三者システムまたはアプリケーション４５５、あるいはクライアント機器１２０または第三者システムまたはアプリケーション４５５のうちの１つで実行するコードなど、リモートエンティティを介して呼び出しまたはその他アクセスして、ＲＰＳ１００の様々な機能にアクセスすることができる。例えば、クライアント機器１２０はＡＰＩを介してアプリケーション１２３の実行を開始し、ＡＰＩ４１６を介してプロセスを実行するリストを取得することなどを行うことができる。別の実施例として、第三者システム４５５で動作する監視コンソールはＡＰＩ４１６を介して性能統計を受信することができる。ＡＰＩ４１６は、第三者アプリケーション４５５に統合でき、他のアプリケーション（例えば携帯アプリ）の状況内で利用できる説明した機能のうちの少なくともいくつかを行うためにＲＰＳ１００と対話するように構成されているモジュールまたはウィジェットを提供するように構成することもできる。
【００７３】
データストア４１８は、ＲＰＳ１００の他のモジュールによって、情報を格納および通信、あるいは格納または通信するために使用される。ＲＰＳ１００のコンポーネントはデータストア４１８を使用して、アプリケーション情報（例えば名称、プロセス識別子、ハンドル、ウィンドウ識別子、ウィンドウ状態）、セッション情報（例えばユーザ識別子、アクティブなアプリケーション識別子、イベントキュー、ウィンドウデータ）などを含め、様々な種類の情報を記録および通信、あるいは記録または通信する。ＲＰＳ１００のコンポーネントは主にデータストア４１８から通信すると説明されているが、メッセージの受渡し、機能の呼び出し、パイプ、ソケット、共有メモリなどを含め、他の通信メカニズムも考えられる。
【００７４】
図４に図示するアーキテクチャは、いくつかの実施形態では、部分的にまたは完全に仮想化することができる。例えば、コンピュータシステム４００は、物理的ハードウェアで実行し、ハイパーバイザ、仮想マシンモニタ、または同様な技術によって管理される１つとすることができ、例えば多くの仮想マシンとすることができる。このような実施形態では、リモートアプリケーションへのアクセスは、サービスベースのモデルを用いて提供することができ、ユーザはアプリケーションおよびアプリケーションをランするために使用される対応するコンピューティングリソースへのアクセスを動的に取得することができる。アプリケーションへのアクセスは、アプリケーションライセンスのレンタルまたはサブスクリプションモデルに基づくなど、金銭との交換で取得することができる。
【００７５】
例示的な実施形態では、ＲＰＳ１００のコンポーネントまたはモジュールは、標準的なプログラミング技術を用いて実装される。例えば、ＲＰＳ１００は、１つ以上の静的または動的ライブラリとともに、ＣＰＵ４０３でランする「ネイティブな」実行ファイルとして実装することができる。他の実施形態では、ＲＰＳ１００は他のプログラム４３０のうちの１つとして実行される仮想マシンによって処理される命令として実装することができる。一般に、オブジェクト指向型（例えばＪａｖａ、Ｃ＋＋、Ｃ＃、Ｖｉｓｕａｌ  Ｂａｓｉｃ．ＮＥＴ、Ｓｍａｌｌｔａｌｋなど）、関数型（例えばＭＬ、Ｌｉｓｐ、Ｓｃｈｅｍｅなど）、手続型（例えばＣ、Ｐａｓｃａｌ、Ａｄａ、Ｍｏｄｕｌａなど）、スクリプト型（例えばＰｅｒｌ、Ｒｕｂｙ、Ｐｙｔｈｏｎ、ＪａｖａＳｃｒｉｐｔ、ＶＢＳｃｒｉｐｔなど）、ならびに宣言型（例えばＳＱＬ、Ｐｒｏｌｏｇなど）を含むが、これだけに限定されない、様々なプログラミング言語のパラダイムの代表的な実装を含め、当該例示的な実施形態の実装には、当技術分野で周知の様々なプログラミング言語を採用することができる。
【００７６】
上記説明した実施形態は周知のまたは専有の同期もしくは非同期のクライアントサーバコンピューティング技術のいずれでも使用することができる。また、様々なコンポーネントは、例えば、それぞれ１つ以上のＣＰＵを有する１つ以上のコンピュータシステムでランするマルチプログラミング、マルチスレッディング、クライアントサーバ、またはピア−ツー−ピアを含むが、これだけに限定されない、単独のＣＰＵコンピュータシステムでランする実行ファイル、または当技術分野で周知の多様な構成技術を使用して分解される実行ファイルとして、よりモノリシックなプログラミング技術を用いて実装することができる。いくつかの実施形態は同時におよび非同期に実行し、メッセージ受渡し技術を用いて通信することができる。同等の同期の実施形態もサポートされる。また、他の機能も各コンポーネントまたはモジュールによって、異なる順序で、および異なるコンポーネントまたはモジュールによって実装および実行、あるいは実装または実行することができ、しかも前述の機能を達成する。
【００７７】
さらに、データストア４２０（または２４０）など、ＲＰＳ１００の一部として格納されているデータとのプログラミングインターフェースは、Ｃ、Ｃ＋＋、Ｃ＃、およびＪａｖａ  ＡＰＩ、ファイル、データベース、もしくは他のデータレポジトリにアクセスするためのライブラリ、ＸＭＬなどのスクリプト言語、またはウェブサーバ、ＦＴＰサーバ、もしくは格納されているデータへのアクセスを提供する他の種類のサーバなどの標準的なメカニズムにより利用することができる。データストア４２０は、分散型コンピューティング技術を用いる実装を含め、１つ以上のデータベースシステム、ファイルシステム、もしくは当該情報を格納する他のあらゆる技術、または上記のあらゆる組合せとして実装することができる。
【００７８】
ここに説明する技術とともに使用するために、プログラムおよびデータの異なる構成および場所が考えられる。図示する実施形態のコンポーネントを分散して実装するには、ＴＣＰ／ＩＰソケット、ＷｅｂＳｏｃｋｅｔ、ＲＰＣ、ＲＭＩ、ＨＴＴＰ、ウェブサービス（ＸＭＬ−ＲＰＣ、ＪＡＸ−ＲＰＣ、ＳＯＡＰなど）を含むが、これだけに限定されない多様な分散型コンピューティング技術が適切である。他の変型も可能である。また、他の機能も各コンポーネントまたはモジュールによって提供することができ、既存の機能は様々な方法でコンポーネントまたはモジュール間で分散できるであろうが、それでもここに説明する機能を達成する。
【００７９】
また、いくつかの実施形態では、ＲＰＳ１００のコンポーネントの一部または全部は、１つ以上の特定用途向け集積回路（ＡＳＩＣ）、標準的な集積回路、適切な命令を実行するコントローラを含むが、これだけに限定されず、またマイクロコントローラおよび埋め込み型コントローラ、あるいはマイクロコントローラまたは埋め込み型コントローラ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、コンプレックスプログラマブルロジックデバイス（ＣＰＬＤ）などを含め、少なくとも部分的にハードウェアおよびソフトウェア、あるいはハードウェアまたはソフトウェアのような他の形態で実装または提供することができる。システムコンポーネントおよびデータ構造の一部または全部、またはシステムコンポーネントまたはデータ構造の一部または全部は、コンピュータ読取可能媒体（例えばハードディスク、メモリ、コンピュータネットワーク、もしくはセルラー無線ネットワーク、もしくは他のデータ伝送媒体、またはＤＶＤもしくはフラッシュメモリ機器など、適切なドライブによりもしくは適切な接続を介して読み取られるポータブルメディア商品として）にコンテンツ（例えば実行可能なもしくはその他マシン読取可能ソフトウェア命令または構造化データ）として格納することもできるので、コンピュータ読取可能媒体および１つ以上の関連コンピューティングシステムのうちの少なくとも一方、または機器、を説明した技術のうちの少なくとも一部を行うためにコンテンツを実行し、またはその他使用もしくは提供することを可能にし、またはそのように構成する。コンポーネントおよびデータ構造のうちの一部または全部、またはコンポーネントまたはデータ構造の一部または全部は有形の非一時的な（non-transitory）記憶媒体に格納することができる。システムコンポーネントおよびデータ構造の一部もしくは全部は多様なコンピュータ読取可能伝送媒体にデータ信号としても格納することができ（例えば搬送波の一部として符号化することにより、またはアナログもしくはデジタル伝搬信号の一部として含めることにより）、それがさらに無線ベースおよび有線またはケーブルベースの媒体を含めて伝送され、多様な形態（例えば単一もしくは多重アナログ信号の一部として、または複数の個々のデジタルパケットもしくはフレームとして）を取ることができる。当該コンピュータプログラム製品は、他の実施形態では他の形態を取ることもできる。したがって、本開示の実施形態は他のコンピュータシステム構成とともに実施することができる。
【００８０】
２０１２年４月１７日に出願された、Ｐｒｅｓｅｎｔｉｎｇ  Ｄｙｎａｍｉｃａｌｌｙ  Ｃｈａｎｇｉｎｇ  Ｉｍａｇｅｓ  ｉｎ  ａ  Ｌｉｍｉｔｅｄ  Ｒｅｎｄｅｒｉｎｇ  Ｅｎｖｉｒｏｎｍｅｎｔという発明の名称の米国特許出願第１３／４４９０７６号（代理人整理番号第Ａ６６７号）を含むが、これだけに限定されない、上記米国特許、米国特許出願公報、米国特許出願、外国特許、外国特許出願、非特許出版物、ならびに本明細書で参照されるおよび出願データシートに挙げられる付属書類、あるいは本明細書で参照されるかまたは出願データシートに挙げられる付属書類は、その全体を参照によりこれに組み込む。
【００８１】
本明細書では特定の実施形態を例示目的で説明してきたが、以上の記載から本開示の技術的思想および範囲を逸脱することなく様々な変更が行えることが認識されるであろう。例えば、リモートアプリケーションへのアクセスのための方法、技術およびシステムは、他のアーキテクチャまたは他の設定で実施することができる。例えば、説明した技術はクラウドベースアプリケーション販売の一部として採用することができ、顧客はサブスクリプションに基づいてアプリケーションへのアクセス権を購入でき、アクセスは動的に例えば仮想化インフラストラクチャに基づいて提供し、スケーリングすることができる。また、本明細書で述べる方法、技術およびシステムは異なるプロトコル、通信媒体（光、無線、ケーブル等）および機器（例えばデスクトップコンピュータ、無線電話機、電子手帳、携帯情報端末、タブレットコンピュータ、携帯電子メール機、ゲーム機、ページャ、ナビゲーション機器、等）に適用できる。
【図１Ａ】
2015529878.tif 000004
【図１Ｂ】
2015529878.tif 000005
【図１Ｃ】
2015529878.tif 000006
【図２Ａ】
2015529878.tif 000007
【図２Ｂ】
2015529878.tif 000008
【図３Ａ】
2015529878.tif 000009
【図３Ｂ】
2015529878.tif 000010
【図４】
2015529878.tif 000011
【国際調査報告】
2015529878.tif 000012
2015529878.tif 000013