9/28/2016

Cloud (수정 중, 관련자료 필요)

1.  Cloud의 기본개념 

인터넷 상의 유틸리티 데이터 서버에 프로그램을 두고 그때 그때 컴퓨터나 휴대폰 등에 불러와서 사용하는 웹에 기반한 소프트웨어 서비스이다

현재 우리는 많은 Cloud 서비스를 사용하고 있으며, 이를 기반으로 단순한 데이타 저장만이 아닌,
다양한 웹기반 API Service를 제공하고 있다.
이 API에는 Machine Learning 뿐만 아니라, 음성인식등 다양하게 지원을 해주며, 점점세부화 되고 있다.


1.1 Public Cloud와 Private Cloud 

Public Cloud는 일반적인 Cloud Service 업체를 말하며, API 역시 공개하여, 자유롭게
데이타 저장 및 API를 이용가능하지만, Private Cloud는 이와 다르다.


1.2  Cloud Service 의 종류 

Cloud Service의 종류는 관리를 어디까지 하는가에 따라, 종류가 달라진다.


  • IaaS(Infrastructure as a Service)
서비스로써의 인프라라는 뜻으로, AWS에서 제공하는 EC2가 대표적인 예이다. 이는 단순히 서버 등의 자원을 제공해 주면서 사용자가 디바이스에 제약없이 데이터에 접근할 수 있도록 해준다.


  • PaaS(Platform as a Service)
서비스로써의 플랫폼이라는 뜻으로, 사용자(개발자)가 소프트웨어 개발을 할 수 있는 환경을 제공해 준다. 구글의 APP 엔진, Heroku 등이 대표적인 예다.


  • SaaS(Software as a Service)
서비스로써의 소프트웨어라는 뜻으로, 네이버에서 제공하는 N드라이브, drop box, google docs 등 과 같은 것을 말한다..

아래 Wiki에 너무 잘 설명이 되어 있다.
  https://ko.wikipedia.org/wiki/%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C_%EC%BB%B4%ED%93%A8%ED%8C%85

출처 https://blogs.msdn.microsoft.com/eva/?p=1383 


왼쪽 좌측 처럼 본인이 Server를 운영하면서, Virtual box or VMware를 설치하고,
저장장치부분부터 OS 및 Middleware와 Application 을 모든 것을 다하면 좋겠지만,
힘들것이다, 그래서 본인이 관리하는 부분에따라 IaaS, Paas, SaaS 로 나누어진다.

SaaS로 Google Cloud Service를 보면, 관련 API와 관리역시 다 해주기에, 사용자가 입장에서는 API를 사용하면 된다.

PaaS, IaaS 필요할 경우도 있을 것이다. 왜냐하면 본인이 원하는 Serivce가 있지만, Vendor가 이를 지원하지 못한다면,
이는 불행한 일이며, 어쩔수 없이 공동개발을 진행을 해야 할 것 같다.


Microsoft의 Azure 관련 Cloud Serivce 설명
  https://blogs.msdn.microsoft.com/eva/?p=1383


2.  Cloud Platform 

둘다 Opensource 이며, Server에 설치가 가능하다, 본인도 아직 설치를 해보지는 못했다,
OpenStack인 경우는 너무 유명해서, Virtual Box와 함께 같이 설치하는 방법도 쉽게 나와있다.

Platform은 크게 두가지로 구분이 되는 것 같으며, 다양한 기업에서 이를 기반으로 서비스를 하고 있다.

  • CloudStack 
기본구조는 IaaS형태로 Apach와 함께 구성이 되며, Amazone 에서 AWS로 이용이 된다고 한다. 

  • OpenStack 
기본구조는 IaaS 형태로 Apach와 함깨 구성이 되며, AMD, Brocade, Dell, HP, IBM, VMware, and Yahoo, Redhat 다양한 업체에서 서비스 한다고 한다.

  • Virtualization : Vmware 를 이용하여, 컴퓨터를 시뮬레이터를 하는 기능 
  • Hypervisor : Vmware or Virtuabox에서 사용하는 가상 CPU를 말한다. Linux KVM를 지원한다.

2.2 OpenStack 설치 및 관련자료


  http://openstack.or.kr

