2007年 10月 14日

曜日べつゲリ統計

Mo   13 (18.1%)
Tu   14 (19.4%)
We   10 (13.9%)
Th   9  (12.5%)
Fr   11 (15.3%)
Sa   6  (8.3%)
Su   9  (12.5%)

ひさしぶりにとった。土曜日にむかうにつれて減るようだ

パッケージシステム

たとえば use みたいな感じのシステムをつくるとしても、あんまり使うイメージがうかばない。require "use" みたいなのは必要になってしまうし、require とは全然違う挙動をするから、なじむまでこまるし、中で何をやっているのかパっと見わからないから、ちょっとこわいし……(require はなにやってるのかわかりやすい)

というか RubyGems の何がいやか。なにを改善したらいいのか。パッチかけばすむのか。それでできるならそれにこしたことない。

  • パッケージ名 (gem.spec.name) と require で使う名前と、実際使う名前がそれぞれ関係ない。
    • auto_require つかって gem メソッド使えば少しはいい?
    • 1.9.1 で標準添付になったら、もっと gem メソッド活用してもいいかもなぁ
    • 実際使う名前がちがうのはどうしたらいいんだ。
      • でもこれは gem に限ってない。ostruct とか optparse とかも実際使うなまえと違うのでときどき混乱する。さすがによく使うから覚えたけど……
      • Python では import, Perl では use がある
      • require で読みこまれるファイルに新しいクラス/モジュールが定義されているとは限らない
      • autoload ってどういうケースを想定してるんだろう。
      • あるクラス・モジュール・メソッドがどこで定義されたものなのか簡単に知る方法がない
      • ビルトインの拡張とかどうするの
      • クラス定義のよみこみと機能の拡張はわけて考えてもいい?
      • require "test/unit" と use "Test::Unit" は後者だと定義されるだけみたいなの。実装できない
  • パッケージ名に統一感が全くない
    • camelcase だったり、そうじゃなかったり、アンダースコアいれたりいれなかったり
    • foobar-ruby とか ruby-foobar みたいなのおおい。 RubyGems って時点で ruby つかうのに
    • 政治的だから諦めるしかない?
  • rubyforge がダサい。
    • 機能での検索がしにくい。カテゴリわけされてない
    • プロジェクトだけあって中身がないのが割とある
    • 他にカッチョいい source があって、デフォルトで使用できればいい
      • gem とドキュメントだけホストして、カテゴリわけされていればいい
  • gem コマンドがいちいち遅い
  • require "rubygems" に抵抗がある
    • なんか一杯読みこむ
    • ほんとに読みこむだけでこんなに使ってるの?

require "rubygems" で定義される Module(Class) と読みこまれるファイル

["Gem::OperationNotSupportedError", "Gem::Exception", "Gem::LoadError", "Gem"]
["rubygems.rb",
 "rbconfig.rb",
 "rubygems/rubygems_version.rb",
 "thread.rb",
 "rbconfig/datadir.rb",
 "rubygems/source_index.rb",
 "rubygems/user_interaction.rb",
 "rubygems/remote_fetcher.rb",
 "net/http.rb",
 "net/protocol.rb",
 "socket.bundle",
 "timeout.rb",
 "uri.rb",
 "uri/common.rb",
 "uri/generic.rb",
 "uri/ftp.rb",
 "uri/http.rb",
 "uri/https.rb",
 "uri/ldap.rb",
 "uri/mailto.rb",
 "yaml.rb",
 "yaml/syck.rb",
 "syck.bundle",
 "yaml/basenode.rb",
 "yaml/ypath.rb",
 "yaml/baseemitter.rb",
 "yaml/constants.rb",
 "yaml/encoding.rb",
 "yaml/error.rb",
 "yaml/loader.rb",
 "yaml/stream.rb",
 "yaml/rubytypes.rb",
 "date.rb",
 "rational.rb",
 "date/format.rb",
 "yaml/types.rb",
 "zlib.bundle",
 "rubygems/digest/sha2.rb",
 "digest/sha2.bundle",
 "digest.bundle",
 "rubygems/digest/digest_adapter.rb",
 "forwardable.rb",
 "time.rb",
 "parsedate.rb",
 "rubygems/specification.rb",
 "rubygems/version.rb",
 "rubygems/security.rb",
 "rubygems/gem_openssl.rb",
 "openssl.rb",
 "openssl.bundle",
 "openssl/bn.rb",
 "openssl/cipher.rb",
 "openssl/digest.rb",
 "openssl/ssl.rb",
 "openssl/buffering.rb",
 "openssl/x509.rb",
 "rubygems/custom_require.rb"]

