ChaichanPapa-World !

燈明日記(2008/03

◆ インデックス

◆ 2008年3月

2008-03-31 有難嬉悲しメモ(2008/03/31)

2008-03-31 テーブルコピー

SQL Serverでテーブルコピーです。

select * into xxxTBL_BACKUP from xxxTBL

intoだけでテーブルは自動createする。なのでSQL Serverでは、create tableは必要ない。

リンクサーバーを設定すれば、別DBのテーブルも簡単にコピーが出来ます。

2008-03-31 EXCELのシート名制限

シート名の先頭に使用できるのは、文字、数値、アンダースコアのいずれかです。

また、「/」「\」「*」「?」「:」はシート名に使用できません。

2008-03-31「\」使用時の留意点

たとえば、Perlでダブルクォート文字列の中にデータとしての「\」ある場合は、エスケープして「\\」とします。

しかし、その文字列内がJavaScriptの場合は、「\\\\」とします。


またしかし、そのJavaScriptがHTMLでのonClick属性値にある場合、属性値なので、文字参照とかURLエンコードとか悩むところですが、今回の場合は「\\\\」でいいみたいです。

2008-03-30 Southern Man

CSN&Yでいいのがなかったので、以下の2つが素晴らしい出来なので・・・

D

D

2008-03-30 シングルクォート使用時の留意点

WEBプログラム系でシングルクォートの用途は大体以下のとおりです。

で、囲んだ文字列の中にシングルクォートがあった場合どうするか、以下の通りです。

しかし、JavaScriptでは、「'」を渡した場合、文字を囲む「'」と解釈されエラーとなります。

したがって、この場合だけは、前に「\」を置き「\&#39」で渡すとJavaScriptは、文字中の「'」と解釈してくれるようです。

あと、EXCELのシート名などは、名前の頭に「'」が付けれなかったりしますね。

とにかく、シングルクォートは、プログラマ泣かせであることは確かです。

2008-03-29 Neil Young

16才ぐらいに聴いていた、暗い青春だったかも・・・


Neil Young - Heart of Gold (live 1971)

D

Neil Young "Don't let It Bring you Down" (live 1971)

D

CSNY with Nils Lofgren - Southern Man (acoustic)

D

Neil Young - All Along The Watchtower

D

2008-03-29 Key to the Highway

吉祥寺のロック喫茶でよく聴いたDerek and the DominosのKey to the Highway


Key to the Highway - Eric Clapton

D


Key to the Highway - Derek and the Dominos

D

2008-03-29 HTMLで要素の属性値内にクォート文字を書くには

htmlでの要素の属性は「属性名='属性値'」または、「属性名="属性値"」で記述します。

では、属性値の中に「'」または「"」が存在する場合は、どうしたらよいでしょうか?


UNIX系人は「\」付加したり、SQL系の人は「''」とか2つ重ねたりしますね。でも、今回はNGです。

答えは、文字参照*1を使います。

実は、以下も文字実体参照使ったほうがいいようです。

以下は、PerlでのCGIで「&」「>」「<」「"」「'」を文字参照に変換する関数です。お役に立てれば幸いです。

sub htmlf {
    my ($strhtml) = @_;
    $strhtml =~ s/&/&amp;/g;
    $strhtml =~ s/>/&gt;/g;
    $strhtml =~ s/</&lt;/g;
    $strhtml =~ s/"/&quot;/g;
    $strhtml =~ s/'/&#39;/g;
    return $strhtml;
}

このサンプルの関数は、以下を対処します。

たとえば、DBからSELECTしたデータ中にクォート文字とか山括弧文字などある場合、そのデータをHTML出力すると、いろいろと悪さをします。HTML上で悪さをしないように文字参照に変換します。

*1:表記方法により数値文字参照 (Numeric character reference) と文字実体参照 (Character entity reference)の二種が存在する。

2008-03-28 Ray Charles Leon Russell Willie Nelson - A Song For You

しかし、すごいメンバーや!

D

2008-03-28 有難嬉悲しメモ(2008/03/28)

2008-03-28 シングルクォートの文字実体参照

シングルクォートの文字実体参照は「&apos;」ですが、HTMLだと認識してくれません。

しかし、数値文字参照「&#39;」にするとHTMLでも認識します。


調べました。

HTML 4.01 の DTD では、' が定義されていません。

XML 1.0 の DTD では、' は定義されています。

http://mlarchive.kahua.org/mlarchive/kahua-dev/msg00305.html

以下もリンクメモしときます。

2008-03-27 有難嬉悲しメモ(2008/03/27)

2008-03-27 PerlからDBへバイナリデータを格納する

バイナリデータをDBに格納するには、たぶん、いろいろあって、すんなり出来ないと思います。

とりあえず、私が苦労した結果をメモしときます。


以下は、OLEモジュールADO(Win32::OLE->new("ADODB.Connection"))の場合です。

 

バイナリデータを16進文字列に変換し、頭に「0x」を付けてスカラー変数に代入、その変数を使ってDB格納ができました。


具体的には、$wkにバイナリデータが入っているとします。(Perlでの文字列は、バイナリデータを格納することができる)

それを以下のように、$wkをunpackで16進文字列に変換し、"0x"の後に連結する。

$strhex = "0x" .  unpack("H*", $wk);

つぎに、$strhexを引用符なしでSQLにセットしてやると、バイナリデータを格納することができました。

"UPDATE xxxTBL SET binDATA = $strhex WHERE ......"

2008-03-27 carole king

It's too late

キャロルキングなつかしい。学生時代によく聴きました。

D


So Far Away

私が学生の時に、いいおねぇさんだったので、優に60才を超えていると思う。

でも、歌は色あせていない、素晴らしい!

2008-03-26 Eric Clapton - Tears in Heaven

D

2008-03-26 同心とは

とある小誌より

口で「同心」を唱えるだけでは、一つの心になれるものではありません。

共通の願いを持って、苦楽を共にしてこそ同心が育っていくのです。

2008-03-26 有難嬉悲しメモ(2008/03/26)

  • 今日は、WEBに関する知識が役に立って、有り難かったです。
  • 今日は、シングルクォートのいろいろな振る舞いを解明(謎)できて、嬉しかったです。
  • 今日は、シングルクォートのいろいろな振る舞いに泣かされた日でもありました。悲しかったです。

有難嬉悲しメモ:http://chaichan.lolipop.jp/src/arigata.htm

2008-03-26 Perlでの文字列はバイナリデータを格納できるか?

結論から言うと、Perlでの文字列は、ごく普通にバイナリデータを格納することができます。

(最終的には、その文字列がスカラー変数に代入されるのですが・・・)

逆に言うと、文字列の中身がバイナリデータの場合も起こりえるわけです。


たとえば、DBにバイナリデータの項目があったとします。

そこに、Perlからバイナリデータを文字列として渡せるわけです。


しかし、DBのドライバーが上手く処理してくれない場合があるのです。

特にナル(ASCIIの0)とかシングルクォート「'」などなど・・・。


つまり、結果的には、文字列のままでは、DBへバイナリデータが格納できないのです。

では、どうするか?・・・・・・。つづく。

つづき:http://d.hatena.ne.jp/chaichanPaPa/20080327/1206616237

2008-03-25 桑田佳祐 - 明日晴れるかな(弾き語り生歌)

山P(山下智久)よかったな。

D

2008-03-25 有難嬉悲しメモ(2008/03/25)

  • 毎日を元気に働けること。なにげないことだけど、あらためて気がつくと、有り難かったです。
  • 昨日できなかったバイナリデータ(バイナリゼロ)のDB格納ができて、嬉しかったです。
  • 毎日が、同じように過ぎて行く、しかも速く過ぎて行く、なぜか少し悲しかったです。

有難嬉悲しメモ:http://chaichan.lolipop.jp/src/arigata.htm

2008-03-25 Base64モジュールの留意点

バイナリデータをいろいろな都合で文字列として扱い場合があります。

そんな時は、Base64でのエンコードが便利です。


以下は、Base64エンコード方式への文字列のエンコードとデコードを行う標準モジュールです。

たとえば、$decodedにバイナリデータが入ってるとします。

そのデータをエンコード(encode_base64)した$encodedは、文字列になっています。

元に戻す時は、デコード(decode_base64)します。するとバイナリデータに戻ります。

use MIME::Base64;
$encoded = encode_base64($decoded,'');
$decoded = decode_base64($encoded);

留意点として、「encode_base64」の第2引数を指定しないとエンコード結果に改行が付加されます。

これを回避するには、第二引数へ「''」をセットすると改行は付加されなくなります。


参考リンク:http://perldoc.jp/docs/modules/MIME-Base64-2.12/Base64.pod


ちなみに、Base64とは

元データを6ビットずつに分割する。

6ビットに満たない分は0を追加して6ビットにする。

この6ビットを A〜Z、a〜z、0〜9、+、/ の表示可能コードに4文字ずつ割り振る。

最後が4文字に満たない場合は、 = 記号を追加し4文字にする。

http://d.hatena.ne.jp/chaichanPaPa/20070620/1182345355

2008-03-24 有難嬉悲しメモ(2008/03/24)

  • 生きているって、なにげないことだけど、あらためて気がつくと、有り難かったです。
  • 今日は、特に嬉しかったことは、なかったです。
  • バイナリデータ(バイナリゼロ)をDBに格納ができず、悲しかったです。

2008-03-24 ネットワーク機器について

電気信号を増幅したり整形したりするのが、リピータやハブ。

MACアドレスでパケットをフィルタリングするのが、ブリッジやスイッチ。

IPアドレスでパケットをルーティングするのが、ルーターやデフォルトゲートウェイ。


リピータとハブは、物理層を担当する。

ブリッジとスイッチは、データリンク層を担当する。

ルーターとゲートウェイは、ネットワーク層を担当する。


ブリッジは、自ネットワーク内宛てのパケットは自ネットワーク外に出さない。

しかし、ブロードキャストは、自ネットワーク内宛て以外もあるので、通ってしまう。


ルーターは、ブロードキャストを自ネットワーク外に出さない。

すると、ARPも出れなくなってしまって、自ネットワーク外と通信ができなくなってしまう。


デフォルトゲートウェイは、ARPを通し、自ネットワーク以外と通信ができるようになる。めでたし、めでたし。


参考リンク:http://chaichan.lolipop.jp/src/net.htm


本紹介

初めてネットワークを勉強するなら、以下の本から入るとわかりやすいと思います。

3分間 ネットワーク 基礎講座

3分間 ネットワーク 基礎講座

2008-03-23 チベットの何が問題なのか?

2008-03-23 三世・三界・三世間

まぎらわしいので、整理しときます。


ちなみに、三世界とは、仏教用語ではないみたいです。

2008-03-23 SQL Server Enterprise Managerでテーブルをスクリプト化する

SQL Server Enterprise Managerで、すでにあるテーブルをスクリプト化するには、以下の手順です。

  • コンソールルートから辿って、テーブル一覧を表示する。
  • スクリプト化したいテーブルを選択する。
  • 複数選択は、「Ctrlキーを押しながらクリック」する。
  • 選択状態で右クリックメニューを出す。
  • 「すべてのタスク」の「SQLスクリプト生成」を指定する。
  • すると、「SQLスクリプト生成」ダイアログが出るのでOKボタンを押す。
  • すると、「名前を付けて保存」ダイアログが出る。
  • そこで、任意のフォルダを指定して任意のファイル名で落とす。

2008-03-22 有難嬉悲しメモ(2008/03/22)

  • なぜか、今日は、家族が全員揃って、みんな仲良く、有り難かったです。
  • 今日は、特に嬉しかったことは、なかったです。
  • 花粉症が結構来ている。目の痒み・鼻水・喉の痛み・頭痛・熱っぽい、辛い・・・悲しかったです。

2008-03-22 一大事の因縁とは

法華経方便品に以下の一節が出てきます。

諸仏世尊は、衆生をして仏知見を開かしめ清浄なるを得せしめんと欲するが故に、世に出現したもう。

衆生に仏知見を示さんと欲するが故に、世に出現したもう。

衆生をして仏知見を悟らしめんと欲するが故に、世に出現したもう。

衆生をして仏知見の道に入らしめんと欲するが故に、世に出現したもう。

舎利弗、是れを諸仏は唯一大事の因縁を以っての故に、世に出現したもうとなづく。

要約すると、仏さま(諸仏)は、我々(衆生)の良心(仏性・仏知見)を「開き」「示し」「悟らせ」「正しい道に入らしめる」ため、この世に出現したとのことです。


逆にいうと、我々は、仏道とご縁になることにより、良心(仏性)に目覚め、正しい行いをしていくことが、結果的に幸せになれることであり、それが生きがいなのだと・・・。

2008-03-22 PerlでStrategyパターン! (デザインパターン)

Perlでデザインパターン 第10弾(Strategyパターン)

Strategyパターンとは、戦略(アルゴリズム)をごっそりと交換できるようなパターンです。

たとえば、メモリ実装状態により、「メモリを使うアルゴリズム」か「ディスクを使うアルゴリズム」かを動的に切り分ける時に有効ですね。


一般的なStrategyパターンのクラス図
    +-----------------+          +-----------------+
    | Context         |o-------->| Strategy        |
    +-----------------+          +-----------------+
    | strategy        |          |                 |
    +-----------------+          +-----------------+
    | contextMethod   |          | strategyMethod  |
    +-----------------+          +--------+--------+
                                          #            
                                          |            
                           +--------------+--------------+ 
                           |                             | 
                  +--------+--------+           +--------+--------+ 
                  |ConcreteStrategy1|           |ConcreteStrategy2| 
                  +-----------------+           +-----------------+ 
                  |                 |           |                 | 
                  +-----------------+           +-----------------+ 
                  |strategyMethod   |           |strategyMethod   | 
                  +-----------------+           +-----------------+ 

サンプル

一番下で紹介している本の『Java言語で学ぶデザインパターン入門』に書かれているStrategパターンのJavaでのサンプルをPerlで書き換えてみました。


サンプルのクラス図
    +-----------------+          +-----------------+
    | Player          |o-------->| Strategy        |
    +-----------------+          +-----------------+
    | strategy        |          |                 |
    +-----------------+          +-----------------+
    | nextHand        |          | nextHand        |
    | win             |          | study           |
    | lose            |          +--------+--------+
    | even            |                   #            
    +-----------------+                   |            
                           +--------------+--------------+ 
                           |                             | 
                  +--------+--------+           +--------+--------+ 
                  |WinningStrategy  |           |ProbStrategy     | 
                  +-----------------+           +-----------------+ 
                  |                 |           |                 | 
                  +-----------------+           +-----------------+ 
                  |nextHand         |           |nextHand         | 
                  |study            |           |study            | 
                  +-----------------+           +-----------------+ 
Hand.pm
package Hand;
use strict;
use warnings;
use constant  HANDVALUE_GUU => 0;
use constant  HANDVALUE_CHO => 1;
use constant  HANDVALUE_PAA => 2;

my $name;
my $hand;
sub new {
    my $class = shift;
    my $handvalue = shift;
    my $self = {};
    $self->{handvalue} = $handvalue;
    return bless $self, $class;
}
BEGIN {
    $name = ["グー", "チョキ", "パー"];
    $hand = [&new('Hand', HANDVALUE_GUU), &new('Hand', HANDVALUE_CHO), &new('Hand', HANDVALUE_PAA)];
}
sub getHand {
    my $self = shift;
    my $handvalue = shift;
    return $hand->[$handvalue];
}
sub is_stronger_than {
    my $self = shift;
    my $h = shift;
    return $self->fight($h) == 1;
}
sub in_weaker_than {
    my $self = shift;
    my $h = shift;
    return $self->fight($h) == -1;
}
sub fight {
    my $self = shift;
    my $h = shift;
    if ($self->{handvalue} == $h->{handvalue}) {
        return 0;
    } 
    elsif (($self->{handvalue}+1)%3 == $h->{handvalue}) {
        return 1;
    }
    else {
        return -1;
    }
}
sub tostring {
    my $self = shift;
    return $name->[$self->{handvalue}];
}
1;
Strategy.pm
package Strategy;
use strict;
use warnings;

sub nexthand { die "オーバーライド必須"; }
sub study { die "オーバーライド必須"; }
1;
WinningStrategy.pm
package WinningStrategy;
use strict;
use warnings;
use base 'Strategy';
use Hand;

sub new {
    my $class = shift;
    my $self = {};
    my $seed = shift;
    srand $seed;
    $self->{won} = 0;
    $self->{prevHand} = '';
    return bless $self, $class;
}
sub nexthand {
    my $self = shift;
    if (!$self->{won}) {
        $self->{prevHand} = Hand->getHand(int(rand(3)));
    }
    return $self->{prevHand};
}
sub study {
    my $self = shift;
    my $win = shift;
    $self->{won} = $win;
}
1;
ProbStrategy.pm
package ProbStrategy;
use strict;
use warnings;
use base 'Strategy';
use Hand;

my $history;
BEGIN {
    $history = [
        [1,1,1],
        [1,1,1],
        [1,1,1],
    ];
}
sub new {
    my $class = shift;
    my $self = {};
    my $seed = shift;
    srand $seed;
    $self->{prevHandValue} = 0;
    $self->{currentHandValue} = 0;
    return bless $self, $class;
}
sub nexthand {
    my $self = shift;
    my $bet = int(rand($self->getsum($self->{currentHandValue})));
    my $handvalue = 0;
    if ($bet < $history->[$self->{currentHandValue}]->[0]) {
        $handvalue = 0;
    } 
    elsif ($bet < $history->[$self->{currentHandValue}]->[0]+$history->[$self->{currentHandValue}]->[1]) {
        $handvalue = 1;
    }
    else {
        $handvalue = 2;
    }
    $self->{prevHandValue} = $self->{currentHandValue};
    $self->{currentHandValue} = $handvalue;
    return Hand->getHand($handvalue);
}
sub study {
    my $self = shift;
    my $win = shift;
    if ($win) {
        $history->[$self->{prevHandValue}]->[$self->{currentHandValue}]++;
    }
    else {
        $history->[$self->{prevHandValue}]->[($self->{currentHandValue}+1)%3]++;
        $history->[$self->{prevHandValue}]->[($self->{currentHandValue}+2)%3]++;
    }
}
sub getsum {
    my $self = shift;
    my $hv = shift;
    my $sum = 0;
    for my $i (0..2) {
        $sum += $history->[$hv]->[$i];
    }
    return $sum;
}
1;
Player.pm
package Player;
use strict;
use warnings;

sub new {
    my $class = shift;
    my $self = {};
    $self->{name} = shift;
    $self->{strategy} = shift;
    $self->{wincount} = 0;
    $self->{losecount} = 0;
    $self->{gamecount} = 0;
    return bless $self, $class;
}
sub nexthand {
    my $self = shift;
    return $self->{strategy}->nexthand;
}
sub win {
    my $self = shift;
    $self->{strategy}->study(1);
    $self->{wincount}++;
    $self->{gamecount}++;
}
sub lose {
    my $self = shift;
    $self->{strategy}->study(0);
    $self->{losecount}++;
    $self->{gamecount}++;
}
sub even {
    my $self = shift;
    $self->{gamecount}++;
}
sub tostring {
    my $self = shift;
    return "[$self->{name}:$self->{gamecount} games, $self->{wincount} win, $self->{losecount} lose]";
}
1;
Main.pl
use strict;
use warnings;
use Player;
use WinningStrategy;
use ProbStrategy;

my @args = @ARGV;
if ($#ARGV != 1) {
    print "Usage: perl Main.pl randomseed1 randomseed2\n";
    print "Example: perl Main.pl 314 15\n";
    exit(0);
}
my $player1 = Player->new("Taro",WinningStrategy->new($args[0]));
my $player2 = Player->new("Hana",ProbStrategy->new($args[1]));
my ($nextHand1, $nextHand2);
for my $i (0..19) {
    $nextHand1 = $player1->nexthand();
    $nextHand2 = $player2->nexthand();
    if ($nextHand1->is_stronger_than($nextHand2)) {
        print "Winner ".$player1->tostring, "\n";
        $player1->win();
        $player2->lose();
    } 
    elsif ($nextHand2->is_stronger_than($nextHand1)) {
        print "Winner ".$player2->tostring, "\n";
        $player1->lose();
        $player2->win();
    } 
    else {
        print "Even...\n";
        $player1->even();
        $player2->even();
    }
}
print "Total result:\n";
print $player1->tostring, "\n";
print $player2->tostring, "\n";
実行結果
C:\Documents and Settings\dp\Strategy>perl Main.pl 314 15
Even...
Winner [Taro:1 games, 0 win, 0 lose]
Even...
Winner [Taro:3 games, 1 win, 0 lose]
Even...
Even...
Even...
Winner [Taro:7 games, 2 win, 0 lose]
Winner [Taro:8 games, 3 win, 0 lose]
Even...
Winner [Hana:10 games, 0 win, 4 lose]
Winner [Taro:11 games, 4 win, 1 lose]
Even...
Even...
Winner [Hana:14 games, 1 win, 5 lose]
Winner [Hana:15 games, 2 win, 5 lose]
Winner [Taro:16 games, 5 win, 3 lose]
Winner [Hana:17 games, 3 win, 6 lose]
Even...
Winner [Taro:19 games, 6 win, 4 lose]
Total result:
[Taro:20 games, 7 win, 4 lose]
[Hana:20 games, 4 win, 7 lose]

尚、本コンテンツは、結城先生の以下の本をかなり参考にしています。

Javaでデザインパターンを勉強したい人には、お勧めのご著書です!

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

2008-03-21 有難嬉悲しメモ(2008/03/21)

  • この3月で周りの人が居なくなるのを見て、今ちゃんと働けるのが、あらためて有り難かったです。
  • マオちゃん、派手にコケても、そこから挽回、素晴らしい根性と演技で、嬉しかったです。
  • 中野ちゃん、完璧な演技でも4位、素人目にはもっと上位だと思ったけど、少し悲しかったです。

2008-03-21 三帰依文とは

三帰依文とは、仏教徒なら毎日お経を上げる前に必ず唱える例の決まり文句です。

自ら仏に帰依したてまつる。まさに願わくは衆生とともに、

大道を体解して、無上意を発さん。

自ら法に帰依したてまつる。まさに願わくは衆生とともに、

深く経蔵に入って、智慧海のごとくならん。

自ら僧に帰依したてまつる。まさに願わくは衆生とともに、

大衆を統理して、一切無げならん。

実は、「まさに」からのくだりは、日本の江戸時代末期の仏教学者が、『法句経(ほっくきょう)』『華厳経(けごんきょう)』『法華経(ほけきょう)』の経文の一部を組み合わてまとめたものだそうです。


オリジナルは

自ら仏に帰依したてまつる。

自ら法に帰依したてまつる。

自ら僧に帰依したてまつる。

で、これを3回唱えるらしい。

この三帰依は、仏教初期(約2500年前)の時に教団へ入る不動の心構えとされていました。


とりあえず、前に書いた三帰依の記事2つ。


実は、毎日唱えているのだけれど、いいかげんに覚えていて、経本を見てないと正確に言えないのです。

だから、ネットに公開して覚えようとしています(自分)。

2008-03-21 SQL Server Management Studioでテーブルをスクリプト化する

SQL Server Management Studioで、すでにあるテーブルをスクリプト化するには、以下の手順です。

  • 概要タブへテーブル一覧を表示する。
  • スクリプト化したいテーブルを選択する。
  • 複数選択は、「Ctrlキーを押しながらクリック」する。
  • その選択状態で右クリックメニューを出す。
  • 「名前を付けてテーブルをスクリプト化」の「CREATE」の「ファイル」を指定する。
  • すると、「ファイルの選択」ダイアログが出る。
  • そこで、任意のフォルダを指定して、任意のファイル名で落とす。

2008-03-20 有難嬉悲しメモ(2008/03/20)

  • 今日は、長男の大学の卒業式、無事卒業ができて、有り難かったです。
  • マオちゃんと中野ちゃん、素晴らしい演技で、嬉しかったです。
  • キムヨナちゃん、転倒、悲しかったです。

実は、マオちゃんも好きだけど、キムヨナちゃんも好きなのです。

あと、キミーマイズナーの笑顔も大好き!

2008-03-20 唯我れ一人のみ。能く救護を為す。

法華経譬喩品に以下の一節(偈)があります。

今此の三界は。皆是れ我が有なり。其の中の衆生は。悉く吾が子なり。而も今此の処は。諸の患難多し。唯我れ一人のみ。能く救護を為す。

意訳:

この三界はみんなわたしのものだからです。

その中にいる衆生はすべてわたしの子だからです。

しかも、この三界にはもろもろの苦しみ悩みが満ち満ちているのです。

どうして、わたしがこの苦の世界に飛び込んでいって、わが子を救わずにいられましょう。

しかも、みんなを救うことのできるのは、たった一人、わたししかいないのですよ。


解説:

「みんなを救うことのできるのは、たった一人、わたししかいないのですよ。」のフレーズは、

普通の人が言えば、超傲慢ですが、釈尊が言ったということは、宇宙の真理ということです。

つまり、みんなを救えるのは、唯一、宇宙の真理だけであると・・・。


逆に云うと、宇宙の真理に沿って生きていけば、みんな救われるということです。

では、宇宙の真理とはなにか?


私が思うには、「正しい行いをしていくと幸せになる」です。

もうちょっと詳しく言うと

「正しい行いを続けていくと、善い縁が沢山できて、善い結果が生じ、世界が大調和し、みんなが幸せになる」

だから、毎日読誦する『唯我れ一人のみ。能く救護を為す。』の偈は、心に勇気を与えてくるのかなと思う次第です。


ちなみに、三界とは、凡夫が生死を繰り返しながら輪廻する世界を3つに分けたものです。

つまり、「この世」は、「三界」に含まれるのかな。

2008-03-20 よく使うショートカット

以下は、WINDOWS-XP系で私がよく使うショートカットです。

  • 「Altキー+ダブルクリック」 - フォルダアイコンやファイルアイコンの上で行うと、そのプロパティを表示します。
  • 「Winキー+Pauseキー」 - システムプロパティを表示します。
  • 「Ctrlキー+Shiftキー+Escキー」 - タスクマネジャーを起動します。
  • 「Winキー+eキー」 - エキスプローラを起動します。

もしかしたら、普通の人は、使わないかも・・・。ってことは、私は普通でない?

2008-03-19 有難嬉悲しメモ(2008/03/19)

  • 一昨年に亡くなったおじいさん(父)の置き土産が出てきて、有り難かったです。
  • 欲しいと思っていた本が、自然と手に入ったので、嬉しかったです。
  • 「はてな」の確認メールがinfoseekウェブメールだと受け取れない、悲しかったです。

追記:infoseekウェブメールは、なぜか一時間弱遅延した模様

2008-03-19 いろいろ思いつくことを書いてみる

「はてな」のブログIDは、メインでは一つとのこと。したがって、法華経ブログは閉鎖しました。


「はてな」のブログ開始の確認メールは、infoseekウェブメールだと受け取れない。Gmailなら大丈夫。

追記:infoseekウェブメールは、なぜか一時間弱遅延した模様。Gmailは、瞬時に着たのに。


今日、南阿佐ヶ谷に行って来た。今は、丸の内線は東京メトロ線というらしい。切符買う時、迷いました。


以下の3冊は、欲しい思っていたら、自然と手に入った。

  • 文字コード超研究(すぐわかるPerlの深沢さんの力作です。)
  • 3分間ネットワーク基礎講座(ネットで超有名な「3分Networking」の書籍版)
  • 白川静さんに学ぶ 漢字は怖い(ご存知、白川先生継承漢字系の本)

思いは実現する。は、本当だな!

2008-03-19 配列要素数と最大インデックス

配列要素数は、たとえば「@result」の場合、「$#result + 1」です。

配列のインデックスはゼロからなので、「$#result」は、あくまでも最大インデックスなのです。

ただし、空の配列「@result = ()」の場合の「$#result」は、「-1」を返します。

use strict;
use warnings;

my @result = ();
if ($#result == -1) {
    print "データが空です。\n";
    @result = ("aaa", "bbb", "ccc");
    print "最大インデックス = $#result \n";
}

実は、要素数と最大インデックスを勘違いして、はまることがあるのです(自戒)。

2008-03-18 フォルダを別ウィンドウで開く

WINDOWS系の普通のエクスプローラで、元フォルダ内のフォルダを「Ctrlキーを押しながらダブルクリック」で内容を別ウインドウに開いてくれます。

ただしこれは、元フォルダにフォルダツールバーがある時はダメで、ない時に有効なのです。

2008-03-18 願生(がんしょう)

法師品第十で以下のくだりがあります。

衆生を哀愍し願って此の間に生れ、広く妙法華経を演べ分別するなり。

衆生を救おうという願いと慈悲心によって生まれ変わってくること。これを願生(がんしょう)という。


人間とは、もともと人の意味でなく、人と人の間のことで世間という意味です。

そして、「此の間に生れ」とは、「世間に生まれる」ということであり、「人間に生ずる」ということです。

菩薩行とは、衆生を救おうと広く妙法華経を演べ分別すること。


ということで、人は、自覚はないのだけれど、菩薩行をするために願って生まれてくるらしい。

2008-03-17 いろいろ思いつくことを書いてみる

思い込みや勘違い、結構ありますね。

PC名を変更したのを忘れて、思い込みで昔の名前でSQL接続しようとして、小一時間悩む。

WEBサイトログインで、同じIDのDBのパスワードを入力していて、またまた小一時間・・・。


昨日、googleに繋がらなくなったけど、今、googleとyahooが両方長時間ダウンしたら、世界はどうなるのだろうか・・・。


円高でgoogle収入が目減り、ささやかなお小遣いなのに、悲しい。


花粉症が最高潮、さすがに耐えられず、去年あまった薬飲む。


道場宿直(3/14)、ご法号授与(3/15)、お彼岸会(3/16)と某教会三昧、やはり、つづくと疲れる。

その間、ネット三昧、こちらも疲れた。ネットは控えめに行きます。ってセリフ何回書いたかな。


最近、家族の様子がおかしい、そう、あの日が近付いている。丸8年・・・。

そろそろ桜色舞うごろで、ちゃいちゃんディー、今年もお待ちしています。


テキストだけで100Mバイト以上、一日3万アクセスオーバー、しかし、なぜか「はてなカウンタ」では1万ちょい。

ブログのアクセスが1千ちょい。一日10万アクセスのテキストサイトを目指しています。

2008-03-16 googleダウン!

今日は、アクセスが少ないと思ったら、googleがダウンしている模様!

世界のgoogleがダウンとは・・・大変なことですね


追記20:47

googleは、ダウンしていない模様。

DNSが原因らしい・・・。

原因としてNTTのDNSが正常ではない可能性がある模様

IPアドレスを直接していする事で正常に接続は可能との事。

http://72.14.207.104/

http://interestic.com/news/2008/03/16/google/504.html

ちなみに、DNSとは、Domain Name Systemのことで、今回の現象は、googleのアドレスをIPアドレスに変換ができないのが原因かも。

2008-03-16 PerlでBridgeパターン! (デザインパターン)

Perlでデザインパターン 第9弾(Bridgeパターン)

尚、諸事情により、第8弾のAbstractFactoryバターンは、パスします。(あとでできたらいいなぁ)


では、Bridgeパターンとは、機能のクラス階層と実装のクラス階層を橋渡し(Bridge)するパターンです。

機能のクラス階層とは、親クラスでの足りない機能を子クラスが付け足していくようなクラス階層です。

実装のクラス階層とは、親クラスでの抽象的なものを子クラスが具象的にしていくようなクラス階層です。


以下では、AbastractionクラスとRefinedAbastractionクラスが機能のクラス階層になっています。

そして、ImplementorクラスとConreteImplementorクラスが、実装のクラス階層になっています。

また、これはTemplateパターンにもなっていますね。


一般的なBuilderパターンのクラス図
     +---------------------+             +---------------------+  
     |  Abastraction       |o----------->|  Implementor        |  
     +---------------------+             +---------------------+  
     |  Impl               |             |                     |  
     +---------------------+             +---------------------+  
     |  method1            |             |  ImplMethodX        |  
     |  method2            |             |  ImplMethodY        |  
     |  method3            |             |                     |  
     +---------------------+             +---------------------+  
                #                                   #             
                |                                   |             
                |                                   |             
                |                                   |             
     +----------+----------+             +----------+----------+  
     | RefinedAbastraction |             | ConreteImplementor  |  
     +---------------------+             +---------------------+  
     |                     |             |                     |  
     +---------------------+             +---------------------+  
     | refinedMethodA      |             | ImplMethodX         |  
     | refinedMethodB      |             | ImplMethodY         |  
     +---------------------+             +---------------------+  
サンプル

一番下で紹介している本の『Java言語で学ぶデザインパターン入門』に書かれているBridgeパターンのJavaでのサンプルをPerlで書き換えてみました。



サンプルのクラス図
     +---------------------+             +---------------------+  
     |  Display            |o----------->|  DisplayImpl        |  
     +---------------------+             +---------------------+  
     |  Impl               |             |                     |  
     +---------------------+             +---------------------+  
     |  open               |             |  rawOpen            |  
     |  print              |             |  rawPrint           |  
     |  close              |             |  rawClose           |  
     |  display            |             |                     |  
     +---------------------+             +---------------------+  
                #                                   #             
                |                                   |             
                |                                   |             
                |                                   |             
     +----------+----------+             +----------+----------+  
     | CountDisplay        |             | ConreteImplementor  |  
     +---------------------+             +---------------------+  
     |                     |             |                     |  
     +---------------------+             +---------------------+  
     | multDisplay         |             | rawOpen             |  
     |                     |             | rawPrint            |  
     |                     |             | rawClose            |  
     +---------------------+             +---------------------+  
Display.pm
package Display;
use strict;
use warnings;

sub new {
    my $class = shift;
    my $self = {};
    $self->{impl} = shift;
    return bless $self, $class;
}
sub open {
    my $self = shift;
    $self->{impl}->rawOpen;
}
sub print {
    my $self = shift;
    $self->{impl}->rawPrint;
}
sub close {
    my $self = shift;
    $self->{impl}->rawClose;
}
sub display {
    my $self = shift;
    $self->open;
    $self->print;
    $self->close;
}
1;

CountDisplay.pm
package CountDisplay;
use strict;
use warnings;
use base 'Display';

sub multidisplay {
    my $self = shift;
    my $times = shift;
    $self->open;
    for my $i (0..$times-1) {
        $self->print;
    }
    $self->close;
}
1;

DisplayImpl.pm
package DisplayImpl;
use strict;
use warnings;

sub rawOpen { die "オーバーライド必須"; }
sub rawPrint { die "オーバーライド必須"; }
sub rawClose { die "オーバーライド必須"; }
1;

StringDisplayImpl.pm
package StringDisplayImpl;
use strict;
use warnings;
#use base 'DisplayImpl';

sub new {
    my $class = shift;
    my $self = {};
    $self->{string} = shift;
    $self->{width} = length($self->{string});
    return bless $self, $class;
}
sub rawOpen {
    my $self = shift;
    $self->printLine;
}
sub rawPrint {
    my $self = shift;
    print "|$self->{string}|\n";
}
sub rawClose {
    my $self = shift;
    $self->printLine;
}
sub printLine {
    my $self = shift;
    print "+";
    for my $i (0..$self->{width}-1) {
        print '-';
    }
    print "+\n";
}
1;

Main.pl
use strict;
use warnings;
use Display;
use CountDisplay;
use StringDisplayImpl;

my $d1 = Display->new(StringDisplayImpl->new("Hello, Japan."));
my $d2 = Display->new(StringDisplayImpl->new("Hello, World."));
my $d3 = CountDisplay->new(StringDisplayImpl->new("Hello, Universe."));

$d1->display();
$d2->display();
$d3->display();
$d3->multidisplay(5);

実行結果
C:\Documents and Settings\dp\Bridge>perl Main.pl
+-------------+
|Hello, Japan.|
+-------------+
+-------------+
|Hello, World.|
+-------------+
+----------------+
|Hello, Universe.|
+----------------+
+----------------+
|Hello, Universe.|
|Hello, Universe.|
|Hello, Universe.|
|Hello, Universe.|
|Hello, Universe.|
+----------------+

尚、本コンテンツは、結城先生の以下の本をかなり参考にしています。

Javaでデザインパターンを勉強したい人には、お勧めのご著書です!

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

2008-03-15 ネット中毒症

朝起きると、いきなりPCを立ち上げて、ネット巡回・・・。

いかん、ネット中毒症の再発や〜


とりあえす、スタック(ストックかな)してあった、全ネタ放出!

あとは、仕掛かり中のデザインパターンネタの2つだけになった。


やはり、ネットより、家庭が大事、そう、あなたも家庭ですよ!

2008-03-15 さまざまな Perl 診断メッセージ

warningsプラグマ等を使っていてメッセージが出たら、以下のページに日本語訳がありますよ。

2008-03-15 Perlでの定数宣言

Perlでもconstantプラグマを使うと定数宣言ができます。

use strict;
use warnings;

use constant HANDVALUE_GUU => 0;
use constant HANDVALUE_CHO => '1';
use constant HANDVALUE_PAA => 1 + 1;
use constant HANDVALUE1 => [0, 1, 2];
use constant HANDVALUE2 => {GUU => '0', CHO => '1', PAA => '2'};
print HANDVALUE_GUU, "\n";
print HANDVALUE_CHO * 10, "\n";
print HANDVALUE_PAA, "\n";
print HANDVALUE1->[1], "\n";
print HANDVALUE2->{PAA}, "\n";

2008-03-15 Perlでのコマンドライン引数取得が変

以下は、かなり特殊なケースなんだけど・・・。

まず、BEGINでshiftすると、なぜかコマンドラインの引数が取得できる。

しかし、そのおかげで、@ARGVはshift後の値になって、shiftした分コマンドライン引数が減るのです。

use strict;
use warnings;

my @args = @ARGV;
print @args, "\n";
BEGIN {
  my $a = shift;
  print $a,"\n";
}
D:\>hiki.pl aaa bbb ccc
aaa
bbbccc

ご指摘を受けたので、ネットで調べてみました。

配列の最初の要素を削除し、その値を返します。その際、各要素はひとつずつインデックスの小さい方へずれ、要素数が1減ります。配列に要素がなければ、未定義値を返します。

ARRAYを省略すると、関数の中では@_が対象になります。それ以外の場所では、@ARGVが対象となります。@_は関数への引数をセットした特殊変数、@ARGVはコマンドラインからの引数をセットした特殊変数です。

http://www.rfs.jp/sb/perl/05/shift.html

と言うことでした。

2008-03-15 Perlでの3項演算子

3項演算子での「入れ子的な使い方」や「switch文的な使い方」のメモ

use strict;
use warnings;
my ($aaa, $bbb, $ans);
   
   $aaa = "AAA";
   $bbb = "CCC";

   # 一般的な使い方
   $ans =  $aaa eq "AAA" ? 1 : 2;
   print $ans, "\n";

   #入れ子的な使い方
   $ans =  $aaa eq "AAA" ? $bbb eq "BBB" ? 1
                                         : 2
                         : $bbb eq "CCC" ? 3
                                         : 4;
    print $ans, "\n";

   #switch文的な使い方
   $ans = $aaa eq "AAA" ?  1 + 1:
          $aaa eq "BBB" ?  2 + 2:
          $aaa eq "CCC" ?  3 + 3:
                           4 + 4;
   print $ans, "\n";

2008-03-15 IIS5において、CGI起動されたプログラムの中から発行したコマンドの標準出力が受け取れない!

インターネットユーザの権限はデフォルトでは、Guestsグループです。

このGuestsでは、CGI起動されたプログラムの中から発行したコマンドの標準出力が受け取れないのです。

その「発行したコマンド」とcmd.exeのACL(Access Control List)を緩和しても受け取れません。

ちなみに、Administratorsなら問題なく受け取れます。


CGI起動されたプログラムの中から発行したコマンドの標準出力を受け取るサンプル
open(IN,"ls -l |");
@cmd = <IN>; # Guestsだとlsコマンドの標準出力が読み込めない
close(IN);

で、回避策ですが、私のレベルでは思いつきません。

なので、「発行したコマンド」と同等の機能のプログラムを作ってしまいました。

あと、イントラなら、そして、許されるなら、インターネットユーザをAdministratorsにしてしまうとか・・・。

2008-03-15 半角カタカナ入力メモ

半角カタカナ入力モードにするには?

半角英数字入力入力状態(普通の状態)で「ctrl」+「shift」+「カタカナひらがなキー」を同時に押す。

元に戻すには、もう一度「ctrl」+「shift」+「カタカナひらがなキー」を同時に押す。


まぁ、普通、半角カタカナ入力などしないと思いますが、なにかの拍子で、半角カタカナ入力モードになっていたら、

「ctrl」+「shift」+「カタカナひらがなキー」で半角英数字入力モードに戻すことができるわけです。

2008-03-15 リモートデスクトップで「Ctrl」+「Alt」+「Del」をするには

WINDOWS-XPのリモートデスクトップ上で「Ctrl」+「Alt」+「Del」すると、リモートでなくローカルの「Ctrl」+「Alt」+「Del」になってしまいます。

これをリモートデスクトップ上での「Ctrl」+「Alt」+「Del」を行いたい場合には、「Ctrl」+「Alt」+「End」とします。

しかし、ノートPCでは「End」は、普通、「Fn」+「End]なので「Ctrl」+「Alt」+「Fn」+「End」と4つのキーを同時に押すことになるのです。

