파이썬 포트 문제와 Innovative Whack Pack

지난 대안언어축제에서 아마도 가장 긴 여운을 남겼던 것은 아무래도 마지막 자기 포부를 말하고 주변에서 환호성으로 축하해 주는 것이었습니다. 그게 원래 할 계획이 있었던 것이 아니라, 그 전날 다음 날 회고를 안 지겹고 인상에 남고 흥미롭고 지쳤을 때도 다 같이 좋은 분위기에서 참여할 수 있는 걸 찾기 위해 열심히 찾아낸 끝에 나온 아이디어였습니다. 그게 갑자기 뚝 떨어진 게 아니라, 뭘 할지 무척 고심을 하다가, 여유있게 어슬렁거리던 창준형이 갑자기 “비장의 무기를 준비했지!” 하고 자신있게 스으윽 꺼낸 것이 바로 Creative Whack Pack 이었습니다. 카드를 몇장 들고 보고 있으려니 갑자기 승범이가 “이게 좋을 것 같아요!” 그러더니 막 아이디어를 쏟아내는데… 흐흐 무척 탐나서, 돌아와서 바로 아마존에 주문해서 구입~ 마침 결제하려고 보니 아마존에서 할인 기간이라고 수퍼 세이버 시핑을 하는데 뭘 더 사면 싸다고 추천을 해주길래 Innovative Whack Pack도 샀지요. 순간 아마존의 상술에 속아서 -ㅅ-;

음 하여간, 요새는 FreeBSD의 파이썬 포트 때문에 무척 고생을 하고 있었습니다. 거의 1주일 넘게 거의 모든 여유시간을 포트 고치는데 쓰고 있는데도 아직도 고칠 게 200개 넘게 남았군요. =_=;;; 이번에 어찌하다가 6.2을 위한 포트 프리즈 직전에 파이썬을 2.5로 업데이트하게 되었는데, 그게 알고보니 대략 4가지 정도 되는 다양한 문제를 만들게 돼서, 파이썬을 쓰는 다른 포트들이 거의 500개 남짓 깨져버린 것이었습니다. 당연히 수많은 사람들이 메일링 리스트에서 난리가 나고, 포트매니저들도 말하고 그러지 그랬냐고 핀잔도 주고.. 아하하; 파이썬 2.2, 2.3, 2.4도 늘 프리즈 직전에 임포트 했었는데.. 관성이 문제를 일으키는군요 –;

점점 문제가 마치 괴혼에서 쓰레기 굴리듯이 불어나서, 2.4로 돌리느냐 문제를 계속 고치느냐 고민을 하고 있던 중에, Innovative Whack Pack을 한번 써 볼까 하고 손에 들었습니다. 사실 카드를 사긴 했지만, 학교 수업들을 다 순수과학 2학년 전공 과목을 듣다보니 쓸 일이 전혀 없더군요. 그래서 일단 마구 섞고, 3장을 뽑았습니다. 나온 것이 위의 3장~ insight 면에는 그림과 Heraclitus의 짧은 경구들이 있습니다. 그리고, strategy 면엔 밑의 문장이..

짧게 요약해 보면,

  • Donkeys prefer garbage to gold: 지금 열심히 하는 게 나중에도 중요한 일일까? 어떤 상황이 되면 그 가치가 변할까? 지금 생각하고 있는게 나중에는 쓸 모가 없어지지 않을까?
  • When there is no sun, we can see the evening stars: 문제에서 떨어져 봐라. 지금 해결하려는 문제에서 떨어져서 잠시 쉬면서 생각해 보았는가?
  • Sea water is both pure and polluted: for fish it’s drinkable and life-giving; for humans undrinkable and destructive: 문맥을 바꿔보아라. 어떤 다른 문맥에서 니 생각을 다르게 생각해 봤니? 의미가 어떻게 변하니?

그래.. 가만 생각해 보니, 지금 포트를 열심히 욕먹어가면서 고쳐봐야 뭐 나중에는 별로 티도 안 날 것이고, 지금 남들이 고이 보지 않아서 조바심내가면서 하고 있는 포트 작업들도, 프리즈 기간이 아니라 그냥 평상 시 같았으면 잘한다고 고맙다고 그럴 작업이었던 것입니다. 으흐흐. 그래 파이썬 2.5를 넣어야 된다는 것을 먼저 불변의 목적으로 딱 박아두고 모든 것을 생각하고 있었는데, 그냥 빼버려도 별 상관 없을 것 같다고 생각하니 홀가분하고 좋습니다. ^_^* 이제는 프리즈 기간 직전에 이런 짓 안 해야겠습니다;;;