けっきょくいい方法がおもいつかなくて require にもどっていくのだなぁ……飽きるまで考えてみよう

依存ライブラリは次のバージョンから?かなり減るらしい。6ファイルぐらいに

Ruby で、メソッドがどこで定義されたか外から知る方法

「あるクラス・モジュール・メソッドがどこで定義されたものなのか簡単に知る方法がない」と書いたけど、ホントにホント?という切っ掛けで、メソッド内側の binding なら caller つかえば簡単にとれるけど、外から名前を指定してはとれないよなぁと思うので考えてみた。

class Object
	def location_of_method(name)
		c = nil
		ret = callcc {|c| false }
		unless ret
			m = self.method(name)
			args = [nil] * m.arity.abs
			set_trace_func Proc.new {|event, file, line, id, binding, klass|
				case event
				when "c-call"
					if id == name
						set_trace_func(nil)
						c.call([:native, nil])
					end
				when "call"
					set_trace_func(nil)
					c.call([file, line])
				end
			}
			m.call(*args)
			set_trace_func(nil) # attr_* 系で定義されたメソッドは call が trace できない?
		end
		ret
	end
end

class Class
	def location_of_instance_method(name)
		self.allocate.location_of_method(name)
	end
end

p Object.location_of_method(:new) #=> [:native, nil]
p Object.location_of_instance_method(:instance_eval) #=> [:native, nil]

require "pathname"
p Pathname.location_of_instance_method(:absolute?)
#=> ["/usr/lib/ruby/1.8/pathname.rb", 404]

require "ostruct"
p OpenStruct.location_of_instance_method(:initialize)
#=> ["/usr/lib/ruby/1.8/ostruct.rb", 46]

class OpenStruct
	def initialize
	end
end
# 直前の
p OpenStruct.location_of_instance_method(:initialize)
#=> ["test.rb", 44]

o = Object.new
def o.singleton_method_foo
end
# 直前の
p o.location_of_method(:singleton_method_foo)
#=> ["test.rb", 51]

require "webrick"
p WEBrick::HTTPServer.location_of_instance_method(:mount)
#=> ["/usr/lib/ruby/1.8/webrick/httpserver.rb", 111]

set_trace_func と callcc (継続) を使ってる。activesupport の Binding#of_caller の実装を少し前にみて「うわきめー」って思って使う機会があったら使ってみたい、とか考えていたら意外にホイホイあった。やってみてわかったことは set_trace_func 内のデバッグがすごくむずかしいということだった。
もっと簡単にやる方法があるかなぁ……

しかしモジュール定義とかはどうやってとるかがわからなすぎる。現在のファイルと require してるファイルを全部見てくしかないよねたぶん……

Delegater 使ってるときにうまくいかないなぁ。そもそも call がよばれてこない。なんでだろう。

require "tempfile"
p Tempfile.location_of_instance_method(:unlink)
__END__
(eval):3:in `__send__': undefined method `unlink' for class `NilClass' (NameError)
        from (eval):3:in `location_of_method'
        from test.rb:32:in `location_of_instance_method'
        from test.rb:85

Tempfile にも unlink が定義されているはずなのに、それが呼ばれない?で、スーパークラスのデリゲートが呼ばれているように見える。どういうことだろう……

なぜか Tempfile.allocate が nil になる

むーどうして allocate が nil になるかわからない。ちゃんと Class.allocate がよばれてるみたいなのに……

もうちょい改良

  • エラーができるだけでないように
  • スレッドセーフ
  • DelegateClass みたいなのに対応
