Heaven's Kitchen

○ 認識の諸相やった

輪講終わりました。気が抜けています。

映画を2本も見ました。最近邦画祭りですね。

○ テンプレートメタプログラ厶

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とか使った方がいいような気もする…。

○ ssh-agent

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"))))

あんまり使えねぇか。

○ 手が

久々に部屋のそうじをしたらほこりが舞ったせいか,鼻の調子がおかしくなりました。ていうか,最近は部屋の掃除をするたびに大変。そろそろ鼻炎が簡単に治る薬とか出ないのかな。

だいぶ前に書いた,Rubyの勉強は区切りのいいとこまできたけど,練習になるようないいアプリ(題材)がない。ので今はせっせとFORTRAN。最古の言語だけど,随所にびっくりするような機能があってすごい。

○ やる気でなさすぎ

PS3でLinux

PS3では,Linuxも動くらしい。Cellのプログラミング,おもしろそう。とかいいつつマルチスレッドプログラミングもまともなのを書いたことがないので,そっちが先かな。

Valid XHTML 1.0! Valid CSS!