よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

March 21, 2002

[Misc] XREAのサポート掲示板

いろいろ便利なスクリプト発見。
  1. XREAのCGIが出すエラーを検知する(2001/12/04のmstkさんの投稿)
    そうかこうすればよいのか。きづかんかった。ちょっと知ってる人なら当たり前に使ってるのね、これ(^^;)。
  2. Namazu 用 indexing CGI script(2001/10/04のdimbulaさんの投稿)
    これでmknmzもWWWからできる! でも、なんでこのshell使った場合と、xreaにsshでログインして直接mknmzしたときのパス(.namazurcのReplaceの左辺値)が異なるのだろう。うーむ。

[tDiary] yasqueeze.rb

ドキュメントをアップデートしました。ちょっとわかりやすくなったかな。

[Ruby] Ruby/GTK vs GTK-2.0

yasqueeze.rbの方が一段落したのでさかいさんにもらったパッチをRuby-GNOMEのソースにあててみた。んでもって、手元でちょこちょこいじりはじめたんだけど、ひとつのソースでGTK-1.xとGTK-2.0の両方に対応させるというのはすごく大変そうだと言うことがわかった。

ちなみに、gdkcursors.hは無くなってるんですが、代わりにgdkcursor.hってのができてて、そこにcursor typeのマクロが移ってます。うーむ。

とりあえず、手元でmakecursors.rbを改造。これだけでもif文増やすのはツラいな...。


March 21, 2004

[Ruby-GNOME2] Supporting internationalization (i18n) in Ruby/Libglade

Ruby/Libgladeから複数の言語表示をサポートする方法。なるほどこうやるのかー(^^;)。

でも、なぜか日本語使うと文字コード変換時にエラーが出るんだよな。なんでだろう。

[Ruby-GNOME2] Supporting internationalization (i18n) in Ruby/Libglade 続き

やっぱりbindtextdomainはどこかでやらないといけない気がする。うーむ。

[Misc] 急にメールを送れなくなった

SMTPのエラーで451と535が交互に出る。なんだろう。

[Hiki] リンク元表示プラグイン-1.1

リリースしました。生駒さんにいただいたパッチ(Hiki 0.7-devel-20040310で動かなくなっていた)を当てた他、結果の表示順がおかしかったのを修正したり、対象検索エンジンを強化したりしてみました。

[tDiary] CVS追従

ツッコミ時にエラーが出る件を直すため、ほぼ1年ぶりにtDiaryをバージョンアップしてみた。

ツッコミも無事出来るようになったので、みなさん、ふるってツッコんでみてください(うそ)。

[tDiary] output_rdf.rb

入れてみた。

[tDiary] 本日のリンク元表示プラグイン(旧)-2.4.1

リリースしました。伊藤さんにいただいたパッチ(Googlebotのロボットよけが出来ていない不具合の修正)の他、いくつか検索エンジンを引っかける正規表現を改善しています。

なお、これはtDiary標準の同名のプラグインとは別モノですので注意してください。

[Ruby] ObjectPool-0.2.0

リリースしました。さかいさんのobjectpool.rbをそのままいただきました。


March 21, 2006

[Ruby] Ruby/CLDR-0.1.0

最近、Ruby-GetText-Packageを開発するにあたっていろいろと「国際化」というものについて考えさせられることが多くなってきました。

以前はこんなことを言っていたけど、これは避けて通れないような気がしてきたのでもう一歩先に踏み出すことに...。

というわけで、すごく悩んでいたのですが、密かに新たなプロジェクトを始めることにしました。それが、このRuby/CLDRです。これがきっと人生最後のライブラリ開発になると思います(って宮崎駿みたいなこと言ってるな(苦笑))。

で、Ruby/CLDRですがローカライゼーションのためのライブラリで、最終的には日付、通貨に代表される地域ごとの情報を適切に取得したり書式指定して表示したりするAPIを提供するライブラリを目指します。

といっても、0.1.0では、単にCommon Locale Data Repository (CLDR) Projectが提供しているXMLロケールデータをRubyから簡単にアクセスできるようにしただけです。そこで力尽きました(苦笑)。

