'Launching xxx' has encountered a problem.


Error code: SIGNATURE_INVALID

Error message:

Command: /usr/bin/pkgcmd -i -q -t wgt -p "/opt/usr/apps/tmp/xxx.wgt"

Management: Check author certificates in Preferences > Tizen SDK > Secure Profiles > Profile items.




[해결 방법]

기기를 PC에 연결한 후 Tizen IDE의 Connection Explorer에 보면 기기가 뜨게 되는데

여기서 /Home/Developer certification-registration.xml이 없다면

오른쪽 버튼을 눌러서 certification-registration.xml을 Push해주면 됩니다.


※ 참고로 certification-registration.xml 이 아닌 다른 이름으로 파일을 Push하면 인식이 안되서 해결이 안되는 것으로 보입니다. 실제로 저도 certification-registraion(1).xml로 파일을 Push했을 때는 안되다가, certification-registraion.xml로 Push를 했더니 해결이 되었습니다.


Posted by 밍쫑
,

Cannot execute Java even if it was installed. Check environment variable or Java version(over 1.6) please.


현재 Oracle에서 제공하는 최신 JAVA 버젼은 8인데,

타이젠에서는 JAVA 6 이상버전부터 7까지만 지원을 하고 있기 때문에, 

JAVA 8을 까셨거나, JAVA 6 이하를 설치하신 경우 버전 6이상 8미만의 버전으로 깔아주세요.


JAVA 7을 추천합니다.

Posted by 밍쫑
,



2. Android Provider에 *.wgt 넣기


2.1. Wearable 프로젝트(Consumer)에서 Project > Clean 후, 프로젝트를 빌드 합니다.




2.2. Project Exlporer에서 생성된 *.wgt 파일을 export > fileSystem 으로 추출합니다.





2.3. Android 프로젝트(Provider)에서 asset / *.wgt 파일을 교체합니다.



2.4. Android 프로젝트 빌드 후 설치합니다.




※ 만약 App을 설치하였는데 "Failed to install the app" 문제 발생시

기기를 PC에 연결한 후 Tizen IDE의 Connection Explorer에 보면 기기가 뜨게 되는데

여기서 /Home/Developer에 certification-registration.xml이 없다면

오른쪽 버튼을 눌러서 certification-registration.xml을 Push해주면 됩니다.






Posted by 밍쫑
,



저도 처음 예제를 실행시킬 때, 계속 "앱을 설치하지 못하였습니다." 라는 에러가 계속 발생하는데, 어떻게 해결해야하는지 몰라서 당황했었습니다.


Getting Started 와 구글링 결과...


갤럭시 기어2에 직접 App을 설치하기 위해서는 복잡한 인증과 안드로이드 프로젝트에 Tizen 결과물을 담는 과정이 필요하다고 합니다.


1. 인증 과정


인증은 안드로이드와 타이젠 양쪽에서 동일한 인증키를 사용하는 것이 중요합니다.


1.1. 안드로이드에서 인증키(Keystore) 생성 및 사인하기


1.1.1. package Explorer(Window > Show View > Other > package Explorer) 에서 사인된 apk를 생성할 프로젝트를 선택한 후 오른쪽 버튼을 클릭합니다.



1.1.2. 팝업메뉴에서 Android Tools > Export Signed Application Package... 선택



1.1.3. export할 프로젝트를 선택합니다.



1.1.4. Keystore를 아직 생성하지 않았다면, 'Create new keystore'를 선택하여 새로 만들어 줍니다. 

- Location : 생성할 keystore가 저장 될 위치를 지정합니다.

- Password : keystore의 비밀번호를 입력합니다.

- Confirm : Password를 다시 한 번 입력합니다.



1.1.5. 키 생성을 위한 부가 정보를 입력합니다.

- Alias & Password : 키를 식별할 수 있는 적절한 값을 넣어줍니다.

- Validty (years) : 반드시 30년 이상의 값을 입력해야 합니다.



1.1.6. 사인된 apk가 생성될 디렉토리를 지정합니다.




결과물 : *.keystore 파일




1.2. Tizen IDE에서 인증키 생성


1.2.1. 디바이스(Gear, Gear2)를 PC에 연결합니다.

이 때, Gear2에서 환경설정 > Gear 정보 > USB 디버깅을 체크해주시고 연결해주세요.


1.2.2. Connection Explorer에서 연결한 디바이스를 오른쪽 클릭 후 Properties를 선택합니다.



1.2.3. Info에 보면 DUID를 메모장에 복사해 놓습니다.



1.2.4. Tizen IDE에서 상단 툴바에 (Import Android Keystore..) 클릭

- *.keystore파일을 import하고 request.xml파일을 생성합니다.

- DUID는 1.2.3.에서 복사해놓은 것을 Add하시면 됩니다.



tizen-wearable-sdk-data는 탐색기에서 숨겨진 파일 모두 보기를 통해서 확인할 수 있습니다.

결과물 : C:\tizen-wearable-sdk-data\keystore\android\keystore\android/certification_request.xml


1.2.5. certification_request.xml 파일을 gear2.sec@samsung.com 으로 보내면,

답변으로 certification_registration.xml파일을 보내줍니다.


결과물 : certification_registration.xml


1.2.6. 받은 파일을 타이젠 IDE 툴바에  (Register Certificate) 버튼을 눌러서 등록합니다.

이 과정을 거치면 author.p12와 distributor.p12가 생성됩니다.






1.2.7. Window > Preferences > Tizen SDK > Security Profiles.에서 

