URLStream 사용기

Flex 2009/04/19 02:55
프로젝트를 진행하다가 몇가지 이슈사항이 발생했다.
AIR로 웹에 있는 파일에 접근해 FileReference 클래스 이용없이 맞바로 로컬에 파일을 생성해야하는 이슈였는데
이부분은 URLStream클래스로 간단하게 해결할 수 있었다.

private const HOST_NAME:String = "http://www.kineticroad.com/blog";

private var urlStream:URLStream;

private function urlStreamTest():void
{
urlStream = new URLStream();
urlStream.endian = Endian.LITTLE_ENDIAN;
var request:URLRequest = new URLRequest(HOST_NAME + "test.xml");
addEventListeners();
urlStream.load(request);
}

private function addEventListeners():void
{
urlStream.addEventListener(Event.COMPLETE, completeHandler);
urlStream.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
urlStream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
urlStream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
}

private function removeEventListeners():void
{
urlStream.removeEventListener(Event.COMPLETE, completeHandler);
urlStream.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
urlStream.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
urlStream.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
}

private function completeHandler(event:Event):void
{
var remoteData:
var clientFile = new File('D:/test.xml');
var clientStream:FileStream = new FileStream();
clientStream.open(clientFile, FileMode.WRITE);

while(urlStream.bytesAvailable)
{
var value:int = urlStream.readByte();
clientStream.writeByte(value);
}

clientStream.close();
urlStream.close();
}

private function ioErrorHandler(event:IOErrorEvent):void
{
trace("IOError / " + event.type);
}

private function securityErrorHandler(event:SecurityErrorEvent):void
{
trace("Security Error / " + event.sandboxType);
}

private function progressHandler(event:ProgressEvent):void
{
var percent:Number;
percent = Math.round((bytesLoaded * 100) / bytesTotal);
trace(percent + "% complete");
}


아주 간단한 만든 샘플인데 일단 서버의 파일에 접근해서 readByte로 읽어온다. 읽어온 value를 미리 선언해 뒀던 클라이언트 파일에 writeByte로 작성에 넣는 작업을 수행하게 되어있다.
아주 간단하게 구성되어있는 이 소스를 기반으로 여러가지 작업을 할 수 있게 되었는데
대표적으로 모듈단위의 AIR 업데이트를 수행하는 것이나 서버의 이미지 파일을 지정된 위치에
지정한 이름으로 저장할 수 있게 하는 FileReference.browse() 메서드 기능을 구현할 수도 있다.
잘만 만들면 FTP 비슷한 프로그램을 만드는 것도 가능할 것이다.
2009/04/19 02:55 2009/04/19 02:55
그동안 완전히 블로깅을 손놓고 있었다.
그도 그럴게 프로젝트다 뭐다 해서 좀 정신이 없었기 때문이기도 하고
시험준비를 하느라고(요새 대학교는 중간고사 시즌이란다;;; 덜덜) 새벽까지 수업듣고 자느라
정신을 챙길래야 챙길만한 여유가 없었기 때문인데 오늘은 AIR 에대한 내용으로 블로깅을 해볼까 한다.

AIR를 처음 만진게 1.0 처음 런칭했을 때였는데(코드명 아폴로로 불렸을 때는 존재를 잘 몰랐었다;;; 아 둔탱이)
그당시 개발을 EditPlus로 하느라 AIR가 어떤식으로 Compile하고 실행하는지 Developer Guide를
하나하나 해석해가며 눈물을 삼겼었던 적이 있었다.(흑.. 추억하고 싶지 않다는;;;)

