드디어 파이썬 컴파일러가 AST로 교체!

얼마전에 예고되었던 대로, 드디어 CPython의 컴파일러가 AST
기반으로 교체되었습니다. AST 파서는 거의 Perl6처럼 오랫동안
허풍웨어같은 척을 하고 있었지만, 올해 들어서 활발한 개발자들의
작업으로 거의 완성 단계에 이르러 드디어 메인 브랜치로 들어오게
되었습니다. 🙂

AST의 주요 개발자 중의 하나인 Neal의 설명에 따르면, AST를 사용하게 되면 Jython과 문법 정의 부분을 공유하기 때문에, 새로운 문법을 적용하는 경우에 전에 비해서 훨씬 간단해 진다고 합니다. 그리고, 원래 쓰던 파서/컴파일러에 비해서 구조화가 잘 되어 있기 때문에,
앞으로 최적화나 새로운 기능을 넣을 경우에 구조 때문에 고생하는
것이 많이 줄어들 것이라고 하네요.

우선은 속도상으로는 직접적인 이득은 없지만, 앞으로 뭔가 대단한 일이 일어날 것 같아서 기분이 상큼합니다. ^_^;

CJKCodecs 뒷이야기

오늘은 yser님의 다음 질문에 대한 답변을 겸해서 CJKCodecs의 뒷이야기에 대해서 얘기할까 합니다.

파이썬 2.4 에 유니코드 코덱 추가된 것 보면서 신기해하는 중입니다. 오픈소스로 개발되면서 막상 한국인이 비교적 알려져있는 프로젝트에 정식으로 코드 추가 되는 걸 못본지라.. 그런데 저 많은 인코딩 정리하면서 별로 힘들진 않으셨는지? 간만에 저런걸 보니 머리가 지끈거리는군요.

사실 코드 쪽에 관심이 있습니다. 아는 분이랑 정보 교환해가며 이해할려고 한참 헤맸던 적도 있는데 국내엔 정말 자료 찾기가 힘들어서 정작 외국에서 다 찾아야 하더군요. 이럴 땐 정말 영어 독해 잘하는 게 절실합니다.

파이썬 2.4에 CJKCodecs가 들어간 것에 대해..

우선, 파이썬 2.4에 추가된 것에 대해서는 코덱을 따로 설치하지 않아도 돼서 좋긴 하지만, 한국인이 기여한 것으로는 서지원님의 제너레이터 익스프레션 구현이 좀 더 인상적입니다. 🙂 제너레이터 익스프레션은 누구나 쓰는 일반 문법이면서 파이썬의 장래에도 큰 영향을 미칠 부분이라서~ 코덱은 그냥 보조적인 역할이지용. 그리고, 그 외에도 한국인이 올린 패치는 수도 없이 많습니다~

국제화(i18n)에 대한 문서의 부족..

한국어 코드에 대한 것들은 사실 찾아보면 국내에도 자료가 제법 있습니다. 김경석 교수님 홈페이지도 있고, 카이스트에 있는 좀 오래된 자료 중에서도 몇가지 괜찮은 게 있습니다. 일본어나 중국어 정보처리에 대한 것은 국내에는 자료가 크게 많지는 않은 편인데, 사실 한국어 사용자 중에서 일본어나 중국어, 베트남어 정보처리를 프로그래밍 해야하는 개발자가 얼마나 될 지를 생각해 보면 그다지 자료가 많아야 할 필요는 없다고 생각합니다. 많은 개발자가 실제로 쓰는 자료가 풍부해야겠지요..

CJKCodecs의 전신 KoreanCodecs

여기부터는 유아저씨의 《신화창조의 비밀》 스타일로.. –;; CJKCodecs는 최초에 KoreanCodecs로 시작되었습니다. KoreanCodecs는 2001년에 지금은 OSK에 계시는 이만용이사님의 작품인데, 당시에 파이썬 유니코드 스펙이 나오고 얼마 지나지 않아서 나온 것이라서, 파이썬 안에 들어있는 charmap 코덱처럼 딕셔너리 자료형을 기반으로 순수 파이썬으로 구현되어 있었습니다. 룩업 때문에 일어나는 속도 저하를 극복하기 위해서, 별도로 KoreanCodecs 2.0을 fork해서, C로 작성된 코덱을 추가하였습니다. KoreanCodecs 2.0에서는 디코딩과 인코딩 모두 trie와 비슷한 자료구조를 사용해서 빠르면서도 메모리 소모가 적은 형태로 구현을 해서, 나중에 JapaneseCodecs의 구조에도 영향을 주었습니다.
KoreanCodecs 2.0이 처음 나온것이 2002년 2월이었고, 2002년 12월 정도까지 업데이트가 됐습니다.

CJKCodecs로 통합

2003년 초, KoreanCodecs, JapaneseCodecs 모두 활발히 메인테인은 되고 있었지만, 파이썬에 들어가기에 용량이 지나치게 크고 메모리를 많이 사용한다는 문제점이 지적되어서 많은 유럽어권 개발자들이 꺼리고 있었습니다. 그리고 파이썬에 들어가더라도 관리할 사람이 필요했는데, JapaneseCodecs를 개발하던 카지야마씨가 박사학위 논문으로 너무 바빠서 뭐 이런 저런… 으흐흐..

