雑記帳 2005年 4月第2週

2005/04/03 Sun.

金曜から土曜にかけては12時間睡眠をやらかしてしまい、週明けに生活が狂うと思い今日は4時間睡眠で済ます。
睡眠時間が少ないとロクに活動も出来ず、結局は家にいるだけになってしまう。この傾向、何とかならんものだろうか。
先週切りに行こうと思っていた髪もメンドいから放置。これはいかん、休日は何としても外に出る用事を作らないと。

さて、家のマシンで暇つぶしに某MMOをやっていて、ちょっと飽きたからと言って休憩がてらに某動画を立ち上げたところ。
……このマシンでは初めてであろう現象、ブルースクリーン落ちしました。えぇぇ、これでもOSはWindows 2000だぞ!?
そもそも、他の重いアプリやらを使いながら動画を立ち上げたくらいじゃ、今まではこんな現象は起きなかったんだけどな。
しかも、完全にキー入力を受け付けない状態になっており、やむを得ずハードウェアリセットを行なう。やりたくねぇなー。
偶然なのか再現性あるものなのかと再び確認したところ、同じくブルースクリーン落ち。あぁ、Windows 98時代が懐かしい。
リソースが食われて落ちたのかソフトウェア側の相性が悪いのかは不明だけど、原因わかったとこでこれは意味無いか。
夜には居間にあるノートPCの「Norton AntiVirus」のバージョンを2004に変えたところ、マウスが効かなくなる。えぇ!?
前々からクソみたいな動きばかりするので、いっそのこと壊れてくれとも思ってたけど、中途半端にイカレると困るっての。
セーフモードでリブートしたりあれこれやって、何とか元通りに復調させる。もうダメだろ、このノートPCは。終了。
とにかく、何の生産性も無い一日を過ごすハメになった。休日には何とかして予定を入れないと堕落しっぱなしだな。

2005/04/04 Mon.

JSPに実装していた機能のアプリ化、必死で進めてます。それにしても、4月になった直後から終電間近ってのは勘弁。
何がメンドくさいって、以前にも話したMQLとかいうSQLの偽物みたいな言語がややこしい。相変わらず理解できんな。
ってか、このシステムのほとんどがMQLを使う「eMatrix」で構築されてるため、これを理解できないと話にならん。
最初の頃はどうせそんなに長期間いるワケじゃないしとか思ってたけど、無期限延長となった今はさすがに覚えないと。

そうそう、このJavaアプリにメール送信機能を付けるんだけど、javax.mailを使って簡単に実装できました。便利ですな。
初めて知ったんだけど、javax.mail.*javax.mail.internet.*importする時ってJ2EEにパス通さなきゃダメだったのね。
環境の都合上、ローカルでコンパイルせずにサーバーに上げてからしてたんだけど、コンパイル通らず時間無駄にしたな。
ってか、頼むからサーバーのクラスパスを変更させてくれ。コンパイルの度に-classpathを指定するのはアホらしいぞ。
しかもパスが長いから、複数のクラスパスを指定すると入力文字数の限界を超える罠。やむを得ず.shとして記述する。
後は設計面。いきなりコーディングを始める悪癖を持っているため、ある程度の段階で一回止めて考える必要がある。
おかげでロジックがややこしい事になって、帰宅がまた終電間近じゃん。勤務地は近い方が絶対いいって~。

2005/04/05 Tue.

ロクに仕様も固まってないのに、これ以上コーディングが進んでたまるかっ!メールの文言はどうなってんだ!
デバッグモードで動作させた場合のログは誰宛に送信するんだっ!?どうなってやがる!俺がここまで考えるのか!?
あのな、開発者に全部任せてもらえるのはありがたいが、開発に必要な最低限の情報くらいは用意しておけと。
しかも、何が悲しくてメールの文言を設定ファイルに記述しなけりゃいけないんだ。ホントにやり方がどうしようもないな。

×× ××様

オブジェクト名:○○○○の処理を実行したところ、エラーが発生しております。
オブジェクトパターンは以下の通りとなっております。
 □□□□
 △△△△
 ☆☆☆☆

ご確認お願い致します。以上。

ある処理を実行した時にバックグラウンドでアプリを実行させて、こんなメールを送ったりするのを作ってます。
んで、設定ファイルに文言を記述しておくんだけど、この書き方が非常にアホらしい。しょうがないのかな。

