블로그 이미지
Flying Mr.Cheon youGom

Recent Comment»

Recent Post»

Recent Trackback»

« 2024/5 »
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

 
 

SVN 생성

소프트웨어 공학/개발 | 2011. 11. 7. 15:36 | Posted by youGom


 + 계정 설정_
  저장소 루트 \추가 저장소 폴더 \ conf \ passwd 파일에 계정 추가..
  ( ...\svn_data\conf\passwd )

 + 권한 설정_
  svnserve.conf 파일을 수정해서 액세스제한을 둔다.
  #비인증자 접근 금지
  #anon-access = read
    anon-access = none
    auth-access = wirte
  #인증시 뜨는 메시지
    realm = Hello Repository

'소프트웨어 공학 > 개발' 카테고리의 다른 글

SVN-Trac 재연동  (0) 2011.11.07
TRAC 생성  (0) 2011.11.07
Subclipse for SVN on Eclipse CDT  (0) 2011.11.04
Subversion 설치 및 Eclipse와의 연동  (0) 2011.11.04
[ELF] OpenSource Enlightenment DeskTop  (0) 2011.10.14
:

Subclipse for SVN on Eclipse CDT

소프트웨어 공학/개발 | 2011. 11. 4. 09:18 | Posted by youGom


Subversion is a great way to work on code in a collaborative fashion. There are a couple subversion plugins that work with Eclipse, one of them is called Subclipse.

To install Subclipse in Eclipse goto the Help menu and choose “Software Updates…”.

Once the “Software Updates and Add-ons” window displays itself we need to add the Subclipse update URL. Choose the “Available Software” tab, click “Add Site” and put in “http://subclipse.tigris.org/update_1.6.x” as the location and click “OK”.

Add Plugin Location

You will now see a new item in the list corresponding to the URL that you just added. Now to add subclipse you need to choose two plugins, subclipse itself and the JavaHL. JavaHL is the API that subclipse uses to talk to your SVN server. You can find these by expanding the tree by clicking the triangle to the left of the URL you just added, and then expanding the Subclipse subnode. After selecting the plugins click install and follow the dialogs through to the end.

Plugin Selection

Now that subclipse is installed, in the top right of Eclipse click the “Open Perspective” icon choose “Other” and choose “SVN Repository Exploring”, this perspective will give you the tools to work with your SVN repo, assuming you aren’t already happily using a tool like TortoiseSVN or the command line client to do so.

Add your repo location to the SVN perspecitve by clicking the icon at the top right of the repositories view and typing in the URL of your repo. Any repositories added here will also show up in other dialogs when working with SVN in Eclipse such as when adding or importing projects.

Add Repository

Adding Your Project to the SVN Repository

To add a project to SVN go back to your development perspective and simply right click on the project in the “Project Explorer”, expand the “Team” subitem and choose “Share Project…”. Now choose what repository to add your project to, click Next.

Choose Repository

Now you will be prompted to choose a folder name for your project in the repo; you can just use the name of the project or specify some folder further down in your repository hierarchy, click Next.

Repository Folder

The wizard will now ask for an initial commit comment, click Finish and your project will be created in the repo, but you will still need to commit your changes for the code to actually show up in SVN.

Ready to Share

Once you clicked Finish Eclipse will ask if you want to open the “Team Synchronizing” perspective. Click yes and once the perspective opens you can simply right click on the root project node and choose commit. You can also do commits from the SVN perspective, or in your development perspective the project right-click menu now has a bunch of SCM options under the Team submenu.

Team SCM Operations

At this point working with SVN in Eclipse is like working with any SCM tool, make changes, commit changes, rinse, repeat.

Importing a Project from SVN

There may be a project in an SVN repo that you want to import, this is fairly simple. Open the workspace that you want to import the project into. Goto “File” and choose “Import”. Expand SVN in the tree and choose “Checkout Project from SVN”, click Next.

Import from SVN

This next dialog lets you choose from which SVN location to pull the project, if you have already added a repo location in the SVN repo perspective it will show on the dialog, otherwise you can specify the location now, click Next. You will now be shown a list of folders on your repository, you can navigate them and click the folder that you’d like to import, click Next.

