미물님 블로그에서 좋은 글귀

https://www.mimul.com/blog

코드는 쓸 때(Write)보다 읽을 때(Read) 많은 비용이 발생한다. 횟수도 훨씬 많음

 

 

 

 

https://google.github.io/styleguide/cppguide.html

 

Google C++ Style Guide

 

google.github.io

https://jongwook.kim/google-styleguide/trunk/cppguide.xml

한국어로 번역된 C++ Style Guide

 

영상처리할 때 필수품 !

 

OpenCV

 

많은 기능들을 OpenCV로 손쉽게 사용할 수 있어요

 

설치 환경은 윈도우 10, Visual Studio 2017, OpenCV 4.3.0입니다.

 

https://opencv.org/releases/

 

Releases

 

opencv.org

 

저는 C에다가 바로 깔았어요

 

이제 환경변수 등록입니다.

(환경변수 등록을 하는 이유는 나중에 dll 에러가 나는 경우를 방지)

 

C:\opencv\build\x64\vc15\bin을 시스템 변수 Path에 추가해줍니다.

 

여기서 Visual studio가 2017보다 구버전이면 vc14로 변경하여 추가해줍니다.

 

이제 환경변수 등록도 끝났으니 Visual Studio로 가봅시다~

프로젝트를 하나 생성해주시고

디버그 옵션은 64비트로 변경!

 

소스파일에 test.cpp를 추가해줍니다.

 

현재 상황!

이제 프로젝트 속성을 변경해줍니다.

구성 모든 구성으로 하시고 C/C++ 일반에 추가 포함 디렉터리에 C:\opencv\build\include를 입력해주세요

마찬가지로 모든 구성에서 링커 일반에 추가 라이브러리 디렉터리에 C:\opencv\build\x64\vc15\lib를 입력해주세요

구성을 Debug로 바꾸고 opencv_world430d.lib를 입력해주세요.

구성을 Release로 바꾸고 opencv_world430.lib를 입력해주세요.

 

그러면 OpenCV가 잘 설치되었는지 Test코드를 실행해보겠습니다.

 

웹캠 영상을 출력하는 코드에요!

 

/**
@file videocapture_basic.cpp
@brief A very basic sample for using VideoCapture and VideoWriter
@author PkLab.net
@date Aug 24, 2016
*/

#include <opencv2\opencv.hpp>
#include <iostream>
#include <stdio.h>

using namespace cv;
using namespace std;

int main(int, char**)
{
	Mat frame;
	//--- INITIALIZE VIDEOCAPTURE
	VideoCapture cap;
	// open the default camera using default API
	cap.open(0);
	// OR advance usage: select any API backend
	int deviceID = 0;             // 0 = open default camera
	int apiID = cv::CAP_ANY;      // 0 = autodetect default API
								  // open selected camera using selected API
	cap.open(deviceID + apiID);
	// check if we succeeded
	if (!cap.isOpened()) {
		cerr << "ERROR! Unable to open camera\n";
		return -1;
	}

	//--- GRAB AND WRITE LOOP
	cout << "Start grabbing" << endl
		<< "Press any key to terminate" << endl;
	for (;;)
	{
		// wait for a new frame from camera and store it into 'frame'
		cap.read(frame);
		// check if we succeeded
		if (frame.empty()) {
			cerr << "ERROR! blank frame grabbed\n";
			break;
		}
		// show live and wait for a key with timeout long enough to show images
		imshow("Live", frame);
		if (waitKey(5) >= 0)
			break;
	}
	// the camera will be deinitialized automatically in VideoCapture destructor
	return 0;
}

 그리고 F5를 눌러 실행시켜줍니다.

바로 잘 되면 성공!

하지만 opencv_world.dll 오류 경고가 뜬다면 다음과 같이 해결해주시면 됩니다.

프로젝트 폴더에

C:\opencv\build\x64\vc15\bin에 있는 opencv_world430.dll, opencv_world430d.dll 파일을 넣어줍니다.

 

그리고 다시 F5로 실행하면 웹캠 영상이 잘 출력됩니다!

고생하셨습니다.

아나콘다는 파이썬에 관련된 라이브러리, 패키지를 손쉽게 설치해주는 툴입니다.

https://www.anaconda.com/distribution/

 

Anaconda Python/R Distribution - Free Download

