netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2002-10-01 古い日記からの変換データ [長年日記] ▲
_ 読書 ▲
「紅茶の辞典」「魔法のお店」「魔幻境綺譚」を読み終え.
「紅茶の辞典」は作った人の紅茶への思い入れが分かる.残り二つは,以前も読んだことがあるものだけど.魔幻境綺譚のほうはその悲しいエンディングがちょっと好みだったりしてつい何度も読み返してしまう.
_ 論文 ▲
ASE2002 開催の Workshop on Declarative Metaprogramming (DMP)の論文をチェック.
Robert E. Filman and Klaus Havelund: ``Realizing Aspects by Transforming for Events''
アスペクトを作るのに必要なイベントの種類をまとめている論文.AspectJ の join points では十分ではないらしい.この論文,どんなふうにアスペクトが使われているかをまとめてくれているので,参照するには便利かもしれない.
Tom Tourwe, Johan Brichau and Tom Mens:``Using Declarative Metaprogramming To Detect Possible Refactorings''
クラス間の関係ルールを論理型言語で記述しておいて,リファクタリングなどの作業中にルール違反を検出しようという試み.実はこの手の制約(たとえば Law of Demeter の厳守)を記述するようなプログラミング言語というのは新鮮な感じ.もっとも,正確に制約を書くのは難しそうだけど….
Gopan Gupta:``A Language-centric Approach to Software EngineeringDomain Specific Languages meet Software Components''
DSL(Domain Specific Language)をコンポーネントの高レベルラッパーとして使う,開発者はDSLさえマスターすればコンポーネントのインタフェースを直接触る必要はないよね,という話.アプリケーションからのトップダウン的に述語を生成していってDSL のプロトタイプを作り,最終的にコンポーネントでの表現に落としていく論理型プログラミング的な扱いになる.個人的にはいまひとつかも.
2002-10-03 古い日記からの変換データ [長年日記] ▲
_ IE6 ▲
研究室用マシンで,IE6 がなぜか落ちまくるようになってしまった.イベントビューアで調べてみると,msctf とかいうモジュールの特定アドレスで落ちていることが発覚.msctf には,Office XP のモジュールと干渉してJavaScript を使ったページ翻訳機能がうまく動かないという問題があるらしい.…関連性はあるかどうか分からないままOfficeXP をアンインストールしたところ,とりあえず動くようにはなった.OfficeXP って,アプリケーションのくせにシステムの DLL を置き換えてるのかな….
2002-10-05 古い日記からの変換データ [長年日記] ▲
2002-10-07 古い日記からの変換データ [長年日記] ▲
2002-10-08 古い日記からの変換データ [長年日記] ▲
_ Eclipse ▲
AJDT のコンパイルを通す.JDK 1.3 + AspectJ 1.0.6 がインストールされた環境で,Eclipse 本体 + Graphical Editor Framework で,あとは参照しているパッケージへクラスパスを通すだけ.このあたりもそのうち資料をまとめるべきかな.
2002-10-09 古い日記からの変換データ [長年日記] ▲
_ AspectJ ▲
AJC1.1alpha がもうすぐリリースらしい.主な特徴は以下の通り.・コンパイル時,リンク時,クラスロード時の weaving を可能に(.jar も扱える)・eclipse.org のコンパイラによる再実装・アスペクトのバイナリに,ソースと同等の すべての情報を保存するようになった・インクリメンタルコンパイルの実装これでさらに面白くなりそう&面倒が起きそうな予感.
_ robocode ▲
JNI を使って Win32 API の getKeyboardState を呼び出し,ロボットをユーザが動かすことができるか?という実験をしてみた.
ユーザがコントロール可能なロボットは,強化学習などで使えるかもしれないなーとか,別のゲームとしても遊べそうだなーとか思ってたんだけど……
結果は,「System.loadLibrary への呼び出しを妨害しました」という旨が java.security.Permission によって出されておしまい.まぁ,robocode の趣旨的にはすごく正しい反応だ.Java 以外の機能使うのはある種のインチキだし.
手間かけて DLL とか作ったわりに結局役に立たなかったので少し残念ではあるけれど,Security Manager が有効に動作してる環境は初めて見たので,感動した.
2002-10-11 古い日記からの変換データ [長年日記] ▲
_ 検索 ▲
日記 CGI に記録されたデータ量も増えてきて,データの検索をそろそろ真面目に考えないといけない気がしてきた.
現状はタイトルに使ってる「読書」「紅茶」「AspectJ」などの決まり文句でいいけれど,それ以外に利用可能なキーワードを適当なツールを使って自動的に探せるようにしたいところ.
_ 紅茶 ▲
寒いので紅茶を飲みつつメール整理.そろそろ新しいダージリン,アッサム,あとウバかキームンあたりを仕入れたいところ.
アッサム・ハルムッティが尽きてダージリン・グームティーだけの現状では,(もちろんダージリンもおいしいんだけど)バリエーションがないためにちょっと寂しい.
_ 論文 ▲
実験の合間にも論文読み.
Constantinos A. Constantinides, Atef Bader, Tzilla Elrad:``A Framework to address a two-dimensional composition of concerns''
アスペクトを言語ベースで実現するのではなく,Aspect Moderator というオブジェクトにアスペクトの管理をまかせて,メソッド呼び出しなどのたびにアスペクトを起動するかどうかをModerator が動作してアスペクトの生成・起動を行う.フレームワークになった分,将来の拡張性は上昇している.しかし,アスペクト間の結合については Pre/Post Condition による処理を行うとしているだけなので,セキュリティ上の問題などを厳密に解決しているわけではない.様々なアスペクト処理系の実装を要約してくれているので参考にするには便利.
要約をみた限りでは,IL (interaction language?) というのがobject interaction を記述する言語らしいので,チェックする必要がありそう.
[Berger et al. 98] L. Berger, A.M.Dery and M.Fornarino. Intaraction BetweenObjects: An Aspect of Object-Oriented Languages, Position paper at the ECOOP'98 Workshop on Aspect-Oriented Programming
2002-10-13 古い日記からの変換データ [長年日記] ▲
2002-10-16 古い日記からの変換データ [長年日記] ▲
2002-10-18 古い日記からの変換データ [長年日記] ▲
_ AOSD ▲
aosd-discuss ML での「手動での join point 記述」から始まった一連の議論が一段落したので,自分用に少しまとめておく.けっこう色々な意見が出た.
発端の提案:予期しない変更に対する対処として,Join Point をプログラム内部に「変更しても良い場所」として記述するのはどうか?Join Point ごとに,他のアスペクトとの干渉しかたも違ってくるし,Aspect Weaving 用の情報も持たせておきたい.
出てきた意見:
・予期せぬ変更を綺麗に扱うのは重要だが,作業時間が短くなるかどうかは別の問題.
・コード単体から,簡単に join point が決められるのか?たぶん無理.
・複数のアスペクトを単一の join point に与えた際,その解決はコードレベルよりもっと上位で行うべき.それを妥当なコストで実現するツールが重要.
・アスペクトやハイパースライスをアプリケーションにマージするのは簡単ではない.注意深い計画と分析が必要である.Hyper/J で正しく作業しようとすると,再度モジュール分析して,影響を受けるハイパースライスを調べて,それぞれテストして,結合してテストして,……といった作業は必要となる.tangled code を避けるんだから,それくらいの作業は仕方ない.If you hack the code, your statements are true, though.If you hack the code, you have no place in a commercial project.
・標準のIDEやコンパイラで使えない言語要素の導入は,開発プロセスに大きな影響を与えてしまうのが問題.
・join point はコントロールされるべき.たとえば, - private なアスペクトはすべての join point にアクセスできてよい. - public なアスペクトは public な join point にのみアクセスする. - 何か適当な protected という範囲のアスペクトもあってよいはず.
・別に用意したスキーマを使ってアスペクトを結合するべき.
・スキーマも一種のプログラムだ.単に一緒に書くかどうかの違い.
_ 論文 ▲
以前,Extended Event Trace 図というのをコンポーネント間のインタラクション記述に使おう,という論文を読んだが,(タイトル:Using Extended Event Traces to describe communication in software architecture)実装言語があるかなーと思って論文の citation を探してみた.結果はゼロ.個人的には1個くらいは期待していたけど.設計時ドキュメントとしての価値はありそうだけど,それ以上の利用はされていないようだ.
_ 論文 ▲
実験の合間に論文を読むのが慣習になりそう.
L. Berger, A. M. Dery, M. Fornarino: ``Interactions between objects: an aspect of object-oriented languages''IL (Interaction Language) の紹介論文.IL はアスペクトを用いてオブジェクト間のインタラクションを書くための言語.
アスペクトを一種の手続き的な役割として使っている印象もあり,オブジェクト同士の対話をアスペクトが担当する.分散オブジェクトの管理なんかを頑張ろうと考えているらしい.これは,オブジェクトが処理の流れをコントロールするべきと思ってる人間にとってはあまり嬉しくない(単にオブジェクトの結合に用いる言語がアスペクトに移っただけであるが).
アスペクトの利用の例示として挙げている「一貫性保持」はけっこう妥当なものだが,「対話」というほどのものでもないような気がする.もうちょっとリモートオブジェクトの例がほしいところ.
2002-10-20 古い日記からの変換データ [長年日記] ▲
_ 読書 ▲
アン・マキャフリィ,パーンの竜騎士第2巻「竜の探索」を読破.第1巻もそうだけれど,巻の終わりできちんとそこまでの話はいちおう決着させておいて,でもやっぱり次の巻では新しい問題が出てくるらしい.構成としてはうまいかも.
人間と竜とのやりとりが前より多くなって,竜たちの意外な側面が色々見えてきた.<常識>が人間をいかに縛るか,という点についても過去や未来に縛られない竜たちとの対照が面白い.
2002-10-21 古い日記からの変換データ [長年日記] ▲
_ Eclipse ▲
jar に対するソースアタッチ機能を使ってみる.jar ファイルの中身を選ぶと,対応ソースファイルの中身を見せてくれる優れもの.ただ,jar ファイルと同じパスにあるファイルを直接叩いてるらしく,AJDT (AspectJ Development Tools) の ajdtsrc.zip みたいに中身が src/org/../*.java のようになっていると,ファイルを見つけられない.で,わざわざ org/../*.java だけを圧縮したアーカイブを作成した.展開したままでもよいが,on demand で展開しても十分速いし,ファイル整理的には圧縮したままのほうがうれしい.
2002-10-22 古い日記からの変換データ [長年日記] ▲
_ Action Semantics ▲
Java World 2002 November の Action Semantics の解説記事を読んだ.
UML のような設計ドキュメントレベルの高い抽象度で,システムの振る舞いをデータフロー+アクション言語で書いてそこから実装コードに落としていこうという試み.データフロー主体なところが好みではないが,今後出てくる可能性があるので注目は必要そうだ.
_ Curtis Clifton and Gary T. Leavens:``Spectators and Assistants: Enabling Modular Aspect-Oriented Reasoning'' ▲
アスペクトを Spectator (動作に影響を与えない) とAssistant に分類して,Assistant のほうはクラス側あるいは Aspect Map で「accept」することを明示されない限りは使えないとするもの.
この「accept」の概念は自分でも考えたことと似ているのでこの論文もチェックリストに入れておく.
_ 論文 ▲
NET CLR 上で Generics を実現しようという試みの提案論文.
Andrew Kennedy and Don Syme:``Design and Implementation of Generics for the .NET Common Language Runtime''
vtable などと一緒に型情報を持たせるという単純な発想ぽいけれど,動的に型情報を生成するというのはある意味すごいかも.
色々な言語で Generics な型をやり取りできるようになるとすごく面白そう.それにしても,CLR では Standard ML の高階関数とかの言語ごとの特殊要素はどう扱うんだろう?けっこう怪しげではあるが…….
2002-10-25 古い日記からの変換データ [長年日記] ▲
_ Java ▲
無名クラスの悪用を避けられないかどうか考えたが,・静的に構文チェックが一番楽そう.しかし,これを AspectJ の pointcut として書こうとすると実はできなさそう,ということも分かった.まぁ,構文チェックだけで済むならそれでよいか,という気もするが.
newInstance のほうは気持ち悪いので,以下のようにして禁止してみるのも手だろう.
pointcut use_newInstance(): call(Object Class.newInstance());declare error(): use_newInstance(): "don't use newInstance()!";
_ Java ▲
無名クラスはクラスとして使えるのか?という疑問がふと湧いたので,こんなコードを書いてみた.無名クラスのオブジェクト生成→クラス取得→クラスからインスタンス生成,というだけだけれど.
public static Comparator getComparator() { Class c = new Comparator () { : }.getClass(); try { return (Comparator)c.newInstance(); } catch (InstantiationException e) { return null; } catch (IllegalAccessException e2) { return null; }}なんと結果はOK. Main$_1 とかいう無名クラスのクラスオブジェクトがちゃんと取れていたし,インスタンスの生成もできた.
ちなみに,無名クラスは,コンストラクタ以外なら何でもオーバーライドできそうな気配.たとえば,throw new RuntimeException("hoge") { public String getMessage() { return "foo"; }}とやってみたところ(getMessage をオーバーライドした),ちゃんと動作してしまった.これも無名クラスのオブジェクトになる.
勝手にローカルにクラスをオーバーライドできることがわかったので,やっぱり無名クラスの利用は禁止したほうがよいのかもしれない.セキュリティ上は final が重要だなぁ.アスペクトでこういう奴の利用を引っ掛けられたらいいんだけど…….
_ 紅茶 ▲
レピシエ,ウヴァ・ハイランズを飲んでみる.感想は紅茶のページのところにちょこっと書いてみたけど,やっぱりアッサムの一位は揺らがず.アッサム・ラマナガーやディコムのように,フルリーフなアッサム紅茶が最高.#この辺は完全に好みの話なので情報量は少ない
_ 読書 ▲
アン・マキャフリィ,パーンの竜騎士3「白い竜」を読破.話の展開が速くて,大きな事件になると思ったものがあっさりと解決されてしまってちょっと意表を突かれる形になった.
これで,パーンの竜騎士,最初の三部作は読み終わったので,私の個人的お気に入りである竪琴師メノリらが主役の4・5巻を買うついでに,視野を広げるべくエリザベス・ヘイドン「ラプソディ」の解説のところに影響を受けたファンタジー作家のひとりとして挙げられていたパトリシア・マキリップの「妖女サイベルの呼び声」を仕入れてきた.
先に借りてきた本だけは片付けないとまずそうなので,そちらから優先的に片付けることにする.読書キューの長さがまったく減ってないし,だいぶ前に買った J2EE アプリケーション設計ガイドとかを読める時間が取れるのはいつになるのだろう :-)
2002-10-26 古い日記からの変換データ [長年日記] ▲
_ バックアップ ▲
Libretto (ネットワーク名 'asteria')のバックアップを取る.ここ最近バックアップを取っていないなーと思ってたら,バックアップ先のディレクトリの日付を見るとなんと2ヶ月ぶり.
Home 以下と cygwin,メールなど,ほぼ丸ごとバックアップを取った.しかしこのマシンの設定,一回壊れたら復活させることできるのかな?ちょっと不安だ.
2002-10-27 古い日記からの変換データ [長年日記] ▲
_ 文字列の縦書き ▲
Windows で文字列の縦書き出力ができないか,と聞かれて色々調べてみると,Windows API のCreateFontIndirectを使ってフォントを作成すればよいらしい.
Delphi で昔一度作ったことを思い出したのだが,ソースコードはアルバイト先にコミットしたのでもう手元にない.で,Visual Basic で再実装するがうまく動かない.どうも,配列や文字列,オブジェクト参照の扱いが曖昧なので API が呼び出しにくくて全然扱い方が判らない.昔の自分はよくこんな言語使えてたなぁと思う.
2002-10-28 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
OOPSLA 2002, Workshop on Tools for AOSD からもう2本読む.
Katharina Mehner, Awais Rashid:``Towards a standard interface for runtime inspection in AOP environments''
Java Platform Debugger Architecture (JPDA) のような実行時情報を取得するための標準インタフェースをアスペクト指向プログラムに対しても定義できないか,というもの.Join Point なんかを使って引っ掛ければいけそうであるが,そもそもアスペクト指向っていうのはパラダイムであってJVM など特定の実行環境が想定できない.C++ のようなネイティブコンパイルするタイプの言語のことは想定してないのかな? Windows.NET の CLR で OK だね,とか言われそうだが :-)
Mark C. Chu-Carroll: ``Supporting Aspects in Program Storage''こちらはソースコードをファイル単位ではなく,それより小さい「フラグメント」の集合として捉えましょう,という提案の話.これ自体は前からあるものだけど,このような構成管理ツールのひとつに,アスペクト指向などで言われているmulti-dimensional な構成管理を導入してみよう,というものらしい.概要だけ述べてあって具体例がないので,あまり理解できていないが,ソースコードの取り扱い単位をファイルから解放したい,という意見には部分的に賛成なので,この辺の研究はがんばってほしいところだ.
_ 埋め込みIC ▲
「体内埋め込みIC,規制を逃れてついに発売」http://itpro.nikkeibp.co.jp/members/ITPro/USIT/20021027/1/なんてニュースを読んでると,だんだん現実がSFの世界に近づいてきた印象がある.しかし,記事にも書かれてるけど,本当に体に埋め込んでまで使う道具の価値はあるんだろうか…….個人的には通信機器くらいまでに高機能なら面白いなぁとは思うが :-)
_ Eclipse ▲
plug-in のプロトタイプを書き始める.どうやってテストするのだろうと思ってEclipse.org の Your First Plug-in の記事を読んでみると,Run -> Run As -> Runtime workbench で実験用ワークベンチを立ち上げるらしい.高コストだがやむを得ないか.
_ 論文 ▲
OOPSLA 2002, Workshop on Tools for AOSD の論文がダウンロード可能になっていたので,こっちもいくつか見てみることにする.
Joao Cachopo, Antonio Menezes Leitao, and Antonio Rito-Silva: ``The Tyranny of the File Decomposition''どんなツールでもファイルという単位が基本になっているが,ビューとして開発者がコードを見るときには,ファイル内のレイアウトに縛られずに意味のあるコード単位で開発者に提供すべきだ,という論文.アスペクトを使うとどうしても複数のファイルに分散していく傾向があるので,たしかにこの主張には一理ある.……実装によるけど.
_ 論文 ▲
とりあえず面白そうな論文をいくつか見つけたので読んでみる.
Stefan Hanenberg, Rainer Unland: ``Grouping Objects using Aspect-Oriented Adapters''アスペクト指向で Adapter を実現してみようという話.introduction (アスペクトによるクラスへのメソッド追加) を濫用すると構造が汚くなってしまい,またアスペクトによって変化した部分と変化してない部分とを区別できないので困るよね~という言い分で,Adapter を introduction のかわりに使って,しかも Adapter まわりの実装にはアスペクトを使う,らしい.Reflection API 使ってる時点でちょっといけてない気がするが,汎用的な Adapter 実装しようとするとやむをえないところか.
参考文献に入っていた K. Lieberherr, D. Lorenz, M. Mezini:``Programming with Aspectual Components'' などが応用可能な部分として挙げられていたので,そっちも見てみることにする.
検索してみたら,Lieberherr のページも発見.http://www.ccs.neu.edu/home/lieber/AOP.html
LieberherrってAspectual Collaboration のときに見た名前だから,たぶんこれも似たようなものなのだろうか…….
_ OutlookExpress ▲
「メールを表示せずに消すにはどうしたらいいの?」と聞かれた.手元の Outlook Express で実行してみると,なんとメールを選んだ瞬間に表示してしまう.オプションも,それらしいものはない.「プレビューの際に自動ダウンロード」とかいうオプションは,まだ本体がダウンロードされていないメッセージにしか効かないようだ(当然か).
私が普段使っている Al-Mail は選ばない限りメールを開かないので,この挙動はどうかと思うのだが…….ここで「OutlookExpress腐ってる~」と叫んでも解決にならないので,[編集]-[検索]-[メッセージ]で,メールの検索結果一覧ウィンドウからならメールを開かずに消せることだけは確認して,それを教えた.
もし検索結果一覧で選んだメールが勝手にプレビューされるようだったら,本当に腐ってると言ったかも :-)ちゃんと方法が見つかってよかったよかった.
2002-10-29 古い日記からの変換データ [長年日記] ▲
_ AspectJ ▲
AspectJ は CLDC/MIDP では使えないんじゃ?という質問が aspectj.org に出てた.CLDC/MIDP って何だろう,と思って調べてみると
CLDC: Connected Limited Device ConfigurationMIDP: Mobile Information Device Profileってな感じの組み込み系っぽい Java の世界だった.
CLDC などでは Clonable とか Serializable とかいくつかのインタフェースが使えないらしい.このあたり,AspectJ の一部のライブラリが裏でこっそり使ってる可能性がある.
まぁ,オブジェクト指向が組み込み系で使えるようになるまでに時間がかかったように,アスペクトが組み込み系で使えるようになるには時間がかかりそう,というのはあるかも.
個人的には,アスペクトを weave した後のコードがサイズ制約やタイミング制約に引っかかるのでは?というほうが気になるのだが :-)
2002-10-30 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
Karl Lieberherr, David Lorenz, Mira Mezini: ``Programming with Aspectual Components''Aspectual Components とは,Aspectual Collaboration と同じものを指していて,単にこちらが論文の元となったレポートらしい.
AspectJ へのコードを展開なども説明してあってサンプルコードも多くて丁寧で判りやすい.
ためしにコードを人に見てもらったが,一見したときの印象としては悪くないようだ.
うーん,やっぱりクラスを勝手に書き換えるのだけは気持ち悪い(アクセス権限をかけられないのかな?)が,有用性はすごく高そう.少なくとも,AspectJ よりも読みやすくて使いやすそうなので,コンパイラ実装してくれたら使うのになー.ソースコードの情報に reflective にアクセスできる API を用意してくれれば,という限定付きになってしまうけれど.