2023의 게시물 표시

나만의 페이스 (My own pace)

이미지
New York is 3 hours ahead of California, but that does not make California slow. 뉴욕은 캘리포니아보다 3시간 빠르지만, 캘리포니아가 느린 것은 아닙니다.   Someone graduated at the age of 22, but waited 5 years before securing a good job! 누군가는 22살에 졸업했지만, 좋은 일자리를 얻기까지 5년을 기다렸습니다! Someone became a CEO at 25, but died at 50. 누군가는 25살에 CEO가 되었지만, 50살에 세상을 떠났습니다. While another became a CEO at 50, and lived to 90 years. 또 다른 누군가는 50살에 CEO가 되어 90년까지 살았습니다. Someone is still single, while someone else got married. 누군가는 아직 싱글인 반면, 누군가는 결혼했습니다. Obama retires at 55, but Trump starts at 70. 오바마는 55살에 은퇴하지만 트럼프는 70살에 시작합니다. Absolutely everyone in this world works based on their Time Zone. 이 세상의 모든 사람은 자신의 시간대에 따라 움직입니다. People around you might seem to go ahead of you, 당신 주변 사람들은 당신보다 앞서가는 것처럼 보일 수도 있고, some might seem to be behind you. 당신 뒤에 있는 것처럼 보일 수도 있습니다. But everyone is running their own race, in their own time. 하지만 모든 사람은 자신의 시

조선,해양분야 HIL Simulation 경험담

이미지
개요 오늘은 "HIL ( H ardware I n the L oop) Simulation" 이라는 주제에 대해 제가 경험해본 내용을 소개하려 합니다. 학원을 운영하기 전 연구소생활을 하던 시절 HIL Test 를 조선소(Shipyard)를 통해 처음 알게되었습니다. 당시 DP, PMS HIL Test기술을 가진 국내업체가 없어 조선소 입장에서 기술 국산화 가 필요했었고 한번 시도해 보지 않겠냐는 감사한 제안이었습니다.  - DPS : Dynamic Positioning System - PMS : Power Management System ( HILS는 자동차, 항공기 등 분야에서는 이전부터 사용되던 테스트 기법)   간단히 요약하면, HILS는 복잡한 시스템의 제어기를 현실성있게 검증 (수치해석 시뮬레이션 X)하기 위한 시뮬레이션 기법입니다. 그럼 HIL Test 가 무엇인지 자세히 설명하기 전 이 테스트가 필요해진 배경 을 소개하고자 합니다. 선박의 건조는 보통 선주가 배를 조선소에 의뢰하면 조선소는 선주의 요구사항에 맞는 선박을 건조해 납품하는 방식입니다. 선박은 워낙 덩치가 크고 구성품목이 많다보니 모든 선박 구성품을 조선소에서 직접 다 만들어 탑재하지는 못하고 여러 기자재를 개발, 생산 납품하는 업체들과 협력해 선박을 건조하게 됩니다. 대부분 선박에 탑재되는 기자재는 국산화 되고 있지만 일부 핵심적인 시스템은 해외 업체가 그것도 거의 독점적인 위치를 차지하는 분야가 존재합니다. 그 중 DPS ( D ynamic P ositioning S ystem)라는 시스템이 있습니다.

Qt6기반 Android게임 개발환경 구축

이미지
개요 약 3년 전 C++언어로 Qt, Android 개발환경 구축 을 소개한 글이 있었습니다. 참조 : C++, Qt Android App 개발 (이전 글)   세월이 지나 최근 C++ Qt 환경에서 Android 배포용 앱을 만들다 보니 기존과 변경된 부분이 있어 정리해두고자 합니다. 이 글은 Windows 11 에서  Qt Creator, C++ , Cross Platform 을 활용해 Android Device 용 앱을 개발하고 업로드하는 과정을 담고 있습니다.

엑셀파일에서 데이터 추출 후 분석앱 제작

이미지
개요 오늘은 파이썬으로 엑셀파일을 분석 해 데이터를 통계화 하고 박스차트 로 표현하는 예제를 만들어 보겠습니다. 

C++11의 표준 동시성 라이브러리에 대한 이해

이미지
개요 이번 주제는 C++ 코드 실행의 Synchronous(동기) vs Asynchronous(비동기) 에 대한 기록입니다. 동기화된 프로그래밍은 어떤 한 작업이 완료될 때까지 다른작업은 수행되지 않고, 비동기는 그 반대입니다.

Qt Creator에서 CMake를 이용한 vcpkg 개발환경구축

