블로그 이미지
fiadot_old

칼퇴근을 위한 게임 서버 개발 방법론에 대한 심도있는 고찰 및 성찰을 위한 블로그!

Rss feed Tistory
Technical Article 2007. 4. 13. 14:44

유영창님 세미나에서 들었던것...

(1) 엔지니어는 "충신"이 아닌 "간신"이 되어라..

(여기서 충신이란 리더가 원하는 방향에 대해 안된다고만 얘기를 하는 사람이고, 간신은 안된다는 걸 알지만 리더가 원하는 바를 알고그에 대해 조언을 해 줄수 있는 사람을 뜻합니다.)

(2) 팀장이 악랄(?)할 수록 그 프로젝트는 성공한다..

- 팀장이 사람이 좋으면 프로젝트 중에는 편할지 몰라도 그 프로젝트는 성공할 수 없습니다.

(3) 모르는 것에 대해 솔직해 져라..

- 회사에서 자신이 모르는 분야에 대해서 최선을 다해 보겠다고 얘기하면, 관리자는 그것이 될것이라는 확신을 가지고 일을 진행하게 됩니다. 따라서 모르는 것은 모른다고 얘기하는것이 관리자의 판단 미스를 줄일수 있는 바른 방법이겠죠.....

(4) 요즘은 know how 가 아니라 know who 나 know where 입니다.

- 그만큼 우리가 접할수 있는 지식의 양이 많아 졌다는 것이겠죠... 또 인맥이 가장 큰 재산이라는...^^;;

(5) 능력있는 사람이 바쁘다..

- 바쁜 사람은 바쁘지만 그 일을 해냅니다.. 사람들은 해낸다는 믿음이 있는 능력있는 사람에게만 일을 맡기기 원합니다.. 회사에서 한사람이 바쁘다면 그 사람이 능력 있는 사람 입니다..

(6) 개발자는 항상 바쁘다..

- 안 바쁜 개발자 없죠?? ^^;;;

(7) 문서는 자신보다 남을 위해서 써라.

(8) 제품을 개발할때 필요한 설계서 중 가장 먼저 나와야 할 것이 사용자 메뉴얼이다...

- 왜 그럴까요???

(9) 프로젝트의 진행에는 Visual 이 중요하다..

(10) Don't worry !!

- 프로젝트가 2년 짜리면 사람들은 2년동안 걱정하고(잘하려고..), 프로젝트가 6개월 짜리면 사람들은 6개월 만큼 걱정한다... 고로 차이가 없다.. -_-;;;

,
Technical Article/펌 2007. 3. 17. 15:12

VC++ 프로그래밍 관련 잡다한 정보 몇가지..

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article 2007. 1. 30. 21:03

ShellExecute와 ShellExecuteEx 를 이용해 프로세스 실행하기!

// case 0. 그냥 실행하는 경우
ShellExecute(NULL, "open", strFileName, "updated" , NULL, SW_SHOW);



// case 1. 해당프로세스를 실행시킬때 인자 넘기기
SHELLEXECUTEINFO seInfo = {0};

seInfo.cbSize = sizeof (SHELLEXECUTEINFO);
seInfo.lpVerb = "open";
seInfo.lpDirectory = m_strExePath;
seInfo.lpFile = m_strExeFile;
seInfo.lpParameters = "onbada";
seInfo.nShow  = SW_SHOWNORMAL;

ShellExecuteEx (&seInfo);
EndDialog(IDOK);


// case 2. 해당 프로세스가 끝날때까지 기다리기
SHELLEXECUTEINFO seInfo = {0};

seInfo.cbSize = sizeof (SHELLEXECUTEINFO);
seInfo.fMask  = SEE_MASK_NOCLOSEPROCESS;
seInfo.lpVerb = "open";
seInfo.lpDirectory = "d:\";
seInfo.lpFile = "FiaLineCnt.exe";
seInfo.nShow  = SW_SHOWNORMAL;

if (ShellExecuteEx (&seInfo))
{
 WaitForSingleObject (seInfo.hProcess, INFINITE);
}
,
Technical Article 2007. 1. 17. 04:56

이벤트 로그 관련

컴퓨터 관리에 보면 이벤트로그가 존재한다.
이곳에서는 어플리케이션의 비정상적인 동작들이나
보안로그(터미널 접속)등 로그들을 관리하게 된다.
이번 프로젝트에서 필요한 기능이라 추가해보려고 잠시 살펴보았다.



[Managing Windows with WMI]


Event Logging Functions

The following functions are used with event logging.

