2009-03-01から1ヶ月間の記事一覧

複数サーバー間セッションにZend_Cacheを利用する

Zend_Cacheのバックエンドmemcachedはとても便利ですね。請負で常駐で入って昨年3月にリリースされたサービスでも使いました。設計からリリースまでほとんどの作業をこなしたのですが、そこでは、会社の方針でPHPセッションは使用禁止*1、スケール目的にフ…

echo "test"; exit();

存在しないコントローラーへのリクエストをテストしていたのですが、なぜかエラーコントローラーからのレスポンスが得られなくなっていました。例外が投げられることもなく、画面が更新されないという現象に悩まされました。 同じURLをZend Debuggerに通して…

リクエストに対するフィルター・バリデーションについて

リクエストに対するフィルタやバリデーションを実施するのに、たとえばZend_Formを使っている分にはZend_Formに設定するフィルタやバリデーションを使えるからよいのですが、それ以外のデータについてはどうでしょうか。 Zend Frameworkでは、リクエストのバ…

素潜りな3月

成功と失敗 失敗プロジェクトに参加すると「そこは無理筋だったなぁ」とか「ここはあぁすればよかった」とかいう反省が生まれてきます。フリーのエンジニアとしては、サービスの要件定義部分から関与できるケースは少ないので、デスマーチな状況に入ってから…

Zend_Cache_Backend_Fileの限界点

ZendFrameworkのファイルをバックエンドとしたキャッシュは他のコンポーネントや拡張を必要としないのでお手軽に実施できます。 ただ、キャッシュエントリーが多くなるとキャッシュのクリアーなどで若干問題が発生するかもしれません。 複合的な要因で発生す…

そういうのを遅延ロードとは言わないのでは?

nullを返さないためにgetterで初期化するのはありだけど、初期化するためにgetterを呼ぶのは違う気がする。

既存システムにページキャッシュを入れてみる

既存CMSで構築されたシステムを移植する作業中なのですが、急ぎ負荷問題だけ解消しておきたいサイトがあったので先行してキャッシュだけ導入しておきました。 Zend_Cacheのページキャッシュが適用できるようなサイトならこの作業は数分で済みます。オプショ…

simplexml_load_file simplexml_load_string

simplexml_load_fileで、ちょっとん?だったのでメモ。ZFのissueに上がっていたのですが、今は見失ってしまいました・・クローズしたのかもしれない。 ほぼ同じ構造のドキュメントですがZend_Config化すると$config->files->file->id等で値を取得しようとし…

有用なアーキテクチャ間の衝突について

Webアプリを構築するためにフレームワークや既存CMSを使うケースがありますが、それぞれに適したアーキテクチャがあります。通常、小さなシステムでは一つのアーキテクチャで貫徹できますが、その分、他のアーキテクチャを組み入れる余地が少なく、大型のフ…

エレベーターのリファレンスモデル

エレベータの要求仕様 第2回で紹介したように、分科会では一度モデリングに行き詰まり、概念モデルからやり直しを行いました。従って以下の要求仕様を参照すると分かりますが、「キャビンが呼び出され」→「移動階に移動して」→「ドアが開いて降りる」といっ…

View->renderで__toString可能なオブジェクトを返してみる

Viewでの処理結果をシームレスにキャッシュするため、レスポンスオブジェクトに追加するデータを文字列データではなく、__toString可能なオブジェクトにしてみました。PHP的には文字列で格納してゴリゴリ追加していくというのも悪くはないのですが、個人的に…

表層系と処理系でコントローラー

このへんの続き。 http://d.hatena.ne.jp/noopable/20090201/1233445916 http://d.hatena.ne.jp/noopable/20090201/1233528374 これを実現したいとする。 処理の流れを再確認 ルーティング ページクラス(ページコントローラーを起動) どんなページにするの…

もうおまえらPHPerは正規表現をブログにうpするんじゃねえ!

と言われても仕方がないと、404の人が書いてらっしゃいます。 実を言うと、私も正規表現は苦手です。正直言って、いろんな勘違いをそのまま公開している口なので、もうそこは「ごめんなさい」としか言えません。*1 個人差のある問題なのに、PHPerはと言われ…

PHPの配列記法で関数オブジェクト

C++などは()をオーバーロードして関数オブジェクトを作るらしいですが、PHPでも配列記法やアロー演算子のオーバーロードが可能なので、似たような関数オブジェクトは作れそうです。 http://d.hatena.ne.jp/noopable/20090316/1237166080 ここでやった手法は…

Webフレームワークとノーフリーランチ定理

ちょっとでもフレームワークの流儀や対象範囲から外れたことをやろうとすると、 とてつもなく手間がかかるか、全く出来ないかのどちらかで、 適切でないフレームワークを使うくらいなら、個別にスクラッチで書いた方がよっぽどマシという状況が起こりうる。 …

