분산형 빌드팜 – buildbot

파이썬 메일링 리스트에 팀이 Zope 쪽에 구축한 빌드팜을 보여주면서
자동으로 파이썬 빌드/퇴행검사도 자동으로 할 수 있지 않겠느냐는
글을 올렸습니다. 그래서 빌드봇을 살펴봤는데,
Twisted기반으로 구현되어 있는 파이썬 프로그램이군요. 🙂

프로그램이 여러 플랫폼에서 돌아가야하는 경우에 특히 마이너 플랫폼이 많으면 하나 고쳤다고 막 엉뚱한 플랫폼에서 깨지고 그런 경우가 비일비재합니다. 그래서 구축하는 것이 FreeBSD의 PointyHat이나 도시락 같은 빌드팜이나 테스트팜들인데, 충분한 클러스터를 갖추고 있는 곳이라면야 이렇게 할 수 있겠지만, 개인적으로 별의 별 플랫폼을 다 지원하려면 돈이 이만 저만 드는 것이 아닙니다.

그래서, buildbot에서는 슬레이브가 정규화된 프로토콜로 분산될 수 있는 형태로 구축이 되었는데, 마스터만 하나 구축해 놓으면, 슬레이브는 자기 시스템에 계정을 따로 만들어줄 필요 없이 직접 보고해서 중앙에 로그나 성공 여부 같은 것을 알 수 있도록 하는 구조로 되어있습니다. 그래서, 희한한 플랫폼을 쓰는 사람들이 울분을 토로하고 싶을 때 빌드봇을 돌려주면 좋을 것 같군요.. 🙂

Zope buildbotTwisted buildbot같은 것들이 웹에서 확인할 수 있는 형태로 공개되어 있습니다.

iPod에 파이썬 포팅되다

Linux on iPod 프로젝트에서 파이썬을 iPod에 포팅했다고 발표했네요.

단순히 파이썬 셸을 띄워주는 것 뿐만 아니라, 파이썬으로 된 프로그램을 메뉴에다가 등록해 놓고 들을 음악을 찾거나 게임을 넣어거나 등의 여러가지 프로그램을 교체하는 것으로도 쓸 수 있는 것 같네요. ^_^;;

파이썬은 왜 빌트인 타입의 메쏘드를 못 바꾸는가

Io의 asString, asCharacter 같은 것 덕분에 앞뒤로 왔다갔다 하지 않고도 계속 쓸 수 있다는 점이 참 와닿아서, 파이썬에서는 그렇게 할 수 없을까 하다가, 전에 어떤 분이 파이썬에서 왜 베이스 타입에서는 메쏘드를 못 갈아치우냐 하시길래, “엇 안되나! (뻘쭘)” 했던 기억이 나서 좀 더 연구를 해 보았습니다. 으흐흐

파이썬의 타입 오브젝트의 플래그 중에 Py_TPFLAGS_HEAPTYPE이라는 것이 있는데 이것은 힙에 할당된 타입에만 들어가는 플래그라서, 즉, 런타임에 상속된 타입들은 이 플래그가 설정이 되지만, 컴파일할 때 스택에 할당된 타입 객체들은 이 플래그가 설정되어 있지 않아서 결국 “can’t set attributes of built-in/extension type”라는 에러를 뱉어냅니다. 그런데, 파이썬은 타입 오브젝트가 비록 스택에 있긴 하지만 const가 아니기 때문에 실제로 딕셔너리도 할당을 하는 등 변조를 하고 gc로 관리까지 하고 있어서 변경한다고 문제가 생길 것은 없었습니다. 그래서 그 부분을 패치해서 실험해 보면, (Object/typeobject.c의 type_setattro함수의 첫 if 블럭을 주석처리)

요렇게 잘 돌아갑니다~

