itemgetter와 attrgetter

Guido가 몇 년째 열심히 반대하다가 얼마전에 드디어 들어간 list.sorted와 얼마전 블로그에서 얘기했던 itertools.groupby에서 아주 유용한 itemgetter와 attrgetter가 얼마전에 추가됐습니다. 원래 lambda로 처리해야하는 건데 아무래도 lambda만 들어가면 일단 거부감이 들기 때매.. 흐흐…

예를 들면 원래 [(10, “merong”), (20, “hoho”), (30, “abcd”)]를 순서대로 정렬하려면

이렇게 됐는데, 파이썬 2.4에서는 이렇게 처리하면 됩니다. (미리 from operator import itemgetter 한 상태)

므흐흐.. 좋기는 한데, 뭔가 itemgetter랑 attrgetter는 너무 한군데만 특수화되었다는 느낌을 지울 수 없는데, 다시 메일링 리스트에 Michael W. Hudson이 엄청난 팁을 하나 공개했는데, 요렇게 쓴다고 합니다. (정확히는 이 코드는 Thomas Heller가 mwh의 사용법을 보고 추리해서 짠 것..)

즉, X + 1 하면 + 1하는 순간에 Adder인스턴스가 생성돼서, +1하는 객체로 둔갑을 해서 결국 웬만한 것은 lambda 없이도 쓸 수 있게 된다는.. 크크 정말 멋지네요 +_+. 그런데, 이 방법에서는 X.split(‘.’) 같이 아래 어트리뷰트를 호출하는 건 코드가 실행되는 때가 먼저 와 버리기 때문에 제대로 동작하지 못하게 되는데, 몇가지 껍데기를 씌우면 되기는 되겠네요..

음.. 하여간 대부분의 경우에 정말 멋지게 동작해서 mwh의 이 아이디어는 아주 멋져보입니다.~ :)

(덧붙임: 나중에 리스트에 다른 사람이 이걸 파이썬으로 구현한 소스를 올려놨네요. http://www.sil-tec.gr/~tzot/predicates.py 에서 받을 수 있습니다.)

12월엔~ 이소라 2집~

http://img.bugs.co.kr/Info/AlbumD/13/1276.gif

제가 고등학교 2학년 때 나왔던가요.. 누구나 고등학교 내내 출퇴근길을 같이 했던 가수가 있는 편인데, 저는 단연 이소라였습니다. :-) 늘 이소라 노래만.. 들으면서 아주 이소라 프로포즈도 다 듣고, 밤에 하는 이소라 라디오도 -O-;;;

원래 나온 시기가 12월이라 그런지, 전곡이 12월 분위기의 노래로만 꽉 차 있는 이소라 2집 《영화에서처럼》은 한 곡도 안 빼고 다 좋아합니다. 에헤헤. 특히 첫곡인 ‘쉼’은.. 뚜우웅~뚱~뚱~ 하고 곡이 시작하면 온몸이 찌릿~; 크크.. (오바 1g;) 근데, 2001년의 이소라 베스트에서 쉼이 빠진 건 정말 유감이군요.

벅스에서도 유독 ‘쉼’은 가처분되지 않았기에 한번 올려봅니다. -o-;

01-rest.mp3

12월은 정말 뭔가 땡땡이만 쳐도 한 달이 지나갈 것같은 정말 즐거운 달인데 (–;) 모두 신나고 재미나는 12월되세요~☆

CJKCodecs 1.0.2, iconvcodec 1.1.2 릴리즈

일본어 호환성 지원을 대폭 강화한 CJKCodecs 1.0.2와 기본적인 버그 몇가지를 수정한 iconvcodec 1.1.2를 릴리즈했습니다.

