Whiteship's Note

'Good Tools'에 해당되는 글 186건

  1. 2010.08.19 [인텔리J] 메이븐 프로파일 선택하기 (12)
  2. 2010.08.14 구글 Buzz API와 OAuth 관련 링크
  3. 2010.08.10 [인텔리J] 예외 찍기 방지용 템플릿 수정
  4. 2010.06.10 [Hot potatoes] 문제 만들기 프로그램 (4)
  5. 2010.06.09 [JSP 에디터] 인텔리J는 정말 똑똑해.
  6. 2010.05.24 인텔리J에서 다시 STS로... (2)
  7. 2010.05.23 [STS 2.3.3] Spring TC Server Developer Edition with Spring Insight 써보기
  8. 2010.04.13 [ASM] 클래스 - 만들기
  9. 2010.04.13 [ASM] 개요
  10. 2010.04.01 [ROME] RSS, ATOM 등 피드 다루기
  11. 2010.04.01 [ASM] 클래스 - 파싱하기
  12. 2010.04.01 [ASM] 클래스 - 인터페이스와 구성요소
  13. 2010.04.01 [아이튠즈] 아이폰이나 터치보다 중요한거~
  14. 2010.03.31 [ASM] 클래스 - 구조
  15. 2010.03.24 [구글 크롬] 스프링 소스 한글 사이트
  16. 2010.03.15 [톰캣] 톰켓 7의 메모리 누수 방지
  17. 2010.03.03 [MySQL Administrator] Row 갯수 제대로 못세나? (2)
  18. 2010.02.12 파이어폭스에서 크롬으로 갈아타기 (4)
  19. 2009.12.28 [인텔리J IDEA] 스프링 XML 설정 지원 기능
  20. 2009.12.04 [IntelliJ + Atlassian] JIRA 연동 사용하기 (4)
  21. 2009.12.01 [아틀라시안] Crowd - 싱글 사인 온
  22. 2009.11.18 [IntelliJ] 블럭 포매팅 귿!
  23. 2009.11.10 [IntelliJ] 9.0 베타 공개 (4)
  24. 2009.11.05 [Atlassian Connector] IntelliJ 플러그인
  25. 2009.11.05 [GreenHopper] Atlassian JIRA의 애자일 개발 플러그인 (4)
  26. 2009.11.01 [IntelliJ] 버전 관리 기능 죽이네.. (subversion) (2)
  27. 2009.10.31 개발 관련 Q&A 사이트 StackOverFlow!! (2)
  28. 2009.10.29 [IntelliJ] 답답한 것들 (10)
  29. 2009.10.29 [IntelliJ] 스프링 설정 파일에서 inline 리팩토링 사용하기
  30. 2009.10.29 구글 맵스 네비게이션 (4)

[인텔리J] 메이븐 프로파일 선택하기

Good Tools : 2010.08.19 11:48


뭐 이런 간단한 것을 올리나 하겠지만.. 윤석군이 이클립스에서 프로파일 옵션 줘서 빌드해도 잘 안 바뀐다길래 인텔리J의 우수함을 뽐내 주기 위해 스크린 샷 한장을 올립니다.

윤석군 보아라..

WEB-INF 밑에 classes에 배포된 calendar.properties에 들어있는 내용인데 분명히 production이래자나.. 난 잘 된다고.. 


하지만 안타깝게도 넌 선택권이 없어.. 이클립스를 잘 써... 현업 나가면 어차피 다 이클립스 쓸텐데 인텔리J에 맛들이면 큰일나.. 다른거 못써. ㅋㅋ

이클립스로 어떻게든 빌드 잘 하고 메이븐 플젝 잘 써먹게 되면 그때 넘어오셩.. 그래야 인텔리J 쓰고 놀다가도 후딱 이클립스에서 프로젝트 하지. 안 그럼 난감해ㅋ
저작자 표시
신고
top


구글 Buzz API와 OAuth 관련 링크

Good Tools : 2010.08.14 22:42


구글 버즈
http://code.google.com/intl/ko-KR/apis/buzz/
http://code.google.com/intl/ko-KR/apis/buzz/docs/libraries.html
http://code.google.com/intl/ko-KR/apis/buzz/v1/using_rest.html#create-activity

OAuth
http://code.google.com/intl/ko-KR/apis/accounts/docs/OAuth_ref.html#GetAuth
http://code.google.com/intl/ko-KR/apis/accounts/docs/OAuth.html
http://googlecodesamples.com/oauth_playground/index.php

OAuth 토큰이 여러개인게 아니라 토큰 종류가 여러 가지인거 였구만... 어려워 어려워 @_@;;
저작자 표시
신고
top

TAG OAuth

[인텔리J] 예외 찍기 방지용 템플릿 수정

Good Tools : 2010.08.10 14:04



이렇게 간단한 템플릿 수정 만으로 예외 먹는 기본 템플릿 코드를 수정할 수 있다. 이클립스에도 try-catch 문 자동 생성시 catch 문에서 예외를 냠냠 하게 되어 있을텐데.. 그보다는 차라리 저렇게 RuntimeException으로 변화해서 던져주는게 더 낫다.

예외를 먹지 않으니까 예외가 발생한 지점 찾기도 좋을 뿐더러, RuntimeException으로 변환해주면 저 API를 사용하는 입장에서 잡아도 되고 안잡아도 되고 선택권이 생기니까 더 좋다. 머.. 잡아서 확실하게 예외를 어떻게 처리할 방법이 있다면 그렇게 처리하는게 더 좋겠지만 대부분은..흠냐..
저작자 표시
신고
top


[Hot potatoes] 문제 만들기 프로그램

Good Tools : 2010.06.10 16:46


http://hotpot.uvic.ca/

흠냐.. 아내가 이걸로 학교 숙제를 해야된데서 잠깐 살펴봤는데 재밌더군요.ㅋㅋ
사용하기 쉽게 잘 만들었더라구요.

