netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2005-12-13 [長年日記] ▲
_ コントロールパネルのアイテム ▲
「オーディオとマルチメディアのプロパティ」なんかをプログラムから開くのはどうするんだろう,と思っていたら,@ITにコントロールパネルのアイテムをコマンドラインから呼び出す方法の解説が書いてあった.ボリュームコントロールを開くのは sndvol32.exe でいけるので,これで実質オーディオアイコンと同等の役割を果たすことは可能だと思われる.
こういう実装を選ぶと,Windows のファイル名に依存してしまうが…….
_ 複数の enumerate 環境のカウンタを継続する ▲
LaTeX で,途中で見出しを入れるとどうしてもenumerate環境が途切れるので,無理やりカウンタ値を保存して継続することにしてみた.
\newcounter{preserved} % 保存用カウンタを宣言 \begin{enumerate} \setcounter{enumi}{\value{preserved}} % カウンタ値を復元 \item アイテム群を書く \setcounter{preserved}{\value{enumi}} % カウンタ値を保存 \end{enumerate} \begin{enumerate} \setcounter{enumi}{\value{preserved}} % カウンタ値を復元 :
2005-12-09 [長年日記] ▲
_ Volume Deskbar が窓の杜で取り上げられる ▲
12月8日の「今日のお気に入り」.70件くらいだったアクセスカウンタが1日で700ぐらい回ったと思うので,やはり影響力の大きいサイトなのだと感心する.
2005-12-07 [長年日記] ▲
_ [ツール]Volume Deskbar 1.0.2 公開 ▲
起動時にツールバーが表示されない(どころか,他のツールバーまで表示に失敗する)というバグ報告をいただいたので,修正.
初期化まわりがおかしいはず,と考えて,Microsoft のコード例と手元のコードを見比べてみたら,使ってたサンプルコードが,IPersistStreamではなくIPersistStreamInitを使っていて,InitNew関数で NOTIMPL を返していた.これは怪しそう,ということで IPrintStreamInit をやめて IPrintStream に変更したら直った(InitNewが消えただけなので他には修正なし).
2005-12-05 [長年日記] ▲
_ [授業]レポートの採点 ▲
ごそごそと作業.
AspectJの課題については,コード自体は普通に書けているという印象.アスペクトのテスト方法を考える,という点については,アスペクトを接続した相手のクラスに他のアスペクトも貼りついていることに気づかず,はまった人が数名いた様子.
Eclipse 特有のトラブルとしては,あるメソッドを参照しているコードを検索するときに,AspectJ のコードが対象にならないことではまっていたらしい.このあたり,ツールが完全に揃ってない点が,授業教材としては難しいのかもしれない.
_ [hyCalendar] 全角文字入りのURLが認識できない問題 ▲
URLに含まれる valid な文字集合に全角文字を含めていなかったので,こけていた.全角文字自体は Delphi の場合,ByteType(str, index) で SingleByte ではない(LeadByte/TrailByteのいずれか)で判定するのが確実?で,valid な文字集合に入ってなくても全角文字の一部ならURLの一部として含めるということになるか.
ただ,URLの直後に全角文字が来ているケースを作られていると,今までに書いたデータでこける可能性があるので,何か明示的なエスケープを使っての導入にしないといけないかもしれない.
2005-12-04 [長年日記] ▲
_ [論文]タスク間の依存関係の解析をソフトウェアモジュールに適用 ▲
Neeraj Sangal, Ev Jordan, Vineet Sinha, Daniel Jackson: Using Dependency Models to Manage Complex Software Architecture.
Proceedings of OOPSLA 2005, pp.167-176, San Diego, California, USA, October 2005.
Dependency Structure Matrix (DSM) という,タスク間の依存関係をチェックするための道具をソフトウェアモジュールに適用してみました,というお話.DSM は,コードクローン分析なんかで使ってるプロット図に似ていて,要素を横軸と縦軸に並べておき,縦軸の要素から横軸の要素へ依存関係があるときに,そこにチェックを付ける.通常,タスクは作業順序をあらわすので,すべての依存関係が対角線より下側に来るように,タスクを並べ替えたり,相互依存したタスクを1つにまとめたりするらしい.
それをモジュール間の依存関係に適用すると,うまく階層化されたシステムなら相互依存関係がないので,対角線より下側にモジュールが整列してくれる.
相互依存した複数のタスクをまとめるアルゴリズムを使って,相互依存したモジュールをグループ化したり,パッケージ単位などで「View パッケージは Model パッケージに依存する」といった設計ルール(A can use B, A cannot use B)を記述したりして,ソフトウェアの依存関係を整理する.
依存関係のパターンを見ることで,うまくインタフェースが整えられたサブシステムであったり,あるいは他のモジュールと相互に依存した問題のある要素なんかを発見できるらしい.
論文自体は,実際にソフトウェアに適用したケーススタディが解説されている.手法自体はシンプルで,モジュール間の依存関係さえ抽出してくれば導入できるので,けっこう便利そう.単なるモジュール間の参照関係の整理以外でも使い道があるかもしれない.
_ [論文] Role の依存関係の明確な定義 ▲
Daniel Chernuchin and Gisbert Dittrich: Dependencies of Roles.
Workshop on Views, Aspects and Roles (VAR 2005) at ECOOP 2005.
静的な Role の活用についての position paper.Role = ロールの名前,属性の集合,メソッドの集合として定義したとき,クラスを Role の集合と,Role 間の依存関係によって定義しようという提案.
Role を一般的な(C++などにおける)クラスとして考えると,この提案でのクラスは多重継承を使って定義されたサブクラスと見ることができる.このとき,複数の Role 間で,常に等しい値を共有する属性を equality 関係としてクラス側に定義する.また,意味的に同じメソッドが存在する場合も,メソッド間の equality を定義する.また,ひとつの Role の属性が変更されたときに,その変更に反応して動作するメソッドを dependent 関係として定義する.
これらを使うと,各処理ではオブジェクトの特定の側面だけを見て処理を実行することができ(るはずで),多重継承なんかよりも Role 間の関係を整理しやすくできるかもしれない.
論文では,これ以外に,継承関係なんかにも言及がある.
_ [ゲーム][OUCC]僧侶&魔法使いでバラモス退治 ▲
戦士・武闘家・商人・遊び人の4人パーティとどちらが楽かという話になって,試みられた結果.
勇者1人でのバラモス退治に比べたら圧倒的に楽と思われる僧侶&魔法使いだが,攻撃が2人に集中し,意外と苦しいことが判明(サル相手の修行が必要なかったという意味では勇者より楽だったが).
僧侶はLv30台後半から力が60程度で成長が止まってしまい,バイキルト+ルカニを使っても与えるダメージは100〜130程度.逆に魔法使いはLv30台からHPとすばやさが伸び始めてかなり強くなるものの,メラゾーマは50%くらいの確率でしか効かないので倒すのは難しい.
結局,魔法使いは1ターン目に僧侶にスカラをかけ,あとはバイキルトを僧侶にかけてからモシャスで僧侶に変身.その間に僧侶はラリホーでバラモスを眠らせ,フバーハ,マホトーン,ピオリム,マヌーサ,ルカニで戦闘準備.
僧侶が攻撃し続けてバラモスの自動回復100をキャンセルし,僧侶に変身した魔法使いはベホマで味方を回復しつつ時々バギクロスで攻撃支援という長期戦でぎりぎり倒せた.とはいえ,マヌーサで攻撃を何度も回避したり,バギクロスが最大ダメージが出たりと,かなり幸運には支えられている.
モシャスを使うと,攻撃力や防御力,使える呪文はコピーするが,装備による魔法・ブレス耐性,スカラなどの魔法による上昇分はコピーされない.また一度死んでもモシャスの変身は解除されない.このあたりの細かい特性のおかげで,スカラとバイキルトを僧侶にかける(スクルトを使わない)といった戦い方になっている.今回は関係なかったが,ドラゴラムを使った場合も,防御力とすばやさが変化するので,スカラの効果などは失われる.マホカンタの効果は,これら変身によって消えることはない様子.
僧侶はゾンビキラー,まほうのよろい,みかがみのたて,てつかぶと,Lv41.魔法使いはどくばり,てんしのローブ,ふしぎなぼうしでLv42.2人ともHPは230程度,MPは220程度.
ちなみに,魔法なしパーティのほうは,防御攻撃のおかげで,Lv30台前半で勝利している.こちらはくさなぎの剣+攻撃だけ.バラモスまで薬草が足りないので(途中のバリアのせい),わざと死んでせかいじゅのはを使うといった小技が必要らしい.