«前月 最新 翌月» 追記

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 などの延長に近い)が,実際に作った人っていうのはいなさそうなので楽しみではある.

_ Guevara

Guevara Terminal Emulator をインストール..NET Framework が必要だったので,バックアップを一式取ってから Framework をインストール.バックアップ取ったついでに Norton Internet Security を2004 に上げておいた.


2003-11-02 古い日記からの変換データ [長年日記]

_ 学祭

RPG研のOB会があるので,学祭に出かける.

今回の発見は,ジャムうどん.食べたのはイチゴ(マーマレードもあった).

外見はこんな感じ.梅肉と言われたらわからないかも?ジャムうどん写真

混ぜるとこんな感じ.果肉の部分は適度に分散したり沈殿してたりします.種が一見すると七味唐辛子とかに見えるかも.ジャムうどん写真2

まあ,ちゃんと売ってる当人たちも試食したことがあるみたいなのでOK(?).

5人ほどで食べた結果の感想は次のとおり.・甘い果肉とだし汁のミスマッチがひどい・かまぼこが最低・麺自体は普通に食べられる・ジャムのべたつき感がとろろ昆布を入れたときの感じに近い・においが微妙

まあ,なかなかチャレンジングな食べ物を販売していて「たいやきそば」以来の当たりかも.

_ 廃盤.net

廃盤になった曲を販売するなんてのがとうとう商売になってきたんだなーと感心.曲数が少ないから厳しい気はするけど,過去の曲が大量ダウンロードされるとは考えにくいので,サーバの負荷対策も新曲を扱うのに比べれば楽そうだし,過去の資産を無駄にしないという意味でも悪くないビジネスかもしれない.http://www.haiban.net/

_ Explzh

すっかり愛用になってしまった Explzh の4.00 がリリースされた.3.99 の次は 3.100 だと思っていたのに…….


2003-11-04 古い日記からの変換データ [長年日記]

_ Calendar

hyCalendar 0.4.6 リリース.ツールバーのオプションが保存されないバグを直した.

Vector に登録申請出した時点では 0.4.5 なんだけど…….登録されるより早くアップデートしてしまった.

_ 夏休み

来年度から 8/5~9/30 が夏休みになるらしい.たぶん,まったく関係しないが.

夏休み入るとすぐお盆になってしまうので,合宿とか研究室旅行とかを企画する人だけが大変そう.


2003-11-05 古い日記からの変換データ [長年日記]

_ 紅茶

ディコム100g とダージリン・ナムリン・セカンドフラッシュ50gを缶に補充.これでまた1ヶ月くらいもつか.

_ 論文

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 を潰したとしても引数の評価は行われてしまう,らしい.

副作用や,重たい処理を含んだ引数評価があるとはまりそう.

_ AJDT

AspectJ Development Tools の次のメジャーリリースへ向けての方針をどうしよう,というメールが aspectj-dev に投げられていた.

・プロジェクトの前の biuld との差分を参照できるようにしたい

・pointcut wizard の追加

などが新規に入るほか,AspectJEditor なども rewrite するっぽい.また,JDT と競合を避けるために.java には Java ソースだけを記述し.aj に AspectJ ソースを記述するといったことも行うらしい.AJDT 自身を AspectJ で書くっぽいので,その辺に少し期待.

_ ディジタル放送

ケーブルテレビのディジタル放送化の情報が届いていたことに今さら気づいた.

値段が微妙に上がってしまう上,どうせあと1年か2年しか住まないだろうし,ということで見送る方針.


2003-11-07 古い日記からの変換データ [長年日記]

_ 院ゼミ

ゼミ向けのアブストラクトの指導とかをする.先生がいないと大変だ.直した分をさらに人に見せて直してもらう.私自身もまだまだ書き方が甘いところがある.

_ Calendar

hyCalendar 0.5 を目指して作業.色の設定なんかは開発者の一存で決められないから,ユーザがカスタマイズ可能な項目がだんだん増えてきている.

_ IWPSE

別刷りが到着.封筒に入れてしまいこむだけだが.


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 上で行っている.

_ Calendar

hyCalendar 0.5.0 リリース.ようやく Undo をサポートした.そろそろ安定かな?

_ PenStyle

どうやら Windows のペンスタイル(点線など)は,24 ピクセル周期になっているみたい.……激しくプラットフォーム依存なコードを書いてしまった.

でもこれで複数のセルをまたいだときに点線の接続が変になるのを防ぐことができる.

_ Delphi

hyCalendar用に "太い点線" を使えるようにしたくてhttp://www.h2.dion.ne.jp/~landhere/delphi/graphics.htmにある StyleLine モジュールを取り込んでみたが,いまいち思ったように綺麗に出力できない.アルバイトでの図面描画で使ったときはけっこう役立ったのに今回のような小さな図形には適用しにくい.どうせ真横にしか線を引かないので,普通の幅1の線を並べて太い線に見せかけてみることにする.

_ 冷温庫

缶コーヒーなどをホットで飲みたいがために,部室に冷温庫導入.初期投資額は約1万円.みんなが素直に飲み物類を買ってくれれば飲み物に上乗せした金額でこの冬の間に回収できるかな?という程度.


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.

