『たのしい写真』が気になる

たのしい写真―よい子のための写真教室

たのしい写真―よい子のための写真教室

この本がすごく気になってる。多分買ってしまう気がする。最近写真を撮影していて、「どうしたらいいのかな?」とか「写真って何なんだろう?」と思うことが増えてきたりしていたので。テクニック的なことや機材的なことは抜きにして、写真の面白さを語ってくれるような本が読みたい。

karintoは関数書いていく感じに戻りました

迷走ばっかりしてますけど。

Limonadeとか見てて、関数ベースも悪くないじゃんとか思ったのでkarintoを再び関数で実装を書いていく感じに戻しました。クラスとか書かなくていいです。

次のコードで、/index.php/fooを表示します。

/index.php

<?php
require_once 'karinto.php';
karinto::run();

// GET /foo
function get_foo($req, $res)
{
    $res->message = 'Hello ' . $req->name;
    $res->render();
}

/templates/get_foo.php

<html>
<body>
<?php echo $message; ?>
</body>
</html>

Limonadeはdispatch関数でURLと関数のマッピングを定義していく感じになってるけど、karintoはリクエストメソッドとPATH_INFOを元に実行する関数を決めていきます。なのでマッピングの定義とか不要(でも指定できると便利な局面もあるのかな)。

karintoはテンプレートの扱いが割と普通(テンプレートファイルを読み込んで表示)なのだけれど、LimonadeはテンプレートもPHPの関数として実装するようになってますね。その発想はなかった。

# それにしてもLimonadeって命名とロゴがかわいいな

AmazonのAPIでHMACSHA256が必要になる件

AmazonAPIを使う場合に認証コードが必要になる件だけど、HMACSHA256だからPHPだとこうだね。

<?php
$data = 'GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06';

$secret_key = '1234567890';

$hash = hash_hmac('sha256', $data, $secret_key, true);

var_dump(base64_encode($hash));
// string(44) "Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg="

PHP 5.1.2から標準で使えるhash_hmac関数があるおかげで簡単。

『少し変わった子あります』読んだ

少し変わった子あります

少し変わった子あります

読んだ。けど読む人を選びそうな作品かも。どちらかと言うとひとりでいることが好きで、渋谷とか人混みが大嫌いな人はすんなり世界に入っていけそう。入っていけない人は入っていけないまま終わってしまいそう。そういう作品。

PHPのリフレクションってどうなんだろ

PHPのリフレクションって使われてるのかな。PHPのマニュアルでもわかりづらい場所に解説があって、決して重要視されてる感じがしない。

ちなみに、karintoではメソッドの引数の個数に応じてkarinto_sessionのインスタンスを生成するかどうかを判断している箇所があって(karintoクラスのrunメソッド)、そこでだけリフレクションを使ってる。

<?php
if (method_exists($page, $method_name)) {
    $ref = new ReflectionMethod($page_name, $method_name);
    if ($ref->getNumberOfParameters() < 3) {
        $ref->invoke($page, $req, $res);
    } else {
        $session = new karinto_session($res);
        $ref->invoke($page, $req, $res, $session);
    }
}

便利と言えば便利なんだけど、元々PHPにはcall_user_funcとかproperty_existsとかクラス・関数操作用の関数群があるので、余程の事情がない限りリフレクションを使う機会って多くない気がする。

タイプヒンティングって書いてますか

PHPのタイプヒンティングってどこまできちんと書くものなのだろう。

名前空間がないという制約ゆえに、どうしても長くなってしまいがちなPHPのクラス名。メソッドの引数できちんとタイプヒンティングを記述すればものすごく長い記述になってしまうし、クラスのメンバー変数にはタイプヒンティングが使えないという中途半端なPHPの仕様もあって、いまいち使われていないような印象がある。

ただ書いておくとメリットもあって、IDEなどを使って開発する場合にメソッド名などの補完が効きやすくなるという効果はある。