3월, 2014의 게시물 표시

[html5-lint] console에서 html page validate하기

WebPage를 스펙에 맞게 작성하였는지 http://html5.validator.nu/를 이용하여 쉽게 확인할 수 있다. 하지만 이런 방식은 웹 페이지에서 확인하는 방식이기 때문에 autotest를 만들기 어려워진다. 모질라에서도 같은 고민을 하였는지 auto test를 위해 python과 node.js에서 사용할 수 있는 html5-lint라는 것을 만들어서 사용하고 있다. html5-lint는 validator를 다시 구현하는 방식이 아니라 http://html5.validator.nu/로 post request를 날려 결과를 가져오는 방식으로 동작한다.
 하지만 이렇게 하면 테스트할 때마다 http://html5.validator.nu/에 request를 요청하게 되므로 모질라에서는 클론 페이지를 만들어서 사용하고 있었지만, 지금은 클론 페이지가 죽어서 다시 원래의 validator.nu/를 이용하여 테스트하여야 한다.

[CoffeeScript] undefined를 void 0로 compile하는 이유는 무엇일까

요새 재미삼아 만들고 있는 웹 프로그램이 있다.
 JavaScript를 약간 하드하게 사용하여야 하므로, pure한 JavaScript를 사용하지 않고, CoffeeScript를 이용하여 개발을 진행하고 있다.

 CoffeeScript 자체를 실행시키는 interpreter가 존재하지 않고, 언제나 JavaScript로 compile한 뒤 실행되어야 해서, 빠르게 코드 수정 내용을 테스트할 수 있다는 장점이 사라진다. 변환되는 과정에서 어떤 경우는 JavaScript로 직접 작성한 코드보다 비효율적인 코드가 나오기도 한다.
 게다가 CoffeeScript는 기본적으로 모든 JavaScript 코드는 CoffeeScript 코드로, CoffeeScript 코드는 JavaScript 코드로 1:1로 변환 가능하게 해주는 것을 목표로 삼고 있기 때문에, JavaScript보다 더 powerful한 것도 아니다.

 그럼에도 새 프로젝트에 JavaScript를 사용하지 않고 CoffeeScript를 사용하는 것은 다음의 두 가지 이유 때문이다.
 우선 내가 c-style의 코드보다 ruby-style의 코드를 더 좋아한다.
 별거 아니지만 오랜 시간 아무런 이득도 없이(쉽게 말해서 돈 받는 게 아니면서) 혼자서 쓸쓸히 작업하려면 내가 좋아하는 방식으로 작업하는 게 최고다.
 다음으로 compile과정을 거치기 때문에 실수를 한번 걸러줄 수 있다. compile 과정에서 엄격한 정적 분석을 거치는 것은 아니지만, 기본적인 실수를 막아주는 역할 정도는 할 수 있다.
  CoffeeScript가 undefined를 void 0로 compile하는 이유도 여기에 있다.


 위와 같이 undefined를 사용하는 CoffeeScript 코드를 컴파일하면, 아래와 같이 undefined를 void 0로 변환한 JavaScript 코드를 돌려준다.

 void 함수는 분명히 언제나 undefined를 return 하기는 하지만 굳이 멀쩡한 undefined를 놔두고 void 함수를…