티스토리 툴바


블로그 이미지
비만짱구

태그목록

공지사항

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

SWFOBJECT.JS

2009/09/12 13:39 | Posted by 비만짱구

swf 파일을 웹 브라우저에 올릴때 "AC_OETags.js" 파일을 이용하여 Object 로 올리는 방법이 있다.


<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="AC_OETags.js" language="javascript"></script>
<script src="history/history.js" language="javascript"></script>
<style>
body { margin: 0px; overflow:hidden }
</style>
<script language="JavaScript" type="text/javascript">
<!--
var requiredMajorVersion = 9;
var requiredMinorVersion = 0;
var requiredRevision = 124;
// -->
</script>
</head>

<body scroll="no">
<script language="JavaScript" type="text/javascript">
<!--
var hasProductInstall = DetectFlashVer(6, 0, 65);
var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);

if ( hasProductInstall && !hasRequestedVersion ) {
 var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn";
 var MMredirectURL = window.location;
    document.title = document.title.slice(0, 47) + " - Flash Player Installation";
    var MMdoctitle = document.title;

 AC_FL_RunContent(
  "src", "playerProductInstall",
  "FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",
  "width", "100%",
  "height", "100%",
  "align", "middle",
  "id", "VersionSample",
  "quality", "high",
  "bgcolor", "#ffffff",
  "name", "VersionSample",
  "allowScriptAccess","sameDomain",
  "type", "application/x-shockwave-flash",
  "pluginspage", "http://www.adobe.com/go/getflashplayer"
 );
} else if (hasRequestedVersion) {
 // if we've detected an acceptable version
 // embed the Flash Content SWF when all tests are passed
 AC_FL_RunContent(
   "src", "VersionSample",
   "width", "100%",
   "height", "100%",
   "align", "middle",
   "id", "VersionSample",
   "quality", "high",
   "bgcolor", "#ffffff",
   "name", "VersionSample",
   "allowScriptAccess","sameDomain",
   "type", "application/x-shockwave-flash",
   "pluginspage", "http://www.adobe.com/go/getflashplayer"
 );
  } else {  // flash is too old or we can't detect the plugin
    var alternateContent = 'Alternate HTML content should be placed here. '
   + 'This content requires the Adobe Flash Player. '
    + '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';
    document.write(alternateContent);  // insert non-flash content
  }
// -->
</script>
<noscript>
   <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
   id="VersionSample" width="100%" height="100%"
   codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
   <param name="movie" value="VersionSample.swf" />
   <param name="quality" value="high" />
   <param name="bgcolor" value="#ffffff" />
   <param name="allowScriptAccess" value="sameDomain" />
   <embed src="VersionSample.swf" quality="high" bgcolor="#ffffff"
    width="100%" height="100%" name="VersionSample" align="middle"
    play="true"
    loop="false"
    quality="high"
    allowScriptAccess="sameDomain"
    type="application/x-shockwave-flash"
    pluginspage="http://www.adobe.com/go/getflashplayer">
   </embed>
 </object>
</noscript>
</body>
</html>


위의 방법이 AC_OETags.js 를 이용하는 방법인데. 소스가 길고, 변수에 값을 flashVar를 이용하여 할당한다.

두번째 방법은 SWFObecjt.js 를 이용하는 방법이다.


<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="swfobject.js" language="javascript"></script>
<script src="history/history.js" language="javascript"></script>
<style>
body { margin: 0px; overflow:hidden }
</style>
</head>

<body scroll="no">
<div id="flashcontent">
</div>
<script type="text/javascript">
  var so = new SWFObject('VersionSample.swf', 'sampleSwf', '550', '400', '7', '#000000');
  so.addParam("wmode", "opaque");
  so.write("flashcontent");
</script>

</body>
</html>


소스가 간결해져서 주로 두 번재 방법을 이용한다.

어플리케이션 버젼 관리

2009/09/12 10:18 | Posted by 비만짱구
과거에 MS계열의 visual basic 이나 C# 은 컴파일할 때 옵션에 버젼을 관리할 수 있었다.
exe 파일이나 cab 파일을 개발자나 사용자에게 배포하고 파일의 수정사항이 발생하게 되면 파일의 속성에 버젼정보를 파악하여 버젼을 업데이트하는 형태로 어플리케이션 버젼관리를 해왔다.

