A nice quote about computer programming

From Larry O’Brien and Bruce Eckel in Thinking in C#:

Computer programming is tremendous fun. Like music, it is a skill that derives from an unknown blend of innate talent and constant practice. Like drawing, it can be shaped to a variety of ends – commercial, artistic, and pure entertainment. Programmers have a well-deserved reputation for working long hours but are rarely credited with being driven by creative fevers. Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination, but because their imagination reveals worlds that others cannot see.

한국어:

컴퓨터 프로그래밍은 너무나 재미있다. 그것은 음악과 마찬가지로 내면에 간직된 재능과 지속적인 훈련이 미묘한 방식으로 혼합된 결과이다. 그리고 그 결과는 그림과 마찬가지로 상업적 비즈니스, 예술, 혹은 순수한 엔터테인먼트, 어느 것으로도 나타날 수 있다. 프로그래머들은 엄청나게 많은 시간을 일하는 것으로 정평이 나 있는데, 그들이 창조적인 열정 때문에 그렇게 한다는 사실을 아는 사람은 별로 없다. 프로그래머들은 주말에, 휴가에서, 식사를 하면서 계속 소프트웨어 개발에 대한 이야기를 나눈다. 상상력이 부족해서 그런 것이 아니다. 그들의 상상력은 다른 사람들이 보지 못하는 멋진 세계를 드러내기 때문이다.

Introducing APIviz – Java API Visualizer

I’ve just released APIviz. APIviz is a JavaDoc doclet which extends the Java standard doclet. It generates comprehensive UML-like class and package diagrams for quick understanding of the overall API structure.

Please take a look at the sample report, give it a try to your application and let me know what could be improved.

얼마 전 APIviz 를 릴리즈했습니다. APIviz는 자바 표준 doclet을 확장한 자바독 doclet입니다. API의 전체적인 구조를 신속히 파악할 수 있도록 이해하기 쉬운 UML과 유사한 클래스 및 패키지 다이어그램을 생성해 줍니다.

샘플 도 한 번 보시고, 직접 적용도 해 보시고, 어떤 점을 개선하면 좋을 지 의견도 주시면 좋겠네요.

IBM developerWorks Interview with Trustin Lee

December 2006, copied from: http://www.ibm.com/developerworks/kr/interview/2006_12.html

최근 아파치 디렉터리 프로젝트의 서브 프로젝트였던 MINA가 TLP (Top Level Project)로 승급되면서 PMC (Project Management Committee) 의장으로 선출됐다고 들었습니다. MINA 프로젝트에 대해 설명해 주세요.

기존의 아파치 프로젝트는 HTTP 서버 관련 프로젝트만 진행했지만, 점차 웹 서버 외에 다른 프로젝트들이 생겨나고 있습니다. 이를 관리하기 위한 조직이 PMC입니다. 제가 의장으로 선출된 MINA 프로젝트는 ‘Multi-purpose Infrastructure for Network Applications’의 약자로, 아파치 디렉터리 프로젝트 하에서 진행되던 프로젝트입니다. 아파치 디렉터리 프로젝트는 오픈 소스 기반의 LDAP 서버 개발 프로젝트인데, LDAP 서버는 프로토콜이 상대적으로 복잡합니다. 복잡한 프로토콜을 갖는 네트워크 애플리케이션들을 신속하면서도 고성능으로 개발할 수 있는 인프라를 마련하기 위한 것이 바로 MINA 프로젝트입니다.

MINA 프로젝트에 공헌한 바가 크다고 알고 있습니다.