변동사항은:

  • str.encode에서 그냥 스트링 자체를 메모리에 있는 그대로 유니코드 인코딩을 해버리는 모호성 문제를 고쳤습니다. 이제 기본 인코딩으로 디코드한 다음에 인코드합니다.

  • euc-jp-strict와 shift-jis-strict 코덱이 추가되었습니다. -strict 코덱들은 거의 완벽하게 표준을 지원하는 쪽으로 갈 예정입니다.

  • shift-jis 코덱이 이제 JapaneseCodecs 와 호환됩니다. (비표준 매핑 허용)

    • U+005C REVERSE SOLIDUS 를 SHIFT-JIS 0x5c 로 매핑

    • U+007E TILDE 를 SHIFT-JIS 0x7e 로 매핑

    • U+FF3C FULL-WIDTH REVERSE SOLIDUS 를 SHIFT-JIS 815f로 매핑

  • euc-jp 코덱이 이제 JapaneseCodecs 와 호환됩니다. (비표준 매핑 허용)

    • U+00A5 YEN SIGN 을 EUC-JP 0x5c 로 매핑. (단방향)

    • U+203E OVERLINE 을 EUC-JP 0x7e 로 매핑. (단방향)

  • ChineseCodecs JapaneseCodecs 와 호환성을 위해 인코딩 별명이 추가됐습니다.

    • ISO-2022-JP-1: ISO-2022-JP-EXT

    • BIG5: BIG5-TW

    • GB2312: EUCGB2312-CN

입니다. FreeBSD 포트는 지금 프리즈 중이라 업데이트하지 못했습니다. 이번엔 현실적 일본어 지원이 많이 개선되었으니 혹시 ninix나 orangeslice쓰시는 분들은 shift-jis 이걸로 잘 되나 테스트해주세용.. (저는 일본어를 몰라서 –;)

다운로드는 http://cjkpython.i18n.org/ 에서~ :)

SeeAlso http://mail.python.org/pipermail/i18n-sig/2003-November/001623.html

itertools.groupby

저는 파이썬 2.3에서 추가된 모듈 중에 개인적으로 가장 좋아하는 모듈을 꼽으라면 단연 [WWW]itertools 모듈을 꼽겠습니다. itertools 모듈은 C나 Pascal같은 고급 언어들이나 기타 스크립트 언어들 대부분에서 마저도 지저분하게 처리가 되는 for/while/do-while 등의 루프 패턴들을 정말 간단하게 정리해 주는 데 엄청난 효용을 자랑하는데, 예를 들어 파일에서 START로 시작하는 라인부터 읽고 싶다면 옛날 구현에서는 보통:

그런데 이제, itertools를 쓰면

으흐흐흐.. 그 외에 여러개의 이터레이트 가능한 객체들을 연결해서 한꺼번에 처리해주는 chain이나 여러번 재활용하게 해주는 cycle, 일정회수 반복하게 해주는 repeat등 유용한 것이 정말 많습니다. +_+

그런데, 엊그제 귀도가 샤워 중에 groupby라는 새로운 이터레이터 패턴을 만들었는데 요것도 정말 쓸모가 많은 듯 해서 한번 대장금 보면서(;;;) 구현해 보았습니다. (패치는 [WWW]여기) groupby는 모인모인의 TitleIndex 같은 페이지에서 정말 지겹게도 쓰이는, 인덱스별 분류 패턴을 간소화를 시켜주는데, 보통 이런 짓을 하려면 이렇게 구현하겠죠.. 문자열이 가득 든 소팅된 x 리스트를 첫자를 기준으로 줄을 그으려면

구현이야 되지만, 뭘 하려는지 코드만 대충 봐서는 한눈에 들어오지도 않습니다. 흐흐.. 근데 요걸 새로운 groupby 이터레이터를 쓰면 간단하게 되는군요! 꺄아

뭐하는지도 눈에 보이고 구현도 간단하고.. 정말 좋네요.. +_+

한글 글자들을 초성 기준으로 분류하는 것도 이렇게 간단하게 됩니다. :)

요렇게 하면 결과는

귀도도 말했듯, 이터레이터와 제너레이터 장난은 정말 코드 간소화에는 엄청난 도움을 주는 듯 합니다. 앞으로도 재미있는 이터레이터가 2.4에 많이 추가되길.. :)