Choose Project Folder

The next window asks how you would like to setup the local project, including a name and which version to pull. The defaults should usually suffice unless you want to maybe pull and older version or a branch to work on, click Next.

Local Project Properties

The next dialog simply lets you import to a different workspace than the one you currently have mounted. You should already be in the workspace you want to import to so just click finish. The import process will take a moment after which you should see a new project in your workspace.

Congratulations, you’ve successfully imported the project and since it is bound to SVN you can now work on the code with your coworkers!

'소프트웨어 공학 > 개발' 카테고리의 다른 글

TRAC 생성  (0) 2011.11.07
SVN 생성  (0) 2011.11.07
Subversion 설치 및 Eclipse와의 연동  (0) 2011.11.04
[ELF] OpenSource Enlightenment DeskTop  (0) 2011.10.14
표준 Dispose 패턴을 구현하라.  (0) 2011.10.06
:
Summary : 현재 버전 관리 시스템으로는 CVS를 가장 많이 사용하고 있다. Subversion은 CVS가 가지고 있는 기능 외에 더 많은 기능들을 제공하고 있다. 속도 또한 CVS보다 더 좋은 상태로 현재 많은 오픈 소스 진영에서 CVS 대신 Subversion을 사용하고 있다. 이번 강좌는 Subversion의 설치에서부터 Eclipse와 연동하는 과정까지 다룬다.

Apache, Subversion설치하기

  • 1. http://httpd.apache.org/download.cgi에서 2.x 버전의 apache를 다운 받는다.
  • 2. http://subversion.tigris.org/project_packages.html에서 가장 최신의 subversion을 다운 받는다.
  • 3. 먼저 apache를 설치한다.
  • 4. 그리고 subversion을 설치한다. subversion설치중에 다음과 같은 화면이 나오는데 3번째 Apache modules부분에 체크가 되어 있는지 확인한다. 디폴트로는 체크가 되어 있을것이다.

  • 5. apache설치 디렉토리\conf\httpd.conf파일을 열어보면 중간쯤에
LoadModule dav_module modules/mod_dav.so 
LoadModule dav_svn_module modules/mod_dav_svn.so 

두줄이 주석이 없는 
것이 보일것이다. Subversion이 설치중에 관련 모듈을 설치하면서 주석을 삭제하기 때문이다. 자동으로 
된다. 따로 할필요가 없다.

  • 6. svnadmin create 명령어로 저장소를 생성한다.

필자는 다음과 같이 수행했다. 
E:\svn\repository에 저장소를 생성한다는것이다.

파일 시스템 타입으로 생성한것이다. 
버클리 DB타입은 ?fs-type bdb라고 하면된다.

svnadmin --fs-type 
fsfs create e:/svn/repository

  • 7. 다음처럼 유저 파일을 생성한다. 물론 이때 path가 안걸려 있을때는 아파치 설치디렉토리밑에
    bin디렉토리를 path에 걸어주고 다시 실행한다.

htpasswd -cm 
e:/svn/svn-auth-file 유저명

-> 여기서 c옵션은 새로운 파일 생성, m옵션은 
md5타입으로 암호화하는것을 의미한다.

필자는 htpasswd -cm 
e:/svn/svn-auth-file fromm0 으로 명령을 수행했다.

htpasswd -m 
e:/svn/svn-auth-file 유저명

-> 따라서 이건 해당 유저의 패스워드만 
바꾸는것이다.

  • 8. httpd.conf파일에 저장소 관련 셋팅 추가하기.

파일 검색해서 Location이 
위치한 부분 마지막에 다음과 같이 추가해준다.

<Location /repos> 
  DAV svn
  SVNPath e:/svn/repository

  Require valid-user

  # how to authenticate a user
  AuthType Basic
  AuthName "Subversion repository"
  AuthUserFile e:/svn/svn-auth-file
</Location>

이 셋팅엔 여러가지 방법이 있다. 자세한 내용은 매뉴얼을 참조하기 바란다.

