%%Title: 辞書をPCに突っ込む [NDTP を使ってみる]

%%Created: Fri Nov 19 12:00:00 JST 1999
%%Updated: Tue Jan 16 17:39:47 JST 2007

o 目次

o NDTP とは?
	Network Disctionary Transfer Protocol.
	CD-ROM 書籍へアクセスするためのプロトコル
	dserver で定義されている?


o NDTPD のインストール
	dserver を置き換える NDTP daemon.
	詳しくはNDTPD公式ホームページに、すごーく丁寧に解説してある。
	最新版はftp://ftp.sra.co.jp/pub/net/ndtp/ndtpd/

	展開して configure; make ; make install
	抜く時は make uninstall

	/etc/services に
		ndtp	2010/tcp
	を追加しとく。
	または alias しとく。
		search	2010/tcp	ndtp

	syslog に関して
	syslog.conf:
		local0.info	/var/log/ndtpd.log
	とか
		!ndtpd
		*.*		/var/log/ndtpd.log
	しとく


o NetBSDでの起動 (2007/01/16)

ndtpdを root以外で動作させるには、/usr/pkg/etc/rc.d/ndtpd に細工が必要。

	*** ndtpd.orig	Tue Jan 16 17:53:03 2007
	--- ndtpd	Tue Jan 16 17:53:07 2007
	***************
	*** 18,20 ****
	  prog=/usr/pkg/sbin/ndtpd
	! pidfile=/var/run/ndtpd/ndtpd.pid
	  
	--- 18,25 ----
	  prog=/usr/pkg/sbin/ndtpd
	! #
	! # make it sure if $workdir is identical to the path defined
	! # in the configuration.
	! #
	! workdir=/var/run/ndtpd
	! pidfile=$workdir/ndtpd.pid
	  
	***************
	*** 23,25 ****
		echo "Starting ${name}."
	! 	/bin/mkdir -p /var/run/ndtpd
		${prog} >/dev/null 2>&1 || {
	--- 28,31 ----
		echo "Starting ${name}."
	! 	/bin/mkdir -p $workdir
	! 	chown ndtpuser:ndtpgrp $workdir
		${prog} >/dev/null 2>&1 || {
	***************
	*** 35,37 ****
			kill -s TERM ${pid}
	! 		/bin/rm -fr /var/run/ndtpd
		else
	--- 41,43 ----
			kill -s TERM ${pid}
	! 		/bin/rm -fr $workdir
		else


o NDTPD の設定
	ディレクテブの説明は
	http://www.sra.co.jp/people/m-kasahr/ndtpd/doc-ja/ndtpd-ja_3.html#SEC12

	/usr/local/etc/ndtpd.conf.sample をコピって適時修正。
	設定ファイルをチェックするためには、
		% ndtpcheck

	max-clients	0
		個人で使うんだから無制限

	hosts		127.0.0.1
		local で使うから。
		hosts のデフォルト動作は拒否なので、マッチしないと接続出来ない。

		hosts 203.178.141.192/255.255.255.248
			とかっても出来る。できない…
			※ ndtpd-3.0beta0以降では
				hosts 203.178.141.192/29
			と設定するらしい。
			reported by , thanx.

		hosts *.kame.net
			は出来る。

		hosts !foo.bar.com
			foo.bar.com からの接続を拒否する。

	timeout		30
		local で使うから、こんなもんでしょ?

	user と group は適時修正。
		e.g.
		user	ndtpd
		group	ndtpd

		これに併せて作業用ディレクトリの owner を変更
			# mkdir /var/run/ndtpd
			# chown ndtpd:ndtpd /var/run/ndtpd

	name
		小文字じゃないとエラーになるんだけど。。。

	appendix-path
		書籍の付録(appendix)データへのパス。
		参照: appendix データって?
		http://www.sra.co.jp/people/m-kasahr/ndtpd/doc-ja/ndtpd-ja_5.html#SEC26


o NDTPD の起動と終了
	起動
		# /usr/local/sbin/ndtpd
	終了
		# ndtpcontrol terminate
	再起動
		# ndtpcontrol restart


o NDTP のクライアント
	関連するソフトウエア情報
	http://www.sra.co.jp/people/m-kasahr/ndtpd/related-ja.html

	emacs は使えないので、キャラクタベースの kenjiro を使う事にする。

	kenjiro
	インタラクティブなキャラクタベースの client
	dserver の ports 持って来て make

	http://www.sra.co.jp/people/m-kasahr/ndtpd/related-ja.htmlで言われている
	以下のパッチは、FreeBSD ports では既にあたってる。
	ftp://ftp.sra.co.jp/pub/net/ndtp/misc/kenjiro-ndtpd.diff
	ftp://ftp.sra.co.jp/pub/net/ndtp/misc/kenjiro-dictlist.diff

	online manual は
	# gzip -c < kenjiro.eng > /usr/local/man/manl/kenjiro.l.gz
	または
	# groff -man -Tnippon kenjiro.j | gzip -c > /usr/local/man/catl/kenjiro.l.gz
	# rm /usr/local/man/manl/kenjiro.l.gz
	しとく。


o ndtpc/ndtpcs
	やっぱコマンドラインから辞書検索したいので作る。

	[tarball:http://www.tanu.org/~sakane/download/]

	特徴
		- 全部 perl
		- ndtpc でコマンドラインから辞書検索できる。
		- ndtpcs を使えば lynxや netscapeからも使える。サーバは自前なのでHTTPサーバ必要無し!

	謝辞: fish-n-fins@geocities.co.jp さんから多くのコメントを頂きました。


	ndtpc
		コマンドライン用インターフェイス

		ndtpc [-s server] [-p port] [-b book] [-t type] [-l] [-r level] word
		ndtpc [-s server] [-p port] [-b book] [-r level] -i header
		ndtpc [-s server] [-p port] -B
		  -s: specify NDTPD server.            (default: 127.0.0.1)
		  -p: specify NDTP port.               (default: 2010)
		  -b: specify a book number.           (default: all)
		      like "-b 1,3" in case of specifying multiple books
		  -t: specify a direction of search.   (default: a)
		      either a(forward)or A(backward) as argument.
		  -i: specify search index(header).    (default: none)
		      header is such like 54a2:758.
		  -S: search synonym too.              (default: no)
		  -r: define recursive level.          (default: 1)
		  -l: add a newline to be legible.     (default: no)
		  -B: print book list.                 (default: no)
		  -q: quiet mode.                      (default: no)
		  -v: verbose mode.                    (default: no)
		  -d: debug mode.
		  -h: show this message.

	例えば、こんな感じ

		% ndtpc interface
		DICT: xxxx
		<12c1:756>interface
		'inter・f`ace
		−[名][C]
		1a (二者間の)境界面,接点 〔between〕.
		b 共通の問題.
		2 【電算】 インターフェイス 《電算システムにおけるハードウェア同士の接点または接点となるプログラム; 人間と電算システムとの接点,また接点となるプログラムや機器》.
		−[動](他) 〈…を〉〔…と〕インターフェイスで接続する 〔with〕.
		−(自) 〔…と〕インターフェイスで連結する 〔with〕.


	ndtpcs
		HTTPインターフェイス
		起動するとhttpサーバを自分で fork()する。
		クライアントとして lynx か netscape, w3m が必要。
		ブラウザ側でプロキシ設定してるとうまく動かないので注意。
		けど w3m はなぜか動かない。なんで?

		Usage: /usr/local/bin/ndtpcs [-d] [-w workdir] -s
		       /usr/local/bin/ndtpcs [-F] [-L|-N|-R|-M] [-w workdir]
		  -F: delete the lock file before start.
		  -L: force to use lynx
		  -N: force to use Netscape
		  -R: force to use remote Netscape when you have launched it.
		  -M: force to use w3m
		  -w: specify the work directory.
		  -s: server mode.
		  -c: client mode. (for debugging)
		  -d: debug mode.

	使用例1: Netscapeを動かして ndtpcs -R & とかしとくと便利。
	使用例2: Windowマネージャーのファンクションキーに ndtpcs -FL とかと割り当てておくと便利。
	使用例3: ndtpcs -F -s & しておいて file:/usr/home/hoge/ndtpc_start.html にリンクを張っておくと便利。 <== これが一番お勧め。

	TODO:
		外字とか音とか(まじ?)


o 辞書を圧縮する
	手順1. EPWUTILってツールで軽量化する。
	       物はここから。
	手順2. ebzip で圧縮する。

	さて、EPWUTILを拾ってきて epwutil.doc をよーく読む。
	以下、辞書を置くディレクトリを $DICT とする。

	0. もともとあったカタログにマージするには
		% catdump -d catalogs > /var/tmp/catalogs.txt
		しとく
	1. カタログから本体以外の書籍を削除する。
		% catdump /cdrom/catalogs >> /var/tmp/catalogs.txt
		% vi /var/tmp/catalogs.txt
		- 要らない[Book]を削除。e.g. GUIDE, SCREEN を削除
		- [Catalog]
			+ Books を [Book] の数にあわせる。普通は 1
			+ BookSelect を削除。
		- [Book]
			+ BookType は 辞書タイプ | EPWINGのバージョン
				00 国語辞典
				10 漢和辞典
				20 英和辞典
				30 和英辞典
				40 現代用語辞典
				50 百科事典
				60 一般書物
				70 類語辞典
			  例えば、研究社英和中辞典なら 2002 とか
			+ Title には半角は使えないらしい。ぬぬぬ。
			+ Directory を $DICT の下に作るディレクトリと合わせる。
			+ ZenGaiji と HanGaiji を修正。
				e.g.
				旧: ZenGaiji   = "GAI16F00GAI24F00GAI30F00GAI48F00"
				新: ZenGaiji   = "GAI16F00GAI24F00"
	2. 新しいカタログを作る
		% catdump -u /var/tmp/catalogs.txt $DICT/catalogs
	3. Directory に指定したディレクトリを作る。
		% mkdir -p $DICT/chujiten/data
		% mkdir -p $DICT/chujiten/gaiji
	4. 辞書を軽量化しつつコピーする。
		% squeeze /cdrom/chujiten/data/honmon $DICT/chujiten/data/honmon

		(2007/01/16)
		広辞苑第5版だとうまく動かない。EPWINGのバージョンのせいか?
		今時削る必要も感じないので深く追求せず。
		Honmon2をまるコピーする。149158408バイト。

	5. 外字をコピーする。
		% cp /cdrom/chujiten/gaiji/* $DICT/chujiten/gaiji/
		1.で削除した外字はコピーする必要ない。
	5. 圧縮する。
		% cd $DICT
		% ebzip $DICT
		ディレクトリ注意。-o で指定しないと出力ディレクトリはカレントになる。
		※ dserver に付いてくる makedic は形式が違うので NG っぽい。

		(2007/01/16)
		広辞苑第5版 149158408 ->  83071515 (55.6%)
		大英和辞典            -> 136540630
		リーダーズ  539869184 -> 196956392 (36.4%)


o 2つ以上の辞書を使う
	正解は、辞書別にディレクトリ掘って catalogs と辞書を別々に置く。
	ndtpd.conf の book directive も辞書の数だけ書く。

	epwutil.doc を参考にして catalogs を 1つにしてしまうと、はまる。
		1. 2つのカタログを合成して不要な書籍を削除する。
			% catdump /cdrom/catalogs > $DICT/catalogs.txt
			% catdump /cdrom1/catalogs >> $DICT/catalogs.txt
			% vi $DICT/catalogs.txt
			- 要らない[Book]を削除。e.g. GUIDE, SCREEN を削除
			- [Catalog] は1つを残して削除。
			- [Catalog] の Books を [Book] の数にあわせる。
			- [Catalog] の BookSelect を削除。
			- 各[Book] の ZenGaiji と HanGaiji を修正。
		2. 新しいカタログを作る
		3. 各ディレクトリを掘る。
		3. 各辞書を軽量化しつつコピーする。
		4. ebzip $DICT

		- 辞書は切替えたいので、1つのcatalogsに book directive を複数書く。
		- ndtpd で認識する辞書数が (ndtpd.conf の book directive 数) x (catalogs の [Book] 数)となってしまう。
			-> 辞書をセットする時にエラーになる番号がでてくる。
		- 辞書切替えを諦めて book directive を 1つにする。
		- book directive の数と、catalogs の [Book] 数が矛盾する。
			-> 辞書をセットする時にエラーになる番号がでてくる。


o Appendixデータを作る
	外字データを*何とかして*表示可能にする変換テーブル
	FreeBSD3 の port (ja-eb-2.3.2)には手元の辞書用の appendix があった。
	よって
		appendix-path	/usr/local/share/eb/appendix/daijirin-2.0
	とかしてもよい

	以下参考
	http://www.sra.co.jp/people/m-kasahr/eb/appendix-ja.htmlから拾ってくれば良いんだけど、
	手もとにある版の方が新しいみたい。ばけばけなので作る。

	http://www.sra.co.jp/people/m-kasahr/eb/doc-ja/ebfont-ja_3.html#SEC3
	% ebinfo /cdrom
		:
	subbook 1:
		title: 
		directory: CHUJITEN
		:
	% ebfont -S chujiten -f 24 -i gif /cdrom

	あぁ面倒…適時つくろう…


o NDTP プロトコル
	主にdserverについてくるProtocol Specificationより。
	ndtpd が返すエラーコードが若干違う。

	T\n
		辞書一覧。

	L(name)\n
		辞書を変える。
		name は辞書名(kojien, eiwa, waei)、または 'T' で得られる番号

	P(type)(word)\n
		辞書検索。検索結果は frame:offset で表される。
		type
			a	アルファベット前方
			A	アルファベット後方
			k	かな前方
			K	かな後方
		e.g.
			Paracoon
			Pk狸

	S(frame):(offset)\n
		frame:offset で示されるデータを転送する。
		frame, offset は16進

	Q\n
		quit

	A(name)\n
		使用許可を得る。
		ndtpd はサポートしてない。単にログに名前(name)を残すだけ。

	u\n
		使用中のユーザ名を表示する。
		ndtpd はサポートしてない。

	F(frame)\n
		Send a page.
		The page number must be a hexadecimal integer.

	I\n
		目次を転送する。
		The page numbers in the table are dummy except for menu search.

	t\n
		辞書のリストと各辞書の利用状況を表示する
		ndtpd はサポートしてないと言ってるが、なんかやろうとしてる?

	X(command)\n
		ndtpd 拡張コマンド
		http://www.sra.co.jp/people/m-kasahr/ndtpd/PROTOCOL-ja.txt
		command
			I	書籍が持っている外字のビットマップのサイズの一覧を得る。
			L	書籍が持っている外字のビットマップのサイズの中から、
				一つを選択する。
			B	書籍が定義している外字の中から指定した一字について、
				選択したサイズのビットマップデータを得る。
			b	書籍が定義しているすべて外字について、
				選択したサイズのビットマップデータを得る。

	v\n
		version とホスト名を表示


o CD-ROM版辞書を使うにあたっての注意
	dserver/server2.2-pl2/README より抜粋

	
ライセンスについて 三田吉郎 dserverは、7cmCDROM版研究社新英和・和英中辞典、岩波書店広辞苑を 始めとする、電子ブックを読むことが出来ます。使用のたびにCDROMを マウントすればよいのですが、例えばCDROM分離型のノートパソコンで 辞書を使いたいなど、ハードディスクにデータをコピーして使いたいと 思うかも知れません。市販の 辞書をハードディスクにコピーすること、または圧縮された辞書としての使用 に関して問題があるかどうか、研究社と岩波書店とにお伺いしてみました(平 成8年6月20日)。 研究社の回答(電話03-3288-7777) 個人として使用するかぎりにおいては、ハードディスクへのコピー、また そのデータが圧縮されてたとしても使用して良い。ただし、LAN上で 複数の端末で使用する場合は、別途端末の台数を申告していただき、 端末台数×(CDROM一枚の価格−α)の値段を払う契約をしていただく。 岩波書店辞典部の回答 (電話03-5210-4171) CD-ROMドライブから読み出して使用することを前提としている。 ハードディスクへのコピーは避けていただきたい。 LAN上での使用の場合は、別途契約をしていただき、 ハードディスクへのコピーを許可している。ただしUNIX上の サーバソフトに関しては把握していない。 dserverは、この他にもOEDや、科学技術用語辞典など、外字テーブルさえ 用意すればほとんどのCDROMを読むことが出来ます。そのとき自分のローカル ディスクにデータをコピーして使用して良いかは、各社対応が異なります。 新しい辞書を使用する場合はまずライセンスを確認した後に使用することを お勧めします。 ということですので、例えば新英和・和英中辞典に関しては個人のマシンの ハードディスクにコピーすることは可能ですが、広辞苑に関してはLAN契約を 結ばない限りハードディスクへのコピーをさけるのが良いようです。
o リンク EPWING って? http://www.ascii.co.jp/ghelp/9/951.html EPWINGコンソーシアム http://www.epwing.or.jp/ EB って? http://www.ascii.co.jp/ghelp/11/1141.html portsを利用したdserverのコンパイル http://www.ee.t.u-tokyo.ac.jp/~mita/FreeBSD/ports-dserver.html 英和/和英オンライン辞書 http://www1.phys.tosho-u.ac.jp/ida/Document/Comp/UNIX/online_dictionary 電子ブック辞書を使いこなす http://www.gihyo.co.jp/~tokinori/9812/index.html フリー辞書コレクション http://openlab.ring.gr.jp/lookup/dicts/free.html