<?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>Kan Ouivirach</title>
	<atom:link href="http://zkan.nokkok.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://zkan.nokkok.com</link>
	<description>Just a PhD candidate at AIT</description>
	<lastBuildDate>Fri, 30 Jul 2010 08:47:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>เมื่อผมเข้ากรุงไปงาน #petdotalkshow</title>
		<link>http://zkan.nokkok.com/2010/07/%e0%b9%80%e0%b8%a1%e0%b8%b7%e0%b9%88%e0%b8%ad%e0%b8%9c%e0%b8%a1%e0%b9%80%e0%b8%82%e0%b9%89%e0%b8%b2%e0%b8%81%e0%b8%a3%e0%b8%b8%e0%b8%87%e0%b9%84%e0%b8%9b%e0%b8%87%e0%b8%b2%e0%b8%99-petdotalkshow/</link>
		<comments>http://zkan.nokkok.com/2010/07/%e0%b9%80%e0%b8%a1%e0%b8%b7%e0%b9%88%e0%b8%ad%e0%b8%9c%e0%b8%a1%e0%b9%80%e0%b8%82%e0%b9%89%e0%b8%b2%e0%b8%81%e0%b8%a3%e0%b8%b8%e0%b8%87%e0%b9%84%e0%b8%9b%e0%b8%87%e0%b8%b2%e0%b8%99-petdotalkshow/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 17:55:29 +0000</pubDate>
		<dc:creator>zkan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[petdo]]></category>
		<category><![CDATA[talk show]]></category>

		<guid isPermaLink="false">http://zkan.nokkok.com/?p=279</guid>
		<description><![CDATA[วันนี้ไปงาน #petdotalkshow จัดโดยคุณ @rawitat มาครับ รายละเอียดของงานดูได้ ที่นี่ เป็นงานที่ดีมากๆ เลยงานหนึ่ง และผมโดยส่วนตัวแล้วเป็นคนชอบฟังพวกทอร์คโชว์ด้วย ก็เลยซื้อบัตรแบบไม่ลังเล งานนี้เลยโฉบเดี่ยว
เกริ่นสักหน่อย.. ผมได้ติดตามการ์ตูน #petdo มาแบบอ่านบ้าง ไม่อ่านบ้าง แต่ก็พอคิดได้ว่าเป็นการ์ตูนที่สะท้อนถึงประสบการณ์การทำงานในด้าน IT ได้อย่างเห็นภาพและตรงประเด็น ไม่ใช่แค่เอาฮาอย่างเดียว แต่ก็สามารถเป็นแง่คิดสอนอะไรผมหลายๆ อย่าง และคิดว่าจะมีประโยชน์ต่ออาชีพการงานของผมในอนาคต (ผมยังเรียนอยู่และไม่เคยทำงานแบบเต็มเวลามาก่อน  ) ใครอยากลองอ่านก็เชิญที่ iampetdo.com ครับ
ก่อนอื่น ขอนอกเรื่องก่อนนะครับ ผมไปถึงที่งานตอนประมาณ 11 โมงกว่าๆ มาถึงก็เจอไอ้พวกนี้ครับ
 
ทั้งผู้รักษาความปลอดภัย ทั้งพนักงานต้อนรับใส่กระดิ่งเป็นโดเรม่อนกวักอีก ด้วยความหมันไส้หน้ากวนๆ ของพวกมัน ก็เลยขอสักที

ประทับใจครับ คือแว๊บแรกที่ผมเห็นหอประชุมปรีดี พนมยงค์ ผมคิดว่านี่เป็นตึกร้างอะ &#8211; -&#8221; แต่แค่ไอ้ตัว 3 ตัวนี้มาต้อนรับอยู่ข้างหน้า ก็ทำให้อะไรๆ ดูดีขึ้นครับ ชอบๆ
พอไปถึงหน้างานจะไปลงทะเบียน ก็ได้ยินคุณ @nonggade ถามว่าทำไมมาเร็วจัง ซึ่งผมก็ไม่ได้ตอบอะไรในตอนนั้น ก็มาขอตอบในบล็อกนี้แทนละกันว่าผมมีจุดประสงค์รอง [...]]]></description>
			<content:encoded><![CDATA[<p>วันนี้ไปงาน <a title="#petdotalkshow" href="http://search.twitter.com/search?q=%23petdotalkshow">#petdotalkshow</a> จัดโดยคุณ <a title="@rawitat" href="http://twitter.com/rawitat">@rawitat</a> มาครับ รายละเอียดของงานดูได้ <a title="งาน #petdotalkshow" href="http://www.iampetdo.com/petdotalkshow">ที่นี่</a> เป็นงานที่ดีมากๆ เลยงานหนึ่ง และผมโดยส่วนตัวแล้วเป็นคนชอบฟังพวกทอร์คโชว์ด้วย ก็เลยซื้อบัตรแบบไม่ลังเล งานนี้เลยโฉบเดี่ยว</p>
<p>เกริ่นสักหน่อย.. ผมได้ติดตามการ์ตูน <a href="http://search.twitter.com/search?q=%23petdo">#petdo</a> มาแบบอ่านบ้าง ไม่อ่านบ้าง แต่ก็พอคิดได้ว่าเป็นการ์ตูนที่สะท้อนถึงประสบการณ์การทำงานในด้าน IT ได้อย่างเห็นภาพและตรงประเด็น ไม่ใช่แค่เอาฮาอย่างเดียว แต่ก็สามารถเป็นแง่คิดสอนอะไรผมหลายๆ อย่าง และคิดว่าจะมีประโยชน์ต่ออาชีพการงานของผมในอนาคต (ผมยังเรียนอยู่และไม่เคยทำงานแบบเต็มเวลามาก่อน <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) ใครอยากลองอ่านก็เชิญที่ <a title="iampetdo.com" href="http://www.iampetdo.com/">iampetdo.com</a> ครับ</p>
<p><span id="more-279"></span>ก่อนอื่น ขอนอกเรื่องก่อนนะครับ ผมไปถึงที่งานตอนประมาณ 11 โมงกว่าๆ มาถึงก็เจอไอ้พวกนี้ครับ</p>
<p style="text-align: center;"><a href="http://zkan.nokkok.com/wp-content/uploads/2010/07/petdo-security.jpg"><img class="size-medium wp-image-287" title="petdo-security" src="http://zkan.nokkok.com/wp-content/uploads/2010/07/petdo-security-179x300.jpg" alt="" width="179" height="300" /></a> <a href="http://zkan.nokkok.com/wp-content/uploads/2010/07/petdo-welcome.jpg"><img class="size-medium wp-image-288" title="petdo-welcome" src="http://zkan.nokkok.com/wp-content/uploads/2010/07/petdo-welcome-179x300.jpg" alt="" width="179" height="300" /></a></p>
<p>ทั้งผู้รักษาความปลอดภัย ทั้งพนักงานต้อนรับใส่กระดิ่งเป็นโดเรม่อนกวักอีก ด้วยความหมันไส้หน้ากวนๆ ของพวกมัน ก็เลยขอสักที</p>
<p><a href="http://zkan.nokkok.com/wp-content/uploads/2010/07/petdo-with-my-foot.jpg"><img class="aligncenter size-medium wp-image-291" title="petdo-with-my-foot" src="http://zkan.nokkok.com/wp-content/uploads/2010/07/petdo-with-my-foot-300x179.jpg" alt="" width="300" height="179" /></a></p>
<p>ประทับใจครับ คือแว๊บแรกที่ผมเห็นหอประชุมปรีดี พนมยงค์ ผมคิดว่านี่เป็นตึกร้างอะ &#8211; -&#8221; แต่แค่ไอ้ตัว 3 ตัวนี้มาต้อนรับอยู่ข้างหน้า ก็ทำให้อะไรๆ ดูดีขึ้นครับ ชอบๆ</p>
<p>พอไปถึงหน้างานจะไปลงทะเบียน ก็ได้ยินคุณ <a title="@rawitat" href="http://twitter.com/nonggade">@nonggade</a> ถามว่าทำไมมาเร็วจัง ซึ่งผมก็ไม่ได้ตอบอะไรในตอนนั้น ก็มาขอตอบในบล็อกนี้แทนละกันว่าผมมีจุดประสงค์รอง นั่นก็คือ..<br />
<a href="http://zkan.nokkok.com/wp-content/uploads/2010/07/sendai-ramen-restaurant.jpg"><img class="size-medium wp-image-285 aligncenter" title="sendai-ramen-restaurant" src="http://zkan.nokkok.com/wp-content/uploads/2010/07/sendai-ramen-restaurant-179x300.jpg" alt="" width="179" height="300" /></a><br />
เซนไดราเมน มอคโคริ สาขาทองหล่อ นั่นเอง แหะๆ แบบว่าอยากลองอะ ทำไมไม่ไปกินก่อนแล้วค่อยมาลงทะเบียน? นี่คือเหตุผลครับ <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /><br />
<a href="http://zkan.nokkok.com/wp-content/uploads/2010/07/sendai-ramen-with-petdo.jpg"><img class="size-medium wp-image-286 aligncenter" title="sendai-ramen-with-petdo" src="http://zkan.nokkok.com/wp-content/uploads/2010/07/sendai-ramen-with-petdo-179x300.jpg" alt="" width="179" height="300" /></a><br />
อยากเอาไปถ่ายรูปนั่นเอง อิอิ</p>
<p>โอเค ได้เวลาเข้าเรื่องสักที ก่อนงานจะเริ่มดูเหมือนคนจะน้อย แต่พองานเริ่มจริงๆ คนก็เริ่มมากัน ถึงจะไม่เต็มห้อง แต่ผมว่างานนี้ก็ประสบความสำเร็จได้ระดับหนึ่งเลยทีเดียว มีวง <a title="iHear band" href="http://www.ihearband.com/">#iHear</a> มาเปิดงาน ตามด้วยสไลด์แซวด้านการศึกษาที่ใช้เทมเพลตซ้ำๆ กันมา และ iPhone ที่ว่าสัญญาณจะไม่ค่อยมีเวลาที่ถือผิดวิธี และคุณ <a title="@rawitat" href="http://twitter.com/rawitat">@rawitat</a> ก็ออกมาเปิดตัว</p>
<p><a href="http://zkan.nokkok.com/wp-content/uploads/2010/07/rawitat-coming.jpg"><img class="aligncenter size-medium wp-image-293" title="rawitat-coming" src="http://zkan.nokkok.com/wp-content/uploads/2010/07/rawitat-coming-300x179.jpg" alt="" width="300" height="179" /></a></p>
<p>เริ่มแรกก็จะเล่าเรื่องว่าพฤติกรรมของคนรอบตัวเราเป็นอย่างไร ประสบการณ์จริงที่ไปเจอมากับพนักงานขายสินค้า และพฤติกรรมที่ไม่ดีบนเว็บต่างๆ เป็นอย่างไร แซวชาวบ้านว่าให้เอาอย่างเว็บ <a title="Drama Addict" href="http://drama-addict.com/">Drama-Addict.com</a> เพราะสามารถรวมข้อมูลจากหลายๆ เว็บมาไว้ที่เดียวกันได้.. ก็ขอชื่นชมด้วยครับ อีกทั้งยังเล่าประสบการณ์ที่เป็น อ. ว่าได้เจอนักศึกษาแบบไหนอีกด้วย อีกหน่อย ผมก็คงเจอแบบนี้เช่นกัน ฮะๆ และผมชอบมากเลยที่กล่าวพาดพิงถึง Java ว่ามันช้า.. เห็นด้วยครับ! (โดยส่วนตัวแล้วไม่ชอบ)</p>
<p>มีการกล่าวถึงการทำสไลด์ที่ไม่ควรเอาเยี่ยงอย่าง เช่น ใช้ฟอนต์หลายฟอนต์ ใช้สีที่ไม่เหมาะต่อการอ่าน ใช้ Bullet อย่างไม่เหมาะสม การใส่รูปที่ไม่สื่อ และการใส่อนิเมชั่นมาเยอะเกินทำให้ไขว้เขว เสียสมาธิ</p>
<p>ทั้งนี้ทั้งนั้นก็เพื่อโยงไปตอบคำถามว่า เพ็ดโด้คืออะไร? นั่นเอง ผมชอบสไลด์หน้าหนึ่งที่ว่า &#8220;Learnนิ่ง by ดูing&#8221; ดูเป็นการสะท้อนปัญหาของสังคมไทยจริงๆ ที่เราจำเป็นต้องช่วยกันแก้ไขอย่างจริงจัง</p>
<p>ก่อนที่จะพักครึ่ง ก็ได้เชิญแขกพิเศษมา นั่นก็คือ อ. <a title="@jittat" href="http://twitter.com/jittat">@jittat</a> นั่นเองครับ มาเป็นตัวอย่างของ อ. เพ็ดโด้ แค่ออกมาแสดงตัวก็ฮาแล้ว แต่ดูท่า อ. ท่านจะตื่นเต้นมากไปหน่อย หุหุ อย่างไรก็ตามแต่ อ. ท่านนี้ เป็น อ. ที่ผมนับถือด้วย เป็นคนที่เก่งมาก และแจกเกรด F ให้ผมด้วย! ฮะๆ แต่ถ้าตอนนั้นไม่ได้ F มา ผมคงจะเหลวไหลไปไหนต่อไปแล้ว ขอบคุณอีกทีครับที่ให้ F ผม ตาสว่างเห็นสัจธรรม (ไม่ใช่ สัตว์จะทำ นะครับ) กันเลยทีเดียว -/\-</p>
<p>การเล่าเรื่องจะอ้างอิงถึงการ์ตูนเพ็ดโด้บางตอนเอามาพูดขยายความ และเรียบเรียงใหม่ ทำได้ดีเลยทีเดียวครับ ฟังและเข้าใจได้ง่าย มีข้อเสนอแนะอย่างหนึ่งครับ ผมว่าน่าจะทำให้ฉากหลังของโปรเจคเตอร์มันใหญ่ๆ ไปเลย จะได้เห็นคำพูดในการ์ตูนได้ชัดเจนมากขึ้นครับ (บางตอนผมไม่ได้อ่านก็เลย งงๆ เล็กน้อย)</p>
<p>พักครึ่ง.. วง <a title="iHear band" href="http://www.ihearband.com/">#iHear</a> ก็มาเล่นให้ฟังต่อ ดนตรีเพราะ เพลงเพราะ นักร้องเสียงดีกันทุกคนเลย แหะๆ แต่บางทีพูดอะไรมา ผมฟังไม่ค่อยรู้เรื่องอะ เสียงไมค์มันออกมาอู้ๆ ไปหน่อย</p>
<p>กลับมาครึ่งหลัง ก็ได้พูดถึง User/Client โดยจะอ้างอิงถึงการ์ตูนแต่ละตอนครับ แล้วก็เล่าถึงว่าคนเราส่วนใหญ่จะมองที่ผลแต่ไม่ค่อยมองที่เหตุ แล้วก็มีสไลด์หนึ่ง ที่ผมก็ชอบอีกเช่นกันที่เป็นกราฟที่เอามาจากหนังสือเล่มหนึ่ง (จำชื่อไม่ได้) แสดงให้เห็นว่า People สำคัญที่สุด และ Technology อยู่อันดับสุดท้าย แต่ในความเป็นจริงในหลายๆ ที่รวมไปถึงในประเทศของเรา อันดับ 1 ดันเป็น Technology และอันดับสุดท้ายเป็น People อันนี้โดนมากเลยครับ ตัวผมเองบางทีก็ชอบไปเล่นเทคโนโลยีก่อนเช่นกัน <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>จากนั้นก็ต่อด้วยเรื่อง Failๆ ของ Usability ซึ่งได้ยกตัวอย่างจากรูปที่ถ่ายมาในชีวิตประจำวัน แล้วก็กลับมาเล่าถึงเรื่องผู้ใช้ทั่วๆ ไป ที่ไม่กล้าเปลี่ยนแปลง และยึดติดกับสิ่งที่ตัวเองคิด และสิ่งที่ใช้อยู่ในชีวิตประจำวัน ยกตัวอย่างเรื่อง การแสดงผลที่ผิดพลาดของ IE ซึ่งผู้ใช้ประมาณว่าไม่ยอมเปลี่ยนมาใช้ Firefox ด้วยเหตุผลต่างๆ นานา แต่พอเอาไอคอนของ IE มาแทนไอคอนของ Firefox และเอามาไว้ตำแหน่งเดียวกับไอคอนเดิมของ IE พบว่า ผู้ใช้สามารถใช้ Firefox ได้อย่างปกติ.. ต่อมาก็เล่าถึงเรื่อง Requirement ที่ไม่ชัดเจนและเป็นไปไม่ได้ และอะไรอีกหลายๆ อย่าง ตลกดีครับ ฮากันเข้าไป แต่ฮาอย่างเดียวก็คงไม่เหมาะ เราต้องเข้าใจความจริงด้วย และต้องยอมรับมัน &#8212; อันนี้เขียนไว้เตือนสติตัวเองนะครับ</p>
<p>ไม่รู้ว่าทำไม ผมรู้สึกว่าครึ่งแรกดูสนุกกว่าครึ่งหลัง แต่ครึ่งหลังดูฮากว่า ฮะๆ แล้วก็แอบงอนด้วย ทำไมไม่มีใครมาแจกน้ำผมมั่งเลย ชิๆ (แซวเล่นนะครับ <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> )</p>
<p>และตอนสุดท้ายก็ได้ฝากข้อคิดไว้ว่าให้กำจัด Problem Generator (หรือ ไอ้เพ็ดโด้) ทิ้งซะก่อน นั่นก็คือให้ &#8220;แก้ปัญหาที่ต้นเหตุ&#8221; นั่นเอง <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://zkan.nokkok.com/wp-content/uploads/2010/07/petdotalkshow-ending.jpg"><img class="aligncenter size-medium wp-image-300" title="petdotalkshow-ending" src="http://zkan.nokkok.com/wp-content/uploads/2010/07/petdotalkshow-ending-300x179.jpg" alt="" width="300" height="179" /></a></p>
<p>คุ้มค่าทุกบาทครับ สนับสนุนเสื้อไปทั้ง 3 แบบ แหะๆ ใครมาอ่านบล็อกผมก็ขอแนะนำให้ไปฟังกันนะครับถ้ามีครั้งต่อไป จริงๆ ผมก็ไม่ชอบเข้ามาในเมืองสักเท่าไหร่ ที่ยอมเข้ามาก็เพราะงานนี้เลยนะเนี่ย เย้! จะคอยติดตามผลงานต่อไปครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://zkan.nokkok.com/2010/07/%e0%b9%80%e0%b8%a1%e0%b8%b7%e0%b9%88%e0%b8%ad%e0%b8%9c%e0%b8%a1%e0%b9%80%e0%b8%82%e0%b9%89%e0%b8%b2%e0%b8%81%e0%b8%a3%e0%b8%b8%e0%b8%87%e0%b9%84%e0%b8%9b%e0%b8%87%e0%b8%b2%e0%b8%99-petdotalkshow/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to install OpenCV 2.1 on Ubuntu</title>
		<link>http://zkan.nokkok.com/2010/07/how-to-install-opencv-2-1-on-ubuntu/</link>
		<comments>http://zkan.nokkok.com/2010/07/how-to-install-opencv-2-1-on-ubuntu/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 14:28:23 +0000</pubDate>
		<dc:creator>zkan</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenCV]]></category>

		<guid isPermaLink="false">http://zkan.nokkok.com/?p=259</guid>
		<description><![CDATA[The new version of OpenCV&#8217;s changed the way to install by using cmake. I also have to update myself and find some information regarding it. Recently, I&#8217;ve read the tutorial on installing OpenCV 2.1 in Ubuntu which explains very well; so, I follow this tutorial and I would note my installation steps here.

install dependencies as [...]]]></description>
			<content:encoded><![CDATA[<p>The new version of OpenCV&#8217;s changed the way to install by using cmake. I also have to update myself and find some information regarding it. Recently, I&#8217;ve read the tutorial on <a href="http://www.samontab.com/web/2010/04/installing-opencv-2-1-in-ubuntu/">installing OpenCV 2.1 in Ubuntu</a> which explains very well; so, I follow this tutorial and I would note my installation steps here.</p>
<ol>
<li>install dependencies as follows (please also see the screen shots below).
<ul>
<li>libcv4</li>
<li>libcv-dev</li>
<li>libcvaux4</li>
<li>libcvaux-dev</li>
<li> libhighgui4</li>
<li> libhighgui-dev</li>
<li> opencv-doc (optional)</li>
<li>ffmpeg (optional; if you want to use ffmpeg to  do video processing)</li>
</ul>
<p style="text-align: center;"><a href="http://zkan.nokkok.com/wp-content/uploads/2010/07/check-opencv-packages01.png"><img class="size-medium  wp-image-260 aligncenter" title="check-opencv-packages01" src="http://zkan.nokkok.com/wp-content/uploads/2010/07/check-opencv-packages01-300x187.png" alt="check-opencv-packages01" width="300" height="187" /></a></p>
<p style="text-align: center;"><a href="http://zkan.nokkok.com/wp-content/uploads/2010/07/check-opencv-packages02.png"><img class="size-medium  wp-image-262 aligncenter" title="check-opencv-packages02" src="http://zkan.nokkok.com/wp-content/uploads/2010/07/check-opencv-packages02-300x187.png" alt="check-opencv-packages02" width="300" height="187" /></a></p>
</li>
<li>install cmake using the command <code>sudo apt-get install cmake</code>.</li>
<li>run <code>cmake -D WITH_FFMPEG=ON -D CMAKE_INSTALL_PREFIX=${HOME}/opencv/ .</code>.
<ul>
<li>Note that there is a dot at the end of the command above which means to run at the current directory.</li>
<li>The options mean to use ffmpeg and to set the OpenCV path in your home directory.</li>
</ul>
</li>
<li>check if ffmpeg is available and the folder to install is correct. See the screen shot below.
<p style="text-align: center;"><a href="http://zkan.nokkok.com/wp-content/uploads/2010/07/config-checking.png"><img class="size-medium wp-image-263 aligncenter" title="config-checking" src="http://zkan.nokkok.com/wp-content/uploads/2010/07/config-checking-300x187.png" alt="config-checking" width="300" height="187" /></a></p>
</li>
<li>run the command <code>make</code></li>
<li>run the command <code>sudo make install</code>.</li>
<li>The last thing is to is to tell the dynamic linker where the DLLs are;  so, add the line: <code>export LD_LIBRARY_PATH=${HOME}/opencv/lib</code> to ~/.bashrc  and then relogin.</li>
</ol>
<p>finish.. <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://zkan.nokkok.com/2010/07/how-to-install-opencv-2-1-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>การใช้ OpenCV สร้างกราฟ Histogram จากรูป</title>
		<link>http://zkan.nokkok.com/2010/03/%e0%b9%83%e0%b8%8a%e0%b9%89-opencv-%e0%b8%aa%e0%b8%a3%e0%b9%89%e0%b8%b2%e0%b8%87-histogram-%e0%b8%88%e0%b8%b2%e0%b8%81%e0%b8%a3%e0%b8%b9%e0%b8%9b/</link>
		<comments>http://zkan.nokkok.com/2010/03/%e0%b9%83%e0%b8%8a%e0%b9%89-opencv-%e0%b8%aa%e0%b8%a3%e0%b9%89%e0%b8%b2%e0%b8%87-histogram-%e0%b8%88%e0%b8%b2%e0%b8%81%e0%b8%a3%e0%b8%b9%e0%b8%9b/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 15:53:35 +0000</pubDate>
		<dc:creator>zkan</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Grayscale]]></category>
		<category><![CDATA[Histogram]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenCV]]></category>

		<guid isPermaLink="false">http://zkan.nokkok.com/?p=242</guid>
		<description><![CDATA[บล็อกนี้ผมขอเสนอวิธีใช้ฟังก์ชั่นจาก OpenCV สร้างกราฟ Histogram จากค่าสีที่ได้จากรูปที่เป็น Grayscale นะครับ ซึ่งก็สามารถนำไปประยุกต์ใช้กับรูปที่เป็น RGB หรือ HSV ได้เหมือนกันครับ
ก่อนอื่นเลย Histogram ของรูป คืออะไร.. มันก็คือกราฟที่เกิดจากการพลอตจำนวนของ pixel ที่ค่าสีนั้นๆ นั่นเอง แกน X คือค่าของสี ส่วนแกน Y คือจำนวนของ pixel (อ่านเพิ่มเติมได้ที่ Image histogram ครับ)
เมื่อเราทราบหลักการของการสร้าง Histogram จากรูปแล้ว เราก็มาดูที่โค้ดกันครับ เริ่มต้นเราก็ประกาศขนาดของ Histogram ครับ ให้มีขนาด 256 ช่อง (ค่าสีปกติจะมีค่าระหว่าง 0-255 ในที่นี้ผมจะให้ช่องหนึ่งคือค่าสีหนึ่งนะครับ ซึ่งค่านี้สามารถเปลี่ยนแปลงได้แล้วแต่งานครับ)

int bins = 256;
int hsize&#91;&#93; = &#123; bins &#125;;

ในโค้ดของผมนี้ผมจะสร้าง Histogram ที่เป็น uniform นะครับ [...]]]></description>
			<content:encoded><![CDATA[<p>บล็อกนี้ผมขอเสนอวิธีใช้ฟังก์ชั่นจาก OpenCV สร้างกราฟ Histogram จากค่าสีที่ได้จากรูปที่เป็น Grayscale นะครับ ซึ่งก็สามารถนำไปประยุกต์ใช้กับรูปที่เป็น RGB หรือ HSV ได้เหมือนกันครับ</p>
<p>ก่อนอื่นเลย Histogram ของรูป คืออะไร.. มันก็คือกราฟที่เกิดจากการพลอตจำนวนของ pixel ที่ค่าสีนั้นๆ นั่นเอง แกน X คือค่าของสี ส่วนแกน Y คือจำนวนของ pixel (อ่านเพิ่มเติมได้ที่ <a title="Image histogram" href="http://en.wikipedia.org/wiki/Image_histogram">Image histogram</a> ครับ)</p>
<p>เมื่อเราทราบหลักการของการสร้าง Histogram จากรูปแล้ว เราก็มาดูที่โค้ดกันครับ เริ่มต้นเราก็ประกาศขนาดของ Histogram ครับ ให้มีขนาด 256 ช่อง (ค่าสีปกติจะมีค่าระหว่าง 0-255 ในที่นี้ผมจะให้ช่องหนึ่งคือค่าสีหนึ่งนะครับ ซึ่งค่านี้สามารถเปลี่ยนแปลงได้แล้วแต่งานครับ)</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">int</span> bins <span style="color: #000080;">=</span> <span style="color: #0000dd;">256</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> hsize<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span> bins <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></div></div>

<p>ในโค้ดของผมนี้ผมจะสร้าง Histogram ที่เป็น uniform นะครับ เราก็ต้องกำหนดขอบเขตของค่า x ซึ่งต้องกำหนดตาม format ดังนี้ครับ โดย ranges[] จะต้องมีจำนวน dimension เท่ากับจำนวนค่าที่เป็นคู่ที่เราประกาศไว้ (คู่ 0 กับ 255)</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">float</span> xranges<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span> <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">255</span> <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">float</span><span style="color: #000040;">*</span> ranges<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span> xranges <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></div></div>

<p>เนื่องจากรูปตัวอย่างเป็น RGB เราก็ต้องแปลงให้เป็น Grayscale ก่อนนะครับ โดย image ในที่นี้คือรูปที่เราโหลดมาตั้งแต่ต้นนะครับ</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">IplImage<span style="color: #000040;">*</span> gray <span style="color: #000080;">=</span> cvCreateImage<span style="color: #008000;">&#40;</span> cvGetSize<span style="color: #008000;">&#40;</span> image <span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">8</span>, <span style="color: #0000dd;">1</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
cvCvtColor<span style="color: #008000;">&#40;</span> image, gray, CV_BGR2GRAY <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>จากนั้นเราต้องสร้างเพลน (plane) เพื่อมาคำนวณกราฟกันครับ ในที่นี้มีแค่ 1</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">IplImage<span style="color: #000040;">*</span> planes<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span> gray <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></div></div>

<p>แล้วเราก็คำนวณค่าของ Histogram ดังนี้ โดยค่า 1 ตัวแรกหมายถึง จำนวน dimension ครับ ส่วน CV_HIST_ARRAY หมายถึงให้ type เป็นชนิด array และค่า 1 ตัวสุดท้ายหมายถึงว่าเป็น uniform ครับ</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">CvHistogram<span style="color: #000040;">*</span> hist <span style="color: #000080;">=</span> cvCreateHist<span style="color: #008000;">&#40;</span> <span style="color: #0000dd;">1</span>, hsize, CV_HIST_ARRAY, ranges, <span style="color: #0000dd;">1</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
cvCalHist<span style="color: #008000;">&#40;</span> planes, hist, <span style="color: #0000dd;">0</span>, <span style="color: #0000ff;">NULL</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>ในการคำนวณโดยใช้ cvCalHist นั้น เราเซตค่าที่ 3 ว่าให้เป็น 1 แปลว่า ถ้าสมมุติว่าเราวนลูปอ่านค่าสีจากรูปมาเรื่อยๆ เราสามารถบวกค่า pixel เพิ่มได้ในกราฟ Histogram อันเดิมครับ แต่ถ้าเป็น 0 ก็แปลว่าไม่ต้องบวกเพิ่ม ส่วนค่าสุดท้าย ถ้าไม่ใช่ NULL เราจะนำแค่จุด pixel ที่ไม่ใช่ 0 และมีการ mask ไว้ในรูปมาคำนวณครับ</p>
<p>ขั้นตอนต่อไป เราก็ต้องสร้างรูปขึ้นมาเพื่อแสดงผลครับ ในที่นี้เรากำหนดให้มีความสูงแค่ 50 พอครับ</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">IplImage<span style="color: #000040;">*</span> imgHistogram <span style="color: #000080;">=</span> cvCreateImage<span style="color: #008000;">&#40;</span> cvGetSize<span style="color: #008000;">&#40;</span> bins, <span style="color: #0000dd;">50</span> <span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">8</span>, <span style="color: #0000dd;">1</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
cvRectangle<span style="color: #008000;">&#40;</span> imgHistogram, cvPoint<span style="color: #008000;">&#40;</span> <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span> <span style="color: #008000;">&#41;</span>, cvPoint<span style="color: #008000;">&#40;</span> <span style="color: #0000dd;">256</span>, <span style="color: #0000dd;">50</span> <span style="color: #008000;">&#41;</span>, CV_RGB<span style="color: #008000;">&#40;</span> <span style="color: #0000dd;">255</span>, <span style="color: #0000dd;">255</span>, <span style="color: #0000dd;">255</span> <span style="color: #008000;">&#41;</span>, <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// ค่าสุดท้ายคือค่า thickness ครับ ถ้าเป็น -1 แสดงว่าให้เป็นค่าสูงสุดเลย (เพื่อที่ว่าเราจะระบายสีขาวให้เต็มสีเหลี่ยมเลยครับ)</span></pre></div></div>

<p>ขั้นตอนสุดท้ายเราก็วาดกราฟครับ และแสดงผล วิธีการก็คือดึงค่าออกมาทีละค่านั่นเอง แต่เนื่องจากเราเซตความสูงไว้ที่ 50 เราจะต้อง normalize ด้วยนะครับ แต่การที่เราจะ normalize ได้เราต้องมีค่าสูงสุดของ Histogram ก่อนครับ หาได้ดังนี้</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">float</span> max_value <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span>, min_value <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
cvGetMinMaxHistValue<span style="color: #008000;">&#40;</span> hist, <span style="color: #000040;">&amp;</span>amp<span style="color: #008080;">;</span>min_value, $max_value <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>และสุดท้ายจริงๆ ก็ดังนี้ครับ</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">cvNamedWindow<span style="color: #008000;">&#40;</span> <span style="color: #FF0000;">&quot;histogram&quot;</span>, <span style="color: #0000dd;">1</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> bins<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span> <span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">float</span> value <span style="color: #000080;">=</span> cvQueryHistValue_1D<span style="color: #008000;">&#40;</span> hist, i <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">int</span> normalized <span style="color: #000080;">=</span> cvRound<span style="color: #008000;">&#40;</span> value <span style="color: #000040;">*</span> <span style="color: #0000dd;">50</span> <span style="color: #000040;">/</span> max_value <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  cvLine<span style="color: #008000;">&#40;</span> imgHistogram, cvPoint<span style="color: #008000;">&#40;</span> i, <span style="color: #0000dd;">50</span> <span style="color: #008000;">&#41;</span>, cvPoint<span style="color: #008000;">&#40;</span> i, <span style="color: #0000dd;">50</span> <span style="color: #000040;">-</span> normalized <span style="color: #008000;">&#41;</span>, CV_RGB<span style="color: #008000;">&#40;</span> <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span> <span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
cvShowImage<span style="color: #008000;">&#40;</span> <span style="color: #FF0000;">&quot;histogram&quot;</span>, imgHistogram <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>หวังว่าจะเป็นจุดอ้างอิงสำหรับผู้ที่เริ่มต้นสนใจในด้าน Image Processing นะครับ</p>
<p>Source code: <a title="Source code for Histogram Computation" href="../wp-content/uploads/2010/03/hist.cc">hist.cc</a></p>
<p>credit: Isaias Gonzalez (siderevs at gmail dot com)</p>
]]></content:encoded>
			<wfw:commentRss>http://zkan.nokkok.com/2010/03/%e0%b9%83%e0%b8%8a%e0%b9%89-opencv-%e0%b8%aa%e0%b8%a3%e0%b9%89%e0%b8%b2%e0%b8%87-histogram-%e0%b8%88%e0%b8%b2%e0%b8%81%e0%b8%a3%e0%b8%b9%e0%b8%9b/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>เก็บโน้ต TomBoy ของคุณให้ sync กับเครื่องอื่น โดยใช้ Dropbox</title>
		<link>http://zkan.nokkok.com/2010/02/keeping-your-notes-sync-with-dropbox/</link>
		<comments>http://zkan.nokkok.com/2010/02/keeping-your-notes-sync-with-dropbox/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 16:35:47 +0000</pubDate>
		<dc:creator>zkan</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Dropbox]]></category>
		<category><![CDATA[Notes]]></category>
		<category><![CDATA[Synchronize]]></category>

		<guid isPermaLink="false">http://zkan.nokkok.com/?p=197</guid>
		<description><![CDATA[เรื่องของเรื่องก็คือ ผมอยากจะเปลี่ยนไปใช้ Ubuntu เต็มตัว และใช้ Windows เฉพาะเล่นเกม (DotA) และเรื่องที่สำคัญอย่างหนึ่งก็คือผมเก็บโน้ตของผมไว้ใน MS OneNote และ sync กันระหว่างเครื่องโดยใช้ LiveMesh ซึ่งถ้าผมเปลี่ยนไปใช้ Ubuntu ผมก็ต้องการ feature แบบนี้เช่นกัน
วันนี้ผมได้วิธีง่ายๆ มาและอยากแบ่งปันก็คือใช้ Tomboy Notes และ Dropbox นั่นเอง ถึงแม้ว่า Tomboy จะดีไม่เท่า OneNote ก็ตาม แต่ผมก็ยังคงไม่มีปัญหา เพราะเดิมที ไม่ได้ใช้ความสามารถของ OneNote มากสักเท่าไหร่
วิธีทำให้โน้ตของเรา sync กับ Dropbox ก็ให้ไปที่ Tomboy แล้ว Edit -&#62; Preferences -&#62; Synchronization และ ใช้ Service เป็น Local Folder จากนั้นก็เซต Folder [...]]]></description>
			<content:encoded><![CDATA[<p>เรื่องของเรื่องก็คือ ผมอยากจะเปลี่ยนไปใช้ Ubuntu เต็มตัว และใช้ Windows เฉพาะเล่นเกม (DotA) และเรื่องที่สำคัญอย่างหนึ่งก็คือผมเก็บโน้ตของผมไว้ใน MS OneNote และ sync กันระหว่างเครื่องโดยใช้ LiveMesh ซึ่งถ้าผมเปลี่ยนไปใช้ Ubuntu ผมก็ต้องการ feature แบบนี้เช่นกัน</p>
<p>วันนี้ผมได้วิธีง่ายๆ มาและอยากแบ่งปันก็คือใช้ <a title="Tomboy Notes" href="http://projects.gnome.org/tomboy/">Tomboy Notes</a> และ <a title="Dropbox" href="https://www.dropbox.com/referrals/NTI5NjE3ODM5">Dropbox</a> นั่นเอง ถึงแม้ว่า Tomboy จะดีไม่เท่า OneNote ก็ตาม แต่ผมก็ยังคงไม่มีปัญหา เพราะเดิมที ไม่ได้ใช้ความสามารถของ OneNote มากสักเท่าไหร่</p>
<p>วิธีทำให้โน้ตของเรา sync กับ Dropbox ก็ให้ไปที่ Tomboy แล้ว Edit -&gt; Preferences -&gt; Synchronization และ ใช้ Service เป็น Local Folder จากนั้นก็เซต Folder Path ให้อยู่ภายใต้โฟลเดอร์ของ Dropbox และตามด้วยชื่อโฟลเดอร์ที่เราต้องการ เช่น <code>~/Dropbox/Tomboy</code> หลังจากนั้น เราก็เขียนโน้ตตามปรกติ ถ้าเราต้องการให้ sync กัน ให้เลือกที่ Tools -&gt; Synchronize Notes</p>
<p>เป็นอันเสร็จสิ้น <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>credit: <a href="http://www.starryhope.com/linux/2009/synchronize-tomboy-notes-with-dropbox/">http://www.starryhope.com/linux/2009/synchronize-tomboy-notes-with-dropbox/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zkan.nokkok.com/2010/02/keeping-your-notes-sync-with-dropbox/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>แนะนำการใช้ Perl เพื่อหาผลการทดลอง</title>
		<link>http://zkan.nokkok.com/2010/02/%e0%b9%81%e0%b8%99%e0%b8%b0%e0%b8%99%e0%b8%b3-perl-%e0%b9%80%e0%b8%9e%e0%b8%b7%e0%b9%88%e0%b8%ad-%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%97%e0%b8%94%e0%b8%a5%e0%b8%ad%e0%b8%87/</link>
		<comments>http://zkan.nokkok.com/2010/02/%e0%b9%81%e0%b8%99%e0%b8%b0%e0%b8%99%e0%b8%b3-perl-%e0%b9%80%e0%b8%9e%e0%b8%b7%e0%b9%88%e0%b8%ad-%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%97%e0%b8%94%e0%b8%a5%e0%b8%ad%e0%b8%87/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 10:27:35 +0000</pubDate>
		<dc:creator>zkan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Experiment]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Script]]></category>

		<guid isPermaLink="false">http://zkan.nokkok.com/?p=178</guid>
		<description><![CDATA[เวลาที่เราเขียนโปรแกรมแยกกัน เราจะทำผลการทดลองแบบ manual หรือแบบที่เรารันโปรแกรมทีละขั้นตอน เพื่อเอาผลจากขั้นตอนหนึ่งไปยังอีกขั้นตอนหนึ่ง ซึ่ง ปัญหาที่ผมได้พบจากประสบการณ์โดยตรง คือ &#8220;ใช้เวลามากเกินไป&#8221; และ &#8220;ผิดพลาดได้ง่าย&#8221; ซึ่งหลายคนอาจจะคิดเหมือนผมที่ว่า เราเขียนโปรแกรมเสร็จแล้ว เราก็แค่ใส่ค่า ใส่ข้อมูล แล้วเราก็ได้ผลออกมา ไว้ทำทีหลังละกัน..
ซึ่งเป็นความคิดที่ไม่ค่อยจะถูกนักครับ ตอนที่เราทดลองเราจะพบปัญหาอีกมากมาย เช่น ผลที่ได้ไม่ดีนัก เราต้องทำใหม่อีกรอบ และเราก็อาจจะ ไม่มีทางรู้ได้ว่าโปรแกรมทำงานผิด หรือว่าเราใส่ข้อมูลผิดหรืออะไรก็แล้วแต่ ยิ่งถ้าใกล้เวลาส่งงานเมื่อไหร่แล้ว เราจะยิ่งลน และทำให้เกิดความผิดพลาดได้ง่ายมากๆ
บล็อกนี้ผมขอแนะนำการใช้ Perl ครับ ในกรณีของผม ผมใช้ Perl script ไฟล์เดียว ใส่ค่าพารามิเตอร์ครั้งแรก เราก็แค่รอให้ผลออกมา ถ้าไม่ดี เราก็รันคำสั่งเดียว เปลี่ยนค่าพารามิเตอร์ และก็รอผล ก็ดูง่ายๆ ใช่เปล่าครับ แต่สำหรับคนที่ไม่เคยทำ และจะลองมาทำดูก็จะค่อนข้างเสียเวลาในการศึกษา เสียเวลาไป google หาโค้ด หาตัวอย่าง ผมเลยเอาโค้ดที่ผมคิดว่าใช้บ่อยๆ มารวมไว้ครับ
ก่อนที่จะใช้ Perl script ผมแนะนำให้

เขียนโปรแกรมให้รับค่าพารามิเตอร์จาก command line [...]]]></description>
			<content:encoded><![CDATA[<p>เวลาที่เราเขียนโปรแกรมแยกกัน เราจะทำผลการทดลองแบบ manual หรือแบบที่เรารันโปรแกรมทีละขั้นตอน เพื่อเอาผลจากขั้นตอนหนึ่งไปยังอีกขั้นตอนหนึ่ง ซึ่ง ปัญหาที่ผมได้พบจากประสบการณ์โดยตรง คือ &#8220;ใช้เวลามากเกินไป&#8221; และ &#8220;ผิดพลาดได้ง่าย&#8221; ซึ่งหลายคนอาจจะคิดเหมือนผมที่ว่า เราเขียนโปรแกรมเสร็จแล้ว เราก็แค่ใส่ค่า ใส่ข้อมูล แล้วเราก็ได้ผลออกมา ไว้ทำทีหลังละกัน..</p>
<p>ซึ่งเป็นความคิดที่ไม่ค่อยจะถูกนักครับ ตอนที่เราทดลองเราจะพบปัญหาอีกมากมาย เช่น ผลที่ได้ไม่ดีนัก เราต้องทำใหม่อีกรอบ และเราก็อาจจะ ไม่มีทางรู้ได้ว่าโปรแกรมทำงานผิด หรือว่าเราใส่ข้อมูลผิดหรืออะไรก็แล้วแต่ ยิ่งถ้าใกล้เวลาส่งงานเมื่อไหร่แล้ว เราจะยิ่งลน และทำให้เกิดความผิดพลาดได้ง่ายมากๆ</p>
<p>บล็อกนี้ผมขอแนะนำการใช้ Perl ครับ ในกรณีของผม ผมใช้ Perl script ไฟล์เดียว ใส่ค่าพารามิเตอร์ครั้งแรก เราก็แค่รอให้ผลออกมา ถ้าไม่ดี เราก็รันคำสั่งเดียว เปลี่ยนค่าพารามิเตอร์ และก็รอผล ก็ดูง่ายๆ ใช่เปล่าครับ แต่สำหรับคนที่ไม่เคยทำ และจะลองมาทำดูก็จะค่อนข้างเสียเวลาในการศึกษา เสียเวลาไป google หาโค้ด หาตัวอย่าง ผมเลยเอาโค้ดที่ผมคิดว่าใช้บ่อยๆ มารวมไว้ครับ</p>
<p>ก่อนที่จะใช้ Perl script ผมแนะนำให้</p>
<ol>
<li>เขียนโปรแกรมให้รับค่าพารามิเตอร์จาก command line ให้ได้ก่อน ถ้าเป็นภาษา C/C++ ก็ใช้พวก argc, argv และ getopt (ลองดูโค้ดตัวอย่างได้ที่  <a title="ตัวอย่างโค้ดการใช้ getopt" href="http://www.gnu.org/s/libc/manual/html_node/Example-of-Getopt.html#Example-of-Getopt)">ตัวอย่าง getopt</a> ครับ</li>
<li>ตอนที่แสดงผลจากโปรแกรมนั้น ให้เราแสดงออกมาทาง stdout หรือจะเขียนลงไฟล์ก็ได้ครับ</li>
<li>output ที่ออกมา เราควรจะออกแบบสักหน่อย เพื่อให้โปรแกรมต่อไปสามารถรับจาก command line ได้</li>
</ol>
<p>ต่อไปนี้ก็จะเป็นโค้ดตัวอย่างที่ผมใช้บ่อยๆ ครับ</p>
<p>การรับพารามิเตอร์จาก command line ใช้ดังนี้</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$myVariable</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ARGV</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>เริ่มจากเลข 0 ครับ ถ้ามี 3 ค่า จะเป็นดังนี้</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$myVariable1</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ARGV</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$myVariable2</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ARGV</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$myVariable3</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ARGV</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>ส่วนคำสั่ง Perl สำหรับรันโปรแกรมที่เราเขียนขึ้นเองต่างหากก็ตามนี้</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">system</span><span style="color: #009900;">&#40;</span> <span style="color: #ff0000;">&quot;myProgram $param01 $param02&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>เปิดโฟลเดอร์เพื่อแสดงชื่อไฟล์ทั้งหมด (รวมทั้งชื่อโฟลเดอร์ด้วย ฉะนั้นแนะนำว่าให้ชื่อไฟล์มี extension ไว้ แล้วแก้คำสั่ง grep เพื่อกรองเอาแต่ไฟล์ครับ)</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">opendir</span><span style="color: #009900;">&#40;</span> DIR<span style="color: #339933;">,</span> <span style="color: #0000ff;">$folder_name</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;couldn't open $folder_name<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;"># ไม่เอา . ไม่เอา .. และไม่เอา .svn (เผื่อว่าเราใช้ svn)</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@files</span> <span style="color: #339933;">=</span> <span style="color: #000066;">grep</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$_</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">'.'</span> <span style="color: #0000ff;">&amp;amp</span><span style="color: #339933;">;</span><span style="color: #0000ff;">&amp;amp</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$_</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">'..'</span> <span style="color: #0000ff;">&amp;amp</span><span style="color: #339933;">;</span><span style="color: #0000ff;">&amp;amp</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$_</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">'.svn'</span> <span style="color: #009900;">&#125;</span> <span style="color: #000066;">readdir</span> DIR<span style="color: #339933;">;</span>
<span style="color: #b1b100;">for</span> <span style="color: #0000ff;">$file</span> <span style="color: #009900;">&#40;</span> <span style="color: #000066;">sort</span> <span style="color: #0000ff;">@files</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066;">print</span> <span style="color: #0000ff;">$file</span> <span style="color: #339933;">.</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>ถ้าต้องการที่จะเรียงไฟล์ตามตัวอักษรไม่ใช่ตามแบบ string ก็ใช้ตามนี้ครับ</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #b1b100;">for</span> <span style="color: #0000ff;">$file</span> <span style="color: #009900;">&#40;</span> <span style="color: #000066;">sort</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$a</span> <span style="color: #0000ff;">&amp;lt</span><span style="color: #339933;">;=</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$b</span> <span style="color: #009900;">&#125;</span> <span style="color: #0000ff;">@files</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #339933;">...</span> <span style="color: #009900;">&#125;</span></pre></div></div>

<p>ส่วนฟังก์ชั่นตัด extension ของไฟล์</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">sub</span> without_ext <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$file</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
  <span style="color: #000066;">return</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000066;">rindex</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'.'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>วิธีใช้ก็แค่โยนชื่อไฟล์เข้าไปแบบนี้ without_ext ( $file )</p>
<p>และฟังก์ชั่นตัดเอามาแต่ extension ของไฟล์</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">sub</span> ext_only <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$file</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
  <span style="color: #000066;">return</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span> <span style="color: #000066;">rindex</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'.'</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>วิธีใช้ก็แค่โยนชื่อไฟล์เข้าไปแบบนี้ ext_only( $file ) เช่นกัน</p>
<p>การเปิดไฟล์สำหรับอ่านและการอ่านไฟล์</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span> FILE<span style="color: #339933;">,</span> <span style="color: #0000ff;">$filename</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span> <span style="color: #ff0000;">&quot;Cannot open file&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">@data</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&amp;lt</span><span style="color: #339933;">;</span>FILE<span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #0000ff;">$text_line</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">@data</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066;">print</span> <span style="color: #0000ff;">$text_line</span> <span style="color: #339933;">.</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>การเปิดไฟล์สำหรับเขียนลงไฟล์ก็แค่เพิ่ม &#8220;&gt;&#8221; ลงไปก่อนหน้าชื่อไฟล์ครับ ดังนี้</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span> FILE<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&gt;$filename&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span> <span style="color: #ff0000;">&quot;Cannot open file&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> FILE <span style="color: #ff0000;">&quot;test<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>การอ่านข้อมูลจาก stdout</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># ต้องใส่ | ข้างหลังด้วย แปลว่าให้อ่านจาก pipe</span>
<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span> OUTPUT<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;myProgram $param01 $param02 |&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&amp;lt</span><span style="color: #339933;">;</span>OUTPUT<span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;"># แบบนี้จะตัด input โดยใช้การขึ้นบรรทัดใหม่เป็นตัวกำหนด ถ้าต้องการตัดโดยใช้ tab ก็เปลี่ยนจาก &quot;\n&quot; เป็น &quot;\t&quot;</span>
  <span style="color: #0000ff;">@output</span> <span style="color: #339933;">=</span> <span style="color: #000066;">split</span><span style="color: #009900;">&#40;</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$_</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">foreach</span> <span style="color: #0000ff;">$val</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">@output</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #0000ff;">$val</span> <span style="color: #339933;">.</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>สามารถหาข้อมูลเพิ่มเติมเกี่ยวกับ open() ได้ <a title="ข้อมูลเพิ่มเติมเกี่ยวกับ open()" href="http://www.sdsc.edu/~moreland/courses/IntroPerl/docs/manual/pod/perlfunc/open.html">ที่นี่</a> ครับ<a title="more information about open()" href="http://www.sdsc.edu/~moreland/courses/IntroPerl/docs/manual/pod/perlfunc/open.html"></a></p>
<p>หวังว่าจะมีประโยชน์สำหรับหลายๆ ท่านนะครับ <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://zkan.nokkok.com/2010/02/%e0%b9%81%e0%b8%99%e0%b8%b0%e0%b8%99%e0%b8%b3-perl-%e0%b9%80%e0%b8%9e%e0%b8%b7%e0%b9%88%e0%b8%ad-%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%97%e0%b8%94%e0%b8%a5%e0%b8%ad%e0%b8%87/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ก่อนงาน BugDay Bangkok 2009</title>
		<link>http://zkan.nokkok.com/2009/12/%e0%b8%81%e0%b9%88%e0%b8%ad%e0%b8%99%e0%b8%87%e0%b8%b2%e0%b8%99-bugday-bangkok-2009/</link>
		<comments>http://zkan.nokkok.com/2009/12/%e0%b8%81%e0%b9%88%e0%b8%ad%e0%b8%99%e0%b8%87%e0%b8%b2%e0%b8%99-bugday-bangkok-2009/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 04:53:21 +0000</pubDate>
		<dc:creator>zkan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BugDay]]></category>
		<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://zkan.nokkok.com/?p=150</guid>
		<description><![CDATA[กำลังจะไปงานนี้ครับ ถ้าไม่ติดอะไร

ลองดูกำหนดการของงานครับ น่าสนใจมาก ใครที่สนใจงานทางด้าน Software Engineering โดยเฉพาะ Testing ก็น่าจะมางานนี้นะครับ
]]></description>
			<content:encoded><![CDATA[<p>กำลังจะไปงานนี้ครับ ถ้าไม่ติดอะไร</p>
<p><a href="http://www.welovebug.com/tag/bugday"><img class="aligncenter" title="BugDay Bangkok Logo" src="http://www.welovebug.com/wp-content/uploads/2009/11/BugDay-Bangkok-2009-Logo-576.jpg" alt="" width="550" height="249" /></a></p>
<p>ลองดู<a title="BugDay Bangkok 2009 Schedule" href="http://www.welovebug.com/event/bugday-bangkok-2009-schedule/">กำหนดการ</a>ของงานครับ น่าสนใจมาก ใครที่สนใจงานทางด้าน Software Engineering โดยเฉพาะ Testing ก็น่าจะมางานนี้นะครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://zkan.nokkok.com/2009/12/%e0%b8%81%e0%b9%88%e0%b8%ad%e0%b8%99%e0%b8%87%e0%b8%b2%e0%b8%99-bugday-bangkok-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>การจัดการปัญหา Memory Leak ใน OpenCV (C/C++)</title>
		<link>http://zkan.nokkok.com/2009/12/%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%88%e0%b8%b1%e0%b8%94%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%9b%e0%b8%b1%e0%b8%8d%e0%b8%ab%e0%b8%b2-memory-leak-%e0%b9%83%e0%b8%99-opencv/</link>
		<comments>http://zkan.nokkok.com/2009/12/%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%88%e0%b8%b1%e0%b8%94%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%9b%e0%b8%b1%e0%b8%8d%e0%b8%ab%e0%b8%b2-memory-leak-%e0%b9%83%e0%b8%99-opencv/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 10:42:31 +0000</pubDate>
		<dc:creator>zkan</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Memory Leak]]></category>
		<category><![CDATA[OpenCV]]></category>
		<category><![CDATA[Solution]]></category>

		<guid isPermaLink="false">http://zkan.nokkok.com/?p=138</guid>
		<description><![CDATA[ความรู้ใหม่ได้มาจากเว็บของ Andol ผมนำบางส่วนมาแปลเป็นไทยมาลงไว้กันลืม และเผื่อจะเป็นประโยชน์ต่อหลายๆ คนครับ โดยงานผมจะเกี่ยวข้องการกับวิเคราะห์รูปภาพดังนั้นส่วนที่เอามาคือ เฉพาะส่วน Memory leak ของการประกาศตัวแปร IplImage
ถ้าโค้ดของเรามีดังนี้

1
2
3
4
IplImage* img = cvCreateImage&#40; ... &#41;;  // ประกาศตัวแปร img และได้จองหน่วยความจำไว้
img = xfunction&#40; ... &#41;;  // ส่งค่า IplImage* กลับ
…
cvReleaseImage&#40; &#38;img &#41;;  // ลบหน่วยความจำตัวใหม่ที่เกิดจาก xfunction

แบบนี้แสดงว่าเกิด Memory leak ที่ xfunction ครับ คือตอนแรกเราจองหน่วยความจำให้กับตัวแปร img และต่อมาได้เรียกฟังก์ชั่น xfunction ซึ่งฟังก์ชั่นนี้ จะจองหน่วยความจำไว้อีกที่หนึ่งสำหรับค่าที่จะส่งกลับ ทำให้ตัวแปร img ไปชี้ที่หน่วยความจำใหม่ และหน่วยความจำเก่าที่ได้จองไว้ตอนแรกยังคงอยู่ (ถ้าใช้ภาษา Java คิดว่าไม่น่าจะมีปัญหาตรงนี้ครับ)
วิธีแก้ก็ง่ายมากครับ แค่แทนที่จะใช้ [...]]]></description>
			<content:encoded><![CDATA[<p>ความรู้ใหม่ได้มาจากเว็บของ <a title="Andol-Just value your mind" href="http://www.andol.info/">Andol</a> ผมนำบางส่วนมาแปลเป็นไทยมาลงไว้กันลืม และเผื่อจะเป็นประโยชน์ต่อหลายๆ คนครับ โดยงานผมจะเกี่ยวข้องการกับวิเคราะห์รูปภาพดังนั้นส่วนที่เอามาคือ เฉพาะส่วน Memory leak ของการประกาศตัวแปร IplImage</p>
<p>ถ้าโค้ดของเรามีดังนี้</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">IplImage<span style="color: #000040;">*</span> img <span style="color: #000080;">=</span> cvCreateImage<span style="color: #008000;">&#40;</span> ... <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  <span style="color: #666666;">// ประกาศตัวแปร img และได้จองหน่วยความจำไว้</span>
img <span style="color: #000080;">=</span> xfunction<span style="color: #008000;">&#40;</span> ... <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  <span style="color: #666666;">// ส่งค่า IplImage* กลับ</span>
…
cvReleaseImage<span style="color: #008000;">&#40;</span> <span style="color: #000040;">&amp;</span>img <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  <span style="color: #666666;">// ลบหน่วยความจำตัวใหม่ที่เกิดจาก xfunction</span></pre></td></tr></table></div>

<p>แบบนี้แสดงว่าเกิด Memory leak ที่ xfunction ครับ คือตอนแรกเราจองหน่วยความจำให้กับตัวแปร img และต่อมาได้เรียกฟังก์ชั่น xfunction ซึ่งฟังก์ชั่นนี้ จะจองหน่วยความจำไว้อีกที่หนึ่งสำหรับค่าที่จะส่งกลับ ทำให้ตัวแปร img ไปชี้ที่หน่วยความจำใหม่ และหน่วยความจำเก่าที่ได้จองไว้ตอนแรกยังคงอยู่ (ถ้าใช้ภาษา Java คิดว่าไม่น่าจะมีปัญหาตรงนี้ครับ)</p>
<p>วิธีแก้ก็ง่ายมากครับ แค่แทนที่จะใช้ cvCreateImage() เราก็เปลี่ยนให้ชี้ไปที่ NULL แทน ดังนี้ครับ</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">IplImage<span style="color: #000040;">*</span> img <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
img <span style="color: #000080;">=</span> xfunction<span style="color: #008000;">&#40;</span> ... <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
…
cvReleaseImage<span style="color: #008000;">&#40;</span> <span style="color: #000040;">&amp;</span>img <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>สรุปคือ ถ้าใช้ภาษา C/C++ ต้องระวังเป็นอย่างมากครับ ไม่งั้นโปรแกรมอาจจะใช้แรมไปจนหมดเครื่องแน่ๆ ต้องหมั่นตรวจสอบว่าเราจองหน่วยความจำไว้ที่ไหน และพยายามลบทิ้งถ้าไม่ได้ใช้แล้วนะครับ ถ้ายิ่งทำงานเกี่ยวกับการวิเคราห์ไฟล์วีดีโอด้วยแล้วยิ่งต้องระวัง</p>
<p>อ่านรายละเอียดทั้งหมดได้ที่: <a title="OpenCV memory leaking management in C/C++" href="http://www.andol.info/hci/963.htm">OpenCV memory leaking management in C/C++</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zkan.nokkok.com/2009/12/%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%88%e0%b8%b1%e0%b8%94%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%9b%e0%b8%b1%e0%b8%8d%e0%b8%ab%e0%b8%b2-memory-leak-%e0%b9%83%e0%b8%99-opencv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>การวัดประสิทธิภาพของโมเดล (Two-class prediction)</title>
		<link>http://zkan.nokkok.com/2009/11/%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%b4%e0%b8%97%e0%b8%98%e0%b8%b4%e0%b8%a0%e0%b8%b2%e0%b8%9e%e0%b8%82%e0%b8%ad%e0%b8%87%e0%b9%82%e0%b8%a1%e0%b9%80%e0%b8%94%e0%b8%a5/</link>
		<comments>http://zkan.nokkok.com/2009/11/%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%b4%e0%b8%97%e0%b8%98%e0%b8%b4%e0%b8%a0%e0%b8%b2%e0%b8%9e%e0%b8%82%e0%b8%ad%e0%b8%87%e0%b9%82%e0%b8%a1%e0%b9%80%e0%b8%94%e0%b8%a5/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 16:42:51 +0000</pubDate>
		<dc:creator>zkan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[classification]]></category>
		<category><![CDATA[Effectiveness]]></category>
		<category><![CDATA[evaluation]]></category>
		<category><![CDATA[negative]]></category>
		<category><![CDATA[positive]]></category>
		<category><![CDATA[prediction]]></category>

		<guid isPermaLink="false">http://zkan.nokkok.com/?p=127</guid>
		<description><![CDATA[การที่เราสร้างโมเดลๆ หนึ่งขึ้นมาทำนายผลนั้น เราจะต้องมีการวัดประสิทธิภาพของโมเดลนั้นด้วย เรื่องการวัดผลนี้ค่อนข้างสำคัญมาก ในงานวิจัยที่เราจะต้องนำเสนอสิ่งที่เราคิดค้นออกมาว่าดีแค่ไหน ในบล็อกนี้จะขอพูดถึงการวัดผลโดยใช้ปัญหาที่เรียกว่า two-class prediction (binary classification) ซึ่งเป็นการวัดประสิทธิภาพที่งานวิจัยส่วนใหญ่นิยมใช้กัน
ในปัญหานี้เราจะบอกว่าผลลัพธ์ที่ได้ว่าเป็นคลาส Positive หรือ Negative ซึ่งผลลัพธ์ที่ได้สามารถมีได้ 4 แบบ คือ

True Positive (TP) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ p และค่าจริงๆ ก็คือ p ด้วย
False Positive (FP) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ p แต่ว่าค่าจริงๆ แล้วคือ n
True Negative (TN) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ n และค่าจริงๆ ก็คือ n ด้วย
False Negative (FN) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ n แต่ว่าค่าจริงๆ แล้วคือ p

จะเห็นได้ว่า TN จะกลับกันกับ TP [...]]]></description>
			<content:encoded><![CDATA[<p>การที่เราสร้างโมเดลๆ หนึ่งขึ้นมาทำนายผลนั้น เราจะต้องมีการวัดประสิทธิภาพของโมเดลนั้นด้วย เรื่องการวัดผลนี้ค่อนข้างสำคัญมาก ในงานวิจัยที่เราจะต้องนำเสนอสิ่งที่เราคิดค้นออกมาว่าดีแค่ไหน ในบล็อกนี้จะขอพูดถึงการวัดผลโดยใช้ปัญหาที่เรียกว่า two-class prediction (binary classification) ซึ่งเป็นการวัดประสิทธิภาพที่งานวิจัยส่วนใหญ่นิยมใช้กัน</p>
<p>ในปัญหานี้เราจะบอกว่าผลลัพธ์ที่ได้ว่าเป็นคลาส Positive หรือ Negative ซึ่งผลลัพธ์ที่ได้สามารถมีได้ 4 แบบ คือ</p>
<ol>
<li>True Positive (TP) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ p และค่าจริงๆ ก็คือ p ด้วย</li>
<li>False Positive (FP) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ p แต่ว่าค่าจริงๆ แล้วคือ n</li>
<li>True Negative (TN) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ n และค่าจริงๆ ก็คือ n ด้วย</li>
<li>False Negative (FN) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ n แต่ว่าค่าจริงๆ แล้วคือ p</li>
</ol>
<p>จะเห็นได้ว่า TN จะกลับกันกับ TP และ FN จะกลับกันกับ FP ตามลำดับ</p>
<p>หลายๆ คนจะค่อนข้างสับสนเวลาที่คำนวณค่าจริงๆ ก็จะอธิบายจากความเข้าใจของผมนะครับ และคิดว่าน่าจะเข้าใจง่ายที่สุดแล้ว (เครดิต: <a title="@b39ppr" href="http://twitter.com/b39ppr">@b39ppr</a>) ยกตัวอย่าง เช่น เวลาที่เราต้องการจะทำนายว่า พฤติกรรมของคนๆ นี้ผิดปกติหรือไม่? หรืออีกนัยหนึ่งคือ เราต้องการที่จะตรวจจับพฤติกรรมที่ผิดปกติของคนๆ หนึ่ง</p>
<p>ในที่นี้จะได้ว่า พฤติกรรมที่ผิดปกติคือคลาส Positive ส่วนพฤติกรรมปกติคือคลาส Negative จะได้ว่า</p>
<ul>
<li>TP คือ ระบบเราตรวจจับได้ว่าคนๆ นี้ผิดปกติ และ คนๆ นี้ได้มีพฤติกรรมผิดปกติจริงๆ</li>
<li>FP คือ ระบบเราตรวจจับได้ว่าคนๆ นี้ผิดปกติ แต่ว่า จริงๆ แล้ว เค้าไม่ได้ทำอะไรผิดเลย</li>
<li>TN คือ ระบบเราไม่ได้ตรวจจับอะไรเลย และ คนๆ นี้ก็ไม่ได้ทำผิด</li>
<li>FN คือ ระบบเราไม่ได้ตรวจจับอะไรเลย แต่ว่า คนๆ นี้ จริงๆ แล้วเค้ามีพฤติกรรมที่ผิดปกติ!</li>
</ul>
<p>พอนึกออกรึเปล่าครับ? ผมจะขอยกตัวอย่างอีกสักตัวอย่าง เช่น เราเขียนโมเดลระบบตรวจจับสแปมเมล ถ้าเจอสแปมเมลให้ลบทิ้งเลย (ระบบออกแนวโหดหน่อย)</p>
<p>ในที่นี้จะได้ว่า เมลที่เป็นสแปมคือคลาส Positive ส่วนเมลปกติคือคลาส Negative</p>
<ul>
<li> TP คือ ระบบทำนายว่าเมลนี้เป็นสแปม และ มันก็เป็นสแปมจริงๆ</li>
<li>FP คือ ระบบทำนายว่าเมลนี้เป็นสแปม แต่ว่า จริงๆ แล้วเมลนี้เป็นเมลปกติ เช่น ข่าวสารทั่วไป เมลเกี่ยวกับงานต่างๆ</li>
<li>TN คือ ระบบทำนายว่าเมลนี้เป็นเมลปกติ และ เมลนี้ก็ปกติจริงๆ</li>
<li>FN คือ ระบบทำนายว่าเมลนี้เป็นเมลปกติ แต่ว่า จริงๆ แล้วมันเป็นสแปม!</li>
</ul>
<p>ค่าที่ได้จาก 2 ตัวอย่างข้างต้นนี้ สามารถช่วยให้เราวิเคราะห์และนำไปพัฒนาโมเดลให้ดียิ่งขึ้นได้อีก จากตัวอย่างแรกจะเห็นได้ว่าค่า FN นั้นสำคัญมาก ถ้าค่า FN เราสูงไปแสดงว่า เราตรวจจับคนร้ายไม่ได้เลย และจากตัวอย่างที่สองจะเห็นได้ว่าค่า FP นั้นสำคัญ เนื่องจากเป็นระบบแนวโหดที่เวลาเจอสแปมแล้วจะลบทิ้งเลย ดังนั้นถ้าค่า FP สูง ระบบเราก็อาจจะลบเมลสำคัญๆ ของเราทิ้งไปนั่นเอง</p>
<p>มีสรุปเพิ่มเติมจากคุณ <a title="Phattanapon's Home Page" href="http://www.cs.ait.ac.th/~pat/">pat</a> หรือคุณ <a title="@b39ppr" href="http://twitter.com/b39ppr">@b39ppr</a> นั่นเอง ดังนี้ครับ (มีคำถามให้คิดเล่นตอนท้าย)</p>
<p>การอ่าน (T,F)(P,N) แบบไม่งง</p>
<ul>
<li>ดูตัวหลังก่อน ว่า P หรือ N<br />
ถ้า P คือ model ของเรา predict ว่ามันเป็น positive (เป็นคนร้าย, เป็น spam)</li>
<li>ต่อไปดูตัวหน้า ว่า T หรือ F<br />
ถ้า T คือ ที่ model ของเรา predict ไปนั้น ถูกต้องแล้ว ถ้า F คือ predict ผิด</li>
</ul>
<p><strong>ตัวอย่าง:</strong> ระบบตรวจหา spam mail</p>
<ol>
<li>ตรวจหาอะไรก็ให้สิ่งนั้นเป็น positive<br />
จะตรวจหา spam เมื่อคิดว่าเจอ spam ก็คือเจอกรณี positive</li>
<li>จะคำนวณ FP ทำอย่างไร?<br />
ตอบ สำหรับ FP นั้น<br />
2.1 ตัวหลังเป็น P ให้นับจำนวน mail ที่เรา predict ว่าเป็น “positive” (เป็น spam)<br />
2.2 ตัวหน้าเป็น F ให้ดูว่าที่ predict ว่าเป็น spam ไปนั้น มีอันไหน “ผิด” บ้าง</li>
</ol>
<p><strong>เอ้า ลองคิดกันหน่อย:</strong><br />
มี email ใหม่ ส่งมาหาเราทั้งหมด 10 ฉบับ เข้ามาใน inbox 8 ส่วนอีก 2 เข้าไปอยู่ในกล่อง junk mail 8 mail ใน inbox นั้นมาจากคนรู้จักซะ 5 ที่เหลือเป็นเมล์ขายของ ไม่อยากได้ ส่วนในกล่อง junk mail ดันมีเมล์สำคัญจากเพื่อนอยู่ 1 ฉบับ ลองบอกค่า TP, FP, TN, FN ของระบบกรอง spam ตัวนี้มาหน่อย</p>
<p>หวังว่าจะมีประโยชน์นะครับ <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ข้อมูลเพิ่มเติม: <a title="Receiver Operating Characteristic (ROC)" href="http://en.wikipedia.org/wiki/Receiver_operating_characteristic">Receiver Operating Characteristic (ROC)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zkan.nokkok.com/2009/11/%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%b4%e0%b8%97%e0%b8%98%e0%b8%b4%e0%b8%a0%e0%b8%b2%e0%b8%9e%e0%b8%82%e0%b8%ad%e0%b8%87%e0%b9%82%e0%b8%a1%e0%b9%80%e0%b8%94%e0%b8%a5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>สูตรเงินออมอย่างง่าย</title>
		<link>http://zkan.nokkok.com/2009/11/simple-formula-for-savings/</link>
		<comments>http://zkan.nokkok.com/2009/11/simple-formula-for-savings/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 13:13:45 +0000</pubDate>
		<dc:creator>zkan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Formula]]></category>
		<category><![CDATA[Savings]]></category>

		<guid isPermaLink="false">http://zkan.nokkok.com/?p=113</guid>
		<description><![CDATA[บล็อกนี้ขอเสนอสูตรเงินออมอย่างง่าย แต่ใช้ได้ผลจริงครับ หลายๆ คนคงจะยังจำกันได้ว่า เมื่อก่อนตอนเด็กๆ พ่อแม่สอนว่า ให้รู้จักประหยัดอดออม เงินเหลือเท่าไหร่ก็ให้หยอดใส่กระปุกเก็บไว้
รายรับ &#8211; รายจ่าย = เงินออม
สูตรนี้ก็ตรงไปตรงมาใช่ไหมครับ? แต่ว่าสูตรนี้น่าจะเหมาะสำหรับคนที่มีความพอเพียงอย่างมาก มีรายจ่ายน้อยจริงๆ แต่จะไม่ค่อยเหมาะสำหรับคนส่วนใหญ่ (รวมไปถึงผมด้วย) สักเท่าไหร่ ซึ่งเราจะคิดกันว่าเราสามารถจ่ายเท่าไหร่ก็ได้ แค่ไม่ให้รายจ่ายมากกว่ารายรับแค่นั้น ทำให้ทุกๆ ช่วงสิ้นเดือนเราจะไม่ค่อยมีเงินเหลือกันสักเท่าไหร่ เป็นกันไหมครับ? ดังที่ @lecuppiecake เคยกล่าวไว้ว่า &#8220;สิ้นเดือนเมื่อไหร่ แม้แต่แกลบยังแพง&#8221; ตัวผมเองไม่เหมาะกับสูตรนี้อย่างแรง  
แล้วสูตรไหนเหมาะ? ก็แค่ย้ายข้างสมการ จะได้อีกสูตรดังนี้
รายรับ &#8211; เงินออม = รายจ่าย
ดูแล้วผลลัพธ์เท่ากันใช่ไหมครับ? ถ้าตอบในเชิงคณิตศาสตร์ก็ใช่ครับ แต่ว่าในชีวิตจริงคำตอบคงต่างออกไป สมการข้างต้นนี้จะมีความหมายว่า พอเราได้รายรับ (เงินเดือน หรืออะไรก็ตาม) มาเมื่อไหร่ ให้หักเก็บไว้เป็นเงินออมทันที ประมาณ 10-20% ของรายรับ (แล้วแต่คนนะครับ เลขนี้ไม่ตายตัว) การทำเช่นนี้ให้ผลดีตามมาก็คือ

เราสามารถคิดได้ว่า มีเท่าไหร่ก็ใช้เท่านั้น (คิดเหมือนตอนที่เราใช้สูตรแรก) โดยไม่ต้องกังวลว่าเรามีเงินออมหรือเปล่า (นั่นก็เพราะ เราได้หักส่วนของเงินออมออกไปแล้ว)
เงินออมของเราจะเพิ่มขึ้นอย่างสม่ำเสมอ [...]]]></description>
			<content:encoded><![CDATA[<p>บล็อกนี้ขอเสนอสูตรเงินออมอย่างง่าย แต่ใช้ได้ผลจริงครับ หลายๆ คนคงจะยังจำกันได้ว่า เมื่อก่อนตอนเด็กๆ พ่อแม่สอนว่า ให้รู้จักประหยัดอดออม เงินเหลือเท่าไหร่ก็ให้หยอดใส่กระปุกเก็บไว้</p>
<blockquote><p>รายรับ &#8211; รายจ่าย = เงินออม</p></blockquote>
<p>สูตรนี้ก็ตรงไปตรงมาใช่ไหมครับ? แต่ว่าสูตรนี้น่าจะเหมาะสำหรับคนที่มีความพอเพียงอย่างมาก มีรายจ่ายน้อยจริงๆ แต่จะไม่ค่อยเหมาะสำหรับคนส่วนใหญ่ (รวมไปถึงผมด้วย) สักเท่าไหร่ ซึ่งเราจะคิดกันว่าเราสามารถจ่ายเท่าไหร่ก็ได้ แค่ไม่ให้รายจ่ายมากกว่ารายรับแค่นั้น ทำให้ทุกๆ ช่วงสิ้นเดือนเราจะไม่ค่อยมีเงินเหลือกันสักเท่าไหร่ เป็นกันไหมครับ? ดังที่ <a title="euam c." href="http://twitter.com/lecuppiecake">@lecuppiecake</a> เคยกล่าวไว้ว่า &#8220;สิ้นเดือนเมื่อไหร่ แม้แต่แกลบยังแพง&#8221; ตัวผมเองไม่เหมาะกับสูตรนี้อย่างแรง <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>แล้วสูตรไหนเหมาะ? ก็แค่ย้ายข้างสมการ จะได้อีกสูตรดังนี้</p>
<blockquote><p>รายรับ &#8211; เงินออม = รายจ่าย</p></blockquote>
<p>ดูแล้วผลลัพธ์เท่ากันใช่ไหมครับ? ถ้าตอบในเชิงคณิตศาสตร์ก็ใช่ครับ แต่ว่าในชีวิตจริงคำตอบคงต่างออกไป สมการข้างต้นนี้จะมีความหมายว่า พอเราได้รายรับ (เงินเดือน หรืออะไรก็ตาม) มาเมื่อไหร่ ให้หักเก็บไว้เป็นเงินออมทันที ประมาณ 10-20% ของรายรับ (แล้วแต่คนนะครับ เลขนี้ไม่ตายตัว) การทำเช่นนี้ให้ผลดีตามมาก็คือ</p>
<ol>
<li>เราสามารถคิดได้ว่า มีเท่าไหร่ก็ใช้เท่านั้น (คิดเหมือนตอนที่เราใช้สูตรแรก) โดยไม่ต้องกังวลว่าเรามีเงินออมหรือเปล่า (นั่นก็เพราะ เราได้หักส่วนของเงินออมออกไปแล้ว)</li>
<li>เงินออมของเราจะเพิ่มขึ้นอย่างสม่ำเสมอ เราสามารถนำเงินจำนวนนี้ไปทำงานแทนเราได้ เช่น ฝากธนาคารเอาดอกเบี้ย หรือ ลงทุน</li>
<li>ลดค่าใช้จ่ายที่ไม่จำเป็นออก โดยที่เราไม่รู้ตัว</li>
</ol>
<p>จริงๆ แล้วยังมีข้อดีอีกมากมายครับ สำหรับการใช้สูตรที่ 2 นี้</p>
<p>เราสามารถเริ่มต้นการออมเมื่อไหร่ก็ได้ครับ แค่ &#8220;ออมก่อน มีสิทธิรวยกว่า&#8221; เท่านั้นเอง <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://zkan.nokkok.com/2009/11/simple-formula-for-savings/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mount USB drive on Ubuntu 9.10 (Karmic Koala)</title>
		<link>http://zkan.nokkok.com/2009/10/mount-usb-drive-on-ubuntu-9-10/</link>
		<comments>http://zkan.nokkok.com/2009/10/mount-usb-drive-on-ubuntu-9-10/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 06:22:12 +0000</pubDate>
		<dc:creator>zkan</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Karmic Koala]]></category>
		<category><![CDATA[Mount]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[USB]]></category>

		<guid isPermaLink="false">http://zkan.nokkok.com/?p=101</guid>
		<description><![CDATA[I write the solution for a problem that USB drive cannot be mounted automatically on Ubuntu 9.10.
Firstly, install gnome-mount.
sudo apt-get install gnome-mount
Secondly, go to System &#62; Preferences &#62; Startup Applications. And add this command.
gnome-mount -p xxx (change xxx to the volume label)
Finally, log out the system and it should work then. However, the problem still [...]]]></description>
			<content:encoded><![CDATA[<p>I write the solution for a problem that USB drive cannot be mounted automatically on Ubuntu 9.10.</p>
<p>Firstly, install gnome-mount.</p>
<p><code>sudo apt-get install gnome-mount</code></p>
<p>Secondly, go to System &gt; Preferences &gt; Startup Applications. And add this command.</p>
<p><code>gnome-mount -p xxx (change xxx to the volume label)</code></p>
<p>Finally, log out the system and it should work then. However, the problem still occurs after unmount and unplug the USB drive. To fix it, log out the system and then plug in the USB drive again. It is not a very good solution by the way. <img src='http://zkan.nokkok.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Also, find the bug report <a title="nothing happens when usb disk is plugged in" href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/442628">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://zkan.nokkok.com/2009/10/mount-usb-drive-on-ubuntu-9-10/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
