2011年1月26日水曜日

ScanSnap S1500 修理

最近、ScanSnap S1500 でスキャンすると、裏面に筋 (縦線) が入るようになりました。 PFU 推奨のクリーナーF1を使って、ごしごし読み取り面を拭いているのですが、改善しません。 裏側にゴミが入っているか、別なところに問題がありそうです。

ネットで軽く検索してみると、修理に出して一万くらいかかった話とか出てきます。 自分で修理できる部位ではなく、値段もさほど高いわけではないので、修理に出すことに。

同梱されていた『スタートアップガイド』に 問い合わせ方法 (電話、電子メイル、Web) が書かれていたので、Web を選択。 必要事項を入力して翌日、担当の方から電子メイルが届きました。

縦線の色は白でしょうか。
線が白い場合は、読み取り面とは反対側(本体側)の白基準の上が汚れていることが考えられます。
縦線が入る位置に汚れや異物などが無いかご確認をお願いいたします。

※クリーナーF1で本体側の縦線の出る位置も念入りに清掃してみてください。

縦線の色は白かと問われて、gimp で拡大して確認してみました。 結果としては、白ではなく、周囲の色が薄くなった感じ。遠目だと白っぽく見えます。 読み取り面は、両面とも繰り返し拭いていますので、これ以上どうしようもなし。

気になる修理費用についても書かれていたのですが、なんと無償修理。 保証期間が一年で、まだそれが過ぎていなかったのです。 それでもゴミが入った場合は、故障というより使用環境の問題なので、有償対応かと思っていました。 運送料はというと、発送元負担ということで、片道分だけ払えばいいようです。 うれしい誤算です。

ということで、宅配便で発送し、色の話などはメイルで返答。

修理期間は着から一週間前後とのことだったのですが、 着いた当日に処置され、ささっと返送されたようです。 こちらも想定外の早い対応です。

縦線の原因は、『保守完了報告書』によると、 「装置内部ホコリ混入による画像の縦スジを確認致しました」とのこと。 変な障害で有償修理にならなくてほっと一息。

実は、ピックローラーの上のマイラーシートも軽く折れていたのですが、 こちらも無償で交換されてきました。

2011年1月11日火曜日

EPUB へ移行

いままで、自炊した書籍は PDF 形式で閲覧していましたが、これを EPUB 形式に変更。 直接的な理由は、ImageMagick の convert コマンドの不具合。

JPEG ファイル群を PDF ファイルに変換する際に、 convert のプロセスサイズが最大 2.8GB に達するのを観測しました。 実メモリ 4GB のマシン上で動かしており、 他に 1GB 弱の Firefox や 750M の VirtualBox も動いているので、 ほとんど処理が止まってしまうわけです。 仕様なのか、バグなのか、新しい版で直っている(変わっている)のか、 コンパイル環境による問題なのかは調べていません。 新しい版を試そうとは考えたのですが、新たな依存関係が導入されているようで、 構築に時間がかかるので今回は断念。

EPUB 形式を選んだ理由は、完全に公開された仕様で、JPEG 画像群から簡単に生成できること。 XML ファイルを手で作成・編集できますし、プログラムを作成して自動生成することも出来ます。 ちなみに、Linux で動作するとされている EPUB 編集ツールもオープンソースで存在するのですが、 依存関係の絡みで、今回は回避。

EPUB 閲覧用のソフトウェアは SONY Reader には標準で入っていますし、 Solaris 上では Firefox のアドオン、EPUBReader が良い感じで動いてくれるようです。

2010年12月28日火曜日

Sony Reader 用に 自炊 PDF を調整する手順の防備録

自炊した PDF は、そのままでも Sony Reader で表示できますが、 文字がかすれたりして、かなり読みにくいものになります。 そこで、一手間かけて、Sony Reader 専用の PDF ファイルに変換することにしました。 以下は、その手順の防備録です。

PDF ファイルから画像を取り出す

自炊した PDF ファイルは画像のみで構成されていますので、その画像を取り出します。 この例では、page-連番.jpg という名前で取り出されます。

$ mkdir tmpdir
$ cd tmpdir
$ pdfimages -j fromdir/元文書.pdf page

表紙を編集

