everydayminder

learn something everyday

Archive for June 2010

hudson – 프로젝트 생성하기

leave a comment »

Hudson을 설치했으므로, 이제 프로젝트를 생성하자.

1. 작업 생성하기

“새작업”을 클릭하여, 새 프로젝트를 생성한다.
임의의 프로젝트 이름을 입력하고, “Build a free-style software project”를 선택한다.

다음과 같은 세부 설정 화면을 볼 수 있다.
필요한 정보를 모두 입력한다.

이번에 http://www.unfuddle.com에 생성한 무료 SVN을 연결하여 프로젝트를 생성하기로 한다.
Source Code Management 메뉴로부터, Subversion을 선택하면, 다음 화면을 볼 수 있다.


Repository URL 옆의 ? 버튼을 클릭하여, SVN 위치와 인증 정보를 모두 입력하자.
아래의 화면과 같이 나올텐데, “this link”를 클릭하면 인증 정보를 입력할 수 있는 화면이 나온다.


다음 작업은 Hudson으로 build 작업을 지정하여 소스 변경시 혹은 주기적으로 Continuous Integration이 되도록 해야 할 것이다.

 

Written by everydayminder

June 26, 2010 at 11:47

Posted in tools

Tagged with , ,

버스/지하철/택시를 타고

leave a comment »

어제 퇴근 길에 라디오에서 들었다.

“나는 버스/지하철/택시를 타고 가는 중이야.”

영어로는,

I’m on the bus.
I’m on the subway.
I’m in a taxi.

숙어란다.
그냥 외우라던데.

Written by everydayminder

June 24, 2010 at 23:28

Posted in Life/English

Tagged with ,

composition vs. aggregation

leave a comment »

UML 다이어그램에서 특히 집합 관계를 표시할 때, 헷갈리는 용어이다.

‘A가 B에 속해있다.’ 혹은 ‘B는 A를 포함한다’의 개념을 표현하고자 할 때 사용하는 표기인데,
어떤 경우에 이 관계는 composition 또는 aggregation이라고 말할 수 있는 것일까?

이에 대해, googling을 하던 중, 적어도 나에게는 와닿는 포스팅이 있어
소개하고자 한다.

물론, 단지 이 글 뿐만 아니라 다른 곳으로부터도 참고하였다.

참고 :
http://www.bestarticle.org/computer/association-aggregation-and-composition-what-are-they-and-how-do-they-differ/

Aggregation

  • ◇–, 실선으로 표시
  • 대상 객체에 대한 possession을 나타낸다. (ownership 아님)
  • 순환 관계는 안됨 (자기 자신을 포함할 수 없음)
  • “has-a” 관계
  • “A가 B를 포함한다”고 했을 경우, B는 A의 구성요소이기도 하지만, A와 별도의 객체이다. 즉, 별도로 존재가능하다.
  • “근로자”와 “주소” 객체가 있다고 할 경우, 모든 근로자는 주소를 갖고 있지만, 근로자 객체가 소멸한다고 해도 주소는 유효하다.

Composition

  • ◆–, 실선으로 표시
  • 대상 객체는 ownership을 나타낸다.
  • aggregation과 비슷하나, 큰 차이점은 전체-부분에 대한 관계성이며, 부분 객체는 전체 객체 없이 별도로 존재할 수 없다.
  • 즉, ‘A가 B를 포함한다”고 했을 경우, composition에서는 A가 없는 상태에서의 B는 존재할 수 없으며, A가 소멸될 경우 B도 함께 소멸한다.
  • 예를 들어, “근로자”와 “email주소” 객체가 있다고 했을 경우, 해당 근로자 객체가 소멸할 경우, 해당 근로자의 email주소 객체도 함께 소멸한다.
  • “contains-a” 관계
  • 순환 관계는 안됨 (자기 자신을 포함할 수 없음)

Aggregation vs Composition

  • aggregation은 “has-a” 관계를, composition은 “contains-a” 또는 “전체-부분” 관계를 표현
  • aggregation은 “전체”-“부분” 모두 독립적으로 존재할 수 있으나, composition은 “전체”가 “부분”의 생명 주기를 통제한다.
  • aggregation은 composition에 비해 약한 관계임
  • composition은 한 개의 전체에 한 개만 속할 수 있으나, aggregation은 여러 개의 전체에 0~n개 속할 수 있다.

