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..
무인 자동차 기술 순서는 대략 이렇습니다. 스마트카 -> 자율주행 자동차 -> 커넥티드카. 보통 스마트카로 시작되어 궁극적인 커넥티드카로 가는 중간 과정을 자율주행 자동차로 보고 있습니다. 현 단계에선 혼용하는 경우도 많은데, 딱히 잘못된 건 아니라는 게 제 생각입니다. 자율주행 자동차 센서 중 핵심 5가지 설명합니다. Smart Car Sensor1 - RADAR(RAdio Detection And Ranging) 차량 및 도로 시설물 감지용이며 24GHz 근거리 레이더와 77~78GHz 중장거리 레이더가 주로 사용된다. 최근에는 250m까지 검지 거리를 확장한 레이더도 사용되는데 크루즈 컨트롤, 전후방 충돌 경보, 충돌 방지 시스템 등에 주로 사용되고 있다. Smart Car Sensor2 - LID..
.NET C# 라이브러리는 문자열 암/복호화를 위한 기본 요소를 제공합니다. 암복호화를 위해선 몇 가지 단계가 필요한데, 이 포스트에서는 암복호화 과정에 대한 간단한 루틴을 소개합니다. MD5 해쉬 합계 생성기(MD5 hash sum generator)의 도움을 조금 받아, 실제 암호화를 위해 사용할 3DES(Triple DES)를 사용합니다. 전체 소스 코드는 맨 아래에 있지만, 먼저 구현 순서를 살펴보는 것도 괜찮습니다. 3DES 프로젝트 다운로드 - ◆ 문제점암호화할 문자열 값을 설정한 뒤, 비밀번호(Password 변수의 secret)로 암호화하여 비교적 안전하게 문자열을 보관할 수 있도록 Base64로 인코딩해야 합니다. 12345678910// 메세지 암호화 (복호화 전 단계)string Ms..
일원분산분석 예제와 해석과 5가지 변동 (One way ANOVA) 일원분산분석. (One-way ANOVA) 여러 개의 모평균을 비교하는 실험에서 총 N개의 동질의 실험단위가 있고, 이것을 이용하여 서로 다른 k가지의 처리에 대한 효과의 차이를 일원분산분석으로 알아보고자 합니다. 이 N개의 실험단위를 크기가 n1, n2, ..., nk인 소그룹으로 임의로 나누고 각 소그룹에 서로 다른 처리를 하나씩 적용했다고 가정합시다. 이때 서로 다른 k개의 처리 효과를 파악하고자 합니다. 위 자료에서 각 행은 서로 다른 처리를 한 하나의 표본을 의미합니다. 표본의 크기는 k개가 모두 같을 필요는 없으며 Yij는 i번째 처리의 모집단에서 추출한 j번째 표본 값을 말합니다. 주어진 자료에 대한 분석을 수행하기 위해서는..
◆ 비구조적인 코드복잡한 프로그램 명령문들을 흔히 스파게티 코드(spaghetti code)라고 한다. 스파게티가 담긴 접시에서 국수 한 가닥을 따라가는 것처럼 프로그램의 코드가 혼란스럽기 때문에 이런 이름을 사용하게 된 것이다. ☆ 프로그램의 기본 구조구조(structure)는 프로그래밍 논리의 기본적인 단위이다. 기본적인 구조에는 순서(sequence), 선택(selection), 루프(loop)가 있다. 아래 그림은 첫 번째 구조인 순서를 보여준다. 순서 구조(sequence structure)에서는 각 동작이 차례대로 수행된다.일단 한 순서를 시작하게 되면 첫 번째 동작부터 마지막 동작까지 차례대로 따라가야 한다. 두 번째 구조는 선택 구조(selection structure) 또는 판단 구조(d..