Counter: 1640, today: 1, yesterday: 0

内容

目的

人生が3万日だとしたら、今まで何日生きてきてあと何日残されているのかを知り、モチベーションを高めたりがっかりしたりするために使います。

中川翔子先生の名言「人生3万日しかない」にインスパイアされ、作成しました。

機能の概要

生年月日を入力し、「レッツ計算!」ボタンを押すと、今まで生きてきた日数と残された日数を計算し出力します。

今後盛り込む予定の機能

ツールのURL

http://hinata.la.coocan.jp/tool/hauko.cgi

ソースイメージ

#!/usr/bin/perl

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
@months=("01","02","03","04","05","06","07","08","09","10","11","12");
@days=("01","02","03","04","05","06","07","08","09","10","11","12","13","14","15",
		"16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");
%daysofmonth=(
		"01"=>'31',
		"02"=>'28',
		"03"=>'31',
		"04"=>'30',
		"05"=>'31',
		"06"=>'30',
		"07"=>'31',
		"08"=>'31',
		"09"=>'30',
		"10"=>'31',
		"11"=>'30',
		"12"=>'31'
		);

sub decode {
    local($args, $n_read, *terms, $tag, $value);

    $ENV{'REQUEST_METHOD'} eq "POST" ?
    ($n_read = sysread(STDIN, $args, $ENV{'CONTENT_LENGTH'})):
    ($args = $ENV{'QUERY_STRING'});

    @terms = split('&', $args);

    foreach (@terms) {
        ($tag, $value) = split(/=/, $_, 2);
        $value =~ s/\+/ /g;
        $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/ge;
        $tags{$tag} = $value;       # tags is global
    }
	require 'jcode.pl';
	jcode::convert(\$tags{handlename}, 'euc');
}
sub uruuchk{
	my $year=$_[0];
	if(($year % 400)==0){$daysofmonth{02}=29;return 1;}
	elsif(($year % 100)==0){$daysofmonth{02}=28;return 0;}
	elsif(($year % 4)==0){$daysofmonth{02}=29;return 1;}
	else{$daysofmonth{02}=28;return 0;}

}
sub set_bornyeardays{
	my $ret=0;

	my $uruu_flg=&uruuchk("$tags{b_year}");
#	print "tags{b_month}=$tags{b_month}<br>";
#	my $b_month=$tags{b_month};
#	print "daysofmonth{02}=$daysofmonth{02}<br>";
#	print "daysofmonth->tags{b_month}=$daysofmonth{$tags{b_month}}<br>";
#	print "tags{b_day}=$tags{b_day}<br>";
#	print "daysofmonth{02}=$daysofmonth{02}<br>";
	if($daysofmonth{$tags{b_month}} < $tags{b_day}){
		print "$tags{b_year}年$tags{b_month}月$tags{b_day}日は存在しません!←この表示バグあり<br>";
	}
	foreach my $month (@months){
		if($month eq $tags{b_month}){
			$ret += ($daysofmonth{$tags{b_month}}-$tags{b_day}+1);
#		print "ret=bornyeardays$month,$ret<br>";
		}elsif($month > $tags{b_month}){
			$ret +=$daysofmonth{$month};
#		print "ret=bornyeardays$month,$ret<br>";
		}
	}
#	print "bornyeardays=$ret<br>";
	return $ret;
}
sub set_tonow{
	my $today = sprintf("%04d%02d%02d", $year + 1900, $mon +1, $mday);
	my $bornday= "$tags{b_year}$tags{b_month}$tags{b_day}";
	my $nowyear  = sprintf("%04d", $year + 1900);
	my $nowmonth = sprintf("%02d", $mon +1);
	my $nowday   = sprintf("%02d", $mday);
	my $ind=0;
	my $ret=0;
	my $uruu_flg=&uruuchk($nowyear);
#	print "today=$today<br>";
	if($today < $bornday){
		print "あなたはまだ生まれていません!<br>";
	}
#	print "nowmonth=$nowmonth<br>";
	if($tags{b_year} eq $nowyear){
			if($uruu_flg == 1){
				$ret -=366;
#			print "ret=eq,$ret<br>";
			}elsif($uruu_flg == 0){
				$ret -=365;
#			print "ret=eq,$ret<br>";
			}
#			$ret +=1;
	}else{
		for($ind=$tags{b_year}+1;$ind<$nowyear;$ind++){
			$uruu_flg=&uruuchk($ind);
			if($uruu_flg == 1){
				$ret +=366;
#			print "ret=$ind,$ret<br>";
			}elsif($uruu_flg == 0){
				$ret +=365;
#			print "ret=$ind,$ret<br>";
			}
		}

	}
	$ret +=&set_bornyeardays;
	$uruu_flg=&uruuchk($nowyear);

	foreach my $month (@months){
		if($month < $nowmonth){
			$ret +=$daysofmonth{$month};
#		print "ret=$month,$ret<br>";
		}elsif($month eq $nowmonth){
			$ret += ($nowday-1);
#		print "ret=$month,$ret<br>";
		}
	}
	return $ret;
}
sub set_remain{
	my $tonow=$_[0];
	if($tags{which} eq "mydeadline"){
		return "<font color=\"red\">この機能は未実装</font>";
	}elsif($tags{which} eq "haukosdeadline"){
		return 30000-$tonow;
	}
}
sub printkekka{
	print "<font size=\"5\">中川翔子先生の名言「人生3万日しかない」ツール 計算結果♪</font><br><br>";
	my $tonow=&set_tonow;
	my $today=$tonow+1;
	my $remain=&set_remain("$tonow");
	my $which="";
	if($tags{which} eq "mydeadline"){
		$which="$tags{grim_reaper}歳の誕生日";
	}elsif($tags{which} eq "haukosdeadline"){
		$which="3万日";
	}

	print <<"EOL";
	

	<font size="5">$tags{handlename}さんは昨日まで</font>
		<font size="6">$tonow日</font>
	<font size="5">生きてきました。</font><font size="2"> ※ 生年月日含む</font><br>
	<font size="5">今日は</font>
		<font size="7" color="red">$today</font>
	<font size="6">日目</font><font size="5">です!</font><br>
	<font size="5">$whichまで残り</font><font size="6">$remain日</font><font size="5">です。</font><font size="2"> ※ 今日を含む</font>
	<form method="POST" action="./hauko.cgi">
		<input type="hidden" name="handlename" value="$tags{handlename}">
		<input type="hidden" name="b_year" value="$tags{b_year}">
		<input type="hidden" name="b_month" value="$tags{b_month}">
		<input type="hidden" name="b_day" value="$tags{b_day}">
		<input type="hidden" name="which" value="$tags{which}">
		<input type="hidden" name="grim_reaper" value="$tags{grim_reaper}">
		<input type="submit" value="再入力" name="submit">
	</form>
	・関連ページ<br>
	 <a href="http://ameblo.jp/nakagawa-shoko/" target="blank">しょこたん☆ブログ</a><br>
	 <a href="http://www.mhlw.go.jp/toukei/saikin/hw/life/life08/index.html" target="blank">厚生労働省:日本人の平均余命 平成20年簡易生命表</a><br>
	 <a href="http://www2.ttcn.ne.jp/honkawa/1620.html" target="blank">図録▽世界の平均寿命ランキング</a><br>
	・関連名言<br>
	 <a href="http://www.kotodama.in/quote/51041" target="blank"><font size="5">今日という日は、残りの人生の最初の一日である。</font></a><br>
	 <a href="http://www.kotodama.in/quote/54293" target="blank">人生3万日しかない</a><br>
	 <a href="http://www.kotodama.in/quote/52208" target="blank">人生は一歩一歩、死に向かっている。</a><br> <br> <br>


EOL
}
sub chk_param{
	my $ret=0;
	print "<font color=\"red\"><b>";
	if($tags{handlename} eq ""){
		print "お名前を入力してください。<br>";
		$ret=1;
	}
	if($tags{b_year} eq ""){
		print "生年を入力してください。<br>";
		$ret=1;
	}elsif($tags{b_year} !~ /^[0-9]+$/){
		print "生年には数字を入力してください。<br>";
		$ret=1;
	}
	if($tags{which} eq "mydeadline"){
			if($tags{grim_reaper} eq ""){
				print "中川翔子先生を信じないのなら想定享年を入力してください。<br>";
				$ret=1;
			}elsif($tags{grim_reaper} !~ /^[0-9]+$/){
				print "想定享年には数字を入力してください。<br>";
				$ret=1;
			}
	}
	print "</font></b>";
	return $ret;
}

