2008年 07月 22日

はてダ開いて、「日記書く」ってやると、ちょっと前に書こうとしてやめた内容がバックアップから復元されてきて、継続性を感じる。でもあれ別人だもんなー

2008年 07月 21日

約5ヶ月間ほど週に5日ぐらい、1時間半から2時間かけて鎌倉に通うニート生活をしていた。うまいこと書けないので [1年後ぐらいに書く]

頭の中に住んでいる、仮想的な敵、最悪のケースの最悪の人の像、というのがあって、彼は日常の中の些細な言葉や行動を増幅して、その言動の原因の最悪のケースを僕に伝えてくる。悪いことがないことはありえない。程度の問題だ。程度の問題だから、増幅されると困る。

なんかやたらめったら自信のある眼をしている大学生と、どんなことにも興味を示さない大学生と、どっちも本当に嫌だ。やたらめったら自信だけあって結局なんもせん、なんもできん、みたいな人にどれだけ殺されそうになったかわからないし、どんなことにも興味を示さない人に、どれだけの僕のやる気を剥されたかわからない。「考えてる」って言葉にするけど、何を考えているか言葉にできない人は実際は全く考えていない。それはかつての僕そのものだ。考えている、と信じこんでるだけで全く何も考えてない。しかも「自分が考えていないこと」に気付きたくないから余計何も書かなくなる。

2008年 07月 20日

ゆの in Ruby エラーメッセージ

クソ長いです

#!/usr/bin/env ruby -Ku
# vim:set ft=ruby:
# ひだまりスケッチ× というファイル名で保存する必要があります
X = 365


















































































































































































































































































































































t = Time.now
t += 7 * 24 * 60 until t.wday == 4
n = t.strftime("X365次は%m月%d日25時25分からです><")
eval "class #{n} < Exception; end"



alias _ raise
$! = Kernel.const_get(n).new(File.read(__FILE__)[/< (.+!)$/, 1])













X / _ / X < 来週も見てくださいね!

出力はこんな風になります。

ひだまりスケッチ×:365: 来週も見てくださいね! (X365次は07月24日25時25分からです><)

方針としては

  • 365行目で raise させる

ってだけです。

Ruby のエラーメッセージはトップレベルの場合

filename:line: message (ErrroClassName)

になります。トップレベルではない場合は in`methodname` が入ってくるのでダメです。そこで _ を raise の alias にすることで、raise と書かなくても例外をゆのっち内で起こせるようにしました。_ には引数がないので、引数なしの raise となり、直前の例外が raise される効果になります。「直前の例外」は $! に入っており、代入することもできるので、例外を生成して直接 $! へ代入しています。

$! へ代入するクラスの名前が、エラーメッセージの括弧内に入るので、オマケで次週の TBS での放送日を入れることにしました。const_name として valid な名前にするのが結構めんどいうえに綺麗にならないですがこんなもんでしょうか。

短かいバージョン ファイル名も行数も関係なし。上のコードは _ でプログラムを抜けて「来週も見てくださいね!」が評価されないのですが、これだとされます。

#!/usr/bin/env ruby -Ku
# vim:set ft=ruby:

class X < (_ = Exception)
	class << self
		def /(o)
			self
		end

		def <(o)
			raise X, o.to_s
		rescue Exception
			$!.set_backtrace(["ひだまりスケッチ×365"])
			raise
		end
	end

end

class Object
	def method_missing(name, *args)
		name
	end
end

X / _ / X < 来週も見てくださいね!
ひだまりスケッチ×365: 来週も見てくださいね! (X)

あぶねー日記にメモらなかった忘れてた

mixi ニュース経由で日記読んでみたらほんと想像力がない人が多くてびっくりする。おれもああなってしまうのかなぁ……もうなってるのかなぁ……