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

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

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

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

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

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

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

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

  1. 2008/05/15 10:18
    댓글 주소 수정/삭제 댓글
    비밀댓글 입니다

요즘 계속 자바스크립트 관련된 포스팅을 하는 것 같은데
부쩍 관심이 늘어서 인가?
아니면 한글 정보가 부족함을 채우려고 하는 것인가?

일단 오늘의 스크립트

자바스크립트 변수를 쿠키없이 세션 변수처럼 사용하기

원리는 간단하다

window.name 으로 변수를 설정하면 페이지 리로드가 되도

그 값은 변하거나 리로드 되지 않음을 알 수 있다.

이 특징을 가지고 구현한 것인데.

물론 FireBug 같은 툴로 값을 조작할 수도 있기 때문에

보안적으로 중요한 것들은 사용하지 않는 것이 좋겠다.

하지만 간단하게 세션을 유지 하고자 한다면 이 방법도

상당히 유용한 방법이 아닐까? 싶다.

또한 서버와 브라우저간의 암호화가 가능하다면 혹은

Validate를 위한 값이라면

상황에 맞게 생성해서 사용 하는 것 또한 가능하다.

마지막으로

위 링크의 라이브러리를 보면

crossDomain도 지원해준다.

유훗~

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

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

구글의 AJAX 천명 이후

천대 받던 자바스크립트의 재조명이 이루어지고

점점 발전하는 하드웨어로

절대 나오지 않을 것만 같았던 구현체들이 속속히 등장하고 있다.

오늘은 가장 단순하면서 널리 사용되는 텍스트 에디터.

vi의 자바스크립트 구현체를 소개하겠다.

위 링크를 열어 보면 단순히 textarea에 수정하고자 하는 텍스트를 넣어두고

파일을 불러들이는 것을 볼 수 있다.


그리고 스타일이 들어 있는을 연결시켜 놓으면 사용 준비 완료이다.

사용 용법은

onfocus="editor(this);"


를 원하는 텍스트에리어에 넣어주면 되는 것이다.


하지만

실제로 사용될 일은 얼마나 있을지 의문이다.

나 같으면

Seaside 같은 프레임워크를 만들 때 사용하는 것이 좋지 않을까? 싶은데.

일단은 블로그 덧글쪽에 붙여보면 재미 있을 것 같은데..

귀차니즘에...

또 하나

Kay의 블로그에서 본 Syntax Highlighter

우리 같이 코드 예시를 많이 사용하는 사람들에게 필요한 스크립트이다.

물론 전에 어디에선가 보았던것 같고 나름 유명해 보이는데..

IT's Lives에서도 플러깅 시켜놔야할 것 같아

이렇게 붙어 간다. ㅎㅎ

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

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

  1. 2008/05/15 06:22
    댓글 주소 수정/삭제 댓글
    오 vi, 좀 짱인듯?

Firefox 3에서 mailto: 프로토콜을 핸들링해 웹 페이지로 연결해주는 프로토콜 핸들러를 지원한다.



Continuation이 Closure의 한 부분이냐? 아니냐? 라는 토의.. 그런데 컨티뉴에이션이 뭐지? 클로저는 아는데..

이렇게 정의 된다고 한다.

In the terminology of CTM, a closure is a procedure value (procedure definition + contextual environment) and a continuation is a semantic stack ('what remains to be executed').


Groovy 와 JRuby 를 비교하면서 Sun이 왜 JRuby를 미는지 모르겠다는 글을 정리해둔 사람이 있는데 여러 가지 언어의 특징을 잘 정리 해둔 글인 것 같다.


IT쪽은 항상 관련 서적이 많이 나온다. 그러다 보면 사두고 못 보는 책들이 지속적으로 등장하기 마련이데
특히 사람들이 사두고 보지 않는 책 중 꼭 봐야할 책들은 외국도 똑같나 보다.



