2008年 05月 17日

YAPC::Asia 2008 Tokyo

(写真とは関係ないけど) Moose を使いはじめた。奥さんの最適化の話なんかすごかったけど、あれ自分でやろうと思ってもできないよなぁ……

2008年 05月 16日

git hub ってうったら github の該当ソースツリーを開くようにする

[alias]
	hub-url = !ruby -e 'puts (%Q{http://github.com/%s/%s/tree/master/} + %x{git rev-parse --show-prefix}) % %x{git config -l}.match(%r{^remote.origin.url=git@github.com:([^/]+)/([^.]+).git}).captures'
	hub     = !open $(git hub-url)

http://github.com/guides/jump-to-github-from-your-repository のサブコマンド版です。サブディレクトリでもちゃんと飛ぶようになってます。

hub-url を分けてるのはリモートの git で open が使えないときでもコピペでいけるようにするため

2008年 05月 15日

YAPC::Asia

きてるよ!

生 Larry Wall が目の前にいる。すごいなぁ。人気だ

2008年 05月 14日

3ヶ月使わないものは一生使わない

これ、あてはまらないことはもちろんあるんだけど、一つの指標として持ってるなぁ。3ヶ月がなぜか単位だなぁ。

小学生のいぢめと一緒なので、一瞬たりとも反応をかえしてはいけない。見てみぬふり、心にとめる、そのことについて直接的なアウトプットを一切出さない、別の方法でアウトプットする、それが一番良いと思った。メモメモ。変換なしに脊髄反射のアウトプットを出しても、それでは情報処理装置としての人間の役目を果たしていないし、環境もよりダメな方向に行くだけで意味がない。

日記

両親が昨日から旅行に行っているので、いつも母親の部屋に入りこむ猫がおれの部屋にくる。そのせいで5時ぐらいに起こされる。「げー」って思ってもっかい寝たら7時20分ぐらいに起きる。目覚ましが鳴ったはずだけど全く気付かなかった。あぶない……遅刻メールの作法がよくわかっておらず、そのメールを投げるとき考慮すべきことが多くて面倒だなぁっていう衝動で遅れないように気を使う。ネガティブで非コミュっぽい。表面的にはまじめに見えるだろうけどそうじゃない。

ヤカンでお湯を沸かしてインスタントコーヒーを作る。砂糖を入れまくる。カーテンを開けて、スティックパンを二つ食べる。食べおわったら部屋に戻り、Windows 機で開きっぱなしのニコニコのランキングを更新する。面白そうなのがなかったので電源を切り、MacBook でメールを確認し、Fastladder でレート5のフィードを読む。

時間になったので MacBook を閉じ、ケースに入れてからカバンに入れる。AC アダプタもカバンに入れる。サイフと定期を右ポケットに、小銭入れとケータイを左ポケットに入れる。ポータブルプレイヤーの電源を入れてヘッドフォンをする。カバンを背負い家を出る。鍵を忘れずに掛ける。

駅まで行く途中で何度か MacBook と AC アダプタを忘れていないかを確認する。忘れると死ぬからだ。

駅につくとだいたい電車がくるまで5分ぐらい余裕がある。天気や歩く速度でぎりぎりになったりもするので余裕がないと不安だ。行きの電車は乗り換えるまでまず座れない。ドアに寄り掛かってぼーっとする。立ちながら寝る。乗り換えで各駅停車に乘る。乗ったら座って次の乗り換え駅につくまで、カバンに顔をうずめて眠る。そして乗り換えをさらに二回する。今日は接続がよかった。よかったりわるかったりする。よくわからない。


帰る。電車がくるまで10分ぐらい待つ。都心の数分ごとのダイヤに慣れすぎている。タイミングが合いさえすれば眠る。乗り換え駅で起きたとき、右目のピントがどうしてもあわなくてぼーっとした。左目を閉じてぼんやりとしかピントがあわない状態で目の前の光景を見ると不思議な感じがした。乱視だからか頭を動かすと一定の箇所がピントがあったりして不思議だ。眼鏡をかけるほど眼が悪くないので想像しかできてなかった表現を思いかえす。ちょっと体感できた。時間が経つにつれて右目がなおってくる。

駅を出て、帰ってから何を食べるか考える。どうでもいい気がした。鍵をあけてリビングで、とりあえず猫の姿をさがす。元気そうだ。部屋に戻ってカバンをおろし、MacBook と AC アダプタを出す。めんどうなので繋がない。Windows 機の電源を入れる。押すだけ。風呂に入る。

出てからログインしたり screen のセッションを復帰させたりする。IRC のログを読み、メールをチェックする。フィードをレート3まで読む。ニコニコ動画を見る。絶望放送を聞く。

なんとなく日記を書く。傘を忘れたことに気付く。

2008年 05月 13日

Io って頭おかしいなぁ (いい意味で)

curlyBrackets を知った。

Object curlyBrackets := Object getSlot("method")

foo := {
	"aaa" println
}

bar := {a,
	"bbb" println
	a
}

foo

bar(getSlot("foo")) # method は普通に書くと実行されてしまうので getSlot する必要がある。
aaa
bbb
aaa

ちょっと他の言語に近づいた感じ。

もう少し変態的にしてみる

def foo (mes) {
    mes println
}

こういうふうに書けるようにするために def メソッドを定義する

def := {
	name := call message next name
	args := call message next arguments map(i, i name)
	meth := call message next next
	next := meth next

	# cut message chain
	meth setNext(nil)

	# set the method to caller context
	call sender setSlot(name, call sender doMessage(meth))

	# set arguments list
	call sender getSlot(name) setArgumentNames(args)

	# pass to next message
	call message setNext(next)

	# return the method
	call sender getSlot(name)
}
# 引数なしなら仮引数省略可
def hogehoge {
	"hogehoge" println
}

def piyopiyo (mes) {
	mes println
}

# 引数なしなら括弧いらない
hogehoge
hogehoge()

# 引数ありなら括弧必須
piyopiyo("foobar")

Foo := Object clone do (
	def foo (mes) {
		mes println
	}
)

Foo foo("alert")

書いた式がどうコンパイルされたかは (前にも書いたけど) 以下のようすればわかる。

Message fromString("def foo (mes) { mes println }") code println
#=> def foo(mes) curlyBrackets(mes println)

call message は呼びだしもとのメッセージチェイン (def foo(mes) curlyBrackets(mes println)) をさしてる。call message next は今のチェインの次、すなわち foo(mes) curlyBrackets(mes println) で、call message next name で先頭のメッセージの名前がとれる。メッセージを自分でとって doMessage することでメソッドを作って、呼びだしもとのコンテキストにセットする。setNext でメッセージをチェインを切ったり、スキップしたりする。

実際もっと簡単に

def := method(
	ret := Object clone do (
		foo := method(
			self args := call message arguments map(i, i name)
			self
		)

		curlyBrackets := method(
			meth := method() setMessage( call message argAt(0) ) setArgumentNames(args)

			context setSlot("foo", meth)
		)
	)
	ret context := call sender
	ret
)

def foo () {
	"faaa" println
}

foo

とかだと、method_missing 相当がないのでうまくいかない。(これは動くけど、foo 決めうちだからうごいてる)

method_missing に相当するのは forward だった

2008年 05月 12日

フィルタリング

フィルタリングは対象を自分で決めないと意味ない。