トップ «前の日記(2004-04-02) 最新 次の日記(2004-04-04)» 編集

日々の破片

著作一覧

2004-04-03

_ Rave

ミュージックシーンのレイブって言うことは、おー、たくさんの開発者が集まってきたぞということですね。っていうか、このサイトは異色だな。

ちょっと疲れ気味。

_ 職場に来た謎メール

spamなのか真摯なのか、さーぱりわからない、謎メール。こんな文面(英語だけど)。

君の名前はタロウ(ということにしておく)だよね。実は、家内と相談したんだが、もうじき生まれる子供にタロウと付けるつもりなんだ。

でも、どういう意味かちょっと不安になったってわけだ。

それでyahooで探したら、君のメールアドレスを見つけたって次第だ。

タロウ、もしよければ、意味を教えてくれないか?

それではよろしく

アラビアな名前 UAE

しかし、yahooで探したがそんなの出てこないぞっていうか、職場のメールアドレス知っているのは社内の人間を除けば50人に満たない勘定だ(全く、公開してないから名刺の消費量くらい)。

したがって、spamなんだが、それにしてもわけわからん。

これで返事を書くようなお人よしだと考えたら、次に、「それでは100ドル貸してくれ」となるんだろうか? しかも、ヘッダを見ると名前がわかるエイリアスじゃないほうのアドレス使ってるし。っていうことは社内からの名簿流出と考えるべきだろうが。

_ rjb-0.0.6

大体、できた。
test.rbから抜粋。
  class TestIter
    def initialize()
      @i = 5
    end
    def hasNext()
      @i > 0
    end
    def next()
      @i -= 1
      @i.to_s
    end
  end
 
  def test_newobject()
    it = TestIter.new
    it = bind(it, 'java.util.Iterator')
    test = import('jp.co.infoseek.hp.arton.rjb.Test')
    a = test.new
    assert("43210", a.concat(it))
  end
で、対応するjp.co.infoseek.hp.arton.rjb.Testは、
package jp.co.infoseek.hp.arton.rjb;
import java.util.Iterator;
 
public class Test {
    public String concat(Iterator i) {
	StringBuffer sb = new StringBuffer();
	for (; i.hasNext(); ) {
	    sb.append(i.next());
	}
	return new String(sb);
    }
}
Rubyのオブジェクトを、Rjb::bindを呼び出してjava.util.Iteratorインターフェイスに束縛している(なんか、やっぱり変かな?――より良い関数(モジュールだから)名があればコメント欲しいところ)。
したがって、Java側からは(Test#concatメソッドの引数として)インジェクションされたRubyのオブジェクトをjava.util.Iteratorとして呼び出すことができる。
注意点は、束縛されたメソッドからの返送。TestではbooleanやStringのような自動変換が可能なものを使用しているからへっちゃらだが、実際には、Javaのオブジェクトを移入して、それを明示的に返送に利用しないとだめだろう、といったあたり。
MS-Win32は、OK。Linuxはちょっと微妙(LD_LIBRARY_PATHの設定は別として)だが、問題ないと思いたい。
MSwin32なら
set JAVA_HOME=j2sdkインストールディレクトリ
vcvars32
ruby extconf.rb
nmake test
makeで、テスト用のセットアップするから、
nmake
ruby test.rb
ではうまくいかない。Linuxも大体これと同じ。
export JAVA_HOME=/usr/java #とか
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib:$JAVA_HOME/jre/lib/i386:$JAVA_HOME/jre/lib/i386/client
ruby extconf.rb
make test
i386とか、JAVA_HOMEの位置とかは実際の環境依存。i386以外の動作は怪しい。特に64ビットCPUだと。
というわけで残る問題は、 ポインタ64ビット環境は???
Cygwinも???
といったところだが、そのへんはRAAで公開してからだとして(どうせ試さ/せないから)、英語ドキュメント、サンプルとかを作らなきゃならないな。
あと、公開までに次の処理の動作方法を決定しなければならない。
前提)Rjbは、RBridge.classを動的にロードする。
  • 方法1)ソース内のバイト配列にバイトコードを埋め込む。
  • 方法2)リソースへ埋め込む。
  • 方法3)lib/ruby/site_ruby/version/os_dependedにsoと同時にclassをデータとしてコピー
  • 方法4)lib/ruby/site_ruby/version/rjbにclassをデータとしてコピー
ASRやSWinのようにWindows専用なら、方法2で決まりだが、Linuxなんかもターゲットに含んでいるから、どうやってやるのかわからないので、これはパスかな。
方法1は、固いしsoの可搬性に優れているが、ちょっとなぁ。
方法3は、classがなぜ、そのディレクトリにという疑問が。
方法4は、分離度は良いとして、やはりなぜ、そのディレクトリにという疑問が。
方法5というのもあって、文字列としてrjbにRBridge.javaのソースを埋め込み、ロードの都度、/tmpでjavacを実行するってやつだが、さすがに無駄くさいからパス。ソースを方法3や4の方法でlibにコピーってのも避けたいところ。

2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|

ジェズイットを見習え