Tag { FDT } 一覧

[memo] FDT5 で iOS ANE のDistribution 書き出しバグ?

Category:{ AIR, FDT }  Tag:{, , , , } Comments:{ No Comments }
Posted:{ 2012.01.04 06:57:04 }

なぜか、FDT5 で .aneを利用したAIR for iOSアプリを、Distribution (app-store/ad-hoc)で書き出すと、実機で動いてくれない。
※「PropertieのFDT Mobile Propertie の iOS の Deplayタブ」 から書きだしたり、「自作のANT」で書きだしたりしてみたけど、うまくいかず。
※プロビジョニングや証明書はちゃんとDistribution用を使用している

.aneを利用しなければ動く。(xxx-app.xmlに-extdirを指定していても、as側で宣言しなければ大丈夫)
これで1週間ほどはまった。(´・ω・`)

Flash Builder4.6 で書きだすと問題なく動作する。
ので、なにかFDTのバグ?なのだろうか?。

分かり次第追記予定。
だれか原因がわかる方、ぜひ@itozまで教えていただけると有りがたいです。

[FDT5][ANE] FDT5 で ANE アプリをコンパイルする(サンプルソース付)

Category:{ AIR, Android, FDT, Native Extention }  Tag:{, , , , , } Comments:{ No Comments }
Posted:{ 2011.11.01 12:15:10 }

先日リリースされた FDT5モバイルアプリビルド機能 が強化され、
AIR アプリのプロパティ設定や、パブリッシュなどが、GUIで行えるようになりました。

その一部に Extentions タブがあり、
AIR Native Extenision (以下ANE) アプリをサクッとコンパイル出来るようになっています!
(この機能は FDT5 FREE でも利用可能!

今までコマンド、 Ant などでやっていたのを考えると便利ですね!

ANEアプリコンパイル設定

ということで Android のバッテリー値を取得&表示する ANE アプリを作成する手順を書いてみます。

[1]. ANE ファイルを用意。

ここに素敵なANEサンプルが多数公開されています。
http://extensionsforair.com/extensions/powerflasher-collection/

今回はこの中の「battery」を使わさせて頂きました。

[2]. Mobile Project を作成

File > New > New FDT Project > Mobile > AS3 でプロジェクト作成し
「aneフォルダ」を作成。(任意の名前でもOK)

[3]. ANEファイル、ライブラリの設置

[1]でDownloadしたbatteryフォルダ内の.aneファイルと.swfファイルをプロジェクトにコピー。

battery/extension/de.patrickkulling.air.mobile.extensions.battery.ane
>「ane」フォルダへコピー

battery/extension/android_battery_extension.swc
>「lib」フォルダへコピー
※これでExtensionのクラスにパスが通せるようになります

[4]. Extensions の設定

プロジェクトフォルダ右クリック > Properties を選択すると下記のウィンドウが出てきます。

FDT Mobile Properties > Android > Extensionsを選択。

「Extensions location」に「aneフォルダ」を選択。
「Extensions」に、battery/extension/descriptor_extensions.xml に記述されている「extensionID」 を追加。
※これでアプリケーション記述ファイルに自動的に extensionID が追記されます。

ANEの設定はここまで。
もうちょっとです。

AIR3.0コンパイル設定

ここからはAIR3.0でコンパイルするためのお決まり設定です。

[5]. コンパイル時定数を追加

「Run / Debug Configurations」を作成し、
Compiler Arguments タブの Use launcher specific compiler arguments を選択。
-swf-version=13」を追記。

[6]. アプリケーション記述ファイルの修正


bin/xxxxxx-app.xmlの冒頭を
「<application xmlns=”http://ns.adobe.com/air/application/3.0“>」に変更。

設定は以上!

ANEを呼び出すドキュメントクラス

上記設定から、バッテリー値を取得&表示するサンプルドキュメントクラスです。

package jp.itoz.ane.android.battery {
    import de.patrickkulling.air.mobile.extensions.battery.Battery;
    import de.patrickkulling.air.mobile.extensions.battery.event.BatteryEvent;
 
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
 
    /**
     * ANE Android Battery Sample
     * @see http://extensionsforair.com/extensions/powerflasher-collection/
     */
    public class ANEBatteryApp extends Sprite {
        private var _tf : TextField;
        private var _bat : Battery;
 
        public function ANEBatteryApp() {
 
            // ----------------------------------
            // battery
            // ----------------------------------
            _bat = new Battery();
            _bat.addEventListener(BatteryEvent.UPDATE, onBatteryUpdate);
 
            // ----------------------------------
            // textfield
            // ----------------------------------
            _tf = addChild(new TextField()) as TextField;
            _tf.defaultTextFormat = new TextFormat(null, 20, 0xcc0000);
            _tf.autoSize = TextFieldAutoSize.LEFT;
        }
 
        /**
         * バッテリーイベント
         */
        private function onBatteryUpdate(event : BatteryEvent) : void {
            var d : Date = new Date();
            var stamp : String = d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
 
            // @see http://www.adakoda.com/android/000140.html
 
            _tf.text = "update " + stamp + "\n";
            _tf.text += "バッテリー残量 " + event.level + "\n";
            _tf.text += "バッテリー最大値 " + event.scale + "\n";
            _tf.text += "バッテリー温度 " + (event.temperature / 10) + "度\n";
            _tf.text += "バッテリー電圧 " + event.voltage + "mV\n";
        }
    }
}

あとは コンパイルするだけ!

これでバッテリー値が取得できるサンプルANEアプリが完成しました。

今回のサンプル一式をアップしました。
FDT5 の File > import から Archive File で読み込んでください。

その他

FDT5 FREE のダウンロードはこちらから
(今回紹介した機能はFREEでも利用可)

FDT5 MAX だと、アプリケーション記述ファイルの設定もGUIから行えます。
(AppricationID や Permission、Aspect Ratio など)

その他 FTD5 から追加された機能はこちら
fdt.jp » FDT5がリリース。新機能一覧

[FDT4] ProgressionプロジェクトテンプレートをFDT4.2用にアップデート

Category:{ FDT, Progression }  Tag:{, , , , } Comments:{ 3 Comments }
Posted:{ 2011.02.20 04:10:08 }

FDT4.2 でプロジェクトテンプレートに新しい機能が追加されたので、
Progressionプロジェクトテンプレートをアップデートし、
FDT.jp に利用方法の記事を書きました

ソースは Spark にアップしてあるほか、僕のGitHubにも上げてあります。

使ってみてバグなどありましたら@itozまでご報告いただける足り難いです。m(_ _)m

[FDT] traceが出ない場合の原因

Category:{ FDT }  Tag:{, } Comments:{ No Comments }
Posted:{ 2010.11.29 02:46:11 }

FDT を使い始めて最初につまずく壁。

トレースが出ない !?

そこで挫折する人多いのでは?ないでしょうか。
(※僕もそうでした)

FDT.jpに、おおよその考えられる原因を書きましたので、ご参考下さい。
fdt.jp » traceが出ません

AndroidエミュレータにAIRアプリをインストール/アンインストールするANTファイル

Category:{ AIR }  Tag:{, , , , } Comments:{ No Comments }
Posted:{ 2010.11.21 09:55:45 }

Androidの実機を持っていないので、
エミュレータを使用し、AIRアプリ動作確認をしていたのですが、
ターミナルでインストール/アンインストール、やるのがめんどくせぇ!
と思い、カッとなって半自動で出来るANTを作成しました。

FDT 、Flash Builder 等で利用できます。
※タイトルにはエミュレータとありますが一応実機に対しても動作します。

[追記 2010.11.29] 先日参加した東京てら子10で、「インストール時に-rオプションをつけると上書き出来る」と聞いたので調査中です。

主な機能


・Android 用 AIR アプリのパッケージ化(デバッグ用 / エミュレータ用 / リリース用)
・アプリのインストール(実機 / エミュレータ)
・アプリのアンインストール(実機 / エミュレータ*ちょい問題あり)

※パッケージ化部分は適当に作ったので、問題あるかもしれません。
(問題あればコメント等でご指摘頂けると有難いです)

※アンインストールは、ちょっと使い勝手がわるいです。。
(なにかいい方法しってたらダレか教えて( ´д`; ))

