pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


日付時刻を元素番号に対応する元素記号に置換して表示する時計を作ってみる。

なんとなく試作。実用性は全くない。

#!/usr/bin/perl

use strict;
use warnings;
use Time::HiRes qw(gettimeofday);

my @element;
$|=1;


sub main {
        &init;

        # この while の中身は別の関数にすべきだったかも。。。
        while(1) {
                my ($unixtime, $microsec) = gettimeofday;
                my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
                  = localtime($unixtime);
                $year += 1900;
                $mon += 1;

                my $year_upper2digits = int($year/100);
                my $year_lower2digits = $year - $year_upper2digits * 100;
                $year_upper2digits = $year_upper2digits = 0 ? 100 : $year_upper2digits;
                $year_lower2digits = $year_lower2digits = 0 ? 100 : $year_lower2digits;

                # 時刻の 0 時は24時とする。
                $hour = $hour = 0 ? 24 : $hour;

                # 分、秒の 0 は 60 とする。
                $min  = $min  = 0 ? 60 : $min;
                $sec  = $sec  = 0 ? 60 : $sec;

                # 1秒以下の秒は1/100単位で処理し、0 =100 とする。
                $microsec = $microsec / 10000;
                $microsec = $microsec = 0 ? 100 : $microsec;

                printf "%d/%02d/%02d ", $year, $mon, $mday, $hour, $min, $sec, $microsec;
                printf "%02d:%02d:%02d.%02d\n", $hour, $min, $sec, $microsec;
                printf "%2s%2s/%2s/%2s ",
                        $element[$year_upper2digits]->{symbol},
                        $element[$year_lower2digits]->{symbol},
                        $element[$mon]->{symbol},
                        $element[$mday]->{symbol};

                printf "%2s:%2s:%2s.%2s\r\033M",
                        $element[$hour]->{symbol},
                        $element[$min]->{symbol},
                        $element[$sec]->{symbol},
                        $element[$microsec]->{symbol};

#               select undef, undef, undef, 1;
                # これくらいの wait にしたほうが雰囲気が出るような気がする。
                select undef, undef, undef, 0.13;
        }
}

&main;

