04_03_01


夜は早く寝て、朝早く起きるようにしよう… でないと夜いつまでも起きてしまう。

Emacs起動しようとするとfetal error。

キャッシュが無くなったのか、 しばらくほっといたらEmacs起動するようになった。 やっぱglibcとカーネルはコンパイル一緒にしないといけないか?

アレだ。アレ。POP辞書は十分使い易いのでもういいと思った。 やる気が無くなってしまった。あいかわらずやる気が持続しない。


wo:
glibcのコンパイル1時間もかからない…前は6時間くらいかかったのに。

04_03_04


ジャコウ撃破時3600万。絶好調だったころのスコアに戻ってきた。 と、いうか、今のパターンは昔のパターンより良くなってると思うんだけど、 なぜかスコアは伸びない。まあ、stage2クリア時670万というのはちょっとアレだけど。 あと、アリス1ミスとジャコウ4ミスってありえない。

指輪物語を読み終えた。映画の三部ではメリーとピピンがどういう扱いを受けるのかっていうのは 気になるところ。映画見たいなぁ…

04_03_08


色々、寝たりゲームしたり。要するに何もしていない。

面倒じゃないような日記ツールを書いてみるけど、今と特に変わらないような気がして放棄。 XHTMLにしようかと思ったけど、昔の分が<img>とか<br>とか大量に使ってて面倒。 置換すればいいというのは違う。本当にやる気が無い時は置換するのも面倒なのだ。

--

あまりに暇なので、まあ、色々。紙飛行機みたいなのが飛んでると思って。

明日には弾が出るか、出ないか。自機が存在する2D上の座標と自機の3Dの座標を変換した後の2Dの座標が 同じになる方法が見つかったり思い付いたりしたら、まあ、弾も出る。2Dの座標を浮動小数にして、それを 透視行列で変換した後のものを描画したらいいんだろうか。どっちにしても透視行列の作り方がわからん。まあ、やる気があれば。

04_03_09


四を描いてみるんだけど、最近は全然駄目だ。方向を変えていくか? とか言っても、別の方向とか全然思い付かないので、どうしようもない。

--

梅田から難波まで歩いたら1時間ということがわかった。

それから、昨日のはなんとかなった。gluPerspectiveを使うと話がややこしくなる。

04_03_15


北海道から帰ってきた。おとといの話だけど。と、いうわけで、今日から「J from 白雪の世界北海道」編でお送り致します。

--

かなり久しいような気がする。

--

気になること その1(最終回)。

運転教習所の教官とか葬式屋の従業員とかで働く動機。

--

日本橋まで行った。昨日の話だけど。

買うべきものはふたつ。USBなFDDと一太郎だ。

まず、昔の環境が外の世界と繋がる手段はFDかPCMCIAしか存在しない。 しかし、今の環境はFDDが存在しない。それで、昔の環境から移せていないファイルが結構存在するわけで、 なんとかしようと思って、手っ取り早く今の環境で使えるUSBのFDDを買おうと思ったわけだ。 前のPCにLANカード挿して、直接LAN繋いでFTPかNFSで送るのもあるけど、設定が面倒だ。 FD使えば何も設定しなくていい。

しかし、なんたることか。USBなFDDは高い。安くて2980円。USBなカードリーダ(CFとかの)は安いのは1000円しないのに、 FDDは3000円もする。何故だ。

で、結局FDDは買わなかった。昔の環境にLANカード挿して、LAN直繋ぎで送るしかないのか。あああ。

で、一太郎だ。なんとなく、Wordよりも一太郎のほうが使ってみたくなったのだ。 反MSとかではなくて、メジャーなほうを避けたがる天邪鬼といった感じかもしれない。 あと、ATOKが使えるようになるので少々お得な感じがする。

で、別に急ぎで必要というわけではないんだけど、 学生価格で買えるうちに買っておこう、というわけだ。

でも、よく考えたら、今の環境って僕以外使わないから、 ATOK使わなくてもSKKIME使えばいいような気がしてきて(家族と使ってるPCでSKKIMEを使うと色々罵られたりする)、 急に買う気が失せて結局これも買わなかった、というどうでもいいはなし。


wo:
そういえばグラディウスVのデモを見たような気がする プレイはしなかったけど

04_03_16


