2011년 12월 19일 월요일

Pidgin 2.10.1 네이트온 플러그인 (파일 전송 + 커스텀 이모티콘)

Pidgin 2.10.1 버전이 릴리즈 되어 이 버전에 맞추어 빌드한 네이트온 플러그인을 배포합니다.

다운로드 링크는 아래와 같습니다.
MediaFirepidgin-nateon-2.10.1-svn147+mc+fx+ce.exe
Dropboxpidgin-nateon-2.10.1-svn147+mc+fx+ce.exe
SkyDrivepidgin-nateon-2.10.1-svn147+mc+fx+ce.exe
혹은 최신 버전을 확인하기 위해 아래 링크를 따라가셔도 됩니다.
LINK: Kaisyu's Notes: Pidgin NateOn
빌드에 사용된 플러그인 소스는 아래 주소에 열람하거나 다운로드할 수 있습니다.
LINK: https://github.com/kaisyu/pidgin-nateon
Pidgin에서 네이트온 플러그인을 사용하는 자세한 방법은 아래 글을 참고해주세요.
LINKPidgin 네이트온 플러그인 (Windows) 및 활용 팁
이번 버전에서는 가끔 Pidgin이 crash되는 문제를 수정했습니다. (mog422 님께서 알려주신 문제 segmentation fault 오류 수정)

2011년 8월 22일 월요일

Pidgin 2.10.0 네이트온 플러그인 (파일 전송 + 커스텀 이모티콘)

Pidgin 2.10.0 버전이 릴리즈 되어 이 버전에 맞추어 빌드한 네이트온 플러그인을 배포합니다.

다운로드 링크는 아래와 같습니다.
MediaFirepidgin-nateon-2.10.0-svn147+mc+fx+ce-2.exe Dropboxpidgin-nateon-2.10.0-svn147+mc+fx+ce-2.exe SkyDrivepidgin-nateon-2.10.0-svn147+mc+fx+ce-2.exe
혹은 최신 버전을 확인하기 위해 아래 링크를 따라가셔도 됩니다.
LINK: Kaisyu's Notes: Pidgin NateOn
빌드에 사용된 플러그인 소스는 아래 주소에 열람하거나 다운로드할 수 있습니다.
LINK: https://github.com/kaisyu/pidgin-nateon
Pidgin에서 네이트온 플러그인을 사용하는 자세한 방법은 아래 글을 참고해주세요.
LINKPidgin 네이트온 플러그인 (Windows) 및 활용 팁
이번 버전 역시 특별히 달라진 점은 없고 단지 Pidgin 2.10.0 버전에 맞추어 빌드했습니다.

SBCL 1.0.51 Win32 Binary Installer

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

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

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

LINK: SBCL 1.0.51 Win32 Binary (Google Code)
Mirror 1: SBCL 1.0.51 Win32 Binary (MediaFire)
Mirror 2: SBCL 1.0.51 Win32 Binary (DropBox)
Mirror 3: SBCL 1.0.51 Win32 Binary (SkyDrive)
이번 버전에는 모든 contrib 모듈이 포함되었습니다.

2011년 7월 13일 수요일

SBCL 1.0.50 Win32 Binary Installer

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

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

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

LINK: SBCL 1.0.50 Win32 Binary (Google Code)
Mirror 1: SBCL 1.0.50 Win32 Binary (MediaFire)
Mirror 2: SBCL 1.0.50 Win32 Binary (DropBox)
Mirror 3: SBCL 1.0.50 Win32 Binary (SkyDrive)

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

sb-simple-streams

2011년 6월 13일 월요일

Pidgin 2.8.0 네이트온 플러그인 (파일 전송 + 커스텀 이모티콘)

Pidgin 2.9.0 버전이 릴리즈 되었지만 네이트온 플러그인에 영향을 주는 변경 사항이 없습니다. 그러므로 2.8.0 버전 플러그인을 그대로 사용하시면 됩니다. -- 2011.06.24



Pidgin 2.8.0 버전이 릴리즈 되어 이 버전에 맞추어 빌드한 네이트온 플러그인을 배포합니다. 예전부터 사용해오신 분들은 아마 그 동안 이 플러그인을 위해서 애써주신 많은 분들에 대해 잘 알고 계시겠지만 잘 모르시는 분들도 계실 텐데, 이 링크를 따라가시면 그 동안의 역사를 보실 수 있습니다. 궁금한 분들은 한번 쯤 보셔도 좋을 듯 합니다.

다운로드 링크는 아래와 같습니다.
MediaFirepidgin-nateon-2.8.0-svn147+mc+fx+ce-2.exe
Dropboxpidgin-nateon-2.8.0-svn147+mc+fx+ce-2.exe
SkyDrivepidgin-nateon-2.8.0-svn147+mc+fx+ce-2.exe
혹은 최신 버전을 확인하기 위해 아래 링크를 따라가셔도 됩니다.
LINK: Kaisyu's Notes: Pidgin NateOn
빌드에 사용된 플러그인 소스는 아래 주소에 열람하거나 다운로드할 수 있습니다.
LINK: https://github.com/kaisyu/pidgin-nateon

Pidgin에서 네이트온 플러그인을 사용하는 자세한 방법은 아래 글을 참고해주세요.
LINKPidgin 네이트온 플러그인 (Windows) 및 활용 팁

이번 버전에서 특별히 달라진 점은 없고 단지 Pidgin 2.8.0 버전에 맞추어 빌드했습니다.

2011년 6월 6일 월요일

SBCL 1.0.49 Win32 Binary Installer

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

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

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

LINK: SBCL 1.0.49 Win32 Binary (Google Code)
Mirror 1: SBCL 1.0.49 Win32 Binary (MediaFire)
Mirror 2: SBCL 1.0.49 Win32 Binary (DropBox)
Mirror 3: SBCL 1.0.49 Win32 Binary (SkyDrive)

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

sb-simple-streams

2011년 5월 11일 수요일

SBCL 1.0.48 Win32 Binary Installer

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

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

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

LINK: SBCL 1.0.48 Win32 Binary (Google Code)
Mirror 1: SBCL 1.0.48 Win32 Binary (MediaFire)
Mirror 2: SBCL 1.0.48 Win32 Binary (DropBox)
Mirror 3: SBCL 1.0.47 Win32 Binary (SkyDrive)

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

sb-simple-streams

2011년 3월 28일 월요일

홈페이지에 나눔로또 위젯을 달아봅시다

예전에 만들어 놓은 나눔로또 Web API를 사용해서 홈페이지나 블로그에 간단하게 추가할 수 있는 나눔로또 당첨 번호 위젯을 만들어 보았습니다. Google App Engine (Python)에 대해 공부해볼 겸해서 만들었던 것이라 그다지 큰 쓰임새가 없었는데 이렇게라도 소개를 하면 그나마 좀 쓰이지 않을까 해서 글로 남겨봅니다. ;-)

몇 줄 안 되는 HTML + JavaScript 코드이므로 적당한 곳에 그대로 아래 코드를 추가하면 됩니다. (Blogger에서는 대시보드 -> 꾸미기 -> 페이지 구성요소 -> 가젯 추가 -> HTML/JavaScript 선택한 다음 아래 코드를 본문에 붙여넣기 하면 됩니다.) 단, 웹이 제 전문 분야가 아니라서 별로 예쁘지는 않습니다. 그저 그럭저럭 잘 동작한다는 데에 의미를 두고 싶습니다. :-( 그러니 화면에 보여지는 모양을 변경하고 싶거나 다르게 동작하길 원한다면 loadLotto 함수의 내용을 적절히 수정하면 되겠습니다.

<div id="lottoDiv">loading...</div>
<script type="text/javascript">
function loadLotto(a) {
  lotpane = document.getElementById('lottoDiv');
  lotpane.innerHTML = '제 <span style="color: green;"><b>' +
      a.gno + '</b></span>회 (' + a.gdate + ')<br /><b><span style="color: red;">' + 
      a.nums + '</span> / <span style="color: blue;">' + a.bnum + '</span></b>';
}
</script>
<script type="text/javascript" src="http://lotto.kaisyu.com/api?method=get&callback=loadLotto">
</script>

소스 내용이 간단하므로 이해하는 데 큰 어려움은 없겠지만 간단히 설명을 하자면 크게 세 부분으로 나눌 수 있습니다.

  1. div 태그: 나눔로또 번호가 표시될 위치에 id가 lottoDiv인 div 태그를 하나 만들어 둡니다.
  2. 첫 번째 script 태그: Callback으로 호출될 JavaScript 함수 loadLotto를 만듭니다. 이 함수는 인자로 넘어온 a 객체에서 필요한 정보를 가져다 화면에 보여줄 HTML 코드를 생성한 다음 lottoDivinnerHTML 값으로 지정해줍니다. (a 객체의 구성에 대한 상세한 내용은 나눔로또 Web API를 참고해주세요.)
  3. 두 번째 script 태그: 이제 준비가 되었으므로 Lotto-K Web API를 호출하는 URL을 script 태그의 src 속성에 추가합니다. 이 때 첫 번째 script 태그에서 만들어둔 함수의 이름(loadLotto)을 callback 파라미터에 넘겨줍니다.

    브라우저에서 직접 이 URL을 입력해보면 그 결과가 아래와 같습니다. JSON 형식으로 된 나눔로또 당첨 번호 오브젝트를 파라미터로 가지는 loadLotto 함수 호출 형태라는 것을 한 눈에 알 수 있습니다.
    loadLotto({"bnum": 35, "gno": 434, "gdate": "2011-03-26", "nums": [3, 13, 20, 24, 33, 37]})
    그러므로 이 내용을 script 태그에 src 속성으로 지정하여 실행하면 첫 번째 script 태그에서 정의한 loadLotto 함수에 나눔로또 당첨 번호 오브젝트가 전달되는 것이죠.

실제로 페이지 내에 추가해서 실행한 결과는 아래와 같습니다.

loading...

위에서 소개한 내용 외에 나눔로또 당첨 여부를 확인할 수 있는 버튼 위젯에 대한 예제도 있으므로 관심 있는 분들은 여기를 따라가보세요.

그리고, 혹시 사용하면서 궁금한 점이 있거나 API 기능 추가에 대해 건의하고 싶은 내용이 있으면 언제든 댓글 남겨주세요. 능력이 되는 범위 내에서 천천히 수정해보겠습니다. :)

