<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Rath World</title>
	
	<link>http://xrath.com</link>
	<description>The only joy in the world is to begin.</description>
	<pubDate>Fri, 19 Jun 2009 20:47:04 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/xrath/jQtG" type="application/rss+xml" /><item>
		<title>시는 걸작이 아닐 바에는 아예 존재하지를 말아야 해.</title>
		<link>http://feedproxy.google.com/~r/xrath/jQtG/~3/Q1VsIPuOUGs/</link>
		<comments>http://xrath.com/2009/06/%ec%8b%9c%eb%8a%94-%ea%b1%b8%ec%9e%91%ec%9d%b4-%ec%95%84%eb%8b%90-%eb%b0%94%ec%97%90%eb%8a%94-%ec%95%84%ec%98%88-%ec%a1%b4%ec%9e%ac%ed%95%98%ec%a7%80%eb%a5%bc-%eb%a7%90%ec%95%84%ec%95%bc-%ed%95%b4/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 20:46:54 +0000</pubDate>
		<dc:creator>rath</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://xrath.com/?p=686</guid>
		<description><![CDATA[시는 걸작이 아닐 바에는 아예 존재하지를 말아야 해.
그래서 최고의 작품을 만들어 낼 소질이 없는 사람은 예술의 길을 단념하고 예술을 해보고 싶다는 유혹에 빠지지 않도록 각별히 조심해야 해. 물론 사람은 누구나 자신이 본 것은 무엇이든 따라해 보고 싶은 막연한 충동을 느끼지. 하지만 그건 정말 욕망일 뿐이지 실제로 그런 능력이 자신에게 있다는 뜻은 아니거든.
그런데 줄타기 묘기를 부리는 [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>시는 걸작이 아닐 바에는 아예 존재하지를 말아야 해.</p>
<p>그래서 최고의 작품을 만들어 낼 소질이 없는 사람은 예술의 길을 단념하고 예술을 해보고 싶다는 유혹에 빠지지 않도록 각별히 조심해야 해. 물론 사람은 누구나 자신이 본 것은 무엇이든 따라해 보고 싶은 막연한 충동을 느끼지. 하지만 그건 정말 욕망일 뿐이지 실제로 그런 능력이 자신에게 있다는 뜻은 아니거든.</p>
<p>그런데 줄타기 묘기를 부리는 광대들이 마을에 오기만 하면 온갖 판자나 목재 위를 왔다 갔다 하면서 몸의 평형을 잡아보는 아이들을 생각해 봐. 다른 자극을 받아서 그것과 비슷한 장난으로 옮겨 가기 전까지는 그 짓을 그만두지 않아.</p>
<p>그리고 유명한 연주가가 연주회를 열 때마다 그 악기를 배우기 시작하는 사람들이 꼭 생긴단 말이야. 얼마나 많은 사람들이 이런 식으로 인생의 길을 잘못 드는지, 자신의 소망을 재능으로 착각했다는 사실을 일찍 깨닫는 사람은 그나마 행복한 편이라니깐.</p></blockquote>
<p style="text-align: right;"><a href="http://www.yes24.com/24/goods/17369" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.yes24.com');">빌헬름 마이스터의 수업시대 2권</a> 2장에서 발췌</p>
<p>한동안 니체의 글만 탐독하다가 괴테로 넘어온지 며칠 째.</p>
<p>괴테는 따뜻하게 느껴진다.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/pWi6KixQs9sp7o3LKKUwRZ0xEyA/0/da"><img src="http://feedads.g.doubleclick.net/~a/pWi6KixQs9sp7o3LKKUwRZ0xEyA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/pWi6KixQs9sp7o3LKKUwRZ0xEyA/1/da"><img src="http://feedads.g.doubleclick.net/~a/pWi6KixQs9sp7o3LKKUwRZ0xEyA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/xrath/jQtG/~4/Q1VsIPuOUGs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://xrath.com/2009/06/%ec%8b%9c%eb%8a%94-%ea%b1%b8%ec%9e%91%ec%9d%b4-%ec%95%84%eb%8b%90-%eb%b0%94%ec%97%90%eb%8a%94-%ec%95%84%ec%98%88-%ec%a1%b4%ec%9e%ac%ed%95%98%ec%a7%80%eb%a5%bc-%eb%a7%90%ec%95%84%ec%95%bc-%ed%95%b4/feed/</wfw:commentRss>
		<feedburner:origLink>http://xrath.com/2009/06/%ec%8b%9c%eb%8a%94-%ea%b1%b8%ec%9e%91%ec%9d%b4-%ec%95%84%eb%8b%90-%eb%b0%94%ec%97%90%eb%8a%94-%ec%95%84%ec%98%88-%ec%a1%b4%ec%9e%ac%ed%95%98%ec%a7%80%eb%a5%bc-%eb%a7%90%ec%95%84%ec%95%bc-%ed%95%b4/</feedburner:origLink></item>
		<item>
		<title>피아노 연습 :: Kuhlau Sonatine Op.55-1, Op-20.1</title>
		<link>http://feedproxy.google.com/~r/xrath/jQtG/~3/8upLRjw9Pfo/</link>
		<comments>http://xrath.com/2009/06/kuhlau-sonatine-plays/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 09:30:19 +0000</pubDate>
		<dc:creator>rath</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<category><![CDATA[Piano]]></category>

		<category><![CDATA[kuhlau]]></category>

		<category><![CDATA[sonatine]]></category>

		<guid isPermaLink="false">http://xrath.com/?p=685</guid>
		<description><![CDATA[즐거운 피아노 연습 영상으로 안부 메시지 올립니다. 진행중이던 프로젝트의 끝자락이 보여서  Xacti로 녹화해봤습니다.
그런데 머리를 안감았네요.. -_-;
소나티네 앨범 7번 Kuhlau Op.55-1



소나티네 앨범 10번 Kuhlau Op.20-1



디지털 피아노의 장점을 살려 audio in/out 케이블로 녹음하여 깔끔한 소리를 제공하면 더 좋겠지만, UCC 기분을 잘 표현하기 위해 계속 디캠으로만 찍습니다. 헤헤.
]]></description>
			<content:encoded><![CDATA[<p>즐거운 피아노 연습 영상으로 안부 메시지 올립니다. 진행중이던 프로젝트의 끝자락이 보여서  Xacti로 녹화해봤습니다.</p>
<p>그런데 머리를 안감았네요.. -_-;</p>
<p><strong>소나티네 앨범 7번 Kuhlau Op.55-1</strong></p>
<p>
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/rnZkBggrI1o&#038;hl=ko&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/rnZkBggrI1o&#038;hl=ko&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</p>
<p><strong>소나티네 앨범 10번 Kuhlau Op.20-1</strong></p>
<p>
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/ORw5nhVsHEc&#038;hl=ko&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ORw5nhVsHEc&#038;hl=ko&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</p>
<p>디지털 피아노의 장점을 살려 audio in/out 케이블로 녹음하여 깔끔한 소리를 제공하면 더 좋겠지만, UCC 기분을 잘 표현하기 위해 계속 디캠으로만 찍습니다. 헤헤.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/HiCLF-Z4rECRwj-lM-keonKus4I/0/da"><img src="http://feedads.g.doubleclick.net/~a/HiCLF-Z4rECRwj-lM-keonKus4I/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/HiCLF-Z4rECRwj-lM-keonKus4I/1/da"><img src="http://feedads.g.doubleclick.net/~a/HiCLF-Z4rECRwj-lM-keonKus4I/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/xrath/jQtG/~4/8upLRjw9Pfo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://xrath.com/2009/06/kuhlau-sonatine-plays/feed/</wfw:commentRss>
		<feedburner:origLink>http://xrath.com/2009/06/kuhlau-sonatine-plays/</feedburner:origLink></item>
		<item>
		<title>탐욕스러운 설계자 이야기</title>
		<link>http://feedproxy.google.com/~r/xrath/jQtG/~3/JQDiVLj5raM/</link>
		<comments>http://xrath.com/2009/06/%ed%83%90%ec%9a%95%ec%8a%a4%eb%9f%ac%ec%9a%b4-%ec%84%a4%ea%b3%84%ec%9e%90-%ec%9d%b4%ec%95%bc%ea%b8%b0/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 18:37:04 +0000</pubDate>
		<dc:creator>rath</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Life]]></category>

		<category><![CDATA[architect]]></category>

		<guid isPermaLink="false">http://xrath.com/?p=683</guid>
		<description><![CDATA[어느 나라에 설계자가 한 명 살고 있었다. 그는 대단히 탐욕스러웠다. 그는 따로 시간을 쪼개어 설계하기를 좋아하지 않았다. 그래서 고객과 요구사항 미팅을 할 때 머리속에서 바로 바로 설계하기를 즐겼다. 
이 방법은 몇가지 면에서 대단히 효율적인 방법이었다. 요구사항 미팅이 끝나면 머리속에 설계안이 완성되기 때문에 미팅이 끝나자마자 바로 코딩으로 돌입할 수 있는 장점도 있고, on the fly로 설계를 하기 [...]]]></description>
			<content:encoded><![CDATA[<p>어느 나라에 설계자가 한 명 살고 있었다. 그는 대단히 탐욕스러웠다. 그는 따로 시간을 쪼개어 설계하기를 좋아하지 않았다. 그래서 고객과 요구사항 미팅을 할 때 머리속에서 바로 바로 설계하기를 즐겼다. </p>
<p>이 방법은 몇가지 면에서 대단히 효율적인 방법이었다. 요구사항 미팅이 끝나면 머리속에 설계안이 완성되기 때문에 미팅이 끝나자마자 바로 코딩으로 돌입할 수 있는 장점도 있고, on the fly로 설계를 하기 때문에 첫 미팅 자리에서 효과적인 질문을 꺼내놓을 수 있기 때문이다. 게다가 후 설계작업을 위한 생동감 넘치는 문서를 작성할 필요가 없었다. 그저 기억이 왜곡되는 것을 방지하는 메모 정도면 충분하기 때문이다. </p>
<p>그런데 이 방법에는 몇가지 단점이 있다. </p>
<p>첫째, <strong>그는</strong> 바로 바로 설계를 <strong>해야하기</strong> 때문에, 요청사항을 듣고 바로 설계를 할 수 없을 경우 &#8216;고민하는&#8217; 표정이 고객에게 노출된다. 고객은 이 자가 바로바로 설계하기 때문에 표정이 일그러졌다고 생각하지 않는다. 오해를 양산한다. </p>
<p>두번째, 고객이 말한 어떠한 항목이 자신의 캐퍼에 속하기는 하지만 고객이 세부사항을 지정하지 않았고, 각 세부사항에 따라 설계안이 꽤나 바뀔 경우 이 설계자는 고객에게 세부사항을 요구하고 싶어진다. 그래서 종종 미팅 자리에서 세부사항을 고객에게 묻곤 하는데, 고객이 당황스러워하지 않을 수 없다. 때로는 고객의 자존심이 쎈 바람에 세부항목에 대한 답변을 미루지 않고 그 자리에서 답해주는 경우도 있다. 이러한 답변은 충분한 사고과정을 거치지 않았기 때문에 정확도가 산으로 갈 수 밖에 없다. 고객이 완벽하리라는 상상을 했으니. </p>
<p>세번째, 설계자 본인의 model pool이 확장되기 어렵다. 대화 중 incremental로 model pool에서 select를 하고, 데이터가 존재하지 않을 경우 자신이 가진 model 중 가장 근접한 것을 선정하여 요구사항을 자신의 model에 맞춰가기 위해 고객과 협상을 시도할 경향이 높기 때문이다. 위험한 점은 이미 잘 써오던 model 을 끄집어내서 협상을 시도하기 때문에 고객이 넘어갈 확률이 높다는 것이다. 결국 이 설계자가 자신의 model pool을 확장하려면 스스로가 정한 별도의 훈련 기간을 거쳐야만 한다. 왠지 부자연스럽다.  </p>
<p> </p>
<p>철저히 소비 위주의 설계자라 할 수 있겠다. 큰 소비에는 큰 생산이 뒤따른다. 자연스러움을 잃은 행동을 일삼는 그는 고수준의 자기관리가 뒷받쳐지지 않는한 쉽게 지칠 것이다.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/CYswH1tpgiRvVoyzF6TClTB3PTw/0/da"><img src="http://feedads.g.doubleclick.net/~a/CYswH1tpgiRvVoyzF6TClTB3PTw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CYswH1tpgiRvVoyzF6TClTB3PTw/1/da"><img src="http://feedads.g.doubleclick.net/~a/CYswH1tpgiRvVoyzF6TClTB3PTw/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/xrath/jQtG/~4/JQDiVLj5raM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://xrath.com/2009/06/%ed%83%90%ec%9a%95%ec%8a%a4%eb%9f%ac%ec%9a%b4-%ec%84%a4%ea%b3%84%ec%9e%90-%ec%9d%b4%ec%95%bc%ea%b8%b0/feed/</wfw:commentRss>
		<feedburner:origLink>http://xrath.com/2009/06/%ed%83%90%ec%9a%95%ec%8a%a4%eb%9f%ac%ec%9a%b4-%ec%84%a4%ea%b3%84%ec%9e%90-%ec%9d%b4%ec%95%bc%ea%b8%b0/</feedburner:origLink></item>
		<item>
		<title>Software Creativity 2.0</title>
		<link>http://feedproxy.google.com/~r/xrath/jQtG/~3/cziid5BjwBM/</link>
		<comments>http://xrath.com/2009/06/software-creativity-20/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 12:25:29 +0000</pubDate>
		<dc:creator>rath</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://xrath.com/?p=682</guid>
		<description><![CDATA[그날 그날 기분에 따라 쉽게 환호하고 쉽게 무시하기도 하는 성격이긴 하지만,
Software Creativity 2.0

아휴 버릴 게 없다. 버릴 게 없어. 
Effective Java 1판 이후로 이렇게 임팩트 넘치는 책을 읽어본 적이 없다. 
저자의 의도를 떠나서, 이 책을 읽다보면 여러가지 side effect (긍정적인) 도 얻을 수 있다. 내가 얻은 가장 큰 이점은 이 책의 내용들 중 일부분이 내가 프로그래밍할 때 [...]]]></description>
			<content:encoded><![CDATA[<p>그날 그날 기분에 따라 쉽게 환호하고 쉽게 무시하기도 하는 성격이긴 하지만,</p>
<p>Software Creativity 2.0<br />
<a href="http://www.yes24.com/24/goods/3406730" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.yes24.com');"><img src="http://image.yes24.com/goods/3406730/L" alt="Software Creativity 2.0" /></a></p>
<p>아휴 버릴 게 없다. 버릴 게 없어. </p>
<p>Effective Java 1판 이후로 이렇게 임팩트 넘치는 책을 읽어본 적이 없다. </p>
<p>저자의 의도를 떠나서, 이 책을 읽다보면 여러가지 side effect (긍정적인) 도 얻을 수 있다. 내가 얻은 가장 큰 이점은 이 책의 내용들 중 일부분이 내가 프로그래밍할 때 피하지 못하고 견뎌내기만 해야했었던 많은 부정적인 느낌들을 말끔하게 패치해줬다는 데에 있다. </p>
<p>이렇게 진지한 측면을 포함하고 있으면서도, 책을 읽는 중간중간 웃고 울고.. </p>
<p>이 책을 구매토록 인도해주신 <a href="http://me2day.net/geekinside/2009/05/22#10:56:08" onclick="javascript:pageTracker._trackPageview('/outbound/article/me2day.net');">gEEkInsIdE님의 포스팅</a>에게 무한한 감사를. </p>
<p> </p>
<p>인용구 몇개 건질 수 있지 않을까 하며 이 포스트를 여신 분들을 위해 레퍼런스 아티클 몇개와 인용구 몇개를 준비한다. </p>
<blockquote><p> <a href="http://www.codinghorror.com/blog/archives/000584.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.codinghorror.com');">비자아적 프로그래밍 (ego-less programming) 십계명</a></p>
<p> 우수한 설계자는 하향식이 아니라 편의적으로 설계한다 하지만 설계자가 아닌 사람은 설계 과정에서 창의적이고 편의적으로 넘나드는 사고의 흐름을 이해하지 못한다. 그래서 우리는 설계를 하향식으로 위조해서 기술한다. 문서를 읽는 사람에게 설계를 이해시키는 유일한 방법이기 때문이다. </p>
<p> 문제는 고 파루틴 문제가 있고 저 파루틴 문제가 있다. 해법은 고 파루틴 해법이 잇고 저 파루틴 해법이 있다. 사람은 고 파루틴 사람이 있고 저 파루틴 사람이 있다. 마지막으로, 프로젝트도 고 파루틴 프로젝트가 있고 저 파루틴 프로젝트가 있다. </p>
<p>&#8220;내 말은 정형주의가 우리의 가능성을 제한한다는 뜻이다. 우리는 정형 기법을 넘어서 조직 안에서 그리고 소프트웨어 설계 안에서 서로 소통하는 방법을 익혀야 한다. 불분명하고, 부정확하고, 정형화가 불가능한 접근 방식, 즉 우리가 일상적으로 활용하는 접근 방식에 관심을 기울일 때가 왔다.&#8221; </p>
<p><a href="http://www.skmurphy.com/blog/2008/07/30/better-is-the-enemy-of-good-enough/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.skmurphy.com');">Better Is The Enemy of the Good Enough</a></p>
<p>흔히 복잡성과 모호성을 능숙하게 처리하는 인물은 약자로 여겨지는 반면 흑백논리를 강하게 펼치는 인물은 강자로 여겨진다는 사실이 흥미롭다고 테트락은 지적한다. 물론 그는 오히려 반대라고 주장한다. </p>
<p>내가 아는 한 프로젝트가 성공하는 방법은 단 하나다. 능력 있는 팀장과 팀원을 확보해서 문제를 정확히 이해하게 만든다. 문제를 명세할 필요는 없다. 별도로 시나리오를 작성할 필요도 없다. 문제를 해결할 당사자들이 요구사항을 정확히 이해하면 그만이다. - Frosch 1969 </p>
<p>다시 말하겠다. 중요하니 집중하기 바란다. 상위 CASE 도구 대다수는 <strong>표현 활동을 도와주는 도구</strong>일 뿐 표현을 생성하는 지적 활동을 도와주는 도구가 아니다. 두 가지는 전혀 다른 활동이다. 하나는 문제를 이해하고 설계를 수행하는 활동으로, 상당히 지적이다. 다른 하나는 도표를 그리고 명세와 설계를 저장하는 활동으로, 대체로 사무적이다. </p>
<p>학계 사람들에게는 흥미를 추구하는 태도가 윤리다. 업계 사람들에게는 유용성을 추구하는 태도가 윤리다. </p>
<p>그리스인은 작성할 문서를 최소로 줄이고, 로마인은 최대로 늘이며, 야만인은 문서를 안 만든다는 사실에 자부심을 느낀다. </p></blockquote>
<p>흡족하다.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/oT_4er-fYA5Ov_q_S0-lbOjiUnk/0/da"><img src="http://feedads.g.doubleclick.net/~a/oT_4er-fYA5Ov_q_S0-lbOjiUnk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/oT_4er-fYA5Ov_q_S0-lbOjiUnk/1/da"><img src="http://feedads.g.doubleclick.net/~a/oT_4er-fYA5Ov_q_S0-lbOjiUnk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/xrath/jQtG/~4/cziid5BjwBM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://xrath.com/2009/06/software-creativity-20/feed/</wfw:commentRss>
		<feedburner:origLink>http://xrath.com/2009/06/software-creativity-20/</feedburner:origLink></item>
		<item>
		<title>귀찮을 땐 reflection이 제 맛</title>
		<link>http://feedproxy.google.com/~r/xrath/jQtG/~3/BialgeLsZwQ/</link>
		<comments>http://xrath.com/2009/05/%ea%b7%80%ec%b0%ae%ec%9d%84-%eb%95%90-reflection%ec%9d%b4-%ec%a0%9c-%eb%a7%9b/#comments</comments>
		<pubDate>Thu, 28 May 2009 10:28:50 +0000</pubDate>
		<dc:creator>rath</dc:creator>
		
		<category><![CDATA[Daily]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[reflection]]></category>

		<category><![CDATA[swing]]></category>

		<guid isPermaLink="false">http://xrath.com/2009/05/%ea%b7%80%ec%b0%ae%ec%9d%84-%eb%95%90-reflection%ec%9d%b4-%ec%a0%9c-%eb%a7%9b/</guid>
		<description><![CDATA[
아무리 IDE가 좋아졌다할지라도 라디오 버튼, 체크 박스, 콤보 박스, 텍스트 필드가 적절히 섞여 30여개의 입력 필드가 한 화면에 펼쳐져 있다면.. 유쾌하지 않다.
여기에 한 필드라도 고쳐지면 &#8216;Save&#8217; 버튼이 활성화되어야 하고 그렇지 않다면 비활성화 되어야 한다는 요구가 들어온다면?

부들부들.
리플렉션의 이름으로 그대를 처단하겠다.


&#160;1 
&#160;2 &#160;&#160;private&#160;void&#160;installModifyListeners()&#160;{
&#160;3 &#160;&#160;&#160;&#160;ActionListener al = new&#160;ActionListener()&#160;{
&#160;4 &#160;&#160;&#160;&#160;&#160;&#160;@Override
&#160;5 &#160;&#160;&#160;&#160;&#160;&#160;public&#160;void&#160;actionPerformed(ActionEvent e)&#160;{
&#160;6 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fireModified(&#34;various buttons&#34;);
&#160;7 &#160;&#160;&#160;&#160;&#160;&#160;} 
&#160;8 &#160;&#160;&#160;&#160;};
&#160;9 &#160;&#160;&#160;&#160;KeyListener kl = [...]]]></description>
			<content:encoded><![CDATA[<div class="xhtmlEditorBody">
<p>아무리 IDE가 좋아졌다할지라도 라디오 버튼, 체크 박스, 콤보 박스, 텍스트 필드가 적절히 섞여 30여개의 입력 필드가 한 화면에 펼쳐져 있다면.. 유쾌하지 않다.</p>
<p>여기에 한 필드라도 고쳐지면 &#8216;Save&#8217; 버튼이 활성화되어야 하고 그렇지 않다면 비활성화 되어야 한다는 요구가 들어온다면?</p>
<p><img class="attachment" title="htm_20040809011613070000070100-001.jpg" src="http://rath.springnote.com/pages/3501057/attachments/1644023" alt="htm_20040809011613070000070100-001.jpg" /></p>
<p>부들부들.</p>
<p>리플렉션의 이름으로 그대를 처단하겠다.</p>
<div style="background-color: #000; color: #fff">
<font face="monospace"><br />
<font color="#00ffff">&nbsp;1 </font><br />
<font color="#00ffff">&nbsp;2 </font>&nbsp;&nbsp;<font color="#00ff00">private</font>&nbsp;<font color="#00ff00">void</font>&nbsp;installModifyListeners()&nbsp;{<br />
<font color="#00ffff">&nbsp;3 </font>&nbsp;&nbsp;&nbsp;&nbsp;ActionListener al = <font color="#00ffff">new</font>&nbsp;ActionListener()&nbsp;{<br />
<font color="#00ffff">&nbsp;4 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">@Override</font><br />
<font color="#00ffff">&nbsp;5 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ff00">public</font>&nbsp;<font color="#00ff00">void</font>&nbsp;actionPerformed(ActionEvent e)&nbsp;{<br />
<font color="#00ffff">&nbsp;6 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fireModified(<font color="#ff40ff">&quot;various buttons&quot;</font>);<br />
<font color="#00ffff">&nbsp;7 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<font color="#00ffff">&nbsp;8 </font>&nbsp;&nbsp;&nbsp;&nbsp;};<br />
<font color="#00ffff">&nbsp;9 </font>&nbsp;&nbsp;&nbsp;&nbsp;KeyListener kl = <font color="#00ffff">new</font>&nbsp;KeyAdapter()&nbsp;{<br />
<font color="#00ffff">10 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060">@Override</font><br />
<font color="#00ffff">11 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ff00">public</font>&nbsp;<font color="#00ff00">void</font>&nbsp;keyReleased(KeyEvent e)&nbsp;{ <br />
<font color="#00ffff">12 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fireModified(<font color="#ff40ff">&quot;various fields&quot;</font>);<br />
<font color="#00ffff">13 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<font color="#00ffff">14 </font>&nbsp;&nbsp;&nbsp;&nbsp;};<br />
<font color="#00ffff">15 </font>&nbsp;&nbsp;&nbsp;&nbsp;<br />
<font color="#00ffff">16 </font>&nbsp;&nbsp;&nbsp;&nbsp;Field[]&nbsp;fields = <font color="#00ff00">this</font>.getClass().getDeclaredFields();<br />
<font color="#00ffff">17 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">for</font>(Field f : fields)&nbsp;{ <br />
<font color="#00ffff">18 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">try</font>&nbsp;{<br />
<font color="#00ffff">19 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object o = f.get(<font color="#00ff00">this</font>);<br />
<font color="#00ffff">20 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">if</font>(&nbsp;o <font color="#00ffff">instanceof</font>&nbsp;JComponent )&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<font color="#00ffff">21 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">try</font>&nbsp;{<br />
<font color="#00ffff">22 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method m = o.getClass().getMethod(<font color="#ff40ff">&quot;addActionListener&quot;</font>, ActionListener.<font color="#00ff00">class</font>);<br />
<font color="#00ffff">23 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">if</font>(&nbsp;m!=<font color="#ff40ff">null</font>&nbsp;)&nbsp;{ <br />
<font color="#00ffff">24 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.invoke(o, al);<br />
<font color="#00ffff">25 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">continue</font>;<br />
<font color="#00ffff">26 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<font color="#00ffff">27 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<font color="#00ffff">28 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <font color="#00ffff">catch</font>(&nbsp;NoSuchMethodException e )&nbsp;{}<br />
<font color="#00ffff">29 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<font color="#00ffff">30 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<font color="#00ffff">31 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">if</font>(&nbsp;o <font color="#00ffff">instanceof</font>&nbsp;JTextComponent )&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<font color="#00ffff">32 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">try</font>&nbsp;{<br />
<font color="#00ffff">33 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method m = o.getClass().getMethod(<font color="#ff40ff">&quot;addKeyListener&quot;</font>, KeyListener.<font color="#00ff00">class</font>);<br />
<font color="#00ffff">34 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">if</font>(&nbsp;m!=<font color="#ff40ff">null</font>&nbsp;)&nbsp;<br />
<font color="#00ffff">35 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.invoke(o, kl);<br />
<font color="#00ffff">36 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <font color="#00ffff">catch</font>(&nbsp;NoSuchMethodException e )&nbsp;{}<br />
<font color="#00ffff">37 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<font color="#00ffff">38 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <font color="#00ffff">catch</font>&nbsp;(Exception e)&nbsp;{<br />
<font color="#00ffff">39 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(e);<br />
<font color="#00ffff">40 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<font color="#00ffff">41 </font>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<font color="#00ffff">42 </font>&nbsp;&nbsp;}<br />
</font>
</div>
<p style="text-align:right; margin-top: 12px;">이 글은 <a href="http://rath.springnote.com/pages/3501057" onclick="javascript:pageTracker._trackPageview('/outbound/article/rath.springnote.com');">스프링노트</a>에서 작성되고 살짝 고쳐졌습니다.</p>
</div>

<p><a href="http://feedads.g.doubleclick.net/~a/fzEfMGWXm8fyW-5B8ymNPDiKRhc/0/da"><img src="http://feedads.g.doubleclick.net/~a/fzEfMGWXm8fyW-5B8ymNPDiKRhc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/fzEfMGWXm8fyW-5B8ymNPDiKRhc/1/da"><img src="http://feedads.g.doubleclick.net/~a/fzEfMGWXm8fyW-5B8ymNPDiKRhc/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/xrath/jQtG/~4/BialgeLsZwQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://xrath.com/2009/05/%ea%b7%80%ec%b0%ae%ec%9d%84-%eb%95%90-reflection%ec%9d%b4-%ec%a0%9c-%eb%a7%9b/feed/</wfw:commentRss>
		<feedburner:origLink>http://xrath.com/2009/05/%ea%b7%80%ec%b0%ae%ec%9d%84-%eb%95%90-reflection%ec%9d%b4-%ec%a0%9c-%eb%a7%9b/</feedburner:origLink></item>
		<item>
		<title>코딩이 잘 되던 상황을 기억할 수 있는가</title>
		<link>http://feedproxy.google.com/~r/xrath/jQtG/~3/y0omAQxnMHw/</link>
		<comments>http://xrath.com/2009/05/%ec%bd%94%eb%94%a9%ec%9d%b4-%ec%9e%98-%eb%90%98%eb%8d%98-%ec%83%81%ed%99%a9%ec%9d%84-%ea%b8%b0%ec%96%b5%ed%95%a0-%ec%88%98-%ec%9e%88%eb%8a%94%ea%b0%80/#comments</comments>
		<pubDate>Sat, 23 May 2009 08:29:45 +0000</pubDate>
		<dc:creator>rath</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://xrath.com/2009/05/%ec%bd%94%eb%94%a9%ec%9d%b4-%ec%9e%98-%eb%90%98%eb%8d%98-%ec%83%81%ed%99%a9%ec%9d%84-%ea%b8%b0%ec%96%b5%ed%95%a0-%ec%88%98-%ec%9e%88%eb%8a%94%ea%b0%80/</guid>
		<description><![CDATA[
코딩을 하고 있다는 것은, 프로젝트의 신경써야만 하는 수많은 이슈들을 잠시 가방에 넣어두고 한순간에 하나씩 집중하여 달리는 것을 말한다. 적어도 내게 코딩하고 있다는 것은 그런 것을 의미한다. 한번에 하나에 집중. 나머지 사항들은 머리속에 있지만 주의력은 전혀 할당되지 않는 그런 상태.
기술 관련 서적을 보거나, 자기관리 책을 보거나, 책들은 &#8216;좋은 책&#8217;이라는 뱃지도 받아야하기 때문에 한 우물만 파는 경우가 [...]]]></description>
			<content:encoded><![CDATA[<div class="xhtmlEditorBody">
<p><strong>코딩을 하고 있다</strong>는 것은, 프로젝트의 신경써야만 하는 수많은 이슈들을 잠시 가방에 넣어두고 한순간에 하나씩 집중하여 달리는 것을 말한다. 적어도 내게 코딩하고 있다는 것은 그런 것을 의미한다. 한번에 하나에 집중. 나머지 사항들은 머리속에 있지만 주의력은 전혀 할당되지 않는 그런 상태.</p>
<p>기술 관련 서적을 보거나, 자기관리 책을 보거나, 책들은 &#8216;좋은 책&#8217;이라는 뱃지도 받아야하기 때문에 한 우물만 파는 경우가 별로 없다. 그래서 양서를 보거나 기사를 보면 주의력의 범위가 아-주 넓어진다. 마치 완벽하지 못하지만 열등감에 휩쌓인 완벽주의자처럼. (이라고 쓰고 산만해진다고 읽는다)</p>
<p>그래서 코딩을 하려고 딱 앉으면,</p>
<p>자각하고 있던 모든 것들을 버려야 하기 때문에 (파울로 코엘료의 소설에 나온 열정은 과거에 속하는 모든 것들을 파괴해버린다 가 생각나기도) 코딩에 제대로 몰두하기 어려워진다.</p>
<p>나의 경우 집중이 아주 잘되어, 흔히 &#8216;Flow&#8217; 상태에 빠지게 된 경우를 생각해보면 다음과 같다.</p>
<ul>
<li>몸이 아플 때 (여러가지 &#8216;하면 좋은 것들&#8217;에게 신경을 쓸 여력이 없다)</li>
<li>코딩해야하는 어떤 기술이 잘 안풀려서 화가 아주 많이 나 있을 때 (코딩에 집중하도록 마음이 알아서 움직여준다)</li>
<li>코딩해야하는 그 대상이 재미있을 때 (와이프랑 노는 것이 더 재미있다)</li>
<li>안하면 안될 때 (안하면 안된다는 긴장감이, 신경써야하는 다른 모든 것들을 잊게 해준다. 왜, 긴장하면 평소에 잘 하는 것들도 다 까먹지 않는가!)</li>
</ul>
<p>코딩은 너무 마이크로 하다.</p>
<p>그렇기 때문에 쉬운 개발 언어들이 속속 등장하는게 아닐까 싶다. 마이크로한 곳에 오래 집중하고 있으면 개인 생활이 제대로 돌아갈리 없으니까.</p>
<p>그런데 실력이 미천한 탓인지, 아무리 프로그래밍 언어가 센스있고 API가 잘 설계되어있고 학습 코스트가 0에 가깝자 할지라도, 코딩은 코딩이다. 신경을 써야 한다. 관심과 관리가 없으면 말라죽는 화초처럼, 신경쓰지 않으면 시름시름 앓다가 죽어버린다.</p>
<p>그래서 나의 선택은 코딩 작업을 좀 더 추상적으로 만들기보다는, 마이크로와 매크로 레벨을 넘나들 수 있는 인간이 되는 것이였다. 쉽지 않다. 마이크로 해지면 성질도 더러워지고&#8230; 매크로 해지면 자잘한 버그들도 못잡고.. 확장성이나 유연성도 고려하지 못하고..</p>
<p>그럼 결국 나는 열정을 가지고 코딩을 한다는 얘긴데, 이것 상당히 위험한 일이 아닐 수 없다. 열정이 있을 때는, 그것이 없는 사람과는 비교할 수 없을 정도로 좋은 퍼포먼스를 내주겠지만, 만약 상황이 좋지 않아 마이크로 레벨로 돌입할 수 없다면 일 진행을 거의 못하기 때문.</p>
<p>분명히 마이크로 레벨에서 하던 일들을 &#8216;정보화&#8217; 시켜서 매크로 레벨의 인간인 나에게 자습시킬 수도 있을텐데,</p>
<p>이상하게도 나의 국어실력이 부족해서인지, 마이크로 레벨 상태에서 내가 발산하는 메시지들을 매크로 레벨의 내게 전달할 방도를 찾지 못하고 있다. 분명히 이 둘은 다른 사람이다. 이 두 종단간의 메시징은 어떻게 처리해야 하는 것일까.</p>
<p>SOAP? -_-</p>
<p style="text-align:right">이 글은 <a href="http://rath.springnote.com/pages/3442057" onclick="javascript:pageTracker._trackPageview('/outbound/article/rath.springnote.com');">스프링노트</a>에서 작성되었습니다.</p>
</div>

<p><a href="http://feedads.g.doubleclick.net/~a/eruxlrn6yzPcJLdVwjR3MrIgjPY/0/da"><img src="http://feedads.g.doubleclick.net/~a/eruxlrn6yzPcJLdVwjR3MrIgjPY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/eruxlrn6yzPcJLdVwjR3MrIgjPY/1/da"><img src="http://feedads.g.doubleclick.net/~a/eruxlrn6yzPcJLdVwjR3MrIgjPY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/xrath/jQtG/~4/y0omAQxnMHw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://xrath.com/2009/05/%ec%bd%94%eb%94%a9%ec%9d%b4-%ec%9e%98-%eb%90%98%eb%8d%98-%ec%83%81%ed%99%a9%ec%9d%84-%ea%b8%b0%ec%96%b5%ed%95%a0-%ec%88%98-%ec%9e%88%eb%8a%94%ea%b0%80/feed/</wfw:commentRss>
		<feedburner:origLink>http://xrath.com/2009/05/%ec%bd%94%eb%94%a9%ec%9d%b4-%ec%9e%98-%eb%90%98%eb%8d%98-%ec%83%81%ed%99%a9%ec%9d%84-%ea%b8%b0%ec%96%b5%ed%95%a0-%ec%88%98-%ec%9e%88%eb%8a%94%ea%b0%80/</feedburner:origLink></item>
		<item>
		<title>성장에 대한 단상</title>
		<link>http://feedproxy.google.com/~r/xrath/jQtG/~3/ksYZTitf9Ic/</link>
		<comments>http://xrath.com/2009/05/%ec%84%b1%ec%9e%a5%ec%97%90-%eb%8c%80%ed%95%9c-%eb%8b%a8%ec%83%81/#comments</comments>
		<pubDate>Fri, 15 May 2009 18:02:24 +0000</pubDate>
		<dc:creator>rath</dc:creator>
		
		<category><![CDATA[Life]]></category>

		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://xrath.com/2009/05/%ec%84%b1%ec%9e%a5%ec%97%90-%eb%8c%80%ed%95%9c-%eb%8b%a8%ec%83%81/</guid>
		<description><![CDATA[과연 사람이 매일 매일 조금씩 성장해 나가는 것일까? 적어도 나는 아닌듯 하다.
 나름 퇴행이 아니라 이것이 진정 성숙하고 지혜로워진 것이라고, 실수를 통해 Not TODO 목록을 만든 것이라며 자위했을 뿐이다. 
요즘 무언가에 열중하다보면 묘한 기시감을 느끼게 된다. 발전하고 성장한 짜릿한 기분인데도 불구하고, 언젠가 느껴본.
16년전에 이뤘던 것을 되찾고, 8년전에 깨달은 것들. 
종합평가를 한다면 그동안 헛짓했음이 발각된 사건일뿐이겠지만, [...]]]></description>
			<content:encoded><![CDATA[<p>과연 사람이 매일 매일 조금씩 성장해 나가는 것일까? 적어도 나는 아닌듯 하다.</p>
<p> 나름 퇴행이 아니라 이것이 진정 성숙하고 지혜로워진 것이라고, 실수를 통해 Not TODO 목록을 만든 것이라며 자위했을 뿐이다. </p>
<p>요즘 무언가에 열중하다보면 묘한 기시감을 느끼게 된다. 발전하고 성장한 짜릿한 기분인데도 불구하고, 언젠가 느껴본.<br />
16년전에 이뤘던 것을 되찾고, 8년전에 깨달은 것들. </p>
<p>종합평가를 한다면 그동안 헛짓했음이 발각된 사건일뿐이겠지만, 나는 잠시 분열하여 스스로를 평가하는 사람이기 이전에 현재를 살아가고있는 사람이라 기분이 좋다. </p>
<p>다시 비평가로 변신해보면,<br />
개개인의 인생에 정답따위 없는데 뭐그리 호들갑. </p>

<p><a href="http://feedads.g.doubleclick.net/~a/f4c5QHDVEzQfQUI4W2NM4NWyUYw/0/da"><img src="http://feedads.g.doubleclick.net/~a/f4c5QHDVEzQfQUI4W2NM4NWyUYw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/f4c5QHDVEzQfQUI4W2NM4NWyUYw/1/da"><img src="http://feedads.g.doubleclick.net/~a/f4c5QHDVEzQfQUI4W2NM4NWyUYw/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/xrath/jQtG/~4/ksYZTitf9Ic" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://xrath.com/2009/05/%ec%84%b1%ec%9e%a5%ec%97%90-%eb%8c%80%ed%95%9c-%eb%8b%a8%ec%83%81/feed/</wfw:commentRss>
		<feedburner:origLink>http://xrath.com/2009/05/%ec%84%b1%ec%9e%a5%ec%97%90-%eb%8c%80%ed%95%9c-%eb%8b%a8%ec%83%81/</feedburner:origLink></item>
		<item>
		<title>이클립스로 리팩토링 하다가 문득</title>
		<link>http://feedproxy.google.com/~r/xrath/jQtG/~3/apGv5m8TLv4/</link>
		<comments>http://xrath.com/2009/05/%ec%9d%b4%ed%81%b4%eb%a6%bd%ec%8a%a4%eb%a1%9c-%eb%a6%ac%ed%8c%a9%ed%86%a0%eb%a7%81-%ed%95%98%eb%8b%a4%ea%b0%80-%eb%ac%b8%eb%93%9d/#comments</comments>
		<pubDate>Thu, 14 May 2009 19:12:07 +0000</pubDate>
		<dc:creator>rath</dc:creator>
		
		<category><![CDATA[Daily]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://xrath.com/2009/05/%ec%9d%b4%ed%81%b4%eb%a6%bd%ec%8a%a4%eb%a1%9c-%eb%a6%ac%ed%8c%a9%ed%86%a0%eb%a7%81-%ed%95%98%eb%8b%a4%ea%b0%80-%eb%ac%b8%eb%93%9d/</guid>
		<description><![CDATA[요즘 세상엔 리팩토링이나 설계를 바꾸는 일들조차 너무나 쉽기때문에 처음 코딩을 시작할 땐 구현에만 신경써도 된다. 
마치 영향력있는 누군가가 자신에게 &#8220;이런 기능 구현 가능한가요??&#8221; 라고 물었을 때 자존감을 올리기 위해 앞뒤 안보고 구현하는 아가 마인드를 떠올려보라. 
이런들 어떠하고 저런들 어떠하리. 
코드가 지저분해서 짜증이 올라오기 시작할 때부터 고쳐도 늦지 않다. 
개발 도중 동료나 상사가 코드를 보며 부정적 [...]]]></description>
			<content:encoded><![CDATA[<p>요즘 세상엔 리팩토링이나 설계를 바꾸는 일들조차 너무나 쉽기때문에 처음 코딩을 시작할 땐 구현에만 신경써도 된다. </p>
<p>마치 영향력있는 누군가가 자신에게 &#8220;이런 기능 구현 가능한가요??&#8221; 라고 물었을 때 자존감을 올리기 위해 앞뒤 안보고 구현하는 아가 마인드를 떠올려보라. </p>
<p>이런들 어떠하고 저런들 어떠하리. </p>
<p>코드가 지저분해서 짜증이 올라오기 시작할 때부터 고쳐도 늦지 않다. </p>
<p>개발 도중 동료나 상사가 코드를 보며 부정적 메시지를 가할 때면, &#8216;겉멋만 신나게 들었구만&#8217; 하며 비웃으면 땡. </p>

<p><a href="http://feedads.g.doubleclick.net/~a/2atDyatcFM2mtP_eECNtohERqAA/0/da"><img src="http://feedads.g.doubleclick.net/~a/2atDyatcFM2mtP_eECNtohERqAA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2atDyatcFM2mtP_eECNtohERqAA/1/da"><img src="http://feedads.g.doubleclick.net/~a/2atDyatcFM2mtP_eECNtohERqAA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/xrath/jQtG/~4/apGv5m8TLv4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://xrath.com/2009/05/%ec%9d%b4%ed%81%b4%eb%a6%bd%ec%8a%a4%eb%a1%9c-%eb%a6%ac%ed%8c%a9%ed%86%a0%eb%a7%81-%ed%95%98%eb%8b%a4%ea%b0%80-%eb%ac%b8%eb%93%9d/feed/</wfw:commentRss>
		<feedburner:origLink>http://xrath.com/2009/05/%ec%9d%b4%ed%81%b4%eb%a6%bd%ec%8a%a4%eb%a1%9c-%eb%a6%ac%ed%8c%a9%ed%86%a0%eb%a7%81-%ed%95%98%eb%8b%a4%ea%b0%80-%eb%ac%b8%eb%93%9d/</feedburner:origLink></item>
		<item>
		<title>Eclipse SWT &amp; JFace API 문서 합본</title>
		<link>http://feedproxy.google.com/~r/xrath/jQtG/~3/n35J0jgimHs/</link>
		<comments>http://xrath.com/2009/05/eclipse-swt-jface-api-documents/#comments</comments>
		<pubDate>Tue, 12 May 2009 18:02:47 +0000</pubDate>
		<dc:creator>rath</dc:creator>
		
		<category><![CDATA[Daily]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[javadoc]]></category>

		<category><![CDATA[swt]]></category>

		<guid isPermaLink="false">http://xrath.com/?p=676</guid>
		<description><![CDATA[몇해전 어느날, jmsn-swt를 만진 이후로 나로부터 버림받은 SWT.. 
 
프리랜서 프로젝트 하나를 진행중이라 swing질을 하고 있는데, 이녀석은 어떻게 된일인지 아직도 Generic 지원할 생각이 없다.  그나마 하나 찾은게 JTree 클래스에 있는 Enumeration&#60;TreePath&#62; getExpandedDescendants( TreePath ) 뿐이다. DefaultMutableTreeNode의 set/getUserObject 정도는 제네릭 지원해줘도 되는거 아닌가. 
그렇게  투덜거리다 미투데이에 투덜거리는 글을 올렸고, 친구들이 SWT/JFace로 넘어오라는 댓글들에 힘입어,
The Definitive Guide to SWT and JFace 
를 [...]]]></description>
			<content:encoded><![CDATA[<p>몇해전 어느날, <a href="http://jmsn.cvs.sourceforge.net/viewvc/jmsn/jmsn-swt/" onclick="javascript:pageTracker._trackPageview('/outbound/article/jmsn.cvs.sourceforge.net');">jmsn-swt</a>를 만진 이후로 나로부터 버림받은 SWT.. </p>
<p> </p>
<p>프리랜서 프로젝트 하나를 진행중이라 swing질을 하고 있는데, 이녀석은 어떻게 된일인지 아직도 Generic 지원할 생각이 없다.  그나마 하나 찾은게 JTree 클래스에 있는 <a href="http://xrath.com/javase/ko/6/docs/ko/api/javax/swing/JTree.html#getExpandedDescendants(javax.swing.tree.TreePath)" >Enumeration&lt;TreePath&gt; getExpandedDescendants( TreePath )</a> 뿐이다. DefaultMutableTreeNode의 set/getUserObject 정도는 제네릭 지원해줘도 되는거 아닌가. </p>
<p>그렇게  투덜거리다 <a href="http://me2day.net/rath/2009/05/07#11:13:15" onclick="javascript:pageTracker._trackPageview('/outbound/article/me2day.net');">미투데이에 투덜거리는 글</a>을 올렸고, 친구들이 SWT/JFace로 넘어오라는 댓글들에 힘입어,</p>
<p><a href="http://www.amazon.com/Definitive-Guide-SWT-JFACE/dp/1590593251/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1242149919&amp;sr=8-2" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.amazon.com');"><strong>The Definitive Guide to SWT and JFace</strong></a><strong> </strong></p>
<p>를 질렀습니다! (하지만 정작 SWT/JFace 에도 Generic 지원은 없음; )</p>
<p> </p>
<p>그런데 SWT 랑 JFace API 문서만 보려니 어딨는지 모르겠어서..</p>
<p>cvs -d :pserver:anonymous@dev.eclipse.org/cvsroot/eclipse co org.eclipse.jface <br />
cvs -d :pserver:anonymous@dev.eclipse.org/cvsroot/eclipse co org.eclipse.swt <br />
vim build.xml, &#8230; &lt;javadoc &#8230; excludepackagenames=&#8221;org.eclipse.swt.internal.*&#8221; &#8230; &gt;</p>
<p>한 곳으로 묶어봤습니다.</p>
<p> </p>
<p>이에 <a href="http://xrath.com/devdoc/swt-jface/index.html" >공유</a>합니다.</p>
<p>다운로드는 <a href="http://xrath.com/devdoc/swt-jface-javadoc-20090513.jar" >여기(4.8M)</a>서.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/hnmTb1H_TIgyc1BvhJXjcKc049Q/0/da"><img src="http://feedads.g.doubleclick.net/~a/hnmTb1H_TIgyc1BvhJXjcKc049Q/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/hnmTb1H_TIgyc1BvhJXjcKc049Q/1/da"><img src="http://feedads.g.doubleclick.net/~a/hnmTb1H_TIgyc1BvhJXjcKc049Q/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/xrath/jQtG/~4/n35J0jgimHs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://xrath.com/2009/05/eclipse-swt-jface-api-documents/feed/</wfw:commentRss>
		<feedburner:origLink>http://xrath.com/2009/05/eclipse-swt-jface-api-documents/</feedburner:origLink></item>
		<item>
		<title>Implementation Patterns 보다가</title>
		<link>http://feedproxy.google.com/~r/xrath/jQtG/~3/0RawKyYUF14/</link>
		<comments>http://xrath.com/2009/05/implementation-patterns/#comments</comments>
		<pubDate>Tue, 12 May 2009 02:01:54 +0000</pubDate>
		<dc:creator>rath</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[pattern]]></category>

		<guid isPermaLink="false">http://xrath.com/?p=675</guid>
		<description><![CDATA[Kent Beck이 쓴 Implementation Patterns을 보다가 
Cost(total) = Cost(develop) + Cost(maintain) 
Cost(maintain) = Cost(understand) + Cost(change) + Cost(test) + Cost(deploy)
마이크로 레벨로 생각해보게 됐다. 나는 initial development 주기에 change, test, deploy는 꽤 신경쓰는 편이지만, understand는 신경쓰지 않는다는 것을 깨달았다. 왜냐하면 코드를 작성하는 시점에서는 모조리 이해하고 있으니까.  
Learning what the current code does is the expensive [...]]]></description>
			<content:encoded><![CDATA[<p>Kent Beck이 쓴 <a href="http://www.amazon.com/Implementation-Patterns/dp/B000XPRRVM/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1242091955&#038;sr=8-2" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.amazon.com');">Implementation Patterns</a>을 보다가 </p>
<p>Cost(total) = Cost(develop) + Cost(maintain) </p>
<p>Cost(maintain) = Cost(understand) + Cost(change) + Cost(test) + Cost(deploy)</p>
<p>마이크로 레벨로 생각해보게 됐다. 나는 initial development 주기에 change, test, deploy는 꽤 신경쓰는 편이지만, understand는 신경쓰지 않는다는 것을 깨달았다. 왜냐하면 코드를 작성하는 시점에서는 모조리 이해하고 있으니까.  </p>
<blockquote><p><strong>Learning what the current code does is the expensive part.</strong>  (Location 627 [Kindle location])</p></blockquote>
<p>일단 이해를 하면 (여기에 코딩하던 순간의 context를 머리속에 로드하는 것까지 합쳐서) 고치고 고친 것을 테스트하고 (테스트도 딱히 신경쓰는 것은 아니지만) 배포하는 것은 쉬운 일이다. 하지만 understand context는 선행조건일 뿐이고. </p>
<p>내 코드를 보며 이해하는데 시간을 많이 쏟은 사람들에게 이 자리를 빌어 사과의 메시지를.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/zNOYuMWtM67SOy8SeiU6OEm5yGc/0/da"><img src="http://feedads.g.doubleclick.net/~a/zNOYuMWtM67SOy8SeiU6OEm5yGc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/zNOYuMWtM67SOy8SeiU6OEm5yGc/1/da"><img src="http://feedads.g.doubleclick.net/~a/zNOYuMWtM67SOy8SeiU6OEm5yGc/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/xrath/jQtG/~4/0RawKyYUF14" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://xrath.com/2009/05/implementation-patterns/feed/</wfw:commentRss>
		<feedburner:origLink>http://xrath.com/2009/05/implementation-patterns/</feedburner:origLink></item>
	</channel>
</rss>
