Horb memo

JavaScript->Javaのイベント渡し(2003.3.25)

JavaScript->Java経由で,うまくevent渡しができた.これでpageを更新しないで,JavaScript によるメニューやボタンの利用ができる.これはなかなかいい方法だと思う. あと,これからは,CAやLifeを作ってみる.この場合は,どうしても,以前の状態を覚えておかないと いけないので,2.0の機能が必要になる.

  • ボタンなどのInterface-->WEB+JavaScript
  • Interactive Graphcis-->Applet
  • Logic-->Mathematica

という機能分散をしながらつくるということになる.これで,MathLinkネットワークの本がすべて書き直されれば,なかなかいいものになる.紹介用のページを作る必要もあるか?

JavaScriptで画面更新をしない(2003.3.24)

Tomから返事がきた.やはりJavaScriptでpage更新をしないで,URL openをすることは 難しいとのこと.Frameを使うのが1つの方法という意見.Frameでもだめそうな気がする. ということで,JavaScript->Java経由でURL openを使うevent渡しを作ってみることに したい.ただし,MacOSXではJavaScript->Javaがうまく動かないようなので,それが 問題.

デモプログラムのプラン(2003.3.23)

デモとして,すぐに作れそうなもの.

  • Life gameのデモ.回数を入れるセルと,Go buttonが必要.  あと,clickで状態を変えられるようにする.
    • Initialize to [Clear|Randomize]
    • A Click for: [point|blink|.....]
    • Evolution [ ] times [Start]
  • 上記と同様で,Forest Fireのデモ.3つの状態の設定のプルダウンも必要.
  • turtle graphicsのデモ.それぞれのプログラムをプルダウンにして(flower, hilbert, square...) 機能制限したturtle interpreterがあると面白い.制限つきinterpreterが作れるか?
  • 幾何学プログラム.

コネクションできないエラーはEthernet接続したとき(2003.3.23)

objectID= abcd38 classNo= 1 methodNo= 1001
warning: reconnection to horb://Chikara-MIYAJI.local.:49192/H4618654 failed during
 passing an object by reference.
horb.orb.NetException: java.io.EOFException
        at horb.orb.IOCICommon.connect(IOCICommon.java:135)
        at AppletImpl_Proxy._connect(AppletImpl_Proxy.java:31)
        at horb.orb.IOCICommon.recvObject(IOCICommon.java:936)
        at horb.orb.BasicIOCI.recvObject(BasicIOCI.java)
        at horb.orb.SerializingIOCI.recvObject(SerializingIOCI.java:185)
        at Server_Skeleton.stub1001(Server_Skeleton.java:47)
        at Server_Skeleton.dispatch(Server_Skeleton.java:97)
        at horb.orb.RequestServer.methodCall(RequestServer.java)
        at horb.orb.RequestServer.run(RequestServer.java)
        at horb.orb.HORBThread.run(HORBThread.java)

このメッセージがEthernetに接続しているときやAirMacの時に出て,modemの時には でないことがわかった.ということは,何らかのprotectionが働いているのか.

JavaScriptからJavaを呼ぶのが,どうもうまく動かないようだ.Macだから? サンプルのwebの pageの例は,IEでもCaminoでもSafariでも動かなかった. MacOSXのせいのようである.こまった...

ボタンの組み込みは完成せず(2003.3.21)

いろいろJavaでボタン等を組み込もうとしたが,なかなか面倒なので,完成していない. うまくJavaScriptでできれば,その方がよっぽど簡単だ. それとも,上手にobjectをコントロールできるように作り,ボタンobjectとか,設定して 使えるようにする方がいいだろう.それには,もう少しJavaを知らないといけないようだ.

画面クリアーの組み込み(2003.3.18)

画面のクリアーを組み込むトライ.

  1. POSTで送ると,browserは新しい画面にしてしまうのでNG.
  2. 同様にJavaScriptでも,新しい画面になってしまう.
  3. JavaScriptのclear()は,ローカルに画面クリアをしてくれる.ただし,画面全部.
  4. ある位置をクリックしたら,Javaでclearwindow()を実行するのはOK.