Written by everydayminder

June 24, 2010 at 05:41

Posted in UML

Tagged with , , ,

how to go about ~ing vs. how to ~

leave a comment »

~하는 것에 대해 자세히 하나씩 알려주다.

Q) Please tell me how to use it.
A) 매뉴얼 읽어봐

Q) Please tell me how to go about using it.
A) 우선, 어찌어찌하고, 그 다음은 어떻게 한 다음에, 이렇게 저렇게 해봐.

Written by everydayminder

June 23, 2010 at 14:02

Posted in Life/English

Tagged with ,

nothing close to : ~와 거리가 먼

leave a comment »

What I have seen was nothing close to being civilized.
내가 본 것은 성숙된 것과는 거리가 멀었다.

Written by everydayminder

June 22, 2010 at 06:49

Posted in Life/English

Tagged with ,

Eclipse의 내장 hashCode()+equals() VS. Apache의 HashCodeBuilder+EqualsBuilder

leave a comment »

Eclipse에 내장된 기능으로도 특정 객체의 hashCode()와 equals()를 작성할 수 있다.

사용법은,
마우스 오른쪽 클릭하여 나오는 context 메뉴로부터 Source > Generate hashCode() and equals() … 를 클릭하면 된다.


그러면, 다음과 같은 코드가 생성될 것이다.

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((link == null) ? 0 : link.hashCode());
		result = prime * result
				+ ((menuCode == null) ? 0 : menuCode.hashCode());
		result = prime * result
				+ ((menuName == null) ? 0 : menuName.hashCode());
		result = prime * result
				+ ((upperCode == null) ? 0 : upperCode.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		MenuItem other = (MenuItem) obj;
		if (link == null) {
			if (other.link != null)
				return false;
		} else if (!link.equals(other.link))
			return false;
		if (menuCode == null) {
			if (other.menuCode != null)
				return false;
		} else if (!menuCode.equals(other.menuCode))
			return false;
		if (menuName == null) {
			if (other.menuName != null)
				return false;
		} else if (!menuName.equals(other.menuName))
			return false;
		if (upperCode == null) {
			if (other.upperCode != null)
				return false;
		} else if (!upperCode.equals(other.upperCode))
			return false;
		return true;
	}

그런데, Apache의 라이브러리를 사용하면, 보다 깔끔한(!) 코드와 가독성을 얻을 수 있다.
우선, common-lang*.jar를 구하고, 다음과 같이 작성한다.

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

...

	@Override
	public int hashCode() {
		return new HashCodeBuilder(3, 11)
		.append(upperCode)
		.append(menuCode)
		.append(menuName)
		.append(link)
		.toHashCode();
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		
		MenuItem other = (MenuItem) obj;
		
		return new EqualsBuilder()
		.append(this.upperCode, other.upperCode)
		.append(this.menuCode, 	other.menuCode)
		.append(this.menuName, 	other.menuName)
		.append(this.link, 		other.link)
		.isEquals();
	}

Written by everydayminder

June 21, 2010 at 07:20

Google Maps API Tutorial Link

leave a comment »

Mike Williams의 홈페이지
http://econym.org.uk/gmap/

Google Maps API를 사용하여 할 수 있는 것들과 방법에 대한 정리가 되어 있다.
참고하자.

Written by everydayminder

June 18, 2010 at 05:17

Posted in Mashup

Tagged with , , ,

Twitter4J 설치/테스트

leave a comment »

Twitter API는 http://apiwiki.twitter.com/ 에서 세부
정보를 찾아볼 수 있다.

합병되기 전/후의 두 개의 회사가 연관되어 있어, 두 개 (혹은 세 개)의 API 그룹으로 구성되어 있다.

HTTP 기반의 프로토콜인데, 여러 언어로 라이브러리가 공개되어 있다.

그 중, java로 공개된 라이브러리로는 Twitter4J, java-twitter, jtwitter 등이 있으며,

사용자 층이 두텁고, 업데이트가 최근까지 가장 활발한 Twitter4J를 선택하여 일부 메소드를 테스트해 보았다.

