update site url 입니다. http://findbugs.cs.umd.edu/eclipse/
설치가 완료되면 다음과 같은 메뉴가 보입니다.

테스트용으로 에러를 발생시키는 소스를 만들어서 테스트 해봅니다.

package net.okjsp;

public class HelloWorld {

 /**
  * @param args
  */
 public static void main(String[] args) {
  String arg = null;
  System.out.println("Hello World! "+arg.equals("0"));

 }

}


문제가 되는 라인 앞에 버그가 표시됩니다. 더블클릭하면 하단에 findbugs 뷰가 생깁니다.


해당 버그의 내용과 수정 방법에 대해서 표시됩니다.

뷰 메뉴 중 findbugs 퍼스펙티브로 전환하는 아이콘도 있습니다.

클릭하면 다음과 같은 정보를 확인할 수 있습니다.

이제 쎄스코를 부르지 않아도 될 것 같습니다.

 


http://webappscon.com/2008/Main/About 


웹 애플리케이션 개발의 트렌드를 보고 싶네요. ^^
트랜스포터 이후로 이 배우를 주목하고 있습니다. Jason Statham, 액션이 맘에 듭니다.
Death Race 영화는 거의 게임스토리입니다. 스토리고 서사고 중요하지 않습니다. 그냥 장면과 상황이 재밌습니다. 허술하게 풀어가는 듯 싶지만, 스피드와 인정사정봐주지 않는 그 냉혹함에 영화를 볼 이유가 있다고 할까요.

아 또 하나 있습니다. 여배우도 봐줄만 합니다. 트랜스포머에 나오는 배우와 살짝 혼동했습니다.

스타워즈I의 아나킨 스카이워커의 짜릿한 레이스는 아니지만 적어도 벤허 급은 된다고 해야할까요.
image from: http://mikeshields.blogspot.com/2008/08/death-race.html


포스터에 나오는 사람들이 중요한 사람들입니다.
image from: http://downloadmoviemusicvideos.blogspot.com/2008/09/death-race-2008-hollywood-movie.html


제일 처음 자바를 시작했을 때, 에러(Error와 Exception 나뉘지만 에러로 표기합니다)화면을 보고 깜짝 놀랬습니다.

