ruby-1.9用ししゃもパッチ
人工無脳ししゃもがruby-1.9でも動くように書いてみた。
オリジナルのししゃもとのdiffです。
1a2 > #-*- coding: EUC-JP -*- 7c8,10 < $KCODE = 'e' --- > if RUBY_VERSION.match(/^1\.[678]/) then > $KCODE = 'e' > end 462,463c465,473 < lines.each do |line| < ary << line.gsub(/\s+/, ' ').strip --- > case RUBY_VERSION > when /^1\.[678]/ then > lines.each do |line| > ary << line.gsub(/\s+/, ' ').strip > end > when /^1\.9/ then > lines.each_char do |line| > ary << line.gsub(/\s+/, ' ').strip > end
解説
手を加えた箇所は次のとおりです。
*1:あくまで”動くようにした”だけなんで、1.9に最適化したわけではありません。
1.8系を使いつつ1.9系もお試しする方法
前置き
rubyの新しい安定版として、1.9.1が公開されたんだけど
1.8系と比べて、変更点が大きくて
RubyGemsパッケージの多くはまだ1.9系に対応していなかったりします。
そこで、1.8系の環境は残したまま1.9系のrubyもお試しで
導入してみる方法をご紹介します。
1.9.1を別の名前で導入
rubyをソースから導入する際に、
$ ./configure --program-suffix=19
とすると。
従来のruby(1.8系)とは別に、ruby19(1.9系)として
別の名前で導入できます。
同様に、irbやri、rakeなどもirb19、ri19、rake19のように別名として
導入されます。
1.9系からは、RubyGemsも標準ライブラリに採用されているので、
上記と同様にgem19という名前で導入されるでしょう。
RubyGemsパッケージを別の名前で導入
従来(1.8系)のRubyGemsでRSpecをすでに導入していて
1.9系のRubyGemsにもRSpecを導入しようとすると……
実行ファイル(/usr/bin/specなど)が上書きされてしまって
好ましくない状況になってしまいます。
そこで、ruby19のように名前の後ろに19がつくようにして導入する方法をご紹介します。
$ gem19 install --format-executable rspec
このように導入することで、従来(1.8系)のspecとは別に
spec19という名前で導入できます。
これで、1.9系に対応したRubuGemパッケージも導入することができます。
M17N対応とかやってみた。
ruby-1.9系の安定版、ruby-1.9.1-p0が公開されていたようなので。
インストールしてみた。
以前に、はてなハイクAPI用のライブラリと、タイムログAPI用のライブラリを作って
rubyforgeに公開していたので。
今回はそれをM17Nに対応して動くようにしてみた。
主な変更箇所は、マジックコメントを入れたぐらいですが。
1箇所だけ、動かない場所があったので修正しました。
それは、次のような箇所です。
修正前
def http_access(uri, request) Net::HTTP.start(uri.host, uri.port){|http| response = http.request(request) if response.code == '200' return REXML::Document.new(response.body) else return false end } end
これを、ruby-1.9.1-p0で動かすと……
APIからとってきた response.bodyのEncodingがASCII-8bitになってしまうため
REXMLがパースする際にエラーを起こしてしまうのだ。
そこで、こんな風にした。
修正後
def http_access(uri, request) Net::HTTP.start(uri.host, uri.port){|http| response = http.request(request) if RUBY_VERSION.match(/^1\.9\./) response.body.force_encoding('UTF-8') end if response.code == '200' return REXML::Document.new(response.body) else return false end } end
RUBY_VERSIONが1.9.xの場合は、APIからとってきたものをUTF-8として扱うようにしました。
ひとまず、これで動くようなので修正したものをrubyforgeにアップしました。
gem install -r rhaiker
タイムログAPI用のライブラリは、
gem install -r timelog4r
…で、それぞれ導入できます。
AIアルゴリズムコンテストに参加しないことにした理由とか
先日のエントリで取り上げたコンテストに、参加を見送ることにした。
理由はいくつかあるが、最たるものは
めだちょんは、「自分でアルゴリズムから作ったAI」とは言えないからだ。
めだちょんは未だに、「ししゃも頼り」にしている部分が多くを占めている。
コンテストの趣旨は「アルゴリズムコンテスト」である以上、やはり胸を張って「自分でアルゴリズムから作ったAI」と言えるようなものでなければ参加しちゃいけないんじゃないかと思ったからだ。
状況からいっても、今はアルゴリズムからAIを組み立てるほどの気力も体力もないということも参加を見送る理由のひとつです。
人工無脳に関わっているひとりとしては、少しでも早く”脱・ししゃも”をしたいものです。
心身の状況がそれどころではないのですが、それでもやっぱり、AIの魅力と可能性には心が強く突き動かされます。