星座の計算

javascript の演習で誕生日から星座を計算させようと思ったのだけど、 これが案外大変。 春分の日を起点として1年を12等分すれば良いらしいのだが、 春分の日は毎年変わる。 3月19日だったり21日だったりする。 3月20日がだいたい春分の日だとする。

一年を12で割るといっても、一年は 365日だ、いや、ユリウス暦では 365.25日であり、 グレゴリオ暦では365.2425日だが、 オマル・ハイヤームが作ったジャラーリー暦では 365.24219858156日であり、 天文年鑑では 365.24218987日。 これまた変動があって何千年単位では変動する。

あんまりまじめに考えるのもあれなので適当にコーディングしてみた。

<html>
<head>
<style>
input { width: 50px; }
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
var calc = function(){
  var today = new Date();
  var year = parseInt($("#year").val());
  var month = parseInt($("#month").val());
  var day = parseInt($("#day").val());
  var birthday = new Date(year, month - 1, day);
  var shunbun = new Date(year, 2, 20);
  var seiza = Math.floor((birthday - shunbun)
    / 24 / 3600 / 1000 / 365.242 * 12) + 2;
  var names = new Array("水瓶","魚","牡羊","牡牛","双子","蟹",
    "獅子","乙女","天秤","蠍","射手","山羊");
  $("#result").html('あなたの星座は' +  names[seiza] + '座です。');
}
</script>
</head>
<body>
<form>
年 : <input type="text" id="year">
月 : <input type="text" id="month">
日 : <input type="text" id="day">
<input type="button" value="submit" onclick="calc()">
</form>
<span id="result"></span>
</body>
</html>

$("#result").html('あなたの生年月日は' + xxx + 'です。') .append('あなたの星座は' + yyy + '座です。'); と書くのが jQuery っぽいおしゃれな書き方だ。しびれるな。

Web もなかなか捨てがたいものがあるよなあ。 3年生くらいに javascript 演習とか持っても良いかもしれん。 Web やりたいやつと CG やりたいやつに両方ゼミに来られると困るのだが。 なんとかならんものかと思うがなるもんならとっくにそうしているわけだが。

思うに、サーバサイドの側は言語とかデータベースとかばらばらだが、 クライアントサイドは javascript ほぼ一本に標準化されつつあると思う。 携帯端末でもPCでもなんでも動く。どのブラウザでも動く。 そりゃ当たり前だわな。javascript は html 標準なのだから。 Google Chromejavascript コンソールなんてめちゃくちゃ便利だよ。

フォーム入力とかある程度のことは javascript でできてしまう。 むろんデータベースから読み込んだり書き込んだりするにはサーバにアクセスするしかない。 クライアントだけではできないことだ。 しかし、毎度毎度 submit ボタン押してそのたびにサーバサイドのCGI呼び出すのは、 まぬけなやり方だ。 毎回毎回別ウィンドウ開いて javascript はウィンドウをポップアップして、 サーバーサイドスクリプトを呼び出すだけ、というシステム見ると、 まじでいらっとくる。 もまいら twitterfacebook の時代に未だにこんな UI 作っていていいのかと。

入力途中はクライアントサイドでできるだけ処理して一度にまとめてサーバにクエリかける、 というのがおしゃれなやり方である。 データをサーバサイドスクリプトjavascript でやりとりするのは面倒だから、 つい全部サーバサイドでやってしまいたくなるのだが、 JSONjavascript とサーバが通信することも不可能ではなく、 そのやり方が理想だ。 という辺りが非常に重要である。

かつ、外れが少ない。つぶしがききやすい。 サーバーサイドの言語をいくら勉強しても他の言語が出てきたらもう役に立たない。 というよりその環境にしがみついているとどんどん時代に取り残される。

しかし、javascript にはその不安がない。 javascript は常に進化し続ける。 だから、プログラミング言語教育は須く javascript に収束すべきだ、 などと考えたりもする。