Launch4j – Java から実行可能プログラムを作成する

Launch4j
 
Windows XP/Vista の .exe をはじめ、Linux, Mac OS X, Soralis などさまざまな環境用のインストーラや実行可能ファイルを生成してくれる Jar のラッパープログラム。
 
マイコミジャーナルでの紹介記事はこちら

Processing – 絵をプログラムする言語

Processing(本家 Java 版. ライセンスは LGPL)
 
Processing.js(jQuery作者による JavaScript 実装版。IEでは要 ExCanvas.js. MIT ライセンス)
 
Java 言語に似た平易なプログラミング言語で、画像処理に優れている。
ユーザの入力を受け付けたり動的な処理もできるので、ゲームなどインタラクティブなプログラムも制作可能です。
 
参考:
絵をプログラムする言語「Processing 1.0」が正式リリース(マイコミジャーナル)
ブラウザでお絵描きプログラミング! Processing.js 登場!(IT戦記)

他人の Eclipse プラグインを翻訳するには

便利なのに日本語化されていない、そんな海外のプラグインを見つけた時の翻訳方法をざっとまとめてみました。
 
1. 翻訳対象のプラグインを Eclipse にインポートする。
プラグインのソースコードまたはリリースされたアーカイブファイル(.jar)をEclipse プロジェクトとしてインポートします。
前者の場合は「インポート→一般→既存プロジェクトをワークスペースへ」。
後者の場合は「インポート→プラグイン開発→プラグインおよびフラグメント」です。
 
2. 翻訳対象プラグインのパッケージディレクトリ内から *.properties ファイルを検索する。
まずは置き換え対象の外部化文字列の設定ファイルを探します。org/example/foo/messages.properties などです。ファイル名は異なっている可能性がありますが、実行時のメッセージなどがそのまま(ASCII)テキストで入っているため、開いてみれば一目瞭然のはずです。
 
3. Eclipse でフラグメントプラグイン(プラグイン開発->フラグメント・プロジェクト)としてプロジェクトを新規作成する
日本語化プラグインを作成します。
 
プロジェクト名は、慣習として翻訳対象のプラグイン名に .nl_ja (“.nl_” + 言語をあらわす2文字)をつけたものにします。

例:
翻訳対象のプラグインの名: org.junit4.source
日本語化プラグインのプロジェクト名: org.junit4.source.nl_ja

 
次のページでホスト・プラグインのプラグインIDを求められるので、プラグインIDに翻訳対象のプラグイン名を指定し、終了ボタンを押します(先の例なら org.junit4.source)。
 
5. 文字列を外部化したファイルを翻訳対象プラグインからコピーする
 (2)で探し出したファイルを日本語化プラグインプロジェクトにコピーします。
ここでコピー先パッケージ構成は元と同じ場所で、ファイル名に _ja をつけます。

例:
コピー元:
  org.example プロジェクト内パッケージディレクトリの org/example/foo/messages.properties
コピー先:
  org.example.nl_ja プロジェクト内パッケージディレクトリの org/example/foo/messages_ja.properties

 
6. *_ja.properties を編集してメッセージを日本語化します。
プロパティエディタプラグインなどを利用していない場合は編集後に native2ascii で ASCII 文字に変換する必要があります。
 
7.プロジェクトをフラグメントとしてリリースする。
ワークスペースでプロジェクトを右クリック→エクスポートを選び、エクスポート画面から「プラグイン開発→デプロイ可能なプラグインおよびフラグメント」を選びます。
 
あて先には eclipse のルートディレクトリ、または適当な保存先ディレクトリを選び次へ、を押すと、あて先に選んだディレクトリの plugins 以下に、プラグイン(フラグメント)として利用可能な .jar ファイルが作成されます。
 
8. 使ってみる
作成した日本語化プラグイン(org.example.nl_ja_1.0.0.jar など) を翻訳元のプラグインと一緒に plugins ディレクトリに入れて、Eclipse を動かして実行してみましょう。
 
以上です。
うまくできたらぜひ本家プラグインの提供元にコミット&ネット公開してくださいね。

コーディング規約 – いいコードの書き方

いいコードとは, 心得5ヶ条(ThinkIT)
電通国際情報サービスの高安氏らによる記事。良書です。
 
ブール値を返すメンバー関数の命名規則(吉田誠一のホームページ)
JDK の API 命名規則を元にして、英文で通るメソッド命名規則について書かれています。
 
参考:
コーディング規約の会(オブジェクト倶楽部)

メトリクス計測プラグイン

Eclipse で使えるメトリクス計測ツール(@IT)

メトリクスとは
 ソフトウェアのメトリクスとは、ソフトウェアを計測する方法およびその尺度のことを意味します。今回紹介するメトリクス計測ツールは、ソフトウェアの構成要素であるソースコードを計測し、数値化を行います。メトリクスを計測し、複雑過ぎるロジックや洗練されないパッケージ構成を見直すことで、バグが少なく保守性が高いソースコードを維持できるようになります。

 
この記事で紹介されている、二種類の Eclipse Metrics Plugin が便利そうです。
Frank Sauer版(Eclipse更新サイト: http://metrics.sourceforge.net/update )
ダウンロード)

国際化(i18n:他言語対応)の基本

まず文字列の外部化をし、言語ごとにプロパティファイルを作成し、Java のクラスパス直下に置きます。たとえば Eclipse の場合 src ディレクトリ、それ以外の場合 class ディレクトリなど。
 
filename.properties: (対応していない場合のデフォルト. 英語が望ましい)