あとは,うまい方法でJavaScriptから出来ないか,JavaScriptでAppletのmethodを 呼ぶ方法が使えないか,要検討.

MacOSXでもwclock2が動きDragも(2003.3.18)

MacOSXでwclock2が動いている.理由は?? 新しいJavaになった? Backupでマシンが変わった? 不明だが,一歩前進.[なぜ動いたかは,あとで判明した.Ethernet connectをしていなかったから] (night work at Havana...)

ついに,Dragも動いた.結局,Dragイベントを渡すところをThreadにしたら,全体がスムーズに流れた. まだ,なぜだか不明.しかし,Click/DragがwebMath+horbでうごいたということは画期的. これもハバナ静養のおかげ :-)

Windows2000でClickは動いた(2003.3.16)

Windows2000で,新しいwebMath2.0とMathemaitca4.2の組み合わせて,Clickは動くようになった. 問題は,Dragで,getmouseもstilldownも思いどおりに動いていない.stilldownはFlaseを返すし, getmouseも新しい位置座標を返さない.これは,どうも,horb経由でappletにアクセスするのと eventの取込みが,何かうまくいっていないみたいな感じ.しかし,Math+appletの時は,うまくいって いた(Loopのところ)のだが.

方針としては,event/horbの2つをうまくスレッドに分割して,お互いにCPU時間が得られるようにする という必要はないだろうか? スレッドで共有変数の扱いは?

エラー解消せず(2003.3.10)

JISSのWindowsでも,同様に,lang.class.formatError: AppletImpl(Bad magic number)が出る. これが,なぜ出るか不明.発生は,webMathematica上で,appletを起動しようとしたときに 出てくるようである.

  • Try: webMath 2.0にしてみる.
  • IEのchacheのクリア:効果なし
  • jar fileにまとめる:効果ない
  • horb/をWinのものに:効果ない

TextAppletを参考にしながら,動かしていく方針はどうだろうか.

wclock2が動かず(2003.3.10)

再度,wclock2を試すが,MacOSXでは,動かず.この時,出るエラーは,まったくpaintと同じ. ということは,wclock2が動くようになるなら,paintも可能性があるということか. でも,wclock2もOSXでうごいたような気がしたがナー....

% horb -v -start Server test
main: HORBServer(8887) started
HORBServer: creating an instance of Server for port 0
HORBServer: object test has been created
Server(test) started
HORBThread-0: connecting to object test
HORBThread-0: HORB object test has been connected
HORBThread-0: Waiting for method call
HORBThread-0: objectID= test classNo= 1 methodNo= 1001
warning: reconnection to horb://Chikara-MIYAJI.local.:49276/H6824979 failed during
 passing an object by reference.
horb.orb.NetException: java.io.StreamCorruptedException: Caught EOFException while
 reading the stream header
        at horb.orb.IOCICommon.connect(IOCICommon.java:135)
        at AppletImpl_Proxy._connect(AppletImpl_Proxy.java:31)
        at horb.orb.IOCICommon.recvObject(IOCICommon.java:936)
        at horb.orb.BasicIOCI.recvObject(BasicIOCI.java)
        at horb.orb.SerializingIOCI.recvObject(SerializingIOCI.java:185)
        at Server_Skeleton.stub1001(Server_Skeleton.java:47)
        at Server_Skeleton.dispatch(Server_Skeleton.java:142)
        at horb.orb.RequestServer.methodCall(RequestServer.java)
        at horb.orb.RequestServer.run(RequestServer.java)
        at horb.orb.HORBThread.run(HORBThread.java)
HORBThread-0: HORB object test has been disconnected.
HORBThread-0: disconnected - java.io.EOFException
HORBThread-0: close connection