2008-03-15 < と > の括弧は、なんという?

  • [ と ] は、大括弧です。
  • { と } は、中括弧です。
  • ( と ) は、小括弧です。

では、 < と > は、何括弧でしょうか?

答え:山括弧というらしい。

2008-03-15 拡張子と起動プログラムを関連付ける

たとえば、拡張子が「.txt」のファイルの場合、クリックすると普通メモ帳が起動します。

これを他のエディタに変えたい場合、以下の手順で変更ができます。

  1. 普通のエクスプローラのツールをクリックし、「フォルダオプション」選択する。
  2. 「ファイルの種類」タブを選択する。
  3. 拡張子を選択し、「変更」ボタンをクリックする。
  4. 「ファイルを開くプログラムを選択」ダイアログが表示される。
  5. その中の変更したいプログラムを選択して「OK」ボタンをクリックする。

上記は、とりあえず、WINDOWS2000とXPで行うことができます。

2008-03-15 DOSのdirコマンドでのサブフォルダも含めたファイル検索

まず、コマンドプロンプトを立ち上げます。

そして、以下のようにdirコマンドでサブフォルダも含めたファイル検索を行います。


dirの/sオプションが肝です。

C:\Documents and Settings\dp>dir *.pl /s

Cドライブ直下から指定すると、ドライブ全体を比較的高速にファイルサーチが出来ます。