1. Twitter4J의 공식 사이트 : http://twitter4j.org/

2. Twitter4J의 활용예 (* YouTube 동영상 참조 : http://www.youtube.com/watch?v=2-iz5CduZdw)

  * 위의 예는 NetBeans를 활용한 예임

3. 설치하기(on Eclipse)

  • 위의 사이트에서 해당 라이브러리를 다운로드한다.

  • 다운받은 파일을 적당한 곳에 압축해제한다.

  • Eclipse에서 새 프로젝트를 하나 생성한다. 예 : TwitterTest

  • Runtime Library로 twitter4j-core-2.1.3-SNAPSHOT.jar와
    twitter4j-httpclient-support-2.1.3-SNAPSHOT.jar를 설치한다.

4. 특이사항

  • 위의 동영상에는 나와 있지 않았고,  위의 설치과정 후 테스트 코드를 간략하게 작성하여 실행하였을 때 추가적으로 필요한
    라이브러리가 있는 것으로 확인함
  • apache 사이트로부터 다음 파일들을 별도로 구한 후, runtime library build path에 추가한다.
    • httpcomponents-client-4.0.1-bin.zip (이 속에 있는 모든 jar)
    • httpcomponents-core-4.0.1-bin.zip (이 속에 있는 모든 jar)
    • apache-mime4j-0.4.jar
    • commons-loggin-1.1.1.jar

5. 테스트

  • 나의 timeline 가져오기
twitter = new TwitterFactory().getInstance("yourid", "yourpassword");
List statusList = twitter.getFriendsTimeline();
System.out.println("");
for(Status status : statusList) {
    System.out.println(status.getUser().getName() + ":" + status.getText());
}

[결과]


오상영:twhirl (windows용)에서는 검색어 입력에 한글이 되지 않는 것 같네요. 방법이 따로 있나요?
유시민:오늘점심은피자시켜먹었어요. 떨어진사람이식당돌아다니면서 인사받기도민망하고 왠지좀그래서^^;;;;;;
Kyuhwan Yun:@HeyMrJee 요즘 모기들이 진화하고 있나봐요 ㅎㅎ
유시민:자꾸무효표논란이있고 누가찍었니안찍었니 얘기들이나오니 마음이무거워서 긴글하나올렸습니다.
너무길어서트윗에는못썼어요.www.usimin.net에올렸어요
Kyuhwan Yun:@kicu2000 오늘 아침 스포츠 뉴스에서 스페인 1.5군이 출전했다고 했음 ㅋ
오상영:김연아 금메달을 국제기록문화전시회에서 보고 왔습니다. http://yfrog.com/0diavvj
JK Jee:http://bit.ly/dx5eQK “방송사에서는 물고기를 방류하는 현장 화면을 찍지 못해 보도를 못한다고 말한다.
그럼 천안함 사건의 경우 어뢰가 터지는 순간을 방송사 기자들이 직접 봐서 관련 보도를 내보내고 있느냐.”
김주하:성적에 상관없이 우리모두 하나됨이 더욱좋죠^^ 바램은 우승! ㅎㅎ RT @talkeee: @kimjuha 이번 월드컵
한국대표팀 성적 예상 어떻게 하시나요 ^^
최용석:아…넵 허승준님 반갑습니다…즐거운 주말보내세요…^^ RT @SJHuh: @myclex 어제 인사드린 허승준입니다 ^^ 강연
잘 들었습니다. 지나치게 편안한(응?!!) 분위기 속에서의 강연이라 힘드셨을 … http://dw.am/L2zCi
김주하:계정을 선물받고 시작했어요. RT @MobiusHolic: @kimjuha 김주하아나운서님은 어떤계기로 트위터를
시작하신건가요?
JK Jee:@kyuhwany 예리한 모기인걸…
김주하:네. 예전 PC 통신시절에 바로만나자는 것을 번개라고 @kimseongjoo 님께서 시작하셨다고 알고 있습니다. RT
@Ruingarden: @kimjuha 혹시 번개라는 단어가 어떻게해서 나왔는지 아세요? 하늘에서 내리는 번개말구요ㅋㅋ갑자기
궁금해져
Autodesk Korea:[이벤트] 솔루션데이행사 http://durl.kr/mg9y 를 RT & 행사등록 회원ID를
보내주신 10분께 달콤쌉사름한 던킨교환권(6천원)을 드립니다! 마감6시/발표6시반! #autodesk_event
CNN Breaking News:BP positioning cap over ruptured well in Gulf of
Mexico. Watch live http://live.cnn.com/
Autodesk Korea:[이벤트 예고] 솔루션데이 3번째 트윗이벤트 공지합니다! 던킨도너츠 교환권 10분의 주인공은
누구일까요? 두둥~이벤트는 11시에 소개되고 당첨자는 6시반 발표!~많은 참여부탁드려요~#autodesk_event
YONG HO LEE:@HeyMrJee 축구 스페인이 1.5가 출전한 느낌이~~ ㅎㅎ
김주하:아닙니다!! 모꼬지 신청하시면 @twtbs에서 DM 으로 안무 영상 보내드려요. RT @ehdwnek: @kimjuha
주하님~똑같이하는거에요??도레미송으루?? ㅋ
김주하:제 춤이 그리 보고싶으세요? ㅠㅠ RT @ROSAinSeoul: @kimjuha 네! 받은지 이틀정도되었어요 밥먹고
소화시키면서 연습했는데요 한번만해도 헥헥 아나운서님도 그간 바쁘셨으니 오늘 맹연습 하셔야죠^^ 자봉만하지 말고 함께해요!^^

  • DirectMessage 보내기
Place p = twitter.getGeoDetails("thatseeyou");
System.out.println("name:" + p.getName() + ",country:" + p.getCountry() + ",fullname:" + p.getFullName() +
    ",placetype:" + p.getPlaceType() + ",street address:" + p.getStreetAddress() + ",URL:" + p.getURL());

[결과]

오과장님이 수신 확인해 줌

  • GeoQuery 하기
GeoQuery gq = new GeoQuery("74.125.71.104");     // 74.125.71.104 : google.com
ResponseList list = twitter.getNearbyPlaces(gq);
for(Place p : list) {
    System.out.println(p.getFullName());
}

[결과]

San Jose, CA
Fremont, CA
Palo Alto, CA
West Santa Clara, CA

  • Search 하기
Query query = new Query("김연아");
QueryResult result = twitter.search(query);
List tweetList = result.getTweets();
for(Tweet tweet : tweetList) {
    System.out.println("[" + tweet.getFromUser() + "] : " + tweet.getText());
}

[결과]

    [Last.fm] 이승기 – Smile Boy (Rock Ver.) (with 김연아): http://www.last.fm/music/%EC%9D%B4%EC%8A%B9%EA%B8%B0 http://bit.ly/9xoB1x
    [khmer365] : [MV HD]Lee Seung Gi (이승기) & Kim Yuna (김연아) – Smile Boy (스마일 보이): <!– // –><![CDATA[
    var oldLoad = window… http://tinyurl.com/2uo8byc
    [cathrinepark] : http://sori.la/567Sx ♥ 승리의 함성 (The Shouts Of Reds Part 2) (Featuring 김연아)-빅뱅 #soribada
    대~~ 한민국 승리의함성
    [anidia80] : @WizardJinny 김연아 식단..
    [meisiank] : #nowplaying The Shouts Of Reds Part 2 (Feat. 김연아) ♪ Bigbang ft Trans Fixion http://bit.ly/b9lPi1 via @twitbird
    [chacannara] : @refreshmyself 이쁘니 왔네?! 김연아… 비싸지…
    [zzambo] : fallowing 김연아
    [jedicat1] : ^^ 대박.뭐라 말할 수 없음 ..RT @daidai4141: RT @nubesradi: RT @gomdal: 아놔 ㅋㅋ RT @Jooru: ㅋㅋ RT @JunorArt: ㅋㅋ 김연아 코스프레 랰ㅋㅋ 촘 쩌네요 ㅋㅋ http://j.mp/dydJPu
    [nanibasuki] : Check this video out — [MV HD]Lee Seung Gi (이승기) & Kim Yuna (김연아) – Smile Boy (스마일 보이) http://youtu.be/_S1mvnOK2aY
    [RudyWorld] : @LovelyGumiii 야 김연아
    [kkakjangee] : [MV] 김연아 & 이승기 – Smile Boy http://goo.gl/yEKG
    [stickjin] : #nowplaying
    빅뱅 @BigBangOfficial ♪ 승리의 함성 (The Shouts Of Reds Part2) (Feat. 김연아)
    – YouTube http://tln.kr/5ltr
    [lunasaur] : ♥ 승리의 함성 (The Shouts Of Reds Part 2) (Feat. 김연아) by 빅뱅(Bigbang), 트랜스픽션(Trans Fixion) #lastfm: http://bit.ly/bo6nID
    [YuNarsha] : @anicheng @TrendReportFil 김연아 선수의 트위터는 @Yunaaaa 가 맞습니다. =)
    [Yellsvan] : RT @eunmars: @keybaksa @jaed74 @lec3660 @baekban @rosepeche @ad1gio  김연아 방송 결방이 결실을 맺기를 바랍니다. ;