以下のように使います。

 $ cat test.rb
 require 'rubygems'
 require_gem 'cldr', '= 0.1.0'
 require 'cldr'
 
 obj = CLDR::Object.new
 puts obj.core.languages["ja"]
 puts obj.calendar.dateformats[:gregorian]["full"]
 obj = CLDR::Object.new(:locale => Locale::Object.new("fr_FR"))
 puts obj.core.languages["ja"]
 puts obj.calendar.dateformats[:gregorian]["full"]
 $ ruby test.rb
 日本語
 yyyy'年'M'月'd'日'EEEE
 japonais
 EEEE d MMMM yyyy

XMLデータにアクセス、と書きましたが、XMLデータに直でアクセスするような実装だとXMLのparseにも時間がかかりますし、さらに、CDLR(LDML)の複雑なルールを正しく動作させるのはとても大変なので、性能的に問題が出ます。そこでまずはXMLファイルから各言語別のリソースファイル(rubyスクリプトファイル)化するジェネレータを作って、ランタイムではそのロケールファイルを呼び出すだけにして性能を確保しています。

ちなみに私の非力なマシン(Athlon 1.3GHz)だと、全ロケール分のリソースファイルを生成するのに38分ほどかかります。ホント大変です(苦笑)。

#リリース時は生成済みの状態で配布されますのでご心配なく。

APIドキュメントもありませんが、ソースを見て頂くとやっていることは今のところ極めて単純なので、まぁ、いろいろと試してみてください。

次のフェーズとしてはFormat関連のAPIを提供しようかなと思っています。

そのためには、CLDRが提供する各種フォーマットを適切に扱う関数群が必要になります。例えば上の例の"yyyy'年'M'月'd'日'EEEE"とか。

結構、量があるので、どなたかご協力頂けないでしょうか。興味のある方は私までメールくださいませ。

あ、そうそう、Ruby/CLDRはRuby-GetText-Packageに依存しています。最終的には、この2つの組み合わせで表示周りのローカライズの大部分をカバーできればいいなと考えています。

それから、APIはしばらくunstableです。もし、今すぐ使ってみようという方がいらっしゃいましたら、gem+バージョン指定でお使いください。こういうときにはrubygemsは便利ですねぇ。

ちょっと後先が逆になりましたが、同様のライブラリとしてICUというIBMが提供しているライブラリがあり、それのRubyバインディングICU4Rも存在します。

実は、車輪の再発明のことを考えるとこれをそのまま使うのがホントは一番良いような気がしたのですが、ICU自体がかなり大きなライブラリだし、ICU4Rは今のところUnicodeサポートをメインに考えているようでフォーマット関連をまだサポートしていません。私的にはUnicodeサポートはRuby-2.0で解決されると思ってますし、ResourceBundleを使うんだったらRuby-GetText-Packageを使って欲しいので、ICU4R自体に私がお手伝いするのはちょっとなぁ、というわけで自分で始めることにしました。

#将来的にICU4Rが充実してきたらこちらを辞めるかもしれません。

あと、何かとRuby-GetText-Packageと比較されるGlobalizeですね。これも、かなり限定された範囲内で機能が重複しますが、まぁ、あれはRailsの中で使うライブラリですから今回は対象外ですね。

っと、それ以外に、すでに同様のプロジェクトを始めている方(ICU4R以外で)がいらっしゃいましたらご連絡を。今ならまだやめれます(苦笑)。

あ、そうそう、ファイルでかいです。3MBちょいあります(汗)。元のCLDRファイル(core.zip)の3倍ありますが、これは、元のXMLファイルが、「この部分は〜を参照」みたいな感じになっているのを、高速化のために全部展開しているためです。この辺は見直した方が良いかもしれませんね。

最後に。ちょっと名前がなー。Ruby/Localeにしようかと思ったんだけどそういうプロジェクトもうあるしね。CLDRだといまいちピンとこないんだよなぁ。

追記:setup.rb付け忘れました。gemじゃない人は自分でlib配下をコピーしてください。すんません。


更新 設定