블로그 이미지
smstock

카테고리

분류 전체보기 (54)
취미 (8)
공부 (32)
인프라 (1)
Unity (0)
프로그램 (31)
낙서장 (12)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항

태그목록

최근에 올라온 글


클라이언트에 버그트랩설치시에는 별로 어렵지 않다 나오는데로 하기만 하면된다

ANSI mutibyte 일 경우는 BugTrap.lib를 사용하고
UNICODE일 때는 BugTrapU.lib를 사용해야한다는 것 정도만 조심하면 될듯
(똑같이 사용했는데 서버와 연결이 안되면 의심해 봐야할듯)


하지만 문제는 서버를 설치할 때이다.

버그트랩을 설치하면 해당 폴더에 Server라는 폴더가 생기고 그안에 FTP용 서버인 BugTrapServer가 존재한다

가이드를 보면

서비스 등록
BugTrapServer.exe /install

서비스 해제
BugTrapServer.exe /uninstall


이라고 나와있다.

하지만 서비스 등록을 하려고 위와 같이 실행해보면



System.ArgumentNullException : 값은 null일 수 없습니다



라는 글이 나오는 것을 확인 할 수 있다.

해결법은 간단하다
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 폴더에 존재하는 InstallUtil.exe로 서비스에 등록하면 된다

InstallUitl.exe (절대경로)\BugTrapServer.exe

위와 같이 실행하면 된다
Posted by smstock
, |

manifest 배포

공부/프로그램 / 2010. 6. 18. 09:55

VS2005는 외부로 배포를 할 때 그냥 파일만 배포하면 아래와 같은 말이 나온다

응용프로그램 구성이 올바르지 않기 때문에 이 응용 프로그램을 시작하지 못했습니다. 이 문제를 해결하려면 응용 프로그램을 다시 설치하십시오. 

manifest는 같은 컴퓨터 안에서 여러 버전의 DLL을 동시에 실행할 수 있도록 해주는 기능이라고 한다
자세한 내용은 밑에 사이트에 가면 잘 설명이 되어 있고...

http://www.serious-code.net/moin.cgi/RedistributingVisualCppRunTimeLibrary

실행파일에 manifest가 포함 안되어 있으면 해당 폴더에 (실행파일).exe.manifest를 복사하고

MFC를 안쓰고 release버전만 배포한다면
C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT
안에 있는
Microsoft.VC80.CRT.manifest
msvcp80.dll
msvcr80.dll
만 실행파일과 같은 폴더에 넣어주면 된다.

-참고-
http://somma.egloos.com/3020481
http://www.larosel.com/39

Posted by smstock
, |

1. Hardware
   - 자주 사용하는 자료구조는 32바이트의 배수로 정렬시켜 사용 -> 
   - 메모리 관리 함수는 따로 만들어 사용 -> 동적 메모리 할당/해제의 부하를 줄이기 위해 메모리 풀(pool) 사용 권장

2. Compiler
   - 컴파일러(Visual Studio)의 최적화 옵션에서 '속도 최적화' 대신에 '코드 크기 최소화' 설정이 캐시 성능을 향상시켜
      좀 더 빠른 코드를 얻을 수 있음

3. Syntex
   - Switch() 사용시에는 연속된 수치 사용 -> 테이블 형태로 만들어서 조건분기문보다 빠르게 사용됨
      case 0:
      case 1:
      case 2:
   - for() < while() < do ~ while() 의 빠른 속도를 보여줌(캐시미스와 관련)
   - timeGetTime()
     컴퓨터가 켜진 시간부터 카운팅 됨. 오래 켜두면(49.71일) 오버 플로우 발생

4. Math
   - 나눗셈 보다는 곱셈 으로 표현 -> 뺄셈(보수를 더함), 곱셈(여러번의 덧셈), 나눗셈(보수화된 덧셈을 여러번 수행)
   - 수학함수는 가급적 피라고 룩업 테이블이나 비슷한 형태로 간략한 함수로 만들어서 사용
   - 부동 소수점은 double 보다 float를 사용 -> double(39 cycle), float(19/8 cycle) 이 걸림
   - float 형 일때는 반드시 뒤에 f를 붙여라 -> 더 빠름.
   - 전위 연산자(++a 등)를 사용하라.

