최근의 파이썬 이슈~

  • 파이썬 2.3.4 RC 1이 릴리스되었습니다. 2.3.4가 정식으로 나오기 전 마지막 릴리스 후보이며, 2.3.3에서의 주요 변경사항은 대부분 [WWW]버그 수정에 관한 것입니다. 제가 고친 건 전체 22개 중에 3개군요. ^^;; 정식 릴리스는 5월 20일쯤에 나올 예정이라고 합니다. 포트는 지금 퇴행 검사를 모두 통과하는 것을 확인했기 때문에, 릴리스된 당일 바로 갱신할 예정입니다.

  • 서지원님께서 이제 훈련을 마치고 돌아오셨기 때문에, 제너레이터 익스프레션이 활발하게 진행되고 있는데요. 원래 5월 첫째주에 CVS에 들어갈 계획이었지만, 아직도 얼리-바인딩, 레이트-바인딩, 거의-레이트-바인딩 세가지 갖고 국론(?)의 분열이 엄청나게 심했기 때문에, 순조롭지만은 않은 상황입니다. 현재 저와 Raymond의 리뷰가 끝났고, 바이트코드 컴파일러 전문가인 Jeremy에게 리뷰 요청이 들어갔는데, 그 후에 아마 들어갈 수 있을 것으로 보입니다. Guido가 강력하게 만표를 행사하고 있는 의견은 거의-레이트-바인딩 인데, print >> None 의 동작에서 의 선택처럼 제일 헷갈리고 초보자들을 놀라게 만드는 선택이기는 하지만, 우선은 많은 경우 편리하게 사용할 수 있고, 자세한 동작을 신경 써야 할 정도의 코드면 심플 제너레이터로 풀어서 쓰라고 주장하고 있습니다.

  • [FreshPorts]devel/decompyle 이 2.3용으로 부활. 한참 2.2용으로 남아있었던 decompyle을 어느 의욕적인 해커가 2.3용으로 고쳤습니다. 원래 decompyle홈페이지에는 반영은 안 되어있는데, 고친 사람의 [WWW]홈페이지에서 받을 수 있습니다.

  • [재미있는 파이썬 무림 소식] -1/1000은 왜 -1인가: 최근 c.l.py에 “어느 오래된 C 프로그래머”가 -1/1000이 다른 C 컴파일러들에서는 0인데 왜 파이썬에서는 -1이냐는 것에 대해서 의문을 올렸습니다. 그에 대해, C의 역사하면 뭐 거의 말 그대로 호랑이 담배피던 시절부터 생생한 현장에 있었던 Tim이 i / j의 나머지값은 반드시 0보다 크거나 같고, j보다 작다는 조건을 만족하기 위해서는 몫이 -1이고, 나머지가 999으로 나오는 것이 맞다고 “파이썬 첫 릴리스를 하기 전”에 귀도와 합의 했다는 답장을 올렸습니다. 그에 대해 다시 다른 사람들이 C99에서는 -1로 나오는 것이 표준으로 채택되어있다고 반발하자, Tim은 역시나 특유의 산신령적인 어투로, C89에서는 어느 것을 쓸 지 정해져 있지 않았고, C99가 그런 “이상한(wrong)” 방법을 채택한 것은 포트란과의 호환성을 위한 것일 뿐, 아무 이유도 없다고 했습니다. :)

피보나치 선생님의 엉덩이

요즘 영 머리 안 쓰는 일만 했더니 머리가 굳어가는 기분이 들기 시작해서, 2.4에서 새로 들어가는 collections 모듈의 heap타입을 한 번 구현해 보고 있습니다. heap타입은 일단은 피보나치 힙으로 구현하도록 제안되어있는데, 나중에 같거나 좋은 복잡도를 갖고 아모타이즈드 분석에서 나은 알고리즘이 있다면 다른 걸로 교체할 수도 있다고 합니다. 그래서 일단은 일반적인 힙 작업들을 메쏘드 인터페이스로 만드는 것이 가장 먼저 정해져야할 작업입니다.

옛날에 역시 피보나치 힙으로 구현된 파이썬 모듈인 [FreshPorts]devel/py-pqueue 소스를 봤을 때 앞쪽 주석이 “이 알고리즘은 매우 더러우니 소스 보고 이해할 생각은 하지 마시오” 식의 문구가 써 있어서 당황해서 안 봤던 기억이 있는데, 웹에서 애플릿 애니메이션을 몇개 보면서 문서를 보니 그런대로 이해는 가는군요. :) 요즘 세상이 좋아져서.. 흐흐;

