네이트온 클라이언트 FreeBSD 포트

가족, 친구를 포함한 일반인들과 대화하려면 상당히 필수품 중의
하나가 되어버린 네이트온. 얼마
전에 리눅스용과 맥용이 공개돼서 KLDP에서도 한동안 이슈가 됐었는데요.
그동안 pidgin용 nateon
플러그인을 쓰다가, 자꾸 gaim/pidgin을 업데이트할 때마다 자꾸
컴파일이 안 되거나 안 돌거나 그러는 일이 발생하고 그룹 대화가
안 된다거나 몇 가지 불편한 점이 있어서 호기심에 한번 리눅스용을
깔아 봤습니다.

네이트온 리눅스용은 버전 번호가 1.0 베타임에도, 웬만한 프로그램들 0.1 버전보다도 못한 빌드체계/배포구조로 되어 있어서 리눅스가 아닌 플랫폼에서 빌드하기는 간단하지 않았지만, 다행히도 automake/autoconf를 직접 안 하고 리눅스에서 한 것을 FreeBSD로 들고 와서 넣어서 돌리니 그런대로 잘 되더군요; 결국 수 시간 작업 끝에 포트를 하나 만들었습니다. 🙂

하나 조심하셔야할 점은, knateon이 GPLv3로 배포되어서 쓰는 것은 자유이기는 하지만, KNateOn 네이트온 서비스 약관에 보면 이런 조항이 있어서, FreeBSD 사용하다가 계정이 막히거나 할 수도 있으니, FreeBSD에서 쓰고 있다고 어디 가서 티내시면 안 됩니다. -ㅇ-;; 조용히 리눅스 쓰고 있다고.. ;; 으흐;

제7조 (서버 접속 관련)
.. 중략 ..
④ 회사는 다음 각 호의 경우 서버 접속을 중단시킬 수 있습니다.
1. 회사의 접속허가를 받지 않은 경우
2. 리눅스(Linux) 운영체제 외 다른 운영체제를 통해 서버에 접속하는 경우
.. 하략 ..
knateon 소스코드이용및서버접속약관 중 (오자는 제가 임의로 수정하였습니다.)

파이썬 모듈 관광 2회: imputil

지난 번 모듈 관광 1회의 뜨거운 성원에 힘입어 (;;)
2회를 준비했습니다. 으흐흣~
오늘은 역시 초기이니, 많이 안 알려진 것을 일부러 골라 봤는데요.
파이썬 표준라이브러리에 들어있지만 문서화가 안 되어 있고
책에서도 좀처럼 소개해주지 않기 때문에, 쓰는 곳도 찾기
힘든 그런 모듈로 이름은 imputil 입니다.

파이썬에서는 임포트 과정을 직접 조작할 수 있는데, 그 기능을
이용한 것이 대표적인게 바로 zipimport 모듈입니다. 그 덕분에
파이썬에서는 모듈을 zip에 묶어놔도 읽어들일 수 있게 되어
있는데요. 이 과정을 직접 만들려면 파이썬 내부 동작을
건드릴 부분이 많다보니 귀찮은 과정을 겪어야합니다.
이런 과정을 파이썬 언어스럽게 간단하게 해결할 수 있게
대충 껍데기를 만들어 놓은 것이 바로 imputil입니다.

관광에서는 역시 복잡한 걸 해 보면 안 되니까, 간단하게
파이썬 프로그램 확장자를 .py가 아니라 .pl인 것도 읽을
수 있게 고쳐봅시다. (-O-;;) 우선 foo.pl 라는 이름으로 파일을
만듭니다.

그리고 이제 imputil로 쓱싹~

플러그인에 괜히 자기 프로그램 이름을 붙여서 파이썬 아니고
뭔가 특별한 것인 척 할 때 좋겠죠? 🙂 괜히 암호화해 놨다가 풀면서 임포트하게 할 수도 있고.. 여러가지 응용이 가능하겠습니다.
— (플러그인 프레임워크를 위해 제어할 때는 마찬가지로 표준 모듈인 imp를 쓰면 멋있게 만들 수 있습니다.)

