2009년 7월 30일 목요일

Flash Media Interactive Server Feature Explorer

아래의 주소로 가면 AIR로 만든 Flash Media Interactive Server Feature Explorer를 다운 받을 수 있다.

 

http://www.adobe.com/devnet/flashmediaserver/articles/fmis_feature_explorer.html

Timer 생성

      _timerDown = new Timer(10);
      _timerDown.addEventListener(TimerEvent.TIMER, onDownTimer);
      _timerDown.start();

 

위와 같이 타이머를 실행하면 된다.

2009년 7월 29일 수요일

Adobe AIR 웹 도움말

Adobe® AIR® 1.5 Help on the web

http://help.adobe.com/en_US/AIR/1.5/devappsflex/

 

아래는 한국어로 번역된 것

 

Adobe® AIR™ 1.5 웹 도움말

http://help.adobe.com/ko_KR/AIR/1.5/devappsflash/

 

이걸 왜 지금 찾아갖고...

2009년 7월 27일 월요일

Air에서 Win32 Application execute 하기

Air에서 기본적으로 Win32 Application을 실행할 수 없다(Air 프로그램은 가능하다). 그래서 MFC로 소켓서버를 만들고 로컬서버에 Air로 그 로컬서버에 접속하는 클라이언트를 만든 뒤 소켓 데이타가 전송되면 MFC 쪽에서 프로그램이 실행되도록 만들었다.

Scrollbar postion이 지정되지 않을때

grid.verticalScrollPosition = 0;

grid.verticalScrollBar.scrollPosition = 0;

 

위는 되고 아래는 안된다.

 

참고 : http://forums.adobe.com/thread/424032

태도

가치, 유행, 효율 이런 것들로 이야기를 나누는 자리가 불편하다. 나는 그런 것들을 잘 알지 못한다. 모르는 것을 말하고 그 말에 책임감을 느껴야 하는 것이 불편하다는 것이다. 뭔가를 말해야 한다면 누구는 어떤 글에서 이렇게 말하더라 정도로 끝낸다. 적극적으로 보이면서도 책임을 피할 수 있다. 스스로 야비하다는 생각이 들때도 있다.

 

나는 소프트웨어 개발자다. 이것이 나의 배경이다. 내가 먹고 자고 입을 수 있게 하는 중심에는 내가 소프트웨어 개발자로 일하고 있다는 사실이 있다. 나는 회사가 요구하는 프로그램을 만들고 그것을 팔아 번 돈을 타며 생활한다. 이러한 방식으로 살아가는 사람들이 또 있고 그 사람들 사이에는 이 터전을 가꾸는 방법에 대한 고민이 있다. 이런 것에 대한 생각을 까보이는 것이 어렵다고 했지만 결국 나 또한 무언가가 옳다거나 더 괜찮을 것이라는 믿음을 갖고 산다. 내가 믿는 것들을 어떤식으로 증명하고 실현하느냐가 요즘 나의 가장 큰 고민거리다.

2009년 7월 23일 목요일

Air에서 애플리케이션의 타이틀바 지우는 방법

프로젝트를 생성하면 src 디렉토리에 만들어지는 xml 파일이 있다. 여기에 systemChrome 라는 엘리먼트가 있는데 주석을 해제하고 systemChrome의 텍스트 값을 none으로 지정해준다. 여기까지 하고 실행을 하면 타이틀바가 윈도우 타이틀 바에서 flex에서 지원하는 듯한 스타일의 타이틀 바로 바뀐다. 이 마저도 사라지게 하려면 mx:WindowedApplication 의 showFlexChrome 프로퍼티를 false로 바꿔주면 된다.

 

+ 했더니 메인의 배경으로 지정한 이미지가 사라진다.

Flex에 YouTube 붙이기

YouTube API에 공개된 Flash용 API는 AS2 기반으로 되어있다. Ben Longoria라는 사람이 이걸 AS3 프로젝트와 Flex에서 사용할 수 있게 래핑한 tubeloc클래스를 공개해놨다. 여기를 가면 나온다. 단점은 이 클래스를 사용하면 스테이지 위에 YouTube player를 한 개밖에 넣지 못한다는 것. 다른 방법으로 가능한지는 아직 모르겠다.

2009년 7월 22일 수요일

개기일식 사진

 

잘 안찍힌다. ㅎ

wmode 문제

