2010년 5월 31일 월요일

SBCL 1.0.39 Win32 Binary Installer

Open-source Common Lisp 구현체인 SBCL 1.0.39 버전의 Win32 binary입니다.

SBCL Internals 페이지에 나와 있는 Windows binary build 방법을 참고했습니다.

Binary는 다음 링크에서 다운로드 하실 수 있습니다.



위 아이콘이 보이지 않으시면 아래 링크에서 다운로드 하세요.

LINK: SBCL 1.0.39 Win32 Binary 다운로드
Mirror: SBCL 1.0.39 Win32 Binary (MediaFire)

아직 SBCL의 모든 부분이 Windows 환경을 완벽하게 지원하지는 못하기 때문에 몇몇 contrib 모듈은 포함이 되지 않았습니다. 이 버전에서 포함되지 않은 모듈은 아래와 같습니다.

sb-simple-streams

2010년 5월 29일 토요일

Emacs에서 Twitter 사용하기

Emacs에서 사용할 수 있는 Twitter client는 몇 가지가 있습니다. 그 중에서도 twittering-mode가 가장 잘 구현되었다고 생각되는데, Windows 환경에서 제대로 설정하고 사용하기까지 약간의 문제가 있었던 지라 글로 남겨 봅니다.

1. twittering-mode 소스 내려받기
먼저, 소스를 받아옵니다. git를 사용할 수 있다면 아래와 같이 repository로부터 직접 clone 하는 것이 가장 좋습니다.
git clone git://github.com/hayamiz/twittering-mode.git
그렇지 않다면, github 사이트에서 최신 소스를 내려 받은 후 압축을 풉니다.
Linkhttp://github.com/hayamiz/twittering-mode/archives/master

2. twittering-mode 설치하기
.emacs와 같은 설정 파일에 아래 내용을 추가하면 바로 사용할 수 있다고 알려져(?) 있습니다. (그러나, Windows 환경에서는 조금 더 손을 봐야 합니다.)
(load "~/.emacs.d/twittering-mode/twittering-mode.el") ;; twittering-mode 소스 경로
(require 'twittering-mode)
(setq twittering-username "사용자ID") ;; Twitter ID
(setq twittering-password nil) ;; 패스워드를 설정하지 않으면 prompt를 통해 물어보기 때문에 설정하지 않아도 상관 없음
그리고, Emacs 22 이상 버전을 사용하는 경우에는 소스 경로에서 아래의 두 폴더를 삭제해주는 것이 좋습니다. (twittering-mode 소스를 site-lisp처럼 sub-directory를 자동으로 검색하는 곳에 넣으면 emacs 원래 소스와 충돌을 일으킵니다.)
emacs21
url-emacs21

3. OAuth 인증 방식 적용하기
twittering-mode는 기본적으로 basic authentication 방식을 사용합니다. 그러나, Twitter API에서 2010년 6월부터 더 이상 이 방식을 제공하지 않기로 했기 때문에 OAuth 방식을 사용하도록 설정해줄 필요가 있습니다.
2010년 6월 5일자로 twittering-mode 1.0 버전이 릴리즈 되면서 OAuth 방식이 기본으로 사용되기 시작했습니다. 그리고, 개발자가 Twitter OAuth client에 등록한 twmode의 Consumer Key/Secret 또한 포함하고 있기 때문에 별도로 OAuth client를 등록할 필요가 없어졌습니다. 그러므로, 아래 내용 중 1) 번 내용은 더 이상 필요하지 않습니다. 바로 2) 번으로 진행하면 됩니다. (2010.06.07)

1) Twitter에 OAuth client 등록하기 (1.0 버전 이후 불필요)
아래 그림과 같이 OAuth client 등록 페이지로 가서 나만의 twittering-mode client를 등록합니다. Application NameOrganization에는 원하는 이름 아무 것이나 사용해도 되지만, 'twitter'라는 단어가 들어갈 수 없다고 나오더군요. 그리고, Application Name은 이미 다른 사람이 등록한 것과 동일할 수 없기 때문에 이미 등록된 것이라고 나올 경우 적절히 재조정이 필요합니다.

[새로운 OAuth client 등록 화면]

등록이 완료되면 아래 그림과 같이 등록된 client에 대한 정보를 보여주는데, 여기서 Consumer keyConsumer Secret 값을 복사해둡니다.
[등록된 twittering-mode client 정보 확인]