2008-03-15 Microsoft SQL Server 2005でデータベースを作成するには

  1. オブジェクトエクスプローラのデータベースを右クリックする。
  2. 「新しいデータベース」をクリックする。
  3. データベース名を任意に入力する。
  4. OKボタンをクリックする。
  5. SQL Server Management Studioのファイルメニューから任意のCREATE TABLEが定義されている「xxcreate.sql」等を読み込む。
  6. 作成したデータベースを指定して、「xxcreate.sql」等を実行ボタンクリックしてCREATE TABLEする。

2008-03-15 IIS5(Internet Information Server)でのPerlのCGI設定

  1. 「スタートボタン」をクリックする。
  2. その中の「コントロールパネル」をクリックする。
  3. 名前一覧の「管理ツール」をダブルクリックする。
  4. 名前一覧の「インターネット インフォメーション サービス」をダブルクリックする。
  5. 「ローカル コンピュータ」の「既定の Web サイト」を右クリックし、「新規作成」の「仮想ディレクトリ」をクリックする。
  6. 仮想ディレクトリの作成ウィザードが起動され、「次へ」をクリックする。
  7. エイリアスへ任意(半角英数字)に入力し、「次へ」をクリックする。
  8. ディレクトリへCGIのあるフォルダパス名を入力し、「次へ」をクリックする。
  9. アクセス許可へ「CGIなどを実行する」にチェックし、「次へ」で作成ウィザード完了。
  10. つぎに、今作成したWebサイトを右クリックし、プロパティをクリックする。
  11. 仮想ディレクトリタブの構成ボタンをクリックする。
  12. 追加ボタンをクリックすると「アプリケーションの拡張マッピングの追加/編集」が表示される。
  13. 「実行ファイル」へperl.exeの実行パスと引数を設定する。(以下のサンプル参照)
  14. サンプル「D:\Perl\perl.exe “%s” %s」。
  15. 拡張子は「.cgi」とし、動詞は「すべての動詞」とする。
  16. 仮想ディレクトリタブに戻って、「アプリケーション保護」を「高(分離プロセス)」とする。