5년 전쯤, 네트워크 애플리케이션 프레임워크인 ‘네티 (Netty)’를 직접 개발했습니다. 당시 근무하던 ㈜아레오 커뮤니케이션즈에서 SMS (Short Message Service) 게이트웨이를 개발하면서 네트워크 애플리케이션을 쉽게 작성할 수 있는 툴이 필요해서 만들게 됐죠. 네티는 일정한 지침만 준수하면 네트워크 애플리케이션을 빠르고 쉽게 만들 수 있는 프로그램입니다. 이 프로그램이 알려지면서, 아파치 디렉터리 프로젝트의 PMC 회원이 제게 합류를 권유했습니다. 그래서 아파치 인큐베이팅 프로그램으로 참가하게 됐고, 2년 6개월 전에 네티와 기존 프레임워크의 장점을 결합해보자는 MINA 프로젝트가 탄생하게 됐습니다.

아파치 소프트웨어 재단의 멤버가 아닌 커미터가 PMC 의장이 된 첫 사례라, 그 의의가 자못 크다고 생각되는데요.

아파치 소프트웨어 재단에는 커미터-멤버-이사회 멤버로 구성되는데, 초대의장에 멤버가 아닌 사람을 선출한 것은 전례가 없던 일입니다. 초대의장은 지금껏 멤버 중에서 선출되는 것이 관례였으므로 이번에도 멤버 중에 선출하자는 의견이 없었던 게 아니었습니다. 하지만 프로젝트에 실질적인 공헌을 하고 향후 발전에 도움을 줄 사람으로 뽑자는 의견도 팽팽했다고 들었습니다. 이번 의장 선출은 제게 더욱 잘하라는 믿음과 격려를 보내준 것이라고 생각합니다. 국내에서도 PMC 의장이 된 것은 처음이라 더욱 열심히 해야겠다는 각오를 다지고 있습니다.

오픈소스 개발 활동이 회사 업무에 도움이 되나요.

첫 직장이었던 ㈜아레오 커뮤니케이션즈에서는 현업에 필요한 일반적인 컴포넌트를 오픈 소스로 개발했었고, 그 후 솔라시스에서는 아파치 디렉터리 서버 기반의 사업을 추진했습니다. 첫눈에서는 직접적으로 연관된 업무가 없어서 아쉬웠지만, NHN으로 합병된 후에는 웹플랫폼 개발팀에서 다양한 오픈 소스 소프트웨어를 접목한 ESB (Enterprise Service Bus) 개발을 하고 있습니다. 무겁고 복잡했던 기존의 ESB가 아닌, 초경량 ESB죠. 이처럼 맡았던 업무가 대부분 오픈 소스와 연관돼 있었습니다.

오픈 소스 개발을 시작한 계기는 무엇인지요.

컴퓨터를 처음 접한 것이 초등학교 1학년 때였습니다. 이 때부터 프로그래밍을 시작했습니다. 중학교 때는 게임 제작을 시작했는데, PC통신 동호회 활동을 통해 공개를 하고, 평가 받고, 인정받는 것이 재미있었습니다. 이를 통해 단점도 보완할 수 있었고요. 공유하고 개선하는 것을 자연스레 즐기게 됐다고 할 수 있죠. 고등학교 3학년 때 정보올림피아드에서 동상으로 입상하면서 특기생으로 대학에 진학한 후부터 본격적인 개발을 시작하게 됐습니다. 당시에 국내에 오픈소스 붐이 일었었고, 특히 자바 관련 프로젝트들이 많아서 자연스럽게 오픈소스 개발자가 된거죠.

오픈 소스 개발의 매력이 무엇인지, 설명할 수 있으신가요.

소프트웨어는 한 개인의 뛰어난 능력보다는 여러 사람들의 노력과 검증에 의해 성패가 좌우된다고 생각합니다. 특히 사용자와 함께 개발을 진행해 나간다면, 비판과 보완을 통해 지속적인 발전이 가능하지 않겠습니까? 그 과정에서 다양한 사람들을 만나고 광범위한 지식을 축적할 수 있기 때문에 직접적인 경험에 대한 부족함을 메울 수 있습니다. 소프트웨어의 성능은 처해진 환경에 따라 달라지기 때문에 여러 가지 상황에서의 문제 해결 방식과 의사소통을 통해 발전할 수 있습니다. 지구 반대편 사람들과의 공조도 가능하고, 이를 통해 새로운 일자리 기회도 창출할 수 있다는 매력이 대단한 것 같습니다.