<Location> 
태그내의 /repos는 나중에 http로 접근할 때 http://서버주소/repos형식으로 붙는다.

SVNPath : 저장소 위치를 적어준다. 여러 개의 저장소를 생성할때는 SVNParentPath라고 적어주면 
된다.

Require : valid-user라는 값은 승인된 유저만 접근이 가능하다는 것을 의미한다.

AuthType : 인증 타입으로는 필자는 Basic인 기본타입을 사용한다.

AuthUserFile에는 위에서 셋팅한것처럼 사용자 정보가 들어가는 파일의 위치를 지정한다.

  • 9. 보통 아파치 설치후 subversion을 설치하면 아파치 관련 서비스가 사라진다. 이때는 명령창에서
    apache -k install 라고 해주면 다시 서비스가 설치된다.
  • 10. 아파치를 다시 시작 시키고 나서 웹브라우저로 http://localhost/repos 해주면
    Revision 0: / 라는 메시지를 보여준다. 물론 위처럼 설정을 했다면 인증절차를 거치게 
    된다.

Eclipse와 Subversion을 연동해서 사용하기.

필자는 eclipse3.1.M4버전을 사용했다.

  • 1. 일단 eclipse용 subversion플러그인은 현재 두가지가 나와있다.

http://subclipse.tigris.org

http://ar.geocities.com/itcrespo/eclipse/

두가지 중에 필자는 위의 것을 사용한다.

  • 2. 홈페이지에서 보면 알겠지만 subclipse는 eclipse내의 software updates를
    사용한다.

Help -> software updates -> find and install를 
누른다.

  • 3. search for new features to install를 체크하고 next한다.
  • 4. 다음처럼 new remote site를 추가해 준다. 그럼 sites to include in
    search에 추가가 되고, subclipse에 체크를 한 다음에 다음으로 넘어가자.

  • 5. 다음처럼. 선택한다. 그리고 몇번의 페이지 이동을 한다.

  • 6. 그럼 다음과 같은 화면이 나온다.

  • 7. 설치하고 나면 eclipse를 다시 시작할지 물어본다. 그냥 다시 시작한다.

window->preferences에 team부분을 보면 다음처럼 svn관련이 추가된걸 볼수있다.

  • 8. 메뉴에 window -> show view -> other -> svn하위의 svn
    repositories를 선택한다.

그럼 다음과 같은데 마우스 오른쪽을 클릭해서 new -> 
repository location으로 새 저장소를 생성한다.

  • 9. 다음처럼 셋팅해주고 finish를 해준다.

  • 10. 그럼 svn repositories에 등록이 된다. 그리고 다음과 같이 보여준다.

필자의 
경우 기존에 등록된 프로젝트가 있어서. 조금 다르게 나온다.

  • 11. 프로젝트를 생성하고 svn에 연결을 시도한다.

  • 12. 다음처럼 cvs와 svn을 선택하는 화면이 나온다.

  • 13. 셋팅이 되어 있는 svn repository를 선택하면 된다.

  • 14. 그럼 svn연결이 되면서 다음과 같은 화면이 나온다. cvs와는 조금 다르게 연결이 되었는데, ?
    표시가 보인다.

Subversion은 연결후 다시 subversion version 
control등록을 해야 한다.

  • 15. 다음처럼 version control제어에 추가하고 다시 commit를 하면 연결작업이 사실상 끝난다.


'소프트웨어 공학 > 개발' 카테고리의 다른 글

SVN 생성  (0) 2011.11.07
Subclipse for SVN on Eclipse CDT  (0) 2011.11.04
[ELF] OpenSource Enlightenment DeskTop  (0) 2011.10.14
표준 Dispose 패턴을 구현하라.  (0) 2011.10.06
[패턴] Layer Architecture Pattern  (0) 2011.10.01
:

리눅스 위에서 돌아가는 X Window와 비슷한 거로 보았다.

오픈 소스 주소는 아래와 같다. ( SVN Export 용 주소 )
http://svn.enlightenment.org/svn/e/trunk

