つれづれ 2003年2月

Javaクイズ (2003/2/7 fri)

問題です。
以下のメソッドを実行すると、Windows上では正常に動きますが、 Linux上で実行すると、期待通りの動作をしません。 さて、なぜでしょう?

public byte[] getHash(String word) throws Exception{
  MessageDigest md = MessageDigest.getInstance("MD5");    
  byte[] b = md.digest(word.getBytes());
}

いくつか言及していない情報がありますが、 するどい人は分かるかも?











ヒント1
LINUX上では、同じ長さのwordを渡すと同じ値がかえってきます。











ヒント2
wordはShift_JISで渡されています。











わかりましたね。 String#getBytes()で、Linuxのデフォルト文字エンコーディング でエンコードされ、??????なバイト配列に対してdigestしてたわけです。。。

これで2時間悩みました。おかげでもう朝。 明日は早く起きねば。。。

HSQLDB (2003/2/5 wed)

Java Developer3月号で HSQLDBが紹介されていました。 面白そうだったので、触ってみました。

HSQLDBとは、PureJavaで書かれたシンプルなRDBです。 250KBほどしかなく、warに組み込んで配布なんてことが出来ちゃいます。 サンプルやデモの配布や、お試しアプリケーションの作成にいいんじゃないでしょうか。 HypersonicSQLという名前で、 JBossやTomcatでも使われていたような気がします。

実験環境

入手先

http://sourceforge.net/projects/hsqldb/

サーバーモードで動作確認

hsqldb.jarにクラスパスを通して、

DBサーバ起動
java org.hsqldb.Server -database HOGEDB

GUIクライアントツールから操作
java org.hsqldb.util.DatabaseManager

createしてinsertしてselectできました。

Webアプリに組み込む

hsqldb.jarをWEB-INF/libに置いて、こんな感じでConnectionを取得できます。

String url = "jdbc:hsqldb:" + getServletContext().getRealPath("/db/testdb");
Class.forName("org.hsqldb.jdbcDriver");
Connection con = DriverManager.getConnection(url, "sa", "");
(サーブレットからConnectionを取得する例)

DBサーバーを別に起動しなくてもいいようです。 DBのファイル(.properties, .script)はなければ自動的に作ってくれます。 getRealPath()でWebアプリのルートからDBのパスを指定すれば、 warの中に含めることができますね(?)。

PostgreSQL (2003/2/4 tue)

家サーバにPostgresを入れてみた。

インストール

http://www.hellohiro.com/jdbcpostgresql.htm
にシンプルなインストール方法が書いていたので、 それを見てやってみました。

RPMなんですげー簡単。 本やWebを見てると、日本語(マルチバイト)を使うのに、 ソースからconfigureオプションでコンパイルしないといけない とのことで気がひけてたんですが、最近のはいらないのかしらん?

リモートクライアント接続

リモートPCから接続するには、以下のような設定を行う。
pg_hba.confで接続許可するホストを指定
host all 192.168.1.0 255.255.255.0

postgresql.confでTCP/IP接続(?)を指定
tcpip_socket=true

Windowsクライアント(cygwinのpsql)から接続できました。

JDBC接続

JDBCドライバは
http://jdbc.postgresql.org/
のDownloadsから入手可能。 (Type4(PureJava)ドライバらしいので、Postgresに付属しているものを Windowsにコピーしてきても動くとは思うが、なんとなくダウンロード )

    Class.forName("org.postgresql.Driver");
    Connection con =
      DriverManager.getConnection("jdbc:postgresql://192.168.1.10/hogedb", "postgres", "");
    Statement smt = con.createStatement();
    ResultSet rs = smt.executeQuery("select * from aaa");
    while (rs.next()) {
      System.out.println(rs.getObject(1));
    }
    System.out.println("END");

Javaからも動いたわーん。とりあえず満足。

コロンビア号事故 (2003/2/3 mon)

スペースシャトルの事故をニュースで見た。 パイロットの家族のインタビューで、 (少なくともカメラの前では)取り乱す人はほとんどおらず、 中には、宇宙開発は続けていかないといけない、 とNASAの回し者かと思えてしまうことを言う人もいた。 冒険家の家族ともなると、さすが覚悟が出来ていますね。

P2Pコンピューティング入門 (2003/2/2 sun)

P2Pコンピューティング入門 という本を読みました。

名前は聞いたことがあるけど、それっていったい何なんだろう? ちょっと使ったことはあるけど、それって大きな視点で見ると、 どんな技術なんだろう? 微妙に興味のあるテクノロジーやアプリケーションの紹介が盛りだくさんです。

漠然としていた知識が整理され、新たな世界が広がります。

その他、MSのNet PassportとSunのLiberty Alianceの話題、 Notes、Exchangeなどのグループウェアの話題、 Jini、Jxta、Sun One、.Netの話題など盛りだくさんです。 話題は浅く広くですが、文章も平易でわかりやすく書かれています。

SETI@HOMEの話題もありました。 宇宙人探索プロジェクトなんて、冗談かと思ってたんですが、 本当にあるんですね。。。

余談ですが、 この本を買ったきっかけは、紀伊国屋のPCコーナーで、 かっこいい(できそうな)兄ちゃんがこの本を買っているのを見たから。 かっこいい兄ちゃんはこういう本を読むのか、 とふと手にとって見てると、けっこう面白そう。 P2Pに特に興味があるというわけではなかったんですが、 衝動的に買ってしまいました。 買って積ん読本も多い中、最後まで面白く読めました。


もどる