파이썬 모듈 관광 1회: ezpyinline

요새 블로그가 있다는 존재를 스스로 까먹을 정도로 안 썼더니만
뭔가 블로그 들어오기가 무서워서, 연재물을 하나 구상했습니다.
예전에 회사에서 한번 옆 사람한테 “모듈 관광”을 한번 시켜줬더니
좋아하길래 블로그 버전으로 모듈의 용도와 특징만 겉핥아보는
모듈관광 연재를 해 보려구요!

첫 관광명소(?)로 뭐가 좋을까 한참 고민을 하다가, 아무래도
첫회이니만큼 너무 잘 알려진 모듈을 하면 보는 분들이
지루하지 않을까 싶은 생각이 들었습니다. 그래서 결국 아무도
모를만한(;;) 모듈을 찾아봤는데 뭐 사실 인터넷에 다 있는데
아무도 모를리야 없을테고 그래도 잘 안 쓰지만 저는 매일매일
쓰는 모듈을 하나 건져 올려 봤습니다. 🙂

처음으로 소개해 드릴 모듈은 “ezpyinline“이라는 모듈인데,
이름에서 풍기듯 “쉽게 파이썬에 C를 인라인”할 수 있는 모듈입니다.
이런 건 전에도 몇 번 나오기는 했지만, 그래도 보통 시대 흐름에
따라서 요구사항이 달라지는데 오래 전에 나온 것은 스타일도 다르고
여러모로 취향이 다르니까 새것이 유지만 잘 되면 쓰기는 편할 것 같네요.

인라인 같은 요구사항이 있을 때는 보통 C로 간단하게 인터페이스를
줄인 다음에 pyrex를 쓰거나, SWIG같은 래퍼를 쓰거나, 아니면 직접 다 모듈을 짜버리는 방법이 정통적인 방법입니다.
간단한 것 할 때는 뭘 해도 상당히 귀찮죠. 파이썬은 역시 기동성이 힘! ez붙은 건 거짓말만 아니라면 다 한번씩은 봐 둘 가치가 있겠죠;

관광에 설명이 너무 많으면 안 되니 경치구경으로 대신합니다. 🙂

진정 보람을 느끼려면 항상 예전과 비교를.. ^.^

대략 10배 넘게 성능 향상이 있었습니다. 와우~! (뻔한 일에도 감동을;)

그래도 아무래도 타입이 조금만 복잡해져도 자동 처리가 난감해지고 하는 면이 있기 때문에,
아주 인터페이스를 단순화해서 임시 실험용으로 쓸 코드에서
C코드로 가속을 하고 싶을 때 유용할듯 합니다.

자 그럼 다음 이 시간에 또 만나요~ (TV 세계관광 프로그램 컨셉으로;;)

제주대 “오픈소스 개발 방법론”

지금은 제주도에 와 있습니다. ^^; 처음으로 제주도에 왔는데
나무도 다르고 바닷가 바위들도 희한하고 정말 신기하네요 ㅎㅎ;
올해 처음 개설된 제주대 컴퓨터공학전공의
오픈소스 개발 방법론
과목에 초청받아
버그, 패치, 스타일에 대해서 얘기를 하고 왔습니다.

전반적으로 작년에 했던 KLDP 10주년 행사의 오픈소스 프로젝트에 참여하기
내용과 비슷하게 실제 오픈소스 프로젝트에서 일어나는 여러 과정에
대해서 다루었는데, 수업에서 쓸 수 있게 좀 정상적인 포맷으로 바꿨습니다. [강의자료 받기]
저작권이 있는 그림들은 pdf에서 제거해서 좀 썰렁한 것은 양해 바랍니다;

