雑記帳 2006年 3月第2週

2006/03/05 Sun.

ソフトバンクもボーダフォン買収交渉の事実認める

頼むから嘘だと言ってくれぇぇぇ!またソフトバンクか!また孫か!これ以上カスタマーサポートをクソにしてどうすんだ!
約1年前にソフトバンクは総務省に800MHz帯を申請して却下されています。彼らが参入するなら1.7GHzになるのは必至。
しかし、この時点で買収の話が出てくるってことは、間違いなく1.7GHz帯の整備には未着手ってことでよろしいでしょうか。
買収額は2兆円とか言われてるけど、ソフトバンクの時価総額は3兆程度。6割強で買収とは命懸けだ。文字通り必死です。
一番最初はソフトバンクの提示額が6,000億程度とか言われていたらしいですが、こんな金額の提示をよく認めたよな。
つーか、「ODN」使ってりゃSBに買収され、「vodafone」使ってりゃSBに買収されるとか、最凶のコンボを食らう人もいるはず。
以前は携帯事業に新規参入があると低価格競争が始まっていいんじゃないかと言った記憶があるが、あれは前言撤回。
価格破壊が起こると同時に、どう考えてもユーザビリティの破壊とカスタマーサポートの破壊、サービスの質の破壊が起こる。
これでまたメールアドレス変わったらどうしてくれる。旧J-PHONE時代から今のアドレスになったのは許せることではあるが。

今日はちょっとばかり「ラ・フェット多摩」で買い物してきました。今履いてる革靴がいい加減限界なので買い換えたいのです。
とりあえずいつも通りに「JUNMEN」を覗く。ここで買う予定はなかったけど、なかなか気に入ったシャツがあったので購入。
その後は1時間くらいかけて靴探し。色々試したんだけど、どうも自分の足のサイズは26.5らしい。今まで27.0だったんだが。
そもそも革靴はかなり余裕を持って履いているので、薦められたサイズのは微妙に窮屈なんだけど、実験的に購入する。

2006/03/06 Mon.

//    以下のようなコードがあります。
class Test {
    public static void main(String argv[] ) {
        for (int i = 0; i < 5; i ++)
            System.out.println("i == " + i);
            System.out.println("Go to next!");
    }
}
//    このコードをコンパイルし実行するとどうなるでしょうか。
//    選択肢から1つ選択してください。
//    (コンパイル、実行の方法は正しく行われるものとします。)

//    a. Go to next! は1回表示される。
//    b. Go to next! は2回表示される。
//    c. Go to next! は3回表示される。
//    d. Go to next! は4回表示される。
//    e. Go to next! は5回表示される。
//    f. Go to next! は表示されない。
//    g. コンパイルエラーとなる。

ごめんなさい、この問題を間違えました。ってか、さすがに資格試験の一つだけあって手の込んだ問題が出てくるな。
とりあえず答えはa.で「Go to next!」は一回のみ表示。確かに一回間違えれば二度と間違えない問題だとは思うんだけど。
こんな引っ掛け問題が山盛りの「Java認定資格」ですが、後輩のI崎君が受けるそうです。自分も受けてみようかな。
種類が複数あるけど、受けるのはJava 1.4の「【SJC-P】Sun認定Javaプログラマ」ってのだな。52%で合格ラインらしい。
これは参考書買ってみてもいいか。他人のコードを正確に把握する練習にもなりそうだし。でもこの類の書籍は高いっす。
SJC-P(310-035)対策問題集」ってとこに例題っぽいのが色々載ってる。やってみたけど、正答率はお察し下さい。
受験料がバカ高いのも怖いな。25,000円って、一回落ちたら一ヶ月の食費が飛んだ計算になる。ベンダー資格は高い。

2006/03/07 Tue.

PerlとJavaでの画像を読み込んで表示させるまでの手順を比較してみる。JavaというよりもJSPでの話になるけどね。

open (FILE, "picture.jpg");
binmode (FILE);
binmode (STDOUT);
print "Content-type: image/jpeg\n\n";
print while (<FILE>);
close (FILE);
exit;

画像ファイルを読み込んで表示というよりも、バイナリファイルの扱いって言った方がいいか。Perlは楽だなー。次にJSPで。