그때 만들었던게 FXUG Lite였다. FXUG(Flex User Group)는 회사에서 만든 비영리 커뮤니케이션으로
Full Flex로 개발되어 MDI로 구성된 UI를 선보였었다.(개발하는데 무려 3개월이나 걸리긴 했지만;;)
아무튼 FXUG Lite의 기능중 극히 작은 기능이긴 하지만 사용자가 동적으로 화면의 구성을 바꿀 수 있게
마련한 옵션 메뉴가 있었다. 이것은 사용자가 사용자 정보 xml 파일을 읽어봐 수정하고 다시 쓰는 작업을
하게끔 되어있는데 그 때 크게 발생한 이슈가 사용자의 ApplicationDirectory에 있는 파일을 수정하거나
쓸 수가 없었다는 것이다.
보통 프로그램을 설치하게 되면 ApplicationDirectory가 Program Files 디렉토리로 설치가 되는데
그 부분을 Flie.ApplicationDirectory 속성으로 접근해 파일을 다시 쓰게 되면 Security Error를 띄우도록 AIR의 보안정책으로 명시 되어있다.
이를 어찌할까 하다 구글링으로 찾은 꽁수는 어느 중국인의 블로깅을 보고 힌트를 얻었었다.
(한자들 앞에서 무력했었던 끔찍한 기억 작렬 ㅠㅠ)

해결한 방법은 다음과 같다.

var tempFile:File = File.applicationDirectory.resolvePath("test.xml");
tempFile = new File(tempFile.nativePath);

일단 tempFile로 선언된 File 객체에 test.xml 파일에 접근한다. applicationDirectory에 있는 파일에 접근해 정보를 읽는건 보안정책에 어긋나는건 아니니 일단 접근을 하고 새로 File 객체를 생성한다. 물론 instance를 늘리지 않고 기존에 사용했던 tempFile를 다시 생성하는데 이때 아까 접근했던 test.xml 파일의 nativePath 경로를 인자로 넘겨준다.

이 방법을 이용하면 test.xml 파일을 찾아서 쓰거나 수정할 수가 있는데 이유인즉슨 이렇게 해석될 수 있다.
보안정책상 파일에 applicationDirectory에 속해있는 파일을 수정하거나 쓰는건 안된다. 다시 이야기하면 File 객체로 접근만 하지않으면 된다는 이야기.
그래서 잔머리를 굴린방법이 nativePath다.
applicationDirectory에 접근하긴 했으나 String으로 접근하게 되면 보안정책상 하자가 없다는 이야기다.
Adobe에서는 이런 정책을 수정해서 접근 할 수 없게 하겠다....라고 이야기 했다고는 하나(들리는 풍문에 의하면)
"Adobe가 귀찮아서 안하지 않을까?"라고 조심스럽게 추측하고 있다.(사실 믿고 있다. Adobe)

