2008年5月27日火曜日

Appletからネイティブライブラリをロードする(リフレクション編)

以前、NyARToolkitをApplet化するときに、かなり複雑なことをしてネイティブライブラリをロードしていました。
が、リフレクション使えばもっと簡単に出来そうなことに今更ながら気が付きました。

URL url = NativeLoadTest.class.getResource("jogl_awt.dll");
File file = new File(url.toURI());

ClassLoader cl = Thread.currentThread().getContextClassLoader();

Field f = ClassLoader.class.getDeclaredField("usr_paths");
f.setAccessible(true);
String[] paths = (String[]) f.get(cl);

String[] paths2 = new String[paths.length + 1];
System.arraycopy(paths, 0, paths2, 0, paths.length);
paths2[paths2.length - 1] = file.getParentFile().getAbsolutePath();

f.set(cl, paths2);
f.setAccessible(false);

System.loadLibrary("jogl_awt");
まだAppletでは試していませんが、これならかなり簡単。
もちろんセキュリティーは無視するとして。
ClassLoaderの実装依存(フィールド名が変わったらダメ)なのが問題点ですが、今更変わるものでもないでしょう。
ということで、近々NativeCapableフレームワーク更新します。


SunがApplet Launcherというものを公開しているのを最近知りました。
Java Web StartのApplet適用っていう感じです。
Sunが署名しているため、安心して使うことが出来ます。
メジャーなネイティブライブラリ(JOGLやJava3Dなど)を使う場合はこれを使うのがよさそうです。
(ライブラリ側で対応しておかないといけないのが難点ですが)

時間があれば使ってみて感想を書きたいと思います。

2008年5月21日水曜日

Sourceforge.jpのSVNをEclipseから使う

ちょっと面倒くさいので、参考リンクをメモ。
どっちもSourceforgeJPにきちんと書いてあるんだけどね。


2008年5月20日火曜日

NyARToolkit on Google Android 更新と公開


ずいぶん前にNyARToolkitをAndroidの上で動かしてみたわけですが、
NyARToolkitの作者 A虎@ さんのご好意によりSourceforge.jpにてサブプロジェクトとして公開することになりました!

Eclipseのプロジェクトをエクスポートしたものなので、動かすにはAndroidSDKおよびプラグインが必要です。
(みゅおさんがAndroidのドキュメントを日本語化しておられます。ありがたい!)


当時にくらべて本家NyARToolkitが格段にブラッシュアップされているため速度も大幅に改善。
1.2秒に一回ぐらい認識できます、、、前は10秒だったからね。。。
(開発環境がとても貧弱なため、Androidエミュレータの制限によるものでは無い可能性もあります)
ついでに少しUIも付けてみました。実機欲しいなぁ~。


エミュレータでは現在のところカメラデバイスは実装されていないので
JMFでキャプチャした画像をソケット通信で送ってます。
送信用のプログラムサンプルも同封してありますが、
関連ライブラリが必要で面倒なのでApplet及びJWSにしたものを公開します。
現在のところWindows版のみです。

P.S.
Flash版も開発され空前のAR移植ブームですなぁ。しみじみ。
開発環境およびNativeCapableフレームワークもほぼ完成し今週中には公開できそうです。
いろんなARアプリがブラウザの上で遊べる時代になると楽しいな!!

2008年5月8日木曜日

テキストフィールド等で入力補完を使う

テキストエディタに対してコード補完を設定する方法は幾つか紹介されているのだが、
テキストフィールドやリストなどで入力補完を行う方法は見つけ難かったのでメモ。

Text text = ....
IControlContentAdapter contentAdapter = new TextContentAdapter();
IContentProposalProvider provider = new IContentProposalProvider() {
public IContentProposal[] getProposals(String contents, int position) {
IContentProposal[] icps = ....
}
}
ContentAssistCommandAdapter ca = new ContentAssistCommandAdapter(
text, contentAdapter, provider, null, new char[] {}, true);

解ってしまえば非常に簡単。

NyARToolkit Eclipse Plugin 更新 ~ エクスポート機能

ずいぶん間が空きましたが、少し機能追加や変更を行いました。
NyARToolkitに限らず、NativeなApplet(及びデスクトップアプリ)を開発する環境に方向が変わってきつつあります。
名前をNativeCapableプラグインに変更しました。

Native Capable Eclipse Plugin
ダウンロードしてpluginsフォルダに配置してください。

Eclipseプロジェクトを圧縮したものは以下からダウンロードできます。
Eclipse Project

小さな変更点:
Windows以外のプラットフォームでも利用できるようにネイティブライブラリの配備を変更
(手元に他の環境がないため、Windows以外のライブラリは同封されていません)

大きな機能追加:
NativeCapableModuleを実装したクラスからAppletとアプリケーションを自動生成するExportウィザードを追加しました。

作業中のプロジェクトで
PackageExplorer->右クリックメニュー->Export(エクスポート)
を選びます。


Module: 対象となるNativeCapableModule実装クラスを指定
Create: 生成物を指定
Targets: 対象クラスの設定
Strategy: 対象クラスのロード方法を指定
-Delegate Targets: 対象クラス以外をNativeCapableローダでロード
-Load Targets:対象クラスをNativeCapableローダでロード

次回目標:
Antファイルの自動生成、自動実行でApplet及びJWSとしてデプロイ可能な状態にするExport機能の実装!!