Posted
Filed under C#
1. Flash Player 설치

2. VS2005 도구상자(Toolbox) - 항목선택(Choose Items) - COM 구성요소(Components) - Shockwave Flash Object 추가

3. AxInterop.ShockwaveFlashObjects.dll 을 Flash 를 사용하는 프로젝트의 obj/Debug 폴더 안에 추가

4. 도구상자에 추가된 SFO(ShockwaveFlashObject)를 디자인 창으로 가져온다.

 

c# 코드===================

private void axShockwaveFlash1_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
        {
            //Flash 로부터 정보 받기
            XmlDocument XmlDoc = new XmlDocument();
            XmlDoc.LoadXml(e.request);

            XmlNodeList ArgumentList = XmlDoc.GetElementsByTagName("arguments");

            String XmlArguments = ArgumentList[0].InnerText;// +Environment.NewLine;
            String[] arg = XmlArguments.Split('|');

            if (arg[0] == "GetWaitList")
                MessageBox.Show("Success");


        }   public Form1()
        {
            InitializeComponent();
            this.axShockwaveFlash1.FlashCall +=
              new AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEventHandler(this.axShockwaveFlash1_FlashCall);

        }


        private void axShockwaveFlash1_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
        {
            //Flash 로부터 정보 받기
            XmlDocument XmlDoc = new XmlDocument();
            XmlDoc.LoadXml(e.request);

            XmlNodeList ArgumentList = XmlDoc.GetElementsByTagName("arguments");

            String XmlArguments = ArgumentList[0].InnerText;// +Environment.NewLine;
            String[] arg = XmlArguments.Split('|');

            if (arg[0] == "ButtonClick")
            {
                MessageBox.Show("ButtonClick Success");
               
            }
            else if (arg[0] == "ReceivedFlex")
                MessageBox.Show("ReceivedFlex Success");


        }

        private void sendToFlash(string value1, string value2)
        {
            string args;

            args = "<invoke name=\"receive\" returntype=\"xml\">";
            args += "<arguments>";
            args += "<string>" + value1 + "</string>";
            args += "<string>" + value2 + "</string>";
            args += "</arguments>";
            args += "</invoke>";

            //Call Flash Function

            this.axShockwaveFlash1.CallFunction(args);

        }

        private void button1_Click(object sender, EventArgs e)
        {
            sendToFlash("SendToFlex", "bb");
        }

    }


Flex 코드 ======================

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
 
 <mx:Script>
  <![CDATA[
  import flash.external.ExternalInterface;
  import flash.events.*;
  import flash.utils.*;
  import flash.events.TimerEvent;
  import mx.controls.Alert;
  import flash.display.*;
 
  private function initApp():void
  {   
   if(ExternalInterface.available)
   {
    ExternalInterface.addCallback("receive", receive);    
   }
   
  }
 
  private function gender():void
  {
   ExternalInterface.call("call", "ButtonClick|");
 
  } 
 
  private function receive(value1:String, value2:String):void
  {
   if(value1=="SendToFlex")
   {    
   
   // mx.controls.Alert.show("통신 불가");
    ExternalInterface.call("call", "ReceivedFlex|");
   
   }
   
  }
 
  ]]>
 </mx:Script>
 <mx:Button x="137.5" y="370" label="Button" width="202" height="111" click="gender();"/>
  <mx:Text text="육심원" width="238" height="114" fontSize="36" fontWeight="bold" fontFamily="Georgia" textAlign="center" x="119.5" y="290" id="Textbox1"/>
 
</mx:Application>


[출처] c# flash 연동|작성자