안 초연하다.

한상궁 인기가 하늘을 찌르는 요즘.. TV가 없는 관계로 좀 늦게 divx로 받아서;; 으흐흐 20편을 봤.. +_+

  • 장금: 마마님, 마마님은 속상하지 않으십니까?

  • 한상궁: (표정 변화 없이 칼질하면서) 상한다.

  • 장금: 걱정도 안 되십니까?

  • 한상궁: 걱정된다.

  • 장금: 근데 어찌 이리 초연하실 수 있습니까?

  • 한상궁: 안 초연하다.

크아하하 최고에요 최고 -.-b -;;;;;;;; (오바 1g)

  • 장금: 퍼키님, 퍼키님은 여자친구 없는데 외롭지도 않으십니까?

  • 퍼키: (표정 변화 없이 키보드치면서) 외롭다.

  • 장금: 걱정도 안 되십니까?

  • 퍼키: 걱정된다.

  • 장금: 근데 어찌 이리 초연하실 수 있습니까?

  • 퍼키: 안 초연하다.

–;; (한 번 보면 꼭 두고두고 써먹는다;;;)

CJKCodecs 1.0.2 예정

CJKCodecs에 그동안 오랫동안 있었던 일본어 호환성 문제가 대충 잡힘에 따라, 다음 주 중으로 1.0.2를 릴리즈하려고 합니다. 혹시 CJKCodecs에서 아주 사소한 문제점이라도 발견하신 것이 있으면 릴리즈 전에 꼭 알려주세요.. :) 이번주 토요일이나 일요일 쯤에 내놓으려고 합니다. 1.0.2가 아무래도 1.0 브랜치에서는 마지막이 될 듯 합니다.

현재까지 예정된 1.0.2에서의 수정 사항은:

  • str.encode에서 메모리에서 바로 인코드해 버리는 문제 수정

  • shift-jis 코덱에서 ‘~’ (틸드)가 인코딩/디코딩이 안 되는 호환성 문제 수정 (사실 원래 법대로 하자면 틸드는 JIS X 0201에는 없기 때문에 안 되는게 맞지만, JapaneseCodecs에서는 0x80이하를 그냥 아스키 영역에 매핑하고 있기 때문에 호환성 때문에..)

  • shift-jis 코덱에서 U+FF3C (FULL-WIDTH REVERSE SOLIDUS)를 매핑하지 않는 문제 수정.

  • ISO-2022-JP-EXT 코덱 추가

강태욱님의 cp933 코덱은 아직 문제점이 해결되지 않은 듯 해서, 아무래도 1.1 브랜치로 넘겨야 할 것 같네요.. :)

PEP289: Generator Expressions

PEP [PEP]289 제너레이터 익스프레션은 2002년 1월에 처음 제안되어 얼마전에 파이썬 2.4에 채용하기로 결정된 문법입니다. 파이썬 2.0에서 도입된 리스트 컴프리헨션의 제너레이터 버전이라고 볼 수 있는데, 리스트 컴프리헨션이 전체 리스트를 일일이 다 만들어서 넘겨주기 때문에, 한꺼번에 실행되는터라 부하도 크고 메모리도 무진장 먹습니다. 요 문제를 해결하기 위해 제너레이터로 만들어주는 건데.. lambda와 list comprehension의 중간쯤 된다고 볼 수 있겠군요.. 흐흐.. 예를 들면, 리스트 컴프리헨션에서는 요렇게

sum([x*x for x in range(10000)]) 

10000개 원소의 리스트를 한꺼번에 다 계산해서 더하게 되는데, 제너레이터 익스프레션에서는

sum(x*x for x in range(10000)) 

이렇게 하면, 이게 제너레이터로 변신해서 sum함수에서 1개씩 이터레이션 할 때마다 실행되게 됩니다. 흐흐 만세~

그런데, 이 문법은 아무래도 모호성 문제가 있는데

이런식으로 뭐 결과적으로는 맞긴 한데.. 뭐 하여간 모호하긴 하군요.. 흐흐

