2020年8月31日月曜日

台風10号!?

沖縄に台風9号が接近している。
時々発生する猛烈なやつだ。台風に慣れている地域とはいえ、無傷では済まないだろう。

衛星写真上に先週の末頃からそれとは別の雲の塊が、そのはるか東、関東の南南東にあった。
最初は細かい積乱雲の集団だったがそれがまとまって大きな雲になっていった。
大きな塊ではあるが、昨日までは気象庁の天気図で見ても、低気圧らしきものは書き込まれていなかったので、あまり心配していなかった。

大きな塊の雲でも、時々霧散してしまうこともある。
だから、大丈夫だろうと思っていたが、今日の15:00の気象庁の天気図から、熱帯低気圧となった。そして、どんどん成長するらしい。

(上の写真の右下の雲の塊)
この位置でどんどん成長するなら、台風10号も大型で非常に強くなりそうだ。

まだコースがわからない。
しかし、上陸するとなると、これも無傷ではすまないだろう。
せっかく安くなってきた野菜も、また高くなってしまうかもしれない。
明日は、防災の日でもあるから、食料を備蓄しておくのも良い。
備蓄食糧は、後でちゃんと消費するなら無駄にはならない。

どこに上陸するかはまだまだ解らないし、さらには運良く日本の東にそれるかもしれない。
でも、今年は世界中で気象災害が発生している。冬は食糧危機という噂もある。

「用意しておけばよかった」って後悔するくらいなら、備蓄をするほうがいい。

2020/09/02 追記 気象庁から「特別警報級」と表現されるほど警戒されるようになった。
コースに近い地域は早いうちから最大限の対策をしよう。
2020/09/05 追記 いよいよ近づいてきた。どうやら避けられそうにない。
窓が割れて、家に突風が吹き込むと、屋根が飛ぶ。窓を守ることが家を守る。
送電設備が被災して、電源喪失もあり得る。電源なしでも使える明かりを確保しておこう。できれば、冷蔵庫の中身を整理しておこう。

2020年8月23日日曜日

いまさらの電子辞書 #2

前回からの続き。
catdumpでCATALOGSファイルを作成するには、まず、テキストファイル形式のカタログファイルを作成する必要がある。
テキストファイルのカタログファイルは、このページに参考例がある
とはいえ、ただの例なので、自分の辞書CDがどのような構成になっているのかを知る必要がある。

普通にCDを見てみると、ファイルの構成はこのようになっている。
$ tree xxx
xxx
├── README.FreeBSD
├── README.LINUX
├── TRANS.TBL
└── chujiten
    ├── TRANS.TBL
    ├── data
    │   ├── TRANS.TBL
    │   └── honmon
    └── gaiji
        ├── TRANS.TBL
        ├── gai16f00
        ├── gai16h00
        ├── gai24f00
        ├── gai24h00
        ├── gai30f00
        ├── gai30h00
        ├── gai48f00
        └── gai48h00

3 directories, 15 files
(xxxはCDのマウントポイント)

"chujiten/data/honmon"が辞書データそのものだろう。
前回ビルドしたepwutil内にあるbookinfoで見てみると以下のように表示された。
$ bookinfo dict/chujiten/data/honmon 
; 電子ブック/EPWING 書籍管理情報 (generated by bookinfo v1.0)

対象書籍ファイル = dict/chujiten/data/honmon
情報所在ブロック = 1
書籍構成要素数 = 13
予備領域1(書籍種別/保護情報) = 2000H
  書籍種別: 英和辞典
  保護情報: 表示許可, 印刷許可, テキスト引用許可, 図版引用許可,
            カラー図版引用禁止, 動画引用禁止, 大量引用禁止
INDEX情報の取扱法 = 02H (INDEX情報は有効)

 ID 名称                                 先頭 サイズ INDEX情報 予備3/4
*00 本文                              34398  44941           00/0000
*91 前方一致表記形インデックス         4244   4236 .a....... 00/0000
*71 後方一致表記形インデックス            8   4236 .a....... 00/0000
*02 著作権表示                         7      1           00/0000
*01 メニュー                        26941      1           00/0000
 FF 複合検索                          ***   1969           00/0000
 FF 複合検索                          ***  33305           00/0000
 FF 複合検索                          ***  16261           00/0000
 FF 複合検索                          ***      5           00/0000
 FF 複合検索                          ***     23           00/0000
