2007年 09月 28日

gerry++

HHK が日本語キーボードあつかいになる

http://support.microsoft.com/kb/927824/ja (XP でもおなじ)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters 
LayerDriver JPN	REG_SZ	kbd101.dll
OverrideKeyboardIdentifier	REG_SZ 	PCAT_101KEY
OverrideKeyboardSubtype	DWORD 	0
OverrideKeyboardType	DWORD 	7
2007年 09月 27日

小さなころからやっておくべきだったこととか

そういうのをやってない。うちでは、芸術系のそういうことを一切やってない。おれはボーイスカウトを小学校低学年からちまちまやっていたけど、兄貴はそれさえやってない。ボーイスカウトで、これから得ようとしたら絶対に無理なこと、っていうのはそんなにない。ボーイスカウトをやっていても、特技になるようなことは特にない。ここで「健全な精神」とかいいだすやつがいるかもしれないけど、ぶち殺すぞヒューマンって感じだ。ちなみち「ぶち殺すぞヒューマン」の元ネタがわからなくて今ぐぐってみた。ヘルシングなんだ。読んだことない。たぶん伺かのさくらのセリフで覚えた(きもい)

自信になりえるような特技がとくにない。

おれ好かれる要素がなにひとつないな。更めて思った。あっても持て余すからいいよ。そういうことにしておこう。

やっぱおれは、コンピュータいぢるのがすきなんだなぁ。シェルの環境改善したりとか、やりたいことをやるための最もスマートな方法を探すとか、SKK を使いこなすとか、なんでもいいけど、そういうのは楽しい。ぐぐったり、man をみたりしながら、そんな情報の森だか洞窟だかを冒険して、生き残る術を探すのだ。現実の冒険よりも圧倒的にリスクが少なく金もかからず、できた方法は他の人と共有できる。

「おもしろいね」=「え、これどうやってるの」>>>|超えられない壁|>>>「すごいね」

gerry++

おれの腹もクラックされてた……

chokan を CodeRepos にうつした

http://coderepos.org/share/wiki/chokan


SafeEval は http://coderepos.org/share/browser/lang/ruby/safeeval に分離して gem に
まだリリースしてない。わすれてるテストがありそう

グラフの書きかたがわからない。

あのよくみる、うねうねしたやつ。一個要素ふえるとうにょーんって動いたりするじゃないですか。だめだもう。そういうのわかんない。ぜんぜん。あたまわるい

zsh のプロセス置換 =() と <() の違い

/dev/fd とかつかうのが < で、常に tmpfile つかうのが =、でいいのかな。一応 man よんだけど英語わかんね

これは例えば lv だと違いが顕著

$ lv <(date)
FileStretch(): Illegal seek
exit 255

$ ls -altr <(date)
prw-rw----   1 cho45  cho45  28  9 27 02:50 /dev/fd/12 # Mac OSX
lr-x------ 1 cho45 cho45 64 2007-09-27 02:51 /proc/self/fd/11 -> pipe:[2297610] # ubuntu Linux

$ lv =(date)
# ちゃんとみれる

$ ls -altr =(date)
-rw-------   1 cho45  wheel  28  9 27 02:51 /tmp/zsh0WJFb7

あと非同期かどうかも関係あるっぽい

$ cat =(date) =(sleep 5) =(date) =(sleep 10) =(date)   
木  9 27 03:59:16 JST 2007
木  9 27 03:59:21 JST 2007
木  9 27 03:59:31 JST 2007

$ cat <(date) <(sleep 5) <(date) <(sleep 10) <(date) 
木  9 27 03:59:54 JST 2007
木  9 27 03:59:54 JST 2007
木  9 27 03:59:54 JST 2007

前者は 15 秒かかったあと全部一気にでてくる。
後者は随時出力されながら、総合で 10 秒かかる。(順番は守られる)

zsh のチートシート

http://d.hatena.ne.jp/rubikitch/20070925#zshcheatsheet これみて、おおなるほどと思ったのでやってみた。
bindkey で超絶悩んだ……けど結局悩み損だった(つかってない)

http://lab.lowreal.net/trac/changeset/887