Windowsでは,wclock2は,動く.これは,ローカルでということ.ここで,applet をMacOSXで 動かした場合,まだ,動かない.Connection Time outがでる.

あと,horb -v -start Server testとするときには,Serverにpublicの属性をつけること.

MacOSXでhorb serverを動かし,Windowsからappletでアクセスする場合のwclock2はOK. しかし,その逆はダメである. はじめは,MacOSXにserverのfilterがかかっていて,おかしかったようだ.

127.0.0.1にしてもおなじ.

% horb -v
main: HORBServer(8887) started
HORBThread-0: creating an instance of Server
HORBThread-0: HORB object H6641336 has been created
HORBThread-0: Waiting for method call
HORBThread-0: objectID= H6641336 classNo= 1 methodNo= 1001
warning: reconnection to horb://Chikara-MIYAJI.local.:49343/H3532528 failed
 during passing an object by reference.
horb.orb.NetException: java.io.StreamCorruptedException: Caught EOFException
 while reading the stream header
        at horb.orb.IOCICommon.connect(IOCICommon.java:135)
        at AppletImpl_Proxy._connect(AppletImpl_Proxy.java:31)
        at horb.orb.IOCICommon.recvObject(IOCICommon.java:936)
        at horb.orb.BasicIOCI.recvObject(BasicIOCI.java)
        at horb.orb.SerializingIOCI.recvObject(SerializingIOCI.java:185)
        at Server_Skeleton.stub1001(Server_Skeleton.java:47)
        at Server_Skeleton.dispatch(Server_Skeleton.java:142)
        at horb.orb.RequestServer.methodCall(RequestServer.java)
        at horb.orb.RequestServer.run(RequestServer.java)
        at horb.orb.HORBThread.run(HORBThread.java)
HORBThread-0: HORB object H6641336 has been disconnected.
HORBThread-0: disconnected - java.io.EOFException
HORBThread-0: close connection

これは,MacOSXのバグか,なんらかの問題なのだろう.

Windowsでもおなじエラー(2003.3.8)

同じプログラムをWindows上で行ったが,その時は,Appletのロードが出来ずに, AppletImpl no loaded: Bad magic numberのエラーがでた.

セッション切れるエラー(2003.3.7)

上記の仕組みを作りはじめたが,なぜかhorbのsessionが切れてしまうエラーに直面.現在は, まだ完成せず. コンソールのlog: プロキシなし

start0
start1
java.security.AccessControlException: access denied (java.net.SocketPermission
 10.0.1.2:49515 accept,resolve)
start2
clicked175,104

Horbのlog:

% sh start_horb.bat //実行開始
main: HORBServer(8887) started
HORBServer: creating an instance of SuperServer for port 0
HORBServer: object stest has been created
SuperServer(stest) started //ここまでまず出る
HORBThread-0: connecting to object stest
HORBThread-0: HORB object stest has been connected
HORBThread-0: Waiting for method call
HORBThread-0: objectID= stest classNo= 1 methodNo= 1001
HORBServer: creating an instance of Server for port 0
HORBServer: object abcd has been created //abcdが作られた
HORBThread-0: connecting to object abcd
HORBThread-0: HORB object abcd has been connected
HORBThread-0: Waiting for method call
HORBThread-0: objectID= abcd classNo= 1 methodNo= 1002
HORBThread-1: connecting to object abcd
HORBThread-1: HORB object abcd has been connected
HORBThread-1: Waiting for method call
HORBThread-1: objectID= abcd classNo= 1 methodNo= 1001
//これ以下のメッセージが問題.
warning: reconnection to horb://Chikara-MIYAJI.local.:49514/H6178287 failed
 during passing an object by reference.
