ArrayCollection을 2개 할당한 이후
데이터 수신용, 보여주기용(Bindable) 으로 설정하여 데이터를 컨트롤 해 주도록 하면 된다. 



소스 보기

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
 creationComplete="init()"
 xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
 <mx:Script>
  <![CDATA[
   import mx.charts.chartClasses.Series;
   import mx.controls.CheckBox;
   import mx.collections.ArrayCollection;
   import mx.utils.ObjectProxy;
   
   private const MAX_SRV:uint = 3;
   [Bindable]
   private var viewArr:ArrayCollection = new ArrayCollection; //실제 보여주는 데이터
   private var rcvArr:ArrayCollection = new ArrayCollection; //받은 데이터
   
   
   
   private var fndIdx:uint;
   
   private var timer:Timer;
   
   private function init():void{
    timer = new Timer(1000);
    timer.start();
    timer.addEventListener(TimerEvent.TIMER, timerHandler);    
   }
   
   private function cbHandler(e:Event):void{
    generateRealValues();
   }
   
   private function generateRealValues():void{
    //보여주려는 것
    var tmpArr:ArrayCollection = new ArrayCollection;
    
    
    for(var i:uint=0;i<MAX_SRV;i++){
     var tmpCB:CheckBox = this["cb"+i] as CheckBox;
     if(tmpCB.selected){
      tmpArr.addItem(rcvArr.getItemAt(Number(tmpCB.id.substr(2))));
     }
    }
    
    viewArr = tmpArr;
   }
   
   private function timerHandler(e:TimerEvent):void{
    generateDummyValues();
   }
   
   private function generateDummyValues():void{
    
    rcvArr.removeAll();
    
    for(var i:uint=0;i<MAX_SRV;i++){
     var op:ObjectProxy = new ObjectProxy();
     
     op.server = "srv"+i;   // label field
     
     op.apple = randRange(0,5);  // data field
     op.melon = randRange(0,5);
     op.banana = randRange(0,5);
          
     rcvArr.addItem(op);
    }
    
    generateRealValues();
   }
   
   
   
   private function randRange(min:Number, max:Number):Number {
    var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
    return randomNum;
   }
  ]]>
 </mx:Script>

 <mx:VBox width="100%" height="100%">
  <mx:HBox>
   <mx:Label text="SELECT SERVER :" />
   <mx:CheckBox id="cb0" label="srv0" selected="true" change="cbHandler(event)"/>
   <mx:CheckBox id="cb1" label="srv1" selected="true" change="cbHandler(event)"/>
   <mx:CheckBox id="cb2" label="srv2" selected="true" change="cbHandler(event)"/>
  </mx:HBox>
  <mx:HBox width="100%" height="100%">
   <mx:BarChart id="barchart1" height="100%" width="100%" dataProvider="{viewArr}">
    <mx:series>
     <mx:BarSet type="stacked" allowNegativeForStacked="true" >
      <mx:series>
       <mx:BarSeries id="bs0" displayName="apple" yField="server" xField="apple"/>
       <mx:BarSeries id="bs1" displayName="banana" yField="server" xField="banana"/>
       <mx:BarSeries id="bs2" displayName="melon" yField="server" xField="melon"/>
      </mx:series>
     </mx:BarSet>     
    </mx:series>
    <mx:verticalAxis>
     <mx:CategoryAxis dataProvider="{viewArr}" categoryField="server"/>
    </mx:verticalAxis>
    <!-- 가로 축 정보 -->
          <mx:horizontalAxis>
             <mx:LinearAxis
         interval="1"
         maximum="15"
         maximumLabelPrecision="0"
         minimum="0"
         minorInterval="0"
       />
          </mx:horizontalAxis>
   </mx:BarChart>
   <mx:Legend dataProvider="{barchart1}"/>
   
   
  </mx:HBox>
  <mx:TextArea width="100%" height="50" />
 </mx:VBox>
</mx:Application>






2006년 일본 후지티비에서 방영한 동명의 드라마를 한국에서 리메이크 하여 방영하는 군요.
(일본판) 방영한지는 오래 되었으나 최근 황금연휴동안 시간이 남아 보게 되었는데, 볼만한거 같네요 ^^

음... 줄거리를 간략 이야기 한다면


주인공은 실력이 좋은 건축가이지만 성격은 독선적인 성격에 결혼의 의미에 대하여 자신만의 일반론을 내세우면서 결혼은 필요없다고 생각하며 그러한 그의 말을 실천?으로 옮기는 그런 사람 이지만 그의 마음 바닥에는 외로움을 가지고 있습니다. 그런 그가 한여자와 만나 서서히 마음을 열어간다는 이야기 입니다. 이 드라마를 보면서 느낀건... "꼭 그 사람과 결혼하는 거야 ? 아니 저 사람일지도.. "라고 생각하면서 자신에 비춰 본다면 좋을거 같다는 생각이 들었네요 ^_^ 결혼이란 제2의 인생이니까요 !

음... 드라마를 보면서 궁금한점 BEST 3


1. 주인공은 병원을 너무 많이 간다 !
=> 상대 배우의 직업이 의사라 하지만... 이건뭐 종합 병원도 아니고 ㅋㅋ 실제 이렇게 병원을 들락날락한다면 ...에휴~
과연 드라마 상에서 병원은 몇번이나 갔을까나 ?

