everydayminder

learn something everyday

Posts Tagged ‘java

[eclipse plug-in] moreunit – 테스트 유닛은 어디에?

leave a comment »

moreunit은 작성중인 클래스에 테스트 코드가 작성되어 있는지를 시각적으로 보여주는 플러그인이다.

해당 플러그인에 대한 자세한 설명은

http://moreunit.sourceforge.net/index.html

에서 확인할 수 있다.

설치는, 직접 다운로드하여 플러그인 디렉토리에 풀어주거나,
이클립스 플러그인 설치 메뉴로부터,

http://moreunit.sourceforge.net/update-site/

를 등록하여 다른 플러그인 설치 과정과 동일하게 설치하면 된다.

본인의 경우, 별다른 기본 설정없이도 작성중인 클래스에 대해 테스트 클래스를 찾아 보여주었는데,
설정이 동작하지 않는다면 properties context menu로부터 세부 설정이 가능하다.

동작시의 화면은 moreunit의 공식사이트에 있는 것과 별 차이가 없다.

직접 테스트해본 화면은 다음과 같다.
우선, 아래 그림은 moreunit을 설치하기 전의 파일 구성이다.


이제 설치를 완료하고 나면, 똑같은 파일리스트에 빨간 동그라미를 표시한 것과 같이 오른쪽 상단에
녹색마크가 표시된다. 이는 해당 클래스에 테스트케이스가 작성되어 있음을 나타낸다.


표시가 생긴 임의의 클래스를 살펴보면, 테스트 케이스가 작성된 메소드에는 메소드의 좌측 라인에 마찬가지로
테스트케이스가 있음을 나타내는 마크가 보인다.


해당 라인에서 마우스 오른쪽 버튼을 클릭하여 context메뉴를 통해 이동하거나, 단축키 ctrl + j를 누른다면,
해당 메소드의 테스트케이스로 직접 이동할 수 있다.

Written by everydayminder

August 31, 2010 at 05:48

Posted in tools

Tagged with , , , , ,

JUnit으로 test coverage를 높이는 습관

leave a comment »

“우리나라 정서상 어렵다, 현실에 맞지 않다”는  말들을 하기도 하고, 듣기도 한다.

Rod Johson이 그의 저서 “Expert one-on-one J2EE Design and Development”에서
XP 기법을 소개하면서, 그 기법의 모든 것을 따르지는 않더라도 테스트 지향 개발 방법은 바람직하다고 하였다.

테스트에 대한 XP의 기법은,

  • 코드를 작성하기 전에 먼저 테스트 코드를 작성하자
  • 모든 코드는 단위 테스트 코드를 가져야 하고, 각 단위 테스트는 자동으로 실행될 수 있어야 한다.
  • 버그가 발견되면 버그를 고치기에 앞서, 버그를 다시 재현해 내는 테스트 케이스를 정의한 후에 고쳐야 한다.

테스트 코드를 먼저 작성하는 것이 더 유용하다는 관점에 대해서는,

  • 테스트 문서는 스펙 문서에 근거할 뿐만 아니라, 부가적인 정보를 제공한다.
  • 클래스나 컴포넌트 자체로만으로는 불확실한 내용이 테스트에서는 명확해진다. (사용처나 목적을 분명히 알고 작성할 것이므로)
  • 사실, 코드를 모두 작성한 후에 별도로 테스트 코드를 작성하는 것이 훨씬 어렵다.

그러므로, 한 메소드씩 작성하되, 코드-테스트코드의 순서가 아니라, 반대인 테스트코드-코드의 순서로 작성해 나가자.

Rod Jonhson은 test 메소드의 이름을 다음과 같이 작성하도록 권고한다.

test<Method to be tested><Description of test>

예를 들면,

private void testCommaDelimitedListToStringArrayLegalMatch(String[] components);
public void testCommaDelimitedListToStringArrayMatchWords();
public void testCommaDelimitedListToStringArraySingleString();

단순히 테스트의 coverage를 높이기 보다는, 테스트의 메소드 이름만으로도 테스트의 성격을 알 수 있도록 작성해 보자.
테스트내에서도 반복되는 테스트의 경우 private로 작성하고, 이를 활용하자.

위의 예는,

commaDelimitedListToStringArray(String s);

를  테스트한 예이다.

그리고, 테스트코드도 꾸준히 버전 관리를 해야 한다.

Written by everydayminder

August 1, 2010 at 15:33

Posted in java

Tagged with , , ,

hudson – FindBugs 연동하기

leave a comment »

“내가 작성한 코드는 잘 작성한 것일까?”

내가 작성한 코드가 이상없이 동작하는지 검사하기 위해, JUnit 등을 사용하여 테스트를 수행해 왔다면,
이제 이런 질문을 던져볼 만도 하다.

프로그래머가 작성한 코드는 “논리”의 집합이다.

그렇다면, 테스트케이스는 “그 논리가 적합한가?” 혹은 “그 논리에 헛점이 있는가?”를 검증하기 위한
것이라고 할 수 있을 것이다.

그러면, 그 “논리를 세우는 방법이 잘 되어 있는가?”를 검증하는 방법도 있을 법하다.

그래서, “코드검사”를 수행한다!!

코드 검사는 내가 작성하는 코드가 표준에 맞는지, 어떤 잠재적인 오류 패턴을 내포하고 있는지 등을
검사해 준다.

CheckStyle, PMD, FindBugs 등 여러 가지가 있으나, FindBugs를 hudson에 연동하여 사용해 보자.

FindBugs는 어디에?

FIndBugs는 http://findbugs.sourceforge.net 로부터 정보를 얻을 수 있다.
다운로드는 물론이고, 설명도 잘 되어 있다.

설정과정은?

지금까지 hudson과 연결한 다른 플러그인의 설치 방법과 크게 다르지 않다.

* FindBugs 설치하기/ 환경변수 등록하기
* Ant task에 FindBugs 등록하기
* Hudson내 설정하기

의 절차를 따를 것이다.

FindBugs 설치하기

왼쪽 메뉴에 크게 Downloads 섹션이 있다.
링크를 클릭하고, findbugs-1.3.9.zip을 다운 받았다.
이제 원하는 곳에 설치하자.
설치라고 해봐야, 압축풀고 환경변수에 등록하는 일 밖에 없다.

환경변수에

FINDBUGS_HOME=findbugs 설치디렉토리

로 지정하였다.

Ant Task에 FindBugs 등록하기

FindBugs 홈페이지에 자세한 설명이 되어 있다.
세부 내용은 다음 링크를 참조하자. http://findbugs.sourceforge.net/manual/anttask.html

환경변수 설정은 다음과 같이 한다.

<!-- FindBugs configuration/directories -->
	<property name="findbugs.home"  	value="${env.FINDBUGS_HOME}"/> 
	<path id="findbugs.classpath">
		<pathelement location="${findbugs.home}/lib/findbugs-ant.jar" />
	</path>

findbugs라는 task도 다음과 같이 정의한다.

<!-- target : FindBugs -->
	<taskdef name="findbugs" 
			classname="edu.umd.cs.findbugs.anttask.FindBugsTask" 
			classpathref="findbugs.classpath"/>
	
	<target name="findbugs">
		<mkdir dir="${report.home}/findbugs" />
		<findbugs home="${findbugs.home}"
                output="xml:withMessages"
                outputFile="${report.home}/findbugs/findbugs.xml" 
				excludeFilter="${report.home}/findbugs/findbugs-filter.xml" 
				timeout="1800000" jvmargs="-Xmx512m">
			<sourcePath path="${src.home}" />
			<class location="${build.home}" />
		</findbugs>
	</target>

Hudson내 설정하기

먼저, FindBugs 플러그인을 설치하자.
Hudson의 왼쪽 메뉴에 있는 “Hudson 관리하기”를 클릭하고 나타나는 화면으로부터, Manage Plugins를 클릭한다.
Availabe 탭을 클릭하여, 목록을 보면 다음과 같이 FindBugs plugin 항목이 보인다.

FindBugs를 체크하고, 우측 하단의 Install 버튼을 클릭한다.
해당 플러그인을 설치하면, 다음 화면이 나타난다.

이제, hudson을 재시작 해보자.
그러나, 아직 findbugs가 실행되는 것은 아니다. 앞에서 설정한 ant task가 실행되도록 설정하지 않았기 때문이다.

해당 프로젝트로부터 configure 를 클릭하여, ant task를 추가하자.
Build 부분에 Inovke Ant를 추가하여, Targets로 findbugs를 기록한다.
(앞에서 findbugs task를 이미 build.xml에 추가하였다.)


이대로 마치면, 다음 빌드에 findbugs는 실행되지만 hudson에서 직접 결과를 볼 수는 없을 것이다.
findbugs의 report를 publish 하자.

Post-build Actions에 가보면, 어느새 Publish FindBugs analysis results라는 옵션이 생겨있을 것이다.
이를 체크하고, 자신의프로젝트/report/findbugs/findbugs.xml 과 같은 형태로 적어주고 저장한다.


이제 새로 빌드해 보자.
그러면, 왼쪽 부분에 FindBugs Warnings라는 메뉴가 생길 것이다.

FindBugs가 무엇을 했는지는 클릭해 보면 알 수 있다.


(파일명은 일부러 가렸다.)
문제가 되는 부분의 파일명과 Distribution에 색깔로 위험 정도를 표시해 준다.

세부 항목을 잠시 살펴보면,


해당 부분에서 위와 같은 경고 사항이 발생했고, 해결 방법을 권고해 준다.
참고로 위의 예는, 변수를 선언했으나 사용하지 않았음을 알려주는 경우이다.

FindBugs 등의 코드 검사를 수행시키면, 참 많은 잔소리를 듣게 된다.
그러나, 이는 코드의 품질을 높일 수 있도록 도와주는 즐거운 잔소리가 분명하다.

보다 안전한 코딩을 위해, 기꺼이 잔소리를 들어보자!

Written by everydayminder

July 21, 2010 at 08:40

hudson – javadoc 생성하기

leave a comment »

사실, 개발하면서 주석을 다는 것은 무척이나 흥미로운 귀찮은 일이다.
게다가 포맷을 지키고, 어떤 파라미터가 넘겨지고, 리턴 값은 어떻고,
어떤 상황에서 어떤 exception이 던져진다는 것까지 써야 한다면 더더욱 그렇다.

보통 프로그램부터 작성한 후, 주석을 달라고 한다면,
주석을 다는 것이 아주 하기 싫은 일이 될 가능성이 크다고 생각한다.
주석을 달면서, 코드 리뷰도 하고, 분석도 하고, 수정도 하는 선순환이 되기 보다는
상당히 형식적인 주석 작업이 될 확률이 더 높아진다.

오히려, 보다 양질의 주석을 달기에 좋은 시기는 해당 부분을 프로그램화 할 때라고 생각한다.
모든 프로젝트를 완료한 후, javadoc을 사용하는 대신에
초기부터 javadoc을 사용해 보자.

자신이 작성하는 코드와 비슷한 시기에 산출물을 생성하는 것이다.
생성된 산출물을 확인하여, 편집하는 수고를 나중으로 미루지 말자.

다행히, hudson에서는 기본적으로 javadoc을 publish하는 기능이 내장되어 있다.

Hudson의 설정 변경하기

프로젝트의 configure 메뉴를 선택한다.
Post-build Actions에 보면, 별도의 플러그인을 설치하지 않아도 javadoc에 대한 옵션을 설정할 수 있도록
되어 있다.

Publish Javadoc 옵션을 체크하면, javadoc 문서의 위치를 지정할 수 있다.

프로젝트명/docs/javadoc 과 같이 적어준다.
(본인의 경우, 프로젝트명/docs/javadoc에 javadoc 문서가 생성되도록 설정해 두었다.)

ant task 추가하기
javadoc의 디렉토리를 다음과 같이 선언하고,

<!-- javadoc directory -->
<property name="javadoc.home" value="${basedir}/docs/javadoc" />

javadoc의 task를 다음과 같이 선언한다.

<!-- target : javadoc -->
<target name="javadoc">
<javadoc sourcepath="${src.home}" windowtitle="J's project"
destdir="${javadoc.home}" encoding="UTF-8" charset="UTF-8"
docencoding="UTF-8">
</javadoc>
</target>

이제, javadoc의 task까지 준비하였다.
ant task로서의 javadoc을 호출하기만 하면 될 것이다.

ant task 실행 설정하기

이제, configure에 Build에 보면, 지난 번에 설정한 all.emma.report  task가 보일 것이다.
그 밑에 새로운 ant task를 추가하자.


위의 설정으로부터, 새로운 ant task는 javadoc이라고 이름을 붙였다.

(일부러, all.emma.report에서 compile을 하도록 했으므로, 위의 ant task 작성시 depends를 설정하지 않았다.)

설정을 저장하고 나면,  hudson 좌측 메뉴에 javadoc 메뉴가 나타날 것이다.

