Programming 68

[C++] 생성자(Constructor)에서 조금 알아두면 좋은 읽을거리

안녕하세요.  C++언어를 알고 있는 분이라면, 생성자와 소멸자에 대해서 기본적인 것은 다 잘 알고 있을 거라고 생각합니다. 그중에서 한 번쯤 다시 기억하고 있으면 좋은 것에 대해서 공유해 보겠습니다.   1. 생성자(Constructor)에 관해  생성자(Constructor)라고 하면 기본적으로 객체가 생성될 때 자동으로 호출되는 특수한 멤버 함수입니다. 아래와 같은 기본적인 특징을 가지고 있습니다.  클래스와 같은 이름을 가지며 반환형이 없다. 객체 초기화를 담당한다. 매개변수를 받을 수 있으며, 여러 개의 생성자를 오버로딩할 수 있다.  1) 생성자 인자  생성자 인자가 다르면 디폴트 생성자의 형태도 같아야 합니다. 함수 오버로딩과 비슷할 수 있는데 객체 생성할 때 생성자도 이것을 지켜야 합니다...

Programming/C, C++ 2025.04.01

Visual Studio(VC++)에서 빌드 시 한글 때문에 에러가 발생과 콘솔(디버깅) 창에 한글이 깨져 나올 경우

안녕하세요.  최근에 Qt로 작업하다가 다시 Visual Studio 2022(VC++)로 확인할 것이 있어 설치해서 소스코드를  확인하다가 한글 출력에 이슈가 있어서 확인한 내용을 남깁니다.  이미 다른 분들도 올린 내용이 있지만, 한글 처리 부분에도 여러 가지 경우가 있다 보니 그중에 이와 유사한 경우가 있지 않을까 해서 정리해 보았습니다.  1. 문제 되는 부분 1   VC++ 코딩 중에 간단하게 printf로 한글을 출력을 출력하려고 간단하게 코드를 작성합니다.    확인 삼아 컴파일을 해보니, 아래와 같이 에러가 발생했습니다. 한글만 없으면 문제없이 컴파일이 되었습니다.  "파일에 0x64 오프셋에서 시작하는 문자가 포함되어 있습니다. 이 문자는 현재 원본 문자 집합에서 잘못된 문자입니다(코드 ..

Programming/C, C++ 2025.03.29

[C++] struct와 class 차이

안녕하세요.    AI가 코딩을 대신해 주고 편리함을 주고 있어 긍정적인 일이기도 하지만, 개발자라서 기본을 놓이고 너무 의존만 하는 것 같아서 다시 기본으로 돌아가보자는 생각으로 기초적인 다시 내용들을 정리해보려고 합니다.   프로그램 언어는 어떤 곳에서 사용하느냐에 따라서 Python, Java, Ruby, R 등 여러 가지 언어가 있지만, 임베디드를 개발하는 곳에서는 아직 C와 C++ 이 상당 부분 차지하고 있습니다.   그중에 C언어에서 C++로 넘어왔다면 클래스와 객체지향 등 여러가지 용어를 들어 보았을 것입니다. Class는 C++에서 중요한 역할을 하고 있습니다.  그런데 한번쯤 C++에서 struct와 class가 무슨 차이가 있을까 생각을 했을 수도 있습니다. 왜냐하면, struct 안에..

Programming/C, C++ 2025.03.28

Qt QMap의 iterator와 auto 상식 +1

