Whiteship's Note

'2010/02'에 해당되는 글 42건

  1. 2010.02.28 [스프링 3.0] FormattingConversionServiceFactoryBean에 들어있는 Converter와 Formatter (2)
  2. 2010.02.25 [BBC News] Pensioners accused kidnapping
  3. 2010.02.25 [Maven] 빌드 할 떄 특정 폴더 삭제하기 (2)
  4. 2010.02.25 클래스 로더의 loadClass()와 findClass()
  5. 2010.02.24 [MySQL] mysqldump 백업 복구 (2)
  6. 2010.02.23 [BBC News] Golden Glove winners announced
  7. 2010.02.23 자바 클래스로더 입문 퀴즈 정리 (2)
  8. 2010.02.23 [ClassLoader 퀴즈 끝] SpringSprout와 WhiteshipFactory가 참조하는 Whiteship은 누구인가.
  9. 2010.02.23 백기선's 2010 Weekly Report - 2/23 (2)
  10. 2010.02.22 [BBC News] Toyota recall reaches Eupore (2)
  11. 2010.02.22 핸드폰 역발상 (8)
  12. 2010.02.22 [ClassLoader 퀴즈 6] SpringSprout는 과연 Whiteship의 이름을 알 수 있을까? (4)
  13. 2010.02.22 [ClassLoader 퀴즈 5] Whiteship은 언제 로딩 될까? (2)
  14. 2010.02.21 [ClassLoader 퀴즈 4] SpringSprout가 알고 있는 Whiteship은 누구인가? (10)
  15. 2010.02.19 [BBC News] Baijing hit by record snowfall (4)
  16. 2010.02.19 [ClassLoader 퀴즈 3] Whiteship은 Whiteship일까 아닐까? (2)
  17. 2010.02.19 [ClassLoader 퀴즈 2] Whiteship은 내가 데려왔다!! (5)
  18. 2010.02.19 [ClassLoader 퀴즈 1] Whiteship은 대체 누가 데려온 것일까? (8)
  19. 2010.02.19 Spring Framework 3.0.1 나왔구나
  20. 2010.02.18 [BBC News] Naples pizza protected by EU (5)
  21. 2010.02.18 [스프링 3.0] PropertyEditorRegistry가 이길까 ConversionService가 이길까 (2)
  22. 2010.02.18 [위핏] 나만의 트레이닝 방법
  23. 2010.02.17 [BBC News] Ukraine and Russia argue about spies (2)
  24. 2010.02.17 [Java] ClassLoader API (2)
  25. 2010.02.17 [스프링 3.0 @MVC] 컨트롤러에 스프링 AOP가 적용되지 않는다는건 이제 거짓말
  26. 2010.02.17 목표 실천은 진행 중 (12)
  27. 2010.02.16 [Maven] Exec Maven Plugin 사용하여 자바 프로그램 실행하기 (2)
  28. 2010.02.15 백기선 2010 목표 (12)
  29. 2010.02.12 파이어폭스에서 크롬으로 갈아타기 (4)
  30. 2010.02.11 [SVN] Spring Framework 3.0.0.RELEASE

[스프링 3.0] FormattingConversionServiceFactoryBean에 들어있는 Converter와 Formatter

Spring/3.0 : 2010.02.28 08:47


3.0에 새로 추가된  <mvc:annotation-driven>을 등록할 때 자동으로 등록되는 FormattingConversionServiceFactoryBean이 있을 때 기본으로 사용할 수 있는 Converter와 Formatter를 살펴보겠습니다.

사실 이 클래스는 프로젝트에서 확장할 가능성이 높은 클래스입니다. 사용하는 도메인에 대한 포매터를 제공할 가능성이 높기 떄문이죠. 그렇지 않고 그냥 쓴다는 건... 글쎄요. 스프링의 바인딩 기능을 제대로 활용하지 않고 있는 프로젝트일 가능성이 높습니다. 3.0 이전이었다면 모든 요청에 걸쳐 전역적으로 바인딩에 활용할 녀석을 PropertyEditorRegistrar(PER)를 구현한 클래스를 만들어  ConfigurableWebBindingInitializer에 빈으로 끼워넣었습니다.

그래서인지 <mvc:annotation-driven> 에도 conversion-service 속성을 제공하여 자신이 확장한 FCSFB를 끼워넣을 수 있게 해줍니다.

그런데.. 그냥 기본으로 사용할 때 대체 어떤 것들이 들어있는지는 API에도 명확히 나와있지 않습니다.
A factory for a FormattingConversionService that installs default formatters for common types such as numbers and datetimes.

Subclasses may override installFormatters(FormatterRegistry) to register custom formatters.

숫자나 날짜 같은 흔히 사용하는 타입에 대한 기본 포매터를 설치해준다. 확장할 땐 머시기 메서드를 써라.

흠.. 뭐가 있는지 알아야 쓰지 말입니다. @_@; 그래서 FCSFB 객체를 콘솔에 출력해봤습니다.

ConversionService converters =
    @org.springframework.format.annotation.DateTimeFormat java.lang.Long -> java.lang.String: org.springframework.format.support.FormattingConversionServiceFactoryBean$NoJodaDateTimeFormatAnnotationFormatterFactory@794e113b, @org.springframework.format.annotation.NumberFormat java.lang.Long -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    @org.springframework.format.annotation.DateTimeFormat java.util.Calendar -> java.lang.String: org.springframework.format.support.FormattingConversionServiceFactoryBean$NoJodaDateTimeFormatAnnotationFormatterFactory@794e113b
    @org.springframework.format.annotation.DateTimeFormat java.util.Date -> java.lang.String: org.springframework.format.support.FormattingConversionServiceFactoryBean$NoJodaDateTimeFormatAnnotationFormatterFactory@794e113b
    @org.springframework.format.annotation.NumberFormat java.lang.Double -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    @org.springframework.format.annotation.NumberFormat java.lang.Float -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    @org.springframework.format.annotation.NumberFormat java.lang.Integer -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    @org.springframework.format.annotation.NumberFormat java.lang.Short -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    @org.springframework.format.annotation.NumberFormat java.math.BigDecimal -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    @org.springframework.format.annotation.NumberFormat java.math.BigInteger -> java.lang.String: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    java.lang.Character -> java.lang.Number : org.springframework.core.convert.support.CharacterToNumberFactory@69236cd5
    java.lang.Number -> java.lang.Character : org.springframework.core.convert.support.NumberToCharacterConverter@552c8fa8
    java.lang.Number -> java.lang.Number : org.springframework.core.convert.support.NumberToNumberConverterFactory@1cee1ede
    java.lang.String -> @org.springframework.format.annotation.DateTimeFormat java.lang.Long: org.springframework.format.support.FormattingConversionServiceFactoryBean$NoJodaDateTimeFormatAnnotationFormatterFactory@794e113b, java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Long: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    java.lang.String -> @org.springframework.format.annotation.DateTimeFormat java.util.Calendar: org.springframework.format.support.FormattingConversionServiceFactoryBean$NoJodaDateTimeFormatAnnotationFormatterFactory@794e113b
    java.lang.String -> @org.springframework.format.annotation.DateTimeFormat java.util.Date: org.springframework.format.support.FormattingConversionServiceFactoryBean$NoJodaDateTimeFormatAnnotationFormatterFactory@794e113b
    java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Double: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Float: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Integer: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Short: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    java.lang.String -> @org.springframework.format.annotation.NumberFormat java.math.BigDecimal: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    java.lang.String -> @org.springframework.format.annotation.NumberFormat java.math.BigInteger: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@47ad6b4b
    java.lang.String -> java.lang.Boolean : org.springframework.core.convert.support.StringToBooleanConverter@4dbb9a58
    java.lang.String -> java.lang.Character : org.springframework.core.convert.support.StringToCharacterConverter@57922f46
    java.lang.String -> java.lang.Enum : org.springframework.core.convert.support.StringToEnumConverterFactory@67dacccc
    java.lang.String -> java.lang.Number : org.springframework.core.convert.support.StringToNumberConverterFactory@3fe2670b
    java.lang.String -> java.util.Locale : org.springframework.core.convert.support.StringToLocaleConverter@28db23f1
    java.lang.String -> java.util.Properties : org.springframework.core.convert.support.PropertiesToStringConverter@14be49e0
    org.springframework.core.convert.support.ArrayToArrayConverter@53f78b68
    org.springframework.core.convert.support.ArrayToCollectionConverter@9ac5f13
    org.springframework.core.convert.support.ArrayToObjectConverter@744d76b4
    org.springframework.core.convert.support.ArrayToStringConverter@1395dd5b
    org.springframework.core.convert.support.CollectionToArrayConverter@5e6214f5
    org.springframework.core.convert.support.CollectionToCollectionConverter@2eb0a3f5
    org.springframework.core.convert.support.CollectionToObjectConverter@4a5f2db0
    org.springframework.core.convert.support.CollectionToStringConverter@4edc41c5
    org.springframework.core.convert.support.IdToEntityConverter@20e183e9, org.springframework.core.convert.support.ObjectToObjectConverter@359b46dc
    org.springframework.core.convert.support.MapToMapConverter@4b14b82b
    org.springframework.core.convert.support.ObjectToArrayConverter@14004204
    org.springframework.core.convert.support.ObjectToCollectionConverter@65493102
    org.springframework.core.convert.support.ObjectToStringConverter@2830ae41
    org.springframework.core.convert.support.StringToArrayConverter@3e5dc994
    org.springframework.core.convert.support.StringToCollectionConverter@58e41bc3

흠.. 저런 것들이 있군요.
top

  1. Favicon of http://toby.epril.com BlogIcon 토비 2010.02.28 19:53 PERM. MOD/DEL REPLY

    곧 출간될 스프링 3.0 책 13장에 보면 아주 자세히 나와있....

    Favicon of http://whiteship.me BlogIcon 기선 2010.03.01 16:45 PERM MOD/DEL

    앗.. 감사합니다. ㅋㅋ

Write a comment.


[BBC News] Pensioners accused kidnapping

모하니?/English : 2010.02.25 23:45


http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/2010/02/100210_witn_pensioners.shtml

오늘은 좀 긴;;;

In Germany, if you think your financial advisor has been giving bad advice and messing up your investments, you can go to the regulators, you can go to the police. But, in Bavaria, one group of pensioners stands accued of employing much more direct method of registering their dissaticfaction. They're on trial for kidnapping their financial advisor and holding him hostage.

Four senior citizens, aged between 63 and 79 had invested nearly three and a half millon dollars to the US market and lost it all in the sub-prime morgage meltdown. They'd conclude that who'd handled the investment should now reimburse them.

According to prosecutors, last summer the pensioner possy plus one accomlice abducted the financial advisor out of his house, tied him, gagged him, put him in a box, and transport him in the boot of a cat 450 killometers to the lakeside retreat.

He claims to have spent four days locked in the celler there and to have been tortured. After agreeing their demands, the prisoner was allowed to sand a fax to Switzland arranging payment. He concealed the prase 'Call the police' in the text and the alram is raised. Soon after, a crack team of commanders came to the recue.

On the opening day of the trial, the 74 year old aged ringleader of the gang avoided using the word 'kidnap'. He said he and his co-defandants had only wanted to treat their guest to a couple of days holiday in Bavaria.


top

TAG BBC

Write a comment.


[Maven] 빌드 할 떄 특정 폴더 삭제하기

Build/Maven : 2010.02.25 18:15


http://maven.apache.org/plugins/maven-clean-plugin/examples/delete_additional_files.html

어헉...

빌드할 때 가끔 pom.xml에서 라이브러리 올렸는데 버전만 다르고 여러 개개 lib 폴더에 들어가는 바람에 에러나 생기는 현상이 종종 있는데;;

그걸 방지하기 위해

            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>web/WEB-INF/lib</directory>
                        </fileset>
                        <fileset>
                            <directory>web/WEB-INF/classes</directory>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>

여기서 clasess 폴더는 빠져도 되지만 lib 폴더는 꼭 넣도록 합시다.

저녁 약속을 깜빡하는 바람에 초스피드 블로깅
top

  1. Miracle 2010.02.25 18:19 PERM. MOD/DEL REPLY

    라이브러리 버전 올리면 가끔 깨지는데.. ㅎㅎ 설정해둬야겠넹.. ㅎㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.25 23:29 PERM MOD/DEL

    봄싹엔 이미 설정해 두었지요.;;

    앗 커밋을 안했나;;