- 자동으로 defaultForAndroid (Active) 라고 생성되있을 수도 있습니다.

- Profiles 하나 Add하고 Set Active 클릭

- Author랑 Distributor에 각각 Edit 눌러서 위에 나온 결과물을 각각 추가





Posted by 밍쫑
,

처음 타이젠 프로젝트를 만들고 빌드하기 전에 꼭 해야할 일이 

바로 Security Profiles를 만드는 것입니다.


(Windows 7 기준)

Window > Preferences > Security Profiles 로 이동을 하면 Sign을 위한 프로필을 만드는 창이 나타납니다.


1. 오른쪽 위의 <Add>를 눌러서 사용할 프로필 이름을 입력합니다.




2.'Author Certificate'의 <Generate>를 눌러서 sign에 필요한 정보를 입력합니다.

(*)가 붙은 사항은 필수 입력 사항입니다.




3. 2번째 단계에서 입력사항이 끝나면 OK버튼을 누르게 되면 다음과 같은 창이 뜨게 되는데, 이 때 Yes를 누르면 sign 정보 파일 생성이 끝납니다. 이후 빌드를 하고 실행하면 에뮬레이터에서 문제없이 실행됩니다.


Posted by 밍쫑
,

[ 기본 준비 ]

  • Android와 관련된 모든 준비(Andoird SDK, Java 설치 등)는 되어 있어야 한다.
  • Eclipse 중심으로 Android SDK 설치가 되어 있어야하고, Android Studio가 설치되있어도 된다.
  • Java는 1.6이상의 버전이 설치 되어 있어야 한다.
  • Java와 Android SDK에 대한 Path 설정이 되어 있어야한다.
    ex)
    JAVA_HOME : C:\Program Files\Java\jdk1.7.0_45
    Path : C:\Program Files\nodejs\;C:\Program Files\Java\apache-ant-1.9.4\bin;C:\Users\YMJ\android-sdks\tools;C:\Users\YMJ\android-sdks\platform-tools


[ Install Node.js ]



Node.js를 http://nodejs.org/ 에서 다운로드 받아 PC 또는 Mac에 설치합니다.

설치하신 후 Mac은 “Terminal을, Window는 “Node.js command prompt관리자 권한으로 실행합니다.


[ Install ANT ]

ANT는 반드시 설치해야 됩니다.

그렇지 않으면 platform 설정 시 error가 발생할 수 있습니다.


1. Apache Ant(http://ant.apache.org/bindownload.cgi)에서 파일을 다운받습니다.

'Current Release of Ant' 아래에 있는 .zip archive를 받으면 됩니다.

2014.06.18 현재 'apache-1.9.4-bin.zip'이 최신버전입니다.



2. 적당한 위치에 압축을 풉니다.

ex)  C:\Program Files\Java\apache-ant-1.9.4


3. 환경 변수에 ANT의 bin 경로를 등록합니다. (각 폴더는 ';'으로 구분합니다.)

[제어판] - [시스템] - [고급 시스템 설정] - [고급 탭] - [환경변수]



Path : C:\Program Files\Java\apache-ant-1.9.4\bin



4. 커맨드(cmd) 라인에서 ant 를 입력하여, 잘 설치되었는지 확인해봅니다.

(ant -version : ant  설치 버전 확인)




[ Install git ]

[Error: Error fetching plugin: Error: "git" command line tool is not installed: make sure it is accessible on your PATH.] 라는 메세지가 나오는 경우 git이 설치 되지 않아서 보여지는 메세지이다.


이전 버전과 다르게 코드에서 이용하고자 하는 js API를 Git에서 선택적으로 추가해서 사용하는 구조이다.


