ndtpd + bookview で辞書を引こう


Windows から Linux に移行するうえで、MS Office、特に Word とか Excel が使えないと困るので完全に移行しきれません、せめて読めるだけでもいいんですが、なんて話をよく聞く。まぁ幸いオレは Word も Excel も公私ともに使っていない(Excelは経費精算のときくらい極マレに使うけど)ので、そういう悩みはないんだけどね。

だけど、Windowsで常に使っていて、どうしても使い続けたいものがあったのよ、オレにも。それが英和・和英辞書ビューワだ。研究社の英和・和英中辞典を圧縮してハードディスクに丸飲みして使う、スタンドアロンなヤツだったんだけど、重宝しててね。最近は、もうすっかり赤帽のコンダラ環境も整ってきたんで、そろそろ辞書関係をなんとかしたいなぁと思っていたところだったわけ。で、Slackwareの時にも使っていた辞書システムを赤帽でも使うことにした。なんで「システム」とわざわざ書くかというと、クライアント・サーバの形態だからなのだ。

NDTP(NetworkDisctionaryTransferProtocol)というプロトコルでお喋りするサーバとクライアントで構成されていて、ndtpd というそのまんまな名前の ndtp デーモンと bookview というTcl/Tkベースなビューワで辞書サーバに問い合わせて使う。

他にもLinux(ないしはUnixクローン)で辞書を引く方法はたくさんあって、Mule や Emacs で使う elisp のパッケージなんてのが有名なんじゃないかと思う。たぶんスタンドアロンでも辞書サーバを立てても使えるようになっているんじゃないか、と思うけど、オレはもうEmacsを捨ててJedな体(笑)なんでこれは使えない。辞書サーバには昔、dserverってのがあったけど、最近は聞かないから、ndtpd に置き換えられているのかもね。

実は Jed の機能を S-Lang で拡張してやる方法も少しずつだけど覚えてきて、今面白いところなので、そのうち ndtp を喋るクライアントの機能を Jed に持たせたろか、などと思っているってのもあって、辞書サーバを立てることにしたんだ。

RPMになっているパッケージがないかと思って探してみたんだけど、どうも見つからなかったから、自分で作っちゃったよ。1次配布元はNDTPDBookView だ。

パッケージにしたものをパッケージ置き場に置いておいた。

ndtpd は本体と devel に分ける必要を実はあんまり感じてなかったんだけど、一応、ヘッダ・ファイルやスタティックなライブラリを分けてパッケージにしておけば、いつか使い道を考えつくかな?などと思って、他の赤帽なパッケージの構成をマネてみた。また、bookviewのパッケージは、本来はそれ単体では何の役にも立たないのだが、辞書サーバ1台にクライアント数台で辞書を共有できる、という旨味があるので依存関係を指定せずに単体でインストールできるようにしてある。

で、とりあえずスクリーン・ショット を見てもらおう。こんな感じ。もちろん単語の検索には正規表現が日本語、英語ともに使えるので非常に便利だ。え〜っと、略語って英語でなんていったっけ? abbr で始まる単語だったと思うが… なんて場合は、abbr* として検索してやれば、ちゃんと abbreviation に辿りつける。グ〜だぜ。

さて、設定と運用のほうだが、/etc/ndtpd.conf を書いて、/etc/rc.d/rc.local ででも ndtpd を起動してやるだけだ。bookview の方は特に設定は要らない。というか初回の起動時に勝手に作ってくれるので、あらかじめ用意しておく必要はない。

/etc/ndtpd.conf は、オレのパッケージを使う場合は、/usr/doc/ndtpd-2.0.3 に ndtpd.sample というファイルがインストールされるので、それをベースに必要な事柄を記述していけば簡単に書けるだろう。ちなみにオレの使っているのはこんな感じだ。

server-name		pinga.southpole.com
ndtp-port		ndtp
user			nobody
group			nobody
max-clients		3
hosts			127.0.0.1
hosts			pingo.southpole.com
#hosts			!?
timeout		900
work-path		/var/ndtpd
syslog-facility		local0

begin book
    name		CHUJITEN
    title		英和・和英中辞典
    path		/usr/share/EbxDic
    max-clients		3
    hosts		127.0.0.1
    hosts		pingo.southpole.com
    alias-eiwa		CHUJITEN
    alias-waei		CHUJITEN
    alias-kojien	KOUJIEN
end

で、ここで大事なのは、オレの場合は /usr/share/EbxDic となっているが、このディレクトリ以下の構成だ。必ず CATALOG ファイルがこの直下に来るようにしないと正しく動かないので注意が必要だ。オレの場合は

Toru:~$ ls /usr/share/EbxDic -lR
total 28
-rw-r--r--   1 root     root         2048 Jul 24  1995 CATALOG
drwxr-xr-x   2 root     root         1024 May 28 06:54 CHUJITEN/
drwxr-xr-x   2 root     root         1024 May 28 06:50 KOUJIEN/
-rw-r--r--   1 root     root        12288 Jul 24  1995 LANGUAGE
-rw-r--r--   1 root     root        12288 Sep 26  1995 WELCOME

/usr/share/EbxDic/CHUJITEN:
total 104195
-rw-r--r--   1 root     root     39553628 May 15  1996 SOUND
-rw-r--r--   1 root     root     66723840 Dec 22  1995 START

/usr/share/EbxDic/KOUJIEN:
total 94250
-rw-r--r--   1 root     root         8192 May 10  1996 LANGUAGE
-rw-r--r--   1 root     root      5522540 May 10  1996 SOUND
-rw-r--r--   1 root     root     90599424 May 10  1996 START

という具合になっている。で、このファイル名やディレクトリ名が全部大文字なのはちょっとUnixの世界にそぐわない感じだが、これは小文字にすると恐らく動作しなくなるので、ここも注意ね。samba経由でコピーしたりすると、ウッカリすると全部小文字になったりするからねぇ。

基本的に、世の中に出回っている「電子ブック形式」というフォーマットの辞書ならそのままで使えるハズだ。もちろんハード・ディスクにコピーしなくても、CD-ROMをマウントして使ってもいい。

で、いよいよ ndtpd の起動だが、その前に、/etc/services に

ndtp            2010/tcp

という1行を追加しておこう。これはBookViewだけをインストールして、ネットワーク越しに辞書を引きたいマシンでも同様に必要だ。getservbyname()でポート番号を引いてるからね。で、ここまで設定したら、root になって、/usr/sbin/ndtpd を引き数なしで起動して見よう。だまって起動できたら、/usr/sbin/ndtpdcheck を実行して、さらにチェックしてみること。/etc/ndtpd.conf に間違いなどがあると、ndtpcheck が、ndtpd.conf の何行目が解釈できないか、などを表示してくれる。何も警告の類が表示されなければ、設定はうまくいっていると見ていいだろう。

最後に、/etc/rc.d/rc.local に末尾にでも

if [ -f /var/ndtpd/log/ndtpd.pid ]; then
        rm /var/ndtpd/ndtpd.pid
fi
/usr/sbin/ndtpd

などといった感じで追加しておけば、次回リブート時から ndtpd が使えるようになる。デスクトップとノートPCで辞書を共有して使っているが、ほとんどタイム・ラグなく瞬時に引けるので、とっても快適だ。


メール 戻る