<?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>Discoveries</title>
	<link>http://zeratul.egloos.com</link>
	<description>일상</description>
	<language>ko</language>
	<pubDate>Sat, 19 Sep 2009 03:37:14 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>Discoveries</title>
		<url>http://pds2.egloos.com/logo/1/200609/03/48/c0032048.jpg</url>
		<link>http://zeratul.egloos.com</link>
		<width>80</width>
		<height>53</height>
		<description>일상</description>
	</image>
  	<item>
		<title><![CDATA[ 테스코 매장에서 쫓겨난 제다이 ]]> </title>
		<link>http://zeratul.egloos.com/5074367</link>
		<guid>http://zeratul.egloos.com/5074367</guid>
		<description>
			<![CDATA[ 
  <a href="http://news.kukinews.com/article/view.asp?page=1&amp;gCode=all&amp;arcid=0921426448&amp;code=41191111&amp;cp=nv1">http://news.kukinews.com/article/view.asp?page=1&amp;gCode=all&amp;arcid=0921426448&amp;code=41191111&amp;cp=nv1</a><br><br>제다이보다 테스코 대변인의 대답이 더 압권..!			 ]]> 
		</description>
		<category>잡담</category>

		<comments>http://zeratul.egloos.com/5074367#comments</comments>
		<pubDate>Sat, 19 Sep 2009 03:37:14 GMT</pubDate>
		<dc:creator>zeratul</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Gamespot All Time Greates Video Game Heroes Contest ]]> </title>
		<link>http://zeratul.egloos.com/5067136</link>
		<guid>http://zeratul.egloos.com/5067136</guid>
		<description>
			<![CDATA[ 
  게임스팟에서 이런 걸 하고 있다.<br><a href="http://www.gamespot.com/greatest-video-game-hero/blog/index.html" target="_blank">http://www.gamespot.com/greatest-video-game-hero/blog/ind ...</a><br><br>비디오 게임 히어로들중에서 64명을 선발해서 네티즌들의 투표로 1등을 뽑는 게임(?)이다.<br>64강 토너먼트 형식으로 되어있어서 히어로들과 매치업은 정해져 있고, 처음에 각자 자신만의 토너먼트 승자를 가리고 일정 기간동안 진짜 투표로 진짜 승자를 가리게 되어 있는 형식이다.<br><br>지난 며칠동안 64강을 두번으로 나눠서 32강을 뽑는 투표를 했고, 지금 32강 진행중인데, 맞춘 갯수를 점수로 해서 순위를 매기고 있다. 난 현재 32명중 18명밖에 못 맞춰서 46097위-_- 1라운드 첫번째 경기에선 3만위대였는데..<br><br>1라운드 첫번째 경기에선 16명을 다 맞춘 사람들이 수두룩했다. 그런데 두번째 경기에선 어이없게도 첫번째 매치업인 마스터 치프(Halo)와 법&amp;밥(Bubble Bobble)의 대결에서 마스터 치프가 패배해버렸다-_-;; 그래서 32점은 한명도 없고 31점이 5명. 전부 마스터 치프 대 법&amp;밥의 대결을 틀린 탓이다. 장담컨대 대부분은 그 대결의 승패를 틀렸을 것이다. 쩝..<br>(게임 캐릭터를 잘 모르시는 분들을 위해 비유하자면 대통령 선거에서 이명박 대 허경영에서 허경영이 당선된 격이라고 보면 됨)<br><br>암튼 진짜 어이없음.<br>			 ]]> 
		</description>

		<comments>http://zeratul.egloos.com/5067136#comments</comments>
		<pubDate>Fri, 11 Sep 2009 01:14:43 GMT</pubDate>
		<dc:creator>zeratul</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 시간을 되돌리는 방법 ]]> </title>
		<link>http://zeratul.egloos.com/5064402</link>
		<guid>http://zeratul.egloos.com/5064402</guid>
		<description>
			<![CDATA[ 
  <p>비주얼 스튜디오에서 디버그할때 지나간 구문으로 가는 방법에 대한 이야기다.<br><br><br>안 되는 줄 알고 있었는데, 지난주에 우연히 알게 되었다-_-;;<br><br>그냥 구문 추적할때 화살표(디버그해 본 사람들은 알것이다)를 드래그해서 위로 올리면 되더라..는 것이었다.;</p>			 ]]> 
		</description>
		<category>프로그래밍</category>

		<comments>http://zeratul.egloos.com/5064402#comments</comments>
		<pubDate>Tue, 08 Sep 2009 05:28:22 GMT</pubDate>
		<dc:creator>zeratul</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 문명 시리즈의 재미요소 ]]> </title>
		<link>http://zeratul.egloos.com/5057057</link>
		<guid>http://zeratul.egloos.com/5057057</guid>
		<description>
			<![CDATA[ 
  요즘 시드마이어의 문명 2-_-를 하고 있는데,<br><br>Prince난이도(3/6단계)로 시작해서 한단계씩 올려 나가며 하는중이다.<br>옛날에 할땐 Prince난이도가 한계였는데, 지금은 King으로 한번 승리하고 Emperor단계로 순항 중이다.<br><br>문명을 하면서 사람을 이렇게까지 말리게 하는 재미요소가 무엇일까 생각을 한 번 해봤는데..<br><br>그리 깊게 생각해 본 건 아니지만 아마도 '지속적으로 선택과 결정을 하도록 하는 것'이라는 생각이 들었다.<br><br>게임을 하면 수없이 많은 결정을 내려야 한다. 어떤 트리를 타서 기술을 개발할 것인가, 도시는 어디에 지어야 하고 유닛은 어디로 탐사를 보내야 할것이며 어떤 시설물을 지을지 또는 어떤 유닛을 만들지, 어디를 개간하고 길은 어디에 만들어야 하며 전쟁은 어떤식으로 치러야 할 것인지 등등.. 계속 생각을 해야된다.<br><br>또한 결정을 내렸으면 그에 따른 결과가 어떤 지 보고 싶은게 인지상정인것이&nbsp;바로 '한 턴만 더!'를 외치게 만든다. 이래서 게임을 멈추기 힘든 법..<br><br>물론 최후반부로 가면 선택할 것이 적어지기는 해도 '무뇌 플레이'의 정도는 다른 게임들보다는 적다고 할 수 있겠다.<br><br>그래서 한 판을 끝냈을 때 다시 한 판을 시작하기에는 조금 망설여지는 것이 바로 한번 시작하면 멈추기 힘든 성질이 있어서 그런 지도 모르겠다.<br>			 ]]> 
		</description>
		<category>게임</category>

		<comments>http://zeratul.egloos.com/5057057#comments</comments>
		<pubDate>Mon, 31 Aug 2009 09:09:08 GMT</pubDate>
		<dc:creator>zeratul</dc:creator>
	</item>
	<item>
		<title><![CDATA[ GDI에서 그림파일 읽어서 쓰기 ]]> </title>
		<link>http://zeratul.egloos.com/5052194</link>
		<guid>http://zeratul.egloos.com/5052194</guid>
		<description>
			<![CDATA[ 
  <p>GDI에서 그림파일을 읽어서 출력해야 할 일이 있어서 처음에는 비트맵 파일로 제한해서 할려고 했는데-_-<br><br>알고보니 CImage란 클래스가 있어서 이것을 이용해서 bmp, jpg, gif, png등을 읽을 수 있었다.<br><br>다만 이것을 가지고 다시 비트맵으로 변환해서 출력해야 하는데.. (더 좋은 방법이 있을지도 모르지만 내가 알아낸 건 여기까지)<br><br>예제에 보면 CImage의 m_hBitmap 멤버를 이용해서 이걸 가지고 CBitmap::FromHandle()함수에 넘겨 CBitmap 포인터를 얻어오는 코드가 있다. 다만 어이없게도 m_hBitmap은 private 멤버이기 때문에 컴파일 에러가 난다-_-;;<br><br>그래서 인터넷을 뒤져 알아낸 것이 CImage::Detach()를 쓰는 것이다. 이 함수를 사용하면 비트맵 핸들을 돌려준다. (도움말을 좀더 읽었으면 알 수 있었을 것을..)<br><br>그런데 이 함수를 쓰면 CImage 객체가 해제(?) 되기 때문에 다음번에 유효하지 않게 되는 것 같다. OnDraw()에서 계속 이것을 사용해서 그려주려고 했더니 한번만 그려지고 다시 화면이 갱신될때는 안 그려진다.<br><br>그래서 다시 도움말을 봤더니 operator HBITMAP 이 있었다. 그냥 HBITMAP 변수를 선언한 후 CImage 객체를 assign 해주면 되는 것이었다. ㅋ...</p>			 ]]> 
		</description>
		<category>프로그래밍</category>

		<comments>http://zeratul.egloos.com/5052194#comments</comments>
		<pubDate>Wed, 26 Aug 2009 08:15:56 GMT</pubDate>
		<dc:creator>zeratul</dc:creator>
	</item>
	<item>
		<title><![CDATA[ GDI의 AlphaBlend() 사용. ]]> </title>
		<link>http://zeratul.egloos.com/5052186</link>
		<guid>http://zeratul.egloos.com/5052186</guid>
		<description>
			<![CDATA[ 
  GDI에 AlphaBlend란 함수가 있다.<br><br>비트맵을 알파블렌딩 처리해서 뿌려주는 함수인데.. 사용법이 녹록치 않다는 것을 알게 되었다-_-<br><br>일단 함수의 정의는 다음과 같다.<br><br><strong>BOOL AlphaBlend(</strong><br><b>&nbsp;&nbsp; int </b><i><a class="synParam" onclick="showTip(this)" href="">xDest</a></i><b>,</b><br><b>&nbsp;&nbsp; int </b><i><a class="synParam" onclick="showTip(this)" href="">yDest</a></i><b>,</b><br><b>&nbsp;&nbsp; int </b><i><a class="synParam" onclick="showTip(this)" href="">nDestWidth</a></i><b>,</b><br><b>&nbsp;&nbsp; int </b><i><a class="synParam" onclick="showTip(this)" href="">nDestHeight</a></i><b>,</b><br><b>&nbsp;&nbsp; CDC* </b><i><a class="synParam" onclick="showTip(this)" href="">pSrcDC</a></i><b>,</b><br><b>&nbsp;&nbsp; int </b><i><a class="synParam" onclick="showTip(this)" href="">xSrc</a></i><b>,</b><br><b>&nbsp;&nbsp; int </b><i><a class="synParam" onclick="showTip(this)" href="">ySrc</a></i><b>,</b><br><b>&nbsp;&nbsp; int </b><i><a class="synParam" onclick="showTip(this)" href="">nSrcWidth</a></i><b>,</b><br><b>&nbsp;&nbsp; int </b><i><a class="synParam" onclick="showTip(this)" href="">nSrcHeight</a></i><b>,</b><br><b>BLENDFUNCTION </b><i><a class="synParam" onclick="showTip(this)" href="">blend</a></i><b> </b><br><b>);</b><br><br>사용법은 보통 비트맵을 블리팅하는 것과 별반 다를 게 없다. 마지막 인자는 알파블렌딩의 정도를 정의하는 구조체인데 다음과 같다.<br><br>typedef struct _BLENDFUNCTION {<br>&nbsp; BYTE&nbsp;&nbsp;&nbsp;&nbsp; <a class="synParam" onclick="showTip(this)" href="">BlendOp</a>;<br>&nbsp; BYTE&nbsp;&nbsp;&nbsp;&nbsp; <a class="synParam" onclick="showTip(this)" href="">BlendFlags</a>;<br>&nbsp; BYTE&nbsp;&nbsp;&nbsp;&nbsp; <a class="synParam" onclick="showTip(this)" href="">SourceConstantAlpha</a>;<br>&nbsp; BYTE&nbsp;&nbsp;&nbsp;&nbsp; <a class="synParam" onclick="showTip(this)" href="">AlphaFormat</a>;<br>}BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION;<br><br>이 중에 BlendOp, BlendFlags는 도움말에 나와 있는 대로 값을 주고, SourceConstantAlpha는 0~255 사이의 값을 주면 된다. 0은 완전히 투명한 것이고, 255는 완전 불투명이며 그냥 블리팅한것과 동일하다.<br>문제는 <strong>AlphaFormat</strong>, 이 멤버인데, 도움말을 보면 줄 수 있는 값으로 AC_SRC_ALPHA란 것이 나와 있다.<br>하지만 도움말에 보면 이 값을 줄 경우 원본 비트맵이 32비트여야 한다고 나와 있다. 나는 32비트 비트맵을 구할 수가 없어서 테스트해보지는 못했다. 허나 인터넷을 약간 뒤져 본 결과 <em><strong>이 값을 0으로 주어야 한다</strong></em>는 결론을 낼 수 있었고 그렇게 하니 결과가 제대로 나왔다.<br><br>또 하나 주의할 점은 함수 인자에서 원본 비트맵과 관련된 인자에 대한 것이다.<br>함수를 호출할 때, 원본 비트맵의 x, y좌표 시작점과 너비와 높이를 주어야 하는데,&nbsp;<strong><em>x나 y축 값중 하나라도 (시작점 + 크기)가 원본 비트맵의 좌표를 넘어가면 안된다</em></strong>. 즉, 100 x 100 크기의 비트맵이 있을 때, 10, 10, 90, 90 은 괜찮지만 50, 50, 60, 60은 안된다는 것이다. 도움말에 보면 AlphaBlend함수가 미러링을 지원하지 않기 때문에 너비나 높이값이 음수가 되면 안된다고 써 있는데 아마도 그것과 관련이 있지 않나 싶다.<br><br><br>ps(수정). 뿌리려는 비트맵을&nbsp;SelectObject했을 때 받아오는 비트맵(이전 값)을, 블리팅하고 나서 다시 SelectObject해주지 않으면 제대로 출력이 되지 않는다. 주의하자.<br>			 ]]> 
		</description>
		<category>프로그래밍</category>

		<comments>http://zeratul.egloos.com/5052186#comments</comments>
		<pubDate>Wed, 26 Aug 2009 08:09:48 GMT</pubDate>
		<dc:creator>zeratul</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 문명 연대기의 문명 2 동영상 문제(Sid Meier's Civilization 2 video problem from Civilization Chronicles on Vista) ]]> </title>
		<link>http://zeratul.egloos.com/5048989</link>
		<guid>http://zeratul.egloos.com/5048989</guid>
		<description>
			<![CDATA[ 
  <p>문명 크로니클스에 있는 문명 2를 오랜만에 하는데, 비스타라서 그런지 동영상이 안나와서 인터넷 뒤져보다 혹시나 해서 호환성 모드를 98로 해놓고 하니 나온다..-_-;<br><br>Problem solved by setting compatibility mode to Windows 98.</p>			 ]]> 
		</description>
		<category>게임</category>

		<comments>http://zeratul.egloos.com/5048989#comments</comments>
		<pubDate>Sun, 23 Aug 2009 02:12:00 GMT</pubDate>
		<dc:creator>zeratul</dc:creator>
	</item>
	<item>
		<title><![CDATA[ memset과 관련된 메모리 누수잡기 ]]> </title>
		<link>http://zeratul.egloos.com/4878710</link>
		<guid>http://zeratul.egloos.com/4878710</guid>
		<description>
			<![CDATA[ 
  <p>요 며칠동안 우리 게임에서 메모리 누수가 발생해서.. 그걸 잡는 걸 하게 되었다.<br><br>이미 발생한지 며칠이 지난지라 어디서 발생하는 지를 정확히 알 수 없었는데..<br><br>그래서&nbsp;첫번째로 svn(버전 관리 프로그램)의 지난 revision으로 코드를 back시켜서 언제부터 누수가 발생하였는지 알아보려고 했다.. 다행히 어느 상황에서 발생하는 지는 거의 확실했기에 어느 버전에서부터 발생하는지는 쉽게 알아낼 수 있었다.<br><br>문제는 다음부터였다.<br>그 버전에&nbsp;주요하게 바뀐 코드는 STL 벡터와 관련된 클래스 멤버였는데..<br>처음엔&nbsp;생성자 또는 파괴자에, 아니면 복사 생성자에서 적절한 초기화나 메모리 해제가 이루어지지 않아서 발생하는 것이라 추측하였다. 문제가 되는 코드와 관련된 것을 변경하였을 때, 메모리 누수의 크기가 변하는 것으로 보아 그 부분인 것은 거의 확실하였다. 그래서 파괴자에 벡터를 클리어하는 코드를 넣어주었는데.. 변화가 없었다.<br>참고로 코드로 설명하자면..<br><br>struct A<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;int a;<br>&nbsp;&nbsp;&nbsp;&nbsp;int b;<br>};<br><br>class B<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;std::vector&lt;A&gt; m_listA;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;B( Clear() );<br>&nbsp;&nbsp;&nbsp;&nbsp;~B( Clear() );<br><br>&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;Clear()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_listA.clear();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;// blahblah..<br>};<br><br>와 같다. 원본 코드엔 파괴자가 구현이 안되어있었는데, 넣어주었음에도 불구하고 계속 메모리가 샜다.<br><br>그래서 두번째로, 다시 뒤져서, 그 버전에서 바뀐 파일이 5개였는데, 한 파일에서 어떤 코드를 삭제하면 누수가 발생하지 않는 것이었다!<br>다시 보니 그 부분은 같은 동작을 하게 만드는 다른 코드와 약간 구현이 달랐다. 그래서 다른 부분과 똑같이 맞추어 주었다. 참고로 그 부분은 네트웍에서 받거나 보내려는 구조체들을 하나의 패킷으로 만드는 부분이었다.<br>그러나.. 역시 계속 메모리 누수가 발생하였다.<br><br>처음 이 부분을 살펴볼때도, 분명히 포인터를 사용하는 곳은 한 군데도 없고 모두 auto변수로 사용하였는데, 발생할 이유가 없는데, 하면서 고민을 많이 했지만 여전히 누수는 발생하고 있었다..<br><br>그래서 다시 원점으로 돌아와서, 발생하는 상황과 발생하지 않는 상황의 차이점을 비교해보았다. (사실 처음에도 이 작업을 했지만 그땐 다른 것이 원인이라 생각했기 때문에 주의깊게 살피지 않았다.)<br><br>발생하는 상황은 게임에서 경기장에 들어갔다가, 강제로 밖으로 나온 후 종료할 때였다. 반면 경기장에 들어가지 않거나, 경기장 안에서 게임을 종료할때는 누수가 발생하지 않았다. 코드를 좀 살펴본 후, 사실은 경기장에 굳이 들어가지 않더라도 방에만 들어갔다가 로비로 나온 후에 종료할 때에도 누수가 발생하게 구현이 되어있는 것을 발견하였고, 실제로도 그럼을 확인하였다.<br><br>그러면 그 다음 일은 두 상황에서 어떤 부분이 다른가..를 살펴보는 것이었는데<br><br>문제가 되는 부분은 새로 바뀐 클래스(STL이 들어간)로 선언된 멤버 변수를 초기화하는 부분이 있었는데, 그것을 memset으로 강제로 0으로 초기화해버리는 부분이었던 것이다.. 그래서 제대로 벡터가 해제되지 않아서 메모리가 샜던 것이었다.<br><br><br></p>			 ]]> 
		</description>
		<category>프로그래밍</category>

		<comments>http://zeratul.egloos.com/4878710#comments</comments>
		<pubDate>Fri, 13 Mar 2009 16:28:48 GMT</pubDate>
		<dc:creator>zeratul</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 말할 수 없는 비밀 ]]> </title>
		<link>http://zeratul.egloos.com/4614144</link>
		<guid>http://zeratul.egloos.com/4614144</guid>
		<description>
			<![CDATA[ 
  어저께 밤에 추석특집영화로 해주는 걸 중간부터 보게되었는데,<br />
음악이 좋네..<br />
그리고 샤오위 예쁘다~ ^^ 칭이도 예쁘지만 샤오위가 더 내가 좋아하는 타입이네.<br />
다만 결말은 좀 이상(?)한게 아쉬움.. 네이버 지식인보고 든 생각은 역시 '꿈보다 해몽'이란 것..-_-;;<br />
<br />
아무튼 근래 본 영화중 가장 마음에 와 닿은 영화였다.<br />
			 ]]> 
		</description>
		<category>영화</category>

		<comments>http://zeratul.egloos.com/4614144#comments</comments>
		<pubDate>Mon, 15 Sep 2008 10:22:34 GMT</pubDate>
		<dc:creator>zeratul</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 요즘 보는것 ]]> </title>
		<link>http://zeratul.egloos.com/4604544</link>
		<guid>http://zeratul.egloos.com/4604544</guid>
		<description>
			<![CDATA[ 
  Stargate SG-1을 보고있다. 지금은 시즌 2..<br />
<br />
회사 같은팀에 스타게이트 매니아이신 분이 계셔서 스타게이트이야기를 자주 하시는데 그때마다 보라고 하셨는데, 그 많은걸 찾아서 볼 순 없고 가져다주면 보겠다고 했는데 어느날 정말로DVD로 구운걸 가져오셔서 그때부터 보고있다(팀중에서 나만..-_-).<br />
<br />
Stargate Atlantis부터 보는게 재미붙이기 좋을거라고 아틀란티스 시즌 2까지 보고, 지금은 SG-1을 보고있다. 시즌 1 처음부터..-_-<br />
<br />
SG-1이랑 Atlantis 나온거 다보려면 대략 220편 정도 남은듯;<br />
요새 하루에 4편정도씩 보니까 2달은 넘게 걸리겠군.. 안쓰던 PSP에다가 인코딩해서 넣어 가지고 출퇴근할때 보면 대충 그정도;			 ]]> 
		</description>
		<category>잡담</category>

		<comments>http://zeratul.egloos.com/4604544#comments</comments>
		<pubDate>Tue, 09 Sep 2008 15:49:31 GMT</pubDate>
		<dc:creator>zeratul</dc:creator>
	</item>
</channel>
</rss>
