日々改善

日々感じたこと、面白いと思ったことをつづります。

CommonMP要素モデル開発(プロジェクトフォルダの絶対パスの取得)

 CommonMPがVer1.1にバージョンアップされて、シミュレーション・プロジェクトのポータビリティが改善されました。Ver1.0は、シミュレーション・プロジェクトを他のPCに移すのが非常に面倒な作業となることがありました。それは、Ver1.0はシミュレーション・プロジェクトが使うインプット・データ等へのアクセス・パスを絶対パスで管理していたからです。PCごとにシミュレーション・プロジェクト関連のファイルを置く場所は同じであるとは限らないので、Ver1.0で構造定義ファイルをエクスポートして他のPCにプロジェクトを移行しても、大概はパスを修正しないとインプットデータが見つからずに、シミュレーション・プロジェクトはエラーを出して止まってしまいます。

 Ver1.1になってからは、シミュレーション・プロジェクトをCommonMP内部のデータベースで管理することをやめ、CommonMPインストール・ディレクトリ直下のCommonMPDataディレクトリに保存することとし、プロジェクト・グループ単位で同一のフォルダに入れて管理するようになりました。プロジェクト・グループとは、同じインプットデータ等を用いる複数のプロジェクトのことです。たとえば、同じインプット・データを用いて、要素モデルのパラメータだけ変えた複数のシミュレーション・プロジェクトなどです。パラメータの感度分析を行い、パラメータの値ごとに別のシミュレーション・プロジェクトにするようなことがありますが、そのような場合はそれらのプロジェクトを同一のプロジェクト・グループに入れると管理が便利です。

 Ver1.1では、シミュレーション・プロジェクトのポータビリティを確保するため、要素モデルにプロジェクト・グループ・フォルダの絶対パスを取得できるメソッドが追加されました。Ver1.0では、この機能がなく、要素モデルのDLLからの相対パスまたは絶対パスにより指定するしかありませんでした。プロジェクト・グループ・フォルダへの絶対パスを取得するメソッドが実装されたことにより、プロジェクト・グループ・フォルダ内にあるインプットデータを他のPCに持って行っても、それぞれのPCに合わせたパスが取得でき、要素モデルがインプット・データ・ファイルを見失わないようになりました。

プロジェクト・グループ・フォルダの絶対パスを返すメソッドは下記のとおりです。

 HySString McCalModelEssential.GetProjectGroupDir()

 実際には、演算モデルクラスで次ように記述すれば、プロジェクト・グループ・フォルダ内のInputDataフォルダ内のインプットデータのフルパスを取得できます。あとは、FileStreamクラス等を用いればインプット・データ・ファイルを開くことができるでしょう。


 this.GetProjectGroupDir().ToString() + "\\InputData\\" + インプットファイル名

テーマ:プログラミング - ジャンル:コンピュータ

CommonMP要素モデルの送信端子の設定

 CommonMPの要素モデルが隣接する要素モデルから伝送情報を受信したり、隣接する要素モデルに伝送情報を送信したりする場合には、端子(ポート)を設定してやる必要があります。それぞれ、伝送情報を受信する場合は受信端子、送信する場合は送信端子となります。

 送信端子および受信端子を設定する場合は、モデル・ファクトリ・クラスのCreateModelProperty()メソッドに次のように記述します。


McCellModelPropertyInfo csRtnCellPrptyDt = null;
if (csModelKind.Equals(モデル定義クラスで定義したモデル種別) == true){
csRtnCellPrptyDt = new McCellModelPropertyInfo(csLibraryID, csModelKind);

// 受信パターンの設定
McTranInfoPattern csTrnPtn = csRtnCellPrptyDt.CreateTranInforPattern(
    モデル定義クラスで定義したパターン,
McTranInfoDefine.SINGLE_CELL_SERIAL, // ポイント時系列の場合
”パターン名称"
) as McTranInfoPattern;

HySDataCharacteristicInCell csCellChara = csTrnPtn.CreateCellDataCharacteristic(n); // セル内の情報はn変数
csCellChara.SetDataKind(
    0, // 0番目のセル内物理量という意味
”セル内情報の物理量名", // 例えば「流量」
物理量の定義, // 流量の場合は、HySDataKindDefine.QUANTITY_OF_WATER_FLOW
"単位名" // 例「m3/sec」
);
csTrnPtn.SetCellDataCharacteristic(csCellChara);
csTrnPtn.SetInterpolateType(HySDefine.InterpolateType.LINEAR);  // 線形補間して伝送情報を受取る。
csRtnCellPrptyDt.AddReceivePattern(csTrnPtn);

csCellChara.SetDataKind(
    1, // 1番目のセル内物理量という意味
”セル内情報の物理量名", // 例えば「水位」
物理量の定義,  // 水位の場合は、HySDataKindDefine.WATER_LEVEL
"単位名" // 例「m」
);
csTrnPtn.SetCellDataCharacteristic(csCellChara);
csTrnPtn.SetInterpolateType(HySDefine.InterpolateType.LINEAR);  // 線形補間して伝送情報を受取る。
csRtnCellPrptyDt.AddReceivePattern(csTrnPtn);

n変数分つづく・・・
// 以下、受信パターンの設定
}



 

