bash 用コマンドラインオプションパーサ

bash で使えるコマンドラインオプションパーサとしては,組み込みの getopts とかコマンド getopt が代表的だが,もっと手軽に使えるのはないものか.ということで作ってみた.

メンバ関数の部分特殊化がしたい

C++ でメンバ関数を部分特殊化しようとすると(例えばテンプレートクラスのテンプレートメンバ関数を,ある特定の型について特殊化する),コンパイルエラーとなる.gcc なら "error: invalid use of incomplete type" だとか, "error: enclosing class tem…

パイプストリームクラス

gnuplot のようなプログラムには,パイプを使ってほかのプログラムからデータを送ることができる.std::cout などのストリームクラスのように,パイプストリームクラスを作成すると便利そうなので,実装してみた.

TiMidity++ を使って MIDI を MP3 に変換する bash スクリプト

TiMidity++ で WAVE ファイルを作って,lame で MP3 にエンコーディングするスクリプトを作ってみた.

IEEE の原稿の References に URL が入らないようにする

IEEE の論文を LaTeX で書くときに,bibtex のスタイルファイルとして IEEEtran.bst を使う.このスタイルファイルを使うと,bibtex のソースに url = {www.xxx.com/xxx.pdf} のような項目を書いている場合(ウェブに掲載されているURL),論文の References…

operator<<をオーバーロードして任意書式

シリアル通信のプログラムなどでは,多くの場合 unsigned char の配列にデータを保存する.このようなデータを16進数で標準出力に表示する場合, operator<< をオーバーロードすると便利だ.しかし,単純に unsigned char* に対してオーバーロードすると,オ…

Inkscape で eps をきれいに出力する方法

Inkscape という強力なオープンソースのベクタ図形描画ソフト (illustrator みたいなもの) がある. linux で使えるベクタドローソフトでは, Inkscape か OpenOffice.org あたりが代表的だと思うが,多分かっこいいイラスト(?)を書くのには Inkscape が一番…

正しい数式表現の探し方

