« 2008年5月 | トップページ | 2008年7月 »

2008年6月

2008年6月26日 (木)

標準エラー出力不使用版 ruby-mswince を作ってみた。

先日頂いた moyashi さんコメント「エラーメッセージを読み取るのが困難で結局使ってませんが」を受けて、標準エラー出力の代わりに標準出力にエラーメッセージを出力するように修正した ruby-mswince を作ってみました。

修正版の ruby-mswince を使用すると以下のように標準出力にエラーメッセージが出力されますので動体視力が悪い人でも安心してご使用できますcatface

Scrn0027

| | コメント (1) | トラックバック (1)

2008年6月24日 (火)

CeGCC の dup 関数は Socket ハンドルの複製には対応してなさげ…

ソースをほげっても dup 関数の実装がどこにあるかわからなかったので、cegcc.dll を LoadLibrary して dup 関数のアドレスを GetProcAddress で取得して無理やり呼び出してみました。

結果は 0 を返すものの後続の connect 処理で失敗してしまい Socket ハンドルの複製は出来なさそうでした…orz

ではどうやって Socket からの入力ストリームを実行しているスクリプトに受け渡しているんだろう…とソースをほげっていると CeGCC に含まれる PipeLib が怪しいのに気付きました。

Windows Mobile はパイプに対応していないのですが、上記の PipeLib には CreatePipe 関数が定義されています。おそらくパイプを使って Socket からの入力ストリームを実行しているスクリプトの標準入力に受け渡しているんじゃないかなーと(推測

誰か PipeLibruby-mswince に取り込んでくれないかな~(他力本願

| | コメント (0) | トラックバック (0)

2008年6月23日 (月)

CeGCC の dup 関数の実装はどこ?

CeGCCdup 関数がどうやって Sokcet ハンドルを複製しているのか調査しているんですが、行き詰ってしまいました…orz

とりあえず SVN リポジトリから trunk を丸ごとチェックアウトして dup.cdup2.c は単に fcntl 関数のラッパーということはわかったんですが、fcntl 関数の実装って fcntl.s でいいんだろうか?

ソースをみても単にシステムコールを呼び出しているだけみたいだし…。

Socket ハンドルを複製する API は提供はされてないけどもシステムコールは存在しているとうこと?

それとも見当違いのソースをみている?

教えて!エロイ人~!bearing

| | コメント (0) | トラックバック (0)

2008年6月21日 (土)

Socket 対応版 ruby-mswince キテター!

Socket に対応した ruby-mswince がリリースされていました!happy02

Target-EarthdotNet - Ruby on Windows CE & Pocket PC via ひとりぶろぐ

早速アドエスの microSD カードにインストールしてみましたが動きませんでした orz

CeGCC の制限によりマルチバイト文字を含むパス上にインストールすると動かないようです。

それにしても CeGCCdup 関数がどうやって Sokcet ハンドルを複製しているのか気になるのでソースをほげってみたいと思います。

| | コメント (5) | トラックバック (0)

2008年6月18日 (水)

プレビュー画面が出た!

カメラのプレビュー画面が出ました!happy01

プレビュー画面がすぐに消えてしまっていた原因はメインスレッドで JNI ライブラリをロードして JNI_OnLoad 関数内で CoInitializeEx を呼び出していたことでした。

CoInitializeEx はスレッド毎に呼び出す必要があるため、メインスレッドではなく AWT イベントディスパッチスレッドで呼び出すように改修したところプレビュー画面が消えずに表示されたままになりましたhappy02

しかし、また別の問題が…sweat02

今度はプレビュー画面上でタップしても MouseEvent が発生しない…orz

| | コメント (0) | トラックバック (0)

2008年6月17日 (火)

静止画の撮影に成功!しかし…

ひたすら DirectShow の JNI ラッパを実装して「Advanced/W-ZERO3 [es]でカメラアプリを作ろう Part2」のコードをほとんどそのまま Java でコーディングしたサンプルプログラムが動くようになりましたhappy02

ウィンドウ上でクリックすると静止画の撮影も出来るようになりましたが、プレビュー画面が一瞬しか表示されません…orz

具体的には画面左上に QVGA サイズでプレビュー画面が表示されたかと思うと一瞬でサイズが拡大して行きホワイトアウトしてしまいますsweat02

どこがマズイのかさっぱりわからん…bearing

| | コメント (0) | トラックバック (0)

2008年6月16日 (月)

JMF のソースコードは入手不可能!?

Mysaifu JVM 用 JMF(Java Media Framework)の実装を進めているんですが、JMF のソースを見たほうが早いと思い調べてみたところ以下のページを発見!happy01

Sun Community Source Licensing (SCSL) - Java Media Framework API (JMF)

早速アカウントを登録してログインしてみましたがダウンロードのリンクが出現しませんangry

ぐぐってみてもダウンロードできそうな情報は入手できず…orz

どうしたもんか…shock

| | コメント (0) | トラックバック (0)

2008年6月11日 (水)

Mysaifu JVM 用 JMF を作成する - 其ノ壱

Java SE としては既に廃れてしまっている感のある JMF(Java Media Framework)ですが、Mysaifu JVM で使えるようになれば W-ZERO3 を無線 Web カメラに出来るんじゃまいか?

というわけで今度は DirectShow を使って Mysaifu JVM 用の JMF を作成します。

とりあえず DirectShow  関係のページ。

今のところ Windows Mobile 向けの DirectShow は Windows 版と比べて以下の制限があるのがわかっています。

  1. ISampleGrabber が存在しない。
  2. IBasicVideo::GetCurrentImage() ではカメラの映像をキャプチャできない。

簡潔に言うと、カメラの映像をキャプチャするには自前でフィルタを別途作成する必要があるってことです orz

JMF の実装に関しては、DirectShow は COM なので、JNI でひたすら COM を叩くコードを書いてます。

そういえば Java で COM を叩くライブラリがあったな~、と思ってググってみたらありました。

JCom (Java-COM Bridge)

コードを見てみるとほとんど同じことをやってる…orz

なら JCom を Windows Mobile に移植したほうが早いかな~と思いきや、よくよくコードを見てみると IDispatch クラスを継承したクラスしか CoCreateInstance 出来ないというおかしな仕様になっていたので使うのを止めました。

こつこつ実装するしかないですなcatface

| | コメント (0) | トラックバック (0)

2008年6月 8日 (日)

Mysaifu JVM を高速化する!

今回は Mysaifu JVM鬼車 for Java を組み込んで高速化します。

まずは以下の手順で鬼車 for Java を組み込んだランタイムライブラリを作成します。

  1. onig4j-v003.zip をダウンロードして任意のフォルダに展開する。
    以降は「C:\mysaifu」を使用します。
  2. onig4j-java.util.regex-impl.zip をダウンロードして「C:\mysaifu」に展開する。
  3. onig-5.9.1.1-extended-wince.zip をダウンロードして「C:\mysaifu」に展開する。
  4. Windows Mobile にインストールされている Mysaifu JVM のランタイムライブラリ(rt.jar)を PC 上の「C:\mysaifu」にコピーする。
  5. コマンドプロンプトを起動して「C:\mysaifu」に移動する。
  6. バッチファイル「rt-onig4j.jar.bat」に引数「rt.jar」、「onig4j.jar」、「onig4j-java.util.regex-impl.jar」を指定して実行する。
    C:\mysaifu>rt-onig4j.jar.bat rt.jar onig4j-java.util.regex-impl.jar onig4j.jar
    ※バッチファイルの実行には JDK のインストールと JAVA_HOME 環境変数の設定が必要です。

バッチファイルの実行が完了すると鬼車 for Java が組み込まれたランタイムライブラリ「rt-onig4j.jar」が「C:\mysaifu」以下に作成されているはずです。

次に作成したランタイムライブラリ「rt-onig4j.jar」を Mysaifu JVM にインストールします。

  1. 作成したランタイムライブラリ「rt-onig4j.jar」 を Windows Mobile に転送する。
    Mysaifu JVM をデバイスにインストールしている場合は「\Program Files\Mysaifu JVM\jre\lib」以下にコピーします。
  2. 鬼車(OnigSyntaxJava 改良版) for Windows CE (ARMV4)「onig.dll」と鬼車 JNI ライブラリ「onig4j.dll」を Windows Mobile に転送する。
    Mysaifu JVM をデバイスにインストールしている場合は「\Program Files\Mysaifu JVM\jre\bin」以下にコピーします。

以上で鬼車 for Java の組み込みが完了しました。


では、実際に鬼車 for Java 組み込み版ランタイムライブラリを使用してベンチマークを実行してみます。

鬼車 for Java 組み込み版ランタイムライブラリを使用する際は以下のように「Bootclasspath」を変更する必要があります。

Scrn0025

ベンチマークの実行結果は以下の通りです。

Scrn0026

鬼車 for Java を直接使用するよりも多少遅くなりますが、標準のランタイムライブラリ版よりも15倍程度高速化されましたhappy01

しかし、ここで「正規表現を使ってないなら標準のランタイムライブラリで良くね?」と思うかもしれません。

が、以下のクラスが java.util.regex.Pattern を内部的に使用しています。

  • java.lang.String
    • replaceFirst()
    • replaceAll()
    • split()
  • java.net.URI
    • <cinit>
  • java.text.SimpleDateFormat
    • parse()
  • java.util.jar.JarFile
    • getEntry()
    • nextElement()
  • gnu.xml.validation.datatype.LanguageType
    • <cinit>
  • gnu.xml.validation.datatype.TypeBuilder
    • addParameter()

更に以下のクラスが String#split() を内部的に使用しています。

  • java.lang.System
    • getenv()
  • java.text.DateFormatSymbols
    • getStringArray()
    • getZoneStrings()
  • javax.management.MBeanPermission
    • updateActionSet()
  • javax.management.MBeanServerPermission
    • implies()
    • add()
    • checkName()
  • javax.management.ObjectName
    • parse()
  • gnu.classpath.jdwp.Jdwp
    • _processConfigury()
  • gnu.classpath.jdwp.processor.VirtualMachineCommandSet
    • executeClassPaths()
  • gnu.classpath.jdwp.transport.SocketTransport
    • configure()
  • gnu.javax.security.auth.login.ConfigFileParser
    • validateClassName()
  • gnu.classpath.tools.getopt.OptionGroup
    • formatText()
  • gnu.classpath.tools.getopt.Parser
    • formatText()
  • gnu.classpath.tools.jarsigner.JarVerifier
    • start()
  • gnu.classpath.tools.javah.CniPrintStream
    • writeClass()

Mysaifu JVM は遅い」と感じているなら鬼車 for Java 組み込み版ランタイムライブラリを使用すると劇的に効果があるかもしれませんよcatface

| | コメント (0) | トラックバック (0)

2008年6月 7日 (土)

鬼車 for Java バージョン 003 リリース!

鬼車 for Java バージョン 003 をリリースしました。

主な変更点は以下の通り。

  • バグ修正(#12632)。
  • ライセンスを BSDGPLv2 のデュアルライセンスに変更。

今回正式にリリースした「鬼車 for Java による java.util.regex 実装」Mysaifu JVM に組み込むと正規表現を使用したコードが10倍以上高速化されます。

次回は(今度こそ)Mysaifu JVM鬼車 for Java を組み込む手順を公開しますcoldsweats01

| | コメント (0) | トラックバック (0)

九州 JavaOne 報告会に行ってきた。

Java コミュニティ@九州JavaOne 報告会に行ってきました。

講師はきしださん九工大の小出先生です。

きしださんは受付?でスイス人に間違えられたそうです。確かに言われてみれば外人っぽい顔かもcatface

小出先生は Sun SPOT を持参されていたのですが、Sun SPOT は OS レスで動いてるらしく、CPU やメモリは W-ZERO3 以下の性能ですがキビキビと動いている印象でした。

ちなみに一番気になる費用ですが、福岡から JavaOne に参加するためには40万円ほど必要だそうです…orz

  • 交通費12万円
  • 宿泊代12万円(ケチると会場から遠く、治安の悪い地区になる)
  • 参加費16~20万円(開催日が近づくと費用が上がる)

お土産の NetBeans バッグ欲しかったbearing

| | コメント (0) | トラックバック (0)

« 2008年5月 | トップページ | 2008年7月 »