2001/9/30

・部活後、間をおかずに飲み会。というわけで、何にもしてません^^;。楽しかったですけど、飲み会。

飲み会後の電車の中でリファクタリングを読みましたが、あの状態で理解できるほどやさしい本じゃなかったです^^;。家に帰り着いたら即爆睡でした。

2001/9/29

・キングスフィールドIV予約完了!10月4日が楽しみですねぇ。

・今日も電車でリファクタリング本を読んでました。オブジェクト指向以前、つまり構造化の技術が頻繁に使われているのには、なるほどと思いました。やはり基本は大切。

・最近復活気味かも(^.^)

・Webめぐっていると、自分の無知ぶりに驚かされます。そして、知らない単語、概念を調べていると、また知らない単語、概念が出てきて・・・という無限ループに陥ってしまいます。ので、知らない概念を調べる時には、ある程度妥協しなければならないのですが、そのバランス感覚が僕にはありません^^;。そして今日も無限ループに陥っていく・・・

さらに、知らない概念が”常識”だったりするのです。やはり、独学じゃ限界がありますねぇ。すぐそばに高いスキルの持ち主がいればいいのですが(Net上ではなく、現実に)。

・いままでMVCだと思っていたのは、実はPACでした。恥ずかしい^^;。PACの階層構造というのがよくわかりませんが。う、またを買う羽目になるのか!?またお金が・・・。でもこの本バイブル的存在らしいし・・・

勘違いしていたのは、MVCとPACの違いであるControllerの部分。僕はずっとMVCのControllerはViewとModelの仲介役、つまりアプリケーションロジックを記述するものだと思ってました。まるっきりあべこべだったわけですね。はぁ。

ふと思ったのですが、MFCのDoc-Viewアーキテクチャは、PACの簡略版ですね。PresentationとControllerを一緒にしたら同じような感じです。(だからどうした^^;)

というわけで、今日もプログラミングは進まなかったとさ。ちゃんちゃん。

2001/9/29(深夜)

ああ、もう午前3時か^^;

昨日電車の中でリファクタリングを読んでいたのですが(実はまだ全部読んでません^^;)、ちょっと気になる記述を発見。リファクタリングの本筋からは外れますけど・・・

以下214pの引用。

"私は、つい1,2年前まで、この種の振る舞いをPersonクラスに移植することは、肥大化したクラスを作ることにつながると考えていました。しかし、実際には、通常これは問題にならないことがわかりました。”

”この種の振る舞い”とは、あるクラスに対する操作のイディオムを、そのクラスのメソッドとして実装してしまうことです。この本の例では、ある特定の個人の受講しているコースの数を知るために、

specific_person.getCourses().size()

と書かずに、可読性を重視して、

class Person ...
public int numberOfCourses(){
 return _courses.size();
}

というメソッドを定義して、

specific_person.numberOfCouses();

とすることでした。

当然ながらこの手のイディオムは腐るほと出現します。これをいちいちPersonのメソッドにしてしまったら、Personのメソッドがどんどん増えていき、肥大化していくのは目に見えています。

...と僕も考えていました。しかし、改めて考えてみると、そうでもないのです。

そもそも、肥大化とは、あるクラスが自身に割り当てられた以上の責務を抱え込んでいる状態です。その結果、メソッドが増大してしまうわけです。で、上の例を見てみると、確かにメソッドは増えてます。でも、責務は増えてません。自身のメソッドを使って高レベルなメソッドを作成しているだけです。つまり、この例の場合、クラスの肥大化=多重責務によって引き起こされるデメリット(理解しにくい、再利用が難しい等)が、発生することは無いのです。クラスの定義を見たらメソッドが多くてわかりにくくなる、という意見もあるかもしれませんが、それは適切な名前を付けることで解決できます。適切な名前が思いつかなければ、そのメソッドは作る必要はありません。

というわけで、今度から、僕はこの手のメソッドを、コードの可読性&重複の除去のため、積極的に導入したいと思います。C++なのでコンパイルがちょっと面倒ですけど。もちろん、YAGNIは忘れませんよ。

ところで、クラス&肥大化&デメリットでgooleで検索してみると、データ指向なるものを発見。うーん、なんかこのオブジェクト指向の説明、突込みどころ満載なのですが^^;;。1998年に書かれた割には偏見が多いです。書かれたのがもっと古ければ納得できたでしょうが・・・。データ指向もインターフェース指向もちゃんとオブジェクト指向で説明できますよ(と、ここに書く辺りがエセプログラマ)。まあ、オブジェクト指向の説明はともかく、考え方自体は有用だと思います。コーディングスタイルについても述べられてます。

