<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>달뜬 청춘</title>
	<link>http://uratang.egloos.com</link>
	<description>나는 낭만의 화신이다</description>
	<language>ko</language>
	<pubDate>Tue, 09 Jun 2009 08:15:56 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>달뜬 청춘</title>
		<url>http://pds17.egloos.com/logo/200908/20/11/d0024711.jpg</url>
		<link>http://uratang.egloos.com</link>
		<width>80</width>
		<height>105</height>
		<description>나는 낭만의 화신이다</description>
	</image>
  	<item>
		<title><![CDATA[ Eclipse 플러그인 개발 - Target Platform 설정 ]]> </title>
		<link>http://uratang.egloos.com/2341573</link>
		<guid>http://uratang.egloos.com/2341573</guid>
		<description>
			<![CDATA[ 
  <div class="xhtmlEditorBody"><p>&nbsp;개발 중인 플러그인을 확인하기 위해 실행(Run Eclipse Application) 하거나&nbsp; 디버그(Debug Eclipse Application)를 수행하면 현재 자신이 작업하고 있는 이클립스에 자신이 개발하는 플러그인이 설치된 형태로 실행이 된다.<br />
</p>일반적인 경우라면 상관 없지만,<br />
자신이 개발 중인 플러그인과, 현재 자신이 사용하는 플러그인 사이의 충돌 때문에 빌드가 안될 수 있고,<br />
배포해야 할 플러그인이 하위 버전의 이클립스에서 작동하도록 해야 할 경우 부득이 하위 버전의 이클립스를 써야 하는<br />
문제를 겪을 수 있다.<br />
<br />
이런 문제를 해결하기 위해 이클립스(RCP) 개발환경에서는 target platform을 설정하는 기능을 제공한다.(원래 있는 기능이지만, 따로 설정을 안하면 사용하는 이클립스가 target platform으로 설정된다.)<br />
Target platform을 설정하는 기능은 아래와 같다.<ol> <li>Window - Preference - Plug-in Development - Target Platform 화면으로 이동 한다.</li> <li>화면 상단의 Location에서 target platform으로 삼을 이클립스 경로를 설정한다.</li><li>OK를 누르면 자동으로 환경구성을 한다. <br />
</li></ol> <p style="margin-left: 2em;"><img alt=""><img style="width: 673px; height: 442px;" class="attachment" title="target_platform.JPG" src="http://uratang.springnote.com/pages/3547095/attachments/1686881" alt="target_platform.JPG"></p> <p>&nbsp;</p> <p><span style="color: rgb(139, 140, 255);"><strong>Tip.</strong></span></p>Target platform으로 이클립스 RCP 버전을 사용하는게 좋다. 소스코드와 JAVA DOC을 지원하기 때문인데,<br />
보통 이클립스에서 제공하는 RCP 패키지는 다른 유용한 플러그인들을 포함하지 않기 때문에 오히려 개발이 불편해진다.<br />
이 경우, RCP 패키지에 플러그인을 일일이 설치하기 보다는 자신이 사용하는 이클립스를 target platform으로 지정하고, 그 이클립스의 plugins 디렉토리에 RCP의 플러그인을 설치하는 게 편할 수 있다.(플러그인을 설치했다면, 위 그림의 Reload 버튼을 눌러 플러그인을 다시 로드한다.)<br />
<br />
일단 <strong>org.eclipse.platform.doc.isv_3.3.1.r331_v20070913.jar</strong> <span style="color: rgb(0, 121, 152);">(파일 이름 뒷부분은 버전에 따라 다를 수 있다.)</span> 파일만 설치해도 RCP에서 제공하는 클래스의 Javadoc을 볼 수 있다. <p>&nbsp;</p> </div><br/><br/>tag : <a href="/tag/RCP" rel="tag">RCP</a>,&nbsp;<a href="/tag/eclipseplugin" rel="tag">eclipseplugin</a>,&nbsp;<a href="/tag/이클립스플러그인" rel="tag">이클립스플러그인</a>,&nbsp;<a href="/tag/targetplatform" rel="tag">targetplatform</a>			 ]]> 
		</description>
		<category>my tails...</category>
		<category>RCP</category>
		<category>eclipseplugin</category>
		<category>이클립스플러그인</category>
		<category>targetplatform</category>

		<comments>http://uratang.egloos.com/2341573#comments</comments>
		<pubDate>Tue, 09 Jun 2009 07:35:42 GMT</pubDate>
		<dc:creator>uratang</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [퍼옴] 공돌/공순 애인 관리 방법  ]]> </title>
		<link>http://uratang.egloos.com/2211124</link>
		<guid>http://uratang.egloos.com/2211124</guid>
		<description>
			<![CDATA[ 
  재밌고 공감도 많이 되어서 퍼옴<br />
나에게 해당되지 않는 것도 있지만 대체적으로 이 매뉴얼대로만 해준다면 정말 갈등없이 행복하게 살 수 있을 것 같다.<br />
<br />
사실 대학 졸업 후 번듯한 직장에 다니며 안정적으로 살 수 있는 사람의 50% 이상은 공대 출신인데, 어쩌다 불쌍하고 답답한 사람들이라는 이미지가 형성된 것 같아서 안타깝다 ㅠ_ㅠ<br />
<br />
꼭 알아뒀으면 좋겠다. 당신이 만나는 정말 괜찮은 사람 둘 중 하나는 공대출신이다.<br />
이 매뉴얼이 어서 빨리 널리 퍼져야 할텐데.<br />
<br />
<br />
<font style="color: rgb(102, 51, 255);" size="4">공돌/공순 애인 관리 방법 </font><br />
<br />
<br />
1. 화나면 정확하게 왜 화 났는지 바로 말한다. 치사하다고 생각하지 않는다. 유치한 것 같아도 무조건 찬찬히 설명한다. 이왕이면 다음의 구조를 따르면 더 효과적이겠다: <br />
&nbsp;&nbsp; &nbsp;ㄱ) 화 난 상태 알림 <br />
&nbsp;&nbsp; &nbsp;ㄴ) 옆에 앉아서 왜 화 났는지 들어주기를 원하는지, 아니면 달래주기를 원하는지, 아니면 안 건드리기를 원하는지 선택하여 알림 <br />
&nbsp;&nbsp; &nbsp;ㄷ) 왜 화가 났는지를 설명하고, 화난 상태를 해결하기 위해서는 어떻게 해 주었으면 좋겠다도 설명 <br />
&nbsp;&nbsp; &nbsp;ㄹ) 원하는 행동 변경 사항이 있으면 그것 역시 알림. <br />
<br />
긴것 같지만 30초 내에 끝낼 수도 있다: "나 네가 내 기분 안 알아줘서 엄청 화 났어. 난 안 좋은 일 있어서 너랑 같이 있고싶었는데 넌 친구들이랑 놀러 갔잖아. 그래서 너랑 말 하고 싶지 않아. 그러니까 한 시간 있다가 내 기분 풀 수 있는 방법생각해서 내 기분 풀어줬으면 좋겠어. 그리고 앞으로 내가 정말 기분 안 좋다고 하면 이왕이면 나를 더 우선 순위로 해줬으면좋겠어." <br />
<br />
화 났다는 거 알아주겠지 하면 큰일난다. 화 났다는 거 말 안하고 무시 모드로 들어가도 안 통한다.성질만 내고 왜 성질 났는지 말 안 해도 별 효과 없다. '사랑하면 그 정도는 알겠지' 해도 안 된다. 그리고 최고로 효과 없는말은 '날 사랑하면서 어떻게 그럴 수가 있어?', 그 다음은 '네가 뭘 잘못했는지도 몰라!!?' 이다. 말 안 했는데 어떻게아는가. 외계인 데리고 살면서 교육시킨다 생각하삼. 설명만 잘 해주면 곧잘 듣는다. <br />
&nbsp;<br />
2. 애인님이 '네 말그건 틀렸다고 생각해'라고 하는 건, '이 원피스는 빨간색이야', 혹은 '하늘은 파란색이야'와 그리 다르지 않다. 당신이멍청하다고 말하는게 아니라 방금 한 말이 틀렸다고 보고한 것이다. 인신공격이라고 생각하지 말자. 만약 무조건 내 편을 들어주기를바란다면 이야기 하기 전에 먼저 부탁한다. '나 지금부터 내 친구랑 싸운 얘기 할 텐데, 네가 생각하기에 내가 오버했다고생각들더라도 최소한 오늘 만큼은 무조건 내 편 들어줘야 돼.' 정도로. 아니면 룰을 정해도 되겠다. 둘만 있을 때에는 몰라도다른 사람 있을 때에 '그건 비논리적이다/말 안 된다'고 따지지 말라고. <br />
<br />
3. 다리 긴 사람 있고 다리 짧은사람 있다. 다른 사람과 교류가 많이 필요한 사람 있고 안 그런 사람이 있다. 아무리 사랑하고 좋아하고 하지만 공대생들은평균적으로 '타인과의 관계 지향 지수'가 낮으므로 전화, 메세지 등을 귀찮아 할 수가 있다. 사랑하지 않아서가 아니라, 일하는데 방해받기 싫어서이다. '이제 사람들과 어울리는 모드'로 모드 전환 해야 말도 많아지고 사회적이 되는 공대생들 많다.그렇다고 해서 사랑 안 하는 거 아니다. <br />
<br />
4. xy 축이 있는 그래프에서 가로로 쭉 뻗은 선을 그려보자. 바로그것이 공대생이 생각하는 '사귐/관계'이다. 서로 감정을 확인하고 사귀기로 되었으면 쭉 그렇게 나가면 되는 거다. 딱히 특별한일이 없으면 감정불변이다. 그런데 그 선이 갑자기 아래로 뚝 떨어지면 (당신이 화를 낸다던지) 공대생은 '앗 사고가 일어났구나원인을 알아내어 시정해야지'라고 생각한다. 그래서 왜 화났는지 물어보고, 뭘 어떻게 해 줄까한 다음에 '하루에 전화 두 번/비싼 선물' 정도의 해결책을 받아내어 그 해결책대로 하면 다시 예전의 이상적인 연애선으로 돌아갈 거라 생각한다. 아무런 변화가없으면 예전 그대로이다. 계속 사랑하는 거다. 고장 안 난 기계 고칠 필요 없지 않은가. 그러므로 공대생에게는 '성공적인 관계지속을 위해서는 주기적인 점검 및 업그레이드가 필요'하다고 공지하는 것이 좋다. 그러면 공대생은 '점검 및 업그레이드' 요소도포함시킨다.<br />
<br />
5. 부하를 견디고 견디다가 툭 부러지는 타입이 많다. 신경질/짜증 잘 받아준다고 해서 이 남자 날사랑하는구나 믿지 말자. 어느 정도 한계에 닿을 때까지 늘 잘 해주던 그 남자, 어느날 툭, 하면서 더 이상 널 보지 않겠다고하면 그건 완전 끝난 거다. 매 번 받아 줄 때마다 그 남자는 사랑하니까 뭐든지 받아들일 수 있다 맹세한게 아니라, 계산을했다고 보면 된다. '나 이거 견딜 수 있다? 오케. 좋아하는 마음이 크다. 넘어가자.' 그러나 그런 계산이 반복되면서 부하가심해지고, 그러던 어느날 좋아하는 마음은 부하를 감당하지 못하게 된다. 딱 거기까지가 한계라 생각했던 남자이므로 맺고 끊는 거확실하다. 절대로 만만하게 생각하지 말자.<br />
<br />
6. 피드백을 해주자. 잘 한다고 칭찬하면 기억해서 꼭 다시 한다. 마음에 안 드는 건 마음 안 상할 정도로 꼭꼭 지적하면 시정된다. 잘 이용하자. <br />
<br />
7. 장난감 값 (차, 카메라, 컴퓨터, 스포츠, 그 외 덕후 액티비티) 이 꽤 지출될 수 있다. 이거 적당히 관리해주지 않으면 집안 살림 거덜낼 수 있다. <br />
<br />
결론: 처음에 익숙해지기가 힘들지만, 공대 애인은 보통 훈련시키는 보람이 있다. 당신의 요구사항을 납득 시킬수만 있으면 그들은군소리 없이 잘 따라오는 편이고, 감정적으로 안정적이며 쉽게 변하지 않는다. 그러므로 감정적으로 저렴하며 (...) 튜닝 가능한남자를 원한다면 공대생 애인을 강력하게 추천한다. 남편감으로는 정말 나쁘지 않다. 성실한 편이고, 친구들과 어울리거나 회식이다뭐다 해서 사람들과 늦게까지 술마시는 타입도 다른 분야보다 덜하고, 도박이나 바람 대신 장난감만 좀 마련해주면 집에서 조용히논다. 그러나 당신이 정확하게 뭘 원하는지 모른다거나, 싫은 소리를 못한다거나, 이래저래 해달라는 부탁은 치사해서 하기 싫고,남자가 알아서 해주길 원한다거나, 안정적인 관계는 재미 없다거나, 사랑의 증표를 끊임없이 원한다거나, 죽어도 다른 사람들휘어잡은 칼수마 남을 원한다 하면 ... 공대생은 보통 비추다;<br />
<br />
<br />
출처: http://theonion.egloos.com/4537590<br />
			 ]]> 
		</description>

		<comments>http://uratang.egloos.com/2211124#comments</comments>
		<pubDate>Thu, 22 Jan 2009 01:52:04 GMT</pubDate>
		<dc:creator>uratang</dc:creator>
	</item>
	<item>
		<title><![CDATA[ GWT-Ext 개발 기초 ]]> </title>
		<link>http://uratang.egloos.com/2136671</link>
		<guid>http://uratang.egloos.com/2136671</guid>
		<description>
			<![CDATA[ 
  <div class="xhtmlEditorBody"><p>GWT 1.6이 나오면서 프로젝트 구조와 embeded Java Servlet (Jetty) server가 달라졌다.</p> <p>게다가 Google에서 GWT를 위한 플러그인을 제공하므로 Cypal Studio를 사용할 필요가 없어졌으므로</p><p>Google 플러그인을 활용한 방법으로 수정한다.<br />
</p> <p>참고: <a href="http://paulgrenyer.blogspot.com/2009/04/setting-up-gwt-ext-for-gwt-16-with.html">http://paulgrenyer.blogspot.com/2009/04/setting-up-gwt-ext-for-gwt-16-with.html</a></p> <p>&nbsp;</p> <h6 style="text-decoration: underline;"><font size="2">GWT - Google Web Toolkit(<a href="http://code.google.com/webtoolkit/" title="http://code.google.com/webtoolkit/" class="external">http://code.google.com/webtoolkit/</a>)</font></h6> <ul><li>복잡한 AJAX 애플리케이션 개발을 손쉽게 해주는 프레임워크이다.</li><li>JAVA 코드로 작성하고 GWT 컴파일러가 자바코드를 자바스크립트로 변환한다. 모든 자바코드를 변환할 수 있는 것은 아니고, java.util, java.io 패키지의 기능들만 사용할 수 있다.</li><li> <p>구동되는 환경은 hosted mode와 web mode가 있다.</p> <ul><li>hosted mode: 컴파일 과정 없이 작성한 코드를 테스트하고 디버깅 할 수 있다. JVM환경의 GWT 브라우저에서 구동된다.</li><li>web mode: 컴파일러가 자바스크립트와 HTML파일을 생성하고, 이것을 웹브라우저로 구동한다.</li></ul> </li></ul> <p>&nbsp;</p><h6 style="text-decoration: underline;"><font size="2">GWT-Ext - GWT-Ext Widget Library(<a href="http://gwt-ext.com/">http://gwt-ext.com</a>)</font></h6> <ul><li>강력하고 화려한 위젯 라이브러리. GWT와 자바스크립트 라이브러리 EXT(<a href="http://extjs.com/" class="external" title="http://extjs.com/">http://extjs.com/</a>)를 활용하였다. <a href="http://extjs.com/" class="external" title="http://extjs.com/">http://extjs.com/</a>에서 소개되는 Ext-GWT와는 다르다. <br />
</li></ul>  <h6 style="font-weight: bold; text-decoration: underline;"><br />
</h6><h6 style="font-weight: bold; text-decoration: underline;"><font size="2">GWT-Ext with Eclipse</font></h6> <p>참고: <a href="http://code.google.com/eclipse/docs/getting_started.html">http://code.google.com/eclipse/docs/getting_started.html</a></p>  <ul><li>Eclipse plugin 설치<br />
 <code>Europa(3.3):</code> <code>http://dl.google.com/eclipse/plugin/3.3</code><code>Ganymede(3.4):</code> <code>http://dl.google.com/eclipse/plugin/3.4</code></li><li>이클립스 메뉴에서 File -&gt; New -&gt; Web Application Project 선택</li><li>프로젝트와 패키지 이름을 넣고, Use Google App Engine 체크박스를 해제한다.</li><li>Run As -&gt; Run Configurations에서 Automatically Select Unused Port의 체크박스를 체크한다.</li><li>여기까지는 일반적인 GWT 애플리케이션의 실행 방법이다.</li><li> <p>다음 라이브러리를 다운로드 한다.</p> <ul><li>GWT-Ext(<a href="http://gwt-ext.com/download/" class="external" title="http://gwt-ext.com/download/">http://gwt-ext.com/download/</a>)<br />
 <code>압축을 풀어 gwtext.jar</code>파일을 <code>프로젝트의 war\WEB-INF\lib</code> 디렉토리에 넣는다.</li><li>war 디렉토리 아래에 js 디렉토리를 만든다.</li><li>Ext(<a href="http://gwt-ext.com/download/">http://gwt-ext.com/download/</a>)&nbsp;여기 링크에서 화면 아래쪽의 Ext 2.0.2 here의 here를 클릭해서 다운받는다.<br />
 압축을 풀어&nbsp;<code>js 디렉토리에 넣는다.</code>(디렉토리 2개 파일 4개만 하면 된다. (adapter/, resources/, ext-all.js, ext-all-debug.js, ext-core.js, ext-core-debug.js))<br />
 (디렉토리가 이런 구조가 되도록 주의 <span style="color: rgb(255, 1, 3);">js/ext-2.0.2/resources/...</span>)</li></ul> </li><li>프로젝트에 <code>gwtext.jar를 추가한다.<br />
 프로젝트를 우클릭한 후,</code> Properties -&gt; Java Build Path -&gt; Libraries에서 Add JARs를 클릭한 다음 방금 넣었던 gwtext.jar를 선택한다.</li><li>oo(프로젝트 이름).gwt.xml 파일에 아래 굵은글씨 부분을 추가한다.<br />
<span style="color: rgb(102, 51, 255);">&lt;inherits name='com.google.gwt.user.User'/&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&lt;inherits name='com.gwtext.GwtExt' /&gt; ...</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&lt;entry-point class='com.megadeth.client.MegaDeth'/&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&lt;stylesheet src="../js/ext-2.0.2/resources/css/ext-all.css" /&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&lt;script src="../js/ext-2.0.2/adapter/ext/ext-base.js" /&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&lt;script src="../js/ext-2.0.2/ext-all.js" /&gt; </span><br />
 </li><li> <p>oo.client 패키지의 모듈 파일의 일부를 아래와 같이 수정한다.<br />
<span style="color: rgb(102, 51, 255);">public void onModuleLoad(){</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp; Panel mainPanel = new Panel();</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp; mainPanel.setTitle("Hello World!");</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp; mainPanel.setHeight(300);</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp; mainPanel.setWidth(500);&nbsp;&nbsp; </span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp; RootPanel.get().add(mainPanel);</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">}</span><br />
</p></li><li> <p>war 디렉토리 아래의 html파일의 아래 부분을 삭제한다.<br />
 <span style="color: rgb(102, 51, 255);">&lt;h1&gt;Web Application Starter Project&lt;/h1&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&lt;table align="center"&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp; &lt;tr&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &lt;td colspan="2" style="font-weight:bold;"&gt;Please enter your name:&lt;/td&gt; </span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp; &lt;/tr&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp; &lt;tr&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &lt;td id="nameFieldContainer"&gt;&lt;/td&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &lt;td id="sendButtonContainer"&gt;&lt;/td&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp; &lt;/tr&gt;</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&lt;/table&gt;</span><br />
 </p></li><li>플러그인이 제공하는 Run As Web Application을 실행해 보면 작동하는 화면이 보인다.</li><li> <p>리모트 서비스를 만들어 본다. oo.client 패키지의 모듈 파일을 아래와 같이 수정한다.<br />
&nbsp;&nbsp; <span style="color: rgb(102, 51, 255);">private Label label = new Label("Today is: ");</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp; private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);"> &nbsp;&nbsp;&nbsp; public void onModuleLoad() {</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Button button = new Button("Get Date");</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Panel panel = new Panel();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; button.addListener(new ButtonListenerAdapter(){</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void onClick(Button button, EventObject e) {</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; greetingService.getDate(new NumberCallback());</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; });&nbsp;&nbsp;&nbsp; &nbsp; </span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; panel.add(label);</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; panel.add(button);</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RootPanel.get().add(panel);</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; }</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; public class NumberCallback implements AsyncCallback {</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void onFailure(Throwable error) {</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.alert("Getting date failed");</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void onSuccess(Object resp) {</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label.setText("Today is: " + resp.toString());</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;&nbsp;&nbsp; }</span></p></li><li> </li><li>GreetingService에 다음 코드를 추가한다.<br />
<span style="color: rgb(102, 51, 255);">String getDate();</span> </li></ul><ul><li>GreetingServiceAsync에 다음 코드를 추가한다.<br />
<span style="color: rgb(102, 51, 255);">void getDate(AsyncCallback&lt;String&gt; numberCallback);</span> </li></ul> <ul><li>GreetingServiceImpl에 다음 코드를 추가한다.<br />
<span style="color: rgb(102, 51, 255);">public String getDate() {</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);"> &nbsp;&nbsp;&nbsp;&nbsp; Date date = new Date();</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);"> &nbsp;&nbsp;&nbsp;&nbsp; date.setTime(System.currentTimeMillis());</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);"> &nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat sDate = new SimpleDateFormat("MM월 dd일 HH시 mm분 ss초");</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);"> &nbsp;&nbsp;&nbsp;&nbsp; return sDate.format(date);</span><br style="color: rgb(102, 51, 255);"><span style="color: rgb(102, 51, 255);">&nbsp;}</span></li></ul> <ul><li>Cypal studio는 OO.gwt.xml, web.xml 파일을 수정하고, RemoteService와 Async파일의 메소드를 자동으로 맞춰주는 기능이 있다.<br />
 그 외에는 Google 플러그인과 큰 기능차이가 없다.</li></ul>  <p>&nbsp;</p>  <p> </p> <p> </p> <p style="text-align: right;">이 글은 <a href="http://uratang.springnote.com/">스프링노트</a>에서 작성되었습니다.</p></div>			 ]]> 
		</description>
		<category>my tails...</category>

		<comments>http://uratang.egloos.com/2136671#comments</comments>
		<pubDate>Fri, 14 Nov 2008 05:12:24 GMT</pubDate>
		<dc:creator>uratang</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 별미 읽기 ]]> </title>
		<link>http://uratang.egloos.com/2114477</link>
		<guid>http://uratang.egloos.com/2114477</guid>
		<description>
			<![CDATA[ 
  <p><br />
</p><p>책을 좋아하고 실제로도 많이 읽는 편이지만, 편식이 워낙에 심해서 취미가 독서라고 함부로 말하지는 않는다.<br />
</p><p>한번도 먹어보지 않은 음식처럼 손이 안 간 달까? 그러다 한번 맛을 보고 맛있으면 열렬히 좋아라하지만.<br />
</p><p>주로 읽는 소설과&nbsp;전산을 전공한 덕에 읽는 것들 외에 별미로 접한 책이 훌륭했을 때는 꽁돈 생긴 것 마냥 기쁘다.<br />
</p><p><br />
</p><p>그 별미 중에 별미를 꼽는다면 두권정도 추천할 게 있다. 그것도 <span style="background-color: rgb(220, 176, 251);">수학</span>과 <span style="background-color: rgb(255, 204, 102);">물리</span>에 관한 것.<br />
</p><p>가뜩이나 학창시절 수학과 물리 때문에 고생을 했는데, 수학과 물리에 관한 책을 읽을 줄은 몰랐다.<br />
</p><p>더욱이 그 책들을 읽고 로또 맞은 것 만큼 기뻐할 줄은 더욱 몰랐고.<br />
</p><p><br />
</p><p><font size="3" color="#009865"><b>엘러건트 유니버스</b></font><br />
</p><p>상대성이론, 양자역학, 초끈이론.<br />
</p><p>보기만해도 체할 것 같은 이름들이지만, 저자는 너무도 쉽고 훌륭하게 설명해준다. 정말 과학적 배경지식이 없어도 저것들을 이해할 수 있다.<br />
</p><p>   컴퓨터 로그인도 못하는 사람에게 Dependency Injection을 설명하는 것보다 쇼킹하지만 이 책의 저자는 너무도 쉽게 설명해주는 놀라운 능력을 발휘한다.<br />
</p><p>퓰리처 상도 받을 뻔했고 새 대통령에게 추천하는 책으로 선정되기도 했다.<br />
</p><p><br />
</p><p><font color="#016798"><b><font size="3">페르마의 마지막 정리</font></b></font><br />
</p><p>수학 역사상 최악의 난제인 '페르마의 마지막 정리'는 350년동안 수학자들을 괴롭히다가 지난 1994년 앤드류 와일즈라는 수학자에 의해 마침내 증명된다.<br />
</p><p>수학의 역사를 되짚어 가며 피타고라스, 유클리드, 가우스등의 천재적인 수학자 이야기를 곁들이면서, 페르마의 마지막 정리가 증명되는 과정을 재밌게 그려냈다.<br />
</p><p>수학 때문에 고교시절을 불우하게 보낸 나같았던 학생들에게 진작에 손발 묶어놓고 읽게 한다면 아마 인생이 좀 밝아지지 않을까 생각된다.<br />
</p><p><br />
</p><p>세상에 교양수학, 교양물리 같은게 어딨어! 라고 생각하지만 이 책들이 그 자리를 대신한다면 충분히 수긍할 수 있다.<br />
</p><p>그래서인지, '시간의 역사', '우주의 구조', '쉬레딩거의 고양이' 같은        책에도 부담없이 관심을 갖고 있다.<br />
</p>			 ]]> 
		</description>
		<category>Book</category>

		<comments>http://uratang.egloos.com/2114477#comments</comments>
		<pubDate>Mon, 27 Oct 2008 13:47:37 GMT</pubDate>
		<dc:creator>uratang</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Pet peeve ]]> </title>
		<link>http://uratang.egloos.com/2112160</link>
		<guid>http://uratang.egloos.com/2112160</guid>
		<description>
			<![CDATA[ 
  <p><a href="http://en.wikipedia.org/wiki/Pet_peeve" class="external" title="http://en.wikipedia.org/wiki/Pet_peeve">Pet peeve</a></p><p>사람마다 유독 싫어하는 행동이나 상황이 있다. 다른 사람에게는 아무렇지도 않지만 본인에게는 미쳐버릴 만큼 자신을 괴롭히는 타인의 행동이나 상황을 pet peeve라고 한다.</p><p>남들이 보기에는 정말 아무렇지도 않은 것들 때문에 불같이 화를 내는 사람들을 본 적이 있을 것이다. 가운데부터 함부로 짜여진치약에 분노하는 사람도 있고, 깜빡이를 켜지 않고 끼어드는 차를 볼 때마다 미쳐버리는 사람도 있다. 남편이 변기 뚜껑을 올리지않은 채로 소변을 보는 것은 대부분 아내들의 pet peeve이다. 아무리 신선같고 천사같은 사람이라도 이마의 힘줄을 튀어나오게하는 것들이 한두가지 이상은 있다.<br />
</p><p><br />
</p><p style="text-align: left;"><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds12.egloos.com/pds/200810/26/11/d0024711_49033c42dc7a5.jpg" width="500" height="301" onclick="Control.Modal.openDialog(this, event, 'http://pds12.egloos.com/pds/200810/26/11/d0024711_49033c42dc7a5.jpg');" /></div></p><p style="text-align: center;"><b><font style="" size="1">http://www.gnurf.net/v3/illustration-friday/illustration-friday-pet-peeve.html</font></b><br />
</p><p><br />
</p><p>우리말엔 딱히 표현하는게 없어서 일반적이지 않은 것 같지만 지칭하는 말만 없을 뿐 우리는 pet peeve를 일상에서 자주 표현하고 있다.</p><p>"나는 다른 건 다 참아도 OOO하는 것은 정말 못참아"</p><p>라며 자신의 pet peeve를 표현하고</p><p>"OO씨는 정말 좋은 사람인데, 유독 OO만 보면 걸고 넘어져."</p><p>이렇게 다른 사람의 pet peeve를 인지한다.</p><p><br />
</p><p>사람이라는 것이 완전한 존재가 아니라서 그런지 우리는 자신과 타인의 pet peeve에 대해 모순적인 행동을 저지르곤 한다.</p><p><font style="" color="#0000fe">"지나가는 사람을 붙잡고 얘기해봐, 이게 그렇게 화낼 일인가?"</font></p><p>라며 객관적인 판단에 호소하다가도</p><p><font style="" color="#fe3498">"난 원래 이렇게 생겨먹었어. 나를 나대로 인정해야 하는거 아냐? 나를 있는 그대로 이해 못해?"</font></p><p>라며 감정에 호소하기도 한다.</p><p><br />
</p><p>놓치기 쉬운 인간관계의 맥이 여기에 있구나 하는 생각이 든다.</p><p><font style="" color="#7106a4"><b>누구나 한두가지 pet peeve가 있다면,</b></font></p><p><font style="" color="#7106a4"><b>상대의 그것을 재빨리 파악하거나, 인정해 줘야 서로를 이해하는데 도움이 되지 않을까?</b></font></p><p>물론 자신의 pet peeve 때문에 상대를 곤혹스럽게 해서는 안될테고.</p><p><br />
</p><p>나에게도 pet peeve가 한가지 있다.(의식하지 못하는 것이 더 있을 수 있지만.) 내가 유독 싫어하는 것은 시간약속이 안지켜지는 상황이다.</p><p>언제 만나기로 했는데 상대가 특별한 이유 없이 늦을 경우, 그리고 <font style="" color="#5a5a5a">그 상대가 친할 수록</font> 마음속의 분노가 타오른다. 내성적이고 소심한 성격이라 대부분 표현을 잘 못하고 마음속의 상대방에 대한 평가를 사정없이 깎아버린다. 형편없는 놈... 하고.</p><p>그렇다고 나는 시간약속을 100% 잘 지키느냐 하면 아니다.</p><p>친할수록 더해지는 것은, 어쩌면 상대방이 내가 기다리는 것쯤은 아무렇지도 않은 일로 여긴다는 서운함 때문일지도 모른다.</p><p>누구라도 소중하게 대해지고 싶을 테니까.</p><p><br />
</p><p>이런 나의 pet peeve 때문에, 멀어져간 사람들이 있지 않을까 하는 생각을 해 보았다.</p><p>갑자기 멀어진 사람들, 시나브로 서먹해진 사람들, 내 사소한 습관이 그들의 pet peeve를 자극했거나, 내 안의 pet peeve 때문에 스스로 거리를 두었을지 모른다.</p><p><br />
</p><p>희생과 사랑이 없다면 가장 어려운 과제가 관계(Relationship)가 아닐까? 하지만 희생과 사랑 역시 어려운 과제이다.</p><p><br />
</p><p><br />
</p><br />
(얼마전부터 받아보는 Life is love를 읽다가 pet peeve가 뭔지 처음 알게 되었다. <a href="http://lifeislove.kr/LILY/20318">http://lifeislove.kr/LILY/20318</a>)<br />
<br />
			 ]]> 
		</description>

		<comments>http://uratang.egloos.com/2112160#comments</comments>
		<pubDate>Sat, 25 Oct 2008 15:43:16 GMT</pubDate>
		<dc:creator>uratang</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 내 그림자 ]]> </title>
		<link>http://uratang.egloos.com/2061459</link>
		<guid>http://uratang.egloos.com/2061459</guid>
		<description>
			<![CDATA[ 
  <div style="text-align: left;"><font style="font-weight: bold;" size="4">&lt;내 그림자&gt;</font><br />
<br />
</div><br />
&nbsp; 도대체가 더 이상 앞으로 걸음을 옮길 수가 없다. 미션을 수행하지 못해 더 이상 진행을 못하는 게임 속 주인공처럼, 분명히 길이 있는데 통 나아갈 수가 없는 것이다. 가슴으로 보이지 않는 벽을 밀면서 소용없이 발만 뒤로 끌다가 지쳐 주저 앉아 버렸다. 귀신이 곡할 노릇이네. 그러다 바로 이유를 알게 되었다. 그림자가. 내 그림자가 버티고서 길을 막고 있었다. 그림자 주제에, 고작 내 뒤에 숨어 다니는 주제에 어디 주인의 길을 막는 거냐. 나는 짐짓 옛날 이야기 속 고을 사또처럼 그림자를 야단쳤다. 그러자 그림자가 울음을 터뜨렸다. 내가 좀 심했나 하는 생각이 들었다. 정말, 그림자가 곡할 노릇이네.<br />
<br />
&nbsp; 물론 꿈이었다. 세상에 어느 그림자가 주인의 길을 막겠는가. 하고 생각은 했지만 괜히 내 그림자를 한 번 더 내려봤다. 나는 그만큼 재수가 없다. 그림자도 의심해 볼만큼. 애써 행운을 쫓지 않을 뿐이라고, 몇 번, 스스로 위로를 해봤지만 역시, 말도 안되는 소리다. 물론 이런 생각을 안해보는 것은 아니다. 트루먼 쇼처럼, 이건 역사상 유래가 없는 블록버스터 몰래카메라야. 어느 날, 눈가에 주름이 많은 사회자가 박수를 치면서 내게 다가오고, 숨겨있던 카메라 위치를 손가락으로 가리키며 지금까지 몰래카메라였습니다. 하고 말해주겠지. 어머어머 어우야. 하면서 사회자에게 애교 섞인 원망을 하며 다시 원래 생활로 돌아가는 거야. 하지만 딱히 떠오르는 ‘원래 생활’도 없으므로, 이것도 통과.<br />
<br />
&nbsp; 차가 막히지 않아 학교에 일찍 와버렸다. 이럴 때가 난처하다. 어디 숨어서 시간을 떼워야 하나. 시간에 맞춰 구석에 앉으려면 강의실도 강의시간에 맞춰 들어가야 한다. 문소리를 내며 늦게 들어가도 주목을 받게 되므로 실패. 내가 ‘아싸’라고 불리는 걸 알고 있다. ‘아웃사이더’의 약자라기엔 좀 횡재수 느낌이 든다는게 나와는 안 어울리지만, 뭐 어쨌든. 나를 제대로 알아봐주는 사람이 있어 고마울 따름이다. 아웃사이더라는게 학교에 있어도 사람들과 전혀 어울리지 않고 숨어 다니는 족속들을 가리키는 말이지만, 나는 조금 다르다고 말하고 싶다. 나는 자발적이고, 또 이 생활을 즐기는 타입이니까. 언젠가는 전 지구를 스스로 왕따시켜 보겠다는 포부도 갖고 있다.<br />
<br />
&nbsp; 학교잠행을 무사히 마치고 집으로 돌아왔다. 엄마가 가방을 받아준다. 엄마. 이사람 때문에 전 지구인 왕따시키기가 아직도 성공을 못하고 있다. 학교는 잘 다녀왔니. 누구나 평생 이만번쯤은 듣는 말이 아닐까. 세상의 모든 엄마들은 다녀오겠습니다를 그만큼 들었겠지. 넌 무슨 애가 매일같이 날 밝을 때 들어오냐. 친구들 좀 만나고, 친구들 좀 집에 데려오고 그래. 역시 이래서, 관록은 무시 못한다. 에이 엄마 설마 친구 하나 없을까봐. 안 그래도 지금 만나러 나가요. 오래 있으면 거짓말이 서툴러져서 서둘러 집에서 나왔다. PC방에서 시간이나 떼우다 와야지. 아직 엄마는 강적이니까.<br />
<br />
&nbsp; 내 말이 틀림없어. 강남 아파트값 폭등의 배후엔 일본이 있어. 걔들이 옛날부터 음흉한 데가 있었잖아. 요즘 자꾸 지네 물건보다 앞지르는 상품들 생기고 그러니까, 이게 다 흔들기야. 흔들기. 이 사람이 또 음모론을 하나 만들었구나. 봉근이 형은 내가 PC방에 들어갈 때 이미 와 있고, 나올 때도 여전히 있는 PC방 우수고객이다. 나이는 나보다 다섯 살은 많아 보이는데, 하는 일은 없어 보인다. 청년 실업이 70만이란다. 취업대란이라구. 되레 큰소리로 말은 하지만 내가 보기엔 그 70만중에 하나라서 안도하고 있는 것 같다. 하긴 어딜 가나 이렇게 묻어가는 사람이 있지만.<br />
&nbsp; 어쨌든 오랜만에 왔다며 반기더니 쏟아내는 말은 역시 음모론이다. 자칭 우리나라에서 세번째로 큰 음모론 인터넷 카페의 운영자이고, 프리메이슨, 지구공동설, UFO전문가이다. 2002년 한일 월드컵, 온 나라가 열광의 도가니일 때, 4강신화는 국세청의 음모라고 떠들어대다 실직했다는 소문도 있다.<br />
&nbsp; 내가 전에 말했던 거 생각해봤어? 내가 아무리 생각해봐도 너만한 적임자가 없다. 구국의 동맹이야 이건. 무자헤딘이라고 알아? 우리가 하려는 게 그거라구.<br />
&nbsp; 무자헤딘은 무슨. 행동으로 옮길 의지도 깡도 없으면서 범죄구상은 잘한다. 이야기인 즉슨 담배 수송 트럭을 털자는 거다. 현금 수송 트럭보다는 경비가 덜하면서도 요즘 담뱃값이 올라 소득이 크다는 게 이유다. 겉으로는 금연 캠페인과 담배판매를 동시에 하는 모순적인 정부에 경종을 울림과 동시에 담배를 서민들의 생존을 위협하는 무리의 상징으로 삼아 응징을 가하자는 거창한 명분을 내세우고 있지만, 내가 보기엔 장기실업으로 담뱃값이 부담스러워지니까 쓸 데 없이 저런 공상이나 하는 것뿐이다.<br />
&nbsp; 봉근이 형, 형이 매일 그렇게 스타크래프트만 해대는 건 게임회사를 움직인 미행정부의 음모 아냐? 어쩜 그렇게 질리지도 않고 허구헌날 스타크래프트냐? 이참에 프로게이머 하는 게 어때?<br />
&nbsp; 이 사람이! 또 모르네. e스포츠는 미국의 음모에 대한 대한민국 선지자들의 대항마라고. 인터넷 시대를 내다보고, 대한민국이 필연적으로 인터넷 강국이 되도록 만든 보이지 않는 영웅들의 작품이야. 내가 전에도 말했지만…<br />
&nbsp; 전에도 들은 걸 또 듣게 될 까봐 말을 끊고 게임이나 하자고 했다. 이 사람이 한 번 말을 시작하면 눈앞에 말풍선들이 차올라 포화상태가 되어버려, 소음보다도 숨이 막혀 죽을지도 모른다는 생각이 든다. <br />
질식사는 왠지 끔찍하다는 생각이 들어 나는 눈앞의 말풍선들을 퐁퐁 터뜨렸다.<br />
<br />
&nbsp; 같이 온라인 게임이나 하자는 봉근이 형을 뿌리치고 혼자 앉아 인터넷 창을 열었다. PC방을 자주 찾지만 게임은 하지 않는다. 어느 날 덜컥, 갑자기 내가 죽기라도 하면 인터넷 뉴스에 조그마한 기사가 뜨겠지<br />
<br />
&nbsp;# 왕따 학교부적응 게임중독 대학생. 게임 중 돌연사.<br />
<br />
&nbsp; 아직 강적으로 남아있는 엄마에게 아들이 왕따에, 학교부적응에, 게임중독 삼관왕을 차지했었다고 기억하게 하고 싶지는 않다. 거기다 기사에 달린 찌질이 네티즌들의 댓글들로 내가 얼마나 한심했는지 확인하게 해주고 싶지도 않다. 왕따나 학교부적응으로 죽는 사람은 없으니까. 또 그냥 오래 살고 싶기도 하다. 아버지가 못 이룬 꿈을 아들이 이뤄야 할 테니까.<br />
<br />
&nbsp; 아, 아버지. 그 양반처럼 냉면가닥마냥 가늘고 길게 살 사람도 없을 줄 알았는데, 가늘긴 했다만 아쉽게도 짧게 가버렸다. 사망원인은 좀처럼 보기 힘든 경우였다. 그렇다고 무슨 희귀병은 아니고, 희대의 연쇄살인마의 손에 당한 일곱번째 희생자였다. 로또 당첨보다 힘든 경우라고 해야 하나? 평생을 세상에 있는 듯 없는 듯 묻어가다가 그런 독특한 최후를 맞았으니 아버지는 좀 기뻤을라나? 그것도 일곱번 째 희생자라니. 아아 럭키 세븐.<br />
&nbsp; 존재감도, 영향력도 없던 아버지의 최후는 우리 가족에게 몇 가지 변화를 주었다. 역시 사람은 죽어서 꼭 이름이 아니더라도 뭔가 남기는 건가. 어머니의 변화가 가장 컸다. 생전에는 원수처럼 여기며 구박만 하더니, 거의 준 순국열사 미망인처럼 되어버린 것이다. 아버지는 불행히 가셨지만, 너희들은 희망을 잃지 말거라. 말투도 사극처럼 바뀌어 버렸다. 물론 보험금이나 여기저기서 들어온 보상금 영향이 적진 않다. 생활에 여유가 생겨서일까? 친구들 좀 만나라는 엄마의 잔소리도 그 때부터가 시작이었다.<br />
<br />
<span style="font-weight: bold;">#42번방. 괜찮은 사업 구상 합시다.</span><br />
<br />
&nbsp; 채팅 사이트를 둘러보다가 특이한 제목의 방을 발견했다. 사업 구상이라니. 다단계나 통신판매겠지 하고 생각했는데 ‘구상 합시다’가 특이해서 눈길이 머물렀다. 소개도 아니고, 구상해보자고? 일단 클릭해봤다.<br />
<br />
<span style="font-weight: bold;">애이매추 님이 입장하셨습니다.</span><br />
<br />
벨 소리와 함께 내 등장을 컴퓨터가 멋지게 알려줬지만, 반겨주는 사람도 없고, 이미 몇 명인가가 이야기에 열중하고 있었다. 분위기가 제법 진지해서 끼어들 틈도 없이 오고 가는 이야기들을 들어야 했다. 카드니, 자동차니, 보험이니 하는 단어들이 대화에 섞여 있었지만, 잘 들어보니 카드깡과 자동차깡, 보험사기등 범죄구상이었다. 괜찮은 사업이라니. 동업자를 구하는 게 아니라 공범을 구하는 거구만. <br />
대화내용이 재미가 있어 계속 있으니 어느 틈엔가 의견 충돌이 나기 시작했다. 분위기가 격해지는가 싶더니 누군가가 차라리 은행을 털고 말지 라며 나가버렸다. 재밌을만 하니 판이 깨지는구만. 나는 그 때까지 한마디도 안하고 있다가 장난 삼아 한마디를 던졌다.<br />
&nbsp; “은행보다는 차라리 담배차를 터는 게 낫지. 경비도 없지. 담뱃값도 비싸겠다.”<br />
<br />
그리곤 나와버렸다.<br />
<br />
<span style="font-weight: bold;">애이매추 님이 퇴장하셨습니다.</span><br />
<br />
&nbsp; 저 사람들이 진짜 범죄공모를 했는지는 모르겠다. 아무래도 정보화시대다 보니까. 범죄자들도 인터넷을 이용하겠지. 뭐 하러 법을 어기는지 몰라. 준법정신이라기 보다는, 내가 법을 어기지 않을 테니 제발 나를 건드리지 말라는 마음에 가까운 거지만, 어쨌든 조용히 사는 게 좋은 거 아닌가.<br />
<br />
&nbsp;시간을 더 떼울 필요가 있어서, 채팅방을 기웃거렸다. 이곳은 대화를 사고파는 시장이다. 누군가와의 소통은 원하지만, 이 순간이 지나면 잊어주세요. 하는 보이지 않는 꼬리말을 달고 상대의 컴퓨터로 날아간다.<br />
나의 메시지가 화면에 떳다,<br />
사라진다. <br />
만나서 알게 되고, 헤어지며 잊는 번거로움이, 고통이 없다. 이곳의 무관심에는 모두 내성이 생겼으니까. 고맙게도 미니홈피는 오랫동안 만나지 못했다는 자각도 잊게 해준다. 그래서 가끔 이런 질문을 떠올리게 되는 것이다. <br />
그런데 우리가 마지막으로 만난 게 언제였지?<br />
<br />
<span style="font-weight: bold;">세검정 휘발유님이 애이매추님을 초대하였습니다.</span><br />
<br />
아니 이건 뭐야? 느닷없이 왠 초대? 얼결에 들어가 보았다.<br />
<br />
<span style="font-weight: bold;">세검정 휘발유</span>: 아이디어 좋습니다. 같이 일해봅시다.<br />
<span style="font-weight: bold;">애이매추</span>: 네? 무슨 아이디어요?<br />
<span style="font-weight: bold;">세검정 휘발유</span>: 담배트럭.<br />
<span style="font-weight: bold;">애이매추</span>: 지금 장난해요? 아아, 아니 장난이잖아요.<br />
<span style="font-weight: bold;">세검정 휘발유</span>: 010-3456-7890 연락 주십시오.<br />
<span style="font-weight: bold;">애이매추</span>: 아 이 사람이 진짜. 난 생각 없어요. 혼자 잘해봐요. 난 갈 테니.<br />
<span style="font-weight: bold;">세검정 휘발유</span>: 현재 학생입니까?<br />
<span style="font-weight: bold;">애이매추</span>: 네.<br />
<span style="font-weight: bold;">애이매추</span>: 아니 그게 무슨 상관이에요.<br />
<span style="font-weight: bold;">세검정 휘발유</span>: 이 근처 대학 다니시는군요. 가까워서 좋습니다. 사진도 잘나왔네요. 찾아가겠습니다.<br />
<span style="font-weight: bold;">애이매추</span>: 학교로 와서 뭘 어쩌겠다고.<br />
<br />
<span style="font-weight: bold;">세검정 휘발유님이 퇴장하였습니다.</span><br />
<br />
<span style="font-weight: bold;">애이매추</span>: 이봐요.<br />
<br />
<span style="font-weight: bold;">대화방에 아무도 없습니다.</span><br />
<br />
&nbsp; 아무도 없습니다. 텅 빈 들판에서 바람에 날리는 가랑잎을 대면하는 기분이었다. 힘이 빠졌다. 채팅방에서 무슨 말을 하건 상관 없는데, 어쩌자고 내가 프로필에 사진과 학교를 적어놨는지. 인터넷에서도 학교에서처럼 아무도 내게 관심을 갖지 않았다. 어차피 아무도 안 볼거. 하며 적어 놓은 게, 관심을 가진 사람이 하필 저런 사람이야. 아아 위기다. 세검정 휘발유라니. 불광동 휘발유 개그맨 양종철씨보다 무섭게 생겼을까. 방법을 찾아야 해.<br />
<br />
저는 정말 관심 없습니다. 다른 사람을 찾아보세요.<br />
<br />
문자 메시지를 보냈다.<br />
바로 답장이 왔다.<br />
<br />
이 번호로 곧 전화하겠습니다.<br />
<br />
아아 최악이다. 전화번호까지 가르쳐주다니. 더 이상 멍청할 수 있을까? 팔에 문신이 있고, 얼굴에 잔뜩 흉터가 있는 사람이 학교에 찾아온다면. 그리고 날 아는 척 한다면. 끔찍하다. 이제 집에 가도 될 시간인데 갈 수가 없다. 어쩌지? 어쩌지? 아, 봉근이형.<br />
<br />
봉근이 형은 팔짱을 끼고 엄지와 검지로 턱을 받치며 짐짓 심각한 표정으로 내 얘기를 들었다.<br />
내 아이디어를 훔쳤구만.<br />
아니 난 그냥 장난 삼아서.<br />
도망칠 방법이 없어.<br />
없다니?<br />
직접 부딪혀야지.<br />
형도 알겠지만, 난 정말 범죄가 싫어.<br />
그래. 네가 얘기했잖아. 너희 아버지께서도 흉악범을 잡으다가 흉기에 사고를 당하셨잖아. 정말 용감한 시민이셨지.<br />
어... 그, 그래…<br />
아무튼 내가 해결할께. 넌 잠자코 있어.<br />
<br />
아, 이 얼마나 고마운 사람인가. 사람 사귀는 일이 쓸모가 있다는 생각이 들었다. 덕분에 모든 긴장이 풀렸고, 마음 편히 집에 갈 수 있었고, 다시 전과 같은 일상으로 돌아왔다.<br />
<br />
며칠이 흘렀다.<br />
봉근이 형으로부터 PC방으로 오라는 연락을 받았다. 마침 엄마가 옆에 있어서, 나는 짐짓 큰 목소리로 가겠다고 대답했다.<br />
&nbsp; 왔구나.<br />
&nbsp; 왔구나로 시작해서 뿜어져 나올 말풍선에 대비해 숨을 흐읍 하고 들이마셨는데, 아무 말도 없어 헛기침만 나왔다. 봉근이 형이 누군가의 곁으로 갔다. 눈매가 단단하고, 키는 작지만 어깨가 다부진게 접근하기 힘들어 보인다. 봉근이 형이 뭐라고 속삭이자 표정을 펴면서 나에게 다가와 손을 내밀었다.<br />
<br />
애이매추씨 반갑습니다. 전에 얘기했던 세검정 휘발유입니다.<br />
<br />
내 삶에 배경음악이 있다면 지금쯤 베토벤의 운명으로 바뀌었을 것이다. 운명에 맞추어 내 심장은 고동질 쳤고, 휘발유 옆에선 봉근이 형이 빨간 사탕을 먹은 버블버블의 공룡마냥 말풍선을 쏘아대고 있었다. 나는 말풍선을 헤집고 들어가 봉근이 형의 손목을 잡고 PC방 구석으로 갔다.<br />
형 미쳤어?<br />
걱정마. 나만 믿어.<br />
어쩌겠다는거야?<br />
원래는 우리 둘이 하려고 했는데. 한 명이 더 필요하더라. 너는 망만 봐주면 돼. 한 시간 있다 개시할거야. 임마 뭘 그렇게 떨고 있어. 벌써 트럭의 이동 루트까지 다 파악했어. 넌 몸만 빌려주면 돼.<br />
<br />
&nbsp; 휘발유의 눈매에 저항 한번 못해보고 서울 외곽의 도로까지 끌려왔다. 휘발유가 맨 앞에 서고, 그 뒤를 봉근이 형이, 그리고 내가 끌려가고 있었다. 저녁 해에 그림자가 늘어졌다. 길게 늘어난 그림자가 앞서 걸어가는 봉근이 형의 엉덩이를 콕콕 찔렀다. 나는 봉근이 형의 뒤로 바짝 다가갔다.<br />
봉근이형.<br />
응.<br />
저기 사실 우리 아버지… <br />
응.<br />
범인을 잡으려다 당한 게 아니고.<br />
응.<br />
아무 것도 못하고 멀뚱히 쳐다보다가 덩달아 당한 거야.<br />
……<br />
저기… 나는 좀 평범하게 죽고 싶어.<br />
내 말 들어봐.<br />
봉근이 형이 조용하고 느리게 말했다.<br />
너나 나나 별거 없는 인생아니냐. 넌 친구가 없고. 난 직장이 없고. 고작 인터넷에서만 기펴고 살래? 인터넷 기사에다 악플이나 달고 사는 게 재밌냐? 내가 괜히 음모론 좋아하는 것 같냐? 해도 해도 안되니까. 남의 탓이라도 하고 싶은 거 아냐. 내가 뭐 이런 건 해봤겠냐. 그래도 좋은 기회 아냐? 어차피 이대로 가도 비전 없는 인생. 한번 송두리째 뒤집어 보는 것도 나쁘진 않지. 설마 지금보다 나쁘겠냐. 생각해봐. 지금보다 더 나빠질 수 있는지. 아니면 좋아질 수 있는지.<br />
말풍선들이 내 가슴에서 퐁퐁 터져나가는 게 아팠다. 틀린 말 하나 없지만, 뭐라고 항변하고 싶었다. 하지만 말을 골라서 할 재주도 없었다. 저항할 수가 없었다. 나에게 저항이라는 능동적인 유전자가 있었다면, 아버지도 그렇게 가진 않았겠지. 눈물이 났다. 내색하지 않으려고 고개를 숙이고 눈을 질끈 감아 눈물을 떨어뜨렸다. 그 때였다.<br />
<br />
&nbsp; 걸음이 바닥에 붙어버렸다. 우뚝. 멈춰버린 나 때문에 봉근이 형도 멈춰서 돌아보았다. 나는 믿을 수 없다는 표정을 지으며 양팔을 들어 나도 모르겠다는 제스처를 취했다. 휘발유까지 멈춰서 내게로 돌아오고 있었다. 걸음아 떨어져라. 나는 발에 힘을 줘봤지만 꼼짝 않았다. 귀신이 곡할 노릇이네. 그런데, 아, 이 장면을 꿈에서 본 것 같아. 그러고 보니 그림자였다. 그림자가 나를 붙잡고 놓지를 않았다. 그림자가 울상을 지었다. 아 그림자야. 내가 너를 몰라봤구나. 너도 강적이었어. 강적들을 두고 도망칠 수는 없지. 너를 울리지 않을께.<br />
<br />
&nbsp; 드디어 걸음이 떨어졌다. 나는 내게 다가오는 봉근이 형과 휘발유에게 소리쳤다. 나 안 해! 니들끼리 해! 난 갈거야! 뒷걸음치긴 했지만 용기있게 말했다. 휘발유의 입모양이 거친 욕을 뱉을 준비를 하고 있었다. 난 다시 뒷걸음치면서 소리쳤다.<br />
아무 말 하지마! 씨팔. 나 쫓아오면 다 신고해버릴 테니까!<br />
난 무작정 뒤돌아 뛰었다. 봉근이 형과 휘발유가 쫓아오지는 않았다. 그래도 정신 없이 뛰었다. 달리면서 흘린 눈물이 볼을 타고 귀를 스쳐 뿌려지는 게 느껴졌다. 오늘따라, 그림자와 함께 하는 이인삼각은 어찌나 호흡이 잘 맞는지.<br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds12.egloos.com/pds/200809/16/11/d0024711_48cfb21bb0fad.jpg" width="299" height="390" onclick="Control.Modal.openDialog(this, event, 'http://pds12.egloos.com/pds/200809/16/11/d0024711_48cfb21bb0fad.jpg');" /></div><br />
<br />
<span style="font-weight: bold;">심사총평</span><br />
<br />
&nbsp;응모작을 읽으면서 가장 아쉬웠던 점은 대부분 이야기의 처음과 끝을 구성하는 힘이 전반적으로 부족하다는 것이었다. 많은 소설이 작가의 주관적 체험이나 고민을 정제되지 않은 상태로 독자에게 전달하려 한다는 느낌을 주었다. 응모자들은 나름대로 절실한 문제를 소설로 옮기려 했겠지만 날것으로 전달되는 체험과 고민은 독자를 감동시키기에 충분하지 못했다. 소설이 주는 감동은 대상화된 이야기에서 느낄 수 있는 공감에서 출발한다는 점을 강조하고 싶다.<br />
&nbsp;독자들은 작가의 감정 상태나 고민 상태를 보는 것이 아니라 그것이 만들어낸 새로운 세계로의 소설을 접하게 된다. 따라서 머리 속에 있는 생각을 요령 있게 풀어내는 능력이 소설의 성패를 좌우한다고 할 수 있다.<br />
&nbsp;당선작 &lt;내 그림자&gt;는 이런 의미에서 소설이 갖추어야 할 이야기 꼴을 잘 갖추고 있었다. 주인공이 어떤 성격을 가진 인물인지, 그가 왜 그런 행동을 하게 되었는지를 이해하는 데 큰 어려움이 없었다. 마무리에도 큰 무리는 없었다. 아쉬운 점이 있다면 소설이 전달하는 메시지가 아직 대학생 수준을 벗어나지 못했다는 점이다. 고민의 내용에서 치기가 느껴지고 인물의 사고나 행위도 구체적이라는 느낌은 적었다. 뼈대는 갖추었으나 살이 풍부하게 붙지 못했다고 할 수 있다. 이제부터 시작이라는 생각으로 분발하기를 바란다.<br />
-하략-<br />
<br />
<br />
<span style="font-weight: bold;">당선소감</span><br />
<br />
&nbsp;감사합니다. 허겁지겁 마감에 겨우 맞췄는데 당선되다니. 부끄럽습니다. 평소 저의 모습과 행동과는 안어울리지만, 문학은 제 삶의 등불입니다. 가슴 속에 은하계 하나를 담고 사는 기분입니다. 제 전공과는, 또 앞으로의 제 직업과는 거리가 멀지만 평생 이 은하계를 넘나들며 살고 싶습니다.<br />
&nbsp;2005년은 최고의 해인 것 같습니다. 멋진 팀, 취업, 학술상 당선, 그리고 남상완과의 스타크래프트 대결에서 3년만에 승리를 따냈습니다. 이제 여자친구만 생기면 완벽한데 그것만은 까마득합니다. help me please.<br />
&nbsp;우리 졸업프로젝트 팀이름은 '4학년의 마음'입니다. 남경완, 남상완, 신봉근, 김현주. 4학년만의 간절한 마음으로 프로젝트를 성공적으로 마무리했고, 모두 멋진 회사에 취업했습니다. 팀장으로서 일년동안 멋진 팀을 이끌어 왔다는 걸 평생 자랑스럽게 생각할 것 같습니다. 제가 특별히 노벨상도 주었습니다. 팀장의 음모를 잘 이해하고 따라준 팀원들에게 감사합니다.<br />
-하략-<br />
<br />
<br />
///////////////////////////////////////////////////////////////////////////////////<br />
<br />
벌써 3년이나 지났다. 당선되면 적지 않은 돈을 주는 것을 알고 있었기 때문에 전혀 순수하지 않은 마음으로 지원했다.<br />
그&nbsp; 땐 너무너무너무 부끄러워서 꽁꽁 숨기고 감췄다.<br />
이제야 공개하는 이유는 '이거 어릴 때, 아주아주 오래 전에 쓴거야~'라고 말할 수 있게 되었으니까.<br />
<br />
내 블로그의 그림은 이 작품이 실릴 때, 누군가가 그려준 삽화였다.<br />
<br />
글쓰기, 글읽기가 정말정말 좋았고 행복했던 때였다. 지금은 블로그 하나 건사하기 힘겹지만 ^^<br />
다른 의미로, 그 때처럼, 하고싶다.<br />
<br />
<br />
<br />
<br />
<br/><br/>tag : <a href="/tag/내그림자" rel="tag">내그림자</a>			 ]]> 
		</description>
		<category>달뜬 청춘</category>
		<category>내그림자</category>

		<comments>http://uratang.egloos.com/2061459#comments</comments>
		<pubDate>Tue, 16 Sep 2008 13:43:46 GMT</pubDate>
		<dc:creator>uratang</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Google code jam: Saving the Universe ]]> </title>
		<link>http://uratang.egloos.com/2055351</link>
		<guid>http://uratang.egloos.com/2055351</guid>
		<description>
			<![CDATA[ 
  친구가 Google code jam에 참가하자고 해서 Qualification Round만 어영부영 참가했다.<br />
그리고 어영부영 탈락.<br />
Saving the Universe 한문제 풀었다.<br />
빨리 푼 순서대로 다른 사람들의 소스를 보니 C++이 대부분이었다. 간간이 자바도 있고, 헤스켈이라는 언어도 보였고.<br />
역시 익숙한 언어로 빨리 푼다는 생각인가? 친구들 중에 C++ 아닌 언어로 푼 사람은 나밖에 없었다.<br />
학생들이 참가하기에 좋은 대회 같다. 실제로 이걸로 구글에 취업하신 한국분도 계시고.<br />
<br />
<br />
아래는 Saving the Universe의 내 풀이소스<br />
문제는 <a href="http://code.google.com/codejam/contest/dashboard?c=agdjb2RlamFtcg8LEghjb250ZXN0cxjqOQw">여기</a>서 확인할 수 있다.<br />
<br />
<br />
<span style="color: rgb(102, 102, 102);">fo = File.open('output.txt', 'w')</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">File.open('A-large.in') do |file|</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp; cases = file.readline.strip.to_i</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp; case_num = 0</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp; while case_num &lt; cases do</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp; engine_list, query_list = [], []</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp; file.readline.strip.to_i.times{engine_list &lt;&lt; file.readline.strip.to_s}</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp; file.readline.strip.to_i.times{query_list &lt;&lt; file.readline.strip.to_s}</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp; len = query_list.length</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp; sum, count = 0, 0</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp; &nbsp;</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp; while sum&lt;=len do</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cl = 0</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for s in engine_list</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i+=1 until query_list[0..i].include?(s) || i &gt; query_list.length</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cl = i if i&gt;cl</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum += cl</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query_list = query_list[cl..len]</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count += 1</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp; end</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp; </span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp; fo.puts "Case ##{case_num+1}: #{count-1}"</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp;&nbsp;&nbsp; case_num += 1</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">&nbsp; end</span><br style="color: rgb(102, 102, 102);"><span style="color: rgb(102, 102, 102);">end</span>			 ]]> 
		</description>
		<category>Ruby</category>

		<comments>http://uratang.egloos.com/2055351#comments</comments>
		<pubDate>Thu, 11 Sep 2008 06:30:36 GMT</pubDate>
		<dc:creator>uratang</dc:creator>
	</item>
	<item>
		<title><![CDATA[ WATCHMEN ]]> </title>
		<link>http://uratang.egloos.com/2051947</link>
		<guid>http://uratang.egloos.com/2051947</guid>
		<description>
			<![CDATA[ 
  영웅이 불법인 시대는 어떨까? 그래서 세계를 구할 영웅이 직업을 잃었다면?<br />
아니, 곰곰이 생각해보자. 세계를 구하는 영웅은 존재할 수 있을까?<br />
수퍼맨 조차도, 기껏 도시하나 건사하기 바쁜데, 과연 세계를 구할 수 있을까?<br />
그런 세계에 영웅은 정말 어떤 의미일까?<br />
<br />
다른 세상의 이야기가 아니다. 이것은 우리 세상의 이야기이기도 하다.<br />
우리는 영웅이 금지된 시대에 살고 있다. 금지된 자리를 비틀즈가, 마이클 조던이, 서태지가 대신 할 뿐.<br />
<br />
나는,<br />
가이포크스 가면을 쓴 영웅이 나타나 <br />
꼭 영화와 같은 이 현실에서 꼭 영화에서처럼 그렇게 해주길 바라곤 하지만<br />
정말 그런 영웅이 나타난다 해도, 사람들은 NIMBY를 외칠 것 같다.<br />
&nbsp;<br />
<br />
<font style="font-weight: bold; color: rgb(0, 0, 0);" size="4">왓치맨(WATCHMEN)</font><br />
<br />
정말 대단한 작품을 읽었다. 올해 비로소 번역판이 나와서 읽게 되었는데, 작품자체도 최고고, 번역도 최고다.<br />
영화화가 결정되어 촬영이 진행되고 있고 2009년 개봉 예정이다.(<a href="http://watchmenmovie.warnerbros.com/">http://watchmenmovie.warnerbros.com/</a>)<br />
감독이 잭스나이더라 관심을 갖고 있었는데, 막상 책을 읽고 나니 오히려 잭스나이더에게 부담이 엄청날 것 같다.<br />
<br />
정말 치밀하고, 창의적이다. 이미 세상을 통찰하는 시선이 오싹하다.<br />
TIME이 선정한 1923년 이후 영어소설 베스트 100 중 유일한 그래픽노블.(<a href="http://www.time.com/time/2005/100books/0,24459,watchmen,00.html">http://www.time.com/time/2005/100books/0,24459,watchmen,00.html</a>)<br />
<br />
<br />
수퍼히어로 영화를 보고 기껏 드는 생각이 팍스아메리카나에 대한 의심이 아니라면,<br />
자격이 있으므로 열렬히 권하고 싶다.<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds12.egloos.com/pds/200809/09/11/d0024711_48c545ac9a6c4.jpg" width="383" height="480" onclick="Control.Modal.openDialog(this, event, 'http://pds12.egloos.com/pds/200809/09/11/d0024711_48c545ac9a6c4.jpg');" /></div><br />
<br />
<br />
<br />
보너스로,<br />
나를 X-Men의 팬으로 만든 장면<br />
<br />
Rogue: When they come out, does it hurt? <br />
Wolverine: Every time.<br />
<br />
<br />
<br />
<br/><br/>tag : <a href="/tag/WATCHMEN" rel="tag">WATCHMEN</a>,&nbsp;<a href="/tag/왓치맨" rel="tag">왓치맨</a>			 ]]> 
		</description>
		<category>달뜬 청춘</category>
		<category>WATCHMEN</category>
		<category>왓치맨</category>

		<comments>http://uratang.egloos.com/2051947#comments</comments>
		<pubDate>Mon, 08 Sep 2008 15:25:30 GMT</pubDate>
		<dc:creator>uratang</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 루비코드를 웹페이지에서 실행하자. - RDPark ]]> </title>
		<link>http://uratang.egloos.com/2047680</link>
		<guid>http://uratang.egloos.com/2047680</guid>
		<description>
			<![CDATA[ 
  회사에서 예전에 몸담았던 프로젝트에서, 2년차였고 당연히 막내였으므로, 온갖 잡다구리한 일들을 도맡아 했다.<br />
<a href="http://book.daum.net/detail/book.do?bookid=KOR9788991268074">실용주의 프로그래머</a>에서 스크립트 언어에 대한 부분을 읽고 막연히 시작한 루비지만,<br />
사소하고 잡다한 일에서조차도 엄청난 생산성을 보여주는 능력에 감탄하고 감탄하고 감탄했다.<br />
어찌나 신이 났던지, 당시 팀에서 스크립트 언어를 사용하는 분이 없어서 내가 보기에 답답하다 싶으면 일을 뺏어서 하기도 했으니까.<br />
<br />
메모장에다 쓱쓱 적어서 간단하게 돌릴 수 있는게 루비의 장점이지만, 전에 썼던 코드에 덮어서 새로 쓰고, 그때그때 필요한 코드만 쓰니까 프로그램이 도무지 관리가 안됐다.<br />
30분 할 일을 3분만에 프로그램 만들어서 돌릴 수 있는게 루비지만, 전에 했던 작업을 관리만 했어도 3분이 아니라 30초만에 할 수도 있었을 것이다.<br />
그래서,<br />
나름의 프로그램을 만들기로 결심했다.<br />
<br />
웹게시판 형태처럼 만들어서 코드를 관리하고, 웹페이지에서 코드를 실행하고 결과도 볼 수 있도록.<br />
이름하여 RDPark<br />
프로젝트에서 나에게 미션을 주는 분이 주로 노처녀 박대리님이어서 항상 misspark.rb에 끄적여 임무를 완수하곤 했는데,<br />
처음엔 MissPark으로 하려다가 회사커뮤니티에도 공개를 하려니 좀 뭣해서 스터디 이름과 섞어서 지은 이름이다.<br />
뭐 이름은 중요하지 않고, 간단히 설명하자면<br />
<br />
화면에 입력값을 둘 수 있고, Methods 텍스트창에 자신의 메소드를 만들어 넣으면 코드에서 그 메소드를 호출할 수 있다.<br />
<br />
'루비와 함께 놀자'에서 소개했던 코드들은 조금만 수정하면 문제없이 작동한다.<br />
복잡한 프로그램을 짜기엔 불편한 점들이 있지만, 텍스트 처리를 위해 사용한다면 쓸만하다.<br />
회사분의 평을 빌리면 try ruby!(<a title="" href="http://tryruby.hobix.com/">http://tryruby.hobix.com/</a>) 와 heroku (<a href="http://heroku.com/">http://heroku.com/</a>)의 중간정도...라고 해주셨는데 그정도만 되어도 감지덕지 대만족이다.<br />
<br />
루비 온 레일스로 작성했고, 모양새를 위해 CSS 프레임웍인 Blueprint와 Textresizer 스크립트를 사용했다.<br />
루비와 레일스가 어찌나 대단한지, UI를 제외하고는 손댄 코드가 30줄도 안되는 듯 하다.<br />
<br />
<br />
사용법:<br />
루비와 레일스가 설치되어 있지 않으면 먼저 이 둘을 설치한다. 레일스는 2.0이고 SQLite를 사용한다. 설치 방법은 아래를 참고.<br />
첨부된 파일의 압축을 풀고 rdpark 디렉토리로 이동 후 명령 프롬프트 창에서 ruby script/server 입력한다.<br />
웹브라우저에서 http://localhost:3000/codes의 주소로 이동하면 RDPark 화면으로 이동한다.<br />
새로만들기 메뉴에서 코드를 새로 작성하고, 실행은 편집 및 실행 화면에서 한다.<br />
<br />
<br />
설치 방법:<br />
설치 방법은 검색을 통해 찾아보자.<br />
<a href="http://purecolor.tistory.com/202?srchid=BR1http%3A%2F%2Fpurecolor.tistory.com%2F202">http://purecolor.tistory.com/202?srchid=BR1http%3A%2F%2Fpurecolor.tistory.com%2F202</a><br />
이 페이지에 간단하게 잘 설명이 되어 있다. 다만 레일스 2.0부터는 MySQL이 아닌 SQLite가 기본 지원이므로 SQLite를 설치한다. 설치 방법은 다음과 같다.<a href="http://blog.superkdk.com/79"> http://blog.superkdk.com/79</a> 참고<br />
&nbsp;&nbsp; 1. <a href="http://www.sqlite.org/download.html">http://www.sqlite.org/download.html</a>에서 sqlite-3_5_8.zip, sqlitedll-3_5_8.zip 다운로드<br />
&nbsp;&nbsp; 2. 압축을 풀고 적당한 곳에 넣는다. 예) C:\Program Files\SQLite3<br />
&nbsp;&nbsp; 3. 위의 적당한 곳을 환경변수 PATH 에 추가.<br />
&nbsp;&nbsp; 4. gem 설치 - gem install sqlite3-ruby<br />
<br />
<p>다운로드:<br />
</p><p><a href="http://pds12.egloos.com/pds/200809/05/11/rdpark.zip">rdpark.zip</a></p><p><br />
</p><p><img class="image_left" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds12.egloos.com/pds/200809/05/11/d0024711_48c0c791b70c7.jpg" width="400" height="427.496757458" onclick="Control.Modal.openDialog(this, event, 'http://pds12.egloos.com/pds/200809/05/11/d0024711_48c0c791b70c7.jpg');" align="left" /><img class="image_left" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds10.egloos.com/pds/200809/05/11/d0024711_48c0c7a0e1852.jpg" width="400" height="132.119635891" onclick="Control.Modal.openDialog(this, event, 'http://pds10.egloos.com/pds/200809/05/11/d0024711_48c0c7a0e1852.jpg');" align="left" /></p><p><br />
</p><br />
<br/><br/>tag : <a href="/tag/ruby" rel="tag">ruby</a>,&nbsp;<a href="/tag/rubyonrails" rel="tag">rubyonrails</a>,&nbsp;<a href="/tag/rails" rel="tag">rails</a>,&nbsp;<a href="/tag/rdpark" rel="tag">rdpark</a>			 ]]> 
		</description>
		<category>Ruby</category>
		<category>ruby</category>
		<category>rubyonrails</category>
		<category>rails</category>
		<category>rdpark</category>

		<comments>http://uratang.egloos.com/2047680#comments</comments>
		<pubDate>Fri, 05 Sep 2008 05:42:05 GMT</pubDate>
		<dc:creator>uratang</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Drupal을 이용한 웹사이트 개발 ]]> </title>
		<link>http://uratang.egloos.com/2045132</link>
		<guid>http://uratang.egloos.com/2045132</guid>
		<description>
			<![CDATA[ 
  <h3>Drupal이란?</h3><p>Drupal(드루팔)은 오픈소스 content management platform으로 개인 블로그부터 대형 커뮤니티 시스템까지 다양한 형태의 웹사이트를 개발할 수 있도록&nbsp;편리하고&nbsp;다양한&nbsp;기능을 제공한다.</p><p>Drupal 커뮤니티(<a href="http://drupal.org/">http://drupal.org/</a>)를 통해전세계 수 천명의 개발자가 참여하고 있으며, GPL에 의거하여&nbsp;배포된다. 현재 6.2 버전까지 공개되었고, 7.0 버전의 개발이진행중이다. 개발환경은 APM(Apache, PHP, MySQL)으로 모든 소스코드는 PHP로 작성되어 있다. 그러나 별도의코딩이 없이 설정만으로도 웹사이트 개발이 가능하다.</p><p>Drupal의 장점 중 하나는 기본기능 외에&nbsp;사용자들이 만든 수 많은 모듈들인데, 전세계 개발자들이&nbsp;개발한 모듈을 설치하는 것만으로도&nbsp;기본적인&nbsp;기능 정도는&nbsp;손쉽게&nbsp;적용할 수 있다.</p><p>Drupal을 사용한&nbsp;웹사이트로는 <a href="http://www.springframework.org/">www.springframework.org</a>, <a href="http://www.spreadfirefox.com/">http://www.spreadfirefox.com/</a>,&nbsp;<a href="http://www.openonweb.com/">http://www.openonweb.com/</a>&nbsp;등이 있다.</p><p>&nbsp;</p><h3>Drupal 설치하기</h3><ol><li><p>APM설치</p><p>Apache, PHP, MySQL을&nbsp;설치한다. 윈도우에 설치한다면 APM_SETUP(<a href="http://www.apmsetup.com/">http://www.apmsetup.com/</a>)을 이용하면 손쉽게 설치할 수 있다.</p></li><li><p>DB설정</p><p>MySQL5\bin으로 이동한 후&nbsp;아래의 명령을 실행한다.</p><div style="background-color: rgb(220, 220, 220);"><p>mysql -u root</p><p>mysql&gt;create database databasename;</p><p>mysql&gt;use mysql</p><p>mysql&gt;insert into user (host,user,password) values ('localhost','myid',password('mypassword'));</p><p>mysql&gt;insert into db&nbsp;values ('localhost','databasename','myid','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y');</p><p>(혹은 GRANT SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON databasename.* TO'myid'@'localhost' IDENTIFIED BY 'mypassword';)</p><p>mysql&gt;flush privileges;</p><p>mysql&gt;\q</p></div></li><li><p>Drupal&nbsp;설치</p><p>Drupal.org에서 원하는 버전을 다운로드 하고,&nbsp;(<a href="http://drupal.org/getting-started/6/install/download">http://drupal.org/getting-started/6/install/download</a>)</p><p>다운받은 파일의 압축을 풀고, htdoc아래에 복사한다.</p></li><li><p>설치 스크립트 구동</p><p>브라우저의 주소창에 <a href="http://localhost/drupal"><span style="color: rgb(129, 0, 129);">http://localhost/drupal</span></a>을 입력하면&nbsp;설치화면으로 접속된다. 화면에 나타나는 지시를 따라&nbsp;단계를 진행하면 설치가 완료된다.</p></li></ol><p>&nbsp;</p><p>참고:</p><p><a href="http://drupal.org/getting-started"><span style="color: rgb(129, 0, 129);">http://drupal.org/getting-started</span></a></p><p><a href="http://www.palpal.org/drupal/ko/node/79">http://www.palpal.org/drupal/ko/node/79</a></p><p><a href="http://www.palpal.org/drupal/ko/installation">http://www.palpal.org/drupal/ko/installation</a></p><p>&nbsp;</p><h3>사이트 구성하기</h3><p>admin&nbsp;계정으로 접속하여 Administer메뉴를 누른다.Site building 메뉴에서 테마, 화면구성, 모듈, 메뉴관리를 할 수 있고, Site configuration 메뉴에서 웹사이트의 기능 설정을 할 수 있다.</p><p>&nbsp;</p><p>Site building에는&nbsp;Blocks,&nbsp;Menus, Module,&nbsp;Themes&nbsp;메뉴가 있다.</p><p><strong>Blocks</strong>: Header, Footer, Leftside, Rightside, Contents의 사용 유무 및 각 부분에 들어갈 블록을 설정한다.</p><p><strong>Menus</strong>:&nbsp;Drupal의 시스템 메뉴 외에&nbsp;웹사이트에 사용될 메뉴를 생성하고 관리할 수 있다. Primary links, Secondary&nbsp;links 기능을 제공한다.</p><p><strong>Modules</strong>:&nbsp;설치된 모듈의 사용 여부를 설정한다. 기본 모듈 외에 새로 설치된&nbsp;모듈도 이 메뉴에서 관리한다.</p><p><strong>Themes</strong>:&nbsp;이 화면에서 테마를 선택한다. Drupal 6.2의 경우 6개의 기본 테마를 제공하는데, 자신의 사이트에 맞는&nbsp;테마도&nbsp;만들 수도 있다.</p><p>&nbsp;</p><p><strong>Site configuration</strong> 메뉴에서 파일 시스템 및 사이트 정보 같은 기본 정보를 설정,관리할 수 있다.</p><p>&nbsp;</p><h3>테마 제작</h3><p>Drupal6.2의 경우 6개의 기본 테마를 제공한다. 기존 테마를 수정해서 사용할 수도 있지만 새로 만들 수도 있다.(기존 테마를 복사해서 수정하면 더 쉽게 할 수 있다.)</p><ol><li>themes&nbsp;디렉토리 아래에&nbsp;새로 생성할 테마 이름의 디렉토리를 만든다.</li><li><p>테마이름.info 파일을 생성하고 다음의 내용을&nbsp;입력한다. 다른 테마의 info 파일을&nbsp;참조하도록 한다.</p><p>아래는&nbsp;pushbutton 테마의 pushbutton.info 파일의 내용이다.</p><div style="background-color: rgb(220, 220, 220);"><p>; $Id: pushbutton.info,v 1.4 2007/06/08 05:50:58 dries Exp $<br />
name = Pushbutton<br />
description = Tabled, multi-column theme in blue and orange tones.<br />
version = VERSION<br />
core = 6.x<br />
engine = phptemplate</p><p>; Information added by drupal.org packaging script on 2008-04-09<br />
version = "6.2"<br />
project = "drupal"<br />
datestamp = "1207776008"</p></div><p>info 파일을 작성했으면, themes 메뉴에서 테마를 선택할 수 있다. Drupal은 디렉토리와 info 파일만으로도 테마 정보를 자동으로 읽어온다.</p></li><li>템플릿 파일을 작성한다. 템플릿 파일로 웹사이트의 레이아웃을 수정할 수 있다.&nbsp;테마마다&nbsp;아래와 같은 파일들이 있다.</li></ol><p style="margin-left: 2em;"><strong>page.tpl.php</strong> - 웹사이트의 전체화면 구성을 할 수 있다. 따로 생성하지 않는 한 모든 화면이 이 템플릿의 디자인대로 출력된다. 모든 페이지는 Drupal의템플릿 엔진이 따로 출력하는데, 특정 URL에서 보이는 화면을 다르게 구성하고 싶다면 다음 문서를 참조한다.(<a href="http://drupal.org/node/104316">http://drupal.org/node/104316</a>)<br />
<strong>block.tpl.php</strong> - Header, Footer, Leftside, Rightside, Contents마다 한개 이상의 블록을 구성할 수 있다. 블록에 공통적으로 사용되는 디자인과 기능을 설정한다.<br />
<strong>comment.tpl.php</strong> - 콘텐츠마다 붙어 나오는&nbsp;코멘트에 공통적으로 사용되는 디자인과 기능을 설정한다.<br />
<strong>node.tpl.php</strong> - Drupal에서 생성되는 모든 콘텐츠는 node라는 개념으로 저장된다. node에 공통적으로 사용되는 디자인과 기능을 설정한다.</p><p style="margin-left: 2em;"><strong>box.tpl.php</strong> - 페이지(검색결과, 코멘트 입력 폼)에 공통적으로 사용되는 디자인과 기능을 설정한다.</p><p style="margin-left: 2em;"><strong>template.php</strong>- 공통으로 쓰이는 함수를 모아놓은 파일. 이 파일에 정의된 함수를 다른 템플릿 파일에서 호출할 수 있다.</p><p>&nbsp;</p><h3>모듈 설치</h3><p>Drupal 공식 사이트에서 모듈을 다운받을 수 있다.(<a href="http://drupal.org/project/Modules">http://drupal.org/project/Modules</a>)주의할 점은 자신이 사용하는 Drupal의 버전에 맞는 모듈을 선택해야 한다는 것이다. Drupal은 현재 6.2버전까지업그레이드가 되어 왔지만 사용자들이 만든 모듈이 모두 컨버전 되어 온 것은 아니다.&nbsp;모듈이 어느 버전을 지원하는 지는&nbsp;모듈을다운받을 때 확인할 수 있다.</p><p>다운받은 모듈을 modules 디렉토리에 복사한다. 관리자 화면의 Modules 메뉴에 현재 설치되어 있는 모듈의 목록이나오는데, 사용여부에 체크를 하고 저장하기만 하면 설치가 완료된다. 설치를 마치면 Site configuration 메뉴의하위에 설치한 모듈의 이름으로 메뉴가 생긴다.&nbsp;이 메뉴에서 세부설정을 한다.</p><p>&nbsp;</p><h3>웹사이트 디자인</h3><p>템플릿 파일로 레이아웃을 설정했으면, 세부적인 디자인은 CSS 파일을 통해서 할 수 있다. Drupal 테마의 기본 CSS는&nbsp;테마 디렉토리 안의 style.css 파일에 정의된다.</p><p>Drupal 테마마다 HTML 태그의 CLASS가 정의되어 있고, 필요하면 새로운 CLASS나 ID를 정의해서 디자인을적용할 수 있다. 경우에 따라 기본 모듈 디렉토리 내에도 CSS 파일이 있다. 필요하면 이것을 참고해서 CSS를 재정의 할 수있다.</p><p>Firefox의 애드온인 Firebug를 이용하면 디자인 수정 및 적용이 쉬워진다.</p><p>&nbsp;</p><h3>모듈의 기본 HTML 출력 수정</h3><p>Drupal 코어나 모듈은 HTML 출력이 고정되어 있다. 이렇게&nbsp;자동으로 생성된 화면에서 HTML 수준의 수정이 필요할경우 테마 별로 출력형태를 재정의(overriding themable output) 할 수 있다. 다만 스타일시트 수준에서수정이 가능한 경우라면 이 방법은 피하는 것이 좋다.<br />
모듈을 살펴보면 <span style="background-color: rgb(176, 238, 251);">themable</span>이라고 표현되는 부분이 있는데, 이것은 테마 별로 출력 형태를 재정의 할 수 있다는 것을 뜻한다.<br />
테마별 출력형태를 재정의 할 때는&nbsp;다음의 3가지를 유념해야 한다.</p><ol><li><p><strong>소스 찾기</strong> (Finding the source)</p><p>재정의 할 수 있는 소스를 찾는다. 수많은 파일 중에 해당하는 소스를 찾기가 쉽지 않다. DEVEL 모듈(<a href="http://drupal.org/project/devel"><span style="color: rgb(129, 0, 129);">http://drupal.org/project/devel</span></a>)을 사용하면 쉽게 소스를 찾을 수 있다.</p></li><li><strong>재정의 체계</strong> (System of overrides)<br />
Drupal 코어와 모듈은 themeing hook을 제공한다. 다시 말하면 테마 안에서 기능을 재정의 할 수 있으므로 직접 모듈을 수정하지 않아도 된다.</li><li><p><strong>함수&nbsp;vs. 템플릿</strong> (Functions vs. templates)<br />
hook을 구현할 수 있는 방법은 함수를 이용한 방법과 템플릿을 이용한 방법 이렇게 두가지가 있다. 두가지 모두 장단점이 있으므로 상황에 따라 선택하면 된다.<br />
함수를 이용한 방법이 속도면에서는 다섯배정도 빠르다. 그러나 디자이너가 작업하기 어렵고 익숙하지 않다는 단점이 있다.</p><ul style="margin-left: 2em;"><li><strong>함수를 이용한 방법</strong>theme_menu_local_tasks 함수의 경우를 예로 들면, 접두어 theme을 자신의 테마 이름으로 수정하고 template.php 파일 안에서 함수를 재정의 하면 된다.</li><li><strong>템플릿을 이용한 방법</strong>모듈에 있는&nbsp;.tpl.php 파일을 자신의 테마 디렉토리에 복사해 넣고 재정의 하면 된다.</li></ul></li></ol><p>&nbsp;</p><p><span style="background-color: rgb(255, 247, 0);">The theme registry</span>: Drupal은 hook되어 재정의 된 캐시(Cache) 데이터를 유지하고 있다. 이것이 theme registry인데, 추가, 삭제된 함수나 템플릿을 갱신하려면 캐시를 지워야 한다.</p><p>&nbsp;</p><p>참고:</p><p><a href="http://drupal.org/node/173880"><span style="color: rgb(129, 0, 129);">http://drupal.org/node/173880</span></a></p><p>&nbsp;</p><h3>나만의 모듈 만들기</h3><p>자신만의 모듈을 만들어 다른 모듈들처럼 사용할 수 있다.&nbsp;Drupal의 모듈은 몇가지 코드가 추가된&nbsp;PHP 파일의모음이다.&nbsp;모듈의 코드는 Drupal 엔진의 기능을 사용할 수 있고, 모듈에서 엔진의&nbsp;코드를 실행하는 것을 hook이라고한다.&nbsp;이&nbsp;hook을 이용해서&nbsp;몇가지 코딩 규칙만 적용하면 자신만의 모듈을 작성할 수 있다.</p><p>이해를 돕기 위해 New Forum List라는 간단한 모듈을 만들어 보자. New Forum List는 최근 일주일 사이에 포럼에 올라온&nbsp;새 글을 보여주는 기능을 한다.</p><p>&nbsp;</p><h6><font size="2">&nbsp;New Forum List 모듈 만들기</font></h6><ol><li><p>모듈 만들기</p><p>sites/all/modules&nbsp;디렉토리를 생성하고, new_forum_list.module 파일을 만든다. 모듈파일이름은 대문자를 사용하지 않는다. Drupal은 sites/all/modules&nbsp;디렉토리와 modules 디렉토리의 모듈을사용한다. 처음부터 modules/모듈이름 디렉토리에 파일을 만들어도 된다.</p></li><li><p>시스템에 모듈 알리기<br />
new_forum_list.info 파일을 만든다. 이 파일이 있어야 시스템이 모듈을 인식한다.</p><div style="background-color: rgb(220, 220, 220);">; $Id$<br />
name = New Forum List<br />
description = A block module that show New post in the Forum.<br />
core = 6.x</div><p>위와 같이 작성한다. name, description, core를 설정했다. 필요에 따라 dependencies, package도 설정할 수 있다.</p></li><li><p>모듈&nbsp;사용 권한 설정<br />
admin 메뉴의 권한설정 화면에서 설정할 수 있도록 new_forum_list.module 파일에 다음과 같이 코드를 작성한다.</p><ul style="background-color: rgb(220, 220, 220);"><li>&lt;?php<br />
function new_forum_list_perm() {<br />
&nbsp; return array('access new_forum_list content', 'administer new_forum_list');<br />
}<br />
?&gt;</li></ul></li><li><p>모듈 타입 설정<br />
모듈에는 node 모듈과 block 모듈의 두가지 타입이 있다. node 모듈은 blog 모듈, forum 모듈처럼 전체 화면에보여지는 모듈이고, block 모듈은 block 레이아웃의 left나 right에 보여지는 모듈이다. 이 예제에서는 block타입으로 작성한다. block 타입임을 선언하기 위해 new_forum_list.module 파일에 다음과 같은 이름의 함수를작성한다.</p><ol style="background-color: rgb(220, 220, 220);" class="code"><li>function new_forum_list_block($op='list', $delta=0) {<br />
&nbsp; if ($op == "list") { //블록 리스트에 보여질 때<br />
&nbsp;&nbsp;&nbsp; $block[0]["info"] = t("New Forum List");<br />
&nbsp;&nbsp;&nbsp; return $block;<br />
&nbsp;&nbsp;&nbsp;}<br />
}</li></ol></li><li><p>block contents 만들기<br />
$op의 값이 'view'일 경우는 실제 모듈이 화면에 출력되는 시점을 의미한다.&nbsp;함수의&nbsp;리턴 값에 필요한 내용을 입력한다.<br />
block 함수를 다음과 같이 수정한다.</p><ol style="background-color: rgb(220, 220, 220);" class="code"><li>function new_forum_list_block($op='list', $delta=0) {<br />
&nbsp; if ($op == "list") { //블록 리스트에 보여질 때<br />
&nbsp;&nbsp;&nbsp; $block[0]["info"] = t("New Forum List");<br />
&nbsp;&nbsp;&nbsp; return $block;<br />
&nbsp; } else if ($op == 'view') { //블록 내용 출력<br />
&nbsp;&nbsp;&nbsp; $block_content = '';<br />
&nbsp;&nbsp;&nbsp; $today = getdate();<br />
&nbsp;&nbsp;&nbsp; $start_time = mktime(0, 0, 0, $today['mon'], ($today['mday'] - 7), $today['year']);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; //DB로부터 최근 일주일 사이의 포럼 포스트 정보를 가져 옴<br />
&nbsp;&nbsp;&nbsp; $result =&nbsp; db_query("SELECT nid, title, created FROM {node} WHERE created &gt;= '%s' AND type='forum'", $start_time);<br />
&nbsp;&nbsp;&nbsp; while ($links = db_fetch_object($result)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $block_content .= '- ' . l($links-&gt;title, 'node/'.$links-&gt;nid) . '&lt;br /&gt;&lt;hr/&gt;';<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; $block['subject'] = '포럼 새 글';<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; if ($block_content == '') {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $block['content'] = '새로운 글이 없습니다.';<br />
&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $block['content'] = $block_content;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return $block;<br />
&nbsp; }</li><li>}</li></ol><p><span style="background-color: rgb(251, 189, 176);">db_query</span> 함수를 이용해 DB에서 원하는 데이터를 가져 온다. DB접속과 설정은 신경쓰지 않아도 된다.</p></li></ol><p>&nbsp;</p><p>이렇게 모듈을 작성했으면 admin/modules 메뉴에서 확인할 수 있다. 사용여부에 체크를 하고, admin/block 메뉴에 들어가보면 새로 작성한 모듈을 선택할 수 있다.</p><p><br />
참고:</p><p><a href="http://drupal.org/node/508">http://drupal.org/node/508</a></p><p><br />
</p><h3><font style="color: rgb(192, 192, 192);" size="2">작성자: 본인</font></h3><br/><br/>tag : <a href="/tag/drupal" rel="tag">drupal</a>			 ]]> 
		</description>
		<category>my tails...</category>
		<category>drupal</category>

		<comments>http://uratang.egloos.com/2045132#comments</comments>
		<pubDate>Wed, 03 Sep 2008 07:53:42 GMT</pubDate>
		<dc:creator>uratang</dc:creator>
	</item>
</channel>
</rss>
