netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2006-07-16 [長年日記] ▲
_ [読書] オブジェクト指向設計の経験則? ▲
ACM のサービスでタダで読める範囲で見つけた Arthur J. Riel: Object-Oriented Design Heuristics を読み始めてみた.
2〜3章を読んだ限りでは,「余計なインタフェースを付けると,それだけ複雑になり,利用しにくくなる」といった,「比較的良い」設計の指針が提示されている.
オブジェクト指向をやり始めの人向けなのか,オブジェクト指向の基本概念の解説や,従来の手続き型言語でのプログラミング(この人は Action-Oriented と呼んでいる)との比較にもかなり分量を割いている.挙げられているのはよく知られている指針ばかりだけど,それぞれ具体例を出しながら「こう直したらいいよ」と解説してるので,かなり親切で読みやすい.
設計の問題のいくらかは,悪い設計を選んでもあまり全体には影響がないが,クラス数の増加(proliferation)の問題だけは違う,といったことが書いてあったので,まだ少し読み進めてみることにする.
2006-07-15 [長年日記] ▲
_ ごそごそとドキュメント書き ▲
「Soot を使って Java プログラムを解析する」に Soot の基本的な構造についての情報を追加しておきました.制御フローグラフに辺を追加しようとしたら実は unmodifiable だったとか,実験してる途中ではまったことはだいたい書いてみたつもりです.
bddbddb のときもそうですが,ドキュメント書いたとたん google で上位に来てしまうのがちょっと怖いです.
_ オーストラリア辞書/年表のバグ修正 ▲
bun45 オーストラリア辞書でエラーが出てた問題を修正しました.なんだかんだと息の長い(学部生だった頃から関わっている)プロジェクトで,古いライブラリへの依存性を切り捨てるべく今年修正した部分がエラー吐いてました.
最近,どうも問題の見逃しが多い気がするので,ソフトウェアのテスト方法あたりを改めて勉強してみないとなーと反省.
2006-07-13 [長年日記] ▲
_ [近況] 講演@UBC ▲
Bjorn Freeman-Benson と Ward Cunningham の2人の講演.せっかくなので聞いてきた.2人で交互に喋るという形で流れるように喋っていく見事なプレゼンテーションだった.
講演のテーマは,協力(collaboration)って大事だね,というもの.2人の経験によると,プログラミングは最初は「自分だけ(me)」からスタートして,us(グループ開発)→you(商用ソフトの開発)→we(顧客と一緒に仕事する)→all(コミュニティでの協力)と進んできている.他人を信頼して協力することで,より良い成果を得ることができるようになっている.
1つのアイディアというのは,技術(technology)と方法論(methodology),アイディアを支えるコミュニティの3つによって成り立つのではないかと考えられる.たとえばJUnitなら,技術的には小さなフレームワークで,背景にはテスト駆動型開発という方法論があり,1つの開発チームが協力してそれを実践することで,より安心してソフトウェアを変更できるようになる,とか.
で,彼らは今は Eclipse Monkey というのに注力しているらしい.サイトはhttp://eclipse.org/dash/.端的には,Eclipse用の「ちょっとした改善」をスクリプトにしちゃおう,というもの.たとえばディレクトリツリーは最初に全部開いてる状態がいい,とかいうのを短いスクリプトで制御できるようにEclipseの環境をオブジェクトモデルとして提供しようというもの.短いスクリプトをみんなで公開して共有すれば,徐々に改良されながら便利な環境になっていくはずだし,「ちょっとした改善」も積み重なってくれば,開発者にとって便利な機能が分かってきて,それがAPIの洗練なんかにも繋がると考えているみたい.技術/方法論/コミュニティには,スクリプティング/リファクタリング/ブログなど,が対応する.
Eclipse の API が複雑化していることについては,開発者が学習する機会を設けるしかない.これについては独習用の教材(experience guide)を提供することが大事なのではないか,と言っていた.Eclipse の API を使うプログラミングの教育を scalable-personal という軸で考えたときに,ペアプログラミングは一番 personal 寄りで密度は高いけれど同時には1人しか相手にできない.パターンは逆に一番 scalable で,書籍なんかにすれば広く伝えられるけど,それだけではプログラムは書けない.wiki での情報交換ならもう少しだけ personal 側に寄るけれど,やはりまだ足りなくて,良い教材をコミュニティ(coach network)が提供して開発者が自分で経験を蓄積できるようにすべきだと考えているらしい.
……といったような感じで講演は1時間ちょっとだった.話された内容はだいたい理解したつもりだけど,多少ニュアンス違ってたりして.講演は,論文と違って,後から内容の正しさを確認できないのが厳しい.
余談: Monkey のスクリプトが Ruby や Python ではなく Java Script ベースなのは,熱狂的信者も強い反感を持った人も特にいなくて無難でしょ,とのこと :)
2006-07-12 [長年日記] ▲
_ [ツール][Java] バイトコード解析ツール Soot ▲
Soot を使って Java プログラムを解析するとゆードキュメントを作り始めてます.
ソフトウェア工学系の人の論文で,たまに Soot を使って……という記述を見るものの,日本語で Soot について整理されたドキュメントというのが公開されていないようなので,ちびちびと書いていくことにしました.何も作らないよりは後々楽になるだろうと信じてます.
プログラムスライシングの実装に向けてどんな情報が soot から取り出せるのか少しずつ実験しているところなので,その辺のことも少しは追記するつもりです.
2006-07-11 [長年日記] ▲
_ [ツール] javadoc から HTMLHelp を作る ▲
javadoc をHTMLHelpにできないかなーと思って探していたら,世の中にはちゃんとあるようで.jd2chmと,Javadoc2Helpという2つのプロジェクトを発見.
jd2chm のほうは python で書かれているものの,実行ファイルも提供されていて,exe を適当な場所に置いて,コマンドプロンプトで javadoc のディレクトリに移動してから exe を実行するだけでOK.HTML Help のファイル名とかを対話的に聞かれるので,答えたら HTML Help が生成される.ちゃんとメソッド名などをキーワードとして抽出しておいてくれるのが嬉しい.ただ,poderosa 上で cygwin から動かすと対話インタフェースのメッセージが表示されなかったりしたので,その辺は使うときに注意が必要.
一方の javadoc2help は,Javaで作られているツール.パッケージを展開後,bin/javadoc2help.properties
ファイルにHTML Help のコンパイラのパスを指定すれば利用可能(Microsoft が提供しているヘルプコンパイラをインストールしておく必要はある).引数には,javadocの置いてあるディレクトリと,それを出力する先のディレクトリ(javadoc のファイル群がコピーされたりプロジェクトファイルが生成されたりする)を指定する.
java -jar lib/Javadoc2Help.jar -chm -src ../soot/tools/soot-2.2.3/doc/ -dest /tmp/soot-help/
こちらは,キーワード生成なんかはやってくれないので,けっこう簡素な HTML Help が出力される.そのかわり,プロジェクトファイルをちゃんと生成してくれるので,自前でキーワード生成したり,結果を改変したい場合には便利かもしれない.まあ,今回はjd2chmのほうを使わせてもらうことにした.
2006-07-08 [長年日記] ▲
_ [hyCalendar] 1.4.0 での新機能 ▲
周期予定の名前の中に「%d」があると,それを現在日(あるいは指定した日付)から何日目にあたるかという数字に置換する処理を実装してみました.「締め切りまであと%d日」とか,「今日から %d 日後」というのが書けるようになります.
数えられるのはただの日数だけです.営業日数とかは数えられません.この手の「特定の日だけを数える」というのをやろうとすると,基準日から目的となる日付まですべての日付を処理する必要があるためです.特定の日付だけを検索・カウントする機能は,用意するにしても別の機能とするつもりです.