<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Sikachu!'s Blog</title>
	
	<link>http://sikachu.com</link>
	<description>Just a blog of Web Developer</description>
	<lastBuildDate>Thu, 01 Oct 2009 07:16:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/SikachuBlog" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>เปลี่ยน Package มือถือ</title>
		<link>http://sikachu.com/2009/10/%e0%b9%80%e0%b8%9b%e0%b8%a5%e0%b8%b5%e0%b9%88%e0%b8%a2%e0%b8%99-package-%e0%b8%a1%e0%b8%b7%e0%b8%ad%e0%b8%96%e0%b8%b7%e0%b8%ad/</link>
		<comments>http://sikachu.com/2009/10/%e0%b9%80%e0%b8%9b%e0%b8%a5%e0%b8%b5%e0%b9%88%e0%b8%a2%e0%b8%99-package-%e0%b8%a1%e0%b8%b7%e0%b8%ad%e0%b8%96%e0%b8%b7%e0%b8%ad/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 07:04:54 +0000</pubDate>
		<dc:creator>Sikachu!</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[My Idea]]></category>
		<category><![CDATA[Dtac]]></category>
		<category><![CDATA[edge]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://sikachu.com/?p=379</guid>
		<description><![CDATA[หลังจากที่ทำการเปลี่ยนไปใช้ iPhone แล้วพบว่าตัวเองต้องเปิดๆ ปิดๆ Edge อยู่ตลอดเวลา ทำให้รู้สึกว่า &#8220;ทำไมมันยุ่งยากอย่างนี้ฟระ !!&#8221;
สุดท้ายแล้วก็เลยตัดสินใจ เปลี่ยน Package EDGE/GPRS เป็น Unlimited 999 บาทซะ (ของ DTAC ครับ) เพราะว่า DTAC มันไม่มีแบบที่เหมา Kb/Mb เยอะๆ แบบ AIS
เนื่องจาก cost ของ EDGE/GPRS จะพุ่ง ก็เลยต้องหา Package ที่ลดค่าโทรมา เลยทำการ Analyze การใช้โทรศัพท์ตัวเอง ปรากฎว่า ..

(ค่าโทรข้างล่าง ต้องบวกไปอีก 299 นะครับ เป็นค่า Package)
อุแม่เจ้า เพิ่งเห็นว่าเราใช้โทรศัพท์แค่เดือนนึงสูงสุด 124 นาทีเอง &#8230; นี่ถือว่าน้อยมากนะเนี่ย (เพราะส่วนใหญ่ชอบส่ง SMS มากกว่า -*-)
สุดท้ายแล้ว ก็เลยทำการเปลี่ยน Package เป็นดังนี้
- [...]]]></description>
			<content:encoded><![CDATA[<p>หลังจากที่ทำการเปลี่ยนไปใช้ iPhone แล้วพบว่าตัวเองต้องเปิดๆ ปิดๆ Edge อยู่ตลอดเวลา ทำให้รู้สึกว่า &#8220;ทำไมมันยุ่งยากอย่างนี้ฟระ !!&#8221;</p>
<p>สุดท้ายแล้วก็เลยตัดสินใจ เปลี่ยน Package EDGE/GPRS เป็น Unlimited 999 บาทซะ (ของ DTAC ครับ) เพราะว่า DTAC มันไม่มีแบบที่เหมา Kb/Mb เยอะๆ แบบ AIS</p>
<p>เนื่องจาก cost ของ EDGE/GPRS จะพุ่ง ก็เลยต้องหา Package ที่ลดค่าโทรมา เลยทำการ Analyze การใช้โทรศัพท์ตัวเอง ปรากฎว่า ..</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/10/Screen-shot-2552-09-25-at-21.50.071.png" alt="Screen shot 2552-09-25 at 21.50.07.png" border="0" width="510" height="75" /></p>
<p>(ค่าโทรข้างล่าง ต้องบวกไปอีก 299 นะครับ เป็นค่า Package)</p>
<p>อุแม่เจ้า เพิ่งเห็นว่าเราใช้โทรศัพท์แค่เดือนนึงสูงสุด 124 นาทีเอง &#8230; นี่ถือว่าน้อยมากนะเนี่ย (เพราะส่วนใหญ่ชอบส่ง SMS มากกว่า -*-)</p>
<p>สุดท้ายแล้ว ก็เลยทำการเปลี่ยน Package เป็นดังนี้</p>
<p>- โทรมันจิงดิ 200 นาที ในเครือข่าย/200 นาทีนอกเครือข่าย 250 บาท (เล็กที่สุด + คุ้มที่สุดแล้ว)<br />
- SMS 110 ข้อความ 79 บาท (คุ้มๆ)<br />
- EDGE/GPRS Unlimited Monthly 999 บาท</p>
<p>ตกๆ แล้ว เดือนนึงจะจ่ายประมาณ 1500 บาท &#8230; ไม่รู้แม่จะว่ามั้ย หุหุ (แม่ยังจ่ายค่ามือถือให้อยู่ครับ)</p>
<p>หวังว่าสิ้นเดือนหน้า DTAC จะมาพร้อมกับ Package GPRS ราคาประหยัดลงหน่อยนะครับ สัก 599 กำลังดี &#8230; เข้าใจว่าระบบเร็ว แรง แต่ขอราคาถูกๆ ด้วยได้ไหมครับ T_T</p>
<p>(ถึงไม่เอา iPhone เข้ามาขาย แต่เห็นใจแล้วลดราคาให้คนใช้ iPhone หน่อยเต๊อะ &#8230;)</p>

<p><a href="http://feedads.g.doubleclick.net/~a/RHPlN0jTRYSWM6rADnu0g2NFCyE/0/da"><img src="http://feedads.g.doubleclick.net/~a/RHPlN0jTRYSWM6rADnu0g2NFCyE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/RHPlN0jTRYSWM6rADnu0g2NFCyE/1/da"><img src="http://feedads.g.doubleclick.net/~a/RHPlN0jTRYSWM6rADnu0g2NFCyE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/SikachuBlog/~4/k9o7Z0aKEuU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sikachu.com/2009/10/%e0%b9%80%e0%b8%9b%e0%b8%a5%e0%b8%b5%e0%b9%88%e0%b8%a2%e0%b8%99-package-%e0%b8%a1%e0%b8%b7%e0%b8%ad%e0%b8%96%e0%b8%b7%e0%b8%ad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tweetie Update</title>
		<link>http://sikachu.com/2009/10/tweetie-update/</link>
		<comments>http://sikachu.com/2009/10/tweetie-update/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 06:56:51 +0000</pubDate>
		<dc:creator>Sikachu!</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Garbage]]></category>
		<category><![CDATA[os x]]></category>
		<category><![CDATA[tweetie]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://sikachu.com/?p=375</guid>
		<description><![CDATA[วันนี้ตอนเปิดเครื่องมาตอนเช้า Tweetie มันขึ้นให้ Update เป็น version 1.2.4 ครับ .. แต่แล้วพอ Sparkle มันเปิดหน้าจอมา อดยิ้มไม่ได้เลย
จะฮาไปไหน สำหรับ Change Log อันนี้

อารมณ์แบบ .. ก็มันพังนี่ฝร่า แต่แก้แล้วนะ! 555+
]]></description>
			<content:encoded><![CDATA[<p>วันนี้ตอนเปิดเครื่องมาตอนเช้า Tweetie มันขึ้นให้ Update เป็น version 1.2.4 ครับ .. แต่แล้วพอ Sparkle มันเปิดหน้าจอมา อดยิ้มไม่ได้เลย</p>
<p>จะฮาไปไหน สำหรับ Change Log อันนี้</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/10/Screen-shot-2552-10-01-at-11.39.21.png" alt="Screen shot 2552-10-01 at 11.39.21.png" border="0" width="500" height="334" /></p>
<p>อารมณ์แบบ .. ก็มันพังนี่ฝร่า แต่แก้แล้วนะ! 555+</p>

<p><a href="http://feedads.g.doubleclick.net/~a/yYjvAWlfY3RMd2ZMq9vuaJfJM1g/0/da"><img src="http://feedads.g.doubleclick.net/~a/yYjvAWlfY3RMd2ZMq9vuaJfJM1g/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yYjvAWlfY3RMd2ZMq9vuaJfJM1g/1/da"><img src="http://feedads.g.doubleclick.net/~a/yYjvAWlfY3RMd2ZMq9vuaJfJM1g/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/SikachuBlog/~4/JrWgGHmBtIQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sikachu.com/2009/10/tweetie-update/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Snow Leopard และ Automatic Printer Driver Download</title>
		<link>http://sikachu.com/2009/10/snow-leopard-%e0%b9%81%e0%b8%a5%e0%b8%b0-automatic-printer-driver-download/</link>
		<comments>http://sikachu.com/2009/10/snow-leopard-%e0%b9%81%e0%b8%a5%e0%b8%b0-automatic-printer-driver-download/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 06:54:26 +0000</pubDate>
		<dc:creator>Sikachu!</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[My Life]]></category>
		<category><![CDATA[driver]]></category>
		<category><![CDATA[os x]]></category>
		<category><![CDATA[printer]]></category>
		<category><![CDATA[snow leopard]]></category>

		<guid isPermaLink="false">http://sikachu.com/?p=372</guid>
		<description><![CDATA[ไม่คิดว่าการลง Driver จะง่ายขนาดนี้
มันเป็น feature ที่ควรจะมีตั้งนานแล้ว และควรจะมีทุก OS อยู่แล้ว สำหรับการที่ตัว OS วิ่งไปหา Driver สำหรับ Device ผ่านทางอินเตอร์เน็ต
ผมเห็นว่า Windows XP มีสักพักแล้ว &#8230; แต่รู้สึกว่าไม่เคยหา Driver อะไรเจอเลย จนกระทั่งมาเจอ Snow Leopard มันขึ้นอย่างนี้ !!

อุ ..​แล้วจะช้าอยู่ใย? Install โลด !!

มีขึ้น License Agreement ให้อ่าน &#8230; ยอมทำตามก็ได้ฟระ -*- Accept ไป

อ่าวห้ย สรุปว่าหาเจอมั้ยเนี่ย &#8230;.

และแล้วก็เรียบร้อย ~
สรุปว่าใครก็ได้ confirm ผมทีว่า Windows 7 ก็มีอะไรอย่างนี้ด้วย ถูกต้องช่ายมั้ยครับ?  
]]></description>
			<content:encoded><![CDATA[<p>ไม่คิดว่าการลง Driver จะง่ายขนาดนี้</p>
<p>มันเป็น feature ที่ควรจะมีตั้งนานแล้ว และควรจะมีทุก OS อยู่แล้ว สำหรับการที่ตัว OS วิ่งไปหา Driver สำหรับ Device ผ่านทางอินเตอร์เน็ต</p>
<p>ผมเห็นว่า Windows XP มีสักพักแล้ว &#8230; แต่รู้สึกว่าไม่เคยหา Driver อะไรเจอเลย จนกระทั่งมาเจอ Snow Leopard มันขึ้นอย่างนี้ !!</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/10/Screen-shot-2552-09-18-at-22.30.17.png" alt="Screen shot 2552-09-18 at 22.30.17.png" border="0" width="420" height="153" /></p>
<p>อุ ..​แล้วจะช้าอยู่ใย? Install โลด !!</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/10/Screen-shot-2552-09-18-at-22.30.211.png" alt="Screen shot 2552-09-18 at 22.30.21.png" border="0" width="519" height="407" /></p>
<p>มีขึ้น License Agreement ให้อ่าน &#8230; ยอมทำตามก็ได้ฟระ -*- Accept ไป</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/10/Screen-shot-2552-09-18-at-22.30.26.png" alt="Screen shot 2552-09-18 at 22.30.26.png" border="0" width="508" height="145" /></p>
<p>อ่าวห้ย สรุปว่าหาเจอมั้ยเนี่ย &#8230;.</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/10/Screen-shot-2552-09-18-at-22.31.04.png" alt="Screen shot 2552-09-18 at 22.31.04.png" border="0" width="508" height="145" /></p>
<p>และแล้วก็เรียบร้อย ~</p>
<p>สรุปว่าใครก็ได้ confirm ผมทีว่า Windows 7 ก็มีอะไรอย่างนี้ด้วย ถูกต้องช่ายมั้ยครับ? <img src='http://sikachu.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/0Jqyxf7bf5ndaQilRwbi_qKDIgI/0/da"><img src="http://feedads.g.doubleclick.net/~a/0Jqyxf7bf5ndaQilRwbi_qKDIgI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/0Jqyxf7bf5ndaQilRwbi_qKDIgI/1/da"><img src="http://feedads.g.doubleclick.net/~a/0Jqyxf7bf5ndaQilRwbi_qKDIgI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/SikachuBlog/~4/fOYFUwzr44o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sikachu.com/2009/10/snow-leopard-%e0%b9%81%e0%b8%a5%e0%b8%b0-automatic-printer-driver-download/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ADSL2+ กับ Negative Upstream</title>
		<link>http://sikachu.com/2009/10/adsl2-%e0%b8%81%e0%b8%b1%e0%b8%9a-negative-upstream/</link>
		<comments>http://sikachu.com/2009/10/adsl2-%e0%b8%81%e0%b8%b1%e0%b8%9a-negative-upstream/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 06:47:00 +0000</pubDate>
		<dc:creator>Sikachu!</dc:creator>
				<category><![CDATA[My Life]]></category>
		<category><![CDATA[My Project]]></category>
		<category><![CDATA[adsl]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[true]]></category>
		<category><![CDATA[true internet]]></category>

		<guid isPermaLink="false">http://sikachu.com/?p=363</guid>
		<description><![CDATA[เมื่อนานมาแล้ว Internet ของที่บริษัท Infogination นั้น สมัคร Package ไว้ที่ความเร็ว 2048/512 เท่านั้น เพราะว่าคนน้อย และมีคนใช้อินเตอร์เน็ตน้อย ไม่ต้องการความเร็วมาก
แต่ปรากฎว่าหลังจากที่ @hunt และ @sikachu ย้ายเข้ามา &#8230; ความต้องการใช้อินเตอร์เน็ตมากขึ้น และตอนนั้น True เพิ่งออก Package ใหม่คือ 8192/512 &#8230; ก็เลยตัดสินใจเปลี่ยนมันซะ !!
คราวนี้ หลังจากเปลี่ยนเรียบร้อย ก็ปรากฎว่า อินเตอร์เน็ตติดๆ ดับๆ -*-
ด้วยความที่ hardware ตัวเก่า (modem ของ Billion) มันมีอายุนานมากแล้ว ก็เลยคิดว่ามันเป็นต้นเหตุของอินเตอร์เน็ตหลุด เลยจัดการซื้อ modem ใหม่มาเปลี่ยน มันก็ไม่หาย &#8230; เลยลองตรวจสอบสาเหตุของมัน ปรากฎว่า &#8230;
SNR Margin ของ Upstream ติดลบครับ !!

ลองสอบถามช่างทรู เรียกมาตรวจสอบถึงที่ออฟฟิตแล้ว ก็ไม่ได้คำตอบเป็นที่พอใจ [...]]]></description>
			<content:encoded><![CDATA[<p>เมื่อนานมาแล้ว Internet ของที่บริษัท <a href="http://www.infogination.com">Infogination</a> นั้น สมัคร Package ไว้ที่ความเร็ว 2048/512 เท่านั้น เพราะว่าคนน้อย และมีคนใช้อินเตอร์เน็ตน้อย ไม่ต้องการความเร็วมาก</p>
<p>แต่ปรากฎว่าหลังจากที่ <a href="http://hunt.desi2n.com">@hunt</a> และ <a href="http://twitter.com/sikachu">@sikachu</a> ย้ายเข้ามา &#8230; ความต้องการใช้อินเตอร์เน็ตมากขึ้น และตอนนั้น True เพิ่งออก Package ใหม่คือ 8192/512 &#8230; ก็เลยตัดสินใจเปลี่ยนมันซะ !!</p>
<p>คราวนี้ หลังจากเปลี่ยนเรียบร้อย ก็ปรากฎว่า อินเตอร์เน็ตติดๆ ดับๆ -*-</p>
<p>ด้วยความที่ hardware ตัวเก่า (modem ของ Billion) มันมีอายุนานมากแล้ว ก็เลยคิดว่ามันเป็นต้นเหตุของอินเตอร์เน็ตหลุด เลยจัดการซื้อ modem ใหม่มาเปลี่ยน มันก็ไม่หาย &#8230; เลยลองตรวจสอบสาเหตุของมัน ปรากฎว่า &#8230;</p>
<p>SNR Margin ของ Upstream ติดลบครับ !!</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/10/Screen-shot-2552-09-04-at-11.33.43.png" alt="Screen shot 2552-09-04 at 11.33.43.png" border="0" width="305" height="183" /></p>
<p>ลองสอบถามช่างทรู เรียกมาตรวจสอบถึงที่ออฟฟิตแล้ว ก็ไม่ได้คำตอบเป็นที่พอใจ &#8230; เพราะว่าพนักงานไม่เข้าใจว่า Margin ติดลบมันหมายความว่ายังไง</p>
<p>มันหมายความว่า Noise มากกว่า Signal ไงครับ! เข้าใจมั้ยยยยยยยย ~!!</p>
<p>สุดท้าย ต้องยอมเปลี่ยนเป็น G.dmt เพื่อให้เน็ตเสถียรขึ้น (เพิ่งรู้ว่า G.dmt connect ที่ 12M ได้)</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/10/Screen-shot-2552-09-04-at-11.27.44.png" alt="Screen shot 2552-09-04 at 11.27.44.png" border="0" width="279" height="181" /></p>
<p>แล้วก็ต้องใช้มันต่อไป &#8230; คาดว่าถ้าไม่ไหวอีกรอบ ก็คงโทรไปโวยอีก เห้อออ -*-</p>

<p><a href="http://feedads.g.doubleclick.net/~a/ukKF3kFFEYjW8CXtZxsxMJVI6Ko/0/da"><img src="http://feedads.g.doubleclick.net/~a/ukKF3kFFEYjW8CXtZxsxMJVI6Ko/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ukKF3kFFEYjW8CXtZxsxMJVI6Ko/1/da"><img src="http://feedads.g.doubleclick.net/~a/ukKF3kFFEYjW8CXtZxsxMJVI6Ko/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/SikachuBlog/~4/Md_v8e48YoA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sikachu.com/2009/10/adsl2-%e0%b8%81%e0%b8%b1%e0%b8%9a-negative-upstream/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Optimize database query ด้วย :include</title>
		<link>http://sikachu.com/2009/08/optimize-database-query-%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-include/</link>
		<comments>http://sikachu.com/2009/08/optimize-database-query-%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-include/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 06:14:57 +0000</pubDate>
		<dc:creator>Sikachu!</dc:creator>
				<category><![CDATA[My Project]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://sikachu.com/?p=347</guid>
		<description><![CDATA[ในการเขียนโปรแกรมบน Ruby on Rails นั้น เรามักที่จะใช้ ActiveRecord ในการทำหน้าที่เป็น ORM ระหว่างตัว Application กับ database ซื่งทำให้การเรียก Record นั้น สามารถทำได้อย่างง่ายดาย เช่น ถ้าผมจะเรียกดู post ทั้งหมดที่มีอยู่ในระบบ ผมแค่สั่ง

Post.find&#40;:all&#41;    # หรือว่า Post.all ก็ได้ ใน Rails 2.x

ซึ่งตรงนี้ ถ้าเราไปดูใน Log file จะพบว่า ActiveRecord นั้น จะใช้คำสั่งค้นหาข้อมูลประมาณนี้ครับ

  Post Load (0.1ms)   SELECT * FROM &#34;posts&#34;

(ผมใช่ sqlite3 เพราะฉะนั้น table name/field name จะถูกใส่ไว้ใน [...]]]></description>
			<content:encoded><![CDATA[<p>ในการเขียนโปรแกรมบน <a href="http://rubyonrails.org/">Ruby on Rails</a> นั้น เรามักที่จะใช้ <a href="http://api.rubyonrails.org/classes/ActiveRecord/Base.html">ActiveRecord</a> ในการทำหน้าที่เป็น ORM ระหว่างตัว Application กับ database ซื่งทำให้การเรียก Record นั้น สามารถทำได้อย่างง่ายดาย เช่น ถ้าผมจะเรียกดู post ทั้งหมดที่มีอยู่ในระบบ ผมแค่สั่ง</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Post.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span><span style="color:#006600; font-weight:bold;">&#41;</span>    <span style="color:#008000; font-style:italic;"># หรือว่า Post.all ก็ได้ ใน Rails 2.x</span></pre></div></div>

<p>ซึ่งตรงนี้ ถ้าเราไปดูใน Log file จะพบว่า ActiveRecord นั้น จะใช้คำสั่งค้นหาข้อมูลประมาณนี้ครับ</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">  Post Load (0.1ms)   SELECT * FROM &quot;posts&quot;</pre></div></div>

<p>(ผมใช่ sqlite3 เพราะฉะนั้น table name/field name จะถูกใส่ไว้ใน quote ครับ)</p>
<p>ถ้าสมมุติในโปรแกรมนั้น เราได้ทำ <a href="http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html">Association</a> ระหว่าง Post และ Comment (Post has many comments) และระหว่าง Comment กับ User (comment belongs to user)</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Post <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  has_many <span style="color:#ff3333; font-weight:bold;">:comments</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># ...</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> Comment <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  belongs_to <span style="color:#ff3333; font-weight:bold;">:post</span>
  belongs_to <span style="color:#ff3333; font-weight:bold;">:user</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># ...</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>ถ้าเราต้องการจะแสดงผล comment แต่ละอันด้วย เราก็สามารถทำได้โดยเรียกเมธอด <code>#comments</code> ที่ถูกสร้างขึ้นมาอัตโนมัติโดยการทำ association และเช่นเดียวกัน ถ้าเราต้องการแสดงด้วยว่า comment นั้นถูกเขียนโดยใคร เราก็สามารถเรียกเมธอด <code>#user</code> บน comment เช่นกัน</p>

<div class="wp_syntax"><div class="code"><pre class="rails" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;%</span> Post.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#5A0A0A; font-weight:bold;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>post<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  &lt;!-- display post --&gt;
  <span style="color:#006600; font-weight:bold;">&lt;%</span> post.<span style="color:#9900CC;">comments</span>.<span style="color:#5A0A0A; font-weight:bold;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>comment<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    By: <span style="color:#006600; font-weight:bold;">&lt;%</span>= comment.<span style="color:#9900CC;">user</span>.<span style="color:#9900CC;">username</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    &lt;!-- display comments --&gt;
  <span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
<span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>คราวนี้ สมมุติว่าบล็อกเรามีทั้งหมด 10 Post แล้วแต่ละอันมี 5 comment &#8230; SQL ที่ออกมานั้น จะเป็นประมาณนี้ครับ</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">  Post Load (0.1ms)   SELECT * FROM &quot;posts&quot;
  Comment Load (0.5ms)   SELECT * FROM &quot;comments&quot; WHERE (&quot;comments&quot;.
&quot;post_id&quot; = '1')
  User Load (0.2ms)   SELECT * FROM &quot;users&quot; WHERE (&quot;user&quot;.&quot;id&quot; = '5')
  User Load (0.2ms)   SELECT * FROM &quot;users&quot; WHERE (&quot;user&quot;.&quot;id&quot; = '24')
  User Load (0.2ms)   SELECT * FROM &quot;users&quot; WHERE (&quot;user&quot;.&quot;id&quot; = '30')
  User Load (0.2ms)   SELECT * FROM &quot;users&quot; WHERE (&quot;user&quot;.&quot;id&quot; = '4')
  CACHE (0.0ms)   SELECT * FROM &quot;users&quot; WHERE (&quot;user&quot;.&quot;id&quot; = '5')
  Comment Load (0.3ms)   SELECT * FROM &quot;comments&quot; WHERE (&quot;comments&quot;.
&quot;post_id&quot; = '2')
  User Load (0.2ms)   SELECT * FROM &quot;users&quot; WHERE (&quot;user&quot;.&quot;id&quot; = '38')
  User Load (0.2ms)   SELECT * FROM &quot;users&quot; WHERE (&quot;user&quot;.&quot;id&quot; = '14')
  User Load (0.2ms)   SELECT * FROM &quot;users&quot; WHERE (&quot;user&quot;.&quot;id&quot; = '40')
  User Load (0.2ms)   SELECT * FROM &quot;users&quot; WHERE (&quot;user&quot;.&quot;id&quot; = '2')
  User Load (0.2ms)   SELECT * FROM &quot;users&quot; WHERE (&quot;user&quot;.&quot;id&quot; = '9')
  ...</pre></div></div>

<p>จะเห็นได้ว่า ในสถานการณ์ที่แย่ที่สุดนั้น (user ที่มา comment แต่ละ post นั้น ไม่ตรงกันเลย เป็นต้น) ActiveRecord จำเป็นต้องทำการ Query ทั้งหมด <code>1 + 10 + (10 * 5)  = 61</code> ครั้ง ซึ่งไม่มีประสิทธิภาพเลยครับ เพราะเปลือง Query มากมาย</p>
<p>ดังนั้น เพื่อให้ Query ทั้งหมดนี่มีประสิทธิภาพมากขึ้น ActiveRecord จึงมี key หนึ่งชื่อว่า <code><a href="http://api.rubyonrails.org/classes/ActiveRecord/Base.html">:include</a></code> เอาไว้สำหรับสั่งว่าให้ ActiveRecord นั้นทำการโหลด Model ที่ associates กับ object นี้ขึ้นมาด้วยพร้อมๆ กันเลย เพื่อประหยัด Query ครับ เพราะฉะนั้นโค้ดในการค้นหาของเราจะเปลี่ยนเป็น</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Post.find(:all, :include =&gt; {:comments =&gt; :user}).each do |post|
  # ... display post
  post.comments.each do |comment|
    By: <span style="color:#006600; font-weight:bold;">&lt;%</span>= comment.<span style="color:#9900CC;">user</span>.<span style="color:#9900CC;">username</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    # ... display comments
  end
end</pre></div></div>

<p>แล้วผลของมันน่ะหรอครับ? 61 query -> 3 queries ครับ!</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">  Post Load (0.1ms)   SELECT * FROM &quot;posts&quot;
  Comment Load (0.3ms)   SELECT * FROM &quot;comments&quot; WHERE (&quot;comments&quot;.
&quot;post_id&quot; IN (1, 2, 3, 4, 5))
  User Load (1.3ms)   SELECT * FROM &quot;users&quot; WHERE (&quot;user&quot;.&quot;id&quot; IN (5, 24,
30, 4, 2, 38, 14, 40, 2, 9, 23, 41, 48, 50, 32, 10, 48)</pre></div></div>

<p>เพราะฉะนั้นการใช้ <code>:include</code> นั้น เป็นการ optimize query อย่างได้ผลทีเดียวละครับ โดยจะเห็นได้ว่าเรายังสามารถโหลด model แบบ nested ได้โดยการใช้ Hash และโหลดโมเดลหลายๆ อันพร้อมกันโดยใช้ Array ครับ อย่างเช่นถ้าเราต้องการโหลด Attachments จาก Comment และโหลด Tags จาก Post ด้วย เราก็สามารถใช้คำสั่งอย่างนี้ได้ครับ</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Post.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span>, <span style="color:#ff3333; font-weight:bold;">:include</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#123;</span>:comments <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:user</span>, <span style="color:#ff3333; font-weight:bold;">:attachments</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#125;</span>, 
<span style="color:#ff3333; font-weight:bold;">:tags</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p><strong>คำเตือน: Use it, but don&#8217;t abuse it!</strong></p>
<p>ในบางครั้ง การใช้ <code>:include</code> นั้น อาจจะทำให้เวลาในการ query นั้นลดลงได้ถ้าเทียบกับการ query object เล็กๆ หลายๆ ครั้งแทน เพราะฉะนั้นมันไม่ใช่สิ่งที่เวิร์คที่สุดครับ ต้องปรับใช้ให้เข้ากับงานซะมากกว่า โดยที่ผมแนะนำให้<strong>ใช้ <code>#find</code> method ตามปกติก่อน แล้วจึงค่อยเพิ่ม <code>:include</code> เข้าไปถ้าเราเห็นว่ามีการ query record จำนวนมากๆ</strong>ครับ &#8230; ถือซะว่าการใช้ <code>:include</code> นั้นเป็นการ refactor code ครับ และไม่ใช่สิ่งที่ต้องมาคิดตั้งแต่แรกว่าตรงนี้ต้องใช้มันหรือไม่ <img src='http://sikachu.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/PRceph4UUUljKoNKTair90zffys/0/da"><img src="http://feedads.g.doubleclick.net/~a/PRceph4UUUljKoNKTair90zffys/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PRceph4UUUljKoNKTair90zffys/1/da"><img src="http://feedads.g.doubleclick.net/~a/PRceph4UUUljKoNKTair90zffys/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/SikachuBlog/~4/NuvhDs5Cvv0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sikachu.com/2009/08/optimize-database-query-%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-include/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>truemove เปิดตัว iPhone 3GS แล้ว</title>
		<link>http://sikachu.com/2009/08/truemove-%e0%b9%80%e0%b8%9b%e0%b8%b4%e0%b8%94%e0%b8%95%e0%b8%b1%e0%b8%a7-iphone-3gs-%e0%b9%81%e0%b8%a5%e0%b9%89%e0%b8%a7/</link>
		<comments>http://sikachu.com/2009/08/truemove-%e0%b9%80%e0%b8%9b%e0%b8%b4%e0%b8%94%e0%b8%95%e0%b8%b1%e0%b8%a7-iphone-3gs-%e0%b9%81%e0%b8%a5%e0%b9%89%e0%b8%a7/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 08:26:17 +0000</pubDate>
		<dc:creator>Sikachu!</dc:creator>
				<category><![CDATA[Garbage]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone 3GS]]></category>
		<category><![CDATA[true]]></category>
		<category><![CDATA[truemove]]></category>

		<guid isPermaLink="false">http://sikachu.com/?p=345</guid>
		<description><![CDATA[หลังจากที่เมื่อวันก่อน ผมได้โพสไปเรื่องราคาของ iPhone 3GS ที่ว่าคุณปพนธ์ได้กล่าวเอาไว้ว่าราคาของ iPhone ใหม่นั้น ต้องแพงกว่าเครื่องเก่าแน่นอน
ปรากฎว่าหลังจากการเปิดตัวนั้น มันไม่จริงตามที่พูดครับ .. โดยราคาตอนนี้ดูได้ตามนี้เลย:

คราวนี้จะเห็นได้ว่า ราคาของเครื่องรุ่นใหม่นั้น อยู่ในช่วงราคาของเครื่องรุ่นเก่า .. ซึ่งตรงนี้ถือว่าทรูทำถูกแล้วล่ะครับ กับการที่ไม่ขึ้นราคาของเครื่อง (แต่ตัดสินใจไม่ขาย iPhone 3G เลย คงเป็นเพราะไม่คุ้มทุนแล้ว)
แต่ไปๆ มาๆ ไปเจอคนวิเคราะห์มาว่า การบอกว่า &#8220;เครื่องใหม่จะแพงกว่าเครื่องเก่า&#8221; ของคุณปพนธ์นั้น กลับอาจจะทำให้ทรูนั้นยังสามารถขายเครื่อง iPhone 3G ได้เรื่อยๆ เพราะคนคิดว่าเครื่องใหม่ยังไงก็ต้องมาในราคาสูงกว่าแน่นอน
ถือว่าเป็นกลยุทธทางการตลาด ที่ใช้ได้เลยนะครับเนี่ย &#8230; แต่อย่าทำบ่อยนะครับ เดี๋ยวคนจะไม่เชื่อสิ่งที่คุณพูดเอา &#8230;
เพราะฉะนั้น ถ้าตามราคานี้ &#8230; ผมว่าผมสนับสนุนให้คนซื้อเครื่องจาก truemove ครับ &#8230; แต่ไปใช้ค่ายอื่นนะครับ เพราะว่า edge ของ truemove นี่ ไม่ไหวจริงๆ &#8230;
]]></description>
			<content:encoded><![CDATA[<p>หลังจากที่<a href="http://sikachu.com/2009/08/true-iphone-3gs-และราคาที่ต่างไป/">เมื่อวันก่อน</a> ผมได้โพสไปเรื่องราคาของ iPhone 3GS ที่ว่าคุณปพนธ์ได้กล่าวเอาไว้ว่าราคาของ iPhone ใหม่นั้น ต้องแพงกว่าเครื่องเก่าแน่นอน</p>
<p>ปรากฎว่าหลังจากการเปิดตัวนั้น มันไม่จริงตามที่พูดครับ .. โดยราคาตอนนี้ดูได้ตามนี้เลย:</p>
<p><a href="http://truemove.com/iphone/tha/price_plan.htm"><img src="http://sikachu.com/wp-content/uploads/2009/08/table.jpg" alt="table.jpg" border="0" width="520" height="230" /></a></p>
<p>คราวนี้จะเห็นได้ว่า ราคาของเครื่องรุ่นใหม่นั้น อยู่ในช่วงราคาของเครื่องรุ่นเก่า .. ซึ่งตรงนี้ถือว่าทรูทำถูกแล้วล่ะครับ กับการที่ไม่ขึ้นราคาของเครื่อง (แต่ตัดสินใจไม่ขาย iPhone 3G เลย คงเป็นเพราะไม่คุ้มทุนแล้ว)</p>
<p>แต่ไปๆ มาๆ ไปเจอคนวิเคราะห์มาว่า การบอกว่า &#8220;เครื่องใหม่จะแพงกว่าเครื่องเก่า&#8221; ของคุณปพนธ์นั้น กลับอาจจะทำให้ทรูนั้นยังสามารถขายเครื่อง iPhone 3G ได้เรื่อยๆ เพราะคนคิดว่าเครื่องใหม่ยังไงก็ต้องมาในราคาสูงกว่าแน่นอน</p>
<p>ถือว่าเป็นกลยุทธทางการตลาด ที่ใช้ได้เลยนะครับเนี่ย &#8230; แต่อย่าทำบ่อยนะครับ เดี๋ยวคนจะไม่เชื่อสิ่งที่คุณพูดเอา &#8230;</p>
<p>เพราะฉะนั้น ถ้าตามราคานี้ &#8230; ผมว่าผมสนับสนุนให้คนซื้อเครื่องจาก truemove ครับ &#8230; แต่ไปใช้ค่ายอื่นนะครับ เพราะว่า edge ของ truemove นี่ ไม่ไหวจริงๆ &#8230;</p>

<p><a href="http://feedads.g.doubleclick.net/~a/b3J5wgXGrZqskqAwHtW8XDt3teo/0/da"><img src="http://feedads.g.doubleclick.net/~a/b3J5wgXGrZqskqAwHtW8XDt3teo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/b3J5wgXGrZqskqAwHtW8XDt3teo/1/da"><img src="http://feedads.g.doubleclick.net/~a/b3J5wgXGrZqskqAwHtW8XDt3teo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/SikachuBlog/~4/Czl3wQLIERo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sikachu.com/2009/08/truemove-%e0%b9%80%e0%b8%9b%e0%b8%b4%e0%b8%94%e0%b8%95%e0%b8%b1%e0%b8%a7-iphone-3gs-%e0%b9%81%e0%b8%a5%e0%b9%89%e0%b8%a7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>true iPhone 3GS และราคาที่ต่างไป</title>
		<link>http://sikachu.com/2009/08/true-iphone-3gs-%e0%b9%81%e0%b8%a5%e0%b8%b0%e0%b8%a3%e0%b8%b2%e0%b8%84%e0%b8%b2%e0%b8%97%e0%b8%b5%e0%b9%88%e0%b8%95%e0%b9%88%e0%b8%b2%e0%b8%87%e0%b9%84%e0%b8%9b/</link>
		<comments>http://sikachu.com/2009/08/true-iphone-3gs-%e0%b9%81%e0%b8%a5%e0%b8%b0%e0%b8%a3%e0%b8%b2%e0%b8%84%e0%b8%b2%e0%b8%97%e0%b8%b5%e0%b9%88%e0%b8%95%e0%b9%88%e0%b8%b2%e0%b8%87%e0%b9%84%e0%b8%9b/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 13:33:43 +0000</pubDate>
		<dc:creator>Sikachu!</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Garbage]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone 3GS]]></category>
		<category><![CDATA[true]]></category>

		<guid isPermaLink="false">http://sikachu.com/?p=340</guid>
		<description><![CDATA[หลังจากที่พยายามติดตามข่าวสารเกี่ยวกับการนำเข้า true iPhone 3GS &#8230; ตอนนี้ก็เห็นแล้วครับว่าเว็บไซต์ของ truemove นั้นได้ทำการเปลี่ยนเป็นรูปของ iPhone 3GS เรียบร้อยแล้ว

ซึ่งตรงนี้ผมว่าเป็นข่าวดี (มั้ง?) กับการที่ true จะนำเครื่องศูนย์เข้ามาขายสักที และทำให้ผู้ที่อยากจะใช้ไม่จำเป็นต้องไปซื้อมาจากต่างประเทศ &#8230;
&#8230; จนกระทั่งผมเห็นข้อความในกระทู้นี้

[คุณ] ปพนธ์ [ผู้บริหารของ true] เคยให้สัมภาษณ์ว่า ทรูเริ่มเตรียมการเรื่องการจัดการสต็อกสินค้าเพื่อนำ iPhone รุ่นใหม่เข้าเมืองไทยแล้วตั้งแต่เดือนมิถุนายน โดยขณะที่ให้สัมภาษณ์ยังไม่ได้ข้อสรุปราคา iPhone รุ่นใหม่
&#8220;iPhone รุ่นใหม่ก็ต้องแพงกว่า (รุ่นเดิมที่ขายตอนนี้) แน่นอน&#8221; ปพนธ์กล่าว

ผมยังไม่เคยเห็นเลยครับว่า Apple นั้นมี trend ของการเพิ่มราคาสินค้าที่จะเข้ามาแทนรุ่นเก่า โดยที่ส่วนใหญ่เราจะเห็นกันๆ นั้นก็คือการที่ราคาของเครื่อง Macintosh ที่ราคาแทบจะไม่ลดไม่เพิ่มเลย แม้มีเครื่องรุ่นใหม่เข้ามาก็จะเข้า &#8220;มาแทน&#8221; เท่านั้น
ซึ่งตรงนี้ ก็เป็นสิ่งที่ Apple กำหนดไว้ตลอด
คราวนี้ ลองมามองทางด้านราคาของ iPhone ที่ทรูกล่าวอ้างว่าราคานั้นต้องขึ้นเพราะเป็นรุ่นใหม่บ้าง ปรากฎว่า .. มันไม่จริงเลยครับว่าเป็นรุ่นใหม่แล้วต้องขึ้นราคา ผมเลยขอยกตัวอย่างจาก Apple Store [...]]]></description>
			<content:encoded><![CDATA[<p>หลังจากที่พยายามติดตามข่าวสารเกี่ยวกับการนำเข้า true <a href="http://www.apple.com/iphone/iphone-3gs/">iPhone 3GS</a> &#8230; ตอนนี้ก็เห็นแล้วครับว่าเว็บไซต์ของ <a href="http://truemove.com/iphone/index.htm">truemove</a> นั้นได้ทำการเปลี่ยนเป็นรูปของ iPhone 3GS เรียบร้อยแล้ว</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/08/Picture-5.png" alt="Picture 5.png" border="0" width="520" height="371" /></p>
<p>ซึ่งตรงนี้ผมว่าเป็นข่าวดี (มั้ง?) กับการที่ true จะนำเครื่องศูนย์เข้ามาขายสักที และทำให้ผู้ที่อยากจะใช้ไม่จำเป็นต้องไปซื้อมาจากต่างประเทศ &#8230;</p>
<p>&#8230; จนกระทั่งผมเห็น<a href="http://www.pantip.com/cafe/mbk/topic/T8153786/T8153786.html">ข้อความในกระทู้นี้</a></p>
<blockquote><p>
[คุณ] ปพนธ์ [ผู้บริหารของ true] เคยให้สัมภาษณ์ว่า ทรูเริ่มเตรียมการเรื่องการจัดการสต็อกสินค้าเพื่อนำ iPhone รุ่นใหม่เข้าเมืองไทยแล้วตั้งแต่เดือนมิถุนายน โดยขณะที่ให้สัมภาษณ์ยังไม่ได้ข้อสรุปราคา iPhone รุ่นใหม่</p>
<p>&#8220;iPhone รุ่นใหม่ก็ต้องแพงกว่า (รุ่นเดิมที่ขายตอนนี้) แน่นอน&#8221; ปพนธ์กล่าว
</p></blockquote>
<p>ผมยังไม่เคยเห็นเลยครับว่า Apple นั้นมี trend ของการเพิ่มราคาสินค้าที่จะเข้ามาแทนรุ่นเก่า โดยที่ส่วนใหญ่เราจะเห็นกันๆ นั้นก็คือการที่ราคาของเครื่อง Macintosh ที่ราคาแทบจะไม่ลดไม่เพิ่มเลย แม้มีเครื่องรุ่นใหม่เข้ามาก็จะเข้า &#8220;มาแทน&#8221; เท่านั้น</p>
<p>ซึ่งตรงนี้ ก็เป็นสิ่งที่ Apple กำหนดไว้ตลอด</p>
<p>คราวนี้ ลองมามองทางด้านราคาของ iPhone ที่ทรูกล่าวอ้างว่าราคานั้นต้องขึ้นเพราะเป็นรุ่นใหม่บ้าง ปรากฎว่า .. มันไม่จริงเลยครับว่าเป็นรุ่นใหม่แล้วต้องขึ้นราคา ผมเลยขอยกตัวอย่างจาก Apple Store HK ครับ</p>
<p>เริ่มจากราคาของ iPhone 3G</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/08/iphone3g.jpg" alt="iphone3g.jpg" border="0" width="469" height="242" /></p>
<p>ต่อด้วยราคาของ iPhone 3GS</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/08/iphone3gs.jpg" alt="iphone3gs.jpg" border="0" width="520" height="197" /></p>
<p>จะเห็นได้ว่า ราคานั้นแทบไม่ต่างกันเลย อยู่ในช่วงราคาเดียวกันด้วยซ้ำครับ (ซึ่ง 16GB ที่มาแทน 8GB นี่ จะเห็นได้ว่าราคานั้นถูกลงกว่าเดิมอีก) ซึ่งนั่นก็เป็นมาตรฐานราคาของ Apple ครับ ถือว่าราคาไม่เคลื่อนสักเท่าไร</p>
<p>ดังนั้นตามที่มีข่าวลือว่าราคา 29,000 &#8211; 34,000 นั้น &#8230; ลองคิดดูดีๆ ครับว่าถ้าทรูออกราคานั้นมาจริง ผมว่าคงจะสู้ไม่ได้กับราคาตู้ตาม MBK และราคาที่ HK แน่นอน &#8230; และแน่นอนว่าทรูต้องแย่แน่ๆ กับการทำยอดให้ถึงเป้า ซึ่งผมก็เห็นด้วยตามความเห็นของคุณ NBC ครับ</p>
<blockquote><p>
สัญญา ที่ ทรู ทำไว้กับ แอปเปิ้ล ตกลงว่าจะตั้งราคา เอากำไรจากราคาทุน<br />
ได้ไม่เกิน 5 % ถ้า ทรู ตั้งราคาเวอร์ ก็จะผิดสัญญา และ สังคมก็จะลงโทษด้วยการซื้อเครื่องหิ้ว ซึ่ง คนไทย ก็ไป สิงคโปร์ และ ฮ่องกง กันโครม ๆ อยู่แล้ว พนักงาน ทรูก็จะนั่งตบยุงไปตามระเบียบ กรรมตามทันแน่นอน เร็วเสียด้วย
</p></blockquote>
<p>เหลือเวลาอีกไม่ถึง 24 ชม. หวังว่าทางทรูคงจะคิดได้นะครับว่าควรจะทำอย่างไรกับการตั้งราคา &#8230; ตั้งราคาไม่สูงมาก เพื่อที่เชียร์ให้คนซื้อเครื่องในประเทศ กับการตั้งราคาพรีเมียมเอากำไรเยอะๆ แต่ต้องเสียส่วนแบ่งไปให้กับประเทศอื่นๆ ที่ขาย iPhone แบบไม่ unlock &#8230; ถึงแม้จะมี truewifi แต่อย่างนี้ผมว่าคงช่วยไม่ได้จริงๆ ครับ</p>
<p>ปล. ผมเป็นคนหนึ่งที่เชียร์คนไทยให้ซื้อเครื่องจากทรูครับ เพื่อให้ประเทศของเราเป็นอีกหนึ่งเป้าหมายของ Apple ในการพัฒนาสิ่งต่างๆ ให้ตามทันประเทศอื่นๆ เสียที แต่ถ้าทรูออกราคามาเหมือนกับ &#8220;ขโมย&#8221; กัน &#8230;​ผมก็คงเชียร์ให้ไปซื้อที่อื่นกันครับ</p>

<p><a href="http://feedads.g.doubleclick.net/~a/TKCc652kAklV3NsSCzPWmHUBTwo/0/da"><img src="http://feedads.g.doubleclick.net/~a/TKCc652kAklV3NsSCzPWmHUBTwo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/TKCc652kAklV3NsSCzPWmHUBTwo/1/da"><img src="http://feedads.g.doubleclick.net/~a/TKCc652kAklV3NsSCzPWmHUBTwo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/SikachuBlog/~4/PKCBVTaIIp4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sikachu.com/2009/08/true-iphone-3gs-%e0%b9%81%e0%b8%a5%e0%b8%b0%e0%b8%a3%e0%b8%b2%e0%b8%84%e0%b8%b2%e0%b8%97%e0%b8%b5%e0%b9%88%e0%b8%95%e0%b9%88%e0%b8%b2%e0%b8%87%e0%b9%84%e0%b8%9b/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Thin Rolling Restart Patch</title>
		<link>http://sikachu.com/2009/08/thin-rolling-restart-patch/</link>
		<comments>http://sikachu.com/2009/08/thin-rolling-restart-patch/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 13:04:13 +0000</pubDate>
		<dc:creator>Sikachu!</dc:creator>
				<category><![CDATA[My Project]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[thin]]></category>

		<guid isPermaLink="false">http://sikachu.com/?p=335</guid>
		<description><![CDATA[I wrote a patch for Thin web server to do a rolling restart (i.e. restart the server one at a time) when I was working for my final thesis, Localmapia. I put my source on Github, and already inform the developer of Thin. However, seems like he forgot about it.
Anyway, I just updated my code [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote a patch for <a href="http://code.macournoyer.com/thin/">Thin</a> web server to do a rolling restart (i.e. restart the server one at a time) when I was working for my final thesis, Localmapia. I put my source on <a href="http://github.com">Github</a>, and already inform the developer of <a href="http://code.macournoyer.com/thin/">Thin</a>. However, seems like he forgot about it.</p>
<p>Anyway, I just updated my code to reflect the edge version of Thin. You can checkout my code from:</p>
<p><a href="http://github.com/sikachu/thin">http://github.com/sikachu/thin</a></p>
<p>Also, if you want to install my version of Thin, just do this command to install from source:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">git clone git:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>sikachu<span style="color: #000000; font-weight: bold;">/</span>thin.git
<span style="color: #7a0874; font-weight: bold;">cd</span> thin
rake <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>

<p>So, to use this feature, you just add <code>onebyone: true</code> into your thin cluster file, or use the flag <code>-O</code> or <code>--onebyone</code> when you&#8217;re issue restart command.</p>
<p>I still wishing this would be merged into the main branch. <img src='http://sikachu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>(If you don&#8217;t know about Thin, it&#8217;s a web server purely written in Ruby. It uses very small memory, very lightweight, yet very powerful. Usually people will use it with Nginx acting as reverse proxy. I wrote this patch because during normal restart Nginx would display 501 gateway error, which this patch solves the problem by having at least 1 old-version running at the time of restart.)</p>

<p><a href="http://feedads.g.doubleclick.net/~a/qlg-BVyAOQlaLx4jng36_5s3B-I/0/da"><img src="http://feedads.g.doubleclick.net/~a/qlg-BVyAOQlaLx4jng36_5s3B-I/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qlg-BVyAOQlaLx4jng36_5s3B-I/1/da"><img src="http://feedads.g.doubleclick.net/~a/qlg-BVyAOQlaLx4jng36_5s3B-I/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/SikachuBlog/~4/bo8hcinSkZM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sikachu.com/2009/08/thin-rolling-restart-patch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Object#try ใน Rails 2.3</title>
		<link>http://sikachu.com/2009/08/objecttry-%e0%b9%83%e0%b8%99-rails-2-3/</link>
		<comments>http://sikachu.com/2009/08/objecttry-%e0%b9%83%e0%b8%99-rails-2-3/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 12:16:52 +0000</pubDate>
		<dc:creator>Sikachu!</dc:creator>
				<category><![CDATA[My Project]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ruby 1.9]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://sikachu.com/?p=320</guid>
		<description><![CDATA[เคยเจอปัญหาบ้างไหมครับ กับการที่บางครั้ง object ที่เราเรียก method ไปเนี่ย มันกลายเป็น nil ขึ้นมา ทำให้เกิด exception ขึ้นมา

&#62;&#62; @user.username
NoMethodError: You have a nil object when you didn't expect it!
The error occurred while evaluating nil.username
	from (irb):1

ซึ่งตรงนี้ เพื่อที่จะหลบ exception ในบางครั้งทำให้ Developer ต้องทำการเช็คก่อนว่า object นั้นเป็น nil หรือไม่ เช่น

&#62;&#62; &#40;@user ? @user.usename : &#34;Guest&#34;&#41;
=&#62; &#34;Guest&#34;

ซึ่งตรงนี้ทำให้โค้ดนั้นดูุวุ่นวายมากขึ้น และทำให้โค้ดนั้นดูไม่ค่อยเหมือน Ruby สักเท่าไร (ซึ่งผมก็เห็นด้วยว่า &#60;cond&#62; ? &#60;if-true&#62; : &#60;if-false&#62; นั้น [...]]]></description>
			<content:encoded><![CDATA[<p>เคยเจอปัญหาบ้างไหมครับ กับการที่บางครั้ง object ที่เราเรียก method ไปเนี่ย มันกลายเป็น nil ขึ้นมา ทำให้เกิด exception ขึ้นมา</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">username</span>
<span style="color:#CC00FF; font-weight:bold;">NoMethodError</span>: You have a <span style="color:#0000FF; font-weight:bold;">nil</span> object <span style="color:#9966CC; font-weight:bold;">when</span> you didn<span style="color:#996600;">'t expect it!
The error occurred while evaluating nil.username
	from (irb):1</span></pre></div></div>

<p>ซึ่งตรงนี้ เพื่อที่จะหลบ exception ในบางครั้งทำให้ Developer ต้องทำการเช็คก่อนว่า object นั้นเป็น nil หรือไม่ เช่น</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#006600; font-weight:bold;">&#40;</span>@user ? <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">usename</span> : <span style="color:#996600;">&quot;Guest&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Guest&quot;</span></pre></div></div>

<p>ซึ่งตรงนี้ทำให้โค้ดนั้นดูุวุ่นวายมากขึ้น และทำให้โค้ดนั้นดูไม่ค่อยเหมือน Ruby สักเท่าไร (ซึ่งผมก็เห็นด้วยว่า &lt;cond&gt; ? &lt;if-true&gt; : &lt;if-false&gt; นั้น มันดูแปลกๆ) จึงทำให้มีคนคิด <a href="http://ozmm.org/posts/try.html">Object#try</a> ออกมา แล้วทางทีมผู้พัฒนา Ruby on Rails ถึงเอาเข้าไปเพิ่มใน Rails 2.3 ระหว่างที่ Ruby กำลังรอเพิ่ม method นี้เข้าไปอยู่</p>
<p>เพราะฉะนั้นหลังจากการเพิ่ม method นี้ ทำให้เราสามารถที่จะทำอย่างนี้ได้</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">try</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:username</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">try</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:username</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#996600;">&quot;Guest&quot;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Guest&quot;</span></pre></div></div>

<p>แล้วยังทำให้ เราสามารถทำ method chaining ได้ด้วย (เพราะทุกอย่างมี #try)</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">try</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:username</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">try</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:capitalize</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#008000; font-style:italic;"># Fetch @user from record</span>
?<span style="color:#006600; font-weight:bold;">&gt;</span> <span style="color:#0066ff; font-weight:bold;">@user</span> = User.<span style="color:#9900CC;">first</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#008000; font-style:italic;">#&lt;User id: 1, email: &quot;test@test.com&quot;, usename: &quot;test&quot;, persistence_token: &quot;95908c3801d55ce389af90f0909192cbda4e37c632afd6b50c2...&quot;, created_at: &quot;2009-06-30 05:44:43&quot;, updated_at: &quot;2009-07-16 08:56:46&quot;, crypted_password: &quot;f37c87cb2d731c0c0710ae9c2b9721d352f6336e38e988bb907...&quot;, password_salt: &quot;UIENYMKzDjJYgy2E89Qn&quot;, status: nil&gt;</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">try</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:username</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">try</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:capitalize</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Test&quot;</span></pre></div></div>

<p>ลองปรับไปใช้กับ Application กันนะครับ คิดว่าส่วนนี้น่าจะช่วยให้ debug กันง่ายขึ้นเยอะเลย <img src='http://sikachu.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/_wLv3TnXQUNdKhL4NjlaemX6XqQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/_wLv3TnXQUNdKhL4NjlaemX6XqQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_wLv3TnXQUNdKhL4NjlaemX6XqQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/_wLv3TnXQUNdKhL4NjlaemX6XqQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/SikachuBlog/~4/omLZBdPpvKA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sikachu.com/2009/08/objecttry-%e0%b9%83%e0%b8%99-rails-2-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flickr Submit Button CSS Retouch</title>
		<link>http://sikachu.com/2009/07/flickr-submit-button-css-retouch/</link>
		<comments>http://sikachu.com/2009/07/flickr-submit-button-css-retouch/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 13:52:00 +0000</pubDate>
		<dc:creator>Sikachu!</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://sikachu.com/?p=318</guid>
		<description><![CDATA[วันนี้ได้เข้า Flickr หลังจากไม่ได้เข้าไปหลายวัน
ไปสังเกตเห็นบางอย่าง ตรงแถวๆ comment box

สังเกตเห็นอะไรไหมครับ?
นี่คือการ Retouch ปุ่ม Submit ในส่วนของการเพิ่ม comment ครับ .. ซึ่งผมว่าเป็นจุดที่ทำให้เว็บดูสวยขึ้นมาอีกหน่อยเลยทีเดียว เพราะว่าถ้าเทียบกันกับอันเก่า ..

ต้องบอกกับทีมงาน Flickr ว่า .. น่าจะทำใหม่ได้ตั้งนานแล้ววว  
]]></description>
			<content:encoded><![CDATA[<p>วันนี้ได้เข้า Flickr หลังจากไม่ได้เข้าไปหลายวัน<br />
ไปสังเกตเห็นบางอย่าง ตรงแถวๆ comment box</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/07/Picture-3-1.png" alt="Picture 3-1.png" border="0" width="427" height="215" /></p>
<p>สังเกตเห็นอะไรไหมครับ?</p>
<p>นี่คือการ Retouch ปุ่ม Submit ในส่วนของการเพิ่ม comment ครับ .. ซึ่งผมว่าเป็นจุดที่ทำให้เว็บดูสวยขึ้นมาอีกหน่อยเลยทีเดียว เพราะว่าถ้าเทียบกันกับอันเก่า ..</p>
<p><img src="http://sikachu.com/wp-content/uploads/2009/07/breadkrumbs-add-1.png" alt="breadkrumbs-add-1.png" border="0" width="332" height="244" /></p>
<p>ต้องบอกกับทีมงาน Flickr ว่า .. น่าจะทำใหม่ได้ตั้งนานแล้ววว <img src='http://sikachu.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/Nr3gMpD3ZuR6dhykSGkQgf9pmOs/0/da"><img src="http://feedads.g.doubleclick.net/~a/Nr3gMpD3ZuR6dhykSGkQgf9pmOs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Nr3gMpD3ZuR6dhykSGkQgf9pmOs/1/da"><img src="http://feedads.g.doubleclick.net/~a/Nr3gMpD3ZuR6dhykSGkQgf9pmOs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/SikachuBlog/~4/IrgMIdIa5vE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://sikachu.com/2009/07/flickr-submit-button-css-retouch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
