http://www.databaseanswers.org/modelling_tools.htm

에 보면 모델링 툴들의 리스트가 나와 있네요...
Posted by redef

TRACKBACK http://www.redef.pe.kr/trackback/490 관련글 쓰기

댓글을 달아 주세요

- 일반적으로 네트워크의 통신등에서 헤더정보와는 반대로 메시지 데이터등을 보유하는 패킷이나 프레임 부분을 페이로드(Payload)라고 부른다. 페이로드메시지는 일반메시지와 다르게 개행문자 뒤에 추가적인 데이터를 가지는 페이로드(Payload) 메시지가 있는데, 이 메시지는 마지막 파라메터로써 추가적인 데이터의 길이의 바이트값을 가진다. 파라메터만으로 정보를 전달하기에 충분치 않은 데이터를 전송할 때 페이로드메시지의 형식을 사용하게 된다.

[codechaser님의 nateon protocol 문서중에서...]

'프로그래밍 > 네트워크' 카테고리의 다른 글

Payload?  (0) 2010/01/05
프로토콜  (0) 2010/01/04
IOCP 관련 팁  (0) 2009/12/28
[온라인 게임 서버]2장 온라인 게임 서버(기초편)  (0) 2008/11/19
Posted by redef
TAG Payload

TRACKBACK http://www.redef.pe.kr/trackback/488 관련글 쓰기

댓글을 달아 주세요


msn 프로토콜 : http://www.hypothetic.org/docs/msn/
nateon 프로토콜 : http://blog.naver.com/PostView.nhn?blogId=codechaser&logNo=80042584567&categoryNo=3&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&isAfterWrite=true

이런거 이렇게 정리 잘 해 놓는 분들 대단하십니다...

'프로그래밍 > 네트워크' 카테고리의 다른 글

Payload?  (0) 2010/01/05
프로토콜  (0) 2010/01/04
IOCP 관련 팁  (0) 2009/12/28
[온라인 게임 서버]2장 온라인 게임 서버(기초편)  (0) 2008/11/19
Posted by redef

TRACKBACK http://www.redef.pe.kr/trackback/487 관련글 쓰기

댓글을 달아 주세요


팁1.
IOCP는 작업의 완료 시에 읽기 작업을 끝냈는지 쓰기 작업을 끝냈는지 가르쳐 주지 않는다는 것이다.
따라서, OVERLAPPED구조체를 상속하여 읽기 작업을 하는 건지 쓰기 작업을 하는 건지에 대한 흔적을 남겨야 한다.

팁2.
프로그래머는 항상 패킷퍼버에 있는 내용을 원하는 크기만큼 읽고 쓸수 있다고 생각하면 안된다.
이는 네트워크 상의 여러가지 문제 따라서 얼마나 읽고 쓸 수 있는 변한다. 그러므로 원하는 만큼의 데이터인지 확인 해야 한다.
이러한 이유로 패킷에 길이에 대한 정보가 추가 되어야 한다.

팁3.

네트워크의 특성상 데이터가 한꺼번에 오기도 하고 나뉘어져서 오기도 한다. 그래서 ring buffer를 사용해서 원하는 크기만큼 쓰기위한 처리를 한다

팁4.
비동기 입출력에 관한 정리
Asynchronous I/O and The Asynchronous Disk I/O Explorer : http://www.flounder.com/asynchexplorer.htm

Posted by redef
TAG IOCP,

TRACKBACK http://www.redef.pe.kr/trackback/484 관련글 쓰기

댓글을 달아 주세요

프로그래밍/API/MFC2009/11/25 17:57


http://support.microsoft.com/kb/139638/en-us/


SUMMARY
Providing a dedicated heap by overloading new and delete for a class can significantly reduce memory fragmentation. Any class that is frequently instantiated using new is a candidate for providing a dedicated heap.

This method works best when many instances of a class are used in close time proximity but random order. For example, this method will work well for a newly created list that is about to be sorted.

This method impairs performance where the use of instances of the class is more time proximate to the use of other heap-allocated objects. For example, this method would impair the performance of a scrolling, in-memory view of rows read from a database.

There is no easy substitute for careful analysis of locality of reference, where locality is gauged according to the page size used by the host operating system's virtual memory management and time separation.

This technique should not be applied to a base class that can be or might be derived from if data is to be added to the derived class.


MORE INFORMATION
The following sample code stores the dedicated heap handle in the static member variable m_hHeap. The heap handle is initialized to NULL in the Classdemo.cpp file. When a class object is instantiated using new, the overloaded new is called. If the handle is NULL, the heap is created. If the handle is not NULL, HeapAlloc is called to allocate the requested size.


