まだ重たいCMSをお使いですか?
毎秒1000リクエスト を捌く超高速CMS「adiary

2010/01/30(土)JavaScriptでオブジェクト指向なメモ

適当に追記します。

雑多なおさらい

  • JavaScriptのクラスの概念はないらしい。
  • プリミティブな数字や文字列など意外は、すべてオブジェクトであり参照。
  • 参照なので代入した側でメンバ変数をいじると、代入元も書き換わる。
  • 関数を変数に代入できる。
    var f = function (x){ alert(x); }
    f("msg");    // "msg"と表示される
    

Perl5のオブジェクトに似たところがありますが、クラス名前空間(パッケージ)を持たないため、Perl5よりも簡素な実装と言えそうです。

続きを読む

2010/01/27(水)PostgreSQL関連メモ

あとで適当に追記。

共有メモリ設定

共有メモリの確認

# ipcs -m
# cat /proc/sys/kernel/shmmax

共有メモリの変更

1G
# echo 1099511627776 >/proc/sys/kernel/shmmax
1.5G
# echo 1649267441664 >/proc/sys/kernel/shmmax

起動時に設定するには。

# /etc/sysctl.conf
kernel.shmmax = 1649267441664

制約やカラムの操作

Ver8.3で確認。テーブル名、カラム名が変更されていても作成時のものとなるので注意。

制約の種類制約名
PRIMARY KEY[table]_pkey
UNIQUE[table]_[col]_key
REFERENCES[table]_[col]_fkey
ALTER TABLE table ADD CONSTRAINT table_[col]_fkey FOREIGN KEY ([col]) REFERENCES usr([ref_col]);
ALTER TABLE table DROP CONSTRAINT table_[col]_key;
目的SQL
NOT NULLを付けるALTER TABLE table ALTER COLUMN [col] SET NOT NULL
NOT NULLを外すALTER TABLE table ALTER COLUMN [col] DROP NOT NULL
DEFAULTを付けるALTER TABLE table ALTER COLUMN [col] SET DEFAULT [value]
DEFAULTを外すALTER TABLE table ALTER COLUMN [col] DROP DEFAULT
カラム名を変えるALTER TABLE table RENAME [old_col] TO [new_col]
テーブル名を変えるALTER TABLE table RENAME TO table2

2010/01/09(土)Perl/UTF8, 日本語「全角」→「半角」変換ルーチン

よくネットショップ等で買い物をすると

郵便番号は半角で入力してください。

とか言われてウザくないですか? こういうのを解消するためのルーチンです。

条件

  • Perl 5.8以降
  • 利用可能文字列はutf-8のみ(そうでない場合はutf8に変換して渡してください)
  • WTFPL(PDS扱いでも可)。

ソースは必ずutf-8で保存してください。

日本語に混ざる全角英数等を半角にする

use utf8;
use Encode ();
sub utf8_zen2han {
	my $str = shift;
	my $flag = utf8::is_utf8($str);
	Encode::_utf8_on($str);

	$str =~ tr/ !”#$%&’()*+,-./0-9:;<=>?@A-Z[¥]^_`a-z{|}/ -}/;

	if (!$flag) { Encode::_utf8_off($str); }
	return $str;
}

実行例。

(変換前)abcdefgさささ110-2244あいう##$”
(変換後)abcdefgさささ110-2244あいう##$"

半角カタカナを全角カタカナにする

use utf8;
use Encode ();

my %hankana_map = (
'ガ'=>'ガ','ギ'=>'ギ','グ'=>'グ','ゲ'=>'ゲ','ゴ'=>'ゴ',
'ザ'=>'ザ','ジ'=>'ジ','ズ'=>'ズ','ゼ'=>'ゼ','ゾ'=>'ゾ',
'ダ'=>'ダ','ヂ'=>'ヂ','ヅ'=>'ヅ','デ'=>'デ','ド'=>'ド',
'バ'=>'バ','ビ'=>'ビ','ブ'=>'ブ','ベ'=>'ベ','ボ'=>'ボ',
'パ'=>'パ','ピ'=>'ピ','プ'=>'プ','ペ'=>'ペ','ポ'=>'ポ',
'ヴ'=>'ヴ');

sub utf8_hankana2zen {
	my $str = shift;

	my $flag = utf8::is_utf8($$str);
	Encode::_utf8_on($$str);

	$str =~ s/(ガ|ギ|グ|ゲ|ゴ|ザ|ジ|ズ|ゼ|ゾ|ダ|ヂ|ヅ|デ|ド|バ|ビ|ブ|ベ|ボ|パ|ピ|プ|ペ|ポ|ヴ)/$hankana_map{$1}/g;
	$str =~ tr/。-゚/。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜/;

	if (!$flag) { Encode::_utf8_off($str); }
	return $str;
}

Encode::JP::H2Z

今更使いませんが、EUC-JPの場合は標準モジュールでもできます。逆変換は Encode::JP::H2Z::z2h()。

use Encode ();
use Encode::JP::H2Z ();

sub eucjp_hankana2zen {
	my $str = shift;
	Encode::JP::H2Z::h2z(\$str);
	return $str;
}

その他

バグ等あったらコメントください。