cheat-sheet は直接バインドせず、C-[ : して execute: だしてから cheat-sheet 実行するようにしてみた。キーバインドするほどではない気がしたのと、vi っぽくコマンド実行するようなのがいいかなみたいな。いやそれなら help だろ、っていうか help! もやらないといけないけど help! は定義できなそうとか今書きながら考えてたけどやってみたらできた

help! () { zle -M "E478: Don't panic!" }
zle -N help!

zsh の = (which的な意味で)

$ ls =ls
/bin/ls*

どうみても ls `which ls`より使いやすいです今まで本当にありがとうございました (which へのメッセージ的意味で)。

If a word begins with an unquoted `=' and the EQUALS option is set, the remainder of the word is taken as the name of a command. If a command exists by that name, the word is replaced by the full pathname of the command.

SC440 がきた

XP Pro をセットアップした。CD ドライブが家にあるのどれつないでも認識しなくてかなりこまった。なんか接触不良っぽいけどよくわからない。基盤側のコネクタを一回はずして押しこんだりしてやっと認識した。と、おもったら XP インストール中に 55% まできたところでまた認識しなくなって再インストール。なんなんだ。 (BIOS ですら認識してなかった)

起動してから付属CDからドライバインストール。なんかやっぱCDがうまく認識されない。まじこまる。なんどか射れたり抜いたりやってると認識したりする。よくわからない……スピンインすると割と安定する気がする。スピンアウトするとなかなか認識しない。これはドライブの問題っぽい?

前に使ってた HDD (250G) もうつしたけど、手元のケーブルだと SC440 の下の HDD ケースには入らないので、フロントにつっこんだ。ケーブルのとりまわしを変えるのが大変だった。(電源の変換ケーブルももってない)

  1. Chipset ドライバ
  2. reboot
  3. Nic ドライバ
  4. reboot
  5. オンボードグラフィックドライバ
  6. reboot
  7. Firefox
  8. PCIe x4 mod (はんだごて。端の1pinがうもれたけど GND なのでちょっと不安定になるだけと楽観視)
  9. 前つかってたうるさいグラボを装着 (GeForce 6200)
  10. nVidia のドライバインストール
  11. Parity Error でるので http://pc.usy.jp/wiki/index.php?PowerEdge%2FParity%20Error%B2%F2%BE%C3%CB%A1
  12. WPCRSET 自動起動
  13. IE7 Standalone
  14. synergy
  15. foobar2000
    1. Columns UI
    2. 保存してあった設定から復元
  16. Last.fm
  17. WAVIO SE-U55GX をつける (前のPCだとプチプチノイズはいって大変だったけど、今回はない)
  18. smb でマウント
  19. マイドキュメントをマウントしたドライブに設定

ぶっ壊れたPCのメモリが利用できないのがかなしいけど、圧倒的に静かになってよかった。余裕があったらメモリ増やしたい。512 でも使わないからそんなに困らないけど

2007年 09月 26日

環境に一切干渉できない eval

#!ruby -Ku

# クラス化して Module.new.instance_eval するようにしてみる。
# まだなんかあるかなぁ……

class SafeEval

	def safe_eval(code, tm=1)
		result = nil
		tg = nil
		th = Thread.start do
			# スレッドグループを作り、
			# 新たなスレッドはすべてこれに所属させる。
			tg = ThreadGroup.new.add(Thread.current)
			$SAFE  = 4
			result = Module.new.instance_eval(code)
		end.join(tm)
		# 生成されたスレッドをすべて削除
		tg.list.each {|t| t.kill }
		raise TimeoutError unless th # タイムアウトした場合 Thread は nil を返す
		result
	end

	alias eval safe_eval

end

if $0 == __FILE__
	require "test/unit"
	class SafeEvalTest < Test::Unit::TestCase

		def setup
			@t = SafeEval.new.taint
		end

		def test_safe
			assert_raise(SecurityError) do
				@t.safe_eval("puts ''")
			end

			assert_raise(SecurityError) do
				@t.safe_eval("$foo = :foo")
			end

			assert_nothing_raised(SecurityError) do
				@t.safe_eval("def hoge; end")
			end

			@t.safe_eval <<-EOS
				def safe_eval(code)
					"Nice boat."
				end
			EOS
			assert_not_equal("Nice boat", @t.safe_eval("nil"))

		end

		def test_safe_access
			assert_raise(NoMethodError) do
				@t.safe_eval("@foo << :bar")
			end
			assert_equal(nil, @t.instance_variable_get(:@foo))

			assert_raise(NameError) do
				@t.safe_eval("@@foo")
			end
		end

	end
end

まだなんかあるかなぁ……
SafeEval クラスは毎回つかいすてる。
インスタンス変数は無名 Module でさよならする。
クラス変数は SafeEval クラスが untaint である限りつくれない。

chokan 更新

Eval はとりあえずオフにしたまま。

とりあえず改行をちゃんととりのぞくように
http://lab.lowreal.net/trac/changeset/879
invite されたときほいほいついていかないように
http://lab.lowreal.net/trac/changeset/880
operator に設定されたマスクからだけ invite をうけるように
http://lab.lowreal.net/trac/changeset/882
@もらったらくれた人の@を奪ってから@を捨てるプラグイン
http://lab.lowreal.net/trac/browser/chokan/trunk/plugins/always_no_op.rb

@うばうのは AutoOP でループしないようにだけど、普通は JOIN で処理してて大丈夫だろうから奪わなくてもいいかもしれない。チャンネル唯一のオペレータが chokan に@あげるとチャンネルのオペがいなくなる。

2時ぐらいからずっと寝てた。仕事しろ。


海岸に近い、三日月型の地域。回りは山で、斜面が結構きつい。鎌倉に近いけど、もっと狭い。街の中心に HMV タワーというのがある。そんなに大きいわけではない。そして、それを新しくしたタワーが建築途中、だったのだけど、中止されて、既にあまり綺麗ではない。中世ヨーロッパっぽい模様のタワーなのだけど、土台のところだけ。
そこそこよく見る、坂道のわかれ道はこの街の少しはずれの場所だった。

なにか大きな大災害がおこる。内容はよく覚えてない。とにかくたくさん人が死ぬ。