ChaichanPapa-World !

燈明日記(2004/04

◆ インデックス

◆ 2004年4月

2004/04/30(金)素敵なMIDIのサイト

素敵なピアノで、素敵な曲の数々……、素晴らしい!

しかし、MIDIは、著作権の関係で曲にリンクが出来ないのが残念です。

2004/04/29(木)模様替え

全体的に壁紙をつけて、雰囲気を変えてみました。特に『ちゃいちゃん天使のページ』は、リニューアルしてみました。

なぜか、『電池が切れるまで』を見ていて、急にそう思った……。

2004/04/28(水)rubyでBBS

とりあえず、メモ。

2004/04/27(火)rubyユーザーズガイド

今日は、以下のページを全読しました。もちろん、仕事の合間にですが、もちろん、仕事もガンガンやっていますって、なんで言い訳する自分(謎)。

本当にお手軽な言語で、はまりそうな感じです。

2004/04/26(月)はじめてのRuby

今日は、久々に仕事に余裕があったので、rubyで遊んでみました。

rubyとは、スクリプト言語で、しかもオブジェクト指向の言語です。

JavaともPerlとも雰囲気が違い、どちらかと云うと、JavaScriptな感じがしました。

また、Perlより数段簡単に感じられました。

しばらく、rubyを勉強してみようと思います。

とりあえず、リンクメモです。

2004/04/25(日)国年保険料払わず

サラリーマンには、このニュースは、特に頭にきますね!

給料天引きの私には、とにかくリストラされないように頑張るしかないんだけど……。

2004/04/25(日)祝!5000スレッド on WEB相談室

あのWEB相談室がいつのまにかに5000スレッドを突破していました!!

いつもウォッチして頂いている常連さん達、心から御礼申し上げます。ありがとうございます!

WEB相談室は、2000年2月から開設しましたが、質問掲示板の時代が1年ぐらいあったので、まる5年ぐらい経ちます。

ネット上には、凄い人が沢山いて、私など出る幕なく、その人達に、逆に沢山のことを学びました。感謝感謝です。

また、大学の偉い先生やプロのライターの人達もたまに書き込んでくれたり、個人でのBBSとしては、成功していると思います。

BBSなのに荒らしや、喧嘩もほとんどなく、本当に素晴らしいBBSになりました。

将来的には、過去ログをカテゴリ別に整理したり、WEB相談室に付加価値をつけていきたいと思っています。

では、10000スレッドまで、頑張るぞ!

2004/04/25(日)はじめてのJAVAアプリケーション

以下の新コンテンツをリリースします。

実は、燈明日記でのJava系日記の寄せ集めだったり……申し訳ない。しかし、何かのお役に立てれば幸いです。

2004/04/24(土)プロフィールを修正

4月なので、プロフィールを修正しました。

しかし、2年間も修正をしていなかったので、一気に2才年を取った感じです。

2004/04/19(月)呪文

まぁ、いろいろあって、呪文でも唱えないと、生きて行けない状態です。しかし、呪文ってほどじゃないけど……、以下の3種類の3つのフレーズを頭の中で、いつも唱えています。

某教会系の人にはおなじみのフレーズかも……。

2004/04/17(土)落ち込む

リストラの危機の中、仕事で失敗したり、プログラムのバグがでたり、かなり気分が落ち込んでいる。

すると、『なんのために生きているんだ』とか、『オレは生きている価値なんてないんじゃないのか』なんて思い始めるわけです。


たまたま身近にいた人生の先輩などにそれを言うと……。

『なんのために生きているんだ』って!
そんなの『食う』ために決まっているだろう!
そんなこと考える余裕があるヤツは、幸せなんだよ。

オレは、幸せなのか、って思えてきた。

確かに、『食う』のをやめたら、死んでしまうわけで…。

逆説的に云えば、まさに『食うために生きているんだ!』。メイビィ。


で、今年49才。定年は60才。

あと11年は、自分が作ってきたバグだらけのプログラムの罪滅ぼしに、バグのほぼでない、プログラミングテクニックを公開していこうかな、なんて思っています。

バグを出し尽くした者だけが知り得る逆説的なテクニック。

簡単に言えは、『こうしたらバグったよ』のリストをだせばいいわけで、そんなもん山ほどある。

ということで、とりあえず、静かに、気分がハイになってくるのを待つ、今日この頃です。駄文失礼。

2004/04/13(火)サーバーサイドJava

サーバーサイドJavaといったら、サーブレットと思ったあなた、すでに時代遅れになっています。 今は、EJB、JBoss、Strutsになっているみたいです。 これらを説明する前に、まず、それまでの長い道のりをお話ししましょうね。

当初、クライアント/サーバという、クライアントからサーバへアクセスするシステム方式がありました。 これは、クライアントのPCでVB等で作成したプログラムからサーバーのDBへ直接アクセスする方式です。 これには、いろいろと問題があり、現在、無くなりつつあります。

つぎに、インターネットが発達し、社内では、イントラネットでクライアント(ブラウザ) からの要求によりHTTPプロトコルで、HTMLのファイルをクライアントへ転送し、クライア ント側は、そのHTMLファイルをWEBページとして見ることが出来るWEBシステム方式がありました。

しかし、そのWEBページは、固定の情報しか見ることが出来ませんでした。 そこで、動的な情報のWEBページを見ることができる機能をWEBサーバが持ち始めました。 これをCGIと云います。

CGIのプログラムは、perl等の言語で比較的簡素に実現することが出来ました。 しかし、業務では、ビジネスロジックの実装やDBアクセス等が、かなり重い処理で、 perl等のプロセス起動型とか、随時DBコネクト型では、無駄なオーバーヘッドが問題になり 始めました。

そこで、登場してきたのが、Javaサーブレットです。 Javaサーブレットは、要求があるたびにプロセスを起動するCGIのようなものではなく、 何回要求されてもプロセスは一つのスレッド起動型で、オーバーヘッドが少なくなりました。 また、EJB(エンタープライズ・ジャバ・ビーンズ)というコンポーネントが、 DBコネクト状態をプールし、随時DBコネクトをすことがなく、オーバーヘッドが少なくなりました。

このように、時代はいつの間にか、VBやCGIでなく、サーバーサイドJAVAが主流になってきているのです。

もう一度整理すると、以下のように進化してきました。

  1. クライアント/サーバと云うVB等による2層構造のシステム。
  2. クライアント/WEBサーバ/DBサーバと云うCGIによる3層構造のシステム。
  3. クライアント/WEBサーバ/APサーバ/DBサーバと云うJavaによる4層構造のシステム。

APサーバ(アプリケーションサーバ)といえば、今は、J2EE対応のサーバを指します。 たまにMSのサーバを指すこともあるようですが……。

J2EEは、Java2 Platform Enterprise Editionの略で、サン・マイクロシステムズの提唱による 企業情報システム向けのJavaプラットフォームの規格です。

J2EEは、いろいろなサブシステムから構成されていますが、メインは、JSP、サーブレット、EJBの3つです。 JSPは、J2EEシステムで作成された情報をHTMLの中に埋め込んでWebブラウザへ出力することです。 サーブレットは、ユーザーからの入力にこたえて処理を行うとか、簡単なセッション管理とかの制御を行います。 EJBは、複雑なセッション管理やDBアクセス等を用いてビジネスロジック実装の部品(ビーンズ)になります。

ちなみに、今流行りのJBossは、J2EEを備えたフリーのアプリケーションサーバの一種類です。 JBossは、もともとEJBoss(EJBオープン・ソース・ソフトウェア)と云い、 EJBの商標とまぎらわしいので、現在のJBossという名前に変更されたようです。

また、ちなみに、今流行りのStruts(ストラッツ)は、フリーのアプリケーション・フレームワークの一種で、JSP、サーブレット、EJBをラッピングして使いやすくし、誰でも同じようなシステムを構築できるようにしたものです。

キーワードをもう一度整理すると以下の感じです。

尚、本コンテンツは、以下のページを参考にさせて頂きました。

2004/04/12(月)オブジェクト指向 WITH JAVA

やっとリリースです。実は、結構前から作っていたよ。

2004/04/11(日)忙しい

なにかと、忙しいです。

休日なのに北関東支社の新サーバ対応(仕事)とか、ママの買い物の手伝いとか、あと、久々の某教会系での会議とか……。


WEB系では、昨日アップした、アダプターパターンを手直ししました。

あと、近日中に本日記のオブジェクトネタをまとめた『オブジェクト指向 WITH JAVA』という、新しいコンテンツを公開する予定です。よろしく!


しかし、こうやって、毎日を忙しく送れることこそが、実は幸せなのかな……なんて思えるこの頃です。

2004/04/10(土)復活

なぜか、やる気が、ムクムクと出てきました。

本サイトも、ガンガン更新していきたいと思います。

しかし、仕事も忙しいので、そんなには、ガンガン出来ないと思いますが、ネタは、いろいろと思い付いています。


しかし、イラク方面では、不幸なことが起きました。

人質の3人が一日も早く開放されることを祈ります(合掌)。

2004/04/10(土)アダプターパターン

前回、デザインパターン第1弾:Iteratorパターンを学びました。今回は、第2弾:Adapterパターンです。 普通、プログラムを組むときに、オブジェクト指向的には、やりたいことを抽象ベルで考えてから具象レベルに落とします。 しかし、新たに具象レベルのクラスを作るより、すでにあるそれに似た具象クラスの利用ができればラッキーです。 そんなラッキーなことを実現してくれるのが、Adapterパターンです。

やりたいことを抽象クラスレベルで考えたTargetクラスと、やりたいことが似ている具象クラスのAdapteeクラスを、 Adapterクラスで繋ぎます。


       Client
     +-------------+
     | Main        |
     +-------------+
     |             |
     +-------------+
     |             |
     +-------------+
            |
            |
            | 使用:関連
            v
     +-------------+            +-------------+            +------------------+
     | Target      |            | Adapter     |            | Adaptee          |
     +-------------+            +-------------+            +------------------+
     |             |#-----------| adaptee     |o---------->|                  |
     +-------------+ 継承:汎化 +-------------+ 委譲:集約 +------------------+
     | request()   |            | request()   |            | specialRequest() |
     +-------------+            +-------------+            +------------------+
・例

たとえば、ある文字列を二段階で強調をしたい場合、抽象レベルでは、printEm()とprintStrong()の2つのメソッドを持つ抽象クラスを考えます。

つぎに、具象レベルでは、文字列を2種類以上で区別している、やりたいことが似ているクラスはないかと探します。 あった場合、アダプタークラスでそれらを繋ぎ(適合)、二段階での強調を実現します。

・ターゲットクラス(Target)

やりたいことを抽象レベルで考えたクラスです。

public abstract class Target {
    public abstract void printEm();
    public abstract void printStrong();
}
・アダプティ−クラス(Adaptee)

やりたいことが似ている具象クラスです。

public class Adaptee {
    private String string;
    public Adaptee(String string) {
        this.string = string;
    }
    public void showWithParen() {
        System.out.println("(" + string + ")");
    }
    public void showWithAster() {
        System.out.println("*" + string + "*");
    }
    public void showWithSemicolon() {
        System.out.println(";" + string + ";");
    }
    public void showWithPercent() {
        System.out.println("%" + string + "%");
    }
}
・アダプタークラス(Adapter)

ターゲットクラスとアダプティ−クラスを繋ぐ(適合)クラスです。 ターゲットクラスを継承し、アダプティ−クラスを委譲します。

public class Adapter extends Target {
    private Adaptee adaptee;
    public Adapter(String string) {
        this.adaptee = new Adaptee(string);
    }
    public void printEm() {
        adaptee.showWithParen();
    }
    public void printStrong() {
        adaptee.showWithAster();
    }
}
・メインクラス(Client)

クライアントのメインクラスです。

public class Main {  //client
    public static void main(String[] args) {
        Target p = new Adapter("Hello");
        p.printEm();
        p.printStrong();
    }
}

Adapterクラスのインスタンスを抽象クラスのTargetクラス型へ代入しています。

そして、メソッドprintEm()とprintStrong()を起動すると、実は、回りまわって、Adapteeクラスの showWithParen()とshowWithAster()が実行されるわけです。しかし、メインクラスは、そんなことを知る由もありません。

このようにクラス間の結びつきを間接的にすることで、オブジェクトの独立性を高め、オブジェクトの部品化が促進されるわけです。


尚、本内容は以下の本を大変参考にしています。

2004/04/07(水)まる4年

ちゃいちゃんの5回目の年回も終わって、20人もの人と一年ぶりに再会致しました。

また、ご仏壇(宝前)は、可愛いお花が沢山で、相変わらず、ちゃいちゃんの影響力には驚くばかりです。まる4年も経っているというのに……。

その日(4/6)は、たまたま、偶然というか必然というか、道場当番で、9時のご供養がちゃいちゃんママの導師デビューになりました。私も会社を休んで、ママと一緒にご供養を致しました。


うちのアニキが、あれほど嫌がっていたお墓参りも、自ら一緒に来て、少しはトラウマが薄らいできた感じかな。

しかし、私は、なぜか鬱や……、スランプや……、情熱がない……。

また、しばらく、お休みします。