나를 포함한 많은 개발자들이

java.text.SimpleDateFormat이 스레스 세이프 하지 않다는 것을 잊고

static으로 선언하기 일 쑤 이다.

혹 또 잊어버릴 일이 생길 것 같아

SimpleDateFormat이 Thread-safe한지 테스트 한 결과를 알아보았다.

앞으로는 단순한 private으로만 사용해야겠다. ㅋㅋ

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 허혁

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 2008/05/15 10:18
    댓글 주소 수정/삭제 댓글
    비밀댓글 입니다
  2. 2008/05/26 21:51
    댓글 주소 수정/삭제 댓글
    저동 항상 static final로 했었는데 얼마 전에 알았어요. 오년도 넘게 잘못된 코드를 =.=
    • 2008/06/18 16:39
      댓글 주소 수정/삭제
      습관적으로 쓰는 코드에 잠재된 버그라니..

      FindBug 를 생활화 해야하나봐요..
  3. 2008/05/28 19:50
    댓글 주소 수정/삭제 댓글
    비밀댓글 입니다

2008/03/24 - [direct] - Java와 Keyword Parameter : map을 이용한 파라미터 전달 혹은 수많은 파라미터를 넘겨줄 것 인가?

2008/03/24 - [direct] - 뭉쳐져 있는 파라미터와 펼쳐져 있는 파라미터 해결은?

에 이은 3번째 시간이다.

먼저 구현을 해보았는데

라이브러리화 시킬 수는 없는 패턴 정도의 추상화를 뽑아보았다.

아이디어는 Enum 객체와 Annotation 정도 인데

메소드에 어노테이션을 붙여서 필수 파라미터와 옵션 파라미터를 각각 정의 할 수 있도록 하는 정도까지 진행해보았는데

아무래도 Enum에 사용할 파라미터들을 소스 단계에서 선언해주어야 한다는 것이 부담이 되어서

팩토리로 생성 하는 것으로 변경을 고려 중이다.

<T> T getParam() 같이 몰랐던 문법도 있으니 소스를 첨부한다.


public enum P {
    KEYWORD, INDEX;
   
    private String name = this.name();
    private Object value;
   
    @Override
    public String toString() {
        return name;
    }
    public <T> T getParam(){
        return (T)(value);
    }

    public <T> P v(T parameterValue) {
        this.value = parameterValue;
        return this;
    }
    public static void validate(Class<? extends TestedClass> clazz,
            String methodName, P[] params) throws IllegalArgumentException{
        try {
            Method method = clazz.getMethod(methodName, P[].class);
            if(method.isAnnotationPresent(Parameters.class)){
                Parameters parameters = method.getAnnotation(Parameters.class);
                P[] required = parameters.required();
            }
        } catch (SecurityException e) {
            throw new UnsupportedOperationException(e);
        } catch (NoSuchMethodException e) {
            throw new UnsupportedOperationException(e);
        }
    }
    public static Map<P, Object> toMap(P[] params) {
        // TODO Auto-generated method stub
        return null;
    }
}
@Target(ElementType.METHOD)
public @interface Parameters {
    P[] required();
    P[] optional();
}
public class TestedClass {

    @Parameters(optional={P.KEYWORD}, required={P.INDEX})
    public void callMethod(P... params) {
        P.validate(this.getClass(),"callMethod",params);
        Map<P, Object> param = P.toMap(params);
        params[0].<Integer>getParam();
//        this.otherMethod((param.get(P.INDEX)),param.get(P.KEYWORD));
    }

    private void otherMethod(int index, String keyword) {
        // TODO Auto-generated method stub
      
    }

}

이 방식에서 더 진행을 한다고 하면

아마 validate 메소드를 컴파일 단계에서 처리할지, 런타임에서 처리할지 결정해야 할 것이다.




크리에이티브 커먼즈 라이선스
Creative Commons License

'direct' 카테고리의 다른 글

