Subin

Mechanical & Software Engneering

[SW개발방법및도구 #1] Select a specific programming language

소프트웨어개발방법및도구
Report #1
양수빈
2018.03.15

Select a specific programming language

1.Define your problem(domain)

Hardware dependent problem

미래자동차로봇트랙으로써 프로그래밍으로 하드웨어를 제어하는 일에 관심이 있어서, 하드웨어와 관련된 주제를 설정하였다. 강의 자료, 추가 자료 등을 바탕으로 작성하였습니다.

2.Review widely used domain specific languages

   A. Generally : C/C++ / Assembly

일반적으로 C/C++/Assembly 언어를 하드웨어와 관련된 작업에 사용합니다. 이러한 언어들로 컴퓨터의 특정 물리적 메모리에 입력할 수 있다.

   B. Arduino Kit : C 기반의 언어

아두이노는 자체적인 IDE인 Sketch를 통해 C 기반의 언어를 사용합니다. C언어보다 쉬운 언어로 되어 있어 보다 쉽게 프로그래밍 할 수 있다.

    C. RaspberryPi : Python

라즈베리파이는 주요 언어로 파이썬을 사용한다. 라즈베리파이의 ‘Pi’는 기기의 주요 언어를 파이썬으로 정하여 붙여졌다고 한다.

    D. Linux/Unix kernel : C/C++

리눅스/유닉스와 유닉스 커널은 C/C++로 만들어졌다.

    E. MacOS kernel : Objective-C/Swift

MacOS는 유닉스 계열의 OS로 처음엔 C언어 계열인 Objective-C를 사용하다가 현재는 Swift로 옮기고 있다.

3.Select an appropriate language and study

C & C++

A. Language author

Language C C++
Author Dennis Ritchie Bjarne Stroustrup

B. When and Why author made the language

Language C C++
연도 1969~1973 1979

      i. C언어의 역사

벨 연구소에서 1971년경부터 리치(D.M.Ritchie) 등에 의해서 설계 개발된 시스템 기술용의 프로그래밍 언어이다. UNIX 오퍼레이팅 시스템의 기술에 사용할 것을 목적으로 설계한 언어로 UNIX OS의 대부분이 이 언어로 개발되었다. 컴퓨터의 구조에 밀착한 기초 기술이 가능한 것과 간결한 표기가 될 수 있는 것 등을 특징으로 하고 있다.

http://terms.naver.com/entry.nhn?docId=1179633&cid=40942&categoryId=32838

[네이버 지식백과] C언어 [C language] (두산백과)

        ii. C++의 역사

1980년대까지 전세계적으로 가장 많은 사람들에게 사랑을 받고 가장 널리 사용된 프로그래밍 전문 언어는 C이다. 하지만 C언어 역시 한계에 부딪치게 되었고 이에 따라 고도로 복잡한 프로그램을 관리하기 위하여 C++가 탄생하게 되었다.

C++는 처음 소개된 이후로 1985년과 1989년, 그리고 C++에 ANSI표준을 적용하기 시작한 시기 등 3번에 거처 개정되었다. 1994년에 최초로 표준안이 발표되었으며 ANSI C++위원회는 사실상 스트루스트럽(C개발자)이 설정한 모든 사양을 그대로 수용하고 그외의 약간의 사양을 덧붙였다. 그렇기 때문에 C++는 C프로그래머가 쉽게 C++를 사용할 수 있다는 관련성에서 큰 장점이 있다.

http://terms.naver.com/entry.nhn?docId=1179635&cid=40942&categoryId=32838

[네이버 지식백과] C++ (두산백과)

    C. Pros and Cons of the language

        i. 특징 표

Language C C++
특징 절차지향적 언어 Low-level 언어 Cross-platform   객체지향적 언어 Class 다른 사용자의 코드를 가져와서 사용하기 편리함

C언어는 절차지향적 특징을 가지고 있다. 절차지향적 프로그래밍은 정해진 순서대로 프로그래밍을 하는 것인데, 인간의 일반적인 사고방식과 비슷하여 배우기 쉽다고 한다. 이식성이 좋아서 CPU와 운영체제가 다른 기종에서도 실행이 가능한 부분이 있다. 메모리를 적게 차지하며 처리속도가 빠르고 생산성이 좋다. Type(자료형) 검사나 배열에서 첨자의 범위를 검사하는 기능이 미약한 부분이 있어서 에러가 생길 수 있다. 문자 처리 과정에서 실수가 있으면 치명적 문제가 생길 수 있다고 한다.

C++언어는 객체지향적 특징을 가지고 있어 구조화 된 프로그램을 만들 수 있다. 어느 한 부분이 잘못 만들어질 경우 그 부분만 수정하여 문제를 해결할 수 있다. 다른 부분의 코드를 가져와서 사용하기도 쉽다. C++은 배우기가 어렵다는 단점이 있다.

        ii. C/C++의 하드웨어와 관련된특징

            1) Physical memory management : 컴퓨터의 물리적 메모리에 직접 읽고 쓸 수 있음

포인터 Pointer in C/C++
컴퓨터의 프로그램 용어로, 처리하려는 데이터나 프로그램 등이 기억되어 있는 기억 장치의 주소를 지정하는 것.

포인터(pointer)는 프로그래밍 언어에서 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 말한다.

http://terms.naver.com/entry.nhn?docId=1604952&cid=50372&categoryId=50372

 https://ko.wikipedia.org/wiki/%ED%8F%AC%EC%9D%B8%ED%84%B0_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)

            2) Bit manipulation inside a Byte: 비트 단위로 조작할 수 있음