2) twittering-mode에서 OAuth 방식 사용하도록 설정하기
설정 파일에 아래 내용을 더 추가합니다. 이것으로 기본적인 사용이 가능하게 됩니다. 그러나, 매번 twittering-mode 실행할 때마다 새로 인증 과정을 거치기 때문에 조금 불편합니다.
twittering-mode 1.0 버전 이후부터는 별도로 Consumer Key와 Secret을 지정해줄 필요가 없으므로 twittering-oauth-invoke-browser 정도만 설정해주면 됩니다. (2010.06.07)
(setq twittering-auth-method 'oauth)
(setq twittering-oauth-use-ssl t)
(setq twittering-oauth-invoke-browser t)
(setq twittering-oauth-consumer-key "Consumer key 입력")
(setq twittering-oauth-consumer-secret "Consumer secret 입력")
어쨌거나 여기까지 추가하고 M-x twit 이라고 실행하면 아래와 같이 access token 발급을 위한 승인 및 PIN 확인 절차를 거치게 되는데, 브라우저에 나타난 PIN 정보를 Emacs에 입력해주면 최종적으로 Timeline 내용이 보이게 됩니다. 혹시 브라우저가 자동으로 뜨지 않을 경우 수동으로 브라우저를 실행하고 Emacs 화면에 나온 주소를 입력해주면 됩니다.
[M-x twit 실행]
[승인]
[PIN 발급]
[Timeline이 뜬다!]

3) 한번 발급된 access token 계속 사용하기
Twitter 정책 상 한번 발급된 access token은 사용자가 명시적으로 Twitter 홈페이지 Settings -> Connections 페이지에서 revoke 처리하기 전까지는 계속 저장된 채로 유지됩니다. 그리고, 매번 로그인할 때마다 PIN 입력하고 새로운 access token을 발급받는 것은 꽤 번거로운 일이지요. 그래서, 한번 발급된 access token을 계속 사용하도록 설정을 해두면 여러 모로 편리합니다.
[Access token 발급 후 Connections 페이지에 등록된 모습]
일단, access token이 성공적으로 발급되면 twittering-oauth-access-token-alist 변수에 그 내용이 저장됩니다. 그리고, twittering-account-authorization 변수값이 'authorized 로 변경됩니다. 그러니까, *scratch* 버퍼나 ielm 상에서 twittering-oauth-access-token-alist 변수값을 가져온 후 아래와 같이 그대로 설정 파일에 추가해주면 됩니다.
(setq twittering-oauth-access-token-alist '(PIN 입력 후 생성된 access token 값 입력))
(setq twittering-account-authorization 'authorized)
[ielm 상에서 twittering-oauth-access-token-alist 변수값 확인]
그러면 이제부터 더 이상 PIN 입력하는 과정 없이 바로 Timeline이 뜨게 됩니다.

4) 기타 설정
지금까지 추가한 설정 내용 외에 편의를 위해 추가해주면 좋은 내용들이 조금 더 있습니다.
(setq twittering-use-native-retweet t) ;; Twitter에서 제공하는 Retweet 방식 사용
(twittering-icon-mode t) ;; 기본으로 트윗 항목 앞에 프로필 이미지를 표시
(setq twittering-timer-interval 180) ;; 각 timeline을 새로 고치는 주기(단위는 초)

4. Windows 환경에서 sha1sum 관련 문제
Emacs lisp의 sha1 함수는 내부적으로 처리할 수 있는 문자열의 길이에 제한(500 자)을 두고 있습니다. 그리고, 그 길이 제한을 넘게 되면 외부의 sha1sum 프로그램을 사용해 hash 값을 구해오는 방식으로 동작합니다. 그런데, Windows 환경에서는 sha1sum 같은 유틸리티가 기본으로 제공되지 않습니다. 그래서, 한글이 포함된 글을 posting 시도할 경우 url encoding을 거치면서 hash 처리해야 할 문자열 길이가 몇 배로 길어지기 때문에 에러를 만나게 될 수도 있습니다.
이 문제를 해결하기 위해서는 Windows 용으로 빌드된 sha1sum.exe 파일이 필요한데, Cygwin이나 MinGW32가 설치되어 있다면 그 안에 포함된 것을 사용하면 되고, 그렇지 않다면 다음 주소에서 받아서 사용하면 됩니다.
Downloadhttp://www.nfllab.com/sums/sums611.zip
출처: http://blog.nfllab.com/archives/152-Win32-native-md5sum,-sha1sum,-sha256sum-etc..html
제 경우, Cygwin이 설치되어 있기 때문에 Cygwin에 포함된 파일로 경로를 설정했습니다.
(setq sha1-program "c:/cygwin/bin/sha1sum.exe") ;; sha1sum.exe 파일의 절대 경로를 지정

5. 단축키
이제 설정도 다 끝나고 잘 사용하는 일만 남았네요. 잘 사용하려면 단축키를 알아야겠죠. 주로 사용하게 되는 단축키는 아래와 같습니다.
C-c C-r   replies timeline 보기
C-c C-u   user timeline 보기
C-c C-d   direct messages timeline 보기
L         list timeline 보기
C-c C-q   Twitter의 search 결과 보기
g         현재 timeline 내용을 새로 고침
C-c C-s   트윗 작성
u         트윗 작성
C-c D     트윗 삭제
C-c C-m   retweet
d         direct message 작성
C-m       상황에 따라 적절한 행동(링크 열기, reply 작성하기 등)
<enter>   상황에 따라 적절한 행동(링크 열기, reply 작성하기 등)
j         다음 트윗 항목으로 이동
k         이전 트윗 항목으로 이동
q         현재 timeline 닫기
i         트윗 항목 앞에 프로필 이미지 보이기 모드 토글
더 상세한 내용은 다음과 같습니다만, 한번 쯤 눌러보면 대강 짐작할 수 있는 것들이라 번역은 생략합니다. ;)
C-c C-f      friends timeline
C-c C-r      replies timeline
C-c C-g      public timeline
C-c C-u      user timeline
C-c C-d      direct messages timeline
C-c C-s      update status interactive
C-c C-e      erase old statuses
C-c C-m      retweet
C-c C-h      set-current-hashtag
C-m          reply or open link
C-c C-l      update lambda
<mouse-1>    click
C-c C-v      view user page
C-c D        delete status
a            toggle activate buffer
g            refresh current timeline
u            update status interactive
d            direct message
v            other user timeline
V            visit timeline
L            other user list interactive
f            switch to next timeline
b            switch to previous timeline
j            goto next status
k            goto previous status
l            forward char
h            backward char
0            beginning of line
^            beginning of line text
$            end of line
n            goto next status of user
p            goto previous status of user
C-i          goto next thing
M-C-i        goto previous thing
<backtab>    goto previous thing
<backspace>  scroll down
M-v          scroll down
SPC          scroll up
C-v          scroll up
G            end of buffer
H            goto first status
i            icon mode
r            toggle show replied statuses
s            scroll mode
t            toggle proxy
C-c C-p      toggle proxy
q            kill buffer
C-c C-q      search