2008년 9월 17일 수요일

jboss 설정

 

# jboss설치
-http://labs.jboss.com/ 에서 최근버전을 받아서 압축을 푼다
-JBOSS_HOME/bin/run.bat 실행 후 http://localhost:8080/으로 확인한다.
-JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/root.war 이 경로가 디폴트로 보여진다.

# jboss deploy 폴더 설정
-JBOSS_HOME/server/default/conf/jboss-service.xml의 아래 예시와 같이 콤마(,)를 구분자로 하여 배포파일 또는 폴더를 추가한다.
-디폴트는 deploy/ 폴더이고 경로의 끝에 슬래쉬(/)를 붙이면 폴더로 인식한다.
-주의할 점은 jar, war, ear같은 파일뒤에 슬래쉬를 붙이면 deploy 되지 않지만 JBOSS_HOME/server/default/deploy폴더 속에 aaa.jar 과 같은 이름의 폴더는 deploy 가능하다.

      <attribute name="URLs">
        deploy/,
        file:///D:/aa/bbb/ccccejb.jar
      </attribute>
     
# jboss 오라클 드라이버 설정
-ojdbc14.zip를 JBOSS_HOME/server/default/lib 폴더에 복사
-JBOSS_HOME/docs/examples/jca/oracle-ds.xml을 JBOSS_HOME/server/default/deploy 폴더에 복사
-oracle-ds.xml를 아래와 같이 수정
  <local-tx-datasource>
    <jndi-name>oracle</jndi-name>
    <connection-url>jdbc:oracle:thin:@127.0.0.1:1521:sid</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <user-name>xxx</user-name>
    <password>yyy</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
      <metadata>
         <type-mapping>Oracle9i</type-mapping>
      </metadata>
  </local-tx-datasource>
 