2009/07/17 19:14 2009/07/17 19:14
Posted
Filed under Action Script
var my_lv:LoadVars = new LoadVars();
my_lv.onLoad = function(success:Boolean) {
    if (success) {
    trace(this.toString());
    } else {
    trace("Error loading/parsing LoadVars.");
    }
};
my_lv.load(http://www.helpexamples.com/flash/params.txt);


//로컬경 뿐만 아니라 웹 경로 까지 가능
2009/07/17 19:14 2009/07/17 19:14
Posted
Filed under PHP

 $this_year=date(Y);  // 년
 $this_month = date(n);  //월
 $this_day = date(d); //일
 $today =$this_year.conv_num($this_month).conv_num($this_day);
 $timestamp = mktime(0,0,0,$this_month,$this_day,$this_year);
 $t_day=date(w,$timestamp);

 //오늘 날짜를 기준으로 일주일 날짜 지정
  $st_time =$t_day*60*60*24;
  $ed_time =(6-$t_day)*60*60*24;
 
  $st_year = date(Y,$timestamp-$st_time);
  $st_month = conv_num(date(n,$timestamp-$st_time));
  $st_day = date(d,$timestamp-$st_time);
 
 
     $ed_year = date(Y,$timestamp+$ed_time);
  $ed_month = conv_num(date(n,$timestamp+$ed_time));
  $ed_day = date(d,$timestamp+$ed_time);
    
  //시작 일
  $week_day_start=$st_year.$st_month.$st_day;
     //종료일
  $week_day_end=$ed_year.$ed_month.$ed_day;
 

 function conv_num($num){
  if($num<10){
   $num="0".$num;
  }
  return $num;
 }

2009/07/17 19:14 2009/07/17 19:14
Posted
Filed under Action Script

[출처]: http://adnaru.com/99 <-- 이덕님 블로그
지난번 "Flash Player 10 Feature&난상토론회에 놀러오세요"라는 글을 올리고 약 2주만인가요? 바로 어제 신촌의 모처에서 재미있게 행사를 잘 치루고 돌아왔습니다. 참여해주셨던 분들도 모두 잘 들어가셨나요? 히히

사실 일요일이고, 날씨도 추운만큼 2~3분정도 오실것으로 예상했는데, 예상보다 많은 분들께서 참석해 주셔서 감사했습니다 (__)
(다음번엔 정말 편한곳에서 모셔서, 재미난 이야기 나눠보아요~)

이번 Flash Player 10 Feature&난상토론회에서는, 참석자분들끼리 인맥을 쌓는시간(ice-breaking), Flash Player 10 및 Adobe RIA신기술에 알아보는시간, 그리고 재미난 난상토론까지 총 2시간여의 시간동안 진행되었습니다.

특히, 난상토론의 경우 재미있는 얘기들이 많이 나왔습니다. 이 다음글에서 바로 후끈한(!) 난상토론회의 현장을 보실 수 있습니다.

사용자 삽입 이미지

아쉽게도 참석하시지 못하신분(예비 순위도 있었습니다 -ㅅ-), 그리고 Adobe RIA기술에 관심이 많으신 분들을 위해, 당일 프리젠테이션 내용(저의 육성도 들어가있다능-_-!)을 함께 공개합니다.

다만, 행사 당일 신청하셨으면서도, 저에게 아무런 안내도 하시지 않고 오시지 않으셔서 저의 지갑사정을 피말리게 하셨던 분들은, 아래의 동영상을 보시지 마세요!!! (흥, 다 기억했어요. 이제부터 미워할거에요!)


아래는 예제입니다 : )
당일엔, 예제도 함께 보여드리면서 여기엔 어떤부분이 들어갔고 설명도 했는데,

아쉽게도 동영상엔 예제를 함께 담질 못했네요 ㅜㅜ
그날 오셨던 분들은 아래의 예제가 어떤 원리로 돌아가셨는지 이해하셨죠? +ㅁ+

3D Effects
스타워즈 엔딩영상

Dynamic Sound Generate
모스부호 생성기

Local-File Access
로컬 이미지 열기

Flash Text Engine
"Flash Player 10" 가지고 놀기

Adobe MAX New Featue Cocomo
라이브 낚서판

Adobe MAX New Feature Alchemy
C++코드, 실행예제


잇힝!
그럼 다음번엔 더 재미나고 멋진 행사로 찾아뵙도록 할게요 +ㅁ+ 하악하악

2009/07/17 19:13 2009/07/17 19:13
Posted
Filed under Action Script

윈도우 2000의 테스트서버에서는 잘돌아가던것이 갑지가 호스팅 2003서버로 이전했을때
동영상이 나오지 않았다.
이때 해결하는 방법

2003에서의 flv 확장자에대해서는 다음과 같이  셋팅을 해야 한다.

iis 관리자 열고,
서비스 중인 웹서버를 선택해
특정 폴더에서만 인식하게하려면
그 폴더를 찾아 선택하고
걍 사이트 전체에서 허용하려면
사이트를 선택하면 되고
오른클릭하고 HTTP 헤더 탭 선택
등록정보에서
그럼 젤 아래에 MIME 형식 이라고 있을거야
마임 형식 버튼 클릭하고
새형식 한 다음
확장명에 .flv
mime type 형식은 flv-application/octet-stream

2009/07/17 19:13 2009/07/17 19:13
Posted
Filed under C#
UNICODE와 한글 처리 BYTE
모든 문자를 유니코드로 처리하는 닷넷 프레임워크상에서
한글 문자열을 2바이트로 처리해서 원하는 바이트 길이만큼 자르는 방식이 필요하다.

[SAMPLE]
String line = "가나다라마";
char[] charData = new char[1024];
byte[] byteData = new byte[1024];
System.Text.Encoding myEncoding = System.Text.Encoding.GetEncoding("ks_c_5601-1987");

올바른
byteData = myEncoding.GetBytes(line); // 길이가 10 byte 생성
//byteData.GetLength(0) 결과는 10이다
2009/07/17 19:12 2009/07/17 19:12
Posted
Filed under Scorm
[출처] - http://www.word.pe.kr/ 

1. 콘텐츠 추출
패키지할 콘텐츠를 정리합니다.
보통 html 파일과 swf 파일, 그리고 여러 스크립트 파일이 여기에 해당할 겁니다.

간혹 fla파일과 같은 원본 파일을 배포할 콘텐츠에 넣으시는 분들이 있는데요..
용량도 커지고.. 소스도 유출되고.. 빼는 게 좋겠죠.. ^^

2. API 파일 선정
SCORM을 사용하려면 SCORM API를 삽입해야 합니다.
그러려면 사용할 API가 필요한데요.. 일반적으로 SCORM 콘텐츠에 포함된 APIWrapper.js 파일을 사용하시면 되는데요..
이럴 경우, 다음과 같은 loadPage, unloadPage를 추가적으로 구현해 줘야 하는 문제가 있습니다.

var exitPageStatus = false;

function loadPage()
{
      var result = doInitialize();
}
 

function unloadPage()
{
     if (exitPageStatus != true)
     {
        doTerminate();
     }
}

그래서 보통은 이것까지 감싼 Wrapper를 사용하는 것이 보편적입니다.
제가 작성한 MiniAPIWrapper.js 파일을 사용하시면 될 것 같습니다.
js 파일 하나지만 zip으로 묶어서 자료모음에 올려놓도록 하겠습니다.

필요에 따라 MiniAPIWrapper.js 파일의 하단 Mini Main Function을 변경해서 사용하시면 됩니다.

3. API 삽입
이제 SCORM API를 삽입해보도록 하겠습니다.
이 API는 자바스크립트로 되어 있기 때문에 반드시 기존 콘텐츠에 스크립트 오류가 있어서는 안됩니다.

간혹, flash 파일의 action script의 오류로 인해서 SCORM API 호출이 안되는 경우도 있었습니다.
꼼꼼히 확인하시기 바랍니다.
(인터넷 익스플로러의 경우 도구>인터넷옵션>고급>모든 스크립트 오류에 관련된 알림 표시를 체크해 두세요)

콘텐츠 HTML 상단에 다음과 같이 SCORM API를 포함합니다.
<script type="text/javascript" src="util/MiniAPIWrapper.js"></script>

MiniAPIWrapper.js 파일의 위치를 정확하게 표기하셔야 합니다.
이 위치를 잘못 설정해 놓고 안된다고 하시는 분들도 많더라구요 -.-

다음으로 HTML <body>태그에서 SCORM API를 호출합니다.
<body onLoad="loadPage()" onUnload="unloadPage()">

이걸로 콘텐츠에 API 삽입이 마무리 되었습니다. ^^ (쉽죠~~ 캬!!)

참! 여기서 주의할 사항이 있습니다.
콘텐츠가 iframe 구조로 되어 있는 경우, onUnload 이벤트가 호출되지 않는 경우가 종종 있었습니다.  
이때는 onUnload 대신에 onBeforeUnload 이벤트를 사용하면 되더라구요.. 꼭 기억해 두세요~~

여기서 API가 제대로 되었는지 확인하고 싶으시다면..
Test Suite를 이용해서 SCO 테스트를 해보시면 됩니다.

MiniAPIWrapper.js를 넣고 로컬에서 테스트해보면
"API를 초기화할 수 없습니다."라는 메시지가 나올 겁니다.

SCO로 사용할 모든 HTML에 위와 같은 작업을 해 주시면 됩니다.

여기서 잠깐
SCORM에는 Asset이라는 것이 존재합니다 .
이것 또한 HTML 페이지라고 볼 수도 있는데요.. 이것은 SCO와 달리 학습결과를 추적하지 않습니다.
그러므로 위와 같은 API 추가 작업이 필요없습니다.

외국의 SCORM 예제를 보면 이런 Asset을 많이 사용하고 있는 것을 알 수 있습니다.
모든 학습 페이지의 학습여부를 판단하지 않고 중요한 것만 체크하는 방식이지요..

하지만 국내 이러닝 프로젝트에서는 모든 페이지의 학습결과를 체크하기를 요청하는 것 같습니다.
실제로 이런 학습결과 데이터가 무의미하게 너무 많이 쌓여서 나중에 문제가 되는 경우도 있더라구요. -.-
(페이지 단위의 cmi data는 학습 당시에는 쓸모가 있을 것 같아도 나중에는 별 소용이 없는 것 같기도 합니다. -.-)

4. SCORM 패키징
이제는 SCORM 패키징을 할 차례입니다.
imsmanifest.xml 파일을 만드는 것이죠..

이 작업은 반드시 툴을 활용하시라고 하고 싶습니다. (물론 직접 XML을 타이핑하실 분은 없겠죠.. ^^)
국내에도 괜찮은 제품들이 많이 있으니.. 참고하시구요~
오픈소스인 Reload를 사용하셔도 될 겁니다.

어쨌든 방식들은 거의 비슷합니다.
1. 패키지 만들고
2. resource 등록하고
3. organization 하위에 item 등록하고 resource와 연결시키구..

(DUNET에 있을 때 만든 DUNET Scorm Editor에서는 Resource와 Item 등록을 한번에 처리하도록 구성했었죠..
대부분 에디터가 2, 3번 단계를 따로 작업해야 하더라구요 -.-)

5. 메타데이터 삽입
패키징까지 잘 되었다면 필요한 부분에 메타데이터를 삽입하시면 됩니다.
LOM을 이용하는 SCORM 메타데이터의 범위가 꽤 넓고 다양합니다.

그러나 제가 사용해 본 바로는 General의 title, description, keyword 정도 입력해서..
SCO 검색용 정도로 활용해 본게 전부입니다.

일단 검색 이외의 용도로 메타데이터를 활용할 일은 별로 없을 것 같기도 합니다.
뭐.. 나중에 필요하다고 하면 어쩔수 없겠지만요..

어쨋든 메타데이터는 꼭 필요한 것만 최소한으로 그리고 정확하게 넣으시구요~~

KERIS에서 KEM이라는 메타데이터를 만들었습니다.
LOM과 거의 유사한데요. 7차 교육과정을 추가한 항목입니다.

그래서 메타데이터 입력할 때, KEM을 사용하면 ADL의 Test Suite를 통과하지 못합니다.
이점도 참고하세요~~

6. 테스트
이제 테스트할 차례입니다.
SCORM 규격에 맞다면, SCORM 2004 3rd Edition Comformance Test Suite와 Sample RTE에서 잘 돌아가야 합니다.

간혹, 프로젝트하다 보면...
콘텐츠하고 솔루션하고 다투는 경우가 있습니다.
서로 안맞는 거죠.. -.-

그런데.. 같은 스펙을 보고 하는데 왜 안맞는지.. 쩝~~
콘텐츠에서는 Test Suite와 Sample RTE에서 돌아간다는 것만 보여주면 됩니다.
반대로 솔루션은 LMS Test Content Package가 잘 돌아간다는 것만 보여주면.. 되겠죠~~

그러면 둘이 서로 싸울일은 없을 겁니다. ~~

그럼.. 댓글 하나씩 부탁드릴께요..
스펨 때문에 회원만 정보를 입력할 수 있도록 했더니.. 사이트 접속 숫자는 변함이 없는데..
글을 쓰시는 분들이 너무 적네요.. -.-

어쨋든 좋은 하루 되세요~~~
2009/07/17 19:12 2009/07/17 19:12
Posted
Filed under 웹표준
XHTML은 XML어플리케이션의 한 종류이기 때문에 문서의 처음 부분에 XML선언을 기술한다ㅏ.

<?xml version="1.0" encoding="UTF-8"?>
<html>
     <head>
           문서의 기본정보
     </head>
     <body>
           문서의 본문
     </body>
</html>

버전 속송은 필수 속성이며 XHTML 버전이 아닌 xml 버전임으로 XHTML1.0 이든 XHTML1.1이든 상관없이 1.0 으로  지정한다.

한글이 깨질 경우 UTF-8  --> EUC-KR 지정 한다.
2009/07/17 19:11 2009/07/17 19:11
Posted
Filed under 웹표준
XHTML에는 여러 버전이 있음으로 이문서가 어떤 버전의 XHTML로 작성 되었다는 것을 명시 하기 위해서 xml 버전 선헌후 바로 문서형 선언을 하면 된다.

Xhtml에는 strict,Transitional, Frameset 이 있으며 각각 HTML4.01의 Strict, Transitional, Frameset을 이어 받는다. 그러나 XHTML 1.1버전에서 Transitional, Frameset 폐지 되고 Strict에 해당하는 것만 존재 함으로 Strict를 문서 형으로 선언 해야 한다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
     <head>
           문서의 기본정보
     </head>
     <body>
           문서의 본문
     </body>
</html>


2009/07/17 19:11 2009/07/17 19:11
Posted
Filed under 웹표준
네임스페이스는 xmlns 속성으로 지정 
XHTML에서는 "http://www.w3.org/1999/xhtml" 이 네임 스페이스로 부여 되어 있음

언어 코드는 xml:lang 속성으로 지정
한국어  : ko
영   어  : en
미   국  : en-us
프랑스  : fr
중   국  : zh

XHTML1.0에서는 하위 호환성을 고려하여 xml:lang 속성 같은 값을 지정 한다.
XHTML1.1에서는 lang속성을 인정하지 않기 때문에 xml:lang 속성만으로 문자코드를 지정한다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko" >
     <head>
           문서의 기본정보
     </head>
     <body>
           문서의 본문
     </body>
</html>

2009/07/17 19:11 2009/07/17 19:11