2009-01-01から1年間の記事一覧

ラップする方法を見直す

今まで、org.apache.commons.net.ftp.FTPClient を使用する処理をラップして提供するものを書いていた。 しかしそうすると、FTPClient の操作を呼び出し側では固定の認識になってしまい、与えられたFTP操作しかできない。 そこで、メソッド名、引数の配置…

サブネットマスクの計算

今のJavaプログラマのほとんどがビット演算のコードを書くことはしないだろう。 サブネットマスクより、IPアドレスの妥当性を検査するためのユーティリティクラスを書いてみた。 import java.math.BigInteger; public final class NetAddressUtil{ private…

MySQLを久々に

仕事でMySQLを使うなんて何年ぶりだろう。 不況の波なのか。。。 INSERTした時、オートインクリメント id のを受け取る方法は、 <insert id="insert" parameterClass="パラメータクラス"> INSERT のSQL文 <selectKey keyProperty="id" type="post" resultClass="java.lang.Long"> SELECT LAST_INSERT_ID() AS value </selectKey> </insert>

昔、苦労したFTPClient

かなり昔、苦労したことを思い出す。 まだ、このリンクページは見えている。 https://issues.apache.org/jira/browse/NET-188 FTP で listFiles()した時、閏日付のファイル更新日を持つファイルが存在すると落ちるやつ。 もう、2.0 1.5 でFIX となってる

文字列からEnum

文字列から特定のオブジェクトを取得するのに、Mapもよくある手段だが、 コンパイル段階から決まってる固定のものを取得するのに、enum が便利。 こういう視点を忘れないようにしたいものだ。 valueOf("enumを示す文字列") -> enum値 実際コードもたいしたも…

丁寧な設計

人にコーディングしてもらうなら端折ったりせず必須情報を見易く書いてなければダメなのだが。。。 public class TestMain{ public static void main(String[] args){ Runtime.getRuntime().addShutdownHook(new Thread(new _Hook())); // リスナ等の起動 //…

JettyでのMySQL接続

どうでもいいことだが、今まで規模の大きいプロジェクトで仕事をしてた時に、メンバのみならずPL の方々と 雑談をしていると、彼らは Tomcat を知っていても Jetty の存在を知らない。というのが多い。 結構、古くからあるオープンソースなのに。。。 彼らは…

ConfigurationException

Google guice でコーディング&デバッグをしていて、 時々、ConfigurationException を発生させてしまうことがある。 A binding to xxxx already exists on a child injector. どう見てもバインド定義に誤りがないといえるとき、 このエラーメッセージが出て…

オープンソースの中を

オープンソースの中を覗いて勉強になることがある。 Google guice の Servlet を利用する時。 web.xml の、<servlet-mapping>を Javaで記述というと、そんなことして何の意味がある!と思うだろうが、 実際に実行すると意外な機能に気づく。 GuiceServletContextListener を継</servlet-mapping>…

サーブレットでGoogle guice

サーブレットで Google guice を使用する場合、guice-servlet-2.0.jar を使う。 web.xml に、com.google.inject.servlet.GuiceFilter でフィルタを宣言。 サーブレットの初期化で com.google.inject.servlet.ServletModule を install のバインド定義したイ…

build.xml

今まで使い回しで記述してた Ant build.xml は良くなかった。 Ant-Contrib を使える状態が前提であるが、書き直すことにした。 <project name="Labo-build" basedir="." default="buildRequest"> <property file="build.properties"/> <property environment="env"/> <path id="my-classpath"> <fileset dir="${my.lib}"> <include name="*.jar"/>…</include></fileset></path></property></property></project>

Ant contrib

Ant contrib は便利だ。非常に助かる。 http://ant-contrib.sourceforge.net/tasks/tasks/

ESCキー

久々にLinuxを触りとまどったことと。。。 最新のTeraTermをWinXPにインストールして、Linuxサーバに、SSH接続、 → あるファイルを vi で編集中、入力モードを抜けるのに、ESCキーを打つのと同じ意味は何だっけ? Ctrl + p 押してすぐに、[ キーを押す。

rpm

久々にLinuxの世界の仕事に戻ってきた。かなり忘れてる。 つくづく自分がインフラや基盤構築関係に弱い人間なのかを痛感させられる。 やっぱりプログラミングが性に合ってる。 rpm コマンド 新規のみインストール rpm -ivh xxx.rpm アップグレードオプション…

@Named は便利

Google guice の Named アノテーションは、やはり便利であると思う。 あるクラスのインスタンスを Properties や、Map が示す状況で 初期インスタンスを作成したい時に、@Named( Key ) をつけた Field に初期値を Properties や、Map の Key が示す値にして…

ソートの見直し

ソートされるSetを作成するのに、いちいち Comparator 実装クラスを書くのは面倒くさくなった。 そこで、一定の Comparator 実装クラスをインジェクトさせる方法を考えた。 でも、当たり前の制約はある。 ソート対象のオブジェクトが Comparable#compareTo …

TypeLiteral進化の先は?

Google guice Binder#bind(TypeLiteral<T> typeLiteral) が、バージョン1.0 の頃から存在し、 List<String> 等のバインド等、 new AbstractModule(){ protected void configure(){ binder().bind(new TypeLiteral<List<String>>(){}).toInstance(new ArrayList<String>()); : みたいなことを</string></list<string></string></t>…

役立つかどうかわからない

以下のようなアノテーションが存在したときに、アノテーションを スーパー・インタフェースにするには、 Eclipse [設定]→[Java]→[コンパイラ]→[エラー/警告] ▼注釈(N) 注釈をスーパー・インタフェースとして使用 → 無視 を設定 import java.lang.annotation.…

インナークラスへのInject

Sample というオブジェクトが存在し Date型の属性値を必ず持ってるとします。 これを、オブジェクトの自然ソートでなくて、オブジェクトの属性値に よるソートして使用したい時に、今までは、、、 public class SampleSetWrapper{ private Set<Sample> sampleSet; pu</sample>…

Moduleの区分化 part2

先日書いた「Moduleの区分化」は、モジュール定義文 configure での exose() や install() を理解するサンプルとしてよいが、現実的でないので、 もう少し現実的に近い形式を書いてみた。 以下、Guice.createInjector の引数の形式は、Module...m あるいは、…

Velocity の foreach 使い方にすぎない

Velocity1.6.2の機能をうまく使えば org.apache.commons.lang.StringUtils#join を使わなくても もっとスマートにできるはず。 → velocityHasNext変数を判断してカンマを付与するかどうか。。。 ここに書いたのは、Velocity の foreach の使い方であり CSV …

Velocity最新を使おう

プロジェクトの中で開発中、一度導入したツールのバージョンUPに目が届かないことが多い。 Velocity1.6.2 が、2009年3月にリリースされていた。 1.5 との差を調査するのに、まずはJARに入っている velocity.properties の diff を調べてみた。 (1) runtime…

Moduleの区分化

Google guice2.0 になって Module の記述を区分化するのに PrivateModule が導入された。 class BlueModule extends PrivateModule{ private int price; protected BlueModule(int p){ this.price = p; } @Override protected void configure(){ install(new…

Moduleのオーバーライド

Google guice2.0 で可能になった com.google.inject.Module をオーバーライド認識させること。 一見、地味な機能であるがバインド定義状況が変化していく場合にとても便利であろう。 Injector injector = Guice.createInjector( Modules.override(new FirstM…

@Providesをつけて

Google guice2.0 から登場した @Provides 今まで Provider<T> 実装クラスを準備しなければならなかったのを Module 実装クラス、 あるいは、AbstractModule 実装クラスの記述で、 @Provides を付与したメソッド(名前なんでもよい)を書けばよい。もちろん古い</t>…

待望のGoogle guice2.0

遂に正式に公開された、Google guice2.0 さっそく試してみよう。 まずは、multibindings の MapBinder から、 注意 すべきは、MapBinder を使うのに、guice-2.0.jar 以外に、 同梱で配布された guice-multibindings-2.0.jar を使用しなければならない。 Map …

なぜマクロの解釈が逆に、

再び、Velocity の件、動物的コーディング考察-8 で取り上げたマクロ、 #parse 文で、#parse(マクロを記述したvmファイル) と、 書いてみる。#parse文の後に、マクロ呼び出しを行うと → NG!である。 #parse 呼び出し側の vm ファイルに、#macro を書いて …

printf

String に出力したくなったので、 public static String printf(String fmt,Object...o){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream p = new PrintStream(baos); p.printf(fmt,o); p.close(); return baos.toString(); }

パスワード入力

Eclipse IDEでの実行は、Console にNULLが返るので使えないけど Console console = System.console(); if (console != null){ char[] passwd = console.readPassword("%s: ","password"); String passwdStr = new String(passwd); System.out.println(passwd…

パラメータアノテーション

長い間、使う意味が解らなかったものを見つけた時の喜びが感動である。 メソッドのパラメータにつけるアノテーションの便利さが、なかなか見つからなかった。 見つけた時の感動を忘れずに励みにしようと思う。 import java.lang.annotation.Annotation; impo…