Javaの勉強 3日目

まずは前回のおさらい。↓のコードでウィンドウに画像を読み込んで表示させました。

 
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Chap3Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		new Chap3Main();
	}

	JFrame mainwindow;
	BufferedImage img_back;

	// コンストラクタ
	public Chap3Main() {
		this.mainwindow = new JFrame("初めてのウィンドウ");
		this.mainwindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.mainwindow.setVisible(true);
		// ウィンドウサイズ設定
		Insets in = this.mainwindow.getInsets();
		this.mainwindow.setSize(480 + in.left + in.right, 360 + in.top
				+ in.bottom);
		//画像読み込み
		try {
			this.img_back = ImageIO.read(this.getClass().getResource("IMG_0338.JPG"));
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
		
		//タイマー作成
		Timer t=new Timer();
		t.schedule(new GameTask(),0, 500);
	}
	
	class GameTask extends TimerTask{

		@Override
		public void run() {
			// TODO 自動生成されたメソッド・スタブ
			Graphics g= mainwindow.getGraphics();
			g.drawImage(img_back, 8, 29, mainwindow);
			g.dispose(); //描画終了
		}
		
	}
}

実行結果はこんな感じ↓

↑MacOSX


↑Windows XP


↑Windows 7


↑Linux (Ubuntu 10.04)

1回書けば、いろんなOSで動作します。
Windows 7と他のOSで画像の座標がずれているのが気になりますが、
今はスルーします。

内容をまとめると、
・JFrameクラスのgetGraphicsメソッドでGraphicsクラスのインスタンスを取得する。
・それを利用してdrawImageメソッドで指定した座標に画像を描画する。
・すべての描画がおわったらdisposeメソッドでGraphicsクラスのインスタンスを廃棄する。
・不要になったインスタンスは時間が経つと自動的に廃棄されるが、Graphicクラスのインスタンスは
 OSの描画リソースを確保しているのでなるべく早く廃棄する必要がある。

public Graphics getGraphics()
public abstract boolean drawImage(Image img, int x, int y, ImageObserver observer)
public abstract boolean drawImage(Image img, int x, int y, int width, int height, ImagObserver observer)
public abstract boolean drawImage(Image img, int x, int y,  Color bgcolor, ImageObserver observer)
public abstract boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer)
public abstract boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2 int sx1, int sy1, int sx2, int sy2 ImageObserver observer) 
public abstract boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2 int sx1, int sy1, int sx2, int sy2 Color bgcolor, ImageObserver observer) 
public abstract void dispose()

drawImageメソッドについて

drawImageメソッドは6種類もある。
引数xとyは画像を描画する座標。
widhtとheightは描画領域のサイズを表す。そこに納まるように画像が拡大/縮小される。
bgColorは半透明の画像を描画する際の背景色を指定する。
dx1、dy1、dx2、dy2とsx1、sy1、sx2、sy2は
sx1〜sy2で表示される画像の一部領域を、dx1〜dy2で示される範囲に描画するときに使う。
画像の一部を切り抜いて描画することが可能。
最後のImageObserverには描画対象のウィンドウのインスタンスを指定。
ただし、これはnullを指定していても問題ない。
※ImageObserverはJavaアプレットなどでダウンロード途中の画像データが描画された状況を想定して
用意されたしくみ。画像全体のダウンロードと描画が完了すると、ImageObserverに指定したウィンドウに
通知される。ダウンロードにそれほど時間がかからない状況なら気にする必要はない。

インターネットに公開

次に、前回作成したウィンドウ表示のプログラムをWebサーバ上で実行できるようにしてみたいと思います。
作成したプログラムをインターネットで公開するために、2つのことを行います。

1.プログラムを1つのJARファイルにまとめる
 JARとはJavaARchiveのこと。
 コンパイル後のクラスファイルやリソースファイルを1ファイルにまとめたもの。
 ファイルが1つなのでアップロードも簡単だし、ZIP形式で圧縮されているため、ファイルサイズも小さくなる。
 JARファイルの作成方法はこちらのサイトを参考にしました。

2.Java Web Startを利用するためのJNLPファイルを作成する。
 Java Web Startを利用するとJARにまとめたプログラムのダウンロード・インストール・実行を一気に行える。
 利用するにはJNLPファイルをテキストエディタで作成し、JARファイルと一緒にアップロードする。
 実行するプログラムはJavaアプリケーションそのものなので、基本的にはJavaのすべての機能が使える。
 しかし、Webから簡単に実行できるという性質上、何でもできてしまうと危険過ぎるため、
 サンドボックスというセキュリティ機能によって動作が制限されている。
 JNLPファイルの作成はこちらのサイトを参考にしました。

