様々な図面における同様の参照符号は、同様の要素を示す。
図1は、ホストとなるコンピュータシステム100においてマクロに関する汎用プログラミングを許容するための構造を示す概念図である。そのような動作は、ホストとなるシステム上のマクロ実行が、とりわけ、デスクトップコンピュータ、ネットブックコンピュータなどの様々なクライアントからの、またはインターネットカフェにおけるコンピュータなどの公衆に利用できるコンピュータからのマクロの実行を可能にするため、単一のクライアントデバイスに向けられた、クライアントデバイス上、またはサーバ上で行われるマクロ実行(例えば、遠隔デスクトップ接続サービスまたはVPNを介する)と対比され得る。また、そのようなマクロは、第1ユーザが、その他のユーザ(例えば、最初のユーザと同一のドメインからシステムにアクセスするユーザら)が、それらの他のユーザ自らのアプリケーションを使用している際に、そのマクロを実行することを許す、そのマクロに対するアクセス制限を定義することによって、ユーザ間で容易に共有され得る。さらに、そのようなマクロは、ユーザ外部、およびユーザのコンピュータ外部の入力がマクロ実行の開始をトリガする場合などの、ユーザがオンラインでない場合でさえ、ユーザのために実行され得る。さらに、ホストとなるシステムが、互いに関係している登録された複数のユーザ(例えば、それらのユーザがすべて、同一のビジネス組織のために働く)を有する場合、ホストとなったシステムにおいて実行されているマクロが、複数のそのようなユーザに対応する複数のアプリケーションおよび/または複数のデータストアにまたがる複雑なワークフローをもたらすことが可能である。
そのようなシステムにおいて、マクロは、マクロが、ホストとなるシステムのプロバイダとは異なるサードパーティによって提供されるサービスを含め、異なる複数のサービスからの情報にアクセスすることができる場合、およびマクロが、メッセージングアプリケーションやビジネス生産性向上アプリケーションなどの、ホストとなるシステムにおける異なる複数のアプリケーションと協働することができる場合、特に役立つことが可能である。しかし、そのような多様なサービスおよびアプリケーションは、多様な通信構造および通信プロトコルを有する可能性がある。その結果、システム100に関連するマクロサーバサブシステムは、マクロ作成者が、単一のマクロ言語を使用しながら、多くのリソースにアクセスすることができるように、マクロが実行されるにつれ、異なるフォーマットに解釈することが可能である。例えば、スプレッドシートおよびカレンダを操作すること、ウェブコンテンツを取り込むこと、電子メールを送ること、マクロ作成者のカレンダにアクセスすること、テキストを翻訳することなどの、マクロ作成者に開示される様々なサービスに関して、オブジェクトモデルが定義されることが可能である。このオブジェクトモデルは、例えば、Javaオブジェクトを使用して表されることが可能である。各Javaオブジェクトが、基礎をなすサービスに対するアクセスメソッドをラップすることが可能である。ファーストパーティリソース(すなわち、マクロサーバサブシステムを提供するのと同一の組織によって提供されるリソース)との通信が、リモートプロシージャコールを使用して行われることが可能であるのに対して、サードパーティリソース(ユーザが、ホストとなるコンピュータシステムにアクセスするのに経由するドメインとは異なるドメインを経由するなど、他の組織によって提供されるリソース)との通信は、SOAPサービスまたは類似したサービスの形態などの、ウェブコンテンツフェッチを使用することが可能である。
サービスインタフェースが利用可能な場合、マクロ作成者は、他の様々なサービスのための提供されるサービスアーキテクチャについての知識、または専門技術を必要とすることなく、マクロを作成することができる。マクロサーバサブシステムが、事実上、アプリケーションサーバ(またはサービスプロバイダ)とマクロの間の抽象層(例えば、サービスインタフェース)の役割をすることが可能である。そのようにして、ユーザは、簡単で、実施するのが容易なコマンドセットおよび言語を使用してアプリケーションサーバ(または別のリソースプロバイダ)と通信することが可能であり、さもなければアプリケーションサーバ(または他のサービスプロバイダ)と直接に通信するのに要求されることになる潜在的により困難な対話に関与する必要がない。例えば、マクロサーバサブシステムが、アプリケーションサーバ上のアプリケーションまたはサービスの動作を制御するための制御コマンドを変換することができ、さらにユーザと、アプリケーションサーバ(またはサードパーティプロバイダのサーバ)上でホスト化アプリケーションもしくはサービスとの間でデータを、そのデータに変更を加えて、または変更を加えずに、行き来させることもできる。一例において、ユーザは、いくつかのサービスを呼び出すマクロを、そのサービスに固有の内部命令としての呼出しに直接にアクセスする必要なしに、実施することができる。
このような目的で、次に、特に図1を参照すると、1つまたは複数のマクロ104a〜104dを使用してクライアントコンピューティングデバイスと通信するサーバシステムおよびサービスインタフェース102が示されている。マクロ104は、複数の仕組みによってデータおよびサービスを提供することができる。ここで、そのような仕組みのうちの1つは、システム内部のデータおよびサービスを抽象化することに直接に関連し、さらに別の仕組みは、システム外部のデータおよびサードパーティサービスを抽象化することに関連する。
サードパーティサービスには、SOAPサービス、あるいはサービスを提供するドメインとは別個のドメインからアクセスされることが可能であり、さらにインターネットを介して情報を共有するための既知の1つまたは複数の仕組みを提供する(例えば、APIにおいて公開される)他の類似した外部サービスが含まれ得る。例えば、サードパーティサービスプロバイダが、最新の気象データをまとめることが可能であり、さらに要求が行われると、そのデータを他のサービスに提供することが可能である。
サービスインタフェース102は、Javaオブジェクト106aおよび106b、またはサードパーティデータオブジェクトなどのデータオブジェクトを格納することが可能である。Javaオブジェクト106aおよび106bは、スプレッドシートを操作すること、ウェブコンテンツをフェッチすること、電子メールを送ること、エンドユーザのカレンダにアクセスすること、ブログポストをアップロードすること、テキストを翻訳することなどの、エンドユーザに開示される様々なサービスに関して定義され得るモデルを表すことが可能である。
各Javaオブジェクト106aおよび106bは、マクロ104によって、Javaオブジェクト106aおよび106bに格納されたサービスまたは機能を用いるのに使用され得るアクセスメソッド108aおよび108bをそれぞれ有する。サービスインタフェース102が、システム100が内部サービスをユーザに開示することなしに、ユーザが、アクセスメソッド108を介して、ホストとなるコンピューティングシステム100において提供されるサービスおよびアプリケーションにシームレスなアクセスを得ることができることを確実にするのを助けることができる。
各Javaオブジェクトは、基礎をなすサービスに対するアクセスメソッドをラップすることが可能である。これらのアクセスメソッドは、内部直接ネットワーク呼出し(スプレッドシートおよび翻訳に関する)、GData(カレンダアプリケーションに関する)、内部メールサービス(電子メールに関する)、およびその他のアクセスメソッド(ウェブコンテンツフェッチに関する)によって表されることが可能である。これらのサービスの多くは、エンドユーザに直接に開示されなくてもよい。
サービスインタフェース102は、これらのサービスがエンドユーザに直接に開示されることを防ぐことができる。例えば、サービスインタフェース102は、内部サービスをエンドユーザに開示するリスクをなくす目的で、基礎をなすデータオブジェクトの周りに「ラッパ」または「デコレータ」を提供することが可能である。ラッパは、マクロと、Javaオブジェクト106aまたは106bなどのJavaオブジェクトとの間のアダプタとして機能するソフトウェア層を表す。一部の実施形態において、ラッパは、データオブジェクトがいずれのアプリケーションまたはサービスにおいて実行されるように最初に設計されたか否かにかかわらず、データオブジェクトへのアクセスが提供されることを確実にするのを助けることができる。さらに、ラッパは、その特定のデータオブジェクトに関する一般的なアクセスが全く利用可能でない、デバイス、アプリケーション、サービス、またはその他のデータの使用を可能にすることができる。
一部の実施形態において、ラッパは、プロバイダおよび/またはエンドユーザにセキュリティの層を提供することができる。例えば、サービスインタフェース102が、Javaオブジェクト106aをラップすることができるセキュリティ層110aを含む。セキュリティ層110aは、例えば、ユーザによって明確なアクションが行われない限り、マクロコードが実行されることを許さない、マクロコード自体を取り囲むさらなるコードである。一部の実施形態において、このアクションは、ユーザが、「OK」という印が付けられた画面上のコントロールを選択すること、または他の何らかの仕方でそのマクロを承認することであることが可能である。そのような承認を与える前に、ユーザに、そのマクロが影響を与える可能性があるサービスまたは他のリソースを説明する警告を示すことが可能であり、さらにユーザに、そのマクロが影響を与えることが許されるリソースのサブセットを定義する能力を与える一方で、そのマクロがその他のリソースに影響を与えることを阻止する能力を与えることも可能である。
また、サービスインタフェース102は、ユーザ呼出しをキャプチャし、ユーザセッションの写しをもたらすことができるログ記録層112aおよび112bも含む。ログ記録層112aおよび112bは、マクロを実行することの一環として実行される各動作、その動作の持続時間、その動作における誤りの発生率、ならびにその動作が要求されたユーザのソース言語または地域をログ記録することが可能である。
また、サービスインタフェース102は、サービスプロバイダをサービス濫用から保護することができ、さらにユーザをスパムから保護することができるクォータ強制層114aおよび114bも含む。例えば、クォータ強制層114a〜114bは、或るサービスにスパムメールを送るように特定のアカウントが大量にセットアップされたかどうかを、そのような大量のアカウント作成を見出すことを助けることが可能なスパム採点プログラムを使用することによって、検出することができる。システム100は、スパム発信者が、しばしば、短期間内に多数の活動を要求する、または実行するので、クォータ強制層114a〜114bを使用して、そのような振舞いが見られたかどうかを検出することができる。さらに、クォータ強制層114a〜114bは、ユーザの活動を帯域制限することによって、濫用を防止することができる。例えば、システム100は、クォータ強制層114a〜114bを使用して、1分当り行われ得るAPI呼出しの数を制限することができる。詳細には、システム100は、スクリプトエンジンに呼戻しがインストールされ、さらに呼出しが、所定の最大数の命令呼出しが使い果たされない限り、命令カウンタをインクリメントするようにされる、命令カウントを実行するための仕組みを提供することができる。最大命令呼出しレベルに達すると、システム100は、エラーメッセージを出力し、さらにサービスの実行を終了させることが可能である。
一般的なレベルで、セキュリティ層110a〜110b、ログ記録層112a〜112b、およびクォータ強制層114a〜114bは、基礎をなすプログラミング上のオブジェクト106aおよび106bに一貫した、統一された仕方で層を成して適用されることが可能である。クォータとセキュリティは、複数のサービスにわたって、場当たり的にではなく、一様に適用されるため、そのような例において、プログラマの誤り(およびもたらされるセキュリティ侵害)の可能性が低減され得る。一部の実施形態において、層110〜114(例えば、ラッパ)はすべて、或るサーバ上に配置されていることが可能なJavaクライアントを、共有されるコードを使用して呼び出すことが可能である。
セキュリティ層110a〜110bは、トロイの木馬からの攻撃、フィッシング攻撃、またはその他の悪意のあるコードなどから、エンドユーザを様々な仕方で保護することができる。一部の実施形態において、セキュリティ層110aは、ユーザにダイアログボックスを提供した後に構成されることが可能である。そのような例において、このダイアログボックスの中に含められたメッセージが、或るマクロを、潜在的に信用できないマクロとして識別することが可能であり、さらにそのマクロが実行された場合、何が起きうるかをさらに識別することが可能である。例えば、マクロは、ファイルに悪意のあるコードを挿入すること、または悪意のある動作を実行するようにコードを実行することなどによって、コンピュータの様々な態様の支配を奪おうと試みる可能性がある。
ユーザに提示されるダイアログボックスは、一部の実施形態において、そのマクロに特有である、潜在的に有害な動作のリストを識別することが可能であり、このリストは、そのマクロのスキャンに基づく。マクロをスキャンすることは、例えば、そのマクロの中のテキスト文字列、または悪意があった過去のマクロの内容に対応する他の情報に部分的に基づいて、特定の潜在的に有害な効果を識別するのを助けることができる。ユーザは、マクロが有することが可能なアクセスを承認する、または不可とすることができる。ユーザの承認は、そのマクロが読み取り特権を有することは許すが、そのマクロがいくつかのファイルを更新することは許さないなどの、前述したような、能力ベースのセキュリティ層を構築するのに使用され得る。そのような実例において、ユーザによってそのマクロに与えられ、さらにセキュリティ層において反映される特権または権利は、ユーザが承認したタイプのアクションに制限されることが可能である。
一部の実施形態において、セキュリティ層を生成するためのプロセスが、悪意のあるコードを検出するための仕組みを誤らせようと試みる悪意のあるコードを検出することが可能である。例えば、マクロの中に「delete」とコーディングする代わりに、真の削除動作の意図(例えば、「削除する」)を隠そうとして、部分文字列「de」と「lete」が連結される可能性がある。
動作の際、サービスインタフェース102が、クォータサーバに対する呼出しを実行することが可能なクォータ強制層114a〜114bを使用して、様々なプログラミング上のラップされたオブジェクトの重要なメソッドをラップすることが可能である。クォータサーバは、構成ファイル、ラッパ、ログファイル、およびその他のラッパ情報を格納することができる。クォータサーバは、短期クォータ制限と長期クォータ制限の両方の構成を許すことができる。例えば、サービスインタフェース102は、1日、数時間、またはシステムに対するユーザの登録の期間全体などの、或る特定の期間中の最大限の数の呼出しを実行することが可能である。そのようなアプローチは、活動のバーストが生じることを許すことが可能であるが、予測のつかないスクリプトが、短期間内に1日のユーザのクォータ全部を使い果たすことを防止することが可能である。
一部の実施形態において、ユーザは、難読化されたユーザIDを介してクォータサーバに識別され、この難読化は、識別サーバの難読化ツール、およびプログラム固有のキーによって実行される。クォータサーバは、ユーザごとのオーバライドを許し、したがって、特定のユーザが、さらなる容量を要求して、許可されることも可能である。クォータ制限は、所与のマクロ(例えば、文書承認システム)が数百、または数千さえものユーザを有することが可能であるため、実行されるマクロ、またはマクロ所有者にではなく、トリガするユーザに適用されることが可能である。
一部の実施形態において、サービスインタフェース102は、異なる特定の顧客に関して異なるクォータ構成を適用することが可能である。例えば、或るユーザが、或る特定のウェブクライアントサービスのメンバである場合、そのサービスを使用する際、そのユーザに、非メンバと比べて、より高いクォータが与えられることが可能である。また、特定のドメインからのユーザに、他のドメインからのユーザと比べて、より高いクォータが与えられることも可能である。また、各ユーザが、以上と組み合わせて、異なるマクロに関して異なるクォータレベルを有することも可能である。例えば、特定のユーザに、ベースラインを基準とした「基本」レベルが割り当てられることが可能であり、例えば、或るユーザが、100というベースラインで50と評価されることが可能であり、つまり、そのユーザは、平均のユーザのクォータの半分を受け取る。特定のマクロが、ベースラインを基準とした類似する割当てを有することが可能であり、あるいは絶対的割当てを有することが可能である。例えば、或るマクロに、1日当り40回の実行というベースラインが割り当てられることが可能であり、したがって、以上にリストアップされたユーザは、そのマクロを1日当り20回(50/100、すなわち、0.5掛ける40回)、実行することができる。
1つの特定の例において、システム100は、1日当り送られる電子メールの数を制限するクォータ強制層を提供することができる。同様に、クォータ強制層114a〜114bは、所定のしきい値に達した後、「イベント作成」呼出しをブロックすることによって、特定のユーザが作成することができるカレンダイベントの数を制限することができる。さらに別の例において、システム100は、メモリ使用をさらに絞り、悪意のあるマクロ、または下手に構築されたマクロが余りにも多くの大きいメモリオブジェクトを割り当てることを防止するように、メモリオブジェクト割当てをカウントすることができる。また、他のクォータ強制規則が、システム100によって実施されることも可能である。
一部の実施形態において、ラッパ110a〜114bが、サービスプロバイダも保護する。例えば、サービスインタフェース102が、スクリプトが禁止されたJavaオブジェクトにアクセスすることを防止するクラスシャッタインタフェースを含むことが可能である。詳細には、サービスインタフェース102が、クラスシャッタインタフェースを用いて、スクリプトおよびマクロに可視であるJavaクラスを選別することが可能である。そのような例において、クラスシャッタは、ユーザコードが、暗黙に、または明示的に、ロードしようと試みるクラスの修飾クラス名を渡される。クラスシャッタインタフェースは、一般に、所与の名前を有するJavaクラスまたはJavaオブジェクトが、スクリプトまたはマクロに開示されることを許可されている場合に限って、真であるブール値を返す。さらに、サービスインタフェース102は、スクリプトエンジン、セキュリティラッパ110、ログ記録層112、クォータ強制層114、Beans、ならびにstring、floatなどのJavaプリミティブクラスが利用できるようにされるJavaクラスを制限する。このことは、ユーザが、環境変数、または他のJavaオブジェクトにアクセスすることを防止することが可能である。
一部の実施形態において、クラスシャッタは、悲観的な性質であることが可能であり、クラスおよびデータコンテンツの事前定義されたホワイトリストだけを使用することによって動作することが可能である。例えば、ホワイトリスト上に明示的に存在しないいずれのクラスも、拒否されることが可能であり、さらにワイルドカードは、使用され得ない。このホワイトリストは、プログラミング上のBeans、Javaプリミティブ、または他の承認されたデータコンテンツを含むことが可能である。
アクセスメソッド108aおよび108bは、プログラマが、サービスまたはアプリケーションにデータを転送する際、およびサービスまたはアプリケーションからデータを転送する際に使用するAPIを表す。アクセスメソッド108a〜108bは、マクロ104a〜104dが接続して、いくつかのアプリケーションおよびサービスに容易にアクセスすることができる通信プロトコルを含むことが可能である。それらのアプリケーションは、多種多様であることが可能であり、電子メールアプリケーション、スプレッドシートやワードプロセッサなどの生産性向上アプリケーション、地図アプリケーション、ならびに単一のウェブページ上で一緒に提示され得る様々なアプリケーションの組合せを含むことが可能である。それらのアプリケーションは、マクロ104からカスタマイズされた出力をもたらすようにユーザによってアクセスされる、または開発されることが可能である。
システム100は、標準のウェブブラウザからアクセスされることが可能である。一部の実施形態において、アクセスメソッド108aおよび108bは、特定のユーザにサービスまたはアクセスを拒否することが可能である。例えば、アクセスメソッド108aが、クォータ最大限度が使い果たされた場合、Javaオブジェクト106aへのアクセスを拒否することが可能である。
また、ホストとなるコンピュータシステム100は、プログラムアプリケーション116および118も含む。アプリケーション116および118には、電子メールアプリケーション、スプレッドシートアプリケーション、ワードプロセッシングアプリケーション、写真共有アプリケーション、プレゼンテーションパッケージ、財務計画アプリケーション、またはアプリケーションの組合せなどの、ユーザが(例えば、マクロを介して)実行させる、または動作させることが可能な任意のアプリケーションが含まれ得る。一部の実例において、ユーザは、デスクトップ上で、またはアプリケーションのプルダウンリストにおいてアプリケーション名をダブルクリックすることによるなど、実行されるべきアプリケーションを選択することによって、アプリケーションを明示的に開始することができる。他のアプリケーションは、ユーザが、電子メール添付ファイル(例えば、テキストファイルまたはスプレッドシート)をクリックした際、またはユーザが、知られていないファイルをクリックした際などに、暗黙に開始されることが可能であり、それらのいずれの際にも、そのファイルの拡張名、または他の定義された関連付けに基づくなどして、そのファイルに関連する対応するアプリケーションの実行が自動的に開始され得る。また、アプリケーションは、ユーザが実行することを開始していることが可能な実行中のマクロによってアプリケーションが呼び出された場合に、開始されることも可能である。アプリケーションを開始すること、または実行することのさらに別の例において、ユーザのアカウントにおける電子メールメッセージの受信などのイベントが、システム100上のユーザのアクションまたは現在の状態とは無関係に生じることが可能であり、このことが、いくつかのアプリケーションの実行を開始する、または再開することが可能である。例えば、そのイベント(例えば、受信された電子メールメッセージ)が、マクロ(例えば、スプレッドシートを更新し、件名を追加する)をトリガすることが可能である。
ホストとなるコンピュータシステム100は、インターネットを介してサードパーティから、そのようなサービスの要求者に情報を送るために提供されるサービスなどの、SOAPサービス120などのサービスも含む。サービスインタフェース102は、ネットワーク122を介してSOAPサービス120へのアクセスを提供することができる。SOAPサービスは、構造化されたデータを交換するのに使用され得る、プラットフォーム独立のウェブサービスである。SOAPサービス120に関するフレームワークが、ウェブサービスプロトコルスタックの基礎層を形成して、ウェブサービスが構築され得る基本的メッセージングフレームワークをもたらすことが可能である。SOAPサービスアーキテクチャは、一般に、メッセージフォーマット、MEP(メッセージ交換パターン)、基礎をなすトランスポートプロトコル結合、メッセージ処理モデル、およびプロトコル拡張性に関する仕様のいくつかの層から成る。
サービスインタフェース102は、SOAPサービスまたは他のサードパーティサービスに、ユーザが、そのサービスにおける仕様についての知識なしに、それらのサービスにアクセスすることができるように、サービス仕様の1つまたは複数の層を外部に取り出すことによって、アクセスすることが可能である。詳細には、サービスインタフェース102は、元のサービス120に接続(フックイン)する仮想SOAPサービス124を作成することによって、SOAPサービス120を提供する。一例において、フックは、仮想SOAPサービス124の中に収容された動的プロキシオブジェクト126の形態であることが可能である。動的プロキシオブジェクト126は、例えば、「java.lang.reflect」パッケージにおいて提供されることが可能である。詳細には、このパッケージは、配列オブジェクトを作成するため、および操作するための静的メソッドを含む配列クラスと、指定されたインタフェースを実施するプロキシクラスの動的作成をサポートするプロキシクラスとを提供することが可能である。プロキシクラスの実施は、「InvocationHandler」インタフェースを実施する、提供されたオブジェクトによって提供される。「InvocationHandler」インタフェースは、パラメータを使用してオブジェクトまたはメソッドを呼び出すことが可能であり、第1のパラメータは、動的プロキシオブジェクト128であり、第2のパラメータは、そのプロキシによって実施されるインタフェースからのメソッドを表すメソッドオブジェクトであり、さらに第3のパラメータは、そのインタフェースメソッドに渡されるパラメータの配列である。呼出しメソッドが、プロキシインタフェースメソッドを呼び出したコードに返される結果を含むオブジェクト結果を返す。
サービスインタフェース102は、サービスの記述を使用して仮想SOAPサービス124を作成することができる。この記述には容易にアクセスすることができる。なぜなら、ウェブサービスは、典型的には、ウェブ上で利用可能な公開のサービスであり、ウェブ上では、このウェブサービスについての記述はしばしば機械可読な方法で提供されるからである。サービスインタフェース102は、これらの記述を使用して、仮想SOAPサービス124を作成することができる。システム100は、Javaリフレクションおよび動的プロキシを使用して、具体的なプリミティブオブジェクトの錯覚を生じさせることによって、動的SOAPサービスAPIを作成することができる。また、Javaバイトコード生成を使用すること、または異なるプログラミング言語のフィーチャを使用することなどの他の方法が、この目的を達するのに使用されてもよい。
SOAPサービス120は、一般に、WSDL(ウェブサービス記述言語)によって定義される。システム100は、WSDLを受け入れ、そのサービスに関する最上レベルのメソッドで生成されるJavascript(登録商標)オブジェクトを返すSOAP Beanを作成することが可能である。さらに、システム100は、そのサービスがいずれのオブジェクトを受け入れるか、いずれのフィールドが生成されるべきかなどを含む、そのサービスに関する簡単な文書化(ドキュメンテーション)をもたらすメソッドを提供することが可能である。
特定の例として、NWS(国立測候所)が、気象に関する詳細を獲得するためのウェブサービスを提供する。ユーザは、システム100を介して、NWSの、よく知られた、公開されたURLをアドレス指定し、そのようなサービスを使用して個人向け最新気象情報へのアクセスを得ることができる。結果は、ユーザが、ユーザのスクリプトに対する呼出しを行うのに使用することができる、動的に生成されたプログラミング上のオブジェクト(例えば、Javaオブジェクト106a)である。特に、ユーザは、以下の擬似コードを使用してNWSのSOAP APIと連絡をとるNWS Beanを作成することもできる。
var service=
SoapApp.getWsdl('http://www.weather.gov/WeatherService.wsdl');
var weather=service.getCurrentWeather({zipCode:'10003'});
var temp=weather.temperature;
以上の例において、システムは、動的プロキシオブジェクト126とJavascript-object-to-map-of-attributesスクリプトの両方を使用して、Javascript実装とJava実装の間で移動することができる。XMLおよびJavascriptは、通常、型付きではないので、システム100は、Javaクラスの生成を完全に回避することができる。特に、システム100は、WSDLを使用して、いずれのオブジェクト型が特定の型のフィールドを有するか、およびいずれのメソッドが、いずれの引数をとり、特定の値型を返すかという「文法」を生成することができる。このため、サードパーティサービスオブジェクトまたはSOAP Beanは、事実上、WSDL(例えば、fastnetを介して獲得された)をオブジェクトグラフにするためのマシンとなる。すると、システム100は、SOAPサービス120、または他のサードパーティサービスに対するhttp/fastnet要求をもたらす関数呼出しを作成することができる。システム100は、XML(SOAP呼出しが予期する)と、属性のマップ(Javascriptコードが提供し、受け取る)の間で整列化を行うことができる。
コマンドマッピングが、マクロを生成する際にユーザによって使用される一般的なマクロ言語から、様々なサービスまたはアプリケーションに送られるべきコマンドを生成するのに使用され得る。例えば、そのマクロ言語でコマンド、またはコマンドのグループを受け入れ、それらのコマンドをターゲット言語に翻訳するために(さらに、データまたはコマンドに関してターゲット言語からマクロ言語に翻訳するために)、規則を定義することが可能である。異なる複数のサービスまたはアプリケーションを使用する場合、異なる複数の規則セット、または他のコマンドマッピングの仕組みを使用することが可能である。ここで、各サービスまたは各アプリケーションとマクロ言語との間で翻訳を行うために、そのようなサービスまたはアプリケーションにマッピングを行うことが可能である。
いくつかの実例において、システム100は、複数のマクロ言語をサポートすることも可能である。そのような状況で、各マクロ言語と各サービス言語または各アプリケーション言語との間でマッピングの仕組みを提供することが可能である。代替として、コマンド、および他のデータが、中間の、一般的な形態に変換されてから、次の構成要素に再び変換されてもよい。そのようなアプローチは、多くのマクロ言語(M)および多くのサービスまたはアプリケーション(N)が存在する場合に有益である可能性があり、したがって、M×N個のトランスレータではなく、M+N個のトランスレータしか存在しなくてもよい。
一般に、サービスインタフェース102と組み合わされたマクロサーバサブシステム(ホストとなるコンピューティングシステム100に関連付けられている)は、サービスまたはアプリケーションの抽象化されたバージョンを提供することによって、マクロコードを書くユーザが、統一され、一貫した仕方でマクロを書くことを許すことができる。サービスまたはアプリケーションの抽象化されたバージョンは、一般に、そのバージョンの記述によって定義される。この記述は、1つまたは複数のマクロ104を使用してサービスを呼び出すと即時に、複数のユーザがアクセスすることができる仮想サービスを作成するのに使用され得る。このことは、サービス機能またはアプリケーション機能をプログラミングし呼び出す簡単な方法を、エンドユーザに提供する。
図2は、共有マクロを動作させることができるホストとなるコンピュータシステム200の概略図である。一般に、システム200は、マクロが、ユーザによって作成され、ホストとなるシステム上で保存され、共有され、アクセスされ、実行されることが可能な仕方の一例を示す様々な構成要素を提供する。
このシステム200において、マクロサーバサブシステム202は、スクリプト情報格納データストア206の中に持続するようにマクロコードを保存するためのロケーションを提供し、保存される情報は、マクロライブラリ名、スクリプト内容、およびマクロ所有者の識別子(例えば、難読化されたユーザID、または他の識別子を使用する)を含むことが可能である。マクロが実行されると、その所与のマクロを実行するように、コマンドをマクロサーバサブシステム202に送ることが可能である。すると、そのコードは、スクリプト情報格納データストア206から取り出され、さらにスクリプトエンジン、またはスクリプトエクセキュータ208においてインスタンスを作成することが可能である。
異なるサーバ側アプリケーションのためのプログラミング上のAPIを表すJavaオブジェクトを、構築することが可能であり、さらに能力ベースのセキュリティラッパの中にラップすることが可能であり、さらにプログラマに可視のラップされたサービス(つまり、「Beans」)になる。ラップされたサービス210は、マクロサーバサブシステム202が、例えば、マクロ実行と関係するラップされたサービスの消費側に提供することが可能な、関係のあるサービスのすべてを含むことが可能である。ラップされたサービス210は、容易にやりとりされることが可能であるようにパッケージ化された、その他のオブジェクトのコレクションである任意の関係のあるオブジェクトであり得る。
ラップされたサービスは、バックエンドサービスと対話する公開メソッドを開示するJavaビジネス代理を含むことが可能である。これらの公開の方法は、メソッド、クラス、ストリング、スプレッドシート、API(アプリケーションプログラミングインタフェース)、ならびに様々な言語(例えば、Javaなど)によって提供される他のツールをパッケージ化するためのパッケージ、または他の仕組みの中に含められることが可能である。これらの公開メソッドは、例えば、マクロを定義し、実行するのに使用され得るリソースを開示する(または公開する)ことが可能である。これらの公開メソッドの実施のいくつかの詳細は、プライベートに保たれることが可能であり、このことは、適切なレベルの情報隠蔽および情報抽象化をもたらすことが可能である。公開メソッドは、いくつかの異なるタイプのオブジェクトにわたって同様に見えて、ある程度一貫した外観と雰囲気をマクロユーザに開示し、さらに、これにより、或るレベルの多相性をもたらすことが可能である。その結果、ラップされたサービスのコレクションは、オブジェクト指向の、イベント駆動の環境において、ユーザによるマクロの使用を円滑にすることが可能である。
これらのラップされたサービス、つまり、Beansは、この例示的なシステム200において、各プロパティ(例えば、スプレッドシート、カレンダなど)に関して公開のメンバを有する最上レベルのJavaオブジェクトにアタッチされる。この最上レベルのJavaオブジェクトは、標準の、所定のラベルを有するスクリプトエクセキュータの環境に関する範囲内に挿入される。
したがって、ユーザのJavaScriptコード、すなわち、
var doc=google.spreadsheets.create("my new doc"); (1)
が実行されると、最上レベルオブジェクトの「spreadsheets」フィールド内のJavaオブジェクト上の「create」Javaメソッドが呼び出される。このメソッドのJava実装は、「CREATE」コマンド、および新たなタイトル(例えば、「my new doc」)に対応する引数、ならびにスクリプトランナの難読化された識別子を使用して、スプレッドシートサーバに対するリモートプロシージャコールを行う。スプレッドシートサーバは、その新たなスプレッドシートを作成し、リモートプロシージャコールに応答してそのサーバのキーを返す。マクロサーバは、その新たなキーを含む、新たに作成されたスプレッドシートを表す新たなJavaオブジェクトを作成する。そのJavaオブジェクトは、「rename」、「insertSheet」などのいくつかのスプレッドシート操作のためのメソッドを含む。また、そのオブジェクトは、能力ベースのセキュリティラッパの中にラップされ、返される。スクリプトエクセキュータが、このオブジェクトをNativeJavaObjectラッパの中に内部でラップし、このオブジェクトを前述の変数「doc」に返す。
オブジェクトをラップすることの一部の実施形態において、任意の適切なサービス(例えば、スプレッドシート、カレンダ、電子メールなど)が、Java動的プロキシの中にラップされたオブジェクトを返すことが可能である。セキュリティ、ログ記録、およびクォータなどの別々のプロキシが存在することが可能である。各プロキシは、公開メソッドを定義することが可能な、そのプロキシがいずれのサービスを開示しているかという記述(例えば、「Spreadsheet」、「SpreadsheetRange」、「EmailService」などのJavaインタフェース)を組み込む、または使用することが可能である。それらの異なるラッパに適切な、それらのインタフェースに関する注釈が存在することが可能である。
例えば、スプレッドシートサービス上の「create」メソッドが、新たなスプレッドシートを作成することが可能である。このメソッドは、このメソッドがWRITEメソッドであると宣言する1つの注釈を有して、例えば、そのスクリプトが、スプレッドシート文書のユーザのコレクションに書き込もうと試みる(さらに、そのスクリプトは、ユーザが、そのスクリプトに関してWRITE特権を許可していない場合、実行時に失敗する)ことをユーザに警告する仕組みを提供することが可能である。基本的に、セキュリティラッパは、所与のメソッドの宣言された、要求される許可(WRITEなど)が、ユーザの許可トークンの中に入っていることを確実にするのを助ける。そのメソッドが許可された場合、そのメソッドは、呼出しを次の層に送る。
また、特定のユーザがマクロに関する動作にアクセスすることができる回数を制限することによって、セキュリティが提供されることも可能である。そのような機能を実行するのに、「create」メソッド上に、このメソッドに対する呼出しが、エンドユーザの「create spreadsheet」クォータに照らしてカウントされるべきことを告げるクォータ注釈が存在することが可能である。クォータラッパは、所与のユーザが何回、動作が実行されるようにしたかを常に把握しているクォータサービスを呼び出す、または使用することが可能である。このメソッドは、例えば、ユーザがクォータを超えた場合、失敗する可能性があり、超えていない場合、このメソッドは、それを再び次の層に送る。ユーザに関するクォータは、1日、1週間、または1カ月などの決められた期間にわたって測定されることが可能であり、さらに定期的な時点でリセットされる、またはデクリメントされることが可能である。
また、マクロ実行の写しが、呼び出された各メソッドのストリングバージョン、および与えられた引数を記録するログ記録層によってもたらされることも可能である。
ラッパサービスクリエータ212が、最上レベルのラップされたサービスを作成することが可能であり、これらのサービスの範囲は、マクロ、およびマクロの環境に依存する。例えば、ラップされたサービスクリエータ212は、そのマクロを実行しているエンドユーザが、そのマクロに明示的に許可した能力を調べることが可能であり、さらにそのマクロの状態に対応する最上レベルのBeansを作成することが可能である。この状態は、例えば、存在する場合、現在の文書(例えば、電子メール、テキスト文書、図面、スプレッドシートなど)、およびユーザ認証を含むことが可能である。ラップされたサービスクリエータ212は、環境に基づく能力を有する、最上レベルのラップされたサービスを生成することが可能であり、さらにユーザが、例えば、マクロを定義し、実行することができるスクリプトエクセキュータ208の実行環境の中に、それらのラップされたサービス210を投入することが可能である。或る意味で、ラップされたサービスクリエータ212は、Beansの生産者または工場、つまり、「Beans工場」と考えられることが可能である。
作成可能なラップされたサービス210のタイプには、例えば、スプレッドシートアプリケーション、カレンダアプリケーションなどの能力ラップされたインスタンスが含まれる。このJavaオブジェクトを、実行範囲に挿入することが可能である。このオブジェクトのソースを、(例えば、「TopLevel」というラベルを使用して)このオブジェクトを識別するのに使用することが可能である。したがって、例えば、「TopLevel.spreadsheets」が、能力ラップされたオブジェクト(例えば、SpreadsheetApplicationApiオブジェクト)に対する参照になることが可能である。オブジェクトの公開メソッドを、JavaScriptプログラミング環境の中にJavaオブジェクトとして反映することが可能であり、さらにマクロを利用できるようにすることが可能である。
例えば、以下のようなJavaScriptコード、すなわち、
var doc=google.spreadsheets.getActiveSpreadsheet();
var otherDoc= google.spreadsheets.openByName("MyOtherDoc");
var value=doc.find("A1").getValue();
otherDoc.find("B2").setValue(value); (3)
が、既存のスプレッドシート(例えば、「MyOtherDoc」と呼ばれるスプレッドシート)を開き、現在のスプレッドシートからのセルA1の値を新たなスプレッドシートのセルB2にコピーすることが可能である。「find」メソッドによって返されるRangeオブジェクトなどのJavaオブジェクトが、他のすべてのJavaオブジェクトと同様に、能力ラップされ、さらに、認証されたユーザが、関係のあるスプレッドシートへのアクセスを有さない場合、失敗することが可能である。例えば、以上に提示されるセルをコピー/ペーストする例において、実行が成功するのに要求されるアクセスは、活性のスプレッドシート上の読み取りアクセス(例えば、getValueによって要求される)、およびターゲットスプレッドシート(例えば、スプレッドシート「MyOtherDoc」)上の書き込みアクセス(例えば、setValueによって要求される)である。
スクリプトエクセキュータ208は、マクロに関するコンテキストを作成すること、および最上レベルのラップされたサービス210の実際の挿入を実行することを担うことが可能である。実行される1つのスクリプトが、その他のスクリプトの全体的な範囲を「毒する」可能性を防止するように、各マクロ実行に関して新たな最上レベル範囲を作成することが可能である。マクロコンテンツには、クラスシャッタまたはクラスフィルタの実装をロードすることが可能であり、このことは、承認されていない(例えば、許容できるクラスのホワイトリスト上にない)Javaクラスの作成を防止する。さらに、スクリプトエクセキュータ208は、スクリプトが無限ループに入った場合、そのことを検出するようになど、暴走するスクリプトを御するための命令カウンタを作成することが可能である。一部の実施形態において、暴走するスクリプトは、スクリプトマネージャ204によって永久に終了されることが可能である。
スクリプトエクセキュータ208は、解析すること、構文を確認すること、関数呼出し、マクロ実行、およびマクロ再開を含め、様々な機能を担うことが可能である。解析機能は、スクリプトを検査して、スクリプト情報データストア206などのデータストアの中のスクリプトストレージの中で発見された関数およびマクロのリストを返すことが可能である。例えば、図1を参照すると、解析機能の結果として検出される関数およびマクロには、スクリプトコードまたはマクロコード(例えば、マクロコード112)の中に埋め込まれることが可能なget name関数114、check name関数116、get location関数118、またはその他の関数、マクロなどを含めることが可能である。
システムによってサポートされる他の機能を、サーバ側システム200上でマクロのコレクションを管理するのを助けるのに使用することも可能である。例えば、構文確認機能が、スクリプトを格納する前に、そのスクリプトに誤り(例えば、構文の誤り、言語コンパイルの誤り、キーワードの誤用など)が存在するかどうかを判定することが可能である。構文の誤り、またはその他の誤りが検出された場合、それらの誤りは、通信されて、ユーザまたはスクリプトプログラマに警告を行うことが可能である。
呼出し機能は、マクロの中の関数を「呼び出す」(または実行を開始させる)ことが可能である。この呼出し機能は、セル内(例えば、スプレッドシート内)の関数呼出しに関して与えられた特権を有するバージョンなどの、マクロを実行することの限られたバージョンであることが可能である。例えば、マクロの限られたバージョンは、値を返すことだけに限定され、その上副作用が生じることを許さないようにすることが可能である。
マクロ実行機能およびマクロ再開機能は、マクロを開始するのに、さらにマクロを再開するのに使用することが可能である。例えば、マクロ実行機能は、マクロの初期の実行を開始することが可能である。一部の事例において、マクロの実行は、ユーザからのさらなる入力を要求することが可能である。この事例において、マクロの実行は、ユーザからの入力を待って、一時停止される、または待ち状態に入ることが可能である。ユーザ入力が与えられると、マクロ再開機能は、停止していたマクロの実行を続けることが可能である。
スクリプト情報リポジトリ206は、データストアの役割をして、スクリプト/マクロの作成、格納、取出し、更新、削除などの動作を提供し、さらに/またはサポートすることが可能である。スクリプト情報リポジトリ206の中に格納されたスクリプトは、ユーザライブラリごとに、個々のスクリプトごとに、またはアプリケーション(例えば、電子メール、スプレッドシート、ワードプロセッシング文書などのためのアプリケーション)ごとに編成されることが可能である。動作は、ユーザのライブラリ全体に対して、またはライブラリの中の個々の要素に対して実行されることが可能である。例えば、1つの動作が、ユーザライブラリを、そのライブラリのID(例えば、そのライブラリの名前に基づく主キールックアップ)によって取り出すことが可能である。別の動作が、マクロまたはスクリプトを表す文書などの、所与の文書にリンクされたすべてのユーザライブラリを取り出すことが可能である。
スクリプト情報リポジトリ206によって提供される取出し動作には、所与のユーザライブラリ上の所与のユーザに関する許可を取り出す、所与のユーザによって所有されるすべてのユーザライブラリを取り出す、継続レコードを、そのレコードのIDによって取り出すなどの動作が含まれることが可能である。
スクリプト情報リポジトリ206によって提供される作成/更新動作には、ユーザライブラリを作成する/更新する動作、抽象オブジェクトのキー(例えば、文書ID)に対するライブラリからの関連付けを作成する動作、所与のライブラリ上の所与のユーザに関する許可を作成する/更新する動作、新たな継続レコード(例えば、所与のユーザに関して、シリアル化されたバイナリデータを有する)およびライブラリを作成する動作、およびその他の作成/更新動作を含めることが可能である。
削除を実行するスクリプト情報リポジトリ206によって提供される動作には、継続レコードを削除する動作、抽象オブジェクトに対するライブラリからの関連付けを削除する動作、ならびに許可およびリンク継続に関連付けられた子オブジェクトを含め、すべての子オブジェクトを除去して、ライブラリを削除する動作を含めることが可能である。スクリプト情報リポジトリ206の例示的な論理構造が、図5に関連して後段で説明される。
スクリプトマネージャ204は、マクロサーバサブシステム202の基礎をなす構成要素206から219にコマンドを委任することが可能である。特定の例示的なコマンドの説明が後に続き、基礎をなす構成要素206から219に対する委任制御パスは、いくつかのアクションが、可能な場合、別の順序で行われる可能性があるものの、全体的に時系列で文字が付けられた、一連の文字付きのプロセス矢印1から6で示される。
スクリプトマネージャ204が(例えば、委任によって)実行することが可能な1つのコマンドは、ユーザライブラリを格納することである。このコマンドは、例えば、ユーザ特権、または他のセキュリティに基づいて、実行を制限することが可能である。例えば、ユーザライブラリ表現(例えば、プロトバッファまたはプロトコルバッファ)が、ライブラリIDを含む場合、スクリプトマネージャ204は、実行するユーザが、そのライブラリを変更することを許されることを確実にすることが可能である。許可が行われた場合、スクリプトマネージャ204は、その許可をストレージ層に書き込み、そのライブラリの新たな表現を返すことが可能である。IDが存在しない場合、新たなIDが作成されることが可能であり、その新たな生成されたIDを含む表現が、返されることが可能である。ライブラリを格納することは、例えば、ライブラリの中の関数を解析すること(例えば、スクリプトエクセキュータ208を使用して)、それらの関数をライブラリDAOオブジェクトに追加すること、構文の誤りを検出すること(例えば、スクリプトエクセキュータ208を使用して)、ライブラリ内容を格納すること、および所有者を格納することを含むことが可能である。図2を参照すると、ユーザライブラリを格納することに関与する構成要素は、例えば、プロセス矢印1、2、および6によって示されることが可能である。
プロトコルバッファは、例えば、ユーザライブラリ表現のために使用される場合、オーバザワイヤでシリアル化される、またはデータベースの中にバイナリ形態で永続させられることが可能であるデータ構造を含むことができる。このデータ構造は、通信プロトコルを施行するために強く型付けされたフィールドを使用することが可能である。
スクリプトマネージャ204が実行することが可能な別のコマンドが、ライブラリをインポートすることである。このコマンドは、所与の文書(例えば、スプレッドシート、電子メールカレンダ、または他の任意のアタッチ可能なコンテキスト)に対するライブラリのリンクまたは他の関連付けを作成することが可能である。例えば、電子メールメッセージを、ユーザの所与のメールアカウントに関連付けることが可能である。このリンクの目的は、基礎をなす文書が、いずれのマクロがその文書に関連付けられているかを迅速に見分けて、例えば、「Run」メニューの中で表示することが可能であるようにすることである。例えば、ライブラリをインポートするコマンドが、データストアの中に「Link」テーブルエントリを作成することが可能である。図2を参照すると、ライブラリをインポートすることに関与する構成要素は、例えば、プロセス矢印1および2によって示されることが可能である。
スクリプトマネージャ204が実行可能な別のコマンドであるコピーコマンドは、既存のライブラリをコピーして、そのライブラリの内容の複製を作成することが可能である。例えば、そのライブラリの中に含まれるスクリプトおよびマクロのすべてを、新たなライブラリ名にコピーすることが可能である。コピーする動作は、ライブラリの内容の複製を作成するが、それらの関連付けはコピーされない。新たに作成されたライブラリの所有者は、現在の所有者に設定される。コピー動作が完了すると、その新たなライブラリのIDが返される。例えば、コピーコマンドは、リンク、継続、または許可を全くコピーしてくることなしに、データストアの中で新たな「UserLibrary」テーブルエントリを作成することが可能である。図2を参照すると、ライブラリをコピーすることに関与する構成要素を、例えば、プロセス矢印1および2によって示すことが可能である。
ライブラリ削除コマンドは、例えば、許可を確認することが可能であり、許される場合、ライブラリ削除コマンドは、データストアからライブラリを削除することが可能である(例えば、スクリプト情報206の中で)。例えば、ライブラリ削除コマンドは、「UserLibrary」テーブル、およびすべての子テーブルからエントリを除去することが可能である。フロントエンドは、例えば、「間違いないですか?」という問合せを行うことが可能である。ライブラリを削除することに関与する構成要素を、例えば、プロセス矢印1および2によって示すことが可能である。
ユーザに関してライブラリを獲得するコマンドは、所与のユーザによって所有されるライブラリを、そのユーザのIDに基づいて返すことが可能である。例えば、コマンドは、所有者フィールドが現在のユーザである、スクリプト情報206の中に格納されたユーザライブラリ(例えば、UserLibraryまたは他のテーブル)を返すことが可能である。図2を参照すると、ユーザに関するライブラリを獲得することに関与する構成要素を、例えば、プロセス矢印1、2、および4によって示すことが可能である。
文書に関してライブラリを獲得するコマンドは、所与の文書によってインポートされたライブラリを返すことが可能である。例えば、ライブラリ獲得コマンドは、合致する「documented」フィールドがないかリンクテーブルをスキャンし、親「UserLibrary」を返すことが可能である。図2を参照すると、ドキュメントに関するライブラリを獲得することに関与する構成要素を、例えば、プロセス矢印1、2、および4によって示すことが可能である。
ライブラリ分類コマンドは、「SAMPLES」などの「仮想」文書に関連付けを追加することが可能である。例えば、ライブラリ分類コマンドは、その所与の名前(SAMPLESなど)を有するリンクテーブルの中にエントリを作成することが可能である。図2を参照すると、ライブラリを分類することに関与する構成要素を、例えば、プロセス矢印1および2によって示すことが可能である。
分類に関してライブラリを獲得するコマンドは、所与の分類を有するすべてのライブラリを返すことが可能である。例えば、分類に関してライブラリを獲得するコマンドは、文書に関してライブラリを獲得することと同様であることが可能である。図2を参照すると、分類ごとにライブラリを探索することに関与する構成要素を、例えば、プロセス矢印1および2によって示すことが可能である。
関数評価コマンドは、ライブラリから関数を取り出して、その関数を実行のためにスクリプトエクセキュータ208に送ることが可能である。図2を参照すると、関数を評価することに関与する構成要素を、例えば、プロセス矢印1、2、3、5、および6によって示すことが可能である。
マクロ評価コマンドは、入力パラメータ(例えば、存在する場合、ライブラリID、マクロ名、および現在の文書についてのコンテキスト情報)を与えられると、ラッパを使用してプログラミング上のBeansを作成して、ラップされたサービスを実行のためにスクリプトエクセキュータ208に送ることが可能である。図2を参照すると、マクロを評価することに関与する構成要素を、例えば、プロセス矢印1、2、3、5、および6によって示すことが可能である。
マクロ継続コマンドは、マクロライブラリIDおよび継続IDを与えられると、スクリプトエクセキュータ208上で継続動作を呼び出すことが可能である。例えば、そのようなコマンドは、休止させられた実行されるマクロが積極的に実行されることを続けるようにすることが可能である。図2を参照すると、マクロを継続することに関与する構成要素は、例えば、プロセス矢印1、2、3、および6によって示されることが可能である。
許可更新コマンドは、所与のユーザ、および所与のマクロライブラリに関する許可のセットに関して、データストアの中でエントリを更新する(または追加する)ことが可能である。図2を参照すると、許可を更新することに関与する構成要素を、例えば、プロセス矢印1および2によって示すことが可能である。一部の実施形態において、「get library」コマンド、およびその他のコマンドは、通常、スクリプトストレージ層に対してだけ作用し、スクリプトエクセキュータ208は呼び出さないことが可能である。
次に、システム200の別の構成要素を参照すると、コマンドサーブレット216が、マクロコントローラ(例えば、JavaScriptマクロコントローラ、「MacroController.js」)からの要求に応答することによって、マクロコマンドを実行することが可能である。この応答は、ユーザにはトランスペアレントであり、自動的であるリダイレクトなどの、リダイレクトとして行われることが可能である。1つの例示的なリダイレクト技術において、ブラウザクライアントが特定のURLに要求を行った時点で、リダイレクト規則が、その要求を、マクロサーバサブシステム202などのマクロサーバに向かわせることが可能である。コマンドサーブレット216が扱うことが可能な要求のタイプには、例えば、GET_ADMIN_PANEL、SET_SCRIPTなどの名前を有するいくつかの要求が含まれる。
例えば、GET_ADMIN_PANEL要求が、マクロ管理パネルの完全なHTMLを返すことが可能であり、さらにマクロコントローラ(例えば、MacroController.js)が、そのHTMLを終結ダイアログの中に挿入することが可能である。SET_SCRIPT要求が、スクリプト内容およびユーザライブラリIDをコマンドサーブレット216に送ることが可能である。コマンドサーブレット216は、ユーザライブラリを作成する/更新するスクリプトマネージャ204を呼び出すことが可能であり、このことが、パネル(分類およびライブラリ名を含む)の左側に関するHTML(例えば、GXPによって生成された)を返すことを可能にする。macrocontroller.jsが、そのHTMLを、左側パネルに関するdivにおいてレンダリングすることが可能である。
GET_SCRIPT要求が、スクリプトマネージャから所与のライブラリに関するスクリプト内容をフェッチすることが可能であり、さらにそのスクリプトを編集するために内容ペイン(GXPを介して生成された)を返すことが可能である。macrocontroller.jsが、そのHTMLを、パネルの内容divの中に入れることが可能である。
IMPORT_LIB要求が、ライブラリインポートコマンドを使用してScriptManagerを呼び出すことが可能である。この要求は、gxpを介してパネルの左側をレンダリングして、パネルの左側をmacrocontroller.jsに返す。
COPY_LIB要求は、IMPORT_LIBコマンドと同様であることが可能であるが、インポートコマンドではなく、コピーコマンドを使用する。DELETE_LIB要求は、IMPORT_LIBと同様であることが可能であるが、例えば、削除コマンドを使用して、gxpを介して管理パネルHTML全体を返すようにすることが可能である。CATEGORIZE_LIB要求が、「サンプルに追加する」フィーチャとして使用されることが可能である。import_libと同様に、CATEGORIZE_LIBは、ライブラリ分類コマンドを使用してスクリプトマネージャを呼び出して、再ドローイングのためにパネルの左側を返す。
RUN_MACRO要求は、文書の状態のマクロ名、ライブラリID、およびシリアル化された表現(例えば、現在の選択など)を受け入れ、その所与のマクロを実行するようにスクリプトエクセキュータ208を呼び出すことが可能である。誤りが生じた場合、誤りメッセージが、ユーザに表示されるようにmacrocontroller.jsに返される。ユーザが、そのマクロを許可しなければならない場合、ユーザを促すメッセージがmacrocontroller.jsに送り返されることが可能である。
マクロサーバサブシステム202は、ネットワーク224を介してアプリケーション220およびロケーションサーバ222と対話する。アプリケーション220は、ユーザのラップトップコンピュータ上で実行されているウェブブラウザなどの、ユーザデバイス226を使用しているユーザによって実行されているアプリケーションであることが可能である。ユーザデバイス226は、例えば、ウェブページ226aを表示することが可能である(例えば、スプレッドシートサーバを使用して)。ユーザのウェブブラウザは、ユーザのユーザデバイス226上のマクロの実行を制御するために、マクロコントローラ226bを使用することが可能である。
サードパーティプロセスおよびウェブページ228からの外部イベントが、マクロサーバサブシステム202内で定義されたマクロに関するトリガ機構の役割をすることが可能である。これらの外部イベントを、インターネットなどのネットワーク230を介して受信することが可能である。これらの外部イベントは、この場合、図1に関連して説明される外部イベント105に対応することが可能である。
この場合、システムは、ユーザが、マクロレコーダをインスタンス化すること、マクロレコーダによって追跡されるいくつかのアクションを実行すること、およびそれらのアクションの自動的実行のためにユーザが後に呼び出すことができる、それらのアクションの表現を保存することによって、マクロを記録することをやはり許すことが可能である。マクロ記録は、この実施形態において、通常、サーバ側で実行されることが可能である。ユーザが、記録可能なコマンドを実行すると(例えば、セル値を設定して、シートを挿入してなど)、コマンドが、スプレッドシートサーバに送られることが可能である。そのサーバは、サーバが「記録」モードに入っているか否かを認識することが可能であり、「記録」モードに入っている場合、そのコマンドを探し出し、同一の効果を有するスクリプトコードに対応する実行中のストリングバッファにテキストを書き込むことが可能である。
例えば、ユーザが、スプレッドシートのセルA1の中に「hello」とタイプした場合を考慮されたい。「範囲を設定する」を意味するコマンドID、「hello」という値、0の行、0の列、および0というシートID(例えば、そのシートが第1のシートである場合)を有するコマンドを、スプレッドシートサーバに送ることが可能である。このコマンドは、単にレコーダに向けられるだけでなく、このコマンドは、スプレッドシートサーバ上のセルに対する変更を実際に実行するコマンドであり、したがって、このコマンドは、記録が行われるか否かにかかわらず送られることに留意されたい。したがってレコーダは、スプレッドシートを機能させる既存のコマンドフロー上のワイヤタップと本質的に同等のものであることが可能である。
レコーダは、コマンドIDを調べて、そのコマンドIDが「範囲設定」コマンドであると理解することが可能である。生成すべき適切なコードが、「範囲」オブジェクトに対する「setValue」呼出しであることを知り、レコーダは、対応するテキストを生成すべき行と列を調べて、使用することが可能である。次に、レコーダは、シート識別子を調べて、使用し、そのシートに関する変数が既に存在するかどうかを判定することが可能である。その結果、マクロレコーダは、以下のようなテキストを生成することが可能である。
sheet.getRange('a1').setValue('hello'); (2)
このため、これらの構造により、コンピュータユーザは、ホストとなるコンピュータサービス上にログ記録すること、およびいくつかの異なるアプリケーションおよびサービスにアクセスすることができる。ユーザは、マクロを実行することを明示的に選択することが可能であり、あるいはそのマクロが、自動的にトリガされることが可能であり、さらにそのマクロは、そのアプリケーション、および他の関係のあるアプリケーションが、そのマクロによって参照される場合に自動的にインスタンス化されることが可能な、それらのアプリケーションにおいて実行されることが可能である。その結果、ユーザは、堅牢なオンラインサービスを提供する多種多様なデータ構造およびプログラミング構造にアクセスを有することが可能である。
図3Aは、ユーザにサードパーティデータオブジェクトを提供するためのプロセス300の流れ図である。プロセス300を、例えば、ネットワーク122または228を介してシステム100または200において実行することが可能である。一般に、プロセス300は、サードパーティウェブサービスからのサービスに関するマクロ言語においてユーザ要求を処理することを含む。ここで、それらのサービスは、他の1つまたは複数の言語またはプロトコルを使用して通信される。
この例におけるプロセス300は、ボックス302で始まり、図1のシステム100のようなシステムが、WSDLを解析して、呼出し可能なメソッドを有するサービスのセット、および属性を有するデータオブジェクトにする。ステップ304で、システム100は、解析されたWSDLを使用して、自動化された仕方でアクセスされ得るJavaオブジェクトおよび/またはJavaサービスを作成することができる。例えば、ユーザは、特定のサービスに関する簡単な関数呼出しを行うことによって、作成されたJavaオブジェクトにフックされるマクロを作成することができる。前述したNWS気象の例において、ユーザは、この気象サービスが、「getCurrentWeather」メソッドを有すること、およびそのメソッドが、「zipCode」パラメータを有するオブジェクトを要求し、「temperature」フィールドを有する気象オブジェクトを返すことを知っているだけでよい。例えば、気象サービスは、「getCurrentWeather」や「getForecast」のようなメソッドを有するサービスオブジェクトを作成することが可能であり、これらのメソッドはそれぞれ、「regionDescription」を受け入れ、「weatherStatus」オブジェクトを返す。システム100がWSDLをスキャンすると、サービスインタフェース102が、将来の使用のために、これらのデータオブジェクトおよびサービスのコレクションを作成することが可能である。
システム100は、Javaリフレクションを使用して、システム100上で実行されているマクロに返され得る仮装化オブジェクトを作成することが可能である。Javaリフレクションは、所与のオブジェクトが別のオブジェクトを装うことができるJavaプログラミング言語のフィーチャである。ステップ306で、システム100が、それらのデータオブジェクトを存在しないオブジェクトとして仮装化して、この仮装化オブジェクトに対して行われたすべての呼出しが、メソッド名を表すストリングと、関係する引数に関するオブジェクトのセットとを有する呼出しとなるようにする。
何らかの時点で、ユーザは、マクロを明示的に実行することによって、またはマクロを暗黙に実行させることによって(例えば、サーバサブシステム上でマクロの実行をトリガするイベントを確立することによって、さらにイベントが実際に生じて、報告されることによって)など、システム100からサービスを要求することが可能である。プロセス300は、ステップ308で、サービスを求めるユーザ呼出しまたはユーザ要求が受信されているかどうかを判定することが可能である。システム100が、呼出しが受信されていないと判定した場合、システム100は、ステップ302でWSDLを解析して、サービスまたはメソッドにすることを続けることができる。システム100がサービス要求を受信した場合、システムは、ステップ310で、格納されたサービスレジストリの中でそのサービスを探し出すことができる。例えば、ユーザが、「service.getCurrentWeather」を呼び出した場合、「getCurrentWeather」ストリングがメソッドとして提供される。次に、システム100は、サービスの格納されたレジストリの中で「getCurrentWeather」ストリングを探し出すことができる。
ステップ312で、システム100は、要求されたサービスが利用可能であるかどうかを判定することが可能である。例えば、システムは、サービスのレジストリの中で「getCurrentWeather」ストリングが利用可能であるかどうかを検出することが可能である。このサービスが利用可能でない場合、システム100は、ステップ302でWSDLを解析して、サービスまたはメソッドにすることを続けることができる。「getCurrentWeather」ストリングが、サービスのレジストリの中で見出された場合、システムは、WSDLのそれまでの解析に基づいて、そのストリングにサブミットするのにどのようなパラメータが要求されるかを認識し、さらに要求されるパラメータを提供して、要求されるサービスと連絡をとることができる。例えば、システム100は、「getCurrentWeather」ストリングが「regionDescription」パラメータを要求すること、および「getCurrentWeather」ストリングが、「weatherStatus」ストリングを返すことを特定することができる。
ステップ314で、システム100は、パラメータ情報を使用して、入力引数を「regionDescription」パラメータの中で要求されるすべての変数を含む形態に作成する。ステップ316で、システム100は、次に、例えば、コマンド「getCurrentWeather」のXML表現、および「regionDescription」の中の変数でペイロードを満たして、実際の外部ウェブサービスに対するウェブサービス呼出しを実行する。外部ウェブサービスは、XMLのスニペットを返し、すると、システム100は、ステップ318で、そのスニペットが「weatherStatus」オブジェクトのように見えることを認識する。したがって、システム100は、ステップ320で、返されたXMLからの情報を使用して、「weatherStatus」オブジェクトに関する変数を生成し、さらにその情報もやはり、仮装化オブジェクトにする。例えば、「weatherStatus」オブジェクトが「temperature」フィールドを有する場合、システム100は、「気温」を求める要求が、サービスが返したXMLスニペットから解析された特定の値を取り出すべきことを知っているJava動的プロキシオブジェクト126を作成することができる。
したがって、例示的なプロセス300において、システム100は、ユーザが、サービス要求内容、およびサービスを「実行する」のに要求される変数を使用して、サードパーティウェブサービスにアクセスすることを許す。例えば、ユーザは、マクロまたはアプリケーションに入れられることが可能である、気温フィールドを有する気象オブジェクトを受信するのに、気象サービス、および所望される場所(例えば、郵便番号)を求める要求を提供するだけでよい。
図3Bは、コンピュータマクロを管理するためのプロセスの流れ図である。プロセス330は、例えば、ネットワーク122または228を介してシステム100または200において実行されることが可能である。一般に、このプロセスは、実行されるべきマクロを識別すること、そのマクロに関するマクロコードにアクセスすること、そのマクロの行を走査すること、ならびにそのようなコードからのコマンドを、他のプロトコルまたはフォーマットに翻訳して、または変換して、そのマクロが多様な範囲のサービスおよびアプリケーションと対話することができるようにすることを含む。
プロセス330が、ステップ332で始まり、ホストとなるコンピュータシステムにおいて格納されたマクロが識別される。例えば、このマクロは、このマクロを呼び出し、さらにこのマクロのためのパスおよび名前を含むURLから識別され得る。ユーザが、特定の郵便番号で、毎朝、特定の時刻に国立測候所(http://www.nws.noaa.gov)からの気象予報にアクセスして、その気象をユーザのモバイル電話機に送るマクロ104aを作成することが可能である。
ステップ334で、システム100は、次に、マクロの中のコマンドの行を走査することによって、マクロを実行することができる。例えば、システム100は、国立測候所、郵便番号、セル電話機番号、および特定の時間帯に対するリンクを含むコードを解析し、実行することができる。システム100は、ステップ336で、データベースにマクロを登録し、マクロ104aに応答する異なる複数のサービスの1つを識別することができる。例えば、システム100は、マクロ104aが、http://www.nws.noaa.govによって提供される気象予報サービスに適用されると判定することができる。
ステップ338で、システム100は、マクロ104aの中の1つまたは複数のコマンドを、システム100上のマクロ言語に関連するフォーマットから、識別されたサービス、または識別された複数のサービスに関連するコマンドフォーマットに変換する。そのような変換は、言語間のマッピング操作の一般的な概略を提供するコマンドマッピング構造を参照することによって、さらに、その後、翻訳されたコマンドに適切な定義、変数、パラメータ、または他の適切な情報を追加することによってなど、様々な仕方で行われることが可能である。
いくつかの実例において、翻訳されたコマンドは、マクロを格納し、実行するシステム内部の1つまたは複数のサービスからの、またはそのようなシステムの外部のサービスからの情報を求めることが可能である。このため、ステップ340で、システム100は、前述したような仕方で、特定のサービスプロバイダからサービス情報が受信されているかどうかを、サービスプロバイダに要求が行われた後に、判定する。例えば、システム100は、国立測候所サービスプロバイダが、識別されたマクロと関係する情報を提供しているかどうかを判定することができる。サービス情報が、所定の期間内に受信されていない、または検証されていない場合、システム100は、ステップ342で、誤りメッセージで応答し、マクロ104aを使用するサービスへのアクセスを拒否する。サービス情報が受信されている場合、システム100は、ステップ344で、所定のクォータを超えているかどうかを判定する。クォータを超えている場合、システム100は、ステップ342で、誤りメッセージで応答し、サービスへのアクセスを拒否する。しかし、クォータを超えていない場合、システム100は、ステップ346で、受信されたサービス情報を、マクロ104a、またはこのマクロに対応する(さらに、このマクロを介して、またはこのマクロの制御下で、その情報を受け取る)アプリケーションによって使用可能なフォーマットに変換する。次に、システムは、ステップ348で、その変換されたサービス情報を、このマクロに、またはこのマクロに対応するアプリケーションに提供することができる。
図4Aは、ウェブページ上で実行されているアプリケーションから呼び出されたマクロを実行するためのプロセス400の流れ図である。一般に、図4Aに示されるプロセスは、図3Aに示されるプロセスと同様であり、このプロセスが、複数構成要素システムにおける異なる構成要素の間で共有され得る仕方に関する例を示す。
例示的なプロセス400は、ブラウザ401aとマクロサーバ401bの間の対話に対応するステップを含む。例えば、プロセスのブラウザ側における対話は、ユーザが、スプレッドシートアプリケーションを実行しているクライアントデバイスを使用することを含むことが可能であるのに対して、実行されるマクロは、マクロサーバ401bなどのデータサーバシステムにおいて実行される(さらにデータサーバシステムによってデータを獲得する)ことが可能である。ブラウザ側で示されるプロセス400ステップは、ユーザとスプレッドシートアプリケーション(例えば、スプレッドシートサーバシステムによって提供される)の間で行われることが可能な、マクロとは無関係の一般的な対話に追加となる。マクロサーバ側で実行されるプロセス400ステップは、例えば、マクロサーバサブシステム202によって実行されることが可能である。また、プロセス400は、図1および図2に関連して前述したシステム100上、およびシステム200上のマクロ実行も表すことが可能である。一般に、マクロサーバ401b側におけるプロセス400のステップは、スクリプトマネージャ204によって制御されることが可能である。
ボックス402で、マクロを実行する要求が行われる。例えば、この要求は、クライアントデバイス上でブラウザアプリケーションを実行しているユーザによって開始されることが可能である。そのユーザが、マクロの実行をトリガするキー組合せを実行することが可能であり、あるいは実行は、或るアプリケーションにおいて或る特定の文書を開くことによって、そのアプリケーション上の或るコントロールのユーザ選択によって、またはサブシステムによって受信されている外部信号によるなど、ユーザの、システムとの対話とは別の仕組みによって開始されることが可能である。
ステップ404で、マクロの実行が開始される。この開始は、例えば、マクロサーバサブシステム202内で行われ得る。例えば、クライアントデバイスによって送られる、または識別されることが可能なアドレスに対応するマクロコードが、サブシステム上にロードされることが可能であり、このマクロコードの実行が、通常の仕方で始まることが可能である。
ステップ406で、ユーザがそのマクロを実行する許可を与えているかどうかの判定が行われる。そのようなアクションは、マクロコード実行の始めに行われることが可能である。例えば、ユーザ許可は、前述したとおり、悪意のあるコードが実行されることを防止するための慣行の一環であることが可能である。
ユーザ許可が存在しない場合、ステップ410で、ユーザ許可要件がフェッチされ、ステップ412で、ユーザに許可が促される。ユーザが、ステップ414で許可を与えた場合、ユーザの許可は、ステップ416で格納され、許可を与えなかった場合、プロセス400は、ステップ418で終了する。ユーザ許可要件は、例えば、そのマクロが実行されることを許された場合に生じる可能性がある悪意のある結果のタイプのリストを含むことが可能である。このリストは、ステップ412でユーザに提示されることが可能である。
ユーザ許可が存在する場合、ステップ408で、ラップされたサービスが作成される。ラップされたサービス(つまり、「Beans」)は、ラップされたサービスクリエータ212によって作成されることが可能である。そのようなアクションは、オプションであることが可能であり、前述したとおり、実行されるコードを悪意のある干渉から保護するのに使用することが可能である。
スクリプト(またはマクロ)は、ステップ420でスクリプトエクセキュータにおいて実行される。例えば、図2を参照すると、スクリプトが、スクリプトエクセキュータ208によって実行されることが可能である。この実行は、例えば、クライアント上でローカルで行われるマクロ実行とは対照的に、マクロサーバサブシステム202内で行われる。スクリプト実行は、通常の仕方で行われることが可能であり、サブシステムの一部分が、スクリプトにおけるステップをステップスルーし、各ステップに進むたびにステップのアクションを実行する。ステップ422で、継続に直面したかどうかの判定が行われる。直面している場合、ステップ428で、その継続が格納される。継続は、事実上、或る特定の時点まで、または或る特定のイベントが生じるまで、スクリプトを休止させるのに使用されることが可能である。継続に直面しなかった場合、ステップ424で処理が再開し、誤りに直面したかどうかの判定が行われる。誤りに直面しなかった場合、ステップ430で、マクロの実行は、成功して終了する。ステップ424で誤りに出会った場合、ステップ426でユーザに警告が行われてから、ステップ430でマクロの実行が終了する。このため、このプロセスにより、ユーザには、クライアントデバイス上のユーザによる(または他のイベントによる)アクションからトリガされたマクロによってもたらされる機能が与えられることが可能であり、マクロは、クライアントデバイスとは別個のサブシステム上で実行されることが可能である。この実行は、一部の実例では、ユーザがオンラインでない時に行われることが可能であり、そのマクロ実行の結果を、ユーザに、さらにシステムに登録している他のユーザに提供することが可能である。
継続は、実行が後に再開されることが可能であるように実行を凍結して、スクリプトインタープリタの実行状態の「スナップショット」の役割をすることが可能である。このことは、概念上、デバッガにおいてブレイクポイントが機能する仕方、または標準のブラウザ側実行(例えば、JavaScript)において「警告」呼出しが機能する仕方と同様である。継続は、インタープリタにおいてすべてのオブジェクト(例えば、すべてのローカル変数および「Beans」)のバイナリシリアル化、および現在の実行ポイントに対するポインタとして実施されることが可能である。継続は、スクリプトエクセキュータ208内で実施されることが可能であり、このことは、継続を公開で利用可能なフィーチャとして使用可能にすることが可能である。すべてのオブジェクト(例えば、「Beans」を含む)を、例えば、Javaの標準のフィーチャであるJavaシリアル化を使用して、スクリプトエクセキュータ208によってシリアル化することが可能である。Javaシリアル化を使用して、オブジェクト(およびそのオブジェクトの子オブジェクトのすべて)を、オブジェクト識別子と、すべてのフィールドの現在の値とを含むバイナリストリームに書き出すことが可能である。マクロが再開されると、スクリプトエクセキュータ208に継続バイナリデータを与えることが可能であり、このデータを、例えば、新たな、ライブのJavaオブジェクトに逆シリアル化する際に使用することが可能である。
一部の実施形態において、継続は、データベースの中に格納されることが可能である。継続は、マクロが再開されるまで、サーバメモリの中ではなく、データベースの中に格納される。データベース格納の1つの理由は、サーバが、継続がトリガされた時点から、ユーザが実行を再開する(例えば、ダイアログ上で「OK」ボタンを押すこと、または他の何らかの再開アクションによって)時点までの間に、サーバが再起動する可能性があるためである。一部の実施形態において、継続は、所定の寿命(例えば、6時間)を有することが可能であり、この寿命の後、継続を破棄することが可能である。このようにして、ユーザが、決して「OK」ボタンを押すことに至らない場合などに、継続がディスクスペースを占め続けることはない。
図4Bは、ホストとなるシステム上でマクロを記録するため、および実行するためのプロセス431のスイムレーン流れ図である。例示的なプロセス431は、ブラウザ、マクロレコーダ、マクロサーバ、およびアプリケーションの間の対話を含む。一般に、このプロセスは、サーバサブシステムからユーザにマクロ記録コントロールのセットを提供し、その結果、ユーザは、それらのコントロールを用いて、ユーザおよびシステムによって行われるアクションがいつ記録されるべきかを示すことができ、さらにそのようなアクションが、その後、そのマクロが呼び出された際に、それらのアクションを再実行するマクロのためのコードに再フォーマットされることが可能である。
このプロセスは、ボックス432で始まり、マクロレコーダがユーザによって選択される。この選択はブラウザ上で行ってもよく、例えば、ユーザが、マクロの記録を始めようとしてコントロールを選択する場合がある。そのマクロレコーダが、ステップ434で提供される。マクロレコーダを、ユーザのブラウザ上で実行することが可能であり、あるいはマクロレコーダを、マクロサーバサブシステム202においてなど、遠隔で実行することが可能である。マクロレコーダは、例えば、ユーザのクライアントデバイス上でアプリケーションを現在、表示しているウインドウとは別個である、境界のないブラウザウインドウ内で表示されることも可能である。また、そのレコーダを、アプリケーションを表示しているのと同一のページの一部であるiFrame内で、または類似する要素内でなど、他の仕方で提供することも可能である。
ステップ436で、マクロレコーダが、アプリケーションと一緒に表示される。例えば、ユーザが、ユーザのラップトップコンピュータ上のユーザのブラウザ内でスプレッドシートアプリケーションを実行している場合、ポップアップ、または他の表示が現れて、マクロレコーダを表す。ユーザが選択することができる記録ボタン、休止ボタン、および停止ボタンなどの、レコーダの動作を制御するための様々なコントロールとともに、マクロレコーダを表示することが可能である。記録が、ステップ438で開始され、つまり、ユーザが、マクロを定義するキーストロークを開始することが可能である。ユーザがレコーダ上で記録コントロールを選択したことを示すメッセージが、レコーダを表示するコードを介してレコーダを提供するサーバサブシステムに送られることによって、そのような記録をトリガすることが可能である。
ステップ440で、ユーザが、アプリケーションと対話する、つまり、ユーザが、ユーザによって使用されているアプリケーション内でマクロの機能を定義すべき操作(キーストローク、選択など)を実行する。例えば、ユーザが、スプレッドシートにおいて或る範囲のセルを選択することが可能であり、それらのセルに対してコマンド(例えば、それらのセルをコピーして、貼り付ける、それらのセルに式を入力するなどのコマンド)を実行することが可能であり、さらに他のそのようなアクションを実行することが可能である。
ステップ442で、ユーザがアプリケーションと対話している時間中、マクロレコーダが、記録プロセス中にユーザによってコマンドが記録されるにつれ、それらのコマンドを表示することを含むことが可能な、ユーザのアクションを記録することを始める。前述したとおり、レコーダは、アプリケーションがユーザ入力を解釈するのと同一の仕方でユーザ入力を解釈することが可能であり、さらに、その後、そのような解釈されたアクションを、マクロが実行された際に、マクロが後にアプリケーションに提供することができるコマンドに変換することが可能である。また、レコーダは、ユーザがコマンドを実行するアプリケーション(例えば、ブラウザウインドウ)を追跡することも可能であり、したがって、マクロは、マクロが実行される際に様々な異なるアプリケーションにコマンドを与えることを知ることが可能である。
ユーザがアプリケーションと対話しており、さらにアクションが記録されている間、ユーザのアクションの基準となる実行が、ステップ444で提供される。この実行は、ユーザが対話しているアプリケーション内で行われることが可能である。このため、ユーザのアクションは、これらのアクションが記録されるように、さらにアプリケーションが、これらのアクションに適切な仕方で反応するように、アプリケーションとマクロレコーダに並行に与えられることが可能である。
マクロを定義することが完了すると、「完了」キー、レコーダにおける「停止」ボタン、または他のコントロールを押すことなどによって、ユーザから保存コマンドを受け取る。ステップ448で、マクロに関する情報が送られる。そのような情報は、ユーザによってコマンドが実行されるにつれ、記録時にマクロコマンドに解釈されることが可能であり、あるいはマクロ記録が停止されると、解釈され、変換されることが可能である。その後、マクロレコーダが、この情報を、例えば、マクロストアに送ることが可能であり、さらにマクロコードに対する1つまたは複数のポインタ(例えば、URL)を生成して、後の時点でコードに容易にアクセスできるようにすることが可能である。例えば、マクロレコーダが、後の時点でマクロを起動するのに使用されるべきキー組合せを識別するようユーザに要求することが可能である。
ステップ450で、ライブラリ名(マクロが格納されるべき)、スクリプト内容もしくはマクロ内容(マクロレコーダによって記録された)、およびユーザIDを含むマクロ情報が、保存される。また、他の情報が、適宜、保存されて、マクロと互いに関係付けられることも可能である。
少しの時間の後、または数日から数年の後である後の時点で、ユーザが、マクロを実行することを決定すると、ユーザは、実行されるべきマクロを指定することが可能である。マクロの選択は、例えば、ユーザが現在、対話しているアプリケーションに関して定義されたマクロのリストからマクロ名を選択することによって、達せられることが可能である。例えば、ユーザがアクセスすることができるマクロのリストを、ユーザのアカウントに関連して格納することが可能であり、さらにリスト(各マクロの作成者が、マクロの理解可能な名前を提供している)の中でユーザに表示されることが可能である。代替として、マクロの選択は、別のマクロの実行によって、その特定のユーザによるアクションとは独立にシステム上でイベントが生じることによって、または他の仕方でなど、自動的に行われてもよい。また、ユーザが、その第1のユーザがそのマクロへのアクセスを有するよう所望する他のユーザの電子メールアドレスまたは他のアカウント識別子を求められることなどによって、保存されたマクロを他のユーザが利用できるようにすることも可能である。また、ユーザは、メッセージンググループ(例えば、電子メールリスト)、または特定のドメインもしくは特定のサブドメインに関するすべてのユーザ(例えば、ユーザの雇用主からのシステムにアクセスするすべてのユーザ)をポイントすることなどによって、他のユーザのグループを提供することも可能である。
例えば、マクロを実行する入力は、オプションとして、ユーザからなど、ステップ452aで受け取られることも可能である。代替として、マクロを実行するトリガイベントは、ステップ452bで行われることも可能である。いずれかの仕組みによって、マクロに対応するマクロコードが、ステップ454で受け取られ、実行される。
マクロ実行の初期段階で、マクロに関連するアプリケーションに対応するAPIのためのオブジェクトが、ステップ456で作成される。そのようなオブジェクトは、マクロを実行するのに必要とされるオブジェクトを表すことが可能であり、さらに、例えば、コマンドを1つのフォーマットから別のフォーマットに翻訳するオブジェクト、他のオブジェクトをラップするオブジェクト、クォータを課すオブジェクト、および他のそのようなオブジェクトを含むことが可能である。
これらのオブジェクトは、ステップ458でセキュリティラッパにおいてラップされる。そのようなラッピングは、前述した仕組みによって行われることが可能であり、さらにシステム上で悪意のあるコードが実行されることからユーザを保護するのに使用されることが可能である。
ステップ460で、アプリケーションが、ユーザIDを使用して呼び出される(または起動される、もしくは実行される)。アプリケーションを呼び出すことは、マクロサーバサブシステム202によって実行されることが可能である。ユーザIDは、ユーザが、特定のファイルを読み取ること、更新すること、または削除することなどを許可されていることを保証することなどによって、許可を確認するために呼出しの中に含められる。
ステップ462で、呼び出されたアプリケーションにおいて実行されるべきステップと関係するアクションが実行される。例えば、これらのアクションは、記録されたマクロの中に記録されている個々の命令またはステップに対応することが可能である。これらのステップの実行は、マクロが記録されたブラウザとは物理的に遠隔であることが可能な、アプリケーションにおいて行われる。実際、マクロは、一部の実施例において、異なるブラウザ上の完全に異なるユーザによって記録され、保存されていることが可能である。そのような事例において、その異なるユーザは、マクロを最初に記録したユーザによって、そのマクロを使用することを許可されている友人または家族であることが可能である。
ステップ464で、さらなる実行のために必要なキーが返される。これらのキーには、例えば、ユーザによって与えられる入力、またはアプリケーション自体によって渡されるパラメータが含まれることが可能である。ターゲットアプリケーション(例えば、スプレッドシートアプリケーション)から返される「キー」は、与えられたコマンドの結果、状態が変化している可能性のあるアイテムを識別することが可能である。例えば、コマンド、INSERT_SHEETは、新たなシートを「現在の」シートにすることが可能である。このマクロは、その新たな現在のシートを反映するように動作可能である他のコマンド(例えば、getActiveSheet)を有することも可能である。他のコマンド(例えば、INSERT_ROW)が、現在の選択を変更して、いずれのセルが現在、アクティブなセルであるかを変更することも可能である。現在の状態および選択データが、いずれかの後のコマンド(例えば、getActiveSelection)がその情報を必要とする場合に備えて、格納のためにマクロに返されることが可能である。
ステップ460、462、および464は、マクロが完了するまで、比較的同時に実行され続けることが可能である。終了は、ステップ462で最後の命令に出会い、その命令が実行されると、またはマクロの実行におけるイベントが、マクロの実行を停止させると、生じることが可能である。
図5は、マクロシステムにおけるオブジェクトに関する例示的な構造、特に、図2のスクリプト情報リポジトリ206などの構造における情報に関する例示的な論理構造を示す。論理構造500は、ノード502から508によって表される。例えば、スクリプト情報リポジトリ206の中に格納された任意の1つのマクロに関して、少なくとも1つの構造500、または構造500のいくつかの部分が存在することが可能である。継続ノード504、リンクノード506、およびユーザ許可ノード508はすべて、ユーザライブラリノード502に対して0...N関係を有する、つまり、各ユーザライブラリ(またはヘッダ)ノードに関して、任意の数(0を含む)の継続、リンク、およびユーザ許可が存在することが可能である。
この構造のルートノードは、例えば、マクロおよび/またはライブラリの名前(例えば、「Dan's Cloud-based MacroLib」の中の「Macro_XYZ」)、マクロライブラリの所有者(例えば、「Dan」)、およびそのマクロに関連するスクリプト(例えば、マクロコード)を定義するユーザライブラリノード502である。各マクロライブラリは、データベースの主キーの役割もすることが可能な、64ビットの擬似乱数などの一意の識別子を有することが可能である。一部の実施形態において、ライブラリ内に含まれるライブラリ名などのフィールド、および関数のセットは、データベースからマクロを取り出す際に使用されず、そのようなフィールド、および関数のセットは、マクロライブラリを実行する/表示する場合に専用である。「所有者」フィールドは、例えば、「ユーザXYZによって所有されるすべてのマクロを獲得する」などの動作で外部キーとして使用されることが可能である。リンクテーブルは、例えば、「文書XYZによって使用されるすべてのマクロを獲得する」などの動作で使用されることが可能である。
継続ノード504は、継続IDと、継続データ(例えば、マクロが待ち状態に入った後に、さらなる入力でマクロを再開するためなどの、さらなるエントリポイントからの)と、ユーザ名(例えば、継続ノード504を作成したユーザ)とを含むことが可能である。所与のマクロに関して複数の継続ノード504が存在することが可能である。継続の「所有者」は、例えば、ユーザXが、主として、ユーザYとして実行されていたマクロを再開することができないように、セッション乗っ取りを防止するように記録されることが可能である。このようにして、動作は、ユーザYだけが、ユーザYが開始したマクロを再開することができることを保証することが可能である。1名のユーザが、いくつかの継続(例えば、それぞれが活性のプロンプトするダイアログボックスを有する、別々のウインドウ内の開かれた3つのスプレッドシート)を有することが可能であるため、複数のそのようなレコードが許されることが可能である。また、複数のユーザが、それぞれが独自のダイアログプロンプトを有する、マクロのユーザ独自のインスタンスを同時に実行していることも可能である。
リンクノード504は、外部エンティティがマクロにリンクされることを許す。リンクノード504は、マクロを「ポイント」するURLまたは他の何らかのパス名であることが可能な、ドキュメントIDを含むことが可能である。同一のマクロに対して、いくつかの異なる名前(およびいくつかの異なるURLパスまたは他のパス)が存在することが可能であるので、複数のリンクノード506が存在することが可能である。
ユーザ許可ノード508は、マクロへの制限されたアクセスを許す情報を含むことが可能である。例えば、制限プロトバッファフィールドが、値のプロトコルパターンを使用してアクセスを制御することが可能である一方で、ユーザフィールドが、ユーザIDに基づいてアクセスを制御することが可能である。このいずれか、または両方が、各ノード508において使用されることが可能である。所与のマクロに関して、異なる許可レベルをそれぞれが識別する、複数のユーザ許可ノード508が存在することが可能である。ユーザ許可ノード508は、マクロごとに、ユーザごとに1つだけの許可レコードの存在を実施することが可能である。この実施は、そのマクロのユーザによる実行、およびそのマクロが行うことが可能であることに関するユーザによる承認スタンプの表現を用いることが可能である。複数のレコードは、異なる複数のユーザがそれぞれ、そのマクロを許可している可能性があり、さらに各ユーザが、そのマクロが実行する異なるアクションを許可している可能性があるという理由に限って、許されることが可能である。ユーザXが或るマクロを実行する際、そのマクロに関するユーザXの許可レコードが引き出され、他のすべてのレコードは無視される。
マクロの要件が変化し(例えば、作成者が、ブロガに対する呼出しを追加した場合)、このことが、マクロが実行する必要がある要件を変えた場合、既存のユーザ許可には、無効という印が付けられることが可能である。その結果、ユーザが、さらなる要件が追加された後にそのマクロを再実行しようと試みると、ユーザに許可が再び促されることが可能である。例えば、この促しは、それまでマクロが、単に「このマクロは、カレンダへのアクセスを要求する」と告げていただけであることが可能であるのに対し、「このマクロは、カレンダおよびブロガへのアクセスを要求する」と告げることが可能である。再許可を求める促しは、サービスが削除された場合、必要とされない可能性があり、要件が増えた場合に限って、必要とされる可能性がある。
図6は、マクロ構築システム600の例示的なスクリーンショットを示す。ユーザは、例えば、このシステムを使用して、例えば、外部イベントに基づいて、後に実行されることが可能な、またはユーザが選択した際に手動で実行されることが可能なマクロのためのパラメータおよび規則を確立することが可能である。一般に、このシステムは、マクロ構築を、スクリーンショットの列の中にそれぞれ示される3つの段階に編成し、各段階(各段階内の下位段階を含む)は、その段階より前の段階が構成されるにつれて変化することが可能である。そのようなシステムを使用して、ユーザは、マクロに関するトリガ、選択されたトリガと関係する、利用可能なパラメータからのマクロを操作するためのパラメータ、およびそれらの選択されたパラメータに対応するマクロの結果を迅速に識別することができる。
一例において、ユーザが、電子メール関連のイベントに基づいて、電子メール機能を実行するマクロを構築することが可能である。別の例において、マクロは、非電子メール関連のアプリケーション(例えば、スプレッドシート、ワードプロセッシングアプリケーションなど)における動作を実行するように構築されることが可能である。さらに別の例において、ユーザは、出力を有するが、いずれのトリガイベントにも依存しないマクロを構築することが可能である。トリガまたは出力であるアプリケーションのタイプにかかわらず、画面上で単にユーザ選択を行うことが、対応するマクロの構築を自動的にもたらすことが可能である。画面の「背後で」実行されているソフトウェアアプリケーションが、例えば、図6のスクリーンショットに示されるインタフェース上の、ユーザの入力および選択を処理することができ、さらに適切なマクロ構文、様々なアプリケーション特有、および言語特有のAPI呼出し、ならびにマクロを実行するのに要求されるマクロのその他の構成要素を挿入することを含め、マクロを自動的に構築することが可能である。このことすべては、意味をなすいくつかのフィールドの中にいくつかの入力を単に入力するユーザにはトランスペアレントであることが可能である。
スクリーンショット600は、現在、構築されているマクロ(例えば、ユーザによって最初に定義される、または後に更新される)を識別するマクロ名フィールド601を含む。前述したとおり、マクロに関する定義は、以下の3つの一般的な領域、すなわち、マクロトリガデータ領域602、マクロ処理データ領域604、およびマクロ出力データ領域606において行われることが可能である。マクロトリガデータ領域602は、マクロがトリガされる条件またはイベントを決定し、識別するのにユーザが使用することが可能なフィールドおよびコントロールを含むことが可能である。マクロ処理データ領域604は、マクロが実行されると行われる処理を定義するのに使用されることが可能である。マクロ出力データ領域606は、マクロが作用するアプリケーションデータのタイプや、そのデータに対して行われる動作(または操作)などの、マクロの出力を識別することが可能である。複数のアプリケーションにおけるデータが、同一のマクロによって更新されるべき場合、複数のマクロ出力データ領域606などの、他のデータ定義領域が、データ領域602〜606に加えて存在することが可能である。一部の実施形態において、コミット/ロールバック技術を使用して、すべての更新が行われること、または更新が全く行われないことが確実にされることが可能であり、このことは、データ完全性を保つのに役立つ可能性がある。
この3つのデータ領域602、604、および606は、概ね、順に完了されるように設計されることが可能である。一部の実施形態において、1つの領域内でユーザによって選択された値は、その領域の下の、またはその領域に右側のフィールド上、またはコントロール上で表示されるものに影響を与える可能性がある。例えば、マクロトリガデータ領域602の中に入力されたデータが、その他の領域(例えば、データ領域604および606)の中で表示される(さらにユーザ選択可能である)フィールドおよびデータ選択のタイプに影響を与えることが可能である。例えば、ユーザが、「電子メール」を、マクロのトリガの仕組みとして選択した場合(例えば、プロパティフィールド608の中で「電子メール」を指定すること、または選択することによって)、マクロ処理データ領域604において利用可能なオプションが、電子メールプロパティに合わせられることが可能である。
この例に示されるマクロトリガデータ領域602は、プロパティフィールド608と、活動フィールド610と、パラメータフィールド611とを含む。活動フィールド610の中で表示される(さらにユーザによって選択可能である)値は、プロパティフィールド608の中のユーザの選択に依存することが可能である。例えば、プロパティフィールド608の中で「電子メール」を選択することによって、活動フィールド610の中の値は、電子メール関連のオプション(例えば、着信するメッセージ、受信ボックスサイズ、タグサイズなど)を含む。異なるプロパティ(例えば、オンラインオークション)の選択は、活動フィールド610の中のエントリの異なるリスト(例えば、品目数量、品目分類など)をもたらすことが可能である。パラメータフィールド611は、活動に値を割り当てるのに使用されることが可能である。ユーザがパラメータフィールド611の中で入力する、または選択することが可能な潜在的な値には、例えば、サイズ、色、ドル金額、期間、言語、性別、あるいは特定のアプリケーションに適切である凡そあらゆる定量的または定性的な値が含まれることが可能である。一部の実施形態において、パラメータフィールド611上のラベルが、活動ボックス610の値に依存して、自動的にラベル付け(例えば、サイズ、色、価格など)されることが可能である。
マクロ処理データ領域604は、条件フィールド612と、確認サービスフィールド614と、サービス値フィールド616とを含む。条件フィールド612は、マクロによる、いくつかのアクション(例えば、或る仕方で着信する電子メールを転送することなどの)をトリガする条件を識別するためのオプションを表示する。条件フィールド612の中で表示される正確な値(例えば、「ユーザからの」または「グループ内のユーザからの」など)は、例えば、プロパティフィールド608の中のユーザのエントリ(例えば、「電子メール」)に依存することが可能である。ユーザが、プロファイルフィールド608に関して異なる値(例えば、「スプレッドシート」)を選択した場合、値の異なるセットが、条件フィールド612の中に表示されることが可能である(例えば、スプレッドシートと関係する)。
確認サービスフィールド614は、マクロの実行のための情報を収集する際にマクロによって確認されるべき、アプリケーションおよびマクロの外部のサービスを識別することが可能である。例えば、確認サービスフィールド614の中で「ロケータ」を選択することによって、ユーザは、マクロがマクロの実行中に、送信者のロケーション、ユーザXのロケーション、または電子メールのカーボンコピー行にリストアップされた特定のユーザ、または他の選択を確認すべきことを定義することが可能である。サービス値フィールド616は、参照されるサービスまたは複数のサービスから、いずれの特定の値がマクロに返されるべきかを識別する。この事例におけるロケーションは、例えば、ほぼリアルタイムのGPSロケーション、セルラ電話機三角測量によって追跡されるロケーション、所在地住所、郵便番号、または他の任意の適切な位置特定基準に基づくことが可能である。
一部の実施形態において、マクロ処理データ領域604は、マクロにおいてブール演算子を使用するための様々な仕組みを含むことが可能である。これらの仕組みは、条件フィールド612 AND確認サービスフィールド614を有することによって示唆される暗黙の「AND」に追加する形態であることが可能である。例えば、条件フィールド612が、ラジオボタンとして示される、任意の/すべてのコントロールのセット617を用いて使用されることが可能であり、このことは、明示的なAND/OR演算子およびロジックの指定を円滑にすることが可能である。例えば、ユーザは、確認サービスフィールド614の中で確認された個々のオプションの任意の(またはすべての)オプションが、そのマクロに関して考慮されるべきであることを指定するために、任意の/すべてのコントロール617の「任意」(または「すべて」)オプションを選択することが可能である。
一部の実施形態において、フィールド名のそのままのテキスト入力、フィールド値、ブール演算子、および適切に配置された括弧などの、さらなるブールコントロールおよびブールフィールドが、マクロ構築システム600上の他のフィールドなどのために提供されることが可能である。それらのタイプのより高度なタイプのコントロールは、例えば、高度なブールコントロール618を選択することによって到達可能であり得る画面上、または他のインタフェース上に含められることが可能である。一部の実施形態において、高度なブールコントロール618にアクセスすることは、ユーザが、マクロ全体に関する既存のロジックを見ることを許すことが可能であり、さらに、例えば、データ領域602から606の中で行われた、更新されたユーザ選択およびユーザ入力によって表される現在のロジックを含むことが可能である。システム600は、自動的構文確認を実行し、ユーザによって入力された(またはリストから選択された)フィールドが、それらのフィールドが確認されるのに参照される値に適合していることを検証することが可能である。
マクロ出力データ領域606は、プロパティフィールド620と、アクションフィールド622と、パラメータフィールド624とを含む。これらのフィールドは、例えば、マクロの特定の出力を指定する(例えば、これを行う、それを送る、特定のファイル、フィールド、またはスプレッドシートセルを更新する)のに使用されることが可能である。図6に示される例において、プロパティ620に関して「電子メール」が選択されて、アクションフィールド622の中で電子メール関連のエントリが表示されることをもたらす。このため、このマクロに関する出力は、何らかの形態の電子メールを何らかのアドレスまたは複数のアドレスに送ることになる。
パラメータフィールド624は、必要な場合(例えば、選択、またはフィールド624より上のフィールドに基づいて)、フィールドまたは選択に値を割り当てるのに使用されることが可能である。一部の実施形態において、フィールドの値は、そのフィールドの「背後」と定義されることが可能であり、したがって、フィールド名をダブルクリックすることが、そのフィールドの値を定義するためのポップアップを表示することを可能にし、さらにフィールドの上に乗ることが、そのフィールドの現在の値を表示することを可能にする。
図6に示される例示的なマクロ構築画面において、マクロトリガデータ領域602が、「着信メッセージ」(例えば、活動フィールド610の中で識別された)が、電子メールアプリケーションによって(例えば、プロパティフィールド608に従って)受信されると、マクロをトリガするように定義される。マクロ処理データ領域604は、特定のユーザを指定し、電子メールの本文の中に特定の語を含め、さらにユーザXのロケーションに基づく条件612を含む。これらの条件のための値は、例えば、他のパラメータフィールド(図6に示さず)の中で定義されることが可能である。このため、マクロは、そのような条件が満たされる場合、完了まで実行される。マクロ出力データ領域606は、「電子メール」が現在のマクロの出力のタイプであることを示し、さらに実行されるべきアクションが「私にメールを送ってください」(アクションフィールド622の中で定義される)であることを示す。データ領域602から606の中に入力された値の結果、件名の中に特定の語を含む、特定のユーザからの着信電子メールメッセージというトリガイベントを検出すると、ユーザXのロケーションに基づいて、マクロは、メッセージングアプリケーションを使用して、着信電子メールのターゲットにテキストメッセージを送り、そのような電子メールが受信されたことをターゲットに告げる。例示的なマクロ構築画面の利点は、この画面が、簡潔なGUIフォーマットでユーザにこの情報を提供する一方で、その機能を実行する、基礎をなすマクロを隠し、ユーザが、マクロをどのように書くべきか、またはマクロをどのように認識すべきかさえ知らなくてもよいことである。この画面は、完全なマクロを構築するのに、またはマクロの一部を構築するのに使用されることが可能であり、ユーザは、この画面によって提供され得なかった他のコードをマクロに追加することが可能である。
マクロを定義するためのユーザインタフェースは、例えば、入力される、または更新されるマクロを「保存する」、マクロに対する1つまたは複数の更新または変更を「元に戻す」、もたらされたマクロを「表示する」、または編集を保存せずに「取り消す」ボタンまたはコントロール626を含むことが可能である。「copy from」フィールド628は、ユーザが、既存のマクロをコピーすること、または既存のマクロに関するパラメータをコピーすることによって、ユーザが後に変更することが可能な初期状態に画面を事前設定するように、新たなマクロを作成し、定義することを許すことが可能である。記述フィールド630は、ユーザが、マクロの目的を記録すること、またはマクロの名前において捉えられていない何らかのレベルの意味をマクロに与えることを許すことが可能である。
一部の実施形態において、マクロ定義には、マクロが最初に有効になる発効日632、マクロがもはや実行されなくなる失効日634、ならびに、例えば、マクロが実行される曜日(平日、月曜日、週末など)を指定するのに使用され得るスケジュールフィールドもしくは「run on」フィールド636などの、時間要素が関連付けられていることが可能である。日付フィールドは、特定の日付もしくは日付範囲、および/または特定の時間を含むことが可能であり、あるいは列挙タイプ(例えば、今、なし、週末など)を含むことが可能である。
一部の実施形態において、システム600によって提供されるユーザインタフェースは、スマートフォンなどの、より小さいディスプレイを有するユーザデバイス上で実行されるように適合されることが可能である。例えば、データ領域602から606、および他のフィールドが、順次に提供されることが可能である。一部の実施形態において、画面全体にスクロールバーが提供されて、ユーザが、一度に1つの全体的な領域を移動することを許すことが可能である。
システム600を使用して構築されるマクロは、システム100および200、ならびに図1および図2に関連して前述したセキュリティ態様と一緒に使用されることが可能である。詳細には、構築された各マクロは、能力ベースのセキュリティラッパにおいてラップされることが可能である。システム600は、例えば、それらのマクロを使用することが可能な他のユーザの名前、およびそれらの他のユーザが操作(例えば、電子メールを送る、スプレッドシートを更新するなど)を実行することが可能な程度を含む、セキュリティを促進することが可能なセキュリティ関連のフィールド(図示せず)を含むことが可能である。
そのような能力ベースのセキュリティは、コードが実行されることを許可する際のユーザの意図を考慮に入れることによって、利益をもたらすことが可能である。そのようなシステムにおいて、例として、実行するユーザが、ユーザが許すことを所望する各操作をカプセル化する、能力と呼ばれるオブジェクトを作成し、さらにこれらのオブジェクトを、実行されるべき信頼できないコードに渡す。これらのオブジェクトは、信頼できないコードが、システムによって実行される際、ペイロードの一部(例えば、ラッパの一部)となり、その信頼できないコードによって変更可能、または作成可能ではない。信頼できないコードが、基礎をなす、信頼できるリソース(例えば、従来、ファイルシステムなど)にアクセスしようと試みる場合、そのコードは、信頼できるリソースをラップする、ユーザが作成したオブジェクトを介してのみ、アクセスすることが可能である。能力は、信頼できないコードに認められるアクセスに対する細かい管理を許すことが可能であり、さらに、最小の特権の原理を遵守する実行環境を構築するのに使用されることが可能である。このことは、任意の所与のモジュールが、そのモジュールがそのモジュールの機能を実行するのに必要である最小セットのアクションしか実行することができず、それ以上は実行することができないことを意味する。
ホストとなるマクロベースのシステムに関する例示的なシステムおよびプロセスを説明してきたので、以下の段落は、そのようなシステムおよびプロセスを使用するための一連の実施例を説明し、それらの実施例の多くは、システムが、どのように能力ベースのセキュリティを使用して、これらの事例のそれぞれを扱うことができるか、ならびにそのような実施例の一部であり得るいくつかのリスクをどのように軽減すべきかを説明する。
(実施例)
(第1実施例:販売ポリシー施行)
或る組織のための販売部門が、スプレッドシートにおいて、潜在的な顧客に関する提案を作成しているものと想定されたい。このスプレッドシートは、その企業が製造するすべての製品およびフィーチャの費用を含む。販売員は、そのシートを下に進むにつれ、フィーチャに、そのフィーチャの隣の列において1または0で、活性(すなわち、現在、販売されている)または不活性という印を付けることが可能である。そのシートは、様々な割引、および価格乗数を含め、価格設定を計算する式を含むことが可能である。
例えば、相互排他的であることが可能ないくつかのフィーチャを含め、行項目の間に多くの依存関係が存在することが可能である。これらの規則は、マクロとして表現されることも可能である。代替として、これらの規則は、これらの規則を施行するようにシートにアタッチされるマクロにコンパイルされる規則言語で表現されることも可能である。さらなる規則は、誤り確認、または他の一貫性確認を含むことが可能である。さらに、地域、またはその他の要因に基づく、プロモーション、またはトリガされるイベントに関連付けられた規則が存在することが可能である。
そのような規則について考慮すべき1つの事項は、それらの規則がどのように施されるかである。例えば、それらのマクロおよび/または規則を、シートが参照する、共有されるライブラリの中に生存させて、管理者が、シートの中の値を容易に更新することができるようにすることが役立つ可能性がある。また、マクロは、システム管理者が様々な小企業所有者に提供するツールのスイートの一部であるべきであり、それらのユーザのそれぞれが、そのマクロにアクセスし、そのマクロを実行することを許すことが可能である。その管理者は、ホストとなるシステム上の中央ロケーションから、そのマクロを常に更新しておくことが可能であり、ユーザらはすべて、そのロケーションからそのマクロを実行することができる。
このため、そのマクロは、そのマクロにアクセスする、各スプレッドシートにつき1つだけの「スロット」を有する、共有モードで公開されることが可能である。別のユーザは、そのユーザのスプレッドシートの中に、そのマクロをポイントするURLを含めることによって、そのユーザのスプレッドシートにそのマクロをインポートすることが可能であり、さらにそのマクロに、そのスプレッドシートに書き込む権限を与えることが可能である。
(第2実施例:投資ユーザインタフェース)
投資会社がスプレッドシートにおいて価格設定モデルを有し、さらに外部サービスから株価を引っ張り、それらの株価をスプレッドシートに挿入して、推奨(例えば、買い、ホールドなど)を生成することを所望するシナリオを考慮されたい。
そのスクリプトは、スプレッドシートから読み取り、そのスプレッドシートに書き込み、さらに外部株価サービスにアクセスする必要がある可能性がある。作成者は、そのスクリプトを特定の株価サービスだけに制限するアクセスを、そのスクリプトに許すことが可能である。作成者が、そのスロットを空のままにしたとする場合、そのサービスを呼び出すユーザは、サービスと連絡をとる権限をそのスクリプトに与えるかどうかを尋ねられるだけでなく、いずれの特定のサービスと連絡をとるべきかを尋ねられなければならない。そのようにして、そのユーザは、そのスクリプトが何をすることができるかを制限することが可能であり、そのスクリプトは、他のいずれのサービスとも連絡をとることができない。
ユーザが、このマクロを、他のユーザ自らのスプレッドシートに含めるために(例えば、このマクロを参照するのではなく、このマクロをコピーするように)、他のユーザと共有することを所望する場合、それらの他のユーザは、外部株価サービスにアクセスするのに、それらの他のユーザ自らの権限を必要とする。ユーザが、他のユーザに、中央ロケーションでマクロをポイントさせることによってマクロを共有する場合、ユーザらは、それらのユーザが、外部株価サービスと連絡をとる権限を自ら有さない場合でも、そのマクロを使用できることが可能である。それらのユーザは、そのような状況において、スクリプト自体が有する権限を与えられることが可能である(それらのユーザは、それらのユーザ自らのスクリプトから、そのサービスにアクセスすることはできない可能性があるものの)。
(第3実施例:事故報告)
バス運送会社が、その会社の事故報告を自動化することに関心があるシナリオを考慮されたい。事故に遭った運転手が、ホスト化サービスにアクセスして、バスの位置などの情報を記録するスプレッドシートにおけるフォームに記入することが可能である。マクロが、そのレポートを、点検のために様々な監督者にルーティングするのに使用されることが可能である。
このマクロは、監督者を識別し(例えば、このマクロがアクセスを有する別のスプレッドシート、データベースクエリなどを介して)、法務部門の正しい電子メールアドレスを生成し、さらにそれらの人々とその文書を共有するとともに、電子メールを送り、さらに他のスプレッドシート(例えば、いずれの事故レポートが懸案中であるかという記録を含むスプレッドシート)にアクセスする必要がある可能性がある。それらの人々は、そのスプレッドシートをさらに編集し、その後、マクロを先に進めるイベントをトリガする必要がある。このマクロは、継続モードで実行されることが可能であり、したがって、このマクロは、特定のユーザが、このマクロの或る段階に対応を済ませるたびに休止し、その後、次のユーザがこのマクロを再び始めるのを待つ。イベントによって起動されると、このマクロは、誰がその文書を承認したかを確認し(例えば、その文書自体に記録されているところにより、またはこのマクロに送られたイベントの中の情報の中に記録されているところにより)、承認する必要がある人々全員が承認を済ませるまで待ち、済んだ時点で、このマクロは、次に、誰か別の人に通知することが可能であり、さらに事件が完全に処理されたと記録することが可能である(例えば、さらに別のスプレッドシートにおいて)。一部の実施形態において、2つのイベントが同時に生じた場合、それらのイベントは、キューに入れられることが可能であり、したがって、このマクロは、一度に1つの継続だけを処理する。ワークフロー状態は、単に、このマクロのローカルの可変コンテキストの中に保持されるとともに、部分的にスプレッドシートに記録されることが可能である。
関連するシナリオにおいて、完全に処理されて、完了されてはいない(例えば、ワークフローに基づいて)事故レポートにクエリが行われ得る。このクエリは、事故レポートについての状態情報を含むスプレッドシートにアクセスすること(または、単にそのスプレッドシートを開くこと)を要求する可能性がある。
(第4実施例:バススケジュール報告)
バス運送会社が、いくつかのバス路線における遅延について顧客に通知することができることを所望するシナリオを考慮されたい。その会社は、スプレッドシートが、その会社のバスの予期される時刻/位置を更新するスプレッドシートを編集することができ、さらにそのような編集は、バスに関する位置データを受け取り、そのような情報に基づいて到着の推定される時刻を計算する(例えば、バスが停留所Xを出発したことを識別し、時間Yを加算して、停留所X+1における到着時刻を計算することによって)マクロによるなどして、自動的に行われることが可能である。このスプレッドシートにおけるマクロは、いくつかのバス路線が普通ではなく遅延している場合、そのことを識別することができ、遅延している場合、このマクロは、通知を受けるように登録している顧客にテキストメッセージを送ることができる。例えば、ユーザが、中心街にいて、ユーザの通常のバス停留所から2ブロック内におり、さらにユーザの路線バス(例えば、バス番号692、698など)のいずれかが、5分を超えて遅れてその曲り角に到着する可能性が高い場合はいつでも、テキストメッセージを受信するように契約することも可能である。ユーザのモバイルデバイス上のアプリケーションが、ユーザが適切な位置にいる際に、ホスト化サービスに、ユーザのレコード上のフラグを活性化させるようにトリガされることが可能であり、したがって、ユーザは、ユーザがその位置を手動で入力する必要なしに(例えば、ユーザのGPS座標を最も近いバス停留所位置に変換することによって)、ユーザの現在の位置に向けられた更新を受信する。
セキュリティ目的で、マクロの作成者が、テキストメッセージを送る能力を、限られたセットのユーザ(例えば、管理者によって管理される、別のスプレッドシートの中でリストされるユーザ)に与え、多分、このマクロを、そのシートだけにローカルで公開して、公開でアクセス可能にはしないことが可能である。この作成者は、そのシートに書き込む能力をマクロに与えない。このシナリオは、文書の中で定義されるグループ、または他のコレクション(例えば、スプレッドシート、または他の何らかのグループ定義)を参照することによって、能力の幅を指定する可能性を提示する。
(第5実施例:位置ベースのイベントトリガ)
1名のユーザが、各コンサートの所在地および/または日付/時刻を含む、スプレッドシートにおけるコンサート推薦のセットを更新するシナリオを考慮されたい。他のユーザは、他のユーザが、これらのコンサートのいずれかのコンサートの近隣にいる場合はいつでも、さらにコンサートの時刻が近づいている場合はいつでも、通知を受けるように求めることによって、このスプレッドシートからの通知を受けるように契約することが可能である。この事例における通知は、例えば、マッピングサービス、ソーシャルネットワーキングサービス(推薦を行うユーザの友人らを識別する)、位置情報利用サービス(友人らが特定の場所にいる場合に、そのことを識別するための)、および通知を送るテキストメッセージングサービスなどのサービスを使用することが可能である。このため、ホスト化マクロは、そのようなシナリオにおいて特によく適している。
(第6実施例:調査)
ユーザが、調査フォームまたは他のデータエントリフォームを作成し、電子メールフォームを他の数名のユーザに送信し、さらに各ユーザが、そのフォームにどのように記入したかを示す行をスプレッドシートに追加するシナリオを考慮されたい。
このマクロは、或るアドレスから、ユーザによって提供されるアドレスのセットへという形で人々のセットに電子メールを送る能力を与えられるべきである。このマクロは、ホスト化サービスからのユーザ識別フィーチャにアクセスすることによって、または応答の中のユーザID(例えば、電子メールアドレス)を識別することによってなど、各ユーザからのフォームの中でデータの受信を追跡することが可能である。このマクロは、次に、スプレッドシートにアクセスし、スプレッドシートの1つの列にユーザIDを入力し、ユーザの回答または複数の回答を、スプレッドシートの他の列に入力することが可能である。このようにして、第1のユーザが、或るグループ(例えば、既存の友人リストまたは電子メールリストから決定された)にフォームを迅速に送り、さらにそのグループからのコメントを自動的に表にすることができる。
(第7実施例:購入注文承認)
ユーザが購入注文(例えば、「私は、X千ケースのQチップを購入することを所望し、私は、ベンダXYZを選好する」)を開始するシナリオを考慮されたい。ユーザが購入注文(PO)をサブミットすると、マクロが、品目、合計価格、部門などに基づいて、誰がそのPOを承認する必要があるかを特定することが可能である。例えば、その合計が、決められたしきい値より高い場合、そのPOは、長の承認を要求することが可能である。承認者がそのPOを承認すると、そのPOは、マクロ、データベース、またはスプレッドシートの中で定義されたユーザのリストなどの、ワークフローに沿って進められることが可能であり、マクロは、ローカル状態を保持して、誰がそのPOを承認したか、および誰がそのPOを承認していないかを憶えており、すべての承認者が承認すると、そのPOは、購入に送られる。
このマクロは、継続に関連して実行されるのが最良である。このマクロは、数名のユーザに、それらのユーザがクリックして、所与の購入注文を承認する、または不可とすることが可能なフォームまたはURLを有する文書に対するリンクまたは添付を使用して、電子メールを送る能力を有し、部門の長などの情報を有する他のスプレッドシートまたはデータベースにアクセスする。
(第8実施例:メールマージ)
ユーザが、名前、所在地、電子メールアドレスなどの名前スプレッドシート、および別の文書(例えば、電子メール、スプレッドシートなど)を有し、その文書の中のフィールドを、リストからのフィールドで置き換えて、マージされた文書を、名前シートの中で指定される受信者に電子メール送信することを所望するシナリオを考慮されたい。
セキュリティのため、このマクロは全体が、指定された文書、および名前のリストのコンテキスト内で実行されることが可能である。これらの能力は、「このテーブルの第1の列の中で指定されたリストに電子メールを送ることを許すこと」、ならびにテンプレート文書へのアクセスである。このマクロ自体は、スプレッドシートの行、およびいくつかのテンプレートから計算されたデータを使用して、リストの中の人々に電子メールを送る。メールをマージするマクロに関する特定の形態は、よく知られている。
(第9実施例:医師交代勤務スケジューリング)
数名の医師が、同一のスプレッドシートにアクセスしており、そのスプレッドシートを編集しているシナリオを考慮されたい。マクロが、そのスプレッドシートを調べて、各医師が、そのスプレッドシートに関するフォーマット規則またはスケジューリング規則(例えば、或る期間内の最大限または最小限の数の交代勤務)に従っていたことを確かめることが可能である。各ユーザは、例えば、より直観的なアクセスのために(例えば、繰り返すスケジュールを作成するために)、そのシートをカレンダアプリケーションと同期させるマクロを実行するボタンをクリックすることが可能である。また、双方向の同期が行われることも可能である。
このマクロは、様々な他のカレンダアプリケーションとインタフェースをとることができるように拡張され得る。また、このマクロは、医師が、自らが規則に従っていることを検証することを助け、医師が、いくつの交代勤務を果たすように署名したかを把握しておくのを助け、さらにスプレッドシートをカレンダアプリケーションと同期させることも可能である。
(第10実施例:電子メールプラグイン)
ユーザが、ユーザのアカウントに対する着信電子メールの各インスタンスを識別し、さらにその電子メールの送信者IDおよび件名が、その電子メールからコピーされて、ユーザのアカウントに関連付けられたスプレッドシートの次の開かれた行に入れられるようにするマクロを定義することが可能である。このようにして、ユーザは、ユーザのアカウントに対する着信電子メールの最新のログを自動的に保つことが可能である。
(第11実施例:ブロギングプラグイン)
或るサービス上でブロガであるユーザが、そのブログに対するユーザコメントを扱うためのマクロを開発することが可能である。例えば、コメンタについての情報が、そのコメントの隣にコメンタの位置を示す(例えば、そのユーザからのコメントに対応するIPアドレスを使用して)ことなどに使用されることが可能である。さらに、ユーザは、すべてのコメントを、卑俗な表現などの、トリガ語のブラックリストと比較させて、不適切な語を含むコメントがポストされた場合にはいつでも、ユーザがテキストメッセージを受信するようにすることが可能である。その後、ユーザが、ブログにログインして、そのコメントを片付けることも可能である。
(第12実施例:料金請求可能な時間数)
コンサルタントであるユーザが、カレンダアプリケーションにおいてそのユーザの料金請求可能な時間数を追跡することが可能である。ユーザは、そのようなエントリを定期的に(例えば、毎週、または毎月)解析して明らかにする(例えば、フォームx.xの中の時間エントリを認識することによって)マクロを使用することが可能である。すると、そのマクロは、そのエントリに関連するテキスト(例えば、キーワードをおよびクライアント名を、異なるいくつかのプロジェクトと互いに関係付けるリスト)を使用して、時間の料金が請求されるべきプロジェクト番号を識別することも可能であり、さらにその後、スプレッドシートにおけるセルにデータを追加して、料金請求操作を実行することが可能である。次に、マクロは、そのスプレッドシートからの値をマージして(料金請求のために1時間当りの料金を適用した後)、ワードプロセッシングプログラムによって生成される請求書にし、さらにその後、もたらされる文書をクライアントに電子メール送信することが可能である。クライアントが、ホストとなるシステムの登録されたユーザである場合、そのマクロは、支払いを求める直接の要求を行うことが可能であり(クライアントが、その料金請求を支払う意図を示すのに使用することができる選択可能な仕組みを含むフォームを介することを含め)、さらにそのクライアントが、その後に、クライアント口座からコンサルタント口座に金銭が振り替えられるようにするコントロールを選択することが可能である。
(第13実施例:運転道案内メールマージ)
ホストとなるシステムのユーザが、ユーザの数名の友人に来たるべきパーティへの招待状を送ることを所望する可能性がある。このため、ユーザは、そのパーティへの招待状のためのシェルを準備することが可能である。次に、ユーザは、招待状へのメールマージを事実上、実行するマクロを、それらの友人、および友人の住所のリスト(例えば、ホストとなるシステム上の連絡先アプリケーションにおける)にマクロを向けることが可能である。しかし、ユーザは、ユーザの自らの住所(パーティの場所)、ならびに招待状が現在、準備されている友人の、リストからの住所を、地図サービスに提供することも可能であり、地図サービスは、標準のAPIに従って、友人の家からパーティまでの運転道案内が重ね合わされた地図を示す画像を返すことが可能である。マクロは、この画像を招待状に組み込み、この招待状が、その後、自動的に、さらにカスタム生成された指示で、友人に送られることが可能である。
図7は、本明細書で説明される技術と一緒に使用されることが可能である、汎用コンピュータデバイス700および汎用モバイルコンピュータデバイス750の例を示す。コンピューティングデバイス700は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、および他の適切なコンピュータなどの、様々な形態のデジタルコンピュータを表すことを意図している。コンピューティングデバイス750は、携帯情報端末、セルラ電話機、スマートフォン、および他の類似したコンピューティングデバイスなどの、様々な形態のモバイルデバイスを表すことを意図している。この図で示される構成要素、それらの構成要素の接続および関係、ならびにそれらの構成要素の機能は、単に例示的であることが意図されており、本明細書で説明され、さらに/または主張される発明の実施形態を限定することは意図していない。
コンピューティングデバイス700は、プロセッサ702と、メモリ704と、ストレージデバイス706と、メモリ704および高速拡張ポート710に接続される高速インタフェース708と、低速バス714およびストレージデバイス706に接続される低速インタフェース712とを含む。構成要素702、704、706、708、710、および712のそれぞれは、様々なバスを使用して互いに接続され、さらに共通のマザーボード上に、または適宜、他の仕方で実装されることが可能である。プロセッサ702は、メモリ704の中、またはストレージデバイス706の上に格納された命令を含め、コンピューティングデバイス700内で実行するための命令を処理して、高速インタフェース708に結合されたディスプレイ716などの、外部入出力デバイス上のGUIのためのグラフィック情報を表示することが可能である。他の実施形態において、複数のプロセッサ、および/または複数のバスが、適宜、複数のメモリ、および複数のタイプのメモリと一緒に使用されることが可能である。また、複数のコンピューティングデバイス700が接続されて、各デバイスが、必要な動作の部分を提供する(例えば、サーババンクとして、ブレードサーバのグループとして、またはマルチプロセッサシステムとして)ことも可能である。
メモリ704は、コンピューティングデバイス700内部で情報を格納する。一実施形態において、メモリ704は、1つまたは複数の揮発性メモリユニットである。別の実施形態において、メモリ704は、1つまたは複数の不揮発性メモリユニットである。また、メモリ704は、磁気ディスクまたは光ディスクなどの、別の形態のコンピュータ可読媒体であることも可能である。
ストレージデバイス706は、コンピューティングデバイス700のための大容量ストレージを提供することができる。一実施形態において、ストレージデバイス706は、フロッピー(登録商標)ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリもしくは他の類似したソリッドステートメモリデバイス、あるいは、ストレージエリアネットワークまたは他の構成におけるデバイスを含む、デバイスのアレイなどの、コンピュータ可読媒体である、またはそのようなコンピュータ可読媒体を含むことが可能である。コンピュータプログラム製品は、情報キャリアとして実体化されることが可能である。また、コンピュータプログラム製品は、実行されると、前述した方法などの1つまたは複数の方法を実行する命令を含むことも可能である。情報キャリアは、メモリ704、ストレージデバイス706、プロセッサ702上のメモリ、または伝搬される信号などのコンピュータ可読媒体、または機械可読媒体である。
高速コントローラ708は、コンピューティングデバイス700に関する帯域幅を多く使用する動作を管理するのに対して、低速コントローラ712は、帯域幅をそれほど多く使用しない動作を管理する。機能のそのような割当ては、単に例示的である。一実施形態において、高速コントローラ708は、メモリ704に結合され、ディスプレイ716に結合され(例えば、グラフィックスプロセッサまたはグラフィックスアクセラレータを介して)、さらに、様々な拡張カード(図示せず)を受け入れることが可能な高速拡張ポート710に結合される。この実施形態において、低速コントローラ712は、ストレージデバイス706および低速拡張ポート714に結合される。様々な通信ポート(例えば、USB、Bluetooth(登録商標)、イーサネット(登録商標)、ワイヤレスイーサネット)を含むことが可能である、この低速拡張ポートは、キーボード、ポインティングデバイス、スキャナなどの1つまたは複数の入出力デバイス、あるいは、例えば、ネットワークアダプタを介して、スイッチまたはルータなどのネットワーキングデバイスに結合されることが可能である。
コンピューティングデバイス700は、図に示されるとおり、いくつかの異なる形態で実施されることが可能である。例えば、コンピューティングデバイス700は、標準のサーバ720として実施されることが可能であり、あるいはそのようなサーバのグループにおいて複数回、実施されることが可能である。また、コンピューティングデバイス700は、ラックサーバシステム724の一部として実施されることも可能である。さらに、コンピューティングデバイス700は、ラップトップコンピュータ722などのパーソナルコンピュータとして実施されることが可能である。代替として、コンピューティングデバイス700の構成要素が、デバイス750のような、モバイルデバイス(図示せず)における他の構成要素と組み合わされてもよい。そのようなデバイスのそれぞれは、コンピューティングデバイス700、750の1つまたは複数を含むことが可能であり、さらにシステム全体が、互いに通信する複数のコンピューティングデバイス700、750から成ることも可能である。
コンピューティングデバイス750は、構成要素の中でもとりわけ、プロセッサ752と、メモリ764と、ディスプレイ754などの入出力デバイスと、通信インタフェース766と、トランシーバ768とを含む。また、デバイス750は、さらなるストレージを提供する、マイクロドライブまたは他のデバイスなどのストレージデバイスを備えることも可能である。構成要素750、752、764、754、766、および768のそれぞれは、様々なバスを使用して互いに接続され、さらに、これらの構成要素のいくつかは、共通のマザーボード上に、または適宜、他の仕方で実装されることが可能である。
プロセッサ752は、メモリ764の中に格納された命令を含め、コンピューティングデバイス750内で命令を実行することが可能である。プロセッサは、別々の、複数のアナログプロセッサ、およびデジタルプロセッサを含むチップのチップセットとして実施されることが可能である。プロセッサは、例えば、ユーザインタフェースのコントロール、デバイス750によって実行されるアプリケーション、およびデバイス750によるワイヤレス通信などの、デバイス750のその他の構成要素の調整をもたらすことが可能である。
プロセッサ752は、ディスプレイ754に結合された制御インタフェース758および表示インタフェース756を介してユーザと対話することが可能である。ディスプレイ754は、例えば、TFT LCD(薄膜トランジスタ液晶ディスプレイ)またはOLED(有機発光ダイオード)ディスプレイ、あるいは他の適切なディスプレイ技術であることが可能である。ディスプレイインタフェース756は、グラフィック情報、およびその他の情報をユーザに提示するようにディスプレイ754を駆動するための適切な回路を備えることが可能である。制御インタフェース758は、ユーザからコマンドを受け取り、それらのコマンドを、プロセッサ752にサブミットするために変換することが可能である。さらに、プロセッサ752と通信状態にある外部インタフェース762が、デバイス750の、他のデバイスとの近領域通信を可能にするように備えられることが可能である。外部インタフェース762は、例えば、一部の実施形態において有線通信をもたらすこと、または他の実施形態においてワイヤレス通信をもたらすことが可能であり、さらに複数のインタフェースが使用されることも可能である。
メモリ764は、コンピューティングデバイス750内で情報を格納する。メモリ764は、コンピュータ可読媒体、もしくは複数のコンピュータ可読媒体、揮発性メモリユニット、もしくは複数の揮発性メモリユニット、または不揮発性メモリユニット、もしくは複数の不揮発性メモリユニットの1つまたは複数として実施されることが可能である。また、拡張メモリ774が提供されて、例えば、SIMM(シングルインラインメモリモジュール)カードインタフェースを含むことが可能な拡張インタフェース772を介して、デバイス750に接続されることも可能である。そのような拡張メモリ774は、デバイス750のために追加のストレージスペースを提供することが可能であり、あるいはデバイス750のためにアプリケーションまたは他の情報を格納することも可能である。具体的には、拡張メモリ774は、前述したプロセスを実行する、または補足する命令を含むことが可能であり、さらにセキュリティで保護された情報を含むことも可能である。このため、例えば、拡張メモリ774は、デバイス750のためのセキュリティモジュールとして提供されることが可能であり、さらにデバイス750のセキュリティで保護された使用を許す命令がプログラミングされることが可能である。さらに、セキュリティで保護されたアプリケーションが、ハッキング不能なようにSIMMカード上に識別情報を置くことなど、さらなる情報と一緒に、SIMMカードを介して提供されることが可能である。
メモリは、例えば、前述したとおり、フラッシュメモリおよび/またはNVRAMメモリを含むことが可能である。一実施形態において、コンピュータプログラム製品は、情報キャリアとして実体化される。コンピュータプログラム製品は、実行されると、前述した方法などの、1つまたは複数の方法を実行する命令を含む。情報キャリアは、メモリ764、拡張メモリ774、プロセッサ752上のメモリなどのコンピュータ可読媒体または機械可読媒体、あるいは、例えば、トランシーバ768または外部インタフェース762を介して受信され得る伝搬される信号である。
デバイス750は、必要な場合、デジタル信号処理回路を含むことが可能な、通信インタフェース766を介してワイヤレスで通信することが可能である。通信インタフェース766は、とりわけ、GSM(登録商標)音声呼、SMSメッセージング、EMSメッセージング、もしくはMMSメッセージング、CDMA、TDMA、PDC、WCDMA、CDMA2000、GPRSなどの、様々なモードまたはプロトコルの下で通信を提供することが可能である。そのような通信は、例えば、無線周波数トランシーバ768を介して行われることが可能である。さらに、Bluetooth、WiFi、またはその他のそのようなトランシーバ(図示せず)を使用してなど、短距離通信を行うことが可能である。さらに、GPS(全地球測位システム)受信機モジュール770が、デバイス750上で実行されるアプリケーションによって適宜、使用されることが可能な、さらなるナビゲーション関連、および位置特定関連のワイヤレスデータをデバイス750に提供することが可能である。
また、デバイス750は、ユーザからの口頭の情報を受け取り、その情報を、使用可能なデジタル情報に変換することが可能なオーディオコーデック760を使用して音響通信することも可能である。オーディオコーデック760は、例えば、デバイス750のハンドセットにおける、スピーカを介するなどして、ユーザのために可聴サウンドを生成することが同様に可能である。そのようなサウンドには、音声電話呼からのサウンドが含まれることが可能であり、記録されたサウンド(例えば、音声メッセージ、音楽ファイルなど)が含まれることが可能であり、さらにデバイス750上で動作しているアプリケーションによって生成されたサウンドが含まれることも可能である。
コンピューティングデバイス750は、図に示されるとおり、いくつかの異なる形態で実施されることが可能である。例えば、デバイス750は、携帯電話機780として実施されることが可能である。また、デバイス750は、スマートフォン782、携帯情報端末、または他の類似したモバイルデバイスの一部として実施されることも可能である。
また、デバイス750は、動きを感知することができる異なる1つまたは複数のデバイスを含むことも可能である。例には、加速度計およびコンパスが含まれるが、以上には限定されない。加速度計およびコンパス、あるいは動きまたは位置を検出することができる他のデバイスは、いくつものベンダから入手可能であり、様々な仕方で動きを感知することが可能である。例えば、加速度計は、加速の変化を検出することが可能であるのに対して、コンパスは、北磁極または南磁極を基準とした向きの変化を検出することが可能である。動きのこれらの変化は、デバイス750によって検出されて、本明細書で説明されるプロセスおよび技術に従って、それぞれのデバイス750の表示を更新するのに使用されることが可能である。
本明細書中に記載されるシステムおよび技術の様々な実施形態は、デジタル電子回路、集積回路、専用に設計されたASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはこれらの組合せとして実現されることが可能である。これらの様々な実施形態は、ストレージシステム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスからデータおよび命令を受け取り、そのようなシステムおよびデバイスにデータおよび命令を送るように結合された、専用または汎用であり得る少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステム上で実行可能であり、さらに/または解釈可能である1つまたは複数のコンピュータプログラムとしての実施を含むことが可能である。
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーションまたはソフトウェアコードとしても知られる)は、プログラマブルプロセッサのための機械命令を含み、さらに高レベル手続き言語および/またはオブジェクト指向プログラミング言語で、ならびに/または、アセンブリ言語/機械語で実施されることも可能である。本明細書で使用される「機械可読媒体」、「コンピュータ可読媒体」という用語は、機械命令を機械可読信号として受け取る機械可読媒体を含め、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される任意のコンピュータプログラム製品、装置、および/またはデバイス(例えば、磁気ディスク、光ディスク、メモリ、PLD(プログラマブル論理デバイス))を指す。「機械可読信号」という用語は、プログラマブルプロセッサに機械命令および/またはデータを提供するために使用される任意の信号を指す。
ユーザとの対話を提供するために、本明細書中に記載されるシステムおよび技術は、ユーザに情報を表示するディスプレイデバイス(例えば、CRT(陰極線管)モニタまたはLCD(液晶ディスプレイ)モニタ)と、ユーザがコンピュータに入力を与えることを可能にするキーボードおよびポインティングデバイス(例えば、マウスまたはトラックボール)とを有するコンピュータ上で実施されることが可能である。他の種類のデバイスが、ユーザとの対話を提供するために使用されてもよく、例えば、ユーザに与えられるフィードバックは、任意の形態の感覚フィードバック(例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック)であってもよく、さらにユーザからの入力は、音響入力、音声入力、または触覚入力を含め、任意の形態で受け取られてもよい。
本明細書中に記載されるシステムおよび技術は、バックエンド構成要素(例えば、データサーバなどの)を含むか、またはミドルウェア構成要素(例えば、アプリケーションサーバ)を含むか、またはフロントエンド構成要素(例えば、ユーザが、本明細書中に記載されるシステムおよび技術の実施形態と対話できるようにするグラフィカルユーザインタフェースまたはウェブブラウザを有するクライアントコンピュータ)を含むか、あるいは、そのようなバックエンド構成要素、ミドルウェア構成要素、またはフロントエンド構成要素の任意の組合せを含むコンピューティングシステムとして実現可能である。このシステムの構成要素は、任意の形態または媒体のデジタルデータ通信(例えば、通信ネットワーク)によって互いに接続されることが可能である。通信ネットワークの例には、LAN(「ローカルエリアネットワーク」)、WAN(「ワイドエリアネットワーク」)、およびインターネットが含まれる。
コンピューティングシステムは、クライアントとサーバを含むことが可能である。クライアントとサーバは、一般に、互いに遠く離れており、通常、通信ネットワークを介して対話する。クライアントとサーバの関係は、それぞれのコンピュータ上で実行され、互いにクライアント-サーバ関係を有するコンピュータプログラムに起因して生じる。
いくつかの実施形態について記載したが、本発明の趣旨および範囲を逸脱することなく、様々な変形が行われ得ることが理解されよう。例えば、本明細書のかなりの部分では、第1言語で書かれたマクロと、異なる言語で通信するように設計されたアプリケーションとの間でインタフェースをとるための特定の仕組みについて記載したが、複数のシステムにわたって単一の開発環境を提供するための他の仕組みが使用されてもよい。
さらに、図に示された論理フローは、望ましい結果を実現するためには、示された特定の順序、または逐次順序を要求しない。さらに、他のステップが提供されることが可能であり、あるいは、記載されたフローからステップが除かれることが可能であり、さらに記載されたシステムに他の構成要素が追加されるか、または記載されたシステムから他の構成要素が取り除かれることが可能である。したがって、他の実施形態が、添付の特許請求の範囲に含まれる。