Takayuki Okazaki's Weblog
ブログ: 岡崎 - Okazaki's blog
20070613 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

では実行です。
Drawing Sun Curve
はい、実行されました。なお、JRubyのデモンストレーションでは手間を省くために、しばしばJFrameをメインスレッドから起動していますが、Swingのスレッド扱いの流儀からSwingUtilities#invokeLaterを使うのが本筋でしょう。


20070612 2007年 6月 12日 火曜日
日替わり実験室: 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'] }
こんな感じですね。だいぶ楽ちん。


20070611 2007年 6月 11日 月曜日
Ruby会議2007, 2日目の日曜日
English Translation: (Yahoo!) / (Google)

Jimさんも大絶賛のRuby会議2007の二日目の様子です。二日目は初日に比べればやや空席が目立ちましたがそれでも会場の熱気と一体感は一日目以上でした。
R0015663.JPG
個人的に一番注目していたのはNaoto TAKAIさんによるJRubyのお話です。そういえば前日の懇親会でCharles NutterTomas Eneboも高井さんの話は聞きたいと話していました。
R0015671.JPG
この会議ではIRCを使ってリアルタイムにセッションに参加できる、というおもしろい形式 (先月のCommunity Oneでも似たようなことをやっていましたが)をとっていましたが、会場からのつっこみによって様々なキーワードがピックアップされました。

この中で特にピックアップすると「愛」でしょうね。このRuby会議に参加していてどのセッションからも感じられたのはRubyへの愛です。愛と書くと大げさなような気がしますが、たとえば愛着があるか?と聞かれれば、必ずYesになるでしょう。
R0015760.JPG
今回のRubyKaigiは最後のDaveさんによるキーノートがうますぎた(?)ということもあり、IT系のイベントでは少なくともここ6年以上の中ではもっとも、感動的なイベントでした。Daveさんのプレゼンテーションの後にはスタンディングオベーションも。
R0015794.JPG
このパワーには本当に圧倒されるだけでなく、見習いたいところが本当にたくさんたくさんありました。

さて、話は変わって晩ご飯は今回、Tim Brayさん、Charles Nutterさん、Tomas Eneboさんらとしゃぶしゃぶを食べに行きました。

R0015827.JPG
うーん、さすが。皆さんよく食べます。ところで、Timさんは電気屋でカメラをいろいろみてきたそうで、しかもRICOHのGR DIGITALとCaplio GX100が気になっていたとのこと。
R0015832.JPG
(Photo by Tim Bray, by using Okazaki's GX100)


20070610 2007年 6月 10日 日曜日
Ruby会議2007, 1日目の土曜日
English Translation: (Yahoo!) / (Google)
Ruby会議2007の一日目が終わりました。Ruby会議の内容は速報ログが随時更新されているようで、詳細な内容はそちらを参照していただくとして、個人的な感想をいくつか。
R0015484.JPG

とても活気がある

400人はいる会場がいっぱいになるほどの人で、画面にはIRCのログが映し出されていて会場(あるいは会場外から)のつっこみがリアルタイムではいるという感じでした。

年齢層が若い

年齢層も、Javaやそれ以外のイベントよりもかなり若いという印象がありました。若いから活気があるのか、活気があるから若いのかはよくわかりませんが。

どなたもプレゼンがうまい

どのプレゼンを見てもユーモア感たっぷりで、しかも、要点がわかりやすい。また、IRCからのつっこみにもうまく対応されているということで、技術系のイベントのなかでもかなりレベルの高いセミナーだったと思います。
R0015625.JPG
セミナーの後は懇親会が行われました。
R0015660.JPG
ミーハーなのでTim Brayさんと写真を撮ってもらいました。


20070607 2007年 6月 07日 木曜日
Ruby会議2007
English Translation: (Yahoo!) / (Google)
今週末に行われるRuby会議2007に行けることになりました。Rubyというと、7〜8年前に何かの雑誌で見て、お!?これは!!と思っていましたがこれほどまでに盛り上がってくるとは予想もしていませんでした。当時、すでにPerlに手を染めていたのでもったいないことにRubyistになれませんでしたが、最近はちょっとしたスクリプトを書くときにもなるべくRubyを使うようにしています。
こういうちょっとしたスクリプトは1日ひとつぐらいは書くので、この調子で続けていけば3ヶ月ぐらいすればなんとか文法も身についてきそうです(まだ2〜3週間しか続けていませんが)。


過去の記事
« 5月 2008
    
1
3
6
7
8
9
10
11
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
       
今日
Click me to subscribe このブログを購読(RSS)
検索

このブログ著者について
ソフトウエア・インフラストラクチャー・ソリューション本部のソリューション・アーキテクト。 本業はSOAソリューションならびにSun Java CAPSによるソリューションのプリセールスをお手伝いするエンジニアですが、それとは別に Javaエバンジェリストグループに 参加してセミナーに行ったり、趣味のプログラミング・ネタをこの ブログで紹介したりしています。
リンク
 

Today's Page Hits: 86