ChineseCodecs는 사실상 그때 전혀 관리되고 있지 않았고, 파이썬 2.3에서 새로 들어간 PEP 293 코덱 에러 콜백기능 때문에, 기본 코덱 구현조차 멀티바이트 인코딩에서는 극도로 어려워지고 코드 양이 엄청 늘었으며, 스트림 코덱은 정말 복잡한 상태가 돼 버렸습니다. (PEP 293을 쓴 사람은 독일 사람이라 별로 난이도에 대해서 고려를 안 한듯 했지만..;) 그래서 결국은 PEP-293을 지원하는 코덱 프레임워크를 만들고 그 걸 이용해서 한, 중, 일 인코딩을 모두 지원하는 방향으로 구현해 버렸습니다. 결국 2003년 6월 첫 CJKCodecs을 내놓았습니다.

CJKCodecs 성숙

CJKCodecs는 사실 한국에서는 인코딩이 지원되느냐 마느냐 정도로 아주 간단한 문제였기 때문에 큰 관심을 끌지는 못했지만, 일본에서는 인코딩 수가 장난이 아닌데다가 캐릭터셋도 수시로 업데이트가 되기 때문에 많은 관심을 끌었습니다. 초창기에 CJKCodecs의 일본어 캐릭터셋 중에 JIS X 0201-R과 JIS X 0208같은 경우 표준을 정확하게 준수해서 구현을 했지만 오히려 그렇게 한 것이 일본 사용자들의 현실적인 사용에 불편을 줘서, 실제로 일본에서 널리 쓰일 수 있는 형태로 대폭 개정하는 등 여러가지 현실화 작업을 거쳤습니다. 그리고, 일본의 최신 표준이었던 JIS X 0213:2000을 반영해서 거의 12개의 일본어 인코딩을 지원하기 시작했습니다.

파이썬으로 편입

파이썬 2.4 릴리스를 위한 피쳐 프리즈가 다가오던 2004년 초에, 드디어 표준 파이썬에 CJKCodecs를 통합하려는 작업을 시작했습니다. 마침 2003년 12월에 제가 itertools 모듈 관련 작업을 위해서 파이썬 커미터로 들어가 있었기 때문에, 관리상의 문제도 없었고 패치에 안간힘을 써서 메모리/소스 용량을 최소로 줄여서 서구권 사용자들에게 잘 보이도록 노력해서 결국은 별 수정 없이 들어가게 되었습니다. 당시에 사실 용량 부담을 줄이기 위해서 euc-tw나 iso-2022-cn같은 것을 지원하기 위해 필요한 CNS 11643을 빼버렸는데, 아직도 파이썬에서는 CNS 11643이 빠져 있어서 euc-tw를 지원하지 않고 있습니다만.. 대만 사람들이 별 관심이 없는지 한 번도 거기에 대해서 얘기를 들은 적이 없어서 그냥 빠진채로 놔두고 있습니다. 으흐흐;

편입 이후의 변화

파이썬에 편입된 이후에는 우선 일본에서 새로 나온 표준인 JIS X 0213:2003 지원과 홍콩의 새로운 표준인 HKSCS 2004를 지원했습니다. 소스코드가 캐릭터셋과 인코딩들이 다 각각 나뉘어 있어서 모듈 수가 20개 가까이 됐던 것을, 각 국가별로 캐릭터셋과 인코딩을 모두 묶어서 1개씩으로 만들어버렸습니다.

CJKCodecs 편입 과정에서의 느낌

CJKCodecs를 만들고 파이썬에 넣는 과정 중에서 느낀 점이 많았습니다. CJKCodecs를 만들었을 때 KoreanCodecs나 ChineseCodecs보다 빠지는 점 없이 완벽한 대체판이 될 수 있었음에도 불구하고, 한국과 중국 모두 CJKCodecs가 별로 반향이 없었다는 점에서, 사용자들의 관심은 아무래도 자기 언어를 쓰는 것에 보다 관심이 있는 것이라는 점을 깨닫게 되었습니다. 당연하겠지요. 저도 그런데. 이히히. 당연한 것을 개발에 한참 빠져있으면 까먹게 되더군요.. ㅡ.ㅜ

한편, CJKCodecs가 관심을 얻은 곳은 일본 사용자들 중에서 새 표준에 관심있는 사람들이나 서구권 개발자들이었습니다. 서구권 개발자들은 그 지긋지긋한 CJK 문제를 CJKCodecs 하나만을 끼워줌으로써 말끔히 해결할 수 있다는 점에 매력을 느낀 것 같고, 일본에는 특유의 문화로 독특한 것 좋아하는 사람들이 많아서.. -.-;; 그래서 그 덕분에 일본의 현실에서 쓰는 코드와 다른 표준들을 피해가는데 많은 도움을 얻을 수 있었습니다.

그리고 또 하나! 패치에 있어서 첫인상은 정말 중요하다는 점..
보통 패치를 올릴 때 대충 만들어서 올린 다음에, 계속 고쳐야지 하는 경우가 많은데, KoreanCodecs를 파이썬에 넣으려고 패치를 올렸을 때 초기에 버그가 좀 많아서 개발자들이 처음에 시도해 보다가 나중에는 다 고치고도 별 관심을 보이지 않았습니다. CJKCodecs 때는 그래서 리뷰에 리뷰를 거쳐서 깔끔하게 올렸더니 첫인상이 좋았던지 단번에 반응이 꽤 좋았던 것이.. 첫인상의 중요성을.. 🙂

collections.rbtree