*05 前方一致表記形見出し        26946   3726           00/0000
*07 後方一致表記形見出し        30672   3726           00/0000
 D8 PCM音声                           79339  83391           00/0000

表示方法の初期値情報:
  有効無効フラグ = 01H (初期値情報は有効)
  一覧表表示 = 00H (直接本文表示)
  本文表示法 = 00H (検索結果を項目単位に連続して表示)

書籍ファイルサイズ = 318MB
マーク部分のサイズ = 119MB
文字のサイズと文字のバイト数が合わないので、ズレズレ表示になっているが、読めなくはない。
CDが壊れているかもと思っていたが、辞書データは使えるようだ。

このページの例を参考に、上記情報とディレクトリ構成を元に、catalogs.txtという名前で、以下のようなテキストファイルを作成した。
[Catalog]
FileName   = catalogs
Type       = EPWING1
Books      = 1

[Book]
BookType   = 2000
Title      = "新英和・和英中辞典"
Directory  = "chujiten"
InfoBlock  = 0001
ZenGaiji   = "gai16f00gai24f00gai30f00gai48f00"
HanGaiji   = "gai16h00gai24h00gai30h00gai48h00"
このテキストファイルは、UTF-8で書いている。
ソースコードやMakefileを読めば解るが、Unix系でのcatdumpは、EUC-JPを期待した作りになっている(WindowsではShift_JIS)。
そのためEUC−JPに変換しなければならない。
以下のようにして、変換する。
$ nkf -e catalogs.txt > catalogs.euc
一応、確認。
$ nkf -g catalogs.euc
EUC-JP
よしよし。

これを使ってバイナリのCATALOGSを作成する。
$ catdump -u catalogs.euc CATALOGS

これでカタログファイルはできたけど、相手はCDROMだ。書き込むことはできない。
壊れているとはいえ勝手にコピーしてしまうのも問題だ。
こういうときは、overlayマウント(unionマウントとも言う)してしまおう。

いくつか方法はあるが、以前からoverlayfsを使っているので、それを使う。
デフォルトではoverlayfs用のカーネルモジュールが読み込まれていないので、モジュールを読み込む。
$ sudo modprobe overlay 
つぎに、読み書きディレクトリ、作業ディレクトリ、マウントポイントを用意する。
$ mkdir rw wk dict
そして、overlayマウントする(xxxにCDがマウントされているものとする)。
$ sudo mount -t overlay overlay dict/ -o lowerdir=xxx,upperdir=rw,workdir=wk
これで、dict/を通してxxx/をアクセスでき、書き込みもできるようになる。
dict/へ作成したCATALOGSファイルをコピーする。
$ cp CATALOGS dict/
これで、多くの辞書アプリでアクセス可能になる。
試しに、eblookで見てみよう。以下のようにしてインストールする。
$ sudo apt install eblook
インストール後、overlayマウントしたマウントポイントを指定して起動する。
以下は、英単語"english"をひいたときの様子。
$ eblook dict/
eblook> list
 1. chujiten	新英和・和英中辞典
eblook> select 1
eblook> search english
 1. 37402:692	English
eblook> content english
Invalid entry number: english
eblook> content 1
<gaiji=ha123>En・glish /<gaiji=ha137><gaiji=ha22f>gl<gaiji=ha228><gaiji=ha22d>/→<gaiji=za339>
<gaiji=za34e><gaiji=za323>
1 イングランドの; 《俗に》 イギリスの,英国の.
2 イングランド人の; 《俗に》 イギリス人の,英国人の.
3 英語の.<reference>→<gaiji=za33a></reference=53513:1184>
<gaiji=za34e><gaiji=za321>
1 <gaiji=za32f> 英語.<reference>→<gaiji=za33a></reference=53513:1284>
2 [the 〜; 複数扱い]
a イングランド人; 《俗に》 イギリス人,英国人 (cf. the Scots,the Welsh,the Irish).
b 英軍.
<gaiji=ha126>古期英語 ‘of the race of Angles' の意; ⇒ENGLAND<gaiji=ha127>
<prev><reference><gaiji=ha123>En・gland /<gaiji=ha137><gaiji=ha22f>gl<gaiji=ha226>nd/→<gaiji=za339></reference=37401:1782></prev>
<next><reference><gaiji=ha155>nglish br<gaiji=ha168>akfast</reference=37402:1602></next>
eblook> quit
外字が<gaiji=xxxxx>のように表示されて読みにくいが、動作しているのはわかる。
GUIアプリのebviewで表示すると、発音記号その他外字も表示される。