1. 다음 홈페이지 ->(https://help.github.com/articles/set-up-git)에 들어가서 다운받습니다.



2. 다운 받은 파일을 설치합니다.

2.1. 설치 도중 다음과 같은 화면이 나타나는데, 여기서 2번째 선택사항을 눌러주세요.



 선택항목

설명 

Use Git Bash only

윈도우의 환경변수를 설정하지 않고 "Git Bash"툴 만을 사용
보통은 동작에 문제가 없다. 

Run Git from the Windows Command Prompt 

윈도우의 환경변수에 Git 환경변수를 설정한다.

Dos cmd창으로도 동작할 수 있게 한다. 

Run Git and include Unix tools from the Windows Command Prompt 

Dos Cmd로부터 Git및 Perl 등의 부속 unix 툴을 이용할 수 있도록 설정한다.

일반적으로 사용할 때에는 선택하지 마세요. 


2.2. 암호화 통신 설정

Git은 암호화 통신에 ssh를 이용하지만, SSH 클라이언트로서 PuTTy툴을 이용할 수도 있습니다. PuTTy를 이용하는 경우는 아래 그림에서 "Use PLink"를 선택하고, "PuTTy"에 포함되는 "PLink.exe"의 패스를 지정합니다.



3. "Git Bash" 프롬프트에서 버전을 확인 할 수 있습니다.

$ git --version




[ Install module for PhoneGap ]



> npm install -g cordova

> npm install -g phonegap

> npm install -g plugman

Node.js의 모듈로 cordova, phonegap, plugman을 설치합니다.

이는 해당 모듈을 이용해서 빌드하고 플랫폼을 추가하고 다양한 명령을 통해 보다 쉽게 개발 환경을 만들어줍니다.


[ Project Create ]

(프로젝트가 위치 할 디렉토리로 이동 후) 커맨드 창에서 새로운 프로젝트를 생성합니다.

> cd 디렉토리위치

> cordova create HelloWorld com.example.hello "hello"


생성 후, 디렉토리에 가보면 프로젝트가 생성된 것을 확인할 수 있습니다.



"hello" 프로젝트에 들어가보면 "platforms" 폴더가 비어 있는 것을 보실 수 있습니다.

이제 이 곳에 원하는 플랫폼(android platform)을 add 해줍니다.

(본인이 개발하고자 하는 플랫폼을 위와 같이 설치하면 해당 프로젝트의 생성이 완료됩니다.)

> cd hello

> cordova platform add android


설치가 완료되면, "platforms" 디렉토리에 android를 위한 프로젝트가 하나 add 된 것을 확인 할 수 있습니다.



이 후 Eclipse에서 Import('Existing Android Code Into Workspace')해서 사용하면 됩니다.


[ Plugin 설치 ]

프로그램에서 사용하고자 하는 플러그인을 추가한다.

3.0 이전버전까지는 기본 js파일에 모든 api가 내장되어 있었지만, 3.0부터는 필요한 것만 직접 추가해서 사용하는 방식이다.

> cordova plugin add <git-url>


(plugin url)

Basic device information :

$ cordova plugin add org.apache.cordova.device

Network Connection and Battery Events :

$ cordova plugin add org.apache.cordova.network-information
$ cordova plugin add org
.apache.cordova.battery-status


Accelerometer, compass, and geolocation :

$ cordova plugin add org.apache.cordova.device-motion
$ cordova plugin add org
.apache.cordova.device-orientation
$ cordova plugin add org
.apache.cordova.geolocation

Camera, Media playback and Capture :

$ cordova plugin add org.apache.cordova.camera
$ cordova plugin add org
.apache.cordova.media-capture
$ cordova plugin add org
.apache.cordova.media


Access files on device or network(File API) :

$ cordova plugin add org.apache.cordova.file
$ cordova plugin add org
.apache.cordova.file-transfer

Notifications via dialog box or vibration

$ cordova plugin add org.apache.cordova.dialogs
$ cordova plugin add org
.apache.cordova.vibrationc

Contacts

$ cordova plugin add org.apache.cordova.contacts

Globalization

$ cordova plugin add org.apache.cordova.globalization

Splash Screen

$ cordova plugin add org.apache.cordova.splashscreen

Open new browser windows (In-app browser) :

$ cordova plugin add org.apache.cordova.inappbrowser

Debug console

$ cordova plugin add org.apache.cordova.console


'IT' 카테고리의 다른 글

[JS] 전문가교육 2일차 - 오후  (0) 2014.05.25
[JS] 전문가교육 2일차 - 오전  (0) 2014.05.25
[JS] 전문가교육 1일차 - 오후  (0) 2014.05.24
[JS] 전문가교육 1일차 - 오전  (0) 2014.05.24
Posted by 밍쫑
,

HTML5 + CSS3 + HTML5 API

            구조       표현       동작(JavaScript)




객체지향 자바스크립트(con.)


13. call & apply (★★★중요)

call과 apply는 jQuery 같은 프레임워크에서 굉장히 많이 쓰인다.

  • this가 가리키는 객체를 변경시킴
  • Function에 정의돼 있음
  • func.call(thisObj, arg#1, arg#1, ... arg#n)
  • func.apply(thisObj, [arg#1, arg#1, ...arg#n])
    - 배열로 전달 가능
  • func()로 호출해야하지만 func.call(), func.apply()로 호출 가능
    - call(), apply() 메서드 인자는 func() 메서드 인자로 전달된다.
16. 상속
  • 프로토타입 멤버 상속
  • 상속 통합 구현
  • 멤버 확장
    - 기존 언어(Java)의 extend를 흉내 내는 기법
    - Object의 prototype에 추가해 놓고 사용
    모든 프로토타입은 Object의 prototype을 상속받는다. 따라서 Object의 prototype에 extend함수를 붙여주고 function으로 parent를 받고 for문에서 속성을 하나씩 빼와서 property에 저장을 하는데 속성의 갯수만큼 돈다. 근데 parent[property]를 현재 객체(this[property])에 저장하는 것이다.


18. 내장객체
  • Array
    var ar = [1,2,3,4,5];
    console.log(ar.length);    //5
    var data = ar.shift() //2,3,4,5
    var data2 = ar.unshift(0) //unshift는 할당문이 필요 0,1,2,3,4,5
    ar.unshift(30);
    console.log(Ar.length);    //5

    무엇을해도 ar은 변하지 않는다. 이런 것을 "Mutable"하다라고 한다.
    배열의 크기는 늘릴 수 없다. 왜냐하면 배열은 한번 선언할때 크기를 정하니까..
    Java의 경우 런타임 시간에 크기 선언을 한다. -> int[] a = new int[3];
    C의 경우에는 int a[3];이라고 선언을 하고 나중에 a = new int[5];라고하는 것은 방이 5개인 것을 새로 만든것이지 배열의 크기를 바꾼것이 아니다.
  • 정규표현식
  • JSON


19. 네임스페이스

  • 라이브러리의 독립성을 보장
  • 빈 객체를 하나 만들어준다.
    var People = {};




이벤트 프로그래밍

1. 이벤트와 이벤트 핸들러

  • 이벤트와 이벤트 핸들러 정의 및 종류
    - 이벤트(event)
    - 이벤트 핸들러(Event Handler)
      • 이벤트를 처리하는 기능
      • 이벤트 처리 루틴
      • HTML 문서에서 발생하는 이벤트는 onxxx 식으로 이벤트 핸들러 속성이 정의되어 있따.
        ex) 클릭 이벤트 : onclick
  • 이벤트 핸들링
    - HTML 태그의 속성으로 등록    //HTML태그와 이벤트 함수가 섞여서 비추천하는 방법
    ex) <input ........ onclick="handler()">
    - 요소 객체의 메서드로 등록
    ex) document.getElementById("options").onclick = function() { ...; }
  • 이벤트 핸들러
    - 함수의 인자로 event 객체가 전달됨, 함수 정의시 선언안해도 자동 전달됨
    - 이벤트 핸들러 코드에서 false를 반환하면 요소의 기본적인 액션을 취소시킨다.
      • event.preventDefault();와 같음

0123


event.html


Colored By Color Scripter

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
<!DOCTYPE html>
<html>
<head> <title>이벤트 예제</title>
    <script>
        window.onload = function() {
            //var pElement = document.querySelector("p");    처음 <p>만 선택
            var pElement = document.querySelector("p#one");    //<p> 중 id값이 one인 element만 반환
            pElement.onclick = function() {
                this.textContent = "감사합니다";
            }
            var pElement2 = document.querySelector("p#three");
            pElement2.onclick = function() {
                this.textContent = pElement.textContent;
            }
        }
    </script>
</head>
<body>
    <p id="one">여기를 클릭하세요 1</p>
    <p>여기를 클릭하세요 2</p>
    <p id="three">여기를 클릭하세요 3</p>
    <p>여기를 클릭하세요 4</p>
    <p>여기를 클릭하세요 5</p>
</body>
</html>



2. DOM Level 2 이벤트 핸들링

  • 이벤트 핸들링
    - elem.addEventListener(string type, Function handler, useCqpture);
    • type : 핸들링 하고 싶은 이벤트. DOM Level0 의 이벤트 핸들러에서 on을 빼면 된다.
    • handler : 이벤트가 발생했을 경우 호출될 이벤트 핸들링 함수. 인자로 이벤트 객체가 전달된다.
    • useCapture : true일 경우 이벤트 버블링 현상일 캡처링 단계에서만 호출되도록 한다. false(default)일 경우 타겟 단계와 버블링 단계에서 호출됨.


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
<!DOCTYPE html>
<html>
<head> <title>이벤트 예제</title>
    <script>
        window.onload = function() {
            //var pElement = document.querySelector("p");    처음 <p>만 선택
            var pElement = document.querySelector("p#one");    //<p> 중 id값이 one인 element만 반환
            pElement.onclick = function() {
                this.textContent = "감사합니다";
            }
            var pElement2 = document.querySelector("p#three");
            pElement2.onclick = function() {
                this.textContent = pElement.textContent;
            }
            var pElement3 = document.querySelector("p#two");
            pElement3.addEventListener("click"function() {
                this.textContent = "Hello~~";
            });
            
        }
    </script>
</head>
<body>
    <p id="one">여기를 클릭하세요 1</p>
    <p id="two">여기를 클릭하세요 2</p>
    <p id="three">여기를 클릭하세요 3</p>
    <p>여기를 클릭하세요 4</p>
    <p>여기를 클릭하세요 5</p>
</body>
</html>





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
32
33
34
<!DOCTYPE html>
<html>
<head> <title>이벤트 예제</title>
    <script>
        window.onload = function() {
            //var pElement = document.querySelector("p");    처음 <p>만 선택
            var pElement = document.querySelector("p#one");    //<p> 중 id값이 one인 element만 반환
            pElement.onclick = function() {
                this.textContent = "감사합니다";
            }
            var pElement2 = document.querySelector("p#three");
            pElement2.onclick = function() {
                this.textContent = pElement.textContent;
            }
            var pElement3 = document.querySelector("p#two");
            pElement3.addEventListener("click"function() {
                this.textContent = "Hello~~";
            });
            var pElement4 = document.querySelector("#four");
            pElement4.addEventListener("click"function() {
                alert(pElement3.textContent);
            });
            
        }
    </script>
</head>
<body>
    <p id="one">여기를 클릭하세요 1</p>
    <p id="two">여기를 클릭하세요 2</p>
    <p id="three">여기를 클릭하세요 3</p>
    <p id="four">여기를 클릭하세요 4</p>
    <p>여기를 클릭하세요 5</p>
</body>
</html>



3. 이벤트 캡처링/버블링 예

캡처링 : 바깥에서부터 안쪽으로 이벤트가 처리된다

버블링 : 안쪽에서부터 바깥으로 이벤트가 처리된다.





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
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script>
        window.onload = function() {
            var elements = document.querySelectorAll("div");
            for(var i=0; i<elements.length; i++) {
//function(event)에서 event생략해도 자동으로 event들어간다.
                elements[i].addEventListener("click"function(event) {
                    console.log(this.getAttribute("id"));
                    event.stopPropagation();
                }, true);
            };
        };
    </script>
</head>
<body>
    <div id="a">AAAAAA
        <div id="b">BBBBBB
            <div id="c">CCCCCC
            </div>
        </div>
    </div>
</body>
</html>



5.

onoffline : 오프라인이면 로컬에 저장된걸 읽는다.

ononline : 온라인이면 서버에 올린다

Posted by 밍쫑
,

JavaScript 주말 전문가 교육의 2일차이자 마지막 날이다.


어제 교육의 review

JavaScript의 특징

- type 지정 키워드가 없다

- 숫자, 문자열, 논리(true, false(0, "", null, false, undefined, NaN(숫자 타입이 값이 지정되지 않았을 경우)))

- lexical 특성 : 전역변수로 선언되있던 것을 다시 지역변수로 선언했는데, 그것을 초기화하기 전에 사용했을 경우 undefined가 나오는 것.

var a=10

function doit() {

console.log(a);

var a=20;

}


- 함수

생성자함수의 역할

메소드의 역할

- 메소드 : 어떤 동작이 일어나게끔 하는 (behavior)


- 함수의 인자와 파라미터 개수는 꼭 같지 않아도 된다. 인자값이 모자라면 undefined, 넘치면 버려진다.

argument.length : 전달되는 인자의 개수




객체지향 자바스크립트

1. 클래스(Class) 기반 객체지향

  • 클래스 기반 객체지향 언어 : C++, C#, JAVA 등
  • 클래스 기반 객체지향 언어의 특징
    • 객체와 클래스의 개념 명확
    • 캡슐화(Encapsulation)
      • 정보 은닉을 위해 제공한다. 속성은 private로 제한, public 메서드를 통해 멤버에 접근하도록 함
      • 저장되는 값의 검증, 조회하는 콜러의 권한 체크 등이 메서드 안에 작성 가능하기때문에 메서드 이용
    • 집합(Aggregation or Composition)
    • 상속(Inheritannce) : 부모의 멤버(변수, 메서드)를 자식 클래스에서 상속받을 수 있고, 코드 재사용성을 높인다.
    • 다형성(Polymorphism) : 상속관계가 있는 상태에서 사용 가능하고, 부모타입으로 선언하면 참조시 상속관계가 있는 모든 개체를 참조할 수 있다.

2. 프로토타입(prototype) 기반 객체지향

  • 객체를 만드는 방법
    1. new와 Object(최상위 객체) 생성자를 이용
      * Object(언어차원에서 최상위 객체) 와 window(만들어진 객체?)

      ex)
          person = new Object();
          person.name = "MJ";
          person.age = 30;

    2. 사용자 정의 생성자를 이용
      ex)
          function Person(name, age) {
              this.name = name;    //속성 추가
              this.age = age;
              this.setName = function(newName) {    //메서드 추가
                  this.name = newName;
              }
          }
          var friend = new Person("KilDong", 25);

    3. 객체 리터럴을 이용
      ex)
          var person = {name: "Sunsin", age:35};    //JSON형식

    2번째 방법은 계속 값이 바껴서 저장되야할 때 좋고
    3번째 방법은 한번 값을 저장하면 되는 것일 때 사용하기 좋다.
    2번째 방법과 3번째 방법은 꼭 알아두는게 좋다.

