ChaichanPapa-World !

燈明日記(2009/06

◆ インデックス

◆ 2009年6月

2009-06-30 Perlの謎(その6):foreach文がfor文に

結論から言うと、Perlでは、for文とforeach文は同じ物なのです。

というか、for文のforは、foreachの省略形とのことです(ホントかな)。

と同じとはいいながら、for文とforeach文ではイメージが違います。


◆for文の基本
for (my $i = 1; $i < 10; $i++) {
    処理
}

◆foreach文の基本
foreach my $scalar (@array) {
    処理
}

◆for文とforeach文の可換

冒頭で述べたように、for文とforeach文は同じで可換なのです。

foreach (my $i = 1; $i < 10; $i++) {
    処理
}
for my $scalar (@array) {
    処理
}

で結論は、イメージを重んじる人はイメージ通りに、簡素にしたい人はfor文オンリーに、たぶん、foreach文オンリーは無しでしょう・・・たぶん。

2009-06-29 Perlの謎(その5):構造体がないデータ構造

普通の言語、たとえば、C言語とかVB等では、データ構造を定義できる構造体があります。

もっと昔だと、構造体がなく、すべて配列で処理する言語もありました(昔のコボルとかベーシック)。


で、perlのデータ構造なのですが、ご存知の通り、スカラー、配列、ハッシュの3種類しかありません。

そう、構造体がないのです。


では、他言語で構造体処理のクセを身に付けてしまった人は、どうすればよいのでしょうか・・・。

実は、構造体は、ハッシュで表現ができるのです。

構造体の配列も、同じく、ハッシュの配列で表現ができるのです。


以下にC言語の構造体とPerlのハッシュ、そして、構造体配列とハッシュの配列のサンプルを書いてみました。

たしかに、C言語の構造体は、Perlのハッシュで表現ができていますね!


◆サンプル:C言語の構造体
struct db_login {
    char svnm[7];
    char svnm2[9];
    char loginid[31];
    char password[31];
    char db_string[45];
}; 
struct db_login shisha={"svr00X", "X支社", "id", "passwd", "svr00Xs"];

printf("hostname=%s\n",  &shisha.svnm[0]);
printf("hostname2=%s\n", &shisha.svnm2[0]);
printf("loginid=%s\n",   &shisha.loginid[0]);
printf("password=%s\n",  &shisha.password[0]);
printf("db_string=%s\n", &shisha.db_string[0]);

◆サンプル:Perlのハッシュ
my %shisha = (
    svnm      => 'svr00X',
    svnm2     => 'X支社',
    loginid   => 'id',
    password  => 'passwd',
    db_string => 'svr00Xs'
);

printf("hostname=%s\n",  $shisha{svnm});
printf("hostname2=%s\n", $shisha{svnm2});
printf("loginid=%s\n",   $shisha{loginid});
printf("password=%s\n",  $shisha{password});
printf("db_string=%s\n", $shisha{db_string});

◆サンプル:C言語の構造体配列
#define SHISHA_CNT 3
struct db_login {
    char svnm[7];
    char svnm2[9];
    char loginid[31];
    char password[31];
    char db_string[45];
}; 
struct db_login shishas[SHISHA_CNT]={
        "svr001", "A支社", "id", "passwd", "svr001s",
        "svr002", "B支社", "id", "passwd", "svr002s",
        "svr003", "C支社", "id", "passwd", "svr003s",
};
int i;
for (i =0; i < SHISHA_CNT; i++) {
    printf("hostname=%s\n",  &shisha[i].svnm[0]);
    printf("hostname2=%s\n", &shisha[i].svnm2[0]);
    printf("loginid=%s\n",   &shisha[i].loginid[0]);
    printf("password=%s\n",  &shisha[i].password[0]);
    printf("db_string=%s\n", &shisha[i].db_string[0]);
}

◆Perlのハッシュの配列
my @shisha = ({
                svnm      => 'svr001',
                svnm2     => 'A支社',
                loginid   => 'id',
                password  => 'passwd',
                db_string => 'svr001s'
              },
              {
                svnm      => 'svr002',
                svnm2     => 'B支社',
                loginid   => 'id',
                password  => 'passwd',
                db_string => 'svr002s'
              },
              {
                svnm      => 'svr003',
                svnm3     => 'C支社',
                loginid   => 'id',
                password  => 'passwd',
                db_string => 'svr003s'
              },

);

for (my $i = 0; $i < @shisha; $i++) {
    printf("hostname=%s\n",  $shisha[$i]{svnm});
    printf("hostname2=%s\n", $shisha[$i]{svnm2});
    printf("loginid=%s\n",   $shisha[$i]{loginid});
    printf("password=%s\n",  $shisha[$i]{password});
    printf("db_string=%s\n", $shisha[$i]{db_string});
}

Perlでは、リファレンスと無名配列と無名ハッシュが理解できると、データ構造は自由自在なのです!

たとえば

◆関連リンク

2009-06-28 Perlの謎(その4):コンテキストで意味が変わる関数

今回は、他言語経験者にとって、Perlでの最大の謎『コンテキスト』です。


まず、Perlでは、スカラー変数と配列変数とハッシュ変数があります。


スカラー変数には、文字列や数値、リファレンス等のスカラー値を代入します。

配列変数やハッシュ変数には、リスト値を一気に代入します。


Perlでは、スカラー変数にスカラー値を代入することをスカラーコンテキストといいます。

また、配列変数とハッシュ変数にリスト値を一気に代入することをリストコンテキストといいます。


つぎに、関数は、引数を入力*1として結果をリターン値として返します。

このリターン値が、代入先の変数のスカラー変数か配列変数またはハッシュ変数かによって、スカラー値を返したり、リスト値を返したりするのです。


つまり、コンテキストによって同じ関数でもリターン値が変わるのです。

まぁ、すべての関数がそうなるわけではないのですが、リスト値を処理する関数は大体そうなります。


◆サンプル(localtime.pl)
use strict;
use warnings;

my $localtime = localtime(time); # スカラーコンテキスト
print "$localtime \n";
my @localtime = localtime(time); # リストコンテキスト
print "@localtime \n";

#以下もリストコンテキスト
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); 
local ($, , $\) = (' ', "\n");
print($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst); 

◆サンプル実行結果
C:\perltest>perl localtime.pl
Sun Jun 28 07:31:27 2009
27 31 7 28 5 109 0 178 0
27 31 7 28 5 109 0 178 0

◆補足1

実は、関数だけでなく、以下のような単純な代入でもコンテキストがあります。

use strict;
use warnings;

my $localtime = localtime(time); # スカラーコンテキスト
my @localtime = localtime(time); # リストコンテキスト

my $x = @localtime;        # スカラーコンテキスト
print $x, "\n";            # 配列の要素数(9)が表示

my @x = $localtime;        # リストコンテキスト
print @x, "\n";            # スペースをデリミタにしたリストで取り込み、配列にて表示(Sun Jun 28 07:42:39 2009)

◆補足2

コンテキストでリターン値が変わる主な関数達

こうやって見ると、リストコンテキストではリスト値を返す便利な関数が、スカラーコンテキストでは、その要素数を返すケースが多いようです。


◆補足3

上記は、スカラーコンテキストとリストコンテキストの2つでしたが、実は、まだ違う種類のコンテキストがあります。

大きく分けて、スカラーコンテキストとリストコンテキストとボイドコンテキストの3つあり、さらにスカラーコンテキストにはブール値、文字列、数値、不定の4つがあります。

*1:もちろん、出力のときもある

2009-06-27 今日の独り言

すみません。今日も独り言です。


三鷹七中(三男)のバスケットの試合が府中四中の体育館であり、ママと一緒に見にいきました。

対戦チームは、二回戦が府中七中で、三回戦が浅間中でした。

結果は、両方とも大差で三鷹七中が勝ちました。


スランプで練習不足の三男もスタメンから出場して、大丈夫かと心配しましたが、まぁまぁやっていました。

とにかく、これが中学最後の大会なので、チームの仲間の中に居られるのを見れるだけで、有り難かったです。


