第0回から少し間があきましたが、第1回のユーザ会を
8月の頭ごろにやりたいと思います。
今のところ、8/6(金)が有力ですが、日付決まり次第追ってATNDで
告知します。(会場の都合とかあるので)
実は、JRubyKaigiのスピーカー(JRubyユーザ会の主要メンバーと
だいたいかぶっている)で、こういうのやりたいと話していて、
今回はJRubyで「Google AppEngine(GAE)」にフォーカスを当てたいと
考えています。
以下のような構成を考えているのですが、他にこういうふうにやりたいとか
ありますか?
前半(1hくらい)
・GAE/JRubyに関するプレゼン・LT
- @urekatさんのJRubyKaigiネタプレビュー? (仮)
後半(残り・1h?)
・GAE/JRubyハンズオン
- @urekat先生によるHello World by GAE/JRuby (仮) ← (基本これ)
- GAE詳しい人はテーマを決めてアプリ作ってみても可
- 他のJRubyアプリも可 (JRuby on Rails 3やってみます、とか)
ご意見ください。前半のプレゼン、LT立候補も歓迎ですので
このMLまたは藤川までお知らせください。
(AppEngineネタじゃないJRubyネタもたぶんOKです。)
藤川
--
藤川 幸一 (FUJIKAWA Koichi)
Blog: http://fujibee.org/ (ja) http://fujibee.org/en (en)
Twitter: http://twitter.com/fujibee
LinkedIn: http://www.linkedin.com/in/koichifujikawa
Working for: http://cirius.co.jp/
Founder of: http://github.com/fujibee/hadoop-papyrus
>> 前半(1hくらい)
>> ・GAE/JRubyに関するプレゼン・LT
>> - @urekatさんのJRubyKaigiネタプレビュー? (仮)
目次は用意しますので、聞きたいことや気になることを考えてきていただけると
良いかもしれません。(あらかじめメールで知らせてくれるとなお良いはずです。)
参加者の興味次第でのぐだぐだ深掘りトークしていくという感じになるかもしれません。
それで良いと思いますが。
>> 後半(残り・1h?)
>> ・GAE/JRubyハンズオン
>> - @urekat先生によるHello World by GAE/JRuby (仮) ← (基本これ)
>> - GAE詳しい人はテーマを決めてアプリ作ってみても可
>> - 他のJRubyアプリも可 (JRuby on Rails 3やってみます、とか)
1時間しかないので「インストール、掲示板、デプロイ手順」で精一杯ですね。
blogのチュートリアル記事
http://d.hatena.ne.jp/urekat/20100422/1271954398
http://d.hatena.ne.jp/urekat/20100220/1266691037
で試せるひとには物足りないでしょう。
よろしくお願いします!
ジュリアンさん、原さん、佐々木さんコメントありがとうございます!
西澤さんから、今回も楽天で会場を用意いただけるということが
決まりましたので、ATND作成しました。
アジェンダは、詳細を追記していきますので、参加される方は
ぜひ参加前にもう一度見てみてください。
懇親会も予定しています!参加される方は、ATNDのアンケートで
お願いします。
今回は、@urekatさんのブログなどで予習していくといいかもしれないですね。
http://d.hatena.ne.jp/urekat/
では、よろしくお願いします。
藤川
2010年7月14日0:52 takeru sasaki <sasaki...@gmail.com>:
--
藤川 幸一 (FUJIKAWA Koichi)
Blog: http://fujibee.org/ (ja) http://fujibee.org/en (en)
資料作成しました。
https://docs.google.com/present/view?id=dnkxbrd_99d6bg3vhn
このへんもっと知りたいとかあれば教えてください。前もってでも当日でもOKです。
質問、ツッコミ等がもりあがらないと1時間もかからないとおもうので他の方の
発表かLTかがある方が良いかもしれません。
2010年7月18日16:35 Kouichi Fujikawa <fuj...@gmail.com>:
佐々木さん資料公開ありがとうございます!
ATNDのほう、まだ定員まで余裕があるようなので、
JRubyとGAEに興味がある方がいたらお知らせしてあげてください。
もしLTやりたい方がいたら当日でも構いませんので、
お知らせください。
私も、twitter-jrubyというgemを、twitterというCRuby用gemから
github forkして作ったので、簡単にその説明LTやるかもしれません。
#でもしばらく放置していたらGAE上で動かなくなった。。どうしたものか。
では、皆さん当日よろしくお願いします。
藤川
2010年8月3日12:06 takeru sasaki <sasaki...@gmail.com>:
2010/8/2 takeru sasaki <sasaki...@gmail.com>:
> 資料作成しました。
> https://docs.google.com/present/view?id=dnkxbrd_99d6bg3vhn
> このへんもっと知りたいとかあれば教えてください。前もってでも当日でもOKです。
gemsのところ(10枚目のスライド?)にNokogiriの名前が出ていたので、思わず、出てきてしまいました。
佐々木さんはご存知かとは思うのですが、あの資料だけ見た人の誤解を招くかもしれないので、補足です。
NokogiriはGAEで動くのですが、pure
Java版じゃないと動きません。現在、1.5.0.beta.2というバーションがそれになりますので、Gemfileにはこのバージョン番号をお忘れなく。加えて、このバージョンそのままでは動かなくて、(^^;;
ちょっとした修正が必要でした(スミマセン。確認していなくて。)。http://wiki.github.com/tenderlove/nokogiri/pure-java-nokogiri-for-jrubyをご覧くださいませ。
JRubyKaigiでみなさまにお会いできるのを楽しみにしています。
原田
もしかすると、require 'java'
を入れると動いたりしませんか?スタートアップの時間を短縮するために、起動時にJavaライブラリをロードしなくなったんですよ。確か
1.5.0からだったかと。今のgoogle-appengine gem
は1.5.1が入っているので、それが原因かも。単なるguessなので、違っていたらごめんなさい。
原田
だいぶ増えてきましたね!(実は最初ハラハラしてました)
> もしLTやりたい方がいたら当日でも構いませんので、
> お知らせください。
> 私も、twitter-jrubyというgemを、twitterというCRuby用gemから
> github forkして作ったので、簡単にその説明LTやるかもしれません。
> #でもしばらく放置していたらGAE上で動かなくなった。。どうしたものか。
[この節PR] 橋本さんからポストもありましたが、明日池袋でJRuby関連のイベントがあります。
http://bit.ly/JRubyKaigi2010pre
基本はJRuby on Rails本の著者訳者さんらがメインなのですが、
そこに私も参加させていただくことになり、あまりにJRuby on Rails方面に無知なのも困るので、
いろいろ調べました。(ここまで前置き)
で、せっかく調べたものの、明日私がしゃべる時間はあまりないと思うので、
もしあさってのJRubyユーザ会で時間があれば、明日しゃべらなかったネタでLTしたいです。
1. JRubyOnRails本2冊の内容比較
2. JRubyOnRailsの、対CRubyOnRails、対Javaウェブフレームワークの得失整理
3. JRubyKaigiセッション紹介
4. JRubyのJITコンパイラ in a nutshell
たぶ4を明日のイベントでしゃべることはないはずなので、どれかはやれます。
技術者系多数なら4がいいかな?
原田さん
ありがとうございます。
本番前に動作チェックして動くバージョンを埋める予定です。
#結構面倒な作業。すんなりいけばいいけど。
なひさん
> 4. JRubyのJITコンパイラ in a nutshell
JRubyの「JVMバイトコード、JITコンパイラ、動作速度、効率」の現状、未来、限界あたりをしりたいです。
要はMirahはほんとうに必要なのか?ってことです。
JRubyKaigiまでにさらにまとめる予定ですが、わかる範囲で答えます。
では、時間が余ったらLTで、なければ懇親会等で。
コメントありがとうございます!
ぜひ、LTというか、枠を取りましょう。
@urekatさんの前半のプレゼンのあとくらいですね。
ATNDも更新しておきます。
私も4を聞きたいので、勝手に4の内容書いておきます。
変えたい場合はお知らせください。
藤川
2010年8月4日16:20 NAKAMURA, Hiroshi <naka...@gmail.com>:
--
コメントありがとうございます。
JRubyKaigiでお会いできること、楽しみにしています!
GAEの方で動かなくなったのは、どうもGAE自体のAPI制限のせいのようで、
@urekatさんに聞こうと思ってました。
こんな感じで。。
java.security.AccessControlException: access denied
(java.net.SocketPermission api.twitter.com resolve)
前は出なかったんですけどね。。
さらに、ローカルでtwitter-jruby動かしたら、openssl-jrubyがこんなエラーだしてたので、
こっちはNaHiさんに聞こうと思ってました。
ruby-1.8.7-p174 > require 'openssl'
LoadError: no such file to load -- jopenssl
from /Users/fujikawa/.rvm/rubies/ruby-1.8.7-p174/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in
`gem_original_require'
from /Users/fujikawa/.rvm/rubies/ruby-1.8.7-p174/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in
`require'
from /Users/fujikawa/.rvm/gems/ruby-1.8.7-p174@gaej-20100730/gems/jruby-openssl-0.7/lib/openssl.rb:61
#簡単にスペシャリストに質問できるJRubyユーザ会って素敵ですね :)
藤川
2010年8月4日4:04 Yoko Harada <yok...@gmail.com>:
--
前回、TypeWithMeを使って参加者のコミュニケーションに使いましたが、
今回はこのユーザ会でも一部で流行っているGoogle Waveを使ってみたいと
思います!
https://wave.google.com/wave/waveref/googlewave.com/w+VU03wk0pA
で、すでに始めていますので、参加予定の方はアクセスしてみてください!
オンラインのみで参加されたい方も、ぜひ。
#waveの招待とか必要なのかな?もしうまくいかない人がいたら教えてください。
藤川
2010年8月4日16:36 Kouichi Fujikawa <fuj...@gmail.com>:
GAEの方で動かなくなったのは、どうもGAE自体のAPI制限のせいのようで、
@urekatさんに聞こうと思ってました。
こんな感じで。。
java.security.AccessControlException: access denied
(java.net.SocketPermission api.twitter.com resolve)
前は出なかったんですけどね。。
> https://wave.google.com/wave/waveref/googlewave.com/w+VU03wk0pA
>
> で、すでに始めていますので、参加予定の方はアクセスしてみてください!
> オンラインのみで参加されたい方も、ぜひ。
>
> #waveの招待とか必要なのかな?もしうまくいかない人がいたら教えてください。
さっそくアクセスしてみましたが、
You are not a participant in this wave.
と言われ、アクセス出来ませんでした。
佐々木さんのブログの「■[gae]AppEngineのテクニック集」
https://wave.google.com/wave/waveref/googlewave.com/w+7rElg8s7A
にはアクセスできるのですが・・・。
宜しくお願い致します。
半谷
2010年8月4日16:53 Kouichi Fujikawa <fuj...@gmail.com>:
もう少し長い(できれば全部の)スタックとレースはありませんか。
モジュール更新かなにかで、名前解決に行くようになったのかもしれません。
> さらに、ローカルでtwitter-jruby動かしたら、openssl-jrubyがこんなエラーだしてたので、
> こっちはNaHiさんに聞こうと思ってました。
>
> ruby-1.8.7-p174 > require 'openssl'
> LoadError: no such file to load -- jopenssl
> from /Users/fujikawa/.rvm/rubies/ruby-1.8.7-p174/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in
> `gem_original_require'
> from /Users/fujikawa/.rvm/rubies/ruby-1.8.7-p174/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in
> `require'
> from /Users/fujikawa/.rvm/gems/ruby-1.8.7-p174@gaej-20100730/gems/jruby-openssl-0.7/lib/openssl.rb:61
MRIからjruby-opensslを読みに行ってますね。どこかでjruby-openssl gemを明示的に読んでませんか。
MRIでjruby-openssl gemを読み込んだら、空気読んでopensslにfallbackしたほうがいいのかなあ。
> resolveってDNSを引こうとしているんですかね?
> そんな操作初めから許されていなかったはず・・・
なるほど、twitter gemのほうをpullしてきたのがまずかったのかも
しれません。差分見てみます。
waveのほうのpublic設定ありがとうございます!
でも、waveは開発中止なんですね。。残念。
http://journal.mycom.co.jp/news/2010/08/05/008/
藤川
2010年8月4日17:17 takeru sasaki <sasaki...@gmail.com>:
--
> MRIからjruby-opensslを読みに行ってますね。どこかでjruby-openssl gemを明示的に読んでませんか。
なるほど、そういえばそうです。失礼しました。
appengine gemを使うとCRuby上でJRubyなので、わけわからなくなりますね。。
> MRIでjruby-openssl gemを読み込んだら、空気読んでopensslにfallbackしたほうがいいのかなあ。
無理やりplatform指定してCRuby gemにjruby-opensslを入れてしまっただけなので、
あまりこんなことになる人は少ないかも。。
「CRubyではjruby-opensslは使えません」的なメッセージのほうがいいかも。
#ユーザ会用に久しぶりにGAE/JRubyやってるので混乱してました。
藤川
2010年8月4日22:32 NAKAMURA, Hiroshi <naka...@gmail.com>:
--
確かに。そのうちやります。 http://bugs.jruby.org/4992
先週末のユーザ会に参加された方、お疲れさまでした。
Google Groupにページを作成しました。
http://groups.google.co.jp/group/jruby-users-jp/web/jruby-2
ブログとか書かれた方がいたら、追加します。
(勝手に追加してもらってもいいです)
次回はJRubyKaigiに合わせて、豪華ゲスト(CharlesとTomと原田さん)を
迎えてプチユーザ会をつくばor東京で開きたいと考えています。
なにかいいアイデアがあれば教えてください!
藤川
On 2010/08/09, at 15:18, Kouichi Fujikawa <fuj...@gmail.com> wrote:
> 次回はJRubyKaigiに合わせて、豪華ゲスト(CharlesとTomと原田さん)を
> 迎えてプチユーザ会をつくばor東京で開きたいと考えています。
> なにかいいアイデアがあれば教えてください!
金曜の夜にコミュニティ主体の食べ物を持ち寄ったビアバッシュのようなイベントがあります。
http://rubykaigi.tdiary.net/20100803.html#p03
この中で開催してはどうでしょうか。
藤川
2010年8月9日17:11 Koichiro Ohba <koic...@meadowy.org>:
--
大場です。
今はMP不足で対応できません。よろしくお願いします!
コミュニティナイトの具体的な参加方法の案内は、日本Rubyの会MLに流れるようなので、そちらを参照して対応お願いします。
#たぶん近日中に案内があると思います
--
Koichiro Ohba / koic...@meadowy.org
@fujibeeさんが作ってくださったまとめにもありますが、この時のプレゼン資料です:
http://bit.ly/JRubyJITCompilerInANutshell
残念ながら、「動作速度、効率(の具体的数値)」や「限界」辺りは資料になく、
また私もデータとして持っていないのですが、懇親会でみなさんと、わかる範囲で
議論させていただきました。大変勉強になりました。ありがとうございました。
また、JRubyKaigi向けに整理している内容の続編として、以下の資料を作りました。
http://bit.ly/JRubySrcReadingGuide
JRubyのソースコードの解説です。作ってから思いましたが、あまりPrezi向きの
内容ではありませんでした。とはいえ、これからJRubyのソースコードを読もう、
という方には多少は役に立つと思います。ご笑覧ください。
2010/8/12 muga_nishizawa <muga.ni...@gmail.com>:
> 懇親会のときもここらへんの内容について、激しく質問させていただきましたが、
> さらに質問させてください。
>
> JRuby runtime の JIT compiler は hot spot を探して、そこに対して(メソッド単位?)で
> Java bytecode に落とし込むというお話でした。さらに JVM の JIT にかかり native に
> 落ちてより速くなる。一方、jrubyc の場合には、すべての ruby クラスを Java bytecode に
> 落とし込み、その bytecode がダラダラと長くなってしまうので JVM が hotspot を
> 探し切れない。結果 native に落ちづらいとお聞きしたと記憶しています。
> (酔っていたので記憶があいまいかもしれません、勘違いだったらごめんなさい。)
>
> そこで質問なのですが、どの程度の行数(?サイズ?)の ruby ソースであれば、
> jruby の runtime で動作させた場合と、jrubyc で bytecode に落としてから動作させた
> 場合とで、速度に差が出てくると思われますか?
> 簡単な 20 行程度のループプログラムを ruby で書いて、両者を実行すると、
> ほとんど差がありませんでした。
jrubycでは、ASTコンパイラ(ASTをbytecodeに変換する)を利用します。jrubyc
では、1 Rubyファイル全体を1 Javaクラスとしてbytecode生成します。そのJava
クラスの中に、そのRubyファイルで定義されているRubyメソッドが1つ1つ
bytecodeコンパイルされて、staticメソッドとして打ち込まれます。
JITコンパイラは、必要に応じてASTコンパイラを呼び出し、hotspotとなってい
る1 Rubyメソッドを、1 Javaクラス、1 staticメソッドとしてbytecodeコンパイ
ルします。
両者で使っているASTコンパイラは基本同じです。ただしJIT動作する場合、
別ファイルのASTも見えているので、多少賢くインライン化することが期待でき
なくはありません。が、直感としては、あまり効果はないと思ってます。ASTレ
ベルだとそんなに高度なことはできないので。
また1.5系のコンパイラは、ランタイム情報を使わずに、静的情報のみでコンパ
イルします。
以上の結果として、hotspotが1つのRubyメソッドであれば、正直どちらの方法を
とっても差は出ないはずです。運がよければJITのほうが速くなるでしょう。
逆に、Rubyで書いたロジックが複雑で(つまり、IO待ちやメモリ出入りが問題で
はなく)、全体をほどよくまんべんなく(?)実行する場合には、インタープリ
タ動作するよりbytecode実行することの速度メリットがあるかもしれません。
が、「どのレベルであれば」というような知見は、残念ながら持っていません。
> もしそのあたりの知見もお持ちでしたら、どうぞ教えてください。
> どうぞよろしくお願いいたします。
JITコンパイルの詳細な話は、いずれ機会があれば、今より詳細にまとめたいと
思います。正直なところ、まだ私もつかんでないところがあり、また1.6もしく
はその先でのIR化(詳しくは http://bit.ly/JRubySrcReadingGuide を)でまた
変わるところだ、というのもあります。
現行JITコンパイラについて、すぐにその詳細な仕組み(定量評価、チューニン
グネタではありません)が知りたい向きには、以下のブログも参考になるかもし
れません。
http://www.realjenius.com/2009/10/06/distilling-jruby-the-jit-compiler/
ただしあまりに細かすぎて、これをちゃんと読める人はおそらくソースコード読
めるんじゃないか、という話はあります。 :-) いやソースコード読みながら
見ると、大変参考になるんですけどね。
メソッドサイズなどのパフォーマンスチューニングネタですが、第一義的には
用途によるため、このレベルのチューニングは、JRubyコア開発者がバランス
を考えながら、一番よさそうなところに設定している。そのため最善解のため
の鉄則というものがクリアでなく、また、次のリリースで無駄になる可能性が
高い。そのため、数値を元にしたチューニングは避けたほうがよい。
となります。が、それでも仕組みを知っていれば効果が得られないわけではない
ので、もう少しヒントを出したいのですが、残念ながら私も数値は持ってません。
JRubyKaigiでは仕組みの説明ができると思うので、その次どこかで、定量的
な話もできればいいかなとは思ってます。
定性的な話としては、ご存知かもしれませんが
http://kenai.com/projects/jruby/pages/PerformanceTuning
http://kenai.com/projects/jruby/pages/JRubyCompiler
あたりがよいです。jrubycは、後者のAOTというところに書いてあります。が、
若干内容が古く、できればWikiを直してからと思っていて、なかなか返信ができ
なかったのでした。JRubyKaigi後かな。。。
2010/8/22 Hiroshi Nakamura <naka...@gmail.com>:
> 以上の結果として、hotspotが1つのRubyメソッドであれば、正直どちらの方法を
> とっても差は出ないはずです。運がよければJITのほうが速くなるでしょう。
これだと、#jruup 第一回のときに西澤さんから聞かれた、西澤さんの例では
「jrubycのほうが遅い」に対しての回答と整合性が取れてません。決して運がよ
かったから、ではないはずです。
私の推測では、jrubycのほうが遅くなるのは、JVMレベルでのJITによる最適化が
起こるか起こらないか、の違いだと思っています。jrubycでコンパイルする
場合、1 Rubyメソッド内の全てのコードを、1 Javaメソッドとしてbytecodeコン
パイルします。めったに呼ばれないrescueノード内の処理や、&&ノードの右辺式
など全て、大きさに関わらずbytecodeになります。JVM、というか私が知ってる
のはSunのHotspotのみですが、は、メソッドのサイズを見てJIT化を制御するの
で、何も考えずにbytecodeにしてメソッドを肥大化させると、JVMのJITコンパイ
ラが効率的に動けなくなる、という話です。
まあでも、私も、おそらくJRubyコアチームも、定量的に話ができるほど数字は
持ってません。この辺は、最新のJVMの動向、仕様策定に首を突っ込んでいる
Charlesに任せておいて、具体的に問題になってから焦点を絞って調査、という
のがよいと思います。つまり、西澤さん、具体的な問題を教えてください。:-)