<?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>Apricot Ion Academy</title>
	<atom:link href="http://apricotion.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://apricotion.org</link>
	<description></description>
	<lastBuildDate>Thu, 26 Apr 2012 04:40:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>ค้นหาสื่อโฆษณาในฝัน ลงเงินเท่าไร ก็กำไรตลอด ด้วย Google Analytics</title>
		<link>http://apricotion.org/url-builder/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=url-builder</link>
		<comments>http://apricotion.org/url-builder/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 03:00:24 +0000</pubDate>
		<dc:creator>AoMiZ</dc:creator>
				<category><![CDATA[Web Analytics & Lead Optimization]]></category>
		<category><![CDATA[Url Builder]]></category>
		<category><![CDATA[วัดผลสื่อโฆษณาออฟไลน์]]></category>

		<guid isPermaLink="false">http://apricotion.org/?p=1658</guid>
		<description><![CDATA[เมื่อวันพุธที่ผ่านมา ผมได้มีโอกาศพูดคุยในรายการวิทยุ Mcot คลื่น 100.5 ครับเกี่ยวกับการประยุกต์ใช้เครื่องมือวัดผลเว็บไซต์ อย่าง Google Analytics วันนี้ก็เลยเอามาให้เพื่อนๆ ได้ฟังกันด้วยครับ พร้อมกับ จะมาเขียนอธิบายเพิ่มเติมไว้ในเว็บนี้เลย เกี่ยวกับ การวัดผลสื่อ ต่างๆ ด้วยการประยุกต์ใช้ URL Builder อยากรู้มั๊ยว่า เราลงทุนโฆษณาไปเป็นแสนเป็นล้านเนี่ย สื่อไหน ได้ผล สื่อไหนไม่ได้ผล เพื่อช่วยให้เราประหยัดเงินค่าโฆษณา หรือ ทำให้เลือก ลงทุนได้อย่างมีประสิทธิภาพสูงสุดในครั้งต่อๆไป คลิปเสียง เริ่มต้นด้วย อธิบาย เบื้องต้นก่อนว่า Traffic Source ปกติที่เป็น default ของ Analytics นั้น มีอยู่ 3 ตัวครับ ได้แก่ Direct – การเข้าโดยพิมพ์ URL โดยตรง หรือ ผ่านทาง Bookmark Referral- การเข้าโดยการอ้างอิงจากเว็บไซต์อื่น Search – การเข้าผ่านทาง search engine แบ่งเป็น organic และ cpc หลุดจาก 3 ตัวนี้ไปแล้ว ถ้าเราอยากวัดผลเพิ่มเติมละ เช่น อยาก วัพผลโฆษณาจาก หนังสือพิมพ์ จากป้าย จากวิทยุ จาก social media ที่ฮอตฮิต อย่าง facebook, twitter ละจะทำยังงัย? คำตอบคือ เราก็สร้างตัวแปรขึ้นมาวัดผลเองเลยครับด้วย URL Builder ซึ่งสามารถวัดได้ทุกสื่อที่เราจะทำเลย ขั้นตอนการสร้าง URL Builder เข้าไปที่ URL Builder เพื่อนๆ จะเห็นหน้าตาแบบรูปด้านล่าง สิ่งที่จำเป็นต้องใส่มี 4 ส่วนครับ Website URL ก็คือหน้าที่เราต้องการวัดผล Campaign Medium สื่อที่ใช้ เช่น Banner, radio, social ...]]></description>
			<content:encoded><![CDATA[<p>เมื่อวันพุธที่ผ่านมา ผมได้มีโอกาศพูดคุยในรายการวิทยุ Mcot คลื่น 100.5 ครับเกี่ยวกับการประยุกต์ใช้เครื่องมือวัดผลเว็บไซต์ อย่าง Google Analytics วันนี้ก็เลยเอามาให้เพื่อนๆ ได้ฟังกันด้วยครับ พร้อมกับ<span id="more-1658"></span> จะมาเขียนอธิบายเพิ่มเติมไว้ในเว็บนี้เลย เกี่ยวกับ<strong> การวัดผลสื่อ ต่างๆ</strong> ด้วยการประยุกต์ใช้<strong> URL Builder<br />
</strong></p>
<blockquote><p>อยากรู้มั๊ยว่า เราลงทุนโฆษณาไปเป็นแสนเป็นล้านเนี่ย สื่อไหน ได้ผล สื่อไหนไม่ได้ผล เพื่อช่วยให้เราประหยัดเงินค่าโฆษณา หรือ ทำให้เลือก ลงทุนได้อย่างมีประสิทธิภาพสูงสุดในครั้งต่อๆไป</p></blockquote>
<p><iframe width="100%" height="166" scrolling="no" frameborder="no" src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F40349580&amp;show_artwork=true"></iframe></p>
<p style="text-align: center;"><strong>คลิปเสียง</strong></p>
<p>เริ่มต้นด้วย อธิบาย เบื้องต้นก่อนว่า <strong>Traffic Source</strong> ปกติที่เป็น <strong>default</strong> ของ Analytics นั้น <span style="text-decoration: underline;">มีอยู่ 3 ตัวครับ</span> ได้แก่</p>
<p><strong>Direct</strong> – การเข้าโดยพิมพ์ URL โดยตรง หรือ ผ่านทาง Bookmark<br />
<strong>Referral</strong>- การเข้าโดยการอ้างอิงจากเว็บไซต์อื่น<br />
<strong>Search</strong> – การเข้าผ่านทาง search engine แบ่งเป็น organic และ cpc</p>
<p>หลุดจาก 3 ตัวนี้ไปแล้ว ถ้าเราอยากวัดผลเพิ่มเติมละ เช่น</p>
<blockquote><p>อยาก วัพผลโฆษณาจาก หนังสือพิมพ์ จากป้าย จากวิทยุ จาก social media ที่ฮอตฮิต อย่าง facebook, twitter ละจะทำยังงัย?</p></blockquote>
<p>คำตอบคือ เราก็สร้างตัวแปรขึ้นมาวัดผลเองเลยครับด้วย<strong> URL Builder</strong> ซึ่งสามารถวัดได้ทุกสื่อที่เราจะทำเลย ขั้นตอนการสร้าง URL Builder เข้าไปที่ <a href="http://support.google.com/googleanalytics/bin/answer.py?hl=en&amp;answer=55578">URL Builder</a> เพื่อนๆ จะเห็นหน้าตาแบบรูปด้านล่าง</p>
<p><img class="alignnone" src="http://blog.maxions.com/wp-content/uploads/2012/03/url-builder2.png" alt="Url builder" height="451" width="800" /></p>
<p><strong>สิ่งที่จำเป็นต้องใส่มี 4 ส่วนครับ</strong></p>
<ol>
<li><strong>Website URL</strong> ก็คือหน้าที่เราต้องการวัดผล</li>
<li><strong>Campaign Medium</strong> สื่อที่ใช้ เช่น Banner, radio, social</li>
<li><strong>Campaign Source</strong> ชนิดของสื่อ เช่น ถ้าสื่อคือ social ชนิดของสื่ออาจจะเป็น twitter, facebook</li>
<li><strong>Campaign Name</strong> คือชื่อ campaign ของเราครับ</li>
</ol>
<p>ยกตัวอย่างจากด้านบน สื่อที่ผมใช้ คือ radio ชนิดของสื่อที่ใช้ ก็คือ mcot และเพื่อให้รู้ว่า คลื่นไหน ก็เลยตั้งชื่อ Campaign ว่า 100-5 ตามชื่อคลื่นวิทยุเลยครับ เมื่อกด Generate ก็จะได้ URL ออกมายาวๆ ดังรูป step ที่ 2 ครับ</p>
<p><img class="aligncenter size-full wp-image-1663" src="http://apricotion.org/wp-content/uploads/2012/03/url-builder2.png" alt="url builder step by step" height="338" width="661" /></p>
<p>ซึ่งจะเห็นว่ายาวมาก เพื่อนๆ คงมีคำถามว่า<span style="text-decoration: underline;"><strong> แล้วใครจะไปจำได้?</strong></span><br />
<span style="text-decoration: underline;"><strong>วิธีแก้ ง่ายๆ ครับ</strong></span> เราก็นำไปทำ <strong>Redirect URL</strong> ถ้ายังต้องการให้คนจดจำแบรนด์ของเราอยู่<br />
หรือถ้าไม่ซีเรียส เอาไปทำ <strong>Short URL</strong> ด้วยบริการฟรีๆ ต่างๆ อย่างเช่น bit.ly ได้เลยครับ</p>
<p><strong><span style="text-decoration: underline;">เทคนิคเล็กๆน้อยๆ</span> ที่ทำให้คนอยากเข้าเว็บไซต์เรา แม้ว่า จะมี URL ที่ยาวกว่าเดิม</strong></p>
<p>เราจะต้องทำให้เค้ารู้สึกว่า สินค้าหรือบริการที่เราเสนออยู่นี้ มัน Exclusive เฉพาะเค้าจริงๆ ครับ<br />
อาจจะเป็น แจกส่วนลดพิเศษ หรือมี ข้อเสนอสุดพิเศษ บางอย่างที่ทำให้เค้าไม่อยากจะพลาดไป</p>
<p>เช่นครับ ผมทำธุรกิจเกี่ยวกับ ขายเสื้อผ้าผู้หญิงน่ารักๆ แล้วจะลงโฆษณาใน แมกกาซีน วัยรุ่น Teenmagazine<br />
เว็บไซต์ผมคือ <span style="color: #0000ff;">www.mydomain.com</span>   หลังจากทำ URL Builder และผ่านการทำ URL Redirect ก็จะกลายเป็น <span style="color: #0000ff;">www.mydomain.com/teenmagazine</span></p>
<p>คำโฆษณาในแมกกาซีน ของผม คือ<br />
รับส่วนลด 50% ทันที พิเศษสุดสำหรับ คุณผู้อ่าน นิตยสาร Teenmagazine เท่านั้น เฉพาะ 50 ท่านแรก<br />
สนใจคลิก link <span style="color: #0000ff;">www.mydomain.com/teenmagazine</span> นี้เลย</p>
<p>ทีนี้เมื่อเราทำ URL ใหม่ที่มีการ track ทุกสื่อที่เราอยากจะวัดแล้ว นำไปโปรโมท หรือโฆษณาซักพัก คำถามต่อไปก็คือว่า<br />
<strong>เราจะดู Report ได้ในส่วนไหน?</strong></p>
<p>เข้าไปดูในส่วน ของ Traffic และ all traffic ได้เลยครับ เพื่อนๆ จะเห็น source/medium ที่ตัวเองสร้างไว้เลย<br />
<img class="aligncenter size-full wp-image-1659" src="http://apricotion.org/wp-content/uploads/2012/03/banner-source.png" alt="Custom Source" height="203" width="1110" /></p>
<p>อย่างในรูป จะเห็นว่า ผมวัดผลทุกสื่อ โฆษณา banner ที่ลูกค้าไปลงไว้ และจะเห็นว่าเราสามารถดู metric ต่างๆ ได้แบบปกติเลย ก็จะทำให้เราเข้าใจพฤติกรรมของผู้เยี่ยมชม ที่มาจากแต่ละแหล่งที่มามากขึ้น หรือถ้าเรามีการกำหนดเป้าหมายไว้ เราก็สามารถทำ custom report เพื่อดู ว่า สื่อไหนที่ ทำกำไรให้เรามากที่สุดครับ<br />
<img class="aligncenter" src="http://blog.maxions.com/wp-content/uploads/2012/03/source.png" alt="Custom Report" height="180" width="1023" /></p>
<p>ดังนั้น ทุกสิ้นเดือน ก็เพียงแค่มาตัดสินใจว่า เดือนต่อไป เราจะเลือกลงทุนในสื่อไหนดี โดยดูจาก report แล้วก็ตัดสินใจจากงบที่ลงทุน เทียบกับ Goal Completions ดังนั้นเราอาจจะตัดสื่อที่ไม่มีคุณภาพทิ้งไป หรือ เพิ่มงบประมาณในสื่อที่มีคุณภาพให้มากขึ้น เท่านี้ เราก็จะสามารถจัดการงบประมาณโฆษณาได้อย่างมีประสิทธิภาพ และค้นพบสื่อโฆษณาในฝันที่ลงเงินเท่าไร ก็มีแต่กำไรแล้วครับ</p>
<p>ลองนำไปประยุกต์ใช้กันดูนะครับ.</p>
]]></content:encoded>
			<wfw:commentRss>http://apricotion.org/url-builder/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gutenberg Diagram ในงานออกแบบเว็บไซต์</title>
		<link>http://apricotion.org/gutenberg-diagram-for-web-design/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gutenberg-diagram-for-web-design</link>
		<comments>http://apricotion.org/gutenberg-diagram-for-web-design/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 03:21:36 +0000</pubDate>
		<dc:creator>niran</dc:creator>
				<category><![CDATA[Usability Engineering]]></category>
		<category><![CDATA[Gutenberg Diagram]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://apricotion.org/?p=1757</guid>
		<description><![CDATA[โพสก่อนหน้านี้ผมเคยเกริ่นถึงเรื่องของ Gutenberg Diagram ในโพสนี้ผมจะมาอธิบายรายละเอียดว่า Gutenberg Diagram คืออะไร และมีประโยชน์ในงาน Usability Engineering อย่างไรบ้าง อันที่จริง Gutenberg Diagram เป็นหลักจิตวิทยาง่ายๆ ของมนุษย์ (เผ่าพันธ์ที่อ่านจากซ้ายไปขวา) ที่ถูกฝึกสอนให้มีการอ่านในรูปแบบซ้ายไปขวาและบนลงล่างจนฝังลึกไปเป็นสัญชาติญาณ ในแวบแรกที่มองหน้าจอ มนุษย์จำพวกนี้จะ “โฟกัส” จุดสนใจของสายตาที่มุมบนซ้ายของหน้าจอเป็นอันดับแรก และจะไล่สายตาจากจุดดังกล่าวเป็นเส้นทแยงมุมไปที่มุมล่างขวาของเลย์เอาท์ ภาพด้านล่างเป็นแผนผัง Gutenberg โดยภาพซ้ายเป็นแผนผังสำหรับคนอ่านจากซ้ายไปขวา ส่วนภาพขวาสำหรับพวกขวาไปซ้าย (ญี่ปุ่น, จีน) ภาพที่ 1: เป็น Gutenberg Diagram สำหรับคนที่อ่านหนังสือจากซ้ายไปขวา ภาพที่ 2 คือ Gutenberg Diagram สำหรับคนที่อ่านหนังสือจากขวาไปซ้าย จุดบนซ้ายที่เป็นจุดที่เด่นที่สุดตามทฤษฏีของ Gutenberg เราเรียกกันว่าจุด POA (Primary Optical Area) จุดล่างขวาที่เป็นจุดสิ้นสุดของสายตา เรียกกันว่าจุด TA (Terminal Area) ข้อมูลที่อยู่ในเส้นทางของสายตาระหว่าง POA ไปยัง TA จะซึมเข้าสู่หัวสมองของผู้อ่านได้มากกว่าส่วนที่เหลือ ซึ่งก็คือมุมบนขวาและล่างซ้าย ซึ่งเราเรียกกันว่าจุดอับ (Fallow Area) และระหว่างสอง Fallow Area นี้ มุมบนขวาจะได้รับ Attention จากผู้อ่านมากกว่ามุมล่างซ้าย ถ้าหากปัจจัยขององค์ประกอบอื่นๆ (สี, lead graphics, ขนาดตัวอักษร) เท่ากัน พอเห็นพฤติกรรมทางจิตวิทยาของผู้อ่านเป็นแบบนี้แล้วเราจึงมีแนวทางการออกแบบที่สอดคล้องกับพฤติกรรมดังกล่าว โดยเราสามารถแบ่งพื้นที่ของหน้าจอออกเป็นสี่ส่วน (4 Quadrants) และให้น้ำหนักการออกแบบของแต่ละส่วนหนักเบาให้สอดคล้องกับทฤษฏี Gutenberg เช่น… ควรจะวางโลโก้/จุดสนใจ ไว้ ณ จุดบนซ้าย เพื่อดึงความสนใจของผู้อ่านในการจดจำแบรนด์ให้ได้มากที่สุด จุด TA เป็นตำแหน่งที่สามารถปิดการขายได้อย่างมีประสิทธิภาพ (ติดต่อเรา, ดาวน์โหลดเดโม, โทรสั่งซื้อวันนี้) ตำแหน่งล่างซ้ายในหน้าเว็บเพจ ถือเป็นจุดอับที่สะดุดตาคนน้อยที่สุดตามหลักของ Gutenberg เมื่อรู้อย่างนี้เราต้องระวังการจัดวางคอนเทนต์ให้ดี Goal ที่สำคัญของเพจไม่ควรไปอยู่ในมุมล่างซ้ายถ้าไม่จำเป็น หากต้องการเน้นเนื้อหาที่ส่วน ...]]></description>
			<content:encoded><![CDATA[<p>โพสก่อนหน้านี้ผมเคยเกริ่นถึงเรื่องของ <strong>Gutenberg Diagram</strong> ในโพสนี้ผมจะมาอธิบายรายละเอียดว่า <strong>Gutenberg Diagra</strong>m คืออะไร และมีประโยชน์ในงาน <strong>Usability Engineering</strong> อย่างไรบ้าง<span id="more-1757"></span></p>
<p>อันที่จริง <strong>Gutenberg Diagram</strong> เป็นหลักจิตวิทยาง่ายๆ ของมนุษย์ <strong>(เผ่าพันธ์ที่อ่านจากซ้ายไปขวา)</strong> ที่ถูกฝึกสอนให้มีการอ่านในรูปแบบซ้ายไปขวาและบนลงล่างจนฝังลึกไปเป็นสัญชาติญาณ</p>
<p>ในแวบแรกที่มองหน้าจอ มนุษย์จำพวกนี้จะ <strong>“โฟกัส”</strong> จุดสนใจของสายตาที่มุมบนซ้ายของหน้าจอเป็นอันดับแรก และจะไล่สายตาจากจุดดังกล่าวเป็นเส้นทแยงมุมไปที่มุมล่างขวาของเลย์เอาท์ ภาพด้านล่างเป็นแผนผัง <strong>Gutenberg</strong> โดยภาพซ้ายเป็นแผนผังสำหรับคนอ่านจากซ้ายไปขวา ส่วนภาพขวาสำหรับพวกขวาไปซ้าย (ญี่ปุ่น, จีน)</p>
<div class="mceTemp" draggable="">
<dl id="attachment_1761" class="wp-caption alignnone" style="width: 435px;">
<dt class="wp-caption-dt"><img src="http://apricotion.org/wp-content/uploads/2012/04/012.jpg" title="01" width="425" height="480" class="size-full wp-image-1761" /></dt>
<dd class="wp-caption-dd">ภาพที่ 1: เป็น Gutenberg Diagram สำหรับคนที่อ่านหนังสือจากซ้ายไปขวา</dd>
</dl>
</div>
<div class="mceTemp" draggable="">
<dl id="attachment_1763" class="wp-caption alignnone" style="width: 449px;">
<dt class="wp-caption-dt"><img src="http://apricotion.org/wp-content/uploads/2012/04/02.jpg" title="02" width="439" height="480" class="size-full wp-image-1763" /></dt>
<dd class="wp-caption-dd">ภาพที่ 2 คือ Gutenberg Diagram สำหรับคนที่อ่านหนังสือจากขวาไปซ้าย</dd>
</dl>
</div>
<p>จุดบนซ้ายที่เป็นจุดที่เด่นที่สุดตามทฤษฏีของ <strong>Gutenberg</strong> เราเรียกกันว่าจุด <strong>POA (Primary Optical Area)</strong> จุดล่างขวาที่เป็นจุดสิ้นสุดของสายตา เรียกกันว่าจุด <strong>TA (Terminal Area)</strong> ข้อมูลที่อยู่ในเส้นทางของสายตาระหว่าง <strong>POA</strong> ไปยัง <strong>TA</strong> จะซึมเข้าสู่หัวสมองของผู้อ่านได้มากกว่าส่วนที่เหลือ ซึ่งก็คือมุมบนขวาและล่างซ้าย ซึ่งเราเรียกกันว่า<strong>จุดอับ (Fallow Area)</strong> และระหว่างสอง <strong>Fallow Area</strong> นี้ มุมบนขวาจะได้รับ <strong>Attention</strong> จากผู้อ่านมากกว่ามุมล่างซ้าย <strong>ถ้าหากปัจจัยขององค์ประกอบอื่นๆ (สี, lead graphics, ขนาดตัวอักษร)</strong> เท่ากัน</p>
<blockquote><p>พอเห็นพฤติกรรมทางจิตวิทยาของผู้อ่านเป็นแบบนี้แล้วเราจึงมีแนวทางการออกแบบที่สอดคล้องกับพฤติกรรมดังกล่าว โดยเราสามารถแบ่งพื้นที่ของหน้าจอออกเป็นสี่ส่วน <strong>(4 Quadrants)</strong> และให้น้ำหนักการออกแบบของแต่ละส่วนหนักเบาให้สอดคล้องกับทฤษฏี <strong>Gutenberg</strong></p></blockquote>
<p>เช่น…</p>
<ul>
<li>ควรจะวางโลโก้/จุดสนใจ ไว้ ณ จุดบนซ้าย เพื่อดึงความสนใจของผู้อ่านในการจดจำแบรนด์ให้ได้มากที่สุด</li>
<li>จุด TA เป็นตำแหน่งที่สามารถปิดการขายได้อย่างมีประสิทธิภาพ (ติดต่อเรา, ดาวน์โหลดเดโม, โทรสั่งซื้อวันนี้)</li>
<li>ตำแหน่งล่างซ้ายในหน้าเว็บเพจ ถือเป็นจุดอับที่สะดุดตาคนน้อยที่สุดตามหลักของ <strong>Gutenberg</strong> เมื่อรู้อย่างนี้เราต้องระวังการจัดวางคอนเทนต์ให้ดี <strong>Goal</strong> ที่สำคัญของเพจไม่ควรไปอยู่ในมุมล่างซ้ายถ้าไม่จำเป็น</li>
<li>หากต้องการเน้นเนื้อหาที่ส่วน <strong>Follow Area</strong> ต้องสร้างความโดดเด่นด้วยองค์ประกอบอื่นๆ เช่นการเล่นสีที่แตกต่าง การใช้ตัวอักษร หรือ <strong>Movement</strong> ของกราฟฟิคที่น่าสนใจ</li>
</ul>
<p>เรามาดูตัวอย่างเว็บเพจที่ออกแบบตามหลัก <strong>Gutenberg</strong> ดูบ้าง ลองสังเกตตำแหน่งโลโก้ รวมไปถึงการวางตำแหน่ง <strong>Goal</strong> หลักๆ ของเว็บไซต์นะครับ</p>
<p><img src="http://apricotion.org/wp-content/uploads/2012/04/03.png" alt="" title="03" width="640" height="407" class="alignnone size-full wp-image-1766" /></p>
<p><img src="http://apricotion.org/wp-content/uploads/2012/04/04.png" alt="" title="04" width="640" height="407" class="alignnone size-full wp-image-1767" /></p>
<p><img src="http://apricotion.org/wp-content/uploads/2012/04/05.png" alt="" title="05" width="640" height="407" class="alignnone size-full wp-image-1768" /></p>
<p><img src="http://apricotion.org/wp-content/uploads/2012/04/06.png" alt="" title="06" width="640" height="407" class="alignnone size-full wp-image-1769" /></p>
<p><img src="http://apricotion.org/wp-content/uploads/2012/04/07.png" alt="" title="07" width="640" height="407" class="alignnone size-full wp-image-1770" /></p>
<p><img src="http://apricotion.org/wp-content/uploads/2012/04/08.png" alt="" title="08" width="640" height="407" class="alignnone size-full wp-image-1771" /></p>
<p>แต้ท้ายที่สุดผมคงต้องบอกว่า <strong>Gutenberg Diagram</strong> ไม่ใช่สูตรสำเร็จของการจัดวางองค์ประกอบเว็บไซต์ สิ่งที่เราจะได้เรียนรู้จาก <strong>Gutenberg</strong> ก็คือแนวคิดตามจิตวิทยาของมนุษย์ และแนวทางพื้นทางในการสร้าง <strong>Attention</strong> กับเว็บไซต์ เช่น หากองค์ประกอบต่างๆ บังคับให้ข้อมูลส่วนสำคัญของเราไปอยู่ที่ Fallow Area ก็ควรจะสร้างจุดเด่นอื่นที่ฉีกหนีองค์ประกอบต่างๆ เพื่อทำให้องค์ประกอบดังกล่าวมีความโดดเด่นและดึง <strong>Attention</strong> ของสายตาผู้อ่านได้ดีกว่าเดิม</p>
<p>นอกจากนี้สิ่งที่เราต้องเรียนรู้คือความเป็นจริงที่ว่า การอ่านหนังสือนั้นสายตาของเราจะเริ่มสนใจ ณ จุด <strong>POA</strong> ก่อนเสมอ แต่เว็บไซต์ไม่ใช่หนังสือ ดังนั้นในบางกรณีการจัดองค์ประกอบของเว็บไซต์ที่ขัดกับ <strong>Gutenberg Diagram</strong> กลับมีประสิทธิภาพ นั่นเนื่องมาจากว่า สมองของผู้เข้าชมไม่ได้ตีความหน้าจอดังกล่าวเป็นหน้าหนังสือ แต่อาจเป็นโปสเตอร์ หรือบิลบอร์ด ซึ่งจะทำให้ <strong>POA</strong> เปลี่ยนไปเป็นกึ่งกลางภาพโดยอัตโนมัติ</p>
<p>ใครไม่เชื่อใน <strong>Gutenberg Diagram</strong> เราสามารถทำการทดลองได้โดยการใช้เครื่องมืออย่าง <a href="http://blog.maxincube.com/analytics/for-newbies/introduction-to-google-website-optimizer">Google Website Optimizer</a> เพื่อวัด <strong>Attention</strong> ของผู้เข้าชมได้ โดยการออกแบบเลย์เอาท์เว็บไซต์สองประเภทและทดสอบกับผู้เข้าชมจริง ว่าสอดคล้องกับทฤษฏีของ <strong>Getenberg</strong> หรือไม่ (สิ่งที่ทีมงานของเราเคยทดสอบก็คือ การวางไอคอน “สมัครสมาชิก” ไว้ณ ตำแหน่ง <strong>Fallow Area</strong> นั้นทำให้มียอดสมาชิกน้อยกว่าตำแหน่ง <strong>TA</strong> ถึงประมาณ 300%)</p>
<p>ปิดท้ายกันด้วยข้อมูลเพิ่มเติมว่า ทฤษฏีของ <strong>Gutenberg</strong> จะเหมาะสมและมีประสิทธิภาพสูงสุดกับเว็บไซต์ที่มีอาการ <strong>Information Overflow</strong> นั่นก็คือ ข้อมูลท่วมจนไม่รู้ว่าอันไหนเด่นอันไหนด้อยไปกว่ากัน ส่วนในกรณีเว็บไซต์ที่มีข้อมูลไม่มาก เราอาจจะมองไม่เห็นศักยภาพของทฤษฏี <strong>Gutenberg</strong> อย่างชัดเจนนัก</p>
<p>หลังอ่านโพสนี้จบน่าจะเข้าใจเหตุผลที่ระบบ Search ของเว็บไซต์ Apple ไปอยู่ที่มุมบนขวามากขึ้นนะครับ (<a href="http://apricotion.org/usability-case-study-visual-cue-apple-search/">คลิกไปอ่านโพสได้ที่นี่</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://apricotion.org/gutenberg-diagram-for-web-design/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>เปลี่ยนฟอนต์สวยๆ ให้ App บน Android กัน</title>
		<link>http://apricotion.org/pretty-font-app-on-android/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pretty-font-app-on-android</link>
		<comments>http://apricotion.org/pretty-font-app-on-android/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 14:09:59 +0000</pubDate>
		<dc:creator>Vatthanachai</dc:creator>
				<category><![CDATA[Mobile Development]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://apricotion.org/?p=1501</guid>
		<description><![CDATA[หลายๆ ครั้งที่เราพัฒนา App กันแล้ว แต่ฟอนต์เจ้ากรรมดันไม่สวยถูกใจ วันนี้เราเลยจะมาแนะนำการเปลี่ยนฟอนต์ให้กับโปรแกรมของเรากันดีกว่า โดยโปรแกรมที่ผมจะเอามาเป็นตัวอย่างให้กับทุกท่านได้ศึกษากันนั้น จะทำการเพิ่มขนาดและย่อขนาดให้กับข้อความของเราได้ ซึ่งหน้าจอของโปรแกรมจะมีลักษณะ ตามภาพ Font Thai สำหรับในบทความนี้จะใช้ Android 2.3 Gingerbread ในการทดสอบแอพกันนะครับ หลังจากนั้นให้เราเริ่มสร้างโปรเจคของเราบน Eclipse กันเลยนะครับ ตามนี้เลยครับผม (^_^) กำหนดชื่อโปรเจค กำหนดรุ่นของ Android กำหนดรายละเอียดของแอพ หลังจากที่เราสร้างโปรเจคเป็นที่เรียบร้อยแล้ว ขั้นตอนต่อไปจะเป็นการสร้างส่วนของ UI เพื่อให้โปรแกรมของเราได้มีส่วนที่ใช้สำหรับติดต่อกับผู้ใช้งาน โดยให้เราเปิดไฟล์ Main.xml กันเลย โดยเราจะออกแบบดังนี้ และให้ทำการแก้ไขในส่วนของ String เพื่อใช้งานในแอพของเรา ให้เปิดไฟล์ strings.xml ขึ้นมาแก้ไขกันตามนี้เลย ทดสอบแอพกันหน่อยดีกว่าว่าหน้าตาของแอพเราจะออกมาเป็นแบบนี้กันหรือเปล่า หน้าตาแอพที่ยังไม่ได้เปลี่ยนแปลง จากนั้นเราจะทำให้แอพเราสามารถเพิ่มและขยายขนาดของตัวอักษรกันก่อนดีกว่า ให้เปิดไฟล์ FontThaiActivity.java  แล้วเพิ่มโค๊ดต่างๆ ลงไป ทดสอบแอพดูอีกครั้งว่าทำงานได้ตามที่ต้องการหรือไม่ ถ้าได้ตามที่เราต้องการกันแล้วต่อไปจะเป็นการเปลี่ยน Font ในแบบที่เราต้องการกันต่อเลยละกันนะครับ ให้เราสร้างโฟลเดอร์ขึ้นภายในโฟลเดอร์ Asset แล้วตั้งชื่อว่า fonts จากนั้นก็ให้เรา Copy ไฟล์ Font ของเรามาไว้ในโฟล์เดอร์นี้ ขั้นตอนการสร้างโฟลเดอร์ Font สร้างโฟล์เดอร์ Fonts เลือก Font ที่ต้องการ Font ที่เราจะใช้งานกัน รายการ Fonts ที่ใช้ในโปรเจค เมื่อเราเตรียม Font ที่ต้องการใช้งานเสร็จแล้ว ต่อไปก็จะเป็นการกำหนดให้ ข้อความของเราใช้งาน Font ที่เราเตรียมไว้ โดยให้เราแทรกคำสั่งลงไป ดังนี้ โดยผมจะเพิ่มไว้ก่อนที่จะทำการ Set Event ให้กับปุ่มคำสั่งของเรานะครับ ซึ่งจะอยู่ใน Method OnCreate นะครับ ข่างล่างนี่จะเป็นคำสั่งทั้งหมดที่อยู่ในไฟล์ FontThaiActivity.java นะครับ ลองนำเอาไปประยุกต์ใช้กันดูนะครับ อาจะมีประโยชน์ไม่มากก็น้อยนะครับ]]></description>
			<content:encoded><![CDATA[<p>หลายๆ ครั้งที่เราพัฒนา <strong>App</strong> กันแล้ว แต่ฟอนต์เจ้ากรรมดันไม่สวยถูกใจ วันนี้เราเลยจะมาแนะนำการเปลี่ยนฟอนต์ให้กับโปรแกรมของเรากันดีกว่า<span id="more-1501"></span> โดยโปรแกรมที่ผมจะเอามาเป็นตัวอย่างให้กับทุกท่านได้ศึกษากันนั้น จะทำการเพิ่มขนาดและย่อขนาดให้กับข้อความของเราได้ ซึ่งหน้าจอของโปรแกรมจะมีลักษณะ ตามภาพ</p>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1502" class="wp-caption aligncenter" style="width: 344px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1502" src="http://apricotion.org/wp-content/uploads/2012/02/10-2-2555-23-14-20.png" alt="Font Thai" width="334" height="494" /></dt>
<dd class="wp-caption-dd">Font Thai</dd>
</dl>
</div>
<p>สำหรับในบทความนี้จะใช้ <strong>Android 2.3 Gingerbread</strong> ในการทดสอบแอพกันนะครับ หลังจากนั้นให้เราเริ่มสร้างโปรเจคของเราบน <strong>Eclipse</strong> กันเลยนะครับ ตามนี้เลยครับผม (^_^)</p>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1503" class="wp-caption aligncenter" style="width: 509px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1503" src="http://apricotion.org/wp-content/uploads/2012/02/10-2-2555-21-52-48.png" alt="กำหนดชื่อโปรเจค" width="499" height="378" /></dt>
<dd class="wp-caption-dd">กำหนดชื่อโปรเจค</dd>
</dl>
</div>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1504" class="wp-caption aligncenter" style="width: 519px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1504" src="http://apricotion.org/wp-content/uploads/2012/02/10-2-2555-21-53-24.png" alt="กำหนดรุ่นของ Android" width="509" height="244" /></dt>
<dd class="wp-caption-dd">กำหนดรุ่นของ Android</dd>
</dl>
</div>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1505" class="wp-caption aligncenter" style="width: 519px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1505" src="http://apricotion.org/wp-content/uploads/2012/02/10-2-2555-21-53-47.png" alt="กำหนดรายละเอียดของแอพ" width="509" height="297" /></dt>
<dd class="wp-caption-dd">กำหนดรายละเอียดของแอพ</dd>
</dl>
</div>
<p>หลังจากที่เราสร้างโปรเจคเป็นที่เรียบร้อยแล้ว ขั้นตอนต่อไปจะเป็นการสร้างส่วนของ <strong>UI</strong> เพื่อให้โปรแกรมของเราได้มีส่วนที่ใช้สำหรับติดต่อกับผู้ใช้งาน โดยให้เราเปิดไฟล์ <strong>Main.xml</strong> กันเลย โดยเราจะออกแบบดังนี้</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
android:layout_width=&quot;fill_parent&quot;
android:layout_height=&quot;fill_parent&quot;
android:orientation=&quot;vertical&quot; &gt;

&lt;TextView
android:id=&quot;@+id/txtContent&quot;
android:layout_width=&quot;fill_parent&quot;
android:layout_height=&quot;wrap_content&quot;
android:layout_gravity=&quot;center&quot;
android:text=&quot;@string/textContent&quot;
android:textSize=&quot;40dp&quot; /&gt;

&lt;LinearLayout
android:id=&quot;@+id/linearLayout1&quot;
android:layout_width=&quot;fill_parent&quot;
android:layout_height=&quot;wrap_content&quot; &gt;

&lt;RadioGroup
android:id=&quot;@+id/rbGroup1&quot;
android:layout_width=&quot;wrap_content&quot;
android:layout_height=&quot;wrap_content&quot;
android:layout_margin=&quot;20dp&quot; &gt;

&lt;RadioButton
android:id=&quot;@+id/rbSizeUp&quot;
android:layout_width=&quot;wrap_content&quot;
android:layout_height=&quot;wrap_content&quot;
android:checked=&quot;true&quot;
android:paddingLeft=&quot;40dp&quot;
android:text=&quot;@string/textUp&quot; /&gt;

&lt;RadioButton
android:id=&quot;@+id/rbSizeDown&quot;
android:layout_width=&quot;wrap_content&quot;
android:layout_height=&quot;wrap_content&quot;
android:paddingLeft=&quot;40dp&quot;
android:text=&quot;@string/textDown&quot; /&gt;
&lt;/RadioGroup&gt;

&lt;Button
android:id=&quot;@+id/btnChange&quot;
android:layout_width=&quot;wrap_content&quot;
android:layout_height=&quot;wrap_content&quot;
android:layout_margin=&quot;30dp&quot;
android:text=&quot;@string/textButton&quot; /&gt;
&lt;/LinearLayout&gt;

&lt;/LinearLayout&gt;
</pre>
<p>และให้ทำการแก้ไขในส่วนของ String เพื่อใช้งานในแอพของเรา ให้เปิดไฟล์ <strong>strings.xml</strong> ขึ้นมาแก้ไขกันตามนี้เลย</p>
<pre class="brush: xml; title: ; notranslate">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;resources&gt;

&lt;string name=&quot;textContent&quot;&gt;แอนดรอยเป็นระบบปฏิบัติการของมือถือชนิดหนึ่ง
ซึ่งถูกคิดค้นและพัฒนาขึ้นมาโดย Google Inc.&lt;/string&gt;
&lt;string name=&quot;app_name&quot;&gt;FontThai&lt;/string&gt;
&lt;string name=&quot;textUp&quot;&gt;Size +&lt;/string&gt;
&lt;string name=&quot;textDown&quot;&gt;Size -&lt;/string&gt;
&lt;string name=&quot;textButton&quot;&gt;เปลี่ยนขนาด&lt;/string&gt;

&lt;/resources&gt;
</pre>
<p>ทดสอบแอพกันหน่อยดีกว่าว่าหน้าตาของแอพเราจะออกมาเป็นแบบนี้กันหรือเปล่า</p>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1510" class="wp-caption aligncenter" style="width: 344px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1510" src="http://apricotion.org/wp-content/uploads/2012/02/10-2-2555-22-02-17.png" alt="หน้าตาแอพที่ยังไม่ได้เปลี่ยนแปลง" width="334" height="495" /></dt>
<dd class="wp-caption-dd">หน้าตาแอพที่ยังไม่ได้เปลี่ยนแปลง</dd>
</dl>
</div>
<p>จากนั้นเราจะทำให้แอพเราสามารถเพิ่มและขยายขนาดของตัวอักษรกันก่อนดีกว่า ให้เปิดไฟล์ <strong>FontThaiActivity.java</strong>  แล้วเพิ่มโค๊ดต่างๆ ลงไป</p>
<pre class="brush: java; title: ; notranslate">

package com.ai.fontthai;

import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TextView;

public class FontThaiActivity extends Activity {

   // กำหนดตัวแปร fontSize เพื่อใช้กำหนดขนาดของตัวอักษร
   private float fontSize = 40;

   // กำหนดตัวแปรเพื่อใช้ผูกเข้ากับคอนโทรลในหน้าจอ
   private RadioButton rbSizeUp;
   private RadioButton rbSizeDown;
   private Button btnChange;
   private TextView txtContent;

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      // ผูกตัวแปรเข้ากับคอนโทรล
      rbSizeUp = (RadioButton) findViewById(R.id.rbSizeUp);
      rbSizeDown = (RadioButton) findViewById(R.id.rbSizeDown);
      btnChange = (Button) findViewById(R.id.btnChange);
      txtContent = (TextView) findViewById(R.id.txtContent);

      btnChange.setOnClickListener(new OnClickListener() {

         public void onClick(View v) {
            //เรียกใช้งานฟังก์ชั่นเพิ่มลดขนาดตัวอักษร
            changeTextSize();
         }
      });
}

   //ฟังก์ชั่นตรวจสอบว่าผู้ใช้งานต้องการเพิ่มหรือลดขนาดตัวอักษร
   protected void changeTextSize() {

      // ตรวจสอบเมื่อมีการคลิกที่คำสั่งเพิ่มขนาดตัวอักษรหรือลดขนาดตัวอักษร
      if (rbSizeUp.isChecked()) {
         txtContent.setTextSize(fontSize++);
      } else {
         txtContent.setTextSize(fontSize--);
      }

   }
}
</pre>
<p>ทดสอบแอพดูอีกครั้งว่าทำงานได้ตามที่ต้องการหรือไม่ ถ้าได้ตามที่เราต้องการกันแล้วต่อไปจะเป็นการเปลี่ยน <strong>Font</strong> ในแบบที่เราต้องการกันต่อเลยละกันนะครับ</p>
<p>ให้เราสร้างโฟลเดอร์ขึ้นภายในโฟลเดอร์ <strong>Asset</strong> แล้วตั้งชื่อว่า <strong>fonts</strong> จากนั้นก็ให้เรา <strong>Copy ไฟล์ Font</strong> ของเรามาไว้ในโฟล์เดอร์นี้</p>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1557" class="wp-caption aligncenter" style="width: 610px;">
<dt class="wp-caption-dt"><img class="size-large wp-image-1557" src="http://apricotion.org/wp-content/uploads/2012/02/10-2-2555-23-05-41-600x527.png" alt="ขั้นตอนการสร้างโฟลเดอร์ Font" width="600" height="527" /></dt>
<dd class="wp-caption-dd">ขั้นตอนการสร้างโฟลเดอร์ Font</dd>
</dl>
</div>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1554" class="wp-caption aligncenter" style="width: 519px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1554" src="http://apricotion.org/wp-content/uploads/2012/02/10-2-2555-23-06-18.png" alt="สร้างโฟล์เดอร์ Fonts" width="509" height="566" /></dt>
<dd class="wp-caption-dd">สร้างโฟล์เดอร์ Fonts</dd>
</dl>
</div>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1555" class="wp-caption aligncenter" style="width: 610px;">
<dt class="wp-caption-dt"><img class="size-large wp-image-1555" src="http://apricotion.org/wp-content/uploads/2012/02/10-2-2555-23-04-35-600x357.png" alt="เลือก Font ที่ต้องการ" width="600" height="357" /></dt>
<dd class="wp-caption-dd">เลือก Font ที่ต้องการ</dd>
</dl>
</div>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1556" class="wp-caption aligncenter" style="width: 610px;">
<dt class="wp-caption-dt"><img class="size-large wp-image-1556" src="http://apricotion.org/wp-content/uploads/2012/02/10-2-2555-23-06-50-600x357.png" alt="Font ที่เราจะใช้งานกัน" width="600" height="357" /></dt>
<dd class="wp-caption-dd">Font ที่เราจะใช้งานกัน</dd>
</dl>
</div>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1558" class="wp-caption aligncenter" style="width: 242px;">
<dt class="wp-caption-dt"><img class="size-large wp-image-1558" src="http://apricotion.org/wp-content/uploads/2012/02/10-2-2555-23-07-11-232x600.png" alt="รายการ Fonts ที่ใช้ในโปรเจค" width="232" height="600" /></dt>
<dd class="wp-caption-dd">รายการ Fonts ที่ใช้ในโปรเจค</dd>
</dl>
</div>
<p>เมื่อเราเตรียม <strong>Font</strong> ที่ต้องการใช้งานเสร็จแล้ว ต่อไปก็จะเป็นการกำหนดให้ ข้อความของเราใช้งาน <strong>Font</strong> ที่เราเตรียมไว้ โดยให้เราแทรกคำสั่งลงไป ดังนี้</p>
<pre class="brush: java; title: ; notranslate">

Typeface _font = Typeface.createFromAsset(getAssets(), &quot;fonts/angsai.ttf&quot;);
txtContent.setTypeface(_font);
</pre>
<p>โดยผมจะเพิ่มไว้ก่อนที่จะทำการ Set Event ให้กับปุ่มคำสั่งของเรานะครับ ซึ่งจะอยู่ใน Method OnCreate นะครับ ข่างล่างนี่จะเป็นคำสั่งทั้งหมดที่อยู่ในไฟล์ FontThaiActivity.java นะครับ</p>
<pre class="brush: java; title: ; notranslate">

package com.ai.fontthai;

import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TextView;

public class FontThaiActivity extends Activity {

   private float fontSize = 40;

   private RadioButton rbSizeUp;
   private RadioButton rbSizeDown;
   private Button btnChange;
   private TextView txtContent;

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      rbSizeUp = (RadioButton) findViewById(R.id.rbSizeUp);
      rbSizeDown = (RadioButton) findViewById(R.id.rbSizeDown);

      btnChange = (Button) findViewById(R.id.btnChange);
      txtContent = (TextView) findViewById(R.id.txtContent);

      Typeface _font = Typeface.createFromAsset(getAssets(), &quot;fonts/angsai.ttf&quot;);
      txtContent.setTypeface(_font);

      btnChange.setOnClickListener(new OnClickListener() {

      public void onClick(View v) {
      // TODO Auto-generated method stub
         changeTextSize();
      }
   });
}

  protected void changeTextSize() {
      if (rbSizeUp.isChecked()) {
         txtContent.setTextSize(fontSize++);
      } else {
         txtContent.setTextSize(fontSize--);
      }

  }
}
</pre>
<p>ลองนำเอาไปประยุกต์ใช้กันดูนะครับ อาจะมีประโยชน์ไม่มากก็น้อยนะครับ <img src='http://apricotion.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://apricotion.org/pretty-font-app-on-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Facebook Batch Request</title>
		<link>http://apricotion.org/facebook-batch-request/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=facebook-batch-request</link>
		<comments>http://apricotion.org/facebook-batch-request/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 02:03:38 +0000</pubDate>
		<dc:creator>adisak</dc:creator>
				<category><![CDATA[Social Media]]></category>
		<category><![CDATA[facebook]]></category>

		<guid isPermaLink="false">http://apricotion.org/?p=1636</guid>
		<description><![CDATA[โดยปกติถ้าเราต้องการข้อมูลจาก facebook เช่นต้องการรายชื่อเพื่อนแค่ 5 คน เราสามารถใช้ Graph API ในการดึงข้อมูลได้ “https://graph.facebook.com/me/friends?limit=5” Batch คือการ call graph api หลายๆ คำสั่งพร้อมกันในเวลาเดียวกันทั้งการ GET POST PUT เราสามารถที่จะดึงข้อมูลจาก หลายๆ object เช่น ดึงข้อมูลของตัวเราเอง และข้อมูลรายชื่อของเพื่อนมาด้วย จากตัวอย่างข้างบน ผลลัพธ์ที่ได้จะมาในรูปแบบของ JSON ประกอบไปด้วย code , status , header , body โดย body จะเป็น string ของ JSON object การใช้งาน batch request แบบ multiple methods เราสามารถใช้ batch request ได้หลาย method พร้อมกันตัวอย่างเช่น เราต้องการดึงข้อมูลของตัวเราเองพร้อมด้วย การ post ข้อความไปยังหน้า wall ของเรา ก็สามารถทำได้ ผลลัพธ์ที่ได้ การอ้างอิงระหว่าง request ที่ส่งไป ในบางกรณีเราต้องดึงข้อมูลจาก facebook มาก่อนจากนั้นค่อยนำข้อมูลที่ได้ส่งไปยัง facebook อีกรอบเพื่อจะให้ได้ข้อมูลที่ต้องการจริงๆ อย่างเช่น ต้องการข้อมูลของเพื่อนที่อยู่ในรายชื่อของเรา request อันแรกจะเป็นการดึงรายชื่อเพื่อนมา 5 คน จากนั้นส่งต่อให้ request อันที่สองเพื่อดึงข้อมูลของเพื่อนแต่ละคนออกมา uid ของเพื่อนที่ได้จาก request อันแรก * name คือชื่อที่ใช้ในการอ้างอิงของ request ผลลัพธ์ที่ได้ จะมาในรูปแบบของ JSON จากตัวอย่างจะเห็นว่า request อันแรกจะได้ค่ามาเป็น Null เพราะ request เป็น ผลลัพธ์ไว้สำหรับ ...]]></description>
			<content:encoded><![CDATA[<p>โดยปกติถ้าเราต้องการข้อมูลจาก facebook เช่นต้องการรายชื่อเพื่อนแค่ 5 คน เราสามารถใช้ Graph API ในการดึงข้อมูลได้</p>
<p class="note">“https://graph.facebook.com/me/friends?limit=5”<span id="more-1636"></span></p>
<p>Batch คือการ call graph api หลายๆ คำสั่งพร้อมกันในเวลาเดียวกันทั้งการ GET POST PUT เราสามารถที่จะดึงข้อมูลจาก หลายๆ object เช่น ดึงข้อมูลของตัวเราเอง และข้อมูลรายชื่อของเพื่อนมาด้วย</p>
<pre class="brush: jscript; title: ; notranslate">
curl \
-F 'access_token=…' \
-F 'batch=[ \
{&quot;method&quot;: &quot;GET&quot;, &quot;relative_url&quot;: &quot;me&quot;}, \
{&quot;method&quot;: &quot;GET&quot;, &quot;relative_url&quot;: &quot;me/friends?limit=50&quot;} \
]'\

https://graph.facebook.com
</pre>
<p>จากตัวอย่างข้างบน ผลลัพธ์ที่ได้จะมาในรูปแบบของ JSON ประกอบไปด้วย code , status , header , body โดย body จะเป็น string ของ JSON object</p>
<pre class="brush: jscript; title: ; notranslate">
[
    { &quot;code&quot;: 200,
      &quot;headers&quot;:[
          { &quot;name&quot;: &quot;Content-Type&quot;,
            &quot;value&quot;: &quot;text/javascript; charset=UTF-8&quot; }
      ],
      &quot;body&quot;: &quot;{\&quot;id\&quot;:\&quot;…\&quot;}&quot;},
    { &quot;code&quot;: 200,
      &quot;headers&quot;:[
          { &quot;name&quot;:&quot;Content-Type&quot;,
            &quot;value&quot;:&quot;text/javascript; charset=UTF-8&quot;}
      ],
      &quot;body&quot;:&quot;{\&quot;data\&quot;: [{…}]}}
]
</pre>
<h2>การใช้งาน batch request แบบ multiple methods</h2>
<p>เราสามารถใช้ batch request ได้หลาย method พร้อมกันตัวอย่างเช่น เราต้องการดึงข้อมูลของตัวเราเองพร้อมด้วย การ post ข้อความไปยังหน้า wall ของเรา ก็สามารถทำได้</p>
<pre class="brush: jscript; title: ; notranslate">
curl \
–F 'access_token=…' \
-F 'batch=[ \
{ &quot;method&quot;: &quot;POST&quot;, \
&quot;relative_url&quot;: &quot;me/feed&quot;, \
&quot;body&quot;: &quot;message=Test status update&amp;link=https://developers.facebook.com/&quot; \
}, \
{ &quot;method&quot;:&quot;GET&quot;, \
&quot;relative_url&quot;:&quot;me&quot; \
} \
]'\

https://graph.facebook.com
</pre>
<p>ผลลัพธ์ที่ได้</p>
<pre class="brush: jscript; title: ; notranslate">
[
    { &quot;code&quot;: 200,
      &quot;headers&quot;: [
          { &quot;name&quot;:&quot;Content-Type&quot;,
            &quot;value&quot;:&quot;text/javascript; charset=UTF-8&quot;}
       ],
      &quot;body&quot;:&quot;{\&quot;id\&quot;:\&quot;…\&quot;}&quot;
    },
    { &quot;code&quot;: 200,
      &quot;headers&quot;: [
          { &quot;name&quot;:&quot;Content-Type&quot;,
            &quot;value&quot;:&quot;text/javascript; charset=UTF-8&quot;
          },
          { &quot;name&quot;:&quot;ETag&quot;,
            &quot;value&quot;: &quot;…&quot;
          }
      ],
      &quot;body&quot;: &quot;{\&quot;data\&quot;: [{…}]}
    }
]
</pre>
<h2>การอ้างอิงระหว่าง request ที่ส่งไป</h2>
<p>ในบางกรณีเราต้องดึงข้อมูลจาก facebook มาก่อนจากนั้นค่อยนำข้อมูลที่ได้ส่งไปยัง facebook อีกรอบเพื่อจะให้ได้ข้อมูลที่ต้องการจริงๆ อย่างเช่น<br />
<strong>ต้องการข้อมูลของเพื่อนที่อยู่ในรายชื่อของเรา</strong><br />
request อันแรกจะเป็นการดึงรายชื่อเพื่อนมา 5 คน จากนั้นส่งต่อให้ request อันที่สองเพื่อดึงข้อมูลของเพื่อนแต่ละคนออกมา uid ของเพื่อนที่ได้จาก request อันแรก</p>
<p class="note">* name คือชื่อที่ใช้ในการอ้างอิงของ request</p>
<pre class="brush: jscript; title: ; notranslate">
curl \
   -F 'access_token=...' \
   -F 'batch=[{ &quot;method&quot;: &quot;GET&quot;, \
                &quot;name&quot; : &quot;get-friends&quot;, \
                &quot;relative_url&quot;: &quot;me/friends?limit=5&quot;, \
              }, \
              { &quot;method&quot;: &quot;GET&quot;, \
                &quot;relative_url&quot;: &quot;?ids={result=get-friends:$.data.*.id}&quot; \
              }]' \

https://graph.facebook.com/
</pre>
<p>ผลลัพธ์ที่ได้ จะมาในรูปแบบของ JSON</p>
<pre class="brush: jscript; title: ; notranslate">
[
    null,
    { &quot;code&quot;: 200,
      &quot;headers&quot;:[
          { &quot;name&quot;:&quot;Content-Type&quot;,
            &quot;value&quot;:&quot;text/javascript; charset=UTF-8&quot;}
      ],
      &quot;body&quot;:&quot;{\&quot;data\&quot;: [{…}]}}
]
</pre>
<p class="note">จากตัวอย่างจะเห็นว่า request อันแรกจะได้ค่ามาเป็น Null เพราะ request เป็น ผลลัพธ์ไว้สำหรับ request ต่อไปจึงไม่มีการ return ค่ามาให้ แต่เราสามารถสั่งให้ฝั่ง Facebook ส่งค่ามาให้ด้วยโดยการเพิ่ม &#8220;omit_response_on_success&#8221;:false ใน request ได้</p>
]]></content:encoded>
			<wfw:commentRss>http://apricotion.org/facebook-batch-request/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ข้อแนะนำการทำ SEO อย่างถูกวิธีโดยกูเกิ้ล (ตอนที่ 6: SEO for Mobile Phones)</title>
		<link>http://apricotion.org/%e0%b9%81%e0%b8%99%e0%b8%b0%e0%b8%99%e0%b8%b3%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%97%e0%b8%b3-seo-%e0%b9%82%e0%b8%94%e0%b8%a2-google-seo-for-mobile-phones/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e0%25b9%2581%25e0%25b8%2599%25e0%25b8%25b0%25e0%25b8%2599%25e0%25b8%25b3%25e0%25b8%2581%25e0%25b8%25b2%25e0%25b8%25a3%25e0%25b8%2597%25e0%25b8%25b3-seo-%25e0%25b9%2582%25e0%25b8%2594%25e0%25b8%25a2-google-seo-for-mobile-phones</link>
		<comments>http://apricotion.org/%e0%b9%81%e0%b8%99%e0%b8%b0%e0%b8%99%e0%b8%b3%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%97%e0%b8%b3-seo-%e0%b9%82%e0%b8%94%e0%b8%a2-google-seo-for-mobile-phones/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 03:27:28 +0000</pubDate>
		<dc:creator>attaweej</dc:creator>
				<category><![CDATA[Search Engine Marketing]]></category>
		<category><![CDATA[Google Webmaster Tools]]></category>
		<category><![CDATA[Mobile Search]]></category>
		<category><![CDATA[Mobile Site]]></category>
		<category><![CDATA[Responsive Design]]></category>

		<guid isPermaLink="false">http://apricotion.org/?p=1609</guid>
		<description><![CDATA[โพสนี้ก็มาถึงตอนที่ 6 แล้วนะครับผม สำหรับข้อแนะนำการทำ SEO โดย Google โดยในโพสนี้จะพูดถึงการทำ SEO สำหรับเว็บที่แสดงอยู่บนพวกอุปกรณ์บนมือถือครับ ซึ่งต้องยอมรับกันนะครับว่า ในยุคสมัยนี้พวกเราแทบจะทุกคนต้องเคยเข้าเว็บไซต์ต่างๆ ผ่านทางอุปกรณ์มือถือกันทั้งนั้น ไม่ว่าจะเป็น iPhone, iPad แล้วก็พวกอุปกรณ์ที่เป็น Android ต่างๆ ซึ่งทาง Google ก็ได้ทำการวิจัยถึงพฤติกรรมการซื้อของ Online ผ่านทางมือถือ มาให้เราได้อ่านกัน ซึ่งพอจะสรุปได้ว่าถ้าเว็บไหนที่ยังไม่ได้ทำการปรับแต่งให้สามารถใช้งานได้ง่ายๆ บนมือถือแล้ว ก็อาจจะเสียโอกาสในการเปลี่ยนพวกเค้าเหล่านั้นให้กลายมาเป็นลูกค้าของเราในอนาคตได้เหมือนกันครับ ทีนี้มาดูคำแนะนำของทาง Google กันครับว่า เราควรจะทำ SEO สำหรับเว็บไซต์ในเวอร์ชั่นสำหรับมือถือ (Mobile Site) ของเรายังไง ให้ถูกใจอากู๋เค้าครับผม บอกให้ Google รู้ว่าเว็บเราก็มี Mobile Site นะ (Notify Google of mobile sites) ปรับแต่งเว็บสำหรับมือถือเพื่อให้ Google มาเก็บ Index ได้อย่างถูกต้อง (Configure mobile sites so that they can be indexed accurately) เนื่องจากว่าการงานเว็บผ่านทางพวกโน๊ตบุ๊กหรือว่าพีซีปกตินั้น จะแตกต่างกับการใช้งานเว็บไซต์ผ่านทางมือถือ เนื่องด้วยขนาดของหน้าจอมือถือมันเล็กกว่ามาก ดังนั้นข้อมูลหรือว่าเนื้อหาต่างๆ บนเว็บนั้น ก็ควรจะถูกทำให้แสดงแตกต่างกัน ระหว่างเวอร์ชั่นที่ใช้บนพีซี กับเวอร์ชั่นที่ใช้แสดงบนมือถือครับ พูดอีกแบบนึงก็คือ User Experience ของผู้ใช้เว็บมันแตกต่างกันนั่นเองครับ มั่นใจว่าเว็บที่เป็น Mobile Site ของเราถูกเก็บไว้ในฐานข้อมูลของ Google (Verify that your mobile site is indexed by Google) วิธีการเช็คก็ง่ายๆ ครับ ให้เราเข้าไปที่ Google ที่เป็น Mobile Search ครับ (http://www.google.com/m/) แล้วก็พิมพ์ ...]]></description>
			<content:encoded><![CDATA[<p>โพสนี้ก็มาถึงตอนที่ 6 แล้วนะครับผม สำหรับ<a href="http://apricotion.org/%E0%B9%81%E0%B8%99%E0%B8%B0%E0%B8%99%E0%B8%B3%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%97%E0%B8%B3-seo-%E0%B9%82%E0%B8%94%E0%B8%A2-google-introduction/">ข้อแนะนำการทำ SEO โดย Google</a> โดยในโพสนี้จะพูดถึง<strong>การทำ SEO สำหรับเว็บที่แสดงอยู่บนพวกอุปกรณ์บนมือถือ</strong>ครับ ซึ่งต้องยอมรับกันนะครับว่า<span id="more-1609"></span> ในยุคสมัยนี้พวกเราแทบจะทุกคนต้องเคยเข้าเว็บไซต์ต่างๆ ผ่านทางอุปกรณ์มือถือกันทั้งนั้น ไม่ว่าจะเป็น iPhone, iPad แล้วก็พวกอุปกรณ์ที่เป็น Android ต่างๆ ซึ่งทาง Google ก็ได้ทำการวิจัยถึง<a href="http://blog.maxions.com/mobile-stat/">พฤติกรรมการซื้อของ Online ผ่านทางมือถือ</a> มาให้เราได้อ่านกัน ซึ่งพอจะสรุปได้ว่าถ้าเว็บไหนที่ยังไม่ได้ทำการปรับแต่งให้สามารถใช้งานได้ง่ายๆ บนมือถือแล้ว ก็อาจจะเสียโอกาสในการเปลี่ยนพวกเค้าเหล่านั้นให้กลายมาเป็นลูกค้าของเราในอนาคตได้เหมือนกันครับ</p>
<p>ทีนี้มาดูคำแนะนำของทาง Google กันครับว่า <strong>เราควรจะทำ SEO สำหรับเว็บไซต์ในเวอร์ชั่นสำหรับมือถือ (Mobile Site) ของเรายังไง</strong> ให้ถูกใจอากู๋เค้าครับผม</p>
<h2>บอกให้ Google รู้ว่าเว็บเราก็มี Mobile Site นะ (Notify Google of mobile sites)</h2>
<h3 style="border-bottom: 1px solid #ccc;">ปรับแต่งเว็บสำหรับมือถือเพื่อให้ Google มาเก็บ Index ได้อย่างถูกต้อง (Configure mobile sites so that they can be indexed accurately)</h3>
<p>เนื่องจากว่าการงานเว็บผ่านทางพวกโน๊ตบุ๊กหรือว่าพีซีปกตินั้น จะแตกต่างกับการใช้งานเว็บไซต์ผ่านทางมือถือ เนื่องด้วยขนาดของหน้าจอมือถือมันเล็กกว่ามาก ดังนั้นข้อมูลหรือว่าเนื้อหาต่างๆ บนเว็บนั้น ก็ควรจะถูกทำให้แสดงแตกต่างกัน ระหว่างเวอร์ชั่นที่ใช้บนพีซี กับเวอร์ชั่นที่ใช้แสดงบนมือถือครับ พูดอีกแบบนึงก็คือ <strong>User Experience ของผู้ใช้เว็บมันแตกต่างกันนั่นเองครับ</strong></p>
<h3 style="border-bottom: 1px solid #ccc;">มั่นใจว่าเว็บที่เป็น Mobile Site ของเราถูกเก็บไว้ในฐานข้อมูลของ Google (Verify that your mobile site is indexed by Google)</h3>
<p>วิธีการเช็คก็ง่ายๆ ครับ ให้เราเข้าไปที่ Google ที่เป็น <strong>Mobile Search</strong> ครับ (<a href="http://www.google.com/m/">http://www.google.com/m/</a>) แล้วก็พิมพ์ site:yourdomain.com (Google เรียกว่า <a href="http://www.google.com/support/webmasters/bin/answer.py?answer=35256">site: operator</a>) เข้าไปตรงช่องที่ให้ใส่คำค้นหาครับ ถ้ามีเว็บของเราขึ้นมาก็แสดงว่าไม่มีปัญหาอะไร แต่ถ้าไม่เจอเว็บของเราล่ะ (ก็งานเข้ากันเลยซิครับ) ให้พวกเราลองเช็คดูตามนี้ก่อนครับ</p>
<ol>
<li><strong>Googlebot อาจจะไม่สามารถไต่มาเจอเว็บ Mobile Site ของเราได้</strong> (Googlebot may not be able to find your site) วิธีนึงที่ควรทำก็คือ สร้าง <a href="http://support.google.com/webmasters/bin/topic.py?hl=en&amp;topic=8493">Mobile Sitemap</a> แล้วก็ Submit ไปที่ Google Webmaster Tools เหมือนกับการทำ SEO สำหรับเว็บเวอร์ชั่นปกติเลยครับ (อ่านเพิ่มเติมได้ใน<a href="http://apricotion.org/%E0%B9%81%E0%B8%99%E0%B8%B0%E0%B8%99%E0%B8%B3%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%97%E0%B8%B3-seo-%E0%B9%82%E0%B8%94%E0%B8%A2-google-improving-site-structure/">ข้อแนะนำการทำ SEO โดย Google ตอนที่ 3: Improving Site Structure</a> ครับ)</li>
<li>เป็นไปได้ว่า <strong>Googlebot ไม่สามารถเข้ามาเข้าถึงเว็บ Mobile Site</strong> ของเราได้ครับ (Googlebot may not be able to access your site) คือบางทีนักพัฒนาอาจจะไม่อนุญาติให้พวก Robots ทำการเข้าถึงเว็บ Mobile Site ได้ ซึ่งทาง Google จะใช้ชื่อเรียก Robot ที่จะคอยไต่ไปตามเว็บ Mobile Sites ต่างๆ ว่า &#8220;Googlebot-Mobile&#8221; ก็ให้เราทำการแก้ไขแล้วก็ยอมให้ไอ้เจ้า Robot ตัวนี้สามารถเข้าถึงเว็บ Mobile Site ของเราได้ก็เป็นอันเรียบร้อยครับ</li>
</ol>
<h3 style="border-bottom: 1px solid #ccc;">เช็คให้ดีว่า Google สามารถเข้าใจแล้วก็อ่านพวกเนื้อหาต่างๆ ที่อยู่ในลิงค์ Mobile Site ได้ (Verify that Google can recognize your mobile URLs)</h3>
<p>คือปกติเราจะใช้ HTML เป็นภาษามาตรฐานสำหรับการสร้างหน้าเว็บเพจ ทีนี้ถ้าเป็นเวอร์ชั่น Mobile Site ก็จะมีพวก <em>XHTML Mobile</em> หรือ <em>Compact HTML</em> เพิ่มเข้ามาเป็นต้น นักพัฒนาเว็บไซต์ก็ต้องใช้ให้ถูกต้องตามมาตรฐานที่เค้ามีมาให้นะครับผม (อ่านเพิ่มเติมได้ที่ <a href="http://www.google.com/support/webmasters/bin/answer.py?answer=72462">Mobile Webmaster Guidelines</a>)</p>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1628" class="wp-caption aligncenter" style="width: 517px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1628" title="DTD for Mobile Devices" src="http://apricotion.org/wp-content/uploads/2012/03/dtd-mobile-devices.jpg" alt="DTD for Mobile Devices" width="507" height="165" /></dt>
<dd class="wp-caption-dd">ตัวอย่างของ DTD (Doc Type Definition) สำหรับอุปกรณ์มือถือ</dd>
</dl>
</div>
<h2>เข้าเว็บผ่านทางมือถือ ก็ควรต้องเป็นเว็บเวอร์ชั่น Mobile Site นะ (Guide mobile users accurately)</h2>
<h3 style="border-bottom: 1px solid #ccc;">เว็บปกติสำหรับคนเข้าผ่านทางเดสก์ทอป ส่วนคนเข้าเว็บผ่านทางมือถือก็ต้องเป็นเวอร์ชั่นสำหรับมือถือ (Running desktop and mobile versions of your site)</h3>
<p>ทีนี้ปัญหามันจะเกิดขึ้นก็ต่อเมื่อ 1. เราเข้าเว็บผ่านทางมือถือ แต่ดันเปิดไปเจอหน้าเว็บแบบปกติ หรือว่า 2. เราเข้าเว็บผ่านทางโน๊ตบุ๊คหรือว่าเดสก์ทอป แต่ดันไปเจอเว็บที่เป็นเวอร์ชั่นสำหรับมือถือซะนี่</p>
<p>ทีนี้มาดูข้อแนะนำที่เราควรทำกันครับ</p>
<h3 style="border-bottom: 1px solid #ccc;">ถ้าเข้าเว็บผ่านมือถือก็ควร Redirect ไปยังเว็บที่เป็นเวอร์ชั่น Mobile Site (Redirect mobile users to the correct version)</h3>
<p>นักพัฒนาเว็บไซต์ก็ควรจะทำการเช็คก่อนว่าเราเข้าเว็บไซต์ผ่านทางอุปกรณ์อะไร แล้วก็ทำการ Redirect ไปยังเว็บที่เป็นเวอร์ชั่นที่ถูกต้องสำหรับอุปกรณ์นั้นๆ ครับ</p>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1617" class="wp-caption aligncenter" style="width: 390px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1617" title="Redirect Mobile User" src="http://apricotion.org/wp-content/uploads/2012/03/redirect-mobile-user.jpg" alt="Redirect Mobile User" width="380" height="559" /></dt>
<dd class="wp-caption-dd">ถ้าเราเข้าเว็บผ่านทางมือถือ ก็ควรจะ Redirect ให้ไปยังหน้าเว็บที่เป็นเวอร์ชั่น Mobile Site</dd>
</dl>
</div>
<h3 style="border-bottom: 1px solid #ccc;">ปรับเปลี่ยนเนื้อหาให้เข้ากับการใช้งาน (Switch content based on User-agent)</h3>
<p>ในกรณีที่เรามีเว็บไซต์ที่ออกแบบมาให้สามารถใช้งานได้ ทั้งในเวอร์ชั่นที่เป็นเดสก์ทอป แล้วก็ที่เป็นพวกอุปกรณ์มือถือต่างๆ ด้วย เช่น การนำเทคนิคที่เรียกว่า <strong>Responsive Design</strong> มาใช้ในการออกแบบเว็บไซต์ ซึ่งวิธีการนี้เราไม่จำเป็นต้องทำการ Redirect ไปยังหน้าเว็บที่เป็นเวอร์ชั่นสำหรับมือถือ (ในกรณีที่เข้าเว็บผ่านทางมือถือ) <strong>แต่เทคนิคนี้จะทำการปรับแต่งรูปแบบการแสดงเนื้อหาของเว็บให้เข้ากับขนาดหน้าจอของอุปกรณ์ต่างๆ ได้เองโดยอัตโนมัติ</strong> (ซึ่งเทคนิคนี้กำลังเป็นที่นิยมเป็นอย่างมากในตอนนี้ เนื่องจากประหยัดเวลา และต้นทุนในการพัฒนาเว็บไซต์ได้ เมื่อเทียบกับการพัฒนาเว็บขึ้นมาอีกเวอร์ชั่นนึงที่เป็น Mobile Site โดยเฉพาะ)</p>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1615" class="wp-caption aligncenter" style="width: 407px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1615" title="Content by user agent" src="http://apricotion.org/wp-content/uploads/2012/03/content-by-user-agent.jpg" alt="แสดงเนื้อหาให้เหมาะกับผู้ใช้งาน" width="397" height="507" /></dt>
<dd class="wp-caption-dd">แสดงเนื้อหาให้เหมาะกับผู้ใช้งานผ่านทางอุปกรณ์ต่างๆ เพื่อสร้าง User Experience ที่ดีให้กับผู้ใช้งาน</dd>
</dl>
</div>
<p class="note">*<strong>หมายเหตุ</strong>: ตรงส่วนของย่อหน้าด้านบนนี้ ไม่ได้มีอยู่ในต้นฉบับ <strong>Search Engine Optimization Starter Guide</strong> แต่เป็นส่วนเสริมที่ผมเห็นว่าเป็นสิ่งที่ผู้อ่านควรรู้จักถึง<strong>เทคนิคการออกแบบเว็บไซต์ที่เรียกว่า Responsive Design</strong> กันครับผม</p>
<p>ครับเป็นอันเรียบร้อยสำหรับข้อแนะนำต่างๆ สำหรับ<strong>การทำ SEO สำหรับเว็บที่เป็น Mobile Site</strong> นะครับผม ส่วนในโพสหน้าผมจะมาเขียนถึง<strong>วิธีการโปรโมทเว็บไซต์</strong>ของเรารวมไปถึง<strong>การวิเคราะห์ข้อมูลต่างๆ บนเว็บไซต์</strong>ของเราด้วยครับผม</p>
<p>ขอบคุณที่ติดตามครับ สำหรับเพื่อนๆ พี่ๆ น้องๆ ที่มีคำแนะนำหรือจะติชม ก็สามารถคอมเม๊นท์มาได้เลยนะครับผม ขอบคุณมากเลยครับ <img src='http://apricotion.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://apricotion.org/%e0%b9%81%e0%b8%99%e0%b8%b0%e0%b8%99%e0%b8%b3%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%97%e0%b8%b3-seo-%e0%b9%82%e0%b8%94%e0%b8%a2-google-seo-for-mobile-phones/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>การใช้ Script ส่งไปยัง iFrame เพื่อเรียก URL และ รับส่งข้อมูลกัน</title>
		<link>http://apricotion.org/script-iframe-url/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=script-iframe-url</link>
		<comments>http://apricotion.org/script-iframe-url/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 03:44:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Web Development & Design]]></category>
		<category><![CDATA[iframe]]></category>

		<guid isPermaLink="false">http://apricotion.org/?p=1586</guid>
		<description><![CDATA[การใช้ Script ส่งไปยัง iFrame เพื่อเรียก URL และ รับส่งข้อมูลกัน หลักการมีดังนี้ iframe Load Page แม่ตามรูป กดปุ่ม Send Data หรือปุ่มด้าน ซ้ายเพื่อเรียก Java Script เพื่อ Load iFrame iFrame ส่งค่ากลับมาโดยยัดเข้าไปยัง Tage label ของ Page แม่ กดปุ่ม Get Data เมื่อกดปุ่มนี้จะเรียก Function ใน iframe เพื่อ Return ค่าออกมาตามรูป ได้มาจาก iframe กดปุ่มใน iFrame ซึ่งปุ่มนี้จะเป็นปุ่มและ function ที่อยู่ใน iframe เพื่อแสดงให้เห็นว่าการทำงานใร iFrame จะส่งข้อมูลออกมายังไง Index.html TestiFrame1.aspx TestiFrame1.aspx]]></description>
			<content:encoded><![CDATA[<p>การใช้ Script ส่งไปยัง iFrame เพื่อเรียก URL และ รับส่งข้อมูลกัน</p>
<p>หลักการมีดังนี้</p>
<div class="mceTemp" draggable="">
<dl id="attachment_1587" class="wp-caption alignnone" style="width: 391px;">
<dt class="wp-caption-dt"><a href="http://apricotion.org/wp-content/uploads/2012/03/iframe-1.gif" rel="lightbox[1586]"><img class="size-full wp-image-1587" title="iframe-1" src="http://apricotion.org/wp-content/uploads/2012/03/iframe-1.gif" alt="" width="381" height="277" /></a></dt>
<dd class="wp-caption-dd">iframe</dd>
</dl>
</div>
<p><span id="more-1586"></span></p>
<ol>
<li>Load Page แม่ตามรูป</li>
<li>กดปุ่ม Send Data หรือปุ่มด้าน ซ้ายเพื่อเรียก Java Script เพื่อ Load iFrame</li>
<li>iFrame ส่งค่ากลับมาโดยยัดเข้าไปยัง Tage label ของ Page แม่</li>
<li>กดปุ่ม Get Data เมื่อกดปุ่มนี้จะเรียก Function ใน iframe เพื่อ Return ค่าออกมาตามรูป
<div class="mceTemp" draggable="">
<dl id="attachment_1588" class="wp-caption alignnone" style="width: 578px;">
<dt class="wp-caption-dt"><a href="http://apricotion.org/wp-content/uploads/2012/03/iframe-2.gif" rel="lightbox[1586]"><img class="size-full wp-image-1588" title="iframe-2" src="http://apricotion.org/wp-content/uploads/2012/03/iframe-2.gif" alt="" width="568" height="319" /></a></dt>
<dd class="wp-caption-dd">ได้มาจาก iframe</dd>
</dl>
</div>
</li>
<li>กดปุ่มใน iFrame ซึ่งปุ่มนี้จะเป็นปุ่มและ function ที่อยู่ใน iframe เพื่อแสดงให้เห็นว่าการทำงานใร iFrame จะส่งข้อมูลออกมายังไง</li>
</ol>
<h2>Index.html</h2>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://apricotion.org/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://apricotion.org/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://apricotion.org/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://apricotion.org/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="csharp" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="sy0">&lt;!</span>DOCTYPEhtmlPUBLIC<span class="st0">&quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span><span class="st0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span><span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>htmlxmlns<span class="sy0">=</span><span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span><span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>head<span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>title<span class="sy0">&gt;&lt;/</span>title<span class="sy0">&gt;</span></div></li><li class="li2"><div class="de2"><span class="sy0">&lt;/</span>head<span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>body<span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1">Result From iFrame <span class="sy0">:</span> <span class="sy0">&lt;</span>labelid<span class="sy0">=</span><span class="st0">&quot;lblResult&quot;</span><span class="sy0">&gt;&lt;/</span>label<span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>hr<span class="sy0">/&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>inputtype<span class="sy0">=</span><span class="st0">&quot;button&quot;</span>value<span class="sy0">=</span><span class="st0">&quot;Send Data to iFrame vie URL&quot;</span>onclick<span class="sy0">=</span><span class="st0">&quot;ifmData.location='TestiFrame1.aspx'&quot;</span><span class="sy0">/&gt;</span></div></li><li class="li2"><div class="de2"><span class="sy0">&lt;</span>inputtype<span class="sy0">=</span><span class="st0">&quot;button&quot;</span>value<span class="sy0">=</span><span class="st0">&quot;Get Data from iFrame&quot;</span>onclick<span class="sy0">=</span><span class="st0">&quot;alert(ifmData.GetData())&quot;</span><span class="sy0">/&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>br<span class="sy0">/&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>iframename<span class="sy0">=</span><span class="st0">&quot;ifmData&quot;</span>style<span class="sy0">=</span><span class="st0">&quot;display:none2&quot;</span><span class="sy0">&gt;&lt;/</span>iframe<span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;/</span>body<span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;/</span>html<span class="sy0">&gt;</span></div></li></ol></pre></div></div>
<h2>TestiFrame1.aspx</h2>
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://apricotion.org/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://apricotion.org/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://apricotion.org/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://apricotion.org/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="csharp" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="sy0">&lt;%</span>@PageLanguage<span class="sy0">=</span><span class="st0">&quot;C#&quot;</span><span class="sy0">%&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;!</span>DOCTYPEhtmlPUBLIC<span class="st0">&quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span><span class="st0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span><span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>htmlxmlns<span class="sy0">=</span><span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span><span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>head<span class="sy0">&gt;&lt;/</span>head<span class="sy0">&gt;</span></div></li><li class="li2"><div class="de2"><span class="sy0">&lt;</span>body<span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>inputtype<span class="sy0">=</span><span class="st0">&quot;button&quot;</span>value<span class="sy0">=</span><span class="st0">&quot;Send Data Back to Parent Page&quot;</span>onclick<span class="sy0">=</span><span class="st0">&quot;parent.lblResult.innerHTML='Send Data to Parent is '+Math.random()&quot;</span><span class="sy0">/&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;</span>script<span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1">	parent.<span class="me1">lblResult</span>.<span class="me1">innerHTML</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;b style='color:red'&gt;ได้มาจาก iFrame ตอน Load ครั้งแรก &quot;</span> <span class="sy0">+</span> Math.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot; &lt;/b&gt;&quot;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">	function GetData<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">		<span class="kw1">return</span> Math.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">	<span class="br0">&#125;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;/</span>body<span class="sy0">&gt;</span></div></li><li class="li1"><div class="de1"><span class="sy0">&lt;/</span>html<span class="sy0">&gt;</span></div></li></ol></pre></div></div>TestiFrame1.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://apricotion.org/script-iframe-url/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Custom Variables : การวัดผลที่ก้าวข้ามขีดจำกัดของ Google Anlaytics</title>
		<link>http://apricotion.org/custom-variable/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=custom-variable</link>
		<comments>http://apricotion.org/custom-variable/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 07:21:12 +0000</pubDate>
		<dc:creator>AoMiZ</dc:creator>
				<category><![CDATA[Web Analytics & Lead Optimization]]></category>
		<category><![CDATA[custom var]]></category>
		<category><![CDATA[custom variable]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[google analytics]]></category>

		<guid isPermaLink="false">http://apricotion.org/?p=1545</guid>
		<description><![CDATA[เนื่องจาก Default ของ Google Analytics ไม่สามารถวัดผลได้ทุกอย่างครับ และเว็บไซต์ต่างๆ ก็มีข้อมูลหรือสิ่งที่ต้องการวัดไม่เหมือนกัน ดังนั้นเพื่อเพิ่มประสิทธิภาพในการวัดผลได้ตามใจเรามากขึ้น Google จึงให้เราสามารถสร้างตัวแปรขึ้นมาเองได้ครับ เราเรียกส่วนนี้ว่า Custom Variable (CVs) รูปแบบ Code เป็นดังนี้ครับ _gaq.push(&#8216;_setCustomVar&#8217;, index,&#8217;name&#8217;,'value&#8217;, scope); ผมรู้สึกว่า CVs มีประโยชน์มากๆ ดังนั้นจึงได้เขียนบทความนี้มาเพื่อแชร์ให้เพื่อนๆ ได้รู้จักกับ CVs กันครับ เราจะมาดูกันว่า มันคืออะไร ตัวอย่างการประยุกต์ใช้งาน และตัวอย่าง Code ง่ายๆ กันครับ เริ่มด้วยการอธิบาย ตัวแปรต่างๆ ใน Code กันก่อนเลยดีกว่า ก็จะมีหลักๆ ด้วยกัน 4 ตัวครับ Name Value Index Scope Name &#38; Value Format ของ CVs เป็นแบบ Name-Value pair หมายความว่าเราสามารถกำหนดตัวแปร (Key) อะไรก็ได้ที่เราต้องการขึ้นมา และต้องกำหนดค่าตัวแปร (value) ให้มัน ยกตัวอย่างเช่น ผมกำหนดตัวแปร (key) เป็นชื่อคนเขียน บล็อค Author และกำหนดค่าตัวแปร (value) คือชื่อของนักเขียนแต่ละคนได้แก่ Aui, Parn, Piin เป็นต้นครับ ข้อจำกัดอย่างเดียวที่มีคือ Name &#38; Value ที่เราสร้างรวมกันห้ามเกิน 64 Characters ครับ Index สำหรับ Index เป็นเหมือนตัวจัดเก็บ CVs ทั้งหมด โดยเก็บไว้ใน slot index มีทั้งหมด 5 slot สิ่งที่เราต้องใส่ใน code คือ เลข 1-5 เพื่อเป็นการระบุว่าจะให้เก็บข้อมูลไว้ใน ...]]></description>
			<content:encoded><![CDATA[<p>เนื่องจาก Default ของ <strong>Google Analytics</strong> <span style="text-decoration: underline;">ไม่สามารถวัดผลได้ทุกอย่างครับ</span> และเว็บไซต์ต่างๆ ก็มีข้อมูลหรือสิ่งที่ต้องการวัดไม่เหมือนกัน ดังนั้น<span style="text-decoration: underline;">เพื่อเพิ่มประสิทธิภาพในการวัดผลได้ตามใจเรามากขึ้น</span><span id="more-1545"></span> <strong>Google จึงให้เราสามารถสร้างตัวแปรขึ้นมาเองได้ครับ</strong> เราเรียกส่วนนี้ว่า <strong>Custom Variable (CVs)</strong></p>
<p><span style="color: #ff0000;">รูปแบบ Code เป็นดังนี้ครับ _gaq.push(&#8216;_setCustomVar&#8217;, index,&#8217;name&#8217;,'value&#8217;, scope);</span></p>
<p>ผมรู้สึกว่า CVs มีประโยชน์มากๆ ดังนั้นจึงได้เขียนบทความนี้มาเพื่อแชร์ให้เพื่อนๆ ได้รู้จักกับ CVs กันครับ เราจะมาดูกันว่า มันคืออะไร ตัวอย่างการประยุกต์ใช้งาน และตัวอย่าง Code ง่ายๆ กันครับ</p>
<p>เริ่มด้วยการอธิบาย <strong>ตัวแปรต่างๆ ใน Code</strong> กันก่อนเลยดีกว่า ก็จะมีหลักๆ ด้วยกัน 4 ตัวครับ<br />
<strong>Name</strong><br />
<strong> Value</strong><br />
<strong> Index</strong><br />
<strong> Scope</strong></p>
<p><span style="color: #339966;"><strong><span style="text-decoration: underline;">Name &amp; Value</span></strong></span></p>
<p>Format ของ CVs เป็นแบบ Name-Value pair หมายความว่าเราสามารถกำหนดตัวแปร (Key) อะไรก็ได้ที่เราต้องการขึ้นมา และต้องกำหนดค่าตัวแปร (value) ให้มัน ยกตัวอย่างเช่น ผมกำหนดตัวแปร (key) เป็นชื่อคนเขียน บล็อค Author และกำหนดค่าตัวแปร (value) คือชื่อของนักเขียนแต่ละคนได้แก่ Aui, Parn, Piin เป็นต้นครับ ข้อจำกัดอย่างเดียวที่มีคือ Name &amp; Value ที่เราสร้างรวมกันห้ามเกิน 64 Characters ครับ</p>
<p><span style="color: #339966;"><strong><span style="text-decoration: underline;">Index</span></strong></span><strong></strong></p>
<p>สำหรับ Index เป็นเหมือนตัวจัดเก็บ CVs ทั้งหมด โดยเก็บไว้ใน slot index มีทั้งหมด 5 slot สิ่งที่เราต้องใส่ใน code คือ เลข 1-5 เพื่อเป็นการระบุว่าจะให้เก็บข้อมูลไว้ใน slot ไหน ถ้าเปรียบเทียบให้เข้าใจง่ายๆ Index 5 slot เปรียบเสมือน ที่จอดรถว่างๆ 5 ช่อง ครับ</p>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1546" class="wp-caption aligncenter" style="width: 298px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1546" src="http://apricotion.org/wp-content/uploads/2012/02/custom-variable1.png" alt="" width="288" height="193" /></dt>
<dd class="wp-caption-dd">ที่จอดรถ</dd>
</dl>
</div>
<p><span style="color: #339966;"><strong><span style="text-decoration: underline;">Scope</span></strong></span></p>
<p>Scope เป็นตัวที่บอกว่าเรากำลังเก็บข้อมูลในส่วนใดอยู่ สิ่งที่เราต้องใส่ใน code คือ เลข 1-3 ครับ สำหรับเลข 1 คือ Visitor Level เลข 2 คือ Session Level และ เลข 3 คือ Page Level ครับ</p>
<p>เพื่อให้เพื่อนๆ เข้าใจมากขึ้น ผมจะอธิบาย<strong> Model ของ Google Analytics</strong> ให้ครับ ดูจากภาพ</p>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1547" class="wp-caption aligncenter" style="width: 380px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1547 " src="http://apricotion.org/wp-content/uploads/2012/02/custom-variable2.png" alt="" width="370" height="268" /></dt>
<dd class="wp-caption-dd">model</dd>
</dl>
</div>
<ul>
<li><strong>Visitor คือระดับผู้เยี่ยมชม หรือคนเข้าเว็บ ซึ่งอยู่บนสุด</strong></li>
<li><strong>ระดับที่สองคือ Session คือการเข้าเยี่ยมชมเว็บไซต์</strong></li>
<li><strong>และระดับที่สาม คือ Page คือหน้าเว็บไซต์แต่ละหน้าที่เราเยียมชม</strong></li>
</ul>
<p>คนหนึ่งคน อาจจะเข้าเว็บได้หลายครั้ง แต่ละครั้งดูเพจ ไม่เท่ากัน ในที่นี้ คนเล่นเว็บก็คือ Visitor การเข้าเว็บแต่ละครั้งคือ session และการดูหน้าเว็บแต่ละหน้าก็คือ page ครับ</p>
<p><span style="color: #ff0000;">สิ่งที่ยากที่สุดของ CVs คือการใส่ค่า Slot กับ Scope นี่แหละครับ</span></p>
<p><span style="text-decoration: underline;"><strong>เราจะบริหารจัดการ Slot กับ scope ได้อย่างไร</strong></span></p>
<p>มาดูกันเลยครับเพราะว่าถ้าเรากำหนดผิด ข้อมูลมันจะซ้อนทับกันครับ คิดแบบนี้ครับ ถ้า slot เปรียบเสมือนทีจอดรถ ให้คิดซะว่า scope เปรียบเหมือนกับ รถยนต์ การที่เราจะใช้ slot ได้อย่างเต็มประสิทธิภาพนั้นต้องเข้าใจการเลือกใช้ scope ครับ เพราะ scope แต่ละแบบ จะมีอายุของการเก็บข้อมูลไม่เท่ากันครับ การที่เรารู้อายุของ scope ทำให้เราเรียกใช้ slot ซ้ำกันได้โดยที่ข้อมูลไม่ถูกซ้อนทับครับ เปรียบเทียบง่ายๆ ว่าเรามีที่จอดรถจำกัดแค่ 5 ช่อง จะบริหารจัดการอย่างไร ให้จอดรถได้ไม่ซ้อนคันกันนั่นเอง</p>
<p><strong>Visitor (Scope 1)</strong></p>
<p>ถ้าใช้ scope นี้เก็บข้อมูลใน slot แล้ว ข้อมูลใน slot นี้จะอยู่ยาวนานไปอีก 2 ปี เนื่องจากค่า cookie _utmv ครับ slot นี้จะไม่สามารถเอามาใช้งานได้อีก ถ้าเราเอาข้อมูลไปใส่ใน slot ซ้ำ ข้อมูลเก่าก็จะถูกลบไปครับ ถ้าเปรียบเทียบกับที่จอดรถ รถที่จอดในช่องนี้เปรียบเสมือนรถที่ยางแตก แถมเครื่องเสียครับ ช่องจอดรถนี้จึงไม่สามารถใช้ได้อีก ตัวอย่างของการใช้ Visitor Level มักจะเป็นข้อมูลที่ไม่เปลียนแปลง และคงอยู่ตลอดไป แม้ว่าจะออกจากเว็บไปแล้วก็ตามเช่น แบ่งแยก คนซื้อของหนึ่งครั้ง, คนที่ซื้อของซ้ำ 2-5 ครั้ง, คนที่ซื้อของ 6-10 ครั้ง อีกกรณีเช่น การรแบ่งระดับของ member เป็น Free, Bronze, Gold, และ Platinum เป็นต้น</p>
<p><strong>Session (Scope 2)</strong></p>
<p>ถ้าใช้ scope นี้เก็บข้อมูลใน slot แล้ว ข้อมูลใน slot นี้จะอยู่ไปจนกว่าผู้เยี่ยมชมจะออกจากเว็บไซต์ไป  เปรียบเทียบกับที่จอดรถ รถที่จอดในช่องนี้จอดเต็มวัน พอหมดวันก็ขับออกไป ช่องนี้ก็สามารถให้คันใหม่มาจอดแทนได้ ตัวอย่างของการใช้ Session Level มักจะเป็นข้อมูลที่อยู่ตลอดขณะเข้าเว็บหนึ่งครั้ง พอคนออกจากเว็บ slot ก็จะสามารถใช้งานซ้ำได้ เช่น  Login หรือ ไม่ Login  อีกกรณี เช่น เป็น Member หรือแค่ Visitor ธรรมดา</p>
<p><strong>Page (Scope 3)</strong></p>
<p>ถ้าใช้ scope นี้เก็บข้อมูลใน slot แล้ว ข้อมูลใน slot นี้จะอยู่ไปจนกว่าผู้เยี่ยมชมจะเปลียนหน้าเว็บไซต์เป็นหน้าอื่น เปรียบเทียบกับที่จอดรถแล้ว รถที่จอดในช่องนี้เหมือนกับรถที่มาแป๊บเดียว สตาร์ทรถทิ้งไว้ แล้วอีก 5 นาทีก็จะออกไป ช่องนี้ก็สามารถให้รถคันใหม่มาจอดแทนได้ ตัวอย่างการใช้งาน Page Level เช่น แบ่งเพื่อดูว่า นักเขียนคนไหนหรือ category ไหน ได้รับความสนใจมากที่สุด</p>
<p><strong>ตัวอย่าง Code ครับ</strong></p>
<p>เป็นการสร้าง CVs ในระดับ Visitor Level เพื่อแบ่งแยกระดับสมาชิก</p>
<p style="text-align: center;"><img class="aligncenter size-large wp-image-1548" src="http://apricotion.org/wp-content/uploads/2012/02/custom-variable3-600x206.png" alt="Visitor Level" width="600" height="206" /></p>
<p><strong>ตัวอย่างที่สอง ครับ</strong></p>
<p>เป็นการสร้าง CVs ในระดับ Page Level เพื่อแบ่งแยกผู้เขียน</p>
<div class="mceTemp mceIEcenter" draggable="">
<dl id="attachment_1549" class="wp-caption aligncenter" style="width: 610px;">
<dt class="wp-caption-dt"><img class="size-large wp-image-1549" src="http://apricotion.org/wp-content/uploads/2012/02/custom-variable4-600x209.png" alt="" width="600" height="209" /></dt>
<dd class="wp-caption-dd">Page Level</dd>
</dl>
</div>
<p>เมื่อเราวางแผนและติด Code เสร็จหมดแล้วไว้มีโอกาสผมจะมาแสดงการนำข้อมูลเหล่านี้มาวิเคราะห์กันนะครับ ซึ่งเราสามารถนำไปประยุกต์ใช้กับ <strong>Custom Report</strong> หรือ <strong>Advanced Segment</strong> ก็ได้ครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://apricotion.org/custom-variable/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Usability Case Study: Visual Cue #2 &#8211; Emphasize Only When Necessary</title>
		<link>http://apricotion.org/usability-case-study-visual-cue-2-emphasize-only-when-necessary/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=usability-case-study-visual-cue-2-emphasize-only-when-necessary</link>
		<comments>http://apricotion.org/usability-case-study-visual-cue-2-emphasize-only-when-necessary/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 07:14:12 +0000</pubDate>
		<dc:creator>niran</dc:creator>
				<category><![CDATA[Usability Engineering]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://apricotion.org/?p=1553</guid>
		<description><![CDATA[ในโพสที่แล้วผมพูดถึงกรณีศึกษาเกี่ยวกับระบบการค้นหาข้อมูลของเว็บไซต์ Apple ที่มีความเรียบง่ายในเชิง Visual แต่ซับซ้อนใน Concept มีหัวข้อหนึ่งในโพสที่แล้วที่ผมอยากนำมาขยายความและยกตัวอย่างกรณีศึกษาเพิ่ม นั่นก็คือเรื่อง การเน้นย้ำเมื่อจำเป็น (Emphasize Only When Necessary) ก่อนที่ผมจะพูดถึงประเด็นนี้ผมจำเป็นต้องเกริ่นถึงแนวคิดหลักเบื้องหลัง Emphasize Only When Necessary เสียก่อน นั่นก็คือเรื่อง Frequency of Usage Analysis ผมขอย้ำอีกครั้งว่า การออกแบบ Usability ที่ดีนั้น คือการต่อสู้กับเนื้อที่ที่จำกัดบนหน้าเว็บ คุณไม่สามารถใส่คอนเทนต์ทุกสิ่งทุกอย่างที่ต้องการลงในเว็บไซต์เล็กๆ และทำให้เว็บไซต์นั้นเข้าใจง่ายได้ ดังนั้นสิ่งที่คุณต้องทำก็คือ คุณจำเป็นต้องเลือกคัดคอนเทนต์บางอย่างที่มีความสำคัญน้อยทิ้งไป คุณจะต้องปรับคอนเทนต์ที่ยังคงสำคัญให้รวบรัด กระชับ และประหยัดเวลาในการอ่านและประหยัดเนื้อที่บนหน้าเว็บ แต่ยังต้องคงไว้ซึ่งความสะดวกในการอ่าน ทั้งหมดนี้คือการต่อสู้เพื่อเนื้อที่บนหน้าเว็บไซต์นั่นเองครับ (The Fight for Space) หากได้รับการฝึกและเรียนรู้ทฤษฏีด้าน Information Architecture อย่างดี ทุกๆ คนจะเรียนรู้ที่จะบริหารจัดการคอนเทนต์ได้ศักยภาพเท่าๆ กัน นั่นแปลว่าไม่ว่าคุณจะพยายามมากซักแค่ไหน เว็บไซต์คุณก็ไม่มีทางที่จะใช้ง่ายและดีไปกว่าของคู่แข่ง ในกรณีที่ฝีมือด้าน Usability ของพวกคุณสูสีกันจริงๆ แล้วอะไรล่ะ ที่จะทำให้เว็บไซต์ของคุณแตกต่าง..? ความจริงแล้ว มันมี “สิ่งหนึ่ง” ที่จะช่วยให้ Usability ของคุณนั้น “แตกต่าง” และ “โดดเด่น” จากคู่แข่ง ซึ่งสิ่งหนึ่งที่ว่านี้เป็นสิ่งที่แทบไม่มีใครในสายงาน Usability ให้ความใส่ใจอย่างจริงจัง แต่มันกลับเป็นสิ่งเดียวที่มีประสิทธิภาพมากที่สุดที่ช่วยยกระดับการออกแบบ Usability จากระดับ standard ไปสู่ระดับ excellence สิ่งหนึ่งที่ว่านั้นก็คือ “Frequency of Usage Analysis” หรือ การศึกษาพฤติกรรมความถี่ในการใช้งานของผู้บริโภค และออกแบบ Usability ให้เหมาะสมกับความถี่นั้นนั่นเอง..!! (พูดจริงๆ โพสเก่าๆ ที่ผมพูดถึงเรื่อง Step to Goal นั้นก็มีพื้นฐานมาจาก Frequency of Usage Analysis เช่นกัน) แต่คนส่วนใหญ่มัวแต่ใช้เวลาไปกับการจัดการคอนเทนต์เสียจนลืมไปว่า มีกลยุทธ์การจัดการหน้าเว็บเพจที่ทำให้คุณสามารถใช้เนื้อที่บนเว็บไซต์ได้อย่างมีประสิทธิภาพเพิ่มขึ้นมาก เพียงแค่วิเคราะห์พฤติกรรมการใช้งานของผู้บริโภคเพิ่มอีกเล็กน้อย..!! ...]]></description>
			<content:encoded><![CDATA[<p>ในโพสที่แล้วผมพูดถึงกรณีศึกษาเกี่ยวกับระบบการค้นหาข้อมูลของเว็บไซต์ <strong>Apple</strong> ที่มีความเรียบง่ายในเชิง <strong>Visual</strong> แต่ซับซ้อนใน <strong>Concept<span id="more-1553"></span></strong></p>
<p>มีหัวข้อหนึ่งในโพสที่แล้วที่ผมอยากนำมาขยายความและยกตัวอย่างกรณีศึกษาเพิ่ม นั่นก็คือเรื่อง <span style="text-decoration: underline;">การเน้นย้ำเมื่อจำเป็น (Emphasize Only When Necessary)</span></p>
<p>ก่อนที่ผมจะพูดถึงประเด็นนี้ผมจำเป็นต้องเกริ่นถึงแนวคิดหลักเบื้องหลัง<strong> Emphasize Only When Necessary</strong> เสียก่อน นั่นก็คือเรื่อง <strong>Frequency of Usage Analysis</strong></p>
<p>ผมขอย้ำอีกครั้งว่า การออกแบบ <strong>Usability</strong> ที่ดีนั้น คือการต่อสู้กับเนื้อที่ที่จำกัดบนหน้าเว็บ คุณไม่สามารถใส่คอนเทนต์ทุกสิ่งทุกอย่างที่ต้องการลงในเว็บไซต์เล็กๆ และทำให้เว็บไซต์นั้นเข้าใจง่ายได้</p>
<blockquote><p>ดังนั้นสิ่งที่คุณต้องทำก็คือ คุณจำเป็นต้องเลือกคัดคอนเทนต์บางอย่างที่มีความสำคัญน้อยทิ้งไป</p></blockquote>
<p>คุณจะต้องปรับคอนเทนต์ที่ยังคงสำคัญให้รวบรัด กระชับ และประหยัดเวลาในการอ่านและประหยัดเนื้อที่บนหน้าเว็บ แต่ยังต้องคงไว้ซึ่งความสะดวกในการอ่าน ทั้งหมดนี้คือการต่อสู้เพื่อเนื้อที่บนหน้าเว็บไซต์นั่นเองครับ <strong>(The Fight for Space)</strong></p>
<p>หากได้รับการฝึกและเรียนรู้ทฤษฏีด้าน<strong> Information Architecture</strong> อย่างดี ทุกๆ คนจะเรียนรู้ที่จะบริหารจัดการคอนเทนต์ได้ศักยภาพเท่าๆ กัน นั่นแปลว่าไม่ว่าคุณจะพยายามมากซักแค่ไหน เว็บไซต์คุณก็ไม่มีทางที่จะใช้ง่ายและดีไปกว่าของคู่แข่ง ในกรณีที่ฝีมือด้าน <strong>Usability</strong> ของพวกคุณสูสีกันจริงๆ</p>
<p>แล้วอะไรล่ะ ที่จะทำให้เว็บไซต์ของคุณแตกต่าง..?</p>
<p>ความจริงแล้ว มันมี “สิ่งหนึ่ง” ที่จะช่วยให้ <strong>Usability</strong> ของคุณนั้น <span style="text-decoration: underline;">“แตกต่าง” และ “โดดเด่น”</span> จากคู่แข่ง ซึ่งสิ่งหนึ่งที่ว่านี้เป็นสิ่งที่แทบไม่มีใครในสายงาน <strong>Usability</strong> ให้ความใส่ใจอย่างจริงจัง แต่มันกลับเป็นสิ่งเดียวที่มีประสิทธิภาพมากที่สุดที่ช่วยยกระดับการออกแบบ <strong>Usability</strong> จากระดับ <strong>standard</strong> ไปสู่ระดับ <strong>excellence</strong></p>
<p>สิ่งหนึ่งที่ว่านั้นก็คือ <strong>“Frequency of Usage Analysis”</strong> หรือ การศึกษาพฤติกรรมความถี่ในการใช้งานของผู้บริโภค และออกแบบ <strong>Usability</strong> ให้เหมาะสมกับความถี่นั้นนั่นเอง..!!</p>
<p class="note">(พูดจริงๆ โพสเก่าๆ ที่ผมพูดถึงเรื่อง Step to Goal นั้นก็มีพื้นฐานมาจาก Frequency of Usage Analysis เช่นกัน)</p>
<p>แต่คนส่วนใหญ่มัวแต่ใช้เวลาไปกับการจัดการคอนเทนต์เสียจนลืมไปว่า มีกลยุทธ์การจัดการหน้าเว็บเพจที่ทำให้คุณสามารถใช้เนื้อที่บนเว็บไซต์ได้อย่างมีประสิทธิภาพเพิ่มขึ้นมาก เพียงแค่วิเคราะห์พฤติกรรมการใช้งานของผู้บริโภคเพิ่มอีกเล็กน้อย..!!</p>
<p>คีย์เวิร์ดสั้นๆ ก็เพียงแค่ <strong>“เน้นย้ำ เมื่อจำเป็น”</strong></p>
<h2>กรณีศึกษา Twitter.com</h2>
<p>ลองมาดูเว็บไซต์ <strong>Twitter.com</strong> กัน ในแต่ละทวีตบน <strong>Twitter.com</strong> นั้นจะมี <strong>Action อยู่ 4 แบบ</strong>ให้ผู้ใช้คลิก นั่นก็คือ <strong>Reply, Retweet, Favorite</strong> และ <strong>Open</strong></p>
<p>ในแต่ละหน้าของ <strong>Twitter.com</strong> จะมีทวีตเรียงกันเป็นสิบทวีต ดังนั้นหากทีมออกแบบเว็บไซต์ <strong>Twitter.com</strong> จัดวาง <strong>Action ทั้ง 4</strong> ลงในทวีตแต่ละอัน ในหน้าหนึ่งหน้าก็จะมีปุ่มให้กดร่วมๆ ร้อยปุ่มทีเดียว (ดูภาพด้านล่าง)</p>
<div class="mceTemp" draggable="">
<dl id="attachment_1561" class="wp-caption alignnone" style="width: 610px;">
<dt class="wp-caption-dt"><a href="http://apricotion.org/wp-content/uploads/2012/02/01-twitter-bad.jpg" rel="lightbox[1553]"><img class="size-large wp-image-1561" title="01-twitter-bad" src="http://apricotion.org/wp-content/uploads/2012/02/01-twitter-bad-600x360.jpg" alt="" width="600" height="360" /></a></dt>
<dd class="wp-caption-dd">ภาพที่ 1 &#8211; Twitter ที่เต็มไปด้วย Action เต็มจอ</dd>
</dl>
</div>
<p>นี่เป็นหน้าเว็บทดลองที่ผมลองใส่ปุ่ม <strong>Action</strong> ทั้งหมดลงในหน้าจอ ซึ่งผลลัพธ์ของมันก็คือ <strong>“โคตรรก..!!”</strong> ครับ</p>
<p class="note">ประเด็นก็คือ ไม่มีเหตุผลใดที่ผู้ใช้ <strong>Twitter</strong> จะต้องมองเห็นปุ่ม <strong>Action</strong> เหล่านี้ตลอดเวลา พวกเขาควรจะเห็นมันก็ต่อเมื่อเอาเมาส์ไปชี้ที่ทวีตที่พวกเขาต้องการทำอะไรบางอย่างเท่านั้น ดังนั้น ถ้าเมาส์ไม่ได้จ่ออยู่ที่ทวีต ก็ไม่มีความจำเป็นใดๆ ที่จะต้องแสดง <strong>Action</strong> ให้รกหูรกตาผู้ใช้</p>
<p>การกำจัดปุ่ม <strong>Action</strong> เหล่านี้ออกไปจะช่วยให้เพจเรียบง่ายขึ้นมาก นี่แหละครับ การ<strong> Fight for Space</strong> วิธีหนึ่ง นั่นก็คือ <span style="text-decoration: underline;">เน้นย้ำ (แสดงปุ่ม Action) เมื่อจำเป็น (เมื่อเอาเมาส์ไปวางบนทวีตที่ต้องการ)</span></p>
<p>เมื่อทำดังนั้นแล้ว <strong>Twitter.com</strong> จึงมี <strong>Usability</strong> ที่เรียบง่ายสบายตาดังภาพด้านล่าง</p>
<div class="mceTemp" draggable="">
<dl id="attachment_1562" class="wp-caption alignnone" style="width: 610px;">
<dt class="wp-caption-dt"><a href="http://apricotion.org/wp-content/uploads/2012/02/02-twitter-good.jpg" rel="lightbox[1553]"><img class="size-large wp-image-1562" title="02-twitter-good" src="http://apricotion.org/wp-content/uploads/2012/02/02-twitter-good-600x360.jpg" alt="" width="600" height="360" /></a></dt>
<dd class="wp-caption-dd">ภาพที่ 2 &#8211; Twitter ที่เรียบง่าย ซ่อน Action ทั้งหมดไปไม่ให้รกสายตา</dd>
</dl>
</div>
<blockquote><p>การซ่อน หรือปิดองค์ประกอบของเพจที่ไม่จำเป็นในบางช่วงเวลา เป็นศิลปะการออกแบบ Usability ที่ดีที่นักออกแบบเว็บไซต์ควรพิจารณา</p></blockquote>
<p>เชื่อไหมครับว่าในเว็บไซต์เกิน 60% บนโลกนี้ มักจะมีการแสดงผล <strong>“ส่วนเกิน”</strong> อยู่เสมอๆ ผมยกตัวอย่างง่ายๆ ปุ่ม <strong>“Read More&#8230;”</strong> ที่ใส่ต่อท้ายคอนเทนต์ข่าวในเว็บส่วนใหญ่ เป็นสิ่งที่ไม่จำเป็นเลย โดยเฉพาะอย่างยิ่งกับเว็บไซต์ที่มีคอนเทนต์มากอยู่แล้ว การเพิ่มคำว่า <strong>Read More</strong> ต่อท้ายทุกๆ ข่าวมันคือการใช้เนื้อที่โดยเปล่าประโยชน์อย่างแท้จริง</p>
<div class="mceTemp" draggable="">
<dl id="attachment_1563" class="wp-caption alignnone" style="width: 610px;">
<dt class="wp-caption-dt"><a href="http://apricotion.org/wp-content/uploads/2012/02/03-read-more.jpg" rel="lightbox[1553]"><img class="size-large wp-image-1563" title="03-read-more" src="http://apricotion.org/wp-content/uploads/2012/02/03-read-more-600x318.jpg" alt="" width="600" height="318" /></a></dt>
<dd class="wp-caption-dd">ภาพที่ 3 &#8211; เว็บที่มีคอนเทนต์จำนวนมากอยู่แล้ว ถูกทำให้รกยิ่งขึ้นไปอีกด้วยปุ่ม Read More</dd>
</dl>
</div>
<p>คุณสามารถออกแบบให้ผู้ใช้คลิกที่หัวข้อของข่าว หรือพื้นที่ส่วนใดๆ ที่เป็นเนื้อที่ในกรอบข่าว ก็สามารถลิงค์ต่อไปอ่านรายละเอียดได้</p>
<div class="mceTemp" draggable="">
<dl id="attachment_1564" class="wp-caption alignnone" style="width: 610px;">
<dt class="wp-caption-dt"><a href="http://apricotion.org/wp-content/uploads/2012/02/04-bbc-good.jpg" rel="lightbox[1553]"><img class="size-large wp-image-1564" title="04-bbc-good" src="http://apricotion.org/wp-content/uploads/2012/02/04-bbc-good-600x337.jpg" alt="" width="600" height="337" /></a></dt>
<dd class="wp-caption-dd">ภาพที่ 4 &#8211; เว็บ BBC ใช้ขนาดฟอนต์ขนาดใหญ่กว่ามาตรฐานเว็บข่าวทั่วไป และกำจัดปุ่ม Read More รวมถึงปุ่มที่ไม่จำเป็นอื่นๆ ออกจากเว็บไซต์</dd>
</dl>
</div>
<p>อีกตัวอย่างก็คือระบบคอมเมนต์บนเว็บไซต์ <strong>Github.com</strong></p>
<div class="mceTemp" draggable="">
<dl id="attachment_1565" class="wp-caption alignnone" style="width: 610px;">
<dt class="wp-caption-dt"><a href="http://apricotion.org/wp-content/uploads/2012/02/05-github-1.png" rel="lightbox[1553]"><img class="size-large wp-image-1565" title="05-github-1" src="http://apricotion.org/wp-content/uploads/2012/02/05-github-1-600x362.png" alt="" width="600" height="362" /></a></dt>
<dd class="wp-caption-dd">ภาพที่ 5 &#8211; แสดงข้อความคอมเมนต์โล่งๆ ไม่มีอะไรกวนสายตา</dd>
</dl>
</div>
<div class="mceTemp" draggable="">
<dl id="attachment_1566" class="wp-caption alignnone" style="width: 610px;">
<dt class="wp-caption-dt"><a href="http://apricotion.org/wp-content/uploads/2012/02/06-github-2.png" rel="lightbox[1553]"><img class="size-large wp-image-1566" title="06-github-2" src="http://apricotion.org/wp-content/uploads/2012/02/06-github-2-600x362.png" alt="" width="600" height="362" /></a></dt>
<dd class="wp-caption-dd">ภาพที่ 6 &#8211; เมื่อเจ้าของคอมเมนต์วางเมาส์บนคอมเมนต์จึงเห็นปุ่ม แก้ไข (Edit) และปุ่มลบ (Delete)</dd>
</dl>
</div>
<p>นี่ก็เข้าคอนเซปต์ <strong>Emphasize Only When Necessary</strong> ครับ</p>
<h2>Now Playing: ตัวอย่างคลาสสิกบน Mobile</h2>
<p>อีกตัวอย่างคลาสสิกจากบริษัทที่ออกแบบ <strong>Usability</strong> ได้ดีอันดับโลก นั่นก็คือ <strong>iPod Application บน iOS</strong> นั่นเองครับ</p>
<p>โดยปกติแล้ว <strong>User Interface</strong> ของ <strong>iPod</strong> ขณะเล่นเพลงจะแสดงผลง่ายๆ แบบด้านล่าง นั่นคือแสดงให้เป็นภาพ <strong>Artwork</strong> เต็มจอ และปุ่มควบคุมการเล่นเพลงพื้นฐาน (เล่น, หยุด, ข้าม) ด้านล่าง</p>
<div class="mceTemp" draggable="">
<dl id="attachment_1567" class="wp-caption alignnone" style="width: 330px;">
<dt class="wp-caption-dt"><a href="http://apricotion.org/wp-content/uploads/2012/02/07-ipod-now-playing.png" rel="lightbox[1553]"><img class="size-full wp-image-1567" title="07-ipod-now-playing" src="http://apricotion.org/wp-content/uploads/2012/02/07-ipod-now-playing.png" alt="" width="320" height="480" /></a></dt>
<dd class="wp-caption-dd">ภาพที่ 7 &#8211; หน้าจอ iPod มาตรฐาน</dd>
</dl>
</div>
<p>แต่เมื่อผู้ใช้งานต้องการเรียกคำสั่งเพิ่มเติมใดๆ นอกเหนือปุ่มพื้นฐาน เพียงแค่แตะที่หน้าจอ โปรแกรม <strong>iPod</strong> ก็จะแสดงเมนูเพิ่มเติมขึ้นมาทันที (ไทม์ไลน์ของเพลง, การเล่นซ้ำ และการเล่นสุ่ม รวมถึงระบบ <strong>Genius playlist</strong>)</p>
<div class="mceTemp" draggable="">
<dl id="attachment_1568" class="wp-caption alignnone" style="width: 330px;">
<dt class="wp-caption-dt"><a href="http://apricotion.org/wp-content/uploads/2012/02/08-ipod-now-playing-2.png" rel="lightbox[1553]"><img class="size-full wp-image-1568" title="08-ipod-now-playing-2" src="http://apricotion.org/wp-content/uploads/2012/02/08-ipod-now-playing-2.png" alt="" width="320" height="480" /></a></dt>
<dd class="wp-caption-dd">ภาพที่ 8 &#8211; หน้าจอ iPod ที่แสดงฟังก์ชั่นเพิ่มเติม</dd>
</dl>
</div>
<p>นั่นหมายความว่า ฟังก์ชั่นที่ไม่ได้มีการใช้งานบ่อยๆ จะถูกซ่อนไว้เพื่อความเรียบง่าย และแสดงผลเมื่อจำเป็นเท่านั้น เข้าคอนเซปต์เดิมคือ <strong>Emphasize Only When Necessary</strong></p>
<h2>ปิดท้าย</h2>
<p>การซ่อนองค์ประกอบที่ไม่จำเป็นนั้นไม่ได้ใช้งานได้เสมอไป คุณจำเป็นจะต้องชั่งน้ำหนักถึงประโยชน์และโทษที่จะเกิดขึ้น ยกตัวอย่างโทษง่ายๆ ก็คือ ถ้าคุณซ่อนของเยอะเกินไป ผู้ใช้อาจจะหาไม่เจอ หรือถ้าคุณซ่อนของที่จำเป็นจะต้องใช้บ่อยๆ ผู้ใช้ก็อาจจะรำคาญได้</p>
<p>ในกรณี <strong>iPod</strong> นั้นก็มีผู้ใช้เบื้องต้นหลายคนที่หงุดหงิดเพราะหาปุ่ม <strong>Repeat</strong> เมื่อต้องการเล่นเพลงซ้ำไม่เจอ แต่ความหงุดหงิดนี้จะเกิดขึ้นเพียงครั้งเดียว (และส่วนใหญ่ทุกคนจะร้อง <strong>“อ๋อ..”</strong> และกลับรู้สึกโทษว่าตัวเองโง่มากกว่าที่จะโทษ <strong>Apple</strong> และ <strong>Steve Jobs</strong>) แลกกับความเรียบง่ายที่ผู้ใช้จะได้รับมันตลอดการใช้งาน</p>
<p class="note">คุณสามารถเริ่มง่ายๆ ได้โดยการเปิดหน้าเว็บไซต์ของคุณ และเริ่มสำรวจพร้อมทั้งตั้งคำถามให้ตัวเองว่า “มีสิ่งใดในเพจบ้าง ที่คุณสามารถซ่อนเอาไว้ก่อนในครั้งแรก และนำมาแสดงให้เห็นเมื่อจำเป็น..?”</p>
<p>พบกันใหม่ตอนหน้าครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://apricotion.org/usability-case-study-visual-cue-2-emphasize-only-when-necessary/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tips : java programming compare and if statment</title>
		<link>http://apricotion.org/tips-java-programming-compare-and-if-statment/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tips-java-programming-compare-and-if-statment</link>
		<comments>http://apricotion.org/tips-java-programming-compare-and-if-statment/#comments</comments>
		<pubDate>Thu, 16 Feb 2012 04:42:35 +0000</pubDate>
		<dc:creator>chiunyi</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://apricotion.org/?p=1533</guid>
		<description><![CDATA[JAVA Programming [ ==, .equals(), compareTo(), and compare() ] วันนี้ผมมีทิปเล็กๆ น้อยๆ ที่ทุกๆ คนที่เขียนจาวา ต้องคุ้นเคยแต่บางคน สับสน หรือ ลืมๆ กันไปบ้าง หรือคนที่ยังไม่รู้ โดยวันนี้จะมาพูดถึงเรื่องการเปรียบเทียบ object และ parameter  ใน JAVA ว่า อะไรใช้อย่างไรบ้าง เปรียบเทียบ Primitives Objects a == b, a != b Equal values ใช้ เปรียบเทียบ references (ใช้เปรียบเทียบ values ไม่ได้)ใช้ == เพื่อเปรียบเทียบ reference ดังนี้: ใช้เปรียบเทียบเพื่อดูว่า reference เป็น null รึเปล่า? ใช้สำหรับเปรียบเทียบดูว่า enum สองตัวนี้เป็นตัวเดียวกันรึเปล่า เพราะenum แต่ละตัวคือ1object ซึ่งถ้า เท่ากันแสดงว่า enum ที่เอามาเปรียบเทียบ คือตัวเดียวกัน ใช้เปรียบเทียบดูว่า ตัวแปรสองตัวที่references  เป็น Object เดียวกันหรือไม่? a.equals(b) N/A ใช้สำหรับเปรียบเทียบ values ว่า เท่ากันหรือไม่ retun true or false เหมือน == a.compareTo(b) N/A Comparable interface.  ใช้เปรียบเทียบ values เหมือน equals() และ returns เป็น int ซึ่ง สามารถบอกได้ว่า มัน น้อยกว่า มากกว่า หรือเท่ากัน . วิธีใช้ให้ implement ...]]></description>
			<content:encoded><![CDATA[<h2>JAVA Programming [ ==, .equals(), compareTo(), and compare() ]</h2>
<p>วันนี้ผมมีทิปเล็กๆ น้อยๆ ที่ทุกๆ คนที่เขียนจาวา ต้องคุ้นเคยแต่บางคน สับสน หรือ ลืมๆ กันไปบ้าง หรือคนที่ยังไม่รู้ <span id="more-1533"></span>โดยวันนี้จะมาพูดถึงเรื่องการเปรียบเทียบ <strong>object</strong> และ <strong>parameter</strong>  ใน <strong>JAVA</strong> ว่า อะไรใช้อย่างไรบ้าง</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p align="center"><strong>เปรียบเทียบ</strong></p>
</td>
<td>
<p align="center"><strong>Primitives</strong></p>
</td>
<td>
<p align="center"><strong>Objects</strong></p>
</td>
</tr>
<tr>
<td>
<p style="text-align: center;">a == b, a != b</p>
</td>
<td>
<p style="text-align: center;">Equal values</p>
</td>
<td><strong>ใช้ เปรียบเทียบ </strong><strong>references (</strong><strong>ใช้เปรียบเทียบ</strong><strong> values </strong><strong>ไม่ได้</strong><strong>)</strong>ใช้ == เพื่อเปรียบเทียบ reference ดังนี้:</p>
<ul>
<li>ใช้เปรียบเทียบเพื่อดูว่า reference เป็น null รึเปล่า?</li>
<li>ใช้สำหรับเปรียบเทียบดูว่า enum สองตัวนี้เป็นตัวเดียวกันรึเปล่า เพราะenum แต่ละตัวคือ1object ซึ่งถ้า เท่ากันแสดงว่า enum ที่เอามาเปรียบเทียบ คือตัวเดียวกัน</li>
<li>ใช้เปรียบเทียบดูว่า ตัวแปรสองตัวที่references  เป็น Object เดียวกันหรือไม่?</li>
</ul>
</td>
</tr>
<tr>
<td>
<p style="text-align: center;">a.equals(b)</p>
</td>
<td>
<p style="text-align: center;">N/A</p>
</td>
<td>ใช้สำหรับเปรียบเทียบ values ว่า เท่ากันหรือไม่ retun true or false เหมือน ==</td>
</tr>
<tr>
<td>
<p style="text-align: center;">a.compareTo(b)</p>
</td>
<td>
<p style="text-align: center;">N/A</p>
</td>
<td><strong>Comparable interface.</strong>  ใช้เปรียบเทียบ values เหมือน equals() และ returns เป็น int ซึ่ง สามารถบอกได้ว่า มัน น้อยกว่า มากกว่า หรือเท่ากัน . วิธีใช้ให้ implement the <em>Comparable&lt;T&gt;</em> interface</td>
</tr>
<tr>
<td>
<p style="text-align: center;">compare(a, b)</p>
</td>
<td>
<p style="text-align: center;">N/A</p>
</td>
<td><strong>Comparator interface.</strong> ใช้เปรียบเทียบ values ของ สองobjects  วิธีใช้ให้ implement the<em> Comparator&lt;T&gt;</em> interface ซึ่งแตกต่างจากcompareTo โดยcompare(a.b) เหมาะสำหรับ:</p>
<ul>
<li><strong>Multiple comparisions.</strong> ใช้ เพื่อสำหรับsort object ในวิธีต่างๆ เช่น คุฯต้องการเรียงลำดับ Employee class โดย เรียงลำดับ จาก ชื่อ อายุ ประสบการณ์ทำงาน ID…</li>
<li><strong>System class.</strong> เราสามารถสร้างclassกลาง ไว้สำหรับเปรียบเทียบ เช่น คุณสร้าง class สำหรับเปรียบเทียบ String โดยเปรียบเทียบจากความยาว ของตัวอักษร เป้นต้น</li>
<li><strong>Strategy pattern.</strong> คุณอาจต้องการใช้interfacce นี้เมื่อคุณต้องการที่จะเปรียบเทียบโดยมี logic หรือ <em>Strategey</em> สำหรับ การเปรียบเทียบ</li>
</ul>
</td>
</tr>
</tbody>
</table>
<h2>Tip, JAVA Programming  ['if' Statement - if inside if  ]</h2>
<p>วันนี้จะมาพูดถึงเรื่อง <strong>if statement</strong></p>
<p>เมื่อเขียน <strong>if</strong> โดยใช้ ปีกกาเปิด และปิดหลังทุกครั้ง จะไม่เกิดปัญหาดังนี้ :</p>
<pre class="brush: jscript; title: ; notranslate">
if (age &lt; 18) {
if (height &gt; 180) {
c = Color.RED;
}
} else {
c = Color.BLUE;
}
</pre>
<p>และเมื่อ <strong>true</strong> หรือ <strong>false</strong> เราเขียนแค่ <strong>statement</strong> เดียว เลยย่อได้เป็นดังนี้ :</p>
<pre class="brush: jscript; title: ; notranslate">
if (age &lt; 18)
    if (height &gt; 180)
        c = Color.RED;
else
    c = Color.BLUE;
</pre>
<p>แต่ผิด การเขียน <strong>if else</strong> แบบล่างจะไม่ได้ผลลัพธ์ เท่าการใส่ปีกกาเหมือนด้านบน ซึ่งเพราะว่า ตัว <strong>java</strong> จะคิดว่า <strong>else</strong> ตัวนี้จะเป็นของ <strong>if</strong> ตัวที่ใกล้ที่สุด ดังนี้:</p>
<pre class="brush: jscript; title: ; notranslate">
if (age &lt; 18) {
    if (height &gt; 180)
        c = Color.RED;
    else
        c = Color.BLUE;
}
</pre>
<blockquote><p>สรุป: ฉะนั้น เราควรใส่ปีกกาทุกครั้งเมื่อใช้ <strong>if statement</strong> เพื่อลดความผิดพลาดจากการเขียน <strong>code</strong></p></blockquote>
<p>จาก <strong>code</strong> ด้านล่างนี้ <strong>program</strong> จะ <strong>return</strong> ค่าออกมาว่า <strong>think you&#8217;re lying about your age!</strong> อย่างเดียว  ไม่ว่ากรณีใดๆทั้งสิ้น  เนื่องมาจากอะไร?</p>
<pre class="brush: jscript; title: ; notranslate">
String ageStr = JOptionPane.showInputDialog(null, &quot;How old are you?&quot;);
int age = Integer.parseInt(ageStr);
if (age &gt; 120 || age &lt; 0);
    System.out.println(&quot;I think you're lying about your age!&quot;);
</pre>
<p>เพราะว่าเครื่องหมาย ; ใน<strong> JAVA</strong> หมายถึงว่า จบ <strong>statement</strong> นั้นๆแล้ว ซึ่งหมายความว่า เมื่อเข้า <strong>statement if (age &gt; 120 || age &lt; 0); </strong>ก็จบการทำงานของstatement นั้นเลย</p>
]]></content:encoded>
			<wfw:commentRss>http://apricotion.org/tips-java-programming-compare-and-if-statment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Javascript Tips &amp; Tricks : เทคนิคการใช้ key/value pair ในการเรียก function แบบ Dynamic</title>
		<link>http://apricotion.org/javascript-tips-tricks-keyvalue-pair-dynamic/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=javascript-tips-tricks-keyvalue-pair-dynamic</link>
		<comments>http://apricotion.org/javascript-tips-tricks-keyvalue-pair-dynamic/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 03:49:08 +0000</pubDate>
		<dc:creator>adisorn</dc:creator>
				<category><![CDATA[Web Development & Design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Javascript Tips & Tricks]]></category>

		<guid isPermaLink="false">http://apricotion.org/?p=1519</guid>
		<description><![CDATA[จากที่ผมเคยแนะนำเทคนิคการใช้ key/value pair ที่อ้างอิง property แบบ dynamic ไปแล้วนั้น ในคราวนี้ผมจะเพิ่มเติมวิธีการเรียกใช้ function แบบ dynamic ด้วย key/value pair ซึ่งเป็นเทคนิคที่ตัวผมเองใช้ค่อนข้างบ่อยและอาจเป็นประโยชน์กับใครหลายคน จากที่เคยแนะนำไป แสดงให้เห็นว่าเราสามารถอ้างอิง property ของ JSON[http://www.json.org/] ได้โดยการใช้ เครื่องหมาย [] เช่น obj['name'] มีค่าเท่ากับ obj.name ซึ่งในความเป็นจริงแล้วเราสามารถใช้ [] อ้างอิงถึง property ของ Object ใดๆใน Javascript ก็ได้ เช่น window.location['href']=&#8217;http://www.google.com&#8217;; มีค่าเท่ากับ window.location.href=&#8217;http://www.google.com&#8217;; รวมถึง property ที่เป็น function ของ Object นั้น ซึ่งผมจะแสดงให้เห็นจาก code ตัวอย่างร่วมกับ jQuery[http://www.jquery.com] ดังนี้ ดูตัวอย่างการแสดงผล &#62;&#62; Demo จาก code ตัวอย่างแสดงการอ้างอิงและเรียกใช้ function fadeIn และ fadeOut ของ jQuery ซึ่งการอ้างอิง function นั้นเหมือนกับการอ้างอิง property ทุกอย่าง เพียงแต่ต้องมีการเรียกใช้ function ด้วยเช่น window['alert'](&#8216;test dynamic function&#8217;); มีค่าเท่ากับ window.alert(&#8216;test dynamic function&#8217;); ซึ่งเราสามารถนำเทคนิคนี้ไปปรับใช้ทำให้การเขียน code ของเราสั้นและง่ายขึ้นได้ครับ]]></description>
			<content:encoded><![CDATA[<p>จากที่ผมเคยแนะนำเทคนิคการใช้ <strong>key/value pair</strong> ที่อ้างอิง <strong>property</strong> แบบ <strong>dynamic<span id="more-1519"></span></strong> ไปแล้วนั้น ในคราวนี้ผมจะเพิ่มเติมวิธีการเรียกใช้ <strong>function</strong> แบบ <strong>dynamic</strong> ด้วย <strong>key/value pair</strong> ซึ่งเป็นเทคนิคที่ตัวผมเองใช้ค่อนข้างบ่อยและอาจเป็นประโยชน์กับใครหลายคน</p>
<p>จากที่เคยแนะนำไป แสดงให้เห็นว่าเราสามารถอ้างอิง <strong>property</strong> ของ <strong>JSON[http://www.json.org/]</strong> ได้โดยการใช้ เครื่องหมาย <strong>[]</strong> เช่น <strong>obj['name']</strong> มีค่าเท่ากับ <strong>obj.name</strong> ซึ่งในความเป็นจริงแล้วเราสามารถใช้ <strong>[]</strong> อ้างอิงถึง <strong>property</strong> ของ <strong>Object</strong> ใดๆใน <strong>Javascript</strong> ก็ได้ เช่น <span style="text-decoration: underline;">window.location['href']=&#8217;http://www.google.com&#8217;;</span> มีค่าเท่ากับ <span style="text-decoration: underline;">window.location.href=&#8217;http://www.google.com&#8217;;</span> รวมถึง <strong>property</strong> ที่เป็น <strong>function</strong> ของ <strong>Object</strong> นั้น ซึ่งผมจะแสดงให้เห็นจาก <strong>code</strong> ตัวอย่างร่วมกับ <strong>jQuery[http://www.jquery.com]</strong> ดังนี้</p>
<pre class="brush: jscript; title: ; notranslate">

&lt;a href='fadeIn'&gt;Click Me Fade In&lt;/a&gt;
	&lt;a href='fadeOut'&gt;Click Me Fade Out&lt;/a&gt;
	&lt;p&gt;Text Content&lt;/p&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
		$(function(){
			$('a').click(function(){
				var href=$(this).attr('href');
				$('p')[href](500);
				return false;
			});
		});
     &lt;/script&gt;
</pre>
<p>ดูตัวอย่างการแสดงผล &gt;&gt; <a href="http://jsfiddle.net/khemmac/EjBLT/" target="_blank">Demo</a></p>
<p>จาก <strong>code</strong> ตัวอย่างแสดงการอ้างอิงและเรียกใช้ <strong>function fadeIn</strong> และ <strong>fadeOut</strong> ของ <strong>jQuery</strong> ซึ่งการอ้างอิง <strong>function</strong> นั้นเหมือนกับการอ้างอิง <strong>property</strong> ทุกอย่าง เพียงแต่ต้องมีการเรียกใช้ <strong>function</strong> ด้วยเช่น <span style="text-decoration: underline;">window['alert'](&#8216;test dynamic function&#8217;);</span> มีค่าเท่ากับ <span style="text-decoration: underline;">window.alert(&#8216;test dynamic function&#8217;);</span> ซึ่งเราสามารถนำเทคนิคนี้ไปปรับใช้ทำให้การเขียน <strong>code</strong> ของเราสั้นและง่ายขึ้นได้ครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://apricotion.org/javascript-tips-tricks-keyvalue-pair-dynamic/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