노트북 설정기  (0) 2008/04/07
파라미터 전달을 묶어서 보내고 싶다.  (2) 2008/04/01
Opera를 설치했습니다.  (0) 2008/03/28
Adapter Pattern  (2) 2008/03/27
Posted by 허혁

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 2008/04/01 23:54
    댓글 주소 수정/삭제 댓글
    왠지 잘 정리하면 우아한 모델이 나올 것 같다는 느낌이 들어. 전에 고고씽하면서 잠시 보여준 내 Map코드가 부끄러워지는데 ㅋㅋ

    다만 읽고 나서 두 가지 의문점이 들었는데,
    (내가 정확히 이해한 게 맞는지는 모르겠지만)

    첫번째는 파라메터를 위해 Enum을 이용하는 것이 Parameter Object을 만들어 쓰는 것과 비교하여 어떠한 차이점이 있는 것인지?

    두번째는 메서드 위에 Annotation을 이용하면 P에 대한 제약 정보가 여러 곳에 중복되어 흩어지게 되는 결과를 초래하지 않을까? 예를 들면 P가 여러 레이어를 지나거나 경우 여러 곳에 동일한 제약 정보가 기술되어야 하는 것이 아닐까 생각 되어.
  2. 2008/04/02 13:59
    댓글 주소 수정/삭제 댓글
    첫번째 Enum을 사용한 이유는 Annotation에서 사용하기 위해서.( Parameter Object는 사용할 수가 없어..)

    두번째 P가 여러 레이어를 지나가게 할때 발생할 문제는..

    이 파라미터 압축(?)의 용도가 레이어 시작과 끝에서 사용하려는 것이 목적이라서 동일 제약 정보는 한번만 사용할 수 있도록 하는게 목적인데

    아직까지는 오용이 있을 수 있을 것 같아.

2008/03/24 - [direct] - Java와 Keyword Parameter : map을 이용한 파라미터 전달 혹은 수많은 파라미터를 넘겨줄 것 인가?
를 통해 좀 더 좋은 방법에 대해

민달군과 잠깐의 이야기를 나누어 보았다.

문득 생각난 방법이

자바에 최근 도입된 Generic과 Enum과 Map 이 3가지를 섞어 보면 가능할 것 같은 느낌이 들었다.

기본 아이디어는 위에 나왔고


Map<Enum, Object> param 을 파라미터로 넘겨주고

Enum에 대한 제약을 걸면 될 것 같다.

결국 내가 원하는 것은 param.put("param1",someObject)에 대한 지양이니깐

그 다음으로 걸리는 것은 제약을 걸 방법이다.

첫번째, contructor를 이용해서

param = new HashMap<Enum,Object>(ParamType1, ParamType2,ParamType3)

이렇게 그 Map이 받아 들일 수 있는 해시맵 구현체를 확장하는 방법

이 방법은 스프링 같은 프레임워크에 의존할 때 생성자에 대한 접근이 어렵다는 단점이 있다.

두번째 validate() 메소드 사용 : 일단 넣어보고 검증 후 사용?

세번째 빌더를 이용하는 것을 최종 목적으로 생각하는 것도 좋을 것 같다.

getList(ParameterBuilder.getBuilder(this).set(ParamType1,value1).set(ParamType2,value2).set(Param3,value3).getParams(),anotherParameter);

으흠 막상 써놓고 보니 좀 복잡하다는 느낌이 강하게 든다.

클래스 정의가 잘 된다면

marshalling() <-> unmarchalling()

같은 파라미터로 그 부분을 해결해 줄 수도 있을 것 같다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 허혁

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

저번주에 한참 코딩을 하다가

이런 코드를 발견했다.

List<SomeObject> getList(HashMap param);

이 메소드를 호출하고자 하니..

도대체 어떤 옵션들을 주어야 원하는 값을 얻을 수 있는지 도통 몰라서

랩퍼 메소를 하나 만들었다.

List<SomeObject> getList( int param1, int param2, String param3, String param4, boolean param5, Enum param6, Enum Param7, Enum param8, Enum param9, AnotherObject param10);

사용되는 모든 곳에서 파라미터들을 긁어 모아본 결과..

무려 10개의 파라미터를 전달해주어야 했는데

실제로 사용하는 코드가 다음과 같았기 때문에 냄새가 폴~폴 올라왔다.

businessLogic.getList(0,0,false,null,null,null,null,null,new Object(1,2),EnumType.TYPE1);


가독성 제로의 이상한 코드의 탄생이다.

마치 혹때려다가 혹 붙인 느낌이다.

이 문제를 해결하려고

파라미터라이즈 오브젝트를 사용해볼까?

