Diary?::2006-02-03

00:42

以下は二月一日の午前 4 時 〜 二日の午前 3 時 59 分までのアクセスログからはてな RSS のアクセス時刻を切り出した結果。

01/Feb/2006:05:00:23
01/Feb/2006:06:35:24
01/Feb/2006:11:13:12
01/Feb/2006:14:00:02
01/Feb/2006:19:19:07
01/Feb/2006:22:04:57
01/Feb/2006:23:44:23

はてなアンテナ。

01/Feb/2006:09:08:29
01/Feb/2006:09:08:29
01/Feb/2006:23:14:49
01/Feb/2006:23:14:59
02/Feb/2006:02:27:18
02/Feb/2006:02:27:18

FEEDBRINGER。

01/Feb/2006:07:51:27
01/Feb/2006:10:54:15
01/Feb/2006:13:26:59
01/Feb/2006:15:58:47
01/Feb/2006:17:52:43
01/Feb/2006:18:54:02
01/Feb/2006:20:41:12
01/Feb/2006:23:14:16
02/Feb/2006:03:51:53

i-know。

01/Feb/2006:09:56:29
01/Feb/2006:09:56:29
01/Feb/2006:19:01:07

i-know は latest の方もチェックしているのでそっちも。

01/Feb/2006:06:07:15
01/Feb/2006:06:07:15
01/Feb/2006:15:08:29
02/Feb/2006:00:24:34
02/Feb/2006:00:24:35

Bloglines。

01/Feb/2006:04:14:17
01/Feb/2006:04:44:29
01/Feb/2006:05:14:20
01/Feb/2006:05:45:37
01/Feb/2006:06:14:14
01/Feb/2006:06:43:53
01/Feb/2006:07:14:03
01/Feb/2006:07:42:36
01/Feb/2006:08:12:20
01/Feb/2006:08:42:07
01/Feb/2006:09:12:26
01/Feb/2006:09:42:54
01/Feb/2006:10:12:46
01/Feb/2006:10:42:20
01/Feb/2006:11:12:37
01/Feb/2006:11:43:05
01/Feb/2006:12:12:24
01/Feb/2006:12:43:21
01/Feb/2006:13:14:14
01/Feb/2006:13:37:55
01/Feb/2006:14:08:08
01/Feb/2006:14:38:13
01/Feb/2006:15:08:12
01/Feb/2006:15:38:03
01/Feb/2006:16:08:58
01/Feb/2006:16:38:05
01/Feb/2006:17:09:18
01/Feb/2006:17:38:43
01/Feb/2006:18:09:51
01/Feb/2006:18:38:51
01/Feb/2006:19:09:18
01/Feb/2006:19:39:06
01/Feb/2006:20:09:30
01/Feb/2006:20:39:02
01/Feb/2006:21:09:05
01/Feb/2006:21:39:39
01/Feb/2006:22:09:29
01/Feb/2006:22:39:43
01/Feb/2006:23:09:57
01/Feb/2006:23:39:31
02/Feb/2006:00:09:34
02/Feb/2006:00:39:33
02/Feb/2006:01:08:57
02/Feb/2006:01:38:48
02/Feb/2006:02:09:15
02/Feb/2006:02:38:44
02/Feb/2006:03:09:36
02/Feb/2006:03:38:56

とりあえずの結論。

01:32

山羊が初体験の相手なんて発想、実際無理ですよ」という文面を見て、ドス黒い考えが浮かびあがってきたので忘れないうちに書き留める。

獣姦といえば欧米が捕鯨に反対する理由を人魚伝説と獣姦に絡めて考察した文書を思い出す (俺は冗談抜きでこの線はありえないことでは無いと思ってる) のだが、この獣姦というおぞましい発想はつまり、抵抗 / 復讐する術を持たない相手を思う存分蹂躙したいという欲求なわけだ。単純な性欲のはけ口。