message.greet = Hello!!
message.bye = Good bye.

 
filename_ja.properties:
  日本語ロケール ja_JP の時に利用されるプロパティ.
  マルチバイト文字を扱う場合 native2ascii でエンコードする必要があるため、参考欄で後述する Eclipse の PropertiesEditor プラグインを使うとよい.

message.greet = こんにちは!!
message.bye = さようなら。

 
filename_fr.properties:
  フランス語ロケール fr_FR の時に利用されるプロパティ.
  このように対応したい言語用のファイルを追加するだけで言語対応ができます.

message.greet = Salut!!
message.bye = Au revoir.

 
以下が国際化対応した外部文字列呼び出しと時刻整形の Java サンプルコードです。

import java.util.ResourceBundle; // 外部文字列取得用
import java.text.DateFormat; // 日付表示用
// その他 import 文省略
 
// 略
 
public void main(String[] args){
   // 実行環境のデフォルトのロケールのプロパティファイルを読み込む
   ResourceBundle bundle =
       ResourceBundle.getBundle(“filename”); // <filename>_<言語コード>.properties の <filename> を指定。
    
   // 現在のロケールの言語で挨拶
   System.out.println(bundle.getString(“message.greet”));
 
   // 現在のロケールで有効な書式で日付表示
   String sToday = DateFormat.getDateInstance().format(new Date());
   System.out.println(sToday);
    
   // 現在のロケールの言語で別れの挨拶
   System.out.println(bundle.getString(“message.bye”));
  
}

結果:

– ロケールが英語(en_USなど)の場合:
Hello!!
May 31, 2007
Good bye.
 
– 日本語(ja_JP)の場合:
こんにちは!!
2007/05/31
さようなら。
 
– フランス語(fr_FR)の場合:
Salut!!
31 mai 2007
Au revoir.

 

java.util.Locale.setDefault(Locale.ENGLISH);

のようにすることで、以降のコードのデフォルトロケールを任意の言語,国に変更することができます。
 
参考:
国際化プログラミングの常識(@IT)
Locale クラス(Javadoc)
DateFormat クラス
PropertiesEditor
  .properties ファイルで日本語を含むマルチバイト文字を扱う時に便利な Eclipse プラグイン.
これを使うことでいちいち native2ascii を実行する必要がなくなります.
なお、スタンドアロン版(PropertiesEdotor.jar)もあります.
詳しい導入方法はこちらの記事(@IT)が参考になります。

Java Web Start と Java 3D の関係

Java 3D を使う上で、障害になるのが、作成したプログラムの配布方法。
一つ前のエントリの方法で j3dcore-*.dll をバンドルして、manifest.mf を

Manifest-Version: 1.0
Bundle-NativeCode: j3dcore-d3d.dll;j3dcore-ogl.dll;j3dcore-ogl-cg.dll
Class-Path: j3dcore.jar j3dutils.jar vecmath.jar
Main-Class: Main

のようにして Executable JAR を作成、j3d*.jar と同じフォルダに置いて実行すれば簡単に動作するので、これをまとめて配布はできるのですが、この方法だと Java 3D のライセンス(LICENSE-Java3D-v*.txt: 2.a – 2.e)が懸念事項になります。
 
そこで、もう一つの配布方法として、公式のデモでも使われている手法、
Java Web Start を使うことにしました。
 
以下参考にした犀角(Diceros Horn)のとくながさんの記事へのリンクです。
 
Java Web Start リンク集 ( 犀角(Diceros Horn) )
Java Web Start を始めてみる
Java Web Start のサンプル
JWS で jar ファイルに含まれるファイルにアクセスするには

JNI で DLL, SO 等のネイティブライブラリを JAR に含めるには

作成したクラスを JAR にまとめる際にネイティブライブラリをルートディレクトリにいれて
manifest.cf を以下のようにすれば、任意のネイティブライブラリ(下の例では a.dll, b.dll, c.dll) を含めた状態で実行可能な JAR が作成可能です。

Manifest-Version: 1.0
Bundle-NativeCode: a.dll;b.dll;c.dll
Main-Class: Main

作成時のファイル構造:

<root directory>
– Main.class
– a.dll
– b.dll
– c.dll
– manifest.cf

作成コマンド:

jar cmf manifest.cf out.jar Main.class a.dll b.dll c.dll

 
参考:
How to set Bundle-NativeCode in manifest file in JES? (Sun Developer Forums)

Java で Ajax

JavaをJavaScriptに変換するグーグルのツールを使ってみよう
GWT (Google Web Toolkit), おもしろい。
 
参考:
Google Web Toolkit 公式サイト
 
– Googlipse (公式または Sourceforge.net)
  Eclipse 用 GWT プラグイン。
 
Google Web Toolkitを使ってJavaでAjax開発(All About)
  Googlipse を使って開発するときの手順が参考になります。
  この記事ではデプロイについては方法が書かれていませんが、仮想ブラウザで実行中に、仮想ブラウザの上部の「Compile/Brose」ボタンでデプロイできます。詳しくはGooglipse 公式の Docs を参照のこと。
 
Google Web Toolkit 評価(Cybozu Deveoloper Network)

Java 6 とニュースサイト

@IT を見ててようやく気づいたのですが、12/12 に Java SE 6 がリリースされてました。
というわけで…
 
待望の Java SE 6 でパーシステンス(@IT)
この連載の第1回で触れられている、Scripting APIs(javax.script)のプロジェクトが興味深いです。
 
ついでに…
Java News(Java に関する最新ニュース)
Java とネット開発関係の最新ニュース。