僕がウィルス作るとしたらHDD初期化じゃなくて IEの履歴流すやつ作るね、絶対。とか思ってたんだけど、 デスクトップのスクリーンショットというのは考えなかったなぁ… まあ、それより、Winny使ってるのがバレるっていうのの方がダメージ大きいか…

Xeonは「ジーオン」って読むらしい。from IBM

--

niceっていう言語がナイスな言語らしい。(from w.l.o.g.)

多相型っぽいのが実装されてていい感じだ。(TutorialのParametric classesのとこ。) ただ、どっちかっていうとC++のテンプレートに近い感じだろうか。実装がどうなってるかわからんけど。

多相型があると色々便利だと思うんだけど、関数型言語以外では見ないような気がする。 て、いうわけで、Cライク言語で多相型について妄想してみる。

// 'a型で宣言された引数は使う時に同じ型じゃないといけない。
void qsort<'a>( 'a base, size_t nmemb, size_t size, int (*cmp_fn)('a,'a) );

int int_cmp( int, int );
int int_cmp_doubt( char*, char* );

int values[N]

int func()
{
	qsort<int>( values, N, sizeof(int), int_cmp ); // 正しい
	qsort<int>( values, N, sizeof(int), int_cmp_doubt ); // error!! int_cmp_doubtの型が違う。
}

簡単に多相型について説明しておくと、型チェックのあるvoid*型ってところだろうか。 身も蓋も無い言い方なんだけど、実装はそんな感じだと思う。 詳しく知りたい人はMLとかHaskellとかそういうのを勉強したほうが早いと思う。 型推論があったら、ただの型チェック付きvoid*ってことはないだろうけど、 Cライク言語では、そういうわけにもいかないし。

で、まず記述方法だ。C++のテンプレートみたいな感じだろうか。


class List<'a>
{
	'a head;
	List<'a> tail;

	...
}

typedef List<int> IntList;  // 型名を引数に取る感じ

IntList il;

でも、これでは問題がある。テンプレートと共存ができない。 テンプレートと多相型は似ているけど、カバーしている範囲は若干違ってくる。 多相型をわざわざ実装する(妄想だけど)必要性を示す意味も含めて簡単にテンプレートと 多相型の違いについて。

まず、(C++の)テンプレートはテンプレートクラス、関数を使用すれば、実際にクラスもしくは関数ががひとつ作られる。 これは言葉のあやとかではなくて、実際につくられる。

#include <stdio.h>

template <typename T>
class A
{
public:
	A(T) { puts("ok"); }
};

int main()
{
	
	A a_i(3);
	A a_f(3.0);

}

これの場合、クラスAのコンストラクタは

_ZN1AIfEC1Ef:
.LFB11:
	pushl	%ebp
.LCFI3:
	movl	%esp, %ebp
.LCFI4:
	subl	$8, %esp
.LCFI5:
	movl	$.LC1, (%esp)
	call	puts
	leave
	ret

_ZN1AIiEC1Ei:
.LFB12:
	pushl	%ebp
.LCFI6:
	movl	%esp, %ebp
.LCFI7:
	subl	$8, %esp
.LCFI8:
	movl	$.LC1, (%esp)
	call	puts
	leave
	ret

と、いうふうに、ふたつ作られる。実際にはA<T>なんていうクラスは存在してなくて、 A<int>, A<float>っていうふたつのクラスがあるっていうことになっているのだ。

このことは、いくつもの同じコードが複数存在するという問題を起こすことになる。 例えば、上の例ではA<int>,A<float>のどちらのコンストラクタもやっていることは 全く同じだ。 今は、単純な例だから問題無いかもしれないが、二分木、もうちょい複雑に赤黒木とかを テンプレートで書いた場合を想像すれば、結構な無駄が生じているような気がしなくもない。 コンパイルは遅くなるし、オブジェクトコードのサイズは大きくなる。 STL使うとコンパイルが遅くなる原因はこういうのもあるんじゃないかと思う。

さらに、何度もコンパイルが必要というのと関連して、全てをヘッダファイルに書かないと いけないというのがある。まあ、ファイル間の依存関係が強くなってしまうのだ。

