Loading...
2016. 10. 23. 18:18

가상 환경을 사용한 Python 설치 - Virtualenv, autoenv

이번엔 Python을 가상 환경에서 설치하는 방법을 알아봅시다. 왜 Python을 가상 환경에서 설치해야 할까요? Python의 버전은 현재 2.7 버전과 3.x 버전이 존재합니다. 아마 프로그래밍을 조금 해보신 분들 중에 Java 라는 언어로 프로그래밍을 많이 해보신 분들이라면, 이런 버전의 차이에 굉장히 반감을 하거나 민감하게 반응하실 수 있습니다. 그렇습니다. 그 이유 중에 하나는 바로 여러분들이 프로그램을 개발하다 반드시 사용하게 되는 바로 "라이브러리"라는 녀석 때문이죠. 물론 공개된 라이브러리들은 대부분 최신 버전에 맞춰 수정이 되긴 하지만, 자신이 개발하는 프로젝트 내지 프로그램이 한 라이브러리만 쓰는 것은 아니기 때문에 모든 라이브러리에 버전을 맞추려면 여러 가지 고려해야될 사항이 많아집니..

2016. 10. 15. 15:22

Python 개발 환경, 프로그램 설치와 비교(3) - PyCharm

이번 포스트는 PyCharm 설치 포스트입니다. 아직 Python을 설치하지 못하셨다구요? 아래의 버튼을 클릭하여 설치 방법을 확인하시기 바랍니다. Python 설치 방법 보기 JetBrains PyCharmJetBrains 개발 도구를 많이 사용해보신 분들이라면, 유료 소프트웨어임에도 불구하고, 그 매력에 아마 많이 매료되실 것입니다. PyCharm은 JetBrains에서 개발한 Python 개발 IDE 도구입니다. 위에서 말했다시피 유료 소프트웨어지만, 무료로 일부 기능을 사용할 수 있고, 대학생의 경우, 1년에 한 번 씩 라이센스 갱신을 통해 전 기능을 무료로 사용하실 수도 있습니다. PyCharm은 매우 깔끔한 UI와 여러 개발 환경을 설정하도록 지원함과 동시에 django 등 웹 개발에도 유용하..

2016. 9. 24. 14:54

Python 개발 환경, 프로그램 설치와 비교(2) - Sublime Text 3

포스팅을 한지가 참 오래되었습니다. 학교 생활을 다시 시작하고 나서 여러 프로젝트 준비와 과제들이 이것저것 쌓이다보니, 블로그 활동을 소홀히 하게 되네요 ^^; 오늘은 지난 포스팅에 이어서 Python 개발 환경 설치를 계속 진행하도록 하겠습니다. 아직 Python을 설치하지 못하셨다구요? 아래의 버튼을 클릭하여 설치 방법을 확인하시기 바랍니다. Python 설치 방법 보기 Sublime Text 서브라임 텍스트 에디터는 Jupyter와 달리 유료 소프트웨어이지만, 무료 소프트웨어로도 사용할 수 있습니다. 이 개발 도구가 정말 좋은 것은 유료 소프트웨어와 무료 소프트웨어의 기능 차별이 전혀 없으며 단지 다른 점이 있다면, 구매해달라는 메시지를 가끔 뿌려주는 것 뿐입니다. Sublime Text는 UI가 ..

2016. 9. 6. 14:10

Python 개발 환경, 프로그램 설치와 비교(1) - Jupyter

13년도에 제가 학부 수업에서 Python을 원어 수업으로 들었습니다. 그 때만해도 교재가 거의 네트워크 교재 수준으로 두꺼웠었는데 수학적인 내용도 많았고, 이미지 처리 하는 등의 내용도 많이 있었지만 크게 관심을 갖지 않았습니다. 그러다가 최근에 Machine Learning을 공부하기 시작하면서 다시 Python을 접학게 되었는데요. 예전에도 그렇지만 지금은 더 뜨거운 언어가 Python인 것 같습니다.. 어느 컨퍼런스나 발표를 가도 Tensorflow 내지 Django에 대한 이야기가 굉장히 많더군요. 그래서 이번 포스트에서는 Python 카테고리를 추가하여 포스팅을 해보고자 합니다. Python 설치와 실행 Python은 Linux, Mac OS X, Windows 어디서든지 이용이 가능한 자유로..

2016. 8. 31. 01:09

HANDLE 구조체와 Kernel Object를 이용한 윈도우 프로그래밍

