필름리뷰

Talks 2018. 8. 22. 22:12


풀커버 글라스를 구입했습니다.
터치감좋고 들뜸현상없네요
저번에 강화유리를 샀었는데 자꾸 끝이 깨져서 좀 좋은걸로 샀습니다!! 갤럭시노트fe 실버색상입니다.

'Talks' 카테고리의 다른 글

QR코드의 매력  (1) 2010.08.18
Amazing "증강현실"  (0) 2010.03.12
5초 표현한 회사생활  (0) 2010.03.08
트위터의 힘 그리고 매력  (0) 2010.03.02
IT트렌드 2010  (0) 2010.02.05
Posted by Finebe
,


64-Bit Windows

From a cmd.exe window, run these commands:

cd "C:\Program Files (x86)\Git\git-cheetah"
regsvr32 /u git_shell_ext64.dll

32-Bit Windows

From a cmd.exe window, run these commands

cd "C:\Program Files\Git\git-cheetah"
regsvr32 /u git_shell_ext.dll

경로가 다르다면 경로만 수정하면 됩니다.

Posted by Finebe
,


Crash Reporting System

 모바일 서비스를 하게 되면 다양한 환경(제한된 램, 불안정한 네트워크, 저장공간부족등)에서 플레이가 되다 보니 크래시가 빈번하게 일어납니다. 예를 들어 모바일게임을 하는 유저가 자기 폰에서 크래시가 난다고 항의했을 시 개발사에서는 그 사람 계정을 복제하여 플레이한다고 해서 반드시 크래시가 나지 않습니다. 이런 문의를 받으면 참 난감합니다. 당당하게 크래시 안 나니깐 유저발 버그라고 할 수도 있고.....크래시 지레짐작하여 허송세월을 보내기도 합니다. 물론 크래시 덤프가 존재한다고 해서 크래시를 항상 완벽하게는 대응하지 못합니다. 하지만 더 빠르고 더 정밀한 대응을 할 수 있습니다.


 그래서 크래시 덤프를 외부 서버로 전송을 해서 클라이언트 개발자가 분석을 할 수 있게 만들어야 합니다. 이 것이 크래시 레포팅 시스템입니다. 


왜 외부서버이냐?

개발자만큼 플랫폼을 잘 알고 거기다가 매우 친절한 유저가 많으면 이런거 안 만들어도 됩니다. 그 사람들이 친절하니깐 크래시덤프를 메일로 보내줄수도 있으니..

일반적인 사용자가 크래시가 나서 보고서를 제출하겠냐고 하는 문구에 확인을 누르는 사람은 1000명 중에 한명꼴이라는 통계를 본적이 있습니다. 그래서 크래시가 나면 크래시 레포팅시스템에 의해서 개발사가 준비해놓은 서버로 전송해야 합니다. 


이걸 다 개발해야 되는건 아닙니다. 이런 서비스를 무료로 제공하는 곳도 있고 유료도 있습니다.

대부분 크래시 로그 및 분석 등이 제공됩니다.


아래는 여러가지의 크래시레포팅서비스를 제공하는 곳입니다.


-Crashlytics


-HockeyApp


-Crittercism


-Google breakpad
  • https://code.google.com/p/google-breakpad/
  • Android NDK 크래시 덤프를 만들고 분석하기 위한 라이브러리
  • Android NDK을 제공하는 다른 서비스도 breakpad를 이용한 것임.
  • 안드로이드 설정 - https://code.google.com/p/google-breakpad/source/browse/trunk/README.ANDROID



Posted by Finebe
,


레지스터기반 머신(Register-based Machine)

 CPU 연산자를 저장하는 위치에 따라 레지스터 기반 프로세서(register-based processor)와 스택 기반 프로세서(stack-based processor)로 나눌 수 있다. 레지스터 기반 프로세서는 레지스터를 사용하여 연산하는 방식이고 스택 기반 프로세서는 피 연산자를 스택에 저장하고 나서 연산을 수행하면 피 연산자를 꺼내어 연산 후에 그 결과를 다시 스택에 넣는 방식이다.

임베디드 시스템에서 자주 사용되는 스택 기반 프로세서는 함수 호출 시 인자를 스택에 넣어줘야 하는 레지스터 기반 프로세서와 달리 이미 스택에 인자가 저장되어 있기 때문에 추가적인 작업이 필요하지 않다. 또한 컨텍스트 스위치(context switch)가 일어날 경우 레지스터 기반 프로세서는 모든 레지스터의 상태를 저장해 줘야 하지만, 스택 기반 프로세서는 각 프로세스마다 스택을 할당하기 때문에 단지 스택만 변경시킴으로써 간단히 해결할 수 있다.

반면 레지스터 기반 프로세서의 가장 큰 장점은 속도가 매우 빠르다는 것이다. 레지스터가 CPU 내에 존재하기 때문에 레지스터의 참조가 무척 빠른 반면 스택 기반 프로세서는 대부분의 스택을 메모리에 두기 때문에 값을 읽고 쓰기 위해선 메모리를 액세스해야 한다. 또한 레지스터 기반 프로세서는 인스트럭션이 가독성이 있으므로 디버깅에 유리하다.

레지스터 기반 프로세서의 대표적인 예는 인텔 x86이 있고, 스택 기반 프로세서는 RTX32P가 있다.

 

원본 위치 <http://scotthan.tistory.com/75

Posted by Finebe
,


뮤텍스 : 뮤텍스는 화장실에 들어가기 위한 열쇠로 비유할 수 있습니다. 즉 화장실에 들어갈 수 있는 열쇠를 한 사람이 갖고 있다면, 한 번에 열쇠를 갖고 있는 그 한 사람만이 들어갈 수 있습니다. 화장실에 열쇠를 갖고 있는 사람이 들어가 볼일을 다 본 후에는 줄을 서서 기다리고 있는(대기열-큐) 다음 사람에게 열쇠를 주게 됩니다.  

 

공식적인 정의(심비안 개발자 라이브러리에서 발췌) : 뮤텍스는 한 번에 하나의 쓰레드만이 실행되도록 하는 재 입장할 수 있는 코드 섹션에 직렬화된  접근이 가능하게 할 때 사용됩니다. 뮤텍스 객체는 제어되는 섹션에 하나의 쓰레드만을 허용하기 때문에 해당 섹션에 접근하려는 다른 쓰레드들을 강제적으로 막음으로써 첫 번째 쓰레드가 해당 섹션을 빠져나올 때까지 기다리도록 합니다.

 

뮤텍스는 값이 1인 세마포어입니다.

 

세마포어: 세마포어는 빈 화장실 열쇠의 갯수라고 보면 됩니다. 즉, 네 개의 화장실에 자물쇠와 열쇠가 있다고 한다면 세마포어는 열쇠의 갯수를 계산하고 시작할 때 4의 값을 갖습니다. 이 때는 이용할 수 있는 화장실 수가 동등하게 됩니다. 이제 화장실에 사람이 들어갈 때마다 숫자는 줄어들게 됩니다. 4개의 화장실에 사람들이 모두 들어가게 되면 남은 열쇠가 없게 되기 때문에 세마포어 카운트가 0이 됩니다. 이제 다시 한 사람이 화장실에서 볼일을 다 보고 나온다면 세마포어의 카운트는 1이 증가됩니다. 따라서 열쇠 하나가 사용가능하기 때문에 줄을 서서 기다리고 있는 다음 사람이 화장실에 입장할 수 있게 됩니다.

 