で、多相型なのである。多相型はさっき書いたとおり、実際は型チェックが行われるvoid*だ (と、いうよりレジスタ型と言ったほうが近いかもしれない)。 イメージ的にはglibのgtreeとか、標準ライブラリのqsortに型チェックを付けただけのものだろうか。 どんなに色々な型に使ったとしても、コンパイルされるのは一度だけだ。

例えば、上のqsortの例ではqsortの実装は一切わからなくてもどっかでコンパイルされたqsortを使えたわけだ。 多分、名前マングルさえ上手くいってれば標準ライブラリのqsortを使うことだって可能だろう。

じゃあ、多相型があればテンプレートはいらないか、というと、そうでもない。 テンプレートの「何度もコンパイルが行われる」という点は利点でもある。

template 
class A <typename T>
{
public:
	A(T a) { a.nanika(); }
};

こういうふうに、その型特有の属性(メンバとかメソッドとか)を利用する場合、テンプレートならば、 コンパイルを行う時にその型情報を調べて、なんとかできるだろう。 けど、多相型を使った関数なんかのコンパイルを行うときは、 その型がいったいどういう型なのかっていうのが全然わからないので、型の属性を利用しようがないのである。

だから、まあ、テンプレートと多相型は共存していくことが必要なのである。良い感じに言うと直交する存在だ。 (あと、個人的にコンテナの類いにはテンプレートはあまり向いていない…と、思っていたりする。)

で、書くのが面倒になってきたので続きは明日で。 ここまで盛り上げておいて続きはショボショボなんだけど。

(文章下手だなぁ…)

04_03_17


GCCでもリンク時最適化しよーよ、っていうのはもう既にあるらしい (参考(pdf))。なんか凄いなぁ…

QNOPPIXを使ってsshサーバ動かしてscpでファイル送ったら 何も設定しなくても直接LANで送れた。ありがとうQNOPPIX。 FDDはいらない。

--

で、続き。表記をどうするか。

まず、一番イカれた方法として、多相型の型パラメータはクラス名の前に、 テンプレートの型パラメータっていうのを思い付いた。


// a, b は多相型 T,Uはテンプレートの型引数
class <a,b> Nanika <T,U>
{
	...
};

typedef <int,int> Nanika <char,char> int_nanika_char;

MLとかで多相型パラメータの指定がクラス名の前で、テンプレートパラメータはクラス名の後ろに 付けるからそのまんまにしたらこんな感じだと思うんだけど、あんまりどうかと思う。

で、D言語みたいにテンプレートはクラスごとじゃなくて、名前空間のようなもの単位で指定して、 多相型の型指定はクラス単位で行うっていうのはどうだろうか、とか 色々考えるんだけど、結局「まあ、どうせ実装しないんだしどうでもいいか…」とか思って終わり。 書くのが面倒になってきただけなんだけど。

04_03_18


ファミコン20周年記念 -僕と17歳と少年犯罪-

さて、随分前なんだけど、17歳の犯罪というのがあらゆるマスコミで とりあげられ、なんか 「17歳はみんな精神不安定でふとしたことで犯罪に走る」 みたいな感じになってマスコミとか大人の頭の悪さを若者達に知らしめた時代っていうのがあった。

「ああ、懐かしい話だなぁ…」

と、思う人が多いかもしれない。最近ではほとんど言わないし。 (最近の流行りは教職員のセクハラ?) 「17歳=犯罪予備軍」が世間の定説になってた時期っていうのは1年間ぐらいだろうか。 半年も騒がれなかったっけ。数ヶ月?

しかし、まあ、これはひとつの問題で、要するに 17歳が犯罪予備軍だったのが1年もなかったっていうことは、 17歳が犯罪予備軍なんじゃなくて、その当時17歳くらいだった世代が犯罪予備軍 だったっていうことじゃないだろうか。すなわち、82年とか83年とかに生まれた世代。

で、まあ、驚くべきことに、そう考えると83年生まれの僕はまさに犯罪予備軍に入るのである。 僕は世間から「彼等はちょうど大人と子供の中間で犯罪に走りやすい」とか 全然知らない人にテレビとか新聞とかで言われたかと思ったら、 「彼等がこうなるのはなにも自身の責任ばかりではなくて、社会とか親の責任もあるんです。彼等は被害者でもあるんです。」 とか、意味もわからず同情された人の一人だったのである。

と、いうわけで、僕は予備軍だから、逮捕された時はよろしくお願いします。

