2010년 7월 31일 토요일

SBCL 1.0.41 Win32 Binary Installer

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

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

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

LINK: SBCL 1.0.41 Win32 Binary (MediaFire)
Mirror 1: SBCL 1.0.41 Win32 Binary (DropBox)
Mirror 2: SBCL 1.0.41 Win32 Binary (SkyDrive)

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

sb-simple-streams

2010년 7월 25일 일요일

Pidgin 2.7.2 네이트온 플러그인

Pidgin 2.7.2 버전이 출시되어 이 버전에 대응하는 네이트온 플러그인을 빌드했습니다.

다운로드 링크입니다.
LINKpidgin-nateon-2.7.2-svn147+multi-chat.exe (MediaFire)
Mirror 1pidgin-nateon-2.7.2-svn147+multi-chat.exe (Dropbox)
Mirror 2pidgin-nateon-2.7.2-svn147+multi-chat.exe (SkyDrive)

이 글에서는 이번 버전에서 달라진 점과 다운로드 링크만 제공하므로, Pidgin에서 네이트온 플러그인을 사용하는 자세한 방법은 아래 글을 참고해주세요.
LINKPidgin 네이트온 플러그인 (Windows) 및 활용 팁

네이트온 플러그인의 소스는 달라진 것이 없으므로 특이 사항은 전과 동일합니다.
  • 다중대화가 지원됩니다.
  • 파일 전송은 불가능합니다. (네이트온 메신저 4.x 버전 이후 파일 전송 관련 프로토콜이 변경됨)
  • 네이트온 기본 이모티콘 팩이 제공됩니다.

대신, 아주 약간 달라진 점이 있습니다.
  • 네이트온 이모티콘 팩에 투명 색상 처리를 했습니다.
[변경 전 - 투명 색상 처리가 되어 있지 않음]
[변경 후 - 투명 색상 처리가 되어 이모티콘 외곽의 흰 부분이 사라짐]

2010년 7월 14일 수요일

블로그에 QR Code 달기

근래에 스마트폰에 대한 관심이 증가하면서 홈페이지에 한 귀퉁이에 QR Code가 달려 있는 것을 심심찮게 볼 수 있는데, Android Phone이나 iPhone 같은 스마트폰에는 QR Code Scanner 애플리케이션이 기본으로 갖추어져 있어서 이 QR Code를 읽기만 하면 어렵게 손으로 입력할 필요 없이 자동으로 해당 URL로 이동할 수 있게 됩니다.

물론, QR Code가 URL 정보만 담을 수 있는 것은 아닙니다. 연락처, E-mail 주소, 전화번호, 위치정보, 일반 문자열 등 매우 다양한 정보를 담을 수 있기 때문에 스마트폰에서 QR Code의 주요한 목적은 한번의 스캔으로 간편하고 빠르게 정보를 가져오는 것입니다.

그래서, 비록 Blogger가 아직 공식적인 모바일용 템플릿을 지원하고 있지는 않지만(요즘 스마트폰들 Full-Browsing 잘 지원하니까 괜찮아요. ㅡㅡ^), QR Code만이라도 달아보고자 이리저리 검색을 해보고 다녔습니다.

처음에 goo.gl의 단축 URL에 '.qr'만 붙이면 QR Code가 나온다는 정보를 입수하고 그것을 어떻게 활용할 방법이 없을까 고민하면서 이리저리 테스트했는데, 생각보다 쉽지 않더군요. goo.gl에서 생성된 QR Code URL을 JSON 형식으로 돌려주는 Google App Engine 용 애플리케이션을 만들고, 다시 그것을 Javascript를 활용해 동적으로 페이지에 IMG 태그 형태로 삽입하는 그런 것... 이 모든 것이 다 부질 없는 짓이었습니다. 조금 더 검색해보니 더 확실하고 더 간단한 방법이 있더군요.

그것은 바로 Google의 Chart API를 사용해서 QR Code 이미지를 얻는 방법입니다. 이 방법은 Blogger뿐만 아니라 다른 블로그, 또는 일반 웹사이트까지 다양하게 적용할 수 있습니다. 먼저 아래 사이트를 방문해서 내용을 한번 읽어본 다음 나머지 글을 보면 더 이해가 쉽습니다.

