技術

重複したレコードがないかをチェックする【SQL】

SQL文でテーブル中にあるフィールドを対象にして重複がないかを確認する。

select field1,count(*) from tablename group by field1 having count(*) > 1;

でチェックできる。

昨日とか明日とか何日前何日後とかを求める【PHP】

<例(昨日の算出)>
$date_today = mktime (0, 0, 0, date(“m”), date(“d”), date(“y”));
$date_yesterday = $date_today – 86400;
echo date(‘y-m-d’, $date_yesterday);

今日-86400 = 昨日
今日+86400 = 明日

PHPで長い処理をさせるときにタイムアウトでエラーになる【PHP】

スクリプトの最初にとりあえず
 set_time_limit(0);
を入れておく。ゼロは無制限。標準で30らしい。

.htaccessでのIPアドレス制限【WEB】

.htaccessでのIPアドレス制限をする。

Order Allow,Deny
Allow from 192.168.xx.xx
Allow from 192.168.xx.xx

Turbo Pascalとか【再投稿】

turbo-pascal-1

もう25年位前にTurboPascalというコンパイラがありました。後にDelphiと変わっていくコンパイラです。
その頃のみんなはBasicの次にマシン語、その後、高級言語(Cとか)を触り始めるのですが、Cとかだと、(その頃はMSCだったと思う。)すごくコンパイルが遅いんですよ。基本的にHDDなんて高くて手が届かない時代で、FDDでやってたんですが、コンパイルになると、カツン、ガチャガチャ、カツンカツンってFDにアクセスばっかしですごく遅かったんですね。プログラムをちょっと書いて、コンパイルするにもひどく時間掛かってました。
そんなときに出てきたのが、TurboPascal。購入したときは多分 Ver3.0 ぐらいじゃないかなーとか思ってたのですが、いまぐぐると、見覚えがある画面は Ver1.0らしい。。。

コンパイルがね、画期的に早いんですよ。FDへのアクセスが皆無。メモリ上で、だららららーーってすぐ終わるのがすごくて。もうPascalばっかしやってました。

職場の上司の人は、「Pascalなんて勉強してなんになるんだよ。普通Cだろ。」とか言ってくるのですが、「いやいやいや普通じゃいやですから」でPascalを勉強してました。

作法に厳しい言語で、今のPHPみたいにいきなり変数を使うことなんてできなくて、プロシージャのはじめに、

var x,y : integer ;
   count : integer ;
message : string[80];

みたいな感じで変数宣言をしないといけないのですが、これがすごく邪魔くさい反面、変数間違いとかのバグが大幅に減ったりしてすごくいいです。

その後、Pascalを設計したのがニクラウス・ヴィルトという人だった影響もあって、その人の次の設計言語、Modula-2っていう言語を勉強したのですが、これは。。。うー。なにが気にいらなかったって、大文字だったんですよ。コードが。例えば、

Pascalだと。

procedure test1;
var x,y : integer ;
  count : integer ;
message : string[80];
begin
  writeLn(‘Hello, world!’);
end.

っていうかんじのプログラムが

MODULE test1;
FROM InOut IMPORT WriteLn,WriteString;
BEGIN
WriteString(‘Hello, world!’);
WriteLn
END sample.

こんな感じになります。美しくない。。。Pascalの美しさがなくなってしまっている。。。。。
そんな感じでやめました。そのままPascalをつかってて、そのうち後継の統合開発環境として、Delphiが発表されます。このころはもう仕事がその方向じゃなかったので全然触ってなくてわからなくなってしまいました。

でも初期のTurboPascalはすごい思い出深いです。

計画停電対策3

計画停電対策も最終段階になりました。サーバーも入荷、移行もかなり進みました。
なんかすごいコンパクトでサーバールームも静かになったですよ。あとはその分故障率に変化があるかどうか。

計画停電対策2

インバータ発電機です。あとは低消費電力サーバー待ち。

計画停電対策

この夏の計画停電があるかどうか微妙ですが準備はしておかないと。。でばっちし用意を進めています。
写真は無停電装置ですがこれも買うと高い!バッテリだけでも高い!でもまぁ計画停電がなかったとしても、これだけ天候が激しくなってくると停電対策は念には念を入れないと。

FreeBSD + Postfix + Spamassassin

仕事でまた spamassassin を使ってます。今回は念願の FreeBSD postfix postgresql の組み合わせです。
やぱり postfix でないと。

maillog で、

spamd: still running as root: user not specified with -u, not found, or set to root, falling back to nobody

みたいなエラーが出ました。
なんかspamdがrootで動いてるみたいな感じらしいです。ですので、

