2008年 01月 20日

いよいよお金がなさすぎてヤバいんだぜ

ニコニコ

ひさしぶりに VOCALOID 系のを聴いてまわった。

けんたろさんに会ったけれど、全然違和感みたいなのがなかった。

Ruby の名前空間

orz... Fx3 + Firebug でクラッシュしてから edit ページひらいて送信したら消えてしまった……変なタイミングで入力の復帰が行なわれたようだ……できるかぎり復元してみる

JS かいたり Scheme かいたりしたあと Ruby をかこうとするとなんかハマる。メソッドの名前と変数の名前が分離しているからなんだけど、たまにきもちわるい感じがする (スイッチがきりかわるとそうでもないんだけど……)。

class Foo
end

def Foo
end

ができるということはいいのだけど (Hpricot とか Pathname がやってる)、おなじようなノリで

class Foo
    module Bar
    end
end

def Foo::bar
end

みたいなのはもちろんできない。やるとしたら

module Foo
	module Bar
	end


	def Bar
		:a
	end

	def self.Bar
		:b
	end
end

p Foo.Bar    #=> :b
p Foo::Bar() #=> :b

include Foo
p Bar        #=> Foo::Bar
p Bar()      #=> :a

みたいになるけど、(わざとやっているとはいえ) きもい><

あああ、もうほんと、僕は全然大人になれる気がしない。あるいは例えば、誰か何か、僕が必死になれるような人がいれば、そうならざるを得なくなり、いわゆる「大人」になれるのかもしれないけれど、僕はそういう人を見付けられる気がしない。正直に話をすれば、女の子よりもプログラミングのほうが素敵なのではないかとちらちら考えてしまうし、もし素敵な子がいたとしても、僕よりも素晴らしい人がいるのだからそれでいいだろうと考える。逃げまわることが大好きらしい。

酔っぱらっていたり、少し追いつめられていたりすると、頭の中の言葉、いうべきことではないことも、全て水面までうきあがり、それをキーボードにうちこむことができる。でも、一方で、そういう、特殊な状態に頼った自己表現を嫌い人もいる。自分もどっちかというと嫌いだ。言うべきことはしっかりと考え、言葉、単語ひとつひとつを熟考してから、書くべきだと思う。ただし、それではいつまでたっても、自分が納得できる文章というのが書けない以上、表現が成立しない。

これは全くプログラミングと一緒だ。汎用性をもたせよう、完璧にしようと考えるあまり、実装に手がつかず、途方にくれる、ということがよくある。それは本当に間違いだ。実装はとりあえずすればよい。動かなければ意味がない。表現はとりあえずしてみなければならない。あとからそれをとりけすのは、少しやっかいではあるが、あとからとりけすのが非常にやっかいなものは、まだやるべきことではない。「ごめんなさいまちがえました」といい、訂正できる程度のことを、完全に動くまでテストし、リリースすることが重要だと考える。

僕は本当に恵まれた環境にあるということを、泣きそうになるぐらいに実感する必要があるが、泣きそうになるほどに実感はしていない。なんてすばらしいんだろうと考えることはよくある。

普通、ソフトウェア、ライブラリのリリースはめちゃくちゃ孤独だ。「これでいいのか」「すでに同じようなモジュールがないか」「名前空間を必要以上に汚染していないか」ということを、殆ど独りで考え、結論をだし、自分のバランス感覚・距離感を信じてリリースする必要がある。そういう意味で、例えば、IRC などで「これでいいのか」ということを相談できたり、意見を聴けたりするのは、本当に素晴しい。ただ、いつもおもうのは、そういうのに頼りすぎてはいけないということだ。バランス感覚は、常にバランスを保ち続けることで維持できるはずであるし、距離感は、いつも距離を図っていないとわからない。

MBTI

さっき http://www5.big.or.jp/~seraph/zero/mbti.cgi をやったら

だった。しばらく INFP だったのが INFJ になった。(でも前にどこでやったのか覚えていない)

JSDeferred 重い処理を自動で分割する。

JSDeferred の loop 関数は軽かろうが重かろうか一回ずつ setTimeout はさむんで効率わるいので、for ループと loop 関数の間ぐらいの関数をてきとうに書いてみた。

	function aloop (n, f) {
		var i   = 0;
		var end = new Object;
		var ret = null;
		return Deferred.next(function () {
			var t = (new Date()).getTime();
			try {
				do {
					ret = f(i)
					i++;
					if (i > n) throw end;
				} while ((new Date()).getTime() - t < 100)
				log("Devided: " + ((new Date()).getTime() - t) + "msec.");
				return Deferred.call(arguments.callee);
			} catch (e) {
				if (e == end) {
					log("End");
					return ret;
				} else {
					throw e;
				}
			}
		});
	}

	aloop(100, function (n, o) {
		var dummy = 0;
		log(n);
		for (var i = 0; i < n * n * n; i++) {
			dummy++;
		}
	});

関数一回の処理に 100msec 以上かかってしまったら、一度ブラウザに処理をかえす。

この例だとこんなふうになります

Firebug has been disabled for www.google.com