wmode 라는 게 있는데 flash를 포함하는 호스트 애플리케이션 쪽에서 이 값을 transparent, opaque 등으로 지정할 수 있다. 이를 transparent로 지정하면 flash에서 Sprite가 없는 영역에 호스트 애플리케이션의 화면을 보여주게 된다.

 

회사 flex 프로젝트 중 한 개에서 문제가 발생했었다. 컨트롤 한 개가 스크롤링 되어 스크롤바가 생겼는데 스크롤을 하면 안쪽의 컨텐츠가 깨지는 현상이 발생했다. 문제는 wmode가 transparent 였기 때문인데 이 설정을 지워주니 해결됐다.

doubleClick 이벤트 받기

doubleClick 이라는 속성이 보이길래 이벤트 핸들러를 걸었겄만 이벤트가 발생하지 않았다. doubleClickEnabled 도 보이길래 true로 줬더니 그제사 이벤트가 발생핬다.

flash 호스트 애플리케이션 메소드 콜

import flash.external.ExternalInterface;

 

ExternalInterface.call("methodName", "인자", ... );

 

위와 같은 방법으로 자바스크립트의 methodName 메소드를 실행시킬 수 있다.

2009년 7월 20일 월요일

PureMVC 사용에 대한 고민 2

이번에 PureMVC를 안 쓴 프로젝트를 페어 하면서 배운 것.

 

+ 계층 구조가 복잡한 컨트롤 집합에서 한 쪽의 이벤트에 의해 다른 쪽이 바뀌는 경우 PureMVC는 notification을 쏘면 관련된 컨트롤이 알아서 반응 하지만 Flex만 사용하는 경우 여기서 쏘고 저기서 받아다 다시 쏴주고 이런식으로 해야 하는 것 같다. Flex 자체에서 지원되는 다른 방법은 없는 것 같다(확실하지 않음). 이를 직접 구현 가능하다 할지라도 PureMVC가 제공하는 무언가를 만드는 것이므로 이는 PureMVC의 장점이다.

 

+ 자료구조를 직접 구현하느냐 XML에서 e4x 등으로 사용하느냐 문제는 이전의 고민 에서 생각을 조금 바꿔야겠다. XML처럼 런타임에 데이터를 확인할 수 있는 구조는 테스트가 완벽하지 않으면 버그가 생겼는지 아닌지 알기 어렵다. 타입을 강조하면 컴파일 타임에 에러로 알 수 있는 장점이 있다. 가장 적당한 수준은 자료구조 직접 구현에 검색은 구조를 XML로 바꿔서 e4x로 검색하기 정도가 아닐까 싶다. 물론 아직 추측.

 

+ PureMVC에서 모델로 XML을 사용하고 notification으로 그 xml의 참조를 보내서 dataProvider로 연결하는 코드를 봤다. 뷰 컴포넌트의 dataProvider에 맞춰서 모델을 사용하면 모델 재사용성의 증가는 언제 말할 수 있을까?

 

배운 것이라고 시작하고선 또 질문만 잔뜩 만들었구나.

flex mouse wheel 이벤트

ui.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel);

 

위와 같은 식으로 휠 이벤트를 받는다.

 

public function onMouseWheel(event:MouseEvent):void

 

위에서 event.delta 값이 음수, 양수 형태로 넘어오는데 그 값을 처리하면 된다.

flex 트리에서 여러줄로 보여주기

wordWrap="true"

variableRowHeight="true"

 

트리에 위 두 속성을 지정하면 된다. 글자 보여지는 공간이 좁아서 한 건데 tree 스타일에 indentation: 0; 을 주면 자식을 들여넣는 정도를 0으로 지정해서 공간이 넓어진다. 2 depth 밖에 없고 아이콘이 달라서 indent를 0으로 지정해도 볼만하다.

스크롤바 가장 밑으로 이동하기

1. callLater - 큐에 넣어 나중에 호출 됨

컨테이너에 생긴 스크롤을 아이템이 추가될 때마다 가장 밑으로 내리고 싶을때 영역 계산이 잘못돼서 스크롤바가 제대로 표현되지 않는 경우가 있었다. 해당 컨테이너의 updateComplete이벤트에 callLater를 걸어서 잠시 지연시켜 주면 정확히 이동된다.

 

2. outerDocument

outerDocument 는 itemRenderer에 넣은 것이 mxml에 있는 함수를 호출할 수 있는 유일한 방법. <mx:Component>로 싸면 독자적인 스코프를 갖게 되는데 그걸 포함하는 mxml을 얻을 때 outerDocument 를 쓴다고 한다.

 

