Archive for the 'Computer' Category

정태영

얼마전 개인적인 이유로 파워북을 팔려고 시도하면서, 내 개인적인 소스들이 담겨있던 ~/Source 폴더가 유실되어버렸다. 뭐 사실 대부분의 소스들은 짤막한 테스팅 코드들이었기 때문에 큰 문제는 없었지만 아쉽게도 Mac 용으로 개발해두었던 YUV Player 의 소스가 소실되어버렸다.

사실 내가 개발했던 YUV Player 의 경우 UI 랑 관련된 부분을 제외하고는 대부분 Platform independent 한 OpenGL + C 의 조합으로 개발되었기 때문에 다른 플랫폼에 이식하는게 큰 어려움은 없을거라 생각했지만 막상 MFC 기반 프로젝트로 생성해두다 보니 다른 플랫폼으로 이식하기 위해서는 소스를 복사한 뒤 또 한 번의 노가다가 필요할 수 밖에 없는 상황이 되어버렸다.

요 근래 논문을 쓰기 위한 실험 코드들도 언제 묶어놓은지 모를 아카이브들로 인해 다양한 버젼의 소스들이 공존하고 있는 상황인데 -_- 이 상황을 계속 끌어나가면 안될 것 같다.

지금까지 내 SVN Repository 는 http://svn.unfix.net/ 을 통해 공개해왔기 때문에 소스가 정리되지 않은 상황에서 commit 을 하는 건 자제해 왔지만, 이제는 비공개 svn repository 를 하나 만들어서 소스가 정리되어 있지 않거나 공개할 수 없는 소스들을 관리해야할 것 같다.

맥용 YUV Player 는 날렸지만 -_-;; Cocoa 를 이용하는 방법 등은 이미 YUV Player 를 개발하면서 이미 습득했기 때문에 금방 복구할 수 있을 듯…

귀찮더라도 Private SVN 을 업데이트하는 수고는 잊지 말아야겠다.

정태영

사실 저나 제 주위 사람들 말고는 쓰는 사람이 거의 없는거 같긴 하지만 하여튼 메모리 릭을 일으키는 몇 가지 버그를 잡았습니다.

  1. ::GetDC(hWnd) 후 ::ReleaseDC(hWnd,dc) 를 호출 하지 않아서 생기는 메모리 릭
  2. gdTexImage2D 를 반복 호출해서 생기게 되는 메모리 릭

정확하게 설명하면 위와 같구요. ::GetDC 로 받아온 Device Context 는 “꼭” ::ReleaseDC 를 호출해줘야 한다는 msdn 님의 가르침에 따라, 약간의 코드를 추가해줬습니다.

또한 gdTexImage2D 를 반복해서 호출하면 이전 텍스쳐 데이타가 사용하던 메모리 영역은 해제가 될 줄 알았는데, 실제로는 그렇지가 않네요. 텍스쳐 사이즈가 달라지는 경우엔 glDestroyTexture 후 glGenTexture, glBindTexture, glTexImage2D 를 차례로 호출해줘야 하고, 사이즈가 달라질 필요가 없는 경우라면 gdTexSubImage2D 를 사용하면 된답니다. 어려운 openGL 세상이에요.

자세한 수정 사항은 제 trac 페이지에서 확인하심 될 듯~
http://trac.unfix.net/browser/yuvplayer/win/yuvplayer/OpenGLView.cpp

p.s) trac 이 ajax 를 활용하도록 업데이트 되었네요.

정태영

며칠 전에 공개 글꼴들에 관련된 글을 포스팅했었는데요. :) 요번엔 그 글꼴들이 어떤 모양인지를 뽑아내봤습니다.

http://mytears.org/resources/font-sample/

gd 를 사용해서 샘플을 뽑아봤는데, gd 에서는 서체 래스터라이져로 freetype 을 사용하고 있고, 윈도우의 래스터라이져와 맥의 래스터라이져와는 약간의 차이를 보이기 때문에 실제로 사용할 때와 약간 차이가 있을 수도 있겠습니다.

글꼴을 뽑아내는데 사용한 프로그램은 아래에서 보실 수 있습니다.

http://trac.unfix.net/browser/snipp…t/gd_font_preview/gd_font_preview.c

정태영

디자인 서울 총괄본부에서 서울 한강체 (명조계열)와 서울 남산체 (고딕계열)를 공개했습니다. 서울한강체는 Light, Medium 로 구상되고, 서울 남산체 는 Light, Medium, Bold, Extra Bold 로 구성되어 있네요. 그 외에도 세로 쓰기용 서체가 하나 더 있다고 합니다.