で、僕はまあ、どうでもいいとしよう。ちっぽけな存在だし。逮捕されても歴史には残らないだろう。 しかし、83年というのは、あの偉大なファミコン様の生まれた年でもある。

なんと、少年犯罪の温床と言われているテレビゲームの金字塔、ファミコン様は まさに、少年犯罪世代の生まれだったのである。なんということか。

だから、「少年犯罪が起こるのはテレビゲームが悪い」とか言ってる人達も、 「ファミコンは確かに少年犯罪の温床なのです、しかしそれは彼等ばかりの責任ではなく、 社会の責任でもあるんです。彼等は被害者でもあるのです。」 とか、弁護してあげてください。

04_03_19


うんこ汚ねー

R-TYPE II が3面まで行った。 2面クリアするのにこんなに時間かかったの始めてだ、っていうか、 2面ボスのアレはいいのか?色々。

で、そのゲーセンなんだけど、R-TYPE IIだけじゃなくて、 グラディウス、ギャラガ、ギャラクシアン、妖怪道中記、源平討魔伝、 魔界村、ハイパーオリンピック、「レジャックの電話番号」が書いてあるゲームとかあって 日本でも珍しい部類に入るかもしれない。どれもリアルタイムでプレイしたことないけど。

あと、ふとしたきっかけでGBAが手に入ったので逆転裁判をやってみた。 ゲームしてばっか。

04_03_23


BBS

掲示板プログラムっていうのは再開発されてなんぼだと思うし、 それで、あちこちに掲示板プログラムは存在するし、でも何故か結局自作してしまうし、 自作したわりにやっぱりどっかで配布されてる物のほうが使いやすかったりして、 まあ、いつの日だか忘れたけど、「僕は二度と掲示板の再開発はしない」とか考えたんだけど、 何故か今日一日費やして。

あと、ezbbsのパスワードは見つかったのでさらに無意味。どうにでもなれ。 バグとかでいきなり全消しとか考えられるので、あんまり本気で書き込まないほうがいいかと。 そんな人いないと思うけど。

04_03_24


スタンダード 反社会学講座

おもしろいので一気に読んでしまった。

こういう文章を読んでいると、 「どうして、日本の社会はこんなにも駄目なんだろうか。こんなんじゃ人生まっくらだよ。」 とか、毎回思ってしまう。そして、こんなに駄目だとわかっているのに、 自分には解決しようがない、ということがさらに暗い気分に拍車をかける。

なんでこんな風になってしまうんだろうか。 政治制度っていうのは国を良くする為にあるんじゃなかったんだろうか。 それが何故、国を腐らせてしまっているんだろうか。何故…?とか、そんな感じで。

で、まあ、僕が思うのは、政治が腐っているのは政治の基本となっている選挙という制度が 終わっているからだと思う。選挙は政治を良くしたりなんかしない。 自分らに有利な制度しか採用しない政治家さん達が 選挙制度を採用していることが何よりの証拠と言うべきか。

選挙は、まあつまり多数決だ、多数決っていうのは究極に駄目な方法だ。 人間っていうのはお偉方の意見っていうのは信じてしまう傾向にある。 政治家の先生方っていうまさに典型的偉い人にとっては選挙の結果なんて 操作したいほうだいなのである。 さらに、「お偉方の意見は間違っている。」とか、少数派の頭の良い意見が出ても 「多数決で決まったことに文句言うなよ。」とかっていうふうに、簡単に潰せてしまうのである。

つまり、結局はどうしようもないことだ。 国は政治で動く。政治は選挙に基づいている。政治家の思い通りになってしまう選挙制度は終わっている。 じゃあ、選挙制度を変えるべき。 でも、選挙制度を変えるには国を動かさないといけない。国を動かすには選挙を行わないといけない。 選挙なんて政治家の思い通り…そんな感じで。

と、ここで終わりではない。超楽観主義者である僕はこう考える。つまり、

いままで有史以来、長いこと多くの人が、 「現在の政治制度は終わってる。このままでは国が腐って全てが終わる。」 とか考えてきたけど、まあ、今の状況を見る限り、決定的に終わってしまった例っていうのは ほんのわずかで、それも、「古代文明、謎の消滅」程度の話だし、 政治が腐ってたせいで決定的に国が終わるっていうことは無いのである…多分。

