netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2002-12-01 古い日記からの変換データ [長年日記] ▲
_ XSLT ▲
Xalan -o hoge.html test.xml test.xslt とやってXSLT をざくっと XML に適用しようとしたら,「euc-jp に対応する文字コードフィルタがないよん」とエラー.仕方がないので UTF-8 に直して通した.しかし,クライアントサイドでは UTF-8 編集のエディタがいくつもあるが,サーバ内で編集しようとすると微妙にエディタがない.emacs も標準では UTF-8 通らないのか.
iconv -f utf-8 -t euc-jp file > file-euc するのとMule-UCS セットアップするのとどっちが楽なんだろう…….とりあえず iconv でしのぐことにする.
_ 紅茶 ▲
ディコム100g を缶に展開したら,あふれた.100g のわりに茶葉が多い.でも以前は入ってたってことは,前に比べて空気などが入って密度が下がってるってことなのかな?
仕方がないので,あまった分(10gくらい?)を全部使ってぜいたくにお茶を淹れてみた.強い香りにくらくら ;)
_ 紅茶 ▲
お誕生日プレゼントでもらったアッサムを飲みきってしまったので,例によってレピシエで紅茶を物色.アッサムはいくつか新しいものも見かけたが,茶葉の外見だけでディコムを選択,100g 購入.ついでにもうひとつ何を買おうか迷った挙句,ウヴァ・ハイランズを選択.とりあえず 50g.これでダージリン,ウヴァ,アッサム,ライチの四種類がストック.
クリスマスシーズン向けのブレンド「キャロル」「クリスマスリース」などが販売されていたが,甘そうな香りはミルクティー向きかな?以前,「キャロル」はいまいち消費しなかったことがあるので,今回はこの系統は見送ることにする.
_ 読書 ▲
「妖女サイベルの呼び声」を読みながら電車に揺られてお出かけ.
途中でいつものように本を購入.最近買いすぎかも.高野史緒「アイオーン」(早川書房)J・グレゴリィ・キイズ「錬金術師の魔砲」(上・下,早川書房)
_ C++ ▲
久しぶりに C++ でサンプルコードを記述.あまりに久しぶりだったので,メンバの可視性指定子(public, private) の書き方を Java と間違えた.
また, Packet p; または Packet p = Packet(); と書く初期化式をPacket p(); と書いたら,どうも関数プロトタイプ宣言と間違われたのか,ひたすら「p はaggregate typeじゃないよ」と怒られて困った.しかし,C++ は実体・ポインタ・参照を思い通りにコントロールできるという点が面白い.全部オブジェクト参照という Java や Ruby も好きなんだけど,たまには C++ のような高機能な言語に触れておかないといけないなぁ.
2002-12-02 古い日記からの変換データ [長年日記] ▲
_ XSLT ▲
XML から HTML を生成した日付が必要なので,Xalan に -p オプションで date コマンドの結果を渡すようにした.
Xalan -p date `date +%Y/%m/%d`とすると,"2002/12/02" というような文字列を数式とみなして割り算をしようとして失敗.色々調べて実験したが,結局
Xalan -p date "string(\"`date +%Y/%m/%d`\")"
というように string("2002/12/02") をパラメータとして渡すことに成功.
2002-12-03 古い日記からの変換データ [長年日記] ▲
_ Java ▲
dW: 【Javaの理論と実践: スレッドはどこへ消えた?】http://ibm.com/jp/developerworks/java/021129/j_j-jtp0924.html
Thread を使うときに try - catch (RuntimeException) をきちんと使う,また ThreadGroup.uncaughtException に予期せぬエラーが発生した場合の処理を記述しておく,というもの.スレッドが気付かないうちに消えてるのを検出するのには,たしかにこの手の処理が必要かも.今まではあまりちゃんと使ってなかった気がするので,これからは注意してみようかな.
2002-12-06 古い日記からの変換データ [長年日記] ▲
_ AspectJ ▲
AspectJ1.1 への移行の影響がajdt (AspectJ Development Tools for Eclipse) にどの程度影響を与えるかが気になってソースを見てみると,AspectJ1.1 でパッケージ構成がかなり変わっていた.
org.aspectj.asm.StructureModel などはそれほど変わってなさそうなのだが…….1.0.6用 AJDT を利用しているコードが1.1で動くかどうかはちょっと怪しくなってきた.
_ AspectJ ▲
1.1になって,実はソースコードに対する aspect weaving も実装としてはバイトコードにコンパイルした後,アスペクトの結合を行うらしい.ソースの情報は保存されるのだろうか?
2002-12-09 古い日記からの変換データ [長年日記] ▲
2002-12-10 古い日記からの変換データ [長年日記] ▲
2002-12-11 古い日記からの変換データ [長年日記] ▲
_ AspectJ ▲
AspectJ 1.1 での変化の話を ~tail/aspectj/ に追加.ドキュメントの実体を XML 化したおかげで,新セクションを意味する subsection タグに文章の中身を書いてmake するだけで目次なども自動生成されるし,日付は make 時に XSLT エンジンに渡すので書き換えコストはかなり軽減されていることを実感.
2002-12-12 古い日記からの変換データ [長年日記] ▲
_ TA ▲
相互通信する二つのシステム内で電源を共有しないと,電源は電位差を保証するけど電圧値を保証しないのでうまく動かない.当たり前だが…….気付かない人は気付かないらしい.
VHDL での状態機械記述も,調べればスマートなサンプルコードが資料に載っているのだが,やっぱり気付かない人は気付かないんだな.
_ Delphi ▲
Delphi で Java の StringTokenizer みたいなのを探していたのだが,こんなサイトを見つけた.微妙な Tips がいくつか紹介されている.そのうち役立つ……かな?
http://delphi.about.com/bltips.htm
_ AspectJ ▲
AspectJ 1.1 の中の bcel って何のパッケージだろう,と思ってたらJakarta プロジェクトの Byte Code Engineering Library だった.http://jakarta.apache.org/bcel
バイトコードインストラクションを抽象的に扱えるので面白そうだが,これを使ってまでやりたいこと,というのは今のところないのでブックマークの肥やしにしておく.
2002-12-13 古い日記からの変換データ [長年日記] ▲
2002-12-14 古い日記からの変換データ [長年日記] ▲
_ NAS ▲
データバックアップ場所として Network attached storage の個人向けはないかなーと思って調べてみたら,I/O Data がそれらしいものを発売していた.解説を読んだ限りでは,組み込み Linux 上で Samba を動かしているだけのような品物らしい.省スペース性にちょっとだけ惹かれる.もっとも,デスクトップPCがある以上,そいつをファイルサーバにしたほうがいいに決まっているのだが…….
_ Eclipse ▲
実装メモ.AJDT, org.aspectj.compiler.base.ast あたりに入っているControlContext が break などのラベル管理,ScopeWalker が変数宣言やメソッド宣言の記録を担当しているらしい.ただ,変数名が実際に指している変数などは AJDT が解決していてVarExpr.getVarDec などで取得可能なので,ScopeWalker 自体は外部から使う必要はなさそう.
Walker クラスから継承して自前で実装するのが基本らしい.
_ Eclipse ▲
プログラムを解析して収集した情報から手ごたえを得たので,研究用ツールの実装を開始.concept proof のために,まず基本的な静的プログラムスライスをやってみることにする.
AspectJ 1.0 ベースでは,基本的に AST の情報から頑張れば,静的解析はいけそう.コンパイル後の AST ノード上では,アスペクトが既に展開されてる節があるのが気になるが…….静的解析としては正しいので問題ない.
とりあえず,メソッド内の通常変数によるデータ依存関係が取れたようなので,ループ文や break文,メソッド呼び出しなどに拡張していくことにする.
それにしても,プログラムスライスツールをスライサと呼ぶのは私だけだろうか……?
_ RPG研 ▲
CDと本の貸し借りのために早起き.よく考えたら昼から行けばいいような気がするのだが,ここ最近,昼前まで寝ることが多いので,たまには早起きすることにする.
久々に買ってきた好物のイングリッシュマフィンと紅茶で朝食.他人には優雅だと言われるが,食べてる本人はそうでもない :-)
本とCDだけ回収して,部室に撤収して作業に専念することにする.
2002-12-15 古い日記からの変換データ [長年日記] ▲
_ Java ▲
finally の中に return 文を書いてもいいらしいという話を聞いて,試しに次のようなコードを書いてみた.
try { return 0;} finally { return 100; }
JDK 1.3.1 添付の JVM で実験した結果は,100が返ってきた.正しいと言えば正しいのだが…….気持ち悪いコードだなぁ.こういうコードも仕様としては正しかったりするので,たちが悪い.
_ wonder-net ▲
Wonder Museum 2 が入金受付開始.今までCD収録されてなかった曲が全収録されてるようなので,さっそく払い込み用紙を書いてみる.
ラジオプログラムを久々に更新当日に聴いてみると,またも投稿を読まれていた.感情を込めて読み上げられるのはさすが本職.書いた側も本望♪しかし,読み上げるSAKURA さんがとても嬉しそうで,聞いてる側も嬉しくなりそうだ ;)
_ LAN ▲
家のファイルサーバを久々に起動してデータのバックアップを取る.ファイルサーバ(Linux)と,デスクトップ(Windows)にデータを分散しているが,最近 Linux の使用頻度が下がっているので,Windows のデスクトップに一本化してもよさそうな気がしてきた.デスクトップもDVD見るのとコンパイラ動かすくらいにしか使ってないが,いい加減あやしくなってきたので,どうしたものだか.
Crusoe の CPU パワー不足を補う外付けコプロセッサでもあればLibretto + コプロセッサ + DVD プレイヤー + 外付けディスク で足りるのになぁ,などとないものねだりをしたくなってしまう.
2002-12-16 古い日記からの変換データ [長年日記] ▲
_ Libretto ▲
部室にて,電源アダプタを家に忘れたことに気付く.コンパイラはディスクアクセス多い上に処理が重くて結果的に電力消費が激しいので,これじゃ開発作業ができない…….仕方ないので,資料集めと設計を行うことにする.
2002-12-17 古い日記からの変換データ [長年日記] ▲
_ Eclipse ▲
Eclipse をフラッシュメモリから起動してみた.結果は,悲惨なほど遅い.やっぱり読み込みが遅いのが致命的で,プラグインを lazy に読み込みにいくたび処理が止まる.加えて,頻繁にファイルを保存するので,その処理も重い.やっぱりリムーバブル HDD で移動して,C:\Eclipse などにマウントしてしまうのが楽だろうか.
_ Eclipse ▲
どの JRE で実行するかを Preference から与えたつもりが,実行時コンフィギュレーションとしてどの JRE を使うかを変更していなかったので「JREが見つからないよ」エラーが出ていた.ちょっとショック.
_ wonder-net ▲
更新1ヶ月前に投げるって書いておいて2週間遅れた段階で問い合わせてみたら「まだ投げてませんでした」と帰ってきた.こんなことで運営大丈夫かしらん :-)
私が strict に構えすぎなのかな?
_ Eclipse ▲
メニューを追加する方法が分からなくて大苦戦.結局,plugin.xml の中にextension タグを書いて,editorContributiontargetID="org.eclipse.jdt.ui.CompilationUnitEditor"というようにしてどこに追加するかを選び,action タグに実際に実行されるクラスをclass="AspectGraph.actions.SliceCalculation"というように書いておくらしい.で,このクラスが IEditorActionDelegate とか特定のインタフェースを実装していればOK.これをやるだけで1時間以上かかってしまった.
2002-12-18 古い日記からの変換データ [長年日記] ▲
2002-12-19 古い日記からの変換データ [長年日記] ▲
_ C# ▲
C Magazine のεπιστημηさんの記事で,C# の delegation の実装例が載っていた.
delegate void update(int value); event update changed; // -- update オブジェクトの集合 changed(count); // -- changed に格納された update を呼び出す // -- printer オブジェクトの print メソッドは update のシグネチャを満たす changed += new update(printer.print);
とかいう感じ.これ,感触としてはAspectual Collaboration の expected インタフェースなどとすごく近いような気がする.ちょっと感心.
2002-12-20 古い日記からの変換データ [長年日記] ▲
_ AspectJ ▲
AspectJ のサイトが,いつの間にやらeclipse.org に移動してしまっていた.メーリングリストのアーカイブを見るのにニュースグループのアカウントがいるらしいので,さっそく申請.
_ リンク ▲
アスペクト指向についてリンク集がないかなぁと探してたら,Mix Juice の一杉さんのサイトにあったものを発見.http://staff.aist.go.jp/y-ichisugi/ja/mj/soc.html
関連研究がいっぱいリンクされていて,たいへん参考になる.見習わないといけないかも.
_ Eclipse ▲
落とし穴をひとつ発見.って,AspectJ でないので書く場所がない.
ファイルの絶対パス名から,それがプロジェクト内のどのファイルかを取得しようと,プロジェクト内のファイルを表現するFile(java.io.File ではない)を使って実装しようとしていたのだが,project_root.getFile(filename) で絶対パスを与えてオブジェクトを探しても,実際にはプロジェクト内のものとはみなされない.プロジェクト内部のファイルは標準では相対パスで保存してるためだろうか.
それ自体は特に問題ではなかったのだが,この絶対パスを与えて作った File オブジェクトに対するファイルの絶対パスを受け取る File.getLocation() の戻り値が,与えたはずの元のパスではなく,なぜか Workspaceのディレクトリ + ファイルのフルパスとなるような意味のないパスが生成されてしまっていて,しばらくはまった.たしかに,通常の File は相対パスを格納しているからその実装は分からなくもないが…….
結局,ワークスペースのあるディレクトリの位置をWorkspaceRoot や Project といったオブジェクトが保持していてくれたので,そのディレクトリ分を絶対パスから削って取得することになった.
2002-12-22 古い日記からの変換データ [長年日記] ▲
2002-12-24 古い日記からの変換データ [長年日記] ▲
_ クリスマス ▲
ハイデルベルグ・クリスマスマーケットに行ってきた.新梅田シティの空中展望台のすぐ側.寒い中,暖かいグリューワインがおいしかった.赤ワインにシナモンやレモンなどを入れたものらしい.子供向けノンアルコールのキンダーグリューワイン(そのままだが)もあって,お酒に弱い人でも楽しめるようになっていたところもポイント.店の前や横に立食用のテーブルがいくつも並んでいて,何となく色々な人と喋るスタイルが私はけっこう好きだったりする ;)
夕方からのライトアップがとてもきれいだし,ドイツの色々な品物が売られていて,にぎやかなお祭りという感じがして面白かった.
夕食はイタリア料理のオステリア カラバジオのクリスマスディナー.テーブルごとにキャンドルが置いてあったりして,けっこう雰囲気にも気を遣っているお店だった.けっこうにぎやかで気楽に入れるところがよいなぁ.予約してなかったら全席埋まってたかも.
グラスワインの赤が標準で常温のフルボディなものだったし,ちゃんとワインの種類によってグラスも違うし,ワインもリスト以外に「その他」で色々頼めるようだし,色々こだわりを感じさせてくれるいいお店だった.
ちょっと値段は高かったが,その価値はあったというのが主観的評価.http://www.kes.co.jp/osteria/default.htm
_ Graphviz ▲
グラフ出力ツール Graphviz を使ってみた.入力として,digraph graph_name { "vertex 1" -> "vertex 2"; "vertex 2" -> "vertex 3" [ label = "hoge" ];}というようなテキストを与えるだけでそのグラフの絵を gif や ps などで生成してくれるので,とても便利.論文書くときなどにはお世話になりそうなツールだ.
_ Eclipse ▲
今日のはまりは org.aspectj.compiler.base.ast.Walker .いわゆる Visitor パターンのインスタンスで,ツリー構造の AST に, ast.walk(walker); と使う.時々ノードによって ast.getChild(1).walk(other_walker) というようにwalker を切り替えるコードを書いていたのだが,walker がそのノード自身も対象とすると思い込んでいたせいで,途中が一段飛ばされるのはなぜだろう?とひたすら悩んでしまった.結局,デバッガで walk の実装を見たときにそのノード自身は対象としていなかったことに気付いた.
教訓は,仕様はきちんと確認しろ,ということだろうか.
2002-12-25 古い日記からの変換データ [長年日記] ▲
_ モジュール整理 ▲
パッケージの名前付けで悩み始める.システム内の「ある機能の GUI 部分」とするか「GUI のうち,ある機能を利用するための部分」のどちらにするべきだろう?
前者だと,こう. function1.actions, function1.gui, function2.actions, function2.gui
後者だとこうなる. actions.function1, actions.function2, gui.function1, gui.funciton2
やっぱり「どちらも actions である」ということと「どちらも function1 である」ということのどちらの意味が大きいかで決めるのだろうが,どうやって量るべきだろう?
2002-12-26 古い日記からの変換データ [長年日記] ▲
2002-12-27 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
研究会の原稿を先生に渡して,最終チェックをお願いする.他の事務書類は全部預けたので,あとは最悪,実家に帰っても作業可能だ.
これで次の原稿に取り掛かれる :-)
それにしても,「工学博士」っていう表現は使わなくなったのね.全部「博士(工学)」に統一されたらしい.
2002-12-29 古い日記からの変換データ [長年日記] ▲
_ 大掃除 ▲
実家に帰る前に下宿の大掃除.ついでに部室でも大掃除.「1年使わなかったものはこれから1年も使わない確率が高い」という基準でがんがん捨てるものを決めていく.
下宿のほうでは,買った本がかなりたまっているのを実感.部室のほうは,散らかりすぎというか,ゴミが多すぎ.
_ お菓子 ▲
人から鳥取旅行のお土産をもらった.鳥取県境港市は水木しげるの故郷ということで「目玉おやじの棒付き飴」.目玉をあしらったブルーベリー味の棒付きキャンディだった.まあ見た目はともかく,普通の味.
これをもらったついでに,天保山マーケットプレースで一緒におやつを食べる.たこ焼きコロッケとかいう一口コロッケの中に蛸が入っているという品を食べて,それからカフェ デュ モンドでベニエを食べた.ベニエは普通に美味しい.パウダーシュガーで手が真っ白になったけど.
で,「なにわ名物開発考社」でたこ焼きゃんでぃとたこ焼きようかんを購入して帰った.
たこ焼きゃんでぃのほうは,「うまい棒のたこ焼き味がずっと続くような感じ」と評される.生姜が素で入っていて,後味がとても悪い.
たこ焼きようかんは,ソースやら海苔やらが全部入ったようかん.味としては,たこ焼きエキスを注入したような羊羹.一言で言うと不味い.これが人気No.1というのは非常に嘘っぽいが……珍しさではトップだから売れるのだろうか.
2002-12-30 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
さっきの論文に関するメモの続き.久しぶりに長い.
アスペクトの結合演算は,Seq, Any, Fst, Cond の4つ.Seq はAspect1 を実行した後に2を実行する.Any はどちでも好きな順序で実行する.Fst は,1,2 の順に実行するが,もし isCrosscutting がセットされたらそこで終了する.たとえば,new Fst( 懸賞当たったら無料アスペクト, 安売りキャンペーンアスペクト );のように左側のアスペクトが効果を発揮したら後者の意味がなくなるような場合に使う.逆に,左側が作動しない限り右側が動作しない Cond というのもある.new Cond( すべての学生に必要なデータ加工, 大学院生専用の追加事項出力 );
pointcut の指定については,regular crosscuts というものを以下の論文で提案しているらしい.F. Douence, P. Fradet, M. Sudholt:``A framework for the detection and resolution of aspect interactions'', Proceedings of the 27th ACM SIGPLAN/SIGSOFT Conference on Generative Programming and Component Engineering (GPCE), October (2002).今度チェックしてみよう.
_ 論文 ▲
実家に帰る途中,新幹線の中,暇なので論文読み.
Remi Douence, Mario Sudholt:``A model and a tool for Event-based Aspect-Oriented Programming (EAOP)''
アスペクト指向プログラミングを,「イベント」を join points として実現しようというもの.実行モニタが,メソッドとコンストラクタの呼び出し・リターンのようなイベントに対して Event オブジェクトを生成し,アスペクトに渡す.(このイベント処理自体はプリプロセッサによって生成される)マルチスレッドに対しては(今のところは)synchronized で対処している様子.
アスペクトは,そのイベントが自分に関係のあるものかどうかを調べ,関係があるなら動作する.この筆者らの実装では,Aspect クラスを継承し,definition メソッドを記述.nextEvent() 呼び出しによって次のイベントを取得する(次のイベントが来るまで nextEvent は実行がブロックされる).event.skip = true; として本来のメソッド呼び出しを飛ばしたりもできるらしい.
アスペクト間の関係,再帰呼び出しについては,アスペクトの中でthis.isRunning = true; とセットすることによってそのアスペクトが起動中であることを示し,再帰呼び出しを防止することができる.
また,アスペクトの設定は,monitor.aspects = new SomeAspect();のように実行時に行うが,ここでaspects = new Seq(new Aspect1(), new Aspect2()); のようにアスペクト間の結合演算を行うオブジェクトを使用できる.動的に結合できるところがえらい.