Optician

メガネ屋さんへ行きました。メガネについている値段は何だかよくわからないのですが、古いデザインは50%Offで投げ売りをしないと商品の入れ替えができなくて、やっていけないんですかね。違いがあまりよくわからない… 微妙なレンズ(フレーム)の形状が違うといわれてもなぁ。言われると確かに、ストレートになっていたり、高さに差があったりはするのですけど。

一通り眺めながら、いくつか気になったものから選んだのですが、気に入ったデザインはちょっとごついため、ケースも大きめで出張の時など、携帯時に不便そうでした。それでもいいかな、と思ったのですが、お店の人に小さいサイズのものとしてはこっちがあると紹介してもらったものが、目につけていたものの一つだったので、思い切ってそちらにすることにしました。

その場で作ってもらえるのかと思っていたら、1週間程度待たないといけないそうです。月末には手に入ればと思って帰ってきたのですが、そのあとレンズが特注になるという連絡がお店から入り、もう少し待たないといけないようです。楽しみに待とうと思います。

カテゴリー: Java

BBS

ずっと前に購入したTomcatでWebアプリを作成する本を眺めながらBBSをお遊びで動かしてみています。JPAを使ったりSeamを使ったりすれば、随分楽になるのですが、そういうのが使えない環境でも似たようなものを動かさないといけないこともありそうなので、低レベルなJDBCを使う方法を見ています。とはいえ、さすがにDataSourceは使っていますが。Tomcat5.5を使うのか、Tomcat6.0を使うのか悩んだり、EclipseでTomcat5.5を動かすときに、Tomcat6でのcontext.xml相当はどこへ、どう登録すればいいのか、よくわからなかったりと、関係ないところで時間をとってしまいました。

また、本ではMySQLを使っているのですが、WindowsにMySQLをインストールするのは厭なので、HSQLDBを使うことにしました。Derbyの方がJDK6についている分準備が簡単なのですが、なんとなく最近使っているHSQLDBを採用してしまいました。HSQLDBについているクライアントツールが便利な気がするからなのですが、Eclipseを使っているので、そっちのDB関係のプラグインを使った方がいいんじゃないか、というつっこみをもらいそうな気もします。ま、なんでもいいんです。お遊びプログラムですから。といいつつ、DBの選択にも時間がかかってしまって、本題になかなか入れなくて、時間がさらにかかってしまいました。

しかし、Seamとか知ってしまうと、JDBCを使った方法でプログラミングをするのは結構しんどい気がするのですが、すごく簡単な機能をさっと作るとか、他のシステムとちょっとだけ連携させるWebアプリを作るというときには、どっちが本当に速くできるのかというと、微妙な感じがします。Seamは、ちょっとはまると解決するまでに時間がかかりそうです。いろいろな情報やノウハウがたまっているかどうか、というあたりが大きな差のような気はしますが…

メインストリームはどこにいきますかねぇ。Seamにはこなくて、Strutsのままいく、ということはないと思いますが。

カテゴリー: Java

No cache

Webアプリで、キャッシュをさせない方法として、下記が紹介されていましたが、この技術は今でも有効なんですかね。

Calendar objCal1=Calendar.getInstance();
Calendar objCal2=Calendar.getInstance();
objCal2.set(1970,0,1,0,0,0);
response.setDateHeader("Last-Modified",objCal1.getTime().getTime());
response.setDateHeader("Expires",objCal2.getTime().getTime());
response.setHeader("pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
カテゴリー: Java

jconsole

Test.java を次のように作成

public class Test {
  public static void main(String[] args) {
   for (int i=0 ; i<10000 ; i++) {
    try {
      Thread.sleep(1000);
      System.out.print(".");
    } catch (Exception e) {
    }
   }
  }
}

logging.properties を作成します。

handlers=java.util.logging.ConsoleHandler

java.util.logging.ConsoleHandler.level=FINEST
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter

javax.management.level=FINEST
javax.management.remote.level=FINER

runTest.sh を作成して、 chmod 755 runTest.sh としておく。SSLを使わず、認証も使用しないのでセキュリティ的に問題がある。動作確認のために使う程度にして、実際はSSLあり、認証ありの設定で使用するべき。方法はSunのドキュメントにある。

#!/bin/sh
java -Djava.util.logging.config.file=logging.properties
 -Dcom.sun.management.jmxremote.port=7080
 -Dcom.sun.management.jmxremote.ssl=false
 -Dcom.sun.management.jmxremote.authenticate=false $1

コンパイルして実行

javac Test.java
./runTest.sh Test

jconsoleを実行。LinuxではLANG=C をつけないと起動できない場合がある。

LANG=C jconsole

ローカルリソースでは、そのまま見ればいい。リモート経由でみたいときは、リモートとして localhost:7080 を指定。他のホストでjconsoleを起動した場合は hostname:7080 を指定。

カテゴリー: Java