class Object
	def location_of_method(name)
		old_state = Thread.critical
		Thread.critical = true
		name = name.to_sym
		c = nil
		ret = callcc {|c| false }
		unless ret
			m = self.method(name)
			args = [nil] * m.arity.abs
			set_trace_func Proc.new {|event, file, line, id, binding, klass|
				case event
				when "c-call"
					if id == name
						set_trace_func(nil)
						c.call([:native, nil, binding, klass])
					end
				when "call"
					set_trace_func(nil)
					c.call([file, line, binding, klass])
				end
			}
			begin
				m.call(*args)
			rescue Exception
			end
			set_trace_func(nil)
		end
		ret
	rescue ArgumentError
		false
	ensure
		Thread.critical = old_state
	end
end

class Class
	def location_of_instance_method(name)
		ret = nil
		old_state = Thread.critical
		Thread.critical = true
		self.ancestors.each do |c|
			break if c == Object
			[:location_of_method, :method_missing, :allocate].each do |m|
				[c, (class <<c; self; end)].each do |klass|
					begin
						klass.module_eval <<-EOC
							alias __location_temp_#{m} #{m}
							remove_method :#{m}
						EOC
					rescue NameError
					end
				end
			end
		end
		begin
			ret = self.__send__(:allocate).location_of_method(name)
		rescue NotImplementedError, TypeError, NoMethodError => e
			p e
		end
		self.ancestors.each do |c|
			break if c == Object
			[:location_of_method, :method_missing, :allocate].each do |m|
				[c, (class <<c; self; end)].each do |klass|
					begin
						klass.module_eval <<-EOC
							alias #{m}  __location_temp_#{m}
							remove_method :__location_temp_#{m}
						EOC
					rescue NameError
					end
				end
			end
		end
		ret
	ensure
		Thread.critical = old_state
	end
end

class Module
	def location_of_instance_method(name)
		c = Class.new
		# included を実行させない
		self.__send__ :append_features, c
		c.location_of_instance_method(name)
	end
end

#-- Test

def __modules
	ret = []
	ObjectSpace.each_object(Module) do |o|
		ret << o
	end
	ret
end
before = __modules

require "rubygems"
require "active_support"
require "active_record"

module_files = {}
(__modules - before).each do |o|
	next if o.name.nil? || o.name.empty?
	o.instance_methods(false).each do |m|
		r = o.location_of_instance_method(m.to_sym)
		if r
			(module_files[o.to_s] ||= []) << r.first unless r.first == :native
		end
		module_files[o.to_s] &&= module_files[o.to_s].uniq
	end
end

require "pp"
pp module_files

ri ひく Lusty-Explorer 拡張

http://lab.lowreal.net/trac/browser/config/.vim/plugin/lusty-explorer.vim.ext-ri.vim

\li でひらくようにデフォ設定。選択して RET で、そのまま補完候補バッファで ri のドキュメントを表示する。hjkl はプロンプトの入力にとられてしまっているけど C-p C-n で動ける。(ri のコマンドを ri にきめうちしてるので変えないとだめ。二箇所ある)

ほんとはもうちょい違う挙動にしたかったのだけど、めんどいので既存のを拡張する方向にした。Lusty-Explorer は Ruby だし簡単にできてよいよい。

ってかちょっと重すぎるなぁ……gems でライブラリいれてるとやばい

あれ、なんか C-c とか C-g で消えてくれない。なんでだろう

バッファ名がまずかったらしい。[LustyExplorer-ri] だとなぜか t という名前に変わってしまう。[LustyExplorer-Ri] だと大丈夫。よくわかんないな……vim のほうがそういう仕様なのかなぁ……

2007年 10月 13日

もっと効率的にネットをフィルタリングしたい

全く有用じゃないエントリ (ただ叩いているだけとか) を効率的にフィルタリングしたいなぁ……