평소에 포팅을 하다 보면, 문제를 해결하는 방법이 무척 많은데, 뭘 선택해야할 지 고민할 때가 많습니다. 그래서, 포팅할 때 고려해야 할 때 선택이나 아이디어에 도움이 될 만한 것들을 모아서 portlint 같은 데서 엉뚱하게 한 개 씩 출력해줘도 좋지 않을까 생각을 해 봤습니다; 그런데 아무래도 카드로 만들어야 뽀대가.. 흐흐;

파이썬 2.5 릴리스

오늘 파이썬 2.5가 정식으로 릴리스되었습니다.
파이썬이 점점 어려워진다고 불평하는 사람도 물론 많지만,
파이썬이 버전이 올라갈 수록 삶이 더 편해진다고 말을 하는
사람도 간혹 있는게, 뭔가 시간이 지나면 다들 좋아하게
될 것 같습니다. =3=3

FreeBSD 포트에서는 gnome@ perl@ 처럼 python@ 커미터 그룹을
만들려는 작업을 하고 있는데, 이 작업이 완료되면 python@으로
메인테이너십을 바꾸면서 공동 작업으로 버전을 올릴 계획입니다.
아마도 3~4일 정도 걸리지 않을까 싶네요.

파이썬 2.5에서 바뀐 점들에 대해서는 앞에서 다뤘던 파이썬 2.5 미리보기 연재를 참조해 주세용.

Framework 2.1: django vs. Ruby on Rails

이전에 몇 번 말씀드렸던 행사가 오늘 발표자 분들과 협의를
끝내고 이제 참가자를 받게 되었습니다. 선착순이니 관심있으신
분들은 얼른 신청해 주세요. 참, 이미지 링크는 얼마든지 퍼가셔도
괜찮으니 홍보도 많이 해 주시면 좋겠습니다~

아, 그리고, 전에 말씀드렸던 것과는 달리 별로 능동적인 활동이
필요한 행사가 될 것 같지는 않으니 쑥쓰러워서 망설여지시는
분들도 거리낌없이 오셔도 될 것 같습니다. ^^;

안내

  • 시간: 2006년 9월 23일 (토요일) 오후 2시 ~ 6시
  • 장소: 엔씨소프트 옥산빌딩 15층 대회의실 (아래 약도 참조)
  • 참가비: 이번에는 무료!
  • 참가신청: 파이썬마을, 한국루비포럼 각 20명씩 (비회원도 신청 가능)

행사 일정

  • 2:00 기조 연설 (이만용)
  • 2:15 Ruby on Rails 소개와 시연 (황대산)
  • 3:15 휴식
  • 3:35 Django 소개와 시연 (김형용, 이정민)
  • 4:35 휴식
  • 4:45 Rails 대 Django! (진행: 장혜식, 패널: 강문식, 김형용, 이정민, 황대산)
  • 5:30 <차회예고> TurboGears 미리보기 (이만용)
  • 5:40 <차회예고> Seaside 미리보기 (김승범)
  • 5:50 행사 종료

py-rrdtool 1.0b1 릴리스

거의 4년 만에 py-rrdtool 업데이트를 합니다. 원래 4년 전에 rrdtool의 무서운 인터페이스를 좀 더 파이썬 답게 인터페이스를 만들어 보려고 시도는 했지만, 꿈을 너무 원대하게 품는 바람에, 제대로 만들지 못했습니다.

그런데 마침 얼마 전에 RedHat에서 일하는 Mihai Ibanescu 씨가 굉장히 멋진 껍데기를 만들어 줘서, 오우! 바로 py-rrdtool 업데이트를 하게 만드네요. ^.^ 일단 베타버전인 py-rrdtool 1.0b1을 올렸습니다.

원래 이렇게 했던 것이

이런 식으로! ^.^

혹시 py-rrdtool을 원래 쓰시던 분들은 정식판을 릴리스하기 전에 한 번 맛 보시고 개선할 부분이 있을지 소감 같은 것 알려주세용.

대안 웹프레임워크 연합 세미나 (가칭)

지난 번에 잠깐 얘기를 꺼냈던 대로, 대안 웹프레임워크 연합 세미나(가칭)이 거의 윤곽이 잡히고 있습니다. 오늘은 NCsoft의 도움으로 장소가 마련되었고, 이제 곧 참가자를 받을 예정입니다.

