Sun Microsystems、iPhone SDK公開を受けてiPhone向けJava MEの開発を表明

Sun MicrosystemsはiPhone SDKの公開を受けて、iPhone向けJavaプラットフォームを開発することを明らかにしました。

これが実現されるならば、Java開発者にとってはとても嬉しいニュースです。しかしながら、Java on the iPhoneに関しては2つの観点で心配な点があります。

まず1点目は、前のエントリで書いたように、VMやスクリプト言語環境のランタイムとそのランタイムを前提とするアプリケーションの両方がサードパーティソフトウェアであるという構成を、iPhone OSがサポートするかどうかが現時点で不透明であるということです。Javaランタイム環境がiPhone OS 2.0に予め含まれる構成になるのであればおそらく問題はないのでしょうが、現時点ではAppleはiPhoneにJavaを載せることに関してはあまり積極的ではありません。LeopardのXcode 3.0でCocoa Javaプロジェクトがサポートされなくなったことからも、AppleがJavaの採用に積極的でなくなったことが分かります。

2点目は、iPhone OSのユーザインタフェース(Core touch)はJava MEの標準APIでだけではサポートしきれないということです。これはJava SEを採用するとしても同様です。iPhoneアプリケーションの魅力は、Multi-Touchイベント/コントロールと加速度センサ(Accelerometer)が利用できることによるものが大きいです。これらのAPIやiPhone独特のUIがJava APIで利用できないのであれば、iPhone開発者が開発言語として積極的にJavaを採用する理由がありません。おそらく、これらiPhoneの独自機能を利用できる拡張APIをJava MEに追加することになるのだろうと思います。

いずれにしてもiPhone OS 2.0を取り巻く各社の動向には暫く目が離せません。

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

Jay Freeman氏、Debian APTベースの新しいパッケージマネージャCydiaをリリース

Cydiaicon

iPhone/iPod touch向けにJavaベースのUIKitレイヤJocStrapを開発したJay Freeman (saurik)氏が、Linuxの世界では有名なDebianパッケージマネージャAPTをベースに新しいiPhone/iPod touch向けパッケージマネージャをリリースしました。

iPhone向けのパッケージマネージャとしては既にapptapp Installerが不動の地位を確立していますが、より標準的で実績のあるDebianパッケージを採用したことにより、バージョン管理や多段の依存関係管理ができるメリットがあるだけでなく、多くのUNIX資産をiPhoneに移植・配布する敷居が1つ低くなったと言えます。

それよりも、もっと嬉しいメリットとして以下が挙げられます。

  • ファームウェア1.1.3から問題を起こしているBSD Subsystemのpasswdコマンドによる/etc/master.passwd破壊の問題が解決する
  • ファームウェア1.1.3から、mobileアカウントでsshログインしようとすると直ぐに接続が解除されてしまう問題(rootアカウントでは問題なし)が解決している
  • ruby: GCのバグを修正した新しいバージョンがインストールでき、irbやrubygemsがきちんと使えるようになっている
  • python: PyObjCが使えるようになり、pythonからでもUIKitベースのGUIアプリケーション開発ができるようになっている

その他、X11のクライアントライブラリが移植されているようで、テストアプリとしてxeyesが用意されています。残念ながら私の環境ではsshのX11 forwardingがうまくいってなくて表示できていませんが、将来的にX11アプリケーションも充実していく可能性があります。

パッケージマネージャのCydia.appそのものはInstaller.appのSystemカテゴリからインストールできます。ただし、ここで注意しなければいけないのは、Cydiaをインストールする前にルートパーティションに35MB程度の空き容量が必要だということです。私の場合は、Java関連一式、Ruby、Pythonを削除(いずれもCydiaから新しいバージョンをインストール可能)して、35MBの空きを確保できました。

またもう一つの注意点は、CydiaのインストールプロセスはBSD Subsystemのアンインストール、デフォルトで用意されるBSD Subystem互換セットのインストールやディレクトリの移動などに少し時間がかかります。ですので、iPhone/iPod touchが自動スリープしないように、予め「設定>一般>自動ロック」を「しない」に設定しておいてからCydiaのインストールを開始することをお勧めします。