うまく自動化するのは言語解析しないとむりっぽいから、有用じゃないエントリ書いてるのを見たらチェックつけて、人ベースでサービスを横断して拒否できればいいかなぁ。はてなでそういうの書いてる人ははてな以外であんま見ないから、はてな内だけで id ベースのフィルタリングつくったらよさそうだ。

  • ブックマークコメを非表示にする
  • id ふくむパスを全て場合ページ内容を空に
  • LDR で id ふくむエントリをスキップ (ほってんとりとか)

あと、GM_setValue とかだとマシン間で同期するのがめんどいから、どっかに保存しておきたいなぁ。はてブの非表示ユーザを共有すればいいか。

Erubis

gems 使えるコンテキストでは全部 Erubis 使うようにしよう。Erubis::EscapedEruby つかおう。
デメリットがない

gems

なんで gem spec のファイルを YAML にしちゃったのかなぁ。Ruby で eval できるコードを吐けばもっと高速で YAML への依存が減らせるのに
この場合 YAML 使う理由ってなんだろう。他の言語から読みかきするわけじゃないしというか結局吐く YAML が Ruby 依存になるし……

とおもったら、ローカル spec は Ruby で eval できるコード吐いてた (キャッシュは Marshal)。すいませんすいません。サーバとのやりとりだけ YAML なのかな

おかね

最近は前よりはビジネスについて興味を持てるようになった気がする。どうやって収入を得て、どこから出ていくのかみたいなのがすこし気になるようになった。でもとても気になるという感じではなくて、むずかしい話になるとカットされる。

Ruby に use を実装する。

RubyGems みたいに、あらかじめ spec をキャッシュしておく、みたいなのが許されるなら、こういうのもありなんじゃないかなぁと思った。以下の実装はいろいろだめなところがあるだろうけど…… (プラットホーム依存のところがほげほげとか)

# module 名 -> ファイル名へのハッシュテーブルを作る
# ruby 起動しまくって時間がかかるので前もってキャッシュする
require "pathname"
module_files = {}
$LOAD_PATH.each do |path|
	path = Pathname.new(path)
	next if path.relative?
	Pathname.glob(path + "**/*").each do |t|
		next unless t.file?
		next if t.to_s =~ /tk/
		puts t
		ENV.delete("RUBYOPT")
		ret = nil
		IO.popen("ruby", "r+") do |io|
			io.puts <<-CODE
				# 自分自身はロード済みにしないと、ループして require している場合にまずい
				$LOADED_FEATURES << '#{t.relative_path_from(path)}'
				$depend_lib = []
				def __modules
					ret = []
					ObjectSpace.each_object(Module) do |o|
						ret << o
					end
					ret
				end

				alias _require_orig require
				def require(lib)
					prev = __modules
					ret = _require_orig(lib)
					if ret
						$depend_lib.concat(__modules - prev)
					end
					ret
				end

				def set_trace_func(*)
				end

				prev = __modules
				stdout = STDOUT.dup
				STDOUT.reopen($stderr)
				begin
					_require_orig '#{t}'
				ensure
					STDOUT.reopen(stdout)
					print Marshal.dump((__modules - prev - $depend_lib).map {|i| i.to_s })
					STDOUT.flush
					exit!
				end
			CODE
			io.close_write
			ret = io.read
			ret = Marshal.load(ret)
		end
		ret.each do |m|
			(module_files[m] ||= []) << t.to_s
		end
	end
end

require "pp"
File.open("module.cache", "wb") do |f|
	Marshal.dump(module_files, f)
end

本体

def use(mod)
	mod  = mod.to_s
	mods = Marshal.load(File.read("module.cache"))
	raise LoadError, "#{mod} is not found." unless mods[mod]
	mods = mods[mod].map {|i|
		[i, i.split(File::ALT_SEPARATOR || File::SEPARATOR).size]
	}.sort_by {|i,ii|
		ii
	}
	mods.select {|i,ii| ii == mods.first[1] }.each do |i,ii|
		require i
	end
end

use %(Test::Unit::AutoRunner)
use %(Test::Unit::TestCase)