이 행사에서는 빠른 프로토타이핑과 재활용 패턴을 강조하는 여러 웹 프레임워크를 다룰 예정입니다. 이번에는 처음인 만큼 다음 4가지 프레임워크가 참여합니다.

음.. 저는 할 줄 아는 게 없어서 그냥 구경만.. =3=3 날짜는 9월 23일 (토) 오후 중에 4~5시간 정도 이뤄질 예정입니다. 형식은 일반적인 튜토리얼 형식은 아니고, 대안언어축제에 참가하신 분들이면 쉽게 적응하실 수 있는 굉장히 능동적인 참여가 필요한 방식으로 진행될 것입니다.

구체적인 것들이 좀 더 결정되면 다시 알려드리고 광고를 하도록 하겠습니다. ^^ 지금으로써는 아마도 파이썬마을한국루비사용자포럼에서 각각 15명, 스퀵사용자모임에서 10명 정도씩을 따로 모집하는 형식으로 할 것 같습니다.

이런 것이 궁금하다, 이렇게 하면 좋겠다 등등 의견 있으신 분들은 답글 올려주시고용 +_+ 혹시 행사 당일 진행에 도움 주실 분들도 알려주시면 고맙겠습니다~ ^^

CJKCodecs 오랜만에 버그 수정

오랜만에 CJKCodecs의 버그가 발견되어서 수정하였습니다. Oren Tirosh씨가 전체 코덱에 대해서 roundtrip 테스트를 해서 결과를 보내 줬는데, 그 중의 일부가 버그로 밝혀져서 -O-;;
이제 berlios에 있는 공간은 배포용으로만 사용하고 있기 때문에, 그쪽에 커밋은 따로 하지 않았고, 파이썬 trunk로만 커밋했습니다. 2.5는 지금 브랜치가 갈라져 있어서 넣지 못했는데, 아무래도 지금 릴리스 직전이다보니 넣을 수 있는 가능성은 별로 높지 않고, 2.5.1에나 들어갈 수 있을 것 같네요.

수정된 버그의 목록은

  • gbk 인코딩에서 gb2312에서 U+30FB KATAKANA MIDDLE DOT이 먼저 매핑되는 바람에 에러가 나야하는 게 안 나던 버그가 수정.
  • gb18030 인코딩에서 마찬가지로 U+30FB가 gb2312 매핑에 가리는 바람에 유니코드 매핑이 아니라 다른 곳에 들어갔던 버그가 수정
  • iso2022-jp-2 에서 KS X 1001과 GB2312를 표준에서는 G0에 인코딩 해야 한다고 되어있는데, G1에 인코딩하고 있었던 버그를 수정
  • iso2022-jp-3과 iso2022-jp-2004에서 JIS X 0213:2 영역을 인코딩하지 못하던 버그를 수정.

요약하면.. (대략) 한국사람과 관련된 것은 하나도 없습니다. -ㅇ-;;

파이썬 2.5 미리 보기: 8편 절대/상대 경로 임포트

이전 연재 보기

파이썬 2.5 미리보기 이제 마지막회입니다. 파이썬 2.4에서 import 뒤에 괄호치기 같은 문법이 약간 들어왔는데, 2.5에서는 PEP-328 상대경로 import가 들어왔습니다.

파이썬의 패키지 구조는 다단계 구조입니다. 그래서, 패키지를 구성할 때 한참 밑에 들어가 있는 모듈이 상위 단계에 있는 모듈을 들여오기 위해서는 항상 전체 경로를 다 써야 했습니다. 예를 들어서, 다음과 같이 패키지 구조가 구성되어있다고 할 때,

defer 모듈에서 proactor 모듈을 임포트 하려면 이런 방법이 있습니다.

그리고, defer 에서 base를 들여오는 방법도 2가지 방법이 있습니다.

[1]과 [2], [3]과 [4]는 각각 대충 보시다시피 각각 절대경로와 상대경로의 차이입니다. 그동안 권고사항으로 패키지 안에서는 꼭 절대경로로 임포트해 주세용~ 이라고 항상 말을 해 오긴 했지만, 대부분의 파이썬 사용자들이 직접 파이썬 매뉴얼을 읽고 공부하는 것이 아니기 때문에, 필드에서는 상대경로가 더 많이 통용되고 있었습니다. 그런데, 여기서 심각한 문제가 발생하는데, 상대경로 임포트가 시점에 따라서 중복으로 임포트 되어서 오작동을 하거나, 엉뚱한 것이 임포트되기도 하고, base같은 흔한 모듈은 더욱 더 큰 문제가 되곤 했습니다.