horb.orb.NetException: java.io.StreamCorruptedException: Caught EOFException
 while reading the stream header
        at horb.orb.IOCICommon.connect(IOCICommon.java:135)
        at AppletImpl_Proxy._connect(AppletImpl_Proxy.java:31)
        at horb.orb.IOCICommon.recvObject(IOCICommon.java:936)
        at horb.orb.BasicIOCI.recvObject(BasicIOCI.java)
        at horb.orb.SerializingIOCI.recvObject(SerializingIOCI.java:185)
        at Server_Skeleton.stub1001(Server_Skeleton.java:47)
        at Server_Skeleton.dispatch(Server_Skeleton.java:97)
        at horb.orb.RequestServer.methodCall(RequestServer.java)
        at horb.orb.RequestServer.run(RequestServer.java)
        at horb.orb.HORBThread.run(HORBThread.java)
HORBThread-1: HORB object abcd has been disconnected. // windowを閉じる
HORBThread-1: disconnected - java.io.EOFException //IEを終了する
HORBThread-1: close connection

paintのコネクトがうまくいかず.

[Chikara-MIYAJI:webMathematica/Examples/paint] cm% sh start_horb.bat
main: HORBServer(8887) started
HORBServer: creating an instance of SuperServer for port 0
HORBServer: object stest has been created
SuperServer(stest) started
HORBThread-0: connecting to object abcd
HORBThread-0: no such object: abcd
HORBThread-1: connecting to object abcd
HORBThread-1: no such object: abcd
HORBThread-1: disconnected - java.io.EOFException
HORBThread-1: close connection
HORBThread-2: connecting to object stest
HORBThread-2: HORB object stest has been connected
HORBThread-2: Waiting for method call
HORBThread-2: objectID= stest classNo= 1 methodNo= 1001
HORBServer: creating an instance of Server for port 0
HORBServer: object abcd has been created
HORBThread-2: connecting to object abcd
HORBThread-2: HORB object abcd has been connected
HORBThread-2: Waiting for method call
HORBThread-2: objectID= abcd classNo= 1 methodNo= 1002
HORBThread-0: disconnected - java.io.EOFException
HORBThread-0: close connection
HORBThread-2: HORB Service request error: java.lang.NullPointerException
java.lang.NullPointerException
        at horb.orb.RequestServer.unuseObject(RequestServer.java)
        at horb.orb.RequestServer.closeObject(RequestServer.java)
        at horb.orb.RequestServer.run(RequestServer.java)
        at horb.orb.HORBThread.run(HORBThread.java)
HORBThread-2: close connection
HORBThread-3: HORB Service request error: java.lang.NullPointerException
java.lang.NullPointerException
        at horb.orb.RequestServer.unuseObject(RequestServer.java)
        at horb.orb.RequestServer.closeObject(RequestServer.java)
        at horb.orb.RequestServer.run(RequestServer.java)
        at horb.orb.HORBThread.run(HORBThread.java)
HORBThread-3: close connection
HORBThread-4: connecting to object abcd
HORBThread-4: HORB object abcd has been connected
HORBThread-4: Waiting for method call
HORBThread-4: objectID= abcd classNo= 1 methodNo= 1001
warning: reconnection to horb://Chikara-MIYAJI.local.:49499/H1412102 failed during
 passing an object by reference.
horb.orb.NetException: java.io.StreamCorruptedException: Caught EOFException
 while reading the stream header
        at horb.orb.IOCICommon.connect(IOCICommon.java:135)
        at AppletImpl_Proxy._connect(AppletImpl_Proxy.java:31)
        at horb.orb.IOCICommon.recvObject(IOCICommon.java:936)
        at horb.orb.BasicIOCI.recvObject(BasicIOCI.java)
        at horb.orb.SerializingIOCI.recvObject(SerializingIOCI.java:185)
        at Server_Skeleton.stub1001(Server_Skeleton.java:47)
        at Server_Skeleton.dispatch(Server_Skeleton.java:97)
        at horb.orb.RequestServer.methodCall(RequestServer.java)
        at horb.orb.RequestServer.run(RequestServer.java)
        at horb.orb.HORBThread.run(HORBThread.java)
HORBThread-4: HORB object abcd has been disconnected.
HORBThread-4: disconnected - java.io.EOFException
HORBThread-4: close connection

