프로그래밍 301

[Python] numpy.core.multiarray failed to import

문제점 및 증상 새로 설치한 라즈베리파이에서 "opencv"를 이용하여 영상 이미지 처리 관련 프로그램를 실행하였을 때, 다음과 같은 오류가 발생하였습니다. RuntimeError: module compiled against API version 0xf but this version of numpy is 0xd Traceback (most recent call last): File "/opt/flpd/flpd_server.py", line 5, in from cv2 import VideoCapture File "/home/flpd/.local/lib/python3.9/site-packages/cv2/__init__.py", line 181, in bootstrap() File "/home/flpd/.lo..

[Python] libcblas.so.3: cannot open shared object file: No such file or directory

문제점 및 증상 새로 설치한 라즈베리파이에서 "opencv"를 이용하여 서비스를 실행하였을 때, 다음과 같은 오류가 발생하였습니다. flpd@raspberrypi:/opt/flpd $ python flpd_server.py Traceback (most recent call last): File "/opt/flpd/flpd_server.py", line 5, in from cv2 import VideoCapture File "/home/flpd/.local/lib/python3.9/site-packages/cv2/__init__.py", line 181, in bootstrap() File "/home/flpd/.local/lib/python3.9/site-packages/cv2/__init__.py", ..

Let’s Encrypt SSL 인증서 만료 메일 주소 변경 방법

개요 "Certbot"을 이용하여 Let’s Encrypt에서 최초 SSL 인증서를 발급 받을 때(계정을 만들 때) 이메일 주소를 제공한 경우, 인증서가 갱신될 때 만료 통지를 자동으로 보냅니다. 만료 이메일은 SSL 인증서가 만료되기 20일 전에 발송하고, 통지는 만료되기 10일과 1일 전에 각각 발송합니다. 만료 메일 주소 변경 여러 이유로, 만료 메일을 받을 이메일을 변경해야할 수도 있는데, 그럴 경우에 다음과 같이 이메일 주소를 변경할 수 있습니다. certbot update_account --email yourname@example.com "certbot/certbot" 도커를 이용할 경우에는 다음가 같이 만료 이메일 주소를 변경할 수 있습니다. docker run -it --rm --name ..

[nodejs] VSCode 디버그 콘솔에 winston 로그가 출력되지 않는 문제

