구글 Summer of Code 2006

작년에도 굉장한 인기를 끌었던 Google Summer of Code가 올해도 더욱 더 커진 규모로 시행될 계획이라고 합니다. 이미 FreeBSD 프로젝트나 파이썬 소프트웨어 재단같은 멘터 기관들은 내부적으로 멘터들을 모으고 프로젝트 아이디어들을 모으느라 부산하게 움직이고 있습니다.

올해도 작년과 같이 각 단위당 학생 4500달러, 멘터 500달러로 상금을 주고 둘에게 각각 구글 티셔츠를 1벌씩 준다고 합니다;; 작년에도 프로젝트들이 대다수가 성공해서 상금을 받아간 것을 보면, 올해도 결과들이 무척 기대가 됩니다. 올해는 한국에서도 많이 참가해서 커밋로그에서 많이 보게 되었으면 좋겠네요~ 5월 1일 부터 참가 접수가 시작되고, 5월 8일에 참가 접수 완료해서 5월 22일에 멘터-학생 매치가 완료된 뒤에 발표가 나서 시작한다고 합니다.

약간 좀 거시기한 것은, 6월 말까지 중간까지 진행해서 중간 보고를 하기 때문에 한국의 학사일정하고는 안 맞아서 정작 설렁설렁 다니는 학생이 아니면 일정 맞추기가 쉽지가 않긴 한데.. 흐흐.. 아쉽네요~ (저도 7월까지 빡시게 여름학기를;;;)

대안언어축제 2006 기획

작년에 대단한 반향을(스스로 생각하기엔 ㅋㅋ;;) 일으켰던 대안언어축제 2회를 올해 여름에 다시 개최하고자 하는 움직임이 일고 있습니다. 이번에는 일본의 LLDN이나 다른 컨퍼런스 들에서 얻은 새로운 아이디어들을 더 모아서, 더욱 더 신선하고 재미있는 컨퍼런스가 되면 좋겠네요. +_+

우선은, 지난 번에 대안언어축제이기는 했지만, 언어교환의 측면에서 약간 부족했던 면을 보완하기 위해서, 각 언어별 튜토리얼 세션을 공식 세션으로 넣기로 하였습니다. 언어별 튜토리얼 세션을 물론 각 언어별로 따로 따로 하면 상당히 식상하고 졸리기 때문에 비슷한 언어 몇 가지를 묶거나 전혀 다른 언어 몇 개씩을 묶어서 각 언어의 구루들이 패널로 참가하여, 비교언어학이나 인지언어학을 공부할 때처럼 각 언어의 meme을 느낄 수 있는 통합적인 튜토리얼 세션이 되면 좋겠습니다.

그리고, 참가자 간의 활발한 교류가 지난 번에는 의도대로 잘 되지가 않았는데, 아무래도 일정이 빡빡하고, 자봉과 통사들의 회고에서 행사 처음에 참가자간의 사회화를 덜 했기 때문에 그런 것 같다는 짐작을 했습니다. 그래서, 이번에는 아무래도 축제로써의 의의를 강화하기 위해서, 초기부터 교류를 활발하게 할 수 있도록 일정 진행에 여유를 많이 두고 재미있는 야외활동이나 놀이 같은 것을 많이 넣으면 좋을 것 같네요. 요새도 창준형이 재미있는 놀이를 많이 개발했다고 합니다. ^_^

인기에 힘입어 결국 독립 행사로도 치뤄진 코드레이스는 좀 더 확실한 준비와 완벽한 장비 세팅으로 매끄러운 진행이 이뤄지면 분위기를 확 띄우는 좋은 계기가 될 듯 합니다.

요새는 우리나라 개발자 커뮤니티들이 확실히 부흥기를 맞고 있는 느낌이 많이 듭니다. 대안언어축제 2회에도 많은 분들의 능동적인 참여가 있어서 세계에 수출하는(;;) 좋은 행사가 되었으면 합니다. 🙂 7,8월에 활동 할 수 있는 시간이 많으신 분들은 자봉으로 활동하시면 더욱 더 보람을 느끼실 수 있을 것 같고, 자신의 언어를 소개하고 싶은 분들도 여러 세션들을 맡아서 해 주시면 좋겠고~ 자세한 일정이나 계획은 다음에 좀 더 잡히는 대로 알려드리겠습니다.