빌더 패턴을 적용해볼까?

고민이 많이 되고 있었는데

내가 왜 이런 고민을 하고 있는지 더욱 의문이 들었다.

pythone 이나 C 처럼

기본값을 줄 수 없나?

아니 키워드 파라미터를 지원해준다면

내가 전달하고 싶은 키워드가 무엇인지 넘겨준다면

이런 고민은 하지 않아도 되는 것 아닌가?


다음 버전에 혹시 들어가나 싶어서

java keyword parameters 로 구글링을 시도해봤으나..

실패..

누구 좋은 방법 아시는 분 없으신가요?

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 허혁

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 정재훈
    2008/03/24 17:22
    댓글 주소 수정/삭제 댓글
    잘은 모르겠지만, getList() 작성하신 분께서 애초에 keyword 파라메터처럼 쓸려고 저런 method를 작성하신 듯 하네요.
    어쨌든 저런 스타일, 저도 싫어하는 스타일이긴 합니다.^^
  2. 2008/03/24 17:27
    댓글 주소 수정/삭제 댓글
    1번 방법이나 2번 방법이나

    둘다 언어의 한계를 벗어나보려는 시도이겠지요..

    제 3의 파라미터

    를 만들어봐야겠어요..
  3. 2008/03/26 10:31
    댓글 주소 수정/삭제 댓글
    으음 정말로 뭘 어떻게 이름을 주고 넣고 보내야할지 모르겠네요 -ㅅ-;
    저것만 봤을땐ㅋㅋ
  4. 2008/03/26 10:33
    댓글 주소 수정/삭제 댓글
    살짝 찾아보니까 자바에도 가변 인수가 있긴한데... 도움이 안되겠죠? -ㅅ-;
    http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
    • 2008/03/26 16:36
      댓글 주소 수정/삭제
      가변 인수도 곧잘 쓰긴 하는데

      메소드당 한개만 가변인수로 쓸수 있다는 한계점때문에..

      기본 값을 지원하는 것도 아니고..

-launcher.MaxPermSize 를 높여주고 잘 쓰고 있다가

오늘 다시 뻗어버리는 현상이 나타나게 되었다.

