ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

DX2リプレイ『ゆにばーさる』

2008-07-18 23:59:48 | TRPG

ダブルクロス・リプレイ・ゆにばーさる『果て無きカーニバル
これもドラゴンブックのくせして表紙がガラッと変わってる!表紙が変わったのはSW2だけじゃなかったのか…。

タイトルの『ゆにばーさる』という平仮名の文字を見たときから、これはアキハバラの話に違い!と思って、その通り(笑)
ついにファンブック『ライブボックス』のリプレイが単行本に収録されたというわけだ。
ただし、ずいぶんと文章に書き足しがある。
(ゆにばーさるやファイナルハーツの場所が載ってる地図は収録されてないようだが…、別のネタとして右丸電気とかはマンガに入ってる(爆))

短編集なので、もう一つは『矢野俊策の事件簿』に収録されていたやつ。
こっちはあんまり変わってる感じはしないなー…。

これら2つとも面白いんだけど、さすがに一度見たものだから(忘れてるとはいえ(爆))ネタバレしているので、初めて読んだ時ほどには面白いとは感じられなかったな~…まぁ仕方ないけど。 なんと言っても、今までに出たキャラがまた(しかもこんな変なステージに)!というのが売りだからねぇ(笑)
(もっとも、初めて読んだ時でも、一番最初(DX1らしい)の元ネタのリプレイは知らなかったのでイマイチだったのだが)

そういう意味で、最後の1つは書き下ろしだから、良かった^^
まさかこの人がGMをやるとは…!
たぶん今までの短編リプレイの中でも1・2を争う短さだけど(爆)、面白かった。
このPCがこの年齢で出るって話はどこかで聞いたような…あ、ストライクの後書きか。
没ネタだったのにこの短編集で実現したんだな(笑)


printf()をJRE1.4で使用…?

2008-07-17 00:09:30 | PG(Java)

javacコマンドでは、-targetを使うことによって対象バージョンを指定することが出来る。
でもコンパイル時に使われるライブラリーは、それとは無関係にjavacのバージョンに対応したライブラリー。
なので、System.out.printf()を使いつつバージョン1.4向けにコンパイルできる。
(-targetを1.4にするなら-sourceも1.4以下にしないといけないので、可変長引数はそのままは使えないのだが…)

でもJRE1.4のjavaコマンドでは(JRE1.4のライブラリーに)printf()メソッドが存在しないので、実行できない(爆)
JRE1.5以降のjavaコマンドでは実行できるが…わざわざ-target 1.4にしてる意味が無い!


MSHTMLの弱参照を使った修正

2008-07-14 23:56:42 | PG(Java)

MSHTMLをJavaから扱うライブラリーを、弱参照リストを使うよう修正。

つまり、取得したCOMオブジェクトを弱参照リストに入れ、普通に参照されなくなってGCが実行されたら弱参照リストから削除される。
今まではこのリストが普通の(LinkedListっぽい自作の)リストだった為、自分自身も強参照でオブジェクトを保持していたから、他で保持しているのかどうか区別できなかった。したがってdispose()というメソッドを用意してそれを呼ぶ必要があるという仕様とし、それが呼ばれたときにリストから削除するという事をしていた。

でも頻繁に使うオブジェクトで一々こういう管理をするのは不細工(Javaはその観点からメモリー管理をGCで行っている訳だし)なので、dispose()を使わない方法が見つかったのは嬉しい(笑)
つーか、もっと早く知ってれば…。関連するメソッドを修正するのが、単純だけど量が多くて大変だった(苦笑)

まぁいいか、非推奨も本格的に使えたのだし(爆)


弱参照リスト

2008-07-14 20:05:48 | PG(Java)

ThreadLocalの作りを勉強してみると、弱参照というものが出てくる。
なんかそんなようなものを聞いた記憶が脳の底に眠ってるような気がしないでもないような。(錯覚かもしれないが)

普段使っている「参照」は「強参照」というものであり、オブジェクトを弱参照で保持しておくと、他の強参照が無くなったときに(弱参照が残っていても)GCの対象になってくれる。

これがあれば、「破棄動作(例えばクローズ)が必要なんだけど、プログラマーが忘れがち(忘れても対処できない)」という事態を管理できる。
弱参照オブジェクトを見れば、破棄されたかどうか(強参照が無くなったかどうか)が分かるから。
通常の方法で管理するなら、オブジェクトをリストにでも入れておこうと思うところだが、普通のリストでは自分がオブジェクトを保持すること自体が強参照なので、自分が保持し続けている限りGCの対象にならない(=ファイナライザーが呼ばれない)というのが困りもの。
弱参照を使うと この問題が解決できる。

しかし試してみると、弱参照オブジェクト自身はどこかに(強参照で)残しておかないといけないのがちょっと使いづらいところ。
GCが動いた後にそのオブジェクトを破棄してくれるWeakHashMapというものはあるのに、WeakListというものは提供されていない。
ので、ちょっとWeakList(WeakLinkedListと名付けるべきだったか?)を作ってみた。