論文やレポートなどで数式を書くとき,たまに正しい書式を忘れてしまうことがある. (例) 関数(iは整数,xは実数ベクトル)の,iがで与えられるような場合を表したい.もちろん, と書けるのだが,ちょっと見にくいので こんな感じの書式で書いてみよう(…

コンソールで動くシューティングゲームを作ってみた

眠かったから,ncurses ライブラリを使ってシューティングゲームを作ってみた.10年以上昔,N88-BASICで同じようなプログラムを作ってたのを思いだした.

inotifywait を使って,ファイルが作成されたらアクションを起こすスクリプトを書く

例えば,ディレクトリ /tmp/hoge に print.ps というファイルが作成されたら,それを自動的に印刷するようにしたい場合,ファイル作成イベントを監視する必要がある. inotifywait というコマンドを使えばそれが簡単にできるので,紹介する.

Debian を squeeze にアップグレードしたらネットワークにつながらなくなった

Debian を squeeze にアップグレードしたら,再起動後ネットにつながらないので ifup を実行すると, ~% sudo ifup eth0 Internet Systems Consortium DHCP Client V3.1.1 Copyright 2004-2008 Internet Systems Consortium. All rights reserved. For info,…

可変引数リストを使った任意長のベクトル初期化

C/C++ の可変引数リスト (variable argument list) をあまり使ったことがなかったので,練習も兼ねて,初期値付きで任意長のベクトルとかリストを生成できる関数を作る.例えば list<double> x= container_gen<list<double> >(5, -5.0,10.0,3.0,1.0,2.0) のような感じで,サイズ5</list<double></double>…

テンプレートクラスの「特殊化」と「明示的インスタンス生成」を同時に使う場合は注意が必要だ(2)

先日の記事で扱った問題の対処法について.結論:テンプレートクラスの(部分)特殊化を行う場合は,そのテンプレートクラスを宣言しているヘッダファイルで「(部分)特殊化の宣言」を行うこと.部分特殊化の実装は,通常のクラスまたはメンバ関数の実装と同様…

テンプレートクラスの「特殊化」と「明示的インスタンス生成」を同時に使う場合は注意が必要だ

テンプレート関数の明示的インスタンス生成で解説したように,テンプレートクラスとかテンプレート関数を明示的にインスタンス化しておくことで, ヘッダファイルの肥大化(コンパイル速度の低下) 望ましくない実装の公開 といった問題を避けられる.一方,…

名前空間 A と名前空間 B::A は共存できるか?

ちょっとした実験. namespace A {...} namespace B { namespace A {...} ... } のように,既に存在している名前空間 A と同じ識別子の名前空間を,別の名前空間 B の中に作ることはできるか? また,作られた場合どうやってアクセスするのか? を調べる.

スクリーンキャストツール

手軽に使えるスクリーンキャストツールが欲しかった.スクリーンキャストというのは,画面を数10フレームごとにキャプチャし,動画として保存すること(→ Wikipedia).これがあるとプレゼンとかで便利. recordMyDesktop というツールが,個人的にベストだ…

inline 関数を使用場所より後で定義してもいいか?

すぐ忘れるので,メモ. inline 関数は,先行宣言しておくことで,定義が使用場所より後にある場合でも問題なく使える.

テンプレートの部分特殊化を利用した const 除去型 〜boost のソースを読む〜

過去記事「テンプレートの部分特殊化を利用した間接参照型推定」では,テンプレートのテンプレートの部分特殊化 (Wikipedia)を使ってポインタ型やイテレータ型からそれを間接参照した型(ポインタを取った型)を推定する方法を紹介した.この方法を使って,…

liboctave のエラーハンドラを自分で定義して,デバッグを効率化

liboctave を使っていると,例えば要素数の異なる列ベクトルを足そうとしたときに fatal: operator +: nonconformant arguments (op1 len: 2, op2 len: 5) というエラーが発生し,プログラムが正常終了する.正常終了とは exit(1) による終了で, コアファイ…

lexit: デバッグを効率化する終了関数

C/C++ で,エラーを検出してプログラムを強制終了する場合, exit(EXIT_FAILURE) とか abort() を使う.このうち abort() はコアを吐いてから終了してくれるから(linux の場合),コアを gdb などで解析することにより,デバッグが楽になる.例えば gdb a.o…

マクロにしかできないこと 〜C++でマクロを使うべきな場面〜

C++では, #define で定数を定義するな, const TYPE によるグローバル変数(もしくは適当な名前空間に内包されたグローバル変数)を使え, #define でマクロ関数を定義するな,代わりに inline 関数を使え,みたいなことが言われる.これは確かにその通りだ…

構造体のインスタンスが const で修飾されているとき メンバに値を代入する方法 〜危険なコードと安全なコード〜

適当な構造体 TTest のインスタンスが const で修飾されているとき(const TTest x),そのメンバに値を代入したい,でもそのためだけにそのインスタンス(x)から const を外すのは嫌,という場合を考えよう.あるいは const メンバ関数(メンバ変数を変更し…

メモリの二重解放回避テク

メモリの二重解放とは, new などで確保したメモリ領域(ヒープ領域)を2回 delete などで解放することを言う. new と delete をきちんと対応させて書いていないときに起こる問題だ.特にクラスのメンバに動的確保したメモリへのポインタを含む場合にやって…

テンプレート関数の明示的インスタンス生成

通常,C++のテンプレート関数(orクラス)をライブラリ化するとき,それを利用するソースから,そのテンプレート関数の実装(定義)も含めてインクルードしなければならない.そうしないと,特定の型に対してテンプレート関数のインスタンスを生成できないから…

void func1(..) を void func2(..) から return できるか検証

戻り値が void 型である関数 func1 を,戻り値が void 型であるほかの関数 func2 において, return func1(..); のように返せるか実験してみた.

LaTeX の数式を PNG と SVG に変換するスクリプト

先日,LaTeX の数式を PNG と SVG に変換する方法についての記事を載せた.この方法を使いやすくスクリプト化してみた.

コンパイルするファイル間の依存性はできるだけ減らそう 〜liboctaveへん〜

liboctave 利用時のコンパイルを「遅い」と感じたことはないだろうか.ここでは liboctave におけるヘッダファイルの依存関係を把握することにより,コンパイルを高速化する方法を検討する.

テンプレートの部分特殊化を利用した間接参照型推定

C++の機能,テンプレートの部分特殊化 (Wikipedia)を使って,あるポインタ型orイテレータ型から,それを間接参照した(or逆参照した,orポインタをとっぱらった)型を推定する方法を紹介する.

bashで2次元配列モドキ

bash で2次元配列を扱いたいときがまれにある.が, bash には1次元配列しか無いし,配列の要素に配列を代入することもできない.そこで疑似的に2次元配列を使う方法を考えてみた.

仮想関数の継承とデフォルトパラメータの関係

デフォルトパラメータを持つ仮想関数を継承する場合の振る舞いを調べてみた.仮想関数は「動的に結合」される一方,デフォルトパラメータは「静的に結合」される.