제주대에는 처음 들어가면서도 우람한 나무들이 엄청나게 심겨있는
걸 보고 깜짝 놀랐는데, 학생들의 열의도 정말 대단했습니다.
수업시간에 그렇게 열심히 듣는 학생들을 본 건
학부, 대학원 다닌 경험 합해도 없었던 것 같아요. 거의 다른학교들에서
2000년대 들어서 순식간에 사라져버린 공대 학생들의 순수한 열정을
다시 볼 수 있어서 정말 감동적이었습니다. (나중에 들은 말로는
열의있는 학생들만 듣는 과목이어서 그랬을지도 모른다더군요 ^^;)
졸업한 청강생도 있고 출석률도 늦게 수강신청한 경우를 제외하고는 전체 인원이 25명인데도 100%! 이 과목으로 많은 대학생들이 오픈소스에 뛰어들 수 있게 될 것 같아서 무척 기대가 됩니다. 🙂

Net/OpenBSD에서 BSD라이선스 컴파일러 도입

OpenBSD Journal에 따르면 NetBSD와 OpenBSD에서 드디어 베이스에 BSD라이선스로 된 컴파일러를 도입했다고 합니다. 베이스에서 GPL 소프트웨어를 빼려고 해도, 도저히 엄두가 안 나게 만드는 가장 큰 무서운 장벽 gcc를 언젠가는 넘을 수 있게 해 주는 굉장히 희망적인 소식이 아닐 수 없습니다!

이번에 들어온 컴파일러 이름을 듣고 깜짝 놀랐는데요, 저는 당연히 오래전부터 FreeBSD쪽 사람들 몇 명이 개발해왔던 TenDRA가 뭔가 진척이 있었나 했더니, Anders Magnusson이란 NetBSD개발자가 PDP에서 돌아가던 컴파일러를 이어받아서 개발한거군요. (그런데 이름에 gnu가 들어갑니다 -ㅇ-;;)

아직 FreeBSD에는 포팅되지 않아서 실행해보지는 못했지만, 대략 소스를 둘러보면 아직 지원 언어는 C밖에 없는 것 같고, 포트란도 디렉토리는 만들어 놨군요. 아키텍처는 x86, m16c, mips, pdp10, nova가 있으니 아직 gcc를 완전히 대체하는 것까지는 멀었지만 벌써 컴파일 속도가 5~10배 빠르다고 하니 기대가 됩니다. (아무래도 앞으로 점점 느려지겠지만요;)

오늘의 단어

Google 개인화 홈이나 애플 대시보드 위젯같은 곳에 보면 “Word of the Day”라고 매일 하나씩 (외국인이 보기에는) 잘 안 쓰는 영어 단어를 보여주는 부분이 있습니다. 요새 한국어로 글을 쓰다보면 너무 매일 쓰는 말만 쓰고, 이미 있는 새로운 단어나 좀처럼 써본 적이 없는 단어를 새로 쓴 경험이 별로 없는 것 같아서, 국어 단어 아무거나 보여주는 서비스가 없나 한참 찾아봤는데, 잘 안 보이더군요. 으흐~

그래서 마침 국립국어원에서 표준국어대사전 표제어 목록을 공개했던 것이 생각나서, 이걸 RSS로 한 번 만들어 봤습니다. 그냥 아무거나 뽑는거라 보통 사람들은 못 알아들을 말도 나오고, 늘상 쓰는 말도 나오고 해서 1개로는 별로 건질 게 없을 것 같아서 5개로 늘렸습니다. 종종 “아!” 하는 까먹고 있었던 언젠가 본 단어도 나오는 것 같네요. 🙂

참, 단어의 뜻을 설명한 부분은 표준국어대사전의 검색 결과에서 무단으로 추출한 것이라 저작권 문제가 있습니다. 되도록이면 짧고 아주 간단하게 보여주고 있긴 하지만 여러모로 다른 곳에 재활용하시는 것은 좀 위험하고 개인적으로만 몰래 쓰세요. -ㅇ-;