그래서, 파이썬 2.6부터는 절대경로 임포트를 강제화해서, 위의 예에서 [2]와 [4]같은 것은 이제 더이상 허용되지 않습니다. 대신, 이제 상대경로라는 것을 명시적으로 지정하는 문법이 새로 들어왔습니다.

음… 저는 그냥 앞으로도 계속 절대경로로 쓰고 싶어지네요 –;;;;;;

파이썬 2.5 미리 보기: 7편 표준 라이브러리

이전 연재 보기

파이썬 2.5b2가 며칠 전에 발표되었고, 이제 2.5 최종 릴리스가 바싹 다가오고 있습니다. 오랜만에 파이썬 2.5 미리보기를 이어서 ^^;
오늘은 라이브러리 변화를 간단하게 요점정리해 드리겠습니다~

functools 모듈

이번 파이썬 2.5에서 처음 들어오는 모듈로 PEP-309 Partial 을 포함한 functools 모듈이 있습니다. 아주 옛날에 오픈룩에서 소개해드린 적이 있는 놈입니다. (거의 알박기 식으로 구현을 해 놓은 느낌이;;) 로그를 남기거나, 함수에 들어갈 인자를 여기저기서 조금씩 주거나 할 때, 등등 아주 유용하게 쓸 수 있겠죠~ 특히 함수형 언어 하시던 분들은 반가우실 것 같습니다. ^^;

잘 생긴 AMK의 Functional How-To에서 좀 더 깊은 함수형 프로그래밍의 활용을 다루고 있으니, 읽어보세요 +_+

ctypes

ctypes가 들어왔습니다. 자세한 것은 미리보기 4편에서 소개해 드렸습니다.

ElementTree

가장 파이썬답게 XML을 파싱할 수 있는 라이브러리인 effbot의 ElementTree도 표준 라이브러리로 들어왔습니다. 자세한 내용은 전에 블로그에서 소개해 드린 적이 있습니다. 요새 드는 생각이, BeautifulSoup도 표준 라이브러리로 들어오면 좋지 않을까 하는.. 으흐흐.. 온통 BeautifulSoup.py를 포함해서 배포하는 프로그램들이 여기저기 널려있어서;;

hashlib

전에 한번 오픈룩에서 언급한 적이 있는데, 기존의 md5, sha 모듈 등을 모두 합쳐서 통합된 API로 쓸 수 있게 hashlib이 들어왔습니다. 이제 sha-512까지도 지원하기 때문에, 아직까지는 콜리젼이 발견되지 않은 높은 수준의 해시도 선택적으로 쓸 수 있게 되었습니다.

sqlite3

요즘 전성기를 누리고 있는 파일기반 내장용 SQL 데이터베이스인 SQLiteDB-API 2.0 어댑터 라이브러리가 들어왔습니다. 아마 대부분의 오픈소스 배포판에서는 라이브러리 의존성 때문에 별도의 패키지로 떨어져서 돌아다니겠지만, MS윈도우에서는 파이썬 인스톨러로 깔면 sqlite3 모듈을 바로 쓸 수 있게 되었습니다. (FreeBSD에서는 databases/py-sqlite3 모듈로 따로 분리하였습니다.)

wsgiref

PEP-333 Python Web Server Gateway Interface에서 정해진 스펙을 구현한 참조구현 라이브러리입니다. WSGI는 그동안 CGI,
Twisted,
Zope,
CherryPy,
mod_python 등이 모두 따로따로 서로 다른 API를 쓰고 있으면서도 비슷한 기능을 지원하고 있었기 때문에, 쓸데없이 포팅이 귀찮았던 문제를 해결하기 위해 정의된 놈입니다. 그래서, WSGI 규약만 제대로 지키면, 모듈 하나만 제대로 구현해서, Twisted에서 돌아가던 것을 mod_python에서도 돌릴 수 있고, Zope에서도 돌릴 수도 있고 여러모로 활용이 편하게 되었습니다. wsgiref는 독립서버로 작동하는 참조구현 모듈입니다. 테스트에도 간단하게 쓸 수 있겠죠~

그 외에는~

