前にも書いたけど完全じゃないので。たぶん、これでいいはず。

def safe(lvl, tm=1)
result = nil
tg = nil
th = Thread.start(lvl) do |level|
tg = ThreadGroup.new.add(Thread.current)
$SAFE = level
result = yield
end.join(tm)
tg.list.each {|t| t.kill}
raise TimeoutError unless th
result
end

ThreadGroup を新しく作り、それにカレント実行スレッドを突っ込んで、信頼できないコードから生成されるスレッドを全てこいつの所属させ、実行終了したら kill! kill! kill!

IRC BOT の Ruby コード実行機能をこれにした。まぁしかし! SEGV されたら終りというどうしようもない脆弱性がありますけれども。

  1. トップ
  2. ruby
  3. Ruby コードを安全に実行する。
  1. トップ
  2. prog
  3. Ruby コードを安全に実行する。

def foo(a, b)
yield a + b
end
def fop(a, b, &block)
yield a + b
end
def foq(a, b, &block)
block.call a + b
end

引数に &block を書かないとブロックをとるメソッドなのか取らないメソッドなのかわかりにくい。でもなんか &block を書くとダサい。

二番目の方法だと block という引数を使ってなくてキモい。三番目の方法は一般的なコードじゃなくてキモい。

さて、ホントは上のコードの block.call は block.yield (引数のチェックをしない) になるんだろうけど、NoMethodError がでる。なんでだろ。

$ ruby -v -e 'Proc.new {|t| puts t}.yield("foo")'
ruby 1.8.1 (2003-12-25) [i386-cygwin]
-e:1: undefined method 'yield' for #<Proc:0x100e6dd8@-e:1> (NoMethodError)
exit 1
  1. トップ
  2. ruby
  3. Ruby, ブロック引数をとるメソッド
  1. トップ
  2. prog
  3. Ruby, ブロック引数をとるメソッド

夢とは別によく草原を想像する。草がいっぱい緑色で、花が咲いてたりするところ。おなかが減らない、食べることが任意な世界で、何もしなくても生きていける。ホントのとこそういう場所にいられるならコンピュータなんぞいらない。歩き回って、寝て、そこらに見つけた植物に名前をつけて遊ぶ。飽きるだろうか。いやたぶん飽きないと思う。

生まれたときからそういう世界に属しているならいいけれど、自分は既に生まれてしまっていて、喧騒の中で生きている。だからこういう想像をするときはだいたいいつも「どこでもドア」が付属する。「どこでもドア」の向こう側に今いる喧騒が広がっていて、閉めると音がしなくなる。

「どこでもドア」と俺の部屋にある洗濯機は似てる。

  1. トップ
  2. self
  3. 草原について
  1. トップ
  2. life
  3. 草原について
  1. トップ
  2. imagenation
  3. 草原について

Amazon にジャケがないので公式に直リンするけど、メレンゲの初恋サンセットのジャケはヤバいと思うよ。汗でた。汗。

買うしかないけど金がない。ぎぎぎ。

タワレコ のポイントが 1k 分溜まっていたのでタワレコ行って来た。

  1. トップ
  2. music
  3. なんか汗がでるジャケ

IRC ネタ。

2005年1月の指向性メモcreateElement()で作られたエレメントノードは名前空間がnullになるはずなのに、親要素のデフォルト名前空間を引き継いでしまっている。 って書いてあるけど、何か違う気がする。

確かに DOM Core の createElement の項には localName, prefix, and namespaceURI set to null. とは書いてある (これを根拠にしているかは定かじゃない) けれど、これは名前空間っていう概念がないから、名前空間関連のプロパティにはとりあえず null という値を入れておけよってことで、名前空間URI を空値に設定するっていう意味じゃない気がする。code でマークアップされてるしね?

そもそも自分も書いたことあるんだけれど、名前空間がnullになるっていうのが何かおかしいかもしれないとも思う。Extensible Markup Language (XML) 1.0 にも Namespaces in XML にも null という単語が出てこない。名前空間が null っていう表現が出てくるのは XPath の仕様の日本語訳で、原文の null には code 要素がついていないので、ただたんに“空”といいたいだけなんじゃないかとか。でもそうだったら empty って書くかなぁ……仕様書だし紛らわしいふうには書かないから、あるいは俺の読解力が糞なおかげで違うかもしれない……

まー結局のところ createElement に名前空間の概念がそもそもないので単純に引数の nodeName を引数の名前にするよってことで、それ以上は実装依存なんじゃまいか。みたいな? 併用することは稀なので。。。

しかし自分の解釈があっているかどうかは永遠に謎だ。確かめようがないから困る。誰に聞けばいいのか。その人が言っていることが正しいのか、正しいとしても自分がそれを正しいまま受け取れているかは確かめようがない。あーアレだね。アレ。理解は誤解の総体 (だっけ?) ってヤツ。 わかりあえているように感じるにはできるだけ曖昧な表現をすればいい。アレとかソレとかを、明確にしない「ありえねー」とか。

  1. トップ
  2. xml
  3. 名前空間が null?
  1. トップ
  2. dom
  3. 名前空間が null?
  1. トップ
  2. xslt
  3. 名前空間が null?

イントロでピアノでびびった。素敵だ。てか PV がなんか素敵だからちゃんと見たい。次のシングルの extra あたりに入れて欲しい。

PV といえば LILY の PV が素敵。前も書いたけど好きだな。

それとスカーレットの PV もちゃんと見てない……

ていうかね。PV をちゃんと見せてくれないのはもったいない。せっかく作ったのに贅沢な!

  1. トップ
  2. music
  3. LOST IN THE AIR 試聴

今日の朝夢見たけど書くのを忘れた。唯一覚えているのは肩ぐらいまでの髪の長さの女の子がでてきたことぐらい。キラキラ。

空がかなり晴れていて、そんなに寒さを感じなかった。マフラーがほしいと思った。ねむい。

  1. トップ
  2. life
  3. 夢あるいは
  1. トップ
  2. self
  3. 夢あるいは

PHP の簡略化 PI (<? .. ?>) は好きじゃない。ターゲットが示されてないのがなんか気になるし、XML 宣言実行しようとするのがウザすぎ。それと ASP 方式 (<% .. %>) は問題外。

XML の Processing instruction の仕様を引用する。

Processing Instructions
[16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

XMLPI においてターゲットは必須。よってないとキモい。

そんなわけで [ruby-core:04266] ってのは <?erb .. ?> とかにするほうがいいんだけど、それだと目的のタイプのし易さが結局アレになるのでそもそもだめじゃんみたいな。

何が言いたいんですがあたしは。

  1. トップ
  2. prog
  3. PHP の簡略化あるいは