2. 카네기
=> 이야기의 중심은 아니지만 분위기 전환을 하기 위한 포인트로 넣은 케릭터... 그는 정말 잘나가는 건축가 일까나 ~~ ?

3. 멍멍이 KEN
=> 멍멍이 연기를 넘 잘하는거 같더라구요 ... 특히 눈망울 울먹한건... 최고! 그 멍멍이의 회당 출연료는 ? -_-;

아시는 분은 리플 부탁 드려요 ~~~

노래 EveryLittleThing - 스이미(スイミ)


처음에는 노래제목하고 가수하고 해깔렸다는 -_-; 어디선가 들어본거 같은 목소리 였는데... 알고 보니깐 시바토라에서도 노래를 불렀더군요 후후... 난 바보 ~ 이만 줄이고 ... 노래가 뭐랄까나 시원 시원한 느낌이 들어서 참 좋은거 같네요





그럼 즐거운 하루 되세요~

[지디넷코리아]마이크로소프트가 차세대 운영체제 윈도7의 최종 후보 버전인 RC를 공개했다. RC(Release Candidate)는 베타 버전 이후 충분한 테스트를 거쳐 공개된 버전이다.

 

MS는 지난 1월 윈도7의 베타 버전을 선보였으며, 베타 다운로드 프로그램에는 IT 전문가들 약 86만 명이 등록했다.

 

RC 버전 발표는 윈도7이 전체 개발 주기의 마지막 단계에 접어 들었고, 이제 IT 전문가, 개발자, 파트너들이 보다 적극적으로 새로운 버전을 테스트하고, 애플리케이션을 개발·사용해 볼 수 있는 준비가 되었음을 의미한다.

 

윈도7은 ‘소비자들이 원하는 기본 기능을 보다 편리하게’라는 기조로 개발이 진행되고 있다. RC 버전에서도 개선된 에어로(Aero) 환경, 편리해진 작업창 보기, 원하는 정보를 더 빨리 찾는 ‘점프 목록’, 강화된 데스크톱 검색 기능을 제공한다.

 

멀티 터치도 단순 클릭 수준을 넘어 줌인·아웃, 드래그 앤 드롭 등이 가능하도록 더욱 강화했다. 또한 디바이스 스테이지(Device Stage) 기능으로 프린터, 마우스, PMP, 휴대폰 등 다양해진 장치를 자동으로 인식, 설치하고 설정 변경 등을 통합적으로 관리할 수 있도록 했다.

 

▲ 윈도7 RC 버전의 바탕화면
■가상화 기술로 '윈도XP' 모드 제공

 

윈도7 RC버전의 가장 큰 특징 중 하나는 무엇보다 가상화 기술인 ‘가상 PC’를 활용해 윈도XP 모드를 제공한다는 것이다. 즉, 클릭 한 번으로 윈도7에서도 윈도XP 용 애플리케이션 설치·구동이 가능하다. 이는 특히, 윈도XP를 아직 사용하고 있는 중소기업을 위해 설계된 것으로 기업의 마이그레이션 비용 부담을 덜어준다.
또한 원거리 미디어 스트리밍 기술도 RC 버전에 추가됐다. 이는 PC에 저장된 음악, 동영상 등의 멀티미디어 파일을 외부에서도 사용할 수 있도록 스트리밍하여, 외부 PC에서도 그대로 이용할 수 있게 하는 기술이다. 인터넷 연결만을 통해 홈 PC에 저장되어 있는 미디어에 대한 라이브러리를 공유할 수 있다.

 

한국MS 비즈니스 마케팅 본부 장홍국 이사는 “MS는 베타 버전 이후에 수집된 다양한 피드백을 반영해 윈도우 7을 개발하고 있다”며 “국내에서도 사전에 파트너사들과 생태계를 구축, 윈도7최종 버전이 출시된 이후 소비자, 기업 고객이 불편없이 사용할 수 있도록 준비하고 있다”고 말했다.

 

이를 위해 한국MS는 최근 보안, 솔루션 개발 업체 등 주요 소프트웨어 업체들과 함께 제품이 최적화된 환경에서 출시될 수 있도록 ‘윈도7 생태계 지원 프로그램’을 진행하고 있다. 최종 버전이 출시되기 전까지 모든 주요 솔루션과의 호환성을 확보한다는 목표다. 전세계 적으로는 약 1만개 회사의 3만2,000명이 윈도7을 준비하기 위한 도구와 자원을 이용할 수 있는 프로그램에 참여하고 있다.

 

윈도7의 RC 버전은 4월 30일 오후 10시(미국 태평양시각 오전 6시)부터 MS의 MSDN 및 테크넷 구독자들에게 공개되며, 5월 6일부터는 MS 홈페이지(www.microsoft.com/windows7)를 통해 다운로드 받을 수 있다.

'etc > old' 카테고리의 다른 글

