<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt (info@mypapit.net)" -->
<rss version="2.0">
    <channel>
        <title>삼성전자 소프트웨어 멤버십</title>
        <description>삼성전자 소프트웨어 멤버십 테크노트</description>
        <link>http://www.swssm.org/feed</link>
        <lastBuildDate>Fri, 12 Mar 2010 20:36:58 +0900</lastBuildDate>
        <generator>FeedCreator 1.7.2-ppt (info@mypapit.net)</generator>
        <image>
            <url>http://www.swssm.org/images/logo.png</url>
            <title>swssm.org logo</title>
            <link>http://www.swssm.org</link>
            <description><![CDATA[Feed provided by swssm.org Click to visit.]]></description>
        </image>
        <item>
            <title>시각화 작업(과정) - 4. 거칠기 조정</title>
            <link>http://www.swssm.org/index.php?idx=378</link>
            <description>&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	① 거리에 따른 벡터 선별&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	스크롤 바(0~sqrt(150))를 이용하여 설정된 거리보다 가까운 거리의 벡터를 선택하지 않는 방법으로 거칠기를 조절한다. 0~sqrt(150)이란 값은 모양이 약 700개의 글립을 검사하여 최대한 모양이 무너지지 않는 거리의 최소의 값을 산정하여 정하였다. 거리에 대한 선별이 끝난뒤 거각도에 대한 선별을 하도록 하였다. 거리를 재는 공식은 두점 간의 거리 공식으로 하였다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	Math.Pow(a.X - b.X, 2) + Math.Pow(a.Y - b.Y, 2)&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	② 각도에 따른 벡터 선별&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	스크롤 바(0도~약 2.1430도)의 값을 70으로 나누어 해당 각도보다 큰 벡터를 선정하였다. 각도를 재는 방법은 두 벡터를 단위벡터로 만든뒤((lx1, ly1), (lx2, ly2))로 만든위 내적을 구한 뒤 그 값(inner)을 이용 하여 내적의 기본공식을 역이용하여 각도를 구하였다. inner변수를 이용한 수식은 아래와 같다. 값은 각 벡터의 각도의 차이로 작게는 0.0단위로 나왔으며 1~10도 안 팎 의 값을 보였다. 각도의 경우 모양을 무너 뜨리는 경우가 커서 0~약 2.14도 정도의 영향만 주도록 하였으며 스크롤 바를 이용하여 수정이 가능하도록 하여 모양이 무너지는 피해를 최소화 하였다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	double result = Math.Acos(inner) * 180 / Math.PI;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 11 Feb 2010 02:42:51 +0900</pubDate>
        </item>
        <item>
            <title>시각화 작업(과정) - 3. 이미지 벡터화</title>
            <link>http://www.swssm.org/index.php?idx=377</link>
            <description>&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	① 글립 이미지 추출&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	사각형 검색 알고리즘을 이용하여 관심 사각형들을 찾아내고 2차례의 합병정렬(안정정렬)을 이용하여 행과 열로 정렬한다. 정렬하면 코드의 순서와 사각형의 순서가 같아 지게 되므로 추 후 코드와 글립의 매칭이 수월하다. 각 글립의 영역을 사각형으로 알아낸 뒤 해당 영역을 그림에서 ROI를 이용하여 추출하여 512,512로 확대한다.(일반적인 TTF포맷의 글립이 1024*1024에서 작업되나 해당 크기와 품질 면에서 차이가 적고 속도를 개선하기 위하여 512*512로 선정하였다.) 크기를 크게 한 뒤 검은 색을 제외한 색을 지운다. RGB값을 검사하여 각 색깔 바이트에 200보다 큰값이 들어있는 픽셀을 지웠다. U8을 사용하여 255가 최대 값이므로 200이 한 바이트에라도 들어있다면 밝은 색으로 간주되기 때문이다. 너무 값을 작게 주면 글립까지 지워지는 경우가 있어 글립을 지우지 않는 한에서 가장 작은 값을 채택하였다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	② 글립 이미지 보정&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	각 글립의 영역을 모폴로지 연산을 이용한 확대 축소를 하여 거친 것을 부드럽게 해준다. 전체 글립을 작은 상태에서 모폴로지 연산으로 보정결과 얇은 글씨는 외곡 되는 현상이 많아 확대한 후 각각의 글립을 따로 보정하는 방식을 취하였다.&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;모폴로지의 element 값은 아래와 같이 설정하였으며&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	IplConvKernel element = Cv.CreateStructuringElementEx(2,2, 1, 1, ElementShape.Ellipse, null)&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;Dilate, Erode연산을 수행하여 팽창, 침식 연산을 하여 볼펜이나 흑연의 필요이 &amp;nbsp; &amp;nbsp;상의 거침이나 우둘투둘한 표면을 매끄럽게 하였다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	③ 글립 이미지 외곽선추출&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	매끄러워진 각 글립에 Canny Edge메소드를 이용하여 외곽 선을 추출해 내었다. 이때 각 외곽선은 완전 한 폐곡선이 되며 단선으로 이루어지도록 하였다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	④ 글립 이미지 외곽선 트레이싱&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	추출된 단선 / 완전 폐곡선의 이미지에서 흰색으로 된 선을 트레이싱 하면서 각 점이 방향을 가진 벡터로서의 의미를 가지도록 하였다. 위 그림과 같이 바깥 선과 안쪽 선은 방향이 다르게 트레이싱 하도록 하였다. 이는 트루타입 폰트 표준에서 사용하는 벡터 방식에 부합하기 위함이다. 트레이싱 알고리즘은 위부터 아래까지 보면서 처음에 흰점을 발견하면 그점을 첫점으로 주고 다음 점의 순서를 정해줌으로 써 계속해서 인점한 점으로 방향이 나아가게 하였다. 한점을 지날 때마다 이미지를 지움으로써 뒤돌아가는 일이 없도록 하였다. 한 외곽선을 다돌고 나면 해당 외곽선 내부를 제외한 나머지 이미지에서 흰점을 찾아 같은 방식으로 외곽선을 찾고 같은 방향으로 회전한뒤 다시 이미지를 확인하여 남아있는 폐곡선은 반대방향으로 회전하며 순서를 부여하고 해당 작업을 모든 흰점이 없어질 때까지 계속 진행하여 모든 점을 벡터화 하였다.&lt;/div&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 11 Feb 2010 02:41:16 +0900</pubDate>
        </item>
        <item>
            <title>시각화작업(과정) - 2. 코드 구성 및 판별</title>
            <link>http://www.swssm.org/index.php?idx=376</link>
            <description>&lt;p&gt;
	(1) 코드 구성&lt;/p&gt;
&lt;p&gt;
	코드는 시트지 좌측에 길게 적히며 시트지 타입 코드와 99개의 unicode혹은 한글 자소 코드를 표현 하도록 하였다. 코드는 4X4의 2진수 16개의 상태 비트와 우상단1비트의 한글 자소 구분 비트, 나머지 아래3개의 Check sum비트로 이루어진다. 한글인 경우는 우상단 색의 비트가 1로 이외에는 0으로 해준다. 한글 자소의 경우는 Unicode가 존재하지 않기 때문이다. 한글 자소 인경우는 내용 비트를 모종의 방법으로 채우고 되고 나머지 경우는 유니코드로 표현한다. 나머지 3비트를 이용하여 값이 4의 배수면 0개, 4의 배수 +1이면 3개의 비트를, 4의 배수 +2이면 2개의 비트를, 4의 배수+3이면 1개의 비트를 1로 세팅하여 전체 값을 4의 배수로 만들어 주어 검사하도록 하였다.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	(2) 코드 판별&lt;/div&gt;
&lt;div&gt;
	각 벡터의 정보를 담은 코드를 위에서 아래로 20개(4*5) 씩 쌍을 이루어 수치로 바꾸어 검사하도록 한다. 코드의 상단과 하단에 □ 모양의 표식을 두어 기울 어진 각도를 찾도록 하여 행여 작은 각도로 코드가 휘어져 있어도 코드 비트를 찾는 것에 무리가 없도록 하였다. 각 사각형을 찾을 때마다 자신의 영역에 맞는 만큼 offset값이 변경되어 찾도록 하였다.&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&amp;nbsp;코드 부분은 각 각의 코드가 정사각형의 모습을 띄므로 해당 부분을 그림 에서 OpenCV의 ROI로 해당 부분을 오려내어 일정 크기로 각 부분을 읽을때 무리가 없는 크기로 키우고(너무 작은 크기에 코드 비트가 있을시 (하위 Y값 -상위 Y값) / 400줄 로 나눌시 한 사각형 크기가 소숫점이 나오기 때문) Threshold 처리 해주어 모호한 비트가 없도록 하여 값을 일어낸다.&amp;nbsp;&lt;/div&gt;</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 11 Feb 2010 02:39:42 +0900</pubDate>
        </item>
        <item>
            <title>시각화작업(과정) - 1. 시트지 전처리</title>
            <link>http://www.swssm.org/index.php?idx=375</link>
            <description>&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	① 시트지 이상 판별(크기, 비율, 각도)&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	시트지 이상 판별의 가장 큰 목적은 코드, 글립의 정확한 인식을 목적으로 본격적으로 정보 추출전에 기준치를 벗어난 스캔의 에러처리를 해준다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	시트지의 비율이 일반 A4용지의 비율(210 * 297)과 많이 차이 나거나(종이 가로세로 비율 &amp;lt; 0.7f || 종이 가로세로 비율 &amp;gt; 0.8f) 코드를 찾아내는 표식을 찾지 못한 경우 &amp;quot;시트지 분석에 실패 하였습니다. 재스캔을 해주세요&amp;quot;라는 메세지를 내보내도록 한다. 물론 각도가 심하게 기울어져 그림파일이 A4용지 비율에서 많이 어긋날 경우도 에러 처리 해준다. 또한 A4용지 권장 사진 사이즈(1654*2340) 보다 작은 크기(1500,2064)의 그림 보다 작은 그림은 에러 처리를 해준다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	② 시트지 크기, 기울기 정규화&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	이상 판별에서 문제 없이 넘어온 시트지는 시트지를 1500,2064(A4용지 스캔 비율을 적용한 크기)로 축소 한 뒤 각 글립 사각형에서 알아낸 기울어진 각도에 따라 시트지 전체를 올바른 각도로 바꿔준다. 이때 0.2도 이하의 작은 각도는 회전 시키지 않음으로 혹시 생길지 모를 사각형 알고리즘의 각도 계산 실수를 최소화 하도록 하였다.&lt;/div&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 11 Feb 2010 02:36:36 +0900</pubDate>
        </item>
        <item>
            <title>시각화 작업(주요 알고리즘) - 3. 거칠기 조정</title>
            <link>http://www.swssm.org/index.php?idx=374</link>
            <description>&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	과도하게 많고, 의미없는 벡터가 존재할 수 있으므로 선분을 근사화 하여 특 징점만 남긴다. 이때 자연스럽게 코너 벡터를 검출할 수 있다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;선분 근사화는 Curvature 방법과 Strip Algorithm 방법 중 성능이 더욱 좋은 &amp;nbsp;Curvature 방법을 사용한다.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	그리고 그냥 선분을 잇는것이 아니라 베이지어 곡선을 생성한다.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	선분을 근사화 하여 코너 지점을 알 수 있다. 따라서 코너와 코너 사이에 하 &amp;nbsp;나 이상의 벡터가 존재 한다면 곡선으로 간주 할 수 있다. 이를 베이지어 곡 &amp;nbsp;선의 방정식에 따라 최소 자승법(method of least squares)을 이용하여 베이지어 곡선으로 변환한다.&lt;/div&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 11 Feb 2010 02:33:57 +0900</pubDate>
        </item>
        <item>
            <title>시각화작업(주요 알고리즘) - 2. 사각형 검출 알고리즘</title>
            <link>http://www.swssm.org/index.php?idx=373</link>
            <description>&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	영상을 이진화 하고 외곽선을 추출한 후 외곽선을 나타내는 리스트 또는 트리 시퀀스를 입력으로 받고 모든 외곽선에 대하여 근사화를 수행해주는 CvApproxPoly 메소드를 이용하여 각선분들의 포인트를 CvSeq에 모든 외곽선 정보를 담는다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	사각형 외곽은 반드시 4개의 정점을 가져야하며 노이즈를 없애기위해 영역은 비교적 넓은 지역이어야 하고 볼록한 부분이어야 하므로 이에 해당 하는 정점들을 걸러낸다.&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;이 후 이정점들의 최소 사잇각을 찾아낸다. 최소사잇각의 cosine이 0.3보다 작은 경우에 적절한 사각형이라고 인식한다.&lt;/div&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 11 Feb 2010 02:32:15 +0900</pubDate>
        </item>
        <item>
            <title>시각화 작업(주요 알고리즘) - 1. 그림 입력과 분석 및 글맆 추출</title>
            <link>http://www.swssm.org/index.php?idx=372</link>
            <description>&lt;p&gt;
	전처리를 아래 과정으로 거치고 3번에서 외고가선 추출을 한다.&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	① Auto deskew&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	먼저 입력 받은 그림의 회전 정도를 검사해서 수직, 수평에 맞도록 회전시킨다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	② Auto resize&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	정해진 해상도로 입력이 되지 않은 경우 자동으로 크기를 기준 크기로 조절한다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	1,2번을 마치고 글립의 영역들을 사각형 검출 알고리즘으로 얻어온다음 아래를 수행한다.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	③ OpenCV 이미지 프로세싱 및 외곽선 추출&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	1. 이진화를 진행한다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	2. Erosion, Dilation, Opening 연산을 통해 노이즈를 제거한다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&amp;nbsp;- Erosion&amp;nbsp;&amp;nbsp;외각을 깍아내는 효과를 볼 수 있다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	- Dilation&amp;nbsp;실제 이미지에서는 이미지외각에 픽셀이 더해지게 된다.&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	- Opening &amp;nbsp;이미지에 erosion을 취한 후 dilation을 취해서 얻어진다는 것을 알 수 있다. 이로 인해서 얻을 수 있는 효과는 이미지에서 점과 같이 찍혀진 부분들을 제거할 수 있다는 점이다. 최초 erosion을 취함으로 인해서 점으로 찍혀진 부분들은 완전히 제거가 되기 때문에, dilation을 적용하여도 다시 복원되지 않는 것이다. 반면에 전체 이미지는 축소된 만큼 다시 복원이 되기 때문에 이미지에 큰 영향을 주기 않으면서 이미지를 복원할 수 있게 된다.&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;cke_pastebin&quot;&gt;
	3. Canny 연산을 통해 외곽선을 추출한다.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 11 Feb 2010 02:31:16 +0900</pubDate>
        </item>
        <item>
            <title>OpenCvSharp을 이용한 그림관리(원그리기,채널수 관련 정보)</title>
            <link>http://www.swssm.org/index.php?idx=371</link>
            <description>&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(0, 158, 37); &quot;&gt;//추가된 네임스페이스&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&lt;/span&gt;&lt;span style=&quot;line-height: 2em; color: rgb(58, 50, 195); &quot;&gt;using&lt;/span&gt;&amp;nbsp;System.Diagnostics;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;은 검출 시간을 체크하기 위한 Stopwatch()를 사용하기 위해&amp;nbsp; 추가된 네임스페이스 입니다&lt;/span&gt;&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(58, 50, 195); &quot;&gt;using&lt;/span&gt;&amp;nbsp;KwsmLab.OpenCvSharp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;OpenCVsharp을 사용하기 위한 네임 스페이스&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;Tip : 추가된 네임스페이스가 많은데 사용되지 않은 네임스페이스를 걸러 내고 싶으면 코딩이&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;다 끝난후&lt;/span&gt;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&amp;nbsp; 네임스페이스 근처에서 마우스 우클릭 unused namespace를 찾아 클릭해주면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;사용되지 않은&lt;/span&gt;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&amp;nbsp; 네임스페이스를 자동으로 정리 해줍니다)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvColor[] colors = new CvColor[]{&amp;nbsp;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;컬러 구조체 입니다 CvColor(red, green, blue)값을 넣어주게 됩니다&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new CvColor(0,0,255),&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;나중에 찾은 얼굴에서 동그라미를 그려줄때 이 색을 이용해서&lt;/span&gt;&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new CvColor(0,128,255),&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;원을 그려주게 됩니다&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new CvColor(0,255,255),&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new CvColor(0,255,0),&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new CvColor(255,128,0),&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new CvColor(255,255,0),&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new CvColor(255,0,0),&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new CvColor(255,0,255),&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const double SCALE = 1.3;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&amp;nbsp; 사진 크기를 줄이기 위해 사용 됩니다.&amp;nbsp; 크기를 줄이는 이유는 오히려 얼굴 검출을&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;용이하게 하기 위해서 인데 이건 좀 더 깊이 파 보아야 합니다 일단 지금은 1.5, 2.0등으로&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;크기를 바꿔 가 보면서 테스트해보세요&amp;nbsp; 얼굴 검출 내용이 틀려 질겁니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&amp;nbsp; OpencvSharp 예제에서는 using문을 무척 많이 쓰게 되었는데 이유는 자동 메모리 해제를 위해서 입니다.&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;using문 다음 { 에서 시작해서 }이 끝나면 할당된 메모리도 자동으로 해제 됩니다 이런 방식이 싫다면&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;using문을 빼고 사용한 후 잊지말고 메모리를 해제 해주는것이 좋습니다 물론 가비지 컬렉터가 있긴 하지만&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;미래의 버그는 아무도 예측할 수 없습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (IplImage img = new IplImage(&amp;quot;&lt;span style=&quot;line-height: 2em; color: rgb(149, 16, 21); &quot;&gt;misskorea.jpg&lt;/span&gt;&amp;quot;, LoadMode.Color))&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&amp;nbsp; 이미지를 저장하기 위한 &amp;nbsp;메모리를 확보합니다 IplImage는 OpenCV에서 이미지&amp;nbsp; 담는 가장 기본이 되는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;선언형태이며 IplImage형 img를 선언하고 그곳에&amp;nbsp; misskorea.jpg를 컬러모드로 읽어서 저장하라는 뜻입니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (IplImage small_img = new IplImage(new CvSize(CV.Round(img.Width / SCALE), CV.Round(img.Height / SCALE)), BitDepth.U8, 1))&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&amp;nbsp; 이번에 역시 small_img란 메모리가 확보 되었는데 이번에는 그림을 읽어 오는것이 아니라 원래 읽은 그림의 size / SCALE 크기만한 메모리 크기를 확보하고&amp;nbsp; 그메모리의 &amp;nbsp;비트뎁스는 8이고,&amp;nbsp;채널은 1개짜리 메모리입니다.&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&lt;strong style=&quot;line-height: 2em; &quot;&gt;비트뎁스는 픽셀에 할당된 바이트수&lt;/strong&gt;와 상관이 있습니다 모니터에 보이는 한 픽셀이 RGB처리이면 8비트&amp;nbsp;&amp;nbsp;X 8비트 X 8비트 해서&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;총 3바이트가 할당되게 됩니다 지금 여기서는 1바이트 즉&amp;nbsp;&lt;strong style=&quot;line-height: 2em; &quot;&gt;8비트가 사용되어지겠네요&lt;/strong&gt;&amp;nbsp;그리고 채널이란 RGB 모드의 경우&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;각각의 R, G, B 를 말하는데....&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;흠...이건 그림을 그려서 설명해야 겟네요 나중에 시간나면 그리겠습니다.&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;일단은 R를 담는 배열(메모리가 있고) G를 담는 B를 담는 배열(메모리)가 있고 우리가 필요로하는 R이나 G 값만 가져다&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;쓸 수 있다고 생각하시면 됩니다. 그리고 그게 담겨져 있는 부분이 채널이고 RGB모드인 경우 채널수는 3이 되며&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;aRGB인경우 채널수는 4개가 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (IplImage gray = new IplImage(img.Size, BitDepth.U8, 1))&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;역시 gray란 메모리를 확보하네요&lt;/span&gt;&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CV.CvtColor(img, gray, ColorConversion.BgrToGray);&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;강좌시작에서 다운 받은 레퍼런스 파일을 보면 CV.cvtColor 메소드에 대한 사용법이 나와 있습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvtColor 메소드는 말 그대로 색을&amp;nbsp;변환 해주는 기능을 가지고 있습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;CvtColor(원본을, 이곳에다가, 이런 모드로 바꿔라)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;우리는 지금 misskorea.jpg&amp;nbsp;읽은 것을 gray 메모리에 칼라를 그레이 모드로 바꿔서 저장 이란 뜻이 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CV.Resize(gray, small_img, Interpolation.Linear);&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;Resize는 그림의 크기를 바꿔 주는것입니다 gray에 담겨있는 이미지를 small_img 에 사이즈를 줄여서 담아줍니다&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 6em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp; CV.EqualizeHist(small_img, small_img);&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 6em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	Equal&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;izeHist 메소드는 히스토그램 평활화를 시켜 줍니다 이것역시 공부가 필요한 부분이라 향후 기회가 있을때 다시 설명하겠습니다 지금은 그레이 이미지를 특출나게 어둡거나 밝은 부분을 적당히 펴줘서 전체 값이 일정해 지게 해준다라는 정도라만 이해하세요&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	}&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;아래 CvHaarClassifierCascade 관한 알고리즘을 설명하자고 하면 꽤 많은 분량의 설명이 필요합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;기초강좌부터 머리아프게 가지 말고 그냥 대충 뭐하는것이다 훑고 지나가도록 하겠습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile(&amp;quot;&lt;span style=&quot;line-height: 2em; color: rgb(149, 16, 21); &quot;&gt;haarcascade_frontalface_alt2.xml&lt;/span&gt;&amp;quot;))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;&amp;nbsp;haarcascade_frontalface_alt2.xml 얼굴 검출에 대한 기계학습 자료가 담겨져 있는 데이타 파일입니다 얼굴을 검출할때&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;이 자료랑 비교해서 비슷하면 얼굴로 인식하게 되어 있습니다&lt;/span&gt;&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (CvMemStorage storage = new CvMemStorage())&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;메모리 확보입니다&lt;/span&gt;&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(0, 158, 37); &quot;&gt;&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stopwatch watch = Stopwatch.StartNew();&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;시간 측정을 위해 스톱워치를&amp;nbsp;생성해서 시작합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvSeq faces = CV.HaarDetectObjects(small_img, cascade, storage, 1.1, 2, 0, new CvSize(30, 30));&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; &quot;&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;검출된 얼굴을 faces에 저장합니다&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;line-height: 2em; color: rgb(0, 0, 0); &quot;&gt;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;faces.Total 에 총 검출된 얼굴수가 들어가 있습니다&lt;/span&gt;&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br style=&quot;line-height: 2em; &quot; /&gt;
	&lt;/span&gt;&lt;span style=&quot;line-height: 2em; color: rgb(110, 57, 26); &quot;&gt;그다음 처리는 찾은 얼굴의 중심을 구해서 원을 그려주는 과정입니다&lt;/span&gt;&lt;/p&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 11 Feb 2010 02:24:27 +0900</pubDate>
        </item>
        <item>
            <title>FPGA 를 이용한 영상처리 방법 </title>
            <link>http://www.swssm.org/index.php?idx=349</link>
            <description>&amp;nbsp;이번 저희 팀이 나갔던 대회는 임베디드 환경에서 영상처리를 하고 이 영상처리를 이용하여 로봇을 제어하는&lt;br /&gt;대회였습니다. 임베디드 환경에서의 프로세서는 일반 PC보다는 성능이 많이 떨어지기 마련입니다.&lt;br /&gt;&amp;nbsp;따라서 프로세서에서 영상처리를 하게된다면 영상처리에 부하가 많이 걸리게 됩니다.&amp;nbsp; 이로 인해 로봇은 상대로봇을 늦게 찾게 되고 공격 및 방어가 늦어지게 됩니다.&lt;br /&gt;&amp;nbsp;따라서 저희가 나갔던 대회는 영상처리를 FPGA를 사용하여 하기를 권장하는 대회였습니다. 즉 영상처리를 소프트&lt;br /&gt;웨어가 아닌 하드웨어 단에서 처리하는 것이였습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;우선 영상처리를 하기위해선 카메라가 필요하게 됩니다. 그리고 이 카메라들은 받아들인 영상을 아날로그 값으로&lt;br /&gt;출력하게 되죠.. 이 아날로그 값을 우리가 사용할수 있도록 디지털 값으로 만들어 주는 역할을 하는 것이 비디오&lt;br /&gt;디코더 입니다.&lt;br /&gt;&amp;nbsp;하드웨어 단에서 영상처리를 하기 위하여 필요한 가장 기초적인 지식은 비디오 디코더를 이해하는 것입니다.&lt;br /&gt;&amp;nbsp;보통 사용하는 USB 웹켐 같은 경우도 비디오 디코더를 거쳐서 나온 데이타를 이용하는 것입니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;비디오 디코더는 홀 수 번째 라인과 짝수 번째 라인을 번갈아 가며 뿌려주게 됩니다.&lt;br /&gt;&amp;nbsp;즉, 720 * 480 짜리 영상이라고 한다면 1부터 480 줄 사이의 홀수 번째 줄을 먼저 뿌려주게 되고 짝수 번째 줄을&lt;br /&gt;&amp;nbsp;후에 뿌려주게 됩니다. 홀 수 번째 줄인지 짝수 번째 줄인지를 알려주는 신호가 odd 라는 신호입니다. &lt;br /&gt;&amp;nbsp;이 신호가 high 라면 홀수 번째 줄 신호이고 low 라면 짝수 번째 신호입니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;그리고 vref 라는 신호가 있습니다.&amp;nbsp; 이 vref 로 우리는 필요한 480라인의 데이터인지 아닌지를 알 수 있습니다.&lt;br /&gt;&amp;nbsp;즉 720*480 중 480 을 알 수 있습니다.&lt;br /&gt;&amp;nbsp;이 신호의 경우 blank 신호와 active 신호를 번갈아 가며 보내줍니다.&lt;br /&gt;&amp;nbsp;이 때 active 신호일 때만이 우리가 원하는 영상데이타 값이 들어오게 되고 blank 일때는 소위 말하는 쓰레기&lt;br /&gt;&amp;nbsp;값 비슷한 값이 들어옵니다. 그냥 필요없는 값이라고 생각하시면 됩니다. 따라서 이를 불리해줘야합니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;다음으로 href 라는 신호가 있습니다. 이 신호가 High 일때 1줄의 데이터 신호가 들어오게 됩니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;따라서 우리는 href신호가 상승 엣지일때마다 카운트를 시킨다면 총 몇줄이 카운트되었는지를 알 수 있습니다.&lt;br /&gt;&amp;nbsp;하지만 이때 꼭 필요한 신호만 받아들여야 함으로 odd 신호와 vref 신호를 적절히 이용하여야합니다.&lt;br /&gt;&amp;nbsp;이를 간단히 verilog 코드로 표현해 보자면&lt;br /&gt;====================================&lt;br /&gt;&amp;nbsp;always @(posedge href)&lt;br /&gt;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp; if(vref == 1)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; line &amp;lt;= line +1 ;&lt;br /&gt;&amp;nbsp;end&lt;br /&gt;===================================&lt;br /&gt;&amp;nbsp;이런식으로 표현할 수 있습니다.&amp;nbsp; 홀수 줄인지 짝수 줄인지를 알려고 한다면 odd신호를 적절히&lt;br /&gt;&amp;nbsp;and 시켜주면 되겠지요..&lt;br /&gt;&lt;br /&gt;&amp;nbsp;한줄의 신호에서 우리가 원하는 픽셀수는 720개입니다. 하지만 비디오 디코더는 720개의 유효픽셀과&lt;br /&gt;&amp;nbsp;138개의 필요없는 픽셀을 우리에게 보냅니다. 이것은 앞에서도 말했지만 href 신호가 high 일때가&lt;br /&gt;&amp;nbsp;유효 픽셀입니다 ㅎ &lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;그럼 픽셀수는 어떻게 구분하는냐..&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;친절하게도 비디오 디코더는 clk_llc2 라는 클럭 신호를 또 우리에게 보내주게 됩니다.&lt;br /&gt;&amp;nbsp;이 신호가 상승 엣지 일때마다 한 픽셀이 들어오게 됩니다.&lt;br /&gt;&amp;nbsp;이때도 href를 적절히 이용하여야 겠지요 이를 코드로 표현해보면&lt;br /&gt;&amp;nbsp;====================================&lt;br /&gt; always @(posedge clk_llc2)&lt;br /&gt; begin&lt;br /&gt; &amp;nbsp; if(href == 1)&lt;br /&gt; &amp;nbsp; &amp;nbsp; pixel &amp;lt;= pixel +1 ;&lt;br /&gt; end&lt;br /&gt; ===================================&lt;br /&gt;이런식으로 표현 할 수 있습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;이렇게 비디오 디코더에서 영상 데이터를 가져오는 것은 간단하게 할 수 있습니다.&lt;br /&gt;&lt;br /&gt;하지만 영상을 획득하는 것만으론 영상처리를 할 수 없습니다.&lt;br /&gt;들어온 영상데이터를 언제 초기화 시키고 언제 처리하고 언제 프로세서에게 결과 값을 알려주어야 &lt;br /&gt;될지가 더 중요합니다. 또한 여러가지 색 테이블 변환을 하여야지 시스템이 더 안정되게 되고&lt;br /&gt;이러한 것이 FPGA를 사용하는 이유일 것입니다. &lt;br /&gt;FPGA는 병렬처리를 하기 때문에 수십개의 색변환 공식을 써도 걸리는 시간은 1개의 변환 공식을&lt;br /&gt;쓴것과 같은 속도를 낼 수 있기 때문입니다.&lt;br /&gt;이에 대해서는 여러 말이 필요하기도 하고.. 코드를 보면서 이해하는 것이 빠르기 때문에...&lt;br /&gt;&lt;br /&gt;이에 대해서는 소스에 주석을 달아 알려드리도록 하겠습니다. ~&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>지능형 SOC로봇워 </title>
            <link>http://www.swssm.org/index.php?idx=348</link>
            <description>&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;저희팀이 SOC 지능형 로봇워에 참가하여 태권로봇 우승이라는 좋은 결과를 내게 되었습니다.&lt;/P&gt; &lt;P class=바탕글&gt;이번 블로그에서는 지능형 로봇워란 무엇인지, 또 경기가 어떻게 진행되는지에 대해서 알아보는 시간을 갖도록 하겠습니다.&lt;/P&gt; &lt;P class=바탕글&gt;SoC(System on Chip)를 활용한 지능형 로봇 구현을 통해 SoC 분야의 고급 기술인력 양성과 함께, 차세대 &lt;/P&gt; &lt;P class=바탕글&gt;성장동력 사업인 IT-SoC, 지능형 Robot 분야의 활성화를 통한 국가 경쟁력 발전의 초석을 마련하기 위해 &lt;/P&gt; &lt;P class=바탕글&gt;지난 2002년 11월 아시아-태평양 SoC 기술대전(AP-SoC 2002)에서 처음으로 개최되었습니다.&lt;/P&gt; &lt;P class=바탕글&gt;경기 종목에는 탱크로봇과 태권로봇 이렇게 두분야가 있습니다.&lt;/P&gt; &lt;P class=바탕글&gt;먼저, 탱크로봇에 대해서 알아보도록 하겠습니다.&lt;/P&gt; [##_1C|1172541718.gif|width=&quot;362&quot; height=&quot;254&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;대회의 규정은 다음과 같습니다.&lt;/P&gt; &lt;P class=바탕글&gt;01. 경기장 규격&lt;/P&gt; &lt;P class=바탕글&gt;A. 정사각형 (지름 4M) &lt;/P&gt; &lt;P class=바탕글&gt;B. 바닥 색은 흰색으로 한다. &lt;/P&gt; &lt;P class=바탕글&gt;C. 벽의 색은 흰색으로 한다. &lt;/P&gt; &lt;P class=바탕글&gt;D. 벽의 높이는 70cm로 한다. &lt;/P&gt; &lt;P class=바탕글&gt;E. 벽면 상단에는 약 15cm 두께의 노란색 띠를 두른다. &lt;/P&gt; &lt;P class=바탕글&gt;F. 경기장 바닥에는 지름 1.5M의 사각형 선(검정색)이 그려져 있으며 선의 안쪽을 경기장 내로 정한다. &lt;/P&gt; &lt;P class=바탕글&gt;G. 녹색 정사각형(35cm X 35cm X 35cm) 4개와 주황색의 'ㄱ'자 장애물이 2개 설치된다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;02. 선수 &lt;/P&gt; &lt;P class=바탕글&gt;H. 팀원&lt;/P&gt; &lt;P class=바탕글&gt;- 참가팀 구성은 2인 이상으로 구성해야 하며 최대 6명까지 가능하다. &lt;/P&gt; &lt;P class=바탕글&gt;I. 로봇 및 두뇌보드&lt;/P&gt; &lt;P class=바탕글&gt;- 로봇 몸체에 기본적으로 장착되어 있는 센서 이외에 다른 센서를 부착할 수 없다. &lt;/P&gt; &lt;P class=바탕글&gt;- 두뇌보드는 주최 측에서 제공하고 있는 두뇌보드 이외에 자체개발한 보드를 사용할 수 있다. &lt;/P&gt; &lt;P class=바탕글&gt;- 단, 자체개발한 보드의 경우도 센서 장착을 금한다. &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;03. 경기시간 &lt;/P&gt; &lt;P class=바탕글&gt;J. 경기시간 - 3분 3라운드 3전 2선승 제 &lt;/P&gt; &lt;P class=바탕글&gt;K. 휴식시간 - 3분 &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;04. 경기진행&lt;/P&gt; &lt;P class=바탕글&gt;L. 정해진 경기시간 동안 상대 로봇에 대해 레이저 공격을 실시함&lt;/P&gt; &lt;P class=바탕글&gt;M. 상대팀의 레이저 포가 로봇에 부착된 센서에 명중할 경우 에너지 게이지가 1개씩 감소됨 &lt;/P&gt; &lt;P class=바탕글&gt;N. 로봇의 에너지 게이지가 0이 될 경우 로봇 동작이 자동으로 정지 &lt;/P&gt; &lt;P class=바탕글&gt;O. 전, 후반 경기 시간 종료 후 상대팀에게 피해를 준 정도를 합산하여 승패를 결정&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;05. 로봇 및 인식기 &lt;/P&gt; &lt;P class=바탕글&gt;P. 1개팀 2대의 로봇과 2개의 보드로 구성&lt;/P&gt; &lt;P class=바탕글&gt;Q. 2대의 로봇은 각각 Master 로봇과 Slave 로봇으로 구분 &lt;/P&gt; &lt;P class=바탕글&gt;- Master 로봇: 원통 인식기 장착, 최대 30발 포 보유 &lt;/P&gt; &lt;P class=바탕글&gt;- Slave 로봇: 원뿔 인식기 장착, 최대 15발 포 보유 &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;06. 판정 &lt;/P&gt; &lt;P class=바탕글&gt;R. 무승부&lt;/P&gt; &lt;P class=바탕글&gt;- 에너지게이지가 남은(파괴되지 않은) 로봇의 수와 관계없이 동일한 개 수 일 경우 무승부로 인정 &lt;/P&gt; &lt;P class=바탕글&gt;S. Game Over&lt;/P&gt; &lt;P class=바탕글&gt;- 남은 경기시간과 관계없이 한 팀의 로봇이 모두 파괴되었을 경우 Game Over로 간주하여 경기를 끝마친다. &lt;/P&gt; &lt;P class=바탕글&gt;T. 에너지게이지에 의한 승패 결정 : &lt;/P&gt; &lt;P class=바탕글&gt;- 경기시간 3분경과 후 양 팀의 로봇이 파괴되지 않은 경우에 에너지 게이지의 남은 수에 따라 승패를 결정 &lt;/P&gt; &lt;P class=바탕글&gt;U. 재경기&lt;/P&gt; &lt;P class=바탕글&gt;- 배터리 소진으로 전원이 OFF 된 경우 (경기시작 후 2분까지)&lt;/P&gt; &lt;P class=바탕글&gt;- 심판의 판단 시 재 경기가 필요한 경우(경기 도중 언제라도 가능) &lt;/P&gt; &lt;P class=바탕글&gt;- 경기시작 1분 이내 양 팀의 합의하에 재경기를 요청한 경우&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;간단하게 설명하면 탱크로봇들이 2:2로 탱크로봇 경기장에서 3분간 적을 공격하여 더 많은 에너지 게이지를 가지는&lt;/P&gt; &lt;P class=바탕글&gt;팀이 이기는 경기인 것이죠.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;그렇다면 태권로봇 경기는 어떤 방식인 걸까요?&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;휴머노이드 형태의 지능로봇으로 로봇의 지능에 해당되는 두뇌보드가 등 부분에 장착되어 있으며, &lt;/P&gt; &lt;P class=바탕글&gt;로봇의 머리에는 카메라가 장착되어 있다. 카메라를 이용하여 상대로봇의 위치, 거리를 판단하여 &lt;/P&gt; &lt;P class=바탕글&gt;공격 및 방어 행동을 하도록 프로그램 하는 것으로 2005년 처음으로 개최되었습니다.&lt;/P&gt; &lt;P class=바탕글&gt;자세한 대회 규정은 다음과 같습니다.&lt;/P&gt; &lt;P class=바탕글&gt;01. 경기장 규격&lt;/P&gt; &lt;P class=바탕글&gt;A. 정팔각형 (지름 2M)&lt;/P&gt; &lt;P class=바탕글&gt;B. 바닥색은 흰색이며 포맥스 5T이다.&lt;/P&gt; &lt;P class=바탕글&gt;C. 벽의 색은 흰색이며 포맥스 3T이다.&lt;/P&gt; &lt;P class=바탕글&gt;D. 벽의 높이는 50cm로 한다.&lt;/P&gt; &lt;P class=바탕글&gt;E. 벽면 상단에는 약 15cm 두께의 노란색 띠를 두른다. &lt;/P&gt; &lt;P class=바탕글&gt;F. 경기장 바닥에는 지름 1.5M의 사각형 선(검정색)이 그려져 있으며 선의 안쪽을 경기장 내로 정한다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;02. 선수 &lt;/P&gt; &lt;P class=바탕글&gt;G. 로봇&lt;/P&gt; &lt;P class=바탕글&gt;- 주최 측에서 지원되는 로봇만이 사용 가능하다.&lt;/P&gt; &lt;P class=바탕글&gt;H. 로봇 복장&lt;/P&gt; &lt;P class=바탕글&gt;- 자유 복장으로 하되, Servo 모터(검정색부분, 카메라포함)와 가슴부위에는 색깔이나 장식을 금지한다.&lt;/P&gt; &lt;P class=바탕글&gt;- 로봇의 몸체에는 경기장 규격에 해당하는 색을 사용할 수 없다.&lt;/P&gt; &lt;P class=바탕글&gt;- 로봇의 영상처리에 방해되는 요소는 사용을 금한다.&lt;/P&gt; &lt;P class=바탕글&gt;- 구조물 변경 및 추가를 금한다. (ex. 서보모터 추가 및 교체, 무기장착 등)&lt;/P&gt; &lt;P class=바탕글&gt;- 기본 제공되는 센서 외에 추가 센서를 장착 할 수 없다.&lt;/P&gt; &lt;P class=바탕글&gt;- 공격 형태는 5가지 이상으로 구성해야 된다.&lt;/P&gt; &lt;P class=바탕글&gt;- 1round 경기 중, 5가지 미만의 공격패턴이 나올 경우, -10 Point &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;03. 경기시간 &lt;/P&gt; &lt;P class=바탕글&gt;I. 경기시간 - 3분 3라운드 3전 2선승 제 &lt;/P&gt; &lt;P class=바탕글&gt;J. 휴식시간 - 3분&lt;/P&gt; &lt;P class=바탕글&gt;K. 작전시간 - 경기를 진행하는 데에 있어, 로봇에 심각한 문제가 발생하였을 경우에 한하여 &lt;/P&gt; &lt;P class=바탕글&gt;작전시간을 요청할 수 있으며 작전시간은 1분으로 한다. &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;04. 경기진행&lt;/P&gt; &lt;P class=바탕글&gt;L. 로봇의 구조물 및 복장 점검 &lt;/P&gt; &lt;P class=바탕글&gt;- 경기에 임하는 로봇은 주최 측의 검사원에 의해 검사를 받는다. &lt;/P&gt; &lt;P class=바탕글&gt;- 검사원은 시정을 요구할 권리를 갖는다. &lt;/P&gt; &lt;P class=바탕글&gt;M. 로봇 입장 &lt;/P&gt; &lt;P class=바탕글&gt;- 검사를 끝마친 로봇은 경기장 내로 입장한다. &lt;/P&gt; &lt;P class=바탕글&gt;N. 경기의 시작과 종료 &lt;/P&gt; &lt;P class=바탕글&gt;- 매 라운드마다 심판의 시작 및 종료 신호에 따라 경기를 진행한다. &lt;/P&gt; &lt;P class=바탕글&gt;O. 경기 진행의 절차 &lt;/P&gt; &lt;P class=바탕글&gt;- 양쪽 로봇은 선수 대기위치에서 서로 마주보고 선후 심판 로봇의 시작 신호 를 받은 후 입례한다. &lt;/P&gt; &lt;P class=바탕글&gt;- 심판의 판단에 의해 서로를 감지하지 못하는 경우, 시작위치로 돌아가 경기를 진행한다. &lt;/P&gt; &lt;P class=바탕글&gt;- 선수는 마지막 라운드가 끝나면 심판 로봇의 신호에 따라 입례 한 후 바로 서서 판정을 기다린다. &lt;/P&gt; &lt;P class=바탕글&gt;- 선수 퇴장 &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;05. 득점&lt;/P&gt; &lt;P class=바탕글&gt;P. 다운에 의한 득점 &lt;/P&gt; &lt;P class=바탕글&gt;- 머리를 맞아 다운되는 경우 10 Point &lt;/P&gt; &lt;P class=바탕글&gt;- 다리로 머리를 맞아 다운되는 경우 15 Point &lt;/P&gt; &lt;P class=바탕글&gt;- 머리 외에 다른 부위를 맞아 다운되는 경우 5 Point &lt;/P&gt; &lt;P class=바탕글&gt;- 로봇이 혼자 스스로 넘어질 경우 -3 Point (경기는 그대로 진행)&lt;/P&gt; &lt;P class=바탕글&gt;* 클린 히트와 다운이 동시에 일어난 경우 점수가 높은 Point를 적용 &lt;/P&gt; &lt;P class=바탕글&gt;* 넘어진 상태의 정의 &lt;/P&gt; &lt;P class=바탕글&gt;- 등, 전면, 또는 무릎이 완전히 땅에 닿은 상태를 다운으로 인정한다. &lt;/P&gt; &lt;P class=바탕글&gt;- 공격 동작 이외에 팔이 바닥면에 닿았을 경우 다운으로 인정한다. &lt;/P&gt; &lt;P class=바탕글&gt;Q. 클린 히트 &lt;/P&gt; &lt;P class=바탕글&gt;- 다리로 다리를 정확히 히트한 경우 1 Point &lt;/P&gt; &lt;P class=바탕글&gt;- 팔로 몸통을 정확히 히트한 경우 2 Point &lt;/P&gt; &lt;P class=바탕글&gt;- 팔로 머리를 정확히 히트한 경우 3 Point &lt;/P&gt; &lt;P class=바탕글&gt;- 다리로 몸통을 히트한 경우 5 Point &lt;/P&gt; &lt;P class=바탕글&gt;- 다리로 머리를 히트한 경우 10 Point &lt;/P&gt; &lt;P class=바탕글&gt;- 경기장 내에서 벗어날 경우 -2 Point (검정색 라인을 밟았을 경우도 경기장 내에서 벗어난 것으로 함) &lt;/P&gt; &lt;P class=바탕글&gt;* 일정 패턴의 공격일 경우, 1회에 한하여 점수 포인트 적용 &lt;/P&gt; &lt;P class=바탕글&gt;R. 공격행태에 따른 감점 &lt;/P&gt; &lt;P class=바탕글&gt;- 넘어지면서 공격할 경우, -3 Point &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;06. 판정 &lt;/P&gt; &lt;P class=바탕글&gt;S. 무승부&lt;/P&gt; &lt;P class=바탕글&gt;- 심판원의 채점 기준에 의해 승패가 결정되지 않을 경우, 연장전에서 득점을 먼저 따내는 로봇이 승리한다. &lt;/P&gt; &lt;P class=바탕글&gt;T. Knock-Out (KO)&lt;/P&gt; &lt;P class=바탕글&gt;- 심판에 의해 로봇이 싸울 의지가 없는 경우, 혹은 싸울 수 없다고 생각되는 경우&lt;/P&gt; &lt;P class=바탕글&gt;- 1라운드 중 공격에 의해 3회 이상 다운이 되는 경우&lt;/P&gt; &lt;P class=바탕글&gt;- KO를 당할 경우, 득점과 상관없이 패배&lt;/P&gt; &lt;P class=바탕글&gt;- 30초 이상 가만히 서있거나, 계속 뒤로만 이동하는 경우 해당경기 패배 &lt;/P&gt; &lt;P class=바탕글&gt;U. 작전시간&lt;/P&gt; &lt;P class=바탕글&gt;- 배터리 소진시 또는 로봇에 문제가 발생할 경우 작전타임을 요청할 수 있으며, 이때에는 - 2 Point 적용 &lt;/P&gt; &lt;P class=바탕글&gt;- 작전타임, 배터리 교환시간 이후 경기를 재개 할 경우는 처음 위치에서 경기를 시작&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;이 또한 간단히 설명을 해 드리도록 하겠습니다. &lt;/P&gt; &lt;P class=바탕글&gt;탱크로봇과 비슷하지만 장애물이 없는 경기장에서 태권로봇 2대가 3분간 치고 받는 싸움을 합니다.&lt;/P&gt; &lt;P class=바탕글&gt;이 싸움을 하는 동안 심판들이 각 로봇의 타격이나 다운에 대한 점수를 체크하게 되고 경기가 끝났을 때, 점수를&lt;/P&gt; &lt;P class=바탕글&gt;합산해서 보다 큰 점수를 획득한 팀이 우승하는 것이지요.&lt;/P&gt; [##_1C|1118106340.gif|width=&quot;362&quot; height=&quot;254&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;각 로봇 대회의 규정을 보면 좀 복잡한 것도 같고 헷갈리는 부분도 없지 않아 있지만, 언제까지나 상식 선에서 타협이&lt;/P&gt; &lt;P class=바탕글&gt;가능하며 이해가능한 규정들입니다. 무엇보다 중요한 것은 그 규칙내에서 얼마나 상대방보다 창의적으로 공격할 수 있느&lt;/P&gt; &lt;P class=바탕글&gt;냐하는 것이 경기를 하며서 느꼈던 노하우라고 생각합니다.&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>여러 가지 색 테이블에 대한 설명. </title>
            <link>http://www.swssm.org/index.php?idx=347</link>
            <description>안녕하세요.^^ 이번에 FPGA로 영상처리를 하는 기회가 생겼습니다. 옛날 부터 생각했지만 FPGA에서 영상처리를 하는 경우 역시 빠르더군요. 이번에 사용한 영상처리 관련 기술로는 Filter밖에 없지만 그래도 720, 480이라는 Size를 생각하면 처리 속도가 빨랐습니다. 이번에 블로그 제목을 &lt;STRONG&gt;'여러 가지 색 테이블'&lt;/STRONG&gt;로 잡았는데요. 영상 처리에서 중요한 부분이 색을 어떻게 다루는 것입니다. 이 색을 어떻게 다루냐에 따라서 Filter에서 처리하는 결과가 만족 할 수 있고 그렇지 않을 수도 있으니까요. 자 그럼 본격적으로 색 테이블에 대해 설명하겠습니다. 먼저 알고 계시는지요. &lt;STRONG&gt;각각 사람들이 보는 색이 다르다는 것을요.&lt;/STRONG&gt; 그 만큼 색이란 '이 것이다'라고 정의하기 힘들죠. 그렇기 때문에 이를 정의 하기 위해 여러 방법으로 색을 결정하게 됩니다. 그럼 어떤 것이 있는지 알아 보겠습니다. &lt;br /&gt;&lt;br /&gt;1. RGB Table [##_1C|1244563363.gif|width=&quot;373&quot; height=&quot;310&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;nbsp; &lt;DIV&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;[RGB Color Table] &lt;br /&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;/DIV&gt;- 가장 기본적인 Table이라고 할 수 있습니다. CRT컬러 모니터가 처음 나올 시 Red, Blue, Green 값을 기준으로 이 세 가지 색을 혼합하여 여러가지 색을 만들 수 있습니다. 하지만 RGB Table에는 많은 허점이 있습니다. 조명에 매우 민감하다는 것입니다. 그렇기 때문에 영상처리를 함에 있어서 RGB값 만을 사용하는 경우는 거의 없습니다. &lt;br /&gt;&lt;br /&gt;2. HSI Table [##_1C|1358474031.jpg|width=&quot;569&quot; height=&quot;224&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [HSI Color Table]&lt;br /&gt;&lt;br /&gt;[##_1C|1282575519.jpg|width=&quot;295&quot; height=&quot;172&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;nbsp; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;[RGB to HSI 색 변환 공식] &lt;/DIV&gt;&lt;br /&gt;- 색상(Hue), 채도(Saturation), 명도(Intensity)라는 세 가지 특성들이 컬러를 설명하는데 사용되기 때문에 이와 대응되는 컬러 모델을 HSI라고 합니다. HSI 컬러 공간을 사용할 때 어떤 컬러를 만들어 내기 위해서 몇 퍼센트의 파란색이나 녹색이 필요한지 알 필요가 없게 되죠. 진한 빨간색을 분홍색으로 바꾸기 위해 단순히 채도를 조절합니다. 어두운 것을 밝게 하려면 명도를 변경합니다. 색상 : 0도에서 360도의 범위를 가진 각도로 표현 합니다. 채도 : 0에서 1까지의 범위를 가지는 반지름에 해당합니다. 명도 : z축에 해당하는데 0일 때는 검정색을, 1일때는 흰색을 나타냅니다. 채도가 1일때, 그 컬러는 원뿔기반의 모형의 꼭대기 가장자리에 위치합니다. 채도가 강할수록 그 컬러는 명도에 따라서 흰색-&amp;gt;회색-&amp;gt;검정색이 됩니다. 색상의 조절은 각도에 따라 0도에서는 빨간색, 120도에서는 녹색, 240도에서는 파란색, 360도에서는 다시 빨간색으로 변합니다. 명도가 0이면 컬러는 검정색이어서 색상은 정의되지 않습니다. &lt;br /&gt;&lt;br /&gt;3. YUV Table [##_1C|1228968945.jpg|width=&quot;180&quot; height=&quot;180&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [YUV Color Table] &lt;br /&gt;&lt;br /&gt;[##_1C|1304542816.jpg|width=&quot;417&quot; height=&quot;75&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [RGB to YUV 색 변환 공식] &lt;br /&gt;&lt;br /&gt;[##_1C|1320372244.jpg|width=&quot;331&quot; height=&quot;73&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[YUV to RGB 색 변환 공식] &lt;br /&gt;&lt;br /&gt;- Y(Iuma component)와 U, V(chrominance components)로 구성된 YUV는 Y채널은 색의 명암을 나타내고 U와 V채널은 두 가지가 동시에 색을 결정합니다. YUV는 과거 흑백 티비 시절에 컬러 티비를 보기 위해 개발된 것 입니다. 흑백 티비에서는 Y채널정보만을 처리해 출력해 주고, 컬러 티비는 U, V채널 정보도 같이 처리해 컬러 영상까지 볼 수 있게 되는 것이죠, 이런 방식의 한 가지 장점은 밝기 정보와 컬러 정보를 분리할 수 있다는 점입니다. 사람의 눈은 컬러 보다는 밝기에 훨씬 민감합니다. 그렇기 때문에 대역폭을 줄이기 위해 밝기 정보는 그대로 두고 컬러 정보를 최대한 줄여 화질의 손상이 크게 눈에 띄지 않은 채 대역폭을 줄일 수 있게 되는 것 입니다. 이러한 이유로 Y채널 정보는 이미지 크기만큼만 필요하고 U, V채널정보는 2*2pixels를 한 색으로 나타내는 방식의 정보가 필요하게 됩니다. &lt;br /&gt;&lt;br /&gt;4. Lab Table [##_1C|1189537782.jpg|width=&quot;271&quot; height=&quot;324&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [Lab Color Table] &lt;br /&gt;&lt;br /&gt;[##_1C|1378478986.jpg|width=&quot;600&quot; height=&quot;340&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] [##_1C|1068992265.jpg|width=&quot;600&quot; height=&quot;271&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [RGB to Lab 색 변환 공식] &lt;br /&gt;&lt;br /&gt;- Lab Color는 CIE(Centre Internationale dEclairage)에서 만든 컬러 모델입니다. Lab Color의 가장 큰 목적은 &lt;STRONG&gt;'같은 색이라 해도 출력 장치에 따라 다르게 나오는 단점을 보완하는 것'&lt;/STRONG&gt;입니다. 출력장치에 따른 색의 차이를 완전히 없애는 것은 근본적으로 불가능 하지만 그 차이를 최소한으로 줄이는 것은 가능 합니다. 이에 Lab시스템은 CIE에서 이전에 사용해 왔던 CIE 모델을 기본으로 발표된 것으로 xyz 3개의 축상에서 입체적으로 색을 표현할 수 있습니다. L(Luminosity)축은 밝기를 나타냅니다. a는 green에서 magenta 까지의 보색, b는 blue에서 yellow까지의 보색을 나타 냅니다. a와 b는 색상(Hue)에 관한 정보를 가지고 있으며 L축은 색의 밝기에 관한 모든 정보를 가지고 있게 되는 셈이죠. Lab 시스템에서 L값을 조절하면 Hue의 값에 영향을 미치지 않지만 HSB시스템에서 보면 B(Brightness)로는 나타낼 수 없는 범위가 생깁니다. 이 때문에 Hue 값이 바뀌게 되죠. 간단하게 몇 가지 색 테이블을 살펴 봤는데요. 이 외에도 여러 가지의 색 테이블이 존재 합니다.(찾다보니...양이 많더라고요) 역시 아직까지는 우리의 눈으로 보는 모든 색을 디지털화 시키기에는 역부족이구나 하는 생각이 들었습니다. 그럼 색 테이블을 잘 이용해서 원하는 색을 잘 뽑아 낼 수 있길 바랍니다. 그럼 이만 마치겠습니다.
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>파일 접근에 대한 IRP 분석 </title>
            <link>http://www.swssm.org/index.php?idx=345</link>
            <description>&lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;안녕하세요. 19기 이지혜입니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;저는 이번 블로깅 주제로 파일 접근, 이동, 복사 등 다양한 파일 접근에 대해 &lt;/p&gt; &lt;p&gt;어떤 IRP가 파일 시스템으로 날라가는지에 대해 알아보고자 합니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;우리가 파일에 대해 열기나 복사 등 다양한 파일 관련 동작을 하기 위해 I/O 요청을 발생시키면&lt;/p&gt; &lt;p&gt;I/O 관리자는 적절한 I/O 동작을 요청하는 IRP(I/O Request Packet)를 만들어&lt;/p&gt; &lt;p&gt;파일시스템 드라이버에 전달하게 됩니다.&lt;/p&gt; &lt;p&gt;그럼 파일 시스템 드라이버는 그 IRP에 담긴 정보와 요청을 확인하고&lt;/p&gt; &lt;p&gt;해당 요청을 보낸 대상에 대한 파일접근 권한 등을 확인 한 후 그것을 허락할지 말지를 결정합니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;우리가 복사나 이동 등의 동작을 수행하게 되면 그 동작에 대한 단 하나의 IRP가 날라가는 것은 아닙니다.&lt;/p&gt; &lt;p&gt;파일 접근이 가능한지도 알아보고, 또 파일이 어떤 정보를 가지고 있는지 정보를 요구하기도 하고,&lt;/p&gt; &lt;p&gt;필요에 따라 적절히 정보를 다시 셋팅하도록 만들기도 하는 등의 작업이 조합되어야 하기 때문에&lt;/p&gt; &lt;p&gt;우리는 단순히 파일을 이동시켰음에도 불구하고 수많은 IRP들이 날라가 그 동작을 완성시키게 됩니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;우리는 이런 다양한 종류의 파일 접근 요청에 대해 파일 시스템 필터 드라이버를 작성해&lt;/p&gt; &lt;p&gt;특정 파일에 대해 다양한 동작을 했을 때 어떤 IRP들이 날라가는지 알아보았습니다.&lt;/p&gt; &lt;p&gt;(참고로 테스트 OS는 Windows XP, 테스트 파일은 jpg 형식이었습니다.)&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;우선 간단하게 개요하자면,&lt;/p&gt; &lt;p&gt;우리가 파일에 대해 특별히 어떠한 동작을 요구하지 않아도 단순히 마우스오버를 한다던지,&lt;/p&gt; &lt;p&gt;그 파일이 담긴 폴더를 연다던지 하는 동작을 할 때도 IRP가 발생합니다.&lt;/p&gt; &lt;p&gt;이유는 마우스 오버를 할 때나 그 파일에서 오른쪽 마우스 클릭을 할 때도&lt;/p&gt; &lt;p&gt;해당 파일에 대한 정보를 얻어와 그것을 보여주어야 하고,&lt;/p&gt; &lt;p&gt;그 파일이 담긴 폴더를 열 때도 파일 정보 등을 얻어와야 하기 때문에&lt;/p&gt; &lt;p&gt;마우스로 단순히 스쳐가는 것 같은 실질적으로 우리는 큰 의미를 담지 않은 동작에도 많은 IRP가 발생합니다.&lt;/p&gt; &lt;p&gt;예를 들면 마우스 오버에는&lt;/p&gt; &lt;p&gt;IRP_MJ_create&lt;/p&gt; &lt;p&gt;IRP_MJ_query_volume_information, FileFsVolumeInformation&lt;/p&gt; &lt;p&gt;IRP_MJ_query_information, FileAllInformation&lt;/p&gt; &lt;p&gt;IRP_MJ_read&lt;/p&gt; &lt;p&gt;IRP_MJ_close&lt;/p&gt; &lt;p&gt;IRP_MJ_cleanup&lt;/p&gt; &lt;p&gt;위와 같은 IRP들을 발생시킵니다.&amp;#160; (앞에 있는 것이 IRP type, 뒤에 있는 것이 option입니다.)&lt;/p&gt; &lt;p&gt;IRP_MJ_create는 파일 오브젝트에 대한 핸들을 얻어오고자 하는 것이고&lt;/p&gt; &lt;p&gt;주로 qeury_information 같은 IRP들은 어떠한 정보를 얻고 싶을 때 보내는 IrP인데,&lt;/p&gt; &lt;p&gt;뒤의 옵션들을 볼 때 파일이 있는 볼륨에 대한 정보와 파일의 All Information 을 얻어오고자 하는 것 같습니다.&lt;/p&gt; &lt;p&gt;그리고 파일을 읽고, 핸들을 닫습니다.&lt;/p&gt; &lt;p&gt;주로, create, close, cleanup 같은 경우는 모든 파일 접근과 관련하여 거의 기본적으로 필수로 필요한 IRP들이라&lt;/p&gt; &lt;p&gt;이후 설명에서 이 IRP들과 관련된 내용은 생략하고,&lt;/p&gt; &lt;p&gt;qeury_information이나 set_information같이 좀더 특수한 상황에 발생하는 IRP를 중점적으로 알아보겠습니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;lt;파일 열기&amp;gt;&lt;/p&gt; &lt;p&gt;파일을 열게되면 위에서 언급한 create, close 같은 IRP 외에도 &lt;/p&gt; &lt;p&gt;RP_MJ_query_volume_information, FileFsVolumeInformation&lt;/p&gt; &lt;p&gt;IRP_MJ_query_information, FileAllInformation&lt;/p&gt; &lt;p&gt;IRP_MJ_query_volume_information, FileFsControlQueryInformation&lt;/p&gt; &lt;p&gt;가 발생합니다.&lt;/p&gt; &lt;p&gt;위의 두개는 아까 설명한 단순한 클릭에도 발생하는 것들이었고,&lt;/p&gt; &lt;p&gt;좀 특별하게는 IRP_MJ_query_volume_information, FileFsControlQueryInformation 가 발생하는 것이 특징입니다.&lt;/p&gt; &lt;p&gt;그러나 이것은 파일을 여는 프로세스나 여는 방식에 따라서도 좀 달라보이기 때문에 &lt;/p&gt; &lt;p&gt;좀 더 관찰이 필요할 것 같습니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;lt;파일 저장&amp;gt;&lt;/p&gt; &lt;p&gt;파일 저장을 할 때도 다양한 IRP들이 나타나지만&lt;/p&gt; &lt;p&gt;IRP_MJ_set_information, FileEndOfFileInformation&lt;/p&gt; &lt;p&gt;IRP_MJ_set_information, fileAllocationInformation&lt;/p&gt; &lt;p&gt;IRP_MJ_write&lt;/p&gt; &lt;p&gt;가 연달아 나타나는 것이 특징입니다.&lt;/p&gt; &lt;p&gt;파일 저장을 할 때는 write IRP가 많이 날라가는데, 파일을 쓰는 동작이니 당연한거겠죠?&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;위의 IRP 시퀀스 조합은 다른이름으로 저장이나 새로 저장 등을 할 때도 동일하게 나타나지만,&lt;/p&gt; &lt;p&gt;아쉽게도 다른 이름으로 저장은 기존 파일에 대해서가 아니라 새로운 파일에 대해서만 나타나기 때문에&lt;/p&gt; &lt;p&gt;기존 파일에서는 내가 다른 이름으로 저장 당하는지 알 길이 없습니다.&lt;/p&gt; &lt;p&gt;query_information 등을 날려서 정보를 좀 참조할 법도 한데요..&lt;/p&gt; &lt;p&gt;이유는 기존 파일은 프로세스가 파일을 열 때 필요한 내용을 모두 읽어오고 핸들을 닫아버리기 때문입니다.&lt;/p&gt; &lt;p&gt;그 이후에는 그 파일에 다시 접근(저장한다던지)하지 않는 이상 그 파일에 대해서는 참조하지 않습니다.&lt;/p&gt; &lt;p&gt;따라서 다른이름으로 저장같은 것을 알고싶을 때는 IRP 분석이 아니라&lt;/p&gt; &lt;p&gt;SDT 후킹 등의 방식을 사용하여야 합니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;lt;파일 복사&amp;gt;&lt;/p&gt; &lt;p&gt;파일 복사는 조금 복잡합니다.&lt;/p&gt; &lt;p&gt;전송되는 IRP들이 다양하기도 하고,&lt;/p&gt; &lt;p&gt;또 기존파일에 어떠한 연결고리를 가지고 내가 복사된다~~ 이것을 알려주는 것이 아니라&lt;/p&gt; &lt;p&gt;단순히 파일을 읽을 때처럼 정보만을 요청하여 필요한 정보를 쏙쏙 집어먹은 후&lt;/p&gt; &lt;p&gt;그것을 토대로 새로운 파일을 새로 저장하는 방식과 유사하게 저장하기 때문입니다.&lt;/p&gt; &lt;p&gt;따라서 복사는 내가 이 파일을 그대로 카피한다는 개념보다는&lt;/p&gt; &lt;p&gt;어떤 파일을 읽은 후, 유사한 이름으로 다시 저장한다, 로 이해하시면 더 쉬우실 것 같습니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;그러나 그렇다고 복사를 알 수 있는 어떠한 특이점도 없느냐? 그것은 아닙니다.&lt;/p&gt; &lt;p&gt;복사를 할 때도 그들만의 특이한 IRP들이 날라갑니다.&lt;/p&gt; &lt;p&gt;좀 눈여겨 볼 것들이&lt;/p&gt; &lt;p&gt;IRP_MJ_query_information, FileObjectIdInformation&lt;/p&gt; &lt;p&gt;IRP_MJ_query_information, FileStreamInformation&lt;/p&gt; &lt;p&gt;IRP_MJ_query_information, FileEaInformation&lt;/p&gt; &lt;p&gt;..&lt;/p&gt; &lt;p&gt;IRP_MJ_query_volume_information, FileFsAttributeInformation(copy되는 새로운 파일)&lt;/p&gt; &lt;p&gt;IRP_MJ_query_volume_information, FileFsAttributeInformation&lt;/p&gt; &lt;p&gt;..&lt;/p&gt; &lt;p&gt;IRP_MJ_set_information, FileEndOfFileInformation(copy되는 새로운 파일&lt;/p&gt; &lt;p&gt;IRP_MJ_set_information, FileBasicInformation(copy되는 새로운 파일)&lt;/p&gt; &lt;p&gt;IRP_MJ_write(copy되는 새로운 파일)&lt;/p&gt; &lt;p&gt;이 아이들인데요.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;먼저 복사할 파일에 대해 FileObjectIdInformation, FileStreamInformation, FileEaInformation 옵션을 가진&lt;/p&gt; &lt;p&gt;qeury information IRP들을 나란이 쏙쏙쏙 날립니다.&lt;/p&gt; &lt;p&gt;그리고 복사할 파일과 복사될 파일에 대한 볼륨 정보를 얻기 위해&lt;/p&gt; &lt;p&gt;FileFsAttributeInformation 옵션으로 하여 두개를 나란히 날리구요.&lt;/p&gt; &lt;p&gt;마지막 세개는 위에서 보았던 파일저장과는 조금 다르지만&lt;/p&gt; &lt;p&gt;어쨌든 파일을 저장하는 형태임을 알 수 있겠습니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;따라서 저런 형태가 연달아서 나란히 나타나면 복사로 추측합니다.&lt;/p&gt; &lt;p&gt;The Kerberos 시스템에서는 좀 더 정확성을 기하기 위해&lt;/p&gt; &lt;p&gt;IRP가 쏟아져 들어오면 저 시퀀스가 무너질 수도 있다는 가능성을 감안하여&lt;/p&gt; &lt;p&gt;저 IRP들이 들어올 때 복사되는 파일과 복사하는 파일의 경로 또는 파일이름의 유사성까지 비교하였는데요,&lt;/p&gt; &lt;p&gt;그렇지만 보통 저 IRP들은 하나의 동작에 대해 어느 도 단일성을 가지고 날라오는 IRP이므로&lt;/p&gt; &lt;p&gt;순서가 바뀌거나 다른 것이 끼어들 확률은 지극히 낮다고 보시면 됩니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;lt;파일 이동 / 이름변경&amp;gt;&lt;/p&gt; &lt;p&gt;파일 이동이나 이름 변경의 경우에는 분석이 가장 간단한 경우인데요.&lt;/p&gt; &lt;p&gt;많은 query_information같은 IRP 들이 날라오긴 하지만&lt;/p&gt; &lt;p&gt;IRP_MJ_set_information, FileRenameInformation&lt;/p&gt; &lt;p&gt;이 IRP 하나로 모든 수사를 깔끔하게 종결시킬 수 있습니다.&lt;/p&gt; &lt;p&gt;이 IRP에 파일의 full path가 변경되며, 이것으로 다시 set 해달라는 정보를 담고있는데요.&lt;/p&gt; &lt;p&gt;full path에 대한 변경에 해당하는 IRP이기 때문에&lt;/p&gt; &lt;p&gt;파일 이동과 이름변경 모두 이 IRP를 날립니다.&lt;/p&gt; &lt;p&gt;따라서 만약 두가지를 분리하고 싶다면 IRP가 대상으로 하는 파일의 full path와 &lt;/p&gt; &lt;p&gt;IRP 시스템 버퍼에 들어있는 이 rename에 관련된 정보에 담긴 full path를 비교하면 &lt;/p&gt; &lt;p&gt;이동인지 이름변경인지를 알 수 있겠지요. &lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;한가지 주의할 점은 이 IRP가 성공할 수도 있고 실패할 수도 있는데요.&lt;/p&gt; &lt;p&gt;만약 같은 폴더에 동일한 이름이 있다면 이름변경을 거부당하겠지요.&lt;/p&gt; &lt;p&gt;이것은 파일 시스템 드라이버에서 처리가 완료되어 나오는 내용을 분석하면 성공 여부를 알 수 있습니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;lt;파일 삭제&amp;gt;&lt;/p&gt; &lt;p&gt;마지막으로 파일 삭제인데요.&lt;/p&gt; &lt;p&gt;이것도 위의 이동처럼 &lt;/p&gt; &lt;p&gt;IRP_MJ_set_information, FileDispositionInformation&lt;/p&gt; &lt;p&gt;이 IRP 하나로 깔끔하게 알 수 있습니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;그러나 주의할 것은 휴지통으로 삭제와 영구삭제의 차이인데요.&lt;/p&gt; &lt;p&gt;영구삭제는 저 IRP들을 끝으로 깔끔하게 끝나지만 휴지통 삭제는 조금 다릅니다.&lt;/p&gt; &lt;p&gt;휴지통으로 삭제하는 것은 삭제긴 하지만 실질적으로 휴지통에 그 정보가 남아있는 것이기 때문에&lt;/p&gt; &lt;p&gt;저 IRP를 날린 후 다시 IRP_MJ_set_information, FileRenameInformation 을 날려&lt;/p&gt; &lt;p&gt;파일의 full path를 휴지통 내에서 고유한 파일 path를 부여받아 그것으로 변경하기 때문에&lt;/p&gt; &lt;p&gt;실질적으로는 파일 삭제보다는 이동쪽에 더 가깝다고 여기시면 될 것 같습니다.&lt;/p&gt; &lt;p&gt;마찬가지로 복원시에도 휴지통의 경로에서 원래의 경로로 rename됩니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;이상 다양한 파일접근에 대한 IRP들을 분석해보았습니다.&lt;/p&gt; &lt;p&gt;이 정보가 다양한 파일 시스템과 필터드라이버 제작에 도움이 되었으면 합니다.&lt;/p&gt; &lt;p&gt;감사합니다.&lt;/p&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Clipboard Hook : ‘복사/ 붙여 넣기’를 막아보자! </title>
            <link>http://www.swssm.org/index.php?idx=346</link>
            <description>&lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;안녕하세요!!&amp;nbsp; ‘The Kerberos’ 프로젝트의 박병훈입니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;소프트웨어멤버십에서 진행한 프로젝트인 ‘The Kerberos’는 보안 관리자가 지정한 &lt;strong&gt;중요한 파일들을 감시하는&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;&lt;strong&gt; 보안 프로젝트&lt;/strong&gt;입니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;이 프로젝트에서는 보안 파일들에 대한 특정 액세스( 복사, 삭제, 이름 변경 등 )들을 파일 필터 드라이버를 통해 감시하게&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt; 되는데 다음과 같은 경우에는 필터 드라이버만으로 보안 파일이 유출 되는 것을 감시하는데 한계가 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;font face=&quot;나눔고딕&quot;&gt;보안 파일(text type)을 열어두고 텍스트 내용을 다른 텍스트 편집기로 ‘&lt;strong&gt;복사 &amp;amp; 붙여 넣기&lt;/strong&gt;’를 하여 유출하는 경우&lt;/font&gt; &lt;/li&gt;&lt;/ul&gt; &lt;br /&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;위와 같은 경우는 보안 파일을 직접적으로 이동이나 복사를 하지 않았기 때문에 파일 필터 드라이버에서는 유출 과정을&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;알아차리지 못하게 됩니다. 그래서 이러한 경우를 막기 위하여 &lt;strong&gt;Dll Injection&lt;/strong&gt; 기법을 사용했습니다. 그래서 이번 포스팅에&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;서는 Dll Injection에 관한 전반적인 설명과 간단한&amp;nbsp; 메모장에서 ‘복사 &amp;amp; 붙여 넣기’를 방지하는 방법을 소개할까 합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;제가 제목에 Clipboard Hook이라고 적어 놓은 이유는 Dll Injection을 통하여 클립보드의 내용을 가로채서 따로 조작해보려&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;고 하기 때문입니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;다들 다 아시겠지만 윈도우에서 ‘복사’ 또는 ‘ctrl + c’를 하게 되면 그 내용이 클립보드라는 곳으로 이동하게 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;클립보드는 윈도우 운영체제가 관리하는 공유 메모리 공간입니다. 이를 통해서 서로 다른 프로그램 사이에 데이터를 주고 받&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;을 수 있는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;클립보드를 이용하는 방법에는 크게 다음과 같은 두 가지 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;font face=&quot;나눔고딕&quot;&gt;API 함수를 호출하여 전역 메모리 블록을 두고 받는 방법&lt;/font&gt; &lt;/li&gt;&lt;li&gt;&lt;font face=&quot;나눔고딕&quot;&gt;IDataOnject 표준 COM 인터페이스를 통해 데이터를 주고 받는 방법&lt;/font&gt; &lt;/li&gt;&lt;/ul&gt; &lt;br /&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;여기서 저는 API 함수 호출로 클립보드의 내용을 지우는 방법을 사용해보겠습니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;그럼 일단 Dll Injection 기법이 무엇인지 간단히 알아보겠습니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;윈도우에는 수 많은 .dll 파일들이 존재합니다. DLL(Dynamic Link Library: 동적 링크 라이브러리)은 어떤 기능이 실행 파일&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;에 직접 덧붙여지지 않고, .dll 파일에 독립적으로 존재하다가 프로그램이 실행될 때 동적으로 링크되어 사용됩니다. 따라서 &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;메모리와 하드 디스크를 절약할 수 있고 프로그램 실행 속도가 빨라질 수 있으며 프로그램의 모듈화가 가능합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;제가 하고자 하는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; &lt;ol&gt;&lt;li&gt;&lt;strong&gt;&lt;font face=&quot;나눔고딕&quot;&gt;.dll 파일 생성&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;font face=&quot;나눔고딕&quot;&gt;클립보드 내용을 지우는 코드 작성 후 .dll 파일에 추가&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;font face=&quot;나눔고딕&quot;&gt;메모장에&amp;nbsp; 1, 2번을 통해 만들어진 .dll 파일을 끼어 넣어서 클립보드가 지원지게 함&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;정말 간단합니다~! 단 3단계의 과정만 거치면 끝입니다. 그럼 1, 2, 3번 과정을 구체적으로 알아 보겠습니다.&lt;/font&gt;&lt;/p&gt; &lt;br /&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot; size=&quot;5&quot;&gt;&lt;strong&gt;■ .dll 생성 및 클립보드 내용 지우기&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;나눔고딕&quot; size=&quot;5&quot;&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;img style=&quot;width: 645px; height: 570px;&quot; src=&quot;http://lh4.ggpht.com/_AIK0xcRuTKk/Sqj_BuzRi6I/AAAAAAAAAPQ/razN-ePTBFI/s800/dll.JPG&quot;&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot; size=&quot;5&quot;&gt;&lt;strong&gt;&lt;strong&gt;■&lt;/strong&gt; .dll 파일 특정 프로세스에 삽입하기&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;img style=&quot;width: 664px; height: 630px;&quot; src=&quot;http://lh4.ggpht.com/_AIK0xcRuTKk/Sqj_Bs1V9yI/AAAAAAAAAPM/r8MYqJiNdg4/s800/main.JPG&quot;&gt; &lt;br /&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;지금까지 소스 코드로 Dll Injection 방법으로 메모장의 클립보드를 막는 방법을 알아보았습니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;보시면 아시겠지만 몇 줄 안 되는 코드로 간단하게 클립보드를 막았습니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;이 소스를 조금만 변형하고 응용한다면 더 재미있는 프로그램을 만들 수 있을 것이라 생각합니다.&lt;/font&gt;&lt;/p&gt; &lt;br /&gt; &lt;p&gt;&lt;font face=&quot;나눔고딕&quot;&gt;그럼 이번 포스팅을 이것으로 마치겠습니다^^&lt;/font&gt;&lt;/p&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>FLEX - Socket 통신 및 UTF 16 처리 방법 </title>
            <link>http://www.swssm.org/index.php?idx=343</link>
            <description>&lt;p&gt;안녕하세요? 수원멤버십 18-2기 백성욱입니다.&lt;/p&gt; &lt;p&gt;이번 포스팅 주제는 FLEX 에서 Socket 통신하는 방법과 UTF-16 처리 방법입니다. &lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;FLEX에서 소켓통신을 하기 위해서는 Socket 객체를 사용해야 됩니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://tt_attach_path/1136096892.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1026634537.png&quot; width=&quot;220&quot; height=&quot;48&quot; /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://tt_attach_path/1040400890.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1085785508.png&quot; width=&quot;563&quot; height=&quot;97&quot; /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;먼저 소켓 객체를 생성하고 connect(“연결할 서버”, “포트번호) 이런 식으로 함수를 호출하면 연결이 완료됩니다. 그리고 FLEX에서는 거의 모든 객체가 EventListener 라는 함수를 가지고 있는데 소켓통신에서도 상당히 유용하게 쓰입니다.&lt;/p&gt; &lt;p&gt;위의 코드를 예로 설명 드리겠습니다.&lt;/p&gt; &lt;p&gt;먼저 socket에서 사용하는 이벤트로 Event.CONNECT 와 ProgressEvent.SOCKET_DATA 가 있습니다.&lt;/p&gt; &lt;p&gt;Event.CONNECT:&lt;/p&gt; &lt;p&gt;소켓이 연결이 되었을 경우 발생하는 이벤트로서 addEventListener 함수의 2번째 파라미터에 호출할 함수를 지정해주면 해당 이벤트가 발생할 때마다 호출하게 됩니다.&lt;/p&gt; &lt;p&gt;ProgressEvent.SOCKET_DATA:&lt;/p&gt; &lt;p&gt;연결된 socket 객체로부터 전달받는 DATA가 있을 경우 발생하는 이벤트입니다. 쉽게 이야기해서 보통 C 에서는 while(1) 상태로 소켓으로부터 전달받는 DATA를 기다리고 있는 데 FLEX 에서는 위와 같이 addEventListener 함수에 이벤트와 함수를 등록함으로써 해결할 수 있습니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;다음으로 소켓으로 서버에게 데이터를 전송하고 받는 과정을 설명 드리겠습니다.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://tt_attach_path/1277010387.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1114818072.png&quot; width=&quot;462&quot; height=&quot;260&quot; /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;일단 FLEX에서 서버로 전송하는 내용이 총 12 byte 라고 가정하고 설명 드리겠습니다.&lt;/p&gt; &lt;p&gt;4byte : 전체 전송하는 바이트 크기&lt;/p&gt; &lt;p&gt;4byte : 데이터 번호&lt;/p&gt; &lt;p&gt;4byte : 패킷 Number&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;위와 같은 정보를 서버에게 보내기 위해서 일단 ByteArray 이라는 객체를 선언합니다. 일반적인 Array 와 다른 점은 모든 데이터를 byte로 처리한다는 점입니다. &lt;/p&gt; &lt;p&gt;숫자관련 정보의 경우 다음과 같은 함수들을 사용합니다.&lt;/p&gt; &lt;p&gt;4byte의 정보를 숫자로 보내고 싶을 경우&lt;/p&gt; &lt;p&gt;writeInt();&lt;/p&gt; &lt;p&gt;2byte의 정보를 숫자로 보내고 싶을 경우 &lt;/p&gt; &lt;p&gt;writeShort();l&lt;/p&gt; &lt;p&gt;만약 Unsigned형으로 보내고 싶을 경우 위의 함수에 Unsigned만 붙여주면 됩니다. &lt;/p&gt; &lt;p&gt;ex) writeUnsignedInt() ;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;ByteArray에 저장된 내용을 서버와 연결된 Socket 객체를 통해 전송하고 싶을 경우 일단 Socket 객체의 버퍼에 전송할 내용을 저장합니다.&lt;/p&gt; &lt;p&gt;이 방법은 ByteArray 에 정보를 저장하는 것과 동일합니다.&lt;/p&gt; &lt;p&gt;writeBytes(ByteArray 객체, 전송할 내용의 시작 번지, 전송할 내용의 총 Byte 사이즈);&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;위에서 보면 bytesAvailable 이라는 것이 있는 데 이것은 ByteArray 객체가 가지고 있는 바이트의 크기를 의미합니다. 이 함수는 특히 서버로부터 전송 받는 데이터를 처리할 때 유용하게 쓰입니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;마지막으로 flush() 함수를 호출함으로써 연결된 서버에게 데이터를 전송하게 됩니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;다음은 소켓으로부터 받은 데이터 처리 방법입니다. &lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://tt_attach_path/1406235283.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; align=&quot;left&quot; src=&quot;http://tt_attach_path/1224401137.png&quot; width=&quot;538&quot; height=&quot;801&quot; /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;다음은 UTF 16 처리 방법입니다. 사실 FLEX에서 기본적으로 UTF 16을 지원해주는 줄 알고 있었고 실제로 FLEX 개발문서를 보아도 이 부분에 대한 지원이 명시되어있었습니다.&lt;/p&gt; &lt;p&gt;하지만 FLEX 개발자 커뮤니티 같은 곳에서 확인해보면 이 문제에 대한 논의가 많습니다. 된다, 안 된다 등등… 이번에 프로젝트할때도 사실 readMultiByte(“읽을 바이트 수”, “char-set”) 이런 식으로 해보았지만 해결되지 않아서 별도로 클래스를 만들어서 처리하는 작업을 진행하였습니다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;서버로부터 받은 UTF-16 정보를 String로 변환하는 함수&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://tt_attach_path/1318200811.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1250095609.png&quot; width=&quot;543&quot; height=&quot;186&quot; /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;FLEX 에서 서버로 전송할 때 String 정보를 UTF-16 로 변환하는 함수&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://tt_attach_path/1346328847.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1388676321.png&quot; width=&quot;544&quot; height=&quot;479&quot; /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;이상으로 포스팅을 마치겠습니다. 감사합니다. ^^&lt;/p&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>식물에게 영향을 주는 소리 분석은 어떻게 할까. </title>
            <link>http://www.swssm.org/index.php?idx=342</link>
            <description>&lt;P&gt;안녕하세요. 김혜진입니다. 오늘은 소리 분석 알고리즘에 대해 설명하도록 할게요. 그런데 그림이 안올라가서..;; 글만 쓸게요;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;우리가 소리를 분석하는 기준은 식물이 들었을 때 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;좋은 소리인가 나쁜 소리인가를 판단하는 것이다. 이러한 기준은 여러 가지 실험을 통해서 증명된 바 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;있듯 &lt;FONT color=#ff0000&gt;1/f의 패턴&lt;/FONT&gt;을 가진 자연의 소리 패턴과 가까운 소리에 대해서 좋은 소리라고 판단하고 식물에게 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;좋은 영향을 끼친다는 것을 사용자에게 알려준다. 실제로 그린농법 등 좋은 소리가 식물의 성장과 밀접&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;한 관계가 있다는 것은 모두가 잘 아는 사실이다. 다만, 어떤 소리가 좋은 지는 실험을 통해서만 증명&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;이 가능하기 때문에 그 시간 투자 비용도 만만치가 않다. 이번에 우리 프로젝트를 통해서 좋은 소리와 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;나쁜 소리를 구분하도록 한다.&lt;br /&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:oo=&quot;1&quot; b:bi=&quot;4&quot; b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;① Detect Voice &amp;amp; End Detect Point(EDP)&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:oo=&quot;1&quot; b:bi=&quot;4&quot; b:bd=&quot;7&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;- 오른쪽은 소리가 음성인지 아닌지를 &amp;nbsp;판단하는 &amp;nbsp;Detect Voice 함수이다. 한 음성 데이타값은 1024개&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;의 주파수로 이루어져 있다. 이 각 음성 데이타값들의 크기를 모두 저장해서 총 프레임의 에너지를 구&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;한다.&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:oo=&quot;1&quot; b:bi=&quot;4&quot; b:bd=&quot;8&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;- 레퍼런스 에너지값을 미리 정해놓았다가 이 에너지값보다 큰 데이타값이 들어오면 이것은 음성일지도 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;모른다는 가정을 하고 일정 StartLimit만큼 기다렸다가 그 뒤부터는 음성으로 판단하게 된다.&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:oo=&quot;1&quot; b:bi=&quot;4&quot; b:bd=&quot;7&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;- 레퍼런스 에너지값보다 작은 소리가 들어오면 일정 EndLimit만큼 기다렸다가 에너지가 다시 오르지 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;않으면 음성이 끊겼다고 간주하고 목소리를 파일로 저장하게 된다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&amp;nbsp; int i;&lt;br /&gt;&amp;nbsp;int data = 0, nTotal = 0, tmData;&lt;br /&gt;&amp;nbsp;static int IsRecording = 0, IsLowCombo = FALSE;&lt;br /&gt;&amp;nbsp;static long EndOffset = 0;&lt;/DIV&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&amp;nbsp;// current frame's energy&lt;br /&gt;&amp;nbsp;for(i=0; i &amp;lt; nCount; i++)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; tmData = abs(pData[i] - 128);&lt;br /&gt;&amp;nbsp; data += tmData*tmData;&lt;br /&gt;&amp;nbsp; nTotal += tmData;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;UpdateData(FALSE);&lt;/DIV&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&lt;br /&gt;&amp;nbsp;if(data &amp;gt;= (int) m_nReferancEnergy) // 음성 신호가 기준 전력보다 클때. &lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(!IsRecording) // 시작 점 탐지.&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;//m_InfoText.SetWindowText(&quot;음성 감지 시작&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp;IsRecording = TRUE;&lt;br /&gt;&amp;nbsp; &amp;nbsp;IsLowCombo = FALSE;&lt;br /&gt;&amp;nbsp; &amp;nbsp;m_fp = fopen(FTMP,&quot;wb&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp;if(!m_fp){return FALSE;}&lt;br /&gt;&amp;nbsp; }&amp;nbsp;&lt;/DIV&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&amp;nbsp; SetDlgItemText(IDC_STATUS, _T(&quot;음성신호들어옴&quot;));&lt;br /&gt;&amp;nbsp; fwrite(pData, sizeof(unsigned char)*nCount, 1, m_fp);&lt;br /&gt;&amp;nbsp; m_cntspeech++;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;else // 음성 신호가 기준 전력보다 작을때 &lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(m_cntspeech != 0)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;// 바뀐부분, 음성신호가 아님&lt;br /&gt;&amp;nbsp; &amp;nbsp;if(m_cntspeech &amp;lt; m_nStartPointLimit &amp;amp;&amp;amp; m_cntspeech &amp;gt;= 1)&lt;br /&gt;&amp;nbsp; &amp;nbsp;{ &lt;br /&gt;&amp;nbsp; &amp;nbsp; IsRecording = FALSE;&lt;br /&gt;&amp;nbsp; &amp;nbsp; fclose(m_fp);&lt;br /&gt;&amp;nbsp; &amp;nbsp; m_fp = NULL;&lt;br /&gt;&amp;nbsp; &amp;nbsp; m_cntspeech = 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; m_cntNotspeech = -1;&lt;br /&gt;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp; &amp;nbsp;else // 기준 전력보다 작아도 진행중으로 판단.&lt;br /&gt;&amp;nbsp; &amp;nbsp;{ &lt;br /&gt;&amp;nbsp; &amp;nbsp; if(IsLowCombo) // 전 프레임에서 기준 전력보다 낮았음.&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;EndOffset += nCount;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IsLowCombo = TRUE;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; else // 전단계에서 기준 전력보다 높았음.&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;EndOffset = nCount;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IsLowCombo = TRUE;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(m_cntNotspeech &amp;gt;= 0 &amp;amp;&amp;amp; m_cntNotspeech &amp;lt; m_nEndPointLimit) // 데이타 저장.&lt;br /&gt;&amp;nbsp; &amp;nbsp; { &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fwrite(pData, sizeof(unsigned char)*nCount, 1, m_fp);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;m_cntNotspeech++;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;data = 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;&lt;br /&gt;&amp;nbsp; &amp;nbsp; } &lt;br /&gt;&amp;nbsp; &amp;nbsp; else &lt;br /&gt;&amp;nbsp; &amp;nbsp; { &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;m_SoundSize = ftell(m_fp);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(m_fp != NULL) { fclose(m_fp); m_fp = NULL;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;m_cntspeech = 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;m_cntNotspeech = -1; // 끝점이라고 인식. &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IsRecording = FALSE;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;OptimaizeEndPoint(EndOffset - nCount);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;EndOffset = 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;IsLowCombo = FALSE;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return TRUE;&lt;br /&gt;&amp;nbsp; &amp;nbsp; } &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/DIV&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:oo=&quot;2&quot; b:bi=&quot;4&quot; b:bd=&quot;3&quot;&gt;&lt;br /&gt;&lt;br /&gt;② LPF&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:bd=&quot;4&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;- 저역 통과 필터이다. 이는 특정 주파수 이하의 신호만 통과시키는 것이다. 위 알고리즘을 모든 음성&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;으로 검출된 데이터에 적용시키는데 여기서는 0.95로 지정해놓았다.&lt;br /&gt;&lt;/P&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;//m_PreEmphasysCoef = 0.95&lt;br /&gt;&amp;nbsp; YData =&amp;nbsp; (Data - 128) - (unsigned char)(0.95*(double)(PreData - 128));&lt;br /&gt;&amp;nbsp; YData += 128;&lt;br /&gt;&lt;br /&gt;PreData = Data;&lt;/DIV&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:bd=&quot;4&quot;&gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:oo=&quot;3&quot; b:bi=&quot;4&quot; b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;③ Hamming window&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:bd=&quot;4&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;- 윈도우를 취하는 함수는 retangular, bartlett, hamming, hanning 등 여러 가지 있다. 우리는 이 중 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;해밍 윈도우를 취하였다. 윈도우 크기마다 아래의 해밍함수를 적용시켜 주파수 분석하기 좋은 파형을 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;만든다.&lt;br /&gt;&lt;/P&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;for(i = 0; i &amp;lt; WINDOWLENGTH; i++)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;InValue = (double)(DataBlk[i] - 128);&lt;br /&gt;&amp;nbsp; &amp;nbsp;Value = 0.0;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Wn = 0.54 - 0.46 * cos( factor*( i) );&lt;br /&gt;&amp;nbsp; &amp;nbsp;Value = Wn*InValue;&lt;br /&gt;&amp;nbsp; &amp;nbsp;DataBlk[i] = (unsigned char)(Value+128);&lt;br /&gt;&amp;nbsp; &amp;nbsp;OptimaVal += (long)(Value*Value) ;&lt;br /&gt;}&lt;br /&gt;&lt;/DIV&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:bd=&quot;4&quot;&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;아래는 다른 윈도우 함수들을 비교해놓은 것이다.ㅠㅠ 그림을 올리고 싶어라.&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&lt;br /&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:oo=&quot;4&quot; b:bi=&quot;4&quot; b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;④ FFT &amp;amp; MFCC&lt;br /&gt;// fft 수식&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:bd=&quot;4&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;- 해밍 윈도우 함수 처리된 값을 저장한 파일을 읽어들이고 FFT, FFT 특징점, Energy, MFCC 들에 대&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;한 각 함수를 만든다. 여기까지의 과정을 거쳐 레퍼런스들과 분석 자료들이 만들어져서 DB에 저장된다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:oo=&quot;5&quot; b:bi=&quot;4&quot; b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&lt;br /&gt;⑤ Reference 비교&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:bd=&quot;4&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;- DTW(Dynamic Time Warping)이라는 알고리즘에서 참고하여 이 비교 알고리즘을 만들었다. DTW는 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;연산량이 적고 구조가 간단하여 실시간 검출이 필요한 프로그램 등에서 많이 사용된다. 우리는 실시간&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;성이어야 하며 긴 대화 문장이나 실제 단어를 인식하는 것이 아닌 패턴을 비교하는 것이므로 DTW의 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;패턴 비교 알고리즘을 차용하여 분석을 하였다. &lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:bd=&quot;4&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;우선, 분석한 자료들과 음성의 분석 자료들을 비교하는데 그 파라미터 개수를 비교하여 같지 않으면 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;두 개가 다른 것으로 판단한다. 이런 식으로 데이타베이스에 저장되어있는 레퍼런스들과 비교를 한다. &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;파라미터 개수가 같으면 각 파라미터들 사이 거리를 구한다. 그 거리는 특징점 사이의 거리이다. 즉, 파&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;형에서 특징점을 추출하여 파라미터로 만들고 각 비교 음성들에 대해서 특징점 사이 간격이 다를 수 있&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;으므로 그것을 계산한다. 특징점들 사이의 간격을 gain이라고 하여 가지고 있다가 gain이 최소가 되는 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;레퍼런스의 패턴이 좋은 패턴이면 좋은 소리라고 나쁜 패턴이면 나쁜 소리라고 식물이 말을 하게 해준&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;다.&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; b:bd=&quot;4&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 바탕&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT size=2&gt;⑥ 다른 알고리즘&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT size=2&gt;- 위 알고리즘은 여러 음성을 검출하는 데는 편리하고 탁월하지만 실제로 좋은 패턴이냐 나쁜 패턴이냐 두 가지 구분하는 데는 뛰어나지 않다. 레퍼런스가 충분히 많지 않아서기도 했을 테지만 사람이 좋다고 생각하는 말도 식물에게 나쁜 영향을 준다고 판단하기도 하고 같은 말인데도 화자가 다를 경우 다른 말로 인식하여 다른 결과를 도출하기도 했다. 좀 더 많은 실험이 필요하겠지만 위 알고리즘 외에도 새로운 알고리즘을 통해 식물과 사람이 좀 더 교감할 수 있도록 할 수 있어야 할 것이다.&lt;/FONT&gt;&lt;/P&gt; &lt;P&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;&amp;nbsp;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>영상 스트리밍 서비스 </title>
            <link>http://www.swssm.org/index.php?idx=344</link>
            <description>&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;안녕하세요. 19-1기 임승훈입니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이번에는 영상 스트리밍 서비스와 그 방식에 관해 간단한 설명을 하겠습니다.^^&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt; &lt;P class=s0 style=&quot;TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;우선 스트리밍 서비스는&lt;SPAN lang=EN-US&gt; 1995&lt;/SPAN&gt;년 리얼네트워크사가 개발한 리얼오디오에서 처음으로 선보였습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;스트리밍 서비스란 콘텐츠를 하드디스크 드라이브에 다운로드 받아 재생하던 것을 다운로드 없이 실시간으로 재생해 주는 기법을 말합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;전송되는 데이터가 마치 물이 흐르는 것처럼 처리된다고 해서&lt;SPAN lang=EN-US&gt; '&lt;/SPAN&gt;스트리밍&lt;SPAN lang=EN-US&gt;(streaming)'&lt;/SPAN&gt;이라는 명칭이 붙여졌습니다&lt;/FONT&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;.&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;스트리밍과 일반&lt;SPAN lang=EN-US&gt; http &lt;/SPAN&gt;프로토콜의 차이는 다음과 같습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;스트리밍은 클라이언트의 하드디스크에 파일을 위치 시키지 않으며 콘텐츠를 실시간으로 재생합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;또한 원하는 시간으로 탐색할 수 있는 특징이 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;반면&lt;SPAN lang=EN-US&gt; http &lt;/SPAN&gt;프로토콜을 이용한 콘텐츠 재생은 파일이 일정량 이상 다운로드 되지 않으면 재생이 불가하고 완전히 다운로드 되기 전까지는 원하는 시간으로의 탐색이 불가능 합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;또한 스트리밍 서비스는 무단 다운로드를 방지할 수도 있어 보안이 용의하여 월드와이드웹의 콘텐츠 서비스에서 많이 사용되고 있습니다&lt;/FONT&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;.&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;스트리밍이 동작하려면 데이터를 수신하고 있는 클라이언트 측은 데이터를 모으고&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;그 데이터를 사운드나 그림으로 변환해 주는 응용프로그램에 끊임없이 보내줄 수 있어야 합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;만약 클라이언트가 데이터를 수신하는 속도가 너무 빠르면 여분의 데이터를 버퍼에 저장하면서 동시에 스트리밍하게 됩니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;그러나 데이터 수신 속도가 빠르지 않으면 데이터의 표현이 매끄럽지 않게 됩니다&lt;/FONT&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;.&lt;br /&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;하지만 현재 인터넷회선의 속도 증진과 서버 및 컴퓨터 그리고&lt;SPAN lang=EN-US&gt; OS &lt;/SPAN&gt;및 솔루션&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;코덱들이 고루 발전함에 따라 그러한 문제점들은 차츰 사라져가고 있습니다&lt;/FONT&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;.&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;스트리밍 서비스는 압축&lt;SPAN lang=EN-US&gt;(encoding)&lt;/SPAN&gt;된 콘텐츠를 작은 단위&lt;SPAN lang=EN-US&gt;(&lt;/SPAN&gt;패킷&lt;SPAN lang=EN-US&gt;)&lt;/SPAN&gt;로 쪼갠 다음&lt;SPAN lang=EN-US&gt;, IP&lt;/SPAN&gt;에 연속적&lt;SPAN lang=EN-US&gt;(Streaming)&lt;/SPAN&gt;으로 전송하고&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;이를 원격지의 사용자의 단말기&lt;SPAN lang=EN-US&gt;(PC)&lt;/SPAN&gt;에서 다시 연속적으로 재생&lt;SPAN lang=EN-US&gt;(&lt;/SPAN&gt;조합&lt;SPAN lang=EN-US&gt;,&lt;/SPAN&gt;압축해제&lt;SPAN lang=EN-US&gt;-Decoding)&lt;/SPAN&gt;하여 콘텐츠를 서비스 받을 수 있게 되는 것입니다&lt;/FONT&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;.&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;이렇게 작은 단위&lt;SPAN lang=EN-US&gt;(&lt;/SPAN&gt;패킷&lt;SPAN lang=EN-US&gt;)&lt;/SPAN&gt;로 쪼개서&lt;SPAN lang=EN-US&gt; IP&lt;/SPAN&gt;에 연속적으로 전송하기 위해서는 스트리밍 서버가 필요합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;스트리밍서버에서는 콘텐츠를 정해진 위치를 찾아 패킷단위로 전송해주어야 하고&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;네트워크의 트래픽 증가를 제어하며 안정적인 서비스를 제공해야 합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;이러한 기능들을 담당하는 것이 바로 스트리밍 솔루션입니다&lt;/FONT&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;.&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;스트리밍 솔루션의 기능으로는 유니캐스트&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;멀티캐스트&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;브로드캐스트를 통한 패킷 전송&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;네트워크 트래픽의 제어&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;콘텐츠관리 등 서버의 안정성과 관리자의 편의성을 고려하여 제작됩니다&lt;/FONT&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;.&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;스트리밍 서버의&lt;SPAN lang=EN-US&gt; OS&lt;/SPAN&gt;의 종류로는&lt;SPAN lang=EN-US&gt; Windows Server, LINUX, Solaris &lt;/SPAN&gt;가 있습니다&lt;/FONT&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;. &lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; mso-bidi-font-family: 굴림&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;스트리밍 솔루션의 종류로는 대표적인 예가&lt;SPAN lang=EN-US&gt; Windows NT,2003 Server&lt;/SPAN&gt;와 함께 운영되는&lt;SPAN lang=EN-US&gt; Windows Media Service(&lt;/SPAN&gt;이하&lt;SPAN lang=EN-US&gt; WMS)&lt;/SPAN&gt;가 있습니다&lt;SPAN lang=EN-US&gt;. WMS&lt;/SPAN&gt;는 사용하기 편리한&lt;SPAN lang=EN-US&gt; GUI&lt;/SPAN&gt;를 제공하며&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;주문형 게시지점을 생성함으로서&lt;SPAN lang=EN-US&gt; VOD(Video On Demand) &lt;/SPAN&gt;스트리밍 서비스를 제공합니다&lt;/FONT&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;콘텐츠를 라이브로 브로드캐스트하려면 스트림을 인코더에서&lt;SPAN lang=EN-US&gt; Windows Media &lt;/SPAN&gt;서버로 &lt;SPAN style=&quot;FONT-FAMILY: 굴림; mso-bidi-font-family: 굴림&quot;&gt;푸시&lt;SPAN lang=EN-US&gt;(push)&lt;/SPAN&gt;&lt;/SPAN&gt;할 것인지 클라이언트&lt;SPAN lang=EN-US&gt;(Windows Media &lt;/SPAN&gt;서버 또는 플레이어&lt;SPAN lang=EN-US&gt;)&lt;/SPAN&gt;가 스트림을 &lt;SPAN style=&quot;FONT-FAMILY: 굴림; mso-bidi-font-family: 굴림&quot;&gt;풀&lt;SPAN lang=EN-US&gt;(pull)&lt;/SPAN&gt;&lt;/SPAN&gt;하도록 할 것인지 선택해야합니다.&lt;br /&gt;자신의 현재 상황에 맞는 방법을 선택하면 되겠죠.^^&lt;br /&gt;&lt;/FONT&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;우선, 푸시(push) 방식에 대해서 설명드리겠습니다. &lt;/FONT&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;인코더가 방화벽 안쪽에 있거나 인코더를 출발점으로 하여 연결을 시작하려는 경우 인코더에서 스트림을 푸시&lt;SPAN lang=EN-US&gt;(push)&lt;/SPAN&gt;하는 것이 좋습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;예를 들어&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;갑자기 사장님 직원들에게 이야기하는 내용을 스트리밍해야 하는 경우를 가정해 보겠습니다&lt;SPAN lang=EN-US&gt;. Windows Media &lt;/SPAN&gt;서버는 회사 방화벽 밖의 원격 위치에 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;게다가 서버 관리자는 아무 것도 전달 받지 못한 상태입니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;인코더에서 스트림을 푸시&lt;SPAN lang=EN-US&gt;(push)&lt;/SPAN&gt;하면 방화벽을 통과하여 스트림을 얻을 수 있으므로 사장님의 요구를 충족시킬 수 있으며 서버 관리자를 급히 호출하지 않아도 됩니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;푸시&lt;SPAN lang=EN-US&gt;(Push) &lt;/SPAN&gt;배포는&lt;SPAN lang=EN-US&gt; Windows .NET Server 2003&lt;/SPAN&gt;과 함께 제공되는&lt;SPAN lang=EN-US&gt; Windows Media &lt;/SPAN&gt;서비스&lt;SPAN lang=EN-US&gt; 9 &lt;/SPAN&gt;시리즈에서만 사용할 수 있습니다.&lt;br /&gt;&amp;nbsp;아래는 푸시(push) 방식에 관한 간단한 샘플 코드입니다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; // Pushing a Stream to a Windows Media Server&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Configure the encoding session including the input sources and profile.&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=s0 style=&quot;TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Create a push distribution object.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; IWMEncPushDistribution PushDist = (IWMEncPushDistribution)Encoder.Broadcast;&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=s0 style=&quot;TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Declare variables.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; string sServerName;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; string sPubPoint;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; string sPubTemplate;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; string sBrdcstInfo;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; string sMyNSCFile;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; string sMyNSCURL;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; string sMyASXFile;&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=s0 style=&quot;TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Provide values for the following variables.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; sServerName = &quot;211.189.127.80:8888&quot;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; sPubPoint = &quot;test&quot;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; sPubTemplate = &quot;EXISTING_PUBLISHING_POINT_NAME&quot;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; sBrdcstInfo = &quot;NAME OF THE BROACAST INFORMATION FILE&quot;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; sMyNSCFile = &quot;NAME OF THE NSC FILE TO CREATE&quot;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; sMyNSCURL = &quot;URL TO THE NSC FILE YOU CREATE&quot;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; sMyASXFile = &quot;NAME OF THE ANNOUNCMENT FILE&quot;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=s0 style=&quot;TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Specify the server name, publishing point, an existing publishing&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // point, and then generate an NSC file and announcement file.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=s0 style=&quot;TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; PushDist.ServerName = sServerName;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; PushDist.PublishingPoint = sPubPoint;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //PushDist.Template = sPubTemplate;&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=s0 style=&quot;TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Specify whether to destroy the publishing point.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; PushDist.AutoRemovePublishingPoint = false;&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=s0 style=&quot;TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Initialize the encoding session.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Encoder.PrepareToEncode(true);&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=s0 style=&quot;TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Generate the announcement file.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //PushDist.GenerateMulticastInfoFile(sMyNSCFile);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //PushDist.GenerateAnnouncementFile(sMyNSCURL, sMyASXFile);&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=s0 style=&quot;TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Start encoding.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Encoder.Start();&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=s0 style=&quot;TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; catch (Exception ex)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // TODO: Handle exceptions.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; MessageBox.Show(ex.Message + &quot;:&quot; + ex.StackTrace.ToString());&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;풀(pull)방식은 W&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;indows Media &lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt; LINE-HEIGHT: 140%&quot;&gt;서버를 사용해 스트림을 말그대로 풀&lt;SPAN lang=EN-US&gt;(pull)하게 됩&lt;/SPAN&gt;니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;우선&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;배포 서버가 여러 개이고 모든 연결이 서로 다른 시간에 이루어질 경우 각 서버에서 스트리밍할 준비가 완료되면 인코더와의 연결을 시작할 수 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;다음으로&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;서버와 인코더 간의 대역폭 사용을 최소화하는 게 중요한 경우 서버에서 풀&lt;SPAN lang=EN-US&gt;(pull)&lt;/SPAN&gt;하는 것이 좋습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;예를 들어&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;서버 관리자는 게시 지점을 추가하고 클라이언트가 요청하면 게시 지점이 자동으로 시작되도록 구성할 수 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;이렇게 하면 첫 번째 클라이언트가 연결할 때까지 서버와 인코더의 연결이 시작되지 않습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;따라서 서버와 인코더 간에 대역폭이 불필요하게 사용되지 않습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;이 시나리오는&lt;SPAN lang=EN-US&gt; Windows .NET Server 2003&lt;/SPAN&gt;과 함께 제공되는&lt;SPAN lang=EN-US&gt; Windows Media &lt;/SPAN&gt;서비스&lt;SPAN lang=EN-US&gt; 9 &lt;/SPAN&gt;시리즈에서만 사용할 수 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;마지막으로&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;서버가 방화벽을 사용하는 경우에도 서버에서 풀&lt;SPAN lang=EN-US&gt;(pull)&lt;/SPAN&gt;하는 것이 좋습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;예를 들어&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;회의 때 이벤트를 스트리밍해야 하기 때문에 공용 네트워크에서 인코더를 설정한다고 가정해 보겠습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;보호된 네트워크의 배포 서버로 스트림을 가져오면 서버 관리자는 방화벽을 통해 스트림을 풀&lt;SPAN lang=EN-US&gt;(pull)&lt;/SPAN&gt;할 수 있습니다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;&amp;nbsp;아래는 풀(pull) 방식에 대한 간단한 샘플 코드입니다.&lt;br /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; // Pull a Stream to a Windows Media Server&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Create an IWMEncBroadcast object.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; IWMEncBroadcast Brdcst;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Brdcst = Encoder.Broadcast;&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Retrieve the port number. The port number defaults to zero.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; int iPortNum;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; iPortNum = Brdcst.get_PortNumber(WMENC_BROADCAST_PROTOCOL.WMENC_PROTOCOL_HTTP);&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Set the port number.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Brdcst.set_PortNumber(WMENC_BROADCAST_PROTOCOL.WMENC_PROTOCOL_HTTP, 2356);&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; catch (Exception ex)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // TODO: Handle exceptions.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; MessageBox.Show(ex.Message + &quot;:&quot; + ex.StackTrace.ToString());&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이번 AITV 프로젝트에서는 방송자 측에서 인증과정의 복잡함을 제거하기 위해 풀(Pull) 방식을 채택하였으며, 방화벽은 설정을 통해 해당 Port만을 접근 가능하도록 설정하였습니다.&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>간단한 mp3 플레이어 만들어 보기!@ </title>
            <link>http://www.swssm.org/index.php?idx=341</link>
            <description>&lt;P&gt;안녕하세요 !&lt;br /&gt;&lt;br /&gt;간단한 자작 mp3플레이어를 만들수있는 코드와 설명을&amp;nbsp; 하겠습니다.&lt;br /&gt;&lt;br /&gt;먼저 directshow SDK 가 깔려있어야 겠죠?&lt;br /&gt;&lt;br /&gt;//////////////////////////////////////////////////////////////&lt;br /&gt;#include &amp;lt;dshow.h&amp;gt;&lt;br /&gt;#include &amp;lt;conio.h&amp;gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt; &lt;P&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;char c = 0;&lt;br /&gt;&amp;nbsp;HRESULT hr;&lt;br /&gt;&amp;nbsp;IGraphBuilder * pFGM;&lt;br /&gt;&amp;nbsp;IMediaControl * pMC;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;// COM 라이브러리를 초기화해야 합니다.&lt;br /&gt;&amp;nbsp;hr = CoInitialize(NULL);&lt;br /&gt;&amp;nbsp;if (FAILED(hr))&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; printf(&quot;COM 라이브러리를 초기화할 수 없습니다.\n&quot;);&lt;br /&gt;&amp;nbsp; return;&lt;br /&gt;&amp;nbsp;}&lt;/P&gt; &lt;P&gt;&amp;nbsp;// 필터 그래프 매니저 컴포넌트를 생성하고, 인터페이스를 가져 와야하겠죠?&lt;br /&gt;&amp;nbsp;hr = CoCreateInstance(&lt;br /&gt;&amp;nbsp; CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,&lt;br /&gt;&amp;nbsp; IID_IGraphBuilder, (LPVOID*)&amp;amp;pFGM);&lt;br /&gt;&amp;nbsp;if (FAILED(hr))&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; printf(&quot;필터 그래프 매니저를 생성할 수 없습니다.\n&quot;);&lt;br /&gt;&amp;nbsp; return;&lt;br /&gt;&amp;nbsp;}&lt;/P&gt; &lt;P&gt;&amp;nbsp;printf(&quot;필터 그래프 매니저가 성공적으로 만들어졌습니다.\n&quot;);&lt;/P&gt; &lt;P&gt;&amp;nbsp;// 필터 그래프를 만들기 위해 널 렌더링을 실행한다.(디폴트 랜더러가 실행됩니다^^)&lt;br /&gt;&amp;nbsp;hr = pFGM-&amp;gt;RenderFile(L&quot;ayaysir - BPM 156.mp3&quot;, NULL);&lt;br /&gt;&amp;nbsp;if (FAILED(hr))&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; printf(&quot;필터 그래프를 만드는데 실패했습니다.\n&quot;);&lt;br /&gt;&amp;nbsp; return;&lt;br /&gt;&amp;nbsp;}&lt;/P&gt; &lt;P&gt;&amp;nbsp;printf(&quot;필터 그래프가 성공적으로 만들어졌습니다.\n&quot;);&lt;/P&gt; &lt;P&gt;&amp;nbsp;// 필터 그래프 매니저로부터 미디어 제어 인터페이스를 가져옵니다.&lt;br /&gt;&amp;nbsp;hr = pFGM-&amp;gt;QueryInterface(IID_IMediaControl, (void**)&amp;amp;pMC);&lt;br /&gt;&amp;nbsp;if (FAILED(hr))&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; printf(&quot;필터 그래프 매니저로부터 IMediaControl 인터페이스를 가져올 수 없습니다.\n&quot;);&lt;br /&gt;&amp;nbsp; return;&lt;br /&gt;&amp;nbsp;}&lt;/P&gt; &lt;P&gt;&amp;nbsp;// 아래 루프에서 미디어 제어 인터페이스를 이용하여 미디어 파일을 제어한다.&lt;br /&gt;//IMediaControl * pMC; 변수 선언한것 기억 나시죠?&lt;br /&gt;//이 변수를 가지고 미디어 파일을 제어 한답니다.&lt;br /&gt;//이 기능을 수행하기 위해&lt;br /&gt;//바로 위에서 &amp;nbsp; hr = pFGM-&amp;gt;QueryInterface(IID_IMediaControl, (void**)&amp;amp;pMC);&lt;br /&gt;//이런 작업을 해준 것입니다.&lt;br /&gt;&amp;nbsp;while (c != 'q')&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; printf(&quot;Commands: r(run/resume), s(stop), p(pause), q(quit)\n&quot;);&lt;br /&gt;&amp;nbsp; printf(&quot;&amp;gt; &quot;);&lt;br /&gt;&amp;nbsp; c = _getche();&lt;/P&gt; &lt;P&gt;&amp;nbsp; switch (c)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;case 'r':&lt;br /&gt;&amp;nbsp; &amp;nbsp; hr = pMC-&amp;gt;Run();&lt;br /&gt;&amp;nbsp; &amp;nbsp; printf(&quot;\n미디어 파일을 재생합니다.\n&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (FAILED(hr))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;printf(&quot;미디어 파일을 재생할 수 없습니다.\n&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; break;&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp;case 's':&lt;br /&gt;&amp;nbsp; &amp;nbsp; pMC-&amp;gt;Stop();&lt;br /&gt;&amp;nbsp; &amp;nbsp; printf(&quot;\n미디어 파일 재생을 중지합니다.\n&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (FAILED(hr))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;printf(&quot;미디어 파일 재생을 중지할 수 없습니다.\n&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; break;&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp;case 'p':&lt;br /&gt;&amp;nbsp; &amp;nbsp; pMC-&amp;gt;Pause();&lt;br /&gt;&amp;nbsp; &amp;nbsp; printf(&quot;\n미디어 파일 재생을 일시정지합니다.\n&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (FAILED(hr))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;printf(&quot;미디어 파일 재생을 일시정지할 수 없습니다.\n&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; break;&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp;case 'q':&lt;br /&gt;&amp;nbsp; &amp;nbsp; printf(&quot;\n프로그램을 종료합니다.\n&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; // 특별한 조치를 취하지는 않음.&lt;br /&gt;&amp;nbsp; &amp;nbsp; break;&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp;default:&lt;br /&gt;&amp;nbsp; &amp;nbsp; ;&lt;br /&gt;&amp;nbsp; }&lt;/P&gt; &lt;P&gt;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;}&lt;/P&gt; &lt;P&gt;&amp;nbsp;// 종료 전에 리소스 해제&lt;br /&gt;&amp;nbsp;pMC-&amp;gt;Stop();&lt;br /&gt;&amp;nbsp;pMC-&amp;gt;Release();&lt;br /&gt;&amp;nbsp;pFGM-&amp;gt;Release();&lt;br /&gt;&amp;nbsp;CoUninitialize();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;이렇게하면 mp3를 실행하는 간단한 플레이어가 만들어진답니다.&lt;br /&gt;&lt;br /&gt;데이터의 흐름은 스트림과 같아서&amp;nbsp; Source에서 Renderer로 흐르게 되는데&lt;br /&gt;&lt;br /&gt;사이에 &amp;nbsp;hr = pFGM-&amp;gt;QueryInterface(IID_IMediaControl, (void**)&amp;amp;pMC) 이런 인터페이스를&lt;br /&gt;&lt;br /&gt;이용하여 멈추거나 , 재생하거나 하는것이죠^^&lt;br /&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Mixing &amp; Volume 조절 </title>
            <link>http://www.swssm.org/index.php?idx=340</link>
            <description>&lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;　 &lt;SPAN lang=EN-US&gt;Ring My Bell&lt;/SPAN&gt;팀의 이용희회원입니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;　 이번 글에서는&lt;SPAN lang=EN-US&gt; PCM &lt;/SPAN&gt;데이터의&lt;SPAN lang=EN-US&gt; &lt;STRONG&gt;Mixing&lt;/STRONG&gt;&lt;/SPAN&gt;과&lt;SPAN lang=EN-US&gt; &lt;STRONG&gt;Volume&lt;/STRONG&gt;&lt;/SPAN&gt;에 대해 설명 드리겠습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;　 일단 글 본론에 대해 설명하기 전에&lt;SPAN lang=EN-US&gt; PCM&lt;/SPAN&gt;이 무엇인지 먼저 알아보겠습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;　 &lt;SPAN lang=EN-US&gt;PCM(Pulse Code Modulation)&lt;/SPAN&gt;은 아날로그 데이터 전송을 위한 디지털 설계로&lt;SPAN lang=EN-US&gt;, PCM &lt;/SPAN&gt;내의 신호들은 바이너리&lt;SPAN lang=EN-US&gt;(1&lt;/SPAN&gt;과&lt;SPAN lang=EN-US&gt; 0)&lt;/SPAN&gt;로 표현되는 두 가지 상태만 가능합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;아무리 복잡한 아날로그 파형이라도 이 사실은 변하지 않습니다&lt;SPAN lang=EN-US&gt;. PCM&lt;/SPAN&gt;을 사용하여 동영상&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;비디오&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;음성&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;음악&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;원격측정&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;가상 현실 등을 포함한 모든 형태의 아날로그 데이터를 디지털화하는 것이 가능합니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;　 아날로그 신호를&lt;SPAN lang=EN-US&gt; PCM&lt;/SPAN&gt;화 시키는 데에는 표본화&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;양자화&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;부호화의 과정을 거칩니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;　 표본화&lt;SPAN lang=EN-US&gt;(Sampling)&lt;/SPAN&gt;과정은 필요한 정보를 취하기 위해 원 신호를 시간 축에서 일정한 주기로 추출하는 것을 말합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;따라서 표본 값으로 이루어진 펄스 열은 펄스진폭변조&lt;SPAN lang=EN-US&gt;(PAM, Pulse Amplitude Modulation)&lt;/SPAN&gt;가 됩니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;표본화는 일정시간 간격으로 아날로그 신호의 순시치를 취하는 과정으로 표본화의 주기가 짧을수록 원래의 신호를 충실히 재현할 수 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;신호의 최고 주파수&lt;SPAN lang=EN-US&gt; 2&lt;/SPAN&gt;배 이상으로 데이터를 표본화하면 원래 데이터 신호를 거의 재현할 수 있습니다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;[##_Gallery|1087444404.jpg||width=&quot;400&quot; height=&quot;300&quot;_##]양자화 과정은 표본화 과정을 통해 얻은 펄스진폭변조신호를 디지털화하기 위해 부호화에 필요한 비트 수를 정하고&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;해당 비트 수에 의해서 표현이 가능한 독립적인 개수만큼의 양자화 레벨을 선정하여 표본의 크기를 그와 가까운 크기의 양자화 레벨에 근사화 시키는 것입니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;양자화 비트수가 많으면 원 신호를 충실히 부호화할 수 있으나&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;부호&lt;SPAN lang=EN-US&gt;-&lt;/SPAN&gt;복호기&lt;SPAN lang=EN-US&gt;(CODEC)&lt;/SPAN&gt;와 중계기 등의 고속화가 필요합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;따라서 품질의 경제성을 고려하여 비트 수를 결정해야 합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;양자화 과정에서는 아날로그 신호를 디지털 신호로 변환하면서 반올림 절차를 거치게 됨으로 약간의 오차가 생길 수 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;이로 인해 생기는 잡음을 양자화 잡음이라고 하며&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;이를 줄이기 위해서는 양자화 레벨을 증가시켜 양자화 레벨 사이의 간격을 적게 하거나&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;신호의 크기에 따라 양자화 간격을 달리 취하는 비선형 양자화 방법을 취할 수 있습니다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;[##_Gallery|1386273367.jpg||width=&quot;400&quot; height=&quot;300&quot;_##]　부호화 과정은 양자화된 값을 이진수로 표현하는 것입니다&lt;SPAN lang=EN-US&gt;. 4Bit&lt;/SPAN&gt;의 양자화라면&lt;SPAN lang=EN-US&gt; 1&lt;/SPAN&gt;을&lt;SPAN lang=EN-US&gt; 0001&lt;/SPAN&gt;로&lt;SPAN lang=EN-US&gt;, 2&lt;/SPAN&gt;를&lt;SPAN lang=EN-US&gt; 0010&lt;/SPAN&gt;로&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;나머지 값들도 앞과 같은 방식으로 저장하게 됩니다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;[##_Gallery|1139551892.jpg||width=&quot;400&quot; height=&quot;300&quot;_##]　위와 같은 방식으로 아날로그 데이터를 &lt;SPAN lang=EN-US&gt;PCM Data&lt;/SPAN&gt;로 변환하여 저장할 수 있습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;이제 본론으로 들어가겠습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;STRONG&gt;첫 번째로 다룰 것은&lt;SPAN lang=EN-US&gt; Mixing&lt;/SPAN&gt;입니다&lt;/STRONG&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;.&lt;/STRONG&gt; Mixing&lt;/SPAN&gt;이란 두 개 이상의 소리를 합쳐 하나의 소리로 만드는 것을 의미합니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;직접 음악을 들으면서 이해해보도록 하겠습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;여기&lt;SPAN lang=EN-US&gt; A&lt;/SPAN&gt;와&lt;SPAN lang=EN-US&gt; B&lt;/SPAN&gt;라는 각각 독립된 소리가 있습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;[##_Jukebox|1280558985.mp3|A|autoplay=0 visible=1|_##][##_Jukebox|1334804880.mp3|B|autoplay=0 visible=1|_##]&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;이 두 개의 소리를&lt;SPAN lang=EN-US&gt; Mixing&lt;/SPAN&gt;하면 다음과 같이 &lt;SPAN lang=EN-US&gt;C&lt;/SPAN&gt;라는 소리가 됩니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;[##_Jukebox|1105970212.mp3|C|autoplay=0 visible=1|_##]&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;이것을 그래프로 표현하면 다음과 같습니다&lt;SPAN lang=EN-US&gt;. Sin X, Sin 2X, Sin 3X&lt;/SPAN&gt;의 그래프가 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;각각의 파형을 독립된 개체로 표현하면 다음과 같습니다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;[##_Gallery|1403540973.jpg||width=&quot;400&quot; height=&quot;300&quot;_##]&lt;FONT size=2&gt;&lt;/FONT&gt;이 그래프를 합치면 다음과 같이 변하게 됩니다&lt;SPAN lang=EN-US&gt;.[##_Gallery|1026815767.jpg||width=&quot;400&quot; height=&quot;300&quot;_##]&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;결과적으로&lt;SPAN lang=EN-US&gt; Mixing&lt;/SPAN&gt;이란 결국 아날로그 파형이 합쳐져 진폭이 커지는 것을 의미합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;디지털로 표현된&lt;SPAN lang=EN-US&gt; PCM&lt;/SPAN&gt;데이터에서는 같은 시간에 같은 주파수를 가지고&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;같은 양자화 레벨을 가진 데이터의 경우 서로 합하는 것으로 표현할 수 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;Music Is My Life &lt;/SPAN&gt;프로젝트의 경우&lt;SPAN lang=EN-US&gt; PCM &lt;/SPAN&gt;데이터를 동일한 규격으로&lt;SPAN lang=EN-US&gt; Decoding&lt;/SPAN&gt;하기 때문에 별다른 데이터 변환 없이 각 표본 값을 합하는 것으로&lt;SPAN lang=EN-US&gt; Mixing&lt;/SPAN&gt;을 할 수 있었습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;STRONG&gt;두 번째로 다룰 것은&lt;SPAN lang=EN-US&gt; Volume &lt;/SPAN&gt;조절입니다&lt;/STRONG&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;.&lt;/STRONG&gt; Volume &lt;/SPAN&gt;조절은 파형의 진폭을 조절하는 것으로 구현할 수 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;파형의 진폭을 조절하는 것은 의외로 간단합니다&lt;SPAN lang=EN-US&gt;. PCM &lt;/SPAN&gt;데이터에 일정 값을 곱하는 것으로 구현이 가능합니다&lt;SPAN lang=EN-US&gt;. 1&lt;/SPAN&gt;보다 큰 값을 곱하면 볼륨이 증가하는 것이고&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;작은 값을 곱하면 볼륨이 감소하게 되는 것입니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;Music Is My Life &lt;/SPAN&gt;프로젝트의 경우&lt;SPAN lang=EN-US&gt; Volume&lt;/SPAN&gt;을 조절하는 기능을&lt;SPAN lang=EN-US&gt; Fade In/Out&lt;/SPAN&gt;기능에 사용했습니다&lt;SPAN lang=EN-US&gt;. Fade In/Out&lt;/SPAN&gt;은 서서히 볼륨을 높이거나 낮추는 기술입니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;결국 원하는 시간 동안 &lt;SPAN lang=EN-US&gt;Volume&lt;/SPAN&gt;을 서서히 높이거나 낮추면&lt;SPAN lang=EN-US&gt; Fade In/Out&lt;/SPAN&gt;이 되는 것입니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;STRONG&gt;마지막으로&lt;/STRONG&gt; 위의 두 가지 과정에서 아직 말하지 않은 중요한 과정이 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;바로 수정한 값에 대한 범위를 체크하는 것입니다&lt;SPAN lang=EN-US&gt;. Mixing&lt;/SPAN&gt;이나&lt;SPAN lang=EN-US&gt; Volume&lt;/SPAN&gt;를 조절하는 경우&lt;SPAN lang=EN-US&gt; PCM&lt;/SPAN&gt;의 각 데이터 표본 값이 범위를 넘어가는 경우가 생기게 됩니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;이런 경우 범위를 넘지 않도록 최대&lt;SPAN lang=EN-US&gt;/&lt;/SPAN&gt;최소 값을 적용시켜야 합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;또한 이런 값이 많아져 최대&lt;SPAN lang=EN-US&gt;/&lt;/SPAN&gt;최소 값이 많이 적용되면 음이 왜곡되어 찌그러지는 소리가 생깁니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;Mixing&lt;/SPAN&gt;의 경우&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;혹은 단순히 &lt;SPAN lang=EN-US&gt;Volume&lt;/SPAN&gt;을 많이 높이거나 많이 낮추는 경우 이런 현상이 많이 발생할 수 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;하지만&lt;SPAN lang=EN-US&gt; Music Is My Life&lt;/SPAN&gt;에서는 이런 현상을 다음과 같이 해결했습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -18pt; mso-para-margin-left: 0gd; mso-list: l0 level1 lfo1&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;1.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;Mixing&lt;/SPAN&gt;의 대상이 되는&lt;SPAN lang=EN-US&gt; A&lt;/SPAN&gt;와&lt;SPAN lang=EN-US&gt; B&lt;/SPAN&gt;가 있을 때&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -18pt; mso-para-margin-left: 0gd; mso-list: l0 level1 lfo1&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;2.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;같은 시간 동안 &lt;SPAN lang=EN-US&gt;A&lt;/SPAN&gt;에는&lt;SPAN lang=EN-US&gt; Fade In&lt;/SPAN&gt;효과를&lt;SPAN lang=EN-US&gt;, B&lt;/SPAN&gt;에는&lt;SPAN lang=EN-US&gt; Fade Out&lt;/SPAN&gt;효과를 적용합니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -18pt; mso-para-margin-left: 0gd; mso-list: l0 level1 lfo1&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;3.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;Fade In/Out&lt;/SPAN&gt;효과가 적용된&lt;SPAN lang=EN-US&gt; A&lt;/SPAN&gt;와&lt;SPAN lang=EN-US&gt; B&lt;/SPAN&gt;를&lt;SPAN lang=EN-US&gt; Mixing&lt;/SPAN&gt;합니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10pt; mso-char-indent-count: 1.0&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;이렇게 함으로써&lt;SPAN lang=EN-US&gt; Mixing&lt;/SPAN&gt;되는 각 음의 최대범위를 자연스럽게 맞춰 음이 왜곡되는 현상을 막고&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;소리의 연결을 자연스럽게 만들 수 있었습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;이것으로 이번 프로젝트의 블로그 포스팅을 마치겠습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;더 궁금한 사항이 있으면 따로 문의해주세요&lt;SPAN lang=EN-US&gt;! ^^&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Equalizer </title>
            <link>http://www.swssm.org/index.php?idx=339</link>
            <description>&lt;P&gt;안녕하세요^^&lt;br /&gt;자람입니다!&lt;br /&gt;저번엔 MP3 Decoding에 대해서 설명드렸고,&lt;br /&gt;오늘은 Equalizer에 대해서 설명드리겠습니다.&lt;br /&gt;&lt;br /&gt;저희가 만드는 벨소리제작 프로그램에는 Eqaulizer를 조절하는 부분도 있는데요 ㅎ&lt;br /&gt;먼저 Equalizer가 뭔지 부터 알아보겠습니다.&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;저번 블로깅에서 MP3에 대해서 알아봤었는데,&lt;br /&gt;MP3의 압축 방법이 인간이 들을 수 없는 가청 주파수 밖의 범위를 없애 용량을 줄이는 거라고 말씀드렸죠 ㅎ &lt;/P&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;인간이 귀로 들을 수 있는 주파수 대역(가청주파수)은 일반적으로 20hz ~ 20000hz로 알려져있습니다. mp3 포멧의 특성상 가청주파수외의 데이터들은 날려 버리기 때문에 윈엠프(winamp)는 이퀄라이져를 조절하는 범위가 60hz ~ 16000hz 대까지로 나와있는 것입니다^^&lt;br /&gt;&lt;br /&gt;이 수치는 초당 공기의 진동수를 의미하는겁니다. 쉽게 비유를 하면서 설명 하겠습니다.&lt;br /&gt;기타라는 현이 달린 악기로 설명해볼까요??ㅎ&lt;br /&gt;기타줄을 느슨하게 풀어서&amp;nbsp; &quot;대충 1 초에 60 번정도 울리게 만들어봤다&quot; 라고 했을때 이 진동수를 60hz 라 부릅니다. 저음일꺼 같다고 느낄실껍니다&lt;/P&gt; &lt;P&gt;&amp;nbsp;반대로 기타줄을 팽팽하게 땡겨보면, &amp;nbsp;줄이 떨리에 속도가 더 늘어 나겟죠? &lt;br /&gt;&amp;nbsp;그래서 대충 1 초에 2000 번 울린다고 칩니다 .이것을 2khz 라고 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;주파수별 음의 느낌은 다음과 같다고 한다.&lt;/P&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; MARGIN-RIGHT: 0px; FONT-FAMILY: 돋움&quot;&gt;&lt;STRONG&gt;~70Hz&lt;/STRONG&gt;&lt;/P&gt; &lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot;&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; MARGIN-RIGHT: 0px; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;소리에 박력이나 볼륨을 줍니다만, 출력이 지나치면 투명감이 없어집니다.&lt;br /&gt;라이브 녹음의 경우, 이 대역에 잔향음의 성분이 많이 포함되므로, 실제감에 영향을 줍니다.&lt;/P&gt;&lt;/BLOCKQUOTE&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&lt;STRONG&gt;70~150Hz&lt;/STRONG&gt;&lt;/P&gt; &lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot;&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;락이나 팝을 들었을때 「저음」이라고 느끼는 것은 주로 이 대역.&lt;br /&gt;베이스에 대한 욕구나 소리의 윤택을 내는데는 이 대역의 조정이 중요하게 됩니다.&lt;/P&gt; &lt;br /&gt;&lt;/BLOCKQUOTE&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&lt;STRONG&gt;150~300Hz&lt;/STRONG&gt;&lt;/P&gt; &lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot;&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;저음의 「힘찬 느낌」이나 「밀도감」에 영향을 줍니다.&lt;br /&gt;이 대역의 소리는 차내에서 반사하기 쉽고, 정재파도 발생 출력이 지나치면 압박감이 있는 소리가 됩니다.&lt;/P&gt; &lt;br /&gt;&lt;/BLOCKQUOTE&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&lt;STRONG&gt;300~400Hz&lt;/STRONG&gt;&lt;/P&gt; &lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot;&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;보컬의 저음 성분을 포함한 대역으로, 소리의 풍부함이나 생생함에 영향을 줍니다.&lt;/P&gt; &lt;br /&gt;&lt;/BLOCKQUOTE&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&lt;STRONG&gt;400~800Hz&lt;/STRONG&gt;&lt;/P&gt; &lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot;&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;대부분의 악기나 보컬음의 기음은 이 대역에 포함되어 소리의 골격을 만드는 중요한 대역 입니다.&lt;br /&gt;소리의 「깊은 곳」이나 「실제감」에 영향을 줍니다.&lt;/P&gt; &lt;br /&gt;&lt;/BLOCKQUOTE&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&lt;STRONG&gt;800~1.5kHz&lt;/STRONG&gt;&lt;/P&gt; &lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot;&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;악기나 보컬의 성향이나 윤택에 영향을 줍니다.&lt;/P&gt; &lt;br /&gt;&lt;/BLOCKQUOTE&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&lt;STRONG&gt;1.5~3kHz&lt;/STRONG&gt;&lt;/P&gt; &lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot;&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;악기나 보컬의 투명감에 영향을 줍니다.&lt;/P&gt; &lt;br /&gt;&lt;/BLOCKQUOTE&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&lt;STRONG&gt;3~6kHz&lt;/STRONG&gt;&lt;/P&gt; &lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot;&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;특히 4 kHz 부근은 인간이 가장 감도 깊게 청취할 수 있는 대역입니다.&lt;br /&gt;소리가 얌전하거나 시끄럽다는 등의 느낌에 크게 영향을 줍니다.&lt;br /&gt;출력이 지나치면 시끄러워서 오래 들으면 귀를 혹사하게 합니다.&lt;/P&gt; &lt;br /&gt;&lt;/BLOCKQUOTE&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&lt;STRONG&gt;6~12kHz&lt;/STRONG&gt;&lt;/P&gt; &lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot;&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;「고음」이라고 느끼는 것은 주로 이 대역입니다.&lt;br /&gt;소리의 밝음에 영향을 줍니다.&lt;/P&gt; &lt;br /&gt;&lt;/BLOCKQUOTE&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&lt;STRONG&gt;12kHz~&lt;/STRONG&gt;&lt;/P&gt; &lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot;&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;소리, 음장의 해방감, 느긋하고 평안함에 영향을 줍니다.&lt;/P&gt;&lt;/BLOCKQUOTE&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt; &lt;br /&gt; &lt;P class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 돋움&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>멀티 스레드 TCP/IP 를 이용한 실시간 영상 송수신 모듈 </title>
            <link>http://www.swssm.org/index.php?idx=337</link>
            <description>&lt;br /&gt;지능형 군사로봇의 포탑을 맡고있는 김현수 회원입니다. 지난번엔 영상패턴인식을 블로깅하였습니다만 이번에 제가 블로깅할 내용은 실시간 영상송수신 모듈입니다. 이러한 시스템이 필요한 최초의 이유는 로봇이 보고 판단하는 모습을 원격 컴퓨터에서도 같이 보자 하는 이유였습니다. 그렇지만 영상처리과 각종 로봇을 제어하는 일을 담당하는 로봇 PC에서 영상처리부분을 원격컴퓨터에서 처리해주고 대신 로봇은 로봇제어에 필요한 간단한 명령만을 처리하자 라는 컨셉으로 바뀌었습니다. 일단 전체 그림을 설명드리겠습니다[##_1C|1409536436.jpg|width=&quot;600&quot; height=&quot;369&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;총기가 달린 로봇에 미니 노트북이 탑제됩니다. 또한 총기의 가늠쇠부근에는 카메라가 부착됩니다. 미니 노트북에서는 카메라가 보는 내용을 TCI/IP&amp;nbsp; 통신을 통해서 원격 클라이언트 컴퓨터에 영상을 송신합니다. 영상을 실시간으로 계속해서 송신하고 다른 제어 명령도 처리해줘야하기 때문에 두개의 스레드를 사용해서 모듈을 제작하였습니다. 첫번째 스레드는 영상 전송용 스레드이고 두번째 스레드는 각종 커맨드 셋 과 제가 미리 정의 한 영상 송수신 및 데이터 송수신 프로토콜 패킷을 분석해내는 스레드입니다. &lt;br /&gt;클라이언트 컴퓨터에서도 마찬가지로 영상을 받아서 영상처리를 한 후, 데이터 처리 결과를 로봇에 알려주고 영상을 화면에 뿌려주는 역할을 합니다. 그렇지만 클라이언트에서는 위의 과정이 순차적으로 수행되어도 관계가 없기에 싱글 스레드로 제작을 하였습니다. &lt;br /&gt;&lt;br /&gt;부가적인 사항으로 영상인식을 위한 최종 등록 마커입니다.[##_1C|1391528858.jpg|width=&quot;600&quot; height=&quot;304&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;역시 사각형 인식이 기준입니다. 적군과 아군을 구분지어 오직적군만을 공격하고 최종 목표지점이 인식되면 그곳으로 질주한다는 컨셉입니다. &lt;br /&gt;&lt;br /&gt;이상입니다. 영상송수신 모듈에 관해서 궁금한 사항은 따로 문의주세요~&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>거리와 기울기 회전에 대처가능한 영상 패턴 인식 </title>
            <link>http://www.swssm.org/index.php?idx=338</link>
            <description>&lt;br /&gt;저는 지능형 군사로봇에서 포탑을 맡고있습니다. 주요 목표는 적군과 아군을 구분하고 최종 목적지를 찾아내는 일을 하고 적군일시에는 총을 쏴서 맞추는 일까지가 저의 임무입니다. 이런 역할을 하기위해서는 패턴인식기술이 반드시 적용되어야 할텐데 지금부터 제가 사용한 패턴인식 방식을 설명하도록 하겠습니다. &lt;br /&gt;&lt;br /&gt;먼저 인식할 패턴의 기본전제는 사각형 기반의 영상마커를 사용한다는 것입니다. 우선적으로 사각형을 인식하고 사각형 내부에 있는 마커를 변화시킨후 최종적으로 마커를 인식하는 시나리오입니다. 먼저 사각형을 인식하는 방법입니다. &lt;br /&gt;&lt;br /&gt;[##_1C|1349161171.jpg|width=&quot;600&quot; height=&quot;398&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;위의 그림에 나온 알고리즘 순서에 따라서 카메라의 영상으로부터 사각형을 분리해냅니다. 사각형을 검출하기 위해서 영상 이진화, Contour, Skeletonization 알고리즘등을 사용하였으며 최종적으로 위 표에서 언급한 C값을 구해내는 원형지수화 공식에 근거하여 사각형을 구분하였습니다. &lt;br /&gt;&lt;br /&gt;[##_1C|1018943398.jpg|width=&quot;600&quot; height=&quot;370&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;일단 사각형 영역이 검출되면 해당영역의 마커를 미리 등록된 마커와 비교하여서 구분을 지어야 합니다. 그렇지만 회전되거나 거리가 다르거나 기울어져있다면 영상을 올바로 구분짓기가 어렵기 때문에 사각형 워핑 알고리즘을 사용합니다. 모핑과 워핑의 차이점은 다음과 같습니다. ( 워핑 ( A -&amp;gt; A' ) , 모핑 ( A -&amp;gt; B ) ) 즉 약간의 변화를 주는것은 워핑 사람에서 원숭이처럼 전혀 다른 성질의 것으로 변화시키는것은 모핑이 되겠습니다. 참고하시라고요..&lt;br /&gt;다시 본론으로 돌아와서 영역이 추출된 사각형을 이용해서 워핑알고리즘을 이용해서 64x64사이즈의 정사각형 마커로 변화시킵니다. 사각형을 기준으로 내부의 이미지 데이터도 워핑되는것입니다. 그렇다면 다소 왜곡은 생길지라도 마커의 정면에서 봤을때의 모습이 어느정도 복원되는것을 볼수있겠네요. 이제 검출된 마커를 비교하기 위해 다시 영상을 이진화합니다. &lt;br /&gt;&lt;br /&gt;[##_1C|1013984490.jpg|width=&quot;600&quot; height=&quot;400&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;어렵사리 마커를 잘 구분지었다면 미리 등록된 마커와 템플릿 매칭을 합니다. 미리등록된 마커와 같은 그림이 가장 많은 녀석을 최종 인식된 패턴으로 판단하는것입니다. 여기서 부수적으로 얻을 수 있는 정보가 있습니다. 최초에 인식된 사각형의 넓이에 따라서 카메라와 마커간의 대략적인 거리를 산출할 수 있습니다. 물리적으로 인식될 마커의 크기를 동일하게 하고 미리 알고있다면 대략적으로 거리값을 역산출할 수 있습니다. 과제 후반기에 이러한 정보는유용하게 활용될 수도 있겠습니다. &lt;br /&gt;&lt;br /&gt;[##_1C|1366734580.jpg|width=&quot;600&quot; height=&quot;420&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;위에서는 제가 테스트로 각종 마커를 등록하고 회전을 준상태에서 인식하여 본 샘플영상입니다. 보시는데로 다소간의 회전에도 불구하고 모든마커를 정확하게 구분하는것을 볼 수 있습니다. 이제 저는 이러한 영상인식 모듈을 이용해서 적군을 조준하고 목적지로 이동하는 등의 지능형 알고리즘을 구현해보려 합니다. &lt;br /&gt;&lt;br /&gt;이상으로 영상패턴인식에대한 블로깅을 마치도록하겠습니다. 더 궁금한 점있으면 따로 연락주세요~ㅋ&lt;br /&gt;&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>[ 대발이의 그까이꺼~! ] Kalman Filter게 섯거라~! </title>
            <link>http://www.swssm.org/index.php?idx=335</link>
            <description>&lt;style&gt; &lt;!-- P.HS0 {style-name:&quot;바탕글&quot;;font-family:&quot;바탕&quot;; font-size:10.0pt; color:#000000; font-weight:&quot;normal&quot;; font-style:&quot;normal&quot;;margin-left:0.0px; margin-right:0.0px; margin-top:0.0px; margin-bottom:0.0px; text-align:justify; line-height:21.3px; text-indent:0.0px; letter-spacing:0.0px;} --&gt; &lt;/style&gt;&lt;!-- Document Start --&gt;&lt;!-- Document End --&gt; &lt;p style=&quot;margin: 0px; font-family: &amp;quot;바탕&amp;quot;; font-size: 10pt; text-align: justify; line-height: 160%; text-indent: 0px;&quot;&gt; 안녕하세요^^ 이번시간에는 KalmanFilter에 대해서 알아보도록 하겠습니다.&lt;br /&gt; &lt;style&gt; &lt;!-- P.HS0 {style-name:&quot;바탕글&quot;;font-family:&quot;바탕&quot;; font-size:10.0pt; color:#000000; font-weight:&quot;normal&quot;; font-style:&quot;normal&quot;;margin-left:0.0px; margin-right:0.0px; margin-top:0.0px; margin-bottom:0.0px; text-align:justify; line-height:21.3px; text-indent:0.0px; letter-spacing:0.0px;} --&gt; &lt;/style&gt;&lt;!-- Document Start --&gt;&lt;!-- Document End --&gt; &lt;/p&gt;&lt;p style=&quot;margin: 0px; font-family: &amp;quot;바탕&amp;quot;; font-size: 10pt; text-align: justify; line-height: 160%; text-indent: 0px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;바탕&amp;quot;; font-size: 10pt; line-height: 21.333px; letter-spacing: 0px; text-align: justify;&quot;&gt;결국 필터라는 것도 알고리즘 이므로, 짜기 나름입니다만 이 필터는 검증된 것이므로 한번 이해해 두시면 좋을 것입니다. &lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-family: &amp;quot;바탕&amp;quot;; font-size: 10pt; text-align: justify; line-height: 160%; text-indent: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-family: &amp;quot;바탕&amp;quot;; font-size: 10pt; text-align: justify; line-height: 160%; text-indent: 0px;&quot;&gt;아래에 보이는 그림이 KalmanFilter가 돌아가는 원리를 나타내는 것입니다.&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-family: &amp;quot;바탕&amp;quot;; font-size: 10pt; text-align: justify; line-height: 160%; text-indent: 0px;&quot;&gt;[##_1C|1340387633.jpg|width=&quot;500&quot; height=&quot;240&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/p&gt; 음... 무슨말일까요? &lt;br /&gt;하나하나 알아보도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;일단 그림을 보니까 왼쪽 하단에 'Initial estimates for x(k-1) and P(k-1)'이라고 되있군요...&lt;br /&gt;여기서 x는 '상태벡터'이고 P는 '공분산오차'입니다. 상태벡터라는 것은 [각 바이어스]이라는 1 x 2형태의 벡터를 얘기합니다. 그리고 공분산오차라는 것을 알기 위해... 일단 공분산이 무엇인지 알아야 하겠습니다.&lt;br /&gt;공분산이란... '둘 이상의 변량이 서로 관련성을 가지며 분포하는 모양을 전체적으로 나타내는 분산'이라 하겠습니다. 간단하게 '편차의 곱'이라 알고 넘어가도록 합니다.&lt;br /&gt;&lt;br /&gt;위 그림을 보니, 초기값을 잡아줘야 한다는것을 알수 있습니다.&lt;br /&gt;&lt;br /&gt;그렇다면 초기값을 잡고 알고리즘을 순회해보도록 하겠습니다. &lt;br /&gt;이 초기값을이 어디로 들어가나 보니... 'Time Update(&quot;Predict&quot;)'로 들어가는 군요.&lt;br /&gt;시간을 업데이트한다... 아직 타이틀이 의미하는 바를 모르겠으니... 내용을 한번 알아보겠습니다.&lt;br /&gt;(1)을 보니... Project the state ahead라고 써있습니다... '이전상태를 투영한다' 이런 뜻이 되겠군요.&lt;br /&gt;수식을 보니 x(k-1)에다가 이것저것 붙이고 더해서 결국 x(k)가 된것을 확인할수 있습니다. 의미하는 바, 이전상태의 '상태벡터'에 이것저것 붙이니 현재의 '상태벡터'가 되었다... 이말입니다. 그런데 말이죠... 값자기 나타난 u(k)는 뭘까요? u(k)는 현재 확인된 입력...즉, [변한각도 0]이라는 1 x 2 형태의 벡터라는 말이 됩니다. 또한 벡터 A,B는 아래 수식과 같은 값을 같게 됩니다. (1)수식을 풀면...&lt;br /&gt;&lt;br /&gt;x = [1&amp;nbsp; -dt][angle] + [ dt ][dotangle 0]&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; [0&amp;nbsp; &amp;nbsp; 1] [bias] &amp;nbsp; &amp;nbsp; [ 0&amp;nbsp; ]&lt;br /&gt;&lt;br /&gt;위와 같은 수식을 같는 것입니다.&lt;br /&gt;&lt;br /&gt;이제 (2)을 보아하니... Project the error envariance ahead라고 적혀있습니다. '이전의 공분산오차를 투영한다' 이런뜻이 되겠군요. 이건 또 뭥미...&lt;br /&gt;&lt;br /&gt;차근차근 알아보도록 합시다.&lt;br /&gt;수식을 보니까 P(k-1)에대가 이것저것 붙여서 결국, P(k)을 뽑아내는군요. 의미하는 바, 이전상태의 '공분산오차'에 이것저것 붙이니 현재의 '공분산오차'가 되었다는 것입니다. 여기서 중요한 점은 Q가 붙었다는 것이죠.&lt;br /&gt;Q는 Process Noise Covariance입니다. 즉, 2 x 2의 벡터형태를 갖는 잡음이라 생각하시면 됩니다. &lt;br /&gt;수식으로 표현하면 아래와 같이 됩니다.&lt;br /&gt;&lt;br /&gt;P = [1&amp;nbsp; -dt][P00 P01][ 1 &amp;nbsp;&amp;nbsp; 0] + [Q00 Q01]&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; [0 &amp;nbsp;&amp;nbsp; 1] [P10 P11][-dt&amp;nbsp; 1] &amp;nbsp;&amp;nbsp; [Q10 Q11]&lt;br /&gt;&lt;br /&gt;지금 까지 Time Update(&quot;Predict&quot;)에 대해서 알아보았습니다. 한마디로 정리하면 처음 그림에서 보았던 왼쪽 박스에 있는 수식은 '이전상태를 받아 다음상태를 예측한다'라는 것이죠. 이것을 센서와 접목하여 생각하면...&lt;br /&gt;즉, 자이로센서가 이 역할을 한다는 것입니다. 이전상태를 기반으로 1step동안 '변한각도'을 갱신한다는 것입니다. &lt;br /&gt;&lt;br /&gt;다시 맨 위의 그림을 살펴보니, Time Update(&quot;Predict&quot;)에서 Measurement Update(&quot;Correct&quot;)로 화살표가 넘어가는 것을 볼 수 있습니다. Measurement Update(&quot;Correct&quot;)를 살펴보니... '측정치를 업데이트 한다'... 무슨말일까요? &lt;br /&gt;&lt;br /&gt;하나하나 살펴봅시다.&lt;br /&gt;(1)을 보면, Compute the Kalman gain이라 적혀있습니다. 말 그대로 우리가 정확하게, 수렴하게 하기 위한 값을 얻기 위해서는 gain값을 조정하게 되어있습니다. 그 gain값을 얻기 위한 방법입니다. 내용을 보면, 새롭게 갱신된 오차공분산을 이용하여 gian값을 얻음을 알 수 있습니다. 그런데 R이라는 놈이 보이는군요... ㅡㅡ;&lt;br /&gt;요 R이라는 놈은 Measurement Noise Covariance라고 합니다. 요놈도 잡음이라고 생각하시면 됩니다. 그러고 보니 gain이라는 놈은 우리가 미래를 예측해서 정확한 값을 뽑아내기 위한 핵심이라고 할 수 있는데, 이 gain이라는 놈이 Q와 R로 구성되있음을 알 수 있습니다. 즉, 잡음인 Q, R에 의해서 gain이 결정되고, 그 gain에 의해 예측값이 틀려질수 있다는 것입니다. 그러니까 Q와 R이 핵심이군요! &lt;br /&gt;KalmanFilter는 Q와 R에 의해 좌지우지 된다는 말입니다... 음... 좀더 살펴보도록 하죠.&lt;br /&gt;&lt;br /&gt;(1)을 수식으로 나타내면 아래와 같습니다.&lt;br /&gt;&amp;nbsp;S = H x P x transpose(H) + R&lt;br /&gt;&amp;nbsp; &amp;nbsp; = [ 1 0 ] x P x [ 1, 0 ] + R&lt;br /&gt;&amp;nbsp; &amp;nbsp; = P(0,0) + R&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;K(칼만게인) = P x transpose(H) x (S)^-1&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = [ P(0,0), P(1,0) ] / S&lt;br /&gt;&lt;br /&gt;(2)을 살펴보도록 합시다. Update estimate with measurement z(k)라고 써있군요. '현재의 측정치 z(k)를 계산해서 업데이트 한다'라고 보시면 되겠습니다. 여기서 z(k)는 뭘까요? 눈치 챈분들도 있겠지만 z(k)는 현재 가속도센서에 의해서 측정된 값이라 보시면 되겠습니다. 그렇다면 수식의 우측에 (z(k)-Hx(k))가 의미하는 바는 뭘까요? &lt;br /&gt;앞의 박스 (Time Update)에서... 즉, 자이로센서에서 예측했던 값과 실제 가속도센서로 측정된 값의 차이가 되는 것입니다. 그 오차에다가 gain을 곱해서 예측치에 다시 더하면 새롭게 갱신되는 값(2)이 되는 것입니다. 이렇게 갱신된 값은 다시 Time Update로 넘어가게 되는 것이죠^^&lt;br /&gt;이를 수식으로 표현하면 아래와 같습니다.&lt;br /&gt;&lt;br /&gt;y = z(가속도센서측정값) - (H x (x))&lt;br /&gt;x(측정치값이 입력된 추정치) = x + (K x y)&lt;br /&gt;&lt;br /&gt;드디어 1개 남았습니다.^^&lt;br /&gt;(3)을 알아보도록 하겠습니다. Update the error covariance라고 되어있군요^^ 어디서 본듯한.... 앞의 박스에서 본것과 유사하죠? 위의 그림을 보면 두 박스가 서로 순환구조를 가지고 있으므로, 다시 Tiem Update로 넘겨줄 값을 갱신하여야 합니다. 오차공분산도 새롭게 갱신되어야 겠죠?^^&lt;br /&gt;아래와 같은 수식으로 갱신합니다.&lt;br /&gt;&lt;br /&gt;P(측정치값이 입력된 공분산행렬) = (I - K x H) x P&lt;br /&gt;&amp;nbsp;&amp;nbsp; = ( [ 1 0, &amp;nbsp;&amp;nbsp; [ K(0),&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 1 ] - &amp;nbsp; K(1) ] * [ 1 0 ] ) P&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; = [ P(0,0)-P(0,0)*K(0)&amp;nbsp; P(0,1)-P(0,1)*K(0),&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; P(1,0)-P(0,0)*K(1)&amp;nbsp; P(1,1)-P(0,1)*K(1) ]&lt;br /&gt;&lt;br /&gt;gian값이 반영되었음을 볼 수 있습니다.&lt;br /&gt;&lt;br /&gt;휴~ 다 끝났군요... 이제 코드화 할 시간만 남았습니다. 이렇게 알고리즘을 짜고도 코드화 시키지 못한다면 낭패겠죠^^; 코드화는 각자 생각해보시기 바랍니다...&lt;br /&gt;&lt;br /&gt;지금까지 설명을 쭉 읽어도 한번에 이해하기란 여의치가 않습니다. 따라서 이런저런 논문을 많이 읽어보실것을 추천합니다.&lt;br /&gt;내용을 한번더 정리하면... &lt;br /&gt;첫번째로 초기값이 필요하며, &lt;br /&gt;두번째로 Time Update에서는 자이로 센서를 이용하여 미래의 값을 예측하여 오차공분산과 함께 Measurement Update로 넘겨주고, &lt;br /&gt;세번째로 이렇게 값을 받은 Measurement Update는 Q와 R을 이용하여 gain을 뽑고, gain을 이용하여 가속도센서로 얻은 측정값을 업데이트 하여 갱신된 오차공분산과 함께 다시 Time Update로 넘겨준다는 것입니다.^^&lt;br /&gt;&lt;br /&gt;핵심은 Q와 R을 잘 조절해서 자신이 원하는 어떤 값을 뽑아내는 것인데... 그것은 많은 실험을 해봐야 할 것입니다.&lt;br /&gt;&lt;br /&gt;이상으로 [ 대발이의 그까이꺼~! ]&amp;nbsp; Kalman Filter게 섯거라~!를 마치겠습니다. 감사합니다^^ 땡큐!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>옴니아 블루투스 셋팅 및 이와 관련된 프로그램 </title>
            <link>http://www.swssm.org/index.php?idx=336</link>
            <description>안녕하세요. 19기 조민수입니다. 이번에 올릴 글은 옴니아 블루투스와 관련된 글입니다. 옴니아에는 블루투스가 있는데요. 그것을 이용하여 프로그램을 만들어야 하기에 이와 관련된 글을 씁니다. 옴니아 블루투스 이용에 있어 약간은 셋팅이 필요하더라고요. 그럼 먼저 옴니아 셋팅은 어떻게 해야 하는지 말씀드리죠. 1. 다른 기기에도 블루투스가 있어야 한다. - 물론 당연한 소리겠죠? 2. 옴니아에서 설정에 있는 무선 접속 관리자에게 블루투스를 설정해 줍니다. [##_1C|1027221623.jpg|width=&quot;288&quot; height=&quot;462&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] 3. 이제 블루투스 버튼을 누르고 블루투스 검색을 시작합니다. [##_1C|1043375961.jpg|width=&quot;284&quot; height=&quot;423&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] 4. 다른 기기에 있는 블루투스를 찾습니다. 찾기가 완료되면 이제 페어링을 시작합니다. 5. 페어링시 암호를 설정해주고 확인을 누르면 이제 블루투스는 연결 완료 입니다. 이제 데이터를 받아오기 위해 COM 포트를 설정해야 하는데요. [##_1C|1207989642.jpg|width=&quot;245&quot; height=&quot;362&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] 여기서 중요한 점은....옴니아는 COM포트가 두개밖에 존재하지 않습니다. COM2와 COM6....그러니 둘중에 하나만 이용 가능하겠죠? 이제 블루투스를 이용해서 시리얼 통신이 가능해 졌습니다. 프로그램은 어떻게 짜느냐!!이제 프로그램을 설명해볼까요? 먼저 블루투스를 연결하면 시리얼 통신이 되기 때문에 시리얼 프로그램을 응용하면 되는데요. 먼저 핸들을 선언해 줍니다. [##_1C|1336823646.jpg|width=&quot;81&quot; height=&quot;24&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] 이렇게 선언된 핸들을 CreateFile을 이용해서 핸들을 열어 줍니다.여기서 핸들 안의 파라메터를 보면 파일 이름이 아니라 COM포트 이름을 [##_1C|1014584688.jpg|width=&quot;419&quot; height=&quot;89&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] 적어주게 됩니다.하지만 이렇게 해서 통신이 제대로 될꺼라 라는 생각은 버리시기 바랍니다. 일단..DCB 변수를 선언해 줘야 합니다. [##_1C|1217875782.jpg|width=&quot;66&quot; height=&quot;21&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] 이렇게 선언해 주는 이유는...BaudRate와 ByteSize, Paritiy비트를 선언해 주기 위함 입니다. 이 dcb를 설정해 주는데요. [##_1C|1364376667.jpg|width=&quot;275&quot; height=&quot;215&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] 이제 이렇게 해서 속도를 설정했습니다. 이제 파일에 쓰듯이 데이터를 쓰면 됩니다. [##_1C|1026128266.jpg|width=&quot;405&quot; height=&quot;37&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] 이제 이걸 가지고 프로그램을 해야 하는데요. 이런게 하는데는 기본적으로 windows mobile이 옴니아에 깔려 있기 때문에 windows programming 하듯이 하면 되는거죠. 이제 이걸 이용해서 프로그램을 만들면 됩니다. 참....기본적인 것을 블로깅 하려니 그렇지만 그래도 이거 찾느라 이리저리 돌아댕겼(?)었죠. ㅎㅎ;; 저처럼 많이 돌아다니시는 분이 없기를 바라며...
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Remote Desktop Protocol(Desktop Ver. &amp; Mobile Ver.) 두 번째 이야기. </title>
            <link>http://www.swssm.org/index.php?idx=334</link>
            <description>&lt;P&gt;원격 지원 솔루션의 큰 역할을 하고 있는 Remote Desktop Protocol의 그 두번째 이야기 입니다.&lt;br /&gt;&lt;br /&gt;지난 시간에 거론했듯이 Remote Desktop Protocol(이하 RDP)은 근본적으로 Citrix사의 가상화 기술이였으나,&lt;br /&gt;MS에게 기술을 넘겼고, 이후 MS는 이 기술을 부분적으로 이용하여 RDP 솔루션을 Windows에 끼워 사용자에게 제공하기 시작합니다.&lt;br /&gt;이 기술이 터미널 서비스를 기반으로 하고 있기 때문에, MS에서는 터미널 서비스에 대한 대략적인 Document를 제공하고 있지만,&amp;nbsp; 이 기술을 개발자가 적용함에 있어서는 그다지 큰 정보를 제공하고 있지 않습니다.&lt;br /&gt;종합적으로 말씀드리자면 Citrix/MS 모두 이 기술에 대해서는 굳게 함구하고 있는게 현실입니다.&lt;br /&gt;&lt;br /&gt;하지만, 예전 MS의 개발자라고 알려진 사람이 &lt;A href=&quot;http://www.rdesktop.org&quot;&gt;www.rdesktop.org&lt;/A&gt;를 통해 사람들에게 Linux Ver. 으로 부분적으로 Open Source를 제공하고 있습니다. 따라서 본 프로젝트팀은 Rdesktop.org의 오픈소스를 참고하여 프로젝트를 진행하였습니다.&lt;br /&gt;Remote Desktop Protocol에 대한 핵심적인 얘기는 첫 번째 이야기에서 하였기 때문에, 이번에는 RDP의 Desktop Version과 함께 Mobile Version에 대해 이야기 하려고 합니다.&lt;br /&gt;본 프로젝트에서는 Mobile에 RDP를 올리기 위해 많은 시간을 투자하였습니다. 그리고 크고, 많은 문제에 치닫게 되었고, 결국 Mobile Version의 RDP를 포팅하는데 성공하였으나, 퍼포먼스적인 측면에서 SKT에서 제공하는 RDP(배포판)을 사용하였음을 먼저 알립니다.&lt;br /&gt;Linux Platform이나 Windows Platform이 되었든 RDP는 System에 따른 함수명과 다를뿐 근본적인 로직과 메카니즘은 같습니다. 지난번 첫번째 이야기에서 제시했던바와 같이 좌표별로 패킷만 서버에서 가져와, Rect &amp;amp; Line 별로 그림을 그려주며, 상황에 따라서는 서버측에서 보내주는 이미지를 캐싱해 사용자에게 그림을 그려주는 방식입니다.&lt;br /&gt;이러한 Desktop Version의 RDP를 Mobile로 포팅하기 위해 우리는 많은 노력을 했어야 했습니다.&lt;br /&gt;먼저 우리 개발팀의 작업환경이 Windows Platform 이였기 때문에 Rdeskop.org의 오픈소스를 Win32 Version으로 포팅하여야 했습니다. 이러한 과정은 지난번 첫 째 이야기에서 하였기 때문에 생략하겠습니다.&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Mobile Version RDP.&lt;br /&gt;&lt;br /&gt;완성된 Desktop Version RDP를 Mobile에 포팅시에 가장 크게 고려해야 할 부분이 바로 SSL 이라는 부분입니다. 서버로 사용하는 Windows Server 2003은 터미널 서비스를 기반으로 통신을 할 때 보안상의 이유로 SSL을 이용합니다.&lt;br /&gt;따라서 Desktop User가 서버와 터미널 서비스 기반으로 통신을 할 때 SSL 통신을 통해 패킷을 전송하는데 Client는 Open SSL 라이브러리를 사용하여 이를 변.복조화 시킵니다.&lt;br /&gt;참고로 SSL은 MD5나 RC4와 같은 복잡한 변,복조 알고리즘을 사용합니다.&lt;br /&gt;&lt;br /&gt;헌데 우리 개발팀은 한 가지를 간과하고 있었는데, 바로 모바일(Smart Phone Omnia. )의 코어가 Arm 이라는 것입니다. Desktop과 달리 옴니아는 Arm Core를 사용하고 있고, 바이너리 코드가 다르기 때문에 옴니아에 이식이 안된다는 것입니다.&lt;br /&gt;더 근본적은 것은 RDP 소스는 Mobile 버젼으로 포팅하는 문제라기 보다는 RDP가 Desktop Version의 Open SSL 이라는 라이브러리를 갖다 쓴다는 것입니다.&lt;br /&gt;그렇다면 RDP를 Mobile에 올려도 SSL까지 Arm Version으로 포팅해야 한다는 것인데, 시간관계상 거기까지 손을 쓰기가 어렵더군요. 따라서 우리팀은 많은 시간소비와 노력 후에, Open SSL 라이브러리를 갖고와 사용하지 않고 SSL을 RDP Mobile 버젼에 소스화 시켰습니다. 소위 &quot;구겨 넣는다&quot;라는 표현을 쓰는 분이 많이 이러한 표현을 쓰겠습니다. 따라서 SSL문제까지 해결하였고 이를 Mobile에 포팅하는데 성공하였습니다.&lt;br /&gt;&lt;br /&gt;SSL 문제만을 갖고 갖가지 해결방안을 찾느라, 근 한달을 소비하였습니다. 비록 프로젝트 시연에서 퍼포먼스의 문제로 Mobile측은 SKT의 RDP를 사용하여 많은 아쉬움이 남았습니다만, Desktop측에서의 RDP 시연은 이상 없이 끝났기에 매우 기뻤던 프로젝트 였습니다.&lt;br /&gt;&lt;br /&gt;그래서 결국 SSL을 소스화 &lt;br /&gt;&lt;br /&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>라인 감지 센서 </title>
            <link>http://www.swssm.org/index.php?idx=329</link>
            <description>[##_1C|1341107758.jpg|width=&quot;530&quot; height=&quot;515&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]지능형 모형차의 센서는 사람의 눈 역할을 대신합니다.&lt;br /&gt;&lt;br /&gt;빠른속도로 주행하므로 가능한 먼거리를 보는것이, 제어 측면에서 쉬워집니다.&lt;br /&gt;&lt;br /&gt;이 때 빠른 응답과 예측성을 갖기 위해 일부 팀에서는 발광부와 수광부 모두 혹은 수광부에만 렌즈를 달아서 먼 거리의 데이터를 수집할 수 있도록 하기도 합니다.&lt;br /&gt;&lt;br /&gt;먼 거리의 데이터를 얻어야 하므로 발광량이 쎈 발광 센서를 쓰는 것이 중요합니다.&lt;br /&gt;&lt;br /&gt;센서를 MCU 직접적으로 포트 제어를 하게 되면 많은 양의 전류를 흘릴 수 없기 때문에 TR을 이용합니다.&lt;br /&gt;&lt;br /&gt;보다 간단하게 제작하기 위해서 ULN2803이라는 Array TR을 이용하기도 합니다.&lt;br /&gt;&lt;br /&gt;ULN2803의 스펙을 보면 500mA라는 대용량의 전류를 흘릴 수 있으므로 발광센서를 구동하기에 충분합니다.&lt;br /&gt;&lt;br /&gt;[##_1C|1087056041.jpg|width=&quot;473&quot; height=&quot;320&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt; &lt;DIV&gt;&amp;lt;UNL2803 스펙&amp;gt;&lt;br /&gt;&lt;/DIV&gt;&lt;br /&gt;물론 발광 센서를 500mA로 계속 켜 두게 되면 얼마 못가서 발광센서가 타버려 동작을 하지 않는 상태가 발생하게 되지요.&lt;br /&gt;&lt;br /&gt;아래의 발광센서 데이터 시트를 보면 센서마다 스펙이 다르지만 일반적으로 발광센서는 100mA의 전류를 흘려서 구동하게 되어있습니다.&lt;br /&gt;&lt;br /&gt;[##_1L|1375785147.jpg|width=&quot;600&quot; height=&quot;211&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt; &lt;DIV&gt;&amp;lt;발광 센서 전류 및 전압 스펙&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/DIV&gt;그럼 어떻게 500mA 혹은 그 이상의 전류를 흘리냐하면 펄스 구동으로 순간적으로 강한 출력을 낼 수 있습니다.&lt;br /&gt;&lt;br /&gt;주기와 폭은 센서 데이터 시트를 찾아서 확인하여 결정하여 주시면 되구요.&lt;br /&gt;&lt;br /&gt;그리고 펄스 구동을 하는 이유 중 다른 한가지가 또 있는데요.&lt;br /&gt;&lt;br /&gt;일반적으로 형광등, 백열등 등 다른 주변환경에 대한 외란에 대한 민감도를 줄이기 위해서도 사용합니다.&lt;br /&gt;&lt;br /&gt;이 때 수광부에 RC 하이패스 필터를 장착하여 사용합니다.&lt;br /&gt;&lt;br /&gt;형광등의 경우 60Hz 등 낮은 주파수 대역의 신호를 걸러 내어 주면 되기 때문에 발광센서로 높은 주파수로 구동을 하여 읽어 주면 외란이나 노이즈에 대한 민감도를 줄일수 있습니다.&lt;br /&gt;&lt;br /&gt;발광과 수광 센서에 대한 선택시 주의하여야 할 점은&lt;br /&gt;&lt;br /&gt;기본적이지만 두 센서의 파장을 비슷한 파장의 대역에 대해서 선택하여야 합니다.&lt;br /&gt;&lt;br /&gt;[##_1C|1174942402.jpg|width=&quot;600&quot; height=&quot;314&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt; &lt;DIV&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&amp;lt;왼쪽 : 발광센서&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;오른쪽: 수광센서&amp;gt;&lt;br /&gt;&lt;/DIV&gt;&lt;/DIV&gt;위의 데이터 시트와 같이 발광센서는 950nm의 파장에서 강한 적외선을 내보내고,&lt;br /&gt;&lt;br /&gt;수광센서는 700~950nm에서의 반응이 가장 좋으므로 이들 센서로 한 쌍을 구성하시면 되겠습니다.&lt;br /&gt;&lt;br /&gt;그리고 센서마다 각도 특성이 있는데, 그 각도 특성을 고려하여 거리 등을 고려하여 센서를 배치하면 되겠습니다.&lt;br /&gt;&lt;br /&gt;수광센서를 사용 할 때 아래와 같은 회로를 구성하여 사용합니다.&lt;br /&gt;[##_1C|1205935942.jpg|width=&quot;420&quot; height=&quot;205&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&amp;lt;수광 센서 회로&amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: left&quot;&gt;센서의 분해능을 최대화하기 위해서 저항을 적절하게 선택을 잘 하면 정밀한 제어와, 안전한 주행이 가능합니다.&lt;br /&gt;&lt;br /&gt;일반적으로 센서는 저항성분이 변하고 그 저항성분은 최대와 최소값을 갖게 됩니다. &lt;br /&gt;&lt;br /&gt;R2의 변화에 따른 센서의 Vout의 최소값과 최대값의 차이를 아래 식을 통해 그래프를 그려보았습니다.&lt;br /&gt;&lt;br /&gt;[##_1C|1240017143.jpg|width=&quot;600&quot; height=&quot;234&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;위 그래프에서 보듯이 600옴의 저항을 쓰면 분해능을 최대화 할 수 있을것입니다.&lt;br /&gt;&lt;br /&gt;이러한 과정을 통해 가장 이상적인 R2 값을 구할 수 있습니다.
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>FPGA 를 이용한 통합 제어 시스템 </title>
            <link>http://www.swssm.org/index.php?idx=330</link>
            <description>&amp;nbsp; 이번 프로젝트에서는 모든 구현 시스템을 통합 하여 제어하고 관리하는 디바이스로 FPGA를 선택하였다.&lt;br /&gt;&amp;nbsp; 프로젝트 기획 당시는 AVR로 구현할 예정이었으나 우리 프로젝트에는 FPGA가 더 알맞은 칩이라 생각되어.&lt;br /&gt;&amp;nbsp; 과제의 마지막달인 7월달에 총 제어칩을 바꾸게 되었다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 우리 프로젝트에선 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;칼만필터 데이터&lt;/span&gt; , &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;Encoder 데이터&lt;/span&gt; , &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;초음파 데이터&lt;/span&gt; , &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;영상처리의 의한 제어 데이터&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; 를 동시에 처리하여야지만&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; DC 모터의 구동&lt;/span&gt; 및 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;서보 모터의 구동&lt;/span&gt;이 신뢰감을 줄 수 있었다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 일반 적인 마이크로 프로세서인 경우 한번에 한가지 동작 밖에는 구현될 수 밖에 없다.&lt;br /&gt;&amp;nbsp;&amp;nbsp; 이러한 이유는 Firmware 적인 구성이라 일반적인 소프트웨어와 같이 순차적으로 진행되기 때문이다.&lt;br /&gt;&amp;nbsp;&amp;nbsp; 따라서 칼만필터에 데한 데이터를 받아들이고 있는 동안에는 다른 encoder데이터 ,초음파 데이터 , &lt;br /&gt;&amp;nbsp;&amp;nbsp; 영상처리에 대한 데이터를 받아 들일 수 없다. 즉 각각의 데이터가 동시에 받아 들인 데이터가 아닌,&lt;br /&gt;&amp;nbsp;&amp;nbsp; 시간차가 있는 신뢰할 수 없는 데이터가 된다. 따라서 DC 모터의 구동 및 서보 모터의 구동 값이 &lt;br /&gt;&amp;nbsp;&amp;nbsp; 원하지 않게 동작되는 확률이 높았다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 하지만 , FPGA 의 경우는 하드웨어적인 구성으로 같은 시간대에 병렬적으로 모든 데이터를 처리 할 수가&lt;br /&gt;&amp;nbsp;&amp;nbsp; 있다. 이러한 이유는 클럭에 동기화 시킴으로써 클럭에 따라 구현된 모든 프로세서들이 동시적으로 돌아가기&lt;br /&gt;&amp;nbsp;&amp;nbsp; 때문이다. 따라서 마이크로 프로세서를 통합 칩으로 쓰는 것보다는 FPGA를 통합칩으로 쓰는것이 더 안정된&lt;br /&gt;&amp;nbsp;&amp;nbsp; 구동을 보장할 수가 있었다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; [##_1C|1340585725.jpg|width=&quot;552&quot; height=&quot;425&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt; &amp;lt; FPGA SCHEMETIC&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 위의 그림은 FPGA안에 구현된 회로도이다 . &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 영상처리에 의한 명령값을 시리얼 통신으로 받아들이는 UART RX를 구현하였고,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 두개의 모터 드라이버 구동 칩을 구현 하기 위하여 2개의 UART TX 를 구현하였다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 칼만필터가 구현된 AVR로 부터 데이터를 받는 칼만 필터 수신부, 이 데이터를 이용하여 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 서보모터를 제어하는 서보모터 구동부 , 엔코더 데이터를 받는 엔코더 수신부 , &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 초음파 8개의 데이터를 받아들이는 초음파 수신부및&amp;nbsp; Control 부 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 그리고 이러한 데이터들을 종합적으로 처리하여, DC 모터와 서보 모터를 구동시키는 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 종합 시스템 제어부를 설계하였다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>IP Balancer의 역할과 기능 </title>
            <link>http://www.swssm.org/index.php?idx=331</link>
            <description>&lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;/FONT&gt;&lt;/FONT&gt;GSS System&lt;/SPAN&gt;의&lt;SPAN lang=EN-US&gt; IP Balancer&lt;/SPAN&gt;의 역할은 &lt;SPAN lang=EN-US&gt;IP&lt;/SPAN&gt;의 생성 및 분배 역할을 한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;IP Balancer&lt;/SPAN&gt;는 &lt;SPAN lang=EN-US&gt;Agent Verifier&lt;/SPAN&gt;가 검사할&lt;SPAN lang=EN-US&gt; Target agent&lt;/SPAN&gt;를 설정한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;생성은 랜덤하게 생성되기 보다는 각 클래스 대역에 맞게 일정한 그룹이 형성된&lt;SPAN lang=EN-US&gt; IP &lt;/SPAN&gt;대역을 자동으로 할당하여&lt;SPAN lang=EN-US&gt; Agent Verifier&lt;/SPAN&gt;에게 넘겨준다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;즉, &lt;SPAN lang=EN-US&gt;IP Balancer&lt;/SPAN&gt;가 작업 &lt;SPAN lang=EN-US&gt;IP &lt;/SPAN&gt;클래스 영역을 결정하고 &lt;SPAN lang=EN-US&gt;Crawler&lt;/SPAN&gt;가 이 정보들을 토대로 네트워크 상의 데이터들을 수집하게 된다&lt;SPAN lang=EN-US&gt;. &lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;[IP Balancer Application] &lt;br /&gt;[##_1C|1270249724.png|width=&quot;600&quot; height=&quot;342&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;[IP Balancer의 구조]&lt;br /&gt;&lt;br /&gt;[##_1C|1341819354.png|width=&quot;331&quot; height=&quot;300&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-para-margin-left: 0gd; mso-list: l0 level1 lfo1&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;1.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Log Manager&lt;br /&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Log Manager&lt;/SPAN&gt;의 역할은 각각의 로그 정보들을 저장하고 추가하는 역할을 한다&lt;SPAN lang=EN-US&gt;. &lt;br /&gt;&lt;br /&gt;[##_1C|1370114827.png|width=&quot;549&quot; height=&quot;396&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 32.2pt; TEXT-INDENT: -18pt; mso-para-margin-left: 0gd; mso-list: l0 level1 lfo1&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;2.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Multi-Threaded Controller&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: '맑은 고딕'; mso-bidi-font-size: 11.0pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 각각의 여러 크롤러들과 연동되어야 하기 때문에 &lt;SPAN lang=EN-US&gt;Multi-Threaded &lt;/SPAN&gt;형태로 구현 되었다&lt;SPAN lang=EN-US&gt;. &lt;br /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;br /&gt;[##_1C|1400191552.png|width=&quot;542&quot; height=&quot;530&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 32.2pt; TEXT-INDENT: -18pt; mso-para-margin-left: 0gd; mso-list: l0 level1 lfo1&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;3. &lt;/FONT&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Load Balancing &amp;amp; IP &lt;/SPAN&gt;동기화 &lt;br /&gt;각각의 크롤러들이 분산되어&lt;SPAN lang=EN-US&gt; IP &lt;/SPAN&gt;영역들을 검색하기 위해서 &lt;SPAN lang=EN-US&gt;Load Balancing &lt;/SPAN&gt;기술이 사용되었다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;또한 크롤러들이 작업을 수행하면서 서버가 중단되는 역할을 방지하는 역할과 실제&lt;SPAN lang=EN-US&gt; IP&lt;/SPAN&gt;를 할당하는 역할을 한다&lt;SPAN lang=EN-US&gt;. &lt;br /&gt;&lt;br /&gt;[##_1C|1352414519.png|width=&quot;537&quot; height=&quot;474&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>directshow를 이용하여 웹캠의 영상을 wmv로 저장해 봅시다~! </title>
            <link>http://www.swssm.org/index.php?idx=350</link>
            <description>&lt;P&gt;&amp;nbsp;웹캠을 이용하여 수신된 영상을 wmv로 인코딩을 하는 소스를 만들었습니다.&lt;br /&gt;&lt;br /&gt;간단하게 살펴 보겠습니다.^^&lt;br /&gt;&lt;br /&gt;Direct Show를 이용하여 &lt;br /&gt;&lt;br /&gt;IMediaControl * g_pMC = NULL;&lt;br /&gt;-&amp;gt;미디어 컨트롤을 하는 인터 페이스&lt;/P&gt; &lt;P&gt;g_pMC-&amp;gt;run()을 할경우 그래프 에디터가 실행 됩니다.&lt;/P&gt; &lt;P&gt;IGraphBuilder * g_pGraph = NULL;&lt;/P&gt; &lt;br /&gt; &lt;P&gt;-&amp;gt;그래프에 필터를 추가할때 addfilter를 할경우 쓰인다.&lt;br /&gt;&lt;/P&gt; &lt;P&gt;ICaptureGraphBuilder2 * g_pCapture = NULL;&lt;/P&gt; &lt;br /&gt; &lt;P&gt;-&amp;gt;이 캡쳐그래프빌더를 이용하여 renderstream를 설정한다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;초기에 &lt;/P&gt; &lt;br /&gt; &lt;P&gt;&amp;nbsp; // Create the filter graph&lt;br /&gt;&amp;nbsp; &amp;nbsp; hr = CoCreateInstance (CLSID_FilterGraph, NULL, CLSCTX_INPROC,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; IID_IGraphBuilder, (void **) &amp;amp;g_pGraph);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; // Create the capture graph builder&lt;br /&gt;&amp;nbsp; &amp;nbsp; hr = CoCreateInstance (CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; IID_ICaptureGraphBuilder2, (void **) &amp;amp;g_pCapture);&lt;/P&gt; &lt;br /&gt; &lt;P&gt;코드를 실행하여 그래프&amp;nbsp; 인터페이스를 얻는다. &lt;br /&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;#################################################################################&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P&gt;&amp;lt;필터를 CoCreateInstance를 이용하여 필터를 로드하고&lt;/P&gt; &lt;P&gt;renderstream을 이용하여 그래프를 연결한다.&amp;gt;&lt;/P&gt; &lt;br /&gt; &lt;P&gt;&amp;nbsp;1)디바이스 찾기(캠과 오디오 비슷하다.)&lt;/P&gt; &lt;br /&gt; &lt;br /&gt; &lt;P&gt;IBaseFilter * pSrc = NULL;&lt;/P&gt; &lt;P&gt;CComPtr &amp;lt;IMoniker&amp;gt; pMoniker =NULL; //검색되는 하나 하나의 장치를 모니카라고 함.&lt;/P&gt; &lt;P&gt;ULONG cFetched;&lt;/P&gt; &lt;P&gt;CComPtr &amp;lt;IEnumMoniker&amp;gt; pClassEnum = NULL;&lt;/P&gt; &lt;br /&gt; &lt;br /&gt; &lt;P&gt;//--&amp;gt;웹캠을 찾는 소스&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; hr = pDevEnum-&amp;gt;CreateClassEnumerator (CLSID_VideoInputDeviceCategory, &amp;amp;pClassEnum, 0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (FAILED(hr))&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Msg(TEXT(&quot;Couldn't create class enumerator!&amp;nbsp; hr=0x%x&quot;), hr);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return hr;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt; &lt;br /&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; // If there are no enumerators for the requested type, then &lt;br /&gt;&amp;nbsp; &amp;nbsp; // CreateClassEnumerator will succeed, but pClassEnum will be NULL.&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (pClassEnum == NULL)&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MessageBox(ghApp,TEXT(&quot;No video capture device was detected.\r\n\r\n&quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; TEXT(&quot;This sample requires a video capture device, such as a USB WebCam,\r\n&quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; TEXT(&quot;to be installed and working properly.&amp;nbsp; The sample will now close.&quot;),&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; TEXT(&quot;No Video Capture Hardware&quot;), MB_OK | MB_ICONINFORMATION);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return E_FAIL;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt; &lt;br /&gt; &lt;P&gt;//장치를 검색한후 첫번째 장치를 BindToObject를 이용하여&amp;nbsp; pSrc에 담는 모습 &lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; if (S_OK == (pClassEnum-&amp;gt;Next (1, &amp;amp;pMoniker, &amp;amp;cFetched)))&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Bind Moniker to a filter object&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hr = pMoniker-&amp;gt;BindToObject(0,0,IID_IBaseFilter, (void**)&amp;amp;pSrc);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (FAILED(hr))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Msg(TEXT(&quot;Couldn't bind moniker to filter object!&amp;nbsp; hr=0x%x&quot;), hr);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return hr;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; else&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Msg(TEXT(&quot;Unable to access video capture device!&quot;)); &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return E_FAIL;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;그다음은 필터들을 조립해야 한다^^&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P&gt;&amp;lt;그래프 에디터에서 디쇼 필터 찾기&amp;gt;&lt;/P&gt; &lt;P&gt;-이런 필터는 장치를 검색하는것과 비슷하게 찾는다.&lt;/P&gt; &lt;P&gt;-&quot;Microsoft Windows Media Video 9&quot; 필터를 찾아 보면,,&lt;/P&gt; &lt;br /&gt; &lt;P&gt;IBaseFilter * pSrcWMV9 = NULL; &lt;/P&gt; &lt;P&gt;CComPtr &amp;lt;IMoniker&amp;gt; pMonikerWMV9 = NULL;&lt;/P&gt; &lt;P&gt;ULONG cFetchedWMV9;&lt;/P&gt; &lt;P&gt;CComPtr &amp;lt;IEnumMoniker&amp;gt; pClassEnumWMV9 = NULL;&lt;/P&gt; &lt;br /&gt; &lt;P&gt;&amp;nbsp;hr = pDevEnum-&amp;gt;CreateClassEnumerator (CLSID_VideoCompressorCategory, &amp;amp;pClassEnumWMV9, 0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (FAILED(hr))&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Msg(TEXT(&quot;Couldn't create class enumerator!&amp;nbsp; hr=0x%x&quot;), hr);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return hr;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt; &lt;br /&gt; &lt;P&gt;&amp;nbsp; // If there are no enumerators for the requested type, then &lt;br /&gt;&amp;nbsp; &amp;nbsp; // CreateClassEnumerator will succeed, but pClassEnum will be NULL.&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (pClassEnumWMV9 == NULL)&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MessageBox(ghApp,TEXT(&quot;No wmv9 was detected.\r\n\r\n&quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; TEXT(&quot;This sample requires a video capture device, such as a USB WebCam,\r\n&quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; TEXT(&quot;to be installed and working properly.&amp;nbsp; The sample will now close.&quot;),&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; TEXT(&quot;No Video Capture Hardware&quot;), MB_OK | MB_ICONINFORMATION);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return E_FAIL;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt; &lt;P&gt;&lt;br /&gt;이후에는 이것을 파일로 만들고 오디오 인코더를 붙이는 부분을 기재하겠습니다 ^^&lt;br /&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Beautiful Garden에 대해서 </title>
            <link>http://www.swssm.org/index.php?idx=328</link>
            <description>&lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;저희 프로젝트를 모르는 분들이 많은 것 같아 순서는 바뀐 듯 하지만 저희 프로젝트 소개하는 글을 하나 올리려고 합니다. 식물을 키우는 것은 동물에 비해서 큰 비용이 들지 않으며 주변 환경의 공기를 정화시키거나 전자파를 차단하는 등 우리 생활에 도움을 주는 역할을 합니다. 이런 식물들의 장점을 이용해서 실제 건축 분야에서도 새집증후군을 없애는 용도로 또는, 화장실의 암모니아 냄새를 제거하는 용도 등의 이유로 식물을 배치하기도 합니다. 이렇게 점점 식물을 키우는 사람들은 늘어 가고 있지만 움직이지 않는 식물을 살아있는 생명체라고 느끼는 데 부족함이 있습니다. 이런 인식의 부족은 &lt;FONT size=2&gt;식물에 대한 관심 부족으로 이어지고 이에 따라 관리 또한 소홀해지게 되어 식물을 죽이고 맙니다. 다들 이런 경험 한번씩은 해봤을 겁니다. 저 또한 식물을 죽인 경험이 있어 식물을 키우는 게 좋다는 건 알지만 식물을 잘 키우려고 하지 않습니다. 식물도 생물체라는 것을 강하게 인식시킬 수 있다면 식물에게 작은 관심 한번 더 보이게 할 수 있다면 식물을 쉽게 죽이거나 상처입히는 일은 없을 것입니다. 내 책상에 작은 친구 만드는 프로젝트입니다. 늦었지만 저희 팀의 이름은 Goodmen입니다.^^&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;br /&gt;즉, 식물에 대한 어떤 부분을 조사하는가 하면 생장에 필요한 필수 정보, 식물에게서 나오는 네츄럴 시그널 즉 전기신호, 그리고 인터랙티브한 교감을 위해 음성신호에 대한 반응을 조사할 것입니다. 식물 생장에 필요한 정보는 온도, 습도, 해당 식물에 대한 생장주기를 조사하여 어떤 조치가 필요할 때 소스를 제공하여 효과적으로 식물을 기를 수 있도록 도움을 주게 됩니다. 또, 간단한 음성을 패턴을 디비로 두어 식물의 입장에서 반응하도록 하고, Natural Signal을 이용해 외부 변화에 대한 반응을 주어 식물에 대한 관심 증대와 살아있는 생물이라는 인식을 심어 줄 것입니다.&lt;/P&gt; &lt;P&gt;&lt;br /&gt;간단하게 네츄럴 시그널(Natural Signal;NS)이 무엇인지 살펴보겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;식물은 각기 자신만의 전기적 전위차를 가지고 있다. 이것은 그 식물만의 고유한 특성으로서 자신의 상태를 나타내거나 자신을 표현하기도 한다. 식물에 흐르는 전기적 전위차를 생체 전류라고 표현하는데 이 생체 전류의 흐름에는 특정 패턴이 생긴다. 이 같은 분야의 획기적인 업적을 남긴 사람은 크레이브 백스터(Cleve Backster)이다. 그의 발견 중 일부는 백스터 현상이라고 명명되어 있다. 그는 1966년 자신의 학교에서 연구에 몰두하던 중 자신의 방에 놓여 있던 열대식물인 드러시너와 거짓말 탐지기로 실험을 통해 식물의 생체 전류가 흐르는 것에 일정 패턴이 존재한다는 것을 증명했다. 우리는 특정 나무가 처한 다양한 상태( 온도, 압력, 습도 등)에 따라 그 나무에 흐르는 전기적 전위, 즉 생체 전류의 측정 값을 Natural Signal 이라고 한다.&lt;/DIV&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;실제 NS(Natural Signal) 처리에 대해서 간단하게 설명하자면,&lt;br /&gt;&amp;nbsp;Natural Signal 즉, 전위차(Voltage)를 처리한다.&lt;br /&gt;&amp;nbsp;1. 한쪽 극은 토양에, 한쪽 극은 식물에 연결하게 되면 토양과 식물간의 약 10mV의 NS가 발생한다. 이 때 사람의 손과 같이 전류를 가지고 있는 물체가 식물을 만지게 되면 10mV의 NS가 40~50mV로 커지게 된다. &lt;br /&gt;&amp;nbsp;2. 이렇게 발생하는 Signal은 사용하기에는 작기 때문에 앰프를 이용해서 증폭을 시켜준다.&amp;nbsp; &lt;br /&gt;&amp;nbsp;3. 앰프로 인해 증폭된 Signal을 식물에 접촉했을 때와 그렇지 않을 경우의 차이를 통해 접촉했을 때의 시간을 얻어낸다. 이렇게 얻어낸 값은 미리 DB화 시켜놓은 정보를 이용해 사용자에게 해당하는 반응을 출력해준다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 방식이 실제로 통하는 지 안 통하는 지 궁금하실 분들도 많으실거라고 생각됩니다만 실제 저희가 전압 계산을 해본 결과 차이가 발생합니다. 또한, 김광진 박사의 '말하는 식물' 도 이러한 방식으로 만들어진 것입니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;/P&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&amp;nbsp; 식물의 생체전위를 이용해 몇가지 사람의 행동에 화분에 미리 설치된 스피커로 음성이 출력되는 이른바 ‘말하는 식물’로 유명해진 김광진 연구원은 이 화분으로 특허 출원까지 한 상태이다. 우리는 김광진 연구원이 수원농촌진흥청에 있다는 것을 알고 '말하는 식물'의 동작원리를 눈으로 보기 위해 찾아갔다. 이 화분은 시판된 다른 제품들과 같이 습도, 조도, 온도를 측정한다. 다른 제품들과 다른 점이 있다면 생체전위를 이용하는 것과 음성으로 화분의 상태를 출력해 주는 것이다. 예를 들어 물이 부족할 경우 화분은 '목말라, 물줘 !' 라는 말을 미리 설치된 화분 안의 스피커를 통해 출력하게 된다. 또한 생체전위를 이용해 식물을 툭 치거나, 쓰다듬을 때 그에 맞는 음성이 출력된다. 이러한 음성 출력으로 '말하는 식물'이라 불리게 되었고, 실제로 아이들에게 교육용으로나 재미적 요소로도 인기가 좋다. 이러한 인기에 힘입어 여러 박람회에 전시되고 있고, 최근에 열리고 있는 고양시의 꽃 박람회에도 전시되어 있다. &lt;br /&gt;&amp;nbsp;하지만 이 경우 스피커 장착 등의 이유로 크기가 굉장히 커지며, 단순히 약 6개 정도의 상태를 똑같은 말로 출력하기 때문에 처음 접했을 때와 다르게 금방 질리게 되는 단점이 있다. 또한 항상 전극을 식물 줄기에 꽂아 두기 때문에 연구용으로 적합하다는 생각이 더 들게 한다. 이러한 점으로 볼 때 제품으로 판매되기에는 부족한 점이 아직 많다.&lt;/DIV&gt; &lt;P&gt;이 방법은 검증된 것이라고 생각되었고 저희가 직접 측정해본 결과 가능하다는 것을 확신하면서 프로젝트를 진행하고 있습니다. 다만, 이상하게 프로젝트 진행 중 다른 종의 식물, 같은 종의 다른 화분들 또는 다른 장소에서 다각도로 실험해보았을 때 알 수 없는 이유로 특정 화분의 식물에 대해서는 값이 제대로 나오지 않는 경우가 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. A 화분의 식물이 값을 제대로 뿌려주지 않는 놈이라고 해봅시다. 값이 제대로 나오던 B 화분 옆에 A 화분을 두고 B화분의 전압차를 검사하면 값이 A 화분처럼 나옵니다. &lt;br /&gt;&lt;br /&gt;2. 갑과 을이라는 사람이 C 화분을 만졌을 때 모두 값이 잘 나왔습니다. 그런데 D 화분을 만졌을 때 갑이 만졌을 때 반응이 조금 다르게 나올 경우 다시 C 화분을 갑과 을 모두 만졌을 때 아까와는 다르게 갑의 반응이 D 화분을 만졌을 때와 같은 반응이 나옵니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;저희가 식물이나 생물 쪽을 집중적으로 공부하지않아 이것이 어떤 작용을 하고 있는 지는 알 수 없기 때문에 신기해하면서 그리고 두려워하면서(;;) 실험을 계속 해보고 있습니다. 혹시 이것이 사람의 호르몬과 같은 무언가에 의해 이루어지는 것이라고 한다면 결국 이것도 일종의 감정이라고 볼 수 있지 않을까 하는게 제 생각입니다만... 피엘님의 생각은 과학적으로 증명해야된다고 합니다.-_-;&lt;br /&gt;&amp;nbsp;이 쪽 분야에 대한 연구는 과학으로 증명하기 어려운 것들이 많고 여러가지 다양한 많은 실험들을 통해서만 증명 가능한 것들이 많으므로 논문 자료가 극히 적은 편입니다. 하지만 연구는 아주 오래 전 부터 쭉 계속되어 오고 있습니다. &quot;환경 자극에 따른 식물의 엽표면 전위포텐셜의 변화(Changes in Electric Potentials of Leaf Surface Induced by Environmental Stimuli)&quot;라는 논문에서는&lt;/P&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;현재까지 알려진 바로는 식물체는 외부자극에 대해 체내 약 10~50mV 범위의 약한 전류가 반응한다.(Spillane, 1991) 한편, 잎을 핀셋 등의 도구로 짓눌러 부수거나 잎 끝을 태우는 것과 같은 일부 상해를 줄 경우에도 전기적 변화가 발생한다. 그러나 이와 같은 전기적 반응은 자극을 주는 위치와 강도에 따라 매우 다르게 나타난다.(Malone과 Stankovic, 1991;Robin과 Bonnemain, 1985; Roblin, 1985) 음악이 작물의 생육을 촉진시킴과 동시에 체내의 특정성분을 증가시켜 병충해 발생억제에 효과적이라고 보고하였다.(Lee 등, 1997) 한편, 식물에게 사랑하는 감정으로 대했을 때와 불에 태워지거나 뿌리째 뽑히게 될 것이라는 예감만 해도 격렬한 반응을 보인다(Robert, 1989) 등 과학적 객관성이나 재현성 없는 것으로 판단되는 사례들을 서론으로 제시, 자체 개발한 생체 전위 측정방법을 이용하여 외부자극에 따른 식물의 전기적 특성에 대해서 조사하였다. &lt;br /&gt;&amp;nbsp;논문에 의하면 &lt;br /&gt;&amp;nbsp;본 실험의 결과에 따라서 1) 외부자극에 대한 식물체의 전위포텐셜 변화가 분명히 발생하는 것을 볼 수 있었으며, 2) 중요한 사실은 자극뿐만 아니라 식물체의 종류 및 시간에 따라서도 다양하게 반응하며, 이러한 사실은 일반적인 전위차 변화 뿐만 아니라 변이차 및 주파수 분석을 통해서도 확인할 수 있었다.&amp;nbsp; &lt;/DIV&gt;&lt;br /&gt;고 말하고 있습니다. 또한 흥미로운 점은&lt;br /&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;또한, 특이한 사실은 현재 사용된 식물재료 대부분이 생체전위변화 측정을 위한 주파수 분석 시 자극유무와 상관없이 1~10Hz 대역에서 주파수 분포가 높았으며, 식물에 따라 자극 전후에 상당한 차이를 보였다는 것이다. 현재까지 조사된 바로는 이러한 결과를 이전에 보고한 예가 없었던 것으로 판단되며, 인간의 대뇌 피질에서 발생되는 뇌파(δ, θ, α, wave)도 이 대역에 속한다는 점에서 매우 흥미롭다(Son 등, 1998). &lt;/DIV&gt;&lt;br /&gt;이라는 것입니다. 우리가 실험 중에 발생한 문제들과 이것이 매우 유사함을 볼 수 있습니다. 논문 속의 실험 결과만으로 이것이 얼마나 신뢰가 가는 자료인지 확인할 순 없을 테지만 실제로 실험을 해볼 수 있는 상황이 아니므로 이정도로 저희의 NS 연구자료에 대한 이야기를 마칠까합니다.&lt;br /&gt;&lt;br /&gt;다음은 Beautiful Garden 프로젝트 실험 자료들과 사운드 관련 자료들로 찾아뵙겠습니다.^^&lt;br /&gt;ps. 사진들이 안올려져서 후에 다시 수정하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Windows Media Encoder 9 Series SDK </title>
            <link>http://www.swssm.org/index.php?idx=332</link>
            <description>&lt;FONT color=#000000&gt;안녕하세요. 19기 임승훈입니다.&lt;br /&gt;영상 스트리밍 서비스를 위해 Windows Media Encoder 9 Series SDK에 대해 공부하게 되었습니다.&lt;br /&gt;처음하는 부분이라 생소하고 어색해 처음에는 많이 어색했지만, 이제는 조금 익숙해진 듯 합니다.&lt;br /&gt;이번에는 그 중에서 Windows Media Encoder 9 SDK의 간단한 특징에 대해 설명드리겠습니다.&lt;br /&gt;SDK - Software Dvelopment Kit...이번에 알았습니다...;;&lt;br /&gt;&lt;!--StartFragment--&gt;&lt;/FONT&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&lt;FONT color=#000000&gt;&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 12pt; FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&lt;FONT size=4&gt;Windows Media Encoder 9 Series SDK(Software Development Kit)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Microsoft Windows Media 9 Series SDK의 주성분들 중의 하나로서 다른 성분들은 다음과 같습니다.&lt;br /&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; · Microsoft Windows Media Services 9 Series SDK&lt;br /&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; · Microsoft Windows Media Format 9 Series SDK&lt;br /&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; · Microsoft Windows media Rights Manager 9 Series SDK&lt;br /&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; · Microsoft Windows Media Player 9 Series SDK&lt;br /&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; · Windows Media 9 Series Embedded Product Adaptation Kit (PAK)&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Windows Media Encoder 9 Series SDK는 Application Programming Interface(API)에 근거한 강한 자동화를 사용해 Windows Media Encoder 어플리케이션을 개발하기를 원하는 모두를 위해 디자인되었습니다. 이 SDK와 더불어 C++나 Microsoft Visual Basic®, 스크립트 언어를 사용하는 개발자는 multimedia 컨텐츠를 캡쳐해서 Windws Media(file이나 stream 방식)으로 Encode할 수 있습니다. 예를 들어, Broadcast live content나 Batch-process content, Create a custom user interface, Remotely administer Windows Media Encoder applications 등과 같은 자동화 API에 이용할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&amp;nbsp; &lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold; FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&lt;FONT size=3&gt;About the Windows Media Encoder SDK&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Microsoft Windows Media Encoder Software Development Kit (SDK)는 오디오나 비디오 컨텐츠를 윈도우즈 미디어 파일이나 스트림 형태로 압축하거나 저장하기 위해 사용합니다. 또한 이 SDK는 사용자들이 그들의 컴퓨터에 부착된 장치들에서 오디오와 비디오 파일들을 Windows Media Format으로 번역해 멀티미디어 작품을 제작하는 것을 가능하게 해줍니다. 그리고 이들을 로컬 파일 형태로서 windows Media를 저장하거나, 인터넷을 통해 방송을 하거나, Windows Media server로 push할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Windows Media Encoder 9 Series를 사용할 수 있기 위해서는 반드시 Windows Media Encoder 9 Series SDK를 설치되어 있어야 합니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold; FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&lt;FONT size=3&gt;What's New&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;다음 리스트는 Windows Media Encoder 9 Series SDK에 어떤 새로운 기능이 더해졌는지와 우리가 무엇을 할 수 있는지에 대해 요약한 것입니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 향상된 Multiple Bit Rate(MBR) 지원, 새로운 Variable Bit Rate(VBR) 지원, Multichannel Source Support, Nonsquare Pixel 지원, 타임 코드 지원, 2-pass Encoding, 새로운 오디오와 비디오 codec 추가로 인한 인코딩 효율성의 향상.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Windows Media Server에 스트림을 push하는 것으로 방송을 분배할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Windows Media Encoder SDK를 사용해 디지털 장치를 제어할 수 있습니다. 그리고 인코딩을 위한 클립을 선택하기 위해 Edit Decision Lists(EDLs)를 사용합니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 인코딩 프로필을 만들고 수정할 수 있습니다. Fine-tune 컨트롤은 우리가 오디오와 비디오 코덱, Encoding 방법(VBR or CBR), 그리고 비디오와 최적화 환경을 지정하는 것을 가능하게 해줍니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 인코딩된 파일들에 watermarks를 추가할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 파일의 지속도 또는 사이즈로써 파일 저장을 제한할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 스트림 안에 HyperText Markup Language(HTML) 문서를 포함하는 것으로 방송을 할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Metadata, indexing, script, 그리고 marker를 추가하는 것으로 후 작업 파일 처리가 가능합니다. 파일 편집을 위해 mark-in과 mark-out을 사용할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 인코딩된 파일 내에서 스트림을 쪼개거나 재조합할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 적용하기에 최적한 환경을 결정하기 위해 비디오 내용을 분석할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 인코딩된 내용을 Digital Rights Management(DRM) 기술을 사용해 보호받을 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 새로운 Plug-in 모델을 사용해 오디오와 비디오 변환 Plug-in을 만들 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&lt;STRONG&gt;아래 변화는 Windows Media Encoder 7.1 SDK를 기반으로 만들어졌습니다.&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Windows Media Encoder 9 Series SDK를 사용하기 위해서는 Windows Media Encoder 9 Series의 설치가 반드시 필요합니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Microsoft Visual Basic, C++, 그리고 C# 같은 프로그램 언어들에 Windows Media Encoder의 특징을 어떻게 사용할 수 있는지를 설명하는 새로운 Code 샘플을 포함하고 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- WMEncDataview 오브젝트와 함께 Visual Basic을 이용해 스트림의 프리뷰와 포스트뷰가 가능합니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Windows Media Encoder 어플리케이션을 제공하는 컴퓨터에 연결될 수 있는 클라이언트의 수는 50에서 5로 감소했습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 새로운 Property 페이지가 이용 가능합니다. 하지만 새로운 Property 페이지가 Windows Media Encoder 7.1 SDK에 근거한 어플리케이션에는 적절히 표시되지 않을 수도 있음을 숙지해야합니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- C++을 이용해 프로그래밍을 할 때에는 반드시 BSTR 포맷을 사용해야 하고, wide-character 포맷은 더 이상 사용할 수 없습니다. 예를 들어, L&quot;text&quot;대신 CComBSTR(&quot;text&quot;)를 사용해 스트링을 명기해야합니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&lt;STRONG&gt;아래 다이어그램은 Windows Media Encoder 9 Series SDK에 추가된 새로운 interface들을 보여주고 있습니다.&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;IMG src=&quot;http://estworks.com/swssm/wme.gif&quot;&gt; &lt;P class=바탕글&gt;&lt;?xml:namespace prefix = v ns = &quot;urn:schemas-microsoft-com:vml&quot; /&gt;&lt;v:shapetype id=_x0000_t75 coordsize=&quot;21600,21600&quot; o:spt=&quot;75&quot; o:preferrelative=&quot;t&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok=&quot;f&quot; gradientshapeok=&quot;t&quot; o:connecttype=&quot;rect&quot;&gt;&lt;/v:path&gt;&lt;o:lock v:ext=&quot;edit&quot; aspectratio=&quot;t&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=_x62658024 style=&quot;WIDTH: 425.2pt; HEIGHT: 563.42pt; v-text-anchor: top&quot; type=&quot;#_x0000_t75&quot;&gt;&lt;v:imagedata o:title=&quot;EMB0000128c676e&quot; src=&quot;file:///C:\DOCUME~1\임승훈\LOCALS~1\Temp\Hnc\BinData\EMB0000128c676e.bmp&quot;&gt;&lt;/v:imagedata&gt;&lt;?xml:namespace prefix = w ns = &quot;urn:schemas-microsoft-com:office:word&quot; /&gt;&lt;w:wrap type=&quot;topAndBottom&quot;&gt;&lt;/w:wrap&gt;&lt;/v:shape&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold; FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&lt;FONT size=3&gt;Understanding the Windows Media Encoder SDK&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 개발자들이 어플리케이션과 워크플로우로 Windows Media를 통합하는 것을 가능하게 해주는 풍부한 인터페이스를 제공함으로써 Windows Media Encoder SDK는 강력하고 믿을만 합니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Windows Media Encoder SDK는 C++, Visual Basic, Visual Basic Scripting Edition(VBScript), Visual Basic for Applications, 그리고 모든 종류의 Microsoft .NET 프로그래밍 언어들을 포함하는 다양한 언어들을 제공합니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 많은 다양한 어플리케이션들 즉, Video e-mail, 안전 감시 보관, 인코더 배치, 화면 캡쳐 유틸리티, Microsoft PowerPoint, Microsoft Office add-ins, 디지털 레코더, 그리고 관습적인 인코딩 어플리케이션들이 Windows Media Encoder SDK를 사용함으로써 개발되어집니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;&lt;STRONG&gt;Windows Media Encoder SDK는 당신이 아래와 같은 것을 할 수 있도록 허락하면서 광범위한 범위의 기능을 제공합니다.&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 매우 다양한 파일 형태들과 장치 종류로부터의 인코딩이 가능합니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 인코딩 과정 동안에 컨텐츠의 입출력 버전을 확인할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 컨텐츠를 스트림이나 파일 형식으로 인코딩 가능합니다. 스트림들은 인코딩 어플리케이션에서 pull되거나 Windows Media server로 push될 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 인코딩 어플리케이션을 사용해 디지털 장비들을 직접적으로 제어할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 인코딩 과정 도중, 혹은 그 이후에 통계를 검색할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 관습적인 인코딩 프로필들을 창조하거나 수정할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 하나의 Multiple Bit Rate(MBR) 파일로부터 복수의 파일을 만드는 것이나 복수의 파일들로부터 하나의 MBR 파일을 만드는 것으로 스트림을 수정할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 시작점과 끝점을 정돈함으로써, 그리고 메타 데이터, 스크립트, 마커와 색인을 추가함으로써 Windows Media 파일을 수정할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 인코딩 과정 동안에 Digital Rights Management(DRM) 기술을 사용해 컨텐츠를 보호할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Windows Media Encoder SDK는 Windows Media Format SDK에 의해 만들어지고, 그것은 하위 레벨의 기능을 제공할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- Windows Media Format SDK와는 달리 Windows Media Encoder SDK는 스크립트 언어를 지원하고 적은 코드를 가지고 복잡한 어플리케이션을 만드는 것이 가능합니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 맑은 고딕; mso-fareast-font-family: 맑은 고딕; mso-hansi-font-family: 맑은 고딕&quot;&gt;- 추가적으로, Windows Media Encoder SDK는 다양한 입출력 옵션들을 지원해줌으로써 우리가 스스로 하위 레벨 성분들을 개발하지 않아도 됩니다.&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Windows Winsock2로 구현하는 고성능 서버 </title>
            <link>http://www.swssm.org/index.php?idx=333</link>
            <description>&lt;p&gt;서버를 구현함에 있어서 가장 중요한 것은 아마도 성능과 안정성 일 것이다. 고성능 서버를 구현한다는 말은 결국 운영체제에서 제공하는 가장 빠른 I/O 모델하고도 연관이 되는데, 윈도우에서 가장 많이 사용되는 방식은 아마도 IOCP(I / O Completion Port) 서버 모델 일 것이다. 반대로 리눅스 운영체제에서는 Epoll I / O 모델을 사용하거나, 솔라리스 특유의 Kqueue 모델이 고성능 서버를 짤 때 가장 많이 사용되는 I / O 모델 일 것이다.&lt;/p&gt; &lt;p&gt;Linux 운영체제와 달리 Windows는 윈속이라는 Socket Programming 확장 모델을 제공하는데, 이로 인한 장점은 운영체제에서 제공하는 부가 기능을 원활히 이용할 수 있다는 점이 있다. 하지만 그로 인해 다른 운영체제로의 이식에 제한을 갖는 부분은 트레이드 오프라고 할 수 있다.&lt;/p&gt; &lt;p&gt;서버를 구현함에 있어서 가장 염두에 두었던 부분은 크게 몇가지로 요약할 수 있다.&lt;/p&gt; &lt;p&gt;1. 서버가 동작할 때 부가적인 메모리 할당 연산을 최소화한다.&lt;/p&gt; &lt;p&gt;2. 서버와 클라이언트의 구현상에 공유되는 함수는 래퍼 클래스를 작성하여 확장성을 갖게 한다.&lt;/p&gt; &lt;p&gt;3. 클래스의 각 멤버 함수는 Thread-Safe 해야 하며, 재진입성을 확보해야 한다.&lt;/p&gt; &lt;p&gt;각 부분에 대해서 조금 더 자세히 설명을 해보겠다.&lt;/p&gt; &lt;p&gt;첫번째로 메모리 할당 연산에 대한 부분을 언급했는데, 기본적으로 전역 메모리에 할당하는 전역 변수는 속도는 빠르지만, 동적 메모리에 비해서 유연성이 떨어진다. 하지만 동적 메모리는 유연성이 높지만, 메모리 할당 연산에 대한 연산에 대한 부담이 크다. 만약 C++ 에서 제공하는 메모리 할당 연산을 그대로 사용했을 경우, 그렇지 않았을 경우와 상당한 성능적인 차이가 발생하게 된다. 이 부분에 대한 해결책으로 가장 많이 사용되는 것이 바로 메모리 할당기를 만드는 것이다. &lt;/p&gt; &lt;p&gt;C에서 상대적으로 메모리 할당기를 구현하는 것이 부담스러운 작업이지만, C++에서는 operator new 연산을 중복 적재하는 것으로 쉽게 구현할 수 있다. &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt; &lt;tr&gt; &lt;td width=&quot;2&quot;&gt;&lt;/td&gt; &lt;td width=&quot;6&quot;&gt;&lt;/td&gt; &lt;td width=&quot;594&quot;&gt;&lt;/td&gt; &lt;td width=&quot;6&quot;&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot;&gt; &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt; &lt;tr&gt; &lt;td width=&quot;73&quot;&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;a href=&quot;http://tt_attach_path/1007234089.gif&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;clip_image001[8]&quot; border=&quot;0&quot; alt=&quot;clip_image001[8]&quot; src=&quot;http://tt_attach_path/1365412665.gif&quot; width=&quot;579&quot; height=&quot;923&quot; /&gt;&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;a href=&quot;http://tt_attach_path/1021661652.gif&quot;&gt;&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot;&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt; &lt;p&gt;MultiThreadSync&amp;lt;T&amp;gt; 클래스는 Win32 API의 CriticalSection에 대한 래퍼 클래스로 메모리 할당에 대한 연산이 멀티 스레드 안정성을 가지도록 한다. &lt;/p&gt; &lt;p&gt;메모리 할당 클래스는 미리 할당될 객체 크기만큼의 메모리를 50개의 연결리스트로 관리하며, 이 메모리가 다 소비 될 때까지 메모리 할당을 하지 않고, 미리 할당된 메모리에서 할당하여 준다.&lt;/p&gt; &lt;p&gt;C++에서 제공하는 new 연산자는 크게 두가지 연산을 한다.&lt;/p&gt; &lt;p&gt;1. operator new 연산을 통해 메모리를 할당한다.&lt;/p&gt; &lt;p&gt;2. 해당하는 객체의 생성자를 호출한다.&lt;/p&gt; &lt;p&gt;다음과 같이 C++ new 연산을 분리되어 있기 때문에, 온전한 크기의 메모리만 확보되었다면 해당 클래스가 온전히 생성자를 호출하여 초기화할 수 있다는 것을 보장해준다.&lt;/p&gt; &lt;p&gt;서버내에서 빈번히 사용되는 객체들에 대해서는 저 메모리 풀 클래스를 상속받아서, 구현하였기 때문에 메모리 할당으로 인한 성능 감소를 최소화 하였다.&lt;/p&gt; &lt;p&gt;덤으로, STL에서 사용되는 vector, list, map 등 같은 컨테이너들도 STL 룰에 맞는 메모리 할당기를 구현한다면, 자료구조의 성능을 최적화 할 수 있지만 이 부분에 대해서는 구현하지 않았다.&lt;/p&gt; &lt;p&gt;두번째로 서버와 클라이언트에서 사용하는 Winsock2 함수들에 대해서는 래퍼 라이브러리를 작성하여 서버와 클라이언트에서 사용되는 코드의 중복을 최소화하여, 유지보수에 열려 있도록 작성하였다.&lt;/p&gt; &lt;p&gt;다음은 라이브러리 클래스의 계층도 이다.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://tt_attach_path/1119387265.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;class&quot; border=&quot;0&quot; alt=&quot;class&quot; src=&quot;http://tt_attach_path/1033543363.jpg&quot; width=&quot;586&quot; height=&quot;308&quot; /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;해당 클래스 라이브러리는 정적 라이브러리로 구현하였고, 서버와 클라이언트는 해당 라이브러리 파일을 임포트하여 사용하고 있다.&lt;/p&gt; &lt;p&gt;마지막으로 멀티 스레드 안정성과 재진입 가능에 대한 구현 또한 클래스 다이어그램의 최상위 클래스인 MultiThreadSync 클래스를 상속 받기 때문에 각 루틴에 대한 안정성을 확보하였다.&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;[참고 도서]&lt;/p&gt; &lt;p&gt;온라인 게임 서버 프로그래밍(정보문화사, 한동훈 저)&lt;/p&gt; &lt;p&gt;Network Progarmming For Microsoft Windows 2th Edition(정보문화사, 김남식 역)&lt;/p&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>DirectShow를 이용한 화면녹화 모듈 [화면녹화 -&amp;gt; flv 저장] - 두 번째 ...</title>
            <link>http://www.swssm.org/index.php?idx=327</link>
            <description>&lt;p&gt;지난 시간에 이어서 이번에 설명드릴 내용은 다음과 같습니다. ^^ &lt;br /&gt; &lt;br /&gt;3. COM 에 대한 이해 &lt;br /&gt;4. Visual Studio 2008에서 DirectShow를 이용한 어플리케이션 제작 방법 &lt;br /&gt;5. Kerberos Capture 프로그램 &lt;br /&gt; &lt;br /&gt;먼저 COM에 대해 간단히 알아볼까요? &lt;br /&gt;DirectShow는 COM 을 기반으로 구현되었기 때문에 이에 대한 이해 없이는 어플리케이션을 구현하기가 어렵습니다.&amp;#160; &lt;br /&gt; &lt;br /&gt;먼저 COM을 사용하기 위해서는 반드시 CoInitialize(NULL) 함수를 호출해 주어야만 합니다. &lt;br /&gt;사용이 끝날 때도 역시 CoUninitialize()&amp;#160; 함수를 호출해야 합니다. &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;COM 객체 생성하기. &lt;br /&gt;&lt;/strong&gt; &lt;br /&gt;CoCreateInstance() API 함수를 통해 생성하며 이때 넘겨주는 파라미터들은 다음과 같습니다. &lt;br /&gt; &lt;br /&gt;CoCreateIntance(&lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#ff80c0&quot;&gt;CLSID_FilterGraph&lt;/font&gt;, &lt;br /&gt;NULL, &lt;br /&gt;CLSCTX_INPROC_SERVER, &lt;br /&gt;&lt;font color=&quot;#ff80c0&quot;&gt;IID_IGraphBuilder&lt;/font&gt;, &lt;br /&gt;&lt;font color=&quot;#ff80c0&quot;&gt;(void**)&amp;amp;m_pGB&lt;/font&gt; &lt;br /&gt;); &lt;br /&gt; &lt;br /&gt;먼저 1번 째 파라미터인 CLSID_FilterGraph 는 생성할 객체의 종류이다. 앞에 CLSID는 COM 컴포넌트의 Class ID를 의미한다. 예를 들어 GraphEdit에서 추가했던 여러 가지 필터 중에서 스트림을 파일로 저장하는 Rendering Filter의 종류 중 하나인 File Writer 필터 객체를 생성하고 싶을 때 CLSID_FileWriter 이런 식으로 파라미터를 넘겨주면 된다. &lt;br /&gt; &lt;br /&gt;4 번째 파라미터인 IID_IGraphBuilder 는 인터페이스를 의미한다.&amp;#160; 앞에 IID는 Interface ID를 의미하며 생성하는 &lt;br /&gt;COM 객체가 어떤 용도로 사용될 것인가를 지정해주는 부분이다. COM 객체가 그래프일 경우 IID_IGraphBuilder 로 파라미터를 지정해주면 되고 필터일 경우는 IID_IBaseFilter 로 지정해주면 이러한 용도에 맞게 COM 객체를 생성해준다. &lt;br /&gt; &lt;br /&gt;5번째 파라미터는 생성된 COM 객체의 인터페이스에 대한 포인터를 받아올 포인터 변수이다. COM 객체가 CoCreateInstance 함수로 부터 생성이 되면 이 객체에 대한 인터페이스 포인터를 얻을 수 있다. 이러한 인터페이스가 필요한 이유는 COM의 구조상 COM 컴포넌트나 COM 인터페이스에 직접 명령을 내릴 수 없기 때문이다. &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;http://tt_attach_path/1128134192.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1317913227.png&quot; width=&quot;358&quot; height=&quot;88&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;분홍색으로 표시하지 않은 2, 3번째 파라미터들은 DirectShow에서 대부분 디폴트로 쓰기 때문에 일단 설명에서 제외했습니다. &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;COM 인터페이스에 대한 이해&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;CoCreateIntance( &lt;/p&gt; &lt;p&gt;&lt;font color=&quot;#ff80c0&quot;&gt;CLSID_FilterGraph&lt;/font&gt;, &lt;br /&gt;NULL, &lt;br /&gt;CLSCTX_INPROC_SERVER, &lt;br /&gt;&lt;font color=&quot;#ff80c0&quot;&gt;IID_IGraphBuilder&lt;/font&gt;, &lt;br /&gt;&lt;font color=&quot;#ff80c0&quot;&gt;(void**)&amp;amp;m_pGB&lt;/font&gt; &lt;br /&gt;);&lt;/p&gt; &lt;p&gt;이 함수에서 m_pGB 라는 포인터 변수가 생성된 COM 객체에 대한 인터페이스를 가리킨다는 거 기억하시죠? &lt;br /&gt;그렇다면 이렇게 얻어온 인터페이스 포인터로 무엇을 할 수 있을까요? &lt;br /&gt; &lt;br /&gt;바로 명령을 내릴 수 있습니다. 이 말을 좀 더 쉽게 표현한다면 COM 객체에서 사용 가능한 함수들을 호출할 수 있습니다.&amp;#160; 예로 들면 IID_IMediaControl 에 대한 인터페이스 포인터를 가지고 있다면 run(), pause(), stop() 등의 멀티미디어 데이터의 재생에 관련된 명령들을 내릴 수 있습니다. &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;IUnknown 인터페이스 &lt;br /&gt;&lt;/strong&gt;모든 COM 인터페이스들은 반드시 IUnkown 인터페이스 상속해야만 한다. 이 인터페이스에는 크게 3가지 종류의 함수를 포함하고 있으며 예제를 통해 간단히 살펴보면 다음과 같다. &lt;br /&gt; &lt;br /&gt;QueryInterface() &lt;br /&gt;: 프로그래머가 어떤 특정한 IID에 대한 명령을 내리고 싶을 때… 해당 IID가 있는지 COM 인터페이스 포인터에게 물어보는 역할을 수행하는 함수이다. &lt;br /&gt; &lt;br /&gt;AddRef() &lt;br /&gt;: Add Reference count의 약자로서 COM 객체에게 자신이 참조하고 있다는 것을 알려주기 위해 카운트를 증가시켜 주는 역할을 수행한다. &lt;br /&gt; &lt;br /&gt;Release() &lt;br /&gt;:&amp;#160; Release Reference count를 의미하며 COM 객체에게 자신이 더 이상 참조하고 있지 않다는 것을 알리는 역할을 수행하며 카운트를 감소시켜 준다. &lt;br /&gt; &lt;br /&gt;COM 객체는 자신을 참조하는 카운트의 수가 0일 경우 자동 소멸하는 방식이므로 프로그램 작성시 몇 가지 주의 &lt;br /&gt;해야 될 점이 있다. &lt;br /&gt; &lt;br /&gt;1. QueryInterface() 함수를 통해 포인터를 받아온 경우 사용 전에 AddRef() 함수를 호출해 주지 않아도 된다. &lt;br /&gt;그 이유는 QueryInterface() 함수에서 알아서 COM 객체에게 어떤 포인터가 참조하고 있다는 사실을 알려주기 때문이다. 그러나 사용 후 Release() 함수는 자동으로 호출해 주지 않으므로 반드시 Release() 함수를 호출해 주도록 하자. &lt;br /&gt; &lt;br /&gt;2.&amp;#160; 단순히 포인터를 복사해서 쓰는 경우 사용 전에 반드시 AddRef() 함수를 호출하여 COM 객체에게 자신이 참조하고 있다는 사실을 알려주도록 하자. 이렇게 하지 않고 무분별하게 포인터를 복사해서 쓰는 경우 COM 객체 입장에서는 자신을 가리키고 있는 포인터의 개수를 알지 못하게 되며 COM 객체를 소멸시키지 못하는 사태가 발생할 수 있다. &lt;br /&gt; &lt;br /&gt;위의 내용이 조금 두서 없이 쓴 것 같아서 … 조금 더 보충설명을 해드리겠습니다. &lt;br /&gt; &lt;br /&gt;QueryInterface() 로 부터 얻어온 포인터는 다른 인터페이스 포인터에게 복사해줄 수 있다. &lt;br /&gt; &lt;br /&gt;예를 들면 &lt;br /&gt;// QueryInterface() 함수를 통해 COM 인터페이스 포인터를 받아올 인터페이스 포인터 선언 &lt;br /&gt;&lt;font color=&quot;#0080ff&quot;&gt;IFileSinkFilter&lt;/font&gt; *pFSF; &lt;br /&gt;// QueryInterface() 함수 없이 COM 인터페이스 포인터를 복사할 인터페이스 포인터 선언 &lt;br /&gt;&lt;font color=&quot;#0080ff&quot;&gt;IFileSinkFilter&lt;/font&gt; *pFSF2; &lt;br /&gt; &lt;br /&gt;//pFilterFileWriter 는 FileWriter 필터에 대한 COM 인터페이스 포인터 &lt;br /&gt;&lt;font color=&quot;#0080ff&quot;&gt;pFilterFileWriter&lt;/font&gt;-&amp;gt;QueryInterface(IID_IFileSinkFilter, (void **)&amp;amp;pFSF)); &lt;br /&gt; &lt;br /&gt;위에서 QueryInterface() 함수를 통해 IID_IFileSinkFilter 에 대한 인터페이스 포인터를 pFSF 가 받아오게 된다. &lt;br /&gt; &lt;br /&gt;//pFSF2 변수에 QueryInterface() 함수를 통해 받아온 pFSF 포인터를 복사 &lt;br /&gt;pFSF2=pFSF; &lt;br /&gt; &lt;br /&gt;지금부터 집중하시고~~!! 지금부터 AddRef() 함수에 대한 설명 들어갑니다. &lt;br /&gt; &lt;br /&gt;pFSF-&amp;gt;SetFileName(L”C:\secmem\the kerberos\results.flv”, NULL); &lt;br /&gt;위의 코드는 정상적으로 수행됩니다. 왜냐하면 QueryInterface() 함수가 정상적으로 pFSF 에게 IID_IFileSinkFilter &lt;br /&gt;에 대한 일종의 사용허가증을 발급해주었기 때문입니다. &lt;br /&gt; &lt;br /&gt;그렇다면 pFSF 를 복사한 pFSF2 변수도 위와 같이 사용이 가능할까요? &lt;br /&gt;pFSF2-&amp;gt;SetFileName(L”C:\secmem\the kerberos\results.flv”, NULL); &lt;br /&gt; &lt;br /&gt;답은… 가능하다! 하지만 중요한 것은 모든 COM 객체들은 사용 후 소멸시켜주는 Release() 함수를 호출해줘야 하는데.. AddRef() 함수 없이 무분별하게 복사해서 사용한다면 COM 객체 입장에서는 자신을 가리키고 있는 포인터가 몇 개인지 알 수 없기 때문에 소멸시기를 판단할 수가 없게 된다.&amp;#160; COM 객체는 자신이 사용되고 있는 곳의 개수를 관리하고 있다가 0이 되었을 경우 자동 소멸하는 방식이기 때문에 복사한 후 사용 전에 반드시 &lt;br /&gt;AddRef() 함수를 호출한 후 사용하도록 하자. &lt;br /&gt; &lt;br /&gt;이상으로 COM 에 대한 설명을 마치고 Visual Studio 2008로 DirectShow를 이용한 어플리케이션 개발 방법에 대해 설명 드리고 저희 프로그램에 대해서 소개를 하겠습니다. &lt;br /&gt; &lt;br /&gt;1. 개발에 필요한 환경 설정 &lt;br /&gt;#pragma comment(lib, &amp;quot;&lt;font color=&quot;#0080ff&quot;&gt;Strmiids.lib&lt;/font&gt;&amp;quot;) &lt;br /&gt;이것은 위에서 설명한 CLSID와 IID에 대한 정의 및 DirectShow 기술을 사용하기 위한 라이브러리 파일입니다. &lt;br /&gt; &lt;br /&gt;#include &amp;lt;&lt;font color=&quot;#0080ff&quot;&gt;DShow.h&lt;/font&gt;&amp;gt; &lt;br /&gt;&lt;a href=&quot;http://tt_attach_path/1142201997.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1264217727.png&quot; width=&quot;579&quot; height=&quot;272&quot; /&gt;&lt;/a&gt; &lt;br /&gt;Dshow.h 파일의 내용 중 일부를 캡쳐했습니다. 전반적으로 DirectShow 개발에 필요한 오류 정보 및 인터페이스, CLSID 정보들이 포함되어 있다는 것을 알 수 있습니다. 다음에 이어질 설명을 이해하기 위해 위의 그림에서 &lt;br /&gt;&lt;font color=&quot;#ff0000&quot;&gt;60 번째 라인 uuids.h&lt;/font&gt; 파일이라는 것이 있구나~ 이 정도만 생각하시고 계속 읽어주시기 바랍니다. &lt;br /&gt; &lt;br /&gt;2. 필터를 사용하기 위한 DEFINE_GUID &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;http://tt_attach_path/1086134373.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1223633432.png&quot; width=&quot;583&quot; height=&quot;207&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;GraphEdit 에서는 간단하게 마우스 클릭만으로 컴퓨터에 설치되어 있는 필터들의 목록에서 사용할 필터들을 추가할 수 있었습니다. 그렇다면 Visual Studio 2008에서 위의 필터들을 사용하기 위해서는 어떻게 해야 되는지 설명 드리겠습니다. &lt;br /&gt; &lt;br /&gt;먼저 사용할 필터의 CLSID 부터 정의를 하셔야 됩니다. COM 기술에서 사용하는 DEFINE_GUID() 란 매크로를 사용하여 정의를 할 수 있습니다. &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)\ &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EXTERN_C const GUID FAR name&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;보시면 아시겠지만 name에는 정의할 CLSID 그리고 나머지는 필터의 CLSID 이다. &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;http://tt_attach_path/1266695246.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1377553143.png&quot; width=&quot;604&quot; height=&quot;211&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;위의 소스는 사용할 필터들에 대해서 CLSID 를 정의한 부분입니다. 사실 uuids.h 파일에 필터에 대한 CLSID가 정의되어 있습니다. 하지만 컴퓨터에 설치된 모든 필터에 대해 100% CLSID가 등록되어 있는 것은 아니므로 개발할 때 사용할 필터에 대해 따로 CLSID를 정의하여 사용하는 것이 일반적입니다. &lt;br /&gt; &lt;br /&gt;그렇다면 여기서 또 궁금증이 하나 생깁니다. CLSID 이름이야.. 변수 선언하듯이 작명해서 쓰면 되겠는데… 그 뒤에 0xc123 어쩌구 하는 번지들에 대한 정보는 어디서 얻어와야 될까요? &lt;br /&gt; &lt;br /&gt;해답은 GraphEdit 에 있습니다. 자 예를 들어 CLSID_Kerberos_FileWriter라고 거창하게 지어낸 File Writer 필터에 대한 번지 정보(정확히는 필터 CLSID 라고 합니다.)를 확인해볼까요? &lt;br /&gt; &lt;br /&gt;&amp;#160;&lt;a href=&quot;http://tt_attach_path/1205243014.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1232862176.png&quot; width=&quot;585&quot; height=&quot;552&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;Graph –&amp;gt; Insert Filter 를 선택하신 후 . DirectShow Filters 에서 File writer 필터를 클릭해 봅시다. &lt;br /&gt;그럼 위와 같은 정보가 나오며 녹색박스를 보시면 &lt;font color=&quot;#0080ff&quot;&gt;@device:sw:{083863F1-70DE-11D0-BD40-00A0C… &lt;/font&gt;라는 정보가 보이실 겁니다. &lt;br /&gt; &lt;br /&gt;&amp;#160;&lt;a href=&quot;http://tt_attach_path/1117661846.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1207903816.png&quot; width=&quot;593&quot; height=&quot;171&quot; /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;필터의 CLSID 는 그럼 어디에 있을까요? &lt;br /&gt;@device:sw:&lt;font color=&quot;#0080ff&quot;&gt;{083863F1-70DE-11D0-BD40-00A0C911CE86}&lt;/font&gt;\&lt;font color=&quot;#ff0000&quot;&gt;{8596E5F0-0DA5-11D0-BD21-00A0C911CE86}&lt;/font&gt; &lt;br /&gt;파란색은 클래스 관리자의 CLSID 이며 빨간색으로 표시한 부분이 필터의 CLSID 입니다.&amp;#160; &lt;br /&gt; &lt;br /&gt;다시 한번 코드를 살펴보면…. &lt;br /&gt;&lt;a href=&quot;http://tt_attach_path/1038460581.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1146493463.png&quot; width=&quot;597&quot; height=&quot;68&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;&lt;font color=&quot;#ff0000&quot;&gt;{8596E5F0-0DA5-11D0-BD21-00A0C911CE86}&lt;/font&gt; &lt;br /&gt; &lt;br /&gt;자 이제 이해가 되시나요?&amp;#160; 그럼 이제부터 필터그래프매니저를 생성하고 필터 추가 및 연결 방법에 대해서 설명 드리겠습니다. &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;http://tt_attach_path/1348054613.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1375601272.png&quot; width=&quot;417&quot; height=&quot;214&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;코드의 최적화를 위해 사용한 매크로 함수들 &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;http://tt_attach_path/1117882615.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1000951067.png&quot; width=&quot;606&quot; height=&quot;227&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;필터그래프를 생성하고 AddFilter 인터페이스를 통해 필터를 추가하는 부분입니다. CoCreateInstance 에 대한 설명은 첫 번째 장에서 설명했으니 참고해주시기 바랍니다. ^^ &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;http://tt_attach_path/1080926272.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1265438430.png&quot; width=&quot;609&quot; height=&quot;171&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt; &lt;br /&gt;SetFileName 인터페이스를 이용하여 녹화된 파일을 저장할 경로 및 파일명을 지정해줍니다. &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;http://tt_attach_path/1085987026.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1073473139.png&quot; width=&quot;429&quot; height=&quot;415&quot; /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;자 이로서 윈도우 화면을 녹화함과 동시에 압축필터를 거쳐서 Flash Video 파일로 포멧을 변환하고 파일로 저장하는 Kerberos Capture 프로그램이 완성되었습니다. 이 모든 과정이 한번에 처리됨에도 불구하고 매우 좋은 성능을 보여주어서 상당히 만족스럽습니다.&amp;#160; &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;http://tt_attach_path/1156385372.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://tt_attach_path/1294796915.png&quot; width=&quot;244&quot; height=&quot;142&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;완성된 The Kerberos Capture 프로그램. &lt;br /&gt; &lt;br /&gt;아직 테스트 버전이라 UI 라든가… 기타 등등 보완해야 될 점들이 조금은 남아있네요. &lt;br /&gt;그럼 이상으로 DirectShow를 이용한 화면 녹화 모듈을 마치겠습니다. 긴 글 읽어주셔서 감사합니다. &lt;br /&gt; &lt;br /&gt;[참고서적 : 한빛미디어 DirectShow 멀티미디어 프로그래밍 (신화선 저)] &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 삼성전자 소프트웨어멤버십 18기 백성욱&lt;/p&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Chart Control in WPF Application </title>
            <link>http://www.swssm.org/index.php?idx=325</link>
            <description>&lt;P&gt;안녕하세요. 18-2기 김혜진입니다.&lt;br /&gt;WPF로 프로젝트를 진행하면서 플래시 차트를 쓸 일이 있어서 WPF로 만들 수 있는 다양한 차트에 대해서 조사하게 되었습니다. 제 블로그에는 이미 다 블로깅해놓았습니다. 므흣^^*&lt;br /&gt;&amp;nbsp;&lt;br /&gt;우선 여러 차트들에 대해서 간단하게 소개하고 실제 이용하는 방법과 코드를 첨부하도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;첫번째로 히포차트(&lt;A href=&quot;http://cafe.naver.com/hippochart&quot;&gt;http://cafe.naver.com/hippochart&lt;/A&gt;)는 이 곳에서 다운받을 수 있습니다. 이 곳에서 컨트롤 라이브러리와 코어 모듈을 찾아볼 수 있는데요, 아래와 같은 차트를 그려줍니다. 이미지는 다른 곳에서 퍼왔습니다.^^;;&lt;/P&gt; &lt;P align=center&gt;&lt;A class=con_link href=&quot;http://cfile2.uf.tistory.com/original/204EA51E49D2FD47A7D9FD&quot; target=_blank rel=lightbox&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=popview(this) height=232 src=&quot;http://cfile2.uf.tistory.com/image/204EA51E49D2FD47A7D9FD&quot; width=371&gt;&lt;/A&gt;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;사용 방법은 매우 간단합니다. 아! WPF는 닷넷 3.5 기반이지만 히포차트는 닷넷 2.0 버전으로 만들어졌기 때문에 상위 버전 프레임워크 환경에서도 무리가 없이 잘 돌아간다고 합니다.&lt;br /&gt;&lt;br /&gt;&lt;FONT color=#9b18c1&gt;&lt;FONT color=#000000&gt;&lt;STRONG&gt;HippoChartLibBeta2&lt;br /&gt;HippoWinFormChart2&lt;/STRONG&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;br /&gt;이 두 어셈블리를 추가하고 단 몇 줄로 간단하게 차트를 만들 수 있다. &lt;SPAN style=&quot;FONT-SIZE: 100%; COLOR: #ff0000&quot;&gt;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT color=#000000&gt;두번째는 WPF-powered 3D graphing library라고 Dustin Metzgar씨께서 만들어주셨다. 3차원 막대그래프와 파이그래프를 만들 수 있다. 위와 달리 플래시도 제공하고 툴팁 등 다양한 기능이 들어있다.&lt;br /&gt;&lt;A href=&quot;http://www.codeproject.com/KB/WPF/Wpf3DGraphingLibrary.aspx&quot;&gt;http://www.codeproject.com/KB/WPF/Wpf3DGraphingLibrary.aspx&lt;/A&gt;&lt;br /&gt;이 곳에서 다운이 가능하며 사용방법 또한 잉글리쉬로 자세하게 소개되어있다.&lt;br /&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/P&gt; &lt;P align=center&gt;&lt;A class=con_link href=&quot;http://cfs10.tistory.com/upload_control/download.blog?fhandle=YmxvZzc3NjM2QGZzMTAudGlzdG9yeS5jb206L2F0dGFjaC8wLzcuZ2lm&quot; target=_blank&gt;&lt;IMG style=&quot;CURSOR: pointer; HEIGHT: 356px&quot; onclick=popview(this) height=600 src=&quot;http://cfs12.tistory.com/upload_control/download.blog?fhandle=YmxvZzc3NjM2QGZzMTIudGlzdG9yeS5jb206L2F0dGFjaC8wLzMuZ2lm&quot; width=383&gt;&lt;/A&gt;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT color=#000000&gt;세번째는 오픈 플래시 차트이다. 홈페이지는 &lt;A href=&quot;http://openflashchartlib.codeplex.com/&quot;&gt;http://openflashchartlib.codeplex.com/&lt;/A&gt;&amp;nbsp;&lt;br /&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;자세한 설명과 다양한 소스코드 또한 제공해주니 활용하기 편하다. 아래와 같은 다양한 차트들을 제공해주며 사용이 편해서 많은 사람들이 사용한다.&lt;/FONT&gt;&lt;br /&gt;&lt;/P&gt; &lt;P align=center&gt;&lt;A class=con_link href=&quot;http://cfile3.uf.tistory.com/original/1866A01249CE809F058671&quot; target=_blank rel=lightbox&gt;&lt;IMG style=&quot;WIDTH: 365px; CURSOR: pointer; HEIGHT: 186px&quot; onclick=popview(this) height=250 src=&quot;http://cfile3.uf.tistory.com/image/1866A01249CE809F058671&quot; width=498&gt;&lt;/A&gt;&lt;/P&gt; &lt;P align=center&gt;&lt;A class=con_link href=&quot;http://cfile22.uf.tistory.com/original/11669A1249CE809F09C223&quot; target=_blank rel=lightbox&gt;&lt;IMG style=&quot;WIDTH: 451px; CURSOR: pointer; HEIGHT: 147px&quot; onclick=popview(this) height=188 src=&quot;http://cfile22.uf.tistory.com/image/11669A1249CE809F09C223&quot; width=550&gt;&lt;/A&gt;&lt;/P&gt; &lt;P align=center&gt;&lt;A class=con_link href=&quot;http://cfile5.uf.tistory.com/original/20668F1249CE809F040C5A&quot; target=_blank rel=lightbox&gt;&lt;IMG style=&quot;WIDTH: 360px; CURSOR: pointer; HEIGHT: 245px&quot; onclick=popview(this) height=300 src=&quot;http://cfile5.uf.tistory.com/image/20668F1249CE809F040C5A&quot; width=501&gt;&lt;/A&gt;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT color=#000000&gt;네번째는 이번에 3.5 버전으로 새로 나온 MS chart이다. 다른 사이트를 돌다가 히포차트를 광고하는 카페에서 ms chart와 히포차트를 비교한 글을 보고 두 개의 이미지를 비교 이미지로 바꿨다. 차트 자체는 거의 두개가 비슷하다. 혹시나 둘 중 고민한다면 더 편한 걸로 쓰면 될 것 같다. 절대 고민하지 않아도 될듯.&lt;/FONT&gt;&lt;br /&gt;&lt;/P&gt; &lt;P align=center&gt;&lt;A href=&quot;http://cfile3.uf.tistory.com/original/194EA51E49D2FD47A602B6&quot; target=_blank rel=lightbox&gt;&lt;IMG height=232 alt=&quot;&quot; src=&quot;http://cfile3.uf.tistory.com/image/194EA51E49D2FD47A602B6&quot; width=371&gt;&lt;/A&gt;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT color=#000000&gt;다섯번째는 Visifire라고 실버라이트와 wpf로 만들 수 있는 오픈 소스 데이타 컨트롤을 제공하는 곳이다. 우리가 프로젝트에 쓴 차트는 이 것이다. xml, html, c# 등의 다양한 소스로 구현이 가능하며 플래시 차트라 예쁘다.&lt;br /&gt;&lt;/P&gt; &lt;P align=center&gt;&lt;A href=&quot;http://www.visifire.com/popup.php?url=Column2D7.xml&quot; target=_blank&gt;&lt;IMG onclick=&quot; MM_openBrWindow('popup.php?url=Column2D7.xml&amp;amp;width=600&amp;amp;height=375','chart_7','status=yes,scrollbars=no,resizable=yes,width=600,height=375'); return false&quot; alt=&quot;Silverlight 2D Column Chart&quot; src=&quot;http://www.visifire.com/images/gallery/Column2D/Column2D7.jpg&quot; border=0&gt;&lt;/A&gt;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;Silverlight &amp;amp; WPF Charts &lt;/FONT&gt;&lt;A href=&quot;http://www.visifire.com/&quot;&gt;&lt;FONT color=#000000&gt;http://www.visifire.com/&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;br /&gt;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT color=#000000&gt;간단한 xaml 파일형식부터 보겠다.&lt;br /&gt;WPF 어플을 만들고 xaml에서 &amp;lt;Grid&amp;gt;&amp;lt;/Grid&amp;gt;사이에 아래와 같은 소스를 붙여넣으면 만들어진다. 간단하다. &lt;br /&gt;차트를 만들고 폭과 높이를 지정하고 3차원으로 할지 결정, 그림자속성에는 체크한다. &lt;br /&gt;차트의 타이틀을 만들고 차트 형식을 Column으로 정한다. &lt;br /&gt;데이타값은 DataSeries의 DataPoints의 XValue나 AxisXLabel과 YValue에 값을 넣어서 만들 수 있다.&lt;/P&gt; &lt;DIV style=&quot;BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 10px; FONT-SIZE: 12px; PADDING-BOTTOM: 10px; BORDER-LEFT: gray 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: Courier,Lucida Grande,Geneva,Arial,Verdana,sans-serif&quot;&gt;&lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:Chart&lt;/FONT&gt; &lt;FONT color=red&gt;xmlns:vc&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;clr-namespace:Visifire.Charts;assembly=WPFVisifire.Charts&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;Width&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;300&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;Height&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;300&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;BorderThickness&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;0&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;Theme&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;Theme2&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;View3D&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;False&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;Watermark&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;False&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;Bevel&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;False&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;LightingEnabled&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;False&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;ShadowEnabled&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;True&quot;&lt;/FONT&gt; &lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:Chart.Titles&lt;/FONT&gt;&lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:Title&lt;/FONT&gt; &lt;FONT color=red&gt;Text&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;Global Fortune 5 Companies 2007&quot;&lt;/FONT&gt; &lt;FONT color=black&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;/&lt;FONT color=brown&gt;vc:Chart.Titles&lt;/FONT&gt;&lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:Chart.AxesY&lt;/FONT&gt;&lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:Axis&lt;/FONT&gt;&amp;nbsp;&lt;FONT color=red&gt;AxisType&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;Primary&quot;&lt;/FONT&gt; &lt;FONT color=black&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;/&lt;FONT color=brown&gt;vc:Chart.AxesY&lt;/FONT&gt;&lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:Chart.Series&lt;/FONT&gt;&lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:DataSeries&lt;/FONT&gt; &lt;FONT color=red&gt;RenderAs&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;Column&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;AxisYType&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;Primary&quot;&lt;/FONT&gt; &lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:DataSeries.DataPoints&lt;/FONT&gt;&lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:DataPoint&lt;/FONT&gt; &lt;FONT color=red&gt;AxisXLabel&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;Wall-Mart&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;YValue&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;351139&quot;&lt;/FONT&gt; &lt;FONT color=black&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:DataPoint&lt;/FONT&gt; &lt;FONT color=red&gt;AxisXLabel&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;Exxon Mobil&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;YValue&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;345254&quot;&lt;/FONT&gt; &lt;FONT color=black&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:DataPoint&lt;/FONT&gt; &lt;FONT color=red&gt;AxisXLabel&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;Shell&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;YValue&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;318845&quot;&lt;/FONT&gt; &lt;FONT color=black&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:DataPoint&lt;/FONT&gt; &lt;FONT color=red&gt;AxisXLabel&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;BP&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;YValue&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;274316&quot;&lt;/FONT&gt; &lt;FONT color=black&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=brown&gt;vc:DataPoint&lt;/FONT&gt; &lt;FONT color=red&gt;AxisXLabel&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;General Motors&quot;&lt;/FONT&gt; &lt;FONT color=red&gt;YValue&lt;/FONT&gt;&lt;FONT color=blue&gt;=&quot;207349&quot;&lt;/FONT&gt; &lt;FONT color=black&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;/&lt;FONT color=brown&gt;vc:DataSeries.DataPoints&lt;/FONT&gt;&lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;/&lt;FONT color=brown&gt;vc:DataSeries&lt;/FONT&gt;&lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;/&lt;FONT color=brown&gt;vc:Chart.Series&lt;/FONT&gt;&lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT color=black&gt;&amp;lt;&lt;/FONT&gt;/&lt;FONT color=brown&gt;vc:Chart&lt;/FONT&gt;&lt;FONT color=black&gt;&amp;gt;&lt;/FONT&gt;&lt;/DIV&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;위와 같은 그래프를 만드는 c# 코드이다. 위처럼 데이타를 똑같이 넣는다면 같은 차트가 만들어진다.&lt;/P&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;public void CreateChart()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#009966&gt;// 차트 attributes를 정한다.&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chart = new Chart();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chart.Width = 300;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chart.Height = 300;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chart.Theme = &quot;Theme2&quot;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chart.AnimationEnabled = true;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chart.ColorSet = &quot;VisiAqua&quot;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chart.Watermark = false;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chart.Bevel = false;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chart.ScrollingEnabled = false;&lt;/DIV&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#009966&gt;// 타이틀 인스턴스를 만든다&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Title title = new Title();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; title.Text = &quot;&lt;FONT color=#0000ff&gt;Global Fortune 5 Companies 2007&lt;/FONT&gt;&quot;;&lt;/DIV&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#009966&gt;// 차트에 타이틀을 연결한다.&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#ff3399&gt;chart.Titles.Add(title);&lt;/FONT&gt;&lt;/DIV&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;FONT color=#009966&gt;// DataSeries 인스턴스를 만든다&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DataSeries dataSeries = new DataSeries();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#ff3399&gt;dataSeries.RenderAs = RenderAs.Column&lt;/FONT&gt;; &lt;FONT color=#009966&gt;// 보여질 그래프의 모양을 결정한다. &lt;/FONT&gt;&lt;/DIV&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;FONT color=#009966&gt;// DataPoint 인스턴스를 만든다&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DataPoint dataPoint;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dataPoint = new DataPoint(); &lt;/DIV&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#009966&gt;// DataPoint 의 x와 y 값을 결정한다.&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dataPoint.&lt;FONT color=#000000&gt;AxisXLabel=&quot;Wall-Mart&quot;&lt;br /&gt;&lt;/FONT&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dataPoint.YValue = 351139;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; ....&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#009966&gt;// DataPoint 를 dataSeries에 연결한다.&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#ff3399&gt;dataSeries.DataPoints.Add(dataPoint); &lt;br /&gt;&lt;/FONT&gt;&lt;/DIV&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#009966&gt;// 차트에 dataSeries를 연결한다.&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#ff3399&gt;chart.Series.Add(dataSeries);&lt;/FONT&gt;&lt;/DIV&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #e4e4e4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#009966&gt;// 그리드 이름을 ChartGrid로 붙였다면 아래처럼 차트를 차일드로 붙여준다.&lt;br /&gt;&lt;/FONT&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ChartGrid.Children.Add(chart);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Chart chart; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // Chart 오브젝트&lt;/DIV&gt; &lt;P&gt;&lt;br /&gt;위 차트가 돌아가려면 WPFVisifire.Charts 어셈블리가 참조되어있어야한다. 어셈블리는 위 사이트에서 다운받을 수 있다. xaml파일과 c#코드를 보면 둘 사이의 연관성을 볼 수 있다. 위처럼 계속 차트에 연결시키는 방식을&lt;br /&gt;통해 다양한 모양의 차트를 만들 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P align=center&gt;&lt;IMG height=308 src=&quot;file:///C:/Users/KimHyejin/Desktop/6.jpg&quot; width=305&gt;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;오늘은 여기까지. 감사합니다^^&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>[Advanced Internet TV] Windows Media Service SDK 설명 및 개발환경 구축 </title>
            <link>http://www.swssm.org/index.php?idx=326</link>
            <description>&lt;P class=바탕글&gt;안녕하세요. SWSSM 19-1기 권순관이라고 합니다.&lt;br /&gt;&lt;br /&gt;이번에 Advanced Internet TV 프로젝트에서 사용하게 되는 Windows Media Service SDK에 대하여 간략하게 설명하고 개발환경을 구축하는 법을 설명하고자 합니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;지난 번, 신입회원 세미나에 Windows Media Service와 WME를 이용한 인코딩 시연을 한적이 있었는데, 당시에 WMS SDK 구조에 대해서는 간략하게 설명만 하고 넘어갔었기에, 이렇게 블로그에 WMS SDK 관련 글을 포스팅합니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold&quot;&gt;&lt;br /&gt;[Windows Media Service란?]&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;Windows Media Service는 Microsoft에서 제공하는 스트리밍 미디어 서버로 실시간 영상 송출 및 VOD(Video On Demend)서비스를 가능케해주는 서비스입니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;최신 버전으로는 Windows Server 2008 버전에서 제공되는 Windows Media Service 9.5버전이 존재하나, AITV 프로젝트에서는 Windows Media Service 9 버전을 사용하게 됩니다. 9.5버전에서는 다음과 같은 기능이 추가/변경 되었다고 합니다. (Server Core에 대하 지원과 OOB설치 지원(OOB란 Out of Band의 약자로, Windows에 기본 포함되지 않고 별도 설치를 해야 함을 말함), WMS Cache/Proxy 플러그인, 향상된 상태 모니터링, MMS 프로토콜 지원 중지)&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold&quot;&gt;&lt;br /&gt;[Windows Media Service SDK Architecture]&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;&lt;?xml:namespace prefix = v ns = &quot;urn:schemas-microsoft-com:vml&quot; /&gt;&lt;v:shapetype id=_x0000_t75 stroked=&quot;f&quot; filled=&quot;f&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; o:preferrelative=&quot;t&quot; o:spt=&quot;75&quot; coordsize=&quot;21600,21600&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype=&quot;rect&quot; gradientshapeok=&quot;t&quot; o:extrusionok=&quot;f&quot;&gt;&lt;/v:path&gt;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:lock aspectratio=&quot;t&quot; v:ext=&quot;edit&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=_x83921256 style=&quot;WIDTH: 337.75pt; HEIGHT: 172.2pt; v-text-anchor: top&quot; type=&quot;#_x0000_t75&quot;&gt;&lt;v:imagedata src=&quot;file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Hnc\BinData\EMB00000ef46140.bmp&quot; o:title=&quot;EMB00000ef46140&quot; croptop=&quot;24963f&quot; cropright=&quot;8637f&quot; cropleft=&quot;18057f&quot; cropbottom=&quot;15181f&quot;&gt;&lt;/v:imagedata&gt;&lt;?xml:namespace prefix = w ns = &quot;urn:schemas-microsoft-com:office:word&quot; /&gt;&lt;w:wrap type=&quot;square&quot;&gt;&lt;/w:wrap&gt;&lt;/v:shape&gt;&lt;/P&gt;&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;&lt;v:shapetype id=_x0000_t75 stroked=&quot;f&quot; filled=&quot;f&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; o:preferrelative=&quot;t&quot; o:spt=&quot;75&quot; coordsize=&quot;21600,21600&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype=&quot;rect&quot; gradientshapeok=&quot;t&quot; o:extrusionok=&quot;f&quot;&gt;&lt;/v:path&gt;&lt;o:lock aspectratio=&quot;t&quot; v:ext=&quot;edit&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=_x83615256 style=&quot;WIDTH: 337.75pt; HEIGHT: 172.2pt; v-text-anchor: top&quot; type=&quot;#_x0000_t75&quot;&gt;&lt;v:imagedata src=&quot;file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Hnc\BinData\EMB00000ef46144.bmp&quot; o:title=&quot;EMB00000ef46144&quot; croptop=&quot;24963f&quot; cropright=&quot;8637f&quot; cropleft=&quot;18057f&quot; cropbottom=&quot;15181f&quot;&gt;&lt;/v:imagedata&gt;&lt;w:wrap type=&quot;square&quot;&gt;&lt;/w:wrap&gt;&lt;/v:shape&gt;&lt;/P&gt;&lt;IMG src=&quot;http://estworks.com/swssm/aitv_blog_01.gif&quot;&gt; &lt;P class=바탕글&gt;&lt;br /&gt;&lt;br /&gt;Windows Media Service SDK의 architecture를 나타낸 그림은 위와 같습니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;이 WMS SDK를 이용하면, Windows Media Service를 기반으로 스트리밍과 관련된 다양한 서비스 프로그램을 개발할 수 있습니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;각 Interface에 대한 설명은 다음과 같습니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;1. Publishing Point Interfaces : WMS에서 Publishing Point란 하나의 방송 채널과 같은 의미로 생각하면 됩니다. MS에서는 한글로 번역하기를 ‘게시지점’이라 칭합니다.&lt;/P&gt; &lt;P class=바탕글&gt;Publishing Point Interfaces에서는 WMS에서 지원하는 Broadcast 방송 혹은 VOD 방송을 처리하기 위한 IWMSBroadcastPubishingPoint Interface와 IWMSOnDemandPublishingPoint Interface를 제공합니다. 그 외에도 멀티케스트 처리를 위한 IWMSAnnouncementStreamFormats 등이 존재합니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;2. Playlist Interfaces : Broadcast Publishing Point에서는 여러 가지 스트리밍 소스를 조합하여 재생목록을 작성하는 것이 가능합니다. 이를 제어하기 위한 Interface로 Playlist Interfaces를 제공합니다.&lt;/P&gt; &lt;P class=바탕글&gt;WMS에서 인식가능한 Playlist는 XML DOM(Document Object Model) 기반의 SMIL(Synchronized Multimedia Integration Language)이라는 언어가 사용됩니다. SMIL은 &lt;/P&gt; &lt;P class=바탕글&gt;W3C(World Wide Web Consortium)에서 개발한 언어로, 웹 개발자가 콘텐트를 별도의 스트림(오디오, 비디오, 텍스트 및 이미지)으로 구분하여 클라이언트 컴퓨터로 보낸 다음 단일 스트림으로 표시할 수 있는 XML 기반 언어입니다.&lt;/P&gt; &lt;P class=바탕글&gt;실시간 인코딩 방송만을 서비스 목표로하는 AITV에서는 Playlist Interface는 사용하지 않습니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;3. Client Interfaces : 미디어서버에 접속한 시청 Client를 제어하기 위한 기능을 제공하는 Interfaces입니다. IWMSOutgoingDistributionConnection, IWMSOutgoingDistributionConnections, IWMSPlayer, IWMSPlayers와 같은 Interface를 제공합니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;4. Plug-In Interfaces : WMS의 여러 추가 기능은 Plug-In이라는 형태로 제공됩니다. Plug-In 기능을 통해, WMI나 Multicast 제어 등의 작업을 수행하게 됩니다. 이러한 Plug-In을 개발자가 직접 제작할 수 있는 기반 Interfaces를 제공합니다. IWMSAvailableIPAddresses, IWMSPlugin, IWMSPlugins, IWMSRootDirectories 등의 Interface를 제공합니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;5. Counter Interfaces : WMS에서는 서버의 각종 동작 상태를 수집할 수 있는 Interface들을 제공합니다. PublishingPoint별 현재, 최대, 누적 접속자 수를 확인할 수 있는 IWMSPublishingPointCurrentCounters, IWMSPublishingPointPeakCounters, IWMSPublishingPointTotalCounters 와 서버 전체의 현재, 최대, 누적 접속자 수를 확인할 수 있는 IWMSServerCurrentCounters, IWMSServerPeakCounters, IWMSServerTotalCounters Interface를 제공합니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;6. Limit Interfaces : WMS 및 각 Publishing Point로의 사용자 접속을 다양한 형태로 제한할 수 있는 Interfaces를 제공합니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;그밖에 서버의 상태를 진단할 수 있는 Diagnostic Event Interfaces와 Cahce Interfaces, Name-value Interfaces 등이 존재합니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold&quot;&gt;&lt;br /&gt;[C#에서 Window Media Service SDK 개발을 하기 위한 준비]&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;1. Windows Server 2003 Enterprise/Standard가 설치된 PC를 준비합니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;2. Microsoft Windows Media Service 9 SDK를 다운받습니다.&lt;/P&gt; &lt;P class=바탕글&gt;주소는 다음과 같습니다. (Windows Server 2003 SP1 Platform SDK에 포함)&lt;/P&gt; &lt;P class=바탕글&gt;&lt;U style=&quot;text-underline: #0000ff single&quot;&gt;&lt;SPAN lang=EN-US style=&quot;COLOR: #0000ff&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&amp;amp;displaylang=en&lt;/SPAN&gt;&lt;/U&gt;&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;3. WMS 9 SDK를 설치합니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;4. C# 프로젝트를 생성합니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;5. 프로젝트의 .NET참조 리스트의 microsoft.windowsmediaservices 를 추가합니다.&lt;/P&gt;&lt;IMG src=&quot;http://estworks.com/swssm/aitv_blog_02.gif&quot;&gt; &lt;P class=바탕글&gt;&lt;v:shapetype id=_x0000_t75 stroked=&quot;f&quot; filled=&quot;f&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; o:preferrelative=&quot;t&quot; o:spt=&quot;75&quot; coordsize=&quot;21600,21600&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype=&quot;rect&quot; gradientshapeok=&quot;t&quot; o:extrusionok=&quot;f&quot;&gt;&lt;/v:path&gt;&lt;o:lock aspectratio=&quot;t&quot; v:ext=&quot;edit&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=_x83607416 style=&quot;WIDTH: 307.58pt; HEIGHT: 195.87pt; v-text-anchor: top&quot; type=&quot;#_x0000_t75&quot;&gt;&lt;v:imagedata src=&quot;file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Hnc\BinData\EMB00000ef4613a.bmp&quot; o:title=&quot;EMB00000ef4613a&quot;&gt;&lt;/v:imagedata&gt;&lt;w:wrap type=&quot;topAndBottom&quot;&gt;&lt;/w:wrap&gt;&lt;/v:shape&gt;&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;&lt;br /&gt;6. Windows Media Service의 이벤트를 수집하기 위해선, WMI(Windows Management Instrumentation)을 이용해야 합니다. 이를 위해선, COM 참조 리스트의 Microsoft WMI Scripting V1.2 Library를 추가합니다. &lt;/P&gt;&lt;IMG src=&quot;http://estworks.com/swssm/aitv_blog_03.gif&quot;&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;&lt;v:shapetype id=_x0000_t75 stroked=&quot;f&quot; filled=&quot;f&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; o:preferrelative=&quot;t&quot; o:spt=&quot;75&quot; coordsize=&quot;21600,21600&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype=&quot;rect&quot; gradientshapeok=&quot;t&quot; o:extrusionok=&quot;f&quot;&gt;&lt;/v:path&gt;&lt;o:lock aspectratio=&quot;t&quot; v:ext=&quot;edit&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=_x83612576 style=&quot;WIDTH: 322.42pt; HEIGHT: 205.34pt; v-text-anchor: top&quot; type=&quot;#_x0000_t75&quot;&gt;&lt;v:imagedata src=&quot;file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Hnc\BinData\EMB00000ef4613b.bmp&quot; o:title=&quot;EMB00000ef4613b&quot;&gt;&lt;/v:imagedata&gt;&lt;w:wrap type=&quot;topAndBottom&quot;&gt;&lt;/w:wrap&gt;&lt;/v:shape&gt;&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;&lt;br /&gt;7. 추가적으로, WMS의 Playlist를 제어하기 위해서는 XML DOM Library를 이용해야 합니다. 이를 위해서 .NET 참조 리스트에서 interop_msxml을 추가합니다.&lt;/P&gt;&lt;IMG src=&quot;http://estworks.com/swssm/aitv_blog_04.gif&quot;&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;&lt;v:shapetype id=_x0000_t75 stroked=&quot;f&quot; filled=&quot;f&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; o:preferrelative=&quot;t&quot; o:spt=&quot;75&quot; coordsize=&quot;21600,21600&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype=&quot;rect&quot; gradientshapeok=&quot;t&quot; o:extrusionok=&quot;f&quot;&gt;&lt;/v:path&gt;&lt;o:lock aspectratio=&quot;t&quot; v:ext=&quot;edit&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=_x83617640 style=&quot;WIDTH: 323.66pt; HEIGHT: 206.11pt; v-text-anchor: top&quot; type=&quot;#_x0000_t75&quot;&gt;&lt;v:imagedata src=&quot;file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Hnc\BinData\EMB00000ef46142.bmp&quot; o:title=&quot;EMB00000ef46142&quot;&gt;&lt;/v:imagedata&gt;&lt;w:wrap type=&quot;topAndBottom&quot;&gt;&lt;/w:wrap&gt;&lt;/v:shape&gt;&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;이로써, Windows Media Service SDK를 이용한 개발 환경 구축이 완료되었습니다.&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;※ 참고로 C++에서 WMS SDK를 사용하기 위한 개발 환경 구축 방법 링크를 추가합니다.&lt;/P&gt; &lt;P class=바탕글&gt;&lt;U style=&quot;text-underline: #0000ff single&quot;&gt;&lt;SPAN lang=EN-US style=&quot;COLOR: #0000ff&quot;&gt;http://msdn.microsoft.com/en-us/library/dd874782(VS.85).aspx&lt;/SPAN&gt;&lt;/U&gt;&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;다음 포스팅에서는 실제로 WMS SDK를 이용한 코드 샘플 예제를 설명하도록 하겠습니다.&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>MS Chart Control based on ASP.NET </title>
            <link>http://www.swssm.org/index.php?idx=324</link>
            <description>&lt;LINK href=&quot;file:///C:%5CUsers%5Ccandoism%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml&quot; rel=File-List&gt;&lt;LINK href=&quot;file:///C:%5CUsers%5Ccandoism%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_editdata.mso&quot; rel=Edit-Time-Data&gt; &lt;STYLE&gt; v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} &lt;/STYLE&gt; &lt;LINK href=&quot;file:///C:%5CUsers%5Ccandoism%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx&quot; rel=themeData&gt;&lt;LINK href=&quot;file:///C:%5CUsers%5Ccandoism%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml&quot; rel=colorSchemeMapping&gt; &lt;STYLE&gt; &lt;!-- /* Font Definitions */ @font-face {font-family:&quot;Cambria Math&quot;; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:&quot;맑은 고딕&quot;; panose-1:2 11 5 3 2 0 0 2 0 4; mso-font-charset:129; mso-generic-font-family:modern; mso-font-pitch:variable; mso-font-signature:-1879047505 165117179 18 0 524289 0;} @font-face {font-family:&quot;\@맑은 고딕&quot;; panose-1:2 11 5 3 2 0 0 2 0 4; mso-font-charset:129; mso-generic-font-family:modern; mso-font-pitch:variable; mso-font-signature:-1879047505 165117179 18 0 524289 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:&quot;&quot;; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; text-autospace:none; word-break:break-hangul; font-size:10.0pt; mso-bidi-font-size:11.0pt; font-family:&quot;맑은 고딕&quot;; mso-ascii-font-family:&quot;맑은 고딕&quot;; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:&quot;맑은 고딕&quot;; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:&quot;맑은 고딕&quot;; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:&quot;Times New Roman&quot;; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;} p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph {mso-style-priority:34; mso-style-unhide:no; mso-style-qformat:yes; margin-top:0cm; margin-right:0cm; margin-bottom:0cm; margin-left:40.0pt; margin-bottom:.0001pt; mso-para-margin-top:0cm; mso-para-margin-right:0cm; mso-para-margin-bottom:0cm; mso-para-margin-left:4.0gd; mso-para-margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; text-autospace:none; word-break:break-hangul; font-size:10.0pt; mso-bidi-font-size:11.0pt; font-family:&quot;맑은 고딕&quot;; mso-ascii-font-family:&quot;맑은 고딕&quot;; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:&quot;맑은 고딕&quot;; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:&quot;맑은 고딕&quot;; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:&quot;Times New Roman&quot;; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-ascii-font-family:&quot;맑은 고딕&quot;; mso-ascii-theme-font:minor-latin; mso-bidi-font-family:&quot;Times New Roman&quot;; mso-bidi-theme-font:minor-bidi;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:3.0cm 72.0pt 72.0pt 72.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:664213438; mso-list-type:hybrid; mso-list-template-ids:2144771820 1318764178 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-tab-stop:none; mso-level-number-position:left; margin-left:38.0pt; text-indent:-18.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} --&gt; &lt;/STYLE&gt; &lt;P class=MsoNormal&gt;이번 &lt;SPAN lang=EN-US&gt;GSS System&lt;/SPAN&gt;에서&lt;SPAN lang=EN-US&gt; GUI &lt;/SPAN&gt;부분 &lt;SPAN lang=EN-US&gt;chart&lt;/SPAN&gt;는 &lt;SPAN lang=EN-US&gt;MS-Chart&lt;/SPAN&gt;를 이용해서 구현하였습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;Ms-chart&lt;/SPAN&gt;를 사용하기 위한 기본적인 환경 구축과 활용방법에 대해서 알아보도록 하겠습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;다운 받아서 설치해야 할 파일들은 링크를 걸지 않고 &lt;SPAN lang=EN-US&gt;SWSSM &lt;/SPAN&gt;파일서버에 업로드 하도록 하겠습니다&lt;SPAN lang=EN-US&gt;.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;[MS Chart&lt;/SPAN&gt;의 장점&lt;SPAN lang=EN-US&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;닷넷용 차트 솔루션이다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;다른 차트 솔루션처럼 라이센스를 구매할 필요가 없다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;무료로&lt;SPAN lang=EN-US&gt; ASP.NET 3.5&lt;/SPAN&gt;에서 사용할 수 있으며 풍부한 브라우저 기반 차트 시나리오를 가능하게 한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;[##_1C|1291541438.jpg|width=&quot;600&quot; height=&quot;367&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&amp;nbsp;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;[&lt;/SPAN&gt;환경 구축&lt;SPAN lang=EN-US&gt;] &lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;br /&gt;1. 닷넷 Framework 3.5 install&lt;br /&gt;2. 만약 닷넷 Framework 3.5 설치 실패 시, windows installer 4.5 install 후 다시 시도. &lt;br /&gt;3. Visual studio 9.0 sp1 install&lt;br /&gt;4. Ms Chart Control install&lt;br /&gt;5. Ms Chart_visual_studio_Add_on 파일 설치(Visuala studio 2008의 Toolbox 연동)&lt;br /&gt;6. Ms Chart Document 참고&lt;br /&gt;7. Ms Chart Web&amp;amp;Win Form 예제 참고 &lt;br /&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;위의 순서대로 설치를 한다면 이제 &lt;SPAN lang=EN-US&gt;MS-Chart&lt;/SPAN&gt;를 개발할 수 있는 환경은 모두 구축되었습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;[MS Chart &lt;/SPAN&gt;소개&lt;SPAN lang=EN-US&gt;] &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&amp;lt;asp:chart&amp;gt; &lt;/SPAN&gt;는 파이&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;면적&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;범위&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;점&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;원통&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;누적&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;데이터 분포&lt;SPAN lang=EN-US&gt;, AJAX, &lt;/SPAN&gt;도넛 차트 등 많은 차트 선택 사항을 지원합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;컨트롤 선언부에서 정적으로 차트 데이터를 선언할 수 있고 데이터 바인딩을 사용해서 동적으로 보여지게 할 수도 있습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;실행 시간에 서버 컨트롤은&lt;SPAN lang=EN-US&gt; .png &lt;/SPAN&gt;같은 그림 파일을 만드는데&lt;SPAN lang=EN-US&gt;, &amp;lt;asp:chart&amp;gt;&lt;/SPAN&gt;가 &lt;SPAN lang=EN-US&gt;HTML&lt;/SPAN&gt;에서&lt;SPAN lang=EN-US&gt; &amp;lt;img&amp;gt;&lt;/SPAN&gt;로 출력되어진다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;서버 컨트롤은 차트 그림 파일을 캐시하는 기능을 제공하며 이 그림 파일을 디스크에 저장하여 사용할 수도 있다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;어떠한 다른 서버 소프트웨어의 설치 없이도 모든&lt;SPAN lang=EN-US&gt; ASP.NET &lt;/SPAN&gt;페이지에서 잘 작동합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;또한 손쉽게 풍부한 비쥬얼라이제이션과 데이터 흐름 시나리오를&lt;SPAN lang=EN-US&gt; ASP.NET &lt;/SPAN&gt;응용프로그램에 추가할 수 있게 해줍니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;[MS Chart &lt;/SPAN&gt;활용&lt;SPAN lang=EN-US&gt;] &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;MS Chart&lt;/SPAN&gt;에서 지원하는 차트들의 내용들은 정말 많이 존재합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;우선 여기서는 간단히&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;원형(파이) 차트의 활용에 대해서 알아보도록 하겠습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;ASP.NET&lt;/SPAN&gt;으로 구현 시 웹폼을 추가하면&lt;SPAN lang=EN-US&gt; .aspx &lt;/SPAN&gt;파일과&lt;SPAN lang=EN-US&gt; .aspx.cs &lt;/SPAN&gt;파일 두 개가 생성된다는 것을 알고 계실겁니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;원리는 간단합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;.aspx&lt;/SPAN&gt;는 웹에서 보여질 화면을 디자인 하는 것이며 &lt;SPAN lang=EN-US&gt;.aspx.cs &lt;/SPAN&gt;파일은 차트 내부에서 수치 값이라던지 웹에서 보여지는 부분을 제외한 모든 &lt;SPAN lang=EN-US&gt;Action&lt;/SPAN&gt;들을 처리하면 됩니다&lt;SPAN lang=EN-US&gt;. &lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;br /&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;[##_1C|1054167882.jpg|width=&quot;600&quot; height=&quot;367&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;우선 위와 같이&lt;SPAN lang=EN-US&gt; apsx &lt;/SPAN&gt;파일 디자인 보기를 이용하여 웹폼을 구성합니다&lt;SPAN lang=EN-US&gt;. &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Visual Studio 2008 Toolbox&lt;/SPAN&gt;에 추가된 &lt;SPAN lang=EN-US&gt;Chart Control&lt;/SPAN&gt;을 이용하여 구성하면 간단히 해결됩니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;그 밖의 &lt;SPAN lang=EN-US&gt;Chart &lt;/SPAN&gt;옆 리스트 박스 내용들은 파이 차트가 &lt;SPAN lang=EN-US&gt;3D &lt;/SPAN&gt;형태라던 지&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;그림자 효과라든지&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;여러가지 스타일들을 테스트 할 수 있도록 예제를 구성하였습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;위 구성된 소스들을 살펴보면 다음과 같습니다&lt;SPAN lang=EN-US&gt;. &lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;br /&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;[##_1C|1051899473.png|width=&quot;600&quot; height=&quot;257&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;이번엔 &lt;SPAN lang=EN-US&gt;.aspx.cs&lt;/SPAN&gt;에 데이터가 들어가는 모습을 살펴보겠습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;[##_1C|1128586010.png|width=&quot;600&quot; height=&quot;342&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;위와 같이&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;배열 형태로 데이터가 들어가는 모습을 확인 하실 수 있을 것입니다&lt;SPAN lang=EN-US&gt;. &lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;물론 이런 형태를 응용해서 프로젝트에 적용해야 겠죠. &lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;데이터 들어가는 소스 밑에는 각종 파이 차트의 옵션들을 나타내고 있답니다&lt;SPAN lang=EN-US&gt;.&amp;nbsp; &lt;SPAN&gt;&lt;br /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;br /&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;예전에 차트를 만드려면 각종 dll 파일들과 여러 복잡한 컨트롤을 사용했던 기억이 납니다. &lt;br /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;하지만 MS Chart Control을 이렇게 사용하면 깔끔하고 보기 좋은 차트를 구성할 수 있다는 사실을&amp;nbsp; 기억해주세요!!&amp;nbsp; &lt;br /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>DirectShow를 이용한 화면녹화 모듈 [화면녹화 - &amp;gt; FLV 저장] - 첫 번째 ...</title>
            <link>http://www.swssm.org/index.php?idx=323</link>
            <description>&lt;p&gt;안녕하세요? The Kerberos 팀의 18-2기 백성욱입니다. &lt;br /&gt; &lt;br /&gt;이번에 소개해 드릴 내용은 DirectShow 를 이용한 윈도우 화면 녹화입니다. &lt;br /&gt; &lt;br /&gt;개발환경은 다음과 같습니다. &lt;br /&gt; &lt;br /&gt;OS : Windows Vista&amp;#160;&amp;#160; &lt;br /&gt;Tool : Visual Studio 2008, GraphEdit&amp;#160; &lt;br /&gt;Language : Win32 API , DirectShow &lt;br /&gt; &lt;br /&gt;시작하기 앞서 잠깐 Directshow 에 대한 기본 개념에 대해서 설명 드리겠습니다.&amp;#160; &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image118.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image_thumb68&quot; border=&quot;0&quot; alt=&quot;image_thumb68&quot; src=&quot;http://tt_attach_path/1322063832.png&quot; width=&quot;602&quot; height=&quot;355&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&amp;lt;그림 1. DirectShow 기본 구조&amp;#160; &amp;gt; &lt;br /&gt;뭔가 복잡한 듯 보이지만 가장 중요한 것은 바로 필터입니다. &lt;br /&gt;이러한 필터들은 Microsoft의 COM(Component Object Model) 기술로 제작되며 생성된 객체 역시 독립된 COM 객체로서 취급되어집니다.&amp;#160; &lt;br /&gt; &lt;br /&gt;이러한 필터들은 크게 3가지로 분류됩니다. &lt;br /&gt;1. Source Filter &lt;br /&gt;입력되는 데이터를 의미합니다. 예를 들어 오디오에 음악CD를 삽입했다고 가정했을 때 바로 음악CD가 Source Filter의 역할을 하게 되는 것입니다. 필터에 입력방향은 없으며 오직 출력방향만 존재하는 필터입니다. &lt;br /&gt; &lt;br /&gt;2. Transform Filter &lt;br /&gt;위에서 삽입한 음악CD를 MP3 또는 다른 종류의 오디오 포멧으로 압축하거나 변형하고 싶을 때 이러한 역할을 수행하는 필터가 Transform Filter 입니다. Source Filter로부터 입력을 받아야 하기 때문에 입력방향이 존재하며 Rendering Filter에게 결과물을 넘겨줘야 되기 때문에 출력방향 역시 존재합니다. &lt;br /&gt; &lt;br /&gt;3. Rendering Filter &lt;br /&gt;변형시킨 오디오 포멧을 파일로 쓰거나 화면에 출력해주는 역할을 담당하는 필터입니다. &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;DirectShow가 멀티미디어 프로그래밍에 적합한 이유! &lt;br /&gt;&lt;/strong&gt;멀티미디어 데이터의 경우 크기가 크고 스트림 형태로 처리해줘야 되기 때문에 다른 프로그램보다는 상대적으로 컴퓨터의 자원을 많이 합니다. 멀티미디어데이터를 효율적으로 처리해주기 위해 탄생한 Directshow는 일반적인 데이터 처리과정과는 다르게 설계되었습니다. 그 대표적인 예로 버퍼 공유를 들 수 있습니다.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image26.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image_thumb16&quot; border=&quot;0&quot; alt=&quot;image_thumb16&quot; src=&quot;http://tt_attach_path/1125581255.png&quot; width=&quot;590&quot; height=&quot;168&quot; /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;br /&gt; &lt;br /&gt;&amp;lt;그림 2. 버퍼 공유를 하지 않는 VFW 방식&amp;#160; &amp;gt; &lt;br /&gt; &lt;br /&gt;빨간색 동그라미 : 버퍼 &lt;br /&gt;Source : 소스 필터 &lt;br /&gt;VidRen : 비디오 랜더 필터(화면출력) &lt;br /&gt;InPlace : 변환 필터 (버퍼의 크기 변경 없이 내용만 변경하는 경우) &lt;br /&gt;CopyDec : 변환 필터 ( 버퍼의 크기와 내용 모두를 변경하는 경우 ex 디코딩 ) &lt;br /&gt;&amp;#160; &lt;br /&gt;vfw 같은 방식은 위의 그림과 같이 각자 자신만의 버퍼를 보유하고 있으며 상대방에게 데이터를 전달 할 경우 반드시 복사의 과정을 거쳐야만 한다. DirectShow 와는 달리 데이터를 전달하는 물길이 갖추어져 있지 않기 때문이다.&amp;#160;&amp;#160; &lt;br /&gt; &lt;br /&gt;그렇다면 vfw 방식일 경우 Source A 에서 VidRen 까지 총 몇 번의 복사과정을 거쳐야 될 까? &lt;br /&gt; &lt;br /&gt;1번 : Source A&amp;#160;&amp;#160; –&amp;gt; InPlace B &lt;br /&gt;1번 : InPlace B&amp;#160;&amp;#160; –&amp;gt; CopyDec C &lt;br /&gt;1번 : CopyDec C –&amp;gt; InPlace D &lt;br /&gt;0번 : InPlace D&amp;#160;&amp;#160;&amp;#160; -&amp;gt; InPlace E &lt;br /&gt;1번 : InPlace E&amp;#160;&amp;#160; –&amp;gt; VidRen F &lt;br /&gt; &lt;br /&gt;답은 총 5번이다. 위의 그림에서 주황색으로 표시해 둔 d –&amp;gt; e 의 과정은 버퍼복사가 발생하지 않는다. 그 이유는 InPlace 변환필터는 내용만 변경하는 변환필터로서 같은 InPlace 필터간에는 데이터의 성격이 달라지지 않기 때문에 버퍼를 따로 복사할 필요 없이 이전 버퍼에 있던 내용만 변경해도 상관없다. &lt;br /&gt; &lt;br /&gt;&amp;#160;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image45.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image_thumb29&quot; border=&quot;0&quot; alt=&quot;image_thumb29&quot; src=&quot;http://tt_attach_path/1322186929.png&quot; width=&quot;598&quot; height=&quot;170&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;&amp;lt;그림 4. 버퍼 공유를 하는 DirectShow 방식 &amp;gt; &lt;br /&gt; &lt;br /&gt;물길(스트림)이 갖추어져 있는 DirectShow의 경우 Source A 에서 VidRen F 까지 버퍼의 복사과정 없이 공유를 함으로써 멀티미디어 데이터를 직접 전달할 수 있다. &lt;br /&gt; &lt;br /&gt;VidRen F 필터의 경우 비디오를 랜더링해야 하기 때문에 버퍼가 필요하지만 InPlace E와 InPlace D 필터의 경우 단순히 내용만 변경하기 때문에 VidRen F 필터의 버퍼를&amp;#160; 공유할 수 있다. 하지만 CopyDec C 는 버퍼의 크기 및 내용을 변경하므로 VidRen F 필터의 버퍼를 그대로 공유하여 사용할 수 없기 때문에 별도의 버퍼를 생성한다. 하지만 InPlace B의 경우 CopyDec C 의 버퍼의 내용만 변할 뿐 크기가 변동되는 것은 아니기 때문에 공유할 수 있다. 마지막으로 Source A 의 경우는 CopyDec C 필터의 버퍼를 소스 내용으로 그대로 쓰면 되기 때문에 결과적으로 총 2개의 버퍼를 사용하며 복사도 1번 밖에 발생하지 않는다. &lt;br /&gt; &lt;br /&gt;이런 구조적인 부분만 보더라도 DirectShow가 이전의 다른 방식들 보다 훨씬 더 멀티미디어 데이터 처리에 적합하다는 것을 알 수 있다. &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;DirectShow 를 이용한 어플리케이션 제작&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;1. 환경설정&amp;#160; &lt;br /&gt;DiirectShow 기술을 사용하기 위해 Platform SDK 를 설치하셔야 됩니다. 저는 6.1 버전을 설치하였습니다. &lt;br /&gt;2. GraphEdit 사용법 숙지 &lt;br /&gt;이전 버전에는 Platform SDK 또는 DirectX SDK 를 설치하면 기본적으로 내장되어 있던 Tool 인데 최신 버전에는 포함되어 있지 않습니다. 따라서 직접 구하시거나 K-Lite codec pack 을 설치하시면 GraphEdit 툴을 사용하실 수 있습니다. &lt;br /&gt; &lt;br /&gt;&amp;#160;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image55.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image_thumb35&quot; border=&quot;0&quot; alt=&quot;image_thumb35&quot; src=&quot;http://tt_attach_path/1109003495.png&quot; width=&quot;587&quot; height=&quot;468&quot; /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;br /&gt;&amp;lt;그림 5. GraphEdit 실행화면 &amp;gt; &lt;br /&gt; &lt;br /&gt;가장 첫 번째로 필터를 추가하고 연결하는 방법을 설명 드리겠습니다. &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image59.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image_thumb37&quot; border=&quot;0&quot; alt=&quot;image_thumb37&quot; src=&quot;http://tt_attach_path/1367124697.png&quot; width=&quot;581&quot; height=&quot;410&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt; &lt;br /&gt;Graph –&amp;gt; Insert Filters 를 클릭하시면 현재 자신의 컴퓨터에 설치되어 있는 필터들의 목록이 뜹니다. &lt;br /&gt; &lt;br /&gt;&amp;#160;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image69.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image_thumb43&quot; border=&quot;0&quot; alt=&quot;image_thumb43&quot; src=&quot;http://tt_attach_path/1213691984.png&quot; width=&quot;570&quot; height=&quot;537&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;원하는 필터를 목록에서 선택한 후 “Insert Filter” 버튼을 클릭하면 필터가 추가됩니다. &lt;br /&gt; &lt;br /&gt;그럼 저희 팀에 필요한 윈도우 녹화 + 실시간 압축 + Flash Video 변환 + 파일저장 기능을 수행하는 필터 그래프를 구성해 보겠습니다. &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image83.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image_thumb51&quot; border=&quot;0&quot; alt=&quot;image_thumb51&quot; src=&quot;http://tt_attach_path/1125453034.png&quot; width=&quot;323&quot; height=&quot;457&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&amp;#160; &lt;br /&gt;위의 그림을 보시면 사각형 모양의 필터가 4개 있고 각 필터마다 서로를 연결해 줄 수 있는 Pin을 가지고 있음을 알 수 있습니다. &lt;br /&gt; &lt;br /&gt;오른쪽만 Pin 이 있는 필터를 Source Filter 라고 합니다.&amp;#160; 즉 입력은 받지 못하고 출력만 가능한 필터입니다. &lt;br /&gt;왼쪽, 오른쪽 둘 다 Pin 이 있는 필터는 Transform Filter 입니다. &lt;br /&gt;마지막으로 왼쪽에만 Pin 이 있는 필터가 Rendering Filter 입니다. &lt;br /&gt; &lt;br /&gt;이들의 핀을 연결하는 것은 마우스로 Pin 과 Pin을 드래그 하여 연결시켜주기만 하면 됩니다. &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image87.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image_thumb53&quot; border=&quot;0&quot; alt=&quot;image_thumb53&quot; src=&quot;http://tt_attach_path/1319887224.png&quot; width=&quot;604&quot; height=&quot;84&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt; &lt;br /&gt;생성된 그래프는 필터그래프매니저라고 부르며 동작과정은 다음과 같습니다. &lt;br /&gt;# Capture 필터를 통해 윈도우의 화면을 캡쳐합니다. &lt;br /&gt; &lt;br /&gt;# 정지된 영상을 움직이는 영상으로 변환시켜주기 위해 Transform Filter 인 video encoder 필터로 캡쳐한 데이터를 넘겨줍니다. (곧바로 FLV Mux 필터로 연결해도 상관없지만 용량을 줄이기 위해 encoder 필터로 한번 압축을 시켜줍니다.) &lt;br /&gt; &lt;br /&gt;# 압축된 영상을 FLV Mux 필터로 넘겨줌으로써 플래쉬에서 재생 가능한 FLV 파일로 변환시켜줍니다. (서버 쪽 모니터링 프로그램이 FLEX 이므로 … swfloader에서 바로 재생 가능한 flv로 변환시켜주었습니다.) &lt;br /&gt; &lt;br /&gt;# 마지막으로 FLV로 변환된 영상을 파일에 기록하여 저장하기 위해 file write 필터를 사용하였습니다. &lt;br /&gt; &lt;br /&gt;이렇게 그래프를 구성함으로써 실시간으로 윈도우 화면을 녹화하는 동시에 flv 파일로 저장하는 것이 가능해졌습니다.&amp;#160; 그럼 일단 테스트를 해볼까요? &lt;br /&gt;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image91.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image_thumb55&quot; border=&quot;0&quot; alt=&quot;image_thumb55&quot; src=&quot;http://tt_attach_path/1340440155.png&quot; width=&quot;567&quot; height=&quot;452&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt; &lt;br /&gt;GraphEdit에서 툴바에 있는 재생버튼을 클릭하시면 현재 윈도우의 화면이 실시간으로 flv 포멧으로 변환되면서 kk.flv 라는 FLV 파일에 기록되어집니다. 그리고 멈춤 버튼을 클릭하시면 파일기록이 모두 완료되며 Flash Player 또는 곰 플레이어 등에서 결과물을 바로 확인하실 수 있습니다. &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;&lt;font size=&quot;4&quot;&gt;5분 5초 녹화했을 경우 파일의 크기 비교 &lt;br /&gt; &lt;br /&gt;Dual Monitor&amp;#160; &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;#160;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image114.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image_thumb66&quot; border=&quot;0&quot; alt=&quot;image_thumb66&quot; src=&quot;http://tt_attach_path/1194819161.png&quot; width=&quot;413&quot; height=&quot;456&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;&lt;font size=&quot;4&quot;&gt;Single Monitor &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image107.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image_thumb63&quot; border=&quot;0&quot; alt=&quot;image_thumb63&quot; src=&quot;http://tt_attach_path/1398287289.png&quot; width=&quot;409&quot; height=&quot;454&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;왜 Dual Monitor가 용량이 더 적게 나오는 것일까요? –_-; 아무튼…이상으로 첫 번째 포스팅을 마치겠습니다. &lt;br /&gt; &lt;br /&gt;아 한가지 알아두셔야 할 점! GraphEdit 는 DirectShow에 대한 이해 및 디버깅 툴 정도일 뿐, 이 것만으로 어플리케이션을 구현할 수 없습니다. 어플리케이션 구현은 직접 소스코드를 작성하셔서 구현하셔야 합니다. 다음 장에서는 다음과 같은 내용으로 포스팅 할 예정이며 이번 장에서 구성한 그래프를 어떻게 소스코드로 구현할 것인지에 대해서 설명 드리겠습니다. &lt;br /&gt; &lt;br /&gt;&lt;/p&gt; &lt;p&gt; &lt;br /&gt;DirectShow를 이용한 화면녹화 모듈 [화면녹화 -&amp;gt; flv 저장] - 두 번째 이야기- &lt;br /&gt;3. COM 에 대한 이해 &lt;br /&gt;4. Visual Studio 2008에서 DirectShow를 이용한 어플리케이션 제작 방법 &lt;br /&gt;5. Kerberos Capture 프로그램 &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;file:///C:/Users/yoshiboarder/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles1695D9/image79.png&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align=&quot;right&quot;&gt;&lt;/p&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Music is Life-- MP3 포맷 분석 (19-1기 박자람) </title>
            <link>http://www.swssm.org/index.php?idx=320</link>
            <description>안녕하세요^^ 19기 박자람입니다.&lt;br /&gt;&lt;br /&gt;재밌었던 엠티를 다녀와서~ 이렇게 글을 올립니다^^&lt;br /&gt;&lt;br /&gt;먼저 저희 프로젝트는 모바일에서 돌아가는 벨소리 제작 프로그램입니다.&lt;br /&gt;MP3를 이용해 원하는 구간을 선택해 벨소리를 만드는 것이기 때문에 본격적인 프로젝트 수행전에,&lt;br /&gt;어떻게 보면 저희 프로젝트의 핵심이라고도 볼수 있는 MP3 파일을 분석해야했습니다.&lt;br /&gt;&lt;br /&gt;지금부터 MP3 파일 포맷 구조에 대해서 설명드리겠습니다.&lt;br /&gt;&lt;br /&gt;그럼! &amp;nbsp;먼저 우리가 늘 듣고 있는 MP3! 이놈의 정체는 과연 무엇일까요+_+?&lt;br /&gt;&lt;br /&gt;MP3에 대해 간단한 소개를 먼저 하겠습니다.&lt;br /&gt;&lt;br /&gt;MP3는 MPEG Audio Layer 3의 준말입니다. 여기서 MPEG은 Motion Pictures Expert Group을 뜻하는 말로 동영상과 관련된 표준규격을 협의하는 국제협의의 이름인 동시에! 그들이 만들어낸 표준 규격을 뜻합니다.&lt;br /&gt;MPEG1은 비디오 CD를 제작할 때 사용하는 규격인데 이 MPEG1에서 오디오 압축 기술만 분리한 것이&lt;br /&gt;MPEG Audio Layer 입니다. 이것은 압축률과 데이터 구조에 따라 3가지로 나뉩니다. 레이어 1이 1:4 정도의 압축률을 갖고 레이어 2는 1:6에서 1:8 정도, 레이어 3은 1:10 에서 1: 12의 가장 높은 압축률을 갖습니다. 따라서 가능한한 파일의 용량을 줄이기 위해 레이어 3가 가장 많이 사용되는데 이 파일 포멧이 &lt;FONT color=#ff0000&gt;MP3 &lt;/FONT&gt;입니다^^&lt;br /&gt;&lt;br /&gt;MP3가 뛰어난 압축률을 기록하는 만큼 음질면에선 오디오 CD와 비교한다면 음질이 좀 떨어지지만, 그 차이를 사람의 귀로 구분할 수 없어 CD 음질 처럼 들리는 것입니다^^&lt;br /&gt;&lt;br /&gt;MP3가 CD 수준의 음질을 제공할 수 있는 것은 바로 마스킹(Masking)기법 이란 음원제어기술 덕분입니다. 마스킹 기법이란 다양한 소리가 복합된 음원에서 음질이 떨어지는 미세한 소리를 강한 소리로 상쇄하는 것으로 여기에는 주파수 마스킹과 시간적 마스킹 기법이 있습니다.&lt;br /&gt;&lt;br /&gt;자세한 마스킹 기법은 생략하도록 하고,&lt;br /&gt;&lt;br /&gt;지금부터 본!격!적!으로 &lt;STRONG&gt;&lt;FONT color=#ff3399&gt;mp3 파일 구조에 대한 설명을 시작하겠습니다^^&lt;br /&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;mp3 파일은 여러개의 AAU(Audio Access Unit)들과 1개의 Audio Tag로 이루어져 있습니다.&lt;br /&gt;[##_1C|1191939104.jpg|width=&quot;600&quot; height=&quot;177&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;그리고 그 각각의 AAU 들은 위의 그림과 같은 구조를 가지게 됩니다.&lt;br /&gt;&lt;br /&gt;각각의 AAU의 사이즈는 다음과 같습니다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT color=#ff7635&gt;144* BitRate /&amp;nbsp; 샘플링 주파수 + padding&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt;MP3 는 프레임당 1152비트가 할당되기 때문에 바이트 계산하면 144바이트가 됩니다.&lt;br /&gt;Bitrate와 샘플링 주파수는 헤더정보에서 얻을 수 있습니다.&lt;br /&gt;&lt;br /&gt;예를 들어,&lt;br /&gt;파일 Size가 3985814 바이트 이고, 샘플링 주파수가 44.1khz, Bitrate가 128 kbit인 mp3 파일의 프레임 사이즈는,&lt;br /&gt;&lt;br /&gt;144* 128000 / 441000로 약 417 바이트가 되며 프레임당 약 9558 바이트의 사이즈가 되는 것입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이제 각각의 AAU에 대해 말씀드리겠습니다.&lt;br /&gt;&lt;br /&gt;1. Header&lt;br /&gt;&lt;br /&gt;mp3 파일에는 각각의 AAU마다 헤더가 따로 존재합니다. 그러므로 각 AAU들은 독립적으로 decode 될 수 있습니다. 그러나 대부분의 mp3에서 모든 헤더들은 동일하므로, 전체를 디코딩 할 때는 첫번 째 AAU 헤더만을 읽습니다.&lt;br /&gt;&lt;br /&gt;Header는 32비트의 길이를 갖고 13개의 항목으로 구성되어 있습니다.&lt;br /&gt;&lt;br /&gt;2. CRC&lt;br /&gt;CRC Check는 프레임의 오류를 검사하기 위한 정보를 가집니다.&lt;br /&gt;&lt;br /&gt;3. Side Info&lt;br /&gt;mp3에서 주요하게 사용되는 압축 알고리즘에는 Scalefactor, Huffman 부호화, 양자화 등이 있습니다. &lt;br /&gt;Side info에는 실제 각 프레임의 메인데이터를 decoding하는 데 필요한 정보들을 담고 있습니다.&lt;br /&gt;side info의 크기는 채널에 따라 그 크기가 달라지는데, Mono일 경우 136bits, stereo일 경우 256bit 입니다.&lt;br /&gt;&lt;br /&gt;4. Main data&lt;br /&gt;메인 데이터는 실질적인 오디오 데이터가 실려있는 영역을 말합니다. mp3의 메인데이터는 한 프레임이 1152개의 Sample 데이터를 갖습니다. &lt;br /&gt;granule은 메인데이터가 처리되는 기본단위입니다. MP3 부호화 방법중 주파수 등분할 방식인 32서브밴드 방법이 잇습니다. 각 서브밴드는 18개의 sample 데이터를 갖기 때문에 32* 18 = 576이라는 크기값이 나오며 이것을 한개의 granule 단위로 처리하게 됩니다.&lt;br /&gt;&lt;br /&gt;mp3는 2개의 granule로 구성되어 1152개의 Sample 데이터를 갖게 됩니다. 각&amp;nbsp; granule 안에서는 채널별로 decoding 됩니다.&lt;br /&gt;&lt;br /&gt;5. Audio tag&lt;br /&gt;&lt;br /&gt;오디오 태그는 AAU의 집합 끝 부분 즉 MP3 파일의 마지막 부분 128 바이트를 말합니다. Artist정보, 곡의 제목, 앨범 Title, 출판년도 등의 mp3 전체의 부가정보를 담고 있습니다.&lt;br /&gt;장르에 대한 인덱스는 생략합니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;여기까지가 mp3 파일 구조에 대한 설명입니다.&lt;br /&gt;&lt;br /&gt;이렇게 mp3 파일구조를 이용해 프로젝트에 적용해 보면,&lt;br /&gt;&lt;br /&gt;먼저 mp3 파일을 선택한 후 사용자가 원하는 구간을 선택을 하면,&lt;br /&gt;그 mp3의 헤더와 side info를 읽어 &amp;nbsp;어떻게 디코딩할 지 정보를 뽑아냅니다.&lt;br /&gt;이러한 정보를 이용해 디코딩을 하면 mp3-&amp;gt; pcm 데이터가 되는 것입니다.&lt;br /&gt;&lt;br /&gt;이상 여기까지가 mp3 파일 디코딩까지 진행된 내용입니다^^&lt;br /&gt;&lt;br /&gt;다음 블로깅에선 실제 구현 내용과ㅡ encoding에 대해서 설명드리겠습니다.&lt;br /&gt;&lt;br /&gt;::: 참고자료 :::&lt;br /&gt; &lt;LI&gt;&lt;A class=con_link href=&quot;http://drogo.cselt.it/mpeg&quot; target=_blank&gt;&lt;U&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;http://drogo.cselt.it/mpeg&lt;/SPAN&gt;&lt;/U&gt;&lt;/A&gt; &lt;LI&gt;&lt;A class=con_link href=&quot;http://www.iis.fhg.de/&quot; target=_blank&gt;&lt;U&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;http://www.iis.fhg.de/&lt;/SPAN&gt;&lt;/U&gt;&lt;/A&gt; &lt;LI&gt;&lt;A class=con_link href=&quot;http://www.mp3-tech.org/&quot; target=_blank&gt;&lt;U&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;http://www.mp3-tech.org/&lt;/SPAN&gt;&lt;/U&gt;&lt;/A&gt; &lt;br /&gt;&lt;/LI&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>지능형 모형차의 심장을 만들어 보자(FET와 FAST RECOVERY DIODE를 사용한 MOTOR ...</title>
            <link>http://www.swssm.org/index.php?idx=322</link>
            <description>안녕하세요. 18기 김학수 입니다.&lt;br /&gt;&lt;br /&gt;이번 글에서는 지능형 모형차의 심장이라 할 수 있는 모터 드라이버를 만들어 보겠습니다.&lt;br /&gt;보통 DC Motor의 구동을 위해서 많이 사용하는 회로는 H-Bridge 회로 입니다.&lt;br /&gt;정, 역 회전을 모두 가능하게 하는 간단하면서도 중요한 회로입니다.&lt;br /&gt;H 브리지는 아래의 그림과 같이 4개의 트랜지스터를 이용해서 스위칭을 통해 전류의 흐름을 만들어 내고 그 흐름으로 모터의 회전 방향을 정할 수 있게 합니다.&lt;br /&gt;&amp;nbsp; [##_1C|1391234452.jpg|width=&quot;224&quot; height=&quot;216&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&amp;nbsp;예를 들어 Q1과 Q4 TR을 On, Q2, Q3 TR을 OFF로 신호를 입력할 경우, 모터는 파란색 화살표의 방향으로 흐르는 전류의 영향을 받아 정회전을 합니다. 반대로 역회전의 경우는 Q2, Q3 TR이 ON되어 빨간색 화살표의 방향으로 전류가 흐르며 모터가 회전을 합니다.&lt;br /&gt;&lt;br /&gt;위와 같은 기본적인 모터 제어를 위한 H-Bridge회로를 가지고 지능형 자동차에 사용할 540급 DC Motor를 제어해 보도록 하겠습니다.&lt;br /&gt;540급 DC Motor는 Maximum Current 13A, Peak Voltage 24V, Operating Voltage 7.2V, Stall(구속/정지) Current 70A의 동작 특성을 갖습니다.(하지만 Ni-MH 전지의 특성상 70A 출력은 나오지 않는다.) 따라서 대용량의 전류를 허용하는 TR이 필요합니다.&lt;br /&gt;&lt;br /&gt;일단 적당한 전류를 통과시킬 수 있는 TR을 선택하겠습니다.&lt;br /&gt;어디서 배운건 있어서 P-MOS는 GOOD '1', N-MOS는 GOOD '0'을 출력한다는걸 알고 있으니 P-MOSFET과 N-MOSFET을 조합해서 H-Bridge를 설계합니다.( 굳이 FET를 P형을 선택할 필요는 없습니다. 오히려 N형 FET 네개로 H-Bridge를 만드는게 제어도 쉽고 설계도 간단합니다. Gate 입력에서 헷갈릴 일이 없으니까요. 출력도 좋습니다.)&lt;br /&gt;사용한 FET는 POWER FET중에 IR사의 IRF-540N(N형)과 IRF-4905(P형)을 사용했습니다. 가격이 개당 1000원정도 하는데다 성능도 어느정도 나오기 때문에 가난한 학생으로써는 거부할 수 없는 괜찮은 선택이죠.(물론 이 선택으로나중에 피눈물을 흘리게 됩니다.)&lt;br /&gt;&lt;IMG style=&quot;MARGIN-TOP: 0px; WIDTH: 554px; HEIGHT: 488px&quot; alt=&quot;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot; src=&quot;../../attach/1/1035493052.jpg?randseed=0.19271567360775888&quot;&gt;&lt;br /&gt;&lt;br /&gt;자~ 간단하게 회로를 구성해 보았습니다. 하지만 겁이 많은 저로써는 쉽게 모터에 연결할 수 없습니다. 얘가 신호를 잘못 줘서 언제 터질지 모르기 때문입니다. ECU에서 직접 스위칭 신호 나가면 왠지 보드 그냥 죽어버릴것 같습니다. 그래서 2N2222A (N형) BJT를 FET의 Gate에 달아주겠습니다. 최소한 죽어도 BJT나 FET만 죽겠죠.&lt;br /&gt;&lt;br /&gt;&lt;IMG style=&quot;MARGIN-TOP: 3px; WIDTH: 594px; HEIGHT: 410px&quot; alt=&quot;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot; src=&quot;../../attach/1/1381913684.jpg?randseed=0.4381774308915535&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;그런데도 여전히 걱정이 많습니다. PID제어 한다고 정/역 회전 막 하면 FET 터져나갈것 같습니다. 역기전력이라는 무시무시한 Energy가 Motor에서 방출되기 때문이죠. (네, 저 겁 많습니다.) 역기전력을 막기 위해서 왠지 무엇인가를 달아줘야 맘이 편해지겠습니다. 그래서 Fast Recovery Diode를 달아줘서 역기전력을 막아보겠습니다.&lt;br /&gt;최대 10배 이상의 전류가 거꾸로 흐른답니다. 제대로 흐르면 그냥 막 다 터지는거죠. 전 이꼴 못보겠습니다. 대회 준비한다고 1달째 잠도 제대로 못잤습니다. 터지면 억울하죠.&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;IMG style=&quot;MARGIN-TOP: 2px; WIDTH: 602px; HEIGHT: 426px&quot; alt=&quot;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot; src=&quot;../../attach/1/1022994368.jpg?randseed=0.4255716536277978&quot;&gt;&lt;br /&gt;&lt;br /&gt;구로에 가서 발품을 팔아 구한 FR DIODE(SR3040PT)입니다. 30A/40V-&amp;gt;Peak 300A를 견디는 옹골찬 녀석입니다. 이거 좋습니다. TR처럼 생겼습니다. DUAL DIODE라는 건데, 2개의 DIODE가 병렬로 연결되었습니다. 덕분에 4개 필요할 FR DIODE가 3개로 줄었습니다. 환율 때문에 요즘에 구하려면 개당 2500원은 줘야 하거든요.(전 옛날에 들어온 샘플을 개당 1000원에 샀습니다 +_+)&lt;br /&gt;&lt;br /&gt;이제 모든 부품을 연결했습니다. 이젠 어떤 전류가 흘러도 두렵지 않습니다.(전압만 제대로 걸어준다면 말이죠 ㅋㅋㅋ) 전류가 많이 흐르면 열이 많이 발생하니 서멀 구리스를 바른 방열판을 부착하고 냉각팬도 달아줬습니다. 이젠 어지간해선 죽지 않습니다. &lt;br /&gt;&lt;br /&gt;근데 죽었습니다...(억지도 모터를 정지시키지 마세요. 죽습니다... IRF-540N 2번 죽었습니다. )&lt;br /&gt;정지시키고 싶으시면 반드시 P-FET 끄고 N-FET도 끄세요. 안그러면 터집니다. 속도 터지구요.&lt;br /&gt;&lt;br /&gt;마지막!&lt;br /&gt;1. LOGIC GATE로 한개의 PWM과 DIR 신호만으로 제어할 수 있는 회로는 다음 기회에 올리도록 하겠습니다. 솔직히 그거 만드는게 더 귀찮아요. 제어야 쉽겠지만 말이죠.&lt;br /&gt;&lt;br /&gt;2. 제어의 순서입니다.&lt;br /&gt;2N2222A는 N형 BJT입니다. 따라서 BASE 신호를 1을 줄 경우, Ice가 흐르고, 0을 줄 경우 흐르지 않습니다. &lt;br /&gt;그런데 P형은 Gate입력이 1이면 꺼지고, 0이면 켜지므로 2N2222A의 Base에 0을 입력해야 Gate 입력이 1이 되어 꺼지고, Base에 1을 입력해야 Gate입력이 0이 되어 켜지게 됩니다. N형은 그 반대로 동작합니다.&lt;br /&gt;&lt;br /&gt;3. TR의 스위칭 신호의 역할 부여입니다. &lt;br /&gt;P형을 DIR 신호로, N형을 PWM 신호로 사용하는게 유리합니다. 왜냐하면 VCC에 연결되어 있는 P형에 Pulse를 입력할 경우 쇼트가 날 수 있기 때문이죠. 쇼트나지 않게 만드는게 중요합니다.&lt;br /&gt;&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>VDC (Vehicle Dynamic System)기술 18기 박진영 </title>
            <link>http://www.swssm.org/index.php?idx=321</link>
            <description>&lt;P&gt;안녕하세요 . 18기 박진영 입니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;이번 글에서는 현재 ABS(Auto Breaking System) 와 함께 자동차에서 많이 쓰이는 기술&lt;/P&gt; &lt;P&gt;VDC(Vehicle Dynamic Control)에 대해서 알아보겠습니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;여기서 언급되는 VDC의 기술은 제가 출전하는 자동차 대회에서 사용할 기술로,&lt;/P&gt; &lt;P&gt;실제적으로 100% VDC를 구현하지는 않더라도, 일부의 구현으로&lt;/P&gt; &lt;P&gt;보다 안정적인 자세 제어를 하도록 사용하고 있습니다.&lt;/P&gt; &lt;P&gt;그리고 실제 고급 차종에서는 옵션으로 장착할 수 있는 기술중에 하나입니다.&lt;/P&gt; &lt;P&gt;또한 미국내에서는 대부분의 차체에서 옵션으로 선택할 수 있는 안전옵션 중에 하나입니다.&lt;/P&gt; &lt;P&gt;아직 확정은 되지 않았지만 , 미국에서는 의무 장착화 하려고 합니다.&lt;/P&gt; &lt;P&gt;또한 유럽 일부국가에서는 의무 장착이 이미 시행되고 있습니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;현재 ABS는 대부분의 자동차에서 지원하는 기능입니다.&lt;/P&gt; &lt;P&gt;예전에는 고급 승용차에만 적용되는 기술이 &lt;/P&gt; &lt;P&gt;최근에는 제작 단가의 낮아짐과,&lt;/P&gt; &lt;P&gt;보다 좋은 안정성을 갖고 있는 차를 타고 싶어하는 소비자의 욕구가 맞아 떨어져서&lt;/P&gt; &lt;P&gt;이제는 소형 자동차 또는 심지어 오토바이나 버스에서도 마주칠 수 있는 기술이 되었습니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;자동차를 연구하고 개발하는 연구원들은 더욱 더 안정적이고 멋진 주행시스템을 만들기위해서&lt;/P&gt; &lt;P&gt;ABS라는 멋진 기술을 만들고도 그 너머 더 좋은 기술을 위해서 쉬지 않고 노력했습니다.&lt;/P&gt; &lt;P&gt;그리고 그 결과 VDC라는 기술이 탄생하게 되었습니다. &lt;/P&gt; &lt;P&gt;실제로 이 기술이 탄생한지는 꽤나 많은 시간이 지났지만, 실제 상용차에 적용된지는 그리 오래 되지 않았습니다. 국내에서도 고급차종에 한해 적용할 수 있는 기술이었습니다.&lt;/P&gt; &lt;P&gt;최근에는 중형차에도 적용할 수 있는 옵션으로 알고 있습니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;자동차 기술의 최선봉에 있는 기업은 BOSCH 입니다.&lt;/P&gt; &lt;P&gt;보쉬라는 기업은 세계 자동차 부품 시장에서 가장 큰 대기업으로 ,&lt;/P&gt; &lt;P&gt;현재 사용되는 자동차 기술의 대부분의 특허권을 보유하고 있습니다.&lt;/P&gt; &lt;P&gt;VDC라는 기술 또한 보쉬의 멋진 걸작품 중에 하나입니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;쉽게 VDC라는 기술을 설명 드리지면,&lt;/P&gt; &lt;P&gt;리프트위에 자동차를 올려놓고 엑셀을 밟게 되면 미친듯이 RPM이 올라가게 됩니다.&lt;/P&gt; &lt;P&gt;이 이야기는 자동차에 실제로 힘이 실리는 것이 아니라, 단순히 회전운동의 속도만 증가하는 것이므로&lt;/P&gt; &lt;P&gt;RPM이 올라갈 수 밖에 없습니다. 하지만 이 때 VDC의 기술이 적용된 차라면 상황이 달라집니다.&lt;/P&gt; &lt;P&gt;VDC가 장착된 차의 경우에는 자동차에서 이 상황이 어떤상황인지를 측정하고 제어하기 때문입니다.&lt;/P&gt; &lt;P&gt;따라서 공허하게 RPM만 올라가는 동작을 제어하여 구동이 걸리는 바퀴의 속도를 줄이게 됩니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;이 상황이 실제 도로에서는 어떤 식으로 적용이 될까요?&lt;/P&gt; &lt;P&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=popview(this) height=410 src=&quot;http://blogfiles1.naver.net/data42/2009/6/30/16/vdc-beatman1942_ironyart.jpg&quot; width=499&gt;&lt;/P&gt; &lt;br /&gt; &lt;P&gt;그림을 살펴보시기 바랍니다.&lt;/P&gt; &lt;P&gt;좌측 상황의 경우나, 우측 상황의 경우, 둘 다 한 바퀴가 자동차의 제어 상황에서 벗어나서&lt;/P&gt; &lt;P&gt;오버/언더 스티어 현상이 벌어졌습니다. 이 때 그 상황에 대해서 대처를 올바르게 하지 못한다면&lt;/P&gt; &lt;P&gt;운전자가 원하는 방향으로 운전을 할 수 없을 것입니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;이 때 VDC 기술을 사용하면 오버, 언더스티어 현상에 맞게 나머지 바퀴를 제어하여&lt;/P&gt; &lt;P&gt;현재 진행하고 있는 방향으로 안정적으로 움직일 수 있도록 도와주게 됩니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;&lt;A class=con_link href=&quot;http://tvpot.daum.net/clip/ClipViewByVid.do?vid=DHZj-Ldw5KY$&quot; target=_blank&gt;http://tvpot.daum.net/clip/ClipViewByVid.do?vid=DHZj-Ldw5KY$&lt;/A&gt;&lt;/P&gt; &lt;br /&gt; &lt;P&gt;위 링크의 동영상을 보시기 바랍니다.&lt;/P&gt; &lt;P&gt;이 상황이 발생했을 때 VDC의 기능이 있었더라면 이렇게까지 위험한 상황은 모면할 수 있었을 것입니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;자 그럼 이제 VDC의 깊은 기술의 내막으로 안내해 드리겠습니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;VDC의 핵심 부분은 4가지로 볼 수 있습니다.&lt;/P&gt; &lt;P&gt;운전자가 핸들을 꺽는 것을 기억하는 조향각 센서&lt;/P&gt; &lt;P&gt;실제 바퀴가 움직이는 것을 측정하는 휠 스피트 센서&lt;/P&gt; &lt;P&gt;그리고 실제로 어느 방향으로 가고 있는지 측정하는 회전률 감지센서&lt;/P&gt; &lt;P&gt;마지막으로 이것들을 제어하는 ECU가 있습니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;ECU 앞의 3가지 센서의 입력된 값을 잘 조합하여,&lt;/P&gt; &lt;P&gt;현재 상태를 계속해서 기억하고 있습니다.&lt;/P&gt; &lt;P&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=popview(this) height=377 src=&quot;http://blogfiles8.naver.net/data43/2009/6/30/55/2009-06-29_21%3B54%3B53_ironyart.jpg&quot; width=502&gt;&lt;/P&gt; &lt;br /&gt; &lt;P&gt;위 상황은 운전자가 앞의 장애물을 인식하고, &lt;/P&gt; &lt;P&gt;그것을 피하려고 좌측으로 핸들을 꺽은 상황입니다. &lt;/P&gt; &lt;P&gt;하지만 현재 언더스티어 상황(실제 꺾여야 할 방향보다 덜 꺽인 상태)이 벌어져서&lt;/P&gt; &lt;P&gt;이 상태로 가다간 장애물을 부딪히고 말 것입니다.&lt;/P&gt; &lt;P&gt;이 상황에서 VDC는 운전자가 꺽은 방향과 현재의 회전률을 계산해서 실제로 얼마나 회전이 부족한지를 계산하게 됩니다. 또한 어떤 바퀴에서 언더스티어 현상이 일어났는지를 계산을 하고,&lt;/P&gt; &lt;P&gt;나머지 바퀴를 이용해서 (브레이크 또는 조향변경) 운전자가 원하는 방향으로&lt;/P&gt; &lt;P&gt;방향제어를 할 수 있도록 도와주게 되는 것입니다.&lt;/P&gt; &lt;P&gt;이 때 핵심 기술은 각 바퀴의 상태를 피드백하여 원하는 방향으로 움직일 수 있도록&lt;/P&gt; &lt;P&gt;바퀴를 제어하는 것입니다. 이 때에는 좌우 앞뒤 바퀴가 따로따로 놀아야 스티어링이 발생한 바퀴를 보완해 줄 수 있기 때문에, 각 각의 바퀴를 독립적으로 제어하게 됩니다.&lt;/P&gt; &lt;P&gt;결국 자신이 원하는 방향으로 안정적으로 주행을 할 수 있게 되는 것입니다.&lt;/P&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;P&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=popview(this) height=342 src=&quot;http://blogfiles6.naver.net/data44/2009/6/30/101/%C4%DA%B3%CA%B8%B5_ironyart.jpg&quot; width=550&gt;&lt;/P&gt; &lt;br /&gt; &lt;br /&gt; &lt;P&gt;위 그림은 보쉬자동차부품UK 사이트에서 갖고온 사진입니다. &lt;/P&gt; &lt;P&gt;연구발표자료로 사용된 것으로 , &lt;/P&gt; &lt;P&gt;테스트 도로에서 벤츠를 이용하여 95Km/h 상태에서 측정한 결과 입니다.&lt;/P&gt; &lt;br /&gt; &lt;br /&gt; &lt;P&gt;최근 많은 분들이 VDC의 제어 덕분에 위험한 상황에서 잘 대처할 수 있었다고 합니다.&lt;/P&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;P&gt;저희 팀은 이 기술을 이용해서 열악한 환경을 갖고있는 대회장에서,(익히 소문이 자자합니다.)&lt;/P&gt; &lt;P&gt;오버/언더 스티어링을 방지하고, 보다 나은 결과를 보여드리려고 VDC의 기술을 적용하기 위해&lt;/P&gt; &lt;P&gt;꾸준히 노력하고 있습니다. 아직은 테스트 단계로, 저희 자동차를 보여드릴 수는 없지만,&lt;/P&gt; &lt;P&gt;대회 당일 멋진 결과를 찍어서 다시 블로그에 업데이트 하도록 하겠습니다.&lt;/P&gt; &lt;br /&gt; &lt;P&gt;읽어주셔서 감사합니다.&lt;/P&gt; &lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>PID 계수 구하기 </title>
            <link>http://www.swssm.org/index.php?idx=319</link>
            <description>&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: 16px Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 10px; FONT-FAMILY: -webkit-monospace&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot; size=2&gt;U.A.V 기체의 자세제어를 위한 IMU 장치는 개발이 완료 되었다. &lt;br /&gt;하지만.... 기체의 자세 를 유지하는 작업이 만만치 않다. &lt;br /&gt;일단 기체의 균형이 완벽하지 않다. &lt;br /&gt;중국산 블레이드는 똑같은 모터의 출력에서 양력이 제각각이다 ㅡㅡ;;(제일 큰 문제)&lt;br /&gt;&amp;nbsp;하루 빨리 정품 블레이드로 바꿔야되는데... &lt;br /&gt;일단 모터마다 출력의 가중치를 두고 PID 제어기를 이용하여 균형을 잡는 실험을 해 보았다. &lt;br /&gt;&lt;br /&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: 16px Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 10px; FONT-FAMILY: -webkit-monospace&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot; size=2&gt;&lt;object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' id='NFPlayer59694' width=&quot;500&quot; height=&quot;408&quot;&gt;&lt;param name='movie' value='http://serviceapi.nmv.naver.com/flash/NFPlayer.swf?vid=0C6BEC1308C29EA3C4ACDA2DC85E428045BE&amp;amp;outKey=V1275c7bbd02dd597db90e2fc9a7451634606bcd6c087272053aee2fc9a7451634606' /&gt;&lt;param name='wmode' value='transparent' /&gt;&lt;param name='allowScriptAccess' value='always' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;embed src='http://serviceapi.nmv.naver.com/flash/NFPlayer.swf?vid=0C6BEC1308C29EA3C4ACDA2DC85E428045BE&amp;amp;outKey=V1275c7bbd02dd597db90e2fc9a7451634606bcd6c087272053aee2fc9a7451634606' wmode='transparent' width=&quot;500&quot; height=&quot;408&quot; allowScriptAccess='always' name='NFPlayer59694' id='NFPlayer59694' allowFullScreen='true' type='application/x-shockwave-flash' /&gt;&lt;/object&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;br /&gt; &lt;DIV&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&amp;lt;PID 계수가 적절하지 않은 경우&amp;gt;&lt;/DIV&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: 16px Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 10px; FONT-FAMILY: -webkit-monospace&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot; size=2&gt;&lt;object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' id='NFPlayer10088' width=&quot;500&quot; height=&quot;408&quot;&gt;&lt;param name='movie' value='http://serviceapi.nmv.naver.com/flash/NFPlayer.swf?vid=4D4034BD2722E8F68F90920412E003F1F0E2&amp;amp;outKey=V1238809de526a07240414a84307f91d291ac437b9a77582bc4d04a84307f91d291ac' /&gt;&lt;param name='wmode' value='transparent' /&gt;&lt;param name='allowScriptAccess' value='always' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;embed src='http://serviceapi.nmv.naver.com/flash/NFPlayer.swf?vid=4D4034BD2722E8F68F90920412E003F1F0E2&amp;amp;outKey=V1238809de526a07240414a84307f91d291ac437b9a77582bc4d04a84307f91d291ac' wmode='transparent' width=&quot;500&quot; height=&quot;408&quot; allowScriptAccess='always' name='NFPlayer10088' id='NFPlayer10088' allowFullScreen='true' type='application/x-shockwave-flash' /&gt;&lt;/object&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&amp;lt;어느정도 안정된 PID 계수를 적용한 경우&amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: left&quot;&gt;처음에는 막무가내로 움직이던 기체가, 계수를 설정해주니 어느정도 자세를 유지하는 비행하는 하고 있는 동영상 이다.&lt;br /&gt;&lt;br /&gt;블레이드의 양력 차이를 가중치를 두어서 하고 있지만, 출력이 약한 모터만 뜨끈뜨끈하게 계속 돌고 있다. 하루빨리 블레이드를 구해야 하겠다...&lt;/DIV&gt;&lt;/DIV&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>마우스 포인터는 어떻게 캡처할까??? </title>
            <link>http://www.swssm.org/index.php?idx=285</link>
            <description>&lt;P&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;[##_1C|1198908948.jpg|width=&quot;494&quot; height=&quot;341&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt;&lt;br /&gt;이 코드만 생성해 놓은 비트맵에 추가 해주신다면 마우스 포인터까지 녹화가 가능합니다. 간단하죠?&lt;br /&gt;&lt;br /&gt;그럼 간단히 소스를 설명하자면....CURSORINFO를 GetCursorInfo() 를 통해 받아와서 커서가 존재하면 커서 좌표를 계산해서&amp;nbsp; DC에 커서를 그려 넣으면 되겠습니다.&lt;br /&gt;&lt;br /&gt;여기서 중요한거 딱 두가지~!&lt;br /&gt;&lt;br /&gt;첫 번째! CURSORINFO 의 cbSize를 CURSORINFO의 size로 설정해야한다는 것! 이 코드만 없어도 제대로 동작 하지 않더군요 ^^;&lt;br /&gt;&lt;br /&gt;두 번째! 커서도 아이콘 이라는 것~! CopyIcon(), DrawIcon()을 사용 한다는 것 잊지 마세요~~!&lt;br /&gt;&lt;br /&gt;정말정말 간단하죠? 너무 짧게 블로깅을 하는 것 같아서.........손이 부끄럽지만... 아마도 스크린 녹화 모듈 개발 작업에서 빼놓을 수 없는 아주 중요한 코드라 생각되어 공개 합니다...! 유용하게 쓰세요~~ㅇ&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Remote Desktop Protocol for Win32 </title>
            <link>http://www.swssm.org/index.php?idx=286</link>
            <description>&lt;P&gt;App-Hand(Application In My Hands)&lt;br /&gt;&lt;br /&gt;App-Hand Project에서 가장 중요한 부분중에 하나인, Remote Desktop Protocol에 대한 이야기 입니다.&lt;br /&gt;&lt;br /&gt;먼저, 사용자는 자신의 컴퓨터에 별도의 애플리케이션을 설치하고 않고서, 서버(Windows Server 2003)에 애플리케이션을 설치해둔 뒤, 사용자는 서버에게 서비스를 받는데 이를 위해 Remote Desktop Protocol을 사용하여야 합니다. Microsoft에서 Remote Desktop Protocol(이하 RDP)을 제공하기는 하지만, 우리 프로젝트의 특성상 소스코드가 필요하였고, MS에서는 이에 대한 소스코드를 공개하지 않았기 때문에 우리는 이에 따른 RDP가 필요하게 되었습니다.&lt;br /&gt;&lt;br /&gt;따라서 RDP에 대한 정보를 단 한곳에서만 제공하는데 이는 &lt;A href=&quot;http://www.rdesktop.org&quot;&gt;www.rdesktop.org&lt;/A&gt;에서 제공합니다.&lt;br /&gt;예전 MS에서 터미널 서비스 개발자였던 사람이 만든 Org라고 하더군요.&lt;br /&gt;따라서 우리는 이 프로토콜을 분석 및 포팅하여 Windows Version으로 재구축 하기로 하였습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RDP / SECURE / MSC / ISO / TCP&lt;br /&gt;이렇게 다섯 계층으로 RDP는 이루어져 있습니다.&lt;br /&gt;터미널 서비스 역시 3389 포트로, TCP Connection으로 이루어져 있습니다.&lt;br /&gt;&lt;br /&gt;그리하여 RDP는 마우스 및 키보드 메시지가 발생되면 그에 따른 정보를 Server에게 보내줍니다.&lt;br /&gt;소스로는 아래와 같습니다.&lt;br /&gt;static LRESULT CALLBACK WndProc(&lt;br /&gt;&amp;nbsp; &amp;nbsp; HWND hwnd, &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // handle to window&lt;br /&gt;&amp;nbsp; &amp;nbsp; UINT uMsg, &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // message identifier&lt;br /&gt;&amp;nbsp; &amp;nbsp; WPARAM wParam, &amp;nbsp;&amp;nbsp; // first message parameter&lt;br /&gt;&amp;nbsp; &amp;nbsp; LPARAM lParam) &amp;nbsp;&amp;nbsp; // second message parameter&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PAINTSTRUCT ps;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HDC hdcPaint;&lt;br /&gt;&amp;nbsp; &amp;nbsp; switch (uMsg)&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case WM_PAINT:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hdcPaint = BeginPaint(hwnd, &amp;amp;ps);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!BitBlt (hdcPaint,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ps.rcPaint.left,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ps.rcPaint.top,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ps.rcPaint.right - ps.rcPaint.left,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ps.rcPaint.bottom - ps.rcPaint.top,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hdc,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ps.rcPaint.left,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ps.rcPaint.top,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SRCCOPY))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error (&quot;bitblt failed\n&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EndPaint(hwnd, &amp;amp;ps);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case WM_KEYDOWN:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rdp_send_input(time (NULL), RDP_INPUT_SCANCODE, RDP_KEYPRESS, (lParam &amp;amp; 0x00FF0000) &amp;gt;&amp;gt; 16, 0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case WM_KEYUP:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rdp_send_input(time (NULL), RDP_INPUT_SCANCODE, RDP_KEYRELEASE, (lParam &amp;amp; 0x00FF0000) &amp;gt;&amp;gt; 16, 0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case WM_LBUTTONDOWN:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rdp_send_input(time(NULL), RDP_INPUT_MOUSE,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; MOUSE_FLAG_BUTTON1 | MOUSE_FLAG_DOWN, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));&lt;br /&gt;&lt;br /&gt;이렇게 사용자의 메시지를 서버에게 보내게 되는 방식으로 진행되게 됩니다.&lt;br /&gt;&lt;br /&gt;이렇게 보낸 메시지 기반으로 서버는 사용자 단위로 가상채널(Virtual Channel)이 생성되는데, 해당 채널에게 메시지를 보내게 됩니다. 그럼 사용자의 핸들링에 따라 해당 서버측에 띄워져 있는 프로세스들이 이벤트를 발생시키게 되며 이에 대한 무효화 영역이 발생되면 클라이언트에게 해당 좌표 및 비트맵을 사용자에게 보냅니다.&lt;br /&gt;사용자는 이를 Parsing하여 모니터에 뿌려주게 되는 방식입니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;switch (os-&amp;gt;order_type)&lt;br /&gt;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; case RDP_ORDER_DESTBLT:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;process_destblt(s, &amp;amp;os-&amp;gt;destblt, present, delta);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; case RDP_ORDER_PATBLT:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;process_patblt(s, &amp;amp;os-&amp;gt;patblt, present, delta);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; case RDP_ORDER_SCREENBLT:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;process_screenblt(s, &amp;amp;os-&amp;gt;screenblt, present, delta);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; case RDP_ORDER_LINE:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;process_line(s, &amp;amp;os-&amp;gt;line, present, delta);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; case RDP_ORDER_RECT:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;process_rect(s, &amp;amp;os-&amp;gt;rect, present, delta);&lt;br /&gt;&lt;br /&gt;위 소스와 같이 서버로부터 무효화 영역에 따른 메시지를 수신하게 되면 클라이언트를 이를 파싱하여&lt;br /&gt;해당 작업 프로시저로 향하게 되는데, 이때 파라미터로 넘기는게 바로 &quot;s&quot;라는 파라미터!&lt;br /&gt;&quot;s&quot; 파라미터에는 클라이언트 모니터에 뿌려주게 될 X, Y 좌표 등 필요한 좌표정보들이 들어있습니다.&lt;br /&gt;이를 근거로 모니터로 뿌려주게 되는 형식입니다.&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>지자기 센서값을 이용한 Heading측정 </title>
            <link>http://www.swssm.org/index.php?idx=318</link>
            <description>&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: '맑은 고딕'; mso-bidi-font-size: 11.0pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA&quot;&gt;기체의 &lt;SPAN lang=EN-US&gt;Z&lt;/SPAN&gt;축 방향&lt;SPAN lang=EN-US&gt;(heading or Yaw)&lt;/SPAN&gt;을 절대값으로 구하기 위해 지자기센서와 가속도센서 성분을 이용하여 구했다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;지자기센서의 &lt;SPAN lang=EN-US&gt;Magnetic Field(&lt;/SPAN&gt;지구 자장&lt;SPAN lang=EN-US&gt;)&lt;/SPAN&gt;를 이용하여&lt;SPAN lang=EN-US&gt; Z&lt;/SPAN&gt;축의 회전방향을 값을 구하는데 이때 지구의 수평방향과 기울어질 경우 자기장의 값이 달라지기 때문에 가속도 센서를 이용하여 구해진 &lt;SPAN lang=EN-US&gt;X&lt;/SPAN&gt;축&lt;SPAN lang=EN-US&gt;(Roll), Y&lt;/SPAN&gt;축&lt;SPAN lang=EN-US&gt;(Pitch)&lt;/SPAN&gt;의 회전각을 이용하여 기울어진 자장의 값을 보정하였다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;&lt;br /&gt; [##_1C|1326827994.jpg|width=&quot;513&quot; height=&quot;387&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;1 &lt;/SPAN&gt;차적으로 &lt;SPAN lang=EN-US&gt;Roll angle&lt;/SPAN&gt;값과 &lt;SPAN lang=EN-US&gt;Pitch angle&lt;/SPAN&gt;값은 &lt;SPAN lang=EN-US&gt;Rotation Matrix&lt;/SPAN&gt;를 이용하여 구해지고 그결과는 &lt;SPAN lang=EN-US&gt;Roll(&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'&quot;&gt;ф), Pitch(θ)&lt;/SPAN&gt;&lt;SPAN style=&quot;mso-fareast-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'&quot;&gt;로 구해진다&lt;SPAN lang=EN-US&gt;.&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: '맑은 고딕'; mso-bidi-font-size: 11.0pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA&quot;&gt;이 각도값을 가지고 보드의 기울어진 정도의 벡터를 구한다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;&lt;br /&gt; [##_1C|1151959322.jpg|width=&quot;183&quot; height=&quot;91&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;이 벡터 성분에 지자기 센서에서 측정&lt;SPAN lang=EN-US&gt; 3&lt;/SPAN&gt;방향의 지구 자장값을 사용하여&lt;SPAN lang=EN-US&gt; Heading &lt;/SPAN&gt;성분을 구한다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: '맑은 고딕'; mso-bidi-font-size: 11.0pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA&quot;&gt;x’,y’,z’ &lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: '맑은 고딕'; mso-bidi-font-size: 11.0pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA&quot;&gt;는 지자기 센서에서 측정된&lt;SPAN lang=EN-US&gt; 3&lt;/SPAN&gt;방향의 자기값이다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; [##_1C|1003955361.jpg|width=&quot;439&quot; height=&quot;57&quot; alt=&quot;사용자 삽입 이미지&quot;|_##][##_1C|1053315774.jpg|width=&quot;275&quot; height=&quot;57&quot; alt=&quot;사용자 삽입 이미지&quot;|_##][##_1C|1133089680.jpg|width=&quot;207&quot; height=&quot;73&quot; alt=&quot;사용자 삽입 이미지&quot;|_##][##_1C|1154637676.jpg|width=&quot;459&quot; height=&quot;192&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] 구해진 Heading은 Z축의 절대방향으로서 기체의 비행방향을 나타낸다.
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Matlab을 이용한 버터워스 필터의 계수 구하는 방법 </title>
            <link>http://www.swssm.org/index.php?idx=289</link>
            <description>&lt;P&gt;Butterworth Filter Design by Matlab&lt;/P&gt; &lt;P&gt;“UAV“ 센서부에서 나오는 신호의 잡음을 제거하기 위한 디지털 필터의 계수를 Matlab을 통해 구하는 방법을 구성해 보았습니다. 결과 값이 다시 입력의 성분으로 들어가는 IIR 필터 이며, 특성은 평탄한 주파수 응답을 가지는 Butterworth입니다. &lt;/P&gt; &lt;P&gt;&amp;gt;&amp;gt; fs=320; &amp;nbsp; &amp;nbsp;Sampling frequency of signal [Hz=1/sec}&lt;br /&gt;&amp;gt;&amp;gt; fn=fs/2; &amp;nbsp; &amp;nbsp;Nyquist frequency&lt;br /&gt;&amp;gt;&amp;gt; Ts=1/fs; &amp;nbsp; &amp;nbsp;Sampling period [sec]&lt;/P&gt; &lt;P&gt;Filter Order Calculation&lt;/P&gt; &lt;P&gt;&amp;gt;&amp;gt; [n, Wn]=buttord(30/fn, 45/fn, 1, 12) 30/fn: passband cutoff frequency (30Hz)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;45/fn: stopband corner frequency (45Hz)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;1:&amp;nbsp; passband ripple in decibels&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;12: stopband attenuation in decibels&lt;br /&gt;&amp;gt;&amp;gt; n&lt;br /&gt;&amp;nbsp;n= 6&lt;br /&gt;&amp;gt;&amp;gt; Wn&lt;br /&gt;&amp;nbsp;Wn=0. &amp;nbsp; &amp;nbsp; 3dB frequency &amp;nbsp;&amp;nbsp; 0. …X&amp;nbsp; fn= &amp;nbsp; &amp;nbsp;&amp;nbsp; Hz&lt;/P&gt; &lt;P&gt;Filter Coefficient Calculation &lt;/P&gt; &lt;P&gt;&amp;gt;&amp;gt; [b, a]=butter(n, Wn) &amp;nbsp; Filter coefficient calculation&lt;/P&gt; &lt;P&gt;&lt;br /&gt;아래는 실제 Matlab 에서 구해 보았습니다.&lt;/P&gt; &lt;P&gt;fs = 320&lt;br /&gt;fn = fs/2&lt;br /&gt;ts = 1/fs&lt;br /&gt;ts = 0.0031&lt;/P&gt; &lt;P&gt;[n,wn]=buttord(30/fn,45/fn,1,12)&lt;br /&gt;n = 6&lt;br /&gt;wn = 0.2206&lt;br /&gt;[b,a]=butter(n,wn)&lt;/P&gt; &lt;P&gt;얻어진 디지털 필터의 계수입니다.&lt;br /&gt;a는 출력된 값에 곱해지는 계수이며, b는 입력신호에 곱해지는 계수입니다.&lt;/P&gt; &lt;P&gt;b =&amp;nbsp; 0.0019 &amp;nbsp;&amp;nbsp; 0.0097 &amp;nbsp;&amp;nbsp; 0.0194 &amp;nbsp;&amp;nbsp; 0.0194 &amp;nbsp;&amp;nbsp; 0.0097 &amp;nbsp;&amp;nbsp; 0.0019&lt;br /&gt;a =&amp;nbsp; 1.0000 &amp;nbsp; -2.7685 &amp;nbsp;&amp;nbsp; 3.3710 &amp;nbsp; -2.1647 &amp;nbsp;&amp;nbsp; 0.7246 &amp;nbsp; -0.1002&lt;br /&gt;&amp;nbsp;&lt;/P&gt; &lt;P style=&quot;FONT-SIZE: 10pt; MARGIN: 0px; COLOR: #000000; TEXT-INDENT: 0px; LINE-HEIGHT: 160%; FONT-FAMILY: '바탕'; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #000000; LINE-HEIGHT: 21px; FONT-FAMILY: '바탕'; LETTER-SPACING: 0px; TEXT-ALIGN: justify&quot;&gt;&amp;nbsp;&lt;/P&gt; &lt;P style=&quot;FONT-SIZE: 10pt; MARGIN: 0px; COLOR: #000000; TEXT-INDENT: 0px; LINE-HEIGHT: 160%; FONT-FAMILY: '바탕'; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #000000; LINE-HEIGHT: 21px; FONT-FAMILY: '바탕'; LETTER-SPACING: 0px; TEXT-ALIGN: justify&quot;&gt;&lt;IMG height=171 src=&quot;file:///C:/DOCUME~1/JUNGHY~1/LOCALS~1/Temp/UNI000012a4604f.gif&quot; width=268 border=0&gt;&lt;IMG height=171 src=&quot;file:///C:/DOCUME~1/JUNGHY~1/LOCALS~1/Temp/UNI000012a46051.gif&quot; width=277 border=0&gt;&lt;/SPAN&gt; &lt;/P&gt; &lt;P style=&quot;FONT-SIZE: 10pt; MARGIN: 0px; COLOR: #000000; TEXT-INDENT: 0px; LINE-HEIGHT: 160%; FONT-FAMILY: '바탕'; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #000000; LINE-HEIGHT: 21px; FONT-FAMILY: '바탕'; LETTER-SPACING: 0px; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #000000; LINE-HEIGHT: 21px; FONT-FAMILY: '바탕'; LETTER-SPACING: 0px; TEXT-ALIGN: justify&quot;&gt;&amp;lt;위상 응답&amp;gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&amp;lt;진폭 특성&amp;gt;&lt;/SPAN&gt; &lt;/P&gt; &lt;P style=&quot;FONT-SIZE: 10pt; MARGIN: 0px; COLOR: #000000; TEXT-INDENT: 0px; LINE-HEIGHT: 160%; FONT-FAMILY: '바탕'; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #000000; LINE-HEIGHT: 21px; FONT-FAMILY: '바탕'; LETTER-SPACING: 0px; TEXT-ALIGN: justify&quot;&gt;&lt;IMG height=186 src=&quot;file:///C:/DOCUME~1/JUNGHY~1/LOCALS~1/Temp/UNI000012a46053.gif&quot; width=269 border=0&gt;&lt;IMG height=183 src=&quot;file:///C:/DOCUME~1/JUNGHY~1/LOCALS~1/Temp/UNI000012a46055.gif&quot; width=288 border=0&gt;&lt;/SPAN&gt; &lt;/P&gt; &lt;P style=&quot;FONT-SIZE: 10pt; MARGIN: 0px; COLOR: #000000; TEXT-INDENT: 0px; LINE-HEIGHT: 160%; FONT-FAMILY: '바탕'; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; COLOR: #000000; LINE-HEIGHT: 21px; FONT-FAMILY: '바탕'; LETTER-SPACING: 0px; TEXT-ALIGN: justify&quot;&gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #000000; LINE-HEIGHT: 21px; FONT-FAMILY: '바탕'; LETTER-SPACING: 0px; TEXT-ALIGN: justify&quot;&gt;&amp;lt;임펄스 응답&amp;gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style=&quot;HWP-TAB: 1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&amp;lt;극점과 영점&amp;gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;/SPAN&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>DirectShow Editing Service 에 대해서 </title>
            <link>http://www.swssm.org/index.php?idx=290</link>
            <description>&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;동영상 편집을 하기위해서 Microsoft에서 제공하는 최고의 Tool은 바로 DirectShow에서 큰 부분을 차지하고 있는 DirectShow Editing Service(DES)이다.&lt;/P&gt; &lt;P class=바탕글&gt;Microsoft® DirectShow® 편집 서비스 (DES)는, 비디오 편집에 포함되는 태스크를 큰폭으로 간략화하는 애플리케이션 프로그래밍 인터페이스 (API)이다. DES 는, 코어 DirectShow 아키텍처의 최상부에 구축되고 있다. DES 는, DirectShow 의 대부분을 추상화 해, 비디오 편집 프로젝트의 조작 전용에 설계된 일련의 인터페이스를 제공한다. 애플리케이션 개발자는, 비디오 편집 애플리케이션의 생성에 최적인 프레임워크(framework) 중에서 DirectShow 의 이점을 활용할 수 있다. &lt;/P&gt; &lt;P class=바탕글&gt;DirectShow 의 코어가 되는 것은, 스트림 미디어를 처리하기 위한 강력한 아키텍처이다. 개발자가 파일 압축 등의 귀찮은 문제를 고려하지 않아도, 애플리케이션은 DirectShow 를 사용해, 다양한 포맷의 멀티미디어 컨텐츠를 재생할 수 있다. 그러나, DES 가 없으면, DirectShow는 편집에 필요한 유연성을 갖추지 못한다. &lt;/P&gt; &lt;P class=바탕글&gt;예를 들어, 어느 비디오 순서를 생성 하는데, 소스 A 로부터 4 초, 다음에 소스 B 로부터 10 초, 마지막에 소스 C 로부터 5 초를 잇고 싶다고 한다. 이것은, DirectShow API 만을 사용해, 꽤 용이하게 실시할 수가 있다. &lt;/P&gt; &lt;P class=바탕글&gt;그러나, 소스 C 를 소스 B를 가져오기 전에 있고 B를 연결하는 경우나, 소스 A 로부터 4 초는 아니고 8 초 사용하고 싶은 경우, 또 프로덕션 전체로 백그라운드에 다른 오디오 트랙 재생이 필요하게 되었을 경우 등의 작은 변경을 처리 하는 것이 어려운 일이 있다. 그러나, 이러한 작업은 DES 에서는 매우 간단한 편집 프로젝트이며, 메서드 몇 개를 호출하는 것만으로 실시할 수가 있다. &lt;/P&gt; &lt;P class=바탕글&gt;DirectShow 편집 서비스의 아키텍처&lt;/P&gt; &lt;P class=바탕글&gt;다음 그림은 Microsoft® DirectShow® 편집 서비스 (DES)의 아키텍처를 나타내고 있다. &lt;br /&gt;[##_1C|1373343408.jpg|width=&quot;399&quot; height=&quot;257&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt;&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;타임 라인 : 비디오 프로덕션을, 소스 클립, 트랜지션, 이펙트의 콜렉션으로서 표현한다. 이러한 콜렉션은, 상자 구조의 일련의 트랙으로서 구성된다. &lt;/P&gt; &lt;P class=바탕글&gt;XML 파서 : 타임 라인을 해석해 출력 파일을 생성한다. 또는, 입력 파일을 읽어들여 타임 라인을 생성한다. DES 는, XML 베이스의 영속성 포맷을 지원 하고 있다. &lt;/P&gt; &lt;P class=바탕글&gt;렌더링 엔진 : 타임 라인을, 스트림 미디어로서 렌더링 할 수 있는 포맷으로 변환한다. 디폴트에서는, 렌더링 엔진은 DirectShow 필터 그래프를 생성한다 &lt;/P&gt; &lt;P class=바탕글&gt;미디어 locator : 미디어 요소의 위치의 캐쉬를 보수한다. 미디어 요소를 열려고 실패했을 경우, DES 는 이 캐쉬를 사용해, 성공한 오픈의 History에 근거해 요소를 검색한다. &lt;/P&gt; &lt;P class=바탕글&gt;타임 라인은, 비디오 편집 프로젝트의 추상 표현이다. 이것은, 프로젝트로 사용되는 소스 클립, 그 시작 타임과 종료 타임, 이펙트와 트랜지션등을 지정한다. 그러나, 타임 라인은 비디오 스트림이나 오디오 스트림은 렌더링 하지 않는다. 대신에, 렌더링 엔진은, 프리뷰 또는 파일 출력용으로 타임 라인을 필터 그래프로 변환한다. 애플리케이션에서는, 취급하기 어렵게 에러의 나오기 쉬운 필터 그래프를 직접 조작하는 것이 아니라, 타임 라인을 조작한다. &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;타임 라인 모델&lt;/P&gt; &lt;P class=바탕글&gt;&quot;타임 라인&quot; 은, Microsof® DirectShow® 편집 서비스 (DES)가 비디오 편집 프로젝트를 표현하기 위해서 사용하는 개체이다. 비디오 프로젝트는, 비디오 파일, 사운드 파일, 정지화면 등의 소스 파일의 콜렉션으로부터 시작된다. 클립의 선형적인 순서가 &quot;트랙&quot; 이 된다. DirectShow 편집 서비스 (DES)에서는, 오디오와 비디오는 다른 트랙에 배치된다. &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;트랙은, 계층화도 할 수 있다. 복수의 오디오 트랙이 믹싱 되어 페이드나 잔향등의 오디오 이펙트를 포함하는 일도 있다. 복수의 비디오 트랙을 사용해, 트랜지션을 생성 한다. 예를 들어, 어느 클립으로부터 다른 클립에의 와이프를 생성 할 수 있다. &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;DES 는, 다음과 같이 트리 구조를 사용해 편집을 표현한다. &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;오디오 클립과 비디오 클립이 리프 노드, 즉 &quot;소스&quot; 개체가 된다. 동일한 미디어 타입 (오디오 또는 비디오)의 소스의 콜렉션이 &quot;트랙&quot; 이다. 트랙의 콜렉션이 &quot;콤포지션&quot; 이다. 콤포지션은, 포함되는 모든 트랙의 콤포지션으로서 렌더링 된다. 콤포지션에는 다른 콤포지션을 넣을 수도 있어 트랙의 복잡한 배치가 가능하다. 콤포지션과 트랙의 최상정도 레벨의 콜렉션이 그룹&quot; 이다. 1 개 또는 복수의 일련의 그룹이 &quot;타임 라인&quot; 이 된다. 타임 라인은, 트리의 루트 노드이다. 타임 라인에는, 적어도 1 개의 그룹이 포함되지 않으면 안 된다. 각 그룹은, 최종 프로덕션에 있어서의 단일의 스트림을 나타낸다. 대표적인 프로젝트에는, 비디오 그룹과 오디오 그룹이 1 개씩 포함된다. 콤포지션은 옵션이며, 필요한 경우에 한층 더 구조를 제공하는 것이다. &lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;다음 그림은 타임 라인을 구성하는 부모와 자식 관계를 나타낸 것이다. &lt;/P&gt;[##_1C|1051853261.jpg|width=&quot;567&quot; height=&quot;214&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;이와 같은 구조를 우리 프로젝트에 투영했을 때의 구조는 다음과 같다. &lt;/P&gt;[##_1C|1250534587.jpg|width=&quot;567&quot; height=&quot;441&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;위의 그림과 같이 각각의 트랙에 해당하는 동영상에서 삽입할 부분을 각각의 소스로 변환 시킨 뒤, 하나의 타임라인을 구성하면 우리 프로젝트에서 하고자 하였던 하나의 완성된 동영상 강의를 만들 수 있게 된다.
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>[GSS System] SNMP Message Packet Format 분석 </title>
            <link>http://www.swssm.org/index.php?idx=313</link>
            <description>&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: 16px Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 10px; FONT-FAMILY: -webkit-monospace&quot;&gt;&lt;br /&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot; size=2&gt;&amp;nbsp;지난 블로깅에서는 SNMP의 기본적인 이해에 대해서 알아보았습니다.&lt;br /&gt;이번에는 SNMP를 실제로 이용하기 위해서 SNMP Message Packet Format에 대해서 알아보도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;모든 SNMP를 이용하는 장치들은 SNMP Message Format을 이해하고 있어야 합니다. 그 이유 중의 하나가 바로 각기 다른 소프트웨어 개발 Language가 약간씩 다른 data type(Integer, strings, bytes, characters, etc)을 가지고 있기 때문입니다. 예를 들어 SNMP Manager가 Java data type의 message를 보낸다면 C로 작성된 SNMP Agent는 그 message의 내용을 이해하지 못합니다. 이 문제점을 해결하기 위해서 SNMP는 message를 구성하는데 사용하는 data type을 정의한 ASN.1(Abstract Syntax Notation One)을 이용합니다.&lt;br /&gt;&amp;nbsp;ASN.1은 프로그래밍 언어에 독립적이기 때문에, SNMP Agent와 Manager가 어떤 프로그래밍 언어를 이용하더라도 상관이 없습니다. 그러나 이러한 장점에도 불구하고 단점이 한 가지 존재하는데요. 그것은 바로 어떤 특정 data type이 전송될 때 message가 어떻게 encoding되어야 하는가... 하는 것입니다. 예를 들어 Strings type이 C언어로 coding 되어 전송될 경우에는 Null로 끝나고, 다른 언어로 coding되어 전송될 경우에는 다른 형식으로 보내야 할 것입니다. 다른 예로 Boolean value는 C++에서는 8bit, Visual Basic 6에서는 16bit로 구성되는 등 프로그래밍 언어 문법에 따라 달라지는 경우가 있습니다.그래서 ASN.1은 위와 같은 문제점을 해결하기 위해 BER(Basic Encoding Rules)을 포함하고 있습니다. 따라서 모든 data type은 BER에 의해서 선로를 타고 전송되기 전에, 프로그래밍 언어에 상관 없이 동일한 방법으로 encoding 되어집니다.&lt;br /&gt;&amp;nbsp;다시 말해서 SNMP Message의 모든 data field는 ASN.1 data type을 따르고 BER에 의해서 Encoding 됩니다. 그래서 올바른 format의 message를 전송하기 위해서는 ASN.1과 BER(Basic Encoding Rules)을 잘 이해하고 따라야 하는 것입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;ASN.1(Abstract Syntax Notation One)&lt;br /&gt;&lt;br /&gt;&lt;/STRONG&gt;&amp;nbsp;Message를 구성하는데 있어서 ASN.1에 의해 특징지어지는 data type의 몇가지 정보에 대해서 알필요가 있습니다. 그것은 두 가지 category로 나누어지는데, 바로 Primitive 와 Complex 형식 입니다. ASN.1 Primitive data type은 Integer, Octet(byte, characters), String, Null, Boolean, Object Identifier 등을 포함합니다. Object Identifier type의 한 field가 SNMP agent의 parameter를 지시하는데 사용되는 OID를 가지기 때문에 Object Identifier type은 SNMP message의 중요 type이 됩니다. 또한 data를 구성하는 프로그래머의 능력 확장을 위해 여러 primitive data type들을 Groupping 하여 Complex data type을 만들 수 있습니다.&lt;br /&gt;[##_1C|1105707283.jpg|width=&quot;485&quot; height=&quot;119&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] &lt;br /&gt;[##_1C|1242948247.jpg|width=&quot;592&quot; height=&quot;127&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] &lt;br /&gt;&amp;nbsp;ASN.1은 SNMP Message를 만드는데 필수적인 몇몇 Complex data type을 제공합니다. 첫 번째 complex data type은 Sequence 입니다. Sequence type은 단순히 data field의 list 입니다. Sequence의 field들은 각기 다른 data type을 가질 수도 있습니다. 두 번째 complex data type은 SNMP PDU(Protocol Data Unit) data type 입니다. PDU type은 특히 SNMP에 특화된 complex data type 입니다. 이용가능한 PDU data type은 GetRequest와 SetRequest 인데, 이 놈들은 각각 parameter를 얻어오고, 설정하는데 필수적인 data type이라 할 수 있습니다.&lt;br /&gt;&amp;nbsp;결론적으로 SNMP message는 전체적으로 ASN.1 data type의 field로부터 만들어진 구조입니다. 그러나 정확한 data type의 결정만으로는 부족합니다. 만약 SNMP message가 가변 data type의 Sequence라 한다면, 수신측에서는 어디가 field의 시작이고 어디가 field의 끝인지 어떻게 알 수 있을까요? 또 각 filed의 data type은 무엇인지 어떻게 알 수 있을까요? 이러한 문제점을 회피하기 위해서 BER(Basic Encoding Rules)이 존재하는 것입니다.&lt;br /&gt;[##_1C|1343523091.jpg|width=&quot;598&quot; height=&quot;195&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] &lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;BER(Basic Encoding Rules)&lt;br /&gt;&lt;br /&gt;&lt;/STRONG&gt;&amp;nbsp;SNMP message의 각 field의 byte수를 Layout 할 때에는 Basic Encoding Rules를 따라야 합니다. 가장 기본적인 규칙은 각 field가 세 부분으로 나뉘어서 encoding 된다는 것이다. 세 부분은 바로 Type, Length 그리고 Data 입니다. Type은 한 byte의 식별자를 이용하는 field의 data type을 나타냅니다. Length는 그 뒤에 따라오는 data 부분의 길이를 byte수로 표현한 것입니다. 마지막으로 Data는 실제 Communication하는 값(number, string, OID, etc)이 되겠습니다. Sequences와 PDU 같은 data type들은 몇몇 그보다 작은 field들에 의해서 만들어집니다.&lt;br /&gt;&amp;nbsp;SNMP message를 encoding 하는데는 두 가지 필수적인 Basic Encoding Rules이 있는데, 두 가지 모두 OID encoding에 이용됩니다. 첫 번째 규칙은 OID의 첫 두개 숫자를 encoding 하는데 적용됩니다. BER에 따르면 OID의 첫 두 숫자(16진수 x, y)는 다음과 같은 공식을 따릅니다.&lt;br /&gt;&lt;br /&gt;&lt;FONT size=5&gt;&lt;STRONG&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;FONT face=arial,helvetica,sans-serif size=4&gt;&lt;STRONG&gt;&amp;nbsp;(40 * x) + y&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp;SNMP OID의 첫 두 숫자는 항상 1.3 이므로 SNMP OID의 첫 두 숫자는 항상 43 또는 0x2B로 encoding 됩니다.( because (40 * 1) + y )&lt;br /&gt;&amp;nbsp;첫 두 숫자가 encoding 되고 나서, OID의 연속된 숫자들은 byte 단위로 encoding 됩니다. 여기서 매우 큰 숫자에 대해서 특별한 규칙이 하나 더 있는데요. 1 byte(8 bit)는 0~255까지 밖에 표현 못하기 때문이죠~. 예를 들어서 생각해 볼까요? Rane NM1 microphoneMute OID는 1.3.6.1.4.1.2680.1.2.7.3.2.0 입니다. 여기에서 2680은 1 byte를 이용해서 표현이 불가능 합니다. 이런 경우에는 7 bit 씩 나누어서 표현하는 것이 바로 BER 규칙 중의 하나 입니다. 즉, 1 byte 중 7 bit를 이용해서 값을 표현하고 최상위 bit(MSB)는 flag bit로 이용 합니다. 다음 1 byte를 더 이용하게 되면 flag bit를 1로 둠으로써 다음 byte는 reserved 되었다는 것을 표현하는 것입니다. 위의 경우 2680은 128로 나누면 몫은 20, 나머지는 120이 됩니다. 다시 말해 첫 번째 1 byte는 0x14, 두 번째 1 byte는 0x78가 됩니다. 앞서 말한대로 최상위 bit(flag bit)를 set 시켜줘야하므로 첫 번째 byte는 0x94, 두 번째 byte는 0x78이 되는 것입니다. 검산해보면 (0x14 * 128) + 0x78 = 2680 이 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;SNMP Message Format&lt;br /&gt;&lt;br /&gt;&lt;/STRONG&gt;&amp;nbsp;SNMP message format은 message 안에 어떤 field가 포함되어 있는지, 어떤 순서로 배치되어 있는지 나타냅니다. 궁극적으로 message는 이웃한 field의 몇몇 layer들에 의해서 만들어집니다. 가장 바깥쪽 layer에서 SNMP message는 Sequence type의 single field 입니다. 전체 message는 세 개의 작은 field(SNMP Version, SNMP Community String, SNMP PDU) 들로 구성됩니다. &lt;br /&gt;[##_1C|1226122256.jpg|width=&quot;600&quot; height=&quot;132&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] &amp;nbsp;SNMP Version과 SNMP Community String은 primitive data type 이기 때문에 더 작은 field로 만들어지지는 않습니다. 하지만 PDU는 몇몇 더 작은 field로 구성된 complex data type 입니다. 즉, Request ID(Integer), Error(Integer), Error Index(Integer), 그리고 Variable Binding List 등으로 구성되어 있습니다. 그 중에서 Variable Binding은 두 가지 특정 field의 Sequence 입니다. 첫 번째 field는 특정 parameter를 가리키는 OID이고, 두 번째 field는 특정 parameter의 값이 되겠습니다. SetRequest PDU에서의 그 값은 set 된 parameter에 대한 MIB에서의 data type과 동일해야 합니다. GetRequest PDU에서의 그 값은 0x00 길이의 Null 값 입니다.&lt;br /&gt;[##_1C|1183339681.jpg|width=&quot;600&quot; height=&quot;172&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] - SNMP message : 전체 SNMP message를 나타내는 Sequence는 SNMP Version, Community String,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SNMP PDU로 구성된다.&lt;br /&gt;&lt;br /&gt;- SNMP Version : SNMP의 Version을 나타내는 Integer 값. SNMPv1 = 0&lt;br /&gt;&lt;br /&gt;- SNMP Community String : SNMP 장치에 보안성을 더해주기 위해 이용되는 문자열을 포함하는&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Octet String.&lt;br /&gt;&lt;br /&gt;- SNMP PDU : SNMP PDU는 message의 body를 포함한다. PDU는 몇개의 type을 가지는데,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 보통 GetRequest, GetResponse, SetRequest로 분류된다.&lt;br /&gt;&lt;br /&gt;- Request ID : 특별한 SNMP 요구사항을 식별하는 integer 값.&lt;br /&gt;&lt;br /&gt;- Error : 0x00으로 set 된 값이 SNMP manager에 의해서 전송된다. error code는 아래와 같다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;0x00 - 오류 발생 없음.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x01 - 전송되기에 너무 큰 응답 message.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x02 - requested object 이름을 찾을 수 없음.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x03 - 요청된 data type과 SNMP agent의 data type이 다를 때.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x04 - SNMP manager가 read-only parameter로 설정되었을 때.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x05 - 일반적인 오류&lt;br /&gt;&lt;br /&gt;- Error Index : Error가 발생했을 때, Error Index는 오류를 발생시킨 object를 가리키는 pointer를 가진다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 그렇지 않은 경우에 Error Index는 0x00을 가진다.&lt;br /&gt;&lt;br /&gt;- Varbind List : Sequence of Varbinds.&lt;br /&gt;&lt;br /&gt;- Varbind : OID &amp;amp; OID's Value.&lt;br /&gt;&lt;br /&gt;- Object Identifier : SNMP agent의 특정 parameter를 가리키는 식별자.&lt;br /&gt;&lt;br /&gt;- Value : SetRequest PDU - SNMP agent의 특정 OID에 적용된 값.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; GetRequest PDU - return data에 대한 유효하지 않은 숫자 Null로서 작용하는 값.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GetResponse PDU - SNMP agent의 특정 OID로부터 return 된 값.&lt;br /&gt;[##_1C|1179380113.jpg|width=&quot;600&quot; height=&quot;129&quot; alt=&quot;사용자 삽입 이미지&quot;|_##] &lt;br /&gt;다음 블로깅에서는 실제로 위의 ASN.1 및 BER을 적용하여 팀에서 구현한 Protocol에 대해서&lt;br /&gt;알아보도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;감사합니다.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>[ 대발이의 그까이꺼~! ] Intelligent Army Robot System 기체 제작 과정 ^^* </title>
            <link>http://www.swssm.org/index.php?idx=312</link>
            <description>우리 107팀(25살+26살+28살+28살)의 기체 제작 현황입니다.&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;설계는 Inventor2008을 사용하였습니다. 3차원 설계를 하기위해 사용하는 편리한 Tool이죠^^&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;../../attach/1/1026645581.jpg?randseed=0.6666892088519905&quot; alt=&quot;&quot; style=&quot;margin-top: 0px; width: 262px; height: 228px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt; 본 그림의 경우 원래 부품을 제외한 추가 가공품들 입니다.&lt;br /&gt;&lt;img src=&quot;../../../../attach/1/1379291980.jpg?randseed=0.9341541526856015&quot; alt=&quot;&quot; style=&quot;margin-top: 19.4783px; width: 236px; height: 97px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt;&lt;img src=&quot;../../../../attach/1/1175642838.jpg?randseed=0.827609411225668&quot; alt=&quot;&quot; style=&quot;margin-top: 19.0488px; width: 233px; height: 99px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [그림 1]&lt;br /&gt;&lt;br /&gt;뭔 가공해야 할 부품이 왜 이렇게 많은지.... ㅠ.ㅠ &lt;br /&gt;&lt;br /&gt;설계 및 가공시에 가중 중요한 것은 감히 '결합'이라 말할 수 있겠습니다.&lt;br /&gt;물리적인 '힘'을 고려한 설계도 물론 중요하지만 결정적으로 돌아가느냐, 안돌아가느냐는 바로 결합에서 결정나기 때문입니다. 가공 후 조립이 안되면 말짱 꽝이겠죠?&lt;br /&gt;&lt;br /&gt;그 외에도 여러가지를 고려해야 했습니다. &lt;br /&gt;4개의 모터를 이용하여 좌측주행, 우측주행, 앞팔, 뒷팔 네군데를 제어하기 위해서 내부 구조가 좀 까다롭게 되어있습니다. 사진으로 찍어놓은게 없어서 아쉽네요 ㅡ; 쩝;;;;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;../../attach/1/1372946771.jpg?randseed=0.6635004714464386&quot; alt=&quot;&quot; style=&quot;margin-top: 0px; width: 223px; height: 167px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt; 본 사진은 구동부가 모터+벨트+풀리의 결합으로 되어있음을 보입니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [사진 2]&lt;br /&gt;&lt;br /&gt;위에 '타이밍벨트' 보이시죠? 이 '타이밍벨트'는 제품출하시에 이미 규격이 정해져서 나오므로 규격집에 맞추어 설계를 해주어야 합니다. 물론 '풀리'도 마찬가지 입니다. ('풀리'는 '타이밍벨트'가 끼워지는 바퀴를 의미하죠^^)&lt;br /&gt;&lt;br /&gt;아! 그리고 축으로 사용되는 '연마봉'과 앞,뒤팔과의 결합부분 또한 눈여겨 봐야합니다. 연마봉 끝이 그냥 원 모양이면 팔을 들어올릴 수 없겠죠? 측면과 걸리는 부분이 있어야 되잖아요? 그래서 연마봉의 양 끝은 모양이 '반원'입니다. 모든 축과 측면의 결합은 이렇게 구성되어 있습니다. 이것도 사진이 없어서 아쉽네요 ㅡ;;;&lt;br /&gt;&lt;br /&gt;이렇게 기본적인 기체의 밑부분에 대한 설명을 마치고 제작과정을 살펴봅시다^^&lt;br /&gt;&lt;img src=&quot;../../attach/1/1232214915.jpg?randseed=0.9064368677177147&quot; alt=&quot;&quot; style=&quot;margin-top: 0px; width: 223px; height: 167px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt;&lt;img src=&quot;../../attach/1/1250433846.jpg?randseed=0.22288524217328076&quot; alt=&quot;&quot; style=&quot;margin-top: 0px; width: 223px; height: 167px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [사진 3] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [사진 4]&lt;br /&gt;&lt;br /&gt;아직 다 가공한 건 아니지만 무지막지 하네요 ㅠ.ㅜ.&lt;br /&gt;[사진 4]는 '타이밍벨트'가 밑 바닥으로 부터 눌리는 것을 막기위한 일종의 '텐션'이죠. 스프링기능은 없지만 굽이진 곳이나, 계단같이 평탄치 못한 언덕이나 지형을 이동할때 필수 입니다. 탱크아시죠? 탱크 바퀴를 생각하시면 되요. 실제 구동바퀴는 앞,뒤에 있고 가운데는 받침역할인 거죠^^&lt;br /&gt;&lt;br /&gt;로봇이 하중이 꾀 나가다 보니, 축과 바퀴사이는 베이링이 필수 입니다^^&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;../../attach/1/1107592509.jpg?randseed=0.2861897049698512&quot; alt=&quot;&quot; style=&quot;margin-top: 0px; width: 223px; height: 167px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt;&lt;img src=&quot;../../attach/1/1241152173.jpg?randseed=0.6925523613642597&quot; alt=&quot;&quot; style=&quot;margin-top: 0px; width: 223px; height: 167px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [사진 5] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [사진 6]&amp;nbsp; &lt;br /&gt;&lt;br /&gt;점점 틀이 갖춰져 가는 모습에 눈물이 앞을 가립니다 ㅠ.ㅠ 작업할때면 항상 거지꼴이 됩니다. 기름과 알루미늄가루 범벅이죠^^;&lt;br /&gt;[사진 6]은 기념샷!!!&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;../../attach/1/1113308769.jpg?randseed=0.7133336375227181&quot; alt=&quot;&quot; style=&quot;margin-top: 0px; width: 222px; height: 166px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt;&lt;img src=&quot;../../attach/1/1183785867.jpg?randseed=0.5830492746465179&quot; alt=&quot;&quot; style=&quot;margin-top: 0px; width: 178px; height: 239px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [사진 7] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [사진 8]&lt;br /&gt;&lt;br /&gt;완성입니다! ㅜ.ㅠ 또 한번 눈물이 앞을 가리네요 ㅋㅋ 적이 나타나면 바로 쏴버릴듯 합니다^^;; 기세가 하늘을 찌를듯 하군요! 위풍당당 합니다^^ ㅋ&lt;br /&gt;사진[8]은 3축으로 이루어져 있습니다. 총기를 자유자제로 조준할 수 있는 메카니즘을 가지고 있죠 ㅋ&lt;br /&gt;제어는 토크30kg의 서보모터3개로 이루어져 있습니다. &lt;br /&gt;&lt;br /&gt;음~ 정말 험난한 길이였습니다 ㅠ.ㅠ 그래도 개운하군요, 친자식 같습니다 ㅋ&lt;br /&gt;&lt;br /&gt;제작 후 아쉽게도 단점이 발견되었습니다. 로봇 무게가 상당합니다^^; 28kg.... 허허~ 거의 배틀로봇 수준이죠.&lt;br /&gt;하지만 이것은 후에 20kg까지 줄일 생각입니다. 기체 가운데 큰 풀리8개의 옆구리를 사정없이 깍아낼 생각입니다^^;;; 완전 심각한 노가다가 되겠지만 무게를 줄일 수 있다면 빳데리가 좀더 오래 갈 수 있다는 장점이 있죠 ㅋㅋ&lt;br /&gt;그리고 또 한가지 문제는 가운데에서 좌,우로 기울어짐을 맡고있는 두번째 서보가... 토크가 딸린다는 겁니다.&lt;br /&gt;작동은 잘 되는데 좀 동작하는게 불안합니다. 계속 test하다가는 망가질지도 모릅니다^^;;&lt;br /&gt;토크가 30kg이라는 말은 1cm당 30kg까지 이론상 모터가 망가지지 않고 버틴다는 얘기죠, 그런데 막상 만들고 보니 로봇의 윗판에서 총까지 20cm가 넘는다는 겁니다^^;;; 아~~~~ 참~~~~~ 한탄이 나오네요 ^^&lt;br /&gt;그래도 웃어야죠~! &lt;br /&gt;방안을 모색해 봐야 겠습니다. &lt;br /&gt;사람이 맘만 먹으면 안되는게 없는 법이죠!&lt;br /&gt;&lt;br /&gt;다음 이 시간에는 칼만필터(Kalman Filter)에 대해서 알아보겠습니다.&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; [ 대발이의 그까이꺼~! ]&amp;nbsp; Kalman Filter게 섯거라~! &amp;nbsp; -기대해 주세요ㅋ&lt;br /&gt;&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>SNMP Library of GSS System </title>
            <link>http://www.swssm.org/index.php?idx=310</link>
            <description>&lt;P style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=MsoNormal&gt;&lt;FONT size=2 face=&quot;맑은 고딕&quot;&gt;현재 구현하고 있는&lt;SPAN lang=EN-US&gt; SNMP Library&lt;/SPAN&gt;의&lt;SPAN lang=EN-US&gt; Class Diagram&lt;/SPAN&gt;을 살펴 봄으로써&lt;SPAN lang=EN-US&gt; SNMP &lt;/SPAN&gt;프로토콜이 어떤 식으로 되어 있으며&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;어떤 방식으로 클래스를 설계하고 사용할 수 있는 지를 살펴 보겠습니다&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;FONT size=2 face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=MsoNormal&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;현재&lt;SPAN lang=EN-US&gt; SNMP&lt;/SPAN&gt;는&lt;SPAN lang=EN-US&gt; Version 1, Version 2(&lt;/SPAN&gt;두 가지 버전&lt;SPAN lang=EN-US&gt;), Version 3&lt;/SPAN&gt;를 지원합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;그러나 현재 대부분의&lt;SPAN lang=EN-US&gt; SNMP&lt;/SPAN&gt;를 지원하는 장비들은&lt;SPAN lang=EN-US&gt; Version 1&lt;/SPAN&gt;을 기본적으로 지원하기 때문의 구현 하려고 하는&lt;SPAN lang=EN-US&gt; SNMP Protocol&lt;/SPAN&gt;은 &lt;SPAN lang=EN-US&gt;Version 1&lt;/SPAN&gt;을 기준으로 하겠습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT size=2 face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=MsoNormal&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;아래는 설계된&lt;SPAN lang=EN-US&gt; Class Diagram&lt;/SPAN&gt;이 되겠습니다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;[##_1C|1376869021.png|width=&quot;600&quot; height=&quot;358&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;STRONG&gt;&lt;STRONG&gt;&amp;lt;SNMP Library Class Diagram&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/STRONG&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt; &lt;P style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt&quot; class=MsoNormal align=left&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SNMP Library&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;에 대한 이해를 돕기 위해서 중요한 클래스에 대해서 간단히 살펴 보겠습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt&quot; class=MsoNormal align=left&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;ISnmpApp&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;Snmp PDU&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;를 생성해서 이를&lt;SPAN lang=EN-US&gt; Agent&lt;/SPAN&gt;에 전송하고 응답을 처리하기 위한&lt;SPAN lang=EN-US&gt; Applicatin &lt;/SPAN&gt;부분의 프로그램을 추상화한 추상 클래스이다&lt;SPAN lang=EN-US&gt;. _responses&lt;/SPAN&gt;는&lt;SPAN lang=EN-US&gt; List&amp;lt;string&amp;gt; &lt;/SPAN&gt;형의 데이터 타입으로서&lt;SPAN lang=EN-US&gt; Agent&lt;/SPAN&gt;에 요청한 결과 값들을 저장하고 있는 변수 입니다&lt;SPAN lang=EN-US&gt;. _snmpPDU&lt;/SPAN&gt;를&lt;SPAN lang=EN-US&gt; SNMP &lt;/SPAN&gt;프로토콜&lt;SPAN lang=EN-US&gt; Version 1&lt;/SPAN&gt;의&lt;SPAN lang=EN-US&gt; PDU&lt;/SPAN&gt;를 생성하는 역할을 합니다&lt;SPAN lang=EN-US&gt;. _snmpPDUProperty&lt;/SPAN&gt;는&lt;SPAN lang=EN-US&gt; PDU&lt;/SPAN&gt;를 생성하기 위한 여러가지 정보&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;예를 들어&lt;SPAN lang=EN-US&gt; IP, community, version, object ID &lt;/SPAN&gt;등이 되겠습니다&lt;SPAN lang=EN-US&gt;. CreatePDU()&lt;/SPAN&gt;를 통해서&lt;SPAN lang=EN-US&gt; PDU&lt;/SPAN&gt;를 생성하고&lt;SPAN lang=EN-US&gt; Run() &lt;/SPAN&gt;함수를 추상 함수로 선언만 해놓고 구현은&lt;SPAN lang=EN-US&gt; SnmpGet, SnmpWalk&lt;/SPAN&gt;에 위임합니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SnmpGet&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SnmpGet&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;은&lt;SPAN lang=EN-US&gt; ISnmpApp&lt;/SPAN&gt;를 상속 받아서&lt;SPAN lang=EN-US&gt; Run()&lt;/SPAN&gt;을 구현 합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;단 한 개의 &lt;SPAN lang=EN-US&gt;object ID&lt;/SPAN&gt;를 입력 받아서&lt;SPAN lang=EN-US&gt; PDU&lt;/SPAN&gt;를 생성해서 그에 대한 결과 값을 얻을 수 있는 클래스입니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;오직 단 한 개의&lt;SPAN lang=EN-US&gt; object&lt;/SPAN&gt;의 정보를 얻을 수 있습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SnmpWalk&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SnmpWalk&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;는&lt;SPAN lang=EN-US&gt; ISnmpApp&lt;/SPAN&gt;를 상속 받아서&lt;SPAN lang=EN-US&gt; Run()&lt;/SPAN&gt;을 구현 합니다&lt;SPAN lang=EN-US&gt;. SnmpGet&lt;/SPAN&gt;가 오직 단 한 개의&lt;SPAN lang=EN-US&gt; object&lt;/SPAN&gt;의 정보만 얻을 수 있는 거와 달리&lt;SPAN lang=EN-US&gt;, SnmpWalk&lt;/SPAN&gt;는 요청된&lt;SPAN lang=EN-US&gt; object ID&lt;/SPAN&gt;의 하위&lt;SPAN lang=EN-US&gt; object&lt;/SPAN&gt;의 모든 정보를 얻어서 반환하게 됩니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;결론적으로&lt;SPAN lang=EN-US&gt; SnmpWalk&lt;/SPAN&gt;는&lt;SPAN lang=EN-US&gt; SnmpGet&lt;/SPAN&gt;의 연속적인 요청이라 봐도 무방합니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SnmpPDU&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SNMP PDU&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;를 생성하는 부분으로&lt;SPAN lang=EN-US&gt; SnmpPDUProperty &lt;/SPAN&gt;클래스와&lt;SPAN lang=EN-US&gt; SnmpPDUMaker &lt;/SPAN&gt;클래스를 이용해서&lt;SPAN lang=EN-US&gt; PDU&lt;/SPAN&gt;를 생성하는 클래스입니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SnmpPDUMaker&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;실제&lt;SPAN lang=EN-US&gt; SNMP PDU&lt;/SPAN&gt;를 생성하는 클래스입니다&lt;SPAN lang=EN-US&gt;. SnmpPDUProperty &lt;/SPAN&gt;클래스의 정보를 이용해서&lt;SPAN lang=EN-US&gt; PDU&lt;/SPAN&gt;를 생성합니다&lt;SPAN lang=EN-US&gt;. RFC 1157&lt;/SPAN&gt;에 정의된&lt;SPAN lang=EN-US&gt; Version 1&lt;/SPAN&gt;의 형식에 맞게&lt;SPAN lang=EN-US&gt; PDU&lt;/SPAN&gt;가 생성됩니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SnmpPDUProperty&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SNMP PDU&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;를 생성하기 위한 정보들이 들어갑니다&lt;SPAN lang=EN-US&gt;. PDU Type, Version, Community, Object ID, Request ID &lt;/SPAN&gt;등이 되겠습니다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SnmpPDUParser&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;Agent&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;로부터 수신 받은&lt;SPAN lang=EN-US&gt; PDU&lt;/SPAN&gt;를&lt;SPAN lang=EN-US&gt; Parsing &lt;/SPAN&gt;하는 클래스이다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;UDPClient&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;UL&gt; &lt;UL&gt; &lt;LI&gt;&lt;SPAN style=&quot;FONT-FAMILY: Wingdings&quot; lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'; -x-system-font: none; font-size-adjust: none; font-stretch: normal&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;SNMP Protocol&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;은 &lt;SPAN lang=EN-US&gt;UDP/IP&lt;/SPAN&gt;를 통해서 효율적으로 데이터를 보내게 됩니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;만들어진&lt;SPAN lang=EN-US&gt; SNMP PDU&lt;/SPAN&gt;를 전송하기 위해서 이&lt;SPAN lang=EN-US&gt; UDPClient &lt;/SPAN&gt;클래스를 구현하였습니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;타겟의&lt;SPAN lang=EN-US&gt; IP&lt;/SPAN&gt;와&lt;SPAN lang=EN-US&gt; Port &lt;/SPAN&gt;번호를 지정해서 만들어진&lt;SPAN lang=EN-US&gt; PDU&lt;/SPAN&gt;를 전송하고 동기적으로 데이터를 수신하게 됩니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;br /&gt; &lt;P style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt&quot; class=MsoNormal align=left&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;간단하게&lt;SPAN lang=EN-US&gt; SNMP Library&lt;/SPAN&gt;에 대해서 살펴 보았으니 이를 사용해야 할 것입니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;만들어진&lt;SPAN lang=EN-US&gt; Library&lt;/SPAN&gt;를 사용하는 샘플 코드와 실제 만들어진&lt;SPAN lang=EN-US&gt; SNMP PDU&lt;/SPAN&gt;가 정확한지를 테스트 하기 위해서 테스트 케이스를 통해서 확인을 해보았습니다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;&lt;br /&gt;[##_1C|1384430639.png|width=&quot;534&quot; height=&quot;720&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;STRONG&gt;&lt;STRONG&gt;&lt;br /&gt;[##_1C|1374325349.png|width=&quot;507&quot; height=&quot;659&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;lt;SNMP PDU 테스트 케이스&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/STRONG&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;STRONG&gt;&lt;br /&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: '맑은 고딕'; FONT-SIZE: 10pt&quot;&gt;아래는&lt;SPAN lang=EN-US&gt; SNMP Library&lt;/SPAN&gt;를 가지고 실제&lt;SPAN lang=EN-US&gt; Agent&lt;/SPAN&gt;에 접속해서 데이터를 가져오는&lt;SPAN lang=EN-US&gt; SnmpTester&lt;/SPAN&gt;의&lt;SPAN lang=EN-US&gt; Application &lt;/SPAN&gt;모습입니다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;접속하려는&lt;SPAN lang=EN-US&gt; Agent&lt;/SPAN&gt;의 정보를 입력하고&lt;SPAN lang=EN-US&gt; PDU &lt;/SPAN&gt;정보를 입력하면&lt;SPAN lang=EN-US&gt; PDU&lt;/SPAN&gt;를 생성해서&lt;SPAN lang=EN-US&gt; Agent&lt;/SPAN&gt;에 전송하고 응답 받은 결과를 파싱하여 텍스트 박스에 출력하는 테스트 프로그램입니다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;[##_1C|1122234174.png|width=&quot;600&quot; height=&quot;414&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&amp;nbsp; &lt;STRONG&gt;&amp;lt;SnmpTester Application&amp;gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;P style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=MsoNormal&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;SPAN style=&quot;Z-INDEX: 10000; POSITION: absolute; PADDING-BOTTOM: 1px; PADDING-LEFT: 4px; PADDING-RIGHT: 4px; COLOR: infotext; TOP: 1629px; CURSOR: pointer; PADDING-TOP: 1px; LEFT: 579px; -moz-appearance: tooltip&quot;&gt;save&lt;/SPAN&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>초간단 마우스 및 키보드 전역 후킹 방법 </title>
            <link>http://www.swssm.org/index.php?idx=311</link>
            <description>&lt;P&gt;보통 마우스 및 키보드의 메시지를 후킹하는 방법은 WH_KEYBOARD 나 WH_MOUSE를 후킹하는 코드를 &lt;br /&gt;DLL 파일로 만들어서 다이나믹 로딩하는 기법을 많이 사용한다. &lt;br /&gt;하지만 WH_KEYBOARD_LL 과 WH_MOUSE_LL 이 지원되는 NT 4.0 이상 윈도우 에서는 &lt;br /&gt;DLL을 이용하지않고 프로그램 소스에서 바로 후킹이 가능하다.&lt;/P&gt; &lt;P&gt;후킹 방법은 다음과 같다.&lt;br /&gt;먼저 후킹해서 후킹된 메시지를 받을 함수와 훅 핸들러를 적절한 위치에 선언한다. &lt;br /&gt;LRESULT CALLBACK KeboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) ;&lt;br /&gt;HHOOK m_hook_keboard=NULL;&lt;/P&gt; &lt;P&gt;LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) ;&lt;br /&gt;HHOOK m_hook_mouse=NULL;&lt;/P&gt; &lt;P&gt;그리고 예시에 사용되는 후킹 함수는 다음과 같으며, 기존에 사용하는 후킹 함수와 다른 형태는 없다.&lt;/P&gt; &lt;P&gt;LRESULT CALLBACK KeboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)&lt;br /&gt;{&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; if (nCode &amp;lt; 0)&amp;nbsp; // do not process message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return CallNextHookEx(m_hook_keboard, nCode, wParam, lParam);&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; if ( wParam==WM_KEYDOWN ){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; OutputDebugStringA(&quot;KeyBoard Down&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; return CallNextHookEx(m_hook_keboard, nCode, wParam, lParam);&lt;br /&gt;}&lt;br /&gt;LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (nCode &amp;lt; 0)&amp;nbsp; // do not process message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return CallNextHookEx(m_hook_keboard, nCode, wParam, lParam);&lt;/P&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; switch ( wParam){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case WM_RBUTTONDOWN:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OutputDebugStringA(&quot;Mouse R Button Down&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case WM_LBUTTONDOWN:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OutputDebugStringA(&quot;Mouse L Button Down&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case WM_MOUSEMOVE:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OutputDebugStringA(&quot;Mouse MOVE&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case WM_MBUTTONDOWN:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OutputDebugStringA(&quot;Mouse M Button Down&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case WM_MOUSEWHEEL:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OutputDebugStringA(&quot;WHEEL&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; return CallNextHookEx(m_hook_keboard, nCode, wParam, lParam);&lt;br /&gt;}&lt;/P&gt;&lt;br /&gt; &lt;P&gt;&lt;br /&gt;OutputDebugStringA()은 디버그 뷰에서 확인할 수 있도록 디버그 메시지를 발생하는 함수이다.&lt;/P&gt; &lt;P&gt;그리고 후킹을 시작하는 부분은 다음과 같다.&lt;br /&gt;void CHookDlg::OnBnClickedButton1()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; if (m_hook_keboard==0)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; m_hook_keboard=SetWindowsHookEx(WH_KEYBOARD_LL, KeboardHookProc, theApp.m_hInstance, NULL );&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (m_hook_mouse==0)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; m_hook_mouse=SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, theApp.m_hInstance, NULL );&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt; &lt;P&gt;}&lt;br /&gt;이 또한 일반적으로 후킹할 때 사용하는 SetWindowsHookEx와 별반 다를바가 없지만 파라미터에 사용되는 메시지가 WH_KEYBOARD,WH_MOUSE가 아닌 WH_KEYBOARD_LL,WH_MOUSE_LL이&lt;br /&gt;사용된다.&lt;br /&gt;보통의 경우, 윈도우 전역에 걸친 메세지를 후킹하기 위해선 후킹프로시져가 DLL 로 존재해야 한다. 각 프로세스들이 독립적인 메모리 공간을 가지기 &lt;br /&gt;때문에 공용으로 사용되는 DLL 을 이용하여 메세지 후킹을 하는 것이다.&lt;br /&gt;하지만 WH_KEYBOARD_LL,WH_MOUSE_LL 같은 경우에는 LowLebel Procedure 이기 때문에 키가 입력이 되고 인터럽트 핸들러가 발생하고 나서 바로 발생하는 &lt;br /&gt;메시지이다. 그렇기 때문에 dll을 이용하지 않고도 전역에서 메시지의 후킹이 가능하다. &lt;/P&gt; &lt;P&gt;다음은 예시 프로그램이 실제로 동작하는 화면이다. &lt;/P&gt; &lt;P&gt;[##_1C|1262932178.jpg|width=&quot;600&quot; height=&quot;243&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>External Interface를 이용한 AIR와 C#의 연동개발 </title>
            <link>http://www.swssm.org/index.php?idx=309</link>
            <description>&lt;link href=&quot;/style/default-wysiwyg.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot;&gt;&lt;style type=&quot;text/css&quot;&gt;body { padding: 10px; }&lt;/style&gt;&lt;p&gt;윈도우 Application을 통하여 system을 개발하는 것이 유용하긴 하지만 그 개발을 포장하는데 있어서 또는 사용자에게 편리성을 주기위해서 제작되는 user application의 경우 그한계가 있는 것이 사실이다 물론 ms사에서도 wpf와 같은 것을 제공해 주기는 하지만 Adobe사의 Air를 통하여 프로그램을 제작해 보기로 하였다. &lt;br /&gt;&lt;br /&gt;아쉽지만 아직까지는 탐색기, iexplore등 window application은 AIR에서 통제할 수 있는 영역이 아니다. 따라서 여러 우회적인 방법을 이용하여 그것을 control하여야 한다.&lt;br /&gt;&lt;br /&gt;1) AIR CONNECTOR&lt;br /&gt;&lt;br /&gt;일반적으로 Air에서는 AIRConnector라는 api를 지원하여 여러 window application과의 혼용을 허락하고 있다. 그 실행단계를 보면&lt;br /&gt;1.Air connector 실행&lt;br /&gt;&amp;nbsp;1.1. AIRConnector.exe(윈도우 커맨드 에이전트)를 실행한 다음 Run버튼을 클릭하면 에이전트가 에어의 커맨드 메시지를 모니터링하기 시작한다. &lt;br /&gt;&amp;nbsp;: 모니터링 주기는 기본적으로 1초로 되어 있으며 주기는 바꿔 줄 수 있다. &lt;br /&gt;&amp;nbsp;1.2. AIRConnector 에어 애플리케이션을 실행한다. &lt;br /&gt;&lt;br /&gt;2. 윈도우 애플리케이션 구동 테스트&lt;br /&gt;&amp;nbsp;2.1. 상단의 메모장, 엑셀, 계산기, 웹브라우저&amp;nbsp; 버튼을 클릭하면 해당 윈도우 애플리케이션이 실행된다.&lt;br /&gt;&amp;nbsp;2.2. 텍스트창에 URL을 넣고 엔터를 누르면 웹브라우저가 실행된다.&lt;br /&gt;&amp;nbsp;2.3. Window Communication Test탭메뉴의 파일 리스트를 더블 클릭하면 파일확장자에 따른 윈도우 애플리케이션이 실행된다. &lt;br /&gt;&amp;nbsp;: 메모장, 엑셀, 워드, 파워포인트, 웹브라우저만 지원&lt;br /&gt;&amp;nbsp;2.4. Excel Reporting 테스트&lt;br /&gt;&amp;nbsp;: Excel Reporting 탭 메뉴의 'Excel export'버튼을 클릭하면 데이터그리드의 데이터를 엑셀로 바로 출력 한다. &lt;br /&gt;다음과 같은 과정을 거치게 된다. &lt;br /&gt;&lt;br /&gt;Air connector Api는 &lt;a href=&quot;http://code.google.com/p/airconnector/&quot;&gt;http://code.google.com/p/airconnector/&lt;/a&gt;&amp;nbsp;에서 받아서 설치할 수 있다. 하지만 Air Connector의 경우 아직 안정성의 부족하다는점, 제한된 프로그램만을 사용할 수 있다는 점 등이 불편한 요소로 여겨지고 있다. 따라서 이번프로젝트에서는 다른 방식을 통해 두 프로그램간의 연동성을 확보해 보려하였다.&lt;br /&gt;&lt;br /&gt;2) Control by Iexplore&lt;br /&gt;두번째로 시도된 방식은 iexplore를 통하여 프로그램을 연동하는 방식이다. &lt;br /&gt;&lt;img src=&quot;../../attach/1/1381109706.jpg?randseed=0.5783782882463656&quot; alt=&quot;&quot; style=&quot;margin-top: 34.8649px; width: 542px; height: 90px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt;&lt;/p&gt;&lt;p&gt;다음과 같이 path를 잡아준 다음 이것을 navigateToURL을 이용하여 주소를 뿌려주게 된다면 iexplore를 이용하여 프로그램을 실행시켜주는 방식을 택하게 되는 것이다. 테스트 결과 iexplore에서는 원활하게 작동을 &lt;br /&gt;&lt;/p&gt;&lt;p&gt; &lt;img src=&quot;../../attach/1/1124435271.jpg?randseed=0.6092365344735882&quot; alt=&quot;&quot; style=&quot;margin-top: 7.65998px; width: 592px; height: 287px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt;&lt;/p&gt;&lt;p&gt;compliment by Windows&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;../../attach/1/1046782102.jpg?randseed=0.6513016094662439&quot; alt=&quot;&quot; style=&quot;margin-top: 7.5px; width: 573px; height: 225px;&quot; onerror=&quot;this.src='/style/admin/default/image/spacer.gif'&quot;&gt;&lt;/p&gt;&lt;p&gt;compliment by OS X&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하는 것을 확인하였지만 OS X의 경우는 실행의 오류가 발생하는 것을 발견할 수 있었다. 또다른 문제점의 경우 Iexplore를 통해서 외부 application을 실행 시킬 경우 보안성 문제가 발생하기 때문에 한번더 실행확인을 요구하는 경고창이 뜨게 되는데 이것이 번거로울 가능성이 있었다. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;이러한 문제를 해결하기 위해 차선책을 강구해보았다.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3) C#의 process에 의한 windowstate제어하기&lt;/p&gt;&lt;p&gt;C#을 통해서는 얼마든지 window process들을 제어할 수 있기때문에 이 방법을 사용해 보도록 하였다. interface application을 Air를 통해서 제작을 한다음 특정 command가 수행되게 되면 이를 io file에 저장하게 되고 이를 다시 C#의 eventListener를 통해 탐지하고 있다가 명령을 수행하는 방법을 사용하게 하였다. &lt;/p&gt;&lt;p&gt;1. 실행판단&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[##_1L|1144502323.jpg|width=&quot;600&quot; height=&quot;180&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Tahoma;&quot;&gt;위와 같이 GetProcesses 함수를 이용하여 실행시킬 파일의 이름과 비교한다. 이때 파일 이름은 &quot;.exe&quot; 앞의 문자열만 해당된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Tahoma;&quot;&gt;2. 실행중인 프로그램 활성화&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Tahoma;&quot;&gt; &lt;/span&gt;[##_1C|1289304082.jpg|width=&quot;600&quot; height=&quot;180&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Tahoma;&quot;&gt;우선 위와 같이 API 함수를 선언한다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Tahoma;&quot;&gt;이 때 SW_SHOWNORMAL 상수는 WindowState를 결정하는 상수이다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Tahoma;&quot;&gt;window를 숨기거나 최대화, 최소화 등으로 설정할 수도 있는데 이것은 해당 상수를 위와같이 선언하고 파라미터로 넘기면 된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;다음과 같은 방식을 이용하여 프로세스를 활성화 시켜서 원하는 window application을 수행할 수 있는 것이다.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[##_1L|1340880438.jpg|width=&quot;600&quot; height=&quot;250&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이러한 작업을 수행하던도중 몇가지 문제가 발생하게 되었는데 바로 application이 Air Application 하단부에 깔려서 떠버리는 상황이 발생하게 되었다. 이러한 문제를 해결하기 위해서 SetWindowProc라는 방식을 이용하였다. 이는 일부 동영상을 재생하는데에 있어서 어떠한 이벤트가 발생하더라도 방해받지 않고 최상위의 작업환경을 유지하기 위한 방식으로써 흔히 사용되는 기술이다. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;[##_1C|1122727242.jpg|width=&quot;658&quot; height=&quot;194&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다음과 같은 함수를 이용하여 실행시킨 application을 최상위 포지션을 유지할 수 있도록하여 프로그램을 사용자가 원활하게 사용할 수 있도록 설계하였다. &lt;br /&gt;&lt;/p&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>DirectShow 환경 설정 방법 </title>
            <link>http://www.swssm.org/index.php?idx=307</link>
            <description>&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;무엇이든 개발을 위해서는 필요한 툴들이 있고, 이 툴들을 사용하기 위한 환경설정도 매우 골치 아픈 문제입니다. 이번 프로젝트를 위해서 DirectShow를 사용해야 합니다. DirectShow를 사용하기 위해서는 Direct-X SDK가 필요합니다. 그런데 최근에는 Direct-X SDK 에 있던 DirectShow 까지 Windows SDK 로 통합되었습니다. 하지만 DirectShow를 사용하기 위해서는 DirectDraw가 필요한데, DirectShow 는 Windows SDK 에, DirectDraw 는 Direct-X SDK 에 있는 상황입니다. Windosw SDK로 넘어오면서 뭔가 꼬인듯한 느낌이 들지만, (DXSDK 8.1은 Windows SDK없이 DirectShow 사용가능) 결국, DirectShow 개발을 위해서는 Windows SDK 와 Direct-X SDK 를 모두 설치해야하는 상황입니다.&lt;/P&gt; &lt;P class=바탕글&gt;여기서, Direct-X SDK 같은 경우 Direct-X가 업데이트 되면서 SDK도 업데이트가 지속적으로 이루어지고 있습니다. 하지만, DirectShow의 모든 기능을 사용하기 위해서는 특정한 버전의 Direct-X SDK가 필요 합니다. 바로 DirectX SDK - (August 2007)입니다. DirectX SDK - (August 2007) 이라는 특정한 SDK 버전의 설치를 권유하는 이유는 바로 DirectShow의 DES 기능을 지원하는 Direct-X 9 기반의 최신 버전이기 때문입니다. 이후의 DirectX SDK 경우에는 DES 기능이 있는 (qedit.h)가 빠져 있기 때문에 사용하기 위해서는 별도의 과정이 필요합니다.&lt;br /&gt;&lt;br /&gt;[##_1C|1077978923.jpg|width=&quot;567&quot; height=&quot;573&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt;&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;준비물은 비주얼 스튜디오, Windows SDK, 그리고 Direct-X SDK가 필요합니다. &lt;/P&gt; &lt;P class=바탕글&gt;1. Windows SDK for Windows Server 2008 and .NET Framework 3.5&lt;/P&gt; &lt;P class=바탕글&gt;&lt;U style=&quot;text-underline: #0000ff single&quot;&gt;&lt;SPAN lang=EN-US style=&quot;COLOR: #0000ff&quot;&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&amp;amp;displaylang=en&lt;/SPAN&gt;&lt;/U&gt;&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;2. DirectX SDK - (August 2007)&lt;/P&gt; &lt;P class=바탕글&gt;&lt;U style=&quot;text-underline: #0000ff single&quot;&gt;&lt;SPAN lang=EN-US style=&quot;COLOR: #0000ff&quot;&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=529f03be-1339-48c4-bd5a-8506e5acf571&lt;/SPAN&gt;&lt;/U&gt;&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;위의 SDK 들을 모두 설치가 완료 되었다면, Visual Studio에 설정하는 일만 남았습니다. &lt;/P&gt; &lt;P class=바탕글&gt;[##_1C|1186764059.jpg|width=&quot;567&quot; height=&quot;356&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;!--StartFragment--&gt; &lt;P class=바탕글 style=&quot;MARGIN-BOTTOM: 1.6pt&quot;&gt;도구 - 옵션으로 들어가서 위 화면을 따라갑니다.아마 Windows SDK 를 비주얼 스튜디오에 등록하고 난 다음이라면,VC++ 디렉터리 항목의 &quot;실행 파일&quot; 카테고리에&lt;br /&gt;C:\Program Files\Microsoft SDKs\Windows\v6.1\bin &lt;br /&gt;C:\Program Files\Microsoft DirectX SDK (August 2007)\Utilities\Bin\x86&lt;/P&gt; &lt;P class=바탕글 style=&quot;MARGIN-BOTTOM: 1.6pt&quot;&gt;두 개를 추가합니다. 순서가 중요한데, 위 화면과 똑같은 순서대로 등록하시길 바랍니다.&lt;br /&gt;&lt;br /&gt;이번엔 &quot;포함 파일&quot; 입니다. &lt;br /&gt;[##_1C|1066080441.jpg|width=&quot;567&quot; height=&quot;353&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]C:\Program Files\Microsoft DirectX SDK (August 2007)\include&lt;br /&gt;C:\Program Files\Microsoft SDKs\Windows\v6.1\include&lt;br /&gt;C:\Program Files\Microsoft DirectX SDK (August 2007)\Samples\C++\DirectShow\BaseClasses&lt;br /&gt;역시 위 화면과 같은 순서로 등록하셔야 합니다.&lt;br /&gt;&lt;br /&gt;이번엔 &quot;라이브러리 파일&quot; 입니다.&lt;/P&gt; &lt;P class=바탕글&gt;[##_1C|1247337221.jpg|width=&quot;567&quot; height=&quot;352&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;!--StartFragment--&gt; &lt;P class=바탕글 style=&quot;MARGIN-BOTTOM: 1.6pt&quot;&gt;C:\Program Files\Microsoft DirectX SDK (August 2007)\Lib\x86&lt;br /&gt;C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib&lt;/P&gt; &lt;P class=바탕글 style=&quot;MARGIN-BOTTOM: 1.6pt&quot;&gt;역시 위 화면과 같은 순서로 등록하셔야 합니다.&lt;br /&gt;이제...&lt;br /&gt;C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\BaseClasses이 폴더로 간 다음에,&lt;/P&gt; &lt;P class=바탕글&gt;[##_1C|1065631094.jpg|width=&quot;567&quot; height=&quot;371&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;!--StartFragment--&gt; &lt;P class=바탕글 style=&quot;MARGIN-BOTTOM: 1.6pt&quot;&gt;&amp;nbsp; 위 화면에 보이는 baseclasses.sln 솔루션 파일을 열어서 빌드 - 일괄 빌드로 들어가서. Debug 와 Release 버전 모두를 한꺼번에 빌드합니다.&lt;br /&gt;&amp;nbsp; 이 작업을 하는 이유는 DirectShow 를 위해서는strmbasd.lib 와 strmbase.lib 파일이 필요하기 때문입니다.DirectShow 호출을 하기에 앞서서 함수 정의와 포인터를 모아놓은 lib 파일이 필요합니다.&lt;!--StartFragment--&gt;&lt;/P&gt; &lt;P class=바탕글 style=&quot;MARGIN-BOTTOM: 1.6pt&quot;&gt;빌드하고 나서 해당 폴더로 이동하면Debug 와 Release 폴더가 생성된 모습을 확인할 수 있습니다.각각의 폴더에서.strmbasd.lib, strmbase.lib 파일을 복사해서 C:\Program Files\Microsoft SDKs\Windows\v6.0\Lib 로 복사합니다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; 여기까지 마치면 프로젝트를 위한 모든 작업이 끝난 것인데,막상 프로젝트를 생성해서 작업할 때에는 추가적으로 해줘야할 일이 있습니다.&lt;br /&gt;프로젝트 -&amp;gt; 속성 -&amp;gt; 구성 속성 -&amp;gt; 링커 -&amp;gt; 입력 항목으로 이동하여 &quot;추가 종속성&quot; 항목에 strmbase.lib (release일 경우)strmbasd.lib (debug일 경우) 를 각각 설정해주셔야 합니다.&lt;br /&gt;매번 옵션에 들어가서 이것을 해주는게 번거로울 경우.코드 상단에 &lt;br /&gt;#if defined( _DEBUG )&lt;br /&gt;#pragma comment( lib, &quot;strmbasd&quot; )&lt;br /&gt;#else#pragma comment( lib, &quot;strmbase&quot; )&lt;br /&gt;#endif // &lt;br /&gt;_DEBUG이렇게 조건부 컴파일을 걸어서 lib 종속성을 설정하시면 됩니다.&lt;br /&gt;&lt;br /&gt;이제 DirectShow 를 위한 모든 환경이 구성되었습니다. &lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>MFC 대화 상자 기반 응용 프로그램에서 마우스 이벤트 발생 </title>
            <link>http://www.swssm.org/index.php?idx=308</link>
            <description>&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;span style=&quot;font-weight: bold; font-size: 15pt;&quot; lang=&quot;EN-US&quot;&gt;MFC 대화 상자 기반 응용 프로그램에서 마우스 이벤트 발생&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;[##_1L|1268009927.jpg|width=&quot;567&quot; height=&quot;294&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;위의 그림과 같이 대화 상자 기반 응용 프로그램을 만든 후, &lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;다이얼로그 클래스에서 마우스 이벤트를 발생시키는 이벤트 처리기를 추가 시키더라도&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;List Box , Picture Control , Edit Control 과 같은 박스 창에서는 마우스 이벤트가&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;발생하지 않았습니다.&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;이러한 대화 상자 기반 응용 프로그램 작성 시에 컨트롤이나 박스 창에서 마우스 이벤트가&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;발생 시킬려고 하려면...&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; 첫째.&lt;/span&gt; 해당 컨트롤이나 박스 창을 상속하는 클래스를 새로 만듭니다.&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt; 저는 List Box에서 마우스 이벤트를 발생시키고자 새로운 클래스를 만든 후 List Box를 상속 했습니다.&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;[##_1L|1392389321.jpg|width=&quot;567&quot; height=&quot;284&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;둘째&lt;/span&gt; , 해당 클래스에서 마우스 이벤트 발생 처리기를 만들어 줍니다.&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt; 아래 그림과 같이 해당 마우스 이벤트 처리 함수에 원하는 적습니다.&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;[##_1L|1332887344.jpg|width=&quot;549&quot; height=&quot;375&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;셋째&lt;/span&gt;, 다이얼로그 클래스에서 마우스 이벤트를 일으키고자 하는 Control 이나 Box 변수를&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;만들어 줍니다. ( 아래그림은 List Box 변수를 만들어 준 화면입니다.)&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;[##_1L|1332887344.jpg|width=&quot;549&quot; height=&quot;375&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;넷째&lt;/span&gt;, 만들어준 변수를 앞에서 만든 새롭게 만든 클래스의 변수로 바꾸어 줍니다.&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;[##_1L|1372526379.jpg|width=&quot;567&quot; height=&quot;353&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;이제 대화 상자안의 List Box 안에서도 마우스 이벤트를 발생시킬 수 있습니다.&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot;&gt;[##_1L|1294577001.jpg|width=&quot;567&quot; height=&quot;284&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;바탕글&quot; style=&quot;text-align: center;&quot;&gt;&amp;lt;해당 하는 마우스 명령이 발생 한 그림&amp;gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;바탕글&quot;&gt;&lt;span style=&quot;font-weight: bold; font-size: 15pt;&quot; lang=&quot;EN-US&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>GPS 데이터 형식 NMEA </title>
            <link>http://www.swssm.org/index.php?idx=305</link>
            <description>&lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US&gt;NMEA &lt;/SPAN&gt;분석&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;NMEA &lt;/SPAN&gt;라고 주로 불리는&lt;SPAN lang=EN-US&gt; NMEA 0183&lt;/SPAN&gt;은 시간&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;위치&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;방위 등의 정보를 전송하기 위한 규격이다&lt;SPAN lang=EN-US&gt;. NMEA 0183&lt;/SPAN&gt;은 미국의&lt;SPAN lang=EN-US&gt; The National Marine Electronics Association&lt;/SPAN&gt;에서 정의해 놓았다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;이 데이터들은 주로&lt;SPAN lang=EN-US&gt; gyrocompass, GPS, &lt;/SPAN&gt;나침반&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;관성항법장치&lt;SPAN lang=EN-US&gt;(INS)&lt;/SPAN&gt;에 사용된다&lt;SPAN lang=EN-US&gt;. (&lt;/SPAN&gt;위키 백과 참조&lt;SPAN lang=EN-US&gt;)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;즉&lt;SPAN lang=EN-US&gt;, GPS&lt;/SPAN&gt;에서 오는 데이터들은&lt;SPAN lang=EN-US&gt; NMEA &lt;/SPAN&gt;형식으로 온다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;데이터 형식은&lt;SPAN lang=EN-US&gt; GPGGA(Global Positioning System Fix Data), &lt;/SPAN&gt;사용하지 않는&lt;SPAN lang=EN-US&gt; GPGSA, GPGSV(GPS Satellites in View), &lt;/SPAN&gt;추천되는 가장 최소한의 데이터들을 모아 둔 형식인&lt;SPAN lang=EN-US&gt; GPRMC(Recommended Minimum data)&lt;/SPAN&gt;로 나눌 수 있다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;우리 프로젝트에서는 가장 많이 쓰는 형식인&lt;SPAN lang=EN-US&gt; GPRMC&lt;/SPAN&gt;를 사용하였다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;아래에&lt;SPAN lang=EN-US&gt; GPS &lt;/SPAN&gt;수신기로부터 받은 데이터의 일부를 나타내었다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-no-proof: yes&quot;&gt;&lt;?xml:namespace prefix = v ns = &quot;urn:schemas-microsoft-com:vml&quot; /&gt;&lt;v:shapetype id=_x0000_t75 stroked=&quot;f&quot; filled=&quot;f&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; o:preferrelative=&quot;t&quot; o:spt=&quot;75&quot; coordsize=&quot;21600,21600&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype=&quot;rect&quot; gradientshapeok=&quot;t&quot; o:extrusionok=&quot;f&quot;&gt;&lt;/v:path&gt;&lt;o:lock aspectratio=&quot;t&quot; v:ext=&quot;edit&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=그림_x0020_1 style=&quot;VISIBILITY: visible; WIDTH: 384pt; HEIGHT: 351.75pt; mso-wrap-style: square&quot; o:borderrightcolor=&quot;#4f81bd&quot; o:borderbottomcolor=&quot;#4f81bd&quot; o:borderleftcolor=&quot;#4f81bd&quot; o:bordertopcolor=&quot;#4f81bd&quot; type=&quot;#_x0000_t75&quot; o:spid=&quot;_x0000_i1025&quot;&gt;&lt;v:imagedata o:title=&quot;&quot; src=&quot;file:///C:\DOCUME~1\이주희\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.png&quot;&gt;&lt;/v:imagedata&gt;&lt;?xml:namespace prefix = w ns = &quot;urn:schemas-microsoft-com:office:word&quot; /&gt;&lt;w:bordertop type=&quot;single&quot; width=&quot;6&quot;&gt;&lt;/w:bordertop&gt;&lt;w:borderleft type=&quot;single&quot; width=&quot;6&quot;&gt;&lt;/w:borderleft&gt;&lt;w:borderbottom type=&quot;single&quot; width=&quot;6&quot;&gt;&lt;/w:borderbottom&gt;&lt;w:borderright type=&quot;single&quot; width=&quot;6&quot;&gt;&lt;/w:borderright&gt;&lt;/v:shape&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;이 값들이 의미하는 것에 대해 간략히 요약하자면&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US style=&quot;BACKGROUND: fuchsia; mso-highlight: fuchsia&quot;&gt;$GPRMC&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;,093050.677,A,3733.6772,N,12656.1484,E,1.85,126.44,190609,,,A*66 &lt;/SPAN&gt;에서 &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;$GPRMC&lt;/SPAN&gt;는&lt;SPAN lang=EN-US&gt; NMEA &lt;/SPAN&gt;데이터 형식을 말한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;$GPRMC,&lt;SPAN style=&quot;BACKGROUND: fuchsia; mso-highlight: fuchsia&quot;&gt;093050.677&lt;/SPAN&gt;,A,3733.6772,N,12656.1484,E,1.85,126.44,190609,,,A*66&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;그 다음 &lt;SPAN lang=EN-US&gt;093050.677 &lt;/SPAN&gt;는 시간을 말한다&lt;SPAN lang=EN-US&gt;. &lt;SPAN style=&quot;COLOR: black&quot;&gt;zulutime &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: black&quot;&gt;기준으로&lt;SPAN lang=EN-US&gt; 09&lt;/SPAN&gt;시&lt;SPAN lang=EN-US&gt; 30&lt;/SPAN&gt;분&lt;SPAN lang=EN-US&gt; 50.677&lt;/SPAN&gt;초 이다&lt;SPAN lang=EN-US&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;$GPRMC,093050.677,&lt;SPAN style=&quot;BACKGROUND: fuchsia; mso-highlight: fuchsia&quot;&gt;A&lt;/SPAN&gt;,3733.6772,N,12656.1484,E,1.85,126.44,190609,,,A*66&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;지금 출력되는 값이 쓸 수 있는 유효한 값이라면&lt;SPAN lang=EN-US&gt; A &lt;/SPAN&gt;이고&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;그렇지 않으면&lt;SPAN lang=EN-US&gt; V&lt;/SPAN&gt;로 표시된다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;$GPRMC,093050.677,A,&lt;SPAN style=&quot;BACKGROUND: fuchsia; mso-highlight: fuchsia&quot;&gt;3733.6772&lt;/SPAN&gt;,N,12656.1484,E,1.85,126.44,190609,,,A*66&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;이 값은 위도 이다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;$GPRMC,093050.677,A,3733.6772,&lt;SPAN style=&quot;BACKGROUND: fuchsia; mso-highlight: fuchsia&quot;&gt;N&lt;/SPAN&gt;,12656.1484,E,1.85,126.44,190609,,,A*66&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;N&lt;/SPAN&gt;은 북위를 말한다&lt;SPAN lang=EN-US&gt;. S&lt;/SPAN&gt;이면 남위&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;$GPRMC,093050.677,A,3733.6772,N,&lt;SPAN style=&quot;BACKGROUND: fuchsia; mso-highlight: fuchsia&quot;&gt;12656.1484,E&lt;/SPAN&gt;,1.85,126.44,190609,,,A*66&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;경도를 말하며&lt;SPAN lang=EN-US&gt; E&lt;/SPAN&gt;는 동경을 말한다&lt;SPAN lang=EN-US&gt;. W &lt;/SPAN&gt;서경&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;$GPRMC,093050.677,A,3733.6772,N,12656.1484,E,&lt;SPAN style=&quot;BACKGROUND: fuchsia; mso-highlight: fuchsia&quot;&gt;1.85&lt;/SPAN&gt;,126.44,190609,,,A*66&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10pt; mso-char-indent-count: 1.0&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;Speed over ground&lt;/SPAN&gt;라고 하는데&lt;SPAN lang=EN-US&gt;knots &lt;/SPAN&gt;단위의 속도이다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10pt; mso-char-indent-count: 1.0&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;$GPRMC,093050.677,A,3733.6772,N,12656.1484,E,1.85,&lt;SPAN style=&quot;BACKGROUND: fuchsia; mso-highlight: fuchsia&quot;&gt;126.44&lt;/SPAN&gt;,190609,,,A*66&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;Track Angle in degree true&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;$GPRMC,093050.677,A,3733.6772,N,12656.1484,E,1.85,126.44,&lt;SPAN style=&quot;BACKGROUND: fuchsia; mso-highlight: fuchsia&quot;&gt;190609&lt;/SPAN&gt;,,,A*66&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;날짜이다&lt;SPAN lang=EN-US&gt;. 19&lt;/SPAN&gt;일 &lt;SPAN lang=EN-US&gt;6&lt;/SPAN&gt;월&lt;SPAN lang=EN-US&gt; 2009&lt;/SPAN&gt;년을 뜻함&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>ASP.NET을 사용하는 XML Web services - Part 4 Test를 해 봅시다. </title>
            <link>http://www.swssm.org/index.php?idx=299</link>
            <description>서비스를 구현을 합니다. &lt;br /&gt;하지만 웹서비스이고 따로 Test할 수 있는 내용까지 구현해가면서 언제 서비스를 구현을 할까요??&lt;br /&gt;이거 사용해보기 전에 어떤 결과가 나오는지 알지 모르면서, 사용하려면 얼마나 불안할까요???&lt;br /&gt;하는 배려에서인지, 컴파일결과 나오는 웹페이지에서는 서비스를 Test할 수 있도록 배려가 되어있습니다.&lt;br /&gt;&lt;br /&gt;이번 포스팅에서는 Test를 하는 과정에 대해서 이야기해보도록 하겠습니다.&lt;br /&gt;보너스??로 한가지 더 안 내용을 추가해서 포스팅해보도록 하지요 ^^&lt;br /&gt;&lt;br /&gt;Test를 하기위해서 다시한번 ctrl + F5를 눌러보도록합니다.&lt;br /&gt;그러면 저번에도 봤었던 웹서비스의 웹이 뜹니다.&lt;br /&gt;그때는 이 서비스 자체의 URL에 관심이있었지만, 이번에는 그 내용을 보도록 합시다.&lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=266 alt=&quot;&quot; src=&quot;http://cfile2.uf.tistory.com/image/190B76274A45AFE21AFC4D&quot; width=432&gt; &lt;P class=cap1&gt;NaviService의 내용&lt;/P&gt;&lt;/DIV&gt; &lt;P&gt;네가지의 서비스가 지원되는 것 처럼 보입니다. &lt;br /&gt;여기서 Test해보고 싶은 서비스를 선택하여봅시다. 저는 여기서 GetNaviDataWithCongnamulStrings를 선택해보도록&lt;br /&gt;하겠습니다.&lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=344 alt=&quot;&quot; src=&quot;http://cfile3.uf.tistory.com/image/151629274A45AFE108B625&quot; width=517&gt; &lt;P class=cap1&gt;GetNaviDataWithCongnamulStrings 의 내용&lt;/P&gt;&lt;/DIV&gt; &lt;P&gt;보다싶이 Test를 위하여 매개변수를 넣는 내용이 나타납니다. &lt;br /&gt;이 매게변수에 저번에 클라이언트에서 Test를 위해 사용했던 좌표를 넣어보도록 합시다.&lt;br /&gt;바로 이 내용을 실행하는 것이지욤!&lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfile3.uf.tistory.com/original/197369274A45AFE42052AA')&quot; height=195 alt=&quot;&quot; src=&quot;http://cfile3.uf.tistory.com/image/197369274A45AFE42052AA&quot; width=600&gt; &lt;P class=cap1&gt;Test하는 내용과 같습니다.&lt;/P&gt;&lt;/DIV&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;파라미터를 모두 넣은 다음에는 호출을 눌러봅시다. 그러면 결과를 확인할 수 있습니다.&lt;br /&gt;다음&lt;SPAN id=callbacknestdal2iyatistorycom1145086 style=&quot;FLOAT: right; WIDTH: 1px; HEIGHT: 1px&quot;&gt;&lt;EMBED id=bootstrapperdal2iyatistorycom1145086 src=http://dal2iya.tistory.com/plugin/CallBack_bootstrapperSrc?nil_profile=tistory&amp;amp;nil_type=copied_post width=1 height=1 type=application/x-shockwave-flash allowscriptaccess=&quot;always&quot; wmode=&quot;transparent&quot; EnableContextMenu=&quot;false&quot; FlashVars=&quot;&amp;amp;callbackId=dal2iyatistorycom1145086&amp;amp;host=http://dal2iya.tistory.com&amp;amp;embedCodeSrc=http%3A%2F%2Fdal2iya.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3Dhttp%3A%2F%2Fcfs.tistory.com%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D114%26callbackId%3Ddal2iyatistorycom1145086%26destDocId%3Dcallbacknestdal2iyatistorycom1145086%26host%3Dhttp%3A%2F%2Fdal2iya.tistory.com%26float%3Dleft&quot; swLiveConnect=&quot;true&quot;&gt;&lt;/SPAN&gt; 두 그림은 호출을 눌러서 나온 결과와 저번시간 예제의 내용을 비교한 내용입니다.&lt;br /&gt; &lt;DIV class=&quot;imageblock dual&quot; style=&quot;TEXT-ALIGN: center&quot;&gt; &lt;TABLE style=&quot;MARGIN: 0px auto&quot; cellSpacing=5 cellPadding=0 border=0&gt; &lt;TBODY&gt; &lt;TR&gt; &lt;TD&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfile22.uf.tistory.com/original/1213FB274A45AFE11B2EAF')&quot; height=483 alt=&quot;&quot; src=&quot;http://cfile22.uf.tistory.com/image/1213FB274A45AFE11B2EAF&quot; width=336&gt; &lt;P class=cap1&gt;Test Page를 통해서 나온 결과&lt;/P&gt;&lt;/TD&gt; &lt;TD&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfile24.uf.tistory.com/original/1668E3274A45AFE5321AAD')&quot; height=192 alt=&quot;&quot; src=&quot;http://cfile24.uf.tistory.com/image/1668E3274A45AFE5321AAD&quot; width=336&gt; &lt;P class=cap1&gt;클라이언트에서 사용해서 나온 결과&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;br /&gt; &lt;P&gt;&amp;nbsp;두 내용이 같음을 확인할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;그런데 여기서간과하지 않고 넘어가야할 내용 한가지!&lt;br /&gt;&amp;nbsp;Test Page를 통해서 Test를 한 결과는 xml형태로 데이터를 제공합니다. &lt;br /&gt;&amp;nbsp;이는 제가 따로 구현한 결과가 아니라, 클래스 형태로 저장되었던 데이터들을 xml형식에 맞추어서&lt;br /&gt;&amp;nbsp;web Service자체에서 출력하여주는 것입니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이로인해 얻을수 있는 장점은 많습니다.&lt;br /&gt;&amp;nbsp;xml형태로 제공하기 때문에 어떠한 언어에서든지 결과를 passing하여 사용할 수 있습니다.&lt;br /&gt;&amp;nbsp;또한 .net framework를 사용하는 언어의 경우에는 클라이언트에서 그 내용을 리턴하는 객체로 그대로 받아서 사용할 수 있습니다.&lt;br /&gt;&lt;br /&gt;이것이 가능한 것은 asp.net web service는 soap형태로 표준으로 구현이 되어있기 때문에&lt;br /&gt;어떠한 언어에서도 사용할 수있다고...하던데요???&lt;br /&gt;&lt;br /&gt;이상으로 이번 포스팅은 마치도록 하겠습니다. &lt;br /&gt;다음번 포스팅에서는 Method의 Name에 대해서 이야기 해보고 싶습니다.&lt;br /&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>ASP.NET을 사용하는 XML Web services - Part 3 어떤것이 서비스되고, 어떤것이 ...</title>
            <link>http://www.swssm.org/index.php?idx=300</link>
            <description>이 포스팅을 작성하는 이 순간에도 저는 모르던 새로운 기술에 대하여 배우면서 쓰는것이라,&lt;br /&gt;내용이 가볍다고 느껴질 수도 있습니다 -_ㅠ만..&lt;br /&gt;처음하면서 이상하다고 느꼈던점, 알아두면 좋겠다는 점을 주로 포스팅을 하기 때문에 많은 도움이 될것이라고 생각합니다.&lt;br /&gt;구현하면서 느낀거지만 웹서비스는 참 재미있는 내용인것 같습니다.&lt;br /&gt;&lt;br /&gt;시작하기전에 잡솔을 좀 석는다면,&lt;br /&gt;Javascribt도 웹 서비스를 할 수 있습니다만,, 예, 다음과 같이 서비스를 제공하기위해 ASP.net web service를 구현하기전&lt;br /&gt;잠깐 써보았던 Javascript과 비슷한것 같으면서도 차이가 느껴지더군염,,&lt;br /&gt;그점에 대해서도 포스팅을 하면 재밌을것 같습니다. ㅋ 여유가 생기면 그점에 관해서도 포스팅을 하도록 하겠습니다.&lt;br /&gt;그러고보니, javascript와 ASP Service와의 차이때문에, 어렵게 돌아가면서 구현했던 내용이 생각나는군염,&lt;br /&gt;그것에 관해서도 다음에 포스팅을 하도록 하겠습니다. ^^ &lt;br /&gt;&lt;br /&gt;그러면, 이번엔 Part 2 어떤것이 서비스가 되고, 어떤것이 되지 않는지에 관해서 포스팅을 하려고 합니다.&lt;br /&gt;물론 구현을 하지 않은 내용은 서비스가 되지 않겠지, 라는 생각은 당연히 하실것입니다.&lt;br /&gt;하지만 구현한 내용도 제공되지 않는다고 한다면...??&lt;br /&gt;&lt;br /&gt;사실, 구현한 모든 내용은, 사용하고자 하고 구현하였다면, 모든 기능이 서비스가 됩니다. &lt;br /&gt;하지만 그 서비스의 정의가, 참조하여 사용할 수 있는 것이라면 다릅니다.&lt;br /&gt;&lt;br /&gt;이번 프로젝트를 위해서 구현한 내용을 예를 들어서 설명하자 합니다.&lt;br /&gt;다음은 OpenApi를 다시 제공하기 위해서 구현한 내용입니다.&lt;br /&gt;&amp;nbsp; &lt;DIV class=&quot;imageblock dual&quot; style=&quot;TEXT-ALIGN: center&quot;&gt; &lt;TABLE style=&quot;MARGIN: 0px auto&quot; cellSpacing=5 cellPadding=0 border=0&gt; &lt;TBODY&gt; &lt;TR&gt; &lt;TD&gt;&lt;IMG height=382 alt=&quot;&quot; src=&quot;http://cfile5.uf.tistory.com/image/1468CD264A459CC3133755&quot; width=241&gt; &lt;P class=cap1&gt;cs로 구현된 내용들&lt;/P&gt;&lt;/TD&gt; &lt;TD&gt;&lt;IMG height=432 alt=&quot;&quot; src=&quot;http://cfile4.uf.tistory.com/image/190BD6274A459DB9010BE5&quot; width=241&gt; &lt;P class=cap1&gt;asmx파일에 구현된 method들&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;꽤 많은 것들이 구현이 되어있음을 확인하 실 수 있습니다.&lt;br /&gt;자 그렇다면 여기서 서비스가 되는 항목들은 무엇이고, 서비스가 되지 않는 항목은 무엇이 있을까요??&lt;br /&gt;저번포스팅에서 포스팅 한 내용대로 다른 프로젝트에서 서비스를 참조하여 사용할 수 있는 내용은 다음과 같습니다.&lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock dual&quot; style=&quot;TEXT-ALIGN: center&quot;&gt; &lt;TABLE style=&quot;MARGIN: 0px auto&quot; cellSpacing=5 cellPadding=0 border=0&gt; &lt;TBODY&gt; &lt;TR&gt; &lt;TD&gt;&lt;IMG height=773 alt=&quot;&quot; src=&quot;http://cfile4.uf.tistory.com/image/195CF8274A459F4156DF9E&quot; width=278&gt; &lt;P class=cap1&gt;참조가능한 기능 part 1&lt;/P&gt;&lt;/TD&gt; &lt;TD&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfile24.uf.tistory.com/original/1422B3274A459F42680FBF')&quot; height=721 alt=&quot;&quot; src=&quot;http://cfile24.uf.tistory.com/image/1422B3274A459F42680FBF&quot; width=336&gt; &lt;P class=cap1&gt;참조가능한 기능 part 2&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt; &lt;P&gt;참 많이도 사용할 수 있습니다. 사실 구현된 내용이 많아서 그렀습니다.&lt;br /&gt;자 이렇게 많다면, 모든 구현한 내용을 참조하여 사용할 수 있는것일까요???&lt;br /&gt;&lt;br /&gt;원리를 찾아라도 아니고, 없을 것 같지만, 사실 여기에는 참조하여 직접 사용할 수 없는 구현내용이&lt;SPAN id=callbacknestdal2iyatistorycom1124314 style=&quot;FLOAT: right; WIDTH: 1px; HEIGHT: 1px&quot;&gt;&lt;EMBED id=bootstrapperdal2iyatistorycom1124314 src=http://dal2iya.tistory.com/plugin/CallBack_bootstrapperSrc?nil_profile=tistory&amp;amp;nil_type=copied_post width=1 height=1 type=application/x-shockwave-flash allowscriptaccess=&quot;always&quot; wmode=&quot;transparent&quot; EnableContextMenu=&quot;false&quot; FlashVars=&quot;&amp;amp;callbackId=dal2iyatistorycom1124314&amp;amp;host=http://dal2iya.tistory.com&amp;amp;embedCodeSrc=http%3A%2F%2Fdal2iya.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3Dhttp%3A%2F%2Fcfs.tistory.com%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D112%26callbackId%3Ddal2iyatistorycom1124314%26destDocId%3Dcallbacknestdal2iyatistorycom1124314%26host%3Dhttp%3A%2F%2Fdal2iya.tistory.com%26float%3Dleft&quot; swLiveConnect=&quot;true&quot;&gt;&lt;/SPAN&gt; 있습니다. &lt;br /&gt;한가지만 예를 들자면 ImageSearchEngine.cs입니다..&lt;br /&gt;(잘 찾아보세요, 정말 없습니다...)&lt;br /&gt;&lt;br /&gt;그럼 전 쓸곳이 없는것을 구현한 것인가?? 하면 그렇지 않습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=170 alt=&quot;&quot; src=&quot;http://cfile2.uf.tistory.com/image/182CA1264A45A0E48F52DC&quot; width=480&gt; &lt;P class=cap1&gt;분명히 사용하고 있습니다.&lt;/P&gt;&lt;/DIV&gt; &lt;P&gt;왜 저 내용은 참조하여 사용되지 않스빈다.&lt;br /&gt;ASP Service에서 참조되어 사용되는 것은 서비스 내에 구현된 내용은 참조되지 않고,&lt;br /&gt;외부에서 사용해야만 서비스에 접근할 수 있는 내용, 즉 파라미터의 내용이나 리턴타입의 경우는&lt;br /&gt;참조하여 사용할 수 있습니다.&lt;br /&gt;&lt;br /&gt;ImageSearchEngine같은 경우에는 Image를 찾아주는 static method를 가지는 engine인데,&lt;br /&gt;이 객체의 경우는 서비스 안에서 사용되기는 하지만, 리턴형이나 파라미터로 쓰이지 않기 때문에&lt;br /&gt;외부에서 다음과 같은 객체의 존재를 알든 모르든, 잘 동작할 수 있습니다.&lt;br /&gt;&lt;br /&gt;그렇기 때문에&amp;nbsp; ASP Service에서는 사용자가 사용해야만 서비스에 접근할 수 있는 내용들(파라미터,리턴타입)만&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;아무생각업시 막 구현하다, 클라이언트에서도 ImageSearchEngine을 참조하여 사용할 수 있겠지,,라고 생각하고보니&lt;br /&gt;사용할 수 없었기에,,, 알게된 내용이였습니다.&lt;br /&gt;&lt;br /&gt;만약 ImageSearchEngine을 클라이언트단에서 직접 사용하게 하고싶다면,,&lt;br /&gt;1. dll을 주세요=ㅠ-&lt;br /&gt;2. 억지로라도 파라미터나,리턴타입으로 주세요&lt;br /&gt;&lt;br /&gt;.. 하지만 잘 생각해보면 그럴 필요가 없다는 것을 알 수 있습니다.&lt;br /&gt;바로 웹서비스로 구현하여, 웹서비스를 통하여 ImageSearchEngine객체에서 필요한 내용을 쓰면 되는것이기 때문입니다. ^^&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이것으로 세번째 포스팅을 마치도록 하겠습니다. &lt;br /&gt;다음번 포스팅은 저 위쪽에 언급하엿던 내용들을 다루지 않을...까요? 허허허;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>ASP.NET을 사용하는 XML Web services - Part 2 서비스를 어떻게 사용할 수 있나욤?! </title>
            <link>http://www.swssm.org/index.php?idx=23</link>
            <description>&lt;P&gt;이번엔 저번에 구현한 서비스를 어떻게 클라이언트에서 사용할 수 있는지에 대하여 포스팅해보도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이번시간에 예로들 내용은 이번프로젝트에서 구현하였던 NaviService에 내용을 한번 사용해 보도록 하겠습니다.&lt;br /&gt;서비스에서 구현한 내용에서 ctrl + F5를 해봅시다.&lt;br /&gt;다음과 같은 웹페이지가 뜹니다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=426 alt=&quot;&quot; src=&quot;http://cfile5.uf.tistory.com/image/140BF1254A45A62E0122B0&quot; width=620&gt; &lt;P class=cap1&gt;디렉토리목록입니다. &lt;/P&gt;&lt;/DIV&gt; &lt;P&gt;&lt;br /&gt;&amp;nbsp;많은 서비스들이 있지만, 이번에 설명에 사용될 예제 서비스는 NaviService이므로 NaviService.asmx를 선택해 봅시다.&lt;br /&gt;그럼 다음과 같은 페이지가 뜹니다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=411 alt=&quot;&quot; src=&quot;http://cfile5.uf.tistory.com/image/126B86254A45A62D4917E7&quot; width=480&gt; &lt;P class=cap1&gt;NaviService 웹서비스의 모습&lt;/P&gt;&lt;/DIV&gt; &lt;P&gt;&lt;br /&gt;우리는 여기서 이 서비스에 간략하게 어떠한 내용들이 구현되어 있는가를 볼 수 있습니다.&lt;br /&gt;이 서비스에는 딸랑 네개의 서비스가 구현되어있군여.. (..ㅠㅠ 난힘들었는데...)&lt;br /&gt;&lt;br /&gt;이 서비스를 클라이언트에서 사용하기 위해서는 웹서비스의 주소를 복사합니다.&lt;br /&gt;자 그런다음, 사용할 클라이언트 단에서 사용하기 위해선 다음과같이 합니다.&lt;br /&gt;&lt;/P&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=312 alt=&quot;&quot; src=&quot;http://cfile22.uf.tistory.com/image/176474254A45AAB24F3341&quot; width=271&gt; &lt;P class=cap1&gt;Service Reference에 서비스참조를 추가해봅시다.&lt;/P&gt;&lt;/DIV&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;이미 몇개의 서비스가 추가되어 있습니다. 이번엔 다른 서비스를 추가하기위해 서비스참조를 추가해봅시다.&lt;br /&gt;오른쪽의 서비스참조를 추가 를 누르면 다음과 같은 새 창이 뜹니다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=530 alt=&quot;&quot; src=&quot;http://cfile2.uf.tistory.com/image/1267CE274A45AA612B67CC&quot; width=651&gt; &lt;P class=cap1&gt;서비스를 추가해봅시다.&lt;/P&gt;&lt;/DIV&gt; &lt;P&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;/P&gt; &lt;DIV class=&quot;imageblock dual&quot; style=&quot;TEXT-ALIGN: center&quot;&gt; &lt;TABLE style=&quot;MARGIN: 0px auto&quot; cellSpacing=5 cellPadding=0 border=0&gt; &lt;TBODY&gt; &lt;TR&gt; &lt;TD&gt;&lt;IMG height=283 alt=&quot;&quot; src=&quot;http://cfile2.uf.tistory.com/image/175D08274A45ABBC2FD568&quot; width=278&gt; &lt;P class=cap1&gt;서비스가 추가된 모습&lt;/P&gt;&lt;/TD&gt; &lt;TD&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfile21.uf.tistory.com/original/18546B244A45ABF166D771')&quot; height=469 alt=&quot;&quot; src=&quot;http://cfile21.uf.tistory.com/image/18546B244A45ABF166D771&quot; width=336&gt; &lt;P class=cap1&gt;서비스의 내용&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt; &lt;P&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;/P&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfile5.uf.tistory.com/original/145A66264A45ACDB7FA78E')&quot; height=222 alt=&quot;&quot; src=&quot;http://cfile5.uf.tistory.com/image/145A66264A45ACDB7FA78E&quot; width=683&gt; &lt;P class=cap1&gt;예제소스&lt;/P&gt;&lt;/DIV&gt; &lt;P&gt;&lt;br /&gt;여기서는 네임스페이스를 설정하지 않고 바로 사용하였습니다.&lt;br /&gt;그냥 평소에 서비스를 추가하여 사용하는것과 같이 사용하면 됩니다.&lt;br /&gt;서비스 객체를 선언한후, 객체를 할당하여줍니다. &lt;br /&gt;또 서비스 객체에서 파라미터로 사용하였던 객체도 사용할 수 있음을 확인할 수 있습니다.&lt;br /&gt;사용법에 맞춰서 사용해 보도록 합시다. 결과가 어떻게 되었을까요??&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfile4.uf.tistory.com/original/154F00244A45AD866A5151')&quot; height=392 alt=&quot;&quot; src=&quot;http://cfile4.uf.tistory.com/image/154F00244A45AD866A5151&quot; width=683&gt; &lt;P class=cap1&gt;사용해 본 결과&lt;/P&gt;&lt;/DIV&gt; &lt;P&gt;&amp;nbsp;데이터가 잘 들어온 모습을 확인할 수 있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;사실 이번포스팅에서 하고자하는말은 그닥 없다.&lt;br /&gt;&amp;nbsp;다른 서비스를 추가하여 사용하는 것처럼 사용하면 되는 것입니다... 전혀 겁먹을 필요가 없지요;&lt;br /&gt;&lt;br /&gt;다음 포스팅에서는 참조가 되는 서비스와 아닌 서비스에 대해서 다뤄보도록 하겠스빈다.&lt;br /&gt;빠빠잉~&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>ASP.NET을 사용하는 XML Web services - Part 1 무엇인가? 어떻게 사용하는가? </title>
            <link>http://www.swssm.org/index.php?idx=292</link>
            <description>&lt;P&gt;&lt;br /&gt;이번에 진행하고 있는 LBS 여행 System에서는&lt;br /&gt;project를 진행하면서 현재 제공되고 있는 OPEN API를 사용하고, &lt;br /&gt;또한 필요하지만 제공되지 않는 것들은 직접 구현하여 작업하고 있습니다.&lt;br /&gt;이렇게 작업한 작업물들을 다시 필요한 사용자들에게 제공하면 어떨까요????&lt;br /&gt;그래서, 직접 구현된 여러 작업들을 다시 Open API로 제공하고자 합니다. &lt;br /&gt;&lt;br /&gt;이런 작업물들을 다시 개발자가 사용할 수 있도록 제공하는 방법은 여러가지 방법이 있습니다.&lt;br /&gt;오늘은 그중 한가지, ASP.NET을 사용하는 XML Web services를 간단하게소개하고자 합니다.&lt;br /&gt;&lt;br /&gt; &lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=673 bgColor=#ffffff&gt; &lt;TBODY&gt; &lt;TR&gt; &lt;TD style=&quot;BORDER-RIGHT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-BOTTOM: #dadada 1px solid&quot; width=&quot;100%&quot;&gt;&amp;nbsp; &lt;DIV class=title&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 14pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 18pt&quot;&gt;ASP.NET을 사용하는 XML Web services&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;!----&gt;&lt;/DIV&gt;&lt;!-- Content type: Devdiv1. Transform: orcas2mtps.xslt. --&gt; &lt;DIV id=mainSection&gt; &lt;DIV id=mainBody&gt; &lt;P&gt;ASP.NET을 사용하면 간단한 웹 서비스를 보다 쉽게 빌드할 수 있으며 이에 대한 내용은 &lt;A id=ctl00_MTContentSelector1_mainContentContainer_ctl01 onclick=&quot;javascript:Track('ctl00_MTContentSelector1_mainContentContainer_ctl00|ctl00_MTContentSelector1_mainContentContainer_ctl01',this);&quot; href=&quot;http://msdn.microsoft.com/ko-kr/library/a7xexaft.aspx&quot;&gt;&lt;FONT color=#800080&gt;ASP.NET XML Web services 기본 사항&lt;/FONT&gt;&lt;/A&gt; 및 &lt;A id=ctl00_MTContentSelector1_mainContentContainer_ctl02 onclick=&quot;javascript:Track('ctl00_MTContentSelector1_mainContentContainer_ctl00|ctl00_MTContentSelector1_mainContentContainer_ctl02',this);&quot; href=&quot;http://msdn.microsoft.com/ko-kr/library/7hs6sw69.aspx&quot;&gt;&lt;FONT color=#0033cc&gt;연습: ASP.NET을 사용하여 기본적인 XML Web services 빌드&lt;/FONT&gt;&lt;/A&gt;에 설명되어 있습니다. 그러나 웹 서비스의 진정한 기능은 그 인프라에 있습니다. 웹 서비스는 .NET Framework 및 공용 언어 런타임을 기반으로 빌드되므로 이러한 기술을 활용할 수 있습니다. 예를 들어, ASP.NET을 사용하여 웹 서비스를 빌드하면 ASP.NET에서 지원되는 성능, 상태 관리 및 인증을 모두 활용할 수 있습니다.&lt;/P&gt; &lt;P&gt;웹 서비스의 인프라는 SOAP, XML, WSDL 등과 같은 산업 표준을 준수하도록 빌드되므로 다른 플랫폼의 클라이언트에서 웹 서비스를 상호 운용할 수 있습니다. 클라이언트에서 서비스 설명에 따라 형식이 지정된 표준 규격의 SOAP 메시지를 보낼 수 있으면 사용하는 플랫폼에 상관없이 ASP.NET를 사용하여 만든 웹 서비스를 호출할 수 있습니다. ASP.NET에서 예상 SOAP의 형식을 수정하기 위한 특성 기반 메커니즘을 제공하는 방법에 대한 자세한 내용은 &lt;A id=ctl00_MTContentSelector1_mainContentContainer_ctl03 onclick=&quot;javascript:Track('ctl00_MTContentSelector1_mainContentContainer_ctl00|ctl00_MTContentSelector1_mainContentContainer_ctl03',this);&quot; href=&quot;http://msdn.microsoft.com/ko-kr/library/dkwy2d72.aspx&quot;&gt;&lt;FONT color=#0033cc&gt;SOAP 메시지 서식 사용자 지정&lt;/FONT&gt;&lt;/A&gt;을 참조하십시오.&lt;/P&gt; &lt;P&gt;ASP.NET을 사용하여 웹 서비스를 빌드하면 SOAP, HTTP-GET 및 HTTP-POST 프로토콜을 통한 클라이언트 통신이 자동으로 지원됩니다. HTTP-GET 및 HTTP-POST는 URL 인코딩 이름-값 쌍으로 메시지를 전달하는 기능을 지원하기 때문에 이러한 프로토콜에 대한 데이터 형식 지원이 SOAP만큼 다양하지 않습니다. XML을 사용하여 웹 서비스와 데이터를 주고 받는 SOAP에서는 XSD 스키마를 사용하여 복잡한 데이터 형식을 정의할 수 있으므로 보다 다양한 데이터 형식을 지원할 수 있습니다. ASP.NET을 사용하여 웹 서비스를 빌드하는 개발자는 XSD 스키마를 사용할 때처럼 복잡한 데이터 형식을 명시적으로 정의할 필요가 없으며 관리되는 클래스를 간단히 빌드만 하면 됩니다. ASP.NET은 XSD 스키마에 대한 클래스 정의 매핑과 XML 데이터에 대한 개체 인스턴스 매핑을 네트워크를 통해 전달할 수 있도록 처리합니다.&lt;/P&gt; &lt;P&gt;웹 서비스는 DCOM의 대체 인터페이스가 아니라 산업 표준을 사용하여 플랫폼 간에 통신하기 위한 메시징 인프라입니다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt; &lt;DIV id=mainSection&gt; &lt;DIV id=mainBody&gt; &lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt; &lt;DIV id=mainSection&gt; &lt;DIV id=mainBody&gt; &lt;/DIV&gt;&lt;/DIV&gt; &lt;DIV id=mainSection&gt; &lt;DIV id=mainBody&gt; &lt;/DIV&gt;&lt;/DIV&gt; &lt;DIV id=mainSection&gt; &lt;DIV id=mainBody&gt; &lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 출처 - &lt;A href=&quot;http://msdn.microsoft.com/ko-kr/library/ba0z6a33.aspx&quot;&gt;http://msdn.microsoft.com/ko-kr/library/ba0z6a33.aspx&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt; &lt;DIV id=mainSection&gt; &lt;DIV id=mainBody&gt; &lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt; &lt;DIV id=mainSection&gt; &lt;DIV id=mainBody&gt; &lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt; &lt;DIV id=mainSection&gt; &lt;DIV id=mainBody&gt; &lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&amp;nbsp;그럼 간단한 소개와 함께 구현과정과 결과를 설명하고자 합니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;먼저 구현하는 과정에 관해서 말씀드리겠습니다.&lt;br /&gt;&amp;nbsp;어렵지는 않습니다만,, 아직 제가 잘 몰라서그런거같기도하궁 ^-^;;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;먼저 vs를 실행한 뒤 다음과 같이 선택합니다.&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt; &lt;P&gt;&lt;IMG class=txc-image-c height=425 src=&quot;http://dal2iya.tistory.com/admin/entry/filePreview/cfile3.uf@117531254A45921791E978.jpg&quot; width=600 ld='1C|cfile3.uf@117531254A45921791E978.jpg|width=&quot;600&quot; height=&quot;425&quot; alt=&quot;&quot; filename=&quot;cfile3.uf@117531254A45921791E978.jpg&quot; filemime=&quot;&quot;|Web-ASP.NET 웹 서비스 응용프로그램 을 선택합니다.'&gt;&lt;br /&gt;&lt;br /&gt;확인을 누르면 다음과 이 새 프로젝트가 생성됩니다.&lt;br /&gt;&lt;IMG class=txc-image-c height=380 src=&quot;http://dal2iya.tistory.com/admin/entry/filePreview/cfile3.uf@130534254A4592188AB62A.jpg&quot; width=600 ld='1C|cfile3.uf@130534254A4592188AB62A.jpg|width=&quot;600&quot; height=&quot;380&quot; alt=&quot;&quot; filename=&quot;cfile3.uf@130534254A4592188AB62A.jpg&quot; filemime=&quot;&quot;|생성된 프로젝트'&gt;&lt;br /&gt;&amp;nbsp;이 프로젝트에 서비스를 하고 싶은 내용을 구현하면 됩니다. 어떻게요?? 평소 C#을 다루듯이 하시면됩니다. &lt;br /&gt;&amp;nbsp;이번 프로젝트를 위해 구현하였던 cs파일로 작성된 내용입니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;IMG class=txc-image-c height=435 src=&quot;http://dal2iya.tistory.com/admin/entry/filePreview/cfile25.uf@18055B274A4597ED8AFBB1.jpg&quot; width=600 ld='1C|cfile25.uf@18055B274A4597ED8AFBB1.jpg|width=&quot;600&quot; height=&quot;435&quot; alt=&quot;&quot; filename=&quot;cfile25.uf@18055B274A4597ED8AFBB1.jpg&quot; filemime=&quot;&quot;|class와 method로 필요한 내용을 구현'&gt;&lt;br /&gt;&amp;nbsp;평소와 같이 코딩을 하는데, 이것이 어떻게 서비스로 제공될까요??&lt;br /&gt;&amp;nbsp;비밀은 cs파일이 아닌 asmx파일에 있습니다.&lt;br /&gt;&amp;nbsp;예제를 들기위해서 자꾸 다른파일을 왔다갔다 할텐데 혼동안하시길 바랍니다 ^^&lt;br /&gt;&amp;nbsp;위에서 작성한 class와 method는 다음과 같이 asmx파일에서 사용되었습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;IMG class=txc-image-c height=258 src=&quot;http://dal2iya.tistory.com/admin/entry/filePreview/cfile2.uf@153B83254A4595F263BC8D.jpg&quot; width=600 ld='1C|cfile2.uf@153B83254A4595F263BC8D.jpg|width=&quot;600&quot; height=&quot;258&quot; alt=&quot;&quot; filename=&quot;cfile2.uf@153B83254A4595F263BC8D.jpg&quot; filemime=&quot;&quot;|구현된 서비스 내용&amp;amp;#13;&amp;amp;#10;'&gt;&lt;br /&gt;[WebMethod]는 서비스로 제공될 Method를 가르키는 문구 인듯..합니다&lt;br /&gt;제공될 Method앞에는 꼭 붙여주는 것이 좋습니다.&lt;br /&gt;그 뒤는 평소 C#문법을 사용하는것과 마찬가지로 사용하시면 됩니다. &lt;br /&gt;평소 사용하던 함수를 작성하듯 함수를 작성하고, class로 구현하였던 내용을 사용하여 서비스할 내용을 구성하면 됩니다.&lt;br /&gt;&lt;br /&gt;다음과 같이 작성하면, 외부에서 웹서비스로 참조하여 다음의 내용을 살펴볼 수 있고, 사용할 수 있습니다.&lt;br /&gt;이번 포스팅에서는 간단하게 ASP WebService가 무엇인지, 어떻게 작성되는지 알아보았고,&lt;br /&gt;다음 포스팅에서 구현된 내용중 참조할 수 있는 서비스와 아닌 서비스에 관해서 알아보도록 하겠습니다.&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>[Chapter 1] EPIA-PX10000 셋팅 하기 </title>
            <link>http://www.swssm.org/index.php?idx=293</link>
            <description>&lt;DIV class=view style=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 2186762_9&quot;&gt; &lt;P&gt;1. HW 셋팅&lt;/P&gt; &lt;P&gt;&amp;nbsp;- 드디어 셋팅이 완료 되었습니다. 참....제가 허접하다 보니 하루를 완젼 잡아 버리네요.&lt;br /&gt;일단 EPIA-PX10000은 Via에서 판매하는 제품으로써 상당히 사이즈가 작은 미니 컴퓨터라고 생각하시면 됩니다.&lt;br /&gt;&lt;/P&gt; &lt;DIV&gt; &lt;P style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;WIDTH: 433px; HEIGHT: 326px&quot; src=&quot;http://blogfiles.naver.net/data44/2009/6/1/248/top_epia_px10000g_motherboard_new_supersingo.jpg&quot;&gt;&amp;nbsp;&lt;/P&gt; &lt;P style=&quot;TEXT-ALIGN: center&quot;&gt;[그림 1] EPIA-PX10000&lt;/P&gt;&lt;/DIV&gt; &lt;br /&gt; &lt;P&gt;저 팬 안에 기본적인 CPU와 그래픽 칩셋이 있다니....거참....;;;무섭습니다. 아무튼 이넘에 윈도우 xp를 깔아야 과제때 이용을 하게 되는데요. 어떻게 xp를 집어 넣을 것인가. 고민이 되는군요. 일단 H/W적으로다가 전부 맞춰 봤습니다. 파워 서플라이는 어뎁타가 없는 관계로 컴터 본체에 있는걸 사용하였습니다. &lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;[그림 1]에서 보시면 팬 아래쪽 부근에 14핀(?)이 있죠? 이곳에 파워 서플라이와 연결 가능한 20핀을 연결할 수 있습니다. &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt; &lt;DIV&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;WIDTH: 348px; HEIGHT: 435px&quot; src=&quot;http://blogfiles.naver.net/data43/2009/6/1/289/6_supersingo.jpg&quot;&gt;&lt;/DIV&gt; &lt;P style=&quot;TEXT-ALIGN: center&quot;&gt;[그림 2] 20핀 커넥터로 파워 서플라이와 연결&lt;/P&gt;&lt;/DIV&gt; &lt;br /&gt; &lt;P&gt;이제 파워는 얼추 들어 올 것 같고...그럼 하드가 있어야겠죠? &lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;이 보드가 &amp;nbsp;SATA, IDE 방식&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt; &lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;모두 지원 가능 하다고 합니다. 하지만....Sata의 경우 용량이 크고 또 윈도우만 깔면 되기 때문에 궂이 큰 용량을 사용할 필요는 없겠죠? 그래서 20G짜리 IDE 하드를 샀습니다. 용산 가서 2만원에.....ㅎㅎ 아참! HDD의 크기는 2.5인치만 가능 하니 이를 염두해 주시기 바랍니다. 이제 두번째로 마우스와 키보드를 끼워야 하는데 이건 USB가 4군데나 있으니 그냥 USB 마우스와 키보드로 패스~&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;/P&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;P style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;WIDTH: 240px; HEIGHT: 320px&quot; src=&quot;http://blogfiles.naver.net/data42/2009/6/1/66/1_supersingo.jpg&quot;&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;[&lt;/SPAN&gt;&lt;/SPAN&gt;그림 3] 셋팅 완료&lt;/P&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt; &lt;P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;2. USB Windows XP CD 만들기&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;- 휴...일단 다 연결은 해 놨는데 이제 Windows를 어떻게 까느냐가 문제가 되었습니다. 솔직히 USB 외장 CD-ROM이 있으면 금방 하곘지만....그거 사기에는 돈이 너무 많이 들더군요.(용산에서 6만원 이랍니다...)그래서 그냥....USB에다가 CD처럼 AutoRun될 수 있게 하면 깔 수 있을까 하고 찾아 봤습니다. 답은 Yes 였습니다. 이미 옛날부터 많이 사용하고 있더군요. ㅎㅎㅎ;;;;(삽질....시작) 찾다 보니 USB의 ID에 따라 사용해야 하는 프로그램이 다르더군요. 뭐 수동으로 일일히 잡는 방법도 있지만 그것도 또한 되는 것이 있고 안되는 것이 있다고 합니다. 흐음....USB 메모리가 되는건 과연 무엇일까요??그것을 해결 하기 위해 &lt;A class=con_link href=&quot;http://www.usboffice.kr/&quot; target=_blank&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt&quot;&gt;www.USBoffice.kr&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/A&gt;을 가시면 VPID_Checker라는 것이 있습니다. 이것이 무엇이냐. USB를 꽂으면 되는거와 안되는거를 판별하는 프로그램이라네요. 자세한 것은 사이트에서...ㅎㅎ;; 아무튼 여러 PID중 되는 것이 저에게는 없더군요. 그래서 같은 팀 형님 것을 확인해본 결과...!!! 빙고~&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;IMG style=&quot;WIDTH: 473px; HEIGHT: 354px&quot; src=&quot;http://blogfiles.naver.net/data42/2009/6/2/35/usbid_supersingo.jpg&quot;&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;[그림 4] VPID_Checker&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;빨간 박스 부분을 보면 알 수 있듯이 PID = 0x1000이란 것을 알 수 있습니다. 이 PID에 대한 프로그램을 찾아서 사용하기만 하면 끝~!! 그 프로그램의 이름은 &lt;STRONG&gt;SMI_UFD_Utility&lt;/STRONG&gt;라고 하네요. 흐음....이게 뭐지....아무튼 USB메모리를 끼우고 실행!을 했습니다. AutoRun 버튼을 누르고 &lt;/SPAN&gt;&lt;/SPAN&gt;파일을 찾아서(파일은 ISO파일이겠죠?) 원하는 만큼 용량을 할당한 다음 Make!&lt;/P&gt; &lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;WIDTH: 403px; HEIGHT: 345px&quot; src=&quot;http://blogfiles.naver.net/data41/2009/6/2/187/porting_supersingo.jpg&quot;&gt;&lt;/DIV&gt; &lt;P style=&quot;TEXT-ALIGN: center&quot;&gt;[그림 5] 구워지고 있는(?)USB&lt;/P&gt; &lt;br /&gt; &lt;P&gt;자 이렇게 하면 USB가 어떻게 되느냐!!!!씨디는 씨디대로 따로 되고 USB는 USB대로 따로 포팅이 되어 있게 됩니다. ㅎㅎ&lt;/P&gt; &lt;br /&gt; &lt;P&gt;3. XP를 깔아 보자.!!&lt;/P&gt; &lt;P&gt;- 자 이제 EPIA-PX10000에 windows xp를 깔아보도록 할까요? 시작 버튼을 누르자 마자 Del키 연달아 다다다 시작!&lt;/P&gt; &lt;P&gt;그러면 BIOS로 넘어갑니다. 이제 여기서 &lt;STRONG&gt;처음 부팅 위치를 USB-CDROM으로 바꿔 주고&lt;/STRONG&gt; 아까 구운 USB 메모리를 끼운 후 다시 껐다 키면~?유후~ windows 셋업 화면이 떴습니다.^^ 히힛&lt;br /&gt;&lt;/P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;IMG style=&quot;WIDTH: 320px; HEIGHT: 240px&quot; src=&quot;http://blogfiles.naver.net/data43/2009/6/2/34/2%281%29_supersingo.jpg&quot;&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;[그림 6] Windows Setup&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;IMG style=&quot;WIDTH: 252px; HEIGHT: 280px&quot; src=&quot;http://blogfiles.naver.net/data41/2009/6/2/211/8_supersingo.jpg&quot;&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;[그림 7] windows Setup&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 9pt&quot;&gt;자 이제 Windows가 깔리고 있습니다. 깔리면서 잠시 Windows에 대해 말해 두자면 &lt;STRONG&gt;EPIA-PX10000 이넘은 SP3버젼!그러니까 windows SP3는 먹히지 않습니다.!!!&lt;/STRONG&gt; 이유는 잘 모르겠어요...그러니 깔때 SP2버젼을 다운 받아서 사용하심이 심신에 좋습니다.(왜 안되나 삽질하다 쥐지...) 아무튼 이렇게 윈도우가 깔리면 &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt; &lt;DIV&gt; &lt;P style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;WIDTH: 315px; HEIGHT: 451px&quot; src=&quot;http://blogfiles.naver.net/data43/2009/6/2/138/16_supersingo.jpg&quot;&gt;&lt;/P&gt; &lt;P style=&quot;TEXT-ALIGN: center&quot;&gt;[그림 8] Windows 새로운 시작&lt;/P&gt;&lt;/DIV&gt; &lt;br /&gt; &lt;P&gt;새로운 시작.....ㅎㅎ 이 화면을 얼마나 기다렸던가....ㄹㄹㄹ~정말 힘들었습니다. 이제 EPIA-PX10000 이넘의 홈피에 가서 각종(?)드라이버를 다운 받아 깔기만 하면 끝입니다. 기본적으로 그래픽 카드와 랜선, 음향과 관련된 드라이버를 다운 받으시면 됩니다. 다음 시간에는 이제 여기에 블루투스 동글이를 꽂아서 어떻게 통신을 하는지~~~!!! 이것에 대해 알아 보도록 하겠습니다.(물론 기존에 많이 나와 있기 때문에 그저 정리한다 생각하고 해보겠습니다.)&lt;/P&gt;&lt;/DIV&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>euler-quaternion 변환 Matrix </title>
            <link>http://www.swssm.org/index.php?idx=302</link>
            <description>&lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;1.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;Board Specification&lt;br /&gt;CPU : AT917X256(ARM7TDMI)&lt;br /&gt;Accelerometer : LIS3LV02DQ (3-axis)&lt;br /&gt;GYRO : ENC-03RC &amp;amp; ENC-03RD (3-axis)&lt;br /&gt;Magnetic Sensor : HMC1053 (3-axis)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;A/D Converter : TLV2556 (12bit)&lt;br /&gt;[##_1C|1137155967.jpg|width=&quot;365&quot; height=&quot;263&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;2.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Hardware Blockdiagram&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;?xml:namespace prefix = v ns = &quot;urn:schemas-microsoft-com:vml&quot; /&gt;&lt;v:shapetype id=_x0000_t75 coordsize=&quot;21600,21600&quot; o:spt=&quot;75&quot; o:preferrelative=&quot;t&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok=&quot;f&quot; gradientshapeok=&quot;t&quot; o:connecttype=&quot;rect&quot;&gt;&lt;/v:path&gt;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:lock v:ext=&quot;edit&quot; aspectratio=&quot;t&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=_x0000_i1025 style=&quot;WIDTH: 221.25pt; HEIGHT: 179.25pt&quot; type=&quot;#_x0000_t75&quot; o:ole=&quot;&quot;&gt;&lt;v:imagedata o:title=&quot;&quot; src=&quot;file:///C:\DOCUME~1\SONYOU~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.emz&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;[##_1C|1117666553.jpg|width=&quot;296&quot; height=&quot;240&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;3.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Software Blockdiagram&lt;br /&gt;&lt;v:shape id=_x0000_i1026 style=&quot;WIDTH: 345pt; HEIGHT: 266.25pt&quot; type=&quot;#_x0000_t75&quot; o:ole=&quot;&quot;&gt;&lt;v:imagedata o:title=&quot;&quot; src=&quot;file:///C:\DOCUME~1\SONYOU~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image003.emz&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;[##_1C|1256662459.jpg|width=&quot;462&quot; height=&quot;356&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;4.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;구현 알고리즘&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; TEXT-INDENT: -20pt; mso-list: l0 level2 lfo1&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;A.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Quaternion&lt;br /&gt;&lt;/SPAN&gt;회전이나 방향을 표현하는 방법은 오일러 앵글&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;임의축 회전&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;행렬&lt;SPAN lang=EN-US&gt;, Quaternion &lt;/SPAN&gt;등이 있다 그 중에&lt;SPAN lang=EN-US&gt; Quaternion &lt;/SPAN&gt;을 사용하는 이유는 회전 변환이 누적될 때 계산량이 줄어든다는 장점이 있다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;보드에서 출력되는 가속도 센서 값을 이용하여 오일러 각도를 구하고 그 각을 이용해&lt;SPAN lang=EN-US&gt; Quaternion&lt;/SPAN&gt;으로 변환하고 최종적으로&lt;SPAN lang=EN-US&gt; Rotation Matrix&lt;/SPAN&gt;를 구하게 된다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; TEXT-ALIGN: center; mso-para-margin-left: 0gd&quot; align=center&gt;&lt;SPAN lang=EN-US&gt;[##_1C|1279142628.jpg|width=&quot;230&quot; height=&quot;259&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;SPAN style=&quot;mso-no-proof: yes&quot;&gt;&lt;v:shape id=그림_x0020_0 style=&quot;VISIBILITY: visible; WIDTH: 169.5pt; HEIGHT: 191.25pt; mso-wrap-style: square&quot; type=&quot;#_x0000_t75&quot; alt=&quot;531px-Eulerangles_svg.png&quot; o:spid=&quot;_x0000_i1030&quot;&gt;&lt;v:imagedata o:title=&quot;531px-Eulerangles_svg&quot; src=&quot;file:///C:\DOCUME~1\SONYOU~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image005.png&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; TEXT-ALIGN: center; mso-para-margin-left: 0gd&quot; align=center&gt;&lt;SPAN lang=EN-US&gt;&amp;lt;&lt;/SPAN&gt;오일러 각도의 표현&lt;SPAN lang=EN-US&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;오일러 각도에서&lt;SPAN lang=EN-US&gt; Quaternion&lt;/SPAN&gt;으로 변환을 위해 다음식이 사용된다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;[##_1C|1177000058.jpg|width=&quot;527&quot; height=&quot;101&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-no-proof: yes&quot;&gt;&lt;v:shape id=그림_x0020_1 style=&quot;VISIBILITY: visible; WIDTH: 392.25pt; HEIGHT: 72.75pt; mso-wrap-style: square&quot; type=&quot;#_x0000_t75&quot; alt=&quot;8f24d7035f36dd398e6253a521d7ac0c.png&quot; o:spid=&quot;_x0000_i1029&quot;&gt;&lt;v:imagedata o:title=&quot;8f24d7035f36dd398e6253a521d7ac0c&quot; src=&quot;file:///C:\DOCUME~1\SONYOU~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image007.gif&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;위 식에서 구해진&lt;SPAN lang=EN-US&gt; q&lt;/SPAN&gt;값으로 다음의 &lt;SPAN lang=EN-US&gt;DCM(Direction Cosine Matrix)&lt;/SPAN&gt;를 구할 수 있다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;[##_1C|1135245335.jpg|width=&quot;575&quot; height=&quot;77&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-no-proof: yes&quot;&gt;&lt;v:shape id=그림_x0020_3 style=&quot;VISIBILITY: visible; WIDTH: 428.25pt; HEIGHT: 54.75pt; mso-wrap-style: square&quot; type=&quot;#_x0000_t75&quot; alt=&quot;fef57f08063a3024591b8dd5e8676c57.png&quot; o:spid=&quot;_x0000_i1028&quot;&gt;&lt;v:imagedata o:title=&quot;fef57f08063a3024591b8dd5e8676c57&quot; src=&quot;file:///C:\DOCUME~1\SONYOU~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image008.gif&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;이&lt;SPAN lang=EN-US&gt; Matrix&lt;/SPAN&gt;의 성분으로 현재 각도를 구할 수 있다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;[##_1C|1341058033.jpg|width=&quot;226&quot; height=&quot;72&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-no-proof: yes&quot;&gt;&lt;v:shape id=그림_x0020_5 style=&quot;VISIBILITY: visible; WIDTH: 166.5pt; HEIGHT: 51pt; mso-wrap-style: square&quot; type=&quot;#_x0000_t75&quot; alt=&quot;24fde796f00a69e9929740c3bc6e6d1b.png&quot; o:spid=&quot;_x0000_i1027&quot;&gt;&lt;v:imagedata o:title=&quot;24fde796f00a69e9929740c3bc6e6d1b&quot; src=&quot;file:///C:\DOCUME~1\SONYOU~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image009.gif&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN style=&quot;mso-ascii-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-ascii-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'&quot;&gt;ф&lt;SPAN lang=EN-US&gt; = x&lt;/SPAN&gt;축 회전&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN style=&quot;mso-ascii-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-ascii-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'&quot;&gt;θ&lt;SPAN lang=EN-US&gt; = y&lt;/SPAN&gt;축 회전&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN style=&quot;mso-ascii-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-ascii-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'&quot;&gt;ψ&lt;SPAN lang=EN-US&gt; = z&lt;/SPAN&gt;축 회전&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;결과는 다음과 같은 형식으로 표시된다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;보드의 기울어짐에 따른 각도를&lt;SPAN lang=EN-US&gt; 2&lt;/SPAN&gt;차원 평면&lt;SPAN lang=EN-US&gt;(X,Y&lt;/SPAN&gt;축&lt;SPAN lang=EN-US&gt;) &lt;/SPAN&gt;으로 나타낸다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 60pt; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;[##_1C|1366685211.jpg|width=&quot;497&quot; height=&quot;332&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; mso-para-margin-left: 0gd&quot;&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>What is Mash Up?! &amp; Open API의 유래 </title>
            <link>http://www.swssm.org/index.php?idx=304</link>
            <description>&lt;STRONG&gt;&lt;FONT color=#333333 size=6&gt;What is Mash up?!&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT color=#177fcd size=3&gt;&lt;br /&gt;mash&lt;br /&gt;&lt;/FONT&gt;&lt;FONT color=#8a8a8a&gt;&amp;nbsp;- 갈아 으깨놓은것,곤죽이 된 상태&lt;br /&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;&lt;FONT color=#ff7635&gt;up&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/FONT&gt;&lt;br /&gt;&lt;FONT color=#8a8a8a&gt;- 위로 위쪽으로..&lt;br /&gt;&lt;br /&gt;자 그럼 &lt;/FONT&gt;&lt;EM&gt;&lt;FONT color=#333333 size=3&gt;mash + up&lt;/FONT&gt;&lt;/EM&gt;&lt;FONT color=#8a8a8a&gt; 은??!&lt;br /&gt;이 용어는 IT로 넘어오면서 새로운 의미를 지니게 되었는데...&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;FONT color=#9b18c1 size=4&gt;&lt;STRONG&gt;mash up&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#8a8a8a&gt; &lt;br /&gt;-&amp;nbsp; 평범하다고 할 수 있는 하나의 웹서비스 혹은 기술들을 &lt;br /&gt;혼합하여 새로운 웹서비스를 만드는 기술&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------------------&lt;br /&gt;&lt;/FONT&gt;&lt;STRONG&gt; &lt;DIV style=&quot;TEXT-ALIGN: left&quot;&gt;&lt;STRONG&gt;&lt;FONT color=#177fcd size=4&gt;&lt;br /&gt;1. Start Up&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;/STRONG&gt; &lt;DIV style=&quot;TEXT-ALIGN: left&quot;&gt;옛날옛날에,, 폴래드매셔(Paul Rademacher)라는 사람이 살았습니다.&lt;br /&gt;당시 이사람은 부동산과 관련한 웹서비스를 구상하고 있었는데,,문득 &lt;br /&gt;&quot; 아, 내가 사고싶은 부동산이 어디에있는지 눈으로 볼 수 있으면 좋을텐데 ..&quot; 라고 생각하게 되었습니다. ^^*&lt;br /&gt;아이디어는 좋았는데, 그 많은 지도를 어디서 구한답니까-_ㅠ,&lt;br /&gt;그건 구했다고 치더라도,, 언제 다 구현하지요?!,, 혼자서는 무리무리,&lt;br /&gt;그러다 문뜩 부동산의 시각화 이상의 굳 아이디어가 떠오릅니다.&lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfs7.tistory.com/original/23/tistory/2008/07/23/05/05/48863da52d235')&quot; height=375 alt=&quot;사용자 삽입 이미지&quot; src=&quot;http://cfs7.tistory.com/image/23/tistory/2008/07/23/05/05/48863da52d235&quot; width=500&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;그것은 정말 좋은 아이디어였습니다. 구현도 생각보다 쉽게 끝난대다 결과도 매우 좋았거든요 ^^*&lt;br /&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;A href=&quot;http://www.housingmaps.com/&quot;&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfs8.tistory.com/original/17/tistory/2008/07/23/05/13/48863f4dc4be6')&quot; height=307 alt=&quot;사용자 삽입 이미지&quot; src=&quot;http://cfs8.tistory.com/image/17/tistory/2008/07/23/05/13/48863f4dc4be6&quot; width=500&gt;&lt;/DIV&gt;&lt;/A&gt;&amp;lt; 그렇게 구현된 &lt;A href=&quot;http://www.housingmaps.com/&quot;&gt;www.housingmaps.com&lt;/A&gt;&amp;nbsp;의 모습&amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: right&quot;&gt;&lt;br /&gt;&lt;br /&gt;하지만 두달 뒤,&lt;br /&gt;&amp;nbsp;문제가 생겼습니다. 구글이 알아버렸거든요.. &lt;br /&gt;구글맵스를 허락없이 해킹하여사용한다는 사실을..&lt;br /&gt;&lt;br /&gt;자, 구글은 어떻게 하였을까요?! Paul씨는 어떻게 됬을까요?!&lt;br /&gt;&lt;br /&gt;모두의 예상과는 달리 &lt;STRONG&gt;&lt;FONT color=#9b18c1 size=3&gt;Paul씨는 그대로 Google에 입사하게&lt;/FONT&gt;&lt;/STRONG&gt; 되었습니다.&lt;br /&gt;그 뒤&lt;FONT color=#993366 size=3&gt;&lt;STRONG&gt;&lt;EM&gt; Google Maps는 모든사용자들을 위해 Open&lt;/EM&gt;&lt;/STRONG&gt;&lt;/FONT&gt; 되었답니다.&lt;br /&gt;(오히려 Google은 이러한 사용에서 서비스의 확장성과,가능성을 본것이지요-_-ㅋ)&lt;/DIV&gt; &lt;DIV style=&quot;TEXT-ALIGN: right&quot;&gt;또 Housingmaps는 최초의 Mash up라는 명예를 얻기도 했지용...&lt;/DIV&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;FONT color=#177fcd size=4&gt;&lt;FONT color=#177fcd size=4&gt;&lt;FONT color=#177fcd size=4&gt;&lt;FONT color=#177fcd size=4&gt; &lt;DIV style=&quot;TEXT-ALIGN: right&quot;&gt;&lt;STRONG&gt;&lt;FONT color=#177fcd size=4&gt;&lt;FONT color=#177fcd size=4&gt;&lt;FONT color=#177fcd size=4&gt;&lt;FONT color=#177fcd size=4&gt;2. So, What is Mash Up?!&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/STRONG&gt;&lt;FONT color=#8e8e8e size=2&gt;자, 다시한번 이야기 하겠습니다.&lt;br /&gt;Mash up은 어려운 용어가 아닙니다.&lt;br /&gt;&lt;br /&gt;mash up은 공개된 두 서비스를 합쳐 새로운 서비스를 만드는 것입니다.&lt;br /&gt;이미 공개된 서비스를 사용하기 때문에 구지 모든것을 내가 개발할 필요가 없습니다.&lt;br /&gt;그렇기 때문에,, 자료를 구하는데 드는 수고도, 개발할 수고도 거의 없습니다.&lt;br /&gt;그냥 이런거 이런거 합치면 재밌겠군 이라고 생각만 하면되고 ㅋ 구현만 하면됩니다. &lt;br /&gt;심지어 요즘은 mash up을 쉽게하기 위한 서비스도 존재합니다.!!!&lt;br /&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfs7.tistory.com/original/17/tistory/2008/07/23/05/46/4886473b04473')&quot; height=375 alt=&quot;사용자 삽입 이미지&quot; src=&quot;http://cfs7.tistory.com/image/17/tistory/2008/07/23/05/46/4886473b04473&quot; width=500&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: left&quot;&gt;&lt;FONT color=#8e8e8e&gt;하지만 문제가 조큼 있군요.&lt;br /&gt;아무래도 두 서비스들을 합치는 것이다 보니,, &lt;br /&gt;원래의 서비스가 없어지면,, 더이상 내 서비스도 계속될 수 없겠지요..&lt;br /&gt;또 원래의 서비스가 변한다면,, 내 서비스도 변한 원래의 서비스에 맞추어 변해야겠지요...&lt;br /&gt;... 좋은점만 있는것은 아니네요...&lt;/FONT&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;하지만,&lt;FONT color=#ff9900 size=3&gt; 제공자와 제공받는자 사이에, 안정적으로 공급된다는 믿음과 신뢰가&lt;/FONT&gt; 있다면&lt;br /&gt;mash up에 의해 얻는 이득에 비해 단점은 .. 거의 보이질 않네요 ^-^/~&lt;br /&gt;&lt;br /&gt;이번에 하고있는 LBS역시 MashUp을 하고있는 Project입니다.&lt;br /&gt;사용되고 있는 API역시 다양한 사이트에서 제공되고 있는것입니다. &lt;br /&gt;이러한 여러 Open API를 섞어사용하여 새로운 서비스를 제공하는것 이것이 Mash up입니다.&lt;br /&gt;&lt;br /&gt;다만 이번 프로젝트에서는 단순히 API를 사용하고 끝내는 것이아니라,&lt;br /&gt;사용된 API를 가공하여 다시 API로 제공하는 서비스를하고자합니다. ^^ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Google Map ) #00 Google map Start </title>
            <link>http://www.swssm.org/index.php?idx=306</link>
            <description>요즘 OPEN API에 관심이 부쩍 많아져서, 계속 다루고 있습니다.&lt;br /&gt;요즘에는 다른 분들도 많이 관심을 가지셔서 카페도 활성화 되어있고 블로그에도 양질의 글이 많이 올라오지만&lt;br /&gt;거기에-_-,, 저도 한번 보태볼가 합니다.. &lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock left&quot; style=&quot;FLOAT: left; MARGIN-RIGHT: 10px&quot;&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfile5.uf.tistory.com/original/20296C104A1227A2024AB8')&quot; height=252 alt=&quot;&quot; src=&quot;http://cfile5.uf.tistory.com/image/20296C104A1227A2024AB8&quot; width=253&gt; &lt;P class=cap1 style=&quot;WIDTH: 253px&quot;&gt;구글 맵의 모습&lt;/P&gt;&lt;/DIV&gt;&lt;br /&gt;일단 OPEN API중에 가장 처음으로 선정한것이 구글 맵입니다. &lt;br /&gt;처음에는 구글에서 제공하는 예제를 위주로 하면서,, &lt;br /&gt;조금씩 응용된 예제도 올려보고자 합니다.&lt;br /&gt;(아무래도 영어로 되어있으니까,, 한국어로 정리도 할겸 ^^;;)&lt;br /&gt;&lt;br /&gt;저는 작업속도가 느리지만; &lt;br /&gt;구글에서 아주 잘 작업해주어서, 한국어로 된 예제를 보시면,&lt;br /&gt;아마 금방 좋은 섞어프로그램(mash up)을 하실수 있을 거라고 봅니다. ㅋ&lt;br /&gt;&lt;br /&gt;차..참고로.. 저..저는. 자바스크립트에 대해서&amp;nbsp; 처음접하고;;&lt;br /&gt;따로 책을보며 공부할 시간이 없기때문에, 구글맵에 나와있는 예제를 보고 응용해서 사용하는; 그..그냥 그런아이입니다.;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;후반부에 가서는 구글 맵을 C#으로 사용할 수 있도록 정리할 예정인데,&lt;br /&gt;자바스크립트가 부담스러우시다면 닷넷프레임워크로 넘어오세요~&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;그..그냥 잡소리가 길었네요.. 일단 0번이라고 잡았기때문에 소개를 위주로 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;구글에서 설명하는 구글맵을 시작하는 방법은 이렇게 네가지로 되어있습니다.&lt;br /&gt;&lt;br /&gt; &lt;OL&gt; &lt;LI sizset=&quot;16&quot; sizcache=&quot;0&quot;&gt;&lt;A href=&quot;http://code.google.com/apis/maps/signup.html&quot;&gt;&lt;FONT color=#0066cc&gt;Sign up for a Google Maps API key.&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // 구글맵키받기 &lt;LI sizset=&quot;17&quot; sizcache=&quot;0&quot;&gt;Read the &lt;A href=&quot;http://code.google.com/apis/maps/documentation/index.html&quot;&gt;&lt;FONT color=#0066cc&gt;Maps API Developer's Guide&lt;/FONT&gt;&lt;/A&gt;. &amp;nbsp;&amp;nbsp; // 개발자 가이드 읽기 &lt;LI sizset=&quot;18&quot; sizcache=&quot;0&quot;&gt;Read the &lt;A href=&quot;http://code.google.com/apis/maps/documentation/reference.html&quot;&gt;&lt;FONT color=#0066cc&gt;Maps API Reference&lt;/FONT&gt;&lt;/A&gt;. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 레퍼런스 살펴보기 &lt;LI sizset=&quot;19&quot; sizcache=&quot;0&quot;&gt; &lt;FORM action=http://groups.google.com/group/google-maps-api-notify/boxsubscribe sizset=&quot;19&quot; sizcache=&quot;0&quot;&gt;Join the &lt;A href=&quot;http://groups.google.com/group/google-maps-api-notify&quot; target=_blank&gt;&lt;FONT color=#0066cc&gt;announcements&lt;/FONT&gt;&lt;/A&gt; group to receive important updates. // 이것저것참여해서 좋은거얻기&lt;br /&gt;&lt;/FORM&gt;&lt;/LI&gt;&lt;/OL&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;gt;http://code.google.com/apis/maps/signup.html&lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=131 alt=&quot;&quot; src=&quot;http://cfile25.uf.tistory.com/image/192737104A122793057C70&quot; width=506&gt; &lt;P class=cap1&gt;입력해야하는 사항&lt;/P&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;돈을 목적으로 사용하지 않겠습니다.&lt;br /&gt;하루에 몇번이상 접속하지 않겠습니당..(대략 오천번으로 알고잇음;) // 안읽어봤어요;;&lt;br /&gt;등등의 공지에 오케이 해주시고, 사용할 웹주소를 넣어주시면됩니다.&lt;br /&gt;로컬주소를 넣어도 괜찮더라고요.&lt;br /&gt;&lt;br /&gt;그뒤에는 구글계정으로 로그인하라는 창이 뜨고, 로그인하시면 Key가 생성됩니다.&lt;br /&gt;까먹을 수도 있으니 꼭 어딘가에 저장해두세요 ^^&lt;br /&gt;&lt;br /&gt;그럼 다음 포스팅 부터는 간단한 예제부터 시작해보겠습니다. ^^&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>윈도우 스크린 녹화 모듈 구현 설명 </title>
            <link>http://www.swssm.org/index.php?idx=315</link>
            <description>&lt;P&gt;&amp;nbsp;컴퓨터 스크린 녹화 모듈을 구현하는 과정을 생각해보자.&lt;br /&gt;&amp;nbsp;스크린을 녹화하는 것은 윈도우 DC를 얻어서 비트맵으로 저장하는 과정과 이렇게 얻어진 연속된 비트맵을 통하여 동영상을 만드는 과정이 있다.&lt;/P&gt; &lt;P&gt;&amp;nbsp;먼저 윈도우 DC를 얻어서 비트맵을 생성하는 과정은,&lt;/P&gt; &lt;P&gt;[##_1C|1363067457.jpg|width=&quot;539&quot; height=&quot;188&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;위와 같이 바탕화면의 윈도우를 얻은 dc와 그 크기를 통해 생성한 비트맵에 캡처된 화면을 복사함으로써 우리가 필요로 하는 비트맵을 얻을 수 있다.&lt;/P&gt; &lt;P&gt;&amp;nbsp;이러한 비트맵을 통해서 bmp 파일을 생성하는 등 여러가지 활용을 할 수 있겠지만, 우리는 동영상 생성을 위해 달려가보도록 하자. 이를 위해서는 먼저 avi 파일 생성을 지원하는 vfw.h를 인클루드 하고 vfw32.lib를 링크해야 한다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;AVI 파일을 생성하기 위해서는 AVIFileInit(), AVIFileExit()가 avi 작성의 처음과 끝에 꼭 호출되어야 하며 파일생성 과정은 AVIFileOpen() 호출로부터 시작되며 이때 PAVIFILE이 활성화됨을 기억해두자.&lt;br /&gt;&amp;nbsp;이 후, 몇 가지 구조체와 함수 호출을 통해 동영상 파일 생성의 준비를 하게 되는데 이를 살펴보자.&lt;br /&gt;&amp;nbsp;AVISTREAMINFO 구조체에 적용코덱 및 프레임 주기 등의 정보를 저장하여 AVIFileCreateStream()을 통해 동영상 파일에 새로운 비디오 스트림을 생성할 수 있다. 우리는 화질과 용량을 고려하여 최선이라고 판단한 xvid 압축방식을 택했다. [##_1C|1393573325.jpg|width=&quot;543&quot; height=&quot;323&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;lt;AVISTREAMINFO&amp;gt; struct&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이렇게 특정 코덱을 AVISTREAMINFO 구조체 내 요소인 DWORD형의 fccHandler에 넣게 되는데 이때 fccHandler = mmioFOURCC('x','v','i','d') 라고 하면 되는데 이때 mmioFOURCC()를 따라가본다면 아래와 같이 잘 정의된 매크로임을 확인할 수 있겠다.&lt;/P&gt; &lt;P&gt;[##_1C|1308802692.jpg|width=&quot;516&quot; height=&quot;55&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&amp;nbsp;또한 AVISTREAMINFO 구조체의 dwRate에 프레임 주기를 입력시켜 주는데 초당 24프레임 정도를 주면 사람이 동영상을 보게 될 때 큰 불편함이 없을 만큼의 영상을 제공해 줄 수 있게 되므로 초당 25프레임을 발생시키는 것으로 하였고 이는 타이머 주기가 0.04초가 되어야 함을 의미한다. &lt;/P&gt; &lt;P&gt;&lt;br /&gt;다음은 AVICOMPRESSOPTIONS 구조체에 데이터를 채워 생성된 스트림에 압축 필터를 셋업할 수 있는 AVIMakeCompressedStream()을 호출하게 된다. 이때 AVICOMPRESSOPTIONS의 fccHandler 또한 AVISTREAMINFO의 그것과 같은 것으로 채운다. [##_1C|1181975233.jpg|width=&quot;573&quot; height=&quot;216&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;lt; AVICOMPRESSOPTIONS&amp;gt; struct&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&amp;nbsp;이제, 실제 이미지 시퀀스를 작성하기 전 비디오 스트림 포맷을 설정해야 하는데 이는 BITMAPINFO 구조체를 0으로 초기화 한후 구조체 내의 BITMAPINFOHEADER 구조체에 데이터를 채운 후 AVIStreamSetFormat()을 호출하는 것으로 해결된다.&lt;/P&gt; &lt;P&gt;[##_1C|1166779384.jpg|width=&quot;490&quot; height=&quot;216&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;lt;BITMAPINFO 내 bmiHeader라는 이름으로 존재하는 BITMAPINFOHEADER&amp;gt; struct&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&amp;nbsp;AVIStreamSetFormat()이 성공적으로 호출 되기 위해서는 시스템 내에 우리가 적용하고자 하는 특정 코덱이 설치되어 있어야 하며 그것과 앞에서 설정한 AVISTREAMINFO의 코덱 정보와 일치하여야 한다.&amp;nbsp; &lt;br /&gt;&amp;nbsp;AVIStreamSetFormat()을 호출하는 것으로 avi 동영상 파일을 생성할 준비가 되었다면 이제는 본격적으로 비트맵을 avi파일로 추가를 해야 할 것이다.&lt;/P&gt; &lt;P&gt;&amp;nbsp;이 때 쓰이는 AVIStreamWrite()은 CBitmap의 헨들인 HBITMAP으로 부터 얻을 수 있는 DIB 정보를 가지고 있는 BITMAPINFOHEADER를 이용하여 우리가 설정한 코덱에 따라 데이터를 압축하고 동영상 파일로 저장되게 될 비디오스트림을 생성한다.&lt;br /&gt;&amp;nbsp;이렇게 생성된 동영상 파일은 AVIFileRelease() 함수를 통해 버퍼들을 flush 한 후 close 된다.&lt;/P&gt; &lt;P&gt;&amp;nbsp;비트맵을 타이머로 발생시켜 아웃풋으로 생성된 동영상 파일을 아래 영상을 통해 확인할 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P&gt;&lt;EMBED id=NFPlayer59573 name=NFPlayer59573 src=http://serviceapi.nmv.naver.com/flash/NFPlayer.swf?vid=FBBE50CFD88D407A58FBB1694E950E9E94A7&amp;amp;outKey=V12729a71f0a4f6344b314942abb4ce7e03369e7ab462546ca42e4942abb4ce7e0336 width=500 height=408 type=application/x-shockwave-flash allowFullScreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; wmode=&quot;transparent&quot;&gt;&lt;br /&gt;&lt;/P&gt; &lt;P&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;&lt;br /&gt;&amp;lt;문제점&amp;gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp;현재 문제점으로는 동영상 내에 마우스 커서를 찾을 수 없다. 앞으로 마우스 커서를 별개로 얻어와 비트맵에 추가하는 연구가 필요하다.&lt;br /&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>SNMP의 이해 </title>
            <link>http://www.swssm.org/index.php?idx=303</link>
            <description>&lt;P&gt;안녕하십니까.. 18기 이승환 입니다. &lt;br /&gt;&lt;br /&gt;저희 프로젝트의 기반 지식인 SNMP에 대해서 요약, 정리해보고자 합니다. &lt;br /&gt;&lt;br /&gt;우선.. &lt;STRONG&gt;SNMP&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 16pt; FONT-FAMILY: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA&quot;&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;Simple Network Management Protocol, 이하 SNMP)&lt;/STRONG&gt;를 본격적으로 소개하기에 앞서&lt;br /&gt;&lt;STRONG&gt;Network Management System&lt;/STRONG&gt;(네트워크 관리 시스템)에 대하여 짚고 넘어가보고자 합니다. &lt;br /&gt;&lt;br /&gt;Network Management System은 구성관리, 장애관리, 성능관리, 보완관리, 계정관리로 구성되어 있습니다. 물론 아시는 지식이겠지만 그래도 한번 정리를 해보겠습니다. &lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US&gt;Configuration Management(&lt;/SPAN&gt;구성 관리&lt;SPAN lang=EN-US&gt;)&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;각 객체들의 상태와 다른 개체들과의 관계를 언제라도 알 수 있어야 한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: Wingdings; mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: '맑은 고딕'; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings&quot;&gt;&lt;SPAN style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings&quot;&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;재구성&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;문서화&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-ascii-font-family: '맑은 고딕'; mso-fareast-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;-&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;재구성&lt;SPAN lang=EN-US&gt;: &lt;/SPAN&gt;네트워크 구성요소와 특성을 조정한다는 의미&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;하드웨어 재구성&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;소프트웨어 재구성&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;사용자 계정 재구성&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-ascii-font-family: '맑은 고딕'; mso-fareast-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;-&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;문서화&lt;SPAN lang=EN-US&gt;: &lt;/SPAN&gt;네트워크 구성과 계속적으로 이어지는 변경 기록&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US&gt;Fault Management(&lt;/SPAN&gt;장애 관리&lt;SPAN lang=EN-US&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-ascii-font-family: '맑은 고딕'; mso-fareast-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;-&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;사후 장애 관리&lt;SPAN lang=EN-US&gt;: &lt;/SPAN&gt;장애를 탐지하고 분리하며 정정 및 기록하는 역할&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; mso-para-margin-left: 0gd&quot;&gt;정확한 장애의 위치를 탐지&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;장애를 분리&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;장애를 정정&lt;SPAN lang=EN-US&gt;-&amp;gt; &lt;/SPAN&gt;문서화&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-ascii-font-family: '맑은 고딕'; mso-fareast-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;-&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;사전 장애 관리&lt;SPAN lang=EN-US&gt;: &lt;/SPAN&gt;예측&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;예방&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US&gt;Performance Management(&lt;/SPAN&gt;성능 관리&lt;SPAN lang=EN-US&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;장애 관리와 밀접한 관계&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;네트워크를 모니터링하고 제어&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;용량&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;트래픽&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;처리량&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;응답 시간과 같이 측정할 수 있는 양을 이용하여 성능을 측정&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-ascii-font-family: '맑은 고딕'; mso-fareast-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;-&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;용량&lt;SPAN lang=EN-US&gt;: &lt;/SPAN&gt;네트워크의 용량 &lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-ascii-font-family: '맑은 고딕'; mso-fareast-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;-&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;트래픽&lt;SPAN lang=EN-US&gt;: &lt;/SPAN&gt;내부 트래픽&lt;SPAN lang=EN-US&gt;: &lt;/SPAN&gt;네트워크 내부의 패킷 이동의 수를 측정&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt 4.5pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;외부 트래픽&lt;SPAN lang=EN-US&gt;: &lt;/SPAN&gt;네트워크 욉부의 패킷 교환을 측정&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-ascii-font-family: '맑은 고딕'; mso-fareast-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;-&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;처리율&lt;SPAN lang=EN-US&gt;: &lt;/SPAN&gt;처리율 측정&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-ascii-font-family: '맑은 고딕'; mso-fareast-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;-&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;응답시간&lt;SPAN lang=EN-US&gt;: &lt;/SPAN&gt;사용자가 서비스를 요청한 시간부터 서비스를 받은 시간까지를 측정&lt;SPAN lang=EN-US&gt;. (&lt;/SPAN&gt;용량과 트래픽과 같은 요소들이 응답시간에 영향을 줄 수 있다&lt;SPAN lang=EN-US&gt;.)&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt 4.5pt&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US&gt;Security Management(&lt;/SPAN&gt;보완 관리&lt;SPAN lang=EN-US&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt 4.5pt&quot;&gt;네트워크 접근을 제어하는 역할 &lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt 4.5pt&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US&gt;Accounting Management(&lt;/SPAN&gt;계정 관리&lt;SPAN lang=EN-US&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-ascii-font-family: '맑은 고딕'; mso-fareast-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;-&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;제한된 네트워크 자원을 독점하는 사용자를 방지&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-ascii-font-family: '맑은 고딕'; mso-fareast-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;-&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;비효율적인 시스템을 사용하는 사용자를 방지&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 22.5pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-ascii-font-family: '맑은 고딕'; mso-fareast-font-family: '맑은 고딕'; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;-&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;네트워크 관리자는 네트워크 사용에 대한 요구를 기반으로 단기간&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;장기간 계획을 할 수 있다&lt;SPAN lang=EN-US&gt;. &lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P&gt;자 그럼 NMS의 일종인 SNMP를 한번 쪼개어 설명해보도록 하겠습니다. &lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt 4.5pt&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 14pt&quot;&gt;SNMP &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt 4.5pt&quot;&gt;&lt;SPAN lang=EN-US&gt;TCP/IP &lt;/SPAN&gt;프로토콜을 사용하는 인터넷에서 장치들을 관리하기 위한 기본 구조&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;인터넷을 감시하고 유지보수하기 위한 기본적인 동작들의 조합을 제공한다&lt;SPAN lang=EN-US&gt;. &lt;br /&gt;&lt;/SPAN&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 14pt&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;br /&gt;[&lt;/SPAN&gt;&lt;/B&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;개념&lt;SPAN lang=EN-US&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;관리자와 에이전트 개념을 사용&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;보통 호스트인 관리자는 보통 라우터인 에이전트들의 집단을 제어하고 감시한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;SNMP&lt;/SPAN&gt;는 몇 개의 관리자 지국들이 여러 에이전트들을 제어하는 응용 레벨 프로토콜이다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;관리자와 에이전트&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;관리자는 관리 지국의&lt;SPAN lang=EN-US&gt; SNMP &lt;/SPAN&gt;클라이언트 프로그램을 수행하는 호스트이다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;에이전트는&lt;SPAN lang=EN-US&gt; SNMP &lt;/SPAN&gt;서버 프로그램을 수행하는 라우터&lt;SPAN lang=EN-US&gt;(&lt;/SPAN&gt;호스트&lt;SPAN lang=EN-US&gt;)&lt;/SPAN&gt;이다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;관리는 관리자와 에이전트 간의 간단한 대화에 의해 수행된다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;에이전트는 데이터베이스에 성능 정보를 저장한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;관리자는 데이터베이스에서 값들을 읽는다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;SNMP&lt;/SPAN&gt;를 사용한 관리는 세 개의 기본적인 생각에 기초&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;1.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;관리자는 에이전트의 행동을 반영하는 정보를 요구하여 에이전트를 검사&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;2.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;관리자는 에이전트 데이터베이스에 있는 값을 재설정하여 에이전트가 작업을 수행하도록 한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;3.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;에이전트는 비정상적인 상황을 관리자에게 경고하여 관리 과정에 기여한다&lt;SPAN lang=EN-US&gt;. &lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;br /&gt;&lt;STRONG&gt;[&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;관리 구성요소&lt;/STRONG&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;]&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;SNMP&lt;/SPAN&gt;는 관리 작업을 수행하기 위해 다른 두 가지 프로토콜&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;즉&lt;SPAN lang=EN-US&gt; SMI(Structure of Management Information)&lt;/SPAN&gt;와&lt;SPAN lang=EN-US&gt; MIB(Management Information Base)&lt;/SPAN&gt;를 사용한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;달리 말하면 인터넷 관리는&lt;SPAN lang=EN-US&gt; SMI&lt;/SPAN&gt;와&lt;SPAN lang=EN-US&gt; MIB&lt;/SPAN&gt;의 협동 작업이다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US&gt;[SNMP&lt;/SPAN&gt;의 역할&lt;/STRONG&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;]&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;SNMP&lt;/SPAN&gt;는 관리자와 에이전트 사이에 주고받는 패킷의 형식을 정의한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;또한 결과를 해석하고 통계자료를 생성한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;교환되는 패킷들은 객체&lt;SPAN lang=EN-US&gt;(&lt;/SPAN&gt;변수&lt;SPAN lang=EN-US&gt;)&lt;/SPAN&gt;이름과 그들의 상태를 내장한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;SNMP&lt;/SPAN&gt;는 이러한 값들을 읽고 변경하는 책임을 갖는다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US&gt;[SMI&lt;/SPAN&gt;의 역할&lt;/STRONG&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;]&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;SMI&lt;/SPAN&gt;는 객체의 이름을 붙이고 객체 유형을 정의하며 객체와 값들을 부호화하는 방법을 나타내기 위한 일반적인 규칙들을 정의한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;SMI&lt;/SPAN&gt;는 어떤 개체가 관리해야 하는 객체의 수나 관리되는 객체의 이름 등을 정의하지 않을 뿐 아니라 객체와 값 사이의 연결도 정의하지 않는다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US&gt;[MIB&lt;/SPAN&gt;의 역할&lt;/STRONG&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;]&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;MIB&lt;/SPAN&gt;는 관리될 객체에서 이름이 지어진 객체와 그들의 유형&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;그리고 서로에 대한 관계 등의 모음을 생성한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US&gt;[&lt;/SPAN&gt;네트워크 관리 작업과 프로그램 작성 작업 비교&lt;/STRONG&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;]&lt;/STRONG&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;두 작업은 모두 규칙을 필요로 한다&lt;SPAN lang=EN-US&gt;. – SMI&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;두 작업은 모두 변수 선언을 필요로 한다&lt;SPAN lang=EN-US&gt;. – MIB&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;두 작업은 모두 문장에 의해 수행되는 동작을 필요로 한다&lt;SPAN lang=EN-US&gt;. – SNMP &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US&gt;[&lt;/SPAN&gt;관리 정보의 구조&lt;SPAN lang=EN-US&gt; SMI]: &lt;/SPAN&gt;네트워크 관리를 위한 구성 요소&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo2; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;1.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;객체에 이름을 붙인다&lt;SPAN lang=EN-US&gt;: &lt;/SPAN&gt;트리 구조에 기초한 계층적 식별자&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo2; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;2.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;객체에 저장될 수 있는 데이터의 유형을 정의한다&lt;SPAN lang=EN-US&gt;.: &lt;/SPAN&gt;단순&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;구조적 &lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo2; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;3.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;네트워크 상의 전송을 위해 데이터를 어떻게 부호화할 지를 보여준다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;구조적 유형 &lt;SPAN lang=EN-US&gt;– Sequence &lt;/SPAN&gt;데이터 유형은 반드시 같은 데이터 종류일 필요는 없는 단순 데이터 유형들의 결합&lt;SPAN lang=EN-US&gt; Sequence of &lt;/SPAN&gt;데이터 유형은 모두 같은 유형인 단순 데이터 유형들의 결합이거나&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;모두 같은 유형인&lt;SPAN lang=EN-US&gt; sequence &lt;/SPAN&gt;데이터 유형들의 결합이다&lt;SPAN lang=EN-US&gt;. (&lt;/SPAN&gt;배열&lt;SPAN lang=EN-US&gt;) &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;부호화 방식&lt;SPAN lang=EN-US&gt;: SMI&lt;/SPAN&gt;는&lt;SPAN lang=EN-US&gt; BER(Basic Encoding Rules)&lt;/SPAN&gt;이라는 또 다른 표준을 사용하여 네트워크를 통해 전송되는 데이터를 부호화한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US&gt;[&lt;/SPAN&gt;관리 정보 베이스&lt;SPAN lang=EN-US&gt;(MIB, Management Information Base)]&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;각 에이전트는 관리자가 관리할 수 있는 모든 객체를 모아놓은 자신의&lt;SPAN lang=EN-US&gt; MIB&lt;/SPAN&gt;를 갖는다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;MIB &lt;/SPAN&gt;내의 객체들은 열 개의 서로 다른 그룹으로 분류&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo3; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;è&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;System, interface, address translation, ip, icmp, tcp, udp, egp, transmission, snmp &lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;이 그룹들은 객체 식별자 트리에서&lt;SPAN lang=EN-US&gt; mib-2 &lt;/SPAN&gt;객체 아래에 있다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;[SNMP 동작]&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;인터넷 네트워크 관리에&lt;SPAN lang=EN-US&gt; SMI&lt;/SPAN&gt;와&lt;SPAN lang=EN-US&gt; MIB&lt;/SPAN&gt;을 모두 사용한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo4; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;1.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;관리자가 에이전트에서 정의된 객체의 값을 읽는다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo4; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;2.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;관리자가 에이전트에서 정의된 객체에 값을 저장한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo4; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;3.&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;에이전트가 비정상적 상황에 대한 경고 메시지를 관리자에게 보낸다&lt;SPAN lang=EN-US&gt;.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&lt;br /&gt;오늘은 여기까지 입니다. 위 내용의 그림들과 SMI, MIB에 대한 자세한 내용들은 조만간 다시 업데이트 하도록 하겠습니다. &lt;br /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>GraphEdit를 이용한 그래프 생성 및 시뮬레이션 </title>
            <link>http://www.swssm.org/index.php?idx=301</link>
            <description>&lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;GraphEdit &lt;/SPAN&gt;는&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;필터 그래프를 생성하기 위한 비주얼 툴이다&lt;SPAN lang=EN-US&gt;. GraphEdit &lt;/SPAN&gt;를 사용하면 애플리케이션 코드를 쓰기 전에 필터 그래프를 테스트할 수 있다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;또&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;애플리케이션으로 생성 하는 필터 그래프를 로드해&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;애플리케이션으로 올바른 그래프가 생성 되는 것을 검증할 수 있다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;다음 그림은&lt;SPAN lang=EN-US&gt; GraphEdit &lt;/SPAN&gt;로 간단한 필터 그래프가 어떻게 표현되는지를 나타내고 있다&lt;SPAN lang=EN-US&gt;. &lt;br /&gt;[##_1C|1258652351.jpg|width=&quot;521&quot; height=&quot;99&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;각 필터는 직사각형으로 나타낸다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;필터의 주위를 뒤따르고 있는 작은 사각은 핀을 나타낸다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;입력 핀은 필터의 좌측에 있어&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;출력 핀은 우측에 있다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;화살표는 핀의 사이의 접속을 나타낸다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;우리는&lt;SPAN lang=EN-US&gt; Graphedit&lt;/SPAN&gt;를 이용하여 웹캠으로부터 화면을 캡쳐하여 하나의 동영상을 제작해 보았다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;동영상을 제작하기 위해서 생성한 그래프는 다음 그림과 같다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;[##_1C|1276664473.jpg|width=&quot;600&quot; height=&quot;140&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;시뮬레이션에 사용한 비디오 장치인&lt;SPAN lang=EN-US&gt; vx-3000&lt;/SPAN&gt;을 소스필터로 하여&lt;SPAN lang=EN-US&gt; capture&lt;/SPAN&gt;를 수행하였으며&lt;SPAN lang=EN-US&gt;, capture &lt;/SPAN&gt;되는 화면을 모니터링할 수 있도록&lt;SPAN lang=EN-US&gt; Smart Tee &lt;/SPAN&gt;필터를 사용하였다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;이러한 필터 구성은 강의를 녹화하는 본 프로젝트에서 기본적인 그래프 구성이 된다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;또한&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;강의를 녹화는 중에 각각의 프레임을 검사하여야 하므로 스트리밍 중에도 프레임 버퍼를 확인할 수 있도록&lt;SPAN lang=EN-US&gt; sample grabber &lt;/SPAN&gt;필터를 삽입하였다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;[##_1C|1051547695.jpg|width=&quot;600&quot; height=&quot;155&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;이러한 구성으로 그래프를 생성한 결과 우리가 원하던 대로 캠으로부터 동영상을 캡쳐할 수 있었다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;하지만 아무런 압축 코덱없이 그래프를 구성했기 때문에 생성된 동영상 파일의 크기가&lt;SPAN lang=EN-US&gt; 1&lt;/SPAN&gt;분에&lt;SPAN lang=EN-US&gt; 300&lt;/SPAN&gt;메가 가까이 나오는 문제가 발생했다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;이 부분에 대해서는 퍼포먼스 문제와 편집 모듈에서 다시 디코딩을 해야하는 번거러움이 있다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;그렇기 때문에 용량과 퍼포먼스 사이의 조율 여부는 좀더 고려해 보아야할 문제이다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US&gt;Graphedit&lt;/SPAN&gt;를 이용한 시뮬레이션과 실제&lt;SPAN lang=EN-US&gt; application &lt;/SPAN&gt;제작에서의 차이점&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;Graphedit&lt;/SPAN&gt;의 경우 필터 구성이 완벽하게 되어 있지 않아도 그래프가 제대로 실행될 수 있다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;이경우 자체적인 알고리즘이 존재해서&lt;SPAN lang=EN-US&gt; DirectShow&lt;/SPAN&gt;에서 지원하는&lt;SPAN lang=EN-US&gt; intelligence connect&lt;/SPAN&gt;를 더욱 보강한 듯하다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;실제 프로그래밍을 하는데에 있어서 각 필터의 속성을 제대로 파악하지 못할 경우에는 연결하려는 필터 사이에 필요로하는 필터들을 찾고 연결하는 알고리즘 구현이 필요하다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;또한&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;그래프에디트의 경우 커널 필터를 열거하는 기능도 제공한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;하지만 프로그래밍에서는 커널 필터는&lt;SPAN lang=EN-US&gt; CLSID&lt;/SPAN&gt;를 이용해서 찾는 것이 아니라&lt;SPAN lang=EN-US&gt; system enumerator&lt;/SPAN&gt;를 이용해서 직접 찾아주어야 한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>U.A.V 기체 제작 현황 </title>
            <link>http://www.swssm.org/index.php?idx=298</link>
            <description>&lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;U.A.V &lt;/SPAN&gt;기체 제작 현황&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;현재까지 우리팀의&lt;SPAN lang=EN-US&gt; U.A.V &lt;/SPAN&gt;기체 제작 현황을 보고 하고자 한다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;U.A.V &lt;/SPAN&gt;기체 제작에 있어서 제일 중요한 것이 &lt;SPAN lang=EN-US&gt;‘&lt;/SPAN&gt;무게&lt;SPAN lang=EN-US&gt;’ &lt;/SPAN&gt;와 &lt;SPAN lang=EN-US&gt;‘&lt;/SPAN&gt;강도&lt;SPAN lang=EN-US&gt;’&lt;/SPAN&gt;이다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;위의 조건을 만족하기 위해 우리는 알루미늄 파이프를 사용하여 기체를 제작하기로 결정 하였다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;알루미늄 파이프는 원통형의 입체구조로 되어 있기 때문에 알루미늄 판보다 진동에 강하며&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;무게도 강도대비 가벼운 장점을 가지고 있다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;하지만 가공은 알루미늄 판보다 어렵다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;ㅡ&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;ㅡ&lt;SPAN lang=EN-US&gt;;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;우리는 다음과 같이 기체의 메인 프레임을 제작하고자 하였다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-no-proof: yes&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;?xml:namespace prefix = v ns = &quot;urn:schemas-microsoft-com:vml&quot; /&gt;&lt;v:shapetype id=_x0000_t75 coordsize=&quot;21600,21600&quot; o:spt=&quot;75&quot; o:preferrelative=&quot;t&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok=&quot;f&quot; gradientshapeok=&quot;t&quot; o:connecttype=&quot;rect&quot;&gt;&lt;/v:path&gt;&lt;o:lock v:ext=&quot;edit&quot; aspectratio=&quot;t&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=그림_x0020_4 style=&quot;VISIBILITY: visible; WIDTH: 451.5pt; HEIGHT: 236.25pt; mso-wrap-style: square&quot; type=&quot;#_x0000_t75&quot; alt=&quot;etc(보충3).jpg&quot; o:spid=&quot;_x0000_i1031&quot;&gt;&lt;v:imagedata o:title=&quot;etc(보충3)&quot; src=&quot;file:///r:\temp\msohtmlclip1\01\clip_image001.jpg&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;[##_1C|1322855255.jpg|width=&quot;600&quot; height=&quot;313&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;lt;Inventor&lt;/SPAN&gt;를 이용&lt;SPAN lang=EN-US&gt; U.A.V &lt;/SPAN&gt;기체를 설계한 사진&lt;SPAN lang=EN-US&gt;&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;위 사진대로 설계하여 무게를 계산해 보니 약&lt;SPAN lang=EN-US&gt; 0.576kg &lt;/SPAN&gt;이었다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;아직은 여유가 있는 무게이다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;[##_1C|1069944771.jpg|width=&quot;600&quot; height=&quot;148&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-no-proof: yes&quot;&gt;&lt;v:shape id=그림_x0020_2 style=&quot;VISIBILITY: visible; WIDTH: 451.5pt; HEIGHT: 109.5pt; mso-wrap-style: square&quot; type=&quot;#_x0000_t75&quot; o:spid=&quot;_x0000_i1030&quot;&gt;&lt;v:imagedata o:title=&quot;&quot; src=&quot;file:///r:\temp\msohtmlclip1\01\clip_image003.png&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;&amp;lt;&lt;/SPAN&gt;블레이드&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;모터&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;메인 프레임의 결합모습&lt;SPAN lang=EN-US&gt;&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;위 설계를 토대로 하여 실제 기체를 제작해 보았다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-no-proof: yes&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;v:shape id=그림_x0020_6 style=&quot;VISIBILITY: visible; WIDTH: 451.5pt; HEIGHT: 338.25pt; mso-wrap-style: square&quot; type=&quot;#_x0000_t75&quot; alt=&quot;P5060064.JPG&quot; o:spid=&quot;_x0000_i1029&quot;&gt;&lt;v:imagedata o:title=&quot;P5060064&quot; src=&quot;file:///r:\temp\msohtmlclip1\01\clip_image005.jpg&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;v:shape id=그림_x0020_7 style=&quot;VISIBILITY: visible; WIDTH: 451.5pt; HEIGHT: 338.25pt; mso-wrap-style: square&quot; type=&quot;#_x0000_t75&quot; alt=&quot;P5060065.JPG&quot; o:spid=&quot;_x0000_i1028&quot;&gt;&lt;v:imagedata o:title=&quot;P5060065&quot; src=&quot;file:///r:\temp\msohtmlclip1\01\clip_image007.jpg&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;[##_1C|1270595466.jpg|width=&quot;600&quot; height=&quot;449&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;FONT size=2&gt;&lt;/FONT&gt;[##_1C|1077086543.jpg|width=&quot;600&quot; height=&quot;449&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;lt;1&lt;/SPAN&gt;차 제작된 기체의 모습&lt;SPAN lang=EN-US&gt;&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;우리는 위의 기체를 가지고 몇가지 테스트를 해보았다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;1.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;추력 테스트&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-no-proof: yes&quot;&gt;&lt;v:shape id=그림_x0020_3 style=&quot;VISIBILITY: visible; WIDTH: 522.75pt; HEIGHT: 128.25pt; mso-wrap-style: square&quot; type=&quot;#_x0000_t75&quot; o:spid=&quot;_x0000_i1027&quot;&gt;&lt;v:imagedata o:title=&quot;&quot; src=&quot;file:///r:\temp\msohtmlclip1\01\clip_image009.png&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;[##_1C|1284233550.jpg|width=&quot;600&quot; height=&quot;148&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;FONT size=2&gt;&lt;/FONT&gt;&amp;lt;&lt;/SPAN&gt;블레이드&lt;SPAN lang=EN-US&gt; , &lt;/SPAN&gt;위&lt;SPAN lang=EN-US&gt; 325mm, &lt;/SPAN&gt;아래&lt;SPAN lang=EN-US&gt; 278mm&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;두가지 프로펠러를 실험해본 결과&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;우리가 보유하고 있는 모터&lt;SPAN lang=EN-US&gt;(&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;COLOR: black; mso-bidi-font-size: 10.0pt&quot;&gt;APXL30-14T)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: black; mso-bidi-font-size: 10.0pt&quot;&gt;는 &lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US style=&quot;COLOR: black; mso-bidi-font-size: 10.0pt&quot;&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US style=&quot;COLOR: black; mso-bidi-font-size: 10.0pt&quot;&gt;325mm &lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: black; mso-bidi-font-size: 10.0pt&quot;&gt;블레이드를 회전시켰을 때 우리가 원하는 만큼의 신속한 변속을 하지 못하였고&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;모터에 과부하를 주었다&lt;SPAN lang=EN-US&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US style=&quot;COLOR: black; mso-bidi-font-size: 10.0pt&quot;&gt;278mm &lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: black; mso-bidi-font-size: 10.0pt&quot;&gt;블레이드의 경우는 신속한 변속과&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;충분한 양력&lt;SPAN lang=EN-US&gt;(50%&lt;/SPAN&gt;출력에서 기체가 뜨기 시작함&lt;SPAN lang=EN-US&gt;)&lt;/SPAN&gt;을 얻을 수 있었고&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;모터에 걸리는 부하도 크지 않았다&lt;SPAN lang=EN-US&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US style=&quot;COLOR: black; mso-bidi-font-size: 10.0pt&quot;&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN style=&quot;COLOR: black; mso-bidi-font-size: 10.0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;애초에 기체를 설계할 때&lt;SPAN lang=EN-US&gt; 325mm &lt;/SPAN&gt;블레이드 크기에 맞춰 설계했기에 현재 기체 수정작업 중에 있다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;ㅡㅡ&lt;SPAN lang=EN-US&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN style=&quot;COLOR: black; mso-bidi-font-size: 10.0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;실험과정에 모터에도 과부하를 줘서&lt;SPAN lang=EN-US&gt;…&lt;/SPAN&gt;모락 모락 피어나는 돈냄새 나는 하얀 연기도 보았다&lt;SPAN lang=EN-US&gt;…^^&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;A href=&quot;http://serviceapi.nmv.naver.com/flash/NFPlayer.swf?vid=DC73E8E350C6B46183A233EB740197B7D293&amp;amp;outKey=V125c8e10713cabf3c0beaeda501c75095fd744d1b8d43658a5bbaeda501c75095fd7&quot;&gt;&lt;object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' id='NFPlayer14756' width='500' height='408'&gt;&lt;param name='movie' value='http://serviceapi.nmv.naver.com/flash/NFPlayer.swf?vid=DC73E8E350C6B46183A233EB740197B7D293&amp;outKey=V125c8e10713cabf3c0beaeda501c75095fd744d1b8d43658a5bbaeda501c75095fd7' /&gt;&lt;param name='wmode' value='transparent' /&gt;&lt;param name='allowScriptAccess' value='always' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;embed src='http://serviceapi.nmv.naver.com/flash/NFPlayer.swf?vid=DC73E8E350C6B46183A233EB740197B7D293&amp;outKey=V125c8e10713cabf3c0beaeda501c75095fd744d1b8d43658a5bbaeda501c75095fd7' wmode='transparent' width='500' height='408' allowScriptAccess='always' name='NFPlayer14756' id='NFPlayer14756' allowFullScreen='true' type='application/x-shockwave-flash' /&gt;&lt;/object&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;br /&gt;&amp;lt;&lt;/SPAN&gt;진동 테스트 동영상&lt;SPAN lang=EN-US&gt;&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;위의 동영상과 같이 기체를 고정시키고 회전을 시켜봤다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;모터가 회전하면서 진동을 만들어 내는데&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;이는 비행중에 불안을 야기시키는 아주 큰 요인이 될 것이다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;1.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;각종 센서로 센싱을 하는 과정에서 이 진동은 아주 큰 노이즈로 작용할 것이고&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoListParagraph style=&quot;MARGIN: 0cm 0cm 0pt 38pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; mso-para-margin-left: 0gd&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-theme-font: minor-latin; mso-bidi-font-family: '맑은 고딕'; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;2.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;기체의 비행중에 진동으로 인한 기체의 미세한 흐름 등이 생길 것이다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;우리는 진동과&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;기체의 뒤틀림 현상을 억제 하기 위해 보강작업을 할 것이다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;보강작업으로 뒤틀림 현상은 어느정도 제거할수 있지만&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;진동을 없애는 것은 불가능하다&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;우리는 이 진동 요소를 제거하기 위해 &lt;SPAN lang=EN-US&gt;FIR &lt;/SPAN&gt;필터를 설계하여 적용시킬 것이다&lt;SPAN lang=EN-US&gt;.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;맑은 고딕&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;맑은 고딕&quot;&gt;마지막으로 피치각&lt;SPAN lang=EN-US&gt;(&lt;/SPAN&gt;블레이드의 각도&lt;SPAN lang=EN-US&gt;)&lt;/SPAN&gt;에 대한 테스트를 해보았는데&lt;SPAN lang=EN-US&gt; 10&lt;/SPAN&gt;도 부근에서 가장 큰 양력을 얻을 수 있었다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;[##_1C|1180039550.jpg|width=&quot;600&quot; height=&quot;368&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>MATLAB Simulink를 이용한 P.I.D Control </title>
            <link>http://www.swssm.org/index.php?idx=57</link>
            <description>&lt;P&gt;U.A.V Hovering 과제를 하면서 BLDC Motor Control을 위해 P.I.D Control을 이용하기로 하였다. &lt;/P&gt; &lt;P&gt;이를 Modeling하고 Test 하기 위해 MATLAB의 Simulink를 사용하게 되었다.&lt;/P&gt; &lt;P&gt;P.I.D control은 proportional (P), the integral (I), and the derivative (D) controls 를 지칭하는 말이다.&lt;/P&gt; &lt;P&gt;기본적인 Feedback을 받는 System 구성은 다음과 같다. [##_1C|1242601324.gif|width=&quot;450&quot; height=&quot;150&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt;이런 구성으로 되어 있는 기본 Feedback방식 System을 Simulink를 이용하여 Modeling하고 테스트한다.&lt;br /&gt;&lt;br /&gt;[##_1C|1266530191.gif|width=&quot;448&quot; height=&quot;179&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;Simulink의 Block Library는 다음과 같은 구성으로 되어 있다 이곳에서 원하는 Block을 선택하여 구성하면 된다.&lt;br /&gt;&lt;br /&gt;[##_1C|1355658328.jpg|width=&quot;449&quot; height=&quot;354&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;다음은 기본 Page에서 P.I.D control에 맞게 구성해 본 Simulink 파일이다. &lt;br /&gt;&lt;br /&gt;[##_1C|1188158591.gif|width=&quot;400&quot; height=&quot;50&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt; &lt;LI&gt;Kp = Proportional gain &lt;LI&gt;KI = Integral gain &lt;LI&gt;Kd = Derivative gain &lt;P&gt;다음의 식을 기본으로 하여 The three-term controller를 구성하게 된다.&lt;br /&gt;&lt;br /&gt;P, I, 그리고 D 컨트롤러를 비교해 보면 다음과 같다. &amp;nbsp;&lt;br /&gt;&lt;br /&gt; &lt;TABLE border=1&gt; &lt;CENTER&gt; &lt;TBODY&gt; &lt;TR&gt; &lt;TD&gt; &lt;CENTER&gt;&lt;B&gt;CL RESPONSE&lt;/CENTER&gt;&lt;/B&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;&lt;B&gt;RISE TIME&lt;/CENTER&gt;&lt;/B&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;&lt;B&gt;OVERSHOOT&lt;/CENTER&gt;&lt;/B&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;&lt;B&gt;SETTLING TIME&lt;/CENTER&gt;&lt;/B&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;&lt;B&gt;S-S ERROR&lt;/CENTER&gt;&lt;/B&gt;&lt;/TD&gt; &lt;TR&gt; &lt;TD&gt;&lt;B&gt; &lt;CENTER&gt;Kp&lt;/CENTER&gt;&lt;/B&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Decrease&lt;/CENTER&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Increase&lt;/CENTER&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Small Change&lt;/CENTER&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Decrease&lt;/CENTER&gt;&lt;/TD&gt; &lt;TR&gt; &lt;TD&gt;&lt;B&gt; &lt;CENTER&gt;Ki&lt;/CENTER&gt;&lt;/B&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Decrease&lt;/CENTER&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Increase&lt;/CENTER&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Increase&lt;/CENTER&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Eliminate&lt;/CENTER&gt;&lt;/TD&gt; &lt;TR&gt; &lt;TD&gt;&lt;B&gt; &lt;CENTER&gt;Kd&lt;/CENTER&gt;&lt;/B&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Small Change&lt;/CENTER&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Decrease&lt;/CENTER&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Decrease&lt;/CENTER&gt;&lt;/TD&gt; &lt;TD&gt; &lt;CENTER&gt;Small Change&lt;/CENTER&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/CENTER&gt; &lt;P&gt;우리는 Open-Loop Step이 아닌 Close-Loop Step을 사용해서 계산하였다. [##_1C|1172447335.gif|width=&quot;337&quot; height=&quot;278&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]기본적인 Proportional control 의 모습이다.&lt;br /&gt;&lt;br /&gt;이제부터 P-D control, P-I control, P-I-D control을 비교해서 살펴보도록 하자.&lt;br /&gt;[##_2C|1385771716.gif|width=&quot;300&quot; height=&quot;247&quot; alt=&quot;사용자 삽입 이미지&quot;||1139802050.gif|width=&quot;300&quot; height=&quot;261&quot; alt=&quot;사용자 삽입 이미지&quot;|_##][##_1C|1130307371.gif|width=&quot;337&quot; height=&quot;291&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;그래프를 통해서 3가지 방식의 차이점이 무엇인지 쉽게 알 수 있다. &lt;br /&gt;&lt;br /&gt;이는 gain값에 따라서 우리가 원하는 구형파에 근접한 delay &amp;amp; errors 없는 Data를 얻을 수 있음을 의미한다.&lt;br /&gt;&lt;br /&gt;우리는 위에서 보인 Simulink 파일을 가지고 몇가지 실험을 해보았다.&lt;br /&gt;&lt;br /&gt;1. A=(s+1)&lt;SUP&gt;8&lt;/SUP&gt;, B=1&lt;br /&gt;&lt;br /&gt;(1)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The optimal tuning is done for PID controller: Kp=0.3515, Ki=0.0911, and Kd=0.3516.&lt;br /&gt;(2)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The optimal tuning is done for PI controller: Kp= 0.1722, Ki=0.0680, and Kd=0.&lt;?XML:NAMESPACE PREFIX = U1 /&gt;&lt;U1:P&gt;&lt;/U1:P&gt;&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&lt;br /&gt;[##_2C|1079369859.jpg|width=&quot;300&quot; height=&quot;241&quot; alt=&quot;사용자 삽입 이미지&quot;||1126736364.jpg|width=&quot;300&quot; height=&quot;241&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt; &lt;P class=MsoNormal style=&quot;mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level1 lfo6; tab-stops: list 36.0pt&quot;&gt;2. A=(s+1)(0.1s+1)(0.01s+1)( 0.001s +1), B=1.&lt;br /&gt;(1)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The optimal tuning is done for PID controller: Kp=77.2731, Ki=522.2601, and Kd=3.3083 (Left figure).&lt;br /&gt;&lt;SPAN style=&quot;FONT-FAMILY: 'Arial Unicode MS'&quot;&gt;(2)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;The optimal tuning is done for PI controller: Kp=2.8479, Ki=4.4986, Kd=0 (Right figure).&lt;br /&gt;[##_2C|1153339739.jpg|width=&quot;300&quot; height=&quot;241&quot; alt=&quot;사용자 삽입 이미지&quot;||1022323122.jpg|width=&quot;300&quot; height=&quot;241&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;3. A=(s+1)&lt;SUP&gt;3&lt;/SUP&gt;, B=1-5s. &lt;br /&gt;(1)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The optimal tuning is done for PID controller: Kp= 0.2440, Ki=0.1032, and Kd=0.1467 (Left figure).&lt;br /&gt;(2)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The optimal tuning is done for PI controller: Kp= 0.1251, Ki=0.0787, and Kd=0 (Right figure).&lt;br /&gt;[##_2C|1155399145.jpg|width=&quot;300&quot; height=&quot;241&quot; alt=&quot;사용자 삽입 이미지&quot;||1366932686.jpg|width=&quot;300&quot; height=&quot;241&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt; &lt;P class=MsoNormal style=&quot;mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo12; tab-stops: list 36.0pt 333.0pt&quot;&gt;&lt;br /&gt;4. A=(s+1)(s&lt;SUP&gt;2&lt;/SUP&gt;+0.2s+1), B=1. The performance is shown below. &lt;br /&gt;(1)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The optimal tuning is done for PID controller: Kp= 0.9947, Ki=0.3155, Kd=2.4846 (Left figure).&lt;br /&gt;(2)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The optimal tuning is done for I-only controller: Kp= 0, Ki=0.0743, and Kd=0 (Right figure).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[##_2C|1290028909.jpg|width=&quot;300&quot; height=&quot;241&quot; alt=&quot;사용자 삽입 이미지&quot;||1303060215.jpg|width=&quot;300&quot; height=&quot;241&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt; &lt;P class=MsoNormal style=&quot;mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo15; tab-stops: list 36.0pt&quot;&gt;5. A=s&lt;SUP&gt;2&lt;/SUP&gt;-1, B=1. &lt;br /&gt;(1)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The optimal tuning is done for PID controller: Kp= 1393.4, Ki=9998.8, Kd=64.6 (Left figure).&lt;br /&gt;(2)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The optimal tuning is done for PID controller with the constraints that the parameters are not allowed to be larger than 9: Kp= 9.0000, Ki=4.3547, and Kd=4.8989 (Right figure).&lt;br /&gt;&lt;br /&gt;[##_2C|1127531491.jpg|width=&quot;300&quot; height=&quot;241&quot; alt=&quot;사용자 삽입 이미지&quot;||1087060930.jpg|width=&quot;300&quot; height=&quot;241&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;6. A=s, B=1. &lt;br /&gt;(1)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The optimal tuning is done for PI controller with the constraints that the parameters are not allowed to be larger than 9999: Kp= 200.0, Ki=9999, Kd=0 (Left figure).&lt;br /&gt;(2)&lt;SPAN style=&quot;FONT: 7pt 'Times New Roman'&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The optimal tuning is done for PI controller with the constraints that the parameters are not allowed to be larger than 5: Kp=4.4721, Ki=5, and Kd=0 (Right figure).&lt;br /&gt;[##_2C|1059685497.jpg|width=&quot;300&quot; height=&quot;237&quot; alt=&quot;사용자 삽입 이미지&quot;||1135631801.jpg|width=&quot;300&quot; height=&quot;237&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;다음과 같이 우리는 PID에 관련된 책에 나와있는 총 6가지에 대해 Simulink를 통해 실험하고 다음과 같은 결과를&lt;br /&gt;얻을 수 있었다. 아직 기체의 제작이 완벽히 되어 있지 않아 우리가 원하는 gain값을 찾아 실험해 보지 않았지만, 우리는 이 Model을 통해서 기체 제작 후 우리의 기체에 맞는 좀 더 안정된 P.I.D 컨트롤 gain값을 실험을 통해 빠르게 찾을 수 있을 것이라고 생각된다. &lt;/P&gt;&lt;/LI&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>artoolkit주요 부분 설명 </title>
            <link>http://www.swssm.org/index.php?idx=296</link>
            <description>&lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 1.6&quot; align=justify b:bd=&quot;1&quot;&gt;&lt;FONT style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&lt;FONT color=#008000&gt;1. MainDraw 함수&lt;br /&gt;&lt;/FONT&gt;[##_1C|1120104887.jpg|width=&quot;476&quot; height=&quot;49&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 34pt; LINE-HEIGHT: 1.6&quot; align=justify b:bd=&quot;2&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;opencv함수를 이용하여 영상을 출력하고 그 출력한 영상을 인자로 받아 영상에서 마커를 찾는 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;것부터, 실제로 객체 증강까지의 일을 수행하게 된다.&lt;br /&gt;&lt;br /&gt;[##_1C|1113068010.jpg|width=&quot;477&quot; height=&quot;222&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 34pt; LINE-HEIGHT: 1.6&quot; align=justify b:bd=&quot;2&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;취득 영상 ar인자로 받기 위해 영상 이미지 데이터 형을 바꿔 주고 arDetectMarker()를 이용하여 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;영상 이미지 dataPtr에서 마커를 찾아내여 marker_info로 마커 좌표와 마커 번호 등을 받아온다.&lt;br /&gt;&lt;br /&gt;[##_1C|1303111561.jpg|width=&quot;476&quot; height=&quot;238&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 34pt; LINE-HEIGHT: 1.6&quot; b:bd=&quot;2&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;마커 정보를 확인하여 그 특정 마커에 해당하는 객체를 증강하기 위하여 마커 정보와 object좌&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;표 정보를 넣어 마커에 증강할 object의 좌표를 매칭한다.&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 34pt; LINE-HEIGHT: 1.6&quot; b:bd=&quot;2&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;좌표 매칭까지 끝났으면 이제 화면의 마커위에 해당 오브젝트를 그려줘야 한다.&lt;br /&gt;&lt;br /&gt;[##_1C|1060115139.jpg|width=&quot;478&quot; height=&quot;42&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 34pt; LINE-HEIGHT: 1.6&quot; b:bd=&quot;1&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;draw()함수는 실질적으로 draw_object()라는 함수를 호출하게 되고 draw_object()는 실질적으로 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;arVrml97Draw()라는 함수를 호출하여 인자로 object의 vrml_id를 넣어주어 해당 vrml파일을 읽&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;어 해당 오브젝트를 증강하게 된다.&lt;br /&gt;&lt;br /&gt;&lt;FONT color=#008000&gt;2. &lt;/FONT&gt;&lt;FONT style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&lt;FONT color=#008000&gt;vrml 파일 읽기 과정&lt;br /&gt;&lt;/FONT&gt;&lt;br /&gt;[##_1C|1374149107.jpg|width=&quot;479&quot; height=&quot;41&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 34pt; LINE-HEIGHT: 1.6&quot; b:bd=&quot;1&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;이 함수를 통하여 vrml데이터를 읽게 된다. 우선 실질적은 vrml데이터 즉 확장자 .wrl형식의 데&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;이터 파일일을 읽기 전에 제일 먼저 마커 정보와 그 마커와 매칭 될 오브젝트의 .dat파일을 읽&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;게 된다. 그래서 위에서 설명하였듯 마커를 찾고 그 마커에 해당하는 오브젝트를 증강 할수 있&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;는 것이다. &lt;br /&gt;&lt;br /&gt;[##_1C|1258354522.jpg|width=&quot;345&quot; height=&quot;347&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 34pt; LINE-HEIGHT: 1.6&quot; b:bd=&quot;1&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;위와 같은 파일을 읽어 오브젝트와 마커를 매칭하게 됩니다. 빨간색 네모에서는 main.dat파일&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;을 읽어 0.patt패턴에 매칭하겠다는 뜻입니다.&lt;br /&gt;&lt;br /&gt;[##_1C|1346570653.jpg|width=&quot;549&quot; height=&quot;99&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 1.6&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;위 파일은 main.dat파일로 위와 같은 파일을 읽어 증강할 객체를 .wrl파일로부터 읽게 됩니다. .dat&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;파일은 아주 기본적으로 마커 좌표를 중심으로 이동과 회전 그리고 스케일 조정 등을 할수 있게 합&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;니다. &lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 1.6&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;그리하여 최종적으로 .wrl파일을 읽어 객체를 마커에 증강시켜 줍니다.&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>ARToolkit의 vrml 예제 파일상의 문제 해결. </title>
            <link>http://www.swssm.org/index.php?idx=297</link>
            <description>&lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold&quot;&gt;ARToolkit의 vrml 예제 파일상의 문제 해결.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;?xml:namespace prefix = v ns = &quot;urn:schemas-microsoft-com:vml&quot; /&gt;&lt;v:shapetype id=_x0000_t75 stroked=&quot;f&quot; filled=&quot;f&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; o:preferrelative=&quot;t&quot; o:spt=&quot;75&quot; coordsize=&quot;21600,21600&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype=&quot;rect&quot; gradientshapeok=&quot;t&quot; o:extrusionok=&quot;f&quot;&gt;&lt;/v:path&gt;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:lock aspectratio=&quot;t&quot; v:ext=&quot;edit&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=_x34859144 style=&quot;MARGIN-TOP: 11.04pt; WIDTH: 195.6pt; POSITION: absolute; HEIGHT: 157.8pt; v-text-anchor: top; mso-position-vertical-relative: line; mso-position-vertical: absolute; mso-position-horizontal-relative: text; mso-position-horizontal: absolute&quot; type=&quot;#_x0000_t75&quot;&gt;&lt;/v:shape&gt;&lt;/P&gt;&lt;br /&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;카메라 인자값을 직접 변경하기도 하고, xml파일의 flip을 사용하여 변환을 하려고 했으나 영상은 뒤바뀌지 않았습니다. 그래서 mfc 상에서 opencv를 이용하여 영상을 바로 출력하고 artoolkit과 vrml을 연동하였습니다.&lt;/P&gt; &lt;P class=바탕글 align=center&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold&quot;&gt;[##_1L|1175247389.bmp|width=&quot;261&quot; height=&quot;211&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&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;[##_1C|1021599386.bmp|width=&quot;567&quot; height=&quot;335&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;opencv상의 메모리에러.&lt;/STRONG&gt;&lt;/P&gt; &lt;P class=바탕글&gt; &lt;P class=바탕글&gt;opencv로 영상을 받아 증강현실을 증강함에 있어서 갑자기 영상출력중에 런타임 에러 메시지가 계속해서 출력될때가 있다. 처음엔 당황했지만, 작업관리자를 확인해 보니 그 프로세스가 사용하는 메모리가 점점 늘어나더니 프로그램이 멈춰버렸다.&lt;/P&gt; &lt;P class=바탕글&gt;&lt;v:shapetype id=_x0000_t75 stroked=&quot;f&quot; filled=&quot;f&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; o:preferrelative=&quot;t&quot; o:spt=&quot;75&quot; coordsize=&quot;21600,21600&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype=&quot;rect&quot; gradientshapeok=&quot;t&quot; o:extrusionok=&quot;f&quot;&gt;&lt;/v:path&gt;&lt;o:lock aspectratio=&quot;t&quot; v:ext=&quot;edit&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&amp;nbsp;&lt;/P&gt;&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;&lt;v:shapetype id=_x0000_t75 stroked=&quot;f&quot; filled=&quot;f&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; o:preferrelative=&quot;t&quot; o:spt=&quot;75&quot; coordsize=&quot;21600,21600&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype=&quot;rect&quot; gradientshapeok=&quot;t&quot; o:extrusionok=&quot;f&quot;&gt;&lt;/v:path&gt;&lt;o:lock aspectratio=&quot;t&quot; v:ext=&quot;edit&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=_x80339368 style=&quot;MARGIN-TOP: 27pt; WIDTH: 195.6pt; POSITION: absolute; HEIGHT: 157.8pt; v-text-anchor: top; mso-position-vertical-relative: line; mso-position-vertical: absolute; mso-position-horizontal-relative: text; mso-position-horizontal: absolute&quot; type=&quot;#_x0000_t75&quot;&gt;&lt;v:imagedata src=&quot;file:///C:\DOCUME~1\SWSSM\LOCALS~1\Temp\Hnc\BinData\EMB00000c84771e.bmp&quot; o:title=&quot;EMB00000c84771e&quot;&gt;&lt;/v:imagedata&gt;&lt;?xml:namespace prefix = w ns = &quot;urn:schemas-microsoft-com:office:word&quot; /&gt;&lt;w:wrap type=&quot;topAndBottom&quot;&gt;&lt;/w:wrap&gt;&lt;/v:shape&gt;[##_1C|1158791614.bmp|width=&quot;399&quot; height=&quot;153&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt;&lt;br /&gt;해결은 cvReleaseImage(&amp;amp;dImage);이 함수를 통해서 이미지를 releaseimage를 해주어 문제를 해결하였다.&lt;br /&gt;&lt;br /&gt;[##_1C|1345305915.jpg|width=&quot;600&quot; height=&quot;434&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>터치 감도 향상 </title>
            <link>http://www.swssm.org/index.php?idx=295</link>
            <description>기존의 터치스크린의 감도향상을 위하여 실리콘 코팅을 하였다.&lt;br /&gt;[##_1C|1034515145.bmp|width=&quot;600&quot; height=&quot;137&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;아크릴 표면에 직접 터치를 하지않는구조로 변경하였다 &lt;br /&gt;실리콘과 Diffuser로 인해 터치감도가 훨씬 부드러워 지고 전에는 손가락만 인식하던 터치 방식이 이제는 물체도 인식할수 있게 되었다.&lt;br /&gt;&lt;br /&gt;[##_2C|1155469642.jpg|width=&quot;300&quot; height=&quot;400&quot; alt=&quot;사용자 삽입 이미지&quot;||1160433579.jpg|width=&quot;300&quot; height=&quot;400&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;리어 프로젝션 필름을 Diffuser로 사용한 모습&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;종이를 Diffuser로 사용한 모습&amp;gt;&lt;br /&gt;&lt;br /&gt;리어 프로젝션 필름을 적용하여 좀더 선명한 영상을 볼수 있다.&lt;br /&gt;&lt;br /&gt;좀더 빠른 영상처리를 위하여 CMOS 카메라에서 CCD카메라로 변경하였다.&lt;br /&gt;적외선 빛에 대한 Sensitivity가 CCD가 CMOS에 비하여 10배 정도 높다고 한다. 카메라는 기본적으로 들어가는 빛의 양이 많을수록 프레임 처리속도 가 증가하기 때문에 CCD가 더 유리하다.&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>MFC Dialog에서의 OpenGL 구현을 위한 설정 </title>
            <link>http://www.swssm.org/index.php?idx=294</link>
            <description>&lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;OpenGL을 활용한 영상의 구현은 일반적으로 GLUT를 활용하는 경우가 많다. 그러나 본 프로젝트에서는 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;좀 더 직관적인 UI와 시리얼 통신을 위한 모듈, 그리고 추후에 추가될 편집기능을 위해 MFC Dialog에&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;서의 3D 영상 출력을 선택하였다. 그러나 GLUT를 활용할 때와 초기 설정 부분등이 다른데 그에 따른 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;설명은 아래와 같다.&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 17pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;- Microsoft Windows 시스템은 OpenGL 렌더링이 가능하도록 지원하고 있다. 이 시스템에서는 픽셀 형&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;식과 컨트롤 렌더링을 초기화하고, OpenGL 확장에 접근하기 위해서 Win32라이브러리에서 제공하는 함&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;수들과 루틴들을 사용해야 한다. Win32에서는 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 11pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;wgl&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;이라는 머릿글자를 달고 있는 루틴들을 이용해서 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;OpenGL이 완벽하게 지원되도록 지원하고 있다.&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;lt; PIXELFORMATDESCRIPTOR &amp;gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;- Win32/WGL에서는 OpenGL 윈도우의 픽셀 포맷 정보를 담고 있는 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;PIXELFORMATDESCRIPTOR&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;가 가&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;장 중요한 자료 구조이다. &lt;/FONT&gt;&lt;FONT style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;PIXELFORMATDESCRIPTOR&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;의 다양한 데이터 타입은 픽셀 타입 정보(RGBA &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;또는 컬러 인덱스)나 싱글버퍼링과 더블버퍼링에 관한 정보, 컬러정보 그리고 깊이 버퍼나 스텐실 버퍼, &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;누적 버퍼의 사용에 대한 정보를 포함하는 픽셀 정보를 저장하고 있다.&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt&quot;&gt; &lt;TABLE style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-padding-alt: 3pt 0pt 3pt 0pt; mso-border-top-alt: solid black 0.25pt; mso-border-bottom-alt: solid black 0.25pt; mso-border-left-alt: solid black 0.25pt; mso-border-right-alt: solid black 0.25pt&quot; height=227 cellSpacing=0 cellPadding=0 width=620 border=1&gt; &lt;TBODY&gt; &lt;TR height=227&gt; &lt;TD style=&quot;BORDER-RIGHT: black 0.25pt solid; PADDING-RIGHT: 0pt; BORDER-TOP: black 0.25pt solid; PADDING-LEFT: 0pt; PADDING-BOTTOM: 3pt; BORDER-LEFT: black 0.25pt solid; PADDING-TOP: 3pt; BORDER-BOTTOM: black 0.25pt solid&quot; width=620 height=227&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;static PIXELFORMATDESCRIPTOR pfd =&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;{&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;sizeof(PIXELFORMATDESCRIPTOR),&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;1,&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;PFD_TYPE_RGBA,&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32, // bit depth&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;16, // z-buffer depth&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;0, 0, 0, 0, 0, 0, 0,&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;};&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot; align=center&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;lt; PIXELFORMATDESCRIPTOR 구조체 &amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 16pt&quot;&gt;&lt;FONT style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;lt; 초기화 &amp;gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;- ChoosePixelFormat()을 이용해서 설정된 속성과 PIXELFORMATDESCRIPTOR를 얻어낸다. 만일 원하&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;는 픽셀 형식과 잘 맞아떨어지는 픽셀형식을 발견했다면, SetPixelFormat()을 호출해서 그 픽셀 형식을 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;실제로 사용할 수 있도록 등록해준다.&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 16pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: 돋움&quot;&gt;step1. 렌더링 컨트롤&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;- WGL에서는 OpenGL 렌더링 문맥의 생성과 관리, 비트맵 렌더링, 프런트 버퍼와 백 버퍼의 스왑, 컬&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;러 팔레트 찾기, 비트맵이나 외곽선 폰트의 사용을 위해서 루틴을 제공하고 있다.&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;-&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;wglCreateContext()&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;는 장치 문맥의 선택된 픽셀 형식 장치에 그리기 위한 OpenGL 렌더링 문맥을 만&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;들어준다.(오버레이나 언더레이 윈도우를 위한 OpenGL 렌더링 문맥을 만들기 위해서는 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;wglCreateLayerContext()를 사용한다.)&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;-&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;렌더링 문맥을 현재 사용할 수 있는 문맥으로 만들 때는 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: 돋움&quot;&gt;wglMakeCurrent()&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;를 호출해준다.&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt&quot;&gt; &lt;TABLE style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-padding-alt: 3pt 0pt 3pt 0pt; mso-border-top-alt: solid black 0.25pt; mso-border-bottom-alt: solid black 0.25pt; mso-border-left-alt: solid black 0.25pt; mso-border-right-alt: solid black 0.25pt&quot; height=210 cellSpacing=0 cellPadding=0 width=620 border=1&gt; &lt;TBODY&gt; &lt;TR height=210&gt; &lt;TD style=&quot;BORDER-RIGHT: black 0.25pt solid; PADDING-RIGHT: 0pt; BORDER-TOP: black 0.25pt solid; PADDING-LEFT: 0pt; PADDING-BOTTOM: 3pt; BORDER-LEFT: black 0.25pt solid; PADDING-TOP: 3pt; BORDER-BOTTOM: black 0.25pt solid&quot; width=620 height=210&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Get device context only once.&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;hdc = GetDC()-&amp;gt;m_hDC;&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Pixel format.&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;m_nPixelFormat = ChoosePixelFormat(hdc, &amp;amp;pfd);&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;SetPixelFormat(hdc, m_nPixelFormat, &amp;amp;pfd);&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Create the OpenGL Rendering Context.&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;hrc = wglCreateContext(hdc);&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;wglMakeCurrent(hdc, hrc);&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot; align=center&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;lt; 렌더링 컨트롤을 위한 문맥 설정 부분 &amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 16pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: 돋움&quot;&gt;step2. SetupRC()&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;-&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;MFC Dialog(Win32)에서 OpenGL을 사용하기 위해서 GLUT와 다르게 설정해 주는 부분은 위에서 정&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;도이고 그외의 설정부분은 GLUT에서 설정하는 함수인 SetupRC()루틴과 동일하게 설정한다.&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;- SetupRC()에서 하는 설정에 관한 부분은 광원의 위치, 재질, 배경의 색, 그림자 등을 설정한다.&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 16pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: 돋움&quot;&gt;step3. 기타 설정&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;-&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;GLUT를 사용할 때에는 glutMainLoop()란 이벤트 처리 루프함수를 사용하면 되지만 MFC &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;Dialog(Win32)에서는 타이머 이벤트를 이용해야 한다. 이렇게 타이머 이벤트를 사용함으로써 얻어지는 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;잇점은 마우스 이벤트, 크기의 자유도, 다른 모듈과 연동이 가능한 점등이 있다.&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 16pt&quot;&gt;&lt;FONT style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;&amp;lt; full 3D 영상 모델링 &amp;amp; 렌더링 &amp;gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;-&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;영상 정합 프로그램에서 전달받은 4면의 3D data와 Rotation-Translation Matrix를 가지고 full 3D &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;data를 만드는 데에는 앞에서와 마찬가지로 과정을 거치는 데 각각의 면의 3차원 좌표를 R-T Matrix를 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;사용하여 매칭을 시킴으로써 각각의 면들이 하나의 3D 객체를 구성한다.&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 17pt; LINE-HEIGHT: 15pt&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; BACKGROUND: white; FONT-FAMILY: 돋움&quot;&gt;- full 3D data를 구성하게 되는 프로세스는 아래의 블록도와 같다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt;[##_1C|1103414456.jpg|width=&quot;487&quot; height=&quot;229&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt; Visuliazation Module Block Diagram &amp;gt;&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>3D 조각을 위한 Full3D 영상 정합과정 ( ICP 알고리즘 ) </title>
            <link>http://www.swssm.org/index.php?idx=316</link>
            <description>인제 내일 이면 발표네요..아자아자!!!&lt;br /&gt;&lt;br /&gt;각 단면에대한 3D영상취득방안은 오차율 0.1%이내로 완벽하게 복원이 되는 상황에서 4방향( 앞, 뒤, 오른쪽, 왼쪽 )에서의 영상을 어떻게 효율적으로 정합할지여부를 다루도록하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;ICP( Interative Closest Point ) 알고리즘&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;서로다른 두개의 Range Image ( 3D Image ) 들의 공통점들을 찾아서 이어붙이는 알고리즘을 말합니다. &lt;br /&gt;&lt;br /&gt;[##_1C|1045472076.jpg|width=&quot;451&quot; height=&quot;451&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;위 그림처럼 두개의 Range Image를 조금씩 움직여보면서 가장 곂치는 부분이 많은 영역을 찾아가게 되는것입니다. 즉, 대충 두면을 덧대어서 두면이 딱 맞아떨어질 때까지 맞춰간다라는 의미입니다. 그럼 자세한 방안을 설명하자면 단계별로 해서 다음과 같습니다. &lt;br /&gt;&lt;br /&gt;모든 3차원 평면을 정합하기위해서는 각 평면에대한 Rotation Matrix 와 Translation Matrix 를 구해야 합니다. 이것을 구하기 위해서 최소한 3점이상의 대응 점을 찾아내야 합니다. &lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;text-decoration: underline; color: rgb(212, 26, 1);&quot;&gt;Step 1. 두면을 정합하기위한 초기치를 입력한다. &lt;/span&gt;&lt;br /&gt;[##_1C|1358608826.jpg|width=&quot;600&quot; height=&quot;298&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;설명에 앞서 위의 두그림은 2차원 그림이지만 마우스로 클릭하게되는 각 픽셀들은 3D 포인트값 (x, y, z) 값을 이미 가지고 있다는것을 알려드립니다. &lt;br /&gt;&lt;br /&gt;자세히보면 빨간색으로 X 표시된 부분을 확인할 수 있을 것입니다. 이제 저 세점이 기준이 되어서 대충(?) 두개의 3D 면을 정합하게 됩니다. 이때까지는 어느정도의 오차가 발생하게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;Step 2. 초기입력치로 구해진 R, T Matrix를 적용하여 평면을 배열했을시의 오차율을 계산한다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;중복되는 영역에대해서 겹치는 점이 90%이상이어야 OK!! 그런경우에는 R, T Matrix를 반환합니다. &lt;br /&gt;아니면 다음 단계로 넘어갑니다.&lt;br /&gt;&lt;br /&gt;오차율을 구하기 위해서는 각 점에대한 매칭율을 구하여야하는데 이런곳에서 사용하게되는 일반적인 MSE&lt;br /&gt;공식을 적용합니다. &lt;br /&gt;&lt;br /&gt;[##_1C|1317609334.jpg|width=&quot;432&quot; height=&quot;317&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;Step 3. 평면을 조금 움직인다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;물론 아무렇게나 움직여서는 절대 두개의 평면이 이어지질 않겠죠. 그렇지만 모든 점을 대응시켜서 움직여보고 오차율을 계산하는 방식은 지나치게 시간이 걸리기 때문에 사용할 수 없습니다. ( 하루종일 컴퓨터를 돌려도 안나옴..) 그래서 ICP 에서는 단순한 규칙을 정해서 3D 영상을 움직입니다. &lt;br /&gt;&lt;br /&gt;다음과 같이 겹쳐지는 영역에있어서의 2개의 3D좌표들중에서 서로 가장 가까운 점을 찾아 이동할 수 있는 R, T &amp;nbsp; Matrix 를 구합니다. [##_1C|1306530156.jpg|width=&quot;600&quot; height=&quot;229&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;위의 그림처럼 이동한다하여도 꼭 맞아 떨어진다는 보장은 없습니다.&amp;nbsp; 그렇지만 일정한 오차율이 나올때까지 반복한다면 완벽히는 아니어도 근사한 결과치를 얻어낼 수 있습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;Step 4. 최종적으로 반환 되어진 R, T 값을 총 3번( Back &amp;lt;-&amp;gt; Left, Left &amp;lt;-&amp;gt; Center, Center &amp;lt;-&amp;gt; Right ) 구하게 됩니다. 구해진 3개의 R, T Matrix 값을 이용하여 4가지 장면을 위치에 맞게 Rendering 합니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;즉, Back Image &amp;lt;- Left Image &amp;lt;- Center Image &amp;lt;- Right Image 순으로 정합하게 됩니다. &lt;br /&gt;&lt;br /&gt;[##_3C|1184953266.jpg|width=&quot;200&quot; height=&quot;168&quot; alt=&quot;사용자 삽입 이미지&quot;||1326732238.jpg|width=&quot;200&quot; height=&quot;168&quot; alt=&quot;사용자 삽입 이미지&quot;||1329676037.jpg|width=&quot;200&quot; height=&quot;168&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;Step 5. 4방향의 각 3D 영상을 방향에 맞춰서 그려주지만 중복면에대한 처리가 없어서 불필요한 Rendering 이 발생하게 됩니다. 물체의 3D 월드좌표를 X, Y 의 중점을 기준으로 하여 나누어진 각 사분면을 기준으로 하여 그려줄 경계면을 나누어줍니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[##_3C|1315536723.jpg|width=&quot;200&quot; height=&quot;168&quot; alt=&quot;사용자 삽입 이미지&quot;||1097028979.jpg|width=&quot;200&quot; height=&quot;168&quot; alt=&quot;사용자 삽입 이미지&quot;||1226571233.jpg|width=&quot;200&quot; height=&quot;168&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Step 4 와 Step 5 의 각 그림을 클릭하여서 크게 보면 Step 5 에서의 영상이 좀더 깔끔하게 정합되었음을 알 수 있습니다.&lt;br /&gt;&lt;img src=&quot;file:///C:/DOCUME%7E1/KIMHYU%7E1/LOCALS%7E1/Temp/moz-screenshot.jpg&quot; alt=&quot;&quot;&gt;&lt;img src=&quot;file:///C:/DOCUME%7E1/KIMHYU%7E1/LOCALS%7E1/Temp/moz-screenshot-1.jpg&quot; alt=&quot;&quot;&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>3D 조각기의 조립 </title>
            <link>http://www.swssm.org/index.php?idx=317</link>
            <description>&lt;link href=&quot;/style/default-wysiwyg.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot;&gt;&lt;style type=&quot;text/css&quot;&gt;body { padding: 10px; }&lt;/style&gt;프로젝트 종료일이 얼마 남지 않은 시점에 모터 드라이버 SLA7062가 터져서 프로젝트 진행에 차질이 생겼습니다. 회로구성에 문제가 있는 것 같은데 아직까진 문제점을 찾지 못해서 큰일이죠.&lt;br /&gt;&lt;br /&gt;이 글에서는 기구부의 문제점 및 수정 방안에 대해서 이야기 해 보도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;기구부의 문제점 및 수정 방안&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;기존에 설계한 기구부는 조각 및 절곡, 가공 및 열처리를 모두 포함하여 90만원의 견적이 나왔다. 부품을 포함하면 총 160만원에 가까운 돈이 필요하기 때문에 설계를 변경해서 기구부를 만들기로 했다.[##_1C|1309584182.jpg|width=&quot;600&quot; height=&quot;450&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;기존에는 알루미늄을 절곡하여 기구부를 제작하려 했지만 예산 문제로 프로파일을 구매해서 뼈대를 만들고 모터 및 샤프트 연결 부분에 알루미늄 판재를 부착하였다. 하지만 기구부의 설계 변경때 간과한 부분이 생겼는데, DC 모터의 고정 부분에서 문제가 생겼다. 기존의 설계에서는 모터 고정부는 프레임 밖으로 빠져나갈 수 있도록 설계했지만, 프로파일로 뼈대를 만들면서 그 차이를 고려하지 않아 x축의 모터의 움직임이 상당히 제한되었다. 또한, 오브젝트 고정대의 높이를 설계시 고려하지 않아서, 오브젝트의 반지름이 상당히 제한되었다. x축의 샤프트에서는 샤프트의 굵기가 10파이로 얇고, 샤프트 슬라이더가 각 축당 한개씩만 장착되어 유격이 발생하였다. DC 모터는 1차 과제용으로 저렴한 제품을 샀는데 토크가 약해서 과제의 목표인 포인트 찍는 작업 이상은 어려웠다. 정리해보면 다음과 같다.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;DC 모터 고정부의 위치 때문에 x축 방향의 움직임이 제한됨&lt;/li&gt;&lt;li&gt;오프젝트 고정대의 위치가 낮아서 샤프트 때문에 조각할 오브젝트의 크기가 제한됨&lt;br /&gt;&lt;/li&gt;&lt;li&gt;샤프트의 굵기가 얇고 샤프트 슬라이더 SMA가 한개씩 장착되어 유격이 발생&lt;/li&gt;&lt;li&gt;DC 모터의 토크 및 회전수가 조각에는 부족함&lt;/li&gt;&lt;li&gt;스핀들 대신 장착한 베어링으로는 유격이 발생&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;위 문제점을 해결하기 위해서 남은 기간동안 수정할 내용은 다음과 같다.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;DC모터 고정부 부분의 알루미늄을 절단해서 스핀들 앞으로 옮겨서 x축 방향의 움직임을 보상해준다. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;1차 과제에서 해결하기 어려움. 돈이 많이 들기 때문에 일단 2차 과제에서 새로 가공해서 오브젝트의 반지름 크기를 늘려야 할 듯.&lt;/li&gt;&lt;li&gt;샤프트 문제는 새로 구매하기 어렵기 때문에 SMA를 2개 더 장착해서 유격을 없앤다.&lt;/li&gt;&lt;li&gt;2차 과제시 DC모터를 최소 6000rpm, 3kgf.cm 정도의 토크를 가지는 모터로 교환&lt;/li&gt;&lt;li&gt;스핀들 가공에는 예산이 부족하므로 샤프트에서 유격을 줄이는 정도로 만족해야 할 듯&lt;/li&gt;&lt;/ol&gt;기타 차후에 CNC를 제작한다면 예산을 절약할 수 있는 팁을 생각해 본다면&lt;br /&gt;&lt;br /&gt;[##_1L|1255926039.jpg|width=&quot;600&quot; height=&quot;450&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]스크류로 TM나사를 사용했는데, 예산을 줄이기 위해서는 5파이 전조나사를 사용해서 CNC를 만들어도 무방하다. 만약 초정밀, 반영구적인 CNC를 원한다면 값은 비싸지만 성능은 좋은 볼스크류를 사용하면 된다.&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;모터와 나사를 연결해주는 커플링은 본래 바로 연결하면 안된다. 대형 CNC는 가공부의 무게가 무겁고 가해지는 힘의 크기도 크기 때문에 모터의 회전축을 보호해주기 위해서 나사를 고정해주고 베어링으로 회전력을 보상해주는 장치를 별도로 만들어주는데, 소형 CNC에서는 굳이 설치하지 않고 아래와 같이 커플링을 바로 연결해도 무방하다.&lt;br /&gt;[##_1C|1260990389.jpg|width=&quot;600&quot; height=&quot;450&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]또한 TM나사를 고정하기 위한 베어링은 사진과 같은 방식의 베어링을 사서 장착해도 되지만 가격이 비싸기 때문에 5파이 전조나사를 사용하고, 볼트와 1000원정도의 베어링2개를 사용해서 나사를 벽에 고정해도 된다.&lt;br /&gt;&lt;br /&gt;제일 중요한 스핀들 부분은 소형제작이 어렵다. 나처럼 베어링을 사용해서 스핀들을 만들어도 되지만 안정적이지 않기 때문에 e링과 베어링을 사서 가공된 스핀들 모형에 고정해도 회전축은 유격없이 회전이 가능하다.&lt;br /&gt;[##_1C|1091685583.jpg|width=&quot;600&quot; height=&quot;450&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;다음에는 완성된 3D CNC에 대해서 이야기 하도록 하겠습니다.&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>[UOD System] URB 제어 </title>
            <link>http://www.swssm.org/index.php?idx=314</link>
            <description>&lt;link rel=&quot;File-List&quot; href=&quot;file:///C:%5CUsers%5Cdolgaroo%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml&quot;&gt;&lt;link rel=&quot;themeData&quot; href=&quot;file:///C:%5CUsers%5Cdolgaroo%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx&quot;&gt;&lt;link rel=&quot;colorSchemeMapping&quot; href=&quot;file:///C:%5CUsers%5Cdolgaroo%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml&quot;&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt; &lt;w:WordDocument&gt; &lt;w:View&gt;Normal&lt;/w:View&gt; &lt;w:Zoom&gt;0&lt;/w:Zoom&gt; &lt;w:TrackMoves/&gt; &lt;w:TrackFormatting/&gt; &lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt; &lt;w:DisplayVerticalDrawingGridEvery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt; &lt;w:ValidateAgainstSchemas/&gt; &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt; &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt; &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt; &lt;w:DoNotPromoteQF/&gt; &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt; &lt;w:LidThemeAsian&gt;KO&lt;/w:LidThemeAsian&gt; &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt; &lt;w:Compatibility&gt; &lt;w:SpaceForUL/&gt; &lt;w:BalanceSingleByteDoubleByteWidth/&gt; &lt;w:DoNotLeaveBackslashAlone/&gt; &lt;w:ULTrailSpace/&gt; &lt;w:DoNotExpandShiftReturn/&gt; &lt;w:AdjustLineHeightInTable/&gt; &lt;w:BreakWrappedTables/&gt; &lt;w:SnapToGridInCell/&gt; &lt;w:WrapTextWithPunct/&gt; &lt;w:UseAsianBreakRules/&gt; &lt;w:DontGrowAutofit/&gt; &lt;w:SplitPgBreakAndParaMark/&gt; &lt;w:DontVertAlignCellWithSp/&gt; &lt;w:DontBreakConstrainedForcedTables/&gt; &lt;w:DontVertAlignInTxbx/&gt; &lt;w:Word11KerningPairs/&gt; &lt;w:CachedColBalance/&gt; &lt;w:UseFELayout/&gt; &lt;/w:Compatibility&gt; &lt;m:mathPr&gt; &lt;m:mathFont m:val=&quot;Cambria Math&quot;/&gt; &lt;m:brkBin m:val=&quot;before&quot;/&gt; &lt;m:brkBinSub m:val=&quot;&amp;#45;-&quot;/&gt; &lt;m:smallFrac m:val=&quot;off&quot;/&gt; &lt;m:dispDef/&gt; &lt;m:lMargin m:val=&quot;0&quot;/&gt; &lt;m:rMargin m:val=&quot;0&quot;/&gt; &lt;m:defJc m:val=&quot;centerGroup&quot;/&gt; &lt;m:wrapIndent m:val=&quot;1440&quot;/&gt; &lt;m:intLim m:val=&quot;subSup&quot;/&gt; &lt;m:naryLim m:val=&quot;undOvr&quot;/&gt; &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt; &lt;w:LatentStyles DefLockedState=&quot;false&quot; DefUnhideWhenUsed=&quot;true&quot; DefSemiHidden=&quot;true&quot; DefQFormat=&quot;false&quot; DefPriority=&quot;99&quot; LatentStyleCount=&quot;267&quot;&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;0&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Normal&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;heading 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 7&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 8&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 9&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 7&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 8&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 9&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;35&quot; QFormat=&quot;true&quot; Name=&quot;caption&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;10&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Title&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; Name=&quot;Default Paragraph Font&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;11&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtitle&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;22&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Strong&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;20&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Emphasis&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;59&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Table Grid&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Placeholder Text&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;No Spacing&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Revision&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;34&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;List Paragraph&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;29&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Quote&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;30&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Quote&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;19&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtle Emphasis&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;21&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Emphasis&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;31&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtle Reference&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;32&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Reference&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;33&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Book Title&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;37&quot; Name=&quot;Bibliography&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; QFormat=&quot;true&quot; Name=&quot;TOC Heading&quot;/&gt; &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!-- /* Font Definitions */ @font-face {font-family:&quot;Cambria Math&quot;; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:&quot;맑은 고딕&quot;; panose-1:2 11 5 3 2 0 0 2 0 4; mso-font-charset:129; mso-generic-font-family:modern; mso-font-pitch:variable; mso-font-signature:-1879047505 165117179 18 0 524289 0;} @font-face {font-family:&quot;\@맑은 고딕&quot;; panose-1:2 11 5 3 2 0 0 2 0 4; mso-font-charset:129; mso-generic-font-family:modern; mso-font-pitch:variable; mso-font-signature:-1879047505 165117179 18 0 524289 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:&quot;&quot;; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; text-autospace:none; word-break:break-hangul; font-size:10.0pt; mso-bidi-font-size:11.0pt; font-family:&quot;맑은 고딕&quot;; mso-ascii-font-family:&quot;맑은 고딕&quot;; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:&quot;맑은 고딕&quot;; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:&quot;맑은 고딕&quot;; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:&quot;Times New Roman&quot;; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-ascii-font-family:&quot;맑은 고딕&quot;; mso-ascii-theme-font:minor-latin; mso-bidi-font-family:&quot;Times New Roman&quot;; mso-bidi-theme-font:minor-bidi;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:3.0cm 72.0pt 72.0pt 72.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt; /* Style Definitions */ table.MsoNormalTable {mso-style-name:&quot;표준 표&quot;; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:&quot;&quot;; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; mso-bidi-font-size:11.0pt; font-family:&quot;맑은 고딕&quot;; mso-ascii-font-family:&quot;맑은 고딕&quot;; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:&quot;맑은 고딕&quot;; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:&quot;맑은 고딕&quot;; mso-hansi-theme-font:minor-latin; mso-font-kerning:1.0pt;} &lt;/style&gt; &lt;![endif]--&gt; &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;USB &lt;/span&gt;장치를 원격으로 공유하기 위해서 프로그램의 절차적인 과정과 이를 위한 디바이스 드라이버 단에서 적절한 역할과&lt;span lang=&quot;EN-US&quot;&gt; URB(usb request block)&lt;/span&gt;를 우리가 원하는 대로 제어하기 위해서 방법들을 설명하겠습니다.&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;[##_1C|1025650151.jpg|width=&quot;600&quot; height=&quot;726&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;link rel=&quot;File-List&quot; href=&quot;file:///C:%5CUsers%5Cdolgaroo%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml&quot;&gt;&lt;link rel=&quot;themeData&quot; href=&quot;file:///C:%5CUsers%5Cdolgaroo%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx&quot;&gt;&lt;link rel=&quot;colorSchemeMapping&quot; href=&quot;file:///C:%5CUsers%5Cdolgaroo%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml&quot;&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt; &lt;w:WordDocument&gt; &lt;w:View&gt;Normal&lt;/w:View&gt; &lt;w:Zoom&gt;0&lt;/w:Zoom&gt; &lt;w:TrackMoves/&gt; &lt;w:TrackFormatting/&gt; &lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt; &lt;w:DisplayVerticalDrawingGridEvery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt; &lt;w:ValidateAgainstSchemas/&gt; &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt; &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt; &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt; &lt;w:DoNotPromoteQF/&gt; &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt; &lt;w:LidThemeAsian&gt;KO&lt;/w:LidThemeAsian&gt; &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt; &lt;w:Compatibility&gt; &lt;w:SpaceForUL/&gt; &lt;w:BalanceSingleByteDoubleByteWidth/&gt; &lt;w:DoNotLeaveBackslashAlone/&gt; &lt;w:ULTrailSpace/&gt; &lt;w:DoNotExpandShiftReturn/&gt; &lt;w:AdjustLineHeightInTable/&gt; &lt;w:BreakWrappedTables/&gt; &lt;w:SnapToGridInCell/&gt; &lt;w:WrapTextWithPunct/&gt; &lt;w:UseAsianBreakRules/&gt; &lt;w:DontGrowAutofit/&gt; &lt;w:SplitPgBreakAndParaMark/&gt; &lt;w:DontVertAlignCellWithSp/&gt; &lt;w:DontBreakConstrainedForcedTables/&gt; &lt;w:DontVertAlignInTxbx/&gt; &lt;w:Word11KerningPairs/&gt; &lt;w:CachedColBalance/&gt; &lt;w:UseFELayout/&gt; &lt;/w:Compatibility&gt; &lt;m:mathPr&gt; &lt;m:mathFont m:val=&quot;Cambria Math&quot;/&gt; &lt;m:brkBin m:val=&quot;before&quot;/&gt; &lt;m:brkBinSub m:val=&quot;&amp;#45;-&quot;/&gt; &lt;m:smallFrac m:val=&quot;off&quot;/&gt; &lt;m:dispDef/&gt; &lt;m:lMargin m:val=&quot;0&quot;/&gt; &lt;m:rMargin m:val=&quot;0&quot;/&gt; &lt;m:defJc m:val=&quot;centerGroup&quot;/&gt; &lt;m:wrapIndent m:val=&quot;1440&quot;/&gt; &lt;m:intLim m:val=&quot;subSup&quot;/&gt; &lt;m:naryLim m:val=&quot;undOvr&quot;/&gt; &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt; &lt;w:LatentStyles DefLockedState=&quot;false&quot; DefUnhideWhenUsed=&quot;true&quot; DefSemiHidden=&quot;true&quot; DefQFormat=&quot;false&quot; DefPriority=&quot;99&quot; LatentStyleCount=&quot;267&quot;&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;0&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Normal&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;heading 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 7&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 8&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 9&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 5&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 6&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 7&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 8&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 9&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;35&quot; QFormat=&quot;true&quot; Name=&quot;caption&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;10&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Title&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; Name=&quot;Default Paragraph Font&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;11&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtitle&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;22&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Strong&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;20&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Emphasis&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;59&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Table Grid&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Placeholder Text&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;No Spacing&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Revision&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;34&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;List Paragraph&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;29&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Quote&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;30&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Quote&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 1&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 2&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 3&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 4&quot;/&gt; &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot; UnhideWhenUsed=&quot;f

</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>[UOD System] Device Driver Manager Operation </title>
            <link>http://www.swssm.org/index.php?idx=287</link>
            <description>&lt;P&gt;&lt;br /&gt;UOD System Team에서 Driver Manager Server 및 UOD Client connection Module 개발을 담당하고 있는 18기 최영특 입니다.&lt;br /&gt;&lt;br /&gt;지금부터 UOD System에서 Driver Manager Server 동작 방식에 대해서 설명하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;1. 먼저 Driver Manager Server의 역할을 간단히 요약하면,&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt;UOD System의 Host에 USB Device가 Plugged 되면 UOD Client에서는 해당 Device를 이용하기 위해서 Device Driver가 필요합니다. Device Driver는 Device를 구입하게 되면 Bundle로 제공되거나 제조사 사이트에&amp;nbsp; 가서 다운받아서 따로 설치를 해줘야한다는 번거로움이 있습니다.&lt;br /&gt;&lt;br /&gt;더욱이 UOD System과 같이 하나의 Device를 여러사람이 공유해서 쓸 경우 Device Driver가 없을 때마다 Driver&lt;br /&gt;를 찾아서 다운받고 설치 해줘야하므로 매우 불편 합니다.&lt;br /&gt;&lt;br /&gt;우리 팀에서는 UOD System 사용자들의 그런 수고를 덜기 위해서 UOD Client가 Server에 접속해서 해당 &lt;br /&gt;Device를 이용하고자 할 때 Driver가 설치되어 있지 않다면 해당 Device의 Driver를 내 PC에 다운로드하여 설치&lt;br /&gt;까지 용이하게 해줄 수 있는 Device Driver Manager Server를 구축하고자 하였습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UOD System 에서는 USB Device Driver를 구분하기 위해서 각 USB Device 마다 제공되는 Vendor ID와 Product ID를 이용하였습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;2. Vendor ID(VID) &amp;amp; Product ID(PID)&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt;USB-IF는 USB Device를 제조 및 판매하는 업체들에게 고유의 16비트 VID(Vendor ID) 코드를 할당할 권한(및 책임)이 있습니다. 이 코드는 현재, 라이선스 계약을 통해 1회 1,500달러의 등록비를 납부함으로써 취득할 수 있습니다.&lt;br /&gt;&lt;br /&gt;VID 코드를 취득해 라이선스를 받은 회사는 65,536(16비트)개의 PID(Product ID) 코드를 자사의 각 모델에 해당 숫자만큼 지정할 수 있으며, 이를 통해 충분한 PID 코드 사용이 가능하므로 초기 VID 취득 비용은 큰 부담이 되지는 않습니다. 순수한 개발 단계에서는 라이선스 취득이 필요 없으며, 개발용 VID/PID 쌍을 다양한 제조업체의 문서에서 손쉽게 찾아볼 수 있습니다.&lt;br /&gt;&lt;br /&gt;일부 마이크로컨트롤러 제조사들은 소기업, 신규 창업사, 자문 회사, 소량 제조업체들을 장려하기 위해, 별도의 VID/PID 쌍을 사용할 수 있는 하위 라이선스를 무료로 제공하기도 합니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;3. Driver Manager Server TEST Module EXECUTION&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt;[##_1C|1405392441.jpg|width=&quot;544&quot; height=&quot;384&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&amp;lt; 그림 1. Driver Manager Server TEST Module EXECUTION &amp;gt;&lt;/DIV&gt; &lt;P&gt;일단 UOD Server에 USB Device가 Plugged 되면 UOD Client에서 해당 Device의 VID와 PID를 알게 됩니다.&lt;br /&gt;이 VID와 PID를 가지고 현재 PC에 Device Driver가 있는지 확인하고, 없다면 Driver Manager Server에 접속하게 됩니다.&lt;br /&gt;&lt;br /&gt;접속과 동시에 UOD Client는 Driver Manager Server에 VID 및 PID 정보를 전달하고 Server는 해당 Device Driver 를 찾아서 UOD Client에 Feedback 해 줍니다. Driver Download 의사 결정을 하고 driver file downloading을 수행 - 완료 합니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;4. UOD Client TEST Module EXECUTION&lt;/FONT&gt;&lt;/STRONG&gt; &lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;[##_1C|1084960411.jpg|width=&quot;544&quot; height=&quot;382&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&amp;lt; 그림 2. UOD Client TEST Module EXECUTION &amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV&gt; &lt;DIV style=&quot;TEXT-ALIGN: left&quot;&gt;Driver Manager Server는&amp;nbsp; 안정적인 파일 전송을 위해서 TCP Protocol을 이용하였고, Multi-Threading 방식으로 구현하였습니다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;FONT color=#008000&gt;// Receive the file from Server&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; while (total_size &amp;lt; send_size)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; memset(buf, 0, BUFSIZE);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; data_size = read(sock, buf, BUFSIZE);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; total_size += data_size);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt;Socket Programming에서 TCP는 완전한 Packet 전송을 보장한다는 이론을 확신하고 Test 하였으나 결과는 달랐습니다. Server에서 Data Packet을 한번에 보내더라도 보낸만큼 한번에 Data Packet을 받지 못한다는 것을 확인하였고 보낸 Packet을 다 받을 때까지 계속 확인하면서 EOF를 받을 때까지 반복함으로써 문제점을 극복할 수 있었습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;5. DATA PACKET STRUCTURE&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;/DIV&gt;[##_1C|1290190230.jpg|width=&quot;335&quot; height=&quot;785&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&amp;lt; 그림 3. DATA PACKET STRUCTURE &amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: left&quot;&gt;위의 그림은 Data Communication을 위해서 정의한 Packet Structure 입니다. 모든 Data는 위의 Packet 정의를 따르는 Protocol을 이용하여 Communication 하도록 하였습니다. Main Packet은 packet size / packet type 등의 Packet Information과 real data 등의 Packet Data로 구성됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;/DIV&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>SSES 전력 측정 </title>
            <link>http://www.swssm.org/index.php?idx=288</link>
            <description>SSES의 최종 목표인 Energy Saving을 위한 전력 측정 방법을 설명하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;우선 기본적으로 전력 측정을 위한 잘 알려진 공식을 사용하도록 하였다.&lt;br /&gt;&lt;br /&gt;I = V/R&amp;nbsp; &amp;lt;-옴의법칙^^&lt;br /&gt;P(W) = V x I&amp;nbsp; (per second)&lt;br /&gt;1W x 1h = 1Wh&lt;br /&gt;&lt;br /&gt;이 공식을 이용하여 HDD의 전력 측정을 하도록 하였다.&lt;br /&gt;&lt;br /&gt;문제는 HDD디스크의 기본 전압이 수치상으로 나와 있기때문에 바로 전류를 측정할 수 있다면 좋겠지만, 전류는 직렬로 연결하여 측정하여야 하기 때문에 HDD디스크 자체의 전류를 직접 측정하기는 어려웠다.&lt;br /&gt;&lt;br /&gt;따라서 HDD디스크로 가는 Power선을 중간에 절단하여 그 사이에 적정한 양의 저항을 연결하고 그 저항 사이의 전압을 측정함으로써 간접적으로 전류를 측정할 수 있었다.&lt;br /&gt;&lt;br /&gt;[##_1C|1336120064.jpg|width=&quot;600&quot; height=&quot;322&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;위의 그림과 같이 HDD디스크로 가는 power선을 절단하여 그 사이에 0.3옴의 저항을 연결하고 그 사이에 +와 -단자를 연결 하면 그 순간의 전류를 측정할 수 있었다. 따라서 위의 공식을 사용하여 그 순간에 소비되는 전력을 구할 수 있었다.&lt;br /&gt;&lt;br /&gt;하지만 이렇게 측정하면 그 순간의 전력 사용량 만을 측정할 수 있을 뿐이며 어떤 누적된 결과도 도출해 내기 어려웟다. 따로 회로를 구성하여 MCU를 이용해 데이터를 축적하는 방법도 고려해 보았지만 history기능이 제공되는 장비를 사용하기로 하였다.&lt;br /&gt;&lt;br /&gt;[##_1C|1229108239.jpg|width=&quot;600&quot; height=&quot;190&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;위에 보이는 장비가 hostory기능이 지원되는 NI사의 장비 이다. 이 장비와 LabView프로그램을 이용하여 적당히 프로그래밍 하여 주면 소수점 5자리의 정밀도와 초당 1000번 이상의 데이터를 축적할 수 있다.&lt;br /&gt;&lt;br /&gt;[##_1C|1263055249.jpg|width=&quot;349&quot; height=&quot;248&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;이것이LabView에서 보여주는 최종 결과 그래프이다.&amp;nbsp; 우리가 추가로 달아준 저항사이의 전압을 측정한 것이다.&amp;nbsp; 진동형태의 그래프 이외에는&amp;nbsp; Access가 일어나지 않는 상태에서 일정한 값을 유지하는 것을 알&amp;nbsp; 수 있다. 이 그래프가&amp;nbsp; 저항사이의&amp;nbsp; 전압을 나타내는 그래프이므로&amp;nbsp; 공식에 의하면 전류의 그래프 모양과 흡사하게 나와야 한다.&amp;nbsp; 이렇게 그래프가 진동을 하는 이유는 HDD의&amp;nbsp; 스핀모터가 계속 동작중임을 잘 반영하여 준다. &lt;br /&gt;[##_1C|1326111493.jpg|width=&quot;378&quot; height=&quot;253&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;위의 그래프는 누적된 값을 보여주는 그래프이다. 밑의 새하얀 부분은 Access가 일어나지 않고 idle하게 스핀하고 있을 때의 그래프이고 위의 살짝 튀어준 값은 HDD디스크에 Access가 일어나 HDD의 전력이 갑자기 많이 필요하게 되었을때 많은 전압이 발생한 것으로 알 수 있다. HDD의 Arm부분이 움직일떄 이런 추가 전압이 발생하는 것으로 추측되어 진다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Reconfiguration 알고리즘 </title>
            <link>http://www.swssm.org/index.php?idx=284</link>
            <description>우리가 만든 Reconfiguration 정책의 알고리즘은 총 3가지로 구현되어 있다.&lt;br /&gt;&lt;br /&gt;reconfiguration이라는 말의 의미는 SSES 모듈이 올라간 후의 외부 디바이스(플래쉬메모리)의 내용을 변경하는 것을 의미한다. 즉, 플래쉬 메모리에 데이터가 캐쉬되어야 하고(File System -&amp;gt; Flash), 플래쉬 메모리에서 데이터가 플러쉬 되어야 한다.(Flash -&amp;gt; File System). 플러쉬 라는 말의 의미는 Flash상의 데이터가 File System하고 동기가 맞지 않아서 즉 Dirty한 상황이기 때문에 Flash메모리에서 데이터를 제거할때 File System으로의 Write작업을 수행하는 것을 의미한다.&lt;br /&gt;&lt;br /&gt;총 세가지의 알고리즘이 구현 되어 있다.&lt;br /&gt;&lt;br /&gt;1. FIFO&lt;br /&gt;&lt;br /&gt;일단 reconfiguration의 두가지 상황중 첫번째 상황, 즉 File System-&amp;gt;Flash로의 데이터 이동 작업은 단순히 모든 페이지에 해당한다. 즉 하드디스크로부터의 Read or Write요청이 발생하면 이 페이지가 Flash에 존재하지 않는다면 무조건 Cache하는 정책이다. 정말 단순한 정책이지만 의외로 많은 상황에 이점이 있는것으로 나타났다.&lt;br /&gt;&lt;br /&gt;그리고 후에 cache 메모리가 가득차 Flush작업을 해주어야 할때는 먼저 cache된 페이지들을 먼저 제거하는 방식으로의 구현이다. (First in First Out)&lt;br /&gt;&lt;br /&gt;정말 단순하고 CLEAR한 방법이다.&lt;br /&gt;&lt;br /&gt;2. Multilevel Hit Q &lt;br /&gt;&lt;br /&gt;FIFO정책에서의 문제점은 페이지들의 frequency를 고려하지 않는 다는 점이다. 따라서 캐쉬되어 있는(플래쉬 안에 있는) 데이터들의 Hit수를 고려한다. 각각의 히트수를 고려하여 각각의 hit수별로 따로 자료구조를 유지하여 둔다.&lt;br /&gt;&lt;br /&gt;[##_1C|1090866130.jpg|width=&quot;600&quot; height=&quot;229&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;그림에서와 같이 각 hit수별로 자료구조를 따로 정의하여두어&lt;br /&gt;Flash에서 FileSystem으로 write작업이 필요할때 해당 페이지를 적은hit수를 가진 페이지를 위주로 선별해 낼 수 있다.&lt;br /&gt;&lt;br /&gt;해당 hit수에 따른 배열의 크기는 각 페이지당 1비트씩만 유지하면 되므로 큰 자료구조에 대한 overhead에 대한 걱정도 덜 수 있다.&lt;br /&gt;&lt;br /&gt;3. like EXCES&lt;br /&gt;&lt;br /&gt;EXCES가 사용하는 정책을 비슷하게 구현하였다.&lt;br /&gt;&lt;br /&gt;이 알고리즘은 전체&amp;nbsp; 페이지를 reconfiguration대상으로 한다. 위의 두 알고리즘은 Flash에 존재하는 데이터에 관해서만 메타데이타를 유지하고 이것이 알고리즘의 대상이 되었는데, 이 알고리즘은 전체 페이지에 대해 tracking을 수행한다. &lt;br /&gt;&lt;br /&gt;그때 그때 페이지의 요청에 따라 해당 메타 자료구조를 동적으로 생성한다. 모든 File System에 대한 메타데이터를 유지하는 것으로 생각할 수 있는데 그렇지 않다. Linux kernel의 페이지에 대한 요청에만 반응하므로 최악의 경우에도 리눅스의 페이지 캐시에 전체에 대한 메타데이터만 유지하면 된다. 하지만 이런일은 거의 일어날 가능성이 없으므로 자료구조에 대한overhead는 그렇게 크지 않음을 알 수 있다.&lt;br /&gt;&lt;br /&gt;또한가지 특징은 cache의 hit에대한 frequency와 함께 time정보를 유지한다. 즉 현재까지 access되어진 타임을 4번가지 유지함으로써 더 효율적인 reconfiguration 정책을 구현할 수 있다. &lt;br /&gt;&lt;br /&gt;마지막으로 File System-&amp;gt;Flash와 Flash-&amp;gt;File System 모두 reconfguration의 대상이 된다. 위의 두 알고리즘은 File System-&amp;gt;Flash로 읽어들이는 작업은 I/O요청에 대한 모든 것에 일어나지만 이 알고리즘은 이 작업 또한 알고리즘의 대상이 된다. 따라서 알고리즘 정책 상에서 잘 참조되지 않을 것이라고 판단된 Page는 아예 Flash에 적재 되지 않는다.&lt;br /&gt;&lt;br /&gt;reconfiguration을 수행하기 위한 기본 조건은&lt;br /&gt;&lt;br /&gt;if (((jiffies - last_reconf_jiffie) &amp;gt; TIME_2_WAIT) &amp;amp;&amp;amp; (check_frequency_fails() &amp;gt; FAILS_THRESHOLD))&lt;br /&gt;&lt;br /&gt;1.즉 현재 시각에서 마지막으로 reconfiguration이 일어난시각을 뺀 값이 일정 값보다 크면,&lt;br /&gt;2.cache의 FAIL의 수가 일정 값보다 넘어서면, &lt;br /&gt;&lt;br /&gt;1번은 너무 잦은 reconfiguration을 방지한다.&lt;br /&gt;2번은 너무 잦은 FAIL이 reconfiguration을 발생시키게 한다.(fail_list를 유지한다.)&lt;br /&gt;&lt;br /&gt;이 경우를 만족시키면 reconfiguration이 일어나게 된다.( 즉 시간과 fail을 고려하여 reconfiguration을 일으킨다)&lt;br /&gt;&lt;br /&gt;[##_1C|1375296239.jpg|width=&quot;600&quot; height=&quot;480&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;일단 reconfiguration이 일어나면 planner에 따라 적당한 ingoing(File System-&amp;gt;Flash)와 outgoing(Flash-&amp;gt;File System) 을 결정하여 정책을 반영시킨다.&lt;br /&gt;&lt;br /&gt;이를 위해 top-k 매트릭스와 page ranker을 유지하는데 top-k매트릭스는 flash의 페이지 크기의 제곱근의 배열정도의 크기를 가지고 있다. page ranker에서 hit가 일정 수준 일어나게 되면 top-k매트릭스에 insert되게 되는데 이는 위의 그림의 알고리즘에 따라 일어난다. 일단 top-k 매트릭스에 페이지가 삽입되면 이 안에서의 ranking에따라 ingoing과 outgoing를 결정한다.(자세한 사항은 소스와 논문을 참고하기 바란다.^^)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>TrueType Font Simple Glyph </title>
            <link>http://www.swssm.org/index.php?idx=291</link>
            <description>&lt;P&gt;TrueType 폰트를 구성하는 글자 하나하나를 Glyph(글립)이라한다.&lt;br /&gt;&lt;br /&gt;글립을 나타내기 위해 TrueType 폰트는 외곽선(contour)의 함수를 이용하는데, Bezier Spline곡선이 이용된다. Bezier Spline은 연속된 Bezier Curve로 TrueType 폰트는 이와 같이 수학적 함수를 이용하여 폰트를 그리기 때문에 비트맵 폰트가 가지고 있는 약점(폰트의 크기를 변경할 때 계단현상이 발생한다)을 극복하고 매끄러운 글꼴을 화면이나 프린터에 인쇄할 수 있다.&lt;br /&gt;&lt;br /&gt;TrueType 폰트에서 사용하는 &lt;SPAN class=mw-headline&gt;Quadratic &lt;/SPAN&gt;Bezier Curve의 함수식은 아래와 같다.&lt;br /&gt;&lt;br /&gt;&lt;IMG class=tex alt=&quot;\mathbf{B}(t) = (1 - t)^{2}\mathbf{P}_0 + 2(1 - t)t\mathbf{P}_1 + t^{2}\mathbf{P}_2 \mbox{ , } t \in [0,1].&quot; src=&quot;http://upload.wikimedia.org/math/2/d/5/2d5e5d58562d8ec2c35f16df98d2b974.png&quot;&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;위의 함수식을 이용하여 아래와 같이 곡선이 그려진다.&lt;br /&gt;&lt;br /&gt; &lt;TABLE style=&quot;CLEAR: both; FONT-SIZE: 95%; FLOAT: none; TEXT-ALIGN: center&quot;&gt; &lt;TBODY&gt; &lt;TR&gt; &lt;TD style=&quot;BORDER-BOTTOM: blue 1px solid&quot;&gt;&lt;A class=image title=&quot;Construction of a quadratic Bézier curve&quot; href=&quot;http://en.wikipedia.org/wiki/File:Bezier_2_big.png&quot;&gt;&lt;IMG height=100 alt=&quot;Construction of a quadratic Bézier curve&quot; src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Bezier_2_big.png/240px-Bezier_2_big.png&quot; width=240 border=0&gt;&lt;/A&gt;&lt;/TD&gt; &lt;TD style=&quot;BORDER-BOTTOM: silver 1px solid&quot;&gt;&lt;A class=image title=&quot;Animation of a quadratic Bézier curve, t in [0,1]&quot; href=&quot;http://en.wikipedia.org/wiki/File:Bezier_2_big.gif&quot;&gt;&lt;IMG height=100 alt=&quot;Animation of a quadratic Bézier curve, t in [0,1]&quot; src=&quot;http://upload.wikimedia.org/wikipedia/commons/2/2d/Bezier_2_big.gif&quot; width=240 border=0&gt;&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR&gt; &lt;TD&gt;Construction of a quadratic Bézier curve&lt;/TD&gt; &lt;TD&gt;Animation of a quadratic Bézier curve, &lt;I&gt;t&lt;/I&gt; in [0,1]&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;br /&gt;함수식에서 알 수 있듯이 Quadratic Bezier Curve는 두개의 끝 점과 하나의 컨트롤점으로 이루어진다. Bezier Spline은 이 곡선이 연속해서 이어져있는 모양이며 TrueType의 외곽선(Contour)은 Bezier Spline이 폐곡선을 이룬다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;아래 그림은 외곽선의 함수로 이루어진 TrueType 글꼴이 화면에 그려지는 과정을 보여준다.&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=584 alt=&quot;&quot; src=&quot;http://cfs14.tistory.com/image/27/tistory/2009/01/18/21/35/49732201e3248&quot; width=559&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;손글씨를 TrueType 폰트로 만들기 위해서는 손으로 쓴 글씨의 외곽선을 추출한 후 외곽선을 표현할 수 있는 함수를 찾아야 하는데 이를 Curve Fitting이라 한다. Curve Fitting이 완료되면 TrueType 폰트의 Specification에서 정의한 Glyf Table의 형식에 맞게 글립 정보를 구성해주어야 한다.&lt;br /&gt;&lt;br /&gt;TrueType Specification에서 정의하는 글립은 Simple형과 Composite형으로 구분할 수 있다.&lt;br /&gt;&lt;br /&gt;Simple Glyph는 외곽선을 함수를 정의하는 포인트 만으로 구성되어 있는 글립을 의미한다. Composite형은 여러개의 Component로 구성되는데 각 Component는 Simple Glyph과 동등하다. Composite는 이미 정의된 Component를 재활용하여 Component의 조합으로 새로운 Glyph을 만들어낸다.&lt;br /&gt;&lt;br /&gt;이번프로젝트에서 우리가 만들고자하는 글립은 영문자 알파벳과 숫자인데(Alphanumeric) Alphanumeric에선 Component형 글립을 만들만한 문자가 없다. 따라서 이번 프로젝트에서 만들어낸 글립은 모두 Simple형이다.&lt;br /&gt;&lt;br /&gt;TrueType Specification에서 Simple Glyph를 위한 테이블은 아래와 같이 정의되어있다.&lt;br /&gt;&lt;br /&gt;Simple과 Component형 모두 아래의 해더를 가진다.&lt;br /&gt; &lt;TABLE class=MsoNormalTable style=&quot;BORDER-COLLAPSE: collapse; mso-table-layout-alt: fixed; mso-padding-alt: 0cm 0cm 0cm 0cm&quot; cellSpacing=0 cellPadding=0 border=0&gt; &lt;TBODY&gt; &lt;TR style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 72pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt; mso-border-bottom-alt: solid windowtext .75pt&quot; vAlign=top width=96&gt; &lt;P class=thead style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;STRONG&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Type&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 144pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt; mso-border-bottom-alt: solid windowtext .75pt&quot; vAlign=top width=192&gt; &lt;P class=thead style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;STRONG&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 180pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt; mso-border-bottom-alt: solid windowtext .75pt&quot; vAlign=top width=240&gt; &lt;P class=thead style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Description&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 1; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 72pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt&quot; vAlign=top width=96&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;SHORT&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt&quot; vAlign=top width=192&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;numberOfContours&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 180pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt&quot; vAlign=top width=240&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;If&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;the number of contours is greater than or equal to zero, this is a single glyph; if negative, this is a composite glyph.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 2; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 72pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=96&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US style=&quot;TEXT-TRANSFORM: uppercase&quot;&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;FWord&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=192&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;xMin&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 180pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=240&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Minimum x for coordinate data.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 3; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 72pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=96&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US style=&quot;TEXT-TRANSFORM: uppercase&quot;&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;FWord&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=192&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;yMin&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 180pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=240&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Minimum y for coordinate data.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 4; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 72pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=96&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US style=&quot;TEXT-TRANSFORM: uppercase&quot;&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;FWord&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=192&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;xMax&lt;SPAN id=callbacknestilyoantistorycom51313 style=&quot;FLOAT: right; WIDTH: 1px; HEIGHT: 1px&quot;&gt;&lt;EMBED id=bootstrapperilyoantistorycom51313 src=http://ilyoan.tistory.com/plugin/CallBack_bootstrapperSrc?nil_profile=tistory&amp;amp;nil_type=copied_post width=1 height=1 type=application/x-shockwave-flash allowscriptaccess=&quot;always&quot; wmode=&quot;transparent&quot; EnableContextMenu=&quot;false&quot; FlashVars=&quot;&amp;amp;callbackId=ilyoantistorycom51313&amp;amp;host=http://ilyoan.tistory.com&amp;amp;embedCodeSrc=http%3A%2F%2Filyoan.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3Dhttp%3A%2F%2Fcfs.tistory.com%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D51%26callbackId%3Dilyoantistorycom51313%26destDocId%3Dcallbacknestilyoantistorycom51313%26host%3Dhttp%3A%2F%2Filyoan.tistory.com%26float%3Dleft&quot; swLiveConnect=&quot;true&quot;&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 180pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=240&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Maximum x for coordinate data.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 5; page-break-inside: avoid; mso-yfti-lastrow: yes&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 72pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=96&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US style=&quot;TEXT-TRANSFORM: uppercase&quot;&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;FWord&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=192&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;yMax&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 180pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=240&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Maximum y for coordinate data.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;br /&gt;Simple형은 위의 해더 아래에 다음의 테이블이 따라온다.&lt;br /&gt; &lt;TABLE class=MsoNormalTable style=&quot;BORDER-COLLAPSE: collapse; mso-table-layout-alt: fixed; mso-padding-alt: 0cm 4.0pt 0cm 4.0pt&quot; cellSpacing=0 cellPadding=0 border=0&gt; &lt;TBODY&gt; &lt;TR style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 78pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt; mso-border-bottom-alt: solid windowtext .75pt&quot; vAlign=top width=104&gt; &lt;P class=thead style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;STRONG&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt; mso-border-bottom-alt: solid windowtext .75pt&quot; vAlign=top width=189&gt; &lt;P class=thead style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;STRONG&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 184pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt; mso-border-bottom-alt: solid windowtext .75pt&quot; vAlign=top width=245&gt; &lt;P class=thead style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Description&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 1; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 78pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt&quot; vAlign=top width=104&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;USHORT&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 142pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt&quot; vAlign=top width=189&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;endPtsOfContours[&lt;I style=&quot;mso-bidi-font-style: normal&quot;&gt;n&lt;/I&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 184pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt&quot; vAlign=top width=245&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Array of last points of each contour; &lt;I style=&quot;mso-bidi-font-style: normal&quot;&gt;n&lt;/I&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;is the number of contours.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 2; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 78pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=104&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;USHORT&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 142pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=189&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;instructionLength&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 184pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=245&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Total number of bytes for instructions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 3; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 78pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=104&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;BYTE&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 142pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=189&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;instructions[&lt;I style=&quot;mso-bidi-font-style: normal&quot;&gt;n&lt;/I&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 184pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=245&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Array of instructions for each glyph; &lt;I style=&quot;mso-bidi-font-style: normal&quot;&gt;n&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/I&gt;is the number of instructions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 4; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 78pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=104&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;BYTE&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 142pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=189&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;flags[&lt;I style=&quot;mso-bidi-font-style: normal&quot;&gt;n&lt;/I&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 184pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=245&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Array of flags for each coordinate in outline; &lt;I style=&quot;mso-bidi-font-style: normal&quot;&gt;n&lt;/I&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;is the number of flags.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 5; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 78pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=104&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;BYTE or SHORT&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 142pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=189&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;xCoordinates[ ]&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 184pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=245&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;First coordinates relative to (0,0); others are relative to previous point.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 6; page-break-inside: avoid; mso-yfti-lastrow: yes&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 78pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=104&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;BYTE or SHORT&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 142pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=189&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;yCoordinates[ ]&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 184pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=245&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;First coordinates relative to (0,0); others are relative to previous point.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;br /&gt;flag필드를 구성하는 비트는 다음과 같은 의미를 가진다.&lt;br /&gt; &lt;TABLE class=MsoNormalTable style=&quot;BORDER-COLLAPSE: collapse; mso-table-layout-alt: fixed; mso-padding-alt: 0cm 0cm 0cm 0cm&quot; cellSpacing=0 cellPadding=0 border=0&gt; &lt;TBODY&gt; &lt;TR style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 84pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt; mso-border-bottom-alt: solid windowtext .75pt&quot; vAlign=top width=112&gt; &lt;P class=thead style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;STRONG&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Flags&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 43pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt; mso-border-bottom-alt: solid windowtext .75pt&quot; vAlign=top width=57&gt; &lt;P class=thead style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;STRONG&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Bit &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 259pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt; mso-border-bottom-alt: solid windowtext .75pt&quot; vAlign=top width=345&gt; &lt;P class=thead style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Description&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 1; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 84pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt&quot; vAlign=top width=112&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;On Curve&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 43pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt&quot; vAlign=top width=57&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;0&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 259pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed; mso-border-top-alt: solid windowtext .75pt&quot; vAlign=top width=345&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;If set, the point is on the curve; otherwise, it is off the curve.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 2; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 84pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=112&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;x-Short Vector&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 43pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=57&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;1&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 259pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=345&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;If set, the corresponding x-coordinate is 1 byte long, not 2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 3; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 84pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=112&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;y-Short Vector&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 43pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=57&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;2&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 259pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=345&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;If set, the corresponding y-coordinate is 1 byte long, not 2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 4; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 84pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=112&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Repeat&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 43pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=57&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;3&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #ebe9ed; BORDER-BOTTOM-COLOR: #ebe9ed; PADDING-BOTTOM: 0cm; WIDTH: 259pt; BORDER-TOP-COLOR: #ebe9ed; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ebe9ed&quot; vAlign=top width=345&gt; &lt;P class=tinfo style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;If set, the next byte specifies the number of additional times this set of flags is to be repeated. In this way, the number of flags listed can be smaller than the number of points in a character.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 5; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 0cm;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Bit-banging을 이용한 AVR과 Optical Mouse Sensor간의 통신 </title>
            <link>http://www.swssm.org/index.php?idx=267</link>
            <description>안녕하세요. 18기 조준희입니다. &lt;br /&gt;이번 글에서는 AVR과 광마우스 센서의 일종인 ADNS-2051간의 통신을 설명하려고 합니다. &lt;br /&gt;&lt;br /&gt;먼저 AVR과 ADNS-2501간의 연결 도식도입니다. &lt;br /&gt;&lt;br /&gt; &lt;P align=center&gt;&lt;IMG src=&quot;http://lh5.ggpht.com/_PHVCe3qZU7c/SWJhL0e_vWI/AAAAAAAABK0/4cVfqFe4wJY/s400/Connection%20Diagram.JPG&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; align=justify b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;ADNS-2051은 2선식 동기식 직렬통신 방법을 사용하며, 이 통식 방법을 이용하여 ADNS-2051안의 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;파라미터(레지스터)를 설정하거나 값을 읽어 올 수 있습니다. 포트는 2선이며, 반이중 방식이며, 호스트 마&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;이크로 컨트롤러(avr)는 항상 통신을 초기화합니다. &lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; align=justify b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;- SCLK : The serial port clock. 항상 마스터에 의해 발생합니다. &lt;/FONT&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; align=justify b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;- SDIO : The data line.&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; align=justify b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;기본적으로 2선식 직렬통신 포트는 필립사에서 제안한 근거리용 표준 직렬통신 방식인 I&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&lt;SUP&gt;2&lt;/SUP&gt;&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;C 버스로 통&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;신하는 방식이 있으며, Avr에서도 이와 같은 방식으로 동작하는 TWI(Two-Wire Serial Interface)가 존재합니&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;다. 이것은 2선식 직렬통신 방식으로 항상 마스터와 슬레이브 사이에서 직렬로 데이터를 송수신할 수 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;있습니다. 하지만 ADNS-2051에서는 안타깝게도 이와 같은 통식 방식을 지원하지 않습니다. 따라서 몇몇의 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;레지스터 설정을 통한 미리 정의되어 있는 프로토콜 사용하는 대신에 소프트웨어적으로 직렬 통신방식&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;을 구현해야 합니다. 이와 같이 미리 지정된 하드웨어적인 방법 대신 소프트웨어 만을 사용하여 직렬 통&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;신을 구현하는 기법을 &lt;FONT color=#ff0000&gt;Bit-banging&lt;/FONT&gt;이라 합니다. &lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.6&quot; align=justify b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;다음은 wikipedia에서 Bit-banging을 설명한 내용입니다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 16pt&quot; align=justify&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;Bit-banging is a technique for serial communications to use software instead of dedicated &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;hardware such as a UART or shift register. A software routine handles the UART transmit function &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;by alternating a pin on the microcontroller by given time intervals. A receiver function is &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;implemented by sampling a pin on the microcontroller by a given time interval. The technique can &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;be applied in very low cost embedded systems.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;SCLK와 SDIO에 연결된 핀은 미리 지정된 핀이 아니므로 임의로 지정할 수 있습니다. 여기서는 연결 도식도에 나타난 바와 같이 SCLK는 PB0, SDIO는 PC0에 연결하였습니다. &lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 16pt&quot; align=justify&gt;&lt;FONT style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;Write Operation&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 16pt&quot; align=justify b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;Write operation(마이크로컨트롤러 → ADNS-2051)은 항상 마이크로컨트롤러에 의해 초기화 되며, &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;2bytes로 구성되어 있습니다. 첫 번째 바이트는 주소(seven bits)이며, 데이터 방향을 가리키기 위하여 MSB &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;값으로 1을 가집니다. 두 번째 바이트는 데이터이며, 전송은 SCLK에 의해 동기됩니다. 마이크로컨트롤러는 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;SCLK의 falling edge일 때 SDIO를 change하며, ADNS-2051은 SCLK의 rising edge에서 SDIO를 읽습니&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 16pt&quot; align=center&gt;&lt;IMG src=&quot;http://lh5.ggpht.com/_PHVCe3qZU7c/SWJhMZY9u2I/AAAAAAAABK8/XJYcVBc3KYo/s400/Write%20Operation.JPG&quot;&gt;&lt;/P&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 16pt&quot; align=justify b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;다음은 Bit-banging 기법을 사용하여 Write 동작을 구현한 코드입니다. byte단위로 함수를 구현하였기 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;때문에 Write에서는 주소와 데이터를 나누어 총 2번을 write합니다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;IMG src=&quot;http://lh5.ggpht.com/_PHVCe3qZU7c/SWJhM9C_6AI/AAAAAAAABLE/Iwq1eyhcGqc/s400/Write.JPG&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;Read Operation&lt;br /&gt;&lt;/STRONG&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 16pt&quot; align=justify b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;Read operation(ADNS-2051 → 마이크로컨트롤러)도 항상 마이크로컨트롤러에 의해 초기화 되며, &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;2bytes로 구성되어 있습니다. 첫 번째 바이트는 주소이며, 마이크로컨트롤러에 의해 write되고 데이터 방향&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;을 가리키기 위하여 MSB 값으로 0을 가집니다. 두 번째 바이트는 데이터이며, ADNS-2051에 의해 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;driven됩니다. 전송은 역시 SCLK에 의해 동기되며, SDIO는 SCLK의 falling edge일 때 change되고 SCLK&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;의 모든 rising edge에서 읽습니다. 또한 ADNS-2051은 마지막 데이터 비트를 보낸 후에 high Z 상태로 가기 때문에 마이크로컨트롤러는 마지막 주소 비트를 보낸 후에 high Z 상태&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;로 가야합니다. read operation에서 특히 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;주의해야 하는 것은 마지막 주소 비트는 보낸 후에 ADNS-2051이 데이터를 준비하는데 적어도 100μs 필&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;요하기 때문에 SCLK를 delay해줘야 하는 것입니다.&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT style=&quot;FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&lt;br /&gt;&lt;/FONT&gt; &lt;P align=center&gt;&lt;IMG src=&quot;http://lh5.ggpht.com/_PHVCe3qZU7c/SWJhNnNsJCI/AAAAAAAABLM/t_NsP4ca-qc/s400/Read%20Operation.JPG&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 16pt&quot; align=justify b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;다음은 Bit-banging 기법을 사용하여 Read 동작을 구현한 코드입니다. 역시 byte단위로 함수를 구현하&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;였고 주소는 마이크로컨트롤러가 보내며 데이터는 ADNS-2051이 보내기 때문에 1번의 write와 1번의 &lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;read가 발생합니다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;IMG src=&quot;http://lh3.ggpht.com/_PHVCe3qZU7c/SWJhOeg70TI/AAAAAAAABLU/ZxXU3nvEe1E/s400/Read.JPG&quot;&gt;&lt;br /&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 16pt&quot; align=justify b:bd=&quot;3&quot;&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;이 밖에 고려되어야 할 사항으로는 Read와 Write 명령 사이에 요구되는 시간(delay)이 있으며,&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&amp;nbsp;Write operation과 read operation을 통하여 ADNS-2051의 register들을 설정하거나 읽음으로서, AVR과 ADNS-2051간의 통신을 할 수 있습니다. &amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>GPS Data </title>
            <link>http://www.swssm.org/index.php?idx=268</link>
            <description>&lt;P&gt;안녕하세요. 삼성소프트웨어 멤버십 17-2기 이슬희 입니다. 저희 Driver Management System팀에서는 GPS를 사용하였습니다. 그래서 이번에는 GPS Data에 대해서 써보려고 합니다.&lt;br /&gt;&lt;br /&gt;사용하고 있는 GPS 수신기의 데이타 인터페이스 포맷이 NMEA-0183 입니다.&lt;br /&gt;NMEA-0183 포맷은 아래와 같습니다다.&lt;/P&gt; &lt;P&gt;&lt;STRONG&gt;NMEA&lt;/STRONG&gt;: &lt;STRONG&gt;N&lt;/STRONG&gt;ational &lt;STRONG&gt;M&lt;/STRONG&gt;arine &lt;STRONG&gt;E&lt;/STRONG&gt;lectronics &lt;STRONG&gt;A&lt;/STRONG&gt;ssociation&lt;br /&gt;NMEA 에서는 GNSS, GPS, Loran, Omega, Transit 등 다양한 애플리케이션을 위한 데이타셋을 정의하고 있습니다.&lt;br /&gt;&lt;br /&gt;- GPS 를 위한 7가지 데이타 셋 -&lt;/P&gt; &lt;P&gt;1. GGA: GPS Fix Data, &lt;br /&gt;2. GLL: Geographic Position - Latitude/Longitude &lt;br /&gt;3. GSA: GNSS DOP 와 Active Satellites &lt;br /&gt;4. GSV: GNSS Satellites in View &lt;br /&gt;5. RMC: Recommended Minumun Specific GNSS Data &lt;br /&gt;6. VTG: Course over Ground &lt;br /&gt;7. ZDA: Time and Date&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;NMEA 프로토콜의 구조&lt;/STRONG&gt;&lt;/P&gt; &lt;P&gt;8비트 아스키 문자를 사용하여 4800 Baud 로 데이타를 전송합니다. 패리티 비트는 사용하지 않습니다.&lt;br /&gt;각 GPS 데이타셋은 다음과 같은 구조로 이루어져 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;/P&gt; &lt;DIV&gt;&lt;STRONG&gt;$GPDTS,Inf_1,Inf_2,Inf_3,Inf_4,Inf_5,Inf_6,Inf_n*CS&amp;lt;CR&amp;gt;&amp;lt;LF&amp;gt;&lt;br /&gt;&lt;/STRONG&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: left&quot;&gt;&lt;STRONG&gt;$ :&lt;/STRONG&gt; 데이타셋의 시작을 나타낸다. &lt;br /&gt;&lt;STRONG&gt;GP :&lt;/STRONG&gt; GPS 정보를 나타낸다.&lt;br /&gt;&lt;STRONG&gt;DTS :&lt;/STRONG&gt; 데이타셋의 식별자.&lt;br /&gt;&lt;STRONG&gt;Inf_1 bis Inf_n :&lt;/STRONG&gt; 1 ... n 정보 (예, course data 를 위한 175.4)&lt;br /&gt;&lt;STRONG&gt;, :&lt;/STRONG&gt; 서로 다른 정보를 나타내는 아이템간의 구분문자&lt;br /&gt;&lt;STRONG&gt;* :&lt;/STRONG&gt; checksum 을 위한 구분 문자&lt;br /&gt;&lt;STRONG&gt;CS :&lt;/STRONG&gt; 전체 데이타셋을 검사하기 위한 첵섬(Control Word) &lt;STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;lt;CR&amp;gt;&amp;lt;LF&amp;gt; :&lt;/STRONG&gt; 데이타셋의 끝.&lt;br /&gt;GPS 데이타셋의 문자열은 시작과 끝을 나타내는 문자를 제외하고 79자를 초과해서는 안됩니다.&lt;br /&gt;&lt;/DIV&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: left&quot;&gt;&lt;STRONG&gt;1. GGA 데이타 셋&lt;br /&gt;&lt;/STRONG&gt;&lt;/DIV&gt; &lt;DIV style=&quot;TEXT-ALIGN: left&quot;&gt; &lt;DIV&gt;GGA 데이타셋은 시간, longitude, latitude, 시스템의 품질, 사용중인 위성의 수, Height 에 대한 정보를 나타냅니다.&lt;br /&gt;&lt;br /&gt;데이타 예제&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $GPGGA,004952,3723.8259,N,12655.3071,E,1,04,04.7,00046.9,M,018.1,M,,*4F&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;2. GLL 데이타 셋&lt;/STRONG&gt;&lt;br /&gt;GLL 데이타 셋은 Latitude, Longitude, time, health 정보를 갖고 있습니다.&lt;br /&gt;&lt;br /&gt;데이타 예제&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $GPGLL,4717.115,N,00833.912,E,130305.0,A,*32&lt;br /&gt;&lt;br /&gt;3&lt;STRONG&gt;. GSA 데이타 셋&lt;/STRONG&gt;&lt;br /&gt;측정 모드(2D, 3D)에 대한 정보, 위치 결정에 사용된 위성의 수, DOP 등의 정보를 갖고 있습니다.&lt;/DIV&gt; &lt;P&gt;데이타 예제 &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; $GPGSA,A,3,13,16,19,23,,,,,,,,,19.3,04.7,18.7*08&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;4. GSV 데이타 셋&lt;/STRONG&gt;&lt;br /&gt;위성의 수&lt;br /&gt;&lt;br /&gt;데이타 예제&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; $GPGSV,2,1,05,13,33,295,40,16,57,043,41,19,42,212,41,23,40,249,38*7B&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;5. RMC 데이타 셋&lt;/STRONG&gt;&lt;br /&gt;Recommended Minumum Specific GNSS, 시간, latitude, longitude, height, system status, speed, course, date 등의 정보를 갖고 있습니다.&lt;/P&gt; &lt;P&gt;데이타 예제 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; $GPRMC,004952,A,3723.8259,N,12655.3071,E,000.0,088.7,291107,,,A*72&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;6. VTG 데이타 셋&lt;br /&gt;&lt;/STRONG&gt;경로와 속도에 기반한 지상 경로와 속도 정보를 갖고 있습니다.&lt;/P&gt; &lt;P&gt;데이타 예제&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; $GPVTG,088.7,T,,M,000.0,N,000.0,K,A*0A&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;7. ZDA 데이타 셋&lt;br /&gt;&lt;/STRONG&gt;시간 정보가 들어 있습니다.&lt;/P&gt; &lt;P&gt;데이타 예제&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; $GPZDA,130305.2,20,06.2001,,,*57&lt;/P&gt; &lt;P&gt;&lt;br /&gt;&amp;nbsp;아! 마지막으로 GPS를 측정할때는 건물안처럼 사방이 둘러쌓인 곳에서는 측정이 안된다는 사실을 명심해주세요 ^ ^&lt;br /&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Otical Mouse Scanner - Software part </title>
            <link>http://www.swssm.org/index.php?idx=277</link>
            <description>&lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;안녕하세요~&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;Optical Mouse Scanner&lt;/STRONG&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;이미지에 문자가 있으면 문자를 추출하고 Open API를 이용한 네이버 사전을 연동해서 뜻을 검색할 수 있도록&lt;br /&gt;&lt;br /&gt;만들었습니다. 그럼 제가 담당한 문자인식, 이미지프로세싱를 소개하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;1. &lt;/FONT&gt;&lt;A href=&quot;http://code.google.com/p/tesseract-ocr/&quot; target=_blank&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;Tesseract OCR Engine&lt;br /&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;br /&gt;&lt;/STRONG&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;FONT size=2&gt;프로젝트를 계획 할 때 문자인식을 직접 개발하려 했으나 짧은 일정과 문자인식 자체만으로도&lt;br /&gt;&amp;nbsp;&lt;br /&gt;큰 프로젝트이기 때문에 대안으로 오픈 소스인 Tesseract OCR 엔진을 선택했습니다.&lt;br /&gt;&lt;br /&gt;그래서 문자를 인식하는 부분만 오픈 소스를 이용하고 나머지 부분( 이미지 프로세싱 )을 직접&lt;br /&gt;&lt;br /&gt;구현하였습니다.&lt;br /&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;Tesseract OCR 엔진은 문자인식을 위한 엔진으로서 HP에서 개발된 엔진으로 현재는 Google Code의&lt;br /&gt;&amp;nbsp;&lt;br /&gt;지원을 받을 받으며 계속 개발 중에 있습니다.&amp;nbsp; 이 엔진은 binary, 흑백, 컬러 이미지에서 문자를 추출할 수&lt;br /&gt;&lt;br /&gt;있고 uncompressed &lt;/FONT&gt;&lt;A href=&quot;http://ko.wikipedia.org/wiki/TIFF&quot; target=_blank&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;TIFF&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt; 이미지를 읽을 수 있는 tiff 리더가 포함되어 있으며, compressed 이미지를&lt;br /&gt;&amp;nbsp;&lt;br /&gt;읽기위해 libtiff를 추가할 수도 있습니다. 문자 인식 과정은 다음과 같습니다. &lt;br /&gt;&lt;br /&gt;1. 스캔된 이미지에서 각종 선들을 읽습니다.&lt;br /&gt;2. 읽어선 선의 검정색 픽셀들을 픽셀보다 더작은 점 단위로 쪼갭니다.&lt;br /&gt;3. 쪼갠 점들로부터 윤곽을 추출하기 위해 처리를 합니다.&lt;br /&gt;4. 윤곽과 연속된 쪼갠 점들로 부터 문자의 외곽선을 추출합니다.&lt;br /&gt;5. 점들을 문자 단위로 구분합니다.&lt;br /&gt;6. 구분된 모든 문자의 특징들을 파악합니다.&lt;br /&gt;7. 저장되어 있는 문자셋과 그 특징들을 비교 분석합니다.&lt;br /&gt;8. 가장 적합한 문자를 뽑아 냅니다.&lt;br /&gt;&lt;br /&gt;위와 같은 과정을 거치면 문자가 나오게 되는데 하지만 정확도가 뛰어 나려면 문자의 기울기, 선명도,&lt;br /&gt;&amp;nbsp;&lt;br /&gt;노이즈 등 과 같은 많은 부분을 고려해야합니다. 그런 부분을 교정하기 위해 이미지 전처리 과정을&lt;br /&gt;&lt;br /&gt;거치게 되는데 어떤 방법으로 전처리를 했는지 보여드리겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;2. 이미지 전처리&lt;/FONT&gt;&lt;/STRONG&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;이진 영상은 0과 1의 값만 갖는 2레벨 영상입니다. 다른말로는 1비트 영상이라고도 하는데요, 명암도&lt;br /&gt;&amp;nbsp;&lt;br /&gt;영상은 0 ~ 255까지의 256레벨을 가지는데 다음과 같은 공식응 적용해서 이진화 영상을 만들게&lt;br /&gt;&lt;br /&gt;됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #faffa9&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; ┌ &amp;nbsp;&amp;nbsp; 1 if &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; gray_image[x][y] ≥ threshold&lt;br /&gt;binary_image[x][y] &amp;nbsp;&amp;nbsp; │&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;└ &amp;nbsp;&amp;nbsp; 0 else if &amp;nbsp; gray_image[x][y] ≤ threshold&lt;br /&gt;&lt;/FONT&gt;&lt;/DIV&gt; &lt;P&gt;&lt;/FONT&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;IMG src=&quot;http://lh3.ggpht.com/_AIK0xcRuTKk/SVsgy4m01aI/AAAAAAAAAFc/vwW4qNWR0F0/s288/%EC%9D%B4%EC%A7%84%ED%99%94%EC%A0%84.jpg&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;IMG src=&quot;http://lh5.ggpht.com/_AIK0xcRuTKk/SVsgzLCVfzI/AAAAAAAAAFk/VXulAjwMWVU/s400/%EC%9D%B4%EC%A7%84%ED%99%94%ED%9B%84.jpg&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;처리 전&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;처리 후&amp;gt;&lt;br /&gt;&lt;br /&gt;위 그림 처럼 왼쪽의 그림의 명암도가 오른쪽 그림처럼 사라진것을 알수가 있습니다. 따라서 좀더 나은 문자&lt;br /&gt;&lt;br /&gt;인식을 위한 그림을 얻게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;FONT size=2&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;/FONT&gt;&lt;IMG style=&quot;WIDTH: 281px; HEIGHT: 219px&quot; height=240 src=&quot;http://lh6.ggpht.com/_AIK0xcRuTKk/SVsgyg9cngI/AAAAAAAAAFM/X7kQJ47Opkk/s400/%EB%AA%A8%ED%8F%B4%EB%A1%9C%EC%A7%80%EC%A0%84.jpg&quot; width=281&gt;&amp;nbsp; &lt;IMG src=&quot;http://lh3.ggpht.com/_AIK0xcRuTKk/SVslVeRSmYI/AAAAAAAAAGE/FZeblE-qEH4/s288/%EB%AA%A8%ED%8F%B4%EB%A1%9C%EC%A7%80%ED%9B%84.jpg&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;처리 전&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;처리 후&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;■ 확대&lt;br /&gt;&lt;br /&gt;일반적으로 이미지를 확대하면 아래의 그림과 같은 방법으로 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;IMG src=&quot;http://lh4.ggpht.com/_AIK0xcRuTKk/SVsvZ8pJPnI/AAAAAAAAAIE/1Q6O1ihzJ3U/s400/%ED%99%95%EB%8C%80.jpg&quot;&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;그림에서 2배 확대에 대한 것이 두 가지로 나뉜 것을&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt; 볼 수 있는데, 이것은 첫 인덱스가 (0,0)이냐 아니면&lt;br /&gt;&lt;br /&gt;(1, 1)이냐에 따라 구분한 것입니다. 전자의 경우 C, Java 계열에서 주로 쓰이고 후자는 Visual Basic, MATLAB&lt;br /&gt;&lt;br /&gt;등에서 쓰여집니다. 그러므로 2배 확대한다는 공식자체는 불변한데, 인덱스 처리 방법이 다른 관계로 프로그래&lt;br /&gt;&lt;br /&gt;밍 언어별로 실제 코딩 내용이 달라질 수 있음에 유의해여합니다. 확대 공식은 아래와 같습니다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #faffa9&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;x_target_pixel = scale * x_source_pixel&lt;br /&gt;y_target_pixel = scale * y_source_pixel&lt;br /&gt;Target_image[x][y] = Source_image[x*scale][y*scale]&lt;/FONT&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;x_target_pixel과 y_target_pixel은 목적 영상의 화소 위치, x_source_pixel과 y_source_pixel은 원 영상의 위치, &lt;br /&gt;&lt;br /&gt;scale은 확대 비율을 가리킵니다. &lt;br /&gt;&lt;br /&gt;그런데 그림에보면 확대함으로써 새로운 공간이 생기는데 이 화소를 가르켜 hole이라고 합니다. 이런 홀에는&lt;br /&gt;&lt;br /&gt;어떤값을 넣어야 할까요? 네~ 적당한 값;;을 채워 넣어야지요. 바로 이 적당한 값을 채워 넣는 방법이 보간법&lt;br /&gt;&lt;br /&gt;입니다. 저는 보간법 중에서는 양선형 보간법을 사용했는데 원리는 아래와 같습니다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;IMG src=&quot;http://lh4.ggpht.com/_AIK0xcRuTKk/SVsvaMMIURI/AAAAAAAAAIM/LW0tJhbUBp0/s400/%EB%B3%B4%EA%B0%84%EB%B2%95.jpg&quot;&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;양선형 보간법은 보간 대상 위치 주변에 있는 주어진 4개 화소를 이용하여 2차례 보간법으로 보간한 값을 구하&lt;br /&gt;&lt;br /&gt;여 사상하는 것입니다. 다시 간략히 양선형 보간법 과정을 표현하면 아래와 같습니다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;IMG src=&quot;http://lh4.ggpht.com/_AIK0xcRuTKk/SVs1BJTghqI/AAAAAAAAAIw/RoYVe2Q5IeI/s400/%EC%96%91%EC%84%A0%ED%98%95.jpg&quot;&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;FONT size=2&gt;■ 회전&lt;br /&gt;&lt;/FONT&gt;&lt;br /&gt;회전은 원 영상을 원하는 각도만큼 변환하는 것을 가르키는데 공식은 다음과 같습니다.&lt;br /&gt;&lt;br /&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #faffa9&quot;&gt;x＇ = x·cosθ - y·sinθ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x＇= (x - centerX)·cosθ - ( y - centerY)·sinθ&lt;br /&gt;y＇ = x·sinθ - y·cosθ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y＇= (x - centerX)·sinθ - ( y - centerY)·cosθ&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;그런데 위의 공식을 비트맵 방식에 적용을 한다면 에지 부근에 날카로운 톱니 모양으로 나타납니다. 이것은&lt;br /&gt;&lt;br /&gt;화소의 위치와 cos(), sin() 함수를 연계하여 얻은 값이 실수인 관계로 목적 영상의 화소에 정확히 사상되지&lt;br /&gt;&lt;br /&gt;않기 때문입니다. 또한 영상은 비트맵 방식이라는 한계를 가지고 있기 때문에 이런 현상이 나타납니다. 따라서&lt;br /&gt;&lt;br /&gt;이를 위한 해결책으로는 아까 위에서 언급한 보간법이나 영상 개선 알고리즘을 적용해야 합니다.&lt;br /&gt;&lt;/FONT&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>입출력 구조의 이해와 SSES의 위치 </title>
            <link>http://www.swssm.org/index.php?idx=282</link>
            <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;SSES의 대략적인 위치를 그림으로 나타 내어 보면 다음과 같습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV id=Layer4 style=&quot;MARGIN-TOP: 0px; LEFT: 0px; MARGIN-LEFT: 0px; WIDTH: 233px; POSITION: absolute; HEIGHT: 259px&quot;&gt;&lt;br /&gt;&lt;/DIV&gt; &lt;P align=center&gt;&lt;IMG height=259 src=&quot;file:///C:/Documents%20and%20Settings/이정훈/Local%20Settings/Temp/hunclip1/05/huntemp.files/img0001.jpg&quot; width=233 border=0 b:orgtype=&quot;page&quot; b:ra=&quot;no&quot; b:anchor=&quot;off&quot;&gt;&lt;br /&gt;&lt;/P&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.2&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;User Application단에서 Read 또는 Write 요청이 일어나게 되면, 해당 요청들은 VFS단으로 흘러 들어 오게 됩&lt;br /&gt;&lt;br /&gt;니다. 이 VFS는 가상 파일 시스템의 약자로, 다른 파일시스템을 가지고 있는 장치 들의 파일 시스템을 추상적으&lt;br /&gt;&lt;br /&gt;로 나타낸것으로, 다른 파일시스템을 마운트 하여 사용 할수 있다는것을 의미 합니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;VFS를 거쳐, 각장치의 파일시스템을 통해 Read, Write의 요청이 있게 되고 , 각장치의 IO가 발생하게 되면 기본&lt;br /&gt;&lt;br /&gt;적으로는 I/O Scheduler에 등록이 되어 처리를 기다리게 됩니다. 이 I/O Scheduler의 역할은 상대적으로 속도&lt;br /&gt;&lt;br /&gt;가 느린 입출력 장치의 처리를 위해, 한꺼번에 관련된 데이터를 모아서 처리를 하는 형태를 취하게 되어, 한번의 &lt;br /&gt;Access로 많은 데이터를 처리 할수 있는 기반을 만들어 주게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;해당 시스템은 I/O Scheduler의 위쪽에 위치하여 입출력을 Hooking하는과정을 통해 Read, Write를 할 Target&lt;br /&gt;&lt;br /&gt;을 제어 하게 됩니다. 제어를 통해 필요한 Page정보들을 외부 장치에 해당하는 NAND로 흘러 들어가거나, 아니&lt;br /&gt;&lt;br /&gt;면 기존의 HDD로의 제어를 유지하게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;좀더 세부적인 구조를 나타내어 보도록 하겠습니다.&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;IMG style=&quot;WIDTH: 498px; HEIGHT: 279px&quot; height=272 src=&quot;file:///C:/Documents%20and%20Settings/이정훈/Local%20Settings/Temp/hunclip1/11/huntemp.files/구조.JPG&quot; width=487 align=right border=0 b:orgtype=&quot;para&quot; b:ra=&quot;no&quot; b:anchor=&quot;off&quot;&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.2&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.2&quot;&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;먼저 SSES의 위치적인 내용은 위쪽 그림에서는 I/O Scheduler의 상위에 위치한다고 적었습니다. 하지만 실제&lt;br /&gt;&lt;br /&gt;적으로 Hooking을 하는 부분은 그 밑부분의 HDD에서 Request를 처리 하는 부분입니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;장치디바이스에 Access할때, 각 장치 디바이스를 위한 큐가 존재하게 되는데 이때의 큐에 흘러 들어온 &lt;br /&gt;&lt;br /&gt;Request를 가져와 해당 Page 정보가 흘러 들어갈 Target의 위치를 수정하고, 다시 I/O Scheduler에 등록을 하&lt;br /&gt;&lt;br /&gt;게 되면, 변환된 Target설정으로 인해, 다른 목적지로 데이터가 흘러 들어가게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;다른곳에서는 외부장치에 흘러 들어가는 Data들의 메타데이터를 유지하여 관리하고, 관리된 정보들을 통해 어&lt;br /&gt;&lt;br /&gt;느곳을 Target으로 정할 것인지를 결정 하게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 과정을 통해 IO입출력의 흐름을 제어 하게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Introduction to 손글씨 A2Z </title>
            <link>http://www.swssm.org/index.php?idx=283</link>
            <description>&lt;P&gt;안녕하십니까 16년동안 손글씨만 써온 손글씨의 달인 악필 조일용입니다.&lt;br /&gt;&lt;br /&gt;우리 악필팀은 17기 조일용과 18기 김정훈 두명이구요 손글씨 A2Z 프로젝트를 진행하고 있습니다.&lt;br /&gt;&lt;br /&gt;이번 포스팅에선 손글씨 A2Z를 소개하도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;우선 시작발표회때 사용한 PPT를 보시겠습니다.&lt;br /&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt; &lt;SCRIPT type=text/javascript&gt; //&lt;![CDATA[ var iMazing491Params = { &quot;action&quot;: &quot;/script/gallery/iMazing/embed.php&quot;, &quot;id&quot;: &quot;491&quot;, &quot;frame&quot;: &quot;net_imazing_frame_none&quot;, &quot;transition&quot;: &quot;net_imazing_show_window_transition_alpha&quot;, &quot;navigation&quot;: &quot;net_imazing_show_window_navigation_simple&quot;, &quot;slideshowInterval&quot;: &quot;10&quot;, &quot;page&quot;: &quot;1&quot;, &quot;align&quot;: &quot;h&quot;, &quot;owner&quot;: &quot;263893&quot;, &quot;images&quot;: &quot;http%3A%2F%2Fcfs15.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE1LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDguUE5H*!http%3A%2F%2Fcfs13.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEzLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDcuUE5H*!http%3A%2F%2Fcfs14.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE0LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDcuUE5H*!http%3A%2F%2Fcfs11.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczExLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDUuUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDguUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDcuUE5H*!http%3A%2F%2Fcfs13.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEzLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDYuUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDYuUE5H*!http%3A%2F%2Fcfs15.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE1LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDcuUE5H*!http%3A%2F%2Fcfs15.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE1LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDYuUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDUuUE5H*!http%3A%2F%2Fcfs15.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE1LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDUuUE5H*!http%3A%2F%2Fcfs13.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEzLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDUuUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDQuUE5H*!http%3A%2F%2Fcfs13.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEzLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDQuUE5H*!http%3A%2F%2Fcfs11.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczExLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDQuUE5H*!http%3A%2F%2Fcfs15.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE1LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDQuUE5H*!http%3A%2F%2Fcfs11.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczExLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDMuUE5H*!http%3A%2F%2Fcfs13.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEzLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDMuUE5H*!http%3A%2F%2Fcfs14.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE0LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDYuUE5H*!http%3A%2F%2Fcfs12.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEyLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8wODAwMDAwMDAwMDcuUE5H*!http%3A%2F%2Fcfs12.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEyLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8wODAwMDAwMDAwMDYuUE5H*!http%3A%2F%2Fcfs12.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEyLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8wODAwMDAwMDAwMDUuUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDMuUE5H&quot;, &quot;caption&quot;: &quot;&quot;, &quot;root&quot;: &quot;&quot; }; //]]&gt; &lt;/SCRIPT&gt; &lt;IMG style=&quot;CURSOR: pointer&quot; onclick=enlargeImagzing(iMazing491Params) alt=확대 src=&quot;http://cfs.tistory.com/blog/image/gallery/gallery_enlarge.gif&quot;&gt; &lt;DIV id=iMazingContainer491 style=&quot;MARGIN: 0px auto; WIDTH: 352px; HEIGHT: 284px&quot;&gt; &lt;OBJECT id=iMazing491 codeBase=http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0 height=&quot;100%&quot; width=&quot;100%&quot; align=middle classid=clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&gt;&lt;PARAM NAME=&quot;_cx&quot; VALUE=&quot;9287&quot;&gt;&lt;PARAM NAME=&quot;_cy&quot; VALUE=&quot;7514&quot;&gt;&lt;PARAM NAME=&quot;FlashVars&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;Movie&quot; VALUE=&quot;http://cfs.tistory.com/blog/script/gallery/iMazing/main.swf&quot;&gt;&lt;PARAM NAME=&quot;Src&quot; VALUE=&quot;http://cfs.tistory.com/blog/script/gallery/iMazing/main.swf&quot;&gt;&lt;PARAM NAME=&quot;WMode&quot; VALUE=&quot;Transparent&quot;&gt;&lt;PARAM NAME=&quot;Play&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;Loop&quot; VALUE=&quot;-1&quot;&gt;&lt;PARAM NAME=&quot;Quality&quot; VALUE=&quot;High&quot;&gt;&lt;PARAM NAME=&quot;SAlign&quot; VALUE=&quot;LT&quot;&gt;&lt;PARAM NAME=&quot;Menu&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;Base&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;AllowScriptAccess&quot; VALUE=&quot;always&quot;&gt;&lt;PARAM NAME=&quot;Scale&quot; VALUE=&quot;NoScale&quot;&gt;&lt;PARAM NAME=&quot;DeviceFont&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;EmbedMovie&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;BGColor&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;SWRemote&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;MovieData&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;SeamlessTabbing&quot; VALUE=&quot;1&quot;&gt;&lt;PARAM NAME=&quot;Profile&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;ProfileAddress&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;ProfilePort&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;AllowNetworking&quot; VALUE=&quot;all&quot;&gt;&lt;PARAM NAME=&quot;AllowFullScreen&quot; VALUE=&quot;false&quot;&gt;&lt;/OBJECT&gt;&lt;/DIV&gt; &lt;SCRIPT type=text/javascript&gt; //&lt;![CDATA[ var iMazing491Str = getEmbedCode( &quot;http://cfs.tistory.com/blog/script/gallery/iMazing/main.swf&quot;, &quot;100%&quot;, &quot;100%&quot;, &quot;iMazing491&quot;, &quot;#FFFFFF&quot;, &quot;image=http%3A%2F%2Fcfs15.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE1LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDguUE5H*!http%3A%2F%2Fcfs13.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEzLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDcuUE5H*!http%3A%2F%2Fcfs14.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE0LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDcuUE5H*!http%3A%2F%2Fcfs11.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczExLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDUuUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDguUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDcuUE5H*!http%3A%2F%2Fcfs13.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEzLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDYuUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDYuUE5H*!http%3A%2F%2Fcfs15.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE1LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDcuUE5H*!http%3A%2F%2Fcfs15.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE1LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDYuUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDUuUE5H*!http%3A%2F%2Fcfs15.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE1LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDUuUE5H*!http%3A%2F%2Fcfs13.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEzLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDUuUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDQuUE5H*!http%3A%2F%2Fcfs13.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEzLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDQuUE5H*!http%3A%2F%2Fcfs11.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczExLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDQuUE5H*!http%3A%2F%2Fcfs15.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE1LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDQuUE5H*!http%3A%2F%2Fcfs11.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczExLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDMuUE5H*!http%3A%2F%2Fcfs13.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEzLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDMuUE5H*!http%3A%2F%2Fcfs14.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczE0LnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDYuUE5H*!http%3A%2F%2Fcfs12.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEyLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8wODAwMDAwMDAwMDcuUE5H*!http%3A%2F%2Fcfs12.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEyLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8wODAwMDAwMDAwMDYuUE5H*!http%3A%2F%2Fcfs12.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEyLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8wODAwMDAwMDAwMDUuUE5H*!http%3A%2F%2Fcfs10.tistory.com%2Fupload_control%2Fdownload.blog%3Ffhandle%3DYmxvZzI2Mzg5M0BmczEwLnRpc3RvcnkuY29tOi9hdHRhY2gvMC8xNTAwMDAwMDAwMDMuUE5H&amp;amp;frame=net_imazing_frame_none&amp;amp;transition=net_imazing_show_window_transition_alpha&amp;amp;navigation=net_imazing_show_window_navigation_simple&amp;amp;slideshowInterval=10&amp;amp;page=1&amp;amp;align=h&amp;amp;skinPath=http://cfs.tistory.com/blog/script/gallery/iMazing/&amp;amp;&quot;, &quot;false&quot;, &quot;transparent&quot; ); writeCode2(iMazing491Str, &quot;iMazingContainer491&quot;); //]]&gt; &lt;/SCRIPT&gt; &lt;/DIV&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;STRONG&gt;1. 손글씨 서식 출력&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt;우선은 자신의 글씨를 종이에 써야겠죠? 사용자는 아래 프로그램을 이용하여 손글씨 서식을 출력한 후 그 위에 글씨를 씁니다. &lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=648 alt=&quot;&quot; src=&quot;http://cfs10.tistory.com/image/25/tistory/2008/12/31/02/18/495a57e4a94d8&quot; width=465&gt;&lt;/DIV&gt; &lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;2. 스캔&lt;br /&gt;&lt;br /&gt;&lt;/STRONG&gt;서식을 완성 했으면 스캐너를 이용하여 이미지파일을 만듭니다. &lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=540 alt=&quot;&quot; src=&quot;http://cfs13.tistory.com/image/32/tistory/2008/12/31/02/20/495a58776efd5&quot; width=386&gt;&lt;/DIV&gt;&lt;br /&gt;이제 이미지 파일이 완성되었으면 '손글씨 A2Z' 프로그램이 본격적으로 사용자의 손글씨를 폰트로 변환합니다.&lt;br /&gt;&lt;br /&gt;아래 그림은 '손글씨 A2Z'의 구성을 보여줍니다. 음영으로 진하게 표시된 부분은 포스팅을 하는 현재까지 진행된 상태를 나타냅니다.&lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfs15.tistory.com/original/4/tistory/2008/12/31/02/25/495a599592735')&quot; height=294 alt=&quot;&quot; src=&quot;http://cfs15.tistory.com/image/4/tistory/2008/12/31/02/25/495a599592735&quot; width=494&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;3. 이미지 프로세싱&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt;우선은 스캔한 이미지에서 사용자의 글씨와 문자코드를 이미지프로세싱을 하여 추출해냅니다. 서식에는 약간의 트릭이 있는데 바로 글씨를 써야하는 박스는 파란색, 문자코드는 빨간색으로 출력하고 사용자의 글씨는 검정색으로 쓰도록 합니다. 이는 색상값을 이용하여 각각을 구분할 수 있으므로 이미지 프로세싱 과정을 상당히 단순화시켜 줍니다.&lt;br /&gt;&lt;br /&gt;이미지 프로세싱과 글립분석은 아래 순서로 진행됩니다.&lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG style=&quot;CURSOR: pointer&quot; onclick=&quot;open_img('http://cfs14.tistory.com/original/35/tistory/2008/12/31/02/27/495a5a1ac86ef')&quot; height=451 alt=&quot;&quot; src=&quot;http://cfs14.tistory.com/image/35/tistory/2008/12/31/02/27/495a5a1ac86ef&quot; width=700&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;위의 모식도에서 푸른색은 글씨가&lt;SPAN id=callbacknestilyoantistorycom491460 style=&quot;FLOAT: right; WIDTH: 1px; HEIGHT: 1px&quot;&gt;&lt;EMBED id=bootstrapperilyoantistorycom491460 src=http://ilyoan.tistory.com/plugin/CallBack_bootstrapperSrc?nil_profile=tistory&amp;amp;nil_type=copied_post width=1 height=1 type=application/x-shockwave-flash allowscriptaccess=&quot;always&quot; wmode=&quot;transparent&quot; EnableContextMenu=&quot;false&quot; FlashVars=&quot;&amp;amp;callbackId=ilyoantistorycom491460&amp;amp;host=http://ilyoan.tistory.com&amp;amp;embedCodeSrc=http%3A%2F%2Filyoan.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3Dhttp%3A%2F%2Fcfs.tistory.com%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D49%26callbackId%3Dilyoantistorycom491460%26destDocId%3Dcallbacknestilyoantistorycom491460%26host%3Dhttp%3A%2F%2Filyoan.tistory.com%26float%3Dleft&quot; swLiveConnect=&quot;true&quot;&gt;&lt;/SPAN&gt; 쓰여진 의 영역을 찾는 부분이고 붉은색은 문자코드를 확인하는 부분입니다. 회색은 사용자가 쓴 글씨를 추출해내는 부분입니다. 마지막으로 녹색은 글립의 형태를 분석하고 완성하는 부분입니다.&lt;br /&gt;&lt;br /&gt;각각에 대한 자세한 설명은 추후 따로 포스팅을 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;4. 폰트파일 생성&lt;/STRONG&gt;&lt;br /&gt;&lt;br /&gt;트루타입폰트 파일은 폰트를 정의하는 여러개의 테이블로 구성되어 있습니다. Microsoft와 Adobe에서 표준화하고 유지하고 있는 트루타입스팩에 따르면 모든 트루타입 폰트는 11개의 필수 테이블을 정의하고 있어야 하며 그 외에 추가적으로 옵션테이블을 가질 수 있습니다.&lt;br /&gt;&lt;br /&gt;아래 테이블은 트루타입 폰트에 반드시 포함되어야 할 11개의 필수 테이블 목록입니다.&lt;br /&gt;&lt;br /&gt; &lt;P class=thead style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;&lt;STRONG&gt;Required Tables&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;TABLE class=MsoNormalTable style=&quot;BORDER-COLLAPSE: collapse; mso-table-layout-alt: fixed; mso-padding-alt: 0in 4.0pt 0in 4.0pt&quot; cellSpacing=0 cellPadding=0 border=0&gt; &lt;TBODY&gt; &lt;TR style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 100pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8; mso-border-top-alt: solid windowtext .75pt; mso-border-bottom-alt: solid windowtext .75pt&quot; vAlign=top width=133&gt; &lt;P class=thead style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;&lt;STRONG&gt;Tag&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 335pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8; mso-border-top-alt: solid windowtext .75pt; mso-border-bottom-alt: solid windowtext .75pt&quot; vAlign=top width=447&gt; &lt;P class=thead style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;STRONG&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;Name&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 1; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 100pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=133&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;cmap&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 335pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=447&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;character to glyph mapping&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 2; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 100pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=133&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;glyf&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 335pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=447&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;glyph data&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 3; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 100pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=133&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;head&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 335pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=447&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;font header&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 4; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 100pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=133&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;hhea&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 335pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=447&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;horizontal header&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 5; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 100pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=133&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;hmtx&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 335pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=447&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;horizontal metrics&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 6; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 100pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=133&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;loca&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 335pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=447&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;index to location&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 7; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 100pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=133&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;maxp&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 335pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=447&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;maximum profile&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 8; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 100pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=133&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;name&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 335pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=447&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;naming table&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 9; page-break-inside: avoid&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 100pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=133&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;post&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 335pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=447&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;PostScript information&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR style=&quot;mso-yfti-irow: 10; page-break-inside: avoid; mso-yfti-lastrow: yes&quot;&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 100pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=133&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;OS/2&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt; &lt;TD style=&quot;PADDING-RIGHT: 4pt; PADDING-LEFT: 4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0in; WIDTH: 335pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0in; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8&quot; vAlign=top width=447&gt; &lt;P class=tinfo style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot; color=#000000 size=3&gt;OS/2 and Windows specific metrics&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;필수 테이블 중 가장 중요한 테이블은 역시 글립을 구성하는 베지어 곡선을 정의하는 glyf 테이블입니다. 포스팅을 하고 있는 현재 스팩의 기준에 따라 glyf 테이블을 구현하고 있는 중입니다.&lt;br /&gt;&lt;br /&gt;필수테이블에 대해서는 추후 따로 포스팅을 통해 더 자세히 설명하도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;5. 폰트를 사용&lt;br /&gt;&lt;/STRONG&gt;&lt;br /&gt;폰트가 완성되었다면 이제 사용하는 일만 남았습니다. 다음달 과제가 완료되면 아래 그럼처럼 응용프로그램에서 자유롭게 자신의 글씨를 사용하는 기쁨을 누릴 수 있을 것입니다.&lt;br /&gt;&lt;br /&gt; &lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=461 alt=&quot;&quot; src=&quot;http://cfs15.tistory.com/image/10/tistory/2008/12/31/02/36/495a5c1428aae&quot; width=612&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;손글씨 A2Z의 소개가 제대로 됐는지 모르겠습니다. 여튼 이번 포스팅은 여기서 마치겠습니다.&lt;br /&gt;&lt;br /&gt;다음 포스팅에서는 각각의 세부 기술에 대해서 심도있게 다루도록 하겠습니다.&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Bio 구조체에 관한 이야기 </title>
            <link>http://www.swssm.org/index.php?idx=279</link>
            <description>이번 프로젝트를 진행하면서 가장 기본이 되는 것은 Linux에서의 입출력 구조를 이해하는 것입니다.&lt;br /&gt;&lt;br /&gt;이 구조를 이해하는데 있어서 가장 중요한것은 어떤 단위로 시스템이 운용되는지를 알고, 해당 단위를 나타내기&lt;br /&gt;위한 구성방법을 이해하고 한단계 더 낳아가 그 단위를 개선 하는 것입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV id=Layer1 style=&quot;MARGIN-TOP: 0px; LEFT: 0px; MARGIN-LEFT: 0px; WIDTH: 495px; POSITION: relative; HEIGHT: 324px&quot;&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.2&quot;&gt;&lt;IMG height=339 src=&quot;file:///C:/Documents%20and%20Settings/이정훈/Local%20Settings/Temp/hunclip1/01/huntemp.files/img0001.jpg&quot; width=510 border=1 b:anchor=&quot;off&quot; b:ra=&quot;full&quot; b:orgtype=&quot;page&quot;&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;Figure 1. 현재 Linux상에서의 Bio 구조체 &lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;SSES에서는 시스템 내 모든 블록 장치에 대한 요청을 다루는 커널 구성 요소인 블록 계층의 핵심 자료구조인 &lt;br /&gt;Bio 구조체를 를 다루면서 동작합니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Bio 구조체는 입출력이 진행 중인 블록 장치의 연산 디스크립터로, 대략적인 구조는 Figure 1의 형태로 구성이 &lt;br /&gt;되어 있습니다. 이를 자세히 살펴 본다면, 디스크 저장 영역을 위한 식별자와 입출력&amp;nbsp; 연산에 개입된 메모리 영&lt;br /&gt;역을 기술하는 하나 이상의 세그먼트를 포함해 구성됩니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이는 &amp;nbsp;Bio구조체로&amp;nbsp; 구현되며, 이 안에서 메모리 영역을 기술하는 각각의 세그먼트들이 bio_vec라는 필드를 통&lt;br /&gt;해 연결됩니다. &amp;nbsp;bio_vec 구조체는 또한 실제 메모리 상의 페이지 구조체 내에서의 섹터 위치를 표시합니다.&lt;br /&gt;&lt;br /&gt;각각 Bio 구조체에는 여러개의 Page단위의 데이터를 가지고 있어, 이를 한 Bio 구조체에서 관리 함으로서 한번&lt;br /&gt;의 Access에서 다수개의 Page 단위에 접근이 가능 하도록 하고습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;결국 입출력 작업의 최소 단위는 bio_vec 구조체가 가리키는 특정 페이지 단위가 되기 때문에, 하나의 bio_vec&lt;br /&gt;구조체가 가리키는 page를 최소 단위로 해 SSES의 모든 작업을 하는 것이 바람직 하게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;DIV id=Layer2 style=&quot;MARGIN-TOP: 0px; LEFT: 0px; MARGIN-LEFT: 0px; WIDTH: 480px; POSITION: relative; HEIGHT: 331px&quot;&gt; &lt;P style=&quot;MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 1.2&quot;&gt;&lt;IMG height=339 src=&quot;file:///C:/Documents%20and%20Settings/이정훈/Local%20Settings/Temp/hunclip1/03/huntemp.files/img0001.jpg&quot; width=487 border=1 b:anchor=&quot;off&quot; b:ra=&quot;full&quot; b:orgtype=&quot;page&quot;&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;br /&gt; &lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;Figure 2. 새로운 형태의 Bio 구조체의 이용&lt;br /&gt;&lt;/DIV&gt; &lt;P&gt;&lt;br /&gt;&amp;nbsp;Bio 구조체는 여러개의 메모리 영역 기술 세그먼트를 나타내는 bio_vec 구조체들을 bi_io_vec 필드를 통해 갖&lt;br /&gt;는다고 이야기 했으며, 이 필드가 가리키는 배열의 각 bio_vec 구조체를 입출력 요청의 각 단위로 규정, 처리한&lt;br /&gt;다고 이야기 했습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;bio_vec 구조체를 최소 단위로 구현하는 데 있어서 매번 bio_vec 구조체 내부로 들어가 모든 작업을 하는 것 보&lt;br /&gt;다는 한개의 bio_vec 구조체를 가지는 bio에 대해 작업 하는 것이 보다 독립적이고 호환성이 좋을 것이다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이런 이유로 SSES는 bio 구조체를 쪼개서 페이지 단위의 여러 개의 bio 구조체로 만들고, 이렇게 쪼개진 하나&lt;br /&gt;하나의 bio 구조체에 대해 처리합니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;기존의 Bio구조체를 쪼개는 과정은 다음과 같습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;클라이언트 시스템으로부터 입출력 요청에 의해 bio 구조체가 전해져 올 때, bio 구조체를 Hooking을 하게 됩&lt;br /&gt;니다. &amp;nbsp;가로챈 bio 구조체의 bi_io_vec 필드가 가리키는 bio_vec 구조체의 배열들을 하나하나 돌아가면서, 매번 &lt;br /&gt;새로운 bio 구조체를 하나 생성한 후, 새로운 bio 구조체의 bi_io_vec 필드가 가리키는 값으로 기존 bio 구조체&lt;br /&gt;의 bio_vec 구조체의 배열 값을 하나씩 넣어주게 됩니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;즉, bi_io_vec 필드가 가리키는 bio_vec 구조체 배열이 한개짜리인 bio 구조체를 인위적으로 만드는 것이다.&lt;br /&gt;&lt;br /&gt;이를 통해서 최소의 접근 단위가 Page단위가 되게 하여, Page단의 Tracking을 비롯한 Read, Write의 관리를 진&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;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>OpenGL을 활용한 Modeling과 glBegin() </title>
            <link>http://www.swssm.org/index.php?idx=278</link>
            <description>&lt;font size=&quot;2&quot;&gt;저는 이번 프로젝트에서 김현수(18기) 회원이 취득한 데이터를 가지고 3D Image를 구현하는 부분을 맡았습니다.&lt;br /&gt;&lt;br /&gt;입력으로 받아진 것은 2D Image, 각 Image들간의 접합을 위한 기울기값 그리고 각각의 Depth값입니다. 일단 이렇게 받아진 데이터는 계산하여 한 차원의 3D 좌표값이 되겠습니다. 그러나 이 좌표값을 안다고 해서 그 좌표값들을 무조건 연결한다고 하면 아무런 의미없는 선들이 난무할 것 입니다.(기껏 계산되어 나온 값을 가지고 그런다면 여러가지로 낭비겠죠?...;;)&lt;br /&gt;&lt;br /&gt;이럴 때 가장 중요한 것이 여러가지가 있겠지만 가장 기본이 되는 것은 Modeling이 될 것입니다. 그럼 간단한 예를 통하여 가장 기초적인 modeling의 기본이 될 삼각법과 사각법등을 glBegin()과 설명하겠습니다.&lt;br /&gt;&lt;br /&gt;OpenGL에서 화면상에 점과 선, 그리고 면을 그리는 것은 아주 쉽습니다. 먼저 코드를 살펴보기 전에 알고 있어야 할 것은 OpenGL의 좌표체계는 3차원 직각좌표를 기본으로 하고 있으며 왼쪽에서 오른쪽으로 그 X좌표의 값이 증가하며 아래에서 위쪽으로 Y좌표의 값이 증가한다는 점, 그리고 모니터 화면의 바깥쪽으로 Z값이 증가한다는 점입니다. 또한 폴리곤은 한마디로 안이 채워진 도형이며 면(Face)이라는 것입니다. 이것을 항상 염두에 둔다면 이해하기 쉬울것이라 생각 됩니다.&lt;br /&gt;&lt;br /&gt;이 포스팅의 목표는 일단 화면에 3차원의 정육면체를 나타내는 것입니다. 그리고 아래는 정육면체의 3차원 좌표를 화면에 찍은 것입니다.&lt;br /&gt;&lt;br /&gt;[##_1C|1379936700.jpg|width=&quot;574&quot; height=&quot;530&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;8개의 점을 찍어 보았는데 점들이 잘 안보여서 사진을 크게 하였습니다.&lt;br /&gt;(절대 분량 늘리려고 한 건 아닙니다.ㅡ.ㅡ;;)&lt;br /&gt;&lt;br /&gt;위 사진의 코드 또한 아래와 같습니다.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;div class=&quot;dp-highlighter&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span&gt;&lt;span&gt;// Wireframe Mode&lt;br /&gt;&amp;nbsp; &amp;nbsp; glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; glBegin(GL_POINT&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;S);&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Front Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f,&amp;nbsp; 1.0f, 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f,&amp;nbsp; 1.0f, 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f, 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f, 1.0f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Back Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f,&amp;nbsp; 1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f,&amp;nbsp; 1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f, -1.0f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Top Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, 1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, 1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, 1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, 1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Bottom Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Right Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f,&amp;nbsp; 1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f,&amp;nbsp; 1.0f, -1.0f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Left Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f,&amp;nbsp; 1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f,&amp;nbsp; 1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glEnd();&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;textarea style=&quot;display: none;&quot; name=&quot;CodeHighLighterCode&quot; class=&quot;Cpp&quot; cols=&quot;60&quot; rows=&quot;10&quot; readonly=&quot;readonly&quot;&gt;glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glEnd();&lt;/textarea&gt;&lt;font size=&quot;2&quot;&gt;&lt;br /&gt;OpenGL에서는 각 면들을 나타내기 위하여 6면에 점들을 찍어줍니다. &lt;br /&gt;&lt;br /&gt;그리고 이것은 선긋기들을 활용한 예입니다.&lt;br /&gt;&lt;br /&gt;[##_2C|1212223893.jpg|width=&quot;300&quot; height=&quot;278&quot; alt=&quot;사용자 삽입 이미지&quot;||1140198369.jpg|width=&quot;300&quot; height=&quot;278&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;위의 코드와 다른 부분은 glBegin()의 매크로인데 위의 선긋기는 glBegin(GL_LINES)입니다.&lt;br /&gt;&lt;br /&gt;[##_1C|1108120021.jpg|width=&quot;300&quot; height=&quot;278&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;위의 그림은 glBegin(GL_TRIANGLES)로 한 삼각법의 예입니다.&lt;br /&gt;&lt;br /&gt;[##_2C|1009057755.jpg|width=&quot;300&quot; height=&quot;278&quot; alt=&quot;사용자 삽입 이미지&quot;||1255977700.jpg|width=&quot;300&quot; height=&quot;278&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;위의 그림은 원래 우리가 원하던 정육면체를 나타낸것이고 제가 만든 프로그램에서는 마우스이벤트를 넣어 이리저리 돌려볼 수있게 만들었고 옆의 그림은 3차원임을 더욱 이해 쉽게 하기 위하여 돌려 놓은 것입니다.^^;&lt;br /&gt;깜박했는데 사각법의 매크로는 GL_QUADS이고 실제로 코드에서는 glBegin(GL_QUADS); 입니다.&lt;br /&gt;&lt;br /&gt;최종 완성 코드는 아래와 같습니다.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;div class=&quot;dp-highlighter&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span&gt;&lt;span&gt;// Wireframe Mode&lt;br /&gt;&amp;nbsp; &amp;nbsp; glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; glBegin(GL_QUADS&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Front Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f,&amp;nbsp; 1.0f, 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f,&amp;nbsp; 1.0f, 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f, 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f, 1.0f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Back Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f,&amp;nbsp; 1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f,&amp;nbsp; 1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f, -1.0f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Top Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, 1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, 1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, 1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, 1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Bottom Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Right Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f,&amp;nbsp; 1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f, -1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f( 1.0f,&amp;nbsp; 1.0f, -1.0f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Left Side&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f, -1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f,&amp;nbsp; 1.0f,&amp;nbsp; 1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glVertex3f(-1.0f,&amp;nbsp; 1.0f, -1.0f);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glEnd();&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;textarea style=&quot;display: none;&quot; name=&quot;CodeHighLighterCode&quot; class=&quot;Cpp&quot; cols=&quot;60&quot; rows=&quot;10&quot; readonly=&quot;readonly&quot;&gt;glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glEnd();&lt;/textarea&gt;&lt;font size=&quot;2&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font size=&quot;2&quot;&gt;&lt;br /&gt;이제 glBegin에 올수 있는 인자에 대해서 설명할 건데 아래 그림으로 한방에 &lt;/font&gt;&lt;font size=&quot;2&quot;&gt;도움이 되리라 생각합니다.&lt;br /&gt;&lt;br /&gt;[##_1C|1102261194.gif|width=&quot;579&quot; height=&quot;573&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>인벤터를 활용한 3D CNC 제작 과정 </title>
            <link>http://www.swssm.org/index.php?idx=275</link>
            <description>&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;안녕하세요. 3D 영상복원을 활용한 석고조각팀의 18기 김학수 입니다.&lt;br /&gt;이번 시간에는 Inventor를 사용한 3D CNC의 설계 과정에 대해서 적어보겠습니다.&lt;br /&gt; &lt;P&gt;Inventor는 3D로 복잡한 기계를 설계할 수 있는 cad 프로그램 입니다. 부품 단위로 설계 후 위 사진처럼 조립해 가면서 오차를 확인하고 수정하는 거죠. 사실 지난 한 달 동안 autodest autocad2008로 3D CNC를 설계 했었습니다만 설계가 복잡하고 어려워서 속도를 내기 어려웠죠. 거기에 각각의 부품별 연결이 잘 되는지 확인 할 수가 없어서 설계의 신뢰성이 떨어졌었습니다.(cad로 설계한 도면을 보고 Inventor에서 그대로 만들어 조립했더니 맞지 않더랬죠...)&lt;br /&gt;&lt;br /&gt;하지만 Inventor는 사용이 쉽고 시점을 바꿔가며 오차를 확인 할 수 있어서(프로그램에서 오차가 있는지 확인도 해줍니다) 설계의 신뢰성이 높아졌습니다.&lt;br /&gt;&lt;br /&gt;이제 각 부품별로 설계해서 조립을 해 보도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;3D CNC의 초기 목표는 높이 400mm x 너비 320mm의 크기를 가진 마이크로 CNC입니다.&lt;br /&gt;모터와 샤프트를 고정할 상판을 만들어 보도록 하겠습니다.&lt;br /&gt;샤프트의 길이는 320mm, 10파이 이고, 스크류는 가격이 비싼 볼 스크류 대신 TM스크류를 사용하도록 하겠습니다. &lt;br /&gt;&lt;br /&gt;일단 상판을 만들기 전에 샤프트 지지대, 볼 슬라이더, TM나사, TM스크류, 샤프트 등과 같은 부품을 먼저 만들어 보도록 하겠습니다.(모든 부품 제작을 모두 설명하기 어려우므로 샤프트 지지대(SK)만 자세히 설명하겠습니다.)&lt;br /&gt;&lt;br /&gt;SK의 외형의 크기는 다음과 같습니다. 너비 W = 42mm, 높이 F = 32.8mm, 홀 = 10파이, 볼트 구멍의 중심간의 거리 B = 32mm, 홀의 중심의 높이 = 20mm입니다.&lt;br /&gt;&lt;br /&gt;가장 먼저 사용할 &quot;덩어리&quot;를 만들어 봅시다.&lt;br /&gt;&lt;br /&gt;새 파일-&amp;gt;부품을 선택해 새로운 파일은 만듭니다. 그 다음 스케치를 눌러 2D 스케치 화면으로 들어갑니다.&lt;br /&gt;2점 직사각형 버튼을 눌러 대충 직사각형을 만들고 D를 눌러서 사각형의 너비와 높이를 조절합니다.&lt;br /&gt;&amp;nbsp;[##_1L|1277272297.jpg|width=&quot;600&quot; height=&quot;480&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;그 다음 세로 방향의 Line 2개와 가로 방향의 Line1개를 만듭니다.&lt;br /&gt;&lt;br /&gt;[##_1L|1115815677.jpg|width=&quot;600&quot; height=&quot;513&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;D키를 눌러 간격을 지정해 줍니다. 세로 축의 간격은 18mm, 가로축의 높이는 6mm입니다.&lt;br /&gt;간격이 설정되면 x키로 필요 없는 부분을 삭제해 줍시다. 그리고 높이 20mm 가운데에 10%크기의 원을 그려주도록 합시다.&lt;br /&gt;&lt;br /&gt;[##_1L|1141278490.jpg|width=&quot;600&quot; height=&quot;430&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;이제 2D로 만든 스케치를 3D로 만들어 보겠습니다. 메뉴의 복귀 버튼을 눌러서 스케치 모드에서 나와봅시다.&lt;br /&gt;돌출 버튼을 누르면 나오는 메뉴에서 거리를 14로 입력하고 원하는 면을 선택하면 아래 그림과 같이 스케치에 부피가 생깁니다.&lt;br /&gt;&lt;br /&gt;[##_1L|1402714058.jpg|width=&quot;600&quot; height=&quot;402&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;이제 샤프트 지지대(SK)의 원형이 생겼습니다. 이제 볼트를 연결할 구멍을 만들어 봅시다.&lt;br /&gt;부품을 회전시켜서 밑면이 보이도록 해 봅시다. 그 다음 밑면을 선택하고 스케치를 누릅니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[##_1L|1017464236.jpg|width=&quot;600&quot; height=&quot;413&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;이제 밑면에 구멍을 뚫기 위해서 원을 스케치 해 봅시다.&lt;br /&gt;원(C키)를 눌러 적당한 위치에 작은 원을 그립니다. 그 다음 D키를 이용해서 원의 중심과 옆변, 윗변과의 거리를 각각 5mm,7mm로 조정해 주고 원의 크기는 5파이로 정해주도록 합니다.&lt;br /&gt;다시 복귀 키를 눌러서 스케치 모드를 종료합니다.&lt;br /&gt;그 다음 다시 돌출(구멍 기능을 사용할 수도 있지만 그냥 돌출 기능을 사용하도록 합시다) 메뉴를 불러 옵시다.&lt;br /&gt;&lt;br /&gt;[##_1L|1121869612.jpg|width=&quot;600&quot; height=&quot;383&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;처음 돌출 기능을 사용할 때는 결합 기능을 사용했지만, 이번에는 절단 기능을 사용하도록 합시다. 절단 버튼을 누르고 절단면의 깊이 6mm를 입력한 후, 원하는 위치(이 경우 원 2개)를 선택하면 가상으로 구멍이 뚫립니다. 확인을 눌러서 구멍을 뚫어 봅시다.&lt;br /&gt;&lt;br /&gt;Inventor를 사용해서 간단한 부품을 만들어 보았습니다. &lt;br /&gt;&lt;br /&gt;[##_1C|1052035304.jpg|width=&quot;366&quot; height=&quot;301&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;물론 이렇게 설계한 부품은 다시 도면으로 옮겨야 하지만 캐드와는 달리 도면 제작도 쉽게 할 수 있도록 프로그램에서 지원하기 때문에 D키와 마우스 버튼, 그리고 그 외 간단한 기능만으로 설계 도면을 제작할 수 있습니다. &lt;br /&gt;&lt;br /&gt;이제 각각 만든 부품을 이용해서 조립을 해 보도록 하겠습니다. 조립을 해야할 부품의 수가 많기 때문에 드릴 축과 드릴 척 연결하는 것만 보도록 합시다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;새 파일을 눌러서 Standard.iam 항목을 선택합니다.&lt;br /&gt;그 다음 구성요소 선택을 누르고 드릴척과 드릴축을 설계한 파일을 불러옵니다.&lt;br /&gt;[##_1L|1265295075.jpg|width=&quot;548&quot; height=&quot;259&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;[##_1L|1300689539.jpg|width=&quot;544&quot; height=&quot;366&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;이제 결합을 해 보도록 하겠습니다. 구속 조건 배치 버튼이나 C키를 눌러서 메뉴를 불러옵니다. 그 다음 메뉴에서 삽입을 선택한 다음 첫번째 피처로 드릴 척의 구멍을 선택해 봅시다(화살표 방향이 구멍의 밖으로 나오게 합니다). 그 다음 드릴 축의 연결부를 선택해 봅시다(역시 화살표 방향이 연결부 밖으로 나와야 합니다)&lt;br /&gt;위 처럼 명령을 수행하면 드릴 축이 드릴척에 연결이 됩니다. 이제 간격띄우기에서 적당히 값을 입력해서 두 부품의 간격을 조정하면 부품의 조립이 완성됩니다.&lt;br /&gt;&lt;br /&gt;[##_1C|1281981107.jpg|width=&quot;479&quot; height=&quot;397&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;참 쉽죠? 전 이렇게 쉬운 인벤터를 믿지 못해서 한달을 autocad로 설계를 했습니다. 물론 눈물을 흩뿌리며 후회했지요.&lt;br /&gt;이제 모든 부품을 하나씩 불러와 모두 조립해 봅시다.&lt;br /&gt;모두 조립하면 아래와 같은 3D CNC가 완성됩니다. (물론 도면은 부품별로 따로 만들어 줘야 합니다)&lt;br /&gt;&lt;br /&gt;[##_1C|1354782537.jpg|width=&quot;511&quot; height=&quot;441&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;하드웨어 기구부 제작은 소프트웨어와는 달리 개발을 위해 들어가는 투자비가 많이 들어갑니다. 정밀 가공은 견적비가 비싸게 나오기 때문에 함부로 테스트도 하지 못하죠. 따라서 Inventor와 같은 3D cad프로그램으로 설계를 하고 시뮬레이션을 마치면 개발하는데 드는 비용을 줄일 수 있습니다.(물론 그냥 견적비로도 저희 팀은 굶주리고 있습니다 ㅠㅠ)&lt;br /&gt;&lt;br /&gt;이상으로 Inventor를 사용한 3D CNC 제작 과정을 간단하게 설명해 봤습니다.&lt;br /&gt;&lt;/BLOCKQUOTE&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Marker Recognition Algorithm </title>
            <link>http://www.swssm.org/index.php?idx=276</link>
            <description>&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;&lt;SPAN style=&quot;FONT-FAMILY: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;안녕하십니까. A Fairy using Augmented Reality 18기 김혜진입니다.^^&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;연이은 세 번째 글에서는 ARToolKit에서 행해지는 마커인식에 대해 소개해보려고 합니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--StartFragment--&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;그렇다면, 본론으로 들어가서 실제로 마커를 인식하는 일련의 과정을 소개해드리도록 하겠습니다. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;br /&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;[##_1C|1177045557.jpg|width=&quot;600&quot; height=&quot;425&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;원 이미지를 이진화(Binarization) 및 라벨링(Labeling)을 통해 기본 이미지만을 인식하도록 합니다. 그래서 얻어진 이미지로부터 검정색 사각형을 찾아 좌표를 얻고 이것이 우리가 찾는 마커인지를 확인하기 위한 절차를 밟게 됩니다. 이렇게 마커를 인식하는 과정이 끝납니다. 오늘은 여기까지만 설명하도록 하겠습니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;?xml:namespace prefix = v ns = &quot;urn:schemas-microsoft-com:vml&quot; /&gt;&lt;v:shapetype id=_x0000_t75 coordsize=&quot;21600,21600&quot; o:spt=&quot;75&quot; o:preferrelative=&quot;t&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;&lt;o:lock v:ext=&quot;edit&quot; aspectratio=&quot;t&quot;&gt;[##_1C|1400189737.jpg|width=&quot;587&quot; height=&quot;461&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;v:shapetype id=_x0000_t75 coordsize=&quot;21600,21600&quot; o:spt=&quot;75&quot; o:preferrelative=&quot;t&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;&lt;o:lock v:ext=&quot;edit&quot; aspectratio=&quot;t&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;순서는 이렇습니다. 이진화를 통한 라벨링, 그리고 외곽선 추출 및 라인, 모서리 추출, 마커라고 생각되는 사각형 안의 패턴 일반화 및 템플릿 매칭을 통한 마커찾기.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold; mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;1) Binarization &amp;amp; Labeling&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;기본적으로 마커는 &lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;Labeling&lt;/SPAN&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt; 처리되어 파일로 존재하고 있습니다. 또한, 영상으로부터 받은 이미지도 라벨링 처리하여서 비교하게 됩니다.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;라벨링(Labeling)은 연결된 영역이거나 또는 같은 색상 범위를 갖는 영역들을 하나의 물체로 간주하는 과정입니다. 여기서는 검정색과 흰색의 단색 코드를 인식하려고 코딩한것이기 때문에 이진화(Binarization) 작업을 한뒤 라벨링을 하였지만 물체인식을 위해서라면 색상 범위를 주어 라벨링해야 합니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;기본 수식의 개념은 이러합니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;① 방문한 점인가, 방문하지 않은 점이면 큐에 넣습니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;② 이 점을 중심으로 8개 점 중에 방문하지 않은 점을 큐에 넣습니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;③ 큐에 들어있는 데이터를 빼내면서 방문했는지 여부를 표시하고 다시 주변 8개 점을 조사합니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;④ 큐에 자료가 없을 때까지 이 과정들이 반복됩니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;v:shapetype id=_x0000_t75 coordsize=&quot;21600,21600&quot; o:spt=&quot;75&quot; o:preferrelative=&quot;t&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;&lt;o:lock v:ext=&quot;edit&quot; aspectratio=&quot;t&quot;&gt;[##_1C|1272316429.jpg|width=&quot;600&quot; height=&quot;395&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;v:shapetype id=_x0000_t75 coordsize=&quot;21600,21600&quot; o:spt=&quot;75&quot; o:preferrelative=&quot;t&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;&lt;o:lock v:ext=&quot;edit&quot; aspectratio=&quot;t&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/P&gt;&lt;br /&gt; &lt;P class=바탕글&gt;&lt;v:shapetype id=_x0000_t75 coordsize=&quot;21600,21600&quot; o:spt=&quot;75&quot; o:preferrelative=&quot;t&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok=&quot;f&quot; gradientshapeok=&quot;t&quot; o:connecttype=&quot;rect&quot;&gt;&lt;/v:path&gt;&lt;o:lock v:ext=&quot;edit&quot; aspectratio=&quot;t&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=_x81129656 style=&quot;MARGIN-TOP: 8.46pt; MARGIN-LEFT: 328.6pt; WIDTH: 96.6pt; POSITION: absolute; HEIGHT: 108.6pt; v-text-anchor: top; mso-position-vertical-relative: line; mso-position-vertical: absolute; mso-position-horizontal-relative: text; mso-position-horizontal: absolute&quot; type=&quot;#_x0000_t75&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;v:imagedata o:title=&quot;EMB00000ddc3694&quot; src=&quot;file:///C:\DOCUME~1\HAPPY\LOCALS~1\Temp\Hnc\BinData\EMB00000ddc3694.bmp&quot;&gt;&lt;/v:imagedata&gt;&lt;?xml:namespace prefix = w ns = &quot;urn:schemas-microsoft-com:office:word&quot; /&gt;&lt;w:wrap type=&quot;square&quot;&gt;&lt;/w:wrap&gt;&lt;/FONT&gt;&lt;/v:shape&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold; mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;2) Contour Tracing&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;윤곽(Contour) 정보를 얻기위해서 Edge Tracing 또는 Boundary Flowing 이라고도 하는 알고리즘을 수행합니다. 라벨링된 물체에 해당하는 번호별로 edge를 찾는 방법이다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;먼저 레이블링된 어떤 픽셀 p(x,y) 를 만나면 그와 동일한 라벨링 번호를 갖는 픽셀을 찾아서 따라갑니다. 이때 찾는 방향은 진행 방향의 왼쪽으로 90도 꺽인 방향에서부터 45도 씩 5방향으로만 탐색하면 됩니다. 방향이 상당히 중요한데 시계방향(CW)이냐 반시계방향(CCW)이냐에 따라 달라집니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;[##_1C|1028216440.jpg|width=&quot;201&quot; height=&quot;225&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;다음의 방법은 CW 방향으로 Contour 정보를 얻어옵니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;① 순차 탐색을 하면서 레이블링된 어떤 물체를 x 를 만나면, 큐에 넣는다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;② 5방향 탐색을 하며 같은 레이블 번호의 픽셀을 만나면 큐에 넣는다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;③ 이 과정을 반복하며 시작점을 만나면 완전한 물체로 인식하고 만나지 못하면 제거한다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;v:shapetype id=_x0000_t75 coordsize=&quot;21600,21600&quot; o:spt=&quot;75&quot; o:preferrelative=&quot;t&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;&lt;o:lock v:ext=&quot;edit&quot; aspectratio=&quot;t&quot;&gt;&lt;br /&gt;[##_1C|1263930389.jpg|width=&quot;574&quot; height=&quot;448&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/P&gt; &lt;br /&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-WEIGHT: bold; mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;3) Template Matching&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;템플릿 매칭이란 구성요소의 표준 패턴을 정합하는 방법을 말합니다. 영상 가운데서 내가 원하는 타겟을 미리 설정해두고 여러 가지가 뒤섞여있는 영상 내에서 그것을 정확히 검출해낼 수가 있기 때문에 탬플릿 매칭 기법은 얼굴의 눈, 코, 입 인식이나 다소 복잡한 패턴에 많이 쓰이고 있습니다. 이를 통해 크기, 방향, 위치에 구애받지않고 원하는 마커영상을 뽑아낼 수 있습니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;br /&gt;&lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Introduction &amp; Setting of AR </title>
            <link>http://www.swssm.org/index.php?idx=271</link>
            <description>&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;안녕하십니까. A Fairy using Augmented Reality 18기 김혜진입니다.^^&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;오늘은 마커와 ARToolKit에 대해서 소개해보려고 합니다. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;증강현실을 구현하기 위해서는 실제 생활 즉, 카메라가 받은 영상의 어느 곳에 물체가 증강시킬 것인지를 정해야합니다. 대개 두 가지로 분류하는데 Marker Recognition방식과 Markerless Recognition 방식으로 나눕니다. 마커리스 인식방법을 쓰려면 카메라로 받아온 영상으로부터 특정점을 추출해야하기 때문에 영상처리를 위한 많은 시간과 노력이 필요하게 됩니다. 또한, 추출율을 높이기 위해서 많은 연구가 행해져야 합니다. 현재 이를 위한 연구가 우리나라에서도 매우 활발하게 이루어지고 있습니다. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;그리고 마커인식방법은 마커라고 불리는 현실 세계와 가상 세계를 연결시켜주는 포인터 역할의 태그 인터페이스를 컴퓨터가 인식하여 그 위치에 객체를 증강시키는 방법을 말합니다. 이 방법은 인식률이 높고 사용이 간편하기 때문에 증강현실 구현 시 많이 사용되는 방법이기도 합니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;마커 혹은 2D 바코드라고 불리는 이 것은 컴퓨터가 인식하기 쉽게 하기 위해 2D 평면의 검정색과 흰색으로 이루어진 이미지를 사용합니다. 여담으로 현재 ISO 국제 표준화된 2D 바코드로는 QR-code, Data Matrix, Maxi code, PDF-417 이 있습니다. QR-code는 일본 Denso사에서 개발하여 빠른 속도와 큰 용량을 자랑하는데 소형화가 가능하고 어디에든 인쇄하여 사용하기가 쉽기 때문에 인텔(Intel)과 AMD CPU 알루미늄 판 위나 PCB 기판 위에 인쇄되어 공장 자동화 등의 분야에 사용되고 있습니다. 그 밖에 Maxi code는 택배물류추적, PDF-417은 미국 주민등록증이나 국방에서 사용되고 있습니다. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;mso-fareast-font-family: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;국내 2D 바코드로는 ColorCode, Icon Lab Code 등이 있는데 모바일 환경에서 동작하도록 알고리즘이 설계되어 휴대폰에서 동작 가능합니다. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN style=&quot;FONT-FAMILY: 바탕&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;이미지 코드(Image Code or Image Based Code)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;o:p&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;[##_1C|1363563831.jpg|width=&quot;600&quot; height=&quot;425&quot; alt=&quot;사용자 삽입 이미지&quot;|_##][##_1C|1293575842.jpg|width=&quot;600&quot; height=&quot;542&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;그럼 이제 ARToolKit에 대해서 소개해 보도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 12pt&quot;&gt;ARToolKit &lt;/SPAN&gt;&lt;/B&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;홈페이지&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot; size=2&gt;http://www.hitl.washington.edu/artoolkit/&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN lang=EN-US style=&quot;FONT-SIZE: 12pt&quot;&gt;ARToolKit download&lt;/SPAN&gt;&lt;/B&gt;&lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;및 설치&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot; size=2&gt;Download web page - http://www.hitl.washington.edu/artoolkit/download/&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;ARToolkit latest version &lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;링크를 클릭&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;클릭하면&lt;SPAN lang=EN-US&gt; sourceforge&lt;/SPAN&gt;로 이동&lt;SPAN lang=EN-US&gt; (http://sourceforge.net/project/showfiles.php?group_id=116280)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal style=&quot;MARGIN: 0cm 0cm 0pt&quot;&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot; size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;br /&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;ARToolKit은 증강현실(&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;AR, Augmented Reality)을 좀 더 쉽게 구현하기 위해 사용자에게 제공되는 라이브러리입니&lt;/FONT&gt;&lt;FONT style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 돋움&quot;&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;다. &amp;nbsp;ARToolKit은 마커를 하나 쫓는 것에 적합하도록 만들어졌으므로 영상에서 마커 하나만 찾는 것이 아니라면 새롭게 영상처리를 하는 것이 좋습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[##_1C|1231219869.jpg|width=&quot;586&quot; height=&quot;83&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;다음은 ARToolKit 설치방법입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. ARToolKit 설치하기&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;ARToolKit 사이트에 가셔서 상단 메뉴중 Download로 이동합니다. &lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;그러면 ARToolKit Latest Version이라고 쓰여진 파란글씨가 보일 것입니다.&lt;br /&gt;&lt;br /&gt;클릭하면, 아래 화면이 나옵니다. &lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;IMG id=userImg3150046 style=&quot;WIDTH: 740px; HEIGHT: 179px&quot; onclick=popview(this) src=&quot;http://cafefiles.naver.net/data34/2008/7/10/132/download_2_tiberian77.jpg&quot; onload='setTimeout(&quot;resizeImage(3150046)&quot;,200)' name=cafeuserimg&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;ARToolKit-2.72.1-bin-win32.zip를 다운 받습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;2. GLUT DLL 다운받기&lt;br /&gt;&amp;nbsp;ARToolKit은 OpenGL 기반으로 만들어졌기 때문에 OpenGL 라이브러리가 필요합니다.&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&amp;nbsp;아래 사이트로 가서 glut-3.7.6-bin.zip를 다운 받습니다.&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;A href=&quot;http://www.xmission.com/~nate/glut.html&quot; target=_blank&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;http://www.xmission.com/~nate/glut.html&lt;/FONT&gt;&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;압축을 풀고 각각의 파일을 해당 폴더에 복사해 주어야 합니다.&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;glut32.dll -&amp;gt; c:\windows\system32&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;다음의 파일은&amp;nbsp; 비쥬얼 스튜디오가 설치된 폴더에 복사해야 합니다.&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;glut.h -&amp;gt; c:\Program Files\Microsoft Visual Studio\VC98\Include\GL&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;glut32.lib -&amp;gt; c:\Program Files\Microsoft Visual Studio\VC98\Lib&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;DIV class=autosourcing-stub&gt; &lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; MARGIN: 20px 0px 30px; PADDING-TOP: 0px; FONT-FAMILY: dotum&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. ARToolKit 적재적소에 배치하기&lt;br /&gt;&lt;br /&gt;&amp;nbsp;ARToolkit을 압춘 해제한 폴더에 가면 Configure.win32.bat 이라는 파일이 있습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이것을 실행하면 도스화면 창이 뜨는데 어떤 파일이 복사되고 있는지가 나오는 것입니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;확인 후 닫아줍니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. Sample Source 실행하기&lt;br /&gt;&lt;br /&gt;&amp;nbsp;샘플을 돌리기 전에 ARToolKit 라이브러리를 컴파일하여 필요한 조정을 해줍니다.&lt;br /&gt;&lt;/FONT&gt;&lt;FONT face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;br /&gt;&amp;nbsp;ARToolKit 폴더의&amp;nbsp; ARToolKit.sln 을 열면 라이브러리가 모여있는 솔루션이 실행됩니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이를 Batch Build 해줍니다. (제목표시줄Build &amp;gt; Batch Build )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;에러가 나온다면 에러를 고쳐주시면 되고 에러가 나오지 않는다면 다음으로 넘어갑니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;ARToolKit 폴더의 examples 폴더에 존재하는 샘플테스트를 실행해보면 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;영상이 뜨는데 해당 마커를 영상에 띄우면 객체가 증강되는 것을 볼 수 있습니다.&lt;br /&gt;&lt;br /&gt;아래는 다랭이...ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[##_1C|1252074487.jpg|width=&quot;600&quot; height=&quot;475&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&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;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/DIV&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Augmented Reality </title>
            <link>http://www.swssm.org/index.php?idx=272</link>
            <description>&lt;!--StartFragment--&gt; &lt;P class=바탕글&gt;&lt;SPAN style=&quot;FONT-FAMILY: 돋움; mso-ascii-font-family: 돋움; mso-hansi-font-family: 돋움&quot;&gt;안녕하세요. ‘ A Fairyland using Augmented Reality ’ 팀의 유광현입니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN style=&quot;FONT-FAMILY: 돋움; mso-ascii-font-family: 돋움; mso-hansi-font-family: 돋움&quot;&gt;저희 팀은 이번에 증강현실(Augmented Reality)을 이용한 프로젝트를 진행하는데요. &lt;STRONG&gt;증강현실&lt;/STRONG&gt;에 대해 생소하게 느끼는 분들을 위해 증강현실에 대한 소개와 발전 가능성에 대해 소개하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 돋움; mso-fareast-font-family: 돋움; mso-hansi-font-family: 돋움&quot;&gt;증강현실을 모르는 많은 사람들이 가상현실과 혼동하고는 합니다. 하지만 이 둘은 명백히 다르다고 말할 수 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 돋움; mso-fareast-font-family: 돋움; mso-hansi-font-family: 돋움&quot;&gt;증강현실은 말하자면 ‘가상세계 + 실제세계’ 라고 할 수 있습니다. 가상현실의 경우 일반적으로 게임 등에서 보던 현실과 유사하게 만들어진 환경을 말하는데, 증강현실의 경우는 이와 달리 가상현실에서 만들어진 것을 실제세계의 물리적 대상에 맵핑 시키는 것입니다. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 돋움; mso-fareast-font-family: 돋움; mso-hansi-font-family: 돋움&quot;&gt;다시 말하면 가상현실은 실제세계와 무관하게 움직일 뿐이지만, 증강현실은 실제세계의 변화에 따라 가상세계의 내용을 변화시켜서 실세계에 맵핑 할 수 있다는 것 즉, 실세계의 변화로 가상세계의 객체를 변화 시킬 수 있다는 것입니다.&lt;/SPAN&gt;&amp;nbsp; &lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 돋움; mso-fareast-font-family: 돋움; mso-hansi-font-family: 돋움&quot;&gt;이 두 세계는 목적에서도 차이점을 보이는데, 가상현실은 콘텐츠를 현실과 유사하게 만들어 가고자 하는데서 시작되었고, 증강현실의 경우는 현실에 가상의 정보를 추가하여 생활의 편의를 도모하는 것을 목표로 하고 있습니다.&lt;br /&gt;&lt;br /&gt;아래의 그림은 증강현실의 예를 보여주고 있습니다. 첫번재 그림은 사람의 얼굴에 동물 모양의 탈을 씌운 것이고, 두번째 그림은 증강현실을 이용하여 분양될 아파트에 대해 설명하고 있는 모습입니다.&lt;br /&gt;&lt;br /&gt;[##_1C|1325462540.jpg|width=&quot;446&quot; height=&quot;153&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;&lt;!--StartFragment--&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN style=&quot;FONT-FAMILY: 돋움; mso-ascii-font-family: 돋움; mso-hansi-font-family: 돋움&quot;&gt;아직까지 증강현실은 마커를 이용해 가상의 객체를 맵핑시키는게 일반적입니다. 증강현실에서 마커의 역할은 가상의 객체를 실 세계에 증강시키기 위해 좌표를 잡아주고, 기울기 및 회전 등의 여러 변화에 효율적으로 대처 하기 위한 수단입니다. 마커는 바코드도 될 수 있고, 특정 문양이 될 수도 있습니다. 아래의 사진은 독일의 자동차 관련 잡지에 게재된 증강현실을 이용한 3D 광고로서, 2차원 이미지를 마커로 이용하여 생생한 입체 이미지로 보여주고 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;br /&gt;[##_1C|1072459389.jpg|width=&quot;384&quot; height=&quot;647&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;!--StartFragment--&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 돋움; mso-fareast-font-family: 돋움; mso-hansi-font-family: 돋움&quot;&gt;이처럼 증강현실에 대한 관심도가 높아지고, 여러 아이디어들이 나오고는 있지만 아직 마커라는 매개체를 사용하고 있고, HMD와 같은 특수한 장비를 통해서만 볼 수 있습니다. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 돋움; mso-fareast-font-family: 돋움; mso-hansi-font-family: 돋움&quot;&gt;이러한 점들을 보안해서 점차 마커 없이 특징점들을 추출해 위치를 파악하고 있는 마커리스 트레킹(Markerless Tracking Technology) 기술에 대한 연구가 활발히 진행되고 있습니다. 또한 증강현실의 기기는 망막위에 덧씌워지는 콘텍트렌즈 또는 안경의 형태로 발전 할 것이라는 전망도 나오고 있습니다. 또 더 나아가서는 시신경 안쪽으로 또는 시신경을 제어하는 뇌의 한 지점에 설치할 것이라는 극단적인 추측도 나오고 있습니다.&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&lt;SPAN lang=EN-US style=&quot;FONT-FAMILY: 돋움; mso-fareast-font-family: 돋움; mso-hansi-font-family: 돋움&quot;&gt;현재 증강현실은 게임, 교육 분야에서 실질적으로 적용되고 있습니다. 하지만 증강현실이 가진 특성상 적용 될 수 있는 분야는 무궁무진합니다. 실제로 지금 많은 아이디어와 시도들이 이루어 지고 있습니다. 충분한 연구와 투자가 이루어진다면 가까운 미래에는 우리 사회에 없어서는 안 될 필수적인 기술로 자리잡을 것입니다. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=바탕글&gt;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/SPAN&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Gesture Recognition Using WPF </title>
            <link>http://www.swssm.org/index.php?idx=273</link>
            <description>이번시간에는 VirtualSurface System에 적용될 제스쳐 인식 기능을 구현하기 위해서 WPF에서 제공하는 기본적인 제스처 인식 기능을 활용하는 방법과 이를 활용한 방법에 대해서 소개하려고합니다. 아래는 구현 결과 동영상입니다. 마우스로 빠르게 움직였더니 끊김이 느껴지네요 ㅜ_ㅜ ㅋ&lt;br /&gt;&lt;br /&gt;&lt;object type='application/x-shockwave-flash' width=&quot;502&quot; height=&quot;399&quot; align='middle' classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0'&gt;&lt;param name='movie' value='http://flvs.daum.net/flvPlayer.swf?vid=ad1nNdcu9yY$' /&gt;&lt;param name='allowScriptAccess' value='always' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='bgcolor' value='#000000' /&gt;&lt;embed src='http://flvs.daum.net/flvPlayer.swf?vid=ad1nNdcu9yY$' width=&quot;502&quot; height=&quot;399&quot; allowScriptAccess='always' type='application/x-shockwave-flash' allowFullScreen='true' bgcolor='#000000' &gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;P style=&quot;TEXT-ALIGN: left&quot;&gt;제스쳐 인식이라고 하면 대부분 먼저 떠오르는게 유전자 알고리즘이다 뭐다 해서 상당히 귀찮은 내용의 작업이 많이 필요했었는데 WPF의 Ink Canvas를 사용하면 아주 간단하게 구현할 수있습니다. (간단하게 구현 한다기 보다는 이미 구현된것을 활용한다는 표현이 더 맞겟네요ㅎ)&lt;br /&gt;&lt;br /&gt;아래는 코드입니다. InkCanvas를 상속받아 GestureInkCanvas를 만들어 보았습니다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt; &lt;DIV&gt; &lt;DIV&gt;&lt;PRE class=C# name=&quot;code&quot; height=&quot;100&quot;&gt;public class GestureInkCanvas : InkCanvas { public ObservableCollection&lt;APPLICATIONGESTURE&gt; EnabledGestures { get; private set; } public RecognitionConfidence RecognitionConfidence { get; set; } public delegate void RecognitionGestureHandler(ApplicationGesture Gesture); public event RecognitionGestureHandler RecognitionGesture; public ApplicationGesture LastGesture { get { return (ApplicationGesture)GetValue(LastGestureProperty); } set { SetValue(LastGestureProperty, value); } } public static readonly DependencyProperty LastGestureProperty = DependencyProperty.Register(&quot;LastGesture&quot;, typeof(ApplicationGesture), typeof(GestureInkCanvas), new UIPropertyMetadata(ApplicationGesture.NoGesture)); public GestureInkCanvas() { EditingMode = InkCanvasEditingMode.GestureOnly; Gesture += new InkCanvasGestureEventHandler(GestureInkCanvas_Gesture); EnabledGestures = new ObservableCollection&lt;APPLICATIONGESTURE&gt;(); EnabledGestures.CollectionChanged += delegate(object sender, NotifyCollectionChangedEventArgs e) {SetEnabledGestures(EnabledGestures);}; EnabledGestures.Add(ApplicationGesture.AllGestures); } void GestureInkCanvas_Gesture(object sender, InkCanvasGestureEventArgs e) { GestureRecognitionResult Result = e.GetGestureRecognitionResults()[0]; if(Result.RecognitionConfidence &amp;gt; RecognitionConfidence) return; if (Result.ApplicationGesture != ApplicationGesture.NoGesture &amp;amp;&amp;amp; RecognitionGesture != null) RecognitionGesture(Result.ApplicationGesture); LastGesture = Result.ApplicationGesture; } }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt; &lt;P style=&quot;TEXT-ALIGN: left&quot;&gt;&lt;br /&gt;&lt;br /&gt;Gesutre를 사용하기 위해서 InkCanvas의 EditingMode Property를 GestureOnly로 설정합니다. (Ink와 Gesture를 동시에 사용하고자 한다면 InkAndGesture로 설정하시면 됩니다.) 그리고 SetEnabledGestures를 통해서 사용하고자 하는 ApplicationGesture를 등록합니다. &lt;br /&gt;&lt;br /&gt;마지막으로 RecognitionConfidence를 통해서 제스쳐를 인식 결과에 대한 신뢰 수준을 정할 수 있습니다. Strong, Intermediate, Poor을 중 하나를 선택할 수 있습니다. Strong이 가장 신뢰할 수 있으며 Poor이 가장 신뢰할 수 없는 결과를 제공합니다. (개인적으로 Strong은 너무 빡빡하게 걸러내서... -_- Intermediate를 주로 사용합니다..)&lt;br /&gt;&lt;br /&gt;위에서 언급한 내용은 모두 WPF Ink Canvas Control에서 제공해주는 기능으로 간단하게 Mouse나 Stylus Pen을 이용한 Gesture Recognition에는 무리 없이 사용가능한 방법이지만, Mouse나 Stylus를 사용하지 않고는 제스쳐를 처리 할 수 있는 기능은 제공해주지 않기 때문에 이를 그대로 사용한다고 하면 MultiTouch 기반의 System에서는 적용을 할 수는 없습니다.&lt;br /&gt;&lt;br /&gt;OneTouch였다면 눌렀을때 MouseEvent를 발생시켜서 구현은 가능하겠지만.. 다중사용자를 고려해야하다보니 어쩔 수 없이 다른 방법을 사용했습니다. WPF 에서는 GestureRecognizer를 통해서 Application Gesture의 전체 또는 &lt;U&gt;하위 집합&lt;/U&gt;을 인식하도록 하기 위해 구현된 Class를 제공합니다. &lt;br /&gt;&lt;br /&gt;파라미터로 StrokeCollection를 입력하면 해당 하는 제스쳐의 결과를 반환 해주는 역할을 합니다. 마우스가 다녀간 포인트 좌표만 가지고도 사용자가 취한 Gesture가 무엇인지 알아 낼수 있다는 말이죠, &lt;br /&gt;&lt;br /&gt;나머지는 코드를 보고 설명하도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;TEXTAREA class=C# name=code Height=&quot;300&quot; Width=&quot;100%&quot;&gt;public class GestureHandler { // Gesture를 인식하기 위해 필요한 Point Description과 Info private StylusPointDescription StylusPointDescription = null; private List&amp;lt;StylusPointPropertyInfo&amp;gt; StylusPointPropertyInfos = null; // Gesture 인식에 사용되는 StylusPointCollection과 Recognizer private StylusPointCollection StylusPointCollection = null; private GestureRecognizer GestureRecognizer = null; // Gesture인식에 사용할 ApplicationGesture를 관리하는 Collection public ObservableCollection&amp;lt;ApplicationGesture&amp;gt; EnabledGestures { get; private set; } // Gesture 발생시 발생하는 EventHandler와 Evenet public delegate void RecognitionGestureHandler(ApplicationGesture Gesture); public event RecognitionGestureHandler RecognitionGesture; public GestureHandler() { // 기본적인 초기화작업을 시작한다. 객체생성 및 할당. StylusPointPropertyInfos = new List&amp;lt;StylusPointPropertyInfo&amp;gt;(); StylusPointPropertyInfos.Add(new StylusPointPropertyInfo(StylusPointProperties.X)); StylusPointPropertyInfos.Add(new StylusPointPropertyInfo(StylusPointProperties.Y)); StylusPointPropertyInfos.Add(new StylusPointPropertyInfo(StylusPointProperties.NormalPressure)); StylusPointDescription = new StylusPointDescription(StylusPointPropertyInfos); StylusPointCollection = new StylusPointCollection(StylusPointDescription); GestureRecognizer = new GestureRecognizer(); // ApplicationGesture가 등록되면 GestureRecognizer에게도 적용되도록 설정 EnabledGestures = new ObservableCollection&amp;lt;ApplicationGesture&amp;gt;(); EnabledGestures.CollectionChanged += delegate(object sender, NotifyCollectionChangedEventArgs e) { GestureRecognizer.SetEnabledGestures(EnabledGestures); }; // 기본 ApplicationGesture는 모든 Gesture를 허용한다. EnabledGestures.Add(ApplicationGesture.AllGestures); } public ApplicationGesture Recognize(StrokeCollection Strokes) { // Stroke Collection을 사용하여 Gesture인식을 수행한다. ReadOnlyCollection&amp;lt;GestureRecognitionResult&amp;gt; Results = GestureRecognizer.Recognize(Strokes); // 인식된 Gesture가 하나도 없으면 NoGesture를 리턴하고, if (Results.Count == 0) return ApplicationGesture.NoGesture; // 인식된 제스쳐가가 있으면 이벤트를 발생시켜주고 해당 Gesture를 리턴한다. if(RecognitionGesture != null) RecognitionGesture(Results[0].ApplicationGesture); return Results[0].ApplicationGesture; } public ApplicationGesture Recognize(StylusPointCollection StylusPointCollection) { // StylusPointCollection 를 사용하여 Gesture인식을 수행하고자 할 경우 // 이곳에서 직접 StrokeCollection을 직접생성하여 인식기에 전달시켜준다. Stroke Stroke = new Stroke(StylusPointCollection); StrokeCollection Strokes = new StrokeCollection(); Strokes.Add(Stroke); return Recognize(Strokes); } public ApplicationGesture Recognize(IEnumerable&amp;lt;Point&amp;gt; PointList) { // IEnumerable&amp;lt;Point&amp;gt;만 가지고 Gesture 인식을 수행하고자 할경우 // 이곳에서 직접 StylusPointCollection를 생성한뒤 인식기에 전달해준다. StylusPointCollection StylusPointCollection = new StylusPointCollection(StylusPointDescription); foreach (Point Point in PointList) StylusPointCollection.Add(new StylusPoint(Point.X, Point.Y, .5f)); return Recognize(StylusPointCollection); } } &lt;/TEXTAREA&gt;&lt;br /&gt;&lt;br /&gt;일단 GestureRecognizer를 사용하기 위해서는 StrokeCollection이 필요합니다. StrokeCollection을 만들기 위해서는 Stroke가 필요하고.. Stroke를 만들기 위해서는 StylusPointCollection이 필요하고..StylusPointCollection을 만들기 위해서는 StylusPointDescription가 필요하죠, 마지막으로 StylusPointDescription를 만들기 위해서는 StylusPointPropertyInfos가 필요한데... (엄청나게 복잡해보입니다만 거꾸러 타고 올라가다보면 결국에 중요한건 몇개 안되네요..) 어쨋든 이부분이 맨 윗줄 멤버변수를 선언한 부분과 생성자 부분이 이에 해당합니다.&lt;br /&gt;&lt;br /&gt;그리고 &lt;STRONG&gt;public ApplicationGesture Recognize(StrokeCollection Strokes) &lt;/STRONG&gt;를 보시면 전시간에 소개해 드렸었던 방식과 매우 비슷하게 동작하는것을 확인 하실 수 있습니다.&amp;nbsp; 이를 활용해서 아래쪽에 StylusPointCollection를 사용하는 Recognize함수와 처음 목표로 했었던 IEnumerable&amp;lt;Point&amp;gt;를 사용하는 Recognizer함수를 구현 했습니다. (짝짝짝)&lt;br /&gt;&lt;br /&gt;그리고 사용하실때는 아래와 같이 사용하실 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;TEXTAREA class=C# name=code Height=&quot;300&quot; Width=&quot;100%&quot;&gt;public partial class Window1 : Window { List&amp;lt;Point&amp;gt; MousePoint = new List&amp;lt;Point&amp;gt;(); GestureHandler GestureHandler = new GestureHandler(); public Window1() { InitializeComponent(); this.MouseMove += new MouseEventHandler(Window1_MouseMove); this.MouseLeftButtonUp += new MouseButtonEventHandler(Window1_MouseLeftButtonUp); this.MouseLeftButtonDown += new MouseButtonEventHandler(Window1_MouseLeftButtonDown); } void Window1_MouseMove(object sender, MouseEventArgs e) { if (e.LeftButton != MouseButtonState.Pressed) return; MousePoint.Add(e.GetPosition(this)); } void Window1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { MessageBox.Show(GestureHandler.Recognize(MousePoint).ToString()); } void Window1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { MousePoint.Clear(); } }&lt;/TEXTAREA&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;이제 MultiTouch에 적용하기 위해서 각 Point만다 Handler를 생성해주고 Point가 사라짐과 동시에 인식하도록 구현하면 MultiTouch에 적용할 수 있는 Gesture 인식기를 완성할 수 있습니다.&lt;br /&gt;참고 : MSDN에 각 ApplicationGesutre에 해당하는 동작을 적용 사례와 함께 그림으로 잘 풀어서 설명해놓았네요. 아래 URL을 참고 해주세요^^ &lt;br /&gt;MSDN : &lt;A href=&quot;http://msdn.microsoft.com/ko-kr/library/ms697513(en-us).aspx&quot;&gt;http://msdn.microsoft.com/ko-kr/library/ms697513(en-us).aspx&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;&lt;IMG class=txc-image-c height=455 src=&quot;http://www.whatisthat.co.kr/admin/entry/filePreview/4955672d8de30B1.jpg&quot; width=480 ld='1C|4955672d8de30B1.jpg|width=&quot;480&quot; height=&quot;455&quot; alt=&quot;&quot; filename=&quot;aa.jpg&quot; filemime=&quot;&quot;|'&gt;&lt;/P&gt; &lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;A title=&quot;[http://whatisthat.co.kr]로 이동합니다.&quot; href=&quot;http://whatisthat.co.kr/&quot; target=_blank&gt;&lt;IMG class=txc-image-c height=250 src=&quot;http://www.whatisthat.co.kr/admin/entry/filePreview/48fa34c41075dBP.jpg&quot; width=600 ld='1C|48fa34c41075dBP.jpg|width=&quot;600&quot; height=&quot;250&quot; alt=&quot;&quot; filename=&quot;PinkIDCard.jpg&quot; filemime=&quot;&quot;|'&gt;&lt;/A&gt;&lt;br /&gt;&lt;/DIV&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>Debian GNU/Linux Packaging </title>
            <link>http://www.swssm.org/index.php?idx=270</link>
            <description>&amp;nbsp;안녕하세요. UOD System Team의 18기 최영특 입니다.&lt;br /&gt;UDO System에서 제공하고자 하는 서비스 중의 하나가 Driver Manager Server 입니다. USB Device가 연결되었을 때 Vendor ID와 Product ID를 전달 받아서 Device Driver의 존재 여부를 확인하고 해당 Device Driver를 전송해주는 것이 Driver Manager Server의 역할 입니다. 이때 Device Driver의 배포 형식은 .rpm 또는 .deb 형태가 될 것이고, 저는 지금부터 배포용 프로그램과 소스코드를 데비안 패키지로 생성하는것에 대해 설명하고자 합니다.&lt;br /&gt;&lt;br /&gt;데비안의 패키징 시스템은 소프트웨어의 Install, Upgrade, Delete 를 위해 최대한의 편리함을 제공합니다. 특히, 이번 포스팅은 데비안 패키지의 생성에 주목하여 여러분이 데비안 포맷의 패키지를 배포할 수 있도록 하게 할것입니다. 그리고 패키지의 기본적인 컴포넌트에서 출발해 패키지 생성에 필요한것들과 마지막으로 이 모두를 어떻게 패키지에 집어 넣는지를 다룰것입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;H2&gt;&lt;FONT size=3&gt;데비안 패키지의 이해&lt;/FONT&gt;&lt;/H2&gt;&lt;br /&gt;&amp;nbsp;이 장에서는 간단히 데비안 패키지가 무엇인지 살펴볼 것이다. 데비안 패키지는 RPM(Redhat Package Manager)과 매우 비슷하다. 하지만, 이 둘은 자세히 보면 약간 차이가 있다. 만약, 당신이 RPM패키지를 만들어본 경험이 있다면, 곧 데비안 패키지를 추가하는 것도 전혀 어렵지 않음을 발견하게 될것이다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;패키지가 정확히 뭔가?&lt;/STRONG&gt;&lt;br /&gt;간단히 말해, 패키지란 어떤 일을 처리하기 위해 필요한 파일들의 집합이다. 패키지란 통상 프로그램을 가리키나, 간혹 문서만 있거나 윈도우 테마 또는 설치가능한 패키지의 형태로 쉽게 설치가능한 파일들의 묶음을 의미한다.&lt;br /&gt;&lt;br /&gt;패키지는 포함된 파일들이 파일시스템상의 설치될 위치정보를 가지고 있으며, 패키지내 프로그램들이 의존 하는 라이브러리나 프로그램에 대한 정보, 설치 명령과 기본적인 설정 스크립트까지 포함한다. 하지만, 많은 패키지들이 기본적으로 포함된 설정정보만으로 사용될 수 없거나 사용되어선 안된다. 대표적으로 Apache와 같은 패키지는 패키지 설치후에도 추가 설정작업이 반드시 필요하다.&lt;br /&gt;&lt;br /&gt;패키지는 일반적으로 미리 컴파일된 형태로 제공된다. 하지만, 당신은 패키지에 소스코드를 포함할 수도 있다. 어떤 관리자들은 소스코드로부터 설치하는것을 선호한다. 또한 어떤 어플리케이션은 컴파일시에 커스터마이징을 필요로 한다. 만약, 당신이 소프트웨어가 자유 또는 공개 소스 라이선스(free or open source license)하에 배포된다면 소스패키지도 만들어서 바이너리 패키지와 함께 배포해야 한다. &lt;br /&gt;&lt;br /&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;주의: 미리 컴파일된 소프트웨어 패키지를 (일부 오류가 있긴 하지만) 통상 바이너리라고 부른다. 실행가능한 파일은 이진(binary) 포맷이다. 하지만 JPEG, MP3와 같은 많은 다른 실행불가능한 파일들도 마챤가지이다. 그러므로, 이런 미리 컴파일된 소프트웨어는 &quot;실행가능한(executable)&quot; 패키지라 부르는것이 낫다.&lt;br /&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;br /&gt;모든 바이너리 데비안 패키지는 세가지 기본적인 것들로 이루어 진다: 데비안-바이너리라 부른는 텍스트 파일, control.tar.gz라는 압축파일(tarball). 그리고, data.tar.gz 라는 압축파일.&lt;br /&gt;&lt;br /&gt;데비안 바이너리 텍스트 파일은 바이러리 패키지를 위한 버젼을 포함하고 있다. control.tar.gz파일은 제어 파일들을 포함한다; postinst파일은 패키지를 설치한 다음 해야할 명령들을 포함한다; 그리고, prerm파일은 삭제뎡령을 포함한다. control.tar.gz 는 conffiles 라는 설정파일에 대한 정보를 파일과 md5sums라는 이름의 MD5 체크섬을 가지고 있다.&lt;br /&gt;&lt;br /&gt;data.tar.gz는 패키지의 실제 &quot;payload&quot;를 포함한다.이것은 당신의 프로그램에 직접적으로 관련된 파일시스템을 포함하며 시스템상에 적절한 지점에 설치된다.&lt;br /&gt;&lt;br /&gt;패키지가 어떻게 생겼는지 궁금하다면 몇개의 패키지를 데비안 사이트로부터 받은다음 ar -x packagename.deb 를 실행해 보아라. 데비안 패키지는 위에서 언급한 파일들의 묶음이다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;내가 데비안 개발자가 될 필요가 있는가?&lt;/STRONG&gt;&lt;br /&gt;당신이 데비안 호환 패키지를 만들고 배포한다고 해서 공식 데비안 개발자가 될 필요는 없다. 하지만, 실제로 패키지를 업로드하고 공식 데비안 릴리즈에 패키지를 등록하기 위해서는 데비안 개발자가 될 필요가 있다. 만약, 데비안 개발자가 되는것에 관심이 있다면 데비안 웹사이트의 &quot;How You Can Help?&quot;페이지를 읽는것 부터 시작해라.&lt;br /&gt;&lt;br /&gt;다수의 회사와 프로젝트가 그들 소프트웨어의 데비안 패키지를 만들고 배포하고 있다. 이것들은 &quot;공식적인&quot; 데비안 패키지가 아니다. 하지만, 그들은 dpkg나 APT(Advanced Packaging Tool)을 사용하는 데비안 사용자들에게 소프트웨어 설치를 위한 대단한 편의성을 제공하고 있다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;시작하기전에 필요한것들&lt;/STRONG&gt;&lt;br /&gt;일단, 데비안 패키지를 만들고 테스트 하려면 현재 데비안 시스템이 꼭 필요하다. 물론, 패키징 하려는 무엇인가도 필요하다. 우리는 이 두가지를 가지고 있다고 가정하고 시작할 것이다.&lt;br /&gt;&lt;br /&gt;데비안 시스템에서 패키지를 빌드하기 위해서는 몇개의 패키지가 설치되어 있어야 한다. 대부분 이 패키지들은 기본적으로 설치되어 있다. (dpkg, gcc, make 등) 그리고 build-essential 패키지와 dpkg-dev패키지도 필요하다. 이두가지는 기본적으로 설치되어 있지 않을 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;데비안 패키지 이름짓기 규칙(Naming Convention)&lt;/STRONG&gt;&lt;br /&gt;당신에 데비안을 어느정도 사용한 경험이 있다면 데비안 패키지 파일들이 모두 일정한 이름 규칙이 있음을 눈치챘을 것이다. 모든, 데비안 바이너리 패키지는 major, minor, 그리고 revision 번호와 &quot;arch&quot;라는 아키텍처를 명시한다.&lt;br /&gt;&lt;br /&gt;패키지명은(파일명이 아닌 패키지의 이름) 소문자와 순자, 대쉬(-), 더하기(+) 문자를 포함 할 수 있다. (다하기 문자 &quot;+&quot;를 포함할 수 있다는것에 의아해 할지도 모르겠지만 doc++ -- C/C++코드를 위한 문서 시스템 -- 과 같은 몇몇 패키지에 사용된다. 그러므로, &quot;mypackage-2++&quot; 은 올바른 패키지명이지만 &quot;MY_Package&quot; 또는 &quot;mypackage2.0&quot; 같은 이름은 사용할 수 없다.&lt;br /&gt;&lt;br /&gt;모든 패키지는 유일한 이름을 가져야 하며 데비안 아카이브에 이미 존재해서는 안된다. 비록, 당신이 기술적으로 이것이 당신에게 설치하길 원하는 패키지라 하더라도 공식 데비안 패키지와 충돌을 일으켜서는 안된다. 예를들어, Apache의 공식 데비안 버젼의 대안으로 배포본을 패치했다면 apache_X.X.X-i386.deb 를 사용해선 안된다. 대신 acme-apache_X.X.X-i386.deb 와 같이 하도록 해라.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;H2&gt;&lt;FONT size=3&gt;데비안 패키지 생성하기&lt;/FONT&gt;&lt;/H2&gt;&lt;br /&gt;이제 패키지를 빌드하기 위한 기초를 본격적으로 다루어 보겠다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;제어 파일들(Control files)&lt;/STRONG&gt;&lt;br /&gt;당신의 패키지들을 위해 제어 파일들을 생성할 필요가 있다. 걱정하지 마라; 이 작업은 매우 어럽지 않다. 당신이 좋아 하는 텍스트 편집기로 파일을 생성하고 몇가지 정보만 적어주면 된다. 다음은 제어파일의 예제이다. 나는 데모목적으로 모든 선택필드들(Optional fields)을 모두 포함하였다. 당신의 패키지는 그럴필요 없다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;Listing 1. 제어파일 예제&lt;br /&gt;&lt;/STRONG&gt;&lt;EM&gt; &lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #faffa9&quot;&gt;&lt;STRONG&gt;Package : acme&lt;br /&gt;Version : 1.0&lt;br /&gt;Section : web&lt;br /&gt;Priority : optional&lt;br /&gt;Architecture : all&lt;br /&gt;Essential : no&lt;br /&gt;Depends : libwww-perl, acme-base (&amp;gt;= 1.2)&lt;br /&gt;Pre-Depends : perl&lt;br /&gt;Recommends : mozilla | netscape&lt;br /&gt;Suggests : docbook&lt;br /&gt;install-Size : 1024&lt;br /&gt;Maintainer : Choi&lt;br /&gt;Conflicts : while-e-coyote&lt;br /&gt;Replaces : sma-sheepdog&lt;br /&gt;Provides : acme&lt;br /&gt;Description : The Description can contain free-form text&lt;br /&gt;describing the function of the program, what&lt;br /&gt;kind of features it has, and so on.&lt;br /&gt;.&lt;br /&gt;More descriptive text.&lt;br /&gt;&lt;/STRONG&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;/EM&gt;&lt;br /&gt;&lt;STRONG&gt;제어파일 필드들&lt;/STRONG&gt;&lt;br /&gt;제어 필드들의 형식은 매우 간단하다: 필드명과 콜론, 그리가 필드의 값을 적어주면 된다. 결국, &quot;필드명: 필드값&quot; 이 당신에게 필요한 모든것이다. 어떤 필드는 한단어(onw-word) 값을 필요로 하지만 대부분의 다른 필드들은 자유로운 형식으로 작성할 수 있다.&lt;br /&gt;&lt;br /&gt;이장에서는 제어파일의 각필드가 무엇을 의미하는지와 어떤 정보를 기술해야 하는지 살펴보겠다. 대부분의 필드들은 선택사항이다. 그러므로, 당신의 패키지와 상관없는 필드는 반드시 기술할 필요가 없다. 예를들어, 패키지가 &quot;Source&quot;필드를 갖고있지 않다면 이 패키지를 위한 소스는 이용할 수 없다. 만약, 당신의 패키지가 다른 어떤 패키지와도 충돌을 일으키지 않는다면 &quot;Conflicts&quot;정보를 포함할 필요가 없다.&lt;br /&gt;&lt;br /&gt;모든 제어파일의 첫번째 필드는 &quot;Package&quot; 필드이다. 여기에 패키지명을 기술하도록 한다. 그 다음, &quot;Version&quot;에는 버젼번호를 적는다. 아마도 해당 프로그램 원저작자의 버젼 넘버링 형식이 있겠지만 하이픈(-)은 포함하지 않도록 한다. 하이픈뒤의 것은 데비안 리비젼번호로 간주된다. 예를들어, 프로그램의 원래 버젼이 1.01-1 과 같이 주어졌다면, 버젼번호는 &quot;1.01&quot; 이 되고 데비안 리비전 번호가 &quot;1&quot;이 된다. 이것은 명백히 당신이 의도한 결과가 아닐것이다.&lt;br /&gt;&lt;br /&gt;&quot;Maintainer&quot;필드는 반드시 당신의 전체이름(full name)또는 회사명과 전자우편주소를 포함해 위의 예제와 같은 형식으로 작성한다. &quot;Installed-Size&quot;는 말그대로이다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;의존(Dependencies)&lt;/STRONG&gt;&lt;br /&gt;이미 알고 있겠지만, 데비안 패키지의 우수한점중 하나는 의존성 해결(dependency resolution)이다. 당신이 apt-get 으로 패키지를 조회하면 자동으로 해당 패키지를 위해 무엇이 필요한지 찾아서 설치되어 있지 않으면 함께 설치된다. 이기능은 패키지에 적절히 설정된 의존성정보 때문에 가능하다.&lt;br /&gt;&lt;br /&gt;몇개의 선택필드가 의존성 정보를 다룬다. 여기에서 각필드를 간단히 다루겠다. 당신의 패키지가 설치되기전에 어떤 패키지에 의존하고 있는지 분명히 알고 있어야 한다. 의존성 시스템은 개발자가 제공한 정보에 의해서만 정확히 작동할 수 있다.&lt;br /&gt;&lt;br /&gt;의존성은 제어파일의 다섯개필드로 이루어 진다: Depends, Enhances, Pre-Depends, Recommends, 그리고 Suggests.&lt;br /&gt;&lt;br /&gt;Depends필드에는 필수적으로 필요한 패키지의 이름을 포함한다. 만약, &quot;nice to have&quot;라는 패키지가 관련이 되어있으나 당신 패키지의 일반적인 작동에는 영향을 미치지 않는다면 &quot;Recommends&quot; 또는 &quot;Suggests&quot;필드에 기술토록 한다. 위 예제에서 &quot;Recommends&quot;필드가 두개의 패키지를 파이프(|)구분자로 포함된 것을 주목하라. 이것은 둘중 하나만 있으면 된다는 것을 의미한다.&lt;br /&gt;&lt;br /&gt;&quot;Recommends&quot; 와 &quot;Suggests&quot;필드는 어떤 차이가 있을까? 해당 패키지가 설치되어야 하지만 없어도 사용에 지장이 없다면(반드시 필요한것이 아니라면) 이것은 &quot;Recommends&quot;에 속한다. 매뉴얼에 따르면, &quot;어플리케이션과 함께 포함은 되지만 반드시 설치할 필요는 없는것&quot; 이라고 정의하고 있다. 그외에 함께 사용하면 유용한 기능을 제공하지만 결코 필요한것이 아닌경우 &quot;Suggests&quot;필드에 기술한다.&lt;br /&gt;&lt;br /&gt;예를들어, DocBook XML DTD 패키지(docbook-xml)은 DocBook SGML(docbook)패키지를 추천 패키지(Recommends) 패키지에 포함하고 있다. 그리고, DocBook documentation(docbook-doc)은 추천 패키지(Suggests) 이다. 대부분의 상황에, 당신이 XML DTD를 가지고 있다면 항상은 아니지만 아마도 SGML DTD또한 필요할 것이다. 패키지의 문서나 관련된 프로그램을 설치하는것은 매우 유용하다. 하지만 이것이 이 프로그램의 작동에 필수요소는 아니다.&lt;br /&gt;&lt;br /&gt;&quot;Enhances&quot; 필드는 당신의 패키지가 다른 패키지를 더 유용하게 할때 사용된다. 그러므로, docbook-doc 패키지는 &quot;Enahnces&quot;필드에 docbook-xml을 포함하게 된다.&lt;br /&gt;&lt;br /&gt;&quot;Pre-Depends&quot; 필드는 특별한 경우를 대비해 준비되어있다. &quot;Pre-Depends&quot;에 패키지가 있을경우 이것은 해당패키지가 현재패키지를 설치하기 이전에 반드시 설치되도록 한다.&lt;br /&gt;&lt;br /&gt;마지막으로, 버젼번호에 대해서 몇가지 심벌들을 이해할 필요가 있다. 의존관계에 있는 패키지는 acme-base (&amp;gt;= 1.2)와 같은 버젼번호를 갖고 있다. 이것은 이 패키지는 acme-base 라는 패키지의 1.2버젼 이상을 필요로 한다는 것을 의미한다.&lt;br /&gt;&lt;br /&gt;이러한 관계는 이하(&amp;gt;&amp;gt;), 또는 같거나 그 이하(&amp;lt;=), 완전히 같거나(=), 같거나 그 이상(&amp;gt;=), 또는 이상(&amp;gt;&amp;gt;) 으로 구분할 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;충돌 기술&lt;/STRONG&gt;&lt;br /&gt;&quot;Conflicts&quot;와 &quot;Replaces&quot; 필드는 의존관계를 포함하지 않는다. 대신, 당신의 패키지와 같이 시스템에 설치되어서는 안되는 패키지를 기술한다.&lt;br /&gt;&lt;br /&gt;당신의 패키지와 충돌을 일으킬수 있는 패키지는 반드시 &quot;Conflicts&quot;필드에 기술해야 한다. 예를들어, 당신이 수정된 Apache를 패키징 했다면 아마도 기존버젼의 Apache는 시스템에 설치되어서는 안될 것이다. 그러므로, 이경우 &quot;apache&quot;는 충돌리스트에 기술되어야 한다.&lt;br /&gt;&lt;br /&gt;마지막으로, 제어파일은 다음장에서 논의할 스크립트와 함께 반드시 &quot;DEBIAN&quot; 이라는 이름의 디렉토리 아래에 위치해야 한다. 이 디렉토리는 최종 Deb아카이브에는 포함되지 않을 것이다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;스크립트&lt;/STRONG&gt;&lt;br /&gt;당신의 패키지는 시스템이 설치 또는 제거를 위해 몇개의 스크립트를 필요로 한다. postinst 스크립트는 프로그램이 설치된후에 해야할 작업들을 포함한다. prerm스크립트는 프로그램 삭제시에 해야할 작업들을 포함한다. 이 두 스크립트는 필수 사항이다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;마지막 단계&lt;/STRONG&gt;&lt;br /&gt;모든 준비작업이 끝났으면 데비안패키지를 만들어야 한다. 실제 패키지의 생성은 매우 간단하다.&lt;br /&gt;&lt;br /&gt;dpkg 명령과 -b 또는 --build 옵션을 사용하면 된다. 패키지 생성을 위한 문법은 dpkg -b 디록토리 패키지명.deb 이다. 디렉토리에는 모든 필요한 파일들이 모두 포함되어 있어야 한다. 패키지 빌드시 새로운 패키지의 이름을 명시하지 않으면 디렉토리 아래에 &quot;.deb&quot;와 같이 생성된다. -- 이경우 패키지가 생성되지 않은것으로 착각 할 수도 있다.&lt;br /&gt;&lt;br /&gt;예를들어, 만약 당신의 프로그램이 etc/ 아래에 설정파일을 가지고 있고, 실행파일은 usr/bin/ 아래에 있으며 몇몇 문서는 usr/share/doc/package/ 에 존재할 경우 이와같은 파일시스템 트리를 패키지 생성시 해당 패키지 디렉토리 아래에 만들어야 한다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT face=arial,helvetica,sans-serif&gt;원문 : &lt;EM&gt;http://www.ibm.com/developerworks/linux/library/l-debpkg.html&lt;/EM&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>FSM(Finite State Machine) </title>
            <link>http://www.swssm.org/index.php?idx=262</link>
            <description>&lt;br /&gt;&lt;div class=&quot;answer_contents&quot;&gt;&lt;strong&gt;FSM&lt;/strong&gt;은 일반적으로 디지털회로를 꾸밀때 사용하는 중요한 기법중의 하나입니다. 간단히 FSM이 무엇이냐고 묻는다면 순차적인 디지털 회로의 상태 변화를 나타내는 방법이다라고 말씀드릴수 있죠. 예를 들면, 현재의 상태가 숫자로 표현해서 '0의 상태에 있다고 가정하면, 그리고 표현할 수 있는 전체 상태(state)가 '0'을 포함해서 4개 - '1','2','3'-가 있다고 해봅시다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;여기서 상태(state)가 변하는 순서가 순차적으로 '0'-&amp;gt;'1'-&amp;gt;'3'-&amp;gt;'2'라고 하면 상태(state)의 변화자체는 &quot;상태천이(state transiton)&quot;라고 일반적으로 부르고, 4개의 state를 가진 장치(machine)가 존재한다라고 말할 수 있습니다. FSM에서 앞글자 finite는 아시겠지만 '제한적인'이란 뜻이 있듯이 이러한 상태(state)들이 제한된 숫자만큼 있다는 것을 뜻합니다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;따라서 이를 종합해 보면 FSM이란 '제한된 상태들의 변화를 순차적으로 나타내는 장치'라고 또다시 표현할 수 있겠죠. 앞서 말씀드렸지만, FSM은 디지털 로직에서 회로를 꾸미고자 할 때 중요하게 사용되는 방법중의 하나입니다. 왜냐하면 FSM은 주로 마이크로 프로세서 뿐만 아니라 디지털로 꾸밀수 있는 모든 회로들의 주요 콘트롤러 회로를 꾸미는 방법으로 사용되기 때문입니다.&lt;br /&gt;&lt;br /&gt;이번 프로젝트에서 사용된 ADC 제어를 예로 설명해 보겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[##_1C|1177074542.bmp|width=&quot;600&quot; height=&quot;420&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;strong&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;&amp;lt; ADC 타이밍도 &amp;gt;&lt;/strong&gt;&lt;br /&gt;&lt;/div&gt;&lt;/strong&gt;&lt;br /&gt;ADC를 제어할려면 타이밍에서 보는 것과 같이 Start, ALE를 enable 하고 address를 설정합니다.&lt;br /&gt;ADC 1개만을 사용하므로 address는 신경쓰지 않겠습니다.&lt;br /&gt;EOC(End of Conversion) 의 신호가 '0'으로 떨어지면 OE(Output Enable)을 enable 시켜주면 데이터가 나오게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp;예제. 1) C code style&lt;br /&gt;&lt;/strong&gt;------------------------------------------------------------------------------------------&lt;br /&gt;&amp;nbsp;always @ (posedge clk)&lt;br /&gt;&amp;nbsp;begin&lt;/div&gt; &lt;div class=&quot;answer_contents&quot;&gt;&lt;br /&gt;&amp;nbsp; if(test_button == 1'b1)&lt;br /&gt;&amp;nbsp; begin&lt;br /&gt;&amp;nbsp; &amp;nbsp;ale_flag = 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp;eoc_flag = 0;&lt;br /&gt;&amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; else if(test_button == 1'b0)&lt;br /&gt;&amp;nbsp; begin&lt;br /&gt;&amp;nbsp; &amp;nbsp;ale_flag = 1;&lt;br /&gt;&amp;nbsp; end&lt;/div&gt; &lt;div class=&quot;answer_contents&quot;&gt;&amp;nbsp; if(ale_flag == 1)&lt;br /&gt;&amp;nbsp; begin&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp;ale_count = ale_count + 1;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;if(eoc_flag==1)&lt;br /&gt;&amp;nbsp; &amp;nbsp;begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(eoc == 1'b1)&lt;br /&gt;&amp;nbsp; &amp;nbsp; begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;output_enable_count = output_enable_count + 1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(output_enable_count &amp;gt; 30)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; output_enable &amp;lt;= 1'b0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; eoc_flag = 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ale_count = 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; output_enable_count = 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;else if(output_enable_count &amp;gt; 6)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; output_enable &amp;lt;= 1'b1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp;end&lt;/div&gt; &lt;div class=&quot;answer_contents&quot;&gt;&amp;nbsp; &amp;nbsp;if(ale_count &amp;gt; 24)&lt;br /&gt;&amp;nbsp; &amp;nbsp;begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; start &amp;lt;= 1'b0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; ale &amp;lt;= 1'b0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(eoc == 1'b0)&lt;br /&gt;&amp;nbsp; &amp;nbsp; begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;eoc_flag = 1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp;end&lt;br /&gt;&amp;nbsp; &amp;nbsp;else if(ale_count &amp;gt; 6)&lt;br /&gt;&amp;nbsp; &amp;nbsp;begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; ale &amp;lt;= 1'b1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; start &amp;lt;= 1'b1; &lt;br /&gt;&amp;nbsp; &amp;nbsp;end&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; end&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; else if(ale_flag == 0)&lt;br /&gt;&amp;nbsp; begin&lt;br /&gt;&amp;nbsp; &amp;nbsp;ale &amp;lt;= 1'b0;&lt;br /&gt;&amp;nbsp; &amp;nbsp;start &amp;lt;= 1'b0;&lt;br /&gt;&amp;nbsp; end&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;end&lt;br /&gt;&amp;nbsp;------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp;예제. 2) FSM style&lt;/strong&gt;&lt;br /&gt;------------------------------------------------------------------------------------------&lt;br /&gt;always @(posedge clk or negedge reset)&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;if(~reset)&lt;br /&gt;&amp;nbsp; state &amp;lt;= Idle;&lt;br /&gt;&amp;nbsp;else&lt;br /&gt;&amp;nbsp; case(state)&lt;br /&gt;&amp;nbsp; &amp;nbsp;Idle: &amp;nbsp;begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(TC&amp;gt;TC_Idle) state &amp;lt;= Start;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Start: &amp;nbsp;begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(TC&amp;gt;TC_Start) state &amp;lt;= Wait_EOC;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Wait_EOC: &amp;nbsp;begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(~eoc) state &amp;lt;= Wait_Convert;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Wait_Convert: begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(eoc) &amp;nbsp;state &amp;lt;= Read_Signal;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Read_Signal: begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(TC&amp;gt;TC_Read_Signal) state &amp;lt;= Output_Signal;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Output_Signal: begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(TC&amp;gt;TC_Output_Signal) state &amp;lt;= Idle;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;default: &amp;nbsp; state &amp;lt;= Idle;&lt;br /&gt;&amp;nbsp; endcase&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;div class=&quot;answer_contents&quot;&gt;//// Change the ADC function ////&lt;br /&gt;always @(posedge clk or negedge reset)&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp;if(~reset)&lt;br /&gt;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp; ALE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; START &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; OE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp;end&lt;br /&gt;&amp;nbsp;else&lt;br /&gt;&amp;nbsp; case(state)&lt;br /&gt;&amp;nbsp; &amp;nbsp;Idle: &amp;nbsp;begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ALE &amp;lt;= 0; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;START &amp;lt;= 0; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;OE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;//count &amp;lt;= 8'b0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Start: &amp;nbsp;begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ALE &amp;lt;= 1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;START &amp;lt;= 1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;OE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp;Wait_EOC: begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ALE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;START &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;OE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp;Wait_Convert: begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ALE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;START &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;OE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp;Read_Signal: begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ALE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;START &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;OE &amp;lt;= 1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp;Output_Signal: begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; /*&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ALE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;START &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;OE &amp;lt;= 1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;count &amp;lt;= ~data;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;default:&lt;br /&gt;&amp;nbsp; &amp;nbsp; begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ALE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;START &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;OE &amp;lt;= 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&amp;nbsp; endcase&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;예제.1 과 예제.2 는 똑같이 ADC를 제어 하는 코드입니다. 하지만 예제.2 가 예제.1보다 더 길다는 것을 알 수 있습니다. 하지만 가장 근본적으로 다른 점은 예제.1은 시간 순서대로 프로그램을 했다는 것이고, 예제.2는 상태 변화에 따라 프로그램을 했다는 것입니다. 프로그램에 조금만 익숙한 사람이라면 예제.1 보다 예제.2 가 더 보기 쉽고 유지보수가 편하다는 것을 알 수 있습니다. 그에 반해 예제.1은 if문 안에 if문, 또다시 그안에 if문 을 사용하여 작업을 한 본인조차 자세한 주석없이 코드를 수정하기 힘들다는 것을 알 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[##_1C|1051472588.bmp|width=&quot;600&quot; height=&quot;487&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;strong&gt; &lt;div style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;&amp;lt; ADC FSM &amp;gt;&lt;/strong&gt;&lt;/div&gt;&lt;/strong&gt;&lt;br /&gt;ADC 제어를 예제. 2 의 FSM code style을 통하여 할 경우 위와 같은 그림을 그릴 수 있게 됩니다. 그림과 같이 각 state를 가지고 있고 상황에 맞추어(TC 값이 변하거나, 원하는 값이 들어왔을 때) state 만을 변경시키기만 하면 제어가 끝나게 됩니다. 만약 더 추가 하고 싶다면 다른 한개의 state를 만들어 내어 추가만 해주면 전체프로그램의 수정이 가능하게 됩니다. 이는 FPGA 의 보드 특성상 가능한 작업이며, 고속동작과 동기화 작업을 가능케합니다.&lt;br /&gt;&lt;/div&gt;
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>sysfs - The filesystem for exporting kernel object </title>
            <link>http://www.swssm.org/index.php?idx=280</link>
            <description>&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;안녕하세요&lt;span lang=&quot;EN-US&quot;&gt;. UOD System&lt;/span&gt;프로젝트 팀의&lt;span lang=&quot;EN-US&quot;&gt; 18-2&lt;/span&gt;기 안찬수입니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;저희 프로젝트에서 사용하게 된 리눅스 커널 2.6에서 제공하는 pseduo filesystem인 sysfs에 대해서 소개하고자 합니다.&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;일반적으로&lt;span lang=&quot;EN-US&quot;&gt; User Application&lt;/span&gt;과 통신하는 상위 드라이버와 같은 경우 커널공간과 유저공간사이에 통신 할 필요가 있거나 일련의 정보를 제공하고자 할 때&lt;span lang=&quot;EN-US&quot;&gt;, ioctl&lt;/span&gt;을 이용하게 되죠&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;하지만 &lt;span lang=&quot;EN-US&quot;&gt;User Application&lt;/span&gt;과 직접 통신을 하지 않는&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;예를 들면 버스드라이버나 플랫폼 드라이버와 같은 경우는 별도의 방법이 필요하게 됩니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;리눅스 커널&lt;span lang=&quot;EN-US&quot;&gt; 2.6&lt;/span&gt;에서는 이러한 요구사항을 수용하기 위하여&lt;span lang=&quot;EN-US&quot;&gt; ramfs&lt;/span&gt;에 기반하는&lt;span lang=&quot;EN-US&quot;&gt; ram-based&lt;/span&gt;파일시스템은&lt;span lang=&quot;EN-US&quot;&gt; sysfs&lt;/span&gt;가 소개되었습니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;이는 유저공간과 커널공간사이에 대량의 데이터를 송수신 하기 보다는 커널의 자료구조나 어트리뷰트등을 유저공간에&lt;span lang=&quot;EN-US&quot;&gt; export&lt;/span&gt;하는 용도로 개발되었습니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;실제로&lt;span lang=&quot;EN-US&quot;&gt; sysfs&lt;/span&gt;가 어디에 사용되는지 잘 감이 안오실텐데요&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;다음을 보도록 하죠&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;[##_1C|1091278721.png|width=&quot;600&quot; height=&quot;207&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;v:shapetype id=&quot;_x0000_t75&quot; coordsize=&quot;21600,21600&quot; o:spt=&quot;75&quot; o:preferrelative=&quot;t&quot; path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;&lt;v:stroke joinstyle=&quot;miter&quot;&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 1 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum 0 0 @1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @2 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @0 0 1&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @6 1 2&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @8 21600 0&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;&gt;&lt;/v:f&gt;&lt;v:f eqn=&quot;sum @10 21600 0&quot;&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok=&quot;f&quot; gradientshapeok=&quot;t&quot; o:connecttype=&quot;rect&quot;&gt;&lt;/v:path&gt;&lt;o:lock v:ext=&quot;edit&quot; aspectratio=&quot;t&quot;&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=&quot;_x0000_i1025&quot; style=&quot;width: 486.75pt; height: 162pt;&quot; type=&quot;#_x0000_t75&quot; o:ole=&quot;&quot;&gt;&lt;v:imagedata o:title=&quot;&quot; src=&quot;file:///C:%5CUsers%5CAhn%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image001.emz&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;이 부분은&lt;span lang=&quot;EN-US&quot;&gt; usbcore&lt;/span&gt;드라이버에서 제공하는&lt;span lang=&quot;EN-US&quot;&gt; USB &lt;/span&gt;디바이스의 정보입니다&lt;span lang=&quot;EN-US&quot;&gt;. usb&lt;/span&gt;버스에 연결된 열거정보를 계층적으로 보여주고 있습니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;실제 구현은&lt;span lang=&quot;EN-US&quot;&gt; linux/drivers/usb/core/sysfs.c&lt;/span&gt;에서 찾아보실 수 있습니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;이렇게 유저공간에 정보를 제공하거나 반대로 유저공간에서 정보를 전달하기 위한 용도로 사용할 수 도 있습니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;기본적인&lt;span lang=&quot;EN-US&quot;&gt; sysfs&lt;/span&gt;의 동작원리를 이해하기 위해서는&lt;span lang=&quot;EN-US&quot;&gt; Linux driver model&lt;/span&gt;의 이해가 선수 되어야 합니다만&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;다음에 설명하도록 하고 여기서는 &lt;span lang=&quot;EN-US&quot;&gt;sysfs &lt;/span&gt;개략적인 구현 방법에 대해서만 알아보고자 합니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;우선&lt;span lang=&quot;EN-US&quot;&gt; sysfs&lt;/span&gt;를 사용하기 위해서는&lt;span lang=&quot;EN-US&quot;&gt;, sysfs&lt;/span&gt;를 사용하도록 커널을 컴파일 하여야 하며&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;이는&lt;span lang=&quot;EN-US&quot;&gt; Kernel Configuration&lt;/span&gt;의&lt;span lang=&quot;EN-US&quot;&gt; File systems &amp;gt; Pseudo filesystems &amp;gt; sysfs file system support&lt;/span&gt;에 있습니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;v:shape id=&quot;_x0000_i1026&quot; style=&quot;width: 324pt; height: 108pt;&quot; type=&quot;#_x0000_t75&quot; o:ole=&quot;&quot;&gt;&lt;v:imagedata o:title=&quot;&quot; src=&quot;file:///C:%5CUsers%5CAhn%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image003.emz&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;[##_1C|1000378818.png|width=&quot;489&quot; height=&quot;150&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;이와 같이 &lt;span lang=&quot;EN-US&quot;&gt;sysfs&lt;/span&gt;를 지원하도록 컴파일 된 커널에서 다음과 같이&lt;span lang=&quot;EN-US&quot;&gt; sysfs&lt;/span&gt;를 마운트 합니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;mount -t sysfs sysfs /sys&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;다음은&lt;span lang=&quot;EN-US&quot;&gt; /sys&lt;/span&gt;의 내용입니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;[##_1C|1217303390.png|width=&quot;430&quot; height=&quot;213&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;a&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;v:shape id=&quot;_x0000_i1027&quot; style=&quot;width: 270pt; height: 108pt;&quot; type=&quot;#_x0000_t75&quot; o:ole=&quot;&quot;&gt;&lt;v:imagedata o:title=&quot;&quot; src=&quot;file:///C:%5CUsers%5CAhn%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image005.emz&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;/sys&lt;/span&gt;안의 각 디렉토리는 커널&lt;span lang=&quot;EN-US&quot;&gt; 2.6.24&lt;/span&gt;에서 위 그림과 같이 나뉘어 있으며 관련된 정보를 계층적으로 표현합니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;각 계층은&lt;span lang=&quot;EN-US&quot;&gt; Linux driver model&lt;/span&gt;에서 소개하는&lt;span lang=&quot;EN-US&quot;&gt; kobject&lt;/span&gt;라는 객체로 표현되며 이 계층은 결국 디렉토리를 의미합니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;v:shape id=&quot;_x0000_i1029&quot; style=&quot;width: 486.75pt; height: 378pt;&quot; type=&quot;#_x0000_t75&quot; o:ole=&quot;&quot;&gt;&lt;v:imagedata o:title=&quot;&quot; src=&quot;file:///C:%5CUsers%5CAhn%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image007.emz&quot;&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;위 그림은&lt;span lang=&quot;EN-US&quot;&gt; /sys/bus&lt;/span&gt;의 일부를 보여줍니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;각 디렉토리가 계층구조를 이루고 있고&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;정규파일이 유저공간에서 커널과 통신하는 엔트리가 됩니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;[##_1C|1075115904.png|width=&quot;600&quot; height=&quot;454&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;br /&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;소개는 여기까지 하고 실제 구현에 필요한 몇 가지 자료구조에 대해 알아보겠습니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;struct attribute {&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;char&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;*name;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;mode_t&lt;span style=&quot;&quot;&gt;&amp;nbsp; &lt;/span&gt;mode;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;};&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;attribute&lt;/span&gt;는 &lt;span lang=&quot;EN-US&quot;&gt;sysfs&lt;/span&gt;에서 정규 파일로 표현되는 부분입니다&lt;span lang=&quot;EN-US&quot;&gt;. name&lt;/span&gt;필드는 파일명&lt;span lang=&quot;EN-US&quot;&gt;, mode&lt;/span&gt;는 파일에 대한 접근권한을 의미합니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;struct device&lt;/span&gt;에 대응되어 사용되는 다음과 같은 자료구조가 있습니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;struct device_attribute {&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;struct attribute attr;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;ssize_t (*show)(struct device *dev, char *buf);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;ssize_t (*store)(struct device *dev, const char *buf);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;};&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;여기에&lt;span lang=&quot;EN-US&quot;&gt; show&lt;/span&gt;와&lt;span lang=&quot;EN-US&quot;&gt; store, &lt;/span&gt;두 개의 함수 포인터가 있는데&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;각각&lt;span lang=&quot;EN-US&quot;&gt; read&lt;/span&gt;와&lt;span lang=&quot;EN-US&quot;&gt; write&lt;/span&gt;에 대응되며&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;여기에 등록한 함수가 실제 파일에&lt;span lang=&quot;EN-US&quot;&gt; I/O&lt;/span&gt;가 발생할 때&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;커널이 호출해 줍니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;또한 이&lt;span lang=&quot;EN-US&quot;&gt; device_attrribute&lt;/span&gt;는 &lt;span lang=&quot;EN-US&quot;&gt;device&lt;/span&gt;에 대응하는 인터페이스이므로&lt;span lang=&quot;EN-US&quot;&gt; show&lt;/span&gt;와&lt;span lang=&quot;EN-US&quot;&gt; store&lt;/span&gt;함수의 첫 번째 인자로&lt;span lang=&quot;EN-US&quot;&gt; device&lt;/span&gt;구조체 포인터가 넘어오게 됩니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;attribute&lt;/span&gt;를 선언하는 다음과 같은&lt;span lang=&quot;EN-US&quot;&gt; helper&lt;/span&gt;매크로가 있습니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt; text-indent: 40pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;#define DEVICE_ATTR(_name, _mode, _show, _store)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;이&lt;span lang=&quot;EN-US&quot;&gt; attribute&lt;/span&gt;를 등록&lt;span lang=&quot;EN-US&quot;&gt;/&lt;/span&gt;제거하는데&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;다음과 같은 두 개의 함수가 사용됩니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;int device_create_file(struct device *, struct device_attribute *);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;void device_remove_file(struct device *, struct device_attribute *);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;이 외에 &lt;span lang=&quot;EN-US&quot;&gt;bus driver, device driver &lt;/span&gt;등에 해당하는 인터페이스가 있는데&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;이름과 타입이 다를 뿐 사용방법은 동일합니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;실제 구현 예를 보죠&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;blockquote dir=&quot;ltr&quot; style=&quot;margin-right: 0px;&quot;&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;#include &amp;lt;linux/kernel.h&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;#include &amp;lt;linux/module.h&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;#include &amp;lt;linux/device.h&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;#include &amp;lt;linux/platform_device.h&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;char value[1024];&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;struct my_data {&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;int no;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;char test[50];&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;};&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;static ssize_t show_value(struct device *dev, struct device_attribute *attr, char *buf) {&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;return snprintf(buf, PAGE_SIZE, &quot;%s\n&quot;, value);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;static ssize_t store_value(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) {&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;sscanf(buf, &quot;%s&quot;, value);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;return strnlen(buf, PAGE_SIZE);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;static DEVICE_ATTR(value, S_IRUGO | S_IWUSR, show_value, store_value);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;ssize_t bin_read(struct kobject *kobj, struct bin_attribute *attr, char *buf, loff_t off, size_t count) {&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;struct device *dev = container_of(kobj, struct device, kobj);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;struct my_data *data = dev_get_drvdata(dev);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;memcpy(buf, data, sizeof(struct my_data));&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;return count;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;ssize_t bin_write(struct kobject *kobj, struct bin_attribute *attr, char *buf, loff_t off, size_t count) {&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;struct device *dev = container_of(kobj, struct device, kobj);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;struct my_data *data = dev_get_drvdata(dev);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;memcpy(data, buf, sizeof(struct my_data));&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;return count;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;struct bin_attribute dev_attr_bin = {&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;.attr = {&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;.name = &quot;binfile&quot;,&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;.mode = S_IRWXUGO,&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;},&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;.size = PAGE_SIZE,&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;.read = bin_read,&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;.write = bin_write,&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;};&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;static int sysfs_test_create_file(struct device *dev) {&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;int result = 0;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;result = device_create_file(dev, &amp;amp;dev_attr_value);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;if (result)&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;return result;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;result = device_create_bin_file(dev, &amp;amp;dev_attr_bin);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;if (result)&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;goto bin_failed;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;return 0;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;bin_failed:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;device_remove_file(dev, &amp;amp;dev_attr_value);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;return result;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;static void sysfs_test_remove_file(struct device *dev) {&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;device_remove_file(dev, &amp;amp;dev_attr_value);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;device_remove_bin_file(dev, &amp;amp;dev_attr_bin);&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;static void sysfs_test_dev_release(struct device *dev) {}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;static struct platform_device the_pdev = {&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;.name = &quot;sysfs_test_device&quot;,&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;.id = -1,&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;.dev = {&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;.release = sysfs_test_dev_release,&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;};&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'&quot; size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font face=&quot;'Dotum', 'Sans-serif'
</description>
            <author>Samsung Software Membership</author>
            <pubDate>Thu, 01 Jan 1970 00:00:00 +0900</pubDate>
        </item>
        <item>
            <title>USB Driver Stack </title>
            <link>http://www.swssm.org/index.php?idx=274</link>
            <description>&lt;P&gt;&lt;br /&gt;안녕하세요. UOD System PL을 맡고 있는 18기 이승환입니다. &lt;br /&gt;저는 저희 프로젝트의 기반 지식인 USB Driver Stack에 대해서 간단히 요약해보고자 합니다. ^^&lt;br /&gt;&lt;br /&gt;[##_1C|1111284585.jpg|width=&quot;331&quot; height=&quot;457&quot; alt=&quot;사용자 삽입 이미지&quot;|_##]&lt;br /&gt;&lt;br /&gt;USB H/W는 USB Host Controller와 1개이상의 루트허브로 이루어지며 이는 보통 PC의 메인보드 혹은 SoC에 내장된 형대로 구성된다.&lt;br /&gt;USB Host Controller는 버스를 관장하며 버스에 어떤 디바이스가 연결되어 있는지 여부와 각 디바이스의 기능들을 잘 알고 있어야 한다. 또한 USB 버스 상의 모든 디바이스의 데이터를 잘 주고 받을 수 있도록 해야한다.&lt;br /&gt;이러한 USB Host Controller를 동작시키도록 하는 디바이스 드라이버는 보통 운영체제에서 지원하고 있으며 USB Device Controller에서 가져온 데이터가 처음으로 진입하는 관문이라 할 수 있다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;USB Device Driver Stack은 다음과 같이 계층적으로 구성되어 있다. 다음은 각 계층별 설명이다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;1. USB host Controller&lt;/STRONG&gt; &lt;br /&gt;오늘날의 USB host controller는 대부분 PC의 메인보드에 들어가 있다. &lt;br /&gt;이러한 controller들은 서로 호환성이 있으며, 크게 OHCI ( Open Host Controller Interface : Compaq )와 UHCI( Universal Host Controller Interface : Intel )로 나뉜다. &lt;br /&gt;서로 간에 호환성이 있으며, 같은 capability를 제공하기에 USB device는 host controller의 종류에 대해서 걱정할 필요가 없다. 기본적으로 UHCI hardware가 조금 더 간단하기에 좀더 복잡한 device driver가 필요하며, 따라서 CPU에 조금 더 load를 준다고 볼 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;2. Host Controller Driver&lt;/STRONG&gt;&lt;br /&gt;컴퓨터 하드웨어는 host controller와 root hub 가지고 있으며 Host Controller Device(HCD)라는 프로그래머를 위한 인터페이스가 하드웨어적으로 구현되어 있다.&lt;br /&gt;USB 1.x 버젼에서어 Open Host Controller Interface (OHCI) and Universal Host Controller Interface (UHCI)가 있다. OHCI는 Compaq, Microsoft, National Semiconductor에 의해 개발 되었고 UHCI는 Intel에 의해서 개발되었다. HCD 표준은 USB 스펙 범위를 벗어난다. 그리고 USB 스펙은 HCD 인터페이스를 명시하지 않는다. &lt;br /&gt;다시 말해서 USB는 포트를 통해서 데이타의 전송 포맷을 정의한다. USB 2.0 HCD 구현은 Enhanced Host Controller Interface(EHCI)라고 불린다. EHCI는 오직 hi-speed(480Mbit/s) 전송만 지원한다. 대부분의 PCI 기반의 EHCI Controller는 Full-Speed를 지원한다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;3. USB Core&lt;/STRONG&gt;&lt;br /&gt;USB Core가 하는 역할은 Hardware와 Device dependent한 부분을 Data structure와 Macro를 정의해서 abstract하게 하는 역할을 한다. &lt;br /&gt;즉, USB Core는 USB Device driver들과 Host controller driver에 일반적인 routine들을 가진다. 이것의 주된 목적은 Hardware나 Device에 dependent한 부분들에 대해서 Data structure와 function, Macro등을 제공하는 것이다. 이렇게 함으로 해서 상위에 올라갈 Program들이 이것을 이용해서 Hardware나 Device에 손쉽게 접근하게 되는 것이다. &lt;br /&gt;API는 크게 두 가지 부분으로 나누어지며, Upper API layer와 Lower API layer로 구분된다. USB Driver writer는 단순히 USB Device driver부분만을 담당하므로 Upper API만 알면 될 것이다. 하위는 이미 안정된 되었다고 볼 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;4. USB Device Driver&lt;/STRONG&gt;&lt;br /&gt;USB Device Driver는 USB에 대한 application의 입출력 요구를 적절한 형태로 USB Core쪽으로 전송하는 역할을 하며, 또한 그 처리의 결과를 Application으로 되돌려 주는 역할을 한다. 여기서 말하는 Application은 사용자 수준의 Program이 될 수도 있을 것이며, Kernel내에 들어가는 또 다른 Device driver도 될 수 있을 것이다. &lt;br /&gt;따라서, 상위의 Application은 하위의 USB 구현 구조에 상관없이 일관되게 Interface를 할 수 있어야 하기에 USB Device Driver