사실 otf (opentype font)나 ttf (truetype font) 형식으로 배포할 경우에 맥, 윈도우, 리눅스 등에서 모두 동일하게 사용이 가능할텐데 왜 저렇게 맥용과 윈도우용으로 따로 배포하는지 모르겠네요.

http://design.seoul.go.kr/dscontent…gnseoul.php?MenuID=490&pgID=57

그림만 봤을 땐 예전에 맥에서 많이 사용되던 한강체와 동일한 서체는 아닌 것으로 보이네요. 아쉽게도 라이센스와 관련된 부분이 명시가 되어 있질 않습니다.

어쨌든 공개된 한글 서체가 몇 가지 더 생겼다는 점은 매우 반길만한 일이네요. 참고로 아래의 한글 서체들도 사용료 없이 자유롭게 이용이 가능합니다.

* 은글꼴
- http://kldp.net/projects/unfonts/

* alee-fonts
- http://alee.anj.kr/fonts/alee/

* 아리따체
- http://www.amorepacific.co.kr/company/ci/font.jsp

* 한겨레 결체
- http://bbs.hani.co.kr/Board/ui_hkr_…ToPage=1&Idx=56&Sorting=2

* 조선일보 명조체
- http://font.chosun.com/

* 네이버 사전체
- http://cndic.naver.com/font.nhn

* 문화부 글꼴
- http://faq.ktug.or.kr/faq/%B9%AE%C8%AD%BA%CE%B1%DB%B2%C3

* 백묵 글꼴
- http://kldp.net/projects/baekmuk

정태영

워드프레스 2.5 버젼에 대한 리뷰는 이미 많은 분들이 하셨으니;; 쩜쩜;; 하여튼! 워드프레스 2.5 버젼이 릴리즈되었단 소식을 듣고 바로! 업데이트를 감행했습니다. 제가 사용하던 플러그인들은 대부분 정상작동을 하는 관계로 업데이트는 아주 간단하게 끝낼 수 있었습니다.

업데이트를 하고 나니 관리자모드가 깔끔한 파스텔톤으로 보여지네요. 위젯을 통해 사이드바를 맘껏 조정할 수 있는 것이 매우 맘에 들었지만, 제가 사용하던 테마가 위젯을 지원하지 않는 관계로 테마를 바꿔야만 했습니다. 흑흑흑;;

꽃향기가 물씬 풍기는 테마로 바꾸고 살짝 맘에 안드는 부분을 제거해버리고 나니 -_-! 이젠 다시 제 집 같네요; 호호호; 그럼 다들 즐거운 하루 보내세요 캬캬캬캭

정태영

오랫만에 그놈 코리아 http://gnome.or.kr/ 에 접속했더니 히야! 대게 이뻐졌네요!!!

정태영

왠지 모르게 점점 마이너 한 것들만 사용하게 되네요. postfix 나 exim 을 사용해보니 여러가지 장점이 눈에 보이는데 막상 how to 문서같은게 그리 잘 나와있질 않다보니 사람들이 사용하기를 꺼리는 것 같아 처음으로 howto 문서를 하나 작성해려 합니다.

이 문서는 젠투에서 exim 을 사용하는 방법을 기준으로 설명하고 있습니다.

Table of Contents

  1. 기본 구성
  2. 필요한 소프트웨어 설치하기
  3. 가상호스트 설정하기
  4. 바이러스 필터 설정
  5. 스팸 필터 설정
  6. dovecot 설정하기
  7. smtp 인증 설정하기
  8. 다른 배포판을 사용할 때 유의점

기본 구성

Mail Transfer Agent 로는 exim, 스팸 필터로는 bogofilter, 바이러스 필터는 clamav, pop3/imap server 로는 dovecot 을 사용하기로 하겠습니다. dovecot 이나 exim 이나 기본 적으로 실행하는 프로세스들이 많지 않기 때문에 프로세스 리스트를 확인할 때 깔끔해서 좋더군요.

필요한 소프트웨어 설치하기

저 같은 경우는 대강 다음과 같은 USE 플래그를 이용해서 설치를 진행했습니다.