2004년 여름쯤에 파이썬 2.4가 릴리스되기 전에 collections 모듈에
타입이 1개 밖에 없는데 이름이 복수로 붙어서, 피보나치 힙을
넣자는 얘기가 있을 때 한 3주일 고민을 해서 피보나치 힙을 구현
했었습니다. 그런데, 피보나치 힙이 워낙 괴짜스러운 자료구조라서 복잡하고
편리한 것들을 추가하기에는 영 불편해서 결국은 그냥 중단했었습니다.

올해 초에는, 피보나치힙과 비슷한 용도에 사용할 수 있지만,
바이너리 트리의 특징을 유지하고 있기 때문에, 구현이 훨씬 쉬운
레드블랙 트리를 한번 구현을 해 볼까 생각을 했었습니다. 그런데~ 훈련소
다녀오고 나니까 머리가 안 돌아가서.. 이히히 ^_^;;
결국은 한참을 벼르던 레드블랙 트리 구현을 마침 숙제하기가
너무 귀찮기도 하고 파이썬 2.5도 곧 피쳐프리즈가 되지 않을까 해서 밀어넣어보려고 한번 집중해서 구현해 봤습니다. 기본적으로
제공되는 메쏘드는

  • T.insert(v): 값을 트리에 넣음
  • T.remove(v): 값을 트리에서 뺌
  • T.clear(): 트리를 비움
  • T.has_key(k): 키가 있는지 검사
  • T.values(): 값의 리스트를 리턴
  • T.keys(): 키의 리스트를 리턴
  • T.items(): (키, 값) 페어의 리스트를 리턴
  • T.nfirst(n): 작은 값부터 순서대로 n개를 리턴
  • T.nfirstitems(n): 작은 값부터 순서대로 n개를 (키, 값) 페어의 리스트로 리턴
  • T.nlast(n): 큰 값부터 순서대로 n개를 리턴
  • T.nlastitems(n): 큰 값부터 순서대로 n개를 (키, 값) 페어의 리스트로 리턴
  • T.popleft(v): v보다 작은 값을 모두 빼내고 리스트로 리턴
  • T.popleftitems(n): v보다 작은 값을 모두 빼내서 (키, 값) 페어의 리스트로 리턴
  • T.popright(v): v보다 큰 값을 모두 빼내고 리스트로 리턴
  • T.poprightitems(n): v보다 큰 값을 모두 빼내서 (키, 값) 페어의 리스트로 리턴
  • 그 외에 __setitem__, __getitem__, __len__, __contains__ 이 지원됩니다.

아무래도 레드블랙트리나 피보나치힙류는 세션 테이블같이 정렬 순서에 따라서 빠르게 작업을 해야 하는 경우에 프리어러티 큐로 활용하는 것이 가장 대표적인 용례인데, 피보나치힙으로 구현을 한다면 순위를 뽑으려고 할 때 매번 extractmin을 해야하는 반면에, 레드블랙트리는 그냥 트리에서 돌아다니는 것으로 구할 수 있다는 것이 장점이라고 할 수 있겠습니다. (속도는 완전한 C 타입으로 구현하면 피보나치힙이 훨씬 빠르지만, 파이썬의 비교연산 특성상 파이썬 확장 모듈이 되면 별 차이가 안 납니다.)

소스는 오픈룩 trac 작업실안에도 있고, 소스포지 패치 리뷰 트래커에 Patch #1324770으로 올렸습니다. 이히히. 잘 돼서 파이썬 2.5에 들어가면 좋겠군요.

파이썬 2.4.2 릴리스

파이썬 2.4의 두번째 버그픽스 릴리스인 2.4.2가 나왔습니다.
이번 릴리스에서는 60개 정도의 버그를 수정하였으며
HP-UX와 AIX 호환성이 향상된 것이 주요 변경 사항이군요.

이번 HP-UX와 AIX 호환성은 독특하게도 귀도가 직접
올렸는데, 귀도가 일하는 엘러먼털 시큐리티사에서 필요해서
작업한 것이라는군요.
그 외의 사소한 버그 중에 중요한 것을 몇개 뽑아 보자면,

  • 64비트 플랫폼에서 len()이 C의 int타입으로 나오지 못하는 경우에 오버플로우 에러를 냄. (내부적으로 long이기 때문에 타입이 다름)
  • 소스코드 디코딩 도중에 UnicodeDecodeError가 나더라도 SyntaxError로 바꾸도록 변경
  • set.discard와 set.remove가 상속된 클래스에서 __hash__를 정의한 경우 동작하지 않는 문제점 해결
  • set 타입 가비지 컬렉션이 제대로 안 되는 문제 해결
  • 서브 쓰레드에서 raw_input 하는 도중에 ctrl-c 누르면 크래시 나는 문제 해결
  • 이제 윈도우에서 os.startfile함수에 유니코드 사용 가능.
  • locale 모듈에서 로캘 결정하는 순서를 POSIX 표준에 맞게 환경변수를 순서대로 찾도록 변경
  • UCS-4 빌드에서 unicode-internal 코덱이 이제 잘못된 코드 포인트를 보면 에러를 냄
  • 윈도우 바이너리 배포에 포함된 zlib을 1.2.3으로 업그레이드

포트는 벌써 PR이 올라오긴 했는데, (이번엔 덴마크 사람이..) 2.4.2 올리면서 머지해야 할 버그픽스가 몇개 있어서 오늘 시험 치고 내일 숙제하고 주말쯤이나 해야할 것 같네요.. 흐.~