sub b_month_select{

	my $ret="<select name=\"b_month\">";
	foreach my $month (@months){
		if ($month eq $tags{b_month}){$selected="selected";}
		$ret=$ret . "\t<option value=\"${month}\" $selected>${month}</option>\n";
		$selected="";
	}
	$ret=$ret . "</select>";
	return $ret;
}
sub b_day_select{

	my $ret="<select name=\"b_day\">";
	foreach my $day (@days){
		if ($day eq $tags{b_day}){$selected="selected";}
		$ret=$ret . "\t<option value=\"${day}\" $selected>${day}</option>\n";
		$selected="";
	}
	$ret=$ret . "</select>";
	return $ret;
}

sub printform{
	my $mydeadlinechk="";
	my $haukosdeadlinechk="checked";
	my $monthselect=&b_month_select;
	my $dayselect=&b_day_select;
	if($tags{which} eq "mydeadline"){
		$mydeadlinechk="checked";
		$haukosdeadlinechk="";
	}
	print <<"EOL";
	<font size="5">中川翔子先生の名言「人生3万日しかない」ツール♪</font><br><br>
	このツールは<a href="http://ameblo.jp/nakagawa-shoko/" target="blank">中川翔子先生</a>の名言
	「人生3万日しかない」にインスパイアされ、作成されました。<br>
	生年月日を入力していただくと現在まで生きてきた日数と、残りの日数を計算致します。<br>
	<form method="GET" action="./hauko.cgi">
	<table border="1">
	<tr><td>お名前:</td><td><input type="text" name="handlename" size="30" maxlength="40" value="$tags{handlename}"></td></tr>
	<tr><td>生年月日:</td><td><input type="text" name="b_year" size="4" maxlength="4" value="$tags{b_year}" style="ime-mode:disabled">年
							$monthselect月
							$dayselect日
							<font size="2">※ 生年は西暦で入力してください。</font>
					</td></tr>
	<tr><td>想定享年:</td><td>
							<input type="radio" name="which" value="haukosdeadline" $haukosdeadlinechk>
							中川翔子先生が言うのだから、私は<font size="4">3万日</font>生きるに違いない。
							<font size="2">(※ 3万日生きると約82歳と50日)</font><br>
							<input type="radio" name="which" value="mydeadline" $mydeadlinechk>
							私は<input type="text" name="grim_reaper" size="3" maxlength="10" value="$tags{grim_reaper}" style="ime-mode:disabled">歳まで生きる!<font color="red">←この機能は未実装</font>
					</td></tr>
	<tr><td colspan="2" align="center"><input type="submit" value="レッツ計算!" name="submit"></td></tr>
	</table>
	</form>
EOL
}