MAIL_TEXT_JA_01=様
MAIL_TEXT_JA_02=オブジェクト名:
MAIL_TEXT_JA_03=の処理を実行したところ、エラーが発生しております。
MAIL_TEXT_JA_04=オブジェクトパターンは以下の通りとなっております。
MAIL_TEXT_JA_05=ご確認お願い致します。以上。

こんな感じで記述しておいた設定ファイルをJavaで読み込みます。左辺をキー、右辺を値として取ってきてハッシュに格納。
後はJava側でStringやらStringBufferでも使って、片っ端から文字列を連結していく。非常に原始的なやり方です。
しかも何が悲しいって、上を見ればわかる通り「JA」って言葉があります。もちろん「EN」も用意です。アホかっ!
このやり方だと、後から文言を修正したり行数が増えた場合にプログラムの修正が必要になってくると思うんだけどな。
最初にやろうと思っていたのは、別にファイルを用意しておいてその中にメール本文をあらかじめ記述してしまう方法。
上で言う××やら○○みたいに変数の値によって表示が変わる部分は、何らかの特殊な文字列に置き換えておく。

$FIRST_NAME $LAST_NAME様
オブジェクト名:$OBJECT_NAMEの処理を実行したところ、エラーが発生しております。
オブジェクトパターンは以下の通りとなっております。
$OBJECT_LIST
ご確認お願い致します。以上。

こんな感じ。それで後からJavaで読み込んだ後に変数の中身と置き換える。この方が仕変対応が楽だと思うんだが。
後から何らかの形で手を加えるつもりなのかどうかわからないけど、読み手が理解できないやり方は嫌なんだろう。
おかげで設定ファイルが見苦しい。しかもマルチバイト文字が入った事により、文字コードの注意も必要。手間が増えた。
文字コードはEUCって言ってんのにSHIFT-JISで再保存するな!改行コードはCR+LFじゃなくてLFだって言ってんだろ!

2005/04/06 Wed.

仕様も固まらない上に、設定ファイルまでもが何故かやたらと見苦しくなってしまったという逆境にも凹まずにお仕事です。
とりあえず今日でようやく一通りの開発が終わった。リリースするファイルも多いし、バージョン管理がややこしいな。
朝から休憩もほとんど取らずにノンストップでやっておいてよかった。さすがに今日リリースできないのはマズいだろうし。
ってか、開発してきたソースを今まで一度もVSSに入れていないけど、これはこれでいいのだろうか。明日にでも確認するか。
自分のマシンがぶっ飛んだら、ソースが3ヶ月半ほど前に巻き戻る可能性が。恐るべし。あ、リリース済みのがあるじゃん。
VSSのサーバーが自分の知らない間にどこかへ引っ越しをしたらしく、どうやったら接続できるのかがわからんのです。

さて、明日からは落ち着いた日々が戻ってくるのかと思いきや、そう言えば以前作ったjarファイル関連でバグがあるらしい。
データベースから特定の値が取得できていないとの事。またあのややこしいソースを解析するのかよー、泣きたいぞ。
自分が触ってたんだからわからんという事は無いだろう、などとは思うなかれ。理解できずともソースは触れるのです。
いやさ、直す対象のソースが普通のソースならいいんだけどさ。何でアホみたいにハッシュの嵐のような作りなんだよ。
やたらと大量のデータを処理している以上、変数はハッシュで管理するのが楽だという事はわからんでもないが。うーん。
しかもJSPと連携させて動かすjarファイルの中身である以上、ヘタにミスると他に影響が出まくるんだよな。やりたくねー。

2005/04/07 Thu.

