2012.05.11 | 

こんばんは。muchoです。
やっぱりコンプガチャとかAKB商法とかいやらしいですよね。
さてさて。今日は小ネタも小ネタ。
これまた以前にやったことあったんですが、今日使おうと思って、
えーとあれはどうするんだっけ?とググったりしたので
備忘録的にメモ




public function Main():void
{
	var l:int = 100;
	var points:Vector.< Point > = new Vector.< Point >(_length);
	for (var i:int = 0; i < l; i++)
		points[i] = new Point(int(Math.random() * 100), int(Math.random() * 100));

	_cells.sort(SortByXY);
	for (i = 0; i < l; i++)
		trace("key : " + i + " : " + _cells[i].x + ", " + _cells[i].y);

	_cells.sort(SortByYX);
	for (i = 0; i < l; i++)
		trace("key : " + i + " : " + _cells[i].x + ", " + _cells[i].y);

	// 無名関数を使うのもよし
	_cells.sort( function(a:*, b:*):int
	{
		if (a.x < b.x) return -1;
		else if (a.x > b.x) return 1;
		else 
		{
			if (a.y < b.y) return -1;
			else if (a.y > b.y) return 1;
			else return 0;
		}
	});
	for (i = 0; i < l; i++)
		trace("key : " + i + " : " + _cells[i].x + ", " + _cells[i].y);
}
		
private function SortByXY(a:*, b:*):int
{
	if (a.x < b.x) return -1;
	else if (a.x > b.x) return 1;
	else 
	{
		if (a.y < b.y) return -1;
		else if (a.y > b.y) return 1;
		else return 0;
	}
}

private function SortByYX(a:*, b:*):int
{
	if (a.y < b.y) return -1;
	else if (a.y > b.y) return 1;
	else 
	{
		if (a.x < b.x) return -1;
		else if (a.x > b.x) return 1;
		else return 0;
	}
}



ActionScript sort 関数 とかで検索しても出てこないのはどういうこと?
と思ったら、「ActionScript sort カスタム関数」 で検索したらAdobeのが見つかりました。
最悪それさえ覚えてればいいかも。

2012.04.27 | 

こんにちは。muchoです。
昨夜は会社で事務所移転の打ち上げをしたんですが、
盛り上がりすぎて近隣の皆様に大変なご迷惑をおかけしました。
申し訳ございませんでした。お詫び申し上げます。

さてさてさてさて。
前に一度書いて、えーとあれはどうするんだっけ?となったのでメモ。
デバッグプレイヤーでエラーがポップアップしないようにする方法です。
もう一つ、書き出しがデバッグモードかリリースモードかの判定もメモ。

不明なエラーイベントを取得するUncaughtErrorEventsクラスを使います。
loaderInfo、LoaderにaddEventListenerで使います。
書き出しのバージョンが10.1以上で使えます。

さらにキモなのがイベント発生時に e.preventDefault(); を入れて
デフォルト時の挙動を抑える方法です。これでエラーのポップアップは
しなくなります。



public function Main():void 
{
	// 書き出しのモード判定
	isDebug = Boolean(new Error().getStackTrace().search(/:[0-9]+]$/m) > -1);

	//予期せぬエラー表示対策
	loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);
}

private function onUncaughtError(e:UncaughtErrorEvent):void
{
	e.preventDefault(); //←これがないとポップアップします。

	// デバッグ時にはエラーを把握するためにtraceしてみる
	if (isDebug) {
		trace(e.error.type+":"+	e.error.text);
	}
}



さりげなくハマったのが、書き出しのバージョン。
10.0と10.1の違いって、あれやこれや結構ありますね。。。

2012.04.24 | 

おはようございます。muchoです。

前回、MacOS版SublimeText2でCoffeeScriptを使えるようにしましたが、
Windowsでも同じようにしてしまおうということで、やってみました。
これまたいつの日か同じことをやることになりそうなのでメモ。

Node.jsもPythonも入ってない前提で

1.Python2.7のインストール
http://www.activestate.com/activepython/downloads
2.7.2.5のインストーラーを選択
デフォルトで"C:\Python27"にインストールされます。
とりあえずそのままやってみました。
コマンドプロンプトを起動して、python --version と打ってバージョン番号が
出ればPythonは無事完了。

2.Node.jsのインストール
http://nodejs.org/
私が試したときは0.6.15
何の選択肢も出ずに"C:\Program Files\nodejs"にインストールされます。
ええー。そこでいいのかー?と思ったんですが、これまたそのまま続行。
再びコマンドプロンプトを起動して、node -v か、npm -v
うまくいっていればバージョンが表示されます。
なんとnpmも一緒にインストールされてくれてました。ステキ。

3.CoffeeScriptのインストール
コマンドプロンプトで



npm install -g coffee-script