Write a comment.


클래스 로더의 loadClass()와 findClass()

Java : 2010.02.25 13:30


참조: http://onjava.com/pub/a/onjava/2005/01/26/classloading.html?page=1

클래스와 데이타

모든 클래스는 first-class 자바 객체를 통해서 자신의 코드를 참조할 수 있다. 컴파일 할 때 컴파일러가 public static final class 라는 이름의 java.lang.Class 타입 필드를 추가해준다.

일단 한 번 클래스가 JVM으로 로딩되면, 같은 클래스는 다시 로딩 되지 않는다. 여기서 "같은 클래스"란 해당 클래스를 로딩한 클래스로더와 해당 클래스의 풀네임으로 구성된 식별자로 구분한다. 

예를 들어, WhiteshipClassLoader가 로딩한 springsprout 패키지의 Whiteship클래스는 (WhiteshipClassLoader, springsprout, Whiteship) 식별자를 가지게되고, SpringSproutClassLoader가 로딩한 springsprout 패키지의 Whiteship클래스는 (SpringSproutClassLoader, springsprout, Whiteship) 식별자를 가지기 때문에 별개의 클래스로 인식된다는 것이다.

클래스 로더

모든 클래스는 java,lang.ClassLoader의 인스턴스가 로딩한다.

부트스트랩 클래스 로더: java.lang.Object 같은 핵심 자바 클래스를 로딩한다. 런타임 클래스들은 JRE\lib\rt.jar에 들어있다. 접근이 안 됨. sout(String.class.getClassLoader())를 호출하면 null이 나온다. 

확장 클래스 로더: 핵심 자바 런타임 코드 이외의 확장 라이브러리를 java.ext.dirs 속성의 경로에 넣어둘 수 있다. ExtClassLoader는 java.ext.dirs에 위치한 모든 .jar 파일을 로딩한다.

애플리케이션 클래스 로더: AppClassLoader는 java.class.path 시스템 속성에 해당하는 경로의 모든 클래스를 로딩한다.

컨텍스트 클래스 로더: java.lang.Thread는 getContextClassLoader()라는 메서드를 가지고 있다. 이 메서드는 특정 쓰레드에서 사용중인 클래스로더를 반환해준다. 컨텍스트 클래스 로더는 쓰레드를 만들 때 사용한 클래스 로더이며, 기본적으로 parent 쓰레드의 클래스로더가 할당 된다. setContextClassLoader로 변경 가능하다. 

클래스로더 동작 방식

protected synchronized Class<?> loadClass
    (String name, boolean resolve)
    throws ClassNotFoundException{

    // First check if the class is already loaded
    Class c = findLoadedClass(name);
    if (c == null) {
        try {
            if (parent != null) {
                c = parent.loadClass(name, false);
            } else {
                c = findBootstrapClass0(name);
            }
        } catch (ClassNotFoundException e) {
            // If still not found, then invoke
            // findClass to find the class.
            c = findClass(name);
        }
    }
    if (resolve) {
   resolveClass(c);
    }
    return c;
}

java.lang.ClassLoader의 loadClass() 메서드 코드이며 이 클래스를 확장하는 클래스는 findClass()를 재정의하는 것이 기본적이다. java.lang.ClassLoader의 findClass()는 ClassNotFoundException을 던진다.

findClass()를 구현할 떄는 특정 소스에서 바이트 코드를 가져오거나, 소스를 바이트 코드로 생성하거나, BCEL(Byte Code Engineering Library)를 사용할 수도 있다. 암튼.. 그렇게 해서 바이트 코드를 가져온 다음 defineClass() 메서드를 호출해서 byte 배열을 Class 인스턴스로 변환해야 한다. 

defineClass() 메서드 호출이 중요한데, 이 것을 호출한 클래스 로더가 바로 해당 클래스의 defining 클래스 로더가 되는 것이며 이 defining 클래스로더가 다를 경우 다른 클래스로 인식하게 된다. Whiteship.class.getClassLoader()를 실행했을 때 반환되는 클래스 로더가 바로 defining 클래스 로더다.

findClass 구현 예제 코드

    public Class findClass(String name)throws
        ClassNotFoundException{

        byte[] classBytes = findClassBytes(name);
        if (classBytes==null){
            throw new ClassNotFoundException();
        }
        else{
            return defineClass(name, classBytes,
                0, classBytes.length);
        }
    }


top

Write a comment.


[MySQL] mysqldump 백업 복구

Linux : 2010.02.24 14:20


참조: http://osguru.tistory.com/entry/MySQL-DB-%EB%B0%B1%EC%97%85-%EB%B0%8F-%EB%B3%B5%EA%B5%AC-mysqldump

백업

mysqldump -u 계정 -p 비번 DB > 백업파일

복구

mysql -u 계정 -p 비번   DB < 백업파일

흠.. 잘하면 외울 수도 있겠구나;;
top

  1. 2010.02.24 14:54 PERM. MOD/DEL REPLY

    비밀댓글입니다

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.24 15:26 신고 PERM MOD/DEL

    엇;; 나 맞는데;;
    중학교 동창이구나.ㅋㅋㅋㅋㅋ

    세상에.. 블로깅 하다보니 별일이 다있구만.ㅋㅋ

    전씨 맞지?ㅋㅋㅋ
    헐.. 근데 어쩌지;; 난 그대의 얼굴이 매치가 안되네;;
    나보다 한참 나이가 많아 보이자나;; @_@;;

    호주 워킹도 다녀왔군..
    메일좀 보내봐~ (블로그 맨 아래에 있다.)

Write a comment.


[BBC News] Golden Glove winners announced

모하니?/English : 2010.02.23 23:15


http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/2010/01/100118_witn_golden_globes.shtml

James Cameron, who's spent the past five years working on Avatar, was names the best director. The firm, whitch is on course to become the highest grossing of all time, is now considered to be in poll position.

The Handover, a firm aound a stag party in Las Vegas, won the aword for best comedy. Jeff Bridge, who plays a country music singer of the firm Crazy Heart, was named the best actor. And Marln Streep took the aword for best actress in a comedy for her portlayor of the American TV cheaf, the last Julia Child in Julie and Julia.

The most of celebraties worn ribbons in support of the peoples of Haiti. The TV watchers are encouraging to give money. The organisers of the show, the Holywood Forein Press Association, said they were donating $100,000 to the earthquake relief fund.

오늘은 LinkageError 때문에 녹음과 검사는 생략;;
top

Write a comment.


자바 클래스로더 입문 퀴즈 정리

Java : 2010.02.23 22:30


  1. 21:15:40 [ClassLoader 퀴즈 끝] SpringSprout와 WhiteshipFactory가 참조하는 Whiteship은 누구인가.
  2. 2010/02/22 [ClassLoader 퀴즈 6] SpringSprout는 과연 Whiteship의 이름을 알 수 있을까? (2)
  3. 2010/02/22 [ClassLoader 퀴즈 5] Whiteship은 언제 로딩 될까? (2)
  4. 2010/02/21 [ClassLoader 퀴즈 4] SpringSprout가 알고 있는 Whiteship은 누구인가? (9)
  5. 2010/02/19 [ClassLoader 퀴즈 3] Whiteship은 Whiteship일까 아닐까? (2)
  6. 2010/02/19 [ClassLoader 퀴즈 2] Whiteship은 내가 데려왔다!! (5)
  7. 2010/02/19 [ClassLoader 퀴즈 1] Whiteship은 대체 누가 데려온 것일까? (8)

입문 과정 퀴즈를 푸는데 필요한 학습 자료
- ClassLoader APi, 소스 학습
- URLClassLoader API, 소스 학습
- http://docs.jboss.org/jbossas/jboss4guide/r1/html/ch2.chapter.html#d0e2314

과제
- 위 Jboss 문서 2.2.2를 참조하여 클래스 로딩 관련 주요 예외 3종 세트 재현하기
- ClassCastException
- IllegalAccessException
- LinkageError

파이팅입니다.
top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.24 03:17 신고 PERM. MOD/DEL REPLY

    언제 7번까지 나온거에요 ㅡㅡ;; 일단 내일 맑은 정신으로 풀어야겠삼;;ㅋ LinkageException 이야기가 여기 나오는 내용이군요 .. ㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.24 08:30 PERM MOD/DEL

    나도 첨봤다네

Write a comment.


[ClassLoader 퀴즈 끝] SpringSprout와 WhiteshipFactory가 참조하는 Whiteship은 누구인가.

Java : 2010.02.23 21:15


참조: http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.2/doc/Server_Configuration_Guide/Class_Loading_and_Types_in_Java-LinkageErrors___Making_Sure_You_Are_Who_You_Say_You_Are.html#LinkageErrors___Making_Sure_You_Are_Who_You_Say_You_Are-Classes_demonstrating_the_need_for_loading_constraints

   @Test
    public void linkageError() throws Exception {
        FlaggedFileUrlClassLoader cl1 = new FlaggedFileUrlClassLoader("C:/intellij9-workspace/springsprout2/temp2/");
        FileUrlClassLoader cl0 = new FileUrlClassLoader("C:/intellij9-workspace/springsprout2/temp/", cl1);
      
        Class springSproutClass = cl0.loadClass("SpringSprout");
        Object springSprout = springSproutClass.newInstance();
        springSprout .getMethod("link").invoke(o1);
    }



public class SpringSprout {

    public void link(){
        System.out.println(Whiteship.class.getClassLoader() + " SpringSprout's Whiteship");
        Whiteship w = WhiteshipFactory.getWhiteship();
    }

}

public class Whiteship{
   
}

public class WhiteshipFactory {

    public static Whiteship getWhiteship(){
        System.out.println(Whiteship.class.getClassLoader() + " WhiteshipFactory's Whiteship");
        return new Whiteship();
    }
}

굵은 글씨 부분에서 아주 기가막힌 일이 벌어지도록 FlaggedFileUrlClassLaoder(FCL)를 만들었고, 그것으로 delegate하여 클래스를 로딩하는 UrlClassLoader(UCL)를 사용하여 SpringSprout 클래스를 로딩했습니다.

(parent 구조)

UCL -> FCL -> null

FCL은 temp2 폴더를 클래스패스로 취하며, UCL은 temp 폴더를 클래스패스로 취하고 있습니다.
temp2에는 SpringSprout가 참조하는 WhiteshipFactory가 들어있고..
temp에는 SpringSprout와 Whiteship이 들어있습니다.

(dependency)

SpringSprout -> WhiteshipFactory, Whiteship
WhiteshipFactoru -> Whiteship

1. SpringSprout는 UCL이 로딩합니다. UCL이 SpringSprout의 Defining CL이 되며, 동시에 Initial CL이 됩니다.

2. SpringSprout의 Defining CL인 UCL이 SpringSprout가 의존하는 WhiteshipFactory와 Whiteship을 로딩합니다.
- 이때 WhiteshipFactory는 UCL의 parent인 FCL의 클래스패스에 있기 때문에 FCL이 최초로 로딩합니다. 따라서 Defining CL는 FCL이 됩니다.
- Whiteship은 UCL의 클래스패스에 있기 떄문에 Defining CL은 UCL입니다.

3. WhiteshipFactory가 의존하는 Whiteship을 로딩합니다.
- 이때 WhiteshipFactory의 defining CL인 FCL이 Whiteship 로딩을 시도하는데 원래대로라면 FCL의 클래스패스에 Whiteship이 없기 때문에 ClassNotFoundException이 나와야 정상이지만 제가 만든 FCL은 자기가 로딩해버립니다. 따라서 WhiteshipFactory가 참조하는 Whiteship의 Defining CL은 FCL입니다.

4. SpringSprout의 link() 메서드를 실행합니다.
- Whiteship(UCL) = Whiteship(FCL) 최종적으로 이런 공식이 되버립니다.
- 이 위험한 순간 레퍼런스를 대입하기 전에.. loader constraint violation이 발동하여 LinkageError를 발생시킵니다.
- Whiteship 타입을 여러 클래스로더에서 안전하게 사용할 수도록 확인해주는 이 에러는 Liang와 Bracha가쓴 논문을 바탕으로 개선되었습니다. JVM 1.1 이하 버전에서는 이런걸 그냥 허용했다고 합니다.

