< December 2003 | January 2004 | February 2004 >

January 25, 2004

CGI::Sessionの、期限切れのセッションをお掃除する

Perl CGIを使ったWebアプリケーションで、セッション情報を管理するのにWalrus::Session::Lite[digit.que.ne.jp]を使おうとしていたのですが、テスト環境のPerl 5.8.1のもとでは機嫌良く動いていたのに、Perl 5.6.1の実稼働サーバに移したところ、データが正常に保存できなくなり(そういえば、原因調べようと思って調べてないや。それはまたそのうち。)、急遽CGI::Sessionを使う方向に変更しました。しかし、Walrus::Session::Liteにあって、CGI::Sessionにない機能に、期限切れセッションの一括削除があります。セッションというのは必ず完結するとは限らないので、時々何かのタイミングでお掃除しないと、いつかはディスクを埋め尽くしてしまうことになる、というわけで、そんなクラスを作成してみました。お掃除するので、その名も、CGI::Session::Sweeperです。

これを、比較的頻度の少ない、ただし必ず行われる処理のついでに、以下のようにして呼び出すことで、設定した期限を超えたセッションを削除することができます。

use CGI::Session::Sweeper;
my $sweeper	= CGI::Session::Sweeper->new( "driver:File", { Directory => '/session' } );
$sweeper->sweep;

newの引数はCGI::Session->newの1個目と3個目の引数と同じものを指定します。これは詳しくはCGI::Sessionのpodを参照。

続きを読む...

January 8, 2004

Digest::MD5 のインストールできない状況でのこと

CGI::Sessionを使おうとすると、Digest::MD5を使うことになる。もちろん、セッションIDの生成にMD5を指定した(またはデフォルトの)場合だけど。

しかしDigest::MD5はPerl 5.8.0以降なら標準モジュールだけど、プロバイダのサーバがPerl 5.6.1ですぅ、XSモジュールなんてインストールできませーん、てなことも。

よくできたことに、Digest::MD5はXSがロードできなければ、Digest::Perl::MD5を継承してくれる。私は最初知らなくって、CGI::Session::ID::MD5の中身をわざわざDigest::Perl::MD5を使うように修正していた 笑。でも、テストの通ってるCPANモジュールをわざわざ修正なんてしたくないわけで。オリジナルのCGI::Sessionの戻して、Digest::MD5経由でDigest::Perl::MD5を使う方法に変更することに。

で、Digest::MD5をWindows上でINSTALLSITELIB=サーバアップ用の作業ディレクトリとかして、一応Makeの手順を踏んで、バイナリを削除してプロバイダのサーバにアップしようとしたのだけど、Digest::MD5をPerl Makefile.PLすると、Warningが出た。

F:\>Perl Makefile.PL INSTALLSITELIB=c:/workingdir/site/lib
Assumes that MSWin32 implies free alignment for U32 access.
Warning: prerequisite Digest::base failed to load: Can't locate Digest/base.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at (eval 4) line 3.
Writing Makefile for Digest::MD5

ふぅーん、Digest::baseがいるんだ、と思い、Digestも入れることにした。いざ、サーバ上のソースを置き換えると、私のDigest::Perl::MD5置換版のCGI::Sessionでは動作していたソースが、こんな出力。

Undefined subroutine &Digest::base::new called at /foo/bar/site/lib/CGI/Session/ID/MD5.pm line 14.

要するにDigest::MD5->newはXSにしか定義がないので、継承元のDigest::base->newを呼ぼうとして失敗するらしい。Digest::MD5のソースを見たが、Digest::Perl::MD5をロードする場合は、Digest::baseを継承しなくっても特に問題はなさそう。ということで、Digest::baseは削除。一件落着。無事動作した。

続きを読む...

January 7, 2004

小さいアイコンのサイズ

小さいアイコンのサイズを取得するためにGetSystemMetricsにSM_CXSMICONと、SM_CYSMICONを渡してみたんだけど、それぞれ、0と1が返ってきた。
GetSystemMetricsの戻り値ってぴくせるだよね~?
要調査
ちなみにOSはWindowsXP SP1
VB6での実行
---------------
2004/04/23 追記
Private Const SM_CXSMICON As Long = &H49&
Private Const SM_CYSMICON As Long = &H50&
って宣言してた。 SM_CXSMICON と SM_CYSMICON はそれぞれ10進で49と50である(^-^;)