9/27/2016

USB Serial Com Port 제거 방법 (수정 중, 확실한 방법 찾는중)

USB Serial 장치를 많이 연결하다보면, 늘어나는 Com port에 좀 짜증이 나서 변경 or
제거 하는 방법을 찾고 있다.
물론 쉽게 제거 or 변경하는 방법은 있지만, 그렇게 할 경우, 나중에 그 Port를 사용할 경우,
다시 문제가 발생이 되는 현상이 발생이 되어 그 부분을 고치고자 한다.

(아직 확실하게 제거 방법 및 변경방법 찾지 못함)

  • 1. 1번째 방법

아래 방법대로 했으나, 제대로 제거가 되지 않음.
현재 Window 7

** cmd 실행 
C:\Users\JHLEE> set devmgr_show_nonpresent_devices=1

// 제어판 장치관리자. 
C:\Users\JHLEE> start devmgmt.msc

1.  장치관리자->보기->숨김장치 표시
2.  포트(COM&LPT)    // USB Serial 을 연결했을 경우 보임.
3.  불필요한 USB Serial Port  우측 클릭으로 제거
   * 이 장치의 드라이버 소프트웨어를 삭제합니다
     ( 드라이버는 유지하기위해 위 부분을 체크하지 말기)

   http://dokkodai.tistory.com/30


  • 2 번째 방법 

** cmd 실행 
C:\Users\JHLEE> change port /query
COM3 = \Device\ProlificSerial5
COM4 = \Device\ProlificSerial1

C:\Users\JHLEE> change port /d com3


   http://answers.microsoft.com/ko-kr/windows/forum/windows_xp-hardware/serial-com-port-%EC%B4%88%EA%B8%B0%ED%99%94/b34d6c90-e248-40d9-b470-4780c4cf0f97?auth=1


  • 강제변경   (내 컴퓨터에서 문제 발생)

   장치관리자->포트 (COM & LPT)
   포트설정->고급 에서 강제로 변경

   위와 같이 할 경우, 문제가 발생함.
 
   https://support.microsoft.com/ko-kr/kb/232673


  • regedit 사용방법 

9/11/2016

C언어의 String 함수 예제

C언어에서 String.h 에 대해 완벽히 이해하지 못하는 것 같아,
다시 복습하네요. String 함수의 return 값들도 중요한 것 같네요.

함수설명
복사
void * memcpy ( void * destination, const void * source, size_t num );source가 가리키는 곳 부터 num바이트 만큼을 destination이 가리키는 곳에 복사한다.
void * memmove ( void * destination, const void * source, size_t num );source가 가리키는 곳 부터 num바이트 만큼을 destination이 가리키는 곳으로 옮긴다.
char * strcpy ( char * destination, const char * source );source를 destination에 복사한다.
char * strncpy ( char * destination, const char * source, size_t num );source에서 destination으로 처음 num개의 문자들을 복사한다.
병합
char * strcat ( char * destination, const char * source );source를 destination뒤에 붙인다.
char * strncat ( char * destination, char * source, size_t num );source에서 destination뒤에 처음 num개의 문자들을 붙인다.
비교
int memcmp ( const void * ptr1, const void * ptr2, size_t num );ptr1이 가리키는 처음 num바이트의 데이터와 ptr2가 가리키는 처음 num바이트의 데이터를 비교한다.
int strcmp ( const char * str1, const char * str2 );str1과 str2를 비교한다.
int strcoll ( const char * str1, const char * str2 );strcmp와 비슷하지만 LC_COLLATE에 정의되어 있는 방식에 따라 해석 된 후 비교한다.
int strncmp ( const char * str1, const char * str2, size_t num );str1의 처음 num개의 문자를 str2의 처음 num개의 문자와 비교한다.
size_t strxfrm ( char * destination, const char * source, size_t num );source를 현재 지역 정보에 따라 문자열을 변환한 후 변환한 문자열의 처음 num개 문자를 destination에 복사한다.
탐색
void * memchr ( const void * ptr, int value, size_t num );ptr이 가리키는 메모리의 처음 num바이트 중에서 처음으로 value와 일치하는 값(문자)의 주소를 반환한다.
char * strchr ( const char * str, int character );str에서 처음으로 character와 일치하는 문자의 주소를 반환한다.
size_t strcspn ( const char * str1, const char * str2 );str2에 들어있는 문자들 중 str1에 들어있는 문자와 일치하는 것이 있다면 첫 번째로 일치하는 문자까지 읽어들인 수를 반환한다.
char * strpbrk ( const char * str1, const char * str2 );str1에서 str2에 들어 있는 문자들을 찾아 str2의 문자들 중 str1의 문자들과 첫 번째로 일치하는 문자의 주소를 반환한다.
char * strrchr ( const char * str, int character );str에서 마지막으로 character와 일치하는 문자의 주소를 반환한다.
size_t strspn ( const char * str1, const char * str2 );str2의 문자들만을 포함하고 있는 str1의 처음 부분의 길이를 구한다.
char * strstr ( const char * str1, const char * str2 );str1에서 str2를 검색하여 가장 먼저 나타나는 곳의 위치를 반환한다.
char * strtok ( char * str, const char * delimiters );str1을 delimiters의 문자들로 분리한다.
기타
void * memset ( void * ptr, int value, size_t num );ptr이 가리키는 메모리의 처음 num바이트를 value값(문자)으로 채운다.
char * strerror ( int errnum );errnum(보통 errno)을 해석한 뒤 그에 해당하는 에러 문자열의 포인터를 반환한다.
size_t strlen ( const char * str );str의 길이를 반환한다.

 https://ko.wikipedia.org/wiki/String.h