loader constraint violation
- 레퍼런스를 대입하기 전에 해당 타입을 정의한 defining CL들이 다른지 확인하여 다르다면 에러를 발생시켜 줍니다.
- 이때는 initative CL이 다르던 말던 상관없습니다.


LinkageError를 재현해 보느라.. 오늘 하루를 몽땅 소진했습니다.

이번 퀴즈는.. 이 방법 말고 좀 더 간단하게 LinkageError를 재현해주는 분이 맞추시는 겁니다.
부디 나타나 주시길....
top

Write a comment.


백기선's 2010 Weekly Report - 2/23

모하니?/Planning : 2010.02.23 05:51



이제 5시에 일어나는데 완전히 적응됐다. 주말에 알람 설정을 잘못해서 6시에 일어났더니 이제는 자다가 알람이 안 울린거 아닌가 하고 3시와 4시에 자동으로 눈이 떠지기도 했다. 하지만 몸이 피곤하긴 하다. 일요일은 보드를 타러가지 못하고 집에서 자고 밥먹고 공부하고 자고 밥먹고 놀고를 반복하며 푹 쉬었다.

그 뒤 하루 계획 짜는 시간은 1시간에서 30분으로 줄였다. 처음에는 5시에 못일어나서 헤롱 헤롱 거릴까봐 일부러 계획 짜는 시간을 넉넉하게 잡았는데 이제는 그럴 필요가 없을 것 같다. 남는 30분 정도는 영어 교재를 읽어야겠다.

번역은 생각보다 진도가 잘 안나갔다. 출근하자마자 보통 퀴즈를 풀거나 학습에 빠지는 바람에 잘 지키지 못했는데 오늘부턴 꼭 2시간 풀타임으로 번역을 하리라. 계획을 작성할 때 2시간 동안 몇 페이지까지 하겠다고 적어둬야겠다.

클래스로더 공부하는 시간과 시큐리티 PPT 만드는 시간을 바꿨다. 좀 더 머리가 잘 돌아갈 때 클래스로더를 공부하고 조금 피곤해지고 집중력이 떨어지는 시간에 시큐리티 PPT를 만드는게 체질에 맞는것 같다.

회사일도 번역만큼 집중이 잘 안 됐다. 잠깐 쉰다는 생각으로 일에도 신경써야겠다. 그런 의미에서 매일 회사일로 진행할 개발 일정을 미리 캘린더에 상세하게 적어두는게 좋겠다.

BBC News는 출퇴근 길 전철에서 풀타임으로 스크립트를 외운다. 덕분에 집에서는 별다른 학습 시간을 투자하지 않고 확인하는 시간만 가진다. 전날 저녁에 리스닝한 스크립트를 외웠는지 적어보고, 아내에게 외워서 낭송한 뒤, 아이팟으로 녹음해서 들어본다. 그리고 다음날 외울 스크립트를 골라서 리스닝을 한다.

운동하기는 잘 진행됐다. 단, 살이 빠지지 않고 오히려 찌고 있다. @_@;; 올라가는 그래프를 보고 있자니 씁쓸하다. 리듬 복싱을 했더니 어깨가 뭉친다. 더 뭉치기 전에 풀어줘야겠다.

책 읽기 시간도 잘 진행되지 않았다. 앞의 일정들이 조금씩 뒤로 밀리는 경향이 많았다. 그래도 잠은 일찍 자야 5시에 일어날 수 있으니 보통 11시 반 ~ 12시 사이에 잠을 잔다. 그러다보니 자연스래 책 읽는 시간이 줄어드는데 아무래도 책도 그날 그날 읽을 곳을 표시해놔야겠다.

전반적으로 세부 일정의 목표가 구체적일 수록 잘 지켜졌다. 회사일과 번역같이 뭉뚱그러진 일정은 잘 지켜지지 않았지만 위핏과 BBC News는 매우 잘 지켜졋다. 클래스로더 학습은 지나치게 많은 시간을 투자했다. 빠져들어서 공부하는게 재미도 있고 성과도 있어서 이부분은 어떻게 해야할지 잘 모르겠다. 한참 집중해서 하고 있는데 시간 됐다고 내팽게칠순 없으니 말이다. 한계점을 설정하고 그 시간 내에서 최대한 집중해서 공부하는 식으로 고쳐나가야겠다.

마지막으로 일정에 가장 큰 영향을 끼치는 변수를 찾았다. 친구들과의 술약속인데 거의 퇴근 이후의 일정을 하나도 하지 못한다. 그렇다고 인연을 끊을 수는 없지 않은가. 많이 봐야 한달에 한번인데 그 정도는 봐주자.

좋아.. 이래저래 planning 끝.
top

TAG TODO
  1. Favicon of http://bluepoetworld.tistory.com/ BlogIcon bluepoet 2010.02.23 11:00 PERM. MOD/DEL REPLY

    저도 덕분에 구글 캘린더로 계획세우며 생활하고 있습니다.

    화이팅!!

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 11:14 PERM MOD/DEL

    넵 화이팅이요~

Write a comment.


[BBC News] Toyota recall reaches Eupore

모하니?/English : 2010.02.22 21:23


http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/2010/01/100129_witn_toyota_page.shtml

Toyota says the number of vehicles and the models that will be recalled in Europe, is still being investigated. It said in some rare cases the accelerator padal mechanism could become worn and stick while pressed down.

The same problem, which may cause a car to speed out of control, has lad to a recall of 2.3 million vehicles in North Ameria. Sales have been suspended of 8 eight Toyota models there, include the best-selling Carmly. Productions will be stopped for at least a week in company's fatories in the United States and Canada.

In the a seperate move, Toyota is recalling over 5 million vehicles in the United States to change replace accelerators which could become stuck under floor mates mats. Some vehicles are affacted by both problems.

The safety concerns are damaging Toyota's reputation for reliability and quality, whitch helpled it to overtake General Motors to become the world's biggest car maker. In Tokyo the company's shares fell by 3.9% on Thursday on the top of a 4.3% drop on Wednesday.

오늘은 발음한 것도 녹음해서 올려봅니다.
지적해주시면 그저 감사할 따름입니다.





top

  1. astre 2010.02.23 08:14 PERM. MOD/DEL REPLY

    내가 듣기에는
    모든 단어의 엑센트가 끝에있다는 요상한점.
    P과 F가 발음이 거의 비슷하다는점.

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 09:17 PERM MOD/DEL

    응.. 주의할께

Write a comment.


핸드폰 역발상

모하니?/Thinking : 2010.02.22 18:13


요즘 스마트폰이 대세라고 열심히 떠들고 열심히 사고 열심히 개발하는 것 같다. 하지만 난 그 비싼 요금제와 그 많은 기능들이 들어있는 휴대폰은 필요가 없다. 그냥 문자랑 전화만 되면 된다.

나머지 기능들은 핸드폰에게 추가적인 역할만 더해질 뿐이다. 객체-지향 개발자라면 SRP 원칙을 들어봤을 것이다. Single Responsibility Principal 단일책임원칙이다. 지금 나오는 그리고 앞으로 나올 휴대폰들은 이 원칙을 지나치게 위배하게 될 것이다. 복잡해지고 비싸질 것이다.

난 다음에 핸드폰을 사려면 당장 나에게는 필요도 없는 기능과 부품들이 덕지 덕지 붙어있는 비싼 폰을 비싼 약정과 함께 구매해야 할지도 모른다. 그래서 조심해야 한다. 자칫 핸드폰을 던지고 싶은 화가 치밀더라도 꾹 참아야 한다. 그리고 가끔 공짜 폰을 주겠다며 사기치는(달콤한 말로 헛 돈을 뜯어내는) 전화들이 오면 그냥 끊어주는게 시간과 돈을 절약하는 길이다. 세상에 공짜가 어디있냐...

정말 심플한 기능과 부품으로 최소한의 기능만 잘 동작하는 기기를 싼 값에 싼 요금제와 함께 제공해주는 통신사가 있다면.. 그 회사야 말로 "경영혁신"을 했다고 칭찬해주고 싶다.

이상.. 아이팟터치 유저가... ㅋㅋㅋㅋㅋ
top

  1. 환상경 2010.02.22 21:40 PERM. MOD/DEL REPLY

    이상 설득력없는 말을 하시는 주인장님의 포스팅이었습니다.

    인건가요? ㄷ ㄷ ㄷ ㄷ ㄷ ㄷ ㄷ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 05:21 PERM MOD/DEL

    휴대폰과 휴대용 멀티미디어 제품을 분리해줬으면 좋겠다는 소비자도 있다는 것을 알아줬으면 하는 바램일 뿐이랍니다. :)

  2. Favicon of http://dohpaz.tistory.com BlogIcon Zaphod 2010.02.23 09:58 PERM. MOD/DEL REPLY

    3G망 연동이 안되는 모바일 멀티미디어 제품이라면 아이팟 터치가(???) 있죠

    요즘 모바일 기기에서 어떻게든지 망연동을 하는게 대세라서 (3G망이나 WiFi) 쩝...
    그러고보니 터치는 WiFi연동 되는걸로 아는데 쓸만하겠군영

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 10:00 PERM MOD/DEL

    한국은 인터넷 천국이라 3G 없어도 쓸만 합니다.
    고맙게도 대부분 공유기에 비번도 설정하지 않으시죠.ㅋㅋ

  3. Favicon of http://blog.daum.net/gujjy BlogIcon 내사랑꿀떡 2010.02.23 10:10 PERM. MOD/DEL REPLY

    핸드폰, mp3, 닌텐도DS, 디카 뭐.. 이런 것들 주렁주렁 달고 다니는게 귀찮다가도... 바꿀일이 있거나 고장나거나 잃어버려도 하나에 몰아두지 않아서 다행이다라는 생각을 합니다. 의존도가 높아지면 그만큼 신경을 써야 하니까요..

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 10:45 PERM MOD/DEL

    제대로 즐기려면 어차피 특화된 기기를 써야하죠.

    닌텐도DS로 슈퍼마리오 하는거랑 아이폰에 SNES 애뮬 깔아서 슈퍼마리오 하는거랑..비교가 안되죠.

    PSP로 갓오브워 하는거랑 아이폰 갓오브워도 비교가 안되듯이;

  4. Favicon of http://bluepoetworld.tistory.com/ BlogIcon bluepoet 2010.02.23 10:18 PERM. MOD/DEL REPLY

    역발상에 일단 박수를~!! ^^

    약정이 정말 부담되긴 해요~ 아이폰 사고 싶은뎅 ㅠ.ㅠ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 11:12 PERM MOD/DEL

    그러게욧. 핸드폰 파는 사람들이 부가서비스 무조건 몇 개월 약정 거는 것보다 더 악날한 거 같아요.

Write a comment.


[ClassLoader 퀴즈 6] SpringSprout는 과연 Whiteship의 이름을 알 수 있을까?

Java : 2010.02.22 15:15


    @Test
    public void illegalAccessException() throws Exception {
        FileUrlClassLoader fUCL1 = new FileUrlClassLoader(CLASSPATH, null);
        Class whiteshipClass = fUCL1.loadClass(WHITESHIP);
        Object whiteship = whiteshipClass.newInstance();

        System.out.println(this.getClass() + " " + this.getClass().getClassLoader());
        System.out.println(whiteshipClass + " " + whiteshipClass.getClassLoader());

        whiteshipClass.getDeclaredField("name").get(whiteship);
    }

public class Whiteship2 {

    String name = "keesun";
}


이 테스트를 실행한 결과 중 일부는 다음과 같습니다.

class sandbox.classloader.ClassloaderTest sun.misc.Launcher$AppClassLoader@19821f <- CL1
class sandbox.classloader.Whiteship2 ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ<- CL

1. CL의 값은 CL1일까요? 아니면 전혀 다른 값?
2. 그 뒤 코드의 굵은 줄을 실행한 결과는 어찌됐을까요? 무사히 실행하고 keesun을 가져왔을까요? 에러가 났을까요? 에러가 났다면 어떤 에러가 났을까요?