지난 포스팅에 이어 이제 본격적인 코딩에 들어가보도록 하겠습니다. HANDLE 구조체 HANDLE 구조체는 전 포스트에서 적혀있었다시피 Kernel object를 건드리기 위한 구조체입니다. 여러분들이 만약, 파일을 생성하거나 읽거나, 쓰거나 아니면 프로세스를 제어하는 데는 반드시 HANDLE 구조체를 사용하여 어떤 개체를 건드리고 싶은지를 명시해야 합니다. #include int _tmain(int argc, TCHAR* argv[]) { HANDLE hFile = CreateFile(); } 예를 들어 파일을 건드리고자 하는 경우, CreateFile API를 이용해서 기존에 있는 파일을 읽던지, 아니면 파일이 존재하지 않으면 새로 생성하여 WriteFile API를 이용해 데이터를 쓸 수도 있습니다..

2016. 8. 29. 21:16

HANDLE 구조체와 Kernel Object

이 내용을 쓰기 전에 많이 고민을 했던 것은 다름이 아닌 프로세스에 대한 설명과 운영체제 커널에 대한 전반적인 이야기를 포스팅을 해야할까, 하지 않아도 될까 라는 고민을 많이 한 채 이 내용을 바로 다이렉트로 포스팅하게 되었습니다. 그래서, 이 포스팅을 보시기 전에, 반드시 운영체제 커널에 대한 전반적인 이해와 프로세스에 대한 기초적이고, 기본적인 부분을 숙지 후, 이 포스트를 보시면 감사하겠습니다. Kernel Object커널 오브젝트라는 것은 말 그대로 커널 객체입니다. 여러분들이 사용하는 Windows에서 커널 안에 존재하며 그에 의해 관리되는 리소스 정보를 담고 있는 데이터 블록의 일종입니다. 쉽게 한 번 이야기해보겠습니다. 운영체제 커널에는 시스템의 운영을 위해, 파일, 프로세스, 쓰레드가 존재..

2016. 8. 10. 22:34

PHP에서 DBMS를 연동하는 새로운 방법, PDO

웹 사이트를 구축하다보면, DBMS와 연동해야 될 일이 생깁니다. 특히 동적 사이트 등의 게시판을 이용하는 유형의 사이트들은 더욱 그러하지요. 최근 제가 새로운 단일 페이지 구축을 하게 되면서, PHP에서 다른 방법으로 DBMS와 연동할 수 있는 방법을 찾았는데, 이 방법이 생각보다 유용하다 생각하여 포스팅해보고자 합니다. 기존 방식의 DBMS 연동저는 PHP 언어를 C 언어와 유사하게 되어 있어서 절차 지향 프로그래밍 방식으로 코딩하는 습관을 가지고 있었습니다. 위와 같이 절차 지향 프로그래밍 방식으로 구성할 때는 선택적으로 DB 서버 연결에 실패했을 경우, 조건문을 작성하여 처리해야 했으며 그렇지 않으면 php_fpm socket 서버에서 직접 오류를 뿜는데, 웬만해서 die 함수를 사용해 리소스를 ..

2016. 7. 19. 01:48

SBCS, MBCS와 WBCS / 유니코드 프로그래밍이 중요한 이유

이번 포스팅에서는 Charset에 대해서 알아보겠습니다. Charset 부분은 조금 내용이 많으면서도 헷갈리는 부분이 많기 때문에, 잘 숙지하시고, 몸에 베어서 사용하는 것이 좋습니다. 또한 이번 포스팅에서 MBCS와 WBCS를 어떻게 적절히 조합해서 사용할 수 있는지를 알아봅시다. 보통 여러분들이 코딩을하거나 문서를 작성하다보면, "인코딩"이라는 단어를 많이 듣게될 것입니다. 문서 작성에서의 인코딩은 Charset(캐릭터셋)을 의미하는 것이고, 동영상 작업에서는 영상 포맷 등을 의마하는 것이지요. 코딩에서 또한 Charset이 존재합니다. 과거에는 ASCII 코드를 사용하였고, 지금은 강화되고, 편한 유니코드를 사용하고 있지요. 하지만 Linux에 있었을 때는 잘 몰랐었는데, Windows에서 와보면 ..

Win32 API의 자료형

이제부터 우리는 Windows API를 Win32 API라고 정의하겠습니다. 그 이유는 우리가 만드는 프로그램은 x86인 32비트 기반의 컴파일러를 이용해서 프로그램을 빌드하고 있기 때문입니다. Win32와 Win64에 대한 설명은 차후에 별도의 포스팅을 통해 보도록 하겠습니다. #include 우리는 Windows API를 사용할 때 위 헤더 파일을 사용하는 것으로 알고 있죠, 이 헤더 파일을 이용해서 간단한 메시지 창을 만들어보기도 했었습니다. 하지만 MessageBox의 인자 값에서는 여러가지 자료형들이 나왔는데요. MessageBoxA(_In_opt_ HWND hWnd, _In_opt_ LPCSTR lpText, _In_opt_ LPCSTR lpCaption, _In_ UINT uType); 자 ..

