mysql賢い!

データベースに対してフィルタリングをかけてlimit系のクエリーを発行すると
基本的には規定数に到達するまでは最初から全レコードをチェックしなければならず
時間がかかります。
このあたりはシーケンシャルなデータベースの特徴でmysqlも例外ではないのですが
mysqlが凄いところはlimitでクエリーを発行したあと、
次のクエリーが連続的であれば現実的な時間で結果を返してくれるところです。
例えばページ数が1万ページあるなかで5千ページ目が見たい場合に
一回目のクエリーは時間がかかるのですが、次に
5千1ページ目を表示する場合にはかなり早い時間で結果を返してくれます。

Shadowboxのバグ ( IEで中央に表示されずにずれてしまう )

Shadowboxはcssでposition:fixed;にして
常に真ん中に表示されるようになっています。
しかしIE6ではfixedが使えないため
positionをabsoluteにして
スクロールやリサイズがあった度に
位置をしていています。


var centerVertically = function(){
var shadowbox = SL.get('shadowbox');
var scroll = document.documentElement.scrollTop;
var s_top = scroll + Math.round((SL.getViewportHeight() - (shadowbox.offsetHeight || 0)) / 2);
SL.setStyle(shadowbox, 'top', s_top + 'px');
};

上にあるのが該当部分のソースなのですが、
これでは十分ではありません。
compatModeによっては
スクロールの位置を取得できません。


var scroll = document.documentElement.scrollTop;

ここを


var scroll = (document.body.scrollTop || document.documentElement.scrollTop);

このように変更することで
ドキュメントのタイプ宣言にかかわらず
ボックスを画面の中央に表示させる事ができるようになります。
shadowbox.jsに記述されている


document.documentElement.scrollTop
という部分は全て

(document.body.scrollTop || document.documentElement.scrollTop)
と書き換えてください。

phpで ’文字列’ == 0 が 真になる件

php


if ( '文字列' == 0 ) {
echo '真';
}

とすると真になって
if分が評価されてしまいます
ビックリ

文字列が数値にキャストされて


intval('文字列'); //数値0になる
intval('123文字列'); //数値123になる

文字列が数値の0になり
予期しない結果となる

数値と文字列の比較では
数値が文字列にキャストされるものとばかり
思っていました

MDB2の複数のデータベースの同時接続

同時接続時に同じユーザーだとリソースが一つになってしまう。
違うデータベースを指定しているのにそれが認識されずに
最後にconnectしたデータベースが使用されるのだと思う。
ユーザーがハンドリングできるデータベースは同時に一つという設定になっているのだろうか(mysql)

phpできれいにセッション管理

phpでセッションを使うときに
注意しないと
サーバやクッキーの変数が残ったままになってしまいます。

セッション変数はファイルで保存されており
サーバ上の/tmpディレクトリ等に作られます。
session_destroyで
現在のsession_idで参照できるセッション変数は消えます。

session_cache_limiterや
session_cache_expireの設定次第では
セッション変数はかなりの期間存在し続けます。
削除はガベージコレクションが管理しており
1/1000等の確率で期限切れの全セッション変数が消えます。

session_idはcookieにも書かれます。
これはsession_destroyしただけでは消えてくれません。
setcookieでsession_nameを指定して明示的に消す必要があります。
ブラウザ終了までの寿命のセッションの場合は
必ずsession_set_cookie_paramsとsetcookieを併用する必要があります。

防犯用ニセテレビFakeTV

防犯用ニセテレビFakeTV - Engadget 日本版

こういうアイディアがすばらしいと思う。
自分が直接影響を受けるものではなくて、
自分の部屋で自分の所有物のように扱われるものなのに
外向けに使われるものであって、
しかもそれがFake。
必ずしも効果がある訳ではない。
それでも尚、魅力的なのは何故だろう。
ということをもうちょっと掘り下げて考えたいですね。

apacheのmod_rewriteでURLの最後のスラッシュを補完

以下を.htaccessに記述


RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.[^/\.]+$
RewriteRule .* %{REQUEST_URI}/ [L,R]

URLがファイル名だと推測される場合
(最後の/以下のURLに.が含まれていた場合)
にはスラッシュの補完をしないようにしています。