새로운 파이썬->C++ 컴파일러

shedskin이라는 Python->C++ 컴파일러가 등장했습니다. 9개월간 혼자 열심히 만들었다고 하는데, 인내력이 굉장하군요;; -O- 일부는 구글의 Summer of Code 지원으로 만들었다고 합니다.

shedskin은 PyPy와 Pyrex와 겹치는 부분이 많이 있는데, 독립적인
C++ 코드로 변환할 수 있는데, Pyrex나 PyPy처럼 파이썬 VM이
실행하듯 그냥 그대로 변환하는 것이 아니라, 정말 C레벨 코드로
바꿔버립니다. 즉, print 1+2를 하면 1+2를 계산해서 sys.stdout에다가 PyObject_Print를 호출해서 쓰는 것이 아니라, 그냥 printf(“%d\n”, 1+2);로 바꿔버립니다. 게다가 파이썬 라이브러리도 물고 들어가지 않기 때문에, 그냥 독립적인 프로그램이 돼 버립니다.

결과적으로 파이썬 라이브러리도 필요없고 속도도 빠르다는 면은 있지만, 파이썬 소스와 100% 호환이 안 된다는 것이 치명적이라고 하겠습니다. sys.stdout이 치환된 경우도 있을 수도 있고, 덧셈 연산이 오버플로우 처리나, 음수의 라운딩에 있어서 C와 파이썬이 서로 다르기 때문에.. 그리고, getattr, hasattr, obj.__dict__ 등의 동적 프로그래밍이 지원되는 부분이 전혀 지원되지 않는 단점이 있습니다.

아쉽게도 PyPy나 Pyrex와는 달리 파이썬 고유의 특징을 모두 무시하고 컴파일러를 만든 덕에 속도는 빠르게 됐지만 사실상 기존의 파이썬 코드들 대부분과 호환되지 않는 다는 점에서 쓸 데가 얼마나 있을지 잘 모르겠네요. 으음.. 하여간 나오긴 했으니 PyPy같은 곳에 포팅해서 쓸만한 코드가 좀 있었으면 좋겠습니다. 🙂

일본 LLDN (경량언어낮과밤)

한국의 대안언어축제
비슷한 성격의 일본의 축제인 LLDN 2005가 8월 27일에 있었다고 합니다. 우리도 비슷한 행사를 하고 있으니 관심을
가지고 좀 찾아보았습니다. 🙂

예산과 행사 조직

대안언어축제 초기에도 LLDN에 대한 얘기가 좀 있긴 했는데,
LLDN은 기존에 잘 꾸려진 커뮤니티들이 연합하여 하는 것이지만
대안언어축제는 유명무실한 커뮤니티들 사람들 몇몇이 임시로
모여서 하는 거라 좀 다른 면이 있습니다. 그리고 대안언어축제는
지원을 정부기관에서 했지만, LLDN은 O’Reilly Japan이나
여러 다른 출판사, 신문사, 소프트뱅크 같은 곳에서 지원을
하고 있습니다.

LLDN은 2003년부터 계속 이름이 바뀌어 왔는데,
2003년엔 LLSaturday로 토요일에 했고, 2004년에는
LLWeekend로 주말에 이틀간 했고, 올해는 LLDay&Night로 해서
낮과 늦은 밤까지 한 것 같습니다. 낮에는 아카데믹하게,
밤에는 축제적인 요소를 가미했다는군요. 대안언어축제도
1박을 하는 바람에 예산이 걷잡을 수 없이 엄청나게 불어난
것을 생각해 보면, 늦은 밤까지 해버리는 것도 괜찮은 것 같습니다. 🙂

세션 구성

LLDN의 낮 세션에는 “아카데믹”을 정말 그대로 실현하기 위해서인지
각 언어별로 1개씩 세션을 빼곡히 채워놓았습니다. awk, curl,
gauche, haskell, ml, perl, php, python, ruby, squeak 모두 10개나 되네요. 대안언어축제에 비해서 확실히 다양성이 있는게 무척 부럽습니다. 그리고, 대안언어축제에서는 언어보다는
언어 독립적인 것들을 많이 발표 세션에 배치한 반면에, LLDN은
발표 세션은 모두 각 언어별로 배정이 되어 있군요.

독특한 세션 – 낮

발표 세션을 제외하고 독특한 포맷의 세션을 보자면, LLDN의
대표적인 두가지 “체제 대결”과 “너라면 어떻게 쓰겠니?”가 있네요.
“체제 대결”에서는 RoR, Kahua, Sledge 세가지 웹 프레임워크의
전문가들이 나와서 발표를 하고서 사회자의 진행으로 열띤 토론을
하는 것 같습니다. 대안언어축제에서도 사실은 원래 이런 걸
해 보고 싶었는데, 사람이 모자라다보니 못한게 좀 아쉽네요..
그리고, “너라면 어떻게 쓰겠니?”는 각 언어의 참가자들이
하나씩 규정연기와 자유연기 중 선택 또는 둘 다 시연을 하게되는데,
관중이나 다른 참가자들이 “너라면!” 상황에서 구현한 것을
서로 비교해보는 정말 살떨리게 재미있을 것 같은 세션일 것 같습니다. 🙂

독특한 세션 – 밤

