svn delete -m "Deleting project dir" http://xxx.xxx.xxx.xxx/svn/project/asdf
카테고리
- svn 프로젝트 삭제 2013.10.03
- trac-admin 사용 2013.09.29
- Amazon AWS 우분투 기반 Trac & Subversion 2013.09.18 1
- Putty를 통해 Amazon AWS Windows에서 접속 2013.09.18
- WM_INPUT 메시지 핸들링 2013.08.21
- [엑셀함수] INDIRECT, TRUNC, ROW, CONCATENATE, CHAR 2013.07.19
- 아웃룩 실행 오류 해결 2013.07.19
- 로봇 다빈치, 꿈을 설계하다 2013.07.04
- 글로벌 소프트웨어를 꿈꾸다 2013.06.08
- The ART of SOFTWARE TESTING 2013.05.31
svn 프로젝트 삭제
trac-admin 사용
sudo trac-admin <프로젝트경로>
ex> sudo trac-admin /var/trac/sak2013
이렇게 하면 해당 프로젝트에 대해 trac-admin이 실행된다.
help 만 입력하면 각 명령어들에 대한 간략한 설명을 볼 수 있고
'help 명령어'와 같은 식으로 입력하면 해당 명령어에 대한 자세한 설명을 볼 수 있다.
예>
Amazon AWS 우분투 기반 Trac & Subversion
아래 내용 참고하여 환경을 구성했고
나는 제일 처음에 아래 두 명령을 먼저 수행했음
$ sudo apt-get update
$ sudo apt-get upgrade
trac 및 svn 사용자 추가는 아래와 같이 했음
$ sudo htdigest /etc/apache2/.htdigest Repository <User ID>
$ sudo htdigest /etc/apache2/.htdigest Trac <User ID>
-------------------------------------------------------------------------------------------------
1. TRAC Package 설치.
1. 아파치 웹서버 설치
Trac을 웹서버없이 단독으로 올릴 수는 있지만 그리 권장할 만 하지는 않다.
그리고 Ubuntu Desktop에는 아파치 웹서버가 기본설치되지 않기 때문에 다음과 같이 설치해야 한다.
$ sudo apt-get install apache2
.
2. Subversion 설치
Trac은 서브버전과 통합된 형태이기 때문에 Subversion도 설치해야 한다.(svn 1.5.1 이 설치됨)
$ sudo apt-get install subversion libapache2-svn
3. Trac 설치
Trac은 최신버전인 0.11 이 설치된다.
$ sudo apt-get install trac libapache2-mod-python python-setuptools
우선 간단하게 apt-get 명령어로 TRAC 및 Subveersion을 설치합니다. 이때 Subversion은 TRAC에서 필요로 하므로 의존성 검사로 인해 알아서 설치합니다
2. SVN 환경설정
우선 저장소 역할을 할 Directory를 만들도록 합니다. 일단 여기서는 나중에 추가로 설명할 Apache와의 연동을 위해/var/svn을 합니다만 굳이 /var/svn에 하실 필요는 없으시고 원하시는 위치에 만드셔도 상관은 없습니다. 단 연동을 위해 필요한 사용자 계정으로 www-data(필요하면 다른 계정을 설정해도 상관없지만요)를 통해 이뤄지기 때문에, 저장소에 대한 사용자 권한을 www-data가 갖도록 했습니다. 이는 뒤에 나오는 TRAC에서도 마찬가지로 설정 했습니다.
1: sudo mkdir /var/svn
2: sudo chown www-data.www-data /var/svn
3: sudo -u www-data svnadmin create /var/svn/<Project Name>
이때 /var/svn은 저장소의 부모 디렉토리이며, 실제 저장소를 프로젝트이름(<Project Name>)으로 생성하면 개별 프로젝트에 대한 저장소가 생성됩니다.
이후 새로운 프로젝트를 등록하고 싶으면 3번 줄의 부분만 반복적으로 수행해 주면 됩니다.
3. TRAC 환경 설정
TRAC도 SVN과 같이 디렉토리를 구성하면 됩니다.
1: sudo mkdir /var/trac
2: sudo chown www-data.www-data /var/trac
위와 같이 디렉토리를 생성하면 TRAC에 대한 메인 디렉토리가 생성됩니다.
1: sudo -u www-data trac-admin /var/trac/<Project Name> initenv # 초기생성용
2: sudo -u www-data trac-admin /var/trac/<Project Name> upgrade # 마이그레이션용
이제 TRAC을 설치하도록 하겠습니다. 기본적으로 2가지 명령어가 있는데 위와 같이 끝에 initenv를 해서 새로운 프로젝트를 생성하고, 그렇지 않고 TRAC이 버젼업 되었다던가 다른 이유로 마이그레이션이 필요하면 아래와 같이 upgrade를 수행합니다. 수행하면 총 4개의 위와 같은 질문을 하는데 내용은 아래와 같고 각각 그에 맞는 값을 설정합니다.
1: Project Name [My Project]> <Project Name>
2: Database connection string [sqlite:db/trac.db]>
3: Repository type [svn]>
4: Path to repository [/path/to/repos]> /var/svn/<Project Name>
1 .프로젝트 명: 원하는 프로젝트 이름을 넣습니다. 이름은 SVN과 맞춰줄 필요는 없습니다.
2. DB 연결명: 아직 설정해 본적이 없어서 모르겠지만 기본설정을 그대로 둡니다.
3. 저장소 종류: SVN말고도 여러가지 있는데 여기서는 Subversion을 사용한 관겨로 기본값으로 그대로 둡니다.
4. 저장소 위치: 앞서 만든 저장소의 위치를 입력합니다.
4. TRAC 관리자 계정 추가
마지막으로 TRAC을 관리할 관리자 계정을 추가합니다. 이는 내일 다시 올릴 Apache와의 연동할 때 필요한 부분입니다.
1: sudo -u www-data trac-admin /var/trac/<Project Name> permission add <User ID> TRAC_ADMIN
이렇게 하면 간단히 TRAC ‘자체’에 대한 설정이 끝나게 됩니다. 하지만 정작 사람들이 잘 써먹고 있는 웹화면상의 TRAC으로 갈려면 Apache와 연동을 해야 하는 부분이 남아 있습니다.
5. Apache 및 관련 Package 설치.
우선 연동 하기에 앞서 Apache 및 관련 모듈을을 설치해야 합니다. 따라서 apache2-threaded-dev, libapache2-mod-python, python-dev, libapache2-svn 정도만 설치하면 왠만한 모듈은 알아서 설치하게 됩니다.
1: sudo apt-get install apache2-threaded-dev libapache2-svn
2: sudo apt-get install libapache2-mod-python python-dev
1. Apache에 SVN과 TRAC을 연동
우선 이부분을 하기에 앞서 SVN과 TRAC의 사용방법은 가지 각색이겠지만 2가지가 있습니다.(일단 제 기준 입니다.)
• 1개의 SVN과 TRAC의 프로젝트를 만들고 그 안에서 모든 프로젝트들을 관리한다.
o장점: 많은 프로젝트를 다 같이 할 때 한번에 모니터링이 가
o단점: 각 프로젝트에 대한 관리가 뒤섞일 수 있음.
o권장: 여러 간단한 작업들로만 있는 경우 권장.
•개별 프로젝트마다 SVN과 TRAC의 프로젝트를 생성. 독립적으로 관리한다.
o장점: 각각 프로젝트마다 관리 하기 때문에 뒤섞일 일이 적고 계정 권한 관리가 쉽다.
o단점: 여러 프로젝트에 대해 각각 관리하기 때문에 손이 많이 가고 한번에 모든 모니터링이 불편(?)
o권장: 개별 프로젝트 들이 덩치가 큰 경우, 장기 프로젝트 등….
일단 이번에는 2번째 항목인 개별 프로젝트마다의 SVN과 TRAC을 생성해 관리하도록 하는 기능으로 설명하겠습니다. 나머지는 주석 처리한 부분을 푸시고 원래 있던 동급의 내용에 주석처리 하시면 됩니다. ^^
5. SVN 올리기
우선 /etc/apache2/mods-available/dav_svn.conf 파일을 열고(없으면 만들면 됩니다.) 다음을 추가 합니다.
1: <Location /svn>
2: DAV svn
3:
4: # /var/svn/ 으로 저장소의 부모폴더로 연결합니다
5: SVNParentPath /var/svn
6: # 단 1개의 프로젝트만 사용하면 아래와 같이 SVNPath를 대신 입력합니다
7: #SVNPath /var/svn/<Project Name>
8:
9: # Digest 인증 설정
10: AuthType Digest
11: AuthName "Repository"
12: AuthUserFile /etc/apache2/.htdigest
13:
14: # Basic 인증 설정
15: # JAVA 기반 프로그램들 에서는 Digest인증을 하면
16: # Export와 checkout을 못하는 기현상이 일어 나더군요
17: # 이런 경우 사용해 주세요
18: #AuthType Basic
19: #AuthName "Repository"
20: #AuthUserFile /etc/apache2/.htpasswd
21:
22: # Commit 의 접근 억세스 설정
23: <LimitExcept REPORT>
24: Require valid-user
25: </LimitExcept>
26: </Location>
단 이경우 내용에도 써 있지만 SVNPath와 SVNParentPath는 용도에 따라 둘중 하나만 사용할 수 있습니다. 또 왜인지는 모르겠는데 JAVA 기반인 경우에서는 Digest 인증을 못하더라고요. 그런관계로 이경우에는 어쩔 수 없이 Basic 인증을 사용하면 됩니다. (C 기반 SVN Client는 잘 돌아갑니다.) 일단 인증 파일로 각각 Digest의 경우 /etc/apache2/.htdigest로 Basic의 경우 /etc/apache2/.htpasswd로 했습니다. 각각 만드는 법에 대해서는 Digest만 뒤에 올려두도록 하겠습니다.
이제 Module 설정 파일을 만들었으니 apache에 올리도록 합니다. 올리는 방법은 아래와 같이 사용하면 됩니다.
1: sudo a2enmod dav_svn
2: sudo a2enmod auth_digest
6. TRAC 올리기
TRAC도 마찬가지 방법으로 작성을 해야 합니다. 우선 /etc/apache2/sites-available/trac을 다음과 같이 작성합니다.
1: # 하나의 TRAC에서 모든 프로젝트를 사용할 때 쓰는 Alias 입니다.
2: #Alias /trac /var/trac/<Project Name>
3:
4: <Location /trac>
5: SetHandler mod_python
6: PythonHandler trac.web.modpython_frontend
7: # TRAC의 부모 디렉토리 설정. 개별 프로젝트마다 TRAC을 사용할 때 씁니다
8: PythonOption TracEnvParentDir /var/trac
9: # TRAC 프로젝트 설정. 모든 프로젝트를 하나의 TRAC에서 사용할 때 씁니다
10: #PythonOption TracEnv /var/trac/<Project Name>
11: PythonOption TracUriRoot /trac
12:
13: # Digest 인증 설정
14: AuthType Digest
15: AuthName "Trac"
16: AuthUserFile "/etc/apache2/.htdigest"
17: Require valid-user
18:
19: # Basic 인증 설정
20: # 앞선 svn 설정과 계정을 맞춰주기 위해 Basic 설정을 쓰는 경우 사용
21: #AuthType Basic
22: #AuthName "Repository"
23: #AuthUserFile /etc/apache2/.htpasswd
24: </Location>
내용은 SVN을 설정 했을 때와 마찬가지 입니다. 이번에도 마찬가지로 PythonOption으로 준 TracEnvParanetDir과 TracEnv는 둘중에 하나만 사용해야 합니다. 또한 Apache에 적용하기 위해서 다음 명령어로 TRAC을 추가합니다.
1: sudo a2ensite trac
7. TRAC 사용자 계정 설정.
우선 이번글에서는 Digest 설정하는 부분만 넣도록 하겠습니다. 일단 Digest를 위한 사용자의 암호를 넣어야 하는데요. 각각SVN과 TRAC을 위해 구분시켜서 넣도록 합니다. 단 앞서 올린 포스트에 설정한 관리자 계정도 반드시 포함되어야 합니다!!
1: user@user-pc:/etc/apache2$ sudo htdigest -c /etc/apache2/.htdigest Repository <User ID>
2: Adding password for user in realm Repository.
3: New password:
4: Re-type new password:
5: user@user-pc:/etc/apache2$ sudo htdigest /etc/apache2/.htdigest Trac <User ID>
6: Adding user user in realm Trac
7: New password:
8: Re-type new password:
9: user@user-pc:/etc/apache2$ sudo chmod 600 /etc/apache2/.htdigest
10: user@user-pc:/etc/apache2$ sudo chown www-data.www-data /etc/apache2/.htdigest
8. Apache 사용자 추가
1. 사용자 정보 수정
비밀번호 수정 : htpasswd -m /etc/apache2/dav_svn.passwd 사용자 ID
새 사용자 생성 : htpasswd -c /etc/apache2/dav_svn.passwd 새로운 사용자 ID
2. 재시작
많은 분들이 알고 계시리라 믿습니다만 혹시나 해서 추가합니다.
sudo /etc/init.d/apache2 restart
마지막에 /var/svn 과 /var/trac 폴더에 퍼미션을 주어야 제대로 접속이됨
이걸로 SVN과 Trac을 Apache에 연결시켜서 설정하는 방법 까지 끝났습니다. 이제 남은 것은 TRAC과 SVN을 사용하는 것 뿐이로군요. 실제 접근할 때 필요한 주소들은…
• TRAC: http://<사용하는 웹 주소>/trac
• SVN 저장소: http://<사용하는 웹 주소>/svn/<Project Name>
해서 사용하시면 됩니다. 실제 화면은 직업 확인해 보세요.. ^^
9. SVN 사용법
1. 용어 설명
저장소
리포지토리(Repository)라고도 하며 모든 프로젝트의 프로그램 소스들은 이 저장소 안에 저장이 됩니다. 그리고 소스뿐만이 아니라 소스의 변경 사항도 모두 저장됩니다. 네트워크를 통해서 여러 사람이 접근 할 수 있습니다. 버전 관리 시스템 마다 각각 다른 파일 시스템을 가지고 있으며 Subversion은 Berkeley DB를 사용합니다. 한 프로젝트 마다 하나의 저장소가 필요합니다.
리비전(Revision)
소스 파일등을 수정하여 커밋하게 되면 일정한 규칙에 의해 숫자가 증가 합니다. 저장소에 저장된 각각의 파일 버전이라 할 수 있습니다. Subversion의 경우 파일별로 리비전이 매겨지지 않고 한번 커밋 한 것으로 전체 리비전이 매겨 집니다. 리비전을 보고 프로젝트 진행 상황을 알 수 있습니다.
trunk
단어 자체의 뜻은 본체 부분, 나무줄기, 몸통 등 입니다. 프로젝트에서 가장 중심이 되는 디렉토리입니다. 모든 프로그램 개발 작업은 trunk 디렉토리에서 이루어집니다. 그래서 위의 구조에서 trunk 디렉토리 아래에는 바로 소스들의 파일과 디렉토리가 들어가게 됩니다.
Branches
나무줄기(trunk)에서 뻗어져 나온 나무 가지를 뜻합니다. trunk 디렉토리에서 프로그램을 개발하다 보면 큰 프로젝트에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 생깁니다. 프로젝트안의 작은 프로젝트라고 생각하면 됩니다. branches 디렉토리 안에 또 다른 디렉토리를 두어 그 안에서 개발하게 됩니다.
Tags
tag는 꼬리표라는 뜻을 가지고 있습니다. 이 디렉토리는 프로그램을 개발하면서 정기적으로 릴리즈를 할 때 0.1, 0.2, 1.0 하는 식으로 버전을 붙여 발표하게 되는데 그때그때 발표한 소스를 따로 저장하는 공간입니다. 위에서 보면 tags 디렉토리 아래에는 버전명으로 디렉토리가 만들어져 있습니다.
2. 명령어 의미
Import : svn import sampledir svn+ssh://svn-domain/svn/sample/trunk
맨 처음 프로젝트 시작할때 저장소에 등록하는 명령어 한 번 하고 나면 쓸일이 잘 없을 듯.
Checkout : svn checkout svn+ssh://svn-domain/svn/sample/trunk sample
저장소에서 소스를 받아 오는 명령어. 받아온 소스에는 소스 뿐만이 아니라 버젼관리를 위한 파일도 같이 받아 온다. 지우거나 변경시 저장소와 연결 불가능
Export : svn export svn+ssh://svn-domain/svn/sample2/trunk sample
체크아웃과는 달리 버젼관리 파일을 뺀 순수한 소스만 가져오는 명령어 마지막에 사용.
Commit : svn commit
체크아웃 한 소스를 수정, 파일 추가, 삭제 등을 한 뒤 저장소에 저장하여 갱신 하는 명령어. Revision이 1 증가 한다.
Update : svn update
체크아웃 해서 받은 소스를 최신의 소스로 업데이트 하는 명령어. 소스 수정이나 Commit 하기전에 한 번씩 해줘야 할 듯. 잘 못하면 소스 망치는 경우가 있을 듯.
Log : svn log
저장소에 어떠한 것들이 변경 되었는지 확인 할 수 있는 log 명령어
svn log // 전체 로그 확인
svn log trunk/main/main.c // trunk/main/main.c 로그확인
svn log trunk/memo //trunk/memo 로그 확인
svn log -r 2 // 리버전2 로그 확인
svn log -r 1:3 //리버전 1~3 까지 로그 확인
svn log -r 3:1 // 리버전 3~1 까지 로그 확인
로그 확인시 -v 옵션을 주면 좀더 자세한 정보를 출력하고 -q 옵션은 더 간단히 출력해 준다..
Diff : svn diff --revision 4 sample.c
diff 명령은 예전 소스 파일과 지금의 소스 파일을 비교해 보는 명령어
Blame : svn blame sample.c
Blame은 한 소스파일을 대상으로 각 리비전 대해서 어떤 행을 누가 수정했는지 알아보기 위한 명령어
lock : svn lock hello.c
파일에 락을 걸어 락을 건 사용자만이 수정할 수 있게 해주는 명령어. 해제는 svn unlock.
왜 파일에 락을 걸었는지 로그를 기록 할 수 있다.
Add : svn add hello.c
새 파일을 만들었을 경우에 파일을 추가 해주는 명령어.
그 뒤엔 꼭 svn commit를 꼭 해줘야 한다.
새 파일을 생성해서 올릴 때에도 꼭 add를 해줘야 함. 안해주면 commit을 해도 안 올라감.
Status : svn status
자신이 수정하고 있는 파일의 상태를 알려주는 명령어
Help : svn help
상세 사용법 출력. svn help subcommand 도 가능.
Add : svn add
새로 생성한 파일이나 디렉토리를 저장소에 추가 예약
Mkdir : svn mkdir
디렉토리 새로 생성
Delete : svn delete (del, remove, rm)
파일이나 디렉토리를 삭제 (로컬과 저장소 둘다)
Move : svn move (mv, rename, ren)
파일이나 디렉토리를 이동하거나 이름 변경
Copy : svn copy (cp)
파일이나 디렉토리 복사
3. 파일 백업및 복구
1. dump
sample 저장소를 백업합니다. 표준 입출력을 통해서 저장소의 내용을 파일로 생성합니다. svnadmin dump 명령을 사용하며 이 명령은 저장소 디렉토리 바깥에서 사용해야 합니다.
repos# ls
sample
repos# svnadmin dump sample > sample.dump
2. load
Load 하기 위해선 신규 Repository(sample)를 생성한다.
저장소 백업 파일을 이용해서 저장소를 복구합니다. svnadmin load 명령을 사용합니다.
빈 저장소를 생성한 뒤 백업 파일을 이용해서 복구를 합니다.
repos# svnadmin create sample
repos# ls
sample sample.dump
repos# svnadmin load sample < sample.dump
3. sync
svnsync는 1.4.0에서 새로 생긴 명령입니다. svnsync 명령을 이용해서 저장소를 그대로 복사해 올 수 있습니다. 단 복사해오고자 하는 원본 저장소가 Subversion 1.4 이상을 사용하고 있어야 하며 1.4 이하를 사용하고 있을 경우 svnsync명령이 동작하지 않습니다.
먼저 빈 저장소를 만듭니다.
# cd /home/svn/
/home/svn# svnadmin create syncsample
pre-revprop-change 파일을 실행할 수 있도록 권한을 조정합니다
/home/svn/syncsample/hooks# chmod 777 pre-revprop-change
svnsync를 사용할 수 있도록 저장소를 초기화 합니다. file:///home/svn/syncsample은 방금 만든 빈 저장소 경로이고http://svn.collab.net/repos/svn은 복사해 올 원본 저장소의 주소입니다. http://, svn://등 접속 가능한 저장소 주소이면 되고 trunk나 branches같은 디렉토리가 아닌 최 상위 디렉토리의 주소로 설정해줘야 합니다.
/home/svn# svnsync init file:///home/svn/syncsample http://svn.collab.net/repos/svn
Copied properties for revision 0.
이제 저장소를 복사를 시작합니다.
/home/svn# svnsync sync file:///home/svn/syncsample
Committed revision 1.
Copied properties for revision 1.
Committed revision 2.
Copied properties for revision 2.
Committed revision 3.
Copied properties for revision 3.
Committed revision 4.
Copied properties for revision 4.
Committed revision 5.
Copied properties for revision 5.
Committed revision 6.
Copied properties for revision 6.
....
최신 리비전 까지 복사해오면 svnsync 명령이 끝난 것입니다.
이제 이 저장소에서 소스를 체크아웃 하여 살펴볼 수 있습니다.
5. Svnserve에서 ID로 사용자 인증
Subversion 0.33.0버전 이후부터 svnserve로 ID로 사용자 인증이 가능하게 되었습니다. 그 이전 버전에서 svnadmin으로 저장소를 만들면 저장소 디렉토리 아래에 conf 디렉토리가 생기지 않지만 0.33.0 버전이후에 svnadmin으로 저장소를 만들었다면 저장소 디렉토리 아래에 conf 디렉토리가 자동으로 생성됩니다. 이전 버전에서 먼저 저장소를 만들어 두었다면 저장소 디렉토리 /home/svn/sample 아래 conf 디렉토리를 만들어 줍니다. (/home/svn/sample/conf)
이제 각 저장소 디렉토리 아래 conf 디렉토리가 있습니다. /home/svn/sample/conf/svnserve.conf 파일이 svnserve의 설정 파일입니다. 0.33.0 버전 이전 만든 저장소에는 conf 디렉토리 및 svnserve.conf 파일이 없습니다. 그럴 경우에는 conf 디렉토리와 svnserve.conf 파일을 만들어 주면 됩니다.
svnserve.conf 파일을 아래와 같이 설정 합니다.
### 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.)
### Visit http://subversion.tigris.org/ for more information.
[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
### 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.
### The format of the password database is similar to this file.
### It contains one section labelled [users]. The name and
### password for each user follow, one account per line. The
### format is
### USERNAME = PASSWORD
### Please note that both the user name and password are case
### sensitive. There is no default for the password file.
password-db = passwd
### 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 = pyrasis's Repository
anon-access = none으로 아무에게나(Anonymous) 저장소에 접근하는 것을 막았습니다. read로 하면 읽기만 가능하며 write로 해주면 읽고 쓰기가 가능해집니다.
auth-access = write는 ID로 인증된 사용자에게 쓰기 권한을 주는 것입니다.
password-db = passwd 이 설정은 svnserve의 패스워드 파일입니다 이전의 Apache 패스워드 파일과는 별개입니다. 아래 내용으로 /home/svn/sample/conf 아래 passwd 라는 이름으로 만듭니다. ID = 패스워드 형식 입니다. 아직 암호화된 패스워드는 지원하지 않는 것 같습니다. 버전 업을 통해 개선 될 것 같습니다.
passwd
[users]
sampleuser = 02030104[출처] SVN 서버 구축 & Trac 설치방법 및 사용법|작성자 미니187
Putty를 통해 Amazon AWS Windows에서 접속
http://jmkook77.blogspot.kr/2012/01/putty.html
아마존 서버 생성시 다운받은 pem 파일을 이용하여 ssh/sftp 접속하는 방법
1. putty 를 다운받습니다.
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
여기에서 putty<version>-installer.exe 를 받으세요.
혹은, putty.exe, psftp.exe, puttygen.exe, pageant.exe 를 따로 설치하셔도 됩니다.
puttygen.exe 는 pem 파일을 putty에서 사용가능하게 변경하며
pageant.exe 는 pem 파일을 통해 putty, psftp 가 서버에 접속 가능하게 해줍니다.
2. pem 파일 변환
1) puttygen.exe 를 실행하면 아래와 같은 화면이 뜹니다. 상단의 Conversions / Import Key 를 선택합니다.
2) 해당 서버에 접속하기 위한 pem파일을 선택합니다.
3) 아래와 같이 정상적으로 로드가 된것을 확인할 수 있습니다.
이제 하단 우측에 있는 Save private key 를 선택하고 Yes 를 선택합니다.
4) 원하는 위치에 파일명을 설정하여 ppk 파일을 저장합니다. ppk 파일 생성 완료!!
2. Pageant.exe 를 실행하면 아래와 같이 윈도우 우측 하단에 트레이로 추가된것을 확인할 수 있습니다. 이녀석은 항상 저곳에 있어야만 합니다.
2) 위에서 저장한 ppk 파일을 선택해줍니다.
3) 아래와 같이 정상적으로 추가된것을 확인할수 있습니다. 이제 해당 창을 닫습니다.
2) 최초 접속시 해당 얼럿이 뜰겁니다. Yes 를 누릅니다.
4. Psftp.exe 를 실행합니다. ( 당연히 이놈도 Pageant 가 실행되어있어야 겠죠? )
역시 계정에 root 를 입력하여 정상 접속되는 것을 확인할 수 있습니다.
기념으로 이미지하나는 드래그하여 put 해봅니다.
끝!!
WM_INPUT 메시지 핸들링
종료할 때 EndEventCapture() 호출
StartEventCapture() 호출하면 WM_INPUT 메시지가 발생함
GetRawInputData를 사용해서 키보드, 마우스 이벤트를 가져오면 됨.
void StartEventCapture() { RAWINPUTDEVICE rawInputDev[2]; ZeroMemory(rawInputDev, sizeof(RAWINPUTDEVICE)*2); // 키보드 RAWINPUTDEVICE 구조체 설정 rawInputDev[0].usUsagePage = 0x01; rawInputDev[0].usUsage = 0x06; rawInputDev[0].dwFlags = RIDEV_INPUTSINK; rawInputDev[0].hwndTarget = GetSafeHwnd(); //마우스 RAWINPUTDEVICE 구조체 설정 rawInputDev[1].usUsagePage = 0x01; rawInputDev[1].usUsage = 0x02; rawInputDev[1].dwFlags = RIDEV_INPUTSINK; rawInputDev[1].hwndTarget = GetSafeHwnd(); if( FALSE == RegisterRawInputDevices(rawInputDev, 2, sizeof(RAWINPUTDEVICE)) ) { CString str; str.Format(_T("RegisterRawInputDevices Error %d"), GetLastError()); MessageBox(str); } } void EndEventCapture() { RAWINPUTDEVICE rawInputDev[2]; ZeroMemory(rawInputDev, sizeof(RAWINPUTDEVICE)*2); // 키보드 RAWINPUTDEVICE 구조체 설정 rawInputDev[0].usUsagePage = 0x01; rawInputDev[0].usUsage = 0x06; rawInputDev[0].dwFlags = RIDEV_REMOVE;// <== 이부분이 틀림 rawInputDev[0].hwndTarget = GetSafeHwnd(); //마우스 RAWINPUTDEVICE 구조체 설정 rawInputDev[1].usUsagePage = 0x01; rawInputDev[1].usUsage = 0x02; rawInputDev[1].dwFlags = RIDEV_REMOVE;// <== 이부분이 틀림 rawInputDev[1].hwndTarget = GetSafeHwnd(); if( FALSE == RegisterRawInputDevices(rawInputDev, 2, sizeof(RAWINPUTDEVICE)) ) { CString str; str.Format(_T("RegisterRawInputDevices Error %d"), GetLastError()); MessageBox(str); } } LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다. if( message == WM_INPUT ) { UINT dwSize = 40; static BYTE lpb[40]; GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)); RAWINPUT* raw = (RAWINPUT*)lpb; if( raw->header.dwType == RIM_TYPEMOUSE ) { int xPosRelative = raw->data.mouse.lLastX; int yPosRelative = raw->data.mouse.lLastY; if( raw->data.mouse.ulButtons == 0 ) // move { InvalidateRect(CRect(0,50,150,100)); } else if( raw->data.mouse.ulButtons == 1 /*|| m_bLbuttonDragging*/ ) // l-button down { } else if( raw->data.mouse.ulButtons == 2 ) // l-button up { } else if( raw->data.mouse.ulButtons == 4 ) // r-button down { } else if( raw->data.mouse.ulButtons == 8 ) // r-button down { } else { } } if( raw->header.dwType == RIM_TYPEKEYBOARD ) { CString str; str.Format( _T(" Kbd: make=%04x Flags:%04x Reserved:%04x ExtraInformation:%08x, msg=%04x VK=%04x \n"), raw->data.keyboard.MakeCode, raw->data.keyboard.Flags, raw->data.keyboard.Reserved, raw->data.keyboard.ExtraInformation, raw->data.keyboard.Message, raw->data.keyboard.VKey); MSG msg; memset( &msg, 0, sizeof(MSG) ); msg.hwnd = m_hWnd; msg.message = raw->data.keyboard.Message; msg.wParam = raw->data.keyboard.VKey; // KeyMessageProcessing( &msg ); OutputDebugString( str ); } } return CDialog::WindowProc(message, wParam, lParam); }
[엑셀함수] INDIRECT, TRUNC, ROW, CONCATENATE, CHAR
주소값 참조
=INDIRECT("a"&TRUNC(ROW()/2)+1)
INDIRECT : 주소 지정
TRUNC : 소수점 이하 버림
ROW : 행번호 반환
개행문자
=CONCATENATE("A",CHAR(10),"B")
http://blog.naver.com/PostView.nhn?blogId=syhjjang1&logNo=150160913001
아웃룩 실행 오류 해결
"Microsoft Office Outlook을 시작할 수 없습니다. Outlook 창을 열 수 없습니다. XML이 잘못되어 보기를 로드할 수 없습니다."
요런 메시지가 발생했을 때
CMD에서 다음과 같이 입력
outlook /resetnavpane
로봇 다빈치, 꿈을 설계하다
로봇 다빈치, 꿈을 설계하다
데니스 홍 저
나는 결코 천재가 아니다
나는 내 꿈을 설계했을 뿐이다!
로봇 다빈치, 꿈을 설계하다
세계 각국 천재들이 지식 경연을 벌이는 ‘TED 2011 컨퍼런스’에 한국인 최초로 홍원서 버지니아 공대 교수가 강연자로 나섰다. 그는 미국 <파퓰러 사이언스>가 과학계를 뒤흔드는 젊은 천재 10인으로 뽑은 천재 로봇 공학자이다. 또한 그는 2009년에는 앞을 보지 못해도 운전할 수 있는 시각장애인용 자동차 개발에 성공했다. 보다 나은 미래를 위해 연구하는 젊은 과학자로 우뚝 서게 된 것...
RoMeLa 연구소를 이끄는 미국 버지니아텍 데니스 홍 교수의
이야기입니다.
저는 세바시 강연을 통해 데니스 홍 교수를 알게됐고 책까지 사서 보게 되었습니다.
이 책은 시각 장애인용 자동차의
개발과정, 영화 스타워즈를 보고 로봇공학자가 되기로 결심한 이야기, 유년/청소년 시절, RoMeLa에서 만든 로봇들에 대한 이야기, 교수로서의
이야기와 로봇에 대한 윤리적 고찰 등 여러가지 이야기로 엮어져있습니다.
이 책을 통해 다수의 이야기를 통해 데니스 홍 교수의
살아가는 방식, 삶의 철학과 추구하는 바에 대해 간접적으로 알 수가 있었는데요,
먼저 데니스 홍 교수는 뚜렷한 목표 의식이 있었습니다.
스타워즈를 보고 결정한 로봇공학자라는 큰 목표와 더불어 꿈을 이뤄가는 그 과정에서의 작은 목표들을 하나 하나 이뤄갔습니다. 어렸을 적 '전국
어린이 과학실험대회'에서 금상타기, 대학가기(현실에 실망했지만..), 교수되기, 연구비 모으기, 여러 프로젝트 및 TED 등. 목표를 이뤄가다
보니 다른 목표도 생기고 또 그 과정에서 배우고 성장하는 모습이었습니다. 또한 목표가 뚜렷하다보니 목표와 관련된 학문에 저절로 관심이 생기고
동기부여가 되며 그래서 즐겁게 공부하고 일할 수 있었던거 같습니다. 데니스 홍 교수도 책에서 '동기 부여'에 대한 중요성을 강조하고
있습니다.
또한 좋은 습관의 필요성을 느꼈습니다. '왜?'와 메모! 데니스 홍 교수는 무엇이든 허투루 보고 지나가는 것이
없었습니다. 어렸을 때 가전제품을 다 뜯어봐야했고 과학실험에 매진할 수 있었던 이유는 사물에 대한 호기심 때문이었습니다. '왜'라는 질문을 항상
하면서 사는것 같습니다. 또한 메모하는 습관이 있어서 과거의 메모를 통해 insight를 얻는 경우도 있다고 했습니다. 스트라이더에 대한
아이디어도 과거의 메모에서 아이디어를 얻었죠.
마지막으로 '세상을 이롭게 하자'는 마인드입니다. 시각 장애인용 자동차, 오픈소스
다윈-OP, 재난 구조용 로봇 '토르'. 자신만의 유익을 구하지 않고 약자를 위한 기술, 생명을 위한 기술 또한 기술의 나눔을 통해 단순히
돈만을 버는 것이 아닌 그것을 넘어서는 기쁨과 과학자로서의 자부심을 느끼는 것 같습니다.
내용이 어렵지 않고 재미있어서 술술 읽었던
책이었습니다.
책과 더불어 아래 링크의 세바시 강연을 추천합니다.
세바시 260회 휴머노이드 : 축구선수에서 구조대까지@ 데니스홍 RoMeLa 소장
글로벌 소프트웨어를 꿈꾸다
글로벌 소프트웨어를 꿈꾸다
김익환 저
이 책은 실리콘밸리의 소프트웨어 회사와 국내 소프트웨어 회사의 차이점이 무엇인지 살펴보고, 그 차이점을 일으키는 것이 무엇인가에 대하여 이야기 하고 있다. 저자는 그것이 지식과 기술보다는 바로 '개발문화, 기업문화'에 있다고 말한다. 이 책에서는 세계 수준에 근접한 기술과 기법은 그에 걸맞은 균형 잡힌 사고와 문화 수준이 어우러질 때 극대화될 수 있다는 것을 극명하게 보여주고 있다. 따라서 이 책에서는 우리나라의 소프트웨어 회사가 어떻게 소프트웨어 회사로 성장할 수 있을 것인지 그 필요한 사항들을 세심히 짚어준다. 이 책은 특히...
이 책은 저자의 경험을 바탕으로하여 소프트웨어 회사의 경영진 및 실무진의 역할 및 나아가야할 방향에 대한 노하우가 담겨있다. 저자는 소프트웨어 회사가 성공하기 위한 다섯 가지 조건으로 기반시스템, 조직, 프로세스, 기술 및 문화를 제시하고, 또한 경영진의 통찰력의 중요성을 강조한다.
몇 가지 기억에 남는 내용들을 아래 적어보자면,
이슈관리시스템, 소스관리시스템으로 대표되는 기반시스템은 곧 업무의 효율성으로 이어진다.
CTO는 기술적인 면에서 가장 권위가 있어야 하는데 국내 회사는 그렇지 못한 곳이 많으며, 국내에선 어느 정도 경력이 쌓이면 관리자가 되는데 이는 기술에서 필연적으로 멀어지며 이러한 관리자가 기술적인 면을 판단하는 일은 없어야 된다.
프로세스의 효과를 얘기하면서도,기업문화가 잘 정착되어 있지 않으면 아무리 좋은 문서화, 프로세스, 시스템이 있어도 효과적으로 돌아가지 않는다.
소프트웨어 공학은 양날의 칼이다. 잘 적용하면 좋은 약이 되지만 잘 못 적용하면 극약과 같다. 주먹구구식으로 개발하면서 소프트웨어 공학에서 언급하는 문서글 추가로 만드는 방식이라면 이는 극약으로 쓰는 것이다. CMMI와 같은 프로세스도 잘 쓰면 명약이지만 제대로 적용할 수 있는 환경이 안 된 곳에서는 극약과 같은 상황이 벌어진다.
비싼 도구가 개발을 도와주지 않는다.
컨퍼런스에 참여해라. 이미 인터넷에 있는 정보는 세상 모든 사람이 다 아는 정보다. 프레스 컨퍼런스, BOF세션(P2P세션) 또는 저녁식사를 통해 엔지니어와 교류해라(여기서 영어회화가 필요하다는...).
기업문화라고 하면 간단히 말해 일을 할 때 내 의지와는 상관없이 의식적으로 혹은 무의식적으로 따라할 수 밖에 없는 환경이라고 할 수 있다. 국내 소프트웨어 회사에 가장 부족한 것이 기업문화이다. 예를 들어, 제품 개발이 막바지에 이르렀는데 사장님이 와서 보고는 어떤 부분이 마음에 안 드니 고치라고 한다거나...
일정강요는 소프트웨어 회사의 재앙의 근원 중 첫째가는 것이다. 일정준수율과 같은 KPI(Key Performance Index) 때문에 일정을 지키기 위해 품질은 뒷전이 된다. 프로세스 관점의 평가지수가 효과적인다.
이 외에도 갖가지 주제로 국내 소프트웨어 회사에 부족한 점들을 펼쳐놓았다. 읽어보며 많이 공감가는 부분들도 있었다. SW 엔지니어라면 읽어볼만한 책이다.
The ART of SOFTWARE TESTING
The Art of Software Testing (Second Edition) 한국어판
글렌포드 마이어스 저 / 톰 뱃지트, 토드 토마스, 코리 샌들러 공편 / 이공선, 권원일 공역
글렌포드 J. 마이어스가 쓴 이 책은 소프트웨어 테스팅 분야에서 한 획을 그은 진정한 명서이며 고전이다. 테스팅에 대한 일반적인 내용을 개발과 연계해 최근 출간된 그 어떤 책보다 오히려 더 체계적이고 설득력 있게 소개한다. 또한 인터넷 애플리케이션 테스팅, 익스트림 테스팅 등 테스팅의 최신 내용도 같은 맥락에서 다뤄 30여 년 전에 저자가 정립한 테스팅 이론의 탁월성과 적용성을 입증하고 있다. 이 책은 소프트웨어 테스트 엔지니어만을 위한 것은 아니다. IT 전문가라면 누구나 한 번은 읽어야 할, 글자 그대로 소프트웨어 테스팅의 ...
저자 : 글렌포드 마이어스
목차
1장 자체평가
테스트
2장 프로그램 테스팅의 심리학과 경제학
3장 프로그램 인스펙션과 워크스루, 리뷰
4장
테스트 케이스 설계
5장 모듈 테스팅
6장 고수준 테스팅
7장
디버깅
8장 익스트림 테스팅
SW 테스팅이라는 이슈는 최근들어 그 중요성이 부각되고 있는거
같습니다.
이전까지는 SW 테스팅이라는 분야에 대해 잘 몰랐는데 교육과 더불어 이 책을 통해 그 중요성과 방법을 알게
되었습니다.
2장의 내용이 꽤나 재밌는데요
테스팅과 심리학/경제학은 무슨 상관이 있을까요?
내용의 시작점에서 테스팅의
정의를 내리고 진행됩니다.
"테스팅은 에러를 찾기 위해 프로그램을 실행하는
프로세스다."
심리적인 면에서 테스팅은 누가 해야되며 어떠한 마음가짐으로 임해야 되는지 알려주고
있습니다.
경제적인 면에서는 무작 테스팅을 하는 것이 아니라 전략(블랙박스/화이트박스 테스트)을 가지고 임해야 되는 이유를 알려주고
있습니다.
이후의 내용으로 테스팅의 방법에 대해
기술합니다.
아래 내용에 해당되시는 분들 추천합니다.
SW 테스팅이 왜 필요한지 알고 싶은분
정적/동적 테스트가
무엇이고 알고 싶은분
테스트 케이스 설계방법을 알고 싶은분
자주보던 단계별 개발계획(V모델)에서의 테스트를 어떻게 해야되는지 알고
싶은분