본문 바로가기

programmer

(167)
Jupyter(.ipynb) 실행 파일(.exe) 만들기 jupyter notebook으로 만든 스크립트를 윈도우에서 동작하는 실행 파일로 만들어보자 1. first_script.ipynb 파일 만들기 jupyter에서 first_script.ipynb를 생성하고 하기와 같이 입력한다. (Jupyter는 메인함수 진입을 따로 명시하지 않아도 되지만 .py 에서 실행파일을 만들려면 메인 진입점을 명시해 주어야 한다.) def main(): print('test') if __name__ =='__main__': print('Good Morning') main() 2. .ipynb 파일을 .py로 만들기 jupyter nbconvert --to script first_script.ipynb 를 수행하면 first_script.py 파일이 생성된다. 3. 실행파일 만..
JVMNotFoundException 처리 윈도우 x64에서 konlpy를 적용하다 보면 nlp = Okt() No JVM shared library file (jvm.dll) found. Try setting up the JAVA_HOME environment variable properly. 위와 같은 에러를 발견하게 된다. 친절한 에러 로그 대로 JAVA_HOME 환경 설정을 따라 하다간... 안 끝난다. JDK에서 JVM 경로 설정하는 함수(['getDefaultJVMPath)가 오기능하여 작동한 것으로 보인다. 아마도 업데이트되면 해결되지 않을까 싶은대 아직은 그대로이다. 고생하지 말고 아래와 같이 따라가 보자. 1. 문제 원인 찾기 문제가 발생한 부분 첫번째 if 문에 걸리지 않고 else:를 타서 리눅스 JVM을 찾게 됐다.. win..
Conda 설치(linux) conda 설치 방법 0. 미리 보기 $wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh $bash Anaconda3-2019.10-Linux-x86_64.sh $source ~/.bashrc $conda $set CONDA_FORCE_32BIT=1 $conda create -n py37_32bit -c base python=3.7 1. Conda 설치 파일 다운로드 원하는 설치 버전의 아나콘다를 다운로드한다. 하기 링크에서 설치 파일들을 확인 할 수 있다. repo.anaconda.com/archive wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_6..
AWS EC2 볼륨 증가 시키는 방법 AWS 사용할 때 처음 무료로 받았던 용량을 증가 시키고 싶을 때가 있다. 돈은 좀 더 사용하겠지만 메모리에 스트레스 받는것 보다. 돈을 쓰는게 건강에 이롭다.. AWS EC2에서 메모리(SSD or HDD 개념)를 높이는 방법은 서비스 > EC2 > Elastic Block Store > 볼륨 에서 변경 가능하다. 볼륨은 여러게 생성해서 인스턴스에서 사용할 수 있는대 하나만 사용하는 것을 예시로 들었다. 메인 인스턴스에서 사용하고 있는 볼륨을 선택하고 마우스 우클릭을 하면 '볼륨 수정' 이 있다. 프리 라이선스에서는 8GIB이 최대일 껀대 2배인 16GIB으로 증량해 보자. 크기를 16으로 입력하고 수정버튼을 클릭한다. 참고로 수정되는 대는 시간이 좀 소요되므로 기다려야한다.(설정 되는 시간은 대중 없..
함수 포인터 기본 사용법과 매개변수, 리턴 함수 포인터 기본 사용법과 간단한 활용 예를 알아보자. 예제는 C++, C에서도 동일하게 사용 가능하다. 1. 함수 포인터 기본 사용법 함수 포인터 선언 방법은 반환 값 (*함수포인터이름)(매개변수 타입); 으로 이루어진다. 예) void (*m_work_handler)(int inputData); 아래 예제를 보자. 함수 포인터를 만들고 정의하기 위해서 라이브러리 개발자가 고심한 것이 눈에 보인다. 함수 앞에 그냥 *만 사용하면 void *와 헷갈리기 때문에 어쩔 수 없이 () 괄호로 묶어야 했을 것이다. 이런 고충을 생각하면서 외우면 잘 기억난다. 함수 포인터도 함수기 때문에 꼭 매개변수 타입을 지정해 주어야 한다. //함수 포인터 선언 void (*m_work_handler)(int inputDat..
함수 포인터 사용 예 함수 포인터를 왜 사용하고 언제 유용하게 사용하는지 알아보자. 1. Call Back 함수로 사용 Call back은 '다시 받는다'라는 뜻이다. 우리가 기본적으로 함수를 선언해 사용하게 되면 사용하는 그 시점에 기능이 수행된다. 하지만 function pointer를 활용하면 그림과 같이 DLL에서 자신이 선언한 함수가 DLL 수행 시점에 실행되게 된다. 이를 Async라고 표현하는데 이에 대한 설명은 '여기'에 잘 설명되어 있다. SUDO 코드를 예로 보자. Main Processor에서 생성한 function_pointer(int count)라는 함수를 DLL에 함수 포인터로 넘겨주고 이를 DLL Run_MainProcess에서 실행하게 된다. 이때 실행되는 함수의 원본은 Main Processor..
원형 큐(circuit queue) 예제 통신을 위한 메시지 큐나 순환되는 큐 구조를 만들고 싶을 때 원형 큐를 많이 사용한다. C로 구현한 원형 큐 구현 예제는 인터넷에 많으므로 원형 큐의 데이터를 구조체로 체우는 예제를 공유해 본다. Queue 사이즈를 동적으로 만들기 위해서 MaxSize를 사용했을 뿐 이와 같은 작업이 필요 없다면 MAX_SIZE로 대체 가능하다. 원형 큐에 들어가는 구조체 데이터는 typedef P_convert element이며 P_convert는 구조체이다. P_convert 대신에 자신이 원하는 구조체를 만들어 사용하면 된다. 파일명: packet_queue.h #include "server_type.h" #define TRUE 1 #define FALSE 0 #define ERROR -1 #define MAX_S..
Pthread 개념 및 예제 pthead에 대한 개념 설명 및 예제는 사실 '이곳'에 너무 잘 정리되어 있어서 따로 정리를 하지 않으려다가. 적용하면서 겪었던 애로 사항들을 정리하기로 했다. Pthread 사용 방법 구분 Main thread에서 새로운 Thread를 생성할 때 생성된 Thread의 종료 여부를 관리하는 detach, join 방법이 있다. pthread_detach 메인 thread와 상관 없이 별개의 thread를 생성하고 싶을 때 사용된다. 생성된 thread의 종료 여부는 관심이 없다. 단 주의해야 할 점은 메인 thread에서 생성된 thread라면 maint thread가 종료되는 시점에 생성된 thread도 종료되므로 이를 해결하기 위해서는 pthread_join을 사용해야 한다. 만약 메인 thread..
Blocking, NonBlocking, Sync, AnSync 차이 Socket 통신을 공부한다면 처음 접하고 이해해야 하는 개념이 바로 Blocking, Blocking, NonBlocking, Sync, ASync이다. 설명과 친절한 이미지를 보면서 정확히 이해해 보자. Blocking Blocking은 아래 그림처럼 Function A가 Function B가 수행 완료되기까지 아무것도 못하고 기다리는 상태이다. 프로그래밍할 때 기본적으로 함수를 콜 하면 이와 같은 방식으로 작동하고 기본 Socket도 아무 설정 안 하고 Read함수를 사용하면 무한정 대기 모드로 빠진다. Non-Blocking 말 그대로 Blocking을 하지 않겠다는 뜻이다. thread가 하나일 때 무한정 기다린다면 다른 작업을 하지 못할 것이다.(예 지금 socket이 죽었는지 살았는지 현재 ..
C Socket 사용시 주의점 Endian 맞추기 C에 TCP Socket에서는 Default으로 Big Endian을 사용한다 때문에 Port 나 IP 정보는 BigEndian으로 날아가는데 칩셋에 따라 Endian이 바뀌기 때문에 해당 칩셋을 확인 후에 보내는 곳의 칩셋과 받는 곳의 칩셋을 맞추어 보내주어야 한다. 동일 개발환경이라면 사실 신경 안 써도 되는 부분이며 주의사항만 알고 개발하면 된다.(Endian 관련 블로그가 많다) **만약 주고받는 곳 중 하나가 임베디드 시스템이라면 PC 쪽에서 변환하거나 받는 것을 추천한다.(메모리 사용량 최소화) Write/ read 사용 시 주고받는 메모리 사이즈 맞추기 보내는 Packet size와 받는 Packet 설정 size가 맞아야 한다. 받는 버퍼의 초과 분만큼 read를 더 수..

반응형