Curl® 統合開発環境 (IDE) のディプロイメント ツールは、さまざまなシナリオに応じてアプリケーションを移動および再構成できるように設計されています。たとえば、以下のような状況を想定してみましょう。
大規模な Web サイトの一部にあたる Web アプリケーションを開発します。Curl IDE における開発およびテストの初期段階はすべてローカル ファイル ネットワークで実施し、Curl パッケージ、画像ファイルのディレクトリ、および既にサイトにあるその他のリソースは、これらのローカル コピーを使います。次に、アプリケーションをテスト サーバーにコピーしてテストを続行します。最後に、完成したアプリケーション部分を Web サイトにディプロイします。この時点で、アプリケーションと一緒にデザイン仕様も保存されますが、これはテスト サーバーまたはプロダクション サーバーにはコピーしません。
上記のタスクを効率よく実行するには、以下の作業を実行するためのツールが必要です。
- アプリケーションで必要な特定のアプレット、パッケージ、デリゲートされたマニフェストおよびリソース ディレクトリの構築を行い、これらの関係を管理する作業。
- テスト サーバーに、サイト リソースのローカル コピーと共にアプリケーションをコピーする作業。
- 作成したアプリケーションの一部を Web サイトのサーバーにコピーし、このアプリケーションがサーバー上に既に存在する他のリソースを認識できるようにする作業。
- デザイン仕様を含むドキュメントがテスト サーバーや Web サイト サーバーにコピーされないよう指定する作業。
IDE プロジェクトでは、これらのすべての作業に役立つディプロイメント ツールやディプロイメント ストラテジーを提供します。
要約: | ディプロイメントでは、次の操作が可能です。 - ディプロイメント ターゲット (複数可) を定義できます。
- ターゲットに応じて異なる方法でアプリケーションをディプロイできます。
- キャッシュと同期を制御できます。
- ディプロイメント時にアプレットに署名を追加できます。
|
Curl IDE は、全体的なプロジェクト管理の一環としてプロジェクトのディプロイメントを処理します。「
プロジェクトの管理」の章では、アプリケーション開発の初期段階におけるプロジェクトの使用法について説明しています。
Curl のディプロイメント システムを使用するには、最初に 1 つ以上のディプロイメント ターゲットを定義する必要があります。ディプロイメント ターゲット名は特定の場所に関連付けられています。プロジェクトのディプロイ時はプロジェクト リソースの多くをターゲットにコピーするため、ターゲットの場所は IDE がファイルを書き込むことができるディレクトリでなければなりません。Web サーバーのファイル システムに対して直接アクセス権を持つ場合は、サーバーに直接プロジェクトをディプロイできます。アクセスが不可能な場合は、別のディレクトリにコピーしてから FTP または他の手段で Web サーバーにファイルを転送します。
各プロジェクトには
default という既定のディプロイメント ターゲットが含まれています。このターゲットは、プロジェクト ディレクトリのサブディレクトリにあたる
deploy-default にプロジェクトをディプロイします。ディプロイメント ターゲットを追加および変更するには、IDE の
[プロジェクトのプロパティ] ダイアログを使用します。
[プロジェクト] の
[ターゲット設定を編集] を選択すると、
[ターゲット] タブが選択された状態で
[プロジェクトのプロパティ] ダイアログが開きます。新規ターゲットを追加するには
[追加...]、既存のターゲットを変更するには
[設定...] を選択します。「
ターゲット」を参照してください。
1 つのプロジェクトに複数のディプロイメント ターゲットを指定できますが、一度に 1 つのターゲットしかアクティブにできません。現在のプロジェクトのアクティブなターゲット名は、IDE のプロジェクト ペインのタイトル バーでマニフェスト名の右側に表示されます。アクティブなディプロイメント ターゲットが存在する場合、[プロジェクト] メニューのディプロイメント コマンドは [target-name のディプロイメント] および [OCC 用の target-name のディプロイメント] と表示されます。
[プロジェクト] メニューの [現在のターゲット] コマンドには、プロジェクトで現在利用可能なすべてのディプロイメント ターゲットが一覧表示され、アクティブなターゲットには印が付けられています。ここでアクティブなターゲットを新たに選択することもできます。
プロジェクトのディプロイ時には、ファイルが新たに書き込まれる前にターゲット ディレクトリにあるコンテンツがすべて削除されます。したがって、ディプロイメント プロセスでコピーされるファイル以外に、このディレクトリにファイルを書き込まないようにしてください。
プロジェクト マニフェストの目的は、プロジェクト ファイルに必要なリソースを検索できるようにすることです。IDE は、アプリケーション 開発に対応して自動的にプロジェクト マニフェスト ファイルを更新します。「
プロジェクト ファイルとプロジェクト マニフェスト」の章では、プロジェクト開発でのマニフェスト ファイルの役割について説明しています。
プロジェクトのディプロイ時に、プロジェクト ファイルに必要なリソースが異なる場所にある場合があります。たとえば、開発中に、プロジェクト ディレクトリのサブディレクトリにある、ローカル コピーのパッケージを使用する場合があります。プロジェクトのディプロイ時には、いくつかのアプリケーションで共有される別のディレクトリに同じパッケージがある場合があります。この場合、ディプロイされたプロジェクトには、開発中に使用されるマニフェストとは異なるマニフェストが必要です。
プロジェクトの [コンポーネント ターゲット設定] では、ディプロイされたプロジェクト用に IDE でどのようにマニフェストを作成するかを指定できます。また、 [コンポーネント ターゲット設定] を使用すると、パッケージのドキュメントを生成するかどうかなど、他の有用なディプロイメント情報を指定することもできます。
プロジェクトの各リソースに対して [コンポーネント ターゲット設定] を個別に設定できます。また、異なるディプロイメント ターゲットに対して、指定のコンポーネントを異なる方法で処理することもできます。たとえば、この章の最初のシナリオを考えてみましょう。すべてのプロジェクト リソースをテスト サーバーにコピーする必要がある場合があります。その一方で、Web サーバーにディプロイする場合、一部のリソースをコピーし、その他のリソースはアプリケーションが検索できるようサーバー上の場所を指定する場合もあります。
Curl 実行環境 (RTE) の重要な機能の 1 つは、実行するアプレットによりダウンロードされるパッケージをキャッシュするということです。アプレットがダウンロードではなく、クライアント上に既にキャッシュされたパッケージを使用できると、パフォーマンスが向上します。エンド ユーザーは
[Curl コントロール パネル] の
[全般] タブからクライアント上の RTE のキャッシュ動作を制御できます。アプリケーションの新バージョンを Web サーバーにディプロイする場合、必要に応じてその新しいバージョンがダウンロードされるようにすることができます。同期を制御するにはいくつかの方法があります。「
キャッシュと同期」のセクションでこれらの問題について詳細に述べています。
コード署名では、Curl アプレットとそのマニフェストにデジタル署名することができます。この機能は Curl Pro/IDE でのみ利用できます。「
Curl 及び Curl Pro 製品」をご覧ください。コード署名には次のような利点があります。
- ソフトウェア発行者として、署名後にアプレット コードに対する改ざんが行われていないことを、アプリケーションのエンド ユーザーに保証することができます。
- エンド ユーザーはアプリケーションの発行者を確認し、他者によって改ざんされたり破壊されたりしていないことを確認できます。
- エンド ユーザーは、その署名されたアプレットに対し、特権付きで実行するか、非特権で実行するか、または実行しないかを決定できます。
アプリケーションに署名を追加するには、適切な証明機関から最初に公開鍵/秘密鍵のペアを取得しなければなりません。これらは公開鍵/秘密鍵のペアを発行する Verisign® や Thawte® などの機関です。
[ターゲット設定] ダイアログ ボックスでコード署名を選択し、証明書ファイルを指定します。「
ターゲット」を参照してください。証明書のファイルは
PKCS#12 フォーマットですが、
PFX フォーマットとしても知られています。
署名付きアプレットとそのマニフェストには、そのファイルの先頭近くの {curl-file-signature ...} フォームが含まれます。署名が確認されるまでは、署名された Curl ファイルは評価されません。署名が確認できない場合は、アプレットまたはマニフェストから得られたコンポーネントの 1 つがいくつかの理由で破損しています。
署名付きアプレットを実行するエンド ユーザーは、ダイアログから対話的に次のオプションのいずれかを選択します。
- このアプレットを1回、特権付きで実行します (次回、再びダイアログが表示されます。)
- アプレットを実行しない。
- アプレット証明書を保存してアプレットを実行する。 次回からはダイアログ表示されません。保存された証明書で署名されたアプレットは常に特権付きで実行します。
- 特権を与えずにアプレットを実行する。
アプレットを実行中にアプレットの証明書が無効だと判明した場合、エンドユーザーは次のオプションから選択することができます。
- 拒否。この結果、証明書がユーザーによって拒否されたことを示す構文エラーとなります。
- 特権を与えない。これはアプレットを実行し、Curl コントロール パネルに設定された特権のロケーションに従って特権を割り当てます。[プロセスのプロパティ] の検査はアプレットが署名されておらず、特権を割り当てられていないことを示します。
注意: コード署名は Mac のプラットフォームではサポートされていません。
このディプロイメント システムを使って、Curl の随時接続コンピューティング (OCC) 機能に対応するアプリケーション用のアーカイブ ファイルを準備することもできます。この場合、
[プロジェクト] メニューの
[ディプロイ] コマンドの代わりに、[OCC 用のディプロイメント]
を使用します。OCC の詳細については、「
随時接続コンピューティング」を参照してください。
[プロジェクト] メニューの詳細については、「
プロジェクト メニュー」を参照してください。
要約: | コンポーネント ターゲット設定では、ディプロイメントに応じてプロジェクト内の各リソースをさまざまな方法で処理することができます。 |
アクティブなターゲットを作成して選択したら、次にプロジェクト内の各ファイルおよびリソースについてそのターゲット設定を指定できます。ターゲット設定では、プロジェクトのディプロイ時にどのようにリソースを取り扱うかを定義します。[プロジェクト] メニューの [ターゲット設定を表示] コマンドを選択すると、プロジェクト ペインでファイル名の右側に設定インジケータが表示されます。設定インジケータが表示されているときは、このコマンド メニューは [ターゲット設定を隠す] に変わります。
[プロジェクト] メニューの [コンポーネント ターゲット設定の編集] コマンドを選択すると、[コンポーネント ターゲット設定] ダイアログが開きます。このダイアログは、設定インジケータをクリックして開くこともできます。このダイアログには、現在選択されているリソースで利用可能なすべての設定が表示されています。
すべての種類のリソースで利用可能なアクションは、[ターゲット マニフェストにインクルードしない] です。製品仕様や進捗状況のメモなど、プロジェクトには含める必要があってもアプリケーションと一緒にディプロイする必要のないリソースにはこの設定を使用します。
その他の設定項目は、選択するリソースの種類に応じて異なります。
ファイルとディレクトリには次のような設定があります。
- [ターゲットにコピー]
ファイル、またはディレクトリとその中のすべてのコンテンツをディプロイメント ターゲットのディレクトリにコピーします。
- [ターゲット マニフェストにインクルードする]
ファイルまたはディレクトリをコピーせず、ディプロイしたマニフェストでは開発環境のマニフェストと同じマニフェスト項目を使用します。
- [別のパスを使ってターゲット マニフェストにインクルードする]
ファイルまたはディレクトリをコピーしません。ディプロイメント ターゲットのディレクトリに書き込まれるマニフェスト ファイル (manifest.mcurl) には、ここで入力するパスがファイルまたはディレクトリの場所として指定されます。
パッケージには次のような設定があります。
- [ターゲットにコピー]
パッケージ ファイル (load.scurl とも呼ばれます) と、このパッケージ ファイルを構成するすべての Curl ソース ファイル (.scurl) をディプロイメント ターゲットのディレクトリにコピーします。
- [ターゲットに pcurl を生成する]
パッケージの
.pcurl をファイルを作成してディプロイメント ターゲットのディレクトリに書き込みます。
.pcurl ファイルはパッケージ ファイルと同じ名前になり、ディプロイメント ターゲットのディレクトリに書き込まれるマニフェストにはこの
.pcurl ファイルへの参照が含まれます。
.pcurl ファイルを生成機能は Curl Pro/IDE でのみ利用できます。「
Curl 及び Curl Pro 製品」を参照してください。
- [デバッグ情報をインクルードする]
pcurl ファイルに元のソース ファイルに関する情報を追加します。有用なスタック ダンプを生成したり、デバッガでコードをステップ実行することができます。[ターゲットに pcurl を生成する] を選択した場合のみ有効です。このオプションを選択すると、結果の .pcurl ファイルにパッケージ ソース コードが書き込まれることに注意してください。
- [ターゲット マニフェストにインクルードする]
ファイルをコピーせず、ディプロイしたマニフェストでは開発環境のマニフェストと同じマニフェスト項目を使用します。
- [別のパスを使ってターゲット マニフェストにインクルードする]
ファイルをコピーしません。ディプロイメント ターゲットのディレクトリに書き込まれるマニフェスト ファイル (manifest.mcurl) には、ここで入力するパスがパッケージの場所として指定されます。
- [ドキュメンテーションの作成]
このオプションを選択すると、指定した他の設定に加えてパッケージの API ドキュメントが作成されます。パッケージ名と同じ名前のドキュメント ファイル (.pcdoc) が作成されます。パッケージ名が DOC.PKG の場合、このパッケージのドキュメント ファイルの名前は DOC.PKG.pcdoc になります。
ドキュメント ファイルは、次のようなディプロイメント ターゲットのディレクトリ階層に置かれます。 target-directory/docs/language/api-ref/.
このディプロイメント ターゲットのパッケージ ドキュメントはすべてこのディレクトリに書き込まれます。
ドキュメントをインストールして Curl IDE ドキュメント ビューアで表示する方法についての詳細は、「
ヘルプ メニュー」を参照してください。パッケージ ドキュメントの方法についての詳細は、「
アプリケーションの記述」を参照してください。
- [全てのパッケージに新しい設定を適用]
このオプションを選択すると、このパッケージ用に指定した設定をプロジェクト内のすべてのパッケージに適用します。
ディプロイメント機能を最も効率的に使うには、パッケージ ファイルにアプレット ファイル以外の Curl ソース ファイルをすべてインクルードするようアプリケーションを構成する必要があります。IDE はパッケージ ファイルを読み取り
include ステートメントを確認することによって、パッケージを構成するファイルを判定します。IDE はパッケージ ファイル以外の
.scurl ファイルの
include ステートメントに含まれるファイルは認識できません。
evaluate プロシージャでアクセスするファイルも認識されません。
マニフェストは Curl アプレットがリソースを位置付けできるようにします。マニフェストは別のマニフェストを使用して、
delegate-to メカニズムからリソース情報を提供することができます。「
マニフェストのデリゲート (委譲)」を参照してください。プロジェクトにマニフェストを追加できます。
[プロジェクト] メニューの
[デリゲート先の追加] コマンドを使用して、
delegate-to 式をプロジェクトのマニフェストに追加します。
次のようなデリゲート設定があります。
- [ターゲット マニフェストにインクルードする]
ディプロイメント ターゲットのディレクトリに書き込まれるプロジェクト マニフェスト ファイルに delegate-to を含めます。
- [別のパスを使ってターゲット マニフェストにインクルードする]
プロジェクト マニフェスト ファイルの変更バージョンをディプロイメント ターゲットのディレクトリに書き込みます。現在作業中の、ディプロイ先でない場所にあるマニフェストは変更されません。
変更されたマニフェストにはこのリソースの項目が含まれ、リソースの場所としてここで入力するパスが指定されます。
このセクションでは、いくつかのサンプル プロジェクトを使用してプロジェクトのディプロイメントを説明します。この例は、d:\automated-build-temp\build\win32-atom\docs\default\examples\uguide\deployment.zip に含まれています。拡張例の使用法の詳細については、「
アプレットの拡張」を参照してください。
このアーカイブから適切なディレクトリにファイルを解凍します。ファイルを解凍すると、applet-project、use-package、および use-delegate-to の 3 つのディレクトリが作成されます。各ディレクトリには IDE プロジェクトが含まれます。これらのすべてのプロジェクトに 3 つのディプロイメント ターゲットがあります。
- default は、すべてのプロジェクトに提供される既定のディプロイメント ターゲットです。プロジェクトを deploy-default というサブディレクトリにディプロイします。
- local-deploy は、http://localhost としてアクセス可能な c:\Inetpub\wwwroot\ にプロジェクトをディプロイします。このディプロイメント ターゲットを使用するには、ローカル マシンに http://localhost を適切に設定する必要があります。「localhost からアプレットを提供する」を参照してください。
- directory-deploy は、c:\ ドライブ上のディレクトリにプロジェクトをディプロイします。このターゲットは http://localhost にディプロイする別の手段を提供します。必要に応じてディプロイ先を別のローカル ディレクトリに変更できます。
最初に、IDE を使用して、applet-project にあるプロジェクトを開きます。このプロジェクトには、アプレット ファイル start.curl、show-logo.scurl というソース ファイルを含む DOC.LOGO パッケージ、およびファイル curllogo.gif を含む images という名前のディレクトリが含まれます。アプレットは、パッケージ DOC.LOGO で定義されているプロシージャ show-logo を使用して、ディレクトリ images にあるイメージ ファイルを表示します。
これらのリソースのすべては、プロジェクトを含むディレクトリにあります。ファイル、パッケージ、ディレクトリ リソースを識別する
component 式を含むプロジェクト マニフェスト ファイルを開くには、プロジェクトのルート ノードをダブルクリックしてください。
各コンポーネントの設定を表示するには、[プロジェクト] メニューの [コンポーネント ターゲット設定を表示] を選択します。3 つのディプロイメント ターゲットすべてが、アプレットとそのすべてのリソースをターゲットにコピーすることに注意してください。
既定のターゲット、および追加ターゲットの少なくとも 1 つに APPLET-PROJECT をディプロイします。アプレットは正しく実行され、すべてのディプロイされた場所に Curl ロゴが表示されます。
IDE を使用して、
use-package にあるプロジェクトを開きます。このプロジェクトには、アプレット ファイル
start.curl、および
APPLET-PROJECT で定義されたパッケージ
DOC.LOGO が含まれます。ファイルおよびパッケージ リソースを識別する
component 式を含むプロジェクト マニフェスト ファイルを開くには、プロジェクトのルート ノードをダブルクリックしてください。この場合、パッケージの場所は現在のプロジェクト ディレクトリと相対的に定義されています。
このプロジェクトのコンポーネント ターゲット設定は、ターゲットの場所にコピーされる
start.curl を指定します。プロジェクト ディレクトリにないリソースはディプロイメント中にコピーできません。そのため、パッケージはコピーできません。コンポーネント ターゲット設定は、
[パスの使用] で、ディプロイされたマニフェストに
component 式を作成するよう IDE に指示します。このマニフェストはプロジェクト マニフェストが使用するロケーション パスと同じパスを使用します。
既定のターゲット、および追加ターゲットの少なくとも 1 つに USE-PACKAGE をディプロイします。このディレクトリは APPLET-PROJECT に対し同じリレーションを持たないため、アプレットが既定のターゲット ディレクトリでは正しく実行されないことに注意してください。このディレクトリを APPLET-PROJECT が既にディプロイされている Web サイト上の場所にコピーすると、アプレットは正しく実行されます。他のディプロイメント ターゲットは、ディレクトリを互いに適切なリレーションに置いて、アプレットがこれらの場所で正しく実行できるようにします。
アプレットがそのプロジェクト マニフェストを使用してパッケージ DOC.LOGO を検索できますが、ディレクトリ images には直接アクセスできないことに注意してください。
IDE を使用して、
use-delegate-to にあるプロジェクトを開きます。このプロジェクトにはアプレット ファイル
start.curl、およびプロジェクト
APPLET-PROJECT に対してデリゲートされたマニフェストが含まれます。マニフェストを識別する
delegate-to 式を含むプロジェクト マニフェスト ファイルを開くには、プロジェクトのルート ノードをダブルクリックしてください。
ディプロイメント ターゲットである
directory-deploy と
local-deploy は、ディレクトリ
DelegateDemo にプロジェクト ファイルを書き込みます。プロジェクト
APPLET-PROJECT は
DeployDemo にディプロイされます。プロジェクト リソースを検索するには、
APPLET-PROJECT マニフェストのコンポーネント ターゲット設定には、
[別のパスを使ってターゲット マニフェストにインクルードする] を使用します。このパスでは、ディプロイされたプロジェクトの場所を指定します。この設定は、指定したパスを使用するディプロイしたマニフェストに
delegate-to 式を作成するよう、IDE に指示します。
このプロジェクトをターゲット
directory-deploy または
local-deploy のいずれかにディプロイします。
USE-PACKAGE と同様、このプロジェクトは正しいリレーションにある
APPLET-PROJECT に依存します。
delegate-to を使用して、パッケージ マニフェストを追加するため、このプロジェクトは、プロジェクト
APPLET-PROJECT のすべてのリソースにアクセスできます。アプレット
start.curl は
manifest-url を使用して、直接、またはパッケージ
DOC.LOGO から、
applet-project のイメージ ファイルにアクセスします。
IDE のディプロイメント操作を自動化し、ビルド スクリプトやその他の自動化されたコンテキストに含めることができます。異なったディプロイメント ターゲットを使用して、ドキュメントを作成や、パッケージの .pcurlファイルを作成といった、プロジェクトにおける多様なディプロイメント操作を行うことができます。
Curl IDE には
deploy-project.xcurl と呼ばれるプロジェクト ディプロイメントのためのスクリプトがあります。このスクリプトは d:\automated-build-temp\build\win32-atom\ide\bin にあります。Curl のスクリプトの書き方および使い方についての詳細は、「
スクリプト」をご覧ください。
ディプロイメント スクリプト を実行するために次のような構文を使用してください。
構文: | curl deploy-project.xcurl [target] project-file |
フラグの種類: | - (--help | --usage | -h | -?):
コマンドラインのオプションとともにヘルプメッセージを印刷します。 - (--target | -t) target-name:
ターゲット target-name をディプロイします。省略された場合は、すべてのプロジェクトがディプロイされます。 - --occ:
OCC を使用してディプロイします。省略された場合は、OCC の機能なしでディプロイが行われます。 - (--preflight | -p) (none | dialog | throw)
dialog または throw の場合は、ディプロイメントの作業が終了する前にプリフライトされています。プリフライトは、ディプロイ ターゲットのディレクトリが、ディプロイされようとしているイメージ内のファイルだけを含んでいることを確認するためのチェックです。dialog の場合は、ユーザーに進め方を問うダイアログが表示されます。throw の場合、エラーがスローされ、ディプロイは失敗に終わります。none の場合、プリフライト チェックがされません。 - (--verbose | -v):
ディプロイメント中に stderr へのメッセージを印刷し、どのターゲットがディプロイされているのかを記述します。
|
ターゲットのディプロイ中にエラーが発生した場合、stderr にエラーが記録され、それ以上ターゲットはディプロイされません。
自動ディプロイメント API のドキュメントは API リファレンスにありません。すべての必要なコンポーネントは次に説明されている通りです。
DeployPreflight は次の3つの値を持つ列挙型です。
- none は、プリフライトをスキップします。
- dialog は、プリフライト テストが失敗した場合、ダイアログを表示します。
- throw は、プリフライト テストが失敗した場合、エラーをスローします。
ProjectDescription クラスは、ディスク上のプロジェクトの状態を表します。
ProjectDescription.from-url ファクトリは、
ProjectDescription を作成し、
Url を Curl のプロジェクト ファイル (
.cprj) に渡します。
ProjectDescription.deploy メソッドはプロジェクトのターゲットの1つをディプロイします。次のような構文があります。
構文: | {deploy
target,
occ? = false,
preflight = DeployPreflight.dialog
}
|
説明: | - target は、ディプロイするターゲットを決定する TargetDescription です。
- occ? は、OCC用のディプロイメントかどうかを決定する bool 値です。「随時接続コンピューティングのためのディプロイメント」を参照してください。
- preflight は、DeployPreflight を行います。
|
ProjectDescription.targets プロパティは、プロジェクト内のすべてのターゲットを返す Iterator-of TargetDescription です。
TargetDescription はプロジェクトのディプロイ ターゲットを表します。これには、次のようなフィールドが含まれます。
- name:String: このターゲットの名前。
- description:String: このターゲットの説明。
- target-url-name:String: プロジェクトのマニフェスト ディレクトリに関連するパスとしてのこのターゲットのためのディプロイ ロケーション。
- password:#String: このターゲットの証明書のための署名パスワード。これはこのターゲットにコード署名が有効なときだけ使用されます。
Copyright © 1998-2019 SCSK Corporation.
All rights reserved.
Curl, the Curl logo, Surge, and the Surge logo are trademarks of SCSK Corporation.
that are registered in the United States. Surge
Lab, the Surge Lab logo, and the Surge Lab Visual Layout Editor (VLE)
logo are trademarks of SCSK Corporation.