インストールが完了したら、Cydiaを起動後、右上の丸い矢印のアイコンを(ちょっと押しにくいですが)タップするとパッケージリストを取得して、様々なアプリケーションをインストールできるようになります。ユーザインタフェースはInstaller.appとそっくりなのでほとんどの方は迷わず使えると思います。

CydiaCydia2

Cydiaのインストールが完了した時点では、/usr/shareが丸ごと/private/var/shareに移動されているため、ルートパーティションの空き容量は私の場合35MBから123MBに増えました。

また、Cydia.appとInstaller.appの共存も可能なようです。既存のアプリケーションの中には従来のBSD Subsystemに依存しているものも多いのですが、Cydia.appではBSD Subsystem互換セットがインストールされるため基本的に問題ありません。後は、CydiaとInstallerの両方に同じアプリケーションが登録されている場合があるので、両方に登録されているアプリケーションをどちらか片方のパッケージマネージャでのみアップデートするように気をつければ問題ないと思います。

なお、JamVM、JocStrapなどJava開発ツールは今後Cydiaでのみアップデートしていくようなので、Java on iPhoneに興味のある方はCydiaの導入をお勧めします。

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

JavaSysInfo - shows Java system properties of iPhone/iPod touch

I am evaluating JocStrap, Java Objective-C binding framework, developed by Jay Freeman (saurik). JocStrap+JamVM+GNU Classpath provides the unique standalone iPhone/iPod touch development environment. I'm so excited!

JavaSysInfo is my first Java-on-iPhone application using JocStrap. JavaSysInfo simply shows Java system information on iPhone/iPod touch.

Javasysinfo

If you are interested in this application, add my apptapp repository http://javaflavor.cocolog-nifty.com/apptapp/ to your Installer.app. JavaSysInfo will appear in the category Java.

If you want to manually install the application, download the application from the following link, copy it to your iPhone/iPod touch and expand it under /Applications directory.

Note that JocStrap applications, including JavaSysInfo, currently require JocStrap, UICaboodle, JamVM, GNU Classpath, GNU Classpath Tools, Apache APR, libffi and BSD Subsystem. These required softwares can be installed by adding Jay's repository http://apptapp.saurik.com/ to Installer.app. Also note this application may not work with the future version of JocStrap. I will continue to maintain so that it will work with the up-to-date version of JocStrap.

FYI: the package also includes source codes. You can freely use these source codes for any purpose. But we shall not be liable for any damage or data loss arising out of or resulting from your use of this software.

History:

  • 0.9.0. Initial version. (12/22/2007)
  • 0.9.1. Changed to work with JocStrap 1.0.2274-1. No new feature added. (12/23/2007)
  • 0.92. Fixed broken packaging about symlink. You can install the package from my repository http://javaflavor.cocolog-nifty.com/apptapp/. (12/30/2007)

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

Java SE 6 Developer Preview 8 for Leopard

AppleからようやくMac OS X 10.5(Leopard)向けのJava SE 6 Developer Preview 8が公開されました。しかしながら、今回のリリースはIntel版の64bit VMだけのようです。

Java SE 6 Developer Preview 8
Java SE 6 Developer Preview 8 is an implementation of Sun's Java SE 6 for Mac OS X v10.5.1 and later. This Preview includes Java SE 6 version 1.6.0_01. This Developer Preview does not change the default version of Java. This release is only for Mac OS X v10.5.1 and later, and should not be installed on earlier versions of Mac OS X. This release is for 64-bit Intel-based Macs only and cannot run on PowerPC-based or 32-bit Intel-based Macs.

残念ながら私の初代MacBookでは試すことができませんが、AppleがまだJava SE 6を提供するつもりがあることがハッキリしましたので、とりあえず安心しました。

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

iPhone/iPod touch用Java SE実行環境:JocStrapでJavaからUIKitが利用可能に

Jay Freeman (saurik)氏は、iPhone/iPod touch用Java SE環境(JamVM+GNU Classpath)で、GUIを含む各種Objective-CフレームワークをJavaから利用する事ができるJava Objective-CバインディングライブラリJocStrapを公開しています。

