2009年 1月 31日 土曜日
Pure Java ブラウザ - Lobo browser -
JavaFX スクリプト (.fx ファイル) を直接起動することができる Lobo browser というものがあるので、ちょっと使ってみました。 The Lobo Project からダウンロードできます。コンセプトは Pure Java で動く browser ということらしいです。これを見て、「Hot Javaかよ!」と思った方。かなりの Sun 通ですね。10数年前、Sun でも 100% Pure Java で動く web ブラウザ、「Hot Java」なるものを出していました。コンセプトとしては、とても斬新なんですが、当時のコンピュータの処理スピードと、まだ発展途上であった JavaVM では、あまりに遅く、残念ながら消え去ってしまいました。当時、インターンとして、Sun で働いていたのですが、よくテストをお願いされ、「こんなの誰が使うんだよなー」って思っていたものです。ぜんぜん関係ないですが、当時のサンの社員の方が、「これからは DeskTop は必要なくなって、ブラウザだけで、すべてが行われる時代になる」といっていました。当時、無知な(今でも十分無知ですが...)学生だった私は、「そんなわけないじゃーん!」っと思っていましたが、その方の予想は今となっては、とても的を射た考えだったなぁ、と思います。今、当時のその方とほぼ同じぐらいの年齢になりましたが、そんな的確な予言は全くできませんねー。
関係ない話で長くなりましたが、Lobo browser に戻ります。試したのは、Windows XP 上です。
インストールし、起動した画面です。

デフォルトのホームである、Lobo project のトップページが表示されました。とりあえず、http://jp.sun.com とかに移動して browser として使えるか見てみると... ダメだこりゃ。
レイアウトとかばらばらになってしまっています。javascript とか使ってあるので、browser に対応してないと、どうにもならないみたいですね。私の blog ページみたいな単純なものは、ちゃんと表示されました。

日本サントップページ
それはさておき、問題は JavaFX が起動できるかです。blog にはってあるソース をアドレスに指定して起動してみました。すると...
おお、ちゃんと動いていますね。
web 上に落ちているサンプルとかを簡単に実行してみたいときには、いいかもしれません。
また、ほかの browser も早くこうなるといいですねぇ...
Posted at 12:43午前 1 31, 2009 by kenji in JavaFX の素人 |
2009年 1月 30日 金曜日
JFXBuilder を使ってみました。
JavaFX.com で紹介されていたのですが、ReportMill 社の JFXBuilder なるものがあってちょっと使ってみました。基本的は、お絵かきツールで書いた絵を JavaFX コードにしてくれるというものです。
JFXBuilder ページの Launch ボタンをクリックすると、インストールが始まります。インストールされたプログラムをクリックすると、エディタが立ち上がります。
私は絵心がないので、まったくうまい絵はかけないのですが、お絵かきツールで作った絵を JavaFX スクリプトにしてくれるのはうれしいですね。影をつけたりグラデーションをつけたりする Effect や、図形を、塗りつぶしたり、回転させたりするのも GUI でできてなかなか楽しいです。もう少し図形を書く手法 (現在は 直線、円形、四角形、多角形、星型、フリーフォームぐらいしかないです)
JavaFX Production Suite は、イラストレータとかが必要で私は試すことができないのですが、こちらなら
誰でも使えますね。

