netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2004-07-02 古い日記からの変換データ [長年日記] ▲
2004-07-04 古い日記からの変換データ [長年日記] ▲
_ [hyCalendar] 0.8.0機能セット ▲
hyCalendar の 0.8 向け実装を着々と進行中.
修正事項は次の通り.
・キーワード検索として,AND/OR 検索機能を追加.
・同一ファイルを2つのウィンドウで開こうとしたときの動作の一部を修正.
・日付変換の関数をロケールに頼らないように修正.
・日付数字と休日名の表示フォントが分離.
・ハイパーリンクされる URL 文字列の長さの128文字制限を解除.
・ポップアップ文字列を時間で非表示にしないオプションを追加.
・フリーメモに横スクロールバーを追加. ワードラップ(行の自動折り返し)が有効だと ファイル保存時に行が分割されてしまうのでそれを回避.
・色ペイントツールバーを導入. とりあえずセルの背景および日付数字のところだけ 着色できるようにしてみた. インタフェースは,多少,試験的.
まだペイントツールバーの情報保存機能が未実装.ツールバーの追加やオプション設定の追加などで設定ダイアログなども項目が一部変わったので,ヘルプファイルも大幅に更新する必要があり,リリースするのはもう少し先になりそう.いちおう宣言した手前,今週末までには出したいところだが.
2004-07-06 古い日記からの変換データ [長年日記] ▲
2004-07-08 古い日記からの変換データ [長年日記] ▲
_ [hyCalendar] ヘルプ書き ▲
0.8 向けのヘルプ更新があらかた終了.スクリーンショットの撮りなおしが一番面倒なタスクだが,撮りなおし作業で順番に新機能を使っているとバグに気付く,というようにテストも兼ねられるのでおいしい?
とりあえず問題がなければ明日リリースの予定にしてHTML などの更新作業を始めることにする.Windows 98 対応は,環境が今のところ用意できないので見送り.
2004-07-09 古い日記からの変換データ [長年日記] ▲
_ [hyCalendar] 0.8.0 リリース ▲
無事,hyCalendar 0.8.0 をリリース.なんか着実に機能が肥大化しつつあるような気がする.今回は色々変化が大きいのでバグが増えてないか少し心配.Vector とかにも連絡しないといけない.
2004-07-11 古い日記からの変換データ [長年日記] ▲
2004-07-12 古い日記からの変換データ [長年日記] ▲
_ [hyCalendar] 0.8.1 ▲
地味に更新.フリーメモ欄に記入された文字列が微妙に全角文字列によってずれる問題を修正.
たいした修正ではないが,フリーメモ欄にURLを書きまくってる人がいると問題なのでさっさと公開してしまうことにする.
_ [Delphi][hyCalendar] Windows 98 ▲
論文査読する片手間にぼちぼち VMWare 上にWindows 98 の環境を構築してみた.
Windows 98 + IE 4.0SP1 でとりあえずDelphi を動かしてみたら,不正な浮動小数点演算で落ちた.日付処理まわりだとは思うが,症状の原因特定までは先は長そう.
……と思ったら,再起動したら動いた.1箇所,プロパティの設定ミスが発覚したが,それ以外は順調.うーん?
2004-07-15 古い日記からの変換データ [長年日記] ▲
2004-07-16 古い日記からの変換データ [長年日記] ▲
_ [論文] アスペクトのインスタンス化 ▲
下滝 亜里: アスペクトのインスタンス化とインスタンス単位でのアスペクトの適用.FIT 2004, to appear.http://noselab.ise.osaka-sandai.ac.jp/~asato/pubs/fit2004.pdf
どちらかというとプログラミング言語なネタか?インスタンスごとに貼りつくアスペクトのインスタンスを簡単に利用できるように,AspectJだけを用いて記述する方法と,クラスタグ付けによる記述法の提案.
オブジェクト1個以上に対してアスペクトが1個貼りつく,どのインスタンスにアスペクトを付加するか自分で決める,というのは Mix-in に近い立場に見える.1個のインスタンスに同じアスペクトのインスタンスが動的に複数貼りつくことがありうるので少し違う?
アスペクト指向的にはやはり複数のクラスのインスタンスにアスペクトを貼り付けたくなるが,そうなると芝浦工大の櫻井さんたちのAssociation Aspectに近いように見える.スペースの都合か,関連研究に対する位置づけが説明されてないので不明.
個人的な思いつきとしては,インスタンスレベルのアスペクトは対象を「この」インスタンス,と手動で特定しているといわゆるベースコードとアスペクトが混ざってしまうので,特定の関係にあるオブジェクト間にアスペクトが貼りつく,みたいな書き方ができるようになればうれしいのかもしれない.これは Association Aspect を適切なタイミングで付けたり外したりするアスペクトを書けば実現可能?
余談だが,インスタンスごとにアスペクトを動的に貼り付けるようになると,干渉のしかたも動的に決まるから,干渉の検出に使うプログラム解析などは難しくなりそう.アスペクトの貼りつき順序の禁止ルールとかを作るのは難しいし一杉さんの「安全な結合ルール」みたいな手法をきちんと考えないと複雑さがすぐに爆発しそうな予感.スライシングは解析コスト高いし,もうちょっと Lightweight な手法に進まないと苦しいか.
_ [hyCalendar] iniファイル読み込み ▲
hyCalendar が Windows 98 上で動かなかったのは,INIファイルから文字列を読み込むために使うGetProfileString (DLL上ではGetProfileStringA)が存在しない項目の一部にアクセスしようとしたときにページ違反を起こすためらしいということが判明.
hyCalendar 0.7.0 で追加された項目の中にどうやら引っかかるものがあるらしい.
とりあえず回避方法は,すべての設定が作られたini ファイルをあらかじめ用意しておくこと.なので,いちおうの対処はできた格好になった.
これで,少し余裕をもって対処できる.
2004-07-18 古い日記からの変換データ [長年日記] ▲
_ [hyCalendar] GetPrivateProfileString の仕様 ▲
hyCalendar が Windows 98 で動かなかった問題の原因が何となく判明.
INIファイル読み込みに使われる関数 GetPrivateProfileString についての MSDN ライブラリの説明に,読み込みに失敗したときに使われる lpDefault パラメータに関して次のようなOS限定の記述があった.
Windows Me/98/95: Although lpDefault is declared as a constant parameter, the system strips any trailing blanks by inserting a null character into the lpDefault string before copying it to the lpReturnedString buffer.
で,TODO文字列のデフォルト値は 'TODO: ' という定数で,文字列はおそらくポインタで渡されているだろうから,定数値を書き換えようとしてアクセス違反が起きていた,という仮説が有力になってきた.
TIniFile.ValueExists などのデフォルト値を伴わない処理を使ったら(読み出しには同じ関数を使うが),アクセス違反は起きなくなった.
ValueExists は毎回,指定したセクションのキーのリストをいちいち読み出すので読み出しのコストが上がってしまう.定数をCopy関数による明示的コピーで一時変数に格納してから読み出すようにするか,デフォルト値から空白を取り除くか.どちらでも問題は回避できることを Windows 98 上で確認した.
さすがに無駄なコピーを作ると将来(人かコンパイラが)消してしまう可能性があるので,あからさまなデフォルト値を設定しておいて,その値が使用されたら,本来の空白を含んだ初期値に変更する方法にする方向で修正してみることにする.
2004-07-31 古い日記からの変換データ [長年日記] ▲
_ [論文] アスペクト干渉の検出 ▲
Remi Douence, Pascal Fradet, Mario Sudholt:Deetction and resolution of aspect interactions.Technical Report, INRIA, No.4435, 2002.
AOSD2004 で出ていた論文の前の話みたい.アスペクトの干渉についての研究で,あるアスペクトと別のアスペクトが同一の Join Point には決してマッチしないときアスペクトは強独立で,また対象のプログラムにおいて共通のJoin Pointが存在しないとき独立である,といっている.
アスペクトが状態を持つ場合の拡張がAOSDの論文ぽい.
アスペクト同士がデータ依存関係を持ってしまう場合などは考慮していない様子.難しいところだけれど.
_ [論文] モジュール単位とクラス単位のビューの併用環境 ▲
Doug Janzen and Kris De Volder:Programming With Crosscutting Effective Views.Proceedings of 18th European Conference onObject-Oriented Programming (ECOOP 2004), pp.195-218,Oslo, Norway, June 14-18, 2004.
異なるクラスに分散した一つの機能を見るためのモジュールビューと,クラス単位でどんなモジュールに関与している機能があるか見ることができるクラスビューとを行き来して,作業ごとに適切な環境で作業するべきだ,という論文.プロトタイプではデータベース上にソースコードを置いて,仮想ソースファイルとしてユーザに提示するらしい.
アスペクトの記述内容が与えている影響などもクラス上に表示されたら便利でもあるし,またクラスに分散した機能をアスペクトかのように見る機能はFEATなどで提案されているがそれなりに便利そう.
ただ,理想的にはそうだと分かっていても,実装が伴わないとみんな納得してくれなさそうではあるが.このような複数のビューを行き来することが開発効率をどのくらい向上するかなど,疑問というか研究としての発展性としては気になるところ.
_ [論文] テストケースの実行履歴に基づく分類 ▲
William Dickinson, David Leon, Andy Podgurski:Finding Failures by Cluster Analysis of Execution Profiles.Proceedings of the 23rd International Conference onSoftware Engineering, pp.339-348, Toronto, Ontario, Canada, May 2001.
多数のテストケースから,バグ発見に効果的なテストケースを抽出するための手法.個々のテストケースの実行プロファイル(この論文ではどの関数からどの関数が何回呼ばれたかのリスト)をもとにクラスタを構築し,各クラスタから代表者を選び出すことでバグ発見に効果的なテストケースを選び出す.
各クラスタリング手法(使っている類似度の基準)とクラスタからの代表者の選択方法(各クラスタから1つなのか,エラーとなるような実行履歴を持つクラスタから多めに選ぶか)を変えて実験をしていて,呼び出し回数を単純に正規化した方法がヒストグラムなどよりも効果があり,エラーとなる実行履歴を持つクラスタから多めにテストケースを選ぶ手法だとだいたい30%のテストケースを選んだだけで90%のバグをカバーできたらしい.
テストケースのうち要らないものを減らしたりはできるかもしれないが,テストケース生成時に実行プロファイル結果が予想できないと使いにくかったりする?という気がする.プロファイル取ってる時点で実行してるわけだし.
_ [論文] テストケースの選択方法 ▲
William Dickinson, David Leon, Andy Podgurski:Pursuing Failure:The Distribution of Program Failures in a Profile Space.Proceedings of the 8th European Software EngineeringConference held jointly with 9th ACM SIGSOFT InternationalSymposium on Foundations of Software Engineering 2001,(ESEC/FSE 2001), pp.246-255, Vienna, Austria, September 10-14, 2001.
ICSEの続きの話っぽい論文.エラーが見つかったテストケースと同じクラスタから別のテストケースを選び出すとき,クラスタ全体から適当に選ぶより,プロファイル結果が近いものを選び出したほうが別のバグ発見ができる場合がある,ということが示されている.エラーのある実行と成功した実行は大きく離れていて,エラー同士はある程度かたまる傾向にあるらしい.
_ [hyCalendar] 0.8.3 リリース ▲
微妙に間が空いてしまったが,hyCalendar 0.8.3 リリース.
今回の更新は・日付メモからはみ出す文字列の折り返しをオプションとして追加.・印刷コンポーネントを最新版にした (Windows 98 関連でバグが直っているらしい)
TODO などの項目がはみ出して嫌だーという人や印刷時に項目がはみ出して悔しい人向け.期間予定だけは,自動位置調整の都合上,折り返せなかったりと微妙な条件は付いているが,たいていの人には十分なはず.逆に,たいした機能でもないので,使わない人はバージョンアップする意味はあまりない.