동적으로 제어 가능한 차트 예제  (0) 2009.05.07
결혼 못하는 남자  (0) 2009.05.07
구글·네이버, 닮은꼴 서비스 경쟁 '후끈'  (0) 2009.04.30
RO 테스트  (0) 2009.04.30
설치하기  (0) 2009.04.29
[지디넷코리아]‘검색황제’ 구글과 ‘토종 포털 1위’ NHN이 닮은꼴 콘텐츠 전략을 내세웠다. 웹지도나 엔터테인먼트를 넘어  뉴스 콘텐츠쪽에서도 유사한 카드를 뽑아들었다. 이에 따라 인터넷 업계는 구글과 NHN이 새로운 트랜드를 만들어낼 지 주목하는 모습이다.

 

■흘러간 신문, 황금알 낳나

 

우선, 구글과 NHN은 흘러간 종이 신문들을 디지털 콘텐츠로 활용하려 한다. 과거 정보를 온라인에서 되살리려고 막대한 투자를 진행 중이다. 한번 콘텐츠를 만들면 지속 업데이트가 필요 없기에 돈 버는 일만 남는다는 기대심리다.

 

구글은 2008년 9월 과거 신문기사를 디지털화, 온라인으로 검색하는 ‘구글뉴스 아카이브’ 서비스를 시작했다. 240년이 지난 1768년 기사까지 검색이 가능하도록 하겠다는 전략이다. 기사 뿐 아니라 게재 시점의 사진과 광고 등도 제공한다.

 

뉴욕타임즈와 워싱턴포스트 등 미국 신문업계 공룡들이 구글의 제휴사로 2006년부터 함께하고 있다.

 

▲ NHN 네이버가 30일 시범서비스를 시작한 과거 신문검색 화면. 신문을 PC가 인식하도록 디지털화했다.

 

NHN은 30일 ‘디지털 뉴스 아카이브’라는 과거 신문 검색 서비스를 시범으로 시작했다. 제휴를 맺은 경향신문, 동아일보, 매일경제의 1976~1985년 기사들을 무료로 볼 수 있으며, 향후 유료서비스도 추진할 계획이다.

 

이 프로젝트는 미디어그룹장인 홍은택 이사가 2007년부터 직접 주도해 눈길을 끌었다. 신문 디지털화 작업에 600명이 넘는 인원을 투입할 정도로 기대가 크다. 올해 초 네이버 초기화면 개편에 투입한 인원이 150명 정도임을 감안하면 파격에 가까운 투자다.

 

홍은택 이사는 “시대적 가치를 반영하는 중요한 신문 콘텐츠를 향후 검색 서비스에 적극 활용할 것”이라고 밝혔다.

 

■‘전문가’로 검색을 살린다

 

각 분야 전문가들을 동원한 문답 검색도 구글과 NHN이 새로 밀고 있는 서비스다. 의사, 변호사에, 유수 석학들까지 영입대상이다. 답변 신뢰도를 올리는 것이 관건.

 

구글은 2008년 7월 전문가 지식공유플랫폼 ‘놀(Knol)’을 출시하며 세몰이에 나섰다. 놀은 경제, 과학, 문화 등 주요 분야 전문가들이 누리꾼 질문에 답하는 것이 골자로, 미국 유명 매거진 ‘더 뉴요커’가 조력자로 나섰다. 전문가들은 본인 답변 콘텐츠에 라이선스를 가지며, 광고를 달아 수익도 낼 수 있다.

 

▲ 구글의 전문가 지식공유 플랫폼 놀. 답변에 라이선스가 있다.

 

구글은 미국서 ‘놀’을 위키피디아의 대항마로 배치했으며, 한국에는 올해 1월 출시했다.

 

구글코리아 노정석 프로덕트 매니저는 “‘놀’을 통해 깊이 있는 지식들을 풍성하게 제공하며 검색 수준을 올리겠다”고 밝혔다.

 

NHN은 올해 1월 한의학, 약학, 다이어트 등 분야별 전문의 1,054명이 참여한 ‘의사 답변 서비스’를 시작했다. 실제 의사들이 ‘지식iN’ 답변자로 나서면서 호평 받고 있다. 이어서 올해 상반기 중에는 법률 분야로도 서비스를 확대한다. 김상헌 대표가 나서 이달 초 서울지방변호사회와 정식 계약까지 맺었다.

 

NHN은 앞으로도 전문가 문답 검색 분야를 늘려갈 계획이다. 네이버 성공신화를 ‘지식iN’을 재도약시키겠다는 의지 표현이다.

 

이 밖에 웹 소프트웨어 사업에 있어서도 구글과 NHN은 마주칠 전망이다. 구글은 웹오피스 구글독스를 한국판으로 재정비 중이고, NHN도 빠르면 올 안에 ‘네이버 오피스’를 출시한다.

'etc > old' 카테고리의 다른 글

