単純フレームワークAwesomeFrameworkを更新。

AwesomeFramework-0.8.1

変更点

  • 依存性を緩やかにする仕組み追加

依存性を緩やかにするといってもDIではなく、ブルース・テイトが言っていた「Ruby などの言語では DI コンテナや AOP は必要ない」 のはなんでなんだろう?と思って考えてみました。

また見たほうが早いのでコード。

index.php(フレームワーク本体):

<?php
define("AF_DEFAULT_ACTION", "default");
define("VERSION", "0.8.1");

$vars = array();
<strong>$dependency = array();
include_once "dependency.php";</strong>
forward(isset($_REQUEST["a"]) ? $_REQUEST["a"] : AF_DEFAULT_ACTION);

function forward($action) {
<strong>    extract($GLOBALS["dependency"]);</strong>
    extract($GLOBALS["vars"]);
    include "$action.php";
}

function fetch($action) {
    ob_start();
    forward($action);
    $buffer = ob_get_contents();
    ob_end_clean();
    return $buffer;
}

function redirect($action) {
    header("Location: index.php?a=$action");
}

function assign($name, $value) {
    $GLOBALS["vars"][$name] = $value;
}

function assign_by_ref($name, &$value) {
    $GLOBALS["vars"][$name] =& $value;
}
?&gt;

dependency.php(設定ファイル):

&lt;?php
include_once "SampleCalculator.php";
$dependency["Calculator"] = "SampleCalculator";
?&gt;

SampleCalculator.php(ロジック):

&lt;?php
class SampleCalculator {
    function add($var1, $var2) {
        return $var1 + $var2;
    }
}
?&gt;

default.php(アクション):

&lt;?php
$calc = new $Calculator();
assign("result", $calc-&gt;add(1, 2));
forward("view");
?&gt;

view.php(ビュー):

&lt;html&gt;
&lt;head&gt;&lt;title&gt;Hello Calculator&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
1 + 2 = &lt;?=$result?&gt;
&lt;/body&gt;
&lt;/html&gt;

依存性を排除するには動的型付け言語の場合、単に依存するクラス名を変数にして設定ファイルに出せばいいんじゃないだろうか?これだと制御は反転しないし、依存性は注入されない。だからDIコンテナは要らないってことなんじゃなかろうか。

ソフトウェアパターン勉強会

「J2EE/DI/Aspectプロジェクト成果報告」 (資料 PDF) 発表者: 長谷川 裕一(豆蔵)

最近なにかと話題のDIコンテナ (Dependency Injection Container) とアスペクト指向プログラミング (Aspect Oriented Programming: AOP)。パターンWGでも今年からJ2EE/DI/Aspectプロジェクトが始動し、7月からは月1回のペースで活動が実施されています。今回の勉強会ではこれ からプロジェクトに参加してみたいという方向けにDI/AOPの概要から始め、プロジェクトの成果報告やQ&A、楽しい企画(?)なども実施する予定です。是非、この機会にJ2EE/DI/Aspectプロジェクトに参加してみて下さい。

パターンワーキンググループのソフトウェアパターン勉強会に行って来ました。

メモ:

・S2JSF HTML → JSF ・Seesar2 = 規約 vs Spring = XML書け ・Transaction Script vs Domain Model ・ステートレスなオブジェクトをつなぐ  →だから最近クラス図描かなくなったのか。 ・属性を持つオブジェクトはDAOで管理する ・アスペクトこそパターンが無いと危険   →Filter類似 ・ASOD widh US  ・ポイントカット  ・アドバイス ・XML/規約/アノテーション

DI、AOPのお話。とってもためになって面白かった。そしてAOSD with USの部分が難しくて全然分らなかった!

Code InjectionでAOPにCode Generateでメタプログラミング? これからはやっぱCode Replacementでしょ!!!

・・・トラブルの宝庫。

開発環境移行計画。

目指す環境: coLinux debian sarge emacs

これだけのことになんと時間を費やしてることか・・・。

