RubyForge: Welcome

rubyforge.png

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でのサンプルを作ってみました。

ref-0.1.zip

<?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で動作が変わる最小限サンプルです。
質問への回答はメールに返信してこのサンプルも一緒に送ったんですが、果たして解りやすい説明だったかどうか・・・自信がイマイチです。

でろでろの押切蓮介短編集。

とても楽しい。
特に卒業式の日にサメの幽霊に襲われてしまうお話、「卒業シャーク」はすごい。
ただでさえ恐ろしいホオジロザメが幽霊になったらその恐ろしさは計り知れません。

hoojirozame.jpg

timaki.jpg

恵比寿駅でチマキ。

[を] PHP をいじってみた

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的なものは?

A. Smarty Template Engine。

Q. PHP自体がHTMLに埋め込めるんだからテンプレートエンジンなんていらないんじゃないの?

A. そういう考えのもと、PHP自体をテンプレートとして扱うSavantというテンプレートエンジンもあります。

Q. Webアプリケーションフレームワークは?

A. Mojavi
その他、国産フレームワークのMapleEthna、Java Seasar2のPHPポーティングS2PHP5などが有名です。

Q. O/Rマッパーは?

A. PEAR DB_DataObject。PHP5ではPropelなど。

PHP全体の印象としては、便利なものは少々言語デザイン的に美しくなくても標準関数にしちゃえ的節操のなさが良いところでもあり悪いところでもある。といったところでしょうか。

これを期に他言語をメインにしている人もちょっとPHPを触ってみる、もしくは多言語のライブラリやツールをPHPに移植してみるというのはどうでしょうか。

Harukiからの平面波

この「ビジネスロジックとして」という所に個人的には違和感を感じる。フォームやビューも「都度開発」しませんか?

ですので、フォーム、バリデイト、ビューあたりもCore Concernとして捕らえる必要が有るのではないでしょうか。

何がAOPで言うCore Concernかというお話。

Blogでは結論だけ書いてある書籍と違って、こういう思考の過程を見れるところがすごい勉強になるなあと思います。

でもこの部分の意味が解らなかったので気になります。

誤解していましたが、Core ConcernとCrosscutting Concernのクラス仕様が同じであると言う点から、すべてがAOPだと言ってはいけないのですね。

ライブドア、月額525円で全国使い放題の公衆無線LANサービス—海外も視野に – CNET Japan

ライブドアは6月15日、月額525円で定額使い放題の公衆無線LAN接続サービス「D-cubic」を開始すると発表した。

7月末から無償で試験サービスを開始し、10月1日から正式サービスを始める予定だ。

山手内ほぼカバーで525円はすごいなあ。

まずは、六本木と新宿を手始めに2200カ所設置していき、10月までに東京都の山手線内ほぼ80%のエリアで利用できるようにする。

IEEE 802.16aだったら一箇所でカバーできるんじゃなかろうか。
それでさらに安くなったら嬉しい。

Harukiからの平面波

だとすると、mapleのすべてをフィルタで処理しようとする設計は、すべてをAOPでやろうということになってしまうのか。

おそらく、上記の遷移を扱うところが、メインのプログラムであって、それにフィルタを噛ましていくようなイメージになるのであろう。

とすると、ビューやバリデーションまでフィルタにするのはやりすぎとも言えるのではないだろうか。それらは、フィルタとは別けてコントローラのはっきりとした軸とする必要が有るだろう。

話は微妙に関係無いですが、MojaviもActionの実行自体ExecutionFilterというフィルタが行っている。はたから見ると単にFilterChainが走って終了。 何かに層を織り込むというより層だけしか無い。

Filterだと手続き的に追加していけるし入れ替えも簡単なので良いのかもしれない。
「Aが動くには先にBが動いている必要がある」みたいな前提条件を切り離す方法は無いのかな。