2011년 3월 27일 일요일

SBCL 1.0.47 Win32 Binary Installer

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

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

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

LINK: SBCL 1.0.47 Win32 Binary (Google Code)
Mirror 1: SBCL 1.0.47 Win32 Binary (MediaFire)
Mirror 2: SBCL 1.0.47 Win32 Binary (DropBox)
Mirror 3: SBCL 1.0.47 Win32 Binary (SkyDrive)

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

sb-simple-streams

2011년 3월 25일 금요일

[Emacs] 유용한 ERC 설정 몇 가지

ERC는 Emacs에서 구동되는 IRC 클라이언트 모듈입니다. Emacs 23 버전부터 Emacs 기본 lisp 꾸러미에 포함되어 있기 때문에 다운로드하거나 설치하는 과정 없이 설정만 몇 가지 변경해주면 Emacs에서도 쉽게 IRC 채팅을 할 수 있습니다. 대부분의 ERC 관련 설정은 Customize Group을 통해 변경이 가능합니다.

M-x customize-group RET erc RET

그리고, 기본적인 설정 외에 제가 사용하는 것 중 유용하다고 생각되는 몇 가지를 정리해보았습니다.

서버 별 접속 함수 만들기

주로 IRC 네트워크 단 한 곳만 찾는 사람이라면 그냥 ERC 기본 설정에 서버와 닉을 지정해놓으면 되지만, 둘 이상의 네트워크에 접속할 일이 잦다면 각 네트워크 별로 접속 함수를 만들어두는 편이 더 편리합니다. 아래는 Freenode, HanIRC, 오징어 IRC 세 곳에 대한 코드 예입니다. (주의: Freenode는 NickServ가 있으므로 :password 필드에 닉 인증용 암호를 줄 수 있지만, HanIRC와 오징어 IRC는 다른 방법을 사용해야 합니다. 그 부분은 다음 단락에 다시 설명합니다.)

;; Freenode Network
;; NickServ: /msg NickServ identify PASSWD
;; ChanServ: /msg ChanServ help
(defun irc-connect-freenode ()
  "connect to freenode IRC server"
  (interactive)
  (erc-tls :server "irc.freenode.net"
           :port 7000
           :nick "MyNick"
           :password "MyPassword"
           :full-name "My Full Name"))

;; HanIRC Network
;; NickServ: /msg ^^ login NICK PASSWD
;; ChanServ: /msg ChanServ help
(defun irc-connect-hanirc ()
  "connect to HanIRC server"
  (interactive)
  (erc :server "irc.hanirc.org"
       :port 6667
       :nick "MyNick"
       :full-name "My Full Name"))

;; Ozinger Network
;; NickServ: /msg 오징오징어 identify PASSWD
;; ChanServ: /msg ㅇㅈㅇ help
(defun irc-connect-ozinger ()
  "connect to Ozinger IRC server"
  (interactive)
  (erc :server "irc.ozinger.org"
       :port 6667
       :nick "MyNick"
       :full-name "My Full Name"))

HanIRC와 오징어 IRC 닉(nick) 자동 인증

HanIRC와 오징어 IRC는 닉 인증을 위해 NickServ 대신 다른 방식을 사용하기 때문에 기본 설정만으로는 닉 자동 인증을 할 수 없습니다. 대신, erc-after-connect hook을 사용하여 닉 인증이 자동으로 되도록 설정해줄 수 있습니다.

(add-hook 'erc-after-connect
          '(lambda (SERVER NICK)
             (cond
              ;; hanirc
              ((string-match "hanirc\\.org" SERVER)
               (erc-message "PRIVMSG"
                            (concat "^^ login "
                                    "MyHanIRCNick" " "
                                    "MyHanIRCPassword")))
              ;; ozinger
              ((string-match "ozinger\\.org" SERVER)
               (erc-message "PRIVMSG"
                            (concat "오징오징어 identify "
                                    "MyOzingerPassword")))
              )))

알림(notice) 메시지 관련 설정

알림 메시지가 왔을 때 미니 버퍼에 보여주고, 현재 활성화되어 있는 채널 버퍼에도 그 내용을 보여주도록 설정합니다. 알림 메시지를 놓치지 않도록 도와주는 매우 유용한 설정입니다.

(setq erc-echo-notices-in-minibuffers-flag t)
(add-hook 'erc-echo-notice-hook 'erc-echo-notice-in-active-buffer)

mIRC 색상(color) 보여주기

메시지에 포함된 색상 코드를 해석해서 그 색상과 스타일을 표시해줍니다.

(setq erc-interpret-mirc-color t)

채널(channel) 자동 입장(join)

서버에 접속할 때마다 자동으로 특정 채널에 입장하도록 설정해줄 수 있습니다. 이 설정은 erc-modules list 내에 autojoin이 포함되어 있어야 작동합니다. 즉, autojoin 모듈을 활성화해두어야 합니다. -- 이 글 처음에 언급했던 Customize Group ERC 파트에서 활성화 모듈을 선택할 수 있습니다.

(setq erc-autojoin-channels-alist
      (quote (
        ("freenode.net" "#abc"
                        "#def")
        ("hanirc.org" "#channel1"
                      "#channel2")
        ("ozinger.org" "#chn1"
                       "#chn2")
        )))

닉(nick)마다 고유 색상 부여하기

닉에 고유한 색상을 부여해서 닉 별 대화 내용을 쉽게 구분할 수 있도록 도와주는 기능입니다. 이 기능을 사용하기 위해서는 erc-highlight-nicknames.el 파일이 필요한데, 아래 주소에서 받을 수 있습니다. 물론 자세한 설명도 함께 제공됩니다.

LINK: EmacsWiki: ErcHighlightNicknames

위 주소에서 erc-highlight-nicknames.el 파일을 받아 site-lisp과 같이 load-path에 포함된 적절한 폴더에 복사해넣습니다. 또는 load-path에 이 파일이 위치한 경로를 추가해도 됩니다. 그런 다음 아래 코드를 설정에 추가하면 됩니다.

