Archive for 1 月, 2009

Autoboxing って便利だけど・・・

木曜日, 1 月 29th, 2009

今さらですけど JDK1.5 から採用された Autoboxing / Auto-Unboxing って便利ですよね。

しかし Effective Java 第2版を読みかけて、この便利な機能のおかげで知らないうちにとんでもないミスを犯す可能性があることを知りました。

本に載っていたコードはたった一文字、小文字であるべき所を大文字で記述してしまったため恐ろしく遅いプログラムとなってしまうということです。

私のような未熟者がやりそうなことです。

以下に Effective Java に載っていたサンプルプログラムを元に少し変更したコードを載せます。

package dotubo;

public class Main {

    public static void main(String[] args) {      
        System.out.println(“テスト開始\n”);
        Main m = new Main();
        m.slow();
        m.fast();
    }

    private void slow(){
        Long sum = 0L;
        for(long i = 0; i < Integer.MAX_VALUE; i++){
            sum += i;
        }
        System.out.println(“slow : ” + sum);

    }

    private void fast(){
        long sum = 0L;
        for(long i = 0; i < Integer.MAX_VALUE; i++){
            sum += i;
        }
        System.out.println(“fast : ” + sum);
    }

}

これはコンパイルも実行もできます。

ただし、slow() メソッドと fast() メソッドの処理時間が比べものにならないくらい違います。

slow() メソッドと fast() メソッドは見てのとおり微妙に一文字だけ肝心な所が違いますね。

たった一文字の間違いのために意図しない Autoboxing が働いて不必要な Long インスタンスを作ってしまいます。

NetBeans のプロファイラでこのプログラムのパフォーマンスを確認してみました。

1

間違っている slow() メソッドは 30224ms かかっているのに対して正しい fast() メソッドは 5561ms しかかかってません。

この違いはもの凄く大きい!です。

便利なものは正しく使わないとどつぼにはまるということですね。(^-^;

Hatena タグ:

UML パレット 認識できないファイル 続報

日曜日, 1 月 25th, 2009

UML パレットの部品が「認識できないファイル」になる時があります。

Windows Vist 64bit

JDK1.6u11 32bit

NetBeans 6.5 にて Echo2 Support プラグインをインストールするとそうなります。

UML プロジェクトを開いてパレットを表示した状態で Echo2 Support プラグインをインストール完了した時点で認識できないファイルに変わります。(^-^;;;

NetBeans を何回か再起動するとちゃんと表示するので不思議だったのですがこれですっきりしました。

私は貧乏性なので使いもしないプラグインを適当にインストールしていたのでこんなめずらしい現象に遭遇しました。

私的回避法は使わない物は入れない方がいい!(ヲヒ

あっ、これって100%そうだとは限りませんね。

他に入れているプラグインとの相性もあるかもしれませんから。

気になる方は試してみてくださいね。

とりあえず夜勤なので眠らなくては・・・ ってもう、昼じゃん(爆

Hatena タグ:

クラス図を追加してみる

金曜日, 1 月 23rd, 2009

NetBeans の UML ツールを適当にいじってます。

昨日の Factory Method パターンを試したものに BD クラスと BD_Factory クラスを追加してみます。

今回は自分でクラス図に要素を追加し、BD クラスと BD_Factory クラスの関連も描画したいと思います。

クラス図に BD クラスを追加してみます。

パレットの[ 基本 ] よりクラスを選んでクラス図に追加します。

1

追加された要素にクラス名を記入します。

名前のところをダブルクリックして編集可能にし入力します。

2

BD とクラス名の入力が完了すると操作に自動で public コンストラクタが追加されます。

3

次に DISC インターフェイスを実装します。

BD 要素を選択し、ポップアップされるアイコンの集まりの中から実装アイコンを選択し DISC インターフェイスまでドラッグします。

4

5

無事に DISC インターフェイスの実装が完了すると

DISC から再定義された操作
public String play()

という操作が自動で BD 要素に追加されます。

6

BD_Factory クラス要素も同様にクラス図に追加します。

7

BD_Factory クラスは DISK_Factory クラスのサブクラスになります。

今度は BD_Factory 要素を選択し、汎化アイコンを選択、そして DISC_Factory 要素までドラッグします。

8

9

汎化操作が完了すると

[ 再定義するメソッドを選択 ] ウィンドウが表示されます。

今回は抽象メソッドだけ実装します。

10

これまでの操作で下図のようにクラス図が作成されました。

11

それではクラス図より Java コードを生成してみましょう。

BD クラスと BD_Factory クラスの要素二つを選択し、右クリックします。

ポップアップメニューより [ コードを生成... ] をクリックします。

12

[ コードを生成 ] ウィンドウが表示されますので確認して [ 了解 ] ボタンを押します。

13

新たに BD クラスと BD_Factory クラスの Java ファイルが自動生成されました。

14

BD クラスのコードを下記のように編集します。

15

BD_Factory クラスも編集します。

16

最後に起動クラスの Main も。

17

これで新たにファクトリが追加されました。

ちゃんと動くか確かめてみます。

それではプログラムを実行してみましょう。

18

ちゃんんと動きましたね。(^^)

クラス図を確認すると BD_Factory 要素から BD要素への依存関係が描画されてませんね。

リバースエンジニアリングを適用しても自動で描画されなかったので手動で描画してみます。

19

BD_Factory 要素から依存アイコンを選択します。

31

BD要素へドラッグします。

32

点線矢印を選択し、右クリックでポップアップメニューより [ プロパティー ] をクリックします。

[ Dependency - プロパティー ] ウィンドウが表示されます。

[ ステレオタイプ ] の右端の [ ... ] ボタンを押します。

33

編集画面が出ますので [ 名前 ] を creates として [ 了解 ] ボタンを押します。

34

これで BD クラス要素と BD_Factory クラスの依存関係も描画されました。

20

やっぱり便利ですね(^^)

UML を覚えて他の機能も試したくなります。

でも、時間が足りないですorz

ゆっくり遊びながらマイペースでいきますか。。。

 

注意 : 昨日と今日取り上げた NetBeans の UML に関する記事は私が直感的に「このように操作するんだろうなぁ」と勝手にやったことです。

間違いや、もっと簡単な操作方法があるかもしれませんのであしからず・・・

Hatena タグ: ,,

UML のデザインパターンを適用を試してみる

木曜日, 1 月 22nd, 2009

NetBeans の UML クラス図作成に「デザインパターンを適用」ってのがあります。

ちょっと面白そうなので試してみました。

シンプルな Factory Method パターンで試してみます。

Java プロジェクトを新規に作成します。

1

2

次に UML プロジェクトを作ります。

[ カテゴリ ] から UML を選択し、[ プロジェクト ] には Java プラットフォームモデルを選びます。

3

適当に設定します。

4 

[ 図を新規作成 ] でクラス図を選択します。

今回はデザインパターンを使用するので図名はこのままで

5

[ モデル ] を右クリックし [ デザインパターンを適用 ] をクリックします。

6

デザインパターン適用ウィザードにそって必要事項を入力していきます。

7

GoF Design Patterns の Factory Method パターンを選びました。

8

9

要素を次のように設定しました。

ここで解るように平凡な Factory Method パターンが作られることが想像できます。

10

ここで [ クラス図の作成 ] チェックボックスにチェックをいれます。

デザインパターンを適用するクラス図の名前を入力します。

11

確認して [ 完了 ] ボタンを押します。

12

以上の操作で Factory Method パターンのテンプレートが作成されます。

13

では、interface の操作を作成します。

DISC 要素を選択し、右クリックで [ 操作を作成 ] をクリックします。

14

下図のように編集可能となります。

選択されている編集項目は太字で表示されます。

下図はメソッドの名前が編集可能となってます。

15

名前を play としました。

16

同様に型を編集します。

17

操作の編集が終われば下図のようになります。

CD 要素に[ DISC から再定義された操作 ] が自動作成されました。

18

それでは 作成したクラス図から Java コードを自動生成させましょう。

UML プロジェクトを右クリックして [ コードを生成... ] をクリックします。

19

[ コードを生成 ] ウィンドウが表示されますので [ ターゲットプロジェクト ] に最初に作った Java プロジェクトを指定します。

あとは必要に応じて入力します。

[ 了解 ] ボタンを押すと Java ファイルが自動生成されます。

20

21

自動生成された Java ファイルは以下のものです。

22

23

24

25

Main クラスのファイルは最初の Java プロジェクトで作られたものです。

26

それでは CD クラスのコードを下記のように編集します。

27

次に CD_Factory クラスも。

29a

最後に起動クラスの Main クラスを。

30

これでシンプルな factory Method パターンができあがりました。

それでは実行してみましょう。

31

ちゃんと動きましたね(^^)

32

クラス図のレイアウトを自動レイアウトさせてみます。

[ 階層型レイアウト ] アイコンをクリックします。

33

レイアウトの警告がでます。

問題なければ [ はい ] ボタンを押します。

34

自動レイアウトされました。

うーん、、、ちょっと微妙かも(^^;

35 

私は素人なので遊びで使ってるぶんには面白い道具の一つなのは間違いないです!

Java のようなオブジェクト指向プログラミング言語と UML は相性がいいようですね。

UML を良く知らない私でもクラス図があるとプログラムがどういう作りか解りやすいと思う。

今回はクラス図から Java コードを作ったが、NetBeans のUML ツールは Java コードからクラス図の作成も可能なんですよね(^^)

本当に面白い便利なツールです!

でも、ちょっと気になるのは、同じプロジェクトを OpenSolaris 上の NetBeans でつくったら CD_Factory から CD の <<Creates>> の表記がでなかった。

021

なんでだろう? まぁ、いいか(^^;

面白いので UML の知識が増えたらまたいじってみよう(^^)

Hatena タグ: ,,

認識できないファイルって・・・

水曜日, 1 月 21st, 2009

NetBeans の UML ツールを UML を解らないのに適当にいじっていて気がついた。

パレットの部品が「認識できないファイル」になる時があります。

1

NetBeans を何回か再起動させると直ります。

なんでだろう?

2

日本語化してない別の PC でも同じ症状が出てます。

ってことはこういうものなんだろうか?

Vista と NetBeans は相性が悪いのかな?

いや、UML 解らないのに触っちゃ嫌って NetBeans に私が拒否されてるだけなのかもしれないorz

Hatena タグ: ,

この魚は何?

日曜日, 1 月 18th, 2009

Windows 7 Beta をインストールして驚いたこと。

デスクトップに変な魚が・・・

11

UML プラグイン日本語化

日曜日, 1 月 18th, 2009

NetBeans UML プラグインを日本語化しようと 日本語化 zip ファイルをダウンロードし、展開しようとしてつまづいた。

1

昨日の出来事です。

今日は仕事が早く終わったので試しに jar コマンドで解凍してみました。

2

なんと! 解凍できました(^^)

Windows Vista 付属の zip 解凍ツールって・・・ 作りがあまいのかなぁ・・・

なにはともあれ、無事に日本語化できました(^^)

感謝!感激です!

以前、UML を試した時のと比べると日本語にちゃんとなってますね。

NetBeans の UML

3

ただ、[ モデルレポートを生成 ] だけはいただけませんね。

「すべての囲んでいる図」 って(^^;

4

英語版ではこうなってます。

私は英語が解らないのでどう訳せばいいのか見当もつきません。

5

日本語化 zip ファイルの提供ありがとうございました。

英語が解らない私には大変ありがたいプレゼントとなりました。(^^)

Hatena タグ: ,,

NetBeans が Java Tool 部門で優勝

土曜日, 1 月 17th, 2009

Winners of the Developer.com Product of the Year 2009 で NetBeans が Java Tool 部門で優勝してます。

この他にも Development Tool , Development Utilities , Wireless/Mobile , Open Source 部門でも!

日本では Eclipse が人気のようですが外人さん達は NetBeans を高く評価しているようですね。

ちなみに UML、Maven プラグインの日本語化も予定されているようです。

昨日の NetBeans ML でアナウンスのメールが流れていました。

Maven は使ったことが無いし知識もゼロだから使う予定はないけど UML はちょっと興味のあるツールなので日本語化は助かります。

早速、日本語化 ZIP ファイルをダウンロードして使おうとした。

だけど Windows Vista で ZIP ファイルを展開できない(><)

こうなったらいったん UML をアンインストールして日本語化された UML プラグインをダウンロードして入れ直そうかと思った矢先、用事を頼まれた。

日本語化は今度のお休みまでおあずけです。

こういった便利なツールが日本語化されたら日本の本屋の棚に Eclipse と同じように NetBeans の本が並ぶんじゃないかな?

Hatena タグ:

JavaFX サンプルサイト発見

火曜日, 1 月 13th, 2009

JavaFX のサンプルのサイトを発見しました。

たぶん JavaFX に興味を持っている人ならもう知ってるかもしれませんが

「JavaFX Example Code and Project Gallery」

http://javafx.com/samples/

プログラムは NetBeans で作られているようです。

ソースコードをダウンロードすると NetBeans でおなじみのものがあります。

NetBeans のプロジェクトとして開けます。

ちょっと見たけどさっぱり解りません(^^;

日本語のJavaFX 解説サイトを読みかけただけでは駄目ですね。(当然か

「ついにベールを脱いだJavaFX」

http://gihyo.jp/dev/serial/01/javafx

この日本語の解説サイト解りやすくていいですね。(^^)

JavaFX を前に少し勉強しかけたけど GUI のレイアウトが面倒なので NetBeans の GUI ビルダーでコンポーネントをポトペタできるまで待つことにした。

けど、ちょっと期待はずれだった。

ソースコードにコンポーネントをドラッグアンドドロップするとは・・・

まぁ、これでも楽なのは確かですね。

ゆっくりいろいろやりたいが、世間は不況で仕事が無いとかいってるが、うちの会社も例外ではない。

でも何故か私の職場は以前と変わらず忙しい(><)

給料は安くなってもいいから自由な時間をくれ~~!

Hatena タグ: ,

ScheduledExecutorService の謎

土曜日, 1 月 10th, 2009

年末に ScheduledExecutorService を利用した単純なカウントダウンプログラムを作った。

普通のスレッドで Thread.sleep(1000); とかするのと違いはあるのか気になった。

そこで NetBeans のプロファイラを利用して違いを確認してみました。

ScheduledExecutorService を利用したほうはこのまえと同じです。

ただし、更新時間を変更してあります。

        int procs = ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors();
        ScheduledExecutorService ses = Executors.newScheduledThreadPool(procs);
        ses.scheduleAtFixedRate(new task(), 0, 5, TimeUnit.MILLISECONDS);

普通のスレッドで一定時間眠らせて更新をするほうは

        try {
                    Thread.sleep(5);
                } catch (InterruptedException ex) {
                    Logger.getLogger(countdown.class.getName()).log(Level.SEVERE, null, ex);
                }

としました。

気になる結果は

ScheduledExecutorService

1

3

 

Thread

2

4

以上のような結果となりプログラムの実行結果としては同じですがずいぶん違いがあるのが確認できました。

ScheduledExecutorService はスレッドが休眠なしで100パーセント実行されてます。

対して普通のスレッドは Thread を眠らせて更新を繰り返すのでそうではありません。

下段の真ん中のグラフも面白い結果をしめしてますね。

NetBeans のプロファイラを使うとこういったプログラムの動作を視覚的に確認できます。(^^)

本当に Cool なツールですね!

ここで問題なのですが・・・ こういった定期的に処理を行うプログラムを作るときどちらを使うべきなのか?

私はプロではなく趣味で Java を楽しんでる未熟者なのでそれぞれのメリットやデメリットが今ひとつ解りません。

ScheduledExecutorService はあとから追加されたものなので Thread よりもいいのかな?と思ったりしてます。

 

Memo

NetBeans でプロファイラを使用するにはプロファイリングするプロジェクトを右クリックします。

そして[ プロファイル ] をクリック

[ <プロジェクト名>のプロファイル ] というウィンドウが出ますのでプロファイルする項目を左のボタンで選んで実行します。

初回にプロファイラの調整が実行されますので注意事項を読んで調整を実行します。

今回は [ 監視 ] を選んで [ スレッドの監視を有効化 ] にチェックを入れて [ 実行 ] ボタンを押し、スレッドを監視しました。