nDiki : エラー処理
エラー処理 - error handling
以下「呼び出されるもの」をメソッドと書くこととする。サブルーチンも関数と呼んでもほぼ同じ。
エラーのチェック
実行が失敗する可能性のあるメソッドの呼び出し側は、メソッド呼び出し後に成功したか失敗したかをチェックして、失敗だった場合適切な処理を行う必要がある。
エラー状態の取得
メソッドの実行が成功か失敗かどうかの情報がどのように得らるようになっているかは、メソッドによって様々である。
メソッドの返り値によって成功・失敗が返されるタイプ
成功したかどうかが true か falseか、あるいは 0 か !0 などで返されるタイプ。
if (obj.run()) {
// success
}
失敗の場合はエラー番号などが返されるものがある。真偽値として評価できる値を返す場合はそのまま条件式などで使用できる。
エラー状態受け渡しのオブジェクトを呼び出し時に引数として指定するタイプもある。
成功した場合は結果の値が、失敗した場合は特殊な値が返るタイプ
失敗した場合に null を返すものや、通常0以上の値を返す時に失敗の場合は負の値を返すものなど。
Data result = obj.run();
if (result != null) {
// success
}
チェックを忘れると、誤った値で計算を続けてしまったりヌルポインタ例外を引き起したりする。
結果受け渡しオブジェクトを呼び出し時に指定するタイプもある。
メソッドの呼出し後、状態受け渡し用オブジェクト(やグローバル変数など)などに状態がセットされるもの
obj.run();
if (globalStatusObject.isSuccess()) {
// success
}
メソッドの呼だし後、状態確認用メソッドなどを呼んで状態を取得するもの。
obj.run();
if (obj.isSuccess()) {
// success
}
失敗の場合例外を発生するもの
try {
obj.run();
}
catch (Exception x) {
// error
}
どこかで捕捉する必要がある。
何も教えてくれないもの
困る。
スポンサード リンク
Related term
2005年4月2日 (土)
■ DAR で差分/増分バックアップ

