오늘 파이썬에 FreeBSD 7 지원을 추가했습니다. 🙂
포트에 있는 Python 2.4, Python 2.5, Python 2.3, Python 2.2, Python 2.1에는 아직 백포트되지는 않았지만, 몇몇 분들이 패치를 보내주셔서 테스트 작업 중이니 오늘 밤중으로 포트에서도 FreeBSD 7에서 파이썬을 쓸 수 있을 듯 합니다. 🙂
혜식이의 열고 보는 세상
오늘 파이썬에 FreeBSD 7 지원을 추가했습니다. 🙂
포트에 있는 Python 2.4, Python 2.5, Python 2.3, Python 2.2, Python 2.1에는 아직 백포트되지는 않았지만, 몇몇 분들이 패치를 보내주셔서 테스트 작업 중이니 오늘 밤중으로 포트에서도 FreeBSD 7에서 파이썬을 쓸 수 있을 듯 합니다. 🙂
최고의 오픈소스 GUI IDE라고 누구나 인정할 수 있는 Eclipse를 처음 보고서는 파이썬에서도 swt를 쓰면 참 좋겠다는 생각을 했었는데, 생각지도 않은 것이 이뤄져버렸군요.
GCJ를 파이썬 확장에 도입한 거의 최초의 실용 바인딩인 PyLucene이 나온 뒤에, 사실 많은 사람들이 이런 저런 유명 자바 라이브러리에 대한 바인딩을 만들어보고자 했지만, swig도 지원되지 않고 그렇다고 온통 인터페이스와 클래스가 넘쳐나는 자바 라이브러리를 일일이 클래스 하나하나 다 바인딩 만들기도 엄청난 삽질이고 해서 실제로 많은 바인딩이 나오지는 못했습니다. 그래서, PySWT에서는 저자가 여러 시행착오끝에 PyQT에서 사용하는 C++용 파이썬 확장 모듈 제너레이터인 SIP를 고쳐서 자바 클래스로 파이썬 바인딩을 만드는 것을 만들어버렸다고 합니다. 으흐흐 -ㅇ-
일단은 swt 자체가 워낙 방대한 라이브러리이니 과연 이걸 이런 식으로 해도 별 무리가 없을지는 몇가지 시도가 더 있어봐야겠지만, 큰 자바 라이브러리들도 이제 쉽게 파이썬 모듈이 나올 수 있게 됐다는 점에서 큰 의미가 있을 듯합니다. 그리고, PyQt, PyGTK, wxPython등 크로스 플랫폼을 지원하는 파이썬 툴킷들이 모두 PSF 라이선스와 호환되지 않는다는 점에서 딱히 쓸 만한 것이 없었는데, 용량은 엄청 크지만서도 라이선스면에서나 완성도 면에서나 쓸만한 툴킷이 나왔다는 점에서는 반갑네요. 🙂
이제 distutils에 GCJ지원이 들어가는 것과, pyrex와 swig에 자바소스 긁기 지원이 들어갈 차례인건가요? 🙂
일본에서 여러 해 이어오고 있는 LightWeight Languages Weekend를 보면서, 우리나라도 따로따로 하면 썰렁한 언어들을 묶어서 뭔가 시너지가 날 수 있는 것 해 보면 좋겠다! 하고 생각해 오고 있었습니다. 요새 다른 분들도 가끔 그런 것 있으면 좋겠다 말씀도 하시고, 한국소프트웨어진흥원에서도 일정 수준 지원이 가능하다고 의견을 주셔서 슬슬 준비해볼까 하고 버스에서 곰곰히 생각해 보고 있습니다. 🙂
아무래도, 한국에서는 PHP의 시장 점유가 엄청나게 높은 편이니, LightWeight 언어라고 하더라도 PHP는 규모가 맞지 않아 포함하지 않는 것이 좋을 것같고, 멋진 친구 승범군이 운영하는 Squeak모임도 생각나고 해서, LightWeight보다는 기민한 언어(Agile Language)로 하면 어떨까 하고 생각이 났습니다. 흐흐 그래서, 대략 Python, Perl6/Parrot, Ruby가 기간이 되고, Squeak이나 Lua, Groovy 같은 약간 다른 성격의 언어들도 가능하다면 포함이 될 수 있으면 좋을 것 같습니다.
일단, 여러 언어가 모여서 행사를 하는 것이 시너지를 내기 위해서는, 일부 언어는 알고 있지만, 아직 자세히는 모르는 다른 언어들의 특징을 느껴볼 수 있도록 주제가 너무 특정 기술에 치우치거나 기초 문법에 치중한 것은 안 될것 같다는 생각이 듭니다. 그리고, 서로의 의견을 자유롭게 교환할 수 있도록 분야별 BoF 세션 (예를 들면, TwistedWeb/Nevow와 Ruby on Rails등을 주제로한 WWW BoF나, 각 언어 간의 메타클래스 특성을 활용 아이디어들을 교환하는 세션같은..)도 공식적으로 시간을 잡거나 PyCon에서 하는 것처럼 아무데나 복도에 퍼질러 앉아서 시간 가는 줄 모르고 토론하는 것도 좋을 것 같구요. 🙂
파이썬마을의 순식간에 뚝딱하는 세미나들하고는 좀 다르게 미리 스티어링 그룹도 구성을 하고, 각 세션들에 대해서는 Call for Paper를 통해 공개적으로 발표하실 분을 모집해서 알차게 꾸몄으면 하는 생각이 있습니다. 아직은 그냥 저 혼자 출퇴근길에 버스에서 생각하는 아이디어에 불과한데, 앞으로 다른 여러분들께 연락을 드려서 진행을 해봐야겠습니다~
구글이 Summer of Code의 개최를 공식 발표하였습니다. PSF에서 내부적으로 얘기는 지난 주부터 있었는데, 대체로 다들 반기는 분위기 속에 잘 되어서, PSF가 지원 기관의 제일 첫번째로 올라갔군요. ^_^ (1주일동안 다른 데 소문 안 내느라 입이 어찌나 근질근질했는지 =3)
Summer of Code에서는 여름 동안에 학생들이 오픈소스에 기여도 하고 자기 능력도 계발하고 하는 의미에서 구글에서 오픈소스 기여를 지원해 주는 행사입니다. 그동안 다른 데서 있었던 Grants와는 달리 Python, Perl, Mono, Apache, Ubuntu, GNOME 등 기존의 대형 오픈소스 프로젝트 기관들이 심사와 멘터링을 맡고, 각 학생 프로젝트당 $4500, 기관에 $500를 지원하게 됩니다. 이렇게 총 200개 정도의 프로젝트를 지원하는데, 이번 기회에 학생들은 괜히 소모적인 알바로 힘만 빼고 뻘짓하는 것을 피할 수 있고, 오픈소스 프로젝트들은 열의 있는 참가자들이 할 수 있는 여러 노력형 작업들을 성취해 낼 수 있을 것 같아서 아주 결과가 기대 됩니다.
한국에서도 많은 학생들이 참가해서, 한몫도 잡고 이름도 날리고 하면 좋겠군요. (450만원!) 크크 🙂
수개월 전에 사이트를 대폭 개편했지만, 당시에 모자랐던
정신력으로 -.- 첫 페이지만 제대로 보이고 클릭을 조금만 하면
여기 저기 깨져 있었습니다. 친구의 얘기도 있고 해서 주말에
사이트의 깨진 부분을 메워서 이제 대충 눌러 봐도 돌아가는
사이트처럼 변신시켰습니다. 🙂
페이징은 희한하게도 coreblog 프러덕트 자체에는 대충 구현이 되어 있는데, 스킨에서는 전혀 사용되지 않고 있었습니다. 그래서 스킨만 좀 고치니까 잘 되는군요. 🙂 혹시 필요하신 분이 있으실까봐 소스를 약간 붙여넣어 봅니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<b>nocomment 처리하는 부분 근처에 추가:</b> <dtml-unless start> <dtml-call "REQUEST.set('start', 0)"> </dtml-unless> <b>본문 끝 부분에:</b> <dtml-comment>이전, 다음 페이지 지원</dtml-comment> <dtml-call "REQUEST.set('entries_total', len(rev_category_entry_items(category_id=cat_id)))"> <dtml-if "int(start) > 0"> <a href="categorylist_html?cat_id=<dtml-var cat_id>&start=<dtml-var expr="max(0, int(start) - page_items)">">이전 페이지</a> </dtml-if> <dtml-if "int(start) + page_items < entries_total"> <a href="categorylist_html?cat_id=<dtml-var cat_id>&start=<dtml-var expr="int(start) + page_items">">다음 페이지</a> </dtml-if> |
지난 목요일인 5월 19일 거의 1년간 하지 못했던 파이썬 마을 작은 세미나를 했습니다. 이번에는 세번째인만큼 지난 번 같은 대동 화합적인 1개 트랙로 수십명 같이 듣기 모드보다는, 오래 지속될 수 있도록 관심사와 숙련 정도에 따라 필요하신 곳에 참여하실 수 있도록 2개의 트랙을 준비해서 동시에 옆 방에서 진행하는 방식으로 바꿨습니다. 사실 100명 넘게 참여하는 세미나 같으면야 당연히 이렇게 하지만.. 겨우 10명 하면 많이 하는 곳에서 이렇게 2개로 나눈다는 것이 좀 부담스럽기는 했습니다. 쿠쿠 그런데 뭐 대충 성공! (각 트랙별로 10분 정도씩 참가해 주셨습니다.)
이번에 진행한 트랙은 2개로 1번 트랙에서는 넓고 시원하고 탁 트인 방에서 이만용이사님이 “파이썬 신식 클래스 (new-style class)”를 진행하셨고, 2번 트랙은 좁고 통풍 안 되고 더운 방에서 제가 파이썬 흑마법이라는 주제로 진행을 했습니다. 각각 1시간 30분씩 진행을 했는데, 제가 진행한 2번 트랙은 더워서 다들 파이썬에 대한 열기가 후끈후끈!! (;;;) 지난 번까지는 계속 회비를 1만원으로 했는데 매번 뒷풀이를 하고 나면 돈이 모자라서 세미나 후유증으로 재정을 고려하고 그래야했습니다. 그래서 이번에는 과감히 1만 5천원으로 회비를 올렸더니만! 뒷풀이 테이블 하나에 안주를 3개씩 시키는 호화스러운 뒷풀이를 할 수 있었습니다. 하하 다들 만족하시는 분위기라.. (비싸서 안 오신다는 분도 있었지만 ㅠ.ㅠ.)
이번 세미나에서 발표한 프리젠테이션과 소스를 올려 두었습니다. 이번에 아쉽게도 못 오신 서지원님꼐서 vnc2swf로 녹화를 하면 어떻겠냐 하셨는데, 제가 아직 사용법을 숙지를 못 해서 못했네요 –; 다음엔 꼭! 🙂
IRC 봇 SugarCube의 주요 플러그인 중의 하나였던 지하철 플러그인이 최근에 정보 싸이트로 쓰고 있던 WebSubway가 개편을 하는 바람에 안 돌아가게 돼 버렸습니다. 한동안 고치기 귀찮아~~~을 외치며 우어우어 거리고 있다가, 휴가 중 짬을 내어 봇에서 따로 쓸 수도 있게 그냥 일반화 클래스를 만들어버렸습니다.
사용법은 대충 이런식..
1 2 3 4 5 6 7 8 9 10 11 12 |
>>> import pprint, SeoulSubway >>> pprint.pprint( SeoulSubway.shortest_path(u'서울대입구', u'여의나루') ) {'bare_time': 31, 'charge': 900, 'distance': 12.4, 'nummoves': 12, 'path': [<Route path="서울대입구 (2호선) => 영등포구청 (2호선)" etime=17>, <Transfer station="영등포구청 (2호선)" etime=6>, <Route path="영등포구청 (5호선) => 여의나루 (5호선)" etime=13>], 'total_time': 37} >>> SeoulSubway.last_train(u'서울대입구', u'선릉') (24, 41) |
흐흐 일단 SugarCube에 적용해 놓았는데, 다른데 msnm 봇이나 웹사이트 같은 데 활용하실 분들은 마음껏 사용하세용~ (라이선스는 libpng/zlib 라이선스) 소스는 OpenLook Trac에서 받으실 수 있고, 소스코드 문서도 있습니다. (크크~)
요새 파이썬 개발팀의 주요 이슈는 PEP-340 Anonymous Block 입니다. 거의 다른 이슈들을 완전히 누르고 하루에도 수십통씩 관련 메일이 올라올 정도로 다들 열에 올라 있는데, 이 논의와 비슷한 얘기는 이전에도 몇번 있긴 했지만 딱히 어디로 결론이 나지는 않았었습니다. (PEP-310, PEP-325) 그러나 4월 중순에 C++ 프로그래머였던 사람이 조심스럽게 질문을 한 것에 대한 답글들에서 개발자들이 열을 내기 시작해서, 귀도가 4월 27일에 직접 PEP를 쓰기에 이릅니다.
이번 PEP-340은 현재 드래프트 상태이고, 확실히 의견이 모아진 것도 아니며, 그냥 실험적으로 논의되는 상태를 정리하는 것을 위한 안이지만, 이전의 유사 주제의 PEP들에 비해 상당히 여러 분야를 한꺼번에 통합하고 있고, 신선한 개념을 많이 제공하고 있다는 점에서 뭔가 유사한 것이 약간의 부분이라도 파이썬 2.5에 들어갈 것 같은 감이 듭니다. 으흐흐~ 파이썬 2.5에는 특히 AST가 거의 들어갈 것이 확실시되고 있으니까.. 그 김에 문법도 확 -.-,;;
PEP-340에서 소개하는 Anonymous Block은 파이썬 1.5 이후의 문법 상의 가장 획기적인 변화라고 부를 수도 있겠는데, 사실 많은 수의 개발자들이 2.4까지 계속 문법 변화가 많았으니 이제 2.5부터는 문법은 바꾸지 말자하고 암묵적인 동의를 했음에도 불구하고, 이번에 예전에 수년동안 있었던 문법 변화보다 더 많은 변화가 들어가 버리니.. 파이썬 중도보수파들도 이제 파이썬의 변화에 반감을 느낄 것 같기도 합니다. 으흐~
Anonymous Block이 해결하려는 이슈를 소개해 드리자면, PEP에서 언급된 대로 “좋은 프로그래머들은 자주 나오는 코드를 재사용 가능한 함수로 분리”를 합니다. 그런데, 함수나 클래스로 쉽게 분리가 되는 경우도 많이 있지만, 어떤 경우에는 루틴의 앞부분과 끝부분, 오류처리부분과 루틴의 중간 중간이 드문드문 반복되는 패턴으로 자꾸 나오는 경우가 있습니다. 예를 들면, 공유 자원의 접근을 위한 뮤텍스라던지, DB 접근을 위한 트랜잭션 처리 블럭, HTML의 헤더/푸터나 table 앞뒤 장식, 임시 파일의 생성 등 수많은 경우가 해당이 될 수 있겠는데요. 이런 경우에는 콜백으로 빼서 클래스를 생성하자니 배보다 배꼽이 크게 되고, 그렇다고 매번 풀어쓰기에는 반복되는 로직을 자꾸 중복하게 되는 찝찝한 경우가 생기는데, 이런 경우를 극복하기 위해서 Anonymous Block (현재 파이썬 메일링에서는 그냥 “block”이라고 부르고 있습니다.)가 제안되었습니다.
즉, “block”에 진입하는 시점, 오류또는 정상 종료로 인한 이탈 시점, 반복을 하는 시점, 중간에 루프의 인자가 약간 바뀌는 시점 같은 것들을 기존의 문법인 제너레이터를 확장한 것과 짬뽕을 해서 멋지게 만들어 보자는 것이 요점입니다. 2.3부터 지원되고 있는 제너레이터는 이미 상당히 다양한 용도에 사용할 수 있는 성공한 문법이지만, next 메쏘드에 인자를 전달할 수가 없어서, 상태 관리가 매우 힘들다는 점이나 try: finally 블럭이나 try: except 블럭을 yield와 걸쳐서 사용할 수 없어서, 자원의 정상적인 해제가 불가능하다는 점에서 아쉬움이 있었는데 이러한 문제점도 여기서 완전히 해결되었습니다.
현재 상태에서 PEP-340에서 변경하는 기본 statement 변화는 이런 것들이 있습니다.
대충 훑어봐도 엄청난 변화임이 확실히 느껴지는데, 이게 아직 확실히 정해진 것은 아니니 허어억~ 하고 미리 놀라실 필요는 없습니다. (나중에 들어가면 그때 놀라면;; -o-) Anonymous Block을 사용하는 예제로 가장 많이 나오는 DB 트랜잭션 처리 같은 경우에는 이렇게 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
def transaction(conn): cur = conn.cursor() # 이 부분은 제너레이터 생성시 실행 cur.execute('BEGIN WORK') try: yield cur # 최초 인자로 한번 넘겨 줌 exception: cur.execute('ROLLBACK') # 블럭 안에서 예외 발생 시 else: conn.commit() # 블럭 안에서 예외 발생 없이 종료 # 이 아래가 실제 실행 시작점 block transaction(conn) as txn: txn.execute('SQL~ SQL~~~') |
그리고, 이제 yield가 리턴값을 갖을 수 있기 때문에 유사-클로져나 유사-코루틴을 이제 쓸 수가 있게 되었습니다. 예를 들어서, 이런 코드가..
1 2 3 4 5 6 7 8 9 10 11 12 |
def accumulator(default=0): sum = default while True: sum += yield sum # 반복하면서 인자들을 모두 더함 block accumulator(0) as sum: # 현재 총합을 보여주고 새로 더할 값을 받음 v = input('%d >>> ' % sum) if v >= 0: continue v # 0 이상의 수가 들어오면 더하고 계속 else: break |
흐흐.. 결국 껍데기 부분의 루틴 분리에 획기적인 개선을 가져올 수 있는 좋은 도구가 될 수 있을 만한 것 같이 보입니다. 여전히 수많은 이슈들과 특히 키워드 이름을 무엇으로 할 것인가 등의 많은 문제들이 남아있지만, 아무래도 파이썬 2.5에 들어가면 가장 멋있을 것 같은 기능임에는 틀림이 없군요. 🙂 문법 변화라는 점에서는 원래 예정과는 좀 다르게 간다는 점에서는 약간 찝찝한 감이 있긴 하지만.. 뭐 이제 류창우님의 말씀 대로.. 파이썬도 C++이 가던 길을 걷고 있는 건지도.. (먼산)
IRC에서 후배 nezy군이 C++의 &인자와 같은 참조에 의한 호출은 어떻게 하냐고 물어봐서, 오기로 한번 만들어 봤습니다. 안 될게 뭐 있어!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import re re_loadname = re.compile('LOAD_NAME\s+[0-9]+\s+\(([a-zA-Z0-9_]+)\)') def set_refobj(argorder, value): import inspect, dis, sys, StringIO frame = inspect.stack()[2] sys.stdout, saved_stdout = StringIO.StringIO(), sys.stdout dis.dis(frame[0].f_code) disresult = sys.stdout.getvalue().split('\n\n') sys.stdout = saved_stdout for linedump in disresult: if int(linedump.split()[0]) == frame[0].f_lineno: varnam = re_loadname.findall(linedump)[argorder] frame[0].f_locals[varnam] = value def yay(x, y): set_refobj(1, x ** 2) set_refobj(2, y / 2) t = 7 r = 8 yay(t, r) print t, r |
결과 값으로 “49 4″가 나옵니다. t와 r이 yay 함수에서 계산된 값으로 세팅된 것~ 🙂
(주의사항): 이 소스는 그냥 장난이지 실제로 이렇게 쓰시기를 추천하는 것은 아닙니다.;;;
(사진은 좀 생뚱맞지만 뱃지만 찍으니 썰렁해서 군번줄을 같이;;;)
용이사님이 PyCon DC2005에서 기념선물로 사다주신 뱃지. 🙂 파이썬 로고 치고는 상당히 멋있습니다. 흐흐 공식 로고로 써도 되겠다~ -O- 오늘 이사님께 PyCon 얘기를 무지 많이 전해 들었는데, 정말 흥미로왔던 행사임이 틀림없는 듯합니다. 아아 내년엔 저도 꼭 가서 세계의 파이썬 친구들을 모두 만나고 하하하하 웃어야겠네요~ 🙂 아쉬우나마 사진 구경이나…
그리고, 곧 4월말 쯤에, 작년에 좀 하다가 말은 파이썬마을 작은 세미나를 이어서 하기로 했습니다. 이번에는 참여 저변을 조금 넓히기 위해, 참가자 6~8명 정도의 주제가 다른 트랙 2개로 해서 뒷풀이는 같이 하는 방법으로 하면 좋을 것 같아서, 아무래도 그렇게 할 것 같네요~ 🙂 주제로는 요새 모르면 남의 소스보기가 힘들어진 메타클래스 프로그래밍과 입문자용 트랙으로 py2exe, win32all를 해 보면 어떨까 생각하고 있습니다~ 자세한 것은 곧 파이썬마을에.. ^^;