memprof

 それmemprofでできるよ
 memprofはOwen Taylorの作ったメモリリークチェックツールで、GUIがついててどこからリークしてるのか教えてくれる。しかもvalgrindと違ってそんなに重くないので、お勧めです、と書きたいところなのですが、困ったことにmemprofはいつごろからか動かなくなってしまったので、新しい環境ではおすすめできません。どうもGlibc-2.3.4あたりかららしい。残念。
 と、ここで話が終わる訳ではなく、久々に本家をチェックしてみると、なんと4年ぶりの新バージョンリリースが。./configure;makeで普通に動きました。やや感激気味。
 ついでにコードを見たのでちょっと感想を。

  • new_scrolled_text_bufferの型はShikiTabInfo *new_scrolled_text_buffer(void)あたりがよいのではないか
  • delete_event_handlerのプロトタイプ宣言でbufferの型はGtkTextBuffer*のはず。(私も身に覚えがあります。)
  • remove_tabpageでShikiTabInfoの中身を解放してない
  • GtkFileChooser使った方が良いのでは?
  • 現在のタブをキーに情報を取ってきたいなら、gtk_notebook_get_nth_pageとg_object_get/set_dataでできます。(たぶん、あまりお勧めできる方法ではありませんが。)
  • そうすると、delete_handlerにtext_bufferを渡す必要は無くなるはずので、delete_handler_idとかを保持する必要もなくなるはず。

 以上は単なる感想でして、多分に個人的好みが入っていますので、おかしいと思ったら適当に流してやってください。

evinceできれいな英文PDFを表示する方法

 気づけばevinceで英文が綺麗に表示できないようになってしまった。いつ頃からこんな事になったんだか、どうにもよくわからない。
 まぁ、Acroreadがあるからいいからいいや、とevinceとは割り切ったお付き合いをしていたわけですが、最近、どうも、そのAcroreadも調子が悪い、というか、重くて使いものにならない。gdbで調べてみるとBIBTerminateという関数を何回も呼んでいるように見えるが、プロプラなソフトなので、これ以上はよくわからん。
 中間発表(11/24だ!)までにいろいろやらんといかん事があるのに、英文PDFを読むたびにいちいちWindowsを起動していたのでは話にならんので、頑張って調べてみることにした。最初はpopplerのエンバグを疑ってみて、古いバージョンに入れ替えてみたのだが、効果無し。poppler、疑ってごめんよ。
 他に思い当たるところは無い。早速行き詰まったので、とりあえずedgyをクリーンインストールしてみるか、という事で、debootstrapを使ってインストールをしてみようとした所、dbusのインストールでつまづいた。chrootではダメなのかしらん…。
 またまたあっという間に行き詰まったが、そういえば昔、uimでクズコードをコミットしたときに、straceでさりげない形でプギャーされたな、という事を思い出して、straceを使って開いてるファイルを全部チェックしていけば良いのではないかと気づいた。試してみると、なんか、kochi-gothic.ttfとか開いてる。そういえば、フォントの形もKochiっぽい。という事で、ttf-kochi-gothicとttf-kochi-minchoをremoveしてみる。(依存関係の問題でxpdf-japaneseもremoveされた。)
 これが正解で、英文PDFは綺麗に表示されるようになった。が、副作用で日本語のPDFが表示できなくなった。これでは修論が書けません。いちいち英文読むときにapt-get remove ttf-kochi-gothicして日本語読むときにapt-get install xpdf-japaneseするとか、まぁイザとなればできなくはないけど、ちょっと悪夢だ。できれば避けたい。
 というわけで、もう少し調べてみることにした。apt-get install xpdf-japaneseをすると日本語が読めるようになる、という所に目をつけて、xpdf-japaneseに含まれるいろんなファイルをリネームして結果を見てみたりしたが、駄目だった。(この過程で、popplerはどうも/usr/share/fonts/cmap/以下のファイルは根こそぎ読みに行ってるみたいだとか、そういう知識を手に入れたが、どこで役立てればいいのかはよくわからない。)
 結局、ttf-kochi-gothicとttf-kochi-minchoを削除すると、xpdf-japaneseの/usr/share/xpdf/japanese/以下を全部バックアップしておき、apt-get remove ttf-kochi-gothic ttf-kochi-mincho ttf-sazanami-gothic ttf-sazanami-minchoを行い(ここでxpdf-japaneseも一緒に削除される)、その後で/usr/share/xpdf/japanese/を元に戻すと、英文も日本文も美しく読み取れるようになった。さざなみフォントは~/.fonts/以下にそのまま放りこんでおけば、私の使用用途には特に問題ないようだ。
 しかし、この現象、ぐぐっても全然出てこないんだけど、再現性がないという事かな。コードを追ってないので、どうも自信が持てない。また今度新しいマシンを買ってDebian入れたら調べ直そう。