Anaconda Distribution is the world's most popular Python data science platform. Download the free version to access over 1500 data science packages and manage libraries and dependencies with Conda.

www.anaconda.com

스크롤을 조금만 내려서 윈도우용 64비트 설치 파일을 다운받아주세요!

 

설치파일을 실행하여 Next를 쭉쭉 누르고

이 두 가지만 이렇게 설정해주시면 됩니다.

짜잔~

 

그리고 아나콘다가 제대로 설치되었는지 테스트할 겸 tensorflow를 설치해보겠습니다.

 

tensorflow 사용하실 분만 설치하시면 돼요!

 

위에 보이는 Anaconda Prompt를 관리자 권한으로 실행해줍니다.

python -m pip install --upgrade pip
conda create -n tensorflow python=3.7

 

위의 두줄을 입력해주고 proceed(y/n) Y를 입력해줍니다.

첫 번째 줄은 pip 업데이트, 두 번째 줄은 가상환경 만들기입니다.

activate tensorflow
pip install tensorflow==2.0

이제 실질적으로 tensorflow를 설치했습니다.

(그냥 pip install tensorflow하면 ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다. 에러가 떠서 2.0으로 설치했습니다. 구글링 결과 엔디비아나 GPU문제인 거 같네요)

https://webnautes.tistory.com/1395 

참고!

python
import tensorflow as tf

여기서 import가 정상적으로 되면 tensorflow 설치 성공!

고생하셨습니다~!

 

추가적으로 여기서 Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 경고가 뜰 수 있다. 경고라서 무시하셔도 됩니다.

https://blog.naver.com/PostView.nhn?blogId=complusblog&logNo=221237740617&parentCategoryNo=&categoryNo=206&viewDate=&isShowPopularPosts=true&from=search

참고하시면 좋을듯!

 

추가적으로 AttributeError: module 'tensorflow' has no attribute 'Session' 오류가 날 수 있다.

https://blog.naver.com/jjgu24/221724029058

참고하시면 좋을듯

파이썬 사무자동화, 인공지능에 관심이 있는데 파이썬이 최고인 거 같아서 파이썬 설치하며 포스팅합니다.

 

우선 파이썬 설치파일부터 받아줍니다.
https://www.python.org/downloads/release/python-377/

 

Python Release Python 3.7.7

The official home of the Python Programming Language

www.python.org

윈도우 실행파일을 다운받아요!

빨간 박스 체크를 해줍니다. 그리고 Install Now!!!(환경변수 등록)

설치가 다 되면 Disable path length limit을 클릭해줍니다.

환경변수 길이제한을 풀어주는 거에요!

그리고 파이썬을 실행해줍니다.

일단 설치 완료!

 

다음 포스팅은 아나콘다, 파이참 포스팅 할게요!

extern

 

다른 c파일에서 변수, 함수를 공유하기 위해서 사용한다.

 

예를 들면 aaa.c에서 int a =1; 를 선언했다고 하자.

bbb.c에서 a를 참조하려면 extern int a; 로 a 변수를 참조할 수 있다.

 

 

static

 

extern과 달리 다른 c파일에서 참조하는 것을 막기위해 사용한다.

 

한 파일 내에서는 전역변수로 사용한다.

 

aaa.c에서 static int a = 1;로 선언하면 bbb.c에서 aaa.c가 선언한 a를 참조할 수 없다.

 

그냥 지역변수는 선언된 블록 내에서 사용 가능하다.

 

const 

 

이미 assign  된 값을 변경할 수 없게 해준다.

 

예외도 있다.

 

const int i = 0;

*(int*)(&i) = 1; 은 가능하다.

 

여기서 #define a = 1; vs const a = 1; 의 차이점은

 

const는 메모리가 할당됨으로써 디버깅 시에 메모리 값을 확인할 수 있다,

 

volatile  

 

const와 반대로 변수가 언제 어떻게 바뀔지 모른다고 알려주기위해 사용한다.

 

컴파일러는 volatile 변수는 최적화에서 제외하여 항상 메모리에 접근하도록 한다.

 

예를 들어 

int main()
{
	int i=0;

	while (i < 10)
		i++;

}

위의 코드를 아래와 같이 최적화 시킨다.

int main()
{
	int i = 10;


}

하지만 volatile을 사용하면