テーマ:プログラミング - ジャンル:コンピュータ

Rubyによるディレクトリの再帰処理

Subversionを使ってリポジトリからフィアルをチェックアウトすると、作業ディレクトリに「.svn」という名前のSubversionnの設定ファイルを保存したディレクトリが各ディレクトリごとに再帰的に現れます。リポジトリからの同期を切りたい場合には、.svnディレクトリをすべて削除する必要がありますが、これは面倒な作業となります。このような処理は、Rubyを使えば数行のスクリプトで済んでしまうので、とても便利です。

以下のスクリプトを適当な名前をつけて(例えば、rm_svn.rb)Subersionの作業フォルダに保存してやり、ruby rm_svn.rbというコマンドを打ち込むと、スクリプト・ファイルを保存したディレクトリ以下のディレクトリの.svnという名前のディレクトリがすべて削除されます。非常に便利です。


#! ruby -Ks
require 'fileutils'
FileUtils.rm_r( Dir.glob( '**/.svn' ), {:force=>true} )


テーマ:プログラミング - ジャンル:コンピュータ

CommonMP要素モデルのアイコン・解説書の設定

 CommonMP要素モデル開発における要素モデルのアイコン及び解説書のPDFファイルに設定についてのメモを残しておきます。要素モデルライブラリに対応するため、ModelIconディレクトリとModelManualディレクトリにサブディレクトリを設定しなkればならなくなりました。また、アイコンの色設定も8ビットカラーに制限されているようです。iPhoneのように美しい光沢をもったアイコンを作りたいところですが、現行のCommonMPでは無理なようです。

 CommonMPの要素モデルのひな形を使う方法でアイコンファイルを設定する方法について説明します。まず、ModelIconディレクトリの下に、ファクトリ識別子と同じ名前のサブディレクトリを作ります。そのサブディレクトリの下にアイコンファイルをおいてください。アイコンは128×128ドットより大きくすると色抜けします。また、8ビットカラーより大きサイズの色を使うと実行時に例外(OutOfBoundary)が出ます。128×128ドット8ビットカラーがいいようです。

 ソースコードには、Factory定義の部分の、GetCalModelInfoList()メソッドのcsModelInfo.SetIconNameメソッドの引数を以下のように指定します。

 csModelInfo.SetIconName("ファクトリ識別子名\\アイコンファイル名(拡張子をとったもの)");

ディレクトリの設定


このまま、CommonMPのライブラリ出力機能を使えば、所定の位置にアイコンファイルがインストールされるようになります。しかし、このままでは、デバッグ時に確認できず不便です。デバッグ時にも確認できるようにするには、ModelDeveloperStandardEdition\bin\ModelIcon\ディレクトリ以下にファクトリ識別子名のサブディレクトリをつくり、アイコンファイルを置いてやります。これで、Visual Studioからデバッグをかけるときも、開発中の要素モデルのアイコンが画面に現れるようになります。

デバッグ時の設定




テーマ:プログラミング - ジャンル:コンピュータ

GMT4.5.7をUbuntu11.04にインストール

Linux(Ubuntu11.04)の再インストールに伴い、GMT(Generic Mapping Tools)も再度インストールすることになりました。以前とは、違ってラクにインストールできるようになっていました。netCDFも直接インストールできました。その時のメモを残しておきます。

まず、GMTのウェブサイトに移動する。

1.GMTのHPからインストール用スクリプト(install_GMT.sh)を入手する。

2.GMTのHPのUNIX or Linux INSTALL_FORMでインストール環境を設定する。設定項目は下記のとおり。
A. Basic Requirements:
・1. Select default units in GMT:
-->> SI units (cm)

・2. Select default PostScript output format for GMT:
-->> Freeform PostScript (PS)

・3. Select POSIX Advisory File Locking:
-->> YES. Use file locking

