セッションファイルの削除

mixiでみつけたサンプル。CGI::Session使う上では必要だろう。

  • CGI::Session のドライバにFile, IDジェネレータに MD5 を利用している前提です。
  • 他のドライバや、IDジェネレータを使っている場合は書き換える必要があります。
  • $sessdirの設定は適宜書き換えてください。
  • unlinkに失敗したときのフォローがないのでその辺が気になれば加えてください。

※2008-01-26、コメントで指摘を受けて、明確なエラーを修正。シミケイさん、ありがとうございました。

#!/usr/bin/perl
use strict;
use warnings;
# セッションファイルを置いているディレクトリを指定
my $sessdir = '/home/userdir/sessdir';
opendir(SESSDIR, $sessdir);
while (my $sess = readdir(SESSDIR)) {
	if ($sess =~ /^cgisess_[0-9a-f]{32}$/) {
		my $file = qq|$sessdir/$sess|;
		my $days = -M $file;
		# 最終更新から1日以上経っているセッションファイルを削除
		# 1日より短く指定したい場合は小数点でもOK
		$days > 1 and unlink $file;
	}
}
closedir(SESSDIR);
exit;

Class::DBIあれこれ

とてつもなく便利なモジュールだが、デフォルトで使うとちょっと困った点が。
データベースハンドルの扱いのことだ。しかしテキストを見るとできないこともないようだ。
方策としては、

  1. Class::DBIが握りこんでいるハンドルをどっかから取って来る。
  2. あらかじめ作ったデータベースハンドルをClass::DBIにも使わせる。

のどちらかだ。
1は、もしかしたら、Class::DBI->db_Mainで取り出せるのかも。
2は、set_dbを行わずに、データベースハンドルを返すdb_Mainメソッドを作ればいいのかも。
ちょっと実験してみよう。
さらに注意点。本来アリウベカラザル状況だが、テーブルのカラム名SQL予約語を使うと、さしものClass::DBIもずっこける。つうか、そもそも予約語カラム名にするなと。orz
ちなみにどの単語が予約語になるかは、RDBM毎に違うので注意が必要ってか、最初から使わなければいいので気にする必要がない。orz
実験してみた。
イメージとしては、こんな感じのスクリプト

use DBI
my $dbh = DBI->connect(...);
use Class::DBI;
Class::DBI->set_db('Main', ...);
my $c = Class::DBI->db_Main;
use Data::Dumper;
print Data::Dumper->new([$dbh, $o], ['dbh', 'o'])->Dump();

すると結果は。

$dbh = bless( {}, 'DBI::db' );
$o = bless( {}, 'DBIx::ContextualFetch::db' );

……は? 「DBIx::ContextualFetch::db」って、何?
CPANでさがす。すると。
DBIx::ContextualFetch - Add contextual fetches to DBI - metacpan.org
こういうものだとわかった。
んで、ソース自体も確認してみると、DBI関係のサブクラスで、主にexecuteやfetchを上書きするものようだ。execute一つでbind_paramとbind_colの二つが実行でき、fetchはスカラーコンテキストでは配列へのリファレンスを返し、配列コンテキストでは配列を返す。そんな感じである。
本来の動作はさまたげないようになっているようなので、2の方策は使わない方がいいだろう。
そしてググる過程でPerlの汚染モードに苦戦 - libnitsuji.soなんてものも見つけて勉強になりますはい。

電脳麻薬ハンター (ハヤカワ文庫SF)

電脳麻薬ハンター (ハヤカワ文庫SF)

電脳麻薬ハンター (ハヤカワ文庫SF)