LINK: How To Add QR Code In Blogger Or BlogSpot?

위 사이트에서 알려주는 방법은 Google의 Chart API를 사용해서 고정된 URL에 대한 QR Code 이미지를 받는 것인데, 조금만 응용하면 매 블로그 글마다 고유한 QR Code를 붙일 수 있습니다. QR Code를 삽입하고 싶은 적절한 위치에다 아래 HTML+Javascript 코드를 붙여주기만 하면 됩니다. 경우에 따라서 location.href 부분을 다른 것으로 대체해야 할 수도 있지만, 대부분의 경우 그냥 써먹을 수 있습니다. QR Code 이미지의 크기는 chs=150x150 부분을 수정하면 조정할 수 있습니다. (가로x세로)

Blogger에서는 HTML/Javascript 가젯을 하나 추가하고 그 내용으로 아래 코드를 입력하면 잘 동작합니다.
<div id="QRCodeDiv"></div>
<script type="text/javascript">
var eurl = encodeURIComponent(location.href);
document.getElementById("QRCodeDiv").innerHTML = "<img src=\"http://chart.apis.google.com/chart?cht=qr&chs=150x150&chl=" + eurl + "\" alt=\"QR Code\"/>";
</script>
이제 QR Code 달아보세요.

2010년 7월 12일 월요일

Emacs 나눔로또 API & Module

아래 내용은 초기 버전에 대한 것으로 업데이트된 최신 내용은 프로젝트 위키 페이지에서 확인하실 수 있습니다. -- 2011-04-19
LINK: lotto-check-el/wiki/EmacsLottoApi



로또 이야기가 계속 이어지네요. 이 정도 정성이면 로또 1 등 내려주실 법도 한데, 5 등 한번 당첨되기도 쉽지 않으니 하늘이 무심(?)하십니다.

이번에는 Emacs에서 사용할 수 있는, 나눔로또 정보 및 당첨 여부 확인 모듈을 만들었습니다. Emacs Lisp 공부도 좀 하고 앞서 만들었던 로또 당첨 정보 Web API도 써먹어 볼 겸 만들어 본 것입니다. 그리고, 이번에 만든 것은 무려 소스까지도 공개합니다. 부끄러운 소스지만, 어쨌거나 GPL version 3를 채택해서 공개해봅니다.

공개된 소스의 저장소 URL은 다음과 같습니다.
LINK: http://bitbucket.org/kaisyu/lotto-check/
LINK: https://code.google.com/p/lotto-check-el/
LINK: https://github.com/kaisyu/lotto-check
LINK: https://gitlab.com/kaisyu/lotto-check

1. 소개 및 특징

로또 당첨 번호와 내가 구매한 로또의 당첨 여부를 Emacs에서 간편하게 확인할 수 있는 모듈입니다. 이 모듈은 다음과 같은 특징을 가지고 있습니다.

1) 인터넷을 통해 로또 정보를 수집하는 방법을 하나 이상 지원합니다.
로또 당첨 번호 정보는 인터넷을 통해 수집하게 되는데, 기본으로 @Lotto_K 계정에 게시되는 것과 동일한 정보를 사용하는 lotto.kaisyu.com 사이트의 Web API를 사용합니다. 그리고, 혹시라도 이 사이트에 문제가 생겼을 경우를 대비해 네이버, 다음, 나눔로또 공식 홈페이지 등의 대체 방법도 제공합니다.

2) Hashtable을 활용한 local cache를 유지합니다.
이로 인해 한번 가져온 로또 정보는 추가 인터넷 연결 없이 매우 빠르게 그 결과를 확인할 수 있습니다. 이 local cache는 lotto-check 모듈이 로드되거나 평가될 때 파일로부터 자동으로 읽혀져 초기화 되고, Emacs가 종료될 때 자동으로 파일에 저장됩니다.

3) 간단하게 즉시 사용할 수 있는 interactive 함수를 제공합니다.
M-x 함수명 형식으로 사용할 수 있는 함수들을 제공합니다. 로또 당첨 번호 정보를 보여주고, 사용자가 제공한 번호의 당첨 여부도 확인해주는 함수들로, 그 결과가 새로운 전용 buffer에 출력되거나 message 형태로 보여집니다. 자세한 것은 아래에 다시 소개하겠습니다.