top

  1. Favicon of http://me2day.net/geekinside BlogIcon 박성철 2010.02.23 16:22 PERM. MOD/DEL REPLY

    1은 다른 값이고...
    2는 setAccessible 얘기인가요?

    Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.24 23:40 신고 PERM MOD/DEL

    코드는 protected 레벨이 아니라 default 상황인것 같은데;;
    아닌가;; 훔냥;; ㅎ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.25 05:22 신고 PERM MOD/DEL

    아;; 설명을 잘못적은 거임;
    package 레벨이라고 적었어야 하는건데;;
    위에 댓글을 수정할께

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.25 05:22 신고 PERM MOD/DEL

    네 1번은 다른 값이구요. 2번 setAccessible을 하면 물론 가져올 수 있습니다. 하지만 저 상황에서 왜 setAccessible을 해야 하는건지..

    package 레벨이라.

    String name = new Whiteship2().name;

    이런식으로도 가져올 수 있는 값인데 왜 저기서는 접근을 못한다고 에러가 날지 고민해보길 바라는 문제였습니다.

Write a comment.


[ClassLoader 퀴즈 5] Whiteship은 언제 로딩 될까?

Java : 2010.02.22 15:07


public class SpringSprout {

    Whiteship2 whiteship;

    public void makeWhiteship(){
        whiteship = new Whiteship2();
    }
}

이런 클래스가 있을 때 SpringSprout가 참조하는 Whiteship2는 과연 언제 클래스로더에 의해 로딩이 될까요? SpringSprout를 로딩할 때? SpringSprout 객체를 생성할 때? Whiteship2 인스턴스를 생성할 때. 이 중 하나가 아닐까요?

   @Test
    public void whenDoseTheDependeciesWillBeLoaded() throws Exception {
        FileUrlClassLoader fUCL1 = new FileUrlClassLoader(WIN_TEMP_CLASSPATH);
        Class springSproutClass1 = fUCL1.loadClass(TEMP_SPRING_SPROUT);
        Object springSprout1 = springSproutClass1.newInstance();

        assertThat(fUCL1.isLoadedClass(TEMP_WHITESHIP), is(B1));

        Object whiteship1 = springSproutClass1.getMethod("makeWhiteship").invoke(springSprout1, null);

        assertThat(fUCL1.isLoadedClass(TEMP_WHITESHIP), is(B2));

        System.out.println(fUCL1.loadClass(TEMP_WHITESHIP).getClassLoader());
        System.out.println(fUCL1.loadClass(TEMP_SPRING_SPROUT).getClassLoader());
    }

그래서 위와 같은 테스트를 만들어봤습니다.
이 테스트가 통과하려면 B1과 B2에는 각각 어떤 값이 들어가야 할까요?

기타 조건은 이전 글과 동일합니다.
top

  1. Favicon of http://me2day.net/geekinside BlogIcon 박성철 2010.02.23 16:12 PERM. MOD/DEL REPLY

    찍겠습니다. true, true

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 16:17 PERM MOD/DEL

    false, true 입니다.

    isLoadedClass 구현체는 다음과 같습니다.

    public boolean isLoadedClass(String name){
    Class clazz = super.findLoadedClass(name);
    return clazz != null;
    }

Write a comment.


[ClassLoader 퀴즈 4] SpringSprout가 알고 있는 Whiteship은 누구인가?

Java : 2010.02.21 21:29


퀴즈 3번을 다시 낸거라 생각히셔도 되겠습니다. 2, 3번을 푸셨다면 이 문제도 역시 간단하게 푸실 수 있을 겁니다.

   @Test
    public void classCastException() throws Exception {
        URLClassLoader uCL1 = new FileUrlClassLoader(TEMP_CLASSPATH);
        Class springSproutClass = uCL1.loadClass(TEMP_SPRING_SPROUT);
        Object springSprout = springSproutClass.newInstance();
        Class whiteshipClass1 = uCL1.loadClass(TEMP_WHITESHIP);
        Object whiteship1 = whiteshipClass1.newInstance();

        URLClassLoader uCL2 = new FileUrlClassLoader(TEMP_CLASSPATH);
        Class whiteshipClass2 = uCL2.loadClass(TEMP_WHITESHIP);
        Object whiteship2 = whiteshipClass2.newInstance();

        Method cast = springSproutClass.getMethod("castWhiteship", Object.class);
        cast.invoke(springSprout, whiteship1); // C1
        cast.invoke(springSprout, whiteship2); // C2
    }

TEMP_CLASSPATH는 이 프로젝트의 기본 클래스패스가 아닙니다.
TEMP_SPRING_SPROUT는 SpringSprout.java 클래스의 이름이고
TEMP_WHITESHIP은 Whiteship.java 클래스의 이름을 줍니다.

SpringSprout 클래스에 있는 castWhiteship 메서드는 다음과 같습니다.

    public void castWhiteship(Object object){
        Whiteship2 whiteship = (Whiteship2)object;
    }

C1에서는 아무 일 없지만 C2에서는 바로 저 부분에서 ClassCastException이 발생하죠. 그 이유는 퀴즈 3에 대한 답으로 성윤군이 달아줬지요.

그럼 이번 문제는 조금 다르게...

public void hi(Whiteship whipteship){
    // 띵까 띵까..
}

SpringSprout에 이런 메서드가 있을 때 저 메서드를 호출할 때 whiteship1와 whiteship2 객체를 각각 전달해 준다면 어떤 일이 벌어질까요?

        Method cast = springSproutClass.getMethod("hi", whiteshipClass1);
        cast.invoke(springSprout, whiteship1); // H1
        cast.invoke(springSprout, whiteship2); // H2


top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.22 11:19 신고 PERM. MOD/DEL REPLY

    //띵까 띵까 ... 이부분에서 무슨일은 안하는거에요 ?

    문제가 그냥 전달했을때 어떻게 되냐 물어보는건가용?

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.22 11:25 PERM MOD/DEL

    ㅇㅇ 잘하면.. 띵까 띵까 놀수도 있고
    안되면 띵까 띵까 놀수 조차 없지.

    왜 못 놀게 될까? 어떤 에러 땜시??

  2. Favicon of http://me2day.net/geekinside BlogIcon 박성철 2010.02.23 14:21 PERM. MOD/DEL REPLY

    오호... 요거 재미있네요.
    전 오류 안 날 것 같은데... 나나요?

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 15:20 PERM MOD/DEL

    넵 클래스를 읽어온 로더가 다르기 때문에 전혀 다른 타입으로 보고 ILLEGAL_ARGUMENT_EXCEPTION이 발생한합니다.

    ClassCastException을 재현하고 싶은데 자꾸 저 녀석이 방해를 했었죠.ㅋㅋ

  3. Favicon of http://me2day.net/geekinside BlogIcon 박성철 2010.02.23 14:24 PERM. MOD/DEL REPLY

    아. castWhiteship 안에서 cast를 하는군요.
    전 정말 모르겠는데요. ㅎㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 15:21 PERM MOD/DEL

    cast 하고 싶어서 결국은 Object 타입으로 받았지만.. 실제로 요즘같으면 Object 타입을 매개변수로 받는 건 좀 드물것 같아서..

    ClassCastException 보다는 IAE를 더 자주 보게 되지 않을까 싶네요.

  4. Favicon of http://me2day.net/geekinside BlogIcon 박성철 2010.02.23 16:11 PERM. MOD/DEL REPLY

    방금 해보았는데요.NoClassDefFoundError가 뜨네요. 테스트 코드의 classpath에 Whiteship이 없어서 그러는 것 같은데... 왜 기선님과 다르게 될까요. -_-

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 16:15 PERM MOD/DEL

    NoClassDefFoundError는 아마 loadClass 할 때 발생한 것 같은데요. 흠.. 그 부분은 지나가야;; Whiteship 클래스는 TEMP_CLASSPATH에서만 참조할 수 있어야 하고 parent는 몰라야 합니다. TEMP_CLASSPATH를 확인해 확인해 보셔야 될 듯..

    Favicon of http://me2day.net/geekinside BlogIcon 박성철 2010.02.23 20:03 PERM MOD/DEL

    Method cast = springSproutClass.getMethod("hi", Whiteship.class);

    여기에서 NoClassDefFoundError가 납니다.Whiteship class를 이 테스트 케이스가 모르니까요.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.23 21:24 신고 PERM MOD/DEL

    아.. 맞네요. 맞아!!
    마지막 문제의 코딩해보지 않고 그냥 썼더니.ㅋ

    Whiteship.class 대신 위에서 로딩해온 클래스중 하나로 바꿔야겠군요. whiteshipClass1 로 바꿔두겠습니다.

    감사합니다~

Write a comment.


[BBC News] Baijing hit by record snowfall

모하니?/English : 2010.02.19 22:29


http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/2010/01/100104_witn_beijing_snow_page.shtml

오늘은 간만에 친구들과 한잔했더니.. 헤롱 헤롱.. 그래도 외웠다...

Thousands were left stranded for a second day after the cold weather bought severe disruption to transport across the country.

Some 30 highways have closed in the north of China, and in Beijing the city's Capital airport saw 90% of flights canceled or delayed on Sunday. By early Monday around 40% of flights had been disrupted.

In some parts of Beijing, 33cm of snow fell, the heaviest in more then half a century. Voulunteers have taken to the streeets with snow-shovles to clean the drifts. School children saw their New Year holiday extended by the severe weather. Here and in neighbouring Taizian, they were given the day off.

More snow will be expected across the north of China, although Beijing supposed to be remain clean, but temperature in the capital, already at minus 15, could down even more.

틀린건 많은 거 같은데 확인하기가 귀찮구나;;

어쩃거나 외웠다. 장하다. 기선아, 오늘은 걍 자자

top

TAG BBC News
  1. astre 2010.02.19 23:21 PERM. MOD/DEL REPLY

    bought -> brought
    China, -> 쉼표 없음.
    New year -> new year
    Taizian> Tianjin
    will be -> is
    supposed to be remain clean -> is expected to remain clear
    temperature in the capital, already at minus 15, could down even more.
    -> temperatures in the capital, already at minus 14,
    could drop even further


    Go get 'em ma sweeties~!!

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.20 09:12 PERM MOD/DEL

    고맙스.

  2. astre 2010.02.20 12:13 PERM. MOD/DEL REPLY

    귀찮음도 의지로 이겨보시지요.
    귀찮음도 습관이 된다구!

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.20 23:11 PERM MOD/DEL

    넵 알겠습니다.

Write a comment.


[ClassLoader 퀴즈 3] Whiteship은 Whiteship일까 아닐까?

Java : 2010.02.19 16:46


퀴즈 2번 문제의 정답을 맞추신 분이라면 클래스패스와 클래스로더의 관계에 대해 잘 알고 계신 것 같습니다. temp 폴더는 클래스패스에 들어있지 않다고 했었죠. 따라서 URLClassLoader.loadClass를 실행했을 때 그것의 상위 클래스로더인 AppClassLoader가 읽어오지 못하고 자기 자신이 가져오게 됩니다. 

따라서 결국 제가 원하던대로 whiteshipClass1과 whtieshipClass2는 각각 다른 클래스로더(uCL1, uCL2)들이 가져오게 됐습니다.

이쯤 말씀드렸으니.. 정답은 뭐... 당연한 거니까 패스.

    @Test(expected = ClassCastException.class)
    public void classCastException() throws Exception {
        URL url = new URL("file:C:/intellij9-workspace/springsprout2/temp/");
        URLClassLoader uCL1 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass1 = uCL1.loadClass("Whiteship");
        Object whiteship1 = whiteshipClass1.newInstance();

        URLClassLoader uCL2 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass2 = uCL2.loadClass("Whiteship");
        Object whiteship2 = whiteshipClass2.newInstance();

        assertThat(whiteshipClass1, is(not(whiteshipClass2)));
        whiteshipClass1.cast(whiteship2);
    }

이번에는 주관식입니다.