本人、前回(5月上旬)の都大会の一回戦で、なにかあったのか、まぁそれまでにも伏線があったのだと思うのだけれど、心が折れてしまったみたいです。


その一回戦では勝ったものの、なぜか落ち込んでいて、そして二回戦の時は、家で寝ていました。

それから一ヶ月、部活はもちろんのこと、学校もほとんど休んで、ひきこもり状態に・・・。


チームの仲間が毎朝迎えに来てくれるようになって、徐々に復活していったのかもしれません。

しかし、まだ結構、あやぶい。今日もやっとの思いで、試合に行かせました。


明日、もう一戦勝てば3回連続(新人・春・夏)で都大会出場が決まります。

いやー、試合はとにかく、試合場にチームメイトと一緒に居てくれるだけで、有り難いと感じます。


そう、その場に居てくれるだけで、有り難いのだよ・・・パパは・・・。

一度折れた心を立て直すのが、いかに大変で苦しいことか・・・親としては神仏に祈るだけです。

2009-06-26 今日の独り言

今日は、他言語経験者にとって、Perl最大の謎『コンテキスト』をまとめようと思っていたのだけれど・・・。

会社から家に帰ってきて、ビールを飲んだら、眠くなって、しかし、眠りはしなかったけどテレビを見ながら寛いでしまいました(^o^)


NHKで東大応援部のドキュメントを見ていたら、その一所懸命さに、なぜか込み上げて来て涙が溢れてきた。

最近、特に涙もろい・・・。


次期主将候補の2年生が高校時代に柔道部で挫折し、途中でやめたと言う後悔の念のトラウマを応援部でリベンジする姿が、やけに心を打たれた。


また、金スマでは、私は全く知らないのだけれど、映画では世界的に有名な女監督(川瀬直美)のドキュメントを見ました。

この監督さん、凄く自然で、いい感じの女性で・・・なんか好きになりました。ただそれだけです。すみません。


明日は、三男(中3)の中学最後のバスケット大会での最初の試合があります。

実は、前回の都大会1回戦から、まさに昨日までスランプだった三男・・・。

どうなるか、心配でもあり、楽しみでもある。


練習をここ一ヶ月間ほとんどしていないので、試合には出れないと思うけど、ベンチには入れそう。

最後の大会を仲間達と一緒に過ごせそうなので、本当によかった・・・でも予断はできない。

明日は、朝、叩き起こしても試合に行かせないと!


いつも、朝迎えに来てくれる仲間達、そして、そのお母さん方、いつも気にかけて頂いて、ありがとうございます。

三男は、なんとか、のりこえて、試合には行けそうです。

2009-06-25 今日の独り言

今度、出勤時間をWEBから入力することになったのだけれど・・・。


朝、PCが立ち上がるのに約1時間掛かる(マジで)。

とにかく、セキュリティ系と監視系のソフトがひと通り終わらないと、普通のAPが満足に動かない。

その時間が約1時間、WEBからの入力だと毎日1時間の遅刻になってしまう(悲)。


でも本当のことを言うと、IEのアイコンが出た瞬間にIEを起動すれば20分でなんとか入力ができそう。

なので、今20分早く出勤しているので、ぎりぎりなので、もうちょっと早く出ないとならない・・・かも。


話は変わって、最近、時間が経つのが凄く短く感じられます。


16時ごろは、ちょっと長く感じられるのだけれど、全体としては短いです。

あっという間に、時間が過ぎて、歳ばかりとってしまいますね。


いつまで、プログラマをやっていられるのか心配になってきた・・・って、もう50歳台半ばです。

でも、まだまだ未熟なんですよ。ネットを巡回(特にメールマガジンのPerlクイズ)していると凄いプログラマが沢山いて、自分が虚しくなりますね。


いままで、なにをやってきたんだって・・・。

しかし、家族のためにプログラム書いて頑張るしかないんです・・・これが。


ということで、落ち込みぎみなのですが、今日の独り言は終わりです。

2009-06-25 Perlの謎(その3):subのデフォルトのリターン値

Perlでのサブルーチンは、実は関数とイコールです。


そもそも、サブルーチンと関数の違いは、リターン値を返すか返さないかの違いです。

しかし、Perlでは、サブルーチンでもリターン値を返すことができるので、事実上、関数とイコールなのです。


Perlのサブルーチンはsubキーワードから書き始めます。

リターン値はreturnキーワードで記述します。


しかし、returnキーワードをあまり見かけないのです。

またしかし、それでもリターン値が返って来ているみたいなのです。


そう、実は、returnキーワードは省略可能なのです。

Perlでは、サブルーチンの最後に評価した式の値が、returnキーワードがあってもなくても、リターン値になるのです。


use strict;
use warnings;

sub closure {
    my $value = shift;
    sub { $value++ };   # return sub { $value++ }; と等価
}

Perlをやり始めると、subだし、returnキーワードはないケースが多いし、本当にリターン値が返っているのだろうか・・・。

なんて、悩む時期があるのです。


とにかく、サブルーチンの最後に評価した式の値が、returnキーワードがあってもなくても、リターン値になるのです!

2009-06-24 PageRank(グーグルページランク)ダウン

今日6月24日にGoogleのPageRank更新があった模様です。

本『燈明日記』は、4から3にダウンしてしまいました(泣)。


ここ一年間で、4->3->4->3とGoogleダンスしています。

まぁ、ブログで商売しているわけではなく、あくまで趣味でブログしているわけで・・・PageRankなんて関係ない!


しかし、アクセス数は確実に増えてきてますね。

PVを見ていると、一日に2000から2500はカウント数が増えますね。


またしかし、はてブ数やRSS購読数はまだまだで、feedmeterやBlogScouterは、ここ一年、全くの足踏み状態ですね。


とにかく、今は、そんなこと気にせず、ブログライフを楽しむことに重点をおいていきますYo!


だって、グーグルページランクのためにブログ更新をしているわけでなく、自分とアクセスして頂いたあなたのために頑張って楽しんでいるのだから・・・。

2009-06-24 Perl謎シリーズ

えーと、これからのアップ予定です。

そのx系は、(その2)までで、つぎは(その3)の予定です。

番外編系は、随時です。


◆そのx系

◆番外編系

そのx系は、他言語経験者のPerl初心者が対象です。

実は、新人教育や私の開発したシステム引き継ぎ者用も兼ねてます。


番外編系は、ネットで気になったPerlソースを気ままに解説していくシリーズです。

しかし、Perlって奥が深い・・・いつになったら、Perlを知り尽くすことができるのだろうか・・・。

2009-06-23 Perlの謎(番外編3):『コンスタントと変換演算子のoverload』とは

先日紹介した、結城先生のPerlクイズの以下の回答が、さっぱり分からなかったので調べてみました。

use overload '""' => sub{${+shift}*$_*2}, '0+'=>sub{${+shift}};
BEGIN {
    overload::constant (integer => sub{my $a=shift; bless \$a, 'main'})
}
http://archive.mag2.com/0000015670/20030208004000000.html

そもそも、クイズの問題は、以下の通りです。

puzzle.plという1つのスクリプトの最後の部分を示します。

このスクリプトの(省略)と書かれている部分を補って、

Figに示す実行結果とぴったり同じになるようにしてください。

◆List:前の部分が省略されたスクリプトpuzzle.pl

(省略)

$puzzle = 0;
print "$puzzle, " for (1..10);
print "\n";
$puzzle = 1;
print "$puzzle, " for (1..10);
print "\n";
$puzzle = 2;
print "$puzzle, " for (1..10);
print "\n";
$puzzle = 3;
print "$puzzle, " for (1..10);
print "\n";

◆Fig:実行結果

0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

2, 4, 6, 8, 10, 12, 14, 16, 18, 20,

4, 8, 12, 16, 20, 24, 28, 32, 36, 40,

6, 12, 18, 24, 30, 36, 42, 48, 54, 60,

http://archive.mag2.com/0000015670/20030208004000000.html

では、ネットやラクダ本で私が調べたことを書きますね。

(あまり理解できていないので間違っている可能性大です)


◆コンスタントのoverload
BEGIN {
    overload::constant (integer => sub{my $a=shift; bless \$a, 'main'})
}