5. class
   - 멤버 함수에는 const 를 사용하자 -> 한정자를 사용하면 컴파일라가 좀더 나은 최적화를 해줄 수 있다. 
Posted by smstock
, |

Doxygen : 일정형식으로 주석을 작성하면 자동으로 HTML문서를 만들어주는 고마운 툴이다.

http://www.stack.nl/~dimitri/doxygen/

 

Graphviz : Doxygen에서 그래프를 그려주는 툴이다.

http://www.graphviz.org/Download..php

 

DoxyComment : Doxygen의 비쥬얼 스튜디오 Add-in 이다.

http://doxycomment.sourceforge.net/vs2005_addin.html

 

Doxygen에서 인식하는 주석형식을 설명해 놓은 페이지 이다.

http://dolphin.ivyro.net/file/tool_etc/doxygen02.html

http://vateran.springnote.com/pages/1414870

 

한글 깨질때

http://intel.tistory.com/2460518

http://blog.naver.com/pumpguy?Redirect=Log&logNo=30051318364

 


Posted by smstock
, |
기능
 빌드 방식을 통한 속도 향상 방법

원리

  1. 특정 옵션을 켠 뒤 빌드를 새롭게 한다. 이 과정을 instrumentation라고 부르는데, 프로파일 정보를 얻기 위해 컴파일러가 부가적인 코드를 집어넣는 것을 뜻한다. 그리고 실제로 프로그램을 돌리면 .pgd 파일이 생성 된다. 
  2. 이 파일을 가지고 컴파일러가 최적화를 할 수 있도록 다시 빌드를 한다.


- 참고(http://msdn.microsoft.com/ko-kr/library/aa289170.aspx)

Posted by smstock
, |

 

현재의 프레임웍에서 셰이더를 간단하게 사용하기 위해, ID3DXEffect를 추가 한다.

이펙트를 사용하는 순서는 다음과 같다.

1. 이펙트 생성

2. 이펙트 렌더링

3. 이펙트 해제

1. 이펙트 생성

이펙트를 시작하기 위해 ID3DXEffect 객체를 만든다.

HRESULT D3DXCreateEffectFromFile

    LPDIRECT3DDEVICE9 pDevice,

    LPCTSTR pSrcFile,   
    CONST D3DXMACRO * pDefines,
    LPD3DXINCLUDE pInclude,  
    DWORD Flags,
    LPD3DXEFFECTPOOL pPool,
    LPD3DXEFFECT * ppEffect,
    LPD3DXBUFFER * ppCompilationErrors

);

[in] pDevice: 이펙트를 생성하는 IDirect3DDevice9 포인터
[in] pSrcFile: 이펙트 파일명
[in] pDefines: 프리프로세서 매크로 정의로 NULL로 끝나는 D3DXMACRO 배열
               보통 NULL을 넣는다.
[in] pInclude: #include 의사 명령어로 보통 NULL을 넣는다.
[in] Flags: 셰이더를 컴파일, 어셈블링 하는 사용되는 D3DXSHADER와 D3DXFX 플래그.
     이번에 사용된 셰이더 컴파일 플래그는 아래와 같다.

D3DXSHADER_DEBUG : (컴파일 옵션 /Zi)
컴파일 하는 동안 디버그 파일이름,  라인 번호, 타입, 심볼 정보를 추가한다.

D3DXSHADER_NO_PRESHADER : (컴파일 옵션 /Op)
preshader를 실행하지 않는다. 디폴트로 Presshader를 실행한다.
         
[in] pPool: 파라 메터 공유를 위한 ID3DXFffectPool 개체의 포인터.
            NULL이면 공유하지 않는다.
[out] ppEffect:  컴파일된 ID3DXEFFECT 포인터를 돌려준다.           
[out] ppCompilationErrors: 컴파일 에러를 ID3DXBuffer를 돌려준다.
    에러값이 필요 없다면 NULL 입력

IDirect3DDevice9*    pDevice;

ID3DXEffect*         m_pEffect;       

ID3DXBuffer* errorBuffer = 0;

 

    DWORD dwShaderFlags = 0;

#if defined( _DEBUG )

    dwShaderFlags |= D3DXSHADER_DEBUG;

    dwShaderFlags |= D3DXSHADER_NO_PRESHADER;