俺は獣姦というのはペドフィリアと基本的に同じ病理だと思っている。だって動物も幼児も抵抗力 0 じゃねえか。もしも小動物を殺したり犯したりして楽しんでいる奴がいれば、そいつが子供を殺したり犯したりしないという保証は全く無い。

そして俺は子供のころは蟻の巣に水を流し込んだりカマキリをロケット花火に括り付けて発射したりザリガニを煙だまで色付けして挙げ句の果てにコンクリートのブロックで押し潰し足り蛙を爆竹で吹っ飛ばしたりまあつまりは暴虐の限りを尽くしていて、それは俺の友人も一緒で、そしてきっと多くの人が同じだろう。そして当然今はそんなことをしたいとは一つも思っていない。俺は数多の殺戮の果てに命を奪うっつー事はなんなのかとかをなんとなく理解して、犯罪者予備軍からまともになったわけだ。

何が言いたいかというと子供はみな一様に残酷なわけで、欲望に任せた無計画な犯罪に関してはある程度以上年齢の低い層で起こっているのが正しい姿なのではないか? 詳しいデータが無いので検討外れな事を言っているのかもしれないけれど、俺の目には大人の方がしょうもない犯罪を起こしているように思える。ぶっちゃけた話、いい年こいたおっさんが買春しているのを見ると死ねといいたくなる。お前は蟻を踏み潰して喜んでいるガキか。金でどうにかするのも暴力でどうにかするのも同じ事だろう。

大人になってもしょうもない理由で犯罪に走っているのは、大人になるプロセスに重大なバグがあったのだろうね。そういう観点から考えると、さらに真っ黒な事が思い付きそうだが。

01:51

そういえば近親、カニバル (暗示程度だけど)、ペド、 SM、薬物、ゲイ、ネクロと変態全開の「伯爵カイン」で (いや、基本的にそういうのが目的の漫画じゃないです。多分)、獣姦だけは (その暗示的なものも含めて) 登場しなかったけど、これはつまりペドとか薬物でそれと同じテーマは描いているから不要だと判断したわけなのか? だとすると一歩間違えれば (いや、由貴先生が単に動物虐待ネタが好きじゃないってだけなんだろうけど)。

そういえば「天使禁猟区」では自分よりも下位層の相手を強姦するというネタが何度か出てきた。本当に由貴先生は何をしでかすかわからないなあ。あと二週間後ぐらいに発売される「妖精標本」の二巻がどんな惨状になっているのか、楽しみでもあり不安でもある。

09:08

部分適用した関数を使えば遅延評価っぽい物が出来るんじゃないかと思ったが、ちとそれは違うな。

def lazy(v, f):
	retrun v+f()

lazy(10, partial(add, 1, 2))

値を渡す先でわざわざ f() とするのが論外だなあ。昨日書いた proxy_class を使えば何とかなるだろうけど、それがどこまで使えるのか。

09:33

なんか遅延評価書けた。

class lazy_object:
	def __init__(self, f, *arg, **kwd):
		self.__args = arg
		self.__kwds = kwd
		self.__function = f

	def __getattr__(self, name):
		print name
		r = self.__function(*self.__args, **self.__kwds)
		return getattr(r, name)

def lazy(f):
	def _lazy(*args, **kwds):
		return lazy_object(f, *args, **kwds)
	_lazy.func_name = f.func_name
	return _lazy

@lazy
def func(x, y):
	print 'func'
	return x+y

l = func(1, 2)
print 'not calculated'
print l

これの出力は

not calculated
__str__
func
3

となるので、一応遅延評価になっている。あっさり書けたのでびっくり。まだ全然テストしてないけど、この方向で大丈夫だと思う。

というか Python ばっか書いてると、ここら辺の感覚が麻痺してくるね。

11:16

さっき書いた遅延評価のコード、遅延評価オブジェクト同士を比較するとエラーになる。というわけで書き直し。あと同じ計算を二度としないように、計算結果をキャッシュさせるようにした。