그리고, 축제의 자리인 Night에서는 “안돼 자랑”, “데모 자랑”, “선물 대회”가 있는데,
“안돼 자랑”에서는 보통 금지되어 있는 흑마법들을 이렇게도 할 수 있다!
하면서 “으아아아~ 안돼~~~” 하는 거라고 합니다. 다른 언어 유져들에게는 숨겨온것들은 자진해서 얘기하자는 거라는군요.. (설명해 주신 미쓰님 감사!) 그리고, “데모 자랑”에서는 백문이불여일견으로 자기가 자기 언어나 툴킷/프레임워크에서 자랑하고 싶은 것을 나와서 보여주고 다른 사람들이 “우와~~” 해주는 행사라고 합니다.
역시 재미있을 것 같습니다. 하아~

대안언어축제와는..

LLDN은 대안언어축제와 매우 유사한 주제를 다루고 있음에도 불구하고
매우 다른 형식과 규모, 조직성을 갖고 있다는 점에서 서로 배우거나 가르쳐줄 것이 많은 사이인 것 같네요. 대안언어축제의 코드레이스, 야외활동, 로제타카드는 정말 자랑할 만 한데요.. ^^
그리고, 아무래도 LLDN은 사람 수가 너무 많고 장소가 강의용 장소라서 페어나 실습은 크게 못해보는 것 같네요.

LLDN 홈페이지에 올라와 있는 블로그 트랙백을 보면 참가자들 수십명이 자기 블로그에 글을 쓰고 트랙백 보내는 걸 보면 참 부럽습니다. 우리도 내년엔! 우후훗.;

하나 희망적인 것은 LLDN은 참가자가 수백명인데 여성참가자가 한명도 없었다는군요.. (그래서 그런지 LLDN 홈페이지를 보면 페이지 마다 의미없는 여성 모델이 나오는 이미지 컷이 -_-;;)


(그런데, LLDN 블로그 소프트웨어가 OpenLook과 같은 coreblog라서 매우 반갑습니다. 크크 _-_)

PyPy 0.7.0 릴리스

멋지구리 파이썬 해커들이 파이썬으로 만드는 파이썬
PyPy
0.7.0이
릴리스
되었습니다.

그동안은 뜨는데 몇십분이 걸리고 그랬는데, 이제는 인내력이
별로 없는 사람도 어느 정도는 해 볼 수 있을 정도는 됐군요. 🙂

릴리스 노트에서도 밝히듯이 어디까지나 연구목적의 프로젝트이기
때문에, 너무 성능을 진지하게 받아들이면 안 되겠지만.. 🙂
언젠가는 더 나을지도 모를일~ 한동안 구체적으로 보지는 못했지만
이번 릴리스에서 특이한 점은. Armin이
“C로 구현된 두번째 파이썬을 소개합니다.”라고 PyPy를 소개했다는 점~
자세히 보니까, LLVM(Low-Level Virtual Machine)이란 것이
새로 도입되었는데, 기존의 CPython이 VM과 런타임, 표준 라이브러리가
혼란스럽게 섞여있는 반면에, PyPy에서 LLVM을 백엔드로 선택하는
경우에는 VM만을 저수준으로 격리해서 C로 구현된 것을 돌리고,
런타임과 표준 라이브러리, 컴파일러 등은 파이썬으로 만든 것을
돌릴 생각인 것 같군요.

유럽연합의 지원을 충분히 받으면서 재미있는 프로젝트를 하고
있는 것 같아서, 무척 부럽습니다. 🙂 기대가 되는군요!

대안언어축제를 마치고

사진 중 일부는 박영창씨가 촬영한 것입니다.

2달 전쯤에 블로그에 그냥 버스타고 왔다갔다 하던 꿈을 올렸던
“기민한 언어의 날”
행사가 드디어 현실이 되었습니다.
“대안언어축제”라는 이름으로
8월 20일,21일 양일간 강원도 홍천에 있는 대명비발디파크에서
열렸습니다. “뭔가 하긴 했구나!” 생각이 들어서 참 다행입니다. 🙂

기획/준비 단계

대안언어축제의 첫준비는 6월 23일 강남역에서 있었습니다.
당시에 관심을 보여주신 10분이 모여서 행사의 이름을 정하고,
어떤 형식의 행사가 될지, 내용은 어떤 것을 다룰지, 목적은
어떤 것인지, 행사날짜 등을 정했습니다. (놀랍게도 첫번째
모임에서 날짜가 확정이 되어버렸지요!)

그 이후로는 초기의 “통사” 그룹 분들이 다들 바쁘신데다, 리더격을
정하지 않다보니 제대로 굴러가지 않아서 몇번 만남이 띄엄띄엄
있었습니다. 그래서 결국은 7월말까지 거의 결정된 것 없이
시간이 지나가게 되었는데, 그때
자원봉사자들을 뽑기 시작하면서
자봉분들의 활발한 준비로 장소와 준비물 등이 진행되기 시작하였습니다.
그러나 장소는 여러가지 문제때문에
행사 11일 전에서야 결정이 되었고, 아무래도 이런 형식의 행사가
처음이다보니 시간이 많이 걸려서 행사 직전까지 자봉들은
거의 매일 회의를 해야 할 정도로 바쁘게 준비되었습니다.

행사 전날 선발대 활동

행사 전날인 8월 19일에 미리 가서 행사 준비를 하는 선발대A팀과
진흥원지원부분인 간식과 문구류를 사서 가는 선발대B팀이
출발했습니다. 자봉, 통사, 발표자와 진흥원에서 지원해주시는
이재경씨를 합해서 모두 12명이었습니다.