도날드 크누스 교수의 Multi-Core, Unit Testing, Literate Programming, and XP 에 관한 인터뷰..
.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 허혁

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

  1. 정재훈
    2008/05/02 10:28
    댓글 주소 수정/삭제 댓글
    continuation 관련해서는 아래 글을 한번 참고해 보세요.
    http://blog.naver.com/jeong_jaehun/90022725991
    그나마 이해할 수 있었던 글이었음.^^;
    • 2008/05/02 10:57
      댓글 주소 수정/삭제
      위의 토론 보고 대충 이해 했었는데요..

      모양과 형식은 비슷해 보이는데

      Continuation은 처리 하다 남은(미결정된사항)을

      리턴으로 돌려주고 남은 처리를 한다는 느낌으로 생각이 들어서요..

      링크 남기신거 보면 더 이해갈 잘되겠죠? ^_^
  2. 정재훈
    2008/05/02 10:38
    댓글 주소 수정/삭제 댓글
    PL 관련해서 정리해둔 블로그는 대충 읽어봤는데,
    Ted Nedward가 트랙백한 포스트, 저거 한 몇달 전에 나온 이야기인데 다시 또 불꽃 일어나겠구나.
    근데 저런 거 댓글까지 읽어보면 디기 재밌음.
    전에 인생의 낙이 없을 때 groovy랑 jruby 개발자들끼리 싸우는 거 보고 활력을 찾았을 때도 있었음. ㅋㅋ
    • 2008/05/02 10:59
      댓글 주소 수정/삭제
      ㅋㅋ 물론 그렇지요..

      제 생각엔 루비 언어를 메이저로 올리기에는 너무 버거운 면들이 있긴 한 것 같아요,

      그래도 심볼이 맘에 들어서 살포시 메이저로 떠올랐으면 좋겠다는.. ㅋ
  3. 2008/05/09 22:54
    댓글 주소 수정/삭제 댓글
    제 짧은 견해로는 Continuation이 Python의 Generator와 비슷해 보이는데 말이죠. =ㄴ=
    return을 하지 않고 yield라는 키워드를 써서 값을 돌려주면 스택은 그대로 남아서 계속 그 다음 값을 돌려주더라구요.
    • 2008/05/11 01:00
      댓글 주소 수정/삭제
      링크 따라가 보면

      샘루비 선생의 컨티뉴에이션 예제로 파이선 제너레이터를 사용했던데.. ㅡ.ㅡ

      클로저는 함수에 로직을 넘겨주는 스타일이라고 하면
      컨티뉴에이션은 함수가 로직을 돌려주는 스타일이라고 볼 수 있는 것 같다..

      추가로 예제 같은 것 좀 만들어봐야지~ ㅋ

Erlang과 pythone을 통합해보자는 아이디어가 많이들 나오는 것 같다.

그런 글을 읽다가 Erlang으로 만든 웹 프레임워크에 대해 알게 되었다.

아직 깊이 파보지는 않았지만 슬적이라도 봐둘 만한 내용인 것 같다.

으흠

추가로 Erlang으로 만든 웹 서버

멀티코어와 분산 처리( 컴퓨팅 클라우드 ) 시대에 있어서

얼랭이 많은 각광을 받을 것 같은데

실상

어떻게 전개가 될지...

자바쪽에서는 하둡이 떠오르고 있는데

"과연 그렇게 많이 뜰까?" 라는 생각을 지울 수 없다.

얼랭처럼 새로운 패러다임에는 새로운 언어가 필요한 것 아닐까?

ps. 물론 HTML때도 Java때도 이런 예측은 항상 빗나갔다. ㅋ
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 허혁

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

  1. 정재훈
    2008/04/29 22:56
    댓글 주소 수정/삭제 댓글
    '얼랭처럼 새로운 패러다임에는 새로운 언어가 필요한 것 아닐까?'

    이 말에 어느 정도 동의합니다.

코코아 프로그래밍 상세보기
아론 힐리가스 지음 | 인사이트 펴냄
맥 OS X를 위한 프로그래밍 전문서『코코아 프로그래밍』. 이 책은 코코아 프레임워크를 이용하여 애플리케이션을 작성할 수 있도록 설명한 것으로 여섯 가지 애플리케이션과 인터페이스 빌더 팔레트 제작 과정을 단계별 따라 하기 방식으로 구성했다. 코코아의 기본적인 역사와 표기법, Xcode 와 Object C를 이용한 방식, 아카이브와 커스텀뷰, 이미지와 마우스 이벤트, 프레임 워크 만들기와 GNUstep 에 이르기까지 실전에서 많