2016. 6. 12. 20:45

Windows API 와의 만남

오늘은 카테고리를 추가하여, Windows API에 대한 포스팅을 하고자합니다. 여태까지 저는 Linux와 친숙해오면서, Windows를 잘 사용하지 않고 있는 편입니다. 하지만, 학교 과제나 일반적인 업무 등을 보다보면, Windows는 피할 수 없는 존재이기 때문에 자주 사용합니다. 그렇다보니 Windows Kernel 쪽에도 관심을 갖게 되었습니다. Windows API는 제가 C 언어를 배웠을 때만해도 아직 한창 몰랐던 시스템이였습니다. 이 Windows API를 알게 된 것은 GDB를 사용하던 Linux의 디버거가 Windows에서는 OllyDbg나 Immunity Debugger를 사용하면서부터 Unix나 Linux와 달리 Windows 에는 특별한 API 모듈이 있다는 것을 알았습니다. 사실..

2016. 4. 3. 13:17

GCC Stack Smashing Protector

C 컴파일러에는 굉장히 종류가 많습니다. Dev C Compiler, Visual C Compiler, GNU C Compiler .... 뭐 그 외에도 여러가지가 있지요? 오늘은 Buffer Overflow라는 것을 주제로 시작하여, GNU C Compiler에 존재하는 Stack Smashing Protector가 어떤 것인지를 설명하도록 하겠습니다. 자, 어떤 코드를 제가 작성을 해서 이렇게 입력을 받고 났더니, 위와 같이 에러 메시지를 뿜어냅니다. 왜 그럴까요? 소스 코드를 보도록 하겠습니다. 코드를 한 번 분석해봅시다. 배열을 이용해서, 1개의 공간을 초기화 해주긴 했지만, i 의 변수를 통해, 배열의 크기를 지정하는 것 같습니다(?) 그리고, fibonacci 라는 함수를 써서 그 데이터를 보..

2015. 10. 27. 01:11

Eclipse를 사용하여 원격 서버를 통한 PHP 개발 환경 구축하기

생각보다 글을 안쓴지 꽤 오래된 듯 하네요;; 오늘 새벽은 제가 2년 전에 잠깐 카테고리만 만들어 놓고 묵혀두었던 PHP 카테고리를 조금씩 채워나가고자 합니다. 사실 이전에도 PHP로 계속 개발을 쭉 해왔었고, 웹 프로그래밍 언어에서는 JSP나 ASP/ASP.NET에 비하여 PHP를 주로 많이 사용하는 편입니다. 그렇다보니 서버를 한 대 두고 웹 서버로 원격 접속해서 vim이나 nano 에디터로 수정하기에 여러 플러그인 사용도 꽤 불편해서 사용했던 것이 바로 이클립스였는데요. 사실 저는 이클립스로 주로 개발을 하는 편입니다. 일단 제가 주로 사용하는 운영체제인 우분투 리눅스에서 사용이 가능하고, 어떤 언어의 IDE 편집기로 사용이 가능하기 때문이죠. 그런데, 제가 현재 쓰고 있는 서버로 웹 페이지를 구동..

2013. 10. 2. 12:53

Google Web Designer 1.0 Beta

뜻밖에 듣지 못한 Google에서 만든 웹 에디터 프로그램의 등장이네요;; 저만 못들은 것일까요? 어쨌든 사용을 해본 후기를 적어보도록 하겠습니다. Google Web Designer는 현재 Beta Release 입니다. 지원되는 플랫폼(OS)는 Windows와 Mac에서 지원되며 Linux는 지원하지 않습니다. UI는 Adobe PhotoShop과 유사하며 웹 디자이너인 만큼 Code를 직접 입력하지 않아도 마우스로 할 수 있는 간편하다는 장점이 있겠지요? 하지만 역시 Code로 직접 쓰는 것만큼 매력적이지 못하군요.. (?) 그 외 CSS를 직접 수정할 수도, 이벤트를 만들어줄 수도 있고, 기존 HTML 편집기와는 다른 Webkit 에디터라고 보면 쉬울 것 같습니다. 아래에 보면 직접 HTML5로 ..

2013. 8. 12. 12:41

Boost thread Library