やまざき氏(上のデータ指向提唱者)、Rubyを知ったらきっと感動するでしょうねぇ(^.^)。

2001/9/28

調子に乗ってもう一枚。なんか楽しい(^.^)。完全に下手の横好きですな。

プログラミング、そろそろはじめます。設計がへにゃんな感じです。Java3Dを微妙にパクったせいで、訳がわかりません。Java3Dの設計理念を理解しないまま形だけ参考にしたので、こうなることは目に見えていたわけですが。

しかし、設計が詰まったら逃げだしたくなるのは、悪い癖だな(-_-;)

ところで、XPのテストファーストの考え方、非常に有用です。やってみればすぐにわかりますが、自分の書いたコードに自信が持てます。今までは一度に大量にコードを書いてコンパイルしていた上、単体テストなどやってなかったわけですから、結合テストが非常に怖かったです(というか単体テストぐらいしろよ・・・)。

そのうえ、この手法だとテストコードがクラスを規定するわけですから、テストコードがその対象となっているクラスのサンプルコードになります。さらに、当然インターフェースから考えないといけないわけですから、これはオブジェクト指向に非常にマッチしてます。

でも幾何計算系のクラスのテストは、入出力を自分の手で計算しないといけないわけですから、非常に面倒です(ので、たとえば三角形と直線との当たり判定ならば、三角形をXZ平面に平行にして簡略化してます)。GUIのテスト方法もいまいち思いつきませんし。うーん、マクロでも使うのでしょうか。

まあ、面倒なのは別にかまいませんけど。テストは再利用しますから。

CppUnit入門

2001/9/26

テスト寝過ごしました(-_-;)。もうアホ100%です。これですでに三つ落としたことになります。(一つ目・筆記用具忘れ、二つ目・時間の勘違い、三つ目・寝坊)。なんでこんなどうでもいいところでミスするんでしょう^^;。

あまった時間(=本来ならテストがあった時間)を使って、三日前衝動買いしたタブレットで、絵を描いてみました

へたくそというつっこみは勘弁っす。んなこと描く前からわかってます^^;

プログラミングは・・・進んでないなぁ。

2001/8/30

二ヶ月ぶりですね^^;。今、

変化ヲ抱擁セヨ

というわけで、いまさらながらXPを勉強中です。明日できることは明日行え!ていうのがシビレますね。それが行える理由でもあり、行った結果でもある、平坦なコストカーブにも驚きました。とりあえず、自動テストやリファクタリングなど、一人でできそうなプラクティスは実践していきたいです。

eXtreme Programming FAQ

2001/7/6

駄目人間街道まっしぐらです(-_-;)。今日の中国語、落としそうな雰囲気です。授業の八割寝てたら、できなくて当然ですが。

2001/7/5

ひょんなところから知ったUML技術者認定制度を受けてみました。無料ですが、この試験の有用性のほどはわかりません。ブロンズレベルは27点で合格したのですが、シルバーレベルは140点満点中89点(合格点100点)というなんとも悲惨な結果に終わりました(-_-;)。仕様書を読んである程度完成しているユースケース図やコラボレーション図の穴埋めを行う、いった問題が出されたのですが、今思えば、自分で分析せずに問題だけ読んで答えたのが間違いでした(-_-;)。次の試験は8月なので、それまで勉強しておきます。ちなみにゴールドレベルもあって、デザインパターンに関する問題らしいです。シルバー、ゴールドとも六ヶ月という期間が定められていて、その間には一回しか受験できません。要は連続して受けられないということです。ブロンズはそのような制限はありません。

ところで、最近PCが安定動作しないです。普通に使う分には問題ないのですが、インターネットに接続する際、通信エラーがおきまくります。ケースを触ってもわかるほど熱くなっているので、熱暴走なのは明白です。今まで大型冷却ファン(44W。人間用^^;)を使って冷やしていたのですが、今日原因を調査しました。まずはBIOSを覗いてみると、なぜかVCoreが1.9Vになってました(-_-;)。今までよくこれで動いたものです^^;。当然電圧は下げて、CPU温度は60℃以上から55℃前後にまで下がりましたが、それでも常時55℃というのはちょっと熱すぎです。まだ大型冷却ファンのお世話になりそうです。