1.  strtok, strpbrk

저는 이 두 함수를 자주 사용하지 않는 함수지만 Parsing 할때 아주 유용하게 사용할 수 있을 것 같다. 사용법은 아주 유사하기에 비교하면 설명하겠다.
  • fixxed string size 차이 
*char  = "string1";    // 변경 불가능
 char[]  = "stirng2";  //  변경 가능

  • strtok 
argument는 1st str 와 2nd str 이 있으며, 2nd str을 delimiters라고 한다.
1st는 source이고, delimiter에 구분하고자 하는 문자들을 string 형태로 넣는다.,
strtok는 source에서 delimiter를 NULL 변경하는 작업이다.
한번 호출할 때마다 , 한번식 delimiter를 NULL로 변경하고, 하나의 string 이 생긴다.
그래서 return이 NULL이 될 때까지 호출을 하면 모두를 변경하고 나오는 것이다.

1st string 대신 NULL 값을 넣으면, 그전에 사용하시던 source pointer 를 값을 기억한다.
  • strpbrk
동작원리는 strtok와 유사하지만, 전체 string을 변경하지는 않고, 두번째 argument가 상위 delimiter 개념하고
동일하다고 생각하고 , delimiter들의 위치만 알려준다고 생각하면 되겠다. .

delimiter를 제거하기위해 항상 pointer에 +1를 해줘야 한다. 


https://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm
https://www.tutorialspoint.com/c_standard_library/c_function_strpbrk.htm

9/09/2016

HxD (Hex 보기 프로그램)

윈도우에서 Hex File을 보고 싶다며 아래와 같이 HxD를 이용하여 사용해보자.
Linux에서는 hd/hexdump가 존재한다.

Download
  https://mh-nexus.de/en/hxd/




9/07/2016

IoT Information 관련자료수집

1. IoT의 기본개념 

한국에서는 사물 인터넷이라고 부르며, IoT( Internet of Thing) 이다,
개별 Device에 센서를 부착하고 , 인터넷과 연동하여 쉽게 이 Device와 센서를 제어하는 것이 기본 목적이다.

   https://ko.wikipedia.org/wiki/%EC%82%AC%EB%AC%BC_%EC%9D%B8%ED%84%B0%EB%84%B7


1.1 IoT의 기본구조 

IoT 쪽의 장비인 이 System은 무선으로 연결되는 Device와 Sensor가 핵심이며,
Server는 Cloud로 운영되는 서비스를 이용하여 이곳과 연결하여, 모바일이나 PC와 쉽게 제어가 가능하게하는 게
기본 목적이며,  핵심기능이다.