페어하다 못한거 다른 분이 주말동안 해결한 내용인데 듣기만 한 거고 코드는 보지 못했음 ㅎ.

 

출처 : 이수석.

2009년 7월 15일 수요일

자뻑 성향과 말 섞지 않는다.

PureMVC 사용에 대한 고민

Flex에서 PureMVC를 사용하여 얻는 이득이 뭘까? iPhone 개발때 UIKit이라는 프레임워크를 사용한 경험이 있다. UIKit은 기본적으로 MVC를 지원하는 구조다. 그런데 PureMVC는 Objective-C용 포팅도 존재한다. MVC위에서 MVC 프레임워크를 사용한다는 게 무슨 의미일까? 기존 MVC는 MVC인거고 PureMVC만의 장점을 추가적으로 얻겠다는 것일까? 나와 비슷한 의문을 갖고 있던 사람의 글이 있다.

 

참고 : http://www.bit-101.com/blog/?p=1954 (Cliff는 다음 문장이 포함된 코멘트를 달았음 "Do I need a MVC framework such as PureMVC for developing an iPhone app? You don’t! Because Objective-C based already on a MVC paradigma.". Brian Knorr도 코멘트를 달았는데 어떻게 좋아졌다는 것인지는 잘 모르겠다.)

 

예전 iPhone 개발 경험에 비추어 생각한 거지만 나의 질문은 처음에 말한 것 처럼 Flex에서 모델과 뷰를 분리하는데 PureMVC가 주는 이득이다. 물론 PureMVC의 다른 장점도 있지만 이번 프로젝트를 PureMVC로 진행하면서 View를 표현하기 위한 컬렉션과 모델의 컬렉션 두 개를 유지하면서 문제가 있었다. 뷰 자체가 child 뷰들을 갖고 있는 리스트와 내가 모델에서 사용한 리스트의 행동이 달라서 생긴 것인데 차라리 뷰에 지정한 dataProvider를 모델로 사용하면 두 리스트의 내용을 동일하게 맞추기 위해서 고생을 할 필요가 없을 것 같다.

 

아직 잘 모르겠어서 글은 의문일 뿐이다. 머리로만 생각해서는 답을 잘 못내리겠다. 내가 이상하게 짜놓은 것과 비교를 한 것일 수도 있다. 코드좀 더 짜봐야지.

데이타 그리드 아이템 만큼 height 늘리기

rowCount="{dg.dataProvider.length}"

 

위처럼 mxml에서 지정하면 아이템이 데이타 그리드의 아이템 표현 영역보다 커져도 스크롤바가 생기는 게 아니라 그리드 크기가 커진다.

2009년 7월 14일 화요일

2009년 7월 13일 월요일

스타일 지정 속도개선

StyleManager.loadStyleDeclarations("assets/blue.swf");

 

위의 코드를 creationComplete에서 initialize로 옮기니까 깜빡임이 사라졌다.

Tree 컨트롤 텍스트 업데이트 하기

labelFunction을 사용하여 트리의 출력 문자를 지정하고 있다. 값이 바뀌면 update를 해줘야 하는데 tree의 dataProvider를 다시 지정해주면 된다. 이때 열려져 있던 tree들이 다 접혀버리는 문제가 있다. 이를 해결하기 위해서 tree의 openItems를 잠시 저장했다가 dataProvider를 지정하고 저장해둔 openItems를 복원하면 잘 된다.

TabNavigator, ViewStack 예외

TabNavigator 컨트롤을 사용하는데 보여지는 view가 아닌 곳을 참조하면 예외가 떴다. 남들은 어떻게 해결하나 찾아보니 creationPolicy라는 게 있다. 이 것을 all로 지정 해주면 자식 view들을 미리 생성하기 예외가 발생하지 않는다.

flex에서 xml embed 하기

참고 : http://blogs.ilog.com/elixir/2008/07/16/embedding-xml-in-your-flex-application/

Scrollbar가 생겼는지 확인하는 방법

크롬 자식에 박스를 그리는데 스크롤바 영역 위에까지 그려지는 버그가 생겼다. 스크롤바가 생겼을 경우에는 그 영역 위에서 박스가 그려지는 것을 막기위해 아래의 것들을 찾았다.

 

스크롤바가 생겼는지 확인하는 방법:

trace(control.verticalScrollBar != null ? "생겼음" : "안생겼음");

 

스크롤바 width 구하는 방법:

control.verticalScrollBar.width

 

