12/20(Wed)
/** この10日間の雑記模様 */ 歴代4位のファイルサイズでした(^^; 二日も抜いたわりには、大健闘(?)ですな。 っていうか、ここしか更新してないってのもあるけど。 近日、「てくにかるインフォメーション」を更新する予定。 /** 思い返してみれば */ こんなことしてきました〜編。 現場に配属されて、早6ヶ月にもなろうとしていますが、 ここまでで作ったものといえば、以下の二つだけになります。 1) データベースのある項目を「0」にセットする、 夜間バッチ用C Shellスクリプト。 2) クライアント画面(Power Builder(-_-;)に、ラジオボタンを一つ追加し、 コーディングを少しいじることで、新しい業務処理に対応した。 (メインはホストだから、クライアントはほとんどやること無し) 以上(^^; っていうか、こんなの中学生でも出来るって。 これで技術欲求を満たせって言っても無理。 要は、「開発経験」っていうものがほとんど無いんですね。 っていうか、保守ってそんなものなのかも知れないですけど。 とりあえず、新規開発したいですね。 /** 思い返してみれば - Part2 */ こんな人々がいました〜編。 人のことを信用しようとしないPM。 人が失敗すれば嘲笑するPL。 悪いところを指摘しないで、ただ突き返すだけのサブリーダー。 (しかもこの人完璧主義者かつ、ホスト支持者だからタチ悪い) 思考がネガティブになるほど、回りの人間が悪く見えるね。 今は、調査っていう地味な仕事しているけれど、 「よくここまで調べたな。」 とか言ってくれる、今のPM(当然上のPMとは別人)がとっても好印象です。 悪いところもちゃんと指摘してくれるし。 やっぱり、高橋尚子&小出監督の関係がいいのだよ。 怒るよりも誉めた方が、モチベーションを維持出来るし、 くさすよりも、良いところを伸ばした方がいいってね。 今だから分かる、指導者に必要な行動かな。 つい最近までは、尊敬できる人、目指すべき人がいないかと思ってたけど、 なんとか三人ぐらいはいたみたい(^^; でも、もう少しレベルの高いチームでやりたいな。 /** 思い返してみれば - Part3 */ VBオジサンどこまで行くの〜? 編(^^; そりゃあ最初の頃は、我らがリーダーだったから、 PCLの書き方やら、テストのやり方とか、色々教えてもらったさ。 人が出来ないのを見て、 「ま、そのうち覚えるでしょ。」 なんて発言もしてました。この人。 その後、技術力の無さを露呈したのでした(>_<; 46万件のデータを、Oracle(on HP-UX)のインポートユーティリティで入れようとしたものの、 あまりの件数の多さに、TeraTermは応答しなくなってしまいました。 さすがにムリか...とばかりに、Ctrl+Cで止めようとするも、やっぱり応答せず。 隣で見ていた僕が、「ps -e | grep imp」でプロセス番号調べて、killで止めればいいんですよ。 と言うも、チンプンカンプンらしい(^^; とりあえず、もう一枚TeraTermを立ち上げ、無事に止まったのでした。 が! また同じことをやったにもかかわらず、ヤツが言った一言がコレ。 「あれ? ねぇ、spコマンドだっけ?」 ...ていうか、キレていいですか? マジで。 別件では、 「インポートが、権限が無いとかでうまく行かないんだけどさぁ。」 とか言ってくるので、ls -alで権限を確認すると、きれいさっぱり権限が無いでやんの(^^; chmodで変えてやるとうまくいったものの、これも二回目聞いてきたのは言うまでもない(-_-; そして今日! なんか、チラチラこっちを見てる感じなので、アヤシイとは思ったけど、口を開いた途端、 「ファイルが破損してるって言われるんだけどさぁ。」 何の前提も無いのに適当に、「ftpの転送モードが間違ってるんじゃないですかぁ?」 と言うと、「あ。」と言い、そのまま固まってしまった(^^; それもこないだ教えたっつーの!! 完全に立場が逆転しつつあるこの頃。 っていうか、こんな人眼中に無いけど。12/17(Sun)
/** Servlet & JSP */ 時代に取り残されつつも、ようやくServlet & JSPを連携した、 超簡単アプリケーションを作って実験してみました。 ServletRequest.getRequestDispatcherで、RequestDispatcherを取得して、 RequestDispatcher.forwardで、ServletからJSPに飛ばすって感じでいいみたい。 そんな今更って感じがしないでもないですが(^^; そういえばJSPって、HomePage Builderみたいなツールを使うと、 抹消されちゃうらしいから、使いづらいんだそうです。 (<% 〜 %>っていう部分) 高価なWebページデザイナーを使えば、消えないのもあるらしいですけどね。12/16(Sat)
/** Digital Hard Disk Recording */ SC-D70購入計画です。 SC-88Proが、どのぐらいの値段で売れるのかと思って、 Yahoo! オークションを見てみたら、 なんか、2万円ぐらいで売れそうな雰囲気だったりします。 オークションだから、危険性たっぷりなんだけど、 最悪、持ってかれちゃってもいいやぁぐらいの気持ちでいかないと、 本当にやられた時に、かなりショックかも(^^; 次に、CPUのパワーアップなんですが、 今のマシンのCPUを載せかえるか、新しいマシンを買うかなんですが、 正直言って、新しいマシンを買ったほうが、良いような気がします。 激安PC http://www.storm-net.com/system2/lowend-pc.htm ただ、やっぱりなるべく安く行きたいので、CPUを載せかえることにしました。 なんか、色々調査してみると、ASUS P2Bって、めちゃめちゃ古いことに気づきました(^^; どうやら、ジャンパの設定上、PentiumIII 600MHzが限界のようです。 (裏設定を使って、クロックアップしたらどうなるか分からないけどね(^^;) で、BIOSのアップデートが必要だったので、 とりあえずアップデートだけしようと思って、準備&決行! aflashとかいうあやしいツールをFD起動のDOSから起動するも、 バージョン表示のみ出て、固まる。 「おかしいなぁ」と思って、とりあえずCtrl+Alt+Delでリセットかけようと思っても、 全く反応せず。やや焦る(^^; 「どうせまだ、BIOSのアップデートも何にもしてないから大丈夫だろ!」 と思い、PCのリセットボタンを押してみる。 完全にリセットがかからず、画面が真っ暗になる。まじで焦る(^^;; 「しょうがないなぁ!」と思いつつ、裏の電源コードを抜くと、 ようやく落ちてくれました(^^) で、もう一回挿しなおしたら、何事も無く起動。 かぁなりホっとしました。 どうやら、aflashは固まってうまく行かないので、別の手段を探してみたところ、 LIVE UPDATEなる、Windows上で動くGUIベースのフラッシュユーティリティを発見しました。 ASUS BIOS UPDATE(ドイツ(^^;) http://www.asuscom.de/de/support/techmain/bios/bioslink.htm (このページの真中より下らへん) う〜ん。とってもリスキー(^^;; で、やっぱり試してみました。 インストールウィザードが立ち上がり、インストールは問題無く完了。 で、BIOSのイメージ(*.awd)を指定して、覚悟を決めて、FlashボタンPush!! 3本プログレスバーがあって、1本目は即終了。 2本目に時間がかかるが、確実に進行中。 「頼む! 無事終わってくれ!!」 と、祈りつつ、2本目も無事終了。 3本目も難なく終わり、「Successfully!」で終了したのでした(^^) あとは、PentiumIII 600MHz買うだけですなぁ。 kakaku.com (\20,000ぐらい?) なんにしても、Slot1とSocket370を間違えないようにしないと(^^; /** 目指せ! Oracle Master Silver!! */ 結果は、「しゃあしゃあ」です(^^; っていうか、14問以上正解が合格で、「18/20」だから余裕でしょう。 既に、Oracle入門の方もエントリー済み。 Oracle Master Silverも近いね。 /** もう買ってしまいました(^^; */ 上で、 > あとは、PentiumIII 600MHz買うだけですなぁ。 とか書いてますが、受験の帰りに秋葉原に寄って、 PentiumIII 600MHz買ってしまいました(19000円弱) (だって、隣の駅だったんだもん。) それにしても、探すの苦労しましたよ。 もう、750MHz以下のCPUは、秋葉原の街から消え去ってます。 俺コンハウスで533MHz、T-ZONE DIYで600MHzを見つけるのがやっと。 今のPentiumII 266MHzなんでゴミ同然です(^^; で、当初の予定通り、600MHzで動いてくれているようです。 なんつっても倍だからねぇ。やっぱり早いね。 ClientサイドのJavaが、PCの高速化で使い物になるなんて、絶対ウソだと思ってたけど、 Swingベースのアプリケーションが体感で早くなるあたり、 あながちウソではないのかも。なんて思ったりして。 まあ、メモリ384MB積んでるってのもありますが(^^; Sofmap 8号館のMIDI専門店の前を通った時、 SC-D70のデモの予定表が書いてありました。 やっぱり、デジタル録音の時代なんだろうなぁ。 つーわけで、SC-88Proは売却決定。SC-D70購入決定ですな。12/15(Fri)
/** ナス確認OK! */ ちゃんと入ってました(^^; よくよく考えると、コンポやら、ビデオデッキやら、SC-D70(下の記事参照)やら、 なんか買いたいものがわさわさ出てくるんですが、 使い出すとキリが無さそうなので、やっぱり置いときます(^^; 金銭感覚は、正常に保たないとね! まあ世の中、カードの支払いだけで終わっちゃう人もいるみたいですが(^^; /** 忘年会幹事なんてめんどいねぇ(>_<; */ なんとか取れましたが、開始時間が午後8:45に。 2時間ぱーとやって、ちゃっちゃと終わりましょ。 今日も、5〜6件電話しましたが、どこも渋い反応。 もうめんどくさいので、妥協して上記時間になりました。 だいたい、12/22(金)なんて絶好の飲み日和を、 普通の人なら見逃すテは無いよねぇ。 /** なにげにすごい変わってました。 */ 情報処理新試験制度のお話。 一種に相当する、「ソフトウェア開発技術者試験」なんですが、 さりげなく「午後U」なんてものが追加されてます(^^; しかも、1問出題で1題回答とかいう、選択の余地無し方式。 午前の選択もなくなった模様。 プロダクションエンジニアが無くなった分、 一種やその他の高度に飛び火したらしい。 これは、「旧一種」≠「ソフトウェア開発技術者試験」を意味するけど、 旧一種の価値って、ちょっと下がるかもねぇ。 (そのまた前の一種は、旧々一種とかって呼ばれるのかねぇ(^^;) ちなみに、高度の午前問題が減少して、 80問→50問になったもよう。 試験開始時間が1時間遅くなって、これは嬉しい感じ(^^) その代わり、1時間短いんだけどね。 僕に関係するのはこの辺。 専門学校に行ってる人は、免除制度も変わったらしいから、 その辺も要注意かもねぇ。 詳しくは、リニューアルした情報処理試験センターホームページへ。 /** Digital Hard Disk Recording */ アナログ経由でMDに録音しても、全然良い音にならないから、 もう少しまともな録音環境が欲しいと思って、UA-100Gを買おうと思ってたけど、 今日来た、Singer Song Writerバージョンアップのお知らせに、 「SC-D70」なる音源が載ってました。 ベースはSC-8820(音源部: SC88Pro互換)で、デジタル端子を備えていて、 PCとの接続は、USBケーブルのみでOKという、夢のMIDIデジタル録音環境。 YAMAHAのSW1000XGの外だしバージョンみたいなもんでしょう。きっと。 これが、優待価格で「62050円」。 非常に迷うところではあるけど、冷静に考えてみると、 ・CPUパワーが足りない(Pentium350MHz以上必要) ・待てば、もう少し安くなる気がする で、待ちっぽい。 でも、SC-88Proを手放すとしたら、今の内って気もするんだけどねぇ。 まあ、優待期間は来年2月末まであるから、じっくり考えますか。 /** 目指せ! Oracle Master Silver!! */ 試験前日の「あがき」の成果(^^; (1)グループ関数は、2レベルまで入れ子可能。 つまり、MAX(AVG(col_name))みたいな記述が可能ってこと。 ただし、1レベルの時は、 「SELECT COUNT(*) FROM hoge_table」 みたいに、GROUP BY が無くても、集計関数が使えるけど、 2レベル入れ子の場合は、GROUP BYが必須です。じゃないとエラーが出ます。 理由は? 良く分かりません(^^; (2)ORDER BY の昇順、降順指定は、各列ごとに付けましょう。 つまり、 ORDER BY col1, col2, col3 DESC みたいにやるんじゃなくて、 ORDER BY col1 DESC, col2 DESC, col3 DESC とやりましょうってこと。ごく基本っぽい。 ちなみに、省略した時はASC(昇順)になる決まりなので、 ORDER BY col1, col2, col3 って書いた時は、 ORDER BY col1 ASC, col2 ASC, col3 ASC と等価ですね。 (3)SQL*Plus中でのファイルに書いたSQLの実行は、「@」か「START」で。 「@hoge.sql」とか、「start hoge.sql」で実行可能。 ちなみに、SQL*Plus起動中でなくても、コマンドラインから、 「sqlplus username/password @hoge.sql」 とかやっても、実行可能。 (4)TRUNC関数は、マイナス指定で整数部を、プラス指定で小数部を切り捨てる。 つまりこういうこと。 TRUNC(999.999, 2) → 999.990 TRUNC(999.999, -2) → 900.000 (5)条件指定の不一致は、「!=」「^=」「<>」のどの演算子を使っても表現可能。 説明の必要無し。 (6)SAVEPOINTまで戻るROLLBACKの書き方。 ROLLBACK TO A ROLLBACK TO SAVEPOINT A の二通りがある。 (7)MONTHS_BETWEEN関数は、先に指定した月から、後に指定した月の差を取る。 例えば。 MONTHS_BETWEEN(to_date('20000229', 'YYYYMMDD'), to_date('20000131', 'YYYYMMDD')) → 1(共に月末のため、ちょうど1ヶ月とみなされる) きっちり一ヶ月じゃ無い時は、小数を返す。 これで明日はバッチリ?12/14(Thu)
/** 明日は休み。 */ ほっとするねぇ(^^) /** 話題沸騰! 2001年問題!! */ Excel97(Excel95も)や、Access97において、6桁指定(mm/dd/yyとかyy/mm/dd) のセルに6桁の日付を代入すると、12年戻ってしまうという現象です。 例えば、「01/01/01」とか。 原因は、年号の「01」を平成1年(元年)と解釈してしまうので、 平成元年=1989年ということで、12年ずれるということらしいです。 ちなみに、Excel2000では発生しませんでした。 (っていうことは、日付処理の部分を完全に作り直してるってこと?) うちで扱っているアプリケーションの中に、SpreadSheetとかいう、 VBX(今更...)のコントロールを使ってるのがあって、 その結果表示の後に、Excelで出力出来るなんて機能をつけちゃったもんだから、 結構大騒ぎになっちゃってました(^^; まあ、去年の2000年問題対策も効いているせいか(6桁で日付を扱っている個所が無いらしい)、 結構余裕の対応で済みそうだということです。 /** 忘年会幹事なんてめんどいねぇ(>_<; */ 電話すれば、ことごとく断わられるし(>_<; ちょっと、手遅れ気味っぽい。 どこの店も、「18人...ですか?(^^;」みたいな反応だし(-_-; 明日は総当り作戦決行。 やっぱり幹事はめんどいのだ。 /** 僕の後輩 */ もういるんかい! つー話ですが(^^; 6月ぐらいに作った、XMLとJava(Servlet)でコネコネして作り上げた意味不明システムを、 なぜか、同じ研修で後輩が改造しているらしく、 職場にいる僕のところにまで、電話で質問が飛んできたらしいです。 質問は、 「importするやつは、どこに置いたら良いんですか?」 とかいう、一瞬意味が分からない質問だったものの、 「とにかくextディレクトリを探して、そこにぶち込んどけ!」 という回答で、かわしておきました(^^; やつら、JDKが通じない時点で、すごいアブない気がするんだけど... Visual Cafe使って、思いっきりブチ壊してくれれば、 永久に触られることもなくなるだろうから、それはそれで良いのかも。 どうせだったら、電話なんて中途半端なマネしないで、 僕を召喚してくれればいいのに。 そうしたら、堂々と仕事がサボれるのになぁ(^^;12/13(Wed)
/** 目指せ! Oracle Master Silver!! */ ・システム権限とオブジェクト権限 テーブルを作ったり、他ユーザのテーブルを見たり、セッションを作ったりする、 データベースへアクセスするための権限を、システム権限と言います。 もう一つは、作られたテーブルやインデックスなどのオブジェクトに対して、 何が出来るのかを表わしたものがオブジェクト権限です。 DBSPの参考書にも出てくるのが後者で、 よく、hoge_tableのSELECT権限を、hogehogeユーザに与えるというような例題が出てきます。 「GRANT SELECT ON hoge_table FOR hogehoge」 システム権限は、100種類以上にも及ぶため、一つ一つ設定していると大変なので、 まとめて一つのシステム権限と出来るような、「ロール」(役割)という概念が存在します。 一般的な操作のみを許す場合は、CONNECTロール、無制限に領域を使える、RESOURCEロール、 データベース管理用の、DBAロールなどがあります。 そこで。 自分が普段開発で使っているユーザは、一体どんなロールを持っているのか? という疑問が湧いたので、早速調べてみることにしました。 「SELECT * FROM SESSION_ROLES」 すると、「CSなんちゃら」とかいう見慣れないロールを発見しました。 きっと、この環境用に定義されたロールなのでしょう。 基本的には、権限が無くて出来ない操作なんて、今まで無かったような気がします。 だから開発がスムーズに行っているんでしょうが、 逆になんでも出来ちゃうと、壊しちゃう危険性があるような気もしますけどね。 ちなみに、このロールがどのシステム権限から成っているのかは、 調べる方法が分かりません(T_T) 多分、別のデータディクショナリを調べれば分かるんでしょうが、 その辺はSILVERの範囲では無いようなので、今後の課題ってことになりそうです。 あたりを付けるだけなら、 「SELECT view_name FROM all_views WHERE owner = 'SYS' AND view_name LIKE '%ROLE%'」 で調べられるのかも? ・ロールバックセグメント RBSとか呼ばれているヤツです。 UPDATE文や、INSERT文などの更新処理を発行すると、 このロールバックセグメントに、更新前の情報が書き込まれます。 そして、commitが発行され、トランザクションが完了するまでは、 更新中状態になっています。 この時に、この更新中のデータに対してSELECT文を発行するとどうなるかというと、 ロールバックセグメント中の古いデータを参照しに行きます。 (ただし、更新しているユーザのSELECTは、新しいデータを取得出来る。) UPDATE文などの更新処理は、待ち状態になります。 このように、更新中のデータに対してもアクセス出来るように、 ロールバックセグメントが使われています。 もちろん、その名前の通り、ロールバックされた時や、 データの更新に失敗した場合などのデータの戻しにも使われます。 ここでの問題点は、「必ずしも最新のデータを取得出来ない」ことにあります。 リアルタイム性を重視したシステムの場合、これでは問題なので、 SELECT文に、FOR UPDATE NOWAITを付加します。 こうすることで、更新中のデータにアクセスしたとしても、 「ORA-00054」というエラーを返すようになり、 古いデータは取得出来ないようになります。 これで、リアルタイム性を確保できることになります。12/12(Tue)
/** 期待出来そうにないな。 */ 2週間ぶりに、移籍交渉をしている自分の姿が脳裏に浮かびました。 だって、今の職場にいても、「技術者としての満足度」を高めることは、 到底出来そうにないんだもん。 というかそれ以前に、業務系のプログラマとかSEに向いて無いのかもねぇ。 /** 目指せ! DBSP!! Part2 */ 去年はちっとも読まなかった、itecの事例解析を読んでるところです。 技術解説部分のみで、問題はちっともやってませんが(^^; (だって、今やっても理解不能っぽいし。) で、 今日分かったんですが、データディクショナリって、別にオラクルに限った話じゃ無いらしいです。 サイト(とある場所にあるサーバ)に固有な、ローカルデータディクショナリってのと、 データベースシステム全体の情報を持つ、グローバルデータディクショナリってのがあるらしいです。 ローカルデータディクショナリってのが、昨日説明したようなヤツで、 グローバルデータディクショナリってのが、どのテーブルがどのサイトにあるとかいう、 ポインタ情報を保持しているみたいです。 これによって、テーブルがサイト間で移動したとしても、グローバルデータディクショナリを参照すれば、 目的のテーブルを参照出来るという仕組みが出来上がります。 こういうのを、透過性(transparency; トランスペアレンシー?)って言うんですね。 要は、プログラムからテーブルの位置を意識しなくても良いっていう事。 考え方は、CORBAのNamingサービスに近いのかも。 じゃあ、グローバルデータディクショナリをどこで持つのかっていう話ですが、 これにはいくつかの方式があって、全サイトが同じデータディクショナリを持つ(同期が大変そう)、 あるサイトのみが持つ(そのサイトがこけたら終わり、いちいち見に行かなきゃいけない)、 一部のみをローカルに持つ(メリット、デメリット半々?)など、 システムの特徴を考えて、配置を考えなきゃならないらしいです。 なんだか壮大な話ですなぁ〜(^^; 面白そうだけど、すっごく大変そうだねぇ。 でも、こういうのが出来る人が、本当のスペシャリストなんだろうけど。12/11(Mon)
/** 定時も今日で終わりかも... */ ニュープロジェクトのリーダーに、 「やることはいっぱいあるから、覚悟しとけよ。」 的ニュアンスで脅されました(^^; 面白いことだったらドンと来いってなもんです!! もう、COBOLとかPower Builderはカンベンね(^^; /** VBな日々 */ 今日で終わりっぽいですが(^^; 基本設計書が出来ていないのに、プログラム設計書を書き上げ、 ミドルウェアにつなぐところ以外のコーディングも出来てしまいました(^^; (そこも、既存のをパクればいいだけだから、簡単だけど。) 手順を無視しきった開発のやり方だけれど、全然上流が進まないから、 多少は裏で進めておかないと、痛い目見るだろうからねぇ。 まあ、基本設計書が出来てないから、仕様変更になるだろうけど、 よっぽど変わらない限り、その使えそうだから、ムダにはならないだろうね。 /** 目指せ! Oracle Master Silver!! */ ・更新可能なビュー DBSP的には、複数の表から選択した場合は、ビューを更新できないのですが、 Oracle8(以降?)は、条件付で出来るそうです。 条件ってのがなんなのかは、僕の本には書いてありませんでしたが(^^; なんにしても、Oracleってすごいですねぇ。 さらに、さすがって思えるのは、 CREATE VIEW view_name AS 〜 WITH READ ONLY のように、WITH READ ONLYっていうのを付けてやることで、 更新可能条件であっても、更新されないという機能があることですかね。 ちなみに、DISTINCT、GROUP BY、ORDER BYなど、 従来から更新可能ビューに禁止とされているものについては、 やっぱり禁止されているみたいです。 この辺は、きちんとSQL92へ準拠してるみたいですね。(当たり前か(^^;) ・データディクショナリ これを知らないと、Oracleじゃあ何にも出来ないって言っても過言じゃありません。 典型的には、user_tablesとか、all_sequencesとか、 各ユーザもしくは、全ユーザが所有するオブジェクトの状態を見るのに使います。 例えば、自分が持っているテーブル名の一覧を得るには、 「SELECT table_name FROM user_tables」 みたいにすれば出来ます。 all_XXXデータディクショナリだと、全員分が対象となるわけですから、 大抵、ownerもしくは、それに相当する属性を持っています。 例えば、sysユーザが持っているビューを表示するには、 「SELECT view_name FROM all_views WHERE owner = 'SYS'」 みたいにすれば出来ます。 (と言っても、SELECT ANY TABLES権限が無いとダメっぽいけど。) この結果を見ると、数多くのデータディクショナリが見られます。(見られるはずです(^^;) 中身は、「SELECT text FROM all_views WHERE view_name = 'XXX'」 で見ることが出来ます。 試しに、user_tablesの中身を見てみましたが、FROM句が無い、意味不明のものでした(^^; まだまだ修行が足りないようです(^^;;