いちいち国の失態に不安、不快な気分になる必要なんかないっていうこと。

なるようにしかならないし、なんとかしようとしてもどうしようもないし、 それでも、特に問題は無い。

04_03_25


そういえば、Windows XPにはデフォルトでは Java VMが載ってなかったような気がする。

前まではJavaアプリケーションと言えば、とりあえずWindowsでは動作するものだったけど、 もはやWindows上でも動くかどうかわからなくなったわけで、 「一度書けば云々」とかいうのからまた一歩遠ざかったわけである。 素人から見たら、「Sun馬鹿だなァ…」とか思うんだけど、やっぱ企業的には 色々あるんだろう。

で、.NETとかJavaとか移植性の高さを宣伝してんだけど ランタイムが無いと動かんわけで、 PC上であれば386ネイティブ機械語のほうが高い確率で動くような気がしなくもない。

さらに言えば、386機械語は機械自体が無くなるような時代になったとしても、 エミュレータが生まれることは間違いないだろうし(bochsとか既にあるし)、 それに、IA64のようにCPU自体に386エミュレーション機能が付いてることだって十分考えられる。

すなわち、386機械語の移植性は高い。むしろ機械語で直接書いちゃえばいい。 機械語だったら言語仕様変わったりすることも無いし。 高い移植性が必要なら、全部386の生機械語で書くべきなのである。

04_03_26


今の家にいるのもあと2日。 引越ししたらネットに繋がるかどうかわからない(多分繋がらない)ので、 この先更新がどうなるか不明。多分続けるけど。

インタプリタの変数テーブルがわからん。

インタプリタ作るとして、変数テーブルはハッシュでやりゃいいと思ってたんだけど、効率を考えると、 単純にハッシュでやればいいというわけにはいかない。 変数参照の効率は適当にはできない。

例えば、

function nanika()
{
	var x;
	var y;

	return x+y;
}

とかいう関数があったとする。 で、こういう場合、変数参照はそれぞれ一回づつしか無いので、 ハッシュ使って変数参照したとしても線型探索した場合と殆んど変わらない。 リストで線型探索しても、一番最初に発見されるだろうし、それに一回しか参照されない。 むしろ、ハッシュ使ったら、文字列のハッシュ値を求める分遅くなってしまうかもしれない。

でも、線型探索で実装してしまうと、複雑な関数とかになった時に致命的に遅くなってしまう。 それでなくても、グローバルな変数を参照したりするとそれだけで遅くなるかもしれない。

さすがに、複雑な関数しか使わない。とか、簡単な関数しか駄目。とか決め打ち してしまうのはよくないだろう。で、どうしようか。

適当にRubyのソースでも読もうかと思ったんだけど、全然わからないので、 RHGを読んでみることにした。

で、構文木の構築のローカル変数のところ。 簡単に説明すると、まず、構文解析時に新しい変数名が表われる度にその変数に番号を順番に付けていく、 で、変数名と番号が対応するようにしておいて、スコープごとにローカル変数を貯めておく配列を作って、 変数の参照があったら、変数名に対応する番号をもとにして、ローカル変数の配列から拾ってくるといった感じで。

なるほど、構文解析の時に決定するのか。ていうか、コンパイラだったら、そのぐらい当たり前だし、 なんで僕は気付かないんだ。「勉強の為」とか言って、コンパイラを実装していたのは全くの時間の無駄だったというわけか。

まあ、それはいいとして、これだと、ローカルスコープの中にもういっこスコープを作ることができないような感じがする。 Rubyにはたまたまそういう構文が無い(よね?)ので、なんとかなってる感じがするんだけど。どうしようか。例えば、

function nanika()
{
	int a;

	{
		int b;
	}

	{
		int c;
	}
}

こういう場合、順番に番号を付けると、

function nanika()
{
	int a(->0);

	{
		int b(->1);
	}

	{
		int c(->2);
	}
}

ローカル変数の配列は3個分の大きさになってしまう。 できるならば、

function nanika()
{
	int a(->0);

	{
		int b(->1);
	}

	{
		int c(->1);
	}
}

こんな感じでbとcには同じ領域を使って欲しいところだ。