#endif

 

    HRESULT hr = D3DXCreateEffectFromFile(

        pDevice,

        szFileName,

        0,

        0,

        dwShaderFlags,

        0,

        &m_pEffect,

        &errorBuffer);

2. 이펙트 렌더링

이펙트 렌더링시에 사용되는 명령어를 알아본다.

SetTechnique()
   Begin()
      BeginPass()
      //메트리얼 설정도 여기서 한다.
      SetTexture()
      CommitChanges()
      //여기서 메시를 그린다.
      EndPass()
   End()

SetTechnique() : 활성화된 테트닉을 셋팅한다.

HRESULT SetTechnique( D3DXHANDLE hTechnique )

[in] hTechnique : D3DXHANDLE를 입력한다.

D3DXHANDLE 의미:
a). GetParameter[ByName|Element|BySemantic] 이나 GetAnnotation[ByName]의해
반환된 값들을 사용한다.
b). 문자열을 의미 할 수도 있다.


Begin() : 활성화된 테크닉을 시작한다.

HRESULT Begin(  UINT* pPasses, DWORD Flags )
    ......
HRESULT End()

[out] pPasses : 활성화된 테크닉의 패스 수를 리턴한다.

[in] Flags : 현재의 장치 상태와 세이더 상태를 시작시(::Begin())에
보관했다가 종료(::End())시에 상태를 복구할 것인지 나타낸다.

D3DXFX_DONOTSAVESTATE :
ID3DXEffect::Begin() 호출시에 장치 state를 보관하지 않고,
ID3DXEffect::End()시에 호출시에 장치 state를 복원하지 하지 않는다.

D3DXFX_DONOTSAVESHADERSTATE :
ID3DXEffect::Begin() 호출시에 셰이더 state를 보관하지 않고
ID3DXEffect::End()시에 호출시에 셰이더 state를 복원하지 하지 않는다.


Begin() : 활성화된 테크닉의 패스를 시작한다.

HRESULT BeginPass(  UINT Pass)
    ......
HRESULT EndPass()

[in] pPasses : 테크닉안에 있는 패스를 지정한다.


SetTexture() : 이펙트에서 사용될 텍스쳐를 지정한다.
부모 클래스 ID3DXBaseEffect의 메쏘드이다.

HRESULT SetTexture(
  D3DXHANDLE hParameter,
  LPDIRECT3DBASETEXTURE9 pTexture
)

[in] hParameter : 이펙트(*.fx)에 있는 텍스쳐 핸들
[in] pTexture : IDirect3DBaseTexture의 핸들


CommitChanges() : BeginPass()와 EndPass() 사이 ID3DXEffect::Setx~~()에
의해 이펙트 상태가 바뀌면 이 메쏘드를 호출 하여 디바이스에게 변화를 알려준다.

HRESULT CommitChanges()

 

아래는 ID3DXEffect를 어떻게 사용하는지 간단하게 설명하고 있는 GpgStudy의
zupet님의 글이다.

zupet님의 글 : ID3DXEffect 사용방법

 

http://www.gpgstudy.com/forum/viewtopic.php?topic=19093

 

device->SetStreamSource(...)

device->SetVertexDeclaration(...)

device->SetIndices(...)

 

UINT pass;

if(SUCCEEDED(effect->Begin(&pass)))

{

    for(UINT i=0; i < pass; effect->BeginPass(i))

    {

        for(int j=0; j< numObject; ++j)

        {

            effect->SetTexture(objectList[i].m_texture);

            effect->CommitChanges();

            device->DrawIndexedPrimitive(...);

        }

    }

    effect->End();

}

이펙트 인스턴스가 같은 경우 SetTexture()를 호출후 CommitChanges()를 실행하여,
텍스쳐가 바뀐걸 적용 시킨다.


3. 이펙트 해제

ID3DXEFFECT * pEffect;

 

pEffect->Release()


- 출처(http://dolphin.ivyro.net/file/hlsl/tutorial04.html)
Posted by smstock
, |

_CrtDumpMemoryLeaks();  :  메모리 누수 위치 찾는다(Main 끝에 삽입)

_CrtSetBreakAlloc(num);  : 메모리 누구 위치에서 브레이크

::_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);  : STL에서 오류 날 경우 사용


