unknownplace.org

# 2007-10-26

OSXのFileReference

FlashのFileReferenceでのファイルアップロードはFlashPlayerから直接ファイルがアップロードされるのだけど、WindowsだとIEからリクエストされてるのと同じ感じになって(おそらくWinInet APIをつかっているからだと思う)、アクセス先がBasic認証とかかかっていてもIEの認証がとおっていればちゃんとファイルアップロードできる。

でも、OSXの場合は完全にFlashPlayerが独立しているらしく、Basic認証がかかっているとファイルアップロードできないようだ><

それをしらなかったのでykskに無駄に苦労をさせてしまった。もうしわけない!

とりあえずIP認証で代用した。そんな罠があるとはな。。

# 2007-03-07

AS3でのフルスクリーンモード

最小のサンプル。

package {
    import flash.display.Sprite;
    import flash.display.StageDisplayState;
    import flash.events.MouseEvent;
    import flash.events.FullScreenEvent;

    public class FullScreeeeeen extends Sprite {
        public function FullScreeeeeen() {
            stage.addEventListener(MouseEvent.CLICK, clickHandler);
            stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler);
        }

        private function clickHandler(event:MouseEvent):void {
            if (stage.displayState == StageDisplayState.NORMAL) {
                stage.displayState = StageDisplayState.FULL_SCREEN;
            }
        }

        private function fullScreenHandler(event:FullScreenEvent):void {
            if (event.fullScreen) {
                trace("enter fullScreen mode");
            }
            else {
                trace("leave fullScreen mode");
            }
        }
    }
}

これだけ。あとは addParam("allowFullScreen", true) (SWFObject書式) すれば使える。

今の Flex2 SDK だったら追加のインストールファイルは何も必要ない模様。

# 2007-02-28

AS3のテスト

Adobe - Developer Center : Unit testing and Test Driven Development (TDD) for Flex and ActionScript 3.0

これ試してみた。

Flex Builder 2 がいるとか書いてあるけど、Flex2 SDK でも使えた。

この記事の例のをコンパイルするには

mxmlc -include-libraries=../flexunit/bin/flexunit.swc main.mxml

こんな感じでいいよう。

-include-libraries の代わりに -source-path で as ライブラリの位置指定してもいけるけどコンパイル時間がすげー長くなってしまう。

てか、swc 使っても長いんですけど。fcshつかった二回目以降のコンパイルでもおっせぇのでFlexって大変だなぁとか思ったり。

このテストアプリはFlexで作られているけど、テストは普通のAS3クラスに対して行えるので、まぁ一応使えるかなぁと言う印象。

作ってるアプリディレクトリに test.mxml、Test.as を置く感じになるかなぁ。

めんどいなー。誰かがasだけでテストクラス書いてくれるのを待とう。

# 2007-02-25

XMLSocket - POE

AS3からSocketクラスができたけど、それでも依然としてテキストベースの通信ではXMLSocketのほうが楽なのでAS3ベースでもXMLSocket使ってる。

でも通信の区切りがNULL文字だったりとか、癖があるんで、なんこかPoCoサーバー作ってみて、うまくラッピングするモジュール作るべきだなと考えてる。

たとえば以下のような。

POE::Filter::XMLSocket

NULL文字で区切る入出力フィルタ。

POE::Component::Server::TCP::XMLSocket

AS3からサポートされているTCP通信でのcrossdomain.xmlの返答機能を組み込んだComponent::Server::TCPのサブクラス。

などなど。

今の仕事が終わったらちゃんと考えよう。

# 2007-02-15

FlashのログをFirebugに出す方法 (Unknown Quality)

それまったく無名関数使う意味ない><

ExternalInterface.call("console.log", "hoge");

# 2007-02-11

MochiKitをAS3で

package MochiKit {
    public class Base {
        public static function bind(f, obj, ...args) {
            return function() { return f.apply(obj, args.concat(arguments)) };
        }

        public static function update(self, ...args) {
            if (self === null) {
                self = {};
            }
            for (var i = 1; i < args.length; i++) {
                var o = args[i];
                if (typeof(o) != "undefined" && o !== null) {
                    for (var k in o) {
                        self[k] = o[k];
                    }
                }
            }
            return self;
        }
    }
}

bindとupdateだけだけどw

なんかAS3は_globalなくなってグローバル関数上書きどうやるかわかんねーし、ビルドインクラスにメソッド追加する方法もよくわかんないのでこんなのかいてやってみる試み。

使うときは import MochiKit.Base; したらあとは