더불어, 이 Cloud에서는 이 Sensor에서 들어온 정보들을 바탕으로 이를 저장하고, 분석하고,
Cloud 기반으로 된 곳에서 다양한 API를 제공받아 Service를 구현을 하는 것이다.

현재 Cloud Service를 해주는 Global 회사들은 많으며, 이를 이용하여 효율적이고, 다양한 장비를
만드는 것이다.


1.2 IoT 현재 흐름

초반의 IoT는 LTE ,WiFi or Bluetooth 기반으로 통신하여 했지만, 통신업체들이 참가하면서,
WiFi가 아닌 다른 무선방식의 Service를 제공하여 그 영역을 확장해나가고 있으며

IoT에서 무선방식의 선택도 중요한 부분으로 자리잡아가고 있다.


출처: https://en.wikipedia.org/wiki/Internet_of_things


  https://en.wikipedia.org/wiki/Internet_of_things


2. IoT General Service Providers

IoT 를 기본적으로 Service 를 해주는 업체들이며, Apple도 한다고 하는데 그 부분은 추후
봐야겠다.

2.1 Google

다양한 API를 제공을 하고 있으며, 사이트를 가봐도 쉽게 사용이 가능할 것 같다.
다만, 통신방식이 HTTP2까지 지원을 한다고 하며,

A. 통신방식 
 
   gRPC
   http://www.grpc.io/

   HTTP2/HTTP1/HTTPS

B. How To install Cloud SDK

   https://cloud.google.com/sdk/downloads?hl=ko


C. Cloud 서비스

아래 사이트가면 Google에서 제공해주는 Service들을 확인가능하다.
기회가 되면 본인도 해보고 싶지만, 아직 이 시장이 대기업 위주로 편중되어 있는 것 같다.

   https://cloud.google.com/products/?hl=ko

2.2 Samsung Service (artik)

삼성의 Cloud 서비스이며 , 역시 핵심은 Cloud Service이며 SDK 제공 여부이다.

   https://www.artik.io/

2.3 Amazon Service

아마존은 SDK 제공을 한다고 하니,

   https://aws.amazon.com/ko/iot/


3. IoT Telecom Service Proviers


아래와 같이 근접 무선통신과 원거리 무선통신이면서, low power를 사용하는 기술이 존재하며,
이를 SKT와 KT, LG에서 서비스를 시작하고 있다.

출처: https://www.opensensors.io/connectivity

Telecom 회사들의 IoT Service는 약간 다르지만, 기본서비스는 거의 비슷하고 동일할 것 같다.
하지만, 무선 Protocol System이 LTE-M or Lora 사용을 하며, 그 기능은 아래와 같다.
이 기반으로 자신들의 모듈을 제공을 하며, 저전력 MPU(Micom) or MPU(Micom)에 연결하여
동작하며, 저전력 MPU와 센서를 함께 사용할 경우, 아직 배터리 사용은 정확히 예측이 힘들다.

Lora인 경우는 Data 전송률은 적지만, 반경이 상당히 넓을 뿐만 아니라, Power 소비가 적어 이를 강점으로
내세우며 Cloud와 함께 Service 할 예정이다.








출처:
   http://www.netmanias.com/ko/post/blog/8691/iot-kt-lte-lte-m-nb-iot/kt-s-the-world-first-nationwide-lte-m-network-and-iot-strategy


3.1 SKT

Lora 기반으로 IoT Cloud Serivce를 진행을 한다고 하며, OPEN 상태로 진행을 하며,
업체당 무료로 Sample 하나식 Lora 모듈을 지급을 해주고 있다.
   https://lora.sktiot.com/main/index.do


SKT에서 현재 서비스를 진행하고 있는 내용
   https://lora.sktiot.com/introduction/technology/main.do
   http://theplot.kr/40068


3.2 KT

원래는 SIGFOX였으나, 이부분이 실패되고, LTE-M으로 변경이 되었으며,
Cloud 서비스 역시 반오프상태로 한다고 한다.
   http://gigaiot.olleh.com/bcc/#/home


4. IoT의 상용화


4.1 LG U+ Smart Home Service

   http://www.uplus.co.kr/ent/iot/IotInfo.hpi?mid=6786

