- Web 2.0 in Japan


February
2008
Su Mo Tu We Th Fr Sa
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29  
February 25, 2008
次世代 Yahoo! メール ベータ版 リリース & 募集開始

入社以来長いこと作ってきたプロダクトがやっとベータリリースされました。
長かった…

新しい Yahoo! メールベータ版は、Flash/Flex 2 を利用してます。もう使ってみた方もいらっしゃると思いますがいかがでしょうか。特徴とかは公式を見ていただければと思います。

Flash を選んだ理由は、やはりその早さ。確かに ActiveX はインストールがどうのという問題も孕んでますが、実際には 98% ぐらいの人がインストールされている Windows を超えるシェアを持つ世界最強のプラットフォームです。

なぜ Flash か?

しかし、Flash が Ajax より圧倒的に優れている点は二つ。
ここを述べさせてください。

一つは、Loader を用いて Flash を入れ子にできること

これによって Ajax では困難だった「ロード中」のほとんどなく、起動も早いアプリケーションを容易に作ることができます。

Ajax で同等のことを実現するには JavaScript の段階ロードを行いますがロードしなければならないコードを自らファイル分けする必要があります。もちろん Ajax でもクラス事に JavaScript ファイルを分けて段階的にロードさせることはできますが、1000~2000 もの大量のクラスを作るフロントエンド UI プログラミングでは、このクラス事のロードではファイルの読み込みのオーバーヘッドが掛かりすぎます。またロードプログラムを手で書かないといけないのもです。

Flex はその点極めて優秀な階層ロードが可能です。何も手を加えなくても必要なクラスだけをロードして実行してくれますし、ブロック事に SWF をいくつも生成することでダウンロード容量を減らすことができます。

* もう一つはクラスプラットフォーム性の高さ

通常 Ajax でプログラムする際にはすべてのコードを 4~6つのブラウザ(Win IE6/IE7/FF2 Mac FF2/Safari)でテストする必要があります。特にブラウザにイレギュラーな作業を強要するアプリケーション開発においては表示崩れなどを排除し、あらゆるブラウザで同一の結果を得るように開発するのは極めて困難です。

一つの解決は Ext のような UI ライブラリを利用することですが、今回はデザインに対する要求を満たせない為、不可能でした。

* Flash の弱点

私が思うに Flex 2 の最大の弱点は初回の起動速度があまりにも遅いことです。一瞬で起動するアプリケーションを作ろうとしても PC 環境によっては、 タグのみのアプリケーションですらローディング画面が表示されます。これはアプリケーション規模が大きくなってくるごとに重大な問題に発展します。

これは Flex 2 を利用した際の最大の問題でした。これの解決する方法は一つ、起動直後に見える部分をすべてローディング画面として作ること。preloader として作られた部分は非常に高速に起動直後に表示されるのでこれは使えます。

しかしこれには問題があり preloader 作成の際に与えられる stage と起動後に与えられる stage が異なるのです。この為、preloader で作られた部品を長いこと活用しようというのは残念ながらあまり現実的ではありません。

そしてもう一つが MXML をすべて捨てる方法です。ActionScript 3 だけですべてを作る選択ですね、これはすべてをコントロールできるので非常に高速に起動するアプリケーションを作ることができます。しかしこれは Flex 2 を利用する最大のメリットを潰すことでもあり、通常大変になりすぎるのでアプリケーション開発にはお勧めできません。

SWFLoader や Module を利用したコンポーネント分離も考えられますが、そもそものルートアプリケーションを相当に小さくしてもロードの遅さは免れえません。

* 最後に

探さないでください(笑

April 10, 2007
Flex 2 / ActionScript 3 Super Tips
AS3 にはメタデータタグと呼ばれるものがあって、これを使うとイベントだとかスタイルだとかの定義をしておいて asdoc でドキュメント化することが出来たりするんですが、このメタデータタグの Bindable を使うと、変数の更新をチェックすることができます
public class A{
[Bindable]
public var str:String;
定義はこんな感じ、こうしておくとこの変数の更新時に propertyChanged イベントが飛ぶようになります。
var a:A = new A;
a.addEventListener(PropertyChangeEvent.PROPERTY_CHANGED,
function(e:PropertyChangeEvent):void{
if(e.property == "str"){
trace("str has changed!");
}
});

a.str = "Hello";
こんな感じですね。CollectionEvent と一緒に用いれば、大体の変数の中身の変更は外側からキャッチできるので、どこかにデータを格納しておいて、そこに Bindable をばーっとつけておいて、それをチェックしながら UI を更新するという感じです。

setter getter を使う場合にはこんな感じ・・・
public class A{
private var _str:String;

[Bindable]
public function get str():String{
trace("get Invoked.");
return _str;
}
public function set str(value:String):void{
trace("set Invoked");
_str = value;
}
変数の代入時に、getter が二度前後に呼ばれるようになり、変数が変更されたかどうかのチェックがなされるようになるので、getter の呼ばれる回数には注意が必要です。

ちなみに、Bindable をつけておくと MXML で自動更新もされるようになります。
便利ですね。


August 22, 2006
プログラミング言語製作始めました
んー、ここで宣言するより、2ch とかで宣言した方がいいんですかね?

作ろうとしてるのは Groovy なんかに似た、メタ言語と呼ばれるものです、コンパイルすることで他の言語に変換されるものですね。具体的には JavaScript 2.0 + ECMAScript for XML を IE/FireFox/Safari/Opera で動作するような、JavaScript 1.X 系に変換するようなコンパイラを目指そうと思ってます。
class A extends B{
public function C( a:Number, b:A ){
super.C(a,b);
var c:Number;
return a;
}
}
こんなんを・・・
A.prototype.C = function( a, b ){
super_C(a, b);
var c;
return a;
}
みたいな感じに変換する感じですかね。んで、次のステップとして Obfuscate もかませます、また、HTML ごと変換できるようになるとさらにいいでしょう、要は、HTML/CSS/JavaScript で出来ているユーザーに送るファイル郡をバイナリファイルとみなしてサイズやリクエスト数を最低限に抑え、解読しにくいようにして送るということですね。

こちらの開発している状況そのままでユーザーに送るのは・・・ということです。
とりあえず、javacc を使う予定。
Copyright © 2006 Qronon. All rights reserved.