_ 論文

Anindya Banerjee, David A. Naumann:A Static Analysis for Instance-based Confinement in Java

Instance-based Confinement (alias 制御) を静的に解析するという論文.当然ながら,解析の正しさも示している.普通の alias 解析(どの変数が何を指す可能性があるか)よりはどの alias がパッケージ外まで到達しうるか,を調べているので多少簡単になったりするのだろうか?というところ.今のところは使う予定はないので読み流しておく.

_ 税金

保険料に対する所得控除の書類が JST から届く.でも RA は(どうせ額がたかが知れているので)出さなくていいらしいし,どうせ確定申告が必要になるので事務の人におまかせすることにする.


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 ファイル) の実際の適用例が載っているが,元々の辺の数が多いので,非常に図が見にくい.モジュール単位で分割されたときのパッケージ関係図を見せてくれればいいのだが…….

クラスタリングの結果が直観的であるか,有用であるかといった評価については少しあやしい.

_ Juan Gargiulo and Spiros Mancoridis:Gadget: A Tool for Extracting the Dynamic Structure of Java Programs

プロファイラを取って,その結果をグラフ上に可視化する.いちおうどのパッケージの内容を出力するかのフィルタリングだけは選択できる.また,Bunch のシステムを使ってクラス群のクラスタリングができるらしい.でも,登場クラス数が大きくなってくるとパフォーマンス上問題がある,と言っているが,それよりも理解容易性に問題があるような気はする.

_ 東京

12月21日(日)に東京行き決定.完全に私用で,日帰り予定.新幹線が取れればだけど.

IBM の人に東京来ることがあったら寄ってみてくれとか言われていたような気もするけど,日曜だとさすがに意味ないし,かといって泊まるのも微妙だ.


2003-11-15 古い日記からの変換データ [長年日記]

_ Windows Update

MS03-043 の XP 用パッチが出ていたので当てる.研究室のもリモートデスクトップで当てる.けっこう前のセキュリティホールなのになんでまた出てきたんだろう?Windows 2000 のほうは何も出てない.


2003-11-17 古い日記からの変換データ [長年日記]

_ Big Mac

バージニア工科大の構築したクラスタ.Mac で作ったから Big Mac なのは分かるけど,ニュースでわざわざ「愛称」って付いてるのはやっぱり商標だから?http://biztech.nikkeibp.co.jp/wcs/j/comp/276948

_ Eclipse

Eclipse 2.1 + AspectJ 1.1 環境に移行が終了.1.0.6 の頃から比べるとだいぶ環境が洗練されてきた感がある.

_ 情報処理

OO2003 のレポートのところに論文賞もらったというので名前が載ってた.


2003-11-18 古い日記からの変換データ [長年日記]

_ Adobe

Acrobat Developer Workshop in Osaka ということでAcrobat SDK の使い方の説明とかがあるらしいのだが,肝心の SDK は,Adobe Solutions Network に加入していない人は最小限の情報しかダウンロードできないらしい.日本語ドキュメントも有料.値段は25800円.ちょっと微妙ではある.


2003-11-20 古い日記からの変換データ [長年日記]

_ XDoclet

実は XDoclet in Action なんて本が出てるらしい.さすが in Action のシリーズというべきか.でも値段が高いので放置.

_ XDoclet

とりあえず XDoclet でコードジェネレートしてみようとしたのだが,xdt を書くためのドキュメントがあまりない.とりあえず EJB 用のを発見したので,これを参考にしてみる.http://www.developer.com/java/ejb/article.php/3102481

結局,クラス名やメソッド名などを参照できるテンプレートというところなんだろうけど.

_ パスワード

UFJ Direct, 東芝 Room 1048, と扱うパスワードがまたも増えた.Room 1048 は東芝の電気製品のユーザ登録がまとめてできて,製品を複数買ってる人はポイントが多くもらえてプレゼント応募みたいなことができるらしい.メーカー側がやるのは珍しい気がする.

_ Calendar

hyCalendar 0.5.1 リリース.だいぶ機能追加リストも片付いてきた.

_ Adobe

Acrobat Developer Workshop の日程が研究室の予定と重ならないことを先生に確認して申し込み.とりあえず話だけ聞いてみる方針.


2003-11-21 古い日記からの変換データ [長年日記]

_ ワイン

ルイ・ジャド,ジョセフ・ドルーアンのボジョレー・ヌーボーを飲む.

ジョセフ・ドルーアンのほうが酸味が強くて好み.ちょっと渋すぎの気もするけど.

でも人によってけっこう好みは分かれた.

_ LotR

The Lord of the Rings ルール等10/22 のアップデートを確認.エラッタ・Elven-steed に Ride (Keep Rider) +6 が加わった.微妙.FAQ・「最大ダメージ」の効果が二つあっても効果は変化なし. (GMが認めるなら Extraordinary Success の他の選択肢を 選んでも良い)・「応急手当」は1戦闘あるいは負傷ごとに 1回しかできない.ルールもそろそろ安定してきた感がある.

_ Calendar

