있을 지 없을 지 모르는 상수를 #if에 쓰기

오늘 커밋 로그를 보다가 멋진 트릭을 하나 발견!

C의 #if에서 정의 됐을지 안 됐을지 모르는 상수를 계산식에 써버리면 치명적인 에러가 보통 발생합니다. 예를 들면

이 코드를 컴파일할 때 미리 NUM_OF_GIRLFRIENDS 가 아예 정의되어 있지 않다면, (아마도 전혀 기억이 없는 사람.. ~먼산~)

이렇게 돼서 > 연산자의 왼쪽이 없어서 에러가 나는데, 보통 사람의 해결방법은 #ifdef를 위에 쓰는 것이겠지만.. 오늘 파이썬 커밋 로그에서 모 플랫폼 (사실은 FreeBSD 4 -.-;)에서 _POSIX_SEMAPHORES 가 정의되지 않아서 생기는 문제점을 Martin이 고친 것을 봤는데 이렇게 고쳐놨습니다.

_POSIX_SEMAPHORES가 정의되어 있지 않더라도 +0 == -1이 돼서.. 결국은 제대로 전처리가 되는 것!! +_+

치명적인 전염성 병이 있는 이유는..

고등학교 때부터 참 궁금했습니다. 세균이나 기생충, 바이러스 같은 것들 중에 숙주를 죽이는 놈들은 왜 죽이는 것인가! 죽여서 이득인 것이 있는가! 잠 안 오는 밤에는 이 생각을 이리 저리~ 이유를 생각해 보다가 잠들곤 했는데… 오늘 책을 읽다가 답을 발견했습니다. 으흐흐~ 알고보니 간단;;

숙주와 기생생물 사이의 궁극적인 관계는 살해가 아닌 상호 의존이다. 질병은 그 양자가 다행히도 공존하게 되면서 입는 부상이다. 치명적이거나 심한 질병은 대개 숙주와 기생생물이 상대적으로 새롭게 만났다는 징후이다. 즉 그 기생생물은 최근까지 다른 숙주 내에서 삶을 꾸려왔다는 뜻이다.

– 아노 카렌, 《전염병의 문화사 Man and Microbes》에서

맛있는 주먹밥~

딱히 먹을 것도 없고 뭔가 만들기도 귀찮은 주말~ 뭔가 볼 것 없나 찾아보다가 거의 완결되어 간다는 스쿨럼블을 몰아서 다 보다가, 텐마와 카라스마가 주먹밥을 먹는 것을 보고.. 따라하기 한번~ 🙂 (사실은 흰밥에 소금만 뿌린 것은 아니지만;; 밥이 모자라서 재료가 과하게 들어감.. 으흐~)


바로 이 장면!

날지는 못하지만 치요보다 잘 움직인다는 점에서 텐마의 머리도 참 귀여워요! ⌒_⌒

py-freebsd 0.9 릴리스

지난 2주 정도 출퇴근길 지하철에서 작업한(4호선 만세!) 결과물인 py-freebsd 0.9를 릴리스했습니다. 역시나 아직도 프비 포트가 프리즈 중이기 때문에 포트는 올리지 못했고 그냥 타볼만 올렸네요. =.=;

py-freebsd는 원래 2002년 5월에 그냥 잠시 장난으로 만들어 본 것인데, 파이썬에서 기본적으로 제공되지 않은 FreeBSD 시스템/커널 함수들을 접근하기 위한 모듈입니다. 그동안은 별로 쓰는 사람도 없고.. 저도 그냥 잊고 있었는데, 요새 FreeBSD에서 베이스에 스크립트 언어를 넣자는 토론도 진지하게 올라오고 해서, 점점 파이썬이 인기를 얻고 있는 듯해서 슬그머니.. 다시 업그레이드를 했습니다. 흐흣. 원래는 0.2였지만, 이번에는 1.0을 대비해서 0.9로 바로 올렸습니다.

이번 버전에서는 예전에 벼르고 있었던 기능 2가지를 중점적으로 작업했습니다. 바로 kqueuesysctl입니다. kqueue의 경우에는 기존에 devel/py-kqueue에 Doug White가 만들어 놓은 것이 있었지만, 상당히 오래 전에 만들어져서 오랫동안 관리되지 않은 바람에, 현대 파이썬 스타일과는 많이 다르고, kqueue의 막강 기능 중 하나인 udata를 사용하기가 어려운 점이 있었던 것을 개선해서 포함시켰습니다.

그리고, sysctl은 귀찮게 시스템 명령어를 셸 호출해서 쓰던걸 이제 간단하게 데이터 타입 깔끔하게 직접 호출할 수 있도록 만들었습니다. 🙂

