2008 年 6 月 16 日

rakeemさん主宰の真鍋会に行って来た。初めてお会いする方が多かったので、色々話が聞けて楽しかった。AS3案件が確実に増えてるみたいで、AS2と半々になってきてる人もいるみたい。広告系のスペシャルサイトにがんがん突っ込んでるのが現状で、商品紹介サイトやコーポレートサイトにはまだ波が来てないみたい。他にもiPhoneの話題とか。自分も含め、予約している人が数人いた。静観組もちらほら。2次会では制作の裏話的な話を聞かせてもらったり、Webでモテたいねみたいな。今年は結婚ラッシュになりそうなのか、そういう話をよく聞く。みんなの子供を同級生にして「3才で始めるActionScript」とか。終電までしっかり話が出来ました。
rakeemさん、ありがとうございました。
カテゴリー: memo | コメントはまだありません »
2008 年 5 月 16 日
テキストファイルをzip圧縮してサーバーに保存してみる。今回はnochump.comのライブラリを使わせてもらう。ここからダウンロードしてクラスパスを通しておく。
流れとしてはまず、ファイル名を任意に決めてバイトストリームにUTF-8ストリングを書き込む。putNextEntry()でファイルにしたいエントリーをぶち込む。write()メソッドで実際のデータを書き込み、zipOut.closeEntry()で閉じる。複数のテキストファイルをまとめてzip圧縮するには、下のコードのように文字列を書き込んだ後にzipOut.closeEntry()をそれぞれに実行してやればよい。後はZipOutputクラスからbyteArrayを取り出してPHPに送信してやるだけ。送信の際はBase64エンコードをかける。
Main.as
ACTIONSCRIPT:
-
package
-
{
-
import flash.display.Sprite;
-
import flash.events.ProgressEvent;
-
import flash.events.Event;
-
import flash.net.URLRequest;
-
import flash.net.URLRequestMethod;
-
import flash.net.URLLoader;
-
import flash.net.URLVariables;
-
import flash.utils.ByteArray;
-
-
import mx.utils.Base64Encoder;
-
import nochump.util.zip.ZipOutput;
-
import nochump.util.zip.ZipEntry;
-
-
-
public class Main extends Sprite
-
{
-
private var url:String = "generateZip.php5";
-
-
//------------------------------
-
// コンストラクタ
-
//------------------------------
-
public function Main()
-
{
-
var fileName1:String = "helloworld1.txt";
-
var fileName2:String = "helloworld2.txt";
-
var fileData1:ByteArray = new ByteArray();
-
var fileData2:ByteArray = new ByteArray();
-
var ze1:ZipEntry = new ZipEntry(fileName1);
-
var ze2:ZipEntry = new ZipEntry(fileName2);
-
var zipOut:ZipOutput = new ZipOutput();
-
-
//-----[ファイル1]
-
fileData1.writeUTFBytes("ハローワールド1!");
-
zipOut.putNextEntry(ze1);
-
zipOut.write(fileData1);
-
zipOut.closeEntry();
-
-
//-----[ファイル2]
-
fileData2.writeUTFBytes("ハローワールド2!");
-
zipOut.putNextEntry(ze2);
-
zipOut.write(fileData2);
-
zipOut.closeEntry();
-
-
zipOut.finish();
-
-
var zipData:ByteArray = zipOut.byteArray;
-
sendZip(zipData);
-
}
-
-
//------------------------------
-
// zipデータの送信
-
//------------------------------
-
private function sendZip(byteArr:ByteArray):void
-
{
-
//-----[Base64エンコード]
-
var enc:Base64Encoder = new Base64Encoder();
-
enc.encodeBytes(byteArr);
-
-
//-----[送信変数のセット]
-
var variables:URLVariables = new URLVariables();
-
variables.data = String(enc.flush());
-
variables.type = "zip";
-
-
//-----[リクエストの発行]
-
var urlRequest:URLRequest = new URLRequest();
-
urlRequest.url = url;
-
urlRequest.method = URLRequestMethod.POST;
-
urlRequest.data = variables;
-
-
//-----[送信]
-
var urlLoader:URLLoader = new URLLoader();
-
urlLoader.addEventListener(ProgressEvent.PROGRESS, onProress);
-
urlLoader.addEventListener(Event.COMPLETE, onComplete);
-
urlLoader.load(urlRequest);
-
}
-
-
-
//------------------------------
-
// 読み込み途中
-
//------------------------------
-
private function onProress(e:ProgressEvent):void
-
{
-
trace(e.bytesLoaded + " / " + e.bytesTotal);
-
}
-
-
-
//------------------------------
-
// 読み込み完了
-
//------------------------------
-
private function onComplete(e:Event):void
-
{
-
e.target.removeEventListener(ProgressEvent.PROGRESS, onProress);
-
e.target.removeEventListener(Event.COMPLETE, onComplete);
-
-
trace("complete");
-
}
-
}
-
}
PHPではbase64デコードで復元した後に受け取った拡張子でファイルを生成する。zipファイルはdataフォルダの中に出来上がる。解凍してみるとhelloworld1.txtとhelloworld2.txtの2ファイルが展開され、それぞれの文字列が書き込まれている。
generateZip.php5
PHP:
-
<?php
-
-
$type = $_POST['type'];
-
-
$fp =
fopen("data/".
$fileName,
'wb');
-
-
-
-
?>
最近ちょっとずつバイナリが分かってきて弄れるようになってきた。バイナリ触ってると変に快感があるなー。
カテゴリー: as3, php | 2 件のコメント »
2008 年 5 月 15 日
FlashPlayerのセキュリティー制限でAuthorizationのヘッダーを作成することは禁止されている。swfからBASIC認証を通過するにはいつものごとくPHPとかでproxyするしかないのかな(オーサリング環境からはBASIC認証を通過できる)。以下のコードはswfから「url」、「id」、「pass」をPOST通信でPHPに渡し、BASIC認証を通過する。認証通過後はサーバーから受け取ったデータをechoで出力させてswfに返してやる。これでswfとBASIC認証の先にあるAPIとやり取りできるようになる。
Main.as
ACTIONSCRIPT:
-
package
-
package
-
{
-
import flash.display.Sprite;
-
import flash.net.URLLoader;
-
import flash.net.URLLoaderDataFormat;
-
import flash.net.URLRequest;
-
import flash.net.URLRequestMethod
-
import flash.net.URLVariables;
-
import flash.events.Event;
-
import flash.text.TextField;
-
-
public class Main extends Sprite
-
{
-
private var url:String = "http://***/basicproxy.php";
-
private var id:String = "id";
-
private var pass:String = "password";
-
-
//------------------------------
-
// コンストラクタ
-
//------------------------------
-
public function Main()
-
{
-
//-----[送信するデータを格納]
-
var variables:URLVariables = new URLVariables();
-
variables.id = id;
-
variables.pass = pass;
-
-
//-----[リクエストの発行]
-
var request:URLRequest = new URLRequest();
-
request.url = url;
-
request.method = URLRequestMethod.POST;
-
request.data = variables;
-
-
//-----[ローダーの設定]
-
var loader:URLLoader = new URLLoader();
-
loader.dataFormat = URLLoaderDataFormat.TEXT;
-
loader.addEventListener(Event.COMPLETE, onComplete);
-
loader.load(request);
-
}
-
-
//------------------------------
-
// 読み込み完了
-
//------------------------------
-
private function onComplete(e:Event):void
-
{
-
var loader:URLLoader = e.target as URLLoader;
-
loader.removeEventListener(Event.COMPLETE, onComplete);
-
-
trace(loader.data);
-
}
-
}
-
}
basicproxy.php
PHP:
-
<?php
-
$url = $_POST["url"];
-
$id = $_POST["id"];
-
$pass = $_POST["pass"];
-
-
$ch = curl_init();
-
curl_setopt($ch, CURLOPT_URL, $url);
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-
curl_setopt($ch, CURLOPT_USERPWD, "$id:$pass");
-
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-
$data= curl_exec($ch);
-
curl_close($ch);
-
-
-
?>
curlを使うと簡単に認証を通過できる。あとは受け取ったデータを出力するだけ。
カテゴリー: as3, php | コメントはまだありません »
2008 年 5 月 12 日