-jboss를 restart하면 콘솔에서
[WrapperDataSourceService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=oracle' to JNDI name 'java:oracle'
메시지 확인 가능 
 
-WEB-INF/web.xml 수정
 <resource-ref>
  <res-ref-name>jdbc/oracle</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>
 
-WEB-INF/jboss-web.xml
 <resource-ref>
  <res-ref-name>jdbc/oracle</res-ref-name>
  <jndi-name>java:oracle</jndi-name>
 </resource-ref>
 
# 기타 라이브러리 추가
서비스시 필요한 라이브러리는 JBOSS_HOME/server/default/lib 폴더에 복사한다

# 서비스 루트 설정
WEB-INF/jboss-web.xml 아래 소스 추가 또는 수정
 <context-root>/</context-root>

2008년 9월 2일 화요일

데이터 추적 기회

Sharable Content Object Reference Model (SCORM) Run-Time Environment Data Model에는 SCO 실행시간 동안 학습 관리 시스템(LMS)에 있는 Sharable Content Objects (SCOs)를 추적할 수 있는 데이터 모델 요소 세트가 포함돼 있다. 이 데이터 모델 요소 세트는 상태, 점수, 상호작용, 목표 등의 항목을 추적할 때 필요하다. 본문에서는 상세 수준의 요소 설명을 다루기로 한다.
SCORM Run-Time Environment Data Model를 학습함으로써 프로젝트 팀은 SCORM 프로젝트가 다룰 수 있는 정확한 데이터를 추적할 수 있는 기회를 가질 수 있다. 이 정보를 통해 프로젝트 팀은 프로젝트의 선행 분석 단계에서 프로젝트 관계자들의 요구사항을 수집한다. 프로젝트 초기단계에서부터 데이터 추적의 요구사항을 감안해 커뮤니케이션하면 SCORM Run-Time Environment Data Model Element을 성공적으로 구현하는 데 충분한 시간을 투자할 수 있다.
아래의 표는 SCORM 을 준수한 콘텐츠를 추적할 수 있는 유형을 설명한다. 일부 데이터 모델 요소는 서로에게 영향을 주고, 또 다른 일부 데이터 모델 요소는 다른 요소와 함께 사용할 수도 있다. SCORM은 데이터를 추적하는 방법을 지정하는 반면, LMS가 데이터 결과를 렌더링하는 방법은 지정하지 않는다는 사실을 주목해야 한다. 따라서 프로젝트 팀이 SCORM 콘텐츠를 제공하는 타깃 LMS나 다중 LMS 의 기능을 완벽하게 이해하는 것이 매우 중요하다.
표 1: SCORM 2004 Run-Time Environment Version 1.3.1 Data Model Elements
Data Model Element 기능
Comments from Learner 학습자 텍스트를 포함하고 있다.
Comments from LMS 학습자가 사용할 코멘트 및 주석을 포함하고 있다.
Completion Status 학습자가 SCO를 완료했는지 표시한다.
Completion Threshold SCO를 비교할 수 있도록 학습자의 완료진행사항의 측정 값을 식별하여 SCO가 완벽하게 고려해야 하는지 결정한다.
Credit 학습자가 SCO에서 작업수행능력 점수를 획득하는지 표시한다.
Entry 학습자가 이전에 SCO에 접근한 적이 있는지 여부를 표시하는 정보가 포함되어 있다.
Exit 학습자가 어떤 방식으로, 그리고 왜 SCO를 빠져나왔는지 표시한다.
Interactions 측정 또는 평가를 목적으로 상호작용에 속하는 정보를 정의한다.
Launch Data 초기화에 필요한 사용되는 SCO 고유의 데이터를 제공한다.
Learner Id SCO 인스턴스가 새롭게 등장한 학습자를 인지한다.
Learner Name 학습자 이름을 표시한다.
Learner Preference 학습자의 SCO 사용과 관련된 기본 설정을 지정한다.
Location SCO의 위치를 표시한다.
Maximum Time Allowed 학습자 시도(learner attempt)에서 학습자가 SCO를 사용할 수 있는 시간을 표시한다.
Mode '브라우징(탐색중)', '리뷰(복습)' 및 '정상' 등 SCO가 학습자에게 제공하는 모드를 식별한다.
Objectives SCO와 관련된 학습 또는 작업수행 목표를 지정한다.
Progress Measure 학습자의 SCO 완료진행상황 측정을 체크한다.
Scaled Passing Score SCO의 조정 가능한 전달 점수를 체크한다.
Score 학습자의 SCO 점수를 체크한다.
Session Time 학습자가 SCO의 현재 학습자 세션에서 시간을 얼마나 썼는지 알려준다.
Success Status 학습자가 SCO를 마스터했는지 표시한다.
Suspend Data SCO와 학습자가 접근하거나 또는 상호작용한 결과로 SCO가 생성할 수 있는 정보를 제공한다.
Time Limit Action 최대 허용 시간이 초과될 경우, SCO가 무엇을 해야 할지 표시한다.
Total Time 현재 학습자 세션 이전에 학습자 시도에 누적돼 있된 학습자 세션의 시간을 합한 것을 표시한다.
Version SCORM이 구현중인 버전을 식별한다.
이 문서에서는 SCORM의 데이터 추적 기회에 대한 상세한 수준의 정보를 제공한다. SCORM 2004 Run-Time Environment에는 데이터 모델 요소를 구현하는 방법을 설명하는 Data Model에 대한 섹션이 포함되어 있다. ADL은 또한 SCORM Run-Time Environment Data Model Elements를 설명하는 SCORM 준수 예제를 제공한다. SCORM 2004 Data Model Content Example은 자세히 설명돼 있고, 개발자가 데이터 모델 요소 코딩을 연습해볼 수 있도록 응용프로그램 섹션도 제공한다.

 

Custom Inter-SCO Navigation

SCORM을 사용한 경험이 있다면 JavaScript가 LMS와 서로 값을 가져오고 설정하는데 중요한 역할을 한다는 사실을 알 수 있다. 과거에는 플래시를 섞어서 사용하는 경우 걱정이 앞섰을 것이다.
그러나 이제부터는 걱정하지 않아도 된다! 플래시 인터페이스에서 Inter-SCO 위치 를 확인해주는 요소를 보여주거나 숨기는 작업이 곧 가능해 질 것이기 때문이다.
이 본문에서 사용한 방법론은 다양한 응용프로그램에 그대로 적용하여 JavaScript의 변수를 알 수 있다. 단순히 플래시의 다음/뒤로 버튼을 바꾸는 작업을 말하는 것이 아니다. 이 예를 든 이유는 실행하기 가장 간단할 뿐더러, 내비게이션 요소의 적용은 SCORM 2004에서 새로 도입된 기능이기 때문이다.
flash_example.html, flash_example.fla, flash_actions.as, course_functions.js 파일을 참조한다.
기억해야 할 점은 여기서 설명하는 방법이 유일한 실행 방법은 아니라는 것이다. 이는 알려진 방법일 뿐이다. 같은 작업을 수행할 수 있는 더 나은 방법이 있을 것이며 이를 찾아내면 ADLNet.org(http://http://www.adlnet.org)를 통해 새로운 방법을 공유하도록 한다.
HTML 설정
예를 들어, SCO를 구성하는 파일인 HTML 페이지에 포함된 플래시 파일이 있다. APIWrapper.js와 course_functions.js를 호출해서 SCO가 LMS와 상호작용 할 수 있게 하려고 한다.
LMS에서 값을 가져오는데 JavaScript를 사용하고 "다음"이나 "뒤로" 버튼을 누를 경우, 이를 SCO에 전달한다. 이는 showPrevious와 showContinue 변수를 진행 함수인 renderPreviousButton()과 renderContinueButton()으로 환원된 값을 설정함으로써 가능하다.
이와 같은 내용은 flash_example.html의 섹션에서 확인할 수 있다.

<script type="text/javascript">
 var showPrevious;
 var showContinue;

 function init( )
 {
    initialize();

    // Ask the LMS if there is was preceding SCO
    // that was launched prior to
    // this SCO resulting in the need to render a previous button.
    showPrevious = renderPreviousButton();
    window.document.FlashObject.SetVariable("showPrevious", showPrevious);

   // Ask the LMS if there is a succeeding SCO to be launched after this
   // SCO resulting in the need to render a continue button.
   showContinue = renderContinueButton();
   window.document.FlashObject.SetVariable("showContinue", showContinue);
 }
</script>

init() 함수는 HTML 페이지가 로드될 때 호출된다. 실행되면 이 함수는 다음과 같은 작업을 수행한다.
1) SCO가 LMS에 통신 세션 초기화를 전송한다. 초기화가 성공하면 "true" 문자열이 리턴된다.
2) SCO는 사용자가 접근할 수 있는 이전 SCO나 Asset이 존재하는지 LMS에 묻는다.
존재하는 경우 "true" 문자열이 리턴된다.
3) "FlashObject"라는 플래시 무비에 변수가 설정되어 "showPrevious"라는 변수를 JavaScript 변수 값인
showPrevious로 설정한다.
4) SCO는 사용자가 접근할 수 있는 다음 SCO나 Asset이 존재하는지 LMS에 묻는다.
존재하는 경우 "true" 문자열이 리턴된다.
5) "FlashObject"라는 플래시 무비에 변수가 설정되어 "showContinue"라는 변수를 JavaScript 변수 값인
showContinue로 설정한다.
주: showPrevious와 showContinue의 JavaScript와 플래시 변수에 같은 이름을 사용할 필요는 없다. 변수 이름에 일관성을 기하기 위해서 같은 이름을 사용했다.
HTML 페이지가 시작되면 바로 init() 함수를 호출한다.
<body onload="javascript:init();" onunload="javascript:completedExit();">
앞에서와 같이 플래시 무비를 "FlashObject"라고 했는데 이를 위해서 OBJECT와 EMBED 태그의 ID 파라미터를 "FlashObject"와 같게 설정했다. 이는 다음과 같이 강조된다.
><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"  
     codebase="http://download.macromedia.com/pub/shockwave
     /cabs/flash/swflash.cab#version=6,0,0,0" width="600" height="400"
     id="FlashObject">
        <param name="movie" value="flash_example.swf">
        <param name="quality" value="high">
        <param name="bgcolor" value="#103C00">
        <param name="swliveconnect" value="true">
        <embed src="flash_example.swf" quality="high"
               width="600" height="400"
               id="FlashObject" align=""
               type="application/x-shockwave-flash"
               swliveconnect="true"
               pluginspage="http://www.macromedia.com/go/getflashplayer">
        </embed>