과연.. 잘 되는데 왜 파이썬에서는 막아놓은 것일까!
그 이유는 메일링리스트를 한참 뒤져본 결과 귀도의 적극적인
의도
로 막아놓은 것인데, 귀도의 설명에 따르면
빌트인 타입 오브젝트들은 여러 쓰레드에 걸친 것 같은
공유되는 컨텍스트에서 같이 사용되는 경우가 많기 때문에
문제를 발생시킬 소지가 높은 핵이라서 이런 걸 공식적으로
허용해 줄 수가 없다고 하네요.
뭔가 수긍이 가는 것 같기도 하면서도.. 파이썬의 다른 면들은
과연 그렇게 깨끗했나 의심이.. 흐흐흐.. -O- 하여간 약간
아쉽군요~

try-except와 try-finally의 결합

그동안 파이썬의 예외처리를 처음 접할 때 한번 쯤은 실수해 볼만한 게 바로 try-except 밑에 finally를 쓰는 것이었습니다. 예를 들어,

이렇게 쓰면 야속하게도 에러가 나버리고 항상 이렇게
써야했습니다.

아이고 귀찮아라~~ 흐흐. 하여간 그동안 귀도가 finally가 except 절의 바깥에 있어야 except절에 확실히 걸린다는 것을 보여줄 수 있다고 안 된다고 하다가 올중반 쯤에 드디어 PEP-341을 승인하여서, except뒤에 항상 finally가 들어가고 except절도 finally에 걸리는 것으로 결정되었고,
드디어 어제 트렁크에 패치가 커밋되었습니다. 이제 자연스럽게
try-except-finally! ㅋㅋ; 그렇지만 try-finally-except로 쓰면
에러납니다~~

파이썬 2.5의 해시함수

파이썬 2.5에 새로 들어온 표준 모듈로 hashlib이 있습니다. 원래는 md5와 sha 모듈이 따로 있었는데, 작년과 올해에 연달아서 md5와 sha1이 깨지면서 상위 해시를 추가하자는 요청에 지난 9월에 sha 상위 버전에 기존 해시 펑션을 합쳐서 hashlib이 추가되었습니다. 원래 모듈은 하위호환성으로 그대로 제공되고용~

그런데 굉장히 흥미로운 사건으로 어제 Rivest씨가 파이썬 개발자 메일링 리스트에 상위 해시펑션은 파이썬에 언제 넣어주냐고 물어보는 메일을 보낸 것입니다. 오오오오오!! 지난 번에 버그 보고하는 것도 보긴 했지만, 파이썬에 이렇게 관심이 많으실 줄이야! 으흐흐흐~~~ 뭔가 모르게 뿌듯하군요 으헤헤

하여간, hashlib의 사용법은 기존 다른 모듈에 있을 때와 다른 것은 그냥 모듈명이 흩어져 있던 것이 합쳐진 것 밖에 없습니다.

귀도가 구글로!

파이썬 프로젝트의 창시자이자 BDFL인 귀도 반 로섬이 오늘
구글에 입사했다는 발표를 했습니다.
앞으로 구글에서 일과시간의 50%를 파이썬 개발에 투자할 수 있고
그 대부분은 Python 3000을 위해서 쓸 것이라고 하네요.
무척 회사가 마음에 드는 모양입니다. 🙂

파이썬에 ElementTree 통합~

세상에 이보다 쉬운 XML 파서/제너레이터가 있을까 하는 생각이
들 정도로 단순한 API를 제공해 주는 프레드릭 런드의 ElementTree가 드디어 파이썬에 통합되었습니다. 그동안 프레드릭의 고집 때문에 다른 사람들이 토론하기를 꺼리고 있었는데 마침 이번 토론에서는 프레드릭이 적극적으로 참여하게 돼서 이제 드디어 파이썬 안에도 쓰기 쉬운 XML 파서가 생겼습니다. 이히히. 귀도가 간단하게 “pythonic”이라고 해 줄 정도로 파이썬의 기본 이념에 충실한 것이 아닌가 싶군요~