これは、BEGINブロックなのでコンパイル時に実行されます。

まず、コンスタント(今回は整数値)のオーバーロードをしています。

ロジックで使用している整数値すべてをオブジェクトに変換しています。

つまり、ロジック上の整数値が見つかる毎にsubが起動され、整数値は第1引数に設定されるので、それをshiftで取得し、blessしてオブジェクトに変換しています。

なぜ、オブジェクトに変換しているかと言うと、オーバーロードは、オブジェクトに対して行われるからです。

つまり、$puzzleへ代入する整数値やforの範囲演算子の1や10をオブジェクトにしてオーバーロードを可能にしています。


◆『0+』変換演算子のoverload
use overload '""' => sub{${+shift}*$_*2}, '0+'=>sub{${+shift}};

『'0+'=>sub{${+shift}}』は、オブジェクトを数値コンテキストで評価した場合にsubが起動されます。

今回の場合は、forの範囲演算子の1と10の場合です。

『${+shift}』は、起動されたsubの第1引数に数値が渡され、それをshiftで取得し、デリファレンスし、数値としてリターン値にしています。尚、数値は範囲演算子の1と10です。

尚、単項演算子の『+』は、shiftを関数として認識させるためです。『+』がないとスカラー変数 $shift になってしまう。

つまり、今回は、オブジェクトの1と10を数値の1と10へ変換しています(BEGINブロック処理の逆)。


◆『""』変換演算子のoverload

『'""' => sub{${+shift}*$_*2}』は、"$puzzle, "のようにオブジェクトが格納されている$puzzleを文字列中で評価した場合にsubが起動されます。

『'0+'=>sub{${+shift}}』で、forの範囲演算子の1と10がオブジェクトから整数値になっているので、for文が実行されて、$_には、1から10が順次格納されます。


『${+shift}*$_*2』のshiftには、$puzzleの格納オブジェクトに対応した数値が返り、数値に対応したリファレンスをデリファレンスしてから、$_と2をかけてます。

つまり、$puzzle=0の時は0で、$puzzle=1の時は1が、『${+shift}』の返り値になります。


ということで、sub{${+shift}*$_*2}は、$puzzle=1の場合、以下のようになるわけです。


1*1*2 = 2

1*2*2 = 4

:

1*9*2 = 18

1*10*2 = 20


以上です。


◆オーバーロード(overload)とは

ちなみに、オーバーロードとは、OOP用語では「多重定義」のことで、普通、関数やメソッドを多重定義しますが、もともとOOPでないPerlでは、演算子のオーバーロードしかできません。


また、演算子のオーバーロードは、オーバーライドではないので唯一でなく、見た目は同じ演算子でも、オペランドのオブジェクトで演算子が定義された場合によって複数の意味を持ちます(多態性:ポリモルフィズム)。


尚、上記今回のオーバーロードは、演算子といっても特殊な変換演算子("", 0+)とコンスタントのオーバーロードでした。


たぶん、今の実力では、おかしなことを書いている可能性が大です。

将来的には、気が付き次第、修正変更してきますね!

2009-06-22 Perlの謎(その2):『特殊変数 $_』とは

まず、以下のソースを見てください。

use strict;
use warnings;

while (<DATA>) {
    if (/^h.*e$/) {
        print;   # hogeを表示する
    }
}
__END__
hoge
foo

Perl初心者や他言語から来た人が・・・実はかつての自分が、このソースを見た時に???のオンパレードでした。

これを以下のようにすると・・・。

use strict;
use warnings;

while ($_ = <DATA>) {
    if ($_ =~ /^h.*e$/) {
        print $_;   # hogeを表示する
    }
}
__END__
hoge
foo

かなり分かりやすくなりますね。

このように、Perlでは、デフォルトで『$_』という特殊変数を用いるようになっているのです。

そして、『$_』は省略できるのです。

そして、ちょっとベテランになると、省略の方が良くなるのです。


ちなみに、ソースを簡単に解説しときます。

2009-06-20 アイシテル〜海容〜

f:id:chaichanPaPa:20090605223302j:image:right

最終回が終わってしまいましたね。

久々に心から感動した作品でした。


出演者の俳優さんたちも熱演で、子役の2人も凄くよかったです。

しかし、いい作品の割には、あまり話題になっていないような気がしまた。

観そこなった人、是非、再放送とか総集編とかをご覧下さい。見なきゃ絶対損ですよ!


で、私は、トモヤパパの山本太郎氏が、かつての自分にかぶって、感情移入してしまいました。

当初、仕事第一で家庭を省みず、子供のことはママに任せ切り、そして事件後、良いパパに目覚めていく・・・。


キヨタンパパの佐野史郎氏も子供を殺されたという怒りを、殺してしまったという十字架を背負った加害者家族へ向けてもしかたがないと悟っていく・・・。

『犯人の少年なんていない。犯人は心の中にいる』というセリフが・・・。


