<?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>rawitat.com &#124; Rawitat Pulam &#187; Development</title>
	<atom:link href="http://www.rawitat.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rawitat.com</link>
	<description>Simplicity within Complexity, and Vice-Versa</description>
	<lastBuildDate>Fri, 06 Jan 2012 07:48:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>หัดเขียนโปรแกรมยังไงให้เก่ง?</title>
		<link>http://www.rawitat.com/2012/01/06/746/</link>
		<comments>http://www.rawitat.com/2012/01/06/746/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 07:44:11 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2012/01/06/746/</guid>
		<description><![CDATA[ถ้าจะมีคำถามที่ผมถูกถามมากที่สุดในฐานะ &#8220;โปรแกรมเมอร์&#8221; หรือ &#8220;โค้ดเดอร์&#8221; ก็คงเป็นคำถามนี้ (ไม่เกี่ยวกับคำถามที่ถามผมในฐานะอื่น) ซึ่งผมขอตอบยาวๆ ทีเดียวในนี้เลยก็แล้วกันนะครับ หวังว่าจะเป็นประโยชน์กันในระยะยาว ก่อนอื่น ต้องทำความเข้าใจพื้นฐานก่อน ว่า &#8220;การเขียนโปรแกรม&#8221;​ มันเป็นเรื่อง &#8220;Skill การสื่อสาร&#8221; ครับ ซึ่งหลายคนอาจจะงงว่ามันเป็นแบบนี้ได้ยังไง ทำไมมันเป็นแบบนี้ ซึ่งผมขออธิบายสั้นๆ ว่า เพราะว่าเราจะต้องสื่อสารสิ่งที่เราคิด อย่างเป็นระบบเบียบเป็นขั้นเป็นตอน ให้คนที่โง่ที่สุด ที่บังเอิญขยันและคำนวนเร็ว อย่าง &#8220;คอมพิวเตอร์&#8221; สามารถนำไปปฏิบัติได้ ปัญหาอันดับแรกๆ ที่ผมพบก็คือ &#8220;คิดเป็นขั้นตอนไม่เป็น&#8221; ถึงขนาดไม่สามารถคิดได้เลยว่าตั้งแต่ต้นทาง (ปัจจัยตั้งต้นที่มี) จะมีเส้นทางไปหาปลายทาง (ผลลัพธ์ที่ต้องการ) ได้อย่างไร โดยละเอียด ซึ่งอาจจะเกิดจากการไม่เคยคิดเป็นขั้นตอนมาเลย ทุกอย่างจะมีทางลัดไปหาขั้นตอนสุดท้ายเสมอๆ (สมัยเรียนจะเรียกว่า &#8220;สูตรลัด&#8221;) ดังนั้นจำรูปแบบให้ได้ และใช้สูตรลัดให้เป็น ก็เอาตัวรอดไปได้เรื่อยๆ แล้ว ซึ่งพอมาถึงเรื่องการเขียนโปรแกรม มันทำแบบนั้นไม่ได้ จะได้แต่โจทย์ง่ายๆ ซึ่งใช้งานอะไรจริงจังไม่ได้เลยเท่านั้น ซึ่งก็เหมือนกับสูตรลัดทั้งหลายแหล่ในฟิสิกส์หรือคณิตศาสตร์ ที่ใช้ได้แต่กับโจทย์ง่ายๆ เอามาใช้จริงจังอะไรไม่ได้เลย เหมือนกัน ยกตัวอย่างง่ายๆ ในชีวิตประจำวัน [...]]]></description>
			<content:encoded><![CDATA[<p>ถ้าจะมีคำถามที่ผมถูกถามมากที่สุดในฐานะ &#8220;โปรแกรมเมอร์&#8221; หรือ &#8220;โค้ดเดอร์&#8221; ก็คงเป็นคำถามนี้ (ไม่เกี่ยวกับคำถามที่ถามผมในฐานะอื่น) ซึ่งผมขอตอบยาวๆ ทีเดียวในนี้เลยก็แล้วกันนะครับ หวังว่าจะเป็นประโยชน์กันในระยะยาว</p>
<p>ก่อนอื่น ต้องทำความเข้าใจพื้นฐานก่อน ว่า </p>
<blockquote><p>&#8220;การเขียนโปรแกรม&#8221;​ มันเป็นเรื่อง &#8220;Skill การสื่อสาร&#8221;</p></blockquote>
<p>ครับ ซึ่งหลายคนอาจจะงงว่ามันเป็นแบบนี้ได้ยังไง ทำไมมันเป็นแบบนี้ ซึ่งผมขออธิบายสั้นๆ ว่า เพราะว่าเราจะต้องสื่อสารสิ่งที่เราคิด อย่างเป็นระบบเบียบเป็นขั้นเป็นตอน ให้คนที่โง่ที่สุด ที่บังเอิญขยันและคำนวนเร็ว อย่าง &#8220;คอมพิวเตอร์&#8221; สามารถนำไปปฏิบัติได้</p>
<p>ปัญหาอันดับแรกๆ ที่ผมพบก็คือ &#8220;คิดเป็นขั้นตอนไม่เป็น&#8221;</p>
<p>ถึงขนาดไม่สามารถคิดได้เลยว่าตั้งแต่ต้นทาง (ปัจจัยตั้งต้นที่มี) จะมีเส้นทางไปหาปลายทาง (ผลลัพธ์ที่ต้องการ) ได้อย่างไร โดยละเอียด ซึ่งอาจจะเกิดจากการไม่เคยคิดเป็นขั้นตอนมาเลย ทุกอย่างจะมีทางลัดไปหาขั้นตอนสุดท้ายเสมอๆ (สมัยเรียนจะเรียกว่า &#8220;สูตรลัด&#8221;) ดังนั้นจำรูปแบบให้ได้ และใช้สูตรลัดให้เป็น ก็เอาตัวรอดไปได้เรื่อยๆ แล้ว ซึ่งพอมาถึงเรื่องการเขียนโปรแกรม มันทำแบบนั้นไม่ได้ จะได้แต่โจทย์ง่ายๆ ซึ่งใช้งานอะไรจริงจังไม่ได้เลยเท่านั้น ซึ่งก็เหมือนกับสูตรลัดทั้งหลายแหล่ในฟิสิกส์หรือคณิตศาสตร์ ที่ใช้ได้แต่กับโจทย์ง่ายๆ เอามาใช้จริงจังอะไรไม่ได้เลย เหมือนกัน</p>
<p>ยกตัวอย่างง่ายๆ ในชีวิตประจำวัน เช่น &#8220;ถ่ายเอกสารชีทนี้มาแจกทุกคนในกลุ่ม&#8221; ซึ่งดูเหมือนจะง่ายนะ ทำกันประจำ แต่จะสื่อสารออกมาอย่างไร? เพียงแค่นี้พอหรือไม่? คำตอบคือ &#8220;ไม่พอ&#8221; เพราะถ้าเราไปพูดคำนี้กับคนที่ไม่รู้จักกลุ่มเรา จะรู้มั้ยว่ามีกี่คน? แม้แต่คนในกลุ่มเอง บางทียังต้อง &#8220;นับ&#8221; เลย</p>
<p>ดังนั้นในการสื่อสาร เราจะมีปัจจัยตั้งต้นคือ &#8220;ชีท&#8221; และ &#8220;กลุ่มคน&#8221;​ และปลายทางที่เราต้องการคือ &#8220;ทุกคนในกลุ่ม ได้รับชีทที่ถ่ายเอกสารแล้ว&#8221; ถ้าจะสื่อสารเป็นกระบวนการแบบโปรแกรม หรือฟังก์ชั่นทางคณิตศาสตร์ ก็จะได้ลักษณะนี้<br />
</p>
<p>
จำนวน = นับ(คนในกลุ่ม)<br />
ชีทที่ถ่ายเอกสารแล้ว = ถ่ายเอกสาร(ชีท, จำนวน)<br />
คนที่ได้รับชีท = แจกจ่าย(ชีทที่ถ่ายเอกสารแล้ว, คนในกลุ่ม)
</p>
<p>
เป็นต้น</p>
<p>ปัญหาอันดับต่อไปที่ผมพบก็คือ การให้ความสำคัญกับตัวภาษาโปรแกรมมากไปในตอนแรก (แต่น้อยไปในระยะหลังจากนั้น)</p>
<p>จริงอยู่ การเขียนโปรแกรมจำเป็นต้องใช้ภาษาโปรแกรม แต่มันก็เหมือนกับการสื่อสารของคน ที่ต้องใช้ภาษาคนน่ะแหละ สิ่งที่สำคัญที่สุดที่ผู้เริ่มต้นจะต้องสนใจ คือ การนำไปใช้สื่อสารให้เร็วที่สุดที่จะเร็วได้ ไม่ต้องสนใจว่าจะรู้ภาษามากแค่ไหน ผมเคยเจอคนท่องดิกชันนารีได้เยอะมาก แต่สื่อสารไม่ได้ เวลาเจอคนต่างชาติก็ทำอะไรไม่ถูกเยอะแยะไป</p>
<p>ผมนึกถึงตอนที่ตัวเองไปเรียนที่ญี่ปุ่น ที่ผมอ่านอะไรจากการ์ตูนได้ (ผมเรียนภาษาญี่ปุ่นจากการอ่านการ์ตูนแทบจะล้วนๆ) ก็จะหาเรื่องทดลองใช้เลย ไม่ว่าจะเป็นการลองถามทางคนในรถไฟฟ้า การแกล้งหลงทางแล้วถามตำรวจ ฯลฯ ซึ่งมันได้ผลโคตรดี ถึงได้มีคนบอกว่า เวลาไปเรียนต่างประเทศ อยากจะเป็นภาษาเร็วๆ ต้องปิ๊งสาว (หรือเพศที่สนใจ อะไรก็ได้) สักคน เพราะเราจะต้องหาเรื่องใช้ภาษา ไม่ว่ารู้น้อยรู้มากแค่ไหนก็จะหาเรื่องสื่อสารตลอดเวลา แล้วมันจะเป็นเร็ว</p>
<p>ทีนี้เมื่อเริ่มสื่อสารเบื้องต้นได้แล้ว ความเข้าใจในภาษาที่ดีขึ้น ก็จะมีประโยชน์ที่ทำให้เราสื่อสารได้ดีขึ้น กระชับขึ้น สวยขึ้น กินใจขึ้น ฯลฯ หลายคำที่เคยใช้อย่างเวิ่นเว้อ ก็อาจจะใช้คำเฉพาะไปเลย อย่างเช่น ลองพยายามสื่อสารคำว่า &#8220;หึง&#8221; โดยที่เราไม่รู้จักคำนี้สิ จะพบว่ามันยากมาก แต่พอรู้แล้วการสื่อสารจะกระชับขึ้น ง่ายขึ้น และผิดพลาดน้อยลง</p>
<p>ซึ่งก็เหมือนกับการเขียนโปรแกรมน่ะแหละ ที่ตอนแรกไม่จำเป็นต้องรู้ตื้นลึกหนาบางอะไรของภาษาโปรแกรมที่ใช้มากมายนัก รู้แค่งูๆ ปลาๆ ก็เพียงพอแล้ว แต่จะต้อง &#8220;หัดสื่อสาร&#8221; ให้เร็วที่สุดและเยอะที่สุดเท่าที่จะเยอะได้</p>
<p>ตัวอย่างง่ายๆ ผมเชื่อว่าแทบทุกคนรู้จัก</p>
<pre>
printf("Hello, world\n");
</pre>
<p></p>
<p>(หรืออะไรก็ได้ที่เทียบเท่ากัน ซึ่งแตกต่างกันไปตามภาษา) ซึ่งมักจะได้เรียนกันในคลาสแรก ไม่ก็หนังสือบทแรก แต่จะมีกี่คนเชียวที่ &#8220;เล่น&#8221; กับมันต่อ เอาไปหัดสื่อสารมันต่อ ลองหาดูว่าจะประยุกต์หรือพลิกแพลงมันอย่างไรได้บ้าง เช่น จะลองให้แสดง</p>
<pre>
Name            Lastname        Sword
Byakuya         Kuchiki         Senbonsakura
Sousuke         Aizen           Kyokazuigetsu
</pre>
<p></p>
<p>โดยช่องว่างให้เว้นว่างทั้งหมด 2 Tab และให้ได้โดยใช้ printf เพียงตัวเดียว ทำได้หรือไม่ อย่างไร อะไรทำนองนี้</p>
<p>======================================</p>
<p>สรุปสั้นๆ การเขียนโปรแกรมก็เหมือนกับการสื่อสาร คิดว่าทำอย่างไรให้สื่อสารเก่ง ก็ทำแบบนั้นกับการเขียนโปรแกรม หลายคนอยากจะพูดภาษาอังกฤษเก่ง แต่เจอฝรั่งทีไรวิ่งหนีทุกที ให้พูดก็ไม่ยอมพูด แล้วมันจะเก่งได้อย่างไร ต่อให้วันๆ นั่งท่องไวยากรณ์ นั่งท่องศัพท์ ก็ไม่เคยมีประโยชน์ … พูดในฐานะคนที่พูดได้ 3 ภาษา ฟังออก 4 อ่านออก 6 ภาษา (แต่เป็นงูๆ ปลาๆ ไม่ค่อยแข็งแรงเท่าไหร่ซะ 3) นะครับ</p>
<p>บางครั้งเพื่อให้เก่งขึ้น เราอย่าเลือกพูดเฉพาะเรื่องที่เราอยากจะพูด เพราะบางทีมันจะยากเกินไป เช่น ถ้าเราเพิ่งจะเริ่มเรียนภาษาญี่ปุ่น จะไปคุยกับพวกบ้าการ์ตูนแถว Akihabara เลย ก็คงจะยากเกินไป(มาก)หน่อย แค่หัดถามทางเล็กๆ น้อยๆ สนุกๆ ให้ได้ก่อนจะดีกว่ามาก ประเด็นคือ ให้พูดๆ มันไปซะ อย่าคิดมาก อย่ากลัวผิดด้วย คนหัดภาษา พยายามพูด ผิดๆ ถูกๆ มีแต่คนเอ็นดู และจะช่วยเราทั้งนั้น</p>
<p>สุดท้ายคือ ให้ &#8220;ลงมือทำ&#8221; เพราะความ &#8220;อยากได้&#8221; มันไม่เคยมีประโยชน์เลย ถ้าไม่ &#8220;ลงมือทำ&#8221;</p>
<p>======================================</p>
<p>เรื่องสุดท้าย &#8230; แต่ก่อนอื่นต้องขอเล่าเรื่องตัวเองให้ฟังสักหน่อย ผมมีวิธีการเรียนเขียนโปรแกรมอยู่อย่างหนึ่ง ซึ่งโดยส่วนตัวแล้วมันเวิร์กสำหรับผม คือ</p>
<blockquote><p>
หัดให้ &#8220;มือ&#8221; เขียนโค้ด อย่า copy &#038; paste เด็ดขาด และอย่าใช้สมองคิดโค้ดโดยไม่จำเป็น
</p></blockquote>
<p>เวลาผมจะหัดเขียนโปรแกรมในภาษาใหม่ และหัดจากหนังสือ ไม่ว่าจะเป็นหนังสือใครเขียน (และแน่นอน ว่าผมลองทำแบบนี้กับหนังสือตัวเองด้วย) ผมจะ &#8220;อ่านเนื้อหาผ่านๆ&#8221; ก่อน 1 เที่ยว จากนั้น &#8220;พิมพ์&#8221; โค้ดเหล่านั้นเองด้วย &#8220;มือตัวเอง&#8221; ผมจะไม่เคย copy &#038; paste โค้ดในช่วงของการเรียนรู้เลย เพราะว่าสิ่งที่สำคัญที่สุดคือ มือผมต้องโค้ดเป็น</p>
<p>จากนั้น โค้ดมันจะใช้งานได้หรือไม่ได้ ไม่ต้องกังวล (ถ้าเป็นหนังสือผมเอง มักจะ &#8220;ใช้งานไม่ได้&#8221; ซะเป็นส่วนมาก เพราะหลายอย่างต้องเขียนเพิ่มเอง จากความรู้เก่า) ก็ถึงเวลาที่เราจะย้อนกลับไป &#8220;อ่านเนื้อหาอย่างละเอียด&#8221; อีก 1 เที่ยว พยายามทำความเข้าใจกับสิ่งที่มือมันเพิ่งจะโค้ดไป พยายามปรับปรุงแก้ไขจนมันใช้งานได้</p>
<p>ผลที่ได้จากการทำกระบวนการนี้ซ้ำแล้วซ้ำอีก ก็คือ มือผมจะโค้ดเองได้เสมอ เวลาต้องการอะไร มันแทบจะขยับเองอัตโนมัติ และสมองผมจะเป็นอิสระในการคิดกระบวนการ คิดลอจิก คิดท่าต่างๆ ที่จะใช้ในโปรแกรม</p>
<p>ซึ่งนี่คืออีกปัญหาที่ผมพบ ซึ่งเป็นปัญหา &#8220;ใหญ่ที่สุด&#8221; คือ ผู้ฝึกเขียนโปรแกรม ต้องการได้ผลลัพธ์สำเร็จรูปเร็วเกินไป ฉาบฉวยเกินไป ต้องการโค้ดที่เอาไป copy &#038; paste ได้ กด compile &#038; run เห็นผลลัพธ์ แล้วคนขยันหน่อย ก็อาจจะกลับมานั่งอ่านโค้ดบ้าง นอกนั้นก็ปล่อยๆ มันไป เพราะได้ผลแล้ว</p>
<p>ปัญหาที่ว่าน้ีก็คือ &#8220;โค้ดไม่เคยผ่านมือ&#8221; และ &#8220;ไม่ได้เป็นคนเริ่มเอง&#8221; (แต่เริ่มจากโปรเจคที่เสร็จแล้ว ที่คนอื่นเริ่มไว้ให้แล้ว) ซึ่งทำให้เวลาต้องทำงานจริงๆ จะเริ่มต้นอะไรเองไม่เป็นเลย และโค้ดเองไม่เป็นเลย มือมันจะไม่ขยับ และต้องไปเปลืองแรงสมองคิดโดยใช่เหตุถึงเรื่องโค้ด แล้วหลายคนก็จะ Blank .. ตายตรงนี้</p>
<p>ผมมีข้อสังเกต ว่าถึงระบบการศึกษาบ้านเรามันจะไม่ได้แย่ลงกว่าเดิมเท่าไหร่ แต่ทำไมคนเดี๋ยวนี้เขียนโปรแกรมแย่ลงกว่าเมื่อก่อนมาก ก็เพราะมันเริ่มต้น &#8220;ง่ายเกินไป&#8221; และ &#8220;ฉาบฉวยเกินไป&#8221; มีโค้ดอยู่แล้ว copy &#038; paste ง่าย แค่ Ctrl+C, Ctrl+V ก็จบแล้ว หรือไม่ก็ download งานที่เสร็จแล้วมา unzip แล้วใช้งานได้เลย ดังนั้นโค้ดจะไม่ผ่านมือเลย ซึ่งนี่คือเรื่องที่หลายคนอาจมองว่ามัน &#8220;เล็กน้อย&#8221; แต่จริงๆ แล้วนี่คือเรื่องที่ &#8220;ใหญ่ที่สุด&#8221; เรื่องหนึ่ง</p>
<p>สมัยผมหัดเขียน C++ 98 (ที่เป็น Standard แรกที่มี STL) ผมซื้อหนังสือ <a href="http://www.amazon.com/Standard-Library-Tutorial-Reference/dp/0201379260/ref=sr_1_1?ie=UTF8&#038;qid=1325835252&#038;sr=8-1">The C++ Standard Template Library ของ Nicolai Josuttis</a> มานั่งอ่านผ่านๆ ทั้งเล่มก่อน 1 เที่ยว และ &#8220;นั่งลอก&#8221; โค้ดทุกบรรทัดด้วยมือตัวเอง ทั้งเล่ม จากนั้นค่อยพยายามศึกษารายละเอียดอีกครั้งในเบื้องลึก</p>
<p>ซึ่งนี่เป็นวิธีเดียวกับที่ผมศึกษา Perl, Ruby, Objective-C, Mathametica, Haskell, OCaml, Scheme และภาษาอื่นๆ ที่ผมเขียนเป็น และเขียนพอเป็น</p>
<p>และนี่แหละ เป็นสาเหตุที่ผม &#8220;ไม่อยากให้โค้ด&#8221; สำหรับโปรแกรมจากหนังสือคู่มือเขียน iPhone App ของผม ซึ่งพิมพ์โดยสำนักพิมพ์ Provision</p>
<p>สรุปสั้นๆ: อยากเขียนโปรแกรมเก่ง ต้องหัด &#8220;เขียน&#8221; โปรแกรมครับ อย่าหัดแต่รันโปรแกรมที่คนอื่นเขียนแล้ว</p>
<p>======================================</p>
<p>หวังว่าคงจะเป็นประโยชน์บ้าง …​ จริงๆ แล้วเนื้อหาบทความนี้ คัดมาจาก &#8220;บทแรก&#8221; ของหนังสือเล่มใหม่ที่ผมกำลังเขียนอยู่ (ยังไม่มีชื่ออย่างเป็นทางการ แต่ประมาณ &#8220;คิดและโค้ด ผ่านภาษา  Objective-C&#8221;) โดยดัดแปลงให้เหมาะกับการเป็นบทความบนเว็บ</p>
<p>รออ่านนะครับ ผมหวังว่าจะเป็นหนังสือที่ดี(นะ)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2012/01/06/746/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>หนังสือ iPhone App: 3 บทใหม่ (ที่เคยคิดจะเอาใส่หนังสือเล่ม 2)</title>
		<link>http://www.rawitat.com/2011/12/15/727/</link>
		<comments>http://www.rawitat.com/2011/12/15/727/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 03:45:46 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[Book]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Education]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2011/12/15/727/</guid>
		<description><![CDATA[เนื่องจากก่อนหน้านี้ผมได้เขียนหนังสือ &#8220;คู่มือเขียน iPhone App&#8221; ซึ่งออกมาในช่วงคาบลูกคาบดอก ระหว่างรอการเปลี่ยนแปลง จาก iOS 4 เป็น iOS 5 และ Xcode 4 เป็น Xcode 4.2 ซึ่งเป็นการเปลี่ยนแปลงระดับ &#8220;Major Change&#8221; ใจจริงผมอยากจะเขียนให้อิงกับ iOS 5 และ Xcode 4.2 เป็นหลักตั้งแต่ต้น แต่ในขณะนั้นไม่มีใครบอกได้ว่าทั้งสองตัวนี้จะออกมาเมื่อไหร่ และด้วยเหตุผลหลายๆ อย่าง รวมถึงความต้องการของสำนักพิมพ์ ที่อยากจะออกสู่ตลาดเร็วๆ ในขณะที่ยังไม่มีเจ้าอื่นออกมา (ซึ่งผมเข้าใจเหตุผลนี้ และไม่มีปัญหาใดๆ ทั้งสิ้น) ทำให้เราตัดสินใจทำมันออกมาเป็น &#8220;iOS 4 และ Xcode 4&#8243; เพื่อให้ออกมาได้ก่อน และหลายคนได้เริ่มก่อน และด้วยเหตุผลของ NDA ทำให้ผมไม่สามารถที่จะเขียนถึงรายละเอียดอะไรของ iOS 5 และ Xcode 4.2 ได้เลย ทีนี้ปัญหาก็เลยเกิดขึ้น [...]]]></description>
			<content:encoded><![CDATA[<p>เนื่องจากก่อนหน้านี้ผมได้เขียนหนังสือ &#8220;คู่มือเขียน iPhone App&#8221; ซึ่งออกมาในช่วงคาบลูกคาบดอก ระหว่างรอการเปลี่ยนแปลง จาก iOS 4 เป็น iOS 5 และ Xcode 4 เป็น Xcode 4.2 ซึ่งเป็นการเปลี่ยนแปลงระดับ &#8220;Major Change&#8221;</p>
<p>ใจจริงผมอยากจะเขียนให้อิงกับ iOS 5 และ Xcode 4.2 เป็นหลักตั้งแต่ต้น แต่ในขณะนั้นไม่มีใครบอกได้ว่าทั้งสองตัวนี้จะออกมาเมื่อไหร่ และด้วยเหตุผลหลายๆ อย่าง รวมถึงความต้องการของสำนักพิมพ์ ที่อยากจะออกสู่ตลาดเร็วๆ ในขณะที่ยังไม่มีเจ้าอื่นออกมา (ซึ่งผมเข้าใจเหตุผลนี้ และไม่มีปัญหาใดๆ ทั้งสิ้น) ทำให้เราตัดสินใจทำมันออกมาเป็น &#8220;iOS 4 และ Xcode 4&#8243; เพื่อให้ออกมาได้ก่อน และหลายคนได้เริ่มก่อน</p>
<p>และด้วยเหตุผลของ NDA ทำให้ผมไม่สามารถที่จะเขียนถึงรายละเอียดอะไรของ iOS 5 และ Xcode 4.2 ได้เลย</p>
<p>ทีนี้ปัญหาก็เลยเกิดขึ้น เมื่อ iOS 5 ออกมาแล้ว และ Xcode 4.2 ออกมาแล้ว (และไม่สามารถหา Xcode 4.0, 4.1 ได้ง่ายๆ อีกต่อไปแล้ว เพราะ Xcode ที่อยู่บน Mac App Store มันเป็น 4.2) ปัญหาง่ายๆ มันก็เลยเกิดขึ้น เพราะว่ามันมีการเปลี่ยนแปลงมากมาย อย่างที่ผมบอกไว้ ทั้งในระดับตัวภาษา Objective-C, iOS SDK และตัว Xcode เอง โดยเฉพาะอย่างยิ่งเมื่อ Default Settings ทุกอย่างนั้นกำหนดให้ใช้ความสามารถใหม่โดยปริยาย</p>
<p>ผมได้เริ่มเขียนหนังสือ &#8220;เล่ม 2&#8243; ซึ่งวางเอาไว้เป็นเล่มต่อจากเล่มที่พิมพ์ไปแล้ว มาพักหนึ่ง และมีเนื้อหาที่เกี่ยวข้องกับสิ่งที่เปลี่ยนไปเหล่านี้ แต่ผมขอตัดสินใจแสดงความรับผิดชอบที่ออกหนังสือมาเร็วไปหน่อย ทำให้หลายคนที่เริ่มต้นเขียน iOS แล้วเจอเครื่องมือใหม่มีปัญหา โดยเอาออกมาให้อ่านก่อนแบบฟรีๆ ทุกคน ไม่ว่าจะเป็นผู้อ่านเล่มแรกของผมหรือไม่ก็ตาม ดังนี้</p>
<ul>
<li><a href="http://code-app.com/book_tmp/book2_ch3.pdf">บทที่ 3: การโปรแกรมที่เปลี่ยนไปของ Objective-C จากอดีตถึงปัจจุบัน</a> ซึ่งจะเน้นหนักไปที่เรื่อง Automatic Reference Counting (ARC) ซึ่งทำให้หลายต่อหลายคนงง ในเรื่องการเขียนโค้ด
<li><a href="http://code-app.com/book_tmp/book2_ch4_sfinal.pdf">บทที่ 4: ปฏิวัติการออกแบบและสร้างโปรแกรมด้วย Storyboard</a> เป็นการใช้เครื่องมือในการออกแบบโปรแกรมตัวใหม่ คือ Storyboard ซึ่งมาช่วย/มาแทน Interface Builder ของดั้งเดิม
<li><a href="http://code-app.com/book_tmp/book2_ch5_sfinal.pdf">บทที่ 5: ลูกเล่น &#038; แม่ไม้ ในการสร้าง Table View</a> เป็นการใช้ Storyboard ในการสร้าง Table View และ Navigation-based Application พร้อมเครื่องใหม่ในการทำ Cell Prototyping และ Static Cell
</ul>
</p>
<p>สำหรับท่านที่ไม่สนใจจะศึกษาเพิ่มเติม หรืออยากจะทำตามหนังสือเล่มแรกอย่างเดียว ผมมีคำแนะนำว่า เวลาสร้างโปรเจคใหม่ ให้เลือก &#8220;ไม่ใช้ Storyboard&#8221; และ &#8220;ไม่ใช้ Automatic Reference Counting&#8221; เสมอครับ</p>
<p>ตอนนี้ผม &#8220;พับ&#8221; โครงการที่จะเขียนหนังสือเล่ม 2 ออกตีพิมพ์เรียบร้อยแล้วครับ แต่จะ &#8220;เขียนใหม่ทั้งหมด&#8221; เป็น iOS Development Series โดยไม่เหลือเยื่อใยกับของเดิม เป็นการเขียนใหม่ 100% ทั้งตัวอย่าง เนื้อหา เรียบเรียง โดยจะทำเป็น e-Book only และขายผ่านเว็บไซต์ของ <a href="http://www.code-app.com">Code App</a> และอาจจะผ่าน App ซึ่งออกแบบมาเฉพาะสำหรับหนังสือเล่มนี้ เท่านั้น โดยมีเนื้อหาแบ่งเป็นหลายเล่ม ตั้งแต่เริ่มต้นเขียนโปรแกรมด้วย Objective-C เต็มๆ เล่มเลยทีเดียว</p>
<p>อดใจรอกันสักหน่อยนะครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2011/12/15/727/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[ประกาศ] iOS SDK 5 &amp; Xcode 4.2 Training</title>
		<link>http://www.rawitat.com/2011/12/09/671/</link>
		<comments>http://www.rawitat.com/2011/12/09/671/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 05:54:46 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[ประกาศ]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2011/12/09/671/</guid>
		<description><![CDATA[ทีมงาน Code App จัด Training สำหรับ iOS 5 SDK &#038; Xcode 4.2 ครับ จัดเต็ม 4 วัน 17, 18, 24, 25 ธันวาคม รายละเอียดดูได้จากเว็บไซต์ของ Code App ครับ พัฒนา iOS Application ด้วย iOS 5 SDK &#038; Xcode 4.2 หลังจากนี้จะมี Training ระดับ intermediate และ advanced แบบเจาะเฉพาะเรื่องมาเรื่อยๆ ครับ เช่น Data Persistent &#038; Core Data, Web Services, Core Image, Social Network [...]]]></description>
			<content:encoded><![CDATA[<p>ทีมงาน Code App จัด Training สำหรับ iOS 5 SDK &#038; Xcode 4.2 ครับ จัดเต็ม 4 วัน 17, 18, 24, 25 ธันวาคม รายละเอียดดูได้จากเว็บไซต์ของ Code App ครับ</p>
<p><a href="http://www.code-app.com/content/พัฒนา-ios-application-ด้วย-ios-5-sdk-xcode-42">พัฒนา iOS Application ด้วย iOS 5 SDK &#038; Xcode 4.2</a></p>
<p>หลังจากนี้จะมี Training ระดับ intermediate และ advanced แบบเจาะเฉพาะเรื่องมาเรื่อยๆ ครับ เช่น Data Persistent &#038; Core Data, Web Services, Core Image, Social Network Applications เรื่องละ 1-2 วัน คอยติดตามนะครับ แต่สำหรับแต่ละเรื่องพวกนี้จะไม่ลงพื้นฐานแล้ว จะเจาะเข้าเรื่องเลย เพราะว่าผมไม่อยากทำ Training แบบกว้างๆ เรื่อยๆ แต่ไม่ได้อะไรแบบลงลึกเท่าไหร่</p>
<p>สำหรับคอร์สนี้ ลงทะเบียนได้ในลิงค์ข้างบนครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2011/12/09/671/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ชี้แจง: &#8220;คู่มือเขียน iPhone App&#8221;</title>
		<link>http://www.rawitat.com/2011/08/16/648/</link>
		<comments>http://www.rawitat.com/2011/08/16/648/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 14:44:56 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[Book]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Education]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2011/08/16/648/</guid>
		<description><![CDATA[หนังสือเล่มแรกของผม &#8220;คู่มือเขียน iPhone App&#8221; ก็ได้ออกวางตลาดเรียบร้อยแล้ว ก็หวังว่าจะช่วยเป็นจุดเริ่มต้นเล็กๆ น้อยๆ สำหรับหลายๆ คนที่อยากจะหัดเขียนโปรแกรม หรือแอพ เพื่อใช้งาน iPhone, iPad, iPod touch กันได้บ้าง หลังจากหนังสือเล่มนี้วางตลาดไปได้ไม่นาน ก็มี e-mail เข้ามาหาผม เพื่อขอ Code จากหนังสือเล่มนี้พอสมควร ซึ่งสิ่งที่ผมทำก็คือ ไม่ให้ Code ทันที แต่จะพยายามจะถามว่าติดปัญหาตรงไหน เพื่อจะได้ช่วยแก้ปัญหา พร้อมอธิบายเพิ่มเติมเท่าที่ทำได้ เพราะว่าแต่ละคนอาจต้องการคำอธิบายที่แตกต่างกันตามธรรมชาติ ดังนั้นหากผมได้รู้ถึงปัญหาของแต่ละคน ว่าติดตรงไหน หรือว่าอ่านหนังสือตรงไหนไม่ละเอียด ก็จะช่วยอธิบายให้ตรงจุดได้ บางครั้งที่ผู้อ่านหลายท่าน พิมพ์โค้ดตามหนังสือ และเกิด Error หรือ Warning ขึ้นมา ทั้งๆ ที่พิมพ์ตามตรงเป๊ะทุกตัวอักษรแล้ว และเมื่อเกิดเรื่องเช่นนั้นขึ้น บางครั้งผู้อ่านบางท่าน อาจจะเริ่มทึกทักว่าหนังสือผมผิด หรือหนังสือผมลืมโน่นลืมนี่ ฯลฯ ผมขอชี้แจงอะไรบางอย่างตรงนี้ครับ โดยอ้างอิงตัวอย่างจาก e-mail ที่ผมตอบผู้อ่านผมบางท่าน (ขอสงวนชื่อผู้อ่านนะครับ ว่าผมตอบใคร) [...]]]></description>
			<content:encoded><![CDATA[<p>หนังสือเล่มแรกของผม &#8220;คู่มือเขียน iPhone App&#8221; ก็ได้ออกวางตลาดเรียบร้อยแล้ว ก็หวังว่าจะช่วยเป็นจุดเริ่มต้นเล็กๆ น้อยๆ สำหรับหลายๆ คนที่อยากจะหัดเขียนโปรแกรม หรือแอพ เพื่อใช้งาน iPhone, iPad, iPod touch กันได้บ้าง</p>
<p><center><br />
<img src="http://www.rawitat.com/wp-content/uploads/2011/08/iphoneapps.gif" width="240" height="309" alt="iphoneapps.gif" /><br />
</center></p>
<p>หลังจากหนังสือเล่มนี้วางตลาดไปได้ไม่นาน ก็มี e-mail เข้ามาหาผม เพื่อขอ Code จากหนังสือเล่มนี้พอสมควร ซึ่งสิ่งที่ผมทำก็คือ ไม่ให้ Code ทันที แต่จะพยายามจะถามว่าติดปัญหาตรงไหน เพื่อจะได้ช่วยแก้ปัญหา พร้อมอธิบายเพิ่มเติมเท่าที่ทำได้ เพราะว่าแต่ละคนอาจต้องการคำอธิบายที่แตกต่างกันตามธรรมชาติ ดังนั้นหากผมได้รู้ถึงปัญหาของแต่ละคน ว่าติดตรงไหน หรือว่าอ่านหนังสือตรงไหนไม่ละเอียด ก็จะช่วยอธิบายให้ตรงจุดได้</p>
<p>บางครั้งที่ผู้อ่านหลายท่าน พิมพ์โค้ดตามหนังสือ และเกิด Error หรือ Warning ขึ้นมา ทั้งๆ ที่พิมพ์ตามตรงเป๊ะทุกตัวอักษรแล้ว และเมื่อเกิดเรื่องเช่นนั้นขึ้น บางครั้งผู้อ่านบางท่าน อาจจะเริ่มทึกทักว่าหนังสือผมผิด หรือหนังสือผมลืมโน่นลืมนี่ ฯลฯ</p>
<p>ผมขอชี้แจงอะไรบางอย่างตรงนี้ครับ โดยอ้างอิงตัวอย่างจาก e-mail ที่ผมตอบผู้อ่านผมบางท่าน (ขอสงวนชื่อผู้อ่านนะครับ ว่าผมตอบใคร)</p>
<p>กรณีแรก ผู้อ่านประสพปัญหาจากโค้ดในหน้า 157</p>
<blockquote><p>
การวางตำแหน่งต่างๆ ต้องประมวลความรู้เองจากหน้า 121 ครับ ผมเขียนว่า</p>
<p>&#8220;ก่อนจะใช้งานสิ่งใดๆ ต้องประกาศสิ่งนั้นก่อน&#8221; ดังนั้น …. (พร้อมกับบอกวิธี)</p>
<p>เป็นความตั้งใจของผู้เขียน ที่ต้องการให้ผู้อ่านประมวลความรู้เอง จากสิ่งที่ทำไปแล้วในบทก่อนๆ</p>
<p>ลำดับ Code ที่ปรากฏในหนังสือ สะท้อนลำดับความคิดของผมครับ ไม่ได้สะท้อนลำดับของโค้ดในไฟล์<br />
การที่ผมเขียน Code หนึ่งๆ ทีหลัง ไม่ได้แปลว่าจะต้องปรากฏภายหลังในไฟล์ครับ เราอาจต้อง<br />
ใส่ Interface ของมันไปก่อนใน .h หรือว่าอาจจะต้องเขียน private interface เสียก่อน หรือว่าอาจจะใช้<br />
วิธีการประกาศไว้ก่อน ก็ได้
</p></blockquote>
<p>กรณีที่สอง ผู้อ่านประสพปัญหาจากโค้ดในหน้า 78</p>
<blockquote><p>
Code ที่คุณเขียน และบอกว่ามีปัญหา อยู่ในหนังสือหน้า 78 นะครับ</p>
<p>ลองย้อนไปอ่านดูในหน้า 64 ครับ ตั้งแต่บรรทัดแรกเลย ว่าผมเขียนว่าอะไร และผมมีตัวอย่างให้ดูแล้วด้วย (เรื่อง @synthesize)<br />
ซึ่งจะว่าไป ก็สืบมาตั้งแต่ขั้นตอนการเขียนที่บอกไว้ตั้งแต่หน้า 59 :-)</p>
<p>เป็นความตั้งใจของผมครับ ที่ผู้อ่านจะต้อง &#8220;นำความรู้ที่อ่านผ่านไปแล้ว และเห็นตัวอย่างไปแล้ว มาประมวลใช้เอง&#8221;</p>
<p>ทีนี้คงจะไม่มีทางลืม @synthesize สิ่งที่กำหนด @property เลยสินะครับ ดีกว่าให้พิมพ์ตามๆ ไปอย่างไม่รู้เรื่องอะไร<br />
เพราะว่ามีหลายคนที่เคยเจอมา อ่านหนังสือไม่ละเอียด ไม่คิด จะดูแต่ code อย่างเดียว และพิมพ์ตามอย่างเดียว<br />
ถ้า code ทำงานได้หมด ไม่เจอปัญหาจากการอ่านไม่ละเอียดและไม่คิดเลย ก็จะ take everything for a grant<br />
(ขออภัย นึกภาษาไทยไม่ออก … ประมาณว่า มองข้ามโน่นนี่ นึกว่าเป็นเรื่องเล็กๆ) ทำให้แก้ปัญหาต่างๆ ไม่ได้ในที่สุด</p>
<p>สิ่งที่คุณเจอ และการแก้ปัญหาของคุณ เป็นเจตนาของผมทีี่อยากให้เกิดขึ้นครับ</p>
<p>มาถูกทางแล้วครับ ยินดีด้วย
</p></blockquote>
<p>ดังนั้น เพื่อ Make Statement ให้ชัดเจนตรงนี้ ผมขอบอกอีกครั้งนะครับ (ซึ่งเป็นการเขียนซ้ำข้อความที่ผมเขียนไว้ในหน้า 14 ของหนังสือ ซึ่งหลายท่านอาจจะอ่านข้ามไปแบบไม่สนใจเท่าไหร่)</p>
<blockquote><p>
หนังสือเล่มนี้จะไม่มี &#8220;การรวมโค้ด&#8221; ของโปรแกรมเอาไว้ที่หน้าใดหน้าหนึ่ง ให้พิมพ์ตามหรือลอกเฉพาะส่วนของโค้ดได้ โดยไม่อ่านเนื้อหาและความคิดอันเป็นที่มาของโค้ด</p>
<p>นอกจากนี้ โค้ดหลายส่วนที่ซ้ำหรือคล้ายกับที่เคยผ่านมือกันมาแล้ว บางส่วนผู้อ่านจะต้องเขียนเพิ่มเติมเอง</p>
<p>ผมไม่ปฏิเสธครับ ว่าลักษณะการเขียนหนังสือของผมนั้น ได้รับอิทธิพลจากหนังสือต่างประเทศ ทั้งอเมริกาและญี่ปุ่น เป็นอย่างมาก
</p></blockquote>
<p>ผมเชื่อว่า นี่คือสิ่งที่ถูกต้อง ผมไม่ต้องการให้คนเขียนโปรแกรม หัดเขียนโปรแกรมอย่างฉาบฉวยและมักง่าย ไม่ใส่ใจรายละเอียดเล็กๆ น้อยๆ และที่สำคัญที่สุดคือ หัดเขียนโปรแกรมบนถนนที่ราบเรียบเกินไป ไม่พบปัญหาเล็กๆ น้อยๆ ที่ต้องประมวลความรู้พื้นฐานมาแก้เลย</p>
<p>หลายต่อหลายคน หัดเขียนโปรแกรมตามตัวอย่าง คอมไพล์ผ่าน ทำงานได้ ตามตัวอย่างเป๊ะๆ ก็หลงระเริง คิดว่าเข้าใจแล้ว ทำได้แล้ว พอเขียนจริง ต่อให้เป็นโปรแกรมง่ายๆ ไม่ต้องยาก (แค่เปิดไฟล์ นับคำในไฟล์ว่ามีกี่คำ ที่ผมชอบใช้เวลาสอนหนังสือที่ ม.ศิลปากร) ก็เริ่มต้นไม่ถูก พอเขียนแล้วเจอปัญหาเล็กน้อย ก็ไปต่อไม่เป็น เจอข้อความจาก Compiler ก็กลัว ฯลฯ</p>
<p>ขอให้ค่อยๆ พยายามๆ ครับ อ่านหนังสือให้ละเอียด ใช้เวลากับมันให้มากสักนิด เพื่อรากฐานที่มั่นคง</p>
<p>หนังสือผม ไม่เขียนหลอกผู้อ่านไปวันๆ ว่าใครก็สามารถเป็นนักพัฒนาโปรแกรมสำหรับ iPhone ได้ อย่างแน่นอน การที่จะให้ทำตามแบบ Copy &#038; Paste แบบไม่ต้องคิด และได้โปรแกรมที่เหมือนจะทำงานได้นั้น ไม่ใช่สิ่งที่ผมเห็นด้วย เป็นสิ่งที่ฉาบฉวยและไม่ยั่งยืน ผมเชื่อว่า ไม่มีความรู้แบบฉาบฉวยแม้แต่บรรทัดเดียวในหนังสือเล่มนี้</p>
<p>และ … คาดเข็มขัดนิรภัยให้แน่นนะครับ เพราะว่าเมื่อพื้นฐานของทุกคนแน่นแล้ว &#8220;เล่ม 2&#8243; จะเร็วกว่านี้ หนักกว่านี้ ยากกว่านี้ แน่นอน เพราะจะเป็นสิ่งที่ผมทิ้งท้ายไว้ในบทสุดท้าย (บทที่ 16) แต่ถ้าไม่มีสิ่งที่เป็นความรู้ &#8220;ระดับสูงขึ้นไป&#8221; เลยล่ะก็ การเขียน App หลายตัวสำหรับ AppStore ปัจจุบันนั้นทำไม่ได้แน่นอนครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2011/08/16/648/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>iOS หรือ Android?</title>
		<link>http://www.rawitat.com/2011/01/23/597/</link>
		<comments>http://www.rawitat.com/2011/01/23/597/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 09:35:02 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Just-a-Thought]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2011/01/23/597/</guid>
		<description><![CDATA[เร็วๆ นี้ผมไปบรรยายเรื่อง Mobile Application Development ให้กับแลบ MSCIM ซึ่งก็มีคำถามน่าสนใจ ว่าจะทำบน iOS หรือ Android ดี ส่วนหนึ่งก็มาจากความเห็นส่วนตัวของผมเอง ว่าอย่าไปสนใจข้อมูลเชิงการตลาด หรือสถิติทั้งหลาย ว่าใครขายดีกว่ากัน แพลตฟอร์มไหนโตเร็วกว่ากัน มากมายนัก อย่าไปสนใจ commom sense เบื้องต้นจะบอกให้เราพัฒนาโปรแกรมสำหรับแพลตฟอร์มที่มีผู้ใช้มากกว่า แต่ให้คิดพัฒนาบนแพลตฟอร์มที่เราเป็นผู้ใช้ซะเอง นั่นคือ ถ้าเรายังไม่มี ก็เริ่มต้นด้วยการให้เรามีก่อน หรือว่าหาทางทำให้ตัวเองเป็น user ก่อน มันก็เลยมีคำถามน่าสนใจตามมาว่า &#8220;งั้นจะซื้อ iOS หรือ Android แพลตฟอร์มดี?&#8221; เพื่อให้ตัวเองได้เริ่มต้นเป็น &#8220;ผู้ใช้&#8221; และ &#8220;เพื่อทำความคุ้นเคยกับแพลตฟอร์มสำหรับพัฒนา app ต่อ&#8221; ได้ ผมมีข้อคิดแบบนี้ก็แล้วกัน เขียน app ลง iOS จริงๆ มันต้องทำบน Mac ด้วย ดังนั้นถ้าไม่มี Mac หรือไม่ได้วางแผนจะซื้อ [...]]]></description>
			<content:encoded><![CDATA[<p>เร็วๆ นี้ผมไปบรรยายเรื่อง Mobile Application Development ให้กับแลบ <a href="http://mscim.buu.ac.th">MSCIM</a> ซึ่งก็มีคำถามน่าสนใจ ว่าจะทำบน iOS หรือ Android ดี</p>
<p>ส่วนหนึ่งก็มาจากความเห็นส่วนตัวของผมเอง ว่าอย่าไปสนใจข้อมูลเชิงการตลาด หรือสถิติทั้งหลาย ว่าใครขายดีกว่ากัน แพลตฟอร์มไหนโตเร็วกว่ากัน มากมายนัก อย่าไปสนใจ commom sense เบื้องต้นจะบอกให้เราพัฒนาโปรแกรมสำหรับแพลตฟอร์มที่มีผู้ใช้มากกว่า แต่ให้คิดพัฒนาบนแพลตฟอร์มที่เราเป็นผู้ใช้ซะเอง นั่นคือ ถ้าเรายังไม่มี ก็เริ่มต้นด้วยการให้เรามีก่อน หรือว่าหาทางทำให้ตัวเองเป็น user ก่อน</p>
<p>มันก็เลยมีคำถามน่าสนใจตามมาว่า &#8220;งั้นจะซื้อ iOS หรือ Android แพลตฟอร์มดี?&#8221; เพื่อให้ตัวเองได้เริ่มต้นเป็น &#8220;ผู้ใช้&#8221; และ &#8220;เพื่อทำความคุ้นเคยกับแพลตฟอร์มสำหรับพัฒนา app ต่อ&#8221; ได้</p>
<p>ผมมีข้อคิดแบบนี้ก็แล้วกัน</p>
<ul>
<li>เขียน app ลง iOS จริงๆ มันต้องทำบน Mac ด้วย ดังนั้นถ้าไม่มี Mac หรือไม่ได้วางแผนจะซื้อ Mac ภาษีสำหรับการคิดจะซื้อ iOS แพลตฟอร์มมาเพื่อพัฒนาโปรแกรม ก็ลดน้อยลงไปด้วย (แต่ใช้ VMWare ก็ได้นะ แต่ผมเองก็ไม่เคยใช้ Xcode บน OS X บน VMWare สำหรับการพัฒนาลงเครื่องเหมือนกัน)
<li>เช่นเดียวกัน (แต่ตรงกันข้าม) เท่าที่ผมทราบนะ เครื่องไม้เครื่องมือสำหรับพัฒนา Android บน Mac มันค่อนข้างจะสู้แพลตฟอร์มอื่น (เช่น Windows) ไม่ได้นะ
<li>จะเอา app ลงเครื่องจริง สำหรับ iOS ต้องเสียตังค์ $99 ให้กับ Apple นะ นอกจากมหาวิทยาลัยจะมีคอร์สสอน iOS Development และ register กับ Apple (ไม่มีค่าใช้จ่าย) ก็จะให้ น.ศ. เอา app ลงเครื่องได้ แต่ขายไม่ได้ ถ้าจะขาย ก็ต้องเสียเงินเอง
<li>ผมไม่มีข้อมูลเรื่องนี้สำหรับ Android
<li>iOS vs Android ถ้ามองในมุมมองนักพัฒนาแล้ว มันมีข้อดีข้อเสียต่างกันนะ ในแง่ของ Hardware Diversity แล้ว iOS เหนือกว่าเยอะ เพราะว่ามันแทบไม่มี diversity &#8230; ซึ่งสำหรับนักพัฒนาที่ต้องเขียนโปรแกรม support อะไรต่ออะไรแล้ว diversity เยอะเป็นเรื่องไม่ค่อยจะดีเท่าไหร่ แค่ iPhone 3Gs กับ iPhone 4 ที่มีความละเอียดหน้าจอต่างกัน ต้องเตรียมภาพ 2 resolution ไหนละจะ iPad อีก แค่นี้ก็รำคาญแย่แล้ว
<li>แต่สุดท้าย มันต้องเริ่มด้วยการเป็น &#8220;ผู้ใช้&#8221; ก่อน แล้วจะเริ่มจากการใช้อะไรดี?
<li>ข้อแนะนำง่ายๆ คือ หน้าด้านไปยืนเล่นเรื่อยๆ ว่าชอบอะไรมากกว่ากัน ต่อให้มันดีแค่ไหน ถ้าใช้แล้วไม่ชอบ มันก็แค่นั้นแหละ ความชอบมันวัดแทนกันไม่ได้เสียด้วยสิ ไปยืนเล่นเลย ถ้าร้านเริ่มมองหน้า ก็เปลี่ยนร้าน
<li>ลองใช้โปรแกรมพื้นฐานทั้งหลายทั้งแหล่ โทรเข้าโทรออกทำไง ดูปฏิทินทำไง เล่นเน็ตทำไง download โปรแกรมเพิ่มทำไง พอใจความเร็วมั้ย ฯลฯ เอาแค่นี้แหละ ลองสัก 1-2 สัปดาห์ ก็น่าจะรู้แล้ว ว่าชอบอะไร
<li>อย่าลืมเรื่อง form factor ด้วยนะ เอาให้เหมาะมือ เอาให้ถือสบาย เพราะว่ายังไงเราก็ต้อง &#8220;ถือ&#8221; มันเวลาใช้งาน หยิบขึ้นมา ถือไว้นิ่งๆ สัก 5 นาทีเป็นอย่างน้อย ถ้ารำคาญ ก็ไม่ต้องเอา จากนั้นลองเอานิ้วโป้งลูบให้ทั่วหน้าจอ ถ้ามีส่วนไหนลูบไม่ถึง หรือว่าฝืนมือ ก็ไม่ต้องเอา เพราะว่านี่คือการใช้งานพื้นฐาน ว่างั้น
<li>อย่าลืมคิดถึงเรื่องคุณภาพของ app ไว้ด้วยนะ จิตใต้สำนึกของผมมันบอกว่า iOS app บน AppStore จะมีคุณภาพ &#8220;โดยเฉลี่ย&#8221; และมีความ consistency ในเรื่องการใช้งานมากกว่า Android app บน Market ด้วยเหตุผลเรื่อง &#8220;ความเปิด&#8221; ของการให้นำ app ขึ้น store ดังนั้นมองจากมุมของ &#8220;คนที่ต้องเรียนรู้ลักษณะของ app&#8221; (ย้ำนะ จากมุมนี้เท่านั้น ไม่ใช่จากมุมมองของ consumer ทั่วไป) แล้ว iOS มีภาษีดีกว่ามาก
<li>อย่ารอรุ่นใหม่มากนัก เพราะว่าต้องรอต่อไปเรื่อยๆ เล่นก่อนก็ได้เรียนรู้ก่อน
</ul>
</p>
<p>ประมาณนี้แหละ หวังว่าจะเป็นประโยชน์บ้างนะครับ</p>
<p>ป.ล. บรรยายโคตรสนุก สนุกมากๆ</p>
<p><u>Update 1</u>: ที่สำคัญนะครับ อย่ามัวแต่เถียงกัน หรือก่อสงครามว่าอะไรดีกว่ากัน มือถือที่ดีที่สุด คือมือถือที่เราชอบที่สุด ใช้ประโยชน์ได้สูงสุด อย่าเอา spec มาเถียงกัน อย่าฉะกันว่าไอ้นั่นไม่มีนี่ ไอ้นี่ไม่มีนั่น ตัวเองคิดว่าอะไรดี ก็ไม่ต้องไปบอกให้คนที่ไม่เห็นด้วยเขาเห็นด้วย ถึงจะเถียงชนะ คุณก็ไม่ได้เงินหรือว่าเครดิตอะไรจากทั้ง Apple ทั้ง Google อยู่ดี ทำประโยชน์อะไรให้ชาวโลกก็ไม่ได้ เสียเวลาเปล่าๆ เอาเวลาทำแบบนั้น ไปนั่งหัดเล่น หัดเขียน app ดีกว่า อาจจะได้เงินใช้บ้าง ได้ทำประโยชน์จริงๆ ให้คนที่อยากใช้ app เราบ้าง</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2011/01/23/597/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>การทำ Proof-of-Concept กับการพัฒนาโปรแกรม</title>
		<link>http://www.rawitat.com/2010/12/05/533/</link>
		<comments>http://www.rawitat.com/2010/12/05/533/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 10:33:44 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2010/12/05/533/</guid>
		<description><![CDATA[มีเรื่องนึงที่อยากจะฝากบอกน้องๆ ทั้งนักศึกษาและคนที่กำลังหัดเขียนโปรแกรมใหม่ๆ ที่จะต้องพัฒนาโปรแกรม ไม่ว่าจะใช้เอง เป็นโปรเจค ทำขาย หรือว่าอะไรก็แล้วแต่ ก็คือเรื่องของการทำ Prototyping และ PoC (Proof-of-Concept) ไม่รู้ว่าผมรู้สึกไปเองหรือเปล่า ว่าเวลาหลายๆ คนเขียนโปรแกรม ไม่ค่อยทำ PoC หรือว่า Prototyping กันเท่าไหร่ แต่ว่าจะลุยเขียนโปรแกรมที่อยากได้ไปเลยทั้งๆ ที่ยังไม่รู้ว่าหลายอย่างมันทำงานอย่างไร หรือว่าควรจะออกแบบโครงสร้างภายในอย่างไร เวลาได้โค้ดใหม่มาจากแหล่งข้อมูล ก็ลองผิดลองถูกมันลงไปในโปรแกรมที่อยากจะเขียนเลย ถ้าเป็นโปรแกรมเล็กๆ ประเภทเขียนส่งอาจารย์ตามรายวิชา มันก็ไม่มีปัญหาหรอกครับ แต่ว่าอย่าติดจนเคยชิน เพราะว่าลักษณะการทำงานแบบนี้มันไม่ scale-up ไปสู่การทำงานโปรเจคที่ใหญ่ขึ้นมาแม้แต่นิดเดียว ลองแบ่ง phase การทำงานเป็นแบบนี้ครับ นั่งคิดคร่าวๆ ว่าโปรแกรมจะมีการใช้งานอย่างไร ต้องทำอะไรได้บ้าง ไม่ต้องมากไม่ต้องมาย จากนั้นนั่ง list มันออกมาเล่นๆ ว่าจะทำแบบนั้นได้นี่ ภายในโปรแกรมจะต้องมีความสามารถอะไรบ้าง (ไม่ใช่ความสามารถที่ผู้ใช้งานจะได้ใช้นะ หมายถึงว่าต้องเขียนให้มันทำอะไรได้บ้าง) ดูว่าอะไรที่เราทำเป็นแล้ว อะไรที่ยังทำไม่เป็น checklist ง่ายๆ เปิดโปรเจคใหม่หลายๆ โปรเจค ตามเรื่องที่เรายังทำไม่เป็น หัดเล่นเป็นเรื่องๆ ไป [...]]]></description>
			<content:encoded><![CDATA[<p>มีเรื่องนึงที่อยากจะฝากบอกน้องๆ ทั้งนักศึกษาและคนที่กำลังหัดเขียนโปรแกรมใหม่ๆ ที่จะต้องพัฒนาโปรแกรม ไม่ว่าจะใช้เอง เป็นโปรเจค ทำขาย หรือว่าอะไรก็แล้วแต่ ก็คือเรื่องของการทำ Prototyping และ PoC (Proof-of-Concept)</p>
<p>ไม่รู้ว่าผมรู้สึกไปเองหรือเปล่า ว่าเวลาหลายๆ คนเขียนโปรแกรม ไม่ค่อยทำ PoC หรือว่า Prototyping กันเท่าไหร่ แต่ว่าจะลุยเขียนโปรแกรมที่อยากได้ไปเลยทั้งๆ ที่ยังไม่รู้ว่าหลายอย่างมันทำงานอย่างไร หรือว่าควรจะออกแบบโครงสร้างภายในอย่างไร เวลาได้โค้ดใหม่มาจากแหล่งข้อมูล ก็ลองผิดลองถูกมันลงไปในโปรแกรมที่อยากจะเขียนเลย</p>
<p>ถ้าเป็นโปรแกรมเล็กๆ ประเภทเขียนส่งอาจารย์ตามรายวิชา มันก็ไม่มีปัญหาหรอกครับ แต่ว่าอย่าติดจนเคยชิน เพราะว่าลักษณะการทำงานแบบนี้มันไม่ scale-up ไปสู่การทำงานโปรเจคที่ใหญ่ขึ้นมาแม้แต่นิดเดียว</p>
<p>ลองแบ่ง phase การทำงานเป็นแบบนี้ครับ</p>
<ol>
<li>นั่งคิดคร่าวๆ ว่าโปรแกรมจะมีการใช้งานอย่างไร ต้องทำอะไรได้บ้าง ไม่ต้องมากไม่ต้องมาย
<li>จากนั้นนั่ง list มันออกมาเล่นๆ ว่าจะทำแบบนั้นได้นี่ ภายในโปรแกรมจะต้องมีความสามารถอะไรบ้าง (ไม่ใช่ความสามารถที่ผู้ใช้งานจะได้ใช้นะ หมายถึงว่าต้องเขียนให้มันทำอะไรได้บ้าง)
<li>ดูว่าอะไรที่เราทำเป็นแล้ว อะไรที่ยังทำไม่เป็น checklist ง่ายๆ
<li>เปิดโปรเจคใหม่หลายๆ โปรเจค ตามเรื่องที่เรายังทำไม่เป็น หัดเล่นเป็นเรื่องๆ ไป เล่นโน่นเล่นนี่ เล่นให้มันพังไปเลยก็ได้ ไม่เป็นไร เพราะว่านี่คือการลองเล่นกับโปรเจคที่ไม่เกี่ยวกับงานเราสักนิด จะเขียนโค้ดให้มันเละแค่ไหนก็ได้ อีกสามสี่วันอ่านไม่รู้เรื่องก็ได้ ไม่ต้องมีโครงสร้างอะไรมากมาย ลุยมันไปเลยไม่ต้องคิดมาก
<li>แต่ว่าเป้าหมายของโปรเจคเล็กๆ ที่เปิดใหม่เหล่านั้นต้องชัดเจนนะ ว่าจะเรียนรู้เรื่องอะไร กำหนดเวลาให้ตัวเองไว้ด้วย กำหนดผลลัพธ์ที่ชัดเจนไว้ด้วย
<li>เมื่อ checklist เต็มแล้ว (คือ ทุกตัวทำเป็นหมดแล้ว) ค่อยมาวาง architect ของโปรแกรม/โปรเจคที่อยากได้ ว่าจะออกมายังไง เพราะว่าตอนนี้เราน่าจะมีประสบการณ์แล้วว่าอะไรมันทำได้ทำไม่ได้ อะไรมันต้องทำงานร่วมกับอะไรยังไง รับค่าอะไร รีเทิร์นอะไร ประสิทธิภาพเป็นยังไง ฯลฯ
</ol>
<p>อย่าศึกษาสิ่งที่ยังทำไม่เป็นลงในงานที่กำลังทำอยู่ตรงๆ เด็ดขาดครับ เพราะว่าโค้ดมันจะมั่ว เนื่องจากเรายังไม่มีประสบการณ์ ซึ่งจะทำให้แก้หรือว่าแกะยากมาก ทำให้โปรแกรมของเราจะต้องยึดติดกับโค้ดห่วยๆ โดยใช่เหตุ</p>
<p>ฝากเป็นข้อคิดนะครับ เพราะว่าเห็นแบบนี้เยอะเหลือเกิน ที่ว่าไม่ยอมแยกโปรเจคใหม่มาเพื่อเรียนรู้เป็นเรื่องๆ แต่ว่าจะยัดลงไปในโปรแกรมที่กำลังพัฒนาอยู่เลย</p>
<p>เสียน้อย (เปิดโปรเจคใหม่ เรียนรู้มันทีละเรื่อง) มันเสียยาก แต่เสียมาก (โค้ดในโปรเจคมั่ว โปรเจคไม่มีโครงสร้างแก่น เป็นแบบปะผุ ฯลฯ) มันเสียง่าย นะครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2010/12/05/533/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>เก็บ iOS App Crash Log ส่ง App Developer กันเถอะ!</title>
		<link>http://www.rawitat.com/2010/09/11/526/</link>
		<comments>http://www.rawitat.com/2010/09/11/526/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 07:14:04 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2010/09/11/526/</guid>
		<description><![CDATA[ก็เป็นเรื่องปกติที่ app จะทำงานมีปัญหา อาจจะ crash บ้างอะไรบ้าง สาเหตุก็ร้อยแปดพันเก้า ทั้งที่โดยปกติแล้ว นักพัฒนาก็จะทดสอบโปรแกรมบนเครื่องตัวเองอยู่แล้ว (ซึ่งอันนี้ก็แล้วแต่คน ว่าจะทดสอบละเอียดขนาดไหน บางคนก็แทบไม่ได้ทดสอบอะไร แค่รันผ่านๆ ก็คิดว่าใช้ได้แล้วก็มี) แต่ประเด็นก็คือ ถ้าโปรแกรมทำงานมีปัญหา บนเครื่องของเรา จะทำอย่างไร? หลายคนก็บ่นๆ ไปเรื่อยๆ และปัญหาก็ไม่ได้ถูกแก้ ผมเสนอว่า &#8220;แจ้งผู้พัฒนา&#8221; ครับ และไม่ใช่แจ้งแค่ว่า &#8220;โปรแกรมคุณมีปัญหาเมื่อทำแบบนี้ๆๆ&#8221; เพราะว่าแบบนั้นช่วยนักพัฒนาไม่ได้แน่ๆ ยิ่งถ้าเค้าทดสอบบนเครื่องเค้าแล้วมันไม่มีปัญหา เค้าก็จะมืดแปดด้านต่อไป แล้วปัญหามันก็จะอยู่ต่อไป .. งั้นทำไงดี? คำตอบคือ &#8220;ส่ง crash log ให้เค้าด้วย&#8221; &#8230; แล้วไอ้ crash log ที่ว่านี่ อยู่ตรงไหนล่ะ? สำหรับโปรแกรมหลายตัว เมื่อมัน crash ก็จะมี dialog ขึ้นมา ให้ส่ง log เพื่อแจ้งผู้พัฒนาอยู่แล้ว ซึ่ง log ที่ว่านี้จะเต็มไปด้วยข้อมูลต่างๆ [...]]]></description>
			<content:encoded><![CDATA[<p>ก็เป็นเรื่องปกติที่ app จะทำงานมีปัญหา อาจจะ crash บ้างอะไรบ้าง สาเหตุก็ร้อยแปดพันเก้า ทั้งที่โดยปกติแล้ว นักพัฒนาก็จะทดสอบโปรแกรมบนเครื่องตัวเองอยู่แล้ว (ซึ่งอันนี้ก็แล้วแต่คน ว่าจะทดสอบละเอียดขนาดไหน บางคนก็แทบไม่ได้ทดสอบอะไร แค่รันผ่านๆ ก็คิดว่าใช้ได้แล้วก็มี) แต่ประเด็นก็คือ ถ้าโปรแกรมทำงานมีปัญหา บนเครื่องของเรา จะทำอย่างไร? หลายคนก็บ่นๆ ไปเรื่อยๆ และปัญหาก็ไม่ได้ถูกแก้</p>
<p>ผมเสนอว่า &#8220;แจ้งผู้พัฒนา&#8221; ครับ และไม่ใช่แจ้งแค่ว่า &#8220;โปรแกรมคุณมีปัญหาเมื่อทำแบบนี้ๆๆ&#8221; เพราะว่าแบบนั้นช่วยนักพัฒนาไม่ได้แน่ๆ ยิ่งถ้าเค้าทดสอบบนเครื่องเค้าแล้วมันไม่มีปัญหา เค้าก็จะมืดแปดด้านต่อไป แล้วปัญหามันก็จะอยู่ต่อไป .. งั้นทำไงดี?</p>
<p>คำตอบคือ &#8220;ส่ง crash log ให้เค้าด้วย&#8221; &#8230; แล้วไอ้ crash log ที่ว่านี่ อยู่ตรงไหนล่ะ?</p>
<p>สำหรับโปรแกรมหลายตัว เมื่อมัน crash ก็จะมี dialog ขึ้นมา ให้ส่ง log เพื่อแจ้งผู้พัฒนาอยู่แล้ว ซึ่ง log ที่ว่านี้จะเต็มไปด้วยข้อมูลต่างๆ ที่ผู้ใช้ทั่วไปจะอ่านไม่รู้เรื่องหรอกครับ อาจจะคิดว่ามันไม่สำคัญด้วยซ้ำไป แต่เป็นข้อมูลที่สำคัญยิ่งสำหรับผู้พัฒนา ว่าอะไรมันเกิดขึ้นบ้าง จะได้แก้ปัญหาถูก</p>
<p>สำหรับโปรแกรม iPhone, iPod touch, iPad นั้น ปกติแล้วเครื่องจะเก็บ log ไว้ตลอดเวลา และเมื่อเรา sync เครื่องกับ iTunes นั้น log เหล่านี้ก็จะถูก sync ลงเครื่องด้วย โดยจะอยู่ในที่ต่อไปนี้ครับ:</p>
<ol>
<li>บน Mac:
<pre>~/Library/Logs/CrashReporter/MobileDevice/ชื่อไอโฟน/</pre>
<li>บน Windows XP:
<pre>C:\Documents and Settings\\Application Data\Apple computer\Logs\CrashReporter\ชื่อไอโฟน\</pre>
<li>บน Windows VISTA:
<pre>C:\Users\\AppData\Roaming\Apple computer\Logs\CrashReporter\MobileDevice\ชื่อไอโฟน\</pre>
</ol>
<p>Crash log จะถูกเก็บอยู่ในนั้นครับ โดยให้สังเกตนิดหน่อย ว่าถ้ามี folder (directories) ชื่อ &#8220;ชื่อไอโฟน&#8221; กับ &#8220;ชื่อไอโฟน.symbolicated&#8221; ล่ะก็ ให้เลือก .symbolicated นะครับ มันจะมีข้อมูลที่เป็นประโยชน์กับนักพัฒนาที่มากกว่าใน folder &#8220;ชื่อไอโฟน&#8221; เฉยๆ</p>
<p>สำหรับรูปแบบของ Crash log จะถูกเก็บในไฟล์รูปแบบนี้: ชื่อapp_วันเวลา_ชื่อเครื่อง.crash เช่น PetdoComics_2010-09-04-175745_Rawitats-iPhone-4.crash หรือ TwitterFonPro_2010-08-30-103513_Rawitats-iPhone-4.crash เป็นต้น (ข้อมูลจริงจากบนเครื่องผม)</p>
<p>ตัวอย่างครับ</p>
<ul>
<li>รูปแสดงตัวอย่างที่อยู่และตำแหน่งของ crash log (บน Mac OS X)
<p><a href="http://www.rawitat.com/wp-content/uploads/2010/09/location_crash.png" rel="lightbox[526]"><img src="http://www.rawitat.com/wp-content/uploads/2010/09/location_crash-tm.jpg" width="500" height="257" alt="location_crash.png" /></a></p>
<li>การเปิด crash log ดู จะเห็นข้อมูลที่เป็นประโยชน์กับผู้พัฒนา เช่นโปรแกรมมัน crash เมื่อเรียกอะไรขึ้นมาทำงาน ขณะนั้นมีอะไรทำงานอยู่บ้าง ฯลฯ (ตัวอย่างของ Echofon)
<p><a href="http://www.rawitat.com/wp-content/uploads/2010/09/crash_log.png" rel="lightbox[526]"><img src="http://www.rawitat.com/wp-content/uploads/2010/09/crash_log-tm.jpg" width="500" height="405" alt="crash_log.png" /></a>
</ul>
<p>ดังนั้น สำหรับ App ผมทุกตัว ส่งมาได้นะครับ contact อยู่ในหน้า App ของ iTunes อยู่แล้ว :-D</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2010/09/11/526/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Buying List &amp; Buying List Free</title>
		<link>http://www.rawitat.com/2010/08/05/507/</link>
		<comments>http://www.rawitat.com/2010/08/05/507/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 05:00:49 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2010/08/05/507/</guid>
		<description><![CDATA[โปรแกรมทำ Shopping List ที่เน้นความเรียบ ความง่าย และความรวดเร็วในการใช้งานเป็นหลัก เกิดจากความขี้เกียจในการดึงเศษกระดาษกับหาปากกามาจดว่าจะซื้ออะไร ถ้าซื้อได้ก็รอดตัวไป ถ้าซื้อไม่ได้ ก็มักจะลืม เพราะกระดาษชิ้นนั้นจะถูกทิ้งไป พยายามหาโปรแกรมทำ Shopping List, To do list, To buy list หรืออะไรก็แล้วแต่แบบนี้ตั้งนาน มีแต่ซับซ้อนไปทั้งนั้น (จากความต้องการของตัวเอง) ก็เลยตัดสินใจพัฒนาโปรแกรมนี้ขึ้น เป้าหมายง่ายๆ คือ &#8220;ต้องไม่ช้ากว่าหรือลำบากกว่าการหยิบกระดาษขึ้นมาจดๆๆ&#8221; ดังนั้นฟีเจอร์อะไรก็ตาม ที่จะทำให้มันไม่บรรลุเป้าหมายนี้ (พวกที่โดยส่วนตัวผมคิดว่าเป็น Nice to have แต่อาจจะใช้บ้างไม่ใช้บ้าง) ผมหั่นทิ้งเรียบ และโฟกัสกับการทำยังไงก็ได้ ให้มันไม่ช้ากว่า ลำบากกว่าการดึงกระดาษขึ้นมาจด &#8230;​ ต้องดึงมาใช้งานและเก็บลงกระเป๋าได้ในเวลาน้อยที่สุดเท่าที่จะทำได้ &#8230; ผมคิดว่า ถ้าต้องการฟีเจอร์ที่ผมตัดทิ้งไปเหล่านั้น มีทางเลือกอีกเยอะมาก ใน App Store ครับ Screenshot จาก iTunes App Store โปรแกรมมี 2 [...]]]></description>
			<content:encoded><![CDATA[<p>โปรแกรมทำ Shopping List ที่เน้นความเรียบ ความง่าย และความรวดเร็วในการใช้งานเป็นหลัก เกิดจากความขี้เกียจในการดึงเศษกระดาษกับหาปากกามาจดว่าจะซื้ออะไร ถ้าซื้อได้ก็รอดตัวไป ถ้าซื้อไม่ได้ ก็มักจะลืม เพราะกระดาษชิ้นนั้นจะถูกทิ้งไป พยายามหาโปรแกรมทำ Shopping List, To do list, To buy list หรืออะไรก็แล้วแต่แบบนี้ตั้งนาน มีแต่ซับซ้อนไปทั้งนั้น (จากความต้องการของตัวเอง) ก็เลยตัดสินใจพัฒนาโปรแกรมนี้ขึ้น</p>
<p>เป้าหมายง่ายๆ คือ &#8220;ต้องไม่ช้ากว่าหรือลำบากกว่าการหยิบกระดาษขึ้นมาจดๆๆ&#8221; ดังนั้นฟีเจอร์อะไรก็ตาม ที่จะทำให้มันไม่บรรลุเป้าหมายนี้ (พวกที่โดยส่วนตัวผมคิดว่าเป็น Nice to have แต่อาจจะใช้บ้างไม่ใช้บ้าง) ผมหั่นทิ้งเรียบ และโฟกัสกับการทำยังไงก็ได้ ให้มันไม่ช้ากว่า ลำบากกว่าการดึงกระดาษขึ้นมาจด &#8230;​ ต้องดึงมาใช้งานและเก็บลงกระเป๋าได้ในเวลาน้อยที่สุดเท่าที่จะทำได้ &#8230; ผมคิดว่า ถ้าต้องการฟีเจอร์ที่ผมตัดทิ้งไปเหล่านั้น มีทางเลือกอีกเยอะมาก ใน App Store ครับ</p>
<p><center><br />
<a href="http://www.rawitat.com/wp-content/uploads/2010/08/screenshots.jpg" rel="lightbox[507]"><img src="http://www.rawitat.com/wp-content/uploads/2010/08/screenshots-tm.jpg" width="520" height="259" alt="screenshots.jpg" /></a><br />
<i>Screenshot จาก iTunes App Store</i><br />
</center></p>
<p>โปรแกรมมี 2 รุ่นครับ คือ รุ่นจ่ายเงิน ($0.99) และ รุ่นฟรี ซึ่งจะจำกัด Favorite Items ไว้ที่ 10 items และใช้ iAd support (แต่ไม่มีผลกับ account ประเทศไทย เพราะ iAd ยังมาไม่ถึง ถ้าไม่ใช่ account อเมริกา ก็ไม่มี Ad โผล่มา) และสุดท้าย ต่างกันที่ไอคอน รุ่นจ่ายเงินเป็นสีดำ Metallic ออกแบบโดยใช้ Theme แบบ MacBook Pro ส่วนรุ่นฟรี เป็นสีขาวเรียบๆ แบบ MacBook</p>
<p><center><br />
<a href="http://www.rawitat.com/wp-content/uploads/2010/08/large_icon.png" rel="lightbox[507]"><img src="http://www.rawitat.com/wp-content/uploads/2010/08/large_icon-tm.jpg" width="100" height="100" alt="large_icon.png" /></a>      <a href="http://www.rawitat.com/wp-content/uploads/2010/08/large_icon_free.png" rel="lightbox[507]"><img src="http://www.rawitat.com/wp-content/uploads/2010/08/large_icon_free-tm.jpg" width="100" height="100" alt="large_icon_free.png" /></a><br />
</center></p>
<p>ลองใช้กันดูนะครับ &#8230; ถ้าชอบ และอยากให้พัฒนาโปรแกรมต่อไป ก็ช่วยกันสนับสนุนกันหน่อยนะครับ</p>
<p><a href="http://itunes.apple.com/us/app/buying-list/id381312875?mt=8"><br />
<img src="http://www.rawitat.com/wp-content/uploads/2010/08/as_available_appstore_icon_20091006.png" width="160" height="61" alt="as_available_appstore_icon_20091006.png" /></a></p>
<p><a href="http://www.appdiscover.com" title="Find and share the best mobile apps - AppDiscover"><img src="http://www.appdiscover.com/static/images/appdiscover_badge.100x100.png" border="0" alt="AppDiscover badge" /></a></p>
<p>ล่าสุด โปรแกรมนี้ถูกรีวิวโดย <a href="http://www.blog.appdiscover.com">AppDiscover Blog</a>  ใน entry <a href="http://blog.appdiscover.com/2010/08/buying-list-by-rawitat-pulam.html">Buying List by Rawitat Pulam</a> ครับ ขอ Quote ไว้ตรงนี้ด้วยก็แล้วกัน</p>
<blockquote><p>
Buying List is a sweet little list building app for the iphone by Rawitat Pulam. It allows you to manage items you wish to buy now and in the future efficiently with two simple lists, your shopping history, and a customizable list of favorites.</p>
<p>Once you learn Buying List’s interface, it’s a joy to use. There are four tabs at the bottom: buying now, buy later, history, and favorites. Here’s how it works:</p>
<p>You can add items directly to the buying now or buy later list. Tap any item on the buying now list once you’ve purchased it. When you’ve completed your shopping, press the new list button and the items you’ve purchased are moved to the history along with the date you purchased them.  Any items that you have not purchased are automatically moved to your buy later list.</p>
<p>From the buy later list, selecting a few items and pressing the new list button adds them to your current buy now list.</p>
<p>Additionally, any item on your lists can be added to your favorites by tapping a star icon. Your favorites list functions much like the buy later list. Tap a few items, hit new list, and they’re added to your current buy now list.</p>
<p>The interface is a bit complicated to describe, but once you get used to it you can quickly build manageable lists from a large set of items you need to buy. If you are a shopping list person, I would highly recommend it. The free version allows only 10 favorites. Get the full version for $0.99
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2010/08/05/507/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ช่องกรอกรหัสผ่าน+วันที่</title>
		<link>http://www.rawitat.com/2010/02/10/323/</link>
		<comments>http://www.rawitat.com/2010/02/10/323/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 13:47:58 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Usability/UI]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2010/02/10/323/</guid>
		<description><![CDATA[ผมคิดว่ามันน่าจะเป็น standard practice หรือว่าธรรมเนียมปฏิบัติกันมานานแล้วนะ สำหรับไอ้ &#8220;ช่องกรอกรหัสผ่าน&#8221; ตามเว็บเนี่ย ว่ามันจะต้องเป็นจุดๆๆๆ หรือว่า ดาวๆๆๆ หรือว่าอะไรก็ได้ ที่ทำให้ไม่สามารถอ่านได้ว่า เรากำลังพิมพ์รหัสผ่านว่าอะไรอยู่ แต่ว่าดูนี่ซะก่อน อ่านได้ชัดเจน สวยงามมาก &#8230; ตอนที่ผมพิมพ์ตอนแรก อึ้งไปสามสิบวินาที ก่อนจะร้อง &#8220;เฮ้ย จะบ้าเรอะ!&#8221; แบบไม่เกรงใจคนรอบข้าง .. ไม่ทราบว่าท่านไปจ้างโปรแกรมเมอร์ที่ไหน ทำในงบประมาณหลักกี่ล้านครับท่าน? ยังไม่พอนะครับ ข้างล่าง ผมยังพบสิ่งนี้ ไม่ทราบว่า วันที่ตามนั้นนี่ มันมีในปฏิทินโลกไหนไม่ทราบขอรับ? ผมยังไม่ได้ลองกดปุ่มบันทึกนะ ว่ามันผ่านหรือเปล่า แต่ว่าไว้มีเวลาจะลองดูหน่อย แต่ว่าแค่นี้ก็เกินไปแล้วครับ ทำไมปล่อยให้สามารถเกิดความผิดพลาดเช่นนี้ได้ (จริงๆ ถ้าระบบกรอกข้อมูลมันดีนะ ผู้ใช้ไม่ต้องเสี่ยงกดปุ่มบันทึกข้อมูล ก่อนจะรู้ว่ามันผิดพลาดหรือเปล่าหรอก)]]></description>
			<content:encoded><![CDATA[<p>ผมคิดว่ามันน่าจะเป็น standard practice หรือว่าธรรมเนียมปฏิบัติกันมานานแล้วนะ สำหรับไอ้ &#8220;ช่องกรอกรหัสผ่าน&#8221; ตามเว็บเนี่ย ว่ามันจะต้องเป็นจุดๆๆๆ หรือว่า ดาวๆๆๆ หรือว่าอะไรก็ได้ ที่ทำให้ไม่สามารถอ่านได้ว่า เรากำลังพิมพ์รหัสผ่านว่าอะไรอยู่</p>
<p>แต่ว่าดูนี่ซะก่อน</p>
<p><img src="http://www.rawitat.com/wp-content/uploads/2010/02/password-field2.png" width="520" height="207" alt="password_field.png" /></p>
<p>อ่านได้ชัดเจน สวยงามมาก &#8230; ตอนที่ผมพิมพ์ตอนแรก อึ้งไปสามสิบวินาที ก่อนจะร้อง &#8220;เฮ้ย จะบ้าเรอะ!&#8221; แบบไม่เกรงใจคนรอบข้าง .. ไม่ทราบว่าท่านไปจ้างโปรแกรมเมอร์ที่ไหน ทำในงบประมาณหลักกี่ล้านครับท่าน? ยังไม่พอนะครับ ข้างล่าง ผมยังพบสิ่งนี้</p>
<p><img src="http://www.rawitat.com/wp-content/uploads/2010/02/date1.png" width="520" height="92" alt="date.png" /></p>
<p>ไม่ทราบว่า วันที่ตามนั้นนี่ มันมีในปฏิทินโลกไหนไม่ทราบขอรับ? ผมยังไม่ได้ลองกดปุ่มบันทึกนะ ว่ามันผ่านหรือเปล่า แต่ว่าไว้มีเวลาจะลองดูหน่อย แต่ว่าแค่นี้ก็เกินไปแล้วครับ ทำไมปล่อยให้สามารถเกิดความผิดพลาดเช่นนี้ได้ (จริงๆ ถ้าระบบกรอกข้อมูลมันดีนะ ผู้ใช้ไม่ต้องเสี่ยงกดปุ่มบันทึกข้อมูล ก่อนจะรู้ว่ามันผิดพลาดหรือเปล่าหรอก)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2010/02/10/323/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ออกแบบเว็บไซต์</title>
		<link>http://www.rawitat.com/2010/01/26/318/</link>
		<comments>http://www.rawitat.com/2010/01/26/318/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 08:06:42 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Usability/UI]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2010/01/26/318/</guid>
		<description><![CDATA[เมื่อกี้มีคนปรึกษาเรื่องการออกแบบเว็บไซต์นิดหน่อย เลยขอยกการสนทนามาให้อ่านกันตรงนี้นะครับ คิดว่าเป็นข้อคิดและอุทธาหรณ์ได้บ้างพอสมควร แต่ขอเอาชื่อผู้ถามผมออกนะครับ ผู้ถาม: อาจารย์เว็บแบบไหนที่แตกต่างๆ ผู้ถาม: ขอคำแนะนำหน่อยนะคะ ผู้ถาม: พอดีเพื่อนเขียนเว็บให้บริษัทน่ะ ผม: แล้วทำไมต้องแตกต่าง? ผู้ถาม: แต่ไม่อยากจำเจอยู่กับรูปแบบเดิมๆๆ ผม: มาอีกล่ะ พวกทำงานเอารูปแบบเป็นหลัก จะรูปแบบเก่า รูปแบบใหม่ ถ้าไม่ได้วิเคราะห์เรื่อง function และ usage เป็นหลัก มันจะทำได้ไง ผู้ถาม: แต่คือว่าเขาแค่ตอ้งการดีไซต์และส่วนเรือ่งนั้นเขาคงทำเองอ่ะ ผู้ถาม: ก้อแค่ออกแบบอะ ผม: เว็บไซต์ไม่สามารถ design หน้าตาได้ หากไม่ design function ครับ ผม: มันเหมือนกับคุณอยากจะออกแบบ &#8220;หน้าตา&#8221; ของรถยนต์ โดยไม่กำหนดว่า รถคันนี้ จะต้องวิ่งในที่แบบไหน บรรทุกอะไร กลุ่มเป้าหมายคืออะไร ผม: คุณอาจจะคิดว่า หน้าตารถสปอร์ตมันเท่ห์ดี ผม: แต่รถตู้ที่ออกแบบโดยใช้ concept รถสปอร์ต มีแต่ห่วยกับห่วย ผม: [...]]]></description>
			<content:encoded><![CDATA[<p>เมื่อกี้มีคนปรึกษาเรื่องการออกแบบเว็บไซต์นิดหน่อย เลยขอยกการสนทนามาให้อ่านกันตรงนี้นะครับ คิดว่าเป็นข้อคิดและอุทธาหรณ์ได้บ้างพอสมควร แต่ขอเอาชื่อผู้ถามผมออกนะครับ</p>
<p>
<font color="red">ผู้ถาม:</font> อาจารย์เว็บแบบไหนที่แตกต่างๆ<br />
<font color="red">ผู้ถาม:</font> ขอคำแนะนำหน่อยนะคะ<br />
<font color="red">ผู้ถาม:</font> พอดีเพื่อนเขียนเว็บให้บริษัทน่ะ<br />
<font color="green">ผม:</font> แล้วทำไมต้องแตกต่าง?<br />
<font color="red">ผู้ถาม:</font> แต่ไม่อยากจำเจอยู่กับรูปแบบเดิมๆๆ<br />
<font color="green">ผม:</font> มาอีกล่ะ พวกทำงานเอารูปแบบเป็นหลัก จะรูปแบบเก่า รูปแบบใหม่ ถ้าไม่ได้วิเคราะห์เรื่อง function และ usage เป็นหลัก มันจะทำได้ไง<br />
<font color="red">ผู้ถาม:</font> แต่คือว่าเขาแค่ตอ้งการดีไซต์และส่วนเรือ่งนั้นเขาคงทำเองอ่ะ<br />
<font color="red">ผู้ถาม:</font> ก้อแค่ออกแบบอะ<br />
<font color="green">ผม:</font> เว็บไซต์ไม่สามารถ design หน้าตาได้ หากไม่ design function ครับ<br />
<font color="green">ผม:</font> มันเหมือนกับคุณอยากจะออกแบบ &#8220;หน้าตา&#8221; ของรถยนต์ โดยไม่กำหนดว่า รถคันนี้ จะต้องวิ่งในที่แบบไหน บรรทุกอะไร กลุ่มเป้าหมายคืออะไร<br />
<font color="green">ผม:</font> คุณอาจจะคิดว่า หน้าตารถสปอร์ตมันเท่ห์ดี<br />
<font color="green">ผม:</font> แต่รถตู้ที่ออกแบบโดยใช้ concept รถสปอร์ต มีแต่ห่วยกับห่วย<br />
<font color="green">ผม:</font> ว่างั้นเถอะ<br />
<font color="green">ผม:</font> ไม่ได้กวนตีนหรือหลบเลี่ยงในการตอบ แต่ด้วยจรรยาบรรณ ไม่สามารถออกแบบเฉพาะหน้าตาได้ครับ หากคุณเคารพวิชาชีพตัวเอง ในฐานะนักออกแบบเว็บไซต์<br />
<font color="red">ผู้ถาม:</font> แต่มานก้อเปงส่วนหนึ่งหนิ<br />
<font color="green">ผม:</font> ลำดับก่อนหลังมีผลครับ<br />
<font color="green">ผม:</font> เอางี้ ผมให้คุณเลือกชุด จะพาออกงาน คุณจะเลือกชุดอะไร? ยังไง?<br />
<font color="red">ผู้ถาม:</font> ก้อต้องดูงานก่อนค่ะ<br />
<font color="green">ผม:</font> ใช่มั้ย<br />
<font color="green">ผม:</font> คุณต้องทราบว่า &#8220;งานอะไร แขกที่จะต้องไปพบ เป็นคนระดับไหน ต้องดู look เป็นยังไง ฯลฯ&#8221; ใช่มั้ย<br />
<font color="green">ผม:</font> ก็แบบเดียวกับการออกแบบเว็บไซต์น่ะแหละครับ<br />
<font color="red">ผู้ถาม:</font> แต่งานนี้เปงวัตถุดิบทางอุตสาหกรรม<br />
<font color="red">ผู้ถาม:</font> แต่ลูกค้าบอกว่าไม่อยากให้ธุรกิจมากเกิน<br />
<font color="green">ผม:</font> ถามคนอื่นเถอะครับ<br />
<font color="green">ผม:</font> คนที่ไม่ได้มีมาตรฐานในการทำงาน และมีจรรยาบรรณในการักษามาตรฐาน มีเยอะครับ<br />
<font color="red">ผู้ถาม:</font> ค่ะ<br />
<font color="green">ผม:</font> เหมือนสร้างตึกครับ ถ้าผมเป็นนักออกแบบ สถาปนิก ผมคงไม่สามารถบอกได้ว่า &#8220;ตึกนี้สวย ตึกนี้สวย ตึกนี้แปลก เอาแบบนี้ ผสมกับแบบนี้ ผสมกับแบบนี้ ฯลฯ&#8221; โดยไม่ดูว่า &#8220;แล้วมันเป็นตึกอะไรวะ ใครจะอยู่วะ เอาไปทำอะไรวะ คนเดินเข้าออกเยอะมั้ยวะ ฯลฯ&#8221;<br />
<font color="green">ผม:</font> สุดท้าย คุณอาจจะได้ตึกที่สวย แปลก เฉี่ยว แต่ใช้งานไม่ได้จริง<br />
<font color="green">ผม:</font> ตัวอย่างนี้มีให้เห็นตามเว็บไซต์ทั่วไปครับ<br />
<font color="green">ผม:</font> สวย แปลก ดูครั้งแรกแล้ว &#8220;ว้าว!&#8221; แต่ขอโทษนะครับ ไม่สามารถใช้งานได้จริงตามที่มันควรจะใช้งานได้<br />
<font color="red">ผู้ถาม:</font> ช่ายค่ะ<br />
<font color="red">ผู้ถาม:</font> พอเข้าใจและ<br />
<font color="green">ผม:</font> ขออนุญาตเอาการสนทนานี้ ไปลง blog และสอนหนังสือนะครับ เป็นตัวอย่างแนวคิดและทัศนคติหนึ่ง ที่พบเห็นได้ตามสังคมทั่วไป<br />
<font color="red">ผู้ถาม:</font> ขอบคุงค่ะ<br />
<font color="red">ผู้ถาม:</font> แป่ว<br />
<font color="red">ผู้ถาม:</font> ตามบาายคะ<br />
<font color="red">ผู้ถาม:</font> ก้อคิดไม่ออก<br />
<font color="red">ผู้ถาม:</font> เพราะยึดติดแต่สิ่งที่แตกต่างอ่ะคะ
</p>
<p>ตามนั้นเลยครับ อีกอย่างนะครับ ช่วยๆ กันใช้ภาษาไทยให้มันถูกๆ หน่อยดีกว่านะครับ คือ บางครั้งเราพิมพ์ผิดโดยไม่ตั้งใจนี่คงไม่เป็นไร แต่ถ้าใช้แบบ &#8220;ก้อ (ก็)&#8221; หรือ &#8220;เปง (เป็น)&#8221; หรือ &#8220;มาน (มัน)&#8221;  จนกลายเป็นเรื่องปกติ ผมว่ามันก็เกินไปครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2010/01/26/318/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

