matplotlib のフォントを Helvetica に変える

matplotlib のフォントはデフォルトで Bitstream Vera Sans というものになっているが、特に数字の見栄えがよろしくない。 そこで、Helvetica に変えてしまおうというのが主題。 環境は python3.5、OS X 10.9.5 上で走っている。 まずはこのポストを参考にした。How to set Helvetica as the default sans-serif font in Matplotlib // Science, meet productivity // A computational RNA biologist exploring productivity, python, and reproducibility. しかしこれではうまくいかない。 結局たどり着いたのがこれ。 osx - cannot change font to Helvetica in Matplotlib in Python on Mac OS X 10.6 - Stack Overflow

fondu は homebrew で入れておく。

$ python3 -c "import matplotlib ; print(matplotlib.matplotlib_fname())" 
/Users/***/.matplotlib/matplotlibrc
$ mkdir ~/Desktop/font_copies
$ cp /System/Library/Fonts/Helvetica.dfont ~/Desktop/font_copies
$ cd /Users/***/.matplotlib/fonts/ttf/
$ fondu -show ~/Desktop/font_copies/Helvetica.dfont
$ rm ~/.matplotlib/fontList.py3k.cache

この手順でめでたく Helvetica 化に成功した。

年の瀬

特に記事を書くモチベーションがなくなってしまった。きちんとした記事を書かなければならないという考えが邪魔をしている。 アクセス解析を見ると、Poisson の和公式がよく見られているらしい。 信号処理をもう一度勉強しておきたいと思う今日この頃。

他になにか書くネタあったっけ。

  • Markdown に関する個人的メモ
  • サンプリング定理
  • KiCAD で基板設計

ぐらいか。ああ、あと先週買ったカメラのレビューとか。

Raspberry Pi 2 で Apple Magic Mouse を使う

単に Raspi で startx してみたかったという動機で Apple Magic Mouse が使えるのか試すことにした。 買ってきた Bluetooth アダプタは ELECOM LBT-UAN05C2 という製品。 ヨドバシで 1350 円(税込)だった。 無線 LAN 用のバッファローの WLI-UC-GNM と今回の Bluetooth アダプタ の両方を挿して起動してみたが、一応問題なく動いている。ただ電源的には厳しいみたいで、 右上にずっと虹色マークが出たままになってしまうが、気にしない。

今回参考にしたのは次のページ: Raspberry PiでBluetoothを扱う - c-bata web

まずはパッケージのインストールから始める。

$ sudo apt-get install bluetooth bluez-utils blueman

続いて Bluetooth アダプタが認識されているか確認する。

$ lsusb

良さそうだったら、ここで Magic Mouse の電源を入れて Bluetooth デバイスの MAC アドレスみたいなやつを調べる。

$ hcitool scan

アドレスが分かったらペアリングする。PIN コードの入力を求められるが、0000 にしておけば OK だった。

$ sudo bluez-simple-agent hci0 XX:XX:XX:XX:XX:XX

恐らくここからが Magic Mouse を使う際のポイントで、以下の手順を素早く行う必要がある。

$ sudo bluez-test-device trusted XX:XX:XX:XX:XX:XX yes
$ sudo bluez-test-input connect XX:XX:XX:XX:XX:XX

モタモタしていると bluez-test-input connect で Failed とか言われてしまう。 これでめでたく startx できたのであった。 左右クリックとスクロールも問題なく使えていることを確認。

Raspberry Pi 2 Model B を買った

Raspberry Pi 2 Model B を秋月で買ってきた。ケーブルとか SD カードとか諸々含めて 7000 円くらい。 ケースは要らないだろうと思って買わなかった。

まずは Raspbian のインストールから。 NOOBS のダウンロードは JAIST のミラー

が利用可能。バージョンは現時点で最新の v1.4.1 を落とした。 zip を展開して中身を SD カードにコピー。ファイルは SD カードのルートに配置する。 NOOBS のインストラクションには Mac ユーザーは SD Association からフォーマット用のツールを落として使えと書いてあるが、 FAT32 ですでにフォーマットされていたので気にしない。 寧ろそんなツールがあったんだという→SD Formatter for Mac Download - SD Association

英語配列HHKB と普通のフル HD ディスプレイを接続し、電源の USB ケーブルを接続するとすぐに インストーラが立ち上がる。USB 接続のマウスを持っていないことに気がついたが、無くても問題ない。 ちなみにインストールには 10 分ぐらいかかる。 面倒なので日本語環境の整備とかはしない。

次に無線 LAN が使えるように設定した。昔買ったバッファローの WLI-UC-GNM を使う。 認識されているかどうかは lsusb で調べられる。 ifconfigwlan0 があるかどうかを見てもよい。 次にスーパーユーザ権限で

# iwlist wlan0 scanning

を実行して ESSID を調べる。あとは

# wpa_passphrase [ssid] [passphrase] >> /etc/wpa_supplicant/wpa_supplicant.conf

を実行しさらに /etc/wpa_supplicant/wpa_supplicant.conf の内容を書き換える。 WPA-PSK TKIP ならば

proto=WPA
pairwise=TKIP
group=TKIP

network={} の中に追記する。 解説ページによっては auth_alg=OPEN などと設定していることもあるが、 よく分からない。まあネットワークには繋がったので良しとする。