2008-03-14 謎の宿直

今日は、某教会の宿直当番、行ってきます・・・。

2008-03-14 JavaScriptにおけるプロトタイプオブジェクト指向

いまさらだけど、良くまとまっているのでリンクメモしときます。

2008-03-14 高原穿鑿の譬え

法華経法師品第十に「高原穿鑿(せんしゃく)の譬え」というくだりがあります。

薬王。譬如有人。渇乏須水。於彼高原。穿鑿求之。猶見乾土。知水尚遠。施功不已。

転見湿土。遂漸至泥。其心決定。知水必近。菩薩亦復如是。

水のない高原に井戸を掘るのは、現実の苦しみから逃れようという救いをもとめる努力の譬えです。

掘り初めのうちは、絶望感を感じますが、しだいに水気をたっぷり含んだ土にぶつかるのです。

この土こそ、真実の教え「法華経」なのです。

その「法華経」を得て、さらに掘りつづけていくことが、「菩薩行」にほかなりません。

2008-03-13 有難嬉悲しメモ(2008/03/13)

  • 今日は、結城先生からコメントを頂けて、有り難かったです。
  • 今日は、結城先生からコメントを頂けて、凄く嬉しかったです。
  • 今日は、結城先生からコメントを頂けて、しかし一言だったので悲しかったです(うそです。本当に嬉しかったです!)

