netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2002-11-05 古い日記からの変換データ ▲
_ LAN ▲
ここ最近,ノートパソコンからデスクトップにデータを転送する必要がなかったので気にしてなかったが,LAN カードが1枚壊れたおかげで,わざわざ外部から一時的に切断して(ケーブルを差し替えて)内部に繋がないといけない.
たまたま外のサーバで作業中に,内側のリソースにアクセスしたくなって,とても困った.少し値段はするが,また X-JACK のカードを買うか…….
デスクトップ側をルータにしてもよいのだが,ファイアウォールをセットアップする手間に加えて,作業するときには常にデスクトップを起動してないといけないというのが,デスクトップのシャットダウン時に謎の致命的例外が発生する現状では,ちょっと悩ましい.
2003-11-05 古い日記からの変換データ ▲
_ 論文 ▲
AspectJ の Weave プロセスを紹介した論文がAOSD2004 に投稿されたらしい.
Erik Hilsdale, Jim Hugunin:Advice Weaving in AspectJ
・AspectJ のアドバイスがどうバイトコードにコンパイルされるか 特殊変数を参照していない場合はそれらのデータが 渡されるのを省略してパフォーマンス改善
・Join Point shadows pointcut 定義はあくまで実行時の Join Point 集合だが, それをソース上にマップした shadow として 何をとるか,pointcut designator との対応表.
・変換されたコードは AJ_SYNTHETIC 属性を持つ. これは Java の assert や C.class が変換されたコードが SYNTHETIC 属性を持つのと同じ (Java VM Specification に書いてあるらしい).
・コードのインライン展開は,パッケージ可視性や private メンバへのアクセス問題があったのでやめたらしい.
・ロギングなど,処理の有無をオン/オフできるようにする場合, AspectJ ではアドバイス実行のコストが高いので, PCD の if(enabled) -- static boolean enabled; などと書くと,多少改善するらしい.
_ AspectJ ▲
call pointcut はメソッド呼び出し自体にしかマッチしないから,around で call を潰したとしても引数の評価は行われてしまう,らしい.
副作用や,重たい処理を含んだ引数評価があるとはまりそう.
2005-11-05 ▲
_ [hyCalendar] スタートアップ時の起動エラーへの対処 ▲
hyCalendar は WndProc 内で Screen.ActiveWindow にアクセスしているが,Windows XP での起動直後は Screen.ActiveWindow = nil になることがあって,それで起動時にエラーが起きていた様子.
とりあえず修正版を公開.他に追加する機能がまだあるので 1.3.1 リリースまでまだ少し時間がかかりそう.
2006-11-05 ▲
_ [Java] Extensible Java Profiler を試してみた ▲
JDK 1.4 で動くプロファイラがほしくてExtensible Java Profilerを試してみた. 別に何でも良かったのだけど,@ITの記事 で紹介されていたプロファイラの中で,最新版が一番新しかったから選んでみた.(1.5用ならこんなのとかがある)
lib/tracer.dll にパスを通して -Xruntracer で実行すると,スレッドごととおぼしき *.ejp ファイルが生成されるので,それを presenter.bat で起動するツールに読ませる.出力結果はメソッド呼び出しの履歴(コールツリー)に時間情報が付加されているだけのシンプルなUIなので,使う段階で迷うことは特になし.
Extensible というのは,どうやら色々なフィルタを噛ませて閲覧できるという点らしい.メソッドごとに時間積算するぐらいで十分だけど…….
このツールは,どうもログファイルの肥大化が目立つ気がする.積極的にライブラリなどを排除しておかないと,すぐ数百MB,下手するとGB単位のファイルになってしまう.「後からプロファイル結果を加工する」という考え方をしてるので,JVM からデータを取っている段階でデータ量を減らせないというのが不利に働いている気がする.適用対象のプログラムがやたらと多数のオブジェクトを使ってたせいかもしれないけれど.
大規模な入力に対しては,このツールだと太刀打ちできなかったので, System.getCurrentMillis あたりを使っての簡易時間計測で済ませることにした.