Home > 1月, 2008

2008.01.06

最近の購入本

昨年は『買おうか買うまいか迷った本は、2000円以下ならとりあえず買ってしまう』と心がけていました。実際には金銭面の問題で毎回実行というわけにはいきませんでしたが、それでも昨年はこれまでに比べればすごく本を買った年となりました。結果、置き場所に困っています。積読も溜まってきました。

それでもやっぱり書店に行くと目移りするねー。ぼくはAmazonよりも書店での方が気軽に散財できてしまうようです。たぶんコンビニ決済ゆえの面倒くささの賜物だろうと思いますが。あとブックオフの文庫本コーナーが結構いい。特に、お気に入りのサイト経由で薦められての購入がすごく多かった。アフィリエイトからの購入でないのが申し訳ないところ。

というわけで、今年に入っての購入本。レビューなしメモだけ。

なぜデザインなのか。

発売元: 平凡社
価格: ¥ 1,890
発売日: 2007/10/02

DESIGN IT! w/LOVEさん経由で。ベタ誉めでしたね。これから読み始めているけど、ほんとに良書すぎてびびった。ここのブログは自分と興味の方向性が一致していて、すごくためになる。

2日で人生が変わる「箱」の法則

発売元: 祥伝社
価格: ¥ 1,680
発売日: 2007/09/06

まなめはうすさん経由。前作も購入。さっき駅まで自転車取りに行ったついでに本屋に寄ったら売ってたから買った。こういう行動パターンが多いなあって思う。まなめさん愛してる!

3時間で「専門家」になる私の方法

発売元: PHP研究所
メーカー: PHP研究所
価格: ¥ 1,365
発売日: 2007/09/11

定番だけど、弾さんのとこから

2008.01.05

PHPで誕生日の曜日を千年分調べたら2038年問題の壁にぶちのめされた

概要

この恋がいつの日か 表彰台にのぼる時
君がメダルを受けとってくれないか
たとえば千年 千年じゃ足りないか
できるだけ長生きするから
 (千年メダル/ザ・ハイロウズ)

  • というようなわけで、各年の誕生日の曜日を表示するPHPプログラムを演習として組んでみた。
  • そしたら2038年問題の壁にぶちのめされた。
  • ここに公開しておきます。
  • (2008/01/07 12:34 追記)elfさまの指摘を受け、コードを一部改変しました。ありがとうございます。
    $month 	= $_POST{'month'};	//月を受け取る
    $day 	= $_POST{'day'};	//日を受け取る
      ↓ XSS対策
    $month 	= htmlspecialchars($_POST{'month'});	//月を受け取る
    $day 	= htmlspecialchars($_POST{'day'});	//日を受け取る
    
ソースコード

送信側(calendar.html)のコードは特別なことをしていないので省略します。

<html>
	<head>
		<title>PHPで誕生日の曜日を千年分調べたら2038年問題の壁にぶちのめされた</title>
	</head>
	<body>
	<h2>PHPで誕生日の曜日を千年分調べたら2038年問題の壁にぶちのめされた</h2>

	<?php
		//変数定義とか
		define("YEAR_START",1900);	//とりあえずこのへんからスタート
		define("YEAR_NUM",1000);	//表示する年数
		$year 	= YEAR_START;
		$month 	= htmlspecialchars($_POST{'month'});	//月を受け取る
		$day 	= htmlspecialchars($_POST{'day'});	//日を受け取る
		$weeks	= array('日','月','火','水','木','金','土');

		//ちょっと失礼して先にテーブルとか組ませてもらいますよっと
		print("<h3>".$month."月".$day."日の曜日を千年分表示しています</h3>");
		print("<table border='1px'><tr><td></td>");
		for ($i=0; $i<10; $i++) {
			print("<td>0".$i."年</td>");
		}
		print("</tr>");

		//ここから処理系
		$counter = 0;	//表示時折り返し用のカウンタ
		print("<tr><td><strong>".$year."年代:</strong></td>");	//妥協の塊
		for (; $year < YEAR_START+YEAR_NUM; $year++, $counter++) {
			//10個表示するごとに改行入れるんば
			if ($counter>=10) {
				print("</tr><tr><td><strong>".$year."年代:</strong></td>");
				$counter=0;
			}
			$week = date("w", mktime(0,0,0,$month,$day,$year));
			print("<td>$weeks[$week]</td>");
		}
		print("</tr></table>");
	?>
	</body>