サンドボックスの機能制限
・ローカルディスク(手元にあるパソコンのハードディスク)にアクセスできない。
・すべてのJARファイルを同一ホスト(1つのWebサーバ)からダウンロードする必要がある。
・JARファイルのダウンロード元のサーバとしか通信できない。
・セキュリティマネージャ(Javaのセキュリティ設定を変更するクラス)はインストールできない。
・ネイティブライブラリ(パソコンにインストールされているライブラリ)は使用できない。
・システムプロパティ(パソコンの環境設定)へのアクセスが制限される。
 これらの制限を解除することも可能だが、その場合は作成者の身元を証明するデジタルコード署名を取得し、
 ユーザの許可を得る必要がある。

マニフェストファイルの作成
 通常のJARファイルはEclipseのエクスポート機能だけで作成できるが、
 JLayerのような外部ライブラリを使用している場合は、
 その場所と名前を記述したマニフェストファイルを作る必要がある。
 マニフェストファイルは「.mf」という拡張子が付いたテキストファイルである。

Manifest-Version:1.0
Main-Class:Chap3Main
Class-Path:aaa.jar

Manifest-Version
 マニフェストファイルのバージョンを記述
Main-Class
 エントリポイントのmainメソッドを持つクラス名を指定する。
Class-Path
 外部ライブラリを使用している場合は、ここにJARファイルの名前を書く。
 複数使用している場合は半角スペースで区切って「Class-Path;aaa.jar bbb.jar」と並べる
 フォルダ内にまとめている場合は「Class-Path: フォルダ名/aaa.jar」のように書く。

それらをサーバにアップロードします。(アップロード時はパーミッションに注意を。)
サーバ側でMIMEタイプの設定をします。Apacheの場合はmime.typesに追記する。

application/x-java-jnlp-file jnlp

MIMEタイプの設定が完了したらwebデーモンを再起動して準備完了!
↓をクリックして下さい。

どうですか?うまく起動しましたか?
これは病みつきになりそうです。
それではまた!

Javaの勉強2日目

さて、今日は早速、プログラミングに入ります。
開発環境はMac OSX 10.6.5

Eclipse 3.6 Helios (日本語化パッチ適用)

MacでEclipseを日本語化するにあたってこのサイトを参考にしました。
とてもわかりやすかったです。

ウィンドウの作成

import java.awt.Insets;

import javax.swing.JFrame;

public class Chap3Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		new Chap3Main();
	}
	JFrame mainwindow;
	
	//コンストラクタ
	public Chap3Main(){
		this.mainwindow = new JFrame("初めてのウィンドウ");
		this.mainwindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.mainwindow.setVisible(true);
	//ウィンドウサイズ設定
	Insets in=this.mainwindow.getInsets();
	this.mainwindow.setSize(480 + in.left + in.right ,360 + in.top + in.bottom);
	}
}

・パッケージ名を指定していないとクラスライブラリで定義されているクラス名がわからない。
・パッケージ名はクラスの名字のようなもの javax.swing.JFrame mainwindow;
・パッケージ名.クラス名;というインポート文を書くと、ソースコードの中でパッケージ名を省略できるようになる。
・Ctrl(Macはcommand)+Shift+Oでインポートの編成処理が行われ、必要なインポート文が追加され、
 不要なインポート文は削除される。
・static修飾子を付けて宣言したメソッドは、インスタンスを作る前でも呼び出せるスタティックメソッド
 (クラスメソッドとも呼ぶ)になる。
 mainメソッドはこのしくみを利用してインスタンス作成前にOSから呼び出されるので、
 内部でインスタンスを作らなければいけない。
・クラス名と同じ名前のメソッドをコンストラクタ(建設者の意味)という。
・コンストラクタはインスタンスが作られるときに呼び出される。
・コンストラクタの中ではインスタンス作成直後のさまざまな初期化を行う。
・Chap3MainクラスのコンストラクタではJFrameのクラスのインスタンス作成〜表示までの処理を行う。
・JFrameクラスのインスタンスを作成し、mainwindowフィールドに代入。
・JFrameクラスのコンストラクタは引数の文字列をウィンドウのタイトルにする。
・ウィンドを閉じると同時にプログラムを終了するには、
 JFrameクラスのsetDefaultCloseOperetionメソッドの引数にEXIT_ON_CLOSEを指定する。
