2010년 4월 27일 화요일

Emacs와 Mercurial(hg)에 관한 두 가지 팁

몇 년 전까지만 해도 개발 소스 버전 관리를 위해서 주로 CVS나 Subversion을 많이 사용했지만(대형 상용 프로젝트에는 Perforce도 많이 사용됩니다.), 근래에 와서는 DVCS에 대한 관심이 증가하게 되고 여러 가지 장점들이 소개되면서, Mercurial / Git / Bazaar 같은 DVCS도 차츰 많이 사용하는 추세입니다. 특히 Open Source Project 그룹에서 이런 현상이 두드러집니다.
아무튼 최근에 개인적으로 개발 중인 자잘한 소스들을 Mercurial(이하 hg)로 버전 관리하고 있는데, Emacs에 기본 탑재되어 있는 vc-hg를 사용하다 보니 몇 가지 불편한 점이 있더군요.

1. encoding 문제
한글 Windows 환경에서 hg의 기본 encoding은 cp949입니다. 그런데, Emacs에서 buffer의 기본 encoding을 utf-8으로 두고 사용하다 보니, Emacs 상에서 log나 diff를 볼 때 한글로 작성한 내용이 모두 \xxx 같은 형식으로 출력되어 버리는 겁니다.
이 문제를 해결하기 위해서는 .emacs 파일 등에 다음 라인을 추가해주면 됩니다.
(setq vc-hg-global-switches "--encoding=utf-8")
eshell 상에서 hg를 직접 실행하는 경우에는 위 설정이 적용되지 않기 때문에 alias를 사용해서 간단하게 encoding 옵션을 붙여 주면 됩니다.
alias hg 'hg --encoding=utf-8 $*'

2. HTTP 인증 문제
로컬에서만 버전 관리를 하면 크게 상관이 없지만, Bitbucket 같은 호스팅 서비스를 이용하게 될 경우에는 pull 또는 push 같은 작업을 할 때 HTTP 인증이 필요하게 됩니다. 이 때 console 상에서 바로 실행하면 password를 물어보는 prompt가 뜨게 되지만, Emacs eshell이나 shell 상에서는 standard input이 Emacs에 의해 별도 처리되기 때문에 prompt가 뜨는 대신 HTTP 인증이 바로 실패하게 됩니다.
이 문제를 해결하기 위해서는 저장소 폴더(.hg) 내에 있는 hgrc 파일에 인증 정보를 기록해주면 됩니다.
[paths]
default = https://username:password@bitbucket.org/myproject1/
이렇게 하면 인증 정보가 자동으로 전달되기 때문에 매번 password를 입력하는 번거로움도 함께 해결됩니다. 대신, hgrc 파일에 기록된 인증 정보가 타인에게 유출되는 것은 주의할 필요가 있습니다.


2010년 4월 24일 토요일

Google App Engine 공부 - 로또 정보 트위터 게시

Google App Engine에 대해 공부도 해볼 겸 간단한 웹 애플리케이션 하나 만들어보기로 하고 그 주제로 정한 것이 '로또 정보 트위터 게시 봇'이었습니다. 물론 이미 같은 기능을 하는 애플리케이션들이 여럿 있습니다만, 제 입맛에 딱 맞게 쓰려면 아무래도 직접 만드는 것이 낫겠다 싶었죠. (SKT의 트위팅 SMS 알림 서비스를 통해 트윗 알림을 받게 되면 '80 자'라는 제약 때문에 트윗 내용이 조금만 길어도 잘리게 됩니다. 그래서, SMS 수신된 내용만으로 로또 당첨 번호를 바로 확인할 수 있으려면 최소한의 정보만 표시할 필요가 있었습니다. 얼핏 우스워 보일 수도 있지만, 전 정말 심각했습니다. ㅡㅡ; )

애플리케이션 이름은 Lotto_K. 즉석에서 대강 지은 것이라 그다지 멋진 건 아닙니다. ^^; 아무튼 구경부터 해보시려면 아래 링크로... 아직 별로 볼 건 없습니다.
LINK: http://lotto.kaisyu.com
Twitter: @lotto_k
RSS Feed: Lotto 당첨 정보

하는 일은 크게 세 가지입니다.
  • 나눔로또 공식 홈페이지에서 로또 당첨 번호 정보를 가져온다.
  • 가져온 로또 당첨 번호 정보를 lotto_k 트위터 계정에 게시한다.
  • 매번 페이지 접속할 때마다 새로 임의 생성한 번호 여섯 개를 보여준다.

내부적으로는, 성능 상의 이유로 한번 가져온 로또 당첨 번호 정보를 DB에 저장해둔다든가, 트위터 중복 게시를 막기 위해 마지막으로 게시한 로또 회차 정보를 별도로 유지한다든가 하는 것들이 더 있지만, 겉으로 보이는 부분에서 큰 차이는 없습니다.

만드는 데 사용된 주요 기능(?)들은 다음과 같습니다.

Python 기본 문법 정도만 아는 수준에서 나머지 모든 부분은 인터넷 검색 결과와 기본 제공 문서들을 참고하여 해결하고 작업을 진행했는데 의외로 크게 어렵지 않았습니다. 세상 참 많이 좋아졌다는 말은 괜히 하는 게 아닌가봅니다.

덧. 처음에는 소스를 공개하려고 생각했는데, 약 5 분 정도 소스 코드를 물끄러미 바라본 후 혼잣말로 중얼거리고 말았습니다. '아무래도 당분간은 어려울 것 같군.'



이 글에서 소개한 로또 정보 트위터 게시 앱에 대한 후기도 따로 작성했습니다.