혹시 관심있는 분들을 위해 표제어 부분을 설명드리자면, 표제어 목록은 Microsoft Access 데이터베이스인 mdb포맷으로 올라와 있는데, 윈도우에서 pywin32를 이용해서 ODBC로 데이터를 뽑아왔습니다. mdbtools라는 플랫폼 독립적 툴도 있긴 하지만, 국제화가 제대로 안 돼 있어서 테이블 이름이 한글인 것은 못 뽑아오더군요. –;;
뽑아온 표제어에는 원어, 6개 사전 각각의 수록여부, 합성어 구분, 장음표시 등 여러가지 정보가 들어있습니다. 그런데 자료실에 설명되어 있는 대로, 진짜로 깨진 글자가 많아서 대략 80만 정도 되는 표제어 중 9000개 정도가 깨져서 그냥 싹 버렸습니다.
동음이의어는 검색에서 따로 따로 구분하기가 힘들어서 그냥 각각을 하나로 다 합쳐서, 최종적으로 나오는 데이터는 52만단어 정도 중의 5개 씩을 보여줍니다.

일단은 국립국어원에 한번 저작권과 관련해서 문의를 해 보려고 하는데, 아무래도 사전의 저작권을 두산동아와 같이 공유하고 있는 듯해서, 간단하게 해결은 안 될 것 같군요. 크흐;

바쁘게 돌아가는 파이썬 3000 요새 소식

파이썬계에서 8월은 파이썬 3000으로 열기가 가득한 한 달이었습니다. 8월 초에 드디어 문자열의 유니코드화 작업이 완료돼서 py3k 브랜치로 머지되었고, 새 I/O 스택도 거의 제 모습을 갖췄습니다. 그리고, 약속을 지키기 위해 드디어 8월 31일(미국 서부시간 기준), 파이썬 3.0a1이 릴리스될 예정입니다.

최근의 변화를 보자면, 문자열 유니코드화는 이미 다른 곳에서 많이 보셔서 지겨울 정도이고, 최근 논란이 많았던 str.format이 얼마 전에 구현이 완료되어서 들어갔습니다. str.format이 그동안 파이썬의 마스코트(?)같았던 존재인 문자열 % 연산자를 대체할 예정입니다.

그리고, 아시아 컴퓨터교육계의 염원(?)이었던 국제화 식별자(i18n identifier)가 드디어 들어갔습니다. (여기에 대해서 OLPC 쪽에서도 관심을 보이고 있더군요.)

그렇지만 아직 토크나이저의 유니코드 처리가 좀 미숙해서 아주 특별한 조건에서만 제대로 동작하고 있는데, 3.0a2 전까지는 어디서든 유연하게 돌아가도록 고치려고 하고 있습니다.

그리고, 전체 디폴트 인코딩 뿐만 아니라, 소스코드 인코딩도 UTF-8이 디폴트로 바뀌었기 때문에, 소스코드를 UTF-8로 작성하면 따로 # coding: 을 쓸 필요가 없어지고, 요새 나오는 언어들하고 비슷하게 가고 있습니다. 🙂

파이썬 3000에 대해서는 전에 쓴 적이 있기 때문에, 구체적으로 다시는 안 쓰고 조만간 파이썬 3.0a1 출시 기념으로 스크린캐스트로 파이썬 3.0을 소개해 드리는 기회를 한번 만들어볼까 합니다. ㅎㅎ; ^_^

파이썬 합성 프로그래밍 환경

오늘은 요새 여러 블로그에서 인기를 끌고 있는
파이썬 합성 프로그래밍 환경(Synthetic Programming Environment for Python)
에 대해 간단한 리뷰를 해 봅니다.

그동안 파이썬에서 행렬 계산은 Numeric/NumPy, 기타 과학 연산은
SciPy 등 속도가 필요한 분야에 대한 해결책을 대체로 제시하고 있었지만
동적계획법(Dynamic Programming)이나 몬테카를로 시뮬레이션 같이 비교, 분기가 대량으로
발생하는 경우 파이썬만 가지고는 도저히 어떻게 해 볼 수 없는 한계가 어느 정도 있었습니다.
Pyrex는 뭔가 좀 답답하고 Psyco는 썩 만족스러운 단계까지
올라가지도 않고, 결국에 눈물을 머금고 C로 주요 코드를 짤 수 밖에 없었습니다.