공식적인 정의(심비안 개발자 라이브러리에서 발췌): 세마포어는 공유 리소스에 접근할 수 있는 최대 허용치만큼 동시에 사용자 접근을 할 수 있게 합니다. 쓰레드들은 리소스 접근을 요청할 수 있고 세마포어에서는 카운트가 하나씩 줄어들게 되며 리소스 사용을 마쳤다는 신호를 보내면 세마포어 카운트가 하나 늘어나게 됩니다.

 

원본 위치 <http://blog.naver.com/PostView.nhn?blogId=cabsoft88&logNo=90115377264&beginTime=0&jumpingVid=&from=search&redirect=Log&widgetTypeCall=true&topReferer=http%3A%2F%2Fsearch.naver.com%2Fsearch.naver%3Fsm%3Dtab_hty.top%26where%3Dnexearch%26ie%3Dutf8%26query%3D%25EC%2593%25B0%25EB%25A0%2588%25EB%2593%259C%2B%25EB%25AE%25A4%25ED%2585%258D%25EC%258A%25A4%2B%25EC%2584%25B8%25EB%25A7%2588%25ED%258F%25AC%25EC%2596%25B4%26x%3D0%26y%3D0


그림으로 쓰레드에 대한 설명이 잘 되어있음. http://comfun.tistory.com/694

'Application Programming' 카테고리의 다른 글

Bitmap 구조 2  (0) 2010.01.18
Bitmap 구조 1  (0) 2010.01.18
Posted by Finebe
,


비교항목

cocos2d-x

unity

업데이트

대응속도 느림.
버그 있을 커뮤니티를 보고 대응해야 .

버전업시 하위버전과 호환성이 좋음.

대응속도 빠름.
빠른 대응으로 업데이트를 .

하위버전과 호환성 좋음.

reference

적음

매우 많음. 유료 플러그인등

멀티플랫폼 지원

ios, android, windows7, mac, windows phone

ios, android, web, mac, linux, playstation, xbox, wii

사용되는 언어

c++ 11( cocos2d-x 3.0이상), lua, javascript

c#, javascript, boo

생산성

높은 편.

매우 높은편. 

커뮤니티 활성도

우리나라는 중간정도. 일본, 중국쪽에서 활발함.

높음. 한국에서 매우 인기가 많음.

접근성(습득속도)

진입장벽이 높음. 객체지향개념등

낮음. 기본적인 프로그래밍만 알아도 개발이 가능함.

개발툴

visual studio 2012, xcode

unity, mono develop, visualstudio(unityVS)

3d 적용범위

3d객체를 추가할 있지만 제한적임

3d 요소 추가 용이함

엔진 튜닝

open source라서 가능.

불가능

비용

무료

495만원( pro, ios, android )

미래성

좋은 편이긴 하나 apple 차세대 그래픽api 메탈api 지원할지는 미지수.

좋은 메탈api지원하기로 발표함.

2d render performance Test


2d 최적화

2d는 매우 최적화됨. 3.x부터 3d를 공식적으로 지원함.

보통이지만 많이 좋아짐(4.2이후 공식 지원)

2d 추출시 기본적인 용량(리소스 제외)

2~3메가

10메가


Posted by Finebe
,


2.1.5버전 갤럭시s2(4.0.4)에서 버그가 발생합니다..

이유는 TTFLabel생성시 ""이면 제대로 텍스쳐를 생성을 못하여 Null값으로 들어가는 문제가 있습니다.. 이는 아주 작은 Rawdata를 생성하여 임시로 넣어주어 해결했습니다. 

-cocos2d-x 3.x에는 추가된 사항입니다.


static unsigned char cc_2x2_white_image[] = {

    // RGBA8888

    0xFF, 0xFF, 0xFF, 0xFF,

    0xFF, 0xFF, 0xFF, 0xFF,

    0xFF, 0xFF, 0xFF, 0xFF,

    0xFF, 0xFF, 0xFF, 0xFF

};


#define CC_2x2_WHITE_IMAGE_KEY  "cc_2x2_white_image"


void Sprite::setTexture(Texture2D *texture)

{

    // If batchnode, then texture id should be the same

    CCASSERT(! _batchNode || texture->getName() == _batchNode->getTexture()->getName(), "CCSprite: Batched sprites should use the same texture as the batchnode");

    // accept texture==nil as argument

    CCASSERT( !texture || dynamic_cast(texture), "setTexture expects a Texture2D. Invalid argument");


    if (NULL == texture)

    {

        // Gets the texture by key firstly.

        texture = TextureCache::getInstance()->textureForKey(CC_2x2_WHITE_IMAGE_KEY);


        // If texture wasn't in cache, create it from RAW data.

        if (NULL == texture)

        {

            Image* image = new Image();

            bool isOK = image->initWithRawData(cc_2x2_white_image, sizeof(cc_2x2_white_image), 2, 2, 8);

            CCAssert(isOK, "The 2x2 empty texture was created unsuccessfully.");


            texture = TextureCache::getInstance()->addUIImage(image, CC_2x2_WHITE_IMAGE_KEY);

            CC_SAFE_RELEASE(image);

        }

    }


    if (!_batchNode && _texture != texture)

    {

        CC_SAFE_RETAIN(texture);

        CC_SAFE_RELEASE(_texture);

        _texture = texture;

        updateBlendFunc();

    }

}

 

원본 위치 <http://discuss.cocos2d-x.org/t/cceditbox-crash-on-android-tablet/7670/15

'Mobile Programming > Cocos2d-x' 카테고리의 다른 글

Crash Reporting System  (0) 2014.12.24
cocos2d-x vs unity 2d  (0) 2014.11.25
Posted by Finebe
,


  1. 안드로이드
    • breakpad
      • https://code.google.com/p/google-breakpad/
      • 윈도우즈 환경에서 breakpad사용하기 http://yardbirds.tistory.com/107
      • http://rein.kr/blog/archives/2438
      • http://www.reddit.com/r/androiddev/comments/28hvzf/whats_the_best_crash_reporting_service_for_android/
  2. ios/안드로이드
    1. crashlytics
      1. https://try.crashlytics.com/
      2. 깔끔한 ui와 간단한 사용법이 매력임
      3. 무료.
      4. 2014년 11월 24일 현재 ndk는 미지원.
    2. hockeyapp
      1. http://hockeyapp.net/features/
      2. 유료
      3. ndk지원함.
    3. crittercism
      1. http://www.crittercism.com/
      2. 유료


Posted by Finebe
,


요즘 자바 대신 C계열 언어를 익히고 있는데 배우면서 드는 생각은
프로그래밍에서도 등가교환의 법칙이 있구나 하는 생각입니다.

 

자바는 가비지컬렉션이라는 넘이 있습니다. 개발자를 편하게 해주는 거죠~
그 반면에 C계열에는 가비지컬렉션이 없습니다.

 

프로그램을 돌리기 위해서는 메모리에 올리고 지우고 올리고 지우고 올리고 지우고를 반복하면서

 실행되게끔합니다. 모바일에서 지우지 않고 계속 올리기만 하면 강제종료됩니다. 올리고 지우고..

이게 말이 쉽지 "도대체 언제 지워서 없애야지 하는지"라는 고민을 하게 됩니다. 프로그래밍에서

고민이 하나 늘어난다는 것은 그 고민이 다른 고민들과 엮이게 되어서 고민들이 더더더 커질 수도

있습니다. 때에 따라서 멘붕도 찾아옵니다.
---여기서 포인트는 프로그래머의 고민증가

 

그럼 가비지컬렉션이 멀까요. 말 그대로 쓰레기를 수집하는 넘입니다. 내가 메모리에 올리고 지우지

않아도 지울때 되면 알아서 버려줍니다. 오토인거죠. 완전 편합니다. 메모리 지우는 걸 까먹고 있어도

 쓰레기 수집가가 수집해가서 앞에서 말한 강제종료를 어느정도 막아줍니다. 하지만 쓰레기 수집가도

하나의 큰 작업입니다. 쓰레기를 수집하기 위해서는 그게 쓰레기인지 아닌지 cpu가 체크를 계속 해줘야합니다.
---여기서 포인트는 가비지컬렉션는 또하나의 큰 작업임~

 

말을 종합해보면 자바는 개발자를 편하게 해주지만 퍼포먼스는 C계열보다 못합니다.(기기가 월등해야지 비슷함)
하지만 자바는 개발자의 고민을 덜어주죠..

반대로 C계열은 퍼포먼스는 좋지만 가끔 개발자를 힘들게 합니다.

 

여기서 내가 얻는 그 가치에 맞게 다른 것(대가)을 교환하는 등가교환이 생깁니다.

편하고 쉬울 것을 선택하면 그만큼 불이익이 생길 수도 있는 거죠.

 

간단한 예를 하나 더 들자면 자동차를 볼 수 있습니다. 수동과 오토, 앞에서 말한 가비지컬렉션의 유무와 비슷한 조건입니다.

수동은 배우기 어렵고 힘들지만 연비효율이 좋아집니다.

오토는 배우기 쉽고 다루기 쉽지만 그만큼 연비효율은 떨어집니다.

 

말이 너무 길었네요. 제가 하고 싶은 말은 배우는 게 힘든 만큼 그 만큼의 플러스 등가교환이 일어난다는 것입니다.

Posted by Finebe
,


모바일에서 사용되는 기본폰트들 첨부파일을 참조하세요


------아이폰-------
LockClock.ttf
Helvetica.ttc
AppleGothicRegular.ttf
아이폰_기본폰트.zip


------안드로이드-------
Clockopia.ttf
DroidSans.ttf
DroidSans-Bold.ttf
DroidSansFallback.ttf
안드로이드_기본폰트.zip
Posted by Finebe
,



var vector:Vector.<String> = Vector:<String>(["test1","test2","test3"]);

벡터는 배열보다 속도, 관리, 접근 등에 더 효율적이여서 자주 씁니다.

변경: hika님의 댓글로 인하여 변경하였습니다. 감사합니다.

'Application Programming > Flex & Flash' 카테고리의 다른 글

Browser's RIA Data Loading Benchmarks  (0) 2010.10.02
Flash AMF 의 개요  (0) 2010.03.08
Flex Builder 3에 JSON적용하기  (2) 2010.01.13
Posted by Finebe
,


이전 글 CodeIgniter 라이브러리에 ZendAMF 추가하기를 마치셨다면 이번에는 Flex와 연동하는 것을 시작하겠습니다.
대부분은 글은 머드초보님의 글을 바탕으로 진행할 예정입니다.(출처: [Flex/PHP] Zend AMF를 이용한 PHP와 FLEX의 연동삽질후기)

①. 먼저 DB를 생성하고 데이터입력입니다

DROP TABLE IF EXISTS `sosi`.`sosi`; 
CREATE TABLE  `sosi`.`sosi` ( 
  `idx` int(10) unsigned NOT NULL AUTO_INCREMENT, 
  `sosiname` varchar(45) NOT NULL, 
  `height` int(10) unsigned NOT NULL, 
  `blood` varchar(45) NOT NULL, 
  PRIMARY KEY (`idx`) 
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; 
 
INSERT INTO `sosi` (`idx`,`sosiname`,`height`,`blood`) VALUES  
 (1,'윤아',166,'B'), 
 (2,'수영',170,'O'), 
 (3,'효연',160,'AB'), 
 (4,'유리',167,'AB'), 
 (5,'태연',162,'O'), 
 (6,'제시카',163,'B'), 
 (7,'티파니',162,'O'), 
 (8,'써니',158,'B'), 
 (9,'서현',168,'A');

 

②. Flex Project 'ZendAmfTest'를 만듭니다. 머드초보님은 Application server type을 php으로 하셨는데 저는 서버가 외부에 있어서 None/Other로 하였습니다. 로컬이라면 php를 선택하신 다음에 아파치나 iis가 돌아가는 폴더를 지정하면 됩니다. 지정하게 되면 SWF가 서버로 바로 위치하게 되므로 테스트하기 편합니다.

③. 그런 다음 system>application>libraries에 sosimember.php라는 파일을 만듭니다. CI특성상 파일명은 소문자로 만드셔야합니다.


 

④. 다음은 DB에서 데이터를 가져오고 반환하는 모델을 만듭니다. system>application>models에 sosimodel.php를 생성하시고 아래 코드입력합니다.
load->library("SosiMember");
    	
        $query = $this->db->query('SELECT idx, sosiname, height, blood FROM sosi;');
        
        $ret = array();
        foreach ($query->result() as $row){        
            $tmp = new SosiMember(); 
            $tmp->idx = $row->idx; 
            $tmp->sosiname = $row->sosiname; 
            $tmp->height = $row->height; 
            $tmp->blood = $row->blood; 
            $ret[] = $tmp; 
        } 
        return $ret; 
    }
}  
?>

⑤. 다음은 controllers를 만듭니다. 여기에 ZendPHP가 들어갑니다. system>application>controllers에 remote.php를 생성하시고 아래 코드입력합니다.
load->model('SosiModel');    
    }
    
    public function index()
    {
        $this->load->library("Apps");
        $this->apps->load("Zend/Amf/Server");
        $server = new Zend_Amf_Server();
        $server->setClass("SosiModel"); 
		$server->setClassMap("SosiMember", "SosiMember"); 
		echo($server -> handle()); 
        
    }
}  
?>

⑥. 이제 Flex에게 PHP를 연결할 설정을 역할을 하는 service-config.xml을 만듭니다.
 
  
      
         
             
                    
              
             
                  
                    *  
                     
                
          
      
      
          
             
          
     