表紙を読み込む際際、可能であれば切断せず、長尺読み取り機能を利用して読み込んでいます。 自炊 PDF を作成する際に、ScanSnap 付属のソフトウェアで90度回転したりトリミングしたりして、 PDF ビュワーで表示させる分には問題ないように編集しています。 ところが pdfimages はこれを処理できないようで、編集前の画像をそのまま出力します。

これでは困るので、gimp で表紙などを編集します。 基本的に向きの変更とトリミングのみ。 この例は、カバーと帯の表裏を編集する場合です。

$ gimp page-00[0-3].jpg

画素数の変更と余白の切り落とし

ImageMagick の convert で処理します。 Sony Reader の画素数は 600 x 800 らしいのですが、画像を表示する場合は 584 x 754 にあわせると、 劣化が発生しないそうです。 余白部分を多少削ると、文字の表示に使用できる面積が増えます。 削りすぎに注意。

$ mkdir a
$ (for f in page-*.jpg; do convert -resize 654x824
    -type GrayScale -shave 35x35 -normalize $f a/$f; done)

表紙やイラストなど、余白がない頁は別枠で変換します。

$ (for f in page-00[0-3].jpg; do convert -resize 584x754
    -type GrayScale -normalize $f a/$f; done)

調整済み PDF ファイルの作成

ImageMagick の convert で処理します。

