<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<title><![CDATA[Love Never Fails!]]></title>
<description><![CDATA[파란 하늘, 기억 하는 사람에게 또 기억하고 싶은 사람들에게, 새로운 추억을 만들어 가는 인생, 그래서 나눌 것이 많은 인생이고 싶습니다.]]></description>
<link>http://kr.blog.yahoo.com/isadrastea</link>
<language>ko</language>
<image>
    <title><![CDATA[Love Never Fails!]]></title>
    <url>http://img.yahoo.co.kr/blog/manage/banner_img01.gif</url>
    <description><![CDATA[파란 하늘, 기억 하는 사람에게 또 기억하고 싶은 사람들에게, 새로운 추억을 만들어 가는 인생, 그래서 나눌 것이 많은 인생이고 싶습니다.]]></description>
    <link>http://kr.blog.yahoo.com/isadrastea</link>
</image>
<item>
    <title><![CDATA[젊음과 멋 - OtherSide]]></title>
    <description>
        &lt;embed allowscriptaccess=&quot;never&quot;  src=&quot;http://www.youtube.com/v/nk5Vg_LpILM&amp;amp;hl=ko_KR&amp;amp;fs=1&amp;amp;&quot; width=&quot;425&quot; height=&quot;344&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;br&gt;&lt;br&gt;&lt;embed allowscriptaccess=&quot;never&quot;  src=&quot;http://www.youtube.com/v/bp1PMo3s0dw&amp;amp;hl=ko_KR&amp;amp;fs=1&amp;amp;&quot; width=&quot;425&quot; height=&quot;344&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot;&gt; &lt;/embed&gt;&lt;br&gt;&lt;br&gt;&lt;embed allowscriptaccess=&quot;never&quot;  src=&quot;http://www.youtube.com/v/NzVD_sb9-_I&amp;amp;hl=ko_KR&amp;amp;fs=1&amp;amp;&quot; width=&quot;425&quot; height=&quot;344&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;젊음... 그리고, 멋, 시간이 갈수록 무르 익는 것은 멋인가보다.&lt;br&gt;얼마나 얼마나 더 흘러야...가사를 음미해 보시기 바랍니다. 젊음...&lt;br&gt;&lt;/embed&gt;
    </description>
    <link>http://kr.rd.yahoo.com/community/blog/myblog/rss/mesg20/*http://kr.blog.yahoo.com/isadrastea/1309464</link>
    <guid>http://kr.blog.yahoo.com/isadrastea/1309464</guid>
    <pubDate>Mon, 08 Feb 2010 23:14:13 +0900</pubDate>
    <category><![CDATA[바람]]></category>
</item>
<item>
    <title><![CDATA[Take me to your heart]]></title>
    <description>
        &lt;embed allowscriptaccess=&quot;never&quot;  src=&quot;http://www.youtube.com/v/BdCpASsqPuk&amp;amp;hl=ko_KR&amp;amp;fs=1&amp;amp;&quot; width=&quot;425&quot; height=&quot;344&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;사람을 사랑한다는 것은 참으로 힘들고, 또 간혹 예상외의 결과를 가져오기도 한다.&lt;br&gt;그러나, 그것은 분명 가치 있는 일이고, 아름다운 행위이다.&lt;br&gt;&lt;br&gt;사람을 믿는다는 것은 자신을 신뢰하는 것이고, 그를&amp;nbsp;사람으로 사랑하기 때문이다.&lt;br&gt;인생 그것은 몇번의 기회를 가져다 준다. 그 중에 최고의 기회는 누군가를 사랑할 수 있는 것이다.&lt;br&gt;&lt;/embed&gt;
    </description>
    <link>http://kr.rd.yahoo.com/community/blog/myblog/rss/mesg20/*http://kr.blog.yahoo.com/isadrastea/1309463</link>
    <guid>http://kr.blog.yahoo.com/isadrastea/1309463</guid>
    <pubDate>Sun, 07 Feb 2010 21:29:46 +0900</pubDate>
    <category><![CDATA[바람]]></category>
</item>
<item>
    <title><![CDATA[Open Source 와 Library 개발 - 24]]></title>
    <description>
        &lt;font style=&quot;FONT-SIZE:12pt;&quot; color=&quot;#0000ff&quot;&gt;&lt;strong&gt;&lt;u&gt;Chip Select Unit 을 이용한 Extension Board 의 Port Assign 과 Access 방법&lt;br&gt;&lt;br&gt;&lt;/u&gt;&lt;/strong&gt;&lt;font style=&quot;FONT-SIZE:8pt;FONT-FAMILY:굴림체;&quot;&gt;&lt;font style=&quot;FONT-SIZE:10pt;FONT-FAMILY:굴림체;&quot; color=&quot;#000000&quot;&gt;약간&amp;nbsp;조금 후회스러운 것은 전공 교수와 선배들이 머리 긁적이며, 회로를 만들때 도와 주고 옆에 있으면서, 좀더 완성된 회로를 만들려는 생각이나, 이론 계산에서 짜증을 내었던 기억들이다.&lt;br&gt;&lt;br&gt;i386EX 보드에서 Extension Board 를 만들어 모터 포트를 확장하는데 있어, 이런 저런 생각을 하다, 우연히 이전 보드들을 손에 넣었다. 그런데, 허걱,,,, Address Decording 에 대한 기본적인 틀도 만들지 못한 초보적인 회로로 Extension Board 라고 판매한 것이였다. 젠장할...&lt;br&gt;&lt;br&gt;다음은 기본적인 Address Decording 이론과 회로를 보여주는 회로이다.&lt;br&gt;&lt;br&gt;&lt;img hspace=&quot;5&quot; src=&quot;http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309462_0?1265378128.gif&quot; vspace=&quot;5&quot; border=&quot;0&quot;&gt;&lt;br&gt;&lt;br&gt;위의 회로의 경우, CS6 즉, Chip Select Unit 신호 6 번 핀을 이용한 것으로 만약, CS6 을 0x8000 부터 0x80FF 주소까지 맵핑한 경우에 대한 회로 구동예제이다.&lt;br&gt;&lt;br&gt;즉, CSU 설정을 MCU 에서 0x8000 에서 0x80FF 로 지정한 경우, 74HC138 Address Decord 칩에서 Enable 핀 G1,G2A,G2B 을, MCU 의 /CS6 신호와 Address 핀 7 과 연결한 것으로, 여기서는 0x8080 부터 0x80F0 까지 주소를 맵핑한 Address Decord 로 PPI 즉, 병렬 포트를 Access 할 수 있도록 한 것이다.&lt;br&gt;&lt;br&gt;사용자가 0x8000 이상 주소를 접근할 경우, MCU 의 CS6 신호가 Set 된다. 만약, 사용자가 0x8080 주소를 접근하고자 할 경우, CS6 신호와 더불어 A7 은 1 로 Set 된다. 이때, A6,A5,A4 는 0x80 이므로, 모두 0 으로 set 된다. 즉, 74HC138 의 Select 핀이 모두 0 으로 Set 되는 것이다. 이럴 경우, Enable 이 100 이 되고, Select 핀이 000 으로 되어, 결국 Y0 핀이 High 로 Set 된다. 즉, 0x8080 일 경우, Y0 핀에 연결된 IC 또는 Port 또는 RAM 또는 ROM 등 MCU 주변 기기가 활성화 된다.&lt;br&gt;&lt;br&gt;만약, 0x8090 일 경우, A7,A6,A5,A4 는 1001 이 되어, 결국 Y1 핀이 High 로 Set 된다. 즉, 위 회로도의 PPI 가 활성화 되고, 해당 Port 에 대해 동작을 처리할 수 있게된다.&lt;br&gt;&lt;br&gt;PPI 의 A0 와 AI 핀과 CWR 설정에 따라,&amp;nbsp;데이터가 입출력되게 된다. 이런 설계 방식에 따라, Stepping Motor 의 포트 또한 쉽게 확장할 수 있다. 단, 문제는 동시 제어는 꿈도 꾸지 말라는 것이다. ^^;&lt;br&gt;Stepper Motor 를 동시 제어하겠다. 병렬 포트를 이용한 방법, 또는 Embedded OS 와 RTOS 를 이용한 Task 생성, DSP 를 이용한 Task 생성으로 동시 진행외에 I2C, CAN 등을 이용한 약간 시간 지연을 둔 순차 모터 구동이 예가 될 뿐이다. &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
    </description>
    <link>http://kr.rd.yahoo.com/community/blog/myblog/rss/mesg20/*http://kr.blog.yahoo.com/isadrastea/1309462</link>
    <guid>http://kr.blog.yahoo.com/isadrastea/1309462</guid>
    <pubDate>Fri, 05 Feb 2010 22:55:28 +0900</pubDate>
    <category><![CDATA[땅지기]]></category>
