비주얼스튜디오 2019 기준입니다. VSCode 1.33에 적용할 수 있습니다. 주황색 번호를 누르면 해당 사이트로 이동합니다. 1. vscode-icons아이콘이 붙어 선명합니다. 2. GitLens무조건 편합니다. "커밋 단위로 파일 비교"할 수 있고, "마지막 커밋 내용 보기" 등 기능이 다양합니다. git blame 명령어 입력할 필요가 없습니다. 3. Prettie코드 포맷을 자동으로 설정합니다! 여러 사람의 손을 타는 것 보다 비주얼스튜디오 Prettie에게 맡기는 것이 편합니다. 4. Git HistoryGit log를 보기 편합니다. 5. Bracket Pair Colorizer괄호 색상을 보기 좋게 바꿔줍니다. 굉장히 쉽게 읽을 수 있습니다! 최고 중의 최고! 또한, Beta 버전이지만 ..
MFC(CString class)에서 Left, Mid, Right를 사용하여 문자열 자르기하는 방법은 아래와 같습니다. MFC (CString) Samples: 12345678910CString somestring = L"ABCDEFG"; somestring.Left(3) == L"ABC" somestring.Mid(2,3) == L"CDE"somestring.Mid (2) == L"CDEFG" somestring.Right(3) == L"EFG" The index starts at 0 (MFC and C#), so nIndex=2 means the 3rd char!cs C#의 Substring()과 비교하면 이렇습니다. 두 언어의 문자열 자르기 비교표입니다. MFC (CString) C# (strin..
출처 - SimpleSamples.info : CArray [링크] MFC CArray 사용법아래는 CArray를 사용하는 간단한 예제로 2차원 배열로 선언한 예입니다. 이중 배열로 선언해 사용하기 위해선 typedef를 먼저 만들어야 합니다. 12typedef CArray CArrayType;cs 다음엔 아래와 같이 MFC CArrayType을 선언합니다. 1CArrayType Doubles;cs 그리고, 항목을 추가합니다. (D는 Double형 변수) 1Doubles.Add (D);cs 다시, 반복문으로 채워봅니다. 12345int n = Doubles.GetSize(); for (Index=0; Index
윈도우에서 Qt를 사용할 때 필요한 것 중 하나가 cdb입니다. 비주얼 스튜디오란 툴은 원래 강력해서 따로 설치해줄 것이 없지만, Qt Creator은 그렇지 않아요. 그래서 윈도우 디버깅하려면 뭔가를 설치해야 합니다. 그게 바로 Qt Creator cdb 이것입니다. 먼저 Debugging Tools for Windows를 설치합니다. 1. 다운로드 1 - WinDbg Quick Links [클릭]위 링크로 이동하면 멋없는 페이지로 이동하는데, 그곳에서 아래 빨간 박스 안의 링크를 눌러 실제 다운로드 사이트로 이동하세요. 스크롤을 조금 내리면 설치 파일 링크가 보이는데, 이곳은 사용자 환경에 따라 동적으로 생성되는 페이지라 제가 캡처한 아래 화면이 일정하진 않아요. 사용자마다 다릅니다. 윈도우7에서 Q..
C++ 전역변수 선언 예제와 안 쓰는 방법 (global variable) 기본적으로, 전역변수는 일단 안 쓰는 게 가장 좋긴 합니다. 그렇지만 사용할만한 상황이 존재합니다.... 그렇지만 객체지향에는 "전역"이란 개념 자체가 없습니다. 가령, extern int nTemp;라고 선언을 한다면, nTemp가 object file 어딘가에 선언된 전역변수를 사용하겠다는 것이죠. 그리고, stdafx.cpp와 stdafx.h 파일에 전역변수를 선언하는 경우가 있는데, stdafx는 변동성이 거의 없는 것, 한번 선언하면 변하지 않는 형태의 것들만 골라서 넣어놔야 합니다. 때에 따라서 전역변수가 그러할 순 있으나, 변수가 거의 변하지 않는다면 굳이 변수일 이유가 없기도 하죠. 그래서 stdafx.cpp와 st..
애플리케이션은 동적으로 테이블의 존재 여부를 파악하여 테이블의 생성 여부를 결정해야 합니다. 이런 동작을 하기 위한 로직엔 두 개가 있습니다. 1. sqlite 테이블이 존재하면 건너뛴다 (삭제 후 생성되지 않음)2. sqlite 테이블이 존재하지 않으면 생성한다 (새롭게 생성됨) 1번 경우 예제1db.execSQL("create table if not exists month (NumericalValue integer);");cs "if not exists"란 명령어로 테이블이 존재하면 생성 과정을 건너뛰게 하였습니다. 예를 들어, 이미 존재하는 테이블일 경우엔 기존 테이블이 계속해서 사용됩니다. 2번 경우 예제12345678910111213141516SQLiteDatabase db = openOrCre..
컴파일러는 낮은 레벨에서 C# sealed 클래스를 micro-optimization 할 수 있습니다. 컴파일 타임에 C# sealed 클래스에 함수를 호출하면 callvirt IL 명령어 대신 IL 명령어를 사용합니다. C# sealed 클래스의 함수는 오버라이드 되지 않음.가상 함수 테이블 검사 과정을 생략.가상 함수 테이블은 조회 시간이 상대적으로 짦음.callvirt 보다 속도에서 유리함. 이렇기에 성능이 조금 좋아집니다. 최적화 중이라면 적용하세요. 즉, 다형성을 잃어버린 클래스라 선언했기에 컴파일러는 여러 검사 과정을 생략합니다. (확장되지 않는 클래스) 예를 들어, non-sealed 클래스에 makeNoise()란 함수가 있을 때, 이 함수의 재정의 여부는 알 수가 없습니다. 함수 재정의 ..
랩뷰(LabView)와 실시간 모니터링 융합, 측정과 산업 시스템 설계 이전 글 - LVDT와 랩뷰(LabView)를 응용한 실시간 모니터링 [링크] 8. 실험 결과와 분석 □ Thickness filtering 실험 ◯ 그림 9(a) : 흰색 줄은 표준 두께, 빨간점은 실제로 측정 제품의 두께 (랩뷰(LabView)) - 실시간 모니터링, 기준인 1cm는 오차 범위 0.05cm를 더한 값 ◯ 제품마다 각각의 서로 다른 기준을 가지고 있으며 기존에 많은 필터링 시나리오가 존재 - 각 시나리오에 대해서 필요한 데이터를 얻기 위해 1,000개의 세트에 대한 데이터 분석 ◯ 그림 10(a) : 필터링된 데이터의 길이 ◯ 그림 10(b) : 수집된 데이터의 통계 분석 □ Ground vibration 실험 ◯ ..
리눅스 시리얼 통신, 연결 확인 (세상에서 제일 간단한 방법) Linux 계열 어디에서나 간단하게 테스트해볼 수 있는 방법입니다. 두 대의 장비를 놓고 양쪽 모두에서 터미널을 여세요. 수신 1#cat /dev/ttyUSB0cs cat을 사용해 수신 대기 상태로 설정합니다. 송신 1#echo "bla~ bla~" > /dev/ttyUSB0cs echo를 사용해 데이터를 전송합니다. 정말 간단합니다. 관련 글2018/05/27 - socat 리눅스 가상 시리얼 포트(컴포트) 사용법 (RS232 테스트)2017/03/04 - 리눅스 시리얼 통신, 연결 확인 (세상에서 제일 간단한 방법)2017/02/17 - 시리얼 통신 포트 에러, 타임아웃, 속도 저하 (USB to Serial) ⓒ written by vi..
C++/CLI 예제, 프로젝트 생성, Hello World 출력 이론 부분은 생략하고 간략하게 C++/CLI 예제 프로젝트 생성하는 방법을 다룹니다. 비주얼 스튜디오 2015 기준으로 "템플릿 - 다른 언어 - Visual C++ - CLR - CLR 콘솔 응용 프로그램"을 선택합니다. 이렇게 프로젝트를 생성하면 아래처럼 솔루션 탐색기를 통해 전체 구조를 알 수 있습니다. C++/CLI 예제의 시작이라고도 할 수 있죠. 그리고 아래처럼 코드를 구성해서 C++/CLI 예제의 목표인 Hello World를 콘솔로 찍어 봅니다. 123456789101112#include "stdafx.h"#include using namespace System; int main(array ^args){ Console::Wri..
스레드풀 전체 소스를 소개합니다. 출처는 기억이 안 나는데, 아마도 스택 오버플로우일 겁니다. 프로젝트 압축 파일 C# 쓰레드풀 예제 프로젝트 - 아래는 스레드풀 메인 클래스인데, Action을 이용해 랜덤한 스레드 시작과 종료 코드를 실행합니다. 5번째 라인의 thread pool 클래스에서 실제 스레드 객체도 생성합니다. 1234567891011121314151617181920212223static void Main(string[] args){ using (var pool = new Pool(5)) // size { var random = new Random(); Action randomizer = (index => { Console.WriteLine("{0}: Working on index {1}"..
C# List의 RemoveAll() 함수는 사용자 정의 조건에 맞는 모든 요소를 제거합니다. 123public int RemoveAll( Predicate match)cs 아래 두 개의 예제를 통해 C# List 요소를 제거하는 몇 가지 방법을 소개합니다.리스트 삭제는 개별 요소, 전체 요소, 값으로 지우기 등 여러가지 방법이 있습니다. C# List RemoveAll 첫번째. Remove(), RemoveAt(), RemoveRange(), RemoveAll() + 람다 1234567891011121314151617181920212223List words = new List(); words.Add("A");words.Add("B");words.Add("C");words.Add("D");words.Ad..