サイバーパンク風近未来。電脳麻薬が蔓延し、アンドロイドが社会の各所で働く世界。
まあ、内容はともかく。この作者が問題だ。
知っている人は知っている、カーク船長役の俳優さんなのだ。小説も書くのかよっ!と暖かくツッコミを入れたいところ。
そして描写されている世界では、日本人が悪役なのである。
まず、最大の悪役の名前が、「ソニー・ホコリ」。ホコリはどうやら「誇り」のことらしい。「誇り」=Pride=高慢の罪と言う連想だろうか。そして日本人なら名前は当然ソニーさ! orz
最初の電脳麻薬は京都大学で作られたらしい。なんで?
キャラクターが濃いので、ウィリアム・ギブスンみたいな読みづらさはないのがありがたい。てか、エンターテイメントだなあ。ロボ娘も魅力的だし。
ただ、あのオチだけはいただけませんでしたな。
そして、続きがあるみたいなエピローグなんだけど、続きが出たとは聞かないのですよ。残念。

追記

GHOST BREAKER - 業務日誌によると、やっぱり別に中の人がいたようで。

超時空世紀オーガス

アニメ版の脚本を切り貼りして、さらにオリジナルの圭の過去だのなんだのを追加してこのサイズにしたもの。
あーあーそういやそんな話だったねと思い出すのに最適。
ただ、われらがロボ娘モームの扱いが最後、アニメ版と違うのがちょっとズッコケ。オチがないじゃんそれ!
まあ、ラストは同じだったんだけどさ。てか、どうなったのかわからない村上エンド。
正直、コレクターズアイテム。

セッションファイルの削除

mixiでみつけたサンプル。CGI::Session使う上では必要だろう。

  • CGI::Session のドライバにFile, IDジェネレータに MD5 を利用している前提です。
  • 他のドライバや、IDジェネレータを使っている場合は書き換える必要があります。
  • $sessdirの設定は適宜書き換えてください。
  • unlinkに失敗したときのフォローがないのでその辺が気になれば加えてください。

※2008-01-26、コメントで指摘を受けて、明確なエラーを修正。シミケイさん、ありがとうございました。

#!/usr/bin/perl
use strict;
use warnings;
# セッションファイルを置いているディレクトリを指定
my $sessdir = '/home/userdir/sessdir';
opendir(SESSDIR, $sessdir);
while (my $sess = readdir(SESSDIR)) {
	if ($sess =~ /^cgisess_[0-9a-f]{32}$/) {
		my $file = qq|$sessdir/$sess|;
		my $days = -M $file;
		# 最終更新から1日以上経っているセッションファイルを削除
		# 1日より短く指定したい場合は小数点でもOK
		$days > 1 and unlink $file;
	}
}
closedir(SESSDIR);
exit;

Class::DBIあれこれ

とてつもなく便利なモジュールだが、デフォルトで使うとちょっと困った点が。
データベースハンドルの扱いのことだ。しかしテキストを見るとできないこともないようだ。
方策としては、

  1. Class::DBIが握りこんでいるハンドルをどっかから取って来る。
  2. あらかじめ作ったデータベースハンドルをClass::DBIにも使わせる。

のどちらかだ。
1は、もしかしたら、Class::DBI->db_Mainで取り出せるのかも。
2は、set_dbを行わずに、データベースハンドルを返すdb_Mainメソッドを作ればいいのかも。
ちょっと実験してみよう。
さらに注意点。本来アリウベカラザル状況だが、テーブルのカラム名SQL予約語を使うと、さしものClass::DBIもずっこける。つうか、そもそも予約語カラム名にするなと。orz
ちなみにどの単語が予約語になるかは、RDBM毎に違うので注意が必要ってか、最初から使わなければいいので気にする必要がない。orz
実験してみた。
イメージとしては、こんな感じのスクリプト

use DBI
my $dbh = DBI->connect(...);
use Class::DBI;
Class::DBI->set_db('Main', ...);
my $c = Class::DBI->db_Main;
use Data::Dumper;
print Data::Dumper->new([$dbh, $o], ['dbh', 'o'])->Dump();

すると結果は。

$dbh = bless( {}, 'DBI::db' );
$o = bless( {}, 'DBIx::ContextualFetch::db' );