・このEXIT_ON_CLOSEは定数。安徽しにくい数値を覚えやすくするたみに使う。
・setDefaultCloseOperation(3)よりsetDefaultCloseOperation(EXIT_ON_CLOSE)の方が意味がわかりやすい。
・ウィンドウは初期設定では非表示になっているため、setVisibleメソッドでtrueを指定して表示。
・ウィンドウサイズはJFrameクラスのsetSizeメソッドで設定できるが、
 ここで指定したサイズにはウィンドウ枠とタイトルの文が含まれている。
・クライアントエリアを480×360ピクセルにするには枠やタイトルバーの太さを加えたサイズを指定。
・ウィンドウの四辺のサイズはJFrameクラスのgetInsetsメソッドで調べることができる。
 このメソッドはInsetsクラスのインスタンスを返すので、その4つのフィールド
 top , bottom , left , right を480×360ピクセルに加える。

実行するとウィンドウが表示される。

リアルタイム処理

・コンピュータに時間を計らせて、一定の時間ごとに同じ量の仕事をやらせることをリアルタイム処理という。
・Javaでリアルタイム処理を実現するには、TimerクラスとTimerTaskクラスをセットで使う。
・処理をrunメソッドに書いておき、Timerクラスが一定間隔でrunメソッドを呼び出すしくみ。
・Timerクラスは指定された間隔でTimerTaskクラスのrunメソッドを呼び出す。
・処理はrunメソッドの中に書けばよいが、TimerTaskクラスを直接書き換えることはできない。
 (Javaのクラスライブラリの中で定義されているため)
・このような場合TimerTaskクラスを継承したクラスを作成し、runメソッドの内容を書き換える。
・継承とはすでにあるックラスを引き継いで新しいクラスを作成すること。
・元になるクラスをスーパークラス、継承して新しく作られるクラスをサブクラスと呼ぶ。
・フィールドもメソッドも丸ごと引き継がれるので、必要な部分を書き足すだけで済む。
・継承するにはサブクラスの定義にextendsキーワードを加える。
・クラスの中に書かれたクラスを内部クラス(またはインナークラス)と呼ぶ。
・TimerTaskクラスを継承したクラスには必ずrunメソッドを書かなければいけないという決まりがある。
・サブクラスに絶対に書かなければいけないメソッドのことを抽象メソッドと呼ぶ。
・Ctrl(Macではcommand)+Shift+Mで現在カーソルがあるクラスのインポート文を自動挿入できる。
・インポート文をまとめて挿入するCtrl+Shift+Oが便利だが、ソースコード中にその他のエラーがあると働かない。
・Ctrl+Shift+Mはエラーがある時でも使える。
・スーパークラスと同じ名前と型のメソッドを書くことをオーバーライドという。overrideとは上書きの意味。

import java.awt.Insets;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;

public class Chap3Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		new Chap3Main();
	}

	JFrame mainwindow;

	// コンストラクタ
	public Chap3Main() {
		this.mainwindow = new JFrame("初めてのウィンドウ");
		this.mainwindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.mainwindow.setVisible(true);
		// ウィンドウサイズ設定
		Insets in = this.mainwindow.getInsets();
		this.mainwindow.setSize(480 + in.left + in.right, 360 + in.top
				+ in.bottom);
		//タイマー作成
		Timer t=new Timer();
		t.schedule(new GameTask(),0, 500);
	}
	
	class GameTask extends TimerTask{

		@Override
		public void run() {
			// TODO 自動生成されたメソッド・スタブ
			System.out.println("呼び出された");
		}
		
	}
}

このプログラムを実行すると0.5秒ごとに「呼び出された」という文字がコンソールに表示される。

・Timerクラスのscheduleメソッドでは引数periodに呼び出し間隔を指定する。
・単位はミリ秒。1秒=1000ミリ秒なので、500を指定すると0.5秒間隔で呼び出されることになる。

public void schedule (TimerTask task, long delay, long period)

・task→Timerから呼び出すTimerTaskインスタンスを指定
・delay→最初の呼び出しを実行するまでの遅延時間をミリ秒で指定
・period→runメソッドを呼び出す間隔をミリ秒で指定

