Archive@2008/03

ProgressionのPreloaderメモ

Progression FrameworkPreLoader メモ。

今まで全く気にしてなかったんだけども、 deploy なディレクトリの中に preloader.swf ってファイルがある。 どうやらデプロイ環境では、最初にコレを読み込んでおいて、 そこから index.swf を読み込むようになってるみたい。 この方法だと index.swf がフォントの埋め込みとかサウンドの埋め込みとかで大きくなっても、 preloader.swf でローディング処理を入れておいてあげれば、 1フレーム目がなかなか読み込まれくてローディングが表示されない。 って問題も回避出来るね。

どうやってローディングしてるのかな?って、 ちょっと気になって Preloader.as を覗いてみた。 が、それらしい処理は書いてない。 なので、親クラスの jp.nium.display.ExPreloader.as を覗いてみると、 _init メソッドに書いてあった。

private function _init( e:DocumentEvent ):void {
    // flashvars からファイルパスを取得する
    _url = loaderInfo.parameters.url ? loaderInfo.parameters.url : _url;

    // Loader を作成する
    _loader = ExLoader( addChild( new ExLoader() ) );
    //  中略...
    _loader.load( new URLRequest( url ) );
}

_url にはデフォルトで index.swf に設定されていて、 flashVarsで url が指定されていれば、それを取りに行ってくれるみたい。 クラスベースで開発してるのであれば、 PreLoader クラスのコンストラクタでも指定出来るようになってるよ。

public function Preloader() {
    // 読み込み先 URL の指定を行います。
    // すでに読み込み操作が開始されていた場合には変更ができません。
    //url = "";
}

ポイントポイントをキレイに押えてあるのがものっすごい有り難い。 自分じゃ絶対マネ出来ないなぁ。

実際にローディング処理を入れる場合、 Preloader クラスに用意されてる(空の状態で書いてある)イベントハンドラに、 それぞれやりたい処理を書いておけば実行してくれる。 bytesLoadedbytesTotal なプロパティも用意されてるので、 パーセンテージの計算とかもちゃんと出来るよ。

Progression Framework は、 まだまだ「なるほど!」の連続なのでイジっててもソース読んでても楽しい!

ps. Progression Framework 2.0.16 がリリースされてるよ! かなり変更がかかってるので、みんなアップグレードしたら良いと思うよ :-)

Posted at: 
2008/03/31 00:22:33
0 Comments
1 TrackBack
Tags: 
ActionScript
Flash
Progression
Trackback: 
http://humming.via-kitchen.com/2008/03/31/progression-preloader-memo/trackback/

思うことメモ

nium さんから、「 Progression Framework の勉強会で発表してよ。」って誘いが来たよ。 もちろん 冗談100% な訳ですが :-P

自分にとって、去年1年を通して話を聴きまくる1年だった。 主に PythonDjango の勉強会に参加させてもらって、 色んな知識や、人との繋がりを頂いたりした。 ホントにホントに有り難いと思う訳ですよ! これからも参加していきたいと思う訳ですよ!

が、しかし、 いつまでも聞き手ってのもいかがなものか? いつまで「なんちゃって」のままなのか? とか、最近結構考えたりする。 Vの字 に煽られたりして。 考えだすと、なんだかんだで「 やらない理由 」を探してしまうので、 ここらで一度考えるのを止めてみる。

  • Django 勉強会で発表しよう!
  • Progression Framework の勉強会で発表しよう!

で、勝手にタイトルも決めてしまう。

  • Django イマココ
  • Progression Framework イマココ

だいそれた事は話せないし、無駄に背伸びしても意味ないし。 今はこんな事してます的な話が出来たらいいなぁ。 とりあえずは「なんちゃって」を抜け出さないと。

なので、タイミングが合いそうな時は一声かけておくんなまし!

Posted at: 
2008/03/29 01:30:56
4 Comments
0 TrackBacks
Tags: 
memo
Trackback: 
http://humming.via-kitchen.com/2008/03/29/imaginary-memo/trackback/

焼き肉喰ったよ。

みんなで焼き肉喰ってきたよ! 色んな方と色んな話が出来て、ものっすごい楽しかった!

