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)

Web API ネタ

Geocoding API
書式: http://www.geocoding.jp/?q=<キーワード>
指定したキーワード(住所、地名、駅など)を持つ場所の座標(経緯度)を検索して XML で返します。
Google CodeSearch
書式: http://www.google.com/codesearch/feeds/search?q=<キーワード>
指定したキーワードを、公開されているソースコードから検索して、該当したソースコードの URL を RSS フィード(Atom 1.0)で返します。
Koders.com なんかの Google 版ですね。
詳細:
  – Google CodeSearch Data API Overview
  – Google CodeSearch の使用法(Zend Framework)
  
 
Web API の動向については using API が参考になります。

Windows XP SP2 でプログラム実行時のファイアウォールブロックイベントを記録する

Windows ファイアウォールの通知を有効または無効にする(Microsoft Technet)」によると、
コントロールパネル -> 管理ツール -> ローカルセキュリティポリシー を実行して
セキュリティの設定 -> 監査ポリシー -> ポリシーの変更の監査 を、
成功、失敗時に監査するようにすることで記録できます。

ちなみにイベントログは「コンピュータの管理」または「管理ツール」から、「イベントビューア」のセキュリティログで見ることができます。

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 とネット開発関係の最新ニュース。

RSS4J がうるさいのでパッチを当てました

RSS フィードを読むのに RSS4J(要 Xerces) を採用したのですが、なぜか

RssParser.parseRss( … );

を呼び出す都度、

date: 2006-11-24T14:09:40+09:00

のように、RSS feed 中の日付を出力するようになっていました。
煩いし、これはちょっと都合が悪いなので調べてみると…

$ grep -rn System.out.print rss4j
rss4j/src/churchillobjects/rss4j/model/DateLanguageUtil.java:202: System.out.println(“\n\n date: “+date);

と、churchillobjects.rss4j.model.DateLanguageUtil で System.out.println していたので、この行をコメントアウトし、このクラスだけ再コンパイルして対応しました。一応変更適用済のバイナリを置いておきますので、よろしければどうぞ。
 
rss4j092p.zip
 
参考:
Greenery – RSS4j v0.92-JAVA/RSS4j-Wiki
RSS4J, Feed Parser, Informa = Java の RSS ライブラリ(Goodpic)
@IT:Java TIPS — サーブレットでRSSフィールドを配信する

HTTP 接続の定石

よく忘れるので簡易コードメモ。
もちろんこのままでは動作しません。

final java.net.URL url = new java.net.URL(String sUrl); // 接続先指定(HTTPS, HTTP いずれも可)
final java.net.HttpURLConnection con = (java.net.HttpUrlConnection) url.openConnection(); // 接続開始
 
/* 必要であればここで con に対して接続設定(ex. User-Agent, キャッシュなど) */
 
// 以下(リクエスト送信と)結果取得
final int code = con.getResponseCode(); // 結果コード取得
if( code < 200 && 300 <= code){
    return; // HTTP レスポンスコードが 2XX 以外なら続行不可
}
 
// ページデータ取得(ヘッダ除く)
final BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), “JISAutoDetect”);
 
String line;
while(null != (line = reader.readLine())){
    System.out.println(line);
}

 
参考:
java.net.HttpURLConnection
HTTP Status Code

文字エンコードを自動判別する

文字コードが不明な文字列を自動判別して変換するには、 JISAutoDetect を文字コードとして指定します。

// InputStreamReader の例
final BufferedReader reader =
        new BufferedReader(new InputStreamReader(in, “JISAutoDetect”)); // コンストラクタの第二引数で文字コードとして JISAutoDetect を指定
while(null != (line = reader.readLine())){
    System.out.println(line);
}

// String の例
final String src = “あいうえお”; // 任意の文字コードの文字列
final String str = new String(src.getBytes(), “JISAutoDetect”); // 文字コード自動変換
System.out.println(“str”);

 
JavaFAQS146-Q07 の前後あたりが参考になると思います。