2010年7月31日土曜日

イスタンブール

ゲルゼンキルヒェンに続いて(今ギルゼンキルヒェンって打ってしまった)、ベシクタシュのあるイスタンブールを調べてみた。トンデイスターンブーウルーでなじみの深いあの都市。

ゲルゼンキルヒェン〜イスタンブール:2549km、1日と4時間

大きな地図で見る

イスタンブール〜マドリード:3560km、1日と15時間

大きな地図で見る

ゲルゼンキルヒェン

シャルケ04のある都市の名前だが、全く頭に入らない。覚えられない。どうも私の思考回路に馴染まない序列か組み合わせのカタカナのよう。

そういえばドイツ在住の方のブログを以前拝見したことがあったなあと思い出し、確かそれはフランクフルトだったなあなどと回顧しながら、フランクフルトをググると地図が出てくる。ここまでは普通だが、驚いたのは日本語表示されること。すごいなあグーグル。
じゃあルート検索は?ということで、フランクフルトからゲルゼンキルヒェンまでのルート検索をしてみると、出る。車(2.5時間)、徒歩(2日)。すごいすごい。残念ながら電車は出ない。電車が無いのか、鉄道情報がないのかは不明だが、そのうち対応されるのだろう。名が体を表す日も近い。

じゃあひょっとしたらマドリード〜ゲルゼンキルヒェンはどうかというと、出るじゃん。しかも2ルート。マドリードも日本語だ。すごいすごい。でも合ってるのかな?

こうしてゲルゼンキルヒェンって何回も書いてたら覚えるかと思って。ほう、確かに少し頭に入ってきた気がする。 (21:15追記)やっぱり全然入っていない。


大きな地図で見る

2010年7月29日木曜日

トルコいろいろ

1. 世界遺産が多い。数が本当に多いかどうか知らないが、そんな記憶がある。もちろん実際にいろんな世界遺産がある。

2. 日本と親交が深い。歴史的にトルコ人が日本人にやさしくした事件で、トルコ人は日本にとても良い印象を持ってくれているとか。確か2002年日韓W杯のベスト16で対戦した際、TVで放送されていたのを覚えている。

3. ロベルトカルロスもレアルマドリーを出た直後、トルコのフェネルバフチェに移籍したが、このときのフェネルバフチェの監督が日本サッカーに偉大な貢献をしたブラジルの英雄、ジーコである。しかもCLでベスト8というクラブ史上2度目の快挙を成し遂げた。

4. グティがベシクタシュに入団。2年契約。今度はグティ+シュスターでベシクタシュがベスト8(もしくはそれ以上)に進出する番だ。

背番号7はチームのために。

この記事より引用:
「ゴールを決めるに越したことはないが、僕の目標は個人的な記録ではなくチームの成功だ。僕はこれまでもそうやってプレーしてきた。」

チームのエースナンバー7に最も求められる資質。ワクワクしてきたぞ。

予言ダコPaul君とスペイン元代表Raulの 不思議な関係

Paul 君のPに足を一本つけると、あら不思議、Raulに。
Paul君に送られたスペイン代表ユニフォームの背番号は、足の数にちなんで8。でもあら不思議、Raulに一本取られた足を引くと残りは7。なんとRaulのスペイン代表時代の背番号と同じに。

今回のW杯では代表入りできなかったRaulですが、その心はPaul君を通じて代表に届いていたのかもしれない。

2010年7月28日水曜日

RTSP

AXISの270というネットワークカメラでRTSPを試してみたが、うまくいかない。QuickTimeからURLを指定すると、ちゃんと映像が出てくる。残念。

簡単に出せればVideoCubeに載せて、ユーザの視点をちょっと変えてみせる、ちょっと楽しいデモが出来ると思うのだが。

http://javafx.com/docs/articles/javafx1-2.jspを見ると1.2からRTSPに対応してあるような気がするが、ここに載ってるサンプルのストリーミングはWindowsでもMacでもダメだったし、コーデックが何かも書いてない。

非常に残念だが、もう少し腕を上げたら最悪Javaに踏み込むつもりでやってみたい。

(2010.07.30追記)
参考ページ ver1.2 ver1.3
RTSPに関しては更新なし。ただ3ヶ月しか間がないので、今後のユニバーサルな(クライアント環境によらない)対応に期待するのみ。可能かどうかは分からないが。何れにしても、前述の通り、頑張って行きたいし、ある程度目処がついたらWindows系で仮設して、デモできる環境には持って行きたい。ひょっとしたらMac系も簡単なのかもしれないが、Windows Media Encoder + Windows Serverのほうが簡単そうに見える。

問題はWindowsだとつい色気がでてすぐレガシーなビジネスにバインドしようかいな的な思いがもたげてしまう点。気持ちは分かるが、それは絶対失敗するのでやめようと肝に命令。

スペインの至宝、ドイツへ。

シャルケ04に2年契約で決まったらしい。EPSN@Yahoo!にて。

ついにスペインの至宝がドイツに渡る。のか?

シャルケ04公式サイトになかなかつながらなかったが、ようやく。ただドイツ語らしき文章が全くわからず。Raulの写真が掲載されているものの、果たして本当に決まったのか、もう少しすればはっきりするだろう。英語版にはまだ反映されていない。(2010.07.28 23:50追記)出ました。英語版。きれいな青、なるほどRoyal Bluesですか。ユニホーム姿が待ち遠しい。(2010.07.28 23:50追記)


だがGoogle翻訳を使うと、広告のような画面が画面全体を覆う大きさでオーバーラップしてくるのだが、そのXボタンがGoogle翻訳の機能と被って閉じれず、翻訳が読めない。このときばかりと17インチを生かして横いっぱいに広げ、何とか読むことが出来た。察するにESPNのインタビューと同じような監督さんのコメントが掲載されているようだ。ということは確定と思って良いのかも。

