今日はつぼにはまったバグが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日以内に登録手続きをしなければいけないということ。
パッケージに小さな文字で(一応太字)書いてあるのもどうかと思うのですが、期限がすぎて登録できないとか言われたら、どうしようかと思ったわけです。
今日、電話してみると、全くの杞憂で、今まで個人での登録だったのですが、今回、会社名に屋号を書いたのが原因だったようです。
今まで通り個人で登録ということで問題なくクリアできました。
これだから心配性は困るんだよなあ。
コーディングと単体試験を行っていますが、つまらないバグで時間を浪費することしきり。
自分で作ったプログラムを自分でデバッグするのは限界があることの証明です。
特に、ここは正しいという思い込みは、時間を浪費する最大の原因です。
まずはバグありきで、あらゆるところに疑いを向けなければ・・・。

今日のお買い物。「Fire and Rain」を聞きたくなって・・・
今回のお仕事はJava+Oracleなのですが、問題が1つ。
アプリケーションサーバーが複数台あって。2台のロードバランサで振り分けているのですけれど、ロードバランサがセッションの維持を保障してくれないことです。
DBの順序でセッションIDを発行して、DB上にユーザ情報を格納しようと思うのですが、CSVファイルからのデータの読み込みもあって、頭の痛いところです。
HOME OFFICEで完全にデバッグできないところも、やりにくいところです。
とはいえ、いい勉強であると思って、お仕事しています。