$ convert a/*.jpg a.pdf

ただ、convert は作成する PDF ファイルのタイトル属性に、 作成するファイル名を設定します。 Sony Reader は、ファイルの一覧で、この属性を表示するのですが、 日本語の名前だと文字化けします。 属性が設定されていなければファイル名が使用されるのですが、 ファイル名に日本語が使用されている場合は問題ありません。

私の使用している版の ImageMagick では、 この動作をしないようにするオプションが存在しませんので、 ソースコードを変更して対応しました。

--- coders/pdf.c.back Wed Apr 28 22:05:40 2010
+++ coders/pdf.c Tue Dec 28 15:33:26 2010
@@ -2459,9 +2459,11 @@
   (void) FormatMagickString(buffer,MaxTextExtent,"%lu 0 obj\n",object);
   (void) WriteBlobString(image,buffer);
   (void) WriteBlobString(image,"<<\n");
+#if 0
   (void) FormatMagickString(buffer,MaxTextExtent,"/Title (%s)\n",
     EscapeParenthesis(image->filename));
   (void) WriteBlobString(image,buffer);
+#endif
   seconds=time((time_t *) NULL);
 #if defined(MAGICKCORE_HAVE_LOCALTIME_R)
   (void) localtime_r(&seconds,&

これで、Sony Reader 上でそれなりに読める PDF の完成です。 画質の改善は、今後の課題ということで。

おまけ: Solaris 機から Sony Reader 用の SDHC カードに書き込む

Sony Reader 用に調整した PDF ファイルは、 /m/books0/00-Sony-Reader/ にまとめて置いています。 Sony Reader は直接接続せず、SDHC カードを介して、PDF を渡すようにしています。 ファイルを一つ一つコピーするのは面倒なので rsync コマンドで一発。 --modify-window=1 を忘れると、毎回書き込みが発生するので要注意。

$ rsync -a --modify-window=1 -v /m/books0/00-Sony-Reader/
       /media/NO\ NAME/books

2010年12月21日火曜日

AES って食べられますか?

久しぶりに、Xperia から OpenSolaris 機 (そろそろ OS を入れ替えないとね) にアクセスし、ファイルをダウンロードしようとしたところ、なぜか接続に失敗。以前は出来たので、何か変わったか。。。

解決策は、NEC のホーム WiMAX ルータ Aterm WM3400RN に、WEP ではなく、PA/WPA2-PSK(AES) で接続すること。さらにいえば、ネットワーク分離機能を使用しないこと。

有線 LAN と無線 LAN がネットワーク的に分離される設定なので、通信できなくなるのは当たり前です。 初期設定で、この機能は WEP で有効、AES で無効になっていました。暗号化の強度によって異なる設定なのは、納得できるところです。最初から AES を使っておけば良かったという話でした。

事務所のネットワークは、つい最近まで OKI 製の WiMAX ルータを使用していました。こちらも無線 LAN と有線 LAN の両方に対応した製品です。一年以上良い感じで使えていたのですが、数度、再起動が必要な状況に陥り、その後有線・無線 LAN 経由のアクセスに反応しなくなりました。仕方ないので、修理より安いということで WM3400RN を購入。導入があまりに楽だったので、設定をあまり考えなかったのが敗因でしょうか。

2010年5月26日水曜日

久々の ImageMagick

スキャナで取り込んだ画像を PDF に変換するために ImageMagick をインストールしたので、その防備録。

なぜ ImageMagick かというと、「convert JPEG to PDF linux」で探したら、ImageMagick で出来るよと言いうのがあったから。 ImageMagick は大昔は自分でインストールして使用していた時代がありましたが、最近はさっぱり。 標準のリポジトリを検索しましたが、見つからなかったので、自分でインストールすることに。

Google で「imagemagick source」を検索すると、一番上に求めるページが出てくるので、 素直にそこからソースコードをダウンロード。

$ wget -P /PATH/TO/DOWNLOAD/ ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz

続いて展開。

$ cd /PATH/TO/BUILD/
$ gtar xfz /PATH/TO/DOWNLOAD/ImageMagick.tar.gz
$ cd ImageMagick-6.6.2-0/

そして構築。 個人的に、ImageMagick のコマンド名の命名規則は許容範囲を大きく外れているので、 専用のディレクトリを作成してその下に入れることにします。 本当は Sun 謹製のコンパイラを使いたかったのですが、 構築時に警告メッセージ(軽微なものですが)が大量に表示されるので、 gcc を使うことにしました。

$ ./configure --prefix=/opt/free/imagemagick CC=/usr/gcc/4.3/bin/gcc CXX=/usr/gcc/4.3/bin/g++
$ gmake
$ gmake check
$ gmake install

実際に複数の JPEG ファイルを一つの PDF ファイルに変換するにはこんな感じ。

$ cd /PATH/TO/JPEG/
$ /opt/free/imagemagick/bin/convert *.jpeg target.pdf
$ acroread target.pdf

2010年5月17日月曜日

Ubuntu 10.04 を入れてみた

VirtualBox の更新があったので、 ついでに先日ダウンロードした Ubuntu 10.04 を VirtualBox に入れてみました。

驚いたのはインストールが早いこと。正味十分ほど。 インストールの途中は、自分の名前、パスワード、ホスト名を入れたくらいで、 何もすることが無くて寂しい。 後で df -k でディスクの使用量を見ると 3181052 となっていましたので、 約3GB を十分で書き込んだことになります。

ちなみに、Ubuntu 10.04 のダウンロードも、ほぼ同じく十分かかっていました。

$ wget -P /PATH/TO/DOWNLOAD/ http://ftp.jaist.ac.jp/pub/Linux/ubuntu-jp-cdimage/releases/10.04/ubuntu-ja-10.04-desktop-i386.iso
--2010-05-06 11:48:41--  http://ftp.jaist.ac.jp/pub/Linux/ubuntu-jp-cdimage/releases/10.04/ubuntu-ja-10.04-desktop-i386.iso
ftp.jaist.ac.jp (ftp.jaist.ac.jp) をDNSに問いあわせています... 150.65.7.130
ftp.jaist.ac.jp (ftp.jaist.ac.jp)|150.65.7.130|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 733184000 (699M) [application/octet-stream]
`/PATH/TO/DOWNLOAD/ubuntu-ja-10.04-desktop-i386.iso' に保存中

100%[======================================>] 733,184,000 1.12M/s 時間 10m 3s  

2010-05-06 11:58:44 (1.16 MB/s) - `/PATH/TO/DOWNLOAD/ubuntu-ja-10.04-desktop-i386.iso' へ保存完了 [733184000/733184000]

そしてログインすると、 アップデート・マネージャが重量なセキュリティアップデートを入れろとせかしてくるわけです。 こちらも数分で終わり。

続いて VirtualBox の Guest Additions を入れる。 「デバイス」から「Guest Additions のインストール」を選択。 /media/VBOXADDITIONS_3.1.8_61359 に移動し、

$ sudo ./VBoxLinuxAdditions-x86.run
と実行。

再起動せよと言われるので素直に再起動。 すると、う〜ん、なぜか画面が大きくなりました。 ま、この大きさにするつもりだったのでよかったわけですが。

2010年4月21日水曜日

せっかく ispell 入れたけど aspell に…

せっかく ispell を導入したのですが、 What's the Difference Between Ispell and Aspell? に気になることが書かれています。

...Its primary advantage is that it is better at making suggestions when a word is seriously misspelled... Its disadvantage is that the approximate-matching algorithm is specific to English.

私が綴りを確認したいのは英語なので、aspell の方が適しているのかもしれません。

となれば、早速 aspell をインストールします。 過去には OpenSolaris のリポジトリに存在したようなのですが、 最新のビルドでは見つからないため、自前で構築します。

まずは、インストール先の確保。 個人的な習慣なのですが、GNU 系のモジュールを自分で構築した場合は、/opt/gnu に配置することにしています。 最近は欲しいものがほとんどリポジトリから入手できるので、インストール先のディレクトリすら作成してませんでした。

$ pfexec mkdir /opt/gnu
$ mkdir /export/opt/gnu
$ pfexec vi /etc/vfstab
$ tail -1 /etc/vfstab
/export/opt/gnu - /opt/gnu lofs - yes -
$ pfexec mount /opt/gnu

続いて、aspell 本体を構築します。 実は最初は Sun 謹製のコンパイラを使用したのですが、コンパイルエラーになりました。 ならばということで gcc を試したのですが、これもコンパイルエラー。 gcc --version で確認すると 3.4.3。ちょっと古めです。 そういえばと言うことでパッケージマネージャーで gcc を検索すると 4.3.3 があったのでこちらをインストール。 ところがこのコンパイラでもエラー。 エラーメッセージに wget_wch というシンボルがでているので man コマンドで確認すると、XPG4 の curses ライブラリに含まれていることがわかります。 該当するファイル prog/check_funs.cpp を眺めても、curses がらみであることは明らかです。 となれば、CXXFLAGS を設定すればと考えたのですが、関係ない部分に影響を与えるのは馬鹿っぽいです。 README を眺めていると、--enable-curses--enable-curses-include を使えば良さそうです。

$ wget -P /PATH/TO/WAREHOUSE ftp://ftp.gnu.org/gnu/aspell/aspell-0.60.6.tar.gz
$ gtar xfz /PATH/TO/aspell-0.60.6.tar.gz 
$ cd aspell-0.60.6
$ ./configure --prefix=/opt/gnu CC=/usr/gcc/4.3/bin/gcc CXX=/usr/gcc/4.3/bin/g++ --enable-curses='-L/usr/xpg4/lib -R/usr/xpg4/lib -lcurses' --enable-curses-include=/usr/xpg4/include
$ gmake
$ gmake install

aspell をインストールした後は、辞書をインストールします。 こちらのインストールには先にインストールした aspell が使用されます。

$ wget -P /PATH/TO/WAREHOUSE ftp://ftp.gnu.org/gnu/aspell/dict/en/aspell6-en-6.0-0.tar.bz2
$ bzip2 -d -c /PATH/TO/aspell6-en-6.0-0.tar.bz2 | gtar xf -
$ cd aspell6-en-6.0-0
$ PATH=/opt/gnu/bin:$PATH ./configure 
Finding Dictionary file location ... /opt/gnu/lib/aspell-0.60
Finding Data file location ... /opt/gnu/lib/aspell-0.60
$ gmake
$ gmake install

Emacs の中からは ispell という名前で起動しますので、 aspell が提供している ispell 互換スクリプトをインストールします。

$ cp -p scripts/ispell /opt/free/bin/ispell

ここで Emacs から M-x ispell を実行してみるとエラーになります。

Error: No word lists can be found for the language "ja_JP".

綴りを調べたいのは英語だけですので、先ほどのスクリプトで言語を指定することにします。

$ diff -u scripts/ispell /opt/free/bin/ispell
--- scripts/ispell 水 10月 27 02:12:17 2004
+++ /opt/free/bin/ispell 水  4月 21 16:59:50 2010
@@ -6,6 +6,8 @@
 #   mapping when checking files with the "ispell command".
 #CHECK_FLAGS="--keymapping=ispell"
 
+LANG=en_US.UTF-8 export LANG
+
 command=""
 
 for p

これで無事に aspell が使えるようになりました。