/etc/network/interfaces も書き換える必要がある。DHCP を使う前提で

  • auto eth0 の先頭に # をつけてコメントアウト
  • wlan1 に関する部分は削除
  • iface wlan0 inet dhcp と書き換え
  • iface default inet dhcp を追記

これで設定おしまい。# reboot して IP が取れていればめでたし。

参考ページ

ifstream での >> 演算子の振る舞い

久々の更新になってしまった。

C++ でファイル読み込みがしたかったら ifstream を使うのが普通。 ググると出てくるサンプルコードにはgetline()による方法が多い気がする。 けど、オーバーロードされた>>演算子を使うという方法もある。 ただ、その振る舞いに謎な部分があったのでメモしておく。

結論から言うと、>>でファイル読み込みするときは 1個以上の連続したスペース、タブ、改行は1つのデリミタだと見なされるので注意すべし ということだ。

>>の用例としては

ifstream ifs("input.dat");
while(!ifs.eof())
{
    string word;
    ifs >> word;
    
    // まあいろんな処理、例えば
    cout << word << endl;
}

といった感じになる。ここに

   15.250       92.000    
   15.350       90.000    
   15.450       102.00    

みたいな、多数のスペースと改行で区切られたデータを入れるとどうなるのか?実行結果は

15.250
92.000
15.350
90.000
15.450
102.00

となる。このサンプルデータではレコードの区切りはスペースと改行だけだが、タブ文字が入っている場合でも同様。

ここで示したようなデータなら、この動作は好ましい。 ただ、空のレコードが存在する場合などは困ってしまう。そんな時はgetline()で string に一度詰めて、それから整形という風になるだろう。

LaTeX のダミーテキスト lipsum を使ってみる

今回は LaTeX ネタ。

文書のレイアウトの確認とか、テンプレートを作るときとかに使うのがダミーテキスト。 英語圏では Lorem ipsum というのがよく使われるそうで、LaTeX なら\usepackage{lipsum}で lipsum.sty を読み込んだ上で、\lipsumで出力される。オプションで段落を指定できて、 例えば第2段落なら\lipsum[2]とすればよい。

これを使えば「ここに本文が入ります。」みたいなダサいやつを増産する必要がなくなってよろしい。

ついでに、lipsum とは関係ない話。画像がまだ用意出来ていないけど、挿入位置とかサイズの確認がしたい場合には\rule{横}{縦}を使って黒い長方形を描ける。

\documentclass{article}
\usepackage{lipsum}

\begin{document}
\lipsum[1-2]
\begin{figure}[h]
\centering
\rule{8cm}{6cm}
\caption{Rectangle}
\end{figure}
\end{document}

タイプセットするとこんな感じ。

f:id:nucl:20150204000436p:plain

はてなブログでの LaTeX 数式がちょっとおかしい

先の記事では、LaTex 数式の挿入で

を参考にした。 例えば、一番最初の数式では

[tex:
\displaystyle
\sum\_{n=-\infty}^{\infty} f(n) = \sum\_{n=-\infty}^{\infty} \tilde{f} (2\pi n)
]

と入力した。 はてなブログでは、何故かアンダーバーをエスケープ \_ しないと数式が表示されない。 ハットについてはエスケープしなくても今のところ問題は生じていない。 Markdown モード固有の問題かどうかは知らないが、取りあえずの処方箋としてはアンダーバーは全てエスケープ、で良さそう。

他にも問題があって、MathJax のレンダリングモードを HTML+CSS にしたとき、\frac{1}{T} の表示がおかしい。 よく分からないが、分数の横棒が消えている。これはウチの環境の問題かもしれないが。 これは環境のせいでした。

Poisson の和公式

はてなブログでは MathJax で数式を表示できるそうだ。そのテストも兼ねて。

世の中には Poisson の和公式というものがある。表記は色々あるが、最もシンプル(と思う)のが


\displaystyle
\sum_{n = -\infty}^{\infty} f(n) = \sum_{n = -\infty}^{\infty} \tilde{f} (2\pi n)

という形。もっと一般的には


\displaystyle
\sum_{n = -\infty}^{\infty} f(t + nT) = \sum_{n = -\infty}^{\infty} \tilde{f} (2\pi n / T) e^{i2\pi nt / T}

というもの。 T = 1,\ t = 0 とすると一番上の式になる。 これをどうやって導出するかというと、まずは左辺が周期関数になってるので Fourier 級数展開する。


\displaystyle
\sum_{n = -\infty}^{\infty} f(t + nT) = \sum_{n = -\infty}^{\infty} c_n e^{i2\pi nt / T}

あとは係数を求めるだけでいい。


\displaystyle
c_n = \frac{1}{T} \int_{0}^{T} e^{-i2\pi n t / T} \sum_ n f(t + nT) dt = \frac{1}{T} \sum_n \int_{nT}^{(n + 1)T} e^{-i2\pi nt / T}  f(t) dt = \tilde{f} (2\pi n / T)

これで終わり。

次に応用としてサンプリング定理を取り上げたいと思う。

このブログについて

このブログでは趣味のあれやこれやを扱うつもり。ネタとしては

  • 電子工作
  • オーディオ
  • プログラミング
  • 物理
  • 数学

あたりを考えている。 内容の正確性に関しては注意を払っているけど、間違いが含まれている可能性もあります、という文言は一応付けておかねばならない。