※詳細はコード内コメントを御覧ください。

メリット

実機があれば、Flash や FlashBuilder から直でインストール&デバッグできるので、特に利用価値はないですが、
実機がなく取り急ぎ確認したい時、使えると思います。

実際のコード

一応張っておきます。

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<?xml version="1.0" encoding="UTF-8"?>
<project name="APK TOOL" >
 
	<!-- ============================================================================================
 
	- Android AIRアプリ (.apk)作成 
	- インストール/アンインストール機能
 
	 [*]部分は必須設定
 
	- [Android SDK]	 http://developer.android.com/sdk/index.html
	- [ADTドキュメント] http://help.adobe.com/ja_JP/air/build/WS5b3ccc516d4fbf351e63e3d118666ade46-7fd9.html
	- [ADBコマンド]	 http://aaabbbkirai.sytes.net/wiki/tech/mobilesite/index.php?android%20SDK%20%A5%B3%A5%DE%A5%F3%A5%C9%C1%E0%BA%EE%20adb
 
	-->
 
	<!--flex sdk 4.5-->
	<property name="flexSDK" value="/Users/macpro/Documents/_dev/flexSDK/flex_sdk_4.5.0.17689/bin" /><!--*パスを設定-->
	<property name="adt" value="${flexSDK}/adt" />
 
	<!--android sdk -->
	<property name="androidSDK" value="/Developer/SDKs/android-sdk" /><!--*パスを設定-->
	<property name="adb" value="${androidSDK}/tools/adb" />
 
	<!--air property-->
	<property name="appName" value="***********.apk" />				<!--*apk name (インストール後のデバイス上のappの名前ではない)-->
	<property name="key" value="***********.p12" />		<!--*認証ファイル-->
	<property name="key.pass" value="*************" />					<!--*password-->
	<property name="store.pass" value="*************" />					<!--*password-->
 
	<property name="app.xml" value="***********-app.xml" />	<!--*アプリケーション記述ファイル-->
	<property name="main.swf" value="***********.swf" />		<!--*main.swf-->
	<property name="icon.dir" value="icons" />						<!--*icon directory-->
 
	<!--directory-->
	<property name="src.dir" value="${basedir}/../src" />			<!--*srcフォルダ-->
	<property name="debug.dir" value="${basedir}/../bin-debug" />	<!--*デバッグフォルダ-->
	<property name="release.dir" value="${basedir}/../bin-release" /><!--*リリースフォルダ-->
	<property name="apk.dir" value="${basedir}/../apk" />			<!--*apkを書きし先-->
	<!-- ============================================================================================
			                                          			                        [ build apk ] 
	-->
 
	<!--emulatorビルド-->
	<target name="[1] Emulator Build (APK)">
		<echo message="[NOW EMULATOR BUILDING ...]"></echo>
		<property name="build.mode" value="apk-emulator" />
		<property name="dir" value="${debug.dir}" />
		<antcall target="Build" />
	</target>
 
	<!--debugビルド-->
	<target name="[2] Debug Build (APK)">
		<echo message="[NOW DEBUG BUILDING ...]"></echo>
		<property name="build.mode" value="apk-debug" />
		<property name="dir" value="${debug.dir}" />
		<antcall target="Build" />
	</target>
 
	<!--releaseビルド-->
	<target name="[3] Relase Build (APK)">
		<echo message="[NOW RELEASE BUILDING ...]"></echo>
		<property name="build.mode" value="apk" />
		<property name="dir" value="${release.dir}" />
		<antcall target="Build" />
	</target>
 
	<target name="Build">
		<exec executable="${adt}">
			<arg line="-package 
						-target ${build.mode}
						-storetype pkcs12 -keystore ${key} -keypass ${key.pass} -storepass ${store.pass}
						${apk.dir}/${appName} 
						${src.dir}/${app.xml}
						-C ${dir}/ ${main.swf}
						-C ${src.dir}/ ${icon.dir}
			" />
		</exec>
	</target>
		<!-- ============================================================================================
				                                          				 [ install ] apkをインストール
	-->
	<target name="[4] Install">
 
		<!--接続されているデバイス名を取得-->
		<antcall target="get device name list"></antcall>
 
		<!--*取得したデバイス名をvalueに設定-->
		<property name="device.name" value="***********" />
 
		<!--インストール-->
		<!--Result: 14  が起こる場合すでにインストール済み。一旦 "[5] Uninstall" タスクでアンインストールして下さい。-->
 
		<echo message="[NOW INSTALLING to ${device.name} ...]"></echo>
 
		<exec executable="${adt}">
			<arg line="-installApp -platform android -platformsdk ${androidSDK} 
						-package ${appName} 
						-device ${device.name} 
			" />
		</exec>
	</target>
 
 
	<!-- ============================================================================================
					                                          			                [ uninstall ] 
	 - 実機の場合、permissionのエラーが発生します。(今のところ手動で消すしかないのかも。。)
	 - エミュレータの場合アンインストール後再起動しないと完全にアンインストールされないようです。
	-->
	<target name="[5] Uninstall">
 
		<!--インストールされているアプリID一覧を取得-->
		<antcall target="get installed app name list"></antcall>
 
		<!--*削除したいアプリIDをvalueに設定-->
		<property name="app.name" value="***********" />
 
		<!--アンインストール-->
		<echo message="[NOW UNINSTALLING ${app.name}...]"></echo>
		<exec executable = "${adb}">
			<arg line="shell rm data/app/${app.name}" />
		</exec>
 
		<!--インストールされているアプリID一覧を再度確認-->
		<antcall target="get installed app name list"></antcall>
	</target>
 
	<!-- ____________________________________________________________________________________________
				                            	    					 [ 接続されているデバイス名を取得 ] 
	 -->
	<target name="get device name list">
		<echo message="[CHECK] device name"></echo>
		<exec executable="${adb}">
			<arg line="devices" />
		</exec>
	</target>
 
	<!-- ____________________________________________________________________________________________
				                            	                 [ インストールされているアプリID一覧を取得 ] 
	 -->
	<target name="get installed app name list">
		<echo message="[CHECK]  installed app list"></echo>
		<exec executable = "${adb}">
			<arg line="shell ls data/app" />
		</exec>
	</target>
	<!-- ____________________________________________________________________________________________
					                            	                 [ HELP ] 
	 -->
	<target name="HELP ADT" >
		<exec executable="${adt}">
			<arg line="-help" />
		</exec>
	</target>
	<target name="HELP ADB" >
		<exec executable="${adb}">
			<arg line="-help" />
		</exec>
	</target>