6. 기타

  • 다음의 링크를 보면, Twitter API로 할 수 있는 일들을 예상할 수 있을 것임 (http://twitter4j.org/en/javadoc/index.html)

    예) Tweet 읽기/쓰기, 친구 목록 가져오기, Follower 가져오기, 위치정보 가져오기, Trend 조회, DM
    발송/조회, 스팸 처리, 타임라인 조회, Status 조회 등

Written by everydayminder

June 16, 2010 at 07:21

Posted in Mashup

Tagged with , , , , ,

Let’s go dancing? Let’s go to dance? Let’s go dance?

leave a comment »

어떤 것이 맞는가?

어제 퇴근 길에 라디오에서 이 내용이 나왔다.

Let’s go to dance. 이 문장이 문법적으로 맞는 문장이다. 그러나, 네이티브는 이 문장을 쓰지 않는다고 한다.

대신,

Let’s go dancing이나 Let’s go dance. 의 형태 문장을 더 많이 쓴다고.
알아두자.

Written by everydayminder

June 15, 2010 at 09:09

Posted in Life/English

Tagged with ,

Hudson – 설치하기

leave a comment »

이제는 일일 빌드보다 Continuous Integration(지속적인 통합)이 트렌드이다. 이와 관련하여, 수많은 종류의 tool이 존재하나, 그 중 Hudson이라는 무료 CI 툴을 설치하고, 주요 설정 방법, 사용방법에 대해 정리하고자 한다.