우선, insert, min, extractmin은 구현했는데, 이제 decreasekey, union, iterator, delete같은 것만 구현하면 될 것 같습니다. 그런데, 지하철에서 오는 내내 생각하다가 내릴 곳을 놓칠뻔 한 심각한 고민이 문서들을 읽어봐도 해결되지 않는 것이 하나 있습니다. decreasekey 작업을 수행할 때 트리를 가지에서 뚝 떼서 밑둥에 붙이는 작업이 일어나는데, 그럼 그 원래 붙어있던 자리의 degree가 틀린 값을 기록하고 있게 된다는.. 그러니까 원래 degree 4인 것과 degree 1인 자식들이 붙어있던 녀석은 degree가 5가 기록이 되어있겠지만, degree 4인 자식이 decreasekey하던 중 떨어져 나가면, 그 가지는 실제로는 degree 2지만, 값은 5가 기록되어 있게 된다는 것인데.. 이렇게 되면, consolidate하는 과정에서 전체 원소 개수로 추정하는 maxdegree를 넘어 버리는 노드가 나올 수도 있을 것 같고, 무지 컸다가 막 decreasekey되면서 뚝뚝 떨어져 나온 힙이라면, 여기저기 실제 degree보다 엄청 높은 녀석들이 분산돼 있어서, 실제 효율이 많이 떨어지지 않을까 하는 걱정에 휩싸입니다. -.-;;; 흐흐흑… 혹시 피보나치 힙과 친한 분들은 꼭 알려주세요;

    -> 후기: 알고보니 degree를 제가 잘못 이해한 것이네요; degree는 높이가 아니라 그냥 자식 노드 갯수를 뜻하는 것이었네요~ (아히 부끄러워라;; )

지금까지 구현한 소스는 http://openlook.org/cvs/collections/ 에 올라가 있습니다. 남은 메쏘드 구현이 끝나면 SF에 올릴 생각입니다.

XOrg 포트로 설치

어제 XFree86 4.4RC2에서 갈라져 나온 [WWW]X.org FoundationX11R6.7.0이 포트에 많이들 들어왔길래 뭔가 삽질을 갈구하는 마음이 생겨서, 한번 괜히 잘 돌아가는 XFree86 4.3.0을 엎고 xorg로 깔아봤습니다. -.-;;

아직 메타포트가 없어서 라이브러리 하나 없다고 하면 또 라이브러리 포트 가서 설치하고 그래야하는 삽질에 한 3시간 걸렸는데.. –;; 결국은 띄우긴 띄웠는데, 뭔가 꿈과 희망이 넘치는 세상이 3차원으로 빙글빙글 돌면 좋았을텐데 원래 보던 화면하고 똑같네요. -O-; (그리고 원래 가상 데스크탑 바꾸는 키로 쓰던 Meta키가 갑자기 안 먹는다는 ㅡ.ㅜ) 으흐흐 뭐 일단 하드웨어 호환성이 아주 좋아졌다고 하니 뭐 ;;

아직은 정식으로 port.mk에 지원이 들어간 것이 아니라서, 의존성도 수동으로 다 고쳐줘야하고 메타포트가 없어서 설치도 굉장히 괴롭습니다. 그리고, 아직 clients와 fonts가 없어서 으흐~ 곧 들어오겠죠~

CMFBoard 대 fcForum

[WWW]파이썬 마을은 지금 [WWW]phpBB로 운영되고 있는데, 처음 도입할 당시에는 가장 적합했기에 쓰기 시작하기는 했지만, 아무래도 [WWW]Zope[WWW]Quixote같은 좋은 웹 프레임웍이 있는 파이썬 계열 사이트에서 계속 php를 쓰는 것은 좀 찝찝~~해서 바꾸려고 계속 생각하고 있었습니다.

오늘 찾아보니 phpBB 비슷한 형태의 Zope 기반 게시판 프러덕트가 [WWW]fcForum[WWW]CMFBoard를 찾았습니다. 구글 검색 결과로는 CMFBoard가 4배 정도 참조가 많이 된 걸로 봐서는 CMFBoard가 CMF의 후광덕에 좀 인기가 좋은 듯 합니다.