昨日完成した機能のメール文言の修正から始まった今日一日。昨日6時間寝たので、結構真面目に働いていたりします。
いくつか文言を変更したり形式をちょっと変えたりする程度のものばかりで、時間も大してかからずに終わらせます。
こんなものに時間を食われている暇はありません。何より問題なのが、jarファイルのバグ修正。目処が立たないからな。
まずは、機能のフローを紙に書き出しつつ整理する。データの流れも再帰処理のせいでやたらと複雑になってるのが泣ける。
実際に動かしてみてどの辺が異常な動きをしているかの見当をつけて、自分の勘を重視してその周辺から調べていく。
特定のデータが取得できていない場合に考えられるのが、処理中にデータをロストするか、最初から取得できていないか。
これだけ色々と使いまわされている機能で処理中にデータをロストしてたら、もっと問題発覚は早期だろう。やはり後者か。
データソースは「Oracle」なので、修正対象となり得るのはSQLになるだろう。それほど大量のSQLってワケでもない。
……ってかさ、もしかして問題になってる部分って2月19日に修正が入った部分じゃないか?確か依頼があったはず。
その頃のメールを漁ってみるとありましたよ!しかも依頼はU野さん!あなたですか!しかもSQLの入れ替えの依頼だし!
以前コメントアウトしておいたSQLと入れ替えたりして実行してみる。値が取れるじゃん!新しいのは取れないじゃん!
とりあえずSQLの修正依頼を出して返答を待つ。待つこと数分、条件文が新しいSQLがメールで送られてきました。
早速実行してみると正常動作。よし、さっそくjarファイルに盛り込むか。SQLの部分を入れ替えて再コンパイルします。
出来上がったjarファイルをサーバーに入れて再起動。JSP上から実行して正常な結果が得られれば、この件は終了だ。

ORA-00933: SQLコマンドが正しく終了されていません。

何故だ。SQLPlusから実行したときは正常に動いているってーの。ソースを見直しても、ぱっと見では異常は無いんだけど。

//    SQL文字列格納
String sSQL = new String();
sSQL = "SELECT PRODUCT_NAME FROM PRODUCT_INFO" +
           "WHERE DEBUG_FLG = 1 AND ERR_FLG = 0";

テーブル名や列名は適当に置き換えて単純化しましたが、SQL文字列はこうして定義します。これを実行するとエラーに。
ちなみに、SQL文字列の末尾にセミコロンがないのは問題ありません。そもそもJDBCだとこれはエラーにならないからね。
このSQLをSQLPlusに直接放り込むと実行できる。何故かjarファイル内だと動かない。長考に長考を重ねて、結構時間を食う。
何かが足りないのだろうかと思って、他のSQLを色々と見てみる。……なるほど。自分がアホの境地にいただけだったか。
上記のSQLを一文に直してみる。それと、SQLPlusで実行して問題のなかったSQLを比較してみます。なるほどねぇ。

//    jarファイル内のSQL文字列
sSQL = "SELECT PRODUCT_NAME FROM PRODUCT_INFOWHERE DEBUG_FLG = 1 AND ERR_FLG = 0";
//    SQLPlusに投げていたSQL文字列
sSQL = "SELECT PRODUCT_NAME FROM PRODUCT_INFO WHERE DEBUG_FLG = 1 AND ERR_FLG = 0";

ぱっと見じゃ気づかないよなー。Javaで文字列の連結を行なう際に、改行して記述したために空白の記述を忘れていただけ。

//    SQL文字列格納
String sSQL = new String();
sSQL = "SELECT PRODUCT_NAME FROM PRODUCT_INFO " +
           "WHERE DEBUG_FLG = 1 AND ERR_FLG = 0";

こんな感じに記述しておけば、連結された場合でもちゃんと空白が入って問題無し。はぁ、紛らわしいったりゃありゃしない。
SQLPlusに投げていた文字列は、自分が実行する際に無意識に半角スペースを入れていたのでしょう。いわゆるポカミスだ。
さっさと修正して確認。正常に値が取得できていたのを確認。ってか、最初からあるSQLが正しければ問題無かったじゃん!

今日は帰りに立川支社に寄って荷物を回収してきました。どうやらまだ自分の席は残っているようで。助かりましたな。
しかしながら、自分のマシンに何故か「Netscape」やら何やら色々なソフトが突っ込まれていました。勘弁してくれ。
んで、ビックカメラによってMP3プレイヤーのイヤホンを物色。つい最近になって前のが断線しかけちゃったんだよね。
で、前から目をつけていた「Sennheiser」製の「MX450」を購入。早速聞いてみると、今までのものと音の違いに感動。
イヤホン一つでここまで違うとは。ってか、今まで使ってたのがあまりにボロすぎたってだけなのかもしれないけどね。

2005/04/08 Fri.