몇일 전까지 Lisp에 폭 빠져 있더니

iphone 출시가 가시화 되가고 있다는 소식을 듣자

코코아에 폭 빠져

회사 도서관에서 바로 빌려다 주말동안 보았는데

따라하기 방식이라 나름 괜찮았고

깊이도 적절한 수준이라 좋았는데

Xcode 2 버전의 책이라 바뀐 부분이 상당히 많아서

아쉬움이 남았다.

온라인으로나마 변경사항을 집어주는게 좋을 것 같은데..

흐음

여하튼

재훈형의 루비 퀴즈 문제를

본디 루비 퀴즈라 루비로만 풀어야 하나 싶었는데..

오브젝트 씨(Object-C) 나 코코아로 풀어보는 것도 좋을 것 같다.

간단히 오브젝트 씨에 대해 느낀 점을 보면

간단한 C의 확장버전이라 기능도 깔끔하고 객체 지원 설계도 간결하게 지원이 되는 것 같다

심플하게 구현하고자 해서인지 약간 지원이 미약한 부분도 있지만

큰 문제는 아닌 것 같고

두가지 언어를 섞어 쓴다는게 나름 괜찮아 보였는데

역시나 C 스타일 코드에서 스몰토크 스타일 코드에 적응한다는 것이

상당한 거부감으로 다가오지 않나 싶다.



맥 노트북이 없는 관계로

연습은 집의 맥미니를 원격으로 땡겨와 하고 있다.

굳~ㅋ


2008/03/10 - [direct] - Apple iPhone SDK 발표..
크리에이티브 커먼즈 라이선스
Creative Commons License

'direct' 카테고리의 다른 글

open thread  (0) 2008/04/25
[요즘 읽는 책] 코코아 프로그래밍  (2) 2008/04/21
노트북 설정기  (0) 2008/04/07
파라미터 전달을 묶어서 보내고 싶다.  (2) 2008/04/01
Posted by 허혁

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

  1. 정재훈
    2008/04/21 16:17
    댓글 주소 수정/삭제 댓글
    objective-c는 c에다 smalltalk를 잘 버무렸다고 생각합니다.
    개인적으로는 c++가 이렇게 되어야 하지 않았을까 생각되네요.^^;
  2. 2008/04/22 09:32
    댓글 주소 수정/삭제 댓글
    C++ 은 또 나름의 역할이 있는 것 아닐까요?

    그 역할은 아마도

    스위스아미나이프? 기능은 많지만 이거 하나로 전부 하려면 넘 손이 아프다는..

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가 여러 레이어를 지나가게 할때 발생할 문제는..

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

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

Adapter Pattern

2008/03/27 01:24

Adapter(Wrapper) Pattern

I. 의도

 인터페이스가 일치 하지 않는 클래스들을 원하는 인터페이스로 변환해 함께 동작 시킬 수 있도록 한다.

어댑터 패턴은 데코레이터나 프락시 브릿지 패턴을 이해하는데 도움이 되고 비교하여 차이를 알아야 한다.

Opening Question

  •  목표 인터페이스와 구현클래스의 인터페이스가 동일하게 어탭터 패턴을 적용해 본 적이 있는가?
    그것이 프락시라고 할 수 있나?
    그렇다면 프락시와는 어떤 차이점이 있는 것일까?
  • 어떤 경우에 어탭터가 필요할까?
  • 어댑터를 쓰지 말아야 할 경우는?
  • Webwork의 Intercepter와 비교해보자.

II. 본론

1) 동기

존재하나 현재 이를 사용하고자 하는 클래스와는 아무런 연관 없이 개발된될 클래스나 서로 일치하지 않는 인터페이스를 갖는 클래스들을 홍합하여 하나의 애플리케이션으로 개발해야할경우 기존 코드를 통합하여 운영하고자 할 때


