LaTeX のコンパイルを, jbibtex のコンパイルも含めて(自動的に判断される),自動化するスクリプトを書いた.また,昨日の記事 作成時刻やバージョン情報を PDF にスタンプする を使って,バージョン情報,リビジョン情報,タイムスタンプなどをドラフトバージョンに付加できるようにした.
先日,LaTeX の数式を PNG と SVG に変換する方法についての記事を載せた.この方法を使いやすくスクリプト化してみた.
高価な動画編集ソフト(premiere とか)がなくても動画作れちゃうんだぜ!
プログラミングしていると,あるシンボル(変数名,関数名,クラス名,etc.)がどのオブジェクトファイル(or アーカイブファイル)や共有ライブラリで定義されているか,調べたいことがある(どのファイルをリンクすればいいかわからないときなど).通常はシンボル名でググればよろしい.だが,稀に,ググるのでは解決できないことがある.そのような場合の対処法として,無理矢理 /usr/lib や /lib にあるライブラリファイルを検索する方法を紹介する.
VMware のできはとてもよろしいので,新しいPCにインストールするのと同じ感覚で Debian をインストールすることができた.しかし,キーバインドの設定など,若干トラブったので,まとめる.
暗号化されたDVDをmplayerとかVLCで再生するとエラーが出る場合,libdvdread4, libdvdcss2 をインストールすると見られるようになる.
Debian で日本語 TeX 環境を構築するには,以下のような手順を踏めばよいようだ.
C++ で実装した関数を C から利用したい場合,あるいはその逆の場合がある.同じソースの中に両方のプログラムコードを書くことはできないが,それぞれのソースをコンパイルしてオブジェクトファイルを生成し,それらをリンクすることは可能だ.ただし C++ 特有の名前空間 (namespace) や関数オーバーロードに対処する必要がある.
眠かったから,ncurses ライブラリを使ってシューティングゲームを作ってみた.10年以上昔,N88-BASICで同じようなプログラムを作ってたのを思いだした.
クラスのメンバ関数をテンプレート関数として作成し,さらにそれを特殊化する場合,特殊化は,特殊化宣言も含めてクラス外で行わなければならないらしい.
template<typename T> function(const T&) のようなテンプレート関数があったとして,この実装を T が構造体の場合は変更したい(部分特殊化したい)とする.特定の構造体に対する特殊化なら話は簡単だが,本記事では汎用的な構造体に対する部分特殊化を扱う.この問題は,少々厄介だ.
Google Chrome がたまにすごく重くなる.ディスクアクセスが原因のようだ.そこでキャッシュ(消えても問題ないファイル群)~/.cache/google-chrome を RAMディスク /dev/shm 以下に移動したのだが,それでも改善されない.そこで,設定ファイル~/.config/google-chrome も RAMディスク 上に置くことにした.
# 追記@Sep.04,2010:スクリプト修正.
作成時刻やバージョン情報を PDF にスタンプするためのスクリプトを作った. LaTeX とか pdftk を使う.
It can be done by stopping the service ntp, and then running the command ntpdate with the remote server.
C++では, #define で定数を定義するな, const TYPE によるグローバル変数(もしくは適当な名前空間に内包されたグローバル変数)を使え, #define でマクロ関数を定義するな,代わりに inline 関数を使え,みたいなことが言われる.これは確かにその通りだ.
1項 #define ではなく, const と inline を使おう
Scott Meyers (スコット・メイヤーズ): Effective C++ (吉川訳, アスキー出版局, 1998)
に書いてあるように, プリプロセッサよりコンパイラに仕事させるべき だ.でもマクロにしかできないことも多々あるわけで.
メモリの二重解放とは, new などで確保したメモリ領域(ヒープ領域)を2回 delete などで解放することを言う. new と delete をきちんと対応させて書いていないときに起こる問題だ.特にクラスのメンバに動的確保したメモリへのポインタを含む場合にやってしまいがちである.ここでは二重解放によって発生する問題を解説する.
Debian で,NVIDIA のドライバを 190.53 → 195.36.15 にアップグレードしたら,
NVRM: API mismatch: ...
というエラーが出てXが起動しなくなった.環境は Debian squeeze/testing, GeForce 9800 GT.sudo update-initramfs -u を実行すると,解決した.