今週、来週はテスト週間です。すでにひとつ落としそうです(-_-;)

2001/6/21

どうも受験&だらけ生活が長すぎてC++の文法すら忘れてしまったようです(-_-;)。6/19のパクリまくり3Dライブラリには文法エラーがありまくりです。というわけで、密かに修正して差し替えてます。

CCDサンプルを作るためにいま分析をしてますが、問題領域に2つしかクラスがみつかりません。あんまり分割すると粒度が小さすぎて面倒なだけですし、それにたかがサンプルなので、こんなものでしょうか。それとOpenGL+GULTで開発することにします。Direct3Dは使ってない期間が長すぎてわけわからん状態です。OpenGLの方が圧倒的に使っている時間が短いのですが、インターフェースが単純なおかげで文献を参照すればすぐに使えます。

ところで、結構前からUDAgentという、空きCPU時間を医療研究に役立てよう、というプロジェクトに参加しているのですが、これは精神衛生上よいです。というのも、プログラミングしているとディスプレイの前で考え込んだり、紙を使って自分の思考をまとめたりする時間が結構あるからです。特に僕の場合、このような使い方をするにはPCの性能が明らかに過剰なので、上のような時間でもCPUが仕事をしているともったいなさがなくなります。おかげでCPU温度は常時60度ですが(-_-;)1年もしないうちにCPUがだめになりそうな気が・・・

しかしUDAgentには気になる点があります。DeviceInformationという項目でPCのスペックを比較することができるのですが、僕のAthlon1GHzがPen4 1.5GHzに負けてます(67:100)。こういう繰り返し処理ではますますAthlonとPen4の差は広がるはずなのですが。いくらIntelがスポンサーとはいえ、Pen4持ち上げすぎです。

ちなみにポイントは310。最近PC使ってないのが丸分かりですね^^;

2001/6/19

体育会系の飲み会はキツイ!三日間何もできませんでした。というか、僕って確か18じゃないかな。というのは通用しませんね^^;

それよりも最近全くスキルが上昇してないのが痛いです(そりゃ今まで順調に上がって来たかと言ったらそういうわけではないのですが)。最近だらけ気味です。だらけると際限が無い。

でも今日はちょっとがんばってパクリまくり3Dライブラリ(ベクトルやら当たり判定やら)を完成させました。作業中にインターフェースが二転三転して、内容の割にはかなりキーボードを叩いたような気がします。例によって虫取りもすんでませんし。

次はCCDあたりを使ってみたいと思ってます。

2001/5/28

以前参考にしていた数学関係の本が無い!どうも住居移動の際に紛失した模様。近所の本屋をハシゴ(といっても三軒だけだけど)しても見つかりませんでした(-_-;)。そのうち梅田に行こうと思います。

本といえば、大学の図書館に情報工学系の本棚を発見。そのうち勉強しようかと思いつつ全く勉強してない重要技術が結構あるので、ひまなうちに勉強しておこうと思い、借りてきました。今回はCORBAでも、ということで、”分散オブジェクト指向技術CORBA”という本にしました。まだ一章も読んでませんが、少しわかった気になりました^^;。

2001/5/26

学校と同じVineLinuxをインストールしました。買ってきた2.1ではGeforce2には対応してなかったので、雑誌から2.1.5にアップグレードしました。Winとは勝手が違うのでかなり苦労しています。ドッジボールで小指も折れましたし(;_;)

ついでにWin2kも再インストールして、安定しました。ハードをいじるソフトを入れると不安定になりますね。

3DCGをはじめるべく数学&あたり判定系ライブラリの再構築をはじめました。例によってパクリまくりですが。

2001/5/8

現在のハードウェア構成

CPU Athlon 1GHz
Mem 512MB
Video Geforce2GTS Pro 64MB
OS Win2k
HDD IBM 30GB x 2(M/Bのバグか何かでRAID0に失敗 別々に使ってる)

PocketPC CASSIOPEIA E-700

二ヶ月前がうそのようなハードウェアスペックです^^;。VC++が一瞬で起動したときは感動しましたよ(本当)。AcrobatReaderもテキストエディタのようにすいすい動きます。

画面の綺麗さに引かれてPDAにはPocketPCを買いました。予定表にアラームが付いているので、忘れっぽい僕は大助かりです(^.^)。そして、今日ついにeMbedded Visual Toolsがやってきたので、P/PCでプログラムを組むこともできます。暫くはP/PCをいじることになりそうです。

戻る