int main()
{
	volatile int i=0;

	while (i < 10)
		i++;

}

그냥 코드 그대로 컴파일한다.

 

extern const volatile int a;

 

const, volatile은 반대 개념인대 위와 같이 사용했다면

 

a가 하드웨어에 의해 변경될 수 있지만 (volatile), 프로그램 내부에서는 값이 변경될 수 없음을 뜻한다. (const)

 

https://dojang.io/mod/page/view.php?id=749

 

C 언어 코딩 도장: 85.15 volatile 변수

변수를 선언할 때 앞에 volatile을 붙이면 컴파일러는 해당 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듭니다. volatile 자료형 변수이름; volatile int num1 = 10; // 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듦 volatile로 선언한 변수는 사용할 때 항상 메모리에 접근합니다. 즉, 이 변수는 언제든지 값이 바뀔 수 있으니까 항상 메모리에 접근하라고 컴파일러에게 알려주는 것입니다. 예를 들어 다음과

dojang.io

https://littlepenguin.tistory.com/7

 

C 언어 키워드 정리 (const / register / static / volatile / inline)

리눅스 커널 코드를 보면서 자주 만나던 키워드들과 기타 키워드들을 정리해봤다. const declaration할 때 assign된 값을 변경할 수 없게 해주는 키워드다. const int a = 10; a = 11; 따위를 할 수 없다. *(&a) =..

littlepenguin.tistory.com

 

register

 

많이 사용하는 변수를 register 에 넣고 사용한다.

 

최적화 옵션을 켜면 자동으로 자주 사용하는 변수는 register에 넣어진다.

 

 

비트 필드란?

 

보통 구조체는 기본 데이터 형들이 모여 구성됩니다.

 

예를들면 이로케?

struct Person
{
	double height; 
	float weight;
	int age;
};


struct Family
{
	Person son, mom, dad;
};

하지만 이러면 메모리가 부족할 때 좀 알뜰하게 사용하는데에는 무리가 있습니다.

 

예를 들면 1바이트에 7개의 비트를 활용하고 싶을때나

 

메모리를 최대한 아끼고 싶을 때 등등이 있겠죠

 

아래는 제가 인터넷에 돌아다니는 예제를 활용해 다듬은 코드입니다.

 

아래의 코드를 통해 알 수 있는 점은

 

hwf의 x, y, z 변수에 똑같은 2진수 1111을 넣었지만

 

x는 1비트, y는 2비트 z는 3비트 할당 받았기 때문에 결과값이 다르게 출력됩니다.

#include<stdio.h>

struct flags {
	unsigned int x : 1;
	unsigned int y : 2;
	unsigned int z : 3;
};

void printbit(unsigned int);

int main(void)
{
	struct flags hwf;

	hwf.x = 0b1111;
	hwf.y = 0b1111;
	hwf.z = 0b1111;

	printf("\nhwf.x= ");
	printbit(hwf.x);
	printf("\nhwf.y= ");
	printbit(hwf.y);
	printf("\nhwf.z= ");
	printbit(hwf.z);
	getchar();
}

void printbit(unsigned int inputt)
{
	unsigned int mask = 1;

	for (int i = 3; i >= 0; i--)
	{
		mask = 1 << i;
		printf("%d", inputt & mask ? 1 : 0);
	}

}

x는 1비트 할당 받았으니까 1111중에 1만 

 

y는 2비트 할당 받았으니까 1111 중에 11까지만

 

z는 3비트 할당 받았으니까 1111 중에 111까지!

 

유용한 비트필드 포스팅 끝~~~~

스크럼은 애자일 개발 프로세스입니다.

 

우선 스크럼의 유래가 있는데요. 럭비에서 유래된 용어입니다.

스크럼의 목적은 사소한 반칙이나 정지 후에 빠르고, 안전하게 그리고 공정하게 플레이를 재개하기 위한 것이다. 각 팀에서 8명의 선수들이 세 줄로 서로 바인드하고, 상대측과 밀착하여 각 팀의 프론트 로의 머리가 서로 엇갈리도록 형성하는 것이다. 이와같이 하면 스크럼 하프가 볼을 투입할 수 있는 터널이 만들어져 프론트로 선수들이 그들의 두 발 중 하나로 후킹함으로서 볼 소유를 위해 경쟁할 수 있게 된다.

 

