사내에서 SVN으로 소스 버전관리를 하고 있어 GIT은 거의 사용하지 않았으나, Python 공부하면서 만들어본 Toy Project 소스를 관리하기 위해 GitHub 계정을 생성하였다. GIT과 SVN의 차이는 아래 블로그에서 정리가 잘되어 있기에 아래 글을 참고하도록 한다. GIT 과 SVN의 개념 및 장단점 형상관리, 버전관리 GIT 과 SVN 을 이해하려면 먼저 형상관리(버전관리)에 대해 이해해야 한다. 프로젝트를 진행할 때 각자 업무를 나눠서 맡은 부분을 개발을 하게 되는데, 각자가 개발한 코드 혹은 문서들을 하나의 dzzienki.tistory.com 간단히 설명하면 svn은 중앙 서버를 중심으로 소스 관리가 이루어지는 반면, git은 로컬 저장소를 추가하여 Client 별로 개별 소스의 버전..
파이썬 기본 문법을 익히고, 파이썬 코딩에 익숙해지기 위해 간단한 앱을 만들어보기로 한것이 바로 로또 번호 생성기이다. 원래는 web application으로 만들고 싶었으나, 아직은 파이썬 웹프로그래밍을 공부하지 않았기 때문에 우선 윈도우 프로그램을 만들어보았다. 현재까지의 로또 당첨번호와 비교하여 특정 조건에 맞는 번호를 제외한 추첨번호를 추출하며, 로또 당첨번호를 파일 또는 SQLite DB에 저장할 수 있다. GitHub https://github.com/highgon2/BigHitLotto 개발도구 Python, SQLite 기능구현 동행복권 로또 당첨번호 관리 로또 회차 검색 로또 추첨번호 생성을 위한 필터링 기능 추가 Version 0.01 - 2020/12/01 파일로 당첨번호 관리 '로또..
파이썬을 사용하면 http 데이터를 요청하고 결과를 받아 쉽게 처리가 가능하다. 지금 만들고 있는 '대박! 로또' 앱도 동행복권의 web api를 사용하여 당첨번호를 파일 또는 DB에 저장하였다. 파이썬에서 http 데이터를 처리하려면 requests 모듈을 사용하며, requests 모듈에 대한 자세한 설명은 아래 글을 참고하도록 한다. Python :: 파이썬3 requests 모듈 살펴보기(설치, 사용방법 및 예제) Python3 requests 모듈 API를 사용할 때, 주로 사용하곤 하는 requests 모듈에 대해 살펴보려 합니다. 사용하는 방법은 매우 쉽습니다. 사용을 할때는 보통 HTTP 메소드(method, 또는 함수)의 GET 과 POST를.. hongku.tistory.com 동행복권..
zipfile 모듈은 zip, bzip, lzma 형식의 압축 파일을 처리할 수 있다. 하지만 각 형식을 처리하기 위한 모듈이 설치되어 있어야 한다. 그 이외의 압축 형식은 NotImplementedError 예외가 발생한다. zipfile 모듈의 자세한 설명은 아래 문서를 참고 하도록 한다. zipfile — Work with ZIP archives — Python 3.9.1 documentation zipfile — Work with ZIP archives Source code: Lib/zipfile.py The ZIP file format is a common archive and compression standard. This module provides tools to create, read, ..
GUI 앱이 실행될 때, 주모니터 중앙에 실행하려면 해상도 및 앱의 윈도우 크기를 계산하여 앱의 실행 위치를 설정한다. Tkinter는 geometry() 메소드를 이용하여 위치를 설정할 수 있으며, 단일 모니터를 사용하는 환경이라 Tkinter 기본 메소드인 winfo_screenXXX()를 이용하여 실행 환경의 모니터 해상을 알 수 있지만, 2개 이상의 모니터를 사용하는 환경이라면 winfo_screenXXX() 메소드는 가로 크기는 각 모니터의 width를 모두 합한 값으로 나오기 때문에, 이 메소드는 사용할 수 없다. screeninfo 모듈을 사용하면 각 모니터의 정보를 Monitor 클래스로 확인할 수 있다. screeninfo 모듈은 pip로 설치할 수 있으며, 아래 코드와 같이 간단히 특정..
Visual Studio Code Extension인 Hex Editor를 사용하기 전에 우분투에서 Hex Editor로 Bless를 사용하였으나, 우분투 20.04 환경에서 실행하면 앱이 행업되는 경우가 빈번하게 발생하고, 종료도 되지 않아 터미널에서 bless 프로세스를 강제로 종료시키는 경우가 너무 많이 발생하여 쓰지 못할 정도였다. 그래서 Bless를 대체할 앱를 찾아보다 우연히 설치한 Hex Editor 짧게 사용해본 후, 이것을 앞으로 사용하기로 하였다. MS에서 개발하여 배포한 Extension이라 완성도 높으면서 Bless 만큼 가볍고 인터페이스가 매우 심플하여 쓰기가 편하였다. 아래 이미지와 같이 특별한 기능은 없지만 기본 기능에 충실한 Hex Editor이다. Hex Editor를 보고..
파이썬으로 AES encrypt / decrypt 수행하려면 crypto 모듈을 사용해야 하며, 이것은 pip로 설치가 가능하다. $ pip3 install pycryptodome crypto 모듈을 설치하려면 윈도우, 리눅스 환경 구분이 없이 모두 컴파일러가 설치되어 있어야 한다. 만약 컴파일러가 설치되어 있지 않다면 pycryptodome 설치시 에러가 발생한다. 윈도우에서 컴파일러 설치는 아래 MS 홈페이지에서 MS Build Tools 2015 버전을 다운받아 설치할 수 있다. Microsoft Build Tools 2015 Microsoft Build Tools 2015는 관리되는 응용 프로그램 빌드에 필수적인 도구를 제공합니다. www.microsoft.com 우분투는 개발 패키지인 build..
어떤 윈도우 프로그램은 시작할 때 DB가 존재하지 않아 DB를 생성하고 데이터를 업데이트 하는데 일정 시간이 걸린다면 그것을 표시해주는 윈도우를 출력하려고 한다. 이때 DB 업데이트 정보를 출력하는 윈도우가 실행되는 동안 메인 윈도우는 제어를 하지 말아야 한다. 이 프로그램의 윈도우는 아래와 같이 동작을 해야 한다. 두 개의 윈도우을 실행할 수 있으며, 두 개의 윈도우는 종속 관계가 있다. 서브 윈도우가 생성될 경우, 메인 윈도우의 제어가 중단되고 프로그램의 제어권은 서브 윈도우 갖는다. 서브 윈도우가 종료되야 메인 윈도우가 제어권을 가질 수 있다. 메인 윈도우가 종료되면 서브 윈도우도 함께 종료되어 한다. 아래 글과 같이 VC++ Modal Dialog와 같은 기능을 하는 윈도우(프레임)을 생성하려고 ..
파이썬에서 연산 시간을 측정하려면 time 모듈을 사용하여 아래 코드와 같이 간단하게 연산 시간을 측정할 수 있다. import time start_time = time.time() for _ in range(100000000): pass print('proc_time =', time.time() - start_time) 시간은 초(sec)단위이며, 소수점 이하는 nano second 이상의 시간을 나타낸다. 참고로, time.time() 함수는 epoch 시간을 기준으로 시간을 측정한다. 현재 날짜와 시간을 얻기 위해 datetime 모듈을 사용하며, GMT(UTC) 및 Local Time을 얻을 수 있으며, 아래 코드는 간단히 디데이를 계산하는 것을 나타낸다. import datetime today ..
Firmware Header는 build script로 변경하였기 때문에, HW 또는 품질팀에서 테스트 목적으로 버전을 무시하고 다운로드할 수 있는 firmware를 요청하는 경우 종종 있다. 시간 걸리는 일이 아니기 때문에 바로 처리해 주었으나, Firmware Header를 변경할 수 있는 tool 있다면 이런 요청을 하지 않을 수 있기 때문에 Python Tkinter 학습겸해서 처음으로 만들어본 파이썬 윈도우 프로그램이다. Firmware Header Changer 명세 GitHub None 개발도구 Python 기능구현 AES decrypt / encrypt, HMAC Firmware Header 파싱 및 변경 아주 심플한 앱인데, 이것을 시작으로 Firmware 관련 몇 가지 유틸리티를 더 만..
임베디드 회사에 입사하면서 특정 하드웨어를 제어하기 위한 펌웨어을 개발하다보니, Node.js와 같은 최신 기술 동향에 대해선 문외하게 되고 관심밖에 있었으나, 최근 웹 트랜드 및 기술에 관심도 생기고 C언어 하나만으로 부족하다고 생각하여 접근성이 좋은 파이썬을 보기 시작하였다. 파이썬으로 간단한 GUI 프로그램 만들정도 수준이지만, 최종 목표는 Django 또는 Flask를 사용하여 웹어플리케이션을 만드는 것이 목표이다. 우선 파이썬 언어와 친숙해지고 개발 스타일을 익혀야 하기 때문에 회사업무에 필요한 간단한 유틸리티를 파이썬으로 포팅해보려고 한다. 파이썬으로 간단한 프로그램은 만들수 있지만, 이것이 파이썬답게 코딩한 것인지 아닌지 검증을 받을 수 없어 제대로 개발한 것이 맞는지 틀린지 검수할 수 있는..
Nord 테마를 기반으로 만들어진 Nord Deep 테마는 Constrast를 높여 코드 가독성도 좋고 눈의 피로도가 적어 Monokai 테마에서 갈아탄 Visual Studio Code 테마이다. Nord Deep 테마의 색상은 대부분 만족하지만, cursor foreground의 색상이 배경색과 비슷하여 가독성이 매우 떨어지는 단점이 있다. 이것 때문에 다른 테마로 변경하는 것도 그래서 주석 색상만 변경할 수 있는지 찾아본 결과, settings.json 파일에서 특정 토큰(키워드)에 대해 색상을 재정의를 할 수 있다. settings.json 파일의 아래 내용을 추가하면 기존 테마에서 주석 색상만 변경할 수 있다. "editor.tokenColorCustomizations": { "comments"..
간단한 테스트 코드를 작성하는 것이 아니라면 가급적 SW 구조 및 모듈화를 생각하면서 코딩하려고 한다. 파이썬 역시 소스 코드를 모듈화하기 위한 방법으로 패키지를 사용한다. 패키지 관계 및 module path를 설명하기 위해 아래와 같은 패키지 구조를 만들어 테스트 하였으며, main.py 파일이 실행 시작 위치이다. 극단적인 구조를 만들기 위해 아래와 같이 모듈간 서로 꼬리를 물며 다른 모듈의 클래스를 생성하고 있다. src 디렉토리에서 main.py 파일을 실행하는데에는 전혀 문제가 되지 않지만, 각 모듈을 검증하기 위해 서브 디렉토리에서 a_module.py, b_module.py 등을 실행하면 모듈을 찾을 수 없다는 에외가 발생한다. 파이썬의 패키지나 모듈을 검색하는 순서는 아래 글을 참고하면 ..
MS에서 제공하는 Python Extension을 설치하여 파이썬 런타임 환경과 인텔리센스 등과 같은 다양한 기능을 사용할 수 있어 파이썬 개발의 효율을 높일 수 있다. Visual Studio Code는 파이썬 코딩 스타일을 실시간으로 검사하고 있으며, 개발 PC에 pylint 패키지가 설치되어 있지 않다면 아래와 같은 메시지가 출력된다. 기본적으로 파이썬은 코딩 스타일을 강제하고 있어, 다른 언어보다 코드 가독성이 높다. 코딩 스타일을 pylint로 검사하기 때문에 pip를 사용하여 설치하도록 한다. $ sudo apt install python3-pip $ pip3 install pylint pylint 설치로 파이썬이 권장하는 코딩 스타일이 아닌 경우 Visual Stdio Code에서 오류 표시..
우분투 환경에서 Visual Studio Code(VSCode)의 전역 설정 파일은 ~/.config/Code/User 디렉토리에 위치한다. 에디터 및 워크벤치와 같은 작업 환경은 settings.json 파일에 저장한다. 그리고 단축키 설정이 가능한데, VSCode는 다양한 플랫폼을 지원하므로 단축키 설정에 대한 동기화 설정은 주의를 해야 한다. 단축키 설정 파일은 keybindings.json 파일에 저장한다. 그리고 프로젝트 단위로 settings.json 파일을 설정할 수 있을 뿐만 아니라 빌드 속성 및 런타임 환경도 설정이 가능하다. 프로젝트 단위 설정 파일은 project_dir/.vsocde 디렉토리에서 settings.json / launch.json / c_cpp_properties.js..