ハマりどころ日記になってなくもない

@(エラー制御演算子)でエラー抑制っていうのは、関数実行の直前にerror_reportingがゼロに設定されて関数を抜けた後に元の値に戻る。
ユーザ定義のエラーハンドラを使ってる場合は注意。


初めて気付いたけどincludeなどでファイルを読み込むとき、include_pathから上の階層へは上がれないのね・・。

// ok
require 'PEAR.php';

// error
require '../php/PEAR.php';

よく考えたら当たり前だ。階層を上がれたらどんなファイルも読み込めてしまう。

include_path

開発中のmapleを参考にしてinclude_pathを柔軟にしてみる。
mapleディレクトリ構成だと webapp/core でコアを書き換える。

Laizの場合はコアもwebappも共用(?)したいのでこの方法がうまくいかなさそう。
なのでディレクトリ構成を

laiz/core
laiz/webapp

project_base/core
project_base/webapp

のようにwebappと同じ階層にコアを持ってきた。
これでフレームワーク標準のwebappを利用できる。
共用のアクションというのは無いんだけど、フィルタをwebappの中に入れているのでこうしないと共用のフィルタを使えない。
外に出すこともできるが・・どっちがいいんだろう。
webappの位置付けがイマイチ定まらない。

どこまでテストを作るか

テストファーストはいいんだけれど、全ての関数にテストを作るのはどうなんだろう。


例えばvalidatorクラス。
これはほとんど実装部分の処理は無い。
数値かどうかを確かめる関数は

function isNumeric($a){
    return is_numeric($a);
}

これだけ。これはそもそも関数を作らずに直接is_numeric()を実行すればいい話だけれど、他にも

function isMaxLength($str, $max){
    return (strlen($str) <= $max);
}

とかある。
後から修正する可能性も低い。


リファクタリングする必要が出てきた時にテストコードを書くっていう方針でいいのかな。


あとメール送信のテストとか結構どうしようもない。
popで繋いで受信するテストも書けないことはないけれど、そこまでする価値があるのかどうかが微妙だ。

改造版Flexyのアップデート

flexyのバージョンアップに追いついてなかったのでフレームワークのバージョンアップのついでにFlexyのパッチも作ってみる。
ついでと言うほど簡単ではないが・・自分の書いたNishimura's Siteこれがかなり役に立つ。


一応 Tokenizer.lex を修正せずにlexにかけてみてdiffでチェック。
微妙に違う箇所がある・・。
cvsの方は$_fatalという変数が追加されている。
というかPEARパッケージの方はv1.61になっているけどcvsの1.61は全然違うっぽくて、1.63の最新版が一番近い。


大きな変更は無さそうなのでこれを元にTokenizer.phpを作成することにした。


HTML_Template_Flexyのオプションで

$options = array('compiler'    => 'MyCompiler',
                 'compileDir'  => 'compiled',
                 'templateDir' => 'templates');
$flexy = & new HTML_Template_Flexy($options);

というようにコンパイラを指定できる。
これを利用して、ファイルを直接修正していたものから追加という形に変更した。
利用方法は

'compiler' => 'FlexyEx'

これでループ拡張とラジオボタン以外のエレメントにidを使える。
hiddenの拡張はコンパイラの追加だけでは無理っぽいので仕方なくFlexy.phpにメソッドを追加した。


追加ファイルとパッチファイルだけアップしようと思ったけど、やっぱり面倒だから次のバージョンからのフレームワークの中に丸ごと入れとこう。
コンパイラにFlexyExを指定しなければ通常のFlexyの動作となる。

リンク元

最近php+フレームワークでの検索が多い。
[PHP-users 30036] Re: フレームワーク
この辺の影響だろうか。


どうせフレームワークを作るならPHP5も使ってみたい・・。
Debianの公式パッケージに入るのは何年後だろう。。
[debian-users:43746] Re: php5 の対応
開発することは可能だけど運用となると何となく不安になるなぁ。

WindowsXPの起動が遅い

イベントビューアを見てみるとContivity VPN Clientがエラーを起こしている。
nortelのVPNクライアントなんだけれど、検索してみるとWindowsアップデートパッチにバグがあったらしい。
色々サービスをオフにするが改善せず。


VPNのバージョンを新しくしたらあっさり直った。



しかし相変わらず起動が遅い・・。
起動後から数分の間、CPUが100%になったりならなかったり。
svchost.exeが占有し続けている。

C:\>tasklist /fi "imagename eq svchost.exe" /svc


svchost.exe                 1948 DcomLaunch, TermService
svchost.exe                 2004 RpcSs
svchost.exe                  240 AudioSrv, Browser, CryptSvc, Dhcp, dmserver,
                                 EventSystem, helpsvc, lanmanserver,
                                 lanmanworkstation, Netman, Nla, RasMan,
                                 Schedule, seclogon, SENS, SharedAccess,
                                 ShellHWDetection, srservice, TapiSrv,
                                 Themes, TrkWks, W32Time, winmgmt, wscsvc,
                                 wuauserv, WZCSVC
svchost.exe                  292 Dnscache                                     

やたら多くて何が何だか。


取り敢えずウィルスチェックとスパイウェアチェックをかけて、停止できるサービスをもう一度見直してみますか。。

その後

ウィルスチェックとスパイウェアチェックをやったらウィルスがゼロでスパイウェアが数十個。
ウィルスがゼロで良かった・・普段チェックしないからごっそり出てきたらどうしようかと思った。


そして再起動したら少しは早くなった感が。
イベントビューアにもエラーが出てない。


それにしてもLet's Noteでウィルスチェックはヤバい。めちゃめちゃ熱くなる。
こんなに熱くて大丈夫なの?お湯を沸騰させたヤカンみたい。

HDDの位置も熱い。



まぁそんなこんなで一段落。



はてなツールバーを入れてみたりした。
すげー便利だ。
WinPlosionがあるからSleipnirからIEに戻そうかなぁ・・。
いつもはSleipnirはてな系だけIEで見るっていうのもまた面倒だな。