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

November 20, 2002

[Misc] うーむ

モチベーション下がりまくり。

[Java] Tag Library

今更なんだけど、これってそんなに使いやすいのかなぁ。特にJSTL。これ使うとデザイナとプログラマを分離できるってホントなのかなぁ。

なんか、新しい言語(しかもイマイチスマートに見えない....)をもひとつ覚えなきゃいけなさそうなんだけど....。

っていうかそういう風に分業した開発って経験ないんだけど最近は当たり前なのでしょうか。


November 20, 2005

[Ruby] String%(val) の拡張

RoRのMLでRuby-GetText-Package向けにString%(val)を拡張してみてはどうか、という意見をもらった。

通常:
puts "name = %s, %s" % ["Masao", "Mutoh"]
新:
puts "name = :first, :family" % {:first => "Masao", :family => "Mutoh"}

このアイデア自体は以前もどこかで話題になってたような気もしないでもないんだけど、まぁ、そのときは別に無くてもイイじゃん、的に感じてた。 でも、これ、Ruby-GetText-Packageの翻訳者という立場で考えると、後者の方が圧倒的にわかりやすくなる、ってことに今更ながら気づいた。

Ruby-GetText-Packageでは、翻訳者はpoファイルというカタログファイルを編集していく。これが以下のようになる。

通常:
msgid "name = %s, %s"
msgstr "名前 = %s, %s"
新:
msgid "name = :first, :family"
msgstr "名前 = :first, :family"

上記の例だと、今のままでは、最初の%sが何で2つめの%sが何を示すのかそれだけではわかりづらい。時には翻訳者自身がソースコードの方を確認しなければわからないかもしれない。それに比べて新しい方は変数名さえ上手につけてあげれば翻訳者にとってかなりわかりやすくなる。

さらに、もう一つ利点がある。翻訳先で順序を変更するときだ。上記の例で、日本語の場合は名字と名前は入れ替えて表示したいはず。

通常:
msgid "name = %s, %s"
msgstr "名前 = %2$s %1$s"
新:
msgid "name = :first, :family"
msgstr "名前 = :family :first"

こうなると、最初の例に比べ2つめの方が圧倒的にわかりやすい。

[Ruby] String%(val) の拡張(2)

そんなわけで上記を実装してみた。

class String
  alias :_old_format_m :%
  
   def %(args)
    if args.kind_of?(Hash)
      ret = dup
      args.each {|key, value|
	ret.gsub!(/:#{key}/, value.to_s)
      }
      ret
    else
      _old_format_m(args)
    end
  end
end
  
#以下はサンプル
puts "name = %s, %s" % ["Masao", "Mutoh"]
puts "name = :first, :family" % {:first => "Masao", :family => "Mutoh"}
puts "name = %2$s %1$s" % ["Masao", "Mutoh"]
puts "name = :family :first" % {:first => "Masao", :family => "Mutoh"}

実際は、Ruby-GetText-Packageを使うことを想定しているので、サンプル部分は以下のようになる。

puts _("name = :first, :family") % {:first => "Masao", :family => "Mutoh"}

上記の例だと、Hashを使った方では%5.2f等のsprintf記法の大半が使えなくなってしまうのが難点と言えば難点か...。でも、かなり良い感じだ。実際にRuby-GetText-Packageに実装してみようかしらん。

おっと、忘れてた。そんなことなら、最初から#{first}ってやればいいじゃん、と思うかもしれないけど、#{...}が評価される順番の関係でRuby-GetText-Packageでは#{...}形式はうまく使えないんだよね。

本日のツッコミ(全2件) [ツッコミを入れる]

なかだ [%()は以前却下された記憶がありますが、国際化のためには必要な機能じゃないかと思います。]

むとう [やっぱり、過去に同じ話題があったんですね。 そのときは却下されたんですか...。残念。 まぁ、でもRuby-Get..]


November 20, 2008

[Rails] Rails-2.2

ソースを読むと至る所にmemoize :fooが使われてる。キャッシュしまくりだな。

高速化は良いことだけど、メモリ使用量が増えて困った、なんてことはないんだろうか。

・・・・ってか、TemplateFinderなくなっちゃたのか?


追記