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

November 04, 2007 [長年日記]

[Misc] 12/1 町田(東京)でライブやります!

普段、こちらには書かないネタなのですが、宣伝効果はこちらの方がちょっとだけ大きいので宣伝します。

実は私、趣味でサックス吹きをしておりまして、この度、ちょー気合入ってるバンドの初ライブをすることになりました。バンドはTower of Powerというバンドのコピーバンドです。Over 30な世代にはかなりぐぐっとくるバンドだと思います。若い人たちにはおっさんたちのパワーを見せつけますってか、どんな世代向けにとっても、とにかくカッコいいバンドだと思います!!

というわけでTRACKS OF PEACE初のライブ告知です。"ROCK SUMMIT 4"というイベントの先頭バッターです。うひょー。

2007年12月1日(土)

町田ACT

OPEN 17:20 START 17:30

¥2,000(with 1 Drink)

ってか、Ruby-GetTextを使ってる人は全員参加で!・・・というのは冗談ですが、ともかく、音楽好きの人はぜひ遊びに来てください。絶対損はさせません!

というわけで、来てくださる方、まずは私までメールくださいね!

詳しくは→ TARCKS OF PEACE 初ライブ決定!!


November 08, 2007 [長年日記]

[Ruby] JRuby on Rails with Ruby-GetText-Package

ようやく動きました。試してみたい方は、RubyForgeのCVS版をローカルに落としてきて、rake packageとするとpkg配下にgemができるので、これをjrubyのgemでインストールしてください。後は、1.10.0の頃のやり方と何も変えずに動かすことができるはず。誰かテスト&バグレポートしてくださるとありがたいです。

時間がかかったのは(まー、Rubyに使う時間が少なくなってきてるってこともありますが)、Ruby-GetText-Package自体を大きく変更したためです。

まず、Locale関連をgettext/配下からlocale/配下に移しました。ほんとは別ライブラリ化までやりたかったんですが、locale.rubyforge.orgがすでに取得されていたため諦めました。下手に変な名前に変更したくないですしね。

