2007年1月アーカイブ

SQLiteの疑問

| コメント(0)

SQLiteってchar型のPrimary Key作れんのかしら。
手元だとIntegerしかいけん。

追記
あちゃー、上以外のところでハマてた。
やっぱりマニュアルの通り。いけねいわけねい。


"孤独と人生" (ショーペンハウアー)

読了。思っていたよりずっと読みやすく面白ろい本だった。もっと早く読んでおきたかったにゃ。毒あり杉。

今日、日曜日PM9時から1ch(NHK)で「NHKスペシャル 「グーグル革命の衝撃」」やるでち。
Googleなら株式市場を合法に操作できるでちか?? みるでち。ヽ(`Д´)

> pp なんちゃら
Can't call method "desiredCompressionMethod" on an undefined value at C:\Perl\site\lib/PAR/Packer.pm line 1102.

というエラーにハマりました。
Windows XP SP2, ActivePerl Build 819 [267479], PAR-0.972, PAR-Packer-0.970。
use Carp; confess, warn であれこれやってみました。

環境変数PERL5LIBをC:\Perl\site\libをC:/Perl/site/libにしたら上手くいきました。

しかしワルさしてる所在はよく分からず・・・

WxPerlで書いたスクリプトをWindowsのEXE形式にしようとppを使いました。
出来たa.exeを実行するものの、実行後なにも表示されずループしている様。
メモリの使用量もずーっと増え続けてる・・・

PAR::Packerのmake testも通るしおかしいな・・・と。
どうやら

pp main.pl

と、「main.pl」を指定してたのが問題みたい。

C:\Documents and Settings\USER\Local Settings\Temp\par-USER\cache-927578f37dd5fe9a7dd4824a9868a808dc38a4b7\inc\script\main.pl
ってのが決め打ちであるじゃん・・・(pp main.plとしなくても)

pp main5.pl

とやったら、同ディレクトリにmain.plとmain5.plがあったよ・・・
おそらく

pp main.pl

だと、その決め打ちmain.plがppの引数のmain.plを呼んで、以下ループ・・・って状態になってたっぽ。

丸一日嵌りました・・・インターフェースは重要でしゅね。

同じような運が悪い人が増えないようppはmain.plが指定できないようになったらいいな。

Catalyst::Plugin::PageCache。
Catalyst::Plugin::CacheとCatalyst::Plugin::Cache::Store::FastMmapの組み合わせだと

[error] Caught exception in engine "metadata must be an even sized list at /Library/Perl/
5.8.6/Catalyst/Plugin/Cache.pm line 211

ってdieしちゃう。

関数呼出しの際の引数の問題でした。

マトモな英語書きてい。

Ajax.Request。GETを使うとIEだとキャッシュしちゃう??
POSTで解決。

var myAjax = new Ajax.Request(
url,
{
method: 'post',
onComplete: showResponse
});

やっぱりSafariで書くのはダメかな・・・
IEで確認が必須なのは分かってはいるけど・・・

現在はNavicatでテーブルを作成してます。
InnoDBでForeign Keysを設定し、DBIx::Class::Schema::Loaderで動的に読み込み
DBIx::Class::Schema::Loader::RelBuilderでリレーションを自動生成します。

ただ、これが最適だとはちっとも思っていません。
どうしよっかな。

候補は・・・

  1. Navicat + DBIx::Class::Schema::Loader (現状)
  2. DBIx::Class::Schema + SQL::Translator::Parser::DBIx::Class
  3. DBDesigner4 + FabForce::DBDesigner4

結論は2に決定。

1は、バージョンアップが大変。
なので、初期立ち上げまではよいが、ブランチを切るときに面倒。

また、might_haveやhas_oneはRelBuilderでは作れないので
別に書かなくてはならない。
よって、DBのテーブルとDBIxのSchemaクラス両方にORMの情報が分散してしまう。

2は特に弱点なしか。
ORMの情報はDBIxのSchemaクラスのみに集約される。
バージョンアップも

sqlt-diff --to MySQL Schema1=MySQL Schema2=MySQL > SchemaUpdate.mysql.sql

のようにできるので、事の面倒さ相応の対応で済みそう。
リレーションの図式的な把握も、sqlt-graph(SQL::Translator::Producer::GraphViz)があるのでなんとかなる。
ただ、やってみたが、出来たpngは白黒でとても簡素だ・・・

3もORMの情報が分散されてしまう。


"THE END OF SOFTWARE(ジ・エンド・オブ・ソフトウェア)―IT経営の常識が変わる" (ブレインワークス)

この手の本では久々のヒット。良い本です。

買ったきっかけは、Jun ShimizuさんのCatalyst::Helper::Model::CRUDを見たのがきっかけ。

DBDesigner4のER図がDBに流しこみをやろうとして見付けまいた。

Podにはシャノンという社名があったので、それでググってPDFを見つけました。
Catalystを使ったエンタープラ イズアプリケーションの構築」
Catalystをフル活用されているようです。
そのシャノンさんの事例がこの本に載っているということで読んでみました。

以下メモ
共通の問題領域を解消するツールを作成し、それをマルチテナントでサービス
なるべくコード書かない サイクル リサイクル stay thin

残念ながらCatalyst::Helper::Model::CRUDを含め
去年8月ぐらいでシャノンさんのPMの更新が止まっているようなので
替りに後でFabForce::DBDesigner4を調査。

SalesForce版DashBoardというか、
全ての事業所が繋がっているDashBoard Widgetがあったら面白いかも。

Youtubeで見付けました。
みたことなかったです。

  1. ボクシング編
  2. ロミオとジュリエット編
  3. スマート3車種全部編

キー:スマロー SmartLoadster Smart Loadster

CPAN

% install Task::Catalyst


などとすると

*** Module::AutoInstall version 1.02
*** Checking for Perl dependencies...
[Core Features]
- Catalyst ...missing. (would need 5.65)
==> Auto-install the 1 mandatory module(s) from CPAN? [y]
[Log4perl Support]
- Params::Validate ...missing.
- Catalyst::Log::Log4perl ...missing. (would need 0.1)
==> Auto-install the 2 optional module(s) from CPAN? [y]
[HTML::Widget Support]
- Date::Calc ...loaded. (5.4)
- Catalyst::Plugin::HTML::Widget ...missing. (would need 1.1)
==> Auto-install the 1 optional module(s) from CPAN? [y]

と聞かれて、Enter連打してました。

このインストールを担当してるのは
Module::AutoInstallです。
Podを読んでみたら、これを回避する方法が分かりました。

環境変数、
PERL_AUTOINSTALL--defaultdepsをセットします。
そんだけです。

具体的には・・・

% export PERL_AUTOINSTALL="--defaultdeps"
% cpan


% PERL_AUTOINSTALL="--defaultdeps" cpan


% perl Makefile.PL && PERL_AUTOINSTALL="--defaultdeps" make


です。

でもlwpなんかのインストールだと、聞かれちゃいますね。


"Access2003でつくる販売管理システム" (TMS)

Catalyst + MySQL + Navicat で簡単なCRUD + List + 一括Delete を伴なうサイトを作れるようにはなった。
今度はこれによってストアされたMySQLのデータをAccessでも操作してみようと思いました。
初Accessといえば、中坊のころに手持ちCDリスト+ラベラーを作ったのが始まりです。
そのうちFileMakerとも比較してみるつもりです。

NuOnceをSun Cobalt, Class Cat Cute, BlueQuartz (2003年)からの移行用へと新調した。
旧サーバから新サーバへCGIを移行したが、一部上手く動かないものがある。
それは$ENV{'REMOTE_USER'}を拾ってるスクリプトである。

#!/usr/bin/perl

use Data::Dumper;

print "Content-Type: text/plain\n\n";
print Dumper \%ENV;

上のスクリプトを用意して

% w3m 'http://ユーザ:パス@ホスト/dump_env.cgi?aaa=aab' | grep \'REDIRECT | sort
'REDIRECT_QUERY_STRING' => 'aaa=aab',
'REDIRECT_REMOTE_USER' => 'ユーザ',
'REDIRECT_SCRIPT_URI' => 'http://ホスト/dump_env.cgi',
'REDIRECT_SCRIPT_URL' => '/dump_env.cgi',
'REDIRECT_STATUS' => '200',
'REDIRECT_UNIQUE_ID' => 'VJaXrH3OfAYAACdRTN8AAAAZ',
'REDIRECT_URL' => '/dump_env.cgi',

ふみゅ。
元のREMOTE_USERハッシュキーは存在せず、接頭辞REDIRECTが付いてるのに置きかわってる。
Apache2.0.48ぐらいから、そういう動作のよう。

BlueQuartzのCGIはCGIWrapが担当していて、Apacheが渡すまえに置きかえている。
で、正しいかな。

.htaccessに

Options +ExecCGI
#AddHandler cgi-wrapper .cgi
AddHandler cgi-script .cgi

とすれば、「接頭辞REDIRECT置き換え」はされないが、今度はユーザ権限がApacheのまま。

$ENV{'REMOTE_USER'} 系のスクリプトを書き直さずに動かすにはどうしたらいいんだろうか・・・

キー:internal redirect, internal_redirect

先日インストしたNuOnceで見事にハマりました。

Sendmailで外から受信、SMTP経由で外へ送信は問題ないものの
CGIやPHPから送れないという症状。
具体的には

% cat | /usr/sbin/sendmail -t -n -oi メアド
test
detu
CTRL-D

/home/ユーザ/dead.letter... Saved message in /home/ユーザ/dead.letter

と死んでしまう。

CGIで

open(MAIL, "| /usr/sbin/sendmail -t -n -oi メアド");

などとしていると、上のエラーが

print "Content-Type: text/plain\n\n";

などより先に出力されてしまったりして、malformed headerエラー。
(CPANレス系のCGIですが・・・)

% tail /var/log/maillog

すると

Jan 4 23:17:12 www sendmail[1919]: l04EH9f8001919: to=メアド, ctladdr=ユーザ (501/501), delay=00:00:03, xdelay=00:00:00, mailer=relay, pri=30008, relay=[127.0.0.1] [127.0.0.1], dsn=5.6.0, stat=Data format error

"Data format error"じゃ、分からんじゃんけ!

で解決の切っ掛けは-vオプション。

% cat | /usr/sbin/sendmail -v -t -n -oi メアド
〜省略〜
553 5.3.0 <ユーザ@ホスト名>... No such user here
/home/ユーザ/dead.letter... Saved message in /home/ユーザ/dead.letter

どうやら、No such user hereとバウンスされている様。

% grep 'No such user here' /etc/mail/*

すると

/etc/mail/virtusertable:@ホスト名 error:nouser No such user here

とバウンス壁が用意されてる。
このルールはBQの「仮想サイト」に登録されると、作られる。

結論
BlueQuartz(NuOnce Installer)では
「システムのTCP/IPのホスト名とドメインネーム」で設定したFQDNは
「仮想ホスト」に登録しないこと!
(登録すると、その「仮想ホスト」に登録したユーザしかコマンドインターフェイスではメールが送れなくなります)

マル激298後半

| コメント(0)
バイト

マル激298前半

| コメント(0)

北の鮨工房 敷島店です。

Cimg0917

中トロ、大トロが本当ウマイです!
他のデリバリーや、持ち帰り鮨じゃ食べられない味だと思われ。