문제점 및 증상 NodeJs에서 "Winston" 모듈을 설치하여 "transports.Console()"을 이용하여, 콘솔로 로그를 출력하는데 터미널에서 직접 소스를 실행하면 로그가 잘 표시되나, VSCode에서 실행하면 디버그 콘솔에 다음과 같이 아무런 메시지가 표시되지 않았습니다. 구현한 소스는 다음과 같습니다. const { createLogger, transports } = require("winston"); const consoleTransport = new transports.Console(); const logger = createLogger({ level: 'debug', transports: [consoleTransport] , stderrLevels: ['error', 'debug']..

[javascript] 날짜 문자열 만들기

자바스크립트로 날짜 문자열을 "YYYY-MM-DD hh:mm:ss" 형식으로 만드는 방법을 정리해 둡니다. "Date" 클래스의 getFullYear(), getMonth, getDate() 가장 쉬운방법으로 "Date" 클래스의 getFullYear(), getMonth, getDate() 함수를 이용하면 다음과 같이 "YYYY-MM-DD" 문자열을 만들 수 있습니다. let current_date = new Date() let current_date_string = current_date.getFullYear() + '-' + (current_date.getMonth() + 1) + '-' + current_date.getDate() // Result // 2022-8-2 위와 같이 수행하면 10이하..

[Python] struct.pack() 함수 이용시 패팅 주의하기

구조체 형식의 데이터를 바이너리 형식으로 변환할 때 아주 유용한 함수가 struct.pack() 입니다. 주로 통신 프로토콜을 구현할 때 아주 유용하게 쓰이는데, 이 함수를 이용할 때 한 가지 주의할 점이 있습니다. struct.pack() 함수를 이용할 때, 네이티브가 아닌 ‘’, ‘=’ 및 ‘!’ 를 사용할 때는 패딩이 추가되지 않습니다. 다음 예제를 보면, 금방 이해가 되실겁니다. >>> from struct import pack, unpack_from >>> payload = pack('bHbHHiH', 0, 0, 0, 747, 3515, 0, 0) >>> payload b'\x00\x00\x00\x00\x00\x00\xeb\x02\xbb\r\x00\x00\x00\x00\x00\x00\x00\x0..

[shell] 긴 명령을 여러 줄에 입력하는 방법 정리

. 개요 여러 쉘? 에서 긴 명령을 여러 줄에 걸쳐서 입력하는 방법을 정리해 둡니다. Window batch 윈도우 배치(cmd.exe) 환경에서 긴 명령을 여러줄에 걸쳐서 입력할 때는 "^" 문자를 이용합니다. java -jar revanced-cli-2.7.1-all.jar -a com.google.android.youtube_17.27.39-1530396096.apk -c ^ -o revanced_17.27.39.apk -b revanced-patches-2.21.0.jar -m app-release-unsigned.apk ^ -i hdr-auto-brightness -i enable-debugging -i force-vp9-codec -i swipe-controls ^ -i enable-wide-..

프로그래밍 2022.07.27

[apk] 광고 없는 유튜브 - Youtube ReVanced

개요 스마트폰으로 유튜브를 보는 것에 관심이 없었어서 이런 유용한 앱이 있는 줄도 모르고 있었는데, 최근 휴대폰 요금제를 변경하면서 유튜브에 조금이니마 관심이 생기면서 혹시나 하고 찾아 보던 중에 알게된 앱이 "Youtube ReVanced" 입니다. 이전에는 "Youtube Vanced"라고 배포되고 있었으나, 지난 3월경부터 개발 등이 중단되었다고 합니다. 하지만 "Youtube Vanced"에서 파생된 "Youtube ReVanced"라는 프로젝트가 있는데, apk를 직접 배포하는 방식이 아니라 사용자가 직접 빌드하는 방식으로 배포하고 있어서, 다른 사람이 빌드하여 배포하는 것 말고 직접 빌드해서 사용해본 내용을 정리해 봅니다. 본 글에서는 "ReVanced 설치 방법 - Java를 이용해 직접 빌..

[Python] 파일 복사(copy)

개요 파일을 복사(Copy)하는 방법에 대하여 정리해 둡니다. 파일을 복사하기 위해서 shutil 패키지의 copy(), copyfile(), copy2() 함수들을 이용합니다. shutil.copy(src, dst) 기본적으로 "src" 원본 파일을 "dst" 대상 파일로 복사합니다. "dst" 대상 파일의 생성 시각은 현재 시각으로 설정됩니다. "dst"에 폴더명을 입력한 경우, 해당 폴더로 파일을 복사합니다. Linux 계열에서는 파일의 권한 모드(chmod 참조)를 복사하지만, 파일의 생성과 수정 시간과 같은 다른 메타 데이터는 복사되지 않습니다. 메타데이터까지 복사하려는 경우에는 shutil.copy2() 함수를 이용해야 합니다. shutil.copyfile(src, dst) 기본적으로 "src..

[Python] 프로세스간 데이터 공유 : Array

개요 다중 프로세스간 데이터를 공유할 수 있는 다양한 클래스들이 "multiprocessing"에서 제공됩니다. Array, Pipe, Queue, Value 그 중에서 Array를 이용한 데이터 공유 방법에 대하여 정리해 둡니다. Array 객체 생성 Array 클래스로 객체를 생성하는 방법은 다음과 같습니다. list 객체와는 약간 다릅니다. from multiprocessing import Array arr = Array('i', range(10)) print(arr) print(arr[:]) arr2 = Array('i', [0, 0, 0, 1, 2, 3, 4]) print(arr2) print(arr2[:]) 위 코드의 실행 결과는 다음과 같습니다. [0, 1, 2, 3, 4, 5, 6, 7, ..

728x90