넷빈즈(NetBeans)를 구하고 설치 해 보자. v1.0

넷빈즈는 3.5 버전에 들어서면서 비약적인 성능 향상을 가져왔다.
그때 당시 개발 모토가 'Improve Perfomance' 였다고하니 SUN에서 얼마나
공을 들였는지 알만 하다. 덕분에 내가 넷빈즈에 빠져들게 되어버린 계기가 되었다(웃음)

지금도 마찬가지지만 개발 할때 코드를 만들어내는것도 재미있었지만
그에 못지않게 이런저런 IDE를 사용 하는것 역시 개발하는과정에서 맛보는 재미중의
하나였기 때문에 회사에서 특별히 개발툴을 지정하지 않으면 새 프로젝트 시작 할 때마다
다른 IDE를 사용 하고 있었다.

넷빈즈를 IDE로 결정한 그 당시 계획은 '다음번 프로젝트에선 Eclips 를 써봐야지' 라고 구상
하고 있었다..( 하지만 이 결심은 지켜지지 못했지만.. ^^ )

불행인지 다행인지 그때 넷빈즈 버전은 3.1 이었다. 사용하면서 이놈의 마이너스러움에
어찌나 빠져 들던지...

서두가 길었다.. 제목에 충실 해 지자..

------------------------------------------------------------------------

설치 진행에 앞서 기본적으로 jdk 1.4.2 이상이 설치 되어 있어야한다.
(설치에 필요한 권장 사항이다. 설치 후 프로젝트를 생성 하고 jdk를 바꿔가며
빌드 할 수 있으니 다른 버전의 jdk를 사용 한다고 해서 걱정하지말자.)
전에는 sun사이트에서 jdk와 netbeans를 묶은 패키지를 받을 수 있었는데
NetBeans를 완전히 NetBeans.org에서 관리 하도록 했는지 묶음 패키지를 받는
경로는 사라지고 없다..( 물론 archive를 뒤져보면 나오긴 하겠지만.. )
그리고 실무에서 개발을 하고 있는 상황이라면 프로젝트별로 사용하는 jdk버전이
있을텐데 괜히 묶여 나오면 설치가 꺼려지기도 할 것이다.
본인은 jdk가 번들되지 않은 netbeans + 개발자가 선택한 jdk버전 조합으로 가는게
옳다고 생각 하기 때문에 jdk와 netbeans는 따로 설치 할 수 있는 standalone버전으로
설명 할 것이다.

(물론 jdk가 설치되어 있지 않고, 학습이 목적이라면 jdk번들된 netbeans는 훌륭한
선택이 될 수 있을것이다.)

우선 http://www.netbeans.info/downloads/download.php?a=arch&p=1 에 들러
NetBeans 4.1을 다운받자.( 아니, 5.0이 릴리즈 된지도 꽤 되었고.. 5.5 릴리즈가 목전인데
왜 4.1 이냐고?  이유는 이미 http://www.yunsobi.com/tt/subby/2 에 밝혔다..)

netbeans.org의 메뉴구성도 뻑하면 바뀌는데 링크가 없어지더라도 놀라거나 하지 말고http://netbeans.org에서 다운로드 항목을 잘 좇아들어가면 받을 수 있을것이다.

netbeans 넷빈즈

자신의 os를 선택하고 현재 국제화 버전은 없으므로 영문판을 선택한다.
email 주소등은 기입하지 않아도 된다.

netbeans 넷빈즈

netbeans-4_1-windows.exe 를 선택하자.

netbeans 넷빈즈

SPL( SUN PUBLIC LICENCE ) 라이센스 동의 화면이 나오고 동의 하면

netbeans 넷빈즈
 
다운로드 페이지로 이동한다.
그럼 다운로드 받은 파일을 실행하여 설치를 진행 하자.

netbeans 넷빈즈

netbeans 넷빈즈

netbeans 넷빈즈

netbeans 넷빈즈

netbeans 넷빈즈

여기서 Default 로 사용 할 jdk버전을 선택한다.
여러 버전의 jdk를 사용하고 있다면 설치 후 프로젝트 단위로 jdk를 변경 할 수 있으니
여기선 설치에 권장하는 1.4.2 를 선택해 진행 한다.

netbeans 넷빈즈

netbeans 넷빈즈
 
설치 완료 화면.
windows 가 아닌 다른 OS라면
http://www.netbeans.org/community/releases/41/install.html
 문서를 참조하면 된다.
넷빈즈의 세계에 발을 들여 놓은 것을 축하한다.
앞으로 멋진 넷빈즈의 세계를 함께 탐험 해 보자.
 
ps. 개인적인 지식에는 한계가 있기 마련입니다. 제가 잘못 생각하고 있거나 다른점이 있다면
바로바로 알려주세요.
2007/02/28 13:08 2007/02/28 13:08
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

사내 사진동호회 첫 출사





우여곡절끝에 무사히.. 그리고 즐겁게 동호회 첫 출사를 마쳤습니다.
날이 흐리면 어쩌나 하는 우려와는 달리
오후에는 햇살이 나서 즐거운 모임 가질 수 있었습니다.

출사장소와 촬영포인트를 선정 해주신 김형섭팀장님..

처음으로 필름 촬영 해 본다던 승민.. 스캔받은거 살짝 봤다..
나랑 촬영 스타일도 다르고.. 인상적인 컷이 몇개 있더라..

이쁜 자제분과 함께 촬영지를 급습하신 정희준 부장님과 두 따님..
따님들 너무 귀여웠어요..

그리고, 또 한분의 불청객, 김노수팀장님. 어여쁘신 여친님을 대동하고
잠시 들러 주셨습니다.

막강 FD의 면모를 엿볼 수 있었던 최진원씨.. 그러다 반사판 전담 되시는거 아녜요? ㅎㅎ

출사에서 못뵐 줄 알았던 찰나 초대회장 박일환팀장님.. 편찮으신몸과 바쁜 스케줄을 극복하고 출사지에 나타나 주셔서.. 감동.. 이었습니다.

'찰나' 최초의 여성 회원이자 모델기근에서 찰나 첫 출사를 구원해 주신 여신같은 박경란씨.. 땡큐 베리베리 머치예요..

마지막으로 미모의 여친님을 드디어 공개하신 김동규 이사님..
부럽습니다. 그리고 마지막 저녘쏘신거 잘먹었습니다..다음번엔
저희들이 한턱 쏘겠습니다.

첫 출사에 단체사진을 빼먹는 초유의 사태가 발생 하긴 했지만..
단체 사진은 다음으로 미뤄도 괜찮겠죠?

다시한번 출사에 직간접적으로 참석해 주신 모든분께 수고와 감사의
말씀 전하며 다음에는 더 많은분들이 참여해 즐거운시간 나눌 수
있었으면 좋겠습니다.

2007/02/26 22:59 2007/02/26 22:59
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

WATIR javascript alert 창 처리하는 법

ruby 소스

# test.rb

require 'watir'
include Watir

test_site = 'http://localhost/test.html'

ie = IE.new

ie.goto(test_site)

Thread.new { system("rubyw \"jscriptExtraAlert.rb\"") }

ie.button(:id, 'btnAlert').click

ie.close


# jscriptExtraAlert.rb

require 'watir/WindowHelper'

helper = WindowHelper.new
helper.push_alert_button()


HTML

<HTML>

 <HEAD>
 
  <TITLE> New Document </TITLE>
 
  <script type="text/javascript">
    function test(){
        alert('test');
    }
  </script>
 </HEAD>

 <BODY>
 
 <form>
        <input type="button" id="btnAlert" value="clickMe" OnClick="test();" />
       
 </form>       
 
 </BODY>

</HTML>

2007/02/26 22:35 2007/02/26 22:35
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

Javascript Array 의 유용한 메소드들

Java 의 Vector 클래스는 내부적으로 배열을 사용하고 있다. 따라서 Vector 의 자바스크립트 버전을 만들기 위해서는 Array 객체에 대한 빵빵한 지식이 필요하다 (없어도 된다. 그러나 있으면 매우 좋다). 자! 배열의 기초와 유용한 메쏘드들을 살펴보자.

배열의 생성
1. 생성자를 이용한 생성
- new Array(arrayLength)
ex) friends = new Array(3); // 크기가 3 인 배열 생성
- new Array(element0, element1, ... , elementN)
ex) friends = new Array("개똥이", "소똥이", "말똥이"); // 크기 3인 배열 생성(값이 채워짐)
2. 직접 생성
friends = ["개똥이", "소똥이", "말똥이"];

