木曜日 4 16, 2009

JRuby User @ Twitter

Twitterに日本のJRubyユーザのためのTwicco、


JRuby Users JP


を作りました。
ちなみにTwiccoとは、Twitterでそのアカウントあてにつぶやくと、そのアカウントをfollowしているユーザ全員につぶやきが配信されるというコミュニティ機能です。


よろしくお願いします。



水曜日 4 15, 2009

JRuby Google AppEngine Wrapper

Google AppEngineの各種サービスのJRubyラッパーを現在分かっている範囲でまとめました。


JRuby Google AppEngine Service ラッパー


ご参照ください。

火曜日 4 14, 2009

tips & Rails template JRuby for GAE/J

Google AppEngineでJRubyを動作させるために現状分かっている注意点をまとめました。


JRuby on Google AppEngineの注意事項


またRails 2.3からの新機能アプリケーションテンプレートを使用して、非常に簡単にRailsアプリをGAE/J用にする方法をまとめました。


Rails Application Template


以上ご参照ください。

木曜日 4 09, 2009

JRuby on Google AppEngine

昨日からGoogle AppEngineでPythonに続いて、Javaがサポートされました。

それにより、若干無理は感じますが、JRubyも動作します。
これは高井さんの言葉を借りれば、まさに「Googleにとっては小さな一歩だが、JRubyにとっては偉大な飛躍である」と言えるでしょう。


ということで、JRuby on RailsをAppEngine上で動作させるための方法を書きました



金曜日 1 16, 2009

(j)ruby on Merb : create resource and validator

前回の記事に追記したように、DataObjectsがJRubyで現在のところ、満足に動作しませんが、もうすぐサポートしたものが正式にリリースされるようなので、JRubyではなく、MRIをつかってMerb+Datamapperで遊んでいきたいと思います。

ちなみにソース(そんな大げさなものではないですが)は、githubで公開しています。

まず前回作ったアプリのディレクトリに移動し、config/dependencies.rbのdatamapperのバージョンを書き換えます。

dependencies.rbの


dm_gems_version	=	"0.9.8"




dm_gems_version	=	"0.9.9"



に変更します。Merbアプリケーションが起動する際に、最初にロードされる設定ファイル(正確にはinit.rbがロードされますが、init.rbの冒頭でdependencies.rbが呼ばれているため)で、アプリケーションが依存するMerb関連のgemをバージョンとともに定義したものです。

ここに定義されているgemは、機能としてはいわゆるgemというより、Merbのプラグイン的なものととらえる方が良いのかもしれません。

dependencies.rbがロードしおわると、init.rbの続きがロードされます。このinit.rbには、


use_orm :datamapper
use_test :rspec
use_template_engine :erb



というように、このMerbアプリケーションで使用する、ORM、テストフレームワーク、テンプレートエンジンが記載されており、これを変更することでもそれぞれのコンポーネントを変更することができます。もちろん変更した場合は、dependencyの宣言も変わってきます。

例えば、datamapperのかわりに、activerecordを使う場合は、


use_orm :activerecord



となり、dependency部分は、dm-xxxの部分はすべて削除し、merb_datamapperのかわりに、


dependency "merb_activerecord"



という感じになります。

では、続きです。RailsのScaffoldに相当するのが、Resourceです。resourceを生成することにより、model, controller, デフォルトのviewが自動生成されます。Stringのtitleと、TextのBoby,Datetimeのcreated_at,updated_atを作成します


merb-gen resource article title:string,body:text,create_at:datetime,updated_at:datetime



実行すると、model,controller,view以外にconfig/router.rbに


resources :articles



というルーティングが追加されます。

ここで、生成された article modelファイルを確認します。


class Article
include DataMapper::Resource

property :id, Serial

property :create_at, DateTime
property :updated_at, DateTime
property :body, Text
property :title, String

end




このように、Railsというかactiverecordでは、スキーマの定義をmigrationファイルで行いましたが、datamapperではmodelファイルに直接記述します。
ちなみにMerb+activerecordの場合は、schema/migration/番号_resourcename_migration.rbというマイグレーションファイルが生成され、これを元にRailsと同様にmigrateすることになります。

つぎにtitleとbodyが空欄であることをさけるため、validateしたいと思います。datamapperでのvalidateは、modelに


validates_present :title
validates_present :body



というように書きます。もちろんvalidates_present以外にもさまざまなvalidatorが用意されています。


#入力されていないことの検証
validates_absent :spam

# zip_codeが7桁であることの検証
validates_length :zip_code, :is => 7

# ageが3桁以内であることの検証
validates_length :age, :in => 1..3

# passwordとpassword_confirmationが同一であることの検証
validates_is_confirmed :password

# passwordとpassword_repeatが同一であることの検証
validates_is_confirmed :password, :confirm => :password_repeat

# registrationが正規表現にマッチしていることの検証
validates_format :registration, :with => /[A-Z]{3}-[0-9]{3}/

# emailがメールアドレスであることの検証
validates_format :email, :as => :email_address

# homepageがurlであることの検証
validates_format :homepage, :as => :url

# ageがintegerであることの検証
validates_is_number :age, :integer_only => true

# percentageが数字であることの検証
validates_is_number :percentage

# emailが一意であることの検証
validates_is_unique :email




さらに独自にvalidatorを定義することももちろん可能で、たとえばpriceが正の値であることを検証したい場合は、