사용법

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

프로그램 시작부분(여러군데에서 종료시 사용, 프로그램 종료시 자동으로 _CrtDumpMemoryLeaks() 호출)
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

or

프로그램 종료시
_CrtDumpMemoryLeaks();


주의점
 - _DEBUG
가 정의된 디버그 빌드에서만 발생(릴리스 빌드에서는 일반적인 malloc 함수와 free 함수가 사용)
 - #include 문은 위의 순서를 따라야 함. 순서를 변경하면 함수를 사용해도 제대로 작동하지 않음
 - _CRTDBG_MAP_ALLOC가 정의되면 누수된 메모리가 할당된 파일을 찾을 수 있음. 파일 이름 뒤에 오는 괄호 안의 숫자는 파일에서의 줄 번호


방식
 - _malloc_dbg_free_dbgmallocfree 함수를 매핑하는 방식


기타
 - _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG ); 를 통하여 출력창이 아닌 다른곳으로 출력가능


참고 : http://msdn.microsoft.com/ko-kr/library/e5ewb1h3(v=VS.90)


 

 

 

Posted by smstock
, |
기능설명

● 체크아웃(CheckOut) : SVN에 의해 관리되는 프로젝트에 참여하기 위해 맨 처음 저장소에서 작업할 대상 파일을 받아오는 것을 뜻한다. 체크아웃을 하기 위해서는 익명 권한을 허용하도록 설정되어 있지 않은 이상 해당 시스템의 계정과 비밀번호를 필요로 한다. 성공적으로 체크아웃이 이뤄지면 SVN 저장소의 복사본이 로컬 PC에 생성되어 독자적으로 개발을 진행할 수 있다.

● 커밋(Commit) : 체크아웃한 로컬 PC에서 작업을 수행(파일 추가, 내용 수정, 파일 삭제, 이름 변경)하면 저장소에 있는 파일과 다른 형태가 된다. 커밋은 로컬 PC에 있는 복사본을 기준으로 저장소와 동기화하는 기능이며, 작업 내용이 서버의 저장소에 반영된다.

● 업데이트(Update) : 일정 시간이 지나면 다른 사람이 작업한 결과를 커밋하기 때문에 로컬 PC의 복사본이 최신의 것이 아닐 수 있다. 이럴 경우 업데이트를 수행해서 저장소를 기준으로 로컬 PC의 복사본을 동기화하는 것이 업데이트다. 체크아웃과 달리 업데이트는 프로젝트 진행기간 동안 빈번하게 발생하며, 적절한 주기로 자주 업데이트를 받는 것이 좋다. 특히 작업 내용을 커밋하기 전에 한번 업데이트를 진행해서 충돌 여부를 확인한 다음, 충돌을 해결하고 커밋 하는 것이 효과적이다.

● 리비전(Revision) : SVN에서는 커밋을 단위로 저장소에 있는 리비전 정보가 증가한다. 체크아웃을 받을 때 리비전 번호가 6500이라면, 팀 동료들에 의해 6,500회의 커밋이 이뤄진 프로젝트란 걸 알 수 있다.

● 임포트(Import!) : 처음 저장소를 만든 시점에서 저장소에 맨 처음 파일을 넣는 작업을 뜻한다.

● 익스포트(Export) : 체크아웃과 같이 저장소에서 로컬 PC로 작업 결과물을 가져온다. 차이점은 버전 관리를 위한 메타 정보를 제외한 순수한 작업 결과물만을 가져온다는 점이다. 




설치설명  

1.Tortoise 서브버전(Subversion) 클라이언트 설치

1.1 Tortoise 서브버전(Subversion) 클라이언트 다운로드

 서브버전 클라이언트는 http://tortoisesvn.net/downloads 에서 다운 받을 수 있다. 

1.2 Tortoise 서브버전(Subversion) 클라이언트 설치

 클라이언트 설치는 간단하다. 무조건 "Next" 버튼을 눌러서 완료를 하면 알아서 다 해준다.  

 설치 후 탐색기에서 오른쪽 버튼을 클릭했을 때 아래와 같은 메뉴가 뜨면 정상적으로 설치된 것이다.

 Subversion11.PNG