1. 준비물

  • JDK 
  • Tomcat (설치 방법에 따라 다름)
  • Hudson

2. 설치 준비하기
  (1) JDK

  •  http://java.sun.com 으로부터 JDK를 다운로드하여 설치함
  • JAVA_HOME을 jdk 설치 디렉토리로 지정함
  (2) Tomcat

  • http://tomcat.apache.org 로부터 tomcat을 다운로드하여 설치함
  • CATALINA_HOME을 tomcat의 설치 디렉토리로 지정함

  (3) Hudson

  • http://hudson-ci.org로부터 hudson을 다운로드하여 설치함
  • hudson.zip을 받았다면, hudson.war로 이름 변경

3. 설치하기
  (1) Tomcat에 연동하여 설치하기

  • tomcat 설치 디렉토리의 webapps에 hudson.war를 복사한다.
  • tomcat을 시작시킨다.
  • tomcat이 실행되면서 hudson.war의 설치가 진행된다.
  • http://localhost:8080/hudson 을 입력한다. 끝.

  (2) Tomcat과 독립적으로 설치하기

  • 항상 웹 서버를 띄워놓고 작업하는 것만이 좋은 해결책은 아님.
  • 별도의 애플리케이션으로 독립적으로 띄워보자.
  • hudson.bat 또는 hudson.sh을 다음과 같이 작성한다.
java -DHUDSON_HOME=C:/dev/hudson -jar hudson.war -Xms370m -Xmx370m --httpPort=8001 --ajp13Port=8019 > error.log.txt
  • 단, 본인은 hudson.war의 위치가 C:/dev/hudson이다.
  • 콘솔로 hudson이 동작한다.
  • http://localhost:8001 을 입력한다. 끝.

Written by everydayminder

June 14, 2010 at 09:01