으흐흐~ 사실 업그레이드 작업을 처음 시작했을 때에는 pyrex로 하려고 거의 대부분 함수를 pyrex로 다시 썼는데, 아무래도 작업의 특성 상 C 코드나 pyrex 코드나 결국은 1:1 대응이 될 정도로 비슷한데, 사실 pyrex 자체의 제약사항도 있고해서 오히려 C로 그냥 줄줄이 풀어 쓰는게 더 편한 곳이 제법 있어서, 고심 끝에 그냥 일일이 C로 쓰는 것으로 작업을 해버렸습니다. ;; pyrex가 생각보다는 용도가 제한이 많이 되는 것 같네요.. 간단한 래핑이라고 해도 ctypes가 있고.. 복잡한 메모리 할당이나 구조체 작업이 일어나는 것들은 C만큼이나 복잡하고.. 으흐~ 뭐 어쩔 수 없네용;

프리즈가 풀리면 바로 업그레이드! FreeBSD 사용하시는 분들은 FreeBSD FTP에서 미리 받아서 한번 테스트해 주세요. 🙂 4.7이상, 2.3이상을 지원합니다.

Twisted 2.0 드디어 릴리스

한동안 프리뷰 릴리스를 해서 개발자들의 마음을 설레게 했던 Twisted 2.0이 드디어 정식 릴리스 되었습니다!

저는 한 2년간 twisted를 해보기는 해 봐야하는데 그 엄청난 규모에 눌려서 손댔다가 흠칫 하고 물러서는 것을 반복해오다, 작년에서야 비로소 프로젝트에 본격적으로 twisted를 쓰기 시작했습니다. (현재 사용되고 있는 곳은 KT, 삼성네트웍스 네임서버들의 제어 에이전트와 중앙 관리 데몬..) 물론 이제는 twisted가 없으면 어떻게 살 수 있을지 참 모르겠군요 이히히. 자카르타 하위 프로젝트들 하나도 부럽지 않다구~ -O-;

Twisted 2.0은 메이저 업데이트인 만큼 엄청난 변화가 있었는데, 저는 주로 이런 것들이 눈에 띄는군요.

  • MIT 라이선스로 변경!! 그동안 LGPL이었던 Twisted가 전체가 모두 MIT 라이선스로 바뀌어서, 이제 원하는 마음껏 꼬아서 쓸 수 있게 되었습니다!
  • 패키지가 여러개로 분리 1.3까지만 해도 엄청난 덩치의 패키지들이 다 묶여 있어서, 쓸데없는 것 까지도 모두 들고 다녀야 했는데, 이제 Twisted에서 Twisted Web, Twisted Mail, Lore 등 거의 10개 정도의 조각들이 떨어져 나와서, Twisted 기본 패키지에는 프레임워크와 프로토콜 정도만 남게 되었습니다.
  • TCP 버퍼링, 리액터 callLater 성능 대폭 향상 그동안 좋은 reactor 베이스 API들을 두고도 성능을 오방 저해하고 있었던 버퍼링, 리액터 구현쪽이 많이 개선되어서 성능이 눈에 띄게 좋아졌습니다. (진짜로 반응 속도가 다름!! — 그동안 어떻게 했으면;;;)
  • 컴포넌트 시스템이 Zope interface로 바뀜 그동안 이상해서 별로 쓰기가 꺼려졌던 twisted.interface가 Zope의 인터페이스로 대체되었습니다. Zope 인터페이스는 아무래도 Tim, Jeremy를 비롯한 많은 파이썬 코어 해커들이 손을 대서, 유연성이나 확장성면에서는~ 🙂
  • 플러그인 시스템 지원 여러가지 종류의 파이썬 애플리케이션들이 갖고 있는 공통적인 기능 중의 하나가 플러그인인데 각자가 따로 따로 구현이 되다보니 상호운용성 같은 측면에서 안 좋은 편이었는데, 이제 twisted에서 플러그인 시스템을 지원하기 시작했습니다.
  • ctrl-c를 누르면 pdb가 이제 디버그 모드에서 ctrl-c를 누르면 pdb가 뜬다는군요.

그 외에도 Twisted 2.0의 변경사항들은 호기심이 가는 것들이 상당히 많은데, 1.0에서 deprecated됐던 함수들을 모두 제거했다고 하니, deprecate 메쏘드들을 사용한 애플리케이션들은 각오를 조금 해야겠네요.. (아이고 큰일났네 –;)

FreeBSD 포트에서는 마침 어제 5.4 릴리스를 위해서 프리즈된 관계로 업그레이드는 2주일 후에나 가능할 듯 합니다. 으흐~ 아쉬워요 파이썬 2.4.1도 못 넣고.. ㅠ.ㅠ

