某日記

(前期)

平成19年8月1日(水曜日)

査収物

それでも町は廻っている (3) / 石黒 正数

PRESENT FOR ME 石黒正数短編集 / 石黒 正数

今日

世界に“コンピュータ”は5つあれば足りる - 世界に妹は 12 人いれば足りる --- 2 人で充分ですよ。

小鳥たちが消えていく国、日本 - 小鳥は僕達の心の中に生きています。

首相続投、賛否半々 -

安倍ちゃんは選挙で「社会保険庁解体に賛成か反対か」問えばよかったんだよ。
なるほどね。民主に入れた人は、民主が社会保険庁の職員を間接的に支持基盤としていることを知っているんだろうか。だから民主は社会保険庁解体に対して歯切れが悪い。もちろん、解体すりゃあいいってもんではないが、この件に関して民主が言うことは何でもおためごかしだと疑ってみたほうがいい。

前回の選挙で「参議院の否決で衆議院を解散するのは間違い」とか言っていた人は、論理的一貫性という意味で、首相が続投することに文句は言えないと思う。もちろん、「参議院の否決で衆議院を解散するのは間違いではない」し、「首相が参院選の結果を受けて辞任するのは間違いではない」のだが、首相が参院選の結果とは関係なく続投するのも間違いではない。

世の中には「民意が首相を不信任としたのは明白」と息巻いている人々がいるけれど、本当にそうだろうか。

確かに、前の選挙は前の首相の時に行われたものではあるが、あの時小泉前首相はきっぱりと一年後に辞めると明言していて、あの選挙が未来の自民党総裁への信任不信任をも問うていたのは明確だと思う。前首相はその約束をちゃんと守ったし、今の安倍政権は小泉路線を引き継いでいる。前回の選挙の結果だって民意だ。

まあいずれにしても、今回の状況というのは議会制民主主義というものの二つの側面がちゃんと表れていると思う。つまり、議会というワンクッションを置くことによって、政治が民意で右往左往するのを防ぐ、ということと、いざというときは民意が非常ブレーキをかけられるということだ。両方ともちゃんと働いているので、日本の民主主義システムは、素朴な平和主義的観点(つまりサヨクさんたちが好きそうな考え方)からはとりあえず安心して良いと思う。

ちなみに、衆院と参院との議員の和をとると、未だに自民党が 53.9% を占めている。もっとも、両院の比率(63.7% vs 34.3%)を足して二で割ると 49% になる。おそらく連立与党としてはまだ 50% 超えているだろう。

読解力のないアホが勘違いするといけないから書いておくけれど、参院で自民が大敗したということが民意の反映ではないと言うつもりはない。ここで問題としてるのは不信任と断言するレトリックなので念のため。

私は前の選挙の時、自民党には入れていない。どうもやっぱり新自由主義的な方法論は好きではないのだ。でも、自民が大勝した時、ああいう一里塚みたいな選挙で一度そういう方針に決まったんだから、しばらくは一貫性をもって政治を運用してもらった方がいいと、そういう風に肚をくくったわけです。なので今回は自民に一票入れた。どうも多くの人々はそうではなかったらしいが。

にしても、やっぱり日本というのは「反省を促す文化」ではなくて「吊し上げる文化」なんだなあというのを実感した。他国のことは知らん。米国も案外そういう感じのような気もするけど、気のせいかもしれない。

平成19年8月2日(木曜日)

昨日

あたくしにとって SEGA のゲームミュージックといえばカルテットであり SDI なわけですが(でも SDI & QUARTET は買ってない薄情な奴)、その中でも SEGA の GM 史に残る重要な曲は RAP (これは初出 CD における名前で、本当は OKI RAP という --- サンプリング ROM が沖電気製だからだとかなんだとか)だと思うのであります。これが 10 年後に DAYTONA USA のテーマへと発展したと言っても言い過ぎではあるまい。