대충 웹에서 보니 둘 다 괜찮은 것 같아서, 앗싸~ 하고 깔아봤는데, 아 이럴수가 흐흐.

  • CMFForum – 속도가 굉장히 느립니다. 데모 사이트를 봤을 때 유난히 느리길래, 회선이 안 좋은가 했더니, 실제 깔아 보니 상상을 초월하게 느렸습니다. -o- 코드는 다른 CMF 프러덕트들처럼 엄청난 수의 (거의 20개에 육박) 의존 프러덕트가 있어서 그런지, 코드는 상대적으로 많이 간단했고, 관리도 수월해 보였습니다. 국제화 프레임웍이나 템플릿도 아주 잘 돼 있어서 유지보수성에서는 아주 좋아보였는데.. 그렇지만 Plone 때문인지 도저히 참을 수 없을 무거운 동작은 참..;;

  • fcForum – 상대적으로 속도가 아주 빠르고, CMFForum과는 다르게 캐쉬구조도 채택하지 않았음에도 거의 10배는 빠르네요. 그렇지만, 다른 일반 프러덕트들과는 달리 코드를 모두 Script (Python) 타입 오브젝트로 작성하는 바람에, 코드를 직접 설치되는 폴더에 복사해버리기 때문에, 심지어 프러덕트를 지워버려도 작동합니다. (인스톨용 프러덕트 –;) 그리고, Zope외에는 쿠키관리하는 간단한 프러덕트만 의존하고 있어서, 깔기도 참 편하긴 한데, 국제화가 Script 하나 안에 if 로 묶여있는데다가, 조잡한 다국어 지원을 넣고 있어서, 유지보수가 아주 힘들어 보였습니다. 그리고, 각 페이지들은 스크립트들 1개씩이 할당되어 있어서, 뭔가 한꺼번에 코드를 수정하기도 힘듭니다. -.- 므흐 결국은 뭐 PHP+Smarty구조랑 어느 정도 비슷한 것인데, 코드 자체의 문제를 빼고는 겉으로는 관리 인터페이스도 아주 훌륭하고 속도도 빨랐습니다.

CMFForum은 느려서 쓰기가 무리이고.. fcForum은 아주 쓰기는 좋은데 코드가 유지보수가 불가능해보이고 국제화 문제가 있어서, 고민을 좀 더 해 봐야겠습니다~ :)

make config

한참 전에 들어온 것 같은데, 그 전에는 별로 신경쓰고 있지 않다가, 며칠 전에 어느 FreeBSD사용자가 [FreshPorts]lang/python 포트를 OPTIONS를 쓰게 고친 패치를 보내줘서 한번 써보게 되었습니다. ( 게으르긴 ;; )

make config가 생각보다 아주 괜찮은 듯 합니다. 흐흐 원래 포트에서 쓰던 WITHOUT_XXX WITH_XXX 등등은 빌드할 때 매 단계마다 넣어줘야해서 깜빡하면 잊어버리고, 다음에 업글할때도 portupgrade 설정 파일에 안 넣으면 또 넣어줘야하고 엄청 귀찮은데, 이제 아예 OPTIONS에 다음과 같이 써주면, on/off가 /var/db/ports 에 저장이 돼서 자동으로 들어오네요.

그래서 요게 들어있는 포트에서 make config 명령을 쳐주면 전에 다른 포트에서 쓰던 다이얼로그가 나옵니다. (물론 BATCH=yes면 디폴트 옵션으로.) 이야 드디어 OpenBSD나 Gentoo에서만 있던 이 화려한 옵션 선택이 드디어 포트에도 크크;

그런데, 혹시나 싶어서 [FreshPorts]x11/zenity 를 환경변수에 DIALOG로 저장해놓고 해봤더니!!!!

(안 뜹니다.) 두둥… ㅠ.ㅠ 좀 더 삽질해보고 zenity로 화려판 포트 옵션 설정을 꼭!!

–> 이후 얘기 –>

ganadist님의 도움으로 make config DIALOG=gdialog라고 하면 되는 것을 발견했습니다. 흐흐; gdialog라고 dialog랑 똑같은 인터페이스를 벌써 만들어 놨군요..

0405-zenityport.png

으흐흐 오랜만의 돼지저금통

0405-pig.jpg

으흐흐. 한 3달만에 돼지저금통을 또 하나 채웠습니다.~ 요즘 플라스틱봉투 20원 때문에 동전이 어찌나 많이 남는지;;

전에는 희망돼지에 가득 채웠을 때 피자 1판가격에 약간 못 미쳤는데.. 그것보다 2배는 크니까 이번엔 피자 2판 나오려나요~~ 저기 앞에는 100원짜리도 있고 10원짜리도 있는데 잘 뒤져보면 500원 짜리도 있답니다~~ ^.^