이것이 Eclipse 3.3.1 버전의 런처가  Sun VM 을 인식못하는 버그가 있다는 사실을 알아냈다. (http://wiki.eclipse.org/FAQ_How_do_I_increase_the_permgen_size_available_to_Eclipse%3F)
http://kimkijeung.com/tag/eclipse%203.3.1%20bug 에서 발췌


이 현상과 유사한 것 같아서

vm을 직접 넣어주는 방식으로 변경하였다.

-showsplash
org.eclipse.platform
-vm
C:\develop\Java\jdk1.6.0\bin\javaw.exe
-vmargs
-Xms256M
-Xmx512M
-XX:PermSize=128M
-XX:MaxPermSize=512M


java.exe. 대신 javaw.exe 로 쓰고..

작업관리자에서 eclipse 프로세스와 별개로 javaw 프로세스가 뜨는 것 말고는 괜찮은 것 같다.

잘되야할텐데..
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 허혁

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

최근 apache common의 enum 객체에서

switch case 문을 위해 java.lang의 enum 객체로 옮겨왔었는데

public static Iterator iterator( Class enumClass ) {


이런 메소드에서 Iterator의 제네릭을 사용하지 않아

계속 어노테이션을 붙여주어야만 했다.

그래서 지난 금요일 부터 오늘 월요일 오전까지

generic을 지원하는 방향으로 수정을 가했다.

먼저 Enum 객체를 들여다 보고

<T extends Enum<T>>을 추가해서

쉽게 넘어가보려고 했으나.

내부에서 사용중인

public static getEnum( Class enumClass, String code ) {


객체에서 제대로 지원을 못해주는 경우가 발생했다.

Enum에서 지원 못해주는

축약형 이름 지원을 사용하고 싶었는데

위에서 code로 표시 된 것이다.

그래서

public interface CodeEnum {
    public String getCode();
}


이라는 간단한 인터페이스로 감싸주었는데

이것을 <T extends Enum<T>> 키워드를 추가하려고 하니

동시에 두가지 형태를 지원하는 것에 대한 자료를 찾아보았다.

한글 블로그 이지만 영어로 정리가 잘 되어 있다.

결론적으로

해결책은

public static <T extends Enum<T> & CodeEnum> T getEnum( Class<T> enumClass, String code ) {


이렇게 함으로써

두가지 형식을 검사할 수 있게 되었다.

이런 개선 사항에 즐거움을 느끼며 작성한다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 허혁

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

지난 토요일 (2월 24일,2007년) 삼성동의 COAX에서 한국의 자바개발자들의 모임 제 8회 자바개발자 컨퍼런스 (8th Java Developer Conference)가 개최되었다. 올해가 8회로서 지난번 참가는 6회이었는데 남대문의 조선호텔(?)에서 개최된 것 같다.

전반적으로 이번 컨퍼런스에서 JCO에서는 Developer 2.0이라는 논제(?)를 제시하였다. 간단하게 Developer 2.0은 개발자에게도 비즈니스 마인드가 필요한 시대에 개발자의 업그레이드 라고 볼 수 있다. 2.0이란 마케팅 단어를 그리 좋아하는 편은 아니었기에 썩 내키지는 않았지만, 추구하고자 하는 것은 수동적인 입장에서 요구사항을 분석하는 것이 아니라 실제 고객으로 생각하며 만들어 나아 가야하는 것이 시장의 요구란 것이다. 웹 2.0과 더불어 롱테일 이야기들이 많이 나오는 것도 자신이 불편하고 아쉬운 것부터 제공해보자는 것 아닐까?
간단하게 이정도로 넘어가고
IBM의 기조 연설은 SOA, Java의 강조로 시작하여, 개발자들에게는 글로벌한 경쟁력 확보를 던졌다. 우리의 위협은 개개인의 기술과 몸담고 있는 기반 기술이 아니라 저렴한 가격과 상당한 결과물을 보여주는 중국과 인도의 개발자들이라는 생각을 해야한다.
Sun에서는 Matt Thompson 이 나와서 초파리와 코끼리를 비교하면서 실험적 서비스와 안정적 서비스의 비교를 했었는데 life cycle 짧으면 더 많은 실험을 할 수 있어서 빠른 혁신을 이루어 낼 수 있다고 한 부분이 인상적이었다. Spike 솔류션 처럼 일단 한번 보여주는 것이 얼마나 큰 효과를 낸다. JRudy개발자 영입과 LAMP의 Solaris버전인 SAMP의 소개가 이어졌다. 마지막으로 SDN Korea을 소개했는데 아직까지는 좋은 아티클들이 올라오는 것 같지는 않았다. 그 중에 커리어를 쌓고 기술을 습득하고 싶다면 오픈 소스 커뮤니티에서 오픈소스에 참여해보라는 말이 요즘 오픈소스에게 받은 많은 도움을 되돌려주고 싶어하는 나에게 큰 반향을 일으켰다. 그런데 요즘 오히려 개인 커뮤니티인 블로그에 신경을 쓰고 있는 것은 어떻게 해야할까?

Dr.Akmal B Chaudhri : IBM Developer Skills Program
Web 2.0 the Social computing (R)evolution

마지막 기조 연설자였다. The Long Tail, The world is Flat , Thr warlth of networks 같은 책들을 인용하면서 지금 인터넷 게임의 법칙이 변했다는 말을 던졌다.
기존의 생산 소비 시대에서 생산소비자 시대 프로슈며의 시대라는 것이다.
이 발료를 보면서 오히려 내용보다 그 PPT 기법이라든지 PT 기법에 오히려 관심이 쏠렸다. World cloud, Hype Curve 같은 시각적 요소를 어떻게 잘 사용할 수 있을 까?

Develop online sorial skills : post a comment to a blog ot start your own, contribute content to a wiki collaboratoe with idears extend tyour virtual network

이것이 앞으로 나의 나아가야할 길이 아닐까?

이제 본격적인 세션에 대해서 이야기 해봐야겠다.

일단 Creative Commons에 대해 무엇인지 호기심에 세션에 참가했는데
생각보다 발표자께서(판사님이시다.) 재미 있게 진행 해주셔서 코드만 보는 다른 세션보다 오히려 낫다고 생각했다. 일단 CC에 대해 내가 이해한 것은 기존의 Rights들은 허가후 배포의 시스템인데 속도가 빠른 인터넷 시대에서는 이렇게 해서는 도저히 가치가 떨어지기 전에 컨텐츠를 돌릴 방법이 없다. 그래서 선 배포 후 조치의 방식처럼 동작하는 license를 정의 한 것이 아닐까? 그것이 Open이든 Close라는 것을 떠나서 말이다.
6가지 종류의 CC에 대해 좀 더 깔금한 자료를 수집하고 내 저작물에도 붙일 생각을 하고있다. 특히 서비스로써 뮤직 박스( 믹서 )를 생각하고 있었는데 이부분에 대해 CC을 도입해 구현한 서비스를 보여주고 있었다.
그리고 개발자들에게 조금 단물을 주었는데 개발자들은 기획과 동떨어진 것이 아니라 오히려 새로운 서비스를 창조해 내는 Creator라는 호칭을 써야한다고 해주었다. 무척 단물이었다. 하지만 현실에서 우리는 매일매일 기획자들과 다툰다. Digital Creator 좋다. 이것을 블로그 이름으로 붙여볼까? Digilog Creator도 괜찮을 것 같다. 그러면서 지금 우리에게 필요한 몇가지 서비스들을 나열해주었다. 파일에 CC라이센트 삽입, CC Contents의 DB , Multimedia Tools, CC에 이해와 도움을 주는 툴.. 이쪽에는 아직 미지의 세계라 내가 할 수 있는 것들이 많을 것 같다.

저작권법은 아이디어와 표현을 분리
특허: 아이디어
저작권: 표현

저작원 이용
제15조 : 양도 : 넘기기
제16조 : 배타적 발행권 : 판매
제17조 : 라이센스 : 사용허락 ; 계약 : Closed License and Open license
비자발적 License : 벙정 허락 제18조 : 저작권을 알 수 없는 경우의 이용

저작권 시스템
Object Subject Rights  (C)  License Limitation Protection
개체, 주체 , 권리 (C) 라이센스, 제한, 보호

저작인격권: 성명 표시권, 동일성 유지권, 공표권
저작재산권 : 모든 배타적 권리 X 여러 권리를 통틀어 지칭, 복제권, 공연권, 방송권, 전송권(소리바다때 문제 되었던 것), 전시권, 배포권, 2차적저작물 작성권
CF) 소유권은 모든 배타적 권리
CF2) 저작물 이용, 감상이 저작권의 보호 대상 아니다.
미국의 DㄸMC 에서 만든 것은 저작 보호 기술을 만든다음에 그것을 깨면 위반으로 처리
일시적 복제?(스트리밍)

UCC ECC as well as ProCC : 저작권의 확대 와 충돌

Commons 란: Unless you got permission (close license) <-> It's Ok except (open license)

Commons for Creation -> Creative Commons

CCL : Creative Vommons License as license allow free use for all with some options  4가지 조건 => 조합 6가지

CL : closed All rights Reservved One by One
CCL : Open Some Rights Reserved it

GPL: for software, More Strict , Some rights reserved At one time
CCL: For other Contents, More Flexible, At one time

Who is the Developer? Creator?  Community?

CC Comunity wiki.creativecommons.org/developer

Contribution ....  ccHost -> ccMixter (www.ccmixter.or.kr), color.sightlyblue.com, www.owlmm.com

Next Contribution
CC License information의 파일에의 삽입
DB of CC Licensed Contents
 Multimedia Tools
각 포탈에 CC Search Menu 포함
CC License의 이해와 적용에 도움을 줄 Tools

Code-cnd-be-an-Art Project 2007.3 ccSalon in Seoul

CCK Developer Community

3C in Web2.0 : Commons Community Contribution => Community Created Contents



두번째는 신상철 박사님의 AJAX Framework for Java platform
딱히 들을 것이 없어서 그냥 들어보자는 생각으로 들어갔는데
사람이 너무 몰려 엄청난 혼란에 빠져들었다.
이렇게 많은 사람들을 모아두고 정작 얻어 간 것은 별것 없었다.
아! 코드 뷰는 발표로는 힘들구나. 라는 생각이 들 정도로 졸음이 몰려왔었다.
Wrapper를 제외하고는 기존에 한번씩 다루어 본 내용들이었고, 너무 많은 사람 덕분에 후끈후끈 달아올랐다. 이정도로 스킵~!
 Ajax Frameworks for Java platform : 신상철 www.javapassion.com

Frameworks

RMI-like remoting via proxy(DWR)
client가 JS이다
특징 : Stub and Skeleton based architecture
client like RMI : Application-leve APi(instead of low-level framework API: DOJO)
EX) DWR , JSON-RPC(Language-independent)
DWR demo


AJAX-enabled JSF compoents (NetBeans VWP) Visual web pack netbeans plugin from creator2
Rule : Page author, component developers
JSF components are resuable : more ajax-enabled jsf components are...


Wrapper(jMaki) : 여러가지 라이브러리를 한가지 방법으로 접근
you want to leverage widgets from existging and future AJAX tookits and frameworks in resuable fashion : Dojo, scriptaculus, Yahoo UI Widgets and DHML Goodies
JS Wrapper framework for the Java platform
Allows developers to take wrdgets from many popular AJAX toolkits and frameworks, and wrap them in commons


Java to JavaScript/HTML translator (GWT)

Web Application Frameworks with AJAX extension (Shale)
MVC-style server side scripting (Phobos) Sun

Java와 호환성이 좋다
Lightweight, scripting-frendly web application environment
Runs on the Java platform
Complementgrary to exisiting tech
Configuratable, Rails-like RUL mapping

내 생각
MVC를 JS로 만든 다음에 model부분도 특수한 JS로 제작한다. 만약 그렇다면 model의  JS값을 AJAX로 처리 해준다면
오리지널 MVC를 Web에서 구현할 수 있지 않을까?



3번째 세션은 오픈 소스에 대한 것이 었는데 일단 세션을 듣다가 토론 세션으로 중간에 자리를 옮겼다. 위에 말했던 것과 같이 요즘 최대 관심사는 오픈 소스..
어떻게 기여할지 방향을 알고 싶어서 토론 세션의 오픈 소스의 발전 방향 부분에 지원을 했다.
말이 발표자와 방청자들을 구분했지 사실 모호한 상태였고, 다른 개발자 모임에서 하던 것과 비슷하게 분위기는 진행이 되었다. 패널들의 대화 사이사이에 내 오른쪽에 계시던 지방에서 근무하시고 이클립스에 깊은 감명을 받은 방청자분께서 많은 시간을 발언하는 바람에 정작 내가 듣고 싶어한 방향 제시를 얻어내지 못했다.
일단 커미터들이 왜 존경을 받는 것 일까? 그것은 아마도 코드와 스킬에 대한 존경도 되지만, 프로젝트를 유지하고 관리하는데 드는 많은 노력과 성실, 열정에 더욱 존경하게 되는 것이라 생각된다. 또한 실력있는 개발자들과 초급 커미터들의 차이는 없으며, 커뮤니티에 기어하고자 하는 그 열정이 있다고 본다. 그러면서 오픈소스 커미터로 나서기 위해서는 용기가 필요하다! 라는 이야기를 들었는데, 자신의 부끄러운 코드를 내보내기 혹은 과감한 롤백, 기존 커미터에게 코드 보내기는 용기가 필요한 일이라고 하였다. 역시 내가 오픈소스에 기여하고자 하면 더 열정을 쏟아야 할 것이다~!!


많은 개발자들을 만날 수 있어서 무척 좋았지만, 아직 강호에 나온지 몇달 안된 신참내기로써 자바의 밤에 참여하지 못했다는 것이 무척이나 아쉬움을 남게 하였다. 내년에 이 글을 또 다시 쓰면서 어떤 사람들을 만나고 알게 될지 무척 궁금하다.

ps: 글이 무척이나 더디게 올라가서 부끄러움을 느낀다.

회사에서 조금 더 다듬고 공개 해야겠다.




크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 허혁

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절


BLOG main image
안녕하세요. 안정된 코딩, 여유로운 프로젝트, 떠오르는 코더 by 허혁

카테고리

분류 전체보기 (88)
direct (50)
indirect (21)
transmissive (10)
agenda (4)
idea (3)

달력

«   2008/07   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

최근에 달린 레몬펜 쪽지

Statistics Graph
Creative Commons License

이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이선스에 따라 이용하실 수 있습니다.