URI::Parser
URIモジュールをいじくって、RFC的にはダメなんだけどちょっとだけ大目に見てよ、というようなことが出来るようにしてみた。というのは、その種のリクエストを何度か受け取ったことがあるため。リクエストというよりも、バグ報告として受け取ることが多かったと思うけど。
>> p = URI::Parser.new(:ESCAPED=>"(?:%[a-fA-F0-9]{2}|%u[a-fA-F0-9]{4})")
=> #<URI::Parser:0xb7872640>
>> u = p.parse("http://foo.bar.baz/%uABCD")
=> #<URI::HTTP:0xb78cf4f8 URL:http://foo.bar.baz/%uABCD>
>> URI.parse(u.to_s)
URI::InvalidURIError: bad URI(is not URI?): http://foo.bar.baz/%uABCD
from /.../lib/uri/common.rb:126:in `split'
from /.../lib/uri/common.rb:144:in `parse'
from /.../lib/uri/common.rb:592:in `parse'
from (irb):3
from /usr/bin/irb1.9:12:in `<main>'
>> s = "http://foo.bar.baz/ABCD"
=> "http://foo.bar.baz/ABCD"
>> u1 = p.parse(s)
=> #<URI::HTTP:0xb78c3220 URL:http://foo.bar.baz/ABCD>
>> u2 = URI.parse(s)
=> #<URI::HTTP:0xb78b6d54 URL:http://foo.bar.baz/ABCD>
>> u1 == u2
=> true
>> u1.eql?(u2)
=> false
あとでruby-devに投げてみよう。
プール
松久淳さん、田中渉さんによる
プール[rakuten]を読んだ。
他書に見られるコミカルな調子はなく、かといって重苦しいというのでもなく、淡々と日常が切り出されていく。そんな日常に割り込んできた一通の手紙。差出人も宛名も不明。伝えたいことがあるが、今はまだ書けないという内容。手紙はその後もぽつりぽつりと届き、少しずつ具体的になっていく。宛てられたのはいつも集まるメンバーの誰か。
一人の人が占める場所と、その場所で為すことは何か。ネットワークのどこに位置し、どのように自己を発揮していくかといったことを考えはじめると、とりとめがなくなって発散するか、逆に陥穽に陥るような堂々巡りになってしまいがち。そういう、どこに自己を確立するかといった考え方ではなく、すでに組み込まれているネットワークの中の複雑な相互作用の中で醸成された私のための場所を見直し、その中で成すべきことを為す、そういう捉え方もあり得るだな、と、そんなことを思った。アフォーダンスっぽい(いや違うかも)。
物語の中の人々はそれぞれに居場所を求めているように思える。そのように描写されてもいると思う。だが、彼らの言動は探し求めるというよりも、どこかを目指すようなものであって、物語の中で直接的には描写されないものも含め、相互に関係し合うそれらベクトルの複雑さを楽しめるような気がしてくる。
物語は大人たちの日常と、ある二人の高校生の日々からなる。その接点が要であるのだが、それはともかくとして。高校生の日々を読んでいくにつれ、振り返ってやり残した感がひどくせまってくる。
ただ、改めて向き直ってみると、まあ、身びいきかもしれないものの、それなりの時を過ごしたのかなとそんな風にも思えてきた。つまり、描かれた物語のようではないにせよ、また、特異なところはそうなかったにせよ、その中で経験してきたことがあるのだなと。
身びいきというか、感傷かしら。
Ruby/GD2でGIFアニメ
用事があってGIFのフォーマットだとかGIFアニメのことだとかを調べている。特許の話とかでてきて懐かしい。
GIFアニメについてはlibgd2の2.0.29で対応したようだ。が、言語バインディングではまだあまり対応していない様子。まだ、というか、libgd2の言語バインディングはあまりアクティブでないような感じもある。Ruby/GDもそんななかの一つ。今からコードを足すのもどうかなというところ。
そう思っていたらRuby/GD2という別の実装があることに気付いた。こちらもアクティブではないようだが、Ruby/DLで書かれているためちょっとだけ手を入れやすい。そういうわけで、関数をいくつか足し、Rubyレベルでのメソッドを三つほど足してGIFアニメを出力できるようにしてみた(差分)。
require 'gd2'
files = Dir.glob('/path/to/images/*.png')
prev = nil
open('/path/to/output.gif', 'w') do |io|
img = nil
files.each do |f|
img = GD2::Image.import(f, :format => :png)
img.gifanim_begin(io) if prev.nil?
img.gifanim_add(io, 50, prev, true)
prev = img
end
img.gifanim_end(io)
end
使っているlibgd2は2.0.36-RC1なのだけど、このバージョンのGIFアニメ機能にはバグがあるようだ。libgd2では、GIFアニメを構成するイメージの間での変更部分を抽出しようとするのだが、サイズが異なるイメージが与えられると、その処理の中でSEGVを起こす。ソース中のコメントには内部で調整するというようなことになっているのに、実際にはそういうことをやっているところがない。そのため、前述したメソッドでは前フレームのサイズに変換してしまうことにした。ま、そろえておけよっていうことではあるのだろうと思うのだけど。
追記(2008-10-04): 渡辺哲也さんの日記を見てパッチを置いていなかったことに(今になって)気付いた。それとも消してしまったんだったかな。