今日は一日中CSSを考えてたな。一瞬だけ仕様変更の危機が訪れたが、そこは舌先三寸であっさりと回避。
以前の雑記やらをあちこち見てもらえれば、今日色々と考えたCSSが反映されているのがわかるかと思います。
慣れると色々と書けるようになってくるんだけど、いかんせんHTMLにそれを適用するのが非常にメンドくさい。
アホみたく時間かかるし、ここまで変更対象ファイルが多いとミスが出ないかと不安になってくる。どっかありそうだな。

さて、3月28日に書いておいた「coreダンプ落ち」についてちょっとばかり書いておこうかと。自分にしてもメモ代わり。
そもそも「core」とは何ぞや。これは不安定なサーバーで負荷の高いCGIなどを動作させた場合に生成されるファイル。
また、検索処理などで時間がかかってしまう場合にも生成される。他にもプロセスの異常終了とかでも生成されます。
別にゴミファイルの一つや二つくらい放っとけよと思うでしょうが、ファイルサイズが巨大なのよ。2Mとか4Mとかだし。
そんなのが自分の知らない間にサーバーに生成されちゃってるんじゃ、あっという間にディスクスペースが尽きちゃうって。
で、このcoreファイルの中身は何なのかというとサーバーのメモリイメージなのです。普通の手段じゃ読めないので注意。
とにかく、処理中に蓄えたデータを異常終了時とかにファイルとして吐き出すって事です。何だこれ、すんげー迷惑なんだが。
都合が悪いのが「@nifty」のCGIサーバーは不安定であるのと、検索CGIを動かしていること。上記の条件に該当しまくり。
とりあえず、coreファイルがある場合は削除処理をしてから検索を開始するというように改造しないといけないな。
少なくとも自分が自宅サーバーでいくら稼動させても、そんなファイルは生成されないんだが。「@nifty」逝ってよし。

今日も帰りは立川のビックカメラに寄ってきました。昨日買ったイヤホンに繋ぐL字型の変換プラグが欲しかったのです。
探してみたけど、結構大きいサイズのしかないんだな。買ったはいいけど、MP3プレイヤーの見た目がちょい悪くなった。
別に他人に見せるもんじゃないだろうし、細かいところにはこだわりません。音の劣化も無さそうだし、結果オーライです。

2005/04/09 Sat.

自分のサイトを持っている以上、一体どこの誰が自分のサイトを見ているのかは多少なりとも気になってしまう。
そこで、たまに自分のサイト名で検索してみることがある。結構あちこちからリンクされてるものだな、と。着メロばかりだが。
以前から一ヶ月に一回くらい自分のサイト名で検索してチェックしていたのだが、今日チェックして気になったことが。
……「junmix」というハンドルネームの由来にもなった、大学の時のサークルの元後輩のサイトからリンクされてるっぽい。
さすがにこの場ではその人のサイト名までは言えないが、まず間違いないだろう。なるほど、ブログやってるのね。
確かにウチの大学関係で履修情報を探っていけば、ウチの名前に出くわすこともあるかもしれない。なぁ、たくやさんよ。

そうそう、昨日書いた「coreダンプ落ち」についてだけど、あの現象は今配布してる「Search Script」でも起こりえるな。
とりあえずcoreファイルの削除処理を適用したバージョンに差し替え。どうせ誰も落としてないから問題無いだろう。
一回だけ自分用の検索スクリプトを動かしたときに、ファイルサイズにして約7Mものcoreファイルが出来てたな、ビビった。
ってか、7Mのファイル追加されたらディスクスペースが埋まると思うんだが。残り容量ってまだそんなに余裕あったっけか?
調べてみたら、何故か7.5Mも余ってた。そういや、携帯の壁紙置いてた頃にスペースを5Mくらい拡張していたんだっけな。
5M拡張を解除しても、テキスト系だけで残り2.5Mが埋まることは無いだろう。こういうトコで節約しておくのもありかな。
解除方法を調べてたら、「@nifty」のサイト内で面白いサービスを発見した。「いろいろ使える機能・サービス一覧」だって。
何々、検索ワードの語句の集計や検索回数などの表示もできるサイト内検索かい。……えぇぇ、こんなのが月200円!?
OK、一言だけ言わせてくれ。たっけぇぇぇぇ!よし、このアイディアだけ無料で頂いてしまおう。近いうちに自分のに実装だ。