<?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>kowito.com</title>
	<atom:link href="http://www.kowito.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kowito.com</link>
	<description>Try not to become a man of success but a man of value.</description>
	<lastBuildDate>Thu, 15 Dec 2011 04:43:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>one line factorial</title>
		<link>http://www.kowito.com/2011/12/15/one-line-factorial/</link>
		<comments>http://www.kowito.com/2011/12/15/one-line-factorial/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 04:26:23 +0000</pubDate>
		<dc:creator>kowito</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.kowito.com/?p=198</guid>
		<description><![CDATA[def fac(i): return reduce(int.__mul__, xrange(1, i+1), 1)]]></description>
			<content:encoded><![CDATA[<div class="AWD_like_button "><fb:like href="http://www.kowito.com/2011/12/15/one-line-factorial/" send="true" width="" colorscheme="light" layout=standard show_faces="true" font="tahoma" action="like"></fb:like></div><pre name="code" class="python">def fac(i): return reduce(int.__mul__, xrange(1, i+1), 1)</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.kowito.com/2011/12/15/one-line-factorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>พ่อเสีย</title>
		<link>http://www.kowito.com/2011/09/26/%e0%b8%9e%e0%b9%88%e0%b8%ad%e0%b9%80%e0%b8%aa%e0%b8%b5%e0%b8%a2/</link>
		<comments>http://www.kowito.com/2011/09/26/%e0%b8%9e%e0%b9%88%e0%b8%ad%e0%b9%80%e0%b8%aa%e0%b8%b5%e0%b8%a2/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 19:08:01 +0000</pubDate>
		<dc:creator>kowito</dc:creator>
				<category><![CDATA[ไม่มีหมวดหมู่]]></category>

		<guid isPermaLink="false">http://www.kowito.com/?p=35</guid>
		<description><![CDATA[พ่อเสียเมื่อวันที่ 6 ตุลาคม 2551 เวลา 10 โมงเช้า จากโรคหัวใจ]]></description>
			<content:encoded><![CDATA[<div class="AWD_like_button "><fb:like href="http://www.kowito.com/2011/09/26/%e0%b8%9e%e0%b9%88%e0%b8%ad%e0%b9%80%e0%b8%aa%e0%b8%b5%e0%b8%a2/" send="true" width="" colorscheme="light" layout=standard show_faces="true" font="tahoma" action="like"></fb:like></div><p>พ่อเสียเมื่อวันที่ 6 ตุลาคม 2551 เวลา 10 โมงเช้า จากโรคหัวใจ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kowito.com/2011/09/26/%e0%b8%9e%e0%b9%88%e0%b8%ad%e0%b9%80%e0%b8%aa%e0%b8%b5%e0%b8%a2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Filmsick : ดูหนังอย่างคนป่วย</title>
		<link>http://www.kowito.com/2011/03/01/filmsick-%e0%b8%94%e0%b8%b9%e0%b8%ab%e0%b8%99%e0%b8%b1%e0%b8%87%e0%b8%ad%e0%b8%a2%e0%b9%88%e0%b8%b2%e0%b8%87%e0%b8%84%e0%b8%99%e0%b8%9b%e0%b9%88%e0%b8%a7%e0%b8%a2/</link>
		<comments>http://www.kowito.com/2011/03/01/filmsick-%e0%b8%94%e0%b8%b9%e0%b8%ab%e0%b8%99%e0%b8%b1%e0%b8%87%e0%b8%ad%e0%b8%a2%e0%b9%88%e0%b8%b2%e0%b8%87%e0%b8%84%e0%b8%99%e0%b8%9b%e0%b9%88%e0%b8%a7%e0%b8%a2/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 07:14:37 +0000</pubDate>
		<dc:creator>kowito</dc:creator>
				<category><![CDATA[Movies]]></category>

		<guid isPermaLink="false">http://www.kowito.com/?p=21</guid>
		<description><![CDATA[Filmsick : ดูหนังอย่างคนป่วย ไปอ่าน blog ที่ นี่แล้วชอบมากเลย บล็อกไวกับลืม]]></description>
			<content:encoded><![CDATA[<div class="AWD_like_button "><fb:like href="http://www.kowito.com/2011/03/01/filmsick-%e0%b8%94%e0%b8%b9%e0%b8%ab%e0%b8%99%e0%b8%b1%e0%b8%87%e0%b8%ad%e0%b8%a2%e0%b9%88%e0%b8%b2%e0%b8%87%e0%b8%84%e0%b8%99%e0%b8%9b%e0%b9%88%e0%b8%a7%e0%b8%a2/" send="true" width="" colorscheme="light" layout=standard show_faces="true" font="tahoma" action="like"></fb:like></div><p><a href="http://filmsick.exteen.com/">Filmsick : ดูหนังอย่างคนป่วย</a></p>
<p>ไปอ่าน blog ที่ นี่แล้วชอบมากเลย บล็อกไวกับลืม</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kowito.com/2011/03/01/filmsick-%e0%b8%94%e0%b8%b9%e0%b8%ab%e0%b8%99%e0%b8%b1%e0%b8%87%e0%b8%ad%e0%b8%a2%e0%b9%88%e0%b8%b2%e0%b8%87%e0%b8%84%e0%b8%99%e0%b8%9b%e0%b9%88%e0%b8%a7%e0%b8%a2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ทำไมถึงควรเลือกใช้ Mercurial SCM</title>
		<link>http://www.kowito.com/2011/02/17/%e0%b8%97%e0%b8%b3%e0%b9%84%e0%b8%a1%e0%b8%96%e0%b8%b6%e0%b8%87%e0%b8%84%e0%b8%a7%e0%b8%a3%e0%b9%80%e0%b8%a5%e0%b8%b7%e0%b8%ad%e0%b8%81%e0%b9%83%e0%b8%8a%e0%b9%89-mercurial-scm/</link>
		<comments>http://www.kowito.com/2011/02/17/%e0%b8%97%e0%b8%b3%e0%b9%84%e0%b8%a1%e0%b8%96%e0%b8%b6%e0%b8%87%e0%b8%84%e0%b8%a7%e0%b8%a3%e0%b9%80%e0%b8%a5%e0%b8%b7%e0%b8%ad%e0%b8%81%e0%b9%83%e0%b8%8a%e0%b9%89-mercurial-scm/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 14:38:37 +0000</pubDate>
		<dc:creator>kowito</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[DVCS]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.kowito.com/?p=178</guid>
		<description><![CDATA[Distributed revision control เป็นเครื่องมือที่ Developer สมัยนี้จะต้องหามาใส่หัวให้ได้ Mercurial ก็เป็น DVCS ชนิดหนึ่งที่เป็นที่นิยมในตลาด ( หมายถึงตลาดโลก ในเมืองไทยหายากหน่อยนึง ) แต่หลายคนที่พยายามจะเปลี่ยนจาก Subversion มาเป๋น DVCS ก็ยังสับสน ว่าไอ้ที่มีอยู่หลายเจ้านั้น มีดียังไง ผมจะสรุปคร่าวๆโดยที่พยายามพูดถึงเจ้าอื่นให้น้อยที่สุด เพื่อไม่ให้เกิดดราม่า Mercurial สามารถทำงานได้ดี ในทีมที่มีหลายๆคน เพราะว่าแต่ละคนก็มี repo ของตัวเอง เนื่องด้วยแต่ละคนมี repo ของตัวเอง อิสระในการทำงานก็สูงกว่า ไม่ต้องกังวลว่าจะไปพังของใคร แล้วทำให้ทั้งระบบต้องหยุด สามารถทำงานแบบ Stand Alone แค่เพียง Check Out มา จะ Commit ก็ครั้งก็ได้ พอต่อเน็ตได้ค่อย Push ทีเดียว แต่ละ Rev. มีเลขกำกับ เหมือน SVN ต่างจาก Git [...]]]></description>
			<content:encoded><![CDATA[<div class="AWD_like_button "><fb:like href="http://www.kowito.com/2011/02/17/%e0%b8%97%e0%b8%b3%e0%b9%84%e0%b8%a1%e0%b8%96%e0%b8%b6%e0%b8%87%e0%b8%84%e0%b8%a7%e0%b8%a3%e0%b9%80%e0%b8%a5%e0%b8%b7%e0%b8%ad%e0%b8%81%e0%b9%83%e0%b8%8a%e0%b9%89-mercurial-scm/" send="true" width="" colorscheme="light" layout=standard show_faces="true" font="tahoma" action="like"></fb:like></div><p><a title="Distributed revision control" href="http://en.wikipedia.org/wiki/Distributed_revision_control" target="_blank">Distributed revision control</a> เป็นเครื่องมือที่ Developer สมัยนี้จะต้องหามาใส่หัวให้ได้ Mercurial ก็เป็น DVCS ชนิดหนึ่งที่เป็นที่นิยมในตลาด ( หมายถึงตลาดโลก ในเมืองไทยหายากหน่อยนึง ) แต่หลายคนที่พยายามจะเปลี่ยนจาก Subversion มาเป๋น DVCS ก็ยังสับสน ว่าไอ้ที่มีอยู่หลายเจ้านั้น มีดียังไง ผมจะสรุปคร่าวๆโดยที่พยายามพูดถึงเจ้าอื่นให้น้อยที่สุด เพื่อไม่ให้เกิดดราม่า</p>
<ul>
<li>Mercurial สามารถทำงานได้ดี ในทีมที่มีหลายๆคน เพราะว่าแต่ละคนก็มี repo ของตัวเอง</li>
<li>เนื่องด้วยแต่ละคนมี repo ของตัวเอง อิสระในการทำงานก็สูงกว่า ไม่ต้องกังวลว่าจะไปพังของใคร แล้วทำให้ทั้งระบบต้องหยุด</li>
<li>สามารถทำงานแบบ Stand Alone แค่เพียง Check Out มา จะ Commit ก็ครั้งก็ได้ พอต่อเน็ตได้ค่อย Push ทีเดียว</li>
<li>แต่ละ Rev. มีเลขกำกับ เหมือน SVN ต่างจาก Git ที่เป็น Hash ยาวๆ จำยากๆ แต่ก็มีข้อเสียที่หมายเลข Rev เดียวกันนี้ จะแตกต่างไปจากคนอื่นๆ สร้างความสับสนพอสมควร เอาให้ชัวร์เวลา Merge ก็อ้างจาก Hash นั่นแหละ</li>
<li>ลงง่าย ใช้เร็ว มีเกือบทุก Platform</li>
<li><a title="Guido van Rossum" href="http://www.python.org/~guido/">Guido</a> ใช้ ( อันนี้ไม่รู้เป็นข้อดีหรือเปล่า อารมณ์ประมาณเหมือนใช้กระเป๋า ใช้มือถือตามดาราที่ชอบ )</li>
<li>มี Web Server build-in อันนี้ชอบมาก เหมาะกับคนที่ไม่ได้ใช้ผ่าน GUI สามารถสั่ง hg serve ไปเปิดไปที่ http://localhost:8000 เลย</li>
<li>ฟรี!!!</li>
</ul>
<p>นึกต่อไม่ออกแฮะ ตัดจบเลยแล้วกัน</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kowito.com/2011/02/17/%e0%b8%97%e0%b8%b3%e0%b9%84%e0%b8%a1%e0%b8%96%e0%b8%b6%e0%b8%87%e0%b8%84%e0%b8%a7%e0%b8%a3%e0%b9%80%e0%b8%a5%e0%b8%b7%e0%b8%ad%e0%b8%81%e0%b9%83%e0%b8%8a%e0%b9%89-mercurial-scm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>จาวาเร็วส์</title>
		<link>http://www.kowito.com/2011/02/16/%e0%b8%88%e0%b8%b2%e0%b8%a7%e0%b8%b2%e0%b9%80%e0%b8%a3%e0%b9%87%e0%b8%a7%e0%b8%aa%e0%b9%8c/</link>
		<comments>http://www.kowito.com/2011/02/16/%e0%b8%88%e0%b8%b2%e0%b8%a7%e0%b8%b2%e0%b9%80%e0%b8%a3%e0%b9%87%e0%b8%a7%e0%b8%aa%e0%b9%8c/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 11:45:57 +0000</pubDate>
		<dc:creator>kowito</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[สบายใจ]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[กลอน]]></category>

		<guid isPermaLink="false">http://www.kowito.com/?p=171</guid>
		<description><![CDATA[จาวาใครว่าเร็วส์ ทุเรศ ท่านผู้นำสมเพช แม่งค้าง ความดีบ่เบิกเนตร ใครขัด กูด่า ใครคิดเหตุผลอ้าง กูบล็อก เว็บกู]]></description>
			<content:encoded><![CDATA[<div class="AWD_like_button "><fb:like href="http://www.kowito.com/2011/02/16/%e0%b8%88%e0%b8%b2%e0%b8%a7%e0%b8%b2%e0%b9%80%e0%b8%a3%e0%b9%87%e0%b8%a7%e0%b8%aa%e0%b9%8c/" send="true" width="" colorscheme="light" layout=standard show_faces="true" font="tahoma" action="like"></fb:like></div><p>จาวาใครว่าเร็วส์ ทุเรศ</p>
<p>ท่านผู้นำสมเพช แม่งค้าง</p>
<p>ความดีบ่เบิกเนตร ใครขัด กูด่า</p>
<p>ใครคิดเหตุผลอ้าง กูบล็อก เว็บกู</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kowito.com/2011/02/16/%e0%b8%88%e0%b8%b2%e0%b8%a7%e0%b8%b2%e0%b9%80%e0%b8%a3%e0%b9%87%e0%b8%a7%e0%b8%aa%e0%b9%8c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Test Driven Development ด้วย Django Unit Testing (ตอนที่ 1)</title>
		<link>http://www.kowito.com/2010/11/09/test-driven-development-%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-django-unit-testing-%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%97%e0%b8%b5%e0%b9%88-1/</link>
		<comments>http://www.kowito.com/2010/11/09/test-driven-development-%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-django-unit-testing-%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%97%e0%b8%b5%e0%b9%88-1/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 08:28:39 +0000</pubDate>
		<dc:creator>kowito</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit test]]></category>

		<guid isPermaLink="false">http://www.kowito.com/?p=150</guid>
		<description><![CDATA[Django มีสุดยอดแห่ง unit testing ที่ build in มาในตัว framework เรียบร้อยแล้ว, คนมักจะไม่ค่อยใส่ใจกับมันเท่าไรนักเพราะว่ามันมาแบบ “out of the box” แต่นั่นไม่ได้หมายความว่าเราจะละเลยส่วนั้นได้ เมื่อเราสร้าง Application ของเราเองขึ้นมา เพราะว่าเทสต์นั้นทำให้เรา &#8220;คิดออก&#8221; ว่าอะไรที่ควรจะทำให้เสร็จ เพราะฉะนั้นเราจะมาพูดเรื่องทำอย่างไรให้ Application สามรถทำงานได้เป็นอย่างดี เมื่อมาถึงตรงนี้แล้วผมจะพยายามแสดงให้เห็นว่า ทำยังไงจะใช้ TDD ใน Django Application เราจะสร้าง Project เล็กๆ และมี Application เพียงตัวเดียว และใช้ Unit testing เป็นตัวกำหนด ว่าจะออกแบบ algorithm และจะ implement class อย่างไร ทำไมต้องเทสต์ตลอด? หลายๆ คนพูดถึงเรื่อง Test Driven Development แล้วยังมีโปรแกรมเมอร์ที่มีประสบการณ์หลายๆ คน [...]]]></description>
			<content:encoded><![CDATA[<div class="AWD_like_button "><fb:like href="http://www.kowito.com/2010/11/09/test-driven-development-%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-django-unit-testing-%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%97%e0%b8%b5%e0%b9%88-1/" send="true" width="" colorscheme="light" layout=standard show_faces="true" font="tahoma" action="like"></fb:like></div><p>Django มีสุดยอดแห่ง unit testing ที่ build in มาในตัว framework เรียบร้อยแล้ว, คนมักจะไม่ค่อยใส่ใจกับมันเท่าไรนักเพราะว่ามันมาแบบ “out of the box” แต่นั่นไม่ได้หมายความว่าเราจะละเลยส่วนั้นได้ เมื่อเราสร้าง Application ของเราเองขึ้นมา เพราะว่าเทสต์นั้นทำให้เรา &#8220;คิดออก&#8221; ว่าอะไรที่ควรจะทำให้เสร็จ เพราะฉะนั้นเราจะมาพูดเรื่องทำอย่างไรให้ Application สามรถทำงานได้เป็นอย่างดี</p>
<p>เมื่อมาถึงตรงนี้แล้วผมจะพยายามแสดงให้เห็นว่า ทำยังไงจะใช้ TDD ใน Django Application เราจะสร้าง Project เล็กๆ และมี Application เพียงตัวเดียว และใช้ Unit testing เป็นตัวกำหนด ว่าจะออกแบบ algorithm และจะ implement class อย่างไร</p>
<p><span id="more-150"></span></p>
<p><strong>ทำไมต้องเทสต์ตลอด?</strong></p>
<p>หลายๆ คนพูดถึงเรื่อง Test Driven Development แล้วยังมีโปรแกรมเมอร์ที่มีประสบการณ์หลายๆ คน ที่ไม่ต้องการจะทำ TDD เพราะว่าคนเหล่านั้น ไม่ยอมเปิดรับการเปลี่ยนแปลงใหม่ๆและไม่ยอมที่จะเรียนรู้  คนกลุ่มนี้สร้างระบบและจัดการในเรื่องการ maintain code เขาอาจจะเขียน code เป็นเดือน หรือแม้แต่เป็นปี code ที่เขียนนั้นได้รับการทดสอบเต็มรูปแบบจึงมั่นใจในความแข็งแกร่ง ทำไมยังจะต้องเขียน unit test?</p>
<p>โปรแกรมเมอร์รุ่นใหม่ไม่รู้ว่าจะเริ่มต้นกับเทสต์อย่างไร พวกเขาเขียน code แล้วจึงเขียนเทสต์ แล้วจึงพบกับความท้อแท้ เพราะว่าต้องเขียน code วนซ้ำไปซ้ำมาถึงสองครั้ง เพื่อที่จะพบกับผลลัพท์ที่แทบจะเอาตัวไม่รอด</p>
<p>เรื่องทั้งคู่เป็นเรื่องน่าเศร้าที่เราจะพบเห็นได้บ่อยๆ เพราะมีบางสิ่งที่ TDD ได้มอบให้โปรแกรมเมอร์และองค์กรนั้นคือ :</p>
<ul>
<li>การรับประกันคุณภาพที่มีประสิทธิภาพมากขึ้น เพราะว่า QA Engineer และ Tester ไม่ต้องมานั่งตรวจสอบฟังชั่นการทำงาน, แล้วมันให้ code ที่ดีกว่าเหรอ? หมายความว่ายังไงกันแน่? หมายความว่าต่างคนก็ต่างทำงานใขขอบเขตของตน นั่นสร้างประโยชน์โดยรวมแก่บริษัททั้งหมด ถ้าโค้ดพื้นฐานและฟังชั่นทั้งหมด สามารถเทสต์ได้โดยอัตโนมัต QA ก็สามารถที่จะใช้เวลาเพิ่มขึ้นในการค้นหาบักที่ไม่ชัดเจน และแก้ไขมันเสีย ก่อนที่มันจะทำลายโปรแกรมทั้งหมด.</li>
<li>การประสานงานในองค์กรดีขึ้น TDD สร้างความไว้เนื้อเชื่อใจในองค์กรทั้งหมด โปรแกรมเมอร์ต้องการความเชื่อใจในความสามารถและทักษะ เมื่อทุกคนในองค์กรใช้ TDD นั่นหมายความว่าโค้ดที่มากจากคนอื่นๆในองค์กรจะต้องทำงานได้ถูกต้อง นั่นไม่ได้เพียงแค่สร้างความเชื่อใจระหว่างโปรแกรมเมอร์ แต่ยังรวมถึงส่วนอื่นๆในองค์กร เช่นฝ่ายการตลาด Business resource รวมไปถึง QA</li>
<li>ความเป็นมืออาชีพ คำว่า<strong>โปร</strong> ไม่ได้หมายความเพียงแค่เขียนโค้ดนับพันบรรทัดในวันเดียว แต่หมายถึงการเขียนโค้ดที่มีประสิทธิภาพ ง่ายต่อการบำรุงรักษา ง่ายต่อการ config หมายถึงโค้ดที่ &#8220;ทำงานได้&#8221; ตลอดเวลา ไม่ใช้แค่ทำงานได้ แต่ต้องผ่านการเทสต์และมีเอกสารที่ดีด้วย</li>
<li>สร้างแรงกดดันเพื่อน &#8220;ทำสิ่งที่ถูกต้อง&#8221; เมื่อสมาชิกในทีมรวมไปถึงหัวหน้าทีมใช้งาน TDD ดูแลโค้ดของตัวเองให้มีประสิทธิภาพ มันจะสร้างแรงกระตุ้นต่อองค์กรโดยรวม ให้เกิดสภาพแวดล้อมที่ดีต่อการฝึกฝน</li>
</ul>
<p>Test Driven Development ภายไต้ unit test จะสร้างซอฟต์แวร์ที่มีประสิทธิภาพ และสามารถทำงานได้อย่างดี บทความอันนี้จะอธิบายถึงวิธีการพัฒนาโปรแกรมที่ซับซ้อนอย่าง Bank Routing Number (ABN) validation class</p>
<p><strong>Create the Project and Application</strong></p>
<p>อย่างแรกที่จะทำคือสร้าง Application ชื่อ</p>
<p>valid_lib</p>
<p>โดยกำหนดให้เป็น Service platform ที่อนุญาติให้ข้อมูลทางการเงินอันสลับซับซ้อนสามารถ validate ผ่าน ReSTful interface. ในตอนนี้เรายังไม่ต้องกังวลเกี่ยวกับ Service หรือ Business model เพียงแค่คิดเรื่องเกี่ยวกับการคำรวนและ validation algorithm ก็พอ ตอนนี้เริ่มจากสร้างแอปก่อน</p>
<p>./manage.py startapp finvs</p>
<p>และเพิ่ม finvs ลงไปบน INSTALL_APP ในไฟล์ settings.py สร้างโฟลเดอร์ชื่อ util ลงในโฟลเดอร์ finvs อีกทีนึงอย่างในรูป</p>
<p><img class="aligncenter" title="รูปที่ 1" src="http://gurovich.com/site/wp-content/uploads/2010/03/fig1.png" alt="" width="194" height="222" /></p>
<p>ลองดูที่ไฟล์ test.py ในโฟลเดอร์ชื่อ finvs เราจะเริ่มจากตรงนั้น Django ได้สร้าง unit test ไฟล์ไว้ให้เราแล้ว</p>
<p><strong>ABN Validation </strong></p>
<p>ABA (American Banker’s Association) routing numbers (ABNs) ใช้สำหรับระบุสถาบันการเงินตอนที่สร้าง transaction ตัวเลขนี้จำเป็นต้องใช้เวลาที่จะโอนเงินผ่านธนาคารโดยตรง บริการจ่ายเงินอัตโนมัต หรือเมื่อเราต้องการจะจ่ายเงินเผ่านโทรศัพท์ ระบบออนไลน์เป็นต้น</p>
<p>เลขเหล่านี้มีความหมายต่างๆดันไป และยังรวมถึง checksum digit เพื่อที่จะสามารถตรวจสอบได้ว่าเลขที่ให้มานั้นถูกต้องหรือไม่</p>
<p>Algorithm จะตรวจสอบดังนี้ 3(d1+d4+d7)+7(d2+d5+d8)+(d3+d6+d9) mod 10 = 0 แบบนี้</p>
<pre class="python">import unittest
#from django.test import TestCase

#Here are some bank numbers that we can run tests against...
SHORT_BAD_ABN_NUM = 1000012
LONG_BAD_ABN_NUM = 255073345999
BAD_ABN_NUM = 255073545
GOOD_ABN_NUM = 255073345

class ValidatorsTestCase(unittest.TestCase):

    def setUp(self):
        self.value = GOOD_ABN_NUM

    def testAbnAlgorythm(self):
        """Tests the algorythm with a known good bank number.
           This test is here to create the algorythm to be used
             in the validator implementation.  When it's right,
             cut and paste it into the validator class.

           The algorithm checks the first second and third number
            and adds them together, then iterates through every
            three numbers (total of 9) to return a value.

           If the resulting sum is an even multiple of ten
            (but not zero), the ABA routing number is good.
           """
        n=0
        bank_str = str(GOOD_ABN_NUM)
        num_length = len(bank_str)
        if (num_length ==9):
            for j in range(0,num_length,3):
                t = int(bank_str[j])
                ti = int(bank_str[j + 1])
                tii = int(bank_str[j + 2])
                n += (t * 3)+ (ti * 7)+ tii
            self.assertTrue((n != 0) &amp; ((n % 10) == 0))
</pre>
<p>หลังจากนั้นก็รันเทสต์</p>
<pre class="shell">python manage.py test finvs.ValidatorsTestCase</pre>
<p>น่าจะได้ผลลัพท์อย่างนี้</p>
<pre class="bash">$ python manage.py test finvs.ValidatorsTestCase
Creating test database...
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Installing index for auth.Permission model
Installing index for auth.Message model
True
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
Destroying test database...
</pre>
<p>ระหว่างที่กำลังรันเทสต์นั้น Django จะสร้างและลบ Test Database ให้โดยอัตโนมัต แจ่มใหม?  แต่จริงๆแล้วเราจะยังไม่ได้ใช้โค้ดชุดนี้ เราจะสร้าง Production code ต่างหาก แต่เมื่อดูตัวเทสต์ จะพบว่านี่คือพื้นฐานของการ implement ระบบจริงๆ</p>
<p>ครั้งหน้าเราจะมาต่อที่การ implement จริงๆกัน</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kowito.com/2010/11/09/test-driven-development-%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-django-unit-testing-%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%97%e0%b8%b5%e0%b9%88-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Barcamp Bankhen Live</title>
		<link>http://www.kowito.com/2010/11/01/barcamp-bankhen-live/</link>
		<comments>http://www.kowito.com/2010/11/01/barcamp-bankhen-live/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 15:56:39 +0000</pubDate>
		<dc:creator>kowito</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Barcamp]]></category>

		<guid isPermaLink="false">http://www.kowito.com/?p=139</guid>
		<description><![CDATA[นั่งฟังเรื่องแรก Atom Server ของอาจารย์ภุชงค์ Intro เสียเกินครึ่ง แต่ก็ได้รู้เรื่องประวัติศาสตร์เสียมาก พูดเรื่อง Super Computer ที่เมืองจีน โดยพัฒนาโดยวิศวะกรของจีนเอง และยังพูดถึงเรื่อง CUDA ของ Nvidia ที่เปลี่ยนเรื่อง Program Design ไปเลย และ OpenCL ของ Apple ที่นำความสามารถของ GPU มาใช้ประมวลผล ใช้มือถือสร้าง Super Computer เนื่องจาก Balance ของ Power กับ Performance ได้ดีที่สุด แนวทางการโปรแกรมมิ่งแบบ Message Driven หลังจากนั้นมาพูดเรื่อง Blueprint CSS พูดไม่ได้เร็วเท่าไร แต่ไม่มีเรื่องจะพูดซะงั้น lol หลังจากนั้นมาได้เข้ามานั่งฟังเรื่อง Open Source Enterprises พูดเรื่องการ implement open source ค่าใช้จ่ายต่างๆ [...]]]></description>
			<content:encoded><![CDATA[<div class="AWD_like_button "><fb:like href="http://www.kowito.com/2010/11/01/barcamp-bankhen-live/" send="true" width="" colorscheme="light" layout=standard show_faces="true" font="tahoma" action="like"></fb:like></div><p>นั่งฟังเรื่องแรก Atom Server ของอาจารย์ภุชงค์ Intro เสียเกินครึ่ง แต่ก็ได้รู้เรื่องประวัติศาสตร์เสียมาก พูดเรื่อง Super Computer ที่เมืองจีน โดยพัฒนาโดยวิศวะกรของจีนเอง และยังพูดถึงเรื่อง CUDA ของ Nvidia ที่เปลี่ยนเรื่อง Program Design ไปเลย และ OpenCL  ของ Apple ที่นำความสามารถของ GPU มาใช้ประมวลผล ใช้มือถือสร้าง Super Computer เนื่องจาก Balance ของ Power กับ Performance ได้ดีที่สุด แนวทางการโปรแกรมมิ่งแบบ Message Driven</p>
<p>หลังจากนั้นมาพูดเรื่อง Blueprint CSS พูดไม่ได้เร็วเท่าไร แต่ไม่มีเรื่องจะพูดซะงั้น lol </p>
<p>หลังจากนั้นมาได้เข้ามานั่งฟังเรื่อง Open Source Enterprises พูดเรื่องการ implement open source ค่าใช้จ่ายต่างๆ  Commercial Software เกือบทั้งหมด จะมีชิ้นส่วนของ Open Source หัวข้อค่อนข้างยาว ง่วงนอนมาก</p>
<p>หัวข้อสุดท้ายมาฟังเรื่อง ใครว่าไมโครซอฟท์ใจร้ายโดยอาจารย์ศุภเดชและพี่หลาม งานนี้เพิ่งรู้ว่ามีของฟรีให้ใช้เยอะขนาดนี้ ไม่มาไม่รู้จริงๆ </p>
<p>ระหว่างวันได้เจอกับ <a href="http://iannnnn.com/">iannnn</a> ตัวเป็นๆ ไม่กล้าบอกว่าคุณคือไอดอลของผม จุ๊ฟๆ lol นอกจากนี้ยังมีพี่อึ่งที่เดินวนไปวนมา เจอกันทั้งวัน พี่อึ่งเล่าให้ฟังเรื่องรับอบรมติดตั้งระบบ Ubuntu หวังว่าสักวันคงจะได้ทำแบบนั้นมั่ง หาอิสระเสรีให้ชีวิต</p>
<p>ตัดจบดื้อๆ เขียนต่อไม่ออก.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kowito.com/2010/11/01/barcamp-bankhen-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>เร็วๆสุดๆ เพิ่มพลัง Website</title>
		<link>http://www.kowito.com/2010/10/06/%e0%b9%80%e0%b8%a3%e0%b9%87%e0%b8%a7%e0%b9%86%e0%b8%aa%e0%b8%b8%e0%b8%94%e0%b9%86-%e0%b9%80%e0%b8%9e%e0%b8%b4%e0%b9%88%e0%b8%a1%e0%b8%9e%e0%b8%a5%e0%b8%b1%e0%b8%87-website/</link>
		<comments>http://www.kowito.com/2010/10/06/%e0%b9%80%e0%b8%a3%e0%b9%87%e0%b8%a7%e0%b9%86%e0%b8%aa%e0%b8%b8%e0%b8%94%e0%b9%86-%e0%b9%80%e0%b8%9e%e0%b8%b4%e0%b9%88%e0%b8%a1%e0%b8%9e%e0%b8%a5%e0%b8%b1%e0%b8%87-website/#comments</comments>
		<pubDate>Wed, 06 Oct 2010 01:09:42 +0000</pubDate>
		<dc:creator>kowito</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Website Optimizer]]></category>

		<guid isPermaLink="false">http://www.kowito.com/?p=137</guid>
		<description><![CDATA[ไปอ่านเรื่อง Page Speed Analysis: Search Engine Roundtable จากเว็บของ Sajal มาบันทึกไว้กันลืม เรื่องทำอย่างไนจะ Optimize หน้าเว็บให้สุดได้ http://www.webpagetest.org/]]></description>
			<content:encoded><![CDATA[<div class="AWD_like_button "><fb:like href="http://www.kowito.com/2010/10/06/%e0%b9%80%e0%b8%a3%e0%b9%87%e0%b8%a7%e0%b9%86%e0%b8%aa%e0%b8%b8%e0%b8%94%e0%b9%86-%e0%b9%80%e0%b8%9e%e0%b8%b4%e0%b9%88%e0%b8%a1%e0%b8%9e%e0%b8%a5%e0%b8%b1%e0%b8%87-website/" send="true" width="" colorscheme="light" layout=standard show_faces="true" font="tahoma" action="like"></fb:like></div><p>ไปอ่านเรื่อง <a href="http://www.sajalkayan.com/page-speed-analysis-search-engine-roundtable.html">Page Speed Analysis: Search Engine Roundtable</a> จากเว็บของ Sajal มาบันทึกไว้กันลืม เรื่องทำอย่างไนจะ Optimize หน้าเว็บให้สุดได้</p>
<p>http://www.webpagetest.org/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kowito.com/2010/10/06/%e0%b9%80%e0%b8%a3%e0%b9%87%e0%b8%a7%e0%b9%86%e0%b8%aa%e0%b8%b8%e0%b8%94%e0%b9%86-%e0%b9%80%e0%b8%9e%e0%b8%b4%e0%b9%88%e0%b8%a1%e0%b8%9e%e0%b8%a5%e0%b8%b1%e0%b8%87-website/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>I think we got a case of a little lump of coal here. That’s turning into a diamond.</title>
		<link>http://www.kowito.com/2010/08/10/i-think-we-got-a-case-of-a-little-lump-of-coal-here-that%e2%80%99s-turning-into-a-diamond/</link>
		<comments>http://www.kowito.com/2010/08/10/i-think-we-got-a-case-of-a-little-lump-of-coal-here-that%e2%80%99s-turning-into-a-diamond/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 02:31:21 +0000</pubDate>
		<dc:creator>kowito</dc:creator>
				<category><![CDATA[สบายใจ]]></category>
		<category><![CDATA[BGT]]></category>

		<guid isPermaLink="false">http://www.kowito.com/?p=134</guid>
		<description><![CDATA[ประโยคนี้มาจาก Amanda Holden ในรายการ BGT ปีที่พอล พ็อตเข้าแข่งขัน ผมประทับใจตรงที่คนธรรมดาเดินดิน มีความไฝ่ฝันและพลังใจอันแรงกล้าที่จะเดินตามฝันของตัวเองได้อย่างไม่ย่อท้อ เตือนใจให้เห็นว่า &#8220;ลิขิตฟ้าหรือจะสู้มานะตน&#8221;]]></description>
			<content:encoded><![CDATA[<div class="AWD_like_button "><fb:like href="http://www.kowito.com/2010/08/10/i-think-we-got-a-case-of-a-little-lump-of-coal-here-that%e2%80%99s-turning-into-a-diamond/" send="true" width="" colorscheme="light" layout=standard show_faces="true" font="tahoma" action="like"></fb:like></div><p>ประโยคนี้มาจาก Amanda Holden ในรายการ BGT ปีที่พอล พ็อตเข้าแข่งขัน ผมประทับใจตรงที่คนธรรมดาเดินดิน มีความไฝ่ฝันและพลังใจอันแรงกล้าที่จะเดินตามฝันของตัวเองได้อย่างไม่ย่อท้อ เตือนใจให้เห็นว่า &#8220;ลิขิตฟ้าหรือจะสู้มานะตน&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kowito.com/2010/08/10/i-think-we-got-a-case-of-a-little-lump-of-coal-here-that%e2%80%99s-turning-into-a-diamond/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>กลับมาเป็นมนุษย์เงินแดือนครั้งแรกในรอบปี</title>
		<link>http://www.kowito.com/2010/07/08/%e0%b8%81%e0%b8%a5%e0%b8%b1%e0%b8%9a%e0%b8%a1%e0%b8%b2%e0%b9%80%e0%b8%9b%e0%b9%87%e0%b8%99%e0%b8%a1%e0%b8%99%e0%b8%b8%e0%b8%a9%e0%b8%a2%e0%b9%8c%e0%b9%80%e0%b8%87%e0%b8%b4%e0%b8%99%e0%b9%81%e0%b8%94/</link>
		<comments>http://www.kowito.com/2010/07/08/%e0%b8%81%e0%b8%a5%e0%b8%b1%e0%b8%9a%e0%b8%a1%e0%b8%b2%e0%b9%80%e0%b8%9b%e0%b9%87%e0%b8%99%e0%b8%a1%e0%b8%99%e0%b8%b8%e0%b8%a9%e0%b8%a2%e0%b9%8c%e0%b9%80%e0%b8%87%e0%b8%b4%e0%b8%99%e0%b9%81%e0%b8%94/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 10:13:52 +0000</pubDate>
		<dc:creator>kowito</dc:creator>
				<category><![CDATA[ครอบครัว]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[jobs]]></category>

		<guid isPermaLink="false">http://www.kowito.com/2010/07/08/%e0%b8%81%e0%b8%a5%e0%b8%b1%e0%b8%9a%e0%b8%a1%e0%b8%b2%e0%b9%80%e0%b8%9b%e0%b9%87%e0%b8%99%e0%b8%a1%e0%b8%99%e0%b8%b8%e0%b8%a9%e0%b8%a2%e0%b9%8c%e0%b9%80%e0%b8%87%e0%b8%b4%e0%b8%99%e0%b9%81%e0%b8%94/</guid>
		<description><![CDATA[กลับมาทำงานประจำอีกครั้ง หลังจากโดนเมียบ่นมานาน ว่างานฟรีแลนซ์เงินไม่แนนอน ใหนจะค่ารถ ค่านมลูก มีคนเมล์มาตามให้ไปสัมภาษณ์งาน ตอนที่ตัดสินใจไปไม่รู้ด้วยซ้ำ ว่าจะให้ทำอะไร ไปมึนๆทั้งอย่างนั้น พอถามว่าใช้ภาษาอะไรก็ตอบไปแบบไม่มั่นใจ ว่าไพธอน เค้าให้ข้อสอบ c พลัสพลัส มาทำบอกว่าทำตรงใหนไม่ได้ก็ไม่ต้องทำ ข้ามไปได้ ให้เวลาไม่จำกัด ปรากฏว่าล่อไปสี่ชั่วโมงครึ่ง ทำได้แค่ครึ่งเดียวอีกต่างหาก กลับมานั่งรออยู่บ้าน ขับรถยังไม่ถึงบ้านก็โทรมาตามไปสัมภาษณ์อีกครั้งกับ Director ในวันรุ่งขึ้น แอบคิดอยู่ในใจว่างานนี้มีลุ้น นอนกระสับกระส่ายจนเช้า พอเข้ามาอีกครั้ง เค้าหยิบข้อสอบเมื่อวานขึ้นมาถาม ว่าคิดยังไงถึงทำแบบนี้ ตอบไปตรงๆว่า ไม่ถนัดเรื่อง C อิงกับ Concept ของ Python ก็เลยออกมาอย่างที่เห็น เค้าเลยสรุปว่าได้งาน ให้มาเริ่มงานวันจันทร์เลย เขียนแบบที่อยากเขียนได้เลย สรุปว่าได้งานเขียน Django ซะงั้น]]></description>
			<content:encoded><![CDATA[<div class="AWD_like_button "><fb:like href="http://www.kowito.com/2010/07/08/%e0%b8%81%e0%b8%a5%e0%b8%b1%e0%b8%9a%e0%b8%a1%e0%b8%b2%e0%b9%80%e0%b8%9b%e0%b9%87%e0%b8%99%e0%b8%a1%e0%b8%99%e0%b8%b8%e0%b8%a9%e0%b8%a2%e0%b9%8c%e0%b9%80%e0%b8%87%e0%b8%b4%e0%b8%99%e0%b9%81%e0%b8%94/" send="true" width="" colorscheme="light" layout=standard show_faces="true" font="tahoma" action="like"></fb:like></div><p>กลับมาทำงานประจำอีกครั้ง หลังจากโดนเมียบ่นมานาน ว่างานฟรีแลนซ์เงินไม่แนนอน ใหนจะค่ารถ ค่านมลูก</p>
<p>มีคนเมล์มาตามให้ไปสัมภาษณ์งาน ตอนที่ตัดสินใจไปไม่รู้ด้วยซ้ำ ว่าจะให้ทำอะไร ไปมึนๆทั้งอย่างนั้น พอถามว่าใช้ภาษาอะไรก็ตอบไปแบบไม่มั่นใจ ว่าไพธอน เค้าให้ข้อสอบ c พลัสพลัส มาทำบอกว่าทำตรงใหนไม่ได้ก็ไม่ต้องทำ ข้ามไปได้ ให้เวลาไม่จำกัด</p>
<p>ปรากฏว่าล่อไปสี่ชั่วโมงครึ่ง ทำได้แค่ครึ่งเดียวอีกต่างหาก</p>
<p>กลับมานั่งรออยู่บ้าน ขับรถยังไม่ถึงบ้านก็โทรมาตามไปสัมภาษณ์อีกครั้งกับ Director ในวันรุ่งขึ้น แอบคิดอยู่ในใจว่างานนี้มีลุ้น</p>
<p>นอนกระสับกระส่ายจนเช้า พอเข้ามาอีกครั้ง เค้าหยิบข้อสอบเมื่อวานขึ้นมาถาม ว่าคิดยังไงถึงทำแบบนี้ ตอบไปตรงๆว่า ไม่ถนัดเรื่อง C อิงกับ Concept ของ Python ก็เลยออกมาอย่างที่เห็น เค้าเลยสรุปว่าได้งาน </p>
<p>ให้มาเริ่มงานวันจันทร์เลย เขียนแบบที่อยากเขียนได้เลย สรุปว่าได้งานเขียน Django ซะงั้น</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kowito.com/2010/07/08/%e0%b8%81%e0%b8%a5%e0%b8%b1%e0%b8%9a%e0%b8%a1%e0%b8%b2%e0%b9%80%e0%b8%9b%e0%b9%87%e0%b8%99%e0%b8%a1%e0%b8%99%e0%b8%b8%e0%b8%a9%e0%b8%a2%e0%b9%8c%e0%b9%80%e0%b8%87%e0%b8%b4%e0%b8%99%e0%b9%81%e0%b8%94/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

