Ruby言語やLinuxのネタが多いです。
October 25, 2003
■ [Hiki] ニュースプラグイン version 1.0リリース
ニュースプラグインというのを作ってみました。
これはHiki上でニュースページの生成・表示を簡単に行うようにするプラグインです。登録画面付き。生成したニュースページはそれ自体がHikiの1ページとなるので更新や削除等は通常のHikiの機能を使えます。
具体的にどのように使うかというと、Ruby-GNOME2 Project WebsiteやMUTOPON7 ANNEXを参考にしてください、ってまだ登録されている情報が少ないのであまり参考になりませんが。
■ 元々はRuby-GNOME2 Project Website用に作ったのでニュースプラグインと名付けましたが、ページ生成部分を(Rubyを知っていれば)簡単に変更することができますので、その辺をうまくカスタマイズすれば簡単なblogや日記機能として使うことができると思います。
■ にしてもプラグイン作ったの久しぶりだー。といっても元ネタのbbsプラグインをホゲっただけ。いやーbbsプラグインに感謝です。
■ おっと、忘れてた。たぶんHikiはCVS版じゃないと動かないッス。
■ そういえば、最近、Hiki-MLでたけうちさん見かけないんだけどどうしたんだろう。
October 25, 2004
■ [Ruby] raadepchecker.rb
RAAのDependencyの件で、なひさんとメールでやりとりさせていただいた中で
RAAに登録した自作アプリ・ライブラリが他のライブラリたちに依存している時、他のライブラリたちがバージョンアップされると、RAA的には互換性が保証されない状態になる。その場合は、再度、依存している他のライブラリの最新版と自作アプリ・ライブラリがきちんと動作するか確認した上でRAAのdependenciesをアップデートすべきである
というポリシーがあると伺った。
ちょっと厳しい気もしないでもないが確実性という意味ではやむをえないのかなとも思う。
■ とはいえ、いくつか登録しているアプリ・ライブラリが依存しているライブラリのアップデート状況をWWWブラウザでチェックするのもメンドウクチャイ。
幸い、RAAはSOAPインタフェイスを持っているので、それを使ってチェッカを作ってみた。名付けて「自作ライブラリ依存先ライブラリアップデートチェッカ」....長い。
require 'soap/wsdlDriver'
module RAADepChecker
RAA_URI = "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.4/"
EMPTY = 0
UPDATED = 1
NOCHANGED = 2
NOTFOUND = 3
module_function
def get_project(prj_id)
raa = SOAP::WSDLDriverFactory.new(RAA_URI).create_driver
gem = raa.gem(prj_id)
gem.project if gem
end
# [[prj_id, req_version, newest_version], ...]
def check_dependencies(prj)
ret = []
if prj.dependency.size == 0
ret << [EMPTY, prj.name, nil, nil]
end
prj.dependency.each {|dep|
dep_prj = RAADepChecker.get_project(dep.project)
if dep_prj and dep_prj.version != dep.version
ret << [UPDATED, dep.project, dep.version, dep_prj.version]
elsif dep_prj
ret << [NOCHANGED, dep.project, dep.version, dep_prj.version]
else
ret << [NOTFOUND, dep.project, dep.version, nil]
end
}
ret
end
end
if __FILE__ == $0
ARGV.each do |prj_id|
puts "\n-- #{prj_id} ------"
prj = RAADepChecker.get_project(prj_id)
if prj
RAADepChecker.check_dependencies(prj).each do |v|
case v[0]
when RAADepChecker::EMPTY
puts "No dependencies."
when RAADepChecker::UPDATED
puts "Required #{v[1]} #{v[2]} : Updated to #{v[3]}."
when RAADepChecker::NOCHANGED
puts "Required #{v[1]} #{v[2]} : Nothing has been changed."
else RAADepChecker::NOTFOUND
puts "Required #{v[1]} #{v[2]} : No entry in RAA."
end
end
else
puts "No entry in RAA."
end
end
end
ruby raadepchecker.rb project1 project2 .... と言う感じで使う。試しに、Ruby-GNOME2, rbbr, ruby-gettext-packageの結果を表示してみる。
$ruby raadepchecker.rb ruby-gnome2 rbbr ruby-gettext -- ruby-gnome2 ------ No dependencies. -- rbbr ------ Required ruby-gnome2 0.9.1 : Updated to 0.10.1. Required ruby-gettext 0.5.4 : Updated to 0.7.0. -- ruby-gettext ------ Required racc 1.4.4 : Nothing has been changed.
つまり、rbbrはruby-gnome2-0.10.1, ruby-gettext-0.7.0で動作確認してRAAのエントリをアップデートしなきゃならんのう、ということがわかるわけだ。たまに気が向いたら実行してみればいいさぁ。
■ うーん、ちょっとは便利になったかな。でも、やっぱりメンドクチャイ!
■ また、余計なものを作ってしまった...。そんなことよりRuby/GnomeCanvas2どうにかしないと...(T_T)。
October 25, 2005
■ [話] あいかわらず提案活動中なわけですが
この前のMS PowerPointで作った資料の補足資料としてMS Wordでドキュメントを作成中。今回もこの前のパワーポッター氏がドキュメントをまとめてくれているのだけど、その鮮やかなWordさばきに「ワード・プロフェッサー」略して「ワープロ」というあだ名がついた。
....ってか、もういいよ、提案活動なんて....(T_T)。
October 25, 2007
■ [Misc] JRuby
JRuby on RailsでRuby-GetTextを使いたい、と言う要望がちらほら、(というか一部からかなりしつこく?)くるようになった。今まで全然興味なかったから手もつけてみたことが無かったんだけど、とりあえずちょこっと触ってみることにした・・・・・ら、これなかなかのもんだね。
問題はso形式のライブラリが一切使えないこと(たぶん。おかげで、標準ライブラリの中からso系のものは根こそぎカットされてる・・・って、やり方あったら教えて!)。Ruby-GetTextではIconvとlocale_system.soが使えないのでその部分をJavaのライブラリでラップしてあげるようなコードを書く必要があると思われる。まぁRailsだけということだったらその辺をざっくりコメントアウトすれば動いちゃうんだろうけど(実際そういうパッチが送られてくるし・・・)、Ruby-GetTextはコンソールで動かしたときにローカライズされた文字列が文字化けせずに表示できる、というのがウリなんだから、どうせJRubyに対応させるんだったらそこまでやりたいよね。
ま、それはそれとして、jirbでちょっと実験。
% /usr/java/jruby/bin/jruby /usr/java/jruby/bin/jirb irb(main):001:0> require 'java' => true irb(main):002:0> locale = java.util.Locale.getDefault => #<Java::JavaUtil::Locale:0x1be2893 @java_object=ja_JP> irb(main):003:0> locale.to_s => "ja_JP"
おぉ。簡単だ。ってかフツーにJavaでちょっとしたコードを確認したいとき、こんな感じで確認できちゃうってすげー便利かも。public static void main(String[] args)とか書かないで済むんだからなー(いつも忘れるんだよな、この文(^^;))。
require 'java'
module Iconv
module_function
def conv(to, from, str)
str = java.lang.String.new(str.unpack("C*").to_java(:byte), from)
str.getBytes(to).to_ary.pack("C*")
end
end
if __FILE__ == $0
puts Iconv.conv("Shift_JIS", "UTF-8", "あいう")
end
とりあえず、動いたみたいだけど・・・。

▲ きた [きのうとある宴会でたけうちさんの同僚と話したんですが,最近仕事の方がかなり忙しいらしいですよ.]
▲ たけうち [もらってるパッチもコミットできてなかったりしてすみません。来週ぐらいから復活する予定です。もうね、疲れますわ…>本業]
▲ むとぽん [おー、ご無事そうでなによりです(^^;)。]