Object 생성자 함수를 이용한 객체 생성




사용자 정의 생성자를 이용한 객체 생성



객체 리터럴을 이용 (JSON형식)


* http://json.org/

★★★ JSON 표현 형식

object
{}
{ members }
members
pair
pair , members
pair
string : value
array
[]
[ elements ]
elements
value 
value , elements
value
string
number
object
array
true
false
null

string
""
" chars "
chars
char
char chars
char
any-Unicode-character-
    except-"-or-\-or-
    control-character
\"
\\
\/
\b
\f
\n
\r
\t
\u four-hex-digits
number
int
int frac
int exp
int frac exp
int
digit
digit1-9 digits 
- digit
- digit1-9 digits
frac
. digits
exp
e digits
digits
digit
digit digits
e
e
e+
e-
E
E+
E-


3. 내장(built-in) 객체

  • 자바스크립트 타입 체계의 특징
    • 타입 체크를 수행하지 않는다
    • 객체 초기 구조는 결정
      • 자바스크립트의 생성자는 생성되는 객체의 최초 구조를 결정
        위에 예제에서 Person을 생성하면서 객체의 최초 구조를 결정한다고 볼 수 있다.
    • 객체 구조 변경
      위에 예제 Person(name, age)에서 꼭 name과 age만 들어가는걸까? 아니다.
      Runtime에도 속성을 언제든지 바꿀 수 있다.