2.서브버전(Subversion) 서버 설치

2.1 서브버전(Subversion) 서버 다운로드

 서브버전의 윈도우용 설치 파일은 http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91 에서 찾을 수 있다. 위 사이트로 이동하면 아래와 같은 화면을 볼 수 있는데, 최신버전의 설치 파일을 다운받아서 설치하도록 하자.

2.2 서브버전(Subversion) 설치

 설치 과정은 아주 간단하다. 윈도우 인스톨 파일을 더블클릭해서 기본 옵션으로 설치하면 된다. "Next" 를 계속해서 클릭하여 완료하자.

2.3 서브버전(Subversion) 설정

2.3.1 서브버전(Subversion) 데이터 폴더 생성(Repository)

 서버 설치가 끝났으니 데이터를 저장할 폴더를 생성해야한다. 저장소는 하드디스크의 특정 폴더로 하면 되고, 임의의 이름으로 선택 가능하다. 일단 D:\Repository로 해서 생성하자.

2.3.2 서비스(Service) 등록

 서브버전 서버를 서비스로 등록하여 윈도우 부팅시에 자동으로 실행되도록 하자. 윈도우 서비스 등록은 sc.exe 프로세스로 등록가능하다. cmd.exe를 실행해서 아래와 같이 입력하도록 하자.

 Subversion4.PNG

 아래는 서브버전 서비스를 등록하고 서비스를 해제하는 명령이다.

  • 서비스 등록 : sc create svn binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service -r D:\repository" displayname= "Subversion Server" depend= Tcpip start= auto

  • 서비스 해제 : sc delete svn displayname= "Subversion Server"

 별다른 문제가 없다면 성공적으로 등록했다는 메시지가 출력될 것이다.

2.3.3 방화벽(Firewall) 해제

 서브버전은 TCP 3690 포트와 UDP 3690 포트를 사용한다. 윈도우 방화벽 및 Anti-Virus의 방화벽을 해제하도록 하자.

 아래는 윈도우 방화벽에서 포트를 추가하는 방법이다. TCP와 UDP 각각 등록해서 모두 가능하도록 하자.
Subversion5.PNG 

2.4 저장소(Repository) 생성

 이제 서버 설정이 끝났으니 실제로 소스 또는 데이터를 관리할 저장소(Repository)를 생성해야 한다. 서브버전 관련 데이터는 D:\Repository 에 저장하기로 했으므로 하위 폴더에 저장소를 생성하자.

2.4.1 커맨드 라인(Command Line) 방식

 cmd.exe 를 실행한 뒤 D:\Repository 폴더로 이동하여 아래와 같이 입력한다.

"C:\Program Files\Subversion\bin\svnadmin" create --fs-type fsfs test

 위의 파란색으로 표시된 test를 유의해서 보자. test 대신에 생성을 원하는 폴더명으로 바꿔서 입력하면 된다.

 아래는 위의 명령을 실행한 후 결과 화면이다.

Subversion6.PNG 

2.4.2 Tortois Subversion 클라이언트를 사용한 방식

 Tortois Subversion 클라이언트를 설치했다면 좀더 편한 방법으로 생성할 수 있다. 아래는 Tortoise Subversion 클라이언트를 통해 생성하는 방법이다.

 Subversion7.PNG

 D:\Repository 폴더에 생성할 저장소 이름(Test)의 폴더를 미리 생성한 후 Tortoise Subversion 클라이언트에서 "Create repository here"를 클릭하면 된다.

 파일 시스템을 선택하는 다이얼로그가 뜨면 "Native filesystem(fsfs)"를 선택한 후 OK를 눌러서 생성하면 된다.

2.5 저장소 접근 설정

 저장소를 생성하고 나면 아래와 같은 폴더와 파일들이 생긴다.

Subversion8.PNG

 이 중에서 접근 권한을 제어하기위해서는 2개의 파일을 손봐야 하는데 다음 항목을 보자