안녕하세요.   간단하게 QMAP 클래스 사용하다가 iterator방법에 대해서 좀 더 알고 있으면 좋을 것  같아서 간략하게 남겨 보았습니다. 테스트 환경은 Qt 6.8.1입니다.  1. QMap은?  Qt 프레임워크에서 제공하는 데이터 컨테이너 클래스로, 키(key)와 값(value)의 쌍을 저장하는 연관 컨테이너입니다. 이는 정렬된 맵(sorted map) 자료 구조로 구현되며, 키가 자동으로 정렬됩니다.   QMap 사용법은 알고 있으리라 생각되어서 자세한 방법은 넘어가도록 하겠습니다. 간단하게 설명하자면 템플릿(template) 또는 제네릭(generic) 타입으로 변수를 선언하고, 키와 값을 쌍으로 저장하거나 읽으면 됩니다. QMap map;map["Apple"] = 1;map.insert("..

Programming/Qt 2025.03.11

아두이노 나노(Arduino Nano 33 IoT) BLE 값을 송수신 가능한 BLE 안드로이드 앱 만들기

안녕하세요.  이전 아두이노 나노 IoT에서 자이로 센서 값을 RFConn 프로그램으로 받는 것을 실험해 보았습니다. 그러나 실제로 RFConn 프로그램은 우리가 원하는 BLE 앱으로 배포할 수 없습니다. 그래서 아두이노 나노 33 IoT를 센서장치나 제어 장치로 할 경우 사용자가 만든 BLE 앱으로 만들어야 할 것입니다.   그렇기 하기 위해서 BLE 동작하는 내용과 최소 송수신 기능으로 만드는 것을 목표로 해보겠습니다. 그러나 안정성을 높이려면 추가적으로 소스를 수정해야 합니다. 여기서는 신호를 보내고 받는 것 중점으로 테스트한 버전입니다.  아두이노 나노 33 IoT 버전에 BLE 코드를 올리고 안드로이드 앱으로 접속해서 제어하는 기능을 만들어 보겠습니다. 아두이노 나노 33 IoT 버전 소스는 아..

Programming/Android 2025.01.25

파일(assets)을 안드로이드 앱에 넣고 사용하기(webview와 txt파일 연동)

안녕하세요.  안드로이드 앱에서 HTML 파일을 앱(App) 안에 저장하고 저장한 HTML 파일을 Webview와 연동하는 방법을 확인해 보았습니다.  우선 assets에 파일을 넣는 경우,New 해서 만들 수도 있겠지만, 간단하게 자신의 프로젝트 소스 폴더(...\app\src\main\)에 assets라고 만들고 파일들을 넣어두면 스튜디오에 나타납니다.  그리고 앱에서 접근하는 방법은 여러 좋은 사이트들이 있어서 저는 간단한 내용 설명들만 하겠습니다.  사이트에 나온 것처럼 파일을AssetManager assetMgr = this.getAssets(); 해서 assets 안에 있는 파일들을 검색할 수 있습니다.  그런데 여기서 조금 주의할 것이  assets = asssetMgr.list("/") 과..

Programming/Android 2025.01.07

gstreamer 1.19.2 버전 소스 컴파일 방법과 gstreamer Plugin 엘리먼트 컴파일 방법

안녕하세요.    gstreamer를 사용함에 있어서 문제는 없지만, 제공해 주는 라이브러리 말고 필요한 기능을 추가해서 플러그인 라이브러리를 만들어 보고 싶었습니다. 그리고 현재 gstreamer 개념에 대해서 완벽하게 이해하지는 못해서 상세한 설명은 가능하지 않지만, Plugin개발은 가능하지 않을까를 우선 확인해 보았습니다.   인터넷에서도 자료가 있지만 이전 컴파일 방법이거나 gstreamer doc 파일에도 최종 실행까지 상세하게 설명이 되어 있지 않아서 결과를 볼 수가 없었습니다. 그래서 조금 내용을 찾아보았습니다. (테스트하는 시점에 따라 버전이 다를 수 있습니다.)  1. 테스트 환경   - OS : ubuntu 20.04 LTS 64bit  - gstreamer설치 전 필요한 프로그램  ..

플래그먼트 갱신, 새로고침 하는 방법 (fragment refresh)

안녕하세요.  조금 오래된 안드로이드 버전에서 플래그먼트 갱신하는 방법을 공유해보고자 합니다. 별것 아닐 수 있는데, 몇 곳 사이트에 알려주는 방법들을 사용해 보니 작동하지 않아서 저와 같은 방법으로 할 경우 될 수도 있지 않을까 해서 공유합니다. 우선 구글에 플래그먼트 새로고침이라고 검색하면 답변들이 주로 아래와 같은 코드로 알려주었습니다. 방법 1)  방법 2)// Reload current fragment Fragment frg = null;frg = getSupportFragmentManager().findFragmentByTag("Your_Fragment_TAG");final FragmentTransaction ft = getSupportFragmentManager().beginTransacti..

