include するヘッダファイルが多くなればなるほど,コンパイルに掛かる時間が増加する.では,それぞれのヘッダファイルを include するコストはどれくらいなのか?
C++ では,クラスを継承しても friend 属性は継承されない.継承させたい場合,どうするか?
デフォルトパラメータを持つ仮想関数を継承する場合の振る舞いを調べてみた.仮想関数は「動的に結合」される一方,デフォルトパラメータは「静的に結合」される.
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> 型を生成し,それが [-5.0, 10.0, 3.0, 1.0, 2.0] の要素を持つようにする.
クラスや構造体のメンバ変数を初期化するには,コンストラクタに初期化リストを書かなければならない.が,宣言場所と離れてしまったり,同じ変数名を2度(宣言と初期化で)書く必要があって面倒くさかったりする.整数変数しか使えないが,メンバ変数を宣言位置で初期化できる方法を紹介する.
信じられない話だが,iPad (iPhone も) では,SSL で接続すると,動画が見られなくなる場合がある.例えば http://example.com/hoge.mp4 は見られるが,https://example.com/hoge.mp4 は見られない,など.
KDE4 で,日本語のフォントの句読点がずれて表示される問題があった.中国語用のフォントが原因のようなので,そのパッケージを削除してみたらなおった.
Before:
After:
Xtion PRO LIVE をLinuxマシン(Linux Mint 16, kernel ver. 3.11.0, x86_64)につなぐとカーネルパニックを起こして強制終了.原因を調べてみたら,どうやらUSB3用のコントローラxHCIに問題があるようで,BIOSでUSB3.0 Modeを"Disabled"に変更したら一応は解決した.
似たような話題は検索すればいくらでも見つかる.が,イマイチなのが多い(ような気がする).ここでは日本語とかも出力できる方法を解説する.かなり力技なので環境依存性が強いかも.
C/C++ で,エラーを検出してプログラムを強制終了する場合, exit(EXIT_FAILURE) とか abort() を使う.このうち abort() はコアを吐いてから終了してくれるから(linux の場合),コアを gdb などで解析することにより,デバッグが楽になる.例えば gdb a.out core として gdb を起動し, bt コマンドを使えば,バックトレースできる.しかし abort() による終了は穏便ではない.例えば, exit だとグローバルオブジェクトが破棄されるが, abort() だと破棄されない.そこで, success:正常終了, qfail:正常終了(エラーを返す), btfail:正常終了(バックトレースし,エラーを返す), abort:異常終了, df:デフォルト という4+1段階の終了オプションを選択できる終了関数 lexit を定義した.
ちなみにバックトレースとは,プログラムのスタックを表示すること.終了時点での関数から,呼び出しもとの関数を順に main までたどっていく.
linux で,リンク先のファイルが存在しないシンボリックリンクを一覧するスクリプト.
x, y をそれぞれ (0,49), (0,20) の範囲で繰り返したい場合は,2重に for ループを書けばよい.変数が x, y, z なら3重にforループを書く.NならN重ループ.このNが何らかの事情でコンパイル以前に決められない場合はどうしよう.
テンプレートクラスや関数を friend にする方法のメモ.危険性についても言及.
bash で2次元配列を扱いたいときがまれにある.が, bash には1次元配列しか無いし,配列の要素に配列を代入することもできない.そこで疑似的に2次元配列を使う方法を考えてみた.
Microsoft の kinect SDK をダウンロードしてくると,インストールは簡単だし,Visual Studio でサンプルプログラムを簡単にコンパイルして実行できる.しかし,コードはそれなりに煩雑で(と言っても1000行程度だが),自分でアプリを作る場合にどこから始めればいいか,今一つピンとこない.
そこで,GUIなどを一切使わず,単にkinectでスケルトン (skeleton) を計測してファイルに保存するだけ,という最小のプログラムを書いてみた.言語は C++.基本的には,このページの内容をそのまま流用している.
octave は Matlab には劣るかもしれないが,かなり多くのことができる.それらのうち, liboctave で実装されているものはもちろん C++ から利用できるのだが,そうでないもの,例えばスクリプトやDLDなどによって提供されているものについても, C++ から利用できる場合がある.そのための力技テクニックを紹介する.
いちいち Gnuplot を起動してグラフを描画するのが面倒なので,コマンドラインから使える Gnuplot のラッパスクリプトを書いた.変化するデータファイルをリアルタイムにプロットするスクリプトも組み込んだ.とても使いやすいので紹介する.
これまではてブを使っていたのだが,検索したブックマークの編集ができないなどの不満があったので,Google Bookmarks へ移行を始めた.Delicious 経由でdel.icio.us to Google Bookmarksを使う方法だとうまくいかなかったので,ブックマークを移行するスクリプトを書いた.
C/C++ で配列の各要素に名前をつける方法について.例えば,
unsigned char col[4];
として宣言された col の各要素を red, green, blue, alpha のような識別子でも参照できるようにする.
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, please visit http://www.isc.org/sw/dhcp/
SIOCSIFADDR: No such device eth0: ERROR while getting interface flags: No such device eth0: ERROR while getting interface flags: No such device Bind socket to interface: No such device Failed to bring up eth0.
というエラーが発生していた.