좋은책과 만남2011. 7. 17. 16:08

바야흐로 플래시에도 3D바람이 불고 있다. 아쉬운 것은 아직까지 어도비에서 발표된 것으로만 다루어 본다면 기존에 개발하던 방식 그대로 어렵게 개발해야한다는 것이다. 물론 Away3D나 alternativa3d 등등의 라이브러리를 사용한다면 비교적 쉽게 개발되겠지만, 그래도 어렵다;;; 어도비에서 제공하는 AGAL을 사용하려면 OPcode를 익히고 AdobeMiniAssembler를 이용하여 직접 쉐이더를 구현해야한다...매우 쉽지 않다. 이러한 개발 방법론은 이미 C/C++에서 DirectX 를 개발하는 방법과 매우 유사하다. 해서 저레벨 개발방식을 익히고자 유명한 소위 해골책용책을 보고자 한다.



딱 봐도 알겠지만 왼쪽이 용책이고 오른쪽이 해골책이다...수준은 기초~중급정도라고 한다.
Posted by 버터백통
SCJP 비공개 포스팅2011. 7. 13. 11:02

죄송합니다.
저작권법에 의해 이곳의 내용은 저 개인이나 허용된 특정 멤버만 볼 수 있는 비공개 포스팅입니다.

Posted by 버터백통
Computing2011. 7. 4. 11:10

최근 좋은 내용은 이렇게 퍼날르게 되는 안좋은 습관이;;;
아래 내용은 http://ncanis.tistory.com/247의 내용을 퍼왔습니다.

****************************************************************************************************************
Mercurial에 대한 부분이 궁금하여 자료를 정리해 보았습니다.
많은 분들에게 도움이 됬으면 하네요.

1. Mercurial 이란?
Svn의 단점을 대체할 Source Control management 를 말합니다.
아래의 특징이 있습니다.
홈페이지 : http://mercurial.selenic.com

- 분산 설계
  : 전통적인 SVN,CVS방식은 서버-클라이언트 방식으로, 해당 중앙서버가 작동하지 않으면 Commit을 비롯한 모든 작업을 할수 없습니다. 하지만 Mercurial은 각각 로컬에 모든 개발 History를 저장합니다.
즉, 각자가 모두 서버역할도 같이 하게 됩니다.

- 빠릅니다.
데이터 구조가 매우 빠르게 설계되어 있습니다. 소스 비교, 롤백등에 대한 정보를 자세히 저장하고 있기때문에 빠른 비교가 가능합니다.

- 플랫폼 상관 없음
Physon 과 성능을위한 C가 사용되어 개발되어 있습니다. 거의 모든 플랫폼에서 사용가능합니다.

- 확장성
여러 기능에 대해 확장할 수 있도록 설계되어 있습니다.
( 어딘가를 보니 웹 프로토콜을 이용해서 인증을 거치게 해놓았더군요)

- 사용이 편리하다
SVN 과 비슷하여 쉽게 적응가능합니다. (다만 몇가지는 조심해야할 부분이 있네요  )

- 오픈소스

2. Mercurial 과 Git
Mercurial 은 Google에서 지원하고 있습니다.
Git에 비해 쉽습니다.
Git:  http://www.git-scm.com/
Git 도 DVCS 방식입니다.
재미있게 설명한 글이 아래에 있으니 참고하세요.
http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/
Git: 맥가이버
Mercurial : 제임스 본드 로 비교했네요 ㅎㅎ

3. Mercurial  설정
(1) Mercurial 설치
http://mercurial.selenic.com/downloads 에서 Mercurial 다운로드 받으세요.
(2010년 7월 27일 기준 1.6, Snapshot 기준 1.7)
사용자 삽입 이미지

설치는 원하는 곳에 하면 됩니다.

(2) TortoiseHg Tool 설치하기
이제 Tool을 설치해 봅시다.
http://tortoisehg.bitbucket.org/ 에 가서
설치를 다하게 되면 마우스 우측 이벤트에 아래와 같이 등록됩니다.
(현재 1.1.1 이 나와있군요.)

