出張で大阪なんぞに来ているワケだが、仕様待ちでけっこうヒマだ…。

で、ながらく更新していない雑記でも更新するかと思ったが、HTMLエディタ無いから面倒だね。

まぁ、Pタグは後から入れるようにすればいいか。レイアウトとかに凝っているワケじゃないから、面倒なのって結局Pタグだけの 問題だったりして…。ってか、PREタグにしちまおう(笑)。

うむ。これでよし。

で、雑記のネタだけど、いざ書こうとすると書こうと思っていたネタ忘れてるし。ダメすぎ。
ダメすぎといえば、何でもないjavaのプログラムコードに対してコードレビューで「スゲェ」
とか称賛されて萎え。目立った所で以下の2コード。

	// ファイルサイズのキロバイト表示(最低値0.1K保証)
	int    fs       = (Integer.parseInt(res.getString("filesize")) * 10 + 1023) / 1024;
	String filesize = (fs/10) + "." + (fs%10) + "KB";

JDBC経由でデータベースからフェッチしたバイト単位のファイルサイズを、少数点以下1桁ま
でキロバイト表示する処理なんだが、10倍した値を10で割った値と10で割った余りでその仕様
を満たす発想が「スゲェ」んだって(笑)。そんなの10年前からやってるし、だれでも思いつ
くと思っていたのだが…。繰り上げに1023足すのも何人かには発想外だったらしい…。

ちなみに、今思ったけど、getInt()使えばInteger.parseInt()する必要無かったな。わはは。
そのうち直そう。


	int cnt = 0;    // 2バイト文字変換が必要な文字数

	// パラメータから生のバイト列(=日本語EUC)取得
	byte src[] = request.getParameter(name).getBytes("iso-8859-1");

	// 不正文字が含まれているか?(日本語EUCで判定)
	for ( int i = 0; i < src.length; i++ ) {
	    // 1バイト文字か?
	    if ( src[i] >= 0 && src[i] <= (byte)0x7F ) {
	        // 記号か?
	        if ( Character.isLetterOrDigit((char)src[i]) == false ) {
	            // 不正文字じゃぼけ〜
	            return;
	        }
	        cnt++;
	    } else {
	        i++;
	        // 1バイトカタカナか?
	        if ( src[i-1] == (byte)0x8E ) {
	            if ( src[i] >= (byte)0xA1 && src[i] <= (byte)0xDF ) {
	                // 不正文字じゃおら〜
	                return;
	            }
	        }
	    }
	}

	// 変換バッファ領域確保
	byte dst[] = new byte[src.length + cnt];

	// 1バイト文字を2バイト文字に変換
	for ( int i = 0, j = 0; i < src.length; i++ ) {
	    // 1バイト文字か?
	    if ( src[i] >= 0 && src[i] <= (byte)0x7F ) {
	        // 2バイト文字に変換
	        dst[j++] = (byte)0xA3;
	        dst[j++] = (byte)(src[i] | 0x80);
	    } else {
	        // そのままコピー
	        dst[j++] = src[i++];
	        dst[j++] = src[i];
	    }
	}

	// 日本語EUCからjava内部コード(Unicode)へ変換
	return new String( dst, "X-EUC-JP" );

仕様としては、入力された文字に不正文字が混入していたらハジくのと、1バイト文字の英数
文字は2バイト文字に変換する、というものだ。で、2バイト文字に変換している所が「ス
ゲェ」そうだ(笑)。「アセンブラ的」とまで言われた。なんて平和な会社だここは。(そも
そも、「スゲェ」と言った人たちは、日本語EUCのSS1,SS2,SS3の事を知らなかったし…)。

ちなみに、これは同じ事をするJavaScriptコードも書いている。仕様書の記述上“半角””全
角”と書いているのはご愛嬌。

	// 半角を全角に変換
	function Han2Zen(text)
	{
	  src = "0123456789"
	      + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	      + "abcdefghijklmnopqrstuvwxyz";
	  dst = "0123456789"
	      + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	      + "abcdefghijklmnopqrstuvwxyz";
	  res = "";

	  for ( pos = 0; pos < text.length; pos++ ) {
	    cur = text.charAt(pos);
	    if ( isHankaku(cur) == true ) {
	      idx = src.indexOf(cur);
	      if ( idx < 0 ) {
	        return "";  // 不正文字を含んでいる
	      }
	      res += dst.charAt(idx);
	    } else {
	      res += cur;
	    }
	  }

	  return res;
	}

JavaScriptだと文字コードは特定できないからな。このように実装してみた。ちなみに生まれ
て初めて書いたJavaScriptコードだ(まぁ、上記はそのコード全体の一部でしかないが)。
ってか、JavaScriptの変数って全てグローバル変数なんだな。それ知らなくてハマったよ…。
メインとサブのループカウンタに同じ変数名使っていたもんだがら、メイン側が永久ループに
なってしまった。別々のfunctionなのに変数スコープが同じなんて、普通考えるか?

…とまぁ、コード書きでは「スゲェ」と言われた自分も、SQL文に関しては自分に対し「スゲェ」
と言った人たちに対して反対に「スゲェ」と言う立場だったりする。SQL文チューニングしても
らったら性能が10倍くらいアップしたよ。

何事も、専門家に任せるのが一番だね。

――――――――――――――――――――――――――――――――――――――――――

大阪の人はせっかちなんだろうか? 地下鉄の自動改札には「1枚しか(キップは)入りませ
ん」とシツコク書いてあるし、エレベータはドアが開いている時間が極端に短い(ドアが開き
きった瞬間「扉が閉まります」とヴォイスが発生され、実際閉まってしまう)。

地下鉄といえば、同じ場所に行くのに3〜4通りのルートがあって行き先指示看板も乱立して
いるので、ウチのカミサンみたいな方向音痴は地下鉄駅構内で遭難する可能性がありそうだ。

いちばん驚くのは横断歩道の渡り方だ。赤信号で待っている状態で、青信号側が点滅しだした
時点で赤信号側は既に道の真中あたりまで歩みでている。で、黄色信号で加速した車に轢かれ
そうになったりしているのだが、「そんなのいつものことですやん」って感じ。だいたい、そ
れが1人2人の事ではなくて、その辺り歩いている人の97%がそんな横断歩道の渡り方なん
である。歩行者にとって、信号は目安でしかないようだ。目安ですらない人もいるかも。

この街は運転したくないね(笑)。

そのクセ、会社の朝はやたらユックリしていて、8:50くらいにならないと鍵が開かない日
もしばしば。大阪は一応「支社」なので、ちゃんとした管理部門もあるのだが、そこからして
朝だれもいないんである。後から大阪支社に研修で来た、中部支店のI君もビビッテいた。

I君には、初めて支社に来た日に「朝鍵開くの遅いからゆっくり来た方がええでぇ」と大声で
教えたせいか、それから数日は朝ちゃんと鍵開いていた。が、ほんとうに「数日」だった。

ちなみに、I君はSAP/R3の研修に来ていて、来週から八幡山らしいので、それ方面の人宜しく。
(それ方面の知人はこのページ読んでないか)

――――――――――――――――――――――――――――――――――――――――――