tag:blogger.com,1999:blog-2696023503470034942024-03-14T04:24:38.971+09:00Kaisyu's Notes내가 빛날 수 있는 곳을 찾아서...Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.comBlogger156125tag:blogger.com,1999:blog-269602350347003494.post-92131167740605729582011-12-19T01:50:00.000+09:002011-12-19T01:50:43.310+09:00Pidgin 2.10.1 네이트온 플러그인 (파일 전송 + 커스텀 이모티콘)<b>Pidgin 2.10.1</b> 버전이 릴리즈 되어 이 버전에 맞추어 빌드한 네이트온 플러그인을 배포합니다.<br />
<br />
다운로드 링크는 아래와 같습니다.<br />
<blockquote>
<b>MediaFire</b>: <span class="Apple-style-span" style="color: #3d85c6;"><a href="http://www.mediafire.com/?kt1d7bllvzm8n5b">pidgin-nateon-2.10.1-svn147+mc+fx+ce.exe</a></span><br />
<b>Dropbox</b>: <span class="Apple-style-span" style="color: #3d85c6;"><a href="http://dl.dropbox.com/u/7871204/pidgin-nateon/pidgin-nateon-2.10.1-svn147%2Bmc%2Bfx%2Bce.exe">pidgin-nateon-2.10.1-svn147+mc+fx+ce.exe</a></span><br />
<b>SkyDrive</b>: <a href="https://skydrive.live.com/redir.aspx?cid=ab3d364d1e6a27e7&resid=AB3D364D1E6A27E7!360&parid=AB3D364D1E6A27E7!270"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.10.1-svn147+mc+fx+ce.exe</span></a></blockquote>
혹은 최신 버전을 확인하기 위해 아래 링크를 따라가셔도 됩니다.
<br />
<blockquote>
<b>LINK:</b> <a href="http://blog.kaisyu.com/search/label/NateOn?max-results=3">Kaisyu's Notes: Pidgin NateOn</a></blockquote>
빌드에 사용된 플러그인 소스는 아래 주소에 열람하거나 다운로드할 수 있습니다.
<br />
<blockquote>
<b>LINK:</b> <a href="https://github.com/kaisyu/pidgin-nateon">https://github.com/kaisyu/pidgin-nateon</a></blockquote>
Pidgin에서 네이트온 플러그인을 사용하는 자세한 방법은 아래 글을 참고해주세요.
<br />
<blockquote class="notice">
<b>LINK</b>: <a href="http://kaisyu.blogspot.com/2010/06/pidgin-windows.html"><span class="Apple-style-span" style="color: #3d85c6;">Pidgin 네이트온 플러그인 (Windows) 및 활용 팁</span></a></blockquote>
이번 버전에서는 가끔 Pidgin이 crash되는 문제를 수정했습니다. (<a href="http://blog.kaisyu.com/2011/08/pidgin-2100.html#comment-380278343" target="_blank">mog422</a> 님께서 알려주신 문제 segmentation fault 오류 수정)<br />
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com4tag:blogger.com,1999:blog-269602350347003494.post-73407156571528965322011-08-22T00:23:00.000+09:002011-08-22T00:23:24.963+09:00Pidgin 2.10.0 네이트온 플러그인 (파일 전송 + 커스텀 이모티콘)<b>Pidgin 2.10.0</b> 버전이 릴리즈 되어 이 버전에 맞추어 빌드한 네이트온 플러그인을 배포합니다.<br />
<br />
다운로드 링크는 아래와 같습니다.<br />
<blockquote>
<b>MediaFire</b>: <a href="http://www.mediafire.com/file/w5v39q7pymo399n/pidgin-nateon-2.10.0-svn147+mc+fx+ce.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.10.0-svn147+mc+fx+ce-2.exe</span></a>
<b>Dropbox</b>: <a href="http://dl.dropbox.com/u/7871204/pidgin-nateon/pidgin-nateon-2.10.0-svn147%2Bmc%2Bfx%2Bce.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.10.0-svn147+mc+fx+ce-2.exe</span></a>
<b>SkyDrive</b>: <a href="https://skydrive.live.com/?cid=ab3d364d1e6a27e7&sc=documents&uc=1&id=AB3D364D1E6A27E7%21270#"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.10.0-svn147+mc+fx+ce-2.exe</span></a></blockquote>
혹은 최신 버전을 확인하기 위해 아래 링크를 따라가셔도 됩니다.
<br />
<blockquote>
<b>LINK:</b> <a href="http://blog.kaisyu.com/search/label/NateOn?max-results=3">Kaisyu's Notes: Pidgin NateOn</a></blockquote>
빌드에 사용된 플러그인 소스는 아래 주소에 열람하거나 다운로드할 수 있습니다.
<br />
<blockquote>
<b>LINK:</b> <a href="https://github.com/kaisyu/pidgin-nateon">https://github.com/kaisyu/pidgin-nateon</a></blockquote>
Pidgin에서 네이트온 플러그인을 사용하는 자세한 방법은 아래 글을 참고해주세요.
<br />
<blockquote class="notice">
<b>LINK</b>: <a href="http://kaisyu.blogspot.com/2010/06/pidgin-windows.html"><span class="Apple-style-span" style="color: #3d85c6;">Pidgin 네이트온 플러그인 (Windows) 및 활용 팁</span></a></blockquote>
이번 버전 역시 특별히 달라진 점은 없고 단지 Pidgin 2.10.0 버전에 맞추어 빌드했습니다.
<div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com26tag:blogger.com,1999:blog-269602350347003494.post-350049961027781242011-08-22T00:12:00.001+09:002011-08-22T00:12:42.128+09:00SBCL 1.0.51 Win32 Binary InstallerOpen-source Common Lisp 구현체인 <a href="http://sbcl.sourceforge.net/" linkindex="49" set="yes"><span style="font-weight: bold;">SBCL</span></a> 1.0.51 버전의 Win32 binary입니다.<br />
<br />
<a href="http://sbcl-internals.cliki.net/" linkindex="51" set="yes"><span style="font-weight: bold;">SBCL Internals</span></a> 페이지에 나와 있는 <a href="http://sbcl-internals.cliki.net/Build%20on%20Windows" linkindex="52" set="yes"><span style="font-weight: bold;">Windows binary build 방법</span></a>을 참고했습니다.<br />
<br />
Binary는 다음 링크에서 다운로드 하실 수 있습니다.<br />
<br />
<blockquote>
<b>LINK</b>: <a href="http://sbcl-for-windows.googlecode.com/files/sbcl-1.0.51-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.51 Win32 Binary</span></a> (<b>Google Code</b>)<br />
<b>Mirror 1</b>: <a href="http://www.mediafire.com/file/bub5lv7ac94j77d/sbcl-1.0.51-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.51 Win32 Binary</span></a> (<b>MediaFire</b>)<br />
<b>Mirror 2</b>: <a href="http://dl.dropbox.com/u/7871204/SBCL/sbcl-1.0.51-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.51 Win32 Binary</span></a> (<b>DropBox</b>)<br />
<b>Mirror 3</b>: <a href="https://skydrive.live.com/?cid=ab3d364d1e6a27e7&sc=documents&uc=1&id=AB3D364D1E6A27E7%21160#"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.51 Win32 Binary</span></a> (<b>SkyDrive</b>)</blockquote>
이번 버전에는 모든 contrib 모듈이 포함되었습니다.<br />
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-15729494474318125802011-07-13T00:09:00.001+09:002011-07-13T00:09:24.597+09:00SBCL 1.0.50 Win32 Binary InstallerOpen-source Common Lisp 구현체인 <a href="http://sbcl.sourceforge.net/" linkindex="49" set="yes"><span style="font-weight: bold;">SBCL</span></a> 1.0.50 버전의 Win32 binary입니다.<br />
<br />
<a href="http://sbcl-internals.cliki.net/" linkindex="51" set="yes"><span style="font-weight: bold;">SBCL Internals</span></a> 페이지에 나와 있는 <a href="http://sbcl-internals.cliki.net/Build%20on%20Windows" linkindex="52" set="yes"><span style="font-weight: bold;">Windows binary build 방법</span></a>을 참고했습니다.<br />
<br />
Binary는 다음 링크에서 다운로드 하실 수 있습니다.<br />
<br />
<blockquote>
<b>LINK</b>: <a href="http://sbcl-for-windows.googlecode.com/files/sbcl-1.0.50-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.50 Win32 Binary</span></a> (<b>Google Code</b>)<br />
<b>Mirror 1</b>: <a href="http://www.mediafire.com/file/m14245qt43gpftt/sbcl-1.0.50-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.50 Win32 Binary</span></a> (<b>MediaFire</b>)<br />
<b>Mirror 2</b>: <a href="http://dl.dropbox.com/u/7871204/SBCL/sbcl-1.0.50-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.50 Win32 Binary</span></a> (<b>DropBox</b>)<br />
<b>Mirror 3</b>: <a href="https://skydrive.live.com/?cid=ab3d364d1e6a27e7&sc=documents&uc=1&id=AB3D364D1E6A27E7%21160#"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.50 Win32 Binary</span></a> (<b>SkyDrive</b>)</blockquote>
<br />
아직 SBCL의 모든 부분이 Windows 환경을 완벽하게 지원하지는 못하기 때문에 몇몇 contrib 모듈은 포함이 되지 않았습니다. 이 버전에서 포함되지 않은 모듈은 아래와 같습니다.<br />
<br />
<b>sb-simple-streams</b><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-64203902419934336762011-06-13T22:34:00.001+09:002011-06-24T23:19:38.958+09:00Pidgin 2.8.0 네이트온 플러그인 (파일 전송 + 커스텀 이모티콘)<b>Pidgin 2.9.0</b> 버전이 릴리즈 되었지만 네이트온 플러그인에 영향을 주는 변경 사항이 없습니다. 그러므로 2.8.0 버전 플러그인을 그대로 사용하시면 됩니다. -- <i><span class="Apple-style-span" style="color: orange;">2011.06.24
</span></i><br />
<br />
<hr />
<br />
<b>Pidgin 2.8.0</b> 버전이 릴리즈 되어 이 버전에 맞추어 빌드한 네이트온 플러그인을 배포합니다. 예전부터 사용해오신 분들은 아마 그 동안 이 플러그인을 위해서 애써주신 많은 분들에 대해 잘 알고 계시겠지만 잘 모르시는 분들도 계실 텐데, <b><a href="http://blog.kaisyu.com/search/label/NateOn">이 링크</a></b>를 따라가시면 그 동안의 역사를 보실 수 있습니다. 궁금한 분들은 한번 쯤 보셔도 좋을 듯 합니다.<br />
<br />
다운로드 링크는 아래와 같습니다.<br />
<blockquote>
<b>MediaFire</b>: <a href="http://www.mediafire.com/file/6za41qjau154aqe/pidgin-nateon-2.8.0-svn147+mc+fx+ce.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.8.0-svn147+mc+fx+ce-2.exe</span></a><br />
<b>Dropbox</b>: <a href="http://dl.dropbox.com/u/7871204/pidgin-nateon/pidgin-nateon-2.8.0-svn147%2Bmc%2Bfx%2Bce.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.8.0-svn147+mc+fx+ce-2.exe</span></a><br />
<b>SkyDrive</b>: <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/Pidgin%20NateOn%20Protocol%20Plugin/pidgin-nateon-2.8.0-svn147%5EMmc%5EMfx%5EMce.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.8.0-svn147+mc+fx+ce-2.exe</span></a></blockquote>
혹은 최신 버전을 확인하기 위해 아래 링크를 따라가셔도 됩니다.<br />
<blockquote>
<b>LINK:</b> <a href="http://blog.kaisyu.com/search/label/NateOn?max-results=3">Kaisyu's Notes: Pidgin NateOn</a></blockquote>
빌드에 사용된 플러그인 소스는 아래 주소에 열람하거나 다운로드할 수 있습니다.<br />
<blockquote>
<b>LINK:</b> <a href="https://github.com/kaisyu/pidgin-nateon">https://github.com/kaisyu/pidgin-nateon</a></blockquote>
<br />
Pidgin에서 네이트온 플러그인을 사용하는 자세한 방법은 아래 글을 참고해주세요.<br />
<blockquote class="notice">
<b>LINK</b>: <a href="http://kaisyu.blogspot.com/2010/06/pidgin-windows.html"><span class="Apple-style-span" style="color: #3d85c6;">Pidgin 네이트온 플러그인 (Windows) 및 활용 팁</span></a></blockquote>
<br />
이번 버전에서 특별히 달라진 점은 없고 단지 Pidgin 2.8.0 버전에 맞추어 빌드했습니다.<br />
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com4tag:blogger.com,1999:blog-269602350347003494.post-57308917355072237112011-06-06T14:47:00.000+09:002011-06-06T14:47:35.073+09:00SBCL 1.0.49 Win32 Binary InstallerOpen-source Common Lisp 구현체인 <a href="http://sbcl.sourceforge.net/" linkindex="49" set="yes"><span style="font-weight: bold;">SBCL</span></a> 1.0.49 버전의 Win32 binary입니다.<br />
<br />
<a href="http://sbcl-internals.cliki.net/" linkindex="51" set="yes"><span style="font-weight: bold;">SBCL Internals</span></a> 페이지에 나와 있는 <a href="http://sbcl-internals.cliki.net/Build%20on%20Windows" linkindex="52" set="yes"><span style="font-weight: bold;">Windows binary build 방법</span></a>을 참고했습니다.<br />
<br />
Binary는 다음 링크에서 다운로드 하실 수 있습니다.<br />
<br />
<blockquote>
<b>LINK</b>: <a href="http://sbcl-for-windows.googlecode.com/files/sbcl-1.0.49-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.49 Win32 Binary</span></a> (<b>Google Code</b>)<br />
<b>Mirror 1</b>: <a href="http://www.mediafire.com/file/721x16fvwxacani/sbcl-1.0.49-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.49 Win32 Binary</span></a> (<b>MediaFire</b>)<br />
<b>Mirror 2</b>: <a href="http://dl.dropbox.com/u/7871204/SBCL/sbcl-1.0.49-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.49 Win32 Binary</span></a> (<b>DropBox</b>)<br />
<b>Mirror 3</b>: <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/SBCL/sbcl-1.0.49-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.49 Win32 Binary</span></a> (<b>SkyDrive</b>)</blockquote>
<br />
아직 SBCL의 모든 부분이 Windows 환경을 완벽하게 지원하지는 못하기 때문에 몇몇 contrib 모듈은 포함이 되지 않았습니다. 이 버전에서 포함되지 않은 모듈은 아래와 같습니다.<br />
<br />
<b>sb-simple-streams</b><br />
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-70670488885321278152011-05-11T15:51:00.000+09:002011-05-11T15:51:42.786+09:00SBCL 1.0.48 Win32 Binary InstallerOpen-source Common Lisp 구현체인 <a href="http://sbcl.sourceforge.net/" linkindex="49" set="yes"><span style="font-weight: bold;">SBCL</span></a> 1.0.48 버전의 Win32 binary입니다.<br />
<br />
<a href="http://sbcl-internals.cliki.net/" linkindex="51" set="yes"><span style="font-weight: bold;">SBCL Internals</span></a> 페이지에 나와 있는 <a href="http://sbcl-internals.cliki.net/Build%20on%20Windows" linkindex="52" set="yes"><span style="font-weight: bold;">Windows binary build 방법</span></a>을 참고했습니다.<br />
<br />
Binary는 다음 링크에서 다운로드 하실 수 있습니다.<br />
<br />
<blockquote>
<b>LINK</b>: <a href="http://sbcl-for-windows.googlecode.com/files/sbcl-1.0.48-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.48 Win32 Binary</span></a> (<b>Google Code</b>)<br />
<b>Mirror 1</b>: <a href="http://www.mediafire.com/file/aiydty2fj5w362b/sbcl-1.0.48-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.48 Win32 Binary</span></a> (<b>MediaFire</b>)<br />
<b>Mirror 2</b>: <a href="http://dl.dropbox.com/u/7871204/SBCL/sbcl-1.0.48-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.48 Win32 Binary</span></a> (<b>DropBox</b>)<br />
<b>Mirror 3</b>: <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/SBCL/sbcl-1.0.48-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.47 Win32 Binary</span></a> (<b>SkyDrive</b>)</blockquote>
<br />
아직 SBCL의 모든 부분이 Windows 환경을 완벽하게 지원하지는 못하기 때문에 몇몇 contrib 모듈은 포함이 되지 않았습니다. 이 버전에서 포함되지 않은 모듈은 아래와 같습니다.<br />
<br />
<b>sb-simple-streams</b><br />
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-82284741648520719672011-03-28T20:30:00.003+09:002011-03-31T13:53:38.716+09:00홈페이지에 나눔로또 위젯을 달아봅시다<p>예전에 만들어 놓은 <strong><a href="http://blog.kaisyu.com/2010/07/web-api.html" title="간단한 나눔로또 Web API -- Kaisyu's Notes">나눔로또 Web API</a></strong>를 사용해서 홈페이지나 블로그에 간단하게 추가할 수 있는 나눔로또 당첨 번호 위젯을 만들어 보았습니다. <strong><a href="http://blog.kaisyu.com/2010/04/google-app-engine.html" title="Google App Engine 공부 - 로또 정보 트위터 게시 -- Kaisyu's Notes">Google App Engine (Python)</a></strong>에 대해 공부해볼 겸해서 만들었던 것이라 그다지 큰 쓰임새가 없었는데 이렇게라도 소개를 하면 그나마 좀 쓰이지 않을까 해서 글로 남겨봅니다. ;-)</p>
<p>몇 줄 안 되는 HTML + JavaScript 코드이므로 적당한 곳에 그대로 아래 코드를 추가하면 됩니다. (<strong>Blogger</strong>에서는 <strong>대시보드 -> 꾸미기 -> 페이지 구성요소 -> 가젯 추가 -> HTML/JavaScript</strong> 선택한 다음 아래 코드를 본문에 붙여넣기 하면 됩니다.) 단, 웹이 제 전문 분야가 아니라서 별로 예쁘지는 않습니다. 그저 그럭저럭 잘 동작한다는 데에 의미를 두고 싶습니다. :-( 그러니 화면에 보여지는 모양을 변경하고 싶거나 다르게 동작하길 원한다면 <code>loadLotto</code> 함수의 내용을 적절히 수정하면 되겠습니다.</p>
<pre class="code">
<<span class="function-name">div</span> <span class="variable-name">id</span>=<span class="string">"lottoDiv"</span>>loading...</<span class="function-name">div</span>>
<<span class="function-name">script</span> <span class="variable-name">type</span>=<span class="string">"text/javascript"</span>>
function loadLotto(a) {
lotpane = document.getElementById('lottoDiv');
lotpane.innerHTML = '제 <<span class="function-name">span</span> <span class="variable-name">style</span>=<span class="string">"color: green;"</span>><<span class="function-name">b</span>><span class="bold">' +
</span> a.gno + '</<span class="function-name">b</span>></<span class="function-name">span</span>>회 (' + a.gdate + ')<<span class="function-name">br</span> /><<span class="function-name">b</span>><<span class="function-name">span</span> <span class="variable-name">style</span>=<span class="string">"color: red;"</span>>' +
a.nums + '</<span class="function-name">span</span>> / <<span class="function-name">span</span> <span class="variable-name">style</span>=<span class="string">"color: blue;"</span>>' + a.bnum + '</<span class="function-name">span</span>></<span class="function-name">b</span>>';
}
</<span class="function-name">script</span>>
<<span class="function-name">script</span> <span class="variable-name">type</span>=<span class="string">"text/javascript"</span> <span class="variable-name">src</span>=<span class="string">"http://lotto.kaisyu.com/api?method=get&callback=loadLotto"</span>>
</<span class="function-name">script</span>></pre>
<p>소스 내용이 간단하므로 이해하는 데 큰 어려움은 없겠지만 간단히 설명을 하자면 크게 세 부분으로 나눌 수 있습니다.</p>
<ol>
<li><strong>div 태그</strong>: 나눔로또 번호가 표시될 위치에 id가 <code>lottoDiv</code>인 div 태그를 하나 만들어 둡니다.</li>
<li><strong>첫 번째 script 태그</strong>: Callback으로 호출될 JavaScript 함수 <code>loadLotto</code>를 만듭니다. 이 함수는 인자로 넘어온 <code>a</code> 객체에서 필요한 정보를 가져다 화면에 보여줄 HTML 코드를 생성한 다음 <code>lottoDiv</code>의 <code>innerHTML</code> 값으로 지정해줍니다. (<code>a</code> 객체의 구성에 대한 상세한 내용은 <strong><a href="http://blog.kaisyu.com/2010/07/web-api.html" title="간단한 나눔로또 Web API -- Kaisyu's Notes">나눔로또 Web API</a></strong>를 참고해주세요.)</li>
<li><strong>두 번째 script 태그</strong>: 이제 준비가 되었으므로 Lotto-K Web API를 호출하는 URL을 script 태그의 <code>src</code> 속성에 추가합니다. 이 때 첫 번째 script 태그에서 만들어둔 함수의 이름(<code>loadLotto</code>)을 <code>callback</code> 파라미터에 넘겨줍니다. <br/><br/>브라우저에서 직접 이 URL을 입력해보면 그 결과가 아래와 같습니다. <strong><a href="http://ko.wikipedia.org/wiki/JSON" title="위키백과: JSON">JSON</a></strong> 형식으로 된 나눔로또 당첨 번호 오브젝트를 파라미터로 가지는 <code>loadLotto</code> 함수 호출 형태라는 것을 한 눈에 알 수 있습니다.<pre class="code">loadLotto({"bnum": 35, "gno": 434, "gdate": "2011-03-26", "nums": [3, 13, 20, 24, 33, 37]})</pre>그러므로 이 내용을 script 태그에 <code>src</code> 속성으로 지정하여 실행하면 첫 번째 script 태그에서 정의한 <code>loadLotto</code> 함수에 나눔로또 당첨 번호 오브젝트가 전달되는 것이죠.</li>
</ol>
<p>실제로 페이지 내에 추가해서 실행한 결과는 아래와 같습니다.</p>
<blockquote><div id="lottoDiv">loading...</div></blockquote>
<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>
<p>위에서 소개한 내용 외에 나눔로또 당첨 여부를 확인할 수 있는 버튼 위젯에 대한 예제도 있으므로 관심 있는 분들은 <strong><a href="http://lotto.kaisyu.com/html/api_demo.html" title="나눔로또 Web API JavaScript Callback 예제">여기</a></strong>를 따라가보세요.</p>
<p>그리고, 혹시 사용하면서 궁금한 점이 있거나 API 기능 추가에 대해 건의하고 싶은 내용이 있으면 언제든 댓글 남겨주세요. 능력이 되는 범위 내에서 천천히 수정해보겠습니다. :)</p><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-61539171270784954302011-03-27T23:50:00.000+09:002011-03-27T23:50:42.530+09:00SBCL 1.0.47 Win32 Binary InstallerOpen-source Common Lisp 구현체인 <a href="http://sbcl.sourceforge.net/" linkindex="49" set="yes"><span style="font-weight: bold;">SBCL</span></a> 1.0.47 버전의 Win32 binary입니다.<br />
<br />
<a href="http://sbcl-internals.cliki.net/" linkindex="51" set="yes"><span style="font-weight: bold;">SBCL Internals</span></a> 페이지에 나와 있는 <a href="http://sbcl-internals.cliki.net/Build%20on%20Windows" linkindex="52" set="yes"><span style="font-weight: bold;">Windows binary build 방법</span></a>을 참고했습니다.<br />
<br />
Binary는 다음 링크에서 다운로드 하실 수 있습니다.<br />
<br />
<blockquote>
<b>LINK</b>: <a href="http://sbcl-for-windows.googlecode.com/files/sbcl-1.0.47-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.47 Win32 Binary</span></a> (<b>Google Code</b>)<br />
<b>Mirror 1</b>: <a href="http://www.mediafire.com/file/n3t0hvpeds98kar/sbcl-1.0.47-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.47 Win32 Binary</span></a> (<b>MediaFire</b>)<br />
<b>Mirror 2</b>: <a href="http://dl.dropbox.com/u/7871204/SBCL/sbcl-1.0.47-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.47 Win32 Binary</span></a> (<b>DropBox</b>)<br />
<b>Mirror 3</b>: <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/SBCL/sbcl-1.0.47-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.47 Win32 Binary</span></a> (<b>SkyDrive</b>)</blockquote>
<br />
아직 SBCL의 모든 부분이 Windows 환경을 완벽하게 지원하지는 못하기 때문에 몇몇 contrib 모듈은 포함이 되지 않았습니다. 이 버전에서 포함되지 않은 모듈은 아래와 같습니다.<br />
<br />
<b>sb-simple-streams</b><br />
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-73209017589859157582011-03-25T17:18:00.000+09:002011-03-25T17:18:32.533+09:00[Emacs] 유용한 ERC 설정 몇 가지<p><strong><a href="http://www.emacswiki.org/emacs/ERC" title="EmacsWiki: ERC">ERC</a></strong>는 Emacs에서 구동되는 IRC 클라이언트 모듈입니다. Emacs 23 버전부터 Emacs 기본 lisp 꾸러미에 포함되어 있기 때문에 다운로드하거나 설치하는 과정 없이 설정만 몇 가지 변경해주면 Emacs에서도 쉽게 IRC 채팅을 할 수 있습니다. 대부분의 ERC 관련 설정은 <strong>Customize Group</strong>을 통해 변경이 가능합니다.</p>
<pre><code>M-x customize-group RET erc RET
</code></pre>
<p>그리고, 기본적인 설정 외에 제가 사용하는 것 중 유용하다고 생각되는 몇 가지를 정리해보았습니다.</p>
<h2>서버 별 접속 함수 만들기</h2>
<p>주로 IRC 네트워크 단 한 곳만 찾는 사람이라면 그냥 ERC 기본 설정에 서버와 닉을 지정해놓으면 되지만, 둘 이상의 네트워크에 접속할 일이 잦다면 각 네트워크 별로 접속 함수를 만들어두는 편이 더 편리합니다. 아래는 <a href="http://freenode.net/" title="Freenode Network">Freenode</a>, <a href="http://www.hanirc.org/" title="HanIRC Network">HanIRC</a>, <a href="http://ozinger.org/" title="Ozinger IRC Network">오징어 IRC</a> 세 곳에 대한 코드 예입니다. (<strong><span class="Apple-style-span" style="color: red;">주의:</span></strong> Freenode는 <strong>NickServ</strong>가 있으므로 <code>:password</code> 필드에 닉 인증용 암호를 줄 수 있지만, <u>HanIRC와 오징어 IRC는 다른 방법을 사용</u>해야 합니다. 그 부분은 다음 단락에 다시 설명합니다.)</p>
<pre class="code"><span class="comment-delimiter">;; </span><span class="comment">Freenode Network
</span><span class="comment-delimiter">;; </span><span class="comment">NickServ: /msg NickServ identify PASSWD
</span><span class="comment-delimiter">;; </span><span class="comment">ChanServ: /msg ChanServ help
</span>(<span class="keyword">defun</span> <span class="function-name">irc-connect-freenode</span> ()
<span class="doc">"connect to freenode IRC server"</span>
(interactive)
(erc-tls <span class="builtin">:server</span> <span class="string">"irc.freenode.net"</span>
<span class="builtin">:port</span> 7000
<span class="builtin">:nick</span> <span class="string">"MyNick"</span>
<span class="builtin">:password</span> <span class="string">"MyPassword"</span>
<span class="builtin">:full-name</span> <span class="string">"My Full Name"</span>))
<span class="comment-delimiter">;; </span><span class="comment">HanIRC Network
</span><span class="comment-delimiter">;; </span><span class="comment">NickServ: /msg ^^ login NICK PASSWD
</span><span class="comment-delimiter">;; </span><span class="comment">ChanServ: /msg ChanServ help
</span>(<span class="keyword">defun</span> <span class="function-name">irc-connect-hanirc</span> ()
<span class="doc">"connect to HanIRC server"</span>
(interactive)
(erc <span class="builtin">:server</span> <span class="string">"irc.hanirc.org"</span>
<span class="builtin">:port</span> 6667
<span class="builtin">:nick</span> <span class="string">"MyNick"</span>
<span class="builtin">:full-name</span> <span class="string">"My Full Name"</span>))
<span class="comment-delimiter">;; </span><span class="comment">Ozinger Network
</span><span class="comment-delimiter">;; </span><span class="comment">NickServ: /msg 오징오징어 identify PASSWD
</span><span class="comment-delimiter">;; </span><span class="comment">ChanServ: /msg ㅇㅈㅇ help
</span>(<span class="keyword">defun</span> <span class="function-name">irc-connect-ozinger</span> ()
<span class="doc">"connect to Ozinger IRC server"</span>
(interactive)
(erc <span class="builtin">:server</span> <span class="string">"irc.ozinger.org"</span>
<span class="builtin">:port</span> 6667
<span class="builtin">:nick</span> <span class="string">"MyNick"</span>
<span class="builtin">:full-name</span> <span class="string">"My Full Name"</span>))</pre>
<h2>HanIRC와 오징어 IRC 닉(nick) 자동 인증</h2>
<p>HanIRC와 오징어 IRC는 닉 인증을 위해 <strong>NickServ</strong> 대신 다른 방식을 사용하기 때문에 기본 설정만으로는 닉 자동 인증을 할 수 없습니다. 대신, <code>erc-after-connect</code> hook을 사용하여 닉 인증이 자동으로 되도록 설정해줄 수 있습니다.</p>
<pre class="code">(add-hook 'erc-after-connect
'(<span class="keyword">lambda</span> (SERVER NICK)
(<span class="keyword">cond</span>
<span class="comment-delimiter">;; </span><span class="comment">hanirc
</span> ((string-match <span class="string">"hanirc\\.org"</span> SERVER)
(erc-message <span class="string">"PRIVMSG"</span>
(concat <span class="string">"^^ login "</span>
<span class="string">"MyHanIRCNick" " "</span>
<span class="string">"MyHanIRCPassword"</span>)))
<span class="comment-delimiter">;; </span><span class="comment">ozinger
</span> ((string-match <span class="string">"ozinger\\.org"</span> SERVER)
(erc-message <span class="string">"PRIVMSG"</span>
(concat <span class="string">"오징오징어 identify "</span>
<span class="string">"MyOzingerPassword"</span>)))
)))</pre>
<h2>알림(notice) 메시지 관련 설정</h2>
<p>알림 메시지가 왔을 때 미니 버퍼에 보여주고, 현재 활성화되어 있는 채널 버퍼에도 그 내용을 보여주도록 설정합니다. 알림 메시지를 놓치지 않도록 도와주는 매우 유용한 설정입니다.</p>
<pre><code>(setq erc-echo-notices-in-minibuffers-flag t)
(add-hook 'erc-echo-notice-hook 'erc-echo-notice-in-active-buffer)
</code></pre>
<h2>mIRC 색상(color) 보여주기</h2>
<p>메시지에 포함된 색상 코드를 해석해서 그 색상과 스타일을 표시해줍니다.</p>
<pre><code>(setq erc-interpret-mirc-color t)
</code></pre>
<h2>채널(channel) 자동 입장(join)</h2>
<p>서버에 접속할 때마다 자동으로 특정 채널에 입장하도록 설정해줄 수 있습니다. 이 설정은 <code>erc-modules</code> list 내에 <code>autojoin</code>이 포함되어 있어야 작동합니다. 즉, autojoin 모듈을 활성화해두어야 합니다. <em>-- 이 글 처음에 언급했던 Customize Group ERC 파트에서 활성화 모듈을 선택할 수 있습니다.</em></p>
<pre class="code">(setq erc-autojoin-channels-alist
(quote (
(<span class="string">"freenode.net"</span> <span class="string">"#abc"</span>
<span class="string">"#def"</span>)
(<span class="string">"hanirc.org"</span> <span class="string">"#channel1"</span>
<span class="string">"#channel2"</span>)
(<span class="string">"ozinger.org"</span> <span class="string">"#chn1"</span>
<span class="string">"#chn2"</span>)
)))</pre>
<h2>닉(nick)마다 고유 색상 부여하기</h2>
<p>닉에 고유한 색상을 부여해서 닉 별 대화 내용을 쉽게 구분할 수 있도록 도와주는 기능입니다. 이 기능을 사용하기 위해서는 <code>erc-highlight-nicknames.el</code> 파일이 필요한데, 아래 주소에서 받을 수 있습니다. 물론 자세한 설명도 함께 제공됩니다.</p>
<blockquote>
<p><strong>LINK: <a href="http://www.emacswiki.org/cgi-bin/wiki/ErcHighlightNicknames" title="EmacsWiki: ErcHighlightNicknames">EmacsWiki: ErcHighlightNicknames</a></strong></p>
</blockquote>
<p>위 주소에서 <code>erc-highlight-nicknames.el</code> 파일을 받아 site-lisp과 같이 <code>load-path</code>에 포함된 적절한 폴더에 복사해넣습니다. 또는 <code>load-path</code>에 이 파일이 위치한 경로를 추가해도 됩니다. 그런 다음 아래 코드를 설정에 추가하면 됩니다.</p>
<pre class="code">(<span class="keyword">require</span> '<span class="constant">erc-highlight-nicknames</span>)
(and
(<span class="keyword">require</span> '<span class="constant">erc-highlight-nicknames</span>)
(add-to-list 'erc-modules 'highlight-nicknames)
(erc-update-modules))</pre>
<h2>오징어 IRC 네트워크 접속 오류</h2>
<p>ERC를 통해서 오징어 IRC 네트워크에 접속했는데 '<strong>USER: not enough parameters</strong>' 오류 메시지를 보여주더니 잠시 후 끊어지더군요. ERC 설정도 바꿔보고 소스도 좀 뒤져보고 해서 겨우 이유를 알아낸 다음에는 사실 좀 허탈했습니다.</p>
<p>일단 해결 방법은 <code>erc-anonymous-login</code> 값을 <code>nil</code>로 설정해주는 것입니다. (<em>이 값을 <code>nil</code>로 설정하면 IRC 서버 연결됐을 때 닉 인증에 사용할 패스워드를 물어보는 프롬프트가 미니 버퍼 영역에 뜨는데, 그냥 엔터 키를 쳐서 넘어가면 됩니다.</em>)</p>
<pre><code>(setq erc-anonymous-login nil)
</code></pre>
<p><code>erc-login</code> 함수 소스를 살펴봤더니 위 설정이 <code>t</code>로 되어 있으면 IRC 서버에 USER 명령을 보낼 때 첫 번째 파라미터로 닉(nick) 대신 이메일(email) 값을 보내도록 되어 있는데, 오징어 IRC 서버에서는 첫 번째 파라미터에 email 값이 주어지면 'USER: not enough parameters' 오류를 내는 것이었습니다.</p>
<pre><code>USER MyNick 0 * My_Full_Name --> OK
USER abc@def.net 0 * My_Full_Name --> Error
</code></pre><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-22102315137301795732011-03-24T01:59:00.002+09:002011-03-29T12:49:20.593+09:00Windows 환경에서 OpenSSL 빌드하기<p><strong><a href="http://www.openssl.org" title="OpenSSL: The Open Source toolkit for SSL/TLS">OpenSSL</a></strong>은 <strong><a href="http://en.wikipedia.org/wiki/Secure_Sockets_Layer" title="Wikipedia: Secure Sockets Layer">SSL</a></strong>을 지원하는 많은 프로그램에서 사용하는 라이브러리 모듈이기 때문에 버그나 보안 관련 이슈가 발견되어 그것을 수정한 새로운 소스가 릴리즈될 경우 영향을 받을 수 있는 프로그램들은 최대한 빨리 업그레이드 해줄 필요가 있습니다. 다행스러운 점은 OpenSSL을 사용하는 대부분의 프로그램들이 (<em>Windows 환경 기준으로</em>) 두 개의 DLL 파일(<code>ssleay32.dll</code> & <code>libeay32.dll</code>)만 교체해주면 OpenSSL 모듈 업그레이드가 가능하다는 것입니다. <em>-- DLL을 사용하지 않고 정적(static)으로 링크해버린 경우는 어쩔 수 없고, DLL을 사용했다고 하더라도 DLL 파일만 교체했을 때 드물게 오류를 일으키는 경우도 있습니다.</em></p>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsPdAj6f_mEG9sOyeyvKZEF8x01PWk5JljCBXqMVcQ5H8n_qEee2Eb66qXMFFR3986kBC2eneQjZX-YaT4skIJDTZFW7faE3Nr2_51TaIyPKKkg0TbxO30SVzLhX8iGe1LecTDyIKZ29s/s1600/openssl.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsPdAj6f_mEG9sOyeyvKZEF8x01PWk5JljCBXqMVcQ5H8n_qEee2Eb66qXMFFR3986kBC2eneQjZX-YaT4skIJDTZFW7faE3Nr2_51TaIyPKKkg0TbxO30SVzLhX8iGe1LecTDyIKZ29s/s1600/openssl.png" /></a></div>
<p>그러나 주의할 점이 하나 있는데, OpenSSL 1.0.x 버전과 0.9.x 버전의 라이브러리 인터페이스가 서로 다르기 때문에 DLL 파일 교체 시에 각각 인터페이스가 호환되는 버전으로 대체해야 한다는 것입니다. 예를 들어, 기존에 0.9.8q 버전의 DLL 파일이 사용되고 있었다면 0.9.8r 또는 그 이후 버전의 DLL 파일로 대체해야지 1.0.0d 버전이나 그 이후 버전의 DLL 파일로 대체하면 안 된다는 뜻이지요. DLL 파일의 <strong>속성</strong> 보기를 통해 버전 정보를 확인할 수 있으므로 적절한 대체 버전을 결정하는 것은 그리 어렵지 않습니다.</p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqXyWSSslY36uJ48OHuHzR1lcwPSXvtyDs03bcCKwj7r5ua5h7pxQcIhNIjeXibWC5rSNeNNJgnwwtRWFpfM4a9wN1plvdZkQoAkhu7Uccxx4Y4iHdVU6speXm0D_bXFw-l2AmB6m0jpw/s1600/libeay32.dll.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqXyWSSslY36uJ48OHuHzR1lcwPSXvtyDs03bcCKwj7r5ua5h7pxQcIhNIjeXibWC5rSNeNNJgnwwtRWFpfM4a9wN1plvdZkQoAkhu7Uccxx4Y4iHdVU6speXm0D_bXFw-l2AmB6m0jpw/s1600/libeay32.dll.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">[libeay32.dll 속성 대화창]</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTDhtqZ4tL0CY-o-0DM9Iibt0Kbr73dKB49vuhe50JPDQK8tshsgCHuagys-5du3gVBlBaPaosYAa-AoHx2tRccOXs3w5l9hUt7UGImYk1MoeJzsjEL9iNySGv96AHswGKbqPS-HJomSs/s1600/ssleay32.dll.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTDhtqZ4tL0CY-o-0DM9Iibt0Kbr73dKB49vuhe50JPDQK8tshsgCHuagys-5du3gVBlBaPaosYAa-AoHx2tRccOXs3w5l9hUt7UGImYk1MoeJzsjEL9iNySGv96AHswGKbqPS-HJomSs/s1600/ssleay32.dll.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">[ssleay32.dll 속성 대화창]</td></tr>
</tbody></table>
<h1>빌드 준비</h1>
<p>Windows 환경에서 OpenSSL 소스를 직접 빌드하는 것은 아주 간단합니다. 빌드에 사용되는 도구들도 모두 무료로 구할 수 있는 것들이기 때문에 비용에 대해 고민할 필요도 없습니다. (<em>Visual C++ 64bit Compiler는 상용 제품에서만 제공됩니다.</em>) 빌드에 필요한 도구들을 나열해보면 다음과 같습니다.</p>
<ul>
<li>Perl: <strong>ActivePerl</strong> 또는 <strong>Strawberry Perl</strong>(@euler_kr 님 지적해주심)</li>
<li>C Compiler: <strong>Visual C++</strong> 또는 Borland C 또는 GCC(Cygwin 또는 MinGW)</li>
<li>Assembler: <strong>nasm</strong> 또는 MASM</li>
</ul>
<h1>소스와 빌드 도구 다운로드 및 설치</h1>
<p>소스는 OpenSSL 공식 홈페이지에서 다운로드 가능합니다. 1.0.x 버전과 0.9.x 버전이 함께 업데이트가 되고 있으므로 둘 다 받거나 둘 중 필요한 것으로 골라서 받습니다.</p>
<blockquote>
<p><strong>LINK: <a href="http://openssl.org/source/" title="OpenSSL Sources">OpenSSL Source Downloads</a></strong></p>
</blockquote>
<p>이 글에서는 주로 많이 사용하는 Visual C++과 nasm을 가지고 Win32 환경으로 빌드하는 방법을 설명하겠습니다. 다른 도구 구성으로 빌드하고 싶은 분들은 OpenSSL 소스에 포함된 <code>INSTALL.xxx</code> 파일을 참고하시기 바랍니다. (<strong>Win32 빌드에 대해서는 INSTALL.W32 파일을, Win64 빌드에 대해서는 INSTALL.W64 파일을 참고</strong>)</p>
<p>가장 먼저 아래의 도구들을 각각 다운로드하여 설치합니다. OpenSSL 빌드에 사용되는 도구들은 특별히 버전에 대한 제약이 없으므로 최신 안정 버전을 받으면 됩니다. 단, Microsoft Visual C++은 빌드에 사용한 버전에 따라 결과물로 만들어진 DLL 파일이 해당 MSVC Runtime 버전에 대한 의존성을 가지게 되므로 외부에 전달할 때는 반드시 필요한 MSVC Runtime 버전을 알려주거나 재배포 가능한 패키지를 함께 제공할 필요가 있습니다.</p>
<blockquote>
<p><strong>LINK: <a href="http://www.activestate.com/activeperl" title="ActivePerl">ActivePerl</a> 또는 <a href="http://strawberryperl.com" title="Strawberry Perl">Strawberry Perl</a> 둘 중 하나</strong></p>
<p><strong>LINK: <a href="http://www.microsoft.com/express/Windows/" title="Microsoft Visual Studio Express Edition">Microsoft Visual C++ Express Edition</a></strong></p>
<p><strong>LINK: <a href="http://www.nasm.us/" title="The Netwide Assembler">Netwide Assembler(nasm)</a></strong></p>
</blockquote>
<h1>빌드</h1>
<ol>
<li><p>Windows <strong>시작</strong> 메뉴에서 <strong>Visual Studio 명령 프롬프트</strong>를 실행합니다.</p></li>
<li><p><code>nasmw.exe</code> 파일의 위치를 PATH 환경 변수에 추가하거나 이미 PATH에 포함된 경로로 복사해줍니다. </p>
<blockquote>
<p><span class="Apple-style-span" style="color: red;"><strong>주의:</strong></span> 최근 nasm 배포본에서는 실행 파일명이 <code>nasm.exe</code>가 되었으므로 OpenSSL 빌드를 위해서는 <code>nasmw.exe</code>로 이름을 변경줄 필요가 있습니다.</p>
</blockquote></li>
<li><p>OpenSSL 소스가 풀려 있는 폴더로 경로를 변경합니다.</p></li>
<li><p>Perl 스크립트를 통해 빌드 환경을 설정해줍니다.</p>
<pre class="code">perl Configure VC-WIN32 --prefix=설치될_경로</pre>
<blockquote class="notice">
<p><span class="Apple-style-span" style="color: red;"><strong>주의:</strong></span> 위와 같이 OpenSSL 기본 옵션으로 빌드하게 되면 미국과 몇몇 나라에서 특허로 보호받고 있는 암호화 알고리즘을 포함하게 되어 이것을 개발 중인 제품에 적용하거나 재배포할 때 법적인 문제를 야기할 수 있습니다. 그러므로, 특허로 보호되는 알고리즘을 제외하고 빌드하고 싶은 경우 <code>no-idea no-mdc2 no-rc5</code> 옵션을 추가해주어야 합니다. (<strong>greenfish77</strong> 님 지적해주심) 더 자세한 내용은 소스 내 <strong>README</strong> 파일의 <strong>PATENTS</strong> 항목과 <strong>FAQ</strong> 파일의 <strong>LEGAL</strong> 항목에서 확인할 수 있습니다. <pre class="code">perl Configure VC-WIN32 no-idea no-mdc2 no-rc5 --prefix=설치될_경로</pre> 또한 여기에 덧붙여, OpenSSL을 사용(또는 포함)한 어떠한 형태의 배포도 OpenSSL에 적용되고 있는 두 가지의 라이센스에 대해 표기해야 합니다. 자세한 것은 소스에 포함된 <strong>LICENSE</strong> 파일 내용을 참고하시기 바랍니다.</p>
</blockquote></li>
<li><p>Assembler로 nasm을 사용할 것임을 지정해줍니다.</p>
<pre class="code">ms\do_nasm</pre></li>
<li><p>nmake로 빌드합니다. (한글 Windows 환경이라면 빌드 도중 에러가 발생할 수 있습니다. 이 에러에 대해서는 다음 단락을 참고하세요.)</p>
<pre class="code">nmake -f ms\ntdll.mak</pre></li>
<li><p>빌드가 잘 되었는지 테스트합니다.</p>
<pre class="code">nmake -f ms\ntdll.mak test</pre></li>
<li><p>최종적으로 만들어진 바이너리를 <strong>설치될_경로</strong>로 설치합니다.</p>
<pre class="code">nmake -f ms\ntdll.mak install</pre></li>
</ol>
<h1>빌드 중 compile error 해결하기</h1>
<p>한글 Windows 환경에서 OpenSSL 소스를 빌드하게 되면 도중에 컴파일 에러를 만나게 됩니다. 소스 파일 중 딱 두 개가 컴파일 오류를 일으키는데, 그 원인은 소스 파일이 <strong>iso-8859-1</strong> 인코딩으로 저장되어 있고 그 내용 중에 <strong>확장 ASCII 문자</strong>가 포함되어 있기 때문입니다. Visual C++ Compiler(.NET 이후 버전부터)는 소스를 읽어 들일 때 UTF-8으로 인코딩된 파일인지 확인하고 그렇지 않다면 시스템 기본 인코딩(한글 Windows에서는 <strong>CP949</strong>)으로 간주합니다. 이 때 그 확장 ASCII 문자가 적절하지 못한 문자로 처리되어 컴파일 오류를 발생시키게 되는 것입니다.</p>
<p>컴파일 에러가 발생하는 소스 파일은 다음과 같습니다.</p>
<pre><code>crypto\x509v3\v3_pci.c
crypto\x509v3\v3_pcia.c
</code></pre>
<p>해결 방법은 간단합니다. 문제가 되는 확장 ASCII 문자(<strong>ö</strong>)는 소스 파일 첫 부분(<strong>line 5</strong>)에 있는 주석 중 저작권 표기 부분에 포함되어 있습니다.</p>
<pre><code>/* Copyright (c) 2004 Kungliga Tekniska Högskolan</code></pre>
<p>그러므로, 적절한 텍스트 편집기로 열어서 그 이름 부분을 지우고 저장한 다음 빌드하면 됩니다. (<span class="Apple-style-span" style="color: red;"><strong>주의:</strong></span> OpenSSL 라이센스 정책에 따라, 배포하는 소스에서 위 저작권 관련 표기를 삭제하는 것은 허용되지 않습니다. 이것은 단지 빌드 시에 오류를 피하기 위한 방법일 뿐입니다.) 혹은 그냥 소스를 UTF-8 인코딩으로 변환해서 저장해주면 됩니다.</p><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com2tag:blogger.com,1999:blog-269602350347003494.post-82868315859676568172011-03-20T23:43:00.000+09:002011-03-20T23:43:57.047+09:00PChat - Windows 환경에서 쓸만한 IRC 클라이언트<p>Windows 환경에서 쓸만한 IRC 클라이언트 프로그램이라면 <strong><a href="http://www.mirc.com" title="mIRC">mIRC</a></strong>, <strong><a href="http://xchat.org" title="XChat">XChat</a></strong>, <strong><a href="http://www.kvirc.net" title="KVIrc">KVIrc</a></strong> 정도가 있지 않을까 생각하는데, mIRC는 무료 소프트웨어가 아니고, 오픈소스 소프트웨어인 XChat마저도 공식 홈페이지에서 배포하는 Windows용 설치본은 일정 비용을 지불하고 구매해야만 합니다. -- <em>그러고 보니 비록 기본적인 수준의 기능일 뿐이지만 <strong><a href="http://www.opera.com" title="Opera browser">Opera 브라우저</a></strong>와 다중 프로토콜 메신저 <strong><a href="http://pidgin.im" title="Pidgin">Pidgin</a></strong>도 IRC를 지원네요.</em></p>
<p>완전히 무료로 사용할 수 있는 KVIrc는 <strong><a href="http://ko.wikipedia.org/wiki/Qt_(%ED%88%B4%ED%82%B7)" title="위키백과: Qt (툴킷)">QT</a></strong> 기반으로 개발된 다중 플랫폼 지원 IRC 클라이언트인데, 다른 IRC 클라이언트들에 비해서 약간 더 무거운 느낌은 있지만, 화려한 테마나 색상, 여러 가지 강력한 추가 기능들을 고려했을 때 상당히 좋은 IRC 클라이언트 프로그램이라고 할 수 있습니다. 그런데 직접 사용해본 바로는 아직 한글 인터페이스를 제공하지 않고 있고, 채팅창에 출력되는 일부 한글 문자들이 간혹 깨지는 현상이 있더군요. 한글 인터페이스는 없어도 크게 상관이 없지만, 채팅 내용이 가끔 깨지는 건 꽤 문제가 되는 부분이 아닐 수 없습니다. 결국 KVIrc는 단념.</p>
<p>그리고 근래에 다시 문득 생각이 나서 인터넷을 들쑤시고 다니다가 발견한 것이 <strong><a href="http://pchat-irc.com" title="PChat">PChat</a></strong>입니다. PChat은 XChat의 소스로부터 갈라져나온 것으로, XChat과 거의 유사한 기능을 제공하고 무료 Windows용 설치본도 제공합니다. 예전에 소개한 적이 있는 <a href="http://blog.kaisyu.com/2006/05/x-chat-2-for-windows-silverex-build.html" title="X-Chat 2 for Windows (SilvereX Build)">XChat 2 for Windows (Silverex 버전)</a>도 비슷한 맥락이지만, 2.8.6-2 버전 이후로 더 이상 업데이트가 이루어지지 않고 있는 상황이라 PChat의 의미가 크다고 할 수 있습니다.</p>
<p>PChat은 현재 한글 인터페이스를 지원하고 한글 입력이나 출력에 아무런 문제가 없습니다. 서버 encoding도 잘 지원해주고 있어서 <a href="http://freenode.net" title="Freenode.net">Freenode</a>, <a href="http://ozinger.org/" title="Ozinger.org">오징어 IRC 네트워크</a>처럼 <strong>UTF-8</strong>을 사용하는 서버나 <a href="http://www.hanirc.org" title="HanIRC.org">한IRC</a>처럼 <strong>EUC-KR</strong>을 사용하는 서버 모두 문제 없이 접속할 수 있습니다.</p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTGD1vKUGkG_u3WcMCv2T5M1EZUmDz-RCZJ03FZ-tXw545IgkBBk9IYBZd4G2fPtijTyeJPahu8xM-Y7wb56zIRia_54OClKv1W89iPIXIsrDgfTzPoDyulRlJpk87x2rOWD-oo66Vs7I/s1600/pchat.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="446" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTGD1vKUGkG_u3WcMCv2T5M1EZUmDz-RCZJ03FZ-tXw545IgkBBk9IYBZd4G2fPtijTyeJPahu8xM-Y7wb56zIRia_54OClKv1W89iPIXIsrDgfTzPoDyulRlJpk87x2rOWD-oo66Vs7I/s640/pchat.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">[PChat 실행 모습]</td></tr>
</tbody></table>
<h1>PChat 다운로드 및 설치</h1>
<p>PChat은 공식 홈페이지에서 다운로드 할 수 있습니다.</p>
<blockquote>
<p><strong>LINK: <a href="http://pchat-irc.com/pchat-downloads/" title="PChat Downloads">PChat Download 페이지</a></strong></p>
</blockquote>
<p>설치할 때는 한글 인터페이스와 확장 스크립트 기능을 사용하기 위해 몇 가지 선택을 변경해줄 필요가 있는데, 가장 무난한 옵션 선택은 아래 그림과 같습니다. Perl이나 Python, Tcl 같은 스크립트 인터프리터가 시스템에 설치되어 있고 이 언어들을 사용해서 스크립트를 작성할 생각이 있다면 해당하는 부분을 더 체크해주면 됩니다. <em>-- <strong>Lua</strong>는 인터프리터 라이브러리가 플러그인 DLL 파일 내에 내장되어 있으므로 시스템에 별도로 Lua가 설치되어 있지 않아도 상관 없습니다.</em></p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwAa-Lt-Mbjc8_WMTWi_2Gf9fnpO8SbryGb_HcguLf1L97Z2Thup1ivOur9N8i662s6aE0aYScbP1Ohia7E0O9hp-w6vRyOymIfvvU3hVwFGb2zcdoGd9c0c1c2WcU7YkYgHMQ_tpiTKc/s1600/pchat_install.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwAa-Lt-Mbjc8_WMTWi_2Gf9fnpO8SbryGb_HcguLf1L97Z2Thup1ivOur9N8i662s6aE0aYScbP1Ohia7E0O9hp-w6vRyOymIfvvU3hVwFGb2zcdoGd9c0c1c2WcU7YkYgHMQ_tpiTKc/s1600/pchat_install.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">[PChat 설치 옵션 지정]</td></tr>
</tbody></table>
<h1>PChat 기본 설정</h1>
<p>취향에 따라 제법 다양하게 설정할 수 있지만, 이 글에서는 꼭 필요한 부분만 간단하게 설명하겠습니다.</p>
<h2>네트워크 추가</h2>
<p><strong>File</strong> 메뉴 -> <strong>네트워크 목록</strong>을 실행하면 네트워크 목록 대화상자가 뜹니다. 여기서 자신이 접속할 네트워크에 대한 정보를 추가해줄 수 있습니다. 기본으로 많은 네트워크들이 미리 등록되어 있는데, Freenode는 등록이 되어 있지만 주로 한국 사람들이 많이 이용하는 한IRC, 오징어 IRC 네트워크, 단군넷 등은 등록되어 있지 않습니다. <strong>추가</strong> 버튼을 눌러서 새로운 네트워크 항목이 추가되면 이름을 변경해준 다음 <strong>편집</strong> 버튼을 눌러서 서버 주소와 닉인증 방법 등 필요한 정보를 입력해줍니다. 아래는 각각 Freenode, 한IRC, 오징어 IRC 네트워크에 대한 설정 예입니다. <em>-- <strong>닉</strong>과 <strong>암호</strong> 부분은 자신의 닉을 서버에 등록한 경우만 입력합니다. 그러므로, 특별히 닉을 등록해서 사용하는 것이 아니라면 그냥 비워두면 됩니다.</em></p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7KMwpb91_T1ggLzh0a7iBrlonF-lBueAIq7OdYbXSzDkoPNnYqZQk9zBzHLy91E-ac2DFS0l2ZVrMe6OIp9r7HYVhPqmR9N1s_Qjo6QNROiYUoCiRzgSSqMGn3N6jeHuOIJZLoiNE20w/s1600/freenode.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="521" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7KMwpb91_T1ggLzh0a7iBrlonF-lBueAIq7OdYbXSzDkoPNnYqZQk9zBzHLy91E-ac2DFS0l2ZVrMe6OIp9r7HYVhPqmR9N1s_Qjo6QNROiYUoCiRzgSSqMGn3N6jeHuOIJZLoiNE20w/s640/freenode.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">[<b>Freenode 설정</b> - SSL 접속, UTF-8 인코딩, NickServ를 통한 닉(nick) 인증]</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfAIzrVOs-kBeRpDWNNm-XIC0h6djXazYIhrOh7tP79ggdibAOJT_1CHRBsd7WJ3xZeYeOTDwF7EhVrvtD1eZvuJxUd8Ac7_viKU7ePzXPAdzu54-Rz2TB7Rj2lwUMu5AIoOae2-unA6o/s1600/ozinger.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="510" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfAIzrVOs-kBeRpDWNNm-XIC0h6djXazYIhrOh7tP79ggdibAOJT_1CHRBsd7WJ3xZeYeOTDwF7EhVrvtD1eZvuJxUd8Ac7_viKU7ePzXPAdzu54-Rz2TB7Rj2lwUMu5AIoOae2-unA6o/s640/ozinger.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">[<b>오징어 IRC 네트워크</b> 설정 - UTF-8 인코딩, 서버 자체 닉(nick) 인증 방식]</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-10zQDwk0w0Ic_7-6t3HvlmhOx0oaSYCr-85cLf1X8OUAFGni-zEMKdgogt7D6D7xI7l8Xm8aZ_Y-CXdnLPE80rvDLA43rQW0lJg6DvoDDOBjHPfCGcQY-wgU3ZmOu-olbcXCAtm-BXo/s1600/hanirc.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="520" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-10zQDwk0w0Ic_7-6t3HvlmhOx0oaSYCr-85cLf1X8OUAFGni-zEMKdgogt7D6D7xI7l8Xm8aZ_Y-CXdnLPE80rvDLA43rQW0lJg6DvoDDOBjHPfCGcQY-wgU3ZmOu-olbcXCAtm-BXo/s640/hanirc.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">[<b>한IRC</b> 설정 - EUC-KR(CP949) 인코딩, 서버 자체 닉(nick) 인증 방식]</td></tr>
</tbody></table>
<h2>채팅창 글꼴 변경</h2>
<p><strong>설정</strong> 메뉴 -> <strong>기본 설정</strong> -> <strong>사용자 환경</strong> / <strong>글월창</strong> -> <strong>글꼴</strong> 란 우측 <strong>찾아보기</strong> 버튼을 눌러서 채팅창의 글꼴을 변경할 수 있습니다.
한자나 전각기호문자 등을 제대로 보기 위해서는 <strong>굴림체, 돋움체, 궁서체, 바탕체</strong> 등으로 설정하는 편이 좋습니다. 그러나, 꼭 고정폭 글꼴을 고집하지 않을 경우 <strong>Segoe UI</strong>로 설정하면 좀 더 깔끔한 화면을 볼 수 있습니다.</p>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0o512AMIyYzMYW6ODnd-k08lsWxsipjrM4xOCZKpOX2CRooVVYUe2jHkaBRSsPTvWrIX4G4uUmAgaWrhqFDQIcC74xaSAVs6dHxdi5ECAJ0tKLPJB1rjP5xofzj779LY7OF1SwYrrc-4/s1600/pchat_font.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="494" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0o512AMIyYzMYW6ODnd-k08lsWxsipjrM4xOCZKpOX2CRooVVYUe2jHkaBRSsPTvWrIX4G4uUmAgaWrhqFDQIcC74xaSAVs6dHxdi5ECAJ0tKLPJB1rjP5xofzj779LY7OF1SwYrrc-4/s640/pchat_font.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">[채팅창 글꼴 설정 - Segoe UI로 선택했다.]</td></tr>
</tbody></table>
<h2>기본 UI 글꼴 변경</h2>
<p>채팅창 설정에서 글꼴을 변경해도 메뉴와 툴바 등의 기본 UI에 대한 글꼴은 변경이 되지 않습니다. PChat은 GTK 기반이므로 이 부분의 글꼴을 변경하려면 <strong>PChat 설치 폴더 아래</strong>의 <code>etc/gtk-2.0/gtkrc</code> 파일 내용을 직접 변경해주어야 합니다. 아래는 Windows Vista/7에서 시스템 기본 글꼴인 <em>Segoe UI 10</em>으로 설정한 파일입니다. </p>
<blockquote>
<p><strong>LINK: <a href="http://dl.dropbox.com/u/7871204/gtkrc/gtkrc" title="gtkrc">gtkrc</a></strong></p>
</blockquote>
<p>위 파일의 내용은 아래와 같습니다. 다른 글꼴로 바꾸고 싶은 분들은 <code>gtkrc</code> 파일을 텍스트 편집기로 연 다음 <em>Segoe UI 10</em> 부분을 적절히 변경해주면 됩니다. 예를 들어, 굴림으로 변경하고 싶다면 <em>Gulim 10</em>이 되겠죠.</p>
<pre><code>style "user-font"
{
font_name="Segoe UI 10"
}
widget_class "*" style "user-font"
</code></pre>
<h1>마치며...</h1>
<p>얼마 전, <a href="http://blog.kaisyu.com/2010/08/blog-post.html" title="웹페이지에 채팅창을 달아보자.">웹페이지에 채팅창을 다는 내용으로 썼던 글</a>에서 Web 기반 IRC 클라이언트를 소개한 적이 있습니다. 웹브라우저만 있으면 되고 IRC 포트가 차단된 환경에서도 IRC 서버 접속이 일부 가능하다는 장점 때문에 권장했었는데, 그래도 전용 IRC 클라이언트가 사용 가능한 환경이라면 그것을 사용하는 편이 좀 더 편리한 것은 사실입니다. 아직도 IRC를 사랑하는 많은 분들 중 Windows 환경에서 무료로 사용할 수 있는 IRC 클라이언트를 찾고 있는 분이 있다면 <strong>PChat</strong>이 좋은 답이 될 수 있을 겁니다.</p><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com2tag:blogger.com,1999:blog-269602350347003494.post-53989955468145424842011-02-20T16:19:00.000+09:002011-02-20T16:19:10.151+09:00SBCL 1.0.46 Win32 Binary InstallerOpen-source Common Lisp 구현체인 <a href="http://sbcl.sourceforge.net/" linkindex="49" set="yes"><span style="font-weight: bold;">SBCL</span></a> 1.0.46 버전의 Win32 binary입니다.<br />
<br />
<a href="http://sbcl-internals.cliki.net/" linkindex="51" set="yes"><span style="font-weight: bold;">SBCL Internals</span></a> 페이지에 나와 있는 <a href="http://sbcl-internals.cliki.net/Build%20on%20Windows" linkindex="52" set="yes"><span style="font-weight: bold;">Windows binary build 방법</span></a>을 참고했습니다.<br />
<br />
Binary는 다음 링크에서 다운로드 하실 수 있습니다.<br />
<br />
<blockquote>
<b>LINK</b>: <a href="http://sbcl-for-windows.googlecode.com/files/sbcl-1.0.46-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.46 Win32 Binary</span></a> (<b>Google Code</b>)<br />
<b>Mirror 1</b>: <a href="http://www.mediafire.com/file/9s776xxz6dturqg/sbcl-1.0.46-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.46 Win32 Binary</span></a> (<b>MediaFire</b>)<br />
<b>Mirror 2</b>: <a href="http://dl.dropbox.com/u/7871204/SBCL/sbcl-1.0.46-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.46 Win32 Binary</span></a> (<b>DropBox</b>)<br />
<b>Mirror 3</b>: <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/SBCL/SBCL%201%5E_0%5E_46%20Win32%20Binary/sbcl-1.0.46-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.46 Win32 Binary</span></a> (<b>SkyDrive</b>)</blockquote>
<br />
아직 SBCL의 모든 부분이 Windows 환경을 완벽하게 지원하지는 못하기 때문에 몇몇 contrib 모듈은 포함이 되지 않았습니다. 이 버전에서 포함되지 않은 모듈은 아래와 같습니다.<br />
<br />
<b>sb-simple-streams</b><br />
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-75652829674797080272011-02-19T00:01:00.005+09:002011-06-21T22:00:17.066+09:00Pidgin 2.7.10 네이트온 플러그인 (파일 전송 + 커스텀 이모티콘)더 최신 버전이 있습니다. 아래 링크를 따라가세요. -- <i><span class="Apple-style-span" style="color: orange;">2011.06.21</span></i><br />
<blockquote class="notice">
<b>LINK:</b> <a href="http://blog.kaisyu.com/search/label/NateOn?max-results=3">Kaisyu's Notes: Pidgin NateOn</a></blockquote>
<br />
<hr />
<br />
Pidgin <b>2.7.11</b> 버전이 출시되었지만, 네이트온 플러그인에 영향을 주는 특별한 변경 사항은 없습니다. 그러므로 아래 <u><b>2.7.10</b> 버전용으로 빌드된 것을 그대로 사용하시면 됩니다</u>. -- <i><span class="Apple-style-span" style="color: orange;">2011.03.12</span></i><br />
<br />
<hr />
<br />
오프라인인 대화 상대에게 쪽지를 보낼 때 Pidgin이 죽는(crash) 문제가 수정되었습니다. 이번에도 <b>ForceCore</b>님이 패치해주셨고, 패치 내용 적용해서 새로 빌드한 파일을 배포합니다. (<u>아래 본문의 링크를 변경했습니다.</u>) -- <i><span class="Apple-style-span" style="color: orange;">2011.03.07</span></i><br />
<br />
<hr />
<br />
<b>ForceCore</b> 님이 <b><span class="Apple-style-span" style="color: red;">커스텀 이모티콘</span></b> 기능도 추가해주셨네요. 패치 적용해서 새로 빌드한 파일을 다시 배포합니다. (<u>아래 본문의 링크를 변경했습니다.</u>) -- <i><span class="Apple-style-span" style="color: orange;">2011.02.23</span></i><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmOxxqo3cFiJHJR2hhFaAn1Xki0UmEIvpXFhMQH0092R_GwebU1857hoJIMd6DX_6wow18eCPTRFB12LjpNOaIVumfwy7RvTDKYOShQqYkp8dU0Uz1KzuB8ScU8daZtD_EDK-MXLmGl0c/s1600/custom-emoticon.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmOxxqo3cFiJHJR2hhFaAn1Xki0UmEIvpXFhMQH0092R_GwebU1857hoJIMd6DX_6wow18eCPTRFB12LjpNOaIVumfwy7RvTDKYOShQqYkp8dU0Uz1KzuB8ScU8daZtD_EDK-MXLmGl0c/s1600/custom-emoticon.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b><span class="Apple-style-span" style="color: #38761d;">[커스텀 이모티콘 사용한 예]</span></b></td></tr>
</tbody></table>
<br />
<hr />
<br />
드디어 네이트온 메신저 4.x 버전과 호환되는 <b><span class="Apple-style-span" style="color: red;">파일 전송 패치</span></b>가 적용됐습니다. 이 패치는 <b>ForceCore</b> 님이 만들어주셨습니다. 그 동안 파일 전송 기능을 애타게 기다려오신 분들은 <a href="http://forcecore.tistory.com/1216"><b>ForceCore 님 블로그</b></a>에 고마움의 댓글 남겨주세요~<br />
<br />
<b>Pidgin 2.7.10</b> 버전에 맞추어 빌드된 플러그인의 다운로드 링크입니다.<br />
<blockquote>
<b>MediaFire</b>: <a href="http://www.mediafire.com/file/jo2tcjzls1pdj9l/pidgin-nateon-2.7.10-svn147+mc+fx+ce-2.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.7.10-svn147+mc+fx+ce-2.exe</span></a><br />
<b>Dropbox</b>: <a href="http://dl.dropbox.com/u/7871204/pidgin-nateon/pidgin-nateon-2.7.10-svn147%2Bmc%2Bfx%2Bce-2.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.7.10-svn147+mc+fx+ce-2.exe</span></a><br />
<b>SkyDrive</b>: <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/Pidgin%20NateOn%20Protocol%20Plugin/pidgin-nateon-2.7.10-svn147%5EMmc%5EMfx%5EMce-2.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.7.10-svn147+mc+fx+ce-2.exe</span></a></blockquote>
빌드에 사용된 플러그인 소스는 아래 주소에 열람하거나 다운로드할 수 있습니다.<br />
(<a href="https://github.com/difro/pidgin-nateon">difro 님의 github 저장소</a>로부터 브랜치를 만들고 <a href="http://forcecore.tistory.com/1216">forcecore 님의 패치</a>를 적용해두었습니다.)<br />
<blockquote>
<b>LINK:</b> <a href="https://github.com/kaisyu/pidgin-nateon">https://github.com/kaisyu/pidgin-nateon</a></blockquote>
<br />
이 글에서는 이번 버전에서 달라진 점과 다운로드 링크만 제공하므로, Pidgin에서 네이트온 플러그인을 사용하는 자세한 방법은 아래 글을 참고해주세요.<br />
<blockquote class="notice">
<b>LINK</b>: <a href="http://kaisyu.blogspot.com/2010/06/pidgin-windows.html"><span class="Apple-style-span" style="color: #3d85c6;">Pidgin 네이트온 플러그인 (Windows) 및 활용 팁</span></a></blockquote>
<br />
이번 버전에 달라진 점은 아래와 같습니다.<br />
<pre>forcecore 님 패치 반영
- 패치 소스: http://forcecore.tistory.com/1216
- 쪽지 답장 버튼 추가
- NateOn 메신저 4.x 버전 호환 파일 전송 가능 패치
- 커스텀 이모티콘 사용 가능 패치
파일 전송 시 파일 경로명에 한글이 포함된 경우 전송 실패하는 문제 수정
- fopen -> g_fopen
prpl_info 구조체 내용 업데이트
일부 debug info 출력문 오류 수정
- purple_debug_info 함수의 포맷 지시자와 파라미터 불일치
</pre>
<br />
이외에 Pidgin 2.7.10 버전 및 libpurple의 상세 수정 내역은 <b><a href="http://developer.pidgin.im/query?status=closed&milestone=2.7.10">이곳</a></b>을 참고하세요.<br />
<br />
<div id="__KO_DIC_LAYER__" style="border-bottom-color: rgb(51, 51, 119); border-bottom-style: solid; border-bottom-width: 2px; border-left-color: rgb(51, 51, 119); border-left-style: solid; border-left-width: 2px; border-right-color: rgb(51, 51, 119); border-right-style: solid; border-right-width: 2px; border-top-color: rgb(51, 51, 119); border-top-style: solid; border-top-width: 2px; display: none; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: fixed; z-index: 999999999;">
<iframe frameborder="0" scrolling="yes" style="background-color: white; height: 100%; width: 100%;"></iframe></div><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com16tag:blogger.com,1999:blog-269602350347003494.post-41805506885224341212011-02-11T00:57:00.001+09:002011-03-29T11:37:18.414+09:00OpenSSL 1.0.0d & 0.9.8r Win32 Binary<b>OpenSSL</b> <b><span class="Apple-style-span" style="color: red;">1.0.0d</span></b> 버전과 <b><span class="Apple-style-span" style="color: red;">0.9.8r</span></b> 버전이 함께 릴리즈 되었습니다.<br />
<br />
<blockquote class="notice">
<b><span class="Apple-style-span" style="color: red;">주의:</span></b><br />
이 제품에는 OpenSSL Toolkit에 사용하기 위해 OpenSSL Project에서 개발한 소프트웨어가 포함되어 있습니다. (http://www.openssl.org/)<br />
이 제품은 Eric Young (eay@cryptsoft.com)이 작성한 암호화 소프트웨어를 포함합니다.<br />
이 제품은 Tim Hudson (tjh@cryptsoft.com)이 작성한 소프트웨어를 포함합니다.<br />
This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit.(http://www.openssl.org) <br />
This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)<br />
This product includes software written by Tim Hudson (tjh@cryptsoft.com)<br />
<br />
또한, 이 바이너리 배포판은 OpenSSL 기본 옵션으로 빌드되었습니다. 이것은 미국과 몇몇 국가에서 특허로 보호받고 있는 암호화 알고리즘을 포함하고 있다는 의미입니다. 그러므로, 이 바이너리 배포판을 자신의 제품에 적용하거나 재배포 할 때 특허 및 라이센스에 대해 고려하여야 합니다.<br />
<br />
더 자세한 내용은 바이너리 배포판에 포함된 <b>LICENSE</b> 및 <b>README</b> 파일의 <b>PATENTS</b> 항목을 참고하시기 바랍니다.
</blockquote>
<br />
여기서 제공하는 binary는 <b>MS Visual C++ 2010 Express Edition</b>으로 빌드되었기 때문에 MS VC++ Runtime 2010이 필요합니다. 현재 시스템에 아직 설치되어 있지 않다면 아래 링크에서 다운로드한 후 설치하시면 됩니다.<br />
<blockquote>
<b>LINK:</b> <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84">Microsoft Visual C++ 2010 Redistributable Package (x86)</a></blockquote>
<br />
OpenSSL <b>1.0.0d</b> 버전 Win32 binary는 아래에서 받으세요.<br />
<blockquote>
<b>LINK:</b> <a href="http://dl.dropbox.com/u/7871204/openssl/openssl-1.0.0d-win32-msvc100.zip">openssl-1.0.0d-win32-msvc100.zip</a> (from <b>DropBox</b>)<br />
<b>LINK:</b> <a href="http://www.mediafire.com/file/9o1jqwzv011hxpj/openssl-1.0.0d-win32-msvc100.zip">openssl-1.0.0d-win32-msvc100.zip</a> (from <b>MediaFire</b>)<br />
<b>LINK:</b> <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/OpenSSL/OpenSSL%201.0.0d%20Win32%20%5E5MSVC100%5E6/openssl-1.0.0d-win32-msvc100.zip">openssl-1.0.0d-win32-msvc100.zip</a> (from <b>SkyDrive</b>)</blockquote>
<br />
OpenSSL <b>0.9.8r</b> 버전 Win32 binary는 아래에서 받으세요.<br />
<blockquote>
<b>LINK:</b> <a href="http://dl.dropbox.com/u/7871204/openssl/openssl-0.9.8r-win32-msvc100.zip">openssl-0.9.8r-win32-msvc100.zip</a> (from <b>DropBox</b>)<br />
<b>LINK:</b> <a href="http://www.mediafire.com/file/94908ad5y28on97/openssl-0.9.8r-win32-msvc100.zip">openssl-0.9.8r-win32-msvc100.zip</a> (from <b>MediaFire</b>)<br />
<b>LINK:</b> <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/OpenSSL/OpenSSL%200.9.8r%20Win32%20%5E5MSVC100%5E6/openssl-0.9.8r-win32-msvc100.zip">openssl-0.9.8r-win32-msvc100.zip</a> (from <b>SkyDrive</b>)</blockquote>
<br />
Binary build에 사용된 환경은 다음과 같습니다.<br />
<blockquote>
<b>Microsoft Visual C++ Express Edition 2010</b> - <a href="http://www.microsoft.com/express/Downloads/#2010-Visual-CPP">http://www.microsoft.com/express/Downloads/#2010-Visual-CPP</a><br />
<b>NASM</b> - <a href="http://www.nasm.us/">http://www.nasm.us</a><br />
<b>ActivePerl</b> - <a href="http://www.activestate.com/activeperl/">http://www.activestate.com/activeperl/</a>
</blockquote>
<br />
<br />
참고로, 제가 빌드해서 배포하는 것 외에 <b>OpenSSL 공식 홈페이지에 게시된 binary 배포본의 링크</b>는 아래에서 확인하실 수 있습니다.<br />
<blockquote>
<b>LINK:</b> <a href="http://www.openssl.org/related/binaries.html">http://www.openssl.org/related/binaries.html</a></blockquote>
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-14391909276261429402011-02-09T01:41:00.001+09:002011-02-21T21:32:43.758+09:00Pidgin 2.7.10 네이트온 플러그인<b><span class="Apple-style-span" style="color: red;">파일 전송 가능한 버전</span></b>이 <a href="http://blog.kaisyu.com/2011/02/pidgin-2710_19.html"><b>새로 등록</b></a>되었습니다. -- <i>2011.02.19</i><br />
<br />
<hr />
<br />
<b>Pidgin 2.7.10</b> 버전이 출시되어 이 버전에 대응하는 네이트온 플러그인을 빌드했습니다.<br />
<br />
다운로드 링크입니다.<br />
<blockquote>
<b>LINK</b>: <a href="http://www.mediafire.com/file/kkwjjbmbgv7i09r/pidgin-nateon-2.7.10-svn147+multi-chat.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.7.10-svn147+multi-chat.exe</span></a> (<b>MediaFire</b>)<br />
<b>Mirror 1</b>: <a href="http://dl.dropbox.com/u/7871204/pidgin-nateon/pidgin-nateon-2.7.10-svn147%2Bmulti-chat.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.7.10-svn147+multi-chat.exe</span></a> (<b>Dropbox</b>)<br />
<b>Mirror 2</b>: <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/Pidgin%20NateOn%20Protocol%20Plugin/pidgin-nateon-2.7.10-svn147%5EMmulti-chat.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.7.10-svn147+multi-chat.exe</span></a> (<b>SkyDrive</b>)</blockquote>
<br />
이 글에서는 이번 버전에서 달라진 점과 다운로드 링크만 제공하므로, Pidgin에서 네이트온 플러그인을 사용하는 자세한 방법은 아래 글을 참고해주세요.<br />
<blockquote class="notice">
<b>LINK</b>: <a href="http://kaisyu.blogspot.com/2010/06/pidgin-windows.html"><span class="Apple-style-span" style="color: #3d85c6;">Pidgin 네이트온 플러그인 (Windows) 및 활용 팁</span></a></blockquote>
<br />
네이트온 플러그인의 소스는 달라진 것이 없으므로 여전히 파일 전송이 불가능합니다. 그리고, Pidgin 2.7.10 버전 및 libpurple의 상세 수정 내역은 <b><a href="http://developer.pidgin.im/query?status=closed&milestone=2.7.10">이곳</a></b>을 참고하세요.<br />
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com6tag:blogger.com,1999:blog-269602350347003494.post-24178097426500830992011-01-10T09:58:00.036+09:002011-01-10T12:45:47.524+09:00[Emacs] Encoding 자동 판별 모듈 - Unicad<h1>들어가기 전에 - 인코딩이 왜 문제인가?</h1>
<p>한글 Windows 환경(<em>꼭 한글 Windows가 아니더라도 OS 기본 인코딩이 영문 또는 서유럽어가 아닌 경우</em>)에서 소스 코드를 다루는 사람이라면 한번 정도는 겪어보았을 법한 문제가 있습니다. 소스를 text editor로 열었더니 ?로 보이는 부분이 있고, 이 파일을 조금 수정한 다음 저장해서 compile 하면 compile이 실패하거나 성공하더라도 실행 중에 엉뚱한 글자(?)가 보여지는 일 말이죠. 이것은 다중 바이트 인코딩 문자셋(<em>여기서는 <strong>euc-kr</strong> 또는 <strong><a href="http://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%ED%8E%98%EC%9D%B4%EC%A7%80_949" title="위키백과: 코드 페이지 949">cp949</a></em></strong>)에서 ASCII 코드 확장 영역의 문자 코드를 일부 중복 사용하기 때문에 발생하는 문제입니다.</p>
<p>Windows의 기본 편집기인 메모장(notepad.exe), <a href="http://www.scintilla.org" title="Scintella">Scintella</a> 기반의 <a href="http://notepad-plus-plus.org" title="Notepad++">Notepad++</a>과 <a href="http://blog.kaisyu.com/2004/01/scite.html" title="SciTE - 프로그래머를 위한 작고 강력한 편집기">SciTE</a> 등은 물론이고 대다수의 text editor들이 <strong><a href="http://en.wikipedia.org/wiki/Latin-1" title="Wikipedia: Latin-1">latin-1</a></strong>(<em>iso-8859-1, ASCII 코드 기반의 서유럽어 표현을 위한 문자셋을 정의</em>) 인코딩을 시스템 기본 인코딩과 구별하지 않거나, 또는 구별해준다고 해도 적절히 판별하지 못하기 때문에 한글 Windows 환경에서 latin-1 인코딩으로 작성된 파일을 읽어오면 일부 문자가 ?로 보이는 문제를 겪게 됩니다. (대표적으로 ©, 16진 코드값은 A9)</p>
<p>Notepad++과 몇몇 text editor의 경우는 메뉴에서 파일의 인코딩을 강제 지정해줄 수 있지만, 인코딩이 제대로 판별되지 않았음을 알려주지 않기 때문에 사용자가 주의 깊게 관찰하지 않으면 놓치기 십상이지요.</p>
<p>굳이 위와 같은 특수한 사례를 들지 않는다고 하더라도 이미 Unicode(특히, UTF-8)는 개발 프로젝트의 <strong><a href="http://ko.wikipedia.org/wiki/%EA%B5%AD%EC%A0%9C%ED%99%94%EC%99%80_%EC%A7%80%EC%97%AD%ED%99%94" title="위키백과: 국제화와 지역화">국제화 및 현지화</a>(<a href="http://en.wikipedia.org/wiki/Internationalization_and_localization" title="Wikipedia: Internationalization and localization">Internationalization and localization</a>)</strong>와 관련하여 다국어를 지원하는 데 꼭 필요한 인코딩으로 확실하게 자리잡고 있고, 기존에 사용되고 있던 다양한 인코딩의 데이터를 적절히 판별하여 Unicode로 변환하는 것은 매우 중요한 일이 되었습니다. 그리고, 이러한 작업은 전 세계에서 Unicode 하나만 사용하는 날이 올 때까지는 결코 피해갈 수 없는 일이기도 합니다.</p>
<h1>그렇다면 Emacs에서는?</h1>
<p>Emacs에서는 기본적으로 <strong><a href="http://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8_%EC%88%9C%EC%84%9C_%ED%91%9C%EC%8B%9D" title="위키백과: 바이트 순서 표식">BOM</a></strong>(byte-order mark)을 가지고 있는 <strong>Unicode(<a href="http://ko.wikipedia.org/wiki/UTF-16" title="위키백과: UTF-16">UTF-16</a>, <a href="http://ko.wikipedia.org/wiki/UTF-8" title="위키백과: UTF-8">UTF-8</a>)</strong> 인코딩 정도만 적절히 판단해줍니다. 그래서, <strong><a href="http://www.emeditor.com" title="EmEditor">EmEditor</a></strong>를 볼 때마다 항상 부러웠던 것이 대부분의 <strong><a href="http://en.wikipedia.org/wiki/Character_encoding" title="Wikipedia: Character encoding">character encoding</a>(<a href="http://ko.wikipedia.org/wiki/%EB%AC%B8%EC%9E%90_%EC%9D%B8%EC%BD%94%EB%94%A9" title="위키백과: 문자 인코딩">문자 인코딩</a>)</strong>을 외부 라이브러리나 도구의 도움 없이 에디터 자체적으로 깔끔하게 지원한다는 점이었습니다. 특히 BOM이 없는 Unicode를 포함한 다양한 인코딩에 대한 자동 판별 능력은 타의 추종을 불허할 만큼 탁월하다고 할 수 있지요. 그래서 간혹 파일의 인코딩이 애매한 경우(<em>위에서 언급했던 것처럼 latin-1 인코딩이 사용됐다고 짐작되는 경우 또는 BOM없이 저장된 UTF-16 인코딩 파일의 경우 등</em>)에는 <strong><a href="http://blog.kaisyu.com/2006/03/emeditor-5-freeware-edition.html" title="EmEditor Freeware Edition">EmEditor Freeware Edition</a></strong>을 사용해서 확인해보곤 했습니다.</p>
<p>그런데, EmEditor 없이도 <em>필요한 만큼 유용하게</em> 사용할 수 있는 문자 인코딩 자동 판별 모듈을 발견하게 되면서 더 이상 EmEditor를 부러워하지 않아도 되게 되었습니다. '<strong>필요한 만큼 유용하게</strong>'라는 단서를 단 이유는, 발견한 그 자동 판별 모듈이 세상 모든 인코딩을 완벽하게 판별해주지는 못하지만 한글과 영문을 주로 사용하는 사람이 만날 수 있는 대부분의 인코딩은 무리 없이 잘 판별해주기 때문입니다.</p>
<p>그 문자 인코딩 자동 판별 모듈의 이름은 <strong>Unicad</strong>입니다. 자세한 소개를 하기 전에 우선 Emacs가 파일의 인코딩을 판별하는 방법에 대해 간단하게 살펴보고 넘어가겠습니다.</p>
<h1>Emacs의 파일 인코딩 판별 방법</h1>
<p>Emacs에는 파일의 인코딩을 판별하는 데 사용되는 <code>find-auto-coding</code> 함수가 있어서 파일을 읽어올 때 이 함수를 통해 파일의 인코딩을 판별하게 됩니다. 실제로는 그 과정이 좀 더 복잡하겠지만, 핵심이 되는 부분만 간추려보면 대략 다음과 같습니다.</p>
<pre><code>auto-coding-alist
|
V
auto-coding-regexp-alist
|
V
'coding:' 태그 (파일 내용 중)
|
V
auto-coding-functions
</code></pre>
<h2>auto-coding-alist</h2>
<p><strong>파일명 규칙</strong>과 <strong>인코딩</strong> 쌍으로 구성된 cons의 list를 저장하는 변수입니다. 파일의 인코딩을 확인하기 위해 가장 먼저 적용하는 방법으로, <strong>파일명이 규칙과 일치하는 항목이 있을 경우 해당하는 인코딩을 선택</strong>하고 일치하는 항목이 없으면 다음 판별 과정으로 넘어갑니다.</p>
<p>제가 사용 중인 Emacs에서 변수값은 다음과 같았습니다. 주로 파일의 확장자와 관련된 내용이 대부분입니다.</p>
<pre class="code">
((<span class="string">"\\.</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">(</span></span><span class="string">arc</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">zip</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">lzh</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">lha</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">zoo</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">[jew]ar</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">xpi</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">rar</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">7z</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">ARC</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">ZIP</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">LZH</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">LHA</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">ZOO</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">[JEW]AR</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">XPI</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">RAR</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">7Z</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">)</span></span><span class="string">\\'"</span> . no-conversion-multibyte)
(<span class="string">"\\.</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">(</span></span><span class="string">exe</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">EXE</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">)</span></span><span class="string">\\'"</span> . no-conversion)
(<span class="string">"\\.</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">(</span></span><span class="string">sx[dmicw]</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">odt</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">tar</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">tgz</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">)</span></span><span class="string">\\'"</span> . no-conversion)
(<span class="string">"\\.</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">(</span></span><span class="string">gz</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">Z</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">bz</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">bz2</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">xz</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">gpg</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">)</span></span><span class="string">\\'"</span> . no-conversion)
(<span class="string">"\\.</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">(</span></span><span class="string">jpe?g</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">png</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">gif</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">tiff?</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">|</span></span><span class="string">p[bpgn]m</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">)</span></span><span class="string">\\'"</span> . no-conversion)
(<span class="string">"\\.pdf\\'"</span> . no-conversion)
(<span class="string">"/#[</span><span class="string"><span class="negation-char">^</span></span><span class="string">/]+#\\'"</span> . emacs-mule))
</pre>
<h2>auto-coding-regexp-alist</h2>
<p><strong>파일 시작 바이트 패턴</strong>과 <strong>인코딩</strong> 쌍으로 구성된 cons의 list를 저장하는 변수입니다. <strong>파일 첫 n 개의 바이트와 일치하는 패턴이 있으면 해당하는 인코딩을 선택</strong>하고 일치하는 것이 없으면 다음 판별 과정으로 넘어갑니다.</p>
<p>제가 사용 중인 Emacs에서 변수값은 다음과 같았습니다. Unicode의 <a href="http://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8_%EC%88%9C%EC%84%9C_%ED%91%9C%EC%8B%9D" title="위키백과: 바이트 순서 표식">BOM</a>과 몇몇 특정 바이너리 형식 파일에 대한 내용을 포함하고 있습니다.</p>
<pre class="code">
((<span class="string">"\\`BABYL OPTIONS:[ </span><span class="whitespace-tab"> </span><span class="string">]*-\\*-[ </span><span class="whitespace-tab"> </span><span class="string">]*rmail[ </span><span class="whitespace-tab"> </span><span class="string">]*-\\*-"</span> . no-conversion<span class="whitespace-line">)</span>
(<span class="string">"\\`\376\377"</span> . utf-16be-with-signature)
(<span class="string">"\\`\377\376"</span> . utf-16le-with-signature)
(<span class="string">"\\`\357\273\277"</span> . utf-8-with-signature)
(<span class="string">"\\`;ELC^T^@^@^@"</span> . emacs-mule))
</pre>
<h2>'coding: ' 태그</h2>
<p><strong>파일의 첫 두 줄 안에서 특정 형식의 태그를 찾아 인코딩을 판별</strong>하는 방법으로, 태그의 형식은 아래와 같습니다. </p>
<pre><code>-*- ... coding: CODING-SYSTEM; ... -*-
</code></pre>
<p>예를 들어, C 소스 파일에 인코딩이 UTF-8임을 명시하고자 한다면 다음과 같이 추가해주면 됩니다.</p>
<pre><code>/* -*- coding: utf-8 -*- */
</code></pre>
<p>앞선 다른 방법들과 마찬가지로, 인코딩 지정 태그를 발견하지 못하여 인코딩 판별에 실패했을 경우 다음 판별 과정으로 넘어갑니다.</p>
<h2>auto-coding-functions</h2>
<p><strong>인코딩 판별 함수</strong>의 list를 저장하는 변수입니다. 파일 내용의 전부 또는 일부(<em>Emacs 도움말에 따르면 파일의 첫 1 KB와 끝 3 KB 정도를 포함해야 한다고 되어 있습니다.</em>)에 대해 각 판별 함수를 순서대로 호출하면서 알맞은 인코딩이 발견될 경우 그 인코딩을 선택합니다. 조금 있다가 설명할 Unicad는 이 변수에 고유 판별 함수를 추가하게 됩니다. 그러므로, 위 세 단계에서 적절한 인코딩을 판별해내지 못했을 경우에만 효과가 있는 것이죠.</p>
<p>제가 사용 중인 Emacs에서 변수값은 다음과 같았습니다.</p>
<pre><code>(sgml-xml-auto-coding-function sgml-html-meta-auto-coding-function)
</code></pre>
<h1>Unicad</h1>
<p>이제 본론으로 들어가서, <strong>Unicad</strong>는 <strong>Uni</strong>versal <strong>C</strong>haracterset <strong>A</strong>uto <strong>D</strong>etector의 줄임말이고, <strong><a href="http://www.mozilla.org/projects/intl/detectorsrc.html" title="Mozilla Universal Charset Detector">Mozilla Universal Charset Detector</a></strong>를 Emacs 모듈로 이식(porting)한 것이라고 합니다. 이 모듈은 <strong>Google Code</strong>에서 호스팅되고 있고, <strong>EmacsWiki</strong>에 별도로 설명하는 페이지를 가지고 있습니다.</p>
<blockquote>
<p><strong>Project Link:</strong> <a href="http://code.google.com/p/unicad/">http://code.google.com/p/unicad/</a></p>
<p><strong>EmacsWiki Link:</strong> <a href="http://www.emacswiki.org/cgi-bin/emacs/Unicad">http://www.emacswiki.org/cgi-bin/emacs/Unicad</a></p>
</blockquote>
<p>사용 방법은 무척 간단합니다. <code>unicad.el</code> 파일을 다운로드 한 다음 <code>load-path</code>에 경로를 추가하거나 <code>site-lisp</code>(또는 <code>~/.emacs.d</code>) 폴더에 복사해넣은 뒤 <code>.emacs</code> 파일에 간단하게 한 줄 추가해주면 됩니다.</p>
<pre class="code">
(<span class="keyword">require</span> '<span class="constant">unicad</span>)
</pre>
<p>그리고, 속도 향상을 위해서 byte-compile 해주는 것을 권장합니다. (<code>M-x</code> <code>byte-compile-file</code> <code>RET</code> <code><path_of_unicad>\unicad.el</code>)</p>
<p>이렇게 하면 모듈이 로드될 때 <code>auto-coding-functions</code> 변수에 <code>unicad-universal-charset-detect</code> 함수가 자동으로 추가되기 때문에 이후 파일을 읽어올 때마다 그 파일의 인코딩을 적절하게 판별해줍니다. Unicad 모듈을 로드한 다음 <code>auto-coding-functions</code> 변수값을 살펴보면 아래와 같이 함수가 추가되어 있는 것을 확인할 수 있습니다.</p>
<pre><code>(unicad-universal-charset-detect sgml-xml-auto-coding-function sgml-html-meta-auto-coding-function)
</code></pre>
<p>제가 테스트 해보니 적어도 Unicode(UCS2 with BOM, UTF-8 with/without BOM)와 euc-kr(cp949), latin-1(iso-8859-1) 등은 문제 없이 잘 판별해주었습니다. 이 정도면 <em>필요한 만큼 충분</em>하지요.</p>
<p>단점이라면, 파일을 읽어올 때 인코딩을 판별하기 위한 함수를 한번 더 거치는 것이기 때문에 그 만큼 파일을 여는 속도가 느려진다는 것인데, 거슬릴 정도로 느껴지는 수준은 아니라서 문자 인코딩 자동 판별이라는 이점을 고려할 때 충분히 감수할 수 있다고 봅니다.</p>
<h1>Tip - Vim에서 파일 인코딩 자동 판별하기</h1>
<p><strong><a href="http://www.vim.org" title="Vim">Vim</a></strong>에서도 <em>필요한 만큼 유용하게</em> 사용할 수 있는 문자 인코딩 자동 판별 방법이 있습니다. 특별히 추가 모듈이나 외부 도구를 사용할 필요 없이 <code>.vimrc</code>(또는 Windows 환경에서 <code>_vimrc</code>) 파일에 간단하게 아래 설정을 추가해주면 됩니다.</p>
<pre><code>" 멀티 바이트를 지원하면
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
</code></pre>
<p>위와 같이 설정하면, 파일 편집을 위해 Vim 내부적으로는 UTF-8 인코딩을 사용하고, 읽어오는 파일의 인코딩을 판별하기 위해 ucs-bom(<a href="http://ko.wikipedia.org/wiki/%EA%B5%AD%EC%A0%9C_%EB%AC%B8%EC%9E%90_%EC%84%B8%ED%8A%B8" title="위키백과: 국제 문자 세트">Universal Character Set</a> with <a href="http://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8_%EC%88%9C%EC%84%9C_%ED%91%9C%EC%8B%9D" title="위키백과: 바이트 순서 표식">byte-order mark</a>), utf-8, euc-kr(cp949), latin1 순으로 적용해봅니다. 각 인코딩을 적용해 파일의 내용을 디코딩할 때 해당 문자셋 테이블을 벗어나는 값이 발견되면 다음 인코딩을 시도하는 방식이기 때문에, 실제 한글 Windows 환경에서 꽤 자주 문제가 되는 latin-1 인코딩 파일도 문제 없이 잘 판별해줍니다.</p>
<h1>마치면서...</h1>
<p>Text editor는 프로그래머 또는 개발자라는 타이틀을 달고 살아가는 전쟁터에서 가장 기본이 되는 무기입니다. 좋은 무기를 가지는 것이 첫 번째로 중요한 일이라면 그 무기를 충분히 활용할 수 있도록 익숙해지는 것 또한 그 못지 않게 중요한 일입니다. 비록 하나의 무기로 모든 전투에서 승리할 수는 없겠지만, 잘 찾아보면 무기의 성능을 한층 향상시켜줄 수 있는 많은 비법들이 있습니다. Emacs를 위한 문자 인코딩 자동 판별 모듈인 Unicad가 바로 그런 것들 중 하나이겠지요. 지금은 <em>멋진 물건</em>의 발견에 기뻐하는 것으로 만족해야 하지만 좀 더 노력한 뒤에는 <em>멋진 물건</em>을 스스로 만들 수 있게 되리라 기대해봅니다.</p><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com1tag:blogger.com,1999:blog-269602350347003494.post-6957630194496420182010-12-24T12:53:00.001+09:002010-12-24T12:56:53.009+09:00XCALC 소스 공개되었네요.<p>꽤 오래 전에 <strong><a href="http://blog.kaisyu.com/2006/10/xcalc-rpn-calculator.html" title="'XCALC - RPN Calculator' on Kaisyu's Notes">XCALC라는 RPN 방식 계산기</a></strong>에 대해 글을 쓴 적이 있습니다. 한번 손에 익은 도구라서 그런지 간단히 계산할 일이 있으면 아직도 Windows의 기본 계산기 대신 <strong><a href="http://www.tordivel.no/xcalc/" title="XCALC Official Home">XCALC</a></strong>를 사용하고 있지요. Emacs에 내장된 계산기(<code>M-x calc</code>)도 RPN 방식이라 더 그런가봅니다.</p>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLDTVNr0pmMt18qOHywCEAWHzmYY6jmcmEsH0pbIkEjKFAnHgxl8jOV77blqgpGhN6QmWj8htgvUGJnFxq6vuVnLBBEahADEmeRgiAHzCyG2M9sYOJJbYCk9PHAiKJUua_sQe2oKMFFgE/s1600/xcalc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLDTVNr0pmMt18qOHywCEAWHzmYY6jmcmEsH0pbIkEjKFAnHgxl8jOV77blqgpGhN6QmWj8htgvUGJnFxq6vuVnLBBEahADEmeRgiAHzCyG2M9sYOJJbYCk9PHAiKJUua_sQe2oKMFFgE/s1600/xcalc.png" /></a></div>
<p>그런데, 오늘 오랜만에 XCALC 업데이트 확인 차 홈페이지 들렀다가 <strong>소스가 공개됐다</strong>는 사실을 알게 되었습니다. 특정 라이센스에 제한되지 않고(<em>심지어 GNU 스타일에도</em>) 어떤 방식으로든 원하는 대로 사용할 수 있다고 하니까 평소 계산기 구현에 관심이 있었던 분이라면 다운로드해서 살펴보는 것도 좋을 것 같습니다.</p>
<p>소스는 아마 요즘의 <strong>Microsoft Visual C++</strong>로도 빌드가 가능하겠지만 리소스를 변경하려면 적절한 수정이 필요할 것이라고 합니다. (<em>저는 이 글을 쓰고 있는 시점에서 아직 빌드해보지 않았습니다.</em>) XCALC를 개발한 분은 <strong><a href="http://en.wikipedia.org/wiki/Borland_C%2B%2B" title="'Borland C++ Compiler' on Wikipedia">Borland C++ Compiler</a></strong>를 사용했다고 하는데, XCALC 홈페이지에서도 직접 다운로드할 수 있습니다.</p><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-74063282242021649632010-12-17T09:58:00.003+09:002010-12-21T00:31:26.686+09:00Blogger 사용자 정의 도메인으로 바꾼 후 해야 할 일<p>얼마 전에 국내 모 초고속 인터넷 망 사업자에서 구글의 여러 서비스를 호스팅하는 서버 IP(<em>문제 발생 당시 <strong>74.125.71.132</strong>였고, 이 글을 쓰고 있는 현재까지 동일</em>)를 막아버리는 바람에 며칠 동안 <strong>Blogger</strong> 기반 블로그와 <strong>가젯</strong>, 그리고 <strong>크롬(Chrome) 브라우저 확장 기능</strong>들을 사용하지 못하는 일이 발생했습니다. 덕분에 아주 오래 전부터 마음 먹고 있었지만 엄두가 나질 않아서 미루고 있었던 블로그 도메인 네임 변경을 결국 이번에 하게 되었지요.
<br />
<br /></p>
<h1>블로그 도메인 변경과 IP 차단이 무슨 관계가 있나?</h1>
<p><strong>blogspot.com</strong> 하위 도메인을 사용하는 경우와 <strong>사용자 정의 도메인(Custom Domain)</strong>을 사용하는 경우 연결되는 IP가 서로 다르기 때문입니다. 사용자 정의 도메인으로 변경하게 되면 <strong><a href="http://en.wikipedia.org/wiki/Virtual_hosting" title="Virtual Hosting">Virtual Hosting</a></strong>을 위해서 네임 서버(<a href="http://en.wikipedia.org/wiki/Name_server" title="Domain Name Server">Domain Name Server</a>)에다 해당 도메인에 대한 <strong>ghs.google.com</strong> 별명(<a href="http://en.wikipedia.org/wiki/CNAME" title="CNAME record">CNAME</a>) 레코드를 추가해야 합니다. 이 글을 작성하는 시점에서 ghs.google.com의 IP는 <strong>72.14.203.121</strong>입니다. 그런데, blogspot.com 하위 도메인을 사용하는 경우에는 <strong>blogspot.l.google.com</strong>(<em>이글을 작성하는 시점에서 IP <strong>74.125.71.132</em></strong>) 주소로 연결됩니다. 즉, 또 다시 blogspot.com 하위 도메인으로 가는 IP가 차단된다고 하더라도 사용자 정의 도메인을 사용하는 블로그는 문제 없이 접속된다는 것을 의미합니다.</p>
<p>물론, ghs.google.com 사이트 IP가 차단될 가능성도 배제할 수는 없지만, 확률 상 blogspot.com 하위 도메인의 IP가 차단될 가능성이 더 크다고 봅니다. blospot.com 하위 도메인으로 워낙 다양하고 많은 블로그들이 호스팅 되고 있어서 국내법 상 민감한 주제나 유해 컨텐츠 등이 발견되는 경우에 또 다시 차단하려고 들 수도 있기 때문이죠.
<br />
<br /></p>
<h1>어떻게 사용자 정의 도메인으로 변경하나?</h1>
<p>Blogger 도움말에 <strong><a href="http://www.google.com/support/blogger/bin/answer.py?hl=kr&answer=55373" title="블로그에서 사용자 도메인 이름을 사용하려면 어떻게 해야 하나요?">사용자 정의 도메인으로 변경하는 방법</a></strong>에 대해 잘 설명하고 있으므로 여기서 자세한 설명은 생략합니다.
<br />
<br /></p>
<h1>도메인 변경 후 무엇을 해야 하나?</h1>
<p>이미 자신의 도메인 네임을 소유하고 있다면 사용자 정의 도메인으로 변경하는 절차는 그리 복잡한 것이 아니기 때문에 마음만 먹으면 단 몇 분만에 처리하는 것도 가능합니다.(<em>블로그에 사용하기 위해 새로 등록하거나 추가한 도메인 네임 정보가 전파되는 데까지는 시간이 다소 걸릴 수 있기 때문에 정상적으로 동작하려면 약간의 시간이 더 필요합니다.</em>) 문제는 변경하고 난 뒤에 신경써서 처리해야 할 일들이 제법 많다는 것이죠. 아래는 제가 이번에 사용자 정의 도메인으로 변경하면서 처리했던 일들을 기준으로 정리해본 것입니다.</p>
<h3>검색 엔진에 블로그 새 URL 등록</h3>
<p>기존에 운영하던 블로그의 도메인 네임이 변경되면 더 이상 검색 엔진에서 내 글들이 검색되지 않게 됩니다. 그 정도에서 그치는 것이 아니라 다른 사이트에 남겨져 있던 모든 링크가 다 끊어지게 됩니다. 한참 운영 중인 블로그의 도메인 네임을 변경하기 겁나는 가장 큰 이유인 것이죠. 다행히도 <span style="color: red;"><strong>Blogger에서는 blogspot.com 형식의 기존 주소에 대해 새 주소로 redirection 처리를 완벽하게 해주고 있기 때문에</strong></span> 갑작스레 내 블로그 방문자가 0이 되는 일은 발생하지 않습니다.(<em>이 redirection 서비스가 없었다면 아마 사용자 정의 도메인으로 변경하는 일은 절대 없었을 겁니다.</em>) 그러나, 그렇다고 앞으로 발행될 새 글에도 계속 기존 주소를 그대로 사용할 수는 없는 노릇이기 때문에 결국 검색 엔진에 새로 변경된 주소를 등록해주어야 합니다.</p>
<ul>
<li><p><strong>구글(Google)</strong><br />
가장 간단하게는 그저 URL을 추가하기만 하면 됩니다.</p>
<blockquote>
<p><a href="http://www.google.com/addurl" title="Google AddURL">http://www.google.com/addurl</a></p>
</blockquote>
<p>또는 <strong>구글 웹마스터 도구</strong>에서 사이트를 추가하는 방법도 있습니다. 더 상세한 설정을 위해서는 웹마스터 도구가 낫지만, <strong>Google 계정이 필요</strong>합니다.</p>
<blockquote>
<p><a href="https://www.google.com/webmasters/tools" title="Google Webmaster Tools">https://www.google.com/webmasters/tools</a></p>
</blockquote></li>
<li><p><strong>네이버(Naver)</strong><br />
검색등록 페이지로 가서 블로그 주소와 간단한 정보 몇 가지만 입력하면 됩니다.</p>
<blockquote>
<p><a href="https://submit.naver.com" title="네이버 검색등록">https://submit.naver.com</a></p>
</blockquote></li>
<li><p><strong>다음(Daum)</strong><br />
역시 네이버와 거의 유사합니다. 검색등록 페이지에서 블로그 주소와 간단한 정보 몇 가지만 입력하면 됩니다.</p>
<blockquote>
<p><a href="https://register.search.daum.net" title="다음 검색등록">https://register.search.daum.net</a></p>
</blockquote></li>
<li><p><strong>빙(Bing)</strong><br />
<strong>Microsoft</strong>의 검색 엔진 <strong>Bing</strong>에서는 네이버나 다음과 같이 간편하게 등록할 수 있는 방법을 아직 찾지 못했습니다. 대신, <strong>Bing Webmaster Tools</strong>에서 블로그 사이트 주소를 등록했습니다. <strong>Windows Live 계정이 필요</strong>합니다.</p>
<blockquote>
<p><a href="http://www.bing.com/toolbox/webmasters/" title="Bing Webmaster Tools">http://www.bing.com/toolbox/webmasters</a></p>
</blockquote>
<p>한 가지 주의할 점으로, Bing은 국내에서 다음과 검색 제휴가 되어 있기 때문에 다음 쪽으로 redirection 됩니다. 이럴 때는 우측 상단에 있는 <strong><a href="http://www.bing.com/worldwide.aspx?FORM=WHLH&mkt=ko-kr" title="Worldwide Bing">Worldwide Bing</a></strong> 링크를 클릭하여 <strong>미국 - 영어</strong>를 선택해주면 됩니다.</p></li>
<li><p><strong>야후(Yahoo) & 네이트(Nate)</strong><br />
이 두 곳에는 아직 등록을 하지 않았습니다. 검색등록을 하려고 하니 주소와 전화번호 같은 개인정보를 요구하더군요. 요즘처럼 세상이 뒤숭숭할 때는 제법 믿을 만해 보이는 곳이라고 하더라도 개인정보를 내주기가 꺼려져서 말입니다. 아무튼 검색등록 페이지는 각각 다음과 같습니다.</p>
<blockquote>
<p><strong>야후:</strong> <a href="https://kr.suggest.yahoo.com/" title="야후 홈페이지 등록">https://kr.suggest.yahoo.com</a><br />
<strong>네이트:</strong> <a href="http://add.nate.com/" title="NATE 홈페이지 등록">http://add.nate.com</a></p>
</blockquote></li>
</ul>
<h3>Feed 주소 변경</h3>
<p>블로그 사이트의 도메인 네임이 변경되면 <strong>Feed URL</strong>도 따라서 변경이 됩니다. 기존 구독자를 잃게 되는 것이죠. 저는 이런 상황에 대비하고 더 나은 feed 관련 서비스를 사용하기 위해 예전부터 <strong><a href="http://feedburner.google.com" title="Google feedburner">FeedBurner</a></strong>를 사용해왔습니다. 그리고, Blogger에서는 외부 Feed URL을 명시적으로 지정해줄 수 있어서 구독자가 어떤 Feed URL을 구독하는지에 상관 없이 항상 지정한 Feed URL로 <strong>redirection</strong> 되도록 강제할 수 있습니다.</p>
<blockquote>
<p>FeedBurner의 Feed URL을 외부 Feed URL로 지정하고 싶은 경우 아래와 같이 이동하여 FeedBurner에서 제공하는 Feed URL을 기입하면 됩니다.<br /><br />
<strong>대시보드 -> 설정 -> 사이트 피드 -> 게시물 피드 외부 생성 URL</strong><br /><br />
예를 들어, 이 블로그는 <strong>http://feeds.feedburner.com/KaisyusNotes</strong> 라고 기입되어 있습니다.</p>
</blockquote>
<p>결국, 이번에 블로그의 도메인 네임이 변경되면서 Feed URL과 관련하여 수정한 것은 FeedBurner의 <strong>Original Feed</strong> 주소뿐이었습니다.</p>
<h3>메타 블로그 서비스 등록 정보 변경</h3>
<p>특별히 메타 블로그 서비스에 가입해두지 않았다면 이 부분은 그냥 건너 뛰어도 상관 없습니다. 이 블로그는 아래 세 가지 서비스에 가입한 상태라 변경된 도메인 네임에 대해 적절한 조치를 취해야 했습니다.</p>
<ul>
<li><strong><a href="http://v.daum.net/" title="Daum View">다음 뷰(Daum View)</a></strong><br />
접속주소를 변경할 수 있는 방법을 찾지 못했습니다. 문의해볼까 하다가 답변을 받는 데까지 꽤 오래 걸릴 것 같아서 포기하고 그냥 기존에 등록된 블로그 정보를 삭제한 다음 새로 등록했습니다. 덕분에 예전에 발행했던 글들의 정보가 모두 산화되고 말았지요. :-(<br />
이 글을 쓰고 나서 좀 있다가 다음 뷰를 천천히 둘러보았더니 블로그 주소가 변경된 경우에 대해 수정 요청하는 방법이 <a href="http://v.daum.net/user/join?tab=3" title="View FAQ">FAQ</a>에 나와 있더군요. 쩝... <strong><em>-- 2010-12-21</em></strong></li>
<li><p><strong><a href="http://mixsh.com" title="Mixsh">믹시(Mixsh)</a></strong><br />
친절하게도 설정에서 접속주소 변경에 대한 항목을 제공하고 있었습니다.<br /></p>
<blockquote>
<p><strong>마이믹시 -> 나의 블로그 -> 블로그 관리 -> 정보 수정 -> 접속주소 변경요청</strong></p>
</blockquote>
<p>그러나 자동으로 즉시 처리되는 것은 아니고, 신청을 하면 운영자 확인 후 적용해주는 방식입니다.</p></li>
<li><strong><a href="http://olpost.com/" title="OLPOST">올포스트(Olpost)</a></strong><br />
다음 뷰와 마찬가지로 변경된 도메인을 적용할 수 있는 방법이 제공되지 않아서, 고객지원 게시판에 직접 문의를 했습니다. 그러자 다음 날 운영자님이 친절하게 답변을 주시고 바로 변경 처리해주시더군요. 아직까지는 접속주소 변경에 대해 자동으로 처리해주는 기능을 제공하지 않고 운영팀에 요청하면 확인 후 처리해주는 방식이라고 합니다.</li>
</ul>
<h3>DISQUS 댓글 서비스 마이그레이션</h3>
<p>Blogger는 댓글 시스템이 비교적 빈약한 편입니다. 근래에 대시보드에서 댓글을 관리할 수 있는 항목이 생기긴 했지만, 댓글 형태는 크게 달라지지 않아서 아직도 부족함을 많이 느낍니다. 그래서, 이 블로그에는 기본 댓글 시스템 대신 <strong><a href="http://disqus.com" title="DISQUS">DISQUS</a></strong>를 장착해서 사용하고 있습니다.</p>
<p>기본 댓글 시스템을 그대로 사용하고 있었다면 블로그의 도메인 네임이 변경된다고 하더라도 별도로 처리해주어야 할 일이 없었겠지만, DISQUS는 블로그 글의 <strong>고유주소(<a href="http://en.wikipedia.org/wiki/Permalink" title="Permalink">Permalink</a>)</strong>를 기반으로 댓글을 관리하기 때문에 변경된 블로그 주소에 맞게 적절히 <strong><a href="http://disqus.com/admin/tools/migrate/" title="DISQUS Migrate Threads">마이그레이션</a></strong> 해주어야 했습니다.</p>
<blockquote>
<p><strong>DISQUS -> Admin -> Tools -> Migrate Threads -> Domain Migration Wizard</strong></p>
</blockquote>
<p>댓글 마이그레이션은 단계적으로 진행되면서, 처음에 현재 댓글이 등록된 도메인들을 보여주는데 그 중에서 변경할 필요가 있는 도메인을 선택한 다음 바뀐 도메인을 입력해주면 됩니다. 그리곤 마이그레이션이 완료될 때까지 기다리기만 하면 됩니다.</p>
<h3>검색 가젯 변경</h3>
<p>현재 Blogger에서는 구글 검색 엔진에 기반한 <strong>검색 가젯</strong>을 제공하고 있습니다. 그러나, 도메인 네임을 변경하고 나면 변경된 주소에 대응하는 정보는 아직 하나도 수집되지 않았기 때문에 검색 결과가 0입니다. 사실, 이 블로그까지 방문자가 찾아오는 것도 흔한 일은 아니지만, 찾아와서 이 블로그 우측 열 또는 상단 Navbar에 장착된 검색 가젯을 이용해 검색까지 할 확률은 매우 낮습니다. 그리고, 좀 참고 기다리면 언젠가는 구글 검색 봇이 변경된 주소에 대한 내용도 수집해줄 겁니다. 그러나, 뭔가 불안합니다. 검색이 제대로 되어야 할 것만 같은 압박이 심장을 짓누릅니다.</p>
<p>이 상황에서 제가 대안으로 선택한 것이 <strong><a href="http://www.google.com/cse/" title="Google Custom Search">Google 맞춤 검색</a></strong>이었습니다. 구글 맞춤 검색은 설정을 하기에 따라서 다양하게 활용이 가능하지만, 기본적으로 내 블로그와 개인 홈페이지만을 위한 전용 검색 엔진을 만들 수 있습니다. 검색할 사이트를 지정하고 디자인을 선택한 다음 검색 가젯 코드를 가져와 블로그의 적절한 위치에 추가하기만 하면 되는 것이죠.</p>
<p>저는 제가 운영하는 사이트들을 대상으로 이미 만들어 둔 맞춤 검색 엔진이 있었습니다. 그래서, 검색 가젯 코드만 가져와서 블로그에 장착했습니다. 이때 <span style="color: red;"><strong>검색할 사이트 목록에 예전 블로그 주소를 그대로 두고 새 주소를 추가하는 것이 핵심</strong></span>입니다. 그러면 아직 새 주소에 대한 내용이 검색 엔진에 수집되지 않았다 하더라도 예전 주소에 대한 검색 결과가 나타날 것이고 사용자가 그 주소를 클릭하면 새 주소로 redirection 될 것이기 때문입니다.</p>
<p>그외에 이 블로그뿐만 아니라 관련이 있는 다른 사이트들의 검색 결과도 함께 볼 수 있다는 점도 장점으로 꼽을 수 있습니다.</p>
<h3>웹로그 분석 서비스에서 URL 정보 변경</h3>
<p>블로그를 운영하시는 분이라면 블로그 방문자에 대한 상세한 통계를 위해 웹로그 분석/통계 서비스를 적어도 하나 쯤은 사용할 겁니다. 요즘은 블로그 서비스 자체 통계도 대부분 제공하고 있지만, 더 자세한 분석 결과를 원한다면 별도의 웹로그 분석/통계 서비스를 이용하는 편이 더 낫다고 봅니다. 이 블로그도 그런 이유로 아래 두 가지 서비스를 이용하고 있습니다.</p>
<ul>
<li><strong><a href="http://www.google.com/analytics/" title="Google Analytics">구글 웹로그 분석(Google Analytics)</a></strong></li>
<li><strong><a href="http://inside.daum.net" title="다음 웹인사이드">다음 웹인사이드</a></strong></li>
</ul>
<p>이 서비스들은 모두 설정에서 기존에 등록된 사이트의 주소를 변경된 주소로 고쳐주기만 하면 되었습니다.</p>
<h3>Counter 서비스 URL 등록 정보 변경</h3>
<p>블로그 서비스에 따라서 카운터를 기본 제공하는 곳도 있지만, Blogger는 아직 제공하지 않습니다.(<em>가젯 중에 <strong>블로그 통계</strong>라는 것이 있지만, Page View 정도만 보여주는 수준이라 일반적인 카운터 서비스와는 좀 다릅니다.</em>) 그래서, <strong><a href="http://statcounter.com" title="StatCounter.com">StatCounter</a></strong>나 <strong><a href="http://www.sitemeter.com" title="SiteMeter.com">SiteMeter</a></strong> 같은 외부 카운터 서비스를 많이들 이용합니다. 저는 StatCounter(<em>SiteMeter를 사용해오다 페이지 로딩이 많이 느려지는 원인 중 하나인 것을 발견하고는 최근에 StatCounter로 변경했습니다.</em>)를 사용하고 있는데, 변경된 도메인 네임에 따라서 사이트 등록 정보를 변경해주었습니다. 그뿐입니다. ;-)</p>
<h3>그외 예전 블로그 주소가 사용된 곳을 찾아 새 주소로 변경</h3>
<p>기존 블로그로 이어지는 링크는 한두 개가 아니고 외부에서 링크를 걸어둔 것은 내가 직접 수정할 수도 없기 때문에 일일이 다 찾아서 변경하는 것은 거의 불가능합니다. 그러므로, 본인 소유의 다른 사이트에 걸린 링크, 이메일(email) 서명(signature)에 기록된 링크, 각종 소셜 네트워크 사이트나 포털 사이트 등의 개인 프로필에 등록된 블로그 주소 정도만 찾아서 변경해주면 되겠지요. 사실, Blogger의 기존 주소 redirection 기능이 있어서 딱히 급할 것은 없으므로 눈에 띄는 대로 하나씩 차차 변경해가면 됩니다.
<br />
<br /></p>
<h1>마치며...</h1>
<p>검색 엔진에 새 블로그 주소 등록 신청을 하고 네이버와 다음에선 각각 등록 처리되었다는 답 메일을 받았습니다. 그러나, 웹크롤러(web-crawler)가 변경된 주소의 내용을 수집하는 데까지는 아직 더 많은 시간이 걸릴 모양입니다. 검색을 해보면 여전히 예전 주소로 된 검색 결과들이 주를 이루고, 간혹 변경된 주소로 된 결과가 한두 개 끼어 있는 정도입니다.</p>
<p>밀린 일 처리하듯 급하게 블로그 도메인을 변경한 탓인지 크게 바뀐 것도 없으면서 아직도 정리되지 않은 듯 어수선합니다. 그래도 좋은 경험이 되었던 것만은 확실합니다. 다만, 이제 더 이상은 블로그 주소를 변경하는 일이 없었으면 좋겠네요~ ;-)</p><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-83861367254070351282010-12-08T21:49:00.002+09:002011-03-29T10:34:58.370+09:00OpenSSL 1.0.0c & 0.9.8q Win32 Binary<b>OpenSSL</b> <b><span class="Apple-style-span" style="color: red;">1.0.0c</span></b> 버전과 <b><span class="Apple-style-span" style="color: red;">0.9.8q</span></b> 버전이 함께 릴리즈 되었습니다.<br />
<br />
여기서 제공하는 binary는 <b>MS Visual C++ 2008 Express Edition</b>으로 빌드되었기 때문에 MS VC++ Runtime 2008 SP1이 필요합니다. 현재 시스템에 아직 설치되어 있지 않다면 아래 링크에서 다운로드한 후 설치하시면 됩니다.<br />
<b>LINK:</b> <a href="http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en">Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)</a><br />
<br />
<blockquote class="notice">
더 최신 버전의 바이너리가 릴리즈 되었습니다.<br />
아래 링크를 확인하세요.<br />
<b>LINK:</b> <a href="http://blog.kaisyu.com/search/label/OpenSSL?max-results=3">Kaisyu's Notes: OpenSSL</a></blockquote>
<br />
<strike>OpenSSL <b>1.0.0c</b> 버전 Win32 binary는 아래에서 받으세요.<br />
</strike><br />
<blockquote>
<strike><b>LINK:</b> openssl-1.0.0c-win32-msvc90.zip (from <b>DropBox</b>)</strike><br />
<strike><b>LINK:</b> openssl-1.0.0c-win32-msvc90.zip (from <b>MediaFire</b>)</strike><br />
<strike><b>LINK:</b> openssl-1.0.0c-win32-msvc90.zip (from <b>SkyDrive</b>)</strike></blockquote>
<strike>
<br />
OpenSSL <b>0.9.8q</b> 버전 Win32 binary는 아래에서 받으세요.<br />
<blockquote>
<b>LINK:</b> openssl-0.9.8q-win32-msvc90.zip (from <b>DropBox</b>)<br />
<b>LINK:</b> openssl-0.9.8q-win32-msvc90.zip (from <b>MediaFire</b>)<br />
<b>LINK:</b> openssl-0.9.8q-win32-msvc90.zip (from <b>SkyDrive</b>)</blockquote>
</strike>
Binary build에 사용된 환경은 다음과 같습니다.<br />
<blockquote>
<b>Microsoft Visual C++ Express Edition 2008 SP1</b> - <a href="http://www.microsoft.com/express/Downloads/#2008-Visual-CPP">http://www.microsoft.com/express/Downloads/#2008-Visual-CPP</a><br />
<b>NASM</b> - <a href="http://www.nasm.us/">http://www.nasm.us</a><br />
<b>ActivePerl</b> - <a href="http://www.activestate.com/activeperl/">http://www.activestate.com/activeperl/</a>
</blockquote>
<br />
<br />
참고로, 제가 빌드해서 배포하는 것 외에 <b>OpenSSL 공식 홈페이지에 게시된 binary 배포본의 링크</b>는 아래에서 확인하실 수 있습니다.<br />
<blockquote>
<b>LINK:</b> <a href="http://www.openssl.org/related/binaries.html">http://www.openssl.org/related/binaries.html</a></blockquote>
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-28029406821325919772010-12-06T23:56:00.001+09:002010-12-27T09:24:53.040+09:00SBCL 1.0.45 Win32 Binary InstallerOpen-source Common Lisp 구현체인 <a href="http://sbcl.sourceforge.net/" linkindex="49" set="yes"><span style="font-weight: bold;">SBCL</span></a> 1.0.45 버전의 Win32 binary입니다.<br />
<br />
<a href="http://sbcl-internals.cliki.net/" linkindex="51" set="yes"><span style="font-weight: bold;">SBCL Internals</span></a> 페이지에 나와 있는 <a href="http://sbcl-internals.cliki.net/Build%20on%20Windows" linkindex="52" set="yes"><span style="font-weight: bold;">Windows binary build 방법</span></a>을 참고했습니다.<br />
<br />
Binary는 다음 링크에서 다운로드 하실 수 있습니다.<br />
<br />
<blockquote>
<b>LINK</b>: <a href="http://sbcl-for-windows.googlecode.com/files/sbcl-1.0.45-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.45 Win32 Binary</span></a> (<b>Google Code</b>)<br /><b>Mirror 1</b>: <a href="http://www.mediafire.com/file/js4ayv4uospij57/sbcl-1.0.45-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.45 Win32 Binary</span></a> (<b>MediaFire</b>)<br />
<b>Mirror 2</b>: <a href="http://dl.dropbox.com/u/7871204/SBCL/sbcl-1.0.45-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.45 Win32 Binary</span></a> (<b>DropBox</b>)<br />
<b>Mirror 3</b>: <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/SBCL/SBCL%201%5E_0%5E_45%20Win32%20Binary/sbcl-1.0.45-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.45 Win32 Binary</span></a> (<b>SkyDrive</b>)</blockquote>
<br />
아직 SBCL의 모든 부분이 Windows 환경을 완벽하게 지원하지는 못하기 때문에 몇몇 contrib 모듈은 포함이 되지 않았습니다. 이 버전에서 포함되지 않은 모듈은 아래와 같습니다.<br />
<br />
<b>sb-simple-streams</b><br />
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-37933816034963874512010-11-24T12:29:00.003+09:002011-03-29T10:32:29.092+09:00OpenSSL 1.0.0b & 0.9.8p Win32 Binary<b>OpenSSL</b> 1.0.0a 버전과 0.9.8o 버전에서 중요한 버그 및 보안 이슈가 수정되어 <b><span class="Apple-style-span" style="color: red;">1.0.0b</span></b> 버전과 <b><span class="Apple-style-span" style="color: red;">0.9.8p</span></b> 버전이 함께 릴리즈 되었습니다.<br />
<br />
여기서 제공하는 binary는 <b>MS Visual C++ 2008 Express Edition</b>으로 빌드되었기 때문에 MS VC++ Runtime 2008 SP1이 필요합니다. 현재 시스템에 아직 설치되어 있지 않다면 아래 링크에서 다운로드한 후 설치하시면 됩니다.<br />
<b>LINK:</b> <a href="http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en">Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)</a><br />
<br />
<blockquote class="notice">
더 최신 버전의 바이너리가 릴리즈 되었습니다.<br />
아래 링크를 확인하세요.<br />
<b>LINK:</b> <a href="http://blog.kaisyu.com/search/label/OpenSSL?max-results=3">Kaisyu's Notes: OpenSSL</a></blockquote>
<br />
<strike>OpenSSL <b>1.0.0b</b> 버전 Win32 binary는 아래에서 받으세요.<br />
<blockquote>
<b>LINK:</b> openssl-1.0.0b-win32-msvc90.zip (from <b>DropBox</b>)<br />
<b>LINK:</b> openssl-1.0.0b-win32-msvc90.zip (from <b>MediaFire</b>)<br />
<b>LINK:</b> openssl-1.0.0b-win32-msvc90.zip (from <b>SkyDrive</b>)</blockquote>
<br />
OpenSSL <b>0.9.8p</b> 버전 Win32 binary는 아래에서 받으세요.<br />
<blockquote>
<b>LINK:</b> openssl-0.9.8p-win32-msvc90.zip (from <b>DropBox</b>)<br />
<b>LINK:</b> openssl-0.9.8p-win32-msvc90.zip (from <b>MediaFire</b>)<br />
<b>LINK:</b> openssl-0.9.8p-win32-msvc90.zip (from <b>SkyDrive</b>)</blockquote>
<br /></strike>
Binary build에 사용된 환경은 다음과 같습니다.<br />
<b>Microsoft Visual C++ Express Edition 2008 SP1</b> - <a href="http://www.microsoft.com/express/Downloads/#2008-Visual-CPP">http://www.microsoft.com/express/Downloads/#2008-Visual-CPP</a><br />
<b>NASM</b> - <a href="http://www.nasm.us/">http://www.nasm.us</a><br />
<b>ActivePerl</b> - <a href="http://www.activestate.com/activeperl/">http://www.activestate.com/activeperl/</a><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-87466280481316662382010-11-07T00:26:00.000+09:002010-11-07T00:26:05.481+09:00SBCL 1.0.44 Win32 Binary InstallerOpen-source Common Lisp 구현체인 <a href="http://sbcl.sourceforge.net/" linkindex="49" set="yes"><span style="font-weight: bold;">SBCL</span></a> 1.0.44 버전의 Win32 binary입니다.<br />
<br />
<a href="http://sbcl-internals.cliki.net/" linkindex="51" set="yes"><span style="font-weight: bold;">SBCL Internals</span></a> 페이지에 나와 있는 <a href="http://sbcl-internals.cliki.net/Build%20on%20Windows" linkindex="52" set="yes"><span style="font-weight: bold;">Windows binary build 방법</span></a>을 참고했습니다.<br />
<br />
Binary는 다음 링크에서 다운로드 하실 수 있습니다.<br />
<br />
<blockquote>
<b>LINK</b>: <a href="http://www.mediafire.com/file/iv2a7j1bbv93c44/sbcl-1.0.44-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.44 Win32 Binary</span></a> (<b>MediaFire</b>)<br />
<b>Mirror 1</b>: <a href="http://dl.dropbox.com/u/7871204/SBCL/sbcl-1.0.44-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.44 Win32 Binary</span></a> (<b>DropBox</b>)<br />
<b>Mirror 2</b>: <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/SBCL/SBCL%201%5E_0%5E_44%20Win32%20Binary/sbcl-1.0.44-x86-windows-binary.rar"><span class="Apple-style-span" style="color: #3d85c6;">SBCL 1.0.44 Win32 Binary</span></a> (<b>SkyDrive</b>)</blockquote>
<br />
아직 SBCL의 모든 부분이 Windows 환경을 완벽하게 지원하지는 못하기 때문에 몇몇 contrib 모듈은 포함이 되지 않았습니다. 이 버전에서 포함되지 않은 모듈은 아래와 같습니다.<br />
<br />
<b>sb-simple-streams</b><br />
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-83257553658162136892010-11-04T14:34:00.000+09:002010-11-04T14:34:53.427+09:00[Emacs] Windows 환경에서 폭이 일정한 글꼴 설정하기<b><span class="Apple-style-span" style="color: red;">주의)</span></b> 이 글은 삽질을 바탕으로 한 경험적 결과를 정리한 것이므로 다른 분들의 환경에서는 동일한 결과를 보여주지 않을 수도 있습니다. 만약 다른 결과가 나타났다면 댓글 부탁 드립니다. 혹은 더 나은 방법에 대한 조언이나 잘못된 부분에 대한 지적도 매우 환영합니다. (<i>저는 Windows 7 환경에서 Emacs 소스 저장소로부터 직접 소스를 받아 주기적으로 빌드해서 사용하고 있습니다.</i>)<br />
<br />
<hr />
<br />
<b>Emacs 23.x</b> 이후 버전부터는 <b>Truetype 글꼴(TTF)</b>을 특별한 어려움 없이 바로 사용할 수 있습니다. 그래서, 다른 에디터에서 즐겨 사용하는 글꼴을 Emacs에서도 그대로 설정해서 사용하는 것이 가능한데, 얼마 전까지는 <b><a href="http://www.microsoft.com/downloads/en/details.aspx?familyid=22E69AE4-7E40-4807-8A86-B3D36FAB68D3&displaylang=en">Consolas</a></b>와 <b><a href="http://ko.wikipedia.org/wiki/%EB%A7%91%EC%9D%80_%EA%B3%A0%EB%94%95">맑은 고딕</a> </b>조합으로 쭉 써왔습니다. 그렇지만, 맑은 고딕이 가변폭 글꼴이다보니 고정폭이 꼭 필요한 편집 상황에서 한글과 영문을 섞어 쓰게 되면 간격이 일정하지 않아 꽤 보기 불편하더군요. 그래서, 폭이 일정하고 영문과 한글 글자 폭 비율이 [<b>1 : 2</b>]가 되는 글꼴을 찾아보기로 결심하고 삽질을 조금 한 끝에 몇 가지 조합을 찾을 수 있었습니다.<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">1. 나눔고딕코딩</span></b><br />
<br />
Windows의 <b>메모장</b>에서 제가 즐겨 쓰는 <a href="http://dev.naver.com/projects/nanumfont">나눔고딕코딩</a> 글꼴은 그 자체로 한글과 영문을 모두 포함하고 있고 글자 폭의 비율이 일정하게 유지되므로, Emacs에서도 마찬가지로 특별히 고민할 필요 없이 원하는 크기로 설정해서 사용할 수 있습니다. 코딩을 위해 설계되었고 무료로 배포되는 고마운 글꼴이지요. 하지만, 제 개인적인 입장에서, 영문 글자가 자신의 공간에 꽉 차고 폭에 비해 키가 큰 편이라 소스 코드 내용을 볼 때 조금 답답한 느낌이 들더군요. 그리고, 기울임 글꼴이 별도로 포함되어 있지 않아서 Emacs에서 기울임 효과를 볼 수 없습니다.<br />
<br />
설정하는 방법은 매우 간단합니다. 아래는 나눔고딕코딩 13 픽셀로 설정한 예입니다. 글꼴 크기를 변경하려면 13 부분을 원하는 크기로 바꿔주면 됩니다.<br />
<pre class="code">(set-face-font 'default "-outline-NanumGothicCoding-normal-normal-normal-mono-<span class="Apple-style-span" style="color: red;">13</span>-*-*-*-c-*-iso10646-1")
</pre>
<br />
<b><span class="Apple-style-span" style="font-size: large;">2. Consolas + 나눔고딕코딩</span></b><br />
<br />
나눔고딕코딩의 한글 글꼴은 맑은 고딕에 비해서 그리 나쁜 편이 아니기 때문에 나눔고딕코딩의 한글 글꼴과 <a href="http://www.microsoft.com/downloads/en/details.aspx?familyid=22E69AE4-7E40-4807-8A86-B3D36FAB68D3&displaylang=en">Consolas</a>의 영문 글꼴을 사용하면 상당히 만족스러운 조합이 됩니다. 한 가지 안타까운 점은 글꼴의 크기가 15 픽셀 이상이 되면 영문과 한글 글자의 폭 비율이 더 이상 [1 : 2]로 유지되지 않는 현상이 발생합니다. 제가 실험해본 결과에 따르면 <b>13 이하의 홀수 픽셀 크기</b>에 대해서 원하는 결과를 얻을 수 있었습니다. (<i>13, 11, 9 등</i>)<br />
<pre class="code">(set-face-font 'default "-outline-Consolas-normal-normal-normal-mono-<span class="Apple-style-span" style="color: red;">13</span>-*-*-*-c-*-iso10646-1")
(set-fontset-font "fontset-default" 'hangul '("NanumGothicCoding" . "unicode-bmp"))</pre>
<br />
<b><span class="Apple-style-span" style="font-size: large;">3. Consolas + 돋움체(굴림체, 바탕체, 궁서체)</span></b><br />
<br />
Consolas + 나눔고딕코딩 조합이 좋기는 하지만, 글꼴 크기가 15 픽셀 이상이 되면 글자 폭 비율이 어긋나버리는 현상 때문에 대안으로 찾은 한글 글꼴이 Windows 시스템 기본 글꼴들이었습니다. <b>~~체</b>로 끝나는 고정폭 한글 글꼴을 사용하면 Consolas와 조합했을 때 [1 : 2] 비율을 잘 유지합니다. (<i>물론, 글꼴 크기가 홀수 픽셀인 경우만</i>)<br />
<br />
아래는 Consolas + 돋움체 조합에 15 픽셀 크기로 설정한 예입니다. 만약 돋움체 대신 다른 글꼴을 사용하고 싶다면 굴림체(Gulimche), 바탕체(Batangche), 궁서체(Gungsuhche) 중에서 선택 가능합니다.<br />
<pre class="code">(set-face-font 'default "-outline-Consolas-normal-normal-normal-mono-<span class="Apple-style-span" style="color: red;">15</span>-*-*-*-c-*-iso10646-1")
(set-fontset-font "fontset-default" 'hangul '("<span class="Apple-style-span" style="color: red;">Dotumche</span>" . "unicode-bmp"))
</pre>
<br />
<b><span class="Apple-style-span" style="font-size: large;">4. 다른 영문 글꼴에 대한 시도</span></b><br />
<br />
위 조합 외에 시도해본 영문 글꼴에는 프로그래머를 위한 글꼴로 제법 이름이 알려져 있는 <a href="http://dejavu-fonts.org/">DejaVu Sans Mono</a>, <a href="https://fedorahosted.org/liberation-fonts/">Liberation Mono</a>, Courier New, <a href="http://www.ms-studio.com/FontSales/anonymous.html">Anonymous</a>, <a href="http://en.wikipedia.org/wiki/Monaco_(typeface)">Monaco</a> 등이 있습니다. 그러나, 한글과 글자 폭 비율이 정확하게 [1 : 2]가 되는 한글 글꼴을 찾을 수가 없었습니다. 더구나 고정폭 한글 글꼴의 경우는 그 존재 자체가 매우 드물어서 위에서 사용했던 글꼴 외에 적당한 것을 발견하지 못했습니다. 매우 슬픈 일이지요.<br />
<br />
전 '나눔고딕코딩 한글 글꼴'과 '15 픽셀의 글꼴 크기' 중에서 갈등하다 결국 '15 픽셀의 글꼴 크기'를 선택했습니다. 15 픽셀 그 아래로 내려가면 글자가 너무 작게 보여서 모니터 앞으로 고개를 내밀게 되더군요. :-$<br />
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com0tag:blogger.com,1999:blog-269602350347003494.post-66403408013241002962010-10-23T02:05:00.006+09:002010-12-28T16:41:17.543+09:00Pidgin 2.7.4 네이트온 플러그인<code><b>Pidgin 2.7.9</b></code> 버전이 출시되었지만, 네이트온 플러그인 빌드에 영향을 줄 수 있는 변경 사항이 없고, smiley 역시 변경된 내용이 없습니다. 그래서, 2.7.4 버전용 네이트온 플러그인을 그대로 사용하셔도 됩니다. -- <i><span class="Apple-style-span" style="color: red;">2010.12.28</span></i><br />
<br />
<hr />
<br />
<b>Pidgin 2.7.4</b> 버전이 출시되어 이 버전에 대응하는 네이트온 플러그인을 빌드했습니다.<br />
<br />
다운로드 링크입니다.<br />
<blockquote>
<b>LINK</b>: <a href="http://www.mediafire.com/file/5hc4yyvln1f27pn/pidgin-nateon-2.7.4-svn147+multi-chat.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.7.4-svn147+multi-chat.exe</span></a> (<b>MediaFire</b>)<br />
<b>Mirror 1</b>: <a href="http://dl.dropbox.com/u/7871204/pidgin-nateon/pidgin-nateon-2.7.4-svn147%2Bmulti-chat.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.7.4-svn147+multi-chat.exe</span></a> (<b>Dropbox</b>)<br />
<b>Mirror 2</b>: <a href="http://cid-ab3d364d1e6a27e7.office.live.com/self.aspx/Pidgin%20NateOn%20Protocol%20Plugin/pidgin-nateon-2.7.4-svn147%5EMmulti-chat.exe"><span class="Apple-style-span" style="color: #3d85c6;">pidgin-nateon-2.7.4-svn147+multi-chat.exe</span></a> (<b>SkyDrive</b>)</blockquote>
<br />
이 글에서는 이번 버전에서 달라진 점과 다운로드 링크만 제공하므로, Pidgin에서 네이트온 플러그인을 사용하는 자세한 방법은 아래 글을 참고해주세요.<br />
<blockquote class="notice">
<b>LINK</b>: <a href="http://kaisyu.blogspot.com/2010/06/pidgin-windows.html"><span class="Apple-style-span" style="color: #3d85c6;">Pidgin 네이트온 플러그인 (Windows) 및 활용 팁</span></a></blockquote>
<br />
네이트온 플러그인의 소스는 달라진 것이 없고, Pidgin 2.7.4 대응 버전에서 변경된 내용은 다음과 같습니다.<br />
<ul>
<li>Default smiley 내용이 변경되어 NateOnPlus 이모티콘 팩에 변경 사항 반영되었습니다.</li>
</ul>
<br /><div class="blogger-post-footer"><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="크리에이티브 커먼즈 라이선스" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />이 저작물은 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 3.0 Unported 라이선스</a>에 따라 이용할 수 있습니다.</p></div>Kaisyuhttp://www.blogger.com/profile/08330373979779824943noreply@blogger.com10