간접적인 배열 길이의 증가
배열의 길이는 현재 배열의 길이보다 큰 인덱스를 사용하면 자동으로 증가한다. 아래는 배열의 길이가 0 인 객체 생성 후 99번째 요소에 값을 할당하여 배열의 길이가 100 으로 증가한 예이다.
friends = new Array();
friends[99] = "새똥이";

메쏘드 종류
concat : 두개의 배열을 합쳐 새로운 배열을 리턴한다. 원본 배열은 변하지 않는다.
문법
arrayName.concat(arrayName2, arrayName3, ... , arrayNameN)
인자
arrayName2, ... , arrayNameN - 합쳐질 인자들
예제
두 배열을 합치는 예
alpha = new Array("a", "b", "c");
numeric = new Array(1, 2, 3);
alphaNumeric = alpha.concat(numeric); // ["a", "b", "c", 1, 2, 3] 배열 생성

join : 모든 요소가 구분자로 이어진 문자열을 리턴한다. 디폴트 구분자는 comma(,) 이다.
문법
arrayName.join(separator)
인자
separator 요소와 요소 사이에 사용될 구분자 문자열
예제
friends = new Array("소똥이", "개똥이", "말똥이");
strFriends1 = friends.join(); // 소똥이,개똥이,말똥이
strFriends2 = friends.join(", "); // 소똥이, 개똥이, 말똥이
strFriends3 = friends.join(" + "); // 소똥이 + 개똥이 + 말똥이

pop : 배열의 마지막 요소를 삭제한 후 그 값을 리턴하고 배열의 크기를 줄인다.
문법
arrayName.pop()
인자
없음
예제
// 말똥이가 pop 되고 배열에는 "개똥이", "소똥이"만 남는다.
// 배열크기도 2로 줄어든다.
friends = ["개똥이", "소똥이", "말똥이"];
popped = friends.pop(); // popped 에 말똥이가 할당된다.

push : 배열에 하나 또는 여러개의 값을 넣고 새로운 배열의 길이를 리턴한다.(배열길이 증가)
문법
arrayName.push(element1, element2, ... , elementN)
인자
element1, element2, ... , elementN - 추가될 요소들
예제
friends = ["개똥이", "소똥이"];
pushed = friends.push("말똥이", "새똥이"); // ["개똥이", "소똥이", "말똥이", "새똥이"]
alert(pushed); // 4

reverse : 배열 요소를 역순으로 재배치한다(첫번째 요소는 마지막으로, 마지막 요소는 처음으로).
문법
arrayName.reverse()
인자
없음
예제
myArray = new Array("1", "2", "3");
myArray.reverse(); // ["3", "2", "1"]

shift : 첫번째 요소를 삭제하고 배열의 길이를 하나 줄인 후, 삭제된 요소를 리턴한다.
문법
arrayName.shift()
인자
없음
예제
friends = ["개똥이", "소똥이", "말똥이"];
shifted = friends.shift(); // ["소똥이", "말똥이"]
alert("삭제된 요소는 " + shifted + " 입니다."); // 개똥이

slice : 얇게 썬 슬라이스 치즈가 생각난다(^^). 배열의 일부를 잘라내어 새로운 배열을 리턴한다.
문법
arrayName.slice(begin[,end]) : [] 은 선택사항임
인자
begin - 0보다 큰 시작 인덱스 (필수)
end - 0보다 큰 끝 인덱스 (선택). 지정되지 않으면 배열의 끝까지 복사된다.
예제
numbers = ["0", "1", "2", "3", "4"];
sliced1 = numbers.slice(2, 3); // ["2"]
sliced2 = numbers.slice(2); // ["2", "3", "4"]