4) 다른 모듈에서 간편하게 사용할 수 있는 API 함수를 제공합니다.
위에서 소개한 interactive 함수들과 동일한 역할을 하는 API 함수가 존재하는데, interactive 함수들과 다른 점은 반환값이 lisp object 형태로 되어 있어 재가공하거나 변환하여 사용하기 편리하다는 점입니다.


2. 설치 및 설정

1) 설치
다운로드한 소스를 load path에 추가해줍니다.
(add-to-list 'load-path "[lotto-check 모듈이 있는 경로]")
(require 'lotto-check)

2) 설정
Emacs의 Customize 기능(M-x customize)을 사용해서 Applications 그룹 아래의 Lotto 그룹으로 가면 간편하게 설정할 수 있는 UI가 제공되지만, 아래와 같이 직접 startup script 파일에 설정을 추가하는 것도 가능합니다.
;; 로또 당첨 정보를 인터넷으로부터 수집하는 함수를 지정합니다.
;; 기본값은 lotto-retrieve-numbers-from-lotto-k 함수이며,
;; 네이버, 다음, 나눔로또 공식 홈페이지, 사용자 정의 방법 등을 제공합니다.
;; 네이버: lotto-retrieve-numbers-from-naver
;; 다음: lotto-retrieve-numbers-from-daum
;; 나눔로또 공식 홈페이지: lotto-retrieve-numbers-from-645lotto
;; 사용자 정의 함수: lotto-info-retrieve-func-custom
;; * 사용자 정의 함수 방식을 사용할 경우 lotto-info-retrieve-func-custom 변수에
;;   사용자 정의 함수 이름을 지정합니다.
;;   예) (setq lotto-info-retrieve-func-custom 'my-retrieve-func-1)
(setq lotto-info-retrieve-func 'lotto-retrieve-numbers-from-lotto-k)
;; 로또 당첨 정보를 저장할 파일을 지정합니다.
(setq lotto-database-file "~/.lotto-database")
;; interactive function 실행 시 결과를 별도의 buffer에 보여주도록 설정합니다.
(setq lotto-use-buffer-for-message t)


3. 사용

1) interactive 함수 사용하기
  • M-x lotto-retrieve-numbers-i특정 회차의 당첨 번호 정보를 보여줍니다.
    실행하면 mini-buffer에 game no: 프롬프트가 뜨는데, 가져올 로또 회차 번호를 입력합니다.
    예) game no: 397
  • M-x lotto-check-numbers-list-i특정 회차에 사용자가 지정한 번호의 당첨 여부를 확인하여 결과를 보여줍니다.
    실행하면 minu-buffer에 game no: 프롬프트와 your numbers: 프롬프트가 뜨는데, 각각 비교할 로또 회차 번호와 확인할 번호 list를 입력합니다.
    확인할 번호 list 형식은 일반적인 lisp object와 동일합니다.
    예) your numbers: ((1 14 16 25 33 42) (2 10 17 26 34 43))
  • M-x lotto-save-db-to-file-ilocal cache에 저장된 로또 당첨 번호 정보를 파일에 저장합니다. 사용자가 수동으로 저장하지 않아도 Emacs 종료 시 자동으로 저장됩니다.
  • M-x lotto-load-db-to-file-i파일에 저장된 로또 당첨 번호 정보를 불러옵니다. 사용자가 수동으로 불러오지 않아도 lotto-check 모듈을 불러올 때 자동으로 local cache도 함께 불러옵니다.
[lotto-check 모듈 실행 결과]

2) API 함수 사용하기
(lotto-retrieve-numbers GNO)

로또 당첨 번호를 반환합니다.
GNO: 가져올 로또 회차 번호
반환값: ((당첨_번호_list) 보너스_번호)

예) (lotto-retrieve-numbers 395)
=> ((11 15 20 26 31 35) 7)
(lotto-check-numbers-list GNO MY-NUM-LIST)

주어진 번호의 당첨 여부를 반환합니다.
GNO: 비교할 로또 회차 번호
MY-NUM-LIST: 확인할 번호들의 list
반환값: ((등급 (일치한_번호_list)) ...)

