irfanview v4.30 한글팩 작업후기

컴글 2011. 8. 18. 00:36 posted by 배제군
자주쓰는 무료 이미지뷰어 프로그램인 Irfanview 의 한글팩을 만들어 올렸다.

http://www.irfanview.com - languages 부분의 Korean

왜?
오래전부터 쓰던 프로그램인데 최근(6월)에 업데이트된 v4.30 버전을 다운받아 설치했지만 한글팩이 v4.28 버전밖에 없어 안타까운 마음에 '내가 만들어 볼까?'해서 작업을 했다.

준비는?
먼저 기존의 v4.28버전에 등록되어 있는 한글팩 제작자인 "다음에는 도자기가 되고픈 진흙"님께 기존소스를 받을 수 있는지 문의를 드렸다.

안되면 프로그램에 있는 내용을 참고해서 번역할려고 했는데  다행이도 소스를 주셔서 쉽게 작업을 진행 할 수 있었다. (진흙님 감사합니다. -.- _._ ) 

어떻게?
irfanview 의 한글팩은 프로그램내에 메뉴, 다이얼로그, 메세지를  VisualC++6으로 컴파일한 DLL 형태로 제공, 설정에서 사용할 DLL을 선택하는 방식이다.

편집하려고 보니 VC6의 리소스편집기로 수정하기엔 마우스 클릭 질이 너무 많아서 .rc 파일을 직접수정하기로 했다.

v4.30 영문파일의 .rc 와 v4.28 한글파일의 .rc 를 Acrodiff(Acroeditor 편집기에 포함) 를 이용해서 영문파일의 내용을 한글파일문장으로 대체하는 작업과 추가,삭제부분 적용, 추가된 영문번역까지 v4.30버전의 한글파일을 완성했다.

틀린점이?
이전 버전과 틀린점은 글꼴을 기존의 굴림 8포인트에서 굴림 9로 변경했고 그에 따른 표시부분을 리소스편집기에서 열어 영역크기를 조정한것 정도?
최대한 원작자의 내용을 보존해서 했기때문에 추가된 번역부분 말고는 날 탓하지 말라능.. *_*;;
(사실 오역이 두려웠음..ㅠㅠ) 

문제는?
프로그램적으론 문제는 없었는데 크게 많은 량은 아녔지만 오역/의역이 문제다.
ContactSheet 을 미리보기목록 이라고 의역했는데 그냥 영문그대로 두는게 나았을까? 쩝;;

느낀점
나야 예전 소스 받아 쉽게 작업해서 올렸지만 그 전 부터 고생하신 이전 제작자님이 많이 고생을 하셨겠다는 것.
Irfanview 를 지금까지 무료로 잘쓰고 있었기 때문에 기부는 못해도 도움이 되었다는 사실에 만족한다는 것! ㅎㅎ;;

추가완료 화면

플러그인을 설치하면 나타나는 한글팩 선택화면


EIS - Flex 개발 후기 및 팁

컴글 2011. 7. 8. 15:26 posted by 배제군
이번 D사의 EIS - Flex 개발하고 느낀 후기 및 팁.

개발환경 : Flex4.1 SDK with Flash Builder4, SAP, WebService, for MDXQuery

 - 생각만큼 이벤트가 잘 먹히진 않는다 -
마우스 클릭 이벤트에서 동작하는 코드들이 제대로 돌아가지 않는다.
확인된 상황은 CPU에 부하가 많이 걸리는 상황이였고 callLater 를 걸어도 마찬가지. -0-
처리한 방식은 Timer 로 300밀리초 정도의 이벤트를 발생시켜 이벤트 처리 함수에서 동작하게 만들었다.

 - 모듈의 메모리 해제는 역시나 멍청한 짓이다 - 
각 페이지는 모듈로 만들었지만 멍청한 FLEX 는 역시나 메모리를 해제 시켜주지 않는다. Factory 클래스로 모듈을 호출하기 때문에 한번 생성한 객체는 계속 가지고 있고 재 호출시 이미 만들어진 객체를 리턴하고 addChild 시키는 방식을 사용했다. 페이지가 50페이지 정도라 그런지 2시간의 검증시간동안에도 큰 문제 없이 모든 페이지를 열어도 잘 소화해주었다.

 - 각 페이지 모듈은 Optimizer 하지 않음 -