2.5.1 svnserve.conf

  1. ### This file controls the configuration of the svnserve daemon, if you
    ### use it to allow access to this repository.  (If you only allow
    ### access through http: and/or file: URLs, then this file is
    ### irrelevant.)
  2. ### Visit http://subversion.tigris.org/ for more information.
  3. [general]
    ### These options control access to the repository for unauthenticated
    ### and authenticated users.  Valid values are "write", "read",
    ### and "none".  The sample settings below are the defaults.
    anon-access = none     <== 로그인 하지 않은 사용자는 아무것도 못하도록 한다.
    auth-access = write
  4. ### The password-db option controls the location of the password
    ### database file.  Unless you specify a path starting with a /,
    ### the file's location is relative to the conf directory.
    ### Uncomment the line below to use the default password file.
    password-db = passwd   <== ID와 Password를 저장하는 파일 이름
  5. ### The authz-db option controls the location of the authorization
    ### rules for path-based access control.  Unless you specify a path
    ### starting with a /, the file's location is relative to the conf
    ### directory.  If you don't specify an authz-db, no path-based access
    ### control is done.
    ### Uncomment the line below to use the default authorization file.
    #authz-db = authz
  6. ### This option specifies the authentication realm of the repository.
    ### If two repositories have the same authentication realm, they should
    ### have the same password database, and vice versa.  The default realm
    ### is repository's uuid.
    realm = KKAMAGUI Repository   <== 접근했을 때 클라이언트에게 보여줄 저장소 메시지

 위와 같이 파일을 수정한 다음 저장한다.

2.5.2 passwd

  1. ### This file is an example password file for svnserve.
    ### Its format is similar to that of svnserve.conf. As shown in the
    ### example below it contains one section labelled [users].
    ### The name and password for each user follow, one account per line.
  2. [users]
    # harry = harryssecret
    # sally = sallyssecret
    kkamagui = kkamagui

 위와 같이 ID = Password의 형태로 입력한 뒤 저장하면 된다.

3.간단한 서브버전(Subversion) 서버 테스트

 테스트 방법은 간단하다. 탐색기에서 오른쪽 버튼을 눌러서 표시되는 메뉴에서 "Repo-Browser" 를 클릭하여 아래와 같은 창이 뜨면 서브버전 서버가 설치된 주소와 저장소 이름을 같이 입력해주면 된다.

Subversion7.PNG 

 이제 주소와 저장소의 이름을 입력하자. 주소를 kkamagui.egloos.com, 그리고 저장소를 test라고 가정하고 입력하면 아래와 같이 될 것이다.

Subversion12.PNG  

"OK" 버튼을 누르면 실제 서버에 접속해서 저장소 정보를 얻어오는데, 아래와 같은 화면이 표시될 것이다. 실제로 정상적으로 접속이 된다면 "test" 항목 아래에 아무것도 표시되지 않을 것이지만 문제가 발생한다면 아래와 같이 에러메시지가 표시될 것이다.

Subversion13.PNG 

 위와 같은 에러 메시지가 표시되면 처음 단계부터 설정을 다시 한번 확인하자. 아무런 에러 메시지가 없다면 정상적으로 설치된 경우이므로 열심히 Check-out, commit, update를 반복하면 된다.

4.서브버전(Subversion) 서버를 설치하지 않고 로컬(Local)에서 소스 관리하기

 서브버전 서버가 설치되어있어야 꼭 소스 버전 관리가 가능한 것일까? "답은 그렇지 않다" 이다.

 Tortoise Subversion 클라이언트를 설치했다면 로컬에 저장소를 만들고 file:/// 키워드로 접근하여 소스 버전을 관리하는 것이 가능하다.

4.1 저장소 생성

 위의 "2.4 저장소(Repository) 생성" 부분을 참고해서 로컬에 Tortoise를 이용하여 저장소를 생성하자. 그리고 파일들을 수정해서 특정 유저만 접근가능하도록 수정하자.

4.2 저장소 접근 테스트

 위의 "3.간단한 서브버전(Subversion) 서버 테스트" 부분을 참고하여 "Repo-browser"를 실행하고 주소에 아래와 같이 입력한 후 OK를 누르자.

file:///d:\repository\test

 정상적으로 실행되면 아래와 같은 화면이 표시될 것이다.

 Subversion14.PNG

 아무런 에러가 없으므로 정상적으로 실행되었음을 알 수 있다. 이렇게 함으로써 서버를 설치하지 않고도 로컬에서 소스 버전관리를 할 수 있다.

5.기타 팁

