2017년 2월 19일 일요일

공부

last writed  : 2017. 02. 19

병행제어 기법의 종류
 - 로킹(Locking) : 한 트랜잭션이 어떤 데이터에 대해서 액세스하는 동안 다른 트랜잭션 역시 이 데이터에 접근하기 위해서는 lock을 소유하고 있어야만 액세스할 수 있도록 하는 방법
   * 주요 데이터에 대한 액세스를 상호배타적으로 동작하게 만듬
   * 로크를 소유하고 해제하는 규칙을 정하여 동시에 여러 트랜잭션이 하나의 데이터를 갱신하는 문제를 해결


- 로킹 단위(Locking Granularity) : 병행제어에서 한번에 로킹할 수 있는 단위
   * DB, 파일, 레코드, 필드 등
   * 작을수록 병행수준은 뛰어나지만 DB 전체를 수많은 작은 단위로 나누어서 관리-> 관리할 로크 수가 많아짐 -> 관리가 어렵다. => 로킹 오버헤드가 증가한다,
   * 클수록 병행수준은 낮아지지만 더 큰단위를 묶어 관리 -> 관리할 로크가 적다 -> 관리가 쉽다. => 데이터베이스 공유도가 감소한다.


- 로크의 종류
   * 공유 로크(S, Shared)
   * 배타 로크(X, Exclusive)
   * 의도 로크(I, Intention)
   * 의도 공유 로크(IS, Intention-Shared)
   * 배타 의도 로크(IX, Intention-Exclusive)
   * 공유 의도 독점 로크(SIX, Shared-Intention-Exclusive)
   * 공유 형태로 로킹을 하면, 읽기 권한은 가지지만 쓰기 권한은 갖지 못한다. 동시에 여러 트랜잭션이 해당 로크를 획득하여 데이터를 읽어들일 수 있다.
   * 독점 형태(배타)로 로킹을 하면, 읽기와 쓰기 권한을 모두 갖게된다. 또한, 하나의 트랜잭션이 독점 로크를 획득한 상태이면 다른 트랜잭션은 해당 데이터에 대한 접근이 불가능하게 된다.


- 2단계 로킹 규약 : 각 트랜잭션의 로크 요청과 해제 요청을 2단계로 실시한다. 직렬성을 보장하는 대표적인 로킹 규약이지만. 교착상태에 대한 예방은 불가능하게 된다.
   * 요청 단계(Growing Phase) : 확장 단계로, 트랜잭션은 로크 획득만 가능하며, unlock은 수행할 수 없는 상태
   * 반납 단계(Shrinking Phase) : 축소 단계로, 트랜잭션은 unlock만 수행 가능하며, 로크를 획득할 수 없는 상태


- 타임 스탬프 순서(Time Stamp Ordering) : 직렬성 보장을 위해, DBMS가 트랜잭션의 처리 순서를 미리 선택하는 기법
   * 트랜잭션이 시스템에 들어오면, 들어온 순서대로 시간표(Time Stamp)를 부여하여, 부여도니 순서에 따라 트랜잭션 작업을 실행하게 된다.
   * 타임 스탬프를 사용하면 로크를 사용하지 않으며, 따라서 교착상태가 발생하지 않는다.


- 최적 병행수행(검증 기법, 확인기법, 낙관적 기법)
   * 병행 수행하려는 트랜잭션의 대부부분이 읽기작업만을 수행하는 트랜잭션이라면, 특별히 병행제어 기법을 사용하지 않더라도 트랜잭션간 충돌이 일어날 가능성이 적다
   * 최적 병행수행 기법은 이러한 특성을 이용한 것으로, 트랜잭션이 수행되고 있는 동안에는 어떠한 검사도 하지않으며, 갱신작업이 발생한 이후로 아래의 3가지 단계를 수행한다.
       1. 읽기 단계(Read) : 트랜잭션이 DB로부터 데이터를 읽을 수는 있지만, 갱신 작업은 트랜잭션의 작업공간에 유지도괴 있는 데이터 항목들의 지여 사본에 대해서만 적용된다.      
       2. 검증 단계(Validation) : 트랜잭션 수행의 마지막 단계에서, 갱신된 내용들이 DB에 반영되더라도 직렬성이 보장된다는 것을 확인하기 위한 검증 작업을 수행
       3. 쓰기 단계(Write) : 검증 단계가 성공하면 트랜잭션의 갱신된 데이터들이 DB에 반영되며, 검증 단계가 실패하였다면 갱신된 내용들을 폐끼하고 트랜잭션을 재시작한다.

- 다중 버전기법(Multiversion concerrency control) : 타임 스탠프의 개념을 이용한 기법으로 타임 스탬프 기법이 트랜잭션의 시간 순서를 관리했다면, 다중 버전 기법은 갱신될 때마다 버전을 부여하여 관리
   * 특정 데이터가 갱신될 때에, 해당 항목의 이전값을 보존하기 위해 한 데이터 항목에 대해 여러 버전의 값을 유지한다.
   * 트랜잭션이 쓰기 작업을 수행할 시에 새로운 버전에 쓰기 작업을 진행하고 그항목의 이전 버전은 계속 보존하고 있는 식으로 동작한다.
   * 다른 기법을 사용할시에는 실패하게 될 일부 읽기 작업들이 해당 항목의 이전 버전을 읽도록 함으로써 일기 작업도 수행 가능하며, 직렬성도 보장


