DEBUG HACKS Conference 2009 に参加しました

久しぶりのブログです。今回は zaurus とは関係ないですが。。。

昨日開催された Debug Hacks の発売記念イベント Debug Hacks Conference 2009 に参加してきました。

参加前は本を買うかどうかは立ち読みしてから決めようかと思っていたんですが(^^;)、会場の即売所で買ってしまいました。

オライリーの紙袋 Debug Hacks Tシャツ

会場で本を買ったら DEBUG HACKS Tシャツがもらえました。ネタ以外では着れないですが・・・。
本を入れてくれたオライリーの紙袋がCoolです。

Conference の内容は詳細に書かれている方々がいらっしゃると思うし、動画がいずれニコニコ動画等にアップされると思うので、個人的にためになった部分を。

GDBでリスト表示

まず、gdb のユーザ定義コマンドによるリストの表示。構造体内のnext を辿って最後まで表示してくれるというもの。ユーザ定義コマンド自体は知ってたけど、面倒そうで使ったことなかったんですが、 こういう使い方が出きるなら便利ですね。

コードはメモってないので書けませんが、ユーザ定義コマンド(仮に list_print とする)で1つの構造体を表示するようなコマンドを作っておき、別のユーザ定義コマンドで next を辿って list_print を呼び出すというもの。(説明が下手ですな)

たしかに、ユーザ定義コマンドを作るのに手間がかかりますが、何度も何度もリストを見なければいけない場合には使えそうです。

今までは、

(gdb) p *list_head->next->next->next->next->next->next->next

とか普通に打ってました (汗)

Yuguiさんの発表

私は Ruby は触ったことがないこともあり、失礼ながら Yugui さんを始めて知りました。

まず、プレゼンうまいなーと。スライドの作りも個性的で、話の流れもわかりやすく、ユーモアもあり、とても印象に残りました。

印象に残ったのは、Ruby や Rails ではデバッグであまり苦労していないということ。言語設計やソフト設計が厄介なバグを混入しにくくしているんだなと感心しました。

DbC (Design by Contruct) や BDD (Behavior Driven Development) といった、軽微なバグを初期段階で検出できて、バグを混入しにくい作り方が、地味そうに思えるも非常に有効だと分かりました。

体験談として、DbC を適用して assert 入れまくったらバグがボロボロ出てきて、全て退治したらバグが1つしか残らなかったとおっしゃってました。1つのスキームで数百、数千単位のバグを1つにまで減らせたというのは驚きです。

こういう理論って確かにそうだけど、実際開発には適用が難しくない?とか、本当に手間に対する効果があるの?みたいなことを考えてしまうのですが、バリバリ開発しているハッカーに言われると非常に説得力があります。

いま仕事で開発してるソフトに DbC に倣って assert 入れまくってみようかな。結果がちょっと怖いですが (^^;

サインもらいました

最後に著者の方々にサインをもらってきました。

まだ本は読んでないですが、なかなか勉強になる Conference でした。


gnome-terminal で M+ ビットマップフォントを使う

 久しぶりに Zaurus 以外のネタです。

個人の好みで結構分かれると思いますが、 私は非アンチエイリアス表示が好きです。

アンチエイリアスがかかっているとパッと見は綺麗なのですが、仕事などで長時間パソコン画面をみるような状況だと、アンチエイリアス表示の方が疲れやすいように思います。(思い込みかもしれませんが・・)

また、疲れ目になってピントが合わなくなってきた時もビットマップフォントの方が見やすい気がします。

という流れで、読みやすいビットマップフォントとして以前から M+ フォント を使っていました。

しかし、最近のディストリビューションはアンチエイリアス表示がメインになり、ビットマップフォントが排除されてきています。

私のようにビットマップフォントを使いたい人がいないのか、ググっても「ビットマップを使わないようにする(強制アンチエイリアス)」ような情報はあるのですが、ビットマップを使えるようにするような情報はあまりありませんでした。

((ここまでが前フリです ^^;))

ということで、最近のディストリビューションでも M+ フォントを使えるように頑張ってみました。gnome-terminal で M+ フォントを使えるようにするのが目標です。

以下は Ubuntu 8.10 での設定方法ですが、最近のディストロでは大体同じだと思います。

1. unicode エンコードのM+フォントを用意する

いろいろ試行錯誤した所、GTK+2のフォント一覧にフォントを表示させるには、iso10646 のエンコード(文字コード)のフォントでなければいけないようです。

そこで M+ フォントを iso10646 エンコードに変換したものを作成しました。

unicode対応表を元に機械的に変換したものですので、著作権はオリジナル作者の COZ 様にあります。利用・再配布等は M+ フォントのライセンスにしたがってください。

上記ファイルを展開すると、mplus_?_??.pcf というフォントファイルが4種類展開されます。この pcf ファイルを ~/.fonts/ へコピーします。

2. fontconfig にビットマップフォントを認識させる

/etc/fonts/conf.d に fontconfig の設定ファイルが格納されています。ここに 70-no-bitmaps.conf というシンボリックリンクがあるので、これを削除して 70-yes-bitmaps.conf へのリンクを作成します。

$ sudo rm /etc/fonts/conf.d/70-no-bitmaps.conf
$ sudo ln -s ../conf.avail/70-yes-bitmaps.conf /etc/fonts/conf.d/

これで fontconfig がビットマップフォントを認識するようになります。

3. フォントキャッシュを更新

フォントキャッシュを更新します。

$ fc-cache -f ~/.fonts/

M+フォントが認識されているかは以下のコマンドで確認できます。

$ fc-list | grep M\+
M+gothic:style=Regular
M+gothic:style=Bold

4. アプリケーションを再起動

以上の設定をした後、アプリケーションを再起動すると M+gothic というフォントが使えるようになります。

手っ取り早くすべてのアプリに反映させるにはログインしなおしてください。

9ポイント以上の指定で 12px のフォントが、 8ポイント以下の指定で 10px のフォントが使用されるようです。

 

いろいろ試行錯誤して使えるようになったので、他にも設定をいじっている所があったかもしれません。
動かなかったらコメント頂ければと思います。