PyCon 2005 PSF 회의 투표

내일 워싱턴DC에서 열리는 PyCon DC 2005 Member meeting 부재자 투표를 하고 왔습니다. 매년 3월 말에 열리는 PyCon이 있을 때 마다 PSF (파이썬 소프트웨어 재단)의 회의가 있는데, 여기서 재정적인 문제나, 새로운 스폰서 회원, 추천 회원 등을 결정하고 다음 한 해동안의 PSF 보드 멤버를 투표합니다. 올해부터 부재자 투표가 새로 도입되는 바람에, 별도로 위임할 사람을 지정하는 번거로움 없이 직접 할 수 있어서 다행이었습니다. 🙂

올해의 투표건은,

  • 새로운 추천 회원으로 작년 많은 활동을 했던 2명을 추가하는 것
  • 새로운 스폰서 멤버로 ActiveGrid라는 회사를 추가하는 것
  • 작년에 투표를 안 하고 활동이 없었던 기존 회원 2명을 명예회원으로 내리는 것
  • 보드 멤버의 수를 기존 7명에서 8명으로 늘이는 것
  • 새로운 보드 멤버의 선출

가 올라왔습니다. 그런데, 뭐 대체로 반대할 만한 것도 딱히 없고.. 보드 멤버도 작년처럼 치열한 게 아니라, 8명 자리에 8명이 올라와서, 그냥 이름 반복해서 쓰기군요.. 흐흐.. 결국은 모두 yes에 8명 그대로.. 거수기 신세 Y.Y

용이사님은 올해에도 PyCon 가신다던데.. 아아 저도 이제 내년부터는 자유로운 신분으로 마음대로 PyCon도 갔다 오고 할 수 있겠네요. 올해 PyCon에서는 키노트가 마이크로소프트의 Jim Hugunin이고, 마지막날에 있는 구글의 Greg Stein의 연설도 정말 기대가 되는데 말이죠 으흐~ 아쉽당~ -O-

그래도 못 가는 사람들을 위한 논문이 공개되어 있으니까! 🙂

이제는 “award-winning” 스크립트 언어로 불러다오!

귀도가 파이썬 개발 메일링 리스트에 흥분된 어조로 메일을 보냈습니다. “Python이 졸트 어워드 2005에서 상을 받았습니다!

졸트 어워드라면 뭔가 먼나라 얘기인 줄 알고만 있었는데, 올해엔 파이썬이 워낙 좋아서~ 🙂 언어 및 개발도구 분야에서 졸트상은 아니고 그 아래로 보이는 “productivity winners”에 올랐습니다. 2001년에 YorkTown 고등학교에서 만든 Introduction to Python이라는 동영상에서 여주인공 니나가 항상 Jolt라는 음료수를 들고 다녔는데.. 니나가 파이썬을 그때 열심히 공부를 안 해서 파이썬에 상이 좀 늦게 왔나봅니다. ‘o’;;;
같은 분야의 1위는 이클립스인데.. 응 그래 끄덕끄덕;; 이클립스 정도면 1등할 만 하군요.. 으흐~

그 외의 다른 분야의 수상들을 보니까 눈에 띄는 게, 일반 출판물 분야의 “Joel on Software“나.. 충격적인 레이아웃으로 한빛미디어를 당혹케했던 Head First 씨리즈의 “Head First Patterns“같은 것도 있고.. (아직 읽어보지는 못했는데 꼭 사봐야겠어요 +_+) 비즈니스 통합/데이터 툴 분야에서 Toad for Oracle가 올라왔군용.. 그리고 재미있는게, Change/Configuration Management부분에서 subversion이 졸트상을 받았는데, productivity winner로 perforce가 올라왔습니다. 흐흐 제가 보기엔 perforce가 솔직히 좀 낫긴 하던데.. 심사위원들 눈에는 안 그랬던 모양입니다. -.-a;;

그리고 그 밑에 Test – Defect Tracking Tools 부분에 Fog Creek의 FogBugz가 졸트상을 받았으니.. Joel은 한꺼번에 상을 두개나 받아서 정말 상상만 해도 구름 위로 올라갈 것 같군요.. 🙂

이제 Python은 그냥 스크립트 언어라 부르지 말고, “award-winning” 스크립트 언어라고 불러주세요! (한국어로는 뭐라고 하지;;; 수상경력의 스크립트 언어? ;;)

SEED가 IETF RFC로 등장