비트 연산(Bitwise operation)은 한 개 혹은 두 개의 이진수에 대해 비트 단위로 적용되는 연산이다. 

https://ko.wikipedia.org/wiki/%EB%B9%84%ED%8A%B8_%EC%97%B0%EC%82%B0

 https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html

    D. Standard and/or Roadmap of the language

C언어는 1989년 American National Standards Institute(ANSI) 표준이 되었고 뒤이어 International Organization for Standardization(ISO)의 표준이 되었다.

C++은 98년 표준이 생겨 C++98이 생겼다.

C++ 로드맵

4. Famous open source softwares using the language

        1) Linux

OS

유닉스가 처음에 C로 짜여짐. 리눅스는 유닉스 변종

1991년 11월에 리누스 토르발즈(Linus Torvalds)가

버전 0.02을 공개한 유닉스 기반 개인컴퓨터용 공개 운영체제이다.

1989년 핀란드 헬싱키대학에 재학중이던 리누스 토르발스(Linus Torvalds)가 유닉스를 기반으로 개발한 공개용 오퍼레이팅시스템(OS)으로, 1991년 11월 버전 0.02이 일반에 공개되면서 확대 보급되기 시작하였다. 유닉스(Unix)가 중대형 컴퓨터에서 주로 사용되는 것과는 달리, 리눅스는 워크스테이션이나 개인용 컴퓨터에서 주로 활용한다.

리눅스는 소스 코드를 완전 무료로 공개하여 전세계적으로 약 5백만 명이 넘는 프로그램 개발자 그룹을 형성하게 되었으며, 이들에 의해 단일 운영체제의 독점이 아닌 다수를 위한 공개라는 원칙하에 지속적인 업그레이드가 이루어지고 있다.

파일구성이나 시스템기능의 일부는 유닉스를 기반으로 하면서, 핵심 커널 부분은 유닉스와 다르게 작성되어 있다. 인터넷 프로토콜인 TCP/IP를 강력하게 지원하는 등 네트워킹에 특히 강점을 지니고 있으며, 유닉스와 거의 유사한 환경을 제공하면서 무료라는 장점 때문에 프로그램 개발자 및 학교 등을 중심으로 급속히 사용이 확대되고 있다.

리눅스는 각종 주변기기에 따라 혹은 사용하는 시스템의 특성에 맞게 소스를 변경할 수 있으므로 다양한 변종이 출현하고 있다.

[네이버 지식백과] 리눅스 [Linux] (두산백과)

http://terms.naver.com/entry.nhn?docId=1180044&cid=40942&categoryId=32839

예시

토요타가 자동차에 리눅스 설치하는 이유는?

토요타가 신형 캠리 미국형 모델에 ‘AGL’이 개발한 인포테인먼트 시스템을 얹는다. AGL은 자동차용 리눅스 플랫폼 개발 및 적용을 위해 토요타를 비롯한 수십개 회원사가 협력하는 오픈 소스 프로젝트다. 닛, 혼다, 메르세데스-벤츠, JLR, 파나소닉, 덴소, NTT데이터 등 참여하는 회원사들의 규모도 화려하다. (중략)

http://m.post.naver.com/viewer/postView.nhn?volumeNo=10009845&memberNo=21556957&vType=VERTICAL

            2) OpenCV(Open Source Computer Vision)

Library

오픈 소스 컴퓨터 비전 라이브러리. 실시간 이미지 프로세싱에 중점을 둔 라이브러리이다.

윈도우, 리눅스 등의 여러 플랫폼에서 사용 가능하다. C/C++/Python으로 사용할 수 있다.

 https://opencv.org/

 https://github.com/opencv/opencv

책 한 권 소개

Computer Vision

컴퓨터 비전은 추가 설명

컴퓨터비전은 기계의 시각에 해당하는 부분을 연구하는 분야이다. 어떤 영상에서 장면이나 특징들을 이해하는 컴퓨터를 프로그램 하는 것이 목적이다. 기계와 로봇의 눈에 해당하는 카메라를 통해 사람이나 사물을 인식한다. 쓰여진 알고리즘을 통해 어떤 물체인지 알아볼 수 있다.

Computer vision에 대해서 잘 정리해놓은 페이지를 소개한다.

 http://www.aistudy.co.kr/physiology/vision/computer_vision.htm

개요부터 시작하여 definition, term, site, lab, demo, paper까지 항목별로 정리되어 있다.

페이스북 딥러닝 프레임워크 카페투(Cafe02)기반 이미지 인식기술 ‘디텍트론(Detectron)’을 사용한 프로젝트 중 하나인 사물탐지 연구프로젝트 ‘마스크-CNN 결과물 예시’

파이썬으로 만들었다고 하지만 사진이 인식기술 예시여서 가져왔다.

http://www.zdnet.co.kr/news/news_view.asp?artice_id=20180125091145&type=det&re=

얼굴인식 : 스노우(SNOW) 카메라 어플https://snow.me/

https://snow.me/

‘SNOW 일상이 특별해지는 AR 카메라’ 라고 홈페이지에 소개하고 있다.

스노우 치킨 먹는 얼굴인식 예시 기사

http://mnb.moneys.mt.co.kr/mnbview.php?type=1&no=2017080412578050365&outlink=1&ref=https%3A%2F%2Fsearch.naver.com

40 total views, 2 views today

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다