木曜日 12 11, 2008

JavaFX on Netbeans 6.5 with mac problem

昨日も書きましたが、JavaFX1.0リリースに合わせてさわり始めたのですが、 かなり面白いです。
Ruby-Processingのようなシンタックスで、ごりごり作れる感じです。アニメーションがもう少しやりやすければとは思いますが。。。後日JavaFXの勉強記事を始めたいと思っています。

ところで、同じく昨日書きましたが、JavaFX のNetbeans6.5プラグインで問題。
MacOSX (10.5.5(intel)、OS言語:英語)の上でJavaFXで日本語を入力して、実行すると以下のような感じに必ず文字化けします。JDK5、JDK6ともに同様です。



昨日の片貝さんやchrさんのコメントにあるように、project.propertiesのsource.encodingを



source.encoding=SJIS


としてみても同様に文字化けします。
OS言語が日本語の環境でやってみると文字化けは発生せずに問題なく、実行できます。
netbeans.confに-J-Duser.language=jaを足して、日本語で起動するようにしても同様の文字化けです。
Macが遅くなるので、できればOS言語は英語のままで行きたいと思っていますが、何か回避策はないものでしょうか?

水曜日 12 10, 2008

JRuby on rails 2.2.2 new feature(3) : Thread Safe

昨日のTechDaysでの講演がBuilder zdnetの記事になってました。ちょっと恥ずかしいです。

参加していただいた皆様、ありがとうございました。

あとJavaFX1.0がリリースされたので、ちょっとさわりはじめてみました。Netbeans6.5 on OSXで日本語が文字化けしてしまいます。Windowsでの回避方法は分かったのですが、macではわかりません。macは文字コードUTF-8だった気がするのですが、気のせいでしょうか?どなたか対処法ご存知でしたら、教えてください。



前置きが長くなりましたが、今回は上の記事にもありますが、Rails2.2.2のスレッドセーフとJRubyについてです。コネクションプールは次回。

ご存知の通り、Rails2.2.0からはスレッドセーフとなりました。この恩恵を一番受けるのが、JRubyです。

まずは次の図をご覧ください。



Ruby1.8.7(MRI)の場合、1つのOSのネイティブスレッドがRubyインタプリタに割り当てられ、GILがあって、Rubyのスレッドはグリーンスレッド(ユーザ空間のスレッド)として動作することになります。そのため、Railsがスレッドセーフになっても、Ruby自体がグリーンスレッドのため、グリーンスレッドレベルでのマルチスレッド化となり、Rubyインタプリタ自体はシングルスレッドで動作することになります。そのため、パフォーマンスを向上させるためには、複数のインタプリタを起動させる事が必要となります。

これに対して、JRubyの場合、JVMがネイティブスレッドに対応しており、JRubyのグリーン・スレッドが1対1でJVMに割り当てられたネイティブスレッドにマッピングされることになりますので、実質Railsがネイティブスレッドで動作することになります。そのため、MRIと同じ1つのプロセスでもよりよいパフォーマンスを得ることができるようになっています。


このようにRailsがスレッドセーフになったことで、JRuby on Railsがパフォーマンスという面で考えても非常によい選択肢となったのではないでしょうか?

火曜日 12 09, 2008

Rails2.2 new feature(2) - 1 : i18n_generators

先日i18nを試してみましたが、正直ロケールファイルが面倒くさいとおもっていたら、こんなのがあるようです。


i18n対応Scaffoldとロケールファイルを自動生成してくれるgem。現在0.3.1。

JRubyでも動作します。Rails2.2.2以降対応

まずインストール。


$ gem install gettext
$ gem sources -a http://gems.github.com (githubをgemレポジトリとして追加)
$ gem install i18n_generators



デモアプリで試してみます。まずはscaffold。generatorが変更になっています.


$ ./script/generate i18n_scaffold article title:string body:text


この状態で、英語、ドイツ語のロケールファイルが自動生成されますが、日本語がないので、以下のコマンドで作ります。


./script/generate i18n ja


そうすると、environment.rbに

config.i18n.default_locale = 'ja'


が設定され、config/locales/ja.ymlが自動生成されます。

僕の環境では、generateした時に必ず