비발디파크에 도착해보니 참 바깥 경관이 좋아서, 뭔가 컨퍼런스만 하고 있기에는 아깝다는 생각이 좀 들더군요. 크.. 하여간, 얼른 준비 숙소가 있던 오크동 8층에 짐을 풀고, 준비를 시작했습니다. 불과 하루밖에 남지 않았는데 준비가 안 된 것이 많아서 여러모로 불안했는데, 작은 인덱스 카드에 작업을 나눠서 하다보니 사람이 많아서 생각보다 금방금방 끝나더군요. 🙂

저녁엔 본 행사장인 에메럴드룸으로 옮겨서 다음날 개회식에서 쓸
대안언어 도미노를 만들었습니다. 많은 분들이 여러개의 언어로 열심히 만드셔서, 저는 그냥 awk만 만들었습니다. 너무 짧아서 뻘쭘;; _-_

행사 첫날 13:40 – 개회식

드디어 행사 첫날이 되었고, 막판 개회식 준비로 다들 여념이 없었습니다. 역시 바쁘면 안 되는게 많아서.. 도미노는 제대로 안 굴러가는데 막 서울에서는 차가 하나도 안 막혀서 30분 일찍 도착한다고 하니 참 애가 타더군요. 므흐..

막상 주자분들은 일찍 오시는데, 네트워크 설치하는 업체에서는 팔당댐에서 차가 막혀서 3시간째 못오고 있다고 하고.. 그런데 세션이 있는 작은 방들에서는 네트워크 필요한 세션들이 다들 첫번째 세션으로 잡혀있고.. 거의 패닉 상태에 갈 무렵, 30분 정도 지체가 돼서 네트워크 업체가 드디어 도착해서 세팅을 하고 간신히 시작을 했습니다. 원래 주자분들을 도착하자마자 숙소로 안내할 예정이었지만 그마저도 비발디파크측에서 이전 체크아웃 시간이 늦어서 3시는 돼야 들어갈 수 있다고 그러고.. 행사 초기에는 일정 변경이 굉장히 심각했지만, 그래도 별 탈없이 지나갔습니다. ^^;

행사 첫날 15:00 – 첫 번째 멀티트랙 세션

제가 맡은 발표세션인 “동적 네임스페이스”는 별로 이름부터 크게 재미있어 보이지 않는 주제로, 아무래도 썰렁하지 않을까 생각하고 조마조마 세팅을 마치고 기다리고 있었습니다. 흐흐. 처음에 딱 2분이 들어오시고 한 5분동안 썰렁~해서 으하하하 웃으며 있었는데, 알고보니 일정이 쭉 밀려서 늦게 시작한다고 하더군요. 흐흐 그래서 작은 방이 꽉 차게 많은 분들이 오셔서 조금 부담이 되었습니다. ^^; 그런데, 준비를 크게 많이 못해서 그런지 참 설명이 여러모로 꼬여서 고생을 많이 했습니다. 전에도 몇번 리허설을 꼭 해야지 생각을 했는데 이번에도 리허설 안하고 그냥 했다가 낭패를 –;

다행히도 이번 축제에서는 발표 세션에서 발표의 비중을 크게 줄이고 대부분을 페어 실습으로 하는 방향으로 미리 발표자 논의에서 정해두었기 때문에 끝 30분정도를 그냥 실습으로 슬쩍.. 흐흐.. 주자분들이 생각했던 것보다 훨씬 파이썬을 많이 하고 계시고, 파이썬을 안 하는 분들도 쉽게 적응하시는 것 같아서 무척 즐거웠습니다. 🙂

행사 첫날 16:30 – 두 번째 멀티트랙 세션

그 다음에는 두 번째 멀티트랙 세션으로 Ajax와 Esoteric Langauge를 했습니다. 저는 퍼즐릿님이 진행하신 Esoteric쪽에
참가를 했는데, 처음으로 한글로 하는 난해한 프로그래밍 언어 “아희”로 프로그램을 하느라 아주 쏙 빠져서 한참을 “밯맣희”이런 코드를 입으로도 읽고 손으로도 치고 하면서 즐거워했습니다.
거의 20명 넘는 분들이 다같이 “아희”코드를 짜면서 으아아아~~
하고 있는 것을 옆에서 보고 있으려니 정말 재미있었습니다.;;

행사 첫날 20:00 – 코드레이스/코드챌린지/마인드스톰

저녁을 먹고 멀티트랙 놀이시간에 들어갔습니다. 코드레이스는
통사들이 해설과 진행을 맡고 4~5명으로 구성된 팀들이 계속
추가되는 요구조건을 만족시켜가며 순간 순간 점수를 받아서
최종적으로 점수를 많이 받는 팀이 이기는 게임이었습니다.
중간에 요구사항 변경을 팀들이 직접 발표할 수도 있고, 자기의
요구사항 변경을 10분안에 구현하지 못하는 경우의 감점 같은
여러가지 점수 제도 때문에 참가하는 팀이 재미있게 할 수
있었습니다. 또한, 스타리그 중계처럼 앞에 3명이 앉아서
각 팀의 순간순간 전황을 해설하며 얘기를 하고 있는 것도
재미있고, 앞으로도 많이 발전할 수 있는 게임이 확실합니다. 🙂
그런데, 아무래도 코드레이스를 좁은 방에서 참가자들만
있는 채로 해버려서 관중이 없어서 해설해도 공중에 하는
것이다보니 별로 말을 못해서 약간 그렇더군요. 크흐.

