Monthly Archives: 3月 2010

2010-03-31

Meadow3から日本語lgrepできた(Cygwin 1.7.2)

とりあえず .emacs に (setenv "LANG" "ja_JP.CP932") を入れたらlgrep.exeで日本語を検索できた。やっぱり何も指定していないとLANGはUTF-8になるっぽい。UTF-8のままでも、Meadow側の各種coding-systemをutf-8にして、lgrepがUTF-8でコマンドラインを受け取るようにすれば(grep-commandをlgrep -Ku8にすれば)同じように検索できた。でも、UTF-8だと他の部分(例えばcvsとか)で困りそうなので、当面はCP932で。

2010-03-31

Meadow3から日本語でgrepできない

あれ、検索できたと思ったら日本語だとうまく検索できなかった。なんでだろう……。

-*- mode: grep; default-directory: "~/work/vs9/sas5/sas5lib/" -*-
Grep started at Wed Mar 31 22:27:11

lgrep -n -As ほげ *.h NUL
/usr/bin/sh: $'lgrep -n -As 343201273343201222 *.h NUL': command not found

自宅のXpマシンでもCygwin1.7にしたらこうなった。デフォルトがUTF-8になったとかそういうのが関係しているのかな。

2010-03-31

Meadow3からgrepできない?

職場の新環境にlgrep.exe(lv.exe)を入れてM-x grepしたらSTATUS_ACCESS_VIOLATIONと言われて困った。

lgrep -n -As hoge *.el NUL
NUL: No such file or directory
      1 [main] lgrep 4732 exception::handle: Exception: STATUS_ACCESS_VIOLATION
    941 [main] lgrep 4732 open_stackdumpfile: Dumping stack trace to lgrep.exe.stackdump

(setq grep-use-null-device nil)を指定したら直った。末尾のNULは前々から気にはなっていたんだよね。何でいきなり動かなくなったんだろう。

2010-03-30

Cygwin1.7

1.7系は初めて。プロジェクト中はアップデートしたくなかったので。

mountの仕方が変わって戸惑った。/etc/fstabをいじればいいっぽい。

それ以外は特に問題はなかった。

2010-03-26

浮動小数点数0との乗算の最適化

つい 0*n が 0 に最適化されそうな気がしてしまうけど、されるわけは無いよね。0*NaNはNaN何だし。な、NaNだってー!

うーん、仕方ないなぁ、(C ? C*n : 0)とかなら大丈夫かなぁ。いや、おとなしく個別の関数を用意すべきか……。

結局以下のようなクラステンプレートを作って回避した。

template<int C> struct OptimizedFloatMul { static float mul(float n) { return n * C;}};
template<> struct OptimizedFloatMul<1> { static float mul(float n) { return n;}};
template<> struct OptimizedFloatMul<0> { static float mul(float n) { return 0;}};
template<> struct OptimizedFloatMul<-1> { static float mul(float n) { return -n;}};


template<int PLANE_X, int PLANE_Y, int PLANE_Z, int PLANE_W>
struct HomogeneousClipFuncs
{
    static ElementType dotByPlane(const VectorType &p)
    {
    return OptimizedFloatMul<PLANE_X>::mul(p.x)
        + OptimizedFloatMul<PLANE_Y>::mul(p.y)
        + OptimizedFloatMul<PLANE_Z>::mul(p.z)
        + OptimizedFloatMul<PLANE_W>::mul(p.w);
    }

    struct IsInside
    {
    bool operator()(const PointType &p) const{
        return dotByPlane(VectorType(p)) >= ElementType(0);
    }
    };
...