<?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>oxygenyoyo</title>
	<atom:link href="http://www.oxygenyoyo.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.oxygenyoyo.com</link>
	<description>Everything is knowledge</description>
	<lastBuildDate>Fri, 27 Jan 2012 18:14:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>cron drupal คือ</title>
		<link>http://www.oxygenyoyo.com/2012/01/28/cron-drupal-%e0%b8%84%e0%b8%b7%e0%b8%ad/</link>
		<comments>http://www.oxygenyoyo.com/2012/01/28/cron-drupal-%e0%b8%84%e0%b8%b7%e0%b8%ad/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 18:14:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Set up]]></category>

		<guid isPermaLink="false">http://www.oxygenyoyo.com/?p=524</guid>
		<description><![CDATA[การ config cron โครตสำคัญเป็นส่วนที่คุณต้องทำในการติดตั้ง drupal เพราะมันทำหน้าที่ในการช่วยเหลือต่างๆไม่ว่าจะเป็น ค้นหาลำดับ Module ในเนื้อหาของเว็บไซร์ของคุณ จัดการเกี่ยวกับพวก Module ที่ดึง feed มีการไปบอกเว็บไซร์อื่นๆ ว่ามีการ update ของ Module หรือไม่ แม้แต่เรื่องการจัดการ Module ที่ทำหน้าที่ซ้ำซากๆ ก็ยังทำให้ด้วย เช่น สมมติว่าทุกๆบ่ายสามต้องทำการทวีตบทความนี่ๆ นะ ทำการจัดการ Logs ต่างๆ ซึ่งทุกสิ่งทุกอย่างที่กล่าวมาข้างต้นจะขึ้นอยู่กับการ config cron ของเราครับ แล้วอะไรคือ cron job หลายๆ Module ของ drupal มีงานที่ซับซ้อนกันหรือทำต่อๆกัน เช่น สมมติง่ายๆคือคุณทวีตข่าวนี้เสร็จแล้วจะให้มันทำการ แชร์อีกข่าวต่อ  แต่ข่าวนู้นต้องทวีตเวลาบ่าย 2 อีกอันต้องทำการส่งข้อความไปที่นู้นเวลาเท่านี้ ตัว cron ก็เหมือนตัวสัญญาณบอกว่าโอเคจัดการอันนี้เสร็จแล้วนะ ไปทำอันอื่นต่อ มันจะทำการบอก drupal ให้รู้ว่าอ่่ะต่องานต่อไปทำอะไร เพื่อให้ตัว [...]]]></description>
			<content:encoded><![CDATA[<p>การ config cron โครตสำคัญเป็นส่วนที่คุณต้องทำในการติดตั้ง drupal เพราะมันทำหน้าที่ในการช่วยเหลือต่างๆไม่ว่าจะเป็น</p>
<ul>
<li>ค้นหาลำดับ Module ในเนื้อหาของเว็บไซร์ของคุณ</li>
<li>จัดการเกี่ยวกับพวก Module ที่ดึง feed</li>
<li>มีการไปบอกเว็บไซร์อื่นๆ ว่ามีการ update ของ Module หรือไม่</li>
<li>แม้แต่เรื่องการจัดการ Module ที่ทำหน้าที่ซ้ำซากๆ ก็ยังทำให้ด้วย เช่น สมมติว่าทุกๆบ่ายสามต้องทำการทวีตบทความนี่ๆ นะ</li>
<li>ทำการจัดการ Logs ต่างๆ</li>
</ul>
<p>ซึ่งทุกสิ่งทุกอย่างที่กล่าวมาข้างต้นจะขึ้นอยู่กับการ config cron ของเราครับ</p>
<h2><strong>แล้วอะไรคือ cron job</strong></h2>
<p>หลายๆ Module ของ drupal มีงานที่ซับซ้อนกันหรือทำต่อๆกัน เช่น สมมติง่ายๆคือคุณทวีตข่าวนี้เสร็จแล้วจะให้มันทำการ แชร์อีกข่าวต่อ  แต่ข่าวนู้นต้องทวีตเวลาบ่าย 2 อีกอันต้องทำการส่งข้อความไปที่นู้นเวลาเท่านี้ ตัว cron ก็เหมือนตัวสัญญาณบอกว่าโอเคจัดการอันนี้เสร็จแล้วนะ ไปทำอันอื่นต่อ มันจะทำการบอก drupal ให้รู้ว่าอ่่ะต่องานต่อไปทำอะไร เพื่อให้ตัว drupal ดำเนินงานนั้นๆในช่วงเวลาที่เหมาะสม</p>
<p>โดยปกติแล้วตัว &#8216;cron job&#8217; เองนั้นเป็นเหมือนคนค่อยจัดการตารางเวลาและมักจะรันในฝั่งของ hosting server แต่เราก็สามารถ remote จากเครื่องบ้านเราไป config มันได้</p>
<p>สำหรับคนที่ใช้ drupal ทำเว็บไซร์นั้น ความจริงที่เกิดขึ้นคือเราจะไม่สามารถเข้าไปหน้าเพจ cron นั้นได้โดยตัวอย่างถ้าสมมติว่าผมมีไฟล์ cron.php อยู่ใน www.example.com/cron.php ซึ่งตัว cron จะได้จัดการด้วย module อีกที อ้าวแล้วมันดียังไง คุณที่อ่านนั้นไม่เก่งด้าน programmer ก็อาจจะไม่ได้มาเซ็ตเองให้เหนื่อยเพราะไม่รู้ภาษา ทาง drupal นั้นก็มี module หน้าตาสวยๆจัดการง่ายๆให้คุณแค่คลิกๆจบไงครับและป้องกันคนอื่นเข้ามาแก้ไขไฟล์ตัว cron ของเราได้อีกด้วย</p>
<h2>จัดการ cron ใน drupal โดยไม่ต้องใช้ &#8216;cron job&#8217;</h2>
<p>โดยใน drupal 7 core นั้นได้ใส่ตัว module ชื่อ &#8216;Poor man&#8217;s cron&#8217; ไว้สำหรับให้คนจัดการเรื่อง cron แค่คลิกๆ โดยคุณไม่ต้องลำบาก setup cron job อย่างที่ผมกล่าวในข้างบน อีกแล้ว โดยคุณสามารถ config cron ให้ทำงานต่างๆหรือรัน script อะไรได้ถี่หรือไม่ถี่ บ่อยหรือไม่บ่อยแค่ไหนก็ได้โดย cron จะรันที่ admin/config/system/cron ถ้าเป็นเมนูตอน login ก็ ( Adminstration &gt; Configuration &gt; System &gt; Cron )</p>
<div id="tweetbutton524" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FzPtYMB&amp;text=RT%20%40oxygenyoyo%20cron%20drupal%20%E0%B8%84%E0%B8%B7%E0%B8%AD%20-%20oxygenyoyo&amp;related=oxygenyoyo:%E0%B8%AA%E0%B8%B2%E0%B8%A3%E0%B8%B0%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%80%E0%B8%A7%E0%B9%87%E0%B8%9A%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1+PHP%2C+jQuery+%2C+CSS+%2C+%E0%B8%AF%E0%B8%A5%E0%B8%AF&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fwww.oxygenyoyo.com%2F2012%2F01%2F28%2Fcron-drupal-%25e0%25b8%2584%25e0%25b8%25b7%25e0%25b8%25ad%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://www.oxygenyoyo.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.oxygenyoyo.com/2012/01/28/cron-drupal-%e0%b8%84%e0%b8%b7%e0%b8%ad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recommend Book I</title>
		<link>http://www.oxygenyoyo.com/2012/01/21/recommend-book-i/</link>
		<comments>http://www.oxygenyoyo.com/2012/01/21/recommend-book-i/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 13:00:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Recommend Book]]></category>

		<guid isPermaLink="false">http://www.oxygenyoyo.com/?p=505</guid>
		<description><![CDATA[ทักทายกันหน่อย &#8230; บทความนี้เป็นบทความที่ว่า อยู่ดีๆผมก็อยากรู้ว่าคนรอบตัวผมนั้นเขาอ่านหนังสืออะไรกันบ้างในเดือนๆหนึ่ง อยากรู้ว่าเขามองโลกเปลี่ยนไปไหม แล้วเขาจะแนะนำคนอื่นต่อว่าอะไรกับหนังสือที่เขาอ่านจบหรือกำลังอ่านอยู่ แต่ในเมื่อผมคิดจะถามคนอื่นแล้วผมก็ควรจะเล่าของผมให้คนอื่นฟังก่อน เผื่อว่าคนที่มาอ่านบทความนี้จะได้หันมาสนใจหนังสือที่ผมหยิบจับมาอ่านบ้าง สำหรับช่วงนี้ผมได้อ่านไป 2-3 เล่มนั้นเป็นหนังสือที่ @ripmilla แนะนำมาเล่มแรกแล้วดันมีเล่มสองจากพี่สาวอีกด้วยจึงได้อ่านต่อเนื่องเลยนั่นก็คือหนังสือเรื่องเกี่ยวกับการลุงทนที่ขายดีเป็นเทน้ำเทท่าในช่วง 10 กว่าปีก่อน !! แต่ความรู้และแนวคิดยังใช้ได้อยู่สามารถปลุกไฟในตัวคุณให้ลุกขึ้นมาจัดการ &#8220;การเงิน&#8221; ของคุณโดยเนื้อหาในหนังสือเล่มแรกนั้นที่ว่าเด็ดๆคือ ผู้เขียนมีพ่อ 2 คนคนหนึ่งใช้ชีวิตแนวทางที่หลายๆคนถูกปลูกฝังมาตั้งแต่เด็ก คือ &#8220;ไปโรงเรียน เรียนสูงๆ มีการงานที่ดี มีงานมั่นคง&#8221; กับพ่ออีกคนที่เป็นเศรษฐีรวยหลายล้านบาทในเกาะฮาวาย มีคำสั่งที่สวนทางกับพ่ออีกคนอย่างสิ้นเชิง รับรองเลยว่าถ้าคุณอ่านหนังสือเล่มนี้คุณจะอยากมีสกิล &#8220;การจัดการเงิน&#8221; , &#8220;การจัดการภาษี&#8221; , &#8220;อยากรู้เรื่องกฎหมาย&#8221; มากขึ้นอย่างแน่นอนครับและชื่อของหนังสือเล่มนี้ก็คือ รับรองเลยว่าหาซื้อมาเลยคุ้มค่ามาก เพราะอย่างน้อยคุณจะอยากออกจากโลกแห่งลูกจ้างแน่นอน มุมมองของคุณจะเริ่มมองไกลขึ้น ไปเล่มต่อไปกันเลย หลังจากอ่านเล่มด้านบนแล้วแนะนำให้อ่านเล่ม 2 ต่อเลยเพราะว่าไฟในการแสวงหาทางหลุดพ้นจากการถูกจองจำในคราบลูกจ้างของคุณกำลังจะหมดไป โดยเล่มสองจะบอกมุมมองของคนด้านอื่นๆและสอนให้คุณรู้ว่าคนที่ทำงานแบบอื่นนั้นเขาคิดอย่างไร มีการมองผลประโยชน์อย่างไร และแนวคิดที่จะบรรลุเป้าหมายถึงจุดนั้นได้อย่างไรกับ Rich dad,Poor dad เล่ม 2 ถ้าคุณอ่านสองเล่มนี้จบแล้วคุณจะอยากเรียนรู้กับ &#8220;ภาษี&#8221; ก็เป็นได้ซึ่งผมจะบอกเลยว่าผมก็เป็นอย่างนั้นและเริ่มอ่านจากหนังสือเล่มต่อไปให้เราสามารถรู้ว่าเรื่อง ภาษีนั้นไม่ใช่เรื่องยากอีกต่อไป และหนังสือเล่มนี้ยังใช้การเน้นย้ำซ้ำคำที่เราต้องคิดบ่อยๆทำให้เราจำได้และใช้ภาพตัวการ์ตูนอีกด้วย [...]]]></description>
			<content:encoded><![CDATA[<h2>ทักทายกันหน่อย &#8230;</h2>
<p>บทความนี้เป็นบทความที่ว่า อยู่ดีๆผมก็อยากรู้ว่าคนรอบตัวผมนั้นเขาอ่านหนังสืออะไรกันบ้างในเดือนๆหนึ่ง อยากรู้ว่าเขามองโลกเปลี่ยนไปไหม แล้วเขาจะแนะนำคนอื่นต่อว่าอะไรกับหนังสือที่เขาอ่านจบหรือกำลังอ่านอยู่ แต่ในเมื่อผมคิดจะถามคนอื่นแล้วผมก็ควรจะเล่าของผมให้คนอื่นฟังก่อน เผื่อว่าคนที่มาอ่านบทความนี้จะได้หันมาสนใจหนังสือที่ผมหยิบจับมาอ่านบ้าง <span id="more-505"></span>สำหรับช่วงนี้ผมได้อ่านไป 2-3 เล่มนั้นเป็นหนังสือที่ @ripmilla แนะนำมาเล่มแรกแล้วดันมีเล่มสองจากพี่สาวอีกด้วยจึงได้อ่านต่อเนื่องเลยนั่นก็คือหนังสือเรื่องเกี่ยวกับการลุงทนที่ขายดีเป็นเทน้ำเทท่าในช่วง 10 กว่าปีก่อน !! แต่ความรู้และแนวคิดยังใช้ได้อยู่สามารถปลุกไฟในตัวคุณให้ลุกขึ้นมาจัดการ &#8220;การเงิน&#8221; ของคุณโดยเนื้อหาในหนังสือเล่มแรกนั้นที่ว่าเด็ดๆคือ ผู้เขียนมีพ่อ 2 คนคนหนึ่งใช้ชีวิตแนวทางที่หลายๆคนถูกปลูกฝังมาตั้งแต่เด็ก คือ</p>
<p>&#8220;ไปโรงเรียน เรียนสูงๆ มีการงานที่ดี มีงานมั่นคง&#8221; กับพ่ออีกคนที่เป็นเศรษฐีรวยหลายล้านบาทในเกาะฮาวาย มีคำสั่งที่สวนทางกับพ่ออีกคนอย่างสิ้นเชิง รับรองเลยว่าถ้าคุณอ่านหนังสือเล่มนี้คุณจะอยากมีสกิล &#8220;การจัดการเงิน&#8221; , &#8220;การจัดการภาษี&#8221; , &#8220;อยากรู้เรื่องกฎหมาย&#8221; มากขึ้นอย่างแน่นอนครับและชื่อของหนังสือเล่มนี้ก็คือ</p>
<div id="attachment_511" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1078.jpg"><img class="size-full wp-image-511" title="rich dad,poor dad พ่อรวยสอนลูก" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1078.jpg" alt="rich dad,poor dad พ่อรวยสอนลูก" width="480" height="640" /></a><p class="wp-caption-text">rich dad,poor dad พ่อรวยสอนลูก</p></div>
<p>รับรองเลยว่าหาซื้อมาเลยคุ้มค่ามาก เพราะอย่างน้อยคุณจะอยากออกจากโลกแห่งลูกจ้างแน่นอน มุมมองของคุณจะเริ่มมองไกลขึ้น ไปเล่มต่อไปกันเลย หลังจากอ่านเล่มด้านบนแล้วแนะนำให้อ่านเล่ม 2 ต่อเลยเพราะว่าไฟในการแสวงหาทางหลุดพ้นจากการถูกจองจำในคราบลูกจ้างของคุณกำลังจะหมดไป โดยเล่มสองจะบอกมุมมองของคนด้านอื่นๆและสอนให้คุณรู้ว่าคนที่ทำงานแบบอื่นนั้นเขาคิดอย่างไร มีการมองผลประโยชน์อย่างไร และแนวคิดที่จะบรรลุเป้าหมายถึงจุดนั้นได้อย่างไรกับ Rich dad,Poor dad เล่ม 2</p>
<div id="attachment_512" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1077.jpg"><img class="size-full wp-image-512" title="rich dad,poor dad 2 cashflow เงินสี่ด้าน" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1077.jpg" alt="rich dad,poor dad 2 cashflow เงินสี่ด้าน" width="480" height="640" /></a><p class="wp-caption-text">rich dad,poor dad 2 cashflow เงินสี่ด้าน</p></div>
<p>ถ้าคุณอ่านสองเล่มนี้จบแล้วคุณจะอยากเรียนรู้กับ &#8220;ภาษี&#8221; ก็เป็นได้ซึ่งผมจะบอกเลยว่าผมก็เป็นอย่างนั้นและเริ่มอ่านจากหนังสือเล่มต่อไปให้เราสามารถรู้ว่าเรื่อง ภาษีนั้นไม่ใช่เรื่องยากอีกต่อไป และหนังสือเล่มนี้ยังใช้การเน้นย้ำซ้ำคำที่เราต้องคิดบ่อยๆทำให้เราจำได้และใช้ภาพตัวการ์ตูนอีกด้วย ฉะนั้นแนะนำเลยสำหรับมนุษย์เงินเดือนที่ไม่เคยสนใจเลยว่าภาษีมาอย่างไรไปอย่างไรครับกับหนังสือเล่มนี้</p>
<div id="attachment_513" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1067.jpg"><img class="size-full wp-image-513" title="ลดภาษีทำได้ไม่ยาก" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1067.jpg" alt="ลดภาษีทำได้ไม่ยาก" width="480" height="640" /></a><p class="wp-caption-text">ลดภาษีทำได้ไม่ยาก</p></div>
<p>ซึ่งซี่รีย์ &#8220;ไม่ยาก&#8221; ยังมีหนังสือน่าอ่านอีกเยอะผมกำลังไล่อ่านอยู่แล้วจะมาแนะนำต่อในภาคหน้านะจ๊ะ &gt;3&lt; ส่วนเล่มต่อไปนั้น เรามาพักอ่านหนังสือแนวเบาสมองกันบ้างกับหนังสือทายใจที่ทำเอาผมต้องไปไล่หาซื้อมาเก็บไว้โดยพลัน หนังสือเล่มนี้ค่อนข้างสนุกเล่นพร้อมกับเพื่อนๆได้หลายคนและเราอาจจะรู้นิสัยเขาจากคำถามในหนังสือเล่มนี้ เท่าที่รู้ตอนนี้มี 4 เล่มแล้วใครอยากลองถามคำถามทายใจสุดแม่นสุดฮาแนะนำเล่มนี้เลยครับ</p>
<div id="attachment_514" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG887.jpg"><img class="size-full wp-image-514" title="kokology ถอดรหัสใจ" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG887.jpg" alt="kokology ถอดรหัสใจ" width="480" height="640" /></a><p class="wp-caption-text">kokology ถอดรหัสใจ</p></div>
<p>แล้วตามมาด้วยการ์ตูนที่โด่งดังใน exteen หลายๆคนรู้จักเธอ และหลายๆคนหลงรักในเอกลักษณ์ในตัวการ์ตูนของเธอทั้งความดำ ความขำ ความเศร้า รวมอยู่ในเล่มเดียวกันนั่งคือ</p>
<div id="attachment_515" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG951.jpg"><img class="size-full wp-image-515" title="การ์ตูนไอ้แป้น" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG951.jpg" alt="การ์ตูนไอ้แป้น" width="480" height="640" /></a><p class="wp-caption-text">การ์ตูนไอ้แป้น</p></div>
<p>แวะไปทักทายเธอได้ทั้งใน twitter @i_phan หรือในบล๊อกของเธอ <a title="การ์ตูนไอ้แป้น" href="darkygirl.exteen.com/" target="_blank">การ์ตูน i_phan</a> และเล่มสุดท้ายขอปิดท้ายด้วยการ์ตูนอีกแล้วกันเรื่องนี้สนุกมาก ถ้าผู้อ่านเป็นคนที่เล่มเกมส์ online มาหลายเกมส์แล้วละก็คงต้องชอบเพราะว่าเป็นการ์ตูนที่ได้รับอิทธิพลมาจาก lineage II ซะส่วนใหญ่ อาจจะมี Ragnarok ผสมบ้างและก็ต่อเติมด้วยจินตนาการของผู้เขียนจึงทำให้เกิดเป็นเรื่องนี้ขึ้นมา ชื่อหนังสือนั่นก็คือ !!!</p>
<div id="attachment_516" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1008.jpg"><img class="size-full wp-image-516" title="1/2 Prince " src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1008.jpg" alt="1/2 Prince " width="480" height="640" /></a><p class="wp-caption-text">1/2 Prince</p></div>
<p>เรื่องราวของพี่น้องฝาแฝดแบบชาย หญิงโดยคนที่เป็นผู้หญิงนั้นอยากเล่นเกมส์โดยไม่พึ่งพาตัวละครผู้หญิงเพราะ มักจะได้รับการช่วยเหลือจากผู้ชายจึงเลือกตัวละครเป็นเพศชายและไปตะลุยกับโลก online โดยชะตาทำให้ไปพบกับเรื่องราวสุดแสนประทับใจ และวุ่นวาย หากคุณเป็นคอเกมส์ online แนะนำให้อ่านเพราะว่าบ้างมุขคำเล่นเกมส์จะขำกว่าปกติแบบติด cri 1.2 เท่า ( ฮา )</p>
<h2>สรุป &#8230;</h2>
<p>จบไปแล้วครับสำหรับบทความแนะนำหนังสือมีเล่มไหนน่าสนใจไหมครับ ถ้ามีก็ควรรีบไปหาอ่านกันเลยนะครับ ถ้าคุณมีหนังสือดีๆน่าอ่านก็อย่าลืมแนะนำกันบ้าง ผมก็อยากรู้เหมือนกันว่าพวกคุณอ่านอะไร แล้วไว้โอกาสหน้าจะมาเล่าให้ฟังอีกนะครับว่าเล่มไหนน่าลองอีก เจอกันครับ ^_^</p>
<div id="tweetbutton505" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FAocF3g&amp;text=RT%20%40oxygenyoyo%20Recommend%20Book%20I%20-%20oxygenyoyo&amp;related=oxygenyoyo:%E0%B8%AA%E0%B8%B2%E0%B8%A3%E0%B8%B0%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%80%E0%B8%A7%E0%B9%87%E0%B8%9A%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1+PHP%2C+jQuery+%2C+CSS+%2C+%E0%B8%AF%E0%B8%A5%E0%B8%AF&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fwww.oxygenyoyo.com%2F2012%2F01%2F21%2Frecommend-book-i%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://www.oxygenyoyo.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.oxygenyoyo.com/2012/01/21/recommend-book-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Too Fast To Sleep (#2f2s)</title>
		<link>http://www.oxygenyoyo.com/2012/01/21/too-fast-to-sleep-2f2s/</link>
		<comments>http://www.oxygenyoyo.com/2012/01/21/too-fast-to-sleep-2f2s/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 03:00:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[2f2s]]></category>
		<category><![CDATA[too fast too sleep]]></category>

		<guid isPermaLink="false">http://www.oxygenyoyo.com/?p=483</guid>
		<description><![CDATA[ทักทายกันหน่อย &#8230; อยากทำงานต่อ &#8230; แต่ไม่มีร้านไหนเปิดจะไปร้านกาแฟ Mac แหม่งก็ไม่มีปลั๊กถึงจะเปิด 24 ชั่วโมงก็เถอะ ไม่มีไฟทั้งเครื่องและคนก็จบกัน แต่วันนี้เราเจอสถานที่ดีๆ เหมาะๆบรรยากาศดีมากสำหรับนักเรียน นักศึกษาที่กำลังอยากได้ที่อ่านหนังสือ ติว หรือพักผ่อน และคนทั่วไปที่หาที่ทำงานชิลๆ มีเน็ตฟรีให้ใช้ กาแฟหอมๆ และพนักงานเสริฟที่น่ารักโดนใจแล้วละก็ ต้องมาจัดกันที่ร้านนี้เลย Too Fast To Sleep (#2f2s) อย่างที่กล่าวข้างต้นแล้วนั้นว่าตอนนี้มีร้านกาแฟที่เหมาะสมมากๆสำหรับบรรดาเหล่าคนไม่นอน หรือนอนดึกแล้วต้องการสถานที่แหล่มๆ ที่มีทั้งเน็ต ปลั๊ก เก้าอี้และของกินที่สามารถจะอยู่ได้ทั้งคืนหรือยันเช้านั้นต้องมากันเลย โดยชื่อร้านนั้นก็แปลกันตรงๆว่า &#8220;ยังเร็วไปที่จะนอน&#8221; และบรรยากาศร้านนั้นก็มีให้หลายมุม สำหรับ life style ที่แตกต่างกัน ในรูปคือกลางร้านชั้น สอง ร้านนี้มี 2 ชั้นโดยชั้นล่างกำลังทำอยู่ครับ ชั้นบนจึงเป็นแหล่งให้เหล่าชาวประชามาแย่งพื้นที่ โดยแต่ละมุมก็จะมีโต๊ะเล็ก โต๊ะใหญ่มุมแบบนั่งคนเดียว นั่ง 2 คน หรือว่านั่งกันเป็นทีมเลย ถ้าหากอยากจะไปชิล out ด้านนอกเขาก็จัดให้นะครับ นี่ ! เป็นไงพร้อมสรรพจัดเต็มขนาดนี้โดยถ้าคุณมานั่งด้านนอก ทางร้านตอนนี้มียากันยุงแถมให้ฟรี [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_484" class="wp-caption aligncenter" style="width: 624px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1079.jpg"><img class=" wp-image-484 " title="Too Fast To Sleep" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1079-768x1024.jpg" alt="Too Fast To Sleep" width="614" height="819" /></a><p class="wp-caption-text">Too Fast To Sleep</p></div>
<h2>ทักทายกันหน่อย &#8230;</h2>
<p>อยากทำงานต่อ &#8230; แต่ไม่มีร้านไหนเปิดจะไปร้านกาแฟ Mac แหม่งก็ไม่มีปลั๊กถึงจะเปิด 24 ชั่วโมงก็เถอะ ไม่มีไฟทั้งเครื่องและคนก็จบกัน แต่วันนี้เราเจอสถานที่ดีๆ เหมาะๆบรรยากาศดีมากสำหรับนักเรียน นักศึกษาที่กำลังอยากได้ที่อ่านหนังสือ ติว หรือพักผ่อน และคนทั่วไปที่หาที่ทำงานชิลๆ มีเน็ตฟรีให้ใช้ กาแฟหอมๆ และพนักงานเสริฟที่น่ารักโดนใจแล้วละก็ ต้องมาจัดกันที่ร้านนี้เลย Too Fast To Sleep (#2f2s)</p>
<p><span id="more-483"></span></p>
<p>อย่างที่กล่าวข้างต้นแล้วนั้นว่าตอนนี้มีร้านกาแฟที่เหมาะสมมากๆสำหรับบรรดาเหล่าคนไม่นอน หรือนอนดึกแล้วต้องการสถานที่แหล่มๆ ที่มีทั้งเน็ต ปลั๊ก เก้าอี้และของกินที่สามารถจะอยู่ได้ทั้งคืนหรือยันเช้านั้นต้องมากันเลย โดยชื่อร้านนั้นก็แปลกันตรงๆว่า &#8220;ยังเร็วไปที่จะนอน&#8221; และบรรยากาศร้านนั้นก็มีให้หลายมุม สำหรับ life style ที่แตกต่างกัน</p>
<div id="attachment_495" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1084.jpg"><img class="size-full wp-image-495" title="ที่จับประตู" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1084.jpg" alt="ที่จับประตู" width="640" height="480" /></a><p class="wp-caption-text">ที่จับประตูเป็นหนังสือ ชอบมาก <img src='http://www.oxygenyoyo.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p></div>
<div id="attachment_486" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1095.jpg"><img class="size-full wp-image-486" title="too fast to sleep view 1" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1095.jpg" alt="too fast to sleep view 1" width="640" height="480" /></a><p class="wp-caption-text">too fast to sleep view 1</p></div>
<p>ในรูปคือกลางร้านชั้น สอง ร้านนี้มี 2 ชั้นโดยชั้นล่างกำลังทำอยู่ครับ ชั้นบนจึงเป็นแหล่งให้เหล่าชาวประชามาแย่งพื้นที่ โดยแต่ละมุมก็จะมีโต๊ะเล็ก โต๊ะใหญ่มุมแบบนั่งคนเดียว นั่ง 2 คน หรือว่านั่งกันเป็นทีมเลย ถ้าหากอยากจะไปชิล out ด้านนอกเขาก็จัดให้นะครับ <img src='http://www.oxygenyoyo.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<div id="attachment_487" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1096.jpg"><img class="size-full wp-image-487" title="too fast to sleep out side" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1096.jpg" alt="too fast to sleep out side" width="640" height="480" /></a><p class="wp-caption-text">too fast to sleep out side</p></div>
<p>นี่ ! เป็นไงพร้อมสรรพจัดเต็มขนาดนี้โดยถ้าคุณมานั่งด้านนอก ทางร้านตอนนี้มียากันยุงแถมให้ฟรี จุดกันยุงกันเต็มที่แต่ทางที่ดีแนะนำถ้านั่งนานเอา ยากันยุงพวกทาๆหรือเป็นหลอดฉีดจะเวิร์กมากๆครับ ซึ่งถ้าชาวแก๊งค์ของพวกคุณมานั้นคนเยอะ อาจจะเสียงดังก็แนะนำให้นั่งด้านนอกดีกว่า เพราะคนด้านในนั้น เขาต้องการความเงียบสงบ</p>
<div id="attachment_488" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1101.jpg"><img class="size-full wp-image-488" title="too fast to sleep out side view 2" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1101.jpg" alt="too fast to sleep out side view 2" width="640" height="480" /></a><p class="wp-caption-text">too fast to sleep out side view 2</p></div>
<p>ซึ่งมุมด้านนอกนั้นก็สามารถมองเข้ามายังในร้านได้อีกด้วย ! และมุมในร้านยังมีการตกแต่งที่เรียกได้ว่าน่ารักและเหมาะ สำหรับบรรยากาศการอ่านหนังสือเป็นอย่างมาก</p>
<div id="attachment_489" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1089.jpg"><img class="size-full wp-image-489" title="too fast to sleep inside view 1" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1089.jpg" alt="too fast to sleep inside view 1" width="640" height="480" /></a><p class="wp-caption-text">too fast to sleep inside view 1</p></div>
<div id="attachment_492" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1081.jpg"><img class="size-full wp-image-492" title="too fast to sleep board" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1081.jpg" alt="too fast to sleep board" width="640" height="480" /></a><p class="wp-caption-text">too fast to sleep board</p></div>
<div id="attachment_493" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1085.jpg"><img class="size-full wp-image-493" title="too fast to sleep logo" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1085.jpg" alt="too fast to sleep logo" width="640" height="480" /></a><p class="wp-caption-text">too fast to sleep logo</p></div>
<div id="attachment_494" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1090.jpg"><img class="size-full wp-image-494" title="too fast to sleep inside view 2" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1090.jpg" alt="too fast to sleep inside view 2" width="640" height="480" /></a><p class="wp-caption-text">too fast to sleep inside view 2</p></div>
<p>เป็นไงเหมาะสำหรับการอ่านเลยใช่ไหมครับ ฮ่าๆ อันนี้เขาจัดตกแต่งร้านเฉยๆน้า ไม่ได้เอามาจัดกันไม่งั้นอ่านไม่รู้เรื่องพอดี :p มาว่ากันถึงเรื่องอาหารการกินในร้านกันบ้างครับในร้านนั้นมีเมนูดังนี้</p>
<div id="attachment_490" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1091.jpg"><img class="size-full wp-image-490" title="too fast to sleep menu 1" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1091.jpg" alt="too fast to sleep menu 1" width="480" height="640" /></a><p class="wp-caption-text">too fast to sleep menu 1</p></div>
<div id="attachment_491" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1092.jpg"><img class="size-full wp-image-491" title="too fast to sleep menu 2" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1092.jpg" alt="too fast to sleep menu 2" width="480" height="640" /></a><p class="wp-caption-text">too fast to sleep menu 2</p></div>
<p>ไม่แพงเลยจริงๆถ้าเทียบกับสิ่งที่ได้ขอเน้น ย้ำนั่นคือ internet ปลั๊ก ของกิน บรรยากาศ สถานที่ โดยทาง Too Fast To Sleep นั้นยังทำไม่เสร็จดีแต่ก็ได้ใจไปเต็มๆ เพราะสถานที่การมานั้นก็แสนจะง่าย ตรงข้ามกับจามจุรีสแควร์ ถ้ามาทางรถไฟ้ฟ้าใต้ดินก็สถานที่ สามย่าน ออกประตู 1</p>
<p><a class="brown" href="http://maps.google.com/maps/myplaces?vpsrc=6&amp;ctz=-420&amp;doflg=ptk&amp;ie=UTF8&amp;ll=13.733273,100.530685&amp;spn=0.002152,0.003449&amp;t=m&amp;z=18&amp;iwloc=A&amp;source=embed" target="_blank"><br />
<img class="map" src="http://maps.googleapis.com/maps/api/staticmap?center=13.733273,100.530685&amp;zoom=14&amp;size=640x350&amp;maptype=roadmap&amp;markers=label:Too Fast To Sleep|13.733273,100.530685&amp;sensor=false" alt="" /><br />
ดูรูปใหญ่<br />
</a></p>
<div id="attachment_508" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1104.jpg"><img class="size-full wp-image-508" title="Too Fast To Sleep Contact" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1104.jpg" alt="Too Fast To Sleep Contact" width="640" height="480" /></a><p class="wp-caption-text">Too Fast To Sleep Contact</p></div>
<h2>สรุป &#8230;</h2>
<p>- สถานที่แหล่มมาก เหมาะสำหรับการประชุมงานแบบชิลๆ หรืออ่านหนังสือ นัดคุยงานกันได้ทั้งข้างนอกและใน<br />
- ถ้ามาแล้วจะนั่งด้านนอกแนะนำให้ติดอย่ากันยุงมาด้วยหรือมาซื้อได้ที่  7-11 ก็ได้มีด้านหน้าทางเข้า<br />
- มีข้าวให้กินอยู่ด้านล่างหรือจะกินข้าวกล่อง 7-11 ก็ได้ มีกาแฟให้พร้อมสาวคนเสิร์ฟที่น่ารัก<br />
- อย่ามาช่วงเด็กจุฬาหรือสถาบันอื่นใกล้สอบเพราะจะทำให้ไม่มีที่นั่งต่อให้ตีหนึ่งก็ยังหาที่นั่งยาก<br />
- แนะนำให้โทรมาก่อนก็ได้ถ้าคนมาเยอะ วันก่อนมากัน 20+ คนพี่เจ้าของร้านบอกว่าวันหลังถ้ามาเยอะให้โทรมาก่อน<br />
- ตกแต่งร้านได้เหมาะสมกับร้านมากกกกกกกกก ! มีความเป็นเอกลักษณ์สูงทั้งแก้ว หนังสือ จาน ชาม ฯลฯ<br />
- เดินทางสะดวกโครตๆ</p>
<h2>แถม &#8230;</h2>
<p>ขอบคุณผู้ร่วมมาร้านครั้งนี้แบบตั้งใจและไม่ตั้งใจของทั้งสองคน @rzrunya @woraperth ที่มาร่วมอดหลับอดนอนครั้งนี้ หากผู้อ่านยังไม่จุใจกับการรีวิวครั้งนี้แนะนำต่อเลยครับกับบล๊อก</p>
<ul>
<li>Jiraz.com :  <a title="Permanent Link: Too Fast To Sleep (สามย่าน) ที่ชิลใหม่ใจกลางเมือง เพื่อคนนอนดึก" href="http://jiraz.com/review/too-fast-to-sleep" rel="bookmark">Too Fast To Sleep (สามย่าน) ที่ชิลใหม่ใจกลางเมือง เพื่อคนนอนดึก</a></li>
<li>IdolSociety.com : <a href="http://www.idolsociety.com/too-fast-to-sleep/" target="_blank">Too Fast To Sleep</a></li>
<li>Where.in.th : <a href="http://www.where.in.th/mari/2622" target="_blank">Too Fast To Sleep</a></li>
</ul>
<div id="attachment_497" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1088.jpg"><img class="size-full wp-image-497" title="@rzrunya @woraperth" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1088.jpg" alt="@rzrunya @woraperth" width="640" height="480" /></a><p class="wp-caption-text">@rzrunya @woraperth</p></div>
<div id="attachment_498" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1102.jpg"><img class="size-full wp-image-498" title="@rzrunya ชุดเมดสาว" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1102.jpg" alt="@rzrunya ชุดเมดสาว" width="640" height="480" /></a><p class="wp-caption-text">@rzrunya ชุดเมดสาว</p></div>
<div id="attachment_499" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1103.jpg"><img class="size-full wp-image-499" title="@woraperth" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/IMG1103.jpg" alt="@woraperth" width="640" height="480" /></a><p class="wp-caption-text">@woraperth</p></div>
<p>&nbsp;</p>
<div id="tweetbutton483" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FA0P1Vp&amp;text=RT%20%40oxygenyoyo%20Too%20Fast%20To%20Sleep%20%28%232f2s%29%20-%20oxygenyoyo&amp;related=oxygenyoyo:%E0%B8%AA%E0%B8%B2%E0%B8%A3%E0%B8%B0%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%80%E0%B8%A7%E0%B9%87%E0%B8%9A%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1+PHP%2C+jQuery+%2C+CSS+%2C+%E0%B8%AF%E0%B8%A5%E0%B8%AF&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fwww.oxygenyoyo.com%2F2012%2F01%2F21%2Ftoo-fast-to-sleep-2f2s%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://www.oxygenyoyo.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.oxygenyoyo.com/2012/01/21/too-fast-to-sleep-2f2s/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ลง Mongo DB ยังไง ?</title>
		<link>http://www.oxygenyoyo.com/2012/01/09/how-to-install-mongo-db/</link>
		<comments>http://www.oxygenyoyo.com/2012/01/09/how-to-install-mongo-db/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 18:30:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Mongo DB]]></category>
		<category><![CDATA[install mongo db]]></category>
		<category><![CDATA[mongo ลงไง]]></category>

		<guid isPermaLink="false">http://www.oxygenyoyo.com/?p=462</guid>
		<description><![CDATA[ทักทายนิดหน่อย &#8230; หลายๆคนเริ่มหันมามองทางแก้ไขปัญหาเกี่ยวกับการการจัดการฐานข้อมูล เพราะว่าการที่ฐานข้อมูลส่วนใหญ่จะใช้ Mysql กันนั้นเริ่มมีเพดาน ของความสามารถของมัน จึงทำให้การส่งข้อมูลของเว็บที่มีคนเข้าเยอะๆมีปัญหา โหลดช้า โหลดแล้วค้าง ซึ่งวันนี้ผมจะมาพูดถึงเจ้าตัว Mongo Database หรือเรียกว่า mongodb ซึ่งเป็นฐานข้อมูลแบบรองรับจัดเต็มกับข้อมูลที่เริ่มขยายตัวแบบมากมายไม่สิ้นสุด ข้อดีมันก็เยอะ ข้อเสียมันก็พอๆกันขึ้นอยู่กับคุณ ว่าตัวจัดการนั้นเหมาะกับงานของคุณหรือไม่ ถ้าใครอยากรู้ข้อดีของเสียหาเอาในเน็ตเลยจ้า แต่ตอนนี้โครงการ Pantip3G ได้นำ Mongo DB มาใช้แล้วจึงอยากแชร์ประสบการณ์ซักเล็กน้อยแก่ผู้ที่สนใจอยู่ สิ่งที่ควรจะรู้ก่อนจะเริ่มลง Mongo DB สิ่งที่เราต้องรู้ก่อนจะเริ่มลงนั้นคือ ในตัวอย่างของผมนั้นจะมีสเปกของ software server นั่นคือ wamp version 2.2 ซึ่งตอนนี้ทางเว็บ wamp นั้นมี 2.2 xxx ซึ่งใกล้เคียงกันอยู่แล้วใช้ได้โลด ซึ่งในนั้นจะมี apache 2.2.21 สำหรับของผมและ php version 5.3.8 ซึ่งมันสำคัญสำหรับการลง mongo db คุณจะต้องรู้รุ่นหรือ version [...]]]></description>
			<content:encoded><![CDATA[<h2><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/logo-mongodb.png"><img class="aligncenter size-full wp-image-464" title="logo-mongodb" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/logo-mongodb.png" alt="logo mongdb" width="217" height="90" /></a></h2>
<h2>ทักทายนิดหน่อย &#8230;</h2>
<p>หลายๆคนเริ่มหันมามองทางแก้ไขปัญหาเกี่ยวกับการการจัดการฐานข้อมูล เพราะว่าการที่ฐานข้อมูลส่วนใหญ่จะใช้ Mysql กันนั้นเริ่มมีเพดาน ของความสามารถของมัน จึงทำให้การส่งข้อมูลของเว็บที่มีคนเข้าเยอะๆมีปัญหา โหลดช้า โหลดแล้วค้าง ซึ่งวันนี้ผมจะมาพูดถึงเจ้าตัว Mongo Database หรือเรียกว่า mongodb ซึ่งเป็นฐานข้อมูลแบบรองรับจัดเต็มกับข้อมูลที่เริ่มขยายตัวแบบมากมายไม่สิ้นสุด ข้อดีมันก็เยอะ ข้อเสียมันก็พอๆกันขึ้นอยู่กับคุณ ว่าตัวจัดการนั้นเหมาะกับงานของคุณหรือไม่ ถ้าใครอยากรู้ข้อดีของเสียหาเอาในเน็ตเลยจ้า แต่ตอนนี้โครงการ <a title="Pantip3g" href="http://blog.pantip.com/?p=15" target="_blank">Pantip3G</a> ได้นำ Mongo DB มาใช้แล้วจึงอยากแชร์ประสบการณ์ซักเล็กน้อยแก่ผู้ที่สนใจอยู่</p>
<p><span id="more-462"></span></p>
<h2>สิ่งที่ควรจะรู้ก่อนจะเริ่มลง Mongo DB</h2>
<p>สิ่งที่เราต้องรู้ก่อนจะเริ่มลงนั้นคือ ในตัวอย่างของผมนั้นจะมีสเปกของ software server นั่นคือ wamp version 2.2 ซึ่งตอนนี้ทางเว็บ wamp นั้นมี 2.2 xxx ซึ่งใกล้เคียงกันอยู่แล้วใช้ได้โลด ซึ่งในนั้นจะมี apache 2.2.21 สำหรับของผมและ php version 5.3.8 ซึ่งมันสำคัญสำหรับการลง mongo db คุณจะต้องรู้รุ่นหรือ version ของ php เพราะว่าไม่อย่างนั้นจะไม่สามารถ download ตัว driver หรือว่าถ้าจะอธิบายให้เข้าใจคือ คู่มือสำหรับ PHP ที่<strong>มันจะทำให้ PHP เข้าใจ command ต่างๆของ mongo db</strong> เหมือนเวลาที่คุณใช้คำสั่งพวก Query ใน mysql นั่นแหละครับ เอาล่ะในการลงจะมีสองขั้นตอนคือ</p>
<ol>
<li>การทำให้ PHP นั้นเข้าใจ command ต่างๆของ Mongo DB โดยเป็นการ install extension นั่นเอง</li>
<li>การเปิด server ของ mongo db ให้มันทำงานอารมณ์เหมือนเปิด database นั่นแหละครับไม่งั้นก็ connect ไม่ได้</li>
</ol>
<p>เอาล่ะเรามาเริ่มกันเลยครับ &#8230;</p>
<h2>การลง extension mongodb สำหรับ PHP</h2>
<p>ขั้นแรกเข้าไปหน้าเว็บ <a title="http://www.mongodb.org/" href="http://www.mongodb.org/" target="_blank">www.mongodb.org</a> ก่อนเลยครับแล้วเลือกหัวข้อเมนู Drivers ด้านขวามือดังรูปด้านล่าง</p>
<div id="attachment_465" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/driver.jpg"><img class="size-full wp-image-465" title="driver" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/driver-e1326041992466.jpg" alt="drivers" width="600" height="231" /></a><p class="wp-caption-text">drivers</p></div>
<p>จากนั้นก็เลือก PHP ดังภาพด้านล่างครับ โดยถ้าคุณถนัดภาษาอะไรก็จัดไป อันนั้นเลยครับแต่ผมใช้ PHP เน้อ &gt;_&lt;</p>
<div id="attachment_466" class="wp-caption aligncenter" style="width: 506px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/driver2.jpg"><img class="size-full wp-image-466" title="driver2" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/driver2.jpg" alt="driver PHP" width="496" height="332" /></a><p class="wp-caption-text">driver PHP</p></div>
<p>เสร็จแล้วจะไปอีกหน้าซึ่งจะแสดงวิธีการลงต่างๆโดยของเราในตัวอย่างจะลงของ windows</p>
<div id="attachment_467" class="wp-caption aligncenter" style="width: 576px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/driver3.jpg"><img class=" wp-image-467 " title="driver3" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/driver3.jpg" alt="mongodb window" width="566" height="171" /></a><p class="wp-caption-text">mongodb window</p></div>
<p>โดยเขาอธิบายว่าให้เราไป download ตัว driver ของ PHP ตามลิงค์ที่เขาบอกแต่ผมแนะนำให้ไป download <a title="Mongodb PHP extension" href="http://www.php.net/manual/en/mongo.installation.php#mongo.installation.windows" target="_blank">PHP extension</a> ที่นี่ดีกว่าเพราะว่ามันใหม่กว่าจ้า แล้วเขาก็อธิบายว่า VC6 คือสำหรับ server ที่เป็น apache ( VC9 สำหรับ IIS window ) thread safe คือการให้ PHP รันเสมือนเป็น apache module ซึ่งเป็นแบบที่แนะนำให้โหลด ส่วน non-thread safe ก็สำหรับพวก CGI ก็เลือกเลยอันที่เหมาะสมกับ server ของคุณ ซึ่งของผมนั้นจริงๆผมใช้ apache นะครับแต่ตอนลงไปแล้วนั้นมันก็มีข้อความให้ลงของ IIS ผมจึงต้องโหลดตัว VC9 ดังรูปด้านล่างครับ</p>
<div id="attachment_468" class="wp-caption aligncenter" style="width: 523px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/driver4.jpg"><img class="size-full wp-image-468" title="mongdb php extension" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/driver4.jpg" alt="mongdb php extension" width="513" height="580" /></a><p class="wp-caption-text">mongdb php extension</p></div>
<p>เมื่อคุณ download มาแล้วทำการ unzip จะได้มี 2 ไฟล์แต่จริงๆเราใช้ไฟล์เดียวคือ php_mongo.dll ให้นำไฟล์นี้ไปวางไว้ในโฟรเดอร์ ext หรือที่สำหรับวางไฟล์พวก extension ของ PHP ครับ และทำการเปิดไฟล์ php.ini ซึ่งจะอยู่แล้วตามที่แต่ถ้าคุณหาไม่เจอละก็ให้ดูใน phpinfo() แล้วดูที่บรรทัดนี้ตามรูปครับ</p>
<div id="attachment_469" class="wp-caption aligncenter" style="width: 415px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/driver5.jpg"><img class="size-full wp-image-469" title="php.ini location" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/driver5.jpg" alt="php.ini location" width="405" height="53" /></a><p class="wp-caption-text">php.ini location</p></div>
<p>แล้วไปแก้ไขโดยการเพิ่ม extension=php_mongo.dll โดยบรรทัดที่คุณจะวางคำสั่งนี้แนะนำให้ค้นหาคำว่า extension ครับจะได้รู้ที่เขาเขียนพวก extension ต่างๆไว้ก็เพิ่มเข้าไปอีกบรรทัดแล้วก็ save เสร็จแล้วก็ทำการ restart server ของเราให้มันรับการแก้ไขค่าใหม่ของเราเข้าไปก็เป็นอันเสร็จพิธีของการทำให้ PHP รู้จักคำสั่งๆของ mongo db แต่ยังไม่จบนะมีอีกเราต้องทำการรัน mongo db ในการจัดเก็บด้วยพร้อมแล้วไปต่อกันเลยครับ</p>
<h2>ขั้นตอนการรัน Mongo DB</h2>
<p>ให้คุณเข้าไปที่ link นี้เลยครับ <a title="http://www.mongodb.org/downloads" href="http://www.mongodb.org/downloads" target="_blank">mongodb download</a> ซึ่งจะมีให้สำหรับทุก OS ที่มีการ support ก็เลือกอันที่เหมาะสมครับดังรูปด้านล่าง</p>
<div id="attachment_470" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb1.jpg"><img class="size-full wp-image-470" title="mongdb os support" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb1-e1326044476176.jpg" alt="mongdb os support" width="600" height="161" /></a><p class="wp-caption-text">mongdb os support</p></div>
<p>เมื่อ download มาเสร็จ และเราทำการ unzip โดยตัวไฟล์จะมีชื่อคล้ายๆกับตัวอย่างแหละครับก็ให้ทำการ unzip ไว้ซักที่ถ้าเอาง่ายก็ใส่ไว้ตรง drive C เลยก็ได้ครับเสร็จแล้วเมื่อ unzip ก็ให้ทำการ rename โฟรเดอร์เพื่อง่ายต่อการเรียกเวลาเราพิมพ์ใน command line เป็น mongo ก็พอครับ</p>
<div id="attachment_471" class="wp-caption aligncenter" style="width: 506px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb2.jpg"><img class="size-full wp-image-471" title="mongdb unzip" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb2.jpg" alt="mongdb unzip" width="496" height="356" /></a><p class="wp-caption-text">mongdb unzip</p></div>
<p>โดยของผมเปลี่ยนชื่อเป็น mongodb ก็คล้ายๆกันเสร็จแล้วให้คุณทำการสร้างโฟรเดอร์มา ใน drive C: ชื่อว่า data และในโฟรเดอร์ data ให้สร้างอีกโฟรเดอร์ชื่อ db ครับต่อจากตรงนี้ผมจะอธิบายไว้ก่อนว่าไฟล์ที่อยู่ใน mongo/bin นั้นจะมีสองไฟล์ที่สำคัญต่อเราเวลาจะใช้ mongo db คือ</p>
<ol>
<li>ไฟล์ชื่อ mongod.exe ซึ่งตัวนี้เมื่อเราทำการสั่งด้วย command จะเป็นเหมือนการเปิด database ครับ</li>
<li>ไฟล์ชื่อ mongo.exe ตัวนี้จะเป็นเหมือน admin shell ครับ</li>
</ol>
<p>เราก็มาลองรัน mongodb ของเราซักทีกด Ctrl+r หรือเข้าไปที่ start &gt; run แล้วพิมพ์ cmd จะขึ้นหน้าต่าง command line ครับ ตามรูปเลย</p>
<div id="attachment_472" class="wp-caption aligncenter" style="width: 359px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb3.jpg"><img class="size-full wp-image-472" title="cmd" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb3.jpg" alt="cmd" width="349" height="184" /></a><p class="wp-caption-text">cmd</p></div>
<p>แล้วจะขึ้นหน้าต่างสำหรับให้พิมพ์ command สำหรับคนที่ไม่เคยได้ลองคำสั่ง command line นั้นก็ไม่เป็นไรครับผมก็จะค่อยบอกอยู่แล้ว โดยตอนเริ่มแรกของโฟรเดอร์อาจจะไม่เหมือนกันให้คุณพิมพ์ &#8220;cd \&#8221; ( ไม่ต้อง copy double quote &#8221; ไปนะครับ ) เสร็จแล้วตัว cursor ของเราก็จะมาอยู่ drive C อย่างเดียว</p>
<div id="attachment_473" class="wp-caption aligncenter" style="width: 678px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb4.jpg"><img class="size-full wp-image-473" title="command line" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb4.jpg" alt="command line" width="668" height="334" /></a><p class="wp-caption-text">command line</p></div>
<p>ต่อมาให้คุณพิมพ์ cd mongo ( จริงๆเวลาพิมพ์ก็พิมพ์แค่ mo แล้วกด tab ก็จะช่วยได้นะครับ ) เราก็จะเข้ามาโฟรเดอร์ mongo แล้วต่อไปเราก็เข้าไปยังโฟรเดอร์ bin โดยการพิมพ์คำสั่งว่า cd bin แล้วเราก็ทำการเรียกให้ mongo รันฐานข้อมูลโดยการพิมพ์แค่ mongod เฉยๆก็พอไม่ต้องใส่ .exe นะครับนั่งรูปเลย โดยถ้าขึ้นเหมือนกับในรูปด้านล่างแล้วถือว่าเราได้ทำการเปิด mongo db ให้รันแล้วครับและก็ปล่อยหน้าต่างนี้ไปเลยอย่าปิดนะ</p>
<div id="attachment_475" class="wp-caption aligncenter" style="width: 675px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb6.jpg"><img class="size-full wp-image-475" title="mongod" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb6.jpg" alt="mongod" width="665" height="412" /></a><p class="wp-caption-text">mongod</p></div>
<p>เสร็จแล้วให้ทำการเรียกหน้าต่าง command line อีกครั้งทำเหมือนเดิมแล้วก็เข้ามาที่เดิมเลยครับจากนั้นก็พิมพ์คำสั่ง mongo ก็พอซึ่งหน้าต่างเราไว้รันคำสั่งในการ query ต่างๆของ mongo db โดยถ้าจะให้เปรียบเทียบหน้าต่างนี้เหมือนกับที่คุณเข้า phpmyadmin แล้วทำการรันคำสั่ง query ในเมนู sql อ่ะครับ</p>
<div id="attachment_474" class="wp-caption aligncenter" style="width: 676px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb5.jpg"><img class="size-full wp-image-474" title="start mongo" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb5.jpg" alt="start mongo" width="666" height="333" /></a><p class="wp-caption-text">start mongo</p></div>
<p>จะเห็นว่าเราทำการเชื่อมต่อ DB ที่ชื่อว่า test แต่ต่อไปจะเรียก collection นะครับเพราะว่า mongo เขาเรียกกันแบบนี้แต่ให้เข้าใจว่าคล้ายๆกับเราเรียก db นั่นแหละครับ โดยเราสามารถ test ได้โดยพิมพ์พวกคำสั่งต่างๆได้ดังรูปด้านล่างครับ</p>
<div id="attachment_476" class="wp-caption aligncenter" style="width: 674px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb7.jpg"><img class="size-full wp-image-476" title="mongo query" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb7.jpg" alt="mongo query" width="664" height="404" /></a><p class="wp-caption-text">mongo query</p></div>
<p>ก็เป็นอันว่าเราได้ทำการเปิด service ของ mongdb แล้วแต่ &#8230; การเปิดแบบนี้จะทำให้เรารำคาญได้เพราะว่าคุณก็ต้องเปิด command line ทุกครั้งแล้วก็พิมพ์คำสั่งแบบนี้ทุกครั้งคงไม่ดีแน่เราจึงจะทำให้การเปิด service ของ mongodb นั้นสามารถรันทุกครั้งที่เปิดเครื่องทำได้โดยการให้คุณทำการเข้าไปยัง path นี้วิธีเหมือนเดิมที่สอนไปเข้าไปทาง command line นะครับเข้าไปที่ C:/mongo/bin แล้วทำการใส่คำสั่งนี้ครับ</p>
<pre class="brush: php; title: ; notranslate">
mongod --logpath &quot;d:\my mongo\logs\my log file name.log&quot; --logappend
--dbpath &quot;d:\my mongo\data&quot; --directoryperdb --install
</pre>
<p>โดยให้แก้ไขตรง path หลังคำว่า &#8211;logpath ก็คือสถานที่ที่คุณต้องการเก็บ logs จาก mongodb ครับ และก็แก้ไขอีกที่ตรง &#8211;dbpath ให้แก้เป็นที่ที่เราจะทำการเก็บ DB ของเราครับแล้วเราจะรู้ได้ไงว่ามันทำสำเร็จแล้วให้คุณเรียกหน้าต่าง run แล้วพิมพ์ว่า services.msc แล้วจะมีหน้าต่าง รายงานว่ามี service ตัวไหนกำลังทำงานอยู่ถ้าคุณเห็น Mongo DB อยู่ก็ถือว่าสำเร็จแล้วดังรูปด้านล่าง</p>
<div id="attachment_477" class="wp-caption aligncenter" style="width: 630px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb8.jpg"><img class=" wp-image-477 " title="mongo db service" src="http://www.oxygenyoyo.com/wp-content/uploads/2012/01/mongdb8.jpg" alt="mongo db service" width="620" height="218" /></a><p class="wp-caption-text">mongo db service</p></div>
<p>แล้วถ้าคุณลองสร้างไฟล์ PHP ซักไฟล์มาลอง test mongo db แนะนำให้เข้าไปดูตัวอย่างที่หน้านี้เลยครับ <a title="example php" href="http://www.php.net/manual/en/mongo.tutorial.php" target="_blank">example php</a> ถ้ารันได้ก็แปลว่าคุณทำสำเร็จแล้ว !!! เย้ ^_^ / สำหรับบทความนี้ก็ขอจบลงเพียงเท่านี้ครับ ถ้ามีปัญหาอะไรก็ comment ไว้เลยจ้าจะมาตอบให้นะครับผม</p>
<div id="tweetbutton462" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fysoq5c&amp;text=RT%20%40oxygenyoyo%20%E0%B8%A5%E0%B8%87%20Mongo%20DB%20%E0%B8%A2%E0%B8%B1%E0%B8%87%E0%B9%84%E0%B8%87%20%3F%20-%20oxygenyoyo&amp;related=oxygenyoyo:%E0%B8%AA%E0%B8%B2%E0%B8%A3%E0%B8%B0%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%80%E0%B8%A7%E0%B9%87%E0%B8%9A%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1+PHP%2C+jQuery+%2C+CSS+%2C+%E0%B8%AF%E0%B8%A5%E0%B8%AF&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fwww.oxygenyoyo.com%2F2012%2F01%2F09%2Fhow-to-install-mongo-db%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://www.oxygenyoyo.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.oxygenyoyo.com/2012/01/09/how-to-install-mongo-db/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQuery plugin ทำไง ภาค 2</title>
		<link>http://www.oxygenyoyo.com/2012/01/03/getting-started-jquery-plugin-part-2/</link>
		<comments>http://www.oxygenyoyo.com/2012/01/03/getting-started-jquery-plugin-part-2/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 12:06:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Web programming]]></category>
		<category><![CDATA[jQuery plugin ทำไง]]></category>

		<guid isPermaLink="false">http://www.oxygenyoyo.com/?p=448</guid>
		<description><![CDATA[กลับมาอีกครั้งสำหรับ jQuery plugin ภาค 2 ( สองๆๆๆๆๆๆๆ ) ถ้าใครยังไม่ได้ดูว่าตอนแรกทำอย่างไร ไปดูได้เลยจ้า jQuery plgin ทำไง ภาค 2 นี้ยังคงเป็นการสอนทำ plugin ที่เราต้องการให้มันใช้งานที่ง่ายขึ้นและมีความซับซ้อนขึ้น ( อ้าวแล้วเราจะทำให้มันซับซ้อนขึ้นทำไม ? ) คือ เมื่อเราทำ plugin มาแล้วก็ควรจะทำให้มันยืดหยุ่นสามารถปรับเปลี่ยนตัวแปรได้อิสระ คืออาจจะปรับได้เล็กน้อยไปถึงปรับได้มากโดยภาคนี้เราจะได้เรียนรู้ดังนี้ Defaults and Options Namespacing Plugin Methods Events Data Defaults and Options สำหรับการกำหนดตัวแปรให้ค่อนข้างยืดหยุ่น ตัวอย่างที่ดีนั้นเราจะใช้ฟังก์ชั่น $.extend() เราจะไม่ส่งตัวแปรมาเยอะเยะ แต่เราจะทำการส่งตัวแปรแบบ object json เข้ามาทีเดียว กำหนดได้หมดว่าจะทำอะไร อย่างไรบ้าง ตอนเราจะส่งค่าเข้าไปก็ทำอย่างนี้เลยจ้า จากตัวอย่างด้านบนนั้นเมื่อเราทำการเรียก plugin tooltip แล้วส่งค่าเข้าไปยังตัวแปร options ค่า [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_441" class="wp-caption aligncenter" style="width: 266px"><a href="http://www.oxygenyoyo.com/wp-content/uploads/2011/12/jquery_logo.png"><img class="size-full wp-image-441" title="jquery_logo" src="http://www.oxygenyoyo.com/wp-content/uploads/2011/12/jquery_logo.png" alt="jQuery" width="256" height="80" /></a><p class="wp-caption-text">jQuery</p></div>
<p>กลับมาอีกครั้งสำหรับ jQuery plugin ภาค 2 ( สองๆๆๆๆๆๆๆ ) ถ้าใครยังไม่ได้ดูว่าตอนแรกทำอย่างไร ไปดูได้เลยจ้า <a title="jQuery plugin ทำไง" href="http://www.oxygenyoyo.com/2011/12/08/getting-started-jquery-plugin/" target="_blank">jQuery plgin ทำไง</a> ภาค 2 นี้ยังคงเป็นการสอนทำ plugin ที่เราต้องการให้มันใช้งานที่ง่ายขึ้นและมีความซับซ้อนขึ้น ( อ้าวแล้วเราจะทำให้มันซับซ้อนขึ้นทำไม ? ) คือ เมื่อเราทำ plugin มาแล้วก็ควรจะทำให้มันยืดหยุ่นสามารถปรับเปลี่ยนตัวแปรได้อิสระ คืออาจจะปรับได้เล็กน้อยไปถึงปรับได้มากโดยภาคนี้เราจะได้เรียนรู้ดังนี้</p>
<ul>
<li><strong>Defaults and Options</strong></li>
<li><strong>Namespacing</strong></li>
<li><strong>Plugin Methods</strong></li>
<li><strong>Events</strong></li>
<li><strong>Data</strong></li>
</ul>
<p><span id="more-448"></span></p>
<h2>Defaults and Options</h2>
<p>สำหรับการกำหนดตัวแปรให้ค่อนข้างยืดหยุ่น ตัวอย่างที่ดีนั้นเราจะใช้ฟังก์ชั่น <a title="extend doc" href="docs.jquery.com/Utilities/jQuery.extend" target="_blank">$.extend()</a> เราจะไม่ส่งตัวแปรมาเยอะเยะ แต่เราจะทำการส่งตัวแปรแบบ object json เข้ามาทีเดียว กำหนดได้หมดว่าจะทำอะไร อย่างไรบ้าง</p>
<pre class="brush: php; title: ; notranslate">
(function( $ ){

  $.fn.tooltip = function( options ) {

    // สร้างตัวแปรมารับค่าเพื่อเราจะเอาค่าจากใน settings มาใช้ใน plugin ของเรา
    var settings = $.extend( {
      'location'         : 'top',
      'background-color' : 'blue'
    }, options);

    return this.each(function() {

      // Tooltip plugin code here

    });

  };
})( jQuery );
</pre>
<p>ตอนเราจะส่งค่าเข้าไปก็ทำอย่างนี้เลยจ้า</p>
<pre class="brush: php; title: ; notranslate">
$('div').tooltip({
  'location' : 'left'
});
</pre>
<p>จากตัวอย่างด้านบนนั้นเมื่อเราทำการเรียก plugin tooltip แล้วส่งค่าเข้าไปยังตัวแปร options ค่า location ในตัวแปร options จะทำการ override หรือว่าทับตัวที่อยู่ในตัวแปร settings ในฟังก์ั่ชั่น $.extend เพราะฉะนั้นค่าที่เราจะได้จากการเรียกแบบนี้ตามตัวอย่างคือ</p>
<pre class="brush: php; title: ; notranslate">
{
  'location'         : 'left',
  'background-color' : 'blue'
}
</pre>
<p>แถมให้อีกนิดคือการเข้าถึงค่าในตัวแปรถ้าสมมติคุณต้องการ location ในตัวแปร settings ก็ให้เขียนอย่างนี้ครับ settings.location ก็จะได้ค่าจากตัวแปร location แล้วทำนองเดียวกันถ้าคุณต้องการค่า background-color</p>
<h2>Namespacing</h2>
<p>การตั้งชื่อ plugin นั้นก็สำคัญเป็นส่วนหนึ่งของการพัฒนาโปรแกรม ต้องมั่นใจว่าชื่อที่เราจะต้องไม่ซ้ำหรือมีโอกาสน้อยมากที่จะซ้ำในหน้าเดียวกัน หรือโดยทับโดยชื่อของ plugin ตัวอื่น ซึ่งมันจะอำนวยความสะดวกสำหรับการที่เราจะ track ( ตามหา ) event , data , method</p>
<h2>Plugin Method</h2>
<p>ถ้าหากว่าเรามีหลาย ฟังก์ชั่นที่ถูกเรียกใช้ภายใน plugin เดียวกันอย่างตัวอย่าง</p>
<pre class="brush: php; title: ; notranslate">
(function( $ ){

  $.fn.tooltip = function( options ) {
    // THIS
  };
  $.fn.tooltipShow = function( ) {
    // IS
  };
  $.fn.tooltipHide = function( ) {
    // BAD
  };
  $.fn.tooltipUpdate = function( content ) {
    // !!!
  };

})( jQuery );
</pre>
<p>การเรียกใช้นัั้นก็จะมีความลำบากนิดหน่อยเช่นถ้าเราต้องการเรียก tooltipShow ก็ต้องเป็น $(&#8216;element&#8217;).tooltipShow() แล้วเราก็ต้องมานั่งจำชื่ออีก  แต่ถ้าเราสามารถจัดการให้มันอยู่ในกลุ่มเดียวกันได้โดยการทำเป็น object literal หรือการส่งแบบ JSON นั่นเอง ซึ่งจะง่ายมากๆและเขียนได้สั้นน้อยลงตามด้านล่างเลยครับ</p>
<pre class="brush: php; title: ; notranslate">
(function( $ ){

  var methods = {
    init : function( options ) {
      // THIS
    },
    show : function( ) {
      // IS
    },
    hide : function( ) {
      // GOOD
    },
    update : function( content ) {
      // !!!
    }
  };

  $.fn.tooltip = function( method ) {

    // Method calling logic
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }

  };

})( jQuery );

// calls the init method
$('div').tooltip();

// calls the init method
$('div').tooltip({
  foo : 'bar'
});
// calls the hide method
$('div').tooltip('hide');
// calls the update method
$('div').tooltip('update', 'This is the new tooltip content!');
</pre>
<p>หลายๆคนคงสับสนว่ามันทำงานอย่างไร จะอธิบายให้ฟังครับ ในการเรียก plugin ตัวนี้เราได้แบ่งชื่อฟังก์ชั่นตามที่เห็นด้านบนและ เวลาเราเรียกนั้นเราก็สามารถใส่ namespacing ต่างๆได้ โดยเมื่อเราทำการเรียก plugin แล้วใส่ค่า hide ไปตัว plugin จะทำการเรียกไปที่บรรทัดนี้ก่อน</p>
<pre class="brush: php; title: ; notranslate">
$.fn.tooltip = function( method ) {

    // Method calling logic
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }

  };
</pre>
<p>โดยค่า hide ที่เราใส่เข้ามาคือตัว argument ชื่อ method นั่นเอง แล้วก็เข้าสู่ if โดยมีการเช็คว่า methods ( สังเกตุนะครับว่ามี s ) มี index หรือค่า key นั้นชื่อว่า hide หรือไม่ซึ่งถ้ามีก็เข้าสู่ if ( methods[ method] ) และทำงานในนี้ทันที โดยบรรทัด return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); เป็นการส่งค่า argument ที่ใส่มาด้วยให้กับฟังก์ชั่นนั้นๆ เช่น ฟังก์ชั่น update จะเห็นว่าเราใส่ค่าเพิ่มมาด้วยก็จะโอนค่านั้นส่งต่อไปให้ฟังก์ชั่น update และค่านั้นจะถูกใช้ในฟังก์ชั่น update ที่มีชื่อว่า content นั่นเอง ส่วนการเรียกที่เราไม่ใส่ค่าอะไรเลยหรือว่าใส่ค่าเป็นแบบ JSON มันรู้ได้อย่างไรว่าเราทำการเรียกฟังก์ชั่น init ตัวอย่างเราทำการเรียก</p>
<pre class="brush: php; title: ; notranslate">
// calls the init method
$('div').tooltip();

// calls the init method
$('div').tooltip({
  foo : 'bar'
});
</pre>
<p>จะเห็นว่าใน if ที่ผมอธิบายเมื่อตะกี้จะมี else if ต่อมาคือ else if ( typeof method === &#8216;object&#8217; || ! method ) ซึ่งหมายถึงว่า ถ้ากรณีที่ไม่ใส่ค่าอะไรมาเลย<strong>หรือ</strong>ใส่ค่ามาเป็น object จะให้ทำคำสั่งนี้ โดยจะทำการเรียกฟังก์ชั่น init ให้อัตโนมัติพร้อมกับส่งค่า argument ไปให้ฟังก์ชั่น init อีกด้วย แต่ถ้าหากเราเรียกอะไรแปลกๆซึ่งไม่มีในสิ่งที่เรากำหนดไว้ละก็ มันจะทำการทำคำสั่งสุดท้ายของ else นั่นคือการแจ้งเตือน error ใน console.log<br />
จะเห็นการเขียนแบบนี้นั้นจะเป็นการเอาข้อดีของ oop คือ encapsulate มาใช้โดยเราสามารถสร้าง method ที่เราต้องการและสามารถส่งค่าต่างๆให้กับ method ของเราได้และการสร้าง plugin แบบนี้คือหลักสากล ของ jQuery plugin ที่ใช้กันภายใน community และสามารถเรียก plugin ตัวอื่นหรือแม้แต่ widgets ต่างๆได้อีกด้วย</p>
<h2>Events</h2>
<p> อย่างที่เราทราบกันว่า method bind นั้นเป็นการ detect event ของ namespacing ( ใครไม่เข้าใจจะอธิบายทีหลังน้าสำหรับ method bind ) อธิบายสั้นๆว่า ถ้าคุณทำการ bind event ใดๆมันจะติดอยู่กับ element นั้นๆเช่น </p>
<pre class="brush: php; title: ; notranslate">
$('#id_element').bind('click', function() {
  //do something
});
</pre>
<p>ถ้า plugin ของคุณมีการ bind event แล้ว แล้วคุณต้องการจะทำการ unbind ( อันนี้อีกตัวจะบอกทีหลังน้าฮ่าๆ ) ก็เหมือนการถอด event นั้นออกจาก element ที่เรากำหนด ซึ่งจากตัวอย่างนั้นคือ การ bind element ธรรมดาถ้าสมมติว่าเราอยากทำให้ plugin ของเรามีการใช้ bind event ใดๆใน event ของเราแล้วเราต้องการจะทำการ unbind เราต้องทำทุก event เลยหรือเปล่า ? คำตอบคือเรามาสามารถ unbind ทุก event ของเราได้โดยการพิมพ์ unbind(&#8216;.&lt;namespacing&gt;&#8217;) ซึ่งคำใน namespacing นั้นคือชื่อ plugin ของเรา แล้วถามว่าทำไมเราต้อง unbind event ของเราด้วยยกตัวอย่างง่ายๆ คือ ถ้าสมมติ plugin ของคุณมีการใช้ bind click แล้วมี element ตัวอื่นทำการเรียกเรียก plugin ของคุณอีก อาจจะทำให้มีการชนกันของ event หรืออยากจะทำงานซับซ้อนเราจึงควรจะมีการ unbind event ใน plugin ของเราก่อนครับ ตัวอย่าง</p>
<pre class="brush: php; title: ; notranslate">
(function( $ ){

  var methods = {
     init : function( options ) {

       return this.each(function(){
         $(window).bind('resize.tooltip', methods.reposition);
       });

     },
     destroy : function( ) {

       return this.each(function(){
         $(window).unbind('.tooltip');
       })

     },
     reposition : function( ) {
       // ...
     },
     show : function( ) {
       // ...
     },
     hide : function( ) {
       // ...
     },
     update : function( content ) {
       // ...
     }
  };

  $.fn.tooltip = function( method ) {

    if ( methods[method] ) {
      return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    

  };

})( jQuery );

$('#fun').tooltip();
// Some time later...
$('#fun').tooltip('destroy');
$('#bar').tooltip();
</pre>
<p>ในตัวอย่างนั้นเมื่อ plugin tooltip มีการเรียก init method ซึ่งจะมีการเรียกให้ method reposition ซึ่ง method นี้ทำการ resize ซึ่ง event ที่ถูก bind นั้นจะอยู่กับ window ภายใต้ชื่อในการเรียกใช้ว่า &#8216;tooltip&#8217; งงไหม ? หมายถึงว่าตอนนี้ window มี event ชื่อว่า tooltip ติดอยู่ด้วยนั่นเอง แล้วทีนี้ถ้าสมมติว่าคุณต้องการจะทำลาย event นี้ เราสามารถ unbind event นี้ด้วยการส่งค่าผ่าน plugin ด้วย namespacing บางอย่าง ( ในตัวอย่าง namespacing สำหรับ unbind คือ destroy ) ในกรณีนี้สำหรับ tooltip สำหรับ unbind event method การที่เราทำการ $().tooltip(&#8216;destroy&#8217;) โดยอย่าลืมว่า <strong>event มันเกาะกับ element เพราะฉะนั้นคุณต้องเลือก element นั้นๆเพื่อทำการ destroy หรือ unbind ออกนะครับ </strong>ซึ่งวิธีนี้จะทำให้เราสามารถ unbind ได้ปลอดภัยโดยจะไม่พบการชนกันของ event ที่อาจจะออกไปนอก plugin</pre>
<h2>Data</h2>
<p>บ่อยครั้งที่นักพัฒนา plugin นั้นต้องการเช็คสถานะต่างๆหรือว่ามีการเช็คว่า plugin ของเราทำงานกับ element นั้นๆหรือยัง ให้ใช้ .data เป็น method ที่ดีมากสำหรับการติดตาม ( debug หรือ tracking ) ตัวแปรต่างๆ อย่างไรก็ตามแทนที่เราต้องมานั่งดูว่าแต่ละตัวแปรชื่ออะไรบ้าง ( ถ้าสมมติว่าเราเก็บไว้หลายตัว ) มันจะดีกว่าถ้าเราสามารถส่งตัวแปรที่เป็น json หรือ object เข้าไปในตัวแปรเดียวเพื่อจะเป็นเสมือนบ้านเก็บตัวแปรของคุณเลยไม่ต้องมานั่งหา เพราะว่าเวลาเช็คคุณก็เรียกออกมาทั้งหมดเลยและข้อดีอีกอย่างคือคุณสามารถเข้าถึงตัวแปรด้วยชื่อเดียวตัวอย่าง</p>
<pre class="brush: php; title: ; notranslate">
(function( $ ){

  var methods = {
     init : function( options ) {

       return this.each(function(){

         var $this = $(this),
             data = $this.data('tooltip'),
             tooltip = $('&lt;div /&gt;', {
               text : $this.attr('title')
             });

         // If the plugin hasn't been initialized yet
         if ( ! data ) {

           /*
             Do more setup stuff here
           */

           $(this).data('tooltip', {
               target : $this,
               tooltip : tooltip
           });

         }
       });
     },
     destroy : function( ) {

       return this.each(function(){

         var $this = $(this),
             data = $this.data('tooltip');

         // Namespacing FTW
         $(window).unbind('.tooltip');
         data.tooltip.remove();
         $this.removeData('tooltip');

       })

     },
     reposition : function( ) { // ... },
     show : function( ) { // ... },
     hide : function( ) { // ... },
     update : function( content ) { // ...}
  };

  $.fn.tooltip = function( method ) {

    if ( methods[method] ) {
      return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    

  };

})( jQuery );
</pre>
<p>การใช้ method .data นั้นสามารถทำให้เรา tracking ตัวแปรโดยสามารถเรียกได้จาก method อื่นใน plugin ได้ด้วย ซึ่งจะทำให้คุณสามารถเรียกดูเมื่อไหร่ก็ได้และจะสะดวกอีกทางคือเมื่อคุณต้องการจะลบค่าของมัน</p>
<h2>Summary and Best Practices</h2>
<pre>การเขียน jQuery plugin นั้นอนุญาตให้เราใช้ความสามารถของฟังก์ชั่นต่างๆและการนำกลับมาใช้ใหม่ซึ่งเหล่านี้จะช่วยลดเวลาในการเขียนโค้ดและการพัฒนาต่ออย่างมีประสิทธิภาพ ต่อไปจะเป็นสรุปว่าทุกครั้งที่เราจะสร้าง plugin ซักตัวเราจะต้องทำอะไรบ้าง</pre>
<ul>
<li>ทุกครั้งอย่าลืมว่า plugin ต้องอยู่ภายใต้ วงเล็บ ( closure )</li>
<li>อย่าใช้ this เกินขอบเขตของ function อย่างที่อธิบายข้างบนแล้วว่ามันต่างกันอย่างไร</li>
<li>ให้คุณ return this จาก plugin plugin เพื่อให้สามารถทำ chainability ( การที่คุณเรียก method ได้ติดต่อกันครับ )</li>
<li>พยายามเขียนตัวแปรที่ส่งเข้าไปใน plugin ของเราทำเป็นแบบ setting ได้ โดยใช้ฟังก์ชั่น extend</li>
<li>อย่าใช้ jQuery.fn แล้วตามด้วย namespacing เยอะหรือจะอธิบายง่ายๆว่าอย่าทำแบบนี้ เช่น jQuery.fn.update , jQuery.fn.delete , jQuery.fn.create คือให้ทำแบบที่สอนด้านบนมีการเรียกใช้ผ่านชื่อ method ที่ตั้ง</li>
<li>ตั้งชื่อ method, event, data เสมอ</li>
</ul>
<div id="tweetbutton448" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FtmABUl&amp;text=RT%20%40oxygenyoyo%20jQuery%20plugin%20%E0%B8%97%E0%B8%B3%E0%B9%84%E0%B8%87%20%E0%B8%A0%E0%B8%B2%E0%B8%84%202%20-%20oxygenyoyo&amp;related=oxygenyoyo:%E0%B8%AA%E0%B8%B2%E0%B8%A3%E0%B8%B0%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%80%E0%B8%A7%E0%B9%87%E0%B8%9A%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1+PHP%2C+jQuery+%2C+CSS+%2C+%E0%B8%AF%E0%B8%A5%E0%B8%AF&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fwww.oxygenyoyo.com%2F2012%2F01%2F03%2Fgetting-started-jquery-plugin-part-2%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://www.oxygenyoyo.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.oxygenyoyo.com/2012/01/03/getting-started-jquery-plugin-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

