Programming 8

Venv 가상환경

Python 3.3 버젼 이상부터는 venv 모듈을 내장하고 있으므로 별도의 설치 없이 가상환경 생성이 가능하다. 가상환경 생성 python3 -m venv MyEnvironment 가상환경 생성을 하게 되면 해당 위치에 'MyEnvironment' 라는 이름의 가상환경 폴더가 생성된다. 가상환경 진입 python3 MyEnvironment/bin/activate 가상환경 종료 deactivate 설치된 패키지 목록 확인 pip3 list 패키지 목록 export pip3 freeze > requirements.txt 패키지 목록 import pip3 install -r requirements.txt

Programming/Python 2022.06.30

string literal은 어디에 저장될까?

C++ 프로그램에서 string 값을 어떤 변수에 담지 않고, 곧바로 값으로 표현한 것을 string literal 이라고 부른다. 그렇다면 string literal은 어디에 저장될까? Heap memory는 일단 절대 아닐 것이고, 그렇다면 Stack 인가? 정답은 둘다 아니다.. [저장되는 위치] ○ 스트링 리터럴은 대부분 내부적으로 메모리의 읽기 전용 영역에 저장된다. ▶ '대부분'인 이유는 이 동작이 platform 마다 다를 수 있기 때문이다. ▶ 하나의 예로, 간단한 구조를 가지는 칩에서는 read-only memory segment를 지원하지 않을 수 있기 때문에 writable 할 수 있다. ○ 읽기 전용 영역에서 데이터 영역 [저장되는 방식] ○ string은 static storage..

std::string_view

String view는 C++ 17부터 지원한다. [Background] string 타입 변수를 읽기만 하고 수정하지 않는 함수가 있다고 하자. C++17 이전에는 이 함수의 parameter type을 쉽게 결정할 수 없었다. 왜냐하면 string은 char[], char*, std::string 과 같이 종류가 다양하기 때문이다. 이런 문제를 해결하기 위해서 도입된 것이 string_view type이다. [string_view] ▶ string_view는 대부분 pass-by-value로 전달한다. string에 대한 pointer와 길이만 가지고 있기 때문에 복사하는데 오버헤드가 적기 때문이다. ▶ string_view를 사용하면 함수를 호출하는 부분에서 복사 연산이 발생하지 않는다. ▶ 따라서..

[Benchmark] Passing std::string as function parameter

어떤 class의 멤버변수로 string을 넘겨주어야 할 경우, 크게 두 가지 옵션이 있다. 1. const reference로 받은 뒤 멤버변수에 복사한다. 2. value로 받은 뒤 std::move를 사용해서 멤버변수를 초기화 시킨다. 이론상 2번 방법이 좀 더 효과적이라고 생각했는데, 실제 benchmark 결과 1번이 더 빠른 것을 확인했다. Function parameter로 받아은 값을 class member variable로 설정해야 하는 경우 이 경우에는 외부의 값을 받아서 class member variable로 설정해야 한다는 점에서 특수성이 생긴다. (주로 constructor에서 이런 작업들이 일어난다) (class member variable이 어떤 데이터의 reference v..

FFmpeg 사용법

[FFmpeg 이란?] 개념 : https://wikidocs.net/78484 설명: https://www.clien.net/service/board/lecture/15601536 [FFmpeg 설치] sudo apt update sudo apt install ffmpeg -y [FFmpeg 기본 명령어 구조] ffmpeg [global_option] -i [input_path] [output_path] [options] [동영상 to 동영상] ○ 동영상 사이즈 변환 ffmpeg -i input.mp4 -vf scale=1280:960 output.mp4 -c:v libs265 -an -x265-params crf=0 [동영상 to 이미지] ○ h265 → png ffmpeg -i ./input_vid..

Programming/Tools 2022.06.12

C++ 표준 난수 라이브러리 <random>

완벽한 Random number를 소프트웨어로 생성하기란 불가능하다. 그래서 의사(pseudo) 난수 생성기라고도 부른다. 무작위인 것 처럼 보이게 만드는 수학 공식에 따라 생성하기 때문이다. C++에서 제공하는 표준 난수 라이브러리를 사용하기 위해서는 아래와 같이 헤더를 추가해 주어야 한다. #include 기존의 C-style 난수 생성방법은 여러가지 문제들이 있었다. 이를 보완하기 위해서 C++에서는 좀 더 퀄리티가 좋은 난수 생성기를 제공한다. C++ radom 라이브러리는 크게 두 가지 구성으로 이루어져 있다. - Engine - Distribution Engine Engine은 기본적으로 uniform distribution을 따르는 random number를 생성해 준다. Engine은 se..

Doxygen 사용법

협업을 하면 누구나 느끼겠지만 사람에 따라 코딩 스타일이 천차 만별이다. 내가 짠 코드를 몇 년뒤에 봐도 '이게... 뭐하는 함수지' 라는 생각이 들 때도 있는데, 남이 짠 코드는 오죽하겠는가...! 그렇다고 코드 이해를 돕는답시고 소스코드 중간중간에 주석을 임의로 집어넣으면 오히려 가독성이 더 떨이지는 경우가 허다하다. 이런 것을 방지하기 위해서 꼭 쓰이는 것이 바로 Doxygen이다. 물론 best case는 doxygen도 필요없이 누가 봐도 명쾌한 코드를 짜는 것이지만 실제로 그렇게 되기란 쉽지 않다. Doxygen을 통해서 별도의 문서를 만들지 않고도 코드의 API document를 만들 수 있다. 이번 포스팅에서는 GUI를 사용하는 방법은 다루지 않고, 오직 터미널로 doxygen을 작성하는 ..

Programming/Tools 2022.03.25