netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2003-05-01 古い日記からの変換データ [長年日記] ▲
_ 日記CGI ▲
そろそろ,古いデータを HTML 化していこうかな,と思ったがそうすると現在の検索機能のような記事ピックアップが働きにくくなる.久しぶりに機能強化しようかしら.……もちろん,国際会議が終わってからだけど.
2003-05-03 古い日記からの変換データ [長年日記] ▲
2003-05-05 古い日記からの変換データ [長年日記] ▲
2003-05-08 古い日記からの変換データ [長年日記] ▲
2003-05-11 古い日記からの変換データ [長年日記] ▲
_ ICSE ▲
ICSEが終わったので,サンフランシスコで1日観光.Stanford 大学で昼食.Teriyaki Bowl (Shitake Mashroom and Tofu) がとても不味かった.その後,CS専攻の歴史的資料の展示,Memorial Church と Hoover Tower を見て,大学内の本屋さんと近所の電気屋 Fry's に立ち寄った.期待に反して,ユニークな品物というのは特になかった.
夕食はジャズの生演奏が聞けるMaibock, Gordon Biersch Brewery Restaurant で食べたが,自家製ビールが美味しかった.屋外で食事できるのがいい感じ.
翌日は,朝から空港へ行って飛行機に搭乗して帰国.時差と移動時間を足すと28時間くらい移動にかかった.
2003-05-14 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
AOSD2003の論文読みの続き.ショートペーパーかと思ってたら,やっぱりこの辺りは Position Paper だったらしい.PDF を印刷してから,2週間以上経っているのでまったく忘れていた.
J. Kienzle, Y. Yu, J. Xiong: On Composition and Reuse of Aspects.
アスペクトは,サービスを提供,要求,除去する.アスペクトが他のアスペクトが要求しているものを提供する場合もあるが,他のアスペクトが要求しているものを除去してしまう場合もある.
依存しているサービス Depends-On 集合 D,除去するサービス Remove 集合 Rから,R が空集合なら保存性がある,D が空集合なら直交している,というように分類する.
また,アスペクト間の優先度などを構成グラフ(Configuration Graph)として,グラフ中の循環(相互依存関係)は分離しよう,とかいうことを説明している.どういう研究に発展するか楽しみ.
_ 論文 ▲
B. Tekinerdogan: ASAAM: Aspectual Software Architecture Analysis Method.
こちらは Full Paper.SAAM: Software Architecture Analysis Method というアーキテクチャの評価手法のアスペクト指向への拡張らしい.シナリオを Direct/Indirect で整理し,アスペクト付きシナリオを構築し,アーキテクチャのアスペクトを抽出するというもの.私の仕事とはあんまり関係ないので読むのは保留.
アスペクト指向と一口に言っても,色々やってるなぁ,というのが現在の感想.
_ 論文 ▲
さらにAOSD2003論文読みの続き.
I. Brito, A. Moreira:"Towards a Composition Process for Aspect-Oriented Requirements"
要求からアスペクト間の優先度(dominates)関係を決定するプロセスに関する話.興味がないので省略.
_ 論文 ▲
A. Gal, M. Franz, D. Beuche:"Learning from Components: Fitting AOP for System Software"
OS などで AOP を使うには信頼性が重要だが,アスペクトはコンポーネントの中身を直接扱うので使いにくい.そこで,コンポーネント側に,interface LockNeeded { void print(); }のようにインタフェース定義を置いておいて,アスペクトはそれらのインタフェースに対してのみ仕掛けることができるようにしよう,というもの.発想としては非常にシンプルで分かりやすい.
_ 論文 ▲
A. Colyer G. Blair, A. Rashid:"Managing Complexity In Middleware"
分散ソフトの複雑さを抑えるためにはミドルウェアが重要だが,そのミドルウェア自体の複雑さが問題となっている.そこで,AOSDの "宣言的" 性質を使ってミドルウェアの特性を分解したり,アプリケーションとミドルウェアの結合度を弱めるために使いましょう,という論文.6ページのショートペーパーだし,どっちかというと Position Paper ぽい気配.
_ 論文 ▲
AOSD2003周辺論文読みの続き.
W. Schult, A. Polze:"Speed vs. Memory Usage - An Approach to Deal with Contrary Aspects"
C# で dynamic weaving を実装して,メモリ節約アスペクト,分散計算アスペクトを使ってどのくらいシステム性能が変わるかを調べた論文.実データとソースコードが載ってて,ここまで変えられるのか,とちょっと感心.
_ 論文 ▲
S. Hanenberg, A. Schmidmeier:"Idioms for Building Software Frameworks in AspectJ"AspectJ のイディオム4種類を紹介している論文.
子アスペクトが親アスペクトのメソッドを実装する Template Advice, 子アスペクトが,動作すべきかどうかを boolean 値で返して,true のときのみアドバイスが動作する pointcut method,複数のアスペクトをチェインさせる Chained Advice,Factory メソッドの実体を定義する Factory Advice.
有効性については今のところ不明.
_ 論文 ▲
J. Araujo, P. Coutinho:"Identifying Aspectual Use CasesUsing a Viewpoint-Oriented Requirements Method"
"Vision" という要求分析法があるらしく,それを使って非機能的要求(Non-Functional Requirements)を確定し,複数の要求に絡む要求はaspectual use case として取り出す,とかいう話らしい.あんまり関係ない話のようなので,詳しくは読まないで置いておく.
_ 論文 ▲
H. Rajan, K. Sullivan:"Need for Instance Level Aspect Language with Rich Pointcut Language"
pointcut の種類を Rich/Simple,アスペクトが動作する単位を Type/Instance と区別して,Rich/Instance な言語がほしいよね,というのでプロトタイプを作ってみました,という論文.
instancelevel aspect Equality {アスペクト定義}と定義して,コンストラクタ呼び出しのように動作し,アスペクト初期化時に addObject(引数でもらったオブジェクト) という呼び出しでアスペクトがそのオブジェクトに張り付くらしい.フックを仕掛けてるのと気分的には同じ.
_ 論文 ▲
M. Storzer, J. Krinke:"Interference Analysis for AspectJ"
アスペクトによる Introduction,クラス階層の改変機能で,どこのメソッド呼び出しが影響を受けるかを解析する,という論文.計算アルゴリズムが明確に記述されているので,後で参考にするかもしれない.
_ 論文 ▲
I. Nagy, M. Aksit, L. Bergmans:"Composition Graphs: a Foundation for Reasoning about Aspect-Oriented Composition"
Composition Graph という中間形式に落とすことで,複数のアスペクト指向の手法を混ぜて使おうという Position Paper.クラスやアスペクトの,メンバー間の関係をグラフに落として,グラフ変換で頑張ろうとしている.それにしても,各アスペクト指向言語の表現をグラフ上の表現に落とす変換ルールを作るのが大変そうだが,逆に,新しく言語を作る人はそのルールさえ作ればあとは共通処理になるので,新しい手法の提案が楽にはなるかもしれない.
_ 論文 ▲
ICSE2003 ツール・デモンストレーションに関するまとめ.
M. P. Robillard, G. C. Murphy:"FEAT: A Tool for Locating, Describing, and Analyzing Concerns in Source Code"
Concern Graph の管理ツール.Eclipse プラグイン.Concern に属するメソッド・フィールドの呼び出し関係などを知ることができる.このグラフをアスペクト作成などにも使うことができる.-- GUI表現があると面白いのだが.AspectJ はモジュールとして分けようとするが,FEATでは必ずしもそうする必要はない.このツールに対しては,取り出したものが正しい Concern かどうか,また Concern の粒度はどの程度か,という問題がある.ちなみに,FEAT はダウンロード可能らしい.
S. P. Reiss:"JIVE: Visualizing Java in Action"
プログラムのどのクラスが動作しているかを示すツール.プロファイラの GUI 版のようにも見えなくはない.時系列情報などを保存してるのは少しえらいとも思うが,時系列情報をどの程度取っているのかによっては,コストが微妙なところでもある.
あとは,DRT (Design Recovery Tool) がある.DRT は,GUI 操作から,実行された関数などを記録して重要度の算出などを行って,簡略化されたシーケンス図を表示してくれるのだが,論文のほうにある計算式がまだ把握できてないので保留しておく.
_ 論文 ▲
ICSE2003で聞いたプレゼンテーション等のまとめ.
J. Law, G. Rothermel:"Whole Program Path-Based Dynamic Impact Analysis"
全部動的情報から行う影響波及解析.実行トレース(主にメソッドコール?)列を作って,トレース列に2箇所以上同一の系列が出現したら,たとえば "ABCAB" ならば "xCx" + "x -> AB" に変換するという形でSEQUITOR文法という一種の圧縮形式に変換し,その上で影響波及解析を行う.
static forward slicing との比較を行っていて,動的にやった分小さくなっていると主張している.
実は,実行トレースから SEQUITOR 文法に直すときに,過去の系列をすべてパースしたら n^2 に近いアルゴリズムになってしまうはずなので,けっこう苦しいと思うのだが…….
X. Zhang, R. Gupta, Y. Zhang:"Precise Dynamic Slicing Algorithms"
動的データスライシングの話.制御構造を追いかける場合もそれほど差はない,らしい.
ポインタなどの区別は単純に値(アドレス)のマッチングでやっているらしい.実行トレースを出すのに必要なコストは考慮していない.
オンデマンドに必要な部分だけの PDG を構築するというところがポイント.スライス回数が少なければ,かなり高速になる.また,トレース結果をブロックに分解しておく Limit Processing とも比較を行っている. Data Slicing では,80%くらいのブロックは処理せずに済むらしい.
もっとも,実行トレースのサイズが 1M ステップとかになってくると,トレースをディスクに書き込んだりするコストや,スライスのサイズ自体が馬鹿馬鹿しいものになる気もするが…….
_ 余談 ▲
動的スライスでは,1. データ取得, 2. スライス計算, 3. 表示方法 を頑張らないといけないので,まだまだ課題は多そう.
Hybrid Slicing [Gupta, Saffa, FSE'95] なんてものもあるらしい.動的情報を部分的に使うものらしいので,いちおうチェックしたほうがよさそう.
_ 論文 ▲
OOPSLA2003に投稿していた原稿が reject されたので,少し修正して IWPSE に再投稿を試みることに.締め切りまであと一週間というところで決めるあたりが適当ではあるが,原稿の大まかな修正は終えて,とりあえず先生の確認待ち.
_ 論文 ▲
IWPC2003 のうち,論文著者が自前で web で公開してるものを集めて読んでみた.主にプログラム解析系.(Program Comprehensionのワークショップなのだから当然だが)
D. Heuzeroth, T. Holl, G. Hogstrom, W. Lowe: "Automatic Design Pattern Detection"
デザインパターン候補を,ソースコードの静的解析+動的解析で抽出する.静的解析の手法としては,既存の各メソッドをパターンの構成要素とみなして(たとえばあるメソッド m を Observer.notify の役割を果たすと仮定して),メソッド役割の組み合わせを探索する.それらに対して,実行時情報でフィルタリングを行う.実験データでは,静的解析で約300程度の候補が発見され,動的解析で20程度まで絞った後,手作業で1~6個程度識別していた.
_ 論文 ▲
R. Komondoor, S. Horwitz:"Effective, Automatic Procedure Extraction"
コードからの手続き抽出.break, continue などの goto 系を解決しながら手続き抽出を行う.アルゴリズムはCFG上での計算っぽい.どこまでを手続きとして抽出するか,とかいうのは微妙.
_ 論文 ▲
E.B. Duffy, J.P.Gibson, B.A. Malloy:"Applying the Decorator Pattern for Profiling Object-Oriented Software"
Decorator を使って C++ 上でのプロファイリングを実装している.ユーザの記述したクラスと,Profilerクラスを多重継承したクラスを実際には用いる,とうい形式.メモリ・プロファイルには new をフックしているあたりが若干怪しげ.クラスの Clone メソッドなどのコピー時の扱いに,多少困っている様子.これは,コピーコンストラクタで継承クラス部分がコピーされないときの問題と同様.また,継承を用いているため,名前衝突にもちょっと弱い.
_ AspectJ ▲
AspectJ 1.1rc2 リリース.とうとうバイトコード weave +インクリメンタルコンパイルの世界に突入できるらしい.しかし,AJDTの構成がまったく変わってしまうと,AspectJ コードを解析する側にとってはしんどい話だ.
_ Java ▲
無名クラスにはコンストラクタが書けないので不便だなーと思っていたのだが,実は {} だけを用いて初期化処理を書けたらしい. Core Java Technologies Tech Tips, May 6, 2003に掲載のサンプルコードを以下に抜粋しておく.Comparator cmp1 = new Comparator() { { System.out.println("object initialization"); } public int compare(Object o1, Object o2) { int cc = ((Integer)o1).compareTo(o2); return (cc < 0 ? 1 : cc > 0 ? -1 : 0); } };
2003-05-17 古い日記からの変換データ [長年日記] ▲
2003-05-19 古い日記からの変換データ [長年日記] ▲
_ 国民健康保険 ▲
収入の都合で扶養家族から外れるので,国民健康保険に加入するために市役所まで行ってきた.保険料を計算してみると,けっこう高いことが発覚してちょっとショック.所得税+住民税+保険料+年金で収入の25%ぐらいが持って行かれる予定.
_ DupChecker ▲
TODO は次の通り:・ファイル検査時の進捗表示(ウィンドウのステータスバー or プログレスバーダイアログ).・公開用webページの作成.どうせ大したツールではない(結局4日ほどで書いてしまった)のでソースごと丸投げしてしまうことにする.
_ IE ▲
最近気付いたのだが,IEはURLのリンクをクリックした場合とアドレスバーへ直接入力した場合とで微妙に振る舞いが違うらしい.直接アドレスバーへ入力した場合のみ,ファイルオープンに失敗することがある.サーバ側の Content-Type 情報は無視してる節があるのだが…….
_ Java ▲
重複ファイル検出ツール DupChecker なんてものを作ってみた.
java -jar DupChecker.jar で起動する.ディレクトリ名をリストボックスに Add して,スタートボタンを押すだけでディレクトリ中に存在する重複(内容が同一)ファイルをリストアップするというもの.既存ツールでも別に良いと言えば良いのだけれど,インタフェース的に微妙に不満があり,加えて,Java で GUI を久しぶりに手書きコーディングしてみたかったので自作してみた.
結果のツリービューから,ファイル名を選択してDelete ボタンを押すとファイルが消せる.ファイル単位表示とディレクトリ単位表示とを両方準備してみた.
ちなみにファイル比較は,ファイルサイズとMD5.java.security パッケージの InputDigestStream, MessageDigest クラスを使うと意外と簡単に MD5 計算は実装できた.
2003-05-22 古い日記からの変換データ [長年日記] ▲
_ DupChecker ▲
DupChecker のHTMLを作成した.けど,あまりやる気はない.とりあえず,ソースを JAR につけておくので誰か欲しい人が勝手に取っていくだろう.たぶん. DupChecker 公開ページ_ 授業 ▲
授業の受講者向けにアンケートを作って投げてみた.本文は次のとおり.さて,どう帰ってくるだろう?
Q1. Java に関する経験について教えてください.
1. 知らない2. 使ったことが一度もない3. 授業で使った程度4. 実務,趣味等でプログラムを書いたことがある
Q2. オブジェクト指向について知っていますか.
1. 名前を聞いたこともない2. 知っているが,実践したことはない3. 実践はしているが,オブジェクト指向プログラミング言語は使わない4. オブジェクト指向プログラミング言語を使っている(使っている言語も教えてください)
Q3. 統合開発環境 Eclipse について知っていますか.
1. 知らない2. 名前だけは聞いたことがある3. 他人が使っているのを見たことはある4. 自分で使っている(使っている言語も教えてください)
Q4. アスペクト指向について聞いたことはありますか.
1. 聞いたことがない2. 名前を聞いたことはある3. 概念は知っているが,言語を使ったことはない4. アスペクト指向言語を使っている(使っている言語も教えてください)
2003-05-25 古い日記からの変換データ [長年日記] ▲
_ TRPG ▲
The Lord of the Rings RPG の情報を更新.早く日本語版を出してくれればこんな苦労はないのだが…….日本語版が出たら,フレーバーテキストの読みたさに思わず買ってしまうような気がする.版権とか高そうだから難しいのかな? それにしても,キャラクターシートはまだ改良の余地がありそう.キャンペーンでもっとフィードバックを集めよう. games/trpg/2003-05-26 古い日記からの変換データ [長年日記] ▲
_ AspectJ ▲
地味にドキュメントを更新.純粋アスペクト指向言語って,誰か作ってくれないかなぁ.むしろ自分で作るべきだろうか.「アスペクトとは何か」を定義しなおさないといけないのでちょっと大変だ.
_ アーカイバ ▲
特に理由があるわけでもないが,ArchIt からNoah と Explzh の併用環境へ移行した.Noah が ArchIt の代替で,Explzh は加工用.勢いで併用環境になってしまったので,さっさと金を払って Explzh へ一本化するか,それとも Noah でごまかすか.
_ プログラミング言語 ▲
プログラミング言語がいくつくらいあるのか,と聞かれたのに正確に答えられなかったので調べてみたら,プログラミング言語リストなんてものを発見.これに載っている範囲で 2350個.でもこれは,Java とかは載ってないようなので,現状ではさらに数が増えてるはず…….
http://cui_www.unige.ch/langlistftp://wuarchive.wustl.edu/doc/misc/lang-list.txt
_ HTML ▲
HTML を書くたびに HTML-lint を通すというのを繰り返しているせいか,だんだん HTML の仕様に準拠したデータというのが書けるようになってきた.そもそも手書きするな,という話もあるが.
_ Eclipse ▲
ようやく,Eclipse で使われているファイルの意味を理解し始めた.
build.properties -- プラグイン・アーカイブのソース位置などはここで指定する.というか,アーカイブファイルの名前はこれによって決定される様子.
build.xml -- 「Create Plug-In JAR」を選ぶと自動生成される.
default.lst -- 単なるファイル名の一覧だと思っていたのだが,Build Configuration Editor で開くことで,build のコンフィギュレーションを設定できる.ここに変なデータが指定されていると,思い通りのファイルがロードされない,ということが起こる.
plugin.xml -- 言うまでもないが,プラグイン情報を格納したXMLファイル.
2003-05-28 古い日記からの変換データ [長年日記] ▲
_ Java ▲
今日のはまり.
IntValueMap (自作の int -> Object マップ)が,正しい値を返してないなーと思っていたら,IntValueMap は getKeys で返す作業用オブジェクトをキャッシュしていて,getKeys(int) に拡張したときにキャッシュの値を引数に合わせて正しく更新していなかった.
コレクションが間違ってると,あやしいエラーがいっぱい出る.
_ MHonArc ▲
MHonArc は 2.6 で日本語の扱いが怪しい,らしい.手元のメールは全部 MHonArc に食わせようとしているのだが(昔から使っている2.4.9で),生成されたインデクス自体がそれほど便利でないので,namazu とかを使うか,生成された HTML をいじるとかしないとやっぱりつらい.
_ Explzh ▲
ライセンスを@pay を使って獲得.どうせ1000円だし.せっかくだし, Becky! の4000円も買ってしまおうかなぁ.そろそろ Al-Mail もファイル数的に限界が近いし.(というかバックアップにかかる時間が長い)
_ RPG ▲
鮎方さんからの指摘を受けて,The Lord of the Rings RPG ルール抄訳の誤植を修正.ついでに,ページのほうには更新履歴もつけてみた.
研究紹介用のwebページ作成と並列で作業を進める.
_ デザインパターン ▲
@ITで,デザインパターンはどこまで使われているか,というアンケート結果が出ていた.http://www.atmarkit.co.jp/fjava/devs/survey/survey0305/survey0305.html
わりと普及してきたという感じではある.そのうち常識になっていくのかも.
でも,自分で使ってみると,実際にプログラムを書くときに,「これはxxパターンの実装だな」と意識できるのは,まだまだ少ない.Observer, FactoryMethod, Template Method, Singleton, Facet くらいか?
_ Eclipse ▲
Eclipse を,並べて使っている2台のマシンで使っているが,一方のマシンではちゃんと動いてたのに,もう一方のマシンでは ${project_loc} 環境変数が解決されないことがある.怪しいのでバージョンを見てみたら,エラーを出すのは 2.0/200209201351 ビルドで,正しく動くのは 2.0/20021018 の新しいビルド.ちょうどバージョン切り替わりのときにインストールしたせいで,二台のマシンでバージョンが違ってたらしい.
2003-05-29 古い日記からの変換データ [長年日記] ▲
_ ウィルス ▲
ウィルス作成講座を大学の授業でやるとかいう話に対して色々賛否両論起こっているらしい.http://www.zdnet.co.jp/news/0305/29/ne00_virus.html
ウィルスやその他サーバへの攻撃などの話では,コンピュータ倫理学(Computer Ethics) での「たとえば病院のサーバがダウンして,死者が出た場合, その責任を取れるのか?」という話なんかもあるので実はそうそうウィルスやワームを作られてはたまらないのだが,正しい原理を学んでおかないと誤った情報を信じて行動してしまう可能性もあるので,悩ましいところではある.
そのうち,ネット家電等に感染するウィルスとかが出てくると本当に死者が出る可能性はある……かな?
_ Eclipse ▲
最近気付いたのだが,Eclipse は起動時のカレントディレクトリにworkspace を作るらしい.だから,ショートカットで「作業時のディレクトリ」を固定しておかないと,エクスプローラで最後に開いたディレクトリにworkspace が作られてしまう.親切なんだか不親切なんだか,微妙なところだ.
_ 暗号 ▲
暗号化してファイルを保存するエディタ EDエディタを使ってみる.いちおう,きわめて類似した平文を同じパスワードから2個暗号化して差分を取って,X+Y - (Z+Y) = X-Z が出てくる!なんてことがないことだけ見て,脆弱な暗号システムではないことを確認.
単に,リムーバブルメディアにプライベートなデータを置いておくときの用心程度なら,この程度で十分のはず.実際のところ,暗号を壊されるよりもパケットやキーボードを監視されるほうがよほど怖いので,手間としてもこのあたりが限界だろう.
2003-05-30 古い日記からの変換データ [長年日記] ▲
_ javadoc ▲
JavaDoc2HtmlHelp がほしくて探しているのだが,見つからない.もしかして誰も作ってないのか?HTMLがたくさんあるとかさばるし,ローカルにあると検索できないし,というので困ってるので,作ってみようかな.既にHTMLだから,インデクス抽出と目次さえ作ればいいんだし.
_ Eclipse ▲
無事プラグインが移行できたところで,勢いに任せて 2.1 に移行することにする.
2.1 で追加されている機能を読んでみて,私が惹かれたものだけピックアップすると,・エディタのキーバインディングの変更・Quick Fix 機能の追加 変数名の変更の伝播,catch 節とthrows 節の連動 実装する必要のあるメソッドの雛形の自動生成・スレッドのデッドロック検出・各種リファクタリングの強化 ローカル変数→フィールドへの昇格, 選択したメソッド群からのインタフェース作成といったところか.(授業で紹介する用にメモっておく)
こんなの見ちゃうと,移行せずにはおれない :-)
_ Eclipse ▲
今日のはまり.Eclipse 2.1 では,org.eclipse.jdt.internal.ui.javaeditor のPaintManager, IPainter がorg.eclipse.jface.text に移動していて,また, IPositionManager はorg.eclipse.jface.text.IPaintPositionManager というaddPoisitionManager のかわりに managePosition,removePositionManager のかわりに unmanagedPosition というメソッドにインタフェースが変わっていた.逆に言うと,変わっていたのはそこだけ.それらを直したら,コンパイルが無事通った.AJDE, AJDT も(いちおうは)動いてるみたいではある.
extension point が解決できないというのは単にコンパイルしくってただけだったらしい.早とちりもいいところだ.