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ファイルを作成する。
つづく。

2020年7月31日金曜日

西之島があつい

西之島がどんどん成長しているようだ。
コロナ禍や激甚化する気象など、嫌なニュースが多い中での数少ない良いニュースだ。

西之島の噴火は、普通の海底火山の噴火とは異なり、大陸を形成すると言われている。
実際にどんどん巨大化しており、無いところから発生した島としては、有史以来人類が経験したことがないほどの大きさらしい。
地球人であれば、誰でもワクワクしているに違いない。
とはいえ、今生きている人の寿命の範囲内では、大陸と呼べるほど大きくはないだろう。

今月に入りさらに活発に噴火し、溶岩が大量に流れ出して面積も広がった。
今月半ばには、火山灰が8,000mに達するほどの噴火があった。昨日の7/30に再度激しく火山灰が吹き出した。
去年は溶岩地獄のような風景だったが、今では火山灰が降り積もり、島全体をすっぽりと覆って、砂漠のような風景に変わっている(朝日新聞の動画が興味深い)。
山も大きくなっている。
素人が見ても、どんどん変わって面白い。
これからも注目だ。

2020年7月21日火曜日

宇宙でも Go to トラベル?

はやぶさ2が、カプセル切り離し後に再度地球を離れて、他の天体の探査へ向かうことが決まったようだ。
はやぶさ1でも、最初はそういう話も出ていたのだが、末期には姿勢制御エンジンは全停止、リアクション・ホイールも3基中2基が止まるという状態。カプセルを地球へ確実に返すために、地球へギリギリまで近づいて切り離さざるを得ず、神風ミッションとなってしまった。
(あの状態で、延長運用するのも無理があっただろうけど)

H2Aで打ち上げられたUAEのHOPE探査機も火星に向かっているようだ。

コロナ禍や豪雨災害など嫌な事が多い(ネオワイズ彗星も見れないし)。
こういう明るいニュースがほしかった。

2020年7月17日金曜日

ネオワイズ彗星が見えない

ネオワイズ彗星が接近している。
「(速報)ネオワイズ彗星が明るい(2020年7月)」(国立天文台)
太陽の近くを通過した後で尾が伸びて見頃らしいが、数週間前は早朝、日の出前だった。
この時期の朝は早い。4時にはもう明るい(ダイビングに行くときは4時起き)。
仕事もあるし、見るのは諦めていた。

しかし、今月中過ぎからは夕方の時間帯に見えるようになった。
見たいのだが、この天気だ。

高校生の頃のハレー彗星の接近以来、尾を引いているほうき星を一度は見てみたいと思い、接近のたびに期待しているのだが、いまだに見えない。

2020年6月27日土曜日

Ubuntu 18.04.4のセットアップ

先週買ったPC、使わずに放置しているのは無駄だ。

Windows PCがうちにあってもしょうがない。職場でも、WSLを使って作業することが多いので、正直なところ、最近のWindowsの細かい使い方がよくわからないのだ。昔のI/Fも残されているようだが、深く折りたたまれていて、解りにくい。
Ubuntu 20.04が出てもう数カ月になるが、最新版を追いかけるのは血気盛んな若者に任せて、LTSでの1つ前の18.04を使うことにした。
18.04.4のイメージがあったのでそれをダウンロードした。

Install DVDを焼こうとした時、古いPCのDVDは少し癖があることを思い出した。
2008年頃に購入したものだったと思うが、その少し前、激しいDVDのスピート競争があり、癖の強いドライブが増えた。その後徐々に落ち着いていくのだが、癖のあるドライブも残っていた。そんな時代だったのだ。
数年後にUSB接続のDVD-RWドライブを買って、なるべくそれを使うようにした。
しかしながら、USBメモリやSDXCカードの方が大容量なので、そもそもDVDを使うことは少なくなり、それを忘れていた。

DVDを焼こうとした時、急にそのことを思い出して、USB接続のDVDドライブを探した。
そして、ISOイメージを焼き始めた。
焼き始めた直後に、USBメモリでInstallerを作れば良いことに気づいた。

おっちょこちょいだな。

LTSとはいえ、新しいLTSが出ると、restricted や multiverse はメンテされなくなるらしい(記憶違いかも)。
PPAも無くなっていく。
使いたいアプリがinstallできないようなら、20.04に移るかもしれない。

2020年6月22日月曜日

新しいPCを買ったけど…