あー、このへんは構文解析時にオフセットを管理するスタックを使ったりとかしたらできるか、 あと、親スコープの変数上書きするのも実装しないけないな…結構面倒だな…

と、まあ、そんな感じで、 インタプリタは解析時に名前解決しないでいいから楽ちんだよーん。 インタプリタも実装できない奴は駄目ぽーん。 とか、思ってたんだけど、色々反省して考えを改めないといけないと思いました。

あと、ダイナミックスコープの場合どうするかが全然わからないので、 Emacsのソース読んだんだけど、やっぱり全然わからなかったので、もっと 修行してきます。

04_03_28


しばらくインターネットに繋がりません。あと、cpajk121@hct.zaq.ne.jpはこれからも存在しますが、 多分二度と見ないと思います。とりあえず、mori_oto@hotmail.com使ってください。

--

GCCに入ってるハッシュテーブルが使い物にならない。 hashtableっていうのとhashtabのふたつのハッシュテーブル用ルーチンがあるのに、 どっちも使いものにならない。hashtabのほうが仕様が微妙だったのと、 hashtableのほうがGTY印が付いてないのでGGCに対応していない。

特にhashtableの仕様の微妙さは困った。キーとエレメントが同一というか、まあ、少し変わった仕様だった。 普通ハッシュテーブルっていうと、キーとエレメントの組み合わせだと思うし、 関数の型もそれっぽい型してたので、すっかりそういう仕様だと思い込んでしまってて、 2時間くらい無駄に時間潰したような気がする。 それで、今日、自分でハッシュテーブル実装したら1時間もかからなかった。最初からこうしていればよかった。

--

適当に本読んでると、やっぱ文章上手い人っていうのは使用しているボキャブラリの量が違うというか、 まあ、僕には思い付かない表現を使ってるなぁ。と、いうようなことを思う。

ジャンルに限らず、なにをやるときでも、ボキャブラリの多さっていうのは利点になると思う。 だから、まあ、僕みたいに特にボキャブラリの少ない人間っていうのは、ジャンルに限らず、 なにをやる時でも人より一歩退いている。と、いったところだろうか。


e1101:
マイナーで(そしてしばしば間違った)カタカナ英語を使用することが格好いいと勘違いしてる人もいるし,そういう人よりは一歩進んでると思う
f:
同じくインターネットに4月上旬はつながりません (あえて IP unreachable といって上のコメントに絡めてみる ^^;) 。あと某企画 ML は 4/1 に一応スタートするかもです。メール送ります。
t:
技科大生です.まだネットつながってないですけど,学校の図書館の「情報コンセント」という名の,マジ電源みたいなEthernetからアクセス.
既にレポート地獄が始まっていまして,句読点がこんな状態です.
みなさん,同窓会までお元気にがんばってください!
毎日つまんないから,同じ県民のWakuさんに会いたいですわ…
を:
あー、学生は大変ですなぁ…
こっちはまだ大変ではないです。
むしろ、規則正しい生活が身に付いてきたので前よりも楽。
e1101:
 こっちは研修中やけど生活リズム狂ってます.
ってか,受講中に寝まくってますな.
昔とあんまり変わらない.
あと,コンロがないので食事に困る.
そんな感じです.
N吉:
 なんか久しぶりに書き込んでみます。実はたまにここ見ているんです。
上の人と違う、もう1つの方のギコ大におる者です。
 レポート地獄?うちはそんなもんおまへんなあ
むしろ山の方へ行ったらこの前の北海道くらい雪が積もっててびっくりだよ。
 ちなみにうちはAirH"で快適32kbpsインターネット中。もうこんな速度まで来たら
むしろ感動すら覚えるよね。
e1101:
32kbps……,コーヒー入れられんね.うち,計ってみたら実測630kbps前後.光のはずなんだけれどな〜.
wo:
32kでここ見てたら厳しいような気がする。

あと、あんまり投稿数が多くなるとバグが露出しそうでアレ。
CGIのテストプログラムってどうなんだろうか?
自動的に投稿練り上げて送信する感じ。


夜1時までには寝るし、昼寝ないし、朝は家出る一時間前に起きて、朝食作るっていうのを毎日やってて、昔が嘘のよう。
f:
折角ML作ったし、そっちにうつろうよ〜(w N吉さんのアドレスはわかるんで、参加通知送っておこうかな