sub init {
        # 本来ならば $element[0] が参照されることは無いはずだが、
        # 万が一参照された場合は 60 と同じ値を返す。
        $element[0]={ symbol => 'Nd', name=>'ネオジム'};

        $element[1] ={ symbol => 'H' , name=>'水素'};
        $element[2] ={ symbol => 'He', name=>'ヘリウム'};
        $element[3] ={ symbol => 'Li', name=>'リチウム'};
        $element[4] ={ symbol => 'Be', name=>'ベリリウム'};
        $element[5] ={ symbol => 'B' , name=>'ホウ素'};
        $element[6] ={ symbol => 'C' , name=>'炭素'};
        $element[7] ={ symbol => 'N' , name=>'窒素'};
        $element[8] ={ symbol => 'O' , name=>'酸素'};
        $element[9] ={ symbol => 'F' , name=>'フッ素'};
        $element[10]={ symbol => 'Ne', name=>'ネオン'};
        $element[11]={ symbol => 'Na', name=>'ナトリウム'};
        $element[12]={ symbol => 'Mg', name=>'マグネシウム'};
        $element[13]={ symbol => 'Al', name=>'アルミニウム'};
        $element[14]={ symbol => 'Si', name=>'ケイ素'};
        $element[15]={ symbol => 'P' , name=>'リン'};
        $element[16]={ symbol => 'S' , name=>'硫黄'};
        $element[17]={ symbol => 'Cl', name=>'塩素'};
        $element[18]={ symbol => 'Ar', name=>'アルゴン'};
        $element[19]={ symbol => 'K' , name=>'カリウム'};
        $element[20]={ symbol => 'Ca', name=>'カルシウム'};
        $element[21]={ symbol => 'Sc', name=>'スカンジウム'};
        $element[22]={ symbol => 'Ti', name=>'チタン'};
        $element[23]={ symbol => 'V' , name=>'バナジウム'};
        $element[24]={ symbol => 'Cr', name=>'クロム'};
        $element[25]={ symbol => 'Mn', name=>'マンガン'};
        $element[26]={ symbol => 'Fe', name=>'鉄'};
        $element[27]={ symbol => 'Co', name=>'コバルト'};
        $element[28]={ symbol => 'Ni', name=>'ニッケル'};
        $element[29]={ symbol => 'Cu', name=>'銅'};
        $element[30]={ symbol => 'Zn', name=>'亜鉛'};
        $element[31]={ symbol => 'Ga', name=>'ガリウム'};
        $element[32]={ symbol => 'Ge', name=>'ゲルマニウム'};
        $element[33]={ symbol => 'As', name=>'ヒ素'};
        $element[34]={ symbol => 'Se', name=>'セレン'};
        $element[35]={ symbol => 'Br', name=>'臭素'};
        $element[36]={ symbol => 'Kr', name=>'クリプトン'};
        $element[37]={ symbol => 'Rb', name=>'ルビジウム'};
        $element[38]={ symbol => 'Sr', name=>'ストロンチウム'};
        $element[39]={ symbol => 'Y' , name=>'イットリウム'};
        $element[40]={ symbol => 'Zr', name=>'ジルコニウム'};
        $element[41]={ symbol => 'Nb', name=>'ニオブ'};
        $element[42]={ symbol => 'Mo', name=>'モリブデン'};
        $element[43]={ symbol => 'Tc', name=>'テクネチウム'};
        $element[44]={ symbol => 'Ru', name=>'ルテニウム'};
        $element[45]={ symbol => 'Rh', name=>'ロジウム'};
        $element[46]={ symbol => 'Pd', name=>'パラジウム'};
        $element[47]={ symbol => 'Ag', name=>'銀'};
        $element[48]={ symbol => 'Cd', name=>'カドミウム'};
        $element[49]={ symbol => 'In', name=>'インジウム'};
        $element[50]={ symbol => 'Sn', name=>'スズ'};
        $element[51]={ symbol => 'Sb', name=>'アンチモン'};
        $element[52]={ symbol => 'Te', name=>'テルル'};
        $element[53]={ symbol => 'I' , name=>'ヨウ素'};
        $element[54]={ symbol => 'Xe', name=>'キセノン'};
        $element[55]={ symbol => 'Cs', name=>'セシウム'};
        $element[56]={ symbol => 'Ba', name=>'バリウム'};
        $element[57]={ symbol => 'La', name=>'ランタン'};
        $element[58]={ symbol => 'Ce', name=>'セリウム'};
        $element[59]={ symbol => 'Pr', name=>'プラセオジム'};
        $element[60]={ symbol => 'Nd', name=>'ネオジム'};
        $element[61]={ symbol => 'Pm', name=> 'プロメチウム'};
        $element[62]={ symbol => 'Sm', name=> 'サマリウム'};
        $element[63]={ symbol => 'Eu', name=> 'ユウロピウム'};
        $element[64]={ symbol => 'Gd', name=> 'ガドリニウム'};
        $element[65]={ symbol => 'Tb', name=> 'テルビウム'};
        $element[66]={ symbol => 'Dy', name=> 'ジスプロシウム'};
        $element[67]={ symbol => 'Ho', name=> 'ホルミウム'};
        $element[68]={ symbol => 'Er', name=> 'エルビウム'};
        $element[69]={ symbol => 'Tm', name=> 'ツリウム'};
        $element[70]={ symbol => 'Yb', name=> 'イッテルビウム'};
        $element[71]={ symbol => 'Lu', name=> 'ルテチウム'};
        $element[72]={ symbol => 'Hf', name=> 'ハフニウム'};
        $element[73]={ symbol => 'Ta', name=> 'タンタル'};
        $element[74]={ symbol => 'W' , name=> 'タングステン'};
        $element[75]={ symbol => 'Re', name=> 'レニウム'};
        $element[76]={ symbol => 'Os', name=> 'オスミウム'};
        $element[77]={ symbol => 'Ir', name=> 'イリジウム'};
        $element[78]={ symbol => 'Pt', name=> '白金'};
        $element[79]={ symbol => 'Au', name=> '金'};
        $element[80]={ symbol => 'Hg', name=> '水銀'};
        $element[81]={ symbol => 'Tl', name=> 'タリウム'};
        $element[82]={ symbol => 'Pb', name=> '鉛'};
        $element[83]={ symbol => 'Bi', name=> 'ビスマス'};
        $element[84]={ symbol => 'Po', name=> 'ポロニウム'};
        $element[85]={ symbol => 'At', name=> 'アスタチン'};
        $element[86]={ symbol => 'Rn', name=> 'ラドン'};
        $element[87]={ symbol => 'Fr', name=> 'フランシウム'};
        $element[88]={ symbol => 'Ra', name=> 'ラジウム'};
        $element[89]={ symbol => 'Ac', name=> 'アクチニウム'};
        $element[90]={ symbol => 'Th', name=> 'トリウム'};
        $element[91]={ symbol => 'Pa', name=> 'プロトアクチニウム'};
        $element[92]={ symbol => 'U' , name=> 'ウラン'};
        $element[93]={ symbol => 'Np', name=> 'ネプツニウム'};
        $element[94]={ symbol => 'Pu', name=> 'プルトニウム'};
        $element[95]={ symbol => 'Am', name=> 'アメリシウム'};
        $element[96]={ symbol => 'Cm', name=> 'キュリウム'};
        $element[97]={ symbol => 'Bk', name=> 'バークリウム'};
        $element[98]={ symbol => 'Cf', name=> 'カリホルニウム'};
        $element[99]={ symbol => 'Es', name=> 'アインスタイニウム'};
        $element[100]={ symbol => 'Fm', name=> 'フェルミウム'};
        $element[101]={ symbol => 'Md', name=> 'メンデレビウム'};
        $element[102]={ symbol => 'No', name=> 'ノーベリウム'};
        $element[103]={ symbol => 'Lr', name=> 'ローレンシウム'};
        $element[104]={ symbol => 'Rf', name=> 'ラザホージウム'};
        $element[105]={ symbol => 'Db', name=> 'ドブニウム'};
        $element[106]={ symbol => 'Sg', name=> 'シーボーギウム'};
        $element[107]={ symbol => 'Bh', name=> 'ボーリウム'};
        $element[108]={ symbol => 'Hs', name=> 'ハッシウム'};
        $element[109]={ symbol => 'Mt', name=> 'マイトネリウム'};
        $element[110]={ symbol => 'Ds', name=> 'ダームスタチウム'};
        $element[111]={ symbol => 'Rg', name=> 'レントゲニウム'};
        $element[112]={ symbol => 'Cn', name=> 'コペルニシウム'};
        $element[113]={ symbol => 'Uut', name=> 'ウンウントリウム'};
        $element[114]={ symbol => 'Fl', name=> 'フレロビウム'};
        $element[115]={ symbol => 'Uup', name=> 'ウンウンペンチウム'};
        $element[116]={ symbol => 'Lv', name=> 'リバモリウム'};
        $element[117]={ symbol => 'Uus', name=> 'ウンウンセプチウム'};
        $element[118]={ symbol => 'Uuo', name=> 'ウンウンオクチウム'};

}