</project>

[FDT4] Progression(4.0.22) プロジェクトテンプレート

Category:{ FDT, Progression }  Tag:{, , } Comments:{ No Comments }
Posted:{ 2010.11.05 09:53:52 }

FDT用 の プログレッション(4.0.22) プロジェクトテンプレートを作成し、スパークにコミットしたので、fdt.jpに利用方法などのエントリを書きました。

fdt.jp » Progression(4.0.22)用プロジェクトテンプレート

デフォルトで Compiler Argument が設定されているので設定後すぐに、デバッグビルドが出来るようになっています。

当サイトにアップしてある過去のバーションは取り急ぎそのままにしておきますが、今後Updateはsparkの方で行っていこうと思います。

[Flash Builder] “Burrito” の QuickFixを試してみた

Category:{ FDT }  Tag:{, , , } Comments:{ No Comments }
Posted:{ 2010.10.26 05:13:00 }

FDTでおなじみの機能 Quick Fix が Flash Builder “Burrito”(以下FB) でも搭載されたと言うことで、昨日公開されたプレビュー版を使用してみました。

Adobe Labs – Adobe Flash Builder "Burrito"
下部の[Download Flash Builder "Burrito"]リンクからダウンロード。

結論からいうと今のところ FDT の QuickFix の方がまだ便利かな?という印象。