프로젝트 관리에서 모듈을 메인 MXML에 옵티마이져를 하지 않았다. 빌드시간 너무 길어~!
뭐 상황에 따라 틀리기 때문. 참고
( http://sites.google.com/site/koreanflexdoc/4-0/usingflashbuilder/ws6f97d7caa66ef6eb1e63e3d11b6c4d0d21-7fdd/ws6f97d7caa66ef6eb1e63e3d11b6c4cffa4-7ff1 )

 - Webservice 에 http 인증이 있을때 잘 되지 않는다. -
WSDL 접근시 Base64로 인증코드를 헤더에 넣었지만 Fillder 로 확인해도 헤더에 바로 집어 넣어주지 않았다.(버그인듯) 해결한 방법은 WSDL을 파일로 저장하고 WSDL을 읽어 서비스호출을 했다. 이때는 HTTP 인증이 아주 잘 되었다. ㅡㅡ

 - Webservice 호출시 플렉스 자체 파서는 오류를 내 뿜는다. -
* Error #1085: 요소 유형 "Tuple"은(는) 일치하는 끝 태그 "</Tuple>"(으)로 끝나야 합니다. *
플래시빌더4(3도 안됨)에서 제공하는 Webservice 호출시 나타나는 오류다. 이 오류 말고도 Caption 도 있고 여타 XML 파싱오류가 나타난다. ㅡㅡ
XML API 자체 문제기 때문에 코드를 직접 수정할 수 없어 그냥 Object 형식으로 리턴받아 SOAP로 받은 XML을 통합적으로 사용할 수 있는 ArrayCollection 으로 변환하는 함수를 만들었다.

 - Object 객체의 프로퍼티는 입력순서를 가지지 않는다. -
아래와 같은 코드를 입력하면 콘솔에 어떤 결과가 나타날까?

var obj:Object = {'e':'1', 'd':'2', 'c':'3', 'b':'4', 'a':'5' }

for (var key:String in obj) {

trace('key='+key);

}

key=a

key=b

key=c

key=d

key=e

즉, xml 로 받은 컬럼 순서를 Object 로 넣으면 다시 가져올때의 순서를 보장받을 수 없다는 것이다. 그래서 Object 를 넣을때 Array 로 컬럼에 대한 순서정보를 입력시키는 방법으로 해결했다.

 - SAP 의 SOAP 결과의 XML은 완전 패턴이 없었다. -
딱부러지는 XML 이 없이 노드(Node)속에 노드로 있는 놈과 노드속에 속성(Attribute)로 있는 놈도 있고 컬럼명의 목록이 다중행으로 나오는 놈도 있다. ㅡㅡ;; 컬럼명이 없는 놈도 있고 이중인 놈도 있고.. OTL... 해결한 방법은 컬럼명이 없는 놈은 header0~숫자 형식으로 무조건 지정받게 했다. 그리고 컬럼명이 1행이상인 것들은 언더바(_)로 구분지어 컬럼명을 바꾸었고  '합계_매출' '합계_금액' 이렇게 입력된 컬럼명은
 합계
 매출 금액 
처럼 그룹헤더 컬럼을 자동생성되게 만들었다.
그리고 컬럼명이 없어 header0과 같이 만든 컬럼의 제목열은 속성을 Object 로 받아 제목, 길이 등 컬럼속성을 추가 할 수 있게 해서 데이터와 제목열을 구분했다.
결과적으로 특이한 DataGrid가 아닌 이상은 데이터만 잘주어지면 컬럼태그를 직접쳐서 넣지 않았기 때문에 자동으로 잘 보여졌다.

 - 동기, 비동기 두가지 방식으로 구현 - 
Webservice 태그에 concurrency 를  single 로 하고 동기방식으로 처리해서 여러 질의를 순차적으로 받게 한 것과 multiple 로 지정하고 비동기방식으로 처리하는 2가지 방식으로 만들었다. 동기방식은 최초 데이터(처음 전송한 질의)가 매우 빠르게 보이기 때문에 시각상으로는 매우 빠르게 느껴지나 전체 시간으로 보면 느리고 비동기방식은 한꺼번에 전송하나 데이터 처리시점에 많은 CPU 부하가 걸려 버벅일 수 있다는 점이 있다. 최종적으로 선택한건 역시 비동기 동시질의! (한.. 1년 후에 보면.. 쩝)

 -  개념적으로 C언어에서 말하는 포인터를 알아야 데이터 가공이 용이하다. -
이미 난 XML을 공통적인 ArrayCollection 으로 받아와서 DataGrid의 DataProvider 에 넣어 사용하게 했다. 그런데 보여지는 형식을 다르게 보여달라고 하면? 프로젝트에 따라 다르겠지만 EIS에서는 보여주는 데이터가 최종이기 때문에 나의 경우 오리지널데이터를 가공했다.
예를들면 MDXQuery 에서 20110606으로 넘어 올때 2011.06.06으로 보이게 해달라고 하면 여타 아이템렌더러를 사용할 수 있지만 EIS에서는 2011.06.06이 최종이기때문에 데이터 자체를 2011.06.06으로 변경했다. 이렇게 변경할때 포인터 개념을 알면 쉽게 변경할 수 있다.

var ac:ArrayCollection = new ArrayCollection([

{'e':'1', 'd':'2', 'c':'20110606', 'b':'4', 'a':'5' },

{'e':'11', 'd':'22', 'c':'20110707', 'b':'44', 'a':'55' }

]);

for each(var obj:Object in ac) {
// obj 는 ac객체 내부 포인터이기 때문에 ac의 내부와 동일한 주소를 같는다.

obj['c'] = obj['c'].substr(0, 4)+'.'+obj['c'].substr(4, 2)+'.'+obj['c'].substr(6, 2);

}


trace('0번 c날짜='+ac[0]['c']);

trace('1번 c날짜='+ac[1]['c']);

결과
0번 c날짜=2011.06.06

1번 c날짜=2011.07.07

즉, 모든 데이터를 새로 작성할 필요 없이 루프를 돌며 데이터를 가공할 수 있다.
단, 반대로 ac객체와 별도로 Object값을 꺼낸후 사용할려면 ObjectUtil.copy 를 참고하면 포인터가 아닌 복사한 별도의 객체를 얻을 수 있다.

 - Object 에서 프로퍼티를 빼고 싶을때는 delete를 사용해라. -

var obj:Object = {'e':'1', 'd':'2', 'c':'3', 'b':'4', 'a':'5' }

delete obj['c']; ( or obj.c )
의 결과는
obj = {'e':'1', 'd':'2', 'b':'4', 'a':'5' }
가 된다.

이건 모르면 좀 골치가 아프다. ㄷㄷ;;

 - 엑셀형식, 화면캡춰, PDF 다운로드는 fileReference로 바로 다운 가능하다. -
 fileReference.save(데이터, 파일명) 으로 별도의 웹페이지에 접근할 필요없이 다운로드 가능하다. flex3 만 알던 나는 몰랐다능.. ㅡㅡ

  - 엑셀 다운로드는 DataGrid의 IViewCursor 를 사용하는 방식을 이용했다. -
IViewCursor는 DataGrid에 나오는 labelFunction 이나 DataProviderRender 와 같은 아이템렌더러까지 적용된 값을 가져오기 때문이다. 보통 공개된 HTML에서 위에 header0~숫자 형식와 '합계_금액' 형식의 colspan, rowspan의 구분도 처리 할 수 있었기 때문에 HTML 도 똑같은 머지가 되어 다운로드하게 만들었다.

 - 템플릿 컴포넌트와 싱글톤 클래스의 이용 -
판넬과 같은 창영역은 템플릿 컴포넌트로 만들고 공통으로 사용하는 서비스와 MDXQuery질의 같은 함수와 요소들은 싱글톤 클래스로 만들어 사용율을 최대화 했다.

 - 아이템런더러의 경우 공통요소가 아니면 태그내에 MXML로 만드는게 이롭다. -
공통적으로 사용하는 부분은 파일로 빼서 호출하게 하면 이해가 쉬운데 딱 하나의 DataGrid에 딱 하나의 컬럼에 쓰는 아이템 렌더러의 경우는 파일로 빼면 복잡하고 이해가 어려워 진다. 그냥 MXML 에 틀어 박았다. ㅡㅡ
 
= 총 평 =
개발하면서 느낀 건 왜 이리 생각만큼 잘 안 돌아가지? 하는 느낌이 제법 많이 들었다.
마우스 클릭, 웹서비스 인증이나 DataGrid에 1픽셀정도 아주 약간씩 어긋 나는 것, 머지시키고 스크롤 되면 어긋나는 것, 아이템렌더러에 화면 갱신 주기가 느려터지는 것... 넘 많다... ㅡㅡ;;
SAP는 첨이였지만 운영환경(Webservice, SAP GUI, MDXQuery등)적인 문제 보다는 Flex 버그수준의 저런 자잘한 문제에 부딪쳐 시간잡아 먹는게 대부분이였다. ㅡㅡ
이래서 계속 Flex 쓰겠나 싶기도 하지만 최종적으로는 사용자에게 만족할 만한 결과를 주는것 같다. 

  

 

○ 3DP Chip 으로 각종 드라이버 설치
 - http://www.vga.pe.kr/3dp/chip_down_kor.php

○ 빠른 실행 추가 - 작업표시줄 - 도구모음 - 새 도구 모음
 - %userprofile%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch

-제어판-

○ 키보드 속성 - 재입력 시간 - 가장 짧게

○ 작업표시줄 - 작은 아이콘 사용, 작업표시줄이 꽉 차면 단추 하나로 표시, 작업 표시줄에 항

상 모든 아이콘 및 알람표시, 시작 메뉴 사용자 지정- 실행 표시

○ 시스템
 - 원격 탭 - 원격 지원:이 컴퓨터에 대한 원격 지원 연결 허용 해제
 - 원격 데스크톱 : 모든 버젼의 원격 데스크톱을 실행 중인 컴퓨터에서 연결 허용
 - 작업 그룹 및 이름 변경

○ 폴더 - 보기 탭 - 메뉴 항상표시 선택, 보호된 운영체제 파일 숨기기 해제, 숨김 파일, 폴더 및 드라이브 표시, 알려진 파일 형식의 파일 확장명 숨기기 해제

○ 자동 실행 - 모든 미디어 및 장치에 자동 실행 사용 해제

○ 관리 센터 - 사용자 계정 컨트롤 설정변경 - 알리지 않음

-브라우저-

○ 인터넷 익스플로러
 - 항상 Private 으로 실행 : IE실행 아이콘 속성- 대상 제일 마지막줄에 -private 추가
 - 기본 검색 공급자 및 시작페이지 구글로 변경
    (http://www.iegallery.com/kr/addons/detail.aspx?id=4793)

○ 파이어폭스 : http://www.mozilla.or.kr/ko/
 - 항상 사생활 보호 모드로 실행 : Alt(상단 메뉴 나타남) - 도구 - 설정 - 개인 정보 - 방문기록 - Firefox 작업 사항 : 방문 기록 저장 안 함
  (플러그인)
  파이어버그(웹개발용) : https://addons.mozilla.org/ko/firefox/addon/firebug/
  웹디벨로퍼(웹개발용) : https://addons.mozilla.org/ko/firefox/extensions/web-development/
  파이어제스쳐(마우스제스쳐) : https://addons.mozilla.org/ko/firefox/addon/firegestures/
  다운로드뎀잇(멀티 스레드 다운로드 관리) : https://addons.mozilla.org/ko/firefox/addon/downthemall/

○ 크롬플러스(크롬에 제스쳐및 기본확장기능 제공) : http://www.chromeplus.org/
  - 항상 시크릿으로 실행 : ChromePlus 실행 아이콘 속성- 대상 제일 마지막줄에 --incognito 추가

○ FreeDownLoadManager(멀티 스레드 다운로드 관리 및 토렌트) : http://www.freedownloadmanager.org/download.htm

○ IE, 파이어폭스, 구글크롬, FreeDownloadManager 등 다운로드 기본 폴더 한곳에 지정

-백신-

○ 어베스트(백신:개인무료) : http://www.avast.com/download-thank-you.php?src=http://files.avast.com/iavs5x/setup_av_free.exe&product=FA&page=free-antivirus-download&locale=en-ww&avast=0

○ Windows Defender 종료 (기본 안티스파이웨어 종료:어베스트에 기능포함) : 제어판 - Windows Defender - 도구 - 옵션 - 관리자 - 이 프로그램 사용 해제

-기타-

○ Tortoise SVN(윈도우용 SVN툴) : http://tortoisesvn.net/downloads.html
-  .SVN 폴더 삭제 레지스트리 

○ Irfanview(이미지뷰어) : http://www.irfanview.com/main_download_engl.htm
○ 7-Zip(압축프로그램) : http://www.7-zip.org/
○ 에디트플러스(기본에디터:유료) : http://www.editplus.co.kr/kr/download.html
○ Fiddler2 : http://www.fiddler2.com/Fiddler2/version.asp
○ 파인프린터, 오피스등등..
○ 오피스 2003, 2007 호환팩 : http://www.microsoft.com/downloads/ko-kr/details.aspx?displaylang=ko&FamilyID=941B3470-3AE9-4AEE-8F43-C6BB74CD1466
플렉스3 에서 개발된 Air 프로그램을 수정할려고 간만에 열었더니 실행이 안된다...


문제 과정.
1. 플렉스 빌더3에서 실행해도 아무런 반응이 없음
2. 플렉스 빌더3에 flex sdk 4를 설치 후 각종 코드 호환성 오류 포기
3. 플래시 빌더4를 설치 각종 코드 호환성 수정 ㅡ_ㅡ;;;
4. 그래도 위와 같이 오류가 남..
5.. 몇시간째 원인 분석..
6. 플래시 빌더4에서 Air 프로젝트 생성후 기존 소스를 첨가하니 돌아는 가지만 호환성 개판으로 레이아웃 다 깨짐 ㅡ_ㅡ;;
7. 플래시 빌더4에서 기존 소스를 열어 실행이 되는 이유를 문서비교 프로그램까지 동원해가서 하나하나 비교.
8. 결국 찾은거!!!!!!!!!!
9. 프로젝트-app.xml 에 네임스페이스 부분....... ㅜㅡㅜ


이게 기존 소스...


이렇게.. 네임스페이스의 버전을 바꾸니.. 4 sdk에서도 잘 돌아간다.......
아.... 6시간은 족히 걸린듯..ㅡㅜ
끝이면 좋겠지만 작업은 이제 시작이라는 거.. ㅜㅡㅜ

망할... 안 돌아가면 이유를 말해줘야 할꺼 아냐~!!!

Qt ShortCut 코드 삽질

컴글 2010. 9. 17. 10:00 posted by 배제군
*QPushButton 에서 Shortcut 의 경우 Text 설정 후 입력되어야함

- 예1 -
QPushButton *btn = new QPushButton(this);
btn->setShortCut(Qt::Key_F1);
btn->setText("버튼");
.... 기타 connect....

↑ F1 키 작동 불가 코드

- 예2 -
QPushButton *btn = new QPushButton(this);
btn->setText("버튼");
btn->setShortCut(Qt::Key_F1);
.... 기타 connect....

↑ F1 키 작동 가능 코드

setShortCut 을 설정하더라도 setText  입력시 단축키값을 설정하기 때문
setText("&Push"); 처럼 & 다음 영문자를 Alt 키 조합으로 입력시킴 = Alt+D

어쩐지 안되더라.. *_*;;

Qt에서 hitButton를 이용한 클릭영역 지정

컴글 2010. 9. 5. 23:07 posted by 배제군
http://korone.net/bbs/board.php?bo_table=qt_qna&wr_id=17786

Qt 커뮤니티에서 버튼의 hit영역 지정글 질문에 대해 테스트했다.

Qt API 에 QAbstractButton 클래스 메소드 중 hitButton 를 확인하면 아래와 같다.

bool QAbstractButton::hitButton ( const QPoint & pos ) const   [virtual protected]

Returns true if pos is inside the clickable button rectangle; otherwise returns false.

By default, the clickable area is the entire widget. Subclasses may reimplement this function to provide support for clickable areas of different shapes and sizes.


pos 가 클릭 가능한 버튼 사각형에 포함되면 true 아니면 false 를 리턴한다.
기본적으로 클릭가능한 영역은 완전한 widget이다. 하위클래스에서 클릭가능한 영역을 도형이나 크기로 지원가능하게 제공하면 재구현이 가능하다.

위의 내용를 참조로 간단하게 구현해봤다.

이미지는 위 질문링크에 포함된 이미지를 사용했고 포토샵에서 클릭영역을 확인 지정했다.



GUI 프로젝트를 생성하고 QPushButton 과 클릭여부를 확인할 QLineEdit 위젯을 알맞게 배치한다.
QPushButton 에 아이콘을 넣을 수 도 있지만 배경으로 넣는게 정렬이나 위치지정에 유용하기때문에 나같은 경우 자주이용한다.

그리고 기본적인 배치 및 클릭여부를 확인하고 QPushButton 을 재구현한 QPolygonPushButton 을 만들자.

project -> add New -> c++ -> c++ class 선택
Class name : QPolygonPushButton
Base class : QPushButton
Type info : inherits QWidget

생성 후 hitButton 가상함수를 구현하자.

qpolygonpushbutton.h 에서

private:
    virtual bool hitButton ( const QPoint & pos ) const;

를 선언한다.
 
그리고 qpolygonpushbutton.cpp 에서 hitButton 을 구현한다.

bool QPolygonPushButton::hitButton( const QPoint & pos ) const {
    QPolygon *f = new QPolygon(4);
    f->setPoint(0, 22, 0);
    f->setPoint(1, 100, 0);
    f->setPoint(2, 110, 26);
    f->setPoint(3, 15, 26);
    bool ok = f->containsPoint(pos, Qt::OddEvenFill);
    return ok;
}

질문에 나온 사다리꼴 좌표를 저장하기 위해 QPolygon 을 이용했다.
각 좌표를 박스 그리듯 순서대로 지정하고 containsPoint 함수를 이용해 pos 와 비교한다.
비교 결과를 ok 로 리턴하게 만들면 함수는 완성이되고 기본 프로그램을 구성했던 QPushButton 을 지금 구현한 QPolygonPushButton 클래스로 바꾸어 다시 실행해본다.



완성된QPolygonPushButton 테스트 프로그램

사다리꼴 영역은 eventCnt 가 올라가지만 이외의 영역은 클릭판정을 받지 못한다.




음표 영역을 선택해서 올바르게 작동하는지 시험해본다.


테스트한 프로젝트 압축본

짧은작성후기.
Qt가 워낙 API가 잘 나와서 그런지 충돌영역검사도 엄청 쉽게 되어 있다.
옛날이면 충돌영역을 bit 이미지로 저장해서 검사하게 했을꺼 같은데.. ㄷㄷ.. ;;
응용하면 QPolygon 을 입력받게 하거나 이미지를 계산하게도 가능하겠다.

SVN Tool - RapidSVN 사용법

컴글 2010. 8. 17. 16:14 posted by 배제군
1. SVN 개념

개념도개념도. SVN의 Checkout, Update, Commit 등의 명령으로 형상관리를 할 수 있다.


SVN은 위처럼 서버등록된 파일을 자신의 PC에 내려받아 수정하고 SVN 서버에 업로드 하는 방식의 버전관리시스템이다.

2. RapidSVN
Tigris.org Open Source Software Engineering Tools 에서 배포하는 SVN 클라이언트다.
왜 이걸 쓰냐면 크로스플랫폼 프로그램이기때문에 리눅스, MAC, 윈도우 똑같이 무료로 사용할 수 있다.

2.1 RapidSVN 설치.
http://rapidsvn.tigris.org/ 에서 최신버전을 다운 받는다. 글쓴 시점에서 0.12.0-8051 이다.


설치진행중컴맹이라도 Next만 클릭하면 설치는 식은 죽먹기.


실행화면설치 완료 후 실행


2.2 RapidSVN 작업 준비
 글 처음의 개념도에서 1번의 내용이다.
 아래 그림처럼 북마크에서 우 클릭 후 메뉴중 Checkout New Working Copy.. 을 클릭한다.
 - Checkout New Working Copy.. : 새로운 폴더에 Checkout 을 하겠단 뜻이다.
 - Add Existing Working Copy.... : 이미 Checkout 받은 폴더를 북마크에 추가
 - Add Existing Repository... : SVN서버의 목록을 등록한다. Checkout New Working Copy.. 는 데이터를 내려 받지만 이 메뉴는 서버데이터의 목록만 확인 가능하다.
 - Create New Repository... : 커맨드라인 서브버전(svnadmin) 파일로 받아 처리 하라고 한다. *_*;;
 - Switch Repository... : 선택된 저장소의 URL을 바꿀때 쓴다. 저장소 주소가 바뀐 경우 필수다.

Checkout New Working Copy.. 선택 화면Checkout New Working Copy.. 를 눌러 내 PC에 SVN서버에서 파일을 Checkout 받자.




다음의 Checkout 팝업창에서 URL 과 목적폴더를 눌러 OK를 누른다.

Checkout 창URL 및 Dest Dir 을 선택하고 OK를 누른다.


계정정보입력창계정정보를 요구하면 저장소에 접근가능한 계정정보를 입력한다.



아래는 OK 누른후 다운 받아진 항목과 결과 창이다.
Revision 이 1 이고 Rep.. 이 1이니 현재 저장소와 내 폴더의 리비전이 일치하는 현재로선 최신버전이다.

Ckechout 완료 화면Checkout 완료 후 Bookmarks 에 폴더가 추가되어 있고 폴더 및 파일 내용이 나온다.



실제 탐색기에도 파일이 받아져 있다.

탐색기 내용탐색기에도 동일한 파일이 들어있다.



하지만 Checkout 된 폴더에는 숨겨진 파일로 .svn 폴더가 존재한다.
다음은 폴더 속성에 숨김 파일 보기를 했을때 화면이다.

숨겨진 svn 폴더숨김파일보기를 했을때 숨겨진 .svn 폴더가 나타난다.


이게 SVN 을 사용하면서 가장 중요한 부분이 아닐까 싶다.
이 .svn 파일 속에는 현재 폴더에 각 파일의 정보를 담고 있는 META 파일이 존재하기때문에 함부로 위치이동을 하면 안된다.
.svn 폴더가 삭제됐을 경우 update 받으면 새로 받아지지만 혹시나 다른 svn 폴더로 덮어 쓰기 되버리면 감당하기 힘들다.. ;;
그리고 A라는 폴더의 내용의 이름을 B라고 바꾸고 싶을때 그냥 파일이름 변경으로 하면 절대 안된다.
(저 .svn 속의 META 파일에선 A라는 파일로 계속 남아있을테니까..)
그래서 SVN 에서 이름 바꾸기는 A폴더의 내용을 B로 복사(B폴더내의 .svn삭제) 후 A폴더 삭제(delete) 명령, B폴더 추가(add) 명령을 한다.
이걸 깜빡하면 Commit 했을때 경로가 깨졌다니 충돌이 났다니 저장소를 찾을 수 없다느니하는 엄청난 결과가 온다.
이러면 이전의 리비전으로 모두 받고 수정파일만 다시 저장하고 Commit 하는 사태가 벌어질 수 있으니 매번 강조해도 지나칠 수 없는 것이다.

※ SVN 1.7 이상부터는 .svn 파일이 최상위 폴더에만 저장되는 구조로 변경되었다 


2.2 RapidSVN 최신 버전 갱신 (Update)
 Checkout 으로 작업폴더를 만들었으면 작업을 시작할때다.
 모든 작업은 시작하기전에 Update 를 받아 최신파일로 갱신해야한다.
 예전 파일을 수정하면 다른 사람이 수정한 최신파일 적용받지 못해 충돌이 날 수 있기때문이다.

Update 선택작업전 update 는 필수다.


OK를 누르면 최신버전을 확인 후 자동으로 적용시켜준다.

Update 창최신 버전을 항상 확인하자.



업데이트가 완료됐으면 해당 폴더에서 작업(파일추가, 편집, 삭제)를 진행하고 완료시 SVN 으로 돌아와 Commit 준비를 한다.

작업후 커밋직전 확인파일추가시 반드시 add 명령으로 추가 후 Commit 해야 한다.

위의 프로젝트에서 readme.txt 라는 파일이 추가 되었기 때문에 Status 부분에 unversioned 라고 나타났다.
이는 현재 PC에서 파일이나 폴더가 새로 추가 되었으나 SVN에 적용이 안 됐다는 뜯이고 이를 적용하기 위해서 Add 명령을 주어야 한다.
*Add recursive 는 현재 폴더와 하위폴더를 탐색해서 자동적으로 모두 Add 시켜주는 명령이다. 만일 하위 내용까지 모든 내용을 파악하고 있다면 사용해도 좋지만 가능하면 직접 해당파일을 선택(다중선택)해서 Add 하는게 좋다.

Add 후 화면Add 후 Status에 added 된걸 확인 할 수 있다.


Add 가 되었으니 이제 Commit 을 하자.

프로젝트를 Commit폴더를 선택하고 Commit 을 누른다.

SVN 에서 Commit 은 전체 프로젝트 기준이 아닌 파일이나 폴더단위로 가능하다 만일 파일 하나만 서버에 적용하고 싶으면 파일을 선택후 Commit 을 누르면 되고 폴더를 선택하면 폴더 하위에 있는 내용이 적용된다.

Commit 창 내용입력Commit 을 위해 Message 내용을 입력하고 Commit 될 파일을 확인하고 OK 를 누른다.


Enter log message 부분에서 로그 내용을 입력하고 OK 를 누르면 Commit 이 완료된다


삽질 - Zend Decoder 안풀림..ㅜㅡ

컴글 2010. 6. 29. 17:35 posted by 배제군
PHP로 간단한 작업이 생겨 확인을 하는 중 젠드 인코딩된 파일을 발견했다.

'뭐.. 이것쯤이야.. 젠드 디코더로 풀어버리면 그만이지' 란 생각으로 파일질라로 해당 파일을 다운받아 변환기로 돌렸다.

하지만.. 두둥..
PHP Fatal error:  This encoded file is corrupted. Please refer to http://www.zend.com/support/support_faq.php?id=loader_file_corrupt for further help in XXXXX.php on line 0
Content-type: text/html
X-Powered-By: PHP/4.4.0
아니.. 이뭐병?! 4 버젼대로 작성된 오래된 파일이라 당연히 풀릴줄 알았것만..

디코더 5버젼으로 해도 마찬가지.. 결국.. 구글신의 힘을 빌어 데이터 천국을 헤엄쳤다.

그러나 온라인 디코더사이트나 다른 디코더도 결국 디코딩이 안됨.. 아흐....... ㅅㅂ을 연달아 외침.. ㅜㅡ

몇시간을 헤맨 끝에 결국 원점에서 다시 생각해보기로 했다.

처음 절차부터 시작..  오류 메세지를 유심히 살펴보는 중... 근데 오류 메세지가 어디서 많이 본듯해...

그러고 보니 이건................. 으.............

인코딩된 파일 FTP 업로드시 바이너리로 안 올리고 아스키 모드로 올렸을때 나오는 오류 메세지~!!!

그렇다.. 다운 받을때 바이너리 모드로 php 파일을 다운 받아야 하는데 아스키 모드로 받은 사실..

ㅂㅅ... 을 중얼 거리며 바이너리 모드로 변경받은 파일을 변환하니 역시나 잘된다.. 이런.. bullshit~

삽질 - QtWebkit Browser on Win CE 5

컴글 2010. 6. 26. 17:49 posted by 배제군
기기 : (망할)아이스테이션 S43 (넷포스)
OS : (짜증나는) Win CE 5

이 자식.. 짜증나는! 불만 많은! 느려터진! 놈!

무선랜 접속을 할때면 혼자서 왔다 갔다 꺼졌다 켜졌다... 리셋하면 주인님 ㅄ 하면서 어느새 되고.. *_*

그래도 인터넷은 된다는 기대감에 자체 브라우져(IE6)로 접속하면 오나전 느려터지고 좀만 이미지 많으면 다운 ㅡㅡ;;

결국 이노무 자식 브라우져를 다른 빠른 놈을 써야겠다고 생각해서 오페라 결정!!
검색해보니 WinCE 버젼은 없구만.. *_*;;

그럼 크롬이 쓰는 웹킷을 쓰자~!
오키~ 이놈은 Qt로 컴파일하면 웹킷을 얹어서 쓸 수 있겠군. ㅎㅎ
Qt 기본 Demo에 웹킷을 얹은 기본 브라우져 프로그램이 있는걸 알고 이뜸 ㅋ

근데 컴파일 환경, 개발환경.. 내 환경이랑 다 틀림.. 안화.. ㅡ_ㅡ;;

결국 버철PC로 XP 설치~!, VC2005 다운 설치~!, Qt 최신버젼 콜~!, WinCE 5 SDK 설치 완료~!
-설치 옵션

vcvars32.bat
configure -platform win32-msvc2005 -xplatform wince50standard-mipsii-msvc2005 -webkit
set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\ce\include;C:\Program Files\Windows CE Tools\wce500\STANDARDSDK_500\Include\MIPSII_FP
set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\ce\lib\mipsii_fp;C:\Program Files\Windows CE Tools\wce500\STANDARDSDK_500\Lib\MIPSII_FP
set PATH=C:\Program Files\Microsoft Visual Studio 8\VC\ce\bin\x86_mips;%PATH%;
setcepaths wince50standard-mipsii-msvc2005
nmake
망할 configure 할때 -webkit 을 안 쳤다고 browser 데모 컴파일이 안 됐음.. 아흑.. ㅠㅡ
저거 컴파일 한다고 반나절 소비 ㅜㅠ
결국 다 지우고 다시  -webkit 옵션 추가 후 컴파일.. 다시 반나절 이상시간 소요... ㅜㅡ
(컴 사양도 쿼드에 4기가인데 가상PC는 어쩔수 없다능..)

그렇게 시간은 흘러 Qt 컴파일이 완료되고~~ Qt 용 dll 파일과 WinCE dll 파일을 넷포스 Window 폴더에 복사 후 감격의 실행파일 실행~!!!

그리고 결과~~~!





S43에서 Webkit 브라우져 실행 안내 창

메모리 부족으로 실행할 수 없다는 메세지 ㅡㅜ



아.. ㅅㅂ........ 다른 데모는 돌아가는데 저것만.. ;;

인터넷 연결되면 그냥 RDP(원격 데스크탑)로 접속사용 콜.. -_-;;

아래는 새로 모듈제작을 해볼때 느꼈던 느낌과 생각을 적은 것이다.
국내 최고의 오픈소스 프로그램으로 생각하고 있지만 모듈을 개발해봄으로써 느낀 안타까움을 나열해 보고자 한다.

1. 개발 문서만을 보고서는 도저히 개발을 할 수가 없다.

 - 정말 개발문서만 보고 모듈을 만드신 분이 있을까?? 개발문서에 링크된 문서들은 언제 복구될것인지 안타까울뿐이다.

2. 질문&답변란만 보고서는 도움을 받을 수가 없다.

 - 나 처럼 질문 자체를 검색의 무지로 생각하고 이미 질문된 답변으로 해결 보려는 사람에게는 크나큰 어려움이다.
결국 해결을 못 봐 질문을 올렸지만 너무 상세하게 질문한 것인지 몇일 답변이 없어 삭제하고 다시 검색하고 해결책을 마련했다.
답변은 안 달아 준다는 걸 나쁘게 보는게 아니라 많은 피드백이 없어 안타깝다는 것이다.

3. 빠른 업데이트는 좋지만 사실 무섭다.. ㄷㄷㄷ

  - 빠른 업데이트는 그 만큼 수 많은 요구와 기능을 추가하는 것인데 정말 대단하다..  하지만.. 한편으로는 업데이트 될때마다 기능상에 제약이나 모듈의 변경 등등.. 바뀌는 것이 없나 걱정이 된다... 한마디로 업데이트 되면 무섭다.


그렇게 키보드를 두드려가며...........

이제 슬슬 이해되어 간다.
아직 제작단계라 배포는 안 했지만 게시판 뒤적거리며 검색하고 모듈 소스 뒤적거리며 확인 하고..
XE 폴더내의 파일속 전체 문자열 검색을 수도 없이 하며 구조를 익혔다.
에디트 플러스를 켜고 검색 - 여러파일에서 찾기를 누르고 함수명.. 변수명.. 클래스명.. 엄청 검색했다.
이렇게 메소드 및 클래스를 확인 해야 하는 것인가? 란 의문도 계속들었다.
그래서 제일 필요성을 느낀건 프로그램 개발 구조라는 것이다.
스트러츠2+iBatis+Spring 의 자바프로젝트를 경험했기에 프레임웍 자체는 두려움이 없었지만 개발문서에서 완전히 상황 역전됐다.
웬만큼 봐선 도대체 구조파악이 안되는 것이다.
겨우겨우 봐서 겨우 이해될랑 말랑하는게 웬만한 사람 아니고선 엄두를 내기 힘들것 같다.
(평소 내 이해력이 좀 후달린다는 걸 느끼는데 그것때문일까.. ㄷㄷ)

설정XML, MVC클래스, View HTML, 쿼리XML.. 작성하는 건 어렵지 않다.
하지만 좀 더 정확하고 상세한 문서가 존재한다면 더욱 많은 개발자의 지원이 존재하는 국내 최고의 오픈소스가 되지 않을까? 한다.

p.s XE 개발에 항상 힘쓰시는 개발자 분들에게 도움은 되지 못할지언정 불만만 쏟아 낸것 같아 송구한 마음이 한가득합니다. ㅠㅠ
오픈소스이기에 어떻게라도 도움을 드릴 수 있으면 좋겠지만 첫발을 내 딛는게 쉽지가 않네요.
기회가 되면 힘이 될 수 있게 지원하겠습니다.
항상 고생하시는 Zero님과 다른 개발자님들 힘네세요~ 그리고 죄송합니다. -.- _._

'컴글' 카테고리의 다른 글

Qt ShortCut 코드 삽질  (0) 2010.09.17
Qt에서 hitButton를 이용한 클릭영역 지정  (0) 2010.09.05
SVN Tool - RapidSVN 사용법  (0) 2010.08.17
삽질 - Zend Decoder 안풀림..ㅜㅡ  (8) 2010.06.29
삽질 - QtWebkit Browser on Win CE 5  (3) 2010.06.26