요즘은 개발및 관리도구들의 퓨전과 통합이 대세인듯하다.

현재 사용중은 trac 0.10.4 버전이 오픈소스라 좋긴 한데, 문제는 설치가 좀 까탈스럽고 eclipse의 mylyn과의 통합에서 bugzilla, jira등에 비해서 부족한 부분이 있는게 약간의 불만이긴하다.
물론 trac 0.11 버전은 많이 좋아졌다고는 하나, 현재 사용중인 trac의 버전업을 하려니, 아주 많이 부담이 되기 때문에 쉽게 업그래이드 결정은 못하고 있던차에, jira를 다시 한번 살펴보았다.

사용이라 좋긴한데, 이것역시  wiki는 별도로 있어야 하는 문제가 있고, 좀 있으면 jira studio가 나온다고 하니 좀 기다렸다가 jira studio로 옮겨가는 것을 고려해봐야겠다.

trac 설치문서 http://eahn.tistory.com/12

trac http://trac.edgewall.org/
한글 http://kldp.net/projects/trac-ko/

jira http://www.atlassian.com/
jira studio http://www.jira.com/

이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback Address :: http://eahn.tistory.com/trackback/25 관련글 쓰기

댓글을 달아 주세요

trac을 잘 사용하고 있는데, 소스의 내용에서 한글이 있을 경우 깨져 보이는 것을 아래와 같이 해결했다.

먼저 운영환경은 아래와 같다.
클라이언트 : windows xp, eclispe 3.3
trac서버    : windows server
trac          : trac-ko 0.10.4

trac.ini 파일의 아래쪽에
default_charset = iso-8859-15 이분을 default_charset = MS949 이렇게 변경한다.

eclipse의 파일 properties에 test file encoding을 참조로 입력해도 되는데, euc_kr은 ms949로 해도 잘보이는군요

도움이 되는분이 있을려나??

이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback Address :: http://eahn.tistory.com/trackback/23 관련글 쓰기

댓글을 달아 주세요

  1. 변방개발자 2009/04/15 19:02 Address Modify/Delete Reply

    도움이 되었습니다. 감사합니다. ^^

맥킨토시 해킨토시 ?

osx 2008/02/03 00:08 |
예전부터 맥은 동경의 대상이었던 시절이 있었는데, pc의 C:\> 딸랑 이것만 보다가 처음 본 맥의 화면은 환상적이었고, 범접할 수 없을것 같았다.
실제로 그랬다
그러나 세월은 흘러흘러~~ 언제부터인가 tiger가 많이 들리길래 확인해보니 intel cpu를 사용한 mac 판매되어 여기에 사용된 os의 이름이 tiger라는 것을 알게되었다. 버전번호는 tiger(10.4.x), leopard(10.5.x)

여기저기 헤메다 찾은 이미지를 집에 있는 PC에 설치하려고 삽을 들었으나, PIII(700Mhz)에는 불가능한것을 포맷한 이후에 알았으니, 어쩌랴 날린것을 에혀...
다시 업무용 노트북에다 덜렁 설치를 해보았는데, 네트웍, 사운드 빼고 설치는 했는데, 처음이라 그런지 적응이 잘안되어 포기를 하고 말았다.
그러다 최근 몇달전에 leopard가 나왔다는 소식에 과감히 PC를 하나 조립하게된다, leopard를 위해서...
CPU E2140
보드 Intel 945gcl 미니 RAM 2G
HDD 160G Sata
ODD LG DVD Sata
미니케이스, 파워, 기타등등.....
나머지는 있는거 그냥쓰기로 하고 조립을 하고 예전에 사용하던 IDE HDD에는 windows xp를 설치이미 되었었고, 신규로 구입한 HDD에 GUID로 파티션잡고 설치가 잘되어 좋아했으나....이제 삽질의 시작일줄이야.....

가장 중요한 lan카드가 오락가락해서 리얼텍 8139하나 끼워주니 일사천리군요...사운드도 드라이버 구해서 설치해주니 모든게 완성이 되었다....휴....대략 4주정도....퇴근후 짬짬이, 주말에 삽질 이렇게해서 결국은 leopard를 사용하게 되었습니다.

게임을 안하니, 윈도우가 필요없긴지 하지만 사용중인 ls-30 필름스캐너가 scsi방식이라 사용중인 2940카드를 leopard에서 지원을 안해주니 할 수 없이 windows를 가끔은 사용하는 관계로..
예전에 linux를 처음 사용할때와는 전혀 다르군요 안정된 시스템환경에서 msoffice 2008도 사용가능하다.