결혼 못하는 남자  (0) 2009.05.07
MS '윈도7 RC 버전' 공개됐다  (0) 2009.05.01
RO 테스트  (0) 2009.04.30
설치하기  (0) 2009.04.29
이벤트 링크  (0) 2009.04.29
작업환경 : 이클립스 J2EE  & FLEX 환경 (설치 참조 : http://wonsama.tistory.com/180 )
테스트 목적 : Remote Object를 확인하기 위해 테스트를 진행.
작업진행 : Eclipse에서 환경설정 및 클래스 생성 이후 Flex에서 해당 서비스 호출 소스 작성을 실시한다.

[Eclipse]
// WEB-INF/flex/remoting-config.xml :  리모트 오브젝트 관련 환경을 설정한다.

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service" class="flex.messaging.services.RemotingService">

    <adapters>
        <adapter-definition id="java-object"
            class="flex.messaging.services.remoting.adapters.JavaAdapter"
            default="true" />
    </adapters>

    <default-channels>
        <channel ref="my-amf" />
    </default-channels>

    <destination id="empRO">
        <properties>
            <source>book.EmployeeManager</source>           
        </properties>
    </destination>

</service>

RO를 사용하기 위하여 추가적으로 설정한 내용임.
1: destination id - FLEX에서 호출하는 RemoteObject의 destination 를 지정한다.
2: source - 참조하는 클래스 소스를 설정한다.

[Eclipse]
// src/book/Employee.java

package book;

import java.io.Serializable;

public class Employee implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    public String name;
    public String phone;
    public String email;
    public Employee(){

    }

    public Employee(String name, String phone, String email){
        this.name = name;
        this.phone = phone;
        this.email = email;
    }
}

[Eclipse]
// src/book/EmployeeManager.java

package book;

import org.apache.log4j.Logger;
import java.util.ArrayList;

public class EmployeeManager {
    /**
     * Logger for this class
     */
    private static final Logger logger = Logger.getLogger(EmployeeManager.class);
   
    public EmployeeManager(){

    }

   
    public Object[] getList(String deptId){

        if (logger.isDebugEnabled()) {
            logger.debug("getList(String) - start"); //$NON-NLS-1$
        }

        ArrayList<Employee> list = new ArrayList<Employee>();
        if(deptId.equals("ENG")){
            list.add(new Employee("Christina Coenreaets", "555-219-270","ccoenraets@fictitious.com" ));
            list.add(new Employee("Louis Freligh", "555-219-2270", "lfrelight@fictitious.com" ));
        }else if(deptId.equals("PM")){
            list.add(new Employee("Ronnie Hodgman", "555-219-2270", "ccoenraets@fictitious.com" ));
            list.add(new Employee("Joanne Wall", "555-219-2270", "lfrelight@fictitious.com" ));  
        }else if(deptId.equals("MKT")){
            list.add(new Employee("Maurice Smith", "555-219-2270", "ccoenraets@fictitious.com" ));
            list.add(new Employee("Mary Jones", "555-219-2270", "lfrelight@fictitious.com" ));  
        }
        Object[] returnObjectArray = list.toArray();

        if (logger.isDebugEnabled()) {
            logger.debug("getList(String) - end"); //$NON-NLS-1$
        }else{
            System.out.println("err");
        }

        return returnObjectArray;
    }
}

[FLEX]
// src/blaze.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:Script>
  <![CDATA[
   import mx.controls.Alert;
   import mx.rpc.events.FaultEvent;
   import mx.rpc.events.ResultEvent;
  
   private function resultHandler(event:ResultEvent):void{
    dg.dataProvider = event.result;
   }
  
   private function faultHandler(event:FaultEvent):void{
    mx.controls.Alert.show(event.fault.message);
   }
  
  ]]>
 </mx:Script>
 
 <mx:RemoteObject id="emp" destination="empRO" showBusyCursor="true"  result="resultHandler(event)" fault="faultHandler(event)"/>


 <mx:Panel width="95%" height="95%" layout="absolute"
     title="RemoteObject UTF8" >
  <mx:DataGrid id="dg" width="100%" height="100%" />
  <mx:ControlBar horizontalAlign="center">
   <mx:HBox>
    <mx:Label text="Select a department :" />
    <mx:ComboBox id="dept" width="150">
     <mx:dataProvider>
      <mx:Array>
       <mx:Object label="Engineering" data="ENG" />
       <mx:Object label="Product Management" data="PM" />
       <mx:Object label="Marketing" data="MKT" />
      </mx:Array>
     </mx:dataProvider>
    </mx:ComboBox>
    <mx:Button label="Get Employee List" click="emp.getList(dept.selectedItem.data)" />
   </mx:HBox>
  </mx:ControlBar>
 
 </mx:Panel>
 
</mx:Application>


<mx:RemoteObject id="emp" destination="empRO" showBusyCursor="true"  result="resultHandler(event)" fault="faultHandler(event)"/>
=> RO를 설정한 부분
=> destination : Eclipse에 설정된 클래스를 호출하기 위한 Destination

<mx:Button label="Get Employee List" click="emp.getList(dept.selectedItem.data)" />
=> RO를 호출하는 부분
=> emp.getList :  getList 메소드를 호출한다. 처리 결과는 위에서 설정한 리스너를 통해 들어온다.

[처리 결과]


결론 및 요약 :

- [Eclipse] remoting-config.xml 설정 => 설정에 맞춰 클래스 생성 => [Flex] RO호출
- RO를 통해 처리를 JAVA로 위임한 이후 결과를 받아 처리 할 수 있음. 매우 유익한듯.





'etc > old' 카테고리의 다른 글

MS '윈도7 RC 버전' 공개됐다  (0) 2009.05.01
구글·네이버, 닮은꼴 서비스 경쟁 '후끈'  (0) 2009.04.30
설치하기  (0) 2009.04.29
이벤트 링크  (0) 2009.04.29
삼성電, 'AM-OLED 안드로이드폰' 6월 출시  (1) 2009.04.28
BlazeDS 최신버전 다운로드