2008-10-06 13:27:06 ApplicationDispatcher[/] Servlet.service() for servlet download threw exception
java.lang.IllegalStateException: getWriter() has already been called for this response
        at org.apache.coyote.tomcat5.CoyoteResponse.getOutputStream(CoyoteResponse.java:568)
        at org.apache.coyote.tomcat5.CoyoteResponseFacade.getOutputStream(CoyoteResponseFacade.java:148)
        at kr.pe.okjsp.DownloadServlet.doGet(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
        at kr.pe.okjsp.ControllerServlet.doGet(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
... 중략 ...
        at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
        at java.lang.Thread.run(Thread.java:619)

저런 식으로 우수수 떨어지는 에러메시지는 초보에게는 공포감을 일으키기 충분합니다. "내가 그 정도로 잘못했는지 정말 몰랐어요"라는 감정이 생기죠. 사실 에러메시지의 상단 2~3줄만 봐도 문제의 원인을 파악할 수 있는데, 스택트레이스(Stack Trace)라 불리는 사정없는 에러메시지는 정말 "안 좋아"였습니다.

try{...} catch(Exception e) { System.out.println(e.getMessage()); }

저런 메시지 폭탄을 피하기 위해서 위 코드를 통해 핵심 메시지만 봅니다. 이 포스팅의 핵심은 저기서 나온 메시지들과 친해지라는 것입니다. 아마 자주 보일 것입니다.

가까이 하기 어려운 사실 하나는 "영어"로 된 메시지라는 것이겠죠. 영어는 못해도 자바는 좀 하신다면 공개된 소스나 디컴파일을 통해서 저 메시지 생성부분을 찾아볼 수 있습니다. 더구나 자바의 기본 라이브러리는 공개되어 있습니다. src.zip 파일이 그것이죠.

이클립스 툴이나 텍스트 에디터 등을 통해서 에러 메시지를 검색해보면 해당 부분의 소스를 볼 수 있을 것입니다.

또 다른 방법은 구글링을 통해서 소스를 검색해 볼 수도 있습니다. 위 메시지의 경우 검색어를 다음과 같이 넣습니다.


따옴표("")로 감싼 이유는 단어 구분해서 찾지 말고 문구 그대로 검색하라는 의미이고 filetype:java 는 확장자가 java인 파일만 검색하라는 뜻입니다.

이런 식으로 소스를 찾아서 에러원인을 볼 수 있다면, 아마 문제해결(Troubleshooting) 능력이 많이 좋아질 것입니다.

버그와 에러는 다르죠. 에러 메시지! 사라지지 말고 함께 해요.

ps. 공통 프레임워크 만드시는 분들 에러 씹지 말고 보내주세요. ^^;
허걱, iTunes 발신에 제목이 "Your receipt #60582931"로 된 메일이 와서 깜짝 놀랬습니다.
4개의 애플리케이션이 목록에 나와있습니다. 그 이후에도 또 메일이 오겠죠.
전부 합쳐서 $0입니다. ^^;


고민이 하나 생기고 있습니다. 제가 만든 프로그램이 정말 팔릴까 라는 의구심이죠. 제가 이렇게 공짜만 찾으니까요.
http://www.eclipse.org 사이트의 메인이 확 바뀌었습니다.

Users > Ecosystems > Members > Committers 사이클의 의미가 새롭게 다가옵니다.

일반적인 서비스는 제공자(Provider)와 소비자(Consumer)로 나뉩니다. 하지만 다른 제품들은 생태계(Ecosystem)를 만들어냅니다. 블리자드의 스타크래프트를 떠올려 볼 수 있습니다. Map을 사용자가 직접 만들어서 배틀넷에서 플레이할 수 있습니다. 놀이터를 만들어서 자유롭게 게임을 즐길 수 있도록 한 것입니다. 시나리오 모드에 감격하고 끝나면 소비에서 마치게 되지만 배틀넷에서 Use Map Setting 모드의 게임들은 상상초월의 재미를 가져다 주게 됩니다. 물론 모든 사용자가 만든 맵들이 공평하게 대우받지는 못합니다. 재미 요소를 가진 맵들이 생존하고 주도권을 잡게 되는 것이죠.

이클립스 플랫폼이 추구하는 것도 같다고 봅니다. PDE(Plugin Development Environment)를 제공해서 스스로 진화할 수 있는 통로를 열어놓았습니다.

"너희는 주는대로 받아 먹어라"는 서비스와 "자 이제 같이 함께 놀아봅시다 당신의 생각은 어떤 것인가요"라고 판(플랫폼)을 펼쳐 놓는 것은 다릅니다.

okjsp 사이트의 보안을 강화하기 위해서 작업을 시작했습니다. http://www.okjsp.pe.kr 외 에 https://www.okjsp.pe.kr 접속을 위한 것이죠. 현재 아직 인증서오류가 발생하고 있습니다. 아직 돈을 내지 않았기 때문이죠. ^^; 인증서 에이전시에 등록할 때 10만원 내외의 비용이 필요합니다.

인증서를 신청하기 전에 서버 작업이 필요합니다. 그에 대한 설명입니다.

jdk에는 인증서를 위한 도구가 포함되어 있습니다. keytool 이라는 프로그램입니다. bin 디렉토리 아래 javac와 같이 있죠.

[root@169s /root]$ rm -rf .keystore
[root@169s /root]$ $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
keystore 암호를 입력하십시오: changeit
새 암호를 다시 입력하십시오: changeit
이름과 성을 입력하십시오.
  [Unknown]:  www.okjsp.pe.kr
조직 단위 이름을 입력하십시오.
  [Unknown]:  okjsp
조직 이름을 입력하십시오.
  [Unknown]:  okjsp
구/군/시 이름을 입력하십시오?
  [Unknown]:  Seoul
시/도 이름을 입력하십시오.
  [Unknown]:  Seoul
이 조직의 두 자리 국가 코드를 입력하십시오.
  [Unknown]:  KR
CN=www.okjsp.pe.kr, OU=okjsp, O=okjsp, L=Seoul, ST=Seoul, C=KR이(가) 맞습니까?
  [아니오]:  y

<tomcat>에 대한 키 암호를 입력하십시오.
        (keystore 암호와 같은 경우 Enter를 누르십시오):
[root@169s /root]$


위와 같은 절차를 거치면 root계정의 홈 디렉토리에 .keystore 파일이 생깁니다.

이 파일에서 인증서를 요청하기 위한 Certificate Signing Request (CSR) 파일을 생성합니다.

[root@169s /root]$ $JAVA_HOME/bin/keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr
keystore 암호를 입력하십시오:
[root@169s /root]$ ls cer*
certreq.csr
[root@169s /root]$ cat certreq.csr
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIBpzCCARACAQAwZzELMAk.........1IxDjAMBgNVBAgTBVNlb3VsMQ4wDAYDVQQHEwVTZW91
...
-----END NEW CERTIFICATE REQUEST-----


개인정보라 함은 이름, 주민번호, 휴대폰, 이메일 등을 조합해서 해당 사람에 대한 식별이 가능한 정보라고 합니다. SSL을 설치하는 이유는 로그인할 때 비밀번호가 암호화되어서 중간에서 packet sniffer 도구 등으로 탐지되지 않도록 하기 위함입니다.

개인사이트다, 뭐다 말이 많지만 주민번호 받지않는 회원가입이 있고 로그인이 있기 때문에 보안설정은 하는 게 좋을 듯 합니다. 그냥 익명의 사이트로 간다면 글에 대한 신뢰성이 바닥으로 떨어지기 때문입니다.

정보보호진흥원kisa에서 소개해준 업체들 좀 돌아다녀 봐야겠습니다. 싼 거 찾으러 말이죠. ^^;

관련정보: http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html

지난 데브멘토의 대한민국 소프트웨어 개발자 컨퍼런스에서 안철수님의 말씀 중 "전망의 덧없음"은 꽤 공감했습니다. 당시 의학도 시절 성적이 우수한 사람들은 내과를 지원했었고, 낮은 성적의 학생들이 피부과를 갈 수 밖에 없었다고 합니다. 10년 20년이 지난 지금 떵떵거리며 사는 동기들은 피부과 출신이 많으며 내과 출신의 의사들은 개인병원이 잘 안 되서 금융사범으로 도피생활을 하는 등 과거의 전망이 꼭 현재와 같지 않다고 했습니다.

차를 잘 다루는 이가 춘천에서 서울로 오면서 그럽니다. 저 강변에 차들이 왜 막히는지 아느냐고? 네비가 알려주는대로 가는 사람들 행렬이라고 합니다. 평소 서울과 춘천을 자주 오간 경험이 많은 이라 여러 경로를 알고 있었던 것인데, 네비의 가이드를 따르는 사람은 그러기 힘들죠.

기술의 변화, 기술의 전망을 많이 물어봅니다. .net이 2000년에 선보일 때 현재처럼 기업들이 외면할 것이라고는 전망하기 힘들었습니다. 이런 경향이 몇 년 뒤에도 여전할 것이라는 전망도 보장하기 힘듭니다. 플렉스가 뜬다 하여 많은 자바개발자들이 책도 사고 세미나도 듣고 열심히 따라가 봅니다. ^^; 어찌보면 경마장에서 몇 번 말이 오늘 컨디션이 좋다더라 얘기를 어깨 너머로 듣고 그 말에 베팅하는 것과 유사해보입니다.

펠프스 괴물 소식을 들었습니다. 그는 하루에 세 가지만 하더군요.
얼마 전 그는 NBC와의 인터뷰에서 “8관왕이 되기 위해선 무엇이 필요한가”라는 질문에 “내가 할 수 있는 것은 먹고, 자고, 수영하는 것이다”고 대답했다.
from: http://article.joins.com/article/article.asp?Total_ID=3262199

주변에 잘 하는 사람을 보면 평소 브라우저에 띄워져 있는 내용이 남들과 다릅니다. 하루 하루 차곡차곡 쌓아가는 자기의 관심사가 자기 생활을 만들어가고 인생을 만들어갑니다. 물론 네이버 뉴스를 매일 본다고 뉴스 앵커가 되지는 않겠습니다만 퀴즈쇼에 나가서 일등할 확률은 높아지겠죠. 

이직을 하거나 진로를 선택하면서 전망은 참으로 궁금한 것입니다. 점보는 분들을 위한 좋은 아이템이죠. 자기가 점 쳐준 사람의 인생에 대해 책임지는 점술가는 아직 보지 못했습니다. 점술 평가제나 점결과 책임보험 같은 것이 만들어진다면 재밌을 듯 합니다. 서태지와 아이들 데뷔심사평은 참으로 유명하죠. ^^;

전망을 따지는 것은 노력대비 수입에 관한 경제적인 관심이라고 생각합니다. 저는 간단하게 생각하기로 했습니다. 세상에 가치있는 일이라고 생각하는 것을 해 갈 것입니다. 그 가치에 대해서 세상이 저에게 보답하겠죠. 일반적으로 통용되는 보답이 돈(연봉) 이라고 생각합니다. 그게 제가 하는 일에 대한 세상의 가치이겠죠. 



기회란 준비된 사람에게 아주 잘 어울리는 것입니다.

itunes에서 카드정보를 입력하지 않고 None을 선택한 후에 Free 로 가격이 책정된 애플리케이션을 다운 받을 수 있습니다.


현재 갖고 노는 애플리케이션들입니다. 핵은 하지 않았습니다.
iTunes에서 다운받아놓고 Sync할 때 옮겨도 됩니다. 터치에서 바로 다운받을 수도 있구요. App Store라는 아이콘 클릭해서 들어가면 Free Top 25 에서 다운받았습니다

서울 지하철 노선도도 괜찮고, 뽁뽁이도 재밌습니다. ^^; 스타워즈 광선검인 Lightsaber는 정말 휘두르는 대로 소리가 납니다.  

상황이 잘 풀리지 않는 경우에 스트레스를 많이 받습니다. 그건 옛날이나 현대나 마찬가지입니다. 커뮤니케이션이 잘 안 되는 경우 그 답답함이 더 심해집니다. 특히나 회사나 업무상 일을 진행할 때 커뮤니케이션의 중요성은 누구나 인식을 합니다. 그런데 맘대로 되지 않는 일순위가 돈이고 그 다음이 커뮤니케이션입니다. 사업의 뿌리는 돈인데, 그 사업에 사람들을 끌어들이는 것은 커뮤니케이션입니다.

업무상 스트레스는 주로 상하 관계에서 가장 많이 일어납니다. 영어로 표현하면 좀 더 와 닿는데, 그 쪽이 힘든 이유는 "Untouchable[언터쳐블]"이기 때문입니다. 즉 자신의 힘으로 컨트롤 할 수 없기 때문에 좌절감과 스트레스를 많이 느끼게 되는 것입니다. 이런 상황에서 스트레스를 조금이라도 줄이는 방법 중 유명한 것은 역지사지입니다. 우리말로 하면 "입장바꿔 생각을 해봐, 니가 지금 나라면 이럴 수 있니."입니다.

울 팀장님이 왜 나에게 이렇게 얘기했을까. 저 기획자가 왜 이따구로 요청해 올 것인가, 혹시 뇌를 안드로메다로 보내버린 것 아닌가? 혹시나 개념은 2MB USB 에 압축시켜놓은 것 아닐까 라고 좀 시간(5분도 괜찮음)을 할애할 필요가 있습니다. 그냥 "어떻게 나에게 이럴 수 있어"라고 멍때리고 황당해 하고 분개할 필요는 없습니다. 그건 두고두고 씹을 것이니까 말이죠. 나에게 자극을 준 사람의 상황을 한 번이라도 생각해 본다면 가장 이득이 되는 것은 스스로에게 여유가 생깁니다. 속담 중 호랑이 굴에 물려가도 정신을 차린다는 경우가 이 경우입니다.

싸움에서 생각의 여유는 중요합니다. 생존 전략을 검토할 수 있는 좋은 시작이기 때문입니다.



image from: http://eureferendum.blogspot.com/2008/05/weve-all-got-it-wrong.html

+ Recent posts