이미지
개요 Qt Creator C++ 개발환경에서 vcpkg 를 설정하는 방법에 대해 설명하고자 합니다. 먼저 아래 구성요소의 사전 설치가 필요합니다. Qt Creator + MSVC Compiler ( MinGW X ) CMake (Qt 설치시 같이 가능) vcpkg

좌표들의 Fitting 근사함수 생성앱 만들기

이미지
개요 이번 예제는 마우스로 드래그한 좌표를 기반으로 근사함수를 Fitting 하는 예제 입니다.  차트 위 마우스로 선을 그리면 해당 좌표에 적합한 근사함수를 차수에 따라 만들어주는 기능을 가지고 있습니다.  (함수 항의 0.00 은 소수점 표시가 2자리로 고정 되어 그 이하값이 생략되지만 연산에는 반영)  [DragFit 실행화면] 동영상을 통해 차수가 올라갈 수록 보다 적합 해지는 과정을 확인 할 수 있습니다. 참고로 위 예제는 Numpy의 polyfit () 함수 에 의해 데이터 셋을 근사화 하고 있습니다. 좀 더 들여다 보면 polyfit 함수는 3개의 전달인자 x data, y data, deg(차수) 를 전달하면 최소제곱법 을 사용하여 직선의 기울기 와 절편 을 찾을 수 있습니다. 직선의 기울기와 절편은 데이터 셋과 직선 사이의 오차의 제곱합을 최소화 하는 값입니다. 예를 들면 아래의 데이터 셋을 최소제곱법으로 근사하면 아래와 같습니다. import numpy as np # 주어진 데이터 포인트들 x = np.array([1, 2, 3, 4, 5]) y = np.array([3, 6, 5, 8, 10]) z = np.polyfit(x, y, 1) print(z) # z = [1.6 1.6] # 기울기, 절편 # f(x) = 1.6 * x + 1.6 [최소제곱법 예]

Meta Segment Anything Model에 GUI 적용하기

이미지
개요 최근 심화반수업을 수강하는 학원생분을 통해 Meta AI (과거 Facebook ) 에서 발표한 SAM ( S egment A nything M odel) 이라는 기술을 알게되었습니다. 

컴퓨터의 수치연산원리, Infix to Postfix에 대한 이해

이미지
개요 안녕하세요. 중위 표기법(infix) 으로 표현된 수식을 후위 표기법(postfix) 로 바꾸는 C++ 계산기입니다.   1. 문자열로 중위표기법 입력 ( A-Z, a-z, 0~9,+,-,*,/,^,(,) )   2. 피연산자 (A-Z, a-z, 0~9) 는 후위식 문자열에 저장   3. 열리는 괄호 '(' 는 Stack에 저장   4. 닫기는 괄호 ')' 만나면 다음 '(' 만나기 전까지 Stack Pop 수행, 후위식 문자열에 저장   5. 연산자는 Stack에 추가 우선순위가 높은 연산자는 Stack Pop 수행, 후위식 문자열에 저장 개발 환경 C++17, Qt Creator 9.0.1, MinGW 11.2.0 64bit Windows 11 Pro   calc.h #ifndef CALC_H #define CALC_H #include <string> class Calc { public: Calc(const std::string& exp); ~Calc(); private: const unsigned int MAX; std::string infix; int priority(char c); public: std::string infixToPostfix(); int calcPostfix(const std::string& exp); }; #endif // CALC_H   calc.cpp #include "calc.h" #include <iostream> #include <cstring> #include <stack> #include <cmath> using namespace std; Calc::Ca

PyQt5를 이용한 GUI 오목앱 만들기

이미지
개요 오목게임을 파이썬을 이용해 만들어본 예제입니다. GUI 앱 을 처음 시도해보는 초보가가 공부하기 좋은 예제라고 생각합니다.  

가장 빠른 검색, 이진탐색트리(BST) 구현 및 이해

이미지
개요 안녕하세요. C++ 자료구조 (Data Structure) 중 검색에 특화된 BST ( B inary S earch T ree)를 구현한 예제입니다. Root 기준으로 작은 값은 왼쪽, 큰값은 오른쪽, 중복허용X 연결리스트 (Linked List) 로 구성 삽입, 순회, 검색, 삭제 가능 노드 삭제 시 자식노드의 수 (0, 1, 2) 에 따라 삭제법이 다름에 유의   Visualization Link : https://www.cs.usfca.edu/~galles/visualization/Algorithms.html   개발 환경 C++17, Qt Creator 9.0.1, MinGW 11.2.0 64bit Windows 11 Pro   bst.h #ifndef BST_H #define BST_H struct Node { Node(int _v=0, Node *_L=nullptr, Node *_R=nullptr) : v(_v), L(_L), R(_R) {} int v; Node *L, *R; }; class BST { public: BST(); ~BST(); private: Node *pRoot; public: inline Node* root() {return pRoot;} void insert(int v); void preorder(Node *); void inorder(Node *p); void postorder(Node *p); Node* search(Node *p, int v); void remove(int v); private: Node* insert(Node *p, int v); void deleteNode(Node *p); Node* remove(No