……は? 「DBIx::ContextualFetch::db」って、何?
CPANでさがす。すると。
DBIx::ContextualFetch - Add contextual fetches to DBI - metacpan.org
こういうものだとわかった。
んで、ソース自体も確認してみると、DBI関係のサブクラスで、主にexecuteやfetchを上書きするものようだ。execute一つでbind_paramとbind_colの二つが実行でき、fetchはスカラーコンテキストでは配列へのリファレンスを返し、配列コンテキストでは配列を返す。そんな感じである。
本来の動作はさまたげないようになっているようなので、2の方策は使わない方がいいだろう。
そしてググる過程でPerlの汚染モードに苦戦 - libnitsuji.soなんてものも見つけて勉強になりますはい。

電脳麻薬ハンター (ハヤカワ文庫SF)

電脳麻薬ハンター (ハヤカワ文庫SF)

電脳麻薬ハンター (ハヤカワ文庫SF)

サイバーパンク風近未来。電脳麻薬が蔓延し、アンドロイドが社会の各所で働く世界。
まあ、内容はともかく。この作者が問題だ。
知っている人は知っている、カーク船長役の俳優さんなのだ。小説も書くのかよっ!と暖かくツッコミを入れたいところ。
そして描写されている世界では、日本人が悪役なのである。
まず、最大の悪役の名前が、「ソニー・ホコリ」。ホコリはどうやら「誇り」のことらしい。「誇り」=Pride=高慢の罪と言う連想だろうか。そして日本人なら名前は当然ソニーさ! orz
最初の電脳麻薬は京都大学で作られたらしい。なんで?
キャラクターが濃いので、ウィリアム・ギブスンみたいな読みづらさはないのがありがたい。てか、エンターテイメントだなあ。ロボ娘も魅力的だし。
ただ、あのオチだけはいただけませんでしたな。
そして、続きがあるみたいなエピローグなんだけど、続きが出たとは聞かないのですよ。残念。

追記

GHOST BREAKER - 業務日誌によると、やっぱり別に中の人がいたようで。

超時空世紀オーガス

アニメ版の脚本を切り貼りして、さらにオリジナルの圭の過去だのなんだのを追加してこのサイズにしたもの。
あーあーそういやそんな話だったねと思い出すのに最適。
ただ、われらがロボ娘モームの扱いが最後、アニメ版と違うのがちょっとズッコケ。オチがないじゃんそれ!
まあ、ラストは同じだったんだけどさ。てか、どうなったのかわからない村上エンド。
正直、コレクターズアイテム。

セッションファイルの削除

mixiでみつけたサンプル。CGI::Session使う上では必要だろう。

  • CGI::Session のドライバにFile, IDジェネレータに MD5 を利用している前提です。
  • 他のドライバや、IDジェネレータを使っている場合は書き換える必要があります。
  • $sessdirの設定は適宜書き換えてください。
  • unlinkに失敗したときのフォローがないのでその辺が気になれば加えてください。

※2008-01-26、コメントで指摘を受けて、明確なエラーを修正。シミケイさん、ありがとうございました。

#!/usr/bin/perl
use strict;
use warnings;
# セッションファイルを置いているディレクトリを指定
my $sessdir = '/home/userdir/sessdir';
opendir(SESSDIR, $sessdir);
while (my $sess = readdir(SESSDIR)) {
	if ($sess =~ /^cgisess_[0-9a-f]{32}$/) {
		my $file = qq|$sessdir/$sess|;
		my $days = -M $file;
		# 最終更新から1日以上経っているセッションファイルを削除
		# 1日より短く指定したい場合は小数点でもOK
		$days > 1 and unlink $file;
	}
}
closedir(SESSDIR);
exit;

Class::DBIあれこれ