普段使っているノート PC は pdumpfs でバックアップをとっている。 任意のスナップショットから簡単にファイルを復元できるので、バックアップ用HDDを別に用意できる場合はこれが便利。
@ 問題1
会社で使っている Windows デスクトップは、rsync でWindowsファイルサーバへ同期。 1世代しかバックアップが無い。 少なくとも数世代前のファイルが復元できるようにしておきたい。
@ 問題2
某 Linux サーバはバックアップ無し! マズイ。 現状、たまに手動で tarball にして保存しているぐらい。
@ DAR
DAR というバックアップコマンドの紹介を見て興味をひかれた。 シンプルながらも使い勝手の良さそう。 Linux でも Windows でも動くというのも嬉しい。
@ DAR を使ってみる
Linux 上で試してみる。
@ テスト用ディレクトリを作成
/tmp の下にテスト用ディレクトリ dar を作成。 その下に home ディレクトリと var ディレクトリを作成する。
mkdir -p /tmp/dar/home/naney mkdir -p /tmp/dar/var/lib/dar echo 'abc' > /tmp/dar/home/naney/file1.txt
/tmp/dar/home 以下バックアップ対象として /tmp/dar/var/lib/dar 以下にバックアップファイルを作成してみることにする。
@ フルバックアップ
最初はフルバックアップ:
dar -c /tmp/dar/var/lib/dar/home-full \
-y9 \
-R /tmp/dar \
home
/tmp/dar/home をフルバックアップした home-full.1.1.dar が /tmp/dar/var/lib/dar にできる。
@ 差分バックアップ(1回目)
ファイルを1つ追加。
echo 'def' > /tmp/dar/home/naney/file2.txt
ここで差分バックアップをとる:
dar -c /tmp/dar/var/lib/dar/home-diff-1 \
-A /tmp/dar/var/lib/dar/home-full \
-y9 \
-R /tmp/dar \
home
home-full.1.dar に対する差分バックアップファイル home-diff-1.1.dar ができる。
@ 差分バックアップ(2回目)および増分バックアップ
もう1つファイルを追加。それから最初にあったファイルを削除してみる。
echo 'ghi' > /tmp/dar/home/naney/file3.txt rm /tmp/dar/home/naney/file1.txt
ここで差分バックアップ(2回目):
dar -c /tmp/dar/var/lib/dar/home-diff-2 \
-A /tmp/dar/var/lib/dar/home-full \
-y9 \
-R /tmp/dar \
home
home-full.1.dar に対する差分バックアップファイル home-diff-1.2.dar ができる。
またインクリメンタルバックアップもとってみる dar -c /tmp/dar/var/lib/dar/home-inc-2 \
-A /tmp/dar/var/lib/dar/home-diff-1 \
-y9 \
-R /tmp/dar \
home
差分バックアップファイル home-diff-1.1.dar に対する差分バックアップファイル home-diff-2.1.dar ができる。
@ フルバックアップからの復元
dar -x /tmp/dar/var/lib/dar/home-full
を実行。
home/naney/file1.txt
が復元される。
@ フルバックアップ+差分1回目からの復元
dar -x /tmp/dar/var/lib/dar/home-full dar -x /tmp/dar/var/lib/dar/home-diff-1
を実行。
home/naney/file1.txt home/naney/file2.txt
が復元される。
@ フルバックアップ+差分2回目からの復元
dar -x /tmp/dar/var/lib/dar/home-full dar -x /tmp/dar/var/lib/dar/home-diff-2
を実行。
home/naney/file2.txt home/naney/file3.txt
が復元される。
@ フルバックアップ+増分1回目(=差分1回目)+増分2回目からの復元
dar -x /tmp/dar/var/lib/dar/home-full dar -x /tmp/dar/var/lib/dar/home-diff-1 dar -x /tmp/dar/var/lib/dar/home-inc-2
を実行。
home/naney/file2.txt home/naney/file3.txt
が復元される。
@ 運用するには
- dar を使ったバックアップスクリプトの作成(ファイル名生成の処理など)
- cron による定期バックアップの設定
- バックアップファイルをリモートサーバへ転送する手段の用意
- 古いバックアップファイルの削除(ローカル、サーバ)処理の用意
などが必要か。 エラー処理まで含めると結構面倒くさいな。 Perlあたりでまずは簡単なスクリプトを用意するか。
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- 今日のさえずり - スポーツの制裁金ってどこにいくのだ? (2008-06-11)
- ファイルシステム作成はノート PC でやっておいた (2006-01-17)
- Linux、rsync でバックアップ (1999-01-23)
- Windows で pdumpfs (2004-11-14)
2006年2月12日 (日)
■ 野良パッケージと依存 Perl モジュールのインストールセット を CPAN::Mini::Inject で

