2005年3月アーカイブ
今日はつぼにはまったバグが2件。
1件は、Servletからのファイルのダウンロードのヘッダの設定。
response.addHeader("Content-Disposition ", "attachment; filename=\""
+ filename + "\"");
とやったのですが、ダウンロードされずにCSVファイルがブラウザに表示されます。
3時間くらい悩みましたが、お客様の担当者が発見してくださいました。
Content-Disposition の後ろにブランクが1つ入っていました。
もう1つは、日付のフォーマット。
午前中は動いていたシステムが午後になると、タイムアウトしてログイン画面に戻るようになりました。
いろいろと調べると、データベースに数字のフォーマットで時間を書き込むときに、yyyyMMddhhmmssにしていました。
つまり午後6時半にログインすると、20050330183000ではなくて20050330063000になります。
(18時ではなくて6時になる)
それでログインしてから12時間経っているということでタイムアウト。
yyyyMMddHHmmssでフォーマットするべきでした。
(データベースのフィールドをDateにすればいいのですが、私の作ったDBではないので・・・)
ともあれ一段落。
NTTDocomoから、お知らせが届きました。
PHSの新規受付を終了する、というもの。
同封されていたのは、携帯に乗り換えるときに割引になるクーポン券。
お知らせの文面からは、当然のことながら、PHSのサービス自体の終了も匂わせていました。
残念ですね。特に自宅の電話機の子機として使えるPHSは便利でした。
でも当面、乗り換えるつもりはありません。PHSは、月1400円、携帯は4000円以上します。
一応、バッテリーの予備は買ってあるのですけれど、もうしばらくは頑張ってもらいます。
今回のJava+Oracleのシステムは非常にクリティカル。
100万件のレコードで条件をつけて検索します。
タイムリミットは30秒(WEBサーバーがタイムアウトする時間です)。
OracleにはPostgresのように、LIMIT OFFSETがないので、ページ単位の表示をどうするかも悩ましいところです。
たぶんROWNUMを使うことになると思うのですが、これは場合によっては非常に遅くなりそうな感じがして心配です。
また、
ROWNUM=1
ROWNUM<500
ROWNUM<=500
等の表現しか出来ないので、ROWNUM>200 AND ROWNUM<500
とやると、レコードは何も返ってきません。
いろいろ悩みはありますが、いい経験を与えられたと思って、頑張ります。
Javaのお仕事が佳境に入ってきて、30分の時間も惜しい状況に。
ついに、ドリンク剤のお世話になることになりました。
今日、近くのドラッグストアで10本安売りをしていたのを買ってきました。
どうにも気分が乗らないときの最後の手段です。
それでもダメなら、仮眠をとるに限ります。
最近はCoQ10ものみ始めました。疲れやすい体質に効果があると・・・。
行動に挫折したら、情報収集せよ、
情報収集に挫折したらドリンク剤を飲め、
それでもダメなら眠れ。
昨日、外出から戻ると留守電にMSDN事務局からのメッセージ。
電話が欲しいということ。
少しビビりました。
というのもVS2003 MSDNサブスクリプション・パッケージを2月に購入したのですが、(現在のサブスクリプションの期限は4月まで)、1ヶ月近くほってあったからです。
パッケージをよく読むと、購入30日以内に登録手続きをしなければいけないということ。
パッケージに小さな文字で(一応太字)書いてあるのもどうかと思うのですが、期限がすぎて登録できないとか言われたら、どうしようかと思ったわけです。
今日、電話してみると、全くの杞憂で、今まで個人での登録だったのですが、今回、会社名に屋号を書いたのが原因だったようです。
今まで通り個人で登録ということで問題なくクリアできました。
これだから心配性は困るんだよなあ。
コーディングと単体試験を行っていますが、つまらないバグで時間を浪費することしきり。
自分で作ったプログラムを自分でデバッグするのは限界があることの証明です。
特に、ここは正しいという思い込みは、時間を浪費する最大の原因です。
まずはバグありきで、あらゆるところに疑いを向けなければ・・・。
今回のお仕事はJava+Oracleなのですが、問題が1つ。
アプリケーションサーバーが複数台あって。2台のロードバランサで振り分けているのですけれど、ロードバランサがセッションの維持を保障してくれないことです。
DBの順序でセッションIDを発行して、DB上にユーザ情報を格納しようと思うのですが、CSVファイルからのデータの読み込みもあって、頭の痛いところです。
HOME OFFICEで完全にデバッグできないところも、やりにくいところです。
とはいえ、いい勉強であると思って、お仕事しています。
Oracleの仕事をしているうちに、(9i)そろそろ10gを用意しておいたほうがいいかしらん、と思うようになりました。
それでOTNの開発キットを調べたのですが、もうDVDなのですね。
今、9iが動いているWindows2000マシンはCD-ROMドライブしかありません。メインの開発用マシンもそうです。
これではいかんという事で、内臓DVD-ROMドライブを2台買いました。
2980円×2。
TOSHIBA(SUMSUN)ということですが、安いのは大歓迎です。
送金の手数料を節約するためにイーバンクに口座を持っているのですが、いろいろ良いところがあります。
まずはイーバンク間の送金は手数料が無料であること。
ネットショップでもイーバンクの口座を持っているところは増えているようです。
もうひとつは日曜日でも、送金と確認が出来ること。
先日、土曜の夜にWebショップでジーンズを買ったのですが、日曜にはショップで入金を確認して、発送、月曜の午前中に届きました。
通常だと、月曜に入金確認をして、発送、火曜到着だと思います。これが金曜の夜だったら、もう1日遅れます。
というわけでイーバンクの口座は持っていて損はないと思います。
土曜日に問題発生。
特定のページの表示が極端に遅い。
調べていくと、実行しているSQL文が遅いことが分かりました。
最初はSQL分が多くのフィールドのmaxを取っていることが原因かもしれないと思ったのですが、よくよく見ると、見慣れない構文を使っています。
a JOIN b ON c::text=d::text という構文です。
::textとはどういう意味なのかと、SQLを書いた相棒に聞くと、これはphpPgAdminが生成したSQLそのものです、ということ。
ためしに::textを全部削除すると・・・ビンゴ!速くなりました。
PostgreSQLのバージョンが開発用とターゲットで違っていたことが原因かもしれません。
最初はレプリケーションのあたりを疑ったのですが・・・。
今日はEclipseと格闘。
新しいお仕事はJava+Oracleです。
開発用マシンにOracle9iのClientを入れたら、LombozのJ2EEプロジェクトが正常に生成できなくなりました。
必要項目を入れて、終了ボタンを押してもダイアログが消えず、必要なファイル・フォルダの一部しか生成されません。
悩んだときのネット頼みということで、2時間以上、検索。
最後にたどり着いたのが、環境変数。
Oracleのインストール時にJavaの実行環境がインストールされるのですが、その時に環境変数PATHに、「c:\Program Files\Oracle\jre\1.3.1」等が先頭に付加されます。
このPATHの先頭に、もともとのjava環境である「c:\j2sdk1.4.2_05\jre\bin;」を付加することで解決。
またもや先人の知恵に感謝。
納品して、何ヶ月か経って忘れたころに、保守の依頼が入ります。
それはバグであったり、機能追加であったりするのですが、次の仕事、あるいはそのまた次の仕事に入っていますから大変です。
バグは早急に修正しなければいけませんが、機能追加・仕様変更は、別途費用がかかる旨を説明して、待ってもらいます。
実は、先日初めて、バグ修正の一部を信頼できる方に外注しました。
このような人脈のネットワークは今後ますます重要になってくると思われます。
パートナーとのつながりを大事にしていきたいと思います。
最近時々、電話のことで苦情を受けます。
呼び出しているのに出ないという苦情です。
普段はHome Officeで仕事をしていて、机の上にプライベートな電話の子機のPHSとお仕事用電話の子機兼公衆用のPHSが並んで充電台に乗っています。
たしかに居間にある仕事用電話の子機PHSには着信記録が残っているのに、Officeのほうは記録がないという現象が何回かありました。
思い余ってPanasonicのお客様相談に電話をかけると・・・
担当の方と話しているうちに、意外なことがわかりました。
そばにPHSや携帯の充電器があると着信しないことが有るということ。
私の場合は、まさに当てはまります。
それで仕事用PHSを机の反対側の端において、しばらく様子を見ることに。
でも、そんなのってありなのかなあ。
3月1日についに開局、前日は徹夜で頑張りました。
最後までわからなかったのが、セッション変数値を取得できない件、いろいろなところに疑いをかけましたが、結局Session_start()前にセッション変数を使っていただけでした。
あとはこまごまとした修正作業。何とか問題をすべてクリアしました。
徹夜明けの朝は、少し興奮気味で寝付かれませんでしたが、夜になると猛烈な眠気が・・・。
今日はゆっくり休みます。
おやすみなさい。




