フォーチュンサモナーズ
最新 追記

Don'tStopMusic

2003|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|12|
2006|01|02|03|04|05|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|

カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年

知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。


2005-09-06 この日を編集

_ [Ruby][Rails] Ruby-GetText-Package を使ってみる このエントリーを含むブックマーク

Ruby-GetText-Packageメジャーリリースして rails に対応した とのこと。

ちょうど業務用に作っている rails アプリがあったので、これを日本語化してみました。基本的に Ruby on RailsでRuby-GetText-Packageを使う の通りに作業して問題なく L10N 化できました。

インストール

gem でインストール。

$ sudo gem install gettext
Attempting local installation of 'gettext'
Local gem file not found: gettext*.gem
Attempting remote installation of 'gettext'
Select which gem to install for your platform (i686-linux)
 1. gettext 1.0.0 (ruby)
 2. gettext 1.0.0 (mswin32)
 3. Cancel installation
> 1
Building native extensions.  This could take a while...
ruby extconf.rb install gettext
checking for setlocale()... yes
checking for nl_langinfo()... yes
creating Makefile
 
make
i686-pc-linux-gnu-gcc -fPIC -O2 -pipe -march=pentium4  -fPIC  -I. -I/usr/lib/ruby/1.8/i686-linux -I/usr/lib/ruby/1.8/i686-linux -I. -DHAVE_SETLOCALE -DHAVE_NL_LANGINFO  -c _locale.c
i686-pc-linux-gnu-gcc -shared  -L'/usr/lib' -Wl,-R'/usr/lib' -o _locale.so _locale.o  -Wl,-R -Wl,/usr/lib -L/usr/lib -L. -lruby18  -lpthread -ldl -lcrypt -lm   -lc
 
make install
install -c -p -m 0755 _locale.so /usr/lib/ruby/gems/1.8/gems/gettext-1.0.0/lib
ruby extconf.rb install gettext
checking for setlocale()... yes
checking for nl_langinfo()... yes
creating Makefile
 