오픈소스는 어떻게 먹고 사는가?

오늘은 두 번째로, “오픈소스는 어떻게 먹고 사는가? (podcast)“에 대해서.. 🙂 — 휴대용 mp3 플레이어가 있는 분은 오른쪽에 있는 RSS 아이콘을 눌러서 iTunes 같은 걸로 받아서 들으시면 더욱 좋습니다. -O-

오픈소스 개발자들은 주로 어떤 회사에서 일하고, 회사들은 오픈소스를 하면서 과연 어떤 방법으로 먹고 살까에 대해서 대표적인 사례들과 패턴 몇 가지를 소개해 드립니다. 자세한 내용은… (생략) -ㅇ-;;; 이거 아무래도 서투른데다가 말로 하다보니 편집이 쉽지가 않아서, 틀린 말도 있는데 그냥 남겨두게 되었네요.. 다음에 글로 깔끔하게 정리를.. 크흐;

나중에 녹음된 것을 듣다보니, 오픈소스가 꼭 열역학 제 2법칙처럼, 장시간, 큰 규모에 더욱 잘 적용이 되는 것 같은 느낌이 드는데.. 작은 규모에서는 어떻게 시작할 수 있는가를 다음 주제로 한 번 잡아 보겠습니다. ^^;

최근 얼마 간의 데이터 쌓기

예전에 회사에서 일할 때, 초당 30만건 정도 들어오는 자료의 빈도를 세서 누적 데이터를 기준으로 5분, 1시간, 1일, 1주, 1달, 1년 최다 순서로 100개 정도씩을 보여주는 루틴을 만들 일이 있었습니다. 그 때는 뭐 회사 프로젝트도 검수 기간도 다 끝나고 영 제값 못 받고 한다고 생각하는 프로젝트였기 때문에, 그냥 대충 가장 단순하게 막 구현을 했더니 오방 느려서 하드웨어빨로 버티고 있었습니다. 나중에는 각 샘플링 별로 상위 10배수를 뽑아서 나머지를 버리는 등의 튜닝을 약간 해서, 처리속도가 데이터 들어오는 것을 못 따라가는 문제를 약간 해결해야하긴 했습니다. 🙂

물론 이렇게 하면, 정확한 이산 데이터를 합해서 하기 때문에 아주 정확한 자료를 얻을 수 있다는 장점은 있지만, 통계 기간에 들어가는 샘플의 수가 워낙 많기 때문에 속도의 문제나 기간의 제한 등 여러가지 문제가 산적해 있었습니다. 특히 가장 문제는, 샘플 저장 수를 줄이기 위해서 장기간의 통계용 샘플들은 정밀도를 줄여서 5분 데이터를 모두 모아서 1시간 데이터로 만드는 등의 작업을 거치기 때문에, 업데이트가 바로바로 되지 않는 문제가 있었습니다. 그래서, 그때는 그냥 뭐 병특도 끝나가고 해서 대충 넘어 갔는데 -ㅇ-, 얼마전에 여자친구 숙제를 도와주다가, 커널에서 load average 계산하는 방법을 보고서 이것을 게시판의 “최근 뜨거운 글 100개 목록”이나, 네트워크 장비들의 “최근 다발 접속 IP 100개” 같은 통계에 쓰면 좋겠다는 생각이 들었습니다. +_+ 벌써 다른 데서는 다 쓰고 있었는지도 모르겠지만; 이렇게 되면 보통 하듯이 하루 단위로 리셋되지 않고 부드럽게 꾸준히 업데이트되기 때문에 비교적 부하를 줄이면서도 쓸만한 데이터를 얻을 수 있지 않을까 싶네요~

그래서, 그 방법이 무엇이냐!
간단히 요약해서 다음 수식으로~

커널 소스코드에서는 sys/kern/kern_synch.c 부분에 있습니다.
x가 로드이고, s가 새로 들어오는 샘플, window가 원하는 통계 기간의 샘플 수 입니다. 이렇게 하게 되면, 새로 들어오는 샘플은 1-1/exp(1/window) 의 비율로 들어가고 그 다음부터는 1/exp(1/window)가 계속 곱해져서 살짜쿵씩 사그라듭니다. 적당히 원하는 보존 기간을 지나가면 무시할 수 있을 만큼의 비율로 없어지기 때문에, 데이터 값 1개만 유지하고서도 이산형 데이터 모두를 저장하는 부담을 줄일 수 있다는 점에서 그런대로 쓸만한 방법인 것 같네요. +_+

그래서, 과연 이 놈이 진짜로는 어떻게 없어지나 그래프를 한 번 그려 봤습니다. (x 축이 축적 횟수, y축이 최종 데이터의 반영 비율, 샘플 누적 목표는 10으로 했을 때)

그래서 대략 계산해 보면, 10개까지의 데이터들의 반영 비율이 63% 정도 되고, 2배수인 20개까지의 비율의 합이 86%정도 됩니다.
정확한 데이터는 아니지만, 데이터 계산을 연속적으로 할 수 있고 연산/저장량이 많이 줄어든다는 점이 장점이겠습니다.

그런데, 커널에서는 부동소수점 연산을 피하기 때문에, 이런 계산을 좀 더 재미있는 방법으로 하고 있는데, 이것도 한 번 눈여겨 볼 만합니다. 🙂 커널 소스의 cexp라는 fixpt_t형 배열에는 exp(-1/샘플수)의 값이 미리 계산이 되어 있어서 그냥 곱하기만 하면 되게 되어있기 때문에 e 계산이나 나누기를 하지 않아도 됩니다. 그리고, 사실은 이놈이 부동소수점형이 아니라, CPU에서는 정수형으로 취급되는 고정소수점형이라는 것~ 32비트 중에서 왼쪽 21비트를 정수영역, 나머지 11비트를 소수점영역으로 쓰는데, 1<<11 * 소수 이렇게 하면 간단하게 소수점 이하라도 쉽게 변환이 되고, 덧셈 뺄셈도 생각해 보면 그냥 정수 덧셈,나눗셈 인스트럭션으로 될 것을 알 수 있습니다. 그리고, 곱셈도 가능한데 둘을 곱한 다음에 소수 영역 길이인 11비트만 오른쪽으로 시프트 해주면 고정소수점 곱하기 한 것처럼 됩니다. (물론, 손으로 써보면 쉽게 증명이 됩니다. 🙂 후배한테 자랑했더니 요새는 학교에서 이런 것도 가르쳐 준다는군요 -.-;)

뭐 하여간.. 전에 회사에서 바쁘던 와중에 검색을 할 때는 좋은 아이디어가 딱히 안 떠오르고, 검색을 해 봐도 딱히 좋은 알고리즘이 안 떠올랐는데, 계속 곱하기만 해도 줄어든다는 것을 떠올리지 못한 것은.. 아무래도 수학 공부를 안 해서일까요 -.-a 그래서 이번 학기에 공수 불끈! +_+

Vim도 구글로!

어제 Vim 개발자 Bram Moolenar가 구글에서 일하게 되었다고 발표하였습니다. 물론 업무 중에 Vim 개발을 일부분 할 수 있도록 했다는데.. 무섭게 오픈소스 인력들을 빨아들이고 있는 구글이 독립 오픈소스 개발자들을 과연 몇 명이나 남겨놓을지 모르겠군요. -O-

Vim은 원래 우간다 어린이들을 도와주세요! 를 하고 있었지만, Bram이 모든 시간을 Vim 개발에 쓰면서 쉬는 동안에는 Bram의 생활비 지원으로 스폰서십이 바뀌었다가, 다시 Bram이 구글로 들어가고 나서부터는 우간다의 키발레 어린이를 돕는 것으로 원래대로 돌아간다고 합니다.

Vim 7에는 FreeBSD에서 EUC 환경에서 문서 끝을 다 깨먹는 버그가 수정되어 있으니 이제 편하게 살 수 있을 것 같아서 기대가 됩니다. 🙂 우간다 어린이들을 도와줘야겠네요;;

오픈소스 프로젝트 생존 가이드

그동안 오픈소스 프로젝트 몇 개에서 활동을 하면서 느꼈던 생존 전략을 몇가지 올려 봅니다. 물론, 이런 것들은 절대적인 것은 아니고, 상황에 따라서 다를 수도 있지만 그런 상황도 있을 수 있구나 하고 나중에 패치를 제출하실 때 참고가 되실까 해서 몇 가지 적어 봅니다.

우선은 눈치를 잘 보고 관례를 따르자.

어느 커뮤니티던 각자 고유의 성질이 있습니다. 어떤 곳은 생각보다 엄청나게 보수적인 곳도 있고, 어떤 곳은 새로운 패치가 올라오면 열렬히 좋아하면서 달려들어서 오히려 부담되는 곳도 있고.. 어떤 곳은 모르는 사람이 글을 올리면 반감을 보이는 곳도 있고.. 주제에 약간 벗어나는 글(OT)에 대해 어떻게 상대하는지도 각각의 커뮤니티에 따라서 많은 차이를 보입니다.

대부분의 커뮤니티는 각각의 관례가 있는데 그 관례를 외부인이 쉽게 눈치채지 못해서 처음에 실수하는 경우도 많이 있습니다.
예를 들어, 어떤 곳은 패치를 버그트래커에 올리는 것을 좋아하는 곳도 있고, 또 다른 어떤 곳은 개발자에게 직접 사적으로 보내는 것을 좋아하는 경우도 있으며 그 구분의 정도도 각각 다른 편입니다. 첫 패치가 문서나 테스트를 포함해야 하는지, 어느 정도의 패치는 미리 작업 전에 아이디어를 올려야할지 등 많은 차이가 있기 때문에, 관심있는 곳은 어느 정도 익숙해지는 편이 참여하기가 쉽습니다. 물론, 참여할 때 아는 사람이 원래 참여하고 있었다면 그 사람에게 조언을 구하는 것도 좋습니다.

초반에는 묻어가기를 잘 하자

입지가 어느 정도 굳어지기 전까지는 “묻어가기”가 아주 쉬운 참여법입니다. 각 커뮤니티들은 주제가 아무리 넓어도, 대략적인 흐름이 있어서 유행하는 토픽이 몇개가 항상 떠 있기 마련입니다. 자신과 관련된 주제가 스물스물 올라올 때, 자기가 갖고 있던 생각이나 패치나 그런 것들을 괜시리 관련 지어서 같이 올려버리고 하면, 그냥 올리면 별 관심 없었을 사람들도 같은 쓰레드에 있다보니 덩달아 보고 해서 좋습니다. 🙂 같이 커밋되는 경우도 있고, 상대방들도 마침 관련 코드를 보고 있던 상황이면 아무래도 쉽다보니 같이 리뷰해 줄 확률도 올라갑니다.

한 박자 빠르게

각 커뮤니티에는 오랫동안 개발에 참여하던 개발자들이 직접 하기에는 따분하고 여유가 없는 일들이나, 새로운 아이디어가 있긴 한데 구현이 쉬울지 확신이 안 가는 경우가 생각보다 자주 발생합니다. 바로 이 경우가 터줏대감 개발자들과 친하게 지낼 수 있는 절호의 기회입니다. 그 때 잽싸게 패치를 만들어서 올려주면 패치 리뷰도 하고 하면서 좋은 기회가 많이 생기게 마련이고, 다른 사람들에게 이름 언급도 많이 돼서, 구글 히트도 올라가고 인지도도 올라갑니다. ^.^ 물론, 여기서 중요한 것은 잽싸게 패치를 만들 수 있느냐가 관건인데, 사실 저같은 경우에도 잽싸게 패치를 만들어야지 하고 마음을 먹어도 10번 시도하면 1번 정도만 끝까지 하고 나머지는 뭐가 문제인지 파악하고 대충 그냥 그렇구나 하고 중단합니다. 여러 번 시도하다보면 어쩌다 한 번은 땡잡아서 이른바 “low-hanging fruit”를 쉽게 따는 경우가 있습니다. 🙂

한 박자 느리게

중요한 일일수록 한 박자 느리게 할 필요도 있습니다. 기회를 잡을 때는 잽싸게 하면 되지만, 다른 경우에는 메일에 답장할 때도 써놓고 1~2시간 정도 놔두고 있다가 보내거나, 저장해 놓고 아무도 비슷한 글을 안 올린다 싶으면 올리면 좋은 경우가 많습니다. 1~2시간 정도 놔두면 다른 사람들이 답글을 올리는데, 훨씬 더 경력이 많고 뛰어난 사람들의 답글을 읽다보면 자기 글이 틀렸다고 생각이 드는 경우가 제법 있습니다. 아무래도, 계속 틀린 말을 하게되면, 자기 스스로도 위축되게 되고 다른 사람들한테도 이미지 저하가 제법 일어나서 패치를 리뷰해줄 때 협조를 얻기가 힘들어지고, 새로운 주장을 할 때도 동의를 얻기가 힘들어집니다.

첫인상이 중요하다

개인적인 첫인상도 물론 중요하긴 하지만, 오픈소스에서 가장 중요한 것은 코드의 첫인상입니다. 패치의 앞 몇 줄의 코드 품질이나 예시로 올린 글에 포함된 몇 줄의 예제 코드가 다른 사람들의 동의를 얻느냐 아니면 답글 하나도 안 달리고 아카이브의 한 줌의 비트로 묻히게 되느냐를 결정하게 됩니다. 따라서, 코드를 올릴 때는 반드시 프로젝트에서 쓰는 코딩 컨벤션을 지켰는지 꼼꼼하게 체크를 하고, 제공되는 테스트는 모두 확실히 돌리는 것이 좋습니다. 패치 하자 마자 바로 커밋만 하면 되는 상태까지 완벽하게 해서 패치를 제출했다면, 곧 커밋 권한을 받을 가능성이 매우 높아집니다. 🙂

변화는 조금씩

전통적인 구조의 회사에서 일하는 프로그래머들은 깜짝쇼를 좋아합니다. 뒷방에서 몰래 만들고 있다가, 데모 날짜 잡고 전직원 모아놓고 와~~ 하면서 짝짝짝 하면 물론 쇼하는 분위기도 나고 좋긴 하지만, 코드 통합의 관점에서는 최악의 경우입니다. 오픈소스 프로젝트들은 개발자들이 하위 호환성 유지에 쏟고 있을 여유가 많지 않기 때문에, 너무 많이 확 바꿔버리는 패치나 하위호환성을 완전히 깨버리는 패치를 올려버리면, 패치는 올라오자마자 팽당하는 사태를 맞게 됩니다. 패치는 최소한으로 분리를 해서 따로 따로 제출하는 것이 그 유명한 “divide and conquer”의 관점에서도 더 옳은 방법이며, 한꺼번에 패치를 많이 올리면 최근 메일 목록에서 확 도배를 하는 효과도 있기 때문에 강한 인상을 줄 수 있습니다. –; (그렇다고 일부러 패치를 몰아서 보낼 필요는 없습니다. =3)

공손한 사람이 되자

공손하게 말을 하면, 간혹 상대방의 역공을 받더라도 공격이 무디게 들어옵니다. 자신의 입지가 확고하지 않을 때에는 would, may, could , think 등.. 애매모호한 말을 총동원해서 애매한 해석이 가능하도록 여지를 남겨두는 것이 좋습니다. 🙂 물론, 익숙해지기 전까지는 Thank you for 뭐해줘서! 는 필수입니다. 항상 서로에게 감사하는 것이 오픈소스이지요 ;;;

그냥 재미로 하자

뭔가 목적을 두고 목적에 대한 과정으로 쓰게되면, 곧 그 과정이 싫증이 나기에 마련입니다. 헌신적인 마음이나 목적에 의한 노력은 일시적으로는 프로젝트에 힘을 쏟을 수 있게 하지만, 곧 시들게 마련입니다. 오픈소스 프로젝트들은 보통 아주 장기간의 릴리스 엔지니어링과 커뮤니티의 피드백 수렴 과정 같은 것이 있기 때문에, 단기간에 끝낼 수 있는 경우가 드뭅니다. 따라서, 장기간 동안에도 지치지 않게, 그냥 여유 있는 시간에 무리하지 않고 재미로 스트레스는 최대한 피하면서 참가하는 것이 좋습니다. 스트레스를 피해 잠시 도망가 있으면 다른 사람들이 해 줍니다. ^^; (자기에게 스트레스를 주는 일이라도 다른 사람들은 재미있는 일인 경우가 많습니다.)

상대방의 입장에서도 생각해 보자

처음 오픈소스 프로젝트에 참여할 때에는, 패치를 제출했을 때 금방 응답이 오지 않으면 굉장히 조바심이 나기에 마련입니다. 저도 처음 패치를 내고서 5분 안에 답장이 안 와서, 무시됐나 하고 생각했는데.. 결국은 첫 패치가 5달만에 답장이 와서 적용이 됐습니다. -O-

프로젝트에 참여하고 있는 다른 사람들도 대부분은 바쁜 사람들이고 자신과 관련이 없다 싶은 것에는 관심이 전혀 안 생길 수도 있습니다. 그래서 더 재미있겠다 싶은 것을 먼저 처리해 주거나 관심을 보이는 것도 그 사람 입장에서는 어찌보면 당연한 일입니다. 끈기를 가지고 여유있게 기다린다거나 바람을 잡는다거나 뭐 몇가지 선택지가 있는데 더 능동적인 방안으로는 기존에 영향력이 있다고 생각되는 사람들의 관심사를 파악한 다음에 그 관심사와 겹치는 것에 대한 작업을 어느 정도 해서 올려서, 피드백을 하면서 친해진 다음에 부탁한다거나, 다른 사람들이 관심을 가질 수 있게 화려한 수식어나 표준 참조를 마구 갖다 끌어붙이는 등의 동기 부여가 필요합니다. 부가적인 다른 패치를 올린 다음에 그 패치가 앞 패치에 의존성을 갖도록 해버리는 것도 하나의 테크닉이죠. 🙂

그 외의 일일이 언급하기 힘든 여러가지 것들..

오픈소스 커뮤니티의 다른 조직에 대한 가장 큰 특징은

  • 대부분의 사람들이 온라인에서 만나서 원거리에서 얘기한다
  • 여러 참여자들은 각기 다 다른 시간대에서 생활하며, 여유시간이 모두 다르다
  • 대부분의 코드는 집합적 소유권(collective ownership)의 특성이 매우 강하지만, 나름대로 암묵적인 소유권이 있는 경우도 많다
  • 대부분의 커뮤니케이션이 전화나 오프라인의 동기식 통신이 아니라 비동기식 통신이므로 답변의 순서도 뒤죽박죽이고 답변이 늦거나 아예 없을 수도 있다
  • 일반적인 회사 조직은 피라미드형 구조로 위계 구조가 단순화 되어 있는 편이지만, 오픈소스 커뮤니티들은 커뮤니케이션에 있어서는 굉장히 평면적이고 수백~수천명까지 한꺼번에 참여를 하지만, 안 보이는 인지도와 협력관계, 친분관계 등이 많은 작용을 한다
  • 재미와 흥미가 동기를 부여하는 경우가 매우 많다. 따라서, 지루하고 힘든 일은 처리되는데 시간이 굉장히 오래 걸린다

이런 것들이 있습니다. 그래서, 참여하기 전까지는 막막하기만 한 편이 많은데, 실제로는 해 보면 생각보다는 프로그래밍 경력이 40년이 넘은 프로그래머들도 아주 친절하고 잘 대해줍니다. 물론, 이 글에서 쓴 것들은 제 개인적인 경험에 의한 의견일 뿐이고, 전혀 그렇지 않은 프로젝트도 많이 있을 수가 있지만, 어느 정도 참고해 보시고 앞으로 오픈소스 프로젝트에 참여하실 일이 있으시면 잘 되시길! Happy Hacking! ^_^*

점점 알 수 없어지는 구글의 구인

“저는 구글에서 일하고 있는 누구입니다. 구글에서 일하는 것이 관심 있으시면 저에게 알려주세요.” 작년부터 오픈소스 메일링 리스트 곳곳에서 볼 수 있는 이제는 흔한 구글의 구인 문구. 작년에는 그래도 기존에 오픈소스 커뮤니티에 적극적으로 참여하고 있던 사람들, 특히 영향력이 있는 유명한 사람들이 자발적으로 올려서 친구들에게 좋은 기회를 제공해 주려고 하는 의도가 강했습니다.

그런데, 얼마 전부터 구글이 사람이 많이 모자랐는지, 광고 대상 커뮤니티의 관례에 대해서 잘 알지 못하는 리크루터들이 메일 양식을 만들어서 이름과 사이트 이름만 바꿔가면서 메일을 돌리고 있고, 심지어 메일링 리스트에 올리는 일까지 발생하고 있습니다. 저도 그동안은 말로만 듣고 있다가 오늘 그 메일을 직접 받게 되었는데, 메일링에서 그런 메일 받았다는 사람들이 많은 것 몰랐으면 괜히 좋아할 뻔 했습니다. 흐흐흐..

구글은 오픈소스 개발자들에게 무작정 스팸 뿌리듯이 구인 광고를 뿌리기 보다는, 정말로 각 개인이 어떤 특징이 있는지 뭐에 관심이 있는지, 각 커뮤니티의 특성이 어떤지를 파악한 다음에 좀 더 덜 스팸스럽게 보내는 정도의 성의를 보여야 될 것 같습니다. 이렇게 계속 스팸 돌리듯 돌려서, 길고 따분하기로 유명한 구글 인터뷰 과정을 거친 다음에 탈락했다는 사람들이 대량으로 나오면 안 좋은 인상이 제곱이 되지 않을까 싶군요. 지금 취하는 형식으로는 “대출승인 안 되신 분 다시 신청 받습니다”, “한의사의 꿈 당신도 이룰 수 있습니다” 이런 메일들과 얼마나 차이가 있을까요..

28명의 Io 프로그래머 탄생~

이번 주 초부터 1주일간의 일정으로 『생물정보학 소프트웨어 개발방법 워크샵』을 진행하고 있습니다. 곁에 있으면 하루 종일 배울 것이 솔솔 들어오는 세 분, 김창준, 김형용, 강규영씨와 함께 코치로 참여하고 있는데, 숭실대학교에서 하루종일 하고 있습니다. -O-

시작 전에는 2박 3일 합숙도 다녀오고, 나름대로 준비를 열심히 했지만, 그래도 늘 빠듯한 일정에 쫓기고 피곤한 것이.. 하루 종일 수업하는 초등학교 선생님들 목 아프다고 그러던 것이 이제서야 고마운 생각이 드네요.

제가 참여하지는 않았지만, 지난 번 워크샵까지는 주로 파이썬으로 진행을 했다고 합니다. 그렇지만, 모두가 모르는 언어를 공통으로 새로 배우면서 시작하는 효과를 위해 실험적으로 상당 부분을 Io로 여러 XP 프랙티스를 실습하고 있습니다. 즉, 이미 한국에 28명의 새로운 Io 프로그래머가 탄생한 것! (한국언론식 부풀리기를 약간 이용 -.-;)

저도 Io를 처음 볼 때, 굉장히 서먹서먹한게 괄호, if, Sequence 등 온갖게 다 거슬리다가 차차 적응을 했었는데, 놀랍게도 이번 교육에 참가하시는 참가자분 28명 모두 거의 문법에 대한 설명을 하지 않았음에도 불구하고, 1 페이지짜리 위키에 적은 짧은 가이드를 읽으시면서 순식간에 적응해서 코딩을 하는 장관을 연출하였습니다! 강의실 곳곳을 돌아다니면서 봐도 모든 모니터에 “abcd” println이나 x := (y – z) abc 이런 것 타이핑하고 계신 것 보고 있는게 마치 앨리스가 굴에 들어간 기분이더군요~

돌아오는 버스에서 여러 가지 생각해 보면, 아무래도 모두가 다 모르는 언어라는 점이 크게 작용한 것 같습니다. 만약에 파이썬이나 자바 같은 언어로 했다면, 모르는 분도 있고 아는 분도 있기 때문에, 아는 분은 문법 설명하면 졸리고 지루해지는 감이 있는데, 모르는 분은 또 따라가기 힘들고 옆 사람들이 알고 있다고 생각하면 쉽게 물어보기도 힘들지 않을까 싶네요.

물론, 배우는 분들의 열의에도 매일 놀라고 있습니다. 보통 다른 곳에서 TDD나 리팩토링 얘기를 하는 것을 보고 있으면 듣는 사람들은 대체로 기존의 손에 익숙한 방법과 완전히 다른 것에 적대감까지도 보이기도 하는데, 대부분 분들이 적극적으로 생판 처음보는 언어로 가이드를 대체로 지키면서 하시는 것을 보고 많은 감동을 받았습니다. 저도 앞으로 다음학기에 들을 미적분학-_-과 유기화학-_-, 미생물학-_- 열심히 해야겠다는 다짐을 해 봅니다;;

불여우 빠른 검색

불여우 빠른 검색 기능을 사용하면 주소창에서 바로 검색어를 입력할 수 있어서 여러모로 편리합니다. 그런데, 구글이나 네이버 검색은 UTF-8을 지원하기 때문에, 쉽게 연결 기능을 정의해서 쓸 수가 있지만 네이버 지식인이나 네이버 사전은 검색어를 EUC-KR로 입력해야지만 받아주기 때문에 그냥은 쓸 수가 없습니다.

그래서, 간단하게 하나 만들어서 쓰고 있던 것을 친구가 물어봐서 공개해 봅니다. 으흐흐. (더 좋은 방법이 있으려나 =3)

  • 네이버 지식인: http://openlook.org/cgi-bin/eucredir.cgi?t=naverkin&q=%s
  • 네이버 사전: http://openlook.org/cgi-bin/eucredir.cgi?t=naverdic&q=%s
  • 연세한국어사전: http://openlook.org/cgi-bin/eucredir.cgi?t=yonsei&q=%s
  • 서울지하철공사: http://openlook.org/cgi-bin/eucredir.cgi?t=smrt&q=%s

별 것 아니지만, 직접 돌리고 싶으시면 trac browser에서 다운받아서 쓰세용. 크흐;

오픈소스 코드 검색

가끔 코딩하다 보면 base64_encode 같이 libc나 베이스 라이브러리에
좀처럼 없으면서도 엄청나게 뻔한 함수들을 다른 오픈소스 프로그램에서
뜯어와서 쓰는 일이 있습니다. 프레임워크가 크게 유행하기 전
옛날에 있던 작은 코드들이 필요한 경우, 아주 간단한 매크로가
필요한 경우.. 아니면 어떤 함수를 다른 오픈소스 프로그램들이
어떻게 쓰는가 볼 필요가 있을 때도 많습니다. 주로 이런 경우에
그냥 막연히 구글에서 찾거나 하드에서 grep해 보거나, 패키징
시스템들 변화를 유심히 보는 사람들은 기억을 잘 더듬어 보고
배포 파일을 받아서 풀어 봅니다.

그런데, 좋은 오픈소스 코드 검색엔진이 있군요~
언어와 라이선스를 선택하면 제한해서 검색할 수가 있어서, 자기
프로젝트와 같은 라이선스에 맞춰서 검색하면 별도의 라이선스
제약없이 간단한 코드를 따와서 쓸 수도 있고 좋겠네요~
라이브러리 저자가 사용자들이 어떻게 쓰고 있는지를 볼 수도 있고
좋은 솔루션인 듯 합니다. (그런데, ASP.NET으로 만들었군요 -O-)