テレワークで自宅で仕事をやり始めて、2ヶ月以上。
それまでは、なんだかんだで、なし崩し的に用意した環境だった。仕事で使うには色々不便だった。
しかし、本気で仕事をするために、HDDやNASの中を整理したり、巨大データをランダムアクセスするshell scriptやGNU Plotのスクリプトを書いたりして、環境を整備した。
また、本格的に作業をするようになると、母艦の処理能力の限界を感じることが多くなる。
個人的な作業なら待てばいいが、仕事となるとそうもいかない。
さらに、Office365やTeamsが使える環境も必要だ。
仮想マシンでWindowsを動かせば良いかもしれない。動かなくはないが、処理能力不足のため、かなり使いにくい。

というわけで、新しいPCを買った。
この10年選手のOptiPlex760の、少なくとも倍以上の処理能力がある(と思われる)やつだ。
先週末に注文した。
しかしながら、その日に来週から通常シフトに戻るという連絡が来た…。

注文した次の日にPCは届いた。
BIOSの更新、Windows Update を行って、Windows10 Proを 2004 にもした。

リカバリメディアを作ったら、またUbuntuにしよう。
少し残念だが、作業しやすい環境が手に入ったのだから、良しとしよう。
(世界中の人が日本に逃げてくるかもしれない。そうなれば、第2波に…?)

2020年6月12日金曜日

それでも季節はうつっていく。

今日の朝、近所のヤマモモの木の実が熟してきているのに気がついた。





コロナで必要以上に外に出ていないし、去年の台風19号の影響で、秋ヶ瀬公園も閉鎖され続けているので、季節の変化に鈍感になっていた。

そういえば、ニュースで梅雨入りの話しをしていた。
いつの間にやら、季節が移っている。

今月から、少しずつ秋ヶ瀬公園も再開されていくようだ。
弁当、おやつ、飲み物をもって、のんびりしに行こうかな。

2020年6月5日金曜日

浦和パルコのスラバヤへ行ってきた



非常事態宣言が解除されて、今週の頭から浦和パルコも営業するようになった。
久しぶりに、インドネシア料理"SuraBaya"へ行ってきた。
以前のランチメニューはなくなり、新たなランチメニューになっていた。
「しゃばしゃば」カレーが食べたかったので、「骨付きチキンのジャワカレー」のセットを食べた。
よく煮込まれており、骨がきれいに外れる。あまりきれいでは無いが、その写真。

食べたくてうずうずしていたからか、久しぶりの営業で気合が入っているのか、いつもよりも美味しいと感じた。
ココナツ入りのアイスも美味しかった(写真を撮らなかった)。

お店の人が、唐揚げ食べ放題(平日ランチの目玉)がなくなってしまった事を詫ていた。
コロナの件でトングが危ないと報道されているので、食べ放題を止めるのは新しい日常のための英断だと言える(苦渋の決断だったかもしれない)。
「それはしょうがないよね。応援してますよ。また時々食べに来ます。」と言ったら、感謝された。
いい人たちだ。

2020年6月4日木曜日

LibreOfficeでHelpが表示されない

テレワークで自宅で仕事をするようになって、おおよそ2ヶ月。
自宅にはWindowsPCが無いので、なんでもLinuxでやっている。 Microsoft Office 365 は使えないので、代わりにLibreOfficeを使っている。

先日、Calc(MS-Excelのようなアプリ)の関数の引数を見ようと思って、F1キーを押したら、エラーになって表示されなかった。
こんな感じ。

一回使い方が定着すると、同じような使い方しかしないし、頻繁につかう関数は覚えていくため、徐々にヘルプを見なくなる。
そのため、全く気が付かなかった。

ネットで解決方法を探してみた。
これを見つけた: Libreoffice Help does not work
6.3までは動いていたが、6.4から動かなくなったらしい。
この記事で、6.4にdist-upgradeできないと追記した頃には、もう表示できなかったようだ。

新しいLibreOfficeでは、ブラウザでHelpを表示するようになるらしい。
今までは専用の表示機能を用意して、使っていたそうだ(私はそれすらも使っていなかった)。
オフィシャルPPAの最新版を使っていれば、自動的に更新されて表示されるそうだ。

私は、この6.4専用PPAを使っていたので、更新が行われなかった。
最新版もいいが、3月末のようにdist-upgradeで面倒なことになるかもしれない。
問題の原因は、main.xcd というファイルにあるらしい。これを最新のものからコピーすれば直るそうだ。
上の記事の#10のコメントに、main.xcd.gzがあるので、それを取ってきて展開し、以下を上書きすればいい。
/usr/lib/libreoffice/share/registry/main.xcd

これで、FireFoxでヘルプが表示されるようになった。