</object>
Flash와 JavaScript 의 "대화"
다음 코드는 flash_actions.as ActionScript 파일에서 나왔다. ActionScript 코드를 소스 플래시 파일(.fla)과 반드시 별도로 보관할 필요는 없다. 코드를 재사용하기 위해 편하게 사용하는 방법일 뿐이다.
// Initialize variables we'll use in our Flash movie(s)
var intervalID
var i

// Set an interval to "catch" variables from the LMS at the launch of the SCO
intervalID = setInterval( DoStuff, 500 );

// Create a function "DoStuff" to handle turning visibility on and/or off
// for our back and next buttons inside the Flash interface
function DoStuff ()
{
     // increment the variable i
     i++;
     if (i>10){
          // after 10 loops through this function, cancel it out.
         clearInterval(intervalID);
     }
     // if "showPrevious" comes in from the LMS as "false", turn the visibility off
     if (showPrevious == "false") {
          back_btn._visible = false;
     } else {
          back_btn._visible = true;
     }
    
     // if "showContinue" comes in from the LMS as “false”, turn the visibility off
     if (showContinue == "false") {
          next_btn._visible = false;
     } else {
          next_btn._visible = true;
     }
}

// assign the action for the back_btn
back_btn.onPress = function (){
     getURL ('javascript:goToPreviousSCO();');
}