:  http://opensource.adobe.com/wiki/display/blazeds/Release+Builds


참조용 LIVE DOC

: http://livedocs.adobe.com/blazeds/1/blazeds_devguide/help.html


블레이즈 DS 개발 가이드 북
blazeds_devguide.pdf

원문 포스팅 >>>> http://blog.naver.com/zoom7810/50032372125



    설치하는 방법


=== Eclipse 설정 ===


1. BlazeDS 파일 다운로드

http://opensource.adobe.com/wiki/display/blazeds/Release+Builds 로 접속하여 최신 버전을 다운 받는다.


2. 다운로드 받은 zip 파일의 압출을 풀어 blazeds.war 파일을 Eclipse 에서 import 한다


3. WebContent 디렉토리 하위에  web 폴더를 생성 (FLEX bin-debug 폴더와 동기화 할 폴더)


4. WEB-INF 폴더 하위에 classes 폴더 생성


5. Default Output 폴더 변경

(프로젝트 선택 오른쪽 -> properties -> java build path -> source folder 탭 선택)

(조금 전 생성한 WEF-INF 폴더 밑에 classes 폴더로 교체한다)


6. log4j 다운로드 (로그 관리를 위해서... 옵션임)

다운로드 :  http://logging.apache.org/log4j/1.2/download.html

설 정관련 참조 포스팅 : http://blog.naver.com/PostView.nhn?blogId=zoom7810&logNo=50032106915&categoryNo=0&viewdate=&cpage=1&listtype=0


7. log4j 설정
- 다운 받은 zip 파일을 압축 해제한 이후 log4j.jar 파일을 복사하여 WEF-INF\lib 폴더에 붙여 넣는다.
- WEB-INF 폴더 하위에 refrence 폴더를 생성한 다음 log4j.properties 파일을 복사한다.

- reference 폴더를 Default Path로 추가 설정한다.
- log4j.properties 파일 예시

log4j.rootLogger = DEBUG, stdout, dailyfile

 

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n

 

log4j.appender.dailyfile.Threshold = DEBUG

log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender

log4j.appender.dailyfile.File = logfile.log

log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout

log4j.appender.dailyfile.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n


=== FLEX 설정 ===


8. 플렉스 프로젝트 생성


- J2EE 프로젝트 생성
- Server 지정
- Output Folder 지정


9. 확인하기

(Eclipse에서 web폴더를 보면 파일이 Flex와 공유된 것을 확인할 수 있다.)

 

 

 

 

 

 

 

'etc > old' 카테고리의 다른 글

RO 테스트  (0) 2009.04.30
설치하기  (0) 2009.04.29
삼성電, 'AM-OLED 안드로이드폰' 6월 출시  (1) 2009.04.28
페이스북의 파격카드, 개발자에 서비스 개방  (0) 2009.04.28
51가지 AS3, Flex 테크닉 & 예제  (0) 2009.04.24
[지디넷코리아]
▲ 삼성전자가 오는 6월 안드로이드 플랫폼을 탑재한 스마트폰 `I7500`을 유럽에서 출시한다.

삼성전자가 구글의 개방형 모바일 플랫폼인 '안드로이드'를 탑재한 스마트폰('I7500')을 6월경 유럽 시장에 출시한다.

 

삼성전자는 자사 최초의 안드로이드폰인 'I7500'을 6월 독일 등 유럽 시장에 출시한다고 밝혔다.

 

'I7500'은 안드로이드 OS를 장착하고 구글 맵, 구글 서치, 지메일, 유튜브 등 다양한 구글 어플리케이션을 대거 탑재해 일반 PC처럼 편리하게 모바일 인터넷을 사용할 수 있다.

 

또한 안드로이드 마켓에서 구입한 다양한 컨텐츠도 이용 가능하다.

 

삼성전자는 이로써 글로벌 휴대폰 제조사 중 처음으로 안드로이드, 심비안, 윈도우 모바일, 리눅스 등 모든 스마트폰 OS를 지원하는 스마트폰 풀 라인업을 갖추게 됐다.

 

'I7500'은 특히, 그 동안 출시된 안드로이드폰 가운데 가장 얇은 11.9mm 슬림형 풀터치스크린 디자인에 1500mAh급 대용량 배터리를 장착해 휴대하기 편리하면서도 장시간 사용할 수 있다.

 

꿈의 디스플레이로 불리는 3.2인치 AM-OLED(능동형 유기발광 다이오드)를 탑재해 밝고 선명한 화면을 즐길 수 있다. 7.2Mbps 속도 HSDPA와 5.76Mbps 속도 HSUPA에 WiFi까지 지원해 통신 환경도 완벽하게 구축했다.

 

또한 500만 화소 카메라에 오토포커스, 파워LED 등 고급 디지털 카메라 기능을 탑재했고 8GB 내장 메모리를 기본 제공하고 외장 메모리도 Micro SD로 32GB까지 확장할 수 있어 사진, 음악, 동영상 등 다양한 멀티미디어 파일을 손쉽게 저장, 이용할 수 있다.

 

삼성전자 무선사업부장인 신종균 부사장은 "삼성전자는 안드로이드 개발 을 주도한 오픈핸드셋 얼라이언스(OHA:Open Handset Alliance)의 초기 멤버로서 앞으로 더욱 다양한 안드로이드폰을 선보일 것"이라고 말했다.