간단히 말하면 여럿이 똘똘 뭉쳐 힘을 쓰는 것을 스크럼을 짠다 라고 표현합니다.

 

서로 협업하여 개발하는 모습으 보고 용어를 따온 거 같아요.

네이버 지식백과

스크럼 프로세스 그림입니다.

 

애자일, 스크럼을 보면 스프린트란 단어가 많이 나옵니다.

 

스프린트(Sprint)란?

 

특정 기능에 대한 계획 - 개발 - 테스트 - 기능구현 주기입니다.

 

 

스크럼 - 위키백과 요약

 

특성

솔루션에 포함할 기능/개선점에 대한 우선순위를 부여

개발 주기는 30일 정도로 조절

개발 주기마다 적용할 기능이나 개선에 대한 목록 제공

날마다 15분 정도 회의

항상 팀 단위로 생각

원활한 의사소통을 위하여 구분 없는 열린 공간을 유지

 

추구 가치

확약(약속한 것 실현), 전념(확약한 것의 실현에 전념), 정직, 존중, 용기

 

정리하자면 스크럼은 애자일 개발 방법론 중 하나이며

15분의 회의를 매일 하면서 스프린트라는 개발 주기를 정하고

개발 주기마다 계획들을 구현합니다.

그리고 스프린트가 끝날 때 마다 검토회의를 통해 피드백을 받으며 개선해 나갑니다, 

 

 

https://tv.naver.com/v/5619624

 

수평적인 눈높이로 업무 공유, 일어나서 하는 회의 '스크럼 회의'

해볼라고 | 갑자기 울려 퍼지는 김광석의 '일어나'♪ 음악 소리에 맞춰 일어나는 사람들? 부서별로 모여 아침에 그날 업무 일정 및 이슈 사항을 자유롭게 이야기하는 시간 최근 IT기업 등에서 많이 하는 회의 형식

tv.naver.com

스크럼의 일부인 스크럼 회의를 보여주네요.

 

수평적인 분위기, 15분, 유연근무제 키워드를 유의하면 좋은 방식인 회의 같습니다.

 

https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%B8%8C%EC%98%B5%EC%8A%A4

데브옵스란 소프트웨어의 개발(Development)과 운영(Operations)의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다. 데브옵스는 소프트웨어 개발조직과 운영조직간의 상호 의존적 대응이며 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 한다.

 

목적

- 제품 출시까지 걸리는 기간 단축

- 새로운 판의 더 낮은 실패율

- 픽스 간 짧아진 리드타임

- 복구 시 더 빠른 평균 시간

 

툴체인 : 코드, 빌드, 테스트, 패키지, 릴리즈, 구성, 모니터링

https://intland.com/codebeamer/devops-it-operations/

//이상 위키백과

 

장점

- 속도 : 작업속도 향상

- 신속한 제공 : 릴리즈 속도 향샹

- 안정성 : 품질 향상

- 확장 가능 : 자동화에 따른 시스템 효율적 관리

- 협업 강화

- 보안

 

데브옵스의 키워드는 빠름

 

소규모 업데이트를 자주 수행하여 고객요구를 빠르게 수용

또한 각 배포의 위험성을 낮추고 변화가 작아져 복합도 감소 -> 릴리즈 실패 확률 감소

 

마이크로 서비스 아키텍쳐를 통한 유연성과 혁신속도 향상 (대규모의 시스템을 간단하고 독립적 결합, 해제)

 

 

 

 

 

 

개발팀과 운영팀의 소통이 원활하지 않는 회사에서는 DevOps의 장점과 원리만 이해하고 적용하려 노력하면

장기적으로 큰 발전이 될듯

 

여기서 유의할 점은 개발팀이나 운영팀에게 업무가 가중되는 느낌이 들면 실패하는 데브옵스 적용

 

데브옵스 엔지니어의 구체적인 역할, 툴, 현 위치

http://www.itworld.co.kr/news/118329

 

“몸값 상승 중” 데브옵스 엔지니어의 역할과 조건, 대우