外字の大きさが、文字と合っていないのが少し気になる…。
メニューから、ツール->オプションで、「設定項目」から「外部プログラム」を選んで、「音声再生プログラム」を"aplay %f"にすると、音声も再生できるようになる。

これでネットにつながらなくても、電子辞書が使える。

いまさらの電子辞書#1

何故?
先日、CDを整理していたら、Stingの"Ten Summoner's Tales"のCDの中から、電子辞書のCDが出てきた。
宮崎生まれの私にとっては、Stingは SEAGAIA のこけら落としに来てくれた特別なアーチストだ。

十数年前はネット上に電子辞書は少なかったし、PCもネットも遅く、広告の表示がひどい足かせとなり、実用的ではなかった。紙の辞書も使っていたが、電子辞書も売られるようになっていたので、それを使うようになった。
しかし...、何故StingのCDのケースに入っていたのだろう?

その当時、Linuxで、この辞書CDを使うのは一苦労だった事を、だんだん思い出した。
今は、ネット上に電子辞書がたくさんある。それどころか、電子翻訳も発達している。さらに、電子辞書はスマホアプリが中心となり、電子辞書CDや、専用電子辞書は下火になっている。
そういう時代だからこそ、もう一度この辞書CDを扱えるようにしてみよう。
無駄なのは解っている。しかし、遊びとはそういうものだ。実用性や採算性を追求するのは「仕事」だ。

CDの表面にはEPWINGと書かれているので、EPWING形式なのだろうが、どういうわけかCATALOGSファイルが無い。
壊れているのだろうか?
ネット上で見ても、そんなCDの話はない。さらにいろいろ探しているとCATALOGSファイルの作り方が見つかった。
1999年(20世紀末!)ごろ太田純氏により開発されたcatdumpというアプリを使うらしい。
Debian系では、epwutilというパッケージに入っている。このパッケージはDebian Jessieを最後に、以降のDebianでは無くなっている。
しょうがないので、Jessie の epwutil のソースをダウンロードしてきた(以下の3ファイル)。
http://deb.debian.org/debian/pool/main/e/epwutil/epwutil_1.1-8.1.dsc.
http://deb.debian.org/debian/pool/main/e/epwutil/epwutil_1.1.orig.tar.gz
http://deb.debian.org/debian/pool/main/e/epwutil/epwutil_1.1-8.1.debian.tar.gz

dchでローカルでバージョンを上げておいて(存在しないので必要ないかも)、Ubuntu 18.04でビルドしようとするが、やはりそのままでは通らない。
こんな感じでエラーになる。
 : (省略)
dh_clean: Compatibility levels before 5 are no longer supported (level 4 requested)
debian/rules:27: recipe for target 'clean' failed
make: *** [clean] Error 25
dpkg-buildpackage: error: fakeroot debian/rules clean subprocess returned exit status 2
debian/compatの値が4になっているためだ。このへんを見ると、最近では10が普通らしい。
Lennyの頃から組み込みでdebianを使っていたが、たしかJessieの頃にMulti-arch対応等でパッケージ管理システムが大きく変わり後方互換を完全には維持できなくなった(と記憶している)。それ以降、どのような変更があったのかは見ていなかったが、古いものとの互換性を維持するために手間をかけるよりも、より良い形に変えていくために手間をかけたほうが良い。以降も色々あったのだろう。
epwutilは単純なMakefile形式だし、.dscを読んでもビルド依存物はdevhelperだけだ。
単純に数字を大きくしても、ビルドできるだろう。とりあえず、10 にする。