1. FDTの場合は [cmd+1]で次々と対象を移動してQuickFixしてくれますが、
FBの場合は選択中の行に対象が無いとQuickFix出来ません。
(FBにはリアルタイムエラー検知が無いから?かな)

2. 例えば hoge.fuga() で、fuga()メソッドが存在しない場合、
FDTだとQuickFixで対象クラスにfugaメソッドを作成できますが、FBだと出来ません。

FDT の QuickFix よりいい点としては、
1. ローカル変数 を メンバー変数 に変換できる
2. 変数のリネーム、ファイルのリファクタリングが出来る
と言ったところでした。

その他、違いがあるかもですが、追って調査中でっす。

[FDT4] ASDocをサクッと書き出すプロジェクトテンプレート

Category:{ FDT }  Tag:{, , , } Comments:{ 2 Comments }
Posted:{ 2010.10.04 09:36:24 }

FDT4ASDocをサクっと書き出せる、プロジェクトテンプレートを作成しました。

※追記2010.11.04 sparkにコミットしました。アップデートなど今後こちらにしていきます。
http://www.libspark.org/wiki/FDT4_ASDocProjectTemplate

[ 確認環境 MacOS 10.6.4 / FDT4 ]

使用方法

1. (macの場合) ダウンロード後、解凍したフォルダを下記ディレクトリに設置。
/User/FDT/projectTemplates/Web/
※追記 FDT4スタンドアロンでインストールした場合は下記のフォルダになっています。(thx Alan)
User / Library / Application Support / FDT / projectTemplates