undefined method `count' for #


と出ますが、問題なく動作はしています。



さらにModel/Viewをi18n化したい場合は、 





./script/generate i18n_translation ja


で生成されるはずなのですが、同様のエラーが出て、こちらは動作しません。

現在のものでも、十分使えますが、very very very very roughly implemented just for experimentとあるので、これから開発が進んでいくのでしょう。これからの発展に期待です。

Via :: Close to the EDGE

月曜日 12 08, 2008

Ruby EE for Solaris!

Ruby1.8.6互換で、GCをmark&sweepに対応させ、メモリ使用量を削減したRuby Enterprise Editionに、ついにSolaris正式対応版が登場。

Ruby Enterprise Edition 20081205

正式対応したことで、インストールも非常に簡単に。


$ gtar zxvf ruby-enterprise-1.8.6-20081205.tar.gz
$ ./ruby-enterprise-1.8.6-20081205/installer



注意点としては1つ。LD_LIBRARY_PATHを/opt/sfw/libに通していると、コンパイルエラーとなりますので、/opt/sfw/libを外してください。

sparc Solarisでしか試していませんが、多分x86でも行けると思います。

これでSolarisでもApache2+Passenger+Ruby EEという組み合わせが使えます!

日曜日 12 07, 2008

glassfish gem v.0.9.1 release

glassfish gem の最新版v.0.9.1がリリースされました。


今回の最大の目玉は、


Rails2.2を完全サポート、スレッド・セーフ/ノン・スレッド・セーフ設定両方に対応 



もちろんバグフィックスも含まれていますので、お使いの方は、


gem update glassfish



でアップデートを!

金曜日 12 05, 2008

(j)Ruby on Rails 2.2 new feature (2) : i18n

かなり時間があいてしまいましたが、Rail2.2の新機能であそんでみたいと思います。前回は2.2.0でしたが、書かない間に2.2.2の正式リリースがでてしまいました。すいません。


gem update rails



でアップデートできます。アップデート後は、railsコマンドでdemoアプリを作成しなおしました。

今回はi18nを使ってみます。まず日付をローカライズするためのプラグインをインストールします。


./script/plugin install git://github.com/clemens/localized_dates.git



続いてi18nを初期化してロケールファイルを読み込む処理を行います。


I18n.default_locale = 'ja-JP'
%w{yml rb}.each do |type|
I18n.load_path += Dir.glob("#{RAILS_ROOT}/app/locales/\*.#{type}")
end



config/initializers/load_i18n.rb(ファイル名は任意)に上記の内容を記述。

demoアプリでscaffold


./script/generate scaffold post title:string content:text



もちろんmigration。そしてapp/models/posts.rbを編集。


class Post < ActiveRecord::Base
validates_presence_of :title, :content
validates_uniqueness_of :title
end



つづいて、ロケールファイルの準備。
app/locales/ja-JP.rb


{  
:'ja-JP' => {
:date => {
:formats => {
:default => "%Y-%m-%d",
:short => "%e %b",
:long => "%B %e, %Y",
:long_ordinal => lambda { |date| "%B #{date.day}, %Y" },
:only_day => "%e"
},
:day_names => %w(日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日),
:abbr_day_names => %w(日 月 火 水 木 金 土),
:month_names => [nil] + %w(1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月),
:abbr_month_names => [nil] + %w(1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月),
:order => [:year, :month, :day]
},
:time => {
:formats => {
:default => "%a %b %d %H:%M:%S %Z %Y",
:time => "%H:%M",
:short => "%d %b %H:%M",
:long => "%B %d, %Y %H:%M",
:long_ordinal => lambda { |time| "%B #{time.day}, %Y %H:%M" },
:only_second => "%S"
},
:am => '',
:pm => ''
},

:datetime => {
:distance_in_words => {
:half_a_minute => '30分',
:less_than_x_seconds => '{{count}} 秒以下',
:x_seconds => '{{count}} 秒',
:less_than_x_minutes => '{{count}} 分以下',
:x_minutes => '{{count}} 分',
:about_x_hours => '約 {{count}} 時間',
:x_days => '{{count}} 日',
:about_x_months => '約 {{count}} ヶ月',
:x_months => '{{count}} ヶ月',
:about_x_years => '約 {{count}} 年',
:over_x_years => '{{count}} 年以上'
}
},
:number => {
:format => {
:precision => 3,
:separator => '.',
:delimiter => ','
},
:currency => {
:format => {
:unit => '¥',
:precision => 2,
:format => '%u%n'
}
}
},

:activerecord => {
:errors => {
:template => {
:header => "{{model}}でエラーが発生しました",
:body => "以下のメッセージを確認してください:",
},
:messages => {
:inclusion => "は、含まれていません",
:exclusion => "は、有効ではありません",
:invalid => "は、妥当ではありません",
:confirmation => "は、確認できません",
:accepted => "は、入力できません",
:empty => "は、何も入力されていません",
:blank => "は、ブランクです",
:too_long => "は、長すぎます ({{count}}文字以下)",
:too_short => "は、短すぎます ({{count}}文字以上)",
:wrong_length => "は、桁数が合っていません({{count}}桁必要です)",
:taken => "は、有効ではありません",
:not_a_number => "は、数字ではありません",
:greater_than => "は、{{count}}文字を超えて入力されています",
:greater_than_or_equal_to => "は、{{count}}文字以上入力されています",
:equal_to => "は、{{count}}と同値です",
:less_than => "は、{{count}}文字未満です",
:less_than_or_equal_to => "は、{{count}}文字以下で入力されています",
:odd => "は、端数が入力されています",
:even => "は、偶数が入力されています"
}
},
:models => {
:post => "記事"
},
:attributes =>{
:post =>{
:title => "タイトル",
:content => "内容"
},
},
},
}

}




これでエラーメッセージが日本語化されます。


上記はruby hashで記述しましたが、


:ja-JP
:date
:format
:default "%Y-%m-%d"
.
.
.



のようにyaml形式で書くこともできますので、viewの日本語化をymlで書きます
/app/locales/ja-JP.yml


ja-JP:
label:
posts:
new_post: 新しい記事を作成
create: 投稿する
back: 前の画面へ



そしてview、app/view/posts/new.html.erbを以下のように編集。


<h1><%= t('label.posts.new_post') %></h1>

<% form_for(@post) do |f| %>
<%= f.error_messages %>

<p>
<%= f.label :title, t('activerecord.attributes.post.title') %><br />
<%= f.text_field :title %>
</p>
<p>
<%= f.label :content, t('activerecord.attributes.post.content') %><br />
<%= f.text_area :content %>
</p>
<p>
<%= f.submit t('label.posts.create') %>
</p>
<% end %>

<%= link_to t('label.posts.back'), posts_path %>




そうすると、このように、


viewも日本語化できます。


正直なところ、gettextを使う方が何倍もお手軽ですが、Rails標準のi18nとして使うことがあるかもしれません。

火曜日 11 25, 2008

(J)Ruby On Rails in Sun TechDays 2008

Rails 2.2.x系の新機能紹介を書く予定がかなり遅めの夏休みをとっていたりしたので、遅れ遅れになってしまってすいません。

そうこうしているうちに、2.2の正式リリース2.2.2がリリースされました。明日から続きを書く予定です。


ところで、来月12月2-4日、Sun Tech Days 2008 in Tokyoが開催されます。

このイベントで僕も(J)Ruby On Railsについて話させていただきます。

時間は12月3日(水)13:10-14:00 (J)Ruby On Railsです。

サイトの説明文では今一つ内容がつかみ辛いかもしれませんが、一応下記の内容で話す予定です。

主にRoRを知らない方向けの内容になりますが、最後にRails2.2.2とJRubyについて話します。


  • Rubyとは?

  • Ruby on Railsとは?

  • RoRのMVC解説(HelloWorldアプリケーションを作成しながら)

  • JRubyとは?(Ruby-Processing のライブコーディングするかも)

  • Warbler/Glassfish v3

  • RoR2.2.2+JRubyでパフォーマンス向上



こんな感じになる予定です。ぜひ立ち寄って見てください。

金曜日 11 07, 2008

JRuby Community in CU

Yahoo! Japanが始めたビジネスSNS"CU"内にJRubyコミュニティをつくりました。よろしければ、ご参加ください。

Rails2.2のリリースを控え、いろいろ情報交換ができればと思っています。
よろしくお願いします。

木曜日 11 06, 2008

JRuby On Rails2.2RC1 with Glassfish gem (1)

JRubyにとって、史上最も重要なRails、v.2.2のリリースが近づいて来ました。現在RC1となる2.2.0(正式リリースは2.2.1)がリリースされていますが、このRC1とglassfish gemを使って、何回かにわけて、v.2.2の新機能に迫っていきたいと思います。

まず以前にも書きましたが、2.2最大の特徴は「スレッド・セーフ」。ただしMRI(cRuby)だとRails自体はグリーンスレッドで動作する。しかしJRubyを使うことで、グリーンスレッドではなく、ネイティブスレッドとして動作が可能。これにより、一つのプロセスで、すべてのリクエストを並列に処理できるようになり、メモリの使用量の削減はもちろん、よく問題になるスケーラビリティについても改善されることになります。

ということで、実際に2.2を使っていきます。今回はインストールまで。
JRubyのインストール
こちらから1.1.5をダウンロード後、解凍し、パスを通しておいてください。
GlassFish gemのインストール

jruby -S gem install glassfish

Rails2.2.0のインストール

jruby -S gem install rails -s http://gems.rubyonrails.org -v 2.2.0

activerecord-jdbcmysqlのインストール

2.2.0にはrubyのmysqlドライバが同梱されていないようです。

jruby -S gem install activerecord-jdbcmysql-adapter


これで準備は完了。いつものようにアプリケーションを作ります。


$ rails -v
Rails 2.2.0
$ rails demo



config/environment.rbを確認すると、

RAILS_GEM_VERSION = '2.2.0' unless defined? RAILS_GEM_VERSION


となっています。

最後に、スレッドセーフモードで動作させるために、config/environments/production.rbを編集します。


# Enable threaded mode
config.threadsafe! #コメントアウトをはずします。



今回はここまで。

火曜日 11 04, 2008

JRuby1.1.5 release

JRuby1.1の5度目のバージョンアップ、1.1.5がリリースされました。
特徴は


  • クラスごとのメソッドキャッシング

  • コンスタントキャッシュの改善

  • メモリ使用量の減少

  • Javaの統合のデグレードの解消

  • Rubygemsが1.3.1、RSpecが1.1.11

  • 1.1.4から113のバグfixなどなど



先日とりあげたjetty-railsも問題なく動作するようになっています。



$ jruby -v
jruby 1.1.5 (ruby 1.8.6 patchlevel 114) (2008-11-03 rev 7996) [x86_64-java]
$ cd demo1/
$ jetty_rails
2008-11-04 12:01:33.585::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
starting 3000
2008-11-04 12:01:34.772::INFO: jetty-6.1.9
2008-11-04 12:01:34.865::INFO: NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
2008-11-04 12:01:34.374:/:INFO: Info: using runtime pool timeout of 30 seconds
2008-11-04 12:01:34.374:/:INFO: Info: received min runtimes = 1
2008-11-04 12:01:34.374:/:INFO: Info: received max runtimes = 5

木曜日 10 30, 2008

jetty_rails with JRuby1.1.4 not work

バグ情報ばかり書いている気がしないでもないですが、現在のところ、JRuby1.1.4ではjetty_railsが動作しません。これはバグとして認識されていて1.1.5で修正予定です。

現在のところ、jetty_railsを使いたい場合は1.1.3もしくはtrunk版を使う必要があります。

以下検証です。
1.1.4の場合


$ jruby -v
jruby 1.1.4 (ruby 1.8.6 patchlevel 114) (2008-08-28 rev 7570) [x86_64-java]
$ cd demo1
$ jetty_rails
/Applications/jruby-1.1.4/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:34:in `require': IO error -- jetty_rails/handler/delegate_on_errors_handler (LoadError)
from /Applications/jruby-1.1.4/lib/ruby/gems/1.8/gems/jetty-rails-0.6/bin/jetty_rails:36
from /Applications/jruby-1.1.4/lib/ruby/gems/1.8/gems/jetty-rails-0.6/bin/jetty_rails:19:in `load'
from /Applications/jruby-1.1.4/bin/jetty_rails:19



というようなエラーになり、起動できません。
1.1.3の場合

$ jruby -v
jruby 1.1.3 (ruby 1.8.6 patchlevel 114) (2008-07-20 rev 7243) [x86_64-java]
$ cd demo1/
$ jetty_rails
2008-10-30 11:54:42.815::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
starting 3000
2008-10-30 11:54:42.071::INFO: jetty-6.1.9
2008-10-30 11:54:42.162::INFO: NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
2008-10-30 11:54:43.903:/:INFO: Info: using runtime pool timeout of 30 seconds
2008-10-30 11:54:43.903:/:INFO: Info: received min runtimes = 1
2008-10-30 11:54:43.908:/:INFO: Info: received max runtimes = 5
2008-10-30 11:54:50.870:/:INFO: Info: add application to the pool. size now = 1
2008-10-30 11:54:50.915::INFO: Started SelectChannelConnector@0.0.0.0:3000



1.1.3では問題なく起動できます。

金曜日 10 24, 2008

Glassfish problem with Netbeans 6.5 RC1 on mac

Netbeans6.5RC1がリリースされましたが、RC1にバンドルされているGlassfish v.3prelude b28にはバグがあるようです。

Mac版だけなのですが、このb28ではupdatetoolをインストールしようとすると、



⁞/Applications/NetBeans/glassfish-v3-prelude-b28/bin%  ./updatetool 

The software needed for this command (updatetool) is not installed.

If you choose to install Update Tool, your system will be automatically
configured to periodically check for software updates. If you would like
to configure the tool to not check for updates, you can override the
default behavior via the tool's Preferences facility.

When this tool interacts with package repositories, some system information
such as your system's IP address and operating system type and version
is sent to the repository server. For more information please see:

http://wiki.updatecenter.java.net/Wiki.jsp?page=UsageMetricsUC2

Once installation is complete you may re-run this command.

Would you like to install Update Tool now (y/n): y

Software repository: http://mercurial1.foundry.sun.com/glassfish/v3prelude/dev/mac/
Software repository: http://pkg.glassfish.org/v3prelude/contrib/mac/
Software repository: http://mercurial1.foundry.sun.com/glassfish/v3prelude/contrib/mac/
Software repository: http://pkg.glassfish.org/v3prelude/dev/mac/
Software repository: http://pkg.glassfish.org/v3prelude/release/mac/
IOException: Connection failed: 503: Service Temporarily Unavailable

Could not download application packages. This could be because
you are using a proxy server to access the internet.


というように表示されてしまい、アップデートすることができません。
このバグは最新のb28cでfixされておりますので、Macでお使いになる場合は、こちらからb28cをダウンロードして、お使いください。

木曜日 10 09, 2008

JMaglev

ブラジルのデベロッパ「Fabio Kung」氏が面白いデモを行っています。JRubyとオープンソースのJVMクラスタリング(オブジェクトシェア)アプリTerracottaを使って、今年のRailsConfで話題になったMaglev

MagLev presentation at RailsConf 2008 from Monty Williams on Vimeo.

と同様に、パッチをあてたJRubyが動作する別々のJVM間でオブジェクトの共有を行うというデモ

パッチはまもなく公開予定。異なるJVM間でJRubyのオブジェクトを共有できるとちょっと面白いことができるかもしれませんね。
Via

How to compile EventMachine on Solaris

thinやneverblockを使う際に必要になるeventmachine。しかしSolarisではデフォルトでは、gem install eventmachineではコンパイルエラーでインストールできません。eventmachineをインストールするには、一工夫必要です。

まずgccではなくSun Studioをインストール。

その後、環境変数に以下の値を設定します。


export CXX=g++



(/usr/sfw/binにはパスを通しておいてください)

そして


gem install eventmachine



これでthinもneverblockも使うことができます。

金曜日 9 26, 2008

Passenger for Solaris

RailsアプリケーションをApacheに非常に簡単にデプロイできるモジュールPhusion Passenger a.k.a. mod_rack/mod_railsをSolaris10(SPARC) + Apache 2.2.9で動作させてみました。

今回はSPARC版ですが、基本的にx86版でも動作すると思います。






あらかじめSunStudioまたはgccをインストールしておきます。

そしてまずCoolStackのRubyを用意します。CoolStackのRubyはこちらからダウンロードできます。

解凍後、pkgaddします。



あらかじめSunStudioまたはgccをインストールしておきます。

そしてまずCoolStackのRubyを用意します。CoolStackのRubyはこちらからダウンロードできます。

解凍後、pkgaddします。


pkgadd -d . CSKruby_1.3.1_sparc.pkg



そうすると、/opt/coolstack/bin/ 以下にruby/gemがインストールされるので、パスを通しておきます。

Passengerのインストール時に必要になるので、rackをインストールします。


gem install rack



上記のmod_rackのサイトのバイナリ/ソースではインストールできないので、
こちらからパッチをあてたソースをダウンロードします

9/29追記]Passenger2.1.0からSolarisパッチがマージされているようです。こちらからソースをダウンロード。

ソースを解凍後、(ここでは解凍後/opt/passengerというディレクトリに展開されたとします)以下のようにしてインストールします。


cd /opt/passenger/bin
./passenger-install-apache2-module



対話式のインストールになりますので、指示に従うだけでPassengerがインストールされます。後は、httpd.confに通常のPassengerと同様に


LoadModule passenger_module /opt/passenger/ext/apache2/mod_passenger.so
PassengerRoot /opt/passenger
PassengerRuby /opt/coolstack/bin/ruby



と設定し、後はVirtual hostを設定するだけで、railsを動作させることができます。

About

Tomo

Search

Archives
« 4月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
今日