トップ «前の日記(■2005-02-04) 最新 次の日記(■2005-02-13)» 編集

どんぞこ日誌

2003|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|07|08|12|
2007|01|04|08|12|
2008|01|02|03|04|06|07|08|10|11|12|
2009|01|02|04|05|06|07|08|09|11|12|
2010|01|03|04|07|08|10|11|12|
2011|01|02|03|04|05|06|07|08|10|12|
2012|01|02|03|05|06|07|08|09|10|
2013|01|02|07|08|09|
2014|08|09|
2015|08|
2016|06|07|12|
2017|01|03|08|
2018|03|
2022|03|
2023|03|
2024|02|

同人関連(どんぞこ楽屋) | 旧い雑文   


■2005-02-07

* [CGI] TypeKeyでFreeStyleWikiB!

 去年の夏にAuthen::TypeKeyをFreeStyleWikiに組み込むという話を書きましたが、実際に試してみました。TypeKeyに登録している方はぜひここの右上のメニューにあるTypeKeyをクリックしてログインしてみてください。あと、PuerPerlのMath::Pariを使っても、本当のMath::Pariよりもだいぶ遅いとはいえ、実用に耐えそうです(上のテストはXS版Math::Pariです)。

 先日のbacklinksプラグインは既に同じ機能のものが登録されていて大失敗でした。

* [メモ] Perlその他B!

・threadsとencodingの件→mainパッケージでbinmode(STD [OUT|IN], ":raw :encoding(xxx)")するとthreadas->newで落ちる。子スレッド内でThread::Use経由でencodingするだけなら大丈夫。でも今度はencodeがうまくいかない……

・今月のAcmeはネタ切れか? My Favorite Perl Modulesみたいなサイトがあるなら、もうここで紹介してるのがバカバカしいかも。

自分のした事実を認めること  コメント欄の「一市民」は"リベラル"と"左翼"をどのように理解しているのだろうか(この場合イコールと想定されているようだから、結局「左翼」とは何かにいくのかなあ)

* [Perl][メモ] CDBIサブクラスで複数データベースを扱うB!

  同じテーブル構造が複数のデータベースにあって、一つのClass::DBIサブクラスで両方を扱いたい用があったので、Using Multiple Databasesを参考にしたのですが、うまくいきません(単純なretrieveははうまくいくのですが、might_haveを通じての取り出し等がうまくきません)。で、以下の方法でなんとかなったのでメモ。

 package MultiDB;
 use base qw(Class::DBI);
 
 __PACKAGE__->mk_classdata('current_dbh');
 
 sub change_db {
   my ($class,$dbname,$user,$pass,$attr) = @_;
 
   if($dbname{$dbname}){
     $class->current_dbh($dbname);
   }
   else{ # $dbnameをキーにするのは良くないね……
     $dbname{$dbname} = 1;
     $class->current_dbh($dbname);
     Ima::DBI->set_db(
      $dbname,"dbi:xx=$dbname;xx",$user,$pass,$attr
     );
   }
   return $dbname;
}
 
 sub db_Main {
   my $class   = shift;
   my $method  = "db_" . $class->current_dbh();
   $class->$method;
 }
 
 ...なんかいろいろ
 
 # mainスクリプト
 
 MultiDB->change_db('table_a');
 {
   my @data = MultiDB->retreive_all;
   # .. code ..
 }
 
 MultiDB->change_db('table_b');
 {
   my @data = MultiDB->retreive_all;
   # .. code ..
 }

  メインコードでテーブルを変える毎にブロックで囲っているのは、同一スコープ内ではメモリ内にあるオブジェクトの一意性が保持される(弱いリファレンスを使う)というClass::DBIの仕様があるため。スコープが変われば破棄されます。table_bから取り出したidと同じものがtable_aにあるとそちらが取り出されてしまい、最初戸惑いました。 んー、ちょっと上の例は問題があるので修正しないと……

[]