Programming/Android 2024.12.28

exposed beyond app through ClipData.Item.getUri() 에러 발생시

안녕하세요.  아직 LG G2 폰과 같은 오래된 폰 대응이 있어서 낮은 버전에서 카메라 작동되면 상위버전은 잘 될 거야 생각했는데, 그렇지 않았습니다.  카메라 촬영하는 소스를 만들고 안드로이드 5버전에서는 문제가 없었는데 7이상 최신 폰에서는 카메라가 작동을 하지 않았습니다.  에러 메시지를 보면 "exposed beyond app through ClipData.Item.getUri()" 에러가 나왔습니다.좀 더 자세한 내용은 아래의 참고 사이트 링크를 참고하시면 됩니다.  간단히 말해서 "Android 7.0 이상부터 파일공유 정책이 변경되었습니다. 그렇기에 File Provider에 대해 알아두셔야 합니다. 파일에 일반 경로인  file://~ 을 참조하면 Fileuriexposedexception..

Programming/Android 2024.12.26

안드로이드 앱에서 오버레이 화면 사용하는 방법

안녕하세요.   조금 지난 내용이긴 한데 정리하면서 남겨 놓습니다.   - 앱에서 지속적으로 화면이 나타나도록 하는 방법을 말합니다. 기본 방법은 아래의 링크를 참고해서 코딩하면 됩니다. https://milkissboy.tistory.com/46  그러나 이전 버전에서는 코딩을 하면 퍼미션 관련해서 오류가 발생합니다. (AndroidStudio 3.5).앱 위에서 실행하는 것을 허용해도 에러가 나는 경우에는 버전에 맞게 작성해주어야 합니다. - 25 버전보다 상위 버전 경우  TYPE_SYSTEM_ALERT -> LayoutParams.TYPE_APPLICATION_OVERLAY로 설정해주어야 합니다. https://stackoverflow.com/questions/32224452/android-una..

Programming/Android 2024.12.23

AndroidUSBCamera:libausbc:3.2.8 버전에서 Received status code 401 from server: Unauthorized에러 발생 시

안녕하세요.  일반적으로 많이 사용하지 않을 라이브러리이긴 한데 스마트폰에 USB 카메라를 연결해서 영상을 확인하거나 녹화할 수 있는 공개된 라이브러리입니다. 확인해 볼 일이 있어 이전에 버전에서 다운로드 에러가 났습니다. 결과적으로는 버전업을 하면서 다운로드가 됩니다.  1. 에러 내용 Execution failed for task ':checkDebugAarMetadata'.> Could not resolve all files for configuration ':debugRuntimeClasspath'.   > Could not resolve com.github.jiangdongguo:libuvc:3.2.8.     Required by:         project : > com.github.jia..

Programming/Android 2024.12.11

Getting GPS Permissions Using the Qt Library in Qt for Android - Part 1

Hello everyone interested in Qt for Android.   Following my previous post on debugging in Qt for Android, I've now looked into how to retrieve GPS values. There are two main approaches: the first uses the Qt Library, and the second involves handling values with JNI and simply displaying them. In this article, we’ll go through the first approach. There isn’t much information available online for ..

Programming/Qt 2024.11.08

Setting Up adb Debugging and Viewing Logcat Messages with Qt