Build Now 를 클릭하거나, 자동으로 빌드가 된 후에 javadoc 생성 여부를 확인해보자.

이로써, hudson에서 javadoc을 생성하고 publsih해 보았다.
이제, 개발하면서 자신의 프로젝트가 빌드되면서 생성되는 산출물의 결과도 함께 확인하며,
문서 작성도 함께 해보자.

Written by everydayminder

July 20, 2010 at 04:55

Posted in tools

Tagged with , , ,

hudson – emma와 연동하기 (2/2)

leave a comment »

지난 글에 설정한 바대로 ant task를 정상적으로 진행했다면,
ant task로 emma.report 태스크를 수행했을 때, coverage.html과 coverage.xml이 생성되었을 것이다.

참고로, 생성된 coverage.html을 살펴보자.


해당 패키지의 구성중, 클래스/메소드/블럭/라인 기준으로 어느 정도가 test로 커버 되고 있는지를 보여준다.
패키지 이름을 클릭하면,

패키지에 포함된 클래스들이 나타나고, 이 클래스들이 어느 정도 test로 커버되고 있는지 보여준다.
이 중, 아무 클래스나 또 클릭하게 되면,


클래스내의 메소드들이 test로 어떻게 커버되고 있는지 현황을 자세하게 보여주게 된다.

이 결과물은, 별도의 ant task를 수동으로 실행시켜 얻은 결과물이므로,
이제 hudson의 task에 연동하여, 자동으로 build가 되면 emma test를 수행하자.

그러면, hudson이 매 빌드마다 결과물을 자동으로 생성하여 dashboard로부터 볼 수 있도록 설정할 것이다.

“Hudson 관리 > Manage Plugins”를 클릭한다.
Available 탭을 클릭하여 살펴보면,


과 같이, Emma plugin 설치에 대한 체크박스가 있다.
이를 체크하고, 우측 하단 구석에 숨어있는 “Install” 버튼을 클릭하자.

성공적으로 Emma plugin을 설치했다면,
다음 화면을 보게 될 것이다.


설명 문구에 뜬 내용처럼, hudson을 재시작시켜 emma plugin이 정상 동작하도록 하자.
hudson에 다시 접속해보면, 외형상 변화는 아무 것도 나타나지 않는다.
(이제부터 hudson에 emma 설정을 해야 하니까)

프로젝트명을 클릭하고, Configure를 선택한다.
Post-build Actions 부분에 “Record Emma coverage report”가 생성된 것을 확인할 수 있다.
이 체크박스를 클릭하면, 세부 설정 화면이 생긴다.


예전에 ant task로 테스트 했을 경우 coverage.xml이 생성된 경로를 기억하는가?

XML report 경로를 넣는 곳에,
프로젝트이름/report/emma/coverage.xml 등과 같은 형식으로 기록해 준다.
Health reporting은 그냥 디폴트 값으로 사용하기로 한다. 즉, 비워두면 디폴트값이다.

아직 emma report를 생성하는 ant task가 동작하도록 설정하지 않았기 때문에,
build 되더라도 emma report가 자동으로 생성되지는 않을 것이다.

따라서, Post-build Actions 위쪽에 있는 Build > Invoke Ant 옵션을 고치자.

Targets에

all.emma.report

라고 써주고, build.xml에 all.emma.report를 추가해 보자.

<!-- target : all with emma.report -->
	<target name="all.emma.report" depends="clean,emma.report" 
		description="builds the project, excutes tests, and writes emma report"/>

이제, 해당 프로젝트의 왼쪽 메뉴탭을 보면,


와 같이, Coverage Report가 생성됨을 확인할 수 있다.
이 Coverage Report를 클릭해보자.


coverage trend를 표시하는 그래프가 graphics로 나타나는 것을 확인할 수 있다.
이 화면에서도 패키지명을 클릭해 보자.


임의의 클래스도 클릭해보자.

사실, 내용은 앞서 살펴보았던 html과 다를 것이 없다.
다만, 별도의 ant task를 사용자가 실행하지 않아도, 소스를 수정후에 SVN 서버에 commit 하는 것만으로도 충분하다는 것이다.

지금까지 한 작업은 다음의 과정을 자동화한다.

* 소스를 개발/수정 후 commit하면,
* 자동으로 소스를 컴파일하고,
* 테스트 코드도 컴파일해서 테스트를 시행하고,
* 테스트 결과를 보여준다.
* 또한 이 테스트의 적용 범위(coverage)가 어느 정도인지 검사해준다.

