Engineering 9

C++ STL 정리

STL은 4가지 분류로 나뉜다.ContainersAlgorithms numeric: 난수 생성 + 최적화된 array들을 기반한 알고리즘 algorithm: [begin, end) 기반으로 range 있는 container에 쓰는 알고리즘 IteratorsFunctors0. itoaC의 memset의 c++ version이다.수학적에서 관용적으로 쓰이던 표현이다. set of number 혹은 unit vector 쓴다. 그리스어로 짧은 문자이다.templatevoid iota( ForwardIt first, ForwardIt last, T value ); // (constexpr since C++20)https://en.cppreference.com/w/cpp/algorithm/iota1. copy_n..

Engineering/C++ 2024.12.19

C++17 Class Template Argument Deduction (CTAD)

C++ 17부터는 Class Template Argument Deduction이 적용된다. 말 그대로 template argument가 생략될 수 있다는 뜻이다.적용되는 분야는 다음과 같다.template으로 선언 돼 있는 변수를 초기화 할 때 (possibly cv-qualified):std::pair p{2,2.3}; // pairstd::tuple tp{"kor",2,'a'}; // std::make tuple new 표현식templatestruct A{ A(T, T);};auto y = new A{1, 2}; // allocated type is A함수 호출auto lck = std::lock_guard(mtx); // deduces to std::lock_guardstd::copy_..

Engineering/C++ 2024.12.19

C++에서 auto vs decltype vs typeid

C++를 하다 보면 타입이 맞지 않아 에러가 나는 경우가 많다. 이때마다 python의 type(class)이 부러워진다. 한편으론 생각 없이 auto와 decltype을 남발하면 되는 것이 아닌지 의구심이 든다. 하지만 C++의 장점은 이 타입을 강력하게 지켜준다는 것이다. 이 때문에 런타임에 발생할 에러를 미리 잡을 수 있고, 성능도 빨라진다.해당 포스트의 목표는 C++의 타입을 알 수 있는 세가지 방법, auto, decltype, typeid를 비교하는 것이다.1. auto와 decltype이들은 C++11에 추가된 기능이며, 근본은 generic programming에 근간을 두고 있다. template과 원리가 똑같다. 즉, user가 준 type에 맞춰서 코드를 생성해 준다. generic ..

Engineering/C++ 2024.06.10

C++에서 다양한 타입을 벡터 혹은 배열에 저장하는 법

역전파 코드를 개발 과정에서 문제점을 발견했다. 다른 class(type)의 레이어들을 어떻게 순서대로 방문할 것인가?  반복문을 쓰고 싶지만, vector나 array는 같은 타입의 묶음만 정의가 가능하다. 만약 이들을 순서대로 방문해 주는 자료형이 없다면 아래와 같이 하나씩 방문했을 것이다.// https://github.com/luckydipper/MNIST_DEEP_LEARNING_CLASSIFIERint main(){ neural::Linear l1{flatten_img_size, in_out_size[0]}, l2{in_out_size[0], in_out_size[1]}, l3{in_out_size[1], in_out_size[2]}, l4{in_out_size[2], in..

Engineering/C++ 2024.06.04

드론 프로젝트할 때 고려할 요소. ps. realtime video stream drone control

K-SW square 프로그램으로 Purdue 대학교에서 프로젝트를 하고 있다. 원래는 realtime video stream를 기반으로 드론을 제어하려고 했다. 그러나 많은 난관에 부딪혔다. 다른 분들은 이런 고생을 하지 않았으면 하는 마음에 글을 쓴다.0. 결론  만약 Realtime video streamming을 통해 드론 제어를 한다면 둘 중 하나를 선택할 것이다.wifi area에서 끝내려면 parrot bebop2을 사용할 것이다. 만약 wifi area 밖으로 보내려면 pixhawk를 통한 opensource 드론을 활용할 것이다.1. 어떤 UAV을 사용할 것인가?기체의 종류에 따른 UAV 분류.  multi copter, Fixed wing, VTOL (vertical take of an..

Engineering 2024.04.22

Docker hub에 image 올리는 법.

1. 어떤 docker image를 올릴 것인지 확인합니다. docker image ls 위 명령어를 통해 실행가능한 docker image들을 확인합니다. 2. user id 를 확인합니다. 제 user name는 luckydipper입니다. 3. docker login합니다. 만약 username이 길다면 bashrc에 export dockerId="user name"과 같이 등록해서 사용할 수 있다. docker login --username luckydipper 4. usernamer과 tag를 등록합니다. docker image tag gtsam_tutorial:0.6 luckydipper/gtsam_tutorial:0.6 5. docker hub에 올립니다. docker push luckydi..

Engineering 2024.02.03

Subnet mask의 정의

1. 서브넷이란 무엇일까요? wikipedia와 교과서에는 IP를 더 잘게 나누는 개념이라고 설명 돼 있습니다. 하지만 이러한 정의는 오해를 불러일으킬 수 있습니다. 네트워크에서 컴퓨터와 같은 엔드디바이스를 구분하기 위해 ip를 사용합니다. 이를 엔드디바이스에 IP를 할당한다는 표현을 씁니다. 그렇다면 한가지 의문점이 듭니다. 서브넷팅을 통해 ip를 더 많이 나눌 수 있다면, 엔드디바이스에 할당(identify) 할 수 있는 IP의 수는 늘어날까요? 정답은 아닙니다. subnet mask는 ip를 구분하기 위해 나누는 것이 아닌 IP를 그룹화 하기 위해 나눕니다. 즉 서브넷는 IP를 그룹화 해주는 도구입니다. 서브넷은 서브넷마스크를 통해 구현됩니다. 서브넷마스크는 앞부터 차례대로 1과 0의 집합으로 표현..

Engineering/Network 2024.01.27

CMake로 Opencv project 만들기!

개발 환경 : ubuntu20.04 소스 코드 : https://github.com/luckydipper/c_cpp_compile_process/tree/main/opencv_cmake_project 목차 1.어떻게 다운 받는가? 1.1 필수적으로 다운 받아야 하는 파일 1.2 선택적으로 받아야 하는 파일 1.3 프로젝트 directory 만들기 1.4 Build 하기 1.5 다운로드 완료 확인 2. 2. 예제 2.1 파일 구조 2.2 코드 2.3 CMakeLists 2.4 Build 2.5 Execute 0. 그냥 종속성을 고려해서 다운받고 싶으면 아래 커맨드를 입력하면 된다. sudo apt-get install livopencv-dev 1. 어떻게 다운 받는가? 1.1 필수적으로 다운 받아야 하는 ..

Engineering/DEV-OPs 2024.01.26

MacOS에서 x11프로토콜로 opencv imshow() 확인 하기

Docker container 안에서 실행한 opencv 의 imshow를 어떻게 볼 수 있는지에 관한 코드입니다. 1. docker를 다운로드 https://docs.docker.com/desktop/install/mac-install/ 해당 링크에 들어가서 docker를 다운받습니다. 2. X11, XQuartz 다운로드 Mac 컴퓨터에 brew를 다운 받은 후, 터미널에 brew install --cask xquartz 을 통해 다운 받습니다. 3. XQuartz 보안 설정을 변경 4. docker image를 build Dockerfile FROM ubuntu:22.04 RUN apt-get update ARG DEBIAN_FRONTEND=noninteractive RUN apt-get insta..

Engineering/DEV-OPs 2024.01.24