Shuichi Machida's Weblog

http://blogs.sun.com/machida/date/20080317 2008年 3月 17日 月曜日

[NetBeans 独り言] sout と打つように心掛けてみる。

先日 Pro NetBeans IDE 6 という本を購入して週末にじっくり読んでいたら、普段全然使っていなくて、でも試してみると実はかなり便利な機能が沢山あることに気づきました。

# IDEの機能の探索は他の勉強との兼ね合いで、自分の優先順位的には後回しになってしまうことが多いです--;

例えば「コードテンプレート」もその一つ。メニューから「ツール-> オプション」を選択して、「エディタ」の「コードテンプレート」タブを選ぶとテンプレート一覧が表示されるのですが、以前から「何だこの暗号みたいなものは」という感じで敬遠していました(もともと私はIDEのショートカットを覚えるのがそれほど好きではないのです--;)。


ただ、試してみるとこれが実に便利なんですよね。# まさに食わず嫌いとはこのこと。。

例えば、プリント文を書きたければ "sout" と入力して

<tab>を打つと次のように置き換えられます。

また、 "soutv" と入力して

<tab>を打つと次のように置き換えられます。

今までは コード補完機能を使って書いていたのですが、これからはコードテンプレートを使うように自らを強制しようと思います。

まぁ、省略名全部覚えるのは面倒なので、とりあえず

 sout
 soutv
 whilexp
 trycatch
 fori

ぐらいにしておきます。

# 省略名をざっと見た感じでは、覚えなくても、キーワードの途中で<tab>押せば何かに変換してくれそうなものが結構ある気がする。。よし、これからは適当に<tab>を打とう ;-)

http://blogs.sun.com/machida/date/20070515 2007年 5月 15日 火曜日

[JavaOne 2007 Report (6)] 5/10(木) Day-3

JavaOne もあっという間に 3日目に突入。前日無理しなかったおかげで何とか体調も

回復です。

この日は朝から 今回の JavaOne で SunSPOT と並んで個人的に楽しみにしている

NetBeans Platform のセッションがあるのでさらに気合を入れて臨みます。


o TS-3742: 「Modular Programming With the Netbeans Platform」

  朝イチの 9:35 から行われたこのセッションのスピーカーは、最近発売した

ばかりの NetBeans Platform 本、「Rich Client Programming」の著者である

Tim Boudreau と Jaroslav Tulach です。

Tim の方はスーツにネクタイとフォーマルな感じで、Jaroslav はポニーテイルに

ラフなスタイルと対照的な2人。

さすがに発売されたばかりとあって、スピーカー席の壇上に本を終始立てて置いて