우리가 선택할 수 있는 항목은 아마 다음 두가지 일 것이다.

  •  목표로 하는 인터페이스와 구현이 되어 있는 클래스 둘 다 상속받는 방법
  • 구현 클래스를 포함 시키고 목표로 하는 인터페이스 관점에서 구현하는 것 : 집합관계(Aggregation)을 이용하여 해결
  • 또 무엇이 있을까? Mixin? lamda function?

첫번재 방법을 클래스로 구현하였다.

두번째 방법을 객체로 구현하였다. 라고 표현한다.

동작방식
  • BoundingBox() 오퍼레이션의 구현을 보면, 실제 구현을 제공할 TextView 클래스에 정의된 GetExtent() 메소드를 호출하도록 바꾸어 TextView에 전달한다.: Delegation
  • 기존 클래스가 제공하지 않는 기능성을 제공해야할 경우도 있다. 추가 기능을 처리하는 행위를 추가로 정의함으로 가능하게 된다. (Decoration과 어떤 차이?)

    교재의 구현방식은 Factory Method도 사용되었다.


2) 활용성

  • 기존 클래스를 사용해야 하나 인터페이스가 수정되어야 하는 경우
  • 이미 만들어진 것을 재사용하고자 하나 재사용 가능한 라이브러리를 수정할 수 없는 경우
  • 여러 개의 서브 클래스를 사용해야하는 데 이 서브클래스들의 상속을 통해서 이들의 인터페이스를 다 adaptation 한다는 것이 현실성이 없다면 객체 어댑터 방식으로 부모 클래스의 인터페이스를 변형하는 것이 더 바람직 하다 : lucy 라이브러리

4) 구조

Java 에서는 다중 상속을 지원하지 않기 때문에 1번 방식은 사용할 수 없다. 물론 내부적으로 델리게이션을 사용하는 것은 동일하다.

  1. 다중 상속을 이용한 Adapter 패턴 : super.SpecificRequest()
  2. 객체 합성에 의한 Adapter 패턴

      : adaptee.SepecificRequest()

5) 참여 객체

  • Client : 기능 사용자
  • Target : 목표로 하는 인터페이스
  • Adaptee : 기능을 가지고 있는 객체
  • Adapter : Aaptee의 기능을 가지고 Target의 인터페이스 구현한 객체
6) 협력 방법

 클라이언트는 어댑터에 해당하는 클래스의 인스턴스에게 요청 메세지를 전달하고 어댑터는 변형되는 클래스의 오퍼레이션을 호출한다.

7) 결과
2가지 구현방식의 장단점
  • 클래스 어댑터

    •  Adapter는 명시적으로 Adaptee를 상속받고 있을 뿐 Adaptee의 서브클래스들을 상속받는 것은 아니므로, Adaptee의 서브클래스에 정의된 기능들을 사용할 수 없다.
    • Adaptee에 정의 된 행위(오퍼레이션)을 재정의 할 수 있다.
    • 한 개의 객체만 만들어 낸다. Adapter 객체, Adaptee에 대한 참조자도 필요하지 않다. : 어떤 의미가 있을까? 관리객체수가 적다. 코딩수가 적다.
  • 객체 어댑터

    • 다양하고 많은 Adaptee 클래스와 동작할 수 있다. 하나의 Adapter 클래스로 모든 Adaptee 클래스와 이를 상속받는 서브클래스 모두를 이용할 수 있다.
    • Adaptee 클래스 오퍼레이션 재정의는 어렵다. Adaptee 클래스를 상속받은 새 서브클래스를 만들고 이 서브클래스를 참조하도록 해야 한다.