この状態で、"dpkg-buildpackage -us -uc" を行うと、Warningがでるが一応ビルドできた。
とはいえ、日本語文字コードがEUC-JPになっており、ビルドされたバイナリのエラーメッセージやヘルプがバケバケだ。20年以上前のものなのでしょうがない。
現代なら、UTF-8にするべきだろう。以下のようにして、UTF-8に置き換える。
$ nkf -w80 -Lu -x --in-place=.BAK *.c *.h *.man
ついでに、Warningを直しておこう。以下を行う。
  • catdump.c と squeeze.cで、unistd.h を #include する。
  • bookinfo.cの、126行付近、「情報所在ブロック」の書式化文字列の"%d"を"%ld"にする。
  • bookinfo.cの、ローカル関数hex()のプロトタイプが無いので、プロトタイプを書く。(他と合わせて、昔の書き方にしたほうが良いだろう)
  • squeeze.c内のlog()がビルドイン関数と名前がかぶっているので、wrlog()に置き換える。
    "sed -e 's/\<log(/wrlog(/g' -i.BAK squeeze.c"
この状態で、そのままビルドしようとしても、以下のようなエラーになる。
 : (省略)
dpkg-source: info: you can integrate the local changes with dpkg-source --commit
dpkg-source: error: aborting due to unexpected upstream changes, see /tmp/epwutil_1.1-8.1ubuntu1.diff.HodWKA
dpkg-buildpackage: error: dpkg-source -b epwutil-1.1 subprocess returned exit status 2
書かれているように、"dpkg-source --commit"を実行する。
言われるがままパッチ名を付けたり、サマリや説明を書いたりする。

この状態で、"dpkg-buildpackage -us -uc"をすると、新しいバイナリパッケージやソースパッケージができる。
 : (省略)
dpkg-deb: building package 'epwutil' in '../epwutil_1.1-8.1ubuntu1_amd64.deb'.
dpkg-deb: building package 'epwutil-dbgsym' in 'debian/.debhelper/scratch-space/build-epwutil/epwutil-dbgsym_1.1-8.1ubuntu1_amd64.deb'.
	Renaming epwutil-dbgsym_1.1-8.1ubuntu1_amd64.deb to epwutil-dbgsym_1.1-8.1ubuntu1_amd64.ddeb
 dpkg-genbuildinfo
 dpkg-genchanges  >../epwutil_1.1-8.1ubuntu1_amd64.changes
dpkg-genchanges: info: not including original source code in upload
 dpkg-source --after-build epwutil-1.1
dpkg-buildpackage: info: binary and diff upload (original source NOT included)

$ ls ../
epwutil-1.1
epwutil-dbgsym_1.1-8.1ubuntu1_amd64.ddeb
epwutil_1.1-8.1.debian.tar.gz
epwutil_1.1-8.1.dsc
epwutil_1.1-8.1ubuntu1.debian.tar.xz
epwutil_1.1-8.1ubuntu1.dsc
epwutil_1.1-8.1ubuntu1_amd64.buildinfo
epwutil_1.1-8.1ubuntu1_amd64.changes
epwutil_1.1-8.1ubuntu1_amd64.deb
epwutil_1.1.orig.tar.gz

このepwutil_1.1-8.1ubuntu1_amd64.debをインストールする。
sudo dpkg -i ../epwutil_1.1-8.1ubuntu1_amd64.deb

"catdump -h" を実行すると以下のように表示される。
$ catdump -h
電子ブック/EPWING カタログ/テキスト変換 Ver.1.1 (1999/01/13)
    Written by Junn Ohta (ohta@src.ricoh.co.jp), Public Domain.

使用法: catdump [-g] [-d] [-u <テキストファイル>] <カタログファイル>

オプション:
    -g: EBG 専用モードにする
    -d: カタログファイルを標準出力にダンプする
    -u: テキストファイルをカタログファイルに変換する
ギリギリ入手できたけど、こういうアプリは無くなっていくのだろうな…。

とりあえず、epwutilのビルドまで。
次は、実際にCATALOGSファイルを作成する。
つづく。