Web Browser에서 접근하려면 아래 주소로 가야한다.
http://trac.enlightenment.org/e/browser/trunk


선배와 이야기를 하다 오픈소스 이야기가 나오게 되었고, 그 중에 EFL을 소개 받았다.
EFL에는 다른 선배가 이미 멤버로 등록되어 있었다.
C를 기반으로 만들어졌다고 한다.
SVN으로 위 소스를 다운로드 받았다.
그리고 언더스탠드를 이용해 소스를 조금 분석해 보는 중이다.

C기반으로 작성되어 있으나, TestSuite를 제공하면서 프로젝트를 진행한 흔적이 보인다.
우분투나 가벼운 리눅스를 설치해서 EFL 데스크 탑을 설치해 얼마나 위대한지 구경해 보아야겠다.

그리고 기회가 된다면 이 오픈소스 멤버가 되고 싶기도 하다.
EFL 사이트 : http://www.enlightenment.org/

잠깐.. evas의 3D 쪽을 봤다. 꽤 명쾌하고 가볍게 짜놓은 게 보인다. 시간 날 때 짬짬히 봐볼만 하다.
C로만 되어 있다고 생각했는데, OOP도 적용되어 있어 보인다. 어쩌면.. 3D 부분만 넣었을지도 모른다.




EFL에 대한 용어 정리다.