make
make: Nothing to be done for `all'.
 
make install
install -c -p -m 0755 _locale.so /usr/lib/ruby/gems/1.8/gems/gettext-1.0.0/lib
Successfully installed gettext-1.0.0

プラットフォームを選択するところがありましたが、mswin32 ではないので ruby を選んでみました。つつがなくインストールできたようです。

$ gem list gettext
*** LOCAL GEMS ***
 
gettext (1.0.0)
    Ruby-GetText-Package is Native Language Support Library and Tools
    which modeled after GNU gettext package.

RAILS_ROOT/config/environment.rb 修正

require 'gettext/rails'
GetText.output_charset = 'UTF-8'

ドキュメントでは RAILS_ROOT/app/controllers/application.rb に追加していますが、こっちにおいてみました。どっちがいいんでしょ>識者の方。

RAILS_ROOT/app/controller/application.rb 修正

class ApplicationController < ActionController::Base
  before_filter :init_gettext
  def init_gettext
    bindtextdomain('lazydog', request.cgi)
    @headers['Content-Type'] = 'text/html; charset=UTF-8'
  end
end

environment.rb に移した分を除いて、ドキュメントそのままです。

pot ファイル作成の rake タスクを追加

rgettextによる翻訳文字列の抽出 ではシェル上で実行していますが、ワイルドカードに ** が使えないシェルを使っているので rake のタスクにしました。RAILS_ROOT/Rakefile に以下を追加(2005/09/07:rgettext コマンドではなく、GetText.rgettext を使うように修正しました)。

desc "Create pot file for L10n"
task :makepot do
  require 'gettext/rgettext'
  files = Dir.glob('**/*.{rb,rhtml}')
  GetText.rgettext(files, "po/foo.pot")
end

mo ファイル作成の rake タスクを追加

po → mo変換 のままです。

desc "Create mo-files for L10n"
task :makemo do
  require 'gettext/rmsgfmt'
  GetText.create_mofiles(true, "po", "locale")
end

文字列の GetText 化

view や helper や contoroller 内の文字列をひたすら _('hoge') に。

pot/po ファイル作成

ファイルを作って編集。

$ mkdir po
$ mkdir po/ja
$ rake makepot
$ cp po/foo.pot po/ja/foo.po
$ vi po/ja/foo.po

mo ファイル生成

rake makemo

webrick サーバ再起動

すでに動作をさせている環境だったので、kill してから ruby script/server。

そして日本語に

おー。ブラウザの Accept-Language によって、表示すべき言語を自動で判断するんですね。便利。

_ [Ruby] るびま 9 号 このエントリーを含むブックマーク

一周年おめでとうございます&おつかれさまです。後で読むためにメモ。

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

_ むとう [environment.rb に移した方が良いかもしれませんね。requireとset_output_charset..]

_ だて [どうもです。GetText.rgettext を使うようにしました。]


2005-09-07 この日を編集

_ [Ruby][Rails] Ruby-GetText-Package を使ってみる (2) このエントリーを含むブックマーク

pot ファイルや po ファイルをインクリメンタルに更新するにはどうすればいいんでしょうか。rgettext コマンドは新規に potファイルを生成することはできても、既存の pot ファイルに差分更新することはできないようですので。理想的には以下のようにできるといいなあと。

  • 開発者が rb/rhtml ファイルを更新
  • 開発者が rake タスクを実行する
  • rake タスクが pot ファイルに差分だけ追加
  • rake タスクが po ファイルに差分だけ反映
  • 開発者が po ファイルを更新

開発者≠翻訳者で、リリース済みアプリケーションの mo ファイルを作るのではなく、開発者=翻訳者で、開発途中のためにメッセージリソースが頻繁に更新されるという環境を想定しています。

_ [Rails] 『Ruby on Rails』入門 Hotwired このエントリーを含むブックマーク

Rubyは、日本が90年代に生み出した最高傑作のひとつ。

とうとう Webmonkey の記事に rails が。Webmonkey は特異なノリの文章で有名?ですが、相変わらず飛ばしてます。やけに半端なところで「次回に続く」となっていますが、本国版を見るに全 6 ページ構成のようですね。

_ [Blog] 「○○について」というスパムブログ このエントリーを含むブックマーク

void GraphicWizardsLair( void ); // 今日の井原 - アフィリエイト収入を目的としたスパムblogが急増してる件 より。

私も数ヶ月前から「○○について」という自動生成ページに、このWeb日記の内容がコピペされまくっています。どうやらGoogleやRSS検索などで引っ掛けたblogのdescriptionやCDATAから抜き出して自動生成アフィリエイトblogを生成している感じです。

仕事柄、スパムブログのブラックリストを作ったりしてますが、「○○について」系のサイトは数十確認しています。Wikipedia からすべて「引用」している辞書系サイトと、seesaa ブログのセットですね。例えば、 anon1.com と igakususume.seesaa.net。筍のように増えていて、かなりうんざりします。

_ [Ruby][Rails] Ruby-GetText-Package を使ってみる (3) このエントリーを含むブックマーク

差分更新はどうするのだろう と書いたところ、むとうさんZnZ さんに msgmerge を使えばできると教えていただきました。ありがとうございます。

ということで、Ruby-GetText-Package の Rakefile ほぼそのままですが、po/mo ファイルの差分更新を rake タスクにしてみました。

def msgmerge(name, po_root, tmp_file = "tmp.pot")
  system("msgmerge -U #{po_root}/#{name}.pot #{tmp_file}")
  Dir.glob("#{po_root}/*/#{name}.po") do |f|
    lang = /#{po_root}\/(.*)\//.match(f).to_a[1]
    system("msgmerge -U #{po_root}/#{lang}/#{name}.po #{tmp_file}")
    cont = IO.read(f)
    cont.sub!(/(Project-Id-Version\:.*)(\d\.\d\.\d)/, "\\1#{GetText::VERSION}")
    File.open(f, "w") do |out|
      out.write(cont)
    end
  end
end
 
desc "Update po files"
task :updatepo do
  require 'gettext/rgettext'
  files = Dir.glob('**/*.{rb,rhtml}')
  GetText.rgettext(files, "tmp.pot")
  msgmerge("foo", "po")
  File.delete("tmp.pot")
end
 
desc "Create new pot file for L10n"
task :makepot do
  require 'gettext/rgettext'
  files = Dir.glob('**/*.{rb,rhtml}')
  GetText.rgettext(files, "po/foo.pot")
end
 
desc "Create mo files for L10n"
task :makemo do
  require 'gettext/rmsgfmt'
  GetText.create_mofiles(true, "po", "locale")
end
本日のツッコミ(全3件) [ツッコミを入れる]

_ むとう [いやいや、その辺の「メンテナンス性」の高さが、GetTextファミリが他を追随させない理由の1つです。 ちなみに差..]

_ だて [なるほど。やはり用意されているんですね。 まずは GetText 自体の勉強をしてみます。]

_ むとう [GetText::VERSIONの部分はだてさんのアプリにあわせて変えてくださいませ(そこには。 それから、make..]


2005-09-12 この日を編集

_ [Rails] Feedication.com このエントリーを含むブックマーク

rails で作られたウェブアプリケーションのアグリゲーションサービスです。Flickr、del.icio.us、43things、Audioscrobbler に対応。現在は RSS フィードの内容を表示するくらいしか機能がないので使い道はないですが、育ち方によっては面白そう。すぐできそうなのは、アグリゲートした結果を Javascript 出力してブログのサイドバーにはれるようにするとか、del.icio.us とはてなブックマークに同時に登録できるようにするとか。

他のウェブアプリケーションの機能を mix して自分の機能とする例(googlemap 以外で……)としては、A9.com が 43things、Flickr、Feedster からの検索結果をまとめて表示できることが挙げられるでしょうか。と書いていて気付きましたが、amazlet.com などアフィリエイトの分野の方がこの手の技は進んでますね。


2005-09-13 この日を編集

_ [Ruby] gonzui hacks? このエントリーを含むブックマーク

こういうファイルを用意して、↓のようなワンライナー(便宜上改行)に食べさせると、

ruby -ropen-uri -ne '
BEGIN{$h={}};r=$_.chomp.strip;
$h[r]=open("http://raa.ruby-lang.org/gonzui/search?q=%22require+#{r}%22&fm=ruby").read.gsub("\n","").gsub(/<\/?strong>/,"").match(/of (\d+) for/).to_a[1];sleep 10;
END{$h.sort{|a,b|b[1]<=>a[1]}.each{|i|puts i.join("\t")}}
'

こんな結果になりました。RAAgonzui を使って標準添付ライブラリの使用頻度を調べてみたわけです(どのくらい正確かはあんまり気にしないでください)。

ちなみに上 10 個はこんな感じでした。上 4 つと find はインストーラ、拡張ライブラリ作成やテストなどに使われるものなので多くなるのは当然として thread が結構使われているのが意外でした。socket cgi uri が多いので、Ruby はネットワークやウェブのアプリが多いってことになりそうですね。

rbconfig        249
mkmf    205
test/unit       170
ftools  142
socket  88
getoptlong      71
find    65
cgi     61
thread  52
uri     51

2005-09-14 この日を編集

_ [つぶやき] ほわいとばんど このエントリーを含むブックマーク

個々人がそれに託す気持ちやプロジェクトそのものの意義は置いとくとして、不安を植え付ける一方でそれを解消するための免罪符を売るという売り方が実にうまいですね。「ほっとけない」=あなたが行動しないことで亡くなる人がいると言われれば、大抵の人は何もしないことに不安を感じます。そのすぐ隣で、これを買えば命を救うことができるという品物が売っていれば、不安感を解消するために数百円ばかりを払うのは簡単でしょう。


2005-09-15 この日を編集

_ [] apache でディレクトリごとにリアルタイムにログを仕分けるには? このエントリーを含むブックマーク

VirtualHost や Directory ディレクティブで CustomLog を記述する以外に、ディレクトリごとにログを生成する方法はあるのかな。module とか handler とかを作れば可能?

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

_ トオルスガルモノノ [パイプログを使うとか?]

_ だて [なるほど。ログ出力をパイプに通すことができるんですね。 この線で考えてみます。]


2005-09-17 この日を編集

_ [イベント] OSC2005 Fall このエントリーを含むブックマーク

行ってきます。参加予定はこんな感じです。M-3 じゃなくて 8B-3 にすればよかったかな。

感想:あなたのRubyコードを添削します

gorou さんの 3 つくらい後ろに座ってました。青木さんのコードに対するこだわりが聞けてよかったです。BitChannel のソースが読みやすくて感心して、自分もああいうコードが書けるようになりたいと思っていたので勉強になりました。コンパクト、そして意図を明確に、がポイントですかね。


2005-09-20 この日を編集

_ [ActiveRecord] datetime か timestamp か このエントリーを含むブックマーク

acts_as_versionedの使い方 :: wiki.rails2u.com を読みながら acts_as_versioned を試していておやと思ったことが。

acts_as_versioned は gem でインストールして、バージョン管理テーブルは create_versioned_table で作成するとします。wikis テーブルは acts_as_versionedの使い方 :: wiki.rails2u.com そのまま。で、create_versioned_table を走らせてみます。

Wiki.create_versioned_table
/usr/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/connection_ada
pters/abstract_adapter.rb:462:in `log': You have an error in your SQL syntax.  C
heck the manual that corresponds to your MySQL server version for the right synt
ax to use near '(14)' at line 1: ALTER TABLE wiki_versions ADD created_on dateti
me(14) (ActiveRecord::StatementInvalid)

