netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2003-12-01 古い日記からの変換データ [長年日記] ▲
2003-12-02 古い日記からの変換データ [長年日記] ▲
_ skysoft ▲
skysoft のポイントが期限切れで失効になる,と連絡が来たものの134ポイント(=134円)ぶんしかないので使い道もない.買いたい本はないこともないがわざわざ通販として買うのも馬鹿馬鹿しい.
2003-12-03 古い日記からの変換データ [長年日記] ▲
_ [Delphi] TListView のアイテム交換 ▲
(レイアウト崩れていたので2005/11/10修正) TListView がどうやら任意の二つのアイテムの位置交換ができないようなので,自前で 削除 → 挿入をすることに.ItemIndex と同時に FocusedItem も動かさないとフォーカスだけ取り残されてかっこ悪いことになる.引数: index1, index2: integer; ListView.Items.BeginUpdate; ListView.Items.Delete(index1); item := ListView.Items.Insert(index2); FItemList.Exchange(index1, index2); updateItem(item, FItemList[index2]); // item に値をセット ListView.ItemFocused := item; ListView.ItemIndex := Index2; ListView.Items.EndUpdate;
2003-12-05 古い日記からの変換データ [長年日記] ▲
2003-12-07 古い日記からの変換データ [長年日記] ▲
2003-12-08 古い日記からの変換データ [長年日記] ▲
2003-12-09 古い日記からの変換データ [長年日記] ▲
_ Calendar ▲
hyCalendar,こんなところにも紹介されてたりして.中身は Vector に出した原稿のコピーっぽい.http://www.melma.com/mag/61/m00056861/a00000277.html
Vector サイトとパートナーシップでも結んで転載してるのだろうか.原稿の単純なコピーで付加情報がまったくないようなので,Vector のメールサービスのほうがよさそうに見えるのだが…….そのへんは好みなのかなぁ.http://www.vector.co.jp/magazine/softnews/mailnews/
_ 論文 ▲
久々に論文読み.
Johan Brichau, Wolfgang De Meuter, Kris De Volder:Jumping Aspects, Position paper at the workshop Aspects and Dimensions of Concerns, ECOOP 2000.
アスペクトを貼り付けるときに,・要素の追加(add)に対して状態変化を通知したいけど, add を何度も呼び出す addAll が使われたときは 状態変化の通知を1回だけにしたい・メソッドを synchronize させるけど, 既に(呼び出し経路上で)synchronize 済みの場合は synchronize したくないといったように,コンテキストに応じてアスペクトが実行されるかどうかを制御したい場合がある.現状では,プログラマが手でこのような記述をするしかないが,それでは「本当に表現したいことが何か」というのが見えてこないので困る.アスペクト指向プログラミング言語はこのような記述(呼び出し経路などに依存した処理)を可能にするべきである,というもの.
個人的には,かなり共感できる部分がある.reference リストに追加.
2003-12-10 古い日記からの変換データ [長年日記] ▲
_ AOSD ▲
Ramnivas Laddad によるリファクタリングの記事.http://www.theserverside.com/resources/articles/AspectOrientedRefactoringPart1/article.html
「メソッド呼び出しの抽出」として,クラス内のある特定タイミングでのメソッド呼び出しをアスペクトとして抽出する段階を説明している.・pointcut と空のアドバイスを作って, pointcut が正しい位置にくっついたことを AJDT などを使って確認する.・アドバイスの中にメソッドの中の横断的な部分を移す. declare warning を使って, 元のクラスに除去すべき部分が残ってないことを調べる.・pointcut 定義を整理する.・必要なら,アスペクトの定義を整理する.
declare warning を積極的に使うところがポイントかも.AspectJ 1.2 ではコンテキスト情報(どこで warning になったか)を使ったメッセージ生成ができるようになるらしいので,pointcut が完全に消えたかどうか,あるいは本当に望みの位置にかかっているかどうか,というのを調べるために活用できそう.
_ APSEC2003 ▲
これも論文発表者のスライドだけ.
Yuming Zhou, Lijie Wen, Jianmin Wang, and Yujian Chen:DRC: A Dependence Relationships Based Cohesion Measure for Classes.
クラスの凝集度を測るためのメトリクス提案.クラスのメンバー間での呼び出し・読み書き,データ依存するかどうかでのフィールド間の依存関係をとって,
各メンバーごとに,「依存関係をたどって到達可能なメンバーの数」を計算して平均をとる.値としては,メンバー間の依存関係が完全グラフ(どのメンバーも他のすべてのメンバーに依存する)となるときに1,逆に依存辺がまったくない場合に0となる.
凝集度のメトリクスとしては必ず計算可能であること,単調増加であること,といった要求があるが,Chidamber の LCOM,Briand の RCI,Chae の CBMC がそれぞれ不適切な値となるケースでも正しく振舞うことができる,と述べている.
_ APSEC2003 ▲
これまた論文ではなくスライドだけ見ている. Wei Zhao, Lu Zhang, Yin Liu, Jing Luo, Jiasu Sun: Understanding How the Requirements Are Implemented in Source Code. ソフトウェアの保守作業にかかるコストはライフサイクルの40%を占めると言われている.しかも,保守作業中に行われる,ソフトウェアの拡張や修正作業ではソフトウェア理解が,それぞれ 47%,62%を占める[Fjeldstad 83],あるいは半分以上を占めている [Corbi 89] という報告がある. そこで,要求ドキュメントの内容とソースコードの対応を自動的にとることができれば,機能に対応したコードを簡単に発見できて開発者のソフトウェア理解作業に役立てることができる,としている. 手法としては,要求ドキュメントの内容から抽出したソースコードから抽出した内容でマッチングを行って(ベクタ空間モデルを使うらしい)要求に対応したコードがどこか,その機能の中心はどのあたりかを探すというもの.最終的には完全性,正確性ともに60%くらいのところで最適値になっているので(完全性90%だと正確性10%程度),それなりに見つかるらしい. 引用している文献はそれぞれ,次の通り.(Fjeldstad 93) Application Program Maintenance Study: Report to Our Respondents. Proceedings GUIDE 48,Philadelphia, PA, April 1983. (Corbi 89) Program Understanding: Challenge for the 1990's. IBM Systems Journal, 28(2), pp.294-306, 1989.
_ APSEC2003 ▲
APSEC2003開催.出席してる先生から,参考になりそうな論文のメールが届いたので発表者のスライドをチェック.
ライブ映像も見ることができる.スライド映されても声聞こえないんですけど…….http://vwin.co.th/apsec/
Tao Qin, Lu Zhang, Zhiying Zhou, Dan Hao, Jiasu Sun: Discovering Use Cases from Source Code using the Branch-Reserved Call Graph.
ユースケース図は機能を把握するために便利だけれど,ドキュメントが常に最新に保たれているとは限らない(最悪失われている)ので,ソースコードから最新の状態を発見したい,というもの.
ソースコードから,分岐を残した状態の(if 文の骨格が残った状態の)コールグラフを作成して,関数ごとに作ったものを接続してやる.接続後,重要度(Importance Metric)を計算する.末端には初期値として適当な重みを与えておき,if による分岐なら分岐先の重要度の和,ただの順接しているブロックなら一番大きいものを取り出す,という形で計算していく.で,閾値で枝を刈ったあとに実行トレースを生成する.重要度の計算方法から,条件判定が大きな影響を与える if 文,粒度の大きい関数ほど残りやすいことになるので,その実行トレースはユースケースに近いものになると考えられる.おおざっぱな方法のわりに,そこそこの結果が出ているようで,面白い.
2003-12-15 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
APSEC2003 の proceedings を見せてもらったのだが,今回は,読みたいと思うものが少ない.
Jun Han and Ksze Kae Ker:Ensuring Compatible Interactions within Component-based Software Systems,Proceedings of APSEC 2003, pp.436-445 (2003).
インタフェース定義として Rich IDL を使って,それに加えてコンポーネントごとのメソッド呼び出し順序などの規定を記述する言語を追加している.たとえば COMPONENT Account { setupAccount BEFORE (deposit, withdraw);} といった感じ.で,この記述から eFSM を作って実行時にテストしてやろうというもの.
FSM で実現する場合,コンポーネントの「状態」が問題になるが,現実にはインタフェースには状態は現れてこないので,制御に関する条件のほうがユーザには分かりやすい,と言っている.
基本的に記述はあるコンポーネント単体に対して行う(他のコンポーネントに対する条件は限定的にしか記述できない).そのかわり,コンポーネント単体だけで適用できるようになっているので,すべてのコンポーネントに仕様を書かなくても,書いた場所だけチェックしてくれるので導入はしやすい.
_ 論文 ▲
メーリングリストに流れてたので拾ってみた.
Bruno Dufour, Christopher Goard, Laurie Hendren, Clark Verbrugge, Oege de Moor and Ganesh Sittampalam:Measuring the Dynamic Behaviour of AspectJ Programs.Sable Technical Report No. 2003-8 (2003).
AspectJ プログラムの動的メトリクスとして,従来から利用可能な
・実行時間
・実行されたバイトコードの命令数
・ロードされたバイトコードサイズ
・確保されたメモリ
に加えて,AspectJ 独自のメトリクスとして
・Tag Mix(実行されたバイトコードが,Javaコード,AspectJコード,CFlow の準備,アドバイスの実行条件のチェックなど,どの種類に属するかという比率を調べる)
・アドバイスの実行条件のテスト回数 (そのうち常に成功しているものや常に失敗しているものの割合)
・コードのカバレッジ(ロードされたうち実行されたバイトコードのサイズ)
を定義している.いくつかのアプリケーションを実行して,これらの値を計測しているのだが,cflow や args などがアスペクトのオーバーヘッドのかなりの割合を占めている様子.
これらはあくまでパフォーマンス上の話のことで,期待していたような実行時の複雑度の話とかではなかった.残念.
2003-12-17 古い日記からの変換データ [長年日記] ▲
2003-12-18 古い日記からの変換データ [長年日記] ▲
_ Delphi ▲
ドラッグ中のキーボード状態を取得するのには,KeyboardStateToShiftState というのを使えばいいらしい.VCL ヘルプに載ってないけど…….
CTRL が押されたら DragObject を継承して作ったCopy プロパティを ON にして,Copy プロパティが ON かどうかでドラッグ中のカーソルキーの値を返すようにgetDragCursor をオーバーライドしてみた.
カーソル自体も自作.影は付かないけど,Windows システムカーソルを手本にそれっぽいコピー時用のカーソルを作ってみた.[ツール]-[イメージエディタ]で書いてMYCURSOR CURSOR "ファイル名"const crMyCursor = 1;Screen[crMyCursor] := LoadCursor(hinstance, "MYCURSOR");とするだけ.けっこう簡単でいい.
2003-12-20 古い日記からの変換データ [長年日記] ▲
_ Delphi ▲
ツリービューにて,MouseDown でノードのドラッグ開始処理,DblClick でノードの値編集ダイアログを表示,としていたらダブルクリック操作したときは先に DblClick のメッセージが実行されて(MouseDown はキューに入れられて)ダイアログ表示→戻ってきたらドラッグ開始となってしまう.
普通は MouseUp でドラッグ終了するのだけど,DblClick でダイアログを表示するとダイアログが MouseDown を持っていってツリービュー側に MouseUp が届かなくなるみたい.今回はDblClick時にフラグをセットして回避することにした.
_ Calendar ▲
月曜始まりで表示する機能を実装してみる.元々,グリッドのセル単位で描画していたので,グリッドのセル座標から日付の対応付けを行う関数を修正して,逆に日付から座標を計算していた部分も関数としてくくりだして(一箇所しかなかったけど)修正するだけで無事終了.
実装の都合上,任意の日から週を開始することが可能なのだということが判明したけど,さすがに需要もないだろうし,余計なオプションが増えるのもうれしくないので,「カレンダーを月曜始まりにする」オプションだけを追加.
周期予定まわりのインタフェースを書き直しているのもあと少しで終わりそうだし,1月上旬には確実にリリースできそう.できればもう少し早めたいところではあるけど.
2003-12-22 古い日記からの変換データ [長年日記] ▲
_ AspectJ ▲
AspectJ に対する,厳しい意見.http://kumiki.c.u-tokyo.ac.jp/~ichiyama/mt/archives/000032.html
Aspect を「どう書くべきか」問題が解決するのはいつのことだろう.実用的な処理系ができてからまだ時間がそれほど経っていないことを考えると,まだまだ先は流そうだ.
特定クラスに依存したアスペクトも,パッケージ内部のローカルで使えばいいな,とか全部を横断しなくてもいいか,とか思ってしまうこのごろ.
まあ,クラス名を使いたくなかったらインタフェースを使うくらいしかないような気がする.今後,メソッドなどに付加するメタデータが出てくれば,もうちょっと楽に記述できるようになるかもしれない.
2003-12-23 古い日記からの変換データ [長年日記] ▲
_ AOSD2004 ▲
海外渡航助成金とかもらえることになっているのでワークショップかポスターセッションに出しましょう,ということになった.
ワークショップは時間的に微妙だけど,できれば出したいところ.ポスターでもないよりましだけど.
_ AOSD2004 ▲
論文の reject 通知到着.なんとなくイギリス開催なので9時間の時差で22日の夜中には着くだろうと思っていたら,主査(でいいのかな?)の人はアメリカの人だったのでもっと時差があった.
採択率18%(15/82)と,予想よりはるかに厳しい数字でびっくり.
それにしても,プログラムスライシング使ってるだけで「こんな技術誰も使ってないでしょ」とマイナス付けられてるのが印象的ではあった.将来的には実用的になったり……しなさそうではあるから言い返せない.使ってる本人ですら効果を疑ってるのはどうかと思うのだが,もっと開発者にとって "使いやすい" 技術でないと駄目なんじゃないかなぁ,という気はする.
2003-12-24 古い日記からの変換データ [長年日記] ▲
2003-12-25 古い日記からの変換データ [長年日記] ▲
_ 紅茶 ▲
記念品としていただいた W-N クリスマスティーを飲む.名前のとおり,クリスマスをテーマにしたキャラメル系の紅茶.
包装がとてもかわいらしい.写真
茶葉の外見的には,レピシエの "キャロル" などと違ってチップが入ったりしないので,控えめな印象.写真
しかし,何しろ一袋(5gくらい)しかない記念品.淹れるのに気を遣う.(後で気づいたが,2回に分けて淹れれば良かった)
茶葉が広がったほうがいいだろうという思い込みにしたがって,とりあえずティーバッグから出してしまう.お茶の葉の状態でもかなり香りが強いので,フレーバーティー苦手な人は駄目かも.お湯はカップ2杯分+α.この+αは実験用.写真
茶葉が開くまで3分くらい.わりと勘で.(写真は赤色ちょっと補正してみた)写真
愛用のティーセットを使って,ストレートティー,ミルクティーを淹れてみた.写真
ストレートティーは甘い香りの後に少しだけ渋味がくるので,悪くはないのだけど,2杯飲むには微妙かな?というところ.どっちかというとミルクティーのほうが後味がやわらかくてよい気がする.一緒にもらった "お勧め" レシピにはミルクを同量くらい入れると良い,と書いてあるけれど,今回は個人的な好みから,少しだけしか入れないことにした.
さて,あまった茶液で,さらに濃く出したミルクティーを作ってみた.濃く出したものは,ミルクを淹れないと,あまりの渋さ+微妙な甘さで非常に不味いことが発覚.でも,ミルクを茶液と同量くらい入れてみると渋味が意外と落ち着いてけっこういける.server-img:tea5.jpg 濃さ分かる?
結果としては,ミルクティーが,ほふふーとため息をつきたくなるような幸せ感があってなんとも良い感じ.もともとの記念品効果+クリスマスティーというコンセプトのおかげ?
2003-12-28 古い日記からの変換データ [長年日記] ▲
2003-12-29 古い日記からの変換データ [長年日記] ▲
_ AspectJ ▲
ライセンスまわりの話でリンク貼られていたので,よく見てみたら,バイナリ改変とソース改変の話が「コードの改変」というので紛らわしかったので修正.#こっちでやってるのは基本的に全部バイナリ改変の話.
2003-12-31 古い日記からの変換データ [長年日記] ▲
_ Collector ▲
Collector v2.2 -> v3.1 アップデートしてみた.あまり変わらないのだけど.
http://www.geocities.co.jp/SiliconValley-Cupertino/6494/collector.html