Flex 에서는 컴파일시 애플리케이션 자체에 대한 버전관리가 없다.
파일네임으로 버젼관리를 하자니 버젼이 올라갈때마다 소스 자체를 바꿔야 하는 무식함이 생기기 때문에 그래서 내가 주로 하는 방법은 크게 2가지의 경우다.

첫번째 방법은 컨텍스트 메뉴에 버젼을 기입하여 확인하는 방법 과 두번째 방법은 버젼을 호출하는 함수를 만들어 스크립트나 Flex에서 그 함수를 호출하여 리턴값으로 버전 정보를 얻어내는 방법 이다.

 아래 샘플에서 오른쪽 버튼을 클릭하면 버젼의 정보가 표시되는 것을 확인할 수 있다.
샘플 파일 보러 가기

versionNamespace.as 
package com
{
	internal namespace versionNamespace = "http://dream322.tistory.com/Version";
}
Version.as 
package com
{
	import com.*;
	
	public class Version
	{
		versionNamespace var appVERSION:String = "1.0.1";
		
		public function Version():void {
		}
		
		public function getVersion():String {
			return versionNamespace::appVERSION;
		}
	}
}
VersionSample.mxml

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" contextMenu="{cm}"
        creationComplete="init()">

    <mx:Script>
        <![CDATA[
         import com.Version;

            [Bindable] private var cm:ContextMenu;

            private function init():void {
             var a:Version = new Version();
             var temp:String = a.getVersion();
                var cmi:ContextMenuItem = new ContextMenuItem('Application Version : ' + temp, true);

                cm = new ContextMenu();
                cm.hideBuiltInItems();
                cm.customItems = [cmi];
            }

        ]]>
    </mx:Script>
</mx:Application>

 주로 첫번째 방법을 사용하는데 가끔 클라이언트가 컨텍스트 메뉴에서 빼달라는 예민한 사람이 있다. 그럴때는 번거롭고 무식한 두번째 방법으로 버젼 정보를 얻어낸다.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" contextMenu="{cm}"
        creationComplete="init()">

    <mx:Script>
        <![CDATA[
         import com.Version;

            private function init():void {
                 //getVersion 함수를 script 에서 호출 할 수 있도록 설정
                 ExternalInterface.addCallback('getVersion');
            }
   
             public function getVersion():void {
                 var a:Version = new Version();
                 var temp:String = a.getVersion();
                 // 자바 스크립트의 getVersion 함수를 호출하며 인수로 버전값을 할당
                 ExternalInterface.call('getVersion', temp);
             }
        ]]>
    </mx:Script>
</mx:Application>

혹 다른 방법이 있으신 분은 같이 공유했으면 합니다.

버전 관리 시스템 (subVersion)