そうは言っても、さすがに初出 CD の音質は普段聞くにはさみしいので、MAME に手を入れて、YM2151 8ch と uPD7751 1ch をパラで取り出して、リマスタリングしたバージョンを作ってみたりして。

原音至上主義者はたぶん MAME って時点で嫌な顔をしそうだけれども、私はそういうこだわりはないし、エフェクタかけまくってるから元の音の細部の違いなんてあまり関係ない。一番大きいのはベースにフランジャーとオーバードライブをかけているところ。これはナルチョ氏が本物のベースでよくやる奴だ。

しかし MAME でパラアウトするという手法は割と使えるような気がする。いろいろ手間はかかるけど。Windows 版 MAME に ReWire のフックを入れると楽になるかもしれないが、ReWire は仕様見るのにライセンスが必要なんだよな確か。個人にライセンスしてなかったような気がするし。

ところでこの曲って、イントロのベースが 16 分音符一個走ってるのはミスなのかしらん。あと、3 回くらいループすると主旋律のディレイチャンネルのズレが目立つな。

今日

朝青龍、2場所出場停止の処分 日本相撲協会 - この件は、日本人の良識を疑われかねない話だと思う。

あまり目立って報道されてないんだが、朝青龍はモンゴル政府から外務省経由で依頼されて、あの試合に出場している。だから、朝青龍に一番大きな問題があったとすれば、それを日本相撲協会に連絡して判断を仰ぐという筋を通せなかったというところだけなんだな。それはそれで、もちろん朝青龍の落度だが、そういう話を「巡業をサボってサッカーに興じた」と報じるのは悪意があると言わざるを得ない。

私は、この措置や、一連の報道に対しては、単に日本相撲協会の巡業部のメンツが潰されたことに対する報復なんだろうな、と、そういう風に見ている。日本相撲協会と主要メディアが蜜月なのは、横審の面子を見ても明らかだろう。

8月2日〜当面の運行状況のお知らせ - 少なくとも八月末までは復旧しない模様。これで自動的に夏の旅程も確定。

平成19年8月3日(金曜日)

昨日

寝ようと思ったら大型の蜂が到来。ピレスロイドの絶大なる効果を確認。キンチョールを噴霧して二三秒後にはもうフラフラと落下。

キンチョールの駆除対象には蜂は入っていないのだが、これは薬剤が効かないということではなくて、薬剤がそれほど飛ばないので、注意して近付く必要があって危ないからだと思う。蜂専用のキンチョールは強力噴射なので遠くから狙える。でも、普通そんなの常備してないし、部屋の中で使うのはためらわれる。

プロパティを C++ で実現する

C# なんかにはプロパティという仕組みがあって、構造体メンバに対する読み書きの構文をフックして、これを関数呼び出しにできる。ruby で同様のことをやるなら

class Hoge
  def hoge= (val)
    print "hoge setter called (", val, ")\n"
    @hoge = val
  end
end
などとすると、
hoge = Hoge.new
hoge.hoge = 42
みたいに書ける。

同じことを C++ でやることを考えてみる。

厳密には違うけれど、良く使われる方法はこんなの:

struct Hoge
{
        int m_hoge;
        struct HogeProxy
        {
                Hoge &m_hoge;
                HogeProxy &operator = (int val)
                {
                        std::cout << "hoge setter called (" << val << ")"
                                  << std::endl;
                        m_hoge.m_hoge = val;
                        return *this;
                }
                HogeProxy(Hoge &hoge) : m_hoge(hoge) { }
        };
        HogeProxy hoge() { return *this; }
};
これはこういう感じで使える:
Hoge hoge;
hoge.hoge() = 42;
括弧が邪魔。なお、この HogeProxy というクラスのテンポラリオブジェクトのことを気にする人がいるかもしれないが、最近のコンパイラならば、これは最適化で消えてしまうので気にする必要はない。

力業で括弧を外すなら、こんな感じ:

struct Hoge
{
        int m_hoge;
        struct HogeProxy
        {
        private:
                HogeProxy(const HogeProxy &);
                void operator = (const HogeProxy &);
        public:
                Hoge &m_hoge;
                HogeProxy &operator = (int val)
                {
                        std::cout << "hoge setter called (" << val << ")"
                                  << std::endl;
                        m_hoge.m_hoge = val;
                        return *this;
                }
                operator int ()
                {
                        return m_hoge.m_hoge;
                }
                HogeProxy(Hoge &hoge) : m_hoge(hoge) { }
        };
        HogeProxy hoge;
        Hoge() : hoge(*this) { }
};
これはこう使える:
Hoge hoge;
hoge.hoge = 42;

一見この方法は良いように見えるけれども、実際には一つだけ困ったことがある。HogeProxy は親クラスの参照を持っているので、Hoge はポインタ一つ分余計に大きくなってしまう。

offsetof を使って無理矢理参照をなくすという方法を考える人もいるかもしれないが、結論から言えばこれは無意味。まず、Hoge が POD で無い限り移植性がない。しかしそれ以上に問題なのは、C++ の仕様上、サイズが 0 のクラスというのは作れないという点で、やっぱり hoge をデータメンバとする方法では Hoge のサイズが増えてしまう。

別の方法としては、関係するデータを HogeProxy の中に移してしまうという方法がある。上の例ならば Hoge の m_hoge メンバを HogeProxy の中に移すのは自然なことだろう。しかし、常にこういう方法が使えるとは限らないし、コードに統一感が無い。

このあたりは余計な括弧とのトレードオフになる。普段は、括弧のことは目をつぶって前者のスタイルのアクセサを用意しておくべきだろう。とはいえ、後者の方法は緊急避難的に使うことは可能なので、覚えておいても良いと思う。

(以下、仕様書見たら、メンバ関数へのポインタはテンプレートパラメータにできることがわかったので書きなおした)

さて、前者のようなフックをかけたいときにいちいちクラスを書いていたら鬱陶しいので、こういうようなクラスを作っておくといいかもしれない:

template <class T_, class V_, void (T_::*F_)(V_)>
class SetProxy
{
        T_ &m_client;
public:
        SetProxy(T_ &client) : m_client(client) { }
        SetProxy &operator = (V_ val)
        {
                (m_client.*F_)(val);
        }
};
これはこう使う:
struct Hoge
{
        int m_hoge;
        void set_hoge(int val)
        {
                std::cout << "hoge setter called (" << val << ")" << std::endl;
                m_hoge = val;
        }
        SetProxy<Hoge, int, &Hoge::set_hoge>
        hoge()
        {
                return *this;
        }
};
しかし残念なことに、GCC では set_hoge をインライン展開してくれなくなってしまう。とはいえ、これはコンパイラによるのだろう。

スタティックメンバ関数を使って次のように書く方法もある:


これなら GCC でもインライン展開してくれる。 

メンバ関数のポインタうんぬんという話だけれども、たとえば次のようなコード:


これを g++ -fno-exceptions -O -S でコンパイルすると、次のような出力が得られる: 
        .file   "a.cc"
        .text
        .align 2
.globl main
        .type   main, @function
main:
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
        subl    $20, %esp
        movl    $_ZN1A3barEv, %edx   // (1)
        testb   $1, %dl              // (2)
        je      .L4                  // (3)
        movl    -5(%ebp), %eax
        movl    -1(%edx,%eax), %edx
.L4:
        subl    $12, %esp
        leal    -5(%ebp), %eax
        pushl   %eax
        call    *%edx                // (4)
        movl    $0, %eax
        movl    -4(%ebp), %ecx
        leave
        leal    -4(%ecx), %esp
        ret
        .size   main, .-main
        .section        .text._ZN1A3barEv,"axG",@progbits,_ZN1A3barEv,comdat
        .align 2
        .weak   _ZN1A3barEv
        .type   _ZN1A3barEv, @function