오픈 소스 기반의 ID관리 플랫폼도 개발하셨던데요.

기존의 ID 관리 플랫폼은 너무 비싸고 FOB 기기를 통해서만 인증이 가능한데다가 주기적으로 FOB를 교체해줘야 합니다. 하지만 아파치 디렉터리 기반의 IDM은 휴대전화에 Java ME 기반의 FOB를 장착하기 때문에 간편하고 저렴하게 제공할 수 있습니다. 현재 아파치 디렉터리 프로젝트에 포함돼서 진행하고 있으며 안정성과 완성도를 보강하고 있습니다.

요즘 관심을 두고 있는 이슈나 기술은 어떤 것이 있나요.

ESB 구현, 그리고 MINA 입니다. ESB를 구현하는데 있어서도 MINA를 적극적으로 사용할 예정입니다. 앞으로 MINA를 단순한 프레임워크를 넘어선 플랫폼으로 발전시킬 생각입니다. 이미 정의된 프로토콜 구현체가 있기 때문에, 여기에 구미에 맞는 웹 서버/SMTP 서버와 같은 나만의 맞춤 서버를 구성할 수 있습니다. 프로토콜 설계 시에도 스펙 문서 등을 드래그앤드롭으로 테이블로 만들어서, 스펙 문서와 클라이언트/서버측 코드를 자동 생성할 수 있는 GUI 도구를 제공하고, 또 나아가서는 MINA로 작성된 애플리케이션이라면 일체의 노력 없이 완벽히 JMX를 통해 모니터링할 수 있게 되도록 할 생각입니다.

현재 MINA의 개발은 어느 정도 진행됐나요.

1~2개월 전에 1.0이 공식 발표됐습니다. 프레임워크만 구현된 형태였습니다. 향후 자바5로 마이그레이션된 2.0을 내놓을 계획입니다. 동시성 처리가 월등한 API를 사용한 자바5로 성능을 높이고 1.0에 대한 피드백을 받아 보완해 나갈 것입니다. 1.0에 대해서는 안정성은 좋지만, 문서화의 미숙함이나 API를 개선해야 한다는 요구들이 있었습니다. 현재 EURid, JP모건, 시티그룹, 쌍용정보통신 외에 멀티 플레이어 게임 업체나 POS 단말기 통신, 화물배송추적 시스템, GPS 등에 이미 MINA가 쓰이고 있습니다. 향후 쓰임새는 더욱 늘어날 것으로 보고 있습니다.

향후 계획에 대해 얘기해 주세요.

오픈 소스 활동의 활성화에 기여하고 싶습니다. 우리나라에서도 풀 타임 오픈소스 개발자가 나올 수 있었으면 합니다. 오픈소스가 아직은 초기이지만, 결국 대부분의 소프트웨어가 오픈 소스화될 것이고 전 세계적인 망을 형성하리라 전망하고 있습니다. 다만, ‘개발’은 시간에 비례해 성과가 나오는 것이 아니라, 최대 능력 발휘의 한계를 넘으면 오히려 효율이 떨어지기 때문에 기업들도 ‘일 = 성과’가 아니라 ‘일 = 성과 + 학습 + 즐거움’이 될 수 있도록 기반을 조성해 줬으면 합니다. 그래서 개발자들이 더욱 오픈 소스에 관심을 갖고 참여할 수 있었으면 좋겠습니다. 이것이 상상할 수 없을 정도의 큰 커뮤니티를 형성하게 되고, 기업과 자신을 발전시킬 수 있는 견인차 역할을 해 줄 것이기 때문입니다.

IBM developerWorks의 정보들은 활용하시나요. 개선되었으면 하는 점이 있으시면 말씀 해주세요.

개념적인 설명이 담긴 기술 문서를 선호하는 편이어서, IBM developerWorks를 가끔 찾아봅니다. 활용 예제들은 적용 환경에 따라 차이가 있기 때문에 개념이 명확한 문서가 오히려 도움이 많이 됩니다. 전문주제별로 조금더 세분화되어서 정리가 돼 있으면 좋겠다는 생각을 한 적이 있고, 번역 문서 외에도 국내 기술진의 원고가 더 많아지면 좋을 듯 합니다.

이희승 소개 – Apache MINA, Apache Directory Server, Felix, Yoko 등 다양한 오픈 소스 소프트웨어 프로젝트의 커미터이며, Apache MINA PMC 의장을 맡고 있습니다. 자바 기반 고성능 네트워크 애플리케이션 분야의 전문가로, 경량 ESB, SMS 게이트웨이, 맞춤 HTTP 서버 등을 개발 및 제작한 경험이 있습니다.

혼자 갖는 사색의 시간

/etc/cron.dailylogwatch가 보내 온 메시지가 어느덧 시간이 깊은 밤 속으로 접어들었음을 깨닫게 한다. 오랜만에 혼자서 집을 지키니 왠지 모를 불안감도 들고 대체적으로 기분이 이상하다. 하지만 지금쯤의 시각에 혼자만의 시간을 가져 본 것이 얼마만이냐. 그렇기에 이 때를 틈타 오랫동안 연락하지 못한 지인들에게 밀린 답장도 하면서 이런 저런 생각이 쏟아지듯 밀려 오는 것은 당연지사일 것이다. 익숙한 듯 어색한 사색의 시간이 찾아온 것이다.

하지만 막상 그렇게 퍼붓고 나니 이 글에서는 그닥 할 말이 많지가 않다. 그저 이 사색의 시간이란 것에 대한 반가움을 표현하는 것이야말로 지금이라는 시간에 대한 최고의 대접이 아닐까 한다.

Rewriting everything from ground up

It’s probably my fifth time to write a network application framework from scratch. They were all event-driven. The first and the second one (Netty 1) were based on blocking I/O. The others (Netty 2, MINA and Netty 3) are based on non-blocking I/O.
Five rewrites… I sometimes think it’s time to step away from network application framework and do something on top of that. I always wanted to write a nice build tool or more enterprisy stuff. However, the fact is that I am still working on a network application framework!
On the other hand, I realized that I have been feeling something exciting and freshing for each rewrite. There are many ways to solve the same problem, and it is sometimes better solved when approached from a different angle. It’s probably because I got to understand more aspects of network application development now than before. Yes, there seems to be huge room for improvements in network application design of this world… yet!
There’s also fear lying under the exciting feeling. “Will this fifth rewrite will be a great step forward from the fourth one?”, I ask myself every morning. It’s a diffifult question, but such a question makes me do my best and consider every possible issue I know of.
So? A little bit of pressure and a lot of fun. 🙂

맨땅에서부터 전부 다시 짜기

