programming

ggcov

http://ggcov.sourceforge.net/gconvのGUI.gccで -fprofile-arcs を付けてコンパイルすると,プロファイル情報付きのバイナリが生成できる.このバイナリは,実行時に実行回数などをサンプルし,拡張子 .da のファイルへ保存する.例えば $ gcc -fprofile-a…

gcc-4.0の最適化処理を確認する.

gcc のデバッグ用オプションを使うと,中間データをファイルに出力できる. -fdump-tree-gimple .gimple という拡張子で,gimplification pass の結果を出力. -fdump-tree-generic .generic という拡張子で,結果を出力 -fdump-rtl-all RTL関連の処理結果を…

kernel-2.6.13 released

新しく追加された機能の内,興味をもったのは kexec Voluntary Kernel Preemption

awk で大文字小文字を区別せずに文字列を比較する

awk で,case-insensitive な文字列の比較をする方法. C言語で言うところの strcasecmp() をしたい場合.tolower()を使って全部小文字に変換してから比較を行う. tolower($1)~/foo/ { ...}

ImageMagick で画像を結合する.

サイズなどを気にせず単純に結合するだけなら convert で十分. $ convert -append 上画像 下画像 出力画像 $ convert +append 左画像 右画像 出力画像サイズの異なる画像を結合する場合は montage を使うと良さげ. $ montage -tile 2x1 -geometry 640x480 …

cflow の出力を Graphviz で可視化

cflow の出力を graphviz で可視化するためのスクリプトを作ってみた. #!/usr/bin/awk -f function parse(parent, nest) { if (getline == 0) return -1; N=2; while ($N == "") N++; while (N>nest) { FUNC=gensub(/^(.+) {(.*)}$/, "\\1", "g", $N); prin…

関数呼び出しの関係をグラフ化する.

