投稿エディタのヘルプを見たら、以前の改行設定ではなく「投稿オプションで設定」するように書いてあった...。
スクリプトを投稿に載せる都合上、自動改行されると困るケースの方が多いのでOFF。
2010-04-29
今さらRhinoのsync()について知った
引数として関数オブジェクトを渡すと、Javaでいうsynchronized(this)な関数に変換してくれる。
1. 書いてみる
1. 書いてみる
// よくある何とかHolder
var numHolder = function(initNum) {
this.out = java.lang.System.out;
this.num = initNum;
// 加算と減算
this.incNum = function() {
for (var i = 0; i < 10; i++) {
this.out.print(" inc:" + this.num++);
}
}
this.decNum = function() {
for (var i = 0; i < 10; i++) {
this.out.print(" dec:" + this.num--);
}
}
// sync()を使って同期関数を用意する
this.incNumSync = sync(this.incNum);
this.decNumSync = sync(this.decNum);
};
// Holder一個だけ作っておく
var theHolder = new numHolder(0);
// 別スレッドで、ひたすら加算する
var runner = new java.lang.Runnable() {
holder: theHolder,
run: function() {
this.holder.incNum();
// *sync()を使う場合*
//this.holder.incNumSync();
}
};
new java.lang.Thread(runner).start();
// メインスレッドで、ひたすら減算する
theHolder.decNum();
// *sync()を使う場合*
//theHolder.decNumSync();
2. sync()を使わない場合の動作js> load("synctest.js");
dec:0 dec:-1 dec:-2 dec:-3 dec:-4 dec:-5 dec:-6 inc:-7 in
:-3 inc:-2 inc:-1 inc:0 inc:1 inc:2 dec:3 dec:2 dec:1js>
3. sync()を使う場合の動作js> load("synctest.js");
dec:0 dec:-1 dec:-2 dec:-3 dec:-4 dec:-5 dec:-6 dec:-7 dec:-8
c:-9 inc:-8 inc:-7 inc:-6 inc:-5 inc:-4 inc:-3 inc:-2 inc:-1js>
2010-03-21
符号付き16ビット整数の左ビットシフトをRhinoでやってみる
シフト数を16にした時に、ようやく(value << shiftCount)だとダメだと気付いた。
function shiftLeft16(value, shiftCount) {
return ((value & 0x7FFF) << shiftCount) | (value & ~0x7FFF);
}
function printValue16(value) {
java.lang.System.out.println(
value + "(" + java.lang.Integer.toBinaryString(value & 0xFFFF) + ")");
}
var value = -1;
printValue16(value);
printValue16(value << 16);
printValue16(shiftLeft16(value, 16));
// 結果は以下:
//-1(1111111111111111)
//-65536(0)
//-32768(1000000000000000)
Rhinoで独自プロパティを追加してJavaインタフェースを実装する
Javaインタフェースを実装するJavaScriptオブジェクトにプロパティを追加しておくと、Javaインタフェースで宣言されたメソッドからも利用できる。
var runner = new java.lang.Runnable() {
// 独自プロパティを追加する
message: "Hello, ",
// Javaインタフェースのメソッドを実装する
run: function() {
// 追加しておいたプロパティを使用する
java.lang.System.out.println(this.message + this);
}
};
new java.lang.Thread(runner).start();
java.lang.Thread.currentThread().sleep(100); // スクリプト本体の実行が終わらないように少し待つ
2010-02-21
2010-02-16
2010年明けてました
- 気が付いたら1年経ってました。
- サイト名変えました(etisia->syjiroji)。肩肘張らない感じに。
- pnm/bmp/mag画像ファイルをBufferedImageに変換するJavaサンプルコードをWebサイトの方に追加しました。BufferedImageを作る時のSampleModel-WritableRaster-ColorModelの組合せって、よくある画像フォーマットとどう対応しているの、ということを示す例にはなるんじゃないかと。
- Java Image I/Oのプラグイン作成にも挑戦してみましたが、ImageReader#read()チュートリアルの「プラグイン開発者は~しなければなりません」を読んだ辺りで挫折しました。使う側としては便利なAPIなのですが、プラグインを作るのは相当難しい気がします。
登録:
投稿 (Atom)