mitszo さんや yossy さん、 nium さんとの初対面を果せたのも感動 :-D ついでに minaco さんのグレードが2つ3つアップしてたのにも感動 :-P もはや神の域に近い。

やっぱり人との繋がりは重要だなぁ。って再確認。 これからも、こういう機会があれば積極的に参加していくべきだと思ったよ。

幹事をやらせると抜群のセンスを魅せる Vの字 なひとから、 「じゃあ、次もお願いします。」 とか、かるいタッチで言われたので、 また何か喰いたくなったら叫ぼうと思いますので、 またその時は宜しくどうぞ!

Posted at: 
2008/03/28 02:09:16
2 Comments
2 TrackBacks
Tags: 
memo
Trackback: 
http://humming.via-kitchen.com/2008/03/28/ate-yakiniku/trackback/

DjangoのPaginatorが変わってるよ。

Djangor7306ObjectPaginator がdeprecated扱いになったので、 どんな風に変わったのか調べてみたよ。

テストを走らせてみると、こんな感じのWarningを思いっきり吐かれた。

DeprecationWarning: The ObjectPaginator is deprecated. Use django.core.paginator.Paginator instead.

なるほど、 Paginator に変わったらしい。 実際にどう変わったのかな?って確認しようと、 django/core/paginator.py をちょっと覗いてみると、 QuerySetPaginator って派生クラスもある。 どこが違うかと言うと、 _get_count なメソッドだけがオーバーライドされてる。

まずは Paginator_get_count を見てみるとこうなってる。

def _get_count(self):
    "Returns the total number of objects, across all pages."
    if self._count is None:
        self._count = len(self.object_list) # <-- lenでカウントを取得
    return self._count
count = property(_get_count)

_countなプロパティがセットされて無ければ、 lenを使ってカウントを取得してる。

今度は QuerySetPaginator_get_count を見てみる。

def _get_count(self):
    if self._count is None:
        self._count = self.object_list.count() # <-- QuerySetのcountをコール
    return self._count
count = property(_get_count)

_countなプロパティがセットされて無ければ、 QuerySet のcountをコールして、COUNTなSQLを発行してカウントを取得してる。なるほどー。 って事は、 Paginator を使うよりも、 QuerySetPaginator を使う方が良いね。 今までの ObjectPaginatorQuerySet しか扱えなかったんだから、 WarningでもQuerySetPaginator insteadって出して欲しいなぁ。ってか出すべきな気がする。

念のために汎用ビューを見てみると、 やっぱり QuerySetPaginator を使ってるよ。

もう一つ、今回の変更で加わったのが Page なクラス。 今まで ObjectPaginatorget_page をコールすると、 返り値は QuerySet だった。

try:
    # 返り値のobject_listはQuerySet
    object_list = paginator.get_page(page - 1)
except InvalidPage:
    raise Http404

それが Paginatorpage をコールした時の返り値は Page になる。

try:
    # 返り値のpage_objはPage
    # マイナス1しなくて良くなった!
    page_obj = paginator.page(page)
except InvalidPage:
    raise Http404

# Pageの持つobject_listプロパティにQuerySetが入ってる
object_list = page_obj.object_list

この Page なクラスはページネイション関連のデータを保持する実装になっていて、 汎用ビューで今まで使えてたページネイション関連の変数は、 全部この Page がメソッドとして実装してる。 結構な変更がかかってるけども、 明らかに使いやすくなってると思う。 今までのがデータの引き回しとかが多くて、微妙に使いづらかったってのもあるけども :-P

ObjectPaginatorQuerySetPaginator にリプレイスする時は、 django/views/generic/list_detail.py を見れば分かりやすいと思うよ :-)

Posted at: 
2008/03/26 03:31:44
2 Comments
1 TrackBack
Tags: 
Django
Python
Trackback: 
http://humming.via-kitchen.com/2008/03/26/change-paginator-on-django/trackback/

焼き肉のお店が決まりました!

焼き肉のお店が決まりました! MiCHiLU さん、ありがとうございます!

お店:
焼肉レストラン ジュジュ
住所:
東京都港区浜松町2丁目1-1 森田ビル2F〜4F
時間:
18:30から3時間くらい12名。