<media:content url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309462_0?1265378128.gif" fileSize="21481" type="image/gif" medium="image" expression="full" width="672" height="276" >
<media:thumbnail url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309462_0_thumb?1265378128.gif" />
</media:content>
</item>
<item>
    <title><![CDATA[인생 그리고, 일, 그리고 사랑...]]></title>
    <description>
        상대방과 입장이 다를 때 그를 이해하기 위해서 다음과 같은 여섯 가지 경우를 생각해 볼 필요가 있다.&lt;br&gt;&lt;br&gt;첫째, 식견이 아직 부족했던 것이 아닌가.&lt;br&gt;둘째, 보고 들은 것이 실제와 어긋났던 것은 아닌가.&lt;br&gt;셋째, 역량이 부족했던 것이 아닌가.&lt;br&gt;넷째, 마음 속에 무엇인가 남에게 알리고 싶지 않은 고민이 있었던 것은 아닌가.&lt;br&gt;다섯째, 조금 방심했던 것은 아닌가.&lt;br&gt;여섯째, 무엇인가 다른 생각을 하고 있었던 것은 아닌가.&lt;br&gt;&lt;br&gt;이 여섯 가지를 먼저 살핀 뒤 그래도 상대방이 자기가 하는 말을 듣지 않고, 가르쳐도 태도를 바꾸지 않으면, &lt;br&gt;그때는 명확한 입장을 정해야 한다. &lt;br&gt;&lt;br&gt;잘못을 지적해 주기를 원한다고 하면서도, 실제로는 그 지적을 잘 받아들이기는 어렵다.&lt;br&gt;달콤한 말에는 누구나 아닌 체하면서도, 실은 그것을 쉽게 받아들인다.&lt;br&gt;&lt;br&gt;윗사람으로서 사람들은 거느릴 경우 아랫사람들의 생활을 안정시키고, 사람마다 각각의 경우에 &lt;br&gt;만족하도록 하지 않으면 안 된다. 그리고, 모두 각자의 역할을 다할 수 있도록 배치하고 모든 일이&lt;br&gt;제대로 돌아가도록 배려하지 않으면 안 된다. 이것이 바로 윗사람이 해야 할 일인 것이다.&lt;br&gt;이러한 일은 소홀히 하면서, 아랫사람이 자기를 따르지 않는다고 화를 낸다면, 일을 더욱&lt;br&gt;어렵게 만들 뿐 문제 해결에는 아무런 도움이 되지 않는다.&lt;br&gt;&lt;br&gt;못을 박을 때는 흔들거려 빠져버릴 것을 걱정한다. 그러나, 다시 빼려고 할 때는 반대로 빠지지 않는 것을&lt;br&gt;걱정하게 된다. 빗장을 걸 때에는 단단히 잠기지 않는 것은 아닐까 하고 걱정하게 되고, 풀 때가 되면&lt;br&gt;이번에는 쉽게 풀리지 않는 것이 아닐까하고 걱정하게 된다.&lt;br&gt;&lt;br&gt;뤼신에게서...&lt;br&gt;&lt;br&gt;아는 것도 많고, 해야할 일이 무엇이면, 어떻게 하면 좋을까 고민하고, 많은 것을 열거하지만, 결국 일은 한번에 하나씩 할 수 밖에 없다.&lt;br&gt;그래서, 일이다. 일은 절차이다. 절차의 힘에서... (사이토 다카시 지음.)&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://folk.ntnu.no/makarov/temporary_url_20070929kldcg/anthem-russia-2000-anita_tsoy_2005.mp3&quot;&gt;http://folk.ntnu.no/makarov/temporary_url_20070929kldcg/anthem-russia-2000-anita_tsoy_2005.mp3&lt;/a&gt;&lt;br&gt;
    </description>
    <link>http://kr.rd.yahoo.com/community/blog/myblog/rss/mesg20/*http://kr.blog.yahoo.com/isadrastea/1309461</link>
    <guid>http://kr.blog.yahoo.com/isadrastea/1309461</guid>
    <pubDate>Fri, 05 Feb 2010 21:23:50 +0900</pubDate>
    <category><![CDATA[바람]]></category>
</item>
<item>
    <title><![CDATA[Open Source 와 Library - 24]]></title>
    <description>
        많은 고민 끝에 내린 결론은 CLR 와 C#, Managed C++ 는 앞으로 더욱 많은 개발자의 사랑을 받을 것이다.&lt;br&gt;Win32 API 와 MFC 를 익혀온 개발자로서는 의아한 생각을 할 수 있지만, Windows 상에서 개발이라면, 굳이 Win32 Native API 를 고집할 이유가 점점 약해진다고 해야 할 것이다.&lt;br&gt;&lt;br&gt;VC++&amp;nbsp; 로 Managed C++ 를 접한 처음 Visual Studio 2003 에서는 별로 달갑지 않았지만, Visual Studio 2008 과 2010 에서는 &lt;br&gt;아마 VC++ 와 C# 을 더 많이 사용하면서, 아마도 CLR 에 더 익숙해질 것 같다.&lt;br&gt;이유는 하나인데, 개발 시간과 그 응용과 사용자 Need 를 쉽게 충족시킬 수 있은 Library 와 기능이다.&lt;br&gt;&lt;br&gt;MDI 폼의 경우도 생각 외로 단순하고, 쉽다. 문제는 얼마나 강력하게 Thread 와 여러 Architecture 를 구성하느냐 인데,&lt;br&gt;이또한 Win32 와는 비교할 이유가 없을 것이다. &lt;br&gt;&lt;br&gt;단 두가지 아쉬운 점은 NetFrameWork 와 개발 리소스가 부족한 점인데, NetFrame 을 반드시 설치해야 하는 점, 그리고, 많은 기능을 위해서는 최신 버전을 유지해야하는 점, 여기에 C++ 를 이용한 CLR 는 예상과 달리 리소스를 찾기 쉽지 않다는 점이다.&lt;br&gt;&lt;br&gt;그런데, 어떻게 이런 기술이 더 입지를 다질 것으로 판단하는가 ?&lt;br&gt;그것은 지독한 고집 때문이라고 해야할 것이다. 바로, 좀더 빨리, 좀더 정확히, 좀더 이쁘게, 잘 만들어야 한다는 고집 그리고, 옛것을 고집하는 억척스러움에서 말이다.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://msdn.microsoft.com/ko-kr/visualc/bb933737(en-us).aspx&quot;&gt;http://msdn.microsoft.com/ko-kr/visualc/bb933737(en-us).aspx&lt;/a&gt;&lt;br&gt;
    </description>
    <link>http://kr.rd.yahoo.com/community/blog/myblog/rss/mesg20/*http://kr.blog.yahoo.com/isadrastea/1309460</link>
    <guid>http://kr.blog.yahoo.com/isadrastea/1309460</guid>
    <pubDate>Sun, 31 Jan 2010 21:39:26 +0900</pubDate>
    <category><![CDATA[땅지기]]></category>
