<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>It&#039;s just like pok</title>
		<link>http://poksion.cafe24.com/poklog/</link>
		<description></description>
		<language>ko</language>
		<pubDate>Tue, 27 Oct 2009 21:10:54 +0900</pubDate>
		<generator>Tattertools 1.1.3 : Transition</generator>
		<item>
			<title>Gauss-Seidel Method</title>
			<link>http://poksion.cafe24.com/poklog/entry/Gauss-Seidel-Method</link>
			<description>		&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot;&gt;
		//&lt;![CDATA[

			var __getEmbedCode;
		
			if (typeof getEmbedCode == &quot;function&quot;) {
				
				__getEmbedCode = getEmbedCode;

				getEmbedCode = function(move, width, height, id, bg, FlashVars, menu, transparent, quality, bgcolor, allowScriptAccess, version) {
					if (transparent == undefined) transparent = &quot;opaque&quot;;
					return __getEmbedCode(move, width, height, id, bg, FlashVars, menu, transparent, quality, bgcolor, allowScriptAccess, version);
				}

			}
			
		//]]&gt;
		&lt;/script&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;1. 방정식의 근 : 대수적 방법과 Iterative Method&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;방정식(Equation) 으로부터 근을 구할때 &#039;근의 공식&#039;등이 존재하는 경우 일반해가 있다고 하는데, 이러한 해를 대수적 해라고 한다. 만일 대수적인 해가 존재할 경우 근을 구하는 방식은 매우 쉽다. - 단지 공식에 넣으면 된다!&lt;br /&gt;&lt;br /&gt;Iterative Method는 근을 구하는 또 다른 방법이다. 이 방법은 근에 근접하는 값을 만들어내는 알고리듬이 있고 이 알고리듬을 반복하여 근과의 차이 (tolerrence 혹은 error)가 얼마 이하가 되면 반복을 멈추어 근을 구하는 방법이다. 유명한 Iterative Method 중에는 Newton-Raphson 방법이 있고 Gauss-Seidel Method의 모티브가 되는 Simple Fixed-point Iteration Method가 있다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;2. Simple Fixed-point Iteration Method&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Simple Fixed-point Iteration Method는 개념이 사실 단순하다.&lt;br /&gt;&lt;blockquote&gt;f(x) = 0&lt;/blockquote&gt;이라는 방정식의 근을 구한다고 하자. 위의 방정식 양변에 x를 더하여 f(x) + x = x 라는 새로운 식을 만들고 g(x) = f(x) + x 라고 하면 우리가 구하는 식은&lt;br /&gt;&lt;blockquote&gt;g(x) = x&lt;/blockquote&gt;라는 식의 방정식이고 이것은 그래프적으로&lt;br /&gt;&lt;blockquote&gt;y = g(x)라는 그래프와 y = x 라는 그래프의 교점&lt;/blockquote&gt;임을 알수 있다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2439/4049876234_d3e09a8316_o.png&quot; width=&quot;427&quot; height=&quot;415&quot; alt=&quot;simple_fixed&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;위 그림에서 f(x) = sqrt(x) - x = 0 을 구하는게 원래 목적이었다면 g(x) = sqrt(x)라고 하고 g(x) = x의 해를 구하는것과 f(x) = 0 의 해를 구하는게 같음을 알 수 있다.&lt;br /&gt;&lt;br /&gt;이제부터가 이 방법의 재미난 점인데, 그림과 같이 x(i+1) = g( x(i) ) 라고 하고 i를 증가하면 x(i+1)이 y=g(x)와 y=x의 교점에 다가감을 알수 있다. 그리하여 x의 sequence가 Cauchy Criterion을 만족하면 (즉 어떤 i 가 있어서 |x(i+1) - x(i)| &amp;lt; tolerance) 그때의 x(i+1)를 해라고 할수 있게 된다.&lt;br /&gt;&lt;br /&gt;위 내용을 Octave(matlab) 코드로 짜보면 다음과 같다.&lt;br /&gt;&lt;fieldset class=&quot;geshi r2&quot;&gt;&lt;legend&gt;&lt;span class=&quot;g_lang&quot; style=&quot;color: rgb(170, 170, 170);&quot;&gt;(Language : perl)&lt;/span&gt;&lt;/legend&gt;&lt;div class=&quot;code&quot;&gt;
