PHP の学習 (25) 簡単なエラー処理 (3)

今日の学習

昨日の続きです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
if (isset($_POST["uranai"])) {
  $age = mb_convert_kana($_POST["age"],"a","EUC-JP");
  $error_msg = array();
  if (is_numeric($age) == false) {
    $error_msg[] = "please type numeric.";
  } elseif ($age < 1 || $age > 120) {
    $error_msg[] = "please input 1< and >120";
  }

  if (!count($error_msg)) {
  $sorry_msg = "ng";
  $uranai_msg[1] = "you are 10-19.";
  $uranai_msg[2] = "you are 20-29.";
  $uranai_msg[3] = "you are 30-39.";
  $uranai_msg[4] = "you are 40-49.";

  $sedai = floor($age / 10);

  if (isset($uranai_msg[$sedai])) {
    print($uranai_msg[$sedai]);
  } else {
    print($sorry_msg);
  }
  }
} else {
  $age = 25;
}
?>
<html>
<body>
<?php
if (count($error_msg)) {
  foreach($error_msg as $msg) {
    print($msg);
  }
}
?>

<form action = "sample_uranai2.php" method = "POST">
  年齢を教えてください:
<input type = "text" name = "age"
 value = "<?php print(htmlspecialchars($age, ENT_QUOTES));?>">
<input type = "submit" name = "uranai" value = "submit">
</form>
</body>
</html>

if (!count($error_msg)) のところで $error_msg が空だった場合に、変数 $sorry_msg 、$uranai_msg にそれぞれ表示させるメッセージを代入します。

次に、入力された年齢 $age を 10 で割り、その商を floor() で端数切り捨てにしたものを $sedai に代入しています。

1
2
3
4
5
  if (isset($uranai_msg[$sedai])) {
    print($uranai_msg[$sedai]);
  } else {
    print($sorry_msg);
  }

↑ 次の if 節ではまず isset() で $uranai_msg のインデックスに $sedai を入れた場合の中身の有無を判定します。$uranai_msg には [1] から [4] まではメッセージを入れていますね。

$sedai が 1~4 の場合はそれぞれに対応したメッセージを表示し、それ以外の場合は $sorry_msg を表示します。

1
2
3
} else {
  $age = 25;
}

