自分の記事へのリンクがあればまあ良いかなと思っています。
リンクのありなしでしょんぼり度がかなり違いますからね。
これはありますね。
大量のトラックバックスパムに紛れて本物のTBキター!
 ↓
自記事への言及無し
 ↓
ガッカリ・・・
 ↓
少しでも関連のあるサイトに片っ端からTB打ったのかも?
 ↓
むしろ小腹すら立つ
自分の記事へのリンクがあればまあ良いかなと思っています。
リンクのありなしでしょんぼり度がかなり違いますからね。
これはありますね。
大量のトラックバックスパムに紛れて本物のTBキター!
 ↓
自記事への言及無し
 ↓
ガッカリ・・・
 ↓
少しでも関連のあるサイトに片っ端からTB打ったのかも?
 ↓
むしろ小腹すら立つ
Mojavi2、こんなFilterはどうだろうか。
<?php
class MessageFilter extends Filter {
    function execute(&$filterChain, &$controller, &$request, &$user) {
        if ($request->hasAttribute("messages") === false) {
            // global messages
            $globalMessagesPath = BASE_DIR."configs/messages_".DEFAULT_LANG.".ini";
            if (is_readable($globalMessagesPath)) {
                $messages = parse_ini_file($globalMessagesPath);
            }
        }
            // module messages
            $messagesPath = $controller->getModuleDir()."config/messages_".DEFAULT_LANG.".ini";
            if (is_readable($messagesPath)) {
                $messages = array_merge($messages, array($controller->getCurrentModule() => parse_ini_file($messagesPath)));
            }
            $filterChain->execute($controller, $request, $user);
        }
    }
}
?>messages_ja.ini, messages_en.iniとか置いといて読み込むことで多言語化の枠組みを提供するFilter。
アプリ共通のiniとモジュール毎のiniを両方読み込む。
strutsのように環境変数から勝手に切り替えるようにしたいんだけどHTTP_ACCEPT_LANGUAGEのパースが面倒臭い。MojaviのRequestにもServletRequest.getLocale()があれば・・・。
RubyForge is a home for open source Ruby projects; thanks to the folks who make it possible!
RubyForgeて、
Ruby界隈はどんだけアツいんだよ!
Tociyuki::Diary – Perlによる依存性の注入のデモ
JavaにはSpring、RubyにはNeedleやCoplandなどのDIフレームワークがありますけど、Perlでは目立たないなと思って試しに書いてみたわけです。
RubyのDIコンテナ、NeedleとCopland。メモ。
Mojavi Japanなど含めて2~3日サイトがアクセスできない状態にありました。
土日、LAN内からは見えてたから気づかなかったです・・・。
「落ちてる!」と教えてくれた方々、ありがとうございました。
・・・というかdist-upgradeの誘惑に負けた。
先週、社内でPHPに関する質問メールを頂きました。
「MojaviのRequestクラスのsetAttributeメソッドとsetAttributeByRefメソッドの違いがわからない。」
というものです。
値渡しか参照渡しの違いですが、おれ自身、参照を本当に理解しているかあやしいもんです。本当に理解していないとわかりやすく説明することはできません。
概念を本当に理解したかどうかは言語化(コード化)、もしくは図にできるかどうかで判断することにしています。
「Prove it.(証明せよ)」ということでMojaviでのサンプルを作ってみました。
<?php
class DefaultIndexAction extends Action {
    function execute(&$controller, &$request, &$user) {
        $value = "foo";
        $request->setAttribute("value", $value);        // real
//        $request->setAttributeByRef("value", $value);    // ref
        $value = "bar";
        echo $request->getAttribute("value");
        return VIEW_NONE;
    }
}
?>setAttributeとsetAttributeByRefで動作が変わる最小限サンプルです。
質問への回答はメールに返信してこのサンプルも一緒に送ったんですが、果たして解りやすい説明だったかどうか・・・自信がイマイチです。
PHP、すごく手軽で良いですね。セッション管理が楽だー。
これならさくさくといろいろ面白いサービスが作れそうですね。
とりあえず、今後はDBとの連携を一通りやってみるつもり。
いつも楽しみに見ているたつをのChangeLogのたつをさんがPHPをはじめられたっ!
せっかくなので自分が「そういうの最初から教えておいてくれよ」と思ったことを書き出してみます。
PHP Switcher Q&A
Q. GETやPOSTを手っ取り早く取りたいんだけどCGIモジュール的なものは?
A. PHPコアの機能に含まれています。GETやPOSTのデータは自動的にグローバル変数の$_GET, $_POSTに連想配列として入っています。
Q. セッションは?
A. PHPコアの機能に含まれています。$_SESSIONというグローバル変数(連想配列)に代入するだけでセッションにデータが入ります。
Q. 配列と連想配列はどう違う?
A. 配列と連想配列は内部的には同じモノです。添字に文字列を指定すると連想配列になります。(添字に数字と認識できる文字列を入れると自動的に数値に変換されます。)
Q. ヘッダはどうやって書く?
A. Apacheモジュール版PHP(mod_php4)ではヘッダは自動的に付与されます。明示的に書きたい場合はheader関数を使います。それに対してコマンドライン版PHP(cli)が存在します。
Q. サードパーティ製モジュールは?
A. PerlでいうCPANにあたるPEARというリポジトリサイトがあります。(モジュールの登録には他のPEARメンテナの賛成投票が5票以上必要でstable/unstableという分類もあるため、CPANよりモジュール数が少ない代わりに一定の品質は保障されています。)
Q. PHP自体に機能を追加したい
A. Pure PHPのみのPEARに対して、Cで書かれたPHP extentionのリポジトリサイトとしてPECL(ぴくる)があります。
Q. Template-toolkit的なものは?
Q. PHP自体がHTMLに埋め込めるんだからテンプレートエンジンなんていらないんじゃないの?
A. そういう考えのもと、PHP自体をテンプレートとして扱うSavantというテンプレートエンジンもあります。
Q. Webアプリケーションフレームワークは?
A. Mojavi!
その他、国産フレームワークのMaple、Ethna、Java Seasar2のPHPポーティングS2PHP5などが有名です。
Q. O/Rマッパーは?
A. PEAR DB_DataObject。PHP5ではPropelなど。
PHP全体の印象としては、便利なものは少々言語デザイン的に美しくなくても標準関数にしちゃえ的節操のなさが良いところでもあり悪いところでもある。といったところでしょうか。
これを期に他言語をメインにしている人もちょっとPHPを触ってみる、もしくは多言語のライブラリやツールをPHPに移植してみるというのはどうでしょうか。
この「ビジネスロジックとして」という所に個人的には違和感を感じる。フォームやビューも「都度開発」しませんか?
ですので、フォーム、バリデイト、ビューあたりもCore Concernとして捕らえる必要が有るのではないでしょうか。
何がAOPで言うCore Concernかというお話。
Blogでは結論だけ書いてある書籍と違って、こういう思考の過程を見れるところがすごい勉強になるなあと思います。
でもこの部分の意味が解らなかったので気になります。
誤解していましたが、Core ConcernとCrosscutting Concernのクラス仕様が同じであると言う点から、すべてがAOPだと言ってはいけないのですね。