May 2007Archives

すごく今さら感ありますが、つまづいたのでメモ。
Flash ネイティブの LoadVars クラスを委譲して、CSV を読み込み解析するクラスを作ってみたんですが、LoadVars.onLoad でハマってました。
結論言うとこうなんですね。
・LoadVars.onLoad は読込データの解析が完了したときのイベント
・LoadVars.onData はデータ読込み完了のイベント
なるほど。

Flashやってずいぶん経ちますが今まで気づかなかった・・・org
・URLエンコードしたテキストデータ → LoadVars.onLoad
・生テキストデータ(CSV含む) → LoadVars.onData
ってことですね。

AS3だと明示的に指定できるみたいで、やっぱよく考えられてるなぁと。
外部ドキュメントからのデータのロード ~ 外部データの操作 -- Flex 2

Apollo でさくっと CSV エディタとか作れそうな予感。。

class CSVLoader{
	
	var data:Array;
	private var _loader:LoadVars;
	private var _onLoad:Function;
	
	function CSVLoader(){
		this.data = new Array();
		this._loader = new LoadVars();
		this._loader.owner = this;
	}
	
	/**
	 * CSVファイルの読込
	 * @param url 対象ファイルのURI
	 */
	function load(url:String){
		// ロード時の処理がなければ強制的に設定
		if(!_onLoad){onLoad = null;}
		// ロード開始
		_loader.load(url);
	}
	
	/**
	 * CSV読込時に呼ばれるコールバック
	 */
	function set onLoad(f:Function){
		_onLoad = f;
		_loader.onData = function(src:String){
			var success:Boolean = Boolean(src);
			if(success){
				this.owner.data = this.owner._parseCSV(src);
			}
			this.owner._onLoad(success);
		}
	}
	
	function get onLoad():Function{
		return _onLoad;
	}
		
	/**
	 * CSVデータをパースして多重配列に
	 */
	private function _parseCSV(rawdata:String):Array{
		// 改行コードの差異をなくしすべて \n に
		rawdata = (rawdata.split("\r\n")).join("\n");
		rawdata = (rawdata.split("\r")).join("\n");
		// CSVを多重配列に
		var data:Array = new Array();
		var tmp:Array = rawdata.split("\n");
		var l:Number = tmp.length;
		for(var i:Number=0; i<l; i++){
			data.push(tmp[i].split(","));
		}
		// 最終行が空白ならば削除しておく
		if(data[data.length-1].length == 1 && data[data.length-1][0] == ""){data.pop();}
		
		// 戻す
		return data;
	}
	
	/**
	 * 文字列への変換
	 */
	function toString():String{
		var s:String = "[CSVLoader]\n";
		for(var i:Number=0; i<data.length; i++){
			s += " ["+i+"] " + data[i] + "\n";
		}
		return s;
	}
	
}
SharedObjectでハマったよ(いまさら)。メモ。 複数SWFで同一のSharedObjectを所有していて、その変化を監視するってのをやっていて、setIntervalでチェックしていたわけですよ。
var so:SharedObject; // so.data.userName が他のSWFで書き換えられる
var userName:String; // 検証用の古いデータ
function check():Void{
    so = SharedObject.getLoacal("hoge", "/");
    if(so.data.userName != userName){
        userName = so.data.userName; // 最新版を保持
        // ここにさらに処理
    }
}
var updater:Number = setInterval(check, 200);
まぁ、こんな感じで定期的にsolファイルを覗いていたつもりで。 でも、どうも変数 so が更新されてないっぽい。 悩むこと10分、どっかのサイトか本のこと書いてあったことを思い出す自分。 SharedObject.getLocal() ってシングルトンパターンじゃね?、と。 つまり毎回 getLocal() しても最初に生成したインスタンスが呼ばれているワケなんですね。。 そこで毎回 delete かましたら有効になりますた。
var so:SharedObject; // so.data.userName が他のSWFで書き換えられる
var userName:String; // 検証用の古いデータ
function check():Void{
    delete so; // 一度削除
    so = SharedObject.getLoacal("hoge", "/");
    if(so.data.userName != userName){
        userName = so.data.userName; // 最新版を保持
        // ここにさらに処理
    }
}
var updater:Number = setInterval(check, 200);
これでうまくいきましたー
張ってみますた。

仕事ではメガネばっかかけている印象があるようで、でもそれはきっと誤解。
昔も今もメガネなしが正しい格好。
ずっとマシンの前にいると目が疲れるからコンタクトじゃyなしにメガネなんですよ皆さん。

今日はひっさしぶりにコンタクト(1day)を買いにいって、そしたら「乱視用ワンデー」ってのが出てやがった。試しにつけさせてもらったらマジびびり。これ、超よく見えるんですけど!ねぇ、超よく見えるんですけど!

ということで、乱視用コンタクトに変えますた。


っつーか、久しぶりにコンタクト買いに行ったと思っていたら1年ぶりだった・・・。
60日間の分を1年もかけてゆっくり使っていたワケで・・・。