↑ 最後の else 節は一番最初の if (isset($_POST["uranai"])) { にかかっています。$_POST["uranai"] が空の場合ということは、つまりこのフォームが最初に表示されたときですね。要するに初期値として $age に 25 を代入していると。なるほど。

PHP の学習 (2) フィボナッチ数列

今日の学習

昨日の続きですが、とりあえず正しく動くコードを見てみることにしました。
参照したのは下記エントリ。

初期値の設定について、僕もよくわからなかったのでもう一度考えてみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function fib($n) {
    $a = 1;
    $b = 0;
 
    while (($a+$b) < $n) {
        $r = $a + $b;
        print $r . "<br>";
        $a = $b;
        $b = $r;
    }
}
print fib(200);
?>

Python だとこうなります。

1
2
3
4
5
6
7
def fib(n):
    a,b = 0,1
    while b < n:
        print b
        a,b = b,a+b

print fib(200),

Python のほうは値を一括で代入できているから短く書けるのかと思われます。こういうのは PHP でも配列 array() とかで実現できるのかな?まだよくわかっていないので要調査です。

今日の復習 宿題

PHP も Python でいう IDLE のように対話形式で実行できる環境が欲しいです。
先日軽く調べたときの情報では PHP をコンパイルするときにオプションを設定しなければいけない、という感じだったと思いますので少々難しそうな印象がありますが、が学習効率のことを考えると必須に思えてきました。
(そもそも、自分でソースからコンパイルするのが普通、という世界に向かっているのですし)

あがりを回避する方法 キュー・ワード法 (Cue Word 法)

The 2009 Bobby Martin Memorial Golf Outing
(Original Update by AuthenticEccentric’s Photostream)

これも COURRIER JAPON 10 月号からです。
「あがり症」のメカニズムというのは、「自分の動作に神経質になる」→「意識過剰になり、どんなミスも犯すまいと考えてしまう」→「自然でスムーズな動きができなくなる」→「持ち前の能力・才能を発揮できない」というものらしいです。

これを回避する方法について、ウェスタン・オーストラリア大学の心理学教授が次のような調査をしたそうです。

熟練ゴルファーを対象に 3 つの状況でプレーしてもらい比較する

  1. スイングのある部分的な要素にこだわって(腰の動き、手首をまっすぐ伸ばす、など)プレーする
  2. ゴルフと無関係な言葉(「青」とか「白」とか)だけを考えてプレーする
  3. 説明的な形容詞(「スムーズに」とか「バランスよく」など)を頭の中で唱えてプレーする

だいたい想像がつきそうですが、1 番のように細かい部分だけを気にしていると「あがり」状態になり冴えないショットを打ってしまい、逆に 3 番のように漠然として曖昧な形容詞を意識しているとプレーが乱れることがなかったとのこと。
(2 番はどうだったんでしょうか…)

この、陳腐でありきたりな言葉を一心に考えるという、 3 番目のやり方をキュー・ワード法というそうです。あのタイガー・ウッズも

「精神的に強いと人は言うけど、実際には『あきらめてはだめだ』『負けるな』『自分が持っている最高のものを引き出す以外ない』といったことを考えているだけなんだ」

と話していたというので、トッププロも実践している手法のようですね。漠然とした目標に意識を集中させることで、考えすぎを防いで「あがる」ことなく力を発揮できる、というのはなるほどそうなのかなと納得できる気がします。

ちなみにキュー・ワード法の Cue Word というのは放送業界の用語でアナウンサーや出演者とスタッフの間で決めておく暗号のことだそうです。

例えば、プロ野球のナイター中継などでCMへ入る前に「アナウンサーが『この放送は××球場からお送りしております。』というと5秒後にCMへ行くんですよ。」とか、「このマークが右下に出たら5秒後にCMへ行くんだよ」といった取り決めをしておくこと。
か行|放送用語辞典|群馬テレビ

「目標を達成するには具体的に、詳細にイメージすることが大切」という話もよく聞きますが、それとは別に、いざというときにあがってしまわぬようにこういった方法もある、というのは覚えておいてもよいかもしれません。

COURRiER Japon (クーリエ ジャポン) 2010年 10月号 [雑誌]
COURRiER Japon (クーリエ ジャポン) 2010年 10月号 [雑誌]

現代を知るための名著 100 冊 (COURRIER JAPON 10 月号付録)

いま店頭に並んでいる COURRIER JAPON 10 月号に特別付録として、現代を知るための新・「世界の名著」を 100 冊集めた、書籍ガイドが付いています。この付録に心惹かれて購入しました。

  • 世界・各国情勢
  • 世界経済
  • 社会
  • 広告・マーケティング
  • マネジメント
  • 自己啓発
  • ビジネス評伝
  • IT
  • 科学
  • 世界が見たニッポン
  • 歴史

上記 11 の分野にわたって編集部が選んだ海外翻訳書(ノンフィクション)の傑作が紹介されています。
ざっと見た限りでは古い本ばかりではなく、最近出た本なんかもちらほら入っているみたいです。「グーグル秘録」とか「facebook」、「小さなチーム、大きな仕事」とか。

「世界・各国情勢」や「科学」、「世界が見たニッポン」といった自分があまり見聞きしてこなかった分野の書籍について知ることができるのはありがたいですね。

時間(とお金)を見つけて少しずつでも読み進めて 100 冊全部を読破したいと思います。

COURRiER Japon (クーリエ ジャポン) 2010年 10月号 [雑誌]
COURRiER Japon (クーリエ ジャポン) 2010年 10月号 [雑誌]

blog デザイン変更の詳細

この blog は WordPress というソフトウェアで運営しているのですが、WordPress はデザインの変更を「テーマ」の差し替えによって行います。これまではデフォルトのテーマを使用していましたが、少し好みじゃない部分があったため、変更したいなぁとは思っていました。

以前に Movable Type でこの blog を運営していたときも最初はデフォルトのデザインで使っていましたが、Vicuna というデザインテンプレートに変えていました。

この Vicuna というのは Movable Type だけではなく、WordPress や Nucleus, Serene Bach などの CMS(Contents Management System = blog などの仕組みを提供するソフトウェア、かな?) にも対応していて (FC2 blog 用もある)、デザインのカスタマイズ性の高さなどで好評を博しているデザインテンプレートです。

テンプレートのソースコードはXHTML1.0 StrictのDTDに準拠して書かれており、無駄なく表示も軽い作りになっています。また、XHTMLとCSSの両方でカスタマイズを考えた構成になっていますので、構造の変更・デフォルトスキンから自分の好みに合わせて簡単にレイアウトやスタイルを編集することができます。 SEOを考慮したリンク構造と柔軟なスキンにより、個人サイトからビジネスサイトまでお使いいただけるテンプレートです。
http://vicuna.jp/

WordPress 用はこちらからダウンロードできます。
この WordPress 用 Vicuna をさらに改良し「PHP、XHTML、CSS の知識なしにカスタマイズができるように」独自の拡張を試みている wp.Vicuna Ext. というテーマを公開されている方がいらっしゃいます。

ma38su.org – wp.Vicuna Ext
http://ma38su.org/projects/vicuna-ext/

ここまでは、以前に WordPress のテーマ変更について調べているときに確認していたのですが、今回はもう少し続きがありまして、上記の wp.Vicuna Ext. へさらに改良を施しているテーマ、 wp.Vicuna Ext. Custom を公開されている方がいらっしゃいました。

the Fang of Sky – wp.Vicuna Ext. Custom
http://fos.uzusionet.com/wordpress/vicuna

上記サイト上に記載されている、「wp.Vicuna Ext. との違い」を読んでみたところ、こちら (Custom) のほうがよさそうでしたので、最新バージョンをダウンロードしました。

実際のデザインの変更手順は、ダウンロードした zip ファイルを解凍し、wp.vicuna.exc という名前のフォルダができるので、それをサーバにアップロードします。アップロード先は、サーバ上の WordPress のフォルダにある

1
*****/wp-content/themes/

というフォルダですね。

アップロードが完了したら、WordPress の管理画面をみると「外観」の設定でテーマを変更することができるようになっているはずです。
WordPress 管理画面 ss

↑ こんな感じに。