キャッシュのおさらい

フレームワークの性能を向上させる手掛かりとして、キャッシュについて考えてみます。 フレームワークによるパフォーマンス低下 フレームワークを利用する場合、パフォーマンスが犠牲になることはよくあります。フレームワークを設計する側からすると抽象化…

関数オブジェクトと関数型言語的手法の違い

PHPで関数オブジェクトを作ってみました。Webフレームワークでのキャッシュコントロールを正確に行うのが目的なのですが、作ってみると関数型言語との手法に違いがあることがわかりました。 関数オブジェクトAbstract*1 関数型の手法を几帳面にエミュレート…

Zend_Configはイテレーターを壊しても大丈夫になる。。

イテレーターって、要素をunsetしたら無効になるもんだと思ってましたが、unsetしても動作するのが普通なんでしょうか。Zend_Configがunsetしてもnextが有効になるような実装に変わるようです。

Viewの挙動に、もやっと

Zend_View周辺(ViewRenderer、Zend_Layout、Zend_Controller_Action)の仕様にもやっとしてます。 ViewRenderer http://d.hatena.ne.jp/noopable/20090211/1234300771 ここでも書きましたが、ViewRendererを有効にすると、基本的にViewRendererのビューオブジ…

Zend_Configでグローバルセッティング

フロントコントローラーに安全かつ柔軟な設定レジストリを作ってみました。 上書き禁止なfrontControllerのZend_Config フロントコントローラーを拡張して、ReadOnlyなZend_Configオブジェクトを持たせます。 たとえば、フロントコントローラーで _config; }…

Zym Framework

Zend FrameworkベースでZend Frameworkに積極的なフィードバックを行っているZym Framework。そのzym.appがZend_Applicationとしてリリース準備されているようです。 zymのApplicationについては、下記のドキュメントを流し読みしてみました。 http://www.zy…

ヘルパーブローカーとヘルパーの初期化タイミングとビューbasePathの変更について

アクションコントローラーの再利用性を考慮するとViewRendererはなるべく使いたい。でも便利なものほど内部はブラックボックスになっていて微妙にわかりにくいことがあるのでメモ。 検討課題 アクションコントローラーを_forwardまたはActionStack等で使いま…

hostsが改ざんされた・・・

ちょうど、7日頃からxampp環境からZend Server環境への移行テストをしていたんですが、10日にも関連テストをしこしこやってました。なぜかlocalhostのZend Serverが応答しなくなり、しばらく悩みましたが・・・hostsの改竄に気づいてビビりました・・・ い…

Zend Server でphpUnit(2)

http://d.hatena.ne.jp/noopable/20090308/1236483530 http://d.hatena.ne.jp/noopable/20090309/1236570981 まとめると、Zend ServerでphpUnitを使うときは Zend Extensionとxdebugは共用できない。(vistaの場合かつ標準のバイナリ) Zend Extensionを使う…

フレームワーク仕様とアプリケーション仕様の狭間に

フレームワークはカップリングを減らし、コンポーネントのメンテナンス性と品質の向上を考えるべきだと思う。 アプリケーションは疎結合なフレームワークを「結合」させて組み上げます。結合仕様がアプリケーションの骨組みになり、目的に合致したアプリケー…

Zend ServerでCLI

http://d.hatena.ne.jp/noopable/20090308/1236483530 でxdebugのロードが確認できたので、設定を確認してやりなおしてみました。 php.iniでZendExtensionManager.dllのロードを抑止した時の動作ですが、ローカルユーザー(管理権限あり)で通常通り起動する…

Zend Framework PHPUnit

いままで、テストにはSimpleTestを使っていました。 CakePHPやethnaだとSimpleTestを使っていると思います。 ethna http://ethna.jp/ethna-document-dev_guide-misc-unittest.html CakePHP http://bakery.cakephp.org/articles/view/testing-models-with-cak…

Zend ServerとZend Debugger

Zend Studio for Eclipseを使っている場合、ローカルにインストールしたZend Serverとの間でデバッグセッションを開くために必要は設定はない。 インストールしたら、そのまんま使えるっぽい。Zend Studio 4の時は結構いろいろ設定したと思うが、ローカルで…

Zend ServerとSVN連携

Zend ServerをローカルSVNリポジトリのアクセス用に使う時は、Subversionに添付されてくるmod_authz_svn.soとmod_dav_svn.soをC:\Program Files\Zend\Apache2\modulesにコピーする。実際には、コピーせずにインクルードするディレクトリを指定するだけでもい…

Zend Serverを試す

Zend Serverがβリリースされているので、ローカルで試してみることにした。xamppと比べてみるのもいいかなと。 ダウンロードとライセンスの取得 http://www.zend.com/products/server/downloads ここからトライアル版とトライアルライセンスを取得する。※ラ…