2/10(Sat)
/** オンラインショッピング♪ */ bol.comで本を買ってみました。 火曜日深夜に注文したら、金曜日に届いたらしい。 (実際に受け取ったのは今日だったんだけど。) 買ったのは、やまたけさんに教えてもらった「リファクタリング」と、 「オブジェクト指向における再利用のためのデザインパターン」という二冊。 多分、普通の書店じゃなかなか置いてないだろうし、探すの面倒だし、 あったとしても、重くて持って帰るの大変そうだし(^^; 家まで届けてくれるのは、すっごいいいね(^^) それにしてもナゾなのが、「消費税」と「送料」 本って、消費税内税じゃなかったっけ? そうじゃない本もあるってことなのかなぁ? そして、配送手数料0円もナゾ過ぎ。 一体この会社は、どこで利益を上げているの? 消費税の名目で取られてるのが、実は送料+利益だったりして? (→そんなワケない(^^;) あ、そういえば、仕入れが独自ルートで安いとかっていうのは考えられるか。 amazon.comなんかも、洋書は2割引とかやってたもんねぇ。 いかんせん、業務知識不足ですなぁ。 ただでさえ「証券」が分かってないのに、対象外の「流通」が分かるわけないよね(^^; /** リファクタリング */ 読み始めること5分。 「コンパイラが理解できるコードは誰にでも書ける。 すぐれたプログラマは、人間にとってわかりやすいコードを書く。」 とか書いてあって、思わず感動(^^; この本、オブジェクト指向プログラマは、必読なんじゃないかと思うぐらい。 まだ読み途中なんですが、こないだ作った「EventListViewer」ソースを見てみたら、 要リファクタリングソースを見つけて、思わず、 「いたっ!」 とか言ってしまいました(^^; でも、一番の懸念は、実際いかに優れた理論や実践があったとしても、 現場において使われないと意味ないんだよね。 プロジェクトメンバー全員が、これを理解するのは不可能だろうなぁと。 なんせ、前提知識からして、「オブジェクト指向」だの「デザインパターン」だの、 難しいからね(>_<; /** J2EEでEJB */ これから「BMP Entity Bean」とか「CMP Entity Bean」でOracleに接続するための準備中。 会社でやった時は、JDBC-ODBCブリッジドライバで接続できたのに、 家でやってみると、 「No Suitable Driver」 みたいなエラーが出て、全然うまく行かない(T_T) そこで、以前うまくいかなかった、Oracle提供のJDBCドライバを使ってみることに。 が、 「UnsatisfiedLinkError」 が出て、これもやはりうまく行かず(T_T) ただ、上記のエラーは、ネイティブメソッド実装が見つからない場合に起こるもので、 JDBCドライバとは関係ないことが判明。 そこで、もう一度ドキュメント(英語(>_<;)を見直してみると、 LD_LIBRARY_PATHを設定せよ。との記述が。 こいつを、 export LD_LIBRARY_PATH=$ORACLE_HOME/lib として設定することで、無事JDBCドライバが動いたのでした(^^) 結局JDK1.3に、JDK1.1用のドライバを使ったわけだけど、 難なく動いてしまいました(^^; なんか、クラスパスの張り方が悪かったのかも。 とりあえずこれは現場でも試してみないとね♪2/9(Fri)
/** 目指せ! MIDI検定3級!! */ なにげに満点合格! ちょっとうれしいかも(^^)v あんなに一所懸命勉強しなくても良かったワケね(^^;; 来年は、2級なんか受けてみたりして。 → シロウトの分際でなめすぎ(^^; /** New新川崎! */ 仕事が軌道に乗ってきた感じ。 今は、Pro*C → Javaの移植作業中。 しっかし、C言語のソースを読んでいると、 「今にも壊れそう」な気がするのは僕だけ? (^^; それと、コーディングした人を尊敬してしまうのでした。 JDBCを使ったJavaコードに置き換える際に感じるのは、 「やっぱりJavaで良かった♪」 という安心感(^^) APIリファレンスがあれば、鬼に金棒って感じです(^^; でも、配列はnewしたのに、配列の要素をnewするの忘れて、 NullPointerExceptionで5分ぐらいハマったけど(^^; あまりにも初歩的過ぎ(^^;;; にしても、仕事が良い感じすぎるね!2/7(Wed)
/** New新川崎! */ 最近、趣味と仕事がシンクロし過ぎ(^^; 今日は、Entity BeanでOracleと接続する予定で、 なんとなくJDBCのサンプルコードが必要だろうなぁと思って、 ディレクトリ適当に漁ってたら、ちゃあんと、 「JDBCで直接DBに接続するサンプル」「JDBC-ODBCブリッジを使ったサンプル」 が用意してあるし(^^; そして、結局役に立ったのは、「JDBC-ODBC〜」の方。 なぜなら、OracleのJDBCドライバは、古いのだ。 つまり、普通のアプリケーションなら、下のルートを使うところなのに、 まだ上のルートを使わざるを得ないという状況なわけだ。 そもそもSunが用意したJDBC-ODBCブリッジドライバというのは、 各データベースベンダーがPure JavaなJDBCドライバを用意するまでの いわゆる橋渡し的なものという歴史的背景があるのに、 JDKのバージョンがあがってサポートし切れてないことを理由に使われるとはね(^^; 多分、お金持ちなシステムなら(^^; SequeLinkとかいうのを使うんだろうけど。2/6(Tue)
/** New新川崎! */ 今日一日、「XMLからJavaコード自動生成」を考えっぱなし。 っていうか、深みにハマった可能性大。 いかんせん、中途半端なデザインパターンの知識も邪魔しているらしい。 入力系の「Servlet」&「JSP」、データストア系の「Entity Bean」&「DBスキーマ定義」とか、 なんでもかんでも自動生成させようとすると、 「GUIの無い開発環境」 を作るのと同じように思えてきた。 とてもじゃないけど、期限までには間に合わなそう。 多分、雛型を作るぐらいだったら、実装可能なんだろうけど、 そうすると、自動生成というか、半自動生成になっちゃうしねぇ。 まあ、データ構造と実装の整合性が取れるっていうメリットがあるけど。 とりあえず自分で作るよりも、他人のものを使えってことで、 RELAX & Relaxerという現実的な手段を考えるも、 JAXPを使わないと、Javaクラス → DOMツリーの変換が出来ないらしいし(-_-; DBスキーマ定義の生成は、「予定」みたいになってるし(T_T) もう少し現実的なソリューションとして、「Caster」とかいうのがあるらしいけど、 こいつは、あの悪名高い「XML Schema」を元に、各種リソースを生成するから、 「どうもねぇ(-_-;」 と言わざるを得ないところです。 っていうかそもそも「XML Schema」って、まだ決まってないし。 XML → ソース自動生成ツールって、まだ発展途上っぽい。 まあ、スキーマ言語が発展途上ってのもあるんだろうけど。 結局自分で作るしかないのかぁ!?2/5(Mon)
/** New新川崎! */ XMLも使うとか、使わないとか。 最新技術を結集するとか、しないとか。 なんか、すっげぇ面白い展開になってきた気配(^^) /** 某APサーバ */ XMLパーサは、自分のところで作ったものらしい。 なんかとってもヤな感じ。 出来ればXerces、ダメならJAXP、それ以外は使いたくないのに... サーブレットエンジンは、JSDKっぽい。 サーブレットをコンパイルする度に、いちいちサーブレットサービスを再起動しなきゃいけないし。 その辺がとってもservletrunnerに似ている。とってもアヤシイ。 JSPは、毎回Servletに吐き出してコンパイルしてるから、 全然大丈夫みたいなんだけど。 他APサーバへの移植も考えて作らないとダメかも...(-_-; /** 目指せ! DBSP!! Part2 */ 1週間ぶりぐらいに勉強してみた。 思ったよりは感触が良かったが、かぁなり眠いね(-_-; 問. X→Y かつ X→Z のとき、X→YZ を証明せよ って、中学校数学の証明問題じゃねぇっつうんだよ。 おまけに、「増加律」だの「推移律」だの、難しい言葉で塗り固めやがって。 はあぁ... 果てしなく遠い道のりだねぇ(>_<; (つっても、あと2ヶ月ぐらいしかないけど...)2/4(Sun)
/** 目指せ! DBSP!! Part2 */ 滞り中...や、ヤバイ(-_-; /** 目指せ! Oracle Master Gold!! */ そういえば、PL/SQLでしくったことが。 Silverを取った日に、勢いだけで買ったのが、 オライリーの「オラクル PL/SQL プログラミング」という本。 ただ、この本「基礎編」「応用編」「補足編」という3バージョンあって、 あろうことか、いきなり補足編を買ってしまったのでした(^^; 3400円もして、結構へこんでいたんですが、 基礎編や応用編の補足ということで、そろそろ読めるだろうと思ったんですが、 オブジェクト指向だの、UMLだの言葉が出てきて、やや唖然(^^; PL/SQLって、その名のとおり手続き言語じゃなかったっけ? やっぱりしくったかも...(T_T) /** J2EEでEJB */ Session Bean は、かぁなり理解完了っぽい。 自分で考えて作れるレベルにまで成長致しました(^^; あと、一応Entity Beanも動いたけど、J2EE付属のcloudscapeとかいう データベースを使って、さらにサンプルしか動いてないから、まだまだこれからって感じ。 でもまあ、動作原理はそこそこ頭に入ってるから、 理解完了まで、そんなに時間はかからないかも。 とりあえず、cloudscapeじゃなくて、Oracle8iとつなげてみたいね。 にしても、EJBはCORBAなんかに比べて、はるかに複雑だね(>_<; CORBAなら、ネーミングサービスを通じて、リモートオブジェクトの参照を取得して、 あとは、そいつのメソッドを呼び出せば完了だから、結構シンプルにものごとが済む。 けど、EJBは、ネーミングサービスを通じてHomeインタフェースを取得して、 Homeインタフェースを通じてEnterprise Beanを作成、Remoteインタフェースを通じて、 リモートメソッドの呼び出しっていう手続き。 この違いを理解することが、EJBの理解につながるかもねぇ。 多分、なんちゃらインタフェースだの、コンテナだの、 Enterprise Beanから、外部の色々なものを隠蔽することで、 サーバサイドアプリケーションの再利用性を高めてるんだろうけどねぇ。 なんかまだまだ理解不足です(-_-;2/3(Sat)
/** 目指せ! Oracle Master Gold!! */ 今日一日PL/SQL漬け! (^^; ・SELECT 〜 FOR UPDATEを使ってデッドロックを起こす方法。
画面1 | 画面2 |
SQL> select grade from salgrade (1) 2 for update; GRADE ---------- 1 2 3 4 5 SQL> select deptno from dept (3) 2 for update; select deptno from dept * ERROR at line 1: ORA-00060: deadlock detected while waiting for resource SQL> |
SQL> select deptno from dept (2) 2 for update; DEPTNO ---------- 10 20 30 40 SQL> select grade from salgrade (4) 2 for update; |
画面1の方は、salgrade → deptの順番に資源をロックしているのに対し、 画面2の方は、dept → salgradeの順番に資源をロックしているので、 (4)を実行してから、画面1の方でデッドロックを起こしてます。 この場合、両方とも「salgrade → dept」の順番に資源を確保するようにすれば、 デッドロックを起こさないで済むようになりますね。 で、画面2の方は、画面1の(1)で確保したsalgrade表が開放されないので、 止まったまんまになってます。 っていうか、FOR UPDATE自体は、PL/SQLと関係なかったりして(^^; 一応、UPDATEとかDELETEするのに、FOR UPDATEを使ったSELECTをして 必要な行にロックをかけてから、更新処理をする場合に使います。 ・ユーザ定義例外 この辺は、Javaをやっていれば、なんら問題が無いところ。 やっぱり、他言語(多言語?)を知っているのはいいねぇ。SQL> !more exception.pl DECLARE num_data NUMBER; number_ex EXCEPTION; BEGIN num_data := &input_num_data; IF num_data < 0 THEN raise number_ex; ELSE DBMS_OUTPUT.PUT_LINE('OK.' || num_data); END IF; EXCEPTION WHEN number_ex THEN RAISE_APPLICATION_ERROR(-20001, 'Input Number is Invalid.'); WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20002, 'Unknown Error.'); END; / SQL> @exception.pl Enter value for input_num_data: 123 old 6: num_data := &input_num_data; new 6: num_data := 123; OK.123 PL/SQL procedure successfully completed. SQL> / Enter value for input_num_data: -123 old 6: num_data := &input_num_data; new 6: num_data := -123; DECLARE * ERROR at line 1: ORA-20001: Input Number is Invalid. ORA-06512: at line 16 SQL>実質3日でここまで来た(テキスト終了)けど、 試験対策としては十分でも、実際使うとなったら、こうはいかないんだろうなぁ。 とか思うこのごろ(^^; /** これがGeckoエンジンだ!? */ Netscape6のちょっとだけいいところ。 テーブルを全部読み込まなくても、途中でも表示してくれるところ。 Web Boardとか見に行くと、はっきり分かったりします。 でも、それだけじゃぁねぇ...(-_-; /** New新川崎! */ 「JRunでEJB」や「J2EEでEJB」が、仕事に役に立つとはねぇ。 今のところ、これだけこなす予定。...しばらくはEJB漬けかも(^^; 2/1(Thu)
/** New新川崎! */ 仕事の内容が180度変わって、一気に面白くなった感じ(^^) 昔なら、帰る途中の思考は、 「明日も仕事か...どうせやること無くて定時だろうなぁ...」 しかなかったのに、今日辺りは、 「明日はあれやって、これやって、あー時間足りねぇなぁ!」 っつー感じだもん(^^; 仕事への集中力も大分増したので、 以前に比べて、時間経ち方が全然変わってきました。 「もう定時か!」 って思うし、多少残業しても、全然苦じゃないしね。 やっぱり、腐りかけつつ、仕事以外(資格とか)でがんばってたのが良かったのかなぁ。 なんにしても、まだまだ上昇していくべし! 連休をムダにしたら、バチあたるかもと思ってるこの頃(^^; しっかし...つい1ヶ月前までTech Being買ってたヤツのコメントとは とても思えないほどの変わりようだよねぇ(^^; /** ぐち口 */ 日常会話でも、何気なくグチが出るんですが(-_-; 早いところ、過去の記憶濃度を薄めていきたい感じ。