MyAlbum   Pet
DirectX   openGL   Java   C/C++   STL   C#   Python   Window   ActiveX   SE & Refactoring   Game   Unicode   googleDesktop   Network   Database   Web   php   asp   asp.net   Library   QT   wxWidget   Something to read  
ToDo
zelon's WebAlbum
Google Tools
Google Naver map
ToRearrange
OpenOffice.org
Eclipse
Check W3 validator
Programming
e i R f
Anonymous

목차 #

Contents

1 목차
2 윈도우 CE 개발시에 디버깅 방법
3 TrueTypeFont
4 ruby 시작하기
5 메모리 누수 체크하는 코드
6 UI
7 무료 e-book 들
8 하위 메뉴들
9 주요 링크
9.1 개인 홈페이지들
10 하위 문서들
10.1 google talk 연동 라이브러리
10.2 ASP.NET 으로 404 not found page 매끄럽게 하기
10.3 directx 에 관련된 수학적 버그
10.4 유틸리티들에 대한 문서
10.4.1 CVS GuideLine from kldp
10.5 Code Beautifier
10.6 Font 에 대해서
10.6.1 Serif 와 Sans-Serif
10.6.2 Font Family
10.7 디버깅하기
10.7.1 windbg
10.7.2 VC++ 의 Output 창에 memory leak 날 때
10.8 잡다한 것들
10.8.1 VC++ 2005 에 바뀐점
10.8.2 embedded visual c++ 에서 visual studio 2005 로 옮기기
10.8.3 특정 URL 의 웹 사이트 띄우기
10.8.4 어느 프로그래머의 팁 사이트
10.8.5 C 의 rand() 함수
10.8.6 Window Explorer shell 확장하기
10.8.7 Visual Studio C++ 에서 출력창에 문자열 찍기
10.8.8 프로그래머가 되는 방법
10.8.9 휴대폰 개발시에
10.8.10 C# 에서 장치들 나열하기(시스템 프로그래밍)
10.8.11 C# 에서 LINE, FILE_NAME 같은 거 이용. StackFrame class
10.8.12 GetLastError() 를 string 으로 받기
10.8.13 VC++ 에서 CallStack 뽑기
10.8.14 디버깅 이야기, strace, truss, tusc
10.8.15 미니덤프 만들고 내용보기
10.8.16 주요 RFC
10.8.17 자기 subnet 에서 사용중인 ip 및 online 구하기
10.8.18 같은 프로그램 중복 실행 방지
10.8.19 printf() 와 같은 인자 사용하기
10.8.20 main() 보다 먼저 실행되는 함수
10.8.21 diff 와 patch 를 이용한 파일 patch 하기
10.8.22 hooking 하기
10.8.23 ps2 programming
10.8.24 버그 추적 시스템
10.8.25 VC++ .NET 이 버그
10.8.26 make any string

2 윈도우 CE 개발시에 디버깅 방법 #


3 TrueTypeFont #


4 ruby 시작하기 #


5 메모리 누수 체크하는 코드 #


6 UI #


7 무료 e-book 들 #


8 하위 메뉴들 #


  • nasm nasm 관련 페이지

9 주요 링크 #


http://www.wotsit.org - 각종 파일 포맷 분석

http://www.devpia.com - 윈도우 프로그래밍의 대부

http://www.sysinternals.com - 다양한 프로그래밍 및 시스템 관련 유틸리티들을 구할 수 있음. 특히 Process Explorer 좋음.

http://www.kldp.org - 리눅스 프로그래밍의 대부