・継承のメリット
 すでに作ったクラスの機能を流用できること
 スーパークラス型の変数・引数にサブクラスのインスタンスを代入できること
 scheduleメソッドの引数taskはTimerTask型なのに、GameTaskクラスのインスタンスを指定できている。
 サブクラスはスーパークラスの全てのフィールドとメソッドを持っている。
 スーパークラスだと思って扱っても問題ない。
 人間や動物の世界では親のできることを子供が必ずできるとは限らないが、
 コンピュータの世界ではそれが保証されている。

 逆にサブクラス型の変数・引数にスーパークラスのインスタンスを代入することはできない。
 (無理にすることはできるが危険)
 ※サブクラスで追加したフィールドやメソッドを要求されたときにスーパークラスは対応できないため

・オーバーライド
 スーパークラスのメソッドをサブクラス側で上書きすること。
 同じようにメソッドを呼び出しても違う処理を行うことが可能。
 オーバーライドするにはメソッドの名前と引数・返り値の型を同じにしなければならない。
 どれかが違っていると新しいメソッドを追加したことになる。
 オーバライドミスを避けるためにオーバーライドしたメソッドの直前に@Overrideと書く。
 このキーワードがあるとJavaコンパイラーがスーパークラスに同名同型メソッドがあるか確認し、
 なければ、エラーを表示してくれる。

・抽象メソッド
 その名のとおり定義のブロックがない。abstract修飾子をつけて、型と名前を指定したら;を付けて終わりにする。
 このメソッドを必ずオーバーライドしてねと予約しておくのが抽象メソッドの役割。

public abstract void run(); //抽象メソッドには定義ブロックがない

 抽象メソッドを持つクラスはインスタンスが作れない抽象クラスになる。中身が空のメソッドは実行しようがない。
 抽象クラス・抽象メソッドは継承されることが前提の文法である。

・内部クラス
 特定のクラスからしか利用されないことが決まっているときに使う。
 GameTaskクラスのrunメソッドはChap3Mainクラスからしか利用できない。
 できればChap3Mainクラスの中で定義したいくらい。
 それなのにわざわざ別のソースコードに分けて書くのは面倒なので内部クラスにしている。
 内部クラスは役に立つ居候、お腹の中のビフィズス菌のような存在。
 外側のクラス(外部クラス)のフィールド・メソッドを自分のメンバと同じように利用できる。

public class Outer {
	
	int field0;
	void method0{
	}
	
	class Inner{
		field0=10;
		method();
	}
	
}
//内部クラスは外部クラスのメンバを自由に利用できる。

 逆に外部クラスから内部クラスのフィールド・メソッドを利用するときは、
 内部クラスのインスタンスを内部クラス型フィールドに代入して予備ださなければいけない。
 なぜなら、内部クラスにとって外部クラスは1つしかないが、
 外部クラスの中に複数の内部クラスを入れることは可能なので、区別擦る必要があるからである。

・メソッドのオーバーロード
 overloadとは引数や返り値の型が違う同じ名前のメソッドを定義すること。
 たとえばprintメソッドを入力するとprint(boolean b) print(char c)などの候補がたくさん表示されるが、
 これはprintメソッドがオーバーロードされているから。メソッドを使う側からすると、
 1つのメソッドに色々な種類のデータを渡せるように見える。
 なお、オーバーロードとオーバーライドは名前がよく似ているが全く別の文法なので、間違わないよう注意。

画像ファイルの読み込み、表示

・画像ファイルや音楽ファイルなどを読み込む場合、
 それらのファイルをプログラムファイルの外部に置く方法とプログラムファイルの中に含める方法が考えられる。
 プログラムファイル内に含められたファイルをリソースと呼ぶ。resourceは資源という意味。
 webでの取り扱いを楽にするために、すべてリソースにすることにする。

 画像ファイルや音楽ファイルをリソースにするにはパッケージエクスプローラーで
 パッケージ内にファイルをインポートする。
 インポート完了後、ImageIOクラスのreadメソッドを使って画像ファイルをメモリに読み込む。
 IOはInput/Outputの略。入力と出力の意味→読み込み、書き込みのこと。
 ImageIOではPNG、GIF、JPEG形式の画像ファイルを読み込むことができる。
 大きめの画像には圧縮率が高いJPEG、ゲームのキャラクタには透明職を設定できるPNGが向いている。

 readメソッドはFileやInputStream、URLなどの型の引数を受け取って、
 BufferredImageクラスのインスタンスを返す。
 HDD上のファイル、インターネット上のファイルを読み込む場合は次のように書く。
 