정규화
 - 비정규화의 조건
    1NF를 만족하고 모든 도메인이 원자 값이어야 한다.
 - 2NF의 조건
    1NF를 만족하고 키가 아닌 모든 속성이 기본 키에 완전 함수적 종속되어야 한다.
 - 3NF의 조건
    1NF를 만족하고 키가 아닌 모든 애트리뷰트들이 기본 키에 이행적으로 함수 종속되지 않아야 한다.
 - BCNF의 조건
     1NF를 만족하고 다치 종속이 제거되어야 한다.



해싱함수의 종류
1. 제곱법 : 레코드 키 값을 소수로 나누어 나머지 값을 주소로 결정
2. 제산법 : 키 값을 제곱한 후 중간의 몇자리를 선택하고 그 중값을 주소로 이용
3. 중첩법(폴딩) : 길이를 동일하게 여루ㅓ 부분으로 나눈 후 더하고나 XOR하여 주소로 이용
4. 숫자분석법 : 각 숫자의 분포를 이용해서 균등한 분포의 숫자를 선택하여 이용
5. 기수변환법 : 주어진 키 값을 다른 진법으로 변환하여 얻은 값을 주소로 이용
6. 무작위방법 : 난수 발생, 충돌이 발생하면 다음 난수를 이용

해밍코드(Hamming Code)
 - R. W. Hamming에 의해 고안됨
 - 오류 검출만 가능한 패리티 비트(Parity Bit)에 의한 오류 검출이 아닌 오류 정정까지 가능한 방식으로 고안됨
 - 구해지는 수식은 2(p승) >= m + p +1(m : 데이터 비트값)
   ex) 해밍코드에 의해 구성된 코드가 16bit일 경우 2(p승) = 16이므로 16 >= m + 4 + 1,
        즉 m = 11이 됨, 패리티비트 : 5(4+1)

 - 4bit 데이터 0101을 해밍코드로 표현, 코드의 구성은 P1P2D3P4D5D6D7, 여기서 Pn는 패리티 비트를 의미, Dn는 데이터를 의미함... 변환된 해밍코드는?
  * P1 : 행 1, 3, 5, 7 짝수 패리티 체크

  * P2 : 행 2, 3, 6, 7 짝수 패리티 체크
  * P4 : 행 4, 5, 6, 7 짝수 패리티 체크
P1
P2
D3
P4
D5
D6
D7
0
1
0
1

  * P1 => 1, 3, 5, 7 => P1, 0, 1, 1 => P1이 0이어야 짝수가 됨
P1
P2
D3
P4
D5
D6
D7
0
0
1
0
1

  * P2 => 2, 3, 6, 7 => P2, 0, 0, 1 => P1이 1이어야 짝수가 됨
P1
P2
D3
P4
D5
D6
D7
0
1
0
1
0
1

  * P4 => 4, 5, 6, 7 => P4, 1, 0, 1 => P1이 0이어야 짝수가 됨
P1
P2
D3
P4
D5
D6
D7
0
1
0
0
1
0
1

P1, P2, P4인 이유는 2(0승) = 1, 2(1승) = 2, 2(2승) = 4이기 때문이며 2승까지만 하는 이유는 2(3승) = 6을 할 경우 0101인 수 5보다 초과가 되기 때문에 미수행

P1의 짝수 패리티 하는 숫자가 1, 3, 5, 7인 이유는 아래와 같이 각각의 수에 맞게 1이 되는 경우로서 정확한 오류검출을 위해 수행됨
10진수

2진수
P4
P2
P1
1
0
0
1
2
0
1
0
3
0
1
1
4
1
0
0
5
1
0
1
6
1
1
0
7
1
1
1



- 폴링 방식 : 인터럽트 요청신호 플래그(Flag)를 차례로 검사하여 인터럽틔 원인을 판별하는 방식
- 스트로브 방식
- 데이터체인 방식
- 하드웨어 방식

간접상태(Indirect state) 동안 오퍼랜드의 주소를 읽는다.

누산기(Accumulator)는 연산장치에 있는 레지스터(register)의 하나로 연산 결과를 일시적으로 기억하는 장치이다.

메이저 스테이트(Major State) : 현재 CPU가 무엇을 하는 지 나타내는 상태, Major Cycle 또는 Machine Cycle이라고도 함.
 - 메이저 스테이트는 메이서 레지스터(Major Register)로 알아본다.
 - 사이클 제어는 플립플롭 상태에 따라 메이서 스테이트를 결정한다.
 - 종류 : fetch, Indirect, Excute, Interrupt
   * 인출단계(Fetch Cycle) : 명령어슬 주기억장치에서 중앙기억장치의 명령레지스터로 가져와 해독하는 단계
   * 간접단계(Indirect) : 기억장치로부터 오퍼랜드(데이터)의 번지 인출, 인출 단계에서 해석된 명령의 주소부가 간접주소인 경우 수행, 간접주소가 아닌 경우 Excute 또는 Fetch로 이동할지 판단
   * 실행단계(Excute) : 실제로 명령어를 실행하는 단계, Interrupt로 변천할 것인지 판단
   * 인터럽트(Interrupt) : 인터럽트 발생 시 복귀주소(PC)를 저장하고 제엇순서를 인터럽트 처리 프로그램의 첫번째 명령으로 옮기는 단계 후 항상 Fetch로 변천
7

마이크로 프로그램 제어기가 다음에 수행할 마이크로 명령(Instruction)의 주소를 결정할 때 사용하는 정보
 - 인스트럭션 레지스터(IR)
 - CPU 상태 레지스터
 - 마이크로 인스트럭션에 나타난 주소


4bit 병렬 가산기