9.1 개인 홈페이지들 #



  • http://www.pie.pe.kr/
  • http://blog.naver.com/bravedog

  • 10 하위 문서들 #


    Network Programming

    Database Programming

    Optimize

    Java Programming


    MFC

    Programmer's Culture

    10.1 google talk 연동 라이브러리 #


    Google Talk가 무엇인지는 http://bbs.kldp.org/viewtopic.php?t=61875&highlight=google+talk 여기를 보시면 되겠습니다.
    
    구글에서 구글 토크 서비스와 연동이 가능한 소스를 BSD 스타일 라이센스 하에 공개하였다고 합니다. 예전엔 IM서비스만 연동이 되었었는데, 이제는 VOIP서비스도 연동될 수 있는 길이 열렸습니다.
    
    홈페이지: http://code.google.com/apis/talk/index.html
    소스: https://sourceforge.net/projects/libjingle/
    
    출처:
    http://www.jabber.org/press/2005-12-15.shtml
    http://slashdot.org/articles/05/12/16/070245.shtml
    http://google-code-updates.blogspot.com/2005/12/jingle-bells.html
    

    from kldp


    10.2 ASP.NET 으로 404 not found page 매끄럽게 하기 #


    10.3 directx 에 관련된 수학적 버그 #


    RSA 암호 모듈을 사용하던 중 디코딩이 안되어서 한참을 헤매다가 발견된 현상입니다. 특정 수학 함수 fmod() 등에서 directx 를 초기화한 후 다른 결과값이 나옵니다. 정확한 테스팅을 해보아야하겠지만, 제 생각에는 directx 초기화 후, 수학 함수들이 CPU 가 아닌 GPU 를 사용하게 후킹 같은 것이 되어서 그런것이 아닐까 생각해봅니다.

    아래의 코드를 테스트 해보세요.

    	double result = 29557.0;
    
    	result *= pow( (double)12594.0 , (double)1.0 );
    

    위의 코드가 direct3d 를 초기화하기 전과 한 후의 결과 값이 다릅니다.

    10.4 유틸리티들에 대한 문서 #


    10.4.1 CVS GuideLine from kldp #


    CVS & VSS

    WinampPlugin

    [http]Dev-C++ 간단 튜토리얼


    10.5 Code Beautifier #

    HowTo : http://www.faqs.org/docs/Linux-HOWTO/C-C++Beautifier-HOWTO.html AStyle : http://sourceforge.net/projects/astyle

    === 각종 파일 포맷들에 대해

    http://www.wotsit.org/

    10.6 Font 에 대해서 #


    10.6.1 Serif 와 Sans-Serif #



    Serif 는 폰트의 끝부분에 장식이 있는것을 말한다. Sans-serif 는 끝부분에 장식이 없는 것이다.

  • Serif 가 있는 대표 폰트 : 바탕, 명조, Times New Roman
  • Serif 가 없는(Sans-serif) 대표 폰트 : 돋움, 고딕, Arial


  • 10.6.2 Font Family #



    RomanSerif 가 있고 가변폭이다.
    Modern고정폭이며 Serif 는 있을 수도 있고, 없을 수도 있다.
    Script손으로 쓴 듯한 필기체 형식의 폰트
    SwissSerif 가 없고 고정폭이다.
    Decorative장식체
    Dontcare어떤 패밀리에도 속하지 않는 패밀리. 실제로 존재하는 패밀리가 아니라 임의의 패밀리를 지칭하는 용어


    10.7 디버깅하기 #


    10.7.1 windbg #


    윈도우 환경에서의 VC++ 의 디버그보다 더욱 강력한 디버거. http://www.microsoft.com/whdc/devtools/debugging/default.mspx 에서 찾을 수 있다.

    10.7.2 VC++ 의 Output 창에 memory leak 날 때 #

    http://www.kgda.or.kr/cgi/technote/main.cgi?board=program02&ryal=&view=2&back=&search=crt&where=1&how=1&x=16&y=13

    10.8 잡다한 것들 #


    10.8.1 VC++ 2005 에 바뀐점 #


    10.8.2 embedded visual c++ 에서 visual studio 2005 로 옮기기 #


    10.8.3 특정 URL 의 웹 사이트 띄우기 #

    	ShellExecute(NULL, "open", "http://wimy.com", NULL, NULL, SW_SHOWNOACTIVATE );      
    

    10.8.4 어느 프로그래머의 팁 사이트 #

    http://clhitter.bawi.org/MoinMoin/wiki-moinmoin/moin.cgi/programming_20techniques

    다양한 프로그래밍 팁이 있음... 나중에 정리해야지 ^^

    10.8.5 C 의 rand() 함수 #

    VC++ 6.0 에서 확인했다고 함.
    SEED = (214013*SEED + 2531011) mod 2**31
    X = int( SEED/2**16 )
    

    즉, RAND_MAX 는 2의 16 제곱이다.


    10.8.6 Window Explorer shell 확장하기 #

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_intro.asp

    확장해보자 ㅡ.ㅡ;;


    10.8.7 Visual Studio C++ 에서 출력창에 문자열 찍기 #

    #include <windows.h>
    
     OutputDebugString("Hi~n"); 
    
    쓰자~!! 디버깅할때~

    아... F5(DebugMode) 로 실행할 때만 뜸.

    10.8.8 프로그래머가 되는 방법 #

    [http]From KLDPWiki

    10.8.9 휴대폰 개발시에 #


    어느 제조사의 소스코드를 가지고 계신지는 모르겠으나, 제 경험(컬ㅤㅋㅝㅁ msm6100)으로는 map파일만 안만들어도 배로 빨라지고,
     헤더파일 채크해서 소스 디펜던시 만드는 perl스크립트에서 전체 디렉토리가 아닌 소스 디렉토리만 검사하도록 해도
     엄청난 개선 효과를 보실 수 있습니다.
    
    폰업계를 비하하고 싶은 생각은 전혀 없습니다만, 진짜 비효율적이던데요. 소스코드 관리서부터...
    


    로우레벨 폰 펌웨어 개발은 아니지만, 그 위레벨에서 동작하는 폰용 App(SKT용 WITOP/WIPI)를 개발해본 경험으로도 
    ARM 컴파일/링킹시 map 파일을 생성하지 않는경우 기존 1시간 가까이 걸리던 작업이 3-4분 작업으로 줄었던 기억이 있습니다.
    
    컴파일시간이 납득하기 어려울정도로 오래 걸린다면.. 빌드옵션을 확인해보세요.
    

    10.8.10 C# 에서 장치들 나열하기(시스템 프로그래밍) #

    http://www.codeproject.com/csharp/DivingSysProg2.asp

    10.8.11 C# 에서 LINE, FILE_NAME 같은 거 이용. StackFrame class #


    저는 개인적으로 여기를 추천하고 싶군요... 다른 좋은 곳도 많지만요...ㅎㅎ http://www.c-sharpcorner.com/

    아래와 같이 StackFrame을 만들면 StackFrame의 메소드중에 있더군요...

    // create the stack frame for the function that called this function 
    StackFrame sf = new StackFrame( 1, true ); 
    
    // save the method name 
    string methodName = sf.GetMethod().ToString(); 
    
    // save the file name 
    string fileName = sf.GetFileName(); 
    
    // save the line number 
    int lineNumber = sf.GetFileLineNumber(); 
    

    그럼 즐프~~


    // From Devpia



    10.8.12 GetLastError() 를 string 으로 받기 #

    string GetErrorString(const DWORD & dwErrorNo)
    {
    	LPVOID lpMsgBuf;
    	if (!FormatMessage( 
    		FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    		FORMAT_MESSAGE_FROM_SYSTEM | 
    		FORMAT_MESSAGE_IGNORE_INSERTS,
    		NULL,
    		dwErrorNo,
    		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    		(LPTSTR) &lpMsgBuf,
    		0,
    		NULL ))
    	{
    		// Handle the error.
    		return "Can't Find ErrorMsg";
    	}
    
    	// Process any inserts in lpMsgBuf.
    	// ...
    
    	// Display the string.
    	//MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
    	string ret = (LPCTSTR)lpMsgBuf;
    
    	// Free the buffer.
    	LocalFree( lpMsgBuf );
    
    	return ret;
    }

    10.8.13 VC++ 에서 CallStack 뽑기 #

    http://gpgstudy.com/forum/viewtopic.php?t=1989&highlight=%BD%BA%C5%C3

    gpgstudy 의 포럼에 있는 글.. 으음... 일단 디버깅 정보가 있긴 있어야한다는 걸로 요약되기는 하는데... 좀 더 연구해봐야할 듯.


    Call Stack 관련해서 찾아볼 것

    StackWalk64()

    GetProcessHeap()

    이런거 같기는 한데... 뒤져보다 지쳤음... ㅠ.ㅜ


    10.8.14 디버깅 이야기, strace, truss, tusc #

    http://bbs.kldp.org/viewtopic.php?t=1045

    kldp 에서 본 유용한 글 중 하나... 현철이가 만들고 있는 PE File Format 이랑 내용이 비슷한 듯...

    꽤 재미있는 내용을 출력해줌.

    10.8.15 미니덤프 만들고 내용보기 #

    http://www.codeproject.com/debug/postmortemdebug_standalone1.asp



    10.8.16 주요 RFC #

    HTTP2616
    md51321 - [md5 md5 살펴보
    SMTP821

    10.8.17 자기 subnet 에서 사용중인 ip 및 online 구하기 #

    구하는 방법은 다음과 같이 할수가 있거든요..
    
    먼저 첫번째는
      자신의 IP와 Subnet Mask를 구해서 Subnet의 범위를 구하면 내부아이피의 범위를 
     알수가 있죠, 여기에 현재 켜있는 컴퓨터를 알고싶을 경우에는 Ping 모듈을 올려서
     구한 내부 범위로 ping을 쏘면 Online되어있는 컴퓨터를 볼수 있게됩니다.
    
    두번째는
      SNMP1.1버전을 이용하는겁니다.
      MSDN의 Sample에 WinSnmp라고 있는데 이걸 변형해서 구할수가 있습니다.
      구하는 대상은 현재 내부Network의 인터넷 연결을 맞고 있는 Router에게 Snmp
      Query를 전송하는거죠.
      SNMP 2.0은 적용이 안된 장비도 아직 많지만 1.1은 거의 모든 WAN장비에는 다 실려
      있습니다. 물론 IP Base의 장비일때만이지만요.(말이 이상한가)
      SNMP을 이용하면 해당 IP와 MAC Address도 가져올수 있죠..
      단, 해당 컴퓨터가 Online이 되어 있어야만 하지요
      (ONline이 되면 해당컴퓨터는 전체 네트웍을 검사하게 되는데, 이 검사 패킷을 
      라우터가 받아서 내부 캐시로 가지고 있게 되죠..)
      또,중요한건 SNMP API는 window NT 이상부터 적용이 됩니다..
    
    또 그외에 netbios라는 함수를가지고 Workgroup내의 컴퓨터들을 가져올수가 있는데
      이에 대해서도 첫번째 연산과 같이 할수도 있겠죠..
    
    음 또 있던가.. 생각이 잘 안나네요..
    참고가 되셨기를...
    

    From devpia

    10.8.18 같은 프로그램 중복 실행 방지 #


    윈앰프나, 각종 게임처럼 같은 프로그램이 여러개 뜨게 하지 않으려면
    HANDLE hMutex = CreateMutex(NULL, true, "MY_PROGRAM_MUTEX");
    
     
    
    if(hMutex) { /* 프로그램이 처음 실행된다 */ }
    
    else { /* 프로그램이 이미 실행중이다. */ exit(-1); }
    
     
    
    // 프로그램 종료시
    
    CloseHandle(hMutex);
    


    10.8.19 printf() 와 같은 인자 사용하기 #

    함수 헤더에
    (const char *format,...) 를 추가한다.
    


    함수 본체에
    	va_list			argptr;
    	char			cBuf[512];
    	int				iCnt;
    
    	// 가변 인자 정리
    	va_start(argptr, fmt);
    	iCnt = vsprintf(cBuf, fmt, argptr);
    	va_end(argptr);
    

    를 한 후 cBuf 를 쓰면 된다.


    10.8.20 main() 보다 먼저 실행되는 함수 #


    • 전역 변수를 초기화하는 함수는 먼저 실행될 수 있다.
    bool bCan = IsCan();
    
    • 전역 변수의 생성자는 먼저 실행된다(MFC 의 App Class 가 대표적인 예이다.)

    10.8.21 diff 와 patch 를 이용한 파일 patch 하기 #

    http://www.whiterabbitpress.com/osp/unix/patch.html

    10.8.22 hooking 하기 #

    http://bbs.kldp.org/viewtopic.php?p=146813

    10.8.23 ps2 programming #

    http://ps2dev.org

    10.8.24 버그 추적 시스템 #


    10.8.25 VC++ .NET 이 버그 #


    • find in files, 파일에서 찾기를 할 때 이상하게 바로 "Find was stopped in progress" 라는 메시지가 나오면서 검색이 되지 않는 경우가 있다. 이 때 Ctrl+Scroll 을 누르면 검색이 된다. -_-;; 이걸 어떻게 찾았을까... 구글님이 도와주셨다. 근데 대체 이 사람은 저 키를 어떻게 알았을까 -_-;;;;; - http://www.gotdotnet.com/Community/MessageBoard/Thread.aspx?id=217037&Page=1


    10.8.26 make any string #


    std::string getAnyString(size_t minlen, size_t maxlen)
    {
    	static char szString [] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    	size_t len = rand() % (maxlen - minlen + 1) + minlen;
    
    	std::string ret;
    	for ( size_t i=0; i<len; ++i)
    	{
    		ret += szString[rand() % sizeof(szString)];
    	}
    	return ret;
    }