g = inline&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;sqrt(x)&#039;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;x&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
tol = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;.0e&lt;span class=&quot;nu0&quot;&gt;-7&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
i = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;
x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0.2&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; true&lt;br /&gt;
&amp;nbsp; &amp;nbsp; x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; = g&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt; x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt; &lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/abs.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;abs&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; - x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &amp;lt; tol &lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; i = i + &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;
end&lt;br /&gt;
i, x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/fieldset&gt;&lt;br /&gt;그러면, 24번만에 해를 도출해 낸걸 알수 있다&lt;br /&gt;(i=24, ans=1.0000 뭐 이런 비슷한 값을 출력한다.)&lt;br /&gt;&lt;br /&gt;물론 항상 해에 접근하는것은 아니고 &#039;수렴조건&#039;이 있는데, 그것은 |g&#039;(x)| &amp;lt; 1 이다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;3. Gauss-Seidel Method&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Gauss-Seidel Method는 Simple Fixed-point 방법과 매우 유사하다. 다른 점은 방정식이&lt;br /&gt;&lt;blockquote&gt;1. multicomponent 인 경우&lt;br /&gt;2. linear system 인 경우&lt;/blockquote&gt;인데, 간단히 말하면 &#039;연립 일차방정식&#039;의 경우에 해를 &#039;반복적&#039;으로 구하는 방법이다.&lt;br /&gt;&lt;br /&gt;Applied Numerical Methods with MATLAB 이라는 책에 있는 예제인&lt;br /&gt;&lt;blockquote&gt;3x - 0.1y - 0.2z = 7.85&lt;br /&gt;0.1x - 7y - 0.3z = -19.3&lt;br /&gt;0.3x - 0.2y + 10z = 71.4&lt;/blockquote&gt;의 해를 Gauss-Seidel Method로 구하는 matlab 코드를 보면,&lt;br /&gt;&lt;fieldset class=&quot;geshi r2&quot;&gt;&lt;legend&gt;&lt;span class=&quot;g_lang&quot; style=&quot;color: rgb(170, 170, 170);&quot;&gt;(Language : perl)&lt;/span&gt;&lt;/legend&gt;&lt;div class=&quot;code&quot;&gt;% from 3x - &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.1y - &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.2z = &lt;span class=&quot;nu0&quot;&gt;7.85&lt;/span&gt;&lt;br /&gt;
% x = &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;7.85&lt;/span&gt; + &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.1y + &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.2z&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;/&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;br /&gt;
f = inline&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;(7.85 + 0.1*y + 0.2*z)/3&#039;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;y&#039;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;z&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
% from &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.1x - 7y - &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.3z = &lt;span class=&quot;nu0&quot;&gt;-19.3&lt;/span&gt;&lt;br /&gt;
% &lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/y.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;y&lt;/span&gt;&lt;/a&gt; = &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-19.3&lt;/span&gt; - &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.1x + &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.3z&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;/&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;&lt;br /&gt;
g = inline&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;(-19.3 - 0.1*x + 0.3*z)/7&#039;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;x&#039;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;z&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
% from &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.3x - &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.2y + 10z = &lt;span class=&quot;nu0&quot;&gt;71.4&lt;/span&gt;&lt;br /&gt;
% z = &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;71.4&lt;/span&gt; - &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.3x + &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;.2y&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;/&lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;&lt;br /&gt;
h = inline&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;(71.4 - 0.3*x + 0.2*y)/10&#039;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;x&#039;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;y&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
i = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;
tol = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;.0e&lt;span class=&quot;nu0&quot;&gt;-7&lt;/span&gt;;&lt;br /&gt;
x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;=&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;; &lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/y.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;y&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;=&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;; z&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;=&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; true&lt;br /&gt;
&amp;nbsp; &amp;nbsp; x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; = f&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt; &lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/y.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;y&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;, z&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/y.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;y&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; = g&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt; x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;, z&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; z&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; = h&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt; x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;, &lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/y.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;y&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt; &lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/abs.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;abs&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;max&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;-x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/y.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;y&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;-&lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/y.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;y&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; z&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;-z&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &amp;lt; tol &lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; &amp;nbsp; i = i + &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;
end&lt;br /&gt;
i, x=x&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;, &lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/y.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;y&lt;/span&gt;&lt;/a&gt;=&lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/y.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;y&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;, z=z&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;nu0&quot;&gt;+1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/fieldset&gt;&lt;br /&gt;만일&lt;br /&gt;&lt;blockquote&gt;x(i+1) = f( y(i), z(i) );&lt;br /&gt;y(i+1) = g( x(i+1), z(i) );&lt;br /&gt;z(i+1) = h( x(i+1), y(i+1) );&lt;/blockquote&gt;부분이&lt;br /&gt;&lt;blockquote&gt;x(i+1) = f( y(i), z(i) );&lt;br /&gt;y(i+1) = g( x(i), z(i) );&lt;br /&gt;z(i+1) = h( x(i), y(i) );&lt;/blockquote&gt;가 되면, 즉 현재 루프에서 적용된것값을 적용되자마자 써먹는게 아니고 루프를 다 돌고 사용한다면, 그 방법을&lt;br /&gt;Jacobi iterative method 라고 한다.&lt;br /&gt;&lt;br /&gt;Simple fixed-point iterative method처럼 Gauss-Seidel도 수렴조건이 있는데, 연립일차 방정식을 matrix로 나타냈을때 그 matrix가 &#039;&lt;a href=&quot;http://en.wikipedia.org/wiki/Diagonally_dominant_matrix&quot; target=&quot;_blank&quot;&gt;diagonal dominant&lt;/a&gt;&#039; 하면 된다.&lt;br /&gt;</description>
			<category>수학 이야기</category>
			<category>Octave</category>
			<category>수학</category>
			<author> (pok)</author>
			<guid>http://poksion.cafe24.com/poklog/133</guid>
			<comments>http://poksion.cafe24.com/poklog/entry/Gauss-Seidel-Method#entry133comment</comments>
			<pubDate>Tue, 27 Oct 2009 20:46:14 +0900</pubDate>
		</item>
		<item>
			<title>Octave in Vista</title>
			<link>http://poksion.cafe24.com/poklog/entry/Octave-in-Vista</link>
			<description>Octave(이하 옥타브)는 Matlab에 대응하는 오픈소스 프로그램이다.&lt;br /&gt;&lt;br /&gt;최근 학교에서 Matlab을 이용한 수치해석이나 확률과정 개론을 배운다.&lt;br /&gt;그런데 Matlab은 고가의 소프트웨어라서 집에서는 오픈소스 프로그램인 옥타브를 사용한다.&lt;br /&gt;&lt;br /&gt;이 글은 3.2 버전에 맞춰 작성되었다.&lt;br /&gt;옥타브 3.0버전에서 고민하던 문제들이 3.2버전에서 단박에 풀려서 3.2버전을 사용하기를 강력히 추천한다.&lt;br /&gt;&lt;br /&gt;먼저 옥타브는 커맨드라인 프로그램이다. 그래서 옥타브가 아쉽다기보다는 윈도용 커맨드라인 환경이 아쉬운 경우가 종종있다. 가장 아쉬웠던것은 글꼴이었고, 옥타브 3.0버전에서는 &#039;삐&#039;거리던 스피커음도 불만이었다.&lt;br /&gt;&lt;br /&gt;먼저 커맨드라인 글꼴바꾸기&lt;br /&gt;&lt;a href=&quot;http://smallvoid.com/article/winnt-cmd-add-font.html&quot; target=&quot;_blank&quot;&gt;http://smallvoid.com/article/winnt-cmd-add-font.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;내경우에는 HKEY_LOCAL_MACHINE \SOFTWARE \Microsoft \Windows NT \CurrentVersion \Console \TrueTypeFont 에서 나눔코딩고딕을 콘솔 폰트로 설정해서 사용하고 있다.&lt;br /&gt;