class UseTEST < Test::Unit::TestCase
	def test_success
		use %(Pathname)
		assert_kind_of Class, Pathname

		use %(Test::Unit::AutoRunner)
		assert_kind_of Class, Test::Unit::AutoRunner

		use %(ERB)
		assert_kind_of Class, ERB

		use %(ERB::Util)
		assert_kind_of Module, ERB::Util

		use %(WEBrick)
		assert_kind_of Module, WEBrick

		use %(Net::HTTP)
		assert_kind_of Module, Net
		assert_kind_of Class, Net::HTTP

		assert_raise(LoadError) do
			use %(NotInTableModule)
		end
	end
end

Test::Unit::AutoRunner.run($0 != "-e" && $0)

テーブルは require しているファイルに定義されているクラスを除いているので、test/unit.rb みたいな require をしている場合、そのファイルにいくら定義があっても「クラスの再定義/上書き」という判断しかできないので、use "Test::Unit" とかしても test/unit.rb は読みこまれない。

あとは webrick なんかを例にとると webrick.rb は他のファイルを require するだけなので、直接はこのファイルはモジュールハッシュ上にあらわれない。use では同じ深さを持っていて、WEBrick を定義している全てのファイルを require してる。

もっとたくさんテスト書いて、実装精密にすればつかえるかなぁ……

どっかのサーバで rubyforge の gems をミラーして解析して、このテーブルをつくっておいて、パッケージ検索できるようにするとか、あるいはそのままパッケージシステムにしてしまうとかがおもしろいかなぁ。既存の gems をそのままもってこれてたのしそう。

2007年 10月 12日

外で遊ぶより手芸や工作のほうが好きだった

趣味で友達と一緒にサッカー、とか一切やったことがない。鬼ごっことか隠れん坊ならある。
外で遊ぶのが嫌いだったわけじゃない。でも日が暮れてからは外では遊べない。

デートに麦茶凍らせて持ってきそうな女の子がタイプ

404 Not Found 久しぶりに短い文で破壊力のある表現を見た気がする。

スレの途中でいろいろ書いてあって不安になるけど、結局、スレの最後のほうに書いてある

天然じゃない、アホの子じゃない、カーチャンじゃない

なんというか・・・ちょっと一般の常識とは違うけど決して間違った事はしてなくて
かつ自分の考えをしっかり持ってる賢そうな子というかだな
とにかく違うんだよ。

これだと思う。というか、読みながら「違うちがうんだよ」って日記に書こうとしていた内容がほんとにまるっきりこれと一緒で「おお」って思ってしまった。笑ってしまう。(もちろん途中のを否定してるわけではなくて、スレタイから想像したのが、おれの場合はこうだな、っていうことで)
ほんと、天然でも、のほほんでもない。惑わされずに生きてる日常に生きる子だと思う。

日記でまとめブログに言及したのは初めてな気がする。

素朴に日常的に、強く生きる女の子の表現

そういうのは、記号的に表現できない。例えば「ツンデレ」や「どぢっこ」みたいに、一言でうまくいい表せたりできない。特徴がないから、そういう子たちを描写するには、まわりのものを正確に表現してやる必要がある。「形」を表現するには、形をそのまま作る以外にも、それの「型」を作ってあげることでもできる。形がそのまま作れないなら後者を選択するしかない。型を精密に表現しさえすれば、その型の空洞部分の抜けおちた形が見えてくる。透明人間に砂をかけていくみたいに、表現をまぶしていく。

「看守は奴隷にパンを売りつけ 天使は太った裁判官に身体を預ける」

1st Full Album "the GOLDENBALLCITY"

ネギは完全におくら入りかw GOLDENBALLCITY って感じではないし仕方ないかなぁ。そのうちでるのかなぁ。

Apple star storyS がスタジオ収録になるのかな。楽しみだなぁ。あと Judgement; と黄金の鐘は結構前からあるやつだなぁ。前の公式に歌詞があったやつだ。

駄目人間衝動

駄目人間衝動