Boost 두 번째, 오늘은 쓰레드 라이브러리에 대해 알아보겠습니다. 먼저, 쓰레드라는 것은 메모리에 올라가 있는 한 프로세스 내에서 실행되는 흐름의 단위를 일컫는 말입니다. 보통의 프로세스들은 한 개의 쓰레드를 가지고 있지만 경우에 따른 큰 프로세스들은 여러 개의 프로세스를 가지고 있는데, 이를 멀티 쓰레드라고 얘기합니다. Boost에서 쓰레드를 사용하려면 아래의 헤더파일을 사용해야합니다. #include or #include 먼저 간단한 쓰레드 코드로 시작해보도록 합시다. t 라는 쓰레드 변수를 사용해서 hello 함수의 내용을 쓰레드로 표현했습니다. 이후 실행되는 쓰레드의 주소를 가지고와서 출력해 쓰레드를 종료한 후의 주소를 가지고 와서 출력해봤습니다. 종료 후의 주소를 가져와서 출력한 이유는 정확..

2013. 8. 7. 15:55

Java Puzzlers - Scraping the Bottom of the Barrel (Google I/O 2011)

포털을 돌아다니던 중에 재밌는 Java 요소를 발견했습니다. 바로 Google I/O 2011에 있었던 Java Puzzler라는 것인데요. 이 영상에서는 발표자 JOSH BLOCH, JEREMY MANSON 두 사람이 6가지의 Java 프로그래밍 언어의 퍼즐을 발표합니다. 먼저 그 첫 번째, Time for a Change, 영상에 나온 소스대로 입력했을 때, 거스름 돈은 얼마입니까? 라는 문제지요. 여기서 가장 중요한 것은, 자료형이 double이라는 것입니다. 거스름돈은 0.8999999999999999가 나옵니다. 왜 그럴까요?Java에서 double 연산은 정확한 값을 제공해주지 않는다며, big decimal을 사용하라고 권장합니다. 따라서 Big Decimal을 사용해 다시 한 번 연산을 해..

2013. 6. 9. 13:20

파일 생성하는 코드

이 코드는 파일을 만들어내는 코드입니다. C 에서는 fopen이라는 함수, Python에서는 file이라는 것으로 받아내지요. 실제로 리버싱을 할 때 이 코드는 매우 유용합니다. 국내의 대부분 악성코드는 Microsoft Windows에서 작동하기 때문에 실제 코드 분석을 할 때도 이 코드는 정말 많이 사용합니다. 위 화면처럼 코드 작성 후 디버그를 진행하면 아래 화면처럼 TEST.txt라는 파일이 한 개 생성됩니다. 정상적으로 파일이 생성되셨다면, 파일을 열어봅시다. 그럼 파일에 위에서 작성한 'DISK FILE OPEN, WRITE, CLOSE"라는 문구가 txt 파일 안에 있다는 것을 알 수 있습니다. 같은 방법으로 응용한다면 더 많은 곳에 쓰일 수 있겠지요?

2013. 6. 2. 13:26

가장 큰 수를 찾아내는 코드

어셈블리어 포스팅을 처음해보는데, 상당히 난감하네요. 글을 어떻게 포스팅해야 쉽게 설명이 될지... ㅎㅎ; 일단 어느 정도 지식이 있는 사람을 위한 글이라고 생각하고 적어 내려가봅니다... 위 코드는 제가 데이터 세그먼트에 입력한 숫자 중 가장 큰 숫자를 찾아내는 코드입니다. 각 숫자를 불러오기 위해 CX에 5개를 부여해주고, 데이터 세그먼트에서 숫자 5개를 불러올 수 있도록합니다. 그 다음 숫자를 비교하기 위해, JA 코드를 사용하여 비교하도록 하고, 마지막 최종으로 구별된 최댓값을 AL 주소에 저장하여 HIGHEST로 보내줍니다. 데이터 세그먼트에서 HIGHEST는 0010 주솟값에 저장호도록 셋팅되어 있으므로 위 debug 화면 처럼 0010 값이 60으로 바뀌어 있는 것을 알 수 있습니다.여기서 ..

Boost Random Number Generator Library

Boost Library의 랜덤함수를 사용하여 난수를 생성하는 방법에 대해 알아봅시다. 보통 C언어에서 난수를 만든다고 하면, rand()/srand()를 사용하셨을겁니다. 좀 더 덧붙여서 time.h를 include하여 time까지 썼던 사람들도 아마 대부분일 것입니다. 먼저 Boost Documentation에 적혀있는 랜덤함수에 대해 적어봤습니다. 난수는 다음과 같이 다양하면서 다른 문제영역 해결을 위해 개발되었습니다. 1. 계산 (시뮬레이션, 몬테칼로리 적분) 2. 게임 (적의 움직임)3. 보안 (건생성)4. 테스트 (무작위한 화이트 박스 테스트) 문제영역의 요구에 따른 난수 생성자의 다양한 변화. 1. 비결정적 난수생성자2. 의사결정 난수생성자3. 준 난수생성자 랜덤함수 라이브러리 개발 목표 1..