via Tumblr for R&D of lucille renderer.

レイトレーシングによる、各種言語のコード量と速度の比較。

Ray tracer language comparison

非常に興味深いですね。OCaml速いですね(参照)。 OoOでF#に期待がかかっていたのもうなずける。 Global Illumination Rendererを使ったベンチマークだとどうなるかな。

posted by Png genki on Wed 12 Mar 2008 at 16:51

MUDA を使って非常に短いプログラムを書いてみました。

MUDAを使ってvecの足し算をしています。 HLSL/GLSLライクに幾何計算を記述できるのは楽でいいですね。

See Also

posted by Png genki on Wed 12 Mar 2008 at 00:31

MUDA を使う環境を構築すべく、coLinuxをインストールすることにしました。 その過程で役に立ったサイトのメモです。 またいつかcolinuxの環境構築をするときのために。

posted by Png genki on Tue 11 Mar 2008 at 00:13

実感としてそうだなと思うのだけれど、どうしてそうなんだろうか。 素朴な疑問が残った。

日本はヤバくても、東京はヤバくないかも

21世紀は都市の時代。都市を地方化するのは時代の逆行にしか思えない。

インターネットなどの情報通信技術が発展し、 地理的な制約は徐々に少なくなっていくにもかかわらず、 都市人口率はむしろ増加している。

graph

Figure 1 Percentage Change in Urban Population, 1950-2030. (from Urban Harvest: A Cgiar Global Program on Urban and Peri-Urban Agriculture)

通信技術のもつ、人間の面白いもの・楽しいものに集まろうとする性向を 助長する要素のほうが、 コミュニケーションを地理的な制約から解放する要素よりも 勝っているという事なんだろうか。 楽しいものや便利なものが飽和してくると、 逆に都市人口率が下がったりするのかな。

posted by Png genki on Mon 10 Mar 2008 at 19:19

まだ完全ではないですが、いくつかの点でOpenID認証の挙動を改善しました。

  • 必須パラメータがもらえないIdPに対して毎回パラメータの手入力を しなくても良くなった。
  • 一度アカウントとBindされたOpenIDを変更できるようにした。
    • login nameの衝突が発生した場合、パスワード認証を要求するようにした。

ある程度まとまった時点で、Open ID Authentication用の Railsプラグインを更新します。

不具合などに遭遇いたしましたら、ご連絡いただければ プラグインの改善に役立てさせていただきます。 よろしくお願いいたします。

posted by Png genki on Mon 10 Mar 2008 at 17:34

なんだかA要素の直後の空白が無くなってしまいますね。

Windows用Safariのバグかと思ったら、Macでも同じ挙動でした。 とりあえず、 以下のように無理やりA要素の後にテキストノードを詰め込むことで対処。

   1  var spacer = document.createTextNode(' ');
   2  element.parentNode.insertBefore(spacer, element.nextSibling);

posted by Png genki on Mon 10 Mar 2008 at 13:23

ちょっと必要になったので、 タグや空白を無視して、ある文字列の中から、 指定した文字列がマッチする範囲を計算するJavaScript を書いてみました。

   1  /* (C) Genki Takiuchi. New BSD License */
   2  var findSelection = function(html, sel){
   3    var chars = html.split(''), sels = sel.split('');
   4    var start = 0, end = 0, step = 0, tag = false;
   5    var cur = function(){return chars[end]};
   6    var parse = function(){
   7      switch(cur()){
   8      case '>': if(tag) tag = false; return go();
   9      case '<': if(!tag) tag = true; return go();
  10      case '\n': return go();
  11      case ' ': return go();
  12      case '\t': return go();
  13      default: return tag ? in_tag() : out_tag();
  14      }
  15    };
  16    var go = function(){return(chars[end++] ? parse:reject)()};
  17    var in_tag = function(){return go()};
  18    var out_tag = function(){
  19      return(cur() == go_sel() ? match:not_match)()
  20    };
  21    var not_match = function(){step = 0; return go()};
  22    var match = function(){
  23      if(step == 1) start = end;
  24      return(sels[step] ? go:accept)()
  25    };
  26    var accept = function(){return [start, end + 1]}
  27    var reject = function(){return [0, 0]};
  28    var go_sel = function(){
  29      var s = sels[step++];
  30      return white_space(s) ? go_sel() : s
  31    };
  32    var white_space = function(c){
  33      return c && c.match(/[\s\n]/)
  34    };
  35    return parse();
  36  };

使い方は、こんな感じ。

   1  >> findSelection('hello, <b>world</b>!', 'llo, world')
   2  [2, 15]

選択範囲を取得して、選択している領域をRangeを求めるために作りました。 selに指定した文字列にマッチする箇所が複数ある場合は、 最初にマッチした場所のRangeを返します。

posted by Png genki on Sun 9 Mar 2008 at 10:54

CG系の話題を書きやすいように、数式を書けるようにしました。 これでレンダリング方程式も想いのままです。


L_o(x,\vec{w}) = L_e(x, \vec{w}) +
\int_\Omega f_r(x,\vec{w}',\vec{w})
L_i(x,\vec{w}')(\vec{w}'\cdot\vec{n})d\vec{w}'

以下のように、latex形式で数式を記述します。

   1  [math]
   2  L_o(x,\vec{w}) = L_e(x, \vec{w}) +
   3  \int_\Omega f_r(x,\vec{w}',\vec{w})
   4  L_i(x,\vec{w}')(\vec{w}'\cdot\vec{n})d\vec{w}'
   5  [/math]

インライン形式で {}_{y=\frac{d}{dx}f(x)} のように記述することも出来ます。 その場合は、

   1  [math]y=\frac{d}{dx}f(x)[/math]

のように、改行せずに記述します。

posted by Png genki on Sat 8 Mar 2008 at 19:38 with 1 comment

autotestは、Railsアプリケーションのテストを自動化する、 非常に便利なユーティリティです。 昔はlib/以下のファイルの自動テストには対応していなかったのですが、 いつの間にか対応していたみたいです。

lib/foo.rbファイルをテストする場合、 test/unit/foo_test.rbにUnitテストとしてlib/foo.rb のテストを書けば良いようです。 そうしておくと、いずれか一方のファイルを編集したタイミングで、 自動的にテストを走らせてくれるようになります。

posted by Png genki on Sat 8 Mar 2008 at 16:19

Webサービスを作っているものにとっては、サーバの監視は重要なことです。 サーバが落ちていない事を絶えず確認していたいパラノイアのための XMPPによるサーバ監視方法を紹介します。

やることは単純で、サーバの動作を監視するデーモンスクリプトの中から、 問題が起こっていない場合に、XMPP経由でJabberクライアントに 「no problem」と、タイムスタンプつきで通知するだけです。

サーバ監視というと、たいていの場合、何か問題が起こった事を通知するように することが多いです。しかし、この方法では、何も起こっていないことを 定期的に通知させることで、サーバ監視プログラム自体に対する疑念 をはらう事が出来ます。

60秒に一回Gtalkにno problemであることを通知させるようにしています。 Twitterのお陰で、1分間に一度程度の通知はさほど気にならなくなったのと、 心配になったらLogを見ればどの時間まで「no problem」であるかを 確認できるので、便利です。

posted by Png genki on Sat 8 Mar 2008 at 15:50