_ZN1A3barEv:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $20, %esp
        pushl   $42
        call    foo
        addl    $16, %esp
        leave
        ret
        .size   _ZN1A3barEv, .-_ZN1A3barEv
        .ident  "GCC: (GNU) 4.1.2 20070110 prerelease (NetBSD nb1 20070603)"
(1)で関数へのポインタを即値代入しているが、関数は 4 バイトアラインメントされているから、(2)は常に Z フラグを 1 にする。よって(3)は常にジャンプするはずで、(4)の call では常に _ZN1A3barEv が呼ばれる。理論的にはインライン化も可能なはずなので、ここはいろんな意味で最適化が足りていないと思う。

にしても、C++ の記述量の多さは何とかならんのだろうか。単なるアクセサにしても

class A
{
        int m_hoge;
public:
        int &hoge() { return m_hoge; }
        int hoge() const { return m_hoge; }
};
と書かねばならんのは業腹なことだと思う。

Web2.0の条件

(1)リリースエンジニアリングの考え方が無い。思い立った吉日や毎月 29 日とかにリリースする。

(2)リリースするたびに、はまちちゃんに穴をつつかれるクオリティ。

(3)俺が見向きもしない。

(2) に関連して、Web2.0 というのは野良デバッガーへのフリーライドではないかという説が浮上。

平成19年8月6日(月曜日)

昨日

1900 起床 2300 就寝

今日

六時前に起きたので、さっさと出かけてドトールでマターリ→神保町でマターリ→秋葉でぐたーり。

神保町で昼休みが終わる時間帯を見計らって JTB でバス乗車券とか手に入れてくる。通信費取られたが、車内で精算するよかなんぼか良い。

秋葉は死ぬかと思うほど暑かった。おかげで「小型液晶ディスプレイ」が「こなた液晶ディスプレイ」に聞こえて来たりした。らきすた脳の恐怖。画面からはみ出す程の大きさで≡ω≡.が表示されてるに違いない。

この空耳は、小型と付く物にはすべて適用可能なのである。こなた=小型でだいたいあってる。こなた発信器など。ちなみにつかさ発信器はダイポールアンテナからバルサミコ酢の波動がでていて、かがみ発信器は二素子アレイアンテナからツン波とデレ波が 90 度の偏波で出ている。こなた発信器はオプションのヘリカルアンテナ(中に植物性の茶色い誘電体油が入っている)を口に装備することによって毒電波を発する。

なんてアホなことを考えつつ、Radeon 9600 の中古とか買ってきた。後で試したら安い割に MoE には充分だった。というか私はビデオカードに一万円を出したことがないケチンボ。そろそろ電源とか回転物を取り替えないといけないんだが、MicroATX は寸法がバラバラなので保留。

そういえば、本当に秋葉ってメイドが歩いてるんだね。暑いのに黒ずくめでご苦労さんでごんす。

夜。らきすた。最初のころ、かがみは俺の嫁いわゆる隠れオタクの範疇に入る気がすると思っていた。私くらいの世代だと、そもそもライトノベル読んでる時点で充分オタクってことになるんだけれども(スレイヤーズとかその辺の世代)、今の高校生ではどうなのかよくわかんないのでそこの判断は保留するとしても、こなたのオタクネタ(ToHeart 制服とか)に心の声でツッコミを入れるのは隠れオタの証拠だ。

しかし、前回今回のかがみは隠れてないどころか、オタクの典型的な悪徳の一つをやらかしている。あれは良くない。

査収物

To LOVEる-とらぶる(5) / 矢吹 健太朗, 長谷見 紗貴

山椒魚戦争 / カレル チャペック, 栗栖 継 - 目に止まったので思わず買ってしまった。あらすじは有名なのでいうまでもない。この山椒魚は日本人がモデルではないかという説があるので覚えておこう。