2009/09/12 02:58 | Posted by 비만짱구
 1. subVersion 에서의 주요 용어 설명
  • 저장소 : 리포지토리(Repository)라고도 하며 모든 프로젝트의 프로그램 소스들은 이 저장소 안에 저장이 됩니다. 그리고 소스뿐만이 아니라 소스의 변경 사항도 모두 저장된다.  네트워크를 통해서 여러사람이 접근 할 수 있다.
  • 체크아웃 : 저장소에서 소스를 받아오는 것이다. 체크아웃을 한 소스를 보면 프로그램 소스가 아닌 다른 디렉토리와 파일들이 섞여 있는 것을 볼 수 있는데 이 디렉토리와 파일들은 버전 관리를 위한 파일들이므로 임의로 지우거나 변경하면 저장소와 연결이 되지 않으므로 삭제하지 않는다.
  • 커밋(Commit) : 체크아웃 한 소스를 수정, 파일 추가, 삭제 등을 한 뒤 저장소에 저장하여 갱신하는 것으로 커밋을 하면 CVS의 경우 수정한 파일의 리비전이 증가하고 SubVersion의 경우 전체 리비전이 1 증가하게 된다.
  • 업데이트(Update) : 업데이트를 하여 저장소에 있는 최신 버전의 소스를 가져온다. 물론 바뀐 부분만 가져오게 된다.
  • 리비전(Revision) : 소스 파일등을 수정하여 커밋하게 되면 일정한 규칙에 의해 숫자가 증가한다. 저장소에 저장된 각각의 파일 버전이라 할 수 있다. subVision의 경우 파일별로 리비전이 매겨지지 않고 한번 커밋 한 것으로 전체 리비전이 매겨지므로, 리비전을 보고 프로젝트 진행 상황을 알 수 있다.
  • 임포트(Import) : 아무것도 들어있지 않은 저장소에 맨 처음 소스를 넣는 작업
  • 익스포트(Export) : 체크아웃과는 달리 버전 관리 파일들을 뺀 순순한 소스 파일을 받아올 수 있다. 배포, 릴리즈 할 때 사용
  • 잠금(lock) : 파일을 잠그었을 경우 파일을 잠근 사용자만 수정을 해서 커밋을 할 수 있고 다른 사용자는 수정을 할 수 없으며 unlock 명령으로 파일의 잠금을 해체할 수 있다. 파일 잠금기능은 여러명이 개발을 하고 있을 경우 한 파일에서 작업이 너무 많아 모두 끝내지 못하고 중간 중간에 커밋만 해놓았을 경우 다른 사람이 그 파일을 수정해버리면 하던 작업이 엉망이 되어 버린다. 그래서 파일을 잠그어 작업이 끝날때까지 한 사람만 커밋을 할 수 있도록 하는 것이다.
  • Revert : 소스를 수정 중 되돌리는 명령이다. 커밋을 하기 전에만 되돌릴 수 있다. 원격 저장소의 적은 되돌릴 수 없다.
  • Brandch (나뭇가지) : 프로젝트 중 작은 분류로 나누어 개발 하거나 소스를 따로 분리하여 실험적인 코드를 작성할 경우에 사용한다. trunk의 내용을 Branches안에 새로운 이름으로 복사하여 사용하며 수정하다가 trunk에도 반영하고 싶다면 merge 명령을 사용하면 된다.
  • Tag : tags 디렉토리 안에는 일반적으로 릴리즈(발표)하는 버전별 디렉토리를 만들어 사용한다. 0.1 버전을 발표할 때 01버전의 순간을 tags 디렉토리에 복사하며 0.2가 되었을 때 tags아래 0.2 디렉토리로 복사한다. 이렇게 되면 각각의 버전별로 소스를 관리 할 수 있다. 저장소에는 실제로는 변경된 점만 복사하기 때문에 저장소의 용량이 소스코드의 크기만큼 배로 늘어나지는 않은다. 이후 Tag 에서 export 를 통해 해당 소스를 받아올 수 있다.

2. subVersion의 장점

  • 커밋단위가 파일이 아닌 체인지셋입니다. cvs에서라면 여러 개의 파일을 한꺼번에 커밋하더라도 각각의 파일마다 리비전이 별도로 붙습니다. 반면 subVersion 에서는 파일별 리비전이 없고 한번 커밋할 때마다 전체 변경 사항에 대해 리비전이 하나씩 증가합니다.
  • CVS에 비해 엄청나게 빠른 업데이트 / 브랜칭 / 태깅 시간. 한 예로 같은 100MB트리를 업데이트했더니 CVS보다 21배 빨랏습니다.
  • CVS와 매우 유사한 사용법. CVS 사용자라면 누구나 어려움없이 금방 배울 수 있습니다.
  • 파일 이름 변경, 이동, 디렉토리 버전 관리도 지원. CVS는 이것을 지원하지 않습니다.
  • 원자적 커밋. CVS에서는 여럿이 동시 커밋할 때 종종 충돌이 발생하는데 subVersion 에서는 더 이상 그런 일이 없습니다.
  • 양방향 데이터 전송으로 네트워크 소통량 최소화
  • 트리별, 파일별 접근 제어 리스트. 저장소 쓰기 접근을 가진 개발자라도 아무 소스나 수정하지 못하게 조절할 수 있습니다.
  • 저장소 / 프로젝트별 환경 설정 가능
  • 확장성을 염두에 둔 구조, 깔끔한 솟,
  • 커밋 통지 메일 스크립트 기본 제공. CSV에서라면 스크립트를 따로 구해서 써야 하는 번거로움이 있었는데, subVersion은 기본 제공 스크립트를 이용해서 훨씬 손쉽게 설정이 가능합니다.
이전 1 2 다음