ところで、シャルケ04には日本から内田選手が入ったので、日本語化される可能性もあると思う。ぜひそうなってほしい。自分は見る機会が代表でしかなかったせいか、あまりタイプの選手ではなかったが、W杯でベンチだったにも関わらず、去年CL決勝に行ったバイエルン擁するブンデスで2位のチームに移籍したのだから、相当評価されていることに疑いはない。きっと大活躍するだろう。

2010年7月27日火曜日

ラウル、君の勇気に。


感激しました。

あと何年、どこでプレーするにせよ、プレイヤーとしてのラウルを観続けることができる喜びをファンに与えて続けてくれる道を、選んでくれたのですね。

ファンとして、マドリーに残ってくれることは、何にもまして嬉しいことだと思っていたけど、それ以上にやはり選手としてのラウルを観たい。これが真実でした。でもそれは、あなたの勇気がなければ、叶わないこと。すべてのサッカー選手に言えることです。サッカー選手として在ること。その勇気が、私たちに感動を与えてくれるのですね。

私は精一杯、それを感じたいと思います。それが唯一、私に出来る恩返しだから。

今はとても悲しい。でもあなたが、グティが、素晴らしいサッカー選手達が再びピッチに戻って来た時、精一杯応援できるよう、私は私に出来得る全てを全うしながら、その時を待ちたいと思います。

今まで本当にありがとう。そしてこれからも。




p.s.
ファーポコ*レアル・マドリー様、素晴らしい日本語でのニュース配信、ありがとうございます。元のソースと思われるAS.COMの記事をメモとして。

as.comより引用:
Este último año la gente me ha visto de muchas cosas menos de jugador, que es como quiero que me vean.

自分なりに辞書で引いたヘンテコな訳:
最後の1年、人々は選手として僕を観られる事はとても少なかったけど、僕はもっと(選手である姿を)見てほしいと望んでいる。

2010年7月26日月曜日

ぜんぜん実感がわかない

ラウル・ゴンサレス・ブランコ


今日、現地時間13:00、日本時間20:00から会見がある。とばかり思っていたら、送別会と会見となっていた。送別会ということは、引退か、移籍か。いずれにせよもうマドリーのユニホーム姿を観ることはできないことが、悲しくも確定した。もしラウルの退団が決まったら、まず私は泣くと思っていたが、彼がいなくなる事実が予想に反して少し早く発表されたことで、それを事実として受け入れやすくなった気がする。驚いたせいもあるし、どこに行くか、グティもはっきり言わなかったように、まずマドリーを去るという事実だけを受け入れるということは、とても大切なことだというのが分かったことが大きい。

もし本当にシャルケ04に移籍したら、CLで決勝に行ってほしい。そして優勝してほしい。

バルセロナとスペイン代表の活躍で、世界中が彼らのサッカーを目標にするようになったが、シャルケ04にはぜひ、スペクタクルなサッカーではなく、それを超える芸術的なサッカーを見せてほしい。ラウルのサッカーは本来、そういうサッカーだから。そうすれば彼自身、自分を取り戻すはず。そうしなければ、そういうサッカーはできないから。

芸術的なサッカーとは何か。言うまでもなく私見であるが、では私にとって芸術とは何か、芸術的とは何を指すのか。


私にとって芸術とは、発見であり主張だ。例えば世の中のあらゆる事象は、例え人が発明したものであっても、実は初めからそこにあり、見つかるのを待っているにすぎない。発見とは人が(知り得る)他者に先駆けて新たな事象を認識することだ。そして主張とは、その無限の事象から1つを選択することである。人は多くの事象を目撃し、体感し、見逃す。そして時に完全に無視するかと思えば、完璧に執着もする。意思が人であるなら、黙っていては何も伝わらない。伝えたいかどうかも含めて意思であるが、意思をもって何かを伝えようとするとき、無限の事象から1つを選択する行為がそこで生まれる。それが他者がまだ見ぬ発見であるとき、それは芸術になる。

だとして芸術的とは何か。サッカーはゲームだ。そこで選手個人が私のプレーは芸術だと言えば芸術になり得る。しかしそんな選手はいない。だが、はたから観てそれが芸術に映ることがある。まるで芸術のようだ。こう表現したいとき、それは芸術的ということである。


ラウルのサッカーとはまさに芸術的である。彼のプレーは、ジタンのような華麗なプレーとはほど遠いスタイルでありながら、他者には無い、目を疑うプレーの連続である。確かに近年、特にイエロが追われる形でマドリーを去ったがために第一キャプテン(*)にならざるを得なくなってからは、何か彼の内面に、サッカーに没頭出来ない集中力の減少を感じている。葛藤。矛盾。違和感。年々そうしたものが、ある種衰えとして見なされがちだったが、それ以上に精神的なものではないだろうかという思いに2年前、彼のゴールパフォーマンスが決定的な裏付けを与えた。若い頃のように自分の背中の名前を両手の親指で示す、あれである。聞くところによると、お子さんがそれがいいと言ったからということらしいが、定かではない。だが自分を誇示するようにも見えるパフォーマンスは、全く誇示する必要のない彼に対して、もの凄く不釣り合いに映る。


もしマドリーを離れることで、自分らしさを取り戻すことができれば、かつての芸術的なプレーの連続で、ファンを魅了するに違いない。特によく言われるゴール前へのワープより、私のお気に入りは、相手選手に向かって敢えて突進していくプレーだ。彼は滅多にドリブルをしない。少ないタッチで軽々とボールを動かし、ゲームをコントロールする、ポゼッションの申し子のような動きが得意だが、時にポストで受けて静止し、そこからひと呼吸置く間に3人ほど背中に抱えたかと思うと、くるっと反転し、相手の間に強引に体をねじ込んでくぐり抜けていき、実にヘンテコな体勢でボールをゴールに押し込む。またこのボールに勢いが全くないのにキーパーが取れないから凄い。こんな観ている側の心臓が止まりそうになって後からどっと歓喜が押し寄せるプレーは、他の誰にも出来ない。