감자옹SPF에 대해 담소를 나누던 중, 최근에 RFC로 등록됐다는 SMTP 메시지 추적 확장판이 몇번인지 한번 찾아보려고, 오랜만에 RFC 인덱스를 끝에서부터 뒤져 봤습니다. 옛날에 호기심 많던 젊은 시절(-.-)에는비교적 자주 RFC 인덱스를 업데이트해서 봤었는데 훈련 다녀 오고서는 마냥 잠만 와서~ 크흐흐;;;

마지막부터 차근차근 보다가 아앗! 발견한 것이 RFC4009: The SEED Encryption Algorithm! SEED가 정말로 내가 4년 전에 회사에 갓 들어와서 아무것도 모를 때 하던 그 SEED가 맞는가 하고 잠시 고민을 했는데 옆에 한국식 저자명들이 아 그게 맞구나 하고 확신을.. 🙂 KISA에서 썼군요

전에 봤던 두툼한 책 2권짜리 수식으로 가득찬 SEED 책보다는 훨씬 얇아서 약간 주춤하기는 했는데, 기본 암호화, 복호화 방법과 매직넘버는 모두 담겨있어서 구현을 위한 최소한의 것은 잘 씌여 있군요. 수학식에 압도당해서 보기도 힘들었던 그 책 대신 이걸 봤으면 좀 더 쉽게 구현할 수 있었을지도..ㅠ.ㅠ

부록으로 RFC4010으로 CMS에서 사용하는 방법도 등록 되었네요.

그냥 보는 김에 쭉 위로 훑어보다가 작년 하반기 이후에 등록된 재미있는 것들이 제법 있었습니다. 흐흐

  • RFC3986에 URI가 새로운 버전으로 업데이트 되고, 오랫동안 draft 상태로 있었던 IRI가 RFC3987로 드디어 proposed standard로 등록되었습니다. (IRI는 URI에서 유니코드를 쓰기 위한 확장)
  • RFC3912로 WHOIS 프로토콜이 업데이트 되었습니다. 워낙 간단하니 별로 프로토콜에서 달라진 점은 안 보이고, 국제화에 대해서 대책이 없다는 것을 솔직하게 적은 게 추가 됐네요. (….)
  • 지금까지 IETF RFC로 등록된 적이 없었던 CGI가 역사를 기록이라도 하려는 듯 2004년 10월에서야 RFC3875로 등록됐군요. 요새 제가 쓰던 CGI들이 다들 레퍼러 스팸 공격을 받고서는 죽고 있어서 CGI는 이제 안 쓰려고 마음먹었습니다. ㅠ.ㅠ
  • 지나가다가 또 다른 한국식 이름을 발견했는데, RFC3974 IPv6 전환의 애플리케이션측 양상에 ETRI 소속의 한국인 저자가 첫번째부터 세번째까지 저자 이름이 올라가 있군요. 🙂 그리고 NetBSD의 itojun씨도 공동저자로! (와!)

요새 등록되는 RFC에 유독 SIP관련 내용이 많은 걸로 봐서는, 아무래도 인터넷 전화나 W-CDMA를 준비하는 업체들이 많이 보이는 것 같기도 하고 그렇네요. 그리고 그새 1월에 RFC4000을 돌파했는데.. 아직 RFC4000이 등록이 안 된것이.. 아무래도 만우절 농담을 RFC4000으로 등록하려는 것일까요? ;;; 4004도 비워놨고.. 뭐가 등록될 지 기대가 되는군요. 🙂

GNOME 2.10

지난 주 목요일이던가에 릴리스된 GNOME 2.10으로 업그레이드 했습니다. 🙂 포트에는 지난 주 토요일에 들어왔는데, 업그레이드하는데 그동안 갖고 있던 로컬 패치 여러개가 이리저리 뻑을 내서 4번 gnome_upgrade.sh를 돌린 끝에 20시간 걸려서 겨우 업그레이드 했군요..; 으흐 다음 부터는 커밋 안한 로컬 패치는 안 넣어둬야;;

gnome2.10
GNOME 2.10 (누르면 큰 그림)

전체적인 느낌은.. 2.8과 뭐가 달라졌는지 모르겠다.. 였;;; 2.6에서 2.8 올라가면서 UI가 많이 산뜻해진 느낌이 들었는데, 2.10은 딱히 크게 달라진 것처럼 보이는 것은 없네요~ 속도는 CPU가 빨라서 그런지 (우하하) 별 차이 없어보이고;; -ㅇ- 그런데, 깔고 나서, 세팅하던 도중에 gstreamer-register에서 계속 segfault가 나면서 gstreamer를 사용하는 모든 프로그램이 동작하지 않는 문제가 있었는데, 이 문제를 ganadist님의 도움을 받아 추적해본 결과 libmodplug.so 였던가 .mod 를 담당하는 모듈에서 뭔가 문제가 생겨서, 그 파일을 제거하고 다시 gstreamer-register를 실행해 주니까 잘 되었습니다~

