programming

Release note のための英文テンプレート集

昨日 Changelogのための英文テンプレート集 - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き - というエントリを書きましたが,その際 apple や microsoft が出すような Release note と,いわゆるオープンソースなプロジェクトが出す release note …

Changelogのための英文テンプレート集

Changelog を英語で書く際に参考になるようなテンプレートをまとめてみました.git や svn のコミットログにも使えます. このエントリは今後も逐次更新を続けます(最終更新2018/11/01) リリースノートの英文についてはRelease note のための英文テンプレ…

emacsでリアルタイムに構文チェックを行う方法(flymake)

emacs でリアルタイムに構文チェックする方法です.flymakeを使います.仕組みとしては コーディング中に C-x C-s を押すと,バックグラウンドで make が走る make がエラーを出した場合は,該当するコードをハイライト表示する だけです.恐ろしく便利です…

subversion で $Id:$ のようなキーワードを展開する方法

subversion でも CVSのように $Id:$ $Author:$ のようなキーワードを展開することができる.ただしCVSと異なり,svnではsvn:keywords という属性に登録したキーワードのみが展開される.たとえば Id というキーワードを展開するには以下のようにする. $ svn…

ブレセンハム(Bresenham)のアルゴリズム

FizzBuzz問題の次の問題として,直線の描画アルゴリズムなんてどうだろう?直線描画のアルゴリズムといえばブレセンハム(Bresenham)のアルゴリズムが有名.知っていると知らないでは雲泥の差.試行錯誤するもよし,そのままブレセンハムを実装するもよし.力…

STLのalgorithm,functorの使い方.

STLのalgorithm,functor 関連をシンプルに整理してみました.以下,文中の op は関数オブジェクト T, T1,T2 はtypename a, b はT型の定数 x, y はT型の変数 or 定数 Ite,first, last はイテレータ とします. equal_to, not_equal_to, greater, less, grea…

c++で階乗を計算

テンプレートメタプログラミング(template metaprogramming)で,20の階乗を計算するコード. #include <iostream> using namespace std; template <int64_t N> class X { public: int64_t operator()(){ return X<N-1>()() * N; } }; template <> class X<1> { public: int64_t operato</n-1></int64_t></iostream>…

c/c++でsqliteを使う方法

sqlite3をc/c++で使う方法についてメモ。以前ruby で sqlite を使う方法 - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -でも書いたように、DBを使うアプリケーションは、通常はrubyなどのスクリプト言語で記述したほうが楽です。でもc/c++からもデ…

rubyでsqliteを使う方法

小規模なデータベースを扱う場合は sqlite がおすすめです.SQLが使えるデータベース,つまりRDBMSとしては,PostgreSQLやMySQL,sqliteが有名です.sqliteは,他のデータベースと異なり,サーバをいちいち立ち上げる必要がなくsetupが簡単というメリットが…

3DCGで良く使う数式

3DCGなどで良く使う数式をまとめてみました. ベクトルaとベクトルbの外積 ベクトルaとベクトルbの内積 点と平面の距離 点と平面 との距離は (は平面の法線ベクトル) 点と直線の距離(垂線の長さ) 点と直線 の距離は (は直線の方向ベクトル) 2点とを通る直線…

オブジェクトファイルのシンボルテーブルを見る方法

