トップ «前の日記(2003-08-02) 最新 次の日記(2003-08-04)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2003-08-03

_ 分類

ネタなのか本当なのかわからないけれど、安能務の「春秋戦国志」によると
一般に中国の学者には妙な分類マニアが多くて、しかも分類の仕方が例えば「飼犬が逃げて野良犬になった犬」を「犬」の一種に挙げたり、あるいは動物園などでも、片脚のない(切り落とした)鶏を「隻脚鶏」と標示して「鶏」の一種に数えるなど−−と妙な分類をする
らしい。 (この条りは、従来の諸子百家の分類−法家とか儒家とか−に大した意味はないから拘泥しないほうが良いという趣旨で出てくる)

_ 相変わらずまとまっていない

今のところ、有効なようだな、と感じているのは、一緒に(3〜4人くらいの規模)で、実装方法について話し合うという方法。前提は、実装後のイメージ(ユースケースと同じと考えてよい)と、仕様、システムの全体像(というところで、大規模では無い。とは言え、大規模ならサブシステムに分割できるから、その場合はサブシステムの全体像)をメンバーが共有していること。

で、ブレーンストーミングしながら、3〜4時間くらいで静的モデル(ただし抽象度は比較的高い)を完成させる(時間が不足した場合、こちらで導出してしまうが、導出過程は詳説する。すべてが正しいわけではないので、異議はその場で出してもらい、逐次修正をかける)。

で、散会、適当に切り分けた持分の実装に入る。2〜3日(複雑度によっては長引くし、最初の設計がタコだと1日で問題点が出てくるのでもっと早い)でとにかく結合させ、元のモデルやインターフェイスの問題点を出し合い、リファクタリングに入る。最初の分割に配分ミスがあれば、分担を逐次変えていく。で、こういった方法で、実装範囲を段々広げていくと、3ヶ月後くらいには(個人差は当然あると思うけど)、だいたいそれなりに設計できるようになってくるように感じる。

プロジェクトの最初の段階では、やはり設計をどうするかが問題(オブジェクトをどう分けて組み合わせるかってのは永遠のテーマ)だし、システムはわかっていてもパターンなどを知らないメンバーがいるので、相当、有効度が高かったと思います。完成したソフトウェア内のバラ付きは確実に減ったと思う。

_ 追加

この時点では、コミットは早めにするのが原則。大きな単位でのイテレーション時に必要性を感じたら1.0として仕切りなおすので、とにかくどんどんコミット。遅いと思ったら催促する。当然だけど、この時点で作ったテストケースは(インターフェイスが丸変わりしない限り)その後も使われる。

_ こうもりツアー

医者に行ってたら時間がかかって、上野東照宮のあたりで行われる蝙蝠探索ツアーに行きそびれた。くそー。

_ 大前提

そう言や、Cとかで構造化プログラミングをしたことがあるってのがさらに前提だった。本当の初心者は最初のうちは設計討議から切り捨てて、分担決めてから配分。独立度が高い部分(モデルのガリのガリみたいなとこ)を与えてよろしく。

でもさ、テストケースそれ自体がモデルを操作するコードの記述になるから、いやおうなく、オブジェクトを扱うプログラムの書き方の練習になるし、オブジェクトが内部に持つ情報をどう引き出すかとかを考える訓練になると思う。というところから、とにかく、ターゲットと同時にテストプログラム書かせるってのは重要だと思う。

とにかく、この場合(も何もなく、絶対的に)テストプログラムを書く/書かせるってのは重要だ。とんでもなく勘違いしてるテストプログラムもあったりするんだけど、それでも書くことが重要。

書くことが重要というのは、必ずしもすべてのケースの記述が必要だということを意味しない。粒度の問題で記述できないのなら、それは問題だし、普通はその問題に気付く。UIがからむのなら、それは捨てる。それでも、実は一切書けないということはありえないから、とにかく大して意味がなくても作っておく。

_ UDP

bindは本当に必要なのかな? StevensのTFTPのサンプルコードじゃbindを呼んでるけど、思い返せばPathway使って最初にUDP使ったプログラミングした時、PathwayのWinsockだとへたにbind呼ぶとよからぬことが起こったんで、ウェルノウンポート持つんじゃなければbindしないですませてきたんだったような(と書いて思い出してきたけど、Pathwayのバグに影響されてるだけじゃん)。でも、これまでそれでいけてたんだけどな……

うわー、勘違いはっけん。

Note If a socket is opened, a setsockopt call is made, and then a sendto call is made, Windows Sockets performs an implicit bind function call.

(MSDN, sendto)

これまで、libsock使ったUDPじゃウェルノウン側だけを作ってきたから、全然気付いてなかった。MSDNには、Windows Socketsの動作と書いてあるじゃん。

#というわけで、無引数コンストラクタで暗黙のbind呼び出しするのは十分に根拠があるということだ。

_ 蝙蝠ツアーリベンジ

8/15,16夜間動物園公開の一環として蝙蝠探索をまたやるそうなので、今度こそ行く予定。

都庁の裏にもいるってことだが、どこらあたりのことだろう?


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え