이 메뉴를 통해 Repository를 관리하시면 되겠죠?
사용자 삽입 이미지

자아 아래는 Create Repository Here를 이용해 repo라는 repository를 만들어 봤습니다.

사용자 삽입 이미지

(3) Eclipse를 위한 Mercurial Plug-in 설치하기
Eclipse를 위한 Plug-in을 설치해 좀더 편하게 사용할 수 있습니다.
현재 http://javaforge.com/project/HGE 으로 1.6.0이(2010년 7월 기준) 릴리즈 되었습니다.
몇가지 문제점이 있으나 곧 해결될것이라 봅니다.

Eclipse>Help>Install new Software 를 선택해 http://cbes.javaforge.com/update 를 등록합니다.

사용자 삽입 이미지

자아 설치하고 Eclipse를 재시작하게 되면 아래와 같이 Team 카테고리에 메뉴들이 쭈욱 뜨게 됩니다.

사용자 삽입 이미지

이제 설치가 다 되었으니 이해하기 쉽게 mercurial console 명령어와
Eclipse plugin 메뉴를 이용해 각 부분을 설명해 드리겠습니다.

4. Mercurial 사용하기
여기에서의 설명은 3가지로 나누어 비교하기로 하겠습니다.
hg 콘솔 명령어: Console
Macurial 메뉴 명령 : 마우스 오른쪽 선택시 나오는 메뉴 (Tool)
Eclipse Plugin 메뉴 : Eclipse

로 분류하겠습니다. 그리고 자주 사용해야하는 기능에 대해서만 설명하겠습니다.

Repository 생성하기
Console: hg init
Tool: TortoiseHg>Create Repository Here
Eclipse: Mercurial Repositories 메뉴/new Repository 선택


Server 띄위기
특정 repository를 띄워 외부에서 이곳으로 접근하게 할 수 있습니다.
(SVN으로 치면 이곳이 서버가 되고, 상대방이 클라이언트가 되겠죠)
Console: hg serve
Tool: TortoiseHg>Web Server
Eclipse: Team>Server  (1.6 플러그인에서 Server 실행은 비추천, Stop하는게 없습니다.)
사용자 삽입 이미지
<TotoiseHg 의 메뉴 화면- Commit은 자주쓰는 메뉴라 그런지 밖으로 나와 있다>

파일 및 폴더 추가
등록한 폴더나 파일을 Mercurial에 등록합니다.
(이렇게 등록한 파일들만 Commit 할 수 있습니다.)
Console: hg add
Tool: TortoiseHg>add files
Eclipse: Team>add


Commit 하기
Commit을 하게 되면 서버가 아닌 로컬에 등록된다. 즉 History가 자기 컴퓨터에 저장된다.
Console: hg commit
Tool: Hg Commit
Eclipse: Team>Commit