그래서 몇 군데에서 시도했던 것이 파이썬에서 직접 어셈블리 코드를 실행시간에 생성해서
실행할 수 있는 JIT 어셈블러들이 등장했었는데요. 파이썬 코드랑 어셈블리랑 어색하게 결합하고
있다보니 인라인 어셈블리쓴 C보다 훨씬 더 어색해서 별로 쓰기가 유쾌하지는 않았지요.

합성 프로그래밍 환경(SPE)는 이걸 좀 더 우아하게 해결해보려는 라이브러리 입니다.
OpenSSL에서 사용하는 perlasm같이 스크립트 언어의 자체 문법으로
약간은 추상화된 방법으로 명령을 작성하면, 그 코드가 실행되면서 어셈블리 코드가 생성되고
그게 결국 실행되는 방법입니다. 너무 추상화하면 C나 다름 없으니, 거의 1:1로 맞춰볼 수 있을 정도로
간단하게 처리했지만, 사실 “합성(synthetic)”이란 말에서 드러나듯, 파이썬 문법에 대체적으로
끼워넣어서 재사용성을 매우 높일 수 있다는 점이 장점입니다.

간단한 perlasm에서도 풀어쓰기(unroll)이나 스택 셋업, 인수 대량 전달, 디버그 출력,
클린업 같이 많은 작업들을 라이브러리화 해서 쓰고 있어서, 실제 생성되는 최종 어셈블리 코드보다
훨씬 사람이 보기 쉽고 재사용할 수 있는 코드를 씁니다. SPE에서는 perlasm에서 쓰는 것 뿐만 아니라
벡터연산을 훨씬 쉽고 간단하게 쓸 수 있게 해 주기도 하고, 간단하고 단순노동적인 조건문이나
오프셋 계산 같은 것들을 우아하고 보기 쉽게 쓸 수 있도록 해 줍니다. 게다가 파이썬 코드
안에서 섞어 쓸 수 있기 때문에, 귀찮게 왔다갔다 할 필요도 없습니다.

결국, SPE의 모토는 “Skipping C”라고 하는데, 두 가지 의미가 있습니다. 하나는 원래 파이썬이
C언어로 된 인터프리터, 익스텐션 라이브러리, 컴파일러 등을 통해서 기계어로 실행(+번역)되어
왔는데, 이를 건너뛰어서 그냥 파이썬에서 바로 기계어를 쓰자는 의미로 볼 수 있고,
나머지 하나는 개발할 때 C언어로 개발할 필요를 많이 줄여서 C는 쓰지 말자 뭐 이런 의미로
볼 수도 있겠죠. 즉, 평소같으면 C로 상당수 기반을 만들어서 파이썬에서 사용하는 방식을 채택할
경우라도 파이썬과 SPE에서 제공하는 어셈블리를 쓰면 C 안 쓰고도 비슷하거나 빠른 속도를
낼 수 있다는 얘기입니다.

많은 분들이 이쯤 되면, 속도가 상당히 궁금하실텐데, 간단하게 1000만까지 숫자를 더하는 프로그램을
작성했을 때, 파이썬으로 작성된 코드가 3.64초, 내부 코드 및 자료구조가 모두 C로 작성된
NumericPython으로 0.054초, SPE로 0.019초라고 합니다. (SIMD는 사용하지 않음)
요새 C 컴파일러가 좋긴 하지만, 사람은 알고리즘까지도 변경하면서 최적화할 수 있고, 굳이
프로파일링 하지 않고도 어느 정도까지는 분기 수요를 예측할 수 있다는 점 때문에
아무래도 같은 시간 노력하면 짧은 코드는 SPE로 하는 어셈블리가 C보다 이렇게 빠를 수 있지 않을까 싶군요.
(물론, 요새 유행하는 프로파일링 컴파일러를 빡시게 돌리면 C나 SPE나 결국 비슷한 최고속도에 도달하겠지만요.)