*レアルマドリードでは、キャリアの長い順に第1〜第4キャプテンになる決まり(伝統)があると聞いている。

ラウルの送別会?

送別会? 送別会なの? 会見だけじゃなくて。ということは、ラウルはいなくなるということ?

無駄に気を持たせるより、早く分かった方がよかったのかもしれない。

2010年7月25日日曜日

グティ、元気で!


本当にグティが去ってしまった。若手にチャンスを譲る、カンテラーノの引き上げをお願いしたい。そう言い残した永遠のマドリディスタ、グティ。このクラブで引退出来ない悲しみの深さは、辿り着いた者達にしか分からないだろうが、ファンは悲しんでいるし、彼にも痛いほど伝わっている。


彼の代わりはどこにもいないが、いつか彼のような誰も持っていない魅力を持つカンテラーノが現れる日が来たら、私も戻ってこようと思う。

ありがとう、グティ。そしてこれからもよろしく。君は永遠のアイドルだ。

VideoCube 5

さて。

細かい話は飛ばして、Styleの中にFaceが6個定義されていて、そのうち1つはstartVideoURL、その他は何もセットされてないので、くるくるアニメーションが動くことになるはずだが、まだ具体的に理解できていない。errorという変数の名前がよくないと思う。自分本位に言えば、errorは恐らくnoMediaとかになるべきで、場合によってはerrorはerrorで必要かもしれない。

次はFaceだが、その前に、Stageの下にコードがある。rotationである。こうやってコードがあちこちにあると、なんだよなあってことになる。そこでStageの上に移動。ついでに先頭(importの下)にあったdefも軒並みclassの下に持ってきて、あれ。エラー? なんとdefをclassの中でbindしてるじゃないか。とりあえず変数はclassより後で宣言しても問題ないが、そういう問題じゃないほうが問題ではないのか。classの中で何処に有るともわからんちんの変数をbindしたらってことは、あ〜クラス変数ってこと? でもないか。そもそもJavaFXにクラス変数は無いようだが、現時点では定かでない。とにかく、相対的にクラスよりグローバルな変数にbindできるということは便利だというか、そうできないと困ることが多そうだし。まあ現時点では作法的な問題は無視できるので、置いておこう。ただもう少しbindの位置関係が分かりやすい方法というか、混乱しないうまい方法があれば、良いと思う。

話は飛ぶが、マウスポインタの解説を読ませていただいて、気づいたこと。

マウスポインタの位置を取得するには次のようにすると良い。

var point:PointerInfo = MouseInfo.getPointerInfo();
var x: Number = point.getLocation().x;
var y: Number = point.getLocation().y;

ここでJava知らずな私としては、MouseInfo.getPointerInfo()のインスタンスは何処にいるのか?と。そうすると思いつくのは「その辺にある」ということ、つまりテンポラリなものが自動的に展開されてメソッドが呼ばれ、結果としてきっとPointerInfoというクラスのインスタンスが返るのだろうと。じゃあひょっとしてx,yをいきなり取れるのかと思いたくなるのが人情というもの。

//var point:PointerInfo = MouseInfo.getPointerInfo();
var x = MouseInfo.getPointerInfo().getLocation().x;
var y = MouseInfo.getPointerInfo().getLocation().y;

本当は結果を確認するのにマウスの位置に座標を文字(背景なし)で表示したかったが、いまだそんなことがすぐ書ける訳でもなく、

println("{x},{y}");

でw。

できるじゃないですか。なるほど。でも最初MouseInfo.getPointerInfo.getLocation().x;と()なしで書いたがエラーになってしまい、getLocation().xと書かれているのを見て、あ、()要るのね、ということに気づいた。じゃ逆にgetLocationで切ったら?

var loc = MouseInfo.getPointerInfo().getLocation();
var x = loc.x;
var y = loc.y;

書けるじゃん:D
最初lこのgetLocation()が返す型が分からんと思い、ググろうとして、あ、JavaFXはデフォルト省略できるから・・といきなり=してみると、おお、うまくいくじゃないかすごいすごい。おまけにvar x = loc.とドットを打ったところでコード補完が表示され、java.awt.Pointらしいということも判明。今回は特にコードを書くことの直接の役には立ってないが、理解が深まるという点で大いに役に立ったし、とても助かった。やるなNetBeans、いつかDogBeansを作ってやろうという野望が再燃したことは言うまでもない。

気になるのはどの書き方が良いのかというより、マウス座標のx,yは同時に同じ座標を指してなければならないのは言うまでもないので、xとyが別々の座標、つまりxを取ってる間にマウスが動いてからyを取ってしまうことの無いよう気をつけたい。今回のようなケースではまず起こり得ないだろうが。

ホセ・マリア・グティエレス


今日、現地時間13:00、日本時間20:00から会見があるらしい。

何処へ行こうと、彼の活躍を期待したい。もしベシクタシュなら今年CLには出れないが、優勝して来年こそはCLで活躍する勇姿が見れることを願っている。

誰にも真似出来ない幻想的なプレーをする、唯一のサッカー選手だと思う。勝利にこだわるサッカーでは、ときに重要視されないことだが、サッカーはゲームだ。10人の壁と壁の対戦など、誰も観ないように、観る者を魅了することそこが最も重要だという点で、私の中では彼がベスト11の1人である。

彼という偉大な選手を輩出したマドリーには最大限感謝している。

2010年7月23日金曜日

VideoCube 4

だいぶ要素が馴染んできたところで、もう一度トップダウンから見ていこう。

まずStageが1個。

style: StageStyle.TRANSPARENT
resizable: false