플립플롭
  - RS 플립플롭 : 기본 플립플롭, S와 R선의 입력을 조절하여 임의의 bit값을 그대로 유지시키거나, 무조건 0 또느 1의 값을 기억시키기 위해 사용
 - JK 플립플롭 : RS에서 S=R=1일 때의 결점(미동작) 보완(모든 FF의 기능 포함)
 - D 플립플롭 : 입력하는 값을 그대로 저장하는 기능 수행, RS의 R선에 인버터를 추가, S선과 하나로 묶어서 입력선 구성
 - T 플립플롭 : T=0인 경우 변화가 없고 T=1인 경우 현재 상태를 토글 시킴, JK FF의 두 입력선을 하나로 묶어 한 개의 입력선으로 구성
 - M/S 플립플롭 : 출력측의 일부가 입력측에 피드백 되어 유발되는 레이스 현상을 없애기 위하여 고안된 FF


프로세스들이 처리하는 명령어와 데이터의 스트림(Stream)의 수에 따라 분류
 - SISD : 단일 명령어 스트림 - 단일 데이터 스트림
 - SIMD : 단일 명령어 스트림 - 복수 데이터 스트림
 - MISD : 복수 명령어 스트림 - 단일 데이터 스트림
 - MIMD : 복수 명령어 스트림 - 복수 데이터 스트림


주기억장치의 Bandwidth : 주기억장치의 하드웨어 특성상 주기업 ㄱ장치가 제공할 수 잇는 정보전달 능력의 한계


interleaved memory(교차배치 메모리)
 - 중앙처리장치의 쉬는 시간을 줄임
 - 단위 시간당 수행할 수 있는 명령어의 수 증가 가능
 - 이 기억장치를 구성하는 모듈의 수만큼 단어들에 동시 접근 가능


파일 구성 방식 중 ISAM(Indexed Sequential Access-Method)의 물리적 특성에 따른 3단계 색인(index) 구성
 - Cylinder Index
 - Track Index
 - Master Index


SSTF(Shortest Seek Time First)
 - 탐색 거리가 가장 짧은 요청을 먼저 서비스
 - 가운데 트랙이 안쪽이나 바깥쪽 트랙보다 서비스 받을 확률이 높음
 - 헤드에서 멀리 떨어진 요청은 기아상태(starvation) 발생 가능성 존재


스케줄링 방식 중 라운드로빈(Round Robin) 방식의 시간간격을 무한히 크게 함 = FIFO 방식


매핑(Mapping) : 가상 메모리(Virtual Memory)에서 메인 메모리(Main Memory)로 페이지를 옮겨 넣을 때 수행되는 주소 조정


가상메모를 운용하는 기법으로는 페이징과 세그먼테이션 기법이 있다.
 - 페이징 기법 : 가상기억장치를 같은 크기의 블록으로 편성하여 운영, 이 때 일정한 크기의 블록을 페이지라 함. 주소 변환을 위한 맵 테이블 필요, 내부 단편화 발생 가능함
 - 세그먼테이션 기법 : 메모리 크기를 실제 운여ㅇ되는 작업의 크기에 따라 편성, 메모리의 논리적 단위를 세그먼트라 함. 외부 단편화 발생 가능함


은행원 알고리즘에서 교착상태 해결 방법은 회피(Avoidance)


2단계 디렉토리 구조 : 마스터 파일 디렉토리와 각 사용자별로 만들어지는 사용자 파일 디렉토리로 구성

UNIX의 특성
 - 트리 구조의 파일 시스템
 - 대화식 운영체제
 - Main User, Multi-Tasking 지원
 - 이식성이 높고, 장치, 프로세스 간 호환성이 높다.

adaptive 형태 : OS와 Compiler와 같은 개발환경의 변화 또는 주변 장치(Peripheral Device), System Component, element가 향상, 변경될 경우 대처 가능한 maintenance 형태

White Box Testing
 - Source Code의 모든 문장을 한번 이상 수행함
 - 모듈 안의 작동을 직접 관찰
 - 산출물의 각 기능별로 적절한 프로그램 제어구조에 따라 선택, 반복 등의 부분들을 수행함으로 논리적 경로를 점검

효과적인 모듈화 설계
 - 복잡성(Complexity)와 불필요한 중복(Redundancy)을 최대한 줄일 수 있도록 설계
 - 유지(Maintenance)가 용이하도록 설계
 - 모듈 크기는 시스템 전반적인 기능과 구조를 이해하기 쉬운 크기로 설계

정적테스트(Formal Technical Review) : 프로그램 코드를 실행하지 않고 여러 참여자가 모여 소프트웨어 개발중에 해성되는 모든 명세나 코드를 검토하여 실패보다는 결함(defects)를 찾아내는 방법
계획 -> 착수 -> 개별 준비 -> 검토회의 수행 -> 재작업 및 수정 -> 완료 작업 또는 후속 처리 확인 순으로 진행

정적테스트의 지침사항
 - 논쟁과 반박의 제한을 둔다.
 - 자원과 시간 일정을 할당한다.
 - 문제 영역을 명확히 표현한다.
 - 모든 검토자들을 위해 의미 있는 훈련을 행한다.

