<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>michgan software studio</title>
		<link>http://blog.michgan.net/</link>
		<description>Copyright (c) 1992-2008 michgan</description>
		<language>ko</language>
		<pubDate>Sun, 11 Apr 2010 15:37:52 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<image>
		<title>michgan software studio</title>
		<url><![CDATA[http://cfile5.uf.tistory.com/image/13028E0F4AE58EE671FE0A]]></url>
		<link>http://blog.michgan.net/</link>
		<description>Copyright (c) 1992-2008 michgan</description>
		</image>
		<item>
			<title>축의금 계산기</title>
			<link>http://blog.michgan.net/entry/%EC%B6%95%EC%9D%98%EA%B8%88-%EA%B3%84%EC%82%B0%EA%B8%B0</link>
			<description>&lt;DIV style=&quot;BORDER-BOTTOM: #fe8943 1px solid; BORDER-LEFT: #fe8943 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #fedec7; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #fe8943 1px solid; BORDER-RIGHT: #fe8943 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;13명이 돈을 모았더니 63만원이 되었다.&lt;br /&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;br /&gt;
이런 상황이라고 합시다. 누가 얼마를 냈을까가 궁금하지 않습니까?&lt;br /&gt;
그래서 축의금 계산기를 짜봤습니다. 거창하게 들어갈 것도 없고, 적당히 콘솔 프로그램으로 만들어보죠.&lt;br /&gt;
&lt;br /&gt;축의금은 일반적으로&amp;nbsp;한 사람당 3, 5, 10만원을&amp;nbsp;내므로, for loop 3개로 구성하면 되겠군요.&lt;br /&gt;
&lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #f3c534 1px solid; BORDER-LEFT: #f3c534 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #fefeb8; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #f3c534 1px solid; BORDER-RIGHT: #f3c534 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void Main()&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; int total = 63;&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; int people = 13;&lt;br /&gt;
&lt;br /&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; for(int a=0; a &amp;lt;= (total/3); ++a)&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; {&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; for(int b=0; b &amp;lt;= (total/5); ++b)&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; {&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; for(int c=0; c &amp;lt;= (total/10); ++c)&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; {&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; int s = a*3 + b*5 + c*10;&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; if (s == total &amp;amp;&amp;amp; (a+b+c) == people)&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; {&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&quot;3={0}, 5={1}, 10={2}&quot;, a, b, c);&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; }&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; }&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; }&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; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/DIV&gt;&lt;br /&gt;
이 정도면 원하는 결과를 계산할 수 있을 듯 합니다.&lt;br /&gt;
답은 두 개 뿐이네요.&lt;br /&gt;
3=1, 5=12 혹은 3=6, 5=5, 10=2 입니다. 경우의 수가 의외로 적네요. 13명의 이름 명단이 있으면 평소 행실이랑 친분 관계를 고려하면 누가 얼마를 냈는지 쉽게 짐작 가능하겠습니다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
자, 개인적인 호기심은 여기서 끝났는데, 프로그래머의 오기가 발동하는군요. 이 문제를 풀기 위한 좀 더 nice한 해결책은 없을까 궁금합니다. 3중 for 루프가 맘에 걸려요. 사실 이 알고리즘은 자판기에서 거스름돈을 뱉어 내기 위한 알고리즘하고 비슷하죠. 조금 다른 점은 모든 경우의 수를 다 살펴봐야 한다는 점 정도?&lt;br /&gt;
&lt;br /&gt;축의금의&amp;nbsp;개수를 가변적으로 만들려면, 재귀 호출을 사용하는 알고리즘이 제일 간단하겠군요.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px solid; BORDER-LEFT: #9fd331 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px solid; BORDER-RIGHT: #9fd331 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void Main()&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; Recurse(new int[coins.Length], 0, 63);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static int[] coins = new int[] { 3, 5, 7, 10 };&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static int people = 13;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Recurse(int[] key, int depth, int remain)&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; int coin = coins[depth];&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; int maxLoop = remain / coin;&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; int[] newKey = (int[])key.Clone();&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; for (int i = 0; i &amp;lt;= maxLoop; ++i)&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; {&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; int newRemain = remain - i * coin;&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; newKey[depth] = i;&lt;br /&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; if (depth + 1 == coins.Length)&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; {&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; var n = newKey.Aggregate(0, delegate(int c, int r)&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; {&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; return c + r;&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; });&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; if (n == people &amp;amp;&amp;amp; newRemain == 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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder sb = new StringBuilder();&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; for (int j = 0; j &amp;lt; coins.Length; ++j)&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; {&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.AppendFormat(&quot;{0}={1} &quot;, coins[j], newKey[j]);&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; }&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; Console.WriteLine(sb.ToString());&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; }&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; }&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; else&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; {&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; Recurse(newKey, depth + 1, newRemain);&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; }&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; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
얼렁 뚱땅 만들어진 것 같습니다. 7만원짜리 축의금을 추가하면, 가능한 경우의 수가 10개로 확 늘어나는군요. 설마 누가 7만원을 냈겠어. ㅎㅎ&lt;br /&gt;
&lt;br /&gt;사실 위의 알고리즘도 마음에 쏙 들지는 않습니다. 특히 key를 newKey로 복사하는 부분, 이거 굳이 왜 이렇게 했는지 궁금하지 않으십니까. 그 이유는 parallelize를 염두에 두고 있기 때문입니다. Parallel foreach 구문을 사용해서 돌리면 쿼드 코어 CPU를 100% 활용할 수 있는 축의금 뒷조사 프로그램이 완성될 것입니다.&lt;br /&gt;
&lt;br /&gt;그러나 .... VS2010을 깔기 귀찮기 때문에 패스.&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-100-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-100-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-100-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>manual</category>
			<category>c#</category>
			<category>뒷조사</category>
			<category>알고리즘</category>
			<category>축의금</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/100</guid>
			<comments>http://blog.michgan.net/entry/%EC%B6%95%EC%9D%98%EA%B8%88-%EA%B3%84%EC%82%B0%EA%B8%B0#entry100comment</comments>
			<pubDate>Sun, 11 Apr 2010 14:32:12 +0900</pubDate>
		</item>
		<item>
			<title>[howto] .net CompactFramework 용의 Semaphore 클래스</title>
			<link>http://blog.michgan.net/entry/howto-net-CompactFramework-%EC%9A%A9%EC%9D%98-Semaphore-%ED%81%B4%EB%9E%98%EC%8A%A4</link>
			<description>.net compact framework에는 (3.5까지도) System.Threading.Semaphore 클래스가 빠져 있습니다. 그렇다고 Windows Mobile에서 Semaphore를 쓸 수 없는 것은 아닙니다. CE용의 Win32 API로는&amp;nbsp;CreateSemaphore 와 ReleaseSemaphore가 존재하기 때문이죠.&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
따라서&amp;nbsp;Semaphore 클래스가 필요하다면 Win32 API를 P/Invoke로 호출하는 wrapper 클래스를 만들면 되겠습니다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
이 소스에서는 System.Threading namespace에 직접 Semaphore를 추가하고 있습니다. 원래는 일개 평민은 System namespace를 건드리면 안 되겠지만, .net CF와 일반 프레임워크 간의 호환성을 위해서 침범했다고 합시다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;주의: 내부적으로 호출하는 Win32 함수에 대한 에러 처리가 되어 있지 않습니다.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p id=&quot;more98_0&quot; class=&quot;moreless_fold&quot;&gt;&lt;span style=&quot;cursor: pointer;&quot; onclick=&quot;toggleMoreLess(this, &#039;98_0&#039;,&#039;코드 보기&#039;,&#039;접기&#039;); return false;&quot;&gt;코드 보기&lt;/span&gt;&lt;/p&gt;&lt;div id=&quot;content98_0&quot; class=&quot;moreless_content&quot; style=&quot;display: none;&quot;&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(159, 211, 49); border-right-color: rgb(159, 211, 49); border-bottom-color: rgb(159, 211, 49); border-left-color: rgb(159, 211, 49); background-color: rgb(231, 253, 181); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
using System;&lt;/div&gt;
&lt;div&gt;
using System.Runtime.InteropServices;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
namespace System.Threading&lt;/div&gt;
&lt;div&gt;
{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;public sealed class Semaphore : IDisposable&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public Semaphore(int initCount, int maxCount, string name)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.maxCount = maxCount;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nativeHandle = CreateSemaphore(0, initCount, maxCount, name);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (nativeHandle == IntPtr.Zero)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new Exception(&quot;CreateSemaphore failed&quot;);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int gle = Marshal.GetLastWin32Error();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;openedObject = (gle != 0);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public Semaphore(int initCount, int maxCount)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: this(initCount, maxCount, null)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public int Release()&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Release(1);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public int Release(int count)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int prevCount = 0;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ReleaseSemaphore(nativeHandle, count, out prevCount);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return prevCount;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int maxCount = 0;&lt;br /&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;protected IntPtr nativeHandle = IntPtr.Zero;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;protected bool&amp;nbsp;openedObject&amp;nbsp;= false;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const int INFINITE = -1;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public int MaxCount&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;get { return maxCount; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public bool WasCreated&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;get&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return !openedObject;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;~Semaphore()&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dispose(false);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void Dispose()&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dispose(true);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GC.SuppressFinalize(this);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;protected void Dispose(bool disposing)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (nativeHandle != IntPtr.Zero)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CloseHandle(nativeHandle);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nativeHandle = IntPtr.Zero;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public bool WaitOne(int timeout)&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0 == WaitForSingleObject(nativeHandle, timeout);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public bool WaitOne()&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return WaitOne(INFINITE);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[DllImport(&quot;CoreDLL&quot;, SetLastError = true)]&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;protected extern static int WaitForSingleObject(IntPtr hEvent, int timeout);&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[DllImport(&quot;coredll.dll&quot;, SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)]&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[return: MarshalAs(UnmanagedType.Bool)]&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;protected static extern bool CloseHandle(IntPtr hObject);&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[DllImport(&quot;CoreDLL&quot;, SetLastError = true)]&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;protected static extern IntPtr CreateSemaphore(&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int alwaysZero,&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int lInitialCount,&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int lMaximumCount,&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;string lpName&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;);&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[DllImport(&quot;CoreDLL&quot;, SetLastError = true)]&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;protected static extern int ReleaseSemaphore(&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IntPtr hSemaphore,&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int lReleaseCount,&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out int lpPreviousCount&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div&gt;
}&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-98-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-98-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-98-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>howto</category>
			<category>c#</category>
			<category>HOWTO</category>
			<category>sample</category>
			<category>semaphore</category>
			<category>Windows Mobile</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/98</guid>
			<comments>http://blog.michgan.net/entry/howto-net-CompactFramework-%EC%9A%A9%EC%9D%98-Semaphore-%ED%81%B4%EB%9E%98%EC%8A%A4#entry98comment</comments>
			<pubDate>Tue, 09 Feb 2010 23:23:00 +0900</pubDate>
		</item>
		<item>
			<title>GPS 위치 측정하기</title>
			<link>http://blog.michgan.net/entry/GPS-%EC%9C%84%EC%B9%98-%EC%B8%A1%EC%A0%95%ED%95%98%EA%B8%B0</link>
			<description>&lt;br /&gt;
Windows Mobile 6.0 SDK 를 설치하셨다면, 아래 위치에 샘플 소스코드가 같이 설치됩니다.&lt;br /&gt;
&lt;br /&gt;64 비트 Windows의 경우: &lt;br /&gt;
C:\Program Files (x86)\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS&lt;br /&gt;
&lt;br /&gt;32 비트 Windows의 경우:&lt;br /&gt;
C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS&lt;br /&gt;
&lt;br /&gt;위도, 경도, 고도 정도만 측정하는 경우라면 이 소스를 사용해도 괜찮을거 같네요.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-97-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-97-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-97-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>howto</category>
			<category>c#</category>
			<category>GPS</category>
			<category>HOWTO</category>
			<category>Windows Mobile</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/97</guid>
			<comments>http://blog.michgan.net/entry/GPS-%EC%9C%84%EC%B9%98-%EC%B8%A1%EC%A0%95%ED%95%98%EA%B8%B0#entry97comment</comments>
			<pubDate>Fri, 29 Jan 2010 01:03:10 +0900</pubDate>
		</item>
		<item>
			<title>[howto] 기지국 정보 구하기 (C#)</title>
			<link>http://blog.michgan.net/entry/%EA%B8%B0%EC%A7%80%EA%B5%AD-%EC%A0%95%EB%B3%B4-%EA%B5%AC%ED%95%98%EA%B8%B0</link>
			<description>&lt;br /&gt;
이번 글에서는 Windows Mobile 휴대폰에서 기지국 정보를 구하는 방법을 소개합니다.&lt;br /&gt;
&lt;br /&gt;3G 네트워크에서는 기지국 하나가 커버할 수 있는 반경이 2-3km 정도 되기 때문에 기지국 정보만으로도 제한적인 위치 정보 기반 서비스를 할 수 있습니다. 특히 지하에서는 전파 전달이 잘 되지 않기 때문에 곳곳에 기지국을 설치해야 하죠. 때문에 기지국 ID를 알아낼 수 있다면 사용자가 현재 어느 지하철 역에 있는지, 어느 쇼핑몰 안에 있는지, 어느 대학교 안에 있는지를 구분해서 서비스를 제공할 수 있을 것입니다. 지하철에서는 배차 정보나 행선지 찾기 서비스에 응용할 수도 있고, 쇼핑몰에서는 약도나&amp;nbsp;상품 검색 서비스를 제공할 수 있을 것입니다.&lt;br /&gt;
&lt;br /&gt;C#으로 Cell ID를 가져오는 방법은 생각보다 복잡합니다. P/Invoke 라는 기술을 사용해야 하는데요. C 언어와 32비트 CPU에 대한 이해가 없으면 헤맬 가능성이 높습니다. &lt;br /&gt;
&lt;br /&gt;스크린 샷은 다음과 같습니다. 심플하게 MCC/MNC, LAC, CellId 를 찍어 주고 있습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/204649234B605B164E8F31&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile1.uf@204649234B605B164E8F31.jpg&quot; height=&quot;400&quot; width=&quot;240&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
MCC는 국가 코드입니다. 450번이 우리나라인가봐요. &lt;br /&gt;
MNC는 통신망 코드입니다. 5번은 SKT 입니다. 전체 코드는 &lt;A href=&quot;http://en.wikipedia.org/wiki/Mobile_Network_Code&quot;&gt;http://en.wikipedia.org/wiki/Mobile_Network_Code&lt;/A&gt;&amp;nbsp;에 나열되어 있습니다.&lt;br /&gt;
LAC하고 CellId가 지역/기지국 정보입니다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
코드에 대한 설명을 시작하겠습니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;p id=&quot;more96_0&quot; class=&quot;moreless_fold&quot;&gt;&lt;span style=&quot;cursor: pointer;&quot; onclick=&quot;toggleMoreLess(this, &#039;96_0&#039;,&#039;너무 길어서 가려둡니다&#039;,&#039;이 딴 거 안 봐&#039;); return false;&quot;&gt;너무 길어서 가려둡니다&lt;/span&gt;&lt;/p&gt;&lt;div id=&quot;content96_0&quot; class=&quot;moreless_content&quot; style=&quot;display: none;&quot;&gt;기지국 정보를 얻기 위해서는 RIL 을 사용해야 합니다. Radio Interface Layer 의 약자입니다. 이건 C#으로 제공되지&amp;nbsp;않는 API&amp;nbsp;라 P/Invoke를 사용해야 합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #79a5e4 1px solid; BORDER-LEFT: #79a5e4 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #dbe8fb; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #79a5e4 1px solid; BORDER-RIGHT: #79a5e4 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;[DllImport(&quot;ril.dll&quot;)]&lt;br /&gt;
static extern int RIL_Initialize(uint index, ResultCallback resultCallback, NotifyCallback notifyCallback, uint notificationFlags, IntPtr userParam, out IntPtr ril);&lt;br /&gt;
&lt;br /&gt;[DllImport(&quot;ril.dll&quot;)]&lt;br /&gt;
static extern int RIL_Deinitialize(IntPtr ril);&lt;br /&gt;
&lt;br /&gt;[DllImport(&quot;ril.dll&quot;)]&lt;br /&gt;
static extern int RIL_GetCellTowerInfo(IntPtr ril);&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
반환 값은 HRESULT 코드입니다. COM에서 유래된 코드죠. 이걸 그대로 반환하는 것보다는 한번 wrapping 해서 C# exception을 띄워 주는 것이 낫습니다. 문화가 바뀌었으니까요. &lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px solid; BORDER-LEFT: #9fd331 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px solid; BORDER-RIGHT: #9fd331 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;static IntPtr Initialize(ResultCallback resultCallback, IntPtr userParam)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IntPtr ril = IntPtr.Zero;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int hr = RIL_Initialize(1, resultCallback, null, 0, userParam, out ril);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (hr &amp;lt; 0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new RilException(hr);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ril == IntPtr.Zero)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Exception(&quot;RIL_Initialize gave null pointer&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return ril;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;static void Deinitialize(IntPtr ril)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int hr = RIL_Deinitialize(ril);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (hr &amp;lt; 0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new RilException(hr);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;static void GetCellTowerInfo(IntPtr ril)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int hr = RIL_GetCellTowerInfo(ril);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (hr &amp;lt; 0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new RilException(hr);&lt;br /&gt;
}&lt;/DIV&gt;&lt;br /&gt;
리턴값 검사해서 에러가 있으면 RilException을 띄웁니다. 별거 아니고 그냥 HRESULT 값을 세팅하는 함수입니다.&lt;br /&gt;
&lt;br /&gt;이어서 notify를 받기 위한 delegation 과 struct를 선언해야겠죠. 기지국 정보를 받아오는 struct는 구조가 간단해서 쉽게 됩니다.&lt;br /&gt;

&lt;DIV style=&quot;BORDER-BOTTOM: #79a5e4 1px solid; BORDER-LEFT: #79a5e4 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #dbe8fb; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #79a5e4 1px solid; BORDER-RIGHT: #79a5e4 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;public delegate void ResultCallback(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint resultCode,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int hrCommandId,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IntPtr pData,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint cbData,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IntPtr userParam&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;
&lt;br /&gt;public delegate void NotifyCallback(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint notifyCode,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IntPtr pData,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint cbData,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IntPtr userParam&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;
&lt;br /&gt;[StructLayout(LayoutKind.Sequential)]&lt;br /&gt;
public class CellTowerInfo&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint cbSize;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwParams;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwMobileCountryCode;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwMobileNetworkCode;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwLocationAreaCode;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwCellID;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwBaseStationID;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwBroadcastControlChannel;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwRxLevel;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwRxLevelFull;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwRxLevelSub;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwRxQuality;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwRxQualityFull;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwRxQualitySub;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwIdleTimeSlot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwTimingAdvance;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwGPRSCellID;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwGPRSBaseStationID;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public uint dwNumBCCH;&lt;br /&gt;
}&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;br /&gt;이어서 기지국 정보를 가져오기 위한 코드를 살펴 봅니다. exception handling 때문에 길어 보이지만, 실제로 뭔가를 수행하는 부분은 5-6줄 밖에 되지 않습니다. 핵심 부분은 빨간 색으로 표시해놨습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #fe8943 1px solid; BORDER-LEFT: #fe8943 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #fedec7; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #fe8943 1px solid; BORDER-RIGHT: #fe8943 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;public static CellTowerInfo GetCellTowerInfo()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IntPtr ril = IntPtr.Zero;&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;&amp;nbsp;&amp;nbsp; using(AutoResetEvent wait = new AutoResetEvent(false))&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; &lt;FONT color=#e31600&gt;ril = Initialize(GetCellTowerInfoResult, wait.Handle);&lt;/FONT&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; &lt;FONT color=#e31600&gt;GetCellTowerInfo(ril);&lt;/FONT&gt;&lt;br /&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; wait for callback.&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; wait.WaitOne();&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; return cellTowerInfo;&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; Deinitialize() will be called in finally block.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (System.Exception)&lt;br /&gt;
&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; toss the exception&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; finally&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&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; if (ril != IntPtr.Zero)&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; &lt;FONT color=#e31600&gt;Deinitialize(ril);&lt;/FONT&gt;&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; catch (System.Exception)&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; //&amp;nbsp; suppress all exceptions here.&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; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;//&amp;nbsp; This will be used as cache.&lt;br /&gt;
//&amp;nbsp; Don&#039;t call GetCellTowerInfo() too frequently.&lt;br /&gt;
static CellTowerInfo cellTowerInfo = null;&lt;br /&gt;
&lt;br /&gt;// callback.&lt;br /&gt;
&lt;FONT color=#e31600&gt;static void GetCellTowerInfoResult(uint resultCode, int hrCommandId, IntPtr pData, uint cbData, IntPtr userParam)&lt;/FONT&gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CellTowerInfo info = new CellTowerInfo();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Marshal.PtrToStructure(pData, info);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; cellTowerInfo = info;&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; tell main thread.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoResetEvent theEvent = new AutoResetEvent(false);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; theEvent.Handle = userParam;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; theEvent.Set();&lt;br /&gt;
}&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
RIL 인터페이스는 API를 호출한다고 바로 결과를 알려주지 않습니다. callback을 통해 asynchronous 하게 통지를 해주는데요. 하지만 함수를 호출해서 사용하는 입장에서는 synchronous 한게 편리합니다. 그걸 처리해주기 위해서 Event 객체를 하나 생성합니다. 나중에 callback에서 이벤트를 raise 해주죠.&lt;br /&gt;
&lt;br /&gt;이 코드에는 버그가 있습니다. &lt;br /&gt;
wait.WaitOne() 을 timeout 없이 무작정 기다리는 버그가 있는데요. 모종의 이유 때문에 callback 함수에서 exception이 발생하게 되면, event가 set 되지 않아 program이 hang 될 것입니다. 그리고 그런 상황은 생각보다 자주 일어날걸요. pData가 null이기만 해도 뻑나니까요. 아마 resultCode 에 따라 null 인 상황이 일어날 수 있을겁니다.&lt;br /&gt;
&lt;br /&gt;저는 위의 코드 전체를 Ril 이라는 static class 에 집어 넣었습니다. 그리고 Ril 클래스를 사용하는 부분의 코드는 아래와 같죠. 이제 정보를 가져오는 부분은 딱 한 줄이면 됩니다. 참 쉽죠?&lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #c1c1c1 1px solid; BORDER-LEFT: #c1c1c1 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px solid; BORDER-RIGHT: #c1c1c1 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&lt;FONT color=#e31600&gt;Ril.CellTowerInfo info = Ril.GetCellTowerInfo();&lt;/FONT&gt;&lt;br /&gt;
if (info != null)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; labelMCC.Text = String.Format(&quot;MCC/MNC = {0} / {1}&quot;, info.dwMobileCountryCode, info.dwMobileNetworkCode);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; labelLAC.Text = String.Format(&quot;LAC = {0}&quot;, info.dwLocationAreaCode);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; labelCellId.Text = String.Format(&quot;CellId = {0}&quot;, info.dwCellID);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; labelUpdate.Text = DateTime.Now.ToString(&quot;yyyy.MM.dd HH:mm:ss&quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-96-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-96-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-96-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>howto</category>
			<category>c#</category>
			<category>HOWTO</category>
			<category>Windows Mobile</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/96</guid>
			<comments>http://blog.michgan.net/entry/%EA%B8%B0%EC%A7%80%EA%B5%AD-%EC%A0%95%EB%B3%B4-%EA%B5%AC%ED%95%98%EA%B8%B0#entry96comment</comments>
			<pubDate>Thu, 28 Jan 2010 00:42:07 +0900</pubDate>
		</item>
		<item>
			<title>[howto] SQLite C# 버전 사용법</title>
			<link>http://blog.michgan.net/entry/SQLite-C-%EB%B2%84%EC%A0%84-%EC%82%AC%EC%9A%A9%EB%B2%95</link>
			<description>&lt;br /&gt;
요즘 모바일용으로 새로운 프로그램을 하나 구상하고 있는데, 데이타베이스 기능이 필수적으로 필요합니다. 물론 MS에서는 &lt;A title=&quot;[http://www.microsoft.com/downloads/details.aspx?FamilyID=38ed2670-a70a-43b3-87f3-7ab67b56cbf2&amp;amp;displaylang=en]로 이동합니다.&quot; href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyID=38ed2670-a70a-43b3-87f3-7ab67b56cbf2&amp;amp;displaylang=en&quot; target=_blank&gt;SQL Server Compact 3.5 for Windows Mobile&lt;/A&gt;을 공개하고 있지만, 핸드폰에 저장된 데이타베이스 파일을 PC로 옮겨서 사용하는 상황을 생각해보면, 핸드폰의 데이타와 동기화하기 위한 MS SQL Server 까지 필요하게 되더군요. 그럴 바엔 공개 라이브러리를 택하는 편이 낫겠다 싶어 조금 찾아보았습니다.&lt;br /&gt;
&lt;br /&gt;그러다 SQLite 라는 라이브러리를 발견하였습니다. 속도가 얼마나 빠른지는 모르겠지만, 완전히 public domain으로 공개된 소스라 제 마음에 쏙 들더군요. 다운 받을 수 있는 경로는 &lt;A href=&quot;http://www.sqlite.org/&quot;&gt;http://www.sqlite.org&lt;/A&gt; 입니다. 원 제작자들은 C 함수로 API를 만들어 놨습니다만, 훌륭한 사람들이 C# 용으로도 개발해 놨더군요. 이것 역시 public domain으로 공개되어 있습니다. &lt;A href=&quot;http://sqlite.phxsoftware.com/&quot;&gt;http://sqlite.phxsoftware.com/&lt;/A&gt;&amp;nbsp;에서 다운 받을 수 있습니다.&lt;br /&gt;
&lt;br /&gt;제가 테스트해본 쪽은 후자쪽입니다. 인스톨 파일을 다운 받아 설치하고, C# 프로젝트를 하나 만든 후에 Reference에 System.Data.SQLite 를 추가해줍니다.&lt;br /&gt;
&lt;br /&gt;아래는 테스트해볼 겸해서 직접 짜본 코드입니다. &lt;br /&gt;
&lt;br /&gt;데이타 베이스 파일을 하나 만들고, table을 생성한 뒤에, C:\windows 밑에 있는 파일 목록을 집어 넣습니다. 이후에 1024 ~ 1048576 의 크기를 갖는 파일을 SELECT 하는데, ORDER BY Size로 정렬합니다.&lt;br /&gt;
&lt;br /&gt;일단 이 정도만 되더라도 모바일에서 쓰기엔 괜찮을거 같다는 생각이 듭니다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px solid; BORDER-LEFT: #9fd331 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px solid; BORDER-RIGHT: #9fd331 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Data.SQLite;&lt;br /&gt;
using System.IO;&lt;br /&gt;
&lt;br /&gt;namespace sqlitecs&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; class Program&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&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; //&amp;nbsp; Creating a database.&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; SQLiteConnection.CreateFile(&quot;test.db&quot;);&lt;br /&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; Open the database.&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; using (var connection = new SQLiteConnection(&quot;Data Source=test.db&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; {&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; connection.Open(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&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; {&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; Create table.&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; using (SQLiteCommand command = connection.CreateCommand())&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; {&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; command.CommandText = &quot;CREATE TABLE File (Name text, Size bigint, Modified datetime);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command.ExecuteNonQuery();&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; }&lt;br /&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;nbsp; Insert datas.&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; using (SQLiteCommand command = connection.CreateCommand())&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; {&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; command.CommandText = &quot;INSERT INTO File VALUES (?,?,?);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQLiteParameter p1 = new SQLiteParameter();&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; SQLiteParameter p2 = new SQLiteParameter();&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; SQLiteParameter p3 = new SQLiteParameter();&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; command.Parameters.Add(p1);&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; command.Parameters.Add(p2);&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; command.Parameters.Add(p3);&lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (var fi in (new DirectoryInfo(&quot;c:\\Windows&quot;)).GetFiles())&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; {&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; p1.Value = fi.Name;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; p2.Value = fi.Length;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; p3.Value = fi.LastWriteTimeUtc;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; command.ExecuteNonQuery();&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; }&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; }&lt;br /&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;nbsp; Select files by its size between 1k and 1M&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; using (SQLiteCommand command = connection.CreateCommand())&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; {&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; command.CommandText = &quot;SELECT * from File where Size &amp;gt;= 1024 and Size &amp;lt;= 1048576 order by Size;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (SQLiteDataReader reader = command.ExecuteReader())&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; {&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(reader.HasRows &amp;amp;&amp;amp; reader.Read())&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&quot;{0}, {1}, {2}&quot;, reader.GetString(0), reader.GetInt64(1), reader.GetDateTime(2));&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;&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;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; finally&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; {&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; connection.Close();&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; }&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; }&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; }&lt;br /&gt;
}&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-95-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-95-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-95-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>howto</category>
			<category>c#</category>
			<category>HOWTO</category>
			<category>SQLite</category>
			<category>Tutorial</category>
			<category>windowsmobile</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/95</guid>
			<comments>http://blog.michgan.net/entry/SQLite-C-%EB%B2%84%EC%A0%84-%EC%82%AC%EC%9A%A9%EB%B2%95#entry95comment</comments>
			<pubDate>Wed, 27 Jan 2010 01:52:10 +0900</pubDate>
		</item>
		<item>
			<title>인코딩 변환 라이브러리 속도 테스트</title>
			<link>http://blog.michgan.net/entry/%EC%9D%B8%EC%BD%94%EB%94%A9-%EB%B3%80%ED%99%98-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%86%8D%EB%8F%84-%ED%85%8C%EC%8A%A4%ED%8A%B8</link>
			<description>직접 만든 인코딩 변환 라이브러리의 속도를 테스트해보았습니다. MBCS에서 UNICODE로 혹은 그 반대로 매핑하는 2차원 배열을 만들어 놓고 참조하는 방식입니다. 테이블 데이타를 static 형식으로 코드에 삽입시켰더니, exe 파일이 400-500 kb 정도가 되는군요. (코드 페이지 = 932, 936, 949, 950)&lt;br /&gt;
&lt;br /&gt;꽁수를 안 쓰고 2바이트 매핑 테이블을 그대로 탑재시키면, 1M 정도였을 겁니다. 지금은 바이트 범위를 조사해서 필요 없는 부분은 저장하지 않는 방식을 사용합니다. gz 스트림으로 압축시키면 실행 파일의 크기를 더 줄일 수 있기(333k에서 256k로)는 한데, 용량 감소폭 대비 번거로움을 따져보면 그냥 쓰는게 나을거 같습니다.&lt;br /&gt;
&lt;br /&gt;아무튼 직접 만든 인코딩 변환 라이브러리의 속도를 비교해봅시다. 비교 대상은 System.Text.Encoding 객체입니다. libiconv도 하고 싶으나 솔직히 귀찮습니다.&lt;br /&gt;
&lt;br /&gt;400kb 정도 되는 한글 텍스트 파일(243943 유니코드 글자)을 가지고 MBCS로 인코딩하고 디코딩하는 속도를 재었습니다. 5번 재어서 평균 냈고 사용한 기종은 소니 엑스페리아 X1, Windows 6.1 한글판입니다. 컴파일러는 VisualStudio 2008 sp1 + Windows Mobile 6 SDK 입니다.&lt;br /&gt;
&lt;br /&gt;단위는 msec.&lt;br /&gt;

&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=490 bgColor=#ffffff&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;내거 Enc&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;내거 Dec&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;C# Enc&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;C# Dec&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp;Unicode&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp; 19&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;19&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp; 25&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp; 25&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp;UnicodeBE&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp; 49&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;51&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;132&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp; 72&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp;UTF-8&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp; 60&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;86&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp; 88&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;134&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp;CP949&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;160&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;77&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;214&amp;nbsp;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-BOTTOM: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-RIGHT: #dadada 1px solid&quot; width=&quot;20%&quot;&gt;&amp;nbsp; 52&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
Encoding: Unicode -&amp;gt; MBCS. 즉, WideCharToMultiByte&lt;br /&gt;
Decoding: MBCS -&amp;gt; Unicode, 즉, MultiByteToWideChar&lt;br /&gt;
&lt;br /&gt;의외로 MS가 제공하는 라이브러리가 느렸군요. &lt;br /&gt;
&lt;br /&gt;생각보다 C#이 빠르다는 사실을 알 수 있습니다. 물론 빠른 속도를 내기 위해서 코드를 좀 간결하게 바꾸는 작업을 진행하긴 했지만 말입니다. 이것이 바로 JIT의 힘입니다. 좋군요.&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-93-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-93-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-93-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>howto</category>
			<category>c#</category>
			<category>encoding</category>
			<category>library</category>
			<category>text</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/93</guid>
			<comments>http://blog.michgan.net/entry/%EC%9D%B8%EC%BD%94%EB%94%A9-%EB%B3%80%ED%99%98-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%86%8D%EB%8F%84-%ED%85%8C%EC%8A%A4%ED%8A%B8#entry93comment</comments>
			<pubDate>Wed, 25 Nov 2009 00:00:00 +0900</pubDate>
		</item>
		<item>
			<title>[BookWorm] bookworm 2 &lt;뭐 바꿨는지 기억 안 난다&gt; 버전</title>
			<link>http://blog.michgan.net/entry/BookWorm-bookworm-2-%EB%AD%90-%EB%B0%94%EA%BF%A8%EB%8A%94%EC%A7%80-%EA%B8%B0%EC%96%B5-%EC%95%88-%EB%82%9C%EB%8B%A4-%EB%B2%84%EC%A0%84</link>
			<description>&lt;br /&gt;
버전: 2.0.3612.4006&lt;br /&gt;
날짜 제한 있습니다. 올해 12월 31일까지 동작합니다.&lt;br /&gt;
&lt;br /&gt;실행 환경: Windows Mobile 6 이상, .net compact framework 3.5 설치 필요&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;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/cfile8.uf@143EAE0B4B06D05002AC10.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; 20091121.zip&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
ps..&lt;br /&gt;
프로그램이 뜨는데 엄청 오래 걸리는데요. .net framework을 사용한 프로그램의 특징인거 같습니다. 어떻게 더 줄이는 방법 아시는 분 있으시면 리플 좀. 굽신굽신.&lt;br /&gt;
전에 마이크로소프트의 서진호 님께 여쭤볼 기회가 있었는데, 별로 뾰족한 방법은 없는거 같기도 하고... (Windows Mobile 6.5에서조차 오래 걸리면 어쩌란 말이냐...)&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-94-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-94-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-94-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/94</guid>
			<comments>http://blog.michgan.net/entry/BookWorm-bookworm-2-%EB%AD%90-%EB%B0%94%EA%BF%A8%EB%8A%94%EC%A7%80-%EA%B8%B0%EC%96%B5-%EC%95%88-%EB%82%9C%EB%8B%A4-%EB%B2%84%EC%A0%84#entry94comment</comments>
			<pubDate>Sat, 21 Nov 2009 02:23:19 +0900</pubDate>
		</item>
		<item>
			<title>인코딩 변환 라이브러리 만들기</title>
			<link>http://blog.michgan.net/entry/%EC%9D%B8%EC%BD%94%EB%94%A9-%EB%B3%80%ED%99%98-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
			<description>&lt;br /&gt;
프로젝트를 진행하다 보면 텍스트 인코딩을 변환해야하는 경우가 있습니다. 일반적으로 win32 환경이라면 MultiByteToWideChar() 이라는 함수를 사용해서 유니코드 문자열로 변환하게 됩니다. 리눅스나&amp;nbsp;스크립트 언어&amp;nbsp;환경이라면 iconv() 함수를 사용하게 되겠죠.&lt;br /&gt;
&lt;br /&gt;문제는 win32 환경인데 MultiByteToWideChar() 함수가&amp;nbsp;통하지 않는 환경입니다. 예를 들어 PocketPC 에서는 OS 언어와 UTF-8 인코딩에 대한 변환만 지원할 뿐입니다. 이럴 경우에는 어떻게 하느냐? 가 이번 포스트의 주제입니다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
첫번째 방법은 제가 작년에 사용한 &quot;&lt;A title=&quot;[http://blog.michgan.net/entry/win32-libiconv-%ED%8F%AC%ED%8C%85%ED%95%98%EA%B8%B0]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/win32-libiconv-%ED%8F%AC%ED%8C%85%ED%95%98%EA%B8%B0&quot; target=_blank&gt;libiconv 라이브러리 포팅하기&lt;/A&gt;&quot;입니다. 말 그대로 win32 환경으로 포팅하는 방법이죠. 원래 libiconv는 win32 네이티브 컴파일을 지원했기 때문에 포팅하기가 생각보다 쉽습니다. 관심 있으신 분들은 해당 포스트로 가셔서 보시기 바랍니다.&lt;br /&gt;
&lt;br /&gt;두번째 방법은 지금 제가 적용하고 있는 방법입니다.&amp;nbsp;&quot;내 프로젝트에는 GPL처럼 독이 묻은 라이센스를 포함할 수 없다!&quot;라고 생각하신다면 직접 만들어 쓰시는 수 밖에 없겠죠. libiconv의 경우에는 다행히 LGPL 라이센스이긴 합니다만, 그래도 왠지&amp;nbsp;고기 먹고 이를&amp;nbsp;닦지 않은 듯 개운하지는 않습니다.&lt;br /&gt;
&lt;br /&gt;직접 만든다고 했을 때 가장 문제가 되는 점은 MBCS 문자에서 유니코드 문자로의 코드 매핑을 알아내는 점입니다. 이 테이블만 구할 수 있다면 텍스트 변환 라이브러리의 작성은&amp;nbsp;거의 70% 정도가 끝났다고 볼 수 있습니다.&lt;br /&gt;
&lt;br /&gt;그리고 다행히도 코드 변환 테이블이 인터넷에 공개되어 있습니다. 무려 마이크로소프트 사가 제공한 정보입니다. 아래의 링크는 cp949(=한국어)에 대한 매핑 테이블입니다. cp932(=일본어)나 중국어도 쉽게 찾을 수 있습니다.&lt;br /&gt;
&lt;A href=&quot;http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT&quot;&gt;http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;테이블은 일관성 있는 규칙으로 작성되어 있기 때문에 이것을 읽어들이는 유틸은 손쉽게 작성할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;다음은 위 자료를 읽기 위한 간단한 perl 스크립트입니다. 이 세상에서 텍스트 파일을 이렇게 간단하게 파싱할 수 있는 언어는 perl 밖에 없을거 같네요.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #fe8943 1px solid; BORDER-LEFT: #fe8943 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #fedec7; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #fe8943 1px solid; BORDER-RIGHT: #fe8943 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;#!perl -w&lt;br /&gt;
&lt;br /&gt;open(X, &quot;&amp;lt;cp949.txt&quot; );&lt;br /&gt;
my @x = grep {!/^\#/} &amp;lt;X&amp;gt;;&lt;br /&gt;
close( X );&lt;br /&gt;
chomp( @x );&lt;br /&gt;
&lt;br /&gt;foreach my $y ( @x )&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; my @a = split( /\t/, $y );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $#a == 2 )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;%s -&amp;gt; %s\n&quot;, $a[0], $a[1] );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
cp949 에 대해 적용해보면 17304 개의 매핑을 얻을 수 있습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/1104ED0C4AFAE10934AE91&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;cfile9.uf@1104ED0C4AFAE10934AE91.png&quot; height=&quot;63&quot; width=&quot;350&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
이 데이타를 토대로 1:1 매핑하는 코드를 작성하는 것은 별로 어렵지 않을 것입니다. &lt;br /&gt;
&lt;br /&gt;C# 으로 cp932, 936, 949, 950 에 대해 MBCS to UNICODE 매핑 테이블을 작성한 후에 컴파일 하면 대충 160kb 정도의 바이너리가 만들어집니다.&lt;br /&gt;
&lt;br /&gt;이렇게 만든 변환 코드와 win32 API와의 속도 차이에 대해서는 다음에 기회가 있으면 포스팅하도록 하지요.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-91-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-91-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-91-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>howto</category>
			<category>encoding</category>
			<category>libiconv</category>
			<category>Unicode</category>
			<category>한글</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/91</guid>
			<comments>http://blog.michgan.net/entry/%EC%9D%B8%EC%BD%94%EB%94%A9-%EB%B3%80%ED%99%98-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry91comment</comments>
			<pubDate>Thu, 12 Nov 2009 00:43:12 +0900</pubDate>
		</item>
		<item>
			<title>[BookWorm] bookworm 2 &lt;그럭저럭 돈다&gt; 버전</title>
			<link>http://blog.michgan.net/entry/BookWorm-bookworm-2-%EA%B7%B8%EB%9F%AD%EC%A0%80%EB%9F%AD-%EB%8F%88%EB%8B%A4-%EB%B2%84%EC%A0%84</link>
			<description>버전: 2.0.3574.282 &lt;br /&gt;
개인적으로 알파 버전에도 못 미친다 생각하고 있으므로, 날짜 제한을 걸었습니다. 이 버전은 10월 30일까지 동작합니다. &lt;br /&gt;
&lt;br /&gt;
실행 환경: Windows Mobile 6 이상, .net compact framework 3.5 설치 필요&lt;br /&gt;
&lt;br /&gt;
수십분 정도 사용하면서 메모리 관련 문제가 없나 체크해보기 위한 버전입니다.&lt;br /&gt;
한글 버전의 Windows Mobile 핸드폰/PDA에서 UTF-8이나 EUC-KR로 인코딩한 한글 문서의 경우에는 그럭저럭 사용하실 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
페이지 넘김은 화면 터치에 의한 스크롤, 위 아래 키로만 제한 됩니다. 옴니아 사용자들은 방향키가 연발로 입력되는 관계로, 아직까지 쓰기 불편하실겁니다.&lt;br /&gt;
&lt;br /&gt;
&quot;내가 좀 한 PDA하지&quot; 라던지 &quot;내가 좀 한 스마트폰하지&quot; 하시는 분들만 써주세요.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/cfile29.uf@1132DA0F4AD49A395D247D.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; Bookworm2.zip&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
다음 버전에는 대망의 단어 선택을 넣어보지요.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-90-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-90-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-90-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>bookworm</category>
			<category>BookWorm2</category>
			<category>PocketPC</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/90</guid>
			<comments>http://blog.michgan.net/entry/BookWorm-bookworm-2-%EA%B7%B8%EB%9F%AD%EC%A0%80%EB%9F%AD-%EB%8F%88%EB%8B%A4-%EB%B2%84%EC%A0%84#entry90comment</comments>
			<pubDate>Wed, 14 Oct 2009 00:23:38 +0900</pubDate>
		</item>
		<item>
			<title>[BookWorm] bookworm 2 &lt;어쨌든 돈다&gt; 버전</title>
			<link>http://blog.michgan.net/entry/BookWorm-bookworm-2-%EC%96%B4%EC%A8%8C%EB%93%A0-%EB%8F%88%EB%8B%A4-%EB%B2%84%EC%A0%84</link>
			<description>bookworm 2 &amp;lt;어쨌든 돈다&amp;gt; 버전입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px solid rgb(254, 222, 199); padding: 10px; background-color: rgb(254, 222, 199);&quot; class=&quot;txc-textbox&quot;&gt;
알파 버전에도 못 미치는 버전입니다. 되는 기능보다 안 되는 기능이 더 많습니다. 페이지 넘김은 터치-스크롤만 가능합니다.&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/cfile23.uf@19352A0C4ACCBC3465F2B9.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; BookwormWm6.zip&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
실행 환경: Windows Mobile 6 이상, .net compact framework 3.5 설치 필요&lt;br /&gt;
&lt;br /&gt;
실제 기계에서 로딩 속도를 확인하기 위해서 만들어봤습니다. 일단 목표는 달성한거 같네요.&lt;br /&gt;
&lt;br /&gt;
아직 쓸만하지 않기 때문에 동작 기간에 제한을 둡니다. 2009년 10월 21일 23시 59분까지 동작합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ps...&lt;br /&gt;
설치법을 모르시거나 .net compact framework 3.5가 뭔지 모르시는 분들은 당분간 예전 버전을 사용하시는걸 권합니다. 이거는 안 되는게 더 많은 버전입니다. ㅈㅅㅈㅅ&lt;br /&gt;
&lt;br /&gt;ps (2009.10.14):&lt;br /&gt;
새 버전을 공개하였으므로 댓글, 트랙백 막습니다.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-89-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-89-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-89-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>BookWorm2</category>
			<category>PocketPC</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/89</guid>
			<comments>http://blog.michgan.net/entry/BookWorm-bookworm-2-%EC%96%B4%EC%A8%8C%EB%93%A0-%EB%8F%88%EB%8B%A4-%EB%B2%84%EC%A0%84#entry89comment</comments>
			<pubDate>Thu, 08 Oct 2009 01:12:18 +0900</pubDate>
		</item>
		<item>
			<title>[BookWorm] BookWorm2 개발 시작</title>
			<link>http://blog.michgan.net/entry/BookWorm-BookWorm2-%EA%B0%9C%EB%B0%9C-%EC%8B%9C%EC%9E%91</link>
			<description>BookWorm2를 개발하기 시작했습니다.&lt;br /&gt;
&lt;br /&gt;
BookWorm의 버전업이 아니라 2가 붙은 이유는 개발 언어를 바꿨기 때문입니다. 지난번까지는 MFC를 사용했으나, 이제부터는 .net CF를 사용합니다. 언어가 바뀌면 모든걸 새로 만들어야 합니다.&lt;br /&gt;
&lt;br /&gt;
이번 프로젝트의 목표는 다음과 같습니다.&lt;br /&gt;
&amp;nbsp;* 단어 선택 가능&lt;br /&gt;
&amp;nbsp;* 2초 안에 로딩&lt;br /&gt;
&lt;br /&gt;
기존에 되던 기능 재구현. (C++ 에서 C#으로 바꿔야 함)&lt;br /&gt;
&amp;nbsp;* Unicode 지원 (폰트 변경, iconv, chardet 등)&lt;br /&gt;
&amp;nbsp;* zip 파일에서 읽기 (zlib 혹은 7z lzma)&lt;br /&gt;
&lt;br /&gt;
일단 추석까지를 목표로 작업(2초 안에 로딩)하고 있습니다.&lt;br /&gt;
&lt;br /&gt;
ps...&lt;br /&gt;
글을 대충 썼더니 오해하시는 분이 있으셔서 글을 고칩니다.&lt;br /&gt;
추석까지 만들어질 버전은 기존 BookWorm의 모든 기능이 다 구현되는게 아니라, 2초 로딩이 진짜로 되는지 체크해보기 위한 프로토타입의 성격입니다. 위에 적어둔 목표는 프로젝트의 목표이구요. 기존에 있던 기능을 다 구현하려면 좀 기다리셔야할 듯.&lt;br /&gt;
&lt;br /&gt;
ps (2009.10.14):&lt;br /&gt;
댓글, 트랙백 막습니다. 최신 글로 이동해주세요. (&lt;a title=&quot;[http://blog.michgan.net]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://blog.michgan.net&quot;&gt;http://blog.michgan.net&lt;/a&gt;)&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-88-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-88-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-88-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>bookworm</category>
			<category>BookWorm2</category>
			<category>PocketPC</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/88</guid>
			<comments>http://blog.michgan.net/entry/BookWorm-BookWorm2-%EA%B0%9C%EB%B0%9C-%EC%8B%9C%EC%9E%91#entry88comment</comments>
			<pubDate>Tue, 08 Sep 2009 19:28:35 +0900</pubDate>
		</item>
		<item>
			<title>[Tango] 변경 사항 (0.0.1 - 0.0.3)</title>
			<link>http://blog.michgan.net/entry/Tango-%EB%B3%80%EA%B2%BD-%EC%82%AC%ED%95%AD-001-002</link>
			<description>&lt;p&gt;이 글은 Tango의 변경 사항을 기록하기 위함입니다.&lt;/p&gt;

&lt;p&gt;0.0.4 (미공개; 2009.09.11)&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;BUGFIX: list 스크롤 시에 방향 뒤집힌거 수정&lt;br/&gt;
&amp;nbsp;*&amp;nbsp;Study / Quiz 모드 개선 중&lt;br/&gt;
&lt;br /&gt;
0.0.3 (미공개)&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;단어장의 list를 확인할 수 있도록.&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;Study나 Quiz 모드에서 정렬하지 않는 옵션 추가&lt;br /&gt;
&lt;br /&gt;
0.0.2&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;기존 단어장에 새로 추가된 단어를 업데이트하는 기능&lt;br /&gt;
&amp;nbsp;* Study, Quiz 모드에서 단어를 보는 순서 설정 가능&lt;br /&gt;
&lt;br /&gt;
0.0.1 - 첫 공개&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-87-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-87-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-87-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>PocketPC</category>
			<category>Tango</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/87</guid>
			<comments>http://blog.michgan.net/entry/Tango-%EB%B3%80%EA%B2%BD-%EC%82%AC%ED%95%AD-001-002#entry87comment</comments>
			<pubDate>Sun, 06 Sep 2009 21:35:37 +0900</pubDate>
		</item>
		<item>
			<title>[Tango] 0.0.2</title>
			<link>http://blog.michgan.net/entry/Tango-002</link>
			<description>&lt;div style=&quot;border: 1px solid rgb(254, 137, 67); padding: 10px; background-color: rgb(254, 222, 199);&quot; class=&quot;txc-textbox&quot;&gt;
이 버전은 테스트 버전입니다.&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
라이센스: 이 버전은 FreeWare&lt;br /&gt;
사용 환경: Windows Mobile 에 .net compact framework 2.0 필요&lt;br /&gt;
(엑스페리아나 옴니아는&amp;nbsp;그냥 실행될 것임)&lt;br /&gt;
&lt;br /&gt;
사용법이나 스크린샷: &lt;a href=&quot;http://blog.michgan.net/82&quot;&gt;http://blog.michgan.net/82&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
다운로드: &lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/cfile5.uf@1979C31D4AA3AC076E08C5.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; 0.0.2.zip&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
압축을 푼 후 exe와 dll을 모두 PDA(핸드폰)으로 옮기고 실행하면 됨. &lt;br /&gt;
레지스트리를 건드리지 않으므로, 필요 없으면 그냥 지우면 됨.&lt;br /&gt;
&lt;br /&gt;
변경 사항: &lt;a title=&quot;[http://blog.michgan.net/86]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://blog.michgan.net/86&quot;&gt;http://blog.michgan.net/86&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
테스트 버전입니다.&lt;br /&gt;
본인이 직접 사용하면서 메뉴 구성이나 사용 편의성 따위를 체크해보고 있습니다. 의견 있으시면 리플 남겨 주시기 바랍니다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-86-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-86-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-86-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>PocketPC</category>
			<category>Tango</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/86</guid>
			<comments>http://blog.michgan.net/entry/Tango-002#entry86comment</comments>
			<pubDate>Sun, 06 Sep 2009 21:32:04 +0900</pubDate>
		</item>
		<item>
			<title>[Tango] 0.0.1</title>
			<link>http://blog.michgan.net/entry/Tango-001</link>
			<description>&lt;br /&gt;
라이센스: 이 버전은 FreeWare&lt;br /&gt;
사용 환경: Windows Mobile 에 .net compact framework 2.0 필요&lt;br /&gt;
(엑스페리아나 옴니아는&amp;nbsp;그냥 실행될 것임)&lt;br /&gt;
&lt;br /&gt;
사용법이나 스크린샷: &lt;a href=&quot;http://blog.michgan.net/82&quot;&gt;http://blog.michgan.net/82&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
다운로드: &lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/cfile23.uf@204680184A96312BA758A1.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; tango-0.0.1.zip&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
압축을 푼 후 exe와 dll을 모두 PDA(핸드폰)으로 옮기고 실행하면 됨. &lt;br /&gt;
레지스트리를 건드리지 않으므로, 필요 없으면 그냥 지우면 됨.&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-85-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-85-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-85-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>Tango</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/85</guid>
			<comments>http://blog.michgan.net/entry/Tango-001#entry85comment</comments>
			<pubDate>Thu, 27 Aug 2009 16:09:41 +0900</pubDate>
		</item>
		<item>
			<title>[Tango] 사용 설명서 - 3 학습 모드와 문제 풀이 모드</title>
			<link>http://blog.michgan.net/entry/Tango-%EC%82%AC%EC%9A%A9-%EC%84%A4%EB%AA%85%EC%84%9C-3-%ED%95%99%EC%8A%B5-%EB%AA%A8%EB%93%9C%EC%99%80-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4-%EB%AA%A8%EB%93%9C</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #9fd331 3px double; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 3px double; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #9fd331 3px double; PADDING-TOP: 10px; BORDER-BOTTOM: #9fd331 3px double; BACKGROUND-COLOR: #e7fdb5&quot;&gt;이 포스트는 Windows Mobile 기기용의 학습 프로그램, Tango의 사용법을 설명합니다. &lt;A title=&quot;[http://blog.michgan.net/entry/Tango-사용-설명서]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/Tango-사용-설명서&quot; target=_blank&gt;사용 설명서의 첫 페이지&lt;/A&gt;나 &lt;A title=&quot;[http://blog.michgan.net/tag/Tango]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/tag/Tango&quot; target=_blank&gt;최신 버전을 다운&lt;/A&gt; 받으려 했던 것이 아니었나요?&lt;/DIV&gt;&lt;br /&gt;
Tango에는 학습 모드와 문제 풀이 모드가 존재합니다.&lt;br /&gt;
&lt;br /&gt;초기 화면에서 단어장을 선택해 들어가면 단어장에 관한 세부 메뉴를 볼 수 있습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/151E3F214A9555FC2B6B70&quot; alt=&quot;&quot; filemime=&quot;image/png&quot; filename=&quot;tepslist.png&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
대부분이 아직 구현이 되어 있지 않습니다. &lt;br /&gt;
&lt;br /&gt;Study와 Quiz만 구현이 되어 있는데, Study 는 학습을 위한 모드이고 Quiz는 테스트를 위한 모드입니다. 테스트 모드에서는 문제별로 맞은 회수와 틀린 회수를 셉니다.&lt;br /&gt;
&lt;br /&gt;어떤 모드를 선택하든 다음과 같은 화면이 뜹니다. 단어장의 경우에는 &quot;뜻을 물어보고 단어를 맞추거나&quot;, &quot;단어를 물어보고 뜻을 맞추는&quot; 행위를 할 것이므로&amp;nbsp;무엇을 물어보게 할지&amp;nbsp;결정할 수 있습니다.&lt;br /&gt;
나머지 항목은 조건에&amp;nbsp;따라 문제(단어)를 제외할 것인지 말 것인지를 결정하는데 사용합니다.&lt;br /&gt;
&lt;FONT color=#e31600&gt;(todo: 어떤 순서로 정렬할 것인지)&lt;/FONT&gt;&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/18216A214A9555FC2FA7B6&quot; alt=&quot;&quot; filemime=&quot;image/png&quot; filename=&quot;option.png&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;/div&gt;하지만 현재는 Quiz type을 제외하고는 구현이 되어 있지 않습니다.&lt;br /&gt;
&lt;br /&gt;이후에는 문제를 풀면서 틀렸는지 맞았는지 체크하시면 됩니다.&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-84-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-84-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-84-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>Tango</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/84</guid>
			<comments>http://blog.michgan.net/entry/Tango-%EC%82%AC%EC%9A%A9-%EC%84%A4%EB%AA%85%EC%84%9C-3-%ED%95%99%EC%8A%B5-%EB%AA%A8%EB%93%9C%EC%99%80-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4-%EB%AA%A8%EB%93%9C#entry84comment</comments>
			<pubDate>Thu, 27 Aug 2009 00:38:32 +0900</pubDate>
		</item>
		<item>
			<title>[Tango] 사용 설명서 - 2 Google 접속하기</title>
			<link>http://blog.michgan.net/entry/Tango-%EC%82%AC%EC%9A%A9-%EC%84%A4%EB%AA%85%EC%84%9C-2-Google-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #9fd331 3px double; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 3px double; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #9fd331 3px double; PADDING-TOP: 10px; BORDER-BOTTOM: #9fd331 3px double; BACKGROUND-COLOR: #e7fdb5&quot;&gt;이 포스트는 Windows Mobile 기기용의 학습 프로그램, Tango의 사용법을 설명합니다. &lt;A title=&quot;[http://blog.michgan.net/entry/Tango-사용-설명서]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/Tango-사용-설명서&quot; target=_blank&gt;사용 설명서의 첫 페이지&lt;/A&gt;나 &lt;A title=&quot;[http://blog.michgan.net/tag/Tango]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/tag/Tango&quot; target=_blank&gt;최신 버전을 다운&lt;/A&gt; 받으려 했던 것이 아니었나요?&lt;/DIV&gt;&lt;br /&gt;
이 프로그램의 핵심인 Google에 접속해서 단어장을 다운 받는 방법을 알아 봅시다.&lt;br /&gt;
&lt;br /&gt;초기 화면에서 &lt;STRONG&gt;Google docs에서 다운 받기&lt;/STRONG&gt;를 선택합니다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/1747511F4A9552A63DCFCB&quot; alt=&quot;&quot; filemime=&quot;image/png&quot; filename=&quot;mainmenu.png&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
암호를 물어보는데, gmail 계정을 입력해주면 됩니다. 확인을 눌러주면 Google 서버에 접속해서 스프레드쉿의 목록을 받아옵니다.&lt;br /&gt;
&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/1253F81F4A9552A51A7DDE&quot; alt=&quot;&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/1659AD1F4A9552A518F7A7&quot; alt=&quot;&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;성공적으로 로그인이 되었다면, 다음과 같이 스프레드쉿 목록을 볼 수 있습니다. 단어장에 해당하는 항목을 선택해주세요.&lt;br /&gt;
&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/1647871F4A9552A630D3E3&quot; alt=&quot;&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/205B8A1F4A9552A6239640&quot; alt=&quot;&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;Save를 클릭하면 단어장을 저장하게 되고, 초기 화면에서 선택할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
구글 스프레드쉿은 &lt;A href=&quot;http://docs.google.com/&quot;&gt;http://docs.google.com&lt;/A&gt; 에 접속하시면 사용할 수 있습니다. 단어장을 만들 때에는 다음의 규칙을 지키셔야 합니다.&lt;br /&gt;
&lt;br /&gt;제일 첫 행에는 각 열에 어떤 데이타가 담겨 있는지를 표시합니다. 일반적인 단어장처럼 단어와 뜻만을 기록한다면 다음의 그림처럼 정리합니다.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile26.uf.tistory.com/image/191A46214A95542A5123E5&quot; alt=&quot;&quot; filemime=&quot;image/png&quot; filename=&quot;wordlist.png&quot; height=&quot;486&quot; width=&quot;396&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
첫 행에 word와 meaning이라고 되어 있는 것이 보이시죠? &lt;br /&gt;
저렇게 정리해두면 Tango 가 &quot;아 이건 단어장이구나&quot;하고 알아먹고 단어장으로 만들어줍니다.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
단어장 외에 어떤 필드가 더 있는지는 다음번 사용 설명서를 참고하시기 바랍니다.&lt;br /&gt;
&lt;FONT color=#e31600&gt;(TODO: 링크 추가)&lt;/FONT&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-83-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-83-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-83-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>Google</category>
			<category>Tango</category>
			<category>todo</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/83</guid>
			<comments>http://blog.michgan.net/entry/Tango-%EC%82%AC%EC%9A%A9-%EC%84%A4%EB%AA%85%EC%84%9C-2-Google-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0#entry83comment</comments>
			<pubDate>Thu, 27 Aug 2009 00:18:46 +0900</pubDate>
		</item>
		<item>
			<title>[Tango] 사용 설명서 - 1</title>
			<link>http://blog.michgan.net/entry/Tango-%EC%82%AC%EC%9A%A9-%EC%84%A4%EB%AA%85%EC%84%9C</link>
			<description>Tango 는 Windows Mobile 이 깔려 있는 스마트폰(엑스페리아, 옴니아 등)에서 동작하는 프로그램으로, 주로 단어를 학습할 때 사용합니다. 하지만 그림이나 음악이 포함되지 않은 객관식 문제를 묻고 답할 수 있도록 구현하였기 때문에 일반적인 플래쉬카드 프로그램보다는 사용 범위가 조금 더 넓습니다. 
&lt;DIV&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV&gt;본 프로그램의 이름은 Tango로, 일본어로 단어를 의미하는 単語（たんご）에서 가져왔습니다. 유니코드로 입출력을 하기 때문에 일본어 단어장으로 활용하여도 문제가 없습니다.&amp;nbsp;&lt;SPAN class=Apple-style-span style=&quot;COLOR: rgb(43,132,0)&quot;&gt;주의! 같은 스펠링의 영어 단어 tango가 아닙니다. 미국 사투리로 혀를 잔뜩 굴리며 탱~고라 읽으시면 안 됩니다. 어디까지나 단고입니다.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;Tango는&amp;nbsp;단어장을&amp;nbsp;Google docs에서 가져옵니다. 사용자 입장에서는 난해한 편집 태그를 익힐 필요가 없고, 귀찮게 백업을 할 필요도 없게 됩니다. 또한 구글 앱스를 사용함으로써 전세계 어디에서도 단어장을 쉽고 빠르게 편집할 수 있습니다.&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
Tango는 .net compact framework 2.0 에서 동작합니다.&lt;br /&gt;
&lt;br /&gt;&lt;/DIV&gt;
&lt;DIV&gt;초기 화면은 아래와 같습니다. 이제는 식상할 정도로 많이 본 ipod/iphone의 인터페이스입니다.&lt;/DIV&gt;
&lt;DIV&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/160CBC224A954FDB0BE392&quot; alt=&quot;&quot; filemime=&quot;image/png&quot; filename=&quot;mainmenu.png&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;/div&gt;사용법 역시 iphone을 따라서 하시면 됩니다. 드래그해서 리스트를 탐색하고, 원하는 것을 클릭하면 됩니다. 참 쉽죠?&lt;br /&gt;
&lt;br /&gt;이어서 다음과 같은 사용 설명서를 작성해두었습니다.&lt;br /&gt;
&amp;nbsp; &lt;A title=&quot;[http://blog.michgan.net/entry/Tango-사용-설명서-2-Google-접속하기]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/Tango-사용-설명서-2-Google-접속하기&quot; target=_blank&gt;2 Google 접속하기&lt;/A&gt;&lt;br /&gt;
&amp;nbsp; &lt;A title=&quot;[http://blog.michgan.net/entry/Tango-사용-설명서-3-학습-모드와-문제-풀이-모드]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/Tango-사용-설명서-3-학습-모드와-문제-풀이-모드&quot; target=_blank&gt;3 학습하기&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-82-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-82-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-82-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>Tango</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/82</guid>
			<comments>http://blog.michgan.net/entry/Tango-%EC%82%AC%EC%9A%A9-%EC%84%A4%EB%AA%85%EC%84%9C#entry82comment</comments>
			<pubDate>Thu, 27 Aug 2009 00:07:16 +0900</pubDate>
		</item>
		<item>
			<title>[google-gadget] 오늘의 메뉴 v3.2</title>
			<link>http://blog.michgan.net/entry/google-gadget-%EC%98%A4%EB%8A%98%EC%9D%98-%EB%A9%94%EB%89%B4-v32</link>
			<description>서울대학교, 오늘의 메뉴 가젯 v3.2 을 작성하였습니다.&lt;br /&gt;
&lt;br /&gt;1.0에서 달라진 점은 탭 인터페이스를 추가하여 하루치의 메뉴를 손쉽게 탐색해 볼 수 있다는 점과 필요한 식당만 선택적으로 나열할 수 있다는 점 정도.&lt;br /&gt;
2.0에서 달라진 점은, 메뉴 데이타를 로딩하기 위해서 스크립트로 다시 서버에 접속하는 과정을 없앴다는 정도.&lt;br /&gt;
3.0에서 달라진 점은, snuco의 개편된 홈페이지를 처리한 정도.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/1372C1224A51DF569F7736&quot; alt=&quot;&quot; filemime=&quot;image/gif&quot; filename=&quot;snumenu.gif&quot; height=&quot;194&quot; width=&quot;285&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;이 가젯의 배포는 &lt;br /&gt;
&lt;A href=&quot;http://laphir.googlepages.com/snumenugadget&quot;&gt;http://laphir.googlepages.com/snumenugadget&lt;/A&gt; &lt;br /&gt;
페이지에서 합니다.&lt;br /&gt;
&lt;br /&gt;설치하는 방법은 위의 링크를 따라가면 설명이 있습니다.&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-81-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-81-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-81-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>web</category>
			<category>Google</category>
			<category>snumenu</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/81</guid>
			<comments>http://blog.michgan.net/entry/google-gadget-%EC%98%A4%EB%8A%98%EC%9D%98-%EB%A9%94%EB%89%B4-v32#entry81comment</comments>
			<pubDate>Mon, 06 Jul 2009 20:25:09 +0900</pubDate>
		</item>
		<item>
			<title>[pocketpc] PassiveSync</title>
			<link>http://blog.michgan.net/entry/pocketpc-PassiveSync</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #fe8943 3px double; PADDING-RIGHT: 10px; BORDER-TOP: #fe8943 3px double; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #fe8943 3px double; PADDING-TOP: 10px; BORDER-BOTTOM: #fe8943 3px double; BACKGROUND-COLOR: #fedec7&quot;&gt;구글과 아웃룩을 동기화하는 작업은 굉장히 위험한 작업이라, 동기화가 무엇인지 반드시 숙지하셔야 합니다. 예를 들어서,&amp;nbsp; PDA와 PC가 동기화하는 상태로 각각 구글과 동기화를 시키면(구글 &amp;lt;-&amp;gt; PC &amp;lt;-&amp;gt; PDA &amp;lt;-&amp;gt; 구글), 중복 항목을 제거하느라 힘 좀 쓰실 겁니다.&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
SmartPhone과 PocketPC 그리고 PC를 대상으로 하는 PassiveSync를 소개합니다. 구글의 연락처와 일정을 PC 혹은 PDA(스마트폰)와 sync하기 위한 프로그램입니다.&lt;br /&gt;
&lt;br /&gt;현재는 연락처와 일정을 다운로드만 받을 수 있습니다. 로칼에서 변경 사항이 있을 때 구글에 다시 등록하는 기능은 구현하지 않았습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #9fd331 3px double; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 3px double; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #9fd331 3px double; PADDING-TOP: 10px; BORDER-BOTTOM: #9fd331 3px double; BACKGROUND-COLOR: #e7fdb5&quot;&gt;원래는 할 일이나 메모도 동기화할 계획이었습니다만, 인터페이스에 흔적만 남긴 상태로 일단 개발을 접습니다. 비록 GPL 라이센스이지만 소스를 공개해뒀으니, 누군가가 바톤을 이어 받아 쓸만한 프로그램으로 환골 탈태 시켜주십시오.&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
구글에서 exchange 서버 비슷한 것을 공개해서 PDA와 동기화할 수 있도록 인터페이스를 제공한 것은 알고 있습니다. 하지만 구글 연락처에서 성-이름을 붙여 쓴 경우에는 단말기에 동기화 시켰을 때 성-이름 분리가 되지 않더군요.&lt;br /&gt;
&lt;br /&gt;아래의 스크린 샷은 PC 버전입니다. PDA에서도 거의 흡사한 인터페이스를 채용했기 때문에 이 스크린 샷만 올려도 될 것 같습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;http://cfile21.uf.tistory.com/image/12663F1249E210FA62876D&quot; alt=&quot;&quot; height=&quot;232&quot; width=&quot;245&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;계정 설정&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/1266171249E210FF3A2E6E&quot; alt=&quot;&quot; height=&quot;232&quot; width=&quot;245&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;동기화&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;라이센스: &lt;A title=&quot;[http://www.gnu.org/copyleft/gpl.html]로 이동합니다.&quot; href=&quot;http://www.gnu.org/copyleft/gpl.html&quot; target=_blank&gt;GPL 라이센스 v3&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;소스:&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/cfile1.uf@13580A1149E21298647A99.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; gsync-1.0.0.1.zip&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Visual Studio 2005 에서 컴파일하면 됨.&lt;br /&gt;
&lt;br /&gt;참고 자료:&lt;br /&gt;
&lt;A title=&quot;[http://blog.michgan.net/entry/google-Google-Data-API-튜토리얼-목차]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/google-Google-Data-API-튜토리얼-목차&quot; target=_blank&gt;발로 쓴 Google Data API&lt;/A&gt;, 원래는 조금씩&amp;nbsp;익히면서 튜토리얼을 써나가고 있었는데, PassiveSync를 만들다 보니 data api가 뭔지 개념이 잡혀버려서 튜토리얼 쓰기를 때려치고 그냥 만들기로 하였음.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #79a5e4 3px double; PADDING-RIGHT: 10px; BORDER-TOP: #79a5e4 3px double; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #79a5e4 3px double; PADDING-TOP: 10px; BORDER-BOTTOM: #79a5e4 3px double; BACKGROUND-COLOR: #dbe8fb&quot;&gt;앞으로 언제 구현할지 모르겠지만, 작업할 거라고 생각했던 것들:&lt;br /&gt;
&amp;nbsp;* 핸드폰에서 SMS를 날짜별로 구글 docs에 백업하는 기능&lt;br /&gt;
&amp;nbsp;* todo 동기화&amp;nbsp;(with google docs)&lt;br /&gt;
&amp;nbsp;* 메모 동기화&amp;nbsp;(with google docs)&lt;/DIV&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-80-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-80-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-80-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>.net</category>
			<category>Google</category>
			<category>passivesync</category>
			<category>PocketPC</category>
			<category>Sync</category>
			<category>win32</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/80</guid>
			<comments>http://blog.michgan.net/entry/pocketpc-PassiveSync#entry80comment</comments>
			<pubDate>Mon, 13 Apr 2009 01:13:33 +0900</pubDate>
		</item>
		<item>
			<title>[pocketpc] Bookworm 0.8.53</title>
			<link>http://blog.michgan.net/entry/pocketpc-Bookworm-0853</link>
			<description>&lt;br /&gt;
프로그램 목적: 텍스트 파일을 읽기 위한 프로그램.&lt;br /&gt;
사용 환경: Windows Mobile 5.0 이상의 PDA 혹은 SmartPhone&lt;br /&gt;
&lt;br /&gt;버그 리포트:&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/121E830E49AE59802C3163&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;gmail.png&quot; height=&quot;21&quot; width=&quot;134&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;다운로드:&lt;br /&gt;

&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=490 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;20%&quot;&gt;&lt;/TD&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;40%&quot;&gt;&amp;nbsp;컴퓨터 전문가용 (귀찮음)&lt;/TD&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;40%&quot;&gt;일반 사용자용 (나름대로 편리함)&amp;nbsp;&lt;/TD&gt;&lt;/TR&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;20%&quot;&gt;&amp;nbsp;현재 버전&lt;/TD&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;40%&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/cfile3.uf@111FB70E49AE598D3217B1.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.8.53.zip&lt;/a&gt;&lt;/div&gt;&lt;/TD&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;40%&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/cfile2.uf@131E890E49AE598C1E6D9B.cab&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.8.53.cab&lt;/a&gt;&lt;/div&gt;&lt;/TD&gt;&lt;/TR&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;20%&quot;&gt;&amp;nbsp;옛날 버전&lt;/TD&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;40%&quot;&gt;&lt;A href=&quot;http://blog.michgan.net/tag/bookworm&quot;&gt;예전 포스트 참고&lt;/A&gt;&lt;/TD&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;40%&quot;&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
사용법 및 스크린샷: &lt;A href=&quot;http://blog.michgan.net/42&quot;&gt;http://blog.michgan.net/42&lt;/A&gt; &lt;br /&gt;
&amp;nbsp;* 참고: &lt;A href=&quot;http://blog.michgan.net/entry/pocketpc-BookWorm%EC%9C%BC%EB%A1%9C-RAR-%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0&quot;&gt;RAR 압축 파일을 읽어 들이는 방법&lt;/A&gt;&lt;br /&gt;
&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;http://cfile21.uf.tistory.com/image/121FBC0E49AE59843F8FE6&quot; alt=&quot;&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;초기화면. 손가락으로 항목을 터치하거나 드래그할 수 있다.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://cfile21.uf.tistory.com/image/151FA40E49AE5984223C3F&quot; alt=&quot;&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;책 읽기 화면. 줄간격, 여백, 색상을 조절할 수 있다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;변경 내역:&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;옴니아 소프트웨어 경진대회 출품 준비 (0.8.53)&lt;br /&gt;
&amp;nbsp;* about 화면&amp;nbsp;재구현 (0.8.53)&lt;br /&gt;
&amp;nbsp;* menu / options / Clear auto bookmarks 를 통해 최근 읽은 글 목록을 삭제할 수 있음. (0.8.53)&lt;br /&gt;
&lt;br /&gt;라이센스:&amp;nbsp;&amp;nbsp;&amp;nbsp;공개 소프트웨어&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-78-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-78-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-78-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>bookworm</category>
			<category>PocketPC</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/78</guid>
			<comments>http://blog.michgan.net/entry/pocketpc-Bookworm-0853#entry78comment</comments>
			<pubDate>Wed, 04 Mar 2009 19:38:54 +0900</pubDate>
		</item>
		<item>
			<title>[pocketpc] Bookworm 0.8.52</title>
			<link>http://blog.michgan.net/entry/pocketpc-Bookworm-0852</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #fe8943 3px double; PADDING-RIGHT: 10px; BORDER-TOP: #fe8943 3px double; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #fe8943 3px double; PADDING-TOP: 10px; BORDER-BOTTOM: #fe8943 3px double; BACKGROUND-COLOR: #fedec7&quot;&gt;신 버전 업데이트: &lt;A href=&quot;http://blog.michgan.net/tag/bookworm&quot;&gt;http://blog.michgan.net/tag/bookworm&lt;/A&gt;&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
프로그램 목적: 텍스트 파일을 읽기 위한 프로그램.&lt;br /&gt;
사용 환경: Windows Mobile 5.0 이상의 PDA 혹은 SmartPhone&lt;br /&gt;
&lt;br /&gt;버그 리포트:&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs12.tistory.com/image/35/tistory/2009/02/18/15/00/499ba3f46b5d3&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;gmail.png&quot; height=&quot;21&quot; width=&quot;134&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
다운로드:&lt;br /&gt;

&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=490 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;20%&quot;&gt;&lt;/TD&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;40%&quot;&gt;&amp;nbsp;컴퓨터 전문가용 (귀찮음)&lt;/TD&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;40%&quot;&gt;일반 사용자용 (나름대로 편리함)&amp;nbsp;&lt;/TD&gt;&lt;/TR&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;20%&quot;&gt;&amp;nbsp;현재 버전&lt;/TD&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;40%&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/499ba367c9b5bBE.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.8.52.zip&lt;/a&gt;&lt;/div&gt;&lt;/TD&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;40%&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/499ba366c8cbeBY.cab&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.8.52.cab&lt;/a&gt;&lt;/div&gt;&lt;/TD&gt;&lt;/TR&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;20%&quot;&gt;&amp;nbsp;옛날 버전&lt;/TD&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;40%&quot;&gt;&lt;A href=&quot;http://blog.michgan.net/tag/bookworm&quot;&gt;예전 포스트 참고&lt;/A&gt;&lt;/TD&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;40%&quot;&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
사용법 및 스크린샷: &lt;A href=&quot;http://blog.michgan.net/42&quot;&gt;http://blog.michgan.net/42&lt;/A&gt; &lt;br /&gt;
&amp;nbsp;* 참고: &lt;A href=&quot;http://blog.michgan.net/entry/pocketpc-BookWorm%EC%9C%BC%EB%A1%9C-RAR-%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0&quot;&gt;RAR 압축 파일을 읽어 들이는 방법&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;http://cfs12.tistory.com/image/12/tistory/2009/02/18/14/58/499ba36b815c4&quot; alt=&quot;&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;초기 화면. 리스트를 손가락으로 클릭하면 선택 됨.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://cfs12.tistory.com/image/28/tistory/2009/02/18/14/58/499ba36b8cb4a&quot; alt=&quot;&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;폰트만 제대로 설정하면 한국-일본-중국어 텍스트를 읽을 수 있음.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
변경 내역:&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;한글화, 영문 텍스트 중에서 95% 정도&amp;nbsp;(0.8.52)&lt;br /&gt;
&lt;br /&gt;라이센스:&amp;nbsp;&amp;nbsp;&amp;nbsp;공개 소프트웨어&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-77-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-77-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-77-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>bookworm</category>
			<category>PocketPC</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/77</guid>
			<comments>http://blog.michgan.net/entry/pocketpc-Bookworm-0852#entry77comment</comments>
			<pubDate>Wed, 18 Feb 2009 15:01:00 +0900</pubDate>
		</item>
		<item>
			<title>[pocketpc] bookworm 0.7.48</title>
			<link>http://blog.michgan.net/entry/pocketpc-bookworm-0748</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #fe8943 3px double; PADDING-RIGHT: 10px; BORDER-TOP: #fe8943 3px double; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #fe8943 3px double; PADDING-TOP: 10px; BORDER-BOTTOM: #fe8943 3px double; BACKGROUND-COLOR: #fedec7&quot;&gt;신 버전 업데이트: &lt;A href=&quot;http://blog.michgan.net/tag/bookworm&quot;&gt;http://blog.michgan.net/tag/bookworm&lt;/A&gt;&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;br /&gt;프로그램 목적: 텍스트 파일을 읽기 위한 프로그램.&lt;br /&gt;
사용 환경: Windows Mobile 5.0 이상의 PDA 혹은 SmartPhone&lt;br /&gt;
&lt;br /&gt;버그 리포트:&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs12.tistory.com/image/33/tistory/2009/02/13/11/55/4994e12b2ee7a&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;gmail.png&quot; height=&quot;21&quot; width=&quot;134&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
다운로드:&lt;br /&gt;

&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=490 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;20%&quot;&gt;&lt;/TD&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;40%&quot;&gt;&amp;nbsp;컴퓨터 전문가용 (귀찮음)&lt;/TD&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;40%&quot;&gt;일반 사용자용 (나름대로 편리함)&amp;nbsp;&lt;/TD&gt;&lt;/TR&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;20%&quot;&gt;&amp;nbsp;현재 버전&lt;/TD&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;40%&quot;&gt;&amp;nbsp;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/4994e1e32d95bBX.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.48.zip&lt;/a&gt;&lt;/div&gt;&lt;/TD&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;40%&quot;&gt;&amp;nbsp;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/4994e1db0b946BQ.cab&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.48.cab&lt;/a&gt;&lt;/div&gt;&lt;/TD&gt;&lt;/TR&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;20%&quot;&gt;&amp;nbsp;옛날 버전&lt;/TD&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;40%&quot;&gt;&lt;A href=&quot;http://blog.michgan.net/entry/pocketpc-bookworm-0739&quot;&gt;예전 포스트 참고&lt;/A&gt;&lt;/TD&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;40%&quot;&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
&lt;br /&gt;사용법 및 스크린샷: &lt;A href=&quot;http://blog.michgan.net/42&quot;&gt;http://blog.michgan.net/42&lt;/A&gt; &lt;br /&gt;
&amp;nbsp;* 참고: &lt;A href=&quot;http://blog.michgan.net/entry/pocketpc-BookWorm%EC%9C%BC%EB%A1%9C-RAR-%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0&quot;&gt;RAR 압축 파일을 읽어 들이는 방법&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;http://cfs12.tistory.com/image/36/tistory/2009/02/13/12/00/4994e2623d8fb&quot; alt=&quot;&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;폰트만 제대로 설정하면 한국-일본-중국어 텍스트를 읽을 수 있음.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://cfs12.tistory.com/image/13/tistory/2009/02/13/12/01/4994e26e3a1a2&quot; alt=&quot;&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;초기 화면. 리스트 항목을 손가락으로 클릭하면 됨.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;변경 내역:&lt;br /&gt;
&amp;nbsp;* 자동 스크롤 관련 타이밍을 &quot;Reading Options&quot;에서 수정 가능함. (0.7.48)&lt;br /&gt;
&lt;br /&gt;라이센스:&amp;nbsp;&amp;nbsp;&amp;nbsp;공개 소프트웨어&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-76-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-76-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-76-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>bookworm</category>
			<category>PocketPC</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/76</guid>
			<comments>http://blog.michgan.net/entry/pocketpc-bookworm-0748#entry76comment</comments>
			<pubDate>Fri, 13 Feb 2009 12:02:59 +0900</pubDate>
		</item>
		<item>
			<title>[pocketpc] bookworm 0.7.39 - 0.7.47</title>
			<link>http://blog.michgan.net/entry/pocketpc-bookworm-0739</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #fe8943 3px double; PADDING-RIGHT: 10px; BORDER-TOP: #fe8943 3px double; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #fe8943 3px double; PADDING-TOP: 10px; BORDER-BOTTOM: #fe8943 3px double; BACKGROUND-COLOR: #fedec7&quot;&gt;신 버전 업데이트: &lt;A href=&quot;http://blog.michgan.net/tag/bookworm&quot;&gt;http://blog.michgan.net/tag/bookworm&lt;/A&gt;&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
프로그램 목적: text 파일을 읽기 위한 프로그램.&lt;br /&gt;
사용 환경: Windows Mobile 5.0 이상의 PDA&lt;br /&gt;
&lt;br /&gt;버그 리포트:&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs14.tistory.com/image/17/tistory/2009/01/23/18/05/4979887346401&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;gmail.png&quot; height=&quot;21&quot; width=&quot;134&quot;/&gt;&lt;/div&gt;&lt;br /&gt;

&lt;P&gt;다운로드:&lt;br /&gt;

&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=490 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;50%&quot;&gt;&lt;SPAN id=tx_beforestart_mark&gt;&lt;/SPAN&gt;컴퓨터 전문가용&amp;nbsp;(귀찮음)&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/498c4d8cc46b39W.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.47.zip&lt;/a&gt;&lt;/div&gt;&lt;/TD&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;50%&quot;&gt;일반 사용자용&amp;nbsp;(나름대로 편리함)&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/498c4d8c27ae69J.cab&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.47.cab&lt;/a&gt;&lt;/div&gt;&lt;/TD&gt;&lt;/TR&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;50%&quot;&gt;&lt;SPAN id=tx_beforestart_mark&gt;&lt;/SPAN&gt;구 버전:&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/498a719b9fff4AL.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.46.zip&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/4987278abc2e99G.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.45.zip&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/498197a84d824DY.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.43.zip&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/497987737c13eDF.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.39.zip&lt;/a&gt;&lt;/div&gt; &lt;/TD&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;50%&quot;&gt;구 버전:&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/498a71981ac25AQ.cab&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.46.cab&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/49872787ed5439Q.cab&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.45.cab&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/498197a4878b2DE.cab&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.43.cab&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/4979876e7d395DV.cab&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.7.39.cab&lt;/a&gt;&lt;/div&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;br /&gt;
사용법 및 스크린샷: &lt;A href=&quot;http://blog.michgan.net/42&quot;&gt;http://blog.michgan.net/42&lt;/A&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;* &lt;A title=&quot;[http://blog.michgan.net/entry/pocketpc-BookWorm으로-RAR-파일-읽기]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/pocketpc-BookWorm으로-RAR-파일-읽기&quot; target=_blank&gt;참고: RAR 압축 파일에서 읽기 지원&lt;/A&gt; &lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs14.tistory.com/image/26/tistory/2009/01/23/18/34/49798f259a151&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;49798f259a151DP.png&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;폰트만 제대로 설정하면 한국-일본-중국어 텍스트를 읽을 수 있음.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;변경 내역:&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;information bar 에서 auto scrolling timer 만 끌 수 있도록 함. 즉, 스크롤바만 보이도록&amp;nbsp;(0.7.47)&lt;br /&gt;
&amp;nbsp;* 옵션을 default로&amp;nbsp;재설정이 안 되던 버그 수정 (0.7.47)&lt;br /&gt;
&amp;nbsp;* 색깔은 이제 &quot;reading options&quot;에서 수정할 수 있음. 폰트 세팅 시에는 더 이상 색상 변경 불가능 (0.7.47)&lt;br /&gt;
&amp;nbsp;* 숫자 조정 다이얼로그에서 숫자 크기를 크도록 수정 (0.7.46)&lt;br /&gt;
&amp;nbsp;* 옵션 관련&amp;nbsp;설정 관련 재 구현.&amp;nbsp;(0.7.45)&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;Do not scroll&amp;nbsp;설정 관련 버그 수정 (0.7.45; thanks to 쥬라직)&lt;br /&gt;
&amp;nbsp;* 에니메이션 타입값&amp;nbsp;설정 관련 버그 수정 (0.7.43; thanks to 쥬라직)&lt;br /&gt;
&amp;nbsp;* 자동 스크롤 시 전원 끄기 방지 (0.7.42)&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;자동 스크롤 관련 버그 수정 (0.7.41)&lt;br /&gt;
&amp;nbsp;* 자동 스크롤 (0.7.40)&lt;br /&gt;
&amp;nbsp;* cab 설치 파일 제공 (0.7.39)&lt;br /&gt;
&lt;br /&gt;설치 방법:&lt;br /&gt;
&amp;nbsp;* zip 파일의 경우, 압축을 푼 후에 PDA로 옮기고, 실행한다.&lt;br /&gt;
&amp;nbsp;* cab 파일의 경우, PDA에 옮기고 설치한다.&lt;br /&gt;
&lt;br /&gt;0.7 버전에서의 구현 목표:&lt;br /&gt;
&amp;nbsp;* 자동 스크롤&lt;br /&gt;
&amp;nbsp;* 한글화&lt;br /&gt;
&lt;br /&gt;구 버전:&lt;br /&gt;
&lt;br /&gt;라이센스:&lt;br /&gt;
&amp;nbsp;공개 소프트웨어&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-74-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-74-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-74-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>bookworm</category>
			<category>PocketPC</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/74</guid>
			<comments>http://blog.michgan.net/entry/pocketpc-bookworm-0739#entry74comment</comments>
			<pubDate>Fri, 06 Feb 2009 23:49:42 +0900</pubDate>
		</item>
		<item>
			<title>[pocketpc] bookworm 0.6.32 - 0.6.38</title>
			<link>http://blog.michgan.net/entry/pocketpc-bookworm-0632</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #fe8943 3px double; PADDING-RIGHT: 10px; BORDER-TOP: #fe8943 3px double; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #fe8943 3px double; PADDING-TOP: 10px; BORDER-BOTTOM: #fe8943 3px double; BACKGROUND-COLOR: #fedec7&quot;&gt;신 버전 업데이트: &lt;A href=&quot;http://blog.michgan.net/tag/bookworm&quot;&gt;http://blog.michgan.net/tag/bookworm&lt;/A&gt;&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
프로그램 목적: text 파일을 읽기 위한 프로그램.&lt;br /&gt;
사용 환경: Windows Mobile 5.0 이상의 PDA&lt;br /&gt;
&lt;br /&gt;다운로드:&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/49773da54a51a9C.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.6.38.zip&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
구 버전:&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/49735e99151f3CD.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.6.37.zip&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/497088a3d599dAZ.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.6.36.zip&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/496e0466295bbEK.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.6.35.zip&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/496770e95221b94.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.6.33.zip&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://michgan.tistory.com/attachment/49648e6326936CF.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; bookworm-0.6.32.zip&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
사용법 및 스크린샷: &lt;A href=&quot;http://blog.michgan.net/42&quot;&gt;http://blog.michgan.net/42&lt;/A&gt; &lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs10.tistory.com/image/22/tistory/2009/01/10/00/58/49677410ce44a&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;49677410ce44a9L.png&quot; height=&quot;320&quot; width=&quot;240&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;텍스트는 고의로 블러 처리&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;
변경 내역:&lt;br /&gt;
&amp;nbsp;* 디버그 정보 추가 (0.6.38)&lt;br /&gt;
&amp;nbsp;* &lt;A title=&quot;[http://blog.michgan.net/entry/pocketpc-BookWorm으로-RAR-파일-읽기]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/pocketpc-BookWorm으로-RAR-파일-읽기&quot; target=_blank&gt;RAR 압축 파일에서 읽기 지원&lt;/A&gt;&amp;nbsp;- 링크 따라가셔서 설명을 꼭 읽으세요. 그냥 안 됨.(0.6.38)&lt;br /&gt;
&amp;nbsp;* command line&amp;nbsp;으로 열고자 하는 텍스트 파일의 경로를 지정할 수 있음. 버그 수정 (0.6.37)&lt;br /&gt;
&amp;nbsp;* 프로그램 아이콘 변경 (0.6.37)&lt;br /&gt;
&amp;nbsp;* 모든 폰트의 이름을 한큐에 바꾸기 기능 추가 (0.6.36)&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;long click 제거 (0.6.36)&lt;br /&gt;
&amp;nbsp;* 책 보기 모드에서 스크롤 시에 관성 부여 (0.6.36)&lt;br /&gt;
&amp;nbsp;* command line&amp;nbsp;으로 열고자 하는 텍스트 파일의 경로를 지정할 수 있음. (0.6.36)&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;리스트에서 마우스 기능 재구현 (0.6.35)&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;Hide 기능 추가 (0.6.33)&lt;br /&gt;
&amp;nbsp;* 에니메이션이 진행 중일 때 또 다른 에니메이션을 시작하면 같은 페이지에서 새로 시작하는 문제 수정 (thx to 쥬라직, 0.6.32)&lt;br /&gt;
&amp;nbsp;* 시작할 때 최근에 읽었던 글을 자동 로드하는 옵션 추가&lt;br /&gt;
&lt;br /&gt;설치 방법:&lt;br /&gt;
&amp;nbsp; 압축을 푼 후에 PDA에 옮기고, 실행한다.&lt;br /&gt;
&lt;br /&gt;버그 리포트: &lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs10.tistory.com/image/35/tistory/2009/01/10/13/19/496821b63af34&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;gmail.png&quot; height=&quot;21&quot; width=&quot;134&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
라이센스:&lt;br /&gt;
&amp;nbsp; 공개 소프트웨어&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-67-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-67-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-67-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>pocketpc</category>
			<category>bookworm</category>
			<category>PocketPC</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/67</guid>
			<comments>http://blog.michgan.net/entry/pocketpc-bookworm-0632#entry67comment</comments>
			<pubDate>Thu, 22 Jan 2009 00:24:20 +0900</pubDate>
		</item>
		<item>
			<title>[pocketpc] BookWorm으로 RAR 파일 읽기</title>
			<link>http://blog.michgan.net/entry/pocketpc-BookWorm%EC%9C%BC%EB%A1%9C-RAR-%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #9fd331 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #9fd331 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #9fd331 1px dashed; BACKGROUND-COLOR: #e7fdb5&quot;&gt;이 글에서는 BookWorm으로 RAR 파일을 읽는 법을 설명합니다. rar 파일은 BookWorm 0.6.38 버전부터 지원하오니, 아래 버전을 쓰시는 분들은 &lt;A href=&quot;http://blog.michgan.net/tag/bookworm&quot;&gt;http://blog.michgan.net/tag/bookworm&lt;/A&gt;&amp;nbsp;을 방문하셔서 새 버전을 다운 받길 권합니다.&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
BookWorm에서 rar 파일을 읽기 위해서는 dll 이 하나 필요합니다.&lt;br /&gt;
&lt;br /&gt;rar 제작사에서 배포하는 &lt;A href=&quot;http://www.rarlab.com/rar/UNRAR_SP_1.4_EN.rar&quot;&gt;http://www.rarlab.com/rar/UNRAR_SP_1.4_EN.rar&lt;/A&gt;&amp;nbsp;파일을 다운 받으셔서 보시면 unrar.dll 이 있습니다. 이것을 bookworm.exe 가 있는 디렉토리에 같이 넣어주시면 됩니다.&lt;br /&gt;
&lt;br /&gt;그러나 문제가 있습니다.&lt;br /&gt;

&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #fe8943 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #fe8943 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #fe8943 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #fe8943 1px solid; BACKGROUND-COLOR: #fedec7&quot;&gt;rar 압축이 풀리는 PDA(혹은 전화기)가 있고 안 풀리는 기종이 있습니다.&amp;nbsp; &lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
일단 HX4700(에 WM 6.1 깐 것)에서는 압축이 잘 풀리지만, 어떤 기종에서는 안 될지도 모릅니다. 안 풀리는 기종에 대해서는 저도 어떻게 해드릴 방법이 없네요.&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-73-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-73-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-73-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>manual</category>
			<category>bookworm</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/73</guid>
			<comments>http://blog.michgan.net/entry/pocketpc-BookWorm%EC%9C%BC%EB%A1%9C-RAR-%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0#entry73comment</comments>
			<pubDate>Thu, 22 Jan 2009 00:23:02 +0900</pubDate>
		</item>
		<item>
			<title>[google] Google Data API의 구조</title>
			<link>http://blog.michgan.net/entry/google-Google-Data-API%EC%9D%98-%EA%B5%AC%EC%A1%B0</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #9fd331 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #9fd331 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #9fd331 1px dashed; BACKGROUND-COLOR: #e7fdb5&quot;&gt;&lt;A title=&quot;[http://blog.michgan.net/entry/google-Google-Data-API-튜토리얼-목차]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/google-Google-Data-API-튜토리얼-목차&quot; target=&quot;&quot;&gt;구글 Data API 튜토리얼 목차 보기&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;
이번 포스트에서는 Google의 Data API의 동작 구조에 대해서 설명을 하겠다. &lt;br /&gt;
&lt;br /&gt;제일 첫 글에서 소개했던 Calendar 이벤트를 받아오는 코드를 다시 살펴보자.&lt;br /&gt;

&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #cbcbcb 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #cbcbcb 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #cbcbcb 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #cbcbcb 1px dashed; BACKGROUND-COLOR: #ffffff&quot;&gt;this.calendarService = new &lt;STRONG&gt;CalendarService&lt;/STRONG&gt;(&quot;GoogleCalendarSample&quot;);&lt;br /&gt;
this.googleAuthToken = loginDialog.AuthenticationToken;&amp;nbsp; // 위에서 받은 토큰&lt;br /&gt;
this.calendarService.SetAuthenticationToken(this.googleAuthToken);&lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;EventQuery &lt;/STRONG&gt;query = new EventQuery(&quot;&lt;A href=&quot;http://www.google.com/calendar/feeds/default/private/full/&quot;&gt;http://www.google.com/calendar/feeds/default/private/full/&lt;/A&gt;&quot;);&lt;br /&gt;
&lt;STRONG&gt;EventFeed &lt;/STRONG&gt;feed = this.calendarService.Query(query);&lt;br /&gt;
foreach (EventEntry entry in feed.Entries)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // list 업데이트&lt;br /&gt;
}&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
현재 3개의 객체가 눈에 띄인다. CalendarService, EventQuery, EventFeed 가 바로 그것인데, 이 3종의 클래스가 구글의 Data API에서 가장 핵심적인 역할을 담당한다.&lt;br /&gt;
&lt;br /&gt;구글의 Data API는&amp;nbsp;우리가 만들&amp;nbsp;클라이언트와 구글 서버 간의 Request-Reply 프로토콜을 정의한 것이다.&amp;nbsp;이 프로토콜은 XML 형식으로 정의되어 있는데, 보통 XML은&amp;nbsp;생성하거나 파싱하기가 까다로운게 아니라 귀찮기 때문에 클래스 형식으로 구현한&amp;nbsp;것이 바로 EventQuery 클래스와 EventFeed 클래스가 되겠다.&amp;nbsp;Query 류에서는 Request를 담당하고, Feed 류에서는 Reply를 담당하게 된다.&lt;br /&gt;
&lt;br /&gt;그렇다면, Service는? Query에서 만들어진 XML을 소켓을 통해 보내고, 응답을 받은 후에 Feed 객체를 만들어서 반환하는 역할을 해준다.&lt;br /&gt;
&lt;br /&gt;이 3종 클래스 세트가 있기 때문에 .net 에서 편안하게 Google 서버에 저장된 데이타를 꺼내올 수 있는 것이다.&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-72-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-72-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-72-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>howto</category>
			<category>.net</category>
			<category>data api</category>
			<category>Google</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/72</guid>
			<comments>http://blog.michgan.net/entry/google-Google-Data-API%EC%9D%98-%EA%B5%AC%EC%A1%B0#entry72comment</comments>
			<pubDate>Mon, 19 Jan 2009 06:00:00 +0900</pubDate>
		</item>
		<item>
			<title>[google] Google Data API 튜토리얼 목차</title>
			<link>http://blog.michgan.net/entry/google-Google-Data-API-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-%EB%AA%A9%EC%B0%A8</link>
			<description>&lt;br /&gt;
목차: &lt;br /&gt;
1. &lt;A title=&quot;[http://blog.michgan.net/entry/google-Google-Calendar-API-사용하기]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/google-Google-Calendar-API-사용하기&quot; target=_blank&gt;Google Data API를 사용해보자&lt;/A&gt;&lt;br /&gt;
2. &lt;A title=&quot;[http://blog.michgan.net/entry/google-Google-Data-API의-구조]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/google-Google-Data-API의-구조&quot; target=_blank&gt;Google Data API의 구조&lt;/A&gt;&lt;br /&gt;
3. Calendar&lt;br /&gt;
&amp;nbsp;&amp;nbsp; 3-1.&amp;nbsp;&lt;A title=&quot;[http://blog.michgan.net/entry/google-Google-Calendar-Entry-살펴보기]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/google-Google-Calendar-Entry-살펴보기&quot; target=_blank&gt;Event Entry&amp;nbsp;살펴보기&lt;/A&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; 3-2. Calendar List 가져오기&lt;br /&gt;
4. Contacts&lt;br /&gt;
&amp;nbsp;&amp;nbsp; 4-1. &lt;A title=&quot;[http://blog.michgan.net/entry/google-Google-Contacts-Entry-살펴보기]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/google-Google-Contacts-Entry-살펴보기&quot; target=_blank&gt;Contact Entry&amp;nbsp;살펴보기&lt;/A&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; 4-2. Contact Group 가져오기&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-71-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-71-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-71-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>howto</category>
			<category>data api</category>
			<category>Google</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/71</guid>
			<comments>http://blog.michgan.net/entry/google-Google-Data-API-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-%EB%AA%A9%EC%B0%A8#entry71comment</comments>
			<pubDate>Fri, 16 Jan 2009 22:28:40 +0900</pubDate>
		</item>
		<item>
			<title>[google] Google Contacts Entry 살펴보기</title>
			<link>http://blog.michgan.net/entry/google-Google-Contacts-Entry-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #9fd331 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #9fd331 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #9fd331 1px dashed; BACKGROUND-COLOR: #e7fdb5&quot;&gt;&lt;A title=&quot;[http://blog.michgan.net/entry/google-Google-Data-API-튜토리얼-목차]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/google-Google-Data-API-튜토리얼-목차&quot; target=&quot;&quot;&gt;구글 Data API 튜토리얼 목차 보기&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;
gmail.com 에 접속하면 볼 수 있는 Contacts(연락처) 역시 Google data api 로 가져올 수 있다. 이번에는 Google 프로젝트 중에서 Contacts 를 선택해서 생성하면 된다. 로그인하고 Contact entry를 가져오는 코드는 Calendar event를 가져오는 코드와 클래스 이름만 바뀌었을 뿐, 거의 동일하다. 그래서 자세한 내용은 생략하기로 하고, contacts 에 있는 필드를 가져오는 방법만 살펴보기로 하자.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
구글에서 입력 가능한 contacts의 필드는 아래의 스크린샷과 같다. 여기에 Group 이 빠져 있을 뿐이다. 김영진은 본인의 친구다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs12.tistory.com/image/12/tistory/2009/01/10/18/07/4968655f9b38b&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;contact.png&quot; height=&quot;304&quot; width=&quot;316&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
위에 보이는 필드를 가져오는 방법은 아래와 같다.&lt;br /&gt;

&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=490 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;30%&quot;&gt;&amp;nbsp;이름&lt;/TD&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;70%&quot;&gt;ContactEntry.Title.Text&amp;nbsp;&lt;/TD&gt;&lt;/TR&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;30%&quot;&gt;&amp;nbsp;직위 및 회사&lt;/TD&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;70%&quot;&gt;ContactEntry.Organizations 컬렉션, Organization 객체를 받아서 Title과 Name 필드를 보면 됨.&lt;/TD&gt;&lt;/TR&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;30%&quot;&gt;&amp;nbsp;Email&lt;/TD&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;70%&quot;&gt;ContactEntry.Emails 컬렉션, Email 객체를 받아서 Email.Address 를 보면 됨.&lt;/TD&gt;&lt;/TR&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;30%&quot;&gt;&amp;nbsp;전화번호&lt;/TD&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;70%&quot;&gt;ContactEntry.Phonenumbers 컬렉션, PhoneNumber 객체를 받아서 Value 필드를 보면 됨.&amp;nbsp;참고로, Home, Other, Work와 같은 필드가 있어서 어떤 전화 번호인지 알 수 있다.&lt;/TD&gt;&lt;/TR&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;30%&quot;&gt;&amp;nbsp;집 주소&lt;/TD&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;70%&quot;&gt;ContactEntry.PostalAddresses 컬렉션, PostalAddress 객체를 받아서 Value 필드를 보면 되는 듯.&lt;/TD&gt;&lt;/TR&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;30%&quot;&gt;&amp;nbsp;소속 그룹&lt;/TD&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;70%&quot;&gt;ContactEntry.GroupMembership 컬렉션, GroupMembership 객체를 받아서 보면 안 됨.&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
소속 그룹이 좀 복잡하다. GroupMembership 객체에는 그룹의 명칭이 담겨 있지 않다. 대신 GroupsQuery를 보낼 주소를 담고 있는데, 아래와 같은 코드로 그룹의 명칭을 알아 올 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #cbcbcb 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #cbcbcb 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #cbcbcb 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #cbcbcb 1px dashed; BACKGROUND-COLOR: #ffffff&quot;&gt;// GroupMembership group;&lt;br /&gt;
GroupsQuery q = new GroupsQuery(group.HRef);&lt;br /&gt;
GroupsFeed f = contactsService.Query(q);&lt;br /&gt;
&lt;br /&gt;foreach( GroupEntry e in f.Entries )&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; hash[group.HRef] = e.Title.Text;&lt;br /&gt;
}&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;
위의 코드에서는 Query 회수를 줄이기 위해서 Hashtable을 생성해서 결과를 캐시하고 있다.&lt;br /&gt;
&lt;br /&gt;사용자가 직접 생성한 Group 외의 SystemGroup 즉, Contacts, Family, Co-workesr, Friends 그룹으로 분류하면 어디에 소속한 것인지 알아낼 길이 없는 듯?&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-70-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-70-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-70-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>howto</category>
			<category>.net</category>
			<category>contacts</category>
			<category>data api</category>
			<category>Google</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/70</guid>
			<comments>http://blog.michgan.net/entry/google-Google-Contacts-Entry-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0#entry70comment</comments>
			<pubDate>Fri, 16 Jan 2009 02:00:00 +0900</pubDate>
		</item>
		<item>
			<title>[google] Google Calendar Entry 살펴보기</title>
			<link>http://blog.michgan.net/entry/google-Google-Calendar-Entry-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #9fd331 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #9fd331 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #9fd331 1px dashed; BACKGROUND-COLOR: #e7fdb5&quot;&gt;&lt;A title=&quot;[http://blog.michgan.net/entry/google-Google-Data-API-튜토리얼-목차]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/google-Google-Data-API-튜토리얼-목차&quot; target=&quot;&quot;&gt;구글 Data API 튜토리얼 목차 보기&lt;/A&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A title=&quot;[http://blog.michgan.net/entry/google-Google-Calendar-API-사용하기]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/google-Google-Calendar-API-사용하기&quot; target=_blank&gt;지난 번 글&lt;/A&gt;을 통해서 Google Calendar 항목들을 가져오는 방법을 살펴 보았다. 이번에는 Calendar 항목에 어떤 필드가 있는지 살펴볼 차례다. 일목 요연하게 설명하고 있는 페이지가 없어서 조금 고생했다.&lt;br /&gt;
&lt;br /&gt;구글에서 칼렌다 이벤트를 살펴보면 아래와 같은 필드를 갖는다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs14.tistory.com/image/13/tistory/2009/01/10/17/51/4968618a308a2&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;fields.png&quot; height=&quot;306&quot; width=&quot;440&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
여기 있는 필드는 다음과 같이 조회할 수 있다.&lt;br /&gt;
&lt;/P&gt;
&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=1 cellPadding=1 width=490 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;30%&quot;&gt;&amp;nbsp;내용&lt;/TD&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;70%&quot;&gt;EventEntry.Title.Text&amp;nbsp;&lt;/TD&gt;&lt;/TR&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;30%&quot;&gt;&amp;nbsp;시간&lt;/TD&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;70%&quot;&gt;EventEntry.Times 컬렉션&lt;br /&gt;
When 이라는 객체에서 종일은 AllDay, 시작 시간은 StartTime 멤버를 보면 됨.&lt;/TD&gt;&lt;/TR&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;30%&quot;&gt;&amp;nbsp;반복 빈도&lt;/TD&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;70%&quot;&gt;아직 분석 안함&lt;/TD&gt;&lt;/TR&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;30%&quot;&gt;&amp;nbsp;장소&lt;/TD&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;70%&quot;&gt;EventEntry.Locations 컬렉션&lt;br /&gt;
Where 라는 객체에서 ValueString을 보면 됨. Google map과 연동되는 멤버도 있음.&lt;/TD&gt;&lt;/TR&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;30%&quot;&gt;&amp;nbsp;캘린더&lt;/TD&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;70%&quot;&gt;캘린더는&amp;nbsp;Query의 주소를 만들 때 이미 지정했음.&amp;nbsp;&lt;/TD&gt;&lt;/TR&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;30%&quot;&gt;&amp;nbsp;설명&lt;/TD&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;70%&quot;&gt;EventEntry.Content.Content&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
어디에 데이타가 들어 있는지만 알면 조회하는 코드를 짜는 것은 금방이다.&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-69-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-69-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-69-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>howto</category>
			<category>.net</category>
			<category>calendar</category>
			<category>data api</category>
			<category>Google</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/69</guid>
			<comments>http://blog.michgan.net/entry/google-Google-Calendar-Entry-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0#entry69comment</comments>
			<pubDate>Tue, 13 Jan 2009 04:30:00 +0900</pubDate>
		</item>
		<item>
			<title>[google] Google Calendar API 사용하기</title>
			<link>http://blog.michgan.net/entry/google-Google-Calendar-API-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
			<description>&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #9fd331 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #9fd331 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #9fd331 1px dashed; BACKGROUND-COLOR: #e7fdb5&quot;&gt;&lt;A title=&quot;[http://blog.michgan.net/entry/google-Google-Data-API-튜토리얼-목차]로 이동합니다.&quot; href=&quot;http://blog.michgan.net/entry/google-Google-Data-API-튜토리얼-목차&quot; target=&quot;&quot;&gt;구글 Data API 튜토리얼 목차 보기&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;
구글의 Data API를 사용해서 Calendar 의 이벤트를 받아오는 방법을 살펴보자. data API 사용법에 대해서 구글 검색을 해보면 한글로 된 문서는 거의 없기 때문에 pioneer 격으로 이 문서를 작성하고 있다. 하지만 접근 방법이 너무&amp;nbsp;쉽기 때문에 그 동안 문서가 없었는지도 모르겠다.&lt;br /&gt;
&lt;br /&gt;구글의 Data API는 구글의 여러 어플리케이션에 저장된 데이타를 프로그램적으로 조회하기 위한 수단이다. 원래는 XML 을 기반으로 어떤 동작을 요청하고 응답을 받아오는 프로토콜을 정의한 것이다. 그래서 원칙적으로는&amp;nbsp;TCP/IP 소켓을 지원하는 어떠한&amp;nbsp;플랫폼에서도 구글 Data API를 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;XML을 일일이 직접 만들고 파싱하는 과정은 귀찮기 때문에 그러한 작업을 모두 라이브러리화해 둔 것이 존재한다. 일단 윈도우 용을 살펴보면 .net framework로 작성된 라이브러리가 존재한다. &lt;A href=&quot;http://code.google.com/p/google-gdata/&quot;&gt;http://code.google.com/p/google-gdata/&lt;/A&gt;&amp;nbsp;&lt;br /&gt;
MAC 용으로는 object c를 사용하는 라이브러리도 존재한다. &lt;A href=&quot;http://code.google.com/p/gdata-objectivec-client/&quot;&gt;http://code.google.com/p/gdata-objectivec-client/&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
필자는&amp;nbsp;태생이 윈도우&amp;nbsp;친화적이기 때문에 .net framework를 기준으로 설명을 하겠다. 위에 언급해둔 URL에서 SDK를 다운 받아서 설치를 하면 사용 설명서와 샘플이 설치된다. 이 사용 설명서의 두께는 어마어마한데, 전부 영어이기 때문에 읽을려면 골치 아프다. 이 것은 무시하기로 하고, 일단 부딛혀 보자.&lt;br /&gt;
&lt;br /&gt;Visual Studio 2005를 띄우면, 놀랍게도 구글 프로젝트가 추가된 것을 볼 수 있다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs11.tistory.com/image/10/tistory/2009/01/10/13/38/4968264901c63&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;project.png&quot; height=&quot;260&quot; width=&quot;500&quot;/&gt;&lt;/div&gt;&lt;br /&gt;
일단 calendar 에 관심이 있으니까, 그걸로 프로젝트를 만들어보자. 그리고 실행시켜보면, 로그인 창이 뜨고, 이어서 칼렌다 항목을 받아와서 나열하고 있는 모습을 볼 수 있다.&lt;br /&gt;
&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;http://cfs11.tistory.com/image/29/tistory/2009/01/10/13/40/496826a14a039&quot; alt=&quot;&quot; height=&quot;129&quot; width=&quot;245&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;로그인 창&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://cfs11.tistory.com/image/16/tistory/2009/01/10/13/40/496826a43c917&quot; alt=&quot;&quot; height=&quot;212&quot; width=&quot;245&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;칼렌다 이벤트&lt;/p&gt;&lt;/td&gt;&lt;/tr&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;br /&gt;

&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #cbcbcb 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #cbcbcb 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #cbcbcb 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #cbcbcb 1px dashed; BACKGROUND-COLOR: #ffffff&quot;&gt;&amp;nbsp; this.service.setUserCredentials(this.Username.Text, this.Password.Text);&lt;br /&gt;
&amp;nbsp; this.authToken = this.service.QueryAuthenticationToken();&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
아 물론 에러 처리가 전혀 되어 있지 않은 관계로, 제대로 작성하려면 메뉴얼을 읽고 어떤 exception이 발생하는지 찾아서 처리해야겠지.&lt;br /&gt;
&lt;br /&gt;그리고 칼렌다 이벤트를 받아오는 코드 역시 몇 줄 되지 않는다.&lt;br /&gt;

&lt;DIV class=txc-textbox style=&quot;BORDER-RIGHT: #cbcbcb 1px dashed; PADDING-RIGHT: 10px; BORDER-TOP: #cbcbcb 1px dashed; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #cbcbcb 1px dashed; PADDING-TOP: 10px; BORDER-BOTTOM: #cbcbcb 1px dashed; BACKGROUND-COLOR: #ffffff&quot;&gt;this.calendarService = new CalendarService(&quot;GoogleCalendarSample&quot;);&lt;br /&gt;
this.googleAuthToken = loginDialog.AuthenticationToken;&amp;nbsp; // 위에서 받은 토큰&lt;br /&gt;
this.calendarService.SetAuthenticationToken(this.googleAuthToken);&lt;br /&gt;
&lt;br /&gt;EventQuery query = new EventQuery(&quot;&lt;A href=&quot;http://www.google.com/calendar/feeds/default/private/full/&quot;&gt;http://www.google.com/calendar/feeds/default/private/full/&lt;/A&gt;&quot;);&lt;br /&gt;
EventFeed feed = this.calendarService.Query(query);&lt;br /&gt;
foreach (EventEntry entry in feed.Entries)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // list 업데이트&lt;br /&gt;
}&lt;br /&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;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-68-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-68-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-68-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>howto</category>
			<category>.net</category>
			<category>calendar</category>
			<category>data api</category>
			<category>Google</category>
			<author>michgan</author>
			<guid>http://blog.michgan.net/68</guid>
			<comments>http://blog.michgan.net/entry/google-Google-Calendar-API-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0#entry68comment</comments>
			<pubDate>Sat, 10 Jan 2009 13:49:05 +0900</pubDate>
		</item>
	</channel>
</rss>