옆 방에서는 코드 챌린지와 마인드스톰을 했다고 합니다. 가 보지는 않아서 잘 모르겠지만.. ^^; 코드 챌린지는 여러 정보경시대회 스타일의 문제를 힌트로 해서 숨은 URL 찾기를 하는 놀이인데, 나중에 참가자들의 말을 전해 들으니, 재미있게 진행된 것 같았습니다. 🙂 상품도 좋고~ 마인드스톰에서는 원래 뭔가 만들기를 하려고 했는데, 자봉/통사 중에서도 아무도 마인드스톰을 해 본 사람도 없는데다가, CD를 빼먹고 오는 바람에 결국은 레고놀이로 했다고 합니다 흐흐;;

행사 첫날 22:00 – 양과 치타또는 늑대 놀이

밤 시간에 원래 하려고 했던 장기자랑이 아무래도 분위기를 식힐 것 같다는 판단에, 대신 치타와 양 (몇몇 팀은 늑대와 양) 놀이를 했습니다. “땀 안 흘리는 야외 놀이”를 할 예정입니다. 라는 말에 주자분들은 얼떨결에 밤에 밖에 맨손으로 나가셔서 어리둥절했지만, 규칙을 설명해 드리고 게임을 하고 있으니 막 재미있다고 계속 하자는 분도 계시고.. 🙂 프로그래머들 아니면 누가 이런 게임을 할까 싶지만 프로그래머들에게는 정말 재미있는 게임이었습니다!

행사 첫날 23:15 – OST (Open Space Technology)

첫날의 마지막으로 OST 시간을 가졌습니다. OST는 1200명까지 토론을 할 수 있는 집단 토론 기술로, 벌과 꽃의 메카니즘 같은 재미있는 것을 수용한 재미있는 방법이라고 합니다. 🙂 우선 발제자들 몇 명이 나와서 어느 자리에서 뭘 토론합니다. 하고 화이트보드에 적고 가면, 사람들이 자기가 토론하고 싶은 곳으로 가서 토론을 하다가 아무때나 다른 곳에 가고 싶을 때 여기저기 왔다갔다 하면서 토론을 하는데, 중간에도 계속 화이트보드에 새로운 주제를 낼 수 있기 때문에, 짧은 시간 안에 많은 사람들이 다양한 주제로 토론을 할 수 있습니다. 결국은 프로그래밍 언어와 기호학 , 대안언어 회사에서 쓸 수 있나 같은 주제 외에도 커피에 대한 모든 것, 한국 개발자들의 노동 조건 같은 주제까지도 재미있게 이뤄졌습니다. 🙂

행사 두째날 10:30 – 세번째 멀티트랙 세션

두째날 아침에는 세번째 멀티트랙 세션으로 김창준님의 EDSL, 승범이의 Squeak이 있었습니다. 저는 DSL(Domain Specific Langauge)가 적용이 가능한 부분에 요새 관심이 많은 터라 EDSL에 참가하였는데, Squeak도 옆에서 들려오는 승범이의 낭랑한 목소리에 아아 아쉽다 아쉽다 하면서 있었습니다. 🙂

EDSL 세션에서는 기존 언어 문법을 거의 그대로 활용하면서도 DSL의 장점을 그대로 쓸 수 있는 방법을 배웠습니다. 실습시간에는 저는 C 선행처리자를 이용한 EDSL을 해 봤는데, CJKCodecs의 ISO2022 코덱이나 multibytecodec 구현에서도 C 선행처리자로 이것저것 지저분하게 많이 해 뒀는데, EDSL 개념을 알고 구현했으면 좀 더 보기 좋은 코드가 나왔을 것 같은 생각이 들더군요~

행사 두째날 12:00 – 폐회식

폐회식도 뭔가 대안적인 방법을 찾아보다가, 자봉단이 장시간 보리차를 마시면서 토의한 결과, 회고를 전지를 놓고 마음껏 그리고 쓰는 것으로 했습니다.
우선 테이블에 앉은 사람들이 글자로 좋았던 점과 개선되었으면 하는 점을 쓴 다음에, 다른 전지를 하나 받아서 크레파스로 말을 전혀 하지 않고 문자도 안 쓰고 그림만 가지고, 느꼈던 점과 다음 행사에 바라는 점 같은 것을 쓰는 것으로 했습니다. 그런데, 그림이 아주 기상천외한 것이 많아서, 다른 테이블 사람은 커녕 옆사람이 봐도 못알아보는 것이 많아서.. 무지 재미있었습니다. 크흐~

행사 두째날 12:30 – 점심식사, 기념촬영

토요일 점심부터 일요일 점심까지 모두 4끼를 먹은 곳은 메이플동 지하의 오리엔탈 익스프레스라는 곳이었습니다. 여기가 제법 비싸기는 하지만, 보통 게를 안 넣는 음식에다가 게를 계속 넣어줘서 인상이 깊었습니다. -ㅇ-; 마지막 점심에는 장어덮밥! 꺅~~;

되돌아보며

이번 행사는 국내에서는 전례가 없던 실험적인 포맷으로 가득 채운 행사이니 만큼 성공할 수 있을지에 대해서 무척 기대가 많았습니다. 특히, 계속 일정이 지연되면서 정작 추진은 안 하면서도 조바심나고 그랬었는데, 여러 자봉분들과 김창준님, 승범군의 헌신적인 준비로 얼마되지 않은 시간동안 큰 일을 이뤄낸 것 같아서 무척 기쁩니다.

