<?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>[Kopernikanische Wendung]</title>
	<link>http://devaura.egloos.com</link>
	<description>I need Kopernikanische Wendung!!</description>
	<language>ko</language>
	<pubDate>Fri, 28 Nov 2008 14:30:41 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>[Kopernikanische Wendung]</title>
		<url>http://pds8.egloos.com/logo/200806/28/36/f0011636.jpg</url>
		<link>http://devaura.egloos.com</link>
		<width>80</width>
		<height>107</height>
		<description>I need Kopernikanische Wendung!!</description>
	</image>
  	<item>
		<title><![CDATA[ To be a Smart Corder.. ]]> </title>
		<link>http://devaura.egloos.com/544950</link>
		<guid>http://devaura.egloos.com/544950</guid>
		<description>
			<![CDATA[ 
  "Hey Bob - how's it going at UberGameSoft?"<br />
"Hey Tom - it's goingwell. I'm figuring out a neat HDR system, Jim's doing a cool physicsengine, and Frank's got some awesome post-processing effects."<br />
"Cool. So you guys must be well into production by now, right?"<br />
"Kinda,but not really. We still have trouble with the whole export pipelineand there's a lot of pain getting assets into the game."<br />
<br />
At this point, I usually start yelling at people and preparing another ranty blog entry. And thus...<br />
<br />
There'sa bunch of stuff that is neat, and it's geekily cool, and we asengineers all love to play with them and they generate some killer GDCtalks and suchlike. But they're all unimportant next to the stuff thatis necessary to <strong>ship the game</strong>. We're now looking at team sizes of 50-150 people for 2-4 years, and that's a lot of assets.<br />
<br />
Youneed the smartest coders in the building to be making sure thateveryone else can work efficiently. And that means they're toolscoders. Yes, "tools" - don't look at me like I said a dirty word.<br />
<br />
Theproblem is that at heart a lot of us are still bedroom hackers. Andthat's a great mentality to have - it keeps us honest. But at thosenumbers, you have to have some of the dreaded word - "management". Butwe're smarter than the average bear, so we can use geek management, not<a target="_blank" title="External link to http://en.wikipedia.org/wiki/Pointy_Haired_Boss" href="http://en.wikipedia.org/wiki/Pointy_Haired_Boss" class="externalLink">PHB</a>management. And it's not management of people so much as management ofdata. Good people who like the work they do and the people they workwith will generally manage themselves pretty well. The problems comewhen the data flowing between them sets up dependencies. Now obviouslythat's inevitable - but people can cope with obvious dependencies -like you can't animate a character very well until the rigging is doneor whatever.<br />
<br />
The problem is dependencies that aren't as obvious.They're obvious to us coders, because we're the ones who write thesystems. And unfortunately the easiest way to write most systems is tohave all the source data available at once, throw it in a bigpost-processing hopper and out comes the DVD image, and then we shipit. Fairly obviously, this is a disaster in practice. So instead weneed to think carefully about the chain of dependencies and how we canisolate one person's changes from another, and allow people to work onrelated objects at the same time without getting stalled.<br />
<br />
Thisis almost exactly the other big problem coders are facing - parallelprocessing. And we all know that parallel processing is really reallydifficult, so we put our smartest coders on the problem. And the sameshould happen with the tools - it's an even bigger parallel processingchallenge, and the problem is not as well-defined as "make the physicsgo faster" because half the time when you start a game you don'tactually know where you're going.<br />
<br />
So I'm going to do some moreposts on some of the detailed aspects once I get them straight in myhead. But the big message is really that the old days of the hero-codersaving the day with leet gfx skillz are over. Shaders just aren't thatdifficult to write, HDR is a matter of detailed book-keeping, andshadows may be a pain in the arse but they're not fundamentally goingto make or break your game. Good asset management on the other hand canmean the difference between shipping and going bankrupt. That's whatthe new breed of hero-coder needs to focus on.<br />
<br />
-- from TomF`s Tech Blog<br />
<br/><br/>tag : <a href="/tag/smartcorder" rel="tag">smartcorder</a>			 ]]> 
		</description>
		<category>Gossip</category>
		<category>smartcorder</category>

		<comments>http://devaura.egloos.com/544950#comments</comments>
		<pubDate>Sat, 01 Aug 2009 04:19:00 GMT</pubDate>
		<dc:creator>Devaura</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 사발식 ]]> </title>
		<link>http://devaura.egloos.com/1190987</link>
		<guid>http://devaura.egloos.com/1190987</guid>
		<description>
			<![CDATA[ 
  <div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds13.egloos.com/pds/200811/28/36/f0011636_492f78b335369.jpg" width="500" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds13.egloos.com/pds/200811/28/36/f0011636_492f78b335369.jpg');" /></div><br>팀을 옮기고 집들이겸 간 자리에서 이루어진 "사발식"<br>목숨을 걸고 받은 사발이기에 그만큼 진한 동료애를 느낄수 있었다는..<br>뭐 결국 드래곤바이트를 쏴 대야 했지만..^^<br/><br/>tag : <a href="/tag/사발" rel="tag">사발</a>,&nbsp;<a href="/tag/H3" rel="tag">H3</a>			 ]]> 
		</description>
		<category>Dairy Floating</category>
		<category>사발</category>
		<category>H3</category>

		<comments>http://devaura.egloos.com/1190987#comments</comments>
		<pubDate>Fri, 28 Nov 2008 04:51:13 GMT</pubDate>
		<dc:creator>Devaura</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Observer Patten ]]> </title>
		<link>http://devaura.egloos.com/1188470</link>
		<guid>http://devaura.egloos.com/1188470</guid>
		<description>
			<![CDATA[ 
  <p>character 관련 FSM 을 realization 하면서 와우정도의 상태머신은 아니더라도, 국내 출시작인 AION만큼의 상태체크를 하고 싶어서</p><p>요새 새로운 Task를 진행하면서도 character에 관하여 가장 중요하다고 할수 있는 status machine 이기에 꾸준히 </p><p>Improve 하던중 우연잖게 좋은글을 보고 동감하는 부분이 있어 링크를 겁니다.</p><p></p><p>-----------------------------------------------------------------------------------------------------------</p><p>[origin likn : http://www.gisdeveloper.co.kr/entry/Template을-이용한-Observer-패턴-1단계]</p><p>C++의 template을 이용해서 Observer를 구현하는 것에 대한 단계적 설명입니다. 원본은 데브피아에서 김태현(tipani)님이 올려 놓으신 글을 기반으로 작성했으며 한단계 더 업그레이드 했습니다. 제가 늘 느껴오는 것이지만 C++의 template은 기존의 클래스간 관계도에 한정해 볼적에 그 디자인을 획기적으로 개선한다는 점에서 그 판도를 확 바꿀 수 있는 강력한 개념이라고 생각합니다. 아무쪼록 제가 김태현님의 글을 보고 매우 재미있게 template에 한발짝 다가섯듯이 여러분도 제 글을 통해 template에 한발짝 다가 설수있다면 정말 기쁘겠습니다. 참고로 이 글을 읽기 전에 Observer 패턴이 무엇인지 패턴입문서를 살펴보시길 바랍니다. 또한 이 글의 진행은 단계 단계 개선해 나가는 흐름으로 진행된다는 점에 유의하시길 바랍니다.<br><br>먼저 1단계입니다. 아래의 코드는 Observer들의 관리에 대한 책임을 맡고 있는 Observed 클래스입니다.<br><br>template &lt;class T&gt;<br>class Observed {<br>public:<br>    Observed() {}<br>    typedef std::list&lt;T *&gt; typeObservers;<br>    virtual ~Observed() {}<br><br>    void RegisterObserver(T *pOb) {<br>        m_listObserver.push_back( pOb );<br>    }<br><br>    void UnRegisterObserver(T *pOb) {<br>        m_listObserver.remove(pOb);<br>    }<br><br>protected:<br>    typeObservers m_listObserver;<br><br>};<br>Observed가 관리하는 Observer 클래스인 Observabe 입니다. 단순히 Observed가 호출할 Observer의 OnEvent 함수가 순수가상함수로 선언되어 있습니다.<br><br>class Observable {<br>    virtual void OnEvent(int a) = 0;<br>};<br>그리고 아래는 Obserable를 상속받아 구현한 클래스들입니다.<br><br>class Observable_A : public Observable<br>{<br>    virtual void OnEvent(int a) {<br>        std::cout &lt;&lt; "Fire_A -&gt; " &lt;&lt; a &lt;&lt; std::endl;<br>    }<br>};<br><br>class Observable_B : public Observable<br>{<br>    virtual void OnEvent(int a) {<br>        std::cout &lt;&lt; "Fire_B -&gt; " &lt;&lt; a &lt;&lt; std::endl;<br>    }<br>};<br>이제 마지막으로 Observed가 자신이 관리하고 있는 Observable의 OnEvent를 호출해 줘야 하는데, Observed 클래스는 자신이 관리하고 있는 Observable의 타입을 모르기 때문에 Observed와 Observable의 관계를 연결해 주기 위한, Observed로부터 상속받은 EventSrc 클래스가 필요합니다.<br><br>class EventSrc : public Observed&lt;Observable&gt;<br>{<br>    void Fire(int a)<br>    {<br>        typeObservers::itrator it;<br>        for(it=m_listObserver.begint(); it!=m_listObserver.end; ++it) {<br>            (*it)-&gt;OnEvent(a);<br>        }<br>    }<br>};<br>드디어 1단계의 Observer 패턴의 구현이 완성되었습니다. 실제 사용하는 예는 다음과 같습니다.<br><br>int main() {<br>    EventSrc *pES = new EventSrc();<br>    Observable *pO_A = new Observale_A();<br>    Observable *pO_B = new Observale_B();<br><br>    pES-&gt;RegisterObserver(pOA);<br>    pES-&gt;RegisterObserver(pOB);<br><br>    pES-&gt;Fire(99);<br><br><br>    delete pO_B;<br>    delete pO_A;<br>    delete pES;<br><br>    return 0;<br>}<br>1단계에서 산출된 소스만으로도 충분할 수도 있겠지만, 큰 문제점이 하나 있습니다. 그것은 바로 SRP(Single Responsiblity Principle)를 위반한다는 사실입니다. 즉, Obserable를 관리하는 책임을 Observed와 EventSrc라는 두개의 클래스가 책임을 나눠서 지고 있다는 점입니다. 그럴수밖에 없는 이유는 본문에 언급을 했구요. <br><br>이제 다음 2단계 이후부터는 이러한 SRP의 원칙을 지켜나가는 것을 해결문제로 다뤄나가면서 점차적으로 개선된 Observer 패턴을 구현해보겠습니다.<br><br>이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰~ 힘이 됩니다. ^^*<br><br></p><br/><br/>tag : <a href="/tag/FSM" rel="tag">FSM</a>,&nbsp;<a href="/tag/Observer" rel="tag">Observer</a>			 ]]> 
		</description>
		<category>Do Job</category>
		<category>FSM</category>
		<category>Observer</category>

		<comments>http://devaura.egloos.com/1188470#comments</comments>
		<pubDate>Thu, 27 Nov 2008 13:24:05 GMT</pubDate>
		<dc:creator>Devaura</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 젠장남?!;; 놀이 ]]> </title>
		<link>http://devaura.egloos.com/631641</link>
		<guid>http://devaura.egloos.com/631641</guid>
		<description>
			<![CDATA[ 
  <div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds6.egloos.com/pds/200807/27/36/f0011636_488c73661cb19.jpg" width="360" height="327" onclick="Control.Modal.openDialog(this, event, 'http://pds6.egloos.com/pds/200807/27/36/f0011636_488c73661cb19.jpg');" /></div><br>종종 점심을 나가서 먹을때가 있다..점심을 먹으며 우연히 나온 된장남놀이 이야기..<br>우리도 멋지게 그날 점심먹고 된장남 놀이를 했다..커피빈에서..<br>손에는 멋지게 커피빈을 들고,,,,<br>허나 발에는 아주 헝그리한 슬리퍼가 신켜져 있었다는...^^<br/><br/>tag : <a href="/tag/커피빈" rel="tag">커피빈</a>,&nbsp;<a href="/tag/젠장남놀이ㅎㅎ" rel="tag">젠장남놀이ㅎㅎ</a>			 ]]> 
		</description>
		<category>커피빈</category>
		<category>젠장남놀이ㅎㅎ</category>

		<comments>http://devaura.egloos.com/631641#comments</comments>
		<pubDate>Sun, 27 Jul 2008 13:11:08 GMT</pubDate>
		<dc:creator>Devaura</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 추억의 회상 ]]> </title>
		<link>http://devaura.egloos.com/631616</link>
		<guid>http://devaura.egloos.com/631616</guid>
		<description>
			<![CDATA[ 
  <div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds9.egloos.com/pds/200807/27/36/f0011636_488c728b2b8bd.jpg" width="338" height="320" onclick="Control.Modal.openDialog(this, event, 'http://pds9.egloos.com/pds/200807/27/36/f0011636_488c728b2b8bd.jpg');" /></div><br>이런 저런 수식의 계산으로 펜을 잡을 일이 많다..<br>처음엔 샤프에 볼펜을 사용했었으나, 아들녀석이 연필을 지는것을 보고 하나 몰래 훔쳐서(?!^^;) 요즘엔 연필을 사용하고 있다.<br>볼펜이나 샤프를 사용하는 것 보다 힘도 덜 들어가고 그립감도 좋고...<br>훗 훗 무엇보다 종종 연필을 깍을 때면 예전 군대에서 총을 닦던 느낌이랄까?!<br>웬지 집중도 되는것 같고, 스트레스도 풀리는것 같고..<br>옛 추억이 회상되는듯 해서 앞으로도 쭈~욱 연필을 사용할 듯 하다.<br/><br/>tag : <a href="/tag/연필" rel="tag">연필</a>,&nbsp;<a href="/tag/추억" rel="tag">추억</a>			 ]]> 
		</description>
		<category>Gossip</category>
		<category>연필</category>
		<category>추억</category>

		<comments>http://devaura.egloos.com/631616#comments</comments>
		<pubDate>Sun, 27 Jul 2008 13:08:18 GMT</pubDate>
		<dc:creator>Devaura</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 가족 사진 모음^^ ]]> </title>
		<link>http://devaura.egloos.com/627859</link>
		<guid>http://devaura.egloos.com/627859</guid>
		<description>
			<![CDATA[ 
  <div class="photo_left2" style="float: left; padding: 0 5px;"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0" width="402" height="363">	<param name="movie" value="http://edt.egloos.com:8080/edt/EglooPhotoSlide.lzx?lzt=swf&eid=f0011636&nid=devaura&srl=21292">	<param name="scale" value="noscale">	<param name="quality" value="high">	<param name="menu" value="false">	<param name="salign" value="lt">	<param name="width" value="600">	<param name="height" value="530">	<param name="allowscriptaccess" value="always">		<embed src="http://edt.egloos.com:8080/edt/EglooPhotoSlide.lzx?lzt=swf&eid=f0011636&nid=devaura&srl=21292" quality="high" scale="noscale" salign="LT" width="402" height="363" type="application/x-shockwave-flash" allowscriptaccess="always" pluginpage="http://macromedia.com/go/getflashplayer"></embed></object></div><br clear="all" /><br><div style="TEXT-ALIGN: center"></div><br/><br/>tag : <a href="/tag/행복한이들" rel="tag">행복한이들</a>,&nbsp;<a href="/tag/우리가족" rel="tag">우리가족</a>,&nbsp;<a href="/tag/가족사진" rel="tag">가족사진</a>			 ]]> 
		</description>
		<category>행복한이들</category>
		<category>우리가족</category>
		<category>가족사진</category>

		<comments>http://devaura.egloos.com/627859#comments</comments>
		<pubDate>Sat, 26 Jul 2008 14:30:09 GMT</pubDate>
		<dc:creator>Devaura</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Doxygen 설치및 설정 ]]> </title>
		<link>http://devaura.egloos.com/623058</link>
		<guid>http://devaura.egloos.com/623058</guid>
		<description>
			<![CDATA[ 
  Doxygen 설치 부터, 사용법 까지 간단한 매뉴얼을 제작해 보려 했는데, 검색하다 보니 정리가 잘 된 사이트가 있어서<br>"수레바퀴는 다시 개발하지 않는다" 란 모토하에 링크로 대처합니다.<br><a title="" href="http://woohaha.egloos.com/260149"><br>Doxygen으로 프로젝트 문서화하기</a>&nbsp;: 작성자님의 수고에 감사말씀드리고요.^^<br><br>&nbsp;- 뭐 Doxygen 말고도 Kingtools 라는 .Net 에 맞춰나온 툴도 있습니다.<br>그래서 저 같은 경우는 .Net 에서는 Kingtools 를 그리고 툴관련 코딩 할때 VC6++ 을 사용할때는 Doxygen 을 사용합니다.<br/><br/>tag : <a href="/tag/Doxygen" rel="tag">Doxygen</a>,&nbsp;<a href="/tag/KingTools" rel="tag">KingTools</a>,&nbsp;<a href="/tag/문서화작업" rel="tag">문서화작업</a>			 ]]> 
		</description>
		<category>Do Job</category>
		<category>Doxygen</category>
		<category>KingTools</category>
		<category>문서화작업</category>

		<comments>http://devaura.egloos.com/623058#comments</comments>
		<pubDate>Fri, 25 Jul 2008 06:33:30 GMT</pubDate>
		<dc:creator>Devaura</dc:creator>
	</item>
	<item>
		<title><![CDATA[ RTTI, CRuntimeClass ]]> </title>
		<link>http://devaura.egloos.com/617846</link>
		<guid>http://devaura.egloos.com/617846</guid>
		<description>
			<![CDATA[ 
  요즘 Effect관련해서 렌더하는데 렉을 유발한다고 해서 이펙트관련 툴들을 수술하고 있다..<br />
근데..항상 알고 있다고 생각하는 몇몇의 MFC 매크로의 혼동으로 종종 MFC관련 작업을 진행할 때 마다 검색을 해 보게 되는듯 하다<br />
그래서 간단하게 나 자신만을 위한 Document 작업을 해 보려한다. 이하는 업무일지로 작성하는 DOC에서 일부 발췌한것이다.(이늠의&nbsp; VNC를 통하여 뭘 하려면 제대로 되는게 없다..;;)<br />
<br />
<h2 class="cjk"><font face="Nimbus Roman No9 L, serif">CRuntimeClass 이란?</font></h2><br />
<br />
<style type="text/css">	<!--		@page { size: 21cm 29.7cm; margin: 2cm }		H2 { margin-top: 0cm; margin-bottom: 0cm; text-align: left }		H2.western { font-family: "Nimbus Roman No9 L", serif; font-size: 14pt; font-weight: medium }		H2.cjk { font-family: "DejaVu Sans"; font-size: 14pt; font-style: normal; font-weight: medium }		H2.ctl { font-family: "Lucidasans"; font-size: 14pt; font-weight: medium }		P { margin-bottom: 0.21cm }	-->	</style><p style="margin-bottom: 0cm;">► <font face="Nimbus Roman No9 L, serif">CRuntimeClass</font>는 본질적으로 특정 클래스에 대한 정보를 담고있는 구조체이다<font face="Nimbus Roman No9 L, serif">. RTTI</font>는컴파일러 레벨에서 제공되는 반면<font face="Nimbus Roman No9 L, serif">,CRuntimeClass </font>는 <font face="Nimbus Roman No9 L, serif">MFC</font>에서제공된다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;">또한 <font face="Nimbus Roman No9 L, serif">RTTI</font>와달리 객체 생성 기능<font face="Nimbus Roman No9 L, serif">,</font>객체 저장을 위한 직렬화 기능도 제공을 한다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;">▪ <b>일반화된 객체 생성 </b><font face="Nimbus Roman No9 L, serif"><b>:</b></font><b>클래스 이름을 사용하지 않고 객체를 생성하는기능</b></p><p style="margin-bottom: 0cm;">▪ <b>메모리 상의 객체 자료형검사 </b><font face="Nimbus Roman No9 L, serif"><b>: RTTI </b></font><b>와같은 기능</b></p><p style="margin-bottom: 0cm;">▪ <b>메모리 상의 객체 데이터유효성 검사 </b><font face="Nimbus Roman No9 L, serif"><b>: </b></font><b>메모리상에서의 유효한 영역을 점유하고 있는지 검사</b></p><p style="margin-bottom: 0cm;">▪ <b>객체 직렬화 및 이를 위한정보 제공 </b><font face="Nimbus Roman No9 L, serif"><b>: </b></font><b>객체를저장 매체에 일관된 방법으로 저장하는 기능</b></p><h2 class="cjk"><br />
</h2><h2 class="cjk"><font face="Nimbus Roman No9 L, serif">CRuntimeClass</font>사용 요구 조건<font face="Nimbus Roman No9 L, serif">.</font></h2><br />
<br />
<p style="margin-bottom: 0cm;">► <font face="Nimbus Roman No9 L, serif">CRuntimeClass</font>구조체를 클래스의 정적 멤버 변수로 선언해야한다<font face="Nimbus Roman No9 L, serif">.</font>일반 멤버변수는 객체가 생성되어야 사용을 할 수가 있다<font face="Nimbus Roman No9 L, serif">.</font>객체가생성되지 않은 상태에서도 사용할 수 있어야 하므로정적 멤버로 선언한다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;">	<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">	<title></title>	<meta name="GENERATOR" content="OpenOffice.org 2.3  (Linux)">	<style type="text/css">	<!--		@page { size: 21cm 29.7cm; margin: 2cm }		P { margin-bottom: 0.21cm }	-->	</style></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">MFC</font>는<font face="Nimbus Roman No9 L, serif">CRuntimeClass </font>를 <b>정적멤버로 쉽게 선언</b>할 수 있도록 세 종류의 매크로를제공한다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">이하는 다음에...VNC.. ㅎㄷㄷ 훗훗..<br />
</font></p><p></p><br />
<br />
<br/><br/>tag : <a href="/tag/RTTI" rel="tag">RTTI</a>,&nbsp;<a href="/tag/CRuntimeClass" rel="tag">CRuntimeClass</a>			 ]]> 
		</description>
		<category>Do Job</category>
		<category>RTTI</category>
		<category>CRuntimeClass</category>

		<comments>http://devaura.egloos.com/617846#comments</comments>
		<pubDate>Thu, 24 Jul 2008 02:15:18 GMT</pubDate>
		<dc:creator>Devaura</dc:creator>
	</item>
	<item>
		<title><![CDATA[ VerQueryValue _ 불법 유저여 아디오스~~^^ ]]> </title>
		<link>http://devaura.egloos.com/617803</link>
		<guid>http://devaura.egloos.com/617803</guid>
		<description>
			<![CDATA[ 
  	<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">	<title></title>	<meta name="GENERATOR" content="OpenOffice.org 2.3  (Linux)">	<style type="text/css">	<!--		@page { size: 21cm 29.7cm; margin: 2cm }		P { margin-bottom: 0.21cm }	-->	</style><p style="margin-bottom: 0cm;">► 종종 라이브 업데이트 일을하다 보면 분명 작업을 해서 배포를 했는데,거짓말과도 비슷한 버그 리포팅이 들어올때가 한두번이 아니다<font face="Nimbus Roman No9 L, serif">..</font></p><p style="margin-bottom: 0cm;">그래서 생각을 한게 레지나정보파일을 따로 둬서 버젼체크를 하는 방식이 아니고<font face="Nimbus Roman No9 L, serif">,(요즘 어지간한 유저들은 레지를 만져 버젼이나 기타 정보를 수정함으로서 업그레이드 서버를 안 거치고 그냥 인증으로 가는 경우가 많은듯 하다...;;;)</font>클라이언트 파일 자체에 버젼 리소스를 할당함으로써 버젼체크를 하도록 구조를 변경하였다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;">이제 거짓말장이 유저와 거짓말장이운영진과도 안녕이군<font face="Nimbus Roman No9 L, serif">..</font>하하하<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;">이하는 아주 간단하게 <font face="Nimbus Roman No9 L, serif">WinEntry</font>에서 버젼리소스의 값을 검사한 코드이다<font face="Nimbus Roman No9 L, serif">....</font></p><p style="margin-bottom: 0cm;">또한 안정성을 위해서 역시런쳐에서도 이와 비슷한 작업을 해 주었다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;"><br />
</p><font face="Nimbus Roman No9 L, serif"><font color="#0000ff"><b>TCHAR	szPath[_MAX_PATH];</b></font></font><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>///search directory</b></font></font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif"><font color="#0000ff"><b>GetModuleFileName(0,szPath, _MAX_PATH);</b></font></font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif"><font color="#0000ff"><b>DWORD	dwSize = GetFileVersionInfoSize(szPath, 0); </b></font></font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif"><font color="#0000ff"><b>LPVOID	lpData = malloc(dwSize); </b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>///Get fileversioninfo resource</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>GetFileVersionInfo(szPath,0, dwSize, lpData); </b></font></font></p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>structLANGANDCODEPAGE</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>{</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>&nbsp;&nbsp;&nbsp;&nbsp;	WORDwLanguage;</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>&nbsp;&nbsp;&nbsp;&nbsp;	WORDwCodePage;</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>}*lpTranslate;</b></font></font></p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>UINTcbTranslate = 0;</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>VerQueryValue(lpData,_T("\\VarFileInfo\\Translation"), (void**)&amp;lpTranslate,&amp;cbTranslate);</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>TCHARszKey[256];</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>_stprintf(szKey,_T("\\StringFileInfo\\%04x%04x\\FileVersion"),</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>	lpTranslate-&gt;wLanguage,lpTranslate-&gt;wCodePage);</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>TCHAR*pszValue = 0;</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>UINTuLen;</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>VerQueryValue(lpData,szKey, (void**)&amp;pszValue, &amp;uLen);</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>//_putts(pszValue);</b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>free(lpData);</b></font></font></p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;"><font color="#000000">함수의원형이다<font face="Nimbus Roman No9 L, serif">... </font>다른함수의 원형에 대해서도 궁금하시면<font face="Nimbus Roman No9 L, serif">...MSDN</font>을 만나세요<font face="Nimbus Roman No9 L, serif">..^^</font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>boolAPIENTRY VerQueryValue( const LPVOID pBlock, LPSTR lpSubBlock,LPVOID* lplpBuffer, </b></font></font></p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>			PUINTpuLen);</b></font></font></p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;"><font color="#0000ff"><font face="Nimbus Roman No9 L, serif"><b>앗 하나더 중요한것이 ...#pragma comment (lib, "version.lib") 훗훗<br />
</b></font></font></p><p style="margin-bottom: 0cm;"><br />
</p><br/><br/>tag : <a href="/tag/파일버젼" rel="tag">파일버젼</a>,&nbsp;<a href="/tag/VerQueryValue" rel="tag">VerQueryValue</a>,&nbsp;<a href="/tag/GetFileVersionInfo" rel="tag">GetFileVersionInfo</a>,&nbsp;<a href="/tag/뻥쟁이유저" rel="tag">뻥쟁이유저</a>			 ]]> 
		</description>
		<category>Do Job</category>
		<category>파일버젼</category>
		<category>VerQueryValue</category>
		<category>GetFileVersionInfo</category>
		<category>뻥쟁이유저</category>

		<comments>http://devaura.egloos.com/617803#comments</comments>
		<pubDate>Thu, 24 Jul 2008 02:05:02 GMT</pubDate>
		<dc:creator>Devaura</dc:creator>
	</item>
	<item>
		<title><![CDATA[ effective ]]> </title>
		<link>http://devaura.egloos.com/617750</link>
		<guid>http://devaura.egloos.com/617750</guid>
		<description>
			<![CDATA[ 
  	<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">	<title></title>	<meta name="GENERATOR" content="OpenOffice.org 2.3  (Linux)">	<style type="text/css">	<!--		@page { size: 21cm 29.7cm; margin: 2cm }		P { margin-bottom: 0.21cm }	-->	</style><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">[</font>항목<font face="Nimbus Roman No9 L, serif">.5]</font>컴파일러가 만드는 함수들을 주의하자<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;">► 컴파일러는 기본적으로 복사생성자<font face="Nimbus Roman No9 L, serif">, </font>복사 대입연산자를 선언하지 않고 외부에서 호출할 경우 자동으로<font face="Nimbus Roman No9 L, serif">public </font>선언을 한다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;">► 참조자를 멤버로 갖고 있는클래스에 대입연산을 지원하려면 직접 복사 대입연산자를 정의해 주어야 한다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">ex)</font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">classDev{</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">public:</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">string&amp;m_strName;</font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">}</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">Deva;</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">Devb;</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">a= b;</font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif"><br />
</font></p><p style="margin-bottom: 0cm;">컴파일 에러 <font face="Nimbus Roman No9 L, serif">:C++</font>참조자는 원래 자신이 참조하고 있는 것과 다른객체를 참조할수 없다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;">► 상수 멤버에 대해서도 위와같은 동작을 한다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">[</font>항목<font face="Nimbus Roman No9 L, serif">.6]</font>컴파일러가만들어낸 함수가 필요 없으면 확실히 이들의 사용을막자<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;">► 컴파일러는 복사 생성자<font face="Nimbus Roman No9 L, serif">,</font>복사 대입 연산자를 자동으로 <font face="Nimbus Roman No9 L, serif">public</font>선언을할수 있다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;">그러므로<font face="Nimbus Roman No9 L, serif">,</font>해당 클래스에 대해서 복사관련 작업을 막고싶다면<font face="Nimbus Roman No9 L, serif">, </font>직접<font face="Nimbus Roman No9 L, serif">Private</font>로 선언하자<font face="Nimbus Roman No9 L, serif">.</font></p><br />
<p style="margin-bottom: 0cm;">► 하지만 위와 같이 할경우 또하나의 문제는 멤버로써 호출을 하거나<font face="Nimbus Roman No9 L, serif">,friend </font>함수가 호출될수 있다<font face="Nimbus Roman No9 L, serif">....</font>그래서선언만 하되 정의는 하지 않는 방법이 있다<font face="Nimbus Roman No9 L, serif">.</font></p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">ex)</font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">classDev{</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">private:</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">Dev(constDev&amp;);</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">Dev&amp;operator=(const Dev&amp;);</font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">}</font></p><p style="margin-bottom: 0cm;">	<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">	<title></title>	<meta name="GENERATOR" content="OpenOffice.org 2.3  (Linux)">	<style type="text/css">	<!--		@page { size: 21cm 29.7cm; margin: 2cm }		P { margin-bottom: 0.21cm }	-->	</style></p><p style="margin-bottom: 0cm;">► 더좋은 방법 <font face="Nimbus Roman No9 L, serif">:</font>링크시의 에러를 컴파일시로 옮겨보자<font face="Nimbus Roman No9 L, serif">..</font>에러를빨리 잡자<font face="Nimbus Roman No9 L, serif">..</font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">ex)</font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">classUnCopy{</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">procted:</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">UnCopy(){}</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">~UnCopy(){}</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">private:</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">UnCopy(constUnCopy&amp;);</font></p><p style="margin-bottom: 0cm;"> <font face="Nimbus Roman No9 L, serif">UnCopy&amp;operator=(const UnCopy&amp;);</font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">}</font></p><p style="margin-bottom: 0cm;"><font face="Nimbus Roman No9 L, serif">classDev : private UnCopy{ ... }</font></p><p style="margin-bottom: 0cm;"><br />
</p><p style="margin-bottom: 0cm;">► 위와 같이 기본 클래스를상속하여서 사용한다면<font face="Nimbus Roman No9 L, serif">......</font>멤버로써호출이 안 된다<font face="Nimbus Roman No9 L, serif">.</font></p><p></p><p style="margin-bottom: 0cm;"><br />
</p><br/><br/>tag : <a href="/tag/effective" rel="tag">effective</a>			 ]]> 
		</description>
		<category>Dairy Floating</category>
		<category>effective</category>

		<comments>http://devaura.egloos.com/617750#comments</comments>
		<pubDate>Thu, 24 Jul 2008 01:51:04 GMT</pubDate>
		<dc:creator>Devaura</dc:creator>
	</item>
</channel>
</rss>