⑦. Flex파일 ZendAmfTest.mxmlf에 아래 코드를 입력합니다.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
    layout="vertical"
    creationComplete="creationCompleteHandler()">
 <mx:Script>
  <![CDATA[
   import mx.controls.Alert;
   import mx.rpc.events.ResultEvent;
   import mx.rpc.events.FaultEvent;
   
   private function creationCompleteHandler():void
   {
    roSosi.getData();
   }
   
   private function faultHandler(event:FaultEvent):void
   {
    Alert.show(event.message.toString());
   }
   
   private function resultGetDataHandler(event:ResultEvent):void
   {
    dgSosi.dataProvider = event.result as Array;
   }
  ]]>
 </mx:Script>
 
 <mx:RemoteObject id="roSosi" fault="faultHandler(event)" destination="zend" source="SosiModel">
  <mx:method name="getData" result="resultGetDataHandler(event)" />
 </mx:RemoteObject>
 
 <mx:DataGrid id="dgSosi" width="100%" height="100%">
  <mx:columns>
   <mx:DataGridColumn headerText="아이디" dataField="idx"/>
   <mx:DataGridColumn headerText="소녀시대이름" dataField="sosiname"/>
   <mx:DataGridColumn headerText="신장" dataField="height" />
   <mx:DataGridColumn headerText="혈액형" dataField="blood" />
  </mx:columns>
 </mx:DataGrid>  
</mx:Application>

SyntaxHighlighter가 Flex를 지원하지 않네요ㅠ
만약 다른 서비스를 추가하게 된다면, <mx:RemoteObject>에서 endpoint를 다른 url로 잡아주면 됩니다.
<mx:RemoteObject id="roAnother" fault="faultHandler(event)"  
       
destination="zend" source="AnothorService"  
       
endpoint="http://localhost/ZendAmfTest-debug/another_amf.php">


그렇게 Flex를 컴파일 하게 되면 아래와 같이 출력됩니다.


이상입니다. 혹시 에러나 잘못된 점은 지적해주시기 바랍니다.

참고사이트:

http://corlan.org/2008/11/13/flex-and-php-remoting-with-zend-amf/ 
http://mudchobo.tomeii.com/tt/398

Posted by Finebe
,


RIA에서 Data Loading은 중요한 요소입니다. 대부분이 서버와 데이터연동을 통하기 때문입니다.
어떤 Data Format이 좋을까 고민할 수도 있습니다. HTTP, SOAP, XML, Dojo, JSON, AMF3등 중에서도 자주 쓰이는 방식은  HTTP, XML,  JSON, AMF3등이 있습니다. 지금 알아볼려고 하는 벤치마크도 이 4개의 데이터포멧을 가지고 진행될 예정입니다.
브라우저별로 렌더링엔진, 스크립트엔진이 틀리기때문에 벤치마크에 대한 결과도 틀립니다.
그래서 제가 자주 사용하는 브라우저 3개만 벤치마크해보았습니다.

벤치마크에 사용될 브라우저와 대상 데이터포멧
 Benchmarks Browser  Internet Explorer8,Firefox 3.6.8, Chrome
 Benchmarks Data Format  HTTP, XML, JSON, AMF3

벤치마크방법:
  1. 모든 브라우저, 실행프로그램들을 꺼둔 상태(메모리, CPU할당량 최소화)
  2. 벤츠마크 사이트: http://www.jamesward.com/census/
  3. IE8->Firefox->Chrome으로 진행


벤치마크 결과:

-Internet Explorer8
Data 500Rows 보냈을때

Data 5,000Rows 보냈을때


-Firefox 3.6.8
 Data 500Rows 보냈을때

Data 5,000Rows 보냈을때


-Chrome
Data 500Rows 보냈을때

Data 5,000Rows 보냈을때


-벤치마크를 마치며
 벤치마크프로그램 시간내서 만들 생각을 하고 있었는데 마침 Server Exec Time, Transfer Time, ParseTime, RenderTime까지 나오는 친절한 벤치마크를 발견했습니다. 위 그림을 보시면 한눈에 브라우저 별로 데이터처리속도가 틀린것을 알 수 있습니다. 특히 IE8은 타브라우저보다 훨씬 느립니다.ㅎㄷㄷ.

 데이터 처리건수  500건  5,000건
 데이터 처리속도  XML>AMF3>JSON>HTML  AMF3>>XML>JSON>HTML
 데이터 크기(작은순)  AMF3>JSON>XML>HTML  AMF3>>>JSON>XML>HTML

IE8에서는 데이터크기가 커지니 XML ParseTime이 매우 늘어나 느려지는 것을 확인할 수 있습니다. 데이터 처리건수가 커질 수록 AMF3는 XML보다 월등한 처리속도를 보여줍니다(XML의 ParseTime은 처리건수에 비례). 또한 AMF3 데이터크기는 JSON의 1/10정도밖에 되질 않는 것도 확인이 되었습니다. 이러한 벤치마크결과들이 제 고민을 해결해주었습니다.

'Application Programming > Flex & Flash' 카테고리의 다른 글

Actionscript Vector 초기화(initialization)  (6) 2011.02.16
Flash AMF 의 개요  (0) 2010.03.08
Flex Builder 3에 JSON적용하기  (2) 2010.01.13
Posted by Finebe
,



AMF(Action Message Format
)이란?

-한마디로 말해서 서버와 SWF(플래시)의 통신이 AMF라고 불리는 Binary형식의 프로토콜을 사용하여 이루어지며 서버상에 있는 원격지 객체를 호출합니다.

-가장 작은 패킷 크기에 데이터 통신에 필요한 거의 모든 옵션을 넣을 수 있는 바이너리 메세징 프로토콜

-HTTP(80포트), HTTPS(443)를 통해 통신하기 때문에 방화벽을 무시할 수 있습니다.

-AMF는 플래시 플레이어가 인식 가능한 기본 메세징 포맷이므로 클라이언트에서 데이터 직렬화와 역직렬화가 자동으로 처리되며 속도도 빠릅니다.

-게이트웨이는 HTTP(80포트), HTTPS(443)를 통해 AMF패킷 송수신, AMF직렬화/역직렬화, 적절한 서비스에 요청위임 등을 수행할 수 있는 게이트웨이 라이브러리가 필요합니다. 이러한 게이트웨이 라이브러리 여러 종류 중에 우리는 여기서 ZendAMF라는 것을 사용할 것입니다.


AMF의 구조 :
 http://wiki.gnashdev.org/AMF


Actionscript & PHP Type Mapping

   

PHP to ActionScript mapping

  

PHP

ActionScript

null

null

boolean

boolean

string

string

DomDocument

xml

DateTime

date

float

number

integer

number

Associative Array w/ mix of keys

Object

Associative Array w/ Numeric index of keys

Array

object

object

RemoteClass Zend_Amf_Value_TypedObject

typed object

Zend_Amf_Value_ByteArray

flash.utils.ByteArray

Zend_Amf_Value_ArrayCollection

  

 

원본 위치 <http://framework.zend.com/wiki/display/ZFPROP/Zend_Amf+-+Wade+Arnold>


ZendAMF란?

-Remoting Gateway Library로써 Adobe가 공식지원하여 Zend 프레임워크에서 만들었습니다. AMF3 스펙를 사용하여 AMF0스펙를 사용한 AMFPHP보다 뛰어난 성능을 발휘합니다.    