SPE가 주 대상으로 하는 것은 아무래도 과학계산과 멀티미디어 연산이 되겠지만, 사실 과학연산에서
어셈블리를 다룰 정도로 컴퓨터 구조에 대한 지식이 있는 연구자의 수가 그렇게 많지 않은 것을 생각해 보면
기계 지식없이도 어셈블리를 쉽게 할 수 있게 라이브러리가 많이 확충되어서 “합성”만 해도 프로그램이 되면 아주 좋겠네요.
물론, 파이썬에서 도저히 어떻게 해결할 방법이 없던 한가지 프로그램 주제를 비교적 깔끔하게 해결해버렸다는
점에서는 벌써 상당한 가치가 있는 시도로 보입니다.

(참고사항: SPE의 구현인 CorePy는 현재 PowerPC만 지원하고 있고, 라이선스도 오픈소스가 아니라 시험용으로만
사용할 수 있는 라이선스이기 때문에, 이걸로 당장 뭔가 해 보기는 힘듭니다. 🙂

리눅스에 SEED가 들어갔습니다.

예전에 올린 적 있는 리눅스 SEED 구현이 오늘 드디어 git 보관소에 들어갔습니다.

전에도 말씀드린대로, 커널에 들어간 것이기 때문에 웹브라우저나 전자결제 같은 것과는 거의 관련없고, IPsec, crypt-fs 같은 커널에서 사용하는 보안 레이어에만 실제로 적용됩니다. 몇가지 사용 예를 더 생각해보면, 커널 모듈로 뜨는 키보드 보안(해주는 척 하는) 모듈이 유저랜드를 거쳐서 통신하는 경우라던지 그럴 때도 어떻게 잘 하면 쓸 수 있을 것 같기도 하네요;; 어떻게 봐도 사실 일반 최종사용자들이 직접적으로 사용할 일은 거의 없습니다;; ^^;;

FreeBSD에도 넣으려고 했는데, 뭔가 손이 잘 안 가는 것이.. 흐흐 드라마보는 시간 조금만 줄이면 정말 많은 일을 할텐데, 큰일이네요 -ㅇ-;;;

아마도 리눅스 2.6.23은 벌써 RC가 진행 중이라 못 들어갈 것 같고, 2.6.24에는 들어갈 수 있지 않을까 싶네요~

파이썬 euc-kr 코덱에 첫가끝 지원 추가

그동안 파이썬의 euc-kr 코덱에서는 KS X 1001 완성형에 들어있지
않은 글자는 그냥 에러로 처리해 왔습니다. GNU libiconvGNU libc를 포함한
대부분의 오픈소스 프로그램들도 그냥 완성형만 지원해 왔었는데요.
얼마전에 MSIE에서 어떤 상황에서 EUC-KR에서도 첫가끝 코드를 활용하는 사례가 보고되었고, 모질라에서도 2001년부터 이미 첫가끝을 지원하고 있었습니다.

그래서, 파이썬에서도 뭔가 그래도 부록이지만 표준 문서에 있긴 있는 내용이니 지원해야겠다 마음이 들어서, EUC-KR 코덱에 새로 구현하여 넣었습니다. 코덱 이름은 바뀌지 않고 그대로 euc_kr 이기 때문에 사용상 별로 다른 점은 없고, 완성형만 걸러내기 위한 목적으로 쓰셨던 분들은 이제부터 다른 방법을 쓰셔야 됩니다.

예를 들면 이렇게 나옵니다.

적용되는 버전은 호환성 유지를 위해 2.6 이상으로 적용됐기 때문에 앞으로 나올 2.5.2나 2.5.3 버전에는 옛날 동작 그대로 완성형 한글만 변환됩니다.

마지막으로 파이썬의 숨겨진 비밀 하나 공개해 볼까요. 🙂

파이썬 2.4 이상에는 인천여중 학생의 유명한 시(?)가 하나 숨어있습니다. -ㅇ-;; 이렇게 해 보세요.