// assign the action for the next_btn
next_btn.onPress = function (){
     getURL ('javascript:goToNextSCO();');
}
그렇다면 이제 ActionScript에서 할 일은 무엇인가? setInterval()을 이용해서 SCO 시작 이후에 설정된 변수를 알아 내는 것이다. 플래시 무비가 HTML 페이지에서 시작될 때 순서를 제어하지 않았기 때문에 이 플래시 콘텐츠가 renderPreviousButton(), renderContinueButton(), initialize()가 완료되기 전에 시작될 것인지 후에 시작될 것인지 알 수 없다.
이 방법이 변수를 JavaScript에서 플래시로 가져오는 가장 간단한 방법은 아니다. 지금은 문제가 되는 변수 값의 변화를 알기 위해 반복 실행을 하는 것이다. ActionScript내의 Object.watch()를 실행하는 방법이 더 좋다. 이 경우 가시적 이벤트 구동이 가능하다.
setVariable() [in JavaScript]와 setInterval/clearInterval [in ActionScript]를 결합하는 것도 좋다.
작동하는 코드가 모든 이론에 우선한다.
flash_example.fla를 보면 코드가 거의 없다. 사실 여기 샘플에서 보이는 유일한 코드는 수행 시에 actions.as 파일을 호출하는 #include뿐이다.
버튼 작동을 제대로 하기 위해 아래 그림처럼 다음, 뒤로 버튼에 인스턴스 이름을 부여했다.
정리
지금까지 우리가 무엇을 했는지 본 장에서 설명한 프로세스를 요약해 보겠다.
1) SCO는 시작할 때 초기화된다.
2)SCO는 선행하는 SCO가 있는지 뒤에 다른 SCO가 있는지 알아보기 위해 LMS에 요청한다.
3) 이러한 값은 JavaScript에 리턴되고 JavaScript는 정보 요청을 한다.
4) JavaScript는 HTML 페이지에서 플래시 무비에 이러한 변수의 값을 적는다.
HTML 페이지는 미리 규정된 간격으로 이러한 변수를 반복하여 찾는다.
5) 플래시가 이러한 이름/값 쌍을 잡아내면 이를 이용하여 "뒤로"와 "다음" 버튼이 보이도록 한다.
앞서 언급한 바와 같이 같은 종류의 작업을 수행할 수 있는 방법은 다양하다. 이 예에서는 HTML 페이지가 SCO의 초기화와 종료를 처리했지만 플래시가 이와 같은 작업을 수행하는 JavaScript를 호출할 수도 있다.
요점을 이해하는 것이 중요하다. SCO의 콘텐츠가 우선 플래시에 저장되면 완전히 로드된 후에는 플래시에서 초기화 호출을 하는 것이 더 좋다. 플래시가 호출을 할 경우에는 이 호출에 대한 결과로 리스너(Listener)를 만들 수 있고 플래시 내에 setInterval()이 있어야 할 필요가 없어진다.
이러한 제안이 오히려 작업하는 데 있어서 걸림돌로 작용해서는 안된다. 이를 언급한 이유는 Flash/SCORM 2004에서 문제가 되는 부분은 스스로 해결할 수 있도록 하기 위해서다. 앞에서 언급했다시피 Flash와 SCORM2004로 문제를 해결하는 방법은 매우 다양하다. 작은 설명이나마 시작하는데 도움이 되었으면 하는 바람이다.

 