/usr/local/etc/rc.d/sa-spamd を

ommand_args=”-d -d -x -r -v -q -u hogehoge -A 202.211.xx.xx -r ${pidfile}”

で -u hogehoge みたいな感じで別のユーザーにしてあげると行けそうです。

あと、-A 202.211.xx.xx は、

spamd[40410]: spamd: unauthorized connection from noname.freedom.ne.jp [202.211.xx.xx] at port 24135 at /usr/local/bin/spamd line 1271.

がmaillogに出た時の対処です。なんかこうしないと、127.0.0.1からしかspamdは受け付けてくれないみたいです。

pgsqlの場合の/usr/local/etc/mail/spamassassin/sql.cf

user_scores_dsn DBI:Pg:dbname=spamassassin;host=localhost;port=5432
user_scores_sql_password xxxxxxx
user_scores_sql_username zzzzzzz
×user_scores_sql_custom_query SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = ‘$GLOBAL’ OR username = CONCAT(‘%’,_DOMAIN_) ORDER BY username ASC
○user_scores_sql_custom_query SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = ‘$GLOBAL’ OR username = ‘%’ || _DOMAIN_ ORDER BY username ASC

※postgresqlではconcatは使えない。

pgsqlの場合のuserprefテーブル作成

userpref

http://www.koders.com/sql/fid0DF2E1AD66C6EB4CE480765A739AD867D8EA4A07.aspx?s=update

CREATE TABLE userpref (
prefid bigserial NOT NULL unique primary key,
username varchar(100) NOT NULL,
preference varchar(30) NOT NULL,
value varchar(100) NOT NULL
);
CREATE INDEX userpref_username_idx ON userpref(username);

pgsqlの場合のawlfテーブル作成

http://www.opensource.apple.com/source/SpamAssassin/SpamAssassin-124.5/SpamAssassin/sql/awl_pg.sql

CREATE TABLE awl (
username varchar(100) NOT NULL default ”,
email varchar(200) NOT NULL default ”,
ip varchar(10) NOT NULL default ”,
count bigint default ‘0’,
totscore float default ‘0’
);
CREATE UNIQUE INDEX awl_pkey ON awl (username,email,ip);

pgsqlの場合のbayesテーブル作成

http://svn.apache.org/repos/asf/spamassassin/branches/3.0/sql/bayes_pg.sql
CREATE TABLE bayes_expire (
id integer NOT NULL default ‘0’,
runtime integer NOT NULL default ‘0’
);

CREATE INDEX bayes_expire_idx1 ON bayes_expire (id);

CREATE TABLE bayes_global_vars (
variable varchar(30) NOT NULL default ”,
value varchar(200) NOT NULL default ”,
PRIMARY KEY (variable)
);

INSERT INTO bayes_global_vars VALUES (‘VERSION’,’3′);

CREATE TABLE bayes_seen (
id integer NOT NULL default ‘0’,
msgid varchar(200) NOT NULL default ”,
flag character(1) NOT NULL default ”,
PRIMARY KEY (id,msgid)
);

CREATE TABLE bayes_token (
id integer NOT NULL default ‘0’,
token char(5) NOT NULL default ”,
spam_count integer NOT NULL default ‘0’,
ham_count integer NOT NULL default ‘0’,
atime integer NOT NULL default ‘0’,
PRIMARY KEY (id,token)
);

CREATE TABLE bayes_vars (
id serial NOT NULL,
username varchar(200) NOT NULL default ”,
spam_count integer NOT NULL default ‘0’,
ham_count integer NOT NULL default ‘0’,
token_count integer NOT NULL default ‘0’,
last_expire integer NOT NULL default ‘0’,
last_atime_delta integer NOT NULL default ‘0’,
last_expire_reduce integer NOT NULL default ‘0’,
oldest_token_age integer NOT NULL default ‘2147483647’,
newest_token_age integer NOT NULL default ‘0’,
PRIMARY KEY (id)
);

CREATE INDEX bayes_vars_idx1 ON bayes_vars (username);

smtp authについてはここがすごく参考になります。
http://satospo.sakura.ne.jp/blog_archives/tech/centos/postfix_smtpauth.html

webalizerのmakeでエラー

ja-webalizer-2.23.4_1 を portsから makeするときに gd library not found.. please install libgd と出てエラーストップする。

http://www.pc-freak.net/blog/how-to-fix-configure-error-gd-library-not-found-please-install-libgd-during-webalizer-port-make-on-freebsd/

のページの方法でうまくいきました。

#cd /usr/ports/graphics/gd/
#portmaster .
#make
#make install

の後、webalizer をmake

Translate »