위 테스트는 통과 합니다.왜 통과하는 걸까요? 
즉, 왜 ClassCastException이 발생하는 걸까요?
top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.19 22:42 신고 PERM. MOD/DEL REPLY

    테스트가 성공하는건.. 머 다른 클래스 로더에 올라와있으니... 새로 각기 다를 것이고..
    예외가 나는건.. whiteshipClass1 class객체를 whiteship2로 캐스팅 하는데..
    uCL1 이곳에서는 whiteship2 이 어떤 놈인지 알수가 없는거죠 ...uCL2에서 살고 있는 놈이고 Object이긴 허나.. whiteship2가 먼지 알수가 없는 상황이죠 .. 여기서 캐스팅 하려니까 난 몰라~ 이러고 Exception을 내 뱉는듯;;;

    아님.. 오라이;; ㅋㅋ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.19 23:18 PERM MOD/DEL

    이것도 맞췄네;;

    근데 저기서 cast() 안쓰고 CCE 나오게 하는 방법도 알아?

Write a comment.


[ClassLoader 퀴즈 2] Whiteship은 내가 데려왔다!!

Java : 2010.02.19 16:34


첫번째 문제를 맞추셨다면 클래스로더 계층 구조를 이해하고 있다고 볼 수 있겠습니다. 제가 작성한 코드를
보면 제가 어떤걸 원했는지 짐작하실 수 있을 겁니다.

    @Test
    public void loadLocal() throws Exception {
        URL url = new URL("file:C:/intellij9-workspace/springsprout2/test/sandbox/classloader");
        URLClassLoader uCL1 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass1 = uCL1.loadClass("sandbox.classloader.Whiteship");

        URLClassLoader uCL2 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass2 = uCL2.loadClass("sandbox.classloader.Whiteship");

        System.out.println("URLClassLoader1: " + uCL1);
        System.out.println("URLClassLoader2: " + uCL2);
        System.out.println("URLClassLoader1's parent : " + uCL1.getParent());
        System.out.println("URLClassLoader2's parent : " + uCL2.getParent());
        System.out.println("whiteshipClass1 loaded by: " + whiteshipClass1.getClassLoader());
        System.out.println("whiteshipClass2 loaded by: " + whiteshipClass2.getClassLoader());
    }

whiteshipClass1과 whiteshipClass2를 각기 다른 ClassLoader(URLClassLoader)를 사용해서 가져오고 싶었던 겁니다. 하지만 결과는? 두 클래스 모두 uCL1과 uCL2의 상위 클래스로더가 가져왔기 때문에 정답은 5번이며 제가 원하던 대로 동작하지 않았습니다. 좀 더 정확하게 보고 싶으시다면 위와 같이 uCL1과 uCL2의 parent까지 찍어보시면 C3, C4와 같다는 걸 확인할 수 있을 겁니다.

    @Test
    public void load() throws Exception {
        URL url = new URL("file:C:/intellij9-workspace/springsprout2/temp/");
        URLClassLoader uCL1 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass1 = uCL1.loadClass("Whiteship");

        URLClassLoader uCL2 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass2 = uCL2.loadClass("Whiteship");

        System.out.println("URLClassLoader1: " + uCL1); // C1
        System.out.println("URLClassLoader2: " + uCL2); // C2
        System.out.println("URLClassLoader1's parent : " + uCL1.getParent()); // C3
        System.out.println("URLClassLoader2's parent : " + uCL2.getParent()); // C4
        System.out.println("whiteshipClass1 loaded by: " + whiteshipClass1.getClassLoader()); // C5
        System.out.println("whiteshipClass2 loaded by: " + whiteshipClass2.getClassLoader()); // C6
    }

자 이번에는 조금 다릅니다. temp라는 폴더는 클래스패스로 잡혀있지 않습니다. 그 안에 Whtieship.java를 넣어뒀고 콘솔에서 컴파일해서 .class 파일을 만들어뒀습니다.

다음 중 참인 것은?
1. C1과 C5가 같다.
2. C2과 C6이 같다.
3. C3과 C5가 같다.
4. C4와 C6이 같다.
5. C3과 C4가 같다.
6. C5와 C6이 같다.

과연 이번에는 내가 원했던 결과를 얻을려나...
정답은 역시 다음 글에서 공개. to be continued~!

top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.19 17:17 신고 PERM. MOD/DEL REPLY

    다른 폴더로 옮겼군요 ;;ㅎㅎ 전 안데리고 왔어요 ㅎㅎ

  2. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.19 22:32 신고 PERM. MOD/DEL REPLY

    1 ,2, 5 .. 틀렷으면 오라이 ;; ㅡㅡ;

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.19 23:17 PERM MOD/DEL

    딩동댕~

  3. Favicon of http://me2day.net/geekinside BlogIcon 박성철 2010.02.23 11:46 PERM. MOD/DEL REPLY

    여기에 따로 문제를 내었군요. ^^

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 12:12 PERM MOD/DEL

    넵.. 여기에 올린게 트위터로 가고 트위터로 올라간게 버즈로 가는.. ㅋㅋㅋ

Write a comment.


[ClassLoader 퀴즈 1] Whiteship은 대체 누가 데려온 것일까?

Java : 2010.02.19 14:48


어제 면접 볼 때 받은 질문이기도 하다. 지금 내가 있는 회사에 어떻게 들어가게 됐으며 누가 데려갔고 그 사람을 어떻게 알게 됐느냐는 질문을 받았었다. 당시 난 클래스로더가 떠올랐다. 대체 누가 날 로딩한 걸까. 사부? Toby? 그 둘은 같은 사람일까?

    @Test
    public void appClassLoader() throws Exception {
        URL url = new URL("file:C:/intellij9-workspace/springsprout2/test/sandbox/classloader");
        URLClassLoader uCL1 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass1 = uCL1.loadClass("sandbox.classloader.Whiteship");
       
        URLClassLoader uCL2 = new URLClassLoader(new URL[]{url});
        Class whiteshipClass2 = uCL2.loadClass("sandbox.classloader.Whiteship");
       
        System.out.println("URLClassLoader1: " + uCL1); // C1
        System.out.println("URLClassLoader2: " + uCL2); // C2
        System.out.println("whiteshipClass1 loaded by: " + whiteshipClass1.getClassLoader()); // C3
        System.out.println("whiteshipClass2 loaded by: " + whiteshipClass2.getClassLoader()); // C4
    }

편의상 콘솔에 찍히는 객체 레퍼런스를 C1, C2, C3, C4라고 표기하겠다.
test 이하의 폴더는 현재 클래스패스로 잡혀있는 상태이다.

다음 중 참인 것은?
1. C1과 C3은 같다.
2. C2와 C4는 같다.
3. C1과 C3, C4가 같다.
4. C2와 C3, C4가 같다.
5. C3과 C4는 같다.

정답은 다음 글에서 공개. To be continued!


top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.19 15:18 신고 PERM. MOD/DEL REPLY

    정답은 6번..

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.19 15:36 신고 PERM MOD/DEL

    다음 문제는 예약해서 저녁 쯤 올라오게 걸어놔야지.
    너무 빨리 답을 공개하면 재미가 없어;;

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.19 15:43 신고 PERM MOD/DEL

    아니다. 맞추는 사람이 없으면 다음 문제도 계속 비공개..

    영원히...

  2. Favicon of http://toby.epril.com BlogIcon 토비 2010.02.19 16:11 PERM. MOD/DEL REPLY

    코드에 한가지 빼먹은 게 있군..

    뭔지는 영원히 비공개.

  3. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.19 16:25 신고 PERM. MOD/DEL REPLY

    TobyClass 가 빠졌군요 ;;; 퍼;;;;억 ==3

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.19 16:35 신고 PERM MOD/DEL

    그런가봐;; ㄷㄷㄷ

  4. Favicon of http://me2day.net/geekinside BlogIcon 박성철 2010.02.23 11:44 PERM. MOD/DEL REPLY

    문제에 문제가 있어요.
    sandbox.classloader.Whiteship가 parent ClassLoader로도 접근할 수 있는 경로에 있는지 없는지를 분명히 적어주셔야 하는데 말이죠.
    parent ClassLoader의 classpath에 C:/intellij9-workspace/springsprout2/test/sandbox/classloader가 포함되어 있지 않다면? ㅎㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 12:13 PERM MOD/DEL

    흠 조건을 명시 안했네요. @_@;;

    sandbox.classloader.Whiteship 클래스는 클래스패스 경로에 들어있습니다.

    만약에 parent의 기본 클래스패스에 저 클래스가 없다면 loadClass하는 순간에 ClassNotFoundException입니다. 저 경로에는 java 파일만 있지 class 파일은 없으니까요 ㅋㅋ

Write a comment.


Spring Framework 3.0.1 나왔구나

Spring/3.0 : 2010.02.19 11:52


http://blog.springsource.com/2010/02/18/spring-framework-3-0-1-released/

번역하기는 귀찮아서 짧게 요약만 합니다.

- 의존성 포함한 다운로드까지 제공해달라는 사람들이 좀 있어서 메이븐과 Ivy로 가져온 써드파티 라이브러리들까지 압축한 뭉탱이 파일 다운로드도 제공함.

- 3.0.1에서 새롭게 지원하는 라이브러리: 타일즈 2.2, 하이버네이트 3.5(CR1, JPA 2.0 구현체)

- ApplicationListener 감지 기능 향상: 프록시, 팩토리 메서드, Generic 정보를 확ㄹ용한 이벤트 선언 감지 등

- 포인트컷-기반 프록시, EntityManager 프록시, @Transactional 프록시를 직렬화할 수 있게 되었다. 특히 웹 애플리케이션 환경에서 유용할 듯

- FactroryBean과 HttpMessageConverter 같은 Generic 인터페이스의 Class 매개변수 선언을 좀 더 완하했다.

- JdbcTemplate의 쿼리 메서드에 가변인자를 사용했다.

- 보너스: 스프링의 JSP 태그라이브러리에 <spring:eval> 패그를 추가했다. JSP에서 SpEL 표현식을 사용할 수 있으며 스프링 3.0의 포매팅 시스템을 사용하여 포매팅된 결과를 보여줄 수도 있다. 기본적으로 JSTL의 <c:out>과 <fmt:*> 기능을 통합한 것으로 볼 수 있겠다.


top

Write a comment.


[BBC News] Naples pizza protected by EU

모하니?/English : 2010.02.18 21:12


http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/2010/02/100205_witn_pizza.shtml

자 오늘도 어디 외운티좀 내 보실까..

For 25 years pizza makers in Naples have been trying to get their product protected, and now it is, being granted a TSG, or Traditional Specialty Guaranteed label by the EU. The head of the pizza makers' association said the trademark was a great honour. The EU's agriculture commissioner said Naeplizian Neopolitan pizza was now part of Europe's food heritage.

It means that all pizzerias aspiring to supply the real thing are, in future, supposed to be vetted by a special commission that will check standars. They include only use using only San Mazarno tomatoes and fresh buffalo mozallera mozzarella cheese.

The Italian farmers' association says that half of Italy's 25,000 pizzerias currently use the wrong ingredients, like East European's cheese or Ukrainian flour.

Italy now tops the EU chart for products that are protected. It has 180, more then Spain or France. Protected status enables producers to not only boost boast about theri exclucivity but also charge a premium. Now pizza makers from Naples will get their slice of the action.

피자가 아니라 핏짜..
top

TAG 핏짜
  1. astre 2010.02.18 23:15 PERM. MOD/DEL REPLY

    heritage [|herɪtɪdƷ] 헤리테이지 아니라 헤리티지.
    이건 영영, 미영 동일해요.

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.19 06:30 PERM MOD/DEL

    ㅇㅇ글쿠나;; 발음 할 때 내가 생견 처음 듣는 건 차라리 편한데 이미 내 머릿속에 이상하게 각인되어 있는건 교정하기가 더 힘든것 같아.

  2. astre 2010.02.19 09:35 PERM. MOD/DEL REPLY

    이세상에 절대 안되는건 없어요~! 최선을 다해서 노력하면
    솰라솰라 파도치는 듯한 발음으로 말하고 있는 작히를 발견 할꺼야.
    열심히만 하는건 인정받을 수 없어. 열심히 "잘" 해야 인정받을 수 있어!!

    Favicon of http://whiteship.me BlogIcon 2010.02.19 10:32 PERM MOD/DEL

    넵;;; 알겠습니다.

  3. Favicon of http://www.timberlandbaratas.com BlogIcon Timberland 2012.12.24 12:57 PERM. MOD/DEL REPLY

    A ce titre, http://www.timberlandbaratas.com Timberland shops,t croustillante, http://www.timberlandbaratas.com outlet timberland?
    le PlayStation Store fait enfin son entrée directement dans le navigateur Internet de votre ordinateur PC, http://www.timberlandbaratas.com timberland niños,frDevenez fan de Yahoo, http://www.timberlandbaratas.com botas timberland! On est fondé à penser que ce sont des mesures discriminatoires envers les Algériens", http://www.timberlandbaratas.com Hombre Timberland.
    Related articles:


    http://www.mobilestudio.kr/606 http://www.mobilestudio.kr/606

    http://carstart.tistory.com/102 http://carstart.tistory.com/102

    http://doodle.tistory.com/2510752 http://doodle.tistory.com/2510752