sort : 배열의 요소를 정렬한다.
문법
arrayName.sort([compareFunction])
인자
compareFunction - 정렬방법을 지정한 함수.
생략시에는 요소들의 toString() 값을 사전순서(Dictionary order) 대로 정렬한다.
compareFunction(a, b) 에서
1) a > b : 0 보다 큰 값 리턴
2) a = b : 0 리턴
3) a < b : 0 보다 작은 값 리턴
예제
// 역행 정렬
function descComparator(a, b) {
return b - a;
}

// 순행 정렬
function ascComparator(a, b) {
return a - b;
}

numbers = ["0", "1", "2", "3", "4"];
numbers.sort(); // ["1", "2", "3", "4", "5"]
numbers.sort(ascComparator); // ["1", "2", "3", "4", "5"]
numbers.sort(descComparator); // ["4", "3", "2", "1", "0"]

splice : 이전 배열요소를 삭제하고 새로운 내용물을 추가하는 형태로 배열 내용을 변경한다. 삭제된 요소들은 리턴된다. Vector 와 유사한 기능을 하므로 숙지하자.
문법
arrayName.splice(index, howMany, [element1][, ..., elementN])
인자
index - 변경하고자 하는 요소의 시작 인덱스
howMany - 삭제하고자 하는 이전 배열요소 갯수.
element,...,elementN - 추가하고자 하는 배열 요소들
예제
// numbers[2]부터 2개("2", "3")를 삭제하고 그 자리에 "5"와 "6" 을 삽입한다.
numbers = ["0", "1", "2", "3", "4"];
spliced = numbers.splice(2, 2, "5", "6"); // ["0", "1", "5", "6", "4"]
alert(spliced); // "2", "3"

unshift : 하나 또는 여러개의 요소를 배열의 왼쪽에 추가한다. 배열길이는 증가한다.
문법
arrayName.unshift(element1,..., elementN)
인자
element1,...,elementN - 배열의 앞쪽에 들어갈 요소들
예제
numbers = ["0", "1", "2"];
numbers.unshift("-2", "-1"); // ["-2", "-1", "0", "1", "2"]

출처 : http://blog.empas.com/jjh7266/6264266
2007/02/26 22:32 2007/02/26 22:32
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

넷빈즈(NetBeans)강좌 시작에 즈음하여.. v1.0

현재 자바진영에는 많은 통합개발환경(IDE)이 있다.
딱 떠오르는 것만 꼽아 보더라도

Eclips
Jbuilder
Sun One Studio
InteliJ
JCreator
JDeveloper
NetBeans

등.. 어디 짱박혀 이름도 모들어본 툴들도 아닌 그야말로 굵직굵직한  IDE들이
저렇게나 된다.

Eclips 와 NetBeans 등이 Open Source 로 세상에 선보이면서 많은 상용 IDE의 입지가
좁아진 것 또한 사실이다.

( 그 때문에 그 비싼 상용 IDE들이 무료로 전향 하기도 했다.. 물론 자사의 다른
제품군-정말 돈이되는-과의 궁합을 볼모로 잡고 있긴 하지만.. )

아마 현재 실 개발 업무에 가장많이 쓰이고 있는 IDE가 Eclips 와 JBuilder가 아닐까 한다.

뭐.. 자바 진영 개발자라면 다들 알고 있는.. 곁가지 이야기를 해 보자면
Open source 자바 IDE의 쌍두마차는 누가뭐래도 Eclips 와 NetBeans 이다.

Eclips는 IBM 에서.. NetBeans 는  JAVA를 세상에 선보인 SUN 에서 지원하에
개발되고 있다..

실제 국내 이용자 수를 본다면 Eclips >>> NetBeans 일거다..
개발자 커뮤니티를 가봐도 Eclips에 대한 질문이나 얘기는 많지만 상대적으로
NetBeans에 대한 이야기는 그닥 많지 않다.

먼저 IBM에서 양질의 IDE개발에 많은 힘을 쏟았고, 국내에 Eclips관련 책자도 몇권
나왔기에 개발자들이 친숙하게 접할 수 있는 환경이었지만 NetBeans의 경우
NetBeans의 전신인 forte 라는 IDE가 상용이었고 성능도 그닥 좋지 않았던 탓에
그나마 초장기 forte 유저에게 안좋은 인상을 남겨 그 사용자 수가 늘기 힘들었다.

