November 8, 2006
輪講終わりました。気が抜けています。
映画を2本も見ました。最近邦画祭りですね。
November 10, 2006
C++のテンプレートを使ったプログラミング。
階乗計算は、実行時にループや再帰を使って求めるのが普通だと思いますが、コンパイル時に再帰式の展開が終わっているというのがこちら。
#include <iostream>
template<int N>
class Factorial {
public:
static const int value = N * Factorial<N-1>::value;
};
template<>
class Factorial<1> {
public:
static const int value = 1;
};
int main()
{
std::cout << Factorial<10>::value << std::endl;
return 0;
}
参考URL http://osl.iu.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html
このURLにあるコードそのままだと微妙にエラーがでる。あとenumを使わなくてもstatic constな定数で行ける気がする。好みの問題かもしれないけど。
こんなことやるぐらいなら、素直にschemeとか使った方がいいような気もする…。
November 15, 2006
Emacsでpsvnを使っていると、ssh越しでチェックアウトしているリポジトリの操作ができません。うちの環境だけという噂もあるけど。ssh-agentが効いてるプロセスから立ち上げたemacsだと問題ないんだけど、たまに忘れてしまうことがあるので、emacsを立ち上げたあとでもssh-agentを起動できたら便利、ということで作ってみました。
(unless (and (getenv "SSH_AUTH_SOCK") (getenv "SSH_AGENT_PID"))
(let ((result (split-string (shell-command-to-string "ssh-agent") ";\n"))
(key (read-passwd "Enter passphrase for /homes/tom/.ssh/id_dsa: ")))
(setenv "SSH_AUTH_SOCK" (caddr (split-string (car result) " ")))
(setenv "SSH_AGENT_PID" (caddr (split-string (cadr result) " ")))
(let* ((buf "*ssh-add*")
(ssh-add (start-process "ssh-add" buf "ssh-add")))
(set-process-filter ssh-add
(lambda (proc string)
(if (string-match "Bad" string)
(process-send-string proc
(concat (read-passwd "ReEnter passphrase for /homes/tom/.ssh/id_dsa: ") "\n"))
(if (string-match "Identity added" string ) (kill-buffer "*ssh-add*")))))
(accept-process-output ssh-add 5 0)
(process-send-string ssh-add (concat key "\n"))
(accept-process-output ssh-add 5 0)))
(add-hook 'kill-emacs-hook
(lambda () (shell-command "ssh-agent -k"))))
あんまり使えねぇか。
November 25, 2006
久々に部屋のそうじをしたらほこりが舞ったせいか,鼻の調子がおかしくなりました。ていうか,最近は部屋の掃除をするたびに大変。そろそろ鼻炎が簡単に治る薬とか出ないのかな。
だいぶ前に書いた,Rubyの勉強は区切りのいいとこまできたけど,練習になるようないいアプリ(題材)がない。ので今はせっせとFORTRAN。最古の言語だけど,随所にびっくりするような機能があってすごい。