----------------------------------------------------------------------------------------------------------------------

   

AMF3 스펙 기반으로 만들어진 ZendAMF 라이브러리를 가볍고 막강한 성능을 자랑하는 CI에 추가해보도록 하겠습니다.

   

  1. 준비물:
    1. CodeIgniter (http://codeigniter.com)
    2. ZendAMF (http://framework.zend.com/download/amf)
       
  2. CodeIgniter를 서버에 설치한 후 ZendAMF를 압축해제합니다. 그러면

    이 생성됩니다. 여기서 사용할 것은 library폴더에 들어있는 Zend라는 넘만 쓸 것입니다. Zend폴더를 복사하여
    system>application>libraries>Zend폴더에 넣습니다.

  3. CI의 config파일의 내용변경

    $config['enable_hooks'] = FALSE; --> $config['enable_hooks'] = TRUE;로 변경합니다.

  4. 후킹을 통한 프레임워크 코어확장
    코어파일을 해킹하지 않고도 내부작동방식을 변경하게 하는 기능인 후킹(설명)을 이용하여 컨트롤러가 호출되기 직전(pre-controller)에 실행하게 되게 추가합니다.

    위 hooks.php 파일에 아래 코드를 추가하시면 됩니다.

$hook['pre_controller'][] = array(

  'class' => 'App_hook',

  'function' => 'index',

  'filename' => 'app_hook.php',

  'filepath' => 'hooks'

);


5.    app_hook파일을 hooks폴더에 추가합니다.
 
app_hook.php 파일 안의 코드는

<?php 

if(!defined('BASEPATH')) exit('No direct script access allowed');

   

class App_hook

{

    function index()

    {

        ini_set('include_path',ini_get('include_path').PATH_SEPARATOR.BASEPATH.'application/libraries/');

    }

}

?>

이는 기존의 include_path의 값에 appliaction/libraries/를 추가한 것입니다.

6.    Zend 클래스와 다른 프레임워크 클래스를 이용하기 위해 하나의 사용자 라이브러리 파일을 만듭니다.

 

     그 파일 안의 코드는 다음과 같습니다.

<?php if (!defined('BASEPATH')) {exit('No direct script access allowed');}

   

class Apps

{

    function __construct($class NULL)

    {

        if(!empty($class) && is_array($class))

        {

            foreach($class as $item)

            {

                $this->load($item);

            }

        }

    }

      

    function load($class)

    {

        require_once (string) $class EXT;

    }

?>


7.    이제 ZendAMF 라이브러리를 사용할 준비는 끝났습니다. 테스트로 ZendAMF를 로드하는 Remoting Class를 만들어보겠습니다. 여기서 주의하실 점은 폴더명의 대소문자입니다. 이 글의 참고사이트에는 대문자로 되어있어서 그대로 하시면 오류가 생기십니다.
 
        파일을 만드신 후에 안에 코드는 아래와 같습니다.

<?php

class Remote extends Controller 

{

    function Remote()

    {

        parent::Controller();    

    }

      

    function index()

    {

        $this->load->library("Apps");

        $this->apps->load("Zend/Amf/Server"); //여기서 AMF가 아니라 Amf입니다. 각자 다를 수 있으니 확인하세요

          

        $server = new Zend_Amf_Server();

        $server->setClass($this);

        echo $server->handle();

    }

      

    function getData()

    {

        return array(1,2,3,4,5);

    }

?>


8.     Remote클래스를 호출합니다.
 
이라고 뜬다면 성공입니다. 그 외에 폴더명이 잘못되서 에러가 발생할 수 있습니다. 다시 한번 대소문자를 꼭 확인!! 

   

  
 
참고사이트

http://codeigniter.com/wiki/AMF_Flash_Remoting_with_Zend_and_CI/
http://www.cyworld.com/duck_info/3856801
http://framework.zend.com/wiki/display/ZFPROP/Zend_Amf+-+Wade+Arnold

Posted by Finebe
,

QR코드의 매력

Talks 2010. 8. 18. 10:55



요즘 지하철이나 신문, 인터넷 광고들을 보면 QR코드가 점점 많아지는 걸 느낄 수 있습니다.

그럼 QR코드란 무엇인가?(http://ko.wikipedia.org/wiki/QR_%EC%BD%94%EB%93%9C)

finebe.com의 QR코드



QR코드(QR code)는 흑백 격자 무늬 패턴으로 정보를 나타내는 매트릭스 형식의 이차원 바코드이다. QR코드는 주로 일본에서 많이 사용되며 명칭은 덴소 웨이브의 등록상표 Quick Response에서 유래하였다. 종래에 많이 쓰이던 바코드의 용량 제한을 극복하고 그 형식과 내용을 확장한 2차원의 바코드로 종횡의 정보를 가져서 숫자외에 문자의 데이터를 저장할 수 있다. 보통 디지털 카메라나 전용 스캐너로 읽어들여 활용한다.

이렇듯 바코드보다 훨씬 많은 정보를 저장할 수 있다고 합니다. 저도 알고는 있었지만 갤럭시S를 통해 사용하게 되었습니다.

스마트폰이 대중화되면서 QR코드의 대중성도 차츰 형성이 되고 있습니다.

QR코드의 장점이라고 하면 URL를 입력하고 텍스트로 검색할 필요 없이 QR코드 스캐너어플(이건 받으셔야합니다)로 그냥 찍기만 하면 알아서 프로그램(해당프로그램 선택도 QR코드에 포함됨)이 실행됩니다. 인식률도 매우 빠릅니다.

이 코드는 일반 사용자들이 생성할 수도 있습니다. 자기가 원하는 정보나 URL를 QR코드로 생성해서 배포할 수 있다는 것입니다.

위에 QR코드는 저의 블로그주소로 만든 것입니다. QR스캐너로 스캔하시면 스마트폰에서 제 블로그가 뜨는 것을 확인할 수 있습니다.

QR코드생성 방법

다음사이트(http://code.daum.net/web/mainMenu)에 접속하셔서 로그인 만드실 수 있습니다. 만드는 법도 매우 간단해서 설명은 따로 하지 않겠습니다.



생성하셔서 테스트해보세요. 재미뿐만 아니라 정보전달의 새로운 매개체역할을 할 것입니다.

네이트온 프로필 사진을 QR코드로 변경했습니다.ㅋㅋ

'Talks' 카테고리의 다른 글

필름리뷰  (0) 2018.08.22
Amazing "증강현실"  (0) 2010.03.12
5초 표현한 회사생활  (0) 2010.03.08
트위터의 힘 그리고 매력  (0) 2010.03.02
IT트렌드 2010  (0) 2010.02.05
Posted by Finebe
,




위 그림은 왼쪽부터 IE, 파이어폭스, 크롬, 오페라, 사파리를 재미있게 표현한 그림입니다. 서로 사이 좋게 손을 잡고 있는데요. 그럴일은 없겠지만 5개의 브라우저 제작업체들이 힘을 모아서 완벽한 표준을 만들고 지킨다면 웹프로그래머들이 고생하는 일은 많이 줄어들텐데 말이죠. 그런 의미에서 이러한 재미있는 그림으로 표현한거 같습니다.



트라이던트(Trident)
 트라이던트(MS HTML이라고도 합니다)는 마이크로소프트 윈도우즈에 탑재되는 브라우저인 인터넷 익스플로러의 코어(속칭 IE 코어)입니다. 이 엔진은 1997년에 인터넷 익스플로러 4부터 처음으로 사용되었으며, 이후에 지속적으로 신기술이 추가된어 인터넷 익스플로러와 같이 업데이트됐습니다. 트라이던트는 실제로는 오픈 소스 코어이며, 트라이던트 엔진은 모듈 방식의 소프트웨어이기 때문에 다른 소프트웨어 개발자들이 쉽게 웹 브라우저 기능을 자신이 만든 어플리케이션이 추가할 수 있습니다. 그 포트 코어 설계가 매우 안정적이라서 IE 코어를 사용하지만 인터넷 익스플로러는 아닌 브라우저(예를 들면 Maxthon, GreenBrowesr, 중국의 메신저 번들 브라우저 등)가 많지만, 트라이던트는 윈도우즈 플랫홈만 지원합니다.
 인터넷 익스플로러의 시장 독점은 트라이던트 코어가 오랜 시간동안 독점적인 위치를 차지할 수 있게 해주었습니다. 이것 때문에 마이크로소프트는 상당히 긴 시간 동안 트라이던트 코어의 업데이트를 하지 않았고, 그 결과 트라이던트 코어는 W3C 표준과 거의 맞지 않게 되었을 뿐만 아니라, 트라이던트 코어 내부의 대량의 버그와 보안 문제가 해결되지 않고 누적되게 되었습니다. 현재 마이크로소프트는 트라이던트의 배포 엔진에큰 변화를 주어, 새로운 기술 외에도 웹 페이지 표준의 지원을 추가하기 시작했습니다. (그래서 인터넷 익스플로러 6이 오랜 시간 사용되었던 것에 비해, 7, 8, 9로 이어지는 변화 속도는 매우 빠르지요). 하지만 이런 변화는 다른 엔진-게코, 웹코어, KHTML, 프레스토 등에 비해 많이 떨어진 편입니다.

게코(Gecko)
게코는 오픈 소스 코드이며, C++로 짜여진 웹 페이지 렌더링 엔진입니다. 현재 모질라에서 제작하는 웹 브라우저(파이어폭스)와, 넷스케이프 6 이후 버전에서 사용하고 있습니다. 이 소프트웨어의 원 코드는 넷스케이프에서 개발하였으며, 지금은 모질라 기금이 유지-보수를 담당하고 있습니다. 게코의 특징은 코드가 완전히 공개되어 있다는 것인데, 따라서 개발 수준이 매우 높고 전 세계의 프로그래머들이 이 코드를 사용하여 기능을 추가할 수 있습니다. 오픈 소스이기 때문에 게코 엔진을 사용하는 브라우저도 매우 많습니다. 이것은 게코 코어가 수년 동안 시장 점유율을 유지해 왔던 원인이기도 합니다.
 게코 엔진은 풍부한 어플리케이션 인터페이스와 커뮤니케이션 어플리케이션을 제공하고 있습니다. 이를 사용하여 인터넷 브라우저, HTML 에디터, 클라이언트/호스트 등을 만들 수 있습니다. 비록 처음에는 넷스케이프 네비게이터와 모질라 파이어폭스 정도였지만, 현재에는 많은 프로그램들이 이 엔진을 사용하고 있습니다. 그 밖에 게코는 확장성을 지닌 코어로서 윈도우즈, BSD, 리눅스, 맥 OS X에서 사용할 수 있습니다.게코는 트라이던트 다음으로 많이 사용되는 엔진입니다. 게코 엔진을 사용한 브라우저는 파이어폭스, 넷스케이프 네비게이터 6~9, SeaMonkey, Camino, Mozilla, Flock, Galeon, K-Meleon, Minimo, Sleipni, Songbird, XeroBank가 있습니다. 구글 가젯 엔진도 게코 엔진을 사용한 것입니다.
 

프레스토(Presto)
프레스토는 오페라 소프트웨어가 개발한 랜더링 엔진으로, 현재 오페라 7~10 버전이 이 엔진을 사용하고 있습니다. 프레스토의 특징은 렌더링 속도의 최적화입니다. 프레스토는 지금 공개된 브라우저 중에서 제일 빠른 속도를 자랑하지만, 그 댓가로 호환성을 일부 희생했습니다.
 프레스토는 하나의 동적인 코어입니다. 트라이던트나 게코와 제일 큰 차이는 스크립트의 처리에 있습니다. 페레스토는 선천적인 장저으로 웹페이지의 전부 혹은 일부에서 스크립트를 만나면 이에 알맞는 상황에 따라 새로 해석을 합니다. 그 밖에도 이 코어는 자바스크립트를 실행할때 속도가 아주 빠릅니다. 동일한 조건에서 테스트를 할 경우, 프레스토는 자바스크립트를 실행하는데 걸리는 시간이 트라이던트와 게코 엔진의 1/3밖에 되지 않습니다. 하지만 프레스토는 상업용 엔진이라서 프레스토를 사용하는 제품이 오페라 외에 NDS 브라우저, 노키아 770 정도밖에 없어, 프레스토의 발전을 크게 가로막고 있습니다. 오페라 위젯 엔진 역시 프레스토 엔진입니다.

 

 웹킷(WebKit)
웹킷은 오픈 소스 웹 브라우저 엔진이며, 웹킷의 시조는 KDE의 KHTML과 KJS입니다(이들은 모두 오픈 소스 코드로서 GPL 라이센스를 사용합니다). 따라서 웹킷 역시 오픈 소스입니다.
사파리 브라우저 외에도 맥의 옴니웹(OmniWeb), Shiira 등의 브라우저들이 웹페이지를 사용하고 있으며, 구글의 크롬 역시 웹킷입니다. 웹킷은 핸드폰에서 비교적 널리 사용하고 있는데, 구글 안드로이드, 애플 아이폰, 노키나 S60의 브라우저들이 전부 웹킷 엔진입니다. 또한 위젯 엔진에서도 그 사용율이 높아, 차이나 텔레콤의 BAE, 애플의 대쉬보드, 노키아 WRT가 전부 웹킷 엔진입니다.

Posted by Finebe
,

Amazing "증강현실"

Talks 2010. 3. 12. 11:05


어제 삼성경제연구소에서 괜찮은 자료가 업데이트 되었습니다.
그것은 증강현실에 관한 내용입니다.
 
증강현실이란 실제 환경에 가상사물을 통해 진짜처럼 보이게 하는 컴퓨터 그래픽 기법 가상현실입니다.
눈에 보이는 현실속에서 얻기 힘든 정보를 초점의 이동에 따라 알 수 있는 것입니다.
쉽게 말해서 '현실 속 더해진 정보'라고 정의할 수 있습니다. 
 보시는 바와 같이 요즘 스마트폰 어플리케이션도 '증강현실이 트렌트다'라는 말을 하는 거처럼 증강현실어플이 쏟아지고 있습니다. 
증강현실은 생활, 비지니스, 교육, 의료, 방송, 게임, 광고, 커뮤니케이션 등 수많은 분야에서 활약하고 더 발전하는 중입니다. 
스마트폰의 사용개체수(?)가 늘어날수록 증강현실의 비중도는 비례하여 커질 것이 분명합니다.
아쉽게도 제 스마트폰인 '옴니아2'에서는 전자나침반이 없기때문에 증강현실 어플이 나오지 못합니다.ㅠ

증강현실.. 좀 어려운 단어일 수 있습니다. 또 많은 이들은 아직 증강현실이라는 단어조차 모릅니다.
하지만 그 단어의 의미를 먼저 알기 전에 증강현실를 통해 'Amazing'를 외칠 것입니다

우리가 잘 알고 있는 증강현실의 한 사례가 있습니다. 대박천사님의 네이버 블로그에서 봤는데요. 공감가는더군요.
많은 분들이 아시겠지만 ㅋㅋ 바로 드래곤볼의 '스카우트'입니다.

손오공이나 손오반처럼 괴물들은 기의 크기를 통해 상대방을 측정하는데 비해 스카우트는 상대박의 전투력수치(정보)를 통해 눈으로 보여지기 때문에 상대방의 전투력을 더 정확하게 측정합니다.
 
그럼 왜 증강현실이 대두하였고 증강현실을 통해 부가가치창출하는 것이 무엇이 있을까??
 
자세한 부분은 삼성경제연구소의 자료를 참고하시기바랍니다.
http://www.seri.org/db/dbReptV.html?menu=db12&pubkey=db20100311001

또 생활에 적용된 증강현실을 동영상으로 보고 싶으시면 아래 링크를 참조하세요.
증강현실 기술, 어떤 응용분야가 있을까?

'Talks' 카테고리의 다른 글

필름리뷰  (0) 2018.08.22
QR코드의 매력  (1) 2010.08.18
5초 표현한 회사생활  (0) 2010.03.08
트위터의 힘 그리고 매력  (0) 2010.03.02
IT트렌드 2010  (0) 2010.02.05
Posted by Finebe
,


 

오호... 간결하군요.. 하지만 불쾌감을 줄 수도 있겠습니다.
동영상과 반대로 여러분은 모두 기분 좋은 하루되시길...

'Talks' 카테고리의 다른 글

QR코드의 매력  (1) 2010.08.18
Amazing "증강현실"  (0) 2010.03.12
트위터의 힘 그리고 매력  (0) 2010.03.02
IT트렌드 2010  (0) 2010.02.05
이미지에서 텍스트를 추출하는 OCR 방법들  (0) 2009.12.10
Posted by Finebe
,



Action Message Format 이라불리우는 방식을 사용하게되면 객체를 그대로 전달하고 받을수있다.

서버로부터 객체를 전달받은후에 인코딩과정을 거치게되면 완전한 형식의 데이터가 뽑혀나온다.

근데 왜 이런짓(?)을 하는가.

xml로 그냥 보내면 될것을 말이지.....

일단 xml은 보안이 되지 않는다. 사람의 눈으로 그대로 보이니 보안관련 내용부분을 암호화 인코딩 한다하여도 노출되는것은 마찮가지다.

하지만 amf방식은 프로토콜이 전용이므로 보이지 않는다. 포트는 80포트를그대로 쓰기때문에 거의 왠만한 방화벽은 통과할수있다.

그뿐아니라 데이터 량이 많을경우 이진데이터로 변환해서 전송하기에 상당한 효율을 가져온다. 이것을 이용하면 파일 전송,채팅,게임까지도

플래시에서 구현하는데 많은 잇점이 생긴다.

플래시 플레이어에 이미 이 기능이내장되어있다. 플래시 8에서는 단지 이기능을쓰기위해 별도의 컴포넌트를 받아 플래시를 업데이트 해서 써야했다.

AMF 방식은 플래시 응용프로그램과 원격 서버간의 효율적인 통신을 한다. amf는 원격 프로시져 호출을 압축된 이진 표현으로 인코딩하여 플래시 미디어서버(Flash Media Server)에서 현재 사용되고있는 프로토콜(http,rtmp) 프로토콜형식으로 변환해서 전송한다. 그형식은 액션스크립트 객체와 데이터의 값을 이진형식으로 직렬화시키기 때문에 텍스트인 xml보다 엄청난 양을 압축할수있다.

xml을 압축전송한다고생각하면된다. 이방법을 썼을때 효율적인것은 바로 트래픽관리이다.

플래시로 제대로된 게시판이나 , 기타 대중화 어플리케이션이 상용화 되지 않는이유중 하나도 xml의 양날의 검때문이다.

개인사이트가아닌 상용사이트에서 xml로 구성된 데이터를 주고받는다면 일반 html로 만드는 어플리케이션보다 수배는 더많은 트래픽과 서버의 부하를 주게된다. 그러므로 이를 해결하기위해 장비를 늘리므로해서 더 많은 비용발생이되며 이것은 운영자에게는 별로 매력적이지 않은 부분이다. amf를 사용하면 그부분을 많이 줄일수있다. amf는 플래시가 쓸수있는 최상급의 리아 기술중 하나이다.

 

amf의 규격>

amf는 amf0과 amf3가 현재 사용되고있다.

플래시 8까지와 as2.0 까지는 amf0 이 지원되고

as3.0부턴 amf3를 쓸수있다.

amf3는 플래시9와 플렉스2 부터 지원한다.

--------AMF3   에서 추가된 사항 -------

1.int , uint 객체를 정식으로 지원해서 정수로 제대로인식할수있게됨.

2.ByteArray,XML,IExternalizable 의 데이터 유형을 그대로 인식함.

3.ByteArray, NetConnection, NetStream, SharedObject, Socket 및 URLStream 클래스에는 ObjectEncoding 클래스로부터 상수가 할당되는 objectEncoding 속성이 포함되어 있는데 objectEncoding 속성의 비헤이비어는 객체에 따라 달라진다.

----------------------------------------------

flash.net.ObjectEncoding 클래스의 부모는 Object이다.

 

 

활용>

그렇다면 이걸 어떻게 어디서 누가 쓰는것일까...

지난시간강좌중  new URLStream();

부분이 있었다.

amf가 사용되는곳은 SharedObject, Socket ,NetConnection ,URLStream , IDataInput ,IExternalizable , ByteArray ,IDataOutput , NetStatusEvent ..... 상당히 많이 쓰이고있다.

var test:URLStream=new URLStream();

을 해서 생성된 인스턴스 test는 objectEncoding의 속성이 있다. 이녀석은

public function set objectEncoding(value:uint):void  의 형식으로 선언되어있고

들어가야될 value값은 flash.net.ObjectEncoding 클래스에 상수값으로 아래와같이 규정되어있다.

AMF0 : uint = 0
[static] ActionScript 1.0 및 2.0용 AMF를 사용하여 객체를 직렬화하도록 지정
AMF3 : uint = 3
[static] ActionScript 3.0용 AMF를 사용하여 객체를 직렬화하도록 지정

DEFAULT : uint = 3

[static] 현재 플레이어의 기본(최신) 형식을 지정합니다.

3일경우는 현재까지는 플래시플레이어 9이므로 amf3가 자동지정된다.

 

웁쓰 그럼 또 NetStream은 어따쓰는거지? 지난번에 파일 읽어낼때 한번 본적이 있으나 구체적으로 살펴보면 아래와같다.

 

NetStream 클래스는 NetConnection 객체에 의해 설정된 연결을 통해 Adobe의 Macromedia Flash Media Server 2 (현재 3 까지 나왔음)또는 Adobe Flex 등의 서버와 Flash Player 사이, 또는 로컬 파일 시스템과 Flash Player 사이에 단방향 스트리밍 연결을 연다.

양방향이 아닌 단방향스트리밍이다.  이녀석의 속성과 메서드들은 플래시미디어서버,플렉스 서버등에 사용되도록 만들어져있다.

위에서  AMF가 이들용으로 http,rtmp 프로토콜을 사용해서 데이터를 주고받는다고언급했을때 이 netstream클래스가 해당 프로토콜을 제어하는것으로 마찬가지로 amf도 해당된다.

 

또한가지 살펴볼 녀석은 NetConnection이다. 이녀석은 주로 NetStream과 함께쓰이는데 서버에 존재하는 명령을 실행할때쓴다.

이객체를 만든다음 connect()메소드를 실행하게되면 서버와 연결되고 call()명령으로 서버의 펑션을 직접 실행하게된다.

그결과값도 받아올수있다. 이런역할을 하기위해서는 플래시미디어서버가 있어야했다.

플래시 미디어 서버의 가격을 알아봤다면 미디어를 컨트롤하지 않고 그장점을 사용하기위해 그 가격이 너무 비싸다고 생각했을것이다.(재벌 3세는 제외)

하지만 그것을위해 php에서 amf 프로토콜을 지원하는 프로젝트가 오래전부터 있어왔다.

바로 amfphp 이다.

 

비디오만 없지 채팅,데이터등은 아주 충실히 작동해준다.

만일 비디오스트리밍까지도 지원했다면 (red5 가 현재 오픈소스이다) 값싼 php에서 소형 미디어써버들이 대량생산되었을것이다.

항상 느끼는거지만 오픈소스의 더딤은 어쩔수없다. 실험정신에 신기술은 더 빠르지만 안정성과 업데이트는 상용에 밀릴수밖에 없다.

국내에서 amfphp를 쓴 프로젝트는 극히드믈다.

필자는 홈노트라는 사이트에서 2007년에 만든 플래시가계부중 스케쥴부분은 이 amfphp로 구현했다.

하지만 얼마나 더 속도가 빠른지에 대한 장점의 정밀한 테스트는 해보지 못했다.

그리고 그럴정도로 데이터량이 많은 서버에서 과연 php를 쓸것인가 하는점도 의문이다.

하지만 우리 플래시 오타쿠들은 실험정신에 입각하여 한번쯤은 해보는것도 좋을것이다.


출처: http://cafe.naver.com/amfphpsamo.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=175

Posted by Finebe
,



안녕하세요. 지금은 Finebe시대입니다. 훗
 
제가 트위터를 시작한지 한 3주정도 되었는데요. 정확히 트위터에 적응하기까지 2일정도 걸렸습니다.
"RT, DM 이게 뭠미"하면서 시작했는데...
어느덧 이 트위터 없는 하루는 상상할 수 없습니다.
 
현재 제 트윗에 댓글을 다는  사람은 회사사람들을 제외하고 몇몇 없습니다. 하지만 굴하지 않습니다. 저를 follow(제 말을 듣는 사람들)하는 수십명의 사람들은 제 말을 듣거든(보거든)요.
 
이것이 트위터의 첫번째 힘 "단순함 속의 개방성"입니다. 짧은 글이지만 제가 쓴 글이 수초만에 수십명에게 보여지는 파급효과..  안 해본 사람은 모릅니다.
 
그 짧은 글에 제 차칸 트윗 친구들은 가끔 댓글을 달아줍니다.ㅠㅠ 좋은 글이면 RT를 달아 아는 사람들에게 전파시킵니다. RT(ReTweet)라고 하는 옮길 가치가 있다고 생각하는 글을 원문 그대로 올리는 트위터의 핵심기능으로서 RT 뒤의 글을 내가 아는 사람에게 권장한다는 뜻입니다.

 이러한 기능은 저의 아는 사람들에게 쭈욱쭈욱 퍼지고 또 저의 아는사람들의 아는사람들, 또 저의 아는사람들의 아는 사람들의 아는사람들.헉헉..ㅡ_ㅡ;




이렇게 다단계(피라미드)처럼. 그 피라미드가 꼬리에 꼬리를 물고 초거대한 피라미드가 형성되어 순식간에 수천 수만명의 사람들에게 글이 전파되는 초절정의 파급효과. 트위터의 두번째 힘 "초빠른 전파력"입니다
 
이것만 보더라도 트위터의 힘은 막강하다고 봅니다. 그 외의 많은 힘들은 몸소 체험을 통해 느껴보시기 바랍니다. 후후
 
 
그럼 진정한 트위터의 매력은 무엇일까요??
 
사람들은 왜 트위터를 하는 것일까요??
 
우리가 자주하는 네이트온, 싸이월드는 SNS지만 수직적인 면을 가지고 있습니다. 즉 자신들의 주변 인맥 생각등은 알 수 있으나 그 외 사람들에 대해 알고 싶다면 싸이월드 파도타기를 열심히 타야합니다.
 
하지만 이도 '일촌미공개'라는 난관에 부딪칩니다. OTL
 
훗훗...트위터는 다릅니다. 최강국가의 미쿡 대통령 오바마씨도, 최고부자 빌게이츠씨도, 우리의 간G남 MB씨도 한 명의 트위터에 불과합니다. 원하는 사람의 트위터에 접속해서 보시면 됩니다. 즉 트위터 안에서 만들어진 수평적인 관계라는 것이지요.
 
그냥 무작정 follow하면 되는 것입니다. 쌍방향적인 대화는 힘들더라도 그 사람들의 생각이나 말들을 듣고 댓글도 달 수 있으니 훗... 말 다했지요. 저는 지금 당장 빌게이츠씨에게 말 걸 수 있습니다.
 
"당신 돈 0.001%만 국제송금해달라"고.. 하지만 리댓글은 없겠죠 ㅋ
 
이렇게 모두가 평등하고 모두에게 기회가 주어지는 땅. 트위터. 자신이 좋아하고 원하는 사람들의 말들을 언제 어디서든 듣고 말할 수 있는 트위터.
 
그것이 트위터의 매력은 아닐까라고 생각합니다.
 
 

'Talks' 카테고리의 다른 글

Amazing "증강현실"  (0) 2010.03.12
5초 표현한 회사생활  (0) 2010.03.08
IT트렌드 2010  (0) 2010.02.05
이미지에서 텍스트를 추출하는 OCR 방법들  (0) 2009.12.10
원만한 인간관계를 위한 방법들  (3) 2009.06.08
Posted by Finebe
,