ALTER TABLE wiki_versions ADD created_on datetime(14) という無効な SQL 文を発行しているようです。create_versioned_table の該当部分に相当するコードは以下のようになります。

Wiki.connection.add_column("wiki_versions", "created_on", :timestamp, :limit => 14, :default => nil)

timestamp で type を渡しているのに datetime? ということで add_column を調べていくと、active_record/connection_adapters/mysql_adapter.rb で定義されている ActiveRecord::ConnectionAdapters::MysqlAdapter#native_database_types が原因でした。native_database_types は、ActiveRecord での型とデータベースネイティブの型の変換テーブルを提供しています。timestamp の部分を見ますと、

:timestamp   => { :name => "datetime" },

というように datetime に変換されますので、上述した add_column の :timestamp, :limit => 14 は datetime(14) に変換されるわけです。

ActiveRecord の基本的なことのような気もしてきましたが、native_database_types の定義を見るに、ActiveRecord 的には timestamp よりも datetime を使った方がいいってことなんでしょうかね(MySQL 的にどうなのかもよくわかりませんが)。とりあえず、limit を指定しなければプログラム上は OK ですけれど。


2005-09-21 この日を編集

_ [Ruby] Ruby 1.8.3 リリース このエントリーを含むブックマーク

安定版の新バージョンが予定通りリリースされました。が、前日のあの怒涛のコミット模様を見ていると、すぐ移行して大丈夫か不安になります……この Linux 機上では make も make test も普通に通っていますけれど。


