2007年 6月 13日 水曜日 |
日替わり実験室: JRubyとグラフィックス English Translation: (Yahoo!) / (Google) JRubyのデモでは多くの場合、Javaとの親和性をデモンストレーションするためにSwingとの連携が披露されますが、実際にやってみると、JavaでSwingを書くのと同じ記述量が必要なのであまりうまみを感じません・・・。たぶん、フレームの作成とか、パネルの配置とかはJavaでNetBeansなりを使って書いて、スクリプトで書きたい一部分だけをJSR-223を使って呼び出すのが賢いやり方なのでしょう。
しかしながら、それでも負けずにコンソールからJRubyだけを使ってグラフィックスを使ってみることにしました。Swingだけだとおもしろくないので、今回はTimingFrameworkも使っています。 Java標準以外のライブラリをJRuby実行時に指定するには環境変数CLASSPATHにそれを入れておけばよいだけのようです。 $ export CLASSPATH=$CLASSPATH:~/Library/Java/timingframework/TimingFramework-0.54.jarなお、Java SE 6のAPIを一部使っていますので、Java SE 6が使われるようJAVA_HOME環境変数を設定しておきましょう。Macなら次のような感じです (Java SE 6はApple Developer Conenctionからユーザ登録をして事前にインストールしておきます)。 $ export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Homeこんな感じで指定すればよいでしょう。ではいきなりですがコーディングです。
#!/usr/bin/env jruby
require 'java'
include_class 'java.awt.Color'
include_class 'java.awt.Graphics'
include_class 'java.awt.geom.Path2D'
include_class 'javax.swing.JPanel'
include_class 'javax.swing.JFrame'
include_class 'org.jdesktop.animation.timing.TimingTargetAdapter'
include_class 'org.jdesktop.animation.timing.Animator'
def draw_suncurve(g, w, h, c)
s = Path2D::Float.new
s.move_to(0, 0)
s.line_to(w, 0)
s.curve_to(w, 0, w - h / 10, h / 4, w, h / 2)
s.curve_to(w, h / 2, w + h / 10, h * 3 / 4, w, h)
s.line_to(0, h)
s.line_to(0, 0)
g.set_color(c)
g.fill(s)
s
end
class SunCurveAnimator < TimingTargetAdapter
attr_accessor :panel
def begin
g = @panel.get_graphics
g.set_color(Color::WHITE)
g.fill_rect(0, 0, @panel.get_width, @panel.get_height)
end
def timingEvent(f)
draw_suncurve(@panel.get_graphics,
(@panel.get_width - @panel.get_height / 10) * f,
@panel.get_height, Color.new(231, 111, 0))
end
end
class FrameExecutor
include java.lang.Runnable
def run
panel = JPanel.new
frame = JFrame.new('Sun Curve')
frame.set_default_close_operation javax.swing.WindowConstants::EXIT_ON_CLOSE
frame.set_size 800, 600
frame.get_content_pane.add panel
frame.set_visible true
sca = SunCurveAnimator.new
sca.panel = panel
a = Animator.new(2000, sca)
a.set_acceleration(0.2)
a.set_deceleration(0.2)
a.start
end
end
javax.swing.SwingUtilities.invoke_later FrameExecutor.new
では実行です。
はい、実行されました。なお、JRubyのデモンストレーションでは手間を省くために、しばしばJFrameをメインスレッドから起動していますが、Swingのスレッド扱いの流儀からSwingUtilities#invokeLaterを使うのが本筋でしょう。 日替わり実験室: JRubyとGEM English Translation: (Yahoo!) / (Google) この間の土日に行われたRuby会議2007で見聞きしたことを早速手元で試そうと、最近、いろいろとRubyをさわっているところなのですが、Javaとの連携も試したいのでJRubyを中心にさわっています。Ruby会議で興味を持ったのは朴 芝印さんが発表されたHpricotというHTMLパーサです。
これを使うと、Webスクラッピングなんかも簡単にできるとのこと。今までPerlを使ってちょっとしたHTMLの整形とかをやっていたのでこれには興味津々です。早速、JRubyで使ってみよう!、ということで gem (JRubyには最初からgemがついています)でHpricotをインストール・・・。と、思ったのですが早速つまずいてしまいました。インストールに失敗してしまいます。 最終的には片貝さんからにたまごほうれん草: JRubyでgemという日記に解決策が載っているということを教えていただきインストール完了です。 では早速、あるWebページからリンクだけ取ってくるというスクリプトを作ってみます。
#!/usr/bin/ruby
require 'rubygems'
require 'hpricot'
require 'open-uri'
events = Hpricot(open('http://jp.sun.com/company/events/').read)
(events/'a[@href]').each { |a| p a.attributes['href'] }
こんな感じですね。だいぶ楽ちん。
Ruby会議2007, 2日目の日曜日 English Translation: (Yahoo!) / (Google)
Jimさんも大絶賛のRuby会議2007の二日目の様子です。二日目は初日に比べればやや空席が目立ちましたがそれでも会場の熱気と一体感は一日目以上でした。
今回のRubyKaigiは最後のDaveさんによるキーノートがうますぎた(?)ということもあり、IT系のイベントでは少なくともここ6年以上の中ではもっとも、感動的なイベントでした。Daveさんのプレゼンテーションの後にはスタンディングオベーションも。
このパワーには本当に圧倒されるだけでなく、見習いたいところが本当にたくさんたくさんありました。 さて、話は変わって晩ご飯は今回、Tim Brayさん、Charles Nutterさん、Tomas Eneboさんらとしゃぶしゃぶを食べに行きました。
うーん、さすが。皆さんよく食べます。ところで、Timさんは電気屋でカメラをいろいろみてきたそうで、しかもRICOHのGR DIGITALとCaplio GX100が気になっていたとのこと。
(Photo by Tim Bray, by using Okazaki's GX100) Ruby会議2007, 1日目の土曜日 English Translation: (Yahoo!) / (Google) Ruby会議2007の一日目が終わりました。Ruby会議の内容は速報ログが随時更新されているようで、詳細な内容はそちらを参照していただくとして、個人的な感想をいくつか。
とても活気がある400人はいる会場がいっぱいになるほどの人で、画面にはIRCのログが映し出されていて会場(あるいは会場外から)のつっこみがリアルタイムではいるという感じでした。年齢層が若い年齢層も、Javaやそれ以外のイベントよりもかなり若いという印象がありました。若いから活気があるのか、活気があるから若いのかはよくわかりませんが。どなたもプレゼンがうまいどのプレゼンを見てもユーモア感たっぷりで、しかも、要点がわかりやすい。また、IRCからのつっこみにもうまく対応されているということで、技術系のイベントのなかでもかなりレベルの高いセミナーだったと思います。
セミナーの後は懇親会が行われました。
ミーハーなのでTim Brayさんと写真を撮ってもらいました。 Ruby会議2007 English Translation: (Yahoo!) / (Google) 今週末に行われるRuby会議2007に行けることになりました。Rubyというと、7〜8年前に何かの雑誌で見て、お!?これは!!と思っていましたがこれほどまでに盛り上がってくるとは予想もしていませんでした。当時、すでにPerlに手を染めていたのでもったいないことにRubyistになれませんでしたが、最近はちょっとしたスクリプトを書くときにもなるべくRubyを使うようにしています。
こういうちょっとしたスクリプトは1日ひとつぐらいは書くので、この調子で続けていけば3ヶ月ぐらいすればなんとか文法も身についてきそうです(まだ2〜3週間しか続けていませんが)。 |
Today's Page Hits: 86 |