코드레이스, 치타와 양 같이 이번에 특히 재미있었던 새로운 형식들은 앞으로 좀 더 재미있게 할 수 있을 것 같다는 확신이 들었고, 일반 세션들도 페어 실습의 비율을 계속 높이는 것으로 하품나는 지루한 발표에서 탈출할 수 있다는 것도 느꼈습니다.

로제타 카드를 이용한 활동이라던지 사람들끼리의 활동을 촉진하는 활동이 뒤에 나오기 시작해서, 앞에서 활발하게 활동하기가 힘든 분위기 였다는 점은 다음에 개선하면 좀 더 흥분되는 행사가 될 것 같습니다.

이번 축제 준비로 정말 수많은 시간과 노력을 한 통사, 자봉 여러분 정말 진심으로 감사하고 있습니다. 그리고, 주자 여러분들도 지금까지 가 본 어떤 행사보다도 열린 마음으로 능동적으로 참여해 주셔서 준비가 미흡했음에도 불구하고 축제가 성공할 수 있었던 점 한동안 잊지 못할 것 같습니다. 🙂

또한 참가비만으로는 도저히 꾸릴 수 없는 행사였기에, 재정적으로 대부분을 지원해 주셨던 한국소프트웨어진흥원과 진행에 많은 도움을 주신 이재경씨께도 참 고맙게 생각합니다. 다음에도 많은 지원 부탁드립니다.;; _-_

PEP342 향상된 제너레이터를 이용한 코루틴

예전에 PEP-340을 소개하는 글에서 약간 소개를 했던, 제너레이터 향상점들이 PEP-340이 빠진 이후에 PEP-342에 제너레이터 관련된 부분만 빠져나와서 들어오게 되었습니다. 수개월동안의 토론 끝에 방금 Phillip J. Eby씨가 구현한 것을 CVS에 넣어서 이제 큰 이변이 없는 한은, 파이썬 2.5의 가장 큰 변동사항으로 나가게 될 것 같네요.

PEP-342에서는 PEP-340에서처럼 우선 가장 큰 변경이 yield 키워드가 원래 statement였던 것이, expression으로 바뀌었다는 것입니다. 즉, 원래는 x = yield 0 이런 식의 표현이 금지되어 있다가, 이번부터는 아예 x = (yield 0) + (yield 1) 이런 것도 허용되게 되는 것! 그러니까.. 코루틴을 구현할 때 필수적이라고 할 수 있는 외부에서 중간에 인자를 던져주는 것이 가능하도록 되었습니다.

그래서 실제로 활용하는 방법을 보면,

여기서 새로 생긴 것이 바로 제너레이터의 send 메쏘드와 throw 메쏘드인데, send는 next에 인자를 추가한 것이라고 볼 수 있고, throw는 제너레이터가 멈춰있는 부분에서 예외를 발생시키는 역할을 합니다. 즉, 이제 Twisted의 deferred처리자를 완전히 제너레이터만 갖고도 깔끔하게 구현할 수 있게 되었습니다.! 꺅 만세

그 외에는, 제너레이터에 새로이 __del__이 생겨나고, cleanup이 지원되면서 try: finally: 안에다가 yield를 쓸 수 있게 되었습니다. 제너레이터가 중간에 그냥 멈춰버린 채로 해제됐을 때 자원 해제가 불가능했던 문제가 이것으로 해결됩니다.

일단은 많은 사람들이 오랫동안 토론해서 넣은 기능인 만큼, 잘 되었으면 좋겠는데, 개인적으로는 Twisted deferred가 이제 정말로 간단하게 제너레이터로 쓸 수 있게 되었다는 점이 가장 마음에 듭니다. 🙂

파이썬 소스 저장고가 subversion으로 이전

소스포지에서 가장 오래된 CVS를 갖고 있는 프로젝트 중의 하나인 파이썬이 이제 소스포지에서 독립해서 독자적인 subversion 저장고를 가지는 쪽으로 논의가 되고 있습니다.

한 1~2년전만 해도, subversion으로 바꾸자는 얘기가 나와도 몇몇만 좋아라~ 하고 다른 사람은 시큰둥한 편이었는데, 소스포지 CVS가 서비스가 계속 안 좋아지는 데다가, subversion의 fsfs 도입이나 안정화, 그리고 소스포지가 벌써 몇년째 subversion 지원한다고 하기만 하고 소식이 없는 것에 실망한 나머지 이제 대부분이 찬성하고 있습니다.

Martin의 PEP에서 설명이 되었듯이, 이번 이동에서는 접속하는 방법을 WebDAV on HTTPS basic authentication만 허용할 예정이라고 합니다. svn+ssh는 모든 개발자에게 실 계정을 줘야하는 문제가 있고, HTTPS client certificate는 CA관리를 해야하는 문제점 때문에 여러모로 귀찮다고 합니다. 흐흐;;

하여간, 이번에 파이썬이 svn으로 옮기게 되면 맨날 파이썬 고쳐놓고 diff할 때 마다 맥용 파일들이 우구장창 우루루 올라가는 것을 안 봐도 되게 되어서 참 기쁩니다 ㅡㅇ- 이제 FreeBSD도 얼른 cvsup에 subversion fsfs 지원이 들어가서 subversion으로 옮겨버리면 참 좋을텐데~