</html>
出力結果

2008-01-05.JPG

  • ずっと木曜日のターン!なんぞこれー
  • 2038年問題っていうらしいよ。参照:【PHP TIPS】 8. 2038年問題:ITpro
  • 時間の変数を32ビットで表しているらしいのですが、この限界(2の32乗-1)が2038-01-19 12:14:07であり、これより未来に関する処理はオーバーフローしちゃって扱えないよーごめんねー。という問題。
  • PHPに関しては、PEARのCalcクラスを使用することによって対応できる。

うっわー!なんだこの小さな不幸は!困ったさんだなー。
実際に2038年になってこの問題に世間が脅かされるなんてことは、まあないはず。30年後にはコンピュータって単語が持つ意味そのものが変容しているだろー、というのが個人的な持論。

いい未来になっていてほしいもんです。などと考えたり考えなかったりしながら、次回の解決編へつづく。

2008.01.04

PHP独習中 - ヒアドキュメントが終了しなくてつまづいた

テストコード
<?php
	$hoge = "ほげ";
	print <<< EOD
		ヒアドキュメント開始!<br />
		ずっと俺のターン!<br />
		$hoge 変数も表示される<br />
		"'<>;/ この辺の記号も大丈夫<br />
		そろそろ終了なんだぜ<br />
	EOD;
?>

上のコード、全然よゆうで動きそうなものなのに、なんかエラーとかいうの。
ソースコードの最終行でエラー出てるから、EOD認識してないんじゃね? と思ったらやっぱりそうだった。

終了のIDの文字列の存在する行にはID以外は何も記述してはいけません。
IDの左側にスペースやタブ等を記述してもエラーとなります。

だってさー。テストコードにはEODの前にタブが入ってる。
正直タブぐらい入れさせていただきたいのだが。インデントさせてくれー。

2008.01.03

B’zの話

ぼくが奇妙に歪んだ青春時代を送っていた頃に恋していた女性は、B’zが好きでした。
そしてぼくはB’zがきらいになりました。
非常に、完全に、きらいになりました。

今ではもう嫌いということもなく、苦手くらいにはなっていると思います。
歪みというものはこういうところにもっとも顕著に現れるようです。

2008.01.02

PHP独習中 - 可変可変可変可変変数

memo
  • 『可変変数とは、変数名を変数でつけられる変数のこと』 うん、日本語でおk
  • サンプルコード追いかけたら簡単。要するにポインタのポインタっていうか参照の参照みたいなことかー、違うかもしれないけど。スクリプト言語特有かな?RubyとかLispにもあるのー?
  • 動的に変数名が付けられて鼻血が出るほど便利らしい。その便利さは今のぼくには 理 解 で き な い 。
  • ちょっとまて参照関係ループにできるんじゃね?
  • やってみたらできた
テストコード
<?php
	$foo = "bar";
	$bar = "foo";

	print ("<strong>変数</strong><br />");
	print ('$foo: '.$foo."<br />");
	print ('$bar: '.$bar."<p />");

	print ("<strong>可変関数</strong><br />");
	print ('$$foo: '.$$foo."<p />");

	print ("<strong>可変可変関数</strong><br />");
	print ('$$$foo: '.$$$foo."<p />");

	print ("<strong>可変可変可変関数</strong><br />");
	print ('$$$$foo: '.$$$$foo."<p />");

	print ("<strong>可変可変可変可変関数</strong><br />");
	print ('$$$$$foo: '.$$$$$foo."<p />");
?>
可変変数の補足メモ
  • $foo => bar
  • $$foo => $ $foo => $ bar => $bar => foo

変態だー!

実行結果

変数
$foo: bar
$bar: foo

可変関数
$$foo: foo

可変可変関数
$$$foo: bar

可変可変関数
$$$$foo: foo

可変可変関数
$$$$$foo: bar

すごく・・・ループです・・・
無限って気持ちいいよねー

2008.01.01

PHP独習中 - return未定義の関数の戻り値はNULL

  • 地獄のようにどうでもいいのだけれど、本に載ってなかったのでテストしてみたらNULLだった
  • ふつうだー
テストコード
<?php
	function test() {
		print ("exec test()<p />");
	}
	$ret = test();
	print(gettype($ret));
?>
結果

exec test()
NULL

じゃーん。NULLでしたー。

« Previous | Next »