안녕하세요.   Qt 프로그래밍이 국내보다는 외국에서 조금 더 많이 사용하는 것으로 생각되어 영문으로 내용을 구성해 보았습니다. 쉬운 글로 되어 있으니 어렵지 않게 흐름 파악을 할 수 있을 것이라 생각됩니다.   When developing an Android app with Qt, basic debugging can be done through the Application Output. However, as you dive deeper into development using JNI and similar features, you may find the Output messages insufficient.  You’re likely already using Logcat in Android Studio. ..

Programming/Qt 2024.11.06

Android Emulator 사용 시 intel HAXM is deprecated 해결 방법

안녕하세요.  Qt로 안드로이드 앱을 개발하다 보니, 이런저런 에러나 방법들을 알게 되어 공유해 보는 시간을 조금 가져보려고 합니다.  아래내용은 Qt 뿐만 아니라, 안드로이드 에뮬레이터를 사용한다면 HAXM 지원중단이라는 메시지를 볼 수 있습니다. 그래서 HAXM 이 무엇이고 어떻게 해결하는지 찾아본 내용을 남겨 보았습니다.  인텔(Intel)에서 지원을 중단해서 굳이 자세히 알 필요는 없지만, 이것 때문에 나타나는 거구나. 해결책을 알고 있으면 좋을 것 같아서 공유드립니다.   1. Intel HAXM 이란?  Intel HAXM(Hardware Accelerated Execution Manager)은 Android 에뮬레이터와 같은 가상 머신(VM)에서 하드웨어 가속을 가능하게 해주는 가상화 엔진입..

Programming/Qt 2024.11.05

Qt6.x 조금 빠르게 설치하기(mirror 서버 이용)

안녕하세요.  스마트폰 앱개발을 조금 도와줄 일이 생겨 Qt for android를 사용하게 되었습니다.    이전 Qt5.x는 Offline installer 파일이 있어 복사해서 빠르게 설치했습니다. 그러나 최근에는 여러 버전들이 나오면서 Online Installer로 설치하는 형태가 변경되었습니다. 그리고 회원가입과 로그인을 해야 다음을 진행할 수 있습니다.  Online Installer 파일은 금방 다운로드할 수 있습니다. 그러나 설치하기 위한 다운로드 파일들을 다운로드하는 것은 너무 오래 걸린다는 것이 문제입니다.  그래서 검색하는 중에 mirror 옵션이라는 것이 있다는 것을 알게 되었습니다. 기본 다운로드 서버가 어디인지는 모르겠지만, 개발하는 곳에서 가장 가까운 서버를 이용하는 것이 다..

Programming/Qt 2024.11.02

VirtualBox 가상환경의 리눅스(Ubuntu)에 안드로이드용 Qt 설치 및 AVD(Emulator)에서 실행해 보기

안녕하세요. 리눅스용 안드로이드용 Qt 설치해야 할 일이  있어서 테스트한 내용을 정리해 보았습니다.안드로이드용 Qt를 윈도우에서는 설치하는 것은 크게 문제 되지 않았습니다. 의외로 리눅스에서는 조금 어려움이 있었습니다. 안드로이드 스튜디오, 리눅스, JDK 등 버전 호환성 잘 맞게 설치하여 한번에 실행된다면  좋은 일이라고 생각됩니다.  위와 버전 문제등으로 AVD(에뮬레이터)가 작동하지 않는 등 경우가 있다는 것도 알아두시면 좋을 듯합니다.  결론적으로 PC 테스트 환경 등으로 여러 곳에 테스트하지 못해서 완벽하게 동작한다는 결론을 보지 못했습니다. 그렇지만 이렇다 정도 참고하시면 좋을 듯합니다.   1. 테스트 환경  1차 테스트는 VirtualBox에 Ubuntu22.04 LTS 버전을 설치해서 ..

Programming/Qt 2024.09.13

Visual Studio(VC++)에서 OpenCV를 사용하기 위한 프로젝트 설정 및 샘플 코드 실행