앞의 큼직큼직한 변화 외에도, 자잘한 라이브러리 버그 수정과 성능 향상, 기능 추가가 많이 있었습니다. 그 중에 뚜렷한 변화 몇 가지만 추려 보자면,

  • mailbox 모듈이 메일 내용을 수정하고, 삭제할 수 있게 되었습니다.
  • codecs.lookup()에서 이제 터플을 돌려주지 않고, stat_result 같은 흉내내는 놈을 돌려줍니다.
  • 쓰레드 lock을 지원하는 데코레이터들이 들어있는 contextlib 모듈이 들어왔습니다.
  • utf-8-sig 코덱이 추가되었습니다. 윈도우 사용자 중에서 메모장으로 코딩하시는 분들도 이제 utf-8로 저장해서 파이썬으로 실행할 수 있습니다. –;
  • webbrowser 모듈이 최신 브라우저들에 대한 지원을 대폭 강화하였습니다.
  • locale 모듈에서 LANG이 LC_CTYPE보다 우선시돼서 생겼던 버그가 수정되었습니다.
  • 그동안 이름없이 seek을 해야 했던 슬픔이 해결되었습니다. os 모듈에 SEEK_SET, SEEK_CUR, SEEK_END 상수가 들어왔습니다.

파이썬 튜토리얼 한국어판 공동번역

얼마 전 파이썬 마을에서 한 회원께서 파이썬 튜토리얼 없나요?라고 질문하시면서, 없으면 직접 번역하겠다고 나선 것을 계기로 해서, 번역에 대한 얘기가 꽃피고 있습니다.
그래서, 옛날에 번역된 것은 있었지만, 결국 업데이트가
유지하기가 매우 힘들어서 지금은 낡아서 소용없는 것이 되었기에
이제 제대로 번역할 수 있도록 자리를 마련했습니다.

이번에는 파이썬 svn의 리비전을 기록해 두고 업데이트되는 대로 바로 변경사항을 반영해서 항상 최신 문서가 유지될 수 있도록 하려고 합니다. 그리고 원래 문서 그대로 LaTeX 문서를 고쳐서 작업을 하는 방향으로.. 🙂

현재는 파이썬 마을 회원이신 jailbird 님께서 혼자 첫 부분을 꽤 번역하셨는데, 앞으로 다른 분들도 교정과 번역, 퇴고 등의 작업에 참여해 주시면 좋은 결과가 있을 것 같네요. 한국어 문서도 언젠가는 일본어 번역처럼 전체 문서를 제공할 수 있는 날이 오겠죠~
여유가 있으신 분들의 많은 참여 부탁 ^.^;
어느 정도 진행이 되고 나서, 앞부분 초벌 번역의 경험을 토대로 전체적인 번역 정책을 세워서 일관화도 해야하고 할 일이 많군요~

혹시 latex2html에서 인코딩 관련해서 잘 아시는 분은 좀 도움을; 옵션을 적당히 넣어 줘도 입력을 latin1으로 받아서 자꾸 깨지는군요;;

인코딩을 모르는 문서 디코드하기

피드를 읽다가 BeautifulSoup 새 버전이 나왔다는 소식을 듣고, 뭐가 바뀌었는지 궁금해서
홈페이지를 가 봤습니다. 그런데, 전에 없던
cjkcodecs, iconvcodec에 대한 링크가 갑자기 생긴 것입니다.
오잉 BeautifulSoup에서 웬 cjkcodecs 링크람~ 하고 자세히 봤더니
옆에 chardet라는
인코딩을 자동으로 결정해 주는 라이브러리가 붙어있는 것입니다!

호오.. BeautifulSoup은 지금까지 취해왔던 “개떡같이 쓴 것도 찰떡같이 알아듣는다”를 충실히 지키기 위해, 이제 인코딩이 언급되어 있지 않은 문서도 마구 디코딩을 해 줄 장정인가봅니다;;

Mark Pilgrim이 만든 chardet는 작년 8월에 나온 것인데, 노가다로 일일이 디코딩해보고 결정하는 것이 아니라, 각 인코딩 별로 보통의 빈도에 대한 통계
자료를 기반으로 해서 결정한다고 합니다.
나온지는 제법 오래된 것인데, 참 신기하고 재미있네요.
이제 트랙백 받는 것도 chardet 붙여서 똑똑하게 받아 봐야겠습니다.
^.^; (통계자료는 모질라 안에 들어있는 것을 포팅한 것이라고 합니다.)