사용자 삽입 이미지


windows를 싫어하는 것은 아니지만, IT적인 부분을 좋아하다보니 osx를 사용하고 싶을뿐이다.
이러한것을 가능하게 해준 많은 해커와 도음을 주신분들께 감사하며....

예전에 os/2 ibm에서 만든건데 정말로 좋았었던것 같다. windows ms word 2.0으로 두꺼문 교재를 만든적이 있는데 windows에서는 죽는데 os/2에서는 아무 이상도 없이 잘 사용이 되었었다. 아마도 이러한 기억으로 인해 osx를 좋아하게 된것 같다.
1994년경으로 기억된다. 다름 프로그램에서 화면 캡쳐하고 워드에 붙이고 이러한 작업에서 os/2를 사용하지 않았다면 상당히 힘든작업이 되었을것이다..

나중엔 진짜 맥을 사고싶다.
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback Address :: http://eahn.tistory.com/trackback/22 관련글 쓰기

  1. Subject: EP45-UD3R + BOOT-132 + 순정 Leopard Retail DVD 이미지

    Tracked from Ritz's Home 2009/03/11 18:42  Delete

    EP45-UD3R은 호환성이 ASUS P5W DH DELUXE보다 10.5.6에서 호환성이 아주 뛰어납니다. 설치 방법은 BOOT-132 용 USB Memory Stick에 Boot-132용 부트로더를 설치한다. 10.5.6 Retail DVD로 바로 설치하시던가 아니면 맥북이 있으시면 맥북에서 10.5.6 이미지를 이용하여 외장형 하드디스크에 순정 10.5.6을 GUID 파티션을 주고 설치한다. 외장형 하드디스크를 EP45-UD3R에 USB 외장형..

댓글을 달아 주세요

  1. 수상한사람 2008/02/03 02:05 Address Modify/Delete Reply

    Install 에 만족하지 마시고,
    OSX 를 한번 만끽해보세요,,
    좋은 프로그램도 엄청나게 많습니다,, 라고 말하고 싶지만,,
    벌써, 포토샵도 깔고, XCode, iWork 등도 까셨네요,,
    그래도 아직도 안깔으신 유틸이 많으리라 생각이듭니다,,

    한번 보물찾기를 해보시죠,,ㅎㅎ

대략 10여년을 사용해온 17인치 삼성모니터를 더이상 사용하기 어려워 lcd모니터를 구입하기로 마음먹고 삽질을 하였다.

첫째로 구입한 제품은 g마켓에서 저렴한것으로 24인치를 구입했으나, 파워불량(사용중에 찌찌찍...타는냄새가)으로 반품하고 용산으로 달려가서 이 제품을 구입하게 되었다.

해상도 : 1920 * 1200
밝기 : 500cd
명암비 : 800:1
피벗 : OK
스피커 : 5W
D-sub : OK
DVI : OK
컴포지트 : OK
패널 : LG S-IPS
HDMI는 별도의 케이블이 필요한것이 흠이라면 흠인데, 이건 사용할일이 없을거같고 피봇도 되는데, 이것도 사용할일이 없을거같다.
광시야각이라 상하좌우 매우 좋아서 TN패널과는 비교가 불가능하다.
2채널의 스피커보다는 외장형을 따로 사용하는게 좋을것 같군요

이기종과 동일한 기종인데 (Z)는 무결점인것만 틀리네...

일단화면이 얼마나 넓은지 한번보자
사용자 삽입 이미지

예전에 사용하던 17인치의 1280의 해상도를 보다 이것보니 도리도리를 해야되어 목이 아프다

이러한 화면이 좁다고 생각되면 leopard에 있는 space를 이용하면 이런화면이 4개가 나온다
사용자 삽입 이미지

오른쪽 윗부분은 패러렐즈을 이용하여 leopard내에서 xp를 올려놓은 것인데, 게임을 해본적이 없지만 일반적인 사용은 다 가능하다. 왼쪽 아래는 포토샵이고, 오른쪽 아래는 라이트룸을 올려놓은 공간인데 4개뿐만이 아니라 확장도 가능하다. 각 공간의 이동은 마우스나, 키보드로 가능하다.

참고로, leopard사용하기 위해서 삽질을 좀 많이 했지만, 아주~~ 만족합니다.