print <<"EOL";
Content-type: text/html

<HTML>
<HEAD>
	<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
	<TITLE>中川翔子先生の名言「人生3万日しかない」ツール♪</TITLE>
</HEAD>
<BODY>
EOL

if ($ENV{'QUERY_STRING'} ne "") {
	&decode();
	$param_chk_result=&chk_param;
	if($param_chk_result==0){
		&printkekka;
	}elsif($param_chk_result==1){
		&printform;
	}

}else{
	&decode();
	&printform;
}
if($param_chk_result ne ""){
	$print_parm=<<"EOL";
$tags{handlename}さんは$tags{b_year}年$tags{b_month}月$tags{b_day}日生まれ、$tags{which}、$tags{grim_reaper}歳まで生きる。param_chk_result=$param_chk_result
EOL
}

print <<"EOL";
	<font size="1">動作に不具合等ありましたら<a href="http://hinata.la.coocan.jp/pukiwiki/?%BD%C4%BD%F1%A4%AD%A5%C4%A1%BC%A5%EB%2F%A5%D0%A5%B0%B4%C9%CD%FD%CA%ED" target="blank">ご連絡ください</a>。
	早急に対応したいと思います。(2009年8月27日<a href="http://hinata.la.coocan.jp/pukiwiki/?FrontPage" target="blank">日向充</a>)</font>
	<br><br>
	<script type="text/javascript"><!--
	amazon_ad_tag = "hinatamitsuru-22"; amazon_ad_width = "728";  amazon_ad_height = "90";//--></script>
	<script type=\"text/javascript\" src=\"http://www.assoc-amazon.jp/s/ads.js\"></script>
	<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=hinatamitsuru-22&o=9&p=20&l=qs1&f=ifr"
	width="120" height="90" frameborder="0" scrolling="no"></iframe>
	</BODY>
	</HTML>
EOL

改版履歴

090827(初版)

9月1日にちょっと直したので、ソースは9月1日のもので。

バグ管理簿


  • 新たに作り始めたしょこたんツールは是非rubyで開発して頂きたかった。。 -- o 2009-09-17 (木) 13:41:07
  • うぅ。。なんかすぐ作りたかったので、つい慣れてるもので作っちゃいました。。 -- 日向充 2009-09-19 (土) 21:19:25
  • いまからでも遅くない!このツールをrubyに書き換えよう!Dateクラスを使えばきっと簡単! -- o 2009-09-19 (土) 22:02:12
  • 確かに、そういうクラスを使わずに自前で計算してるのあほすぎですよね。rubyで書き直してみます! -- 日向充 2009-10-03 (土) 20:06:25


添付ファイル: filehauko.cgi.090901.txt 164件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-06 (木) 19:38:52 (2777d)