validates_with_method :price, :positive_price?
def positive_price?
if @price <= 0.0
[false, "価格には正の値を入力してください"]
else
true
end
end



というようにカスタムメソッドを設定してやると、独自のvalidatorをつくることができます。

長くなってきたので、ほとんどコーディングしてませんが、今回はここで終了です。

最後に、今回の作業をMerb+activerecordで行ったものも参考になるか分かりませんが、githubに置いておきました。

金曜日 1 09, 2009

jruby on Merb : datamapper & merb-gen

前回の記事で、DatamapperのDBドライバがJRuby未対応と書きましたが、ようやく対応バージョンがリリースされたようです。

Merb + ActiveRecordで遊んで見るつもりでしたが、ORMをARにするといろいろと設定し直さないといけないところが出てくるので、せっかくリリースされたこともあり、Merb + Datamapperであそんでみたいと思います。

[1/15追記]申し訳ございません。現状インストールはできますが、実装が不十分なようで、(特にdatamapperとの連携部分)merb+datamapperでは動作しないことが判明しました。したがってJRubyで使うことはまだできません。大変申し訳ございません。

ただ、JRuby用Datamapperのドライバは現状開発中でgemのレポジトリにははいっていません。そのため、githubからダウンロードしてインストールする必要があります。

まずgit clone


$ git clone git://github.com/sam/do.git



できたディレクトリに移動して、ビルド&インストール。


$ cd do
$ jruby -S rake install



これでderby, sqlite3, postgres, mysql, hsqldb, そしてjdbc接続のドライバがインストールされます。

gem listすると、0.9.11のdo_xxxというgemがインストールされているはずです。

ということで、Merb+Datamapperを触っていきます。ブログアプリを作っていきたいと思います。

勉強しながら書いているので、間違いもあるかと思います。お気付きの場合、指摘していただけると幸いです。

Railsのrailsコマンドにあたるのが、merb-genです。これを使ってアプリケーションを生成します。


$ jruby -S merb-gen app blog



ところで、merb-genだけを入力するとオプションが表示されます。そのオプションの中に、アプリケーションのひな形を生成するオプション、app,coreとflat,very_flatがあると思います。それぞれで生成されるMerbアプリケーションの構成が異なります。


  • app : 最も標準的なひな形。jQueryやdependencies.rbなど全部入り。

  • core : railsのようなひな形。jQueryやdependencies.rb, database.ymlなど含まず

  • flat : view,controller1つずつ、framework.rb(設定)の極小ひな形。

  • very_flat : ファイル1つ(veryflat.rb)ですべての設定を行う超極小ひな形。



という構成になるようです。appでは、ORMやテストフレームワーク、テンプレートエンジンはデフォルト(それぞれ、Datamapper, RSpec, erb)を使用する設定でひな形が生成されます。これらをデフォルトから変更したい場合は、coreを使います。例えば、ORMをActiverecord,テンプレートエンジンをhamlにしたい場合は、


$ jruby -S merb-gen core test --orm=activerecord --template-engine=haml



というようになります。続きは次回。

水曜日 1 07, 2009

jruby on merb : install

遅くなりましたが、明けましておめでとうございます。本年もよろしくお願いします。

今年はjruby-users.jpのコンテンツをちゃんとつくります


Rails3でマージされることになったMerb。

面白そうなので、触ってみようと思います。もちろんJRubyで。今回はとりあえずインストール

MerbはデフォルトではORMにDataMapperを使用しますが、DataMapper(以下DM)のDBドライバがまだJRubyに対応していないため,ORMにはActiveRecordを使用することにします。またこの関係で、通常の


jruby -S gem install merb



ではdo_sqlite3(DMのsqlite3用ドライバ)のインストールにこけてしまうので、インストールにも一工夫必要です。
ではインストール

開発サーバとしてglassfish、dbとしてsqlite3を使うので、インストールしていない場合はインストール。また(jdbc-)activerecordもインストールしていない場合はインストールします。


jruby -S gem install glassfish activerecord  activerecord-jdbcsqlite3-adapter 



インストール後、merbをインストール。


jruby -S gem install merb-core merb-more merb_activerecord



これでDM以外のMerbに必要なモジュールとMerbからactiverecordを使うモジュールがインストールされます。

ということで実際のアプリケーション作成は次回!

金曜日 12 19, 2008

jruby1.1.6 release

JRuby1.1.6がリリースされました。
改良点は以下。


  • フルRuby1.9パーサー

  • ほとんどのRuby1.9コア、メソッド/ライブラリ/クラスをサポート

  • 不要になった後も増加し続けるとIOリファレンスバグのfix

  • Array.Sortの高速化

  • jarからのgemの実行

  • gemをjarとしてレポジトリ化、classpathから読み込み可能に

  • JavaEmbedUtilsの改良

  • RCプロセスのメモリリーク修正

  • 1.1.5からの74個のバグ修正



となっています。お使いのかたはアップグレードを!。

月曜日 12 15, 2008

sun techdays 2008 presentation pitch

僕もJRuby On Railsについて話しましたが、12月2、3日に行われたSun Tech Daysのプレゼン資料が公開になっています。すべてPDFです。



水曜日 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がパフォーマンスという面で考えても非常によい選択肢となったのではないでしょうか?

火曜日 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 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 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

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
   
       
今日