맥용도 있길래 써봤습니다. 왼쪽 감자들은 문제 유형이고 오른쪽은 감자로 만든 문제들을 하나의 문제집으로 묶어주는 녀석입니다.

문제 유형중에 JMatch를 써봤습니다.

이런식으로 왼쪽 오른쪽에 매치 되는걸 적어두고... 저장하고 export -> drop-down 형태로 만들었습니다. 결국엔 HTML이 만들어집니다.

매셔에서는 그렇게 만들어진 HTML을 가지고 index 페이지를 만들고 네비게이션을 정의해주느 것뿐이 없더군요. 간단합니다. 복잡하게 쓰려면 CSS도 변경 할 수 있고 HTML편집도 멋지게 하고 동영상, 이미지 추가해서 보여줄 수도 있습니다.

자 기본 디자인 가지고 만든 웹 페이지 입니다. 오른쪽에 있는 녀석들을 마우스 드래그 앤 드랍으로 연결할 수 있습니다.

http://dev.springsprout.org/nick.htm

캬캬캬캬. 봄싹 아이디 맞추기 고고씽.~



저작자 표시
신고
top


[JSP 에디터] 인텔리J는 정말 똑똑해.

Good Tools : 2010.06.09 11:08


오전에 다른일을 좀 하다가 슬슬 회사일을 하려고 코드 패키지 정리좀 하고 검색 쪽 코딩을 시작하는데... 

깜짝아!!!


무심코 누른 자동완성 키에 모델 정보가 튀어나오다니;;; 세상에.. 좋아 좋아!!
저작자 표시
신고
top


인텔리J에서 다시 STS로...

Good Tools : 2010.05.24 11:59


여러 프로젝트 띄워놓고 작업하기는 STS가 편한것 같네요. 그리고 최근 STS에서 제공하는 서버단 서비스가 대폭 강화되는 바람에 인텔리J에서 다시 STS로 넘어왔습니다. 강의 준비도 왠지 이클립스 기반으로 해야할 것 같고.. 여러가기 상황이 저를 다시 STS로 데려가는군요. 

흑흑.. 인텔리J 그동안 고마웠어. 내가 조만간 돌아갈께... 


스프링 ROO의 스프링, JPA 설정파일과 pom.xml 파일 참조용 프로젝트, 봄싹 공통 코드 참조용 프로젝트, OSAF 2 참조용 프로젝트, 실제로 새로 작성할 프로젝트 열어놓고 작업 중인 화면입니다.

인텔리J 윈도우 4개 띄우고 작업하느니;;; 스프링 인사이트로 쉽게 성능 모니터링 해볼 수 있는 STS로.. 프로젝트 라이브러리 세팅하고 아키텍처 잡으면 다시 빽 투더 인텔리J!
저작자 표시
신고
top

TAG STS 2.3.2

[STS 2.3.3] Spring TC Server Developer Edition with Spring Insight 써보기

Good Tools : 2010.05.23 08:55


초 간단 하더군요;. 그냥 STS 최신버전 (2.3.3.m1) 받아서 tc 서버 개발자 에디션에다가 프로젝트를 끓어다 놓고 실행하면 됩니다. 그런데 6.0은 지원하지 않네요. 덕북에;; 프로젝트를 JDK 1.5 버전으로 다운 그레이드 했습니다. @_@ 아주 귀찮아 죽겠는 @Override 없애기와 Stirng.isEmpty() 없애기를 해줬습니다. 이런건 툴에서좀 지원을 해주면 좋으련만;;;

어찌됐든 tc 서버 개발자 에디션에 놓고 서버를 시작시키면 뭔가 물어봅니다. 스프링 인사이트를 같이 사용할꺼냐는건데 당연히 OK!! 

그렇게 서버를 켜고 로컬에서 웹 앱을 가지고 좀 논다음에 localhost:8080/insight 로 접속하면 모니터링 정보를 확인할 수 있습니다.

좋군요. 성능 최적화 할 때 아주 좋을 것 같습니다. 다른 모니터링 툴은 안써봤는데;; 이정도면 충분한거 아닌가요? 알아보기도 쉽고 쿼리도 다 보이고 해당 코드로 바로 이동도 할 수 있으니.. 흠.. 그리고 공짜네;; +_+
저작자 표시
신고
top


[ASM] 클래스 - 만들기

Good Tools : 2010.04.13 17:23


참조: http://download.fr.forge.objectweb.org/asm/asm-guide.pdf

ClassWriter만 사용해서 클래스를 만들수 있다.

        ClassWriter cw = new ClassWriter(0);
        cw.visit(V1_5, ACC_PUBLIC + ACC_ABSTRACT + ACC_INTERFACE,
                "pkg/Comparable", null, "java/lang/Object",
                new String[]{"pkg/Mesurable"});
        cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "LESS", "I",
                null, new Integer(-1)).visitEnd();
        cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "EQUAL", "I",
                null, new Integer(0)).visitEnd();
        cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "GREATER", "I",
                null, new Integer(1)).visitEnd();
        cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "compareTo",
                "(Ljava/lang/Object;)I", null, null).visitEnd();
        cw.visitEnd();
        byte[] b = cw.toByteArray();

한 줄씩 살펴보자.

ClassWriter cw = new ClassWriter(0);
- ClassWriter 객체를 생성한다. 인자값 0에 대해서는 다음에 설명한단다. 다음에 읽지 뭐... @_@;