이 용어 정리는 서주영씨가 번역해 놓은 내용이다. ( http://seoz.egloos.com/3669728 )

Enlightenment - 프로젝트의 원래 이름입니다. 오늘날 Enlightenment 라고 하면, 특정한 한 부분을 이야기하는게 아니라 이 프로젝트를 전반적으로 가리킵니다.

DR17 - E17 이라고 불리기도 하며, Enlightenment 데스크탑/윈도우 매니저의 최신 버전을 칭합니다. 아직 한참 개발중입니다. 현재 안정된 버전은 DR16 입니다. (역자 주: DR17 은 이름만으로 보면 단지 DR16 의 업버전이라고 오해할 수도 잇지만, 둘은 전혀 다른 윈도우 매니저입니다. 심지어 DR17 을 시작할 때, DR16 의 코드를 한줄도 사용하지 않았습니다.)

EFLs - "Enlightenment Foundation Libraries" 를 뜻하며 Enlightenment 데스크탑에 필요한 기반이 되는 라이브러리 모음입니다. Enlightenment 데스크탑의 핵심 부분이지만 그렇다고 EFL 이 Enlightenment 데스크탑은 아닙니다. (역자 주: Enlightenment 데스크탑이 EFL 라이브러리를 사용합니다.) 쉽게 말해 EFL 과 Enlightenment 데스크탑의 관계는 GTK 와 그놈(Gnome) 그리고 QT 와 KDE 의 관계와 같습니다.

'소프트웨어 공학 > 개발' 카테고리의 다른 글

Subclipse for SVN on Eclipse CDT  (0) 2011.11.04
Subversion 설치 및 Eclipse와의 연동  (0) 2011.11.04
표준 Dispose 패턴을 구현하라.  (0) 2011.10.06
[패턴] Layer Architecture Pattern  (0) 2011.10.01
c++ 고급  (0) 2011.08.24
:


포스트를 만든 목적

  • 이렇게 하지 않으면, 책을 건성으로 본다.

내용

Dispose 는 무엇인가?

관리되지 않는(unmanaged) 자원을 해제하기 위해서 사용 하는 함수이다.

그러면 unmanaged 자원은 무엇인가?

쉽게 생각해서 "메모리가 아닌 자원" 즉, 윈도우 핸들, 파일 핸들, 소켓 핸들 등 시스템 자원을 뜻한다. 반대로 managed 는.. new List<int>() 등, 메모리 처럼 쓰는 자원들이다.

그러면 표준 Dispose 패턴은 무엇인가?

  1. Dispose를 IDisposable Interface로 구현한다.
  2. Dispose 내부에선 unmanaged 자원을 해제한다.
  3. 사용자가 Dispose를 사용하지 않았을 경우를 대비하여, finalizer를 구현한다.
  4. finalizer 에서 unmanaged 자원을 해제한다.
이 1 ~ 4 을 구현한 Dispose 를 표준 Dispose 패턴이라고 한다.

finalizer 를 구현하면, 성능상에 나쁜 영향을 주는데, 왜 finalizer를 구현해야 하나?

무제한 unmanaged 자원이 늘어나는게 더 나쁜 영향을 준다. 그래도 finalizer를 구현하지 않겠는가?

왜 finalizer를 구현하면 성능에 나쁘나?

  1. finalizer를 구현하면, GC가 자신이 관리하는 finalizer 큐에 저장한다.
  2. GC에서 사용하는 특정 쓰레드가 finalizer 큐를 읽고, 해제해도 되는지 검사한다.
  3. 검사 후 해제되도 된다면, 그때서야 해제한다.

3번이 될때까지 아직도 해제하지 않고 있는 것과, 검사하는 것에 에너지를 사용하기 때문에 성능에 나쁘다.(얼마나 나쁠지는 모르겠다.)

finalizer에선 어떤 일을 해야 하는가?

사용자가 Dispose()를 사용하지 않았을 경우, unmanaged 자원을 해야 해야 한다.

그러면, 어떻게 Dispose를 구현해야 하는가?

반드시 다음과 같은 기능을 수행해야만 한다.

  1. unmanaged 자원 해제
  2. managed 자원의 해제
  3. Dispose() 한 후 다시 Dispose() 호출 후 이상이 없어야 한다.
  4. Dispose() 한 후 unmanaged 자원 사용 시, ObjectDisposed 예외를 발생 시켜야 한다.
  5. finalization 동작을 막아야 한다.

다 좋은데, 상속 기반에서는 어떻게 하나? IDisposable Interface는 비가상 함수지 않는가?

그렇다. 그래서 가상함수로 Dispose() 기능을 수행하는 함수를 만들어야 한다. 기왕 제 3의 함수 만드니까, finalizer 에서 사용 되는 부분도 줄이면 좋겠다.

.. 그런데 managed 자원은 GC(가비지 켈렉터)가 해제해주는데 굳이 해제해 줄 필요가 있는가?

맞는 말이다. 하지만 어차피 사용되지 않을꺼니까, 가비지 켈렉터가 잘 일할 수 있도록, 해제해 주는게 좋다.

어떻게 managed 자원을 해제 하는가?

.. null 로 만들면 된다. 예를 들어 _list.Clear(); _list = null; 이렇게 하면 된다.

자, 이제 코드로 보여 줄 수 있는가?

Dispose Sample Code
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace console
{
    class ConsoleClass
    {       
        public static void Main()
        {
            using (DerivedDisposeSample t =  new DerivedDisposeSample())
            {               
            }
 
        }
    }
 
    public class BaseDisposeSampleClass : IDisposable
    {
        // -- Dispose 두번 이상
        // -- 호출을 막기 위한것
        private bool _isBaseDisposeSmapleClass = false;
 
        // -- managed resource
        private List<int> _ManagedResource = new List<int>();
 
        // -- unmanaged resource
        // -- 사실 FileStream은 finalizer 가 구현 되어 있으므로, unmanaged 라고 보긴 힘들다.
        // -- 예제를 위해 한것이므로 그러려니 하자
        private FileStream _UnManagedResource = new FileStream("hehe.txt", FileMode.OpenOrCreate);
         
        ~BaseDisposeSampleClass()
        {
            // finalizer 가 호출된 시점에선 이미 Dispose()가 호출 되지 않았으므로
            // managed resource 는 지우지 않는다.
            Dispose(false);
        }
 
        // Dispose 호출
        public void Dispose()
        {
            // managed 까지 제거
            Dispose(true);
 
            // managed 까지 지웠으므로,
            // 이 객체는 finalizer 호출하지 말라고 등록한다.
            GC.SuppressFinalize(this);          
        }
 
        protected virtual void Dispose(bool isDisposing)
        {
            Console.WriteLine("BaseDisposeSampleClass::Dispose(bool isDisposing) is called");
 
            // is called?
            if (true == _isBaseDisposeSmapleClass)
                return;
 
            // managed resource release
            if (true == isDisposing)
            {
                _ManagedResource.Clear();
                _ManagedResource = null;
            }
 
            // unmanaged resource release
            _UnManagedResource.Dispose();
 
            // flag on
            _isBaseDisposeSmapleClass = true;           
        }
    }
 
    public class DerivedDisposeSample : BaseDisposeSampleClass
    {
        private bool _isDerivedDisposeSample = false;
 
        protected override void Dispose(bool isDisposing)
        {
            Console.WriteLine("DerivedDisposeSample::Dispose(bool isDisposing) is called");
 
            if (true == isDisposing)
            {
                // managed resource release...
            }
 
            // unmanaged resource release...
            // ...
            // ..
            // .           
            base.Dispose(isDisposing);
 
            // flag on
            _isDerivedDisposeSample = true;           
        }
    }
}

주의 해야 할 점이 있는가?

  • finalizer 와 Dispose 에서, 객체 생명주기를 바꾸는 행동을 하지 말아야 한다. 만약 객체 생명주기를 건들게 되면, 객체는 더 이상 사용하지 않는데도, managed 자원까지 사라지지 않는 일이 발생 한다. .... 어렵다면, 해제하는 작업만 해야 한다고 알아도 된다.

결론

  • 남이 만든거 갔다가 쓰자. :P
  • 남이 만든게 없을 경우, unmanaged 자원이 있을 경우, 표준 Dispose 패턴으로 구현하자.



출처 : http://ikpil.com/1190 


:

[패턴] Layer Architecture Pattern

소프트웨어 공학/개발 | 2011. 10. 1. 23:57 | Posted by youGom

:

c++ 고급

소프트웨어 공학/개발 | 2011. 8. 24. 17:47 | Posted by youGom
1. define
#define 문으로 선언된 상수는 컴파일시 Symbol 정보가 남지 않는다.
그래서, 디버깅할때 간혹, 심볼 추적 안되는 것 같다.


2. constexpr
int getCount( int c ) { return c + 1; }
int arr[ getCount( 1 ) ];

 위 내용은 일반적으로 컴파일되지않는다.
 
constexpr int getCount( int c ) { return c + 1; }
int arr[ getCount( 1 ) ];
 위와 같이 constexpr 키워드를 사용하면 컴파일시 정해진다.





 
:
이클립스에서 쓰레드 컴파일할 때 설정방법

makefile을 손보는 건데.. 이클립스는 makefile을 설정한 내용을 가지고 자동 생성해준다.
다음과 같이 설정 해주면 된다.


아래와 같이 했는데, 속도차이가 없었다;; ㅋㅋㅋ
1. 프로젝트 properties 진입
  a. C/C++ Build
    i. Settings
    ii. C++ / C 의 Miscellaneous ( 둘 다 )
      -> Flags에 [ -lpthread ] 추가
  b. Run/Debug Settings
    i. 프로젝트 선택 후 [ Edit ] 클릭
    ii. Arguments 탭 선택
      -> Program arguments 에 [ -lpthread ] 추가
 
 

아래와 같이 했더니, 엄청난 속도와 CPU 점유율 100%를 경험할 수 있었다.
1. 프로젝트 properties 진입
  a. C/C++ Build
   -> use default 체크 해제
   -> cs-make -j8 ( cs-make -j[N] )
: N개 만큼 쓰레드가 생성된다. 








 

'소프트웨어 공학 > 개발' 카테고리의 다른 글

Subversion 설치 및 Eclipse와의 연동  (0) 2011.11.04
[ELF] OpenSource Enlightenment DeskTop  (0) 2011.10.14
표준 Dispose 패턴을 구현하라.  (0) 2011.10.06
[패턴] Layer Architecture Pattern  (0) 2011.10.01
c++ 고급  (0) 2011.08.24
: