(57)【特許請求の範囲】
【請求項１】
サーバにおいて実行される方法であって、
デバイスからリクエストパッケージを受信するステップであって、前記リクエストパッケージは、前記デバイスの固有構成のコンポーネント要素を含み、前記コンポーネント要素は、
前記デバイス上へのインストールのために選択されたアプリケーションの識別子と、
前記デバイス上のスクリプトエンジンのバージョンであって、前記選択されたアプリケーションを含む複数の異なるアプリケーションを実行するように構成されるスクリプトエンジンのバージョンを識別するスクリプトエンジンバージョン識別子と、
前記デバイスのデバイス識別子と前記デバイスのデバイスタイプ識別子とのうちの少なくとも一方と
を含む、ステップと、
前記リクエストパッケージを前記リクエストパッケージの前記コンポーネント要素に分解するステップと、
前記リクエストパッケージの前記コンポーネント要素に基づいて、前記選択されたアプリケーションのカスタムバージョンを生成するステップであって、前記選択されたアプリケーションの前記カスタムバージョンは、前記リクエストパッケージの前記コンポーネント要素内に含まれる前記スクリプトエンジンバージョン識別子によって識別される、前記デバイス上の前記スクリプトエンジンの前記バージョンによって実行可能である、ステップと、
前記選択されたアプリケーションの前記カスタムバージョンを前記サーバから前記デバイスに送信するステップと
を備える、方法。
【請求項２】
前記デバイスのベース構成と互換性がある複数の利用可能なアプリケーションのリストを、前記サーバから前記デバイスに送信するステップをさらに備える、請求項１に記載の方法。
【請求項３】
前記デバイスの前記固有構成のコンポーネント要素に従ってカスタムコンパイル構成を生成するステップと、
前記カスタムコンパイル構成を使用して前記選択されたアプリケーションをコンパイルすることによって、前記選択されたアプリケーションの前記カスタムバージョンを生成するステップと
をさらに備える、請求項２に記載の方法。
【請求項４】
前記カスタムコンパイル構成を生成するステップは、前記デバイスの前記固有構成に対応する固有のコンパイルオプションを有するカスタムメイクファイルを生成することを備え、
前記選択されたアプリケーションの前記カスタムバージョンを生成するステップは、前記カスタムメイクファイルを使用して前記選択されたアプリケーションをコンパイルすることを備える、請求項３に記載の方法。
【請求項５】
前記選択されたアプリケーションの前記カスタムバージョンの配信を確認することに続いて、前記選択されたアプリケーションの前記カスタムバージョンの全てのコピーを前記サーバから消去するステップをさらに備える、請求項１に記載の方法。
【請求項６】
前記リクエストパッケージのコンポーネント要素は、
前記デバイスの外部光センサと、
前記デバイスの動作センサ能力と、
前記デバイスのカメラタイプと、
前記デバイスの音出力能力と、
前記デバイスの周辺機器構成と、
前記デバイスの総利用可能不揮発性メモリと、
前記デバイスの総揮発性メモリと
のうちの１つ又は複数を識別する、請求項１に記載の方法。
【請求項７】
処理ユニットと、
前記処理ユニットに結合され、双方向通信をサポートするように構成されるトランシーバと、
前記処理ユニットに結合され、前記処理ユニット上で実行するように構成される命令を格納するメモリであって、前記命令は、オペレーティングシステム、ダウンロードシステム及びスクリプトエンジンを実装するように構成される、メモリと、
前記処理ユニットに結合され、前記オペレーティングシステムによってサポートされるディスプレイと
を備えるデバイスであって、
前記スクリプトエンジンは、選択されたアプリケーションのカスタムバージョンを含む複数の異なるアプリケーションを実行するように構成され、
前記ダウンロードシステムは、
前記トランシーバを介して、当該デバイスに適した認定アプリケーションのリストを受信し、
前記リストを前記ディスプレイ上に表示させ、
前記選択されたアプリケーションに関連する、ユーザからの入力を受信し、
当該デバイスの現在の構成に対応する固有構成情報であって、当該デバイスの前記現在の構成に関連するスクリプトエンジンのバージョンの識別子を含む固有構成情報を収集し、
前記選択されたアプリケーションの生成を求めるリクエストであって、当該デバイスの現在の構成に関連するスクリプトエンジンのバージョンの前記識別子を含む前記固有構成情報を備えたリクエストを、サーバに送信し、
前記選択されたアプリケーションのカスタムバージョンであって、当該デバイスの前記現在の構成に関連し、前記固有構成情報内の前記識別子により識別される前記スクリプトエンジンの前記バージョンによって実行可能な前記選択されたアプリケーションの前記カスタムバージョンを前記サーバから受信する、
ように構成される、デバイス。
【請求項８】
プロセッサと、
コンピュータ実行可能命令を格納するメモリと
を備えるサーバであって、
前記コンピュータ実行可能命令は、前記プロセッサによって実行されると、前記プロセッサに、
デバイスから、
選択されたアプリケーションの識別子と、
前記デバイス上のスクリプトエンジンのバージョンを識別するスクリプトエンジンバージョン識別子であって、前記選択されたアプリケーションを含む複数の異なるアプリケーションを実行するように構成されるスクリプトエンジンのバージョンを識別するスクリプトエンジンバージョン識別子と、
前記デバイスのデバイス識別子及び前記デバイスのデバイスタイプ識別子の少なくとも一方と
を備えるコンポーネント要素のセットを含む、リクエストパッケージを受信することと、
前記リクエストパッケージを前記コンポーネント要素に分解することと、
前記セット内の個々のコンポーネント要素を評価して、前記選択されたアプリケーションに利用可能なオプションを識別することと、
前記個々のコンポーネント要素にしたがって前記利用可能なオプションについての１つ又は複数のオプションの設定を選択することと、
前記１つ又は複数のオプションの設定を使用して前記選択されたアプリケーションのカスタムバージョンを生成することであって、前記選択されたアプリケーションのカスタムバージョンは、前記リクエストパッケージの前記コンポーネント要素内に含まれる前記スクリプトエンジンバージョン識別子によって識別される、前記デバイス上の前記スクリプトエンジンの前記バージョンによって実行可能なバージョンであり、前記デバイス上の前記スクリプトエンジンの前記バージョンに基づいて選択される少なくとも１つの個別のオプションの設定を使用して、前記選択されたアプリケーションのカスタムバージョンを生成することと、
前記選択されたアプリケーションのカスタムバージョンを当該サーバから前記デバイスに送信することと
を実行させる、サーバ。
【請求項９】
前記コンピュータ実行可能命令は、前記プロセッサによって実行されると、前記プロセッサに、
前記デバイスの標準構成を判定することと、
前記デバイスの標準構成によってサポートされるアプリケーションのリストを作り出すことと、
前記アプリケーションのリストを前記デバイスに送信することと
をさらに実行させ、前記選択されたアプリケーションは前記リストから選択される、請求項８に記載のサーバ。
【請求項１０】
前記コンピュータ実行可能命令は、前記プロセッサによって実行されると、前記プロセッサに、
前記デバイスのスクリーンサイズ及び色深度、
前記デバイスの動作センサ能力、
前記デバイスのカメラタイプ、
前記デバイスの音出力能力、
前記デバイスのワイヤレス周辺機器サポート能力、
前記デバイスの再生サポート、又は
前記デバイスのメモリ構成
に対応する１つ又は複数の他の個別のオプションの設定を使用して前記選択されたアプリケーションの前記カスタムバージョンを生成することをさらに実行させる、請求項８に記載のサーバ。
【請求項１１】
前記コンピュータ実行可能命令は、前記プロセッサによって実行されると、前記プロセッサに、
ネットワークタイプを評価して前記１つ又は複数のオプションの設定を選択すること
をさらに実行させる、請求項８に記載のサーバ。
【請求項１２】
前記１つ又は複数のオプションの設定は、コンパイラオプション又はカスタムインクルードファイルを備える、請求項８に記載のサーバ。
【請求項１３】
前記１つ又は複数のオプションの設定は、前記選択されたアプリケーションの前記カスタムバージョンの１つ又は複数のアドオン特徴を含むか、前記選択されたアプリケーションの前記カスタムバージョンから前記１つ又は複数のアドオン特徴を除外する、請求項８に記載のサーバ。
【請求項１４】
前記コンピュータ実行可能命令は、前記プロセッサによって実行されると、前記プロセッサに、
一般的なデバイス構成のための前記選択されたアプリケーションの別のバージョンをプリコンパイルすることと、
前記選択されたアプリケーションの前記プリコンパイルされた別のバージョンを前記一般的なデバイス構成を有する別のデバイスに送信することと
をさらに実行させる、請求項８に記載のサーバ。
【請求項１５】
前記選択されたアプリケーションのカスタムバージョンは、アプレット又は実行可能スクリプトである、請求項８に記載のサーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム可能デバイスからのリクエストに応答してアプリケーションを生成する方法、およびアプリケーションのダウンロードをサポートするプログラム可能デバイスに関する。
【背景技術】
【０００２】
電子デバイス、特にハンドヘルドまたは他のモバイルデバイスは、ますます日常生活の一部となっており、しばしば、以前は可搬型またはデスクトップコンピュータのものであった多くの機能に取って代わりつつある。この新規機能性の大部分は、モバイルデバイスが、一部の事例ではアプレットと呼ばれるアプリケーションプログラムをダウンロードし実行することが可能であることに由来する。こうしたアプリケーションプログラムは通常、小型仮想マシンまたはスクリプトエンジン上で実行される。ほぼ無限の種類のメモリ、ディスプレイ、カメラ、キーボード／タッチスクリーン、並びに特にプロセッサおよびその関連スクリプトエンジンを有するモバイルデバイスの急増により、これだけ広範囲の実行環境に渡ってアプリケーションの互換性を維持することが困難になっている。
【発明の概要】
【０００３】
このようなモバイル型のプログラム可能デバイス用に構築されたアプリケーションは、特定の環境に対してより特化することができ、このようなアプリケーションの実行をサポートするスクリプトエンジンのバージョンにさえも敏感になり得るので、ユーザは、より新しいバージョンが入手可能なときでも、前のバージョンのスクリプトエンジンを残すことを選ぶ場合がある。同様に、カメラやワイヤレスインターフェイスなど、周辺機器のバージョンまたはタイプは、特定のアプリケーションリリースまたはスクリプトエンジンバージョンへのバージョン依存を有する場合がある。
【０００４】
知的フロントエンドを有するコンパイラは、ある特定のモバイルデバイスプラットフォームについての情報を受け取り、入手可能なスクリプトエンジンのタイプおよびバージョン向けにアプリケーションを最適化するだけでなく、利用可能なメモリおよび周辺機器を考慮して特徴もカスタマイズする、その特定の環境向けにアプリケーションプログラムのバージョンをコンパイルすることができる。アプリケーションについてのモバイルデバイスからのリクエストは、カメラのタイプ／解像度、メモリのサイズおよび速度、スクリプトエンジンのタイプおよびバージョン、表示解像度などのアクセサリを含む、実行環境の詳細を含み得る。フロントエンドは、プラットフォームをリクエストする最適な実行可能なプロセスにコンパイルプロセスを最適化するように、コンパイラ指令またはカスタムインクルードファイルを設定することができる。いくつかの実施形態は、最も一般的な目標環境向けにアプリケーションのバリエーションをプリコンパイルすることができる。
【図面の簡単な説明】
【０００５】
【図１】コンピュータのブロック図である。
【図２】モバイルアプリケーションのオンデマンドでのコンパイルおよび展開をサポートするシステムのブロック図である。
【図３】モバイルアプリケーションのオンデマンドでのコンパイルおよび展開をサポートする別のシステムのブロック図である。
【図４】代表的なプログラム可能デバイスのブロック図である。
【図５】カスタマイズされたアプリケーションを伝える例示的なパケット構造を示す図である。
【図６】プログラム可能デバイス向けの、カスタマイズされたアプリケーションを作成する方法を示すフローチャートである。
【発明を実施するための形態】
【０００６】
本明細書では、異なる多数の実施形態の詳細な説明を記述するが、この説明の法的範囲は、本開示の最後に記載される請求項の文言によって定義されることを理解されたい。この詳細な説明は、例示としてのみ企図されるべきであり、可能な全ての実施形態を記載することは、不可能ではないにしても現実的でないので、可能な全ての実施形態を記載しているわけではない。多数の代替的実施形態は、現在の技術または本特許の出願日以降に開発される技術を用いて実装され得るであろうが、やはり請求項の範囲内である。
【０００７】
「本明細書で使用する「  」という用語は、本明細書によって．．．を意味するものと定義される」という文または同様の文を使って、本特許において用語が明白に定義されない限り、その用語の意味を、明白に、または含意により、その平易または通常の意味を越えて限定する意図はなく、このような用語は、本特許のいかなるセクションにおいても行われるいかなる記述に基づく範囲（請求項の言葉以外）にも限定されるものと解釈されるべきでないことも理解されたい。本特許において、本特許の最後にある請求項に列挙されるどの用語も、１つの意味と合致するように言及される範囲において、これは、読者を混乱させないように、分かりやすくするためにのみ行われるのであって、このような請求項の用語を、含意またはそれ以外のやり方で、その１つの意味に限定することは意図していない。最後に、請求項の構成要件が、いかなる構造も列挙せずに「手段」という文言および機能を列挙することによって定義されない限り、いかなる請求項要素の範囲も、米国特許法第１１２条第６段落の適用に基づいて解釈されることは意図していない。
【０００８】
本発明の機能性の大部分および本発明の原理の多くは、ソフトウェアプログラムまたは命令および特定用途ＩＣなどのＩＣ（集積回路）を使って、またはその中に最もよく実装される。当業者は、例えば、都合のつく時間、現在の技術、および経済学的考察によって動機づけられる、可能性として多大な作業および多くの設計選択肢にもかかわらず、本明細書で開示する概念および原理によって手引きされると、このようなソフトウェア命令およびプログラム並びにＩＣを最低限の実験で生成することが容易に可能であることが期待される。従って、簡潔にし、本発明による原理および概念を不明瞭にするいかなる危険性も最小限にするために、このようなソフトウェアおよびＩＣのこれ以上の考察は、あるとしても、好ましい実施形態の原理および概念に関する本質的要素に限定される。
【０００９】
図１を参照すると、権利請求される方法および機器を実装する例示的なシステムが、汎用コンピューティングデバイスを、コンピュータ１１０の形で含む。以下で詳述するプログラム可能デバイスは通常、ハンドヘルドまたは可搬型コンピューティング／通信デバイスでもよく、ここで示すようにコンピュータでもよい。コンピュータ１１０は、プログラム可能デバイスからのリクエストを履行する際に使用するための、後で説明する典型的なサーバも表し得る。破線で示すコンポーネントは、技術的にはコンピュータ１１０の一部ではないが、図１の例示的な実施形態を示すのに使われる。コンピュータ１１０のコンポーネントは、プロセッサ１２０、システムメモリ１３０、ノースブリッジチップ（Northbridge chip）としても知られるメモリ／グラフィックスインターフェイス１２１、およびサウスブリッジチップ（Southbridge chip）としても知られるＩ／Ｏインターフェイス１２２を含み得るが、それらに限定されない。システムメモリ１３０およびグラフィックスプロセッサ１９０は、メモリ／グラフィックスインターフェイス１２１に結合され得る。モニタ１９１または他のグラフィック出力デバイスは、グラフィックスプロセッサ１９０に結合され得る。
【００１０】
プロセッサ１２０、メモリ／グラフィックスインターフェイス１２１およびＩ／Ｏインターフェイス１２２の間の高速システムバス１２３、メモリ／グラフィックスインターフェイス１２１とシステムメモリ１３０との間のフロントサイドバス１２４、並びにメモリ／グラフィックスインターフェイス１２１とグラフィックスプロセッサ１９０との間のＡＧＰ（高度グラフィックス処理）バス１２５を含む一連のシステムバスが、様々なシステムコンポーネントを結合することができる。システムバス１２３は、限定ではなく例として、ＩＳＡ（業界標準アーキテクチャ）バス、ＭＣＡ（マイクロチャネルアーキテクチャ）バスおよびＥＩＳＡ（拡張ＩＳＡ）バスを含むアーキテクチャなどを含む、いくつかのタイプのバス構造のいずれでもよい。システムアーキテクチャが発展するのに従って、他のバスアーキテクチャおよびチップセットが使われ得るが、しばしば、概してこのパターンに従い得る。例えば、インテルおよびＡＭＤなどの企業は、それぞれ、ＩＨＡ（インテルハブアーキテクチャ）およびＨｙｐｅｒｔｒａｎｓｐｏｒｔ（登録商標）アーキテクチャをサポートする。
【００１１】
コンピュータ１１０は通常、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０によってアクセスされ得る入手可能などの媒体でもよく、揮発性および不揮発性媒体、取外し可能および固定型媒体両方を含む。限定ではなく例として、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含み得る。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータなどの情報の格納のためのどの方法または技術でも実装される揮発性および不揮発性、取外し可能および固定型媒体両方を含む。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ若しくは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（デジタル多用途ディスク）若しくは他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置若しくは他の磁気格納デバイス、または所望の情報を格納するのに使うことができ、コンピュータ１１０によってアクセスすることができる他のどの媒体も含むが、それに限定されない。
【００１２】
システムメモリ１３０は、コンピュータ記憶媒体を、ＲＯＭ（読出し専用メモリ）１３１およびＲＡＭ（ランダムアクセスメモリ）１３２など、揮発性および／または不揮発性メモリの形で含む。システムＲＯＭ１３１は、識別および製造情報などの永続システムデータ１４３を含み得る。いくつかの実施形態では、ＢＩＯＳ（基本入出力システム）も、システムＲＯＭ１３１に格納され得る。ＲＡＭ１３２は通常、直ちにアクセス可能であり、かつ／または現時点でプロセッサ１２０によって操作されているデータおよび／またはプログラムモジュールを含む。限定ではなく例として、図１は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示す。
【００１３】
Ｉ／Ｏインターフェイス１２２は、システムバス１２３を、様々な内部および外部デバイスをコンピュータ１１０に結合する他のいくつかのバス１２６、１２７、および１２８と結合することができる。ＳＰＩ（シリアル周辺機器インターフェイス）バス１２６は、起動中などに、コンピュータ１１０内の要素の間で情報を転送するのを助ける基本ルーチンを含むＢＩＯＳ（基本入出力システム）メモリ１３３に接続し得る。
【００１４】
スーパー入出力チップ１６０が、例として、フロッピー（登録商標）ディスク１５２、キーボード／マウス１６２、およびプリンタ１９６など、いくつかの「レガシーな」周辺機器に接続するのに使われ得る。スーパーＩ／Ｏチップ１６０は、いくつかの実施形態では、ＬＰＣ（low pin count）バスなどのバス１２７でＩ／Ｏインターフェイス１２２に接続され得る。スーパーＩ／Ｏチップ１６０の様々な実施形態は、産業市場において広く入手可能である。
【００１５】
一実施形態では、バス１２８は、ＰＣＩ（周辺コンポーネント相互接続）バス、またはその変形でよく、より高速の周辺機器をＩ／Ｏインターフェイス１２２に接続するのに使われ得る。ＰＣＩバスは、Ｍｅｚｚａｎｉｎｅバスとして知られている場合もある。ＰＣＩバスの変形は、ＰＣＩ−Ｅ（周辺機器相互接続高速化）およびＰＣＩ−Ｘ（周辺機器拡張相互接続）バスを含み、ＰＣＩ−Ｅは、シリアルインターフェイスを有し、ＰＣＩ−Ｘは、後方互換性があるパラレルインターフェイスである。他の実施形態では、バス１２８は、ＳＡＴＡ（シリアルＡＴＡバス）またはＰＡＴＡ（パラレルＡＴＡ）の形のＡＴＡ（advanced technology attachment）バスでよい。
【００１６】
コンピュータ１１０は、他の取外し可能／固定型、揮発性／不揮発性コンピュータ記憶媒体も含み得る。例示の目的でのみ、図１は、固定型の不揮発性磁気媒体からの読出しまたは書込みを行うハードディスクドライブ１４０を示す。ハードディスクドライブ１４０は、従来のハードディスクドライブでよい。
【００１７】
ＵＳＢ（ユニバーサルシリアルバス）メモリ１５３、ファイアーワイヤ（ＩＥＥＥ１３９４）、またはＣＤ／ＤＶＤドライブ１５６などの取外し可能媒体は、直接、またはインターフェイス１５０を介してＰＣＩバス１２８に接続され得る。図２を参照して後で説明するものと同様の記憶媒体１５４は、インターフェイス１５０を介して結合され得る。例示的な動作環境において使うことができる他の取外し可能／固定型、揮発性／不揮発性コンピュータ記憶媒体は、磁気テープカセット、フラッシュメモリカード、ＤＶＤ（デジタル多用途ディスク）、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどを含むが、それらに限定されない。
【００１８】
上述し、図１に示したドライブおよびその関連コンピュータ記憶媒体は、コンピュータ１１０用のコンピュータ可読命令、データ構造、プログラムモジュールおよび他のデータの格納を可能にする。図１において、例えば、ハードディスクドライブ１４０が、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するものとして示されている。こうしたコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じでも、異なってもよいことに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７には、少なくとも、異なるコピーであることを示すために、ここでは異なる番号が与えられている。ユーザは、マウス／キーボード１６２または入力デバイスの他の組合せなどの入力デバイスを介してコンピュータ１１０にコマンドおよび情報を入れることができる。他の入力デバイス（図示せず）は、マイクロホン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどを含み得る。こうしたおよび他の入力デバイスはしばしば、ＳＰＩ１２６、ＬＰＣ１２７、またはＰＣＩ１２８など、Ｉ／Ｏインターフェイスバスの１つを介してプロセッサ１２０に接続されるが、他のバスを使ってもよい。いくつかの実施形態では、他のデバイスは、スーパーＩ／Ｏチップ１６０により、パラレルポート、赤外線インターフェイス、ゲームポートなど（図示せず）に結合され得る。
【００１９】
コンピュータ１１０は、ＮＩＣ（ネットワークインターフェイスコントローラ）１７０により、リモートコンピュータ１８０など、１つまたは複数のリモートコンピュータへの論理接続を用いて、ネットワーク接続環境において動作し得る。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイスまたは他の一般的なネットワークノードでよく、通常、コンピュータ１１０に関連して上述した要素の多くまたは全てを含む。図１に示す、ＮＩＣ１７０とリモートコンピュータ１８０との間の論理接続は、ＬＡＮ（local area network）、ＷＡＮ（wide area network）、またはその両方を含んでよいが、他のネットワークを含んでもよい。このようなネットワーク接続環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいてよく見られる。リモートコンピュータ１８０は、コンピュータ１１０との対話型セッションをサポートするウェブサーバにもなり得る。
【００２０】
いくつかの実施形態では、ネットワークインターフェイスは、ブロードバンド接続が利用不可能であり、または使われていないとき、モデム（図示せず）を使うことができる。図示するネットワーク接続は、例示であり、コンピュータ間の通信リンクを確立する他の手段も使われ得ることが理解されよう。
【００２１】
図２は、モバイルアプリケーションの、デバイス依存のオンデマンドでのコンパイルおよび展開をサポートするシステム２００の一実施形態を示す。システム２００は、それぞれ第１のプログラム可能デバイスおよび第２のプログラム可能デバイス２０２、２０４を含み得る。プログラム可能デバイスはそれぞれ、いくつかの一般的なベース構成項目（base configuration item）、例えば、カラーディスプレイ、テキスト入力能力、１ギガバイト（Ｇバイト）の不揮発性記憶メモリなどを公開することができる。各デバイスは、例えば、より大きい表示エリア、より深い色深度、動作センサ、異なるピクセルレーティングまたは動画能力をもつカメラなど、他とは全く異なる特性も有し得る。各デバイス２０２、２０４は、インターネットまたは企業イントラネット若しくはＬＡＮや、他の公共または私設ネットワークなどのネットワークインフラストラクチャ２０６と通信することができる。通信媒体はワイヤレスでよいが、有線通信も珍しくはない。サーバ２０８が、ネットワークインフラストラクチャ２０６に接続され得る。サーバ２０８は、以下で詳述するように、プログラム可能デバイス２０２、２０４からのサービスアプリケーションリクエストに対する履行センタ（fulfillment center）として作用し得る。
【００２２】
図３は、モバイルアプリケーションの、デバイス依存のオンデマンドでのコンパイルおよび展開をサポートするシステム２５０の別の実施形態を示す。システム２５０は、それぞれ第１のプログラム可能デバイスおよび第２のプログラム可能デバイス２５２、２５４を含み得る。上記の通り、プログラム可能デバイスはそれぞれ、いくつかの一般的なベース構成項目および独自の要素を公開することができる。プログラム可能デバイス２５２、２５４は、ネットワークインフラストラクチャ２５６により、サーバ２５８および格納デバイス２６０と通信することができる。ネットワークインフラストラクチャ２５６は、インターネット、企業イントラネット若しくはＬＡＮ、または他の公衆若しくは私設ネットワークでよい。サーバ２５８は、ネットワークインフラストラクチャ２５６に接続することができ、プログラム可能デバイス２５２、２５４からのアプリケーションリクエストに応えることができる。格納デバイス２６０は、プログラム可能デバイスの１つまたは複数の一般構成用の、プリコンパイルされたカスタマイズ済みアプリケーションを格納し得る。例えば、一部のセルラー電話オペレータは、デバイスのある特定のモデルおよび構成を大量に購入し、大規模な加入者集団に販売し、または配信することができる。必要とするものが標準構成によって満たされるユーザのために、その構成用の、プリコンパイルされたアプリケーションのセットが、格納デバイス２６０の所で格納され、オンデマンドで配信され得る。
【００２３】
図４は、例示的なプログラム可能デバイス３００を示す。プログラム可能デバイス３００は、セルラー電話、スマートフォン、携帯情報端末、ブルートゥース（商標）アクセサリ、または他の可搬型デバイスでよい。プログラム可能デバイス３００は、ラップトップなどのコンピュータでもよいが、標準的デスクトップまたはタワーコンピュータでもよい。プログラム可能デバイス３００は、図１のコンピュータ１１０と同様でもよく、より限定された能力のプラットフォームを有し得るが、同時に、内蔵型カメラ、およびディスプレイ／キーパッドまたはタッチスクリーンなど、デバイスにとってより不可欠な「周辺機器」を有し得る。
【００２４】
プログラム可能デバイス３００は、処理ユニット３０２を含み得る。処理ユニット３０２は、ＡＲＭ（商標）ファミリプロセッサなど、揮発性および不揮発性メモリ（図示せず）を有する単一チッププロセッサでよいが、他の公知のプロセッサを使ってもよい。プログラム可能デバイス３００は、図２のサーバ２０８など、ホストデバイスとの通信用のトランシーバ３０４を含み得る。トランシーバ３０４は、アンテナ３０６を介したワイヤレス通信をサポートすることができるが、いくつかの実施形態では、トランシーバは、有線通信をサポートし得る。ワイヤレス構成では、トランシーバ３０４は、Ｗｉ−Ｆｉなどの短距離通信をサポートすることもでき、セルラー電話またはＰＣＳインフラストラクチャを介したワイドエリア通信をサポートすることもできる。
【００２５】
キーパッド３０８およびディスプレイ３１０によって、ユーザインターフェイスがサポートされ得る。いくつかの実施形態では、キーパッド機能は、ディスプレイ３１０のタッチスクリーンバージョンに組み込まれ得る。メモリ３１２は、揮発性および不揮発性メモリ両方を含み得る。メモリ３１２は、電話番号など、ローカルに生成された情報並びにウェブページなど、ダウンロードされた情報などのデータ３１４を格納することができる。メモリ３１２は、Ｊａｖａ（登録商標）仮想マシンや同様の実行環境などのスクリプト実行エンジン３１６を実装する実行可能命令を格納することもできる。実行可能スクリプトまたはアプリケーション／アプレット３１８は、スクリプト実行エンジン３１６によって解釈され、かつ／または実行され得る。ダウンロードマネージャを含むオペレーティングシステム３２０は、プログラム可能デバイス３００内の基本機能並びにユーザインターフェイスおよび通信プリミティブをサポートするのに使われ得る。プログラム可能デバイス３００の機能は、ネイティブまたはダウンロードされたプログラム３２２によってサポートすることができ、例えば、このような機能は、電話番号のダイアリングまたは電源管理に関連し得る。
【００２６】
１つまたは複数の内蔵型ハードウェアまたは仮想周辺機器が、プログラム可能デバイス３００に含まれ得る。このような周辺機器は、ブルートゥースワイヤレス能力３２４、暗号エンジン３２６、Ｗｉ−Ｆｉトランシーバ３２８（８０２．１１ｘ）、カメラ３３０、メディアプレーヤ３３２、ＧＰＳ（全地球測位衛星）受信機３３４などを含み得る。こうした周辺機器のいくつかは、カメラなどのハードウェアを含んでよく、周辺機器はそれぞれ、プログラム可能デバイス３００へのそのインターフェイスをサポートする関連アプリケーション並びにそのユーザインターフェイス用のサポートを有し得る。いくつかのケースでは、ダウンロードされたアプリケーションは、既存のデバイスに新規能力を追加することができる。例えば、メディアプレーヤ３３２は、新規アプリケーションにより、元々設置されているディスプレイ３１０およびオーディオ回路３２３を使って、新規ビデオ形式などの新規メディアタイプをサポートするようにアップグレードされ得る。オーディオ回路３２３は、１つまたは複数のスピーカおよび１つまたは複数のマイクロホンを含み得る。
【００２７】
動作中、ダウンロードシステム３２０は、プログラム可能デバイス３００上での実行に適した認定アプリケーションのリストを受け取り得る。このリストは、プログラム可能デバイス３００にプリロードすることができるが、リストは、トランシーバ３０４により、時間経過に伴ってアップデートされることが期待される。ユーザが、自分のプログラム可能デバイス３００用の新規アプリケーションの取得またはアップデートに関心を示しているとき、認定アプリケーションのリストが提示され得る。ユーザが選択を行った後、プログラム可能デバイス３００についての固有情報が、ダウンロードシステム／オペレーティングシステム３２０によって収集され得る。固有情報は、プログラム可能デバイス３００の構成および現在の状態に関する情報、例えば、プロセッサのタイプおよび速度、スクリプトエンジンのタイプおよびバージョン、スクリーンサイズおよびカラーパレット／色深度、入力／タッチスクリーン情報、動作センサなどでよい。選択および固有情報は、収集され、履行センタに送られ得る。選択されたアプリケーションを伴う応答は、受け取られると、おそらく、プログラム可能デバイス３００に関する、送られる固有情報と一致するようにカスタマイズされる。これを検証するために、ダウンロードパッケージ中の情報を調べて、アプリケーションに関連づけられた特性が、プログラム可能デバイス３００の能力と合致するかどうか判定することができる。合致する場合、アプリケーションがインストールされ、ユーザにとって利用可能にされ得る。ダウンロードされた他のアプリケーションのように、完全性および権限（integrity and authorization）チェック両方を、アプリケーションのインストールまたは実行前に行うことができる。
【００２８】
図５は、カスタマイズされたアプリケーションを伝える例示的なパケット構造を示す。プログラム可能デバイス３００によるアプリケーションの検証（verification）をサポートするために、パケット構造中の情報は、アプリケーションがカスタマイズされたオプションを示し得る。
【００２９】
ダウンロードパッケージ５００は、一般ヘッダー５０２、カスタマイズヘッダー５０４、および選択されたアプリケーション５０６のカスタムバージョンを含み得る。一般ヘッダーは、汎用アプリケーション識別情報、例えば「ｂｏｗｌｉｎｇ  ２．０」を含んでよく、チェックサムまたは他の完全性チェック、並びにソースの信頼性を検証する際に使用するためのデジタル署名も含んでよい。カスタマイズヘッダー５０４も、それ自体のプラットフォーム能力に対するカスタムアプリケーション５０６の正確性をプログラム可能デバイス３００に検証させるために含まれ得る。
【００３０】
カスタマイズヘッダー５０４は、スクリプトエンジンバージョン５０８、スクリーンサイズ／色深度５１０、動作センササポート５１２、および／またはワイヤレス周辺機器サポート５１４などのフィールドを含み得るが、それに限定されなくてよい。
【００３１】
スクリプトエンジンバージョン５０８は、利用可能なスクリプト作成サポートのタイプ（例えば、Ｊａｖａ（登録商標）、Ｆｌａｓｈ（登録商標）、Ｓｉｌｖｅｒｌｉｇｈｔ（登録商標）など）だけでなく、エンジンの改訂版またはバージョン番号も含み得る。いくつかのケースでは、一定のアプリケーションは、ある一定のレベルのスクリプトエンジンバージョンにおいて稼働するだけである。
【００３２】
スクリーンサイズおよび色深度５１０は、アプリケーションのカスタマイズを、スクリーンに合わせ、ピクチャまたはビデオ情報をその最大定義で提示させる。動作センササポート５１２により、アプリケーション５０６は、ベクトルおよび加速度情報を、アプリケーション５０６への入力として利用することができる。ワイヤレス周辺機器サポート５１４は、アプリケーションの操作の視聴覚側面を、このような周辺機器を利用し、または少なくともこのような周辺機器をサポートするようにアプリケーションをカスタマイズすることによって、リッチコンテキストでユーザに対して提示させる。
【００３３】
チェックされ報告され得る他の構成要素は、メディアプレゼンテーション、概して、再生サポート情報５１６に関連したハードウェアおよびファームウェアである。再生サポートの要素は、メディアコーダ／デコーダ（コーデック）、サポートされるファイル形式、およびトランスポートストリームフォーマット（例えば、ＭＰＥＧ２、ＭＰＥＧ４など）を含み得る。
【００３４】
図６は、プログラム可能デバイス用の、カスタマイズされたアプリケーションを作成する方法６００のフローチャートである。この方法は、ハンドヘルド可搬型デバイスに特に適用可能であり得るが、それに限定されなくてよい。図６に示すように、いくつかのステップは、垂直破線の右側に示すように、履行センタサーバ２０８で実施され、いくつかのステップは、同左側に示すように、プログラム可能デバイス２０２で実施される。
【００３５】
ブロック６０２で、プログラム可能デバイス２０２の標準構成のベース構成が判定され得る。つまり、標準スクリーンサイズをピクセルおよび色深度で判定することと同様に、プログラム可能デバイス上で稼動するオペレーティングシステムのタイプおよびバージョンにも判定を行うことができる。入力デバイスのタイプも、出荷されたときのデバイスの最も一般的な構成についての情報から収集され得る。スクリプトエンジンの現在サポートされているバージョンは、サポートサイトから判定され得るが、このサイトは、履行センタサーバ２０８でよい。標準構成および現在のバージョンは、少なくとも標準構成デバイスによってサポートされるアプリケーションのリストを作り出すのに使われ得る。さらに、リストに追加される各アプリケーションは、後でアプリケーションをカスタマイズする際にデータが所望される構成項目のカタログも含み得る。ブロック６０４で、履行センタサーバ２０８は、アプリケーションのリストをプログラム可能デバイス２０２に送ることができる。
【００３６】
ブロック６０６で、プログラム可能デバイス２０２は、プログラム可能デバイスのベース構成と互換性がある利用可能アプリケーションのリストを有するユーザインターフェイスを提示して、所望される場合、アプリケーションの１つをユーザに選択させることができる。
【００３７】
ブロック６０８で、ユーザ入力を使って、プログラム可能デバイスにおけるインストールに利用可能なアプリケーションのリストからのアプリケーションの選択の入力を受け取ることができる。
【００３８】
ブロック６１０で、選択の受取りに応答して、プログラム可能デバイスに対応する固有構成が収集され得る。一実施形態では、全ての入手可能情報が収集され得るが、別の実施形態では、そのアプリケーションに関連するデータのみが収集され得る。例えば、プログラム可能デバイス２０２の所で受け取られるアプリケーションのリストは、そのアプリケーションに関連した構成データを記述する追加データのカタログを含み得る。
【００３９】
プレゼンス、バージョン番号、サイズ／速度などをチェックされ得る構成のいくつかの要素は、外部光センサ、動作センサ能力、カメラタイプ、音出力能力、周辺機器構成、総利用可能不揮発性メモリ、および総揮発性メモリを含み得る。チェックされ報告され得る他の構成要素は、メディアプレゼンテーション、概して、再生サポートに関連したハードウェアおよびファームウェアである。再生サポートの要素は、メディアコーダ／デコーダ（コーデック）、サポートされるファイル形式、およびトランスポートストリームフォーマット（例えば、ＭＰＥＧ２、ＭＰＥＧ４など）を含み得る。
【００４０】
構成データがアセンブルされると、ブロック６１２で、プログラム可能デバイスの所でリクエストパッケージを組み立てることができる。リクエストパッケージは、少なくともデバイス識別子、デバイスタイプ識別子、選択されたアプリケーションの識別子、メモリ構成、およびスクリプトエンジンバージョン識別子（存在する場合）を含む固有構成のコンポーネント要素を含み得る。いくつかの実施形態では、この情報のサブセット、例えば、プログラム可能デバイス識別子およびスクリプトエンジンバージョン番号は、標準ＨＴＴＰ  ＵＲＬ（ユニバーサル・リソース・ロケータ）に入れて送ることができる。例えば、いくつかの実施形態では、デバイス識別子またはデバイスタイプ識別子は、メモリ構成を判定するのに十分であり得るので、最低限必要な情報だけが、リクエストパッケージに含まれればよい。
【００４１】
ブロック６１４で、リクエストパッケージは、プログラム可能デバイスから履行センタサーバ２０８に送られ得る。
【００４２】
ブロック６１６で、リクエストパッケージは、履行センタサーバ２０８の所で受け取られ得る。リクエストパッケージまたはその一部分は、任意選択で、履行プロセスを完了するために、履行センタからバックエンドコンパイラに送ってもよい。一実施形態では、カスタムアプリケーションの準備は、履行プロセスで準備することができる。別の実施形態では、リクエストは、プログラム可能デバイスタイプが履行センタサーバ２０８によって知られているかどうか、つまり、プログラム可能デバイスが既知のプログラム可能デバイスのデータベースにあるかどうかを見る資格を与えられる。データベースにない場合、リクエストは拒絶してよく、その構成についての付加情報がリクエストされ得る。
【００４３】
やはりブロック６１６で、履行センタサーバ２０８は、リクエストが届いた際に経由したネットワーク接続を評価することができる。ネットワークの帯域幅は、プログラム可能デバイス用のカスタムアプリケーションを開発するときの要因として使われ得る。ネットワーク、例えば、第２世代（２Ｇ）またはＧＰＲＳ（汎用パケット無線サービス）ワイヤレスネットワークが帯域幅を特に限定されるとき、サーバは、最終的なカスタムアプリケーションのサイズを削減するためのコンパイルオプションを含み得る。このようなオプションは、ネットワーク能力の範囲に渡ってよく、従ってＥＤＧＥ（Enhanced Data rate for GSM Evolution）は、拡張ヘルプファイルなど、より多くのオプションを含んでよく、ＨＳＤＰＡやＷｉＦｉなどの高速ネットワークは、フルカラーグラフィックスなどを含み得る。
【００４４】
ブロック６１８で、プログラム可能デバイス２０２の固有構成を有するリクエストパッケージは、リクエストパッケージのコンポーネント要素に分解され得る。
【００４５】
ブロック６２０で、カスタムコンパイル構成を、プログラム可能デバイスの固有構成の要素により構成することができる。例えば、リクエストされるアプリケーションにアドオン特徴を含め、若しくは除外し、またはデフォルトプリセットを設定するための異なるコンパイラオプションが、設定され、またはクリアされ得る。一実施形態では、このプロセスは、プログラム可能デバイスの固有構成に対応する固有コンパイルオプションでのメイクファイルの作成を含み得る。
【００４６】
ブロック６２２で、アプリケーションのカスタムバージョンが、カスタムメイクファイルを使って、またはブロック６２０で作られたプリセットコンパイラオプションを使ってアプリケーションをコンパイルすることによって作成され得る。アプリケーションおよびカスタムメイクファイルは両方とも、固有構成の要素を検索索引として使って保存され得る。こうすることにより、全く同じように構成されたデバイスからのリクエストが素早く検索され送られ得るが、多数の構成を含む多くの理由により、データが保存されない実施形態もあり得る。
【００４７】
ブロック６２４で、カスタムアプリケーションが、プログラム可能デバイスに送られ得る。プログラム可能デバイスへのカスタムアプリケーションの配信が確認されると、バックエンドコンパイラまたは履行センタにあるカスタムアプリケーションの全てのコピーを消去してよい。ただし、上述したように、いくつかの実施形態では、コピーは、カタログ登録され保存されてもよい。
【００４８】
同様のやり方で、所与のリクエストの受取りに先立って、一般的な期待されるコンポーネント要素は、リクエストパッケージの予め選択されたコンポーネント要素でよく、予期されるコンポーネント要素により、カスタムアプリケーションバージョンを作成するのに使うことができ、このバージョンは次いで、予期されるコンポーネント要素を含む、今後のカスタムアプリケーションリクエスト向けに格納され得る。例えば、スクリプトエンジンの新規バージョンがリリースされると、今後のリクエストは、スクリプトエンジンのそのバージョンをリクエスト／要求することが予期され得る。従って、新規バージョンスクリプトエンジンをサポートするために一般的なデバイス構成をプリコンパイルすることは、新規リクエストが入って来たときにかなりの時間の節約になり得る。
【００４９】
例えば、リクエストが届くと、リクエストパッケージのコンポーネント要素を、格納されている予期されるコンポーネント要素と突き合わせればよく、こうしたコンポーネント要素と合致する、プリコンパイルされたカスタムアプリケーションが、リクエストしているプログラム可能デバイスに送られ得る。
【００５０】
ブロック６２６で、カスタムアプリケーションを受け取った後、カスタマイズヘッダー５０４を調べて、カスタムアプリケーションを作成する際に使われるコンポーネント要素に対応する、選択された情報が、両方とも、履行センタ２０８に送られたリクエストのものと一致し、依然として有効であることを検証することができる。例えば、受け取られたパッケージが、リクエストの構成データと合致したとしても、新規スクリプトエンジンの受取りなど、構成を著しく変える変化がその後に起きている場合がある。
【００５１】
カスタマイズヘッダー５０４が現在の構成と十分に合致しない場合、ブロック６２６からの「ｎｏ」分岐をとって、ブロック６２８に進み得る。つまり、空きメモリなど、いくつかの要素は、合致が成功するために、正確に一致する必要がない場合がある。この例では、十分な空きメモリがある限り、現在の構成と応答の構成との間の一致は、完全である必要はない。
【００５２】
ブロック６２８で、アプリケーションは、インストールされないか、または延期されてもよく、任意選択で、ユーザは、不一致、生成され送られる新規リクエスト、またはその両方を知らされ得る。延期された場合、ユーザは例えば、必要メモリを解放するなど、アプリケーションがインストールされ得るように、状況を訂正することが認められ得る。
【００５３】
カスタマイズヘッダー５０４が現在の構成と十分に合致する場合、ブロック６２６からブロック６３０への「ｙｅｓ」分岐をとることによって、アプリケーションをインストールすることができる。ブロック６３０で、アプリケーションは、要求される場合は検証され、インストールされ、ユーザにとって実行のために利用可能にされ得る。
【００５４】
上記では、本発明の異なる多数の実施形態の詳細な説明を記載したが、本発明の範囲は、特許請求の範囲の文言によって定義されることを理解されたい。詳細な説明は、例示としてのみ企図されるべきであり、可能な全ての実施形態を記載することは、不可能ではないにしても現実的でないので、本発明の可能な全ての実施形態を記載しているわけではない。多数の代替的実施形態を、現在の技術または本特許の出願日以降に開発された技術を用いて実装することもでき、こうした実施形態は依然として、本発明を定義する請求項の範囲内である。
【００５５】
従って、多くの修正および変形を、本明細書に記載し示した技法および構造において、本発明の要旨および範囲から逸脱することなく行うことができる。従って、本明細書に記載した方法および機器は例示に過ぎず、本発明の範囲を限定するものではないことを理解されたい。
【図１】
0005805621.tif 000002
【図２】
0005805621.tif 000003
【図３】
0005805621.tif 000004
【図４】
0005805621.tif 000005
【図５】
0005805621.tif 000006
【図６】
0005805621.tif 000007