2005-09-22 この日を編集

_ [Ruby][Rails] RailsFS このエントリーを含むブックマーク

FUSE という自分の好きなユーザランドのファイルシステムを定義できるソフトウェアがあります。これを Ruby から使えるようにしたライブラリとして FuseFS があります。データを格納する手段というのはプレーンテキスト、CSV、YAML、XML、RDB、www などなどと沢山あるわけですが、FuseFS はそれらのストレージに対するブリッジとして働き、ファイルシステムという統一されたインタフェイスでアクセスできるようにしてくれます(ドライバは自分で書かないといけませんけれど Ruby で手軽に書けます)。何か面白い使い方ができそうだなと思ってましたが、RedHandedrails アプリの ActiveRecord クラスをマウントする記事が書かれていました。楽しそうですね、これ。後で試してみます。

_ [Ruby][Rails] RailsFS を試してみる このエントリーを含むブックマーク

ということで試してみました。

FUSE のインストール

# emerge sys-fs/fuse
# modprobe fuse

FuseFS のインストール

$ wget http://rubyforge.org/frs/download.php/6158/fusefs-0.3.tar.gz
$ tar fvxz fusefs-0.3.tar.gz; cd fusefs-0.3
$ ruby setup.rb config
$ ruby setup.rb setup
# ruby setup.rb install

Rails アプリ

About "How to make a todo list program with Rails 0.9" にある TODO リストアプリを作り、適当にデータを登録します。

mysql> select * from todos;
+----+-----------------+------+
| id | description     | done |
+----+-----------------+------+
|  1 | coding          |    0 |
|  2 | write diary     |    0 |
|  3 | drink tea       |    1 |
|  4 | read AWDR       |    0 |
|  5 | eat a chocolate |    0 |
+----+-----------------+------+
5 rows in set (0.00 sec)

マウント

RailsFS After a Couple Minutes of Tooling With Fuse, Whoa のコードを script/filesys として保存します。後はマウントポイントを作成してから script/filesys を実行すれば OK。

$ mkdir ~/railsmnt/
$ ruby script/filesys ~/railsmnt/

確認

マウントできているか確認します。

$ ls ~/railsmnt/
todo
ls ~/railsmnt/todo/
1  2  3  4  5
$ cat ~/railsmnt/todo/
cat: /home/date/railsmnt/todo/: Is a directory
$ cat ~/railsmnt/todo/1
--- !ruby/object:Todo 
attributes: 
  done: "0"
  id: "1"
  description: coding
$ vi ~/railsmnt/todo/1 # done を 1 にして :wq
"railsmnt/todo/1" E212: Can't open file for writing

読むのはできましたが、書けないですね。read only になっている模様。うーむ。


2005-09-25 この日を編集

_ [メモ] NerdTV翻訳 このエントリーを含むブックマーク

NerdTV続報(L'eclat des jours) 経由

NerdTVMacPaint のソースコードが公開へ で知った口です。その翻訳をされている方が。CC が有効活用されているのを初めて見た気がします。


最近のコメント:

  1. だて (09-17)
  2. トオルスガルモノノ (09-16)
  3. むとう (09-09)

RSS
Creative Commons License
This work is licensed under a Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).