&lt;img src=&quot;http://farm4.static.flickr.com/3439/3995508884_98a9343bb4_o.png&quot; width=&quot;249&quot; height=&quot;155&quot; alt=&quot;cmd_font&quot; /&gt;

&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;그리고 커맨드라인에서 PC스피커 (bell service) 끄는 방법.&lt;br /&gt;&lt;a href=&quot;http://superuser.com/questions/10575/turning-off-the-cmd-window-beep-sound&quot; target=&quot;_blank&quot;&gt;http://superuser.com/questions/10575/turning-off-the-cmd-window-beep-sound&lt;/a&gt;&lt;br /&gt;커맨드라인에서 벨을 끄는 방법은 여러가지 있는데 내가 사용했던 방법은 아래와 같다.&lt;br /&gt;&lt;blockquote&gt;net start beep&lt;/blockquote&gt;그런데 이것은 재부팅때마다 재설정을 해야했고, 다음은 재부팅마다 재설정을 할 필요가 없게 만드는 커맨드다.&lt;br /&gt;&lt;blockquote&gt;sc config beep start= disabled&lt;/blockquote&gt;&lt;br /&gt;이 방법 말고도 &#039;장치관리자&#039;를 통해 beep 을 제거하는 방법이 있다. 제어판의 장치관리자를 실행한후에 보기 - 숨김 장치 표시 를 해서 beep 장치를 &#039;사용안함&#039;으로 설정하는 방식이다.&lt;br /&gt;

&lt;img src=&quot;http://farm4.static.flickr.com/3490/3995509018_e00c8e7e7a_o.png&quot; width=&quot;590&quot; height=&quot;501&quot; alt=&quot;hide_device&quot; /&gt; &lt;br/&gt;
&lt;img src=&quot;http://farm3.static.flickr.com/2627/3994748767_2fdfe343c8_o.png&quot; width=&quot;479&quot; height=&quot;428&quot; alt=&quot;stop_beep&quot; /&gt;