고려사항
  • adapatation를 위해 수행해야할 일은 어느 정도일까? 구현할 양의 결정 요인은 Target 인터페이스와 Adaptee 간의 얼마만큼의 유사성을 갖는가? 이다.

    • 가장 단순한 인터페이스 변환, 새로운 오퍼레이션 추가는 복잡한 케이스
  • Pluggable Adapter

    • 내가 개발한 클래스를 사용할 모든 클라이언트에게 동일한 인터페이스를 제공해야 한다는 가정을 배제 가능
      하나의 클래스를 설계할 때 모든 클라이언트가 원하는 표준화된 인터페이스를 정의해야한다는 부담을 덜 수 있다.
    • 인터페이스 Adaptation를 담당하는 클래스를 대체할수 있는 어댑터( Pluggable Adapter) 라고 했다.
  • 양방향 어댑터

    • 모든 클라이언트에 적용되지 못한다는 것
    • 서로 다른 두 개의 클라이언트가 객체를 서로 다르게 바라봐야 할 때
    • Adaptation되는 두클래스 모두의 인터페이스를 다 상속 받아 정의 하도록 한다 : Composite와 유사? 
 구현
  1. 클래스 어댑터 방식의 C++

    • Target : public 상속
    • Adaptee : private 상속
    • 양방향 어댑터는 아니구나~
  2. Pluggable Adapter : 3가지 구현 방식

    1.  세 가지 방법 모두에 공통, Adapation가 필요한 오퍼레이션의 최소 집합
    2. 구현방식으로 추상 오퍼레이션을 제공하는 방법

      • Adaptation 인터페이스를 추상 오퍼레이션으로 정의하고 상속받는 서브클래스는 추상 오퍼레이션에 대한 구현을 제공해야 하고 계층 구조를 갖는 객체를 Adaptation할 수 있다.
    3. Delegate 객체를 사용한다.(집합관계)

      • 자신에게 요청된 메시지를 다른 위임 개체에게 전달, 여러 가지 다른 Adaptation 전략을 수사할 수 있다.
      • 트리 구조를 계층적 디렉토리 구조로 Adaptation하는 위임자 역할 수행
    4.  파라미터화된 어댑터

      1. 어댑터의 파라미터화를 통하여 대체 가능한 어댑터를 만들 수 있다.

      2. 파라미터가 될 수 있는 블록 요소

        1. directoryDisplay := (TreeDisplay on: treeRoot) getChildrenBlock: [:node | node getSubdirectories] createGraphicNodeBlock: [:node | node createGraphicNode]

      3. 루비 코드

      1.  dirctoryDisplay = TreeDisplay.treeRoot;
      2. dirctoryDisplay.getChildrenBlockcreateGraphicNodeBlock({node| node.getSubdirectories},{node| node.createGraphicNode});

      인터페이스 Adaptation을 클래스로 만든다면 서브클래싱보다 더 편한 방법이다.

8) 관련 패턴

  • Bridge 패턴

    • 객체 어댑터와 클래스 구조가 유사하다
    • 사용 목적이 다르다
    • 구현과 추상 개념(인터페이스)를을 분리하여 서로 영향을 주지 않고 각각을 확장하려 하는 것
    • 어댑터는 존재하는 객체의 인터페이스를 변경
  • Decorator 패턴

    • 인터페이스 변경 없이도 객체에 새로운 행위를 추가할 수 있다.
    • 어댑터 보다는 애플리케이션을 위해 좋은 방법
    • 순수한 어댑터로는 불가능한 재귀적 합성이 가능


  • Proxy 패턴

    • 인터페이스를 변경하는 책임이 없다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 허혁

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

  1. 2008/03/29 09:52
    댓글 주소 수정/삭제 댓글
    lamda funtion은 얼마전에 haskell 스터디에서 배웠는데 바로 나오네. 역시 사람은 배워야 되는 듯.
  2. 2008/03/31 10:22
    댓글 주소 수정/삭제 댓글
    람다야 워낙 많이 쓰이는 개념이니깐.. ㅋㅋ

    믹스인이 C++에서도 구현가능하다는 것에 더 놀랐어..

HTML 5

2008/03/25 14:21

HTML 5

등장 배경

  • HTML5의 시작은 WHATWG (Web Hypertext Application Technology Working Group) 그룹
  • 적용이 지연 되고 있는 XHTML 2.0을 대체할 표준으로 HTML의 업그레이드 버전
  • HTML 4 -> XHTML 1.0 -> DOM2HTML -> HTML 5 -> XHTML 2.0
  • 표준 정의에 모호한 점이 있어서 구현에 어려움이 있었다.

용어 정의

  • Web Application 1.0 : WHATWG에서 만들고 있었던 HTML5
  • Web Form 2.0 : XHTML의 XForms의 영향을 받아 HTML4에서의 form을 Web Form 1.0으로 정의하고 Web Form 2.0으로 확장하였다.