Sample Code
 /* Compile options needed: none
   */
   /* Classdemo.h file  */

   #ifndef    __CLASSDEMO_H__
   #define    __CLASSDEMO_H__

   #include   <windows.h>

   class  ClassDemo
   {
      // private member vars and functions for ClassDemo class

      static  HANDLE      m_hHeap; // fixed heap handle
      int     m_nMyData[100];      // class data

   public:
      // public member functions for ClassDemo class
      // declaration of new & delete operator overloads
      void*   operator    new(unsigned int nSize);
      void    operator    delete(void* pObj);
      static  void        HeapCreate();
   };

   #define    INITIAL_HEAP_SIZE   4096    // initial heap size
   #define    CLASS_DEMO_OBJS_MAX 100000  // max number of objects used

   inline void*   ClassDemo::operator new(unsigned int nSize)
   {  // allocate memory using fixed heap
      if  (m_hHeap == NULL)   // if NULL, needs to be created
      {
          HeapCreate();       // create heap

          if  (m_hHeap == NULL)
          {
              return NULL;    // HeapCreate failed
          }
      }

      // return pointer to allocated memory
      return  HeapAlloc(m_hHeap, 0, nSize);
   }

   inline void    ClassDemo::operator delete(void* pObj)
   {  // free memory from fixed heap
      HeapFree(m_hHeap, 0, pObj);
   }

   #endif //  __CLASSDEMO_H__
   /* End of Classdemo.h file  */

   /* Classdemo.cpp file  */
   #include   <stdio.h>
   #include   "ClassDemo.h"

   HANDLE     ClassDemo::m_hHeap = NULL;  // Initialize handle

   void   ClassDemo::HeapCreate()
   {
      int nRet = IDRETRY;                          // message box return
      int nSize = CLASS_DEMO_OBJS_MAX * sizeof(ClassDemo);// max heap size

      m_hHeap = ::HeapCreate(0,                    // heap flags
                  INITIAL_HEAP_SIZE,               // initial size of heap
                  nSize);                          // max heap size

      while   ((m_hHeap == NULL) && (nRet != IDIGNORE))
      {       // keep trying until no error or user ignores
          char    szMsg[80];                       // message buffer

          // format message
          sprintf(szMsg, "Could allocate a heap of size %d", nSize);
          // Display error
          nRet = MessageBox(NULL, szMsg, NULL,
                            MB_ABORTRETRYIGNORE | MB_TASKMODAL);

          if  (nSize < sizeof(ClassDemo))
          {
              return; // heap would be too small to be usefull, return
          }

          switch  (nRet)
          {
              case    IDABORT:  // user selected abort
              {
                  abort();
              }

              case    IDIGNORE: // user selected ignore
              {
                  return;
              }

              default:  // user selected retry, the message box could not
              {         // be displayed, or unknown return code
                  nSize /= 2;  // try a smaller request

                  m_hHeap = ::HeapCreate(
                              0,                  // heap flags
                              INITIAL_HEAP_SIZE,  // initial size of heap
                              nSize);             // max heap size
                  break;
              }
          }
      }
   }
   /*  End of Classdemo.cpp file  */
    

 

'프로그래밍 > API/MFC' 카테고리의 다른 글

메모리 단편화를 줄이기 위해 new를 overload하는 방법  (0) 2009/11/25
Visual C++ 버전별 배포 방법!  (0) 2009/09/07
crypto api 사용  (0) 2009/07/16
CStdioFile사용  (0) 2009/02/17
Posted by redef
TAG Heap

TRACKBACK http://www.redef.pe.kr/trackback/478 관련글 쓰기

댓글을 달아 주세요

프로그래밍/API/MFC2009/09/07 16:28

배포전에 Dependency를 이용 꼭 필요한 파일의 목록을 확인한다.(8버젼 부터는 안먹히기도 하나 그래도 꼭 확인한다) VC에 있는 Dependency툴은 단일파일로 실행되고 한번만 실행해주면 윈도우 탐색기 컨텍스트 메뉴에 자동으로 View Dependencies를 추가해준다.

VC 6 이하(~ VS 6)

MSVCRT, MFC42 등의 MFC버젼과 관련된 DLL과 추가로 사용한 DLL을 같이 배포한다.
98이후부터는 운영체제에 포함되어 있다.
참고로 http://activex.microsoft.com/controls/vc/mfc42.cab 로 관련 DLL을 다운받을 수 있으며
ActivX 배포시 inf파일에 추가해서 자동으로 설치되게 만들 수도 있다.

VC 7(VS 2003)

MSVCR71, MFC71
이 DLL은 최신 운영체제라고 해서 더는 기본 내장을 해 주지않기 때문에 응용 프로그램이 알아서 자기 디렉터리나 윈도우 시스템 디렉터리에다 구비해야 한다.