当日、どうにか上手く連絡を取りあう方法は無いものか悩んでおります :-(

何か名案があれば教えてくださいまし。

Posted at: 
2008/03/25 17:24:15
0 Comments
0 TrackBacks
Tags: 
memo
Trackback: 
http://humming.via-kitchen.com/2008/03/25/yakiniku-restaurant-was-decided/trackback/

焼き肉の進捗報告

時間が変更されています。ご確認くださいまし。

焼き肉喰いたいと思いませんか? の中間報告的な。

日時:
3/27(木)19:00〜
場所:
浜松町( mitszo さんが関西から遠征されます!)
店:
MiCHiLU さんが安くて美味しいトコロを探してくれております。
参加者:

MiCHiLU さん情報によると、お店の都合上19:00〜の2時間枠だそうです。 なので、開始時間を30分遅くしました。 って言っても、僕自身が出だしに間に合わない可能性が :-(

Posted at: 
2008/03/25 12:12:04
4 Comments
0 TrackBacks
Tags: 
memo
Trackback: 
http://humming.via-kitchen.com/2008/03/25/yakiniku-report/trackback/

Progressionのコマンド使ってみたメモ

ココらへんのエントリーから続いて Progression Framework を触っております。

今回はコマンドを試してみたのでメモメモ。 version 2.0.13 で試しております。

MovieClipButton などのキャストクラスを、 ステージに配置したり、逆に消したりする時に、 _onInit とか _onGoto とかでやる訳なのですが、 ノーマルにやるとこんな感じになる。

override protected function _onInit():void
{
    //  childはCastScpriteとかのインスタンス
    progression.container.addChild(child);
}

override protected function _onGoto():void
{
    progression.container.removeChild(child);
}

コマンド使うとこうなる。

//  コマンドクラスをインポート
import jp.progression.commands.AddChild;
import jp.progression.commands.RemoveChild;

override protected function _onInit():void
{
    //  コマンドを使ってaddChildする
    addCommand(new AddChild(progression.container, child));
}

override protected function _Goto():void
{
    //  コマンドを使ってremoveChildする
    addCommand(new RemoveChild(progression.container, child));
}

この場合だと、どっちでやっても結果は同じ。 なら、わざわざクラスを使う必要無いんじゃ?って疑問がチラホラ。 が、実はこれら2つには重大な違いが。 コマンドクラスを使って操作すると、 操作される側のイベントを上手くトリガーしてくれたり、 コマンドの同期をとってくれたりする。

例えば、こんなクラスがありまして、

package
{
    import jp.progression.casts.CastSprite;

    public class Child extends CastSprite
    {
        public function Child()
        {
            graphics.beginFill(0x000000);
            graphics.drawRect(0, 0, 100, 100);
            graphics.endFill();
        }
    }
}

これに _onCastAdd_onCastRemove なイベントを設定した場合、 例えば Tweener 使ってやるとしたらこんな感じになる。

override protected function _onCastAdded():void
{
    //  あらかじめalpha = 0しておく。
    addCommand(new DoTweener(this, {
        alpha: 1,
        time: 1,
        transition: "easeInSine"
    }));
}

override protected function _onCastRemoved():void
{
    addCommand(new DoTweener(this, {
        alpha: 0,
        time: 1,
        transition: "easeOutSine"
    }));
}

これをトリガーしてやろうとすると、 操作する側がコマンドで行ってあげる必要がある。

ドラマチックエモーショナル な動きを出したい時は、 迷わずコマンドで操作する。って覚えておくと良いよね :-)

Posted at: 
2008/03/25 03:21:51
0 Comments
0 TrackBacks
Tags: 
ActionScript
Flash
Progression
Trackback: 
http://humming.via-kitchen.com/2008/03/25/progression-command-memo/trackback/

焼き肉喰いたいと思いませんか?

そろそろ、みんなで焼き肉を喰いませんか?なお話。

今週のどこか(たぶん26(水)か27(木)あたり)を予定してるのですが、誰か一緒に行きたい人いませんか? 焼き肉喰いたいと思いませんか?

みんなで焼き肉喰いながら、 仲良くなれたら良いと思います :-)

Posted at: 
2008/03/24 11:23:15
7 Comments
0 TrackBacks
Tags: 
memo
Trackback: 
http://humming.via-kitchen.com/2008/03/24/want-to-eat-yakiniku/trackback/