소프트웨어 리엔지니어링(Reengineering) : 유지보수의 문제로 인하여 필요성이 대두,  급격하게 성과 향상의 달성을 위해 재사고, 재설계하는 것
 - 재조정(Restructuring)은 리엔지니어링의 한 유형으로 유저 요청사항(Requirement)이나 기술적 설계의 변경없이 Software를 개선하는 것이다.
 - 재개발(Redevelopment)와 리엔지니어링은 동일한 의미가 아니다.
 - 유저 요청사항을 변경시키지 않고, 기술적 설계를 변경하여 프로그램을 개선하는 것도 포함된다.
 - 현재 시스템을 변경하거나 재조정하는 것이다.

공정확인 검사(Validation) : alpah test, beta test 등 수행

() : 자료 사전에서 자료의 생략을 의미

올바른 설계의 기준
 - 모듈적인 설계
 - 자료와 프로시저에 대해 분명하고 분리도니 표현을 포함
 - 소프트웨어 요소들 간의 효과적 제어 -> 계층적 조직이 제시

객체지향기법의 캡슐화(Encapsulation)
 - 변경 발생 시 오류의 파급효과가 적음
 - 소프트웨어 재사용성이 높아짐
 - 인터페이스의 단순화

브룩스의 법칙 : 소프트웨어 프로젝트 일정의 지연 발생 될 때, 사업 말기에 인력을 추가 배치하는 것은 사업일정을 더욱 지연시키는 결과를 초래한다는 법칙

 ISO 9126에 근거한 소프트웨어 품질목표 중 명시된 조건 하에서 소프트웨어 제품의 일정한 성능과 자원 소요량의 관계에 관한 속성, 즉 요구되는 기능을 수행하기 위해 필요한 자원의 소요 정도를 효율성(Efficiency)라고 한다.

RIP : 패킷을 목적지까지 전달하기 위해 사용되는 라우팅 프로토콜

변조방식의 종류
 - ASK : 진폭 편이 변조, 신호 변동과 잡음에 약하여 데이터 전송으로 거의 사용 불가
 - PSK : 위상 편이 변조, 일정한 진폭 또는 주파수를 갖는 정현파의 위상을 180º/90º/45º 단위로 2등분/4등분/8등분 했을 때의 각 위치에 신호를 할당하여 전송하는 방식(파형의 시작위치를 달리하여 신호 전송)

16진 QAM
1. 16진 PSK  변조방식보다 동일한 전송 에너지에 대해 오류 확률이 낮다.
2. 진폭과 위상이 변화하는 변조방식이다.
3. 2차원 벡터 공간에 신호를 나타낼 수 있다.

파형 부호화
 - 디지털 부호를 전송 채널에 적합한 파형으로 변환하는 신호 부호화
 - 하나의 파형 집합을 좀 더 개선된 파형 집합으로 변환
 - 대역 제한된 채널을 극복하기 위한 신호 파형으로의 변환
 - 메세지 데이터 비트 값에 따라 신호 파형이 변화
 - 오류/왜곡을 극복하기 위해 좀 더 나은 파형으로 변환하는 신호 설계의 과정
 - 기법 : PCM, DCPM, ADPCM, DM  등

CSMA/CD : 자유 경쟁으로 채널사용권을 확보하는 방법으로 노드 간의 충돌을 허용하는 네트워크 접근 방법

ALOHA : 최초의 라디오 패킷(Radio Packet) 통신방식을 적용한 컴퓨터 네트워크 시스템

UDP 헤더
1. checksu,
2. UDP total length
3. soource port address

X.25 : 패킷 교환망에서 DCE와 DTE 사이에 이루어지는 상호작용을 규정한 프로토콜

베이스밴드 전송방식 : 디지털 데이터 신호를 변조하지 않고 직접 전송하는 방식
 ex) ETHERNET
전송방식의 유형
1. NRZ-L(None Return to Zero-Level) : 1은 High, 0은 Low, 디지털 논리회로에서 광범위하게 사용된다.
2. NRZ-M(None Return to Zero-Mark) : 1은 전압변환, 0은 전압변환 없음
3. NRZ-S(None Return to Zero-Space) : 1은 전압변환 없음, 0은 전압변환
4. NRZ-I(None Return to Zero-Inverted) : 1은 Low Voltage/High Voltage로 변화, 0은 변화 없음

TDM : 다수의 타임 슬롯으로 하나의 프레임이 구성되고, 각 타임 슬롯에 채널을 할당하여 다중화는 것

IEEE 802의 표준안
 - IEEE 802.1 : 무선LAN 네트워크 표준
 - IEEE 802.2 : 2계층(데이터링크)의 서브계층인 논리링크제어(LLC)의 표준
 - IEEE 802.3 : CSMA/CD 네트워크 표준
 - IEEE 802.4 : 토큰 버스 방식 표준
 - IEEE 802.11 : 무선 LAN
 - IEEE 802.15 : WPAN, 블루투스 표준

파형부호화 방식(Waveform Coding)

PSK : 반송파의 진폭과 위상을 상호 변환하여 신호를 전송함으로써 전송 속도를 높임

2015년 10월 20일 화요일

김포공항 - 수원역행 공항리무진버스 시간표

수원역->김포공항
06:05
07:35
08:55
10:10
11:10
12:40
13:50
16:10
17:30
18:50
20:15

김포공항->수원역
08:30
10:00
11:10
12:30
13:30
15:00
16:00
17:30
18:30
20:00
21:15
22:10

2015년 5월 23일 토요일

국내 it 뉴스 및 서적 사이트에 대한 제언

개인 적으로 IT 관련 개발 사이트들 중에서 다음 사이트가 정말 아쉽다고 느껴진다.
그래서 한 번 제언을 해봅니다 ㅎㅎ