BufferedImage bimage;
//HDDから↓
bimage= ImageIO.read(new File("画像ファイル名"));
//ネットから↓
bimage= ImageIO.read(new URL("http://~.co.jp/画像ファイル名"));
//リソース↓
bimage = ImageIO.read( this.getClass() .getResource("画像ファイル名"));

 リソースを読み込む場合が一番ややこしくなっている。
 リソースを読み込むにはgetResourceメソッドを使うが、このメソッドはClassクラスのメンバである。
 Classクラスはクラスに関する情報を管理するクラスで、すべてのクラスが持つgetClassというメソッドで取得する。
 これらの処理をひとつなぎで書くと、

this.getClass().getResource("リソース名"));

となる。
 
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Chap3Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		new Chap3Main();
	}

	JFrame mainwindow;
	BufferedImage img_back;

	// コンストラクタ
	public Chap3Main() {
		this.mainwindow = new JFrame("初めてのウィンドウ");
		this.mainwindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.mainwindow.setVisible(true);
		// ウィンドウサイズ設定
		Insets in = this.mainwindow.getInsets();
		this.mainwindow.setSize(480 + in.left + in.right, 360 + in.top
				+ in.bottom);
		//画像読み込み
		try {
			this.img_back = ImageIO.read(this.getClass().getResource("IMG_0338.JPG"));
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
		
		//タイマー作成
		Timer t=new Timer();
		t.schedule(new GameTask(),0, 500);
	}
	
	class GameTask extends TimerTask{

		@Override
		public void run() {
			// TODO 自動生成されたメソッド・スタブ
			Graphics g= mainwindow.getGraphics();
			g.drawImage(img_back, 8, 29, mainwindow);
			g.dispose(); //描画終了
		}
		
	}
}

これを実行するとこんな感じ↓

そろそろ時間なので、今日はここまで。

Javaを1から勉強し始めました。

Javaを1から勉強開始。
基本的なことを箇条書きでまとめてみます。

Javaの文法について

・{ }のことをパーレンまたは中カッコという。
・{ }はブロックのはじめと終わりを表す。
・{ }を使って複数のブロックに分割することで、どこからどこまでが何をしているのかを見通しやすくしている
・{ }の前の文で、そのブロックの役割が決まる。
・字下げはブロックを見やすくするためのもの。全て取り去っても結果は変わらない。
・字下げ位置がくずれたらCtrl(Macの場合はcommand)+Shift+FキーでEclipseが自動的に設定し直してくれる
・クラスという部品を作り、それを組み合わせてひとつのプログラムを作る。
・クラスのブロック内にpublic static void main(String[ ] args)で始まるブロックがあり、mainメソッドという。
・mainメソッドのことをエントリーポイントという。
・エントリーポイントはプログラムの起動時に最初に呼び出される。
・空白や改行は自由。( )や{ }も1語に数えられるのでその前後に空白を入れることができる。
・文の最後には;を入れる
・//が付いた行と/* 〜 */で挟まれた行はコメント文。コメント文はコンパイラに無視される。
・基本的には半角文字だけを使用する。
・全角文字が使えるのは文字列のリテラルかコメント文の中だけ。
・大文字・小文字が区別される。
・System.out.print( )はSystemクラスのoutフィールドに代入されているPrintStreamクラスの
 printメソッドを実行するという意味。
・メソッドはJavaに標準で付属されているクラスライブラリの中に書かれている。
・文字のリテラルは”で囲む
・リテラル literal→ありのままの意味 コンピュータ用語では定まった数、変化しない数の意味
・変数には半角アルファベット、半角数字、_を組み合わせた名前をつける。
 数字だけ、_だけ、class、publicなどのJavaで予約されている名前は使えない。
・変数の宣言をした行がスコープの開始位置
・変数の宣言があるブロックの最後が、スコープの終了位置
・スコープの終了位置より後なら同じ名前の変数を宣言できる。

オブジェクト指向について