(require 'erc-highlight-nicknames)
(and
     (require 'erc-highlight-nicknames)
     (add-to-list 'erc-modules 'highlight-nicknames)
     (erc-update-modules))

오징어 IRC 네트워크 접속 오류

ERC를 통해서 오징어 IRC 네트워크에 접속했는데 'USER: not enough parameters' 오류 메시지를 보여주더니 잠시 후 끊어지더군요. ERC 설정도 바꿔보고 소스도 좀 뒤져보고 해서 겨우 이유를 알아낸 다음에는 사실 좀 허탈했습니다.

일단 해결 방법은 erc-anonymous-login 값을 nil로 설정해주는 것입니다. (이 값을 nil로 설정하면 IRC 서버 연결됐을 때 닉 인증에 사용할 패스워드를 물어보는 프롬프트가 미니 버퍼 영역에 뜨는데, 그냥 엔터 키를 쳐서 넘어가면 됩니다.)

(setq erc-anonymous-login nil)

erc-login 함수 소스를 살펴봤더니 위 설정이 t로 되어 있으면 IRC 서버에 USER 명령을 보낼 때 첫 번째 파라미터로 닉(nick) 대신 이메일(email) 값을 보내도록 되어 있는데, 오징어 IRC 서버에서는 첫 번째 파라미터에 email 값이 주어지면 'USER: not enough parameters' 오류를 내는 것이었습니다.

USER MyNick 0 * My_Full_Name        --> OK
USER abc@def.net 0 * My_Full_Name   --> Error

2011년 3월 24일 목요일

Windows 환경에서 OpenSSL 빌드하기

OpenSSLSSL을 지원하는 많은 프로그램에서 사용하는 라이브러리 모듈이기 때문에 버그나 보안 관련 이슈가 발견되어 그것을 수정한 새로운 소스가 릴리즈될 경우 영향을 받을 수 있는 프로그램들은 최대한 빨리 업그레이드 해줄 필요가 있습니다. 다행스러운 점은 OpenSSL을 사용하는 대부분의 프로그램들이 (Windows 환경 기준으로) 두 개의 DLL 파일(ssleay32.dll & libeay32.dll)만 교체해주면 OpenSSL 모듈 업그레이드가 가능하다는 것입니다. -- DLL을 사용하지 않고 정적(static)으로 링크해버린 경우는 어쩔 수 없고, DLL을 사용했다고 하더라도 DLL 파일만 교체했을 때 드물게 오류를 일으키는 경우도 있습니다.

그러나 주의할 점이 하나 있는데, OpenSSL 1.0.x 버전과 0.9.x 버전의 라이브러리 인터페이스가 서로 다르기 때문에 DLL 파일 교체 시에 각각 인터페이스가 호환되는 버전으로 대체해야 한다는 것입니다. 예를 들어, 기존에 0.9.8q 버전의 DLL 파일이 사용되고 있었다면 0.9.8r 또는 그 이후 버전의 DLL 파일로 대체해야지 1.0.0d 버전이나 그 이후 버전의 DLL 파일로 대체하면 안 된다는 뜻이지요. DLL 파일의 속성 보기를 통해 버전 정보를 확인할 수 있으므로 적절한 대체 버전을 결정하는 것은 그리 어렵지 않습니다.

[libeay32.dll 속성 대화창]
[ssleay32.dll 속성 대화창]

빌드 준비

Windows 환경에서 OpenSSL 소스를 직접 빌드하는 것은 아주 간단합니다. 빌드에 사용되는 도구들도 모두 무료로 구할 수 있는 것들이기 때문에 비용에 대해 고민할 필요도 없습니다. (Visual C++ 64bit Compiler는 상용 제품에서만 제공됩니다.) 빌드에 필요한 도구들을 나열해보면 다음과 같습니다.

  • Perl: ActivePerl 또는 Strawberry Perl(@euler_kr 님 지적해주심)
  • C Compiler: Visual C++ 또는 Borland C 또는 GCC(Cygwin 또는 MinGW)
  • Assembler: nasm 또는 MASM

소스와 빌드 도구 다운로드 및 설치

소스는 OpenSSL 공식 홈페이지에서 다운로드 가능합니다. 1.0.x 버전과 0.9.x 버전이 함께 업데이트가 되고 있으므로 둘 다 받거나 둘 중 필요한 것으로 골라서 받습니다.

LINK: OpenSSL Source Downloads

이 글에서는 주로 많이 사용하는 Visual C++과 nasm을 가지고 Win32 환경으로 빌드하는 방법을 설명하겠습니다. 다른 도구 구성으로 빌드하고 싶은 분들은 OpenSSL 소스에 포함된 INSTALL.xxx 파일을 참고하시기 바랍니다. (Win32 빌드에 대해서는 INSTALL.W32 파일을, Win64 빌드에 대해서는 INSTALL.W64 파일을 참고)

가장 먼저 아래의 도구들을 각각 다운로드하여 설치합니다. OpenSSL 빌드에 사용되는 도구들은 특별히 버전에 대한 제약이 없으므로 최신 안정 버전을 받으면 됩니다. 단, Microsoft Visual C++은 빌드에 사용한 버전에 따라 결과물로 만들어진 DLL 파일이 해당 MSVC Runtime 버전에 대한 의존성을 가지게 되므로 외부에 전달할 때는 반드시 필요한 MSVC Runtime 버전을 알려주거나 재배포 가능한 패키지를 함께 제공할 필요가 있습니다.

LINK: ActivePerl 또는 Strawberry Perl 둘 중 하나

LINK: Microsoft Visual C++ Express Edition

LINK: Netwide Assembler(nasm)

빌드

  1. Windows 시작 메뉴에서 Visual Studio 명령 프롬프트를 실행합니다.

  2. nasmw.exe 파일의 위치를 PATH 환경 변수에 추가하거나 이미 PATH에 포함된 경로로 복사해줍니다.

    주의: 최근 nasm 배포본에서는 실행 파일명이 nasm.exe가 되었으므로 OpenSSL 빌드를 위해서는 nasmw.exe로 이름을 변경줄 필요가 있습니다.

  3. OpenSSL 소스가 풀려 있는 폴더로 경로를 변경합니다.

  4. Perl 스크립트를 통해 빌드 환경을 설정해줍니다.

    perl Configure VC-WIN32 --prefix=설치될_경로

    주의: 위와 같이 OpenSSL 기본 옵션으로 빌드하게 되면 미국과 몇몇 나라에서 특허로 보호받고 있는 암호화 알고리즘을 포함하게 되어 이것을 개발 중인 제품에 적용하거나 재배포할 때 법적인 문제를 야기할 수 있습니다. 그러므로, 특허로 보호되는 알고리즘을 제외하고 빌드하고 싶은 경우 no-idea no-mdc2 no-rc5 옵션을 추가해주어야 합니다. (greenfish77 님 지적해주심) 더 자세한 내용은 소스 내 README 파일의 PATENTS 항목과 FAQ 파일의 LEGAL 항목에서 확인할 수 있습니다.

    perl Configure VC-WIN32 no-idea no-mdc2 no-rc5 --prefix=설치될_경로
    또한 여기에 덧붙여, OpenSSL을 사용(또는 포함)한 어떠한 형태의 배포도 OpenSSL에 적용되고 있는 두 가지의 라이센스에 대해 표기해야 합니다. 자세한 것은 소스에 포함된 LICENSE 파일 내용을 참고하시기 바랍니다.

  5. Assembler로 nasm을 사용할 것임을 지정해줍니다.

    ms\do_nasm
  6. nmake로 빌드합니다. (한글 Windows 환경이라면 빌드 도중 에러가 발생할 수 있습니다. 이 에러에 대해서는 다음 단락을 참고하세요.)

    nmake -f ms\ntdll.mak
  7. 빌드가 잘 되었는지 테스트합니다.

    nmake -f ms\ntdll.mak test
  8. 최종적으로 만들어진 바이너리를 설치될_경로로 설치합니다.

    nmake -f ms\ntdll.mak install

빌드 중 compile error 해결하기

한글 Windows 환경에서 OpenSSL 소스를 빌드하게 되면 도중에 컴파일 에러를 만나게 됩니다. 소스 파일 중 딱 두 개가 컴파일 오류를 일으키는데, 그 원인은 소스 파일이 iso-8859-1 인코딩으로 저장되어 있고 그 내용 중에 확장 ASCII 문자가 포함되어 있기 때문입니다. Visual C++ Compiler(.NET 이후 버전부터)는 소스를 읽어 들일 때 UTF-8으로 인코딩된 파일인지 확인하고 그렇지 않다면 시스템 기본 인코딩(한글 Windows에서는 CP949)으로 간주합니다. 이 때 그 확장 ASCII 문자가 적절하지 못한 문자로 처리되어 컴파일 오류를 발생시키게 되는 것입니다.

컴파일 에러가 발생하는 소스 파일은 다음과 같습니다.

crypto\x509v3\v3_pci.c
crypto\x509v3\v3_pcia.c

해결 방법은 간단합니다. 문제가 되는 확장 ASCII 문자(ö)는 소스 파일 첫 부분(line 5)에 있는 주석 중 저작권 표기 부분에 포함되어 있습니다.

/* Copyright (c) 2004 Kungliga Tekniska Högskolan

그러므로, 적절한 텍스트 편집기로 열어서 그 이름 부분을 지우고 저장한 다음 빌드하면 됩니다. (주의: OpenSSL 라이센스 정책에 따라, 배포하는 소스에서 위 저작권 관련 표기를 삭제하는 것은 허용되지 않습니다. 이것은 단지 빌드 시에 오류를 피하기 위한 방법일 뿐입니다.) 혹은 그냥 소스를 UTF-8 인코딩으로 변환해서 저장해주면 됩니다.

2011년 3월 20일 일요일

PChat - Windows 환경에서 쓸만한 IRC 클라이언트

Windows 환경에서 쓸만한 IRC 클라이언트 프로그램이라면 mIRC, XChat, KVIrc 정도가 있지 않을까 생각하는데, mIRC는 무료 소프트웨어가 아니고, 오픈소스 소프트웨어인 XChat마저도 공식 홈페이지에서 배포하는 Windows용 설치본은 일정 비용을 지불하고 구매해야만 합니다. -- 그러고 보니 비록 기본적인 수준의 기능일 뿐이지만 Opera 브라우저와 다중 프로토콜 메신저 Pidgin도 IRC를 지원네요.

완전히 무료로 사용할 수 있는 KVIrc는 QT 기반으로 개발된 다중 플랫폼 지원 IRC 클라이언트인데, 다른 IRC 클라이언트들에 비해서 약간 더 무거운 느낌은 있지만, 화려한 테마나 색상, 여러 가지 강력한 추가 기능들을 고려했을 때 상당히 좋은 IRC 클라이언트 프로그램이라고 할 수 있습니다. 그런데 직접 사용해본 바로는 아직 한글 인터페이스를 제공하지 않고 있고, 채팅창에 출력되는 일부 한글 문자들이 간혹 깨지는 현상이 있더군요. 한글 인터페이스는 없어도 크게 상관이 없지만, 채팅 내용이 가끔 깨지는 건 꽤 문제가 되는 부분이 아닐 수 없습니다. 결국 KVIrc는 단념.

그리고 근래에 다시 문득 생각이 나서 인터넷을 들쑤시고 다니다가 발견한 것이 PChat입니다. PChat은 XChat의 소스로부터 갈라져나온 것으로, XChat과 거의 유사한 기능을 제공하고 무료 Windows용 설치본도 제공합니다. 예전에 소개한 적이 있는 XChat 2 for Windows (Silverex 버전)도 비슷한 맥락이지만, 2.8.6-2 버전 이후로 더 이상 업데이트가 이루어지지 않고 있는 상황이라 PChat의 의미가 크다고 할 수 있습니다.

PChat은 현재 한글 인터페이스를 지원하고 한글 입력이나 출력에 아무런 문제가 없습니다. 서버 encoding도 잘 지원해주고 있어서 Freenode, 오징어 IRC 네트워크처럼 UTF-8을 사용하는 서버나 한IRC처럼 EUC-KR을 사용하는 서버 모두 문제 없이 접속할 수 있습니다.

[PChat 실행 모습]

PChat 다운로드 및 설치

PChat은 공식 홈페이지에서 다운로드 할 수 있습니다.

LINK: PChat Download 페이지

설치할 때는 한글 인터페이스와 확장 스크립트 기능을 사용하기 위해 몇 가지 선택을 변경해줄 필요가 있는데, 가장 무난한 옵션 선택은 아래 그림과 같습니다. Perl이나 Python, Tcl 같은 스크립트 인터프리터가 시스템에 설치되어 있고 이 언어들을 사용해서 스크립트를 작성할 생각이 있다면 해당하는 부분을 더 체크해주면 됩니다. -- Lua는 인터프리터 라이브러리가 플러그인 DLL 파일 내에 내장되어 있으므로 시스템에 별도로 Lua가 설치되어 있지 않아도 상관 없습니다.

[PChat 설치 옵션 지정]

PChat 기본 설정

취향에 따라 제법 다양하게 설정할 수 있지만, 이 글에서는 꼭 필요한 부분만 간단하게 설명하겠습니다.

네트워크 추가

File 메뉴 -> 네트워크 목록을 실행하면 네트워크 목록 대화상자가 뜹니다. 여기서 자신이 접속할 네트워크에 대한 정보를 추가해줄 수 있습니다. 기본으로 많은 네트워크들이 미리 등록되어 있는데, Freenode는 등록이 되어 있지만 주로 한국 사람들이 많이 이용하는 한IRC, 오징어 IRC 네트워크, 단군넷 등은 등록되어 있지 않습니다. 추가 버튼을 눌러서 새로운 네트워크 항목이 추가되면 이름을 변경해준 다음 편집 버튼을 눌러서 서버 주소와 닉인증 방법 등 필요한 정보를 입력해줍니다. 아래는 각각 Freenode, 한IRC, 오징어 IRC 네트워크에 대한 설정 예입니다. -- 암호 부분은 자신의 닉을 서버에 등록한 경우만 입력합니다. 그러므로, 특별히 닉을 등록해서 사용하는 것이 아니라면 그냥 비워두면 됩니다.

[Freenode 설정 - SSL 접속, UTF-8 인코딩, NickServ를 통한 닉(nick) 인증]
[오징어 IRC 네트워크 설정 - UTF-8 인코딩, 서버 자체 닉(nick) 인증 방식]
[한IRC 설정 - EUC-KR(CP949) 인코딩, 서버 자체 닉(nick) 인증 방식]

채팅창 글꼴 변경

설정 메뉴 -> 기본 설정 -> 사용자 환경 / 글월창 -> 글꼴 란 우측 찾아보기 버튼을 눌러서 채팅창의 글꼴을 변경할 수 있습니다. 한자나 전각기호문자 등을 제대로 보기 위해서는 굴림체, 돋움체, 궁서체, 바탕체 등으로 설정하는 편이 좋습니다. 그러나, 꼭 고정폭 글꼴을 고집하지 않을 경우 Segoe UI로 설정하면 좀 더 깔끔한 화면을 볼 수 있습니다.

[채팅창 글꼴 설정 - Segoe UI로 선택했다.]

기본 UI 글꼴 변경

채팅창 설정에서 글꼴을 변경해도 메뉴와 툴바 등의 기본 UI에 대한 글꼴은 변경이 되지 않습니다. PChat은 GTK 기반이므로 이 부분의 글꼴을 변경하려면 PChat 설치 폴더 아래etc/gtk-2.0/gtkrc 파일 내용을 직접 변경해주어야 합니다. 아래는 Windows Vista/7에서 시스템 기본 글꼴인 Segoe UI 10으로 설정한 파일입니다.

LINK: gtkrc

위 파일의 내용은 아래와 같습니다. 다른 글꼴로 바꾸고 싶은 분들은 gtkrc 파일을 텍스트 편집기로 연 다음 Segoe UI 10 부분을 적절히 변경해주면 됩니다. 예를 들어, 굴림으로 변경하고 싶다면 Gulim 10이 되겠죠.

style "user-font"
{
    font_name="Segoe UI 10"
}
widget_class "*" style "user-font"

마치며...

얼마 전, 웹페이지에 채팅창을 다는 내용으로 썼던 글에서 Web 기반 IRC 클라이언트를 소개한 적이 있습니다. 웹브라우저만 있으면 되고 IRC 포트가 차단된 환경에서도 IRC 서버 접속이 일부 가능하다는 장점 때문에 권장했었는데, 그래도 전용 IRC 클라이언트가 사용 가능한 환경이라면 그것을 사용하는 편이 좀 더 편리한 것은 사실입니다. 아직도 IRC를 사랑하는 많은 분들 중 Windows 환경에서 무료로 사용할 수 있는 IRC 클라이언트를 찾고 있는 분이 있다면 PChat이 좋은 답이 될 수 있을 겁니다.

2011년 2월 20일 일요일

SBCL 1.0.46 Win32 Binary Installer

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

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

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

LINK: SBCL 1.0.46 Win32 Binary (Google Code)
Mirror 1: SBCL 1.0.46 Win32 Binary (MediaFire)
Mirror 2: SBCL 1.0.46 Win32 Binary (DropBox)
Mirror 3: SBCL 1.0.46 Win32 Binary (SkyDrive)

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

sb-simple-streams

2011년 2월 19일 토요일

Pidgin 2.7.10 네이트온 플러그인 (파일 전송 + 커스텀 이모티콘)

더 최신 버전이 있습니다. 아래 링크를 따라가세요. -- 2011.06.21
LINK: Kaisyu's Notes: Pidgin NateOn



Pidgin 2.7.11 버전이 출시되었지만, 네이트온 플러그인에 영향을 주는 특별한 변경 사항은 없습니다. 그러므로 아래 2.7.10 버전용으로 빌드된 것을 그대로 사용하시면 됩니다. -- 2011.03.12



오프라인인 대화 상대에게 쪽지를 보낼 때 Pidgin이 죽는(crash) 문제가 수정되었습니다. 이번에도 ForceCore님이 패치해주셨고, 패치 내용 적용해서 새로 빌드한 파일을 배포합니다. (아래 본문의 링크를 변경했습니다.) -- 2011.03.07



ForceCore 님이 커스텀 이모티콘 기능도 추가해주셨네요. 패치 적용해서 새로 빌드한 파일을 다시 배포합니다. (아래 본문의 링크를 변경했습니다.) -- 2011.02.23

[커스텀 이모티콘 사용한 예]



드디어 네이트온 메신저 4.x 버전과 호환되는 파일 전송 패치가 적용됐습니다. 이 패치는 ForceCore 님이 만들어주셨습니다. 그 동안 파일 전송 기능을 애타게 기다려오신 분들은 ForceCore 님 블로그에 고마움의 댓글 남겨주세요~

Pidgin 2.7.10 버전에 맞추어 빌드된 플러그인의 다운로드 링크입니다.
MediaFirepidgin-nateon-2.7.10-svn147+mc+fx+ce-2.exe
Dropboxpidgin-nateon-2.7.10-svn147+mc+fx+ce-2.exe
SkyDrivepidgin-nateon-2.7.10-svn147+mc+fx+ce-2.exe
빌드에 사용된 플러그인 소스는 아래 주소에 열람하거나 다운로드할 수 있습니다.
(difro 님의 github 저장소로부터 브랜치를 만들고 forcecore 님의 패치를 적용해두었습니다.)
LINK: https://github.com/kaisyu/pidgin-nateon

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

이번 버전에 달라진 점은 아래와 같습니다.
forcecore 님 패치 반영
 - 패치 소스: http://forcecore.tistory.com/1216
 - 쪽지 답장 버튼 추가
 - NateOn 메신저 4.x 버전 호환 파일 전송 가능 패치
 - 커스텀 이모티콘 사용 가능 패치

파일 전송 시 파일 경로명에 한글이 포함된 경우 전송 실패하는 문제 수정
 - fopen -> g_fopen

prpl_info 구조체 내용 업데이트

일부 debug info 출력문 오류 수정
 - purple_debug_info 함수의 포맷 지시자와 파라미터 불일치

이외에 Pidgin 2.7.10 버전 및 libpurple의 상세 수정 내역은 이곳을 참고하세요.

2011년 2월 11일 금요일

OpenSSL 1.0.0d & 0.9.8r Win32 Binary

OpenSSL 1.0.0d 버전과 0.9.8r 버전이 함께 릴리즈 되었습니다.

주의:
이 제품에는 OpenSSL Toolkit에 사용하기 위해 OpenSSL Project에서 개발한 소프트웨어가 포함되어 있습니다. (http://www.openssl.org/)
이 제품은 Eric Young (eay@cryptsoft.com)이 작성한 암호화 소프트웨어를 포함합니다.
이 제품은 Tim Hudson (tjh@cryptsoft.com)이 작성한 소프트웨어를 포함합니다.
This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit.(http://www.openssl.org)
This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)
This product includes software written by Tim Hudson (tjh@cryptsoft.com)

또한, 이 바이너리 배포판은 OpenSSL 기본 옵션으로 빌드되었습니다. 이것은 미국과 몇몇 국가에서 특허로 보호받고 있는 암호화 알고리즘을 포함하고 있다는 의미입니다. 그러므로, 이 바이너리 배포판을 자신의 제품에 적용하거나 재배포 할 때 특허 및 라이센스에 대해 고려하여야 합니다.

더 자세한 내용은 바이너리 배포판에 포함된 LICENSEREADME 파일의 PATENTS 항목을 참고하시기 바랍니다.

여기서 제공하는 binary는 MS Visual C++ 2010 Express Edition으로 빌드되었기 때문에 MS VC++ Runtime 2010이 필요합니다. 현재 시스템에 아직 설치되어 있지 않다면 아래 링크에서 다운로드한 후 설치하시면 됩니다.
LINK: Microsoft Visual C++ 2010 Redistributable Package (x86)

OpenSSL 1.0.0d 버전 Win32 binary는 아래에서 받으세요.
LINK: openssl-1.0.0d-win32-msvc100.zip (from DropBox)
LINK: openssl-1.0.0d-win32-msvc100.zip (from MediaFire)
LINK: openssl-1.0.0d-win32-msvc100.zip (from SkyDrive)

OpenSSL 0.9.8r 버전 Win32 binary는 아래에서 받으세요.
LINK: openssl-0.9.8r-win32-msvc100.zip (from DropBox)
LINK: openssl-0.9.8r-win32-msvc100.zip (from MediaFire)
LINK: openssl-0.9.8r-win32-msvc100.zip (from SkyDrive)

Binary build에 사용된 환경은 다음과 같습니다.
Microsoft Visual C++ Express Edition 2010 - http://www.microsoft.com/express/Downloads/#2010-Visual-CPP
NASM - http://www.nasm.us
ActivePerl - http://www.activestate.com/activeperl/


참고로, 제가 빌드해서 배포하는 것 외에 OpenSSL 공식 홈페이지에 게시된 binary 배포본의 링크는 아래에서 확인하실 수 있습니다.
LINK: http://www.openssl.org/related/binaries.html

2011년 2월 9일 수요일

Pidgin 2.7.10 네이트온 플러그인

파일 전송 가능한 버전새로 등록되었습니다. -- 2011.02.19



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

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

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

네이트온 플러그인의 소스는 달라진 것이 없으므로 여전히 파일 전송이 불가능합니다. 그리고, Pidgin 2.7.10 버전 및 libpurple의 상세 수정 내역은 이곳을 참고하세요.

2011년 1월 10일 월요일

[Emacs] Encoding 자동 판별 모듈 - Unicad

들어가기 전에 - 인코딩이 왜 문제인가?

한글 Windows 환경(꼭 한글 Windows가 아니더라도 OS 기본 인코딩이 영문 또는 서유럽어가 아닌 경우)에서 소스 코드를 다루는 사람이라면 한번 정도는 겪어보았을 법한 문제가 있습니다. 소스를 text editor로 열었더니 ?로 보이는 부분이 있고, 이 파일을 조금 수정한 다음 저장해서 compile 하면 compile이 실패하거나 성공하더라도 실행 중에 엉뚱한 글자(?)가 보여지는 일 말이죠. 이것은 다중 바이트 인코딩 문자셋(여기서는 euc-kr 또는 cp949)에서 ASCII 코드 확장 영역의 문자 코드를 일부 중복 사용하기 때문에 발생하는 문제입니다.

Windows의 기본 편집기인 메모장(notepad.exe), Scintella 기반의 Notepad++SciTE 등은 물론이고 대다수의 text editor들이 latin-1(iso-8859-1, ASCII 코드 기반의 서유럽어 표현을 위한 문자셋을 정의) 인코딩을 시스템 기본 인코딩과 구별하지 않거나, 또는 구별해준다고 해도 적절히 판별하지 못하기 때문에 한글 Windows 환경에서 latin-1 인코딩으로 작성된 파일을 읽어오면 일부 문자가 ?로 보이는 문제를 겪게 됩니다. (대표적으로 ©, 16진 코드값은 A9)

Notepad++과 몇몇 text editor의 경우는 메뉴에서 파일의 인코딩을 강제 지정해줄 수 있지만, 인코딩이 제대로 판별되지 않았음을 알려주지 않기 때문에 사용자가 주의 깊게 관찰하지 않으면 놓치기 십상이지요.

굳이 위와 같은 특수한 사례를 들지 않는다고 하더라도 이미 Unicode(특히, UTF-8)는 개발 프로젝트의 국제화 및 현지화(Internationalization and localization)와 관련하여 다국어를 지원하는 데 꼭 필요한 인코딩으로 확실하게 자리잡고 있고, 기존에 사용되고 있던 다양한 인코딩의 데이터를 적절히 판별하여 Unicode로 변환하는 것은 매우 중요한 일이 되었습니다. 그리고, 이러한 작업은 전 세계에서 Unicode 하나만 사용하는 날이 올 때까지는 결코 피해갈 수 없는 일이기도 합니다.

그렇다면 Emacs에서는?

Emacs에서는 기본적으로 BOM(byte-order mark)을 가지고 있는 Unicode(UTF-16, UTF-8) 인코딩 정도만 적절히 판단해줍니다. 그래서, EmEditor를 볼 때마다 항상 부러웠던 것이 대부분의 character encoding(문자 인코딩)을 외부 라이브러리나 도구의 도움 없이 에디터 자체적으로 깔끔하게 지원한다는 점이었습니다. 특히 BOM이 없는 Unicode를 포함한 다양한 인코딩에 대한 자동 판별 능력은 타의 추종을 불허할 만큼 탁월하다고 할 수 있지요. 그래서 간혹 파일의 인코딩이 애매한 경우(위에서 언급했던 것처럼 latin-1 인코딩이 사용됐다고 짐작되는 경우 또는 BOM없이 저장된 UTF-16 인코딩 파일의 경우 등)에는 EmEditor Freeware Edition을 사용해서 확인해보곤 했습니다.

그런데, EmEditor 없이도 필요한 만큼 유용하게 사용할 수 있는 문자 인코딩 자동 판별 모듈을 발견하게 되면서 더 이상 EmEditor를 부러워하지 않아도 되게 되었습니다. '필요한 만큼 유용하게'라는 단서를 단 이유는, 발견한 그 자동 판별 모듈이 세상 모든 인코딩을 완벽하게 판별해주지는 못하지만 한글과 영문을 주로 사용하는 사람이 만날 수 있는 대부분의 인코딩은 무리 없이 잘 판별해주기 때문입니다.

그 문자 인코딩 자동 판별 모듈의 이름은 Unicad입니다. 자세한 소개를 하기 전에 우선 Emacs가 파일의 인코딩을 판별하는 방법에 대해 간단하게 살펴보고 넘어가겠습니다.

Emacs의 파일 인코딩 판별 방법

Emacs에는 파일의 인코딩을 판별하는 데 사용되는 find-auto-coding 함수가 있어서 파일을 읽어올 때 이 함수를 통해 파일의 인코딩을 판별하게 됩니다. 실제로는 그 과정이 좀 더 복잡하겠지만, 핵심이 되는 부분만 간추려보면 대략 다음과 같습니다.

auto-coding-alist
      |
      V
auto-coding-regexp-alist
      |
      V
'coding:' 태그 (파일 내용 중)
      |
      V
auto-coding-functions

auto-coding-alist

파일명 규칙인코딩 쌍으로 구성된 cons의 list를 저장하는 변수입니다. 파일의 인코딩을 확인하기 위해 가장 먼저 적용하는 방법으로, 파일명이 규칙과 일치하는 항목이 있을 경우 해당하는 인코딩을 선택하고 일치하는 항목이 없으면 다음 판별 과정으로 넘어갑니다.

제가 사용 중인 Emacs에서 변수값은 다음과 같았습니다. 주로 파일의 확장자와 관련된 내용이 대부분입니다.

(("\\.\\(arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\|rar\\|7z\\|ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|7Z\\)\\'" . no-conversion-multibyte)
 ("\\.\\(exe\\|EXE\\)\\'" . no-conversion)
 ("\\.\\(sx[dmicw]\\|odt\\|tar\\|tgz\\)\\'" . no-conversion)
 ("\\.\\(gz\\|Z\\|bz\\|bz2\\|xz\\|gpg\\)\\'" . no-conversion)
 ("\\.\\(jpe?g\\|png\\|gif\\|tiff?\\|p[bpgn]m\\)\\'" . no-conversion)
 ("\\.pdf\\'" . no-conversion)
 ("/#[^/]+#\\'" . emacs-mule))

auto-coding-regexp-alist

파일 시작 바이트 패턴인코딩 쌍으로 구성된 cons의 list를 저장하는 변수입니다. 파일 첫 n 개의 바이트와 일치하는 패턴이 있으면 해당하는 인코딩을 선택하고 일치하는 것이 없으면 다음 판별 과정으로 넘어갑니다.

제가 사용 중인 Emacs에서 변수값은 다음과 같았습니다. Unicode의 BOM과 몇몇 특정 바이너리 형식 파일에 대한 내용을 포함하고 있습니다.

(("\\`BABYL OPTIONS:[   ]*-\\*-[        ]*rmail[        ]*-\\*-" . no-conversion)
 ("\\`\376\377" . utf-16be-with-signature)
 ("\\`\377\376" . utf-16le-with-signature)
 ("\\`\357\273\277" . utf-8-with-signature)
 ("\\`;ELC^T^@^@^@" . emacs-mule))

'coding: ' 태그

파일의 첫 두 줄 안에서 특정 형식의 태그를 찾아 인코딩을 판별하는 방법으로, 태그의 형식은 아래와 같습니다.

-*- ... coding: CODING-SYSTEM; ... -*-

예를 들어, C 소스 파일에 인코딩이 UTF-8임을 명시하고자 한다면 다음과 같이 추가해주면 됩니다.

/* -*- coding: utf-8 -*- */

앞선 다른 방법들과 마찬가지로, 인코딩 지정 태그를 발견하지 못하여 인코딩 판별에 실패했을 경우 다음 판별 과정으로 넘어갑니다.

auto-coding-functions

인코딩 판별 함수의 list를 저장하는 변수입니다. 파일 내용의 전부 또는 일부(Emacs 도움말에 따르면 파일의 첫 1 KB와 끝 3 KB 정도를 포함해야 한다고 되어 있습니다.)에 대해 각 판별 함수를 순서대로 호출하면서 알맞은 인코딩이 발견될 경우 그 인코딩을 선택합니다. 조금 있다가 설명할 Unicad는 이 변수에 고유 판별 함수를 추가하게 됩니다. 그러므로, 위 세 단계에서 적절한 인코딩을 판별해내지 못했을 경우에만 효과가 있는 것이죠.

제가 사용 중인 Emacs에서 변수값은 다음과 같았습니다.

(sgml-xml-auto-coding-function sgml-html-meta-auto-coding-function)

Unicad

이제 본론으로 들어가서, UnicadUniversal Characterset Auto Detector의 줄임말이고, Mozilla Universal Charset Detector를 Emacs 모듈로 이식(porting)한 것이라고 합니다. 이 모듈은 Google Code에서 호스팅되고 있고, EmacsWiki에 별도로 설명하는 페이지를 가지고 있습니다.

Project Link: http://code.google.com/p/unicad/

EmacsWiki Link: http://www.emacswiki.org/cgi-bin/emacs/Unicad

사용 방법은 무척 간단합니다. unicad.el 파일을 다운로드 한 다음 load-path에 경로를 추가하거나 site-lisp(또는 ~/.emacs.d) 폴더에 복사해넣은 뒤 .emacs 파일에 간단하게 한 줄 추가해주면 됩니다.

(require 'unicad)

그리고, 속도 향상을 위해서 byte-compile 해주는 것을 권장합니다. (M-x byte-compile-file RET <path_of_unicad>\unicad.el)

이렇게 하면 모듈이 로드될 때 auto-coding-functions 변수에 unicad-universal-charset-detect 함수가 자동으로 추가되기 때문에 이후 파일을 읽어올 때마다 그 파일의 인코딩을 적절하게 판별해줍니다. Unicad 모듈을 로드한 다음 auto-coding-functions 변수값을 살펴보면 아래와 같이 함수가 추가되어 있는 것을 확인할 수 있습니다.

(unicad-universal-charset-detect sgml-xml-auto-coding-function sgml-html-meta-auto-coding-function)

제가 테스트 해보니 적어도 Unicode(UCS2 with BOM, UTF-8 with/without BOM)와 euc-kr(cp949), latin-1(iso-8859-1) 등은 문제 없이 잘 판별해주었습니다. 이 정도면 필요한 만큼 충분하지요.

단점이라면, 파일을 읽어올 때 인코딩을 판별하기 위한 함수를 한번 더 거치는 것이기 때문에 그 만큼 파일을 여는 속도가 느려진다는 것인데, 거슬릴 정도로 느껴지는 수준은 아니라서 문자 인코딩 자동 판별이라는 이점을 고려할 때 충분히 감수할 수 있다고 봅니다.

Tip - Vim에서 파일 인코딩 자동 판별하기

Vim에서도 필요한 만큼 유용하게 사용할 수 있는 문자 인코딩 자동 판별 방법이 있습니다. 특별히 추가 모듈이나 외부 도구를 사용할 필요 없이 .vimrc(또는 Windows 환경에서 _vimrc) 파일에 간단하게 아래 설정을 추가해주면 됩니다.

" 멀티 바이트를 지원하면
if has("multi_byte")
  " Vim 편집 시 내부 인코딩
  set encoding=utf-8
  " 터미널 인코딩
  set termencoding=utf-8
  " 새로 작성하는 파일 기본 인코딩
  setglobal fileencoding=utf-8
  " 읽어 오는 파일의 인코딩을 판별하는 순서
  set fileencodings=ucs-bom,utf-8,cp949,latin1
endif

위와 같이 설정하면, 파일 편집을 위해 Vim 내부적으로는 UTF-8 인코딩을 사용하고, 읽어오는 파일의 인코딩을 판별하기 위해 ucs-bom(Universal Character Set with byte-order mark), utf-8, euc-kr(cp949), latin1 순으로 적용해봅니다. 각 인코딩을 적용해 파일의 내용을 디코딩할 때 해당 문자셋 테이블을 벗어나는 값이 발견되면 다음 인코딩을 시도하는 방식이기 때문에, 실제 한글 Windows 환경에서 꽤 자주 문제가 되는 latin-1 인코딩 파일도 문제 없이 잘 판별해줍니다.

마치면서...

Text editor는 프로그래머 또는 개발자라는 타이틀을 달고 살아가는 전쟁터에서 가장 기본이 되는 무기입니다. 좋은 무기를 가지는 것이 첫 번째로 중요한 일이라면 그 무기를 충분히 활용할 수 있도록 익숙해지는 것 또한 그 못지 않게 중요한 일입니다. 비록 하나의 무기로 모든 전투에서 승리할 수는 없겠지만, 잘 찾아보면 무기의 성능을 한층 향상시켜줄 수 있는 많은 비법들이 있습니다. Emacs를 위한 문자 인코딩 자동 판별 모듈인 Unicad가 바로 그런 것들 중 하나이겠지요. 지금은 멋진 물건의 발견에 기뻐하는 것으로 만족해야 하지만 좀 더 노력한 뒤에는 멋진 물건을 스스로 만들 수 있게 되리라 기대해봅니다.

2010년 12월 24일 금요일

XCALC 소스 공개되었네요.

꽤 오래 전에 XCALC라는 RPN 방식 계산기에 대해 글을 쓴 적이 있습니다. 한번 손에 익은 도구라서 그런지 간단히 계산할 일이 있으면 아직도 Windows의 기본 계산기 대신 XCALC를 사용하고 있지요. Emacs에 내장된 계산기(M-x calc)도 RPN 방식이라 더 그런가봅니다.

그런데, 오늘 오랜만에 XCALC 업데이트 확인 차 홈페이지 들렀다가 소스가 공개됐다는 사실을 알게 되었습니다. 특정 라이센스에 제한되지 않고(심지어 GNU 스타일에도) 어떤 방식으로든 원하는 대로 사용할 수 있다고 하니까 평소 계산기 구현에 관심이 있었던 분이라면 다운로드해서 살펴보는 것도 좋을 것 같습니다.

소스는 아마 요즘의 Microsoft Visual C++로도 빌드가 가능하겠지만 리소스를 변경하려면 적절한 수정이 필요할 것이라고 합니다. (저는 이 글을 쓰고 있는 시점에서 아직 빌드해보지 않았습니다.) XCALC를 개발한 분은 Borland C++ Compiler를 사용했다고 하는데, XCALC 홈페이지에서도 직접 다운로드할 수 있습니다.

2010년 12월 17일 금요일

Blogger 사용자 정의 도메인으로 바꾼 후 해야 할 일

얼마 전에 국내 모 초고속 인터넷 망 사업자에서 구글의 여러 서비스를 호스팅하는 서버 IP(문제 발생 당시 74.125.71.132였고, 이 글을 쓰고 있는 현재까지 동일)를 막아버리는 바람에 며칠 동안 Blogger 기반 블로그와 가젯, 그리고 크롬(Chrome) 브라우저 확장 기능들을 사용하지 못하는 일이 발생했습니다. 덕분에 아주 오래 전부터 마음 먹고 있었지만 엄두가 나질 않아서 미루고 있었던 블로그 도메인 네임 변경을 결국 이번에 하게 되었지요.

블로그 도메인 변경과 IP 차단이 무슨 관계가 있나?

blogspot.com 하위 도메인을 사용하는 경우와 사용자 정의 도메인(Custom Domain)을 사용하는 경우 연결되는 IP가 서로 다르기 때문입니다. 사용자 정의 도메인으로 변경하게 되면 Virtual Hosting을 위해서 네임 서버(Domain Name Server)에다 해당 도메인에 대한 ghs.google.com 별명(CNAME) 레코드를 추가해야 합니다. 이 글을 작성하는 시점에서 ghs.google.com의 IP는 72.14.203.121입니다. 그런데, blogspot.com 하위 도메인을 사용하는 경우에는 blogspot.l.google.com(이글을 작성하는 시점에서 IP 74.125.71.132) 주소로 연결됩니다. 즉, 또 다시 blogspot.com 하위 도메인으로 가는 IP가 차단된다고 하더라도 사용자 정의 도메인을 사용하는 블로그는 문제 없이 접속된다는 것을 의미합니다.

물론, ghs.google.com 사이트 IP가 차단될 가능성도 배제할 수는 없지만, 확률 상 blogspot.com 하위 도메인의 IP가 차단될 가능성이 더 크다고 봅니다. blospot.com 하위 도메인으로 워낙 다양하고 많은 블로그들이 호스팅 되고 있어서 국내법 상 민감한 주제나 유해 컨텐츠 등이 발견되는 경우에 또 다시 차단하려고 들 수도 있기 때문이죠.

어떻게 사용자 정의 도메인으로 변경하나?

Blogger 도움말에 사용자 정의 도메인으로 변경하는 방법에 대해 잘 설명하고 있으므로 여기서 자세한 설명은 생략합니다.

도메인 변경 후 무엇을 해야 하나?

이미 자신의 도메인 네임을 소유하고 있다면 사용자 정의 도메인으로 변경하는 절차는 그리 복잡한 것이 아니기 때문에 마음만 먹으면 단 몇 분만에 처리하는 것도 가능합니다.(블로그에 사용하기 위해 새로 등록하거나 추가한 도메인 네임 정보가 전파되는 데까지는 시간이 다소 걸릴 수 있기 때문에 정상적으로 동작하려면 약간의 시간이 더 필요합니다.) 문제는 변경하고 난 뒤에 신경써서 처리해야 할 일들이 제법 많다는 것이죠. 아래는 제가 이번에 사용자 정의 도메인으로 변경하면서 처리했던 일들을 기준으로 정리해본 것입니다.

검색 엔진에 블로그 새 URL 등록

기존에 운영하던 블로그의 도메인 네임이 변경되면 더 이상 검색 엔진에서 내 글들이 검색되지 않게 됩니다. 그 정도에서 그치는 것이 아니라 다른 사이트에 남겨져 있던 모든 링크가 다 끊어지게 됩니다. 한참 운영 중인 블로그의 도메인 네임을 변경하기 겁나는 가장 큰 이유인 것이죠. 다행히도 Blogger에서는 blogspot.com 형식의 기존 주소에 대해 새 주소로 redirection 처리를 완벽하게 해주고 있기 때문에 갑작스레 내 블로그 방문자가 0이 되는 일은 발생하지 않습니다.(이 redirection 서비스가 없었다면 아마 사용자 정의 도메인으로 변경하는 일은 절대 없었을 겁니다.) 그러나, 그렇다고 앞으로 발행될 새 글에도 계속 기존 주소를 그대로 사용할 수는 없는 노릇이기 때문에 결국 검색 엔진에 새로 변경된 주소를 등록해주어야 합니다.

  • 구글(Google)
    가장 간단하게는 그저 URL을 추가하기만 하면 됩니다.

    http://www.google.com/addurl

    또는 구글 웹마스터 도구에서 사이트를 추가하는 방법도 있습니다. 더 상세한 설정을 위해서는 웹마스터 도구가 낫지만, Google 계정이 필요합니다.

    https://www.google.com/webmasters/tools

  • 네이버(Naver)
    검색등록 페이지로 가서 블로그 주소와 간단한 정보 몇 가지만 입력하면 됩니다.

    https://submit.naver.com

  • 다음(Daum)
    역시 네이버와 거의 유사합니다. 검색등록 페이지에서 블로그 주소와 간단한 정보 몇 가지만 입력하면 됩니다.

    https://register.search.daum.net

  • 빙(Bing)
    Microsoft의 검색 엔진 Bing에서는 네이버나 다음과 같이 간편하게 등록할 수 있는 방법을 아직 찾지 못했습니다. 대신, Bing Webmaster Tools에서 블로그 사이트 주소를 등록했습니다. Windows Live 계정이 필요합니다.

    http://www.bing.com/toolbox/webmasters

    한 가지 주의할 점으로, Bing은 국내에서 다음과 검색 제휴가 되어 있기 때문에 다음 쪽으로 redirection 됩니다. 이럴 때는 우측 상단에 있는 Worldwide Bing 링크를 클릭하여 미국 - 영어를 선택해주면 됩니다.

  • 야후(Yahoo) & 네이트(Nate)
    이 두 곳에는 아직 등록을 하지 않았습니다. 검색등록을 하려고 하니 주소와 전화번호 같은 개인정보를 요구하더군요. 요즘처럼 세상이 뒤숭숭할 때는 제법 믿을 만해 보이는 곳이라고 하더라도 개인정보를 내주기가 꺼려져서 말입니다. 아무튼 검색등록 페이지는 각각 다음과 같습니다.

    야후: https://kr.suggest.yahoo.com
    네이트: http://add.nate.com

Feed 주소 변경

블로그 사이트의 도메인 네임이 변경되면 Feed URL도 따라서 변경이 됩니다. 기존 구독자를 잃게 되는 것이죠. 저는 이런 상황에 대비하고 더 나은 feed 관련 서비스를 사용하기 위해 예전부터 FeedBurner를 사용해왔습니다. 그리고, Blogger에서는 외부 Feed URL을 명시적으로 지정해줄 수 있어서 구독자가 어떤 Feed URL을 구독하는지에 상관 없이 항상 지정한 Feed URL로 redirection 되도록 강제할 수 있습니다.

FeedBurner의 Feed URL을 외부 Feed URL로 지정하고 싶은 경우 아래와 같이 이동하여 FeedBurner에서 제공하는 Feed URL을 기입하면 됩니다.

대시보드 -> 설정 -> 사이트 피드 -> 게시물 피드 외부 생성 URL

예를 들어, 이 블로그는 http://feeds.feedburner.com/KaisyusNotes 라고 기입되어 있습니다.

결국, 이번에 블로그의 도메인 네임이 변경되면서 Feed URL과 관련하여 수정한 것은 FeedBurner의 Original Feed 주소뿐이었습니다.

메타 블로그 서비스 등록 정보 변경

특별히 메타 블로그 서비스에 가입해두지 않았다면 이 부분은 그냥 건너 뛰어도 상관 없습니다. 이 블로그는 아래 세 가지 서비스에 가입한 상태라 변경된 도메인 네임에 대해 적절한 조치를 취해야 했습니다.

  • 다음 뷰(Daum View)
    접속주소를 변경할 수 있는 방법을 찾지 못했습니다. 문의해볼까 하다가 답변을 받는 데까지 꽤 오래 걸릴 것 같아서 포기하고 그냥 기존에 등록된 블로그 정보를 삭제한 다음 새로 등록했습니다. 덕분에 예전에 발행했던 글들의 정보가 모두 산화되고 말았지요. :-(
    이 글을 쓰고 나서 좀 있다가 다음 뷰를 천천히 둘러보았더니 블로그 주소가 변경된 경우에 대해 수정 요청하는 방법이 FAQ에 나와 있더군요. 쩝... -- 2010-12-21
  • 믹시(Mixsh)
    친절하게도 설정에서 접속주소 변경에 대한 항목을 제공하고 있었습니다.

    마이믹시 -> 나의 블로그 -> 블로그 관리 -> 정보 수정 -> 접속주소 변경요청

    그러나 자동으로 즉시 처리되는 것은 아니고, 신청을 하면 운영자 확인 후 적용해주는 방식입니다.

  • 올포스트(Olpost)
    다음 뷰와 마찬가지로 변경된 도메인을 적용할 수 있는 방법이 제공되지 않아서, 고객지원 게시판에 직접 문의를 했습니다. 그러자 다음 날 운영자님이 친절하게 답변을 주시고 바로 변경 처리해주시더군요. 아직까지는 접속주소 변경에 대해 자동으로 처리해주는 기능을 제공하지 않고 운영팀에 요청하면 확인 후 처리해주는 방식이라고 합니다.

DISQUS 댓글 서비스 마이그레이션

Blogger는 댓글 시스템이 비교적 빈약한 편입니다. 근래에 대시보드에서 댓글을 관리할 수 있는 항목이 생기긴 했지만, 댓글 형태는 크게 달라지지 않아서 아직도 부족함을 많이 느낍니다. 그래서, 이 블로그에는 기본 댓글 시스템 대신 DISQUS를 장착해서 사용하고 있습니다.

기본 댓글 시스템을 그대로 사용하고 있었다면 블로그의 도메인 네임이 변경된다고 하더라도 별도로 처리해주어야 할 일이 없었겠지만, DISQUS는 블로그 글의 고유주소(Permalink)를 기반으로 댓글을 관리하기 때문에 변경된 블로그 주소에 맞게 적절히 마이그레이션 해주어야 했습니다.

DISQUS -> Admin -> Tools -> Migrate Threads -> Domain Migration Wizard

댓글 마이그레이션은 단계적으로 진행되면서, 처음에 현재 댓글이 등록된 도메인들을 보여주는데 그 중에서 변경할 필요가 있는 도메인을 선택한 다음 바뀐 도메인을 입력해주면 됩니다. 그리곤 마이그레이션이 완료될 때까지 기다리기만 하면 됩니다.

검색 가젯 변경

현재 Blogger에서는 구글 검색 엔진에 기반한 검색 가젯을 제공하고 있습니다. 그러나, 도메인 네임을 변경하고 나면 변경된 주소에 대응하는 정보는 아직 하나도 수집되지 않았기 때문에 검색 결과가 0입니다. 사실, 이 블로그까지 방문자가 찾아오는 것도 흔한 일은 아니지만, 찾아와서 이 블로그 우측 열 또는 상단 Navbar에 장착된 검색 가젯을 이용해 검색까지 할 확률은 매우 낮습니다. 그리고, 좀 참고 기다리면 언젠가는 구글 검색 봇이 변경된 주소에 대한 내용도 수집해줄 겁니다. 그러나, 뭔가 불안합니다. 검색이 제대로 되어야 할 것만 같은 압박이 심장을 짓누릅니다.

이 상황에서 제가 대안으로 선택한 것이 Google 맞춤 검색이었습니다. 구글 맞춤 검색은 설정을 하기에 따라서 다양하게 활용이 가능하지만, 기본적으로 내 블로그와 개인 홈페이지만을 위한 전용 검색 엔진을 만들 수 있습니다. 검색할 사이트를 지정하고 디자인을 선택한 다음 검색 가젯 코드를 가져와 블로그의 적절한 위치에 추가하기만 하면 되는 것이죠.

저는 제가 운영하는 사이트들을 대상으로 이미 만들어 둔 맞춤 검색 엔진이 있었습니다. 그래서, 검색 가젯 코드만 가져와서 블로그에 장착했습니다. 이때 검색할 사이트 목록에 예전 블로그 주소를 그대로 두고 새 주소를 추가하는 것이 핵심입니다. 그러면 아직 새 주소에 대한 내용이 검색 엔진에 수집되지 않았다 하더라도 예전 주소에 대한 검색 결과가 나타날 것이고 사용자가 그 주소를 클릭하면 새 주소로 redirection 될 것이기 때문입니다.

그외에 이 블로그뿐만 아니라 관련이 있는 다른 사이트들의 검색 결과도 함께 볼 수 있다는 점도 장점으로 꼽을 수 있습니다.

웹로그 분석 서비스에서 URL 정보 변경

블로그를 운영하시는 분이라면 블로그 방문자에 대한 상세한 통계를 위해 웹로그 분석/통계 서비스를 적어도 하나 쯤은 사용할 겁니다. 요즘은 블로그 서비스 자체 통계도 대부분 제공하고 있지만, 더 자세한 분석 결과를 원한다면 별도의 웹로그 분석/통계 서비스를 이용하는 편이 더 낫다고 봅니다. 이 블로그도 그런 이유로 아래 두 가지 서비스를 이용하고 있습니다.

이 서비스들은 모두 설정에서 기존에 등록된 사이트의 주소를 변경된 주소로 고쳐주기만 하면 되었습니다.

Counter 서비스 URL 등록 정보 변경

블로그 서비스에 따라서 카운터를 기본 제공하는 곳도 있지만, Blogger는 아직 제공하지 않습니다.(가젯 중에 블로그 통계라는 것이 있지만, Page View 정도만 보여주는 수준이라 일반적인 카운터 서비스와는 좀 다릅니다.) 그래서, StatCounterSiteMeter 같은 외부 카운터 서비스를 많이들 이용합니다. 저는 StatCounter(SiteMeter를 사용해오다 페이지 로딩이 많이 느려지는 원인 중 하나인 것을 발견하고는 최근에 StatCounter로 변경했습니다.)를 사용하고 있는데, 변경된 도메인 네임에 따라서 사이트 등록 정보를 변경해주었습니다. 그뿐입니다. ;-)

그외 예전 블로그 주소가 사용된 곳을 찾아 새 주소로 변경

기존 블로그로 이어지는 링크는 한두 개가 아니고 외부에서 링크를 걸어둔 것은 내가 직접 수정할 수도 없기 때문에 일일이 다 찾아서 변경하는 것은 거의 불가능합니다. 그러므로, 본인 소유의 다른 사이트에 걸린 링크, 이메일(email) 서명(signature)에 기록된 링크, 각종 소셜 네트워크 사이트나 포털 사이트 등의 개인 프로필에 등록된 블로그 주소 정도만 찾아서 변경해주면 되겠지요. 사실, Blogger의 기존 주소 redirection 기능이 있어서 딱히 급할 것은 없으므로 눈에 띄는 대로 하나씩 차차 변경해가면 됩니다.

마치며...

검색 엔진에 새 블로그 주소 등록 신청을 하고 네이버와 다음에선 각각 등록 처리되었다는 답 메일을 받았습니다. 그러나, 웹크롤러(web-crawler)가 변경된 주소의 내용을 수집하는 데까지는 아직 더 많은 시간이 걸릴 모양입니다. 검색을 해보면 여전히 예전 주소로 된 검색 결과들이 주를 이루고, 간혹 변경된 주소로 된 결과가 한두 개 끼어 있는 정도입니다.

밀린 일 처리하듯 급하게 블로그 도메인을 변경한 탓인지 크게 바뀐 것도 없으면서 아직도 정리되지 않은 듯 어수선합니다. 그래도 좋은 경험이 되었던 것만은 확실합니다. 다만, 이제 더 이상은 블로그 주소를 변경하는 일이 없었으면 좋겠네요~ ;-)

2010년 12월 8일 수요일

OpenSSL 1.0.0c & 0.9.8q Win32 Binary

OpenSSL 1.0.0c 버전과 0.9.8q 버전이 함께 릴리즈 되었습니다.

여기서 제공하는 binary는 MS Visual C++ 2008 Express Edition으로 빌드되었기 때문에 MS VC++ Runtime 2008 SP1이 필요합니다. 현재 시스템에 아직 설치되어 있지 않다면 아래 링크에서 다운로드한 후 설치하시면 됩니다.
LINK: Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)

더 최신 버전의 바이너리가 릴리즈 되었습니다.
아래 링크를 확인하세요.
LINK: Kaisyu's Notes: OpenSSL

OpenSSL 1.0.0c 버전 Win32 binary는 아래에서 받으세요.

LINK: openssl-1.0.0c-win32-msvc90.zip (from DropBox)
LINK: openssl-1.0.0c-win32-msvc90.zip (from MediaFire)
LINK: openssl-1.0.0c-win32-msvc90.zip (from SkyDrive)

OpenSSL 0.9.8q 버전 Win32 binary는 아래에서 받으세요.
LINK: openssl-0.9.8q-win32-msvc90.zip (from DropBox)
LINK: openssl-0.9.8q-win32-msvc90.zip (from MediaFire)
LINK: openssl-0.9.8q-win32-msvc90.zip (from SkyDrive)
Binary build에 사용된 환경은 다음과 같습니다.
Microsoft Visual C++ Express Edition 2008 SP1 - http://www.microsoft.com/express/Downloads/#2008-Visual-CPP
NASM - http://www.nasm.us
ActivePerl - http://www.activestate.com/activeperl/


참고로, 제가 빌드해서 배포하는 것 외에 OpenSSL 공식 홈페이지에 게시된 binary 배포본의 링크는 아래에서 확인하실 수 있습니다.
LINK: http://www.openssl.org/related/binaries.html