데브옵스를 요약해서 설명하면 이전까지 외따로 분리되어 있던 개발(애플리케이션을 만드는 이들)과 운영(이 애플리케이션이 정상적으로 작동하도록 하는 이들)을 하나의 팀으로 통합하고자 하는 문화이자 철학이다. 통합 팀은 지속적 통합과 지속적 전달, 테스트를 사용해서 기존 코드베이스를 자주, 증분적으로 개선해 프로덕션으로 배포한다.데브옵스 엔지니어는 이런 팀에서 활동하기 위해 필요한 기술을 갖춘 사람이다. 그러나 데브옵스의 모든 것이 그렇듯이, 데브옵스 엔

www.itworld.co.kr

현실적인 데브옵스 적용의 어려움, 임원급들의 인식 문제

https://brunch.co.kr/@fits-b/2

 

데브옵스(DevOps)를 하지 말아야 할 기업이 있다

디지털 트랜스포메이션에 대하여- 2 | 저번 애자일 관련 글에 이어서, 이번 글에서는 또 하나의 핫이슈인 데브옵스(DevOps)의 개념을 간단하게 알아보고, 기업에서 적용할 때 고려해야 할 부분을 논의하겠습니다. 이 글에서도 개발자 위주의 기업이 아니라 국내에서 전통적으로 비즈니스에 IT를 활용하는 기업을 대상으로 하며, 필자가 개발자 이기 때문에 Dev의 관점이 강할 수 있습니다. 작은 경험과

brunch.co.kr

 

CI/CD

CI : Continuous Integration

CD : Continuous Deploy

2019년에 자격증을 하나 땄군여! 

 

바로 소프트웨어 테스팅 관련 자격증

 

ISTQB CTFL 입니다~

 

ISTQB 자격증 중에서 가장 기본 자격증이에요!

 

취준 하실 때는 QA 직무에도 우대사항인 경우도 있다고 하네요 

 

가격은 약 15만원!

 

문제는 총 40문제고 26개 이상 맞추면 합격입니다.

 

 

저는 4일짜리 STEN의 Software Testing Foundation 교육을 듣고 시험에 응시하였습니다.

 

확실히 4일은 시험을 응시하기 조금 빠듯한 기간이에요.

 

그래도 알기 쉽게 설명해줘서 실라버스가 이해가 잘 가긴 합니다.

 

 

시험 후기

 

실라버스가 역시 중요하다.

 

말장난이 많다. (너무 헷갈리게 문제를 출시합니다.)

 

생각보다 난이도는 높다. (물론 4일 공부한 양에 비해서요!)

 

샘플 문제로 먼저 감을 잡아놓고 실라버스를 공부해라!

 

 

 

 

STEN 교육 2020년 일정입니다.

 

 

교육·컨설팅 > 교육 공지사항 > [교육] 2020년 SW Testing 교육 연간일정 (2020.12.03 공개)

 

 

ISTQB (International Software Testing Qualification Board)

 

국제공인 자격증입니다.

 

https://www.sten.or.kr/bbs/board.php?bo_table=training_notice&wr_id=82

 

교육·컨설팅 > 교육 공지사항 > [교육] 2020년 SW Testing 교육 연간일정 (2020.12.03 공개)

ISTQB CTFL(Foundation Level) 기준으로

 

교육 660,000원

시험 158,400원

 

고용보험 환급 가능 교육 과정입니다. (고용보험 환급 신청하기 복잡합니다...)

 

 

CSTS (Certified Software Test Specialist)

 

한국 TTA에서 주관하고 국가공인자격증입니다. (최근에 바뀜)

 

https://sw.tta.or.kr/service/csts_it.jsp

 

CSTS자격시험 소개

CSTS자격시험 소개 홈 > 시험인증서비스 > 시험인증서비스 소개 > CSTS자격시험 개요 자 격 명 : SW 테스트 전문가(CSTS: Certified Software Test Specialist) 자격종류 : 등록민간자격 (제2013-1321호) 주관기관 : 한국정보통신기술협회(TTA) 자격등급 : 일반(Foundation Level), 고급(Advanced Level) SW 테스트 전문가 자격- 일반등급(Foundation Level) 검정기준 소프

sw.tta.or.kr

CSTS FL(Foundation Level) 기준으로

 

교육 300,000원

시험 50,000원

 

 

 

 

ISTQB가 오래되고 좀 더 인정을 받는 느낌입니다.

 

가격은 CSTS가 가성비가 훨씬 좋고요.

 

둘 다 공부해야하는 내용은 비슷합니다!

+ Recent posts