&lt;br /&gt;다행히도 옥타브 3.2버전의 less는 &#039;삐&#039;거리는 소리 대신에 윈도 효과음을 사용하고 그것도 똑똑히 사용해서 더이상 저 설정이 필요없게 되었다.&lt;br /&gt;&lt;br /&gt;나는 cygwin의 bin 디렉토리에 path가 걸려있어서 자주사용하는 프로그램들은 그곳에 배치스크립트를 작성해 넣어둔다. 옥타브의 경우는 cygwin/bin/octave.bat 파일로 넣어두어사용하며 그 내용은 다음과 같다.&lt;br /&gt;&lt;blockquote&gt;cd C:\Users\pok\Documents\workspace\Octave&lt;br /&gt;&quot;C:\Octave\3.2.2_gcc-4.3.0\bin\octave-3.2.2.exe&quot;&lt;br /&gt;rem start C:\Users\pok\Documents\Utils\Console2\Console.exe -c C:\Users\pok\Documents\Utils\Console2\console_octave.xml&lt;/blockquote&gt;저렇게 하면 내 &#039;workspace&#039;가 pwd(present working directory, current working directory라 하여 cwd라고도 한다)로 설정되어 .m 파일등을 작성할때 편리하다.&lt;br /&gt;&lt;br /&gt;아래 주석(rem) 되어 있는것은 cosole2라는 꽤 훌륭한 cmd 대체 프로그램을 이용할때인데, 이놈이 한글입력이 되지 않아 현재는 사용하지 않는다.&lt;br /&gt;&lt;br /&gt;3.0버전에서는 사용자 디렉토리 밑에 무조건 &#039;octave&#039;라는 폴더를 만들어버려서 프로그램실행 창에서 &#039;octave&#039;라고 치면 그 디렉토리가 열렸다. 3.2버전에서는 그런만행을 하지 않아 꼭 octave.bat이라고 칠 필요없이 octave라고만 쳐도 되서 편리하다.&lt;br /&gt;&lt;br /&gt;다음은 내 local home directory에 있는 .octaverc 파일의 내용.&lt;br /&gt;&lt;blockquote&gt;addpath(&#039;C:\Users\pok\Documents\workspace\Octave&#039;);&lt;br /&gt;edit(&quot;EDITOR&quot;, &quot;C:\\Users\\pok\\Documents\\Utils\\Vim\\vim72\\gvim.exe %s -c cd C:\\Users\\pok\\Documents\\workspace\\Octave -c \&quot;30vs .\&quot; -c \&quot;wincmd w\&quot;&quot;);&lt;br /&gt;edit(&quot;HOME&quot;, &quot;C:\\Users\\pok\\Documents\\workspace\\Octave&quot;);&lt;br /&gt;edit(&quot;LICENSE&quot;, &quot;BSD&quot;);&lt;br /&gt;#set(0,&#039;defaulttextfontname&#039;, &#039;Malgun Gothic&#039;);&lt;/blockquote&gt;path에 내가 &#039;.m&#039;파일들을 모아놓고 있는 C:\Users\pok\Documents\workspace\Octave 를 추가했고&lt;br /&gt;&quot;EDITOR&quot;에는 주로 사용하는 에디터인 vim 을 .m 파일들을 나열하여 열리게 설정하였다. &quot;LICENSE&quot;는 새로 만드는 .m 함수의 라이센스를 어떤걸로 할건지 여부를 정하는것은 기본은 GPL이고 나는 BSD로 라이센스를 변경했다.&lt;br /&gt;&lt;br /&gt;3.0 버전에 plot의 기본글꼴 설정이 구리구리하여 set을 이용하여 기본글꼴을 설정했는데, 3.2버전에서는 wgnuplot에서 설정하고 저장할수 있게 바뀌었다.&lt;br /&gt;</description>
			<category>실행환경</category>
			<category>Octave</category>
			<category>수학</category>
			<author> (pok)</author>
			<guid>http://poksion.cafe24.com/poklog/132</guid>
			<comments>http://poksion.cafe24.com/poklog/entry/Octave-in-Vista#entry132comment</comments>
			<pubDate>Fri, 09 Oct 2009 22:48:44 +0900</pubDate>
		</item>
		<item>
			<title>오렌지색</title>
			<link>http://poksion.cafe24.com/poklog/entry/%EC%98%A4%EB%A0%8C%EC%A7%80%EC%83%89</link>
			<description>난 오렌지 색이 참 좋다.&lt;br /&gt;그 색은 흰색에도 잘 어울리고 조금 어두운 회색까지도 잘 어울릴줄 아는 색(?) 이다.&lt;br /&gt;&lt;br /&gt;블로그 테마를 바꿨는데, 이 테마가 상당히 인기 있는 테마인지, 여러 블로그에서도 많이 사용된다.&lt;br /&gt;뭔가 좀 그래서 header와 wordpress 로고를 오렌지 색으로 바꿔봤다.&lt;br /&gt;&lt;br /&gt;역시 오렌지색은 좋다.&lt;br /&gt;</description>
			<category>일상 이야기</category>
			<category>주저리</category>
			<author> (pok)</author>
			<guid>http://poksion.cafe24.com/poklog/131</guid>
			<comments>http://poksion.cafe24.com/poklog/entry/%EC%98%A4%EB%A0%8C%EC%A7%80%EC%83%89#entry131comment</comments>
			<pubDate>Fri, 09 Oct 2009 22:34:47 +0900</pubDate>
		</item>
		<item>
			<title>아래아 한글뷰어 2002를 백업하다</title>
			<link>http://poksion.cafe24.com/poklog/entry/%EC%95%84%EB%9E%98%EC%95%84-%ED%95%9C%EA%B8%80%EB%B7%B0%EC%96%B4-2002%EB%A5%BC-%EB%B0%B1%EC%97%85%ED%95%98%EB%8B%A4</link>
			<description>한컴이 하는짓으로 봐서 언젠가 &#039;한글뷰어 2002 배포를 전면 금합니다!&#039; 할지도 모를것 같아서 백업받았다.&lt;br /&gt;정말 이게 뭐하는 짓인지....&lt;br /&gt;&lt;br /&gt;MS처럼 부자가 아니라서 뷰어를 통해서라도 돈을 벌어야해서, 광고를 달았다고 치자.&lt;br /&gt;그런데 인쇄하는데 &#039;당신은 뷰어를 사용하는 사람이에요~&#039; 라는 메시지를 남기는거나, 뷰어이니까 내용을 클립보드에 복사하지 못하게 하는것은 도대체가 납득이 가질 않는다. 그리고 그러한 뷰어를 배포하는 회사의 제품을 정부표준문서 포멧으로 정한것도 납득이 가질 않는다.&lt;br /&gt;&lt;br /&gt;한 회사에 대해 이토록 짜증내본적은 별로 없었는데 이쯤 되면 육두문자가 튀어나올법하다.&lt;br /&gt;</description>
			<category>일상 이야기</category>
			<category>망하든가</category>
			<category>뭐하자는건지</category>
			<category>주저리</category>
			<category>찌질대마왕</category>
			<author> (pok)</author>
			<guid>http://poksion.cafe24.com/poklog/130</guid>
			<comments>http://poksion.cafe24.com/poklog/entry/%EC%95%84%EB%9E%98%EC%95%84-%ED%95%9C%EA%B8%80%EB%B7%B0%EC%96%B4-2002%EB%A5%BC-%EB%B0%B1%EC%97%85%ED%95%98%EB%8B%A4#entry130comment</comments>
			<pubDate>Thu, 17 Sep 2009 01:32:44 +0900</pubDate>
		</item>
		<item>
			<title>vim modeline 삽질기</title>
			<link>http://poksion.cafe24.com/poklog/entry/vim-modeline-%EC%82%BD%EC%A7%88%EA%B8%B0</link>
			<description>코딩컨벤션 삽질기 2탄은 vim의 modeline 삽질기다.&lt;br /&gt;&lt;br /&gt;제일 삽질했던것이 // vim 과 /* vim */ 의 설정 포멧이 다르다는것을 모르고 안된다고 이것저것해봤던것.&lt;br /&gt;그것에 대한 차이점을 자세히 설명해놓은곳이 &lt;a href=&quot;http://vim.wikia.com/wiki/Modeline_magic&quot; target=&quot;_blank&quot;&gt;이곳&lt;/a&gt;이다.&lt;br /&gt;&lt;br /&gt;두번째 삽질은, // vim 위치의 문제. 이 mode line 주석이 있을곳은 소스의 맨 처음이거나 맨 마지막이어야한다!&lt;br /&gt;이걸 몰라서 우엉삽질을 했다.&lt;br /&gt;&lt;br /&gt;참고로, modeline을 사용하려면 set modeline(혹은 set ml)이 설정되어 있어야한다. 일반적인 배포판에서 이것이 설정되어있는지는 모르겠으나, win32 gvim은 기본으로 설정되어 있더라.&lt;br /&gt;&lt;br /&gt;결론적으로, 나는 소스의 맨 마지막줄에&lt;br /&gt;&lt;blockquote&gt;// vim: ts=4:sw=4:nowrap&lt;/blockquote&gt;같은 modeline을 설정한다.&lt;br /&gt;</description>
			<category>개발환경</category>
			<category>vim</category>
			<author> (pok)</author>
			<guid>http://poksion.cafe24.com/poklog/129</guid>
			<comments>http://poksion.cafe24.com/poklog/entry/vim-modeline-%EC%82%BD%EC%A7%88%EA%B8%B0#entry129comment</comments>
			<pubDate>Mon, 31 Aug 2009 01:23:46 +0900</pubDate>
		</item>
		<item>
			<title>svn set:keyword 삽질기</title>
			<link>http://poksion.cafe24.com/poklog/entry/svn-setkeyword-%EC%82%BD%EC%A7%88%EA%B8%B0</link>
			<description>svn에는 property라는것이 있다. 그중에서 set:keyword property가 있는데 이것을 이용하면 커밋에 대한 정보를 소스파일에 심을 수 있다. 이에 대한 정보들은 상당히 많다.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://dreamstorm.cafe24.com/cgi-bin/moin.cgi/Subversion&quot; target=&quot;_blank&quot;&gt;http://dreamstorm.cafe24.com/cgi-bin/moin.cgi/Subversion&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://my.oops.org/128&quot; target=&quot;_blank&quot;&gt;http://my.oops.org/128&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://2bits.com/articles/making-subversionsvn-recognize-cvs-id-and-revision-tags.html&quot; target=&quot;_blank&quot;&gt;TortoiseSVN에서 set:keyword property 설정&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-propertypage.html#tsvn-dug-propertypage-props&quot; target=&quot;_blank&quot;&gt;TortoiseSVN에서 auto property 설정&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://durak.org/sean/pubs/software/version-control-with-subversion-1.6/svn.advanced.props.special.keywords.html&quot; target=&quot;_blank&quot;&gt;치환 키워드인 $Id$, $Rev$에 대해 자세한 설명이 나와있는 사이트&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;간단하게 Id keyword만 설정해놓고 $Id$라고 치면, 왠만한 정보는 다 실리는데... 문제는 여기에 나오는 날짜가 Z(Zulu Time - UTC zero time을 기준, &lt;a href=&quot;http://en.wikipedia.org/wiki/Coordinated_Universal_Time#Time_zones&quot; target=&quot;_blank&quot;&gt;위키페디아&lt;/a&gt;참조)라서... 영 못읽어 먹겠더라.&lt;br /&gt;&lt;br /&gt;그런데 특이하게도 $LastChangedDate$는 또 local zone을 기준으로 시간을 기록해준다. 여기에 대한 &lt;a href=&quot;http://svn.haxx.se/users/archive-2005-02/0432.shtml&quot; target=&quot;_blank&quot;&gt;분분한 의견들&lt;/a&gt;이 있는데, 어쨌든, $Id$ 시간과 $LastChagnedDate$가 다른 시간을 기록해준다는것은 사실이다.&lt;br /&gt;&lt;br /&gt;그래서 그냥 $Id$ 안쓰고 다음과 같이 쪼개 쓰기로 했다.&lt;br /&gt;&lt;blockquote&gt;// $LastChangedBy$&lt;br /&gt;// $LastChangedDate$&lt;br /&gt;// $Rev$&lt;/blockquote&gt;&lt;br /&gt;이것때문에 svn 커밋을 10번가까이 반복했다는...-_-&lt;br /&gt;</description>
			<category>개발환경</category>
			<category>svn</category>
			<category>UTC</category>
			<author> (pok)</author>
			<guid>http://poksion.cafe24.com/poklog/128</guid>
			<comments>http://poksion.cafe24.com/poklog/entry/svn-setkeyword-%EC%82%BD%EC%A7%88%EA%B8%B0#entry128comment</comments>
			<pubDate>Mon, 31 Aug 2009 01:08:50 +0900</pubDate>
		</item>
		<item>
			<title>커피와 오렌지주스</title>
			<link>http://poksion.cafe24.com/poklog/entry/%EC%BB%A4%ED%94%BC%EC%99%80-%EC%98%A4%EB%A0%8C%EC%A7%80%EC%A3%BC%EC%8A%A4</link>
			<description>나는 커피를 참 좋아한다.&lt;br /&gt;&lt;br /&gt;나에게 있어서 커피를 먹기 시작한다는 행위는 어떤일을 정리한다는 의미와 거의 동일하다. 그러니까, 담배를 피우는 사람이 담배를 한까치 피우는 이유와 비슷하다.&lt;br /&gt;&lt;br /&gt;많이 먹을때는 하루에 10잔가까이 먹었다.&lt;br /&gt;&lt;br /&gt;커피를 많이 먹으니까, 치아가 좋지 않아졌다. 그리고 왠지 건강해지지 않은것 같은 느낌...&lt;br /&gt;그래서 커피를 줄이기 위해 커피를 마시는 동안 다른 음료를 같이 마시는것을 시도했다.&lt;br /&gt;&lt;br /&gt;오렌지주스는 별로 좋아하지 않은 음료였다. 그런데 이걸 커피와 같이 먹으니까, 의외로 좋다. 오렌지주스를 한모금 마시고 커피를 조금 홀짝거리면, 시큼한 뒤끝이 깨끗해지는것 같다.&lt;br /&gt;&lt;br /&gt;따뜻한 커피하나 들고 음악 한곡 들으면서 정리하는 즐거움은 시큼한 오렌지주스와 그 뒷맛을 거두어주는 커피 한모금으로 계속 유지할수 있게 되었고 커피 마시는 량도 하루에 2잔정도 줄였으니, 대성공한 시도다. 뿌듯하다.&lt;br /&gt;</description>
			<category>일상 이야기</category>
			<category>여유</category>
			<category>커피</category>
			<author> (pok)</author>
			<guid>http://poksion.cafe24.com/poklog/127</guid>
			<comments>http://poksion.cafe24.com/poklog/entry/%EC%BB%A4%ED%94%BC%EC%99%80-%EC%98%A4%EB%A0%8C%EC%A7%80%EC%A3%BC%EC%8A%A4#entry127comment</comments>
			<pubDate>Thu, 13 Aug 2009 22:32:15 +0900</pubDate>
		</item>
		<item>
			<title>vim tips : $HOME / ctags / :A</title>
			<link>http://poksion.cafe24.com/poklog/entry/vim-tips-HOME-ctags-A</link>
			<description>vim의 환경변수중에 자주사용하는 환경변수로 $VIMRUNTIME과 $HOME 이 있다. 만일 $HOME이 정해지면 재미있는것들을 많이 할 수 있는데, 예를들면 ctags 파일이나 session 파일들을 한곳에 몰아둘 수 있다.&lt;br /&gt;&lt;br /&gt;cygwin 터미널용 vim과 gvim win32 버전을 동시에 사용하고, vimrc파일을 공유할경우 - 내 경우는 win32 vimrc를 ~/.vimrc 파일로 심볼릭링크를 걸어서 공유한다 - $HOME 변수를 설정하는것이 조금 곤란하다. 왜냐하면 시그윈과 윈도우즈가 디렉토리를 다루는 방식이 상이하기 때문이다. 내 경우는 그래서 꼼수로 $VIMRUNTIME 변수를 이용해서 아예 그곳에 set_home.vim 파일을 따로 두어 각각읽어들이게 했다. 그래서 시그인용 vim은 /usr/share/vim/vim72/set_home.vim 을 읽고 (그곳에서 let $HOME=&quot;/cygdrive/c/Users/pok/Documents&quot;) gvim win32는 다른 set_home.vim을 읽어들인다.&lt;br /&gt;&lt;br /&gt;&lt;fieldset class=&quot;geshi r2&quot;&gt;&lt;legend&gt;&lt;span class=&quot;g_lang&quot; style=&quot;color: rgb(170, 170, 170);&quot;&gt;(Language : perl)&lt;/span&gt;&lt;/legend&gt;&lt;div class=&quot;code&quot;&gt;source &lt;span class=&quot;re0&quot;&gt;$VIMRUNTIME&lt;/span&gt;/set_home.vim&lt;br /&gt;