StageStyleには他にもあるが、TRANSPARENTだとVideoCudeだけがくり抜かれたようにウィンドウ枠も背景もない状態で表示されて楽しい。だがドラッグはできなくなる。自分で実装する必要があるとしたら面倒だが、blocksMouseのせいかもしれないと漠然と思ったりしてみたが、そもそも自分でドラッグしたら回転させようとしているのだから、そのままでは無理だろう。せめて右ボタンに移動を割り当てるとかが簡単にできると有り難いのだが。他にも終了やリサイズなど、ウィンドウタイトルで操作してるようなことを、TRANSPARENTの場合は右ボタンでできるようになると、こうしたくり抜き型のウィジェットが氾濫するデスクトップが簡単にできて楽しそうだ。すぐ飽きるかもしれないが。だがアプリ毎に書くとしたら相当CO2を無駄にしてしまうので、何かコードファームから簡単にimportできるようになってると有り難い。だが探すのに苦労するようだと困る。こういうわがままを簡単かつスピーディに解決してくれるスマートヘルプを早く展開したい。多少出来損ないでも、きっと楽しいサービスになると思う。

さて。

このところグティとラウルの去就がはっきりする日が近づいてきて落ち着かない。そのせいかまた、他のいろんな技術情報が気になってしまう。集中したいとは思うが、これらがはっきりするまでは無理だし、もう何日もないことなので、それまではこの調子でいくしかない。

VideoCube 3

ブログも複数回に股がるエントリーが簡単にかければいいのに、と思う。

なぜ分けるのか? 分けたいのか?

1. 長過ぎるのは何か嫌。
2. まるごと消してしまいそう。
3. いつ続きを書くか分からないが、続きを書きたいことがある。

タグで表示してもいいが、それだと「次のページ」ボタンが付かない。


さてPerspectiveTransformでVideoCubeはどうなのかというところを見ていきたい。Face.createでGroupが宣言されており、Faceの変数で定義されたPerspectiveTransformをこのcontentに入れたPoligonのpointsにbindしている。

Poligonとは何か? 要するに任意の点で書く図形のよう。APIリファレンスの例では3点(三角形)だが、VideoCubeは4点(四角形)。Rectangleでダメな理由はまだ分からない。が、面を繋ぐのが大変だからか?

だんだん理解できない領域に入ってきた。Face自体はStageの中で6面定義されているが、その各面の座標はful..bllの8つのPointから選択されている。

あ〜なるほどなるほど! やっと分かった。Cubeの頂点は、結局前面と背面各々の4つの頂点で構成されることになるわけか。四角い紙を2枚用意して、各々の点を結べばCubeになる。なるほどね〜。恐れ入りました。頭良いみんな! だから6面で合計24点あるけど、隣同士は同じ頂点だから、結局この8点のうちのどれかになるわけだ。それでこの8点を定義してから、各面の点を表現するわけだ。あーすっきりした。

だがまてよ。それ以外は特に解決してないぞ。

2010年7月21日水曜日

VideoCube 2

この先どう見ていこうかしばし悩んだが、三角関数をググってみるとWikipediaの親切な説明が。なんだ三角関数、なかなか分かりやすいじゃないか。 だがまてよ。どうして直角にこだわるのだ? 結局3つの角度が分かれば、辺の割合が分かるわけだから、そうしたユニバーサル(汎用的・普遍的)な関数が あってもいいはずだ。例えば正三角形は1:1:1だとか。2つの直角三角形に分解すれば・・・あ、なるほど。だから直角三角形のケースが分かれば、他のど んな角度にも応用できるというわけか。失礼しました。

何となく公式は見た、というところで、三角関数がサイコロくるくるにどう生かされるのか、全く想像できないところでコードを見ていくことにする。

まずPointというのはx,y,zを持つ。つまり3次元上の1点をさしている。これをFaceクラスの中で、ul,ur,lr,llという4つの変数に 展開している。名前からupper-left,upper-right,lower-right,lower-leftだろう。すなわち左上、右上、右 下、左下という風に4つの点をトレースしているイメージで宣言しているように思われる。だがこれがそのままサイコロを描いているようには思えない。どうも 3次元というのはイメージしづらいが、この中でzがズレたら変形したサイコロになるし、x,yで正方形が描けている保証もない。

def z = bind ul.z + ur.z + lr.z + ll.z;

でFaceの持つz座標が4つのPointの和になっている。それぞれの点の奥行きの合計・・・ますます分からなくなって来たが、まいっか。

戻ってFaceクラスを頭から。

var source:String on replace old {

置換トリガ。ってなんだっけ。な るほど、設定イベントハンドラみたいなもののようだ。
ということでsoueceに設定されたら?何するのかというと、値が違う場合のみ、errorをクリア(false)し、mediaに新規にインスタンスを設定する。その内容は、sourceにsource@自分(Faceのインスタンス変数)、onError関数に"Loading error"と出すための関数をセット。か。じゃあ誰がsourceを(再)設定するのか。まずStageで宣言したFaceのインスタンスの1つをstartVideoURLで初期化する時と、面をクリックしたときにファイル選択して設定する時。この面をクリックしてというのは、実際動かしてそうなっているので分かっているのだが、onMouseClickedの処理自体はまだ理解していない。場所もなんでここなの?という状態な今。

続いて前出のdef z。
def z = bind ul.z + ur.z + lr.z + ll.z;

何やら変数。
var start:Number;
var length:Number;

をっとここでTimeline登場。タイムラインとは? なるほど。これはとても分かりやすい。というか、今までアニメーションに注意が行っていなかったが、今回はその辺、読む側の姿勢が違う。ただatの書き方はこちらを参考にした。

def animation = Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames: [
at(0s) { start => 90; length => 0 },
at(2s) { start => 90; length => 360 },
at(4s) { start => 450; length => 0 }
]
}

このat()の時間をいじってみると、ビデオ以外の各面のくるくる回る時間のようだ。
だがstart=>90が2回連続しているのは合っているのだろうか? start,lengthが何か分かってないので何とも言えない。見たところ角度のようだが。

def animate = bind z > 0 and error on replace old {
if (animate != old) {
if (animate) {
animation.play()
} else {
animation.pause()
}
}
}

