programming

std::stringでprintfのような書式指定を行う方法 (C++11版)

C++11を使うと綺麗に実装できますまず format() というテンプレート関数を作ります.C++11で新しく導入された,可変引数テンプレート,および std::snprintf() を使います. #include <string> #include <cstdio> #include <vector> template <typename ... Args> std::string format(const std::string&</typename></vector></cstdio></string>…

c++でプログレス・バーを表示する方法

boost の boost/progress.hpp を使えばOK #include <boost/progress.hpp> #include <boost/date_time/posix_time/posix_time.hpp> #include <boost/thread/thread.hpp> int main(int argc,char *argv[]) { const unsigned long expected_count=100; boost::progress_display show_progress( expected_count ); for(int i=0; i</boost/thread/thread.hpp></boost/date_time/posix_time/posix_time.hpp></boost/progress.hpp>

switch文を使ってはいけない?

http://blog.tojiru.net/article/403698034.html の記事で、switch文の例として上げられてたコード '数字の0', '0' => …

svnのlogからchangelogを自動生成する方法

svnのcommit logからGNU形式のChangelogを生成する svn2cl というツールがあります http://arthurdejong.org/svn2cl/インストールは $ sudo apt-get install subversion-tools 使い方はsubversionでcheckoutした作業ディレクトリで svn2clを起動するだけ $ s…

最近のdoxygenはスゴイ

doxygen*1 と言えば、cやc++のソースコードからドキュメントを自動生成する便利なソフトウェアです。この doxygen、ここ1年ぐらいですごく改良されています。ちょうど昨日(2010/6/15)に最新版の 1.7.0 がリリースされたので、この機会に最新版に乗り換えて、…

super pi を作ろう

円周率πを100万桁まで計算するプログラムを作ってみました。super pi もどきです。ソースコードと解説を載せます。ソースコードは80行程度の非常に短いものですが、このような簡単な実装でも最近のPCなら100万桁の円周率が一分も掛らず計算できます。 ポイン…

任意精度計算ライブラリ(GMP)の使い方

プログラミング時に注意すべき点の一つに,計算精度の問題があります.たとえばC/C++だと,doubleで計算しても有効桁数は15桁程度(10進数で)しかありません.その結果,以下のような状況で間違った計算結果が出てしまいます. 取り扱う数値が15桁を越える場…

octaveでデータを解析する方法

実験やプログラムのデバッグをやっていると、データを解析したくなることがあります。たとえば、 数値の平均、分散の計算 相関係数の計算 ヒストグラムのプロット などなど。本エントリではこれらの処理を octave を使って行う方法についてまとめます。 octa…

gcc 4.4 を試してみた。

gccの次期バージョン gcc 4.4.0 がそろそろリリースされそうです*1。そこで開発版の gcc 4.4.0 を試してみました。 ベンチマーク gcc 4.4.0 のchangelog*2によると、gcc 4.4.0 の目玉の一つは 最適化処理の強化になるようです。そこで、手元のコードを、以下…

ruby で mp3 のタグを書き換える方法

bash と ruby を使って mp3のタグを一括変換した際のメモ。まずは、rubyのスクリプト #!/usr/bin/ruby require 'mp3info' require 'nkf' mp3 = Mp3Info.open(ARGV[0]) mp3.tag2.options[:encoding] = 0 title=ARGV[1] mp3.tag.title = NKF.nkf('--euc-input …

Linux で ActionScript3

Linux上で、actionscript3を使って Adobe Flash のコンテンツを開発する方法をまとめてみました。この方法を使えば、無料のツールのみで flash のゲームなどが作成できます。 開発用ソフトウェアの準備 Adobe FLEX 3.0 SDK のインストール http://www.adobe.…

c++のデバッグをするならgdb-6.8を使いましょう。

2008年の3月にリリースされたgdb-6.8の目玉機能の一つに「C++サポートの強化」があります*1。この機能を使うと、STLやboostのようなテンプレートを使ったコードのデバッグがかなり楽になります。C++使いの方は、是非gdbを6.8にupgradeしましょう。具体的に、…

GCC 4.3.0 リリース

ついにリリースされた模様 ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.3.0

gcc 4.3.0 rc1 登場

gcc 4.3.0 のリリース候補版 4.3.0-RC-20080222 が公開された.順調にいけば,春には正式リリースとなりそう.http://gcc.gnu.org/ml/gcc/2008-02/msg00511.html http://gcc.gnu.org/ml/gcc/2008-02/msg00389.html

linuxカーネルの実行保護機能

linuxカーネルの実行保護(ESP:Executable space protection)について調査したのでメモ.ESPとはOSのセキュリティを高めるための機能の一つ.ESPを使うとたとえば buffer overflow などによる exploit を未然に防ぐことができる.Linux での主な実装は vanill…

intel compiler v.s. gcc

intelコンパイラの最新版10.1が入手できたので,久しぶりにベンチマークを取ってみた.比較対象は intel compiler (ICC) version 10.1 20070913 gcc-4.2.2 gcc-4.3.0 (snapshots/20071020) これらのコンパイラで手元にあった数値計算のコードをビルドし,生…

配色テーブルの雛形

プログラムに埋め込む為の,色のテーブルの雛形です.ruby用 color_tbl = [ "A3A199", "5C788F", "F7D67D", "708270", "6E1273", "5CBACC", "00305C", "85360F", "00824A", "E8E3D9", "0057A6", "008A80", "BD3826", "613005", "997059", "F7D117", "F7A30A"…

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 が生…