netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2003-08-02 古い日記からの変換データ [長年日記] ▲
_ 読書 ▲
部室に転がっていたので,きたみりゅうじ「SEのフシギな生態」を読んでみた.
ちょっと漫画も入ってて読みやすい本.SEが仕事でこけた,失敗談集みたいな感じで,SEに必要な技能(コミュニケーション能力,業界知識,etc)と発言に対する責任とか,プロとはどういうものか,といった話などが説明されている.わりといい本かも.
_ AspectJ ▲
Volkmann, Mark の投稿によれば,Eclipse と AspectJ 1.1 が JSR-45 をサポートするまでは-XnoInline オプションを使わないとステップ実行がうまくいかないらしい.加えて,advise コード中には breakpointが置けないらしい.
2003-08-03 古い日記からの変換データ [長年日記] ▲
2003-08-04 古い日記からの変換データ [長年日記] ▲
_ DRT ▲
Design Recovery/reverse engineering Tool 0.3.5 をcygwin で make しようとしたが失敗.普通の Linux とかの上で build したほうが安全なのかも.
それにしても,X Window でしか動かないと言うところをみると,やはり X でのイベントをフックしまくりなのかなぁ.
_ Java ▲
Java World 9月号を読んでたら,Torque というものが紹介されていた.Object と Relational DB の世界をマッピングして,テーブルに相当するクラスに doSelect(Criteria) とか叫んだりできるらしい.マッピング自体は XML で記述.
DBごとの SQL の方言などを消せる点が有利らしい.
2003-08-05 古い日記からの変換データ [長年日記] ▲
_ ZAQ ▲
ZAQ も Web メールを提供しまっせ,というメールが届いてた.まあ,activemail も Web メールがあるので,ZAQ アカウントを使おうという気はないのだが.
以下の URL は 8月6日から available らしい.https://pw1.zaq.ne.jp/support1/cgi-bin/webmail_top.cgi
2003-08-12 古い日記からの変換データ [長年日記] ▲
_ AspectJ ▲
AspectJ-Users ML で,"Any useful examples" というSubject で,Kenworthy, Edward がロギング以外に,AOP でないとできないことはないのだろうか?他のものは,デザインパターンなど,他の技術でもできるような気がする.とかいう感じの投稿をしていた.
「AOPでなければならない」ことというのは難しいと思うのだが.計算可能性という意味では同じなわけだし.
でも,これに対して,使い方の例として,R. Dale Asberry が,プロパティのデフォルト値を設定するのに使っている.before(call(System.getProperty()))をトラップして,もしプロパティが設定されていなければ他のプロパティの値を読み込んだり特定の値をセットしたりして,コンソールに「プロパティの値が設定されていないのでxxxにするよ」と出力する,なんて使い方もできるよーと投稿してた.Property Manager を作ると無駄に依存関係が出てしまう,プロパティの値はデフォルト値を初期化できるタイミングが違うことがあってコードが分散してしまうことがあるが,それを防げる,とか言っていた.
これはこれで,面白い使い方かも.
_ Java ▲
さらにメモ.
(6) JDK 1.2 では,Exception.printStackTrace() の結果は implementation depends である.Java VM の改造以外の方法で,正確な例外発生場所を知ることはできない?……とか言ってたら,スタックトレースがオブジェクトとしてアクセスできるよういなったので,今ならたいていは情報を持っていると考えても良さそうではある.
(7) Java Virtual Machine Profiler Interface (JVMPI) のソースは Visual Studio 6.0 では nmake all でコンパイルできる(環境変数の設定が必須).生成されたjdk/bin ディレクトリに配置しておく必要がある.-Xrunhoge (hoge.dll の場合)オプションをつける.
_ Java ▲
さらにメモを移動.今度は I/O 関連.
(3) BufferedInputStream は,読み込み途中でデータが途切れた場合, in.read(buf, 0, size) で size 分を完全には読み込まないことがある.in.readFully を使うか, in.read(..) の戻り値を使ったほうが安全.
(4) finalize() は終了処理を記述する場所ではない.GC から呼ばれた場合の処理を書く場所.ファイルをフラッシュして閉じる処理などは,Runnable.run() で flush, close を行うようなオブジェクトを用意しておいて,Runtime.getRuntime().addShutdownHook を使う.
(5) 純粋なテキスト入出力処理だけでは,PrintStream での print, println 呼び出しは例外処理を行っている分遅い.ObjectOutputStream の writeObject もわりと遅い.手動で char から byte へのキャストを行ってwrite(buf, 0, len) で書き込んだほうが高速になる.BufferedOutputStream のバッファサイズは 64K くらいまで.
_ Java ▲
古いメモファイルを発見したのでこっちに移動.
(1) javax.swing 系コンストラクタは L&F (Look and Feel) File Loading Thread で動作する.
(2) Class.getName(), Thread.currentThread() は native call を含むため,呼び出しコストが大きい.Class.getName() については,HashMap.put(obj, obj.getClass().getName()) などのように結果をキャッシュして高速化できる場合がある.Thread については,なるべく使わないようにするしかない.
2003-08-13 古い日記からの変換データ [長年日記] ▲
_ AOSD ▲
aosd-discuss MLで,Aspects and the Event-Driven Model という Subject でJody Sharpe が,イベントドリブンモデルとの違いは?という質問をしていた.
Gregor Kizales の投稿によれば,イベントドリブンモデルでは,イベントが発生したことを知らせるためのメソッド呼び出し文などが各所に分散する.また,AOP では,「何がイベントか」(pointcut 定義)と「イベントに対して何をするか」(advice 本体の定義)が分離されている点も特徴である,とのこと.
Events と AO の違いはAspect-Oriented Dependency Inversion:http://www.cs.ubc.ca/~kdvolder/Workshops/OOPSLA2001/submissions/12-nordberg.pdfが実は詳しかったらしい.
2003-08-14 古い日記からの変換データ [長年日記] ▲
2003-08-15 古い日記からの変換データ [長年日記] ▲
2003-08-17 古い日記からの変換データ [長年日記] ▲
2003-08-18 古い日記からの変換データ [長年日記] ▲
_ bun45 ▲
まったく最近進展(状況の変化)がないので,bun45 サーバ管理関連の残りの課題を整理する. ・次期管理者探し・文学部統合サーバへの移行はどうなった? という二点.前回,ディレクトリ構造の改変をして/usr/local/cgi 以下 => /home/httpd/cgi-bin/seiyousi/util /home/httpd/html 以下 => /home/httpd/html/seiyousi /home/httpd/cgi-bin 以下 => /home/httpd/cgi-bin/seiyousiと変えたので,統合サーバへはファイルコピーだけでいける……はずなのだが.サーバ移行の話はどうなったのだろう. ディレクトリの置換作業は,次のように実現.手抜きだなー.
sed s/\/usr\/local\/cgi/\/home\/httpd\/cgi-bin\/seiyousi\/util/g
2003-08-20 古い日記からの変換データ [長年日記] ▲
_ OO2003 ▲
OO2003本会議1日目.基調講演は Bertland Meyer で,Trusted Component という話.よいコンポーネントとは何か,とか色々.
午後から,Web アプリケーションのセッションに参加.・フレームワークを作ってやると再利用性が上がる.・デバイスごとのページを,設計時に生成しておくのではなく, 実行時に生成することで管理が楽になる.・デバイスごとのページを,デバイス非依存モデルから デバイス依存モデルへ,と落としていく.・みんな Struts を使っている.というような感じだった.
さらに,パターン系の人々のパネルディスカッションに参加.建築でのデザインパターンとの対比が面白かった.家のユースケースとして雨風をしのぐ,というのは書けるけど明るさがどうこう,というのは実は書けないとか,パターンランゲージはGUIデザイナのためだけのものではないとか,ソフトウェアのほうが,建築よりも分析と設計の間のギャップが大きいとか,システムに対する要望を一貫して保持するコーディネータが必要だとか,建築の世界では実はデザインパターンというのは意外と少数派だったりとか,ソフトウェアで使ってる人のほうが知識の整理に使えるとか色々な考えを持っているとか,色々な話がぽんぽんと飛び出してた.話に乗ってる人々,みんなすごいなぁと感心.
_ OO2003 ▲
初日は Meyer による Eiffel チュートリアル.ツールのインタフェースがちょっと格好よかった."Multiple inheritance is easy" とかあっさり言うあたりがすごいかも.AOP については,「アーキテクチャをいじらずに,外側から(ソフトウェアを良く知ってる人が)ソフトウェアを改変するもの」という感じの認識らしい.アスペクトがいっぱいあると保守しにくそうと思っている様子.純粋にオブジェクトだけで頑張るタイプの人なんだろうか.
アスペクト指向といえば,福岡工大の趙先生に,研究室の名前とAOPやってます,というだけで名前を当てられてしまった.実は密かに有名だったりするんだろうか?
2003-08-21 古い日記からの変換データ [長年日記] ▲
_ IE ▲
セキュリティホールに伴う WindowsUpdate が2つばかり出てるのだが,bMobile ではダウンロードするのが大変なので出張が終わるまで見送る.研究室のマシンも,いつもならリモートデスクトップ~とか使うところだが,こっちも bMobile では手が出ない(たぶん).
_ OO2003 ▲
発表が無事終了.IBMの方に興味を持っていただけたので,名刺だけいただいて,後でメールでツールのURLを投げることに.
懇親会で,名前だけは知っていたhttp://dolphin.c.u-tokyo.ac.jp/~kazu0/ の作者の人に会う.実は同い年でびっくり.一杉さんらと AOSD-JP (?) メーリングリストを発足させよう,ということで合意を取った.実はこれが最大の成果かもしれない :-)とりあえず,用語(Crosscutting Concerns など)の和訳を統一できたらいいなぁ,などと思う.こういうのは一人ではできないし.
東工大の千葉先生の Join Point = 結節点,というのは初めて聴いたけど,何となく正しいような気がする.
2003-08-23 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
Exception Handling in Object Oriented SystemsECOOP2003 の Workshop の文献を消化,その2.
Johannes Siedersleben:Errors and Exceptions -- Rights and Responsibilities
概要は次の通り.
みんな例外を正しく使っていない.一番よいもので,ある種のロギングという程度で,何もしないものも多い.
コンポーネントが何をしてよいか分からない(Emergency)ときに例外を使うべきである.また,これらの例外はできるだけ早く検出するべきである.
アプリケーションエラーは,場合の数が限定されるので,動作の失敗を返すだけなら,戻り値でよい.戻り値で返せないときだけ例外を使う.また,アプリケーション関連の例外だけは直接の呼び出し主が捕まえ,外へ出してはいけない.(戻り値の一種という以上の意味を持たせてはいけない)
Emergency 例外のチェックを行わないコンポーネント群をRisk Community というかたまりで考える.ある Risk Community へは,Safety Facade という例外を吸収する Facade オブジェクトを介してアクセスする.(Facade は Emergency 例外 -- RuntimeException -- を吸収する)
事前・事後条件について,事前条件は,呼び出し側と呼び出される側とどちらが働くかの取り決めで,失敗した場合は ViolatedPreconditionException を生成すると良い.事後条件は誤った実装による戻り値から呼び出し側を守るためにあり,事前条件と役割が異なる.
例外を扱う10個のルール:
1. Emergency とアプリケーションエラーは区別する.
2. Emergency はできるだけ早く捕まえる.
3. 事前条件が違反された場合は呼び出しを失敗させる.
4. 入力パラメータは,通常は null でないと仮定する.
5. Risk Community は Safety Facade を介してアクセスされる.
6. Emergency を捕らえるのは Safety Facade に任せる.
7. Safety Facade は,事前条件違反以外のすべての例外を捕まえる.
8. アプリケーションエラーは,できるだけ戻り値で表現する.そうでない場合,Checked Exception を使う.
9. アプリケーションエラーはすぐに捕まえる.
10. 制御フローを扱うために必要でない限り,例外クラスを勝手に作らない.
_ 論文 ▲
Exception Handling in Object Oriented SystemsECOOP2003 の Workshop での論文を消化.
Ricardo Mendonca da Silva, Paulo Asterio de C. Guerra and Cecilia M. F. Rubira:"Component Integration using Composition Contracts with Exception Handling"
Computational Layer, Coordination Layer, Application Layer と三階層に分けて,Computational Layer にコンポーネントを置いて,そのサービスを Coordination Layer にあるComposition Connector が連結し,処理を行う.で,クライアントコンポーネントはApplication Layer に置かれる.
ここで,Composition Connector はComposition Contract Component を使って構成されるらしい.Contract をコンポーネントで表現してるとこが新しいのかな?と,ちょっと良く分からないが.
2003-08-25 古い日記からの変換データ [長年日記] ▲
_ OO2003 ▲
OO2003 のパターン関連ツールデモンストレーションとして紹介されていたツールのメモ.
Pattern Studio for Eclipse: Eclipse でデザインパターンを適用したコードを生成する. コードの生成にたまに失敗する,らしい.
Borland Together: デザインパターン適用ツール.Eclipse用のバージョンでは デザインパターン検出とかもできるらしい. 商用だけあって,いい速度で動作しているし, パターンのカタログも充実していた. しかも,メタデータを使わずに(変なコードを生成せずに) 動作するあたりがかなり偉い.
PTIDEJ: ソースコードからのデザインパターン検出ツール. もちろん,検出率は100%ではないらしい.
これに対する意見,要望,疑問は,
・使えるデザインパターンをどれだけ知っているか?
・知らないパターンを使えるようになるか?
・適用されているデザインパターンを「除去」できるか?
・デザインパターンの「再発明」をユーザに見せられるか?
といったところ.パターンといっても,GoF 以外のはほとんど知らないので本当に使いきれるのかなぁ,と疑問ではある.
_ OO2003 ▲
OO2003 で集めた情報その2.
ポストオブジェクト技術のセッションでの発表:
オンデマンドなアスペクトウィービングを使ったWebシステムのパーソナライズの話:・動的ウィーブで,必要なところだけキャッシングして高速化・クライアントごとに別クラスローダを用意して, 別アプリケーションとして認識させるらしい.・JIT Aspect Weaver を使うことでウィーブのコストを下げる.
しかし,問題として,・生成したアプリケーションの生存期間をどうするか.・クライアントの数が多くなったとき, パーソナライズしすぎて死ぬ?といったものを挙げていた.生存期間をアクセス頻度などから推定するとかするんだろうか.ちょっと面白そう.
_ Mixin によるプログラミングの話: ▲
Mix-in = 抽象サブクラス,という説明はとても面白いと思う.Mixin を追加した Java (Javaへ変換する形で実装可能)McJava: http://kumiki.c.u-tokyo.ac.jp/~kamina/mcjava/を実装したらしい.
合成されるクラスにインタフェースを requires セクションで要求できるらしい.Mixin ID requires Interface { ... }合成は ID::ID::ID というようにMixinとクラスの識別子を連結するだけ.
関連研究の調査が充実していた.ABT: Sullivan, Abstract Behavioral Type -- イベントを定義しておいてイベントをListen したい人を登録しておけるようにする.クラスをあらかじめ ABT にしておかないといけない.
AspectJ : AspectJ では Aspect はファーストクラスでないのでオブジェクト間の関係のインスタンスが書けない?とか言っていた実は Aspect は class Aspect のインスタンスだし関係オブジェクトは素直にブジェクトにすればいいのになぁ,と思う.
Epsilon モデル: Ubayashi, N. et al., 2001役割,役割間の関係を分離するらしい.暇があったら見てみよう.
クラス(デザインパターンなど,インタフェースによる分離)による実装とMix-In による実装とで,結合度とかが違うのか?という質問があった.アスペクト使った場合もそうだが,実装方法にかなり依存しそうで,Mixin 使わないとできないこと,は少ないような気がする.
_ OO2003 ▲
OO2003 で集めた情報の整理,その1.
チュートリアル:アスペクト指向ソフトウェア開発:
デザインパターンのうち,オブジェクト間の連携に関するものは AOP で書こう,というのを考えている人は多いらしい.
デザインパターンの典型的な実装問題として,継承ベースでの構築はアプリケーションの基本機能を再利用できない.(例: 一度 Observer にしちゃうと,再利用するときに Observer はいらないよーとは言えない)
しかし,継承でObserverを実装している場合のような,型の安全性を捨ててるように見受けられる,という意見もあったり.そんなことはないと思うのだが…….
挙げられていた参考文献はたいてい読んだことがあるものだった.
サブジェクト指向に関しては: Harrison, W., Ossher, H. (IBM)Subject-Oriented Programming- A Critique of Pure Objects, Proceedings of OOPSLA 93
ロールモデルに関して: ロール実現に使う基本的な手法 Kendall, E.:Role Model Designs and Implementations with Aspect-Oriented Programming, OOPSLA 99
アスペクトでメンバを導入したりして実現するテクニック集
Katara, M. "Architectural Views of Aspects", AOSD2003
アスペクトの観点からアーキテクチャを設計 -- ロールベースのアイディア aspect architecture == view type の一種,アーキテクチャを設計するための要素とその間の関係を定義.
Aspect-Oriented Design: 設計のレベルでアスペクトを使う,-- ウィーブを設計レベルで,あるいは言語で,というように選択肢はあるらしい.
2003-08-27 古い日記からの変換データ [長年日記] ▲
_ FSE ▲
FSE はなぜシングルトラックなんだろう,と思っていたら先生に「それが売りの会議だから」と言われた.
あまり関連のない分野の話も聞いてみる機会という意味ではいいのかも.シングルトラック→論文発表可能数が少ない→競争率が上がる→論文の質も上がるはず.FSE のほうが ICSE よりも引用したくなる論文が多い気がするのも,そのせいだろうか?
2003-08-28 古い日記からの変換データ [長年日記] ▲
_ AspectJ ▲
AspectJ 1.1 での intertype declaration の微妙な変化のことをドキュメントに追加.まだ Introduction という表現になったままだったので,Introduction -> intertype declaration に修正.
_ AspectJ ▲
aosd-discuss ML にて,Obliviousness Principle in Aspect-Orientedというスレッドで,
Join Point というのはアプリケーション拡張のためのインタフェースの一つで,最終的なシステムがちゃんと動作するためには,クラスに private, public というアクセス制御があるように,Join Point にも何らかのアクセス制御が必要なのではないだろうか?(オブジェクトがアスペクトに「侵入」されるのを防ぐ方法などもあってもよいのではないか)
という話が出ていた.でも,過去の議論によれば,
「ソースコードを変更しないでね」と宣言するようなメカニズムを作ることは可能だが,実際にそれでよいのかというのは疑問.「予期せぬ変更」はAOSDの裏にある問題でもある.結局,明示したとして,「意識的な変更」を妨害することはできても,予期せぬ変更を防ぐことはできない.
……ということで,あっさり流された感じがする.