4. 객체 정의 및 생성

  1. new Object
    객체를 생성하기 위해 함수를 호출할 때 new 사용
    new 다음에 나오는 함수를 생성자(constructor)라고 한다.
    Object도 함수다.
  2. 객체 리터럴
    객체 생성 구문으로 많이 사용
    { } 를 이용
  3. 함수 이용
    클래스 기반 언어에서 클래스 정의
    자바스크립트에서 클래스(생성자 함수) 정의


5. 객체 멤버



함수 내에서 바로 선언된 것(var 변수)을 비공개 멤버라하고, 이는 함수 밖에서 접근할 수 없다.




8. prototype, constructor, instance

★★★★★★ 완전 중요 ★★★★★★★


생성자 함수를 위한 공간이 실행코드 블록과 생성자(함수)영역으로 나뉜다.

인스턴스들은 함수 안에 this. 으로 선언한 속성들이 저장이된다.

프로토타입멤버의 프로토타입 속성은 생성자.prototype.속성 = 값; 으로 구현을 하는데..


01234


JavaScript는 클래스가 없어서 상속을 못하기때문에 prototype을 이용하는 것이다.

prototype에 뭔가를 추가하면은 instance에서도 추가가 되는 것이다.

멤버는 변수가 될수도있고 메서드가 될수도있다.



+ : 외부에서 참조 가능