그런데 나는 왜 NetBeans에 대해 이야기 하려 하는가?
우선, 사용자도 적지만 그것보다 국내 자바관련사이트에 변변한 튜토리얼조차
찾기가 힘들다. 물론 '목마른 놈이 우물 찾는다.'고 netbeans.org 에서 원문 읽어가면서
익혀도 된다... 하지만 같은 글이라도 한글로 된 문서가 있으면 한결 진입 장벽이
낮아지지 않을까?

둘째, 국내 넷빈즈 유저는 모르긴 몰라도 IDE관련 문제에 봉착하면 netbeans.org에서
영문서를 뒤져가며, 혹은 자신의 뛰어난 직감으로 하나씩 해결 해 나가고 있을
것이다.( 나역시, 버전3.1에서 버전4.0으로 이전해 처음 봉착한 한글표현 문제를 자력으로
해결하느라 진땀 뺀 적이 있다. )
이런 트러블 슈팅에대한 자료를 정리 하고 싶다.

마지막으로, 다분히 마이너스러운 성격으로 남들 다  같이 하는거 보단 조금은 유니크
한 것을 즐기는 나의 변태성향이 한 몫 하고 있기 때문일것이다.

넷빈즈 로드맵( http://www.netbeans.org/community/releases/roadmap.html )
을 보면 정말 정신 없이 새버전이 나온다..( 한버전의 모든기능을 둘러보지도
못하는 사이 새버전이 나와 버린다. )

그나마 매이저 버전업을 해 버리면 매뉴구성이나 환경 설정쪽이 많이 변하는경향이
있어서 어떤버전을 가지고 강좌를 꾸려 나갈까 고민이 좀 되긴 한다..
우선은 현업무에 많이 적용되있는 J2SDK 1.4 와 궁합이 잘 맞는 NetBeans 4.1을 가지고
이야기를 진행 하려고 한다. 아마 이강좌가 끝나기전에 J2SDK5.0이 일반적인 개발 환경이
되어 버릴지도..(그럼 그땐 5.0을 갖고 새로 시작하지 뭐. 웃음 )


ps. 개인적인 지식에는 한계가 있기 마련입니다. 제가 잘못 생각하고 있거나 다른점이 있다면
바로바로 알려주세요.

2007/02/26 19:28 2007/02/26 19:28
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

자.. 독립형 블로그 시작입니다.

2007/02/26 14:27

서비 낙서장

모 포탈의 블로그를 사용하다 이런저런 제약에 지치고..
외국서버에 호스팅을 시작하며 도메인 네임도 딴 김에
설치형 블로그도 같이 시작 해 봅니다.

지금도 cafe24에 계정에 포토갤러리를 유지하고 있지만 용량과 트래픽의 압박으로
외부에 이미지 링크를 노출하는것도 녹녹치 않았던게 사실입니다.

그러다 근래에 외국의 모 호스팅서비스를 알게되었는데..
한달 14달러에 200기가의 계정용량과 월 트래픽 2테라바이트의
무시무시한 서비스에 혹해 바로 페이팔로 결제하고 호스팅 서비스를
받기 시작했습니다.

월 2테라트래픽.. 이제 더이상 엑박은 없는겁니다. 후.후.후.
새로운 계정도 생겼고 내친김에 yunsobi.com 이라는 도메인도 마련해서
입주살이의 설움에서 한 걸음 벗어나고자 합니다.
2007/02/26 14:27 2007/02/26 14:27
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 훗...도메인 구입하셨단걸 보니 눈물을 앞을 가립니다..
    작년에 이벤트할때 도메인 3개 사뒀거든요.
    연결하려고 보니까 메일설정을 *******@google.com으로 한겁니다....
    문의메일 보내니 민증 스캔해서 보내래요.
    물론 귀찮아서 안했죠..아아아아-_-;

  2. 도메인명 정할 때 정말 아무도 안쓸거 같은 단어라고 생각하고
    찾아보면 어디선가 등록해 뒀더라구요..
    사전에도 없는단어들인데도요..

    그나저나 도메인을 세개나.. *.*
    유지비도 꽤들어갈거 같은데요..

    민증사본이나 통장사본 팩스 보내는거 그거 은근히 귀찮긴해요. ^^