Code Metaphor

Programming, Writing, Reading, Thoughts…

이 블로그는 더이상 운영되고 있지 않습니다. 단지 예전 URL을 유지하는 용도로만 남아 있습니다. 새 블로그의 주소는 blog.dahlia.kr입니다.

Archive for April, 2008

생활 속의 프로그래밍

Sunday, April 27th, 2008

FreeBSD 포트 커미터, Python 소스 커미터로 유명하신 장혜식(perky) 님께서 NHN에 초청받아 강의했던 “생활 속의 프로그래밍” 동영상이 올라왔다. 정말 좋은 주제의 유익한 자료인데, 다른 사람들도 많이 봤으면 해서 링크. 총 여섯 편으로 되어 있는데, 한 편에 10분씩 나눠져있다. 마지막 편은 이상하게 10분을 다 보고 나서 다시 앞으로 되돌아가더니 10분을 더 재생하게 되어 있다. 그러니까 총 70분 정도 되는 것 같다.

Readown: Mac용 Markdown 리더

Sunday, April 13th, 2008

심심해서 저번주부터 틈틈히 집에서 Cocoa 공부를 해봤다. Cocoa는 Mac OS X의 어플리케이션 개발 프레임워크다. Windows의 MFC 같은 거라고 보면 된다. 첫 연습 프로그램으로 뭐가 좋을까 하다가, 전부터 필요하다고 생각했던 Markdown 리더를 떠올렸다. 간단한 프로그램이지만 벌써 몇가지 기술을 습득할 수 있는 좋은 예제였다.

  • WebKit—Safari의 HTML 렌더링 엔진—을 Cocoa 어플리케이션에서 내장하고 사용하는 방법
  • 파이프라인을 통해 통신하는 방법
  • Interface Builder를 통해 인터페이스를 구성하는 방법
    • 인터페이스를 nib 파일로 저장하는 방법
    • 아웃렛(outlet)과 액션(action) 메타포에 대한 이해
  • Objective-C와 Cocoa에 익숙해질 기회
  • Mac OS X 어플리케이션에서 각종 자원들(resources)을 관리하는 방법

일주일밖에 안된 시간이었지만 꽤나 많은 것을 느낄 수 있는 기회였다.

  1. Objective-C는 생각보다 나쁜 언어는 아니다. 그렇지만 요즘 시대와 비교하면 “동적이고 생산성이 높다”는 것을 특징으로 삼기엔 민망한 정도다. C#과는 비교할만하다고 생각한다.

  2. 생산성을 올리는 데에는 언어보다 프레임워크가 중요하다. 다만 프레임워크는 언어의 특성에 강한 영향을 받을 뿐이다. Cocoa는 매우 훌륭하고 친절한 프레임워크다. 모든 것들이 직관적이다. Objective-C 뿐만 아니라, Cocoa 역시 Smalltalk의 영향을 강하게 받았다.

  3. 긴 메서드 이름들은 짜증이 났다. 다음 코드는 Objective-C + Cocoa로 특정 URL의 내용을 문자열로 받아오는 내용이다. 그 내용의 인코딩이 UTF-8이라고 가정하고 있다.

    NSString *string;
    NSURL *url;
    NSError **outError;
    
    url = [NSURL URLWithString: @"http://vlaah.com/"];
    string = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error: outError];
    

    사실 위 내용을 Python으로 옮기면 아래처럼 된다.

    import urlopen from urllib
    string = urlopen('http://vlaah.com/').read().decode('UTF-8')
    

    코드에 들어있는 식별자(identifier)들의 이름은 매우 중요하다. 그렇지만 더 중요한 것은 친절한 예제가 첨부되어 있는 문서다. 길 필요는 없고, 친절하기만 하면 된다. 실제 코드의 식별자는 문서를 읽은 사람이 그 내용을 떠올리는데 도움을 줄 정도면 충분하다.

  4. 처음에는 내가 쓰는 C 컨벤션—정확히 말하면 C++를 하다가 굳은 컨벤션—을 사용하다가, 그냥 Apple이 문서와 각종 Cocoa 사이트에서 예제에 쓰이는 컨벤션을 따랐다. 어차피 수많은 사람들이 사용하는 컨벤션이면 불편할 리는 없다. 컨벤션이 없는 것은 문제지만, 일단 있으면 그 문화에 적응하는 것이 편한 것 같다. 실제로 나는 개인 프로젝트의 PHP 코드들에서는 들여쓰기를 탭 한 칸으로 하지만, 회사의 PHP 코드에서는 스페이스 네 번을 사용하고, Ruby로 무언가를 할 때는 스페이스 두 칸을 사용한다.

아무튼 작성한 어플리케이션의 이름은 Readown으로 정했고, 아래 페이지에서 좀더 자세한 정보를 얻을 수 있다.

http://readown.googlecode.com/

약간 어설픈 아이콘은 후배 이흥섭 군이 만들어줬다.

Readown 화면

WordPress 2.5에서 달라진 비밀번호 해쉬 방식

Tuesday, April 1st, 2008

Phunctional Trac에서 로그인을 하려니 되지 않는다. 알고보니 WordPress 2.5부터 새로운 비밀번호 해쉬 방식을 사용하게 되었다고 한다. 이전에는 간단하게 MD5를 썼기 때문에, 별 생각 없이 Trac 인증을 mod_auth_mysql을 이용해 WordPress 사용자 테이블과 붙여서 썼었다. mod_auth_mysql에서는 가장 많이 사용되는 비밀번호 해쉬 방식인 MD5, SHA1, MySQL의 CRYPT(), PASSWORD() 함수 따위를 이미 지원하고 있었기 때문에, 당시 큰 어려움 없이 연동할 수 있었다.

아무튼 검색해보니 이미 나 같은 사람이 많이 있었나보다. WordPress 2.5에서 기존의 MD5 방식으로 비밀번호를 저장하도록 해주는 플러그인이 이미 있었다. 간단하게 이걸 설치해서 문제 해결.

Powered by WordPress. Styled by Hong, MinHee. XML Feed, Comments XML Feed.