하지만 이 방법으로도 어려운 난제가 있는데 Vista 이후의 Window는 위의 방법으로도 파일을 쓸 수가 없다.
그 이유는 AIR 의 보안정책에는 하자가 없지만 운영체제 상의 보안정책때문인데 이는 관리자 모드로 프로그램을 실행하게 되면 파일을 쓸 수가 있다.(AIR 자체로는 이를 해결할 방법이 없다;;;
운영체제가 막겠다는데 이겨낼 방법이 있을 수가 없지 않은가;;;
아 물론 XP 사용자는 해당사항이 없다.
2009/04/19 01:45 2009/04/19 01:45

every beat of my heart

Diary 2009/03/18 15:17

For better or worse, till death do us part
기쁠때나 슬플때나 죽음이 우리를 갈라놓을때까지

I'll love you with every beat of my heart.
내심장이 뛰는 그 순간순간마다 당신을 사랑하겠습니다.

2009/03/18 15:17 2009/03/18 15:17

장래희망

Diary 2009/03/02 10:59
내 장래희망은 맨 처음엔 과학자였다.
그 다음은 과학자에서 천문학자가 되고 싶었다.
초등학교 5학년때 별을 보기 위해 밤새 추운공기에 벌벌 떨면서 북극성과 카시오페아를 관찰하면서 그런 생각을 했다.
그 다음은 만화가가 되고 싶었다.
그림그리는게 좋았고 못그렸어도 상관없었다.
그저 그림그리는게 자다가도 깨서 그림을 그릴만큼 좋았다.
그 다음은 음악가가 되고 싶었다.
음악을 접한게 중학교 2학년. 사춘기의 질풍노도의 시기를 음악으로 채웠다.
노래도 배웠고 악기도 배웠고 화성학도 배웠다.
아마 고등학교 1학년때 어머니가 기타를 빼앗고 공부하라고 혼내지만 않았어도 내 인생은 바뀌었을 것이다.
그 다음은 다시 미술을 하기 시작했다.
미술은 나를 회귀시켰다. 마냥좋았다.
내 생각처럼 움직이지 않는 손이었어도, 빛을 잘 보지 못하는 내 눈이라 할지라도 내 마음을 표현하는데 서툴은 나였어도 연필을 들고 그림을 그리는게 좋았다.
그 다음은 사진을 찍기 시작했다.
작가가 되고 싶다는 갈망을 했다. 그런 와중에 미대에 들어갔다.
대학교에 가서 사진을 찍었다. 필름카메라를 들고 다니면서 현상하고 인화하고 현상하고 인화하고..
고3때 1년동안 한 100롤 정도 찍었던거 같다.
돈이 부족해서 아직 현상도 못한 필름이 수두룩 하다.
그리고 군대를 갔다. 그리고 같이 카메라를 놓았다. 그리고 전역했다.
그리고 졸업했다.
그리고 난
지금
프로그래머가 되었다.
UI 개발자가 되었다.
어째서 된것인지 어째서 이 길로 들어갔는지 몰랐다.
문득 생각했다.

내 사춘기의 음악을, 내 고등학교 시절의 음악을, 내 사진들, 그림들.
그 모두가 초등학교 시절에 꿈꿨던 별과 별사이를 날아다니는 별자리 처럼
하나의 지도를 그려 내가 여기에 앉아있구나.

하고 미화시켜 날 치장했다.


난 내가 만든것이 상대를 만족했으면 하는 삶을 살았으면하고 꿈꿨던 것 같다.
내 몸이 불편하고 내 생각이 부족해도
내 손은로 만든것, 그린것들이 여러 사람들에게 보여지고 만족한다면 나 또한 만족했던것 같다.
내 안위도 필요 없었고 내 건강도 필요없었지.

하지만 내가 만들어갔던 모든 것. 정작 나 스스로 만족했던 것은 있었는지.
그러 것들을 사람들한테 보여주곤 나에게 만족함이 없어서 계속해서 뭔가를 만들어가는 지도 모르겠다.
내 스스로에게 만족함이 없었기에 상대에게 보여주고는 실망했는지도 모르겠지.
어쩌면 내 스스로에 대한 만족은 점점 진화해 가는 내 욕심들일지도 모르겠다.
가끔 술에 취해 내가 움직이고 일하는 원동력이 뭐라고 생각하는지 이야기 하곤한다.

그래. 여전히 난 열등감속에 빠져있어.


그런 열등감이라는게 타인과 나를 비교해서 생기는 열등감이 아니라
나 스스로에 대해 열등함을 느끼기 때문이겠지.
열등함을 이겨내서 "내가 이긴것. 내가 이것 때문에 여태 살아온거야!" 라고 외치고 싶은것이겠지.
결국.
그래서 난 죽지 못하는 것이겠지.


내 장래희망은 역시
나를 납득하는게 아닐까.
그 희망을 이루면 내게 내일이 있을까.
2009/03/02 10:59 2009/03/02 10:59

아..나 눈물좀 닦고

Flex 2009/01/30 13:47
사용자 삽입 이미지
네이버 월요일 목요일 웹툰으로 올라오는 김규삼님의 "입시명문사립정글고등학교"에서 이번 1월 29일자 웹툰에 정말 좋은 만화라고 생각되서 낼름 퍼왔다.
(저작권에 저촉되는 사항이 있다면 바로 삭제하겠음)

사실 우리나라는 학벌이다 뭐다 하면서 이것저것 따지는 것도 많고 말도 많다.
이번에 미네르바 일도 그렇듯 조중동에서 떠들어대는 전문대졸 무직자라는 타이틀이 왠지
"이런 병맛같은건 안봐도 병맛이므로 당연히 범인이다"라고 강조하는 듯 했다.
물론 내가 전문대졸자라서 그런느낌을 받게 된것일지도 모른다.
하지만 이건 아니지 않나 싶다.

학벌로 인해 사람이 평가 되어야만 하는건가?
왠지 이런 사회를 보고 나카타라는 영화를 보는 것만 같아 슬퍼지기까지 한다.

우리는 서울에 있는 대학을 사람을 우월하다고 생각하고
전문대졸, 고졸자들은 열등하다고 판단하는 건가 하면서 자괴감에도 빠지기도 한다.

하지만
내가 있는 곳에서 내가 하고 싶은 일을 하면서
내가 해야만하고 그 안에 노력을 심는다면 그 누가 내게 "그까짓 학력으로.."라고 말한다 할지라도
그 누구에게 당당하게 이야기 할 수 있겠지.

난 돈도 없고 시간도 없이 일만하는 일벌레다.
난 집도 없고 차도 없고 그렇다고 능력이 남보다 좋은것도 아니다.
지금은 보잘 것 없고, 깔보일지 모른다.
어쩌면 당신처럼 돈을 잘 벌지 못할지도 모르고 편하게 지내지 못할 수도 있다.
하지만 난 적어도 내가 하는 일을 위해 하얗게 불태운 적이 있었다.
그리고 적어도 내가 하는 일에 만족함을 느낀다.
2009/01/30 13:47 2009/01/30 13:47
사용자 삽입 이미지
== WARNNING [스포일러임] ==

마법사에게 소중한 것 ~ 여름의 하늘 이라는 에니메이션을 보았다.
그림체, 색감, 스토리 어느것 하나 빠지지 않았고 OST또한 훌륭했음.
남자의 로망인 거대변신로봇이나 전설을 만드는 대마법사의 모험이야기같은 것도 아니였고
우리가 살고 있는 이 세상에 사람이 바람을 조그이나마 이뤄주는 그런 사람들이 있다면.. 이라는 상상으로 만들어진 에니메이션 이었다.(적어도 내가 바라보기엔)

여주인공인 소라라는 주인공의 마지막 여름을 보내면서
마법사가 되기 위한 연수를 받게 된다.
한명의 사회인이 되기 위해, 사회에 안에서 마법사로 공인되기 위해 받는 연수.
그것이 주인공이 살아가면서 이뤄야할 꿈으로 목표로써 표현되고 있다.
그런 주인공은 마법사로써 자신의 의뢰인의 마음을 이해하고
의뢰인에게 다가가 그 소원을 이뤄주면서 일어나는 이야기를 그린다.
마법과 현재의 세상이 공존하면서 사람들의 꿈을, 희망을 이뤄주는 직업으로 마법사들이 사회와 공생해간다.
하지만 '마법만이 만능은 아니다. 중요한 것은 마음이다.'라는 메세지를 청자에게 계속해서 강조한다.
자신의 꿈을 이루기 위해 다른 이들의 꿈을 이루는 주인공의 모습 속에서
깊은 감명을 받았다.

자신의 마지막 여름을, 자신의 마지막 순간을 자신의 꿈을 위해 살아간 한 소녀의 이야기를
그려낸 이 에니메이션에서 나 스스로에게 되묻고 있었다.
배고프고 힘들고 피곤한 일상이지만
적어도 꿈을 꿀 수 있어서 행복했다고 나중에 이야기 할 수 있을까.

OST또한 훌륭했다.
THYME 이 불렀다. 좀 알아보니 여러 에니메이션의 OST를 불렀구나!
(뭐.. 이렇게까지 OST에 꽂힌게 몇번 없었으니 이렇게 조사한적이 없었으니 잘 모를 수밖에;;)
OST를 듣고 싶다면 아래의 블로그로!

http://blog.naver.com/xh26?Redirect=Log&logNo=130017895958 - 류냐님의 블로그
http://hekiru.tistory.com/118 - YUKI_N 님의 블로그
2009/01/18 17:26 2009/01/18 17:26

AIR Examples

Flex 2009/01/14 13:50
http://airexamples.com/

오랜만에 열이아빠님 블로그를 놀러갔더니 AIR Examples라는 제목의 포스트가 있어서 봤더니
AIR Example 이라는 AIR의 예제소스를 만드는 블로그를 찾을 수 있게 되었다.

사용자 삽입 이미지
AIR 업무를 곧잘 맡는 나로써는 유용한 사이트가 아닐까.
이런 예제들을 담은 사이트들이 점점더 많아졌으면 좋겠당

우왕굳~

ps : 열이아빠님의 포스트는 http://koko8829.tistory.com/?page=4 이곳으로.
2009/01/14 13:50 2009/01/14 13:50

일? 아르바이트? 돈?

2009/01/13 22:52

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

CS4 MasterCollection도 깔았겠다 슬금슬금 이것저것 만져보기로 했다.
물론 이번 버젼엔 AS4.0이 나오거나 하지 않았으므로 기껏해야 Astro 버젼의 API가 추가되었을 뿐 AS3.0과는 별반 다를바가 없으므로 ActionScript는 별도의 이야기는 하지 않겠다.
우선 Flash CS4를 실행하면 범상치 않은 디자인이 등장하며 아래 화면을 보여준다.
CS3와는 별반 차이가 없지만 잘 보면 몇가지 다른 부분이 눈에 띈다.
사용자 삽입 이미지
Mobile을 위한 Flash Lite 라던지 AIR를 위한 Flash AIR와 같은 메뉴를 별도의 Extention을 거치지 않고 당연스레 들어가있다.
Flex AIR 프로젝트도 같이 하는 나로써는 다시한번 호기심 발동!
Flash에서 사용하는 AIR는 얼마나 차이가 있을까.
이런 나의 욕구를 충족이라도 하듯 Adobe에서는 한들 도움말을 지원해준다.
http://livedocs.adobe.com/air/1_kr/airextflash/
알고보니 CS3;;; 나온지 한참되었구나;; 검색을 자주 해야 겠다;;

사용자 삽입 이미지
일단 오늘은 맛보기로 가볍게 하자 생각을 하고 Flash File (ActionScript 3.0) 메뉴를 골랐다.
사용자 삽입 이미지
일단 인터페이스 몇가지가 바뀌었다.
첫째고 돋보기 툴 단축기가 Z에서 M으로 바뀌었고 그 자리를 꿰찬건 본 툴(Born Tool) 그 덕에 익숙해지기까지 시간이 꽤 걸렸다. 그 외에 디자인 이라던가 화면의 구성이라던가 하는 것들이 CS3보다 세련되어 진것 같다.
잠깐 딴 이야기를 하자면 요새 CS 프로그램의 디자인 컨셉은 왠지 Adobe를 따라가는 듯 AIR로 만들어진 요즘 프로그램들이 Adobe CS4 느낌이 나게끔 디자인 되서 나오고 있다.
그렇다면 CS프로그램 디자인의 대세는 Adobe인가????.......-_-;;;;

사용자 삽입 이미지
뭐 일단 평소대로 Shape을 하나 만들었다. 기존의 인터페이스와는 다를 바가 없어 설명할 거리가 없네;;


사용자 삽입 이미지
물론 이 Shape을 갖고 애니메이션을 만들어볼 것이기 때문에 MovieClip으로 Symbol화 시킨다.

사용자 삽입 이미지
자 Symbol화 시켰다. 이제 에니메이션을 줘 볼까.

사용자 삽입 이미지
사용자 삽입 이미지
평소처럼 MotionTween을 클릭했더니 자동으로 1초 만큼 에니메이션이 자동으로 생성되었다.
평소와는 반응에 좀 동유를 해서 이 상태에서 심벌을 이동해봤다.

사용자 삽입 이미지
자동으로 키프레임이 생성되면서 에니메이션이 만들어지는게 아닌가!
순간 AfterEffect 인터페이스를 여기에 집어넣은게 아닌가 생각했다.
에니메이션 기능이 대폭 향상되었다는 이야기가 사실이었군.

사용자 삽입 이미지
게다가 자동으로 에니메이션 된 객체의 가이드 라인이 생성되었다.
오 놀라운걸 싶어서 가이드 라인에 마우스 커서를 올려놓았더니 이미지처럼 커서가 바뀌길래 클릭해서 샥 움직였더니 아래의 이미지처럼 변하는게 아닌가!

사용자 삽입 이미지
오.. 놀랍다. 예전에 학교에서 가이드 라인을 쓸 줄 몰라 엄청 헤맸었는데 CS4부터는 가이드 라인 자체가 에니메이션에 포함되어 꽤나 크게 놀라움을 선사했다.

사용자 삽입 이미지
키프레임을 하나 중간에 넣어두고 다른 부분의 가이드 라인을 잡아 늘렸더니 이거 왠걸.
알아서 가이드 라인이 분리되어 별도로 적용하게끔 되었다.
꽤 괜찮은걸;;

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
게다가 Tween 된 부분 끝에 마우스를 올려놓으면 또 마우스커서가 변하는데 저 모양은 왠지 좌우로 끌어당기고 싶은 커서보양이라 나도 모르게 끌어보았더니 이게 왠걸,
Tween이 알아서 늘어남과 동시에 키 프레임 간격도 알아서 늘어나 버렸다.
이거야... 완전 AfterEffect와 같은 인터페이스가 아닌가;;

Flash 에니메이션도 이제 장족의 발전을 이룩했다는 사실에 깜짝 놀랐다.
이것 뿐아니라 3D Rotation이라던지 Bone Tool이라던지
Motion을 Editing할 수 있는 MotionEdit패널이라던지 하는 놀라운 툴들이 Flash CS4의 기능들로 자리를 잡으면서 디자이너가 별다른 힘 들이지 않고도 놀라운 플래시 에니메이션을 만들어낼 수 있게 되었다.
더욱 놀라운 사실은 모션을 ActionScript로 Convert할 수 있는 기능까지 있으니 당황스럽기 그지 없겠다.

Flash CS4의 기능들을 죄다 열어볼때쯤이면 CS5가 나오는건 아닌지;;
좀 더 시간을 내서 툴을 익혀야 할 듯.
2탄은 MotionEditor 패널에 대해서 알아보자.
2009/01/13 22:34 2009/01/13 22:34
나는 내가 나이 듦을 생각할 때 지금 내게 시를 쓸 수 있는지에 대해 묻는다.
사춘기 시절.
작가가 되고 싶을 정도로 글을 열심히 썼던 나에게는
단편으로 몇 편 적어 놓은 소설과
이성에게 눈을 뜨고 풋사랑에 눈이 멀어 적었던 우스꽝스러운 시 몇 구절이 기억난다.

요즘 들어 감수성이란 것.
난 변하지 않고 늘 한결같을 것이라고 믿었지만
난 지금 시를 쓰지 못하고 마음을 담아 글을 쓸 수 없다는 사실에
스스로에게 실망하고 있다.
그래.. 내가 그림을 그리지 못하는 이유도 이 때문이겠지
정열, 마음, 나의 생각을 담지 못하고 보여주지 못하는 그림을 어찌 그림이라 할 수 있겠나.
그런 글을 어찌 글이라 할 수 있겠나.

2009년. 그렇게 한해가 가고. 그렇게 한해가 시작되면서
조금씩 내 한귀퉁이의 감성은 조금식 퇴화해 간다.
놀라운 일들이 줄어들고
기쁜 일도 조금씩 줄어든다.

그러면서 성장하는 것..일까?
2009/01/10 10:24 2009/01/10 10:24