diffを取って,>で始まる行だけ抜き出して,その数を数えればいいのだろうか?
diff -bB FILE1.txt FILE2.txt | sed '/^[^>].*/d'
これで,> で始まる行だけ抜き出せるので,wc でカウントする.
すぐ忘れるので,メモ. inline 関数は,先行宣言しておくことで,定義が使用場所より後にある場合でも問題なく使える.
ODE (Open Dynamics Engine) で tri-mesh (三角形メッシュ) を使うとき,dGeomTriMeshDataCreate で確保したデータを,dGeomTriMeshDataDestroy で破棄するのを忘れてはならない.破棄しなければ,メモリリークの原因となる(特に,シミュレーションのリセットを何度も繰り返す場合).
という自戒.前にも似たような話を書いたのだが,懲りずにまたやった.
今回は,未初期化の変数と未発見のバグを含んだプログラムを使っていて,まったく関係のないコードを加えたタイミングで変数の初期値変動によってバグが顕在化した場合に,新しく加えたコードがバグの原因のように見えてしまって,デバッグに苦労する,という話.で,この手のトラブルを避けるには,変数を必ず初期化し,gccなら -Wshadow オプションを使おう,という内容.
C++で std::cout と std::ofstream のインスタンスに同じ内容を出力するとき,ほぼ同じコードを2回書かないとダメだ.
ofstream os ("tmp.dat");
dout(cout, os) << "x= " << x << endl;
こんな感じで,一文で書けるようにしたい.
HTML5 のvideo要素で使えたり使えなかったりするH.264だが,使えるにこしたことはないと思い,ffmpegでエンコーディングしようとしてみた.少しコツが必要なので,メモしておく.
Gmailの文字が小さくて見にくい(英文は特に).ズームすると,全体のバランスが崩れてださい.Chrome や Firefox 限定だと思われるが,Stylish という拡張機能(アドオン)をインストールすれば,メッセージだけ文字を大きくできる.
liboctave を使っていると,例えば要素数の異なる列ベクトルを足そうとしたときに
fatal: operator +: nonconformant arguments (op1 len: 2, op2 len: 5)
というエラーが発生し,プログラムが正常終了する.正常終了とは exit(1) による終了で,
- コアファイル (core) がダンプされないのでバックトレースできない
- このためどの関数が operator+ を呼び出してエラーを発生させたのかわからない
という問題があり,デバッグしにくい.そこで, liboctave のエラーハンドラを自分で定義して,エラーが発生したときの振舞いを自分で決められるようにしよう.
C++の機能,テンプレートの部分特殊化 (Wikipedia)を使って,あるポインタ型orイテレータ型から,それを間接参照した(or逆参照した,orポインタをとっぱらった)型を推定する方法を紹介する.
通常,C++のテンプレート関数(orクラス)をライブラリ化するとき,それを利用するソースから,そのテンプレート関数の実装(定義)も含めてインクルードしなければならない.そうしないと,特定の型に対してテンプレート関数のインスタンスを生成できないからだ.しかし,この仕様には
- ヘッダファイルの肥大化(コンパイル速度の低下)
- 望ましくない実装の公開
などの問題がある.これを回避するために,特定の型に対してテンプレートのインスタンスを明示的に生成する explicit instantiation という方法がある.
論文やレポートなどで数式を書くとき,たまに正しい書式を忘れてしまうことがある. (例) 関数 \((( f_i(x) \))) (iは整数,xは実数ベクトル)の,iが \((( i=\arg\max_{j}(q_{j}(x))\))) で与えられるような場合を表したい.もちろん,
\$$$ f_{\arg\max_{j}(q_{j}(x))}(x) \$$$と書けるのだが,ちょっと見にくいので
\$$$ f_i(x) \mid_{i=\arg\max_{j}(q_{j}(x))} \$$$こんな感じの書式で書いてみよう.あれ,これって正しかったっけ?
column コマンドと less を組み合わせれば,CSVなどのデータファイルはすごく見やすくなる. ソース:[http://stackoverflow.com/questions/1875305/command-line-csv-viewer:title]
column -s, -t < INPUT.csv | less -#2 -N -S
STL (standard template library) コンテナを include すると,それなりにコストが掛かる(参考).このコストは,場合によっては「前方宣言 (forward declaration)」によって大幅に軽減できる.STL コンテナの場合,前方宣言が少々ややこしいので,まとめておく.
リモートサーバにある Git リポジトリから HTTP (WebDAV) 経由で pull したり clone を作ったりする場合の注意点について,おぼえがき.
そんなスクリプトをわざわざ作らなくても,Settings -> Calendars -> CALENDAR -> Notifications -> Daily agenda にチェックを入れておけば,5am(実際は4:30am頃?)にメールで予定一覧を送ってくれる.が,フォーマットが気に入らない(携帯メールに転送すると文字数制限をオーバーする),好きなメールアドレスに送れない(G-mailのフィルタで転送すればいいが)といった問題があるので, Google Calendar API を使って,1日の予定を一覧するPHPスクリプトを作ってみた.
オプション -prune を -path などと組み合わせて使えばいいらしい.例えば build ディレクトリを無視しつつ CMakeLists.txt を検索するには,
find . -path './build' -prune -or -name CMakeLists.txt -print
と書く. -path './build' -prune -or のように書くのがポイント.最後の -print がないと,build ディレクトリも出力されてしまう.