VC 8이후(VS 2005~)


side by side asembly라는 기술이 도입되어 windows 디렉토리에 밑에 WinSxS(Windows Side-by-Side) 폴더에 추가 작업을 해야한다.
Dependency를 사용해서 관련 DLL을 같이 배포해도 제대로 실행된다는 보장을 할 수 없다.
관련 DLL들은 C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT(이하 2005기준)에서 얻을수 있으며
MFC를 안쓰고 release버전만 배포한다면 Microsoft.VC80.CRT.manifest, msvcp80.dll, msvcr80.dll만 배포해도 된다. (msvcm80.dll은 매니지드C++용 crt라 native를 쓰는 경우는 배포하지 않아도 된다.)

배포방법으로는
1. 재배포 패키지를 이용한다. 링크에서 다운받아 설치해도 되며 다른 배포방법도 설명하고 있다.

설치 디렉토리에서 얻기
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86

Microsoft Visual C++ 2005 SP1 재배포 가능 패키지(x86)
http://www.microsoft.com/downloads/deta ··· ang%3Dko

Microsoft Visual C++ 2008 재배포 가능 패키지(x86)
http://www.microsoft.com/downloads/deta ··· ang%3Dko

2. 정적 라이브러리를 사용한다(포함) -> CRT(/MT), MFC, ATL 등 실행파일이 커지긴 하나 제일 간단하다. MFC 라이브러리를 사용시는 MFC라이브러리를 정적으로 포함하면 CRT도 자동으로 /MT로 변경된다. 고로 어디서든 기존보다 더 간단하다. 귀찮아서 ActiveX를 이렇게 배포한적있음 ㅡ.ㅡ; 용량은 기본 MFC 다이얼로그 프로젝트가 아무것도 추가안하고 52k정도에서 308k 정도로 커진다.

3. 인스톨쉴드(Install Shield), 설치 프로젝트를 이용한다.

4. .Net Framework를 설치한다.
managed 로 컴파일했다면 .Net Framework는 필수이다.
-> 추가! MFC,ATL을 사용안한 프로젝트에 한해서만 먹힙니다. 프레임웍만 깔면 WinSxS에 VC80.CRT관련만 설치되네요. VC90도 똑같습니다. 재배포 패키지를 설치하셔야 MFC,ATL관련이 깔립니다.

위 방법 외에도 몇가지가 더 있으며 재배포 패키지 링크에 연결된 설명들과 아래 링크들을 참조하기 바란다.
http://www.codeproject.com/cpp/vcredist ··· eproject에 소개된 방법)
http://www.serious-code.net/moin.cgi/re ··· elibrary

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

재배포 패키지를 이용한 OCX(ActiveX) 배포 (2005 ~)
Cab 파일들어갈 파일 내용은 다음과 같다.

자신이 만든 ocx파일
inf 파일
재배포패키지

INF파일의 내용은 다음과 같다.

[Setup Hooks]
hook1=hook1

[hook1]
run=%EXTRACT_DIR%\vcredist_x86.exe

[version]
signature="$CHICAGO$
AdvancedINF=2.0

[Add.code]
mytest.ocx=mytest.ocx
vcredist_x86.exe=vcredist_x86.exe

[vcredist_x86.exe]
file-win32-x86=thiscab
DestDir=11
RegisterServer=no

[mytest.ocx]
file-win32-x86=thiscab
DestDir=11
FileVersion=1,0,0,3
clsid={1DF754CB-D85F-490B-9011-BDCB0BFDC430} <= 이건 아시져?
RegisterServer=yes

inf파일의 [Add.code]는 나열된 순서의 반대로 설치가 되는 점을 유의하며 위와같이 하면 vc2005 재배포 패키지가 실행된후 맨 마지막으로 ocx가 설치된다.

[출처] http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8187&page=2

'프로그래밍 > API/MFC' 카테고리의 다른 글

메모리 단편화를 줄이기 위해 new를 overload하는 방법  (0) 2009/11/25
Visual C++ 버전별 배포 방법!  (0) 2009/09/07
crypto api 사용  (0) 2009/07/16
CStdioFile사용  (0) 2009/02/17
Posted by redef

TRACKBACK http://www.redef.pe.kr/trackback/464 관련글 쓰기

댓글을 달아 주세요

프로그래밍/ActiveX2009/09/04 16:30

ActiveX 테스트 컨테이너가 VS2008에는 없습니다.

그래서 http://www.microsoft.com/downloads/details.aspx?FamilyId=01AE159F-08CD-495B-8BF4-A48CC395AD7B&displaylang=en

