soraなりの日々 - fc2 -

こころにひっかかったもの

[adobe air,jruby]air + java + ruby な夢を見る...その2

前回java で chart を作成する jfreechart っていう
ライブラリを使ってair 側で作成したデータで chart の
表示を行うというのをやりました。

が、
「chart 表示なら air でもっと綺麗なやつあるじゃん!」
とか思っちゃったりした人いたりしてませんか?

個人的には chart 表示ができてうれしいんでなくて、
air から java のライブラリが叩けたってのがうれしかったりします。
(もっと良い方法あるんかなー。無知なだけの気もするんだが、、、)

実は前回のやつがスマートにできたなら、air から java
呼んで帳票とか java がお得意なものは任せてしまえば、
業務系アプリにだって air で開発できますね!たぶん。

とか、勝手に思ってます。

ま、それはさておき。
今回は、processing を呼び出してみました。
(※ 前回からだけど、air から jruby 側へ送る
   ソケット通信部分の作り込みが我ながら下手い(TT;
   起動にエラいこと待たされたり、air のアプリを
   切らないと java 側のライブラリが起動しなかったり。。。
   ソケット周りを早いこと作り直さないとなー・・・orz
   なので、今回も書いているソケット部分のところは、
   あいも変わらず貧弱です。)

とりあえず、やったことを備忘録的に書いておきます。

このエントリーをはてなブックマークに追加
1.まずは、jruby で動作確認
 ・jrubyココから落として適当な場所に展開してください。
  (現時点の最新は、1.1.3のようです)
  そんで、パスを通しておきましょう。
 ・processing はココから落としてコレまた適当なところに
  置いてください。
 (現時点の最新は、0144のようです)
 これまた、CLASSPATH に通しておきましょう。
 例:(mac の場合)
 
#proce55ing
export P5_HOME=/Applications/Processing\ 0144
export CLASSPATH=$CLASSPATH:$P5_HOME/lib/core.jar


 で、processing 立ち上げて動作確認してほしいサンプルを
 エクスポートして、、、
 みたいなのは、バスっと省略。
 因に今回使ったのは、コード量が少なそうに見えた "MoveEye" というサンプル。

 これを jruby で動かすために ruby で書いてみる。

 ソース:
require 'java'

import 'processing.core.PApplet'

class MoveEye < PApplet
  def setup
    size 400, 400, P3D
    fill 204
  end

  def draw
    lights
    background 0

    camera 30.0, mouseY, 220.0, # eyeX, eyeY, eyeZ
            0.0, 0.0, 0.0,      # centerX, centerY, centerZ
            0.0, 1.0, 0.0       # upX, upY, upZ
    noStroke
    box 90
    stroke 255
    line(-100, 0, 0, 100, 0, 0)
    line(0, -100, 0, 0, 100, 0)
    line(0, 0, -100, 0, 0, 100)
  end
end

JFrame = javax.swing.JFrame

frame = JFrame.new "MoveEye"
applet = MoveEye.new
frame.content_pane.add applet
frame.default_close_operation = JFrame::EXIT_ON_CLOSE
applet.init
frame.pack
frame.visible = true


 画像:
  move_eye_rb

 うんうん。動いた。
 ここまでは、jruby の charles もデモでやってたんでサクっといける。
 (JFrame 呼び出して動作させるってところが悩んだっけ
  ココの人のサンプルがあったんでもの凄く助かりました!)


2.air から起動させる

 前回使ったやつとほぼ同じ。
 今回はハショらずに、air 側のソースを全部載せてみる。

 ソース:TestClient.as
package lib
{
    import flash.net.XMLSocket;
    import flash.events.*;
   
    public class TestClient
    {
    private var hostName:String = "localhost";
    private var port:uint = 14000;
    private var socket:XMLSocket;

        public function TestClient() {
        socket = new XMLSocket();
        configureListeners(socket);
        socket.connect(hostName, port);
        }

    public function send(data:Object):void {
        socket.send(data);
    }
}

 ソース:TestProce55ing.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">

    <mx:Script>
        <![CDATA[
            import lib.TestClient;
           
            private function init():void {
            }

            private function executeButtonClickHandler():void {
                var c:TestClient = new TestClient();
                var str:String = "execute";
                c.send(str);
            }
        ]]>
    </mx:Script>
    <mx:Button x="10" y="10" label="起動" click="executeButtonClickHandler()"/>

</mx:WindowedApplication>



 画像:
  TestProce55ing


 で、やっぱりソケットの作り込みが下手すぎてまだまだです。
 これはマジでどげんかせんといけません。

と、今回 processing を動作させてみました。
かなーり、まだまだなのですがやっと air 触るのが
楽しくなってきたような気がします。
(ほとんど、jruby からの java の機能なんだけどね。)

しかし、マジでソケット周りはなんとかしよ。。。

関連記事:
 [adobe air,jruby]air + java + ruby な夢を見る
このエントリーをはてなブックマークに追加

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://sora2hs.blog70.fc2.com/tb.php/371-ea51aed4
この記事にトラックバックする(FC2ブログユーザー)