자 그럼 제너레이터 익스프레션을 본격적으로 맛볼 시간!

하하 대단 -.,-;;

흐흐.. 그런데, 아직 PEP[PEP]289 는 구현이 안 나와있어서 시험해 볼 수는 없는데 Jeff Epler가 yield가 앞에 들어가는 옛날 형식 문법으로 구현한 compiler 패키지 기반으로 된 것만 나왔습니다. 그래서 진짜 파이썬에서 쓰는 parser 모듈로 구현을 한 번 해보려고 하고 있는데 문법이 야릇하다보니 문법 구현부터가 힘들군요 –; 일단 패치는 다음과 같이 만들어 봤는데.. arglist가 아무래도 test 토큰이 앞에 argument가 *로 붙은거랑 겹치다보니.. ambiguity가 자꾸 발생하는군요.. 이것 어떻게 해결해야할 지 –;;; -ㅇ-; BNF 잘 아시는 분께서는 좋은 의견이 있으시면 알려주세요~♡;;

FreeBSD 5.2-BETA 릴리즈

12월 15일을 목표로 해서 릴리즈 엔지니어링 과정 중에 있는 5.2의 첫 릴리즈인 5.2-BETA가 방금 발표되었습니다. 물론 10월 이후에 엄청나게 늘어나고 있는 불안정 버그 보고들이 아직 해결되지 않은 것이 무지 많기 때문에.. 서비스에 적용했다가는 난리날 듯 하지만;; 하여간, SMP 시스템의 버그, NFS 서버쪽의 문제, ATA-RAID 문제 세가지는 공식적으로 릴리즈 안내에서도 언급이 되었네요. 이번 5.2에서는 5.1에 비해서 /bin과 /sbin이 Dynamic Root로 바뀐 것 외에도 gcc 3.3.3, msdosfs의 멀티바이트 인코딩 지원, KSE와 libthr의 본격 지원, amd64 아키텍처 지원, SCHED_ULE의 정상적인 지원 등 많은 부분이 변경되었기 때문에, 보람은 있는 것 같군요~.

으흐흐 얼른 안정화가 돼야;; 근데 사실 데스크탑 유저들에게는 별로 안정성 상관이 없는 것 같네요. 5.1 이후로는 삽질할 때 빼고는 커널 패닉을 한 번도 본 적이 없는 것 같으니깐 뭐~~;;

Gentoo Linux on FreeBSD

요즘 arm-linux용의 크로스 빌드 환경이 필요해서, FreeBSD만 갖고 열심히 시도해보다가 자꾸 ld에서 세그폴트가 나는 바람에 그냥 결국은 리눅스 에뮬레이션을 쓰기로 하고 –; 데비안으로 또 한참 시도를 했는데.. gcc랑 glibc랑 이것저것 꼬여서.. 결국은 포기; -ㅇ-;

그래서 뭔가 고치기 쉬운 [FreshPorts]emulators/linux_base-gentoo-stage1 포트를 이용해서 깔아보기로 마음을 먹었습니다. 일단, 컴파일 기반이니까 마음을 단디 먹고 -.-;

포트만 설치하는 것은 아주 간단했습니다. 그냥 젠투 사이트에서 tar.bz2받아다가 /compat/linux 에 풀어놓는 것 뿐이라.. 흐흐.. 그런데, 이제 정상 사용자로 들어가려고 bootstrap.sh를 하는데 빌드도 참 오지게 많이 하는데 거의 make world보다 더 많은 것 같더군요. -ㅇ-; 하여간, 거의 3시간을 기다렸는데.. 떨어지는 것은

-ㅁ-; 웬 glibc 날벼락이요~ 흑흑~. 몇번의 추적 끝에, 다음 한 줄을 고쳐서 해결했습니다:

음.. 이게 FreeBSD에서만 생기는 문제인지.. 왜 생기는 건지는 잘 모르겠는데 하여간 저 부분에서 build-program-cmd 변수가 지정이 엉뚱한게 돼서.. 요걸로 빌드하니 잘 되는군요 흐흣..