에서 소스를 다운받아서 TstCon 프로젝트를 직접빌드해서 사용해야 합니다.
그런데 약간의 문제가있어서 속성을 조금 변경을 해줘야 하는군요.
( http://rextang.net/blogs/work/archive/2008/08/04/6327.aspx : 정확한 내용은 여기를 참조 )

그래서 아래와 같이 속성을 변경해서 빌드하니 괜찮네요..

TCProps, TstCon 두 프로젝트 모두 아래와 같이 변경했습니다.

<프로젝트>-><속성>에서 속성페이지 중...
구성속성 - 링커 - 매니페스트 파일 - UAC(사용자 계정 컨트롤) 사용을 "예" 에서 "아니오"로 변경합니다.

이제 빌드를 해서
"C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\"
에 복사해 놓고 잘 쓰면 됩니다...

Posted by redef

TRACKBACK http://www.redef.pe.kr/trackback/463 관련글 쓰기

댓글을 달아 주세요

  1. 닭날다

    온국민이 싫어하고 혐오하는AcitveX는 금융및 쇼핑몰등에서 필수적이죠?
    근본원인은 금융결제원 http://media.daum.net/digital/others/view.html?cateid=100031&newsid=20090909102908310&p=etimesi

    추진력 하나는 끝내주는,불도저 삽질정부가 돈적게들고 효과좋은 일을 마다할 이유는 없겠죠? 오히려 열씸히 달려들어야지ㅋㅋ
    http://todayhumor.paran.com/board/view.php?table=humorbest&no=245873&page=1&keyfield=&keyword=&sb=
    "세계의 흐름과 Ddos피해예방위해 ie6퇴출및 웹표준 준수하라"고 청와대&한날당+국정원,방통위,기업등 마구 괴롭히시기 바랍니다

    2009/09/16 16:28 [ ADDR : EDIT/ DEL : REPLY ]
    • 닭날다님은 웹에서만 activex가 쓰이는거라고 생각하나 보군요...

      2009/09/17 23:33 [ ADDR : EDIT/ DEL ]
  2. 닭날다 이 분은 ActiveX와 관련된 곳은 모두 다녀간 모양이네요...

    2009/09/24 10:43 [ ADDR : EDIT/ DEL : REPLY ]
  3. 은행사이트 때문에 엑티브엑스로 고생많이 하셨나부져

    2009/10/19 06:45 [ ADDR : EDIT/ DEL : REPLY ]


Microsoft에서 제공하는 SQL Server에 대한 접근 및 관리를 할 수 있는 관리 툴입니다.
MS-SQL을 이용할 때는 아주 유용하네요...

Microsoft® SQL Server® 2008 Management Studio Express
http://www.microsoft.com/downloads/details.aspx?familyid=08E52AC2-1D62-45F6-9A4A-4B76A8564A2B&displaylang=ko

Posted by redef

TRACKBACK http://www.redef.pe.kr/trackback/460 관련글 쓰기

댓글을 달아 주세요

프로그래밍/팁2009/08/06 15:52


개발을 하면서 평소 무심결에 사용하는 용어중에 Entry(엔트리)라는 말이 있습니다.
근데 이게 정확히 무슨 의미일까 라는 궁금중이 생기더군요...

가장 알기쉬운 설명...그리고 가장 확실하게 이해할 수 있는 설명 인것 같습니다...

http://100.naver.com/100.nhn?docid=788606
"..경기에 출전 자격이 부여된 선수 명단..."

'프로그래밍 > ' 카테고리의 다른 글

Entry라는 용어에 대한 정의...  (0) 2009/08/06
doxygen 예제  (0) 2009/03/24
TortoiseSVN 커밋이 잘 되지 않을때...  (0) 2009/01/16
프로그램 자동 시작  (0) 2008/11/18
Posted by redef
TAG 용어

TRACKBACK http://www.redef.pe.kr/trackback/453 관련글 쓰기

댓글을 달아 주세요

프로그래밍/API/MFC2009/07/16 00:19

crypto api를 사용할때

#define _WIN32_WINNT 0x0400
#include <windows.h>

를 하면 windows.h의 190번째 라인에
#include <wincrypt.h>가 추가 되어 있습니다.

'프로그래밍 > API/MFC' 카테고리의 다른 글

Visual C++ 버전별 배포 방법!  (0) 2009/09/07
crypto api 사용  (0) 2009/07/16
CStdioFile사용  (0) 2009/02/17
SetConsoleCtrlHandler  (0) 2008/10/31
Posted by redef
TAG crypt, 헤더

TRACKBACK http://www.redef.pe.kr/trackback/447 관련글 쓰기

댓글을 달아 주세요