function MakeTags&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; let current_dir = getcwd&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; let filename = substitute&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt; substitute&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;current_dir, &lt;span class=&quot;st0&quot;&gt;&quot;[*:*|*&#039; &#039;*]&quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&quot;_&quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&quot;g&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&quot;[*&lt;span class=&quot;es0&quot;&gt;\/&lt;/span&gt;*|*&lt;span class=&quot;es0&quot;&gt;\\&lt;/span&gt;*]&quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&quot;_&quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&quot;g&quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; let filename = &lt;span class=&quot;re0&quot;&gt;$HOME&lt;/span&gt; . &lt;span class=&quot;st0&quot;&gt;&#039;/workspace/ctags_cscope/&#039;&lt;/span&gt; . filename . &lt;span class=&quot;st0&quot;&gt;&#039;.ctags&#039;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; execute &lt;span class=&quot;st0&quot;&gt;&#039;!ctags -R -f &#039;&lt;/span&gt; . filename . &lt;span class=&quot;st0&quot;&gt;&#039; &quot;&#039;&lt;/span&gt; . current_dir . &lt;span class=&quot;st0&quot;&gt;&#039;&quot;&#039;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; execute &lt;span class=&quot;st0&quot;&gt;&#039;set tags+=&#039;&lt;/span&gt; . filename&lt;br /&gt;
endfunction&lt;br /&gt;
function AddTags&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; let ctags_files = substitute&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/glob.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;glob&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$HOME&lt;/span&gt; . &lt;span class=&quot;st0&quot;&gt;&#039;/workspace/ctags_cscope/*ctags&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&quot;,&quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&quot;g&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; execute &lt;span class=&quot;st0&quot;&gt;&#039;set tags+=&#039;&lt;/span&gt; . ctags_files&lt;br /&gt;
endfunction&lt;br /&gt;
call AddTags&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
au VimEnter * :cd &lt;span class=&quot;re0&quot;&gt;$HOME&lt;/span&gt;&lt;br /&gt;
let g:alternateSearchPath = &lt;span class=&quot;st0&quot;&gt;&#039;sfr:../source,sfr:../src,sfr:../include,sfr:../inc,sfr:../,sfr:./include&#039;&lt;/span&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;/fieldset&gt;&lt;br /&gt;MakeTags라는 함수는 현재 작업하는 곳의 ctags 파일을 작업디렉토리에서 공백이나 :, /, \ 등의 문자를 _로 바꾸어 $HOME/workspace/ctags_cscope 디렉토리에 만들어저장하는 역할을 한다. AddTags라는 파일은, 처음에 vim을 로딩할때 만들어둔 ctags 파일들을 읽는 역할을 한다. 소스를 분석할 디렉토리에서 :call MakeTags()만 호출하면, ctrl+]등을 자유롭게 이용할수 있다.&lt;br /&gt;&lt;br /&gt;소스분석에서 매우 자주사용하는 플러그인이 a.vim이라는 플러그인인데, ./include/a.h , ./a.cpp 이렇게 파일들이있다면 :A 커맨드가 원하는데로 되지 않는다. cpp와 h 파일이 a.vim이 기본으로 지원하는 SearchPath에 없어서 생긴 문제인데, &lt;span style=&quot;font-weight: bold;&quot;&gt;g:alternateSearchPath를 변경&lt;/span&gt;하면 원하는 SearchPath를 추가할수 있다. 마지막에 있는 sfr:../,sfr:./include 가 위의 문제를 해결하기위해 기본 SearchPath에서 추가한 설정이다.&lt;br /&gt;&lt;br /&gt;마지막으로, 현재 vim의 view나 설정들(열어놓은 파일들이나 버퍼의 현재 커서 줄)을 저장하는 방법이 있는데, session을 저장하는 방법이다. &lt;span style=&quot;font-weight: bold;&quot;&gt;:mks 원하는이름.vim&lt;/span&gt; 이라고 하면 세션이 저장되고 부르려면&lt;span style=&quot;font-weight: bold;&quot;&gt; :source 원하는이름.vim&lt;/span&gt;, 덮어저장하련 &lt;span style=&quot;font-weight: bold;&quot;&gt;:mks! 원하는이름.vim&lt;/span&gt; 이라고 하면 된다. 내경우에는 $HOME 디렉토리에 세션들을 모두 저장해놓고 있으며, vim을 시작하면 자동으로 cwd를 $HOME으로 변경시켜놓아서(
au VimEnter * :cd &lt;span class=&quot;re0&quot;&gt;$HOME ) :source 이름.vim을 하면 바로 저장해놓은 세션들을 읽어들인다.&lt;br /&gt;&lt;/span&gt;</description>
			<category>개발환경</category>
			<category>vim</category>
			<author> (pok)</author>
			<guid>http://poksion.cafe24.com/poklog/126</guid>
			<comments>http://poksion.cafe24.com/poklog/entry/vim-tips-HOME-ctags-A#entry126comment</comments>
			<pubDate>Sun, 02 Aug 2009 02:57:08 +0900</pubDate>
		</item>
		<item>
			<title>Sealed Macro</title>
			<link>http://poksion.cafe24.com/poklog/entry/Sealed-Macro</link>
			<description>모던 C++ 디자인이라는 책은 봐도봐도 새로운 내용이 나온다.&lt;br /&gt;그책에서 건진내용중에 하나인데, 클래스가 상속을 받을때 virtual table이 그냥 생기는것이 아니라 virtual 함수가 있을때만 생긴다는것 - &#039;단위전략&#039;은 &lt;a href=&quot;http://poksion.cafe24.com/poklog/entry/%EB%AC%98%ED%95%98%EA%B2%8C-%EB%90%98%ED%92%80%EC%9D%B4%EB%90%98%EB%8A%94-%ED%85%9C%ED%94%8C%EB%A6%BF-%ED%8C%A8%ED%84%B4CRTP-Curiously-Recurring-Template-Patter&quot; target=&quot;_blank&quot;&gt;CRTP&lt;/a&gt;를 쓰기위해 다중상속을 활용하는데, 부모클래스에 virtual 함수가 있으면 부모마다 vtable이 생겨 오버헤드라는 이야기 - 이다.&lt;br /&gt;&lt;br /&gt;나는 소멸자를 virtual로 만들지 않고 상속받을때의 무시무시함을 겪은적이 있다. 그래서 소멸자는 항상 virtual - 이것이 상속받을이유가 없는 클래스라도 - 로 하곤 했었는데, 그럴때마다 vtable을 만들거라 생각하니 찝찝했다. 그렇다고 상속을 허용하면서 소멸자를 virtual로 안하는것은 정말 귀신피하려다 호랑이 만나는꼴 당할수 있는일이라, 상속을 못받게 하는방법을 찾아보았다.&lt;br /&gt;&lt;br /&gt;몇가지 좋은정보들을 찾았는데, 전부 &lt;a href=&quot;http://www.research.att.com/%7Ebs/bs_faq2.html#no-derivation&quot; target=&quot;_blank&quot;&gt;비얀할아버지가 작성한것&lt;/a&gt;을 기반으로 하고 있고 응용버전으로 &lt;a href=&quot;http://mypage.sarang.net/tt/entry/c%BF%A1%BC%AD-Java%C0%C7-final-%B5%FB%B6%F3%C7%CF%B1%E2&quot; target=&quot;_blank&quot;&gt;birdkr님의 템플렛버전&lt;/a&gt;이 있었다. 그런데 gcc에서는 friend T는 안된다. - 사실, friend T는 표준 C++&amp;nbsp; 문법이 아니다.&lt;br /&gt;&lt;br /&gt;좀더 찾아보니 Boost Mailing List 에도&lt;a href=&quot;http://lists.boost.org/Archives/boost/2006/04/102840.php&quot; target=&quot;_blank&quot;&gt; 비슷한 주제&lt;/a&gt;가 올라왔었고&lt;a href=&quot;http://www.ddj.com/cpp/184403883&quot; target=&quot;_blank&quot;&gt; friend T 문제를 어느정도 해결한 방법&lt;/a&gt;을사용한 &lt;a href=&quot;http://lists.boost.org/Archives/boost/2006/04/102862.php&quot; target=&quot;_blank&quot;&gt;최종버전&lt;/a&gt;도 있더라 - 저것이 표준 Boost Library로 승인되었는지는 잘 모르겠다.&lt;br /&gt;&lt;br /&gt;하늘은 뒤지는자의 편이라 했던가. (음?)&lt;br /&gt;써먹기에는 영 마음에 들지 않아서 더 뒤져보니 &lt;a href=&quot;http://www.experts-exchange.com/articles/Programming/Languages/CPP/Sealing-a-C-Class.html&quot; target=&quot;_blank&quot;&gt;그럭저럭 마음에 드는 버전&lt;/a&gt;을 찾을수 있었다. 옮겨보면,&lt;br /&gt;&lt;br /&gt;&lt;fieldset class=&quot;geshi r2&quot;&gt;&lt;legend&gt;&lt;span class=&quot;g_lang&quot; style=&quot;color: rgb(170, 170, 170);&quot;&gt;(Language : cpp)&lt;/span&gt;&lt;/legend&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;co2&quot;&gt;#define SEALED(className) \&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; className &lt;span class=&quot;co2&quot;&gt;## Sealer \&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt; \&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw2&quot;&gt;private&lt;/span&gt;: className &lt;span class=&quot;co2&quot;&gt;## Sealer(){}; \&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw2&quot;&gt;friend&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; className; \&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;; \&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; className : &lt;span class=&quot;kw2&quot;&gt;virtual&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;private&lt;/span&gt; className &lt;span class=&quot;co2&quot;&gt;## Sealer \&lt;/span&gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; SEALED&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;MyClass&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;;&lt;br /&gt;
 &lt;/div&gt;&lt;/fieldset&gt;&lt;br /&gt;무엇보다 비록 매크로지만 - 아니, 매크로라서 - 사용에 있어서 훨씬 직관적인 장점이 있다.&lt;br /&gt;</description>
			<category>프로그래밍</category>
			<category>C++</category>
			<category>프로그래밍</category>
			<author> (pok)</author>
			<guid>http://poksion.cafe24.com/poklog/125</guid>
			<comments>http://poksion.cafe24.com/poklog/entry/Sealed-Macro#entry125comment</comments>
			<pubDate>Sun, 05 Jul 2009 06:50:19 +0900</pubDate>
		</item>
		<item>
			<title>분류정리</title>
			<link>http://poksion.cafe24.com/poklog/entry/%EB%B6%84%EB%A5%98%EC%A0%95%EB%A6%AC</link>
			<description>뭔가 글을 써 놓고 그것이 보존되고 활용되는걸 지켜보는건 재미있고 흐뭇하다.&lt;br /&gt;특히 시험기간처럼 막막한 기간에는 옛날글들이 작은 웃음을 띄게 해주는 고마운 존재다.&lt;br /&gt;&lt;br /&gt;오랫만에 블로그 분류를 정리했다.&lt;br /&gt;이 블로그를 운영한지 &lt;a href=&quot;http://poksion.cafe24.com/poklog/entry/%ED%85%8C%ED%84%B0%ED%88%B4%EC%A6%88-%EC%84%A4%EC%B9%98&quot; target=&quot;_blank&quot;&gt;벌써 3년 가까이&lt;/a&gt; 지난걸 보면, 세월은 잘도 흐른다.&lt;br /&gt;&lt;br /&gt;윈도우 / 리눅스 분류 이외에 &lt;a href=&quot;http://poksion.cafe24.com/poklog/category/%EB%A9%80%ED%8B%B0%ED%94%8C%EB%9E%AB%ED%8F%BC&quot; target=&quot;_blank&quot;&gt;멀티플랫폼&lt;/a&gt;이라는 분류를 추가했다.&lt;br /&gt;오픈소스 프로그램 덕분에 플랫폼에 덜 구애받게 된것은 정말 개발자나 유저로써 행운이다.&lt;br /&gt;&lt;br /&gt;영화나 드라마, 만화등을 &lt;a href=&quot;http://poksion.cafe24.com/poklog/category/%EB%AC%B8%ED%99%94%EC%82%B0%EC%97%85&quot; target=&quot;_blank&quot;&gt;문화산업&lt;/a&gt;이라는 분류로 정리했다.&lt;br /&gt;문화산업이라는게 부정적인 어감이 많은 단어이긴 하지만, 내가 접하는 많은 &#039;컨텐츠&#039;가 역시 대량 생산된 산업의 생산물이라는것도 받아들이는게 맞는것 같다.&lt;br /&gt;&lt;br /&gt;컴퓨터 공학이나 그런것들은 &lt;a href=&quot;http://poksion.cafe24.com/poklog/category/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D&quot; target=&quot;_blank&quot;&gt;프로그래밍&lt;/a&gt;으로 통합해버렸다.&lt;br /&gt;컴퓨터에 관련된 잡담이나 그런것도 그냥 다 프로그래밍으로 밀어넣으려고 생각중이다.&lt;br /&gt;예전보다 훨씬 컴퓨터에 대한 낭만이 사라진건 사실이지만, 요거이가 또 재미있는것도 사실이다.&lt;br /&gt;&lt;br /&gt;30이 되기전에 좀더 여유를 가지고, 내가 해왔던것들을 다듬고 돌이켜보고 싶은데 현실속 나는 내일의 기말고사를 걱정하는 대학생이다. 예전의 내 고민들을 부정하는것은 아니지만, 좀더 치열하고 밀도높게 살지못한것이 후회되는건 어쩔수 없는것 같다.&lt;br /&gt;&lt;br /&gt;여유라는게 마음먹기 나름이라, 이런식의 마음가짐이면 평생 쫓기듯이 살것이 뻔하지만, 여하튼 빵점은 면해야하지 않겠는가? (-_-털썩..)&lt;br /&gt;&lt;br /&gt;여하튼, 시험공부중에 예전글들을 읽으며 여유한번 부려봤다.&lt;br /&gt;(근데, 이글 바로 전 &#039;일상이야기&#039;가 &lt;a href=&quot;http://poksion.cafe24.com/poklog/entry/%EC%8B%9C%ED%97%98%EA%B8%B0%EA%B0%84&quot; target=&quot;_blank&quot;&gt;시험기간&lt;/a&gt; 이라는 글이네...-_-)&lt;br /&gt;</description>
			<category>일상 이야기</category>
			<category>기말고사</category>
			<category>주저리</category>
			<author> (pok)</author>
			<guid>http://poksion.cafe24.com/poklog/124</guid>
			<comments>http://poksion.cafe24.com/poklog/entry/%EB%B6%84%EB%A5%98%EC%A0%95%EB%A6%AC#entry124comment</comments>
			<pubDate>Tue, 09 Jun 2009 03:46:42 +0900</pubDate>
		</item>
	</channel>
</rss>