Progressionのチュートリアルやってみたよ。

AS3 のメインフレームワーク?な Progression Framework のチュートリアルをやってみたよ。 Progression 自体は version 2.0.11 をインストールしております。

で、「 クラスベースでの制作スタイル 」をやってみた訳なのですが、 自分にしてはめずらしく、今回はハマりポイントが無かった!これだけでも十分素敵。 全体を通して、素直に作れるなぁ。って印象だったのですが、 細かい感想としてはこんな感じ。

  • Scene って概念は良いな。って思った。 Papervision3D のそれとは別物だけども、 空間という意味で同じようなニュアンスではあると思う。
  • Scene の遷移をURLに反映するのに、設定一つでOn/Off出来るのは感動。
  • 開発用トレース機能も細かく吐き出してくれるので、何が起きてるのか解りやすい。

あと、ちょっとしたコネタ。 チュートリアルの「 7. ルートシーンを作ろう 」で、ルートシーンを設定する時に、

// IndexScene クラスが swf に含まれるように参照を設定しておきます。
IndexScene

// Progression インスタンスを作成します。
_prog = new Progression( "index", stage, "IndexScene" );

って説明があるんですが、ソースをチラ見してみると、 ダイレクトにクラスを渡しても良いように作られてた。

// 文字列ではなくクラスをそのまま渡す。
_prog = new Progression( "index", stage, IndexScene );

この方がシンプルで良いなぁ。これってdeprecatedなのかな?って、 そうこうしてる間に Progression Frameworkversion 2.0.12 がリリースされちゃった :-P

これからしばらく Progression との戦いの日々になりそう。 名テスター目指して頑張って行こう :-)

Posted at: 
2008/03/24 01:11:02
2 Comments
0 TrackBacks
Tags: 
ActionScript
Flash
Progression
Trackback: 
http://humming.via-kitchen.com/2008/03/24/tried-progression-tutorial/trackback/

Progressionをインストールしてみたメモ

AS3 のメインフレームワークを求めて、 今度は Progression Framework をインストールしてみたよ。

実際のインストール作業は Documents/Tutorial/Install - Progression Framework - Trac を見ながら進めていったよ。

  1. まずは Adobe Extention Manager 1.8
  2. 次にフルパッケージ版の Progression Framework 2.0.11

が、ココでちょっとした問題発生。 インストール出来たハズの Progression Framework が、 「ウィンドウ -> その他のパネル」に出てこない。 でも大丈夫。ジェントルマンは決して焦らない。決して走らない。( Englishman in New York@Sting より)

こういう問題児の為に、 JSFLインストールパッケージ が用意されております。 なので、コレもインストールしてみる。 すると見事に Progression Framework な項目が出てきたよ! こういうインストーラビリティって、もの凄く重要だと思う。 新しく何かを始めるってかなり体力使うし、ちょっとした問題でもモチベーション下っちゃうしね。

喜び勇んで新規プロジェクトを立ち上げてみる。 すると今度は「 Index.as なんて無ぇゼ!」って怒られた。 ちょっと分からなくなってきたので、 taka:nium さん(中の人)にヘルプしてみた。 すると、 それらしいエラー内容とその解決法 を教えてくださった。 どうやら PATHが長過ぎた らしい。

気をとりなおして、今度は短めなPATHでプロジェクトを作ってみる。 すると今度はバッチリ!ちゃんと Index.as なファイルも出来たよ! 素敵過ぎます :-)

とりあえず一通りのインストールは出来たか確認する為に、 何にも弄ってないけどもパブリッシュしてみた。

Progression Framework 2.0.11
Copyright (c) 2008 taka:nium.jp, supported by Spark project.

良し!インストールは出来たっぽい! 以下まとめ。

  • Progression Framework のインストーラビリティは抜群
  • ドキュメントが日本語で問題児にも優しい
  • メインコミッターに気軽に質問出来る(言語の壁的な意味で)

次はチュートリアルをこなして行こうと思いますです :-D

Posted at: 
2008/03/23 06:29:15
0 Comments
0 TrackBacks
Tags: 
ActionScript
Flash
Progression
Trackback: 
http://humming.via-kitchen.com/2008/03/23/progression-install-memo/trackback/

Categories

Archives