2008-03-13 Perlでビット処理を配列で行う。

Perlでのビット処理には、ビット演算子やシフト演算子がありますが、機能不足や制限がいろいろあって、思うように処理ができません(機能不足でなく、おまえのスキル不足だろって声が…)。


そこで、ビットの世界をやめ、Perlの得意な配列の世界で処理を行い、再度、ビットの世界へ戻してあげるということを思いつきました。

sub bitByarray {
    my ($str) = @_;   

    # ビットイメージを配列に代入
    my @wk = split(//,(unpack "B*", $str));

    # 本来ビットで処理するところを配列処理する。

    # 配列データをビットイメージに戻す
    return pack("B*", (join "", @wk));
}

実はこれ、結城先生の「数学ガール」のフィボナッチ数列と母関数のくだりを読んでいて、思いつきました。

2008-03-12 CHEMISTR - You Go Your Way

D

2008-03-12 有難嬉悲しメモ(2008/03/12)

  • 今日は、特に有り難かったことは、無かったです。
  • 今日は、特に嬉しかったことは、無かったです。
  • 今日は、不思議な現象に振り回された、やることなすこと思い通りにいかない、悲しかったです。

とある問題を解決するために、別ルートから攻めると、そこで新たな問題が・・・、そんなことがあたかも永遠(ちょっとオーバー)とつづくような思い・・・。


2008-03-12 サタンの声への対策

サタンの声の特徴は、「嘘八百にほんのちょっぴりの本当をまぜる」こと。詐欺師と同じだ。ほんのちょっぴりの本当があると、ついうっかり他の嘘八百まで本当だと思ってしまう。それからもう1つの特徴は「他人と無理やり比較する」ことだ。たくみに焦らせ、他の人間と不健全な競争をさせる。

サタンの声への対策
  • 嘘八百にほんのちょっぴりの本当をまぜる
  • 他人と無理やり比較する

最近、詐欺が蔓延しています。特に今春卒業して社会人になる人は、気をつけるようにね。

2008-03-12 WINDOWS系イベントログを理解する

イベントログ解説ページ

イベントログ採取コマンド

このeventquery.vbsは、結構多機能、HELPオプション「/?」で起動するとサンプルもちゃんとあって親切ですね。

ちなみに、Windows2000と2008には、eventquery.vbsは見当たらなかったです。

WindowsXPと2003用みたいです。

そうそう、 イベントログをいろいろ条件つけてCSVに落とすこともできますよ。このコマンドは。

2008-03-11 有難嬉悲しメモ(2008/03/11)

  • 2005年の6月から、はてなでブログをしている。長い間続けられて、凄く有り難かったです。
  • ここのところ、一日のブログアクセス数が1000カウントを越えるようになってきた、正直嬉しかったです。
  • でも、その割には、コメント・トラックバックが少なくて、少し悲しかったです。

ちなみに、「燈明日記」の元は1999年1月から続いています。長い・・・。

2008-03-11 Perlでパイプオープン

Perlでは、ファイルアクセスと同様な感じでパイプにアクセスができます。

ここで云うパイプとは、標準入出力のデータが流れ込むパイプです。

つまり、標準入出力のデータをあたかもファイルからのデータとして扱えるのです。

  • パイプ出力用でオープン open (OUT, "| コマンド")
  • パイプ入力用でオープン open (IN, "コマンド |")
コマンドからパイプ入力用にオープン
open(IN,"ls -l |");
@cmd = <IN>;
close(IN);

foreach $cmd (@cmd) {
     print "$cmd \n";
} 
<解説>
ls -l (カレントディレクトリ内のファイル名を取得) というコマンド
を実行し、その結果を配列@cmdに格納し、表示する。  


コマンドへパイプ出力用にオープン
open(OUT,"| /usr/sbin/sendmail");
print OUT "HELO \n";
close(OUT); 

<解説>
sendmailへ HELOコマンドを出力。  
http://www.kent-web.com/perl/chap6.html

2008-03-10 白い吐息 - CHEMISTRY

いつ聴いても、すばらしい!

D

2008-03-10 有難嬉悲しメモ(2008/03/10)

  • 生きていることは、すごく有り難いこですね。
  • 生きていることは、すごく嬉しいことでもありますね。
  • でも、生きていることは、すごく悲しいことでもある。

2008-03-10 JavaScriptのvar宣言について

JavaScriptの変数はvar宣言したり、しなかったりしますが、意味があるのでしょうか?

Perlでのmy宣言したレキシカル変数はブロック単位に有効ですが、JavaScriptでのvar宣言は関数単位(内部関数含む)に有効です。

ただし、グローバルスコープ(Perlでのmainパッケージにあたる)でvar宣言された変数と宣言しない変数はともにグローバル変数になる。

また、スコープ・チェーンといって下位関数で使用された変数が上位関数で宣言されているかを調べ、グローバルスコープまできても宣言されていない場合は、変数は未定義とみなされ、グローバル変数として扱われる。

このような性質からJavaScriptの変数のvar宣言は、明示的に宣言したほうが良いと思います。


参考リンク:Ajax時代のJavaScriptプログラミング再入門

http://www.atmarkit.co.jp/fdotnet/ajaxjs/index/index.html

2008-03-09 有難嬉悲しメモ(2008/03/09)

  • 今日一日、デザインパターンの勉強ができて、有り難かったです。
  • 今日一日、洗濯以外、自分の趣味(上記)に時間を費やせて、嬉しかったです。
  • Qちゃん、「夢はきっとかなう」でなくて、悲しかったです。でも、まだわからない・・・頑張れ高橋!

2008-03-09 空の奇跡 - CHEMISTRY

D

2008-03-09 PerlでBuilderパターン! (デザインパターン)

Perlでデザインパターン 第7弾(Builderパターン)

Builderパターンとは、Director(監督)の管理下、Builder(親方)が作成項目だけ指示して、ConcreteBuilder(大工) に Building(家) インスタンスを生成させるデザインパターンです。

また、BuilderとConcreteBuilderの関係は、Templateパターンになっていますね。


一般的なBuilderパターンのクラス図
                    関連                   集約
  +---------------+      +---------------+      +---------------+
  | Client        |----->| Director      |o---->| Builder       |
  +---------------+      +---------------+      +---------------+
  |               |      | builder       |      |               |
  +---------------+      +---------------+      +---------------+
  |               |      | construct     |      | buildPart1    |
  |               |      |               |      | buildPart2    |
  |               |      |               |      | buildPart3    |
  +-------+-------+      +---------------+      +---------------+
          |                                             #        
          |                                             | 継承   
          |                                             |        
          |                                     +-------+-------+
          +------------------------------------>|ConcreteBuilder|
                                                +---------------+
                                                |               |
                                                +---------------+
                                                |buildPart1     |
                                                |buildPart2     |
                                                |buildPart3     |
                                                |getResult      |
                                                +---------------+

サンプル

一番下で紹介している本の『Java言語で学ぶデザインパターン入門』に書かれているBuilderパターンのJavaでのサンプルをPerlで書き換えてみました。


サンプルのクラス図
  +---------------+     +---------------+     +--------------+
  | Main          |---->| Director      |o--->| Builder      |
  +---------------+     +---------------+     +--------------+
  |               |     | builder       |     |              |
  +---------------+     +---------------+     +--------------+
  |               |     | construct     |     | makeTitle    |
  |               |     |               |     | makeString   |
  |               |     |               |     | makeItems    |
  |               |     |               |     | close        |
  +-------+-------+     +---------------+     +--------------+
          |                                           #        
          |                                           | 継承       
          |                                +----------+----------+
          |                                |                     |
          |                        +-------+-------+     +-------+-------+
          |                        | TextBuilder   |     | HTMLBuilder   |
          |                        +---------------+     +---------------+
          |                        | buffer        |     | filename      |
          |                        +---------------+     | writer        |
          |                        | makeTitle     |     +---------------+
          |                        | makeString    |     | makeTitle     |
          |                        | makeItems     |     | makeString    |
          |                        | close         |     | makeItems     |
          |                        | getResult     |     | close         |
          |                        |               |     | getResult     |
          |                        +---------------+     +---------------+
          |                                ^                     ^
          |                                |                     |
          +--------------------------------+---------------------+
Builder.pm
package Builder;
use strict;
use warnings;

sub makeTitle { die "オーバーライド必須"; }
sub makeString { die "オーバーライド必須"; }
sub makeItems { die "オーバーライド必須"; }
sub close { die "オーバーライド必須"; }
1;

Director.pm
package Director;
use strict;
use warnings;

sub new {
    my $class = shift;
    my $self = {};
    $self->{builder} = shift;
    return bless $self, $class;
}
sub construct {
    my $self = shift;
    $self->{builder}->makeTitle('Greeting');
    $self->{builder}->makeString('朝から昼にかけて');
    $self->{builder}->makeItems([
        'おはようございます。',
        'こんにちは。',
    ]);
    $self->{builder}->makeString('夜に');
    $self->{builder}->makeItems([
        'こんばんは。',
        'おやすみなさい。',
        'さようなら。',
    ]);
    return $self->{builder}->close;
}
1;

TextBuilder.pm

package TextBuilder;
use strict;
use warnings;
use base 'Builder';

sub new {
    my $class = shift;
    my $self = {};
    $self->{buffer} = '';
    return bless $self, $class;
}
sub makeTitle {
    my $self = shift;
    my $title = shift;
    $self->{buffer} .= "===========================\n";
    $self->{buffer} .= "『$title』\n\n";
}
sub makeString {
    my $self = shift;
    my $str = shift;
    $self->{buffer} .= "■$str\n\n";
}
sub makeItems {
    my $self = shift;
    my $items = shift;
    for my $i (0..$#{$items}) {
        $self->{buffer} .= " ・$items->[$i]\n";
    }
    $self->{buffer} .= "\n";
}
sub close {
    my $self = shift;
    $self->{buffer} .= "==========================\n";
}
sub getResult {
    my $self = shift;
    return $self->{buffer};
}
1;

HTMLBuilder.pm
package HTMLBuilder;
use strict;
use warnings;
use FileHandle;
use base 'Builder';

sub new {
    my $class = shift;
    my $self = {};
    $self->{filename} = '';
    $self->{writer} = '';
    return bless $self, $class;
}
sub makeTitle {
    my $self = shift;
    my $title = shift;
    $self->{filename} = $title.".html";
    $self->{writer} = FileHandle->new("> $self->{filename}");
    $self->{writer}->print("<html><head><title>$title</title></head><body>\n<h1>$title</h1>\n");
}
sub makeString {
    my $self = shift;
    my $str = shift;
    $self->{writer}->print("<p>$str</p>\n");
}
sub makeItems {
    my $self = shift;
    my $items = shift;
    $self->{writer}->print("<ul>\n");
    for my $i (0..$#{$items}) {
        $self->{writer}->print("<li>$items->[$i]</li>\n");
    }
    $self->{writer}->print("</ul>\n");
}
sub close {
    my $self = shift;
    $self->{writer}->print("</body></html>\n");
    $self->{writer}->close;
}
sub getResult {
    my $self = shift;
    return $self->{filename};
}
1;

Main.pl
use strict;
use warnings;
use Director;
use TextBuilder;
use HTMLBuilder;

my ($args) = @ARGV;
$args = "" if (!defined($args)); 
if ($args eq 'plain') {
    my $TextBuilder = TextBuilder->new;
    my $director = Director->new($TextBuilder);
    $director->construct;
    my $result = $TextBuilder->getResult;
    print $result;
}
elsif ($args eq 'html') {
    my $HTMLBuilder = HTMLBuilder->new;
    my $director = Director->new($HTMLBuilder);
    $director->construct;
    my $filename = $HTMLBuilder->getResult;
    print "$filenameが作成されました。\n";
}
else {
    &usage;
}
sub usage {
    print "Usage: perl Main.pl plain    プレーンテキストで文書作成\n";
    print "Usage: perl Main.pl html     HTMLファイル文書作成\n";
}

実行結果
C:\Documents and Settings\dp\Builder>perl Main.pl plain
===========================
『Greeting』

■朝から昼にかけて

 ・おはようございます。
 ・こんにちは。

■夜に

 ・こんばんは。
 ・おやすみなさい。
 ・さようなら。

==========================
C:\Documents and Settings\dp\Builder>perl Main.pl html
Greeting.htmlが作成されました。

C:\Documents and Settings\dp\Builder>type Greeting.html
<html><head><title>Greeting</title></head><body>
<h1>Greeting</h1>
<p>朝から昼にかけて</p>
<ul>
<li>おはようございます。</li>
<li>こんにちは。</li>
</ul>
<p>夜に</p>
<ul>
<li>こんばんは。</li>
<li>おやすみなさい。</li>
<li>さようなら。</li>
</ul>
</body></html>

尚、本コンテンツは、結城先生の以下の本をかなり参考にしています。

Javaでデザインパターンを勉強したい人には、お勧めのご著書です!

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

2008-03-08 中島美嘉 - SAKURA〜花霞〜

また、さくらの季節がきますね。もう、まる8年経ちました・・・・・・。

D

2008-03-08 有難嬉悲しメモ(2008/03/08)

  • 昨日、「岡田准一」って書いたら、その検索だけで50以上もアクセスがありました。嬉しかったです。しかし、岡田准一って何者?
  • 今日、ガス欠寸前の車で、ママを整体の先生のところに送っていったら、途中ガソリンスタンドが全くありません。いつガソリンがなくなるのかヒヤヒヤしながら運転をしていました。悲しかったです。しかし、いつの間にか、ガソリンスタンドの数、すごく減っていませんか?
  • 今日は、特に有り難かったことは、ありませんでした。

2008-03-08 PerlでPrototypeパターン! (デザインパターン)

Perlでデザインパターン 第6弾(Prototypeパターン)

Prototypeパターンとは、クラスからインスタンスを生成するのではなく、インスタンスから別のインスタンスを作り出すデザインパターンです。


一般的なPrototypeパターンのクラス図
                              関連
    +---------------------+            +---------------------+
    |  Client             |------------>| prototype           |
    +---------------------+             +---------------------+
    |                     |             |                     |
    +---------------------+             +---------------------+
    |                     |             |  createClone        |
    +---------------------+             +---------------------+
                                                   #            
                                                   | 継承           
                                                   | 
                                        +----------+----------+ 
                                        | Concreteprottype    | 
                                        +---------------------+ 
                                        |                     | 
                                        +---------------------+ 
                                        | createClone         | 
                                        |                     | 
                                        +---------------------+ 


サンプル

一番下で紹介している本の『Java言語で学ぶデザインパターン入門』に書かれているPrototypeパターンのJavaでのサンプルをPerlで書き換えてみました。


サンプルのクラス図
    +---------------------+             +---------------------+
    | Manager             |------------>| Product             |
    +---------------------+             +---------------------+
    |  showcase           |             |                     |
    +---------------------+             +---------------------+
    |  register           |             |  clone              |
    |  create             |             |  createClone        |
    |                     |             |  use                |
    +---------------------+             +---------------------+
                                                   #            
                                                   |            
                                +------------------+-------------------+ 
                                |                                      | 
                     +----------+----------+                +----------+----------+ 
                     | MessageBox          |                | UnderlinePen        | 
                     +---------------------+                +---------------------+ 
                     | ulchar              |                | decochar            | 
                     +---------------------+                +---------------------+ 
                     | createClone         |                | createClone         | 
                     | use                 |                | use                 | 
                     |                     |                |                     | 
                     +---------------------+                +---------------------+ 

Product.pm
package Product;
use strict;
use warnings;

sub clone {
    my $dmy = shift;
    my $self = shift;
    my $class = shift;
    return bless $self, $class;
}
sub createClone { die "オーバーライド必須"; }
sub use { die "オーバーライド必須"; }

Manager.pm
package Manager;
use strict;
use warnings;

sub new {
    my $class = shift;
    my $self = {};
    $self->{showcase} = {};
    return bless $self, $class;
}
sub register {
    my $self = shift;
    my ($name, $proto) = @_;
    $self->{showcase}->{$name} = $proto;
}
sub create {
    my $self = shift;
    my $protoname = shift;
    my $p = $self->{showcase}->{$protoname};
    return $p->createClone;
}
1;

静的にソースを見ていると、どこにも宣言していないcreateCloneがエラーにならないのかと思いますが、$pには、動的にProductクラスのオブジェクトが渡されるので、大丈夫のようです。


MessageBox.pm
package MessageBox;
use strict;
use warnings;
use base 'Product';

sub new {
    my $class = shift;
    my $self = {};
    $self->{decochar} = shift;
    return bless $self, $class;
}
sub use {
    my $self = shift;
    my $s = shift;
    for (my $i = 0; $i < length($s) + 4; $i++) {
        print $self->{decochar};
    }
    print "\n";
    print "$self->{decochar} $s $self->{decochar}\n";
    for (my $i = 0; $i < length($s) + 4; $i++) {
        print $self->{decochar};
    }
    print "\n";
}
sub createClone {
    my $self = shift;
    my $class = ref($self);
    return Product->clone({%{$self}}, $class);
}
1;

ref($self)でクラス名を取得し、%{$self}でオブジェクトをデリファレンスしてクラス変数を取得しています。


UnderlinePen.pm
package UnderlinePen;
use strict;
use warnings;
use base 'Product';

sub new {
    my $class = shift;
    my $self = {};
    $self->{ulchar} = shift;
    return bless $self, $class;
}
sub use {
    my $self = shift;
    my $s = shift;
    print "\"$s\"\n";
    for (my $i = 0; $i < length($s) + 2; $i++) {
        print $self->{ulchar};
    }
    print "\n";
}
sub createClone {
    my $self = shift;
    my $class = ref($self);
    return Product->clone({%{$self}}, $class);
}
1;

Main.pl
use strict;
use warnings;
use Manager;
use UnderlinePen;
use MessageBox;

# 準備
my $manager = Manager->new;
my $upen = UnderlinePen->new('~');
my $mbox = MessageBox->new('*');
my $sbox = MessageBox->new('/');
$manager->register("strong message", $upen);
$manager->register("warning box", $mbox);
$manager->register("slash box", $sbox);

# 生成
my $p1 = $manager->create("strong message");
$p1->use("Hello, world.");
my $p2 = $manager->create("warning box");
$p2->use("Hello, world.");
my $p3 = $manager->create("slash box");
$p3->use("Hello, world.");
実行結果
C:\Documents and Settings\dp\prototype>perl main.pl
"Hello, world."
~~~~~~~~~~~~~~~
*****************
* Hello, world. *
*****************
/////////////////
/ Hello, world. /
/////////////////

尚、本コンテンツは、結城先生の以下の本をかなり参考にしています。

Javaでデザインパターンを勉強したい人には、お勧めのご著書です!

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

2008-03-07 数学ガールの曲

数学ガールの本も素晴らしかったけど、この曲も素晴らしい!


D


私は、テトラ派なんだけど、ミルカさんがテトラちゃんの椅子を蹴るシーンが許せない、テトラちゃんがかわいそう・・・。

でも、やはりミルカさんもスキや!

数学ガール

数学ガール

高校生ぐらいの時に出会いたかった、この本と・・・。


そうそう、『数学ガール』が月刊誌「コミックフラッパー」で連載されたようです。

2008-03-07 有難嬉悲しメモ(2008/03/07)

  • 今日は特に有り難かったことは、なかったです。
  • ウィークディが終わって休みに入ったね! いつもよりなぜか嬉しかったです。
  • 電車のペプシコーラNEXの広告で、イメージキャラが遠くから見て「福山雅治・沢尻エリカ」だと信じて疑わなかったが、今日、近くで見たら「岡田准一・香里奈」だった。目がかなり悪くなったな・・・悲しかったです。

2008-03-07 SQL Server使用時のトランザクションログの圧縮方法

以前に「MS-SQL Server2000でのトランザクションログ切捨てについて」を書きましたが、具体的な記事を見つけたのでメモしときます。


「HDDの容量不足を解消!トランザクションログの圧縮方法」

書式:

backup log DB名 with no_log

dbcc shrinkfile(トランザクションログファイル名)

※このコマンドはクエリアナライザ上で実行します。

※トランザクションログファイル名は、Enterprise Managerを開き、

 該当DBを右Click→「プロパティ」→「トランザクション ログ」タブを

 選択すると「ファイル名」という欄があります。

 これを「トランザクションログファイル名」としています。

実行例:

DB名:BBS

トランザクションログファイル名:BBS_Log

--------------------------------------------------------------------------------

backup log BBS with no_log

dbcc shrinkfile(BBS_Log)

http://www.techbank.jp/sqlserver/#a2

尚、上記コマンド実行後は、それまでのロールバック等が出来なくなります。自己責任でお願いします。

2008-03-06 有難嬉悲しメモ(2008/03/06)

  • 3月中に転勤や転職する人が多い中、4月以降も働けることになりました。有り難かったです。
  • Perlでのビット制御の処理が上手く行って、嬉しかったです。
  • このところ、また、ママの体の具合が良くなくて、悲しかったです。

2008-03-06 Windows PowerShellについてのメモ

PowerShellメモ
  • Windows PowerShellは、MicrosoftによるCMD.EXEのアップグレード版である。
  • また、Perlのようなスクリプト言語でもある。
  • WindowsXP/2003/Vista上で無償ダウンロードができる。
  • Windows Server 2008以降のOSではデフォルトで組み込まれているらしい。
  • .NET Frameworkで構成されるため、コマンドプロンプトで全ての.NETクラスライブラリが利用可能である。
  • また、WMI,ADSI,ADO等のCOMオブジェクトも利用可能である。
  • 従来のパッチファイルやVBスクリプトと同じく、WINDOWSシステム寄りの制御やOS情報参照等の機能が充実。
  • しかし、あくまでもシェルであり、スクリプト実行もできるが、プログラム言語でない。
  • また、複雑なデータ構造持つ業務AP等には、たぶん使用できない。
  • コンソールを出さずにスクリプトの実行ができない。
  • 構造体やクラス継承がない。
  • 多次元配列は、あるにはあるが、扱いにくい。
  • WindowsXPもちろんVistaにも標準でバンドルされていない。
  • Windows2000のバンドルは、サポートされていない。

参考リンク

PowerShellに未来は、あるのだろうか?

2008-03-05 有難嬉悲しメモ(2008/03/05)

  • 今日は、昼行われた某教団創立70周年式典のビデオを見る夜の集いに行けて、有り難かったです。
  • 今日は、特に嬉しいことはなかったです。
  • IISの権限は、Guestsなので、なにかと思う通りに動かない、悲しかったです。許されるならAdministratorsになりたい。

2008-03-05 某教団創立70周年

今日は、某教団で創立70周年記念式典がありました。

その某教団の経典は「法華経」です。

実は、はっきり言うと「法華経」は難信難解です。

その難信難解の「法華経」のエッセンスを以下の「3つの心構え」と「3つの実践」で分かりやすく一般人までに落としてくれたのが某教団の方々なのです。


3つの心構え
  • 自分が変われば相手が変わる。
  • まずは、人さま。
  • すべては、自分。 
かつて書いた3つの心構えの記事(ひとつたりないけど・・・)

http://chaichan.lolipop.jp/chai/hokke_essay.htm#d34281

http://chaichan.lolipop.jp/chai/hokke_essay.htm#d3B021


3つの実践
  • 朝は、元気良く「おはよう!」と挨拶。
  • 呼ばれたら、元気良く「ハイ!」と返事。
  • 靴をぬいだら、人知れず靴をそろえる。
かつて書いた3つの実践の記事

特に「3つの実践」は、現会長先生が自ら3年間毎日実践し、これこそ現代の法華経実践とだ確信したものだそうです。

私も同感だと思うこの頃です。

2008-03-05 SQLでのSELECT文のLIKE検索ワイルドカード

ワイルドカードには「%(0文字以外の任意の文字列にマッチ)」と「_(1文字の任意文字にマッチ)」がある。

尚、ワイルドカードを一般文字にしたい場合は「\%」「\_」のように「\]でエスケープする。