しかし、2人の母親役の女優:稲森いずみさんと板谷由夏さんは、すごい美人さんで、こんなお母さんいたら羨ましい(^^;


ちなみに、〜海容〜とは、海のような広さの寛大な心で、人の過失を許すこと。

まさに、本ドラマを言い表していたのですね・・・。


D


バックに流れる曲は『Forgiving』というのだけれど、この曲を聴くだけで自然と涙が溢れてくる・・・。

ちなみに、『Forgiving』の意味は、寛大なとか、そう海容の意味が含まれる。

キヨタンママの板谷さんは、このドラマで、泣いて1.5キロやせたそうですよ。


本ブログでの他の『アイシテル』関連です。是非、あわせて読み下さい!

2009-06-20 読むだけですっきりわかる日本史 (宝島社文庫)

この本、タイトル通りで、すごくフレンドリーで、分かりやすかったです!


私は、戦国時代と幕末は得意なのですが、他の時代はよく知りません。

前から、戦国時代の前(室町、鎌倉、平安、奈良・・・)と幕末以降(明治後期、大正、昭和初期)が知りたいと思っていたので、大変良い本にめぐりあえました。


まだ1回しか読んでいませんが、自分の中で咀嚼して、『経済ノート』に続き、新コンテンツ『歴史ノート』としてまとめていきたと思いました。

では、『歴史ノート』、期待しないでお待ちください!

(しかし、今、Perlにはまっているので、いつになるか全くの未定です)

読むだけですっきりわかる日本史 (宝島社文庫)

読むだけですっきりわかる日本史 (宝島社文庫)

2009-06-20 Perlの謎(番外編2):__END__と__DATA__の違い

今回も当初予定していなかったので、番外編としました。

__END__と__DATA__は、ほぼ同じ機能で、以下のように__END__や__DATA__以降の行をあたかもテキストファイルのようにハンドルDATAによって読み込むことができます。

use strict;
use warnings;

while (<DATA>) {
    print;    # hogeとfooを表示する
}
#以下は __DATA__ でもほぼ同じ
__END__
hoge
foo

基本的には、__DATA__はすべてのモジュールで使用可能で、__END__はメインモジュールでのみ使用可能で・・・。

しかし、自分でいろいろテストしていたのですが、微妙にわからなくて・・・。


結局、ググル先生に登場してもらいました。

DATA__ トークンは、コレより以降にプログラムがない(データブロックの開始位置を示す)モノです。

既にでているようにこの部分のデータは、DATA ハンドルで普通のファイルのように(プログラム内にファイルが格納されているかのように)アクセスできます。

特殊な用法として、普通のファイルのようにstat(DATA)を使うことで、プログラムのサイズや最終更新日付を得ることができます。

同様のものに__END__がありますが、これは、メインパッケージの __DATA__ を表します。

また、自パッケージだけでなく、他パッケージの__DATA__ の部分は

パッケージ名::DATA

で読み込むことができます。

(通常はmain::DATA のmain が省略されている)

__END__ を使用した場合には、他パッケージからは読込できません。

繰り返し読み込む場合には、

$pos=tell(DATA);

しておいて

seek(DATA,$pos,0);

で読込位置をリセットします。

(seek を使うと、__END__ 以前の部分(プログラム)も読み込める)

また、CPAN モジュールの Inline::Files を使うと、複数のファイルを埋め込むことができるようになります。

http://okwave.jp/qa1939458.html

ということで、メインモジュールでのみ使用する場合は、__END__がいいようです。メインロジックの終わりも明示できるしね。


あっ、そうそう。

キーワード__END__や__DATA__で検索していたら、結城先生の以下のページがヒットしました。

ちょっと見たら、めちゃくちゃ面白い!

しかし、最後の『overload』と『use Inline C』の使ったヤツは、今のレベルだとまったく歯が立たない・・・自分はまだまだですね。

2009-06-19 さらば・・・ヒラヤマさん

今日は歓送迎会・・・、いや歓迎会がありました。


本ブログにも何回か登場して頂いたヒラヤマさんが今日で職場を離れることになりました。

今日は、ヒラヤマさんの代わりの人も一緒に、歓送迎会をやるつもりでしたが・・・ヒラヤマさん、最後の最後に体調不良で・・・。

代わりの人だけの歓迎会になってしまいました。


歓迎会は結構盛り上がったのですが・・・しかし、ヒラヤマさんが居れば10倍盛り上がったかもしれません。

いつも、ヒラヤマさんからいじりられているMさんとYくんが、のびのびと逆襲していたのが印象的でした。


ヒラヤマさんは、ネットワークやサーバー周りのプロで、いろいろなことを教えていただきました。

たぶん、自社の方から引き抜かれてたのだと思います。

出来る人には、この大不況も関係ないみたいです。


ということで、ヒラヤマさん、お疲れ様でした。

新しい職場でも、そのスーパーエンジニア振りを発揮して活躍するのを願っています。

私も、負けないように、また、大不況にも負けないように頑張ってみますね・・・。

では、ごきげんよう!

2009-06-18 オーバーペース

f:id:chaichanPaPa:20090605223302j:image:right

ここのところ、会社から帰って、ずーっとパソコンに向かっています。

『Perlノート』のコンテンツを作るために、いろいろテストや文書等を練っているわけです。


さすがに、ここ数日、オーバーペース・・・。

また、家庭不和になる可能性が否定できない状態になりつつありますので、スローペースに戻しますね(^o^)


そういえば、テレビドラマ『アイシテル』が終わってしまいました。

この番組は、ママと2人で毎週見ていて、涙、涙の最終回でした。


この時間だけは、パソコンから離れてママと仲良しができたのに・・・。

まぁ、『アイシテル』は、終わっても、ママをアイシテルは終わってないとか(^^;

だから、スローペース、スローペース・・・。家庭が一番ですよ! 誰にともなく・・・。

2009-06-18 Perlの謎(番外編1):リストの要素数を求める

『Perlの謎』シリーズは、他言語経験者やPerl初心者が対象なので難易度が低いです。

今回は、ちょっと難度が高いので番外編としました。

では、参ります。


配列変数に格納されている要素数は、通常、以下のようにスカラー変数に配列変数を代入すると求められます。

my @array = ('a', 'b', 'c', 'd');
my $count = @array; # $countには要素数4が格納される

では、リストの要素数を求めるにはどのようにしたらよいでしょうか・・・。

実はこれ、fbisさんの『リストの要素数を取得する』に沢山書かれています。


今回は、最後に書かれている以下が、全く分からなかったので調べてみました。

これも、リストの要素数の求め方の一つです。

my $count = ( () = qw/ a b c d / ); # 4
http://d.hatena.ne.jp/fbis/20071113/1194931452

まず、『() = qw/ a b c d /』は、リストコンテキストで評価され、空リストにリストを代入すると値は捨てられます。

つぎに、『$count = ( () = qw/ a b c d / )』は、スカラーコンテキストで評価され、すると代入右辺の式が生成した要素数を返します。

まぁ、これは、Perlの仕様で、覚えるしかないみたいです。

そして、要素がない時は、要素数ゼロ(偽)が返り、たとえば、while文の条件式に都合がいいようになっています。


◆サンプル
$x = ( ($a, $b) = (7, 7, 7) ); # $xには、2でなく3が格納される
$x = ( ($a, $b) = funk() );    # $xには、funk()が返した値の個数が格納される
$x = ( () = funk() );          # 同上

2009-06-17 Perlの謎(その1):変数等の頭文字って何を意味するの?

他言語、特にオーソドックスなcobol,c,java,vb等の人がPerlをやり始めると謎だらけで悩むことになりますね。

そんな人のために、僭越ながら私が謎を解き明かしていきますよ! Perlerの方は温かく見守ってくださいね(^o^)


◆変数等の頭文字って何を意味するの?

Perlをやり始めると変数等の頭文字($,@,%,&,*,何も無し)が気になります。


『$』が付くシンボルは、スカラー変数で、数値や文字列など何でも入る・・・VBで言えば、variant型のような変数です。

『$』はScalarの『S』に似ているので、スカラー変数を表します。


『@』が付くシンボルは、配列変数で、配列の要素はスカラー変数と同じで、何でも入る。

『@』はarrayの『a』に似ているので、配列変数を表します。


『%』が付くシンボルは、ハッシュ変数で、ハッシュはkeyとvalueを対で持っていて、valueはスカラー変数と同じで、何でも入る。

『%』はkeyとvalueの対を表していて、ハッシュ変数を表します。


『&』が付くシンボルは、サブルーチンで、実は『&』を頭に付けるより、尾に『()』をつけてサブルーチンを明示する方が多いです。

『&』はSubの『S』に似ているので、サブルーチン(これは自信がない)を表します。

(モダンPerlでは、『&』は付けないとのことです。右を参照のこと『第124回 サブルーチンの頭に&は普通つけない』)

『*』が付くシンボルは、型グロブで、頭文字以外同名のシンボルすべてを表します。

『*』と言えば、ワイルドカードですね。


何もつかないシンボルは、ベアワードで、ファイルハンドル、引数のない組み込み関数、ヒアドキュメントの終端値、ラベル、単なる文字列などなど・・・。


◆ファニー文字

ちなみに、これらの頭文字のことをPerl では「ファニー文字(funny character)」とよんでいます。

実はファニー文字を使うことにより、将来使われるであろう予約語やキーワードとかぶることがありません。

他の言語では、かぶる可能性があり、かぶった時に過去の資産が使えなくなるのです。

つまり、Perlでは、ファニー文字を使うことにより、過去の資産が使えなくなることが無いのです。


◆サンプル
$hoge = 123;                      # スカラー変数
@hoge = (1, 2, 3);                # 配列変数
%hoge = (a => 1, b => 2, c => 3); # ハッシュ変数

print "-----&hoge------------\n";              
&hoge;                            # サブルーチン
print "-----&foox(*hoge)------\n";              
&foox(*hoge);

sub hoge {
   print "$hoge", "\n";                   # スカラー変数
   print "$hoge[0]$hoge[1]$hoge[2]", "\n";# 配列変数
   print "$hoge{a}$hoge{b}$hoge{c}", "\n";# ハッシュ変数
}                                         
sub foox {
   (*foo) = @_;
   print "$foo", "\n";                 # スカラー変数
   print "$foo[0]$foo[1]$foo[2]", "\n";# 配列変数
   print "$foo{a}$foo{b}$foo{c}", "\n";# ハッシュ変数
   print "-----&foo--------------\n";              
   &foo;                               # サブルーチン
}

◆実行結果
C:\perltest>perl sysbol.pl
-----&hoge------------
123
123
123
-----&foo(*hoge)------
123
123
123
-----&foo--------------
123
123
123

上記サンプルは、型グロブと各変数の関係を示すため、すべてグローバル変数になっています。

しかし、モダンPerlではなるべくグローバル変数は使わず、myでローカル変数にして処理するのが推奨です。

また、サブルーチンの『&foo;』も『foo();』の記述の方が推奨です。


◆謎シリーズ(予告)

2009-06-16 YAML(ヤムル)とは

id:fbisさんのところでYAML(ヤムル)を知りました。

YAMLは、JSONとよく似ている。

実際、仕様がかぶるケースがあり、JSONをYAMLとして処理できる場合もあるらしい。


Perlとしては、無名配列と無名ハッシュに上手く対応している。

言葉で説明すると大変なので、サンプルをお読みください。

ちなみに、YAMLモジュールは標準(v5.8.8)では入っていませんでしたので、CPANからインストールしました。


◆サンプル(yaml.pl)
use strict;
use warnings;
use YAML ();
use Data::Dumper ();

my $yaml_array = <<'__YAML__';
- aaa
- 
  - b1
  - b2
  - 
    - b3.1
    - b3.2
- ccc
__YAML__

my $data = YAML::Load( $yaml_array );
print Data::Dumper::Dumper( $data );
print YAML::Dump(["aaa", ["b1", "b2", ["b3.1", "b3.2"]], "ccc"]);


my $yaml_hash = <<'__YAML__';
A: aaa
B:
  B1: bbb1
  B2: bbb2
C: ccc
__YAML__

$data = YAML::Load( $yaml_hash );
print Data::Dumper::Dumper( $data );
print YAML::Dump({"A"=>"aaa", "B"=>{"B1"=>"bbb1", "B2"=>"bbb2"}, "C"=>"ccc"});

◆実行結果
C:\perltest>perl yaml.pl
$VAR1 = [
          'aaa',
          [
            'b1',
            'b2',
            [
              'b3.1',
              'b3.2'
            ]
          ],
          'ccc'
        ];
---
- aaa
-
  - b1
  - b2
  -
    - b3.1
    - b3.2
- ccc
$VAR1 = {
          'A' => 'aaa',
          'C' => 'ccc',
          'B' => {
                   'B1' => 'bbb1',
                   'B2' => 'bbb2'
                 }
        };
---
A: aaa
B:
  B1: bbb1
  B2: bbb2
C: ccc

YAMLを利用するとYAMLデータを外だしにして初期(ini)ファイルに活用できそうですね。

実際、Plaggerなどで活用されているとネットに書いてありました。

尚、サンプルでは、YAML::Loadを使用していますが、初期ファイル等から読み込むにはYAML::LoadFileを使用します。


◆参考リンク

2009-06-16 『Perlらしく書くための5つの極意』が良かった件について

id:bingo_nakanishi_perlさんの『Perlらしく書くための5つの極意』を読んで、思わず、はてブしてしまいました!

忘れないためにメモしときます。

極意1は、その日の気分でカッコを付けたり付けなかったり、これからは、カッコは付けないようにしよう・・・。

極意2は、C言語を10年以上やって身についた癖ですが、これからは、必要になったら宣言しよう・・・。

極意3は、後置きのforがカッコイイ!! これからは、是非使わせてもらおう・・・。

極意4は、コンテキストね・・・。意外と私は操っているかな・・・。

極意5は、これも、意外と私は操っているかな・・・。


このコンテンツ(bingo_nakanishi_perlさんの方)がもっと人気が出れば、凄いPerler達の目にとまって、第6第7の極意が追加されるかもです。

ちなみに、私のレベルでは、思いつきません・・・(悲)。

2009-06-15 Benchmark モジュールの使い方

いつも陰ながらお世話になっているid:fbisさんところで、各種コンスタントのBenchmarkテストがありました。

Benchmarkは使ったことがないと思ったのですが、ググルとなんと9年前の2000年の掲示板に自分の書き込みあり、benchmarkを使っているのです。

しかし、すっかり忘れている自分・・・ってPerlは5年以上ブランクがあるので・・・。

で、引きつづきググルと良いページを2つ見つけました!

最後にPerldoc Benchmarkで使い方のところを引用しときます。

NAME
    Benchmark - benchmark running times of Perl code

SYNOPSIS
        use Benchmark qw(:all) ;

        timethis ($count, "code");

        # Use Perl code in strings...
        timethese($count, {
            'Name1' => '...code1...',
            'Name2' => '...code2...',
        });

        # ... or use subroutine references.
        timethese($count, {
            'Name1' => sub { ...code1... },
            'Name2' => sub { ...code2... },
        });

        # cmpthese can be used both ways as well
        cmpthese($count, {
            'Name1' => '...code1...',
            'Name2' => '...code2...',
        });

        cmpthese($count, {
            'Name1' => sub { ...code1... },
            'Name2' => sub { ...code2... },
        });

        # ...or in two stages
        $results = timethese($count,
            {
                'Name1' => sub { ...code1... },
                'Name2' => sub { ...code2... },
            },
            'none'
        );
        cmpthese( $results ) ;

2009-06-14 黒魔術を読み解く

久々に弾さんのブログを見て、以下のソースが理解できなかったので、調べてみました。

折角なので、調べたことをメモしときます。

#!/usr/bin/perl
use strict;
use warnings;
{
    no warnings 'redefine';
    *CORE::GLOBAL::glob = sub{
        my $expr = shift;
        warn $expr;
        $expr =~ s{
            \A(.*?)~~(.*?)(\^\.)(\.\^?)(.*?)
        }{
            my $num = eval $1;
            my $min = $2;
            my $lt0  = length($3) == 1 ? '<=' : '<';
            my $lt1  = length($4) == 1 ? '<=' : '<';
            my $max = $5;
            qq($min $lt0 $num && $num $lt1 $max);
        }emsx;
        warn $expr;
        eval $expr;
    };
}
local $\="\n";
print "OK" if     <length('^..^') ~~ 3^..^5>;
print "OK" unless <length('^..^') ~~ 0^..^3>;
http://blog.livedoor.jp/dankogai/archives/51222364.html

no warnings 'redefine';

関数を再定義する時のワーニングを抑制する。


*CORE::GLOBAL::glob = sub{

組み込みglob関数をオーバーライド(関数再定義)しています。


my $expr = shift;

glob関数の第1引数を$exprへ代入しています。


warn $expr;

標準エラー出力へ$exprの内容を出力しています。


$expr =~ s{ \A(.*?)~~(.*?)(\^\.)(\.\^?)(.*?) }{ ・・・ }emsx;

\Aは、常に文字列の先頭にのみマッチします。

ちなみに、^ では文字列中に埋め込まれた改行の直後にもマッチしてしまいます。

後の正規表現は、ちょっと問題あり・・・かも(最後の方で説明します)。


e修飾子

e修飾子は、s{}{} の右側を式とみなして実行します。


m修飾子

m修飾子は、文字列を複数行として扱います。


s修飾子

s修飾子は、ドット(.) が改行にも一致するようにします。


x修飾子

x修飾子は、パターン内のスペースを無視し、コメントを入れられるようにします。


my $num = eval $1;

今回は、length('^..^')の実行結果が$numに入ります。


my $min = $2;

今回は、3^..^5 の3が$minに入ります。


my $lt0 = length($3) == 1 ? '<=' : '<';

3項演算で、今回は3^..^5 の『^.』が$3入り、lengthは文字列『^.』なので2なり、$lt0には '<' が入ります。


my $lt1 = length($4) == 1 ? '<=' : '<';

3項演算で、今回は3^..^5 の『.^』が$4入り、lengthは文字列『.^』なので2なり、$lt1には '<' が入ります。


my $max = $5;

今回は、3^..^5 の5が入ります。


qq($min $lt0 $num && $num $lt1 $max);

文字列 "$min $lt0 $num && $num $lt1 $max" と等価です。

しかし、単なる文字列でどこにも代入していない。

たぶん、最後に評価したものが現状のもを置換して、$exprに格納されるのかな・・・たぶん。


warn $expr;

標準エラー出力へ$exprの内容を出力しています。


eval $expr;

今回は、$exprには、文字列 "$min $lt0 $num && $num $lt1 $max" が格納されていて、eval(実行)します。


local $\="\n";

print文の最後に"\n"が付加されるようです。


正規表現がおかしい?

調べていて気がついたのですが正規表現が間違っているような感じです。

\A(.*?)~~(.*?)(\^\.)(\.\^?)(.*?)

\A(.*?)~~(.*?)(\^\.|\.)(\.\^|\.)(.*)

ではないでしょうか?

3..5

3..^5

の場合に置換しないのです。


ネコ演算子(^..^)

そもそもネコ演算子は、Perl6で実装されるとのことで、Perl5の範囲演算子の機能拡張版です。

3..5は (3,4,5)のリスト

3^..5は、(4,5)のリスト

3..^5は、(3,4)のリスト

3^..^5は、(4)のリスト

2009-06-142 政府や日銀は、どうやって物価を抑制するか?

今までで一番やさしい経済の教科書

インフレとデフレとは何か?の続き、『政府や日銀は、どうやって物価を抑制するか』です。

それには、政府も日銀も景気対策を行います。

◆景気対策

インフレやデフレが起きないように、そして、いい方向へ導くために政府と日銀は景気対策を行います。

景気対策には、大きく2つあり、政府が行う『財政政策』と日銀が行う『金融政策』です。


◆財政政策

政府が行う『財政政策』とは、大まかにいうと公共事業を行うことです。

公共事業を行うことにより民間企業からいろいろなものを買って企業の商売量を増やすことです。

すると景気がよくなり、なりすぎると今度は逆に公共事業を少なくし、景気を抑制します。


◆金融政策

日銀が行う『金融政策』とは、大まかにいうと世の中にあるお金の量をコントロールすることです。

それには、3つの操作『公定歩合操作』、『公開市場操作』、『法定準備率操作』を行います。


◆公定歩合操作

公定歩合は、日銀が民間の銀行にお金を貸すときの利子率です。

公定歩合操作とは、この利子率をコントロールします。

利子率が下がると、企業がお金が借りやすくなり、好景気になりやすく、上がると逆になります。


◆公開市場操作

公開市場操作とは、日銀が民間の市場で、債権、手形などを売買することです。

普通、民間企業が持っているお金は、市場に流通しているお金です。

唯一、市場に流通していないお金を持っているのが日銀です。

つまり、日銀が売買することで、市場のお金の量をコントロールできるのです。

日銀が市場から買えば、市場のお金が増え、売れば、市場のお金が減るのです。


◆法定準備率操作

まず、法定準備金というのがあります。

これは、一般の銀行が預かった預金の一部を日銀に預金しないといけない決まりがあり、この預金を法定準備金といいます。

銀行の預金総額に対して、何パーセントを法定準備金にするかを法定準備率といいます。

この法定準備率をコントロールすることにより、銀行が貸し出せるお金の量を日銀が決めることができるのです。

法定準備率を下げると準備金が減るので貸し出せるお金の量が増え、上げるとお金が減るのです。

2009-06-13 Perlでの単独shiftとは何か?

Perlでのshift関数は、普通、配列変数を引数にとり、配列変数から一番若いインデクスの要素を取り出します。

しかし、配列変数の引数がない単独shiftを結構見かけます。


これは、mainモジュールでは「@ARGV」がデフォルトの引数で、sub内では、「@_」がデフォルトの引数になるのです。

ちなみに、「@ARGV」は、コマンドラインの引数の配列で、「@_」は、サブルーチンの引数の配列です。


◆サンプル
use strict;
use warnings;

my $arg = shift || 2000;
print $arg, "\n";

subx();
subx(4000);

sub subx {
    my $para = shift || 3000;
    print $para, "\n";
}

◆サンプル実行結果
C:\perltest>perl shift.pl 1000
1000
3000
4000

C:\perltest>perl shift.pl
2000
3000
4000

2009-06-12 雑記

すみません。今日は、思いつくまま書かせてもらいます!


今日、バスが遅れて、いつもの電車にぎりぎりで、京王線の改札口に、定期カードを入れたら”ピンポン!!”・・・。

やば!今日で定期カードが切れていた!!

明らかに切符を買ってたら、電車に間に合わない・・・。

ちょうど、そこに駅員さんが来た!

駅員さんは一瞬で状況を把握、早く行きなさいと・・・ラッキー!

西調布駅の駅員さん、ありがとうございます!


電車の中では、今、『読むだけですっきりわかる日本史』という本を読んでいます。

まだ、読みはじめだけれど、かなり読みやすく、分かり易い本です。

そのうち、『経済ノート』につづき『歴史ノート』がスタートするかもです!

とりあえず、縄文時代が、なんと1万年以上も続いていたって、知っていました?

西暦は、これにくらべたら、たったの2009年ですよ!


とりあえず、お風呂に入って・・・と圧力がかかりましたので、出たらつづきを書きますね(^^)

今、出ました。


会社では、トイレが各階に2箇所あり、各々大が3〜4箇所あります。

私は、最近、過敏性腸症候群の調子よく、あまりトイレに行かなくなったのですが・・・。

今日、便意を催してきて、トイレに行くと、全箇所使用中で・・・まぁこれは、たまにあります。

別のトイレにいったら、またで・・・しかし、これもすでに経験がありました。

で、3箇所目行くと、またまた全箇所使用中なのです!!

さすがに、これは、はじめての経験でした。

なんと、私と同じ時間に便意を催した人が10人以上もいたのです!

なんで、こんなにウンコマンがいるのだろうかと・・・。

大不況の影響でストレスから過敏性腸症候群の人が増えたのかなと思いました。


帰りに京王線の定期カードを買いました。

しかし、すぐに後悔しました。

明日は土日なので、2日分を損してしまったではないですか!

憂鬱な気持ちで、電車の中で『読むだけですっきりわかる日本史』を読みました。


家に帰ってきたら、NHKの7時ニュースで鳩山大臣の辞任ニュースをやっていました。

鳩山大臣は生理的に嫌いなのですが、今回は応援したくなりました。

西川社長の背後には、かなりの大物が控えていまね・・・たぶん。


北朝鮮のニュースも気になりますね。

1989年のベルリンの壁崩壊時に、一緒に壁崩すると思った北朝鮮が20年以上たっても・・・。

ミサイル発射、原爆実験、米国人記者拉致、偽ドル・・・。

これだけ、なめられた米国は、どうでるか・・・。しかし、日本は全く無視されているし・・・。


ということで、つれづれなるままに書いてみました。

読んでくれた人、ありがとうございます。


あ、そうそう、最後に、最近、試しにBING(ビング)を使っていましたが、なかなか、思う情報がゲット出来ず、歯痒い思いを沢山しました。やはり、Googleの足元にも及びませんね!

また、MSのサイトやページが沢山引っ掛かるのが嫌な感じがしました。

2009-06-11 気持ちが↓

昨日(帰社日)のことが、ちょっとショックでブログを書く気力がない・・・って言いながら書いていますが・・・すみません(^^;


今は、季節の変わり目(夏至ちかい?)で、暑くなったり寒くなったりで、体調を崩している人が回りに沢山います。

私も体調が悪いし、しかも昨日のショックが重なって、無気力状態かな・・・。


また、気力が出てきたら、ガンガン更新をしていきますね!

皆さまも、十分に休養をとり、体調を整えてこの時期を乗り越えてください。


あっそうそう、ヒラヤマさん、熱は下がりましたか?

お大事にしてください。

しばらくは、運動を控えた方がいいですよ。また、屋根に赤いランプのついた白いワゴン車に乗っちゃいますよ!


◆ "For me" by hirohito koike

D

2009-06-10 帰社日

今日は10日で給料日、なので派遣先から自社へ帰社し、今回はいろいろな話し合いがありました。

ブログにはちょっと書けないのだけれど、会社が少し大変なことになりました。


まぁ、私の場合、この大不況の中、ちゃんと働けて本当に有りがたいと・・・改めて思わされました。

いやー、これからは特に、謙虚に、そして周りの皆さんに感謝して仕事をしてきたいと思います。

2009-06-09 オートコンプリートをオフにする

たとえば、WEBのログイン画面は、IDとパスワードを入力して、Submitするみたいな感じになりますね。

そして、IEだとオートコンプリート機能が効いて、一度パスワード入力すると、次回からIDを入力するだけで、パスワードが自動入力されるようになります。


このように、オートコンプリート機能は便利な反面、パスワードが自動入力されるようになるので、セキュリティ上あまり良くない場合があります。

そのような時は、form要素やinput要素にautocomplete属性を定義して、値を"off"にします。

<form>
<p><input type="text" autocomplete="off" /></p>
<p><input type="password" /></p>
<p><input type="submit" value="OK" /></p>
</form>

もちろん、上記はIEオンリーです。

2009-06-09 インフレとデフレとは何か?

物価がスパイラルのように上がることをインフレといい、逆に下がることをデフレという。

また、物価とお金の価値は、反比例する。


たとえば、昨日100円だった物が、インフレで今日1000円になったとすると・・・。

物の値段は10倍に上がったが、お金の価値はそのままだから、10倍払わなければならない。

10倍払わなければならない・・・とは、逆に見るとお金の価値が1/10になったということです。

つまり、物価が10倍になることは、お金の価値が1/10になることとイコールなのです。


◆インフレ

インフレは、普通、好景気に起こりやすく、物の需要が大きく、経済活動が活発となり、給料も上がります。

つまり、インフレは、物価も給料も上がり、好景気なので大歓迎のような気がしますが・・・。

実は、お金持ちの人には、とんでもないことなのです。

そう、インフレは、お金の価値が下がることなので、推して知るべし・・・。

逆に言うと、ビンボーの人にはインフレゴーゴーって感じですか。


◆デフレ

デフレは、普通、不景気に起こりやすく、物の需要が小さく、経済活動が停滞となり、給料も下がります。

つまり、デフレは、物価も給料も下がり、ビンボーの人は、働いても働いても辛い日々が続くのです。

逆に言うと、お金持ちの人には、お金の価値が上がるので、デフレゴーゴーって感じですか。


とにかく、インフレもデフレもよくなく、政府や日銀がいろいろと物価を抑制するのです。

政府や日銀がどうやって物価を抑制するのかは、次回へつづきます。


◆参考図書
今までで一番やさしい経済の教科書

今までで一番やさしい経済の教科書

2009-06-08 久々のお墓参り

ここ9年間、平均月1回は、お墓参りに行っていましたが、ここ数ヶ月はご無沙汰していました。

妹から『お墓に手紙が置いてあったよ』と聞いて、昨日ママと一緒にお墓参りに行きました。


お墓には、ちゃいちゃんのお友達の手紙がありました。

お友達もいろいろと辛い時期に、『真っ暗の中、ちゃいちゃんのお墓を探して、1人で泣いていた・・・』と書いてありました。

そして、将来もし学校の先生になれたら、友達の大切さ、命の大事さを伝えるんだって書いてありました。


何年たっても、すごいなぁ・・・ちゃいちゃんは・・・。

お友達も、辛い時は、我慢しないで、ちゃいちゃんママが話し相手になってくれると思いますので、是非いらしてくださいね!

しかし、私でよければ、私も話し相手になりますが・・・美しい22才の娘さん達を前にすると、おじさんには眩しすぎる・・・(^^;

2009-06-08 日経平均とTOPIXとは何か?

経済のニュースとかに必ず出てくる日経平均とTOPIXとは何なのでしょうか?


◆日経平均

日経平均は、なんとなく株価の平均かな・・・なんて思っていましたが・・・大体そうでした。

詳しくは、日本経済新聞社が選んだ225社の一株の株価の平均値です。

日経平均では何がわかるかと言うと、株価の上昇や下降がわかり、全体の株価の傾向がわかります。


◆TOPIX

日経平均では、あくまで株価であって、企業の価値ではありません。

企業の価値は、あくまで『時価総額(株価×発行株式数)』なのです。

TOPIXは、以下の数式で表します。

TOPIXでは何ががわかるかと言うと、企業の価値が増えているか減っているかがわかり、全体の景気がわかります。


◆参考図書
今までで一番やさしい経済の教科書

今までで一番やさしい経済の教科書

2009-06-08 日付け処理する時の留意点

一見簡単そうに見える日付け処理にも、実は結構やっかいな処理が隠れています。

以下は、日付け処理をする時の留意点


あと、末日で検索したら、昔書いた面白い記事を見つけたのでご紹介

2009-06-07 株とは何か?

先日、アメリカの企業GM(ゼネラルモーターズ)が倒産し、アメリカ政府はGMの株を60%取得し、国営化が決まりました。

国営化とは、どういうことか言うと、それは単に国がGMのオーナーになると言うことなのです。


では、なぜ株を60%取得するとその会社を自分のものにすることができるのでしょうか・・・。

そもそも、株とは何なのでしょうか?


会社を経営していくには、資金が必要です。

社長個人が持っている資金では限界があります。

そこで、会社に資金を出してくれる人を探すわけです。

資金を出したくれた人には、引き換えに株券を渡し、ある意味その会社のオーナーの1人になってもらうのです。


株券とは、その会社の価値を発行株券数で割った一枚当たりの価値の証明書です。

つまり、会社の価値の総額を表すのが株なのです。

たとえば、その会社のすべて(100%)の株を持っていれば、当然、その会社の唯一のオーナーなのです。

しかし、すべて持っていなくとも、51%を持っていれば、事実上唯一のオーナーと変わらないのです。

これは、株主総会で1株が1票に数えられ、株を51%持っていれば半数以上の票を持っていることになるのです。

よって、多数決で意見が必ず通り、事実上唯一のオーナーと変わらないのです。

(実際には、1/3の株を持っている人が他にもいる場合は、「拒否権」が与えられるので、その場合は51%でなく66.7%が必要になる)


今回のGMの場合は、アメリカ政府が株を60%取得したので、事実上唯一のオーナーで、オーナーが国なので国営化なのです。

また株とは、「その会社(企業)にお金を出資したことの証明書」で、その総額は、企業の価値の総額なのです。


◆参考図書
今までで一番やさしい経済の教科書

今までで一番やさしい経済の教科書

2009-06-06 「今週のお題」:好きな音楽

f:id:chaichanPaPa:20090519200350j:image:right

ケミストリ、中島美嘉、ミスチル・・・好きな音楽は、いろいろあるのだけれど・・・。

今は、断然『小池啓仁』です!

って、家の長男です。


昼はバイトで、夜は音楽活動・・・休み無し24時間365日活動している(さすがに仮眠はしている)。

こんなに頑張っているのだけれど・・・なかなかブレイクできない。


プロとしては、歌もギターもまだまだだけれど、作曲の才能は天性なのかもしれない、いい曲書くよ!

是非聴いてやってください!


私と妻は、休日には一日中、彼のCDを聴いています。

さすがに、良くない曲だと一日聞くのは無理でしょう・・・。だから、いい曲なのです。


みなさんも是非聴いてやってください。

感想など貰えたら、彼の励みになりますので、よろしくお願いいたします。


◆『つながり』 By 小池啓仁

Download


◆『扉』 By 小池啓仁

Download


この音源が入ったCDは、メールで申し込んでもらえれば、発送費込みで1000円にてお送りします。

彼の今後の音楽活動費になりますので、よろしくお願いいたします。

尚、CDには上記2曲の他に『明日の風が吹く!!』も収録されています。

後、PCで聴くより、CDプレーヤーでガンガン聴く方が快いですよ!

申し込み、お待ちしています!


◆メルアド

koikehirohitoアットマークyahoo.co.jp


◆桜咲く季節に

2009-06-05 雑記:テレビドラマ『アイシテル』

f:id:chaichanPaPa:20090605223302j:image:right

昨日は宿直で、宿直明けは、やはり疲れる・・・。

宿直の前の日に見たテレビドラマ『アイシテル』で・・・涙がとまらない。


このドラマ、子供が子供を殺してしまい、その両方のご家族と家庭調査官の人間模様をストーリーとしている。

両方の家庭には、それぞれの家風(文化)あり、その違いが時として悲劇を起こす。


2人の子供は、各々お母さんから大変愛されており、それがちょっとした思いの食い違いで、お互いにお母さんを傷付けられたという思いからケンカになり、小さな子が死んでしまう。

そして、このことを通して、両方のご家族が『家族のきずな』を見つめ直してく・・・。


この悲劇にたいする、殺してしまったという少年の思い、両方のご家族の思い、そしてこの事件を調査する家庭調査官の思いが交差して、ドラマを見ている方も込み上げてくる思いの涙がとまらない・・・。


久々の感動のドラマです。まだ、見ていない人は、是非ご覧下さい。

毎週水曜、夜10時、日本テレビ(4ch)です!

2009-06-04 宿直

月一度の宿直の日です。行って来ます。

いろいろ書きたいことは、あるのだけれど・・・。

2009-06-03 続・Perlでtaskkill for Windows

昨日のサンプルをモダンPerl風に書き換えてみました。

しかし、あんまりモダンでもないかも・・・。


use strict;
use warnings;

# ユーザ名 papa タスク名 notepad.exe
taskkill('papa', 'notepad.exe');

sub taskkill {
    my ($username, $taskname) = @_;

    $/ = undef;
    #my $cmd = 'tasklist ';
    #my @args = ("/FI \"USERNAME eq $username\" /FI  \"IMAGENAME eq $taskname\"");
    #my @args = ("/FI \"USERNAME eq  $username\"", "/FI  \"IMAGENAME eq $taskname\"");
    #open my $fh, '-|', $cmd, @args  or die $!;
    my $cmd = "tasklist /FI \"USERNAME eq $username\" /FI  \"IMAGENAME eq $taskname\"";
    open my $fh, '-|', $cmd  or die $!;
 
    my $process = <$fh>;
    close($fh);

    if ($process =~ /$taskname/) {
        my $cmd = 'taskkill';
        my @args = ('/F', "/FI \"USERNAME eq  $username\"", "/FI  \"IMAGENAME eq $taskname\"");
        system $cmd, @args and die $!;
    }
}

今度は、『open my $fh, '-|', $cmd, @args』だと『List form of pipe open not implemented at taskkill.pl』になって上手く行かなかったです・・・。

もしかしたら、ActivePerlだとこの形式は『not implemented』なのかな?


ちなみに、なにがモダンかと言うと、openとsystemの引数が文字列でなくリストになっているところ?

結局、モダンにすると何が安全で・・・メリットがよくわからない・・・(弾さんの読んでも理解できない)。


◆参考リンク

2009-06-03 一日、一万歩だから万歩計?

義姉(ぎし:妻の姉)から、仮面ライダーの変身ベルトのようにバックルが大きい(ちょっと大袈裟)ビジネスベルトを頂きました。

このベルト、歩くと微妙な音がするのです。


はじめは、発信機(盗聴器)がバックルに仕込まれているのかな・・・なんて思ったら、なんと万歩計だったのです!

この万歩計は、体重を入力すると消費カロリー計算もしてくてるのです。時計にもなります。


で、一日何歩ぐらい歩くと思いますか?

私は、通勤が片道50分ぐらいの普通のサラリーマンです。

たぶん平均的サラリーマンなので歩数も平均的だと仮定して・・・。


2日のデータでは、平均一日一万歩弱でした。

だから、万歩計なのかなと思い・・・ヒラヤマさんに言ったら完全否定されました(^^;


で、歩いた消費カロリー計算の方なのですが、以下の感じです(アバウトですが気にしないで下さい)。


ちなみに理想的な摂取カロリーは以下の感じです。


◆私の場合

摂取カロリーの約4分の1が、歩きで消費されるみたいですね。

ちなみに、万歩計の歩いた消費カロリーは557(Kcal)になっていました。


◆参考リンク

2009-06-02 今までで一番やさしい経済の教科書

今までで一番やさしい経済の教科書

いい本見つけました!

ホント解かり易い経済の教科書です!


経済素人の私にもよーく理解ができました。

紹介と感想は、1回ではもったいないので、新カテゴリ『経済ノート』を設けてシリーズとして行いたいと思います。


ここ1ヵ月間、この本だけを読んでます。

経済も解かってくると面白い・・・経済って、まさに世の中の仕組みなのですね!


この教科書で勉強した成果をまとめて『経済ノート』ネタとして公開していく予定です。

どうぞ、期待しないでお待ちください。読者対象者は経済素人の方です。よろしく!

2009-06-02 Perlでtaskkill for Windows

Excelのプロセスなど、たまに残ってしまうことがあります。

そんな時は、以下のサンプルでそのプロセスを強制終了させることができます。


◆サンプルソース
use strict;
use warnings;

# ユーザ名 papa タスク名 EXCEL.EXE
taskkill('papa', 'EXCEL.EXE');

sub taskkill {
    my ($username, $taskname) = @_;

    $/ = undef;
    open(my $fh, "tasklist /FI \"USERNAME eq $username\" /FI \"IMAGENAME eq $taskname\" 2>&1 |") or die "open error($!)";
    my $process = <$fh>;
    close($fh);

    if ($process =~ /$taskname/) {
        system("taskkill /F /FI \"USERNAME eq $username\" /FI \"IMAGENAME eq $taskname\" > nul 2>&1") and die "system error";
    }
}

◆留意点

◆taskkillコマンドヘルプ引用
TASKKILL [/S システム [/U ユーザー名 [/P [パスワード]]]]
         { [/FI フィルタ] [/PID プロセスID | /IM イメージ名] } [/F]

説明:
    このコマンド ライン ツールは、複数のプロセスを終了するために使われます。
    プロセス ID またはイメージ名を使って終了できます。

パラメータ一覧:
    /S    システム            接続するリモート システムを指定します。

    /U    [ドメイン\]ユーザー コマンドが実行されるユーザー コンテキストを
                              指定します。

    /P    [パスワード]        提供されるユーザー コンテキストのパスワードを
                              指定します。省略された場合は、入力を要求します。

    /F                        プロセスの強制終了を指定します。
                                    

    /FI    フィルタ           フィルタによって指定された、与えられた条件に一致
                              するタスクを表示します。

    /PID   プロセスID         終了させるプロセスの PID を指定します。
                                    

    /IM    イメージ名         終了させるプロセスのイメージ名を指定します。
                              ワイルドカード '*' を使用してすべてのイメージ名を
                              指定できます。

    /T                        ツリー削除: 指定したプロセスとそのプロセスが開始
                              したすべてのプロセスを削除します。

    /?                        このヘルプまたは使用法を表示します。

フィルタ:
    フィルタ名    有効な演算子              有効な値
    -----------   ---------------           --------------
    STATUS        eq, ne                    RUNNING | NOT RESPONDING
    IMAGENAME     eq, ne                    イメージ名
    PID           eq, ne, gt, lt, ge, le    PID 値
    SESSION       eq, ne, gt, lt, ge, le    セッション番号です。
    CPUTIME       eq, ne, gt, lt, ge, le    次の形式の CPU 時間
                                            hh:mm:ss
                                            hh - 時間
                                            mm - 分、ss - 秒
    MEMUSAGE      eq, ne, gt, lt, ge, le    メモリ使用量 (KB)
    USERNAME      eq, ne                    [ドメイン\]ユーザー の形式の
                                            ユーザー名です
    MODULES       eq, ne                    DLL 名
    SERVICES      eq, ne                    サービス名
    WINDOWTITLE   eq, ne                    ウィンドウのタイトル

注意: /IM スイッチのワイルドカード '*' は、フィルタと使うときのみ有効に
      なります。

注意: リモート プロセスの終了は、/F オプションの指定したかどうか
      にかかわりなく強制的に実行されます。

例:
    TASKKILL /S system /F /IM notepad.exe /T
    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
    TASKKILL /F /IM notepad.exe /IM mspaint.exe
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
    TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *
    TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"

2009-06-01 突然の体調不良

今日、朝方、寝ているのに頭が痛いと感じる・・・やばいなと思いながら起きると、頭痛と吐き気。

体温を計ると平熱・・・じゃぁ、がんばって会社に行こうかな思ったけど・・・バファリンを飲んで布団にもぐりこみダウン。


会社は午後から行きました。

珍しいですね。こんなこと・・・。

今も、ちょっと頭痛があります。


季節の変わり目です。みなさんもお気を付けください。

ちなみに、1 週間以内にして『体調不良』キーワードで、googleブログ検索すると 4,137件引っ掛かりました。


ということで、今日は早く寝ます。おやすみなさい。