これで "C:\Users\<ユーザー名>\AppData\Roaming\npm\"にインストールされます。

4.SublimeText2にCoffeeScript用のパッケージを追加する
・コマンドパレットを起動して(
メニュー - Tools - Command Palette(Ctrl+Shift+P)
)
・Package Control: Install Package を選択
・パッケージの一覧からCoffeeScriptを選択
・メニュー - Preference - Browse Packages... を選択
・"Packages\CoffeeScript\Commands\CoffeeScript.sublime-build"を開いて
 下記のように修正



 {
"path": "$HOME/bin:/usr/local/bin:$PATH",
"cmd": ["coffee","-c","$file"],
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.coffee"
}
↓
{
"cmd": ["coffee.cmd","-c","$file"],
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.coffee"
}


以上で環境は出来上がりました。
確認のために以下のような適当なスクリプトを書いて
"hello.coffee"とか名前を付けて保存



console? log? "Hello world"


メニュー - Tools - Build System で CoffeeScriptを選択し、
メニュー - Tools - Build(ctrl+b)でビルド

うまくいけば[Finished]と表示されて、hello.coffeeと同じフォルダに
hello.jsが出来てるはずです。

2012.04.23 | 

こんばんは。muchoです。
今日は小ネタというか、いつの日か同じことをする日が来そうなのでメモ。

CoffeeScriptをSublimeText2で使えるようにする

1.シンタックスなどを追加



cd ~/Library/Application\ Support/Sublime\ Text\ 2/Packages/
git clone git://github.com/jashkenas/coffee-script-tmbundle CoffeeScript


2.入れたファイルをCoffeeScriptのインストール先にあわせて設定を一部修正



~/Library/Application Support/Sublime Text 2/Packages/CoffeeScript/Commands/CoffeeScript.sublime-build
のパスを編集
"path": "$HOME/bin:/usr/local/bin:$PATH",
↓
"path": "/opt/local/bin",


で、SublimeText2を再起動。
これでTool-Buildでビルドできるようになります。

2012.04.05 | 

こんばんは。muchoです。
今日はほかの会社の方とランチしながら情報交換しました。
やっぱりSublime Text 2アツいですよね。
coffee scriptやらねばー。
お忙しい中ありがとうございました。
また情報交換とか勉強会とかお花見とかやりましょう。

が、しかしブログネタはFlash+Cinderです。
前回のOSC通信に続き、AIRとCinderで連携させてみました。
http://bubblebird.at/tuioflash/で提供されているライブラリを使いました。TUIOプロトコル用のライブラリですが、OSCプロトコルのライブラリが同梱されています。

今回は送信側をAIRアプリ、受信側をCinderにしてテストしました。

受信側のCinderは前回の記事と同じです。



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

	import org.tuio.connectors.UDPConnector;
	import org.tuio.osc.OSCManager;
	import org.tuio.osc.OSCMessage;

	public class Main extends Sprite 
	{
		private var prefix:String = "/devjam_osc";
		private var oscManager:OSCManager;
		
		public function Main():void 
		{
			oscManager = new OSCManager(null, new UDPConnector("127.0.0.1", 3000, false));
			stage.addEventListener(MouseEvent.CLICK, onClick);
		}

		private function onClick(e:MouseEvent):void
		{
			
			// とりあえずこれだけ・・・
			sendArgument("fullscreen", 1, "i");
		}

		private function sendArgument(address:String, value:*, type:String = "f"):void
		{
			/*
			 * type
			 * s:A string
			 * i:An integer
			 * f:A float
			*/
			var msg:OSCMessage = new OSCMessage();
			msg.address = prefix + "/" + address; //アドレスと
			msg.addArgument(type, value); //形式と値を入れて
			oscManager.sendOSCPacket(msg); //送信!なんてシンプル
		}
	}
}


cinder側に入ってたOSCライブラリでは、データ形式にString,Interger,Float
の3種類しかやり取りできないようなことが書いてありましたが、Tuio as3 libraryだと
もっとたくさんの形式に対応してるようです。Cinder側にもTUIOライブラリがあったので、
そっちを使うといろんなデータのやり取りができるかも?
s A string
i An integer
f A float
b A blob / ByteArray
t An OSCTimetag
d A double
c An ascii character
r A RGBA color
T A boolean true. You don't have to specify a value for this type.
F A boolean false. You don't have to specify a value for this type.
N A null value. You don't have to specify a value for this type.
I Infinity. You don't have to specify a value for this type.

また、私が作ったサンプルだと1データで送信してますが、まとめて送信もできるようです。




    var myBundle:OSCBundle = new OSCBundle();
    myBundle.addPacket(myMsg); //OSCMessage
    myBundle.addPacket(myMsg2); //OSCMessage
    [...]
     
    oscManager.sendOSCPacket(myBundle);


以上、OSC通信のテストでした!