2. FDTを起動して File > New > New Flash Project を選択し、出てきたウィンドウで「AsDoc Build」を選択。
FDT4 Asdoc Build

3. 出来たプロジェクト内のsrcフォルダに、ASDoc化したいクラス群をコピー。

4. ant/asdoc_build.xmlを開き、6行目あたりで、flex sdkのパスを設定

5. Window > Show View > Ant で Antウィンドウを開き、asdoc_build.xmlをドラッグドロップしダブルクリック!

これでASDocが作成されました!。(・∀・)

※Asdoc作成の場合はJRE設定をしなくてもANT実行が出来ますね。(なぜかはよくわかりませんが)

[AS3][FDT] 意外と使えるAS3のFDTテンプレート10個

Category:{ actionscript, FDT, flash }  Tag:{, , , } Comments:{ No Comments }
Posted:{ 2010.08.06 09:32:03 }

よく使っている、AS3のFDTテンプレート10個です。

importや宣言って結局書かなきゃいけないから使うのメンドイよね?」と思ったあなた!
QuickFixで処理すればザクザクっと瞬殺で実装できまっすよ。(・∀・)

[1] 簡易スプライト作成

「あれっ?表示されるはずのMCが表示されない!?」なんて時に、その中にサクっと作って確認したり。

1
2
3
4
${name} = addChild(new Sprite()) as Sprite;
${name}.graphics.beginFill(0xcc0000);
${name}.graphics.drawRect(0,0,100,100);
${name}.graphics.endFill();

[2] 簡易テキストフィールド作成

何かとよく使います。

1
2
var ${_tf}:TextField = addChild(new TextField( )) as TextField;
${_tf}.text = "${cursor}";

[3] 簡易グラデーションボックス作成

背景にサクっと敷いたりする時に。

1
2
3
4
5
6
7
8
9
var gradType:String = GradientType.LINEAR;
var gradColors:Array = [ ${0xffffff} , ${0x0} ];
var gradAlphas:Array = [ 1, 1 ];
var gradRadios:Array = [ 0, 255 ];
var gradMrx:Matrix = new Matrix( );
gradMrx.createGradientBox( ${800},  ${600} , Math.PI/2, 0,0);
var gradSpread:String = SpreadMethod.PAD;
${this}.graphics.beginGradientFill( gradType , gradColors ,  gradAlphas , gradRadios , gradMrx ,gradSpread);
${this}.graphics.drawRect( 0 , 0, ${800}, ${600} );

[4] 配列を作る(要素番号指定で)

ループで作成できない配列作る時ってメンドいですよね。
下記だと、name とvalueの値が一気に指定できて便利。とりあえず10個