サンプル
SELECT * FROM UserTable WHERE Name LIKE 'K%'

2008-03-04 「みょう牛(ご)の尾を愛するが如し」とは?

法華経譬喩品第二に以下のくだりが出てきます。

みょう牛(ご)の尾を愛するが如し

みょう牛(ご)というのは、ヤクのことで、毛の長い(特に尾が)種類の牛です。

この牛は、この尾を大変大切にしていますが、それが元で殺されたそうです。(人間はその尾をとるために殺す)


ということで、上記は、自分にとってはたいした役に立たぬものに心をとらわれ、かえってそのもののために不幸を招くことの譬えで用いられました。


2008-03-04 有難嬉悲しメモ(2008/03/04)

  • ネットでいろいろ教えて頂けて、有り難かったです。(しかし、自分でも調べないと)
  • 昨日の一年前のヤツは、バグではなくて、嬉しかったです。(しかし、運用部隊は大変や(謎))
  • とあることでPC環境を作り直すことに・・・、あれもこれも動かなくなって、悲しかったです。

2008-03-04 VB2005でスリープするには?

一秒間(1000ミリ秒)スリープする

System.Threading.Thread.Sleep(1000)

2008-03-03 終日竟夜(ひねもすよもすがら)とは?

法華経譬喩品第三に以下のくだりが出てきます。