B.Support Library Setup
・1.Select the appropriate netCDF library option:
-->> Please get and install the latest netCDF 3.6.x
Give full pathname to the netCDF directory: /usr/local/netcdf

・2. OPTIONAL. Experimental GDAL import support:
-->> Do not build optional/experimental GDAL grid import

C. GMT Setup
・1. Select the FTP site nearest you:
-->> Asia (ISV, Hokkaido University, Sapporo, Japan)

・2. Select passive [Default] or active ftp transmission:
-->> passive ftp

・3. Select the components you want (bzip2 sizes indicated):
-->> すべてチェック

・4. Select which triangulation algorithm to use:
-->> Shewchuk's algorithm

・5. Select library build type:
-->> Static Libraries

・6. Select the C compiler you want to use:
-->> gcc

・7. Select the make program you want to use:
-->> make


・8. Select GMT final destination directories
-->>
Place GMT in subdirectories of: /usr/local/gmt


・9. Select alternative GMT_SHAREDIR directory
-->> Alternative GMT_SHAREDIR directory: /usr/local/gmt/share

・10. Select optional supplemental packages to install:
-->> チェックせず

・11. Select supplemental packages to install:
-->> チェックせず

・12. Complete the operation:
-->> Run all example scripts (assumes scripts tar archive was chosen above)


-->> GET PARAMETERS をクリックして 表示されたテキストを GMTparam.txt として保存する


3.インストール

ホーム・ディレクとにインストール用ディレクトリを作成し、インストール用ファイルをコピーする。
インストール用のシェルスクリプトinstall_gmtに実行権限を与える。
$ mkdir GMT
$ mv install_gmt GMT/
$ mv GMTparam.txt GMT/
$ cd GMT
$ chmod +x install_gmt

インストールする
$ sudo ./install_gmt GMTparam.txt

.bashrcファイルをテキスト・エディタで開き、下記のコマンドを追記する。
export NETCDFHOME=/usr/local/netcdf
export PATH=/usr/local/gmt/bin:$PATH
export MANPATH=/usr/local/gmt/man

動作確認
下記のスクリプトを実行すると、japan.psというポストスクリプト・ファイルができる。画像編集ソフト等で確認し、詳細な海岸線がきちんと描かれいたらインストールの成功。
pscoast -R125/148/30/46 -JM10c -B5g5 -Di -G200 -W1 -X3c -Y2c -V -P > japan.ps

日本地図







テーマ:ubuntu - ジャンル:コンピュータ

MODxのサーバ移転

バックアップ用をしばらく放置していたら、本サーバとの差分がかなり大きくなってしまったので、この際本サーバの方から移転することにしました。その時の作業メモを残しておきます。

1. MODxのドキュメント・ルートのファイルをすべてコピーし、移転先のMODxのドキュメントルートに移動させる。
2. 移動したファイルの所有者、グループをそれぞれ、apache, apacheに変更する。
3. 移転先のサーバのMySQLを起動して、本サーバでMODxをインストールしたときに使ったユーザ名とパスワードで同じ名前の空のデータベースを作成する。
4. phpMyAdminを用いて、本サーバからMODx用のデータベースをエクスポートし、エクスポート用のSQL文のテキスト・ファイルを作成する。
5. 3.で用いたSQLと移転先のphpMyAdminを使って、移転先にMODx用のデータベースをインポートする。
6. /core/config/config.inc.phpファイルを移転先のサーバの環境に合わせて、編集する。
7. 必要に応じて、/etc/httpd/httpd.confファイルを編集する(フレンドリーURLの設定等)。
8. Apacheの設定をリロードして、作業完了

自宅サーバ(SSL証明書の更新)

SSL証明書の更新の案内メールが送られてきたので気付いたのですが、自宅サーバ(CentOS)を構築してから早いもので、もう1年経ちました。

今回は、新規申請とは違い中間証明書のインストールが必須となっていました。
新規のインストールと同じように、/etc/pki/tls/certsディレクトリにSSL証明書をserver.cert、サーバ鍵ファイルをserver.keyとして保存します。その他に中間証明書ファイルをinter.certという名前で保存します。

/etc/httpd/conf.d/ssl.confに次の3行を追加します。
SSLCertificateFile /etc/pki/tls/certs/server.cert
SSLCACertificateFile /etc/pki/tls/certs/inter.cert
SSLCertificateKeyFile /etc/pki/tls/certs/server.key

# /etc/init.d/httpd reload コマンド入力して、httpdを再設定すれば、作業完了です。

次のページ

FC2Ad

FC2ブログ