Write a comment.


[스프링 3.0] PropertyEditorRegistry가 이길까 ConversionService가 이길까

Spring/3.0 : 2010.02.18 17:24


public class Whiteship {

    String name;

    public Whiteship(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


public class SpringSprout {

    private Whiteship whiteship;

    private int num;

    public Whiteship getWhiteship() {
        return whiteship;
    }

    public void setWhiteship(Whiteship whiteship) {
        this.whiteship = whiteship;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
}

이렇게 두 개의 클래스가 있을 때 Whiteship을 SpringSprout로 주입하는 빈 설정을 다음과 같이 했다.

    <bean class="sandbox.convert.SpringSprout">
        <property name="whiteship" value="keesun"/>
        <property name="num" value="1"/>
    </bean>

동작할까 안할까?

당연히 안한다. Whiteship 타입이 필요한데 keesun이라는 문자열을 던져주다니 장난 하는게냐 라고 예외를 던질꺼다.

하지만 되게 만들 수 있다. 이전까지는 PropertyEditorSupport 클래스를 확장하여 아주 손쉽게 구현할 수 있었다.

public class WhiteshipPE extends PropertyEditorSupport {

    @Override
    public String getAsText() {
        return ((Whiteship)getValue()).getName();
    }

    @Override
    public void setAsText(String name) throws IllegalArgumentException {
        setValue(new Whiteship(name));
    }
}

이런 코드는 특히 MVC에서 바인딩 할때 매우 유용하다. 이걸 안쓰면 request에서 일일히 꺼내서 노가다를 해야하는데 난 절대로 그러고 싶지 않다.

그런데 PE의 문제는 쓰레드-세이프하지 않다는 것이다. 그래서 PE를 등록할 때 조심해야 한다. 특히 전역 변수를 가지는 PE를 싱글톤으로 바인더에 등록해버리지 않았나 조심해야 한다. 반드시 그때 그때 new를 사용해서 등록해 주도록 하고 PE 생성자에 필요한 레퍼런스를 전달해주는게 안전하다. 아마 이 내용도 사부님 책에 들어갈 것 같으니 자세한 내용은 그 책을 참고하도록 하자.

PE의 대안이자 좀 더 범용적인 변환기 역할로 3.0에 도입된 것이 ConversionService이고 ConversionServiceFactoryBean에 Converter, ConveterFacrtory, Formatter 등을 등록해놓고 변환을 부탁할 수 있게 되었다.

public class WhiteshipConverter implements Converter<String, Whiteship> {
    public Whiteship convert(String source) {
        return new Whiteship(source);
    }
}

그런데;; PE와 역할이 중복되는데;;; 둘 다 빈으로 등록해둘수 있다.


    <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
        <property name="propertyEditorRegistrars">
            <bean class="sandbox.convert.CustomPERegister">
            </bean>
        </property>
    </bean>

    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="sandbox.convert.WhiteshipConverter"/>
            </set>
        </property>
    </bean>

결국 문제는 대체 String을 Whiteship으로 바꿔야 할 때 PE를 쓸 것이냐 CS를 쓸 것이냐이다. 무엇을 쓰게 될지... 그게 궁금했었다. 그런데 마침 오늘 사부님이 퀴즈를 냈고;; 난 스케줄을 팽개치고 매달렸다;;

1차 문제 상황

CS와 PE가 등록되어 있을 때 PE가 이겼다.
하지만 난 CS가 이기는 경우를 예제에서 본적이 있었다. 그래서 도무지 납득이 되지 않았고 어떻게 설정해야 가능한지 궁금했다.

CS만 등록했을 땐 CS로 동작했다.
PE만 등록했을 땐 PE로 동작했다.
둘다 등록했을 땐 PE가 동작헀다.

2차 문제 상황

Whiteship만 가지고 테스트를 했었는데 기본 타입도 추가해봤다. int num이 그것이다. 이제 더 큰 문제가 생겼다.
Whiteship만 PE가 이기고 나머지 기본 타입은 CS가 이겼다.
정말 깜놀이었다. 이사실을 발견하지 않았다면 난 그냥 클래스로더를 공부했을 것이다.

어디선가 기본 PE를 덮어쓰거나 없애버린 거 아닌지 궁금했고 소스 코드를 뒤져보기 시작했다.
시간이 손살같이 지난간다.
우울해지기 시작한다.

3차 결론

소스 코드를 뒤적거리다가 ConvertingPropertyEditorAdapter 클래스를 찾았다.
이 클래스는 ConversionService를 사용해서 PE를 노출시켜주는 어댑터다.
겉으로는 PE를 등록한것 같지만 실제로는 ConvesionService를 사용하는 것이다.ㅋ

스프링에서 내부에서 저걸 사용해서 기본 PE들을 등록하도록 바꿨는지는 확인하지 않았다.
왠지 답이 아닌것 같다. OTL..
내가 졌다.

트릭같은 기법을 써서라도 PE를 누르고 아니 속이고 CS가 동작하게 했으니...그만 놓아줄 수 있을 것 같다.
어서 사부님 책이 나와주길....

ps: 위에 나온 코드는 급조한 코드오니 조심할 부분을 건너뛴 곳도 있습니다. 주의하세요.
top

  1. Favicon of http://toby.epril.com BlogIcon 토비 2010.02.18 17:44 PERM. MOD/DEL REPLY

    자세히 보면 이미 글에 답이 있음

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.19 09:33 신고 PERM MOD/DEL

    흠... 그럼 맞춘걸로 치겠습니다. ㅋㅋㅋㅋㅋ

Write a comment.


[위핏] 나만의 트레이닝 방법

모하니?/운동해 : 2010.02.18 05:44


http://www.nintendo.co.kr/Wii/software/wiifit/main.php

처음 위핏을 하면 할 수 있는 운동이 몇 개 없다. 어느정도 쉬운 운동과 게임에 시간을 투자해야 새로운 게임이 열리는 형식이다. 처음 하루 이틀은 쉬운 운동과 게임으로도 어느정도 재미(?)를 맛볼 수 있다. 어떤 시스템으로 나를 움직이고 게임에 집중하게 만드는지 파악하는건 굉장히 흥미로운 일이니깐 말이다.

하지만 조금 시간이 지나면 지루해진다. 때로는 게임의 시스템에 맞추려고 하다가 오히려 운동이 되지 않는 경우도 있다. 그럴 땐 점수보다는 운동을 선택해야 하거늘 와이프와 점수 내기가 걸리기라도 하면 운동이고 뭐고 점수가 더 중요하다. ㅋㅋ 그래서일까 운동도 안 되고 지루해져서 다른 게임에 빠져들었다.

뉴 수퍼마리오 브라더스는 정말 꼭 해봐야 하는 게임이라고 추천하고 싶을 정도다. 화면에서 동시에 네명까지 뛰어다니면서 서로 들고 밟고 누르고 날아다닐 수 있는 아이템도, 수영을 잘할 수 있는 아이템도 있어서 굉장히 재미있다. 거기에 난이도 또한 갈수록 높아지면서 .아;;; 갑자기 삼천포로;; 그렇다. 지금 딱 이런 형태로 다른 게임에 빠져들었고 위핏은 나몰라라 침대 및에 누워있었다.

하지만 어제 드디어 위핏 활용 전략을 세웠다.

1. 간단한 요가 2~3개로 몸을 푼다.

http://www.nintendo.co.kr/Wii/tvcm/tvcm_wiifit_v_yoga.php

처음에는 움직이기가 싫고 땀을 빼는게 싫다. 하지만 해야한다. 그럴때 좋은게 요가다. 몸을 스트레칭할 수 있는 요가 위주로 몇 개 하면서 몸을 풀어준다.

2. 유산소 운동으로 땀내기

2-1. 댄스

처음에는 그다지 움직임이 많지 않은 댄스로 시작하지만

2-2. 리듬 복싱

http://www.nintendo.co.kr/Wii/tvcm/tvcm_wiifit_v_rhythmboxing.php

퍽퍽 거리는 손맛이 있어서 은근히 재밌고 주먹을 뻗으면서 운동이 조금 된다.

2-3. 훌라후프

본격적으로 땀이나기 시작한다.
어제는 훌라후프 400개를 넘개 돌려서 1위를 차지했다. 캬캬캬.

3. 근력 운동

3-1. 도전 팔굽혀펴기

가상 트레이너를 상대로 누가더 많이 하나 겨룰 수 있는데;; 뭐.. 말이 겨루는거지 걍 할 때마다 조금씩 해야 하는 갯수가 올라가는 것 같다. 어젠 10개만 해도 내가 이기는거라 이겼는데 지면 어떻게 될지 궁금하다. 10개에서 지면 다음에도 10개겠지 아마.

3-2. 도전 V자 만들기

이게 복부 운동이 조금 된다. 역시 위와 같은 시스템이다.

4. 게임

이정도 하면 30~40분이 된다. 이제 조금 쉬면서 스키점프 같은 게임을 해주면 된다.
와이프 기록이 340이 넘는데 도무지 못 깨겠다.. @_@;; 어떻게 한거람;;; 난 310이 최고..

http://www.nintendo.co.kr/Wii/tvcm/tvcm_wiifit_v_skijump.php

5. 신체측정

http://www.nintendo.co.kr/Wii/software/wiifit/sub01.php

처음 위핏을 시작하면 체중을 제고 표준 체형에 비해 어떤지 측정해준다. 그리고 목표를 정하고 현재 그 목표에 얼마나 다달았는지 측정해주기 시작한다. 내 체중의 변화는 기본이고 내가 매일 운동한 총 시간과 어떤 종류의 운동을 몇 분간 했는지 그래프로 보여준다. 체중을 측정하는 시간이 다르다면 매일 비슷한 시간에 재는 것을 권해주기도 한다.

꾸준히 해보자꾸나~

'모하니? > 운동해' 카테고리의 다른 글

[위핏] 나만의 트레이닝 방법  (0) 2010.02.18
개봉동에서 다시 운동 시작!  (6) 2009.03.05
자전거 타기 시작  (0) 2008.03.21
줄넘기 상황판  (0) 2007.08.02
줄넘기 대만족  (8) 2007.07.25
으윽.. 안돼..  (0) 2007.05.12
top

Write a comment.


[BBC News] Ukraine and Russia argue about spies

모하니?/English : 2010.02.17 21:38


http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/2010/02/100203_witn_russia_ukraine.shtml

어제 저녁 받아적기를 시작으로 오늘 틈틈히 외운 뉴스.
이따가 와이프가 오면 발표해봐야지... 과연 알아 들어줄까나..
그전에 마무리 삼아 외워서 적어본다.

Ukraine says that the five alleged Russian spies were caught with a camera concealed inside a pen, other espionage equipment and 2000 dollars. a reported deribe a for Ukrainian contact.

The head of Ukraine's security serivce says that the five were trying to obtain military secrets. Four of them have been expelled from Ukrain, while the fifth has been detained.

Russia's security service, the FSB has confiemd the detention, but denied the Ukrainian version of events. The FSB said its actions were a response to the recruitment of Russians by Ukrainian security services.

The mutual recriminations come at a highly sensitive time. Just two weeks ago, Russia sent an ambassador to Ukrain after a five month absence. And on Sunday, Ukrainians will vote in an ellection to choose a successor to the outgoing president Victer Yuchenko.

Mr Yuchenko's time in office has been marked by strained relations with Moskova, and his department was being seen as an opportunity for an improvement in ties beteewn two countries.

정답

Ukraine says that the five alleged Russian spies were caught with a camera concealed inside a pen, other espionage equipment and $2000 - a reported bribe for a Ukrainian contact.
The head of Ukraine's security service says that the five were trying to obtain military secrets. Four of them have been expelled from Ukraine, while the fifth has been detained.

Russia's security service, the FSB, has confirmed the detention, but denied the Ukrainian version of events. The FSB said its actions were a response to the recruitment of Russians by the Ukrainian security services.

The mutual recriminations come at a highly sensitive time. Just two weeks ago, Russia sent an ambassador to Ukraine after a five month absence. And on Sunday, Ukrainians will vote in an election to choose a successor to the outgoing President, Viktor Yushchenko.

Mr Yushchenko's time in office has been marked by strained relations with Moscow, and his departure was being seen as an opportunity for an improvement in ties between the two countries

헐... 쓰면서 외워야겠군;;; 입으로만 외웠더니 쓰기가 안되는구나;
자 이제 위핏이나 해보실까~
top

TAG BBC News
  1. astre 2010.02.18 09:41 PERM. MOD/DEL REPLY

    출발은 수월했던거 같어~!
    어제는 사막같이 재미 없게 발음했지만 오늘은 파도처럼 출렁이게 발음하는 연습해봐요^^

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.18 10:41 PERM MOD/DEL

    응. 오늘도 하나 외워갈께ㅋㅋ

Write a comment.


[Java] ClassLoader API

Java : 2010.02.17 18:36


http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html

클래스를 로딩하는 책임을 지니고 있는 추상 클래스. 

기본전략: 바이너리 이름(String)을 받아서 파일 이름으로 바꾸고 파일 시스템에서 해당하는 이름의 클래스 파일을 읽어들인다.

위임 모델(delegation model)을 사용하여 클래스와 리소스를 찾는다. 각각의 ClassLoader 인스턴스는 연관된 상위(parent) 클래스 로더를 가지고 있다. 자신이 찾아 보기전에 상위 클래스 로더에 요청하여 먼저 찾아본다. VM 내장 클래스 로더인 "부트스트랩 클래스 로더"는 상위 클래스 로더가 없고 자신이 다른 ClassLoader 인스턴스의 상위가 된다.

보통 JVM은 플랫폼-독립적인 방식으로 로컬 파일 시스템에서 클래스를 읽어들인다. 예를 들어 유닉스 시스템에서 VM은 CLASSPATH 환경 변수에 정의되어 있는 디렉토리에서 클래스를 로딩한다.

하지만 어떤 클래스들은 파일에서 읽어오지 않고 네트워크에서 가져오거나 애플리케이션이 동작하면서 만들어지는 것도 있다. defineClass 메서드는 바이트 배열을 Class 클래스 인스턴스로 변환한다. Class.newInstance를 사용하여 그렇게 새로 정의된 클래스 인스턴스를 만들 수 있다.

클래스로더에 의해 만들어지는 객체의 메소드와 생성자는 다른 클래스를 참조할 수도 있다. 그렇게 참조하는 클래스들을 판단하기 위해 VM은 원래 클래스를 생성한 클래스 로더의 loadClass 메서드를 호출한다.

예를 들어 네트워크 클래스 로더를 만들어 다른 서버에서 클래스 파일을 다운로드 할 수도 있다. 다음은 예제 코드다.

ClassLoader loader = new NetworkClassLoader(host, port);
Object main = loader.loadClass("Main", true).newInstance();

네트워크 클래스 로더는 반드시 findClass와 네트워크에서 클래스를 읽어올 loadClassData를 정의해야한다. 바이트코드를 다운로드 한다음 defineClass를 사용하여 class 인스턴스를 만들어야 한다. 다음은 예제 구현체다.

     class NetworkClassLoader extends ClassLoader {
         String host;
         int port;

         public Class findClass(String name) {
             byte[] b = loadClassData(name);
             return defineClass(name, b, 0, b.length);
         }

         private byte[] loadClassData(String name) {
             // load the class data from the connection
              . . .
         }
     }
 

바이너리 이름

클래스로더에 전달되는 문자열로 표현한 클래스 이름은 다음에 정의된 자바 언어 표준을 따라야 한다.

예)
   "java.lang.String"
   "javax.swing.JSpinner$DefaultEditor"
   "java.security.KeyStore$Builder$FileBuilder$1"
   "java.net.URLClassLoader$3$1"

defineClass

- protected final Class<?> defineClass(String name, byte[] b, int off, int len) throws ClassFormatError

바이트를 Class 클래스의 인스턴스로 변환한다. Class는 resolve를 한 다음에 사용해야 한다. 

loadClass

- public Class<?> loadClass(String name) throws ClassNotFountException

loadClass(naem, false); 호출

- public Class<?> loadClass(String name, boolean resolve) throws ClassNotFountException

기본 동작은 다음과 같다.
1. findLoadedClass(String)을 호출하여 클래스가 이미 로딩되었는지 확인한다.
2. 상위 클래스 로더의 loadClass 메서드를 호출한다. 만약 상위 클래스 로더가 null이면 VM 내장 클래스 로더를 사용한다.
3. findClass(String) 메서드를 사용하여 클래스를 찾는다.

만약에 위 과정을 통해 클래스를 찾은 뒤에 resolve 플래그가 true면 반환받은 Class 객체를 사용하여resolveClass(Class) 메서드를 호출한다.

클래스로더의 하위 클래스들은 이 메서드가 아니라 findClass(String)을 재정의 할 것을 권한다.
(이런걸 지켜야 리스코프 원칙을 지켰다고 하던가...)

findLoadedClass

- protected final Class<?> findLoadedClass(String name)

만약 이 클래스로더가 JVM에 initiating 로더로 기록되어 있다면 name에 해당하는 클래스를 반환한다. 그렇지 않으면 null을 반환한다.

findClass

- protected Class<?> findClass(String name) throws ClassNotFoundException

기본 구현체는 ClassNotFoundException을 던진다. 따라서 클래스 로더를 확장하는 클래스가 이것을 구현하여 delegation 모델을 따르는 구현체를 만드는데 사용해야 한다. loadClass 메서드에서 상위 클래스 로더를 확인 한 뒤에 호출된다.
(그냥 클래스만 찾으면 되지 꼭 delegation 모델을 따라야 하는건가... 사실 loadClass가 public이라 그것도 재정의하면 그만인것을. 강요하려면 하고 말려면 말지 어중간한거 아닌가..)

resolveClass

- protected final void resolveClass(Class<?> c)

해당 클래스를 링크한다. 이 메서드는 클래스 로더가 클래스를 링크할 때 사용된다. 만약 클래스 c가 이미 링크되어 있다면 이 메서드는 그냥 끝난다. 그렇지 않은 경우라면 자바 언어 스팩의 "Execution" 챕터에 기술되어 있는대로 클래스를 링크한다.

링크


링크하기(Linking)란 클래스 또는 인터페이스 타입의 바이너리를 가져와서 JVM의 런타임에 연결하여 실행 할 수 있는 상태로 만드는 것이다. 

링크 과정은 세 가지 세부 활동으로 구성된다: verification, preparation, resolution

링크 활동 구현내용은 달라질 수 있다. 예를 들어 클래스가 사용되는 순간에 개별적으로 클래스나 인터페이스에 있는 심볼릭 레퍼런스를 확정하거나(lazy or late resolution), 검증하고나서 바로 확정할 수도 있다.(static). 즉 어떤 구현체에서는 클래스나 인터페이스를 초기화 한 이후에도 확정(resolution) 프로세스가 계속 될 수 있다는 것이다.

Verification, Preparation, Resolution


Verification: 클래스나 인터페이스의 바이너리가 구조적으로 올바른지 확인한다. 검증에 실패하면 LinkageError의 하위 클래스 중 하나인 VerifyError가 발생한다.

Preparation: 클래스나 인터페이스의 static 필드를 만들고 그런 필드들을 기본 값으로 초기화 하는 과정이 포함된다. 이 과정 중에 JVM 코드를 실행할 필요가 없다. 명시적인 static 필드 initializer는 이 과정이 아니라 initialization 과정에서 실행된다.

Resolution: 심볼릭 레퍼런스는 resolution단계를 지나야지 사용될 수 있다. 심볼릭 레퍼런스가 유효하고 반복적으로 사용되면 다이렉트 레퍼런스로 교체되어 보다 효율적으로 처리된다.

만약 이 단계를 지나다가 IncompatibleClassChangeError를 포함한 이 하위 에러들이 발생할 수 있다. IllegalAccessErrorInstantiationError, NoSuchFieldError, NoSuchMethodError

추가적으로 구현체를 찾을 수 없는 native 메서드를 선언한 클래스에서는 UnsatisfiedLinkError가 발생할 수 있다. 

하악 하악.. 오늘은 여기까지.
top

  1. Favicon of http://toby.epril.com BlogIcon 토비 2010.02.17 23:30 PERM. MOD/DEL REPLY

    다 외웟

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.18 05:11 PERM MOD/DEL

    넵!

Write a comment.


[스프링 3.0 @MVC] 컨트롤러에 스프링 AOP가 적용되지 않는다는건 이제 거짓말

모하니?/Coding : 2010.02.17 14:49


@MVC를 사용하면 좋은 점 중 하나가 스프링 AOP 적용이 쉽다는 겁니다. 아직도 여러 이유로 이전의 Controller 계층 구조를 이용해서 개발하시는 분들이 많겠지만 @MVC를 사용하시는 분들은 이점을 꼭 알고 계셔야 합니다. 스프링 @MVC도 이제 스프링 AOP가 아주 잘 먹힙니다.

@Controller
public class TestController {

    @RequestMapping("/test")
    @Transactional
    public void test() {
        System.out.println("hi!!!!!!!!!!!!!!!!!!!!!!");
    }

}

하지만 그렇다고 해서 이런 코드를 작성해 달라는 것은 아닙니다. 절대로.. 네버..

어찌됐든 위와 같은 코드도 동작하게 되어있는데 경우에 따라서는 안 될 수도 있습니다. 그런 경우는 스프링 트랜잭션이나 스프링 시큐리티 애노테이션에 문제가 있는것이 아니라 빈설정과 관련이 있을 수가 있으니 빈 설정을 잘 보셔야 합니다.

만약 위와 같은 경우라면.. @Controller 빈이 만들어지는 ApplicationContext와 tx:annotation 머시기가 등록되는 ApplicationContext가 같은지 확인해봐야 합니다.

정말,, 굳이.. 컨트롤러에 AOP를 적용해야 한다면 http://toby.epril.com/?p=934 이 글따라서 DS가 만드는 WebAC 하나로 모두 통합하는 것도 좋겠습니다.
top

Write a comment.


목표 실천은 진행 중

모하니?/Planning : 2010.02.17 07:49


목표를 세우고 바로 실천 전략을 세웠다. 마침 좋은 영어 학습 사이트를 알게됐다. 어제 하루 계획대로 해봤더니 한텀이 너무 길어서인지 막판에가서는 다른 일이 많이 하고 싶어지고 집중력이 분산됐다. 그래도 확실하게 딴짓(?)할 시간과 본업에 충실할 시간을 구분했더니 효과는 있었다. 그리고 퇴근 이후의 일정은 예측하기가 힘들었다. 퇴근 길에 서점에 들렸더니 예상보다 2시간 가량이 늦어졌다. 결국 운동과 책읽기 일정은 포기했다.

오늘은 어제 해본 것을 바탕으로 시간을 좀 더 줄였다. 한텀에 최대 2시간이다. 순간 방심하면 한텀이 그냥 날아가버릴 수 있는 그런 시간이다. 긴장하고 집중하기에 적절한 것 같다. 그리고 퇴근 시간을 2시간 정도로 잡았다. 

출퇴근 시간에 진행하는 소소한 공부거리는 생략이다. 보통 GIU를 풀거나 리스닝을 한다. 또는 스터디 관련 자료를 읽는다. 하지만 이런건 계획하기 힘들다 그때그때 지하철 상황에 맞춰서 하는 일이 달라진다. 사람이 많아서 앉을 수 없다면 리스닝만 한다. 앉을 수 있다면 리스닝은 멈추고 GIU를 풀거나 스터디 관련 자료를 본다. 캘린더에 그런것까지 적긴 뭐하다. 생략이다.

앞으로도 계속 변경되겠지만 나는 맨날 계획만 세우는 사람이 아니며 평생을 유치원 수석이나 숙련된 초보로 살고 싶은 생각이 없다는 걸 다짐하기 위해서 스샷을 올려둔다. 

내가 지금 그런 사람이라고 생각하면 한없이 비참하고 몸서리가 쳐진다. 
하지만.. 그말이 나를 아침 일찍 눈뜨게 만들었다. 
이 얼마나 감사하고 유익한가.
달리자.



top

  1. Favicon of http://richpaparyan.tistory.com BlogIcon Richpapa 2010.02.17 11:03 PERM. MOD/DEL REPLY

    BBC 군요. 꿈대로 가시려면 영국발음이 확연히 필요하지요. 6분 스피치 강추합니다. 아니면 비지니스 모듈..(대략 100개 정도 되는 것 같던데)...

    열심히 사는 모습이 항상 보기 좋아요.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.17 11:36 신고 PERM MOD/DEL

    넵. 6분 스피치는 그냥 리스닝에 만족하고 있구요. 짧막한 뉴스들 외우기에 도전하고 있습니다.

    블로그를 살짝 구경했는데요. 보고 느낀점이 많네요. 들려주셔서 감사합니다.

  2. Favicon of http://bluepoetworld.tistory.com BlogIcon bluepoet 2010.02.17 13:12 PERM. MOD/DEL REPLY

    멋집니다~!

    계획만 세우고 끝내는 저로서는 당장의 실천을 보여주는 님의 태도를 보며

    또 한번 반성을 하게 됩니다.

    더불어 좋은 영어사이트도 감사합니다^^

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.17 21:40 신고 PERM MOD/DEL

    넵. 파이팅입니다.

  3. Favicon of http://blog.outsider.ne.kr BlogIcon Outsider 2010.02.17 13:23 PERM. MOD/DEL REPLY

    일정 장난아니군....
    이게 유부남의 일정표란 말인가.. ㅎㅎ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.17 21:41 신고 PERM MOD/DEL

    아내가 내조를 워낙에 잘해줘서..
    더욱 열심히 해야 한답니다.

  4. Favicon of http://run2you.tistory.com BlogIcon 멋진인생 2010.02.18 00:58 PERM. MOD/DEL REPLY



    -_-;; 대단한 계획표인데요..

    일년을 쪼개서 계획을 세운적이 있지만

    초등학교 이후로 하루 일정을 세워본적이 없는데

    재밌겠네요.

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.18 05:11 PERM MOD/DEL

    계획을 세우고 매일 실천하는게 사실 재미있진 않아요.ㅋㅋ
    다 하고나서 잠자리에 들때 마음이 조금 편하긴 하지요.

  5. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.18 02:05 신고 PERM. MOD/DEL REPLY

    놉시다!! 쫌;;ㅋ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.18 05:54 신고 PERM MOD/DEL

    머릿속에서 떠나질 않는다;; 눈이 번쩍 떠져;;

    넌 그리고 잠 좀 자;; 2시가 뭐람 @_@;

    Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.19 02:44 신고 PERM MOD/DEL

    그나저나 귀찮은거 되게 싫어하면서 저런건 어떻게 하나 몰라;; ㅎㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.19 06:28 PERM MOD/DEL

    저중에 귀찮은건 하나도 없는데;;
    난 재밌는 것만 한다구~

Write a comment.


[Maven] Exec Maven Plugin 사용하여 자바 프로그램 실행하기

Build/Maven : 2010.02.16 11:07


참조: http://www.vineetmanohar.com/2009/11/02/3-ways-to-run-java-main-from-maven/

이 플러그인을 사용하기 전까지 주로 사용하던 방법은 main() 메서드를 가지고 있는 자바 파일을 만들지 않고 그냥 테스트 클래스를 만드는 겁니다. 그러면 mvn test를 실행할 때 자동으로 실행되죠ㅋㅋ. 하지만 이 방법은 왠지 편법 같아서 main() 메서드를 가지고 있는 클래스를 실행해볼까 해서 찾아봤더니 exec 플러그인이 있더군요.

http://mojo.codehaus.org/exec-maven-plugin/index.html

1. pom.xml에 플러그인 추가하기

<plugins>
...
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.1.1</version>
            </plugin>
...
</plugins>

2. goal

이 플러그인이 제공하는 goal은 세 가지가 있습니다.

exec:exec 외부 프로그램 실행하기
exec:help exec 플러그인 도움말 보기
exec:java 현재 VM에 있는 메인 클래스 실행하기

3. 사용하기

흠.. compile은 별도로 해줘야 하기 때문에 mvn:compile 정도를 한 뒤 mvn:java -Dexec.mainClass="실행할 클래스명"을 할 수도 있지만... 불편하죠;

mvn test만 사용해서 실행하도록 executions를 이용해서 test Phase에 java Goal을 끼워줍니다. 즉 pom.xml에 플러그인 설정을 다음과 같이 해줍니다.

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.1.1</version>
                <executions>
                    <execution>
                        <phase>test</phase>
                        <goals>
                            <goal>java</goal>
                        </goals>
                        <configuration>
                            <mainClass>whiteship.backup.BackupRunner</mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

그럼 이제 mvn test을 실행하는 .bat 파일 만들어 놓고 윈도우의 '예약작업'으로 주기적으로 실행하도록 해놓으면 백업 배치 끝!! (리눅스라면 cron으로..블라 블라)

ps1: 어떻게보면 이 방법이 자바 애플리케이션을 서버처럼 띄워서 스케줄링하는 것 보다 시스템도 효율적으로 쓰는 것 같고 간편하네요.

ps2: 특히 윈도우의 예약작업은 리눅스의 cron처럼 공부하지 않아도 쓸 수 있으니.. 이럴 땐 윈도우도 좋네요.
top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2010.02.16 12:27 PERM. MOD/DEL REPLY

    요즘은 리눅스 cron도 GUI로 쉽게 설정가능해요. 공부 안해도... :)

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.16 14:00 PERM MOD/DEL