前回は CPAN::Site を用いたオフライン用インストールセットを作成した。
今回は空の CPAN のミラーを作り、そこに野良パッケージを突っ込んで使用する形でインストールセットを作成してみる。
~/perl-5.8.8 以下にクリーンな Perl v5.8.8 をインストールしてインストールセットを作成していく。
@ CPAN::Mini::Inject をインストールする (オンライン)
perl -MCPAN -e shell cpan> install CPAN::Mini::Inject cpan> exit
CPAN::Mini::Inject は、インストールセットには必要ない。 ~/perl-5.8.8 にはインストールせずに、普段使っているほうにインストールしておく。
@ インストールしたい野良パッケージ用のローカル CPAN サーバを作成する (オンライン)
以下スクリプト例(エラー処理などは省略)
#!/usr/bin/perl -w
use strict;
use File::Path;
use CPAN::Mini;
use CPAN::Mini::Inject;
my $remote = 'ftp://ftp.dti.ad.jp/pub/lang/CPAN/';
my $local = '/home/myname/public_html/CPAN';
my $repository = '/home/myname/repository';
mkpath([$local, $repository], 1, 0755);
# module_filters で全てのモジュールを対象外にして、空の CPAN ミラーを作る
CPAN::Mini->update_mirror(remote => $remote,
local => $local,
diremode => 0755,
trace => 1,
module_filters => [ qr/./ ]);
my $injector = CPAN::Mini::Inject->new;
$injector->{config}{remote} = $remote;
$injector->{config}{local} = $local;
$injector->{config}{repository} = $repository;
$injector->{config}{diremode} = 0755;
# CPAN::Mini::Inject リポジトリに追加したあと、
# CPAN ミラーへ 注入
$injector->add(repository => $repository,
module => 'WiKicker',
authorid => 'NANEY',
version => '0.xx',
file => 'WiKicker-0.xx.tar.gz')
->inject;
これで、~/public_html/CPAN に野良パッケージの追加された CPAN ミラーが作成される。
@ WiKicker と依存するモジュールをインストールする (オンライン)
rm -rf ~/.cpan ~/perl-5.8.8/bin/perl -MCPAN -e shell cpan> o conf urllist pop cpan> o conf urllist push http://http://localhost/CPAN cpan> reload index cpan> o conf urllist push ftp://ftp.dti.ad.jp/pub/lang/CPAN/ cpan> install WiKicker cpan> exit
ここでローカル CPAN サーバを file:/// 等で指定すると、そこから読みとったファイルは ~/.cpan/sources/ 以下にコピーされないので一箇所にまとめることができないので注意。
またCPAN ではモジュールインデックスファイルは1組しか持てないようで、初期設定のままだと野良パッケージを含む CPAN ミラーのインデックスファイルが使われない。 そのため一旦 urllist を空にした後、 自分の CPAN ミラーを指定しインデックスファイルをロードする。 その後にソースパッケージを取得するセカンダリとして通常の CPAN (ミラー)を指定するようにしている。
これが終わると、WiKicker とそれに必要なファイルが ~/.cpan/sources にたまる。
これを適宜アーカイブして保存する。
@ オフラインでインストールする
別の環境で例えば /usr/local/perl-5.8.8 にインストールされた Perl に WiKicker をオフラインでインストールするとする。
先の工程で作成したファイルセットが /tmp/CPAN においてあるものとする。
/usr/local/perl-5.8.8/bin/perl -MCPAN -e shell # 初期化でオフラインのため CPAN ミラーの選択ができずに URL の入力を # 求められたところで file:///tmp/CPAN を指定 cpan> install WiKicker cpan> exit
これで /tmp/CPAN から芋蔓式に WiKicker がインストールされる。
@ ポイント
CPAN::Site を利用して構築した場合は、インストール時にも CPAN::Site が必要だが、こちらはインストールセットの利用には CPAN.pm だけで良いというのが利点。
今回は CPAN::Mini で空の CPAN ミラーを作成し野良パッケージを追加した。
ここで最初から CPAN の最新パッケージの全ミラーを CPAN::Mini で作成し、これに野良パッケージを追加してインストールセットを作ってしまうという方法もある。 この場合は後で必要に応じてミラーからパッケージを入れられるというメリットがあるかわりに、ミラー作成のコストがかかるというデメリットがある。
- 野良パッケージと依存 Perl モジュールのインストールセット をCPAN... (2006-02-11)
- WiKicker の Makefile.PL を Module::Inst... (2006-02-10)
- ActivePerl で Ming (2005-02-23)
- CPAN のPerl モジュールを RPM パッケージ化する (2003-04-22)
- SVN::Webインストール失敗 (2006-02-17)
2006年6月11日 (日)
■ WiKicker 0.34 リリース - 添付機能のコードを追加

