<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss version="2.0">
	<channel>
		<title>S/W 개발자들이 사는 이야기 - 식스맨++</title>
		<link>http://sixthman.tistory.com/</link>
		<description>S/W 개발자들이 사는 이야기</description>
		<language>ko</language>
		<pubDate>Wed, 17 Aug 2011 07:02:25 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<managingEditor>sixthman</managingEditor>
		<image>
		<title>S/W 개발자들이 사는 이야기 - 식스맨++</title>
		<url><![CDATA[http://cfs5.tistory.com/upload_control/download.blog?fhandle=YmxvZzQ1MzAxQGZzNS50aXN0b3J5LmNvbTovYXR0YWNoLzAvMDkwMDAwMDAwMDAwLkpQRw%3D%3D]]></url>
		<link>http://sixthman.tistory.com/</link>
		<description>S/W 개발자들이 사는 이야기</description>
		</image>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SixthMan" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="sixthman" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
			<title>버튼 오동작하는 전자 제품 수리법(제대로 한걸까? ㅎㅎ)</title>
			<link>http://sixthman.tistory.com/218</link>
			<description>&lt;br /&gt;
집에서 사용하는 가전 제품중에 5년 이상 사용한 가전 제품들이 몇가지 있다.&lt;br /&gt;
&lt;br /&gt;그 가전제품들은 모두 주 기능이 잘 작동하고 있다.&lt;br /&gt;
&lt;br /&gt;예를 들면 선풍기같은 경우 시원 바람을 나에게 선사해준다. &lt;br /&gt;
외장형 수신기로 모니터를 이용해서 TV를 잘 보고 있다.&lt;br /&gt;
&lt;br /&gt;그런데 이 두 제품 모두 전자식 push 버튼을 가지고 있는데 버튼을 누르면 오동작을 한다.&lt;br /&gt;
선풍기 같은 경우 회전을 할려고 회전 버튼을 누르면 &lt;br /&gt;
바로 옆에 있는 버튼인 시간 조절 버튼의 기능을 해 버린다.&lt;br /&gt;
&lt;br /&gt;사실 선풍기를 혼자 사용하기 때문에 회전 버튼을 사용하지 않으면 되므로 그냥 계속 사용하였다.&lt;br /&gt;
&lt;br /&gt;그런데, 최근에&amp;nbsp;외장형 수신기의 전원 버튼이 나를 힘들게 한다.&lt;br /&gt;
전원을&amp;nbsp;off 하려고&amp;nbsp;전원 버튼을 꾹 누르고 있으면, 채널이 바뀌거나 소리가 조정이 되면서 전원이 꺼지지 않는다.&lt;br /&gt;
&lt;br /&gt;오늘 도저히 인내심의 한계를 느껴서 고치거나 버리기로 맘 먹었다.&lt;br /&gt;
&lt;br /&gt;우선 학교 다닐 때 &lt;STRONG&gt;PCB를 지우개로 지우면 접전 문제가 해결 된다&lt;/STRONG&gt;는 기억이 떠올라서&lt;br /&gt;
우선 외장형 TV 수신기를 분해했다.&lt;br /&gt;
&lt;br /&gt;분해를 해서 PCB를 확인해 보니 아래 사진과 같이 군대 군대 끈적끈적한 무언가가 달라 붙어 있었다. &lt;br /&gt;
&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://cfile22.uf.tistory.com/original/145E7E0C4C8CE6D31E5C84" rel="lightbox" target="_blank"&gt;&lt;img src="http://cfile22.uf.tistory.com/image/145E7E0C4C8CE6D31E5C84" alt="" filemime="image/jpeg" filename="SAM_0112.jpg" height="333" width="500"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
이것만 제거하면 되겠구나 하는 생각으로 집에 있는 지우개로 열심히 기판을 문질렀다. 그런데 기판에 납땜 된 부분이&amp;nbsp;뾰족하게 올라와서&amp;nbsp;잘지워지지 않았다.&lt;br /&gt;
&lt;br /&gt;그냥 포기할까 하다가..&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;올해 초에&amp;nbsp;Cortex-M3로 라인트레인스를 만들때 사용하던 플럭스 펜이&amp;nbsp;눈에 들어왔다.&lt;br /&gt;
플럭스(flux)라 함은 송진과 같이 기판에 납이 잘 뭍도록 도와주는&amp;nbsp;것을 말한다.&lt;br /&gt;
Cortex-M3 CPU같이 핀도 많고 촘촘한 것은 송진을 사용하는 것보다는 수용성 플럭스를 사용하는 것이 좋다고 해서 사두었던 펜이다.&lt;br /&gt;
&lt;br /&gt;혹시나 싶어서 이 펜을 열어보니 알코올 냄새가 내 꼬 끝을 자극했다. &lt;br /&gt;
아! 이거다는 생각이 들어서 집에 있는 못 쓰는 칫솔을 가지고 왔다.&lt;br /&gt;
우선 플럭스 펜을 이용해서 오염부위를 딱으니 끈적한 부분이 흐느적 거렸다.&lt;br /&gt;
이때 칫솔을 이용해서 끈적한 부분을 딱아 내니 표면이 깨끗해 졌다.&lt;br /&gt;
&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://cfile24.uf.tistory.com/original/14497C214C8CED6F043428" rel="lightbox" target="_blank"&gt;&lt;img src="http://cfile24.uf.tistory.com/image/14497C214C8CED6F043428" alt="" filemime="image/jpeg" filename="SAM_0114.JPG" height="333" width="500"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
한 3분정도 기판의 모든 부분을 딱아내고 조립을 해서 전원 버튼을 눌러 보았다.&lt;br /&gt;
&lt;br /&gt;오 브라보! 정상적으로 동작했다.&lt;br /&gt;
&lt;br /&gt;혹시나 그 외에 정상적으로 동작하지 않는 버튼이 정상 동작하는지 확인해 보았지만 여전히 동작을 하지 잘하지 않았다. 하지만 청소하기 전 보다는 동작을 잘 되었다.&lt;br /&gt;
&lt;br /&gt;원래는 PCB 납땜 후에 기판에 뭍어 있는 플럭스를 제거하기 위해서 플럭스 제거제를 사용해야 하는데 집에는 없어서&amp;nbsp;아쉬웠다.&lt;br /&gt;
&lt;br /&gt;아마도 플럭스 제거제를 사용하면&amp;nbsp;모든 버튼이&amp;nbsp;정상동작했을 텐데라는 아쉬움은 남지만 나를 짜증나게 했던 전원 버튼이 정상 동작하여&amp;nbsp;스스로 만족하고 작업을 마쳤다.&lt;br /&gt;
&lt;br /&gt;혹시 집에서 PCB에 붙어 있던 push 버튼이 동작하지 않을 때&amp;nbsp;다들 어떻게 하세요? ㅎㅎ&lt;br /&gt;</description>
			<category>사는이야기</category>
			<author>myidojh</author>
			<guid>http://sixthman.tistory.com/218</guid>
			<comments>http://sixthman.tistory.com/218#entry218comment</comments>
			<pubDate>Sun, 12 Sep 2010 23:43:31 +0900</pubDate>
		</item>
		<item>
			<title>넥서스원 터치 오류</title>
			<link>http://sixthman.tistory.com/217</link>
			<description>&amp;nbsp;Google의 NexusOne을 사용한지 한 달이 조금 넘었다. 좀 더 기다리면 아이폰 4G를 만날 수 있다는 주변의 강한 권유에도 불구하고 늘 비주류의 길을 걷길 원하는 자유 영혼의 소유자로서 당당하게 넥서스원을 선택하였다. TT&amp;nbsp; 다른 스마트폰은 써보지 않은터라 다른 것들과의 비교는 나의 능력 밖이고, 난 스마트폰이 이기나 내가 이기나 마구마구 그를 시험하는 성향이 없는지라 그저 블러그상에 떠도는 몇몇 어플들 설치해 가면서 잘 쓰고 있다. &lt;br /&gt;
&amp;nbsp;근데 그 와중에 이 기기에 대해 나도 슬슬 짜증을 낼 수 밖에 없는 치명적인 단점을 가지고 있었으니, 바로 터치스크린 오류다. 이미 인터넷 여기저기에 이 문제를 지적하는 글들을 보았으나, 직접 겪어 보니 생각보다 불편함이 컸다. 좀 더 자세히 얘기하자면, 가끔.. 총 사용하는 횟수의 1/4쯤... 이놈이 내가 터치하는 부분이 아닌 다른 지점에 터치를 한다고 인식한다. 어떤 블로그의 글을 보니 터치를 테스트하는 프로그램을 깔고 봤더니 한 지점을 터치함에도 불구하고 또 다른 한 지점이 더 인식되면서, 두 지점이 찍히는 것처럼 동작한다는 분석도 있었다. 아무튼... 이게 문자를 보내려고 자판을 터치할 때 엉뚱한 글자가 찍히는가 하면, 구글맵에서 지역 이동을 하려고 하면, 지 맘대로 확대가 되고 축소가 되서 불편할 때가 많았다. &lt;br /&gt;
&amp;nbsp;그러던 차에 한 번 공식적인 문제 재기를 해보고자 KT 서비스 센터에 문의를 하니 넥서스원의 단말기에 대한 고객서비스를 하고 있는 TGS에 문의하라는 답변을 받았다. TGS에 문의했더니 HTC 담당 직원인듯한 사람의 답변으로는 문제를 정확히 파악할 수 없으니 가까운 서비스센터로 가라고 했다. 이런 문제로 문의하는 사람들이 꽤 있을 것 같은데... 잘 모르겠단다. 불행히도 회사 업무상 직접 고객센터를 방문하는 시간을 못 내고,&amp;nbsp; 혹시나 하는 마음에 Google의 NexusOne truobleshooting site를 찾아보았다. 마침 이런 문제에 대한 항목이 있었다. 뭔가 해결의 실마리를 잡을 수 있을까 기대감에 부풀어 카테고리를 따라가니... 다음과 같은 해결책이 제시되어 있었다. &lt;br /&gt;
&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://cfile1.uf.tistory.com/original/133401274C8B10DB368B06" rel="lightbox" target="_blank"&gt;&lt;img src="http://cfile1.uf.tistory.com/image/133401274C8B10DB368B06" alt="" filemime="image/jpeg" filename="캡처.jpg" height="342" width="473"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
음... 원인에 대한 설명도 한 마디 없고, 한마디로 문제 생기면 껐다 켜라...TT&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;div class="entry-ccl" style="clear: both; text-align: right; margin-bottom: 10px"&gt;
	&lt;img id="ccl-icon-217-0" class="entry-ccl-by" src="http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png" alt="저작자 표시"/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;
		&lt;Work rdf:about=""&gt;
			&lt;license rdf:resource="http://creativecommons.org/licenses/by-fr/2.0/kr/" /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about="http://creativecommons.org/licenses/by-fr/"&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/Reproduction"/&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/Distribution"/&gt;
			&lt;requires rdf:resource="http://web.resource.org/cc/Notice"/&gt;
			&lt;requires rdf:resource="http://web.resource.org/cc/Attribution"/&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>IT이야기</category>
			<category>Google</category>
			<category>KT</category>
			<category>NexusOne</category>
			<category>smart phone</category>
			<category>넥서스원</category>
			<category>스마트폰</category>
			<author>erratum</author>
			<guid>http://sixthman.tistory.com/217</guid>
			<comments>http://sixthman.tistory.com/217#entry217comment</comments>
			<pubDate>Sat, 11 Sep 2010 14:19:14 +0900</pubDate>
		</item>
		<item>
			<title>윈도우를 투명하게 하는 함수를 쓰면 느려지는 현상으로 고생한 이야기...</title>
			<link>http://sixthman.tistory.com/215</link>
			<description>새로운 프로젝트를 하게되면, 아래와 같은 프로세스를 거친다.&lt;br /&gt;
1. SRS작성 &lt;br /&gt;
2. SRS에서 요구하는 기능 구현&lt;br /&gt;
3. SDS작성&lt;br /&gt;
4. 개발&lt;br /&gt;
5. QA&lt;br /&gt;
6. 릴리즈 &lt;br /&gt;
당연히 2번을 하다가 1번을 고치기도 하고, 3번을 하다가 1번을 고치기도 하고,4번을 하다가 1번을 고치기도 한다. &lt;br /&gt;
&lt;br /&gt;5번을 하다가 고치기도 할까?&lt;br /&gt;
&lt;br /&gt;당연히 SRS를 작성할 때나, SDS를 작성할 때나, 개발을 할때 안나오던 버그가 발견되어서 SRS에 이런 경우에는 non bug로 처리한다고 SRS를 반영한다.&lt;br /&gt;
&lt;br /&gt;이번 프로젝트도 역시나 QA하는 동안 버그를 발견했다. 발견된 시기는 QA를 시작하는 시점이었고, 관련 이슈를 검토한 시점은 베타 기간이었다. 큰 프로젝트가 아니라 짧은 베타기간중 3일이라는 긴 시간을 잡아 먹었다.&lt;br /&gt;
&amp;nbsp;QA에서&amp;nbsp;제품의 기능을&amp;nbsp;검증하는 PC에서 특정 UI를 실행하면, "아주 느리게 나오는 버그"였다. QA 알파에&amp;nbsp;&amp;nbsp;느려지는 이슈가 올라왔을 때는, 당장 "아 내가 실수했구나'하는 버그들이 많아서 그 이슈를 처리한다고 관심을 가질 여유가 없었다. &lt;br /&gt;
&amp;nbsp;"아 내가 실수했구나"라는 버그는이 내 pc에서도 같은 재현 스텝을 하면 그대로 발생하는 이슈들이다. "아주 느리게 나오는 버그" 내가 가지고 있는 어떤 머신을 이용해도 발생하지 않아서 특정 pc에서만 발생하는 이슈겠지 하고 미루어 놓았다.&lt;br /&gt;
&amp;nbsp;베타가 시작되고, 본격적으로 관련 이슈를&amp;nbsp;검토해 보기 위해서, QA용 pc를 공수했다. pc 구하기가 어려워서.. 라는 말로 시작을 했는데,.. QA pc 대부분에서 느려지는 현상이 발생한다고 하면서 여러 pc 중에 한대를 빌려주었다. &lt;br /&gt;
&amp;nbsp;글로만 보던 버그를 눈 앞에서 재현을 해보니, 어처구니가 없었다. 이런 현상이 QA를 하는 모든 pc에서 발생한다고 하니. 마음이 조급해졌다. 우선 어떤 기능 때문에 느려지는 현상이 발생하는지 체크하기로 했다. 아래와 같은 순서로 체크해 보았다.&lt;br /&gt;
&amp;nbsp;1. 특정 UI만 따로 분리해서 프로그램을 만들어서 실행해본다.&lt;br /&gt;
&amp;nbsp;2. 특정 UI와 동시에 실행되는 기능들을 모두 off 해본다.&lt;br /&gt;
&amp;nbsp;3. 특정 UI와 동시에 실행되는 기능들을 하나씩 키면서 실행 해본다.&lt;br /&gt;
역시,&amp;nbsp;첫번째, 두번째에서는 이상없이 실행이 되었다.&lt;br /&gt;
그런데 세번째에 기능을 하나씩 키면서 실행을&amp;nbsp;해보는데, 특정 UI가 발생할때&lt;br /&gt;
알파 값을 먹인 윈도우를 배경으로 까는 기능이 있는데&amp;nbsp;그 기능을&amp;nbsp;키니깐 늦어 졌다.&lt;br /&gt;
&amp;nbsp;어떤 기능 때문에 늦어 졌는지를 파악했으니깐 실제 어떤 함수에서 이런 현상을 발생시키는 지 확인하면 되기 때문에 그&amp;nbsp;기능 내부에 함수를 하나씩 제거 해보면서 체크해 보았다.&amp;nbsp;&lt;br /&gt;
&amp;nbsp;조금만 더하면 된다는 생각에 퇴근 시간이 되었지만, 끝까지 찾아보았다. 그런데.. 왠걸 모든 함수를 다 빼 보았지만, 여전히 느려지는 현상이 발생하는 것이다.&lt;br /&gt;
&amp;nbsp;결국 포기하고 다음날 아침에 와서 다시 확인해 본다는 생각으로 어제 찾은 기능을 on하는 것은 제일 마지막으로 미루고, 처음부터 다시 해보았다.역시나 알파값을 가진 배경을 그리는 윈도우 때문이었다. &lt;br /&gt;
&amp;nbsp;혹시나 하는 마음에&amp;nbsp;내가 만든 함수가 아닌 윈도우에서 제공해주는 함수인 "setlayerattribute"를 제거해 보았다.&amp;nbsp;그런데 UI가 정상적인 속도로 동작을 했다. 찾기는 찾았는데 해결책을 제시할 수 없는 상황이 발생한 것이다. &lt;br /&gt;
&amp;nbsp;이 함수를 선택한 이유가 가장 쉬우면서 GDI, GDI++ 비해서 훨씬 속도가 빠르다고 해서 사용한 함수인데. 너무 어처구니가 없었다. 내가 만든 함수가 아니기 때문에 어쩔 수 없다라고 하면, 그러면 다른 프로그램들은 어떻게 유사한 기능들을 사용하고 있냐는 질문에 답을 할 수 없기 때문에 더 파보기로 했다.&lt;br /&gt;
&amp;nbsp;1. 디버그를 이용해서 윈도우 내부 함수를 하나씩 off 해본다.&lt;br /&gt;
&amp;nbsp;2. 그래픽 연산 문제이기 때문에 그래픽 드라이버를 업그레이드 해본다.&lt;br /&gt;
&amp;nbsp;위와 같은 2가지 방법이 있는데 1번을 하기에는 시간적으로 촉박하여 2번을 해보기로 했다. 업그레이드를 해보았지만, 관련 현상을 여전히 발생하였다. 그래서 같은 회사의 같은 계열 그래픽 가드중 상위 그래픽 카드를 구해서 실행해 보았다. 여전히 마찬가지로 느렸다. 혹시나 하는 마음에 다시 최신 드라이버로 업그레이드를 해보았다. &lt;br /&gt;
&amp;nbsp;그런데, 업그레이드를 한 이후에는 UI 느려지는 현상이 발생하지 않았다. 드라이버 버젼을 확인하는 2009년 2월이었다. 다시 원래 그래픽 장치를 꼽고 드라이버 버젼을 보니 2006년 버젼이 최신이었다. &lt;br /&gt;
&amp;nbsp;흠 여기서, 그냥 그래픽 드라이버 문제라고 결론 지을 수 있지만, 우리 제품 쓰는 사람이 똑같은 현상이 발생했을때 '그래픽 장치를 바꾸세요.' 라고 할수 없기 때문에 해결책을 제시해주기로 마음 먹었다.&lt;br /&gt;
&amp;nbsp;그런데 릴리즈 날자는 다가오고 다른 버그들도 있는데.. 걱정이다.</description>
			<category>사는이야기</category>
			<category>ATi</category>
			<category>느려짐</category>
			<author>myidojh</author>
			<guid>http://sixthman.tistory.com/215</guid>
			<comments>http://sixthman.tistory.com/215#entry215comment</comments>
			<pubDate>Sun, 31 May 2009 23:34:06 +0900</pubDate>
		</item>
		<item>
			<title>WinDBG로 Deadlock 알아내기</title>
			<link>http://sixthman.tistory.com/214</link>
			<description>대학에서 운영체제 시간에 Deadlock에 대해서 배울 때, 많이 거론되는 것이 &lt;a title="Dijkstra의 '식사하는 철학자'" href="http://sixthman.tistory.com/208" id="u6k_"&gt;Dijkstra의 '식사하는 철학자'&lt;/a&gt; 일 것이다. &lt;br /&gt;
멀티 쓰레딩 프로그래밍을 하다 보면 아주 많은 주의를 기울여야 할 Deadlock 문제. &lt;br /&gt;
다양한 deadlock 문제 중에 윈도우 프로그래밍의 critical section에서 야기될 수 있는 deadlock을 WinDBG를 사용해서 발견하는 방법을 설명하려고 한다. &lt;br /&gt;
멀티쓰레딩 프로그램에서 hang이 발생하면 우선 deadlock을 의심해볼 수 있다. &lt;br /&gt;
처음으로 할 일은 hang dump를 수집하는 것이다. &lt;br /&gt;
windbg의 attach process 기능을 사용하던지, &lt;a title="ADPlus" href="http://support.microsoft.com/kb/286350" id="nocf"&gt;ADPlus&lt;/a&gt;나 &lt;a title="UserDump" href="http://support.microsoft.com/kb/241215" id="x_k0"&gt;UserDump&lt;/a&gt; 프로그램을 사용해서 응답하지 않는 프로그램의 hang dump를 수집한다. &lt;br /&gt;
hang dump는 약간의 시차(한 10초 정도)를 두고 3번 정도 반복해서 만드는 것이 좋다. &lt;br /&gt;
dump가 생성되면 windbg를 사용해서 디버깅을 시작한다. &lt;br /&gt;
dump 파일을 open 하고 난 뒤, command line에 '!locks'라고 친다. &lt;br /&gt;
user mode 디버깅에서는 locks는 ntsdexts.locks와 동일한 명령이다. &lt;br /&gt;
이 명령은 ntdll.dll에 있는 &lt;b&gt;RtlInitializeCriticalSection&lt;/b&gt;에 의해서 초기화된 critical section 객체의 정보를 쭉 보여준다. &lt;br /&gt;
&lt;br /&gt;
&lt;p style="font-family: Courier New,Courier,mono; font-style: normal; font-weight: normal; font-size: 100%; color: rgb(102, 0, 0);"&gt;=====================================================&lt;br /&gt;
&lt;/p&gt;
&lt;p style="font-family: Courier New,Courier,mono; font-style: normal; font-weight: normal; font-size: 100%; color: rgb(102, 0, 0);"&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style="font-family: Courier New,Courier,mono; font-style: normal; font-weight: normal; font-size: 100%; color: rgb(102, 0, 0);"&gt;0:000&amp;gt;&amp;nbsp;&lt;b&gt;!locks&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
CritSec w3svc!g_pWamDictator+a0 at 68C2C298&lt;br /&gt;
LockCount&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
RecursionCount&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
OwningThread&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d1&lt;br /&gt;
EntryCount&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
ContentionCount&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
*** Locked&lt;br /&gt;
&lt;br /&gt;
CritSec SMTPSVC+66a30 at 67906A30&lt;br /&gt;
LockCount&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
RecursionCount&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
OwningThread&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d0&lt;br /&gt;
EntryCount&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
ContentionCount&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
*** Locked&lt;br /&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;=====================================================&lt;br /&gt;
&lt;br /&gt;
여
기에 아무런 옵션이 없으면 현재 프로세스에 속한 critical section 객체만을 보여주고, 옵션으로 -v를 붙이면
프로세스 밖에 있는 critical section 객체도 보여준다. '-o' 옵션은 Windows XP와 그 이후의 운영체제만
지원하는 것으로 orphaned information(유효하지 않은 critical section을 가르키고 있는 포인터)만을
보여준다. &lt;br /&gt;
locks 명령 말고도 비슷한 모양으로 정보를 보여주는 명령어는 !critecs, !cs 등이 있다.&lt;br /&gt;
&lt;br /&gt;
이 위의 출력물에 대한 의미는 다음과 같다. &lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: Courier New;"&gt;Windows XP와 그 이전 것들&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;LockCount&lt;/b&gt;
필드는 이 critical section으로 진입하기 위한 EnterCriticalSection()을 호출한 thread의
수에서 하나를 뺀 것과 같다. 왜 하나를 빼야 하냐면, 이 필드는 -1을 unlock 상태로 표시하고
EnterCriticalSection()이 호출될 때마다, 하나씩 증가하기 때문이다. 나중에
LeaveCriticalSection()이 호출되면 하나씩 감소시킨다. 예를 들어, 만약 이 값이 3이라면 하나의 thread는
이 critical section에 진입한 상태이고, 3개의 다른 thread들이 이 곳에 진입하기 위해서 기회를 노리고 있다는
의미이다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RecursionCount&lt;/b&gt; 필드는 critical section에 진입한 thread가 다시 EnterCriticalSection()을 몇 번 더 호출하고 있는지를 나타낸다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;EntryCount&lt;/b&gt; 필드는 critical section에 진입하지 못한 thread가 몇 번이나 EnterCriticalSection()을 호출하고 있는지를 나타낸다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;i&gt;CritSec w3svc!g_pWamDictator+a0 at 68C2C298&lt;/i&gt;&lt;/b&gt;에서 at 다음에 있는 숫자는 critical section의 핸들이다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Owning thread&lt;/span&gt;는 말 그대로 이 critical section 객체를 현재 가지고 있는&amp;nbsp; thread이다. &lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: Courier New;"&gt;그 이후 것들(Windows Server 2003 SP1과 그 이후것들)은 &lt;/span&gt;'Debugging Tools for Windows'의 Help에 Display a Critical Section 편을 보면 자세히 나와 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
Deadlock에 빠진 것이라면, !locks 명령어를 실행했을 때, LockCount가 1 이상인 것들이 하나 이상 존재해야 한다.&amp;nbsp; &lt;br /&gt;
만약 그렇다면 이 thread들의 call stack을 훑어 봐야 한다. &lt;br /&gt;
call stack을 보면 top 언저리에 ntdll!RtlpWaitForCriticalSection+0x132와 비슷하게
보이는 frame이 존재하는데 이 함수의 첫번째 인자가 그 thread가 지금 기다리고 있는 critical section의
핸들이다. 이 핸들을 !locks으로 출력됐던 결과에서 봤을 때, critical section을 가지고 있는 두 놈이 서로의 것을 기다리고 있다면, 100%입니다.&lt;div class="entry-ccl" style="clear: both; text-align: right; margin-bottom: 10px"&gt;
	&lt;img id="ccl-icon-214-0" class="entry-ccl-by" src="http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png" alt="저작자 표시"/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;
		&lt;Work rdf:about=""&gt;
			&lt;license rdf:resource="http://creativecommons.org/licenses/by-fr/2.0/kr/" /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about="http://creativecommons.org/licenses/by-fr/"&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/Reproduction"/&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/Distribution"/&gt;
			&lt;requires rdf:resource="http://web.resource.org/cc/Notice"/&gt;
			&lt;requires rdf:resource="http://web.resource.org/cc/Attribution"/&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>IT이야기</category>
			<category>!locks</category>
			<category>Deadlock</category>
			<category>WinDBG</category>
			<author>erratum</author>
			<guid>http://sixthman.tistory.com/214</guid>
			<comments>http://sixthman.tistory.com/214#entry214comment</comments>
			<pubDate>Sun, 31 May 2009 21:22:16 +0900</pubDate>
		</item>
		<item>
			<title>RSA 알고리즘 - 공개키 암호 방식</title>
			<link>http://sixthman.tistory.com/213</link>
			<description>&lt;br /&gt;

&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: 굴림"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 굴림"&gt;비밀키 암호기법에 있어서 가장 큰 문제점은 바로 메세지의 전달자와 수신자가 똑같은 비밀키를 다른 사람들이 모르게 공유해야 한다는 점이다&lt;SPAN lang=EN-US&gt;. &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: 굴림"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 굴림"&gt;특히 메세지의 전달자와 수신자가 물리적으로 서로 떨어져 있다면 그 두사람은 매우 안전한 통신 수단을 이용하여 비밀키를 전달하여야 할 것이다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;만약 공격자가 이 두사람간의 통신경로상에서 비밀키를 얻어낸다면 그 후로부터 메세지의 송신자와 수신자가 그 비밀키를 사용하여 메세지를 암호화한다 하여도 그 공격자는 자신이 훔친 비밀키를 이용하여 모든 메세지를 복호화하여 그 내용을 알 수가 있게 될 것이다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;또한 비밀키 암호기법에 있어서 모든 키들은 그것을 사용하는 두 사람이외에는 아무도 알 수 없도록 비밀리에 보관되어야 하므로 만약 수많은 사람들이 동시에 상호 메세지를 주고 받고자 하는 경우에는 이러한 비밀키의 관리가 매우 어려워진다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;이와 같이 암호화를 위한 키의 생성과 전달 그리고 보관하는 문제 즉&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;키의 관리 문제는 암호를 이용한 정보보안에 있어서 중요한 이슈가 되는 문제이다&lt;SPAN lang=EN-US&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: 굴림"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 굴림"&gt;비밀키 암호기법이 갖는 위와 같은 키관리의 문제를 해결하기 위해서 제안된 것이 바로 공개키 암호 기법이다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;이것은&lt;SPAN lang=EN-US&gt; 1976&lt;/SPAN&gt;년&lt;SPAN lang=EN-US&gt; Whitfield Diffie&lt;/SPAN&gt;와&lt;SPAN lang=EN-US&gt; Martin Hellman&lt;/SPAN&gt;에 의해 제안되었다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 굴림"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;비밀키는 메세지의 송&lt;SPAN lang=EN-US&gt;/&lt;/SPAN&gt;수신에 참여하는 모든 사람들이 개인적으로 비밀리에 보관하고 있어야 하고 공개키는 공개키 디렉토리에 보관되어 모든 사람들이 자신이 원하는 공개키를 얻을 수 있어야 한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;그리하여 송신자가 메세지를 보내기 위해 먼저 공개키 디렉토리에서 메세지 수신자의 공개키를 획득한다&lt;SPAN lang=EN-US&gt;(&lt;/SPAN&gt;실제로는 공개키를 획득하는 과정에서도 암호기법을 이용한 인증절차가 필요하며 공개키를 보관하는 디렉토리의 안전한 관리를 위해 여러가지 방법이 필요하다&lt;SPAN lang=EN-US&gt;). &lt;/SPAN&gt;그리고 송신하려는 메세지를 수신자의 공개키를 이용하여 암호화한 후 발송한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;암호화된 메세지를 받은 수신자는 자신만이 갖고 있는 비밀키를 이용하여 그 메세지를 복호화하여 메세지를 얻는다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;여기에서 반드시 주목해야 할 사실은 바로 비밀키와 공개키는 키의 길이만 동일하고 서로 다른 값을 갖는 키라는 것이다&lt;SPAN lang=EN-US&gt;.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 굴림"&gt;공개키 알고리즘 중 &lt;SPAN lang=EN-US&gt;RSA &lt;/SPAN&gt;기법은 &lt;SPAN lang=EN-US&gt;Rivest, Shamir, Adleman&lt;/SPAN&gt;에 의해 개발된 방식으로 지수 승을 가진 수식을 사용하도록 만들어졌다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;평문은 블록으로 암호화된다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;각 블록은 어떤 수&lt;SPAN lang=EN-US&gt; n&lt;/SPAN&gt;보다 작은 이진 값을 가진다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;암호와 복호는 평문 블록&lt;SPAN lang=EN-US&gt; M&lt;/SPAN&gt;과 암호문 블록&lt;SPAN lang=EN-US&gt; C&lt;/SPAN&gt;에 대하여 다음의 형태를 따른다&lt;SPAN lang=EN-US&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: 굴림"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: 굴림"&gt;C = M&lt;SUP&gt;e&lt;/SUP&gt; mod n&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: 굴림"&gt;M = C&lt;SUP&gt;d &lt;/SUP&gt;mod n = (M&lt;SUP&gt;e&lt;/SUP&gt;)&lt;SUP&gt;d&lt;/SUP&gt; mod n&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: 굴림"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10pt; mso-char-indent-count: 1.0"&gt;&lt;SPAN style="FONT-FAMILY: 굴림"&gt;여기서&lt;SPAN lang=EN-US&gt; n=pq, p&lt;/SPAN&gt;와&lt;SPAN lang=EN-US&gt; q&lt;/SPAN&gt;는 솟수&lt;SPAN lang=EN-US&gt;, d&lt;/SPAN&gt;는 정수&lt;SPAN lang=EN-US&gt;(&lt;/SPAN&gt;단&lt;SPAN lang=EN-US&gt; d&lt;/SPAN&gt;는 Φ&lt;SPAN lang=EN-US&gt;(n)&lt;/SPAN&gt;에 서로소인 정수&lt;SPAN lang=EN-US&gt;), &lt;/SPAN&gt;그리고&lt;SPAN lang=EN-US&gt; e= d-1 mod &lt;/SPAN&gt;Φ&lt;SPAN lang=EN-US&gt;(n) &lt;/SPAN&gt;이다&lt;SPAN lang=EN-US&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10pt; mso-char-indent-count: 1.0"&gt;&lt;SPAN style="FONT-FAMILY: 굴림"&gt;송신자&lt;SPAN lang=EN-US&gt; A&lt;/SPAN&gt;와 수신자&lt;SPAN lang=EN-US&gt; B&lt;/SPAN&gt;는&lt;SPAN lang=EN-US&gt; n&lt;/SPAN&gt;의 값을 알아야 한다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;예를 들어 수신자&lt;SPAN lang=EN-US&gt; B&lt;/SPAN&gt;의 공개키&lt;SPAN lang=EN-US&gt; KU&lt;/SPAN&gt;는&lt;SPAN lang=EN-US&gt; {e,n}&lt;/SPAN&gt;으로 구성되고 수신자&lt;SPAN lang=EN-US&gt; B&lt;/SPAN&gt;의&lt;SPAN lang=EN-US&gt; KR&lt;/SPAN&gt;은&lt;SPAN lang=EN-US&gt; {d,n}&lt;/SPAN&gt;으로 구성되어 있을 때 송신자&lt;SPAN lang=EN-US&gt; A&lt;/SPAN&gt;는 수신자&lt;SPAN lang=EN-US&gt; B&lt;/SPAN&gt;가 공개한&lt;SPAN lang=EN-US&gt; e&lt;/SPAN&gt;의 값을 알고 있으며&lt;SPAN lang=EN-US&gt;, &lt;/SPAN&gt;수신자&lt;SPAN lang=EN-US&gt; B&lt;/SPAN&gt;만이&lt;SPAN lang=EN-US&gt; d&lt;/SPAN&gt;의 값을 알고 있다&lt;SPAN lang=EN-US&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10pt; mso-char-indent-count: 1.0"&gt;&lt;SPAN style="FONT-FAMILY: 굴림"&gt;만일 사용자&lt;SPAN lang=EN-US&gt; A&lt;/SPAN&gt;가 메시지&lt;SPAN lang=EN-US&gt; M&lt;/SPAN&gt;을 사용자&lt;SPAN lang=EN-US&gt; B&lt;/SPAN&gt;에게 전송하고자 한다면&lt;SPAN lang=EN-US&gt; A&lt;/SPAN&gt;는&lt;SPAN lang=EN-US&gt; C =( M&lt;SUP&gt;e&lt;/SUP&gt; mod n )&lt;/SPAN&gt;을 계산하여 얻은&lt;SPAN lang=EN-US&gt; C&lt;/SPAN&gt;를 전송하고&lt;SPAN lang=EN-US&gt; B&lt;/SPAN&gt;는&lt;SPAN lang=EN-US&gt; M = C&lt;SUP&gt;d&lt;/SUP&gt; mod n&lt;/SPAN&gt;을 계산하여&lt;SPAN lang=EN-US&gt; M&lt;/SPAN&gt;을 얻게 된다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;즉&lt;SPAN lang=EN-US&gt; e&lt;/SPAN&gt;와&lt;SPAN lang=EN-US&gt; d&lt;/SPAN&gt;가&lt;SPAN lang=EN-US&gt; mod n&lt;/SPAN&gt;의 곱셈에 대한 역원 관계에 있으므로 공개키로 암호화 한 메시지는 개인키로 복호화되며 개인키로 암호화한 메시지는 공개키로 복호화되게 된다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;공개키는 다른 사람들에게 공개하고 개인키는 자신만이 알고 있다는 점을 생각해보면 상대방의 공개키로 암호화한 내용은 상대방만이 복호화할 수 있으며 나의 개인키로 암호화한 메시지는 모든 사람에 의해서 복호화될 수 있다&lt;SPAN lang=EN-US&gt;. &lt;/SPAN&gt;결과적으로 상대방의 공개키를 이용한 암호화는 특정 상대방만이 알아볼 수 있게 하기 위한 방안으로 이해될 수 있으며 자신의 개인키를 이용한 암호화는 자신임을 입증하는 전자서명에 효과적으로 이용될 수 있다&lt;SPAN lang=EN-US&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 굴림; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA"&gt;참고적으로 관용 암호방식과 공개키 암호방식의 알고리즘 상의 구성에 있어서의 차이점을 살펴보면 관용 암호방식의 경우는 평문에 대한 연산의 조합이나 재배치를 기반으로 하는 반면에 공개키 암호방식은 지수승이나 &lt;SPAN lang=EN-US&gt;mod &lt;/SPAN&gt;연산 등의 수학적 수식을 기반으로 한다는 차이점을 들 수 있다&lt;SPAN lang=EN-US&gt;.&lt;br /&gt;
&lt;br /&gt;요즘 정신이 산만하네요. 산만한 만큼 생각도 많고 매일 고민에 빠져 살고 있습니다.&lt;br /&gt;
&lt;br /&gt;마지막으로 노무현 전 대통령님 삼가 명복을 빕니다. 꼭 좋은 곳에서 행복하세요.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
			<category>IT이야기</category>
			<author>꾸벅히로</author>
			<guid>http://sixthman.tistory.com/213</guid>
			<comments>http://sixthman.tistory.com/213#entry213comment</comments>
			<pubDate>Sun, 31 May 2009 17:09:07 +0900</pubDate>
		</item>
		<item>
			<title>김제동 어록...</title>
			<link>http://sixthman.tistory.com/212</link>
			<description>고 노무현 전 대통령님의 유서에 대한 김제동씨의 글입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV&gt;&lt;STRONG&gt;"나로 말미암아 여러 사람이 받은 고통이 너무 크다 하셨지만 그 분에게 받은 사랑이 크다"&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV&gt;"&lt;B&gt;여생도 남에게 짐이 될 일밖에 없다 하셨지만 우리가 기꺼이 나눠드려야겠다&lt;/B&gt;"&lt;br /&gt;
"&lt;B&gt;너무 슬퍼하지 말라고 하셨는데 오늘은 좀 슬퍼해야겠다&lt;/B&gt;"&lt;/DIV&gt;
&lt;DIV&gt;"&lt;B&gt;삶과 죽음은 하나라고 하셨는데 우리 가슴 속에 심장이 뛸 때마다 잊지 않겠다&lt;/B&gt;"&lt;br /&gt;
"&lt;B&gt;미안해하지 말랐는데 좀 미안해하겠다. 지켜드리지 못했다&lt;/B&gt;"&lt;/DIV&gt;
&lt;DIV&gt;"&lt;B&gt;누구도 원망하지 말랬는데 스스로를 원망하겠다&lt;/B&gt;"&lt;br /&gt;
"&lt;B&gt;운명이라 하셨는데 이 운명만큼은 받아들이지 못하겠다. &lt;/B&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;B&gt;"작은 비석만 남기라 하셨는데 우리 가슴 속에 잊혀지지 않는 큰 비석 잊지 않고 세우겠다&lt;/B&gt;"&lt;br /&gt;
"&lt;B&gt;마음의 뜨거운 열정으로 그 분을, 우리 가슴 속에 한 줌의 재가 아니라 영원토록 살아있는 열정으로 대하겠다&lt;/B&gt;" &lt;br /&gt;
&lt;br /&gt;지지난 대선날, 소주를 마시며 결과를 기다리던때가 생각이 납니다.&lt;br /&gt;
"제발"과 "설마"를 연거푸 되뇌이며 소주잔을 기울였지요.&lt;br /&gt;
그리고, 믿어지지 않는 결과가 나온덕에 3차까지 달리며 술을 먹었던...&lt;br /&gt;
&lt;br /&gt;이제와서 무슨 이야기가 필요하겠습니까.&lt;br /&gt;
끝까지 투표할때의 마음과 같이 믿어주지 못했던 제가 후회 스럽고&amp;nbsp;원망스럽습니다.&lt;br /&gt;
최소한 저에겐 너무 과분한 대통령이 아니었나 생각합니다.&lt;br /&gt;
&lt;br /&gt;편히 쉬세요.&lt;/DIV&gt;</description>
			<category>사는이야기</category>
			<author>kingstone</author>
			<guid>http://sixthman.tistory.com/212</guid>
			<comments>http://sixthman.tistory.com/212#entry212comment</comments>
			<pubDate>Fri, 29 May 2009 23:21:52 +0900</pubDate>
		</item>
		<item>
			<title>느낌이 산뜻한 웹서비스 소개</title>
			<link>http://sixthman.tistory.com/210</link>
			<description>&lt;P&gt;느낌이 산뜻한 웹서비스를 소개합니다. &lt;br /&gt;이미 많이 알고 있는 사이트겠지만, 순위도 포함해서 정리해 봤습니다.&lt;br /&gt;&lt;br /&gt;* 위지아 (wisia)&lt;br /&gt;&amp;nbsp; 순위: 713위&lt;br /&gt;&amp;nbsp; 분류: 방문자들이 뽑는 랭킹 정보&lt;br /&gt;&amp;nbsp; URL: &lt;A href="http://www.wisia.com/"&gt;http://www.wisia.com/&lt;/A&gt;&lt;br /&gt;&amp;nbsp; 특이사항: NHN을 설립했던 김범수 대표가 만든 사이트&lt;/P&gt;
&lt;P&gt;* 윙버스 (WINGBUS)&lt;br /&gt;&amp;nbsp; 순위: 966위&lt;br /&gt;&amp;nbsp; 분류: 해외 여행 정보 사이트&lt;br /&gt;&amp;nbsp; URL: &lt;A href="http://www.wingbus.com/"&gt;http://www.wingbus.com/&lt;/A&gt;&lt;br /&gt;&amp;nbsp; 특이사항: NHN에 2009년 인수됨.&lt;/P&gt;
&lt;P&gt;* 스프링노트 (springnote)&lt;br /&gt;&amp;nbsp;&amp;nbsp; 순위: 1261위&lt;br /&gt;&amp;nbsp;&amp;nbsp; 분류: 공유 노트&lt;br /&gt;&amp;nbsp;&amp;nbsp; URL: &lt;A href="http://www.springnote.com/"&gt;http://www.springnote.com/&lt;/A&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 특이사항: NCSOFT의 오픈마루 스튜디오가 만든 사이트&lt;/P&gt;
&lt;P&gt;* 티워 (TWAR)&lt;br /&gt;&amp;nbsp; 순위: 1656위&lt;br /&gt;&amp;nbsp; 분류: 게시판형 찬반 사이트&lt;br /&gt;&amp;nbsp; URL: &lt;A href="http://www.twar.co.kr"&gt;http://www.twar.co.kr&lt;/A&gt;&lt;br /&gt;&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; 파란 포털에서도 지원하는 중임.&lt;/P&gt;
&lt;P&gt;* 미투데이 (me2day)&lt;br /&gt;&amp;nbsp;&amp;nbsp; 순위: 1671위&lt;br /&gt;&amp;nbsp;&amp;nbsp; 분류: 한줄 블로그&lt;br /&gt;&amp;nbsp;&amp;nbsp; URL: &lt;A href="http://me2day.net/"&gt;http://me2day.net/&lt;/A&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 특이사항: 해외의 트위터와 비슷한 서비스로 NHN에 인수됨.&lt;/P&gt;
&lt;P&gt;* 위자드닷컴 &lt;br /&gt;&amp;nbsp;&amp;nbsp; 순위: 1819위&lt;br /&gt;&amp;nbsp;&amp;nbsp; 분류: 개인화 웹페이지&lt;br /&gt;&amp;nbsp;&amp;nbsp; URL: &lt;A href="http://wzd.com/"&gt;http://wzd.com/&lt;/A&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 특이사항: 웹위젯 시장을 선도하는 사이트.&lt;/P&gt;
&lt;P&gt;* 온오프믹스 (ONOFFMIX)&lt;br /&gt;&amp;nbsp; 순위: 7546위&lt;br /&gt;&amp;nbsp; 분류: 모임 및 이벤트 관리 서비스&lt;br /&gt;&amp;nbsp; URL: &lt;A href="http://www.onoffmix.com/"&gt;http://www.onoffmix.com/&lt;/A&gt;&lt;br /&gt;&amp;nbsp; 특이사항: 티워와 마찬가지로 리트머스에서 지원하는 사이트.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;순위는 2009.5.22 랭키닷컴 기준입니다.&lt;/P&gt;
&lt;P&gt;이렇게 몇개의 사이트를 보니, nhn과 연관된 사이트가 여럿이군요. 그리고 리트머스가 지원하는 사이트가 몇군데 됩니다.&lt;br /&gt;역시, 순위를 보면 신생 웹서비스가 메이저 웹서비스까지 가는 데는 아직도 험난해 보입니다.&lt;/P&gt;</description>
			<category>IT이야기</category>
			<category>미투데이</category>
			<category>스프링노트</category>
			<category>온오프믹스</category>
			<category>웹서비스</category>
			<category>위버스</category>
			<category>위자드닷컴</category>
			<category>티워</category>
			<author>네오제이</author>
			<guid>http://sixthman.tistory.com/210</guid>
			<comments>http://sixthman.tistory.com/210#entry210comment</comments>
			<pubDate>Fri, 22 May 2009 21:45:08 +0900</pubDate>
		</item>
		<item>
			<title>Windows 7에서 SCM(Service Control Manager)의 개선점</title>
			<link>http://sixthman.tistory.com/209</link>
			<description>&lt;br /&gt;
&amp;nbsp;윈도우의 백그라운드 프로세스에는 두 가지 형태가 있다. &lt;br /&gt;
&amp;nbsp;하나는 Windows Service이고, 나머지 하나는 Windows Task이다.&amp;nbsp; &lt;br /&gt;
&amp;nbsp;현재 윈도우2000 이후의 운영체제를 사용하고 있다면, 이러한 프로그램들을 이미 알게 모르게 사용하고 있을 것이다. 이러한 백그라운드 프로세스는 여러 용도로 사용된다. 유닉스 시스템에서는 데몬이라고 말하는데(죽지 않는다고 해서 붙여진 이름이란다.) 주로 어떤 주기적인&amp;nbsp;작업이나 시스템이 기동하는 순간부터 종료될 때까지 필요한 작업, 어플리케이션에게 어떤 서비스를 제공하는 기능들을 수행하는 프로그램들이 이러한 형태를 띠게 된다. &lt;br /&gt;
&amp;nbsp;Windows Service는 SCM(Serivce Control Manager)를 통해서 제어하게 되고, Windows Task는 Windows Scheduler를 통해서 사용할 수 있다. &lt;br /&gt;
&amp;nbsp;이 중에서 조만간 세상에 모습을 드러낼 Windows 7에서 강화된 SCM의 기능에 대해서 이야기 하고자 한다. &lt;br /&gt;
&amp;nbsp;서비스는 윈도우가 부팅될 때 함께 시작하는 것들이 있는데, 이러한 서비스가 많아 질수록 운영체제의 부팅 속도에 영향을 주게 된다. 따라서 굳이 부팅과 함께 동작할 필요가 없는 서비스까지 자동으로 시작하게 만들지 않는 것이 효율적인 서비스 프로그램을 만드는 첫 번째 관문이다. 그래서 Windows 7에서는 서비스가 시작할 수 있는 조건을 좀 더 세밀하게 제어할 수 있는 장치가 마련 되었는데 이것을 Trigger Start라고 한다.&amp;nbsp;trigger의 종류로는&amp;nbsp;첫 번째 IP 주소의 도착, 마지막 IP 주소의 출발, 도메인에 시스템이 join하거나 disjoin하는 것, 하드웨어의 연결, Group policy의 변화와 같은 것들이 포함된다. 서비스 프로그램은 이러한 trigger들을 통해서 시작/중지될 수 있다. 예를 들면 디지털 카메라가 연결되면 이미지 장치 서비스가 동작하는 것이다. 이러한 trigger들은 비교적 빈번히 일어나는 것이 아니기 때문에 부팅과 종료&amp;nbsp;속도를 개선시킬 수 있고, 서비스의 외부로부터의 공격에 대한 노출을 줄일 수 있으며, 서비스가 사용하는 리소스를 아낄 수 있는 장점이 있다. trigger에 의한 동작은 현재 서비스의 시작과 종료에만 국한되고 다른 동작들은 아직 지원하지 않는다.&amp;nbsp;&lt;br /&gt;
&amp;nbsp;Windows 7에 포함되어 있는 command-line service 제어 도구인 sc.exe도 service trigger를 지원하도록 업데이트 되었다.&amp;nbsp; 다음은 sc.exe의 triggerinfo 명령어를 쳤을 때 보이는 help 정보이다. &lt;br /&gt;
&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://cfile2.uf.tistory.com/original/18440C0B49F9B0B4646A55" rel="lightbox" target="_blank"&gt;&lt;img src="http://cfile2.uf.tistory.com/image/18440C0B49F9B0B4646A55" alt="" filemime="image/png" filename="사용자 지정 1.png" height="381" width="508"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://cfile2.uf.tistory.com/original/1242F30B49F9B0B5DC742A" rel="lightbox" target="_blank"&gt;&lt;img src="http://cfile2.uf.tistory.com/image/1242F30B49F9B0B5DC742A" alt="" filemime="image/png" filename="사용자 지정 2.png" height="68" width="500"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="entry-ccl" style="clear: both; text-align: right; margin-bottom: 10px"&gt;
	&lt;img id="ccl-icon-209-0" class="entry-ccl-by" src="http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png" alt="저작자 표시"/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;
		&lt;Work rdf:about=""&gt;
			&lt;license rdf:resource="http://creativecommons.org/licenses/by-fr/2.0/kr/" /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about="http://creativecommons.org/licenses/by-fr/"&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/Reproduction"/&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/Distribution"/&gt;
			&lt;requires rdf:resource="http://web.resource.org/cc/Notice"/&gt;
			&lt;requires rdf:resource="http://web.resource.org/cc/Attribution"/&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>IT이야기</category>
			<author>erratum</author>
			<guid>http://sixthman.tistory.com/209</guid>
			<comments>http://sixthman.tistory.com/209#entry209comment</comments>
			<pubDate>Thu, 30 Apr 2009 21:22:57 +0900</pubDate>
		</item>
		<item>
			<title>식사하는 철학자 문제</title>
			<link>http://sixthman.tistory.com/208</link>
			<description>&lt;DIV style="TEXT-ALIGN: justify; FONT-FAMILY: malgun gothic; COLOR: rgb(51,51,51); FONT-SIZE: 10pt"&gt;
&lt;P&gt;프로세스의 기아상태를 설명하기 위해 다익스트라(Dijkstra)에 의해 제안된 문제로 자원을 공유하는 동기화된 병행프로세서를 위한 표준 모델&lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;&lt;FONT color=#320251&gt;&amp;nbsp;"식사하는 철학자" 문제의 조건&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;
&lt;br /&gt;철학자들은 원형테이블을 공유하며, 이 테이블은 5개의 의자로 둘러 싸여 있다. 테이블 중앙에는 한 접시의 음식이 있고, 테이블에는 다섯 개의 젓가락이 놓여있다.&lt;br /&gt;
&lt;br /&gt;&lt;div class="imageblock left" style="float: left; margin-right: 10px;"&gt;&lt;a href="http://cfile3.uf.tistory.com/original/156EEC1E49F95E4EDF9380" rel="lightbox" target="_blank"&gt;&lt;img src="http://cfile3.uf.tistory.com/image/156EEC1E49F95E4EDF9380" alt="" filemime="image/jpeg" filename="1.jpg" height="146" width="145"/&gt;&lt;/a&gt;&lt;/div&gt;-&amp;shy; 철학자가 생각할 때는 다른 동료들과 상호작용하지 않는다.&lt;br /&gt;
-&amp;nbsp;철학자는 배가고프면 자신에 가장 가까이 있는 두개의 젓가락을 집으려고 시도한다.&lt;br /&gt;
&amp;shy;- 식사 중에는 젓가락을 놓지 않고, 식사를 마치면 젓가락 두개를 모두 놓고 다시 생각을 시작한다.&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;
&lt;STRONG&gt;&lt;FONT color=#320251&gt;&lt;br /&gt;
"식사하는 철학자" 문제에 의한 교착 상태 설명&lt;br /&gt;
&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;
&lt;FONT color=#320251&gt;가.&amp;nbsp;상호배제(mutual exclusion)&lt;/FONT&gt;&lt;br /&gt;
&amp;nbsp;- 철학자는 배가 고프면 자신에게 가까운 양쪽의 젓가락을 집어야 식사가 가능하다. 하지만 옆의 다른 철학자가 이미 젓가락을 집어서 사용하고 있으면 식사를 마치고 젓가락을 놓을 때까지 대기 하여야 한다.&lt;br /&gt;
&amp;nbsp;- 이것은 상호배제(mutual exclusion) 조건으로 최소한 하나의 자원이 비공유 모드로 점유되어 어느 자원에 대해 한 프로세스가 이미 사용 중이면 다른 프로세스는 기다려야 하는 것을 보여준다.&lt;br /&gt;
&lt;FONT color=#320251&gt;나.&amp;nbsp;점유와 대기(Hold and wait)&lt;/FONT&gt;&lt;br /&gt;
&amp;nbsp;- 배고픈 철학자는 자신의 양옆 중 놓여있는 젓가락을 사용하기 위해 하나를 집고, 다른 철학자가 쓰고 있는 다른 하나의 젓가락을 식사가 끝마쳐져서 놓여지기를 기다리는 경우가 발생&lt;br /&gt;
&amp;nbsp;- 이것은 점유와 대기(Hold and wait) 조건으로 하나 이상의 자원을 할당받은 채로 나머지 자원을 할당 받기 위해 다른 프로세스의 자원이 해제되기를 기다리는 프로세스가 존재하는 경우이다.&lt;br /&gt;
&lt;FONT color=#320251&gt;다. 비선점(Nopreemption)&amp;nbsp;&lt;/FONT&gt;&lt;br /&gt;
&amp;nbsp;- 젓가락은 미리 선점할 수 없다. 즉 젓가락을 집고 있는 중 강제로 방출할 수 없으며, 식사를 마친 철학자가 젓가락을 자발적으로만 놓을 때만 사용 가능하다.&lt;br /&gt;
&amp;nbsp;- 이것은 자원을 할당받은 프로세스로부터 자원을 강제로 빼앗지 못하는 비선점(Nopreemption) 조건이다.&lt;br /&gt;
&lt;FONT color=#320251&gt;라. 순환대기(circular wait)&lt;/FONT&gt;&lt;br /&gt;
&amp;nbsp;- 철학자1은 철학자2가 가지고 있는 젓가락을 내려놓기를 기다리고 있고, 철학자2는 철학자3을, 철학자3은 철학자4를, 철학자4는 철학자5를, 철학자5는 철학자1의 젓가락을 기다리는 상황이 발생&lt;br /&gt;
&amp;nbsp;- 이것은 자원 할당 그래프 상에서 프로세스의 환형 사슬이 존재하는 것으로 순환대기(circular wait) 조건이다.&lt;/P&gt;
&lt;P&gt;∴ 교착상태 발생은 다익스트라(Dijkstra)가 "식사하는 철학자" 문제에서 설명했던 상호배제, 점유와 대기, 비선점, 순환대기의 4가지 원인이 동시에 성립되어야 발생한다.&lt;br /&gt;
&lt;/P&gt;&lt;/DIV&gt;</description>
			<category>IT이야기</category>
			<author>sanmaul</author>
			<guid>http://sixthman.tistory.com/208</guid>
			<comments>http://sixthman.tistory.com/208#entry208comment</comments>
			<pubDate>Thu, 30 Apr 2009 17:21:01 +0900</pubDate>
		</item>
		<item>
			<title>regular expresion 3 대해</title>
			<link>http://sixthman.tistory.com/207</link>
			<description>&lt;P&gt;고수 :&amp;nbsp; 프로그래머라면 regular expression을 다양한 언어에서 능수 능란하게 사용해야 돼!&lt;br /&gt;
regular expresion 2에서 php와 javascript로 했으니 마지막으로&amp;nbsp;. python이나 java로 같은 문제를 풀어바.&lt;br /&gt;
문제 :&amp;nbsp;&amp;nbsp;html의 img의 src를 읽어와서 output으로&amp;nbsp;뿌려라.&lt;br /&gt;

&lt;TABLE style="BORDER-COLLAPSE: collapse" cellSpacing=1 cellPadding=1 width=490 bgColor=#ffffff&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style="BORDER-RIGHT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-BOTTOM: #dadada 1px solid" width="100%"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;img src="/img/logo1.gif" &amp;gt;&lt;br /&gt;
&amp;lt;img src='/img/logo2.gif' &amp;gt;&lt;br /&gt;
&amp;lt;img src="&lt;A href="http://www.example.com/img/logo3.gif"&gt;&lt;FONT color=#5a5194&gt;http://www.example.com/img/logo3.gif&lt;/FONT&gt;&lt;/A&gt;" &amp;gt;&lt;br /&gt;
&amp;lt;img src=/img/logo4.gif &amp;gt;&lt;br /&gt;
&amp;lt;img src="/img/logo5.gif" /&amp;gt;&lt;br /&gt;
&amp;lt;!-- src URL 뒤에 공백이 없는 버전 --&amp;gt;&lt;br /&gt;
&amp;lt;img src="/img/logo6.gif"/&amp;gt;&lt;br /&gt;
&amp;lt;img src=/img/logo7.gif&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
나 :&amp;nbsp; 옙. 그럼 python으로 풀어 볼게요. &lt;br /&gt;
&lt;br /&gt;python 프로그램 환경 설정.&lt;br /&gt;
&lt;BR DESIGNTIMESP="28824"&gt;
&lt;TABLE cellSpacing=1 cellPadding=4 width=500 bgColor=#3c62c6 border=0 designtimesp="28825"&gt;
&lt;TBODY&gt;
&lt;TR designtimesp="28826"&gt;
&lt;TD width=600 designtimesp="28827"&gt;
&lt;DIV designtimesp="28828"&gt;&lt;STRONG DESIGNTIMESP="28829"&gt;&lt;FONT color=#ffffff DESIGNTIMESP="28830"&gt;▶python&amp;nbsp;필수&amp;nbsp;환경&lt;/FONT&gt;&lt;/STRONG&gt; &lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=#ffffff designtimesp="28831"&gt;
&lt;TD designtimesp="28832"&gt;
&lt;DIV designtimesp="28833"&gt;1. 최신 버젼 설치(&lt;A href="http://www.python.org/download/" DESIGNTIMESP="28834"&gt;&lt;STRONG&gt;&lt;FONT color=#4077a0&gt;http://www.python.org/download/&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;)&lt;/DIV&gt;
&lt;DIV designtimesp="28835"&gt;&amp;nbsp; 2009년 4월 30일 현재 : 2.6.2&lt;/DIV&gt;
&lt;DIV designtimesp="28836"&gt;2. python용 debug 설치&lt;/DIV&gt;
&lt;DIV designtimesp="28837"&gt;&amp;nbsp;2-1. CPython 설치(&lt;A href="http://www.python.org/download/" DESIGNTIMESP="28838"&gt;&lt;STRONG&gt;&lt;FONT color=#4077a0&gt;http://www.python.org/download/&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;)&lt;/DIV&gt;
&lt;DIV designtimesp="28839"&gt;&amp;nbsp;2-1. python 버젼에 맞는 wxPython 설치(&lt;A href="http://www.wxpython.org/" DESIGNTIMESP="28840"&gt;&lt;STRONG&gt;&lt;FONT color=#4077a0&gt;http://www.wxpython.org/&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;)&lt;/DIV&gt;
&lt;DIV designtimesp="28841"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; python용 GUI toolkit&lt;/DIV&gt;
&lt;DIV designtimesp="28842"&gt;&amp;nbsp;2-2. python dbg(winpdg) 설치(&lt;A href="http://winpdb.org/" DESIGNTIMESP="28843"&gt;&lt;STRONG&gt;&lt;FONT color=#4077a0&gt;http://winpdb.org/&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;)&lt;/DIV&gt;
&lt;DIV designtimesp="28844"&gt;&amp;nbsp; 2009년 4월 30일 현재 : 1.4.6&lt;/DIV&gt;
&lt;DIV designtimesp="28845"&gt;3. python 예제 flle url: &lt;A href="http://docs.python.org/tutorial/" DESIGNTIMESP="28846"&gt;&lt;STRONG&gt;&lt;FONT color=#4077a0&gt;http://docs.python.org/tutorial/&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV designtimesp="28847"&gt;
&lt;DIV designtimesp="15238"&gt;4. python help file 기본 url: &lt;A href="http://docs.python.org/reference/index.html" DESIGNTIMESP="15239"&gt;&lt;STRONG&gt;&lt;FONT color=#4077a0&gt;http://docs.python.org/reference/index.html&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV designtimesp="15238"&gt;
&lt;DIV designtimesp="15238"&gt;5. python help file&amp;nbsp;모듈 url: &lt;A href="http://docs.python.org/library/index.html"&gt;&lt;STRONG&gt;&lt;FONT color=#4077a0&gt;http://docs.python.org/library/index.html&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P DESIGNTIMESP="28849"&gt;
&lt;TABLE cellSpacing=1 cellPadding=4 width=500 bgColor=#3c62c6 border=0 designtimesp="28850"&gt;
&lt;TBODY&gt;
&lt;TR designtimesp="28851"&gt;
&lt;TD width=600 designtimesp="28852"&gt;
&lt;DIV designtimesp="28853"&gt;&lt;FONT color=#ffffff DESIGNTIMESP="28855"&gt;&lt;STRONG&gt;▶python&amp;nbsp;Shell 사용법&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=#ffffff designtimesp="28856"&gt;
&lt;TD designtimesp="28857"&gt;
&lt;DIV designtimesp="28858"&gt;1. py파일에서 Edit with IDLE 실행.&lt;/DIV&gt;
&lt;DIV designtimesp="28858"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;DIV designtimesp="28863"&gt;
&lt;TABLE cellSpacing=1 cellPadding=4 width=500 bgColor=#3c62c6 border=0 designtimesp="28864"&gt;
&lt;TBODY&gt;
&lt;TR designtimesp="28865"&gt;
&lt;TD width=600 designtimesp="28866"&gt;
&lt;DIV designtimesp="28867"&gt;&lt;STRONG DESIGNTIMESP="28868"&gt;&lt;FONT color=#ffffff DESIGNTIMESP="28869"&gt;▶python&amp;nbsp;debug 사용법&lt;/FONT&gt;&lt;/STRONG&gt; &lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=#ffffff designtimesp="28870"&gt;
&lt;TD designtimesp="28871"&gt;
&lt;DIV designtimesp="28872"&gt;1. py파일에 윈도우 마우스 오른쪽 키 연결.&lt;/DIV&gt;
&lt;DIV designtimesp="28873"&gt;C:\Python24\Scripts\winpdb_start.bat 를 아래의 코드로 만든다.&lt;/DIV&gt;
&lt;DIV designtimesp="28873"&gt;-------------------------------------------------&lt;/DIV&gt;
&lt;DIV designtimesp="28873"&gt;@echo off&lt;/DIV&gt;
&lt;DIV designtimesp="28873"&gt;start "" "C:\Python24\Scripts\winpdb_.pyw" %1&lt;/DIV&gt;
&lt;DIV designtimesp="28873"&gt;-------------------------------------------------&lt;/DIV&gt;
&lt;DIV designtimesp="28873"&gt;아래와 같이 입력&lt;/DIV&gt;
&lt;DIV designtimesp="28873"&gt;[HKEY_CLASSES_ROOT\Python.File\shell\Run with Winpdbg]&lt;/DIV&gt;
&lt;DIV designtimesp="28873"&gt;[HKEY_CLASSES_ROOT\Python.File\shell\Run with Winpdbg\command]&lt;br /&gt;
@="\"C:\\Python24\\Scripts\\winpdb_start.bat\" \"%1\""&lt;/DIV&gt;
&lt;DIV designtimesp="28873"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV designtimesp="28874"&gt;2. 기본 명령어 확인 방법&lt;/DIV&gt;
&lt;DIV designtimesp="28875"&gt;cmd 창에서 help를 치면 확인 가능&lt;/DIV&gt;
&lt;DIV designtimesp="28876"&gt;launch를 실행하면 debug를 실행시킨 폴더에 있는 파일을 debugging 할 수 있다.&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;python에서 regular expression을 사용하는 방법.&lt;br /&gt;
&lt;br /&gt;python에서는 Re라는 객체를 제공해준다.&lt;br /&gt;
(&lt;A href="http://docs.python.org/library/re.html"&gt;http://docs.python.org/library/re.html&lt;/A&gt;)&lt;br /&gt;
&lt;br /&gt;re.complie(pattern,flag)&lt;br /&gt;
생성 시에 두번째 파라미터의 의미&lt;br /&gt;
re.I:대소문자 구분하지 않음&lt;br /&gt;
re.M: multiline&amp;nbsp;지원&lt;br /&gt;
&lt;br /&gt;compile.match()&lt;br /&gt;
&lt;br /&gt;사용법&lt;br /&gt;
import re&lt;br /&gt;
pattern = re.compile("pattern",옵션)&lt;br /&gt;
data = patern.match("원문")&lt;br /&gt;
&lt;br /&gt;제공하는 함수 &lt;br /&gt;
library 참고.&lt;br /&gt;
&lt;br /&gt;검색결과의 부분 이용하기(Backreference)&lt;br /&gt;
data.group();&lt;br /&gt;
data.groups(); &lt;br /&gt;
&lt;br /&gt;python으로 푼 내용.&lt;br /&gt;

&lt;TABLE style="BORDER-COLLAPSE: collapse" cellSpacing=1 cellPadding=1 width=490 bgColor=#ffffff&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style="BORDER-RIGHT: #dadada 1px solid; BORDER-TOP: #dadada 1px solid; BORDER-LEFT: #dadada 1px solid; BORDER-BOTTOM: #dadada 1px solid" width="100%"&gt;
&lt;P&gt;import re&lt;/P&gt;
&lt;P&gt;def displaymatch(match):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if match is None:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return None&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return '%s' % match.groups(0)&lt;/P&gt;
&lt;P&gt;htmlfile = open('test.html','r')&lt;br /&gt;
lines = htmlfile.readlines()&lt;/P&gt;
&lt;P&gt;imgsrc = re.compile("\&amp;lt;img src=[\\\"\\\']?([^\&amp;gt;^\\\"^\\\']+)[^\&amp;gt;]*/?\&amp;gt;",re.I)&lt;br /&gt;
for value in lines :&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; result = displaymatch(imgsrc.match(value))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( result != None ) : print result&lt;/P&gt;
&lt;P&gt;htmlfile.close()&lt;br /&gt;
&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;</description>
			<category>IT이야기</category>
			<category>Python</category>
			<category>Regular Expression</category>
			<author>myidojh</author>
			<guid>http://sixthman.tistory.com/207</guid>
			<comments>http://sixthman.tistory.com/207#entry207comment</comments>
			<pubDate>Thu, 30 Apr 2009 14:21:12 +0900</pubDate>
		</item>
	</channel>
</rss>