「ごはんとFlash」に参加するため鎌倉のbowlsまで行ってきた。すんげー楽しかった。60人くらい集まってたので全員と話すことが出来なくて残念だったけど、立食がまさに正解で動きやすく色んな人と話しやすい雰囲気がありました。ll_koba_llさんも仰ってますが、ドメインやTwitterのアカウント名で覚えているので、自分が配った会社名刺とかはほとんど意味ないなと。名刺に自分のドメインを書かれている方もいて、それで声をかけるきっかけになったりもしました。後半で名刺を切らしてしまってすいませんでした。
社外のクリエーターの方と話が出来たのは本当に貴重で、色んな刺激や情報を頂くことが出来ました。勉強会とは違ったトークメインのイベントは今後も続いて欲しいです。結構みんなこういうのを待っていたんじゃないかと。
途中読み方が分からないブログの初級編でteraさんに弄ってもらいました。ありがとうございます。読み方は5ive(ファイブ)です。
KAYAC道家さん、trick7寺井さん、FICC福岡さんを中心としたスタッフの皆様、楽しいイベントをありがとうございました。
カテゴリー: memo | 4 件のコメント »
2008 年 5 月 8 日
レンタルサーバーにPHPのGDが入っているかどうか調べる場合のメモ。PHPファイルに以下を記述して、アップする。ブラウザで確認するとPHPの詳細が表示されるので、この中の「GD Support」が「enabled」になっていれば使用可能。他にも色んな情報が見れる。自分用メモ。
カテゴリー: php | コメントはまだありません »
2008 年 4 月 28 日
※soundボタンをクリックすると音が鳴るので注意。
サウンドスペクトラムを使って、音にシンクロしたサウンドボタン用のクラスを作ってみた。最初にsetPixel()でピクセルを描画しておいて、スペクトラム波形に合わせてscaleYを変化させてます。下記がそのクラスファイル。
SoundSpectrum.as
ACTIONSCRIPT:
-
package info.five.ui
-
{
-
import flash.display.Sprite;
-
import flash.display.Bitmap;
-
import flash.display.BitmapData;
-
import flash.events.Event;
-
import flash.media.SoundMixer;
-
import flash.utils.ByteArray;
-
-
public class SoundSpectrum extends Sprite
-
{
-
private var lineNum:uint;
-
private var lineHeight:uint;
-
private var lineInterval:uint;
-
private var bmAry:Array = [];
-
-
//------------------------------
-
// コンストラクタ
-
//------------------------------
-
public function SoundSpectrum(targetNum:uint = 5, targetHeight:uint = 20, targetInterval:uint = 1, targetColor:uint = 0x000000)
-
{
-
lineNum = targetNum;
-
lineHeight = targetHeight;
-
lineInterval = targetInterval;
-
-
this.addEventListener(Event.ENTER_FRAME, onRender);
-
-
//-----[ピクセルの描画]
-
var bmd:BitmapData;
-
var bm:Bitmap;
-
-
for (var i = 0; i <lineNum; i++)
-
{
-
bmd = new BitmapData(1, 100);
-
bm = new Bitmap(bmd);
-
this.addChild(bm);
-
bm.x = i * (lineInterval + 1);
-
-
bmd.setPixel(0, 0, targetColor);
-
bmAry.push(bm);
-
}
-
bmd.dispose();
-
}
-
-
-
//------------------------------
-
// レンダー
-
//------------------------------
-
private function onRender(e:Event):void
-
{
-
var count:uint = 256 / lineNum;
-
var value:Number;
-
var ba:ByteArray = new ByteArray();
-
-
SoundMixer.computeSpectrum(ba, false, 0);
-
-
for (var i:uint = 0; i <256; i++)
-
{
-
value = -ba.readFloat() * lineHeight - 1;
-
-
for (var j:uint = 0; j <lineNum; j++)
-
{
-
if (i == Math.floor(count * j)) bmAry[j].scaleY = value;
-
}
-
}
-
}
-
}
-
}
続いてドキュメントクラスには以下のように記述します。引数はSoundSpectrum(ラインを何本にするか, ラインの最大高さ, ラインの間隔, ラインの色)となります。インスタンス化した後にx,yプロパティを与えてaddChild()でステージに配置。デフォルトで数値を持たしているので、カスタマイズしたくない場合は引数なしでも大丈夫です。
ACTIONSCRIPT:
-
var sp:SoundSpectrum = new SoundSpectrum(8, 30, 1, 0x000000);
-
soundBtn.addChild(sp);
-
sp.x = 32;
-
sp.y = 10;
カテゴリー: as3 | コメントはまだありません »
2008 年 4 月 23 日
AS3ではURLRequest.dataで送信できるデータは1つなので、複数の変数をPHPに渡したい場合はURLVariablesを使う。URLVariablesをインスタンス化した後に、通常のオブジェクトと同様、任意のプロパティに値を格納していく。ここでは「title」、「url」、「text」の3つの要素を各プロパティに入れている。URLVariablesに格納した後は、URLRequestにて呼び出したいPHPのパスと通信方法を指定(今回はPOST通信)し、URLRequest.dataにURLVariablesを突っ込む。最後にnavigateToURL()でPHPを表示させ、Flashからデータを受け取っているか確認する。
Main.as
ACTIONSCRIPT:
-
package
-
{
-
import flash.display.Stage;
-
import flash.display.Sprite;
-
import flash.net.URLVariables;
-
import flash.net.URLRequest;
-
import flash.net.URLRequestMethod;
-
import flash.net.navigateToURL;
-
-
-
public class Main extends Sprite
-
{
-
//------------------------------
-
// コンストラクタ
-
//------------------------------
-
public function Main()
-
{
-
sendData();
-
}
-
-
//------------------------------
-
// データ送信
-
//------------------------------
-
public function sendData():void
-
{
-
var variables:URLVariables = new URLVariables();
-
variables.title = "5ive.blog";
-
variables.url = "http://www.5ive.info/blog/";
-
variables.text = "PHPに複数のデータを渡す方法";
-
-
var urlRequest:URLRequest = new URLRequest();
-
urlRequest.url = "variables.php";
-
urlRequest.method = URLRequestMethod.POST;
-
urlRequest.data = variables;
-
-
//phpに送信
-
navigateToURL(urlRequest , "_self");
-
}
-
}
-
}
variables.php
PHP:
-
<?php
-
$title = $_POST['title'];
-
$url = $_POST['url'];
-
$text = $_POST['text'];
-
-
echo "title = ".
$title.
"<br />";
-
echo "url = ".
$url.
"<br />";
-
echo "text = ".
$text.
"<br />";
-
?>
カテゴリー: as3, php | コメントはまだありません »
2008 年 4 月 21 日