現在、iPhone用のアプリケーション開発ツールとしては、gccクロスコンパイラ、Python、Perl、Rubyなどがあります。しかし、iPhone/iPod touch単体でUIKitを使用したGUIアプリケーションを開発できるスタンドアロン開発環境は、現状JamVM+GNU Classpath+JocStrapの組み合わせだけです。

JocStrapを利用する場合は、以前のエントリ「iPhone/iPod touch用Java SE実行環境(JamVM+GNU Classpath)」に従ってsaurikのレポジトリを設定することで、Installer.appからインストールすることができます。なお、パッケージの依存関係には明示されていませんが、JocStrapはランタイム時にAPR、libffiおよびUICaboodleを必要としますので、合わせてインストールしておきます。

JocStrapのObjective-Cバインディングは、Mac OS X用のCocoa Javaフレームワークとは全く異なります。Cocoa Javaフレームワークは、Objective-CのクラスライブラリをJavaらしいプログラミングスタイルに合わせてデザインされたものです。一方、JocStrapはObjective-Cのクラスライブラリを機械的にJavaライブラリにマッピングしたものとなっているため、アプリケーションの記述スタイルはJavaのシンタックスでありながら、良くも悪くもObjective-Cライクなソースコードに近いものになります。例えば、NSAutoreleasePoolオブジェクトの初期化処理はObjective-Cでは、

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

のように記述しますが、これをJocStrapを使用してJavaで記述すると以下のようになります。

NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().init();

通常、Objective-Cにおけるオブジェクトの初期化はallocとinitの2つのオペレーションのペアによって行われますが、Javaの場合もデフォルトコンストラクタの後にinit()メソッドを実行する事になります。ここでJavaプログラマは、init()の戻り値を明示的にNSAutoreleasePoolでキャストしている点が不思議に思われるかもしれません。Objective-Cはコンパイラ言語でありながら、強いリフレクションの性質を持っており、initの結果として自分自身以外のオブジェクトを返すことが許されています。JocStrapのObjective-Cバインディングもこの性質を引き継ぐため、init()メソッドの戻り値もObject型で宣言されています。Javaは強い型付けの言語であるため、実際に返されるオブジェクトの型に合わせてダウンキャストが必要になるわけです。

また、Objective-CはSmalltalkと同じように、オブジェクトのメソッド宣言には名前付きパラメータ形式を採用しおり、同じ引数型の並びであってもパラメータ名が異なっていれば、メソッドのオーバローディングができるようになっています。

- (void)send:(id)mail to:(id)address;
- (void)send:(id)mail with:(id)signature; 

一方、Javaのメソッド呼び出しではパラメータに名前をつけない仕様であるため、Objective-Cクラスバイディング時のメソッドの衝突を避けるため、Objective-Cクラスにおけるメソッド名とパラメータ名を全て繋ぎ合わせたものをJavaのメソッドにマッピングしています。

public void send$to$(Object, Object);
public void send$with$(Object, Object);

また、Window Serverからのイベントメッセージを受け取るアクションメソッドには、@Messageアノーテションを付与する必要があります。

@Message
public void applicationDidFinishLaunching$(Object unused) {...}

上記のようないくつかのルールがありますが、Objective-Cの知識さえあれば、比較的ストレートにJavaでアプリケーションを記述することができます。現在のバージョンでは、UIApplicationMainクラスが自動検出できなかったために、ブートストラップのためのコードが若干醜くなってしまうようですが、Objective-CネイティブのHello Worldが、Java版のHello Worldに変換してきちんと動いているのは立派です。

まだまだ改善の余地が沢山あるJocStrapですがとても興味深いプロジェクトだと思います。

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

iPhone/iPod touch用Java SE実行環境:jikesも利用可能に

以前のエントリ「iPhone/iPod touch用Java SE実行環境(JamVM+GNU Classpath)」で紹介したJay Freeman (saurik)氏のレポジトリからjikesがインストールできるようになっています。

