«前の日(07-08) 最新 次の日(07-10)» 追記

netail.net

自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.

最近のお知らせ (古いものはこちら)


2002-07-09 古い日記からの変換データ

_ 検索機能

フォームの入力から記号などを全部取り除いて単純 grep する機能を追加してみた.

_ CGI 機能追加

あとはキーワード検索くらいできれば OK ?やっぱり一度 Ruby に直して正解だった.

Perl の場合,関数の引数として渡した値またはオブジェクトが関数の内部で変更される場合とされない場合が区別できないのでどうにも気持ち悪い.また, $size = @array のようなあやしげな変換に耐えられない.このあたりはコード書く人の癖にもよるのだろうけど,こういうのを見ると Perl が使いにくいと感じてしまう.


2003-07-09 古い日記からの変換データ

_ C#

SharpDevelop がかなり頑張ってる様子.こんなのよく作るなー.http://sharpdevelop-jp.sourceforge.jp/

_ 論文

Remi Dounence, Olivier Motelet, Mario Sudholt:"A formal definition of crosscuts"

「プログラムは,ステップごとにイベントを生成する」というモデルを説明した論文.モニタは,イベントのリストをプログラムから受け取って,crosscuts (イベントのリストとして定義される)が発生したかどうかをチェックする.

Crosscutsを定義するための Domain Specific Language を定義していて,実行時には Java としてコンパイルしてしまう.

どうやら,Event-based AOP というタイプらしい.素の Java で記述した Event-based AOP に比べると,DSL にした分,少し抽象的に書けている気はする.あと,cflow の最適化に関して証明が付いてるところもいちおうポイントだろうか.

_ 論文

Andres Farias and Mario Sudholt:"On Components with explicit protocols satisfying a notion of correctness by construction"

メソッド呼び出しの順序と,それによって起こる状態遷移を Protocol として定義するという話.まあ,ここまでは基本的に他のと同じだが,複数のプロトコルを結合(合成)するための形式的な計算法を提案している.これを使えば,オブジェクト間の Protocol をうまく計算できる可能性はある.もちろん,状態定義などをきちんとできれば,だが…….この手の protocol 定義では,例外処理などが定義されていなかったりするあたりが少し悲しいという気もする.

_ 論文

Matthew B. Dwyer, John Hatcliff, Robby Joehanes, Shawn Laubach, Corina S. Pasareanu, Robby, Hongjun Zheng,Willem Visser:"Tool-supported Program Abstraction for Finite-state Verification"出典はICSE2001らしい.

マルチスレッドなプログラムに対する検証を行うために,プログラムを抽象化して必要なところだけ取り出してやろうというものらしい.BASL (Bandera Abstract Specification Language) をJava に変換して,具体的なオペレータをその抽象的オペレータに置き換えたりするらしい.あと,PDG を辿っていって,途中の制御変数では最も影響の強い(数多く使われている)ものだけを残して他を取り除いたり,といったプログラムスライシングを応用したようなこともやっている様子.

しかし,適用対象が小さいプログラムなので,あまり有効性については分からない.

抽象的なオブジェクトに落としていく,というのは"ソースコード縮退" 系の研究には微妙に関連しそうではあるが.

_ AspectJ

pointcut のところに,Jim Hugunin が指摘していたafter/around : handler が使用不可能になった話を追加.追加しようとして,ずっと忘れていた.

また,#hoge 形式のページ内リンクがフレーム有効時にうまく動かなかった部分を修正した.

_ C#

Borland C#Builder が出るらしい.Visual C# .NET のぱっと使った限りでの完成度からして,戦うのは難しそうなのだが,Personal の機能限定版は無償配布らしいので地味に食い込んでいくかもしれない.まあ,使いやすさや,Delphi, C++Builderからの移行しやすさ(ツールの操作の共通性)がどの程度かによって,売れるかどうかは決まってきそうだ.

_ タクシー