cw.visit(V1_5, ACC_PUBLIC + ACC_ABSTRACT + ACC_INTERFACE, "pkg/Comparable", null, "java/lang/Object", new String[]{"pkg/Mesurable"});
- 저 상수들은 import static org.objectweb.asm.Opcodes.*; 이 안에 담겨있다.
- 첫번째 인자(V1_5)는 자바 클래스 버전이다. 자바 1.5 버전으로 컴파일한 클래스를 만들게 될 것이다.
- 두번째 인자(ACC_PUBLIC + ACC_ABSTRACT + ACC_INTERFACE)는 public interface에 해당한다. 객체를 생성할 수 없으니 abstract를 선택한다.(이부분은 좀 애매함. INTERFACE인데 ABSTRACT가 꼭 들어가야 하나;;)
- 세번째 인자("pkg/Comparable")는 클래스 이름인데 풀패키지 경로로 설정해 줘야 한다. 그렇다고 타입명(Type descriptor)은 아니고 internal name으로 표기해준다.
- 네번째 인자(null)는 제네릭이다.
- 다섯번째 인자("java/lang/Object")는 상위 클래스이다. 이 때는 internal name으로 표기해준다.
- 마지막(new String[]{"pkg/Mesurable"})은 구현할 인터페이스 목록이다. 여기서도 클래스 이름을 internal name으로 표기한다.
- visit 메서드는 리턴 타입이 void다.

cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "LESS", "I"
null, new Integer(-1)).visitEnd();
- 첫번째 인자는 패스.
- 두번째 인자는 필드 이름
- 세번째 인자는 타입 (여기선 int)
- 네번째 인자는 Generic
- 다섯번째 인자는 값 (여기서는 final static 값이니까 설정했지. 보통은 null)
- visitFiled 메서드의 리턴 타입은 FieldVisitor 타입 객체다. 이 뒤에 반환받은 객체로 할 일이 없으니 visitEnd() 호출한다.

cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "compareTo"
"(Ljava/lang/Object;)I", null, null).visitEnd();
- 첫번째 인자는 패스
- 두번째 인자는 메서드 이름
- 세번째 인자는 메서드 시그너처 (Object를 인자로 받고 int 타입을 반환 한다.)
- 네번째는 Generic
- 다섯번째는 해당 메서드에서 던지는 예외 타입 목록
- visitMethod 메서드의 리턴 타입은 MethodVisitor 타입 객체다. 이 뒤에 반환받은 객체로 할 일이 없으니 visitEnd() 호출한다.

cw.visitEnd();
- ClassWriter로 할 일 다 했으니 visitEnd() 호출한다.

byte[] b = cw.toByteArray();
- toByteArray()를 호출하여 생성된 클래스를 바이트 배열 형태로 얻을 수 있다. 이 녀석을 ClassLaoder의 defineClass에 넘겨주면 Class 타입을 받아서 사용할 수 있다.

저작자 표시
신고
top


[ASM] 개요

Good Tools : 2010.04.13 15:45


참조: http://download.fr.forge.objectweb.org/asm/asm-guide.pdf

- 프로그램 분석: 파싱에서 부터 애플리케이션의 잠재적인 버그를 찾거나, 사용하지 않는 코드나 역공학에 사용할 수 있다.
- 프로그램 생성: 일반 컴파일러나 Just in Time 컴파일러 같이 분산 프로그래밍에서 사용할 스텁, 스켈레톤 컴파일러가 사용할 프로그램을 작성한다.
- 프로그램 변경: 프로그램을 최적화 하거나 AOP같이 성능 모니터링 이나 디버깅용 코드를 추가한다.

자바 소스 코드보다 컴파일된 자바 클래스를 사용할 때 얻을 수 있는 장점
- 소스코드가 필요 없다
- JVM에 로딩 되기 전에 분석, 생성, 변경 할 수 있다.(소스 코드도 가능하지만 느리고 완전한 컴파일러가 필요하다)
- 스텁 컴파일러나 Aspectj 위버 사용이 사용자로부터 감춰진다.

ASM도 그런 툴 중 하나로 컴파일 된 클래스를 사용하도록 설계되었다.
최대한 빠르고 작게 설계했다.
- 빨라야 런타임에 애플리케이션이 느려지지 않으니까
- 작아야 메모리 소비가 적을테니까

ASM 주요 장점
- 간단하다. 잘 설계되어 있고 모듈화된 API가 있어서 사용하기 쉽다. (근데 나에겐 왜케 어려운건지.. OTL)
- 문서화가 잘 되어 있고 Eclipse 플러그인도 가지고 있다. (홈피에 있는 문서 중에서는 이것밖에 볼만한게 없던데..)
- 자바 최신 버전(Java 6)을 지원한다.
- 작고 빠르고 견고하다.
- 다수의 사용자 커뮤니티가 있으니 새로운 사용자를 도울 것이다.
- 오픈 소스니까 맘대로 쓸 수 있다.

ASM 목적
- 바이트 배열로 표현되는 컴파일 된 자바 클래스를 생성, 변형, 분석 한다.
- 클래스 로딩 프로세스는 범위에 속하지 않는다.

두 종류 API를 제공한다.
- core API: 이벤트 기반 표현체
- tree API: 객체 기반 표현체

이벤트 기반 모델
- 연속적인 이벤트로 클래스를 표현한다.
- 각 이벤트는 클래스의 특정 구성 요소를 나타낸다.
- 이벤트 기반 API는 사용 가능한 이벤트, 반드시 따라야 하는 순서, 파싱할 엘리먼트 당 하나의 이벤트를 생성하는 클래스 파서, 연속적인 이벤트에서 컴파일된 클래스를 생성하는 클래스 작성기를 제공한다.

객체 기반 모델
- 객체 트리로 클래스를 표현한다.
- 각 객체가 클래스 구성 요소를 나타낸다.
- 각 객체는 자신의 하위 구성 요소에 대한 객체들을 나타내는 레퍼런스를 가지고 있다.
- 객체 기반 API는 연속적인 이벤트 모델을 객체 트리 모델로 변경하는 하거나 그 반대로 변경하는 기능을 제공한다.
- 객체 기반 API는 이벤트 기반 API를 근간으로 만들어졌다.

이벤트 기반 API
- 객체 기반 API 보다 빠르고 메모리 소비가 적다.
- 클래스 변형이 객체 기반 모델 보다 어렵다. 한번에 한 엘리먼트만 조작하니까.

ASM 아키텍처
- 이벤트 기반 API는 이벤트 공급자(클래스 파서), 이벤트 소비자(클래스 작성기), 미리 정의해둔 이벤트 필터로 구성되어 있으며 사용자 정의 생성자, 소비자, 필터도 추가할 수 있다.

