検索
カレンダー
2007年1月
« 12月   2月 »
 123456
78910111213
14151617181920
21222324252627
28293031  
ブログメニュー
Amazon検索
キーワード:

中国の人工衛星破壊実験と囚人のジレンマ

2007年1月24日

最近、『中国、衛星破壊のミサイル実験に成功 』というニュースがありました。この結果、スペースデブリ が大量に発生したようです。

このスペースデブリに関して、最近『使用中の人工衛星や有人衛星などに衝突する危険性が問題となっている』そうで、今回の中国の行動は、他国にかなり迷惑をかけていると言わざるを得ません。

このニュースを聞いて、私は「囚人のジレンマ 」を思い出しました。私は数学やゲーム理論に疎いので完全には理解できていませんが、国際情勢をこのゲームに当てはめてみると、今回の中国は「裏切り」を 行ったということになります。無限回の囚人のジレンマゲームで、全体的に有益になるのは「しっぺ返し戦略」だと言われています。この「しっぺ返し戦略」を 他の国が採るなら、次回は他の国が「裏切り」を行うのが有益ということになってしまいます。

中国は、他国が「しっぺ返し戦略」を採らないと思っているのでしょうかね。

PHPの処理を中断させない方法

2007年1月17日

PHPで標準で以下のような機能が実装されています。

  • ブラウザとの接続が切れた場合(ブラウザの「中止」ボタンが押された場合や閉じられた場合)に処理を中断する
  • ブラウザからのリクエストがあってから、30秒以上経過しても処理が終わらなければ中断する

これらの機能は、スクリプトにバグがある場合などで処理が終了できなくなった際の予防です。ですが仕事でPHPを使っている場合、どうしても処理を中断させたくない場合があります。

この場合、上記の2つの機能を無効にする必要があります。ただしタイムアウト時間を無限にした場合、本当に無限ループに入っている場合に終わらなくなってしまいますので、タイムアウト時間を十分に長いものに指定することをお勧めします。設定方法は以下のようになります。

【php.iniに設定する場合】
ignore_user_abort = On
max_execution_time = 86400

【.htaccessに設定する場合】
php_value ignore_user_abort On
php_value max_execution_time 86400

【プログラム中で設定する場合】
ignore_user_abort(1);
set_time_limit(86400);

ただし、PHPがセーフモードで動いている場合は効果がありません。また、ブラウザで処理に時間がかかるプログラムを呼び出した場合は、定期的に何かを出力していないとブラウザ側でタイムアウトしてしまう場合があります。(処理自体は最後まで実行されます)

参考:
PHP マニュアル その他の関数(Misc)
PHP マニュアル PHP オプションと情報(info)

言い伝えについての考察

2007年1月5日

明けましておめでとうございます。
皆様は正月休みをどのように過ごされたでしょうか。
私は実家に帰って両親と雑談してきました。
私の母は風水や占いといったものが大好きで、「占星術の本によると、今年の運勢は…」だとか、「風水の先生の話では、この家は風水的に…」だとか色々聞かされました。

私はいつも、こういった話に違和感を感じます。それは、占いや風水は「結果」だけを強制して、論理的な「理由」を教えてくれないからです。
例えば、風水的では鬼門にトイレを配置してはいけないようで、これは風水では有名な話のようです。(私は風水には詳しくないので本当かどうか知りませんが…。)では、なぜ鬼門にトイレを配置してはいけないのでしょうか。
私の想像ですが、この言い伝えには以下のような理由があるように思います。
昔のトイレはかなり不衛生でしたので、これが居住空間の風上にあると、細菌が繁殖しやすい環境になったのだと思います。この「風上」が鬼門や裏鬼門の位置にあたり、結果的に「鬼門にトイレを置いてはいけない」となったのではないでしょうか。
このような理由がわかって初めて、守るべき言い伝えかどうかがわかると思います。

プログラムの世界も同じようなもので、よく「GOTO文は書いてはいけない」だとか、「コードは1行80文字に収まるように書くこと」などといった、言い伝えと化しているものがあります。
これらの言い伝えを守るも守らないも自由だとは思いますが、どちらにしても理由をしっかり考えてから決めたいものです。