よくわからないけれど、駄目人間ってのは、駄目人間に向かおうとしてそうなると思う。とにかく全部駄目にしたい感じだ。もう駄目だって状況がどうしても必要だと思うようになることへ、こいつはもう駄目だと思われるように、本当はゼロへリセットしたいのだろうけど、それはうまくいかない。ゼロにするための努力があると、それができるとゼロへリセットする必要がなくなってしまうからだ。結果的に、誰かと関係を持ってしまった人間というのは、リセットしようとするとマイナス方向にまでいってしまう。そこで一度死に戻るか、本当にこの世界からいなくなる必要がある。

おれは今いまいち現実に生きているという感じがしない。ずっと夢の中にいるような感覚だ。どんどん駄目になっていく感じだ。しかし外に出て散歩をすると、風の匂いや虫の音、そこらの家から聞こえる生活音、肌に感じる空気の冷たさ、地上の明りに照らされる雲に幸せを感じてしまう。彼女なんていらないし、他の楽しいこともなくていいと思えてしまう。完全だ。維持できないが、このまま死んでもいいとさえ、感じられる。けれど生きている。

たぶん今日おれはそういうことからまた引き戻され、沈んでいくだろうけれど、それもまたおれが、ぼくが望んだことなんだろう。どうせまた徹夜をする。眠れないからだ。

集中せよ。なぜおれがやるべきことをできないのか。なぜ自分に甘えているのか。行動できないこと。「行動すればいい」がなぜ通用しないのか。努力すればいい、がなぜ通用しないのか。そういう彼らがどうしてそういうシステムを手に入れることができたのか。

でも大丈夫だ。どんなときだって死んだら全てが終わる。とことん駄目になっても、まだ生きたいと思うならそれでいい。

恥かしいと思うこと

そうだね。そうだ。

中学のときはまだ、友達っぽい人が今よりいて、自分の書いた文章とかを読まれるのは恥ずかしくて嫌だった。だから書かなかった。でもいつのまにか、そういう「友達」と付き合うことがなくなってから、恥ずかしさをあまり感じなくなった。同時に、誰か特定の人に何かを言うというのがひどく苦手になったので、どこかでそれを書かざるを得なくなった。いまでも「これは恥ずかしいことなんだろうなぁ」っていうのが解ったりはするし、まだ名残で書けないこともあるけど、なんだかどうでもいいことに思えるようになった。これによって相手がひいてしまうなら、別にそれでいいと思うようになった。彼らはぼくと違って急がしいから、ぼくの話を聴く暇はないし、ぼくもわざわざそれをひきとめて相手の時間を使ってまで何かを話そうという気持ちにはならなくなったのだ。会話の殆どはくだらないことだ。めんどうくさい愛想笑いをされるのは嫌だし、こちらだってしたくない。

into the headphone

私って少し異常なのかなって少し思って、ううん、こんなの誰でもあるんだって思いなおす。こんな下らないことにでも、アイデンティティを見出そうとして、馬鹿みたいだなぁって少し自己嫌悪。

私は音楽を聴くのが病的にって言える程好きで、だから、家でも外でもヘッドフォンをして、もう少し時代遅れのプレイヤーから音楽を流してる。私はこうしていないと落ち着かないみたい。一度プレイヤーの電池を切らしちゃって、そのまま出かけたことがあるのだけれど、どうしても不安でしかたなかった。小学生のころ一人で留守番したときのような、そんな不安。もう、あんな気持ちになるのは嫌だなぁ、なんて思いながら、私は今日も学校へいく。

少しだけ歩いて、少しだけ電車に乗って、また少しだけ歩く。そうすると私が通っている学校。教室に入る。誰もいない。一番乗り。少し嬉しい。少し寂しい。自分の席に座って、窓から空をみて、いい天気だなぁって思う。そしたら急に、頭に唄が浮かんで、聞きたいなぁって思いはじめて、まだ途中なのに、曲を変えてしまう。ごめんね前の曲さん。

そうやってぼーっとしてると、みんなが教室に入ってくる。担任の先生が来て、ホームルームをする。私はヘッドフォンをとる。そういえばこの前、ヘッドフォンしたまま眠ってしまって、先生に叩き起こされたなぁ。とか思い出してみたり。少し笑ってしまう。馬鹿だなぁ。