Function Description
BackupEventLog Saves the specified event log to a backup file.
ClearEventLog Clears the specified event log, and optionally saves the current copy of the logfile to a backup file.
CloseEventLog Closes a read handle to the specified event log.
DeregisterEventSource Closes a write handle to the specified event log.
GetEventLogInformation Retrieves information about the specified event log.
GetNumberOfEventLogRecords Retrieves the number of records in the specified event log.
GetOldestEventLogRecord Retrieves the absolute record number of the oldest record in the specified event log.
NotifyChangeEventLog Enables an application to receive notification when an event is written to the specified event logfile.
OpenBackupEventLog Opens a handle to a backup event log.
OpenEventLog Opens a handle to an event log.
ReadEventLog Reads a whole number of entries from the specified event log.
RegisterEventSource Retrieves a registered handle to an event log.
ReportEvent Writes an entry at the end of the specified event log.

원문 : MSDN


[샘플]

기능 : 이벤트 뷰어의 보안의 로그를 삭제한다.

BOOL MyClearLog(LPTSTR pszSrcName ) // event source name
{
  HANDLE hEventLog;
  BOOL bSuccess;

  hEventLog = OpenEventLog(NULL, pszSrcName);
  if (NULL == hEventLog)
  {
     printf("Open event log failed.\n");
     return FALSE;
  }

  bSuccess = ClearEventLog(hEventLog, NULL);

  CloseEventLog(hEventLog);
  return bSuccess;
}


,
Technical Article/펌 2007. 1. 16. 22:09

OLEDB CMultipleResults memory leak(메모리누수) 발생!!

[테스트 환경]
MSSQL2000에 OLEDB로 ATL을 이용하여 접근
개발환경은 .Net2005, VS6 2가지 버젼을 사용해서 테스트


-- 테스트용 Stored Procedure
CREATE PROCEDURE sp_ResultParamIO

@num int,

@Ret int OUTPUT

AS

BEGIN

  select * from UserInfo where ID = @num

  Set @Ret = 99

END


위와같은 2가지 결과를 가지는 SP(이하 Stored Procedure)에서는

다음과 같이 구성할수 있다.

CCommand<CAccessor<CResultParamIO>, CRowset, CMultipleResults> cmdSP;

즉, 로우셋을 가지고 결과가 여러개로 되기 때문에

Cmd.GetNextResult(NULL, true);

를 통해서 @Ret값을 받을수 있게된다.


근데 문제는 CMultipleResults를 붙이게 되면 cmdSP를 호출할때마다

메모리가 늘어나게 된다.

혹시나 OLEDB의 컨넥션풀이나 메모리풀과 관련되었나 싶어서 물리적메모리와

가상메모리가 다 할때가지 기다려봤는데 줄어들지 않았다 -_-

이와같은 문제를 해결하고자 MS문서를 찾아봤는데 UDL파일이나 컨넥션 스트링을 이용한

leak나는 부분이 patch됐다는 사실을 알고 이를 수정해보았으나

여전히 누수가 존재했다 -_-....


데브피아와 여타 개인사이트들, 뉴스그룹을 통해 찾아본 결과

이는 CMultipleResults의 버그라고 볼수 밖에 없다 -_-;;



누구 아는분 있으면 해결책을 제시해 주시오 ㅡㅠ.....


이때문에 SP를 2개로 구성해서 하나 받고 또받고

이런 더러운 구조로 개발을 종료한다.



[참고자료]

OLE DB ? ATL Consumer Templates and “Memory Leaks” · Thu Mar 25,
http://exold.com/article/ole-db--atl-consumer-templates-and-memory-leaks-

BUG: Memory Leak in ATL OLE DB Consumer Template Functions
http://support.microsoft.com/kb/271926


http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=5204&ref=1760
http://www.google.co.kr/search?sourceid=navclient&hl=ko&ie=UTF-8&rlz=1T4GGLG_ko___KR204&q=msdn+GetNextResult
http://www.google.co.kr/search?hl=ko&newwindow=1&rlz=1T4GGLG_ko___KR204&q=CMultipleResults&lr=
http://dbforums.com/archive/index.php/t-481961.html
http://msdn2.microsoft.com/en-us/library/ms713643.aspx

,
Technical Article/펌 2007. 1. 11. 03:31

Drag & Drop (드래그 엔 드롭) 구현하기~

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2006. 11. 26. 08:50

OleDB 기본사용법.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2006. 11. 6. 02:32

MFCSDI 클래스간 통신

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2006. 11. 6. 02:29

Web Browser 컨트롤 FAQ

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2006. 11. 6. 02:06

GetLastError 값을 보고 싶을때

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

TOTAL TODAY