この変更で、機能的には、Localeはgettextの一機能というよりも汎用的にロケールの基本情報を扱うライブラリになったと思います。(実は、当初(何年前だ?(^^;))からこのようにしたかったため、LocaleはGetText::Localeではなく、Localeと定義してあったりしたのでした。

で、その際に、extモジュール(Cのラッパ)を使わないようにしたのですが、実はこれが非常に大きな変更点の1つになります。win32環境ではdlモジュールを使ってシステムのライブラリを呼び出したり、jruby環境ではJavaのライブラリを呼び出したりしてシステム上のロケール情報を取得するようにしたことで、Cコンパイラを使う必要がなくなりました。(*nixな場合は環境変数LANG or LC_ALL等がきちんと定義される前提になります・・・この割り切りが今までできなかったんです・・・)。

結果、今までのようにアーキテクチャ毎にパッケージを選択する必要もありませんし、インストール環境にCコンパイラも不要です。他にもextモジュールがあることによる様々な問題がなくなるため、今まで以上に簡単にRuby-GetText-Packageを使うことができるはずです。

そんなこんなで次にリリースするのは2.0(あるいはプレビュー版かな)になります。申し訳ないですが一部コアな機能は非互換になると思われます(Railsでの一般的な使い方レベルであれば問題ないはずですが)。

ともかく、時間が無いのでいつになるかはわかりませんが、ご期待くださいまし。


November 09, 2007 [長年日記]

[Ruby] JRubyのインストールと環境設定 Linux編

JRubyをLinuxにインストールする場合、どうするとよいのだろう。

とりあえず、自分の環境を晒してみる。

まずは、インストール先。/opt/配下にしようかと思ったんだけど、JDKが/usr/java/配下にあるので、それにならって、/usr/java/配下に置くことにした。

こんな感じ。

lrwxrwxrwx 1 root  root    16 2007-07-07 09:00 default -< /usr/java/latest/
drwxr-xr-x 9 root  root  4096 2007-07-07 09:00 jdk1.6.0_02/
lrwxrwxrwx 1 root  root    11 2007-10-25 23:26 jruby -< jruby-1.0.1/
drwxr-xr-x 6 root  root  4096 2007-10-25 23:25 jruby-1.0.1/
lrwxrwxrwx 1 root  root    21 2007-07-07 09:00 latest -< /usr/java/jdk1.6.0_02/

/usr/jara/jrubyはjruby-1.0.1のシンボリックリンクにしておく。

ruby-1.8.6もそのまま使うので、PATH環境変数は使わずに、$HOME/.aliasに以下のようなエイリアスを記述する。

alias jruby='/usr/java/jruby/bin/jruby'
alias jirb='/usr/java/jruby/bin/jruby /usr/java/jruby/bin/jirb'
alias jgem='/usr/java/jruby/bin/jruby /usr/java/jruby/bin/gem'
alias jrake='/usr/java/jruby/bin/jruby /usr/java/jruby/bin/rake'

これで、通常のrubyと共存ができる。こんな感じ。

$ jruby -v
ruby 1.8.5 (2007-08-23 rev 4201) [i386-jruby1.0.1]
$ jirb
$ jgem install gettext
$ jrake updatepo

こんな感じでどうだろ。もっと簡単に使う方法ある?

[Ruby] JRuby with Ruby-GetText-Package

大体は動くんだけど、テストが一部通らねー。

でも、これってJRubyのバグだよね。Matz Rubyでは動くんだし・・・。

Railsは大体動くみたいだし、ヨシとすっかなー。(弱気)

[Ruby] JRubyでyieldとbreakのネスト

テストが通らない理由が分かった。単純化すると以下のようなコードの挙動がRubyとJRubyで違うからだ。

def each_test
  [:a, :b, :c].each {|key|
    [1,2,3].each {|i|
      yield  i
    }
  }
end
 
each_test {|i|
  print i
  break if i == 2
}
puts

んで、実行結果。

% ruby -v test.rb
ruby 1.8.6 (2007-03-13 patchlevel 0) [x86_64-linux]
12
% jruby -v test.rb
ruby 1.8.5 (2007-11-01 rev 4810) [i386-jruby1.0.2]
121212

JRubyだと、1回のbreakでは一番外まで抜け出せないようだ。 不具合レポートも出ている模様

結局のところはJRubyを直してもらわないとダメなんだけど、うまい回避策ないかなぁ。

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

takai [$ jruby -S rake とかが便利ですよ]

むとう [おぉ。そんな技が。ありがとうございます!]


November 10, 2007 [長年日記]

[Rails] Rails-2.0 RC1

試してみた。scaffoldってなくなっちゃったの!?。マジですか!?

#追記:scaffoldはあるんだけど、中身=表示項目が生成されなさげ。

[Rails] Rails-2.0 RC1 with Ruby-GetText

自分で〜.erbを書き直して実行してみたら普通に日本語化された。お、こりゃ、修正なしでオーケーなのか?

(今日は?が多いな(苦笑))

[Rails] Rails-2.0 RC1 with Ruby-GetText(2)

GetText付属のRailsサンプルは動かなくなってる。うーん、なんでだ? .rhtml→.erbしないといけないのかな・・・。ダメだ、眠い。寝よ。


November 11, 2007 [長年日記]

[Rails] ふるーいRailsアプリケーションをとりあえず2.0化する

Ruby-GetText-PackageにはRailsのサンプルアプリケーションがついているんだけど、2005/8/28にscaffoldした代物なんだよね(Rails-0.13.1らしい)。

さすがに、Rails2.0RC1ではそのまま使えなかったので修正してみることにしよう。ちなみに修正が必要な部分はRuby-GetText-Packageとは関係なかった(Ruby-GetText-Packageに依存する部分で修正する必要があるところは今のところなさそう、うひっ)。

といういわけでスタート。まずは、比較のためにRails-2.0RC1でサンプルアプリ(blog)と同じ名前の空アプリを作っておく。

$ rails blog

で、サンプルアプリに戻って、ruby script/serverを起動すると500 Internal Server Errorになるので、log/development.rbの内容を確認しながら修正していく。

config/environment.rbのRails::Initializer.run do |config| endブロック内にconfig.action_controller.sessionの設定が必要とのことなので、先ほど作った空アプリのconfig/environment.rbの該当部分からコピペする。

  config.action_controller.session = {
    :session_key => '_blog_session',
    :secret      => '481e79cd6d557ee64d26390fb85013f3'
  }

これで、ひとまず一覧は表示できるようになった。
さて次はと。編集系のrhtmlで、start_form_tagがないよ、というエラーになるのでそこは書き換える。
こんな感じかな。

(new.rhtml)
<% form_for :article, @article, :url => {:action => 'create'} do |f| %>
  <%= render_partial 'form' %>
  <p><%= submit_tag _('Create') %></p>
<% end %>
 
(edit.rhtml)
<% form_for :article, @article, :url => {:action =>  'update', :id => @article} do |f| %>
  <%= render_partial 'form' %>
  <p><%= submit_tag _('Create') %></p>
<% end %>

APIリファレンスを見ても更新のときに :id => @articleなんて書いてないんだけど、これ書いてないとidが渡せなかった。うーむ。

ま、ともかく、以上でサンプルアプリは無事動くようになった。めでたしめでたし・・・・・

と思ったんだけど、よく考えるといろいろなバージョンの流儀が混じってるソースって、サンプルとしてはよろしくないよね。rhtmlっていうファイル名からしてRails-2.0っぽくないし・・・。結局イチから直すとするか。はー。