宣伝しまくりです -- (こんなところでも宣伝を

さてセッションの内容ですが、非常にためになる内容でした。

主題は、メンテナンス性に優れたソフトウェアを作成したり、ソフトウェア

互換性の維持を容易にするための、モジュラープログラミングについて。

 - The NetBeans Platform/Module System

 - OSGi

 - Java Module System (JSR 277)

が挙げられていましたが、"API と SPI の分離" という観点での

NetBeans Platform に関する話題がメインでした。 

なお、セッション中でも Tim が紹介していましたが、Netbeans Platform 本の

最初の数章にこのセッションでも話にあったモジュールプログラミングに関する

内容が書いてあります。

  ...

  Chapter 2: The Benefits of Modular Programming

  Chapter 3: Modular Architecture

  Chapter 4: Loosely Coupled Communication

  Chapter 5: Lookup

  ...

 ということで私もこのセッション後に本を購入し、早速帰りの飛行機で Chapter 5 まで読破。

 # もっと前にこの本あればなぁ、、と思うぐらい役立ちます!

 

 

o TS-2656: 「JMX Who's Doing What」

  続いて参加したこのセッション。JMXです。「ちょっと遅れても大丈夫かな~」と

セッションの合間の時間を使って JavaOne グッズを買い漁ってから会場に向かった

ところ、何と超満員の立ち見まで!結局一番後ろの隅っこの方になってしまった。。

大失敗。

# み、身動きとれない。。横に座ってる人、大き過ぎ! 


 

 さて内容ですが、JSE 6 から導入された MXBeans の話など。JConsole 使っていろいろ

デモもしてました。JMX関連の Open Source Project としては、MX4JMC4J、jManager、OpenDMK が紹介されていました。

興味深かったのは Glassbox 。自動化されたトラブルシューティングツールだそうですが、

JMX 使っているみたいです。

あとは、JMX 2.0 (JSR 255) - これは JavaSE 7 で追加される機能ですね - の話題があり、

MBean サーバのカスケードやネームスペース、MBean定義用のアノテーションなどが紹介

されていました。アノテーション全盛です。

後半残り35分ぐらいは、Web Services Connector(JSR262)を延々と。。

WS-Management の話とか。

Web Services Connector RI は ws-jmx-connector project から入手できるとのこと。

 

o TS-2602: 「Deploying Java Platform, Standard Edition(Java SE) in Today's Embedded Devices」

 Java SE for Embedded なるカテゴリの製品があることを知ったことが最大の収穫。

セッションの内容は、組み込みデバイスに JavaSEを導入する際のステップ(対象デバイス

の要求定義、組み込みOSの選択、ライブラリの選択 etc.)の説明。40分弱であっさり

と終わってしまいました。。

o TS-1161: 「Straightforward Jini Network Technology」

 あまりの懐かしさに思わず予定を変更して参加--;

# Jini が発表された 1999年から2000年にかけて大学の卒業研究で Jini を使ったので。。

 内容は全くもって、初心者向けの内容。最初にスピーカーが「Jini について全く知らない

 人」と聞いたとき、会場の9割以上が手を挙げていたのには一抹の寂しさを。。

 このセッションの内容も、「実は Jini って情報も見つけにくいし取っ掛かりが悪い

 し、いろんなコンポーネントがあって分かりづらいけど、きちんと基本さえ抑えれば

 Jiniサービスの開発って実は Straightforward なんですよ」というもので、懇切丁寧

 に説明してました。

 ちょっと収穫は、Jini 1.1 以降本が出てないと思っていたら、結構最近 Jini 2 系の

 本が出ていたこと。2 になってからセキュリティとかいろいろ拡張されているので、

 本買って久しぶりにプログラムしてみようかなーと思った次第。

 Jini は面白いですよ! 

 ->  Jini Projects

 -> "Foundations of Jini 2 Programming"


o TS-9511: 「Using Ajax With POJC(Plain Old JavaServer Faces Components)」

 この日の注目セッションその2。スピーカーがあの Craig McClanahan ですから!

Struts McClanahan ですから。

# ちなみに、本人が発音したのを聞いた限りでは "McClanahan" はマクラナハンでも

# マクラナンでもなく、マクラニアンのようでした。。まぁ私の英語耳など当てに

# なりませんが。

 


このセッションでは、JSF、Ajax の基本についての説明のあと、

既存の JSFコンポーネントベースのアプリに Ajax の機能を追加するための Tips

について紹介していました。既存の、ということろがポイントで、同じAjaxの機能を

追加するにも JMaki などを使うのではなく、JSFコンポーネントに "onclick"や

"onchange" を追加する、非同期通信に XMLHttpRequest を利用するといったローレベル

なテクニックから、Ajax4JSF、Dynamic Faces といったフレームワークを使うハイレベル

なものまで紹介していました。

最近少し Ajax の実装とも疎遠になっていたので、かなり参考になりました。

気になるところとしては、

 - JSF 2.0 がまもなく JSR に

でしょうか。Ajax サポートなどが取り入れられるとのこと。


o BOF-3066: 「SwingLabs」

 デスクトップJava(Swing)開発者のコミュニティ SwingLabs のプロジェクトの紹介でした。

 - SwingX

 - SwingX-WS

 - TimingFramework

 - SwingWorker

その他、 

 - Beans Binding (JSR 295)

 - Swing Application Framework (JSR 296)

についても。

 SwingLabs は以前より岡崎さんから聞いていて、何だろなーと思っていたのですが、中々

取っ掛りがなく。。セッション聴いて良かった、という感じです!日ごろ Swing GUIアプリ

作っている身としては、このサイトをチェックしていなかったのはモグリみたいで

恥ずかしい--;

SwingLabs.org では プロジェクトのバイナリがダウンロードできますね。

これからいろいろ試してみようと思います。

Aerith のGUI、すごく Cool ですね。


o BOF-5122: 「JRubME Is JRuby on Java Platform, Micro Edition(Java ME): Making It Happen」

 この BOF は最後のQ&Aが最高。

内容としては、Symbian のエンジニアがスピーカーで、JRuby の実装(0.8.2)を

Symbian OS上のCDCで動作するようにとりあえずプロト的にポーティングして

みましたよ、というもので、一応 Sony P990 という機種でデモをしていました。

ただ、何より面白かったのが、JRuby 開発者の Charles NutterThomas Enebo

がセッションを聴いていたこと。ポーティングに際して 0.9.8 でなく 0.8.2 を

使ってたり、CLDC ではなく CDC だったり、Ruby のフル機能からいろいろ削ってたり

してたのが気に障ったらしく、Q&A タイムは Charles Nutter による質問攻め(という

より詰問)でした--;




http://blogs.sun.com/machida/date/20070514 2007年 5月 14日 月曜日

[JavaOne 2007 Report (4)] 5/9(水) Day-2 その1 - SunSPOT HoL

朝起きると体調が最悪--;

とはいえこの日は朝イチで SunSPOT の Hands-On Labs 。

しかもこの Hands-On、昨年の JavaOne でも大人気で満席になり、急遽追加で行われた

程の人気セッションらしいので、事前予約をしていない私は当日の空き待ちを狙って

早めに並ばなくては入れないのです。

ということで、フラフラになりながらも開始10分前に到着。何とか最後から2人目

で潜り込むことに成功!

 

# 会場はこのような感じです。100台ぐらいマシンが並んでいます。


 

120分間、与えられた課題を各自で進めていきます。スピーカーはいますが、基本的な説明を

した後は独習という形で、分からない事があったら会場にいるスタッフ(Proctor)の人に質問します。

さて今回の Hands-On は簡単に言うと 「SunSPOT 2台と Trackbot 1台を使って遊んでみよう」

というものです。SunSPOT はUSでは既に発売開始されていますが、日本ではまだ入手不可能なため

実物を見るのも触ってみるのも今回が初めてです。

 

# 今回はこれを使って遊びました(右側の大きいのが Trackbot、2つあるのがSunSPOTです)

 

なお、SunSPOT の開発は基本的に NetBeans IDE 上で行います。 プログラムのコーディング、ビルド、

デバッグ、そして SunSPOT へのプログラムの配備(インストール)といった一連の操作を NetBeans

上で実行できます。また、SunSPOT 間は無線通信ですが、PCからSunSPOTへのプログラムの転送

などの際には PC と SunSPOT をUSB接続します。

 

# 開発作業の様子(NetBeans とても便利です)

 


 

大きく5つの課題があったのですが、以下ではそれぞれ写真を交えて簡単に感想など。

1. SunSPOT 1台を使って、読み取った加速度計(Accelerometer)のx,y,z値に応じて3色LEDを光らせよう

プログラムはものすごく簡単です。クラスは1つ(CLDCのMIDlet)で、ほんの数十行。必要なソースコードはすべて

提供されているので、内容を確認してビルドし、出来上がったプログラムを SunSPOT に流し込みます。 

おぉ、動いた。ちょっと感動。。


# 上下に振ったり、左右に動かしたりすると SunSPOT 上部のLEDの色が変わります

# 写真だと単なる白にしか見えません--; 


 

2. SunSPOT 2台を使って、1台の SunSPOT が読み取った加速度計の値を(無線通信で)もう1台に渡して、3色LEDを光らせよう

課題1の応用です。だんだんと SunSPOT らしくなってきました。ソースコードは既にあるので NetBeans でビルドして

SunSPOT に流し込みます。今回もソースコードはいたって単純。

# ちなみに、それぞれの SunSPOT は 802.15.4 MACアドレスにより識別されます。

おおっ、動いた。リモートコントロールできて再び感動。。

 

# LEDの右端が緑になってます


 

3. SunSPOT と Javaのデスクトップアプリケーションを連携してみよう

今回は 2台の SunSPOT と、SunSPOT のアバターを表示する3Dデスクトップアプリケーションを使用します。

要するに、手に持った SunSPOT を動かした時のジェスチャーを3D上で表示し、連動させようというわけです。

今回も加速度計を使用します。

。。。


無事成功。
SunSPOT を回転させるとデスクトップ上の "SunSPOT" も回転します。

# 3Dデスクトップの図(黄色の矢印は下方向を指しています)

 

4. SunSPOT を Trackbot に装着して、動かしてみよう


Trackbot の登場です。

# ちなみに去年の Hands-On では Trackbot はなく、この前の3Dデスクトップまでだったそうです。


 

# こんな感じで、Trackbot のI/Oポートに SunSPOT を接続します。 

 

例によって SunSPOT に載せるプログラムは提供されています。

# プログラム中では Trackbot に対して次のようなコマンドを発行します

... 

forward(1000);

right(90);

forward(1000);

right(90);

forward(1000);

right(90);

forward(1000);

right(90);

...

早速手順に従って作業します。

そして Trackbot のスイッチを入れて床に置いてみると。。

 

Trackbot がぐるぐる回り出しました!!




5. SunSPOT を2台使って、Trackbot をリモートコントロールしてみよう

これは課題4の応用です。課題2と同様、SunSPOT の通信機能を利用して、Trackbot に取り付けた

1台のSunSPOT に対してもう1台のSunSPOT からメッセージを送り、制御しようというものです。

。。。

が、

その前までの課題にじっくり取り組みすぎた(プログラムをまともに読みすぎた)せいか

時間が足りなくなってしまいました--; 残念。

とりあえず、終わらせた人の所に行って見せてもらいました。。

ちょっとしたプログラミングでコレだけのことができるなんて、SunSPOT の可能性を感じさせますね。

。。。

作業中は体調のことも忘れて熱中したせいか、あっという間の2時間でした。

早く日本でも SunSPOT が入手できるようになるといいです!

ちょっと高価なオモチャですが--;(現在US では $550)

 

あと、この SunSPOT の開発でも NetBeans を普通に使いましたが、今回の JavaOne では

セッションのいたるところで NetBeans が使われているというのが凄く印象に残ってます

NetBeans さえマスターしておけば、JavaSE, JavaME, JavaEEはもちろん スクリプトやSOA、

SunSPOTのようなニッチなものまでありとあらゆる開発が統一した環境でできるようになります。

 

 

 

まだ使ったことがない!という方は、是非 NetBeans を試してみてください。

絶対に損はしないと思います。
 

Day-2  その2に続く

http://blogs.sun.com/machida/date/20070511 2007年 5月 11日 金曜日

[JavaOne 2007 Report (3)] 5/8(火) Day-1

少し更新が遅れてます--;

初日に張り切りすぎて体調を少し崩し(風邪ひきましたorz)、ここ2日程夜は安静モードに。。

ホテルの部屋が寒かったせいか、Tシャツ一枚で寝てたせいか、はたまた日頃の行いが

悪いせいか。。今日からリカバリします。

 

閑話休題。

 

JavaOne 初日は朝イチで Sun Microsystems, Inc による General Session が行われました。

会場は想像を遥かに上回る超大入り--; 開始前には DJ によるパフォーマンスもあり

朝っぱらから半ば強制的に気分も高揚。

#  超大入り


 

# DJ


こちらの内容については既に色々なメディアで報道されていると思いますが、

当日は

などが発表されました。

やはり JavaFX は、発表された瞬間のインパクトが凄かったです。JavaFX Script の

メイン開発者である Chris Oliver のブログで F3(Form Follows Function) という名前の

スクリプト言語が以前から紹介されていて、今回のJavaOne でもスケジュールにあった

ので注目していたのですが、まさかこれほど大々的なものとは。。

# ちなみに初日の発表後の Chris Oliver のブログのアクセス数がものすごいです。。

# 一夜にして有名人ですね。

Flex という強力なライバルはありますが、「スクリプト」「RIA」というまさに今が旬の

時流に乗った発表だと思います。

 

# 「興奮冷めやらない会場」の図


 

# 「デモは見た目が大事です」の図 

 

 

General Session の後はいくつかセッションを聴いたのですが、 先に午後に行われた Sun Microsystems, Inc. の

Technical General Session の感想などを。

トピックとしては、

  • JRuby (Ruby言語の 100% ピュアJava実装)
  • jMaki (AJAXベースのWebアプリケーションのための軽量フレームワーク)
  • Phobos (Javaプラットフォーム上で動作する軽量なスクリプト実行環境) 
  • NASA World Wind (NASA製3D地球儀ソフト)
  • F-16 Flight Simulator (DiSTI Corporation - リッチクライアント)
  • IRIS (Java AppletとWeb技術を使ったクールなオンライン画像ビューア)
  • JavaFX (JavaFX Script + JavaFX Mobile)

がありました。どれも興味深いのですが、NASA World Wind のデモはかなり Cool でした。

# Cool !! 


 

嬉しい事に、 サイトに行くと Java 用のSDK がダウンロードできます。ちょっといじってみると面白い

と思います(10日にアクセスした時には May 11 にはダウンロードできるようになるよ と

書いてありました)。確か、NetBeans 用のコンポーネントも提供されているという話

でしたので楽しみです。

# JavaFX !


 

さて、JavaOne 期間中は朝から晩まで興味深いセッション/BOFがぎっしりなのですが、

この日は「何が何でも SunSPOT !」ということで、SunSPOTづくし。

ちなみに、Sun SPOT とは Small Programmable Object Technology のことで、

    * Sun Labs の研究プロジェクト
    * 無線センサーネットワークアプリケーション用のプラットフォーム
    * 複数の SunSPOTによる無線メッシュ形ネットワークが構築可能
    * 各種センサーボード(温度センサー、加速度センサー、光センサーなど)を装着可能
    * Squawk Virtual Machine(Java VM) 搭載、Java ME CLDC 1.1 対応

などの特徴があります。

# これです


 

以下、セッション/BOFの感想など。

o TS-1780: 「Sun SPOTs in Action: 3D, Virtual Reality and Gaming」

  SunSPOTを取り付けたP5 Data Glove というゲーム用のグローブを使って3D仮想空間上の

 物体を操作するといったデモをしていました。Java3DJOGL の説明もありました。

 PCモニタ上の物体とリアルな動作が連動するようなデモは見ていて面白いです。

# Cool !


 

o TS-1519: 「All About Java Technology Based Robotics」

  MAX という Javaベースの Robotics Engine が紹介されていました。

   Robotics のプラットフォームとして Java を使うメリットに、

  • 簡潔さ
  • 利用可能なツールの多さ
  • エキスパートの多さ
  • ハードウェア独立性
  • 拡張性(JavaME、JavaSE、Java RTS)

 などを挙げていました。また、セッション中に、MAXを使った小規模から大規模までの色々なロボットの

 例やサンプルコードを見れたのが面白かったです。ただ、SunSPOTを使った例はあまりなく

 あくまで 「Java を使った」というところがメインでした。

 ちなみに紹介していたロボットのイメージのいくつかは Perrone Robotics 社のサイト(スピーカーがCEOの会社です)

  で見ることができます。 


o BOF-1692: 「Introducing the Sun SPOT and Sun SPOT Community: Java on Wireless Sensor Networks」

   "Sun SPOTs at work" ということで Project Black Box を紹介していました。

 全体としては 「Sun SPOT とは何?」という内容で(タイトルからして当然ですが)特に目新しいことは

 話していなかったのですが、複数台の Sun SPOT を通信させたり LEDを光らせたりするデモはそこそこ

 楽しめました。


o BOF-1891: 「SPOTBot: Turning a Sun SPOT Into a Rugged and Affordable Mobile Robot」

  SPOTBot の紹介でした。コレです。商標の関係から正式には TrackBot だそうです。

 デモでは、コレが実際にぐるぐる回ったりしたのですが、

  SunSPOT の使用例の一つとしてとても分かり易いし、見ていて楽しめますね。

 # ちなみに TrackBot は JavaOne のパビリオンの一角で販売してました。。

o TS-3160: 「Desktop Java Technology - Where We Are, Where We're Going」

 トピックとしては

  • JavaFX Script
  • JDK 6, 7
  • JavaFX Mobile
  • OpenJDK

  でした。色々話していたのですが、一番興味深かったのが JRE の話です。

 現状の問題点として

  • 起動時間(Coldstart)
  • インストール時間
  • JREソフトウェアの検出とインストール

 を挙げていて、それに対する解決策は

  • Quickstarter
  • Kernel (Core JRE) とその他のライブラリの分離
  • Deployment Toolkit

  そして、まもなく Consumer JRE Release としてこれらのアップデートを含んだJREがリリースされる

 予定とのこと。


o TS-1548: 「Search Inside the Music - Using Signal Processing, Machine Learning, and 3D Visualizations to Discovey New Music」

 このセッションはかなり期待していましたが、それに違わずとても面白かったです。

 内容はSITM の紹介とデモでした。SITMは一言で言えば音楽検索技術なのですが、従来のタグ付け

  による分類などと違って曲から抽出された Pitch(音の高さ)、Timbre(音色)、Rhythm(リズム)といった

 特徴から分類することで「似た曲の判定」ができるようになるとのこと。

 応用として音楽ダウンロードサイトにおける「Music Recommendation」を挙げていました。

  しかもこのSITM、技術自体も面白いのですが、何と言ってもデモがクール!検索結果を

 3D 空間上に表示するのです。

# ?? 

 

。。。これは忘れてください。以下のサイトにすばらしいスナップショットが掲載されています。

  - Search Inside The Music Overview

 あと、デモでは実際に検索結果の音楽を流したりもしたのですが、似ているようで微妙に違う

 音楽が連続して流れると、結構笑えます。 まぁ、精度はまだまだ、という気もしました。。

 

http://blogs.sun.com/machida/date/20070508 2007年 5月 08日 火曜日

[JavaOne 2007 Report (2)] 5/7(月) Day-0 NetBeans Day

朝から思わず「暑っ!」と叫んでしまいそうな好天の中(半袖1枚でも十分です)

いよいよ CommunityOne の開幕です。

# 午前8時過ぎだというのに日差しがキツい--; おまけに時差ぼけに寝不足で

# 体力的にもキツい --;;

 

 

SDC の "JavaOne 2007 Photo Report" でも 当日の様子がたくさんの写真と共にレポート

されていますが、オープニングに行われた全体の General Session では Tim O'Reilly 氏が登場。

"Network Effect"、"web 2.0"、"Community" などをキーワードに 、craigslistflickrdel.icio.us
 last.fmPANDORA といったコミュニティも話題に上りました。

その後、Rich Green、Ian Murdock、Tim Bray を交えてのパネルディスカッション。

web2.0に関連して、Tim O'Reilly 氏から 「サンに対する質問」という形で熱い議論が

交わされました。

 # 左から Tim O'Reilly、Rich Green、Ian Murdock、Tim Bray


Genera Session 終了後は、終日 NetBeans Day トラックに参加してきました。

こちらの Opening は Jonathan Schwartz と Rich Green の General Session からスタート。

Jonathan が登場する辺り、サンの NetBeans に対する力の入れようがお分かりいただけると

思います。 NetBeans今後もますます期待大です!


# Jonathan を激写。右端が Rich Green (どこ?)

# もう少しまともな写真を載せましょう。はい、すいません--;

 

 

午前中は General Session 2つ聴いたところで終了。 

昼飯時には、"Lunch with the Java Posse" というセッションが行われました。

このセッションは言わば「ラジオの公開録音」といった趣で、Tor Norbye(Sun)、Carl Quinn(Google)、

Dick Wall(Google)、Joe Nuxoll(Apple)という4人のPosse による"トーク" が行われました。

掛け合いも絶妙で、思わず爆笑なネタも満載でした(例えば、 "tHE cAPS LOCK kEY mUST dIE"

とか。。)

なお、以下のサイトにアクセスすると、この日のセッションの内容やその他のJavaの最新トレンド

に関するトークを"聴く"ことができます。

ご興味を持たれた方は、是非アクセスしてみてください!

 

そして後半はテクニカルセッションの時間。

私は NetBeans 6.0NetBeans Mobility(SunSPOT含む) 、JRuby という個人的にも

今回の JavaOne で注目しているテクノロジに関するセッションに参加してきました。

会場がGeneral Session と同じ場所(広い)、概要的な内容ということで、全体的に

デモが中心でした。これらについてはJavaOne でも沢山のセッションが組まれて

いるため、今日はイントロといったところでしょう。

 

# SunSPOT を取り付けたRobot のデモ風景

 

 

それでも、NetBeans に対する関心の高さ、開発者達の熱気は直接肌で感じることが

できました(広い会場にもかかわらず8割方入ってました)。

ここ4年間で NetBeans コミュニティのメーリング リストの購読者も急増しており、

2007年4月時点では何と500,000人近くに達するとのこと。

JRuby は予想通り、とても注目を集めてますね。今回のJavaOne の最大の目玉のひとつあることは間違い

ないです。Java開発者にとっても、今が 動的言語 を学ぶとてもいい機会だと思いますので、

チェックされてみてはいかがでしょうか? 私もここ数ヶ月(趣味で)熱中してますが、仕事で使わなくても、

試してみる価値はあると思います。


 

http://blogs.sun.com/machida/date/20070507 2007年 5月 07日 月曜日

[JavaOne 2007 Report] 5/7(月) いよいよ NetBeans Day 開幕です!

2007年も JavaOne の季節がやってきました!今年は 5/8~11 の4日間、San Francisco の

Moscone Center で開催されます。

今年は私もサンの Javaエバンジェリストグループ の一員として、山口さん、藤井さんをはじめ

大渕さん岡崎さん荻布さん達と共に、念願かなって初めて JavaOne に参加させていただける

ことになりました。

# 思えば入社以来 JavaOne 行きたいと思い続けて苦節5年、長かった。。--; 

このブログを通して、JavaOneの雰囲気や見所、最新の技術トピックなどについて、情報を共有

できればと思います。

 

ということで、今 San Francisco に来ています。 実は、JavaOne 自体は 5/8 開幕なのですが、

前日の 5/7 にはオープンソースコミュニティ向けのイベント、 CommunityOne が開催されます!

このイベントでは GlassFishOpenJDKOpenSolarisWeb 2.0 といった、トピックごとのセッションを

集めた興味深いトラックが沢山あり、できるなことなら全部のトラックに参加したい!と思ってしまう

ぐらいなのですが、残念ながらそうもいきません --;

そこで今回は、泣く泣くトラックを1つに絞って NetBeans Day に参加します!

一時期は機能でも人気の面でも Eclipse の後塵を拝している感のあった NetBeans ですが、Webアプリケーション

エンタープライズアプリケーションモバイルアプリケーション、etc. 開発のためのIDEとして、

またリッチアプリケーションプラットフォーム(RCP)として、もの凄い勢いで進化を続けています!

そして、今回の NetBeans Day における最大の目玉は何と言っても JRuby!JavaとRuby が手を

組んで(JRuby)、さらに Ruby と NetBeansが手を組んだときに何が起こるのか、何が起こせるのか、

Charles Nutter、Tomas Enebo を始めとするJRuby開発者の声に全力で耳を傾けたいと思います

(現時点でも NetBeans IDE の次期バージョンである 6.0 の 最新Preview版にモジュールをインストール

すれば IDEによるRuby構文の補完機能、JRuby on Rails といった機能を試すことができます)。

今後 Java とRuby(及びその他のスクリプト言語)の関係はどうなっていくのか、またJavaの環境に

動的言語を取り入れることによって開発スタイルはどのように変わっていくのか、JDKにおける Script

のサポートとあわせて注目したいテーマです。

さて、NetBeans Day ではその他にも、NetBeans の次期バージョン 6.0 での最新機能や

世界で最もクールな (Drag & Dropによる) Swing GUI開発ツールの1つである Matisse(マチス)

に関するセッション、NetBeans による JavaME開発、Project SunSPOT など、見所満載です。

 

# もちろん、Jonathan Schwaltz、Rich Green、そして James Gosling のGeneral Sessionも必聴です!

 

余談ですが、どうやら NetBeans Day 参加者のうち先着400名には何と5/4に発売されたばかりの

NetBeans Platform 本がプレゼントされるらしいです。

 

 

これから NetBeans Platform(リッチクライアントプラットフォーム)を始めてみようかな、とお思いの方には

この本を是非オススメします!(NetBeans Day に参加しないと無償で入手できないのは残念ですが--;)

。。。

San Francisco の街はJavaOne ムードも高まっているようです。



JavaOne 会場も準備万端?


 




http://blogs.sun.com/machida/date/20070321 2007年 3月 21日 水曜日

[NetBeans] Tips: .obj ファイルをCVSの管理対象にしたいのですが。。

ちょっとした大きさのアプリケーション作成時に欠かせないものといえば「バージョン管理」。

ということで、私も普段から NetBeans組み込みのCVS を利用しているのですが、最近

NetBeans Platform ベースのアプリを開発していて少し困ったことが。。

それは、

「.obj という拡張子を持つファイルがCVSの管理対象にできない!

(少なくともそれらしい機能はメニューに見当たらない)

ということ。ファイル自体が "Disable" (灰色)表示され、CVSのメニューも全く選択できない

ようになってしまっています--; (下図)



# ちなみに、「普通の」ファイルはデフォルトで管理対象になっており、逆にCVSの

# 対象から外したい場合は上のメニューの「無視(I)」を選ぶとそのディレクトリ内

# に .cvsignore ファイルが生成され、エントリが追加されます。

 

元々CVSでは以下のような拡張子を持つファイルはデフォルトで管理対象から外される

ため、IDEのデフォルト設定としては至極当然なのですが。。

 

 
RCS     SCCS    CVS     CVS.adm
RCSLOG cvslog.*
tags TAGS
.make.state .nse_depinfo
*~ #* .#* ,* _$* *$
*.old *.bak *.BAK *.orig *.rej .del-*
*.a *.olb *.o *.obj *.so *.exe
*.Z *.elc *.ln
core


「無視されるようなファイルをなんで管理対象にしたいの?」という疑問が当然

想定されますが、作成しているアプリはたまたま Java 3D API を使っていて、3Dデータの

形式の一つにも OBJ(.objファイル)というのがあるのです。。


前置きが長くなりましたが、とりあえずの解決手順は以下のとおり:

  1. .cvsignore ファイルがファイルツリー上に表示されるようにする(デフォルトでは表示されません)
  2. 管理対象にしたいファイルを含むディレクトリ内に.cvsignoreファイルが存在しない場合は、新規に「空ファイル」として作成する
  3. .cvsignore ファイルを編集して、以下の一行を記述
 !

1. .cvsignore ファイルの表示

 メニューの「ツール」->「オプション」を選択し、「詳細オプション」ボタンを
クリックします。

 詳細オプションダイアログが表示されるので、オプションの

「IDE 構成」->「システム」->「システム設定」を選択し、プロパティの中の

「無視するファイル」の右側のボタンをクリックします。最後に、表示されるダイアログ中の

 "cvsignore" という記述(その右側の"|"も)を削除します。

  

2. (オプション) 新規 .cvsignore ファイルの作成

 以前に「無視する(I)」という作業をそのディレクトリ内で実行している場合は自動的に

 作成されています。ない場合は、メニューの「ファイル」-> 「新規ファイル」を選択し、

 カテゴリの「その他」で「空のファイル」 を選んで .cvsignore という名前のファイル

 作成します。

 

  .cvsignore ファイルが表示され、編集できるようになっています。

 ただ、この時点ではまた .obj ファイル(上の例では model.obj ファイル)は "Disable" 状態

 (灰色)です。

3. .cvsignore ファイルの編集

 .cvsignore に以下の一行を記述して、デフォルトで無視される拡張子の指定を無効化します。

 

 !

 

 ファイルを保存すると model.obj ファイルの表示が緑色になり、CVSの管理対象になったことが分かります。
 


 

通常のファイルと同じように、CVSにコミットできるようになりました。

 

めでたしめでたし。

 

最後に。。

どなたかもっと簡単な方法をご存知でしたら教えてください~。

# できればメニュー一発で変更したい。。.cvsignoreファイルも表示したくない。。


http://blogs.sun.com/machida/date/20070316 2007年 3月 16日 金曜日

[NetBeans Platform] 配布用zipファイルの etc ディレクトリに設定ファイルを入れたい

さて、無事JAXBの問題も解決してXMLベースの設定ファイルが完成しましたが。。

配布用zipファイル(しかも<アプリのベースディレクトリ>/etc の下)に

この設定ファイルを含めるにはどうしたらよいものかとちょっと思案。

 

NetBeans の通常のJavaプロジェクトの場合は build.xml ファイル中で

オーバーライド可能なターゲットが多数定義されているので、特定の時点(cleanの前、

compileの後、など)で実行したいコマンドをこれらのターゲット中に記述してあげれば

よいのですが。
 

ちなみに、単体でのJAXBテスト時には  build.xml に以下のような記述を追加して、

JAXBの xjc の呼び出しを自動化しました。

    ...

    <property name="schema.dir" value="schema" />
    <property name="jaxb.lib" value="lib" />
    <property name="package" value="myapp.generated" />
    <property name="output.dir" value="myapp/generated" />    
    
    <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
        <classpath>
            <fileset dir="${jaxb.lib}" includes="*.jar" />
        </classpath>
    </taskdef>

     <target name="-pre-compile">
        <echo message="Compiling schema files..." />
        <xjc schema="${schema.dir}/MyConfig.xsd" destdir="${src.dir}" package="${package}">
            <produces dir="${src.dir}/${output.dir}" includes="**/*.java" />
        </xjc>
    </target>
    
    <target name="-post-clean">
        <echo message="Deleting the generated files..." />
        <delete>
            <fileset dir="${src.dir}/${output.dir}" includes="**/*.java" />
        </delete>
    </target>

   ...
 


そこで、NetBeans Platform ベースのプロジェクトのbuild.xml にも、etc ディレクトリ

に設定ファイルをコピーする処理を記述するタスクを追加できそうだなというのはわかる

のですが、通常のJavaプロジェクトと同じターゲット名で試してみると、残念ながら実行されず。

(まぁ当然といえば当然ですが。)

 

そのあとREADMEを読んで試行錯誤を何回か繰り返し、最終的にはモジュールスイートプロジェクトの

build.xml にこんな感じで 記述するとうまくいきました。

 <?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
<!-- for some information on what you could do (e.g. targets to override). -->
<!-- If you delete this file and reopen the project it will be recreated. -->
<project name="MyAppt" basedir=".">
    <description>Builds the module suite MyApp.</description>
    <import file="nbproject/build-impl.xml"/>

    <property name="schema.dir" value="etc" />

    <target name="build-launchers" depends="suite.build-launchers">
        <copy file="${schema.dir}/MyConfig.xsd"
            tofile="${build.launcher.dir}/etc/MyConfig.xsd" />
        <copy file="${schema.dir}/MyConfig.xml"
            tofile="${build.launcher.dir}/etc/MyConfig.xml" />

    </target>    
</project>


 あと、xjc も自動化したかったので、こちらはJAXBを使っているモジュールプロジェクトのbuild.xml

に以下のように記述。

     ...

    <property name="src.dir" value="src" />
    <property name="schema.dir" value="schema" />
    <property name="jaxb.lib" value="lib" />
    <property name="package" value="myapp.generated" />
    <property name="output.dir" value="myapp/generated" />    
    
    <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
        <classpath>
            <fileset dir="${jaxb.lib}" includes="*.jar" />
        </classpath>
    </taskdef>

    <target name="init" depends="harness.init">
        <delete>
            <fileset dir="${src.dir}/${output.dir}" includes="**/*.java" />
        </delete>
        <xjc schema="${schema.dir}/MyConfig.xsd" destdir="${src.dir}" package="${package}">
            <produces dir="${src.dir}/${output.dir}" includes="**/*.java" />
        </xjc>
    </target>

 

 めでたしめでたし。

 

[NetBeans Platform] とJAXBとNullPointerException

つい先日 NetBeans Platformベースのアプリを作成していて

XMLベースの設定ファイルを作りたくなったので、JAXB

実装していたときのこと。

いきなり本チャンのアプリ上に作り込むのも危険なので

とりあえず新規Javaプロジェクトを作成してプロトタイピング。

無事単体テストも終了し、いざ本アプリに機能を実装してテストしてみると。。

 

う、動かない。

しかもログを確認してみると、一行目の初期化のコードで NullPointerException

を盛大に吐いてコケてる。。なぜこんなところでヌルポインタが。。

 JAXBContext jc = JAXBContext.newInstance( "myapp" );     // ここ
 

単体では動いたのにーと叫びつつログを丹念に見てみると、ClassCastがなんたらとか

出てたので、NetBeans Platform はクラスローディングの仕組みが特殊であることに

思い当たり、ひょっとしてクラスローディング関連かなーと推測。

ということで、JAXBのFAQを調べていると、こんな項目が:

 Q. Why can't I cast the unmarshalled object into generated type.

 

読んでみると、現象は違えどどうも原因は同じっぽい。。

そこで、上記のソースコードを以下のように修正。

 JAXBContext jc = JAXBContext.newInstance("myapp", this.getClass().getClassLoader());

おおっ、動いた。


教訓: 

NetBeans Platform ベースで開発していると、 クラスローディングの関係で時々

今まで見たこともないような奇怪なエラーに遭遇することがあります。 


http://blogs.sun.com/machida/date/20070315 2007年 3月 15日 木曜日

[Netbeans Platform] 作成した配布用zipファイルに含まれる起動スクリプトが。。

NetBeans Platform を使っていて最近ちょっと困ってること。

それは、、

Windows 版のNetBeans IDE 5.5(build 200612070100)で作成した NetBeans Platform

の「配布用zipファイル」をUNIX系OSで展開してアプリを起動しようとすると、

起動スクリプトがコケる

こと。普段はSolaris 上で開発しているので問題ないのですが、現場に行ったときなどは

ノートPC(Windows)上でバグ修正して その場でアプリを入れ替える、といったケース

もあるので、結構困ります。

 

問題の起動スクリプトをviでのぞいてみると、 行末に[^M]が。。

なぜ(多分UNIXプラットフォームで使用することを想定しているであろう)スクリプト

の改行コードにWindows系の[CR]+[LF]を使ってるんだ~。

と心の中で叫びつつ、 

とりあえず以下のファイル中の[^M]をすべて削除してみると、起動するようになることは確認。

 
  <base_dir>/bin/myapp
  <base_dir>/etc/myapp.conf
  <base_dir>/platform6/lib/nbexec
   # ここではアプリの名前は myapp、<base_dir>はアプリのベースディレクトリとします
 

 


 

ご参考までに、vi で [^M] を削除(置換)する際には以下のコマンドが使えます。

  :%s/^M//g
  (^M の入力は [Ctrl]+[V] 、[Ctrl]+[M])

 

とはいっても根本的な解決にはなっていないので軽くMLなど検索してみても

解決策はヒットせず。

時間があるときにもう少し調べようと思います。

# ひょっとして改行コードの指定ができるとか。。



Valid HTML! Valid CSS!

This is a personal weblog, I do not speak for my employer.