차세대 브라우저 구글 크롬

차세대 브라우저 구글 크롬을 만나보세요!

날짜: 2008년 9월 2일 화요일

구글에는 "빨리 런칭하고 빨리 배우자" 라는 구글만의 격언이 있습니다. 사실 이 말은 저희 개발 엔지니어들에게만 해당이 되는 것이였는데, 이번 경우에는 저희에게도 해당이 되는군요. 다른 블로그 글에서 읽으신 분도 계시겠지만 저희가 발표하려던 오픈소스 브라우저인 구글 크롬 소개자료(카툰)가 예상보다 일찍 공개하게 되었습니다. 이제 모든 분들이 다알고 계시기 때문에 공식적으로 구글 크롬 소개자료(카툰형식)를 공개합니다. 구글은 100여개가 넘는 국가에서 구글 크롬 베타버전을 런칭할 예정입니다.

구글이 구글 크롬을 왜 런칭하는 걸까요?
저희는 저희의 노력이 사용자들에게 가치를 더할 수 있고, 더 나아가 웹의 혁신을 이끌어 낼수 있다고 확신하기 때문입니다.

저희 구글 직원들은 업무 상 인터넷 브라우저를 많이 사용합니다. 브라우저에서 검색도 하고, 채팅도 하고, 이메일도 보냅니다. 근무시간 외에는 다른 사람들과 마찬가지로 인터넷 쇼핑을 하기도 하고 인터넷 뱅킹을 이용하며, 뉴스를 검색합니다. 친구들과 온라인으로 네트워킹도 즐기기도 하죠. 이 모든 활동들이 브라우저에서 이루어집니다. 이렇듯 인터넷 사용시간은 점점 늘어나고 있으며 인터넷이 처음 탄생한 15년 전에는 상상조차 할 수 없었던 것이 가능해 진 것입니다. 인터넷에서 보내는 시간이 워낙 많다보니 최고의 요소만을 모아 구글이 직접 브라우저를 만든다면 어떤 브라우저가 탄생할까 저희는 진지하게 생각하게 되었습니다.

웹은 단순한 텍스트 페이지에서 복잡하고 쌍방향적인 애플리케이션으로 발전을 해왔습니다. 그럼 브라우저도 이에 발맞춰 변화해야 하지 않을까요? 우리에게 필요한 것은 단순한 브라우저가 아닌 웹페이지와 애플리케이션을 위한 새로운 플랫폼인 것입니다. 구글은 바로 그 플랫폼을 만들기로 결심했습니다.

생각이 현실이 되어 이제 새로운 오픈 소스 브라우저인 구글 크롬(Google Chrome) 베타 버전을 선보이게 되었습니다.

먼저 외적인 측면에서 구글 크롬의 브라우저 창은 깔끔하고 간결합니다. 인터넷 사용자들에게 브라우저는 중요한 것이 아닙니다. 웹을 구성하는 페이지, 사이트, 애플리케이션과 같은 중요한 것들을 실행하는 도구일 뿐입니다. 구글 크롬은 구글의 기본 홈페이지처럼 심플하고 빠릅니다. 방해 요소를 최소화하여 사용자가 원하는 곳으로 바로 데려다 줍니다.

내용적인 측면에서 구글 크롬은 오늘날의 복잡한 웹 애플리케이션을 좀더 원활하게 실행시킬 수 있는 기반을 갖추었습니다. 예를 들어, 각각의 탭은 서로 다른 "샌드박스"에서 독립적으로 운영되기 때문에 하나의 탭에서 에러가 발생해도 다른 탭은 영향을 받지 않습니다. 안전하지 않은 사이트에 대한 보안도 강화되었습니다. 또한 브라우저의 속도를 전면 향상시켰습니다. 마지막으로 기존 브라우저에서는 불가능한 차세대 웹 애플리케이션을 가능하게 하는 강력한 자바스크립트 엔진인 V8을 구현하였습니다.

