Takayuki Okazaki's Weblog
ブログ: 岡崎 - Okazaki's blog
20050331 2005年 3月 31日 木曜日
NeoOffice/J 1.1 Release Candidate
English Translation: (Yahoo!) / (Google)
Mac用のオフィススイートNeoOffice/JがついにRelease Candidateになりました。 ネイティブアプリケーションとのドラッグ&ドロップなどOpenOffice.org 1.1.4のすべての機能が利用可能になっているとのことです。


国民の休日
English Translation: (Yahoo!) / (Google)
「みどりの日」が、「昭和の日」にかわる見通しだそうです。 http://headlines.yahoo.co.jp/hl?a=20050330-00000100-mai-pol
なんだかんだ言って国民の休日ってしょっちゅうかわりますよね・・・。 春分の日や秋分の日も厳密には官報をみないと正確にはわからないとのことなので、 政府機関のどこかからウェブサービスで国民の休日が取得できるようにしてほしい。 (もうあるのかな・・?)
個人的にはあまりカレンダーを使わないので結構、海の日とか敬老の日に ハッピーマンデーが適用されていたのも直前に知りました。


今日のツール: JalopyとNetBeansでコードを見やすく
English Translation: (Yahoo!) / (Google)
先日NetBeans 4.1向けのJalopyプラグインが利用可能になりました。Jalopyは様々なカスタマイズができるコード整形ツールで、BSD Licenseで配布されています。 このJalopyのNetBeansプラグインが先日公開されました。 de-hunsicker-jalopy-plugin-netbeans.nbmをNetBeans 4.1にインストールするだけで使用できるお手軽さ、かなり細かい設定ができるところが魅力です。
たとえばこのようにぐちゃぐちゃのソースコード。
(クリックで拡大)
ファイルウインドウから整形したいファイルを選んで「Format」を選ぶか、 フォルダを選んで「Format All」を選ぶとJalopyによる整形を行うことができます。
(クリックで拡大)
これでばっちり整形されています。
(クリックで拡大)
まだあまり使い込んでいませんが、ホワイトスペースやインデントはもちろんのこと、 メソッドやメンバーのソートができたり、不足しているjavadocの補完をしてくれたりと かなりよくできている印象があります。 簡単に試した程度ですが日本語を含むソースコードでも問題ありませんでした。


20050328 2005年 3月 28日 月曜日
この先10年、エンジニアに必要なスキルって?
English Translation: (Yahoo!) / (Google)
さいきん書店で、大人のための〜〜ドリルとか、□□力をつける。といったような タイトルの本がたくさんあるなあと思って、 少しずつ立ち読みするもののまだ買ったことはありません(笑)。 ここまで□□力というキーワードが増えてくるとそろそろお腹いっぱいで、どうも流行についていけません。
Edgar H.Scheinによると学習を したいというきっかけは不安感からだそうです。エンジニアのような技術職では不安感を感じることはよくあります。 たとえば、ムーアの法則「24ヶ月で性能が2倍になる」というような業界の流れからめまぐるしさを感じ、 中国やインドから多くの技術者がやってくるというようなニュースを聞くと今後起こりそうな変化に不安を感じます。
そういう背景からか、エンジニアの知り合いはそれ以外の職種の知り合いに比べて「学習」という テーマに対して敏感です。飲み屋での話題もどういうスキルを身につけるべきかとか、 □□力が重要だ、というような話題が多いように感じます。
私もエンジニアの一人としてエンジニアとして生きていくにあたってどういったスキルが重要なのか気になりますが、 5年ごとか10年後を想像したときに、話題に上っている□□力をぜんぶ身につけられているかと考えると とても現実的とは思えません。無理なダイエットが続かないのと同じように、無理な学習も続けられないからです。
10年後のIT業界の姿や、そのときにホットな技術をいまから想像することは私にはできませんが、 もし、Jonathan Schwartzが 言うようにIT業界のコモディティ化が進むのであれば、現在よりももう少し不安感が和らいでいるかもしれません。 ではこの先10年で必要にな□□力は?と考えると、それまでに無理な学習でぼろぼろになってしまわないよう 不安感に打ち勝つ忍耐力なのかもしれませんね :-)


20050317 2005年 3月 17日 木曜日
今日のツール: StarSuite 8(Beta)とOpenOffice.org 2.0 (Beta)
English Translation: (Yahoo!) / (Google)
先日、StarSuite 8OpenOffice.org 2.0のベータ版が相次いでリリースされました。 StarSuiteは6.0Betaから使用し始めましたが、ついにここまで来たかというような完成度で 正式リリースが待ち遠しくなってきます。StarSuite 8/OpenOffice.org 2.0の見た目は次の 画面のようにかなりMicrosoft Officeを意識したつくりになっています。 (くりっくで拡大)
使い勝手も細かい部分で多くの改良が加えられており、オフィススイートとしては成熟の域に 達してきたように感じます。StarSuite 8/OpenOffice 2.0は以前のバージョンと同様にPDFへの エクスポート機能のようにMicrosoft Officeには無い機能もあり、使い始めるとMicrosoft Officeにはもう戻れません! まだまだベータ段階ですが、この快適なオフィス環境をぜひともお試しください。


20050315 2005年 3月 15日 火曜日
今日のコーディング: PMDルールに学ぶ、ワンステップ上のコーディング #1
English Translation: (Yahoo!) / (Google)
以前紹介したPMDですが、今回は PMDで定義されているルールを学びワンステップ上のコーディング能力を身につけましょう。

BooleanInstantiation

このルールは java.lang.Booleanオブジェクトをインスタンス化してはいけないというルールです。 java.lang.BooleanにはTRUE、FALSEそれぞれのインスタンスがあらかじめ作成されているため、 これを使用するほうが効率的であるということに基づくルールです。 ためしに次のようなプログラムで簡単なベンチマークを行いました。
public class A {
    private int count;
    /** Creates a new instance of A */
    public A(int c) {
        this.count = c;
    }
    
    public void b1() {
        Boolean[] b1 = new Boolean[count];
        
        for (int i = 0; i < count; i++) {
            b1[i] = new Boolean("true");
        }
    }
    
    public void b2() {
        Boolean[] b2 = new Boolean[count];
        
        for (int i = 0; i < count; i++) {
            b2[i] = Boolean.TRUE;
        }
    }
    
    public static void main(String[] args) {
        A a = new A(10000);
        
        a.b1();
        a.b2();
    }
}
このプログラムをNetBeans Profilerで計測したところ 次のような結果になりました。(NetBeans Profilerについては別の機会に詳しくご紹介いたします) (クリックで拡大) このようにメソッドb1とb2の実行時間の差は歴然です。


20050314 2005年 3月 14日 月曜日
今日のツール: Sun Java Studio/NetBeans ~テンプレートをマスターする~
English Translation: (Yahoo!) / (Google)

Sun Java Studio/NetBeansで開発したプログラムをJava Web Startで配信したいと 思いましたが、知る限り標準ではJNLP記述を作るような機能が無いようです。 しかし、この程度であればテンプレート機能を使えば簡単に実現することができます。 以下にその方法をご紹介します。

準備
  • まず、XMLエディタがJNLPファイルを認識できるようにXMLオブジェクトの拡張子を追加します。 Sun Java Studioのメニュー「ツール」→「オプション」を選び、XMLオブジェクトの拡張子にjnlpを追加します。
    (クリックで拡大)
  • 次に同じくオプションの設定でテンプレートを追加するフォルダを作成します。 オプションウインドウの「ソースの作成と管理」から「テンプレート」を開き、テンプレートを 選択した状態で右クリックメニューから「新規」→「フォルダ」を選びます
    (クリックで拡大)
  • ここでは「Java Web Start」というフォルダを作成します。
    (クリックで拡大)
ここまでで準備は完了です。
テンプレートを追加
  • 今回は、次のJNLPをテンプレートとして追加することにします。次のJNLPサンプルファイルを解凍し、 Sun Java Studioでマウントしているディレクトリにコピーします。
    JNLPサンプル
    (クリックで拡大)
  • JNLPファイルを選び、テンプレートとして保存します。
    (クリックで拡大)
    (クリックで拡大)
    (先ほど作成したJava Web Startフォルダに保存)
これだけの操作でテンプレートとして新しくファイルが追加されました。
テンプレートを使ってJNLPを作成
  • ファイルメニューから「新規」を選んで「新規作成ウィザード」を開くと、先ほど追加した Java Web Startファイルが追加されています。これを選択すると新しくJNLPが作成できます。
    (クリックで拡大)
  • ファイル名を指定して、ファイルの作成を完了すると次のように新しいJNLPファイルが作成されます。
    (クリックで拡大)
このようにテンプレートの使用方法を知っておくと、定型的に作成しなければ いけないようなファイルを簡単に作成することができ多くの手間を省くことができます。 なお、テンプレートでは次のような文字列を自動的に展開してくれる機能もありますので ぜひ使用してみてください。
__DATE__ファイルの作成日付
__TIME__ファイルの作成時刻
__NAME__ファイル名
__PACKAGE__Javaファイルの場合、パッケージ名
__PACKAGE_SLASHES__パッケージ名の区切りを . から / に変えた文字列
__PACKAGE_AND_NAME__パッケージ名とファイル名
__PACKAGE_AND_NAME_SLASHES__パッケージ名とファイル名を / 区切りであらわした文字列
__QUOTES__ダブルクォート(")
__USER__ユーザ名
これ以外に定義したい場合には、「ツール」→「オプション」でJavaソースの 文字列テーブルで編集します。「マクロ名=値」という形で定義すると その文字列が展開されるようになります。なお、テンプレート中ではマクロ名の 前後に2つアンダバーを入れます (__)。


20050311 2005年 3月 11日 金曜日
今日のツール: NeoOffice/J 〜Macにもオフィス環境を〜
English Translation: (Yahoo!) / (Google)

Sun社内ではほとんどのドキュメントがStarSuite/OpenOffice.org形式の ファイルで流通しているためこれらのファイルがMacで扱えないのは 個人的に不便に感じていました。

オープンソースのオフィスプロジェクトであるOpenOffice.orgの Mac版のひとつとしてNeoOffice/Jというプロジェクトがあります。 Mac版OpenOffice.orgはX11を必要としたり、日本語入力環境を 整える敷居が高かったりしてなかなか使わなかったのですが、 NeoOffice/JはAquaで動作して日本語も特別な設定なしに使う ことができます。

NeoOffice/Jもバージョン0.1の頃から使用していますが、いまでは OpenOffice.org 1.1.3をベースとした NeoOffice/J 1.1Betaが 出ていて安定性、動作速度も格段に良くなってきました。

  • インストールをするにはまずこちらからファイルをダウンロードします。 http://www.planamesa.com/neojava/ja/download.php
  • インストールが終わったら、パッチを当てます。パッチもインストーラが ついているので簡単にインストールすることが出来ます。 http://www.planamesa.com/neojava/ja/patch.php
起動すると次のようにOpenOffice.orgと同じ画面が表示でされ、 全く同じように操作で使用できます。 起動画面


20050309 2005年 3月 09日 水曜日
今日のツール: NetBeansとPMDでスキルアップ
English Translation: (Yahoo!) / (Google)

NetBeansはオープンソースのJavaプログラミング環境として、 特に最近バージョン4.0が出てからはかなり使いやすくなってきました。 最近バージョン4.1のBeta版ではEclipseのプロジェクトをインポート することが出来るようになったりと相互運用もますます簡単になってきました。

PMDはオープンソースの 静的ソースコードチェックツールで、最近では開発プロジェクトで使用される ことも多くなってきました。PMDはコーディングに対していろいろなルールを もとにルールに反した部分を指摘してくれます。(ルールの詳細はまた別の機会に 紹介します。) こうしたルールに従いながらプログラミングをすることで、品質の高いコードを 書けるようになるだけでなく、自分自身のスキルも向上することにつながります。 今日はNetBeansにPMDを組み込むことでリアルタイムにコーディングの フィードバックを得る方法をご紹介します。

インストール方法
  • まず、NetBeansがなければこれをダウンロードします。 http://www.netbeans.org
  • 次にPMDのNetBeans用プラグインをダウンロードします。 PMD NetBeansプラグイン
  • NetBeansを起動し、メニューの「ツール」→「アップデートセンター」を選びます。
  • 手動でダウンロードしたモジュールをインストールする方法を選び、ダウンロードしたpmd.nbmを組み込みます。
これでインストールは完了です。このままでも使用できますが、 さらに便利にするために次の設定をします。
  • NetBeansメニューの「ツール」→「オプション」でPMDの設定を行います。
  • 次のようにEnable scanにチェックを入れます。
    (クリックで拡大)
これでソースコードを書きながらリアルタイムのフィードバックを得ることが出来ます。 フィードバックを受けると次のようにソースコード中のルール違反の部分を表示してくれます。 (クリックで拡大)


20050307 2005年 3月 07日 月曜日
今日のAPI: Java Advanced Imaging 〜画像を縮小する〜
English Translation: (Yahoo!) / (Google)
Java Advanced Imagingというと最近オープンソース化された話題のAPIです。 Java 2Dよりも対応画像フォーマットが充実していたり、画像に対する専門的な 操作ができるのがこのAPIです。 今日はデジカメでとった写真をWeb素材として使うために縮小(または拡大)するためにJava Advanced Imagingを使いました。特に今回実現したかったのは、画像の幅や 高さを指定した縮小ではなく、画像の面積に応じた縮小です。面積に応じて変換することで パノラマ写真やトリミングした写真をサムネイルとして並べたときの印象を合わせることが出来ます。
Java Advanced Imagingの準備
  • Java Advanced Imagingは標準のJ2SEに含まれていませんので、ライブラリを取得します。 http://java.sun.com/products/java-media/jai/
  • ダウンロードしたライブラリを開発環境やコンパイラのクラスパスに設定してください。
次は画像縮小のプログラム例です。
--- プログラム(Resize.java) ----
import java.awt.image.renderable.ParameterBlock;
import java.io.File;
import java.io.IOException;

import javax.media.jai.Interpolation;
import javax.media.jai.JAI;
import javax.media.jai.RenderedOp;

public class Resize {
    /**
     * 画像のリサイズ。
     * @param pixelCount ドット数
     * @param inputName 入力ファイル名
     * @param outputName 出力ファイル名
     * @param imageType 画像フォーマット。たとえば"JPEG"
     * @throws IOException 入出力処理時の例外
     */
    public static void resize(long pixelCount, String inputName, String outputName, String imageType) throws IOException {
        // 画像ファイルの読み込み
        FileSeekableStream stream = new FileSeekableStream(inputName);
        RenderedOp image1 = JAI.create("stream", stream);

        // 画像の縮小
        Interpolation interp = Interpolation.getInstance(Interpolation.INTERP_BICUBIC_2);

        // 画像面積および縮小比率の計算
        int width = image1.getWidth();
        int height = image1.getHeight();
        long actualPixelCount = width * height;
        double scale = Math.sqrt((double)pixelCount / (double)actualPixelCount);

        ParameterBlock params = new ParameterBlock();
        params.addSource(image1);
        params.add((float)scale);
        params.add((float)scale);
        params.add(0.0F);
        params.add(0.0F);
        params.add(interp);

        // 画像の縮小
        RenderedOp image2 = JAI.create("scale", params);

        // 画像の書き出し
        JAI.create("filestore", image2, outputName, imageType, null);

        File inputFile = new File(inputName);
        File outputFile = new File(outputName);

        // タイムスタンプをそろえる
        outputFile.setLastModified(inputFile.lastModified());
    }
}


20050305 2005年 3月 05日 土曜日
Blogはじめました
English Translation: (Yahoo!) / (Google)
昔調べたけど覚えていない、どこかに資料があったけどどこだっけ・・。 というような時に思いだせるように少しずつここにのせていくつもりです。


過去の記事
2月 2005 »
  
1
2
3
4
6
8
10
12
13
16
18
19
20
21
22
23
24
25
26
27
29
30
  
       
今日
Click me to subscribe このブログを購読(RSS)
検索

このブログ著者について
ソフトウエア・インフラストラクチャー・ソリューション本部のソリューション・アーキテクトでした(2008年8月退職)。 本業はSOAソリューションならびにSun Java CAPSによるソリューションのプリセールスをお手伝いするエンジニア、とJavaエバンジェリストグループに参加してセミナーに行ったり、趣味のプログラミング・ネタをこのブログで紹介したりしていました。現在は、ふらふらとwatermint.orgで活動中〜。
リンク
 
SunホットトピックPodcast - SunホットトピックPodcast
 


 

Today's Page Hits: 711