またこの怪しいbind。そしてon replace。
だがbindはそこに含まれる変数が変わったら実行されるという単純なルールなわけだから、zかerrorが変わったらz>0 and errorが評価されてanimateに設定されるということだろう。そしてそのときon replaceが働くので、animateが変化したら何か処理する。何かというと、trueならanimation.play、falseならanimation.pause。このanimationは直上のくるくる。
ただこの条件が解せない。errorがonならくるくるするのはいいが、このときz>0じゃないとダメだ。zが0以下がどういう時かというと、どういう時?

zが設定されるのは、bindによる効果のみ。つまり、ul..llのzが変化したとき、その和になる。見えている面のことか。いや最大で3面しか見えないから違う。

(2010.7.28追記) Faceは面1つだから見えてる面が3つとか、関係ない。ある1つの面=Faceの四隅の座標のzが0、ということは奥行きがないので、ということなのだろう。ただしそれで(PCの画面の)正面から見えなくなるというのは良く分からないというか、zの基準がよく分からないと言った方が良い。ただ逆を言えば、z>0のとき面が見えるような座標にになるよう、各面が配置されているはず、ということ。この辺の理解は全体としては多少進んでいるが、まだ下書きな状態なので、zのことも含めて分かれば、ここでの条件の意味も分かっていることだろう。(2010.7.28追記)

その先を見ていくと、PerspectiveTransformのulx..llyにul..llをbindしている。で、PerspectiveTransformを見ると、なるほど。といってもまだ半分ぐらいしかピンと来ないが。APIリファレンスの例を見ると、Groupに対してeffectにPerspectiveTransform指定している。多分このGroupに入れたcontentにeffectが掛けられるという仕様なのだろう。この例では、RectangleとTextが入ったGroupに4つの頂点の座標を指定している。これがulx..llyであり、ul..llが対応するものになるわけか。で半分というのは、RectangleとTextの例は分かりやすいが、VideoCubeに対するPerspectiveTransformというとどうなのよ?ということ。Rectangleだと4つの点がそのまま四角の角に対応するけど、VideoCubeの場合のイメージがまだ出来ない。ちなみにPerspectiveは遠近法とかの意味があり、ま、普通の3Dというか、ナビの鳥瞰、ダンジョンの通路、みたいな感じで思っている。ただ最初に浮かんだのがEclipseのパースペクティブ。Eclipseは使ったことがないが何故かパースペクティブがどうとかいう噂は耳にしたことがあり、私をEclipseから遠ざけているバリアの役目を果たしている。だから妙に記憶に残っているのだ。

ところでNetbeansでrの検索をしようとしたら、検索プロセスとやらが一向に返ってこなくなってしまった。netbeansを終了しようとすると検索プロセスが終了しますけど?と聞いてくる。再起動した後再現しないが、まず起動直後だと検索のダイアログがポップアップではなく、コードエディタの下に張り付く格好で出てくるのが違う。ここで「使用状況を検索」とやった後検索するとダイアログがポップアップするようになり、この状況でrを検索すると、返ってこなくなる。これは頂けない。あと頂けないついでに言うと、ポップアップメニューが表示された状態で他のアプリに移っても、ポップアップメニューが最前面に表示されてしまい、非常にうざったい。これを解消するには、またnetbeansに戻って関係ない場所をクリックして消してこなければならないのだ。どうしてこうなるかと言われると困るが、使用状況の検索をしようとして、関連情報を検索したくなるとか、だろうか。今度また起きたら、状況を確認しておこう。

2010年7月20日火曜日

ボンベイサファイア

ジンというアルコールがどんな味か忘れてしまったので、思い出しがてら買ってみた。1565円は安いと思ったこともある。その昔は5000円ぐらいしてたような気がする(が定かではない)。本当はワイルドターキー8年を買いにいったのだが、1500円だと思っていたのが2000円近かったこともあり、迷った末、夏らしい美しいボトルという理由で選んでしまった。しまった、というからには後悔であるが、たまにはずすことで当たりを再認識するというのもまた・・・言い訳である。バドワイザー6本+枝豆という選択肢もあったが、今回は脳天に響く心地よい刺激というのが求めていたものだったので、その点では47度のこれも悪い訳ではない。

VideoCube

とにかくサンプルコードを見ていくことにした。まずはVideoCube

378行。1ファイル。VideoCube.fxしかない。378行しかない。空行もコメントも入れてだ。驚き。いまさら何を言う。

さてサンプルコードを見る目的は、体で覚えるためだ。よく移植した部位に宿った記憶にまつわるエピソードをTVでやってるが、両腕の肘下から手首にかけての腕の部分に見えないタトゥーを入れるつもりだ。

とりあえずimportは置いておく。

def startVideoURL = "http://webcast-west.sun.com/interactive/javafx/VideoCube.fxm";
def chooser = new JFileChooser();
def r = 100;
def d = r + r;

startVideoURLはおそらく実行すると1つだけ貼ってあるビデオのURLだろう。chooserはJFileChooserという名前からしてサイコロの面をclickしたときに表示されるファイルダイアログに違いない。J*を使うのは気が引ける気がしていたが、これだけ見るともの凄く簡単そうに見える。続くrとdをこの段階でdefしておく意味がわからない。追って分かるだろう。

class Point { .. } コードを全部書くと長いので省略。rotateX/Y/Zの3つの関数があり、それぞれcos,sinという名前からしてコサイン、サインをパラメータに貰う。数学も三角関数も苦手だ。
変数x,y,zを持ち、インスタンス生成時にセットされる。この値とrotateしたときに渡すサインコサインの値から、次の?Xならz,y、Yならz,x、Zならy,zを計算する(更新する)ようだ。そしてどこかにbindしているのか? しているようだ。

def z = bind ul.z + ur.z + lr.z + ll.z;

このul..llがPointなのだが、defしているzにbindというのが何ともイメージに合わない。一度しか代入出来ない=#defineライクなものというイメージ。それが確かに代入は一度とはいえ、bindすればころころ変わるはずだ。だがそうできる。ポインタ的なというか。