前エントリーMake:Tokyo Meetingの後にはしごでICCに行きました。行く途中に3人で歩きながらの雑談。ワンセグを視聴すると字幕がついててびっくりとか、モバイル系の話とか、Felicaの非接触端末の話とか、FlashDevelopβ7出たねとか、iPotchで自作アプリ開発して遊んでるとか、いろいろ。
計算の庭
RFIDタグが仕込まれたカードを持って、計算しながらゲートをくぐって73になるようにゴールを目指す。非接触端末でのデータのやり取りはこれからおもしろくなりそう。
多義の森
Processingみたいなプログラミングモーション。これすごすぎ!1ピクセルの点が気持ちよく動いてて、ずーっと見ていられる。スクリーンセーバーとかにしたら絶対かっこいい。欲しい。
TENORI-ON
実機を初めて触った。思った以上に操作難しいかも。説明書見ないとルールが良く分かりません。
マイクロ・プレゼンス
地味に一番すごいと思ったかも。小さい昆虫をひたすらズームして見れるもの。すべての部位にピントをあわせるという新しい写真の技法を開発してるらしい。この画像処理のアルゴリズム知りたい。Flashでできないかな。
ICCには初めて行ったんだけど、結構見ごたえがあって面白かった。メディアアートとかインスタレーション好きにはお勧めですよ。ゲンさん、遠藤さん、お疲れ様でした。
カテゴリー: memo | コメントはまだありません »
2008 年 4 月 21 日




