Home

memo-space

DBD::PgとEvent::Libで非同期通知

DBの変更をトリガーにしてPushしたいなら、PostgreSQLのLISTEN/NOTIFYですよ。 最近のDBD::Pgは$dbh->func('getfd')というのが使えるらしい。

POEとかよく知りませんが、libeventならCから使ったことがあるので書いてみた。 こんな感じ。

#!/usr/local/bin/perl
use strict;
use warnings;
use IO::Handle;
use Event::Lib;
use DBI;
use Data::Dumper;

sub listener {
    my ($ev, $type, $dbh) = @_;

    print Dumper($dbh->func('pg_notifies'));
}

my $dbh = DBI->connect("dbi:Pg:", "", "");
$dbh->do("listen hoge");

my $reader = event_new(
    IO::Handle->new_from_fd($dbh->func('getfd'), "r"),
    EV_READ | EV_PERSIST, \&listener, $dbh);

$reader->add;

event_mainloop;

ファイルディスクリプタからファイルハンドルを得るあたりが自信無し。

# 実行
$ perl notify.pl
...
# 別端末でpsqlからnotifyすると、
=> notify hoge;
=> notify hoge;
...
# 非同期通知。ってこの説明で伝わるのか!?
$VAR1 = [
      'hoge',
      15164
    ];
$VAR1 = [
      'hoge',
      15164
    ];

普通はトリガと一緒に使います。

=> create or replace function t1_trig_func() returns trigger as
     $$begin notify hoge; end;$$ language plpgsql;
CREATE FUNCTION
=> create trigger t1_trigger after insert or update or delete on t1
     for each statement execute procedure t1_trig_func();
CREATE TRIGGER
=> insert into t1 values(1);

以下、関連するPostgreSQLのドキュメント

図解:Windowsの文字コード

先日、某所でWindows Vistaで採用されたJIS X 0213:2004の話を聞いてきた。 実際にVistaに触る機会があれば色々実験してみたいと思うけど、 その前にとりあえずWindowsの文字コードについてまとめておきたいと思う。

まずは私の知っているWindows XPまでの話。以下のページを参考にさせてもらいました。 あわせて見ていただけるとわかりやすいと思います。

Windows-31J(CP932とも呼ばれることがあるけど、以降Windows-31Jと呼びます) というのは、

  • JIS X 0201:1997
  • JIS X 0208:1997
  • NEC特殊文字
  • NEC選定IBM拡張文字
  • IBM拡張文字

からなっている(あれ?ユーザ定義外字が無いな)。

JIS X 0201は1バイトなので置いておいて、マルチバイト文字の基本は JIS X 0208という文字集合。これは94×94文字の集合なので 領域としては8836文字分あるけど、空きとかがあって実際に定義されているのは 6879文字だそうだ。

そこに特殊だったり選定だったり拡張だったりを追加した図がコレ。

Windows-31J
Windows-31J posted by (C)あきを

13区と89〜92区はJIS X 0208の空き領域に文字を追加している。 それはともかく115〜119区って94越えてるんだけど、 これはShiftJISというエンコードのなせる技だったりする。

で、本題はこの先。これらの追加された文字は、 歴史的経緯によってすべて重複している。同じ文字の形(グリフ)のものが 2箇所以上にある。つまり2つ以上の文字コードを持っているわけだ。 その重複を表わしたのが次の図。

Windows-31Jの重複符号化文字
Windows-31Jの重複符号化文字 posted by (C)あきを

普通ベン図 は楕円とかで書くんだろうけどそれじゃ上手く書けないので四角になってます。 赤い数字は各四角形の中の文字数。つまりNEC特殊文字は8+1+61+13=83文字と なっていて、そのうち14文字はIBM拡張文字と重複している。 また、9文字はJIS X 0208の2区と重複しているというわけです。

さてこの中には1つの文字で3つの文字コードを持つものは何文字あるでしょう? というと公文式か日能研かという感じだけど。実際のところ2文字あります。

しかし何時間もかけた割にはイマイチな図だな。誰か絵心のある人に書き直してもらいたい。

次はVistaについて書きたい。

2月21日のメモ

昨日、北口の地下でスケートボードをやっていた若者がムーディー勝山を歌っていた。「みぎからやってきたぁー♪」

deq blog - 共同ローカリゼーションフレームワーク

自分が欲しいなと思っていたものに近い。

bobchinの日記

素敵なことをやってる人を発見してしまった。

Makefileをもっと簡潔に

ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き - - Makefile は簡潔に書きましょう

hoge.cからhogeを生成するより簡単な方法は、Makefileを書かないことです。

$ make hoge

Makefileを書くのであれば、

hoge:

とだけ書いて

$ make

で十分。

バレンタインですね

Home

Search
Feeds
Profile
石田@苫小牧市と名乗りつつ札幌の某社に勤務するプログラマ
書いた本
Links

Page Top