netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2003-11-01 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
軽く読み流した論文2本.
Marek Majkut, Bogdan Franczyk:Generation of Implementations for the Model Driven Architecturewith Syntactic Unit Trees
Syntactic Unit Trees というのは,ソースコード片などをノードとするようなツリーのこと.ノードいくつかで上位のノードを構成する.XVCL などが近い.
MDA でソースコードを生成するとき,プラットフォーム依存/非依存モデルに適当な情報を加えてツリーノードに対応付けることでソース生成するというもの.他のテンプレートやフレームといった手法よりは簡単である,と筆者らは主張している.
David Oglesby, Kirk Schloegel, Eric Engstrom:Cross-aspect Queries and Dynamic Views for Model-based Development
モデル図が複雑になってきた場合に,クエリーを発行してフィルタした「Dynamic view」を作って図を分割しよう,という話.例として,オブジェクト名と接続関係に対するパターンマッチを使っている.たとえば "Sensor" と "Timer" の両方が絡むのは,とかいったクエリーになる.これ自体は特別新しい試みではないような気がする(grep などの延長に近い)が,実際に作った人っていうのはいなさそうなので楽しみではある.
2003-11-02 古い日記からの変換データ [長年日記] ▲
_ 学祭 ▲
RPG研のOB会があるので,学祭に出かける.
今回の発見は,ジャムうどん.食べたのはイチゴ(マーマレードもあった).
外見はこんな感じ.梅肉と言われたらわからないかも?ジャムうどん写真
混ぜるとこんな感じ.果肉の部分は適度に分散したり沈殿してたりします.種が一見すると七味唐辛子とかに見えるかも.ジャムうどん写真2
まあ,ちゃんと売ってる当人たちも試食したことがあるみたいなのでOK(?).
5人ほどで食べた結果の感想は次のとおり.・甘い果肉とだし汁のミスマッチがひどい・かまぼこが最低・麺自体は普通に食べられる・ジャムのべたつき感がとろろ昆布を入れたときの感じに近い・においが微妙
まあ,なかなかチャレンジングな食べ物を販売していて「たいやきそば」以来の当たりかも.
2003-11-04 古い日記からの変換データ [長年日記] ▲
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 を潰したとしても引数の評価は行われてしまう,らしい.
副作用や,重たい処理を含んだ引数評価があるとはまりそう.
2003-11-08 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
OOPSLA2003から.
Bruno Dufour, Karel Driesen, Laurie Handren and Clark Verbrugge:Dynamic Metrics for Java
Java 用の動的メトリクスの話.
動的メトリクスでは,次のような要求がある.
・あいまいでないこと.LOC などは,空行やコメントを数えるのか,といった点であいまいである.
・実行時にしか取れない情報を表現していること.
・プログラムの振る舞いの変化が小さいならメトリクスの変化も小さく,変化が大きいならメトリクスの変化も大きいことが望ましい.
・異なるプラットフォーム上でも変化しないこと.
また,メトリクスの種類としては,次のようなものがある.
・数値.
・パーセンテージ.
・Bins (「1回,2回,3回以上」といった区分に振り分けること)
で,色々なメトリクスをカテゴリに区分していて,size, structure, memory, polymorphism, data の五つで,ベンチマークごとにどのような値を出したか,最適化がどのような影響を与えたか,といったことを議論している.
JVMPI を使って計測フレームワークを実装していた.そのうち,動的メトリクスを計る場合は役立つかも?
_ 論文 ▲
OOPSLA2003 の論文を読む.portal.acm.org で Proceedings と Companions (Poster, Panel など) が両方ともOOPSLA'03 という名前で出ていたせいで発見が遅れた.
Tian Zhao, Jens Palsberg, Jan Vitek:Lightweight Confinement for Featherweight Java
Confinment とは,あるパッケージの内部だけで使用されて,外側からはアクセスされることのないオブジェクトのこと."this" を引数として渡さないこと,public なフィールドとして宣言されていないこと,などが条件となる.コレクションクラスなど,親クラスにキャストされてしまう問題を無視するならかなりの数が confined になるらしい(この特性をGeneric confined と呼んでいる).型推論とかでできるだけ決定していく,というのをGeneric Featherweight Java 上で行っている.
_ PenStyle ▲
どうやら Windows のペンスタイル(点線など)は,24 ピクセル周期になっているみたい.……激しくプラットフォーム依存なコードを書いてしまった.
でもこれで複数のセルをまたいだときに点線の接続が変になるのを防ぐことができる.
2003-11-09 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
Frank Tip, Adam Kiezun, Dirk Baumer:Refactoring for Generalization using Type ConstraintsProceedings of OOPSLA 2003, pp.13-26
「インタフェースの抽出」リファクタリングを行ったときに,どの変数を,抽出されたインタフェースの型に直したらよいか,あるいはどのメソッドをそのインタフェースに引き上げるかといった決定をするために型制約を使うというもの.
具体的には,オブジェクト参照,戻り値,代入などからA <: B (A is-a B) 関係を決定していって,メソッドを引き上げた場合などにそれが違反されるので引き上げできない,といったことを調べることができる.
ただし,これらの型による制約とは別に,クラスやメンバーの可視性やオーバーロードの発生など考慮すべき要素はあるらしい.
どこまで作業を支援できるのか,というと微妙だが,型制約を調べるだけでもだいぶ助かりそうな気はする.
_ 論文 ▲
微妙に Constraints 関係で拾ってしまったので読んでみる.
Bjorn N. Freeman-BensonKaleidoscope: Mixing Objects, Constraints, and Imperative Programming.Proceedings of ECOOP/OOPSLA '90, pp.77-88
クラス定義にinitially ブロック中に初期の制約を書いたり,assert ... during ... といった微妙な制約が書ける.ただし,使いにくそうだけど.やっぱり記述がプログラムを書くときに直観的に書けそうなものでないと実際に言語として採用されることはないのかなぁ.
_ 論文 ▲
Manuel Fahndrich, K. Rustan M. Leino:Declaring and Checking Non-null Types in an Object-Oriented LanguageProceedings of OOPSLA 2003, pp.302-312
型 T の変数を,null 参照になることがないもの T- とnull 参照をする可能性がある T+ に区分して,
f.foo(); といった呼び出しがあるなら f は T- でなければならない,T- から T+ への代入は OK だが逆は危険,といった制約を型システム上で調べる.
また,コンストラクタなどの,未初期化フィールドが存在している可能性を T_raw とし,T_raw は初期化されたことを調べない限り(ASSERT_INIT を通さない限り)T へ代入できない,参照渡しや Generics,static class fields の扱いについても特別な処置が必要,といったことが議論されている.
コード上では型名の前に [Non-null] といった記述を付加することで簡単に示すことができ,フィールドの値が null でないことといったpre/post condition や,段階的な初期化などをするときに起こる「null が入っているかもしれない」問題に対処できる.
オブジェクト指向言語上でこういうことをやっている人というのは,実はいなかったらしい.
ちなみに,あるオブジェクトへのアクセスを独占しているかどうかをチェックするというのが次の文献にもあるらしい.Robert Fitzgerald, Todd B. Knoblock, Erik Ruf, Bjarne Steensgaard, and David Tarditi. Marmot:An optimizing compiler for Java, Software-Practice and Experience, 30(3), 2000.
_ 論文 ▲
Brian Demsky, Martin Rinard:Automatic Detection and Repair of Errors in Data Structures,Proceedings of OOPSLA 2003, pp.78-95
データ構造の制約を宣言的に記述しておいて,エラーが発生した場合は修復ルーチンを起動する,というような話.主にファイルシステムなど,何らかの原因で壊れる可能性があり,壊れたからといってシステムを止めるわけにはいかないものが主体.どちらかというと耐障害性系の話か.いちおう related work として assertion などの話も出ていて,状態チェックには自動生成したassertion と例外ハンドラを使いたい,みたいなことを言っている.
とりあえず,あまり関係なかったので読み流しておく.
_ 論文 ▲
Darko Marinov, Robert O'Callahan:OBject Equality ProfilingProceedings of OOPSLA 2003, pp.313-325
メモリ効率化のために,複数の同一状態のオブジェクトを同一に差し替える (merge する)というもの.そのためにいったん profiling をする必要がある.
オブジェクトがマージ可能であるには,二つのオブジェクトが・同一クラスのインスタンスで,・各フィールドの値が同じで,・参照しているオブジェクトがマージ可能で,・将来変更されることがなく,・オブジェクトの同一性が利用(identityHashCode 計算や == 比較) されないこと.
そして,オブジェクトが共有されている数と時間の積をmergeability と呼んで,最適化の度合いを表現するメトリクスとする.
モノによっては30~40%程度のメモリ空間を節約できるような場合もあるらしい.
・profiling 結果は実行系列に依存するので安全性にちょっと不安・プロファイラのコストがけっこう高い (実行が16秒程度のプログラムで30分近くかかったり, 30MB程度のメモリが1GB近くまで膨れたりする)というあたりは少し厳しいが,パフォーマンスクリティカルな場面なら使えるかも?
_ 論文 ▲
Dave Clarke, Michael Richmond, James Noble:Saving the World from Bad Beans:Devployment-Time Confinement Checking,Proceedings of OOPSLA 2003, pp.374-387
this 参照を直接返したりして EJB のコンテナの働きをバイパスしようとする Bean をどうにかして捕まえよう,ということで Confined Type のアイディアを使って Bean が confined であることを調べる.
定義上,confined なものと unconfined なものが行き来したりはしない,といったことを調べるわけだが,Deployment のタイミングで調べるというあたりがEJB ならでは,と言えるかも.
実は confined type に関する研究って流行ってる?
参考文献として,次の文献が挙がっていた.Confined Types in Javahttp://www.cs.purdue.edu/homes/jv/pubs/spe00-1.pdf
2003-11-10 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
Joao Costa Seco, and Luis Caires:A Basic Model of Typed Components
コンポーネント主体の Java 拡張言語 ComponentJ を提案している.
component C is compose { provides IQueue q; // インタフェースを定義 requires IList list; meth mq { void enQueue() ... } plug mq into q;}といった感じ.通常のクラスはコンポーネント内部のローカルオブジェクトとしてしか利用できない.で,インタフェース間の接続時に,型の整合性チェックを行うことで型安全なコンポーネント利用ができるらしい.
コンポーネントのインスタンスはグローバルな singleton なのか,とか一つのコンポーネントを共用可能なのか,とか気になるところはいくつかある.
_ 論文 ▲
Jan Vitek, and Boris Bokowski:Confined Types in Java, Software Practice and Experience, 2000
Confined Class == 外部パッケージからは動的にも静的にもアクセス不可能なクラスAnonymous Method == this 参照を他の anonymous メソッドや自身のフィールドアクセス以外に使わないメソッド
というようにして,このルールが守られないのならエラーを出すというもの.通常のアクセス権設定の private/protected/public や,チェック漏れの可能性がある動的チェックでは十分ではないので,セキュリティ上の目的で導入している.
java.util や java.awt などのクラスの8割か9割くらいは最初から confined らしい.そうでないものも,気をつけて書けば簡単に confined になるらしい.
JVM や native メソッド等からアクセスされる可能性があるため,Throwable や Thread のサブクラス,public や protected で宣言されたメンバ変数の型はconfined ではない,としている.
_ 実際にはパッケージ単位だけでは不便なのでドメイン宣言というパッケージやクラス群をまとめた「ドメイン」内で confine を定義するなんていうことも考えているらしい. ▲
関連研究としては,外部からの参照を許さないオブジェクトのエイリアスの制御などがある.
利用例として,RSA 暗号において,乱数の値,秘密鍵ファクトリ,秘密鍵が Confined になるらしい.
_ 論文 ▲
Johan Brichau, Kim Mens, Kris De Volder:Building Composable Aspect-specific Languageswith Logic Metaprogramming,Proceedings of GPCE 2002
アスペクトの weaving を,論理型言語で記述した述語を使ってbefore(m, c) -- メソッド m の前にコード c を実行といった記述を書いて,アスペクトを合成する Combination Module とアスペクト間を連動させる Interaction Module を使ってアスペクトの組み合わせを構築した上で Weaver に与える.
Accidental に影響が出るようなことがないのなら,これで大丈夫だという気はする.アスペクトの合成が正しいかどうか,というところで検証系などとの組み合わせが必要になるのかもしれない.
_ 論文 ▲
Eric Allen, Jonathan Bannet, Robert Cartwright:A First-Class Approach to Genericity
C++ の mixin はマクロ同様にコード展開してから型チェック処理が行われるので本来の mixin 型の意味が失われてしまう.それを何とかしよう,ちゃんとルールを定義しましょう,というもの.今まで実はそういう研究はなかったのね,とちょっと驚いた.
_ 論文 ▲
John Corwin, David F. Bacon, David Grove, Chet Murthy:MJ: A Rational Module System for Java and its ApplicationsProceedings of OOPSLA 2003, pp.241-254
Java にはモジュール機構がないので,クラスパスの管理が大変.ライブラリ間の依存関係なども考慮しなければならないという問題に対して,module を明示的に定義して VM に与えることで管理してやろうというもの.import, export, seal, unseal, hide といったスコープ操作用の言語を作っている.アプリケーションのコンフィギュレーションを作ってしまえばそれを起動できたりするのでけっこうえらいかも?
_ 論文 ▲
Keunwoo Lee, Anthony LaMarca, and Craig Chambers:HydroJ: Object-Oriented Pattern Matching for Evolvable Distributed Systems
メッセージを処理する Service クラスを,従来ならメッセージループを自前で構成するところでpublic service class Foo { handler MSG_1 return void { ... } handler MSG_2 return int { ... }}といった感じで,各メッセージの処理を独立して記述できる.handler が反応するメッセージについては,semi-structured value というML における引数のパターンマッチみたいなのを導入している.
最近は EJB サーバみたいなのが働いてくれるわけだし,分散アプリケーションがこういう言語仕様の拡張でどの程度書きやすくなるかは疑問ではある.
_ 論文 ▲
Todd Millstein, Mark Reay, and Craig Chambers:Relaxed MultiJava:Balancing Extensibility and Modular TypecheckingProceedings of OOPSLA 2003, pp.224-240
AspectJ などで使える inter-type declaration 的なメソッド宣言と,特定の引数に対してメソッド実装を特化することができるmultimethod 定義が使える Java の拡張言語.モジュールごとの型チェックが特徴らしい.Multimethod は便利そうだけど,これもまた落とし穴になりそうな気はする.
_ 論文 ▲
Donal Lafferty, Vinny Cahill:Language-Independent Aspect-Oriented ProgrammingProceedings of OOPSLA 2003, pp.1-12
Weave.NET という CLI 上で使う AOP の実装.使っている Join Point Model などは AspectJ ベースで,アスペクトとして,XML による結合規則を記述して,対象コンポーネントをクラス(.NET Assembly)に接続する.コンポーネントとアスペクトをまったく別に記述するので特定言語に依存しない.
# やったらできそう,という意味ではあまり面白くないかも.
_ 論文 ▲
Bil Lewis, Mireille Ducass\acute{e}:Using Events to Debug Java Programs Backwards in Time.Companion of OOPSLA 2003, pp.96-97
プログラム実行情報を全部保存してしまって後戻り可能なデバッグをすれば楽なんじゃないか,ということでツールを作っているらしい.http://www.lambdacs.com/debugger/debugger.htmlから AADEBUG (International Workshop on Automated Debugging, 2003) の論文が取れたので見てみると,値がおかしくなったところで逆戻りして原因を捕まえるとかいうスライシングなどと同様の考えをしている.また,メソッド実行トレースや変数などから実行時点を探すといったこともできるようにしている.
しかし,Dynamic slicing よりも情報保存量は大きいはず,と思っていたら,実験では,0.1μsごとにイベントを取ったら20秒で2GBのアドレス空間がいっぱいになったとか,でも 64bits アドレスなら大丈夫だとかいう記述があった.物理メモリ量でごり押ししないと使い物にならないような気がする.いちおう動くものは作ってるらしいのだが.
_ 論文 ▲
Cristina Videira Lopes, Paul Dourish, David H. Lorenz, Larl Lieberherr:Beyond AOP: Toward Naturalistic Programming.Companion of OOPSLA 2003, pp.198-207
アスペクト指向とは何なのか,自然言語の役割はどこにあるのか,「アイディアをより自然な形で表現する」にはどうしたらよいのか,といったことを議論しましょう,という論文.
AOP の魅力的なところは何か,ということで,トレースの例を挙げている.今までは,「すべてのメソッドの先頭で Trace.in を呼んで最後に Trace.out を呼ぼう」と考えることはできても,そのために「メソッドAの先頭で,...,メソッドBの先頭で,...」と記述することしかできなかったが,AspectJ では「すべてのメソッドの実行の前と後で,...」という,より自然な表現で記述することができるようになった点にあるとしている.
アスペクトの役割を,アプリケーションを本にたとえるなら,オブジェクトの中で起こっていることを別の章に分けて書いておくとより簡単に説明が済んで,管理も楽になる,ということである.
AOP とリフレクションには深い関係がある.リフレクションを使って AOP を実装することが可能.しかし,通常のリフレクションはプログラム構造がベースで,Aspectual reflection は Join Points という実行上の時間要素がベースになっている(これは AOSD2003 の論文で述べていたことと同じ).
Stream の Encoding の例を挙げて,「書きたいやり方」はこうだ,と書いている.
encodeStream(InputStream in, OutputStream out) { while there is data in in: read the first N bytes from it; perform encodeDuration on those bytes and write the result into out. if, however, after reading the input, the number of bytes read is less than N, then, before continuing, patch the resulting byte array of size N with zeros. }
プログラミング言語の特性は,何をどのようにプログラムから参照できるかにあり,Temporal Logic Programming は時間情報を,Functional Programming は関数と変数を,操作する.言語を設計する場合には,これが重要な決定となる.
_ 論文 ▲
Tanter et al.: Partial Behavioral Reflection:Spatial and Temporal Selectin of Reification. Proceedings of OOPSLA 2003 の続き.
Reflection は,計算処理のメタレベル視点を取るので解空間上で問題を考える solution-oriented アプローチであり,AOP は,問題を的確に表現する Domain-Specific なものを考えていることからproblem-oriented なアプローチである.しかし,アスペクト間のインタラクションなどの扱いが難しいのがAOP の欠点である,とも指摘している.Runtime AOP は Partial behavioral reflection のサブセットで,Reflection の機能をより使いやすく提供しているもの,と位置づけている.
Reflective アプローチも複数の言語をサポートすることができるらしい.Aspect-Oriented Logic Meta Programming をその例として挙げている.
_ 論文 ▲
\acute{E}ric Tanter, Jacques Noy\acute{e}, Denis Caromel, Pierre Cointe:Partial Behavioral Reflection:Spatial and Temporal Selection of ReflectionProceedings of OOPSLA 2003, pp.27-46
いわゆる Reflection でも,完全なセットを用意するとオーバーヘッドが大きくなる問題があるので,部分的な reflection で必要なところだけ引っ掛けるようにしたい.
空間的な選択肢として,次のようなものがある.
・対象となるエンティティ(特定のクラス,あるいは特定のインスタンスを選択)
・対象となる操作(メソッド呼び出しやフィールドアクセスなどのうちどれを使うか)
・操作間の関係(ある特定メソッドからの呼び出し,などに限定する)
時間的な選択として,オブジェクトのライフサイクルの特定の期間だけreflection を有効にするという方法がある.(空のメタオブジェクトよりは,reflection を無効にしたほうがコストが安いとする)
通常はクラスごとあるいはインスタンスごとのメタオブジェクトを作るが,この論文では,hoolsets を使う.これは AOP における Join points のようなもので,これを介して一つのインスタンスに複数のメタオブジェクトをくっつけることができる.
実装としては,
・クラスロード時にバイトコードを変形する.
・ClassSelector, OperationSelector, Active で対象となるエンティティ・操作・期間を選択する処理を定義する.
・Hooksets は上記のオブジェクトなどによって定義される.XML で,どの ClassSelector や Operation Selector を Hookset に関連付けておくかを定義し,さらに Hookset にメタオブジェクトを関連付ける.
実行時にコントロールできるあたりは,Event-based AOP などに近いかもしれない.
_ 論文 ▲
Phipippe Mougin, St\acute{e}phane Ducasse:OOPAL: Integrating Array Programming in Object-Oriented Programming.Proceedings of OOPSLA 2003, pp.65-77
配列操作を言語レベルの演算子にしてしまおう,というもの.ただし,配列操作といっても,オブジェクト指向なので任意のメッセージを配列の各要素に適用する,というものになっている.
Ruby 的に言うなら array.collect { |obj| ... } などに相当するが,これを繰り返し処理などを意識せずに使えるようにする.
提案している記法は @ を利用している.
(1) obj method @ array
(2) array @ method args
(3) array1 @ method @ array2
(1) は, array に入っている各要素について,それを引数として obj.method を呼ぶ.
(2) は,array に入っている各要素に対して,args を引数にして method を呼び出す.
(3) は,array1 と array2 のすべての組み合わせに対してmethod を呼び出す.また,Reduction としてバックスラッシュを使って配列のすべての要素の和や最大・最小といった要素をあらわせる.
{1, 2, 3} @ + 10 => {11, 12, 13}
{1, 2, 3} @ + @ {10, 20, 30} => {11, 22, 33}
{1, 2, 3} \#+ => 6
Employees (salary > 3000) \#+ => salary が3000より上の従業員の数
実際には配列以外の任意のコレクションが扱えるようになるとかなり強力な記法になりうる.
あったら迷わず使いそうだが,なんだか危険なにおいもする.配列の結合演算と各要素の加算を間違ったりすると悲惨そうだ.
2003-11-12 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
Ralph Keller and Urs Holzle:Binary Component Adaptation, ECOOP 1998
Java のクラスロード時に,class delta という差分情報を読み込んでクラス定義を書き換えてやろうというもの.例として購入したコンポーネントが微妙にインタフェースが合わなくて……というのが挙がっているが,バイナリ改変可能なライセンスでないと難しかったりする.AspectJ なんかでも言われる問題だが,将来的にはクラスロード時のバイナリ改変は OK みたいなライセンスが出るんだろうか?
使える改造方法は,名前の変更,新しいものの追加.メソッドやフィールドが単位なので,名前の変更などは微妙にアスペクトより強いがメソッドの中身の呼び出し文などに関与できないあたりで弱い,という微妙な立場.
コンポーネントが更新されて同じ名前のメソッドが追加されたときのあいまいさが生じるのでロード時にチェックするらしい.
_ 論文 ▲
Anindya Banerjee, David A. Naumann:Ownership: transfer, sharing, and encapsulation
オブジェクトの所有権についての問題を扱った論文.<所有者>以外は実装の詳細にアクセスできないようにする(実装の詳細はすべて confined )という話.また,所有権を共有する場合にはどうするか,と簡単に説明してある short paper.
2003-11-14 古い日記からの変換データ [長年日記] ▲
_ PBL ▲
基礎工情報1年の PBL インタビューのお願いが届く.でも団体名間違ってるしフリーメールのアドレス使ってるしFrom に名前書いてないし微妙にメールの構成もあやしい.……しかも面倒見てるのうちの研究室らしいし :-)
_ 論文 ▲
プロファイル結果に登場したクラスを動作するかたまりごとに分類する方法とかないかなぁ,とか色々調べていたが,あまり良さそうなものは見つからなかった.とりあえず,モジュールのクラスタリングの論文だけメモ.
S. Mancoridis, B.S. Mitchell, Y. Chen, E.R. Gansner:Bunch: A Clustering Tool for the Recovery and Maintenance of Software Systems Structures
モジュール内部結合度 = モジュール内ノード接続辺数 / (モジュール内ノード数)^2モジュール外部結合度 = モジュール間ノード接続辺数 / 2 x (モジュールi のノード数) x (モジュール j ノード数)
モジュール品質 = 内部結合度の平均 - 外部結合度の平均 としたときのモジュール品質が最大になるようなモジュール分割を決定するという話.
モジュール(.c ファイル) の実際の適用例が載っているが,元々の辺の数が多いので,非常に図が見にくい.モジュール単位で分割されたときのパッケージ関係図を見せてくれればいいのだが…….
クラスタリングの結果が直観的であるか,有用であるかといった評価については少しあやしい.
2003-11-17 古い日記からの変換データ [長年日記] ▲
2003-11-20 古い日記からの変換データ [長年日記] ▲
_ XDoclet ▲
とりあえず XDoclet でコードジェネレートしてみようとしたのだが,xdt を書くためのドキュメントがあまりない.とりあえず EJB 用のを発見したので,これを参考にしてみる.http://www.developer.com/java/ejb/article.php/3102481
結局,クラス名やメソッド名などを参照できるテンプレートというところなんだろうけど.
2003-11-21 古い日記からの変換データ [長年日記] ▲
2003-11-22 古い日記からの変換データ [長年日記] ▲
_ ワイン ▲
ジャック・デパニューのボジョレー・ヌーボーを飲んだ.けっこう香りが強くて渋い.ボジョレーってライトボディじゃなかったっけ?美味しいからいいんだけど.この分だと,フルボディと言われているワインがどうなってるか楽しみ.
2003-11-24 古い日記からの変換データ [長年日記] ▲
2003-11-25 古い日記からの変換データ [長年日記] ▲
_ Calendar ▲
ベクターで公開中の hyCalendar の記事は11/26 の朝8時頃に公開予定だそうな.
http://www.vector.co.jp/magazine/softnews/031126/n0311264.html
2003-11-26 古い日記からの変換データ [長年日記] ▲
2003-11-28 古い日記からの変換データ [長年日記] ▲
_ Adobe ▲
Adobe Acrobat Developer Workshop in Osaka はAcrobat で PDF にスクリプト埋め込んだりプラグイン作ったりという話だった.
意図して作った PDF をいじるだけならわりと簡単そうで,今のところそういう要求はないが,PDF に直接記入されたデータに対して計算を行って結果を PDF 上に出力できることを考えると,それなりに遊べそうなツールではある.
一番びっくりしたのは,検索機能が Acrobat 6 から複数ファイルから探せるようになっていたことだけど.pdftotext を通してから grep かけるなんてことはしなくてよかったらしい.
ちなみに,アンケートに答えたら Adobe ロゴ入りペンケース&ペンをもらえた.