프로그래밍 297

[javascript] private 변수에 대한 type hint 설정 방법

개요 자바스크립트에서 클래스 내에 private 변수를 지원하기 시작했습니다. 리터럴 변수일 경우에는 기본값을 설정하면서 변수형이 지정되는데, 클래스 내부에서 생성하여 초기화하는 객체인 경우에는 다음과 같이 "null"로 기본값을 설정하고 작성을 하게 됩니다. private 변수를 초기 기본값을 "null"로 설정하면 해당 객체의 내부 멤버 변수 및 메소드에 대한 VS Code 등에서 type hint가 나오지 않아 불편합니다. 간단한 주석으로 type hint가 나오도록 하는 방법을 알아보도록 하겠습니다. 해결 방안 class MyClass { /** no type hint Image object */ #imageNoHint = null; /** @type {Image} has type hint Ima..

[git] fail to push at Total (client_loop: send disconnect: Broken pipe)

문제점 및 증상 이전 "[git] Total 이후 push 실패 (client_loop: send disconnect: Broken pipe)" 글을 통하여 저장소 복제는 문제는 해결이 되었는데, 소스를 수정한 이후에 push 하면 다음과 같이 "Total ..."이 나온 후 한참을 멈춰있다가 "client_loop: send disconnect: Broken pipe" 문제가 발생하며 push가 실패하였습니다. nvidia@nvidia-OrinNX16G:~/my_prj$ git push -vvv Pushing to ssh://git@my.hanwh.net/nodejs/my_prj Enumerating objects: 6, done. Counting objects: 100% (6/6), done. Del..

프로그래밍 2023.11.30

[PyQt5] 사용자 위젯에서 배경 그리기

개요 위젯을 상속받은 사용자 위젯의 배경을 커스터마이징하여 그리는 방법을 알아보도록 하겠습니다. 배경 그리기 Qt에서 배경 등은 QPainter 객체를 통하여 그릴 수 있습니다. 이를 위해서는 paintEvent() 이벤트 처리 함수를 오버라이드 합니다. 다음 예제는 paintEvent() 함수를 override하고 간단하게 배경을 붉은색으로 칠하는 예제입니다. import sys from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QColor, QPen class MyWidget(QWidget): def __init__(self): super().__init__() self.initUI() def init..

[Qt] 창을 전체화면으로 표시하기

개요 특정 윈도우 창을 파워포인트 프리젠테이션 화면처럼 모니터 전체를 채워서 표시해야할 경우가 있습니다. 이를 Qt에서는 어떻게 구현하는지 알아보도록 하겠습니다. 전체화면으로 창 띄우기 특정 창을 파워포인트 프리젠테이션 화면처럼 모니터 전체를 채워서 표시 방법은 간단하게 "showFullScreenMode()" 함수를 호출하면 됩니다. 다음은 "showFullScreenMode()"를 이용한 간단한 예제입니다. from PyQt5.QtWidgets import QApplication, QMainWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Fullscreen Window") #..

[python] itertools.pairwise() 함수 사용법

GStreamer로 작업을 하다보면, 파이프라인 구축을 위하여 생성된 항목들을 연결 (link)해주어야 합니다. C에서는 gst_bin_add_many() 함수가 있어서 간단하게 구현이 가능한데, 파이썬에서는 해당 함수 대신 Element.link_many() 함수를 이용해야 합니다. 그래서 link_many() 함수가 어떻게 구현이 되어 있는지 궁금하여 찾아 보니, 다음과 같이 구현되어 있었습니다. from itertools import tee def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = tee(iterable) next(b, none) return zip(a, b) Gst.Element에 다음과 같이 link_many()..

[NodeJS] readFile, readFileSync - 리눅스와 윈도우간 차이점

문제점 및 증상 윈도우 환경에서 개발할 때 전혀 문제 없던 것이 리눅스 운영 환경으로 배포하였더니, 윈도우에서 발생하지 않던 오류가 발생하였습니다. 프론트 스크립트 파일의 문자열에 문자열 처리에 오류가 발생하였는데, 핸들바 템플릿을 통하여 전달된 문자열에 들어 있으면 안되는 "\n" 문자가 포함되어 브라우저에서 문법 오류가 발생하면서 프론트단 전체가 제대로 동작하지 않았습니다. 원인 분석 도저히 이해가 되지 않는 현상이라, 아래와 같은 간단한 프로그램을 작성하여 시험해 보았습니다. let fs = require('fs') let data_list = fs.readFileSync(process.cwd() + '/data_list.txt').toString() console.log(data_list) con..

[javascript] 실수를 정수형으로 바꾸기(소수점 버리기)

자바스크립트에서 실수를 정수형으로 바꿀 때, 주로 Math의 round(), floor(), ceil() 함수들을 이용했습니다. 그런데, 우연히 실수형 변수에 "| 0"을 하는 문법을 보고 도대체 무엇을 하는 코드인지 동작시켜 봤는데, 이게 물건이었습니다. 바로 다음 실행 결과를 보시면 이해가 빠르실 겁니다. >> 1.10 // === Math.floor(1.1) 1 >> -1.10 // === Math.ceil(-1.1) -1 >> 9.90 // === Math.floor(9.9) 9 >> -9.90 // === Math.ceil(-9.9) -9 즉, 실수에 "| 0" 연산을 하면 0보다 작은 음수일 경우에는 ceil() 함수처럼 동작하고 0보다 큰 실수는 floor() 함수처럼 동작합니다. 풀어서 설..

[Python] Flask 서버 멀티 스레드로 구동하기

문제점 및 증상 Qt를 이용한 GUI와 함께 간단한 Flask 웹 서비스를 이용해야하는 상황이 있었습니다. 처음에는 다음과 같이 Flask를 MVC 형식으로 구현하고, Flask 실행부만 스레드로 구현하면 아무런 문제가 없을 줄 알고 실행해 보았습니다만, 다음과 같은 오류가 발생되고 정상적으로 실행되지 않았습니다. Exception in thread Thread-6 (handleFlask): Traceback (most recent call last): File "C:\Dev\Python\Python310\lib\threading.py", line 1016, in _bootstrap_inner self.run() File "C:\Dev\Python\Python310\lib\threading.py", li..

[javascript] 배열 순서를 마구 뒤섞기(shuffle)

자바스크립트에서 배열 내부의 항목들을 마구 뒤썩어주는 방법을 찾아 보니, 다양한 방법들이 있었는데, 그 중에서 쓸만한 방법들을 정리해 둡니다. 함수로 이용할 때는 다음과 같이 shuffleArray()라는 함수를 만들어서 이용하면 편리할 것 같습니다. function shuffleArray(a){//array let c=a.length;let b=d=c;while(c)b=Math.random()*(--c+1)|0,d=a[c],a[c]=a[b],a[b]=d } 위 함수를 임의의 배열에 적용한 결과는 다음과 같습니다. >> let unshuffled = ['hello', 'a', 't', 'q', 1, 2, 3, {cats: true}] >> unshuffled (8) ['hello', 'a', 't', '..

[Python] 발생한 Exception의 클래스를 확인하는 방법은?

발생 상황 데이터베이스에 연결하여 데이터를 추가(insert)하는 작업에서 Exception이 발생하였습니다. Exception이 발생한 원인은 테이블에 유일키가 있었는데, 중복된 값을 추가하여 "IntegrityError" 오류가 발생한 것이었습니다. 정확하게 IntegrityError만 except 처리를 하면 되겠지만, "except Exception as e:" 구문 하나로 해결할 수 없나 하는 생각에 그럼 발생한 Exception의 클래스를 확인하여 "IntegrityError" 오류만 별도 처리하면 되지 않을까? 하는 생각에 관련 자료를 찾아보게 되었습니다. Exception의 클래스 이름 확인 방법 참고자료를 보면, Exception의 클래스 이름 확인 방법은 간단하게 다음과 같이 할 수 있..

728x90