이벤트 기반 API 사용법
- 이벤트 공급자, 필터, 소비자 컴포넌트를 구성한다. 
- 이벤트 공급자가 일을 시작하도록 지시한다.

구조
- asm.jar: org.objectweb.asm 와 org.objectweb.asm.signature패키지가 들어있고, 이벤트 기반 API를 정의하고 클래스 파서, 클래스 작성기를 제공한다.
- asm-util.jar: org.objectweb.asm.util 패키지는 core API를 기반으로 다양한 툴을 제공한다. (너무 대강이네;;)
- asm-commons.jar: org.objectweb.asm.commons 패키지에서 미리 만들어둔 클래스 변경기(transformer)를 제공한다.
- asm-tree.jar: org.objectweb.asm.tree 패키지는 객체 기반 API를 제공한다. 이벤트 기반 모델과 객체 기반 모델을 변환할 수 있다.
- asm-analysis.jar: org.objectweb.asm.tree.analysis 패키지는 tree API를 기반으로 클래스 분석 프레임워크와 미리 만들어 둔 클래스 분선기를 제공한다.


저작자 표시
신고
top

TAG ASM

[ROME] RSS, ATOM 등 피드 다루기

Good Tools : 2010.04.01 17:05


참조
http://wiki.java.net/bin/view/Javawsxml/Rome
http://wiki.java.net/bin/view/Javawsxml/Rome05Tutorials
http://wiki.java.net/bin/view/Javawsxml/Rome05TutorialFeedReader
http://today.java.net/pub/a/today/2006/02/02/tour-of-rome.html

피드 읽기 용으로 사용할 수도 있고 여러 피드를 병합해서 새로운 피드를 만들 수도 있습니다. 
그런데 문서가 좀 시원찮아서;; @_@; JavaDoc만 보고 코딩하라는 건지..

from: http://wiki.java.net/bin/view/Javawsxml/Rome04HowRomeWorks

그나마 제일 보기 좋은 자료입니다.

SyndFeedInput 객체를 만들고, build 메서드를 실행하면서 가져올 Feed의 URL을 전달해주면 일단 준비 끝.

        SyndFeedInput input = new SyndFeedInput();
        SyndFeed feed = input.build(new XmlReader(new URL(FEED_URL)));

API중에서 핵심적인 부분을 세 부류, SyndXxx, RSS용, Atom용으로 나눌 수 있는데 RSS용이나 Atom용 API를 굳이 쓸필요가 없다면 그냥 그 둘의 추상화 API인 SyndXxx를 쓰는게 좋겠습니다.

나머진 API 보면서~ 즐거운 코딩을~

저작자 표시
신고
top

TAG rome

[ASM] 클래스 - 파싱하기

Good Tools : 2010.04.01 11:16


참조: http://download.fr.forge.objectweb.org/asm/asm-guide.pdf

ClassVisitor 인터페이스를 구현하여 간단하게 파싱하는 클래스 작성 가능.

public class ClassPrinter implements ClassVisitor {

    public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
        System.out.println(name + " extends " + superName + " {");
    }

    public void visitSource(String s, String s1) {
    }

    public void visitOuterClass(String s, String s1, String s2) {
    }

    public AnnotationVisitor visitAnnotation(String s, boolean b) {
        return null;
    }

    public void visitAttribute(Attribute attribute) {
    }

    public void visitInnerClass(String s, String s1, String s2, int i) {
    }

    public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
        System.out.println(" " + desc + " " + name);
        return null;
    }

    public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
        System.out.println(" " + name + desc);
        return null;
    }

    public void visitEnd() {
    }
}

이 클래스 사용하기

    public void asm() throws IOException {
        ClassPrinter cp = new ClassPrinter();
        ClassReader cr = new ClassReader("java.lang.Runnable");
        cr.accept(cp, true);
    }

ClassReader 인스턴스를 만들 때 어떤 클래스를 파싱할지 지정한다.
accept를 호출하면 전달받은 ClassVisitor(여기서는 그 구현체 ClassPrinter)의 메서드를 호출하여 파싱할 클래스 정보를 파싱한다.(꼬인다 꼬여;)