ITWORLD Korea
이 사이트는 전체적으로 모바일 페이지도 잘 되어 있습니다. 하지만 가장 큰 단점은 슬라이드 페이지네요. 모바일에서는 화면을 넘길 때마다 특정부분만 로딩되지 않습니다. 즉, 전체적으로 로딩이 되기 때문에 속도도 물론이며 가독성도 상당히 떨어집니다. 그래서 제언코자 하는데 슬라이드 페이지는 전체화면으로 되게 해주던가 페이지 자체를 화면넘기기에 좋은 디자인으로 해주시길 바랍니다. top5 등의 순위 슬라이드를 넘기기 좋은 형태로 해주시면 전체 페이지 로딩이라고 하더라도 좋을 것 같습니다.

CNet Korea
이 사이트는 모바일 버전이 있는지 참 모르겠습니다. 특정기사는 모바일 페이지가 있고 특정페이지는 데스크탑 페이지가 있어서 링크를 따라가면 자동으로 모바일이나 데스크탑 버전으로 안 바뀌네요, 그리고 칼럼은 아쉬운 것은 개인적으로 임백준 님을 존경하는데 그 분의 칼럼을 보기가 힘드네요. 결국 그 사이트에서 안 보게 되고 pocket이나 instapaper로 보고 있네요. 모바일 버전의 정비가 필요할 듯 싶네요 ㅎㅎ

기타 사이트의 경우는 아직까진 딱히 불편한 점은 없었네요 ㅎㅎ

2015년 1월 22일 목요일

AndroidNote - Android Studio에서 라이브러리 사용과 에러: 방법 2

이전번에 방법 1을 소개했었다. 그 후 다음 개발자 카페에 올렸던 글에 댓글로 다른 방법을 알려줘서 그 방법을 소개하려고 합니다.

다음 지도 API을 android studio에서 외부 library로 사용하려 했지만 실행할 때 오류가 발생했었습니다.


 How To?

  - 이전 동영상화면은 화질 문제로 인하여 내렸습니다. 아래 이미지 설명을 참고하여 주세요.



먼저, 압축을 풀면 위와 같이 폴더가 구성이 되어 있습니다. 그러면 아래와 같이 main 폴더에서 오른쪽 클릭한 후 [New]-[Directory]를 선택합니다.

 그런 다음 jniLibs라고 폴더를 만듭니다.

 그 후 두 폴더를 jniLibs 폴더 밑으로 옮깁니다.(여기에선 jar파일을 먼저 옮겼는데 이런 순서는 크게 상관이 없습니다.)

그리고 libs폴더가 기존에 있을텐데요.  이 폴더 밑으로 jar파일을 옮깁니다.



 이런식으로 압축파일에 있던 파일을 추가한 후에 다음과 같이 추가합니다.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


위와 같이 되어 있는 build.gradle을 아래와 같이 추가합니다.
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/libDaumMapAndroid.jar')

마지막으로 위에 있는 메뉴 중 [sync gradle]를 클릭하여 변경한 gradle을 적용시킵니다.




그리고 사용해본 바로는 이 방법이 좀더 쉬운 편이고 편하게 할 수 있었습니다.

AndroidNote - Android Studio에서 라이브러리 사용과 에러 : 방법 1



다음 지도 API을 android studio에서 외부 library로 사용하려 했지만 실행할 때 오류가 발생했다.

라이브러리 파일 추가

Android Daum Map 라이브러리는 libDaumMapAndroid.jar 와 아키텍쳐별로libMapEngineApi.so 두개의 바이너리로 구성되어 있습니다.
주어진 압축파일 libs 에 있는 파일들을 해당 프로젝트 /libs/ 로 모두 복사 해야 합니다.

AndroidManifest.xml 에 Permission 추가