Vector に紹介記事が掲載されるとのことで,作者からの一言を書いてほしいというのが届いた.200字程度なので,締め切り早いし,さっさと書くことにする.

_ ワイン

ボジョレー・ヴィラージュ・ヌーヴォーを飲む.去年のに比べて美味しい.

フランク・サンカン家自家葡萄園のもの.作者の写真が載ってる裏のラベルが微妙に素敵.


2003-11-22 古い日記からの変換データ [長年日記]

_ ワイン

ジャック・デパニューのボジョレー・ヌーボーを飲んだ.けっこう香りが強くて渋い.ボジョレーってライトボディじゃなかったっけ?美味しいからいいんだけど.この分だと,フルボディと言われているワインがどうなってるか楽しみ.

_ Delphi

Deskbar のサンプルを読んでいたら,Delphi は Shift+CTRL+G で GUID 生成できると書いてあった.微妙な機能だ.

_ Delphi

Delphi から IDeskBand を叩くためのソースを公開しているところを発見.http://www.euromind.com/iedelphi/ie5tools/bandobjects.htm

TDelphiBand とかクラスになってる.すごい :-)

_ IDeskBand

デスクバーとして常駐するアプリケーションを作るにはIDeskBand を実装しておけばいいらしい.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/Shell/programmersguide/shell_adv/bands.asp


2003-11-23 古い日記からの変換データ [長年日記]

_ ゲーム

エッガーランド迷宮の復活クリア.

一部,ヒントの意味が分からなかったところは攻略サイトのおかげ.http://www.aa.alpha-net.ne.jp/nobusuma/eggerkouryaku.html

最後で違うゲームになるというあたりがひどいが :-)


2003-11-24 古い日記からの変換データ [長年日記]

_ AspectJ

AspectJ 1.1 のパーサジェネレータ用文法定義がないかなぁと思って調べていたら,FAQ に「ワイルドカードなどの特殊なものを扱う都合上パーサジェネレータ使わずに自前で実装してるよ」と書いてあった.http://dev.eclipse.org/viewcvs/indextech.cgi/aspectj-home/doc/faq.html?rev=1.2

ということは,AspectJ コード中に情報を埋め込んでおいて解析するには・コメントなどにして,文法を無視できるような構造にする,・AspectJ コンパイラを改造する,の2択となるらしい.

_ かばん

B5 ノート用バッグを新調.ノートPCよりも関係ない小物を入れることのほうが多いのだが.軽くて必要最小限の大きさで肩からかける,という微妙な基準によって選んだ.

_ 新幹線

12/21 の新幹線の切符を取る.とりあえず何も考えず通路側.

_ ワイン

ボジョレー・ヌーボーをさらに飲んだ.やっぱりライトボディっぽいものもあった.

好みで順序付けするとジョセフ・ドルーアン,フランク・サンカンあたりが上位.


2003-11-25 古い日記からの変換データ [長年日記]

_ Calendar

ベクターで公開中の hyCalendar の記事は11/26 の朝8時頃に公開予定だそうな.

http://www.vector.co.jp/magazine/softnews/031126/n0311264.html

_ IPSJ

情報処理学会の全国大会の締め切りが金曜日.学生セッションにM1の人とかを出すことに決定.学生セッションのほうが時間が短い.でもセッションごとの表彰があるらしい.

それにしても,全国大会は資格不問で別に学会に所属してなくてもいいらしい.ちょっと値段高くなるみたいだけど.

_ 日記

実装するのはそれほど難しくないような気がしてきたので,コメント追加機能を付けようかなぁ,と悩む.

こんなことばかりしてるから研究進まないのかも.


2003-11-26 古い日記からの変換データ [長年日記]

_ 日記CGI

複数行コメントに対応させるべく作業開始.

_ rain book

曲がそこそこ気に入っていたり.http://www.therainbook.com/

ふと思ったのだが,作曲の人がグラディウスII NES版 の作曲者と同名だ.だからといって何もないんだけど.

_ クイズ

UML に関するクイズをやっていたので入力してみたら,「この設問は受付終了しています」と出てしまった.また後で試してみることにする.

http://itpro.nikkeibp.co.jp/free/NIP/ITBASIC/20031121/1/


2003-11-28 古い日記からの変換データ [長年日記]

_ Adobe

Adobe Acrobat Developer Workshop in Osaka はAcrobat で PDF にスクリプト埋め込んだりプラグイン作ったりという話だった.

意図して作った PDF をいじるだけならわりと簡単そうで,今のところそういう要求はないが,PDF に直接記入されたデータに対して計算を行って結果を PDF 上に出力できることを考えると,それなりに遊べそうなツールではある.

一番びっくりしたのは,検索機能が Acrobat 6 から複数ファイルから探せるようになっていたことだけど.pdftotext を通してから grep かけるなんてことはしなくてよかったらしい.

ちなみに,アンケートに答えたら Adobe ロゴ入りペンケース&ペンをもらえた.

_ hyCalendar

拡大率の保存機能の実装が終了して,不連続な予定の管理も着々と実装中.

Download ASCII の方から,掲載していいだろうかという連絡をいただいた.とりあえず承諾の方向.