netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2003-11-25 古い日記からの変換データ ▲
_ Calendar ▲
ベクターで公開中の hyCalendar の記事は11/26 の朝8時頃に公開予定だそうな.
http://www.vector.co.jp/magazine/softnews/031126/n0311264.html
2004-11-25 古い日記からの変換データ ▲
_ SIGSE出張 ▲
ホテルウィングインターナショナル後楽園はかなり便利な位置にあることは判明.ただ,無線LANがあるのにDHCPが死んでるのかIPが取れない.仕方ないので b-Mobile を使う.
1Fの部屋は一部携帯の電波が届かないことがある,という但し書きの通り,携帯電話やPHSは窓際(ベッドの上)なら接続できるがテーブルからではアクセスできないみたい.微妙.
_ [論文]Traits の実際の適用 ▲
Emerson R. Murphy-Hill, Andrew P. Black:Traits: Experience with a Language Feature.Companions of OOPSLA 2004, pp.275-282.
本会議のほうではなくショートペーパーなんかが収録されている Companion のほうの論文.
メソッドの集合を扱う Traits を実際に使って,文字列の連結をツリー構造として扱う Rope というクラスをString と一緒に定義してみたという話.
String と Rope では,同じような特性を持っているので横断したような部分を Traits に取り出している.結果としては,Traits は理解しやすい概念でコードの再利用も容易だった(Traits の中のメソッドを使った数が多かった)が,Traits は black-box 的に使いたくなるので,String と Rope の構造にあわせた改造というのができず,非効率的な実装になってしまう可能性があったらしい.(Traits を使わない場合は,コピーしてから実装に合わせて書き換え,という形式になっている)
また,Traits の情報を見ることができるツールなどとセットでないと難しいだろう,とも述べている.
アスペクトによる実装についても少しだけ触れられていて,アスペクトの場合は Rope のツリー構造とツリーのバランス調整機能をきれいに分解はできたけれど,バランスを調整するアスペクトのほうは,Rope クラス決め打ちの実装になってしまって,再利用は Traits のほうが楽だろう,と述べていた.
_ [論文]Generics クラスの型パラメータの自動決定 ▲
Alan Donovan, Adam Kiezun, Matthew S. Tschantz, Michael D. Ernst:Converting Java Programs to Use Generic Libraries.Proceedings of OOPSLA 2004, pp.15-34.
Java Generics の登場にあわせたプログラム変換についての論文の1本.クラスを Generics クラスに書き換えたときに,それを使っているクラスに適切な型パラメータを付与できるよう自動で型推論を行うというもの.
アルゴリズム的には,各変数の Points-To セットを作って複数の取りうる型がある場合は共通の親を取って,というもの.ただし正解は1つ以上ありうる(一番緩くするか,一番厳しくするかなど)ので型キャストができるだけ減るのがいいのだろう,という立場で考えているらしい.
論文としてはそのアルゴリズムの解説.結果のお役立ち度はそれなりな感じがする.テンプレート化(総称型の導入)リファクタリングを行うときには,この種の技術を使うのが正しそう.
_ [論文]Vertical Profiling ▲
Matthias Hauswirth, Peter F. Sweeney:Vertical Profiling: Understanding the Behavior ofObject-Oriented Applications.Proceedings of OOPSLA 2004, pp.251-269.
オブジェクト指向プログラムではシステムの提供する機能を仮想化して取り扱う(スレッドやガベージコレクションなど).で,システムの複数のレイヤから集めたデータを一緒に調べれば,システムの性能についての理解が深まるだろうという話."Vertical" と付いているのは,システム階層を横断して情報を集めることから,らしい.
たとえばキャッシュのヒット率と1サイクルあたりの完了命令数とスレッドの切り替え数とか,パフォーマンス系のメトリクスを時系列に一緒に並べて相関を調べたりする環境を構築している.
ケーススタディでは,主に Virtual Machine レベルとハードウェアレベルのデータを見比べることに使っている.パフォーマンスチューニングなんかの使い道か.
_ [論文]実行時のフェイズの認識 ▲
Andy Georges, Dries Buytaert, Lieven Eeckhout, Koen De Bosschere:Method-Level Phase Behavior in Java Workloads.Proceedings of OOPSLA 2004, pp.270-287.
プログラムの実行履歴をある程度の大きさで(時間消費量を基準に)フェイズに区切って,それぞれのフェイズでのパフォーマンスメトリクスを調べて(たとえばキャッシュのヒット率とか),どのあたりにボトルネックがあるとかを調べる手法の提案.
Java では Runtime 環境も含まれるので,過去の C などを対象にした研究よりも難しい,らしい.
関連研究で,この手のフェイズ分割手法についていくつか触れられているのだが,固定時間間隔で区切る方法や,実行時間が一定の閾値に達するような手続きを基準に分解を行うものが多いよう.
実行履歴のフェイズへの分解については,目的は違うが,このあたりの関連研究は調べてみる必要がありそう.
_ [論文]単位計算用クラスの導入 ▲
出張前に,一部放置していた論文を消化.
Eric Allen, David Chase, Victor Luchangco, Jan-Willem Maessen, Guy L. Steele Jr.:Object-Oriented Units of Measurement.Proceedings of OOPSLA 2004, pp.384-403.
いわゆる単位系(時間・距離など)を数値計算に導入する仕組みとしてメタクラスと総称型を使うことを提案した論文.
次元パラメータ D を受け取る Unit メタクラスを使って,Mile や Meter は Unit[Length] に属するクラスとして,Second や Minutes は Unit[Time] に属するクラスとして定義する.
で,あとは単位の組み合わせを扱えるようにCanonical form(Length * Time * Length^-1 == Time など)を定義したり型変換関数を定義したり,各単位の次元値をパラメータ化してLength^n (int n) のような動的な型の表記を可能にしたり,といったことをしている.
このアプローチの場合,メタクラスが一つの次元を整理してくれるので,摂氏・華氏のような単位混在も可能だし,ログスケール系への拡張も容易である,らしい.言語の拡張が含まれるのでいきなり導入して使えるというものではないが.
2005-11-25 ▲
_ [論文] 状態に基づくJoin Point Model ▲
Noorazean Mohd Ali, Awais Rashid: A State-based Join Point Model for AOP.
Proceedings of Workshop on Views, Aspects and Roles (VAR) (held with ECOOP 2005).
オブジェクトの状態変数に基づいて状態機械をモデル化し,状態遷移に対してアスペクトを定義しよう,という提案.オブジェクトの具体的な変数値と状態機械を対応付けるモデリングのためのアスペクトと,その状態遷移に対してアドバイスを関連付けるアスペクトを組み合わせて使う.アドバイスとしては,特定の状態遷移や,状態遷移の列(transition flow)への対応が可能としている.
event-based でのメソッド呼び出し列を状態遷移としたオートマトンを構築する試みとの違いとしては,複数のメソッド呼び出しによるデータ操作などイベント列では定義しにくい状態遷移をうまく表現できる可能性がある.
メソッド呼び出し列による状態遷移の定義で作った状態遷移モデル+JML などを使った事前条件や事後条件としての変数値の状態の指定と,このデータによって定義された状態遷移モデルとを付き合わせると,ちょっとした比較ができるような気がする(できてどうなるかは不明だけど).
2006-11-25 ▲
_ [近況] 雪が降りました. ▲
冬の滞在先は温暖な地域にしておけば良かった,と少し思わなくはないです.
しかし,研究の参考文献としてリストアップした良さげな論文は全部UBCの関係者(既に他所へ行った人含む)のものだったので,ここを選んで正解ではあったと思います.
_ [hyCalendar] 1.5βから1.5リリースの差分(予定) ▲
ご意見をくださった皆様,ありがとうございました.
日付カウントダウン機能について,以下の3点を実装中です.来週ないし再来週には出せるんではないかと思います.
(1)「誕生日まであと10日」のように,日付/周期予定に対して別名を指定するオプションを追加します.
(2)指定した日を過ぎたら自動で翌年の同じ日までの日数を出すオプションを追加します.
(3)編集方法が少し変わります.現在は項目を設定して「追加」ボタンを押す形ですが,これからは「新規」ボタンを押すとアイテム追加,項目の情報を操作すると即座に反映(保存などのボタンなし)となります.