mupdfでPDFファイルをPostScriptファイルに変換する

PDFファイルをNetBSD上で読むのに、長らくMotifベースのxpdf (pkgsrc/print/xpdf)を使ってきたが、文字化けしてしまうPDFファイルがあるのが悩みだった。 思い切ってmupdf (pkgsrc/print/mupdf)に乗り換えてみた。 これまでにmupdfで文字化けしてしまうPDFファイルには遭遇していない。

PostScriptプリンターで印刷するには、PDFファイルからPostScriptファイルに変換する必要がある。 mupdfでもPDFファイルをPostScriptファイルに変換できるはずと思って試してみた。 具体的には、pkgsrc/print/mupdfパッケージに含まれているmutoolコマンドが使用できた。 実際の操作は以下のようである。

$ mutool convert -o output.ps input.pdf
ビューアーとコンバーターの挙動が違うとトラブルの元なので、この方法を使って行きたい。

pkgsrcのpLaTeX (pkgsrc/print-platex)で作ったdviファイルをdvipdfmxでPDFファイルに変換する

本当に久しぶりにLaTeXでPDFファイルを作成したくなって、pkgsrcに日本語対応のLaTeXがあるか探してみたところ、 pkgsrc/print/tex-platexというのが 収録されていた。 pkgsrc/print/tex-jsclassesを使ってDVIファイルを作ってみて、pkgsrc/print/dvipdfmxで PDFファイルに変換しようとすると、以下のようなエラーになってPDFファイルを生成できない。