Stack 자료구조 직접 구현하기

이미지
개요 안녕하세요. C++ 자료구조 (Data Structure) 의 가장 기본인 Stack 을 구현한 예제입니다. 마지막에 들어간 값이 먼저 나오는 LIFO (Last In First Out) 구조. 배열 (Array) 로 구성 Push, Pop 이 일어날 때 배열의 값이동(X), 인덱스 (top) 이동(O) 생성자에서 동적할당하는 클래스는 복사생성자, 대입연산자를 따로 정의 ( Queue 예제를 참조 하여 Do it yourself. 아래 예제에서 생략) 개발 환경 C++17, Qt Creator 9.0.1, MinGW 11.2.0 64bit Windows 11 Pro   stack.h #ifndef STACK_H #define STACK_H const int MAX = 5; class Stack { public: Stack(int _size=MAX); ~Stack(); public: void push(int v); int pop(); void print(); inline int length() {return size;} private: bool isFull(); bool isEmpty(); private: int top, size; int *p; }; #endif // STACK_H stack.cpp #include "stack.h" #include <iostream> #include <cstring> using namespace std; Stack::Stack(int _size) : top(0), size(_size), p(nullptr) { cout << "Contructor" << '\n'; p = new int[size];

Queue 자료구조 직접 구현하기

이미지
개요 안녕하세요. C++ 자료구조 (Data Structure) 의 가장 기본인 Queue 를 구현한 예제입니다. 먼저 들어간 값이 먼저 나오는 FIFO (First In First Out) 구조. 배열 (Array) 로 구성 Push, Pop 이 일어날 때 배열의 값이동(X), 인덱스 (head, tail) 이동(O) 생성자에서 동적할당하는 클래스는 복사생성자, 대입연산자를 따로 정의 개발 환경 C++17, Qt Creator 9.0.1, MinGW 11.2.0 64bit Windows 11 Pro   queue.h #ifndef QUEUE_H #define QUEUE_H const int MAX = 5; class Queue { public: Queue(int _size=MAX); ~Queue(); Queue(const Queue& other); Queue& operator=(const Queue& other); private: int size; int head, tail; int *p; public: void print(); void push(int v); int pop(); }; #endif // QUEUE_H queue.cpp #include "queue.h" #include <iostream> #include <cstring> using namespace std; Queue::Queue(int _size) : size(_size), head(0), tail(0), p(nullptr) { cout << "Constructor" << '\n'; p = new int[size]; memset(p

PyQt5를 이용한 이메일 클라이언트(다중 계정지원)

이미지
개요 이번에 소개할 예제는 MS 아웃룩 (Outlook)과 비슷하게 만들어본 이메일 클라이언트 입니다. 예제로서 소개하기 위해 아웃룩처럼 복잡한 기능은 빼고, IMAP을 지원하는 이메일 계정에 접속해 메일을 읽어 오는 기능까지만 구현하였습니다. 로그인 부분에서 다수의 이메일 계정을 입력하면 추가로 탭을 구성하고 메일수신이 가능합니다. 먼저 전자메일 서버에 로그인 해야 합니다. 대부분 전자 메일 서버는 IMAP을 지원 하며, 서버에 2단계 인증 및 앱 비밀번호 를 미리 등록해 두어야 합니다. (앱 비번은 로그인 비번 X, 전자메일 전용 비밀번호 O) [ 예) Goggle 보안 - 2단계 인증, 앱 비밀번호 생성 ] 해당 전자메일 전용 앱 비밀번호를 이용해 로그인을 시도합니다. [eMail Account] 전자메일 서버 로그인 후, 읽어들인 전자메일을 QTableWidget 에 표시. [eMail Contents]   유의 사항 본인 메일서버의 IMAP 기능을 활성 화 시킨 후 적용하기 바랍니다. POP3는 지원하지 않으며, IMAP SSL (TLS X)만 읽을 수 있도록 설정해 두었습니다. TLS 암호화를 사용하는 분은 소스코드의 로그인 부분만 수정하면 됩니다. SMTP는 향후 추가할 계획입니다. 예제에서 테스트된 메일 서버는 Naver, Google Gmail 입니다. 

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기