'etc > old' 카테고리의 다른 글

설치하기  (0) 2009.04.29
이벤트 링크  (0) 2009.04.29
페이스북의 파격카드, 개발자에 서비스 개방  (0) 2009.04.28
51가지 AS3, Flex 테크닉 & 예제  (0) 2009.04.24
애플 앱스토어 '10억 다운로드'  (0) 2009.04.24
[지디넷코리아]세계 소셜 네트워크 서비스 시장에서 마이스페이스와 자웅을 겨루고 있는 페이스북이 개발자들을 상대로 강력한 개방 카드를 꺼내들었다. 페이스북 사용자들이 올린 정보에 접근할 수 있는 애플리케이션과 서비스를 개발할 수 있도록 한 것이다.

 

페이스북이 27일(현지시간) 열리는 개발자 행사에서 서비스 개방과 관련한 내용을 공개할 것이라고 씨넷뉴스가 월스트리트저널(WSJ)을 인용해 보도했다. WSJ은 내부 사정에 정통한 소식통들을 통해 관련 내용을 전했다.

 

페이스북의 개방 정책은 개발자들이 사용자 허가가 있으면 이들이 올린 동영상, 사진, 텍스트 콘텐츠에 접근할 수 있는 서비스를 개발할 수 있도록 하는게 골자다.

 

예를 들어, 개발자들은 특정한 친구들이 페이스북에 올린 기사만을 수집할 수 있는 웹사이트를 만들 수 있다. 이외에도 다양한 애플리케이션 및 서비스 개발이 가능해진다. 사용자들은 이같은 서비스를 이용하려면 자신들의 페이스북 데이터에 접근할 수 있도록 해줘야 한다.

 

페이스북은 그동안 자사 서비스에 대해 통제 정책을 펴왔다. 그러나 이번 개방 정책을 통해 사용자 충성도를 높이고 사람들이 보다 사이트를 자주 쓸 수 있기를 바라고 있다고 WSJ은 전했다.

출처 : http://www.insideria.com/2009/04/51-actionscript-30-and-flex-op.html

51 ActionScript 3.0 and Flex optimization techniques and practices

Author photo
| | Comments (30)
AddThis Social Bookmark Button

A homework assignment I was recently given for a Java programming class involved a competition to see who could create the most optimized implementation of an interface which was provided by the instructor. It was a challenging and very fun assignment that I think the whole class enjoyed. I didn’t win the competition but still came out a winner because of my heightened interest in application optimization and performance tuning that I gained.

I’m personally a pretty big fan of coding standards and have been ribbed by many developers over some of the longer method, variable and class names that I sometimes choose. I've always leaned toward the side of programming that employs standards and frameworks . Rather than spending a ton of time digging around in compiler specs and messing with GC (Garbage Collection) for reasons of performance, tuning and optimization. I was leaving this to the seasoned programmers creating the standards and frameworks I use.

This isn’t to say I’ve never paid attention to performance and I enjoy building slow applications. It’s almost like two different worlds; the optimization world and the standards world. They don’t always agree with each other. There can sometimes be a trade off for performance over readability and organization or vice-versa. This article is meant to stand next to the Flex Best Practices articles that I authored.

While creating my concrete implementation for the homework assignment I discovered a powerful profiling engine in NetBeans. The NetBeans profiling engine helped me understand some of the memory usage and consumption of each property, method call and object instantiation in my program. This profiler in NetBeans is very similar to the one found in Flex Builder. Both are very powerful and very useful. I've been exploring the Flex Profiler in greater detail lately as well and using it to eradicate memory leaks for a real world application I’ve been refactoring to best practices lately.

The Java optimization homework has increased my interest in optimization and profiling for ActionScript 3.0 and Flex development. I've been piecing together ActionScript optimization techniques and practices from around the web for a couple years now. Some of these techniques are in opposition to what the standards dictate but most of software development is this way. You have to learn when to use some techniques and when to leave some out.

Here are 51 ActionScript 3.0 and Flex optimization techniques and practices. I’ve scoured the web for and filtered practices and techniques that can be adopted into your application development process. Use these in conjunction with the Flex Profiler to monitor and optimize and tune the performance of your ActionScript 3.0 and Flex RIAs.

1. Avoid the new operator when creating Arrays

 
var a = [];

NOT:

 
var a = new Array();

2. Arrays are expensive to create, do so conservatively

 
var vanityCollection01 : Array = new Array();
var vanityCollection02 : Array = new Array();
var vanityCollection03 : Array = new Array();
var vanityCollection04 : Array = new Array();

3. Fastest way to copy an array:

 
var copy : Array = sourceArray.concat();

4. Setting values in Arrays is slow

 
employees.push( employee );
employees[2] = employee;

5. Getting values from Arrays is twice as fast as setting

 
var employee : Employee = employees[2];

6. Anonymous objects are faster to create with {} vs. new

 
var o : * = { firstName : "John", lastName : "Smith", age : 45 };
NOT:
var p : Person = new Person();
p.firstName = "John";
p.lastName = "Smith";
p.age = 45;