요렇게 하면 간단하게 xml 조작해서 쓰기까지! — 파이썬 2.5부터 제공됩니다. 🙂

파이썬 subversion으로 이전 완료

오늘 드디어 파이썬 소스 저장고가 CVS에서 Subversion으로
바뀌었습니다. 원래 소스포지
CVS를 쓰고 있었지만, 소스포지 안정성에도 문제가 있고
소스포지가 subversion 지원한다고 한지 벌써 수년이 지났는데도
진척이 없어서 결국은 기존에 파이썬 호스팅을
지원해주던 네덜란드의 ISP인 XS4ALL이 svn.python.org을
새로 지원해 주어서 운영이 되게 되었습니다.

PEP-347
얘기된 대로, 여러가지 조건들 중에서 공중 익명 접근으로는
보통 많이 쓰듯이 DAV를 통해서 지원해 주고, 개발자들은
svn+ssh로 접근하게 되긴 했는데, 보통 방식하고는 좀 달라서
공동의 계정을 하나 두고 간단한 wrapper가 인증된 키를 구분해서
누가 커밋했는지를 표시하게 됩니다. 좀 독특하긴 하지만 돌아가긴
하는군요..

그래서 변환된 스토리지를 보면 변환 직후의 리비전이
r41336이군요. 그리고, 원래 소스포지 CVS에서는 개발자의
전체 이름을 메일 데몬에서 알려주고, 소스포지 로그인ID를
개발자 ID로 해서 썼었는데, 이제 subversion으로 바뀌면서
풀네임을 소문자로 표기한 것을 로그인네임 겸 풀네임으로
쓰게 되었습니다. 그래서, 마틴 같은 경우에는 martin.v.loewis
로 표기하게 되었고, 저는 hyeshik.chang 이 되었습니다.
대문자로 안 쓰니 영 거시기 하네요. 흐흐 -O-;

그동안 디렉토리가 너무 많아서 cvs up이나 diff 하려면 꽤
힘들었는데 이제 svn 덕 좀 보게되어 기쁩니다. ^_^

Twisted 책이 진짜 종이 책으로..

Abe Fettig가 몇달 전쯤에 미리 얘기한대로, Twisted에 대한 진짜 종이 책이 나왔군요. Twisted는 워낙 방대한 디자인이라 철학을 이해하는 데에만 한참 걸리는 것을 감안하자면, 책에서 풍부한 도안을 통해서 알려주는 것이 필요할텐데 늦게나마 아무데서나 볼 수 있게 책이 나와줘서 잘 됐습니다. (게다가 표지가 이렇게 멋지다니!!)

자세한 내용이나 목차 같은 것이 아직 올라온 온라인 서점이
없어서 무슨 내용이 다뤄졌는지는 잘 모르겠지만, 회사에서
Twisted를 쓸테야! 하고 혼자 주장할 때 “책도 나왔으면 이제 대세 아닌가?”라고
말할 수 있는 뭔가 지원군이 생겼다고 볼 수도 있겠습니다. 아하하;;;;;

Twisted가 아무래도 국내에서 어필할 수 있을만한 성격이 아니다보니, 번역서가 나오지는 못하겠지만 수입이 얼른 돼서 싸게 구입할 수 있었으면 좋겠네요~

Python Cross-Reference

AST 소스를 보려고 vi에서 한참 보다가 따라가기가 귀찮아서
근래 자주 보던 fxr과 비슷하게
크로스 레퍼런스를 한번 만들어서 보았습니다.

PXR (Python Cross-Reference)

으음.. lxr이 생각보다는 좀 설치가 간단했는데, 가장 난감한게
mod_perl 1.0에 의존성이 있어서, 아파치 1.3을 깔 수 밖에 없다는
것이군요. 그래서 아파치 1.3을 구석진 곳에다가 깔고서 localhost
에서만 받도록 해서 프락시로 연결했습니다. 으흐..

이제 파이썬 소스 볼때 쉽게.. ^_^;;