Debian を lenny から squeeze にアップグレード後, apt-cache でパッケージを探すたびに Abort するようになった. apt-get clean でローカルのリポジトリをクリアすれば解決した.
シリアル通信のプログラムなどでは,多くの場合 unsigned char の配列にデータを保存する.このようなデータを16進数で標準出力に表示する場合, operator<< をオーバーロードすると便利だ.しかし,単純に unsigned char* に対してオーバーロードすると,オリジナルの (iostream で宣言されているのと) コンフリクトする.以下では,既にある operator<< と整合性を取りつつ,任意に書式設定する方法について解説する.
適当な構造体 TTest のインスタンスが const で修飾されているとき(const TTest x),そのメンバに値を代入したい,でもそのためだけにそのインスタンス(x)から const を外すのは嫌,という場合を考えよう.あるいは const メンバ関数(メンバ変数を変更しないメンバ関数)で,テンポラリなメンバ変数を変更したい,でもそのメンバ関数を非 const にするのは嫌,という場合でもいい.結論から言えば, mutable を使うと解決できる.
echo '-E' とすると,'-E' が echo のオプション(エスケープ文字を解釈しない)として解釈され,echo できない.変数に代入したりしても同じ.しかたないので,C++ で引数を直接出力するプログラムを書いた.
(追記@Oct.14,2009)printf -- '-E' とするのがスマートな解決策のようです(コメント参照).id:atottoサンクス.
Inkscape という強力なオープンソースのベクタ図形描画ソフト (illustrator みたいなもの) がある. linux で使えるベクタドローソフトでは, Inkscape か OpenOffice.org あたりが代表的だと思うが,多分かっこいいイラスト(?)を書くのには Inkscape が一番だと(個人的には)思う.
Inkscape で書いたイラストを latex に貼るとき(論文執筆などで),eps に変換する必要があるが,ぼかしなどを含む場合は,ちょっとしたテクニックが必要になったりするので,紹介.
戻り値が void 型である関数 func1 を,戻り値が void 型であるほかの関数 func2 において,
return func1(..);
のように返せるか実験してみた.
ちょっとした実験.
namespace A {...}
namespace B { namespace A {...} ... }
のように,既に存在している名前空間 A と同じ識別子の名前空間を,別の名前空間 B の中に作ることはできるか? また,作られた場合どうやってアクセスするのか? を調べる.
テンプレート関数の明示的インスタンス生成で解説したように,テンプレートクラスとかテンプレート関数を明示的にインスタンス化しておくことで, インスタンス化しておくことで,
- ヘッダファイルの肥大化(コンパイル速度の低下)
- 望ましくない実装の公開
といった問題を避けられる.一方,テンプレートクラスやテンプレート関数で,ある型についてのみ特殊な実装を行う,「テンプレートの特殊化」という技術がある(過去の記事で何度か使っている).本記事では,インスタンス化と特殊化を同時に使うと,思わぬ落し穴にはまることを,サンプルを交えながら解説する.
論文に掲載するグラフを gnuplot で作るとき,SVG (Scalable Vector Format) で出力して Inkscape などで編集すると便利だ.だが,マーカ(×など)の線の太さを Inkscape で変更できなかったので,直接 SVG (XML) ファイルを編集してマーカの線の太さを変更する方法をメモ.
...が,簡単にはできないらしい.今やりたいことを整理すると: (1) ある bash スクリプト hoge.sh では何か環境変数が定義される,(2) シェル (tcsh) で hoge.sh を実行して,hoge.sh の中で定義される環境変数をシェルで使いたい,(3) hoge.sh は変更しない.
使ってるシェルが bash なら,以下で解決.
. hoge.sh
tcsh だから話がややこしくなってる.子プロセス (hoge.sh) で定義された環境変数を無理やり tcsh で使う方法を考えた.
iomanip の setw(5) みたいなノリで,出力する文字に色をつける方法を考える.
cout<<ioscc::green<<"GREEN"<<endl;
のようにすれば,緑色で GREEN が表示されるようにしたい. std::endl で色がリセットされる.
bash で使えるコマンドラインオプションパーサとしては,組み込みの getopts とかコマンド getopt が代表的だが,もっと手軽に使えるのはないものか.ということで作ってみた.
コマンドラインで,例えば pwd などで出力させた文字列をクリップボードにコピーする方法は,
epsffit というコマンドを使えば,eps を回転できる.epsffit は少々使い勝手が悪いので,使いやすくするスクリプトを書いてみた.
STL (標準テンプレートライブラリ) の std::vector とか liboctave の ColumnVector,あるいは普通の配列に対して共通に使えるテンプレート関数の作り方を説明する.
Gnuplot (4.2.4) は,ライセンスの関係がどうとかで readline がデフォルトでは使えない.このためコマンドプロンプト上でファイルを Tab キーとかで補完できないので不便だ.そこで自分でコンパイルする.
TiMidity++ で WAVE ファイルを作って,lame で MP3 にエンコーディングするスクリプトを作ってみた.
イ○ストレータなんて高いものは使わねぇ!というポリシーの人が使ってるInkscape.Linuxでもベクタ図形が描けて便利だし,数式のベクタ図形も,この方法を使えば簡単にSVGとして取得できる.
Inkscapeで描いたベクタ図形を,ベクタとしてパワポなどのOfficeソフトに貼り付ける方法を見つけた.単に「形式を選択して貼り付け」から「図(拡張メタファイル)」を選ぶだけ.
透過データやグラデーションはうまく行かなかったりするが,それなりに使える.
C++には関数のオーバーロードがあるから,Cの cosf みたいに型ごとに関数を区別して書く必要が無い. cos(x) と書けば, x の型を自動で判別してくれるということだ.が,落し穴が.