*.o や *.so などのファイルに含まれるシンボル名の一覧を見るには readelf コマンドを使う. $ readelf -s オブジェクトファイル 昔は nm コマンド や objdump コマンドで同様のことが実現できたが,これらの古いツール達は elf形式(Executable and Linking…

make の仕組みを理解する

前述*1のように Makefile は非常に簡潔に記述できます.ただし,簡潔なMakefileを記述するためには make の仕組みを理解する必要があります.結論から言うと, make は 簡潔な生成ルールのみを記述したMakefileから, 実際に必要となる詳細な生成ルールを自…

Makefile は簡潔に書きましょう

仕組みが判ってしまえば Makefile は簡潔に書けます.$(CC) とか $@ とか $ 基本(その1) ソースコード hoge.c から 実行形式のバイナリ hoge を生成するMakefileは,以下のように書きましょう all: hogeこれだけです.これで $ make all とすると hoge が生…

C/C++開発者向けemacsの設定

emacsで C/C++ でコーディングしている開発者向けの emacs の設定です. [F5]でビルド,[F4]でエラー行へジャンプといったことが出来,かなり便利です.具体的には以下のような事が出来ます. [F7]でコンパイル(バッファを全部保存して,make all します) [F…

linux2.6でDMA転送する方法

久しぶりにPCIデバイスでDMA転送するドライバ(linuxのカーネルモジュール)を書いたので,メモ.以下,論理アドレスと,物理アドレスは以下のように表記する. dma_addr DMAアドレス(物理アドレス,バスアドレスとも) cpu_addr CPUアドレス(論理アドレス) DMA…

詳解 Linuxカーネル 第3版

Linuxカーネルの仕組みを詳しく解説した「詳解 Linuxカーネル」の第3版が出るとのこと.詳解 Linuxカーネル 第3版作者: Daniel P. Bovet,Marco Cesati,高橋浩和,杉田由美子,清水正明,高杉昌督,平松雅巳,安井隆宏出版社/メーカー: オライリー・ジャパン発売日…

gcc-4.1.2 RC1

Mark Mitchell - GCC 4.1 Branch Frozen in Preparation for GCC 4.1.2 RC1 よりgcc-4.1系の次期バージョン gcc-4.1.2 がそろそろリリースされる運びになりそう。 バグ修正のリリースだが、例によって大量の修正が入っている。gccを使っている人はぜひチェッ…

illustratorでsin(x)を描く方法

illustratorでサインカーブ(sin x)を描く方法として、javascriptを使う方法を紹介します。このエントリは、はてな人力検索の質問 question:1167923268 に触発されて書きました。 illustrator用スクリプト illustratorでは、javascript でスクリプト(=プラグ…

valgrind でプロファイル対象から特定の共有ライブラリを除外する方法.

valgrind の --suppressions オプションを使うと,プロファイル対象から特定の共有ライブラリ(hoge.so)を除外出来ます. valgrind の問題点 valgrind はlinux用のメモリリーク検出ツールとして有名ですが,他にも 初期化していない変数値を参照している個所 …

emacs でソースコードを整形する方法

emacsの機能を駆使して,ソースコードを半自動的に整形する方法.手順はたったの2stepです.具体的には step-1 C-c C-q で自動インデント step-2 M-x align-regex でキーワードを指定してテキストを整列 という流れになります.以下例としてC言語で記述され…

viでスペルチェッカーを使う方法

vi (厳密にはviの改良版,vim)でスペルチェッカを使う方法. :set spellemacs だと M-x ispell-region とか M-$ で同様にスペルチェックできる.

std::ostream_iterator

#include <iostream> #include <iterator> #include <vector> using namespace std; int main() { vector<int> d; d.push_back(1); d.push_back(3); d.push_back(13); copy(d.begin(), d.end(), ostream_iterator<int> (cout, " ")); return 0; } #include <iostream> #include <iterator> using namespace std; int mai</iterator></iostream></int></int></vector></iterator></iostream>…

firefox をデバッガ上で動かす方法.

run-mozilla.sh というスクリプトを使うと,デバッガ gdb 経由でfirefoxが起動できる. $ /usr/lib/firefox-1.5.0.7/run-mozilla.sh -g ./firefox-bin -d gdbこれだけ.詳細は run-mozilla.sh のコメントにいろいろ書いてある. 10/23追記. 同じことが, $ …

glibc でバックトレースを表示する方法

2017年11月6日追記.demangle 処理を追加したコードを公開しています.詳細は http://d.hatena.ne.jp/pyopyopyo/edit?date=20171106 で.http://0xcc.net/blog/archives/000067.html にて知ったのだが,glibc はバックトレースを表示するための関数を提供し…

gdbでSTLのコンテナの値を表示する方法

STLを使ったコード,たとえば std::vector<int> array;というコードがあったとして,gdbでデバッグ中に array[0] の値を確認したい場合はどうするか?実はこれが結構面倒なのだ. gdbでデバッグ中に,変数の値を確認したい場合は print コマンドを使う.例えば in</int>…

double型 v.s. float型

浮動小数点演算を行う際に 浮動小数点型(floatかdoubleかlong doubleか) 計算精度 を変えると,実際にどれくらい計算速度が異なるのか測定してみた.測定した環境は fedora core 5 ベースのlinuxで,中身としては linux-2.6.17, glibc-2.4 Intel(R) Pentium(…

C99 における浮動小数点演算の丸め方,例外の取り扱い

C言語の新しい規格であるISO C99では, 浮動小数点演算の丸め方 例外の取り扱い を制御するために,11個の関数を定義している. #include <fenv.h> // 例外関係 int feclearexcept(int excepts); int fegetexceptflag(fexcept_t *flagp, int excepts); int feraiseex</fenv.h>…

C99における浮動小数点演算の計算精度(その2)

C99では,FLT_EVAL_METHODの値で float型 や double型の計算精度を制御できるようになっている.では FLT_EVAL_METHOD の初期値はどうなっているのか? Linux環境で調べてみた. 結論: デフォルトでは FLT_EVAL_METHOD は 2.つまり float でも double でも …

C99における浮動小数点演算の計算精度(その1)

C99では,FLT_EVAL_METHOD というラベルの値で,浮動小数点演算の計算精度が制御できる.FLT_EVAL_METHODの値と保証される精度の関係は以下の表の様になる. FLT_EVAL_METHODの値 float型が保証する精度 double型が保証する精度 0 float double 1 double dou…

objprelink2: Faster C++ program startups by improving runtime linking efficiency.

http://objprelink.sourceforge.net/ Objprelink is a code transformation tool that optimizes C++ shared libraries in order to reduce the runtime linking time.