7. Use static for properties methods that do not require an object instance

 
StringUtils.trim( "text with space at end " );
Class definition:
package
{
public final class StringUtils
{
public static function trim( s : String ) : String
{
var trimmed : String;
// implementation...
return trimmed;
}
}
}

8. Use const for properties that will never change throughout the lifecycle of the application

 
public const APPLICATION_PUBLISHER : String = "Kannopy, Inc.";

9. Use final when no subclasses need to be created of a class

 
public final class StringUtils

10. Use package level variables and functions for generalized functionality which does not require a class or instance of a class

 
createSnapShot( arg );

NOT:

 
someObjectInstance.createSnapShot( arg );

NOT:

 
SomeClass.createSnapShot( arg );
Class definition:
package
{
// imports&#133;;
public function createSnapShot(target:IBitmapDrawable) : Bitmap
{
// implementation&#133;
}
}

11. JIT won’t compile code within constructors (keep them lightweight)

 
package com.seantheflexguy.as3optimization
{
public class MinimalConstructor
{
public function MinimalConstructor()
{
init();
}

}
}

12. Length of method/variable names doesn't matter in ActionScript 3.0 (true in other langs)

 
someCrazyLongMethodNameDoesntReallyImpactPerformanceTooMuch();

13. One line assignments DO NOT buy any performance! It's a Myth! (true in other langs)

 
var i=0; j=10; k=200;

14. No difference in memory usage between an if statement and a switch statement

 
if ( condition )
{
// handle condition
}

IDENTICAL MEMORY USAGE:

 
switch ( condition )
{
case "A":
// logic to handle case A
break;

case "B":
// logic to handle case B
break;
}

15. Rank your if statements in order of comparisons most likely to be true

 
if ( conditionThatHappensAlot )
{
// logic to handle frequently met condition
}
else if ( conditionThatHappensSomtimes )
{
// handle the case that happens occaisonally
}
else
{
// handle the case that doesn&#8217;t happen that often
}

16. AVM promotes int to Number during calculations inside loops

17. Resolve issues of promotion, unknown, or incorrect object types

18. Use uint sparingly, it can be slow

 
var footerHex : uint = 0x00ccff;

19. Use integers for iterations

 
(var i: int = 0; i < n; i++) NOT for (var i: Number = 0; i < n; i++)

20. Cast to int for calculations inside loops (AVM automatically promotes int to Number)

 
for (;i<n2;i++) Vector3D(array[int(i*2)]).x = 2;

NOT:

  
for (;i<n2;i++) Vector3D(array[i*2]).x = 2;

21. Don't use int with decimals

 
var decimal : Number = 14.654;

NOT:

 
var decimal : int = 14.654;

22. Multiply vs. Divide: instead of 5000/1000 use: 5000*0.001

23. Calculate things like floor and round yourself vs. calling Math library

 
package com.seantheflexguy.math
{
public final class MathUtil
{
public static function round( number : Number ) : Number
{
// custom rounding implementation
}
}
}

24. Locally store function values in for and while statements instead of repeatedly accessing them

 
for (..){a*180/Math.PI;}
declare: toRadians = a*180/Math.PI; outside of the loop

25. Avoid calculations and method calls in loops

 
for (var i=0;i< myArray.lengh;i++){ }

NOT:

  
var len : int = myArray.lengh;
for (var i=0;i<len;i++){}

26. Remove event listeners when finished using them

 
removeEventListener( Event.COMPLETE, onComplete );

27. Use delete to free memory

 
delete someObject;

28. Use RegEx for validation, use string methods for searching

 
// postal code validation example using regular expressions
private var regEx:RegExp = /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/i;
private function validatePostal( event : Event ) : void
{
if( regEx.test( zipTextInput.text ) )
{
// handle invalid input case
}
}

// search a string using String methods
var string : String = "Search me";
var searchIndex : int = string.indexOf( "me" );
var search : String = string.substring( searchIndex, searchIndex + 2 );

29. Reuse objects to maintain a “memory plateau” DisplayObjects, URLLoader objects

30. Follow the Flex component model:

 
createChildren();
commitProperties();
updateDisplayList();

31. Only use Datagrids as a last resort (make sure you can’t implement in a regular List first)

32. Avoid Repeaters for scrollable data

33. Avoid the setStyle() method (One of the most expensive calls in the Flex framework)

34. Using too many containers dramatically reduces the performance of your application

 
<mx:Panel>
<mx:VBox>
<mx:HBox>
<mx:Label text="Label 1" />
<mx:VBox>
<mx:Label text="Label 2" />
</mx:VBox>
<mx:HBox>
<mx:Label text="Label 3" />
<mx:VBox>
<mx:Label text="Label 4" />
</mx:VBox>
</mx:HBox>
</mx:HBox>
</mx:VBox>
</mx:Panel>

35. You do not need to always use a container tag as the top-level tag of components Totally valid component, no top level container needed:

 
<mx:Image xmlns:mx="http://www.adobe.com/2006/mxml"
source="avatar.jpg" width="200" height="200" />

36. Remove unnecessary container wrappers to reduce container nesting

37. Avoid: The VBox container inside an tag, (eliminates redundancy)

 
<mx:Panel>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:Panel>
NOT:
<mx:Panel>
<mx:VBox>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:VBox>
</mx:Panel>