2006年6月8日以来、3日ぶりのリリース。
zakwa 氏からの要望により、WikiPage のコピー直後に編集画面に移れる edit now オプションを追加。
また大きな改良として「添付機能」を追加した。 まだ最初のコードなのでエラー処理等が甘いが、それなりに動いているのでコミット。 まだ権限設定がないので、公開サーバでは使用しない方が良い。
添付ファイルのダウンロードを WiKicker 本体の CGI プログラムから行わせるか、独立の CGI プログラムにするか迷ったが、結局別物にした。
というのが大きな理由。
@ 設定方法
WiKicker のページにまだ設定方法を書いていないので、こちらへ。
@ attachment CGI プログラムを設置
例えば attachment というファイル名で以下のような Perl CGI プログラムを作り、Web サーバから実行できるように設定を行う。
#!/usr/bin/perl use strict; use warniings; use WiKicker::WikiCGI::AttachmentController; WiKicker::WikiCGI::AttachmentController ->new(properties_file => '対応する wiki の設定ファイル名')->run;
@ Wiki のプロパティに設定を追加
次に Wiki の設定ファイルに以下を追加。
param.NormalPage.attachment: enable param.NormalPage.attachment.uri: attachment
param.NormalPage.attachment.uri には上で作った CGI プログラムの URI (相対/絶対)を指定する。
これで各ページに attachment (添付)というリンクが表示され、添付機能が使えるようになる。
@ WikiPage での参照の仕方
# リンクを作成 [[attachment:ファイル名]] [[attachment:ページ名/ファイル名]] <- 別のページの添付ファイル # 画像をインライン表示 [[image:attachment:ファイル名]] [[image:attachment:ページ名/ファイル名]]
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
- XAMPP で WiKicker を動かしてみた。PPM インストール OK。 (2007-02-09)
- WiKicker における PageName 最長文字数 (2006-06-10)
- Perl CGI プログラムのテストには WWW::Mechanize::... (2006-02-18)
- [ Perl ] Log::Log4perlのはまりどころ (2004-03-02)
スポンサード リンク
Related web page
エラー処理http://www.objectarchitects.de/arcus/cookbook/exhandling/
どんなシステムでも<strong>エラー処理</strong>は欠かせず、たいていは大きな割合を占める。システム上のエラーはもちろん、業務上に代表される問題領域のエラーまで対応しなければならないからだ。<strong>エラー処理</strong>の基本は、エラーを検出し、その結果によって適切な処理を実行すること。しかし、システム全体でみれば、異なるタイプのエラーが数多くあるため、<strong>エラー処理</strong>が分散するし、エhttp://www.st.rim.or.jp/~k-kazuma/SD/SD561.html
■よく検索されるキーワード
提案書(65) perl(54) 書き方(49) torrent(49) linux(40) debian(35) アジェンダ(33) 使い方(31) windows(31) x31(30) svn(26) ssh(25) tc-1(25) サンプル(23) usb(22) java(22) ganttproject(21) mp980(20) 画像(20) tortoisesvn(20) インストール(19) 手帳(19) cvs(19) 壁紙(19) a6(18) thinkpad(17) subversion(16) 石垣祐馬(16) ほぼ日手帳(16) 作り方(16) 修理(16) 動画(15) 日本語(15) 充電式カイロ(15) ノート(14) ダイソー(14) 方眼(14) ヨドバシ(14) リフィル(13) 秋葉原(12) ダウンロード(12) apache(12) アジェンダとは(12) iwgp(12) 設定(12) c#(11) mp3(11) ヨドバシカメラ(11) テンプレート(11) 無線lan(11) ubuntu(11) nikon(11) dropbox(11) システム手帳(11) porter(11) クラリチン(10) 筆まめ(10) centos(10) ヤマダ電機(10) window(10) ポメラ(9) フリー(9) リポジトリ(9) イメージテック(9) wiki(9) flex(9) xampp(9) フォーマット(9) terastation(8) flash(8) gmail(8) ドラマ(8) proxy(8) rcs(8) 無料(8) 温度計(8) トランサミン(8) constant(8) truecrypt(8) google(8)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 4.230727s / load averages: 0.18, 0.25, 0.26
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク