IoLanguage 포트 추가

중간고사도 끝나고, 이제 막 조발표와 프로젝트의 시즌이 다가왔습니다. 원래 바쁠 때 딴짓이 더 많이 생각나는 법이라, 올해가 가기 전에 실용주의 프로그래머 권고안의 “1년에 새로운 언어 1개씩 배우기”를 실천해볼까 하는 생각이 갑자기 들었습니다. -,.-; 그래서 io를 한번 보자하는 생각이 들어서 다운로드를 찾아봤는데, 배포하고 있는 바이너리 중 FreeBSD용이 4.x용에다가 i386용이라 7.0에 amd64인 제 컴퓨터에서는 아무리 호환성 라이브러리를 설치해 봐도 돌아가지를 않아서, 그렇게 난해하다는 io 직접 빌드하기를 한번 시도해 봤습니다.

한참동안 “이야.. 자연으로 돌아갔구나”하는 심정으로 Makefile을 수정해보면서 빌드하고 나니 그냥 다른 사람들 삽질도 줄여줄 생각으로 포트로 만들어 버렸습니다. lang/io로 등록했으니, 혹시 io 빌드의 압박으로 접해보지 못한 분은 한번 설치해 보셔도 좋을 듯~ -O- 기본 타입 튜토리얼만 한번 쳐 봤는데 색다른 맛이 있어서 기분 전환에 많은 도움이 되는군요. 🙂

뭔가 또 인터넷 대란?

약 20분 전부터 뭔가 인터넷 대란 현상이 일어나고 있습니다.
한국에서 구글의 서비스들이 대부분 접속이 안 되기 시작하더니,
몇분 전부터는 미국과 영국에서도 구글에 접속이 안 되고 있군요.
그리고 국내 포탈들도 다들 백본이 가득차서 긴급하게 대책을
강구하고 있는 듯 합니다. 뭔가 타이머가 맞혀져 있던 웜의 대량
공격일까요. 아니면, 중국의 김치 사장들이 고용한? -_-;;
IRC에서 물어보니 다른 나라에서도 대체로 다들 같은 문제가 있는
듯 하니 중국에서 하는 건 아닌 것 같군요~ 무슨 문제인지 무지
궁금하당.. 으흐흐~ 곧 뭔가 뉴스가 뜨겠지요.. @.@

하여간.. 옆에 adsense가 안 떠서 화면이 멈춰 있는 문제 때문에
임시로 adsense를 꺼 뒀습니다. 삽질하고 있을 구글 시스템관리자들
화이팅! -O-

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 때는 그래서 리뷰에 리뷰를 거쳐서 깔끔하게 올렸더니 첫인상이 좋았던지 단번에 반응이 꽤 좋았던 것이.. 첫인상의 중요성을.. 🙂

Tabs v. Spaces

yser님의 다음 질문에 대한 답변입니다.

퍼키님이 내부에서 쓴다는 코딩 정책을 읽어 봤습니다.
퍼키님은 스페이스 신봉자이신 듯 한데, 처음 소스 짤 때부터 스페이스로 하셨나요? 저는 요즘 탭으로 하던 버릇을 소프트 탭=공백 치환으로 바꿔야 할까 고민 중입니다. kldp 의 논쟁이나 다른 데서 비교하는 걸 봐도 결국은 취향 문제 아닌가 하는데 장단점이야 다 있는지라 어느 하나가 절대적으로 우세하다고는 못하겠더군요.

제가 쓴 그 코딩 정책은 회사에서 쓰는 것이기 때문에, 개인적인 선호와 전혀 상관이 없는 것은 아니지만 그대로 반영하는 것은 아닙니다. 그리고 한 프로젝트에 대한 것이기 때문에 C 코드나 Win32 API를 쓰는 C++코드, 본셸 코드 같은 것은 명시하지 않았구요. 그냥 그런 것도 쓴 적이 있더라.. 정도로 보시면 되겠습니다.

들여쓰기를 할 때 탭을 쓰느냐 스페이스를 쓰느냐에 대한 제 의견은 “환경에 가장 맞는 것을 써야 한다”는 것입니다. POSIX 환경에서 주로 편집이 이뤄지고 셸에서 많은 작업이 있어야 하는 경우에는 당연히 탭의 크기는 8이기 때문에, 인덴트를 스페이스로 합니다. 주의하실 점은 탭 크기와 인덴트 크기는 의미가 다르다는 것입니다. 탭 크기는 ‘\t’ 아스키 문자의 화면 표시상의 크기를 뜻하는 것이고, 인덴트 크기는 들여쓰는 단위를 뜻하지요. 따라서, 8칸씩 띄어서 쓰기에는 너무 크기 때문에 보통 4칸 들여쓰기를 하기 위해서는 스페이스를 쓰는 방법 밖에 없습니다. ts=8 sts=4 noet 즉, 인덴트는 4칸으로 하면서 가급적이면 탭을 쓰기는 쓰는 방법도 영 안 쓰이는 방법은 아니지만, 이런 경우에는 정규식으로 소스코드 치환하기가 매우 까다로워지기 때문에, 가급적이면 탭 크기와 인덴트 크기가 다를 때는 스페이스로 풀어쓰는 것이 좋겠습니다.

반면에, 대부분의 사용자들이 쓰는 편집기가 탭 크기를 4로 쓰고 있는 MSVS같은 IDE를 기반으로 하는 환경에서는 탭이 4이고, 스마트 백스페이스같은 기능이 지원되지 않기 때문에 탭 1개로 들여쓰기를 하며 4칸으로 쓰는 것이 좋습니다. MSVS에서 물론 탭을 스페이스로 풀어쓰기를 지원하기는 하지만, 해당 설정이 프로젝트에 저장되는 게 아니라, 설치된 컴퓨터의 레지스트리에 저장되기 때문에, 해당 기능을 설정하지 않은 개발자들과 혼선이 빚어질 수도 있기 때문이죠.

그리고, 만약 자기가 새로 만든 프로젝트가 아니라, 기존에 있는 프로젝트에 참여하는 것이라면, 당연히 그 프로젝트에서 원래 쓰고 있는 스타일을 따라가는 것이 맞습니다. 명시적으로 프로젝트에서 쓰는 스타일을 문서화를 한 경우라면 가장 좋겠지만, 문서가 없더라도, 남의 소스를 고칠 때는 비슷한 다른 부분을 찾아서 누가 만든 것인지 구분이 안 갈 정도로 같은 스타일로 맞춰 주는 것이 좋습니다. 구분이 확연히 간다면, 해당 부분에서 나중에 문제가 발생하게 되면 다른 사람들은 그 코드가 자기 코드가 아니라는 생각이 먼저 들게되고, 그쪽 코드 문제가 아니더라도, 분노 게이지가 꽉 차서 결국은 버그는 안 잡고 버그 트래커에서 싸움질만 하게 되겠죠. 누구 코드인지 구분을 못 하게 돼버리면 모든 소스는 공동 재산과 같은 성격을 띄게 돼서, 너의 버그가 나의 버그이고 나의 버그도 너의 버그이고.. 이런 상태가 돼서, 모두가 생산적으로 일할 수 있게 됩니다. 🙂 (굳이 svn blame 같은 기능 써가면서 추적해서 욕하는 사람을 만나면 잘 기억해 뒀다가 다음에는 같이 프로젝트를 안 하도록 잘 피해 보세요.)

결론적으로, 제가 쓰는 스타일은 이렇습니다. (vim 명령어로..)

  • C 코드 (POSIX): ts=8 sts=8 sw=8 noet
  • C 코드 (Windows): ts=4 sts=4 sw=4 noet
  • 파이썬 코드: ts=8 sts=4 sw=4 et
  • 본셸 코드: ts=8 sts=2 sw=2 noet
  • awk 코드: 들여써야 할 정도로 긴 코드는 안 짬. 🙂

마이크로소프트의 난해한(esoteric) 프로그래밍 언어

토끼군퍼즐릿님의 활약으로 이제 국내에서도 꽤 뿌리를 내린
난해한 프로그래밍 언어계에 이제 마이크로소프트도 손을 내밀었습니다. 이름은 “요다”. 헬로월드는 이렇게 쓴다는 군요.

(args of string many are they) Main is what they seek yet return they do not.

Brace you must
     Written it is, the Console. “Hello World”

오픈소스 최고의 최적화 옵션은 -Ofun

일반적인 오픈소스 프로젝트는 아무래도 여가시간에 자발적으로 참가하는만큼 프로젝트 진행 방향에 있어서 기업 프로젝트에서와 같이 “데드라인 엄수”, “최저 생산가”, “최고의 속도”, “가장 완벽한 인터페이스”가 아니라, 그저 “개발자의 재미”가 최고의 가치로 작용합니다. 완벽한 UI를 만들면 재미있는 개발자들은 완벽한 UI를 만들고, 표준을 완벽하게 엄수하는 것으로 재미를 느끼는 개발자들은 표준을 어기는 코드가 있으면 길이길이 날뛰면서 표준에 맞게 고쳐서 패치를 내겠지요. (토끼군처럼 남이 못 알아보도록 짜는 것에 재미를 느낄 수도 있고.. =3=3) 재미가 오픈소스 프로젝트의 가장 큰 요소인 것은 너무나 당연함에도 불구하고, 그동안 정부의 오픈소스 정책이나, 오픈소스를 추종하는 사용자들, 체계적인 체제를 갖추지 않은 오픈소스 프로젝트 들에서는 많이 간과되어 왔습니다.

최근 《재미와 소프트웨어 개발》이라는 논문이 나왔습니다. 이 논문에서는 주로 오픈소스 프로젝트들을 예를 들어서, 개발자들에게 개발의 재미를 주는 요소들과, 프로젝트 생산성, 창의성의 관계에 대해서 살펴보고 있습니다. 작업의 명료성, 재미, 충동, 주의, 집중 등이 프로젝트 결과에 영향을 주는 요소로 재미있게 분석되어 있습니다. 🙂

Haskell로 구현된 Perl6 프로젝트인 pugs 개발자가 쓴 O’Reilly 기사에서 얘기하고 있는 pugs의 -Ofun 성공 비결은 이렇게 요약하고 있습니다. (각 조건의 설명은 원문을 참조하세요.)

  • -Ofun을 프로젝트 최우선 최적화 조건으로 삼아라.
  • 현대적인 분산형 버전 컨트롤 시스템을 사용하라.
  • 커밋이 허용되는 개발자들을 최대한 늘리고 커밋을 쉽게 하는 무정부주의를 지향하라.
  • 빌드가 깨지거나 개발을 방해하는 데드락을 피하라.
  • 커미터 권한을 많은 다양한 사람들에게 주어라.
  • 돌아가는 코드가 아이디어보다 낫다.
  • 끈끈하고 도움을 주는 개발자 커뮤니티를 만들자. (예: 신규 개발자들에게 멘터링을 해주는 방식)
  • 흥미와 배움은 전염된다.

기업이 투자하는 것이 아니라면, 오픈소스 프로젝트가 성공하기 위해서는 리더들은 무엇이 개발자들에게 개발 동기를 유발하는가를 고려하여 그 점들을 자극할 수 있는 무언가를 충분히 재공해 줘야할 듯 합니다. 주변의 예만 보더라도, FreeBSD의 버그 트래킹 시스템인 GNATS는 웹에서 접근할 수 있는 개발자 리소스가 제한되어 있기에, 버그 트래킹 시스템에 접근하려면 ssh로 중앙 서버에 접속해야하고, 그 과정이 미미하지만 동기 요소를 떨어뜨리는 요소로 작용하게 마련입니다. 그래서 FreeBSD 버그 트래킹 시스템에서는 유난히 오래된 버그들이 많고 개발자들이 할당만 해놓고 거들떠보지도 않는 경우가 많습니다. 또한, 코드를 직접 커밋해서 다른 사람들이 리뷰할 수 있는 경우와, 최근 CVS로 업데이트한 다음에, diff를 떠서, 복잡하게 버그 트래킹 시스템에 올린 다음에, 커미터에게 리뷰를 받아서 다시 또 설명을 한 다음에 결국 한참 있다가 커밋되는 것과는 피드백의 시간에 있어서 동기 유발에 큰 차이를 보이겠지요.

그나저나, 저 오라일리 글의 “bus error” 표현은 아주 재미있군요. 이히히히~

Worse yet, a “bus error” (a key person being hit by a bus) may stall the project for good.

SSH 공격이 대거 발생하는 중

주변의 C모님이 서버가 상당수 뚫려서 복구하느라 고생하는 것을
옆에서 보고 있다가, 요새 sshd에 대한 공격이 굉장히 유행한다는
소리를 들었습니다.
그래서, 오픈룩 서버에서도 로그를 검사해 본 결과,

lucy(perky):/var/log% (cat auth.log && bzcat auth.log.*) | awk '{print $1" "$2}'|uniq -c|sort -r
3461 Sep 24
2794 Sep 25
2385 Sep 13
1604 Sep 18
1198 Sep 24
 936 Sep 13
 844 Sep 15
 667 Sep 16

요새 같은 IP에서 초 단위로 유저를 계속 바꿔가면서 자동으로 공격하는 경우가 많이 생기고 있습니다. 아무래도, 사용자를 계속 바꿔가면서 시도하는 걸로 봐서는, 사용자로 전환이 일어난 이후에 발생하는 버그를 노린 것이거나, 취약한 패스워드를 그냥 찔러 보는 것 같네요. 하여간, 뚫린 분의 말씀으로는, sshd가 honeypot 데몬으로 교체돼버리기 때문에, 사용자가 다음부터 접속하더라도 완전 바보짓을 하게 돼서 결국은 콘솔로 가서 뒤엎고 복구하는 수 밖에 없다고 합니다. 으흐흐..

공격이 하루에 수천건이 들어오니,
sshd 버전 최신 버전인가 꼭 확인하고, 사용자 패스워드 간단한 것 안 쓰는지 보고, 1111, 7777 같은 것 쓰는 사람들 계정은 다 정지시켜
버려서 괜히 고생하지 말도록 합시다~

어느 것이 오픈소스가 아닐까요?

K모 사이트에서 글을 읽다가 저자에게 당장 소스를 내놓지 않으면 오픈 소스가 아니라고 주장하는 글을 보고서는 상당히 무서워서 오픈소스와 크게 관련 없는 일반인들이 다들 오픈소스가 그런 줄 알 것 같아서, OSI의 오픈소스 정의에 따른 퀴즈를 하나 만들어 봤습니다. (잘못된 것이 있으면 알려주세요. 🙂

다음 중 (일반적으로) 오픈소스에서 금지되는 것은 무엇일까요? (답은 1개)

  1. 오픈소스 소프트웨어 libxyz의 저작권을 갖고 있는 저자가 소스를 약간 고쳐서 회사 내부 프로그램에 넣은 다음 소스를 공개하지 않았다.
  2. 굉장히 유용한 오픈소스 소프트웨어인 sleep을 누가 이름만 살짝 바꿔서 dontsleep이라고 릴리스 했는데, 소스 안은 실수로 안 바꿨는지 원래 라이선스가 들어있었다.
  3. 일본의 어느 대학 연구소가 유전자 변형에 대한 극도의 알레르기가 있는 Eugene Dollison씨가 만든 오픈소스 소프트웨어 libmolly를 이용해서 획기적인 유전자 변형 연구를 해서 팝콘이 나는 옥수수 나무를 만들었다.
  4. 오픈소스 소프트웨어인 prettyplot는 굉장히 아름다운 그래프를 그리기 위해서 대부분의 나라에서 특허로 등록된 기술을 사용하고 있어서, 저자가 README파일에 “이 프로그램을 진짜로 쓰려거든 특허는 별도 구매하시오”라고 써 놓았다.
  5. 오픈소스 소프트웨어로 사이트를 만들어서 운영하고 있는데, 방문자가 오픈소스이니까 소스를 달라고 했는데 남자라서 기분이 나빠서 씹어버렸다.
  6. 반국가 테러집단인 mujabi단이 오픈소스 OS와 컴파일러, 수학 라이브러리 등을 이용해서 정교한 대륙간미사일을 만들어서 미국을 공격했다.
  7. 자바가 재배포를 제한한다는 점에서 썬에 반감을 갖고 있는 Mooney Lunar씨는 CLI 소프트웨어 하나를 오픈소스로 개발하면서 자바와 같이 배포하지 말라고 썼다.
  8. 태양계 전체를 구글어쓰처럼 보여주는 대단한 오픈소스 소프트웨어가 나왔는데, 1980GB나 되면서도 느리디 느린 FTP로만 배포해서, 답답했던 사용자 한명이 Bittorrent로 자신의 배포 사이트를 구축해버렸다.
  9. 외계인이 지구를 침공하려고 만든 우주선에 지구에서 개발된 오픈소스 소프트웨어를 몇 개 가져다가 사용하였다.
  10. MS사를 매우 미워하는 개발자 Mike Row씨는 자기가 만든 오픈소스 소프트웨어를 MS에서 못 받아가게 웹서버에서 IP로 막아두고, 접근하면 웹에 “MS 메롱”이라고 표시하게 해 두었는데, MS에서 그 프로그램을 다른 경로로 둘러서 입수해서 사용하였다.
  11. 화면에 오리가 돌아다니다가 마우스로 눌러주면 “꽥꽥!”하는 오픈소스 프로그램을 보고서는, 심혈을 기울여 소스를 분석해서 그 오리와 비슷하게 “꽥꽥!”하는 독점 소프트웨어를 만들어서 팔았다.

답을 보여주세요

(이 글은 public domain으로 저작권 표시 없이도 어떤 목적으로든 자유롭게 쓰실 수 있습니다.)

GREAT CODE: 하드웨어의 이해

조엘이 C를 배우라고 하는 이유에서 가장 많이 강조한 부분은
진짜로 직접 실행되는 코드가 어떤건지 구조를 알지 못하면,
하이레벨에서 사소한 잘못된 선택으로도 치명적인 속도 저하나
프로그램 문제를 일으킬 수 있다는 그런 이유였습니다. 물론
반론은 상당히 많은 주장이지만, 그 주장에 감명을 받아서
“나도 이제 저수준 세상을 알고 싶어!”라는 사람에게 시간은
되도록 적게 들고 손쉽게 익힐 수 있는 책으로
《Write Great Code》를 서점에서 처음 봤을 때, 아 딱 그책이군! 하는
느낌이 들었습니다.

이 책은 처음에는 1권만 쓰고 반응을 보려는 듯 부제를 무지
조그맣게 썼는데, 결국 이번 달 중으로 2권이 나온다고 합니다.
1권은 “Understanding the Machine”이고 2권은 “Thinking Low-Level, Writing High-Level”입니다.
1권이 7월에 에이콘 출판사에서 번역판이 나왔습니다.
서점에서만 원서를 약간 보다가 번역판을 사서 자세히 봤습니다.
원서는 너무 비싸서 T-T..

예를 들면 파이썬에서 “0.3 더하기 0.3을 했는데 왜 0.6이 아니라
0.59999998이 나오나요.” 하는 파이썬 프로그래머는 정밀도가
요구되는 계산에서도 float타입으로 0.3을 계속 더해서 결국
천 번만 더해도 눈에 띄게 오차가 나버리는 심각한 상황을 맞기
십상입니다. IEEE-754가 어떤 것인지 얼핏이라도 알고 있는
프로그래머라면 그렇게 계산하면 당연히 오차가 누적되는 것을
알고 적절한 조치를 취했겠지만요~ 이런 문제는 우연히 하나씩
숨어있는 것이 아니라 살다보면 수도 없이 만나기 마련인데,
바로 그런 문제를 이 책의 앞쪽에서 설명하고 있습니다.
수치 표현이나 스트링 표현, 인코딩, 캐릭터셋, 비트연산,
논리게이트 같은 컴퓨터과학 전공 1~2학년에서 대체로 배우지만
정작 시험치고 숙제할 때만 쓰고, 실전에 그게 연관이 있구나
하고 연관이 잘 안 되고 뇌 여기 저기에서 따로 따로 놀고 있는 것들~

그 뒷부분에서는 CPU, 인스트럭션, 스택, 힙, I/O를 다루고 있습니다.
물론 각각이 컴퓨터구조, 컴퓨터시스템, OS, 파일처리론 같은 과목들에서 다루는 것이기는 하지만, 학교에서 배우는 식으로 하는 게 아무래도 현업 프로그래머들에게는 너무 시간이 많이 든다는 것을 고려해 보면, 이렇게 책 하나로 다 묶어버려서 요점만 설명하는 것도 괜찮은 접근인 것 같습니다. 흐흐;;

그런데 하나 얘기를 안 할 수가 없는 것은.. 제책과 편집..
글씨는 지금까지 봤던 컴퓨터 책 중에서 가장 작고..
한 페이지에 거의 40줄씩 나오는데다가.. 편집도 상당히
90년대 초반 교학사에서 나온 컴퓨터책들처럼 되어있어서
책을 읽고 있으면 “아아 내가 공부하고 있구나” 생각이 강하게
들게 해 줍니다. 게다가 자간도 좁고 책 크기도 너무 커서
(B5 풀 사이즈) 들고다니면서 흔들리는 곳에서 보기에
아주 곤란합니다. 막 고3의 심정으로 옆에 지나가는 사람들
다 붙잡고 “나 공부하고 있어요 주르륵” 하소연이라도 해야할
것 같은..
책 값이 25000원이면서도 제책 품질이 이렇게 떨어지고
품위가 없게 나온 것은 아무래도 우리나라 출판 사정이 점점
어려워지고 있다는 뜻일까요.. -_.-;;
적어도 읽고 싶은 마음이라도 나게 만들어주면 좋겠군요..

그럼에도 불구하고 책의 내용은 다음의 사람들에게는 아주
유익할 듯 합니다.

  • 컴퓨터과학을 전공했지만 졸업하면서 책을 다 버리거나 후배들 줘버린 사람
  • 컴퓨터과학을 전공하지는 않았지만 모르는 말이 나와도 별로 두렵지 않은 사람
  • 책을 장 단위로 쪼개들고 다니면서 보기 때문에, 제책이 어떻든 신경 안 쓰는 사람
  • 회사에서 책 사라고 공지가 나왔는데 뭘 사야할 지 딱히 정해둔 것이 없는 사람

흐흐;

번역본 제책이 아쉬운 한편.. 2권 “저수준으로 생각하면서 고수준 코드를 짜기”가 기대가 됩니다. 1권을 보고 약간 아쉽다 생각이 드는 경우에는 Miguel도 추천한
Computer Architecture: A Quantitative Approach를 같이 보면 좋을 듯 합니다~

일본 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라서 매우 반갑습니다. 크크 _-_)