    오우.. 그렇군요!!

Write a comment.


백기선 2010 목표

모하니?/Planning : 2010.02.15 21:02


  • IELTS general 6.0
  • Java Persistemce with Hibernate 번역
  • Spring Enterprise Recipe 번역
  • 몸무게 표준체형으로;;
  • 회사 시스템 여름까지 개발
  • 오픈소스 프로젝트 개발
  • 커뮤니티 활동 열심히
흠... ITELTS가 제일 힘들겠군.. 열심히 해야지.

'모하니? > Planning' 카테고리의 다른 글

6월 2일 투표 방법 알아보자  (2) 2010.05.30
토비님 책으로 스프링 3.0 강의합니다.  (4) 2010.05.20
블로깅 계획  (0) 2010.05.06
백기선's 2010 Weekly Report - 2/23  (2) 2010.02.23
목표 실천은 진행 중  (12) 2010.02.17
백기선 2010 목표  (12) 2010.02.15
봄싹 Career Path  (6) 2009.12.17
이번주 토요일 IBM dW "웹 개발 다반사"  (2) 2009.12.03
봄싹을 알리러 갑니다.  (6) 2009.11.24
[Atlassian] 이직 계획  (2) 2009.11.02
[ToDo] 20091016  (0) 2009.10.16
top

