netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2002-09-24 古い日記からの変換データ ▲
_ 論文 ▲
読んだのは2本.Laurent Bussard et al.: ``Safe Aspect Composition'' ただのテクニカルレポートで,アスペクト間の干渉がどのように起こるかが説明されているもの.こういう問題を考えましょう,という提案みたいな形.
Angelo Furfaro, Libero Nigro, Francesco Pupo:``Aspect Orinted Programming Using Actors''アスペクト指向で「アクター(有限状態機械で表現されるエージェントみたいなもの)」を横断した要素をプログラムしてみよう,そのためのミドルウェアであるアクターサーバを作ってみた,という感じの論文.アスペクト指向は,ソフトウェア工学の人よりもむしろ分散系の人たちのほうが注目してるみたい.
2004-09-24 古い日記からの変換データ ▲
_ [論文] メタクラスの互換性問題 ▲
Noury Bouraqadi-Saadani, Thomas Ledoux, Fred Rivard:Metaclass Composability.Composability Workshop held in conjunction with ECOOP 96.
前に読んだ OOPSLA の論文でのメタクラスの互換性問題について述べていた論文.
Upward Compatibility は,親クラスがメタクラス情報にアクセスしているとき,子クラスは自分自身のメタクラスにアクセスすることになるが,このときにメタクラス同士は直接関係ないので困ったことになる(直接は関係なくてもメタクラス間できちんと関係を維持しないといけない)という問題.
Downward Compatiblity はメタクラス間の継承関係が,クラス側に影響を及ぼしてしまう問題.
また,複数のメタクラスを同時に使うときにはそれらを合成するメカニズムが必要である(たとえば多重継承など…).
で,この人たちは,メタクラスからのインスタンス生成(self.new)とクラスからのメタクラス取得(self.class)とがベース・メタレベル間を移動する瞬間なので,そこを Metapipe というポイントとして何らかの取り扱いをすればよさそうでは,という提案をしている.
AOP的な文脈に置き換えられるかな?と思ったのだが,アスペクトの動作をメタレベルへの移動ととらえられないことはないかもしれないが,アスペクトの中でベースレベルに「降りる」移動のほうがいつなのか,というのは明確には言いづらいのかも.
_ [論文] オブジェクト指向対応の差分計算アルゴリズム ▲
Taweesup Apiwattanapong, Alessandro Orso, Mary Jean Harrold:A Differencing Algorithm for Object-Oriented Programs.Proceedings of the 12th ACM SIGSOFT Symposium on the Foundations of Software Engineering (FSE 2004),Newport Beach, CA, USA, November, 2004.
言語のsemanticsまで考慮した diff を作りましょうという話.クラスおよびインタフェースの対応をとって,メソッド単位の対応をとって,メソッドの中身では制御フローグラフのノード間の対応を取る.
クラスは基本的にはパッケージ名まで含めた名前比較だが,メソッド単位ではシグネチャを優先しつつ,名前だけでの対応も作る.メソッドの中身は,制御フローグラフをベースに比較する.
制御フローグラフでは,メソッド呼び出し文ごとに,dynamic binding の結果でどのメソッドに行くか分岐情報を持ったようなグラフを作っている.で,Hammock という Signle Entry Single Exit な部分グラフを見つける.要は,メソッド内の制御フローで,「どんな条件でも必ず通過するノード」を識別して,その部分を「Hammock Node」という集約された形に置き換える.で,それを繰り返していって全体の簡略化された制御構造を取り出す.あとは Hammock Node 間の類似度とかで計るみたい.
従来のマッチングアルゴリズムに比べると,マッチするノード数はだいぶ増えているらしい.時間は,20000ノードぐらいのプログラムで5分かそこらなので,そこそこの時間はかかるみたい.
わりとアルゴリズムの計算量とかについても述べていてかなり真面目で,よさそうな論文.diff について引用することはないと思うが,この人たちの Hammock のアイディアは(もっと前の論文で出ているものだが)どこかで使うことになるのかも.
_ [論文] feature 実装位置の特定作業 ▲
ICSM のどれかの研究で引用されてて,なぜか放置してた論文のメモ.
Chen, K. and Rajlich, V.:Case Study of Feature Location Using Dependence Graph.Proceedings of the 8th International Workshop on Program Comprehension (IWPC 2000), pp.241-249, 10-11 June 2000.
ASDG (Abstract System Dependence Graph) を使って,特定の機能を実装したソースコード位置を特定するfeature location の支援には,グラフを展開しながら閲覧するという形のツールが必要だろう,グラフ全体を把握しつつグラフの一部だけを見ていくのがいい,といった種類のことを言っている論文.
実際にはグラフが大きくなりすぎるので,頂点の集約とか何か色々な工夫が必要なのだろうけれど.最終的に生データ(ソースコード)に近づいていくことになると思うのだが,ソースコードに近づくほどグラフよりもソースコードのほうが理解が早くなったりしないのだろうか.
_ [PptWatch] PptWatch: Point 発表時間計測ツール ▲
もういい加減ハンドルである意味がなくなってきたので大学のサイトで公開することに.http://sel.ist.osaka-u.ac.jp/~t-isio/pptwatch.html
人柱募集中とか書いたりすると誰も使ってくれなさそうなので,使い方だけ書いて置いておくことにする.
_ [hyCalendar] 0.8.6 向け機能追加 ▲
次バージョン向けに,久々にコーディング.とりあえず昨日から5,6時間かけて実装したのは次の通り.他にどこまで組み込むかは未定.
・表示ツールバーの日付入力ボックスなど,一部でIME無効化.・装飾文字列の情報が,ハイパーリンク文字列の後で消えてしまう問題を修正.・「ハイパーリンク対象文字列も装飾文字列の効果に従う」オプションを追加.・フリーメモ,TODOエリアを最小化すると,復帰しないことがある問題を修正.・右クリックからのポップアップで [この日付に色を塗る] メニューを追加.・右クリックからのポップアップで [この日付の色をパレットに抽出] メニューを追加.・ファイル保存後も「元に戻す」を有効に設定.・[表示]メニューに,フリーメモ,TODOリストを追加.・[終了時のウィンドウ位置を保存する]を[終了時のウィンドウレイアウトを保存する]に変更. 有効なときはフリーメモ,TODOリストの表示状態を保存する.
2007-09-24 ▲
_ [Delphi][VolumeDeskbar] Vista 対応を進行中 ▲
もう少しで,いちおうの Vista,XP 両対応版を出せそうです.以前から利用させていただいている TMixer と,Vista 用の別実装を,自動で切り替える形式にしてます.
ただし,実験環境もなく,あまり投資する気力がないので,複数のデバイスから制御対象を選択する機能を Vista ではサポートせず,デフォルトの音量だけを制御対象としています.
今回,実装上で微妙にはまった点は,IAudioEndpointVolumeCallback によるコールバック時のメモリアクセス違反です.
いわゆるフックを使うとき,Windows プロセス内で動いてるフックのコードからはフックを仕掛けたアプリのプロセスの変数は見えないので,共有メモリとかを使って,通知を受け取るウィンドウのハンドルなどを共有しておく必要があります.
今回のコールバックでも,同様に共有メモリを使うようにするまで,うまく動きませんでした.独立EXEとして実験してみたら,何もしなくてもエラーにはならなかったので,explorer.exe の内部で動く都合か,何か別のところで問題があったのかもしれません.
_ [Delphi] Delphi の True は一部 API にとっては FALSE ▲
一部 Windows API では bool 値を LongInt 値で受け取るが,Delphi は True/Falseを「0以外(定数は-1)/0」で扱っているのに,APIは「0より大/0以下」で受け取るために食い違いが発生し,定数 True を渡しているつもりでも反応しないことがあります.
IAudioEndpointVolume.SetMute もその1つで,VolumeDeskbarの場合,インタフェース宣言をLongInt型で宣言することで回避しています.
BDS2006の場合,定数 True のコード補完時の表示情報は Boolean(1) なのに,BoolToStr(True)とかBoolToStr(LongBool(1)) の結果は -1 が出てくるので,基本的には LongInt で通さないと危険みたいです(私が知らないだけで他に賢い回避策があるのかもしれません).