DoxygenのLaTeX出力で日本語を使う(LaTeXスタイルシートで)
以下のサイトなどを参考にして、DoxygenのLaTeX出力のPDFが文字化けするのを回避するためのLaTeXスタイルシートを作成し、GitHub に公開しました。
- DoxygenのLaTeX出力で日本語を使う - イグトランスの頭の中
- DoxygenのLaTeX出力で日本語を使う(2015年版) - イグトランスの頭の中
- LaTeX の「アレなデフォルト」傾向と対策
- hyperref - TeX Wiki
- Doxygenの設定メモ — MindTo01s
参考にしたサイトとの違いは、Doxygenが出力したファイルを編集せずに、Doxygenの設定ファイルDoxyfileにファイル名を書いておくだけで、日本語PDFの文字化けなどを回避できる点です。
同時に、Doxyfile で PDF_HYPERLINKS を YES にしたときに、リンクが有効にならず参照場所から定義場所へのジャンプができない問題も解決するようにしています。
これは、Doxygenのリンクの出力が hyperref.sty パッケージの \hyperlink マクロを使用しているためで、 \hyperref マクロに変更するとジャンプできるようになります。この変更も、この LaTeX スタイルシートで行うようにしています。
Raspberry Pi 3 で ppp を使って IIJ mobile に接続する
Rsapbian jessie で IIJ mobile に 3G モデムを使って接続するのに苦労したのでメモを残しておきます。
- Raspberry Pi は Raspberry Pi 3 に Raspbian jessie をセットアップしました。
- IIJ mobile は、法人向けのモバイルサービスです。
ネットでは、接続する方法は wvdial
を使う方法が多く存在しましたが、pppconfig
を使って設定した pppd
を使用しました。
pppconfig で接続用スクリプトを作成する
Create a connection
を選択。Provider Name
にプロバイダ名を入力。ここではiijmobile
としました。Configure Name Servers (DNS)
はDynamic
を選択。Authentication Method for <プロバイダ名>
ではPAP
を選択。User Name
にプロバイダから指定されたユーザ名を入力。Password
にプロバイダから指定されたパスワードを入力。Speed
は460800
を入力。Pulse or Tone
はTone
を選択。Pone Number
に*99***1#
を入力。Choose Modem Config Method
はNo
を選択。Manually Select Modem Port
に/dev/ttyUSB2
を入力。Finished Write files and return to main menu.
を選択。Ok
を選択して終了。
/etc/ppp/peers
と /etc/chatscripts
の下に 2. で入力したプロバイダ名の設定ファイルが作成されます。
/etc/ppp/pap-secrets
に User Name と
Password
で入力した内容が保存されます。
chatscript を編集する
/etc/chatscripts/iijmobile
の # modeminit
の次の行を以下のように変更します。
3G モデムは富士ソフトの FS01BU を使っています。
... # modeminit '' ATH OK 'AT+CFUN=1' OK ATZ OK 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0' OK 'AT+CGDCONT=1,"IP","<APN名>"' # ispnumber ...
peer を編集する
/etc/ppp/peers/iijmobile
の最後に以下を追記します。
persist replacedefaultroute
iijmobile 用の設定を追加する
/etc/ppp/peers/iijmobile
の最後に以下を追記します。
IIJ mobiel は PAP で認証しないと IP アドレスを割り振ってくれないようです。Raspbian jessie の pppd 2.4.6
は、なぜか以下の指定をしないと、最初に CHAP での認証を要求します。しかし、IIJ mobile では CHAP でも認証は通ってしまいますが、CHAP でログインすると IP アドレスを割り振ってくれないようです。
また、 オプションで明示的に +pap
を指定すると、パスワードが見つからないという pppd
のエラーになってしまいます。
そこで PAP 以外の認証方式を使用しないように設定します。
refuse-chap refuse-mschap refuse-mschap-v2 refuse-eep
pon で接続
$ sudo pon iijmobile
poff で切断
$ sudo poff
起動時などに自動的に PPP 接続するための設定
Raspberry Pi の起動時や、3G モデムが挿入された時に自動的に接続するための設定を行います。
/etc/network/interfaces
に以下を追加して、仮想のネットワークインタフェース wwan0
を用意し、PPP 接続と紐づけます。
allow-hotplug wwan0 iface wwan0 inet ppp provider iijmobile
手動でネットワークインタフェースを ifup/ifdown して接続テスト
wwan0
ネットワークインタフェースを ifup
することで、PPP 接続が開始します。
$ sudo ifup wwan0
wwan0
ネットワークインタフェースを ifdown
することで、PPP 接続が終了します。
sudo ifdown wwan0
デバイスが挿入された時に PPP 接続を開始する
/etc/udev/rules.d/40-fs10bu.rules
に以下を記述します。
KERNEL=="ttyUSB*",\ GROUP=="usb",\ ATTRS{../idVendor}=="1c9e",\ ATTRS{../idProduct}=="6801",\ ATTRS{bNumEndpoints}=="02",\ ATTRS{bInterfaceNumber}=="02",\ SYMLINK+="ttyFS01BU",\ ENV{SYSTEMD_WANTS}+="ifup@wwan0"
接続を開始するようのと同時に、3G モデムを認識した時にそのデバイスファイルに ttyFS01BU と言うシンボリックリンクを作成するようにしています。
これは、FS01BU 以外の USB シリアルデバイスが挿入されている時に、ブート時の認識順によってデバイスファイル名が変わってしまう場合に対応するためです。
/etc/ppp/peers/iijmobile
のシリアルポート名を /dev/ttyUSB2
から /dev/ttyFS01BU
に変更しておくと良いでしょう。
Android Studio で Hamcrest の closeTo マッチャーを使いたい
モジュールの build.gradle ファイルの dependencies に以下を追加する。hamcrest.org からライブラリをダウンロードするまでもありません。
dependencies { // ... testCompile 'junit:junit:4.12' testCompile 'org.hamcrest:hamcrest-library:1.3' }
もう一つの方法(追記)
「File > Project Structure」で開いたダイアログでモジュールの設定の Dependencies タブを選択し、「+」ボタンをクリックして「1 Library dependency」を選択すると「Choose Dependency」ダイアログが表示されます。そこで org.hamcrest を検索するとライブラリがリストアップされるので、そこから選びます。
そして、モジュールの build.gradle ファイルの dependencies に挿入された org.hamcrest の行の先頭を compile から testCompile に変更します。
なぜ closeTo を使いたいのか
JUnit4 で浮動小数点の比較をするアサーションを書くとします。
assertThat(2.32 * 3, equalTo(6.96));
とすると、成功するように見えて失敗します。浮動小数点の演算で「2.32 * 2」が 6.95999999999 となってしまうためです。
そこで、ある程度の誤差を見込んで:
assertTrue(Match.abs((2.32 * 3) - 6.96) < 0.0005);
のようにすることもできます。が、これでは失敗したときのメッセージも分かりにくくなります。
そこで Hamcrest の closeTo() というマッチャーを使えば:
import static org.hamcrest.number.IsCloseTo.*; // ... assertThat(2.32 * 3, closeTo(6.96, 0.0005);
と書けるようになります。
ANKER 2-port Turbo Car Charger
だいぶ前に買ったはいいものの、使わずにいて部屋の片隅に放置していたもの。
まあ、普段から車も乗らないので、いざという時のために買ったンだけどね。
最近の ANKER の Car Charger だと、 Power IQ という機能が搭載されていて、接続している機種を自動的に識別できるようだけど、これは古いタイプなので接続する機種によってポートが分かれてる。 Power IQ 搭載のものは次のものみたい。