- : 외부에서 참조 불가능


공개변수 영역 : 생성자를 직접 추가하거나 제거할 수 있다.

값을 저장하는 영역 : 변수 스코프 영역(-), 프로토타입 객체(+ : 프로토타입객체.xx로 참조가능), 공개변수 영역(+ : 함수이름.xxx로 참조 가능) 

constructor : 각각 상대를 의미한다. 즉 Person의 각각 객체를 의미

ex) Person.prototype.constructor = Person자바스크립트는 변수와 메서드 구분이 없다. 즉 변수가 추가되면 메서드도 추가가 가능하다는 소리이다.


salary라는 변수는 프로토타입 객체에도 있지만 friend라는 인스턴스에도 존재한다.(프로토타입 객체의 비대칭성)





9. prototype

  • 모든 생성자가 가지고 있는 공개 속성
  • 생성자를 통해 참조 가능(인스턴스를 통해 참조 불가능)
    - Person.prototype (o) / p.prototype (x)
  • 인스턴스 "is a" prototype 객체
    - 프로토타입 객체에 포함된 모든 멤버를 해당 생성자로 생성된 인스턴스에서 접근할 수 있다.
        Person.prototype.job
        p.job
    - 프로토타입 객체는 메모리에 정의할 때 한번만 생성된다.
    -프로토타입 멤버는 인스턴스 별로 복사본이 존재하는 것이 아니라 해당 생성자에 하나만 존재하면서 그 생성자의 모든 인스턴스가 함께 공유한다.
  • 프로토타입 멤버의 비대칭


10. constructor

  • Person.prototype (o) / friend.prototype (x)
  • Person.prototype.constructor = Person (o) / Person. constructor (x)
  • friend.constructor = Person (o)
  • 인스턴스를 가지고 생성자함수를 참조할수 있구나!

11. 객체 생성 과정

  • 프로토 타입 실체는 Object
  • 자바에서 최상위 객체는 Object이다. 자식이 만들어지기 전에 부모가 만들어져야한다.
  • 그러니까 Object가 만들어지고 그 다음에 Person생성자 내에서 this.name="KilDong"이 Object 인스턴스가 된다. 
  • 자동으로 __proto__가 생성된다. 이 속성이 참조하는 것이 Person prototype 객체이다
  • 그리고 Object는 this를 반환하는 형태이다.
12. this
  • this는 해당 함수를 호출하는 객체
  • 함수 안에서 쓰여진다.
  • 원래 this를 쓰려면 function Person(name) { this.name = name; } 이렇게 쓰는데
    //this.name = name 을 하고 var mySon = new Person("aaa")를 하면 aaa를 저장할 곳이 없다는 문제가 생기지만
    Person.prototype.setNewName = function(newName) { this.name = newName; } 과 mySon.setNewName("bbb"); 를 보면은
    mySon.setNewName("bbb")가 실행되면서 my
  • Q. line 12 이후 (어디에든) var urSon = new Person("ddd"); Console.log(urSon.name); 추가하고 결과값은??

    이유는 urSon이라는 인스턴스가 생겨나긴하는데, 이전에 저장되어있던 프로토타입을 가지고 와서 출력하기 때문에 "ccc"가 나온다.


Posted by 밍쫑
,

1. 타이젠 공식 사이트(https://www.tizen.org/ko?langredirect=1)에 접속해서 등록을 눌러주세요.



2. 순서대로 입력 사항들을 입력하시고 REGISTER 버튼을 눌러주세요.

(*는 필수 입력 사항)


3. REGISTER이 완료가 되면 '이후의 안내를 당신의 이메일 주소로 보냈습니다.' 라는 메세지가 뜹니다. 이제 가입할 때 입력했던 이메일에 들어가서 이메일을 확인해봅니다.


4. 이메일을 확인해보고 나와있는 링크를 눌러주세요.


5. 그러면 밑에 사진처럼 이메일 주소가 인증이되고 비밀번호를 설정할 수 있는 로그인 버튼이 만들어집니다.


6. 들어가시면 아까 처음에 가입할때와는 다르게 비밀번호를 설정할 수 있는 칸이 생겨있습니다. 이를 작성하고  밑에 새로운 체크사항도 확인하고 확인을 눌러주세요.


7. '변경사항이 저장되었습니다.'라는 메세지가 뜨면 모든 가입 절차가 완료되었습니다.


Posted by 밍쫑
,

WebOS와 JavaScript

Webkit : 렌더링엔진(HTML을 파싱. 파싱하면 DOM 트리(비가시성 요소 포함) 만들어진다. - 렌더트리)

   (CSS - 파싱 - CSS룰 - 렌더트리)

XML

- DOM : Tree메모리

- SAX

v8 : Javascript 해석기


1. Open webOS Architecture Diagram


01


* Java 개발자가 꼭 알아야 할 프레임워크!

Spring, jQuery


2. Enyo

  • 모듈화와 캡슐화를 강조한 객체지향 자바스크립트 애플리케이션 프레임워크(기반, 자주사용하는 것들을 미리 만들어놓은 것.)
3. 자바스크립트 프레임워크
• Jindo Framework
– NHN에서 개발한 JavaScript Framework
– http://www.naver.com 에서 사용
– http://jindo.dev.naver.com/jindo_home/
– License : LGPL v2
• Jigu Framework
– Daum에서 개발한 JavaScript Framework
– http://www.daum.net 에서 사용
– Sizzle CSS Selector Engine을 사용함
– License : Daum Common License
• jQuery Framework
– 호환성을 갖춘 JavaScript Framework(write once, do more)
– http://www.jquery.com
– Sizzle CSS Selector Engine을 사용함
– License : MIT License
• Enyo Framework
– WebOS의 Web UI Framework
– http://enyojs.com
– License : Apache License, Version 2.0.
• Sencha Touch Framework
– http://sencha.com
– License : GPL v3




자바스크립트


1.자바스크립트 개요

  • ECMAScript 표준을 준수
  • 프로토타입 기반 객체지향 언어
  • html문서에 삽입되어, 브라우저의 해석기에 의해 인터프리터 방식으로 해석되어 실행이된다.
    *컴파일러와 인터프리터의 차이?
    - 컴파일러 : 컴파일하며 바이너리 파일이 생성된다. 바이너리 파일은 그 플랫폼에 의존하는 경향이 있다. ex) C, C++
    - 인터프리터 : 인터프리터만 있으면 어느 플랫폼에서든 실행이 가능하다. 단점은 그때그때 한줄씩 구문 검사를 하고, 속도가 느리다. ex) 자바스크립트
