5ive.blog

ごはんとFlash2杯目に行ってきた

dsc_3143

ごはんとFlash2杯目に行ってきた。海の家で潮風を浴びながらの野外イベント。今回はスケジュール管理が割りと堅めでトーク中に自由に動ける雰囲気ではなかった。それでも総勢70名を超える参加者の多さは圧巻。普段ブログでお世話になっている方たちと新たに知り合えたのでホント良かった。お互い「あー!あのブログの!」みたいな。こういうのがごはんとFlashの醍醐味だよなと。途中、iPhoneを取り出した瞬間にゲンさんが超モテ始めて、横で見てておもしろかった。iPhone開発勉強会やるみたいなので参加表明しておいた。

丼が開始直後で売り切れたけど、最後に追加されたのでなんとか食えて良かった。最後は52sec.orgflabaka.comの中の人と一緒にFlash話しながら早めに退散。KAYACスタッフの皆様、ありがとうございました。

今回も名刺を配ることが出来ず失礼しました。追ってメールにてご挨拶させて頂きます。

ごはんとFlash2杯目

最初の応募に見事落選しましたが、敗者復活戦で勝ち上がりました。もし当日に雨が降ったら、率先して外に出ておこうと思います。参加される皆様、よろしくお願いします。

APMT4

今回は参加できず悔しいです。みんなのブログを見て参加した気分になろうと思う。

福岡で家探しとVJと

r0012593

先週の金曜から月曜まで休みとって福岡に家探しに。途中で大分と広島にも足を伸ばしたので怒涛の3泊4日になった。福岡に泊まった夜は友達主催のイベントでVJを頼まれていたので朝までノンストップに。クラブではなくて、上人橋通り沿いのバーラウンジみたいなとこ。最近出来たばっからしい。映像出すのは学生のとき以来だったので5,6年ぶり。クラブにもあんま行かなくなってたので久々の音楽。80人オーバーで、盛り上がりが半端なかった。途中のTRFとかなつかしすぎて面白かった。

家探しの方は友達のおかげで、良い家に出会えた。色々交渉とかありがとう。希望通りLDKの広い家に決まったので、大人数でも大丈夫。これから家具探しとかも本腰入れないと。まずは天童木工中座椅子ダイニングテーブルかな。

Tweenerで音量をトゥイーンさせる

自分用のメモ。サウンドの音量をトゥイーンさせるには、SoundShortcutsクラスをインポートしてinit()で初期化してから使う。Tweenerの対象オブジェクトはSoundChannel型の変数にする。音量を変化させたいときは_sound_volumeプロパティ、音量をパンさせたい時は_sound_panプロパティをそれぞれ弄くる。

ACTIONSCRIPT:
import caurina.transitions.Tweener;
import caurina.transitions.properties.SoundShortcuts;

SoundShortcuts.init();

var bgm:Sound = new soundBgm();
var channel:SoundChannel = bgm.play(0);

Tweener.addTween(channel, {_sound_volume:0, time:1, transition:"linear"});

ごはんとFlashおかわりに行ってきた

dsc_3108

土曜日は渋谷のダブルトールカフェにて道家さん、福岡さん主催のおかわりに行ってきた。こちらも20名くらいはいたかなー。今回は着席でゆっくりごはんを食べることが出来た。デベロッパーよりの方が多い印象でした。1次会ではSilverlightやディープズームの話とか仕事の話をちらほら。2次会では小学生時代に見てたアニメ話が盛り上がった。ドラゴンボール、幽遊白書、スラムダンクは全員がリアルタイムで見てる。このあたりのジャンプ黄金期世代が集まってる感じでした。懐かしい反面、漫画やテレビの影響力って大きいなと思ったり。幹事のお二人、ありがとうございました。ごはんとFlash2杯目も楽しみにしています。

当日、自分の名刺が1枚しかないという大失態。名刺を頂いた皆様、申し訳ありませんでした・・・。最後の1枚はFICC城川さんと交換させて頂きました。

卓球開催しました

dsc_3112

金曜の21:00から渋卓にて久々の卓球。卓球に興味ありなメンバーが総勢18人集まって終電までしっかり汗を流しました。参加して頂いた皆様、ありがとうございました。このくらいの人数だと3台借りて丁度良いくらいだったかな。ゆるく小話しながら順番にプレイ。ムービークリップのプロパティ名で古今東西してたりと、Flash大好きな人達もいました。次はトーナメントとか、ダブルスとかもありですね。終電間際で一度解散した後、まだもの足りないメンバー6人で延長戦に突入。2時間ほど卓球した後、天一に行ってビールと鶏定を食ってどしゃ降りの中自転車で帰宅。みなさま、お疲れ様でした。

ランチアくんが卓球動画をアップしてくれてます。ありがとうです!

真鍋会に行ってきた

dsc_3070

rakeemさん主宰の真鍋会に行って来た。初めてお会いする方が多かったので、色々話が聞けて楽しかった。AS3案件が確実に増えてるみたいで、AS2と半々になってきてる人もいるみたい。広告系のスペシャルサイトにがんがん突っ込んでるのが現状で、商品紹介サイトやコーポレートサイトにはまだ波が来てないみたい。他にもiPhoneの話題とか。自分も含め、予約している人が数人いた。静観組もちらほら。2次会では制作の裏話的な話を聞かせてもらったり、Webでモテたいねみたいな。今年は結婚ラッシュになりそうなのか、そういう話をよく聞く。みんなの子供を同級生にして「3才で始めるActionScript」とか。終電までしっかり話が出来ました。

rakeemさん、ありがとうございました。

Zip Libraryで複数ファイルを圧縮してみる

テキストファイルを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
    $imgdata = base64_decode($_POST['data']);
    $type = $_POST['type'];
    $fileName = time()."-".round(rand(1,10000)).".".$type;
    $fp = fopen("data/".$fileName, 'wb');
    fwrite($fp, $imgdata);
    fclose($fp);
    print $fileName;
?>

最近ちょっとずつバイナリが分かってきて弄れるようになってきた。バイナリ触ってると変に快感があるなー。

PHP経由でBASIC認証を通過する

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);
   
    echo $data;
?>

curlを使うと簡単に認証を通過できる。あとは受け取ったデータを出力するだけ。

page 1 / 812345678»