(57)【要約】【課題】データ処理タスクを生成するシステムを提供する。【解決手段】データ処理タスクを生成するシステムは、エンドユーザが、１つまたは複数のエンドユーザ定義動作を少なくとも１つの利用可能なコンピューティングコンポーネントに関連付けることを可能にする、エンドユーザプログラミングモジュールを含む。このシステムは、また、前記１つまたは複数のエンドユーザ定義動作と前記利用可能なコンピューティングコンポーネントとのバインディングを提供して、前記利用可能なコンピューティングコンポーネントを使用して統合エンドユーザプログラムが生成されるようにする、ルールプラットフォームを含む。そのシステムを使用する方法も提供する。【選択図】図１
2006244466.tif 000002
【特許請求の範囲】
【請求項１】
データ処理タスクを生成するシステムであって、
エンドユーザが、１つまたは複数のエンドユーザ定義動作を少なくとも１つの利用可能なコンピューティングコンポーネントに関連付けることを可能にするエンドユーザプログラミングモジュールと、
前記１つまたは複数のエンドユーザ定義動作と前記利用可能なコンピューティングコンポーネントとのバインディングを提供して、前記利用可能なコンピューティングコンポーネントを使用して統合エンドユーザプログラムが生成されるようにするルールプラットフォームと
を含むことを特徴とするシステム。
【請求項２】
前記利用可能なコンピューティングコンポーネントは、オペレーティングシステムであることを特徴とする請求項１に記載のシステム。
【請求項３】
前記利用可能なコンピューティングコンポーネントは、モニタアプリケーションであることを特徴とする請求項１に記載のシステム。
【請求項４】
前記利用可能なコンピューティングコンポーネントは、ユーザアプリケーションであることを特徴とする請求項１に記載のシステム。
【請求項５】
請求項１の前記コンポーネントを含む、コンピュータが解釈できるデータ構造を含むことを特徴とするコンピュータ読取り可能記憶媒体。
【請求項６】
請求項１の前記コンポーネントを含むデータ構造を含む、コンピュータが解釈できるデータを含むことを特徴とするデータ信号。
【請求項７】
データ処理コンポーネントを生成する方法であって、
イベントの発生時にとるべきエンドユーザ定義動作を指定すること、
前記エンドユーザ定義動作を実行することができる第１のソフトウェアコンポーネントを識別すること、および、
前記第１のソフトウェアコンポーネントを使用して前記エンドユーザ定義動作を実行する第２のソフトウェアコンポーネントを生成すること
を含むことを特徴とする方法。
【請求項８】
先在するソフトウェアコンポーネントの中に、前記第２のソフトウェアコンポーネントを起動するグラフィカルコントロールを生成することをさらに含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記第２のソフトウェアコンポーネントを起動する、グラフィカルユーザインタフェース用のアイコンを生成することをさらに含むことを特徴とする請求項７に記載の方法。
【請求項１０】
前記第１のソフトウェアコンポーネントを識別することは、オペレーティングシステムのコンポーネントを識別することを含むことを特徴とする請求項７に記載の方法。
【請求項１１】
前記第１のソフトウェアコンポーネントを識別することは、モニタプロセスのコンポーネントを識別することを含むことを特徴とする請求項８に記載の方法。
【請求項１２】
前記第１のソフトウェアコンポーネントを識別することは、デーモンプロセスのコンポーネントを識別することを含むことを特徴とする請求項９に記載の方法。
【請求項１３】
前記第１のソフトウェアコンポーネントを識別することは、ユーザアプリケーションのコンポーネントを識別することを含むことを特徴とする請求項７に記載の方法。
【請求項１４】
コンピューティングデバイスに請求項１３の方法を実行させることができる、コンピュータが解釈できるデータを含むことを特徴とするコンピュータ読取り可能記憶媒体。
【請求項１５】
コンピューティングデバイスに請求項１３の方法を実行させることができる、コンピュータが解釈できるデータを含むことを特徴とするデータ信号。
【請求項１６】
データ処理コンポーネントを生成するシステムであって、
コマンドイベント時にとるべきエンドユーザ定義動作を指定する手段と、
前記指定されたエンドユーザ定義動作を実行することができる、第１のソフトウェアコンポーネントを識別する手段と、
前記第１のソフトウェアコンポーネントを使用して前記エンドユーザ定義動作を実行する第２のソフトウェアを生成する手段と
を含むことを特徴とするシステム。
【請求項１７】
先在するソフトウェアコンポーネント内に、前記第２のソフトウェアコンポーネントを起動するグラフィカルコントロールを生成する手段をさらに含むことを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記第２のソフトウェアコンポーネントを起動する、グラフィカルユーザインタフェース用のアイコンを生成する手段をさらに含むことを特徴とする請求項１６に記載のシステム。
【請求項１９】
収集してエンドユーザ定義動作を生成することができる、ユーザ動作を監視する手段をさらに含むことを特徴とする請求項１６に記載のシステム。
【請求項２０】
前記ユーザ定義動作に基づいてプログラムモジュールを生成する手段をさらに含むことを特徴とする請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、コンピューティングシステムに関し、より詳細には、データ処理タスクを生成するシステムに関する。
【背景技術】
【０００２】
最近のコンピューティングシステムでは、実行の様々な状態において、数百のソフトウェアプロセスが稼動中である可能性がある。これらのプロセスは、オペレーティングシステムによって始動されるバックグラウンドプロセス、起動時またはアプリケーションの立ち上げ時に始動されるモニタプロセスもしくはサービスプロセス、またはアプリケーション自体である可能性がある。これらのプロセスのほとんどではないにしろ、その多くは、またはこれらのプロセスの機能は、直接的に制御するユーザの能力を超えている。したがって、これらのプロセスが提供する機能にアクセスしなければならないような場合には、そのようなアクセスは別のソフトウェアプロセスによって成されなければならない。
【０００３】
コンピュータシステム上で実行されているプロセス数は、一般に、システムが処理しなくてはならないデータ量、および実行のためにシステムが呼び出されるタスク数の関数である。一般に、これらのコンピューティング動作の最も非効率な部分は人との対話を必要とする部分である。さらに、適正に実現されたコンピューティングプロセスは、通常、人間オペレータよりも正確に、複雑で反復的なタスクを実行することができる。したがって、タスクの処理中における人との対話の必要性を低減するのを助けることができるシステムおよび方法が必要とされている。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
一般に、コンピューティングプロセスによって提供される機能を完全に利用するためには、エンドユーザは熟練したコンピュータプログラマでなくてはならない。多くの利用可能なファンクションは、コンピュータのプログラミングに熟練しているのではなく、単にコンピュータを使用するのに習熟しているだけのエンドユーザによって、使用されないままとなっている。このことの理由は、エンドユーザは、コンピューティングシステムに組み込まれているいくつかの機能が存在することさえも知らないことが多いためである。これらの同様なユーザの多くは、コンピューティングコンポーネントの基礎をなすファンクションにアクセスする能力によって大きな便益を得るはずである。現在のシステムでは、エンドユーザがコンピューティングシステムのファンクションにアクセスして、個々のエンドユーザのニーズに合わせてそれらのファンクションのグループを組み立てることができない。
【課題を解決するための手段】
【０００５】
以下は、基本的な理解と高レベルな調査を提供するための簡略化した要約を表わすものである。この要約は、広範囲にわたる概観ではない。それは、基本要素／重要要素を識別するためでもなく、範囲を明らかにするためでもない。その唯一の目的は、後に提示する、より詳細な説明の序章として、いくつかの概念をより単純化した形態で提示することである。さらに、本明細書において使用する章の表題は、簡便さのためにつけたものにすぎず、いかなる状況においても限定のためとは解釈すべきではない。
【０００６】
エンドユーザプログラミングモジュールは、コンピューティングシステム内のコンポーネントからのファンクションを組み合わせることができるエンドユーザプログラムを生成するのに使用することができる。これらのコンポーネントは、とりわけ、オペレーティングシステムプロセス、バックグラウンドプロセス、デーモン、およびスタンドアロンアプリケーションなどのコンピューティングシステムに常駐するソフトウェアからのコードであり得る。エンドユーザプログラミングモジュールの実行は、いくつかのエンドユーザ定義トリガイベントに応答して自動的に行うことが可能であり、エンドユーザの介入なしに、エンドユーザによって定義されたコンピューティングタスクを実行することができる。追加として、または代替的に、エンドユーザプログラムの実行は、エンドユーザからのコマンドに応答させることができる。
【０００７】
エンドユーザは、エンドユーザ自身によって識別されるタスクを実行するコンポーネントを生成するための基礎としてのルールプラットフォーム（rules platform）を使用することができる。エンドユーザは、このルールプラットフォームを使用することによって、データ処理タスクを、選択されたイベントの発生時に自動的に実行させるか、またはエンドユーザからのコマンドに応じて手動で実行させることができる。そのようなタスクの遂行は、コンピューティングシステムの１つまたは複数のコンポーネントによって実行することができる。前記コンピューティングシステムの１つまたは複数のコンポーネントは、それぞれ、エンドユーザプログラムの処理全体の一部に寄与することができる。
【０００８】
エンドユーザプログラムは、ユーザアプリケーションなどの既存のコンポーネントに、カスタム機能を提供することができる。この機能は、ルールプラットフォームにアクセスして、タスクを、グラフィカル（またはその他の）ユーザインタフェースの要素などの既存のコンポーネントの様々なコントロールに関連付けることによって、生成することができる。このようにして、エンドユーザは、スタンドアロンアプリケーションなどの標準コンポーネントによって提供されるファンクションを拡張または修正することができる。
【０００９】
開示し、説明したコンポーネントおよび方法は、以下に説明し、特に特許請求の範囲において示す、１つまたは複数の特徴を含む。以下の説明および添付の図面には、特定の説明のためのコンポーネントおよび方法を詳細に記載する。しかしながら、これらのコンポーネントおよび方法は、開示したコンポーネントおよび方法を利用することができる様々な方法の内のいくつかを示すにすぎない。開示し、説明したコンポーネントおよび方法の特定の実装形態としては、そのようなコンポーネントおよび方法の一部、大部分、または全部、ならびにそれらの均等物を挙げることができる。本明細書に示す特定の実装形態および実施例は、図面と合わせて考察すれば、以下に示す詳細な説明から明白になるであろう。
【発明を実施するための最良の形態】
【００１０】
本願において使用する場合には、「コンポーネント」、「システム」、「モジュール」などの用語は、ハードウェア、（例えば、実行中の）ソフトウェア、および／またはファームウェアなどの、コンピュータ関連のエンティティを意味するものである。例えば、コンポーネントとは、プロセッサ上で実行中のプロセス、プロセッサ、オブジェクト、実行可能物、プログラム、および／またはコンピュータなどであり得る。また、サーバ上で実行中のアプリケーションおよびサーバのいずれもが、コンポーネントであり得る。１つまたは複数のコンポーネントがプロセス内に常駐することが可能であるとともに、コンポーネントは、１つのコンピュータ上に局在化させること、および／または２つ以上のコンピュータ間に分散させることが可能である。
【００１１】
開示するコンポーネントおよび方法は、図面を参照して説明してあり、これらの図面全体において、同一の参照番号は同一の要素を指している。以下の説明においては、説明の目的で、開示の主題についての完全な理解が得られるように多数の特定の詳細を記載する。しかしながら、これらの特定の詳細のあるものは除外したり、または特定の実装形態における、他のものと組み合わせたりすることができることは明白である。その他の場合においては、説明を容易にするために、特定の構造および装置をブロック図の形態で示す。さらに、記載する特定の実施例は、クライアント／サーバアーキテクチャと整合する専門用語を使用するか、またはクライアント／サーバ実装形態の例である場合さえもあるが、当業者であれば、クライアントとサーバの役割は逆転させてもよいこと、開示し、説明するコンポーネントおよび方法はクライアント／サーバアーキテクチャに限定されるものではなく、開示して説明したコンポーネントおよび方法の趣旨と範囲から逸脱することなく、具体的にはピア・ツー・ピア（Ｐ２Ｐ）アーキテクチャを含む、その他のアーキテクチャでの使用に容易に適合できることを認識するであろう。さらに、本明細書に提示する特定の実施例は、特定のコンポーネントを含むか、または参照するが、本明細書において開示して説明するコンポーネントおよび方法の実装形態は、それらの特定のコンポーネントに必ずしも限定されるものではなく、その他の文脈においても同様に利用することができることに留意されたい。
【００１２】
さらに、提示する特定の実施例は、パーソナルコンピュータのコンポーネントに基づくシステムまたは方法を説明または記述するが、本明細書において開示して説明するコンポーネントおよび方法の使用は、その範囲に限定はされないことを理解されたい。例えば、開示して説明するコンポーネントおよび方法は、分散またはネットワークコンピューティング環境において使用することができる。追加として、または代替的に、開示して説明するコンポーネントおよび方法は、多数のクライアントがアクセスする単一のサーバにおいて使用することができる。当業者であれば、開示して説明するコンポーネントおよび方法は、多種多様なコンピューティングデバイス上でその他のコンポーネントを生成すること、およびその他の方法を実行することに使用できることを容易に理解するであろう。
【００１３】
図１は、エンドユーザプログラミングシステム１００のシステムブロック図である。エンドユーザプログラミングシステム１００は、エンドユーザによって記述または定義されるコンピューティングタスクを実行することができる、コンピューティングコンポーネントを生成するのに使用することができる。コンピューティングコンポーネントは、そうでなければエンドユーザが手動で実行することになるタスクを、ユーザインタフェースにおける１つまたは複数のコマンドの入力によって、実行することができる。追加として、または代替的に、コンピューティングコンポーネントは、エンドユーザが通常は直接アクセスすることのできないコンピューティング機能を使用することによって、タスクを実行することができる。
【００１４】
エンドユーザプログラミングシステム１００は、システム１００のための処理環境を提供するオペレーティングプラットフォーム１１０を含む。この文脈において、オペレーティングプラットフォーム１１０には、ハードウェアコンポーネント、ソフトウェアコンポーネント、またはハードウェアコンポーネントとソフトウェアコンポーネントの両方を含めることができる。オペレーティングプラットフォーム１１０としての使用を特に企図する実装形態の中には、ソフトウェアベースオペレーティングシステム、ファームウェア内にホストされたオペレーティングシステムを有するコンピューティングデバイス、および埋め込みシステムがある。
【００１５】
コンピューティング環境における様々な出来事を、意味のあることとして取り扱い、イベントを生成するのに使用することができる。そのような出来事としては、とりわけ、ファイルの作成、修正、および消去、電子メールメッセージの受信、アプリケーションの立ち上げまたは終了がある。あるイベント１２０を、オペレーティングプラットフォーム１１０によって生成し、何らかの出来事がコンピューティング環境において発生したことを表わすことができる。イベント１２０は、ある処理タスクが実行可能であること、または実行すべきであることの、インジケータとしての役割を果たすことができる。イベント１２０の形態は、２つまたは３つ以上のコンピューティングコンポーネント間で伝達されるメッセージ、処理フラグ、またはその他の適切なインジケータとすることができる。特に、イベント１２０の形態は、極めて実装形態依存であり、とりわけオペレーティングプラットフォーム１１０によって提供される機能によって変えることができる。
【００１６】
エンドユーザプログラミング（ＥＵＰ）モジュール１３０は、エンドユーザが操作して、イベントの発生時に、またはエンドユーザからのコマンドの呼び出し時に、自動的にとるべき動作を定義するのに使用することができる、エンドユーザプログラム１４０などの、コンポーネントを提供することができる。エンドユーザは、ＥＵＰモジュール１３０にアクセスして、コンピューティングシステムの利用可能なファンクションの中から選択される、一群のデータ管理タスクまたは情報処理タスクを含む、エンドユーザプログラムを生成することができる。例えば、エンドユーザプログラムを生成して、指定されたユーザからの電子メールの到着を検出し、そのメッセージに添付ファイルがあるかどうかを検査し、添付ファイルがあればそれを指定のディレクトリに保管することができる。これらの動作は、エンドユーザプログラムを最初に生成すること以外に、エンドユーザが能動的に参加することなく、自動的に実行することができる。
【００１７】
ＥＵＰモジュール１３０には、コンピューティングコンポーネントによって実行することができる特定の動作を、ユーザが識別または指定することを可能にする、ユーザインタフェースを含めることができる。このユーザインタフェースは、とりわけ、グラフィカルユーザインタフェース（ＧＵＩ）、コマンドラインインタフェース（ＣＬＩ）、テキストベースインタフェース、またはウェブベースインタフェースとすることができる。また、ユーザインタフェースは、ソフトウェア開発業者がソフトウェアコードを書いて、編集し、試験するのに使用する統合開発環境に類似する、ある種のエンドユーザプログラミング環境とすることもできる。特に、ユーザインタフェースは、ユーザが様々なプログラムファンクションまたはデータオブジェクトを表わすグラフィック要素を選択して、それらの要素を組み合わせてエンドユーザプログラムにすることを可能にする、グラフィック開発環境とすることができる。
【００１８】
エンドユーザプログラム１４０は、単一タスクとするか、または実行すべきタスクの群とすることができることに留意されたい。ＥＵＰモジュール１３０は、手動または自動的に操作することが可能であるか、または以前には他のソフトウェアコンポーネント、例えば、それに限定はされないが、オペレーティングシステム、サービスコンポーネント、アプリケーション、またはその他のコンピューティングコンポーネントなどによってのみアクセスが可能であった、コンピューティングシステムに含まれるファンクションへのインタフェースを提供する。エンドユーザは、このＥＵＰモジュール１３０のユーザインタフェースを使用して、コンピューティングシステムのこれらのファンクションを使用するコンピューティングコンポーネントを構築して、多種多様なコンピューティングタスクを達成することができる。
【００１９】
一具体例として、電子メールおよびファイル整理がある。エンドユーザは、添付ファイルを有する電子メールを受信するときにとるべき動作を定義することができる。例えば、エンドユーザは、添付ファイルを含む電子メールをあるドメイン（またはそのドメインのユーザ）から受信すると、添付ファイルを特定のディレクトリに保管し、ウイルスのスキャンを行い、次いで指定したプログラムを使用して開くことを規定することができる。この動作を定義するために、エンドユーザは、コンピューティングシステム上で利用可能な特定のファンクションのリストにアクセスすることができる。この例においては、関係するファンクションとしては、新規電子メールメッセージの検出、ファイルの保管、ウイルススキャン、およびファイルを開くことである。エンドユーザはＥＵＰモジュール１３０を使用して、これらのファンクションを集約して単一のエンドユーザ定義プログラムにするとともに、集約されたファンクションを発生させるイベントによってトリガされる、ルールを指定することができる。ここで、第１のイベントは、電子メールの受信によってトリガすることができる。エンドユーザ定義プログラムは、電子メールメッセージが所定の送信者からのものかどうかを判定し、そうであれば、電子メールが添付ファイルを含むかどうかを判定するルールを処理することができる。このルールの両方の条件がイエスである場合には、ユーザ定義モジュールは、添付ファイルを所定のディレクトリに保管することができる。次いで、エンドユーザ定義モジュールは、ウイルススキャンプログラムを起動して、保管ファイル内のウイルスを検出することができる。保管ファイルがスキャニングによって検出されるウイルスを含まない場合には、ユーザ定義モジュールは、ワードプロセッサ、写真編集プログラム、またはその他の適当なアプリケーションなどのアプリケーションを立ち上げ、開いたアプリケーションに保存済みファイルを開かせる。これらのすべてのステップは、エンドユーザからの介入なしに、自動的に実行することができる。
【００２０】
上記の例において説明したルールの処理は、エンドユーザに、ある処理タスクに合わせた状況またはシナリオを定義する能力を与える、ルールプラットフォーム１５０を使用して達成することができる。ルールプラットフォーム１５０には、エンドユーザが、自動的、またはエンドユーザからのコマンドに応じて実施することができる、１つまたは複数の動作を定義することを可能にする論理を含めることができる。これらのルールは、ボタンのクリック（または右クリックなど）、リンク、メニュー、またはその他のインタフェース要素などのユーザインタフェースの要素を使用して実行することができる、プログラムまたはエージェントに添付し、または組み入れることができる。追加として、または代替的に、エンドユーザ定義モジュール用またはエンドユーザ定義スタンドアロンアプリケーション用のアイコンを作成して、そのアイコンをダブルクリックするか、またはその他の方法でそのアイコンに関連する実行可能コードを起動することによって、それを実行することができる。そのような動作は、開発者設計動作またはファンクションを有する先在するコンポーネントに追加するか、またはスタンドアロン型エンドユーザ作成コンポーネントとして生成することができる。ルールプラットフォームは、バインディング（bindings）およびシステム実装要素またはアプリケーション実装要素に対する、リフレクション（reflection）を用いて、エンドユーザ定義コンポーネントを生成して実行することができる。この文脈、およびその他の必要または適当な場合において、バインディングは、ファンクションまたはファイルを表わすユーザインタフェース中のグラフィック要素などのファンクションまたはデータオブジェクトの表現と、実行時にファンクションを実際に実行するか、またはデータオブジェクトを含む、基礎となるコードとの間の、リンケージまたはマッピングとして理解することができる。
【００２１】
図２は、エンドユーザプログラミングモジュール２００のシステムブロック図である。エンドユーザプログラミングモジュールは、エンドユーザがエンドユーザ定義プログラムコンポーネントを定義して作成することを可能にする、ユーザインタフェース全体の一部として使用することができる。特に、エンドユーザプログラミングモジュール２００は、図１のエンドユーザプログラミングモジュール１３０として使用することができる。エンドユーザは、エンドユーザプログラミングモジュール２００にアクセスして、使用可能なファンクションまたはデータオブジェクトを発見して、それらのファンクションまたはデータオブジェクトを組み合わせてエンドユーザプログラムとすることができる。
【００２２】
エンドユーザプログラミングモジュール２００は、コードモジュール２１０を含む。コードモジュール２１０は、コードデータストア２２０にアクセスすることができる。コードデータストア２２０は、エンドユーザ定義動作コンポーネントの一部として使用可能なファンクションおよびデータオブジェクトを含む、基礎となるソフトウェアコードを含む。バインディングに対するリフレクションを使用する実装形態などの、いくつかの実装形態においては、リフレクションスキームによって提供される技法を使用して、コードデータストア２２０において記述子の集合を維持することの代替として、またはそれに追加して、利用可能なコードを動的に発見することができることに留意されたい。
【００２３】
コードモジュール２１０は、コードデータストア２２０内の任意のコードなど、利用可能なそれぞれのコードまたはデータオブジェクトの要約の記述を、人間が読み取れるフォーマットにして提供することができる。追加として、または代替的に、コードモジュール２１０は、コードデータストア２２０内のコードのコンピュータが解読できる記述子または識別子を、マッピングモジュール２３０に提供することができる。マッピングモジュール２３０は、コードデータストア２２０からのコードを、１つまたは複数のエンドユーザ動作にマッピングまたはバインディングすることができる。このようにして、あるファンクションを提供する適当なコンピューティングコンポーネントを、エンドユーザが実行することを望む動作の記述子にマッチングさせることができる。
【００２４】
エンドユーザ動作モジュール２４０は、エンドユーザが記述、定義、または指定することができるエンドユーザ動作にアクセスして、そのエンドユーザ動作に対する適当な記述子を、マッピングモジュール２３０がエンドユーザ動作をコードモジュール２１０によって提供されるコードとマッチングまたはバインディングするのに使用することができる形式で、提供することができる。例えば、コード化された記述子は、エンドユーザ動作データストア２５０に記憶されるエンドユーザ動作と関連させることができる。このエンドユーザ動作は、例えば、「ファイルＸをディレクトリＹに記憶する」またはその他の適当な動作のためのコマンドとすることができる。コードデータストア２２０内のコードの対応する記述子を、マッピングモジュール２３０によってエンドユーザ動作にマッチングさせて、エンドユーザ動作をいずれかのコードにマッピングすることができる。１つまたは複数のそのようにマッチングさせたエンドユーザ動作およびいくつかのコードは、エンドユーザ定義動作モジュール２６０または完成したエンドユーザプログラムの一部として使用することができる。
【００２５】
エンドユーザプログラミングモジュール２００の一動作モードの例を次に示す。ユーザは、ＧＵＩ、ＧＬＩ、またはその他の任意の適当なコンピュータ／人間インタフェースなどのユーザインタフェースを介して、エンドユーザプログラミングモジュール２００にアクセスすることができる。エンドユーザは、ユーザインタフェースのコンポーネントを使用して、１つまたは複数のエンドユーザ動作を定義することができる。追加として、または代替的に、ユーザは、エンドユーザ動作データストア２５０に記憶された事前定義されたエンドユーザ動作の集合の中から、１つまたは複数のエンドユーザ動作を選択することができる。
【００２６】
エンドユーザ動作モジュール２４０は、エンドユーザが定義または選択したエンドユーザ動作に関連する記述子を提供するか、またはそれにアクセスする。この記述子は、エンドユーザが望むファンクションのコンピュータが解釈できる（machine-interpretable）記述を提供することができる。エンドユーザ動作モジュール２４０は、その記述子をマッピングモジュール２３０に提供することができる。
【００２７】
マッピングモジュール２３０は、その記述子をコードモジュール２１０に供給することができる。コードモジュール２１０は、その記述子を使用して、対応する記述子を有するとともに、エンドユーザが望む処理関数を提供するコードを捜し出す。コードモジュール２１０は、コードデータストア２２０内でそのようなコードを見つけると、捜し出されたコードの識別子をマッピングモジュール２３０に提供する。次いで、マッピングモジュール２３０は、エンドユーザ動作を、ユーザ定義動作モジュール２６０を生成するコードにマッチングさせるか、またはそれとバインディングする。
【００２８】
図３はエンドユーザ処理システム３００のシステムブロック図である。システム３００は、人間ユーザにシステムへのアクセスを提供するエンドユーザプログラミングモジュール３１０を含む。エンドユーザプログラミングモジュール３１０は、ハードウェアコンポーネントとソフトウェアコンポーネントの両方を含むことができる、動作プラットフォーム３２０に結合されている。また、エンドユーザプログラミングモジュール３１０は、エンドユーザ定義タスク３３０の集合、およびルールプラットフォーム３４０にアクセスする。エンドユーザ定義タスク３３０は、動作の論理に対するタスクのバインディングを含む。ユーザインタフェース３５０は、システム３００と人間エンドユーザとのフロントエンドユーザインタフェースを提供するとともに、コンポーネントのための制御要素を含む。
【００２９】
記述したタスクのいくつかを実行するために、エンドユーザ処理システム３００はルール代数（rule algebra）を使用することができる。本明細書においては特定のルール代数について説明するが、このルール代数の変形形態や、まったく異なるルール代数を代用することもできる。開示して説明するルール代数は、別の適当なコンポーネントで置換することもできることに留意されたい。
【００３０】
企図されるルール代数には５つの基本項目、すなわちプロパティ、フィルタ、イベント、動作、およびセットを持たせることができる。プロパティは、エンドユーザデータ型の属性を記述することができる。エンドユーザは、プロパティを使用してフィルタおよび動作を記述することができる。フィルタは、データ型に適用する処理スクリーンとして使用することができるブール関数（Boolean function）を定義することができる。このフィルタは、真または偽の値を返すことができる。イベントは、関心事の発生を定義することができる。イベントは、１つまたは複数のデータ型に関連付けることができる。動作は、何らかの処理関数を実行する、データ型の副作用的メソッド（side-effecting method）である。動作は、ゼロまたは１以上の入力パラメータをとることができる。セットは、データ型の集まり（collection）とすることができる。
【００３１】
プロパティ、フィルタ、および動作は、ルールを使用して構築することができる。各ルールにおいては、プロパティを式（expression）と比較すること、対象オブジェクトをフィルタと合致させること、対象オブジェクトがセットに含まれるかどうかを判定することを含む、様々な条件を使用することができる。これらの構築された項目は、エンドユーザプログラムの部分として使用することができる。例えば、抽出されたセットは、完全なエンドユーザプログラムとするか、または別のセットと組み合わせて（合併して）より複雑なエンドユーザプログラムを作成することができる。セットは、バッチを作成する動作に関連付けることができる。バッチは、実行すべきセット指向（set-oriented）タスクを定義することができる。バッチは手動で実行するか、または所定の時間に、または予定どおりに実行するようにスケジュールすることができる。イベントおよび動作からエージェントを作成することができる。エージェントは、あるイベントの発生時に実行すべき動作を定義する。
【００３２】
ルール代数の使用を支援するために、オブジェクトまたはデータ型を、それらのオブジェクトまたはデータ型についての照会を直接支援する方法で記憶することができる、ファイルシステムを使用することができる。それらのオブジェクトまたはデータ型についてのメタデータを、オブジェクト自体と一緒に記憶し、これを使用して照会および動作を支援することができる。様々なファイルシステムを使用して、これらのオブジェクトまたはデータ型を記憶することができる。このファイルシステムは、項目レベルプロパティおよび項目間関係に基づく、物理編成（physical organization）モデルを提供することができる。そのようなファイルシステムを用いて、オブジェクトまたはデータ型を、オブジェクトまたはデータ型を様々な方法で選択または集約するように設計されたルールを実行することに基づいて、動的に編成することができる。
【００３３】
図４は、エンドユーザプログラミングシステム４００のシステムブロック図である。エンドユーザプログラミングシステム４００は、遠隔地から先在のエンドユーザプログラミングモジュールを取得するのに使用することができる。特に、取得することができるエンドユーザプログラミングモジュールは、ローカルコンピューティングシステム上の１つまたは複数のユーザ定義動作と一致する。
【００３４】
エンドユーザプログラミングシステム４００は、ユーザ定義動作４１０を含む。ユーザ定義動作４１０は、エンドユーザが実行したいと望むあるコンピューティングタスクの記述とすることができ、例えば、主としてユーザからの特定のコマンドに応じて実行すべき、このコンピューティングタスクは、あるイベントに応答して実行されるか、またはあるスケジュールに従って実行されるように指示することができる。さらに、ユーザ定義動作４１０には、どのような１つまたは複数のファンクションをそのユーザ定義動作が要求しているかをその他のコンポーネントが判定することを可能にする、特定の識別子または記述子を含めるか、またはそれに関連付けることができる。
【００３５】
エンドユーザプログラミングインタフェース４２０は、どの動作を使用するかをユーザが指定または定義することができる手段を提供することができる。指定または定義された動作の記述を、エンドユーザプログラミングインタフェース４２０によって、ネットワーク４３０上でモジュールサーバ４４０に送ることができる。モジュールサーバ４４０は、先に構築されたエンドユーザプログラミングモジュールを、自分達の要求を満たす追加のファンクションを取得することを望むユーザに提供する、ホストとしての役割を果たすことができる。
【００３６】
モジュールサーバ４４０は、受け取ったエンドユーザ定義動作４１０の記述を、マッチングコンポーネント４５０に中継することができる。マッチングコンポーネント４５０は、中継された記述を使用して、モジュールライブラリ４６０を探索してエンドユーザが必要とするファンクションを提供することができる１つまたは複数のエンドユーザプログラミングモジュールを捜し出すことができる。次いで、このマッチングコンポーネントは、ネットワーク４３０を介してエンドユーザプログラミングインタフェース４２０に伝送するために、マッチングエンドユーザプログラミングモジュールのコピーを、モジュールサーバに送ることができる。追加として、または代替的に、モジュールサーバ４４０は、利用可能なエンドユーザプログラミングモジュールのリストを、エンドユーザプログラミングインタフェース４２０に供給して、リスト上のエンドユーザプログラミングモジュールの１つを伝送するコマンドを待ち受ける。当業者であれば、モジュールサーバ４４０は、とりわけ、ウェブサーバまたはファイルトランスファプロトコル（ＦＴＰ）サーバとして実現できることを理解するであろう。追加として、または代替的に、モジュール検索およびダウンロードは、ウェブサービスとして提供することができる。
【００３７】
本明細書において、例えば、識別またはマッチングタスクと関係して、開示して説明する様々なコンポーネントは、その様々な態様を実施するために様々な人工知能ベースの方式を使用することができる。例えば、エンドユーザ定義動作のエンドユーザプログラミングモジュールとのマッチングは、ニューラルネットワーク、エキスパートシステム、ルールベース処理コンポーネント、またはサポートベクトルマシン（ＳＶＭ）によって実施することができる。
【００３８】
分類関数（classifier）は、入力属性ベクトル、Ｘ＝（ｘ１，ｘ２，ｘ３，ｘ４，．．．ｘｎ）を、その入力があるクラスに属する信頼度（confidence）、すなわちｆ（Ｘ）＝信頼度（クラス）にマッピングする関数である。このような分類は、確率および／または統計に基づく分析（例えば、分析ユーティリティとコストへの属性分配）を使用して、ユーザが自動的に実行することを望む動作を予知または推論することができる。エンドユーザプログラミングモジュールの場合には、イベントのパターンを分類して、１つまたは複数の特定の動作を行うべきかどうかを判定することができる。この開示を読めば当業者には明白であるように、その他のパターンマッチングタスクを使用することもできる。
【００３９】
ＳＶＭは、使用することができる分類関数の一例である。ＳＶＭは、入力可能な空間における超曲面（hypersurface）を見つけることによって動作し、この超曲面は、トリガ基準を非トリガイベントから分別することを試みる。直感的に、これは、訓練データと同一ではないが、それに近い試験データに対して分類を正しくする。その他の有向および無向モデル分類技法としては、例えば、ナイーブベイズ（naive Bayes）、ベイズネットワーク（Bayesian networks）、決定木、および異なる依存性パターンを提供する確率的分類モデルが挙げられる。本明細書において使用する分類としては、優先順位のモデルを開発するのに使用される統計的回帰も含まれる。
【００４０】
本明細書から容易に理解されるように、ここで開示または説明したコンポーネントは、（例えば、一般的な訓練データによって）明示的に訓練された分類関数だけでなく、（例えば、ユーザの挙動を観察すること、外来情報を受け取ることによって）暗黙的に訓練された分類関数を使用することができる。例えば、ＳＶＭは、分類生成関数（classifier constructor）および特徴選択モジュールにおける学習フェーズまたは訓練フェーズによって構成される。すなわち、分類関数は、それには限定されないが、デバイスにデータを送るべきかどうかを判定することを含み、多数の関数を自動的に実行するのに使用することができる。
【００４１】
記述したコンポーネントおよび方法は、エンドユーザプログラミングについての一般的なフレームワークを提供することを理解されたい。そのようなエンドユーザプログラミングの使用の中では、コンポーネントおよび方法は、エンドユーザ定義自動タスクの生成である。やはり可能であるのは、例えば、一群の画像ファイルのそれぞれの解像度を変更することによって、多数のファイルに対して同様の種類の変更をバッチ方式で行う能力である。さらに、人工知能コンポーネントといっしょに複数タスクを実行する集約モジュール（aggregated modules）などの、より複雑なモジュールを組み合わせることによって、高度に知的な挙動が可能となる。
【００４２】
エンドユーザプログラミングシステム４００の一動作モードは、以下のとおりである。エンドユーザは、エンドユーザプログラミングインタフェース４２０にアクセスして、エンドユーザが自分のコンピュータ上で実行したいと望む１つまたは複数の動作を定義する。エンドユーザプログラミングインタフェース４２０は、エンドユーザによって与えられた定義からエンドユーザ定義動作４１０を作成するとともに、そのエンドユーザ定義動作の適当な記述子を作成する。次いで、エンドユーザプログラミングインタフェース４２０は、その記述子をネットワーク４３０を介してモジュールサーバ４４０に送る。モジュールサーバ４４０は、その記述子をマッチングコンポーネント４５０に送る。マッチングコンポーネント４５０は、モジュールライブラリ４６０を検索して、ユーザが指定するファンクションを提供するモジュールを捜し出す。次いで、マッチングコンポーネントは、モジュールサーバ４４０に、捜し出されたモジュールのリストを供給する。
【００４３】
モジュールサーバ４４０は、捜し出されたモジュールのリストを、ネットワーク４３０を介してエンドユーザプログラミングインタフェース４２０に送る。エンドユーザは、そのリストから１つまたは複数のモジュールを選択して、その選択をネットワーク４３０を介してモジュールサーバ４４０に送る。次いで、選択されたモジュールは、ネットワーク４３０を介してエンドユーザプログラミングインタフェース４２０に送られて、エンドユーザのマシンに実装される。
【００４４】
図５は自動エンドユーザプログラミングシステム５００のシステムブロック図である。自動エンドユーザプログラミングシステム５００を使用して、ファンクションプログラムモジュールを生成することが可能であり、このファンクションプログラムモジュールは、様々なコンピューティングタスクを実行する間に、エンドユーザがコンピュータと実際に対話する方法に基づいている。具体的には、自動エンドユーザプログラミングシステム５００は、コンピュータ上でユーザのコマンドおよび動作を監視、分析して、エンドユーザプログラミングモジュールを作成することによって自動化が可能な、一般的に実行されるタスクのパターンを識別することができる。
【００４５】
自動エンドユーザプログラミングシステム５００は、モニタ５１０を含む。モニタ５１０は、例えばＧＵＩ環境において、マウスクリックや、そのマウスクリックによって始動される特定の動作などのエンドユーザ動作を追跡することができる。モニタ５１０は、オペレーティングプラットフォーム５２０上で動作するとともに、それと相互作用する。当業者であれば容易に理解するように、ＧＵＩなどのインタフェース環境において実行されるある種のエンドユーザ動作は、オペレーティングプラットフォーム５２０などのオペレーティング環境によって実際に実行される動作を始動する。エンドユーザ操作および動作を追跡する能力に加えて、モニタ５１０は、エンドユーザの代わりに、またはそのコマンドに応答して、オペレーティングプラットフォーム５２０がとる動作を追跡することができる。
【００４６】
モニタ５１０は、検出された動作を動作データストア５３０内に記憶することができる。動作データストア５３０は、動作オブジェクトの収集、エンドユーザ動作のリスト、またはエンドユーザとコンピュータとの対話の様子の記録を保存する別の適当な形態とすることができる。モニタは、これらのエンドユーザ動作を分析して、動作のパターンが現れつつあるか、または現れているかを判定することを試みることができる。例えば、エンドユーザは、写真編集プログラムにおいて各個別の画像ファイルを開くことによって、多数の写真について作業中であり、著作権の通告を画像ファイルに挿入している可能性がある。モニタ５１０は、エンドユーザがこのタスクを反復していると判定して、反復タスクについての情報をエンドユーザプログラミングモジュール５４０に送ることができる。
【００４７】
エンドユーザプログラミングモジュール５４０は、この反復タスク（または一連のタスク）についての情報を使用して、エンドユーザ定義動作を作成して、そのタスクを実行するのに使用することができるファンクションをファンクションデータストア５５０内で捜し出す。この捜し出されたファンクションを使用して、モニタ５１０によって識別されるタスクを自動的に実行することができるエンドユーザプログラムを作成することができる。これらの動作は、エンドユーザプログラムの作成を含めて、エンドユーザからの介入なしに、バックグラウンドコンピューティングタスクとして実行することが可能である。エンドユーザプログラムが生成されると、システムは、エンドユーザに、コンピュータに実行されているタスクを自動的に完了させることを望むかどうかを決定することを促すことができる。上述の写真の著作権通知の場合には、システムは、エンドユーザに、コンピュータが作業ディレクトリの残部ファイル内に著作権通知を自動的に挿入すべきかどうかを尋ねることができる。
【００４８】
図６は、セキュアエンドユーザプログラミングシステム６００のシステムブロック図である。セキュアエンドユーザプログラミングシステム６００は、エンドユーザプログラミングモジュールに対して制御されたアクセスを行うために使用することができる。さらに、エンドユーザプログラミングシステム６００によって作成されるエンドユーザプログラムを検査して、そのようなプログラムが拡大された特権で実行されないことを保証することができる。
【００４９】
セキュアエンドユーザプログラミングシステム６００は、エンドユーザプログラミングモジュール６１０を含む。エンドユーザプログラミングモジュール６１０は、その他の図において参照したその他のエンドユーザプログラミングコンポーネントに合わせて先に開示して説明したすべてのファンクションを実行することができる。ユーザ認証モジュール６２０は、エンドユーザプログラミングモジュール６１０へのアクセスを制御して、アクセスを許可されたエンドユーザだけに限定することができる。
【００５０】
様々な機構および手法を使用して、ユーザ認証モジュール６２０を実現することができる。ユーザ認証モジュール６２０は、特定の実装ニーズまたは設計選択に従って、多種多様な形態をとることができる。特に、ユーザ認証モジュール６２０は、あなたは誰か（who you are）、あなたは何を知っているか（what you know）、あなたは何を持っているか（what you have）というセキュリティパラダイムの１つまたは複数に従って動作する、セキュリティスキームを使用することができる。
【００５１】
「あなたは誰か」というセキュリティパラダイムに基づく実装形態に使用することができるコンポーネントは、とりわけ、指紋スキャナおよび網膜スキャナなどの様々なバイオメトリックベースデバイスが挙げられる。「あなたは何を知っているか」というパラダイムを使用する実装形態に対しては、ユーザ名およびパスワード認証システムを使用することができる。「あなたは何を持っているか」というパラダイムに基づく実装形態の範疇には、無線周波数識別（ＲＦＩＤ）タグベースシステムなどの、セキュリティトークンおよび接近検出装置を使用するシステムがある。所望のレベルのセキュリティによれば、１つまたは複数の前述のシステムを、ユーザ認証モジュール６２０の部分として組み合わせることができる。
【００５２】
ユーザ認証モジュール６２０は、エンドユーザプログラミングモジュール６１０へのゲートキーパとしての役割を果たすことができる。ユーザがエンドユーザプログラミングモジュール６１０にアクセスしてそれを使用できるためには、エンドユーザは、ユーザ認証モジュール６２０が発行するセキュリティ質問に適切に応答することによって、システムを使用する自分の権限を証明しなくてはならない。特定の実装形態によれば、そのような応答は、特定のユーザインタフェースを介して、または別の適当な手段を介して提供することができる。
【００５３】
特権（privilege）認証モジュール６３０は、エンドユーザ作成プログラムモジュール６４０の実行を監視することができる。具体的には、特権認証モジュール６３０は、エンドユーザ作成モジュール６４０が実行中に、その他のプロセスのために予約されているか、またはそうではなく、許可されていないコンポーネントにアクセスするか、またはタスクを実行しようとしているかどうかを検査することができる。例えば、エンドユーザ作成モジュール６４０の１つなどの、エンドユーザ作成モジュールは、その実行の一部として、別のエンドユーザに属する１組のファイルの修正を試みる可能性がある。特権認証モジュール６３０は、そのエンドユーザ作成モジュールを実行しているエンドユーザが、コンピューティングシステム上でその他のエンドユーザのファイルにアクセスするのに十分なアクセス資格証明を有するかどうかを検査することができる。そうでない場合には、特権認証モジュール６３０はエンドユーザ作成モジュールの実行に割り込むか、またはその実行を停止することができる。さらに、特権認証モジュール６３０は、疑わしい特権拡大攻撃などのイベントをロギングすることや、エンドユーザを警告で促すことなど、様々な関係するタスクを実行することができる。
【００５４】
図７〜１２を参照すると、様々な方法または処理過程についての流れ図が示してある。説明を簡単にする目的で、例えば、フローチャートの形態で示す本明細書に示す１つまたは複数の方法を、一連の動作として示して説明するが、図示して説明した方法および処理過程も、そのような方法または処理過程で使用することができるコンポーネントも、いくつかの動作は、本明細書において示し説明したものとは異なり、その他の動作と異なる順序で、および／または同時に発生することがあるように、動作の順序に必ずしも限定されないことを理解されたい。例えば、当業者であれば理解するように、方法は、代替的に、状態図にするなど、一連の相互関連する状態またはイベントとして表わすことができる。さらに、方法または処理過程を実現するために、図示した動作のすべてを必要としない。
【００５５】
図７は、その他の図と合わせて開示、説明した様々なコンポーネントに使用することができる、一般的な処理フロー７００の流れ図である。一般的な処理フロー７００は、エンドユーザの見地から示してあり、先在するコンピューティング機能を補完することができるエンドユーザ定義プログラムモジュールを作成するのに使用することができる。その他の使用も可能である。
【００５６】
一般的な処理フロー７００の処理は、開始ブロック７１０で始まり、処理ブロック７２０へと続き、ここでエンドユーザプログラミングインタフェースはユーザによってアクセスされる。このエンドユーザプログラミングインタフェースは、その他の図と合わせて上記に開示し説明したエンドユーザプログラミングインタフェースまたはモジュールの一方とすることができる。エンドユーザは、処理ブロック７３０において、実行すべき１組の動作を定義する。これらの動作は、エンドユーザが、一から作成するか、または作動中のコンピューティングシステムによってサポートされている利用可能な動作のリストから選択することができる。
【００５７】
処理ブロック７４０において、所望のファンクションを提供する１つまたは複数のコンポーネントが識別される。これらのコンポーネントは、スタンドアロンプログラム、バックグラウンドプロセス、プログラムのファンクション、スクリプト、または何らかの適当な実行可能コンポーネントとすることができる。処理ブロック７５０において、統合エンドユーザプログラムが作成される。ルールベースが処理ブロック７６０において更新される。処理は終了ブロック７７０で終了する。
【００５８】
図８は、その他の図と合わせて開示し説明した様々なコンポーネントに使用することができる、一般的な処理フロー８００の流れ図である。一般的な処理フロー８００は、エンドユーザプログラミングシステムの見地から示してあり、複数のコンポーネントを有するエンドユーザ定義プログラムモジュールを作成するのに使用することができる。その他の使用も可能である。
【００５９】
一般的な処理フロー８００の処理は、開始ブロック８１０で始まり、処理ブロック８２０へと続く。処理ブロック８２０において、エンドユーザ定義動作セットが入手される。このエンドユーザ定義動作のセットには、エンドユーザが一まとめにして何らかの望ましい方法で順序づけることができる複数の動作を含めることができる。ブロック８３０において、動作が、エンドユーザ定義動作のセットから選択される。処理は処理ブロック８４０へと続き、ここでエンドユーザ定義動作によって記述されるコンピューティングタスクを実行することができるファンクションが識別される。そのような識別は、記述的コードを使用するか、またはその他の何らかの好適な手法によって、利用可能な動作とファンクションとの間の事前定義した対応づけまたはマッチングに基づいて行うことができる。
【００６０】
処理ブロック８５０において、選択された動作は、識別されたファンクションにマッピングされる。判定ブロック８６０において、処理ブロック８２０において取得されたセット内にエンドユーザ定義動作が残っているかどうかの判定が行われる。その判定がＮｏの場合には、処理は処理ブロック８７０へと続き、ここでエンドユーザプログラムモジュールが、マッピングされたファンクションから構築される。その判定がＹｅｓの場合には、処理は処理ブロック８３０へと戻り、ここで、次のエンドユーザ定義動作がセットから選択される。処理ブロック８７０からの処理は、終了ブロック８８０で終了する。
【００６１】
図９は、その他の図と合わせて開示し説明した様々なコンポーネントに使用することができる、一般的な処理フロー９００の流れ図である。一般的な処理フロー９００は、ユーザが必要とするファンクションを提供する、先に作成されたエンドユーザ定義プログラムモジュールを捜し出して取得するのに使用することができる。この一般的な処理フローは、その他の使用も可能である。
【００６２】
一般的な処理フロー９００は開始ブロック９１０で始まり、処理ブロック９２０へと続き、ここでエンドユーザプログラムモジュールの記述子が取得される。この記述子は、所望のエンドユーザプログラムモジュールのファンクションを記述するコードとすること、事前定義された名前とすること、またはその他の種類の記述子とすることができる。処理は処理ブロック９３０に続き、ここで記述子を使用してサーバへの照会が行われる。処理ブロック９４０において、記述子は先在のプログラムモジュールとマッチングされる。このマッチングは、厳密なマッチングである必要はなく、所望のモジュールの最良適合または精密近似とすることができる。そのような近似は、新規のモジュールを一から構築しなくてはならないのではなく、それを修正することによって厳密な所望のモジュールを作成することができるフレームワークを提供することによってユーザの開発時間を削減することができるので、精密近似であっても役に立つ。
【００６３】
処理ブロック９５０において、マッチングモジュールがサーバから取得される。そのモジュールは、処理ブロック９６０においてクライアント上に実装される。実装されると、モジュールを、エンドユーザが所望どおりに修正するか、またはその状態で使用することができる。一般的な処理フロー９００の処理は、終了ブロック９７０において終了する。
【００６４】
図１０は、その他の図と合わせて、開示し説明した様々なコンポーネントに使用することができる、一般的な処理フロー１０００の流れ図である。一般的な処理フロー１０００は、先在するコンピューティング機能を補完することができるエンドユーザ定義プログラムモジュールを自動的に生成するのに使用することができる。その他の使用も可能である。
【００６５】
処理は、開始ブロック１０１０で始まり、処理ブロック１０２０へと続き、ここでは、エンドユーザがコンピュータを操作する間、エンドユーザ動作が監視される。処理ブロック１０３０において、コンピュータの動作のパターンが識別される。処理は処理ブロック１０４０へと続き、ここで監視されたエンドユーザの動作に基づいて、エンドユーザからプログラムモジュールを作成する許可を取得するためのプロンプトが生成される。
【００６６】
判定ブロック１０５０において、エンドユーザがエンドユーザプログラムモジュールを作成することを許可したかどうかが判定される。Ｙｅｓの場合には、処理は処理ブロック１０６０へと続き、ここでエンドユーザプログラムモジュールが作成される。Ｎｏの場合には、処理は処理ブロック１０２０へと戻り、ここでエンドユーザの動作が監視される。処理ブロック１０６０からの処理は、終了ブロック１０７０において終了する。
【００６７】
図１１は、その他の図と合わせて上記に開示し説明した様々なコンポーネントに使用することができる一般的な処理フロー１１００の流れ図である。一般的な処理フロー１１００を使用して、先在するコンピューティング機能を補完することができるエンドユーザ定義プログラムを使用または作成するためのアクセスを、それを行うことを先に許可されていたエンドユーザだけに限定することができる。その他の使用も可能である。
【００６８】
処理は、開始ブロック１１１０で始まり、処理ブロック１１２０へと続く。処理ブロック１１２０において、エンドユーザプログラムモジュールへのアクセスが行われる。処理は、判定ブロック１１３０へと続き、ここでエンドユーザプログラムモジュールにアクセスしているエンドユーザがそれを許されるかどうかが判定される。Ｙｅｓの場合には、処理は処理ブロック１１４０へと続き、ここでエンドユーザはプログラムモジュールを構築する。
【００６９】
処理ブロック１１４０からの処理は、処理ブロック１１５０へと続き、ここで作成されたエンドユーザプログラムモジュールが実行される。判定ブロック１１６０において、エンドユーザプログラムモジュールによって実行されるべきファンクションが、そのモジュールの実行を指示するエンドユーザによって適当に実行できるかどうかが判定される。Ｙｅｓの場合には、エンドユーザプログラムモジュールの実行が、処理ブロック１１７０において進行を許可される。次いで、処理は終了ブロック１１８０で終了する。同様に、判定ブロック１１３０または１１６０のいずれかにおいて、Ｎｏの判定がなされる場合には、処理は終了ブロック１１８０において終了する。
【００７０】
図１２は、本明細書において開示して説明したコンポーネントまたは方法を使用して作成されるエンドユーザプログラムへ続く、一般的な処理フロー１２００の流れ図である。一般的な処理フロー１２００の処理は開始ブロック１２１０で始まり、処理ブロック１２２０へと続き、ここで電子メールメッセージの着信などのトリガイベントが発生する。処理ブロック１２３０において、トリガイベントが発生したことを示すシステムイベントがエンドユーザプログラムに渡される。このエンドユーザプログラムは、そのシステムイベントを使用して処理ブロック１２４０における処理を始める。
【００７１】
処理は処理ブロック１２５０へと続き、ここでエンドユーザプログラムは、そのエンドユーザプログラムに含まれるルールまたは論理を適用する。処理ブロック１２６０において、エンドユーザプログラムは、受け取ったシステムイベントおよびそのルールまたは論理に従って、その処理タスクを終了する。判定ブロック１２７０において、エンドユーザプログラムがそのタスクを正常に終了したかどうかが判定される。Ｎｏの場合には、処理は処理ブロック１２８０へと続き、ここでエラーメッセージが生成されて、エンドユーザはそのエラーを通知される。処理ブロック１２８０からの処理は、終了ブロック１２９０において終わる。同様に、判定ブロック１２７０において行われる判定がＹｅｓの場合には、処理は終了ブロック１２９０で終わる。
【００７２】
実装に対する追加の文脈を提供するために、図１３〜１４および以下の考察は、開示して記述したコンポーネントおよび方法をそれに実装することができる適当なコンピューティング環境の簡潔な、全体的な説明を提供するものである。上記では、様々な具体的な実装形態を、ローカルコンピュータおよび／またはリモートコンピュータで実行されるコンピュータプログラムのコンピュータ実行可能命令の一般的文脈において説明したが、当業者であれば、単独またはその他のプログラムモジュールと組み合わせた、その他の実装形態も可能であることを理解するであろう。一般的に、プログラムモジュールとしては、特定のタスクの実行および／または特定の抽象データ型の実装を行う、ルーチン、プログラム、コンポーネント、データ構造、その他がある。
【００７３】
さらに、当業者であれば理解するように、上記のコンポーネントおよび方法の実施は、シングルプロセッサまたはマルチプロセッサコンピュータシステム、ミニコンピュータ、メインフレームコンピュータだけでなく、それぞれが１つまたは複数の関連するデバイスと動作可能に通信することができる、パーソナルコンピュータ、ハンドヘルドコンピュータデバイス、マイクロプロセッサベースの家電および／またはプログラマブル家電、その他を含む、その他のコンピュータシステム構成で行うことも可能である。開示して説明したコンポーネントおよび方法について示したいくつかの態様は、通信ネットワークまたはその他のデータ接続によってリンクされたリモート処理装置によって、いくつかのタスクが実行される、分散コンピューティング環境によって実施することも可能である。しかしながら、全部でないにしても、これらの態様の一部は、スタンドアロンコンピュータによって実施することができる。分散コンピューティング環境においては、プログラムモジュールは、ローカルおよび／またはリモート記憶装置に配置してもよい。
【００７４】
図１３を参照すると、本発明の様々な態様を実装するための例示的環境１３００は、コンピュータ１３１２を含む。コンピュータ１３１２は、処理ユニット１３１４、システムメモリ１３１６、およびシステムバス１３１８を含む。システムバス１３１８は、それに限定はされないが、システムメモリ１３１６を含む、システムコンポーネントを処理ユニット１３１４に結合する。処理ユニット１３１４は、様々な利用可能なプロセッサの任意のものとすることができる。デュアルマイクロプロセッサまたはその他のマルチプロセッサアーキテクチャも、処理ユニット１３１４として使用することができる。
【００７５】
システムバス１３１８は、いくつかの種類のバス構造の任意のものとすることができ、それには、メモリバスまたはメモリコントローラ、周辺バスまたは外部バス、および／またはそれに限定はされないが、ＩＳＡ（Industrial Standard Architecture）、ＭＣＡ（Micro-Channel Architecture）、拡張ＩＳＡ（Extended ISA）、ＩＤＥ（Intelligent Drive Electronics）、ＶＬＢ（VESA Local Bus）、ＰＣＩ（Peripheral Component Interconnect）、カードバス、ＵＳＢ（Universal Serial Bus）、ＡＧＰ（Advanced Graphics Port）、ＰＣＭＣＩＡバス（Personal Computer Memory Card International Association bus）、ＦｉｒｅＷｉｒｅ（IEEE1394）、およびＳＣＳＩ（Small Computer Systems Interface）を含む、任意の多様な利用可能なバスアーキテクチャを使用するローカルバスがある。
【００７６】
システムメモリ１３１６としては、揮発性メモリ１３２０および不揮発性メモリ１３２２がある。例えば、起動時におけるコンピュータ１３１２内の要素間の情報を転送する基本ルーチンを包含する、基本入出力システム（ＢＩＯＳ）は不揮発性メモリ１３２２中に記憶される。説明のためであり限定はしないが、不揮発性メモリ１３２２としては、読出し専用メモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、電気的プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能ＲＯＭ（ＥＥＰＲＯＭ）、またはフラッシュメモリを挙げることができる。揮発性メモリ１３２０には、ランダムアクセスメモリ（ＲＡＭ）があり、これは外部キャッシュメモリとして作用する。説明のためであり限定はしないが、ＲＡＭは多くの形態で利用可能であり、例えば、シンクロナスＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、エンハンストＳＤＲＡＭ（ＥＳＤＲＡＭ）、ＳｙｎｃｈｌｉｎｋＤＲＡＭ（ＳＬＤＲＡＭ）、およびダイレクトＲａｍｂｕｓ  ＲＡＭ（ＤＲＲＡＭ）などがある。
【００７７】
コンピュータ１３１２には、取外し可能／取外し不可能、揮発性／不揮発性のコンピュータ記憶媒体を含めることもできる。例えば、図１３は、ディスク記憶装置１３２４を示す。ディスク記憶装置１３２４としては、それに限定はされないが、磁気ディスクドライブ、フロッピー（登録商標）ディスクドライブ、テープドライブ、Ｊａｚドライブ、Ｚｉｐドライブ、ＬＳ−１００ドライブ、フラッシュメモリカード、またはメモリスティックが挙げられる。さらに、ディスク記憶装置１３２４には、記憶媒体を個別に含めるか、または、それに限定はされないが、コンパクトディスクＲＯＭデバイス（ＣＤ−ＲＯＭ）、ＣＤレコーダブルドライブ（ＣＤ−Ｒ  Ｄｒｉｖｅ）、ＣＤ書き換え可能ドライブ（ＣＤ−ＲＷ  Ｄｒｉｖｅ）またはＤＶＤ−ＲＯＭ（ディジタルバーサタイルディスクＲＯＭドライブ）などの光ディスクドライブを含む、その他の記憶媒体と組み合わせて含めることができる。ディスク記録装置１３２４のシステムバス１３１８への接続を容易にするために、通常、インタフェース１３２６のような、取外し可能または取外し不可能なインタフェースを使用する。
【００７８】
図１３は、ユーザと適切な動作環境１３００に記述された基本コンピュータ資源との間の媒介として作用するソフトウェアを記述することに留意されたい。そのようなソフトウェアは、オペレーティングシステム１３２８を含む。ディスク記憶装置１３２４に記憶できるオペレーティングシステム１３２８は、コンピュータシステム１３１２の資源を制御して割り当てる作用をする。システムアプリケーション１３３０は、システムメモリ１３１６またはディスク記憶装置１３２４のいずれかに記憶されるプログラムモジュール１３３２およびプログラムデータ１３３４を介して、オペレーティングシステム１３２８による資源の管理を利用する。本発明は、様々なオペレーティングシステムまたはオペレーティングシステムの組合せを用いて実装できることを理解されたい。
【００７９】
ユーザは、入力デバイス１３３６を介してコンピュータ１３１２にコマンドまたは情報を入力する。入力デバイス１３３６としては、それに限定はされないが、マウスなどのポインティングデバイス、トラックボール、スタイラス、タッチパッド、キーボード、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナ、ＴＶチューナーカード、ディジタルカメラ、ディジタルビデオカメラ、ウェブカメラ、およびその他が挙げられる。これらおよびその他の入力デバイスは、インタフェースポート１３３８を経由してシステムバス１３１８によって、処理ユニット１３１４に接続する。インタフェースポート１３３８としては、例えば、シリアルポート、パラレルポート、ゲームポート、およびユニバーサルシリアルバス（ＵＳＢ）がある。出力デバイス１３４０は、入力デバイス１３３６と同タイプのいくつかのポートを使用する。したがって、例えば、ＵＳＢポートを使用して、コンピュータ１３１２へ入力を供給するとともに、コンピュータ１３１２からの情報を出力デバイス１３４０に出力することができる。出力アダプタ１３４２は、専用アダプタを必要とする他の出力デバイス１３４０の中に、モニタ、スピーカ、およびプリンタのような出力デバイス１３４０があることを示すために設けてある。出力アダプタ１３４２としては、説明のためであって限定ではなく、出力デバイス１３４０とシステムバス１３１８の間の接続手段を提供するビデオカードおよびサウンドカードがある。リモートコンピュータ１３４４などのその他のデバイスおよび／またはデバイスのシステムは、入力および出力能力の両方を提供することに留意されたい。
【００８０】
コンピュータ１３１２は、リモートコンピュータ１３４４などの、１つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作可能である。リモートコンピュータ１３４４は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ワークステーション、マイクロプロセッサベース機器、ピアデバイスまたはその他の一般的なネットワークノードおよびその他とすることができるとともに、通常は、コンピュータ１３１２に関して記述した要素の多数または全部を含む。簡略にするために、メモリ記憶装置１３４６だけを、リモートコンピュータ１３４４とともに示してある。リモートコンピュータ１３４４は、ネットワークインタフェース１３４８を介してコンピュータ１３１２に論理的に接続され、次いで通信接続１３５０を介して物理的に接続されている。ネットワークインタフェース１３４８は、ローカルエリアネットワーク（ＬＡＮ）およびワイドエリアネットワーク（ＷＡＮ）などの有線および／または無線通信ネットワークを包含する。ＬＡＮ技術には、ＦＤＤＩ（Fiber Distributed Data Interface）、ＣＤＤＩ（Copper Distributed Data Interface）、イーサネット（登録商標）、トークンリング（Token Ring）、その他がある。ＷＡＮ技術としては、それに限定はされないが、二地点間リンク（point-to-point link）、統合サービスディジタルネットワーク（ＩＳＤＮ）のような回線交換ネットワークおよびそれの変形形態、パケット交換ネットワーク、およびディジタル加入者ライン（ＤＳＬ）などがある。
【００８１】
通信接続１３５０とは、ネットワークインタフェース１３４８をバス１３１８に接続するのに使用されるハードウェア／ソフトウェアを意味する。通信接続１３５０は、説明を分かりやすくするためにコンピュータ１３１２内部に示してあるが、コンピュータ１３１２の外部におくこともできる。ネットワークインタフェース１３４８への接続に必要なハードウェア／ソフトウェアとしては、説明の目的だけとして、通常の電話モデム（regular telephone grade modems）、ケーブルモデムおよびＤＳＬモデルを含むモデム類、ＩＳＤＮアダプタ、およびイーサネット（登録商標）カードなどの、内部技術および外部技術が挙げられる。
【００８２】
図１４は、開示して説明したコンポーネントおよび方法をその中で使用することができる、サンプルコンピューティング環境１４００の概略ブロック図である。システム１４００は、１つまたは複数のクライアント１４１０を含む。クライアント１４１０は、ハードウェアおよび／またはソフトウェア（例えば、スレッド、プロセス、コンピューティングデバイス）とすることができる。システム１４００は、また、１つまたは複数のサーバ１４２０も含む。サーバ１４２０は、ハードウェアおよび／またはソフトウェア（例えばスレッド、プロセス、コンピューティングデバイス）とすることができる。サーバ１４２０は、例えば、開示して説明したコンポーネントまたは方法を使用することによって変換を実行する、スレッドまたはプロセスを収容することができる。
【００８３】
クライアント１４１０とサーバ１４２０の間の通信の一手段は、２つ以上のコンピュータプロセスの間で伝送するように適合されたデータパケットの形態であることができる。システム１４００には、クライアント１４１０とサーバ１４２０との間の通信を容易にするために使用することができる通信フレームワーク１４４０を含めることができる。クライアント１４１０は、クライアント１４１０に局在する情報を記憶するために使用することができる、１つまたは複数のクライアントデータストア１４５０に動作可能に接続されている。同様に、サーバ１４２０は、サーバ１４２０に局在する情報を記憶するために使用することができる、１つまたは複数のサーバデータストア１４３０に動作可能に接続されている。
【００８４】
上記の内容は、本発明の実施例を含む。もちろんのこと、本発明を説明する目的で、すべての考えられるコンポーネントの組合せおよびそのための方法を記述することは不可能であるが、当業者であれば、本発明のさらなる多数の組合せおよび並べ替えが可能であることを認識することができる。したがって、本発明は、添付の特許請求の範囲の趣旨と範囲に入る、そのようなすべての変更、改変、および変形を包含することを意図するものである。
【００８５】
特に、上述のコンポーネント、デバイス、回路、システムその他によって実行される様々なファンクションに関して、そのようなコンポーネントを記述するのに使用する用語（「手段（means）」の記載を含む）は、特に断らない限り、構造的には開示した構造と均等ではないが、本明細書で示した本発明の例示的態様におけるファンクションを実行する、記述したコンポーネント（例えば、ファンクション的均等物）の特定のファンクションを実行する任意のコンポーネントに対応することを意図している。これに関して、本発明はシステムだけでなく、本発明の様々な方法の動作および／またはイベントを実行するためのコンピュータ実行可能命令を有するコンピュータ読取り可能記憶媒体を含むことが理解されるであろう。
【００８６】
さらに、本発明の特定の特徴を、いくつかの実装形態の１つだけに関して開示したが、そのような特徴は、任意または特定の用途に対して望ましいか、または有利である場合には、その他の実装形態の１つまたは複数の他の特徴と組み合わせることができる。さらに、「含む（include）」および「含んでいる（including）」という用語ならびにそれらの変形形態が、詳細な説明またはクレームのいずれかで使用される限りにおいて、これらの用語は、用語「備える（comprising）」と同様に、包含的であることを意味するものである。
【図面の簡単な説明】
【００８７】
【図１】エンドユーザプログラミングシステムのシステムブロック図である。
【図２】エンドユーザプログラミングモジュールのシステムブロック図である。
【図３】エンドユーザ処理システムのシステムブロック図である。
【図４】リモートコンポーネントを含む、エンドユーザプログラミングシステムのシステムブロック図である。
【図５】自動エンドユーザプログラミングシステムのシステムブロック図である。
【図６】セキュアエンドユーザプログラミングシステムのシステムブロック図である。
【図７】本明細書において開示し説明した様々なコンポーネントに使用することができる一般的な処理フローの流れ図である。
【図８】本明細書において開示し説明した様々なコンポーネントに使用することができる一般的な処理フローの流れ図である。
【図９】本明細書において開示し説明した様々なコンポーネントに使用することができる一般的な処理フローの流れ図である。
【図１０】本明細書において開示し説明した様々なコンポーネントに使用することができる一般的な処理フローの流れ図である。
【図１１】本明細書において開示し説明した様々なコンポーネントに使用することができる一般的な処理フローの流れ図である。
【図１２】本明細書において開示し説明した様々なコンポーネントに使用することができる一般的な処理フローの流れ図である。
【図１３】開示して説明した様々なコンポーネントおよび方法を実装することができるコンピューティング環境の概略図である。
【図１４】開示して説明した様々なコンポーネントおよび方法を使用することができる、ネットワーク環境のシステムブロック図である。
【図１】
2006244466.tif 000003
【図２】
2006244466.tif 000004
【図３】
2006244466.tif 000005
【図４】
2006244466.tif 000006
【図５】
2006244466.tif 000007
【図６】
2006244466.tif 000008
【図７】
2006244466.tif 000009
【図８】
2006244466.tif 000010
【図９】
2006244466.tif 000011
【図１０】
2006244466.tif 000012
【図１１】
2006244466.tif 000013
【図１２】
2006244466.tif 000014
【図１３】
2006244466.tif 000015
【図１４】
2006244466.tif 000016