var ax = 0.002;
def cx = bind Math.cos(ax);
def sx = bind Math.sin(ax);
var ay = -0.006;
def cy = bind Math.cos(ay);
def sy = bind Math.sin(ay);

このbindは一体なんだ? Math.cos(ax);が返したインスタンスにbindというより、雰囲気的にaxにもbindしている予感。bindか・・・やはりこいつが難敵だ。ということで少しbindについて文献を漁ってみることにする。

と、なるほど関数をbindか。Math自体はJavaなのでbound function ...ではないが、できるのだろう。ちなみに[ナビゲート]-[ソースへ移動](shift+cmd+b)でMath.java、StrictMath.javaがちゃんと開いてくれる。おおーすごい。これが右クリックでなんでないか。つまりaxやayが変わると、bindが働くと。まあ要するにbindに出てきた変数が変わったら、そいつがbindされているものに関して軒並み評価し直されるということだと今のところ理解しておこう。だから例えば他にもdef hokanimo = bind ax;とあれば、cx,sx,hokanimoが更新されると。これは便利なのか? いやあもの凄く便利でしょう。誰が一体こんなことを考えたのか。最近何かと「折り畳まれている」について考えさせられるが、bindという4文字に秘められた力の大きさよ、という感じか。折り畳みとはちょっと違うのかもしれないが。

いまさら聞けないJavaFX 1.3 & NetBeans 6.9

NetBeans IDE 6.9 でJavaFXのコードを見ているとき、[ナビゲート] − [宣言へ移動]が利かない。グレーアウトされたままだ。できれば右メニューで[宣言へ移動]があると便利。便利というより自分には必需品。どうして出てこないんだろう。Webで検索してもPHP用しか出てこない。JavaFXには対応していないのか。netbeans.orgの扱いでもPHPに比べてJavaFXは・・・人気の違いなのだろう。とにかく、出ないものはしょうがない。

[ナビゲート] − [宣言へ移動]で利くこともあるので、暫くこれで代用しよう。

2010年7月19日月曜日

SVG ConverterでarcWidthが展開されない

こちらに書かれたSVGの仕様によると、ryとrxが同じ場合は一方を省略できるらしい。だがSVG Converterは、ryしか書かれていない場合、arcHeightしか展開しない。が、JavaFX(javafx.scene.shape.Rectangle)はSVGがry=rxとおくように、arcWidthをarcHeightとして描画してはくれず、結果として角丸は無視され、角の尖った矩形になってしまう。

また、手入力でarcWidthを追加しても、rの具合がブラウザでsvgを表示したときより、随分小さく描画されてしまう。元のsvgはinkscapeで作った物だが、inkscapeの表示とブラウザ(firefox,chrome,safari)の表示はほぼ同じだけに、JavaFX側の問題ではないかと思えるが、fxzの仕様がよくわからないので何とも言えない。

余談だが、JavaFXがSVGをそのままレンダリングできてもいいのに、と思う。production suiteにしても、いっそイラレやフォトショのデータをそのままレンダリングできたほうがいいのに。そもそもブラウザで主要なファイルフォーマットの描画はサポートすべきではないだろうか。Office製品を含め。PDFでさえほぼAdobe頼みな状況で、オープンスタンダードなんて認めていて良いのだろうか。理由は色々あるだろうが。

表示って、ただ書くだけのような気がするけど、そんなに簡単じゃないんだね。

さらに余談だが、MediaとImageを分けるのはやめてほしい。と思ったら、Textだって分けるの止めてほしいということになり・・・つづきはあっちで。

いまさら聞けないJavaFX 1.3 (3)

Stage.


Stage {}がウィンドウということに何の抵抗も無かったが、どうもファイルの書き方というか、1つのファイルの何処に何を書いて、それがどういう順序で評価されるのかがよくわかってない。これは最初からそうなんだが、何となく「そういうもの」という理解で特に困ることもなかったのだが、一方でrunで明示的に実行することもできるわけで、釈然としない。

そもそもStageというのはクラスなので、いきなり行頭、Stageで始まるのはどうも。冷静に考えれば、そこでStageのインスタンスが「返る」のだから、そいつがうろうろしているのは想像に難くない。だがしかしである。

そこでStageを書かずに、Text{}だけを書いてみた。

Text {
font : Font {
size : 16
}
x: 10
y: 30
content: "text content"
}

すると、ふ〜ん。
2個書いたらどうか?と思ったが、後の1個しか表示されない。
ちなみに去年JavaFX書き初めの頃、Stageの配列を書いてウィンドウを沢山表示して喜んでいたと思うが、var stages = Stage {} * 10;みたいには書けないようなので、単純にfor(i in [0..9]){stages=Stage{}}でとりあえず10個出る。だがTextでこれをやっても何も出ない。Stageに入れれば当然出る。Stageを並べて書くと、書いた分だけ表示される。

結局こういう物だということで、改めて納得したような気がする。本当の意味で理解したわけではないが、前より”こういうもの感”がしっかり頭に定着した感じ。だがよく考えると、それは返って良くないことではないか。

JavaFX Langage Referenceがおもしろい件

JavaFX Langage Referenceを最初から読んでいくとなかなかおもしろい(詳細に見ているわけではなく、ざっと眺めている程度)。

2010年7月17日土曜日

JavaFX勉強会でJavaFX TVに関する講演が追加に

詳細はこちら
講演内容は登録サイトのほうが新しく、TVに関する講演についてはそちらに載っている。MLで告知されたのを見て知った。いつもありがとうございます!

講演者のお名前「草薙 昭彦」でググると「リアルタイムJavaはここが違う!」というとても面白そうなプレゼン資料を発見。URLの元を辿ると、http://mediacast.sun.com/。最近当たり前のようになっているが、貴重な技術情報をタダ同然で得られるということに改めて感謝。探すならここから探すよりググったほうが早いかも。