<%@ page contentType = "image/jpeg" %>
<%@ page import = "java.io.*" %>
<%
    String sImagePath = "C:\\";
    File file = new File(sImagePath, "picture.jpg");
    if (file.getParent().equals(sImagePath)) {
        FileInputStream fis = new FileInputStream(file);
        ServletOutputStream sos = response.getOutputStream();
        int i;
        while ((i = fis.read()) != -1) {
            sos.write(i);
        }
        sos.close();
    } else {
        response.sendError(HttpServletResponse.SC_FORBIDDEN);
    }
%>

別にこれで何をするってワケじゃないけど、とりあえずJavaってかJSPでバイナリを扱うのはメンドいなって話です。
後輩のF原君がPDF絡みの修正で悩んでいるようでして。話を聞くと、どうもブラウザでPDFを表示させるとマズいとのこと。
表示しているPDFのパスをセキュリティ的に見せたくないようだけど、ブラウザで開いたらタイトルバーに表示されてしまう。
ブラウザでPDFを開くなと言いたいが、ブラウザがプラグインを持っているから勝手に表示させちゃうってワケなのよ。
Javascriptのwindow.open()でタイトルバーって消せるんだっけ?でもF11押されて全画面化されたら見えちゃうしな。
F11とかのキー入力を無効にすればいいのか。つーか、ソースを表示されてしまったら、いずれにせよわかってしまう罠。
そもそも普通にPDFへのリンクを貼っている以上、右クリックしてプロパティを見ればリンク先のファイルのパス見られるし。
バイナリでPDFを読み込んでブラウザに標準出力するJSPでも作るしかないんかね?何かとメンドくさそうだけど。
ってか、全然自分には関係ないシステムでの話だからどうでもいいんですけどね。しばらくは彼に頑張ってもらいましょう。

2006/03/08 Wed.

1月4日に「Google」にURLの登録を行ったのだが、まだ反映されない。そこで、原因を色々と考えてみる。
第一に考えられるのが、何らかの「Google」の規準に違反しているがために登録対象外になっているというパターン。
ってか、これ以外に原因が考えられない。登録する際に指定したURLは「http://www7a.biglobe.ne.jp/~junmix/」である。
HTMLファイルを指定していないが、ディレクトリ直下を指し示すURLはindex.htmlを自動的に参照するようになっている。
自動転送を行っているため、このHTMLを見ることはできないと思うが(無理矢理見ることは可能)、そのHTMLを見直す。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Project junmix</TITLE>
<LINK rel="stylesheet" href="homepage/style.css" type="text/css">
<META name="author" content="junmix">
<META name="copyright" content="Copyright(c) 2004 Project junmix. All Rights Reserved.">
<META name="Description" content="Project junmix - Mobile Computing Entertainment -">
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Refresh" content="0; url=homepage/index.html">
</HEAD>
<BODY>
<SCRIPT type="text/javascript">
<!--
    window.location.href = "http://www7a.biglobe.ne.jp/~junmix/homepage/index.html";
// -->
</SCRIPT>
</BODY>
</HTML>

検索スパム」という言葉が存在する。リダイレクトを使って無関係のページを検索結果に表示させるものもこれに含む。
例えば、一昔前にページの背景を白に設定して、白い文字でキーワードを大量に書き並べる手法が流行ったことがある。
「キーワードを指定して検索したけど、無関係なページが大量に出てくる」という現象のほとんどはこれが原因であった。
当然のことながら、検索エンジンとしては無関係なページは結果に表示させたくない。そこでこの手法を追い出したのだ。
これは非常にわかりやすい例の一つだが、似たような使い方でURL転送などのリダイレクトを使ったものも存在する。
例えば、キーワードAに引っかかるサイトを用意する。キーワードAで検索して結果に表示されれば、リンクを踏む人はいる。
ところが、そのキーワードAに引っかかるサイトはキーワードBでの結果に表示されるサイトへの自動転送を行っていた。
「キーワードAでの検索結果のサイトに行きたいのに、何故かキーワードBで表示されるサイトに飛ばされた」というワケだ。
こんな手法を許していたのでは、検索結果と関係無いサイトに飛ばされる人が増え、「この検索エンジンは変だぞ?」となる。
もちろん検索エンジン側は悪くないのだが、利用者が不便だと感じれば誰も使わなくなるのは明白。そこで対策を施す。
一番手っ取り早いと思われる対策が「妙なURL転送を行っている場合は検索結果に載せないようにする」というもの。
自分のサイトがなかなか「Google」に登録されなかったのは、恐らくはこのURL転送の部分に引っかかったんだろう。
ウチは「http://www7a.biglobe.ne.jp/~junmix/」の下に「homepage」と「cgi-bin」というディレクトリを配置している。
これは「@nifty」から移転した時に、ディレクトリ構造を変更するのが嫌だったので、同じ構造のままで持ってきたのだ。
例えば「homepage」配下のディレクトリ構造を一つ上に上げて移せばいいのだが、パスの設定とかが色々とメンドい。
近いうちにでも時間をかけて全部修正しますかね。さすがに検索結果に自分のサイトが出てこないというのは物悲しい。