とてつもなく便利なモジュールだが、デフォルトで使うとちょっと困った点が。
データベースハンドルの扱いのことだ。しかしテキストを見るとできないこともないようだ。
方策としては、

  1. Class::DBIが握りこんでいるハンドルをどっかから取って来る。
  2. あらかじめ作ったデータベースハンドルをClass::DBIにも使わせる。

のどちらかだ。
1は、もしかしたら、Class::DBI->db_Mainで取り出せるのかも。
2は、set_dbを行わずに、データベースハンドルを返すdb_Mainメソッドを作ればいいのかも。
ちょっと実験してみよう。
さらに注意点。本来アリウベカラザル状況だが、テーブルのカラム名SQL予約語を使うと、さしものClass::DBIもずっこける。つうか、そもそも予約語カラム名にするなと。orz
ちなみにどの単語が予約語になるかは、RDBM毎に違うので注意が必要ってか、最初から使わなければいいので気にする必要がない。orz
実験してみた。
イメージとしては、こんな感じのスクリプト

use DBI
my $dbh = DBI->connect(...);
use Class::DBI;
Class::DBI->set_db('Main', ...);
my $c = Class::DBI->db_Main;
use Data::Dumper;
print Data::Dumper->new([$dbh, $o], ['dbh', 'o'])->Dump();

すると結果は。

$dbh = bless( {}, 'DBI::db' );
$o = bless( {}, 'DBIx::ContextualFetch::db' );

……は? 「DBIx::ContextualFetch::db」って、何?
CPANでさがす。すると。
DBIx::ContextualFetch - Add contextual fetches to DBI - metacpan.org
こういうものだとわかった。
んで、ソース自体も確認してみると、DBI関係のサブクラスで、主にexecuteやfetchを上書きするものようだ。execute一つでbind_paramとbind_colの二つが実行でき、fetchはスカラーコンテキストでは配列へのリファレンスを返し、配列コンテキストでは配列を返す。そんな感じである。
本来の動作はさまたげないようになっているようなので、2の方策は使わない方がいいだろう。
そしてググる過程でPerlの汚染モードに苦戦 - libnitsuji.soなんてものも見つけて勉強になりますはい。

電脳麻薬ハンター (ハヤカワ文庫SF)

電脳麻薬ハンター (ハヤカワ文庫SF)

電脳麻薬ハンター (ハヤカワ文庫SF)

サイバーパンク風近未来。電脳麻薬が蔓延し、アンドロイドが社会の各所で働く世界。
まあ、内容はともかく。この作者が問題だ。
知っている人は知っている、カーク船長役の俳優さんなのだ。小説も書くのかよっ!と暖かくツッコミを入れたいところ。
そして描写されている世界では、日本人が悪役なのである。
まず、最大の悪役の名前が、「ソニー・ホコリ」。ホコリはどうやら「誇り」のことらしい。「誇り」=Pride=高慢の罪と言う連想だろうか。そして日本人なら名前は当然ソニーさ! orz
最初の電脳麻薬は京都大学で作られたらしい。なんで?
キャラクターが濃いので、ウィリアム・ギブスンみたいな読みづらさはないのがありがたい。てか、エンターテイメントだなあ。ロボ娘も魅力的だし。
ただ、あのオチだけはいただけませんでしたな。
そして、続きがあるみたいなエピローグなんだけど、続きが出たとは聞かないのですよ。残念。

追記

GHOST BREAKER - 業務日誌によると、やっぱり別に中の人がいたようで。

超時空世紀オーガス

アニメ版の脚本を切り貼りして、さらにオリジナルの圭の過去だのなんだのを追加してこのサイズにしたもの。
あーあーそういやそんな話だったねと思い出すのに最適。
ただ、われらがロボ娘モームの扱いが最後、アニメ版と違うのがちょっとズッコケ。オチがないじゃんそれ!
まあ、ラストは同じだったんだけどさ。てか、どうなったのかわからない村上エンド。
正直、コレクターズアイテム。