그래도 영 보람이 없는 것은 아니어서 이런 건 정말 마음에 들었습니다. 🙂

  • 로그아웃 박스에 드디어 “컴퓨터 끄기”가! – 로그아웃 할 때 기존에 “현재 설정 저장”, “로그 아웃” 밖에 없어서 컴퓨터를 끄려면 밖에 나가서 gdm이나 셸에서 또 init 0 등의 명령으로 꺼야했었는데, 랩탑에서는 상당히 번거로웠던게, 드디어 이제 한방에 끌 수 있군요. 🙂
  • “프로그램-데스크탑” 애플릿이 “프로그램-위치-데스크탑”으로 – 그놈 기본 설정으로는 맨 왼쪽 아래에 위치하는 애플릿이 이제 중간에 “위치”가 끼여 들어가서, 위치를 등록해 놓고 자주 쓰는 디렉터리들에서 노틸러스를 바로 띄울 수 있게 되었네요.
  • $HOME/.xmodmap도 이제 합법적으로 사용 가능 – 그동안 $HOME/.xmodmap이 있으면 부팅하면서 절대로 쓰지 말라고 협박조로 궁시렁궁시렁 댔었는데, 이제는 $HOME/.xmodmap도 로딩할 때 사용할거냐고 물어본 다음에, 다음 로그인부터는 로딩이 정상적으로 됩니다. 그래서 이제 한/영키 매핑을 위해서 따로 xmodmap 번거롭게 조절해 줄 필요가 없어졌네요. 🙂

사실은 FreeBSD도 4.9 이후로 나온 4.10과 4.11은 거의 바뀐 점이 없다는 것을 생각해 보면, 그놈 2.10도 안정적인 릴리스 모드로 들어가 버린 걸까요? 뭐 하여간 이제 “컴퓨터 끄기”가 생긴 만큼, 불편한 것은 없어서 좋습니다. ㅋ~

한글 PuTTY 0.57 릴리스

exman님의 결혼을 축하드리는 기념으로 한글 PuTTY 0.57을 방금 릴리스 했습니다. -O-;

작년 10월쯤에 발표된 PuTTY 보안 버그패치도 적용하지 않고 있었는데, 2월에 또 하나 더 나와서 좀 더 버티기는 무리라고 생각하고.. 흐흐; 이번에 겉으로는 이런 것들이 바뀌었습니다.

  • IPv6 지원이 들어갔습니다.
  • 포워딩 같은 용도로 사용하기 위해 셸이나 명령어 실행 안하기 모드가 추가되었습니다.
  • 여러개의 SSH관련 보안 버그가 수정되었습니다.
  • 접속이 끊긴 창에서 새 창을 안 띄우고 그자리에서 다시 접속할 수 있게 되었습니다.
  • SOCKS 5 프락시를 위한 CHAP인증 기능이 추가되었습니다.
  • X포워딩과 리모트 포트 포워딩에 관련된 여러가지 버그들이 수정되었습니다.

늘 그랬듯이 이번에 외부적으로 크게 변한 것은 없는 반면에, 내부적으로 소스 코드에서는 상당히 많이 바뀌었는데, 특히 그동안 주 코드에 붙어 있었던 win32 지원 코드가 모두 windows/ 하위 디렉토리로 내려가는 바람에 이제 소스 레이아웃에서도 멀티 플랫폼의 냄새가 납니다. 🙂 그리고, 터미널 제어 코드들이 성능을 위해서 여기저기 많이 고쳐놔서, 성능이 나쁜 컴퓨터에서도 스크롤 속도가 그다지 느리지 않을 듯 합니다. 덕분에 기존에는 대충 근처만 invalidate하면 새로 그려져서 커서 패치가 쉬웠는데, 이번엔 정확하게 커서 위치를 맞춰서 그려야 제대로 그려지는 바람에, 한 이틀밤을 디버거 들고 씨름했네요.. 흐흐;; (바보~) ㅠ.ㅠ

특히 작년 초부터 시작된 PuTTY의 전역변수 제거 작업은 이제 어느 정도 단계까지 진행되어서, 터미널과 접속 관련된 대부분의 변수가 전역변수에서 벗어났고, 설정과 관련된 일부 변수들만 전역으로 남아있어서, SDI 인터페이스로 감싼다던지 하는 것도 쉽게 될 것처럼 보입니다.

그럼, PuTTY와 함께 즐거운 작업~ (;;)