current-situation-of-coal-industry-in-the-world.dvi -> current-situation-of-coal-industry-in-the-world.pdf
[1
kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+359/600 --dpi 959 rml
/usr/pkg/bin/mktexpk: gsftopk: not found
mktexpk: don't know how to create bitmap font for rml.
mktexpk: perhaps rml is missing from the map file.
kpathsea: Appending font creation commands to missfont.log.

dvipdfmx:warning: Could not locate a virtual/physical font for TFM "rml".
dvipdfmx:warning: >> There are no valid font mapping entry for this font.
dvipdfmx:warning: >> Font file name "rml" was assumed but failed to locate that font.
dvipdfmx:fatal: Cannot proceed without .vf or "physical" font for PDF output...

Output file removed.
私はRyumin-LightとGothicBBB-Mediumは、フォントを埋め込まないようにしたいので、以下のパッチのように f ptex-noEmbed.mapの行を追加する必要がある。
--- /usr/pkg/etc/texmf/dvipdfmx/dvipdfmx.cfg.orig       2018-11-08 14:28:42.047918996 +0000
+++ /usr/pkg/etc/texmf/dvipdfmx/dvipdfmx.cfg
@@ -223,6 +223,7 @@ f kanjix.map
 % minimal example for Chinese and Korean users
 % improvements please to tex-live@tug.org
 f ckx.map
+f ptex-noEmbed.map

 %% Include other config files
 %i 
ここで、tex-platex-2018dvipdfmx-20180217を使用している。

ちなみに、tex-platex-2018では、入力の.texファイルをUTF-8で書くことが可能だった。

RubyのURI.parseでプロキシーサーバーを設定する際にパスワードとして使えない文字

ユーザー認証付きのHTTPプロキシーサーバーを経由しないと、どこにも行けないネットワークで生活しないといけないことがある。 そんな環境でもRubyスクリプト(実際にはJRubyで動かすことが多い)でWWWにアクセスしなくてはいけないことがある。 RubyのURI.parseが呼ばれると、

URI::InvalidURIError: bad URI(is not URI?)
とエラーになってそもそもWWWにアクセスしに行かないことがある。 これは、ユーザー認証付きのHTTPプロキシーサーバーのパスワードに使えないはずの文字が設定されているためである。 私の環境の場合にはWindowsのActive Directoryの認証情報と連携しているので、Windowsのログオンパスワードとして 良かれと思って記号を使っていると、遭遇してしまうことがある。

では、どのような文字をパスワードとして使用するのを避ければ良いのだろうか? RFC2396であるUniform Resource Identifiers (URI): Generic Syntaxによると、 以下のように書かれている。

   The user information, if present, is followed by a commercial at-sign
   "@".

      userinfo      = *( unreserved | escaped |
                         ";" | ":" | "&" | "=" | "+" | "$" | "," )
つまり、セミコロン、コロン、アンパサンド、イコール、プラス、ダラー、カンマ以外は使えないようだ。 いまいちescaped = % hex hexの場合がどうなるのか分からないが…。

とりあえずは、これら以外の記号は避けてActive Directoryにパスワード登録するのが良さそうだ。

NetBSD/amd64上で動かすFirefox 61.0.2でのDNS over HTTPSを使う

オーディオやウェブカメラをFirefoxから使うと言う話ではないので、 NetBSDだからと言って特別な事はあるはずもないのだが、 DNS over HTTPSをmozilla wikiのTrusted Recursive Resolverを参考に設定して使ってみた。 Firefoxのprofileディレクトリーにあるprefs.jsに以下のように設定されるように、about:configで 設定すれば良い。Firefoxを再起動することなく、設定直後から反映される。

user_pref("network.trr.bootstrapAddress", "1.1.1.1");
user_pref("network.trr.mode", 3); // DNS over HTTPSしか使わない。通常のDNSにfallbackする場合には2にする。
user_pref("network.trr.uri", "https://mozilla.cloudflare-dns.com/dns-query");

仮想マシンハードディスクイメージファイルの形式

仮想マシンのハードディスクイメージファイルについて、いつもどれがどれか分からなくなってしまうので、その種類を書いておく。 Appleのdmg形式は除いている。

RAW
物理ディスクのダンプ
qcow
昔のqemuの形式
qcow2
今のqemuの形式
FVD (Fast Virtual Disk)
IBMの開発したqemu用の形式
QED
qemu用だが既に互換性のためだけに残っている状態。
VDI (Virtual Disk Image)
VirtualBoxの形式
VMDK (Virtual Machine Disk)
VMwareの形式
VHD (VIrtual Hard Disk)
Microsoft Virtual PCの形式
VHDX (Virtual Hard DIsk v2)
Microsoft Hyper-Vの形式
bochs
Bochsのbximageコマンドで作る形式
他にもあるだろうが、普段目にするのはこの程度なように思う。

NetBSDのpkgsrcから導入したXでAccelMethodを設定する

FreeBSDのX.orgでCaps lockキーをCtrlにするで書いたことと基本的に同じではあるのだが、 NetBSD上でpkgsrcから導入したmodular-xorg-server-1.20.1を導入した場合の設定例を書いておく。

やりたいことは、Toshiba dynabook R63/PSというIntel Broadwell世代のラップトップでIntelのinternal GPUのアクセラレーション方式をSNAからUXAに切り替えるということである。 以下のようにすれば良い。

; まず/etc/X11/xorg.conf.dディレクトリーがないので作成する。
# mkdir /etc/X11/xorg.conf.d
; 以下のような内容を用意する。
# cat /etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
        Identifier "Intel GPU"
        Driver "intel"
        Option "AccelMethod" "UXA"
#       Option "NoAccel" "True" # アクセラレーションを無効にする場合
EndSection

JRubyのRestClientで、認証付きHTTPプロキシーサーバーを経由してアクセスする方法

いつの頃か覚えていないのだが、とある認証付きHTTPプロキシーサーバーを経由して、 JRubyのRestClientを使ったプログラムが動いていたはずである。 プロキシーサーバーの情報は、この環境は、Windows 10の環境であるから、


> set http_proxy=http://username:password@serveripaddress:portnumber
のように設定してある。

しかし、何かが変わったようで、今日になると404 Proxy Authentication Requiredの エラーが、net/httpから返されて認証付きプロキシーサーバーを越えることができない。 パスワードは英数字のみで構成されているので、パスワードの値が問題ではないはずである。

いろいろ試した結果、


RestClient.proxy = ENV['http_proxy']
を書いておくことで解消できた。

net/httpの仕様がいまいち理解できず気持ちが悪いが、 いずれまた、はまりそうな気がするので書いておく。

記名式Suicaに定期券を割り当てられなくなった

通勤定期券を記名式Suicaのカードで利用している。 その通勤定期券を継続購入しようとしたのだが、券売機に挿入してもどうやっても認識してもらえなかった。 既存の通勤定期券は問題なく利用できるし、チャージ残高を確認もできるので、NFCチップが破損している訳ではないのは...