지원 브라우저

New Features

  • 레이아웃 엘리먼트 : 캘린더 컨트롤, 어드레스 카드, 데이터그리드, 게이지 및 프로그레스 미터, 드래그 앤 드롭, 메뉴
  • 프로그래밍 가능한 DOM 확장 서버에서 보내진 DOM도 포함된다.
  • 사실상 표준인 XMLHttpRequest 공인
  • canvas엘리먼트를 이용한 동적 비트맵 그래픽

문법

HTML 5 Sample Code HTML ver. text/html MIME type
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Example document</title>
</head>
<body>
<p>Example paragraph</p>
</body>
</html>
HTML 5 Sample Code XHTML ver. application/xhtml+xml , application/xml
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Example document</title>
</head>
<body>
<p>Example paragraph</p>
</body>
</html>

문자 인코딩

  • HTTP 헤더의 Content-type 에 표기
  • 문서 시작 부분에 Unicode Byte Order Mark(BOM) 캐릭터 사용
  • head 엘리먼트의 첫 요소로 meta 엘리먼트를 이용한 charset 속성 정의
    • <meta carhset="UTF-8">
    • 기존의 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

DOCTYPE

  • 기존 DOCTYPE 예 : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  • HTML V5 의 예 : <!DOCTYPE html>
  • 원래 목적은 초기 HTML은 SGML subset으로 규정되었기 때문에 DTD선언을 하도록 했지만 현재는 사용하지 않고 있다.
  • http://www.w3.org/TR/html4/loose.dtd 사이트에 상당한 부하가 걸리고 있다.

언어

새 요소들

Structure
section 문서 및 어플리케이션 영역 표시, H1~h6와 함께 사용할 수 있다.마치 책의 챕터 같은 부분이 될 수 있다.
header 문서 내 머리말 부분을 표시할 때 사용합니다.
footer 문서 내 꼬리말 부분을 표시할 때 사용하며 문서 저자, 저작권 정보 같은 것을 표시할 수 있습니다.
nav 문서 내 네비게이션 요소들을 표시하기 위한 영역입니다.
article 뉴스 기사나 블로그 글 같은 독립적인 컨텐츠 단위를 표시할 때 사용 합니다.
A typical blog page today
<html>
<head>
<title>Mokka mit Schlag </title>
</head>
<body>
<div id="page">
<div id="header">
<h1><a href="http://www.elharo.com/blog">Mokka mit Schlag</a></h1>
</div>
<div id="container">
<div id="center" class="column">
<div class="post" id="post-1000572">
<h2><a href=
"/blog/birding/2007/04/23/spring-comes-and-goes-in-sussex-county/">
Spring Comes (and Goes) in Sussex County</a></h2>

<div class="entry">
<p>Yesterday I joined the Brooklyn Bird Club for our
annual trip to Western New Jersey, specifically Hyper
Humus, a relatively recently discovered hot spot. It
started out as a nice winter morning when we arrived
at the site at 7:30 A.M., progressed to Spring around
10:00 A.M., and reached early summer by 10:15. </p>
</div>
</div>


<div class="post" id="post-1000571">
<h2><a href=
"/blog/birding/2007/04/23/but-does-it-count-for-your-life-list/">
But does it count for your life list?</a></h2>

<div class="entry">
<p>Seems you can now go <a
href="http://www.wired.com/science/discoveries/news/
2007/04/cone_sf">bird watching via the Internet</a>. I
haven't been able to test it out yet (20 user
limit apparently) but this is certainly cool.
Personally, I can't imagine it replacing
actually being out in the field by any small amount.
On the other hand, I've always found it quite
sad to meet senior birders who are no longer able to
hold binoculars steady or get to the park. I can
imagine this might be of some interest to them. At
least one elderly birder did a big year on TV, after
he could no longer get out so much. This certainly
tops that.</p>
</div>
</div>

</div>

<div class="navigation">
<div class="alignleft">
<a href="/blog/page/2/">&laquo; Previous Entries</a>
</div>
<div class="alignright"></div