«前の日(01-28) 最新 次の日(01-30)» 追記

netail.net

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

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


2003-01-29 古い日記からの変換データ

_ 読書

対外発表の準備をしながら読書も進める.借り物の茅田砂胡「神々の憂鬱・暁の天使たち2」を読了.スカーレット・ウィザードとデルフィニア戦記というまったく無関係に見える作品をまとめあげているのはすごい.わざわざ別作品でも十分なはずなのだが,そこに独特の味があるともいえる.


2004-01-29 古い日記からの変換データ

_ Eclipse

Eclipse 3.0M6 をインストールしてみた.が,2.1 で導入された Update Manager がなかったりとか,まだ微妙な印象.(なくても大丈夫なんだけど)

_ COE

Bio-ADIT のストリーミング配信を見てみた.もうちょっとスライドを拡大して配信しておいてくれればいいのに…….

_ Calendar

0.6.6 を目指しての作業が一段落.たいしたこともないバグなのに根は深かった.Windows のスタンバイ/ロック解除を頻繁に使う人間なので直したが,実際には毎回プログラムを終了させるタイプの人には必要のない修正だったりして.

でも,まだリリースまでは時間がかかりそう.いちおうバイナリだけは今月中(あと2日ほどしかないが)に出すつもりだが.

_ Delphi

いろいろ試行錯誤した挙句,次のようにまとまった.・アプリケーションの MainForm としてfrmPlaceHolderを作成.・frmPlaceHolder は,幅0,高さ0. 最小化命令が飛んできたときだけ, 本来のフォームと同じサイズに化けて, アプリ全体を最小化する.・本来のカレンダーフォームは, アプリが最小化されている間は消えている. (表示していると,ビジュアルスタイル変更時に クラッシュするため -- これは VCL のバグだろうか?)・カレンダー画面表示中にビジュアルスタイル変更が来た場合, 一度画面を消してから再表示する. (メッセージは1回ではない場合もあり,  その場合は点滅することになる)・最小化中は(ウィンドウが非表示なので)黙って耐える.


2005-01-29 古い日記からの変換データ

_ [Delphi]SetWindowPos

ウィンドウをアクティブにしないで前面に表示しようとしてSetWindowPos の SWP_NOACTIVATE オプションを使ってみたら,どうも SetWindowPos で表示したときにはVCL の TCustomForm.Visible プロパティが True にならず,しかも子ウィンドウ(フォーム上のコントロール)も背面にいるまま移動してこない様子.→子ウィンドウの振る舞いについては,突然ちゃんと動くようになった.謎.

で,一度不一致が起きると,Close や Hide を使ってもウィンドウを閉じられなくなってしまう.結局,ウィンドウを表示するときは SetWindowPos で全部の子ウィンドウも表示してから Visible = True にして,閉じるときは閉じるときでいちおうSetWindowPos(..., SWP_HIDEWINDOW or SWP_NOACTIVATE) としてウィンドウをアクティブにせずにそのまま消してから手動で Visible = false に設定するように実装した.


2007-01-29

_ [論文] プログラムの自己進化のためのアーキテクチャ

個人的には,プログラムが自己進化する必要は今のところないと思いますが,いちおう夢がある(?)話なので取り上げてみます.

Ming-Yang Hou, Xi-Yang Liu, He-Hui Liu: Fifi: An Architecture to Realize Self-evolving of Java Program. [ACM site]

Proceedings of SEAMS 2006, p.93, Shanghai, China, May 2006.

1ページの Research Summary で,自己進化型プログラムのためのフレームワークを作ってます,というものです.

このフレームワークでは,JVMTI を使って相互通信する2つの JVM を同時実行し,1つをプログラム実行用,1つを監視システムとします.そして,監視システム側は,プログラム実行時のイベント列に応じてプログラム改変が必要かどうかを判定し,改変の指令をプログラム実行用JVMに送ります(改変されるのは実行プログラムのみで,監視用のコード部分は書き換えません).

仕組みとしては,今の Java バイトコード書き換えツールを駆使すればそれなりに実現できそうですし,コードの最適化とか難読化にも使えそうです.実行中のプログラムにパッチを当てるという話に似ていますが,この研究の場合,監視プログラムが,機能改変用のパッチを自動生成するという違いがあります.

自己進化の「コードを書き換えるルールを書く」という観点だけを見ると,静的な操作,たとえばリファクタリング操作をスクリプト言語で書くとか,sed でコードをまとめて変更するいったものであれば,あまり変な気はしません.

プログラムの実行を監視して,随時,動的に書き換える必要がある機能変更ってどんなもの,といって何も思いつかないのが,怪しいと感じる要因かもしれません.原稿では「捕まえられない例外が投げられたらtry-catchブロックの自動追加(エラーを無視して実行を再開する)」というものだけが例として載っています.