38. Avoid: VBox container inside an tag, (eliminates redundancy)

 
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:Application>

NOT:

 
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml>
<mx:VBox>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:VBox>
</mx:Application>

39. Set the recycleChildren property to true to improve a Repeater object's performance (re-uses previously created children instead of creating new ones)

 
<mx:Script>
<![CDATA[
[Bindable]
public var repeaterData : Array = ["data 1", "data 2"];
]]>
</mx:Script>

<mx:Repeater id="repeater" dataProvider="{repeaterData}">
<mx:Label text="data item: {repeater.currentItem}"/>
</mx:Repeater>

40. Keep framerate set at 60 fps or lower

 
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml
frameRate="45">
</mx:Application>

41. Avoid multiple display manipulations per frame

42. Code against ENTER_FRAME events instead of Timer events

 
public function onEnterFrame( event : Event ) : void
{
}
private function init() : void
{
addEventListener( Event.ENTER_FRAME, onEnterFrame );
}

NOT:

 
public function onTimerTick( event : Event ) : void
{
}
private function init() : void
{
var timer : Timer = new Timer();
timer.start();
timer.addEventListener( TimerEvent.TIMER, onTimerTick );
}

43. To defer object creation over multiple frames use:

 
<mx:Container creationPolicy=&#8221;queued&#8221;/>

44. Alpha = 0 is not the same as visible = false (Objects marked invisible are passed over)

 
loginButton.visible = false;

NOT:

 
loginButton.alpha = 0;

45. Faster to perform operations locally than it is to call a function in the same class Even slower to call a function from a different class (This is referred to as “code inlining”.)

46. When executing a function it’s more expensive if you call other functions from within it

 
private function udpateUserRecord()
{
update( user.firstName + user.lastName );
}

NOT:

 
private function updateUserRecord() {
update( concatName() );
}
private function concatName() : String
{
return user.firstName + user.lastName;
}

47. Arguments in functions are slower than a reference to an objects variables

 
package com.seantheflexguy.as3optimization
{
public class DemoClassMemberVariables
{
// set the properties on class instances
public var userName : String;
// etc...
public function DemoClassMemberVariables()
{
}
private function login() : void
{
// login implementation logic
userName = creds.getUserName();
// etc...
}
}
}

NOT:

 
package com.seantheflexguy.as3optimization
{
public class DemoClassArguments
{
public function DemoClassArguments()
{
}
private function login( creds : Authentication ) : void
{
// login implementation logic
userName = creds.getUserName();
// etc...
}
}
}

48. Faster to use "as" vs. casting

 
var u : User = event.results.users.user as User;

NOT:

 
var u : User = User(event.results.users.user);

49. Use custom object types vs new Object();

 
var v3D : Vector3D = new Vector3D();
v3D.x = 100;
v3D.y = 450;
v3D.z = 500;

NOT:

 
var v3DObject : Object = new Object();
v3DObject.x = 100;
v3DObject.y = 450;
v3DObject.z = 500;

50. Use casting to inform the Flash player what kind of objects are inside an Array

 
for (i=0;i<n;i++)
{
Vector3D( array[i] ).x = 2;
}

NOT:

 
for (i=0;i<n;i++)
{
array[i].x = 2;
}

51. Check for null instead of using try...catch blocks

 
if ( o != null )
{
o.method();
}

NOT:

 
try
{
o.method();
}
catch ( error )
{
trace( error );
}

References:

Sean Christmann: Optimizing Adobe AIR for Code Execution, Memory, and Rendering
http://www.craftymind.com/2008/11/20/max-2008-session-material/

Dennis Ippel: Some ActionScript 3.0 Optimizations
http://www.rozengain.com/blog/2007/05/01/some-actionscript-30-optimizations/

Shane McCartney: Tips on how to write efficient AS3
http://www.lostinactionscript.com/blog/index.php/2008/09/28/tips-on-how-to-write-efficient-as3/

Flex Application Performance: Tips and Techniques for Improving Client Application Performance
http://www.adobe.com/devnet/flex/articles/client_perf.html

Stephen Calender: ActionScript 3.0 Benchmarking
http://www.stephencalenderblog.com/?p=7

Grant Skinner: Types in AS3: ints not so fast, uints slow!
http://www.gskinner.com/blog/archives/2006/06/types_in_as3_in.html

Grant Skinner: Resource management strategies in Flash Player 9
http://www.adobe.com/devnet/flashplayer/articles/resource_management.html

Gary Grossman: ActionScript 3.0 and AVM2 Performance Tuning
http://www.onflex.org/ACDS/AS3TuningInsideAVM2JIT.pdf

Fastest way to copy an array
http://agit8.turbulent.ca/bwp/2008/08/04/flash-as3-optimization-fastest-way-to-copy-an-array/

Andre Michelle: AS3 optimations & suggestions
http://blog.andre-michelle.com/2005/as3-optimations-suggestions/

Package-level function closures in ActionScript
http://www.ericfeminella.com/blog/2008/05/06/package-level-function-closures-in-actionscript/

ActionScript 3 optimization techniques
http://blog.joa-ebert.com/2008/04/26/actionscript-3-optimization-techniques/

AS3 Performance Tester
http://businessintelligence.me/projects/performance_tester/performanceTester.html

+ Recent posts