4.2 KT IoT 상용서비스 

   https://product.olleh.com/wDic/productDetail.do?ItemCode=1072

4.3 Smart Farm

   http://www.smartfarmkorea.net/itis/main.do


5. IoT 관련 센서 

   http://smartiot.tistory.com/38
   http://www.sensor-insight.com/

   https://securityin.wordpress.com/2014/10/27/2-iot-%ED%95%B5%EC%8B%AC-%EC%9A%94%EC%86%8C-%EC%A0%95%EB%A6%AC-sensorsdevice/

관련기사
   http://www.ddaily.co.kr/news/article.html?no=140940

9/06/2016

TI-Sitara (AM437x) Benchmark Program (참조용)

TI에서 아래와 같이 ARM의 기본성능 TEST 할수 있는 방법제공을 해주어서,
본인도 새로 알게되었으며, 각각의 SOC의 성능을 측정을 할수 있는 App을 간단히 소개한다.

만약 존재하지 않는다면, 아래에 같이 Github에서 Download에서 다운로드에서 사용을해보자.

   https://en.wikipedia.org/wiki/NBench

1. Benchmark Test

1.1 CPU 기본성능 TEST

  • proc/cpuinfo : 가장기본적인 정보 
  • Dhrystone : CPU의 성능을 측정하는 방법으로, 별도의 프로그램이 필요.  
  • Whetstone : 유사하지만, 둘 사이의 차이점은 아직 발견을 못하겠음.
  • Linkpack: FPU 성능측정을 위해서 사용하면 되겠다.

Proc에서 제공해주는 기본적인 BogoMIPS가 있다.

# cat /proc/cpuinfo 
processor : 0
model name : ARMv7 Processor rev 10 (v7l)
BogoMIPS : 598.17
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpd32 
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x2
CPU part : 0xc09
CPU revision : 10

Hardware : Generic AM43 (Flattened Device Tree)
Revision : 0000
Serial  : 0000000000000000 
CPU를 기본적으로 측정하는 프로그램으로, MIPS로 나오며,

1.2 Dhrystone

사용법은 Benchmark할 횟수를 적어줘야한다.
단위는 DMIPS (Dhrystone MIPS) 이며, RISC와 CISC에 따라 알고리즘이 약간식 다르게 동작이 되는 것 같다.


# /usr/bin/dhrystone

Dhrystone Benchmark, Version 2.1 (Language: C)

Program compiled without 'register' attribute

Please give the number of runs through the benchmark: 40000000  // 이 값이 너무 작으면 측정이 제대로 안됨 

Execution starts, 40000000 runs through Dhrystone
Execution ends

Final values of the variables used in the benchmark:

Int_Glob:            5
        should be:   5
Bool_Glob:           1
        should be:   1
Ch_1_Glob:           A
        should be:   A
Ch_2_Glob:           B
        should be:   B
Arr_1_Glob[8]:       7
        should be:   7
Arr_2_Glob[8][7]:    40000010
        should be:   Number_Of_Runs + 10
Ptr_Glob->
  Ptr_Comp:          151560
        should be:   (implementation-dependent)
  Discr:             0
        should be:   0
  Enum_Comp:         2
        should be:   2
  Int_Comp:          17
        should be:   17
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob->
  Ptr_Comp:          151560
        should be:   (implementation-dependent), same as above
  Discr:             0
        should be:   0
  Enum_Comp:         1
        should be:   1
  Int_Comp:          18
        should be:   18
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc:           5
        should be:   5
Int_2_Loc:           13
        should be:   13
Int_3_Loc:           7
        should be:   7
Enum_Loc:            1
        should be:   1
Str_1_Loc:           DHRYSTONE PROGRAM, 1'ST STRING
        should be:   DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc:           DHRYSTONE PROGRAM, 2'ND STRING
        should be:   DHRYSTONE PROGRAM, 2'ND STRING

Microseconds for one run through Dhrystone:    0.2 
Dhrystones per Second:                      5000000.0 


위의 나온 결과로 아래와 같이 본인이 계산을 해야한다.

