Archive::Zipでミスった件

Archive::Zipでfileを圧縮したら、最初ミスってファイルのパスのまま圧縮されて解凍したときびびった件。

use Archive::Zip;

my $zip   = Archive::Zip->new();

$zip->addFile('/home/wajiho/test1.csv');
$zip->addFile('/home/wajiho/test2.csv');
$zip->addFile('/home/wajiho/test3.csv');

$zip->writeToFileNamed('/home/wajiho/sample.zip');

sample.zip解凍したら、

test1.csv
test2.csv
test3.csv

を期待していたのに、

/home/
    wajiho/
        test1.csv
        test2.csv
        test3.csv

だった。。

期待通りにするには

$zip->addFile('/home/wajiho/test1.csv','test1.csv');
$zip->addFile('/home/wajiho/test2.csv','test2.csv');
$zip->addFile('/home/wajiho/test3.csv','test3.csv');

とやるらしい。

とりあえず出来た。

actionscript3でxmlを読み込む

メモ。
ちなみに読み込むxmlコレxmlていうかlivedoorのお天気Webサービスなんですが。

import flash.display.*;
import flash.events.*;

var url:String = "http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today";
var loader : URLLoader = new URLLoader();
var request:URLRequest = new URLRequest(url);

function loadXML(url:String) :void{     
	loader.addEventListener(Event.COMPLETE, xmlCompfunc);
	loader.load(request);
}

function xmlCompfunc(event:Event):void {
	var results:XML = new XML(event.target.data);
	trace(results.telop);
}

loadXML(url);

読み込まれたデータはdataプロパティに格納されていて、読み込み完了後の処理(xmlCompfunc)で
new XML(event.target.data)で引数にして渡してxmlデータを作成していると。

PointLight3Dのメモ

勉強中〜

var light:PointLight3D = new PointLight3D(true);
light.x = 300;
light.y = 300;
light.z = 0;
scene.addChild(light);

new PointLight3D(true)ってするとライトのオブジェクトを表示してくれる。ふむふむ。

package 
{
	import flash.events.*;

	import org.papervision3d.view.*;
	import org.papervision3d.materials.shadematerials.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.lights.*; 

	[SWF(width="480", height="480", frameRate="30",backgroundColor="0x000000")]
	public class Main extends BasicView 
	{
		private var obj:Sphere;
		private var light:PointLight3D;
		private var rot:Number = 0;
		
		public function Main():void 
		{
			var world:BasicView = new BasicView();
			addChild(world);
			world.startRendering();

			light = new PointLight3D(true);
			world.scene.addChild(light);
			
			var material:FlatShadeMaterial = new FlatShadeMaterial(light, 0xFFFF00);
			//material.doubleSided = true;

			obj = new Sphere(material, 100, 15, 15);
			world.scene.addChild(obj);

			addEventListener(Event.ENTER_FRAME, loop);
		}
		
		private function loop(e:Event):void
		{
			rot += 0.5;
			
			light.x = 500 * Math.sin(rot * Math.PI / 180);
			light.z = 500 * Math.cos(rot * Math.PI / 180);
			
		}
	}
}

Outputタブにtrace()を出力する設定

まず僕の環境はコレ
Microsoft .NET Framework 3.5
Sun Microsystems - Java 6(JRE1.6)
FlashDevelop 3.0.6 RTM released
Download Flex 3 - Flex SDK - Confluence

  • Tools -> ProgramSettings(F10) -> AS3Context -> Flex SDK Location にDLして解答したflex_sdk_3へのpathを設定
  • Project -> Properties -> output -> Test Movie で 「play in external player」を選択


これでDebugにしてTestMovie実行したらtrace()出力された。満足。

今日の復習

本日は携帯の電池情報まわりで遊んでいました〜

fscommand2("GetBatteryLevel")
携帯端末専用のプログラムで、現在の「電池残量」を取得。PC向けのASに該当するものはない。
fscommand2("GetMaxBatteryLevel")
携帯端末専用のプログラムで、現在の「電池残量表示の最大値」を取得。PC向けのASに該当するものはない。

電池残量は日本では一般的には0〜3で取得するのですが、古い端末の一部や最近の端末では0〜100%で取得できるものがあるらしい。
最大値を取得してどちらのタイプか調べておくこと。

fscommand2("GetPowerSource")
携帯端末専用のプログラムで、現在「充電中か否か」を取得。PC向けのASに該当するものはない。

結果が1の場合充電中、0の場合は充電中ではない。

call("ラベル"or"ムービークリップインスタンス")
指定したラベルかムービークリップインスタンスのフレームに記載されているプログラムを呼び出し実行する。AS2や3に該当するものはない。
gotoAndStop(フレーム番号 or "移動したいシーン名")
指定した場所まで移動して停止する:
 //カンマで区切ることで、指定したシーン名の指定したフレーム番号に移動
 gotoAndStop("top", 3 ); 

今日の復習

random(変数)
0〜変数で指定した整数をランダムで選ぶ。ActionScript2や3の「Math.floor(Math.random * 変数)」に相当。
 rand_num = random(3);
gotoAndPlay(変数 or "ラベル")
指定したフレーム番号(変数で指定可)、もしくは指定した名前のラベルに飛んで再生する。ActionScript2や3でも同じ挙動。
 gotoAndPlay("label01");
fscommand2("GetTimeHours")
携帯端末専用。現在の「時間」を取得する。ActionScript2や3の「getHours()」に相当。
fscommand2("GetTimeMinutes")
携帯端末専用。現在の「分」を取得する。ActionScript2や3の「getMinutes()」に相当。
fscommand2("GetTimeSeconds")
携帯端末専用。現在の「秒」を取得する。ActionScript2や3の「getSeconds()」に相当。
 timeH = fscommand2("GetTimeHours");
 timeM = fscommand2("GetTimeMinutes");
 timeS = fscommand2("GetTimeSeconds");
int(変数)
変数で指定した値を少数点以下切捨てで整数にする。ActionScript2や3の「Math.floor()」に相当。