放課後になって、私は部活に入ってないから、家に帰る。別に入りたくないわけじゃなかったんだけど、なんだかタイミングを逃してしまった。だから、放課後は少し詰まらない。家に帰っても、やることなんてない。

セーラー服もそのままで、部屋に横になって、天井を見る。白い天井に、お母さんが作ったかさに包まれて、白熱灯がぶら下がってる。そして、もっとちゃんと笑えれば、男の子も寄ってくるのかなぁ、でも、もとがだめかなぁ、なんて、自分の恋について、考えてみたり。まあ、そんな日もあるのですよ。

そんなこんなで、ご飯を食べて、お風呂に入って、髪を乾かす。私の髪の毛は、自慢じゃないけど綺麗って褒められる。私も綺麗だと思う。って、やっぱり自慢だね。でも、ときどきこの髪を短く切ってしまいたいなぁ、なんて考えてしまう。なんでだろう?

寝る前に、ふとんに仰向けになって、好きな唄を少し聴く。目を閉じて、ヘッドフォンの奥の風景を想像する。そうやって見える風景がすごく好きで、なんだか、また明日も生きていけるかなって思う。そんなこんなで眠くなって、また明日。

明日は、何かいいことがあるかなぁ?

もともと lowreal.net は out of the headphone であった。しかしながらいつ変えたか忘れたけれど out of the washer になっている。ここは into the headphone であり、もう一つは in the headphone だ。分ける意味なんかない。もっとごちゃごちゃいいはずだ。そして一番ここが書くのがめんどうくさくない。自動的に手が動く。

さっさと仕事しろ

はいはいだめだめ。おれだめだめ。集中しろもっと。

外明るい。すこし赤い。「すこし赤い」という繋がりは、夏祭りと浴衣を着た女の子を想像させる。よくある想像だ。鳥居 π

人間的であることを忘れる。ずっとずっと。もうなんも書くことなんてない。いつも全部書いている。DEL おすといい。おれは恵まれすぎた。たくさん消費した。生み出すことができない。芸術的センスがないことが嫌だ。それはだれだって、本当は持っているはずなのに、たぶんおれだって持っていたはずなのに、ぜんぜんいまはない。どこ消えたんだか。センスがない。高校のときにはじめて気付いた。ずっと感じている。みんな羨ましい。

表面的なことができたってしかたがない。意味がない。誰にも伝わらない。

知らない。ずっと逃げ続けている。いつからだかわからない。こうならない方法があったかわからない。これからどうすればいいかずっとわからない。笑いながらこういう文章を書き続ける。ずっとノスタルジック。たしかに。無限ループたのしい。変わらない。灰羽思い出した。あれは DVD 欲しいよなぁ。

誠にさわやかな朝です

誠死ね。「真に」と「誠に」ってどう違うの。

資源ゴミの日なのでゴミ置き場までひとっぱしりしてきたのだけれど、やはり朝の空気というのは気持ちいい。SC440 のダンボール↑を捨てた。でかい。清々しい朝だ。チョコレートをいくつか食べた。今は漉し餡のもなかを食べている。

ソドシラソ / Syrup16g

ひさしぶりに聴いたらグッっときた。これ、なるほどなぁ。なるほど。

こういう発見があるものが大好きだ。

スルー力について言及してる。さすがイガラス。時代を先どり。

誰か何か言ってるぜ
聞き流す
振りして真に受ける

僕は自分の言葉なんて全く持っていません。全て誰かから借りられた言葉です。

戦争

ぼくは戦争をしにいくわけじゃない。これからもずっと、そんなことする気はない。でも、多かれ少なかれ、戦争のようなものを日々続けていくことになるだろうと思う。ぼくの状況はいつもいつも「大したことじゃない」

あまり本を読んでいない。でも本は好きだ。読まないのに本が好きなんておかしい。数えられるぐらいしか本を持っていないし、読んでいない。一番読んだ時期がそもそも高校のときで、大学に入ってから今まではもうぜんぜん読んでない。ラノベと今まで買った本と再読しかしてない。でも再読するたびに本に発見がある。頭が悪いから、一度じゃ絶対に理解できない。再読といっても最初から全部読むわけじゃない。「あのシーンってどこだっけ」と思ったときにそこから読みはじめる。