에헤헤. 요즘 동전 잘 안 바꿔 준다는데 걱정이 앞서는군요 _-_ 돼지잡아서 꽤 나오면 피자번개나 한판~ :D

이번달 전화요금

항목

금액

기본요금

13000원

부가세

1300원

통화요금

0원 (통화량 9분 – 무료제공)

문자서비스

0원 (총 19건 – 무료제공)

합계

14300원

-ㅇ-;;; 인간관계 개선이 필요한 걸까;;

Vim 끝나면 화면이 깨지는 문제

요즘따라, [FreshPorts]x11/gnometerminal 에서 [FreshPorts]editors/vim 을 쓰다가 나오면 터미날 그러면서 그 다음부터 글자들이 다 깨져버리는 현상이 있었습니다. (흐흑 나만 그런건가 ㅠ.ㅠ)

0405-gnometerm.png

그래서 늘 vim갔다가 오면 reset; stty erase ‘^?’ 해줘야하는데.. 어찌나 불편한지.. 그러나, 귀찮아서 그냥 늘 그렇게 쓰다가.. 드디어 더는 못 참겠다 해서 [FreeBSDMan]script 로 로깅을 해봤습니다. 그랬더니 바로 ISO-2022의 KS X 1001을 GL에 매핑하는 코드인 ESC $ ( C EM9L3N 을 출력하고서는 다시 GL을 ASCII로 안 돌려놓은 것.. 흐흑 그래서 그 다음부터 나오는 코드를 전부 그놈터미날이 KS X 1001이라고 가정해버려서 그런건데.. EM9L3N은 GL을 GR로 올려놓으면 ‘터미날’이 됩니다. 그런데, 그놈 터미날 문제인지, vim문제인지.. 아니면 또 다른 녀석의 문제인지 추적하기가 귀찮은 나머지.. ;; -ㅇ-; 그냥 임시 땜빵으로 alias vi=$HOME/bin/vimwrap하고서는 vimwrap에 다음 스크립트를 넣어버렸습니다.

(^[는 ctrl-v ctrl-[)

으흐.. 일단 되기는 하는데.. 나중에 시간날 때 다시 자세히 해 봐야겠네요;;

바닷가 Lush

흐흐. 신촌 현대백화점 지하를 지나갈 때마다 아으 이 향기 집에도 갖고가고 싶다 하는 엄청난 청량감을 느끼고 있었는데, 전에 집에서 한번 인터넷으로 찾아보니, [WWW]lush가 방향제나 아로마 테라피류가 아니라, 목욕용품 브랜드더군요. 흑흑 비누를 빻아서 집에 뿌려놓을 수도 없고~ ;; (프로그래밍 언어 [WWW]lush랑 페이지 분위기는 비슷한데 별 상관은 없는듯;)

0405-lush.jpg

그러던 중 선물로 받아서. 이히히. 드디어 그 엄청나게 매력적이라 집에 갖다 놓으면 생산성이 200%는 올라갈 것 같은 그 향기의 비누를 써보게 되었!! 캬아~~ (C양 고맙소~)

으음. 그 현대백화점 지하를 압도하는 그 향기의 정체는 이름이 “SEA VEGITABLE”이더군요~ (사진 속 위에 있는 청록색의 비누) 으음. 비누 위에는 HANDMADE라고 써있는데, 손으로 만든거라 그런지 모양이 상당히 삐뚤삐뚤합니다. 비누가 손으로 만들면 뭐가 더 좋은지는 잘 모르겠지만;; 뭐 고용 창출해서 인류 공영에 기여했다는 것을 광고하겠다는 뜻으로 생각하고 좋게 봐 줍니다. 흐흐;

일단 한번 면도를.. 거품이 잘 안 나서 그냥 살짝만.. 일단 향기는 역시 최고입니다. 잠이 살짝 오던게 확 깨버리고. 크흐. 아 뭔가 알고리즘 복잡한 코드를 막 짤 수 있을 것만 같은 힘이 불끈불끈.. 근데, 면도거품 없으면 늘 여기저기 베는 문제때매.. 이게 거품이 잘 안 나는 바람에 역시 오늘도 크게 베고 말았습니다 ㅡ.ㅜ 뭐 그 외에는 아주 좋습니다.~ 역시~ 나도 이제 웰빙인가. (..)

“SEA VEGITABLE”향이 나는 방향제가 있으면 참 좋겠습니다.