안녕하세요.   Visual Studio 2019, OpenCV 4.5.3 조금 지난 버전이긴 한데, 현재까지 사용하고 있어서 다음에 설정할 때도 참고하고자  남깁니다.  1. Visual Studio에서 빈 프로젝트 생성  테스트할 프로젝트 이름을 넣습니다.    소스파일 폴더에  새 항목을 선택하고 "Visual C++ -> C++ -> 파일명  main.cpp 생성합니다.    2. OpenCV Library 불러오기 위한 세팅 1) 속성 설정   프로젝트(OpenCV_first)에서 오른쪽 버튼 속성 혹은 상단 메뉴 "프로젝트->OpenCV_first" 속성 선택   2) 속성 페이지 설정  속성 상단 메뉴에서 구성을 "모든 구성", 플랫폼은 "x64"로 변경합니다. debug, release 모..

색상(컬러) 모델 설명 및 컬러 모델 간 변환 식

1. 컬러모델 종류 및 설명 1) RGB (Red, Green, Blue)  RGB는 디지털 디스플레이 장치에서 색상을 표현하는 기본 모델이며, 빨강(Red), 초록(Green), 파랑(Blue) 세 가지 색상의 조합으로 다양한 색상을 만듭니다. 색을 혼합할수록 색이 밝아지는 가산체계를 사용합니다.   장점: - 디지털 디스플레이(모니터, TV 등)와 일치하여 색상 표현이 직관적 - 많은 색상 표현 가능 단점: - 인간의 색 지각 방식과 일치하지 않아서 일부 색상 조정이 어려울 수 있음 - 인쇄 등의 다른 색상 모델로 변환 시 왜곡이 발생할 수 있음  2) CMY (Cyan, Magenta, Yellow)  CMY는 인쇄 분야에서 주로 사용하는 색상 모델로, Cyan(청록), Magenta(자홍), ..

Node-RED의 Inject 노드를 이용해서 MariaDB에 주기적 데이터를 추가 혹은 삭제

안녕하세요.  데이터 테스트를 위해서 자동으로 DB table에 값이 저장되거나 혹은 시간이 지난 Sensor 데이터가 삭제되었으면 좋겠다는 생각이 들 때가 있습니다. influxDB 같은 경우 시계열 데이터 위주이다 보니 기본적으로 가지고 있고, 다른 DB들도 스케줄러 기능이 있어 쿼리를 주기적으로 사용할 수 있는 것으로 알고 있습니다.  위의 상황이 아닌 예외상황이 생길 경우, 관리자 권한이 없어 DB스케줄러 기능을 사용할 수 없다거나, InfluxDB를 사용하고 있지 않다고 한다면, Node-RED의 Inject 기능을 이용해서 유사한 기능을 만들 수 있을 것이라 생각해서 확인해 보았습니다.  1. Inject Node  1) 개  요  Inject 노드(node)는 사용자가 특정 시간에 데이터를 ..

[MicroPython] async 함수에서 return(result) 값 받는 방법

안녕하세요.  asyncio는 async/await 구문을 사용하여 동시성 코드를 작성할 수 있게 해주는 모듈로, asyncio를 사용하면 단일 스레드 작업을 병렬로 처리할 수 있습니다.   그리고 async 함수에서 리턴하는 값도 받을 수 있습니다.   그런데 MicroPython에서는 리턴 값을 받는 방법이 약간 달라서 남겨봅니다.     asyncio는 async/await 구문을 사용하여 동시성 코드를 작성할 수 있게 해주는 모듈로, asyncio를 사용하면 단일 스레드 작업을 병렬로 처리할 수 있습니다.   1. 일반 Python에서 비동기 함수에서 리턴 받는 코드   간단한 샘플 코드로 숫자의 합을 구하는 비동기 함수를 만들고 A, B의 두 개의 Task로 해서 coroutine으로 생성합니다..

Programming/Python 2024.07.19