아마 네트워크 어플리케이션 프레임워크를 처음부터 다시 작성하는 것이 이번이 다섯 번째인 듯 하다. 전부 이벤트 드리븐이었다. 첫재와 둘째 (네티 1)는 블러킹 I/O 기반이었다. 나머지 (네티 2, 미나, 네티 3)는 넌블러킹 I/O 기반이다.
다섯 번의 재작성… 때론 이제 네트워크 어플리케이션 프레임워크는 그만두고 그 위에서 뭔가를 할 시간이라는 생각이 든다. 항상 멋진 빌드 툴이나 좀 더 엔터프라이즈 스타일의 물건을 만들고 싶었으니까. 하지만 현실은 아직도 네트워크 어플리케이션 프레임워크를 만들고 있다는 것!
한편으로는 새로 작성할 때마다 흥미진진하고 신선한 무언가가 느껴진다는 것도 깨닫게 되었다. 같은 문제를 해결하는데는 다양한 방법이 있고, 다른 각도에서 접근했을 때 더 잘 풀리기도 한다. 아마도 네트워크 어플리케이션 개발의 다양한 측면을 전보다 더 잘 이해하게 되었기 때문이 아닌가 싶다. 그렇다. 이 세상의 네트워크 어플리케이션 디자인에는 개선의 여지가 많이 있는 것 같다… 아직은!
흥미진진한 기분 밑에는 두려움도 숨어 있다. 매일 아침 스스로에게 “이 다섯 번째 재작업이 네 번째에 비해 진일보한 것이 될까?” 라고 묻는다. 어려운 질문이지만, 그런 질문은 내가 최선을 다하고 알고 있는 모든 가능한 이슈를 고려하며 작업하도록 해 준다.
그래서? 조금 압박감이 있긴 하지만 정말 재미있다. 🙂

미나와 저에 대한 소문의 해명

이전 블로그 글 에서 복잡한 감정을 드러낸 이후 미나와 저에 대한 여러 소문을 들을 수 있었습니다. 개인적으로 연락을 받아 소통하기도 하였지만, 점점 더 많은 사람들이 이 문제에 대해 관심을 보이고 있는 듯 합니다. 따라서 일이 어떻게 돌아가고 있는지 알려드리고자 합니다.
시작하기 전에 이전 글로 인해 기분이 상하신 분이 계셨다면 사과의 말씀을 드리고 싶습니다. 미나 PMC가 좀 더 일찍 도움을 청했더라면, 아마도 우리는 이 지경에 이르기 전에 문제를 해결했을 지도 모르겠습니다. 또한 다양한 채널을 통해 깊이있는 조언을 해 주신 분들께도 감사드리고 싶습니다.
의장직을 매년 돌아가면서 맡기로 한 미나 PMC의 원래 계획에 따라, Peter Royal이 미나 프로젝트의 새 의장이 될 예정입니다. 28일에 제 사퇴가 받아들여지면 또한 미나 PMC에서 스스로 탈퇴할 예정입니다. 그렇습니다. 저는 미나 프로젝트를 떠납니다. 물론 이것은 제가 아파치 소프트웨어 재단을 떠난다는 이야기는 아닙니다. 준비되었다고 느낄 때 다시 돌아올 것입니다.
현재, 저는 개인적으로 새 네트워크 어플리케이션 프레임워크를 만들고 있습니다. 이 프레임워크는 네티 2의 후속 프로젝트이고, 하이버네이트 팀이 LGPL을 선택한 이유와 같은 이유로 LGPL이 적용되어 있습니다. 다른 프로젝트를 포크하지 않고 처음부터 다시 작성했습니다. 향후에 JIRA, FishEye, Hudson 및 더 나은 사이트 디자인과 같은 장점을 누리기 위해 JBoss.org에 호스팅될 가능성도 있습니다.
이 글에서 꽤 많은 질문들에 대해 답했길 바라며, 질문이 더 있으면 자유로이 연락 주시길 바랍니다.

Clarification of the rumors around MINA and me

Since I expressed my mixed feeling into my previous blog post, I heard many rumors around MINA and me. I communicated with persons who contacted me privately, but it seems like more and more people are interested in this issue. Therefore, I’d like to let you know what’s going on.
Before we begin, I’d like to apologize if anyone was offended by my previous post. If MINA PMC asked for help in the early stage, perhaps we could have sorted things out before we reach here. I’d also like to appreciate many people who gave me insightful advices via various channels.
Following MINA PMC’s original plan to rotate the chair position annually, Peter Royal will become a new vice president of the MINA project. Once my resignation is accepted on 28th, I will also remove myself from MINA PMC. Yes, I leave the MINA project. This of course doesn’t mean that I will leave the ASF. I will be back when I feel I am ready.
Currently, I’m working on a new network application framework personally. It is a successor of Netty 2 and is licensed under LGPL for the same reason why Hibernate team chose LGPL. It has been written from scratch instead of forking any other project. It may be hosted under JBoss.org in the future to leverage its infrastructure such as JIRA, FishEye, Hudson and better site design.
I hope pretty many questions were covered in this post, but please feel free to contact me if you have more questions.