Enable Firebug
Enable Firebug for this web site
http://lowreal.net/Test: 0
http://lowreal.net/Test: 1
http://lowreal.net/Test: 2
http://lowreal.net/Test: 3
http://lowreal.net/Test: 4
http://lowreal.net/Test: 5
http://lowreal.net/Test: 6
http://lowreal.net/Test: 7
http://lowreal.net/Test: 8
http://lowreal.net/Test: 9
http://lowreal.net/Test: 10
http://lowreal.net/Test: 11
http://lowreal.net/Test: 12
http://lowreal.net/Test: 13
http://lowreal.net/Test: 14
http://lowreal.net/Test: 15
http://lowreal.net/Test: 16
http://lowreal.net/Test: 17
http://lowreal.net/Test: 18
http://lowreal.net/Test: 19
http://lowreal.net/Test: 20
http://lowreal.net/Test: 21
http://lowreal.net/Test: 22
http://lowreal.net/Test: 23
http://lowreal.net/Test: 24
http://lowreal.net/Test: 25
http://lowreal.net/Test: 26
http://lowreal.net/Test: 27
http://lowreal.net/Test: 28
http://lowreal.net/Test: 29
http://lowreal.net/Test: 30
http://lowreal.net/Test: 31
http://lowreal.net/Test: 32
http://lowreal.net/Test: 33
http://lowreal.net/Test: 34
http://lowreal.net/Test: 35
http://lowreal.net/Test: 36
http://lowreal.net/Test: 37
http://lowreal.net/Test: 38
http://lowreal.net/Test: 39
http://lowreal.net/Test: Devided: 109msec.
http://lowreal.net/Test: 40
http://lowreal.net/Test: 41
http://lowreal.net/Test: 42
http://lowreal.net/Test: 43
http://lowreal.net/Test: 44
http://lowreal.net/Test: 45
http://lowreal.net/Test: 46
http://lowreal.net/Test: 47
http://lowreal.net/Test: Devided: 116msec.
http://lowreal.net/Test: 48
http://lowreal.net/Test: 49
http://lowreal.net/Test: 50
http://lowreal.net/Test: 51
http://lowreal.net/Test: 52
http://lowreal.net/Test: Devided: 109msec.
http://lowreal.net/Test: 53
http://lowreal.net/Test: 54
http://lowreal.net/Test: 55
http://lowreal.net/Test: 56
http://lowreal.net/Test: Devided: 113msec.
http://lowreal.net/Test: 57
http://lowreal.net/Test: 58
http://lowreal.net/Test: 59
http://lowreal.net/Test: Devided: 103msec.
http://lowreal.net/Test: 60
http://lowreal.net/Test: 61
http://lowreal.net/Test: 62
http://lowreal.net/Test: Devided: 119msec.
http://lowreal.net/Test: 63
http://lowreal.net/Test: 64
http://lowreal.net/Test: 65
http://lowreal.net/Test: Devided: 137msec.
http://lowreal.net/Test: 66
http://lowreal.net/Test: 67
http://lowreal.net/Test: Devided: 103msec.
http://lowreal.net/Test: 68
http://lowreal.net/Test: 69
http://lowreal.net/Test: Devided: 112msec.
http://lowreal.net/Test: 70
http://lowreal.net/Test: 71
http://lowreal.net/Test: Devided: 122msec.
http://lowreal.net/Test: 72
http://lowreal.net/Test: 73
http://lowreal.net/Test: Devided: 133msec.
http://lowreal.net/Test: 74
http://lowreal.net/Test: 75
http://lowreal.net/Test: Devided: 144msec.
http://lowreal.net/Test: 76
http://lowreal.net/Test: 77
http://lowreal.net/Test: Devided: 158msec.
http://lowreal.net/Test: 78
http://lowreal.net/Test: 79
http://lowreal.net/Test: Devided: 168msec.
http://lowreal.net/Test: 80
http://lowreal.net/Test: 81
http://lowreal.net/Test: Devided: 182msec.
http://lowreal.net/Test: 82
http://lowreal.net/Test: 83
http://lowreal.net/Test: Devided: 194msec.
http://lowreal.net/Test: 84
http://lowreal.net/Test: Devided: 103msec.
http://lowreal.net/Test: 85
http://lowreal.net/Test: Devided: 106msec.
http://lowreal.net/Test: 86
http://lowreal.net/Test: Devided: 110msec.
http://lowreal.net/Test: 87
http://lowreal.net/Test: Devided: 114msec.
http://lowreal.net/Test: 88
http://lowreal.net/Test: Devided: 118msec.
http://lowreal.net/Test: 89
http://lowreal.net/Test: Devided: 122msec.
http://lowreal.net/Test: 90
http://lowreal.net/Test: Devided: 126msec.
http://lowreal.net/Test: 91
http://lowreal.net/Test: Devided: 131msec.
http://lowreal.net/Test: 92
http://lowreal.net/Test: Devided: 135msec.
http://lowreal.net/Test: 93
http://lowreal.net/Test: Devided: 140msec.
http://lowreal.net/Test: 94
http://lowreal.net/Test: Devided: 144msec.
http://lowreal.net/Test: 95
http://lowreal.net/Test: Devided: 148msec.
http://lowreal.net/Test: 96
http://lowreal.net/Test: Devided: 153msec.
http://lowreal.net/Test: 97
http://lowreal.net/Test: Devided: 158msec.
http://lowreal.net/Test: 98
http://lowreal.net/Test: Devided: 166msec.
http://lowreal.net/Test: 99
http://lowreal.net/Test: Devided: 171msec.
http://lowreal.net/Test: 100
http://lowreal.net/Test: End

実際つかうならハードコードされてるところをましにしたりしないといけないかな。