2007年 04月 05日

四月なのにガラスの墓標がちょうどいい

完全に寝てて新宿で降りそこねそうだった。
総武線に乗って外を見てたら12時になってる時計があってあせった。

非同期を同期っぽくする方法

callcc
コールバックからもとの継続を呼ぶ (一度メソッドから抜ける)

# 同時にいくつも呼ぶことを想定していない
	def hoge(sender)
		@foo.set_callback(self, :event_callback)
		@foo.load_something 
		if callcc { |@c| false }
			p "loaded"
			@c = nil
		end
	end

	def event_callback
		@c.call(true) if @c
	end

Queue
Queue#pop のブロッキングを使う

# 同時にいくつも呼ぶことを想定していない
	def hoge(sender)
		@q ||= Queue.new
		@foo.set_callback(self, :event_callback)
		@foo.load_something 
		@q.pop
		p "loaded"
	end

	def event_callback
		@q << :callback
	end

なんかもっと簡単なのがあるのかなぁ

webview たん

もうあきらめて全部のページについて WebView を作るようにしたみたけど、これもなぜかうまくいかない

		t = Transition.alloc.initWithType(CGSCube)
		t.setOption CGSLeft
		t.freezeWindow nil # freeze fullscreen
		@mainWindow.setContentView @pages[@page]
		@mainWindow.display
		@mainWindow.setViewsNeedDisplay true
		@mainWindow.flushWindow
		t.invoke(1)

@pages に WebView のインスタンスがはいってる。けどなぜか setContentView と display その他ではちゃんときりかわってくれない! なんでだ

WebView 一個だけにして、ページ内 JS からシステムエフェクトをよべるようにしたほうがスマートな気がした。

なんだかすごく酔ってしまった。
でも家に帰ってきてPCを開くとちゃんとパスワードは入力できるっていうのが、習慣はこわいなぁと思う瞬間でした (今すごくよってる)

というか酔っていると俺様実行エンジンが乗り換えとかを自動化するモードで動いてくれるのでいつも酔っているほうがいいのではないかと思いました。