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
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.5 Code Beautifier #
=== 각종 파일 포맷들에 대해
10.6.1 Serif 와 Sans-Serif #
Serif 는 폰트의 끝부분에 장식이 있는것을 말한다. Sans-serif 는 끝부분에 장식이 없는 것이다.
Serif 가 있는 대표 폰트 : 바탕, 명조, Times New Roman
Serif 가 없는(Sans-serif) 대표 폰트 : 돋움, 고딕, Arial
| Roman | Serif 가 있고 가변폭이다. |
| Modern | 고정폭이며 Serif 는 있을 수도 있고, 없을 수도 있다. |
| Script | 손으로 쓴 듯한 필기체 형식의 폰트 |
| Swiss | Serif 가 없고 고정폭이다. |
| Decorative | 장식체 |
| Dontcare | 어떤 패밀리에도 속하지 않는 패밀리. 실제로 존재하는 패밀리가 아니라 임의의 패밀리를 지칭하는 용어 |
10.7.2 VC++ 의 Output 창에 memory leak 날 때 #
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 어느 프로그래머의 팁 사이트 #
다양한 프로그래밍 팁이 있음... 나중에 정리해야지
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 확장하기 #
확장해보자 ㅡ.ㅡ;;
10.8.7 Visual Studio C++ 에서 출력창에 문자열 찍기 #
#include <windows.h>
OutputDebugString("Hi~n");
쓰자~!! 디버깅할때~
아... F5(
DebugMode) 로 실행할 때만 뜸.
어느 제조사의 소스코드를 가지고 계신지는 모르겠으나, 제 경험(컬ㅤㅋㅝㅁ msm6100)으로는 map파일만 안만들어도 배로 빨라지고,
헤더파일 채크해서 소스 디펜던시 만드는 perl스크립트에서 전체 디렉토리가 아닌 소스 디렉토리만 검사하도록 해도
엄청난 개선 효과를 보실 수 있습니다.
폰업계를 비하하고 싶은 생각은 전혀 없습니다만, 진짜 비효율적이던데요. 소스코드 관리서부터...
로우레벨 폰 펌웨어 개발은 아니지만, 그 위레벨에서 동작하는 폰용 App(SKT용 WITOP/WIPI)를 개발해본 경험으로도
ARM 컴파일/링킹시 map 파일을 생성하지 않는경우 기존 1시간 가까이 걸리던 작업이 3-4분 작업으로 줄었던 기억이 있습니다.
컴파일시간이 납득하기 어려울정도로 오래 걸린다면.. 빌드옵션을 확인해보세요.
10.8.11 C# 에서 LINE, FILE_NAME 같은 거 이용. StackFrame class #
아래와 같이
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 뽑기 #
gpgstudy 의 포럼에 있는 글.. 으음... 일단 디버깅 정보가 있긴 있어야한다는 걸로 요약되기는 하는데... 좀 더 연구해봐야할 듯.
Call Stack 관련해서 찾아볼 것
이런거 같기는 한데... 뒤져보다 지쳤음... ㅠ.ㅜ
10.8.14 디버깅 이야기, strace, truss, tusc #
kldp 에서 본 유용한 글 중 하나... 현철이가 만들고 있는 PE File Format 이랑 내용이 비슷한 듯...
꽤 재미있는 내용을 출력해줌.
| HTTP | 2616 |
| md5 | 1321 | - [md5 md5 살펴보 |
| SMTP | 821 |
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내의 컴퓨터들을 가져올수가 있는데
이에 대해서도 첫번째 연산과 같이 할수도 있겠죠..
음 또 있던가.. 생각이 잘 안나네요..
참고가 되셨기를...
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);
10.8.20 main() 보다 먼저 실행되는 함수 #
- 전역 변수를 초기화하는 함수는 먼저 실행될 수 있다.
bool bCan = IsCan();
- 전역 변수의 생성자는 먼저 실행된다(MFC 의 App Class 가 대표적인 예이다.)
10.8.21 diff 와 patch 를 이용한 파일 patch 하기 #
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;
}