Push하기
로컬 History가 아닌 지정한 원격지에 작업한 파일을 Push 합니다.
(SVN 으로 보면 Server에 Commit한게 되는 겁니다.)
즉 공동저장소에 저장하는것이기 때문에 반드시 지켜야 하는 규칙이 있습니다.
#필독
- Push를 하기전 반드시 Pull을 해서 새로운 데이터를 수신받으세요.
- Conflict가 있을경우 Merge를 이용해 정리한후 Push 해야 합니다.
  ( 같은
- Push force 를 이용해 강제로 push하시면 안됩니다.
  제대로 된 History를 쌓을 수 없습니다.


Console: hg push
Tool: TortoiseHg> Synchronize 선택 Push 선택
Eclipse: Team> Push


Update 하기
로컬 History에서 데이터를 업데이트하게 됩니다.
Console: hg update
Tool: TortoiseHg>update


Pull하기
연결된 원격 저장소로부터 최신 내용을 로컬 Repository로 가져옵니다.
(Svn의 Update가 되겠죠)
Console: hg pull
Tool: TortoiseHg> Synchronize 선택 Pull 선택
Eclipse: Team>Pull
- 이클립스에서 보면 Pull Option도 선택할 수 있습니다.
 Update after pull
 Clean update(override local changes) : 원격지 소스로 모두 덮어씌우는게 되겠군요.
 Rebase after pull
 Pull even where remote repository is unrelated
 Merge and if there are no conflicts, commit after update
 Abort pull when a timeout occurs


사용자 삽입 이미지
<Eclipse 에서의 Pull >

복구 기능
- Revert : 마지막에 Commit한 그 시점으로 해당 소스들을 되돌리는 것을 말합니다.
- Rollback :
- Backout :
- Strip :



쓸만한 기능 - Search History
툴을 이용하면 편하게 검색할 수있다.( Eclipse Plug-in에는 없다.)
Tool>Search History 를 선택한다.

사용자 삽입 이미지

소스에 test란 text가 들어가고 src 패스에 존재하는 소스 History들을 검색해서 보여줍니다.
http://tortoisehg.bitbucket.org/manual/1.1/datamine.html 에 있는 설명 문서를 참고하세요.


5. 웹서버 띄위기
  다음 아래 Doc를 참고하면 각 서버와의 연동에 따른 장단점을 비교할 수 있다.http://mercurial.selenic.com/wiki/PublishingRepositories
(예를 들면, hg serve 라는 기본 설정을 사용한다면 인증에 관한 설정을 할 수 없다는 것이다.)

Solution

Mechanism

Push?

Browsable

Advantages

Disadvantages

Public

hg serve

HTTP

off by default

yes

built-in

push has no authentication, so can only be used on trusted internal networks

static HTTP

HTTP/HTTPS

no

no

does not require hg or CGI support on the server

very slow

hgweb {*}

off by default

yes

can use existing web server (CGI, WSGI, mod_python), including authentication

web server config can be hard to debug

hgwebdir {*}

off by default

yes

can use existing web server (CGI, WSGI, mod_python), including authentication, supports multiple repositories

slightly more work to setup than hgweb

hg serve behind a proxy (Nginx)

yes

yes

multiple repos, permits authentication, no CGI

requires proxy (Nginx, HAProxy)

third-party hosting

yes

yes

minimal setup

not locally administered, may have fees

Private/internal

ssh

SSH

yes

no

no additional setup

requires Unix server, per-user accounts and repositories

SharedSSH

SSH (but with shared accounts)

yes

no

easy key management, fine-grained permissions

requires Unix server, not built in

shared disk

NFS/Samba etc.

yes

no

can use existing setup

generally restricted to intranets



6. Mercurial 에 인증시스템을 넣어보자
: 현재 Mercurial 에 인증시스템을 넣는것은 상당히 어렵습니다. 특히 Apache와 연동해 인증시스템을 구축하는것은 정말 최악입니다. 왜 Mercurial이 이런 인증 시스템을 제공하지 않는지 궁금하군요.
- DB 테이블을 통한 인증
- 계정 리스트 파일을 통한 인증

이 2개만 지원해주면 참 좋겠는데 말이죠. 물론 DVCS 시스템 하에서는 이런 인증시스템이 의미가 없을 수 있습니다. 어짜피 로컬에 모든정보가 저장되니 말이죠.

만약 이런 기능을 원하시는 분이 있다면 Http Proxy 기능을 직접 만드시길 바랍니다.
즉 중앙서버에서는 hg serve 로 서버를 열고 Proxy Server가 외부를 깜싸는 형태죠.
모든 외부 클라이언트는 Proxy 를 통해서 접근해야 합니다.
그렇다면 이때 Proxy Server에서 해당 요청 주소에 대해 Http Basic 인증시스템을 적용할 수 있습니다.

현재 저도 이렇게 구현했습니다.
구조도 간단해지고, 본인이 원하는 어떤 언어로도 가능하니 이보다 좋은게 없습니다.


* Mercurial 에 도움될만한 사이트
1. http://hginit.com : 조엘 스폴스키가 쓴 Mercurial 강좌
                          처음에 이사람도 거부하다가 여기에 빠져들었네요. svn에서 이쪽으로 전환하는 것을 강력하게 추천하고 있습니다.
2. http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/ : Git과 Mercurial 비교

Posted by 버터백통