・Javaはオブジェクト指向。まず、どんな部品が必要かを考える。
・次にそれぞれのオブジェクトが持つメソッドとフィールドを考える→クラスを定義
・メソッドはそのオブジェクトに対する命令
・フィールドはどのオブジェクトが持つ変数
・インスタンスとはクラスをもとに作られた実際に操作することのできる部品(メモリ上に存在)
・インスタンスはnew演算子を使って作成
・メソッドを利用するには変数名の後に.演算子を付け、その後にメソッドを書く。
・メソッドに渡す引数は( )内に書く
・フィールドを利用する場合も変数名の後に.演算子を付け、フィールド名を書く。
・空の状態をnull というキーワードで表す。
・空のクラス方変数のメソッドやフィールドを利用しようとすると、NullPointerExceptionというエラーが発生する。
・int、float、booleanなどの小文字の名前の型はプリミティブ型と呼ばれる。
・プリミティブ型はJavaの言語仕様の中に最初から組み込まれている。
・プリミティブ型はクラスではないため、インスタンスという概念がなく、メソッドもフィールドも持っていない。
・プリミティブ型をサポートするためのメソッドは、java.langパッケージのIntegerクラスやFloatクラスなどの
 ラッパークラスの中に定義されている。
JavaTM Platform, Standard Edition 6 API 仕様

JavaのGUIについて

・Javaで作るプログラムには「Javaアプリケーション」「Javaアプレット」「Javaサーブレット」の3種類がある
・Javaアプリケーション→デスクトップ上で動作するプログラム。ウィンドウを作成し、その上にパーツを配置。
・Javaアプレット→Webページに埋め込めるプログラム。Flashムービーのような感じに使う。
・Webサーバ内で動かす特別なプログラム。CGI的な使い方をする。
・GUIの種類も3つ。
・AWT(Abstract Window Toolkit)
 OSのGUIを利用。比較的動作が軽いとされているが、すべてのOSのにある基本的な部品しか利用できない。
 単純なGUIしか作れない。

・Swing
 ほぼすべての処理がJavaで書かれている。
 AWTよりも要求スペックが高くなるが、スピンボタン、テーブルなど数多くの部品が利用可能

・SWT(Standard Widget Toolkit)
 Eclipseで使われているGUIで、OS専用のプログラムとJavaのハイブリッドになっている。
 AWTよりも複雑なGUIを作成可能。
 Swingよりも軽快に動作する。
 その代わりにOSごとに専用バージョンを用意する必要がある。

とりあえず、これだけのことは頭に入れた。

修行開始!

今日から修行を始めます。
いよいよ自分ひとりでじっくり考えることができる空間と
時間を確保することに成功しました。

そこで、

基本情報技術者
 試験日:平成23年4月17日(日)
 受験料:5,100円(税込み)
  区分:国家資格
  URL:http://j.mp/hiiq7p

Oracle Certified Programmer (OJC-P) Javaプログラマー
 試験日:随時
 受験料:34,230円(税込)
  区分:ベンダー資格
  URL:http://j.mp/eqmjpi

の資格取得を目指します。

業務でまともに開発を経験していないので、資格を取得することで、
技術力を証明できるようにしたいのです。

優先順位としては基本情報技術者が優先です。
何故なら、1年に2回しか取得のチャンスが無いからです。

今、とてもプログラミングに興味が湧いているので、
午後の勉強からスタートしようと思います。
言語の選択はもちろんJavaで。
Androidにも使われているし、「write once run anywhere」なところがイカしてます!

試験まであと4ヶ月しかないため、計画的に学習を進めねば。

IE9 betaをインストールしてみた

IE=マイクソソフトのクソブラウザだという既成概念を打ち砕いてくれた。
パフォーマンスは動画をご覧いただければ一目瞭然だ。
インストールすると、最初にアドオンの無効化を勧められる。
起動速度を速くするための工夫だ。
それぞれのアドオンを無効化することによって、どのくらい起動速度を短縮することができるのか
数値で明確に表示してくれるところが良かった。
IE7以降のごちゃごちゃしたUIが改善され、すっきりシンプルなデザインに。
ブラウジングもスムーズ。今のところ文句なしの出来栄えと言える。

IE9を利用したいなら、XPからVistaか7へアップグレードするしかない。
これで、Vistaと7の価値が高まることは間違いない。

今までのIEと比べて最も大きな違いはHTML5をサポートしていることだ。
WEBの世界で生活を始めた我々にとってHTML5という技術はKeyとなる。
閲覧(ビュアー)のWEBからアプリケーションとしてのWEBへ変わろうとしているのだから。