だいたいの教室は右利きのために黒板に向かって左側に窓がくる。らしい。そんなわけだから大体夕方の教室ってのは一種の幻想性すなわちファンタジーなわけですよ。と。
ファンタジー。
話は変わって、昨日買った初恋サンセットですけど、最後の曲の後に入ってるピアノがよい。よい。でもあれかもメレンゲはサーチライトのほうが好きだな。
だいたいの教室は右利きのために黒板に向かって左側に窓がくる。らしい。そんなわけだから大体夕方の教室ってのは一種の幻想性すなわちファンタジーなわけですよ。と。
ファンタジー。
話は変わって、昨日買った初恋サンセットですけど、最後の曲の後に入ってるピアノがよい。よい。でもあれかもメレンゲはサーチライトのほうが好きだな。
blomemo 2005-01-23 - 消えていくボーッとする時間
これここ最近よく思うことの一つ。暇なとき、いろんなことを考えて発展させて、少し前まで考えていたことが消えて、結局あとから考えるとあんまり覚えていない。
その時間が具体的にどういう風にいいのか、っていうのはうまく説明できない。そりゃ今あらためて考えると電車の中とか、寝る前とか、風呂に入っているときとか何を考えているか覚えてないから。
寝る前とか、もしくはコンピュータの前でぼーっとしているときは日記に書く。
あぁ。これは起きているときの見る夢みたいなもんなのかな。たぶん。
前にも書いたけど完全じゃないので。たぶん、これでいいはず。
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 されたら終りというどうしようもない脆弱性がありますけれども。
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
夢とは別によく草原を想像する。草がいっぱい緑色で、花が咲いてたりするところ。おなかが減らない、食べることが任意な世界で、何もしなくても生きていける。ホントのとこそういう場所にいられるならコンピュータなんぞいらない。歩き回って、寝て、そこらに見つけた植物に名前をつけて遊ぶ。飽きるだろうか。いやたぶん飽きないと思う。
生まれたときからそういう世界に属しているならいいけれど、自分は既に生まれてしまっていて、喧騒の中で生きている。だからこういう想像をするときはだいたいいつも「どこでもドア」が付属する。「どこでもドア」の向こう側に今いる喧騒が広がっていて、閉めると音がしなくなる。
「どこでもドア」と俺の部屋にある洗濯機は似てる。
Amazon にジャケがないので公式に直リンするけど、メレンゲの初恋サンセットのジャケはヤバいと思うよ。汗でた。汗。
買うしかないけど金がない。ぎぎぎ。
タワレコ のポイントが 1k 分溜まっていたのでタワレコ行って来た。
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 を引数の名前にするよってことで、それ以上は実装依存なんじゃまいか。みたいな? 併用することは稀なので。。。
しかし自分の解釈があっているかどうかは永遠に謎だ。確かめようがないから困る。誰に聞けばいいのか。その人が言っていることが正しいのか、正しいとしても自分がそれを正しいまま受け取れているかは確かめようがない。あーアレだね。アレ。理解は誤解の総体 (だっけ?) ってヤツ。 わかりあえているように感じるにはできるだけ曖昧な表現をすればいい。アレとかソレとかを、明確にしない「ありえねー」とか。
イントロでピアノでびびった。素敵だ。てか PV がなんか素敵だからちゃんと見たい。次のシングルの extra あたりに入れて欲しい。
PV といえば LILY の PV が素敵。前も書いたけど好きだな。
それとスカーレットの PV もちゃんと見てない……
ていうかね。PV をちゃんと見せてくれないのはもったいない。せっかく作ったのに贅沢な!
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'))
XML の PI においてターゲットは必須。よってないとキモい。
そんなわけで [ruby-core:04266] ってのは <?erb .. ?> とかにするほうがいいんだけど、それだと目的のタイプのし易さが結局アレになるのでそもそもだめじゃんみたいな。
何が言いたいんですがあたしは。
ジャケ かこいいなぁ……
しかし二枚連続でタワレコ初回限定なのはなんでだろう。というかなんで東芝 EMI から出さないんだろう。何かあったのか。VeryApeRecords とかいう怪しいアート専用レーベルらしきものから出すし……謎。
よく寝た。っていうか外は糞寒いし、控え室微妙に寒いし、試験会場暑いし……
自己採点してみると古文が0点だった。笑える。漢文は少しあたってたぜ?
まぁ現代文しか使わない学部だから関係ないです。ならマークするなよって感じだけど、やっぱ埋めてないと不安 (謎) なので。
河合塾速報のやつによると、平均点があがるだろうと思った英語は昨年よりさがってる。ありがたや。平均点超えそう? 国語は現代文以上の点数はないので比較できない。政治経済はほぼ平均点 (より下)。
明日学校で一斉自己採点&予備校にデータ提出だから、これから母集団が増えて変わるだろうけど、すんげー微妙。よくも悪くも平均人間って感じ。ウキー。
ついでに国語Ⅰのアレ (謎) でアレだと思う。アレのせいで微妙に不利なのか?
結局微塵も勉強しないで大学入試センターなわけだ。いくつか試験の心構え的なもの (古典は適当にマークするだけで考えないとか) は考えたけどぶっちゃけどうでもいい。
今日は英語のみだから特に糞不安ってことはないし、むしろテンションハイになっているわけだけど、長文で運が悪いとその後に続く試験 (二日目・一般) がたぶんアレになるのでそれなりの覚悟が必要な気もする。一番気にかかるのはぶっちゃけ試験場なんだけどね。まくら違うと寝れない (嘘) ですから!
勉強しないとサッパリできない科目、つまり政治経済が一番不安要素満載なんですよ。怖い怖い。
昨日なにやってたって chokan 実装やってたよ。本屋行ってアレな雑誌読んだよ。謎だ。
俺が今ある種異様なテンションなのは、ここ三年求めていた向うから強制的にやってくる刺激が、今あるからだと思う。センター試験はいくつかのイベントの始まりにすぎない。いい方に傾くか悪いほうに傾くかはまさしく神のみぞ知るところだから結局どうでもいい。いずれにしても、これから自分がどうなっていくのが楽しみでニヤける。
自己採点したらめっさ低いよ。やべー。
や、平均っぽい?ぶっちゃけどれぐらいが平均なのかわからn
どっちにしろセンター利用私大は無理くさい。一般は願書とりよせた大学全部うけることになりそうだ。
実験的に Rena を使ってみたかったので、よろしそうなプログラムを考える。
IRC BOT に何か FOAF アレこれできるような機能をつけてみたかった (意味があるかは考えない) ので、とりあえず URI に反応して、それが FOAF だったら foaf:nick と foaf:name をとってくるようにしてみた。
URI (http:) が PRIV されたら HEAD でアクセスして、ステータスコードと Content-Type を確認。`text/xml', `application/xml', `application/rdf+xml', `text/ntriples' であれば Rena にロードさせる。
ロードしたら rdf:about="" なリソースを探し、それが foaf:PersonalProfileDocument であれば foaf:primaryTopic のさすリソースの foaf:nick と foaf:name をてけとーに取得して IRC に NOTICE
Rena は結構遅いので、RDF パース中は chokan が他の処理しないかもしれない。
作るにあたって Using Rena to Process RDF in Ruby が役に立った。
よく考えると open-uri に Accept ヘッダを加えるのは無理 (もしくはめんどう) なので、最初から GET して、response.body を StringIO にして Rena に投げることにする。こうしないとネゴシエーション効いてる場合ダメになる。
メイン部分のコード。
# uri は読み込んだ RDF の URI の URI クラスのインスタンス
# res は HTTP#get の値
model = Rena::MemModel.new
model.load(StringIO.new(res.body),{
:content_type => Regexp.last_match[0],
:base => uri.to_s
})
resource = model[uri.to_s] # 相対 URI は絶対 URI に変換されている。
if resource &&
resource.get_property(RDF + "type").uri == URI.parse(FOAF + "PersonalProfileDocument")
mes = "foaf:PersonalProfileDocument"
foaf = resource.get_property(FOAF + "primaryTopic")
nick = foaf.get_property_values(FOAF + "nick")
name = foaf.get_property_values(FOAF + "name")
# string_array は rdf:Alt とかも全部ひっくるめて単一の文字列の配列にする
mes += " [nick:#{string_array(nick).join(", ")}]" unless nick.empty?
mes += " [name:#{string_array(name).join(", ")}]" unless name.empty?
subject << notice(channel, mes.to_jis)
else
puts "Not FOAF"
end
YAML を使うことにした。当初 XML を使うつもりだったけどマップするのがめんどいので保留。obj.to_yaml だけなのは簡単でいい。あんまり文法は好きじゃないんだけど……
elsif もそうだけど for - in も嫌いだ。読む順番がアレなんだよなぁ。素直に each でいいじゃないみたいな。ついでに each と同じだと考えてるとハマる。スコープがスタックされない (この表現が正しいかは知らない)
IRC BOT を作り直し。RICE 使うことにする。
プラグインのロード方法を変えた。新しい無名のモジュールを作ってその中で実行してクラスのインスタンスを得るようにする。そうすれば空間が汚れないし GC 的にも嬉しいっぽい。たぶん。
def load(klass_name)
filename = klass2file(klass_name)
mod = Module.new
mod.module_eval(File.open("#{dir}/#{filename}") {|f| f.read}, filename)
c = nil
begin
c = mod.const_get(klass_name)
rescue NameError
raise ClassNotFoundError.new("#{dir}/#{filename} must include #{klass_name} class")
end
# @klass (new に渡した上位クラス) を継承していなかったらエラー
if c < @klass
@plugins[klass_name] = {
:instance => c.new,
:loaded => Time.now,
}
else
raise NotInheritAbstractClassError.new("The class #{klass_name} must inherit #{@klass}")
end
klass_name
end
Abstract っていうのはなんか違う気がする。