1
2
3
4
5
6
7
8
9
10
11
var ${name} : Array= new Array();
${name}[0]=${value};
${name}[1]=${value};
${name}[2]=${value};
${name}[3]=${value};
${name}[4]=${value};
${name}[5]=${value};
${name}[6]=${value};
${name}[7]=${value};
${name}[8]=${value};
${name}[9]=${value};

[5] 簡易ローダー作成

LoaderContext(true)にしているので、wonderflなんか用にサクっと使っています

1
2
3
${loader}= new Loader();
${loader}.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler);
${loader}.load(new URLRequest("${cursor}"), new LoaderContext(true));

[6] ラジアン、角度、変換公式

覚えろって話ですが( ´д`; )、いつも忘れるので。

1
2
3
//radian<->angle
//var rad = angle *(Math.PI/180)
//var angle = rad * 180 / Math.PI;

[7] FlashVersを列挙する

デバッグ時などに何かと使えます。

1
2
3
4
var vars:Object = loaderInfo.parameters;
for (var i:String in vars) {
    _txt.appendText(i + "=" + vars[i] + "\n");
}

[8] プレイヤーのバージョンとタイプをトレース。

同じくデバッグ時などに何かと使えます。

1
2
3
4
trace( "************************************" );
trace( "[Player Version] " + Capabilities.version );
trace( "[Player Type]    " + Capabilities.playerType );
trace( "************************************" );

[9] Loggerテンプレート

@cellfusioinが作成したLoggerクラスを使用するためのテンプレート。
sosMaxと組み合わせると強力なログ出力環境が整います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// @see http://github.com/cellfusion/Logger
Logger.initialize(Logger.LEVEL_FATAL);
//Logger.initialize(Logger.NONE);
 
Logger.trace(${cursor});
 
Logger.debug(${cursor});
 
Logger.info(${cursor});
 
Logger.warning(${cursor});
 
Logger.error(${cursor});
 
Logger.fatal(${cursor});

[10] コンパイルオプションで一部のコードを無視させる。

詳細はこちらの記事を御覧ください。
FDTでコンパイル時に一部のコードを無視させる

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 //-define=CONFIG::Debug,true
//-define+=CONFIG::Release,false
/*FDT_IGNORE*/
CONFIG::Debug
{
/*FDT_IGNORE*/
		trace( 'Debug' );
/*FDT_IGNORE*/
}
CONFIG::Release
{
/*FDT_IGNORE*/
		trace( 'Release' );
/*FDT_IGNORE*/
}
/*FDT_IGNORE*/

上記10個セットをダウンロード

動作確認環境 [FDT4 M3 / MacOS10.5]

[FDT] ProgressionプロジェクトテンプレートVer2.0

Category:{ FDT, Progression }  Tag:{, } Comments:{ No Comments }
Posted:{ 2010.06.06 05:57:59 }

“FDT”の、Progressionプロジェクトテンプレートを修正し、
Ver2としてアップしました。

DOWNLOADは下記から

利用方法

こちらのエントリーの利用方法をご参照下さい

変更内容

リリースビルド時、Debugクラスを空クラスに上書きしswfの容量を減らす。
※前回のテンプレートに対し@matsumosさまにReply頂きまして、リリースビルド時の挙動を教えていただきました。

具体的にはANTで、compilerargumentsで空クラスにパスを通しています。
※thx! @cellfusion

1
2
3
4
5
6
7
8
9
10
11
<property name="release.path" value="${basedir}/../lib/ProjectRelease" />
<!--略-->
<fdt.launch.application 
	projectname="${flashproject.name}" 
	mainclass="${src.dir}/Index.as"
	debug="false" 
	target="${release.dir}/index.swf" 
	startswf="false"
	compilerarguments="-define=CONFIG::Debug,false -define+=CONFIG::Release,true
				-sp ${release.path}"
/>

また、下記の表通り、僅かではありますがリリースビルドswf容量が減ります。
※thx! 検証@fumix

ビルド状態 空クラス上書き 容量
デバッグ なし 約105kb
デバッグ あり 約90kb
リリース なし 約64kb
リリース あり 約59kb

これでまた一つ、本家Progressionの挙動に近づけました(・∀・*)
FDTでもやろうと思えば結構できるもんです。


レンタルサーバー豆知識