var m = MochiKit.Base;
m.bind(...)

とかもてきったーにはおなじみの使い方できる。

誰か暇な人が全移植してくれはしないだろうか。

# 2007-02-09

width="0" height="0" な Flash だとネット接続できない @ Linux Flash Player 9

これずっとわかんなかったんだけど、今日やっと原因を発見した。

なんだそういうことだったのね。MTASCのバグかPlayerのバグか何かかと思っていて放置してた。

MTASC上でのLoadVars, XMLSocket、Flex2 Builder上でのURLLoaderでうごかないの確認。

ちなみにWindowsやOSXだと問題ない。

Flashタグでは1pxなどと適当に指定しておいて、CSSでそれをくくっているdivを0pxに指定したらOKっぽい。

# 2007-01-29

Flash Player Detection Kit がひどいので改造

インストールされているFlashプレイヤーのバージョンを調べるためにadobeからFlash Player Detection Kitというものが出てるのだが、これのjsの部分がひどいのでいじった。

Flash.js

var付け忘れてる変数にちまちまvarつけたり、関数エクスポートまくりなのを全部隠蔽したりとか。あと使わない部分はごっそり削除。

このjsでは、Flash.VERSION でプレイヤーのバージョンがとれ、Flash.require() でプレイヤーのバージョンをチェックするって感じにしてある。

前者は単純に文字列が入っててで、後者のrequire関数は

if (Flash.require(8,0,0)) {
    // プレイヤー8以上入ってる!
}

みたいに使う。

SWFObjectもこの中に突っ込むといいかなとか思ったけど今は必要ではないのでいれていない。

# 2007-01-25

ぐぐったら速攻あった。deconceptにw

deconcept > RegExp in Flash 8 using ExternalInterface

これ無名関数で書いちゃえばjsいらねーのにな。

js無名関数 with ExternalInterface

弊社フラッシュチームからは常識じゃん?的なことを言われましたが、FlashのExternalInterfaceに無名関数を使うというテクはなかなか使えるなぁ。

UserAgent取得

var ua = ExternalInterface.call("function() { return navigator.userAgent }");

JSつかってJSONパースさせてオブジェクトを得る

var json   = '{foo:"bar"}';
var object = ExternalInterface.call("function(json) { return eval('('+json+')') }", json);

などちょっとしたことやるならjsファイルでなんかやらなくてもas内だけで完結できる。

ちょっとがんばればasクラスだけでjsの正規表現つかうラッパークラスとかもできそうだけど、もうありそうかな。

# 2007-01-11

as2(MTASC) -> as3(Flex2 SDK) の印象

as2もjsコンポーネントとして使うとか変な使いかたしかしていなかったけど、それと比較したas3のぱっと見の印象。

Socketクラス

バイナリ通信用のSocketクラスができたらしい。これはアツイ。

あとas2+XMLSocketのときの1024以上のポートしか通信できないという制限もなくなっているようだ。

正規表現

つかえるーー。//x とかもつかえる

リファレンスはオンラインのみ?

Adobe Flex 2 リファレンスガイド

しかないのかな? 今までのlivedocsと比べるとまぁ許せる範囲だけど。

Flex2 SDK いれた

as3関係スルーしていたけど、なんか公式でFlex2 SDKとか言うのが無償で公開されていてMTASCライクにコマンドラインからas3アプリを作成できる環境があるようなのでためしてみた。@ colinux (Debian etch)

Flex2 SDKはjava製なのでまずJavaのRuntimeを入れる必要がある。

etchにはnon-freeにsun javaが入ってるのでそれを入れる

$ sudo aptitude install sun-java5-jre
Reading package lists... Done
Building dependency tree... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
Building tag database... Done
The following NEW packages will be automatically installed:
  defoma gsfonts gsfonts-x11 java-common libfontenc1 libfs6 libft-perl libttf2 libxext6 libxfont1 libxi6 libxp6
  libxtst6 odbcinst1debian1 sun-java5-bin unixodbc xfonts-encodings xfonts-utils xutils xutils-dev
The following NEW packages will be installed:
  defoma gsfonts gsfonts-x11 java-common libfontenc1 libfs6 libft-perl libttf2 libxext6 libxfont1 libxi6 libxp6
  libxtst6 odbcinst1debian1 sun-java5-bin sun-java5-jre unixodbc xfonts-encodings xfonts-utils xutils xutils-dev
0 packages upgraded, 21 newly installed, 0 to remove and 0 not upgraded.
Need to get 36.5MB of archives. After unpacking 96.5MB will be used.
Do you want to continue? [Y/n/?]