포티지에 패치를 넣는 방법은 files/디렉토리에 패치를 넣은 다음에 ebuild를 직접 고쳐서 끝부분에 epatch ‘패치파일이름’을 직접 해 줘야한다고 합니다. (-ㅁ-;)

자 그래서 이제 프비에서 젠투쓰기 성공~ 데비안 바이너리 갖다 깔면 호환성문제가 진짜 많이 발생했는데, 젠투 깔으니 무지 좋네요 헤헤헤.

젠투 명령어를 가르쳐주신 nainu님과 mithrandir님께 감사 (_ _)

《인간의 그늘에서》

[ISBN-8983710888] 동물행동학의 가장 유명한 학자 중의 한명이자, 디즈니 TV물 씨리즈에도 자주 나와서 대중에게도 널리 알려진 제인 구달 Jane Goodall 박사의 초창기 연구 보고서인 《인간의 그늘에서》를 봤습니다. 어찌나 재미있는지 지하철에서 내리기 싫은데 막 “벌써 신촌이야?”하고 내린 적도.. (오바 1g;;)

구달 박사는 학사도 다른 전공으로 하고 공부도 다른 것 하다가, 그냥 침팬지에 관심이 있어서 무작정 아프리카에 와서 당시 유명한 고고학, 생태학자였던 리키 박사에게 침팬지 연구를 하겠다고 갔다고 합니다. 그 후에 아무도 안 믿고 금방 가려니 하는 아프리카인들 사이에서 침팬지들과 친해지면서 침팬지 뒤를 따라다니다가 덤불이라도 걸려서 좀 쳐지면 앞에 가던 침팬지가 기다려줄 정도가 되기까지 정말 엄청난 노력을 하는군요.. 대단…

구달 박사의 자서전은 따로 있어서, 이 책에서는 처음 아프리카에 간 것부터 침팬지를 10년 정도 지켜본 것까지 (70년대 초반)나와 있습니다. 곰비 침팬지보호구역의 여러 무리 중에 한 무리를 오래 관찰하다보니, 거기서 있었던 가족관계, 권력관계, 성생활, 육아, 우정 같은 걸 정말 자세히 관찰했는데, 어찌나 재미있던지요.. 거의 그.. 유리의 집인가.. 사람 넣어놓고 관찰하는 –; 그런 것 보는 기분 -ㅁ-;;;

어린 침팬지인 Miff나 Gilka가 엄마한테 구박받을 때는 막 슬프기도 하고, Miff의 엄마인 Marina가 소아마비로 죽고 나서 동생 Merlin을 자기가 거둬서 기를 때 “힘내라!”하고 생각하기도 하고;; 일희일비를.. 므흐흐… 마지막에 구달박사에게 처음 마음을 열었던 침팬지인 David Graybeard와 나중에 소아마비로 인한 하반신 마비로 동료들에게 버림 받은 Mr. McGrigor의 죽음과 동생(으로 추정되는) Humphrey의 마지막까지 보살핌같은 얘기는 정말 슬프네요.. ㅡ.ㅜ

동물원에 가봤자 사회성이라고는 전혀 느낄 수 없는 감옥에 갇힌 침팬지만 볼 수 있는 현실을 생각해 보면 숲속에서 노는 침팬지들이 정말 행복한 것 같군요..

마지막에 어색하게 신의 영역 얘기를 무지 어설프게 한페이지 하고 끝내는 바람에 끝맺음은 좀 이상했지만; Jared Diamond의 세번째 침팬지 얘기만 열심히 나오는 The Third Chimpanzee [ISBN-0060984031]를 읽기 전에 첫번째 침팬지의 사회는 어떤 모습이었을까 생각해보며 연결해 보는데 정말 좋았습니다. :)

원서는 70년대에 나왔는데 번역판은 2001년에 처음 나왔습니다.

(표지에 나온 침팬지는 Pipi같은데 맞나요.. :) )