  1. astre 2010.02.16 08:00 PERM. MOD/DEL REPLY

    몸무게 표준?? 지금도 표준인데 얼마나 더 말라볼라고???

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.16 09:15 PERM MOD/DEL

    내 배는 전혀 표준이 아닌것 같아..@_@;

  2. astre 2010.02.16 10:18 PERM. MOD/DEL REPLY

    내가 봤을 땐 표준. 그래도 자기가 배가 신경쓰이면 배는 복부 운동만 조금만해.
    (아..난 진짜 표준이 아닌데 ..@.@ )

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.16 10:24 PERM MOD/DEL

    아니야;; 전반적인 체력도 좀 부족한 것 같아.

    조깅이라도 해야하는데.. 안양천 공사 때문에 운동할 곳이 마땅치 않네;; 언제끝나려나

  3. Favicon of http://blog.lckymn.com BlogIcon Kevin 2010.02.16 12:35 PERM. MOD/DEL REPLY

    저도 초콜릿 복근을 만들기 위해서
    초콜릿을 열심히 먹1고 있습... (응?ㅡ_ㅡ?)

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.16 14:02 PERM MOD/DEL

    흐흐흣 초콜릿 복근~ 저도 만들고 싶어요.

  4. Favicon of http://blog.lckymn.com BlogIcon Kevin 2010.02.16 12:37 PERM. MOD/DEL REPLY

    티스토리 희한하네요.
    댓글에 '먹고' 가 들어가니까 '차단되었으므로 사용할수 없다' 라는 메세지가 뜨면서
    댓글 등록이 안 됩니다...ㅡ_ㅡ;;; 결국 사이에 1을 집어 넣어서 해결...ㅡ_ㅡ;;;
    이거 티스토리 버그인듯...

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.16 15:12 신고 PERM MOD/DEL

    흠.. 제가 설정한 필터를 봐봐야 겠지만 어딘가 금지어로 잡혀있을지도 몰곘네요.

    흑흑 저도 워프로 가고 싶지만 블로그 이사가기가 넘 귀찮네요;; @_@;;

  5. Favicon of http://toby.epril.com BlogIcon 토비 2010.02.16 14:53 PERM. MOD/DEL REPLY

    목표를 세웠으면 전략과 실행계획도 발표해야지..
    피드백도 정기적으로 하고.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.16 15:10 신고 PERM MOD/DEL

    전략과 계획도 물론 고민했죠. 음하하핫

    왠지 부끄럽고 아직도 정리 안된게 많아서 발표를 못했네요. 이따가 정리 되는대로 포스팅 해보죠 뭐ㅋ

  6. astre 2010.02.16 22:29 PERM. MOD/DEL REPLY

    난 쪼꼬렛배는 싫어. 지금이 좋아!
    적당히해. 난 포근한게 좋더라~!

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.16 22:47 PERM MOD/DEL

    ㅇㅇ;;

Write a comment.


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

Good Tools : 2010.02.12 14:12


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

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

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

갈아타기 끝~
top

  1. Favicon of http://minjuns.tistory.com BlogIcon 엠제이 2010.02.12 22:30 PERM. MOD/DEL REPLY

    크롬 유져시군요 반갑습니다~~ 저도 골수 크롬팬입니다. ㅋㅋ
    궁금한게 하나 있는데
    일반 크롬에서 마우스 제스쳐 크롬확장을 쓰면 가끔씩 안먹히는 경우가 있지 않나요?
    이것때문에 저는 크롬 플러스로 갈아탔었거든요.. 크롬 플러스는 마우스제스쳐+IE탭을 내장하고 있는
    수정된(?) 크롬입니다.
    일반 크롬에서도 문제없으면 저도 다시 순정으로 가보고 싶네요( 크롬플러스는 기반이 되는 브라우저 버전이 좀 낮아요 )

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.12 23:45 PERM MOD/DEL

    앗.. 크롬 플러스라는것도 있었군요!
    제스처가 약간 불안한지. 가끔 안먹는 탭이 있곤 합니다.

  2. Favicon of http://blog.outsider.ne.kr BlogIcon Outsider 2010.02.13 21:43 PERM. MOD/DEL REPLY

    플러긴 맛 들이면 버리지 못하지...
    요즘은 단순 웹서핑용으로는 크롬으로 옮겨가고 있긴 한데 아직은 파폭이 익숙해서.....
    왠만한건 다들 나오긴 했는데 문자보내기나 머 그런 몇몇것들...
    그리고 무엇보다 프론트엔드 개발관련때문에 파폭을 버릴수 없는.. ㅎㅎㅎ

    Favicon of http://Whiteship.me BlogIcon 2010.02.14 09:20 PERM MOD/DEL

    문서보내기 플러긴은 안써본서네요 흠
    파폭은 개발용 크롬은 서핑용 IE는 뱅킹용으로 주로쓰는듯ㅋㅋ

Write a comment.


[SVN] Spring Framework 3.0.0.RELEASE

모하니?/Coding : 2010.02.11 16:07


스프링 프레임워크 SVN: https://src.springframework.org/svn/spring-framework
스프링 프레임워크 3.0.0.RELEASE: tags/spring-framework-3.0.0.RELEASE


좋아 좋아. 인텔리J구나 역시...
top

Write a comment.