Archive for November, 2008
Rails on Vim
[옛날 블로그 글입니다.2008.11.27]
Vim으로 Ruby on Rails 개발을 하는 방법을 정리해봅니다. 사용법까지는 아니고 필요한 설정들과 공부할 것 정도가 되겠네요. 오늘로 벌써 3번째 똑같은 설정을 하고 있는데도 매번 헤매고 있어서 큰 맘 먹고 정리해봅니다. ^^
Vim 설치
다양한 OS 용이 있으니 골라서 설치하시고, 혹시나 Mac OS X 사용중이시라면 MacVim(다운로드)을 강하게 추천드립니다~
Rails 플러그인 설치
필수 설치입니다! 문법 강조, 소스 파일 간 이동, Rails 스크립트와 Rake 명령 등을 지원하는 Vim 플러그인입니다.
- http://www.vim.org/scripts/script.php?script_id=1567에서 최신 버전 받기
- ~/.vim 디렉토리에 압축풀어 넣기
.vim 디렉토리가 없으면 만드세요. 아래처럼 보이면 됩니다.
색상 설정 파일 받기
필수 설치는 아닙니다. Vim에는 colorscheme이라고 문법 강조를 위해 색상 프로파일을 지정 할 수 있는데, Rails 커뮤니티에서 가장 많이 사용하는 녀석은 아래 두 가지인 것 같네요. 스크린샷 보시고 맘에 드는 것으로 고르세요. (거의 비슷해서 자세히 비교하셔야… ^^;;)
- 위의 링크에서 최신 버전을 다운받는다.
- ~/.vim/colors 디렉토리에 복사한다.
colors 디렉토리가 없으면 만드세요. 아래처럼 보이면 됩니다. (2가지 모두 복사한 경우)
Vim 설정을 바꾸자
Rails 플러그인을 위한 약간의 설정과 색상 설정을 추가하면 끝입니다. ~/.vimrc나 ~/.gvimrc 파일에 추가하시면 되요. (.gvimrc 파일은 터미널이 아닌 GUI 모드일때만 로딩됩니다.)
Rails 플러그인 공부하기
Vim에서 아래처럼 써넣으면 Rails 플러그인 도움말이 나옵니다. (안나오면 위에서 필수 설정의 helptags가 잘 안된거에요.)
:help rails
오리 타입과 C# 4.0
[옛날 블로그 글입니다. 2008.11.20]
지난 달에 C# 4.0 CTP 버전이 공개되었는데요, dynamic 타입이라는 재미있는 것이 생겼습니다. 동적인 언어와의 연동을 쉽게 해주는 녀석인데요, C# 4.0의 주요 테마 중에 하나입니다.
오리 타입
오리 타입Duck Type은 이런 뜻입니다.
오리처럼 걷고 오리처럼 말한다면 오리일 것이다
C/C#/Java등에서는 객체의 클래스가 객체의 타입을 말해주는데 반해서 Ruby/Objective-C등에서는 오리 타입을 사용합니다. 어떤 오브젝트가 quark()과 feathers() 메소드를 구현하고 있다면 Duck 타입이라고 생각하는 식이죠.
예를 들어 Ruby에서는 메소드를 정의할 때 파라메터의 타입을 적어주지 않습니다. 그래서 어떤 타입의 오브젝트라도 사용할 수가 있습니다. 아래 보시면 html이 파라메터인데요, gsub() 메소드를 가지고 있다면 어떤 타입이라도 사용할 수 있습니다.
“gsub() 메소드를 가지고 있다면 스트링 타입일 것이다” 라고 생각할 수도 있고, “무슨 타입이건 gsub() 메소드만 가지고 있다면 상관없다” 라고 생각할 수도 있겠죠.
여러가지 이유가 있지만, 정적인 타입 시스템 역시 실행 시간에 타입과 관련한 문제가 생긴다는 점만 보더라도 어느 정도는 수긍할 수 있지요. 이 논쟁은 너무 민감하고 오래된 것이라서 아래 링크 정도로 대체하는게 좋겠네요.
책 Programming Ruby의 23장 Duck Type(주변에 있으면 꼭 읽어보세요!)http://www.pragprog.com/titles/ruby/programming-ruby
위키피디아 Duck Type의 Criticismhttp://en.wikipedia.org/wiki/Duck_Type#Criticism
위키피디아 Type System의 Controversyhttp://en.wikipedia.org/wiki/Type_system#Controversy
Dynamic Language Runtime
Common Language Runtime을 사용해서 C#과 같은 .NET 환경의 프로그래밍 언어를 만들 수 있는 것처럼, Dynamic Language Runtime(DLR)을 사용해서 Ruby와 Python같은 동적인 언어들을 .NET 용으로 포팅할 수 있습니다. DLR은 물론 CLR 위에서 돌아가는 레이어인데요, 동적인 타입 시스템이나 메소드 디스패치, 코드 생성처럼 대부분의 동적 언어에 필요한 서비스를 해준다네요.
Python을 Java와 .NET용으로 포팅했다던 Jimm Hugunin(블로그)이라는 분이 MS에서 이 부분을 맡고 계신 듯 한데요. 철수님의 블로그에 보니 최근에 C# 디자인 회의에 참석하기 시작하셨다네요. C# 4.0에 dynamic이라는 키워드가 포함되는 데 큰 영향을 주지 않았을까 싶네요.
위키피디아의 Dynamic Language Runtimehttp://en.wikipedia.org/wiki/Dynamic_Language_Runtime
dynamic 타입
이 코드는 Quark() 메소드가 있건 없건 잘 컴파일 됩니다. Quark() 메소드를 가지고 있는지는 실행 시간에 체크되고, 있다면 잘 호출되고, 없으면 예외가 나는 식입니다.
dynamic 키워드는 타입이기 때문에 파라메터나 반환값의 타입에도 사용될 수 있답니다.
dynamic 키워드 덕택에 Ruby, Python 같은 동적인 언어와 C#을 연동하는 일이 상당히 수월해 질 것 같네요. 또 IDispatch를 구현하는 COM 오브젝트의 사용도 무척 편리해진다고 합니다.
실제로 어떻게 구현되었는지와 같은 자세한 내용은 아래 링크에서 개발자분에게 들어보세요. ^^
Chris Burrows 블로그의 C# “dynamic”http://blogs.msdn.com/cburrows/archive/2008/10/27/c-dynamic.aspx
C++ 개발자는 어디로 가야 하나요
Objective-C와 Ruby를 보면서 가장 부러웠던 부분이 실행 시간에 메소드를 바인딩하는 기능이었습니다. 심지어 Ruby on Rails에서는 실행 시간에 필요한 메소드를 생성해내는 기능도 아주 활발하게 사용하고 있습니다. 저도 그런 부분에 많이 매료되어서 동적인 언어의 매력에 푹 빠져 있는 상태이고요.
개인적인 생각으로는 정적인 타입 시스템으로는 풀리지 않는 다양한 디자인 문제를 오리 타입 스타일로 해결할 수 있지 않을까 기대하고 있습니다만, C++ 개발자인 저로서는 실무에 적용해 보기가 어렵네요. 그나마 C#은 내부용 유틸리티나 웹사이트를 만드는데 사용할 수 있으니 조금 위안이지만, 아쉬운 마음은 어쩔 수 없습니다.
C++ 개발자는 어디로 가야 할까요. C#? 내년에 새로 나올 C++? 아니면 집으로 -_-;;
추억의 Regular Expression
[옛날 블로그 글입니다. 2008.11.18]
<pre>와</pre> 사이의 내용 찾아내기
아래 같은 HTML 문자열이 있을때…
이런 결과를 뽑고 싶다면..
이런 정규표현식을 쓰면 됩니다.
JavaScript 예제인데요, 요점만 보면… (너무 기본적인 건 빼고요..)
- 둥근 괄호 : 그 안쪽의 식과 매칭되는 내용을 보관. 아래서 result를 통해 꺼내 쓸 수 있지요.
- [^0] : 모든 문자를 의미하려고 쓴 거. 보통 Dot(.)는 \n을 제외한 모든 문자가 되어버려서, \n도 포함한 모든 문자를 표현하고 싶었는데 더 좋은 방법을 모르겠네요 -_-;;
- *? : ?를 붙여주지 않은 *은 욕심쟁이(Greedy)라서 첫번째 <pre>와</pre> 두 쌍을 모두 매칭시켜 버려요. *?로 해주면 게으른(Lazy) 매칭이 되어서 제일 앞쪽 <pre>와</pre> 쌍만 잡히지요.
- i : 제일 뒤에 나오는 i는 Case Insensitive, 대소문자 가리지 말라는 얘기.
- result[2] : 2번째 둥근 괄호에 매칭되는 내용을 의미합니다. 우리가 바라는 바로 그 결과!
기억이 슬슬 되살아나시는지.. 요건 <pre> 엘리먼트 안쪽의 꺽쇠 괄호를 escape(?) 하려고 삽질하던 코드에서 발췌해봤습니다.
올바른 E-Mail 검사하기
사용자가 입력한 E-Mail 문자열이 올바른지 검사하려면..
네, 요건 Ruby 코드인데요 :email 속성이 주어진 정규표현식에 맞는지 비교하라고 시키는 코드입니다. E-Mail 형식은 잘 알고계실테니 참고해서 보시면 되겠네요. 모르겠는 문법은 아래 링크 참조해주세요~~
참고 링크
w3schools의 RegExp Object Reference ( JavaScript )http://www.w3schools.com/jsref/jsref_obj_regexp.asp
meshplex의 Ruby/Regular expression and blocks ( Ruby. 이 링크는 그저 그렇네요 -_-;;)http://www.meshplex.org/wiki/Ruby/Regular_expressions_and_blocks
PNG 감마 보정의 슬픈 이야기
[예전 블로그 글입니다 2008.11.07]
The Sad Stroy of PNG Gamma “Correction”http://http://hsivonen.iki.fi/png-gamma/
영어가 되시면 원문을 읽으시면 좋구요, 저는 가볍게 요약해보려구요.
PNG 파일에는 감마가 보관된다
PNG 파일에는 PNG 파일을 작성한 컴퓨터의 감마값이 보관된답니다. 여기서 감마는 픽셀의 RGB값을 모니터의 물리적인 신호로 바꿀때 영향을 미치는 값인데, PC와 Mac은 이 값이 다릅니다. 그래서, 같은 RGB값이더라도 Mac에서 더 밝게 보인답니다. 아래 사이트에서 비교 사진을 보실 수 있어요
Windows vs Mac monitor Gammahttp://creativebits.org/2004/07/windows-vs-mac-monitor-gamma.html
Mac과 PC에서 똑같이 보이게 하기
그래서 Mac과 PC에서 똑같이 보이게 하려고 PNG를 생성한 컴퓨터의 감마값을 넣는답니다. 요즘의 브라우저들은 PNG 파일을 보여줄 때 이 감마값으로 RGB 값을 보정해서, Mac과 PC에서 똑같이 보이게 합니다. 그런데, 여기서 문제가 생깁니다!
보정된 RGB, 보정되지 않은 RGB
PNG 파일은 감마값에 의해 보정이 되지만, CSS에 넣어준 RGB 색상은 보정이 되지 않아요. 그래서 맥에서 웹을 디자인하고 PC에서 보면 어이없는 경우가 생깁니다. 저도 이런 일을 당하고 정보를 찾아보게 되었지요 T_T JPG나 GIF라면 일어나지 않는 일입니다.



