본문 바로가기

old_Coding

[effective C++] 7장. 템플릿과 일반화 프로그래밍-41, 42 템플릿. 학생 때나 회사 다닐 때나 참 요물입니다, 이 녀석. 창피한 얘기지만 아직도 잘 모르겠어요. 그래서 공부할 겸, 정보 공유도 할 겸 포스팅으로 스터디 자료를 대체합니다. 항목 41: 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성 부터.. 이게 도대체 뭔 소리냐.. 뭐 컨셉 자체는 심플합니다. 클래스와 비교를 하는 것이 이해가 빠를테니 클래스를 먼저 보지요. class Widget { public: Widget(); virtual ~Widget(); virtual std::size_t size() const ; virtual void normalize() ; void swap(Widget& other) ; // .. skip }; 예시를 보면, Widget 이라는 클래스는 일.. 더보기
[Windows OS 관련] 윈도우 서비스 관리하기 (생성/삭제/관리) 윈도우 서비스 생성/삭제/관리 하기 업무 중에 서비스 관련된 부분이 있었는데, 참 간단한 부분이었는데 많이 해딩했다.. 구글링하니 정말 금방 찾을 수 있었다..(아 진리인가..) 윈도우 서비스의 개념에 대한 내용은 추후 포스팅으로 미루기로 한다.(지금 이 포스팅도 몇 일 지나면 까먹을까봐 끄적이는 것..) 기본적으로 윈도우 GUI 환경에서 서비스 조회는 간단하다. 보통 제어판->관리 도구->서비스 로 들어가는 방법이 보편적이고, Windows Server용 운영체제는 관리도구가 이미 키보드 “윈도우 키”만 누르면 찾을 수 있다. 한번 들어가 보면 다음과 비슷한 창이 보일 것이다. (내용은 당연히 다르다..) 필자는 윈도우 등록/삭제는 cmd(윈도우 콘솔창)에서 하고 확인은 이 서비스 페이지에서 했다. (.. 더보기
[정리] 실용주의 프로그래머 - 1. 실용주의 철학 (A Pragmatic Philosophy) Tistory 태그: 실용주의 철학,프로그래밍 습관 Chapter 1. A Pragmatic Philosophy 직면한 문제 너머를 생각하며, 문제를 항상 더 큰 맥락에 놓으려 노력하고, 항상 더 큰 그림을 보려 한다. 그런데 어떻게(How) 도출할 것인가.. 실용주의 프로그래밍은 실용주의 사고의 철학에서 뻗어 나온다. 이 장은 그 철학의 기본을 설정한다. (1) 고양이가 내 소스코드를 삼켰어요. : 실용주의 철학의 초석 중 하나는 자신과 자신의 행동에 책임을 지는 것이다. 자신의 능력에 대해 자부심을 가질 수 있지만 실수나 무지 같은 단점에 대해서도 정직해져야 한다. 책임지기 : 실수를 저지르거나 잘못된 판단을 내렸다면, 정직하게 인정하고 다른 방안을 제안하도록 노력하라. 다른 사람이나 다른 무언가를 .. 더보기
[정리] 실용주의 프로그래머 - 서문 Tistory 태그: 실용주의 프로그래머,패턴 언어 포스팅을 시작하며.. 책을 한 반정도 읽어내려갔는데, 좋은 내용들이 많은 것 같다. 여태까지 보아왔던 특정 언어나 기술/기법에 대한 내용이 아닌, 실제 프로그래머의 사상이나 생각, 사고방식등이 담겨있는 것 같은 느낌이다. 그래서 내용을 정리하기로 하고 몇몇 포스팅을 한다. 앞으로 포스팅될 내용은 "책에서 말하는 실용주의 프로그래머"에 관한 이야기이다. 필자의 생각은 왠만하면 배재할 생각.. Preface 실용주의 : 어떤 특정 기술에 매이면 안 되며, 개별 상황마다 그 상황에서 좋은 해결방안을 고를 수 있도록 충분한 배경지식과 경험을 가져야 한다. 이론과 실천의 결합이 우리를 강하게 만든다. 작가가 생각하는 작가 본인의 책(실용주의 프로그래머)는 : 여.. 더보기
[C/C++] 문자열 다루기(1) - 초기화 C/C++로 작업을 하면서 가장 신경 쓰이는 부분 중 하나가 아마문자열과 문자를 다룰 때 같습니다. NULL 포인터면 포인터가 죽고,작은 실수로 인하여 자칫 잘못하면 strcpy나strlen 등 문자열 함수를 부르면 죽어버리는 경우가 흔하죠. 특히나 C/C++을 이제 막 시작하신 분들이나 자칫 잘못 이해하고 계신 분들은 이런 함수들을 부르기가 꺼려지실꺼라고생각됩니다.(그 중에 한명이 저구요.) 그래서 정리하는 겸, 정리 한번 하고 넘어가려고 합니다. 환경: O.S - Windows 7 Tool - Visual Studio 2008 + sp1. Type - Win32 Console Project (대부분의 경우, 글로벌변수로 char형 배열 인스턴스를 잡고, 함수내에서는 char* 로 조작하도록 하였습니다.. 더보기
[C#] 빌드중 "Win32 리소스를 생성하는 동안 오류가 발생했습니다. 다른 프로세스가 파일을 사용 중이기 때문에 프로세스가 액세스 할 수 없습니다." 에러 이제 막 C#에 입문하고 있는데요. 간혹가다가 저런 에러를 만나게 되네요. "Win32 리소스를 생성하는 동안 오류가 발생했습니다. 다른 프로세스가 파일을 사용 중이기 때문에 프로세스가 액세스 할 수 없습니다." 증상은 빌드를 시도하면 신택스 에러가 걸릴때가 있고, 아닐때가 있더라구요. 문장상 어디선가 리소스를 잡고 안놔주는것 같은데.. 혹여 Windows7 과 호환성 문제인가 싶었는데 그건 아니지 싶네요. 100% 확신에 차서 말씀은 못드리겠지만, 아마도 백신에서 잡고 있는것 같아요 . (뭐.. 계속 구글링하며 코딩하는 저에겐 좀 두렵기도 한 선택이지만.ㅠ) 혹여 위와 같은 에러를 만나신분들은 당황하지 마시고 백신 실시간 검사를 끄시고 시도해보세요 . 전 이런식으로 하니 에러가 등장하지는 않는것 같아요.. 더보기
[STL::Map] Error occured(*) #include #include int main() { std::map mapTest ; for (int i = 0 ; i 더보기
[C] File I/O #include #include #include // 형식 : 이영득_2주차_파일예제.zip const int MAX_FILENAME_SIZE = 20 ; const int MAX_BUFFER_SIZE = 256 ; int main(void) { TCHAR FileName[MAX_FILENAME_SIZE] ; TCHAR InputBuffer[MAX_BUFFER_SIZE] ; ::ZeroMemory(FileName, MAX_FILENAME_SIZE* sizeof(TCHAR) ) ; ::ZeroMemory(InputBuffer, MAX_BUFFER_SIZE* sizeof(TCHAR) ) ; std::cout 더보기
[Scrap] Struct SYSTEM_INFO (*) It's from MSDN, and here is the link: http://msdn.microsoft.com/en-us/library/ms724958(VS.85).aspx SYSTEM_INFO Structure Contains information about the current computer system. This includes the architecture and type of the processor, the number of processors in the system, the page size, and other such information. Syntax C++ typedef struct _SYSTEM_INFO { union { DWORD dwOemId; struct { WORD wP.. 더보기
[C++] Function Pointer(3) (Solution) It's my solution file compressed by zip. * With finishing * Maybe, it would be last about the test code of the function pointer. Later, I'm not sure whether I'm going to write about the function pointer in my server model (because there are so many extra-informations to explain). - ps. This blog is for my English abilities, and I'm not good at communicating in English. If you see grammatic, synt.. 더보기
[C++] Function Pointer(2) (in class & with STL) * Introduction * Here is my second experience. I've often used class in C++, and I finally made it. * Function Pointer in class (code & result)*#include class cTemp1 { private : int m_X ; int m_Y ; void (cTemp1::*m_PtrF1)(void) ; int (cTemp1::*m_PtrF2)(int _x, int _y ) ; public: cTemp1(void); ~cTemp1(void); void Func1(void) ; int Func2(int _x, int _y) ; void Run() ; }; cTemp1::cTemp1(void) : m_X.. 더보기
[C++] Function Pointer(1) (Global function & using array) * Introduction * - A week ago, to parse network packets I used to do 'if' for all case. During optimizations, I turned from 'if' to 'function pointer with map'. I'm going to write about the function pointer as known as possible. * Basic usage (code) * #include void Function1() ; int Function2(int _x, int _y) ; int main() { /////////////////////////////////////////////////////////////////////////.. 더보기
Circular Buffer (Ring Buffer) (*) For the first step to implement an IOCP(Input/Output Completion Port) server model, I simply made a buffer interface to use in the server. I used a buffer which I called "pulled buffer". I'm going to show you my new Ring Buffer with the pulled buffer. * Pulled Buffer * I'd used this pulled buffer for blocking-server models. Its principle is very simple. You can easily understand this. It's assum.. 더보기
[C++] '\0' & '\n' With testing length of characters, I discovered very harm misunderstanding. I usually wrote '\n' to mean 'NULL', but it's terribly wrong. Here is my source code. * Code * #include #include #include int main() { char* Str1 = "Count." ; char* Str2 = "Count.\0" ; char* Str3 = "Count.\n" ; wchar_t* wStr1 = L"Count." ; wchar_t* wStr2 = L"Count.\0" ; wchar_t* wStr3 = L"Count.\n" ; std::cout 더보기
[Scrap] length of characters (I/O Function) (*) strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l prototype size_t strlen( const char *str ); size_t strlen_l( const char *str, _locale_t locale ); size_t wcslen( const wchar_t *str ); size_t wcslen_l( const wchar_t *str, _locale_t locale ); size_t _mbslen( const unsigned char *str ); size_t _mbslen_l( const unsigned char *str, _locale_t locale ); size_t _mbstrlen( c.. 더보기
[Server] 쓰레드를 이용한 에코 서버 구현환경 : 비쥬얼 스튜디오 2008 구현일시 : 2009년도 초 네트워크 기반 : TCP/IP, WindowsSocketProgramming 작성자 : 이영득 설명에 들어가기 앞서, 아래 기본 에코서버에서 사용하였던 accept(), send(), recv() 함수는 우선 블럭킹 모드이다. 무슨말인고 하니, 프로그램이 진행되다가 위에 저렇게 생긴 함수안으로 들어가면 그에 상응하는 무언가가 이루어지기 이전에는 리턴되지 않는다(함수에서 빠져나오지 않는다). 자세히 설명하면, 내가 accept() 함수를 호출했다고 하자. 프로그램은 이 함수 안으로 들어간다. 그리고 상식적으로 함수안으로 들어가서 리턴이 되야 정상인데, 이놈은 리턴이 안되고 머무른다. (마치 함수안에서 무한루프를 도는것처럼) 자. 그럼 현재 .. 더보기
[Server] EventSelect 진행중 (실수로생긴 버그) Accept() 함수의 이해부족(세션메니져에 리슨소켓을 넘겼다) 기본적인 세션의 리시브, 센드의 이해부족(직접따라가보면서 해보자) 왜 서버와 클라이언트 모듈에서 리시브하는 방법이 틀린가..? - 12시간 해딩후 망가진 내 폐와 정신상태..ㅠㅠ 더보기
[Server/Client] 기본함수로 구현한 에코 서버 구현환경 : 비쥬얼 스튜디오 2008 구현일시 : 2009년도 초 네트워크 기반 : TCP/IP, WindowsSocketProgramming 작성자 : 이영득 이제 저도 공부시작한지 5~6개월 되는것 같네요. 이 소스는 올해 초쯤 서버 공부를 하면서 제일 처음 짜본 소스입니다. 기본 클래스 구성은 Acceptor, Session, Err 이렇게 3개를 가지고 있는데, Err은 C언어의 함수개념으로 생각하고 모든 클래스에서 부를수있도록 정의했었군요. 여전히 제 서버의 기반은 비슷합니다. 순서만 잘 알아두시면 TCP/IP 접근은 굉장히 쉬운것같네요. WSA 초기화 ->SOCKET 초기화 -> Bind(서버정보) -> Listen(대기상태로전환) -> (1번 루프시작) Accept(클라이언트접속대기) ->(.. 더보기
[API] 기본 창 소스 다쳤는데 창이 안생길때... bool DG_cAPI::DG_CreateWindows() { WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); WndClass.hCursor = LoadCursor(NULL,IDC_ARROW); WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION); WndClass.hInstance = GetModuleHandle(NULL); WndClass.lpfnWndProc = WndProc; WndClass.lpszClassName = L"First"; WndClass.lpszMenuName = NULL; WndClass.style.. 더보기
[C++] Queue Linked List 작성 이번엔 큐입니다. Stack에서는 맨 앞에있는 Top만 참조했었습니다. Queue의 개념은 이렇습니다. 가장 먼저들어온 녀석을 가장 먼저 처리해주는겁니다. 예로 매표소에 줄서있는 모습을 상상하시면 되는데요. A부터 순서대로 G까지 줄을 섰다고 가정하면 A B C D E F G 순으로 줄을 섰겠죠? 여기서 Queue자료형에서는 A를 가장 먼저 처리해줍니다. 먼저 줄선 사람들을 먼저처리해줘야 공평하겠죠?? 가장 먼저 들어온 A를 처리하면 B C D E F G 가 되겠네요 Queue에서는 빠른 처리를 위해 Front와 Rear 두개의 포인터변수를 둡니다. 앞쪽을 처리한다고하고(처리후 삭제) 뒷쪽에 새로운 데이터들이 줄을 선다고했을때 매번 List처럼 포인터를 끝까지 옮겨가면 시간적으로 비효율적이겠죠. 자료들이.. 더보기