java/lang/Runnable extends java/lang/Object {
 run()V

결과는 위와 같음.

ClassReader 객체를 만드는 방법은 여러 가지가 있다.


ClassLaoder의 getResourceAsStream 메서드를 이용하여 가져온 InputStream으로 만들 수도 있다.

cl.getResourceAsStream(classname.replace(’.’, ’/’) + ".class");

하지만 복잡하다. 너무 저수준 API 아닌가... @_@ 이렇게까지 쓰고 싶진 않다.
저작자 표시
신고
top


[ASM] 클래스 - 인터페이스와 구성요소

Good Tools : 2010.04.01 10:23


참조: http://download.fr.forge.objectweb.org/asm/asm-guide.pdf

컴파일된 클래스 생성 또는 변경할 때 사용하는 핵심 API는 ClassVisitor 인터페이스.


이 API는 다음 순서대로 사용해야 함.

1. visit 호출.
2. visitSource 최대 한번 호출 가능.
3. visitOuterClass 최대 한번 호출 가능.
4. visitAnnotation과 visitAttribute 원하는 만큼 호출 가능.
5. visitInnerClass, visitField, visitMethod 원하는 만큼 호출 가능.
6. visitEnd 호출.

주요 구성요소
- ClassReader: 바이트 배열로 받은 컴파일된 클래스를 파싱하고 accept 메서드의 인자로 전달된 ClassVisitor 객체에 있는 visitXxx 메서드를 호출한다. 이벤트 공급자.
- CLassWriter: ClassVisitor 인터페이스 구현체로, 직접 바이트 형식으로 컴파일된 클래스를 만든다. toyteArray 메서드로 컴파일된 클래스를 담고 있는 바이트 배열을 가져올 수 있다. 이벤트 소비자.
- ClassAdapter: ClassVisitor 인터페이스 구현체로, 이 객체에 대한 모든 메서드 호출을 다른 ClassVisitor 인스턴스에 위임한다. 이벤트 필터.


저작자 표시
신고
top

TAG ASM, class

[아이튠즈] 아이폰이나 터치보다 중요한거~

Good Tools : 2010.04.01 08:19




요즘은 RSS를 거의 보지 않는다. 피드 관리를 잘못해서;; 언제 한번 초기화 하고 다시 모아야 하는데 귀찮아서 안하고 있다. @_@;

애니웨이, 아이튠즈 U는 대단하다. 예일, 하버드, 스탠포드 등 유명 대학의 강의들이 제공된다. 특히 요즘 보고 있는건 스탠포드에서 강의했던 아이폰 개발 강의다. 애플 직원이 나와서 학생들한테 강의를 한다. 그리고 그걸 무료로 아이튠즈를 통해서 볼 수 있다. 그뿐인가, 다운도 받을 수 있고, Podcast로 등록되고, 귀찮으면 자동으로 동기화 시켜 아이폰이나 터치에 넣고 다닐 수 있다. 인코딩 따윈 필요없다. 이미 되어 있는 걸 제공하니깐.

한국의 대학들은 등록금 올리기만하고 발전하는 기미가 보이지 않는다. 고대생과 서울대 용자들을 보면 발전은 커녕 오히려 퇴보하고 있는 것 같기도 하다. 시대에 필요한 인재를 만들어 내려면 시대에 맞는 수업과 시대에 맞는 수단으로 학습을 꾀하는게 좋치 않을까? 어쩌면 한국의 대학들은 인재를 만들고 싶은게 아니라 돈을 만들고 싶어하기 때문에 그런 발전이 없는 걸지도 모르겠다.

힘들게 번 돈, 수준 낮은 대학 강의 들으려고 등록금(졸업까지 약 4천만원)으로 날리지 말고, 그냥 200배 싼 아이폰이나 터치(약 20만원)를 사자. 응?!!
저작자 표시
신고
top


[ASM] 클래스 - 구조

Good Tools : 2010.03.31 17:32


참조: http://download.fr.forge.objectweb.org/asm/asm-guide.pdf

컴파일 된 클래스 구성요소
- 클래스의 접근자, 이름, 상위 클래스, 인터페이스, 애노테이션
- 클래스에 선언한 필드당 한 섹션. 각 섹션에는 필드의 접근자, 이름, 타입, 애노테이션
- 클래스의 메서드와 생성자 당 한 섹션. 각 섹션에는 접근자, 이름, 반환 타입, 매개변수 타입, 애노테이션, 컴파일된(바이트) 코드

소스와 컴파일된 클래스와 차이
- 컴파일된 클래스는 오직 한 클래스에 대한 정보만 나타내지만 소스는 여러 클래스 가질 수 있다.
- 컴파일된 클래스는 주석을 가지고 있지 않다. 하지만 애노테이션에 부가 정보를 담을 수 있다. 그 전에는 클래스, 메서드, 필드, 코드의 attibutes 속성에 부가 정보를 전달했지만 이젠 별로 쓸 일 없다.
- 컴파일된 클래스는 package나 import 섹션이 없다. 모든 타입 이름이 전체 경로를 가지고 있다.
- 컴파일된 클래스는 constatnt pool 섹션을 가지고 있다.

internal name
- 클래스 또는 인터페이스 타입의 이름
- String -> java/lang/String

Type descriptor
- 자바 타입 서술자

boolean->  Z
char-> C
byte-> B
short-> S
int-> I
float-> F
long-> J
double-> D
Object-> Ljava/lang/Object;
int[]-> [I
Object[][]-> [[Ljava/lang/Object;

Method descriptor
- 메서드 서술자

void m(int I, float F) -> (IF)V
int m(Object o) -> (Ljava/lang/Object;)I
int[] m(int i, String s) -> (ILjava/lang/String;)[I
Object m(int[] i) -> ([I)Ljava/lang/Object;








저작자 표시
신고
top

TAG ASM

[구글 크롬] 스프링 소스 한글 사이트

Good Tools : 2010.03.24 11:23



ㅋㅋㅋㅋ그럴싸 하지 않나요. 구글 크롬 최신버전은 사이트를 통째로 번역해주네요. 
구글 기능들을 브라우저에 마구 접목 시키는군요. 스프링 레퍼런스를 봐볼까요.


흠.. 의존성 주입이 아니라 '종속성 주입', 제어의 역전 대신. '반전'을 사용하고 있군요. '애플 리케이션'이라..ㅋ
저작자 표시
신고
top


[톰캣] 톰켓 7의 메모리 누수 방지

Good Tools : 2010.03.15 17:04


http://java.dzone.com/articles/memory-leak-protection-tomcat

웹 애플리케이션을 릴로딩 할 때 어떤 메모리 누수가 발생하며 그 징후가 어떤지...

PermGen (Permanent Generation) 메모리 영역에 클래스들이 제대로 GC (Gabage collect)에 의해 회수되지 않아서 OOME (OutOfMemoryObejct)가 발생하게 된다.

톰캣은 릴로딩 할 때 기존의 WebApp CL을 버리고 새로운 WebApp CL을 만들어서 애플리케이션을 다시 로딩하는데 만약 이때 누군가 WebApp CL에 대한 레퍼런스를 가지고 있다면 GC 대상이 되지 않고 그렇게 되면 WebApp CL이 로딩한 클래스들이 PermGen에서 사라지지 않기 때문에 계속해서 릴로딩 하다가 이 영역이 꽉차게 되고 그럼 OOME가 발생합.

어떤 웹 애플리케이션, 라이브러리, JVM 코드가 메모리 누수를 일으킬 수 있는가..

1. WebApp CL에서 만든 어떤 객체를 다른 클래스로더(예. BootStrap CL)가 로딩한 클래스에 등록한다. - 여기까진 괜찮다.
2. 그 뒤 등록한 객체를 언젠가 꺼내서 제대로 반환하지 않는다. - 이게 문제의 시작이다.
3. 톰캣이 릴로딩을 시도한다. - 기존 WebApp CL을 버리고 GC가 처리해 주겠거니 기대한다. 하지만 그렇게 되지 않는다.

BootStrap CL에는 아직 WebApp CL에서 로딩한 클래스의 인스턴스를 들고 있으며 해당 인스턴스는 WebApp CL을 참조하고 있기 때문에 WebApp CL과 그 CL이 로딩한 클래스는 제대로 GC가 자원을 반환하지 못하고 PermGen에 쌓이고 결국 언젠가는 OOME를 보게 된다.

Application or library code that can trigger this situation include:
  • JDBC driver registration
  • Some logging frameworks
  • Storing objects in ThreadLocals and not removing them
  • Starting threads and not stopping them

There are also a number of places that using the standard Java API can trigger a similar issue. These include:
  • Using the javax.imageio API (the Google Web Toolkit can trigger this)
  • Using java.beans.Introspector.flushCaches() (Tomcat does this to prevent memory leaks caused by this caching)
  • Using XML parsing (the root cause is unknown due to a bug in the JRE)
  • Using RMI (somewhat ironically, causes a leak related to the garbage collector)
  • Reading resources from JAR files

ThreadLocal에 객체를 등록한 뒤 제거하지 않은 경우를 생각해보자.


1. ThreadLocal은 BootStrap+Extention 클래스로더가 가지고 있을테고 만약에 웹 애플리케이션의 클래스패스에 있는 Whiteship의 객체를 만든 다음 ThreadLocal에 넣어뒀다.

2. remove()를 하지 않았다.

3. 톰캣을 릴로딩 한다.

하지만.. ThreadLocal에 Whiteship이 담겨 있고 Whiteship은 WebApp CL을 참조(Whiteship.class.getClassLoader()로 접근할 수 있다.)하고 있기 때문에 WebApp CL이 제대로 GC에 의해 처리되지 않는다. 

웹 애플리케이션을 릴로딩 할 때 Whiteship을 ThreadLocal에서 제거해주면 문제는 해결된다.

톰캣 새 버전은 이 문제를 어떻게 해결했는가?

애플리케이션과 라이브러리 코드 문제 해결 방법
- 자원을 반납해주고 개발자에게 경고해준다.

자바 라이브러리 관련 문제 해결 방법
- 웹 애플리케이션이 안전하게 호출할 수 있도록 톰캣 코어에서 미리 호출한다.


저작자 표시
신고
top


[MySQL Administrator] Row 갯수 제대로 못세나?

Good Tools : 2010.03.03 16:38


스키마 테이블 탭에서 보여주는 Rows 갯수는 믿지 못하겠습니다.


리프래시를 하면..


헐.. 갯수가 계속 바뀝니다.


이렇게 찍으면 정확한 갯수가 나오는데 말이죠. 왜이런담; 멀라 멀라. @_@
저작자 표시
신고
top


파이어폭스에서 크롬으로 갈아타기

Good Tools : 2010.02.12 14:12


인터넷 익스플로러는 IE 전용 사이트를 띄우기 위한 용도일 뿐이고 빠르고 쾌적한 웹 서핑을 하려면 역시 크롬이 짱인 것 같습니다. 웹 서핑 속도가 ㄷㄷㄷ;;;

사실 브라우저를 새로 설치해서 갈아타는건 쉬운데 그동안 파폭에 머물러 있었던 이유는 그놈의 플러그인들... 제가 사용하던 필수 플러그인은 다음과 같습니다.
- 마우스 제스처(마우스로 페이지 이동, 탭 전환, 윈도우 닫기 축소 등등 가능)
- 북마크 동기화(여기 저기 여러 컴터에서도 일관적으로 유지되는 북마크 때문에 웹 서핑이 한결 편합니다.)
- IE 탭(IE 전용 사이트를 잠깐 볼 때 필요합니다. 제대로 쓰려면 그냥 IE를 띄워서 봐야하죠.)

이정도만 지원되면 바로 갈아타려고 했는데.. 크롬도 이미 지원하고 있더라구요. 캬~
사실 뭐 이 정도면 안 갈아탈 이유가 없는듯;
- 마우스 제스처 잘 되지.
- 파폭에 있던 북마크 동기화 플러긴이랑 똑같은게 있어서 그대로 연동되지.
- IE 탭 있지

갈아타기 끝~
신고
top


[인텔리J IDEA] 스프링 XML 설정 지원 기능

Good Tools : 2009.12.28 18:08



녹색 빈이 있길래 마우스를 올려봤더니.. 저런 메시지가.. 오호!


클릭해봤더니.. 와우!
신고
top


[IntelliJ + Atlassian] JIRA 연동 사용하기

Good Tools : 2009.12.04 12:57




스크린캐스팅으로 찍는 편이 더 보기 좋으시겠지만;; 귀찮아서;;; 다음 기회에;;
신고
top

TAG IntelliJ, JIRA

[아틀라시안] Crowd - 싱글 사인 온

Good Tools : 2009.12.01 14:52


아.. 내가 이녀석 어드민 로그인하느라 삽질한것만 생각하면... ㅠ.ㅠ

왜 이 ㅆㅂㄻㄺㅇㅇㄱㄸㄱㅇㅁㄷㅇㅅㅈㄹㅇㅇㅁㄴㅇㅇㄹㄷㅆㅈㅇㅈ

분명히 설치는 됐는데, 설치후 최초 설정 과정에서 만든 관리자 계정으로 로그인이 안되는 겁니다. 아주 돌아버릴 것 같았죠. DB를 잘못 설치했나, 인코딩이 잘못됐나, 경로가 틀렸나, 톰캣 로그를 보고, 구글링하고 아주.. 짜증이 나서 근 2주 동안 포기했다가 오랜만에 다시 도전했습니다.

http://forums.atlassian.com/thread.jspa?messageID=257323467

이 글 맨 마지막 댓글에 실마리를 찾을 수 있었습니다. /etc/hosts에 crows.properties에 설정되어 있는 도메인을 맵핑해줘야되더군요. 아유 써글.. 이런건 당연히 설치 매뉴얼에 써줘야 하는거 아니니???

자.. 이제 어디 한 곳에만 로그인 해도 여러 사이트에 다 자동으로 로그인이 되는지 설정해봐야겠습니다.
신고
top


[IntelliJ] 블럭 포매팅 귿!

Good Tools : 2009.11.18 17:38



마우스로 긁은 다음 포매팅 단축키를 먹이면 위와 같은 팝업이 뜹니다. 기본으로 블럭 포매팅이기 때문에 엔터를 치면 해당 부분만 포매팅이 되죠. 꺄오~ 좋아 좋아.

이클립스에서도 된다는군요. java, jsp, js, css 등에서도 잘 되는지 해보세요~

신고
top


[IntelliJ] 9.0 베타 공개

Good Tools : 2009.11.10 23:53


http://www.jetbrains.com/idea/nextversion/index.html?9b_eu

유겐같이 지적이며 총명한 개발자들이 쓴다는 인텔리J 9.0 베타가 나왔군요.
벌써부터 지원하는 기능이 빵빵하네요.


업그레이드나 하구 자야지~


신고
top


[Atlassian Connector] IntelliJ 플러그인

Good Tools : 2009.11.05 22:57


 아틀라시안 제품들과 IntelliJ 플러그인을 연동했는데... 이건 뭐.. 최강조합입니다. 마치 디아블로에서 큐브에 아이템 몇개 넣고 돌려서 좀 더 희귀한 아이템을 만들어 내듯이.. 지금 전 인텔리J와 아틀라시안 제품들을 조합해서 Agile 개발에 가장 적합한 개발 환경을 세팅했습니다.

인텔리J의 장점 중 하나를 꼽으라면 플러그인 설치가 편하고 안정적이라는 것을 꼽고 싶은데요. 안써본 분들에게 설명하자니 귀찮고, 써본분들에게는 딱히 설명드릴께 없기 때문에 패스하겠습니다.


저런식으로 설치한 아틀라시안 제품들과 연결을 해주고, 잘 쓰면 됩니다.


밤부 플러긴은 기본적으로 빌드가 성공했나 실패했나를 알려주는데, 맨 아래 녹색 모양의 조그만 아틀라시안 아니콘이 그 역할을 해줍니다.

그밖에 여러 기능들과 사용법은 아래 링크에 있습니다.

http://confluence.atlassian.com/display/IDEPLUGIN/Working+with+Bamboo+Builds+in+IDEA


지라 플러긴은 주로 이슈를 보고, 진행하거나, 멈추거나, 마무리 하거나, 새 이슈를 등록할 수 있습니다.

그밖에 여러 기능과 사용법은 아래 링크에 있습니다.

http://confluence.atlassian.com/display/IDEPLUGIN/Working+with+JIRA+Issues+in+IDEA

ps: 이클립스에서 IntelliJ로 갈아타길 정말 잘한것 같아요. 너무 안정적이에요. 인텔리J가 메모리 때문에 뻗는다 하더라도, 절대로 깨져버린 이클립스처럼 피곤하진 않습니다. 플러그인 설치도 간편하고 말이죠. 인텔리J 킹왕짱!!

내일은 Crucible과 FishEye도 설치하고 연동해야겠군요.
아.. 아틀라시안 제품 간에도 연동 시켜줘야겠네요.

신고
top


[GreenHopper] Atlassian JIRA의 애자일 개발 플러그인

Good Tools : 2009.11.05 08:57


http://www.atlassian.com/software/greenhopper/


스프링 이슈 트래커를 보다가 카드 모양으로 생긴 이슈 관리가 있길래 뭔가 봤더니, GreenHopper라는 플러그인이더군요. 완전히 새로운 UI로 이슈 관리를 할 수 있습니다. 드래그 앤 드랍으로 우선 순위를 변경한다던지, 카드 목록 화면에서 바로 바로 이슈를 수정한다던지 말이죠. 제가 궁금한건 기간과 난이도에 대한 추정을 하고, 그걸 통계내주는 기능이 있느냐인데.. 일단은 한번 설치해 봐야겠습니다.


신고
top


[IntelliJ] 버전 관리 기능 죽이네.. (subversion)

Good Tools : 2009.11.01 00:25


Git도 지원하는데 그쪽은 아직 안 써봤고, subversion만 신나게 쓰고 있는데... 죽입니다. 이클립스 subversive?? subclipse? 풋...

이클립스 쓸 때 제일 짜증난게 subversive 플러그인 설치였습니다. 왜 내가 맨날 이 플러그인을 설치해야 되나.. 제발 좀 그냥 넣어주지.. 또 왜 플러그인은 커넥터랑 툴이랑 업데이트 사이트가 달라가지고 하나는 이클립스 기본 업데이트 사이트에 들어있고 하나는 다른 곳에 있는지... 정말.. 아주 많이 귀찮았습니다.

그런데 인텔리J는 기본으로 Git까지도 제공해 줍니다. cvs, svn, git 말고도 두, 세개의 VCM을 더 지원하던데 기억은 잘 안 납니다.

어쨋거나..

위 화면 하단에 있는 창이 VCM 관련 창인데 아주 유용한 정보를 빠르게 볼 수 있습니다.

히스토리, 업데이트 받은 파일들, 커밋 받은 파일들, 현재 변경된 파일들, 해당 파일을 클릭하면 diff를 클릭해서 뭘 변경했는지 보기도 쉽고, 화면.. 제일 하단 Default 오른쪽에 보이는 아이콘은 해당 프로젝트가 update 받을 것이 있는지 알려주는 아이콘입니다. 저 아이콘이 보이면 update 받을 게 있다는 것이죠... 캬... 죽입니다.

평생 이클립스만 썼다면 경험해보지 못할 멋진 기능들을 만끽하고 있네요. ㅎㅎ
신고
top


개발 관련 Q&A 사이트 StackOverFlow!!

Good Tools : 2009.10.31 23:13


http://stackoverflow.com/

사이트 이름부터가 굉장하지 않은가요. 일반적인 포럼 보다는 훨씬 재미있게 만든 사이트로 위키처럼 질문과 답변을 누구나 수정할 수 있고 밷지과 포임트로 보상을 해줍니다. ㅋㅋㅋ밷지 모으는 재미가 쏠쏠합니다. 질문에 대한 답변 채택과 추천/비추 등의 기능도 해당 질문에 대해 가장 적절한 답변을 바로 찾아 볼 수 있다는 점이 눈에 띄이며, 질문 자체에도 추천과 비추를 할 수 있다는 것이 특히 굳입니다. 사실.. 우문우답이라고, 좋은 질문을 해야 좋은 답변을 들을 수 있는게 당연한 이치죠.


이런식으로 질문에도 추천/비추 기능이 있는데, 저 질문은 3개의 추천을 받았군요.


이건, 제가 작성한 답변은데 4개의 추천을 받았고, 질문 작성자로부터 답변으로 채택을 받았습니다. 그리고 이 답변에 오타가 있어서 Robert가 수정을 해줬고, Jherico가 댓글로 중요한 추가사항을 첨부해 줬습니다.

하지만... 도무지 극복할 수 없는 단점이 하나 있는데..

바로 .. 영어라는 겁니다.

이 좋은 사이트에 한글로 의사표현을 할 수 없다는 것은 정말 괴로운 일입니다.

그래서 봄싹에서는 StackOverFlow를 본따 그와 비스무리 재밌게 만든, NullPE(NullPointerException)를 만들기로 결정했습니다. 다음 릴리즈(11월 30일)에는 포함되어 있지 않지만, 내년 초나 중순 중으로 NullPE를 오픈하겠습니다.

그렇다고해서 별도의 사이트는 아니고, 봄싹 사이트의 일부 모듈로 들어가게 될 겁니다. 지금 있는 사이트에 NullPE 메뉴만 하나 추가가 되겠죠.

흠.. 그러려면 어서 지금 정리중인 스터디쪽부터 마무리를 해야겠습니다. ㄱㄱ

ps: 사실 요즘같아서는 내가 부자여서 돈을 안 벌어도 된다면 직장도 그만두고 봄싹 사이트 개발에만 전념하고 싶습니다.
신고
top


[IntelliJ] 답답한 것들

Good Tools : 2009.10.29 19:44


1. 프로젝트 하나만 놓고 작업한다.

왜 한 번에 한 프로젝트 밖에 못 보는거지...
다른 프로젝트에서 코딩한것도 배껴야 하는데.. 그럴 때 마다 프로젝트를 열고 닫을 순 없자나. ㅠ.ㅠ

2. 서버 설정에 제약이 심하다.

WAR 배포도 하기 싫고, Exploded 배포도 하기 싫어 난 Inplace로 배포할꺼란 말이야..
이건 배포 경로를 어떻게 잘.. 설정해서 해결했습니다.

3. 단순한 단축키 시스템

이클립스처럼 알트 + 시프트 + X 누른담에 J, T 이런식으로 2단 단축키가 안 되는 것 같아요.
그래서 단축키가 부족하고, 계속 중복되고.. 아 짜증나. 중복되면 둘 다 실행을 해주던가..
뭐는 뭐에 우선되서 실행되고 뭐는 그냥 무시되고.. 단축키 누르다가 손가락 꼬이겠네..

4. 파일 시스템이 이상한건지..

왜 외부파일을 프로젝트에 복사해 넣을 수가 없는거지??
이건 뭔가 이상해.. 맥북에서는 잘 됐고, 아침에도 잘 됐었는데..
붙여넣기가 안먹는거야 뭐야..

아.. 답답해;. 이제 좀 쓸만한가 했더니.. 답답해 지기 시작하네..
그래도 이클립스보다 검색하는 것도 빠르고, 안정적인것 같긴한데... 뭔가 좀 부족하네;;
내가 잘 못쓰고 있는 걸지도...
신고
top


[IntelliJ] 스프링 설정 파일에서 inline 리팩토링 사용하기

Good Tools : 2009.10.29 16:18



빈설정이 여러개 있는데, 저 중에서 세 개는 다른 두 빈 설정 내부에 들어가도 됩니다. 개인적으로는 다른 빈에서 참조하는 빈이 아니라면 inner bean으로 설정하는게 보기 편합니다.

이때, 자바 코드에서처럼 inline refactoring을 사용할 수 있습니다. 제 환경에서는 단축키가 Alt + Shift + i 입니다.


흠.. 두 개의 핸들러 어댑터 설정이라는게 한 눈에 들어옵니다. 이 상태에서 하나 더, Alt + Enter를 사용해서 cacheSeconds 설정은 p 네임스페이스로 바꿀 수 있습니다.


참 쉽죠.


요렇게 됐습니다.

참, 덤으로 빈 의존 관계를 그래프로 볼 수 있는데, 이클립스에서보다 더 빠르게 볼 수 있고, 애노테이션으로 설정한 빈들도 전부 보여줍니다.


당연히 프린트도 가능하다는거~ 애노테이션으로 하면 설정이 한눈에 들어오네 안 들어오네 하면서 XML이 더 좋다고 주장하시는 분들이 있던데.. XML도 길어지면 어차피 한눈에 안들오죠. 저는 간단한 웹 플로우 설정도 한 눈에 안들어오던데. 어차피 둘 다 저런 비주얼 도구를 이용하면 한눈에 들어오는 A4 문서를 출력할 수 있으니 그런 논의는 이제 별 필요가 없는 것 같습니다.
신고
top


구글 맵스 네비게이션

Good Tools : 2009.10.29 15:13




이제는 안드로이드가 대세인가..

근데;; 운전하다가 인터넷이 끊기면 어떻게 되는거지..
신고
top




: 1 : 2 : 3 : 4 : ··· : 7 :





티스토리 툴바