金曜日ににせマックの電源がお亡くなりになりました・・・。
マザー死んだかと焦りましたが適当な電源を買ってきたら動いた。ディスプレイすら無い(ノートしかない)のでSSHが上がらないと詰み。しかしちゃんと立ち上がってくれたので復旧しました。
最近のクソドモによる鬼ダウンロードのせいじゃねーのかと。それ以前に電源ファン適当にはずしちゃ駄目でした。
金曜日ににせマックの電源がお亡くなりになりました・・・。
マザー死んだかと焦りましたが適当な電源を買ってきたら動いた。ディスプレイすら無い(ノートしかない)のでSSHが上がらないと詰み。しかしちゃんと立ち上がってくれたので復旧しました。
最近のクソドモによる鬼ダウンロードのせいじゃねーのかと。それ以前に電源ファン適当にはずしちゃ駄目でした。
手軽なPHPオブジェクト永続化のためのクラスStoredObjectを0.2にしました。
1オブジェクト=1ファイルだと10,000件の検索に5秒ぐらいかかるので1クラス=1ファイルにしました。(1オブジェクト=1行)
DataObjectよりシンプルにするためにfactoryを廃止。
下記は永続化のサンプル。
StoredObject#store()で保存。(保存先はデフォルトだと実行したディレクトリ。コンストラクタの第二パラメータでディレクトリ指定できます)
require_once("StoredObject.php");
class Book {
var $name;
var $price;
var $releaseDate;
}
$storedObject =& new StoredObject("Book");
$book =& new Book();
$book->name = "軽快なJava";
$book->price = "1000";
$book->releaseDate = "2004/12/01";
$storedObject->store($book);
$book->name = "Effective C++";
$book->price = "2000";
$book->releaseDate = "2004/12/02";
$storedObject->store($book);
$book->name = "Programming Perl";
$book->price = "3000";
$book->releaseDate = "2004/12/03";
$storedObject->store($book);
StoreObject#get()で取ってきます。
require_once("StoredObject.php");
class Book {
var $name;
var $price;
var $releaseDate;
}
$storedObject =& new StoredObject("Book");
$book1 =& $storedObject->get("name", "軽快なJava");
var_dump($book1);
$book2 =& $storedObject->get("name", "Effective C++");
var_dump($book2);
$book3 =& $storedObject->get("name", "Programming Perl");
var_dump($book3);
実行結果はこんな感じです。_StoredObject_hashというのはStoreObjectが勝手に割り当てているハッシュ値です。
object(book)(4) {
["name"]=>
string(10) "軽快なJava"
["price"]=>
string(4) "1000"
["releaseDate"]=>
string(10) "2004/12/01"
["_StoredObject_hash"]=>
string(32) "8141cda9579ef74e052390de23770469"
}
object(book)(4) {
["name"]=>
string(13) "Effective C++"
["price"]=>
string(4) "2000"
["releaseDate"]=>
string(10) "2004/12/02"
["_StoredObject_hash"]=>
string(32) "2d37647c506ed9a84f3e2966afcf40e0"
}
object(book)(4) {
["name"]=>
string(16) "Programming Perl"
["price"]=>
string(4) "3000"
["releaseDate"]=>
string(10) "2004/12/03"
["_StoredObject_hash"]=>
string(32) "ec905200936acd1ae7ecdcc6e7a4099d"
}
find()メソッドや正規表現での検索を追加予定です。
はてなダイアリー – Amethyst製作日記一つ考えられる方法として、オブジェクト管理クラスを用意して、そのオブジェクト管理クラスは管理対象のオブジェクトをシリアライズしてローカルにファイルとして保存、読み出しを行えるようにするとか。
まぁ、ファイル読み書きのオーバーヘッドが発生しちゃうけど、現実的な実装方法なのかも知れない。
コレを見てPHPで手軽にオブジェクトの永続化ができたらいいなと思ったのでちょっと作ってみました。
早い話が設定やDBがいらないDB_DataObjectといったものです。
require_once("StoredObject.php");
class Book {
var $name;
var $price;
var $releaseDate;
}
$book =& new Book();
$book->name = "Effective Java";
$book->price = "1000";
$book->releaseDate = "2004/12/01";
$storedBook =& StoredObject::factory("Book");
$storedBook->store($book);
クラス名でStoredObjectのfactoryを動かして、store()でオブジェクトを保存します。
require_once("StoredObject.php");
$book =& StoredObject::factory("Book");
$book->get("name", "Effective Java");
var_dump($book);
DataObjectライクに永続化していたオブジェクトを取得。
仕組みは簡単でクラス名で作成したディレクトリに1オブジェクトに対応する1ファイルを作ってserialize()保存しているだけです。取得するところはオブジェクトが増えると半端じゃなく遅くなると思いますが、何のインストールも設定ファイルもいらないのでプロトタイプの作成にはいいかもしれないです。
BMediaNode: PHPでのオブジェクトプーリングかなり大げさになりますが、memcachedというデーモンを使うとPHPでもオブジェクトのプーリング・キャッシングは可能になるみたいです。PHP用のクライアントAPIはPECLに含まれています。
PHPでオブジェクトプーリングを実現するもの。なるほど、PHPだとリクエストごとに消えちゃうし、別リクエストでは別ものになっちゃうので常駐してるデーモンに確保しといてもらうって感じですか。
・・・Servletでいいじゃん。
2ちゃんねるベストヒット: 自分の知らなかった妻の顔[既婚男性(仮)] 怪しいぞ!嫁の不審な行動を監視するスレ ttp://human5.2ch.net/test/read.cgi/tomorrow/1096325759/l50
212 名前:素敵な旦那様 投稿日:04/11/24 09:58:44 仕事が早く終わって帰宅したらいなかった。 寝室で着替えてるうちに戻ったらしく、台所で音がしてたので おどかそうかとこっそり行ってみたら、 マツケンサンバ歌いながら激しくステップ踏んでた(上手)。 梅酒あおりながら。 その後、スーパーの袋から焼き鳥出して立ったまま食べ、 「う、う、うーまーいー!」と叫んで、またマツケンサンバ。 「キュッキュッ!」とか「えいえい!」とか意味不明な合いの手を入れながら。 出ていけなくてしばらくそのまま見てた。
「帰ってるよ」と出てった時の泣き笑いみたいな顔、初めて見る顔だった。
笑った。
H A R U P A N O B L O G: RSS Factory に Impress Watch 系ニュースを追加フィルタを書くだけの力仕事ですが、正規表現の勉強にはなります・・・。
ImpressのHeadlineのRSSがありがたい。これでやっと巡回ページが全部RSSリーダで読めるようになりました。
持ってる書籍の一覧をISBNのリストから作ろうと思ってPEARのServices_Amazonを使ってみたら・・・
Invalid locale parameter "jp". Valid locales are: de uk us
jp駄目なのかよ。
先日、PHPのセッション絡みの障害があり、調べてみました。何かというと「セッションIDが重複することがあるのか」ということについて。
PHP4.3.9のソースで見てみるとextというディレクトリがあります。これは拡張機能関連のソースがある場所のようで、pgsqlやmingやxmlなどが入ってます。ここにsessionディレクトリもありました。。拡張といっても本当のコア機能以外は全部ここに入っているようです。
php-4.3.9/ext/session の中のsession.cを見てみるとphp_session_create_idという露骨な名前の関数が定義されています。中身は大雑把に見ると、時間と php_combined_lcg()をMD5でハッシュ化しているようです。php_combined_lcgをググってみると、
[PHP-users 11996] Re: 「他人の情報を表示するサイト」php_combined_lcgはマルチプロセスサーバー(プロセスをフォームするサーバー) ではPIDをマルチスレッドサーバーではthread_idを利用して疑似乱数を生成してい ます。したがって、仮に、micro秒単位で同じ時刻にアクセスしても同じセッション IDは生成されません。
msessionはセッション情報を全てメモリに保持しているのでセッションID のコリージョンを検出しています。
どうやらPHPのセッションIDは理論的に絶対に重複しないようです。でもこれって、Webサーバが複数ある状態で1つのDBにセッションを保存している場合、同じ時刻で偶然プロセスIDも一緒だったら重複しちゃうんじゃないでしょうか。もう少し調べてみたいです。
2005/05/17 追記: 一部間違いがありました。 ref: PHPのセッションID2
2ちゃんねるベストヒット: ハウルの動く城を見てきたかのように語る[ネトゲ実況] ハウルの動く城をさも見てきたかのように語るスレinネ実 ttp://game7.2ch.net/test/read.cgi/ogame/1100597954/l50
76 名前:既にその名前は使われています 投稿日:04/11/16 19:15:45 ID:xRtz7F 7 思った以上に、動いてた。
笑った。