世尊、我昔よりこのかた、終日竟夜毎に自らを剋責しき。

終日竟夜は、「ひねもすよもすがら」と読み、「昼も夜も常に」という意味だそうです。


2008-03-03 有難嬉悲しメモ(2008/03/03)

  • ママの体の具合が、ここのところまた少し良くなっているので、有り難かったです。
  • WINDOWS-XPへのSP2のインストールが上手くいって、嬉しかったです。延べ約1日掛かったよ。
  • 一年前にリリースしたヤツのバグが出たよ。今更忘れた、どうしよう。悲しかったです。

2008-03-03 配列&ハッシュのアクセス方法いろいろ

配列やハッシュの要素へのアクセス方法は、大きく分けて3通りがあります。

  • インデックスでのアクセス
  • スライスでのアクセス
  • 配列をリファレンスでのアクセス

しかし、1以外は、ワーニングで、やはりインデックスでアクセスするのが常道のようです。


ちなみに、2は、以下のワーニングが出ます。

Scalar value @a[0] better written as $a[0]


またちなみに、3は、以下のワーニングが出ます。

Using an array as a reference is deprecated.

(D deprecated) @foo->[23] や @$ref->[99] の形で、配列をリファレンスとして使おうとしました。 5.6.1 以前のバージョンの perl ではこの構文を許していましたが、そうするべきではありません。これは今では非推奨であり、将来のバージョンでは削除されるでしょう。