JavaFX.comによると、番組表がキラーアプリとあるようだが、私としてはTVを自在にコントロールできてこそのプログラム的価値だと思う。JavaFX TVが出た当時はまだスマートTVという言葉は発せられてなかったと思うが、スマートデバイスの覇権争いがAndroidとiPhoneあるいはこれからやってくるMSやAdobeとの間で繰り広げられると思う。
日本ではどうもトロン後遺症なせいか(これは全く個人的なアレです)、ユビキタスも名前先行。今のスマートデバイスの流れとは違うものだけに、もったいない感がある。原因は学術主導で現実との乖離間が否めないやり方から離れられないからではなかろうかと感じてしまうが的外れでしょう。グローバルから常に取り残されるガラ症(ガラパゴス症候群@私見)から抜け出せないのは、ガラパゴス諸島はそれはそれは居心地が良いだろうから、善悪の問題ではないのだろうけど。

とにかく見た感じあまりTV制御ができなそうなJavaFX TVだが、いやいや何をおっしゃいますどこに目ん玉付けてるんじゃいおぬしは、という講演に期待大!

それとMoblieもね。何だってWindows Mobileなんだろうというお話をぜひ伺いたい。コーデックのライセンスのせいだったら笑えるけど。(どうなる?VP8、どうなる?MPEGファミリー)

JavaFXの古いかもしれないプレゼン資料

JavaFX モーフィングでググっていたら、JavaFXの古いかもしれないプレゼン資料を発見。

その中で引用されているサイト画面に「TESLA MOTORS」が!
でも残念ながら、今はJSで書かれている模様。当時はFXだったのか?

それとChis Oliverさんのブログ。http://blogs.sun.com/chrisoliver/
言わずと知れた、JavaFX Scriptの親御さんらしい(奇しくも何回も見たこんなインタビューで知ることに)、今まで全く見ていなかったのがとても残念なほど面白いサンプルが載っているようだ(まだ詳しくは見ていない)。

2010年7月16日金曜日

いまさら聞けないJavaFX 1.3 (2)

Media.sourceはscript-only.

script-onlyとは書き込み権限のことで、参考資料ではアクセス修飾子と呼ばれている。

picture.mediaPlayer.media.source = "aaa.svg";
のように書くためには、sourceの書き込み権限をpublicとかに変更する必要がある。ここを参照。なぜ保護されているかはわかっていない。
だがMediaクラスの変数であるsourceの書き込み権限は変えられないようだ。そこであとからファイルを変えたい場合は、URLを変えるのではなく、オブジェクトを変える。つまり次のような2行で書く。
var svg = Media { source : "aaa.svg" }
picture.mediaPlayer.media = svg;

(2010.7.17追記)と思ったら
picture.mediaPlayer.media = Media { source:"aaa.svg"}
でいいか。他の変数はどうかと思って初めてMediaのAPIをまじまじと見ると、Track[]ってRead onlyなこれって何だろう? media毎に勝手に設定できるなら分かる気がするが、read onlyってことは、元は何になるのか? fxd,flv,mp4などのコンテナでtrack情報が取れるものは何かそうした情報が入ってくるということ? しょうがない、やってみるか。

(2010.7.20 追記)間に追記していると、文章が分断してどうしょうもないが。
とあるmp4のtracks.nameを見ると、"Audio Track"と"Video Track"の2つが入っていた。これは一体何だろう。自分で撮ったビデオをiMovieで書き出したものだと思うので、iMovieで書き出すときに実は何かトラック名を指定出来るか、固定的に設定されてしまうのか。今確認するのは億劫。

(2010.8.16修正) 正:Scene  誤:Stage

ついでにStageSceneのサイズについて悩んだ点を書いておくと、media.width/heightにウィンドウを合わせたいのが人情というもの。でもStageSceneのheightにはウィンドウのタイトルバーの高さが含まれてしまっているので、それを足す。自分のmacの場合、22。