</item>
<item>
    <title><![CDATA[Open Source 와 Library 개발 - 23]]></title>
    <description>
        &lt;p&gt;이전 글을 더해 어떻게 문제없이 소스버전을 관리하고, 리비전 정보와 함께 설정과 연동하게 할것인가 ?&lt;br&gt;이전 SetVersionInfo.exe 소스를 좀더 손을 본다.&lt;br&gt;&lt;br&gt;이번에는 rc 즉, 리소스 파일을 읽어 들이며, 복사본 rc 파일을 만들고, Version 태그를 찾으면,&lt;br&gt;해당 Version 정보를 각 요소에서 매크로상수로 대체하고, 이를 복사본에 저장한다.&lt;br&gt;그런 다음, Versionno.h 에 VERSION_MAJOR 등과 같은 매크로 상수를 정의해서,&lt;br&gt;복사본 Version 태그 전에 include 시킨다.&lt;br&gt;이렇게 rc 리소스 파일 사본을 만들고, 버전 정보를 추출하고, 매크로 상수로 대체한 다음, 복사본과 &lt;br&gt;원본 rc 리소스 파일명을 변경해준다.&lt;br&gt;&lt;br&gt;이런 과정으로 원본 rc 파일의 손상 없이 사본을 만들고, 안전하게 버전 정보를 Visual Studio 2008 리소스 편집기에&lt;br&gt;표시하고 작업할 수도 있고, 자동으로 Build 시 바인딩되며, 프로그램의 설정과 연동할 수 있게 한다.&lt;br&gt;&lt;br&gt;다음은 소스의 일부이다. 사실 핵심이기도 하다.&lt;br&gt;또한 전체 소스와 실행 파일은 판매처에서 구할 수 있습니다.&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font style=&quot;FONT-SIZE:12pt;&quot;&gt;&lt;font color=&quot;#008000&quot;&gt;판매처:&lt;/font&gt; &lt;/font&gt;&lt;u&gt;&lt;font color=&quot;#008000&quot;&gt;&lt;font style=&quot;FONT-SIZE:12pt;&quot;&gt;http://www.devpia.com/dExpert/?Op=tv&amp;amp;Seq=1600&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;보다 진보한 것들을 이제 많이 올려야겠습니다.&lt;br&gt;&lt;br&gt;&lt;br&gt;CStdioFile f(strFileName, CStdioFile::modeReadWrite); &lt;br&gt;&lt;br&gt;if (!bRc2)&lt;br&gt;{&lt;br&gt;strNewFile = strFileName + _T(&amp;quot;_new&amp;quot;);&lt;br&gt;CStdioFile f1(strNewFile, CStdioFile::modeCreate | CStdioFile::modeReadWrite);&lt;br&gt;&lt;br&gt;while (TRUE)&lt;br&gt;{ &lt;br&gt;int nCurPos = 0;&lt;br&gt;CString tokenStr; &lt;br&gt;&lt;br&gt;if (f.ReadString(str))&lt;br&gt;{&lt;br&gt;if (!bCheckedVersionComment)&lt;br&gt;{&lt;br&gt;f1.WriteString(str);&lt;br&gt;f1.WriteString(_T(&amp;quot;&amp;#92;n&amp;quot;));&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;strong&gt;&lt;font color=&quot;#0000ff&quot;&gt;if (str.Compare(_T(&amp;quot;// Version&amp;quot;)) == 0)&lt;/font&gt;&lt;/strong&gt;&lt;/u&gt;&lt;br&gt;{&lt;br&gt;bCheckedVersionComment = TRUE; &lt;br&gt;}&lt;br&gt;&lt;br&gt;if (bCheckedVersionComment &amp;amp;&amp;amp; str.Compare(_T(&amp;quot;//&amp;quot;)) == 0)&lt;br&gt;{&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;u&gt;&lt;strong&gt;f1.WriteString(_T(&amp;quot;//&amp;#92;n#include &amp;#92;&amp;quot;versionno.h&amp;#92;&amp;quot;&amp;#92;n&amp;quot;));&lt;/strong&gt;&lt;/u&gt;&lt;/font&gt;&lt;br&gt;continue;&lt;br&gt;}&lt;br&gt;&lt;br&gt;if (bCheckedVersionComment)&lt;br&gt;{ &lt;br&gt;bResult = FALSE;&lt;br&gt;&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;u&gt;&lt;strong&gt;if (str.Compare(_T(&amp;quot;/////////////////////////////////////////////////////////////////////////////&amp;quot;)) == 0)&lt;br&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/font&gt;{&lt;br&gt;bCheckedVersionComment = FALSE;&lt;br&gt;}&lt;br&gt;&lt;br&gt;tokenStr = str.Tokenize(_T(&amp;quot;&amp;#92;t &amp;quot;), nCurPos);&lt;br&gt;&lt;br&gt;while (!tokenStr.IsEmpty())&lt;br&gt;{&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;if (tokenStr.Compare(_T(&amp;quot;FILEVERSION&amp;quot;)) == 0)&lt;br&gt;{&lt;br&gt;f1.WriteString(_T(&amp;quot;FILEVERSION FILEVER&amp;#92;n&amp;quot;));&lt;br&gt;bResult = TRUE;&lt;br&gt;break;&lt;br&gt;}&lt;br&gt;&lt;br&gt;if (tokenStr.Compare(_T(&amp;quot;PRODUCTVERSION&amp;quot;)) == 0)&lt;br&gt;{&lt;br&gt;f1.WriteString(_T(&amp;quot;PRODUCTVERSION PRODUCTVER&amp;#92;n&amp;quot;));&lt;br&gt;bResult = TRUE;&lt;br&gt;break;&lt;br&gt;}&lt;br&gt;&lt;br&gt;if (tokenStr.Compare(_T(&amp;quot;&amp;#92;&amp;quot;FileVersion&amp;#92;&amp;quot;,&amp;quot;)) == 0)&lt;br&gt;{&lt;br&gt;f1.WriteString(_T(&amp;quot;VALUE &amp;#92;&amp;quot;FileVersion&amp;#92;&amp;quot;, STRFILEVER&amp;#92;n&amp;quot;));&lt;br&gt;bResult = TRUE;&lt;br&gt;break;&lt;br&gt;}&lt;br&gt;&lt;br&gt;if (tokenStr.Compare(_T(&amp;quot;&amp;#92;&amp;quot;ProductVersion&amp;#92;&amp;quot;,&amp;quot;)) == 0)&lt;br&gt;{&lt;br&gt;f1.WriteString(_T(&amp;quot;VALUE &amp;#92;&amp;quot;ProductVersion&amp;#92;&amp;quot;, STRPRODUCTVER&amp;#92;n&amp;quot;));&lt;br&gt;bResult = TRUE;&lt;br&gt;break;&lt;br&gt;}&lt;br&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;tokenStr = str.Tokenize(_T(&amp;quot;&amp;#92;t &amp;quot;), nCurPos);&lt;br&gt;} &lt;br&gt;&lt;br&gt;if (!bResult)&lt;br&gt;{&lt;br&gt;f1.WriteString(str);&lt;br&gt;f1.WriteString(_T(&amp;quot;&amp;#92;n&amp;quot;));&lt;br&gt;} &lt;br&gt;}&lt;br&gt;else&lt;br&gt;{&lt;br&gt;break;&lt;br&gt;}&lt;br&gt;}&lt;br&gt;}&lt;br&gt;&lt;br&gt;f.Close();&lt;br&gt;f1.Close();&lt;br&gt;&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;MoveFile(strFileName, strFileName + _T(&amp;quot;_old&amp;quot;));&lt;br&gt;MoveFile(strNewFile, strFileName);&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;/p&gt;
    </description>
    <link>http://kr.rd.yahoo.com/community/blog/myblog/rss/mesg20/*http://kr.blog.yahoo.com/isadrastea/1309459</link>
    <guid>http://kr.blog.yahoo.com/isadrastea/1309459</guid>
    <pubDate>Fri, 29 Jan 2010 22:59:17 +0900</pubDate>
    <category><![CDATA[땅지기]]></category>
