본문 바로가기

전체 글

(245)
Windows에서 HANDLE 사용 관련... 윈도우즈 프로그래밍에서 HANDLE을 리턴하는 함수를 사용시 최근에 봤던 문제점들을 보자.(의외로 많이 봤다.) 아래와 같이 CreateFile을 사용하는 상황에서 제대로 자원이 할당되었다면, 할당된 자원에 대한 HANDLE이 리턴이 될 것이다. Line 7에서는 제대로 할당되지 않았을때를 대비한 방어코드가 들어가 있어서 별 문제가 없는 것처럼 보인다. 하지만, 해당 코드에 대한 분석을 하게 되면, Line 7에서 Redundant Condition과 Line 10에서 Free Null Pointer 오류를 볼 수 있다. 이유는 간단하다. CreateFile이 자원 할당 실패시 NULL을 반환하는게 아니라 INVALID_HANDLE_VALUE(-1로 정의되어 있음.)를 반환하기 때문이다.(MSDN 참조)..
Boost Python 환경 구축 및 사용예제(Visual Studio 2013 Express 사용) - 소스코드 설명 추가 http://ppiazi.tistory.com/entry/Boost-python-visual-studio-2010 위 링크에서 사용된 소스코드 설명을 위한 글이다.(너무 길어져서...) HelloWorldWrapper.cpp Line 01 : Boost Python을 사용하기 위해, 헤더를 추가한다.Line 04 : boost::python namespace 사용을 선언한다.Line 06 : python 모듈의 이름을 지정하고(OOO.pyd의 이름과 동일해야 한다.)Line 08 : python 모듈로 사용할 class를 선언한다. 안에 대상이 되는 Class의 이름을 넣는다.Line 09 : std::string을 인자로 받는 생성자를 추가한다. 생성자는 init 으로 계속 추가할 수 있다. 생성자가 ..
Boost Python 환경 구축 및 사용예제(Visual Studio 2013 Express 사용) C/C++과 python은 비교적 쉽게(?) 연동할 수 있다. 다양한 방법이 있지만, 오늘은 Boost Python을 사용하여 언어간 연동을 해보도록 하겠다. 사용한 환경은 아래와 같다.WinPython 3.3.5.0 x64Boost 1.55Visual Studio 2013 Expresspython과 Boost는 아래와 같이 폴더에 위치해 있으며, 이는 각자 개발환경 마다 다를 것이므로 참고만 하자. 환경변수에 추가할 필요는 없다!WinPython : %PYTHON_HOME% = D:\Development\WinPython-64bit-3.3.5.0Boost 1.55 : %BOOST_HOME% = D:\Development\boost_1_55_0 1. Boost 빌드 보통 Boost의 경우 hpp만 사용하..
fxcop warnings 데이터 가져오기 스크립트 C# 정적시험을 하기 위하여 fxcop을 사용하기로 하였다. 어떤 warning list를 가지고 있는지 조사하려고 웹사이트를 찾았으나 보기 좋게 excel로 전체 데이터는 제공되지 않았다. 간단히 python을 이용하여 warning 정보를 긁어오는 스크립트를 만들어 보았다. html 파싱을 위하여 BeautifulSoup4 모듈을 사용하였고, Excel로 저장하기 위하여 xlwt 모듈을 사용하였다.BeautifulSoup의 Encoding 문제가 발생하여 지체되었으나 대충 4시간 정도 걸린거 같다. BeautifulSoup의 Encoding 문제 해결은 링크를 확인한다.Cause, HowToFix 등 필드에 있는 Tag 들은.. 그냥 엑셀의 바꾸기로 바꿨다.ㅋㅋㅋ(귀찮아!) 아래의 스크립트를 수행하면..
heapq 모듈 - 데이터 모음에서 n개의 최소 / 최대 값 구하기 데이터 모음에서 n개의 최소값 / 최대값을 구하고 싶을 때가 있을 것이다. 이때 사용할 수 있는 유용한 모듈이 heapq 이다. 관련 API는 링크를 확인한다. 예제 1) 리스트에 값이 무작위로 있을때 n개의 최소값과 최대값을 구하는 방법. 예제 2) map 데이터를 가지고 있는 리스트에서 특정 key 값에 대한 n개의 최소값과 최대값을 구하는 방법.
git bare 저장소로 clone 받기 git clone --bare /path/to/repo /path/to/target clone하면서 바로 bare 저장소로 만드는 방법이다. bare 저장소가 무엇인지 궁금하다면, 링크를 확인한다.
Syntax Highlighter 적용 아래와 같이 적용할 수 있다.자세한 내용은 링크를 참조한다. from multiprocessing import Process, Queue import time def do_work(start, end, result): sum = 0 for i in range(start, end): sum += i result.put(sum) return if __name__ == "__main__": t1 = time.time() START, END = 0, 80000000 result = Queue() th1 = Process(target=do_work, args=(START, int(END/2), result)) th2 = Process(target=do_work, args=(int(END/2), END, resul..
Qt Designer와 PySide 사용하여 GUI 프로그래밍 하기(추가) Qt Designer와 PySide 사용하여 GUI 프로그래밍 하기 2/2 에서 보았듯이 GUI에서 signal 처리시 시간이 많이 걸리면 전체 GUI가 먹통이 되는 현상이 있다. 이걸 해결하기 위하여 QThread를 사용하여 수정해 본다. 아래와 같이 소스코드를 수정해 보았다. (파란색 부분이 수정 및 추가된 부분이다.) import sys import time import TestWidget class TestMainDialog2(QDialog, TestWidget.Ui_Form): def __init__(self, parent=None): super(TestMainDialog2, self).__init__(parent) self.setupUi(self) self.connect(self.pushBut..