5.1 버전 관리시 무시할 파일 확장자 설정

 소스를 컴파일해서 나오는 object 파일이나 기타 필요없는 부산물들은 버전관리를 할 필요가 없다. 그런 파일들을 일일이 수작업으로 제외하기는 상당히 귀찮은 작업인데, 다행이 Tortoise에서 이것을 편리하게 할 수 있는 옵션이 있다.

 "Settings" 메뉴에 가면 아래와 같은 화면이 표시된다. 여기에 "Global Ignore Pattern" 항목에 무시할 파일의 확장자나 파일명을 입력하면 된다.

*.scc *.sbr *.pch *.pcb *.ilk *.idb *.res *.o *.obj *.ncb *.opt *.plg

 

Subversion15.png   


- 참고 사이트(
http://blog.naver.com/mazinggaa?Redirect=Log&logNo=130023412047)


- 출처(http://kkamagui.tistory.com, http://kkamagui.springnote.com)

Posted by smstock
, |

듀얼코어를 넘어 매니코어 CUP가 보편화 되면서 병렬 프로그램에 대한 관심이 높아지고 있습니다.

OpenMP는 공유 메모리 환경에서 프로그램을 병렬화하는 표준입니다. (http://en.wikipedia.org/wiki/OpenMP)

 

예를들어 1000번을 반복하는 연산이 있다고 하면

단일쓰레드 환경에서는 다음과 같습니다.

 

for( int i = 0 ; i < 1000 ; ++i )

    result[i] = srcA[i] * 256 + srcB[i] * 256;

 

하지만 2Core-CUP 환경에서는 다음과 같이 이루어 지는게 더 효과적일 것입니다.

 

Thread #1

    for( int i = 0 ; i < 500 ; ++i )

        result[i] = srcA[i] * 256 + srcB[i] * 256;

 

Thread #2

    for( int i = 500 ; i < 1000 ; ++i )

        result[i] = srcA[i] * 256 + srcB[i] * 256;

 

복잡도가 높은 반복 연산일 경우 병렬프로그래밍은 더욱 큰 효과를 나타냅니다.

 

우리가 사용하는 VS2005에서도 OpenMP를 사용할수 있습니다.

[프로젝트 속성 - C/C++ - 언어] 를 보시면 [OpenMP Support] 항목이 그것입니다.

 

#Include <omp.h>

 

int iCPU = omp_get_num_procs(); // cup 수를 얻어옵니다.
omp_set_num_threads(iCPU);  // cup 수만큼 병렬하는것이 최적이겠죠.

 

#pragma omp parallel for
for( int i = 0 ; i < 1000 ; ++i )

        result[i] = srcA[i] * 256 + srcB[i] * 256;

 

VS2008 에서 FeaturePack에서 TR1(차세대 C++ 표준 규격)을 지원하더니 VS2010 에서는 PPL(Parallel Partern Library)를 지원한다고 합니다.

OpenMP를 좀더 쉽고 편하게 사용할수 있게 되는다는군요.

Posted by smstock
, |
VS2005 로 컴파일된 프로그램을 다른 PC에서 실행하였을때

응용 프로그램 구성이 올바르지 않기 때문에 이 응용프로그램을 시작하지 못했습니다.
이 문제를 해결하려면 응용 프로그램을 다시 설치하십시오

이와 같은 경고가 뜨면서 실행이 안되는 경우가 있다

이럴 경우 실행이 안되는 PC에 컴파일 했던 컴파일러에 맞는 재배포 가능 패키지를 설치해 주면 된다

아래 것도 안될 경우 빌드한 PC에서 아래 파일을 같이 배포
 "...\Microsoft Visual Studio 8\SDK\v2.0\Bootstrapper\Packages\vcredist_x86\vcredist_x86.exe"


다운로드 링크

  1. Microsoft .NET Framework 버전 2.0 재배포 가능 패키지(x86)
  2. Microsoft Visual C++ 2005 재배포 가능 패키지(x86)
  3. Microsoft Visual C++ 2008 재배포 가능 패키지(x86)
  4. Microsoft Visual C++ 2008 SP1 재배포 가능 패키지(x86)
  5. Microsoft .NET Framework 3.5 서비스 팩 1

Posted by smstock
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함