かっけー。僕もprintfデバッグの技を書かねば。
うーん。ソースコードを読むとなんとなく怪しいところがわかるので、そこにvar_dumpを仕込むと変数がnullだったりして、debug_print_backtraceで呼び出し元を探すとか。
でもそれは本質じゃなくて、なんで怪しいところがわかるかが謎なんだ。実際に手を動かしてvar_dumpを仕込んでるとわかるんだけど、ペアプロのナビゲーター的な立ち位置だとわからなくてイライラする。そういうときは相方も間抜けに見えるし。
MySQLがおかしい!あなたならどうしますか? MySQL Casual Advent Calendar 2011 - As a Futurist...
かっけー。僕もprintfデバッグの技を書かねば。
うーん。ソースコードを読むとなんとなく怪しいところがわかるので、そこにvar_dumpを仕込むと変数がnullだったりして、debug_print_backtraceで呼び出し元を探すとか。
でもそれは本質じゃなくて、なんで怪しいところがわかるかが謎なんだ。実際に手を動かしてvar_dumpを仕込んでるとわかるんだけど、ペアプロのナビゲーター的な立ち位置だとわからなくてイライラする。そういうときは相方も間抜けに見えるし。
MySQLがおかしい!あなたならどうしますか? MySQL Casual Advent Calendar 2011 - As a Futurist...
これ有効・無効で、どういうときにどれだけ効率化するのか、きちんと検証する必要はあると思ってるんだが… 例えば同じSQLの構文で値を変えていろいろやるにはサーバー側でやった方が効率的なのか、実はパーズが1回になるだけだから、あんま変わんないとか。
DSAS開発者の部屋:MySQL を PDO で使うときは ATTR_EMULATE_PREPARES を設定しよう
来年中には東京メトロ全線対応とのこと。この流れで通話禁止もやめればいいのに。
当社トンネル内における携帯電話利用サービスの提供について
例によって30秒前の内容を覚えてない脚本。ネタバレする次回予告。もう本当にすごいな。
黄金バット 第32話 「悪魔の巨像」
先日、二重に腐った実装をしてしまって反省している。
(1) 仮引数が悪い
function doSomethig($logLevel = PEAR_LOG_ERR) { ... }
って関数があったとしましょうよ。
細かいログが必要なときは doSomething(PEAR_LOG_INFO) とか渡すんですよ。
っておかしいでしょ、これ。
1ヶ月前の自分は酔ってたのか?
だって、doSomething() がどういうときにどういうレベルのログを吐くかを
呼び出し側が知ってないと駄目なんですよ。
(2) 実引数が悪い
doSomething(PEAR_LOG_INFO) だとエラー出すぎだからなんとかしようと思ったとして
$logLevel = PEAR_LOG_ERR;
if (! 条件1) {
// ログ抑制のため
$logLevel = PEAR_LOG_INFO;
}
if (条件2) {
// ログ抑制のため
$logLevel = PEAR_LOG_ERR;
}
doSomethig($logLevel);
って意味わかります? なんでこんな実装をしたんですかね、先日の自分は。
ここはせめて
$logLevel = PEAR_LOG_INFO;
if (条件1 || 条件2) {
// この条件のときはログ出すぎなので抑制
$logLevel = PEAR_LOG_ERR;
}
doSomethig($logLevel);
と書くべきでしたね。
というかやっぱり(1)の仮引数が悪いのですよ。
デフォルトでは細かいログが必要、特定の条件のときには不要、
というニュアンスがif文や前後から伝わりますか?
コメントがなかったとして。
僕は無理だと思う。
function doSomethig($verboseLog = false) { ... }
$verboseLog = true;
if (条件1 || 条件2) {
$verboseLog = false;
}
doSomethig($verboseLog);
が落としどころかな。
説明のためにみんな知ってる定数を使ったので、なんでログレベルを渡すんだみたいなツッコミはなしで。
デフォルトがあって例外があって、
例外を指定する場合のデフォルトがあって、さらにその例外を指定する場合がある、
みたいな要件自体がおかしいという説もある。