GPS 使ってタクシーが駆けつけるサービスとかがようやく実現され始めたらしい.以前は,「できたらいいなぁ」という程度だったのだが,不況→打開策として投資という動きで,しばらく進んでいきそうだ.http://biztech.nikkeibp.co.jp/wcs/leaf/CID/onair/biztech/biz/255498

_ AspectJ

Jianjun Zhao, Martin Rinard:"Pipa: A Behavioral Interface Specification Language for AspectJ"

BISL (Behavioral Interface Specification Language) のひとつJML (Java Modeling Language) を AspectJ に拡張するという話っぽい.

JML は,ドキュメントコメントタイプ.@model instance int x_Mdl; とかいってモデル上での変数を宣言したり, @depends, @represents とかを使ってモデルと実体のフィールドを対応付けたりする.で,メソッドごとに ensures とか定義するらしい.

これを AspectJ に拡張しているのだけれど,advice の先頭にこの振る舞い記述を書けるらしい.

しかし,コード中にいっぱい分岐があると,その分振る舞いの仕様も増えていて,コードと仕様記述が重複していて無駄に見える.invariants とか書けるのは,まあ便利だが.

コンパイル時に AspectJ 記述が Java ソースに落ちるのと同様にJML 記述に落とすようなことが書いてあるが,詳細は不明.また,cflow など一部の join point はサポートしていない様子.

どうやら,この手の仕様記述や assertion の設計としては「動的にチェックするかどうか」といった問題があるらしい.いっぱい関連研究を挙げている.あまり読む気は起きないけど.

結局,この手の仕様記述は,書くかと言われると書かないなぁ.特に振る舞いの仕様記述は,コードと内容が重複するのが問題のような気がする.

_ 論文

論文を斜め読み.Steven P. Reiss and Manos Renieris:"Encoding Program Executions"

実行履歴を使って動的解析するのはいいけど,大量の実行履歴を扱うためには圧縮が必要,ということで色々な圧縮方法を比べている論文.

call/return を ABvCv (v はreturn) と表現する String Encoding,stack trace の中身を tuple で表現するとか,DAG で表現するとかになるらしい.

Grammar Based Encoding は,ICSE2003 の J. Law, G. Rothermel:"Whole Program Path-Based Dynamic Impact Analysis"で使っていたような気がする.

また,Finite State Automata を構成するなんてのも.圧縮率がけっこう違うんだなー.生データで 20G とかあっても,FSA とかに圧縮してしまえば実用範囲内に落ちるらしい.繰り返し回数とかの情報が落ちることを考慮しないといけないだろうけど.

_ 名簿

名簿の原稿の誤植の改訂とか,他人の分の捏造をしたりする.だいぶ GIMP の使い方に慣れてきた.


2004-07-09 古い日記からの変換データ

_ [hyCalendar] 0.8.0 リリース

無事,hyCalendar 0.8.0 をリリース.なんか着実に機能が肥大化しつつあるような気がする.今回は色々変化が大きいのでバグが増えてないか少し心配.Vector とかにも連絡しないといけない.


2005-07-09

_ ACM 加入

もう学生でいるのも残り少ないので,加入してみました.お値段は$42.acm.org の転送アドレスは,卒業したら使うかも.


2007-07-09

_ [Java] 特定のクラスを格納している JAR ファイルを発見する

Ruby スクリプトを即席で作ってみたので,必要な人はどうぞ.JAR ファイルがたくさんある中から,クラスパスに入れる必要がある JAR ファイルを見つけたい場合に使えます.

#!/usr/bin/ruby
 
if ARGV.size < 2
  puts "Usage: findjar [classname] [dirname]" 
  puts "Example: findjar Set ." 
  exit
end
 
classname = ARGV[0]
dirname = ARGV[1]
 
classname = classname.gsub(".", "/")
dirname 
Dir.glob(dirname + "/" + "*.jar").each { |jarfile|
  `jar tf #{jarfile}`.each { |line|
    line.chomp!
    if line.include? classname
      puts jarfile + ":" + line.gsub("/", ".").chomp(".class")
    end
  }
}