この大きな掌のような夜が一切の星座を統べながら次第にそのひろがりを閉じ、やがては暁の爽やかな薄明が東の空に星々のまどろみを消し去って行くその時に、

あの本なんだっけ

従兄弟の少年とバス停と病院がでてくる話で、冒頭の季節の描写がなんか印象に残ったやつがあったんだけどなんだっけ。短編だったはずなんだけど……

と書いたところで、どうせ持っている本が少ないのだから全部冒頭だけ読んで探せばいいだろと思いさがしたら、いよいよこれになかったら分からないなってところで発見できた。めくらやなぎと眠る女 (蛍・納屋を焼く・その他の短編) だった。内容をぜんぜん覚えてなかったので (女の子が病院にいることは覚えていた) 今読んでみたけど、よくわからなかった。そのうち分かるのかな。一生わからないかもしれない。

日記

おれはこんなこと書くことで何がしたいんだ? 誰かに「あいつってはあんなこと考えてるぅ」とでも思われたいのか。本当におれは気持ち悪い。でもやめることができない。日記により死ぬことを考えられるようになる。おれが死んだときに「あぁこいつ死んだのか」とそのうち誰かが思えばいい。そう思うことで、「いくらか悔いはあるけれど、死んでもいいか」という気持ちになれる。もちろん実際死ねるかどうかは関係ない。たぶん死ねないだろう。でも死んでもいいか、という気持ちになれることが大切だと思う。

これから、ネット世代が死んでいくと、ブログサービスはどうなるんだろう。もちろん運営会社が潰れない限り、リソースはもとの位置に残りつづけ、潰れたとしても、あらゆるところにキャッシュされたリソースが残るだろう。インターネットがなくならない限り。死んだ人のミームがインターネットをさまよい続け、誰かに影響を及ぼす。面白い。

でもインターネットもいつかはなくなる。想像しているより早くなくなるかもしれない。おれが生きている間に失くなるかもしれない。そういうものだ。基盤はみんなが思っているより全然ゆるい。

さらにいつか人類も地球もなくなってしまう。そのとき、そのあとまで、この宇宙ないし世界に、何か残せるだろうか? 何も残せない。形のあるものは残せない。内なる何かをどこかに留めらるかもしれないけれど、今の時代ではそれはないことになっている。どっちでもいいか。

髭剃り

ひさしぶりに髭を剃った。伸びすぎていて電動のやつでは無理なので普通の剃刀 (というのはおかしいか。ホテルとかでもらってきたやつ) で剃った。痛い。若干血がでた。若干若くなった。

もっとさがさないといけない

ano日記はやっぱりすごかったんだよなぁ。ほんとに残念だ。

ハルヒは実際にはデレているけれど、キョン主観なので表現されていないだけ

キョン主観なのにキョン対してデレているのが描写されていたら「あいつっておれに惚れてるんだぜ」ってキョンが言っているのと同じ意味です。ハルヒは実際にはもうすこしアプローチをかけていますが、キョンが逃げているため、それが描写されず、ちょっとおかしい言動が目立つ変な女が強調されているのです (「いやいやいや、こんな女だぜ。ないないない」みたいに必要以上の表現をしている)。完全に眼がそむけられない事実だけ語られているわけですね。

と考えたけど、作品の文体をよく覚えていないのでちゃんと終始キョン一人称なのか覚えていないのでした。(鶴屋さんのなんちゃらの描写があったからところどころに神視点が入っていたような気もする)

It's All Text! 使うことにした

C-f (Vim の Command モードとかのバインド) で開くようにしてみた。

でも input type="text" には無力なんだなぁ

今日の ~/tmp/test.rb

require "rubygems"
require "pathname"
require "active_record"

ActiveRecord::Base.establish_connection(
	:adapter => "sqlite3",
	:database => "test.db"
)

class Article < ActiveRecord::Base

end

~/tmp を定期的に晒すとか面白そう。でもだいたい公開できない。

gerry++

はらいたい