예) (lotto-check-numbers-list 395 '((1 2 3 4 5 6) (11 15 20 28 32 36)))
=> ((0 nil) (5 (11 15 20)))

2010년 7월 6일 화요일

SBCL 1.0.40 Win32 Binary Installer

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

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

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



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

Mirror: SBCL 1.0.40 Win32 Binary (MediaFire)

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

sb-simple-streams

2010년 7월 5일 월요일

간단한 나눔로또 Web API

근래에 로또와 관련된 글을 좀 자주 쓰는 듯 하군요. ;-)

앞서 Google App Engine 위에 만들었던 로또 정보 제공 사이트의 내용을 조금 수정해서 원하는 로또 정보를 제공 받을 수 있는 Web 용 API를 만들어보았습니다.

사용 방법은 간단합니다.

기본 URL

나눔로또 Web API 기본 URL은 아래와 같습니다.

http://lotto.kaisyu.com/api

파라미터

method = get | check

실행할 동작을 결정합니다. 아래 두 가지 중 하나를 선택할 수 있으며, 생략은 불가능합니다.

  • get: 로또 정보 반환
  • check: 로또 번호 당첨 여부 확인

gno = 0 ~ 최근 로또 회차 번호

로또 회차 번호입니다. 생략하거나 0 이하의 값이면 DB에 저장된 회차 번호 중 가장 최근의 번호가 사용됩니다.

type = json | python | emacs

반환되는 값의 형식을 지정합니다. 생략하면 json 형식이 기본으로 사용됩니다.

  • json: JSON 형식
  • python: Python dict 형식
  • emacs: Emacs lisp를 포함한 일반적인 Lisp object 형식

callback = (javascript_function_name)

method 파라미터의 값이 json일 때만 사용되며, 지정된 JavaScript 함수에 결과값을 인자로 주어 호출하는 코드를 반환합니다.

numlist = [[n,...],[n,...],...]

당첨 여부를 확인할 번호 목록입니다. method가 check로 지정되었을 때만 사용되며, 리스트의 리스트 형식입니다.

반환값

get

일반적으로 볼 수 있는 사전 형식을 사용합니다. (각 아이템의 순서는 일정하지 않음)

  • gno: 로또 회차 번호
  • gdate: 추첨일
  • nums: 당첨 번호 목록
  • bnum: 보너스 당첨 번호

예를 들어보면,

202회차, 2006년 10월 14일 추첨, 보너스 번호는 17, JSON 형식

{"bnum": 17, "gno": 202, "gdate": "2006-10-14", "nums": [12, 14, 27, 33, 39, 44]}

301회차, 2008년 9월 6일 추첨, 보너스 번호는 26, Python 형식

{'bnum': 26, 'gno': 301, 'gdate': '2008-09-06', 'nums': [7, 11, 13, 33, 37, 43]}

396회차, 2010년 7월 3일 추첨, 보너스 번호는 30, Emacs Lisp object 형식

((bnum . 30) (gno . 396) (gdate . "2010-07-03") (nums . (18 20 31 34 40 45)))

check

[당첨 등수, 일치 번호 목록] 형식의 리스트를 반환합니다. (리스트의 리스트) 이때, 당첨 등수값이 0이면 꽝!!을 의미합니다.

예를 들어보면,

1 게임을 확인했고, 5 등 당첨되었으며, 일치한 번호는 27, 33, 44, JSON 형식

[[5, [27, 33, 44]]]

2 게임을 확인했고, 하나는 꽝, 나머지 하나는 5 등 당첨, Python 자료 구조 형식

[(0, [12]), (4, [14, 27, 33, 44])]

3 게임을 확인했고, 하나는 꽝, 하나는 5 등 당첨, 나머지 하나는 대망의 1 등 당첨, Emacs Lisp object 형식

((0 (12)) (4 (14 27 33 44)) (1 (12 14 27 33 39 44)))

예제

JavaScript Callback 함수를 활용한 예제

JavaScript Callback 함수를 활용한 예제는 별도의 페이지에서 제공하므로 아래 링크를 따라가세요.

기타 URL 예제들

get

check