이로써, hudson에 ant task를 활용하여 emma를 연동해 보았다.

Written by everydayminder

July 19, 2010 at 01:29

Posted in tools

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

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 , , , , ,

Eclipse에서 java 소스로부터 클래스 다이어그램을 쉽게 만들자/ eUML2

leave a comment »

eUML2라는 eclipse 플러그인을 설치하여,
기존에 작성했던 java project의 클래스 다이어그램 및 클래스 연관 관계를 쉽게 그려서 볼 수 있다.

라이센스는 ‘free’ 버전과 ‘studio’ 버전이 있으므로, free를 골라서 설치하자.
eclipse에서 자신의 eclipse 버전에 맞는 것으로 골라서, download 받고 설치하면 된다.

대략 다음의 장점이 있다고 광고하고 있다.


  • Real-time code/model synchronization

  • UML2.1 compliant and support of OMG XMI

  • Advanced reversed engineering

  • Powerful true dependency analyze tools

  • JDK 1.4 and 1.5 support

  • Customizable template support. More…
해당 플러그인에 대한 자세한 정보는 http://www.soyatec.com/euml2/ 에서 확인할 수 있다.

Written by everydayminder

August 6, 2009 at 00:02

Posted in java

Tagged with , , , ,

Eclipse에서 javadoc을 pdf로 출력하기

leave a comment »

www.doclet.com에 소개된 바와 같이 여러 종류의 doclet이 있으나, 그 중 몇몇은 javaodc의 출력 형태를 pdf로 직접 지정할 수 있다.

 
LaTex를 쓰는 방법은 LaTex의 특성상 가독성이 좋은 결과물을 만들 것으로 기대되나,
별도로 변환을 한번 더 해줘야 하는 번거로움이 있으므로 이왕이면 손이 덜 가는 방법을 찾아보게 되었다.


www.doclet.com에 소개된 library 중 하나인,
AurigaDoclet(http://aurigadoclet.sourceforge.net/)을 사용해 보자.

사용법은 간단하다.
ANT에서 지정할 수 있는 설정은,


<javadoc packagenames=”package-names
sourcepath=”source-path
doclet=”com.aurigalogic.doclet.core.Doclet”
docletpath=”aurigadoclet-path
additionalparam=”options
>
<classpath refid=”aurigadoclet.class.path” />
</javadoc>

package-names
package names
source-path
path of the java source files
aurigadoclet-path
path to the AurigaDoclet.jar file in AurigaDoclet’s bin directory
options
AurigaDoclet options.

 
이며, 이 때 사용할 수 있는 옵션으로
-format 
The output format.

Supported values: fo,pdf,ps,pcl,svg.

-out
Output file path.
-notoc
Do not generate TOC page.
-nonavigation
Do not generate navigation tree.
-nolinks
Do not use hyperlinks.
-noindex
Do not generate a keyword index.
-leftmargin
Left margin in points. Default is 30.
-rightmargin
Right margin in points. Default is 30.
-topmargin
Top margin in points. Default is 10.
-bottommargin
Bottom margin in points. Default is 10.
-headertext
XHTML text to be used as page header.
-headerfile
XHTML file to be used as page header.
-footertext
XHTML text to be used as page footer.
-footerfile
XHTML file to be used as page footer.
-headerheight
Height of page headers in points. Default is 50.
-footerheight
Height of page footer in points. Default is 20.
-coverfile
XHTML file to be used a cover page.
-cssfile
CSS file to used for formatting the output.

Default css file is located in src/com/aurigalogic/doclet/resources/default.css

-xslfile
Custom xsl file to be used for formatting the output.

가 있다. 
따라서, Eclipse에서 이 정보를 활용하여, aurigadoclet을 사용하도록 환경설정하고 
실행시 옵션으로 위의 옵션을 택하여 지정하면 된다.
1. Eclipse의 해당 프로젝트로부터, Export > JavaDoc > Use custom doclet 선택
2. Docletname에 com.aurigalogic.doclet.core.Doclet 을
3. Doclet class path에 설치한디렉토리binAurigaDoclet.jar 를 써준다. 
   Next를 누른다.
4. Extra Javadoc options에
  -format pdf -out “만들 pdf의 경로와 이름”  을 적어주고, 
  Finish 누르면 pdf가 생성된다.

Written by everydayminder

August 5, 2009 at 11:13

Posted in java

Tagged with , , , ,