日曜日にMake:Tokyo Meetingに参加してきました。現地でゲンさんと合流。そして会場ではイメージソースの遠藤さんに偶然遭遇。三人で一緒に見て回ることに。グランドでは真空砲ぶっぱなしてキャベツ爆破とか、セグウェイに乗り回せたり。体育館では電子工作の作品展示や、GAINERワークショップとか基盤販売とか割とカオスな事になってました。工学部理系男子(眼鏡)が会場の9割を占めてて、Web系とはまた違った世界でした。あまりFlashな人たちはいなかったと思われ。
気になった作品はリアルのサウンドスペクトラムを可視化してたやつと、ウダーというオリジナル電子楽器(ミニ冷蔵庫がスピーカーになってて、コントローラーがかっこいい)で演奏してたやつ。全体的にマニアック過ぎたけどこれはこれでおもしろかったなぁと。その後3人でICCに向かいました。続きは次エントリーで。
あと、写真勝手に載せちゃいました。すいません。問題があれば連絡ください。
カテゴリー: memo | 2 件のコメント »
2008 年 4 月 18 日
今更ながら知ったのでメモ。AS2でいうenabled = falseをしたくて調べたら、AS3ではもっと使い勝手が良くなっているようだ。
mouseEnabled
これはマウスイベントを受け取るかどうかを判断するプロパティ。こいつをfalseにするとマウスイベントを受け取らなくなるので、一時的にリスナーを切りたいけどremoveEventListenerするのが面倒とか、あるタイミングだけマウスに反応させたくない時に使用する。
mouseChildren
これと合わせて覚えておきたいのがmouseChildrenだ。mouseChildrenはオブジェクトの子に対してマウスが有効かどうかを判断するプロパティ。つまり親MCにぶらさがる子MCすべてのマウスイベントの伝播を止めることができる。一括してマウスイベントを受け取りたくない時に使うとかなりの手間が省ける。
ACTIONSCRIPT:
-
mc.mouseChildren = false;
-
mc.mouseEnabled = false;
こうするとmc以下のオブジェクトにマウスイベントが伝わらなくなるので便利ですよと。
カテゴリー: as3 | コメントはまだありません »