jikesはC++で実装されたJVMを使用しないjavac互換の高速Javaコンパイラです。先にも述べたようにJamVMにはJITがないため、ecj.jarを使用したjavacは非常に遅いのが問題でしたが、jikesの登場によってiPhone/iPod touch上でのJavaのコンパイルが非常に快適になります。

簡単なHello Worldなクラスでもjavacではコンパイルに40秒近くかかっていますが、jikesなら1秒足らずで終了します。

Jikesiphone

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

Java SE 6(SoyLatte) DPR3, NetBeans and Quaqua

Landon Fuller氏によるJava SE 6 (SoyLatte)のDeveloper Preview Release 3が公開されました。Threadクラスのプライオリティが有効になるなどコンパチビリティの改善がなされています。

また、Fabrizio Giudici氏のブログに書かれた設定を行うとNetBeans 6も利用可能になります。

上記の記述ではLAFがGTK Look & Feelのためあまり見栄えがよくありません。しかし、オープンソースで開発されているMac OS XライクなLAFを実現したQuaquaは試験バージョン4.1で早くもSoyLatteに対応しました。これを組み合わせると下図のようにかなりMacらしいGUIにすることができます。NetBeansでQuaqua LAFを使用するための設定はUser GuideのIDE Integrationを参考にしてください。

Soylattenetbeans

SoyLatteのAWT/SwingがX11ベースのため、メニューバーがウィンドウ上部に配置されてしまうのは仕方がないのですが、NetBeans側の実装の問題でQuitメニューとOptionメニューが現れません。おそらく、VMベンダではなくOS名で判定しているためだと思われます。

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

iPhone/iPod touch用Java SE実行環境(JamVM+GNU Classpath)

Jay Freeman (saurik)氏は、GNU ClasspathJamVMをiPhone向けにコンパイルしたバイナリを公開し始めました。自分でコンパイルする場合は、iPhone toolchainを使ってこちらの手順に従えばOKですが、Installer.appにsaurikのリポジトリを追加すれば簡単にバイナリをインストールできます。

iPhone/iPod touchでInstaller.appを起動し、右下のSourcesアイコンをタップして、http://apptapp.saurik.com/ をリポジトリに追加します。

Iphonejava1Iphonejava2

すると、Installer.appのカテゴリにJavaが現れますので、GNU Classpath、JamVM、GNU Classpath Toolsの順番でインストールします。

Iphonejava3

ここで注意ですが、これらのツールは全て/usr配下にインストールされます。特にGNU Classpathに含まれるクラスアーカイブが9MBありますので、ルートパーティション(disk0s1)に十数MBの空きがないとインストールできません。ルートパーティションを圧迫しないためには、予め以下のようにGNU Classpathがインストールされる/usr/share/classpathをセカンドパーティション(disk0s2)に移動してからGNU Classpathをインストールするとよいでしょう。

# mkdir -p /private/var/usr/share/classpath
# ln -s /private/var/usr/share/classpath /usr/share/classpath

また、上記ツールセットにはjavacの実装が含まれていませんので、Eclipse Projectのサイトからecj.jarをダウンロードし、これをCLASSPATHに含めることでjavacも使用することができます。以下に、javacのエイリアス定義の例を示します。

# export CLASSPATH=/usr/share/classpath/tools.zip:~/java/lib/ecj.jar:.
# alias javac='java com.sun.tools.javac.Main'

現在の実装ではAWT/Swingは使えず、JamVMにはJITが含まれないためjavacの実行がとても遅いのですが、jarコマンドをzip/unzipツールとして使用した場合は比較的実用的な速度だと感じました。iPhone/iPod touchでのJava実行・開発環境も徐々に現実的になりつつあることが実感できます。

Iphonejava4

以下の画面は、jetty (jetty-5.1.14)を実行してMobileSafari.appからアクセスしたところです。Term-vt100.appはホームボタンを押すとログインシェルを終了してしまうので、jettyを実行したまま、MobileSafariにスイッチするには、nohupコマンドを使ってjettyをバックグラウンドで実行する必要があります。javacがきちんと動作しているため、JSPのコンパイルも問題なくできていることが分かります。