So Long, MINA!

Before I begin, I’d like to admit I learned a lot of great things and met many nice people in the foundation. It was an exceptional experience for me to make MINA one of the world’s best network application frameworks. I believe MINA was a good example which has shown how great project the Apache way can create.

There were several arguments (flamewar, dispute or whatever you call) in the MINA community recently. Those arguments took place in the MINA private mailing list mostly. However, the internal disharmony got a breakout finally. There were also subsequent IRC chat and blog post which gave more public exposure. Let me add another now. It’s not something which can be slienced by saying ‘LET IT DIE.’ with a high hand and private chat anymore.

Someone seem to find the underlying cause of this issue is just because I was an employee of Alex Karasulu. However, that’s not the sole issue – if you believe so, it just means that you are too simplistic. Although I had tough time dealing with him while I work with him, it’s not something that makes me sick of this situation. So, let me talk about what make me sick actually.

First, I hate people keep telling me that I have to thank and respect someone because they helped me join the Apache Software Foundation and make MINA promoted to be a top level project, or I would be still toying with Netty in the corner of the Internet. It is a direct insult to many individuals including me who run or ran great personal open source software projects.

Second, I hate people veto my hard work prematurely because of a stupid reason. I understand we are collaborating with each other and collaboration has pros and cons. Therefore, the slowdown of a collaborative project is absolutely OK to me and it’s expected. Everybody has his or her opinion and each other’s technical points should be reviewed properly. However, what’s happening in the MINA community now is far from that. Especially, the recent arguments on JavaDoc tags and volatile keyword are good examples of stupid arguments.

Third, I hate people who say just like there’s something going on in secret among Red Hat employees, which is plain wrong. There’s no such organized move that those conspiracy theory believers imagine. Sure, I shared my complaints with my colleagues, but it’s stupid exaggeration if it’s considered to be an attempt to control the project. Red Hat employees are seriously asked to behave ethically when we get involved into an open source project so that the project grow up as sustainable and healthy as possible, instead of taking an immediate advantage.

Fourth, I hate people degrades (or misinterprets) that MINA is a one man show project and that one man show (or lack of proper documentation?) prevents people from getting involved into the project. It’s true that I wrote pretty much chunk of MINA code by myself. However, it was because many great active contributors were with me – Peter Royal, Niklas Therning, Julien Vermillard, Mike Heath, Vinod Panicker, Rich Dougherty, Daniel Wirtz and many more committers and patch submitters. Please note some of them were once loyal Netty users. Were they able to join the project just because they were freaking genius that they can catch up the moving target? Hell no! The documentation and my communication skill sucked much more at that time. It’s because they shared the vision of the project and had strong will to contribute to the project, instead of complaints and vetos with no sustainable and sound suggestion. Therefore, keep saying ‘one man show’ is also a direct insult to all contributors including me, of course excluding those who are causing the trouble. Also, it’s a lame excuse that people can’t contribute enough because of lack of documentation.

A few weeks ago, I thought about forking MINA seriously because of the reasons above. However, I kicked that idea out of my mind quickly because I had strong belief that there are many silent yet nice people in the community who supports MINA.

Now? My hope for MINA is pretty much dead because of a few loud noise makers. I’m fed up with dealing with unnecessary arguments. Whatever you say, I did my best and don’t want to let myself hurt both mentally and physically anymore. I think it’s good time to go back to the calm corner of the Internet they underestimate.