coLinux, sargeインストール:
(略

sarge UTF-8化:

sudo apt-get install locales lv
cat "export LANG=ja_JP.UTF-8" >> ~/.bash_profile

ssh, cvs

sudo apt-get install keychain cvs
echo "keychain ~/.ssh/id_dsa" >> ~/.bash_profile
echo "source ~/.keychain/${HOSTNAME}-sh" >> ~/.bash_profile
echo "export CVS_RSH=ssh" >> ~/.bash_profile

emacs, utf-8, php:

sudo apt-get install emacs21 mule-ucs php-elisp
(set-language-environment "Japanese")
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)

未解決:

phpのコードを書いてると関係無い部分の文字が壊れる。
タブ(インデント)の扱いがよくわからない。
emacs-lispの記述の意味がさっぱりわからない。

emacs + php説明の素敵なページはどこか!
emacsで混乱したときにvimを立ち上げると死ぬほど癒される。このままではっ、まずい・・・。

GNU Emacsデスクトップリファレンス
  • GNU Emacsデスクトップリファレンス
  • オライリー・ジャパン(1999-06)
  • (著)デブラ キャメロン
  • (原著)Debra Cameron
  • (翻訳)日本ルーセントテクノロジー
  • 定価:¥ 683
  • 新品価格:¥ 683
  • 中古価格:¥ 380
  • ASIN:4900900931
blog.xole.net : pregとevalでPHP6にする!(ネタ

はいらない。 また、(...)や[...]でarray(...)に置き換えとかやってみた。 ( via: kunitの日記 – [PHP] 配列の簡易書式 ) いろんな構文を単にpreg_replace()でeval()してるだけ!

うける。 設定ファイルとかに使えないかな?

p0t: Mojavi2大好き

俺もそこ問題だと思います。
http://forum.mojavi.org/index.php?showtopic=1119&hl=e_user_notice

自分ではここだけは2.0.3βから直して使ってますが、(略

とか言った手前、2.0.3bに対するパッチとパッチ当て済み2.0.3b2をアップしました。

Mojavi2.0.3b2

Mojavi2.0.3b用ErrorLoggerパッチ

*** mojavi.bk/opt/logging/ErrorLogger.class.php 2005-11-18 06:39:17.570000000 -0500
--- mojavi/opt/logging/ErrorLogger.class.php    2005-11-18 06:37:55.900000000 -0500
***************
*** 197,213 ****
              switch ($level)
              {

                  case E_USER_NOTICE:

                      $this->info($message, NULL, NULL, $file, $line);
                      break;

                  case E_USER_WARNING:

                      $this->warning($message, NULL, NULL, $file, $line);
                      break;

-                 case E_USER_ERROR:
                  default:

                      $this->fatal($message, NULL, NULL, $file, $line);
--- 197,216 ----
              switch ($level)
              {

+                 case E_NOTICE:
                  case E_USER_NOTICE:

                      $this->info($message, NULL, NULL, $file, $line);
                      break;

+                 case E_WARNING;
+                 case E_CORE_WARNING:
+                 case E_COMPILE_WARNING:
                  case E_USER_WARNING:

                      $this->warning($message, NULL, NULL, $file, $line);
                      break;

                  default:

                      $this->fatal($message, NULL, NULL, $file, $line);

colinux debianでja_JP.UTF-8 localeを作ろうとするとメモリが足らなくて落ちる。 64MB → 128MBに増やしたら動きました。

Collection & Copy – デザイン変更

自分が思う素晴らしいアイディアを他人に話し、それがウケたらそのアイディアはイケていないという法則を理屈無しに信じている。最近では本末転倒に、相手に万が一でもウケないように、わざと凡庸に言ったり、判り辛く言うほどだ。

これは癒されます。 これから何か書いて反応なくても、「ヨシッ!」

PHPエンジニア向けキャリアアップセミナーと登録説明会 – HotPHPPER News

株式会社デジタルスケープによりPHPエンジニア向けキャリアアップセミナー&登録説明会が開催されます。 これは無料で参加できるセミナーで、講師として株式会社アシアルの田中さんが講師を担当されるようです。

む、ちょっと興味が。 行ってきた人の話聞いてみたい。

kunitの日記

・・・がPHPにもあればもっとすっきりかけるんだけどな。必ず「array(....)」とかかないといけないので見た目が複雑になる。これがRubyやPerlのように「[....]」とか「(.....)」のようにかけるとほんとすっきりするんだけどな・・・

これはほんとにほしい。