X関係のパッケージが山のように入って多少なえるけど続ける。

あとは Flex 2 SDK をダウンロードして適当なところに解凍。

$ unzip -d ~/app/flex flex_sdk_2.zip

で、もう使える。

$ ~/app/flex/bin/mxmlc -help
Adobe Flex Compiler (mxmlc)
Version 2.0.1 build 155542
Copyright (c) 2004-2006 Adobe Systems, Inc. All rights reserved.

# 2006-12-09

JSコンソールにログをはくActionScript

いままではLocalConnection使うロガーをつかってたんだけど、JSと同じところで見れたほうが楽かなと思って作ってみた。

import flash.external.ExternalInterface;

class Logger {
    public static function trace(msg) {
        return ExternalInterface.call("window.console.log", msg)
            || ExternalInterface.call("opera.postError", msg)
            || ExternalInterface.call("printfire", msg)
            || ExternalInterface.call("Debug.writeln", msg)
            || ExternalInterface.call("debug.trace", msg)
        ;
    }
}

こんな感じの、もてきっとからぱくってきただけだけど。

MTASCから利用するときはコマンドラインパラメータに -trace Logger.trace とかすればasソース内のtrace()がコンパイル時かってに置換されるのでアプリ内からは普通にtrace()るだけでおk

Flash経由でAjax

っぽいことをするライブラリを作った。

http://svn.unknownplace.org/public/library/js/trunk/Flax/

Flax.Request(
    'http://example.com/',
    {
        method: 'get',
        onSuccess: function(data) { alert(data) }
    }
);

みたいな。まだすごくシンプルな機能しかないけど、getとpostできる。

crossdomain.xmlでドメインを制限しつつ自社サービス間とかでAPIを利用しあったりする用に便利かなと思う。

簡単な使用例として

http://unknownplace.org/tmp/Flax/examples/flickrsearch/

flickrの検索とかつくった。flickrはJSONPあるからこんなことしなくてもいいんだけど。ほかにいい例がなかった。

# 2006-10-13

Flash Resource Viewer

Flashのドキュメントの見づらさというか使いづらさに閉口してて、ローカルのヘルプファイルを元にWebアプでビューワ作ろうと思ったんだけど、Flash Resource Viewerとかいうナイスなアプリを発見した。

Flash付属のドキュメントを開ける野良アプリ。タブ機能もあって意外となかなか良い。

Flash Resource Viewer

デフォだとFlash8だとエラーで起動しないんだけど、config\app.config を以下のようにしたらちゃんと使えた。

<?xml version="1.0" encoding="utf-8"?>
<ApplicationSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SearchTermHighlightColor>#FFFF99</SearchTermHighlightColor>
<Version>0.93.1592.26849</Version>
<HighlightSearchTerm>true</HighlightSearchTerm>
<Language>en</Language>
<FlashHowtoDirPath>C:\Documents and Settings\All Users\Application Data\Macromedia\Flash MX 2004\ja\Configuration\HelpPanel\HowDoI</FlashHowtoDirPath>
<UserHelpDirPath>C:\Documents and Settings\All Users\Application Data\Macromedia\Flash 8\ja\Configuration\HelpPanel\Help\</UserHelpDirPath>
<FlashHelpDirPath>C:\Documents and Settings\All Users\Application Data\Macromedia\Flash 8\ja\Configuration\HelpPanel\Help\</FlashHelpDirPath>
<ClearLogOnStart>false</ClearLogOnStart>
<ShowFlashHelpBooks>true</ShowFlashHelpBooks>
<ShowUserHelpBooks>true</ShowUserHelpBooks>
<ShowFlashHowtoBooks>true</ShowFlashHowtoBooks>
<TopMost>false</TopMost>
<StartURL>http://www.markme.com/mxna/helppanel.cfm?category=Flash</StartURL>
<Theme>Default</Theme>
<OpenTabsInBackground>false</OpenTabsInBackground>
<UseEcmaRegex>false</UseEcmaRegex>
<HelpPaths />
<ToggleNodeOnSelect>false</ToggleNodeOnSelect>
</ApplicationSettings>

ここのコメント欄にあったやつを s/en/ja/ しただけ。

それにしても、日本のFlashデベロッパはドキュメントに関して何も不満ないのかな。

Flash組み込みのビューワは使いにくすぎるし、livedocsは重いし、PDFは論外だし。

海外だとchmファイル作ってたり多少話題見つかるんだけど、日本だと全然。

Page 1 of 2: 1 2