netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2002-10-09 古い日記からの変換データ ▲
_ AspectJ ▲
AJC1.1alpha がもうすぐリリースらしい.主な特徴は以下の通り.・コンパイル時,リンク時,クラスロード時の weaving を可能に(.jar も扱える)・eclipse.org のコンパイラによる再実装・アスペクトのバイナリに,ソースと同等の すべての情報を保存するようになった・インクリメンタルコンパイルの実装これでさらに面白くなりそう&面倒が起きそうな予感.
_ robocode ▲
JNI を使って Win32 API の getKeyboardState を呼び出し,ロボットをユーザが動かすことができるか?という実験をしてみた.
ユーザがコントロール可能なロボットは,強化学習などで使えるかもしれないなーとか,別のゲームとしても遊べそうだなーとか思ってたんだけど……
結果は,「System.loadLibrary への呼び出しを妨害しました」という旨が java.security.Permission によって出されておしまい.まぁ,robocode の趣旨的にはすごく正しい反応だ.Java 以外の機能使うのはある種のインチキだし.
手間かけて DLL とか作ったわりに結局役に立たなかったので少し残念ではあるけれど,Security Manager が有効に動作してる環境は初めて見たので,感動した.
2003-10-09 古い日記からの変換データ ▲
_ 論文 ▲
Stephan Herrmann:Object Teams: Improving Modularityfor Crosscutting CollaborationsNet.Object Days 2002
を読んだ.Object Team というモジュール単位を導入している.Aspectual Collaboration に近い概念(?)で,Team class 側は「こんな参加者がいるよー」と宣言して,個々のクラス側は「私は Subscriber 役をやります,メソッド xxx は私のこのメソッドに delegate してね」と宣言する.依存関係が AOP の場合と逆.
で,クラス側が「この Team を active にしてブロックを実行」というようにコントロールできるみたいではある.登場人物となるオブジェクトが全員揃った状態でオブジェクト間の関係を明示しながらプログラムを書くことになりそうなので,1:n あるいは m:n のオブジェクト対応をどう扱うのか,とかちょっと気になる.
個人的には,アスペクトと併用してTeam オブジェクト記述→ Team に参加するオブジェクト記述→ オブジェクト間のルールをアスペクトで記述なんてやってみたい.
アプローチ自体は嫌いじゃないのだけど,プログラム言語を作ったことで,どのくらい複雑さが低減できるのか,とか抽象度が高い記述が可能なのか,とか色々議論する余地は多そう.
すべての振る舞いを Object Team で書いたらどうなるか,っていうのを見てみたいところ.
_ 論文 ▲
以前読んだ論文の読み直し.Behavioral Specification and Analysis of Object-Oriented Designs (1997)Boumediene Belkhouche, Joel WuJournal of Object-Oriented Programming
Object Oriented Design Language (OODL) という形式記述言語とその検証系を説明した論文.オブジェクトがやり取りするメッセージやそれに伴う状態遷移を記述して,オブジェクト間の依存関係の循環や,結合度,client/server 関係といったものを調べる.しかし,ソースコードとの対応関係の確認はできない.
2005-10-09 ▲
_ [hyCalendar] プリンタでの印刷ミスへの対策 ▲
期間予定の直線の描画だけが消えるという報告があったので,調査した結果,Printer.Canvas.Font.PixelsPerInch の値によって線の太さを調節している処理で,もし,その値が正しく返されていなかったら,実は直線の描画がまったく起きない可能性があるということが判明.で,いちおう対策はしてみた.もし,それ以外が原因だったら,もう打つ手なし.
2006-10-09 ▲
_ [論文] AOASIA2006関連その1:Obliviousness ▲
ぼちぼちAOASIA関連の話題を整理してます.この記事自体は,正確にはAOASIA前日の別ワークショップで話された内容です.とりあえず研究関連ってことで論文カテゴリに入れておきます.
Obliviousness というのは,「アスペクトを結合するコード(クラスなど)はアスペクトの存在を知らない」といった意味なのですが,これが「クラスのコードは,アスペクトのコードへの参照を含んではいけない」という構文レベルでの話なのか,「アスペクトがなくても動くようなコードを書く」「クラスの開発者はアスペクトの存在を知らなく良い?」とかいう意味的な話なのか,というところが実は曖昧でした.
結局,使ってる人によって意味合いが違っていたようで(おかげでだいぶ議論が混乱していましたが),ベースコード中ではアスペクトの要素を参照しないという構文的な意味が AOP においては必須の性質であろう,意味的な Obliviousness の達成は望ましいが必須ではない,という形で整理されました.
意味的な Obliviousness としては,たとえば性能計測のような完全に後付けのアスペクトは,Obliviousness を達成する必要がありそうです.また,クラスから見た場合,別アプリケーションで再利用したいクラス群というのはアスペクトがあってもなくても動く必要があるでしょうし,アプリケーション固有のクラスは,そのアプリケーション内にいるアスペクトのことを多少意識したコードになっていても問題ない気がします.今のところ,構文的な参照関係以上の明確な指針はありません.