簡単な図を書いてみました。意味はありません。本当はねこび~んを書こうと思ったのですが、完全に挫折しました... 絵心のない私には、あんなにかわいいキャラクターは書けません...
Posted at 02:51午後 1 30, 2009 by kenji in JavaFX の素人 |
2009年 1月 22日 木曜日
Links for Chinese, Japanese and Russian are avairable.
The site links for each GEO (Chinese, Japanese and Russian) are available from JavaFX SDN site.
Also, Chinese site link from JavaFX.com is available.
That's one small step for JavaFX, one giant leap for world wide JavaFX developer!
Posted at 10:42午前 1 22, 2009 by kenji in JavaFX の素人 |
JavaFX SDN から日本語版へのリンクができました。
JavaFX SDN から日本語、中国語、ロシア語のサイトへのリンクができました。また、 JavaFX.com からは中国語サイトへのリンクも追加されました。
小さな一歩ですが、少しずつ、世界に浸透している感がありますね!
Posted at 10:37午前 1 22, 2009 by kenji in JavaFX の素人 |
2009年 1月 20日 火曜日
上級者との違い
先週の話ですが、いつもの庭球部に、Sun の実業団の選手である、岡本さんが参加してくださいました。岡本さんとは何度か第一テニス部の合宿などでご一緒させていただいていますが、やはり週末テニスプレーヤーとまったく違うテニスをします。今回は2時間たっぷりお相手をしてもらったので、(もちろん、ダブルは全負けです... 2-6, 0-6, 2-2 で時間切れとかだったと思います) 違いを、聞いた話を含めて分析し、考察してみました。
1. ボレー
ボレーの基本は、振らず、当てるだけ、ってスクールで教わりますが、上級者でボレーを当てるだけの人ってあんまりいないですよね... もちろん、ローボレーは当てるだけかもしれませんけど。ただ振って飛ばすのではなく、押し出すように振るか、もしくは切るようにふってますよね (これはケースバイケースのようです。
2. サーブ
プロを目指すならいざ知らず、実業団レベル (いや、これでも十分すごいのですが...) では、いろいろなサーブを打てるようになるよりも、球種は1種類でいいから、センター、ワイドを正確に打ち分けられるボールを打つことに絞ったほうがよいそうです。スピードはさほど速くなくても、ファーストを確実に入れることができるほうがよいとのことでした。テニスの王子様を読んで、ツイストサーブを練習している場合ではないのですね。
3. ストローク
ストロークは確かに早いですが、特に試合中の球は打ち返せないほどではないです。ただ、確実で、ほとんどミスがありませんでした。試合中は、5割の力で打つとよく言われていますが、本当だったようです。また、バックのスライスと、フォアのトップスピンの緩急のつけ方が、とてもいやらしく (すみません...) かえすだけで精一杯で、すぐに前衛につかまってしまいました。確実性と緩急をつけるというところがポイントでしょう。
4. コートカバーリング
その日は腰をちょっと痛めていたそうなのですが、試合が始まるなり、猛烈ダッシュしてました
それはさておき、やっぱりコートカバー力と、そして、読みの力がまったく違いますね。コートが暗かったせいもありますが、黒豹のようなポーチでした。ポーチに出ると決めたときは、全力で躊躇せずに行うほうがよいそうです。抜かれたらそのとき。体がのびきってポーチでとっても、レベルが上がれば上がるほど、単なるチャンスボールになってしまうようそうです。
5. スマッシュ
スマッシュの練習ってあまりやりませんが、試合では必須だそうです。もっと練習すべし!といわれてしまいました。しかし、スマッシュ苦手なんだよな...
ってな感じです。ちょっとこれを念頭に入れて練習してみたいと思います。
Posted at 01:22午前 1 20, 2009 by kenji in テニスやってる人には見えない blog |
2009年 1月 19日 月曜日
無料オンラインコース: JavaFX プログラミング - 1月30日よりスタート!
SDN Program News Blog にあったのですが、JavaFX の無料オンラインコースが 1月30日より http://www.javapassion.com/javafx/ 開始されるようです。
1. javafxprogramming-subscribe-AT-googlegroups-DOT-com に空メールを送る
2. "Google Groups: Please confirm subscription to javafxprogramming" というタイトルで返信メールが英語で届きます。内容は、このメールに返信するか、メールの本文にある URL にアクセスすることで、最終登録が完了する、という感じです。
3. #2 の URL にアクセスすると、"You have successfully joined the group javafxprogramming" というページに飛びます。
これで、登録は完了です。いまいちよく分かっていないのですが、とりあえず読んで分かったことを箇条書きにしてみました。
1. 決まった日に、http://www.javapassion.com/javafx/ に決められた日に教材と課題が出題されます。
2. 教材を読み、課題をそのたび毎に決められたアドレスに投函します。
3. 分からないことや質問は、事前に登録した上記のグループに投函して、回答を得ます。
4. このオンラインコースの作成者 (講師) に質問することはできないようです。
5. 登録は、このクラスを取っている人の人数を確認するためと、alias に入ってもらい、クラスを取っている人同士で、質問等を解決するためのようです。
とりあえず、登録してみたのですが、はじまる前なのに、既にかなりの量のメールトラフィックがありますね。この alias 自体はクラスとは直接関係ないのかもしれません。
この blog でも、面白そうな課題があったら、報告していきたいと思います。皆さんも、是非、登録してみてください。
Posted at 05:04午後 1 19, 2009 by kenji in JavaFX の素人 |
2009年 1月 16日 金曜日
トップスピン
以前のハンズオンの課題のアニメーションで、「どうして、テニスボールじゃないの?」と言われて作成してみました。基本的にほとんど同じなのですが、背景にネットを使ったり、ボールにグラデーションをつけたりと、微妙に細工をしていています。
一応、ソースも貼り付けておきます。
package javafxapplication15;
import javafx.animation.*;
import javafx.ext.swing.*;
import javafx.scene.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.*;
import javafx.stage.*;
var interpolate = Interpolator.LINEAR;
var x = 0;
var y = 110.0;
var w = 10.0;
var h = 10.0;
var color = Color.LIME;
var opacity = 1.0;
var t = Timeline {
keyFrames: [
KeyFrame {
time: 0s
values: x => 0
},
KeyFrame {
time: 0.1s
timelines: [
Timeline {
keyFrames: [
KeyFrame {
time: 0s
values: [
w => 10.0,
h => 10.0
]
},
KeyFrame {
time: 0.2s
values: [
w => 15.0 tween interpolate
h => 15.0 tween interpolate
]
},
KeyFrame {
time: 0.4s
values: [
w => 40.0 //tween interpolate,
h => 37.0 //tween interpolate
]
},
KeyFrame {
time: 0.41s
values: [
w => 0
h => 0
]
}
]
}
]
},
KeyFrame {
time: 0.1s
values: x => 40 tween interpolate
},
KeyFrame {
time: 0.3s
values: x => 150 tween interpolate
},
KeyFrame {
time: 0.5s
values: x => 500 tween interpolate,
}
]
}
var t2 = Timeline {
keyFrames: [
KeyFrame {
time: 0s
values: y => 110
},
KeyFrame {
time: 0.3s
values: y => 350 tween interpolate
},
KeyFrame {
time: 0.5s
values: y => 150 tween interpolate
}
]
}
var buttons =
HBox {
content: [
SwingButton {
text: "Start"
action: function():Void {
t.playFromStart();
t2.playFromStart();
}
},
SwingButton {
text: "Stop"
action: function():Void {
t.stop();
t2.stop();
}
},
SwingButton {
text: "Pause"
action: function():Void {
t.pause();
t2.pause();
}
},
SwingButton {
text: "Resume"
action: function():Void {
t.play();
t2.play();
}
}
]
}
var ball = Group {
content: [
Ellipse {
centerX: bind x
centerY: bind y
radiusX: bind w
radiusY: bind h
fill: LinearGradient {
startX: 0.0,
startY: 0.0,
endX: 1.0,
endY: 0.0,
proportional: true
stops: [
Stop {
offset: 0.0
color: Color.YELLOW
},
Stop {
offset: 0.1
color: Color.YELLOW
},
Stop {
offset: 0.2
color: Color.WHITE
},
Stop {
offset: 0.3
color: Color.YELLOW
},
Stop {
offset: 0.7
color: Color.YELLOW
},
Stop {
offset: 0.8
color: Color.WHITE
},
Stop {
offset: 0.9
color: Color.YELLOW
},
Stop {
offset: 1.0
color: Color.YELLOW}
]
}
opacity: bind opacity
}
]
}
var canvas =
Scene {
fill: Color.WHITE
content: [
VBox {
spacing: 10
content: [
ImageView {
image: Image {
url: "http://blogs.sun.com/kenji/resource/court.jpg"
}
},
buttons
]
},
ball
]
}
Stage {
width: 600
height: 500
visible: true
scene: canvas
}
Posted at 11:55午前 1 16, 2009 by kenji in JavaFX の素人 | 投稿されたコメント[2]
2009年 1月 12日 月曜日
WidgetFX を使ってみました。
片貝さん から、WidgetFX ってちょっと使ってみてくれない?とお願いされたので、ちょっと使ってみました。なかなか面白そうなツールですね。
Widget FX は、JavaFX ベースのウィジェット (Windows ではガジェットと呼ばれる) を作成するための SDK です。使い方は簡単ですが、ドキュメントがあまりそろっていないような感じなので、この blog を書くのにはちょっと時間がかかってしまいましたね。でも、やり方さえわかってしまえば、JavaFX のアプリケーションを書く感覚で、ウィジェットを作成できるので、とても面白いと思います。
widgetfx のページから、SDK をダウンロードして解凍しておきます。SDK の中身は WidgetFX-API.jar と javadoc と LICENSE ファイルだけです。
2. NetBeans で、適当な JavaFX アプリケーションプロジェクトを作成する。
3. Libraries を右クリックして、「Add jar/folder」を選択する
4. #1 の WidgetFX-API.jar を追加する
Widget クラスでの、表示に関する処理は、 skin で定義されるようです。なので、skin の中で、表示するコンポーネントを scene で定義します。この scene は、Stage クラスの scene とは違い、Node 型で、直接 Swing コンポーネントなどを定義できます。(この辺りの仕様がちょっとよくわかりませんでした。ただ、ソースをみていただけば、なんとなくどうやって作るのかは感じがつかめるかと。
package javafxapplication7;
import javafx.scene.control.Skin;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import org.widgetfx.*;
Widget {
width: 100;
height: 100;
visible: true;
skin: Skin {
scene: Text{
y: 15
content: "Hello World"
fill: Color.GREEN
stroke: Color.RED
font: Font{
name:"Verdana"
}
}
}
}
これを、Web Start 形式 (JNPL) ファイルとしてビルドします。やり方は 片貝さんの blog の参照してみてください。また、同様にアプレットでも実行し、その web アドレスを保存しておいてください。後でウェジットを追加するテストの際に、そのアドレスを使用します。(私の場合は、http://localhost:8082/servlet/org.netbeans.modules.javafx.project.JnlpDownloadServlet/C%3A/Users/tkenji/Documents/NetBeansProjects/JavaFXApplication7/dist//JavaFXApplication7.html でした。)
ここで、先ほど作成した JNLP ファイルを追加するのですが、NetBeans が作成する JNLP のコードベースは、アプレットで実行したときと同じパスになるので、とりあえず、そのパスで追加します。
私の場合は、
http://localhost:8082/servlet/org.netbeans.modules.javafx.project.JnlpDownloadServlet/C%3A/Users/tkenji/Documents/NetBeansProjects/JavaFXApplication7/dist//JavaFXApplication7.jnlp
となります。
これで追加は完了です。ついでに、 Widget FX にあるサンプルもいくつか載せてみました。

それぞれのウィジットをドラッグ & ドロップで、デスクトップの好きな位置に配置することもできます。このときは、ウィジットの透明度を変化させられるスライドバーがつきます。この辺りもちょっと面白いですね。

最後に、お気づきの方もいらっしゃるかもしれませんが、上の方法だと、Hello World のウェジットは、NetBeans が起動している状態でないと、再起動に失敗します。なので、常に作成したウェジットを起動したい場合には、JNLP ファイルのコードベースを変更して、ローカルなりネット上なりで、起動できるように変更しておく必要があります。(NetBeans からコードベースの設定とかもできるといいんですけどね... ちょっと見た感じではなさそうでした。)
これを使えば、既存の JavaFX のアプリケーションも簡単に、ウェジットとしても使うことができそうですね。
Posted at 02:02午前 1 12, 2009 by kenji in JavaFX の素人 |
2009年 1月 10日 土曜日
1/8 : 初打ち
横浜庭球部の初打ちを、1/8 にやりました。参加者は... 2人。寂しいっすね。場所はオフィスの近くの「瀬田中学校」でした。ちょっと狭いような気もしましたが、まずまずのコートです。このとき、相手の方から言われたのですが、ストロークが以前 (バボラ時代) より、フラット気味で飛んでいるようです。確かに以前から、グラファイトでは、スピンがかからない、というのではないのですが、その質が変わったような気がしていました。ボールは落ちることは落ちるのですが、弾んだあと、跳ねないような気がします。これってやっぱり、回転数は落ちているってことでしょうか?球の重さやスピードはその分、速くなったような気はするのですが、相手にとってあわせ易くなってしまったかなぁっと。なので、「パン」とカウンターで食らうと、ほとんどノータッチエースでやられていましたね... 回転数の多い球を打つには、ちょっと打ち方を変えないといけないかも。
Posted at 01:45午前 1 10, 2009 by kenji in テニスやってる人には見えない blog |
2009年 1月 07日 水曜日
1/4 シングルス - またもや2回戦敗退...
1/4 に、通っているスクールのシングルスの大会がありました。ラケットも新しくしたし、今度こそいい成績を... と思ったのですが、またもや2回戦敗退です。しかも、ダンゴってやつで負けてしまいました。まあ、ちょっと相手の方がうますぎた感はありますが、それにしても、うまくならないっすね... こんなに練習しているのですが。
ただ、今までは、「サーブが悪い」とか、「フォアの強打が決まらない」と具体的な技術面での不足が目立ったのですが、今回に限っては、「体力」が一番だめだった原因ですね... 第1試合で、ヘトヘトになってしまいました。これは、かなり情けない... ということで、当面、持久力アップを目標にがんばろうと思います。とはいうものの、走りこみとかは、この歳になると結構つらいので、階段の下りを歩いています。私のオフィスは 21F にあるので、そこから 1F までを仕事の合間に休憩がてらゆっくり歩きます。これが結構効くんですよねー。めちゃめちゃ筋肉痛です。次の試合までに、何とかもう少し体力がつくといいなぁー
Posted at 11:46午後 1 07, 2009 by kenji in テニスやってる人には見えない blog | 投稿されたコメント[2]
翻訳: イメージの奥行き
Vaibhav's Blog Space より、イメージの z 座標 (奥行き) についての blog の翻訳です。
While writing some of the samples in which we have to play with images, we sometimes has to manage the depth of the images. Like for the Carousel example, every image has a depth. In that example, actually images are not overlapping with each other, so we never need to write the Z-Order concept. But if someone want to write a Carousel or some application in which Images are residing over other images, we need to set the Z-order of Images. Z-Order in literal term means depth-ness of images. JavaFX gracefully provide API's to set the Z-order of images. With a simple call, you can set the images toFront or toBack features.
----------------
イメージを使ったサンプルをいくつ書いていると、イメージの「奥行き」を考慮したくなるときがあります。たとえば、 回転木馬 のサンプルの場合、すべてのイメージは、「奥行き」を持っています。ただ、この例の場合は、イメージ同士が重なりあうことがないので、Z 軸に関してプログラムを書く必要がありませんでした。もし、この回転木馬の例で、または、ほかのアプリケーションで、イメージが重なりあうようなものを作りたい場合には、Z 軸の位置を指定する必要があります。toFront または toBack 関数を使うだけで、簡単に指定できます。
In this example, I have taken 3 images and try to set the depth-ness of images on the event of Buttons.
------------
この例では、ボタンのイベントを使って、3つのイメージに「奥行き」を設定しています。

最初のイメージが上 2番目のイメージが上

3番目のイメージが上
Here is the code to set the Z-Order :
---------------
以下がコードになります。
package zorder;
import javafx.scene.Group;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.paint.Color;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Rectangle;
import javafx.scene.input.MouseEvent;
import javafx.ext.swing.SwingButton;
var im1 = ImageView {
x: 100
y: 100
image: Image {
url: "{__DIR__}im1.PNG"
}
opacity: 0.8
};
var im2 = ImageView {
x: 130
y: 130
image: Image {
url: "{__DIR__}im2.PNG"
}
opacity: 0.8
};
var im3 = ImageView {
x: 160
y: 160
image: Image {
url: "{__DIR__}im3.PNG"
}
opacity: 0.8
};
var gp = Group {
content:[
im1, im2,im3
]
}
Stage {
title: "Application title"
width: 400
height: 400
scene: Scene {
fill: Color.BLACK
content: [
gp,
SwingButton {
translateX: 10
translateY: 10
text: "Image 1"
action: function() {
im1.toFront();
}
}
SwingButton {
translateX: 90
translateY: 10
text: "Image 2"
action: function() {
im2.toFront();
}
}
SwingButton {
translateX: 170
translateY: 10
text: "Image 3"
action: function() {
im3.toFront();
}
}
]
}
}
Posted at 10:53午後 1 07, 2009 by kenji in JavaFX の素人 | 投稿されたコメント[2]
2009年 1月 06日 火曜日
明けましておめでとうございます。
明けましておめでとうございます。
今年も、JavaFX と テニス、時々、アクセシビリティの blog を書いていこうと思います。
JavaFX の方はそれほど大きな動きはなさそうですね。やっと、1.0 及び 1.0.1 を出して、ちょっと一息といったところでしょうか。静かなうちに、Message Queue と JavaFX をつなげて、簡単なアプリとかつくれたらなと思います。
Posted at 07:36午後 1 06, 2009 by kenji in General |