# emerge -pv exim bogofilter clamav dovecot procmail   These are the packages that would be merged, in order:   Calculating dependencies... done! [ebuild R ] mail-mta/exim-4.69 USE=”domainkeys dovecot-sasl exiscan exiscan-acl gnutls ipv6 pam perl sasl spf sqlite srs ssl syslog tcpd -X -dnsdb -ldap -lmtp -mailwrapper -mbox -mbx -mysql -nis -postgres -radius” 0 kB [ebuild R ] mail-filter/bogofilter-1.1.6 USE=”berkdb sqlite -gsl” 0 kB [ebuild R ] app-antivirus/clamav-0.92.1-r1 USE=”bzip2 crypt milter nls -mailwrapper (-selinux)” 14,927 kB [ebuild R ] net-mail/dovecot-1.0.13-r1 USE=”ipv6 pam pop3d ssl -debug -doc -kerberos -ldap -managesieve -mbox -mysql -postgres -sieve -suid -vpopmail” 0 kB [ebuild R ] mail-filter/procmail-3.22-r7 USE=”-mbox (-selinux)” 222 kB   Total: 5 packages (5 reinstalls), Size of downloads: 15,149 kB

domainkeys 는 야후나 구글에서 사용하고 있는 domain key 를 제대로 검증하기 위한 USE 플래그가 되겠구요, dovecot-sasl 은 smtp 인증에 dovecot 을 이용하기 위한 플래그입니다.

spf, srs, domainkey 같은 플래그는 해당 기능을 사용하지 않겠다면 빼주셔도 무방합니다. CentOS 등에서는 dovecot-sasl 도 기본으로 지원이 안되더라구요. 하튼 관련해서 자세한 건 뒤에서 설명하도록 하겠습니다.

살펴보니 별로 특이한 플래그를 사용하지는 않네요. -_;; 젠투 유져라면 다들 아시겠지만 실제 설치는 위의 예제에서 -pv 를 제거하고 실행시키시면 됩니다.

가상호스트 설정하기

설치가 무사히 끝났다면 가상호스트를 설정해봅시다. 젠투에서는 기본으로 설정파일을 만들어주지 않습니다. 그렇기 때문에 우선 /etc/exim/exim.conf.dist 를 복사해서 exim.conf 를 만들어줍니다.

# cp /etc/exim/exim.conf.dist /etc/exim/exim.conf

그런 다음 자신이 좋아하는 편집기를 이용해서 exim.conf 파일을 열고, 아래와 같은 부분을 찾아서 자신의 환경에 맞게 수정을 한 뒤

primary_hostname = unfix.net   domainlist local_domains = @ : localhost : dsearch;/etc/exim/virtual domainlist relay_to_domains = hostlist relay_from_hosts = 127.0.0.1

router 부분에서 system_alias 바로 아래에 다음 코드를 추가해줍니다.

virtual: driver = redirect allow_fail allow_defer domains = dsearch;/etc/exim/virtual data = ${expand:${lookup{$local_part}lsearch*@{/etc/exim/virtual/$domain}}} retry_use_local_part file_transport = address_file pipe_transport = address_pipe

주 도메인이 있는 경우 localhost 대신 unfix.net 같은 도메인을 사용해도 무방합니다. 만약 위의 예제에서 localhost 대신 unfix.net 을 설정해주면 로컬에 있는 모든 계정은 id@unfix.net 형태의 메일계정으로 사용이 가능해집니다. 주 도메인이 여러개라면 @ : localhost : mydomain1 : mydomain2 식으로 콜론(:) 을 이용해서 여러 개를 모두 적어주면 되겠습니다.

이젠 가상 호스트를 설정해봅시다. 만약 test.com 과 test.net 을 위한 가상호스트를 설정하려 한다면 다음과 같이 하면 됩니다.

# mkdir /etc/exim/virtual # vi /etc/exim/virtual/test.com # vi /etc/exim/virtual/test.net

위에서 dsearch; … 으로 설정해놓은 디렉토리 안에다가 호스트 이름을 이용해서 alias 파일을 만들어주면 되니까 간단하죠? 각 파일에 들어가는 내용은 다음과 같습니다.

# test.com
test: aqua@localhost
melong: test@gmail.com

# test.net
aqua: test@localhost

test.com 파일에 들어가 있는 test: aqua@localhosttest@test.com 으로 온 메일을 aqua@localhost 로 포워드를 시키라는 거에요. 워낙 간단하니 다른 것들은 따로 설명 안해도 될 것 같네요. 단 위에서 localhost 대신 myhost.net 을 사용했다면 aqua@myhost.net 처럼 설정해줘야 합니다.