Iphonejetty1

【追記 2007.12.10】 saurik氏のレポジトリURLが http://iphone.saurik.com/ から http://apptapp.saurik.com/ に変更になりました。今後はこちらを使用してください。なお、前者は後者のエイリアスだそうですので、既に前者で設定済みの方はそのままでも構わないそうです。

【追記 2007.12.11】 GNU Classpathの再インストールに失敗する場合は、Installer.appがアンインストールに失敗した/usr/lib/rt.jarのシンボリックリンクを手動で削除してから、再度インストールしてみてください。Installer.appがシンボリックリンクを削除できないのはバグのようです。

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

Landon Fuller氏、Mac OS X 向けJava SE 6の改良版Developer Preview Release 2を公開

前回のリリースから3日しか経っていないのに、早くも改良版のJava SE 6 DPR2が公開されています。

今回のリリースではMac OS X 10.4 Tiger/32bitもサポートされ、コミュニティからのフィードバックを受けたいくつかのバグフィックスがなされています。今回のリリースからはバイナリリリースも公開されていますが、このソースコード自体のライセンスがJRL (Java Research License)になっていることから商用には利用することができない点に注意してください。

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

Landon Fuller氏、Mac OS X 10.5 Leopard向けJava SE 6 Developer Preview Release 1を公開

依然としてAppleはJava SE 6に関して沈黙を守ったままですが、Landon Fuller氏がAppleとは独立にJava SE 6のDeveloper Preview Release 1を公開しました。

この実装はJava SE 6のFreeBSDポートのソースコードを元にMac OS Xへ移植されたもので、GUIの描画はAquaではなく、X11が使用されています。その意味では、SafariなどMac OS XネイティブのWebブラウザ上でアプレットの描画を行うことはできません。また、現在はIntelチップ上のMac OS X 10.5 LeopardとXcode 3.0でのみコンパイルが可能という制約があり、サウンド出力も未サポートです。

しかしながら、Intelチップ向けのhotspotが有効になっており、非常に高速で思った以上に完成度は高いです。

私がコンパイルしてみた環境は初代MacBookですので、コンパイルターゲットとしては32bitリリースビルドを選択してみましたが、全く問題なくJDK 6のバイナリが出来上がりました。全てをコンパイルするのにかかった時間は、私のMacBookで2時間半程度です。また、Landon Fuller氏のポートはOpenMotifに依存していますので、JDKのコンパイルの前にMacPortsでOpenMotifを予めインストールしておく必要があります。

なお、初期状態では日本語のフォントを正しく表示することができませんので、Linux版JDKの場合と同様にfallbackディレクトリにTrueTypeフォントのシンボリックリンクを置くワークアラウンドを行いました。また、日本語表示用のTrueTypeフォントは、MacPortsからsazanami fontをインストールして使用しています。

$ sudo port -v install sazanami-font

$ cd src/jdk6_devpreview_r1/control/build/bsd-i586/j2sdk-image/
$ cd jre/lib/fonts/
$ mkdir fallback
$ cd fallback
$ ln -s /opt/local/share/fonts/sazanami/sazanami-gothic.ttf
$ ln -s /opt/local/share/fonts/sazanami/sazanami-mincho.ttf

下のスクリーンショットは、出来上がったJDK 6を使ってSwingSet2を実行させたものです。

Swingset2

フォントのレンダリングの美しさはAquaベースのApple純正のJDKにはかないませんが、そもそもVMwareなどを使用する以外にMac OS XでJava SE 6の開発ができなかったわけですから、Landon Fuller氏の功績は大変大きなものです。それに、X11ベースでリモート表示可能なJDKがMac OS Xで利用可能になるというメリットも悪くありません。

現状では、Leopardにしか対応していませんが、Mac OS X 10.4 Tiger用のリリースも予定されているようですので、Mac OS X向けオープンソース版JDKの今後の発展が楽しみになってきました。

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

その他のカテゴリー

applescript | book | camcorder | development | english | iphone | ipod | java | linux | mac | solaris | 携帯