http://d.hatena.ne.jp/fbis/20080304/1204621962
一次元
use strict;
use warnings;

my @a = (10, 20, 30);
# 以下は、すべて「10」と表示される
print $a[0], "\n";           # インデックスで@aの0番目要素をアクセス
print @a[0], "\n";           # スライスで@aの0番目要素をアクセス
print @a->[0], "\n";         # 配列をリファレンスで@aの0番目要素をアクセス

my %h = ('AA' => 100,
         'BB' => 200,
         'CC' => 300);
# 以下は、すべて「200」と表示される
print $h{BB}, "\n";          # インデックスで%hのBBキー要素をアクセス
print @h{BB}, "\n";          # スライスで%hのBBキー要素をアクセス
print %h->{BB}, "\n";        # 配列をリファレンスで%hのBBキー要素をアクセス?

2次元
use strict;
use warnings;

my @aa = ([ qw(aa ab ac) ],
          [ qw(ba bb bc) ],
          [ qw(ca cb cc) ]);
# 以下は、すべて「ab」と表示される
print ${$aa[0]}[1], "\n";    # インデックスで@aaの[0][1]要素をアクセス
print $aa[0]->[1], "\n";     # インデックスで@aaの[0][1]要素をアクセス
print $aa[0][1], "\n";       # インデックスで@aaの[0][1]要素をアクセス
print ${@aa[0]}[1], "\n";    # スライスで@aaの[0][1]要素をアクセス
print @aa[0]->[1], "\n";     # スライスで@aaの[0][1]要素をアクセス
print @aa->[0]->[1], "\n";   # 配列をリファレンスで@aaの[0][1]要素をアクセス
print @aa->[0][1], "\n";     # 配列をリファレンスで@aaの[0][1]要素をアクセス

my %hh = ('AA' => [ qw(aa ab ac) ],
          'BB' => [ qw(ba bb bc) ],
          'CC' => [ qw(ca cb cc) ]);
# 以下は、すべて「bb」と表示される
print ${$hh{BB}}[1], "\n";   # インデックスで%hhの{BB}[1]要素をアクセス
print $hh{BB}->[1], "\n";    # インデックスで%hhの{BB}[1]要素をアクセス
print $hh{BB}[1], "\n";      # インデックスで%hhの{BB}[1]要素をアクセス
print ${@hh{BB}}[1], "\n";   # スライスで%hhの{BB}[1]要素をアクセス
print @hh{BB}->[1], "\n";    # スライスで%hhの{BB}[1]要素をアクセス
print %hh->{BB}->[1], "\n";  # 配列をリファレンスでhhの{BB}[1]要素をアクセス
print %hh->{BB}[1], "\n";    # 配列をリファレンスでhhの{BB}[1]要素をアクセス

2008-03-02 有難嬉悲しメモ(2008/03/02)

  • とある法座に参加させて頂いて、改めて法華経の大切さを教えていただきました。有り難かったです。
  • 釈提桓因と有難嬉悲しメモページがリリースできて、嬉しかったです。
  • 今日は特に、悲しかったことはなかったです。

法華経系のコンテンツにも力を入れたいと思う今日このごろです。

2008-03-02 釈提桓因(しゃくだいかんいん)とは

法華経序品第ーに以下のくだりがでてきます。

爾の時に釈提桓因、其の眷属二万の天子と倶なり。

釈提桓因とは、帝釈天の別名で、娑婆世界のうえにある天上界の主とされていました。

その帝釈天の眷属には、以下の天子がいました。

  • 名月天子(月の神)
  • 普香天子(星の神)
  • 宝光天子(日の神)
  • 持国天(四大天王の一人:東方を護る)
  • 多聞天(四大天王の一人:北方を護る。別名:毘沙門天ともいう)
  • 増長天(四大天王の一人:南方を護る)
  • 広目天(四大天王の一人:西方を護る)

実は、これらの神々は、仏教ではなくバラモン教(古代インドの宗教)の神なのです。

釈迦は、これらの神々を排除することなく、仏法護持の神々としたのです。

2008-03-02 有難嬉悲しメモとは!?

『有難嬉悲しメモ(ありがたうれしかなしメモ)』とは、その日に起こった以下の3つのことを綴っています。

  • その日で一番有り難かったこと。
  • その日で一番嬉しかったこと。
  • その日で一番悲しかったこと。

基本的には、文の最後を『有り難かったです。』『嬉しかったです。』『悲しかったです。』で締め括ります。


実は、この「有難嬉悲しメモ」は、ブログ更新の切り札になるのです。

ブログ更新は、新しいくて面白いネタ探しが一番大変です。特にごく一般の人にはなおさらです。

そこで、その日に起こった『有り難かったこと』『嬉しかったこと』『悲しかったこと』を一つ書くのです。

これなら、ごく一般の人にもできますね。

一日の終わりに、その日に起こった上記3つのことを思うのです。そしてそれをブログに書くだけです。


また実は、これらを書くことで、鬱が軽くなるのです。鬱に効くのです!

以下の本に詳しく書いてあります。是非読んでみてください。

人間の関係

人間の関係

今の日本を生き抜いて行くことは、「いつリストラさるのか・・・、病気なったとき家族は大丈夫か・・・、老後は生活ができるのか・・・、子供は自立できるのか・・・」などなど不安との戦いとほぼイコールと言って、過言ではありません。そして、そんなことを思っていると鬱になるのです。

そんな鬱になってしまった時は、『有難嬉悲しメモ』で乗り越えて参りましょう!

2008-03-02 VB2005で実行ファイル名を取得する

VB2005で実行ファイル名を取得するには、いくつかの方法があります。


プロセスから
value = Process.GetCurrentProcess.ProcessName
MsgBox(value)
リフレクションから
value = System.Reflection.Assembly.GetExecutingAssembly().Location
MsgBox(System.IO.Path.GetFileNameWithoutExtension(value))
実行パスから
value = Application.ExecutablePath
MsgBox(System.IO.Path.GetFileNameWithoutExtension(value))
コマンドラインアーギュメントから
'コマンドラインを配列で取得する
Dim cmds() As String
cmds = System.Environment.GetCommandLineArgs()
Dim cmd As String
For Each cmd In cmds
    'Console.WriteLine(cmd)
     MsgBox(System.IO.Path.GetFileNameWithoutExtension(cmd))
Next
コマンドラインから
コマンドライン指定の文字列
value = System.Environment.CommandLine
MsgBox(System.IO.Path.GetFileNameWithoutExtension(Replace(value, Chr(34), "")))

2008-03-01 有難嬉悲しメモ(2008/03/01)

  • 今日は、一日、サイトメンテナンス(2月分更新)が出来て、有り難かったです。
  • Perlでのサイトメンテナンス(テキスト一括修正)は、VBScriptと違っていろいろとらくちんで、嬉しかったです。
  • サイトメンテナンスに夢中になって、洗濯物を取り込むのを忘れた、ママから怒られた、悲しかったです。

2008-03-01 Webページからダウンロードファイル格納ローカルパス(レジストリ)を変更する

IE6でサーバーからファイルをダウンロードする時、どこにダウンロードするかのダイアログが表示されます。

そのダイアログには、デフォルトでダウンロードファイル格納ローカルパスがすでに設定されています。

このデフォルトを変更したい場合は、以下の方法で可能です。

まずは、IEのセキュリティ設定で、一箇所を有効にします。

  • 『インターネットオプションのセキュリティタブ』内の『レベルのカスタマイズ』クリックする。
  • 『セキュリティ設定』ダイアログが表示される。その中の以下を有効にする。
  • 『スクリプトを実行しても安全だとマークしていないActiveXコントロールの初期化とスクリプトの実行』

しかし、以下のサンプルは、レジストリ操作なので、操作を誤ると、Windowsが正常に動作しなくなったりします。自己責任で行ってください。

サンプルソース
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>Webページからダウンロードパス(レジストリ)を変更する</title>
</head>
<body>
<script language="VBScript">
chg_download_file_path()
Function chg_download_file_path()
    If msgbox("ダウンロードパスをD:\tmpに変更します。よろしいいですか?",1) = 1 then
       Set WshShell=CreateObject("WScript.Shell")
       msgbox("変更前 -> " & WshShell.RegRead("HKCU\Software\Microsoft\Internet Explorer\Download Directory"))
       WshShell.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Download Directory","D:\tmp", "REG_SZ"
       msgbox("変更後 -> " & WshShell.RegRead("HKCU\Software\Microsoft\Internet Explorer\Download Directory"))
       Set WshShell = Nothing
    End If
End Function
</script>
</body>
</html>
留意点

上記設定は、レジストリ操作なのでインターネットではお奨めしません。イントラネットでご利用ください。