<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
</uses-permission>
오류 내용
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427): Can`t load DaumMapEngineApi.so file
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427): java.lang.UnsatisfiedLinkError: Couldn't load DaumMapEngineApi from loader dalvik.system.PathClassLoader[dexPath=/data/app/daum.net.testdaummap-5.apk,libraryPath=/data/app-lib/daum.net.testdaummap-5]: findLibrary returned null
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.Runtime.loadLibrary(Runtime.java:358)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.System.loadLibrary(System.java:526)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.mf.map.n.api.NativeMapLibraryLoader.loadLibrary(NativeMapLibraryLoader.java:33)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.mf.map.n.api.NativeThread.<clinit>(NativeThread.java:6)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.opengl.alt.GLSurfaceView.setRenderer(GLSurfaceView.java:306)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.android.map.MapView.init(MapView.java:44)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.android.map.MapView.<init>(MapView.java:56)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.mf.map.api.MapView.<init>(MapView.java:410)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.reflect.Constructor.constructNative(Native Method)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.createView(LayoutInflater.java:600)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:359)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.Activity.setContentView(Activity.java:2010)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at net.daum.android.map.openapi.sampleapp.demos.SearchDemoActivity.onCreate(SearchDemoActivity.java:48)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.Activity.performCreate(Activity.java:5426)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.ActivityThread.access$900(ActivityThread.java:161)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.os.Handler.dispatchMessage(Handler.java:102)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.os.Looper.loop(Looper.java:157)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at android.app.ActivityThread.main(ActivityThread.java:5356)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.reflect.Method.invokeNative(Native Method)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at java.lang.reflect.Method.invoke(Method.java:515)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
01-16 10:42:01.668: E/NativeMapLibraryLoader(3427):  at dalvik.system.NativeStart.main(Native Method)


01-16 10:42:01.678: E/AndroidRuntime(3427): FATAL EXCEPTION: main
01-16 10:42:01.678: E/AndroidRuntime(3427): Process: daum.net.testdaummap, PID: 3427
01-16 10:42:01.678: E/AndroidRuntime(3427): java.lang.RuntimeException: Unable to start activity ComponentInfo{daum.net.testdaummap/net.daum.android.map.openapi.sampleapp.demos.SearchDemoActivity}: android.view.InflateException: Binary XML file line #32: Error inflating class net.daum.mf.map.api.MapView
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread.access$900(ActivityThread.java:161)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.os.Handler.dispatchMessage(Handler.java:102)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.os.Looper.loop(Looper.java:157)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread.main(ActivityThread.java:5356)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at java.lang.reflect.Method.invokeNative(Native Method)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at java.lang.reflect.Method.invoke(Method.java:515)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at dalvik.system.NativeStart.main(Native Method)
01-16 10:42:01.678: E/AndroidRuntime(3427): Caused by: android.view.InflateException: Binary XML file line #32: Error inflating class net.daum.mf.map.api.MapView
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.createView(LayoutInflater.java:626)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:359)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.Activity.setContentView(Activity.java:2010)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.android.map.openapi.sampleapp.demos.SearchDemoActivity.onCreate(SearchDemoActivity.java:48)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.Activity.performCreate(Activity.java:5426)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
01-16 10:42:01.678: E/AndroidRuntime(3427):  ... 11 more
01-16 10:42:01.678: E/AndroidRuntime(3427): Caused by: java.lang.reflect.InvocationTargetException
01-16 10:42:01.678: E/AndroidRuntime(3427):  at java.lang.reflect.Constructor.constructNative(Native Method)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.view.LayoutInflater.createView(LayoutInflater.java:600)
01-16 10:42:01.678: E/AndroidRuntime(3427):  ... 22 more
01-16 10:42:01.678: E/AndroidRuntime(3427): Caused by: java.lang.UnsatisfiedLinkError
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.mf.map.n.api.NativeMapLibraryLoader.loadLibrary(NativeMapLibraryLoader.java:42)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.mf.map.n.api.NativeThread.<clinit>(NativeThread.java:6)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at android.opengl.alt.GLSurfaceView.setRenderer(GLSurfaceView.java:306)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.android.map.MapView.init(MapView.java:44)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.android.map.MapView.<init>(MapView.java:56)
01-16 10:42:01.678: E/AndroidRuntime(3427):  at net.daum.mf.map.api.MapView.<init>(MapView.java:410)
01-16 10:42:01.678: E/AndroidRuntime(3427):  ... 25 more


그래서 구글을 6-7시간을 해멘 끝에 답을 찾았다.(OTL)

최고의 도움을 받은 링크(영어 주의)

    

일단 이런 식으로 /libs/에 다 넣어져 있는데 이 부분을 *.so 파일은 /libs/가 아니라 /lib/라는 폴더를 생성한 후 이동 시켜야 한다. 그러면 오른쪽의 화면과 같이 되는데 이 부분에서 꼭! /lib/armeabi/libDaumMapEngineApi.so 파일이 포함되게 .zip 파일로 만든 후 확장자를 .jar로 변경하고 /libs/ 폴더에 넣어 준다.

그 후에 jar 파일을 선택 후 오른쪽 클릭을 하게 되면 "Add As Library..."라고 있는데 이 부분을 클릭 해준다.


gradle 부분은 이렇게 작성하도록 한다.

그러면 제대로 library가 추가가 되었다.

정리하자면 자동을 .so 파일을 include를 안 해줘서 강제로 jar 파일로 만들어 포함시키는 것이다.

다른 사람은 이런 고통을 안 받기를 고대한다...ㅠㅠ

2014년 12월 26일 금요일

집중력과 공부자세

유튜브 영상(공부자세 비교)보기



집중력 향상 방법 write by 책벌래
 
 
1. 집중력과 그 중요성
① 공부에서 집중력은 오직 공부 그 자체에만 온 정신과 신경을 쓰는 것이다.
② 성적이 상위냐 하위냐를 결정 짓는 것이 집중력이다.
③ 집중력을 키우는 것은 자기 스스로의 적극적인 노력이 좌우한다.
④ 집중력을 키우기 위해 자신의 집중력 방해 요건을 정리해서 제거해 나가는 노력이 필요하다.
예를 들어 TV또는 가족 관계, 컴퓨터, 공부 방위치, 친구, 자신의 성격이나 관심분야 등등
자신이 공부하는데 필요한 집중력을 방해하는 요인이 무엇인가 찾아내고 이를 해결해 나가는 노력을 말하는 것이다.
⑤ 집중을 하지 않고 공부하는 것은 공부가 아니라 시간만 낭비하는 것이다.
⑥ 긴 시간의 공부보다 짧은 시간이라도 집중력을 갖고 공부하는 것이 효과적이다.
⑦ 학습 계획 작성 시 내용 중심 계획표를 작성하는 것이 짧은 시간에 집중력을 갖고 공부하게 되므로 효과적이다.
 
2. 책상 위를 정리하는 요령
① 그 시간에 공부하는데 최소한으로 필요한 것을 책상 위에 놓는다.
② 책상 위의 인형, 시계, 잡다한 학용품, 스타 사진 등 정신을 집중하는데 방해되는 모든 것을 치운다.
③ 공부에 필요한 것을 사용했으면 그때그때 치워가면서 공부한다.
④ 책상 앞 벽에도 잡다한 것을 붙여 놓아 정신 집중을 방해하지 말아야 한다.
 
3. 공부와 잠
두뇌 활동을 활발하게 하기 위하여 하루에 6시간 정도의 수면이 필요하다.
피곤하여 졸리면 억지로 참는 것보다는 1시간 이내의 짧은 시간동안 잠을 자고 나서 정신을 집중하여 공부하는 것이 효과적이다.
성적은 몇 시간 동안 공부 했느냐의 양 보다 무엇을 얼마나 했느냐의 질이 좌우한다.
따라서 졸리운 상태에서의 공부는 효과가 없다. 자신의 신체리듬에 맞게 정신을 집중할 수 있는 시간을 만들어라.
*활용 방안
책상 위는 깨끗이 정리하고 꼭 필요한 물건만 올려 놓는다.
(필기 도구, 만화책, 여러 가지 교과서 등이 책상 위에 흐트러져 있으면 정신이 산만해지기 쉽다.)
공부를 시작하기 전 1∼2분 동안 시각·청각을 이용해 정신 집중 훈련을 해본다.
머릿속으로 간단한 도형을 그려 본다.
(우선 공중에 하나의 점을 그린다. → 점 이외의 것은 일체 생각하지 않는다. → 이 점을 연장시켜 일직선으로 만들어 본다. → 익숙해지면 별과 같은 간단한 도형을 그려본다. → 매일 조금씩 복잡한 도형을 만들어 본다.)
눈을 감고 길게 심호흡을 한다.
(자율 신경의 활동으로 인해 정신이 맑아져 집중력이 강화된다.)
먼저 높고 큰 목표를 세운 후 세부적인 목표를 세워 하나씩 달성해가면서 성취감을 맛본다.
(ex: 10분 동안 몇 문제를 풀 수 있을까 마음속으로 생각하며 게임 하는 기분으로 공부한다).
좋아하는 과목부터 시작해 공부에 흥미를 키우고 그 후 싫어하는 과목에 도전해 본다.
정서적으로 안정을 취한다. 적절한 휴식을 통해 기분을 새로이한다.
평소 클래식이나 조용한 음악을 들으며 마음을 차분히 가라앉힌다.
친구의 방법을 물어 보는 등 서로 대화를 통해 마음을 가볍게 갖는다.
손가락을 움직이며 공부하는 것도 기분을 돋우는 데 도움이 된다.
 
▷ 정신을 집중할 수 있는 공부방 분위기 ◁
① 책상
책상 위에는 꼭 필요한 것만 올려 놓는다. 서랍은 빈 상자를 이용해 잘 정리해 둔다.
② 의자
너무 딱딱하면 엉덩이가 아프고 허리도 불편하므로 푹신한 방석을 깔아 놓는다.
③ 조명
방안 전체 조명은 약하게 하고 책상 위의 스탠드 조명은 강하게 한다.
④ 메모판
책상 옆의 벽에 작은 메모판을 걸어 놓고 학습 목표와 구체적인 계획을 적어 놓는다. 한눈에 잘 나타나, 계획적으로 공부하기 좋다.
⑤ 시계
의자에 앉았을 때 눈에 가장 잘 띄는 장소에 둔다.
⑥ 그림
푸른 숲이나 호수 풍경의 그림은 기분을 가라앉힐 수 있다. 자기가 존경하는 인물의 사진을 붙여 놓는 것도 좋다.
⑦ 바람직한 공부 자세 엉덩이를 의자에 바싹대고 허리를 반듯하게 편다. 공부할 때는 책을 눈으로부터 30cm정도 떨어진 위치에 놓는다.
ㆍ우선 집중이 되지 않는 이유를 따져봐야 한다.
ㆍTV나 라디오 때문에 주변이너무 소란스럽다면 스위치를 끄거나 다른 조용한 곳으로 옮긴다.
ㆍ개방된 공간보다는 폐쇄된 공간이 집중이 잘된다.
ㆍ또 개인마다 집중이 잘되는 시간대가 있는데 이 시간을 학습에 최대한 잘 활용한다.
ㆍ잡념이 생기면 간단한 맨손체조를 하거나 세면으로 기분전환을 하는 것도 좋다.
ㆍ학습목표를 명확히 세우는 것도 집중력 향상에 도움이 된다.
ㆍ'이 단원까지만 공부하고 쉬어야겠다'는 식으로 자기보상을 주는 것도 한 방법이다.
ㆍ 책상에는 만화책이나 연예인 사진같이 공부에 방해되는 물건을 두지 않고
ㆍ학습 준비물은 한번에 완전히 챙겨 한번 앉은 책상에서 자주 들락날락하지 않는다.
ㆍ마음의 고민 등 심리적인 영향으로 집중이 어려운 경우는 달리 해결 방법이 없다.
ㆍ부모나 교사들과 터놓고 이야기해서 고민을 해결하는 것이 상책이다.
 
4. TV소리 및 각종 소음을 차단하는 방법
① 가족들은 TV시청을 거실에서 하지 말고 방에서 작은 소리로 시청한다.
② 가족 구성원들이 가정에서 TV시청을 일정한 시간만 계획적으로 한다.
③ 가족들이 TV에 모여 시청하는 시간대에는 집중력을 덜 요구하는 숙제나 교과를 공부한다.
④ 이웃집의 피아노 소리나 전축 소리가 영향을 줄 때 이웃에게 공부하는 시간대를 이야기해서 서로간에 피해를 주지 않는 시간을 정한다.
⑤ TV소리나 기타 소음에 대응하기 위해 마음을 안정시켜주는 고전음악 중 바로크음악을 헤드폰으로 들으면서 공부한다.
 
5. TV시청과 성적
① 초등학생은 평균 3점을 낮추고 중학생은 평균 6.3점을 낮추고, 고등학생은 8∼10점의 평균을 낮춘다.
② TV시청은 공부 시간과 독서 시간 및 생각할 시간을 빼앗는다.
③ 학원에 가서 오르는 성적보다 TV와의 결별로 오르는 성적이 크다.
 
6. 합리적인 TV시청 방법
① TV시청 시간은 휴식이 아니라 노동임을 알아야 한다.
② 1시간 TV시청은 1시간 공부하는 집중력을 소비한다는 것을 알아야 한다.
③ 스트레스 해소나 취미와 관계된 프로만 요일과 시간을 정하여 절도 있게 시청한다.
④ 되도록 TV프로그램에 관심을 두지 않는다. (신문의 TV프로 내용에 관심두지 말 것)
⑤ 주말 하루는 TV에 매달려 볼 수 있는 날을 둔다.
⑥학부모는 TV프로 중 유익한 프로를 선택하여 함께 시청한다.
⑦ 가족들의 노력으로 TV를 절도 있게 시청하는 가족 문화를 만든다.
⑧ TV 잔상효과를 빠른 시간 내에 없애기 위해 TV시청 후에는 집중력을 덜 요구하는 교과나 숙제 또는 자신이 좋아하는 교과를 공부한다.
 
7. 쾌적한 공부방 상태
① 공부방 안 온도는 18℃∼20℃정도가 적당하다.
② 공부방은 자주 환기를 시켜 주어야 한다. 신선한 공기가 방안 가득할 때 두뇌 활동이 왕성하여 집중력 향상에 도움이 된다.
 
8. 음악과 집중력
① 유행하는 대중 음악을 들으면서 공부를 하는 것은 집중력을 떨어 뜨려 학습 효과를 약화시킨다.
② 고전음악을 들으면서 공부하는 것은 마음을 안정시켜 주어 집중력 향상에 어느 정도 도움을 준다.
③ 외부에서 들려오는 신경 거슬리는 소음에 대응하는 방법으로 고전음악을 적절하게 사용하면 집중력 향상에 도움을 준다.
 
9. 학생들의 핸드폰에 대하여
① 공부하는 입장에서는 신종 집중력 방해 제품이다.
② 핸드폰은 우정을 나누는 도구의 기능보다는 공부하는데 정신 집중을 빼앗아 가는 역기능이 훨씬 더 크다.
③ 핸드폰은 통신비용의 과소비를 가져온다.
④ 우리나라 학생들의 핸드폰 사용 문화는 통신 사업자들의 장사 속에 원인이 있다.
⑤ 핸드폰을 사용하는 학생은 상대적으로 전화를 사용하는 회수가 빈번해지고 매우 길어진다.
 
10. 아침식사의 중요성
① 아침식사를 해야 집중력을 높여준다.
② 아침식사는 두뇌 활동을 왕성하게 도와주는 힘을 준다.
③ 시험 보는 날도 아침 식사를 해야 실력 발휘가 된다.
④ 아침식사를 거르면 학습 능률이 떨어진다.
 
11. 컴퓨터에 대한 몇가지 조언
① 학생들은 컴퓨터 게임에 지나치게 빠져들지 않도록 자기 통제를 확실하게 해야한다.
② 학생들은 컴퓨터 게임을 할 경우에는 일정한 요일과 시간을 정하여 부모님께 알리고 통제를 받는 것이 좋다.
③ 컴퓨터 게임과 현실세계를 엄격하게 구분하는 자기 판달력을 길러야 한다.
④ 컴퓨터와의 대화보다 직접 만나는 대인관계를 중시해야 한다.
⑤ 부모는 컴퓨터를 반드시 거실에 두어 사전에 학생들이 컴퓨터 게임 등에 너무 깊게 빠져 들지 못하도록 통제될 수 있는 곳에 두어야 한다.
⑥ 부모들도 되도록 컴퓨터 기본 지식을 배워야 자식들이 컴퓨터를 올바르게 사용하게 된다.
⑦ 대부분의 학생들은 컴퓨터를 학문과 교양을 넓히는데 필요한 정보를 얻는 도구로 활용하기 보다는 컴퓨터 게임에 주로 활용하고 있다. 컴퓨터는 현대 생활에서 필수적 도구이지만 놀이로써 컴퓨터 게임문화는 적절한 절제가 요망된다.
⑧ 부모는 인터넷 성인 사이트를 막기위해 성인정보 차단 소프트웨어를 설치해야 한다.
 
12. 식사는 부족하게 해야 한다
배부르게 식사하면 졸리다.
산소가 많은 신선한 피가 두뇌로 가지 않고 위장으로 가기 때문이다.
식사는 배부르다는 느낌이 오기 전 80%에서 멈춰야 한다.
공부하는 배부르게 먹기보다는 고른 영양 섭취를 해야 한다.
'절제 없는 성공'은 사전에도 없고 인터넷에서도 안 뜬다.
 
13. CD에 대하여
학습에 놀이적 요소가 담긴 CD는 학습동기를 유발하는 역할을 할 뿐 성적향상에 큰 도움이 못 된다.
학습의욕이 강한 학생은 놀이적 요소가 강한 CD는 공부에 방해가 된다.
공부는 학습자 스스로가 관련내용을 찾고 조직화하고 체계화하는 과정이 따를 때 효과를 기대할 수 있다.