2014年11月24日月曜日

rootでmozcを動かす

rootでmozcが動かない事が判明したので、常時rootの情弱である筆者は無理やり動かすpatchを書いた。

https://github.com/otakuto/mozc-1.13.1651.102-asroot.patch

と言ってもgeteuid()とgetuid()を削除しただけの簡単なお仕事でした。
一応Gentoo用である。
そういえばvlcもrootでは動かなかったがバイナリエディタでなんとかなった記憶がある。

Usage:
mkdir -p /etc/portage/patches/app-i18n
cd /etc/portage/patches/app-i18n
git clone https://github.com/otakuto/mozc-1.13.1651.102-asroot.patch
mv mozc-1.13.1651.102-asroot.patch mozc-1.13.1651.102
emerge -av mozc

mozc-1.13.1651.102しか対応してないので~amd64しよう。

2014年9月3日水曜日

GentooでArduinoを使う

GentooでArduino IDEを落としてきて使おうと思ったら
avrdude:error while loading shared libraries: libusb-0.1.so.4: cannot open shared object file: No such file or directory
とか出てきてArduinoに書き込めなかったので
emerge avrdude
してやって
ln -s /usr/bin/avrdude arduino-1.0.5/hardware/tools/avrdude
ln -s /usr/bin/avrdude arduino-1.0.5/hardware/tools/avrdude64
でシンボリックリンク貼ってやったら動いた

2014年3月8日土曜日

C#でのreadonlyの罠

C#での定数はconst定数とreadonly定数の2種類がある。
const定数では参照型を代入することができないがreadonly定数ではできる。
またconst定数はリテラルとして扱われるが、readonly定数は普通の変数として扱われる。

readonly定数は完全にconstantな訳でなく、フィールドやプロパティの
書き換えは行えてしまう。

class A
{
    public int a;
    public int b
    {
        get;
        set;
    }
}

class B
{
    public static readonly A a = new A();
    public void test()
    {
        //コンパイルエラーにならない
        a.a = 3;
        a.b = 4;
    }
}
C++は比較的まともなconstオブジェクトを作れるので、その点ではC#より優れていると言える。

またreadonly定数は普通の変数として扱われる。そのためランタイムに初期化を行うので、readonly定数の初期化に初期化されていないreadonly定数を使うとバグが発生する。
class A
{
    //Cが初期化される前にBが初期化されてしまうためにBが3になる
    public static readonly int B = C + 3;
    public static readonly int C = 4;
}

C#erには常識かもしれないがC#初心者の私は引っかかってしまった。