それとStageSceneのwidth/heightはpublic-initなので、Stage { scene:Scene { width : と書いてmp4のwidthを設定することが出来ない。そこでやはりこれもStageを変数に展開した後、新たなSceneのインスタンスにmedia.width/heightを設定して代入すれば良いのだが、実はそもそもStage.scene.widthがゼロでもmedia.widthで表示される。だからStageSceneのwidth/heightさえ合わせてやれば、mediaのサイズで表示される。sceneのサイズとは何だろう。mediaのサイズより小さくしたい場合は、縮小ならMediaView.fitWidthを小さくすれば良いが、等倍のまま部分的に表示したい場合はどうすれば良いか、わからない。何かのデモでアニメーションしながら映像をトリミングするようなものを見た気がするので、何かしら方法があるのだろうが。

(2010.8.16追記-->)と思ったら、

var mmv = MediaView {
mediaPlayer : MediaPlayer {
media : Media {
source:"sample.mp4"
}
}
}

var ms = Stage {
title: "Application title #1"
}

ms.scene = Scene { width:100
height:100
content:mmv
}
mmv.mediaPlayer.play();

これだけだとwidth/heightは利かず、極小サイズで表示されるが、この後、

ms.width = 100;
ms.height = 100;

を追加すると、100x100で表示される。ちなみに

ms.width = 100;
ms.height = 100;
mmv.mediaPlayer.play();

の順でも大丈夫だった。

(<--2010.8.16追記)

APIリファレンスを見ると、Media.sourceはpublic-initのStringだが、
class XMedia extends Media {
override package public var source : String;
}は出来ない。package publicや単にpublicでも同じ。

class DumMedia {
public-init var source:String;
}
class XMedia extends DumMedia {
override public var source : String;
}
は出来るが、同じソースファイル内に書いている(packageを分けていない)ので、比較になっていないかもしれない。が、packageを分けるのが面倒な今。

ラ・ジュテを見終わった

見終わった。長かった。何度も挫折した。つまり、途中で寝てしまうのだ。続きを見ても30秒と持たない。これを10回は繰り返した(だ)ろうか。そしてついに見きったのだ。

何とも斬新な映画だった。現代の基準で映画と呼べるかどうかは別だが、まあ、よいではないか。

これまでのSFが故実けだというなら、ジュテは完全に無視している。理論と感性。

なるほど12モンキーズはこのオマージュなのかもしれない。
※12モンキーズの冒頭、"INSPIRED BY THE FILM "LA JETEE BY CHRIS MARKER"という字幕が挿入されている。

2つの映画は全く別物だと思う反面、どちらも不変の愛を表現しているとしたら同じかもしれないが、それを言ってしまったら大半の作品が同じになってしまうという点で、全く別物だと思いたい。強いて言えば、12モンキーズには、現代への恨みや憎しみを感じるが、ジュテは周りなど気にしていない。そこが大きな違いだと思った。

また考えも変わるだろうが。

2010年7月13日火曜日

いまさら聞けない netbeans 6.9 (1)

コメントにURLを書くと、下線が引かれ、タグジャンプ(とは言わない?)できる。MacOSX 10.6.4 の場合、⌘(cmd)+マウスクリック。できたらいいのになあと思いながらURLをコピペしたらなんと出来てしまった。素晴らしい! ありがとう!NetBeans!

※JavaFXとPHPで確認。

パブリックエネミーズ

ギャング映画だった。ただのギャング映画だった。期待はずれだった。非常に期待はずれだった。『ガントレット』で映画は何も理にかなっている必要はない、と学んだはずだが、理不尽で良いとは思えない。何のどんでん返しも無く、ただやられるだけ。それが事実だから何だ? 記録映画じゃないんだから。とはいえ、最後の方で見かねて早送りしすぎたのかもしれない。延滞料500円がきつすぎる。

返す刀で『ラ・ジュテ』を借りてきた。「ジュテ」としか言わなかったせいで、見つかるまで手間がかかってしまった。ツタヤさん、ぜひレジでの検索でも部分検索ができるようお願いします。でも丁寧に探してくれて、ありがとう。結局SFの棚にあったらしい。何回も見たのに見つけられなかったなんて。

さあ中身はどうだろう。

(2010.8.25追記) パブリックエネミーズの公式サイトが閉鎖(リンク切れ)しているので削除した。

2010年7月9日金曜日

Bent Objects



http://bentobjects.blogspot.com/

これ最高!
Objectsもいいけど写真もね。

特にサイドバーにあるこれ
Amazonで売ってるみたいだけど日本でも売ってるのかな?
こういうのはやっぱり紙の本で見たいなあ。

あるじゃん

追記:
画像検索

2010.7.16追記:
写真がうまいと思ったら、元々プロの写真家だったみたい。何かの講演のVでそう話していたように聞こえた。アイロンの広告写真とか。

2010年7月7日水曜日

netbeans 6.9 を M+2VM+IPAG circle にしてやったり

意味不明なタイトル尾だが、netbeansのフォントがM+2VM+IPAG circle になって嬉しい。

android 2.2 + netbeans 6.9 + macosx 10.6.4

snow leopardでも動いた。

TVを意識してAVDの解像度をHDにしてみると、んーちょっとあれ?な感じ。
1280x768でstart時にディスプレイサイズを17inchに指定だったら画面だけ表示されて、キーボードが出ない。でもウィンドウサイズは17inchよりずいぶん小さい。どうせ今はまだやらないので深入りせず。

android 2.2 + netbeans 6.9 + macosx 10.5.8

追記 2010.7.8 -->
JavaFX Mobileについて、http://forums.sun.com/thread.jspa?threadID=5432053
によると、JavaFX MobileはWindows Moblie上で動く(そういえばJavaFX.comにそう書いてあった気がする)ので、HTC のWindows Mobileデバイスで動いているらしい。おおそういうことか。何か嬉しくない・・・
<-- 2010.7.8

macbook proでやったときはaddition pack(だったっけ?)のダウンロードに2日以上かかったが、iMacでやったらものの数十秒で完了。なんで? 10.5だから? ISPが違うから? さあ...

ということで、勢いnetbeansのプラグインを入れてやってみた。うまくいったと言えるのか定かでないが、新規プロジェクトで出来たものを実行しただけで、ちゃんとエミュレータが起動した。ちょっと感動。

androidはデバイスが今すぐ手に入るというのが魅力。iPhoneのような縛りもなく無料。これでJavaFXが動けば言う事無し。誰かandroid用にビルドツール作ってくれるとか、JavaMEをandroidで動かす的な裏技持ってないかな。

でもオラクルの人がjug?か何か(SVJUGのブログにあったV)で、2010年中にはJavaFXデバイスをリリースすると喋っていたように聞こえたので、それでも良いのかもしれないが、auも年末にオールインワンなandroid出すらしいので、ワンセグとFeliCaで面白いことしたい。

2010年7月4日日曜日

スマートな妄想

書く場所を間違ってしまった。10/05/28のエントリだが2010/07/04 移動。

スマートフォントの話を書こうと思ったら、どうもBlogger様がご機嫌斜め。日本語にならない。これは書くなということか。

以 前はアクティブフォントとかダイナミックフォントとか、インテリフォントとか、如何にも妄想的なネーミングだったが、スマートスマート言っているうちス マートフォントに。3+4=7的にフォントもオブジェクト化されるのかも、という話。

ブラウザってどこまで 変われるのか。ニューブラウザとい名前をつけてはや2年、煮詰まるどころかブラウザという考え自体が自分としては変わってきている。な のにどうしてGoogleはChromeなんか作ったんだろう。それは、

「必要だったから。」

ちなみにスマートフォント をググると"スマートフォンと"の誤字ばかり目につくが、1つだけTシャツ用のロゴでスマートフォントと書いているところが見つかった。もちろん こっちの妄想はそっちのスマートではない。