雑記帳 2005年 11月第3週

2005/11/13 Sun.

記憶を辿ってみると、どうも11日と12日の雑記の内容がおかしい。時間が無いからといってまとめて書くと、たまにこうなる。
FTTHを繋いだのって土曜日だっけ?金曜の夜中から作業を始めて、土曜の朝方までやったような気がするんだけどなー。
土曜に起きたら16時半ってのは合ってるけど、確か土曜日は起きたら既に親父がISPに連絡してFTTH繋がる状態だったはず。
ってことは、土曜日の雑記の内容はほとんど金曜深夜の内容ってことだな。何だかますますワケわからん雑記になってきた。

さて、4時間しか寝てませんが今日も元気に出社です。ウソです、さすがにそろそろ体力の限界です。寝させて下さい。
今日は長らく開発してきた機能の本番環境へのリリースですよ。試験環境でも何事もなく動いてるので、問題無いはず!
10時出社のはずだったが、起きたら8時45分で遅刻確定状態。着いたのが10時20分前後。何も言われなかったしOKっしょ。
さっさとFTPで本番環境に上げて、検査仕様書に沿って試験開始です。13時過ぎくらいに全部を終えて、とりあえず食事。
機能自体には問題は無かったが、仕様書関連で記述不備があるとかであれこれ直す。ってか、これが一番メンドい作業。
自分の担当の仕様書修正はすぐに終わったのだが、だからといってさっさと帰るワケにもいかず、周りが終わるのを待つ。
ちなみに、今のこの機能を開発しているのは自分を含めて3人です。はっきり言って、人数不足。猫の手でもいいからくれ。
18時45分頃になって、ようやくドキュメント類も一通り揃って作業終了となった。新バージョンのリリースがついに終了!

 *     +    巛 ヽ
            〒 !   +    。     +    。
      +    。  |  |
   *     +   / /   イヤッッホォォォオオォオウ!
       ∧_∧ / /
      (´∀` / / +    。     +    。   *
      ,-     f
      / ュヘ    | *     +    。     +   。  +
     〈_} )   |
        /    ! +    。     +    +     *
       ./  ,ヘ  |
 ガタン ||| j  / |  | |||
――――――――――――――

水曜くらいまで何事もなく本番環境でこの機能が動いてくれれば、完全に終わりとなるでしょう。バグ出ないで下さい!
とりあえず、今回リリースしたソース類をまとめないとな。同じファイルがバージョン違いで山ほどあるし、間違えそう。
ま、そんな作業は来週にでもすることにして、さっさと帰りますよ。睡眠時間が足りてないから一日中頭が痛かったのだ。
立川で食事をして、さっさと帰って21時には就寝。ってか、体力と精神力が尽きすぎて終身状態。今日は爆睡してやるぜ!

2005/11/14 Mon.

4月27日の雑記で書いたソート用の「Javaのソース」を変えてみた。文字列比較だけじゃなく、数値比較も可能にしてみる。

import java.util.*;
public String sortTokens(String sData, int iNo, String sSplit, boolean AsInteger) throws Exception {
    String sWork = new String();
    String sResult = new String();
    String sTokenLine = new String();
    String sTokenLineToken = new String();
    String sarResult[];
    int iTokenLineTokenNum = 0;
    int iTokenLineTokenCount = 0;
    try {
        StringTokenizer stk = new StringTokenizer(sData, "\n");
        while (stk.hasMoreTokens()) {
            sTokenLine = stk.nextToken();
            StringTokenizer stk2 = new StringTokenizer(sTokenLine, sSplit);
            iTokenLineTokenNum = stk2.countTokens();
            if (iNo > iTokenLineTokenNum || iNo <= 0) {
                return null;
            }
            sWork = this.getToken(sTokenLine, iNo, sSplit) + sSplit;
            while (stk2.hasMoreTokens()) {
                iTokenLineTokenCount++;
                sTokenLineToken = stk2.nextToken();
                if (iTokenLineTokenCount == iNo) {
                    continue;
                }
                sWork += sTokenLineToken + sSplit;
            }
            if (!sTokenLine.endsWith(sSplit)) {
                sWork = sWork.substring(0, (sWork.length() - 1));
            }
            sResult += sWork + "\n";
            iTokenLineTokenNum = 0;
            iTokenLineTokenCount = 0;
        }
        if (AsInteger) {
            StringTokenizer stkCheckInt = new StringTokenizer(sResult, "\n");
            int intLength = 0;
            while (stkCheckInt.hasMoreTokens()) {
                String sLengthCheck = this.getToken(stkCheckInt.nextToken(), 1, sSplit);
                if (sLengthCheck.length() > intLength) {
                    intLength = sLengthCheck.length();
                }
            }
            String sResultIntCheck = new String();
            StringTokenizer stkCheckInt2 = new StringTokenizer(sResult, "\n");
            while (stkCheckInt2.hasMoreTokens()) {
                String sTokenLineCheckInt = stkCheckInt2.nextToken();
                if (this.getToken(sTokenLineCheckInt, 1, sSplit).length() <= intLength) {
                    int iDiffDigit = intLength - this.getToken(sTokenLineCheckInt, 1, sSplit).length();
                    for (int i = 0; i < iDiffDigit; i++) {
                        sTokenLineCheckInt = "0" + sTokenLineCheckInt;
                    }
                }
                sResultIntCheck += sTokenLineCheckInt + "\n";
            }
            sResult = sResultIntCheck;
        }
        StringTokenizer stk3 = new StringTokenizer(sResult, "\n");
        List arResult = new ArrayList();
        while (stk3.hasMoreTokens()) {
            arResult.add(stk3.nextToken());
        }
        sarResult = new String[arResult.size()];
        for (int i = 0; i < arResult.size(); i++) {
            sarResult[i] = (String)arResult.get(i);
        }
        Arrays.sort(sarResult);
        sResult = "";
        for (int i = 0; i < sarResult.length; i++) {
            sResult += sarResult[i] + "\n";
        }
        StringTokenizer stk4 = new StringTokenizer(sResult, "\n");
        sResult = "";
        while (stk4.hasMoreTokens()) {
            sTokenLine = stk4.nextToken();
            StringTokenizer stk5 = new StringTokenizer(sTokenLine, sSplit);
            while (stk5.hasMoreTokens()) {
                iTokenLineTokenCount++;
                if (iTokenLineTokenCount == 1) {
                    sWork = stk5.nextToken();
                    continue;
                }
                if (iNo >= iTokenLineTokenCount) {
                    sTokenLineToken = stk5.nextToken();
                    sResult += sTokenLineToken + sSplit;
                } else if (iTokenLineTokenCount == iNo + 1) {
                    if (AsInteger) {
                        while (sWork.startsWith("0")) {
                            sWork = sWork.substring(1, sWork.length());
                        }
                    }
                    sResult += sWork + sSplit;
                } else if (iTokenLineTokenCount > iNo + 1) {
                    sTokenLineToken = stk5.nextToken();
                    sResult += sTokenLineToken + sSplit;
                }
            }
            if (iTokenLineTokenCount == iNo) {
                if (AsInteger) {
                    while (sWork.startsWith("0")) {
                        sWork = sWork.substring(1, sWork.length());
                    }
                }
                sResult += sWork + sSplit;
            }
            if (!sTokenLine.endsWith(sSplit)) {
                sResult = sResult.substring(0, (sResult.length() - 1));
            }
            sResult += "\n";
            iTokenLineTokenCount = 0;
        }
        return sResult;
    } catch (Exception e) {
        throw e;
    }
}

冗長なソースだけど、とりあえず動くのが先決。この数値比較が可能になって、自分で使う分には随分便利になった。
例えば、「65536」って数値と「8192」って数値があるとして、文字列比較をすると「65536」が先に来ちゃうのよね。
数値をしてソートを行なえば「8192」が先に来るのは当然。ってか、最初からこういう形にして作ればよかったな。
要するに、文字列ソートを行なうか数値としてのソートを行なうかのフラグを引数に追加したメソッドに変更してみたりする。

さて、先日繋いだFTTHはそこそこ順調です。ルーターのポート関連の設定も比較的容易にできた。当たりのを引いたかも。
corega」の無線LAN対応ルーターなんだけど、型番忘れた。これ書いてる今は家じゃないので、帰ったら調べてみるか。
ちなみに、ウチのFTTHは有線だと70Mbpsというかなりの高速回線になってくれますが、無線を使うと何故か10Mbps程度に。
それでも以前と比べてアホみたく速くなってるはずなので、速度面に関しては問題無し。ようやく我が家にも高速回線が!
続いては、新規に契約したISPの「BIGLOBE」について。とりあえず何が重要かって、ディスクスペースの有無ですよ。
@nifty」も解約するし、このサイトのURLも変わる。ってか、果たしてこの契約にディスクスペースは付いているのか?
調べてみると、何と100Mまでは無料で使えるとの事。「@nifty」なんかは10Mしかなかったのに!そこそこやるようだな。
まだアカウントは取ってないけど、希望アカウント名の「junmix」はどうやら取れるようだ。家に帰ったら取得しておくか。

2005/11/15 Tue.

バグじゃないのにバグだとか動作不良だとか言ってくるSEが邪魔です。もうね、こんなのに一日振り回されたのか俺は。

            ____       _人__人__人__人__人__人__人__人_
        /, - 、_  ,.\     _)                  (_
.      //   -、_  ̄_, ヘi     _)  くたばれっ……!      (_
.       l L ⌒ヽ,, ̄,/│   _)                  (_
      l.n.|  -,  、- |    _) ロクに仕様を確認しないSEに (_
       ||f;l|.u__ノ{.   j、 l     _)  用はないんじゃっ……! (_
  ,ノ ,ノ./|`ァ|.((三===ミ !     )                  (
_, (-(_'Z |/. ヽ ` ̄二ニ´'/ 、    ⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒
  ` ーt,'、ヽ   ` ー---‐ァ1 ! ` ‐ 、_r- 、
 , ‐ァ-//‐、 \.    / l :|   ,-、`ヽ ヽ
.///゙二つ 、ヽー-‐/ / |    !. r'‐┴、|
|  ' /,.-‐く/`ヽ!:::::i /\:|   } `iニヽ |
| !   ' ,イ^'´   |::::|       l ⊂''ヾ.|

どこの世界にでも「俺 is 正義」な人がいる。SBの孫の話じゃありません。無意味だとわかっていて行なった調査が虚しい。
ってかね、確かにそのデータは俺が開発した機能で使いますよ。でもね、そのデータを生成するのは俺じゃないっての!
延々とログを漁り続けたせいか、目と肩が疲れてる。目はいつもの事だけど、肩に疲労を感じるのは滅多に無いんだがな。

昨日に立川北で髪を切ったんですよ。しかも1,000円で。モノレール立川北駅内にある「QB HOUSE」ってトコです。
会計システム(?)が特殊で、先に1,000円でチケットを買って店員に渡すというスタイル。目新しいが意味が無い。
季節も冬だしやたらと短いとガキくさく見えるし、あまり髪を切り過ぎないようにと思っていたのだが、予定は結果と異なる。
4cmほど切ってくれと頼んだはずなのだが、結果は8cmは切られた。途中で言えばいいんだが、何しろ小心者なので。
これで当分切る必要は無いだろうと思って店から出ると、首筋が寒すぎる!これが原因で風邪ひいたらアホだぞ俺は。

2005/11/16 Wed.

実は昨日、青梅線が止まったんですよ。19時20分くらいに西立川駅付近で架線の切断があったらしいのです。
最初の頃は青梅~拝島間で折り返し運転してたんだけど、自分は立川に行けないと意味が無いので、小作で待つ。
んで、20時半くらいになって青梅線を全線ストップして補修工事するとかで、次の復旧予定は23時とか言ってるのよ。
たまに早く帰ろうとする時に限ってこうなるな。駅で2時間半待つのはアホの極みなので、やむを得ず職場に戻る。
22時過ぎくらいに復旧したらしいんだけど、意外にも作業が捗ったために職場を再び出るのが23時くらいになった。
23時24分の立川行き電車に乗って終モノ帰宅かなと思ったんだけど、ダイヤが乱れたままで電車がなかなか来ません。
結局小作を出たのが23時33分くらい。22分かかると考えて、立川に着くのが23時55分前後。終モノは0時5分です。
10分前に着くなら余裕だろうと思ったが、立川で青梅線が詰まっているらしく、昭島やら中神で足止めを食らう。
結局立川に着いたのが0時7分。終モノが終わってしまいました。帰る手段は恐らくはタクシーか徒歩の二通りのみ。
漫画喫茶あたりで一夜を過ごすかと思ったが、咄嗟の機転で0時12分に発車の南武線の最終に乗り込む。混んでるな。
上手くいけば、稲田堤に0時33分に着いて、京王稲田堤から0時40分の京王線下り最終に乗れるかと思ったのです。
ところが世の中というのは非情なモノで、南武線まで青梅線の遅れを待つとかで5分程度遅れて発車するらしいし。
5分遅れるということは稲田堤~京王稲田堤間の移動時間が7分から2分になったワケで、これは致命的なはず。
今更電車を降りてもどうしようもないので諦めて稲田堤まで向かい、そこから京王稲田堤まで必死こいて走ります。
京王稲田堤に着いたのが0時42分で終電には間に合わなかったかと思ったが、まだ改札に入っていく人がいるし。
最後の望みをかけてホームに向かうと、どうやら調布付近で下り電車が5分程度遅れているとか言ってるんです。
おかげで見事に終電で帰宅できました。青梅線の遅れのせいで帰宅できんと思ったが、京王線が遅れたためにセーフ。
しかしながら、職場を出たのが23時なのに家に着いたのが1時半とかってアホかと。青梅~多摩間に2時間半かよ。

とにかく、昨夜にそんなことがあったために睡眠時間も短く、朝から頭がふらついてロクに仕事にならなかったのです。
定時ちょいくらいでさっさと帰り、多摩センで「吉野家」でも食って帰ろうかと思ったのだが、潰れたか改装だかで閉店中。
しょうがないので、新装開店したサイゼで食おうかと思ったのだが、映画館ができたせいか混んでるので、ここも却下。
やむをえずタマタイムのサイゼまで行って食いましたよ。ってか、「吉野家」潰れるとかなり不便になる気がするんだがなー。

そうそう、当サイトは正式に「BIGLOBE」の方に移転。「@nifty」の方は更新停止になり、こちらのみ更新となりますので。
ってか、容量が100MBあるってのは便利だな。以前は残り容量にビクビクしながら使ってたのに、次からは余裕すぎ。

2005/11/17 Thu.

昨日だか一昨日だかもっと以前か覚えてないけど、多摩センのイルミネーションが今年もやってきたので携帯で撮影。
去年もこれくらいの時期からだったっけ?綺麗になるのはいいんだが、人の通りが多くなるのが邪魔くさいんだよな。

毎年こんな感じだが、確か大学2年の時にはツリーが無かったんだよな。円錐形の妙なオブジェだった気がする。
ちなみに、「ワーナー・マイカル・シネマズ」ができたのと連動して、丘の上パティオの外装も一部改装されている。

多摩センにしては綺麗すぎやしませんかね?これでまた一歩「ラ・フェット多摩」の偽者に近づいてしまった感がある。
ラ・フェット多摩」の偽者と言えばさいたま新都心だな。行けばわかるが、ホントに第一感想が「パクりかよ!」だったし。
ちなみに、上下の写真ともリンク先の画像は無加工。やはり携帯のカメラじゃ夜に弱いのはしょうがないと割り切ろう。
……写真貼りまくっても、容量は気にする必要ないんだよなー。ちっとは見た目よくするためにも画像を積極的に使うか。

で、これを書いている今は何故か職場なワケで。しかも時間は深夜の3時ときたモンだ。あのな、徹夜作業とか勘弁だ。
先日にリリースした大きなアップデートで、バグだか何かわからんけどサーバーのメモリとCPU使用率に異常が出る。
特定の機能を実行すると、サーバーのCPU使用率が常時100%近くになってしまい、パフォーマンスが超低下する。
それを延々と調査していたんだけど、結局は今回の自分のリリース部分は全く関係ありませんでした。何だそりゃ。
確かに自分の担当してた機能はかなり重い処理を流すもので、それがCPUとメモリを圧迫しているのではと推測されてた。
ソースを見直しても変なトコは無いし、そもそも開発環境と試験環境で不具合無く動いてる。俺は無関係なはずなのだ!
結局はつい先ほど原因が判明して、その修正が施されました。深夜まで残るハメになったが、自分は無関係で助かった。
作業が無くなったから帰れるかといえば、小作発の青梅線上りの始発が4時40分くらい。まだまだ帰れそうにはない。
あ、もちろん明日は休みです。代休を使うと深夜作業の分の手当がつかなくなるので、あえてここは有休を選択する。
ってなワケで、一応は金曜から日曜まで3連休になる。でも、頼むから休暇中に呼び出しとかしないで下さいね。

2005/11/18 Fri.

//  String sThin = "jdbc:oracle:thin:TEST/TEST@192.168.0.1:1521:TEST";
public void connectJDBC(String sThin) throws Exception {
    try {
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        conn = DriverManager.getConnection(sThin);
    } catch (SQLException se) {
        throw new Exception("ERROR Oracle Connect [" + se.getMessage() + "]");
    }
}

sThinがコメントアウトされてますが、とりあえずこんな感じの接続文字列を前提に。昨日はJDBC関連の修正もあったな。
どうやら現状のシステムでは、上記のようなDB接続方法はよろしくないらしい。それを片っ端から修正するハメになった。

//  String sJDBC = "jdbc:oracle:thin:TEST/TEST@192.168.0.1:1521:TEST";
//  String sOracleUser = "TEST";
//  String sOraclePassword = "TEST";
//  String sOracleURL = "jdbc:oracle:thin:@192.168.0.1:1521:TEST";
public void connectJDBC(String sJDBC,
                                       String sOracleUser,
                                       String sOraclePassword,
                                       String sOracleURL) throws Exception {
    try {
        Class cls = Class.forName("oracle.jdbc.driver.OracleDriver");
        Driver db_driver = (Driver)cls.newInstance();
        Properties props = new Properties();
        props.put("user", sOracleUser);
        props.put("password", sOraclePassword);
        conn = db_driver.connect(sOracleURL, props);
    } catch (SQLException se) {
        throw new Exception("ERROR Oracle Connect [" + se.getMessage() + "]");
    }
}

自分はJDBCには詳しくないのでアレなんだけど、こうした方がいいらしい。理由教えて下さい。ってか、調べるか。
JavaでOracleって超便利だと思うんだけど、前の雑記で書いたResultSetの件があるからなぁ。再起処理がメンドい。
プロパティに登録してあるものなら置き換えも簡単なのだが、いかんせんアプリで動くようなタイプの修正が手間取る。
JSP上でJDBCに接続する場合なら、WebLogicを介してプロパティの値を取れるからいいけど、アプリはそうはいかない。
設定ファイルを毎回毎回ハッシュとして取り込んで、その設定してあるキーを元に値を持ってくる必要がある。
まぁ、色々と勉強できるからいいか。OJTというには相応しくないだろうけど、実践の場での学習は身につきやすい。

で、有休をとった今日は起床時間が16時ですが、何ら問題はありません。歩いて帰る体力もなくてタク帰りだったしな。
何か電話が来ていないかと確認してみても、着信履歴は平穏そのものです。とりあえず今週末はゆっくり休めそうだ。
そういや、小作から乗った始発で立川に来た後で30分ばかりマックで時間潰してたんだが、24時間マックなんかあるのか。
ソーセージエッグマフィンとかいうのが美味かったが、飲み物をコーヒーにしたのがミスった。夜勤で胃が痛いってのに。
ま、いつも通りのんびりした週末を過ごしますか。先週から今週にかけてはちと働きすぎだったからな。まずは寝直すか。

2005/11/19 Sat.

また喉が痛い。絶対に週末の深夜作業が原因だろ。喉に影響する風邪にだけはかかるまいと思っていたんだがなぁ。
堰をすると肺が痛いし、ただでさえ肋間神経痛でキツいってのに、堰で腹筋やらまで痛くなってきたら目も当てられん。

親父がOutlookでメールアドレスを複数使いたいから登録してくれと言ってきた。少しは調べてから人に訊いてくれ。
アカウント登録自体は数分もせずに終わるのだが、メール送信時に接続を蹴ったり蹴られなかったりするのがメンドい。
ってか、他ISPを使うとSMTPは蹴られるのばかり。「BIGLOBE」の回線使用時だと、「@nifty」のSMTPサーバーが使えない。
もちろん逆も不可なんだけど、メール受信は他ISPからでも使えるんだよな。どういう仕組みになっているのかわからん。
そういえば一時期は自宅でメールサーバーでも立ててみようと思っていた時期もあったけど、ややこしそうだから却下。
そもそも、家のマシンは大改造する前にHDDを交換しないとヤバそう。容量少ないわ、耐用年数も危ういわで大変です。