5000000.0 / 1757  = 2845.7598178713716562322140011383   // 1757로 나눈다.
2845.7598178713716562322140011383  / 1000MHz (CPU CLOCK) = 2.84 


CPU Clock     =  1000MHz
DMIPS / MHz =  2.84 DMIPS

   아래에서 Dhryston 관련사이트에서 확인 반드시 확인.
   https://en.wikipedia.org/wiki/Dhrystone

   ARM 관련 Chip들 DMIPS 정보를 보고 비교해보자.
   https://en.wikipedia.org/wiki/List_of_ARM_microarchitectures

   DMIPS 계산방법
   http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0273a/ar01s05.html


1.3 Whetstone

사용법은 Loop 횟수를 적어줘야한다.
나온결과는 Millions of Whetstone Instructions Per Second (MWIPS)


/usr/bin/whetstone 100000   // loop count를 입력해야한다. 

Loops: 100000, Iterations: 1, Duration: 6 sec.
C Converted Double Precision Whetstones: 1666.7 MIPS



   Whetstone 관련내용
   https://en.wikipedia.org/wiki/Whetstone_(benchmark)

1.4 Linpack

Floating Point Operation을 TEST하기 위한 Benchmark Program이라고 하며, output은 KFLOPS


# /usr/bin/linpack
Unrolled Single Precision Linpack

Unrolled Single Precision Linpack

     norm. resid      resid           machep         x[0]-1        x[n-1]-1
       1.6        3.80277634e-05  1.19209290e-07 -1.38282776e-05 -7.51018524e-06
    times are reported for matrices of order   100
      dgefa      dgesl      total       kflops     unit      ratio
 times for array with leading dimension of  201
       0.02       0.00       0.02      34333       0.06       0.36
       0.02       0.00       0.02      34333       0.06       0.36
       0.01       0.00       0.01      68667       0.03       0.18
       0.01       0.00       0.01      68667       0.03       0.18
 times for array with leading dimension of 200
       0.00       0.00       0.00        inf       0.00       0.00
       0.02       0.00       0.02      34333       0.06       0.36
       0.00       0.00       0.00        inf       0.00       0.00
       0.01       0.00       0.01     114444       0.02       0.11
Unrolled Single  Precision 68667 Kflops ; 10 Reps 

Linpack에 관련내용
   https://en.wikipedia.org/wiki/LINPACK_benchmarks


1.5 lmbench로 Memory 성능측정

lmbench의 한 bin 파일로 기본 사용법 lmbench package를 넣어 TEST 해보자.

//AM487x EVM TEST 

# bw_mem 1M rd
1.00 359.91

# bw_mem 1M wr
1.00 305.75

# bw_mem 1M rdwr
1.00 281.14

# bw_mem 1M cp
1.00 181.46

# bw_mem 1M fwr
1.00 676.59

# bw_mem 1M frd
1.00 269.40

# bw_mem 1M fcp
1.00 214.76

# bw_mem 1M bzero
1.00 675.68

# bw_mem 1M bcopy
1.00 252.87

  http://lmbench.sourceforge.net/cgi-bin/man?section=8&keyword=bw_mem



  • 시스템 관련 성능 측정

위에서 언급한 lmbench package이며, 다양한 TEST가 가능하다.
  1. RAM 관련 TEST 
  2. File 관련 TEST
  3. Network TEST
  4. TLB 및 Cache TEST
  5. UNIX Function Memory Map TEST 

각각의 지연시간(Latency)를 확인이 가능하며, 성능개선을 위해 알아 둬야 할 것 같다.
더불어 Hardware or Software 적으로 최적화를 진행을 하고 TEST를 해보면 추후
좋을 것 같다.

  http://lmbench.sourceforge.net/cgi-bin/man?keyword=lmbench&section=8


  • lmbench 소스와 관련사용법 TI에서 제공

아래의 사이트에서 자세한 기본사용법과 소스를 다운받아 사용해보자.

   http://processors.wiki.ti.com/index.php/Lmbench
   https://sourceforge.net/projects/lmbench/


2. BenchMark 관련소스 및 Bin Download

상위 CPU 관련 성능 측정관련 Source 및 Bin 파일

   https://github.com/tonyho/ARM_BenchMark