class lazy_object:
	def __init__(self, f, *arg, **kwd):
		self.__args = arg
		self.__kwds = kwd
		self.__function = f
		self.__retval = None
	
	def __cmp__(self, other):
		return cmp(self.__value(), other)

	def __getattr__(self, name):
		return getattr(self.__value(), name)
		
	def __value(self):
		if not self.__retval:
			self.__retval = self.__function(*self.__args, **self.__kwds)
		return self.__retval
			
def lazy(f):
	def _lazy(*args, **kwds):
		return lazy_object(f, *args, **kwds)
	_lazy.func_name = f.func_name
	return _lazy

これでどれぐらい性能があがるのか試してみた。

def tarai(x, y, z):
	if x <= y:
		return y
	else:
		return tarai(tarai(x-1, y, z),tarai(y-1, z, x),tarai(z-1, x, y))

@lazy
def tarai2(x, y, z):
	if x <= y:
		return y
	else:
		return tarai2(tarai2(x-1, y, z),tarai2(y-1, z, x),tarai2(z-1, x, y))

from time import time
t = time()
tarai(12, 6, 0)
print "Normal:", time()-t
t = time()
tarai2(12, 6, 0)
print "Lazy  :", time()-t
Normal : 12.673178196
Lazy   : 0.0177569389343

ちなみに計算結果をキャッシュしないと比較演算でのオーバーヘッドが洒落にならず、かえって性能がダウンしてしまう。

あと比較演算だけでなく、他の物についても遅延評価オブジェクト同士の演算でエラーがでるので、そこら辺何とかしたい所。いちいち __add__ とか定義するの、面倒臭いなあ。

追記。次の方法で良いっぽい。

# 前述の lazy_object クラスに追加。 __cmp__ は削除。 <- 追記: これは間違い
def __coerce__(self, other):
	return (self.__value(), other)

でもこれ将来的にはサポートされなくなるかも、とリファレンスに載ってるしな。でも他に方法が思い付かない。

さらに追記。 __cmp__ を定義していないとエラーがでる場合があるようなので、一応 __cmp__ も残しておいた方がいいようだ。

それと遅延評価を行った場合とメモ化を行った場合では、後者の方がパフォーマンスがいいが呼び出し回数は多い。やはりクロージャとオブジェクトでラッピングしているとオーバーヘッドが大きくなるな。これを無視できるぐらい重い処理をするのであれば、遅延評価の価値があるんだけど。

15:32 読書記録「女の子ものがたり」

大傑作である「ぼくんち」のオリジンであり、西原先生の自伝的な意味合いの作品。本当、細かい所がやたらと心の琴線に触れる。家から盗んだお金で遊びに行くところとか、にゅうにゅうさんとか、いろんな物が。俺も一歩間違えればこういう人生だったんだろうなー (地元には不良 or 犯罪者 or 負け犬 or 乞食しかいない)。

あとやっぱ西原先生の一番の魅力はどうしようもない人への暖かい眼差しだと思う。同情とか憐憫といった安っぽい感情ではない、もっと別の何か。

22:51

なぜ宮崎勤のような人間が生まれたかって? それはきっと、なぜ自分のような人間が生まれたかについてと同じぐらい難しい問題だろうね。

人間が腐るプロセスと腐り方はそれこそ山のようにあり、それらは複雑に絡み合い、そしてそれについて性急に (そして自分にとって都合の良い) 答えを出そうとする人間もやはり腐っている。もしかしたら宮崎以上に。

正直、もうこの手の話は飽きている。どうせ不幸な生い立ちかゲームやアニメが原因にされるのはわかりきっている。そうでなければきっと何も結論は出せないだろうし、多くの人達が自分は安全圏にいる状態で見られる結論を求めている以上、そんな事がテレビなどで放送されるとは思えない。

Written by Kuwata Chikara
Creative Commons