大きなソースコードを読むためのツールとして etagとか global とか doxygen を使ってきた.しかし,もっと便利なツールがあるはず.という訳で今日は cflow を試してみた.たとえばこのようなソースコードを cflow に食わせると void fuga(int i) { printf(…

gnuplot で媒介変数を使う

gnuplot> set parametric gnuplot> plot sin(t),sin(2*t)

英語で ChangeLog を書くときのテンプレート(?).

修正 変更系 Fixed A. Various fixes to A. Another fix for A. Changed A. Corrected A. Replaced A with B. Updated A. Improved A. Reimplemented A. 追加系 Added new support for A. Implement A. Disable A. 削除系 Removed useless A. Removed unused…

global を使ったソースコードからHTMLを生成する方法.

ソースコードからHTMLのドキュメントを生成する方法. $ cd path/to/sources $ htags$ cd HTML $ firefox index.html &

global ソースコードのタグ付けツール.

ソースコードにタグを付けるツール.インストール方法 $ apt-get install globalタグのファイル GTAGS,GRTAGS,GSYMS を生成する方法. $ cd path/to/sources $ gtags生成したタグは,emacsからも使える.基本的な ~/.emacs の設定は次のようになる. ;;; -- …

debian のパッケージのアップデート

gdb の snapshots 版を試してみたくなったので, deb なパッケージを作ってみることにした. $ apt-get source gdb $ wget ftp://sources.redhat.com/pub/gdb/snapshots/current/gdb-6.3.50.20050713.tar.bz2 $ cd gdb-6.3 $ uupdate -u ../gdb-6.3.50.20050…

Delta Debugging

http://japan.linux.com/desktop/05/07/12/0249222.shtml

Linux device driver 第3版

http://lwn.net/Kernel/LDD3/kernel 2.6 に対応した「Linux デバイス ドライバ」 の第3版の pdf

dyn-tick

http://japan.linux.com/kernel/05/07/09/1345253.shtml より dyn-tick(Linux用Dynamic Tick Timer)は、HZを動的に変化させるものである。dyn-tickを使用すると、負荷がある間はフルのHZでシステムは動作する。そしてアイドル時に可能であればTickをスキッ…

makefile に於ける依存関係

Makeの依存関係を生成する方法には,色々選択肢がある.手っ取り早いのは depend: makedepend -Y -- $(CPPFLAGS) -- *.cc とMakefileに書いておいて, $ make dependとすることで Makefile自身に依存関係を自動で記入する方法.しかし,この方法には以下の二…

icc で stl を使うと,リンクで失敗する.

intel compiler 8.1 のバグ?で,環境変数 GXX_ROOT と GXX_INCLUDE を設定すれば回避できるらしい. $ export GXX_ROOT=/usr/lib/gcc-lib/i486-linux/3.3.5 $ export GXX_INCLUDE=/usr/include/c++/3.3と言う感じで,gcc-3.3あたりに付いてくるstlのディレ…

debian で intel compiler (icc)

intel コンパイラを debian で使う方法.intel compiler は rpmで配布されている.そこで, alien で rpm を deb に変換する. $ fakeroot alien intel-icc8-8.1-032.i386.rpm $ fakeroot alien intel-iidb8-8.1-049.i386.rpmこれで, intel-icc8_8.1-33_i38…

emacs で,クラスの定義から,実装の雛形を作成する作戦.(その1)

とりあえず M-x replace-regex で何とかする. class Hoge { int set(float *val); }から int Hoge::set(float *val);を作るには, M-x replace-regex で \( *\)\([ A-Za-z_:]+\) +\([A-Za-z_:][A-Za-z0-9:_]*\) *(を \2 Hoge::\3(改行は C-q C-j で入力する…

emacs で mini buffer にて 改行を入力する方法.

mini buffer で改行を入力するには C-q C-j とする.

vi で置換

カーソル行中のSRCをDSTに置換 :s/SRC/DST/gファイル中のSRCをDSTに置換。 まず、SRCがある行を/SRCで検索して、見つかった行に対してs/SRC/DST/gで置換を実行する。 :/SRC/s/SRC/DST/g :/SRC/s//DST/gファイル全体に対して置換をする場合は先頭に"g"をつけ…

テキストアートで,ビットフィールドを説明

ソースコードのコメントでビットフィールドを説明する為のテキストアートのテンプレート.結構作るのに時間が掛ったので記念に貼っておく.パケットのヘッダの各ビットの説明とか, ドライバが叩くポートとかレジスタの説明を書くときに便利. 4 0 |-+-+-+-|…

povray で ポリゴン を描画

mesh2 が便利. mesh2 { vertex_vectors { N, <X1, Y1, Z1>, : <Xn, Yn, Zn>, } face_indices { M, <a, b, c>, : <d, e, f>, } }頂点の配列を用意し, 各面はその頂点のindexで指定する. 点法線も指定できるが,省略した場合は自動的に面法線を使って描画するみたい.</d,></a,></xn,></x1,>

debian で man pthread_create などを見るには.

debian は,デフォルトでは開発者向けのmanをインストールしない模様. $ apt-cache search manpagesと検索して必要そうなパッケージを検索. apt-get install した.ちなみに,大体以下のmanを入れておけば事足りるみたい. manpages-ja-dev - Japanese ver…

改行コード

windows 0x0d 0x0a \r \n unix 0x0a \n mac 0x0d \r

svn でバイナリファイルを管理する

svnは,ファイルに様々な属性を設定できる. たとえば svn:mime-type という属性は,ファイルのMIMEタイプを設定するために利用される.属性とその値の一覧を見るには次のようにする. $ svn propget svn:mime-type -v ファイル名属性を設定するには次のよう…

subversion のリポジトリをDB形式から,FSFS形式に変換する

ダンプしたあと,FSFS形式でリポジトリを再作成しリストアすればよい. $ svnadmin dump /path/to/svnrepos > svnrepos.svn.dump $ svnadmin create --fs-type fsfs newrepos $ svnadmin load newrepos < svnrepos.svn.dump Subversion実践入門:達人プログラ…

subversion のリポジトリのバックアップ

svn のリポジトリは,ファイルへダンプしたり,ファイルからリストアすることが出来る.ダンプするには $ svnadmin dump /path/to/svnrepos > svnrepos.svn.dumpリストアするには $ svnadmin create --fs-type fsfs newrepos $ svnadmin load newrepos < svn…

emacs の elisp を勉強する

elisp の勉強をするなら /usr/share/emacs 以下のソースを読めば良い. という訳で mewのソースを眺めていたが,関数の仕様が全然判らない.そういう時は, M-x apropos シンボル名とすれば良いらしい.mew-func.el あたりは,lisp 的な記述が多くて,おもし…

emacs で elisp のデバッグ.

emacs には組み込みデバッガが用意されていて, M-x debug-on-entry で 関数にブレークポイントを指定できる.ブレークが掛かると,backtrace のバッファが出来, "d" でステップ(?)実行 "b" でブレークポイントの設定 "c" で処理の継続 ができる.ただし,…