여기까지 따라하셨다면 가상 호스트 설정은 끝! 가상 호스트 파일을 수정했을 때는 alias 를 수정했을 때와 달리 newalias 를 실행시키실 필요가 없습니다.

바이러스 필터 설정

바이러스 필터로는 clamav 를 사용할 건데, USE 플래그로 exiscan 과 exiscan-acl 을 사용해서 설치했다면 clamd 와 연동하는건 아주 간단합니다.

exim.conf 에서 다음과 같은 줄을 찾아서 주석을 해제시키세요.

av_scanner = clamd:/var/run/clamav/clamd.sock

끝! clamd.sock 위치는 배포판에 따라 다를 수 있습니다. 자세한건 /etc/clamd.conf 를 참조하세요.

스팸 필터 설정

스팸 필터로는 bogofilter 를 사용할건데 이건 예전에 써놨던 다른 글을 참고해주세요.

dovecot 설정하기

우선 /etc/dovecot.conf 파일을 열어서 서비스할 프로토콜 리스트를 적어주세요. 그 다음에 plaintext 로 로그인할 수 있도록 설정해주고, pop3 나 imaps 를 위해 ssl 을 사용할거라고 명시해주고, 마지막으로 dovecot-sasl 을 사용할 수 있도록 auth-client 를 활성화시켜주세요.

이를 종합해보면 다음과 같은 설정파일이 만들어집니다. 볼드로 표시한 부분이 제가 수정한 부분이에요. 주석을 제거하고 보니 정말 간단하네요. -_-;

protocols = imap imaps pop3 pop3s   listen = [::] disable_plaintext_auth = no   ssl_disable = no ssl_cert_file = /etc/ssl/private/unfix.net.crt ssl_key_file = /etc/ssl/private/unfix.net.key   mail_location = maildir:~/.maildir   protocol imap { }   protocol pop3 { pop3_uidl_format = %08Xu%08Xv }   protocol lda { postmaster_address = postmaster@example.com }   auth default { mechanisms = plain login passdb pam { args = “*” } userdb passwd { } user = root socket listen { client { path = /var/run/dovecot/auth-client mode = 0666 } } }

그리고 /etc/pam.d 로 가서 smtp 파일이 있는지를 체크해보시고 만약 없다면 system-login 이나 pop 등을 복사해서 smtp 파일을 만들어주세요. 이것 때문에 어제 혈압이 올랐던걸 생각하면 …!!!

여기까지 설정하셨음 90% 는 끝난겁니다.

smtp 인증 설정하기

자 다시 exim.conf 로 돌아와서 smtp 인증을 설정해봅시다. exim.conf 에서 authenticators 파트를 찾아서 아래와 같은 내용을 추가해줍시다.

plain: driver = dovecot public_name = PLAIN server_socket = /var/run/dovecot/auth-client server_set_id = $1 server_advertise_condition = 1   login: driver = dovecot public_name = LOGIN server_socket = /var/run/dovecot/auth-client server_set_id = $1 server_advertise_condition = 1

이걸로 설정은 끝! 다음엔 데몬들을 띄워서 제대로 되나 확인을 해보세요.

# /etc/init.d/dovecot start # /etc/init.d/exim start

다른 배포판을 사용할 때 유의점

제가 이것저것 확인해본 건 아니라 정확하게 알려드릴 순 없지만 CentOS 에서는 spf, srs, dovecot-sasl, domainkeys 등을 사용할 수가 없습니다. 그렇기 때문에 dovecot-auth 대신 saslauthd 를 사용해야 해요. saslauthd 를 사용할 때의 authenticator 파트는 다음과 같습니다.

PLAIN: driver = plaintext public_name = PLAIN server_condition = ${if saslauthd{{$1}{$2}{smtp}}{1}{0}} server_set_id = $1 server_advertise_condition = true   LOGIN: driver = plaintext public_name = LOGIN server_condition = ${if saslauthd{{$1}{$2}{smtp}}{1}{0}} server_set_id = $1 server_advertise_condition = true

server_condition 을 다음처럼 해서 pam 만으로도 인증을 할 수 있을지도 모르겠는데, 테스트하기가 귀찮네요. -_-; 혹시나 시도해보신분 있으면 결과를 좀 알려주세요.

server_condition = "${if pam{$2:$3}{1}{0}}"

참고로 인증을 saslauthd 를 통해서 하려는 경우 saslauthd 가 실행 중에 있어야 합니다.