ボクは今までノートマシンを割と下に見ていましたが、様々な理由から持ち運びできる開発環境に惹かれてきていて・・・。

理由1:東京での開発

こんなにちっちゃい京都の会社なんですが、いよいよ東京案件が来る気配な今日このごろでして、打合せや開発などで東京へ行くこともしばしばな予感。
そこで、会社マシンと東京マシンとで開発環境をそろえたり、あれこれするのはめんどくさいので、この際、ノートで統一した方がいいんじゃね?、と。
これですごく効率的に仕事できますよね。

理由2:開発環境とデモ

これはGWで感じたことで、友人たちの前でちょっとしたデモを見せてて。
その場でXML作って、事前に用意したFlashアプリを動かすというモノだったんですが、わざわざノートマシンにデータ移すのがめんどくてめんどくて。
開発環境とデモ環境がいっしょだと素敵かな、と。ノートマシンいいよね、と。

欲しい環境

まとめてみますた。

  • 主に会社で使う制作マシン・開発マシンで、たまに(月数回程度)外に持っていく
  • モニタは大きめ、かばんにギリギリ入ればOK
  • メモリ2G以上
  • OS は WindowsXP で、だって Vista は不安定らしいから
  • ウェブカメラ付き
  • 外観オサレ
  • 寿命として4年使えれば万歳
  • 予算は30前後(ひー)

こんな感じで出た候補が2つ。 さらにあれこれ物色してきたのでメモメモ。

物色1:MacBook Pro + BootCamp + WindowsXP

MacBook Pro + BootCamp + WindowsXPというコンビで。
だって、まず外見がオサレ。スペックもイけてるし。
AppleStore に行ってあれこれ触ったり、話を聞いたけど、かなりの好感。
ただ、悩ましいところもいくつかあって、キーボードの配置が扱いにくそう(ショートカット)・MacOSXはほぼ立ち上げないのに・熱が多いっぽい、あたり。特にキーボードがマジで悩ましいっす。

物色2:VAIOオーナーメイド

こちらはソニースタイルストアに行ってきておねーさんにあれこれ聞いてきました。
モニタの大きさとかさわり心地などから、いいなとおもったのは、VAIO type F。 オサレだし。ウェブカメラいけるし。あと、MacBook Pro よりも10万円ほど安いし。
激しく悩ましいのが1点。WindowsVistaという点。このOSで仕事できんのか>俺?

さぁ、どっちにしようかなー♪
とりあへず会社の人にVistaについて聞いてみようっと。

サイト公開のことを僕は "ラウンチ" と言ってきたのですが、昨日上司から「会社では "ローンチ" に統一で」と指摘されましてですね、その雑感。

なんというか、どうも解せないというのが本心で、だって英単語は "launch"。
で、これ に "er" つけると "launcher"、こうなると "ランチャー" って読むじゃないですか。
だから僕は "ラウンチ" 派だったんです。

まぁ、アルク先生に聞いたところ、どうやら読み方はどっちでもいいみたいですけど。

【レベル】4、【発音】lo':n(t)∫、【@】ラーンチ、ランチ、ローンチ

あ、グーグル先生に尋ねてみると、
 ・ラウンチ:47,600
 ・ローンチ:252,000
ですねウフ。


激しくどっちでもいいような内容ですけど、どうでもいいように考えられなくって。
あ、ちなみに最近英語で悩んだのは単複同型名詞の後の動詞に関してっすね。
プログラムだと変数名が単数・複数かで視認性変わりますからねー。ですよね?

標準座標系 ⇔ 傾き座標系(?) を変換するクラス作っていて、そのときにもちろん flash.geom.Point を使ってるんですが、Point.interpolate メソッドでハマってました。 結論を言うとヘルプにミスがあったからなんですが、かなりファックですね。 Flash8のIDEのヘルプでは、Point.interpolateには
パラメータ pt1:flash.geom.Point - 最初のポイント。 pt2:flash.geom.Point - 2 番目のポイント。 f:Number - 2 つのポイント間の補間のレベル。pt1 と pt2 間の線に沿って新しいポイントがある位置を示します。f=0 の場合は pt1 が返されます。f=1 の場合は pt2 が返されます。
となっているんですが、これがウソ。 f=0 なら pt2 で、f=1 で pt1 というワケで。逆、逆。 30分ハマって Flex2 の livedocs で知る。
f:Number — 2 つのポイント間の補間のレベルです。pt1 と pt2 間の線に沿って新しいポイントがある位置を示します。f=1 の場合は pt1 が返されます。f=0 の場合は pt2 が返されます。
で、さらに調べてみたところ Flash8 の livedocs でどなたかコメントで指摘されていました@2005/11/06。ありがたや・・・。 ちゃんと livedocs も見ろってことなんですね。

生きながらえました。一周年ですね。

飲みすぎない。事故らない。死なない。

About this archive