</item>
<item>
    <title><![CDATA[Open Source 와 Library 개발 - 22]]></title>
    <description>
        &lt;p&gt;이전에 소개한 Build Version 자동 갱신 및 프로그램 버전과 연동시키는 방법, 그리고, 이것을 프로그램 설정과 연동해서 설정 정보를 Serialization 하는 방식에 대한 것을 작성해 보았다.&lt;br&gt;&lt;br&gt;이것은 Emule 프로젝트의 Concept 을 이용해서, 구현한 것으로 다음과 같다.&lt;br&gt;&lt;br&gt;우선, 프로젝트의 rc 파일에서 Version 정보를 추출한 다음, 이것을 문자열로 저장할 수도 있지만, 이렇게 하지 않고, constant 로 등록하면 된다.&lt;br&gt;&lt;br&gt;즉, VERSION_MAJOR, VERSION_MINOR, VERSION_UPDATE 와&amp;nbsp;VERSION_BUILD 로 매크로로 정의하고, 이것을 rc 파일에서 version 정보를 Parsing 해서, versionno.h 에 등록하는 것이다.&lt;br&gt;&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;#define VERSION_MAJOR&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br&gt;#define VERSION_MINOR&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br&gt;#define VERSION_UPDATE&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br&gt;#define VERSION_BUILD&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;이렇게 등록된 versionno.h 파일을 프로그램의 속성 파일에서 참조하고, 프로그램 버전으로 조립하는 것이다.&lt;br&gt;&lt;br&gt;// Application 의 설정 파일에서&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;Cini ini(_T(&amp;quot;Preference.ini&amp;quot;), _T(&amp;quot;[Application]&amp;quot;));&lt;br&gt;m_nVersionMajor = ini.GetInt(_T(&amp;quot;Version_Major&amp;quot;), 1);&lt;br&gt;m_nVersionMinor = ini.GetInt(_T(&amp;quot;Version_Minor&amp;quot;), 0);&lt;br&gt;m_nVersionUpdate = ini.GetInt(_T(&amp;quot;Version_Update&amp;quot;), 0);&lt;br&gt;m_nVersionBuild = ini.GetInt(_T(&amp;quot;Version_Build&amp;quot;), 1);&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;// 메인 Application 모듈의 InitInstance 함수에서&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;CPreference m_Preference;&lt;br&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;// 즉, 현재 Application 의 버전과 Application 의 설정 파일의 버전 정보가 일치할 경우&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;if (m_Preference.m_nVersionMajor == VERSION_MAJOR &amp;amp;&amp;amp;&lt;br&gt;m_Preference.m_nVersionMinor == VERSION_MINOR &amp;amp;&amp;amp; &lt;br&gt;m_Preference.m_nVersionUpdate == VERSION_UPDATE)&lt;br&gt;{&lt;br&gt;&amp;nbsp; // ... 실제 Application 설정 정보를 로딩하고, Application 을 설정한다.&lt;br&gt;}&lt;br&gt;else&lt;br&gt;{&lt;br&gt;&amp;nbsp;if (m_Preference.m_nVersionBuild == VERSION_BUILD)&lt;br&gt;{&lt;br&gt;&amp;nbsp; // Build 정보가 일치할 경우, Debug 나 다른 용도, 또는 GUID 를 이용한 Application 의 특별한 기능 수행과 시뮬레이션등...&lt;br&gt;}&lt;br&gt;}&lt;br&gt;&lt;/strong&gt;&lt;br&gt;&lt;font color=&quot;#000000&quot;&gt;여기서, 중요한 것은 VERSION_MAJOR 등의 define 매크로의 정보가 versionno.h 에서는 다음 버전을 나타내는 것이지만, 이것은 Build 되고 난 이후 갱신된 것이고, 실제 Build 된 Application 의 버전은 versionno.h 에 정의된 매크로 버전의 이전 버전이라는 것이다. 즉, VERSION_BUILD 의 매크로 값이 3 이라면, Build 된 Application 의 Build 버전 정보는 2 라는 것이다. 그래서, Configuration 파일의 Build 버전도 2 로 설정된 것을 제대로 읽어들일 것이다. 만약, 이러한 부분이 혼동을 일으킨다면, CPreference 클래스에서, SavePreference 함수를 구현하는 부분에서, Application 의 현재 버전 정보를 추출해서, 저장하게 하는 것이다. 이에 대해서도&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;실질적인 코드와 함께 게시하겠습니다.&lt;br&gt;&lt;br&gt;그리고, RS232 클래스 라이브러리가 세번째로 판매되었네요. 꾸준히 판매가 이루어지는 것 같아서, 아예, 예제와 Console 프로그램을 만들어 판매해볼까 합니다. 처음 시작하는 이들과 중급 이상의 개발자에게도 무리수가 되는 부분은 결국, RS232 의 Internal Thread 에 대한 Multi Thread 구현일 것입니다. 여기서, 어려운 점은 Thread 에 대한 핸들링 보다, 결국, 적절한 time 에 signal 핸들링일 것입니다. 이것도 별문제 없다고 생각하신다면, 사실 RS232 관련 Win32 API 에서 WaitCommEvent 에 대한 두가지 방식을 이해할 필요가 있다. WaitCommEvent 의 경우, Overlapped IO 방식을 사용할 경우와 일반적인 Block mode 사용시 동작에 대한 것에서, SetCommMask 에 대해 검토해봐야 한다는 것입니다.즉, WaitCommEvent 를 Thread 를 이용한 Polling 방식에서도 혼용하는 경우가 많은데, 간혹 실수로 문제가 될수도 있습니다. 물론, 잘 구성하면 되구요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
    </description>
    <link>http://kr.rd.yahoo.com/community/blog/myblog/rss/mesg20/*http://kr.blog.yahoo.com/isadrastea/1309458</link>
    <guid>http://kr.blog.yahoo.com/isadrastea/1309458</guid>
    <pubDate>Tue, 26 Jan 2010 22:43:25 +0900</pubDate>
    <category><![CDATA[땅지기]]></category>
