<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Macfeteria &#187; Technic</title>
	<atom:link href="http://www.macfeteria.com/blog/category/technic/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.macfeteria.com</link>
	<description>All About Mac and iPhone Programming</description>
	<lastBuildDate>Tue, 09 Aug 2011 04:34:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Stack &amp; Queue in Objective-C</title>
		<link>http://www.macfeteria.com/blog/2010/04/19/stack-queue-in-objective-c/</link>
		<comments>http://www.macfeteria.com/blog/2010/04/19/stack-queue-in-objective-c/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 13:53:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Technic]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.macfeteria.com/?p=1313</guid>
		<description><![CDATA[วันนี้ผมต้องเขียนโปรแรกมโดยใช้ queue ผมก็พยายามหานะว่า มันใช้ class ไหน  แต่หายังไงก็หาไม่เจอ สุดท้ายแล้วก็ค้นพบว่า ในภาษา objective-c นั้นมี class จำพวก container หลายตัวให้เลือกใช้ ตั้งแต่ array , dictionary , set แต่กลับไม่มี stack และ queue ก็ในเมื่อมันไม่มีให้ใช้ แล้วคำถามต่อไปคือ เราต้องเขียน เองใหม่ทั้งหมดเลยหรือ ? คำตอบคือไม่ครับ เราไม่ต้องไปเขียน class  เหมือนกับ NSMutableArray , NSDictionary อะไรแบบนั้นเองทั้งหมด แต่สิ่งที่เราต้องทำก็คือ นำคุณสมบัติของภาษา objective-c มาใช้นั่นก็คือ class extend ครับ ถูกต้องแล้ว Categories !!!! ถ้ายังไม่เคยใช้ หรือไม่รู้จักว่ามันคืออะไร ลองอ่าน http://www.macfeteria.com/2008/11/objective-c-programmming-extending-class/ Stack stack เป็น [...]]]></description>
			<content:encoded><![CDATA[<p>วันนี้ผมต้องเขียนโปรแรกมโดยใช้ queue ผมก็พยายามหานะว่า มันใช้ class ไหน  แต่หายังไงก็หาไม่เจอ สุดท้ายแล้วก็ค้นพบว่า ในภาษา objective-c นั้นมี class จำพวก container หลายตัวให้เลือกใช้ ตั้งแต่ array , dictionary , set แต่กลับไม่มี stack และ queue</p>
<p>ก็ในเมื่อมันไม่มีให้ใช้ แล้วคำถามต่อไปคือ เราต้องเขียน เองใหม่ทั้งหมดเลยหรือ ?</p>
<p>คำตอบคือไม่ครับ เราไม่ต้องไปเขียน class  เหมือนกับ NSMutableArray , NSDictionary อะไรแบบนั้นเองทั้งหมด แต่สิ่งที่เราต้องทำก็คือ นำคุณสมบัติของภาษา objective-c มาใช้นั่นก็คือ class extend ครับ ถูกต้องแล้ว Categories !!!!</p>
<p>ถ้ายังไม่เคยใช้ หรือไม่รู้จักว่ามันคืออะไร ลองอ่าน <a href="http://www.macfeteria.com/2008/11/objective-c-programmming-extending-class/">http://www.macfeteria.com/2008/11/objective-c-programmming-extending-class/</a></p>
<h2>Stack</h2>
<p>stack เป็น container ชนิดหนึ่งที่มีลักษณะการทำงานคือ อะไรที่เข้าไปก่อน จะออกทีหลัง ก็เหมือนเอาหนังสือวางลงไปในกล่องทับกัน นั่นเหละครับ ถ้าอยากได้เล่มล่างสุดก็ต้องเอาเล่มบนสุดออกก่อน เอาละครับเรามาดู code กันเลยดีกว่าว่าเราเขียนมันได้ยังไง</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// ------- Interface -------------------------</span>
<span style="color: #a61390;">@interface</span> <span style="color: #400080;">NSMutableArray</span> <span style="color: #002200;">&#40;</span>QueueAdditions<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span> dequeue;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> enqueue<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>obj;
<span style="color: #a61390;">@end</span>
&nbsp;
&nbsp;
&nbsp;
&nbsp;
<span style="color: #11740a; font-style: italic;">// ------- Implement -------------------------</span>
<span style="color: #a61390;">@implementation</span> <span style="color: #400080;">NSMutableArray</span> <span style="color: #002200;">&#40;</span>QueueAdditions<span style="color: #002200;">&#41;</span>
<span style="color: #11740a; font-style: italic;">// Queues are first-in-first-out, so we remove objects from the head</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span> dequeue <span style="color: #002200;">&#123;</span>
    <span style="color: #11740a; font-style: italic;">// if ([self count] == 0) return nil; // to avoid raising exception (Quinn)</span>
    <span style="color: #a61390;">id</span> headObject <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self objectAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>headObject <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>headObject retain<span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">// so it isn't dealloc'ed on remove</span>
        <span style="color: #002200;">&#91;</span>self removeObjectAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #a61390;">return</span> headObject;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// Add to the tail of the queue (no one likes it when people cut in line!)</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> enqueue<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>anObject <span style="color: #002200;">&#123;</span>
    <span style="color: #002200;">&#91;</span>self addObject<span style="color: #002200;">:</span>anObject<span style="color: #002200;">&#93;</span>;
    <span style="color: #11740a; font-style: italic;">//this method automatically adds to the end of the array</span>
<span style="color: #002200;">&#125;</span>
<span style="color: #a61390;">@end</span></pre></div></div>

<h2>Queue</h2>
<p>queue ก็ไม่ต้องอธิบายอะไรมากครับ คือเรียงตามลำดับก่อนหลัง</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// ------- Interface -------------------------</span>
<span style="color: #a61390;">@interface</span> <span style="color: #400080;">NSMutableArray</span> <span style="color: #002200;">&#40;</span>StackAdditions<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>pop;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>push<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>obj;
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// ------- Implement -------------------------</span>
<span style="color: #a61390;">@implementation</span> <span style="color: #400080;">NSMutableArray</span> <span style="color: #002200;">&#40;</span>StackAdditions<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>pop
<span style="color: #002200;">&#123;</span>
    <span style="color: #11740a; font-style: italic;">// nil if [self count] == 0</span>
    <span style="color: #a61390;">id</span> lastObject <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self lastObject<span style="color: #002200;">&#93;</span> retain<span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>lastObject<span style="color: #002200;">&#41;</span>
        <span style="color: #002200;">&#91;</span>self removeLastObject<span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">return</span> lastObject;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>push<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>obj
<span style="color: #002200;">&#123;</span>
     <span style="color: #002200;">&#91;</span>self addObject<span style="color: #002200;">:</span> obj<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>จะเห็นได้ว่า เราสามารถใช้ categories เข้ามาช่วยเพิ่มความสามารถของ NSMutableArray ได้ง่ายๆมาก และเราก็ไม่ต้องไปเขียน stack หรือ queue เอง</p>

<!-- start wp-tags-to-technorati 1.02 -->

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.macfeteria.com/blog/2010/04/19/stack-queue-in-objective-c/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>XCode Tip for dummies</title>
		<link>http://www.macfeteria.com/blog/2009/10/16/xcode-tip-for-dummies/</link>
		<comments>http://www.macfeteria.com/blog/2009/10/16/xcode-tip-for-dummies/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 10:28:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Technic]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://www.macfeteria.com/?p=1164</guid>
		<description><![CDATA[สำหรับมือใหม่แล้ว หลายๆคนยังไม่คุ้นกับ XCode กันมากพอ สำหรับวันนี้ผมจะแนะนำส่วนประกอบต่างๆ เพิ่มเติม และ common error ที่พบได้บ่อยๆ พร้อมทั้งวิธีแก้ปัญหาเบื้องต้นสำหรับมือใหม่ ( มือฉมังก็ใช้ได้นะเออ ) เอาละครับ งั้นเริ่มที่ bar ตรงกลางก่อนเลย ผมไม่รู้ว่าจะเรียกมันว่าอะไร แต่เรียกว่า bar แล้วกันนะครับ เอาละครับไปดูกันว่าแต่ละ bar นั้นทำหน้าที่อะไร B1 ถ้าหากเรากดไป มันจะกลับไปยังไฟล์ก่อนหน้านี้ ( Prev ) และถ้าเป็นด้านขวา ก็จะเป็นไฟล์หลังจากนี้ ( Next ) B2 เป็นส่วนบอกว่า ปัจจุบันนี้เราอยู่ที่ไฟล์อะไรและบรรทัดที่เท่าไหร่ B3 บอกว่าปัจจุบัน cursor เราอยู่ที่ method อะไร และถ้าหากเรากด ก็จะพบกับ method ทั้งหมดของ class นี้ เราสามารถกระโดดไปยัง method ที่ต้องการได้อย่างสะดวก B4 [...]]]></description>
			<content:encoded><![CDATA[<p>สำหรับมือใหม่แล้ว หลายๆคนยังไม่คุ้นกับ XCode กันมากพอ สำหรับวันนี้ผมจะแนะนำส่วนประกอบต่างๆ เพิ่มเติม และ common error ที่พบได้บ่อยๆ พร้อมทั้งวิธีแก้ปัญหาเบื้องต้นสำหรับมือใหม่ ( มือฉมังก็ใช้ได้นะเออ )</p>
<p>เอาละครับ งั้นเริ่มที่ bar ตรงกลางก่อนเลย</p>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/10/bar.gif" rel="lightbox[1164]"><img class="size-medium wp-image-1165 aligncenter" title="bar" src="http://www.macfeteria.com/wp-content/uploads/2009/10/bar-300x194.gif" alt="bar" width="300" height="194" /></a></p>
<p>ผมไม่รู้ว่าจะเรียกมันว่าอะไร แต่เรียกว่า bar แล้วกันนะครับ เอาละครับไปดูกันว่าแต่ละ bar นั้นทำหน้าที่อะไร</p>
<ul>
<li>B1 ถ้าหากเรากดไป มันจะกลับไปยังไฟล์ก่อนหน้านี้ ( Prev ) และถ้าเป็นด้านขวา ก็จะเป็นไฟล์หลังจากนี้ ( Next )</li>
<li>B2 เป็นส่วนบอกว่า ปัจจุบันนี้เราอยู่ที่ไฟล์อะไรและบรรทัดที่เท่าไหร่</li>
<li>B3 บอกว่าปัจจุบัน cursor เราอยู่ที่ method อะไร และถ้าหากเรากด ก็จะพบกับ method ทั้งหมดของ class นี้ เราสามารถกระโดดไปยัง method ที่ต้องการได้อย่างสะดวก</li>
<li>B4 เป็นปุ่มไว้เปลี่ยนสลับไปมาละหว่า ไฟล์ interface ( .h ) และ implement ( .m )</li>
</ul>
<h2>Smart Group</h2>
<p>ส่วนต่อไปผมจะแนะนำก็คือ ส่วนของ Smart Group ครับ ตรงนี้มีประโยชน์มากๆ ดูกันที่แรกก่อนเลย นั่นก็คือ</p>
<h2>1. Find</h2>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/10/Find.gif" rel="lightbox[1164]"><img class="size-medium wp-image-1166 aligncenter" title="Find" src="http://www.macfeteria.com/wp-content/uploads/2009/10/Find-300x189.gif" alt="Find" width="300" height="189" /></a></p>
<p>เมื่อเราต้องการ ค้นหา คำหรือว่าอะไรสักอย่าง เมื่อการค้นหาแต่ละครั้งจบลง XCode มันจะเก็บผลของการค้นหา ไว้ให้เราตรง Find Results นี่เหละครับ ครั้งต่อไปเราก็มาเปิดดูตรง Find Results ก่อนจะได้ไม่เสียเวลาครับ</p>
<h2>2. Bookmarks</h2>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/10/bookmark.gif" rel="lightbox[1164]"><img class="size-medium wp-image-1167 aligncenter" title="bookmark" src="http://www.macfeteria.com/wp-content/uploads/2009/10/bookmark-300x195.gif" alt="bookmark" width="300" height="195" /></a></p>
<p>Bookmark นี่เป็นตัวช่วยให้เราจดบันทึกได้อย่างง่าย หลายๆครั้งที่เราทำงานไปเรื่อยๆ แล้วอยากจะจดว่า บรรทัดนี้ มันสำคัญ หรือเป็นส่วนสำคัญอะไรสักอย่าง อยากจะกลับมาดูครั้งหลัง ๆ เราก็สามารถใช้ประโยชน์จาก bookmark ได้ดีทีเดียว วิธีการก็คือ</p>
<ul>
<li>กด apple + d ( ผมว่าแบบนี้สะดวกกว่า )</li>
<li>เลือกไปที่เมนู edit &gt; add to bookmarks</li>
</ul>
<p>แล้วเราก็ตั้งชื่อครับ เท่านี้ก็เรียบร้อย ครั้งหลัง เราก็เปิด bookmark แล้วก็เลือกที่เราบันทึกไว้ XCode ก็จะเปิดไฟล์พร้อมกับเลื่อนไปยังบรรทัดที่เราได้ bookmark เอาไว้ครับ</p>
<h2>Implementtation &amp; NIB Files</h2>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/10/nib.gif" rel="lightbox[1164]"><img class="size-medium wp-image-1168 aligncenter" title="nib" src="http://www.macfeteria.com/wp-content/uploads/2009/10/nib-300x189.gif" alt="nib" width="300" height="189" /></a></p>
<p>smart group นี้ช่วยให้เราคัดกรองประเภทของไฟล์ที่เราต้องการครับ อย่างถ้าหากเราต้องการดูแต่ implement หรือเฉพาะ nib ก็ทำได้อย่าง่ายๆครับ</p>
<h2>Degugger Windows</h2>
<p>ในหน้าต่าง Debug นี้มีส่วนสำคัญหลายๆส่วนครับที่หลายๆคนยังไม่รู้ว่าเราสามารถ ปรับเปลี่ยนอะไรได้หลายๆอย่าง</p>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/10/debugger.gif" rel="lightbox[1164]"><img class="size-medium wp-image-1170 aligncenter" title="debugger" src="http://www.macfeteria.com/wp-content/uploads/2009/10/debugger-300x185.gif" alt="debugger" width="300" height="185" /></a></p>
<p>1. หลายๆคนเคยประสบปัญหาว่า โหลด Source Code ของคนอื่นมาแล้วเจอ Error ในลักษณะประมาณนี้</p>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/10/error.gif" rel="lightbox[1164]"><img class="size-medium wp-image-1171 aligncenter" title="error" src="http://www.macfeteria.com/wp-content/uploads/2009/10/error-300x208.gif" alt="error" width="300" height="208" /></a></p>
<p>บางคนอาจจะคิดว่า มันมี program ที่เค้าให้มามัน bug อะไรทำนองนั้น ถ้าดูดีๆในรูปด้านซ้ายมือบนจะเห็นเค้าเขียนว่า Missing | Debug | i386 ถ้าหากอ่าน error ดีๆเค้าบอกว่า โปรเจคที่เราโหลดมา ใช้ SDK คนละ version กับที่เรามี การแก้ปัญหา แบบนี้ก็คือ ให้ปรับ SDK ให้มันตรงกับที่เรามีก็จะสามารถใช้งานได้ครับ ดูในหมายเลข 1 ใน List นี้เราสามารถที่จะปรับเปลี่ยน Build ของเราได้ครับ ตั้งแต่เราเลือกได้ว่าจะใช้ SDK Version อะไร ใช้ Simulator หรือว่า Device เมื่อเราเลือกให้มันตรง ลอง compile ใหม่ก็สามารถใช้ได้ครับ</p>
<p>ในส่วนหมายเลข 2 ถ้าหาก เรากดไป มันจะไปเปิดหน้าต่างที่รวม break point ที่เราได้ใส่ไว้ในโปรแกรมทั้งหมดครับ<br />
และหมายเลข 3 ก้อเป็นการเปิด Console ขึ้นมาดูครับ</p>
<h2>XCode Version Control Build-in</h2>
<p>ในตัว xcode เองมีตัว Version Control แถมมาด้วยครับ สำหรับคนที่ยังไม่รู้ว่า Version Control คืออะไร ผมอธิบายแบบนี้แล้วกันนะครับ สมมติเราเขียนโปรแกรมไปเรื่อยๆ เราอยากจะทดลองแก้ไขอะไรสักอย่าง และเราอยากจะ Save Code ทั้งหมดของเราไว้ ถ้าหากแก้ไปแล้วมันเจ้งก็จะได้กู้กับคืนมา การ save code ไว้แบบนี้แบบนี้เค้าเรียกว่า Version Control ครับ เหมือนเวลาเล่นเกมส์นั่นเหละ ครับเราสามารถ Save ไว้ได้เกิดจะไปฆ่าบอสละถ้าตายจะได้กลับมาโหลดใหม่ได้ ทำนองนั้น version control นั้นมีหลายเจ้ามากๆ อาทิเช่น SVN , CVS , Sourcesafe เป็นต้น เราต้องติดตั้ง software พวกนี้เพิ่มเติม ซึ่งมันค่อนข้างยุ่งยาก แต่ xcode นั้นมี version control มาให้เราแบบง่ายๆครับ</p>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/10/buildin.gif" rel="lightbox[1164]"><img class="size-medium wp-image-1174 aligncenter" title="buildin" src="http://www.macfeteria.com/wp-content/uploads/2009/10/buildin-300x199.gif" alt="buildin" width="300" height="199" /></a></p>
<p>เลิือกไปที่เมนู File แล้วเลือก Make Snapshot ครับเพียงเท่านี้ก็เรียบร้อยหวังว่า ทิปเล็กๆน้อยๆ นี้น่าจะมีประโยชน์บ้างนะครับ แนะนำ ติชม กันได้ครับ</p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/xcode' rel='tag' target='_self'>xcode</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.macfeteria.com/blog/2009/10/16/xcode-tip-for-dummies/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tip &amp; Trick : iPhone Simulator</title>
		<link>http://www.macfeteria.com/blog/2009/03/31/tip-trick-iphone-simulator/</link>
		<comments>http://www.macfeteria.com/blog/2009/03/31/tip-trick-iphone-simulator/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 15:18:14 +0000</pubDate>
		<dc:creator>[Ter]</dc:creator>
				<category><![CDATA[Technic]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.macfeteria.com/?p=820</guid>
		<description><![CDATA[หลายคนเขียนโปรแกรม iPhone กันบ้างแล้ว และก็ได้รู้จัก xcode กันมากขึ้น แต่ก็มีหลายๆครั้ง ที่มือใหม่ เริ่มเขียนโปรแกรมสำหรับ iPhone มีคำถามที่พบได้บ่อยมากๆ เกี่ยวกับ iPhone Simulator และในวันนี้ผมจะเขียนเกี่ยวกับ คำถามที่พบบ่อยๆ และวิธีแก้ปัญหา นะครับ เอาละ เริ่มกันเลยดีกว่า เมื่อเขียนโปรแกรมไปแล้วจะลบโปรแกรมใน iPhone Simulator ได้อย่างไร ? เราสามารถทำได้อยู่สองวิธีครับ คือ ไปลบไฟล์ที่อยู่ใน ~/Library/Application Support/iPhone Simulator/User/Applications เปิด iPhone Simulator แล้วเลือก menu ไปที่ Reset Contents and Setting ( ดูรูปประกอบ ) จะหมุนเครื่องให้เป็นแนวนอนทำอย่างไร ? เลือกไปที่ menu แล้วก็เลือก Hardware &#62;&#62; Rotate Left หรือ Hardware [...]]]></description>
			<content:encoded><![CDATA[<p>หลายคนเขียนโปรแกรม iPhone กันบ้างแล้ว และก็ได้รู้จัก xcode กันมากขึ้น แต่ก็มีหลายๆครั้ง ที่มือใหม่ เริ่มเขียนโปรแกรมสำหรับ iPhone มีคำถามที่พบได้บ่อยมากๆ เกี่ยวกับ iPhone Simulator และในวันนี้ผมจะเขียนเกี่ยวกับ คำถามที่พบบ่อยๆ และวิธีแก้ปัญหา นะครับ เอาละ เริ่มกันเลยดีกว่า</p>
<h3>เมื่อเขียนโปรแกรมไปแล้วจะลบโปรแกรมใน iPhone Simulator ได้อย่างไร ?</h3>
<ol>
<li>เราสามารถทำได้อยู่สองวิธีครับ คือ ไปลบไฟล์ที่อยู่ใน ~/Library/Application Support/iPhone Simulator/User/Applications</li>
<li>เปิด iPhone Simulator แล้วเลือก menu ไปที่ Reset Contents and Setting ( ดูรูปประกอบ )</li>
</ol>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/03/reset.png" rel="lightbox[820]"><img class="size-medium wp-image-821 aligncenter" title="reset" src="http://www.macfeteria.com/wp-content/uploads/2009/03/reset-300x185.png" alt="reset" width="300" height="185" /></a></p>
<h3 style="text-align: left;">จะหมุนเครื่องให้เป็นแนวนอนทำอย่างไร ?</h3>
<p style="text-align: left;">เลือกไปที่ menu แล้วก็เลือก Hardware &gt;&gt; Rotate Left หรือ Hardware &gt;&gt; Rotate Right</p>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/03/rotate.png" rel="lightbox[820]"><img class="size-medium wp-image-822 aligncenter" title="rotate" src="http://www.macfeteria.com/wp-content/uploads/2009/03/rotate-300x185.png" alt="rotate" width="300" height="185" /></a></p>
<p style="text-align: left;">
<h3>เปลี่ยน Firmware version ?</h3>
<p>ก็ไม่ยากครับ ไปที่ menu เหมือนเดิม แล้วเลือก Hardware &gt;&gt; Version</p>
<h3>จะลอง Multi-touch ใน Simulator ทำได้ไหม ?</h3>
<p>ทำได้ครับ วิธีการก็คือ กด Option ค้างไว้แล้วก็ลาก mouse<br />
ถ้าหากต้องการ slide นิ้วก็ทำได้ด้วยการกด Option + Shift ลองกดดูครับจะเห็นว่า มันจะมีจุดขึ้นเหมือนรูป</p>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/03/multitouch.png" rel="lightbox[820]"><img class="size-medium wp-image-823 aligncenter" title="multitouch" src="http://www.macfeteria.com/wp-content/uploads/2009/03/multitouch-163x300.png" alt="multitouch" width="163" height="300" /></a></p>
<h3>จะเพิ่มรูปเข้าไปใน Simulator ทำอย่างไร ?</h3>
<p>วิธีการก็คือเอาไฟล์ที่ต้องการไปไว้ที่ ~/Application Support/iPhone Simulator/User/Media/DCIM/100APPLE/ ถ้าเกิดไม่มี folder ที่ชื่อ DCIM และ 100APPLE ก็สร้างขึ้นมาครับ หลังจากนั้นก็ เอารูปที่ต้องการไปไว้ โดยแก้ไขชื่อให้เป็น IMG_XXXX.JPG ( XXXX คือเลขสี่ตัว) ยกตัวอย่างเช่น IMG_0001.JPG และก็ถ้าหากต้องให้มี thumbnail ( รูปเล็กขนาดย่อ) ด้วย ก็ให้ สร้างไฟล์ขนาด 75&#215;75 pixel และก็เปลี่ยนชื่อ เป็น IMG_XXXX.THM เพียงเท่านี้ก็เสร็จเรียบร้อย</p>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/03/finder.jpg" rel="lightbox[820]"><img class="size-medium wp-image-825 aligncenter" title="finder" src="http://www.macfeteria.com/wp-content/uploads/2009/03/finder-300x222.jpg" alt="finder" width="300" height="222" /></a></p>
<p style="text-align: left;">จากตัวอย่างผมวางรูปลงไป ทั้ง .JPG และ THM แล้วเมื่อเปิดดู iPhone Simulator ก็จะเห็นแบบนี้ครับ</p>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/03/simulator.jpg" rel="lightbox[820]"><img class="size-medium wp-image-826 aligncenter" title="simulator" src="http://www.macfeteria.com/wp-content/uploads/2009/03/simulator-156x300.jpg" alt="simulator" width="156" height="300" /></a></p>
<p style="text-align: left;">และก็ยังมีอีกวิธีครับ</p>
<p style="text-align: left;">นั่นก็คือ ลาก  File ที่ต้องการมายัง Safari แล้วหลังจากนั้นกด Click ไปที่รูปค้างไว้สักครู่ ก็จะเห็นหน้าต่างขึ้นมาแบบนี้ครับ</p>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/03/save_from_safari1.png" rel="lightbox[820]"><img class="size-medium wp-image-832 aligncenter" title="save_from_safari1" src="http://www.macfeteria.com/wp-content/uploads/2009/03/save_from_safari1-156x300.png" alt="save_from_safari1" width="156" height="300" /></a></p>
<p style="text-align: left;">แล้วก็กด Save ก็เป็นอันเสร็จ ก็จะเห็นว่าแบบดังนี้</p>
<p style="text-align: center;"><a href="http://www.macfeteria.com/wp-content/uploads/2009/03/simulator.png" rel="lightbox[820]"><img class="size-medium wp-image-833 aligncenter" title="simulator" src="http://www.macfeteria.com/wp-content/uploads/2009/03/simulator-156x300.png" alt="simulator" width="156" height="300" /></a></p>
<p style="text-align: left;">ก็สามารถทำได้ทั้ง PNG , PDF ก็ได้นะครับ ไม่จำเป็นว่าต้องเป็น JPG เสมอไป</p>
<h3>iPhone Simulator มีข้อจำกัดอะไรบ้าง</h3>
<ul>
<li>ไม่สามารถใช้กล้องได้</li>
<li>ไม่สามารถใช้ Accelerometer ได้</li>
<li>ไม่สามารถหมุนเครื่องกลับหัว ได้</li>
<li> OpenGL อาจจะทำงานผิดๆ เขียนเกมส์ อาจจะทำงานได้เร็วใน Simulator แต่เครื่องจริงๆอาจจะไม่ใช่</li>
<li>CoreLocation ไม่สามารถใช้ได้</li>
</ul>
<p>ถ้าใครมีข้อแนะนำหรือว่า Trick &#8211; Tip ต่างๆเกี่ยวกับ iPhone Simulator ก็เม้นกันมาได้ครับ</p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/iphone' rel='tag' target='_self'>iphone</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.macfeteria.com/blog/2009/03/31/tip-trick-iphone-simulator/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Loop Optimize</title>
		<link>http://www.macfeteria.com/blog/2008/10/20/loop-optimize/</link>
		<comments>http://www.macfeteria.com/blog/2008/10/20/loop-optimize/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 11:38:21 +0000</pubDate>
		<dc:creator>[Ter]</dc:creator>
				<category><![CDATA[Technic]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.macfeteria.com/?p=373</guid>
		<description><![CDATA[พอดีว่าผมอ่านเรื่อง Locality of reference แล้วมันน่าสนใจ มันเป็น topic เกี่ยวกับการ optimize ของ memory access ว่าเราจะเขียนโปรแกรมยังไงให้การเข้าถึง memory นั้นเร็วที่สุด ( ถ้าหากเราเข้าถึงเร็วมันก็หมายถึงว่า โปรแกรมของเราก็เร็วขึ้นด้วย ) โดยปกติแล้วในภาษา c/c++ เมื่อเราเขียนข้อมูลในลักษณะของ Array นั้นตัวเลขที่อยู่ด้านซ้ายสุดจะเป็น row ส่วนตัวต่อมาจะเป็น column และวิธีการเขียนให้เพิ่มประสิทธิภาพของเรานั้น ก็ควรจะเขียนให้มันมีการเคลื่อนที่ของตำแหน่งที่จะอ่านต่อไปในลักษณะอ่านอยู่ใน memory page เดียวกัน ดูรูปประกอบ จากภาพ ประกอบ Memory Page นั้นจะเรียงเป็นลักษณะ เหมือนลิ้นชักที่เป็นชั้นๆ (row) มันก็เหมือนกับ เมื่อเราเปิดตู้เอกสาร ที่มีหลายๆลิ้นชัก ถ้าเราจะหาเอกสารสักชิ้น ลองคิดว่าถ้าเราหาทีละชั้น โดยหยิบออกมาทีละชิ้นจนหมดชั้นนั้นแล้วค่อยไปเริ่มชั้นใหม่ เทียบกับ เปิดออกมาหนึ่งชั้นและหยิบมาหนึ่งชั้นแล้วก็ปิด หลังจากนั้นก็เปิดชั้นต่อไปแล้วก็หยิบมาตรวจอีก 1 ชิ้นแล้วก็ไปชั้นใหม่ แบบไหนเร็วกว่า ก็แน่นอนว่า การค้นหาทีละชั้นแล้วค่อยไปหาชั้นต่อไปนั้นเร็วกว่า การเขียนโปรแกรมก็ไม่ได้ต่างอะไร [...]]]></description>
			<content:encoded><![CDATA[<p>พอดีว่าผมอ่านเรื่อง Locality of reference แล้วมันน่าสนใจ มันเป็น topic เกี่ยวกับการ optimize ของ memory access ว่าเราจะเขียนโปรแกรมยังไงให้การเข้าถึง memory นั้นเร็วที่สุด ( ถ้าหากเราเข้าถึงเร็วมันก็หมายถึงว่า โปรแกรมของเราก็เร็วขึ้นด้วย ) โดยปกติแล้วในภาษา c/c++ เมื่อเราเขียนข้อมูลในลักษณะของ Array นั้นตัวเลขที่อยู่ด้านซ้ายสุดจะเป็น row ส่วนตัวต่อมาจะเป็น column และวิธีการเขียนให้เพิ่มประสิทธิภาพของเรานั้น ก็ควรจะเขียนให้มันมีการเคลื่อนที่ของตำแหน่งที่จะอ่านต่อไปในลักษณะอ่านอยู่ใน memory page เดียวกัน ดูรูปประกอบ</p>
<p><a href="http://en.wikipedia.org/wiki/Page_table"><img class="alignnone" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Virtual_address_space_and_physical_address_space_relationship.svg/587px-Virtual_address_space_and_physical_address_space_relationship.svg.png" alt="" width="376" height="383" /></a></p>
<p>จากภาพ ประกอบ Memory Page นั้นจะเรียงเป็นลักษณะ เหมือนลิ้นชักที่เป็นชั้นๆ (row) มันก็เหมือนกับ เมื่อเราเปิดตู้เอกสาร ที่มีหลายๆลิ้นชัก ถ้าเราจะหาเอกสารสักชิ้น ลองคิดว่าถ้าเราหาทีละชั้น โดยหยิบออกมาทีละชิ้นจนหมดชั้นนั้นแล้วค่อยไปเริ่มชั้นใหม่ เทียบกับ เปิดออกมาหนึ่งชั้นและหยิบมาหนึ่งชั้นแล้วก็ปิด หลังจากนั้นก็เปิดชั้นต่อไปแล้วก็หยิบมาตรวจอีก 1 ชิ้นแล้วก็ไปชั้นใหม่ แบบไหนเร็วกว่า</p>
<p>ก็แน่นอนว่า การค้นหาทีละชั้นแล้วค่อยไปหาชั้นต่อไปนั้นเร็วกว่า การเขียนโปรแกรมก็ไม่ได้ต่างอะไร เพื่อเป็นการเห็นชัดๆ ผมมีตัวอย่าง Code ภาษา C ที่ทำการคำนวนการคูณของ Matrix</p>
<p>ตัวอย่าง code แรก ผมทำการคำนวนโดยที่ ตำแหน่งที่ต้องเปลี่ยนบ่อยที่สุดก็คือ k และแน่นอนว่ามันเป็นตำแหน่งของ row</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> i <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; i <span style="color: #002200;">&amp;</span>lt; N; i<span style="color: #002200;">++</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> j <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; j <span style="color: #002200;">&amp;</span>lt; N; j<span style="color: #002200;">++</span> <span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		 <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> k <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; k <span style="color: #002200;">&amp;</span>lt; N; k<span style="color: #002200;">++</span> <span style="color: #002200;">&#41;</span>
			C<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#91;</span>j<span style="color: #002200;">&#93;</span> <span style="color: #002200;">+=</span> A<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#91;</span>k<span style="color: #002200;">&#93;</span> <span style="color: #002200;">*</span> B<span style="color: #002200;">&#91;</span>k<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#91;</span>j<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>และ code ที่สอง โดยผมสลับตำแหน่งของ Loop ให้ตำแหน่งที่ต้องเปลี่ยนบ่อยที่สุดคือ j และมันก็เป็น column</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> i <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; i <span style="color: #002200;">&amp;</span>lt; N; i<span style="color: #002200;">++</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> k <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; k <span style="color: #002200;">&amp;</span>lt; N; k<span style="color: #002200;">++</span> <span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> j <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; j <span style="color: #002200;">&amp;</span>lt; N; j<span style="color: #002200;">++</span> <span style="color: #002200;">&#41;</span>
			C<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#91;</span>j<span style="color: #002200;">&#93;</span> <span style="color: #002200;">+=</span> A<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#91;</span>k<span style="color: #002200;">&#93;</span> <span style="color: #002200;">*</span> B<span style="color: #002200;">&#91;</span>k<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#91;</span>j<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>ก็อย่างที่ผมบอกไป ว่าถ้าเราเข้าถึงข้อมูลทีละชั้น (row) แล้วค่อยๆเลี่อนไปทีละอัน กับหา 1 อันแล้วเปลี่ยนชั้น (row ) อะไรจะ เร็วกว่า ก็ตอบแทบไม่ต้องคิดเลย นั่นก็คือ code อันที่สองมันย่อมเร็วกว่าแน่ๆ เอาละ งั้นเรามาลองทดสอบกันดูเลยดีกว่า ว่ามันจะเร็วกว่าจริงๆหรือ หรือว่ามันจะเร็วกว่าสักเท่าไหร่กันเชียว จากของจริงเลยดีกว่า</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#include</span>
<span style="color: #6e371a;">#include </span>
<span style="color: #6e371a;">#include </span>
<span style="color: #6e371a;">#define MAX_ARRAY 1024</span>
<span style="color: #a61390;">unsigned</span> <span style="color: #a61390;">int</span> GetTimeSnapshot<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">struct</span> timeval tv;
	gettimeofday<span style="color: #002200;">&#40;</span> <span style="color: #002200;">&amp;</span>amp;tv, <span style="color: #a61390;">NULL</span> <span style="color: #002200;">&#41;</span>;
	<span style="color: #a61390;">return</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">unsigned</span> <span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#40;</span>tv.tv_sec <span style="color: #002200;">*</span> <span style="color: #2400d9;">1000</span> <span style="color: #002200;">+</span> tv.tv_usec <span style="color: #002200;">/</span> <span style="color: #2400d9;">1000</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">int</span> main <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span> argc, <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span> <span style="color: #a61390;">const</span> argv<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">int</span> array<span style="color: #002200;">&#91;</span>MAX_ARRAY<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#91;</span>MAX_ARRAY<span style="color: #002200;">&#93;</span> <span style="color: #002200;">=</span> <span style="color: #002200;">&#123;</span><span style="color: #2400d9;">0</span>,<span style="color: #002200;">&#125;</span>;
&nbsp;
	<span style="color: #a61390;">unsigned</span> <span style="color: #a61390;">int</span> x <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>, y <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span> , z <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>;
	<span style="color: #a61390;">unsigned</span> <span style="color: #a61390;">int</span> startTime , endTime;
&nbsp;
	<span style="color: #11740a; font-style: italic;">// Loop A</span>
	startTime <span style="color: #002200;">=</span> GetTimeSnapshot<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;
	<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> y <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span> ; y <span style="color: #002200;">&amp;</span>lt; MAX_ARRAY ; y<span style="color: #002200;">++</span><span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> x <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; x <span style="color: #002200;">&amp;</span>lt; MAX_ARRAY; x<span style="color: #002200;">++</span> <span style="color: #002200;">&#41;</span>
		<span style="color: #002200;">&#123;</span>
			array<span style="color: #002200;">&#91;</span>x<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#91;</span>y<span style="color: #002200;">&#93;</span> <span style="color: #002200;">=</span> <span style="color: #002200;">++</span>z;
		<span style="color: #002200;">&#125;</span>
	<span style="color: #002200;">&#125;</span>
	endTime <span style="color: #002200;">=</span> GetTimeSnapshot<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;	
&nbsp;
	<span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;nLoop A Total time: %d&quot;</span>, <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>endTime <span style="color: #002200;">-</span> startTime<span style="color: #002200;">&#41;</span>;
	<span style="color: #11740a; font-style: italic;">// Loop B</span>
	startTime <span style="color: #002200;">=</span> GetTimeSnapshot<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;
	<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> x <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span> ; x <span style="color: #002200;">&amp;</span>lt; MAX_ARRAY ; x<span style="color: #002200;">++</span><span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> y <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; y <span style="color: #002200;">&amp;</span>lt; MAX_ARRAY; y<span style="color: #002200;">++</span> <span style="color: #002200;">&#41;</span>
		<span style="color: #002200;">&#123;</span>
			array<span style="color: #002200;">&#91;</span>x<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#91;</span>y<span style="color: #002200;">&#93;</span> <span style="color: #002200;">=</span> <span style="color: #002200;">++</span>z;
		<span style="color: #002200;">&#125;</span>
	<span style="color: #002200;">&#125;</span>
	endTime <span style="color: #002200;">=</span> GetTimeSnapshot<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;	
&nbsp;
	<span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;nLoop B Total time: %d&quot;</span>, <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>endTime <span style="color: #002200;">-</span> startTime<span style="color: #002200;">&#41;</span>;
	<span style="color: #a61390;">return</span> <span style="color: #2400d9;">0</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>จาก code ข้างบน ผลลัพธ์ของ สอง Loop นี้ทำงานเหมือนกัน แต่วิธีการต่างกัน<br />
และผลลัพธ์จากการทำงานได้แบบนี้<br />
Loop A Total time: 23<br />
Loop B Total time: 6</p>
<p>โอ้โห จะเห็นว่า มันทำงานเร็วกว่าถึง 4 เท่า !!!<br />
ก็สำหรับวันนี้ถ้าสงสัยอะไรก็ถามได้ใน Forum นะครับ</p>
<p><a href="http://www.macfeteria.com/wp-content/uploads/2008/10/loop_optimized.zip">Download Source Code</a></p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/c%2B%2B' rel='tag' target='_self'>c++</a>, <a class='technorati-link' href='http://technorati.com/tag/programming' rel='tag' target='_self'>programming</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.macfeteria.com/blog/2008/10/20/loop-optimize/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cocoa Programming: Delegate</title>
		<link>http://www.macfeteria.com/blog/2008/07/31/cocoa-programming-delegate/</link>
		<comments>http://www.macfeteria.com/blog/2008/07/31/cocoa-programming-delegate/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 07:03:36 +0000</pubDate>
		<dc:creator>[Ter]</dc:creator>
				<category><![CDATA[Technic]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.macfeteria.com/?p=216</guid>
		<description><![CDATA[Delegate คือ object ที่ทำหน้าที่เสมือนตัวแทนของ object อื่น เหมือนเวลาเราไปกินข้าวนอกบ้าน สมมติว่าเราอยากกินข้าวผัด เราก็อาจจะไปสั่งให้พ่อครัวทำให้เรา หรือเราก็สั่งข้าวผัดจากพนักงาน พนักงานก็จะไปบอกคนทำเก็บเงินว่าเราสั่งรายการอะไรไป และก็เดินไปบอกพ่อครัวอีกทีว่าให้ทำข้าวผัด สุดท้ายก็ได้ข้าวผัดมาเหมือนกัน อธิบายในแบบรูปภาพอาจจะมองได้เป็นแบบนี้ ลองดูตัวอย่าง Code ภาษา C/C++ ต่อไปนี้ สมมติว่าเรามี Class Chef ดังตัวอย่างข้างล่าง class Chef  &#123; public: virtual void servFood&#40;&#41; &#123; printf&#40;&#34;Hamburger for you&#34;&#41;; &#125; &#125;; และมี Class Waiter ดังตัวอย่างข้างล่าง class Waiter &#123; public: Chef c; virtual void servFood&#40;&#41; &#123; c.servFood&#40;&#41;; &#125; &#125;; จากตัวอย่างจะเห็นว่าถ้าหากประกาศ Waiter [...]]]></description>
			<content:encoded><![CDATA[<h2>Delegate</h2>
<p>คือ object ที่ทำหน้าที่เสมือนตัวแทนของ object อื่น เหมือนเวลาเราไปกินข้าวนอกบ้าน สมมติว่าเราอยากกินข้าวผัด เราก็อาจจะไปสั่งให้พ่อครัวทำให้เรา หรือเราก็สั่งข้าวผัดจากพนักงาน พนักงานก็จะไปบอกคนทำเก็บเงินว่าเราสั่งรายการอะไรไป และก็เดินไปบอกพ่อครัวอีกทีว่าให้ทำข้าวผัด สุดท้ายก็ได้ข้าวผัดมาเหมือนกัน อธิบายในแบบรูปภาพอาจจะมองได้เป็นแบบนี้</p>
<p style="text-align: center;"><img class="size-medium wp-image-218 aligncenter" title="Delegate" src="http://www.macfeteria.com/wp-content/uploads/2008/07/delegate-300x104.png" alt="" width="300" height="104" /></p>
<p style="text-align: left;">ลองดูตัวอย่าง Code ภาษา C/C++ ต่อไปนี้</p>
<p style="text-align: left;"><span id="more-216"></span></p>
<p style="text-align: left;">สมมติว่าเรามี Class Chef ดังตัวอย่างข้างล่าง</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">class</span> Chef  <span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
	<span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> servFood<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Hamburger for you&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></div></div>

<p style="text-align: left;">และมี Class Waiter ดังตัวอย่างข้างล่าง</p>
<p style="text-align: left;">

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">class</span> Waiter <span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
	Chef c<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> servFood<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		c.<span style="color: #007788;">servFood</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></div></div>

<p style="text-align: left;">จากตัวอย่างจะเห็นว่าถ้าหากประกาศ Waiter แล้วเรียกใช้ servFood ก็ได้ผลลัพธ์เหมือนกับ Chef</p>
<p style="text-align: left;">ทีนี้ลองดูตัวอย่าง ที่ยากขึ้นหน่อย โดยเราทำการแก้ไข Waiter ใหม่ เพื่อให้เป็น delegate ในลักษณะแบบนี้</p>
<p style="text-align: left;">

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">class</span> Waiter <span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
	Waiter<span style="color: #008000;">&#40;</span>Chef<span style="color: #000040;">*</span> new_chef<span style="color: #008000;">&#41;</span> <span style="color: #008080;">:</span> Waiter<span style="color: #008000;">&#40;</span>new_chef<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
	Chef<span style="color: #000040;">*</span> c<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">void</span> foo<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		c<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>foo<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></div></div>

<p style="text-align: left;">และเราก็มี class เพิ่มขึ้นมาอีก 1 สมมติให้ชื่อว่า PizzaChef โดย inherit จาก Chef</p>
<p style="text-align: left;">

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">class</span> PizzaChef <span style="color: #008080;">:</span> <span style="color: #0000ff;">public</span> Chef
<span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
	<span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> servFood<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Pizza for you.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></div></div>

<p style="text-align: left;">และเราก็เขียนโปรแกรมขึ้นมาทดสอบ ดังตัวอย่าง</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
Waiter hamburWaiter<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">new</span> Chef<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
Waiter pizzaWaiter<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">new</span> PizzaChef<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> hamberWaiter.<span style="color: #007788;">servFood</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> pizzaWaiter.<span style="color: #007788;">servFood</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>และก็จะได้ผลลัพธ์ แบบนี้</p>
<p><span style="color: #cccc66;">Hamburger for you<br />
Pizza for you</span></p>
<p style="text-align: left;">ในการเขียน Program ด้วย Cocoa มีการใช้ delegate instance เป็นลักษณะของ Helper Object โดยจุดประสงค์หลักๆคืิอ เพื่อให้ class ที่ inherit ไปนั้นสามารถเพิ่มเติมและแก้ไขการตอบสนองต่อ event ได้ง่ายขึ้น ยกตัวอย่างเช่นว่า ในการ close window เมื่อ event เกิดขึ้น object ต่างๆที่อยู่บน window นั้นมีข้อจำกัดในการรับรู้ว่า ส่วนอื่นๆมีการเปลี่ยนแปลงหรือไม่ ลองดูภาพข้างล่าง</p>
<p style="text-align: center;"><img class="size-full wp-image-231 aligncenter" title="Window Delegate" src="http://www.macfeteria.com/wp-content/uploads/2008/07/win_delegate1.png" alt="" width="500" height="361" /></p>
<p style="text-align: center;">
<p style="text-align: left;">จากรูปเมื่อเรา กด close หน้าต่าง window จะส่ง WindowShouldClose ไปถาม delegate ว่าควรจะทำอะไร ถ้าหากว่าไม่ได้ทำการ implement อะไรไว้ก็จะ ส่งค่ากลับมาทันที  แต่ถ้าเกิดว่าได้ implement ไว้อย่างเช่นเป็นต้นว่า มีการตรวจสอบก่อนว่าต้องการ ที่จะ save file ก่อนหรือไม่ ก็จะทำงานตรงนี้ก่อนแล้วค่อยส่งค่ากลับไป ต่อไปก็คือการนำไปใช้ ตัวอย่างที่เห็นได้ชัดๆใน Cocoa Programming คือการใช้งาน กับ NSTableView เดี๋ยวครั้งหน้าผมจะเขียนการใช้งาน delegate และ NSTableView น่าจะเข้าใจมากขึ้น</p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/c%2B%2B' rel='tag' target='_self'>c++</a>, <a class='technorati-link' href='http://technorati.com/tag/cocoa' rel='tag' target='_self'>cocoa</a>, <a class='technorati-link' href='http://technorati.com/tag/objective-c' rel='tag' target='_self'>objective-c</a>, <a class='technorati-link' href='http://technorati.com/tag/programming' rel='tag' target='_self'>programming</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.macfeteria.com/blog/2008/07/31/cocoa-programming-delegate/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Pure Virtual</title>
		<link>http://www.macfeteria.com/blog/2008/02/28/pure-virtual/</link>
		<comments>http://www.macfeteria.com/blog/2008/02/28/pure-virtual/#comments</comments>
		<pubDate>Thu, 28 Feb 2008 16:44:42 +0000</pubDate>
		<dc:creator>[Ter]</dc:creator>
				<category><![CDATA[Technic]]></category>
		<category><![CDATA[advance]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://maccafe.wordpress.com/?p=10</guid>
		<description><![CDATA[คือจาก เมื่อวันที่ผ่านมา เนื่องจากว่า งานที่ทำอยู่มีส่วนต้องให้ port โปรแกรมจาก Win มาสู่ mac และบังเอิญว่า ผม compile แล้วมันผ่าน แต่ว่าตอน Runtime มันดัน Error สิ่งที่มันบอกมาก็คือว่า pure virtual method called terminated called with out an active exception ปัญหาที่เกิดขึ้น ก็ยัง งงๆๆว่าเป็นเพราะอะไร แต่พอหลังจากให้เพื่อนมาดูแล้วก็นั่งถกกัน ว่ามันเกิด เฉพาะกับ mac หรือเปล่าเพราะว่าใน win ไม่เห็นมันจะเกิด ก็เลยทำการเขียน code ที่ทำงานแบบเดียวกัน ก็ัดังตัวอย่างข้างล่าง #include &#60;stdio.h&#62; class Base; void foo&#40;Base*&#41;; class Base &#123; public: Base&#40;&#41;&#123;&#125;; virtual [...]]]></description>
			<content:encoded><![CDATA[<p>คือจาก เมื่อวันที่ผ่านมา  เนื่องจากว่า งานที่ทำอยู่มีส่วนต้องให้ port โปรแกรมจาก Win มาสู่ mac และบังเอิญว่า ผม compile แล้วมันผ่าน แต่ว่าตอน Runtime มันดัน Error สิ่งที่มันบอกมาก็คือว่า  <span style="color: #808000;"><strong>pure virtual method called terminated called with out an active exception</strong></span> ปัญหาที่เกิดขึ้น ก็ยัง งงๆๆว่าเป็นเพราะอะไร แต่พอหลังจากให้เพื่อนมาดูแล้วก็นั่งถกกัน ว่ามันเกิด เฉพาะกับ mac หรือเปล่าเพราะว่าใน win ไม่เห็นมันจะเกิด ก็เลยทำการเขียน code ที่ทำงานแบบเดียวกัน ก็ัดังตัวอย่างข้างล่าง</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;stdio.h&gt;</span>
<span style="color: #0000ff;">class</span> Base<span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> foo<span style="color: #008000;">&#40;</span>Base<span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">class</span> Base
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		Base<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">virtual</span> ~Base<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			foo<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">this</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> banana<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> foo<span style="color: #008000;">&#40;</span>Base<span style="color: #000040;">*</span> base<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	base<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>banana<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">class</span> Derived<span style="color: #008080;">:</span> <span style="color: #0000ff;">public</span> Base
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		Derived<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
		~Derived<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> banana<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Banana&quot;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span> <span style="color: #0000ff;">const</span> argv<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
&nbsp;
	Derived<span style="color: #000040;">*</span> test <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> Derived<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Hello, World!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">delete</span> test<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>ก็ถ้า ดูตาม code ก็จะเห็นว่า มี Base กับ Derived  <span style="color: #808000;"><strong>เนื่องจากว่า Base Class มันเป็น Pure Virtual (Abtract Class) เราต้อง implement ส่วนของ code การทำงานใน derived class เสมอไม่อาจจะเขียน implement ใน Base Class ได้  </strong></span> และปัญหาจากโปรแกรมข้างบนเกิดขึ้นเพราะในขณะที่ base class ได้เรียก destructor ของตัวเองนั้น มันกลับไปเรียกใช้งานฟังชั่นใน derived class ด้วย ซึ่งนั่นก็ทำให้มันเกิด error เพราะว่า derived class ได้ถูกทำลายไปก่อนแล้ว  ทำให้ไม่สามารถเรียกได้</p>
<p>ลองดูตรง</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">virtual</span> ~Base<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	foo<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">this</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>จาก destructor นี้จะเห็นว่า มีการเรียกฟังก์ชั่น foo และแน่นอนว่า foo ไปเรียก</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">base<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>banana<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>อีกที สืบเนื่องจากว่ามันเป็น pure virtual แปลว่าตัว Base Class เองไม่อาจจะเขียน implement code ได้มันจึงต้องไปเรียก banana ในตัว Derived Class ที่มีการเขียน implement code และ Derived นั้นได้ทำลายจาก destructor ไปเรียบร้อยแล้ว มันเลยไม่เจอ banana ทำให้เกิด error นั่นเอง</p>
<p>ลองศึกษา เพิ่มเติมเกี่ยวกับ Virtual  Function ได้ที่ <a title="Vitual Function" href="http://en.wikipedia.org/wiki/Virtual_function">http://en.wikipedia.org/wiki/Virtual_function</a></p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/advance' rel='tag' target='_self'>advance</a>, <a class='technorati-link' href='http://technorati.com/tag/c%2B%2B' rel='tag' target='_self'>c++</a>, <a class='technorati-link' href='http://technorati.com/tag/class' rel='tag' target='_self'>class</a>, <a class='technorati-link' href='http://technorati.com/tag/programming' rel='tag' target='_self'>programming</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.macfeteria.com/blog/2008/02/28/pure-virtual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