余談だが、先月にこのURL転送が問題でドイツの「BMW」のサイトが「Google」のインデックスから削除される珍事が起こった。
サイトを訪れたのが「検索エンジンのクローラ」か「一般ユーザー」かを判別し、表示させるページを変えていたワケだ。
わかりやすいニュースとして「Google、検索インデックスから BMW を一時削除」を載せておこう。非常に興味深い内容だ。

さて、先日の性能改善の話でリンクを貼っておいたと思う「文字列を連結させるには何が適切か!」について。
このページだけを見ると、まるでString#concat()StringBuffer#append()と同等の速度を持つように錯覚する。
そこで、こんなソースを書いて実行してみた。中身はほとんど上記のサイトに載っているものと同じだけど、一部変えてある。

public class ConnectTest {
    public static void main(String[] args) {
        int iCount = Integer.parseInt(args[0]);
        try {
            ConnectTest1(iCount);
            ConnectTest2(iCount);
            ConnectTest3(iCount);
            ConnectTest4(iCount);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void ConnectTest1(int iCount) throws Exception {
        try {
            String str = new String();
            long start = System.currentTimeMillis();
            for (int i = 0; i < iCount; i++) {
                str += "a";
            }
            long stop = System.currentTimeMillis();
            System.out.println("ConnectTest1は" + (stop - start) + "ミリ秒かかりました");
        } catch (Exception e) {
            throw e;
        }
    }
    public static void ConnectTest2(int iCount) throws Exception {
        try {
            String str = new String();
            long start = System.currentTimeMillis();
            for (int i = 0; i < iCount; i++) {
                str.concat("a");
            }
            long stop = System.currentTimeMillis();
            System.out.println("ConnectTest2は" + (stop - start) + "ミリ秒かかりました");
        } catch (Exception e) {
            throw e;
        }
    }
    public static void ConnectTest3(int iCount) throws Exception {
        try {
            String str = new String();
            long start = System.currentTimeMillis();
            for (int i = 0; i < iCount; i++) {
                str = str.concat("a");
            }
            long stop = System.currentTimeMillis();
            System.out.println("ConnectTest3は" + (stop - start) + "ミリ秒かかりました");
        } catch (Exception e) {
            throw e;
        }
    }
    public static void ConnectTest4(int iCount) throws Exception {
        try {
            StringBuffer strbuf = new StringBuffer();
            long start = System.currentTimeMillis();
            for (int i = 0; i < iCount; i++) {
                strbuf.append("a");
            }
            long stop = System.currentTimeMillis();
            System.out.println("ConnectTest4は" + (stop - start) + "ミリ秒かかりました");
        } catch (Exception e) {
            throw e;
        }
    }
}

このソースで問題になるのはConnectTest2ConnectTest3の部分。String#concat()の使い方の部分が重要。
例えば、str += "a";と書けばstrに文字が連結される。しかし、str.concat("a");と書くだけではstrに文字が連結されない。
String#concat()Stringが戻り値。要するに、ConnectTest2のケースは空文字にaを連結する処理のループだ。
1万回ループさせる場合、str = str.concat("a");と書いているConnectTest3str.length()が10,000になる。
しかし、延々と空文字にaを連結するConnectTest2は、ループ回数が1万回だろうと100万回だろうとstr.length()は0だ。
ここでわかるのが、「文字列Aに文字列Bを追加する場合、文字列Aが長ければ長いほど遅くなる」ということかな。

C:\>javac ConnectTest.java -sourcepath C:\

C:\>java ConnectTest 1000
ConnectTest1は16ミリ秒かかりました
ConnectTest2は0ミリ秒かかりました
ConnectTest3は0ミリ秒かかりました
ConnectTest4は0ミリ秒かかりました

C:\>java ConnectTest 10000
ConnectTest1は266ミリ秒かかりました
ConnectTest2は0ミリ秒かかりました
ConnectTest3は63ミリ秒かかりました
ConnectTest4は0ミリ秒かかりました

C:\>java ConnectTest 100000
ConnectTest1は116500ミリ秒かかりました
ConnectTest2は0ミリ秒かかりました
ConnectTest3は17937ミリ秒かかりました
ConnectTest4は0ミリ秒かかりました

実行結果で一目瞭然。空文字に連結するConnectTest2の処理の時間は無いも同然。ConnectTest3が正しい評価。
っと、DOSプロンプトの文字をそのまま雑記に書くってのはやったことがなかったから、即席でCSSを追加してみた。
とにかく、「文字列を連結させるには何が適切か!」の内容が納得いきませんよってこと。結局はStringBufferが最速か。

2006/03/09 Thu.

今朝コンビニで某清涼飲料水を買おうと思ったけど置いてなかった。どう見ても地雷なのだが、やはり体験しておきたい。

つい先日に発売された、何とFFのポーションをイメージしたというモノ。胡散臭さ大爆発だが、ネタとしては高レベルだろ。
impressの「この記事」がわかりやすい。原材料を考慮すると、何だかリポDみたいなモノと考えていいんだろうか。
ハーブ10種類とか聞くと、味としては入浴剤みたいなものだと予想してしまうのだが。つーか、量入れりゃいいもんじゃない。
心の底からどうでもいいんですが、FF11で合成可能なポーションの材料は「セージ」「トカゲの尻尾」「蒸留水」だったり。
数量限定の発売と言ってるけど、どこ行けば買えるんだ?コンビニには無いのか?あれか、青梅のコンビニだから無いのか。
青いビンってのも何だかアレなのですが、個人的には中身の液体の色が気になる。やはりリポDと同様に黄色系なのか?
でも青い容器に黄色い液体ってさすがにありえないか。ってか、ポーションを出したなら、次はエリクサーでも出すのかね。
ちなみに「この商品のサントリーの紹介ページ」ではこれのTVCMが見られるのだが、かなり面白い内容だった。

さて、職場の開発サーバーはSunOS 5.8ことSolaris 8を使ってます。これに「WebLogic Server 7.0」を乗せていまして。
Java及びJSPでのWebアプリの開発にはSQLが切っても切れない関係にありますが、DB接続でデッドロックを起こすことも。
JDBCでDB接続を行う際に方法はいくつかあるけど、こんな感じのソースでDB接続を行うとマズいことになるらしい。

//  String sURL = "jdbc:oracle:thin:TEST/TEST@192.168.0.1:1521:TEST";
public static void getConnection(String sURL) throws Exception {
    try {
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        conn = DriverManager.getConnection(sURL);
    } catch (SQLException se) {
        throw se;
    }
}

詳細は「JDBCによるサーバハングパターン」を参照。DB接続でデッドロックなんか起きたら、後続処理がマズいっての。
つーか、WebLogicにだけ起こる現象っぽいんだよな。普通にJavaアプリとしてDB接続を行う場合とかなら無問題っぽいし。

//  String sUser = "TEST";
//    String sPassword = "TEST";
//    String sURL = "jdbc:oracle:thin:@192.168.0.1:1521:TEST";
public static void getConnection(String sUser, String sPassword, String sURL) throws Exception {
    Class cls = null;
    Driver db_driver = null;
    Properties props = null;
    try {
        cls = Class.forName("oracle.jdbc.driver.OracleDriver");
        db_driver = (Driver)cls.newInstance();
        props = new Properties();
        props.put("user", sUser);
        props.put("password", sPassword);
        conn = db_driver.connect(sURL, props);
    } catch (SQLException se) {
        throw se;
    }
}

とりあえず全ソース見直すのか。簡単なJavaアプリを作って性能を比較してみたけど、さすがに違いは皆無だな。
どっちのケースでも、コネクションが確立されるまでに要する時間は平均して0.3秒だった。激しくどうでもいいか。
さらにどうでもいいけど、上記のソースでも書かれている「static」、実は自分は「static」ってものを理解していません。
手元のJavaの入門書を見ると、懇切丁寧に図解入りで説明している箇所がある。文章だけちょっと改変して引っ張りますか。

「静的(static)」とは「クラスに固有」あるいは「オブジェクト生成不要」という意味であり、
static宣言されたメソッドやフィールド」はオブジェクト(又はインスタンス)を生成することなく利用することができる。
また、そのクラスから生成されたオブジェクト(又はインスタンス)では、「static宣言されたフィールドやメソッド」を共有する。

今更になって理解した気がするぞ。Javaを触り続けてそろそろ4年目になるというのに、今更「static」を理解したとか。
いやね、月曜に書いた雑記の「SJC-P(310-035)対策問題集」に「staticに関する問題」ってのがあるんですよ。
あまりに基本的な部分を疎かにしてJavaをやってきたもんだから、こういう部分の知識にかなりの欠落があったりする。
自分はもともと勉強なんかしない人だから、覚えようという気になった時に覚えないと他に学習の機会が無いんだよね。

さて、検索エンジンに正確に登録されるようにディレクトリ構造とかを変更しましたよっと。かなりメンドい作業だった。
ブックマークは「http://www7a.biglobe.ne.jp/~junmix/index.html」に変更してくれると助かります。ってか、変えて下さい。
この修正を加えた状態で再登録すれば、一ヶ月前後で検索エンジンのインデックスに登録されるはず。それまでは我慢だ。
何がメンドくさかったって、CGIを呼び出す際のパスが全部変わることかな。またもや大量のファイルを修正するハメに。
こりゃ差分を見ながらFTPで上げるだけでも時間かかりそうだな。時間をかけて確実にやらないと、どこかでミスりそう。
ちなみに、これを書いている時点ではディレクトリ構造変更後の状態のはまだFTPには上げてないです。さて、やりますか。

2006/03/10 Fri.

ディレクトリ構造を変更して全ファイルをFTPに上げ直したけど、どっかに修正漏れがありそうで怖い。ファイル数が多すぎる。
んでもって、<A class="..." href="...">と書いていた部分を<A href="..." class="...">という要素の書き方の順序を統一。
はっきり言ってどうでもいいような部分なんだけど、どうにも特定の書式に統一されていないとソース見てて気分悪い。
とりあえずあれこれ編集して、「Google」の「サイトの登録 / 削除」に再申請。さて、いつ頃に登録されるだろうか。
ってか、以前の「@nifty」のキャッシュが消えてくれないな。これって上記の申請ページで削除処理もできるんだろうか。
見てみたところ、クローラに対応するためのファイルを設置する必要があるらしい。「@nifty」のHP領域はもう使えないっての。
既に触ることのできない領域に残ったキャッシュって消せないんかね。勝手に「Google」が始末するのを待つしかないか。

はいはい性能改善性能改善。改善したのはいいけど、あるJSPを経由する修理を省いたために一部機能が欠落してた。
仕様書のフローチャートを書いてて気付いたんだけど、代わりに書くと言ってた先輩U野さんに任せないで助かった。
DBのテーブルを見て特定のフラグに異常な値があったらメール通知するって機能なんだけど、無くてもいいんだよな。
実際に本番環境のDBを見てみても、160万レコードの中から該当するエラーに引っかかるのが2件。しかも作ったの自分。
あれか、去年の年末あたりにリリースした機能の試験のために作ったデータを放置していたんだな。放置継続だけど。

さて、今日は「gadult」とメシを食う約束をしていまして、20時くらいに多摩センで会うことに。たまには遊ばんとな。
さすがにタマタイムでサイゼとかバーミヤンは嫌だってことで、三越のレストラン街ですき焼きの食い放題へ行く。
席について、何故か「gadult」がおもむろにバッグの中から取り出したモノが、衝撃のこんなモノだったりする。

これは噂のアレですかぁぁ!自分で買いに行くのがメンドかったんだよね!何故か2本持ってきていて、1つもらいました。
しかし、どう見てもすき焼きと一緒に飲むものではないと思い、後で家でしっかり味わわせてもらうためにお持ち帰り。
さて食いまくるかと思いきや、腹が減ってるにもかかわらず満腹になるのが早く、肉は何と一皿も食いきれなかった。
野菜とかの具材が置いてあるトコにうどんがあったので、肉よりかはそっちを食うかって話に。で、うどんを突っ込む。

何だか何を食いに来たんだかわからなくなってきました。ぶっちゃけ、肉よりかはうどんの方が満足度が高かったけど。
閉店ギリギリの22時くらいまで食って、二人で4,000円。安物の肉なんでクソ安いが、うどん食えたから無問題ってことで。

さて、腹も膨れてどうするかってことで、とりあえずゲーセンへ。「gadult」がハマっている麻雀ゲーがあるということ。
オンラインで通信対戦ができて、成績に応じて級やら段の認定が受けられるというもの。それが「麻雀格闘倶楽部」。
俺にもやれやれとうるさかったが、初回は「gadult」のプレイを見学。意外に本格的で、なかなか興味をそそられる。
プレイするのにカードを買って登録する必要があるのだが、何故か「gadult」にカード代200円をおごられてやるハメに。
とりあえず缶コーヒーをおごってチャラ(?)に。んで、早速プレイしてみる。200円だか300円だかで、微妙に高額だな。
初回は10級から始まって、いい成績を残すごとにランクが上がっていく。初回のプレイでは最悪の結果の4位とか。
東風戦だったのだが、さすがにこの結果には自分も納得いかず、クレジット追加投入。ってか、東風戦は慣れないな。
基本的に泣き麻雀ってことで、タンヤオをベースに役を組み立てる。2回目の結果は無事に1位獲得。30,000点終了。
局が終了した時点で30,000点を超えていると、次回プレーは無料になるらしい。勢いがあるのでもちろん続行で。
3回戦が終わるか終わらないかとのところでゲーセンの閉店時間が迫る。何とかして終わらせて、この回は2位で終了。
つーか、これ臨場感があって面白い!「東風荘」とかと比べても、遥かにクオリティが高い。絶対にハマりそうだ。
そんなワケで、初の「麻雀格闘倶楽部」で一応6級までランクアップ。これは是非とも段までいきたいモノだな。
ちなみに「gadult」は1段だか2段。結構やってるな。追いつくには東風戦の闘い方を研究する必要がありそうだ。

0時になってゲーセンを出て一服つけながら、俺が缶のコーンポタージュを飲みたいとゴネる。次に向かう先は聖地。
多摩センで聖地といえば俺と「gadult」の間では2箇所が候補に。しかし、自販機が無いことにはしょうがない。
確実にコーンポタージュを売っている自販機がある場所を知っているので、そちらに向かう。この場所こそが通称TCP。
多摩中央公園なワケですが、3月の深夜に来たのは初めてかもな。誰もいないし、空気は綺麗だし、すんげー癒される。
二人であれこれ話してたんだけど、こんなのが日常だった大学生活が懐かしく思われる。貴重な時間だったんだな。
つーか、例えばS保と二人でここに来ても何か違うと思う。K岡と来てもなおさら違う。やはり「gadult」とペアでだな。
明日にサークルの後輩の追い出しコンパがあって二人とも参加予定なのだが、明日も遊びますかって話になる。
サークルの従業員責任者(?)のY成君の子供に贈り物をするのと、再来週に結婚する先輩への贈り物を調達だ。
前者に関してはおもちゃとかでいいだろうってこと。生後数ヶ月の子だし、あまり凝ったのあげてもしょうがない。
後者への贈り物はジッポで。2006年モデルとかって売ってるのか?煙草吸うたびにジッポ見て俺らを思い出して下さい。
そんなワケで、明日は13時半くらいに立川集合。プレゼント買って、残った時間でゲーセン行って「麻雀格闘倶楽部」だ。

それにしても多摩中央公園は癒される。「gadult」との相性がいいのは嬉しいことだと思うし。また遊ぶぞ。明日もだけど。

2006/03/11 Sat.

昨夜に昼の13時半に立川集合という約束をして帰ったにもかかわらず、起きたら既に13時半だった罠。どうしろというのだ。
とりあえず「gadult」に先にゲーセンだかどっかに行っててもらい、急いで立川へ行くことに。結局着いたのは14時半くらい。
グランデュオの駐車場の出入り口の正面辺りにあるゲーセンに「gadult」がいるということなので、昼飯抜きで向かうことに。
地下に入ってふらつくと、案の定「麻雀格闘倶楽部」のコーナーにいた。当然のことながら自分も参戦。昼飯抜きですが。
何だかんだで2時間半くらいプレイして、今度は何とか4級までランクアップ。あと数回のうちに段を取りたいトコだな。

17時くらいになって例のプレゼント関係を探すかということになり、とりあえず「ルミネ」の「ソニープラザ」へ向かってみる。
しかしながら、俺も「gadult」もベビー用品なぞに詳しいはずもなく、Y成君がこだわらなさそうな箇所で攻めることにする。
他にも探してみたけど目ぼしい物がなく、「ルミネ」を去る。次はたっつぁんことS濱氏へ贈るジッポを「マルイ」で探すことに。
結婚祝いなので今年の2006年モデルにこだわりたかったんだけど、どうにもメーカーからまだ仕入れられていないようだ。
結局見つからなかったので、今日中にジッポを調達するのは諦める。で、次に向かうは「高島屋」。「伊勢丹」はパスで。
5階だが6階にベビー用品専門のコーナーがあり、男二人でふらつく。どう見ても不審者です。狙いを「Miki House」に絞る。
服とかはY成君がこだわりがあってうるさそうなのでスルー。おもちゃ系はどうかとも思ったが、2ヶ月の子には早すぎる。
あれこれ考えた結果、ベビーカーなどに付けられる子供用のぬいぐるみのアクセサリ(?)っぽいのを購入してみた。

追いコンの集合時間の18時20分が近くなってきたので、モノ駅の立川北の北口に出る。俺らが一番乗りですかい。
一つ下の代の卒業生のN村やS木、I黒なども登場。今の1年から3年の連中も来たが、9割以上が誰かわかりません。
今日の会場は立川の「シネマシティ」1階の「mothers」というトコ。以前からこんなトコにこんな店ってあったっけか?
会費1万を払って会場へ。中が禁煙ってことで自分を含む一部から苦情が出たようで、喫煙者用の隔離席が端に作られた。
19時になって乾杯して、しばらくすると下級生からの出し物が色々と。武勇伝とかってS保が飛びつきそうなネタだよな。
少しばかり遅れてきたY成君に「gadult」と俺からの例のプレゼントを渡す。子供の服にはこだわらないとか嘘くせえなぁ。
最後の方に卒業生の言葉があって、21時ちょい前くらいに終了。連中のほとんどは2次会に行くらしいが、自分は遠慮しとく。

さてどうするかって「gadult」と話をして、また例のを打ちに行きますかってことに。最初に行ったゲーセンへと足を向ける。
その前に自分が腹減ったとゴネて、ケンタッキーで海老カツサンドを食う。腹も膨れたところで戦場へ向かいます。
麻雀格闘倶楽部」は本気でハマりそうだな。学生の頃と違ってゲーセンにつぎ込める金の額も変わってるから危険かも。
しばらくすると何故かI黒が登場。しばらく俺らのプレイを観戦して、23時ちょい過ぎくらいに店を出ることにする。
今日は結局は3級止まり。この辺になると、安定して勝ち続けないとランクアップは狙いにくいな。修行が必要です。
さてモノで帰るかと思っていたら、I黒が車で送ってくれるとのこと。自宅まで20分ちょいで到着。ありがとうございました。
煙草の吸い過ぎか酒を飲んだせいかはわからないけど、頭が痛かったのでさっさと寝てしまうことに。面白い一日だったな。