한줄요약 : 질러라.
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback Address :: http://eahn.tistory.com/trackback/21 관련글 쓰기

댓글을 달아 주세요

배포는 자유이나, 수정금지
작성자:박남준(criticlbug@gmail.com)
작성일:2007.8.24

오래전부터 사용해왔고, 요즘은 아주 가끔 사용하는 visual c 6.0이 있는데, 요즘엔 1년에 몇번 쓸까 말까하고 기껏해야 java에서 사용하는 dll을 만드는 용도로 사용하다 보니, gcc를 사용하면 어떨까 싶어서 gclipse와 gcc를 고려하게 되었다. 나중에 unix로의 이전을 생각하고 있는것도 이유이기도 하지만, os 종속 탈피??

먼저 eclipse(http://www.eclipse.org)는 3.3  europa를 설치한뒤에 CDT를 추가설치를 하였다. 그리고 gcc 설치를 위해서 mingw(http://www.mingw.org/)를 다운받아 설치하였다. 처음 받는 사람은 좀 어려울 수 있겠다. 다운로드에 보면 소스포지에 연결되어 있는데 여기서 Automated MinGW Installer만 받아서 설치하면 필요한 파일을 자동으로 받아서 설치해준다. 설치후에는 환경변수 path에 설치된 mingw의 bin 경로를 추가해준다. 다만 여기서 디버거는 설치해주지 않으므로 별도로 받아서 덮어쓰면 된다. 받을 파일은 GNU Source-Level Debugger이다.

이제 기본준비는 되었으며, java파일을 하나 만들고 gcc로 dll을 만들어서 사용해보자

1단계 java 프로젝트 생성
java프로젝트를 hello라고 하나 만든다. Hello.java 파일을 생성하고 Hello, World를 출력하는 코드를 만들어보자.

사용자 삽입 이미지

오래전에 C만든 사람이 쓴 책에 있는 그 유명한 Hello, World 되겠다. 그러면 여기서 native코드를 호출하는 class를 하나 만들어보자, 아래쪽에 native Hello, World가 보이는가, 이것이 목표이다.
사용자 삽입 이미지

클래스내에 메소드를 선언할 때 native요거 들어간게 중요한거다, 이게 있어야 native를 사용할 수 있으며, static으로 정의되어 있는 내용은 class가 로딩될때 한번만 로딩하게 된다는 것이다. 이제 기본적인 것은 만들어 졌으니, C프로젝트를 시작할 준비를 해보자.

이제 C에서 사용되는 헤더파일을 작성해야 한다. 먼저 cmd창을 하나 열어서 hello 프로젝트가 있는 곳으로 가서 아래와 같이 한번 해보자..
D:\project\java\gcc\hello\bin>javah -jni com.HelloWorld
Exception in thread "main" java.lang.ClassFormatError: The major.minor version '
49.0' is too recent for this tool to understand.

이런 당황스러운 환경이 된다면 컴파일된 java와 현재의 java의 버전이 안맞아서 그런것이다. 해결방법은 ? eclipse에서 지정된 jdk와 맞는 javah를 사용하면 된다.
현재 사용할  JDK의 버전에 맞는지 eclipse에서 확인하고 지정한다. PC에 1.4와 1.5 개의 버전이 있어 발생하는 문제이니, 1.5만 설치된 사용자는 아래의 그림처럼 자바 1.5 라이브러리만 지정하면 된다.

사용하는 자바를 1.5에 설정을 한다.
사용자 삽입 이미지

만약에 jdk가 아니고 jre로 되어있다면 반드시 edit 버튼을 클릭해서 jdk를 추가하고 선택한다.
사용자 삽입 이미지

그리고나서 정확한 jdk가 설치된 경로를 지정해서 아래와 같이 한다.
D:\project\java\gcc\hello\bin>c:\java\jdk1.5.0_10\bin\javah -jni com.HelloWorld

이제 헤더파일이 하나 만들어지는데 내용은 매우 단순하다. 그리고 나중에서 익숙해지면 javah를 사용하지 않고 그냥 만들어도 된다.

사용자 삽입 이미지

C/C++을 사용하신 분들은 친숙한 내용들이다.  이제 헤더파일이 만들어 졌으니 C프로젝트를 시작해보자.

사용자 삽입 이미지

C프로젝트를 선택하고 아래와 같이 지정한다.
사용자 삽입 이미지
project types에서 Shared Library을 선택하고, Toolchain에서는 MinGW를 선택하자.

이제 기본적인 준비는 되었으니, C코드를 만들어 보자, 먼저 앞서 정의한 com_HelloWorld.h파일을 src폴더를 하나 만든후에 C프로젝트로 복사한다. 파일이 많아지면 폴더를 구분하지만 여기서는 그냥 한곳에 작성한다.
사용자 삽입 이미지

이제 C함수를 하나 만들어보자.
사용자 삽입 이미지

정석대로 빌드를 하려면 makefile을 만들어서 해야하는데, makefile을 eclipse에서 간단하게 만들어보자.
사용자 삽입 이미지

Target Name: nativeHelloWorld
그리고 create 버튼을 눌러서 makefile을 생성한다. 나머지는 통과.
메뉴에서 windows/preferences.../Make/make targets view를 꺼내 본다.

사용자 삽입 이미지

make를 할 수 있는 화면이 아래와 같이 나온다.
사용자 삽입 이미지
컴파일을 한번 해보자. 큰 기대는 하지말고...

사용자 삽입 이미지

에러가 우수수 나와야 정상이다. 에러가 발생하는 원인은 include, library가 포함되지 않아서 발생하는 문제인데 이것을 추가해보자.
java의 native와 관련된 헤더파일의 위치를 지정한다.
사용자 삽입 이미지

java native library 위치를 지정한다.
사용자 삽입 이미지

환경 설정이 끝났으면, 다시 build를 해보자. 음, 또 에러가 발생했다. 여기까지 똑같이 따라서 했으면 눈썰미 있는분은 알겠지만 정작 필요한 헤더 파일이 include되지 않아서 발생하는 문제이다.
사용자 삽입 이미지

이상이 없다면 위와 같이 정상적으로 컴파일과, 링크가 되어서 libsharedLibrary.dll이라는 파일이 만들어 졌음을 알 수 있다, 상세한 내용은 Debug 부분을 보기 바란다. 안보이면 refresh를 하면 보인다. 지금까지 오다보니, java class 이름에 오타가 있는것을 발견했는데, 이해해주기 바란다.

여기서 유의할 사항이 하나 있는데, dll파일의 이름에 lib이라는 것이 추가되어 있는데, unix계열에서는 lib를 붙이는 것이 일반적이다. 이것은 프로젝트 속성에서 변경이 가능하다. 이름이 변경이 되면 호출하는 곳도 변경을 해줘야 한다.이제 NativeHeloWorld를 실행해보면 이런 에러가 나올 것이다.
ava.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: libsharedLibrary
 at java.lang.Runtime.load0(Runtime.java:766)
 at java.lang.System.load(System.java:968)
 at com.NativeHeloWorld.<clinit>(NativeHeloWorld.java:5)
Exception in thread "main"

libsharedLibrary를 로드 할 수 없다는 메세지인데, 이 문제를 해결하려면 windows\system32에 복사하거나, java 폴더에 복사하는 방법이 있는데, 이런방법 보다는 실행할때 옵션을 주어서 찾는 방법을 사용해보자.
hello 프로젝트의 실행환경 설정에서  Run Dialog에서 아래와 같이 shared library파일이 있는 경로는 지정한다.
사용자 삽입 이미지

다시 한번 Hello를 실행해보자, 역시 에러다....
java.lang.UnsatisfiedLinkError: helloworld
    at com.HelloWorld.helloworld(Native Method)
    at com.Hello.main(Hello.java:8)

여기서 visual c로 만들었던 것과 비교를 해보니...함수명에 "_가 틀린것을 찾았는데, 아주 오래전에 이게 어떤 차이가 있다고 들은 기억이 있는데, C안쓴지 너무 오래되어 지금은 모르겠다, 아시면 알려주시라. 그래서 C함수명을 아래와 같이 수정했다.
Java_com_HelloWorld_helloworld ==>_Java_com_HelloWorld_helloworld
헤더파일도 함께 수정해줘야한다. 그리고 다시 빌드해서 이상이 없으면 NativeHeloWorld을 실행해보자

 native Hello, World.

와우....나왔다.....그러나 이제 시작이다. 사용된 함수는 리턴값도 없고, java에서 c로 전달되는 값도없고 갈길이 멀다. 그러나, 이런 기초가 없으면 더이살 갈수도 없다.

여기까지가 windows환경에서 gcc와 java를 이용한 native의 기초가 되겠다. 이번 주말에는 osx에서 한번 해봐야겠다. 글과 그림으로 표현하는거 특히 웹에서 작성하는거 너무 어렵다. 에혀~~

소스는 첨부:



다음엔, 리턴값을 같는 함수를 만들어 볼까하는데, 언제 할런지는 모르겠고....

이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback Address :: http://eahn.tistory.com/trackback/19 관련글 쓰기

댓글을 달아 주세요

  1. dasomoli 2008/06/01 04:46 Address Modify/Delete Reply

    JNI 이용 구현에 참고하였습니다. 감사합니다.

  2. zzuguli 2009/04/09 12:08 Address Modify/Delete Reply

    좋은 글 감사합니다.

osx 설치를 하다....

osx 2007/08/19 21:26 |
2000년에 구입한 펜티엄을 멀리하고, 대신할 PC를 하나 조립했는데 집에서 사용하는거라, 최대한 저렴하게 준비를 했다...
CPU : dual core 2140
RAM : 1G
HDD : 80G
메인보드: intel 945gcl
그래픽 : gma 950 보드내장
사운드 : sigmatel 9220

osx 10.4.9 myzar 버전 설치를 위해, windows xp를 싹 날려버리고 다시 6G만 파티션으로 잡고 xp를 설치했다. xp를 먼저 설치하는 이유는 xp는 부팅을 다른건 용납하지 않기 때문이다.
그래서 xp를 먼저 설치하고, osx를 설치하는데 쉬운게 없더군...

해상도 1280*1024, 네트웍, 사운드 다 잡고보니, 꽤나 사용하기 편리하다. 원래 게입을 할 수 있는 PC사양이 안되었기 때문에 게임안하니, 웹서핑, 필름스캔, 스캔이미지 보정정도의 용도로 사용되는 거라서 조립한 PC의 사양도 그리 높지 않은데도 모든 환경에서 xp보다 안정적이 시원하다는 느낌이 많이든다.
사용자 삽입 이미지

스캐너가 구형(scsi 방식)이라, 스캔을 하려면 xp로 부팅을 해야 하지만, 스캔후에는 osx로 와서 작업하기 때문에 좀 불편하긴 해도 업그래이드 하기전까지는 그냥 쓸 수 밖에...

IE안 아니면 안되는 곳은 TV에 연결되어 있는 동영상 전용 노트북에 원격으로 접속해서 보고하니, 별 불편함이 없다.

간만에 예전에 스캔해둔것중에서 적당한것 하나 골라서 배경화면하나 만들고 보니, 참 쓰기 편하다는 생각이 계속드는데, 이러다가 imac으로 갈지도....
실제로 많은 사람들이 해킨토시를 사용하다가 맥킨토시로 갔다는....

Trackback Address :: http://eahn.tistory.com/trackback/18 관련글 쓰기

댓글을 달아 주세요

trac을 알게된후참 많은 것을 하게되는 군요...
apache에 trac을 설치한후 사용자를 추가하려면, apache\bin\htpasswd....
뭐 이런 짓(?)을 해야 사용자를 추가 할 수 있는데 이것을 편리하게 해주는 plug in을 설치해보자
http://trac-hacks.org/wiki/AccountManagerPlugin
위의 사이트에서 받아서 설치를 하면 되는데, 역시나 서버가 인터넷에 접속을 할 수 없는 관계로 소스를 받아서 설치하도록 한다.
단, 먼저 easy_install이 설치가 되어 있어야 한다.
인터넷에 접속이 가능하면 이렇게...
easy_install http://trac-hacks.org/svn/accountmanagerplugin/0.10

소스를 받아서 설치하려면
trac 버전에 따라 선택한다.
svn co  http://trac-hacks.org/svn/accountmanagerplugin/0.9
svn co  http://trac-hacks.org/svn/accountmanagerplugin/0.10

이것을 설치가능한 egg로 만들어 보자
python setup.py bdist_egg

dist 디렉토리에  TracAccountManager-0.1.3dev_r2171-py2.4.egg 파일이 생성되는데
이것을 설치하면 된다.
python TracAccountManager-0.1.3dev_r2171-py2.4.egg

이런다고 끝나는 것이 아니다. trac의 webadmin 에서 plugin 항목에서
간단하게 몽땅 사용하는 것으로 설정한다.
사용자 삽입 이미지

그리고 나서 trac.db\conf\trac.ini 파일에 아래의 내용을 추가해준다.
[account-manager]
; configure the plugin to store passwords in the htpasswd format:
password_format = htpasswd
; with Trac 0.10 use this instead:
password_store = HtPasswdStore
password_file = e:/repos/test/.htaccess

위와 같이 설정하면 완성이 된다.
사용자 삽입 이미지

우측상단에 개인별로 로긴정보를 관리할 수 있는 my account 링크가 추가되어 있는것도 볼 수 있다.

좀더 많은 정보가 필요하면  http://trac-hacks.org/wiki/AccountManagerPlugin 이곳으로...






이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback Address :: http://eahn.tistory.com/trackback/14 관련글 쓰기

댓글을 달아 주세요

trac을 설치한 후 사용자관리 또는 티켓시스템을 관리하기 매우(?) 불편한데 이것을 trac의 웹화면에서 사용하기 위해서 필요한 것을 설치해보자

1. easy_install 설치
이거 설치하기 제일 어려웠는데, 왜냐...서버가 인터넷에 연결이 불가능하기 때문에 설치프로그램을 받아야 했는데, 아래에서 받아서 설치한다.

http://www.python.org/pypi/setuptools

설치하면 python\scripts에 easy-install.exe가 추가된다.

2. webadmin 설치
설치전에 소스를 받아온다. 적당한 디렉토리를 만들고
svn co http://svn.edgewall.com/repos/trac/sandbox/webadmin/
소스를 받아오면 이것을 설치가능하 egg 파일로 만든다.
python setup.py bdist_egg

이러면 dist 디렉토리가 만들어지고 설치용 egg 파일이 생성된다.
TracWebAdmin-0.1.2dev_r4429-py2.4.egg 이게 버전에 따라 만들어 진다.

설치
easy_install TracWebAdmin-0.1.2dev_r4429-py2.4.egg

trac.ini 파일에 아래의 내용을 추가한다.
[components]
webadmin.* = enabled

끝.


이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback Address :: http://eahn.tistory.com/trackback/13 관련글 쓰기

댓글을 달아 주세요

  1. criticalbug 2007/05/23 09:20 Address Modify/Delete Reply

    trac 0.11 버전에서는 기본으로 포함되어 있네요...

형상관리툴이고 공개인 svn과 TRAC을 windows에 설치하는 것을 몇가지 시행착오를 거쳤기 때문제 자료도 남기고 도움이 될까 올려둔다. 도움이 될려나....

도움이 되고 참고가 된글
http://aslongas.pe.kr/tt/11?TSSESSION=672b76591d44569773ad346b5efe7c0b#s-2.6

버전 맞추기가 참 어렵다....

1. apache 설치
apache 2.0 버전을 설치, 2.2는 안됨, 이것때문에 고생하지 말것
2. SVN 설치
형상관리프로그램, 이건 CVS와 유사함
여기까지 설치했으면 디레토리 적당한 곳에 d:\repos를 만들고
d:\svn>svnadmin create --fs-type fsfs c:\repos\test
svn이 뭐하는 건지는 알고 있겠지요?
apache와 svn의 연결은 아래와 같이 한다.
conf\http.conf파일에서 아래의 주석을 삭제한다.
LoadModule dav_fs_module modules/mod_dav_fs.so

http.conf 마지막에 아래와 같이 추가해준다.

<Location /svn/repos/test>
  DAV svn
  SVNPath e:\repos\test
  AuthType Basic
  AuthName "TRAC TEST"
  AuthUserFile e:\repos\test\.htaccess
  Require valid-user 
</Location>

.htaccess 파일생성
bin\htpasswd -cm d:\repos\test\.htaccess testuser
비밀번호 입력

아래의 주석제거
AddHandler cgi-script .cgi

이제 웹서버를 재시작해서 아래와 같이 접속해본다
http://localhost/svn/repos/test
ID, passwd를 넣어야 한다. 뭐가 보이나???

4. docutil 설치


5. python 설치
python 2.4 설치(2.3도 가능하며, 2.5는 안되는것 같다.)
설치후에 path에 추가해준다

6. svn python binding 설치
설치하면 자동으로 python 디렉토리에 설치가 된다.

7. SQLite 설치
8. pysqlite
9. ClearSilver
10. Trac 설치
한글버전으로 설치하자...
11. trac 복사 및 수정
copy c:\python24\share\trac\cgi-bin\trac.cgi d:\www\apache2\cgi-bin

10. trac_admin 수정
c:\Python24\Scripts>python trac-admin d:/repos/test/trac.db
Trac [d:\svn\trac.db]> initenv 엔터
project Name [My Project]> 적당한이름
Database connection string [sqlite:db/trac.db]> 엔터
Path to repository [/var/svn/test]> d:/repos/test
Templates directory [C:\Python23\share\trac\templates]> 엔터
사용자 권한추가
Trac [d:\svn\trac.db]>permission add testuser TRAC_ADMIN
만약에 지정된 사용자만 사용하려면, anonymous의 권한을 remove해야 한다.
Trac [d:\svn\trac.db]>permission list
....
...
Trac [d:\svn\trac.db]>permission remove anonymus WIKI_VIEW ....
이렇게 권한을 몽땅제거해주면 된다.

12. apache와 trac 연결
http.conf에 아래의 내용을 추가해준다.

Alias /trac "C:/Python23/share/trac/htdocs"

<Location "/cgi-bin/test.cgi">
  SetEnv TRAC_ENV "e:/repos/test/trac.db"
  SetEnv PYTHONPATH "PATH/TO/SVN/python"
</Location>
<Location "/cgi-bin/test.cgi/login">
  AuthType Basic
  AuthName "TEST Project"
  AuthUserFile e:\repos\test\.htaccess
  Require valid-user
</Location>

<Directory "C:/Python24/share/trac/htdocs">
  Options Indexes MultiViews
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

설치 및 설정이 끝났다.....apache을 재시작해서 이상이 없는지 확인후에
http://localhost/cgi-bin/test.cgi
좀 기다리면된다.

일단 보이면 성공....
소스의 비교에서 한글이 깨지고, 다른 곳에서는 이상이 없다.
한글때문에 d:\repos\test\trac.db\conf\trac.conf에서 euc-kr로 변경하면 된다는데
안된다...한글 패치를 설치해도 안된다...이유는 모르겠다...그래서 그냥깨진채 본다..

13. util 설치
파일일 비교해서 색상을 다르게 보려면 diff util을 설치한다.
14. 속도개선
사용하다 보면 정말 느리다....
설치후 http.conf을 수정한다.
<Location "/cgi-bin/test.cgi">
  SetHandler mod_python
  PythonHandler trac.web.modpython_frontend
  PythonOption TracEnv "e:/repos/test/trac.db"
  PythonOption TracUriRoot /cgi-bin/test.cgi
</Location>
#<Location "/cgi-bin/test.cgi">
#  SetEnv TRAC_ENV "e:/repos/test/trac.db"
#  SetEnv PYTHONPATH "PATH/TO/SVN/python"
#</Location>

이렇게 변경한다.

휴~~~

Good luck...

일단 사용해보니, 쓸만하다....







이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback Address :: http://eahn.tistory.com/trackback/12 관련글 쓰기

댓글을 달아 주세요

  1. criticalbug 2007/05/18 12:08 Address Modify/Delete Reply

    현재 내부프로젝트 2건에 적용했는데, 아주 좋군요 설치가 좀 어렵긴하지만, 변경이력, 이정표, 티켓등 프로젝트 관리에 필요한 기능이 필요한 많큼있습니다.
    단지, 사용자를 한글로 할 수 있으면 좋으련만 이건 안되는군요...

이전의 글에서는 CURD가 가능한데, 원하는 페이지를 만들러면 특정한 부분을 가져와야 하는데 이것을 구현하는 방법은 여러방법들이 있겠다. 여기에 있는 것은 업무중에 만들어지는 것을 자료보관의 의미로 작성하는 것이니, 참고로 하면된다.

먼저 페이지를 만들려면, 데이터를 가져오는 부분을 보면 아래와 같다.

    public List find(Connection conn, SampleListForm mForm, List condition) throws Exception
    {
        List    list            = new ArrayList();
        String query            = ""  ;
        int     index            = 0;
        try
        {
            ReadXMLQuery rxq = new ReadXMLQuery();           
            //Get query string by condition
            //select sdate, edate from sample where sdate=? and edate=? and name=?
            //query = rxq.getQuery("SAMPLELIST", rxq.getRequried(condition));
           query = "select sdate, edate from sample where sdate=? and edate=? and name=?"
            ResultSetHandler rsh = new BeanListHandler(SampleListDTO.class);
            QueryRunner runner = new QueryRunner();
            Vector v = new Vector();
            v.add(index++, mForm.getSdate());
            v.add(index++, mForm.getEdate());
            Vector nv = rxq.bindVectors(v, condition, index);
            //한페이지에 보여질 레코드 수
            int iRowSize  = Integer.parseInt(mForm.getRowsize());
            //전체의 데이터를 가져올 페이지
            int iCurrPage = Integer.parseInt(mForm.getCurrentpage());
            list = (List)runner.query(conn, query, nv.toArray(), rsh, iRowSize, iCurrPage);
        } catch(SQLException ex)
        {
            log.error(ex);   
            log.error(query);
            throw ex;           
        }
        return list;
    }
ReadXMLQuery는 xml에서 query를 가져오는 것이니, 무시하고 아래에 있는 query를 보면되는데, 아래쪽 붉은색으로 된 부분을 보면, 의아한 생각이 있는분들도 있을거다. 이런 인수를 갖는 query 메소드가 기본적으로 제공되는 않느다. 그러나, 오픈소스가 왜, 오픈인가 소스를 수정할 수 있다는거 참 좋은거다.
일단 위의 소스설명을 마저 하자면, 원하는 페이지 번호에서 원하는 레코드를 가져온다.

그러면, 이젠 DbUtil 소스를 한번 건드려 보자
ResultSetHandler.java
//메소드추가
    public Object handle(ResultSet rs, int rowSize) throws SQLException;

handlers.GenericListHandler.java
//메소드추가
    public Object handle(ResultSet rs, int rowSize) throws SQLException {
        List rows = new ArrayList();
        for(int i=0; i<rowSize && rs.next(); i++){
            rows.add(this.handleRow(rs));
        }
        return rows;
    }
여기까지 핸들러를 구현했다. 그러면 저놈을 사용하는 것을 계속 구현하자.
QueryRunner.java
//메소드 추가
    public Object query(Connection conn, String sql, Object[] params,
            ResultSetHandler rsh, int rowSize, int currentPage) throws SQLException {

        PreparedStatement stmt = null;
        ResultSet rs = null;
        Object result = null;

        try {
            stmt = this.prepareStatement(conn, sql, ResultSet.TYPE_SCROLL_INSENSITI
VE, ResultSet.CONCUR_UPDATABLE);
            this.fillStatement(stmt, params);
            rs = this.wrap(stmt.executeQuery());
           rs = moveCursor(rs, rowSize, currentPage);
            result = rsh.handle(rs, rowSize);

        } catch (SQLException e) {
            this.rethrow(e, sql, params);

        } finally {
           try {
                close(rs);
            } finally {
                close(stmt);
            }
        }

        return result;
    }
    /**
     * Moved cursor
     * @param  rs
     * @param  countPerPage
     * @param  currentPage
     * @return ResultSet
     * @throws SQLException
     */
    public ResultSet moveCursor(ResultSet rs,
                                int countPerPage,
                                int currentPage) throws SQLException
    {
        int startPage = (currentPage - 1) * countPerPage + 1;
        if(startPage == 1)
        {
            rs.first();
            rs.beforeFirst();
        } else
        {
            rs.absolute(startPage - 1);
        }
        return rs;
    }

prepareStatement 메소드의 인수에 평소에 못보던 것들이 있는데, 이것은 커서를 사용해서 데이터를 가져오기 위한것이다.
그리고 제일 위에 있는 bindVectors의 구현은 아래에 있다. 이건 query에서 바인딩을 쉽게하기 위해 만든것이다.
ReadXMLQuery.java
    public Vector bindVectors(Vector v, List condition) throws SQLException {
        int i = 1;
        return bindVectors(v, condition, i);
    }
   
    public Vector bindVectors(Vector v, List condition, int startpt) throws SQLException
    {
        Iterator iter = condition.iterator ();
        Vector nv = new Vector();
        int index = 0;
        Iterator viter = v.iterator();
        while(viter.hasNext())
            nv.add(index++, (String)viter.next());
       
        while ( iter.hasNext())
        {
            ConditionBean cb = (ConditionBean)iter.next();
            if(cb.isRequried())
            {
                try {
                    nv.add(index++, cb.getColValue ());
                } catch(Exception e) {
                    e.printStackTrace();
                }
                if(log.isInfoEnabled())
                {
                    log.info("[Binding "+(index-1)+"] "+cb.getColId()+" = "+cb.getColValue());   
                }
               
            }
        }
        return nv;
    }


페이징을 하기위해 만든건데, 별 문제 없이 사용하고 있다. 도움이 될랑가....

박남준(criticalbug@gmail.com)

이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback Address :: http://eahn.tistory.com/trackback/10 관련글 쓰기

댓글을 달아 주세요