하지만 이것은 시작일 뿐입니다. 구글 크롬은 아직 향상될 부분이 많이 있습니다. 가능한 빨리 여러분의 의견을 수렴하고 좀더 폭넓은 논의를 시작하기 위해 윈도우용 베타 버전을 우선 출시했습니다. 맥과 리룩스용 버전은 현재 개발 중에 있습니다. 구글 크롬은 앞으로 더 빠르고 더 강력해 질 것입니다.

구글은 오픈 소스 프로젝트로부터 많은 도움을 얻었고 그렇기 때문에 오픈 소스 프로젝트의 발전에 기여를 하고자 합니다. 구글 크롬은 애플의 웹킷과 모질라 파이어폭스 등 여러 브라우저 구성 요소를 적극 활용하여 만들어졌습니다. 그렇기 때문에 구글 크롬의 모든 코드는 공개되어 있습니다. 구글은 웹의 발전이라는 공동의 목표를 가지고 개발자 커뮤니티와 함께 하고자 합니다. 다양한 선택권과 혁신은 웹을 더욱 발전시킵니다. 구글 크롬은 사용자의 선택권을 넓혀줄 것이며 웹 발전에 기여할 것으로 기대됩니다.

이제 여러분의 몫입니다. 구글 크롬을 직접 테스트 해보십시오. 직접 사용해 보고 소중한 의견을 보내주시기 바랍니다.

내일부터 구글크롬을 다운받을 수 있습니다. 더 자세한 내용은 내일 또 발표하겠습니다.

작성자: 프로덕트 매니지먼트 부사장 선더 피카이, 엔지니어링 디렉터 리너스 업슨

-----------------------------------------------------------------------------------------------------
내일부터 받을수 있다네..한번 써봐야지..^^
http://googlekoreablog.blogspot.com/

2008년 9월 1일 월요일

CUBRID 개발자 및 관리자 메뉴얼

CUBRID 개발자 및 관리자 메뉴얼



SCORM Adopter 메뉴얼

SCORM Adopter 메뉴얼 (한국전자거래진흥원)

SCORM 2004 Workshop (Carnegie Mellon University)

SCORM 2004 Workshop (Carnegie Mellon University) 자료

SCORM 2004 개발자 가이드

SCORM 2004 개발자 가이드

SCORM API


function findAPI( win )
{
   while ( (win.API_1484_11 == null) &&
           (win.parent != null) &&
           (win.parent != win) )
   {
      findAPITries++;

      if ( findAPITries > 500 )
      {
         alert!( "Error finding API -- too deeply nested." );
         return null;
      }

      win = win.parent;
   }

   return win.API_1484_11;
}


위의 소스는 scorm 컨텐츠안에 들어 있는 js 파일의 필수 펑션이다. 이 펑션에서 보다시피 학습창에서 API_1484_11 이름의 object 를 찾는다. 이 오브젝트는 js 로 만들수도 있고 클래스로 만들수도 있고 다양하다.


그럼 학습창 프로그램은 어떻게 해야 하는가?


<script>

    // Constants
    SCORM_2004 = "V1p3";
    SCORM_12 = "V1p2";

    // FrameMgr is called from all frames
    var g_frameMgr = new FramesetManager;

    var g_scormVersion = "<%=ScormVersionHtml %>"; // Version of current session

    var API_1484_11 = null; // Name of RTE object for 2004 -- name is determined by SCORM.
    var API = null; // Name of RTE object for 1.2 -- name is determined by SCORM

    // Internal RTE object -- it's the same object as the api objects, just easier to reference.
    var g_API = g_frameMgr.GetRteApi(g_scormVersion, <%=RteRequired %>); 

    if (g_scormVersion == SCORM_2004)
    {
        API_1484_11 = g_API;
    }
    else
    {
        API  = g_API;
    }
    </script>