</item>
<item>
    <title><![CDATA[Open Source 와 Library 개발 - 21]]></title>
    <description>
        BCGSoft 사의 MFC Extension 라이브러리를 사용하는 Feature Pack 에서 좀더 다양한 GUI 표현을 위해서 몇가지 방법중&lt;br&gt;제일 많이 사용하는 방법은 결국, Inheritance 이다. 다음은 Feature Pack 의 CMFCPropertySheet 의 Option Navigator 의 &lt;br&gt;컨트롤을 변경하는 예제로, CTreeCtrl 의 Style 을 Image 에서 Default Tree Navigation 방식으로 변경하여, Visual Studio 2008 과 같이 변경해 본 것이다.&lt;br&gt;&lt;br&gt;Feature Pack 에서 제공하는 Icon 을 이용한 Tree Location 표시 방식&lt;br&gt;&lt;br&gt;&lt;img hspace=&quot;5&quot; src=&quot;http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309457_0?1264069506.gif&quot; vspace=&quot;5&quot; border=&quot;0&quot;&gt;&lt;br&gt;&lt;br&gt;CTreeCtrl 의 Default +/- 버튼과 dot line 으로 표시한 방식 (Visual Studio 2008 Style)&lt;br&gt;&lt;br&gt;&lt;img hspace=&quot;5&quot; src=&quot;http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309457_2?1264069506.gif&quot; vspace=&quot;5&quot; border=&quot;0&quot;&gt;&lt;br&gt;&lt;br&gt;취향에 따라 다르지만, 방식은 다음과 같다.&lt;br&gt;&lt;br&gt;CMFCPropertySheet 를 상속한 CPreferenceSheet 클래스를 만들고, 이것의 Event Handler 에 다음과 같이 정의한다.&lt;br&gt;&lt;br&gt;void CMainFrame::OnToolsPreferences()&lt;br&gt;{&lt;br&gt;// TODO: Add your command handler code here&lt;br&gt;// Feature Pack Style 의 icon Navigation 방식&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;//CPreferenceSheet preferenceDlg(CMFCPropertySheet::PropSheetLook_Tree, IDB_TREE_ICONS, 16); &lt;br&gt;&lt;/strong&gt;&lt;/font&gt;// Visual Studio 2008 같이 Default CTreeCtrl 방식&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;CPreferenceSheet preferenceDlg(CMFCPropertySheet::PropSheetLook_Tree);&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;&lt;br&gt;preferenceDlg.DoModal();&lt;br&gt;}&lt;br&gt;&lt;br&gt;// 상속 클래스의 소스에서 &lt;br&gt;BOOL CPreferenceSheet::OnInitDialog()&lt;br&gt;{&lt;br&gt;BOOL bResult;&lt;br&gt;&lt;br&gt;// Resize Tree windows width to 120 pixels&lt;br&gt;// CTreeCtrl 의 폭을 조정해 줄수 있고, 높이도 조정 가능하다.&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;m_nBarWidth = 120;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;// Parent class 의 초기화를 수행한다.&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;bResult = CMFCPropertySheet::OnInitDialog();&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;// TODO: Add your specialized code here &lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;// Make Tree control style like default tree control style (has +/- button and dot line)&lt;br&gt;// CTreeCtrl 의 Style 을 CTreeCtrl 의 Default Style 로 변경해 준다.&lt;br&gt;m_wndTree.ModifyStyle(0, TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;return bResult;&lt;br&gt;}&lt;br&gt;&lt;br&gt;물론, 응용해서, Icon Navigator 와 +/- Button, dot line 을 모두 사용할 수 있다. 이럴 경우 다음과 같이 표시 된다.&lt;br&gt;&lt;img hspace=&quot;5&quot; src=&quot;http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309457_1?1264069506.gif&quot; vspace=&quot;5&quot; border=&quot;0&quot;&gt;&lt;br&gt;&lt;br&gt;사실 좋아 보이지는 않지만, 생각해보면, 몇가지 상태 표시를 위한 Icon 을 Design 해서 예쁘게 꾸밀수도 있다.&lt;br&gt;&lt;br&gt;사용하다보면, BCGSoft 의 Resource 가 조금만 더 공개되었으면 하는 생각을 절로 하게 될 것이다.&lt;br&gt;그런데, 좀더 생각해보기 위해, MFC extension class 에 Break point 를 다는 순간 BCGSoft 의 소스들을 볼 수 있게 될 것이다.&lt;br&gt;이때 부터는 자신이 원하는 데로, GUI 와 MFC Extension Class 를 손볼 수 있게 됨을 알게된다.&lt;br&gt;&lt;br&gt;결국, 호기심과 한번의 클릭이 많은 것을 가져다 준다. Try now. Let&amp;#39;s do it. 이게 답이다.&lt;br&gt;&lt;br&gt;
    </description>
    <link>http://kr.rd.yahoo.com/community/blog/myblog/rss/mesg20/*http://kr.blog.yahoo.com/isadrastea/1309457</link>
    <guid>http://kr.blog.yahoo.com/isadrastea/1309457</guid>
    <pubDate>Thu, 21 Jan 2010 19:25:06 +0900</pubDate>
    <category><![CDATA[땅지기]]></category>
<media:group>
<media:content url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309457_0?1264069506.gif" fileSize="14486" type="image/gif" medium="image" expression="full" width="555" height="291" >
<media:thumbnail url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309457_0_thumb?1264069506.gif" />
</media:content>
<media:content url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309457_1?1264069506.gif" fileSize="13052" type="image/gif" medium="image" expression="full" width="555" height="291" >
<media:thumbnail url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309457_1_thumb?1264069506.gif" />
</media:content>
<media:content url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309457_2?1264069506.gif" fileSize="12701" type="image/gif" medium="image" expression="full" width="555" height="291" >
<media:thumbnail url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309457_2_thumb?1264069506.gif" />
</media:content>
</media:group>
</item>
<item>
    <title><![CDATA[Open Source 와 Library 개발 - 20]]></title>
    <description>
        이제 그럼 분광학에 대한 이야기속에 가려진,&amp;nbsp;두명의 엔지니어에 대해 이야기해보자. 하드웨어 엔지니어와 소프트웨어 엔지니어를 이야기이다.&lt;br&gt;&lt;br&gt;이전 단계에서 분광 즉, 스펙트럼, 분산, 흩뿌리기위해, 분광기의 Grating 을 사용하는 것을 알았고, 결국, 이것의 특성에 따라, 원하는 파장을 뽑아내기 위해서 (사실 Monochromatic 이라는 말자체의 의미는 이것이다.) 파장을 1 nm 씩 조사해가면서, 원하는 파장을 추출하게 된다. 앞에서 얻은 것은 Grating 의 Angular Dispersion 특성에 따라,&amp;nbsp;1 nm 파장을&amp;nbsp; &lt;span lang=&quot;EN-US&quot; style=&quot;FONT-FAMILY:굴림;&quot;&gt;0.0741 도씩 움직이면서 파장을 추출하면 된다고 했다. &lt;br&gt;&lt;br&gt;그런데, Stepping Motor 가 이렇게 작은 각도로 움직이는 것은 없다. 고분해능이라고 해봐야, 0.9 도가 최고이고, 이보다 좋게 하기 위해서 Micro Step 을 사용하게 된다. 그런데, 이렇게 미세하게 움직이자면, 그 힘이 만만치 않다. 그러므로, 모터 외에 기어와 적절한 전류에서 구동될 수 있고, 저속, 고속에서 토크가 큰 Bipolar 타입을 선택하게 된다. 이 모든 것은 익숙한 경험자가 그것도 적절한 분광학에 대한 조언과 지식을 겸비해야 한다. 그런데, 아쉽게도, 과학자는 공학자와 조금 다른 면이 있다. 뭐랄까 ? 느껴보길 바란다. 대전에서도 성남에서도 광주에서 느껴보지만, 미국 친구들과 다르고, 사람마다 다르다. 아마도 먹고 사는 일이 모두 같지 않기 때문일 것이다.&lt;br&gt;&lt;br&gt;아무튼 이런 사양과 기술을 검토하고 나면, 정말 아찔한 것은 어떻게가 남는다. 이때 필요한 것이 결국 하드웨어 위에 뭐가 더 들어야 한다는 것인데, 실제로는 공학자 중 하드웨어 엔지니어와 소프트웨어 엔지니어 또한 그 character 가 다르다. 물론 먹고 사는 것이 다르기 때문일 것이다.&lt;br&gt;&lt;br&gt;결국, Micro Step 을 운영할 수 있는 드라이브 제작과 Firmware 작성과 이것을 1 nm 씩 움직이게 하는 프로그램과 적절히 스캔할 수 있게 하는 것은 분광학으로만 만들어지는 것이 아니다. 그런데도, 사실 임금과 노고에 대한 대가는 아주 차원이 다르다. 학자와 학도의 차이라면 그렇게 알겠지만, 사실 학자만으로는 안되는 것이 제품이 나와도 잘 만들기 쉽지 않다는 것과 어떻게 응용할 것인가에서도 쉽지 않음에도, 그 대가는 하늘과 땅차이이다. 이것이 현실적인 하드웨어, 소프트웨어 엔지니어의 현실이다.&lt;br&gt;&lt;br&gt;How 가 아닌 Why 와 How To, How Can 을 말하고, 행할 수 있는 인재는 쉽게 피곤해진다. 진정 무엇이 문제인가는 여기에 있다. &lt;br&gt;&lt;br&gt;이제 Micro Step 을 운영할 수 있는 드라이브를 만들어보자, 사실 공학도 교수님들 또한 만만하지 않은 뚝심으로 Unipolar 를 설명하고 있기에, Stepping Motor 제어는 고등학생도 만들어야하는 것이 되어버린 것이 오래전이다. 그러나, 실제로 제대로 CNC 를 만드기나, SMT 를 만들어 Best 가 되지 못했다. 아마 고등학생들이 스웨덴 아이들 처럼, MatLab 으로 교가를 수행하게 되면 Best 가 될지도 모르겠다. 아무튼 교수님들도 잘 가르쳐 주지도 않고, 담배만 몇갑씩 태웠다는 노장들도 안가르쳐주는 아니 어쩜 자신 없어하는 Micro Stepping 에 대한 이론과 제작에 대한 모든 것을 담고 있는 것이 있다. &lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://ww1.microchip.com/downloads/en/AppNotes/00822a.pdf&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;http://ww1.microchip.com/downloads/en/AppNotes/00822a.pdf&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color=&quot;#0000ff&quot;&gt;인생의 가치는 무엇을 했냐에 달렸다고 하는데, 사실 그보다, 나누는 것이 더 먼저다. 경주 최씨 가문의 이야기를 드라마화한 명가를 보면 알 수 있듯이 무엇을 해도, 사람을 위해서라도, 그 자체가 온전한 의도라 해도, 천한 사람, 궁한 사람을 이용해서는 안된다. 이것이 진정한 사람을 위한 것이고, 과학자가 성공하기 위해 수식을 파고 든다 한들 공학도를 부려서, 이론을 실질과 같게한 공학도의 노고와 성취를 온전히 자신의 것으로 이름을 내걸어서는 안되는 것이다. &lt;br&gt;&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;사람은 그 본심이 바르다고, 그 뜻이 가상하다고 해서, 모든 것을 다 옳고 바르게 하기위해서라고 하며, 다른 이를 힘들게하고, 헤해서는 안된다. 이것이 살아남은 자의 몫이며, 의무이고, 나누는 것은 배품이 아닌 삶 그 자체인 것이다. &lt;br&gt;&lt;br&gt;&lt;font color=&quot;#008000&quot;&gt;&lt;strong&gt;정치를 하는 사람이라면 반드시 염두에 두어야 할 근간들이 있다. &lt;br&gt;첫째, 민생을 안정시키려면, 불필요한 개입을 피해야 하고, &lt;br&gt;둘째 무엇인가를 주고 싶다면, 거둘어들이지 않아야 하며, &lt;br&gt;셋째, 이로움을 주고자 한다면 해를 끼치지 않아야 한다. &lt;br&gt;넷째, 활력을 소생시키려고 한다면 시류에 어긋나는 강제를 피해야만 한다.&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;루쉰의 글이다.&lt;br&gt;&lt;br&gt;택시 운전을 하던 덥수룩한 텃수염의 아저씨는 민생 서민을 위한 정치는 박정희와 전두환 전 대통령 뿐이였다고 했다. 그의 주장은 아주 간단 명료했다. 물가였다. 전 대통령 두분만이 실질적으로 물가를 억제하는 강력한 언사를 해왔고, 그것에 기업들이 쉽게 손을 될 수 없는 뭔가가 있었다고 했다. &lt;br&gt;&lt;br&gt;그의 말도 일리가 있다. 현제 가장 문제는 물가이다. 그런데, 사실 두 전 대통령 시절의 물가 또한 그렇게 안정된 것이라고 볼수 없을 것이다. 단지, 억제된 경제 환경과 해외 시장 진출과 자본, 해외 여행과 이민등이 그때는 모두 어렵거나, 할 수 없는 것들이였고, 할 수 있다고 한들, 일부였으며, 그 또한 굳이 시끄럽게 떠들어 이득을 나누거나, 규정을 까다롭게할 이유가 없었던 것이다. 즉, 없다는 것 자체가 그때는 몇프로의 삶에는 황금기였다. 그리고, 이러한 환경에서 택시 운전사들에게는 실제로 자동차 소유가 부의 상징이 되어가던 시점에서, 상대적 고임금에 속해있었기에, 물가에 영향에서도 현금화 수단과 유용에 편의성에서 어려움이 지금보다 덜 했던 때였다. 그분 또한 언급한 것이 십년동안 임금이나 수입은 늘지 않았다는 것이다. 결국 이러한 상황에서 운전사들의 삶은 결국, 노력과 노동에 대한 정당한 대가가 물가에 아주 크게 영향을 받았고, 대부분 서민에게도 동일한 영향을 미치게 되었다. 그러나, 이 영향은 정치가들과 대세의 주류를 잡고자 하는 이들에게는 그들의 영향 즉, 고달픔이 주류를 흔들어 기세를 잡고, 판도를 바꿀 원동력과 전환점으로 전개하기 위한 시금석이였기에, 이들의 목소리가 커질때까지 그들의 손을 잡아줘야 했다. 결국 무엇이 문제냐, 아무것도 문제가 없다는 것이 정답이다.&lt;br&gt;&lt;br&gt;대다수 서민이 알아야 할 것은 비판보다, 스스로 바꿀만한 계기를 만들어야 한다는 것이고, 그것은 정치가 아닌 바로 우리 자신들의 삶의 질 그자체라는 것이다. 믿는다. 안믿는다. 그것은 정치와 종교가 아니라는 것이다. 바로 우리 서민들의 삶이 좋아져야 한다는 것에 스스로 믿음을 갔고, 노력해야 한다는 것뿐이다. 즉, 물가를 보는 눈을 주머니에 넣어야할 것과 빼야할 것을 구분하는 것에 더 주안점을 두어야 한다는 것이다.&amp;nbsp;&lt;br&gt;&lt;br&gt;현명해져라는 말은 하지 않는다. 그리고, 좀더 노력해야 한다고 말하지도 않는다. 해야할 것은 그 무엇을 말하기 전에, 몇프로의 황금기와 같은 시대가 있어듯이, 지금 현재 그 몇프로가 영유했던 황금기 중 찾지 못한 것을 찾아서 그 황금을 찾아 시끄럽게 하지 말고, 떠나라는 것이다. &lt;br&gt;&lt;br&gt;그럼, 다음은 PIC 매뉴얼을 해석하고, 실제적인 Bipolar Motor 구동 드라이브 제작에 대해 이야기 해보자.&lt;/span&gt;
    </description>
    <link>http://kr.rd.yahoo.com/community/blog/myblog/rss/mesg20/*http://kr.blog.yahoo.com/isadrastea/1309456</link>
    <guid>http://kr.blog.yahoo.com/isadrastea/1309456</guid>
    <pubDate>Sun, 10 Jan 2010 16:46:52 +0900</pubDate>
    <category><![CDATA[땅지기]]></category>
</item>
<item>
    <title><![CDATA[Open Source 와 Library 개발 - 19]]></title>
    <description>
        쉽게 이야기해보자. Blazed Angle 이란? 엉뚱한 것이지만 Blazed 각이라는 것이 분광학에서 중요한 용어로 사용된다. &lt;br&gt;이것은 Grating 의 수많은 Groove 의 각으로 Grating 면과 Groove 간의 각을 말한다. HORIBA 자료를 보면 아주 잘 설명되어 있다. &lt;a href=&quot;http://www.horiba.com/scientific/products/optics-tutorial/diffraction-gratings/&quot;&gt;&lt;strong&gt;http://www.horiba.com/scientific/products/optics-tutorial/diffraction-gratings/&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;그런데, 왜 Blazed Angle 이 중요한가 ? 이는 WikiPidia 에 잘 설명되어 있다. &lt;a href=&quot;http://en.wikipedia.org/wiki/Blazed_grating&quot;&gt;&lt;strong&gt;http://en.wikipedia.org/wiki/Blazed_grating&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;설명을 보면, Blazed grating 은 특정 파장에서 최대 효율을 갖도록 제작된 grating 이다. 즉, 회절판 Grating 이 특정 파장대의 광원과 연동하여 운영할 때 가장 효율이 좋다는 것인데, 뭐가 좋다는 것일까 ? WikiPidia 의&amp;nbsp;분광기 설명을 보면 다음과 같이 설명하고 있다.&lt;strong&gt; &lt;/strong&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Monochromator&quot;&gt;&lt;strong&gt;http://en.wikipedia.org/wiki/Monochromator&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;고분해능 회절판은 일반적으로 괘선을 가지고 있는데, 그런데, 고품질의 괘선을 그린다는 것은 말처럼 쉽지 않고, 제작 비용 또한 비싸다. 또한 Graing 의 Groove 또한 일정한 경사각을 가지고, 광원의 특정 회절파의 휘도를 높게하기 위해 경사각을 두고 제작한다. 이것을 Grating 의 blazing 이라고 하는데, blazing 의 사전적 의미는 흰점 또한 밝은 빛, 화염등으로 설명되는데, bright 로 보면 된다. 또한 괘선을 가진 Graiting 의 단점은 어렴풋이 (ghost 라고 하기도 하는데)&amp;nbsp;다른 회절파들이 만들어져 분광기의 stray light 이 많아진다. 이제 좀 이해가 가는데, 도대체 어렴풋이 나타난다는 회절파는 어떤 것인가 ? 이것은 물리학과 전자기학, 전기, 전자, 대수학 전문 사이트를 참고하면, 이해할 수 있다. &lt;a href=&quot;http://hyperphysics.phy-astr.gsu.edu/hbase/phyopt/gratcal.html&quot;&gt;&lt;strong&gt;http://hyperphysics.phy-astr.gsu.edu/hbase/phyopt/gratcal.html&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;그럼, balzed grating 에 대한 HORIBA 자료를 다시 보자, 첫문장이 아주 잘 설명되어 있는데, blaze 는&amp;nbsp;회절파&amp;nbsp;중 0 차 이상의 회절파에 휘도가 최대가 되도록 하는 것이고, blazed grating 은 특정 파장의 광원에 최대 효율을 낸다. 그러므로, 250 nm blazed grating 이란, 결국 250 nm 파장의 1 차 회절파가, 가장 큰 intensity 를 가지는 회절판이라는 것이다.&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;img hspace=&quot;5&quot; src=&quot;http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_0?1263106287.png&quot; vspace=&quot;5&quot; border=&quot;0&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;/strong&gt;그리고, 0 차 회절파는 어떻게 찾는가? 위에 사진을 보면 알 수 있을 것이다. HORIBA 자료도 참고하길...&lt;br&gt;좀더, 정확한 Blaze Wavelength 자료는 PDF 로 찾을 수 있다.&lt;strong&gt; &lt;/strong&gt;&lt;a href=&quot;http://www.spectrohelioscope.org/net/blaz.pdf&quot;&gt;&lt;strong&gt;http://www.spectrohelioscope.org/net/blaz.pdf&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;여기서, 위의 자료를 읽어 본다면, 알 수 있듯이 결국, blazed angle 즉, Groove angle 과 입사광과 반사광의 각이 일치할 경우를 Litrow configuration 이라고 하고, 이것에 대한 조건에서&amp;nbsp;Blazed Wavelength 는 다음&amp;nbsp;사이트의 자료에 의해 산출할 수 있다.&amp;nbsp;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;a href=&quot;http://www.shimadzu.com/products/opt/oh80jt0000001uz0.html&quot;&gt;&lt;strong&gt;http://www.shimadzu.com/products/opt/oh80jt0000001uz0.html&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;정말 유용한 계산기로 각회절파의 위치를 계산해준다. &lt;a href=&quot;http://www.calctool.org/CALC/phys/optics/grating&quot;&gt;&lt;strong&gt;http://www.calctool.org/CALC/phys/optics/grating&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;br&gt;&lt;/strong&gt;&lt;br&gt;HORIBA 의 잘 정리된 수식을 더 쉽게 보면, Diffraction 은 공식은 다음과 같이 된다.&lt;br&gt;&lt;br&gt;&lt;img hspace=&quot;5&quot; src=&quot;http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_2?1263106287.png&quot; vspace=&quot;5&quot; border=&quot;0&quot;&gt;&lt;br&gt;&lt;img hspace=&quot;5&quot; src=&quot;http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_1?1263106287.gif&quot; vspace=&quot;5&quot; border=&quot;0&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot;&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#0000ff&quot;&gt;Dv = b - a&lt;/font&gt;&lt;/strong&gt; &lt;/font&gt;&lt;/font&gt;이고, 각 회절파의 순서에 따라서 다음과 같이 위치하게 된다.&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot; color=&quot;#0000ff&quot;&gt;sin (a) + sin (b) = Groove&amp;nbsp;x&amp;nbsp;wavelength x 10 e-6 x n 차 회절파&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;이 된다.&lt;br&gt;&lt;br&gt;여기서, d 는 Grating 의 Groove 간 거리로 Groove 는 1 mm 당 경사각의 개수로 표현된다. 그래서, 단위가 gr/mm 이다.&lt;br&gt;또한 Wavelength 는 nm 즉, 10 e-9 을 단위로 사용한다.&lt;br&gt;그러므로, 위의 수식을 다시 풀어서 쓰면, 다음과 같다.&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot; color=&quot;#0000ff&quot;&gt;sin (a) + sin (b) =&amp;nbsp;Groove x&amp;nbsp;wavelength x&amp;nbsp;10 e-6 x n 차 회절파&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;이것을 다시 정리하면,&amp;nbsp;다음과 같이 된다.&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot; color=&quot;#0000ff&quot;&gt;(sin (a) + sin (b)) / Groove&amp;nbsp;= wavelength x&amp;nbsp;10 e-6 x n 차 회절파&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;여기서 더 나아가면, 다음과 같이 풀이된다.&lt;br&gt;&lt;br&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot; color=&quot;#0000ff&quot;&gt;&lt;strong&gt;(2 x&amp;nbsp;sin ((b + a)/2) x cos ((b - a)/2)) / Groove = wavelength x 10 e-6 x n 차 회절파&lt;br&gt;&lt;br&gt;&lt;/strong&gt;&lt;font style=&quot;FONT-SIZE:9pt;&quot; color=&quot;#000000&quot;&gt;즉, Groove 간격 곱하기 2 에 구하고자 하는 회절파의 Deviation&amp;nbsp; 각 (입사각과 반사각의 차이) 의 절반을 cos 한 것과 입사각과 반사각의 합을 sin 한 것을 곱하면, 원하는 회절파의 파장대가 검출되게 된다.&lt;br&gt;&lt;br&gt;그리고, 이것을 좀더 쉽게 풀어쓰면 다음과 같다.&lt;br&gt;&lt;br&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot; color=&quot;#0000ff&quot;&gt;&lt;strong&gt;(2 x&amp;nbsp;cos (Dv)&amp;nbsp;x sin ((b + a)/2)) / Groove&amp;nbsp;x 10 e-6&amp;nbsp;= wavelength x n 차 회절파&lt;br&gt;&lt;/strong&gt;&lt;font style=&quot;FONT-SIZE:9pt;FONT-FAMILY:굴림체;&quot; color=&quot;#0000ff&quot;&gt;&lt;br&gt;&lt;font color=&quot;#000000&quot;&gt;그럼, 여기서, 만약 입사각과 반사각을 &lt;font style=&quot;FONT-FAMILY:굴림;&quot;&gt;17.458 &lt;/font&gt;과 &lt;font style=&quot;FONT-FAMILY:굴림;&quot;&gt;17.458 &lt;/font&gt;으로 하고, Grating 을&amp;nbsp;Groove 1 mm 당 1200 개인 1200 gr/mm 을 사용한다면, 어떤 파장이 1차 회절파에 검출 될까 ?&lt;br&gt;&lt;br&gt;(2 x&amp;nbsp;cos (0) x sin (&lt;font style=&quot;FONT-FAMILY:굴림;&quot;&gt;17.458&lt;/font&gt;)) / (1200&amp;nbsp;x 10 e-6)) 이 된다.&lt;br&gt;&lt;br&gt;(2&amp;nbsp;x (1) x (0.3000066077367383906644429025055)) / (1200 x 10 e-6))&lt;br&gt;(2 x 0.3000066077367383906644429025055) / (1200 x 10 e-6)&lt;br&gt;0.600013215473476781328885805011/ (1200 x 10 e-6) = 500.0110128945639844407381708425 이 된다.&lt;br&gt;&lt;br&gt;즉, 500 nm 이다. 여기서 보면, 입사각과 반사각이 같다. 즉, 0 차 회절파이고, 이것은 Littrow 상태라고 한다. 즉, 500 nm 파장대로 Blazed 된 Grating 의&amp;nbsp;0 차 빔위치를 찾을 때 사용하는 것으로, 결국, Blazed Angle 이 17.458 도 이고, Blazing Wavelength 는 500 nm 인 것이다.&lt;br&gt;&lt;br&gt;그럼, 1 차 회절파는 어디쯤 있을까 ? HORIBA 사이트를 보면, 입사각이 12.256 이고 반사각이 22.256 으로 Deviation 각이 10 도차가 날때 1 차 회절파가 보인다고 한다. 그럼 보자.&lt;br&gt;&lt;br&gt;(2 x cos (5) x sin (17.256)) / (1200 x 10 e-6)&lt;br&gt;(2 x 0.99619469809174553229501040247389 x 0.29664158280413498517629169048704) / (1200 x 10 e-6)&lt;br&gt;0.59102554404604556924826029222547 / (1200 x 10 e-6) &lt;br&gt;0.59102554404604556924826029222547 / 0.0012&lt;br&gt;492.52128670503797437355024352122 이 된다. 아주 정확한 것은 아니지만, 492 nm&amp;nbsp;파장이 검출된다. &lt;br&gt;&lt;br&gt;그럼, 2 차 회절파는 어디일까 ? 역시 HORIBA 자료를 보면, Deviation 각이 20 도일 때 나타난다.&lt;br&gt;입사각이&amp;nbsp;&lt;font style=&quot;FONT-FAMILY:굴림;&quot;&gt; 7.736 이고 반사각이 27.736 일때 말이다.&lt;br&gt;&lt;/font&gt;&lt;br&gt;(2 x cos (10) x sin (17.736)) / (1200 x 10 e-6)&lt;br&gt;(2 x 0.98480775301220805936674302458952 x&amp;nbsp;0.3046315757345597370737019521411) / (1200 x 10 e-6)&lt;br&gt;0.60000707519144011894675038791855 / 0.0012&lt;br&gt;500.00589599286676578895865659879 이 된다. 좀더 잘 나타난다.&lt;br&gt;&lt;br&gt;이렇게 보면, 각각 입사각과 반사각에 따라, 파장이 보이게 된다.&lt;br&gt;&lt;br&gt;&lt;img hspace=&quot;5&quot; src=&quot;http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_3?1263106287.png&quot; vspace=&quot;5&quot; border=&quot;0&quot;&gt;&lt;br&gt;&lt;br&gt;정말 잘 설명된 사이트이다. &lt;a href=&quot;http://www.spectra-magic.de/&quot;&gt;&lt;strong&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot; color=&quot;#0000ff&quot;&gt;http://www.spectra-magic.de/&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;여기서,&amp;nbsp;Dispersion (분산)에 대한 예제이다.&lt;br&gt;&lt;br&gt;For example, we want to know the angular change for the angular dispersion difference of the two mercury lines at 313.155 and 313.184 nm. We have a grating of 2400 1/mm and we assume, that a and b are identical. For 313.155 nm and by formula F1 we find a = b to be 22.07290076 dgr. For 313.184 nm the angle is 22.0750505237 dgr, which is an angular difference d b / d l = 0.00214947 dgr / 0.229 nm. Normalized: d b is 0.0741 dgr / nm. We will use this example again. &lt;br&gt;&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;두개의 머큐리 램프의 angular dispersion 차이를 알고자 하는 것인데, 각각 313.155 와 313.184 nm 이며, 2400 gr/mm Grating 을 사용하는 경우다. Blazed Angle 이 313.155 nm 의 경우, 22.07290076 이고, 313.184 nm 의 경우 22.0750505237 임을 알게 되었다. 이것으로 delta diffraction angle 은 0.00214947 도 이고, delta wavelength 는 0.229 nm 인것을 알 수 있다. 즉, normalizing 하면 1 nm 당 0.0741 도 인 것을 알 수 있다.&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;즉, 이 Grating 으로 특정 파장을 분광하려면, 1 nm 당 Grating 을 0.0741 도 정도 돌려가면서 확인해야 한다는 것이다.&lt;br&gt;&lt;br&gt;그럼, 여기서 본론으로 들어간다. 왜? Stepping Motor 의 Micro Step 에 대해 중요성을 이야기 했고, 그들의 노력이 가상하다고 했는지....&lt;br&gt;&lt;br&gt;여기 또한 아주 잘 만든 Applet 을 소개 한다.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://www.physics.uq.edu.au/people/mcintyre/applets/grating/grating.html&quot;&gt;&lt;strong&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot; color=&quot;#0000ff&quot;&gt;http://www.physics.uq.edu.au/people/mcintyre/applets/grating/grating.html&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://terpconnect.umd.edu/~toh/models/DiffractionGrating.html&quot;&gt;&lt;strong&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot; color=&quot;#0000ff&quot;&gt;http://terpconnect.umd.edu/~toh/models/DiffractionGrating.html&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;img hspace=&quot;5&quot; src=&quot;http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_4?1263106287.gif&quot; vspace=&quot;5&quot; border=&quot;0&quot;&gt;&lt;br&gt;&lt;br&gt;정말 이해가 쉽도록 잘 만든 프로그램이라고 할 수 있겠다.&lt;br&gt;&lt;br&gt;다음은 체르니 터렛 방식의 분광기에 대한 시뮬레이션이다.&lt;br&gt;&lt;br&gt;&lt;img hspace=&quot;5&quot; src=&quot;http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_5?1263106287.gif&quot; vspace=&quot;5&quot; border=&quot;0&quot;&gt;&lt;br&gt;&lt;br&gt;그럼 다음은 광원에 따른 스펙트럼을 설명한 사이트이다.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://des.memphis.edu/lurbano/vpython/matter_interactions/spectrum/Spectrum.html&quot;&gt;&lt;strong&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot; color=&quot;#0000ff&quot;&gt;http://des.memphis.edu/lurbano/vpython/matter_interactions/spectrum/Spectrum.html&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;다양한 시뮬레이션 기법들&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://www.physics.uq.edu.au/people/mcintyre/php/laboratories/index.php?e=14&quot;&gt;&lt;strong&gt;&lt;font style=&quot;FONT-SIZE:10pt;&quot; color=&quot;#0000ff&quot;&gt;http://www.physics.uq.edu.au/people/mcintyre/php/laboratories/index.php?e=14&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
    </description>
    <link>http://kr.rd.yahoo.com/community/blog/myblog/rss/mesg20/*http://kr.blog.yahoo.com/isadrastea/1309455</link>
    <guid>http://kr.blog.yahoo.com/isadrastea/1309455</guid>
    <pubDate>Mon, 11 Jan 2010 13:40:20 +0900</pubDate>
    <category><![CDATA[땅지기]]></category>
<media:group>
<media:content url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_0?1263184820.png" fileSize="51832" type="image/png" medium="image" expression="full" width="300" height="112" >
<media:thumbnail url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_0_thumb?1263184820.png" />
</media:content>
<media:content url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_1?1263184820.gif" fileSize="4301" type="image/gif" medium="image" expression="full" width="289" height="215" >
<media:thumbnail url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_1_thumb?1263184820.gif" />
</media:content>
<media:content url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_2?1263184820.png" fileSize="68197" type="image/png" medium="image" expression="full" width="695" height="599" >
<media:thumbnail url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_2_thumb?1263184820.png" />
</media:content>
<media:content url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_3?1263184820.png" fileSize="21688" type="image/png" medium="image" expression="full" width="600" height="372" >
<media:thumbnail url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_3_thumb?1263184820.png" />
</media:content>
<media:content url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_4?1263184820.gif" fileSize="80245" type="image/gif" medium="image" expression="full" width="1183" height="712" >
<media:thumbnail url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_4_thumb?1263184820.gif" />
</media:content>
<media:content url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_5?1263184820.gif" fileSize="53007" type="image/gif" medium="image" expression="full" width="976" height="727" >
<media:thumbnail url="http://img.blog.yahoo.co.kr/ybi/1/87/89/isadrastea/folder/1310212/img_1310212_1309455_5_thumb?1263184820.gif" />
</media:content>
</media:group>
</item>
</channel>
</rss>
<!-- rss1.blog.kr3.yahoo.com uncompressed/chunked Wed Feb 10 12:59:13 KST 2010 -->
