ruby1.6を削除しよう
Debian/unstableからruby1.6を削除しよう、というのを投げた。9月中旬あたりに削除を依頼する予定。
ざっと見たところ、問題になりそうなのはaswiki、rsjog、tdiary-plugin、tictactoeで、これらの依存関係はruby1.6に行きつく。aswikiやtdiary-pluginはRuby 1.8系でもきっとなんとかなるんじゃないかと思う(がよく分からない)。rsjogとtictactoeはlibgtk-ruby1.6を使っているから難しいかも。upstreamでは更新されていないようでもあるし。と、思っていたらtictactoeについてはメンテナと鵜飼さんのやり取りによるとRuby-GNOME2化して対処できるっぽい。
「dRubyによる分散・Webプログラミング」のブックレビュー開催
日本のLinux情報で行われる「dRubyによる分散・Webプログラミング」のブックレビューのレビューアを募集中。応募締切は7/30(土)17:00必着。
追記(2005-09-12): 五人の方によるレビュー記事が公開された。
dRubyによる分散・Webプログラミング
おっ、dRubyによる分散・Webプログラミングがいよいよ出ますか。楽しみ。
Amazon.co.jpのウィッシュリストを取り出す
$ ruby -r amazon/search -rrexml/document -rcgi -e '
devid = "developer id"
wishid = "wishlist id"
def each_product(doc)
REXML::XPath.match(doc, "/ProductInfo/Details").each do |pinfo|
yield(pinfo)
end
end
def product_info0(tag, doc)
CGI::escapeHTML(REXML::XPath.match(doc, tag).collect {|x| x.text}.join(","))
end
def product_info(doc)
author = product_info0("Authors/Author", doc)
author = product_info0("Artists/Artist", doc) if author.empty?
[ product_info0("Asin", doc),
product_info0("ProductName", doc),
product_info0("ImageUrlMedium", doc),
product_info0("ReleaseDate", doc),
product_info0("Manufacturer", doc),
author]
end
def output(doc)
author, asin, title, iurl, date, manufacturer = product_info(doc)
printf("<p><a href=\"%s\">%s</a> (%s) %s %s <a href=\"http://www.amazon.co.jp/exec/obidos/ASIN/%s\">%s</a></p>\n",
iurl, title, author, date, manufacturer, asin, asin)
end
r = Amazon::Search::Request.new(devid)
(1..99).each do |i|
begin
d = REXML::Document.new(r.wishlist_search(wishid, Amazon::Search::LIGHT, i))
each_product(d) do |pi|
output(pi)
end
rescue Amazon::Search::Request::SearchError
break # done
end
end'
wishlist idはウィッシュリストを表示したときのURLの/exec/obidos/registry-invite/に続く部分でよいみたい。
sargeの次のリリースに向けての目標のようなもの
目標というかTODOというか、単にメモというか。次のリリースまでにやっておきたいこと:
- 安定版Rubyをできるだけ安定な状態で提供する
- 1.8系は基本的に安定版だからとCVSから変更を取り込んでいたけど、今回のリリースに際していくつかの点でミスを犯してしまった。Ruby自体の開発(保守かも)の進められ方にもよるけどBTSを基本にして困っていると言われたタイミングで物事を考えるようにしてみようと思う。
- メンテナンスするパッケージを減らす
- 今の時点で42パッケージある。sargeがリリースされたのでRuby 1.6系はフェードアウトさせるとして、そうするとRuby 1.8に含まれる15くらいのパッケージはメンテナンスしなくてよくなる。それ以外のパッケージのうちの3つか4つくらいはRuby 1.6系用だからこれらも不要になる。残りは25個くらいだが、ruby{1.8,1.9}とあといくつか、それにbdb関係をいれて10個くらいに減らしたいところ。
- ruby1.8のsarge向けのbackportを提供する
- woody向けのbackportパッケージは途中で継続できなくなってしまったが、今度はbackports.orgで提供できるようになると良いなあ——という、これは希望。少しずつ準備していってみよう。
あと他には……?
フリーズ 2
うーん、しまった。もう少し時間があると思いこんでいて更新のタイミングを逸してしまった。SEGVバグとか(
正規表現がどこにどうマッチしたか表示する
Rubyの正規表現で、どこにどうマッチしたかを表示させるCGIスクリプトを書いてみた。今のところマッチに幅がないときの入れ子の関係を再現することができないという制限がある。あと、あんまりテストしてないのでおかしなところがあるかもしれない。スクリプトはこちら→regexp-test.cgi(例によってそのうち消える)
メインとなるところはだいたいこんな感じ:
class MatchData
MATCH_BEGIN = '<span class="match" title="$%d">'
MATCH_END = '</span>'
ESCAPE_PROC = proc {|text| CGI.escapeHTML(text)}
def to_html(show_empty_match = false,
match_begin = MATCH_BEGIN,
match_end = MATCH_END,
escape_proc = ESCAPE_PROC)
tmp = {}
size.times do |i|
if (b = self.begin(i)) && (e = self.end(i))
tmp[b] ||= [[],[]]
tmp[e] ||= [[],[]]
if b != e
tmp[b][1].push(match_begin%i)
tmp[e][0].unshift(match_end%i)
elsif show_empty_match
tmp[b][0].insert(tmp[b][0].size - 1,
match_begin%i + match_end%i)
end
end
end
ret = []
(0 .. string.size).each do |i|
if tmp[i]
ret << tmp[i][0] unless tmp[i][0].empty?
ret << tmp[i][1] unless tmp[i][1].empty?
end
ret << "" unless ret.last.kind_of?(String)
ret.last << string[i] if string[i]
end
ret.collect do |x|
String === x ? escape_proc.call(x) : x
end.join('')
end
end



