11/10(Sat)
/** 高い(T_T) */
今日行った店は、3人で16000円とめちゃ取られました(T_T)
っていうか、調子に乗って4000円コースを頼んだからかも知れないけど、大して飲んでないのになぁ。
焼き魚は非常においしかったが、その他の料理は至って平均的。
値段の割には...って感じで、オススメは出来ません。
かなぁり納得いかず。
昨日は3000円コースで、そこそこ飲み食いできたってことは、場所代が原因か!?
とりあえず、忘年会で挽回じゃあ!!
/** ようやく */
「プログラムデザインのためのパターン言語」読み終わりました。
終盤の「組織工程パターン」を読んでて、継承よりも委譲の方が柔軟性が高いってのは良く分かるんですが、
それって、すごいプログラミングがだるいんだよねぇ(T_T)
継承は言語レベルでサポートされているから、
A extends Bって書けば、Bクラスは、Aクラスのメソッドを持ってることになって、
Bのオブジェクトに対して、Aのメソッドを呼んだとしても、きちんとAクラスに転送されるけど、
委譲じゃあ、そうはいかないもんねぇ。
class B
{
int state;
protected A createA()
{
// クラスBの状態によって、委譲先の実装を変える。
// (動的に実装を変化させられるのが、委譲のいいところだよね!)
return A.createA(state);
}
public void method1()
{
createA().method1();
}
public void method2()
{
createA().method2();
}
public void method3()
{
createA().method3();
}
// 以下、委譲するメソッド数分続く...(T_T)
}
っていう風に、明示的に転送してやらないといけないし。
多分、java.ioパッケージは、Decoratorパターンを使ってるので、
↑のようなコードがあちこちに見られると思います。
んで、メソッドが増えてきたら面倒になるので、
どうせなら、言語仕様でサポートすればいいのにねとか思うんですが。
class B delegates A // ← Aはインタフェースでなければならない。
{
int state;
// 自動的にAインタフェースが持つメソッドは、指定したAインタフェースの実装に転送される。
/**
delegationする前に呼ばれるhookメソッド (Template Method [GoF])
*/
public void delegationHook()
{
// クラスBの状態によって、委譲先の実装を変える。
A aImpl = A.createA(state);
setDelegationObject(aImpl);
}
}
って、こんなんできませんかねぇ。
こんなんできれば、コードの自動生成とかしなくても済むんですけどね!?
きっと、Decoratorパターンとか、Bridgeパターンがクリーンに作れることでしょう。
ちょっと、JCPとか調べてみようかなぁ。
ふと思ったんですが、delegates(デリゲイツ)って英語的にアリなのかも良く分からない上に、
Bill Gates(ビルゲイツ)みたいでイヤですね(>_<;
11/8(Thu)
/** 健康診断でゴハン抜き */
これほど死ねることは無いと実感(T_T)
が、体脂肪20%切ったり、体重が普段より1kg少なかったりと、
非常に成績(?)が良かったので、良かったです(^^)v
お帰り前には、もちろん中華街でお食事♪
普段、バーミヤンの「っぽい」中華しか食べてないので、
「こりゃあ違うね!」
っていうのを実感できた一日でした(^^)
ちなみに、相変わらず修学旅行(?)生でにぎわっていたことは言うまでもなく、
ヘンなおじさんが、中華街のメインストリートの写真を撮ってたり、
わけわか系のオバサンがいっぱいいたり(^^; (→オバサンはどこにでもいる説があるけど(^^;;)
さすが!? 中華街って感じでした。
なんか、毎日のように行ってた頃を思い出すね。(しみじみ)
/** すかいらーく */
すかいらーく系のお店って、こんなにあるのね〜。
/** amazon使ってみた。 */
amazon.co.jpで、CD買ってみました。
表示上は、24時間以内に発送と書いてありましたが、実際はどうでしょう?
CDは、宅急便じゃなくて、ポストに入れといてくれる可能性があるらしく、
なんだか早くなりそうです。
ちょっと楽しみです♪♪
11/7(Wed)
/** 最近眠くてしょうがない。 */
しかも、昼夜問わず(=_=)
/** Excel VBAを勉強します。(多分) */
文書のメンテナンス性を考慮した場合、Wordとか、HTMLとか、XMLよりも、
やっぱり、Excel(に限らず、表計算ソフトならなんでも)に限ります。
っていうか僕の場合、普通の文書書くのもExcel使います(^^;
当然テストケース書いたり、それに付随する検証結果(JUnitでいう期待値; 動かないテスト)を、
Excelで書いたりするのですが、それを単なる文書で終わらせないためには、
テストスクリプト(動くテスト)に変換する必要があります。
そこで出てくるのが、Excel VBA(マクロ)っつーわけです。
最近、CodeRedだの、Nimdaだの、マクロウイルス(なの? → よく分かってない(^^;)
が猛威を振るっているので、さぞかし色々できるのでしょう。
今まで、とりあえず言語はJavaができればいいでしょって思って、
「ふふん。Excel VBAなんて、所詮とーしろの言語だろ。」
なぁんて思ってましたが、結局やることになって、
「なんだかなぁ。」
的な気分。
多分、理想郷は別のところにあるんだろうけど、
現実を見ると、なかなかねぇ。
11/6(Tue)
/** J2EEのアーキテクチャはどこに? */
http://www.atmarkit.co.jp/fjava/rensai/jsp10/jsp10.html
今の僕には、かなり許しがたい記事だ。
なぜなら、ViewであるJSPに、なぜかデータベースアクセスのコードが埋め込まれているではないか。
いくら実験的なコードとはいえ、あまりにひどすぎる。
こうしたMVCを無視したコードが流布することによって、
再利用を無視した、とりあえず動けば良いコードが蔓延するのが目に見えてるような気がする。
データベースのデータ(Model)の取得は、
JavaBeans or Servlet(Controller)を通じて取得するようにしましょう。
/** 目指せ! UML技術者認定制度 シルバーレベル!! */
また、余裕で落ちました(T_T)
しかも、今回は、61/140と、前回より30点も悪くなってるし...
イチから出直しです。。。
11/5(Mon)
/** 病人続々 */
うちのチームってば、風邪大流行(T_T)
せっかく治ったのに、うつされそうでコワイ...
/** Suicaってナンダ? */
JRの自動改札に最近ついてる、
「Suica ここに触れて下さい」
っつーのが、ナゾだったんですが、
公式サイトっぽいの見つけました。
定期券 + イオカードで、清算機で清算しなくても、
イオカードのプリペイド分で、清算できるので、
並ばなくても、すぐ自動改札を抜けられるつー仕組みらしい。
ちなみに、このテのにありがちな、正式名称もあります。
「Super Urban Intelligent CArd」
だそうです。こりこりですね(^^;
うっかり屋さんには、落としても再発行してもらえるつーのがうれしいところかもね(^^)
/** ふと思うのだが */
Windowsユーザにしか関係ない話なんですが。
「C:\My Documents」っていうフォルダがありますよね。
あれって、喜んで(じゃなくてもいいけど)使う人っているんでしょうか?
僕は、イマイチスペースがしっくりこないので、怖くて使えないのですが。
まあ、既に「Program Files」使ってるから、
手遅れっちゃー手遅れなんだけどね...
っていうか、なんでワザワザスペース入れるんだろう...
やっぱり、DOS時代に不可能だったことをやってのけたのサ!
っていう誇示なんでしょうかねぇ。
多分、Windows XPになったら(っていうかもう大丈夫かもしれんが...)、
そんなこと気にするユーザいなくなるんだろうなぁ。
11/4(Sun)
/** 感動したっ!(T-T) */
今日の午前0時ごろに頼んだ本が、なんと! 午後7時に届いてしまいました!!
すげー。一日だよ。一日。
久々にbol.comを使ったのですが、
bk1なる業者と連携した結果、サービスが向上したのかも知れません。
ただ、以前は3500円以上の購入で送料がタダになっていたのに、
なぜか倍の7000円からになってしまってました(T_T)
う〜ん。。。これでお客さん減らないといいけどね...
まあ逆に、無理してでも7000円を超えるように買うお客さんが現れそうだから、
そういう作戦なのかもね〜
ちなみに、同じくbk1と業務提携した三省堂は、まだ見てもいません。
そのうち比較することになるんだろうけど、
同じくbk1と提携して、早く届くようになったのだとすれば、
送料無料がある分、bol.comが勝ってるような気がするなぁ。
今後、オンライン書店競争にも、再編の嵐が吹き荒れるかも知れませんね。と。(ひとごと(^^;)
/** ひまつぶし再び。 */
ひまひまだったので(多分(^^;)、またマンガ喫茶に行って来ました。
こないだ読みかけだったシリーズをようやく読破。(ペガサス流星拳とかいってるやつです(^^;)
全28巻を6時間って、もしかして速い?
つーか、前半は面白かったんですが(ファミコンのゲームとかにもなったし。)、
後半はなんかイマイチだったので、かなり読み飛ばしモード入ってましたが(T_T)
で、ふと見つけた、次に読みたくなるマンガが、
「ファイアーエムブレム」
つーか、こんなんあったんだ。って感じ(^^;
ぱらぱら見た感じ、原作(ゲーム)に近そうだし。
全12巻なので、3時間/1日で読めそう。
かなぁり今からマークしてます(^^;
そのほかにも、昔ジャンプで読んだマンガが取り揃えてあるので、
かなぁり読みたくなります。が、時間が無限にあればねぇ。ってところです(T_T)
なにげにドラゴンボールの最初の方が棚に無かったので、そういう人もいるのでしょう。
にしても、今日も混みこみだったなぁ。ほんとに世の中ヒマ人が多いのね〜(T_T)
/** Olympic */
といっても、4年に1度やるアレのことじゃなくて、スーパーのことですが。
ふと、強力な電化製品が欲しくなって、電気屋に行ってみました。
が、非常に品揃えが悪く、購買意欲が高まることはありませんでした。
つーか、店員寄ってきてウザいし(T_T)
で、同じ系列で大きい電気屋が、もう少し遠いところにあるので、
そっちに行こうと思い、とりあえず自転車をこいでいると、
途中にオリンピックがそびえ立っていました。
そういえば、ここにも電化製品とかあったような...?
と思い、入ってみることに。
すると! さきほどの電気屋よりも、はるかに多くの品が揃えてあるじゃないですかー♪
ヘンな店よりも、よっぽどいいかも!
ちなみに、2階は電化製品などの生活雑貨で、
1階は食料品売り場になっていたので、ついでに昼ご飯も買って帰りました(^^)/
この便利さは、主婦がわらわら集まってくるのも、無理ないかもね(^^;
11/2(Fri)
/** Javaでlint */
早速、開発中のコードにjlintかけて見ました。
すると...クラスメンバの変数名と、メソッド中でローカル宣言(引数も含む)している変数名が同じだった場合、
ローカル変数が優先されるため、クラスメンバが隠されちゃうよ。
っていう指摘が大半を占めてました。
しかしJavaの場合、↓のような書き方が許されているので、
特に意味の無いワーニングのような気がします。
public hoge(int a, double b)
{
this.a = a;
this.b = b;
}
C++とかなら、メンバ変数名の先頭には、必ず「_」を付けるとかいう、
小細工的なルールで逃げるところなんだろうけどねぇ。
まあ、jlint自体が、C(C++)的な文法チェックもやるものなので、ある意味仕方ないでしょう。
つーわけで、結局Antに組み込むのは止めました。
予定では、compile → lint → javadoc → jarっていう流れを作るつもりだったんですけどね...
ちなみに、jlintのマニュアルは不親切で、コマンドラインの使い方例とか書いてないので、
使えるようになるまで、若干苦戦しました(T_T)
基本的には、
1) javac -g <lint対象ソース(.java)>
2) jlint <lint対象クラス(.class)>
でオッケーです。
つまり、デバッグ情報が埋め込まれてるバイトコードに対して、lintするつーわけですね。
/** データベース非依存コード */
結局、Managerパターン&Abstract Factoryで解決する方向っぽいです。
ただ、Managerパターンを使うと、管理対象クラスの生成を外部的に行わなければならないため、
C++でいう「friend的」にするとか、Javaでいう「packageにはpublic」にするとか、
空のコンストラクタで生成して後からsetするとか、はたまた全部引数で渡すとか、色々あるわけですが、
管理対象クラスは、必須属性(プライマリキーのこと)を持っているため、
無効オブジェクトを作らせないために、Essenceパターンを合わせて使うことになりそうです。
また、Managerは一つの管理対象クラスにつき、一つインスタンスがあれば十分なので、
Singletonパターンを合わせて使います。
データベース周りのコードにつき、データベースのメタ情報(Oracleで言えばデータディクショナリのこと)を利用した、
ソースコードの自動生成ができそうです。
この場合、自動生成部分と、追加コードを分けるために、
Generation Gapパターンを使うかも知れません。
例えば、OracleとSybaseで移植性を持たせる場合、
同じRDBなので、データベース固有処理を記述する部分がほとんど同じになるかも知れません。
(というか、JDBCレベルではなるでしょう。)
ので、Adapterパターンとか、Template Methodパターンを使って、
親クラスへのメソッドの引き上げリファクタリングを適用するでしょう。
...こんな調子で、パターンばっかり入れてたら、クラス数増えて、
拡張性/柔軟性は上がるかも知れないけど、保守性/可読性が下がるかもねぇ。
/** こんな言葉が好きなんだよねぇ */
いつも読んでるパターンの本に、こんな一節が載ってました。
> 学識なく、手先の技術を習得することを目標とする建築家に、その苦労に見合うだけの
> 権威を手にした者はいない。一方、理論と学識だけに頼る者は、明らかに実体ではなく
> 幻を追い求めている。しかし、完全に両方の知識を備えるものは、いかなる場面でも武
> 装する者のように、それだけ速やかに目的を達成し、権威を身につける
([Vitruvius+60]: The Ten Books of Architecture. Morris Morgan (trans). New York Dover, 1960)
これって、まさに「技術」と「理論」の両立を意味してるんだよねぇ。
僕は最近気づいたことだったんだけど、まさか40年前にもおんなじこと言ってるとはねぇ(^^;
まあ、ソフトウェアは建築と違って、理論を身に付けるのも、
技術力を磨くのも、比較的やりやすいと思うので、両立を目指すべきでしょう。
11/1(Thu)
/** プログラマな日々ってば。 */
手元の統計資料によると、金曜日が一番書かれてないらしい。
やっぱ、休み前モードだしねぇ。
Sun | 151 |
Mon | 148 |
Tue | 146 |
Wed | 146 |
Thu | 146 |
Fri | 132 |
Sat | 150 |
/** Javaでlint */
みたいなのあるかなぁと思って探したら、こんなページがありました。
このJlintって、JavaWorld 2001/05で紹介されてたみたい。
とりあえず明日試してみるつもり。使えるかどうかはお楽しみ?
使えるようだったら、当然Antに組み込みだねっ!
ちなみに、Javaでlintを検索してたら、
なぜか2chのPL/Iのトピックにあたりました。
っていうか、なんでPL/I?
/** データベース非依存コード */
やっぱ、Managerパターン&ManagerのAbstract Factoryで解決した方が良いような気がしてきた。
この場合、Package内でアクセス可とかいう、ある意味裏ワザ的な仕様を使うことになるかも。
これも要実験だなぁ(>_<;
> クラス又はインタフェース型を public 宣言していなければ,それを宣言しているパッケージ内からだけアクセス可能とする。