어쩌면 크롬영역에 넣을게 아니라 UIComponent 를 어떻게 잘 해서 넣으면 될 것 같기도 하다. 아직 잘 모름.

flex Alert 기본 label 바꾸기

flex에서 alert의 버튼 label을 바꾸려면 아래처럼 코딩한다.

   Alert.okLabel = "확인";
   Alert.yesLabel = "예";
   Alert.noLabel = "아니오";
   Alert.cancelLabel = "취소";

2009년 7월 10일 금요일

WebORB for PHP

WebORB for PHP

 

http://www.themidnightcoders.com/products/weborb-for-php/overview.html

만들어 볼 것

생각

- 어떤 그룹들에 속해있는 아이템들의 추가, 삭제, 검색, 값 변경, 순서 변경을 하는 일이 많다.

- 어떤 행동이 시작될 아이템들은 선택되면 자신이 선택됐음을 mediator에 알리곤 한다.

 

필요

- 구현하면 위에서 말한 기능이 지원되는 컨테이너 interface 정의.

- 아이템이 자신의 소속을 쉽게 알릴 수 있는 추상적인 이벤트.

- model과 통신 자동화. XML 지원. 검색 지원.

2009년 7월 9일 목요일

Flex Panel 헤더에 UI 컨트롤 삽입

1.

디자인 요구사항에 패널 헤더에 버튼을 넣는 요구가 왔다. Flex Panel은 컨테이너이긴 한데 헤더에 뭔가를 넣을 수는 없어 보인다. 그래서 크롬 자식으로 버튼을 넣고 absolute position을 지정하니 원하는 위치로 이동했다. 버튼이 여러개 들어가기 때문에 HBox로 묶여진 버튼 묶음을 넣는 식으로 해결했다. 크롬 자식에 뭔가를 넣고 position을 지정하는 것은 ActionScript로 해야한다. 그렇다고 HBox에 쌓여있는 버튼을 ActionScript로 만들자니 귀찮아서 mxml에 컨트롤 묶음을 구현하고 크롬 자식 리스트에 addChild 할 때 그 묶음의 id를 지정하니 잘 이동됐다. 이미 존재하는 컨트롤을 다른 곳에 addChild 하면 복사가 아니라 존재하던 것이 이동을 한다.

 

2.

크롬 자식을 계속 얘기하다 보면 불쾌하지만 화를 낼 수도 없는 난처한 상황의 크롬이 떠오른다.

2009년 7월 7일 화요일

요구

일 오래 한다고 인정받는 것 아니니 남들 일하는 시간에 하는 게 좋을거라는 말과 이거 일정 내로 끝낼 수 있겠냐는 소리를 동시에 듣는다. 그 중에 내 업무진행과 학습과정을 파악하는 사람은 없다. 정작 나는 내가 하는 일의 근본적인 내용까지 파악하고 있는 사람에게 그만하겠다 소릴 하고 있으니 이상해 보이겠다는 생각이 들때도 있다. ㅎ

2009년 7월 5일 일요일

Flex Quiz 2

책을 이제 다 읽어서 퀴즈 낼 시간이 모자라다. 밤 샐 컨디션이 될까?

2009년 7월 3일 금요일

Flex Quiz

회사 상사와 주말동안 Programming Flex 3을 330페이지까지 읽고 서로 퀴즈를 내기로 했다. 1000문제를 내겠다.

Flex 배경 반복

Flex Style Explorer에서 반복되는 배경은 swf로 만들어져 있었다. 이미지를 반복시키는 방법을 찾다가 degrafa라는 오픈소스 라이브러리를 발견했다. 여기서 다운받은 swc를 라이브러리 디렉토리에 넣어주고 css에서 Application을 아래처럼 만들어주니 배경 이미지가 반복된다.

 

   background-image:Embed("assets/doc.png");
   background-repeat:repeat;
   borderSkin:ClassReference("com.degrafa.skins.CSSSkin");

 

참고 : http://www.degrafa.org/

2009년 7월 2일 목요일

senocular.com ActionScript Library

flash에서 아직 지원되지 않는 기능을 찾다가 발견한 사이트

 

참고 : http://www.senocular.com/flash/actionscript.php

플렉스 스타일 익스플로러

플렉스 스타일 익스플로러(Flex Style Explorer)를 사용하면 UI 컴포넌트들의 스타일을 변경하며 결과를 바로 확인하고 CSS 코드를 얻을 수 있다.

 

참고 : http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html