2. 자바스크립트 특징과 기능
  • 클래스를 정의할 수 없다.
  • 그러나 함수를 정의하고 함수로 객체를 생성할 수 있다.

3. 자바스크립트의 장점과 단점
  • 장점

- 작업속도가 빠르다

- 플랫폼 독립적

  • 단점

- 소스코드가 노출된다.

- 객체와 객체 함수가 적다.


4. 자바스크립트의 기본 구조

- <script>태그를 사용하여 HTML 문서에 코드 작성

HTML5인 경우 소스코드의 제일 상단에 <!DOCTYPE html>이 붙어있다.

HTML5인 경우 type없이 <script> ... </script>만 써도된다.


> document.write("<h2>안녕하세요</h2>"); 


document는 문서 하나를 말한다.

document.write는 브라우저 화면에 그리는 것이 아니라 브라우저 화면에 무엇인가를 나타내기 위한 출력이다.

alert("Hello")는 알림창을 띄우는 건데, 이 alert앞에는 window가 생략되있는 것이다. 

window는 최상위 객체이기때문에 생략 가능하다.

그래서 window.alert("Hello")이지만 alert("Hello")라고 쓸 수 있는 것이다.


5. 자바스크립트의 실행 위치

  1. <head> 태그 영역에 배치
  2. <body> 태그 영역에 배치
  3. 자바스크립트를 외부 파일로 사용되는 경우
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
    <title>문서의 제목을 입력합니다.</title>
</head>
 
<body>
    <!-- 브라우저 화면에 보여지는 내용입니다. -->
    <div>안녕하세요</div>
    <script>
        var myDiv = document.querySelector("div"); <!-- div라는 태그를 찾아서 DOM객체 반환 -->
        myDiv.innerHTML = "반갑습니다";
    </script>
</body>
</html>
<test1.html>

* var를 쓰지않으면 전역변수가 된다.
* <script>가 <head>부분에 있었으면 결과화면은 반갑습니다가 아닌 안녕하세요가 나왔을 것이다.
    왜냐하면 div가 DOM태그에 입력되기 이전에 script가 전부 실행 되게 되기때문에 myDiv가 null이 된다.
    따라서 <script>를 <body>의 마지막에 넣어준다.

* 다른 방식
<test2.html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
    <title>문서의 제목을 입력합니다.</title>
    <script>
    function init() {
        var myDiv = document.querySelector("div");
        myDiv.innerHTML = "반갑습니다";
    }
    </script>
</head>
 
<body onload="init();">
    <!-- 브라우저 화면에 보여지는 내용입니다. -->
    <div>안녕하세요</div>
</body>
</html>



*중요한 또 다른 방식

<test3.html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
    <title>문서의 제목을 입력합니다.</title>
    <script src="default.js" defer> 
    
    </script>
</head>
 
<body>
    <!-- 브라우저 화면에 보여지는 내용입니다. -->
    <div>안녕하세요</div>
</body>
</html>


<default.js>

1
2
3
4
5
function init() {
    var myDiv = document.querySelector("div"); <!-- div라는 태그를 찾아서 DOM객체 반환 -->
    myDiv.innerHTML = "반갑습니다";
}
init();

<!-- defer : HTML문서를 다 실행한 후에 <script>실행 -->

<!-- HTML5의 경우. <async>의 경우 <script>다 다운받으면 바로 worker(백그라운드에서 돌아간다)를 실행시킨다. -->


6. 자바스크립트의 기본 문법

- 자바스크립트 구문

- 문장 끝에 세미콜론(;)을 입력한다.

- 자바스크립트 파일은 공백과 엔터를 지우고, 변수 이름도 a, b로 바꾸는 packing을 해서 암호화한다.

- 자바스크립트 주석

- // : 한 줄 주석 처리

- /* ~ */ : 한 줄 이상의 주석 처리

- 변수 선언

- var 키워드 이용

- var 없이 변수 사용 가능하지만 그러면 전역변수(최상위 객체의 멤버)가 됨

- 변수의 스코프(scope)는 함수 단위임


7. 데이터 타입

  • Primitive data type : 숫자(isFinite(), isNaN()), 문자열, 불린 타입(비교 결과가 0, null, "", false, undefined, NaN으로 판단되면 false,나머진 true), undefined, null
  • Reference data type : 객체, 배열, 함수, 기타
  • 객체
    - 자바스크립트에서 객체는 모든것을 의미한다. (문자열, 숫자, 배열, 함수 등)
    - 자바스크립트는 내장 객체와 사용자 정의 객체가 있다.