もしかしたら,HORBのconnectionは,一度pageを終了すると,全部 切れてしまうのか.そう考えると納得できるか. とすると,毎回のeventでhorb connectionを作り直すという仕組みが 必要か.

イベントの受け渡しの仕組み案2003.2.18)

Java AppletよりもJava Applicationの方が作りやすいのかもしれいない--これは先日も書いた. しかしHorbを使った方がつくりやすい.それと,webMを使わない手はないだろう. その時には,webMで環境が残せるとして,あとは,どのようにinteractiveにするかという ところ.場合によっては,GET/POST方式でもいいかもしれない.あとは,引数で渡し, Dragなどは,ほかで面倒をみる. その場合,逆に,うまく何度もHorb経由で接続する仕組みが必要か.

  • 0 step: command lineからHorb sserverを起動.connect modelで準備しておく.
    % horb -start sserver ss0
  • 1st step: 1-1: あるhtmlページから,math.mspへのリンクをクリックする.その時, nameに乱数を作って呼び出す.(これも.mspでつくってしまえ)
    • 1-2: POSTでmath.mspを起動.//math.msp&msid=INIT&name=C11234
      [(1-1,1-2)はJava Applicationであれば,自前で1-2のhttp connectionをはる]
    • 1-3: math.mspでは,接続モデルで,sserverに接続.(horb://localhost/ss0)
      ss=JavaNew["SuperServer_Proxy","horb://localhost/ss0"]
      sserverに,C11234で仲介objectを作ることを依頼し,自分のSessionIDも送る.
      ss@newServer["C11234"]
      ss@mySessionID[ToString[SessionID]]
    • 1-4: C11234の名前で接続し,Session環境に,そのJavaObjectを記憶.
      SessionID[server]=JavaNew["ServerProxy", "horb://localhost/C11234"]
      Jaca Applicationも,C11234の名前で接続し,そのJavaObjectを記憶.SessionIDを取得.
      server = new Server_Proxy("horb://"+host+"/C112324");
      server.acceptInvitation(this);
      sessionid = server.getSessionID()
  • 2nd step: Java Applicationから,イベントをPOST. //math.msp&msid=SessionID&eventexp=zzz[click,1,2] mspでは,SessionIDから環境を呼び戻し,zzz[click,1,2]にたいする処理を行う.
  • Last step: Java Applicationから,終了イベントをPOST. //math.msp&mid=SessopmID&eventexp=Done[] 仲介objectをremoveして,自分のSessionIDを無効にする.

利点:dragの処理は,POSTイベントではなくて,Horbで処理されるので,反応がはやい. Math-をたたきおこすのはPOSTに任せる.こっちのほうがEventloopよりは安心できる.

枠組みができたら,どんなapplicationがあるか?interactive幾何学,グラフ理論,あみだくじ, interactiveにやりたいものをMathematicaを利用して簡単につくりあげる枠組みDevKitを 作れば良いだろう.IBのようなDeveloper Kitがいい. Integrate-Mathematica-Interactive-Navigation-System(IMINaSy)イミナシ これで,ほぼ,HorbもwebMもどちらの問題もクリアーしたのじゃないだろうか.good!

この枠組みだと,再接続は難しいが,Appletでもおなじようにできるだろう.それとも新たに 仲介objectを作ってつなげてしまうのもいいか.それとも仲介objectに再度つなげてしまえば. M-側は残っているのだから.

horbがMacOSXでも動く(2003.2.16)

先日,MacOSXを再度インストールすることで,おかしかったhorbも,動くようになった. clientServerは動いた.しかし,wclock2は,まだMacOSXではダメ.ただし, horb_ca2などは動く.

しかし,どうも,appletベースのプログラムは,マウスドラッグができなかったり, まったく線が描けない(IE)など,予想外のおかしい動作をする.

プログラムをつくるとなると,appletよりも,Java application + webMathematicaのような 組み合わせのほうが,制限がすくなく良いのかもしれない.(NN)よりはIEのほうが動く可能性が高い. On MacOSX

  • horb_ca:動かず.通信のエラー出る.
  • horb_ca_2: (NN)動く.
  • horb_fhand_2: ~(NN)クリックだけ.ドラッグが不可.最後のwindowを閉じてもBreak[]が渡らない.
    (IE)線もドラッグも動いた.Appletの場合はIEのほうが成績いい.
  • horb_draw: ~(NN)線だけはでる.drag出来ない.
    (IE)dragうまく動いた.

AppletとMathematicaの通信を行う(2003.1.17)

AppletとMathematicaとの通信に成功.freehandが動き出した.これで いろいろなinteractiveなサンプルを作ればインパクトがあるだろう.長年の懸案だった 部分が動き出した訳だ.しかし,webMathematicaやHorbなどの技術の助けがあれば こそである.

freehandのJLink版を作る(2003.1.13)

freehandのmathlinkをつかわないapplication versionを作る.それをhorb化して, Mathematicaから接続して,うまく動いた.つまり,client化はできたということ.

問題は,Windowsに持っていった時に,frameの大きさが0だったこと.これは, Javaの使い方の問題.Canvasの設定をしていないからかも???

あとは,うまくkernel側にとばせれば,それをAppletとすることで,一応の 目的の第一歩は到達する...もうすぐだ.

間違い発見(2003.1.6)

エラーは,.:をいれていないためであった.

エラー発生(2003.1.6)

examples/clientServerを試すが,エラーが発生して,horbcが完了せず.

 % horbc Server.java
         compiling Server.java
         generating Server_Proxy.java
         compiling Server_Proxy.java

Server_Proxy.java:95: シンボルを解釈処理できません。
 シンボル: クラス Server  
 位置    : Server_Proxy の クラス
     Server o = null;
     ^
Server_Proxy.java:97: シンボルを解釈処理できません。
シンボル: クラス Server  
位置    : Server_Proxy の クラス
      o = (Server)obj;
           ^
Server_Proxy.java:100: シンボルを解釈処理できません。
シンボル: クラス Server  
位置    : Server_Proxy の クラス
        o = new Server();
                ^
Server_Proxy.java:123: シンボルを解釈処理できません。
シンボル: クラス Server  
位置    : Server_Proxy の クラス
    else if (o instanceof Server) {
                          ^
エラー 4 個
javac Client.java
Client.java:6: シンボルを解釈処理できません。
シンボル: クラス Server_Proxy  
位置    : Client の クラス
    Server_Proxy server = new Server_Proxy("horb://"+host);
    ^
Client.java:6: シンボルを解釈処理できません。
シンボル: クラス Server_Proxy  
位置    : Client の クラス
    Server_Proxy server = new Server_Proxy("horb://"+host);
                              ^
エラー 2 個

インストールをする(2003.1.4)

HORB-2.0のインストール

  1. Java versionの確認
    % java -version
    java version "1.3.1"
    Java(TM) 2 Runtime Environment, Standard Edition 
     (build 1.3.1-root_1.3.1_020714-12:46)
    Java HotSpot(TM) Client VM (build 1.3.1_03-69, mixed mode)
  2. CLASSPATHへの追加
    CLASSPATH=/Applications/Mathematica 4.2.app/AddOns/JLink/JLink.jar:
     /usr/local/horb/classes
  3. PATH環境変数に追加
    PATH=/usr/local/horb/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
  4. チェック
    % horb -version
    HORB ORB Version 2.0.2
    Copyright 1995-2000 HIRANO Satoshi
    Copyright 1995-2000 Electrotechnical Laboratory and contributors
    Copyright 1999-2000 NJK Corporation

このページの著作権は,すべて宮地 力に所属します.
もし,内容を利用される場合は,宮地までメールにて,ご連絡ください.
また,このページへのリンクは,フリーです.