8. 연산자

> a=8;
   b=20;
   c=0;
   d=a&&b&&c;
   console.log(d);

0


> a=8;
   b=20;
   c=0;
   d=a||b||c;
   console.log(d);

8


9. 제어문

  • for/in 문
    - 사용법
        for (변수 in 객체) {
            //실행 코드 블록
        }
    - 객체의 멤버에 접근하기 위해[]사용 가능
    - 사용자가 정의한 속성에만 접근 가능하지만, Object 객체에 원래 정의된 속성에는 접근할 수 없다.
  • 반복문 안에서 변수 선언시 var 변수로 선언하지 않으면 전역변수가된다. (함수 밖에서 참조 가능)
prompt 창으로 두 수를 입력받은 후, 그 두 수를 더한 값을 출력하시오.
> var first = prompt("첫 번째 수를 입력하세요");
   var second = prompt("두 번째 수를 입력하세요");
   console.log(parseInt(first) + parseInt(second));
   console.log(first + second);


수를 입력받아 해당하는 구구단을 출력하세요.

> var dan = prompt("단을 입력하세요");

   dan = parseInt(dan);

   if(!isNaN(dan)) {

for(var i=1; i<=9; i++) {

console.log(i + "*" + dan + "=" + (i*dan));

}

    }else {

console.log("잘못된 입력입니다");

    }


10. 예외 처리
  • try/catch/finally
    -사용법
        try {
            //실행 코드를 포함
        } catch(error) {
            //예외가 발생했을 경우 처리할 코드
        } finally {
            //항상 실행되는 코드 포함
        }
  • throw

원인이 있는 곳에 try catch

원인이 발생하는 곳에서 throw

입력값 : 0 / 출력값 : Infinity


예제)

삼촌(caller)이 조카(callee)에게 500원을 주고 케이크를 사오라고 한다면 케이크를 못 사온 조카의 잘못일까? 삼촌의 잘못일까? 당연히 500원을 준 삼촌이 잘못이다! 고로 삼촌을 예외처리해주자!

* el이 null값이 들어있다는 error를 잡아준다.

* 밑에 경우가 올바른 경우


*위의 경우보다 오류 메세지를 더 알아보기 쉽게 한 코드(최종 코드)


11. 함수

  • 기본 개념
    • 함수의 정의
      - 예약어 'function'으로 시작
      - 익명함수 : 자기가 자기의 함수를 바로 호출해서 사용하는 것 (제일 밑에 소스코드)
  • 함수의 역할
    - 호출 가능한 루틴으로서의 함수 (method)
    - 값으로서의 함수 (method)
    - 다른 인스턴스를 생성할 수 있는 요소. 객체 타입으로서의 함수 (생성자함수)
  • 함수와 변수 스코프
    렉시컬(lexical, 구문) 특성 : 코드 그대로의 환경을 기준으로 정의한 변수 스코프에서 변수의 검색이 일어난다.
        함수 밖에서 선언된 전역변수를 함수 안에서 초기화 하지 않고 참조하면 undefined

    전역변수를 지역변수로 다시 선언할 때에는 반드시 초기화를 해줘야한다. 그렇지 않으면 undefined!
  • 메모리구조(★★★)
    실행코드블록에서는 변수 스코프를 참조할수 있기때문에 붙여놓았다.
    변수 스코프에서는 prototype이라는 속성을 제공하는데, 이 것을 이용하면 프로토타입의 객체를 반환받을 수 있다.
    프로토타입 객체의 constructor을 이용하면 원래 함수 객체로 돌아갈 수 있다.
    변수가 저장되는 곳은 : 변수 스코프, 프로토타입 객체, 공개변수영역
  • 함수 정의 방법
    - 기본 방법
    function add(x, y) {
        return x+y;
    }
    - 함수 리터럴 사용 (가장 많이 사용)
    var add = function(x, y) {
        return x+y;
    }
    - function 생성자 사용(맨 마지막 인자가 실행코드이고, 나머지는 함수의 인자이다.)
    var add = Function("x", "y", "return x+y");
  • 함수 호출과 함수 인자
    - 함수 호출시에 인자의 수는 정의시 매개변수의 수와 일치하지 않아도 됨
    인자보다 부족하면 undefined(or NaN), 인자보다 많으면 버려진다.
  • arguments
    - 함수 인자로 전달되는 데이터를 가진 객체, Object 타입
    - arguments.callee : 익명함수(anonymous function)로 재귀함수를 만들때
    - arguments.length : 전달되는 인자의 개수를 알 수 있다.
  • 자바스크립트 클로저
    - 내부 함수를 반환값으로 사용하는 특수한 함수
    - 클로저를 이용하면 독립된 변수 공간을 가진 인스턴스를 반환한다.
    function outer() {
        var x=0;
        return function() {
            return ++x;
        }
    }
    var f = outer();
    var g = outer();
    f(); //1
    f(); //2
    g(); //1
    g(); //2
    outer()(); //1
    outer()(); //1
    -> 지역변수값이 정적(static)변수가 되게 만들어준다.



숙제!!

17개의 숫자 더하는 프로그램을 짜보세요.

* for문 조건식에서 n=arguments.length라고 준 이유는 메모리 공간을 하나 더 차지하기는 하지만 for문을 돌면서 항상 계산(i<arguments.length)할 필요가 없기 때문이다.


Posted by 밍쫑
,