<?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>เกรลส์ หกสิบหก</title>
	<atom:link href="http://www.grails66.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.grails66.com/blog</link>
	<description></description>
	<lastBuildDate>Fri, 05 Feb 2010 09:05:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>มาลอง run Groovy บน Apache WebServer กัน</title>
		<link>http://www.grails66.com/blog/?p=928</link>
		<comments>http://www.grails66.com/blog/?p=928#comments</comments>
		<pubDate>Fri, 05 Feb 2010 09:04:57 +0000</pubDate>
		<dc:creator>up1</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[groovy-lamp]]></category>

		<guid isPermaLink="false">http://www.grails66.com/blog/?p=928</guid>
		<description><![CDATA[มาลอง run Groovy บน Apache WebServer กัน
เมื่อวานนี้ผมไปเจอ project ใน GoogleCode คือ Groovy-LAMP
โดยคำอธิบายของ project นี้ก็ง่ายนิดเดียวคือ

คำถาม
ถ้าคุณรัก Groovy แต่เกลียด Java Web Servers  ล่ะจะทำยังไง
คำตอบ
เราจะทำให้การเขียน Groovy เหมือนกับการเขียน php เลย กล่าวคือ เมื่อทำการเขียน code และแก้ไข code groovy แล้วก็ทำงานได้เลย และที่สำคัญทำงานผ่าน Apache WebServer กันไปเลย

พออ่านมาได้นิดหน่อย ผมจึงตาลุกวาว เนื่องจากเป็นโลกที่ผมไม่เคยเข้าไปมาก่อน ดังนั้นเรามาเริ่มศึกษาไปพร้อมๆ กัน
โครงสร้างของ Groovy-LAMP project
- ทำการสร้าง java proxy ให้ Apache WebServer, Lighttpd ติดต่อมาโดยผ่าน Simple CGI ( SCGI ) [...]]]></description>
			<content:encoded><![CDATA[<p><strong>มาลอง run Groovy บน Apache WebServer กัน</strong></p>
<p>เมื่อวานนี้ผมไปเจอ project ใน GoogleCode คือ <a href="http://code.google.com/p/groovy-lamp/">Groovy-LAMP</a></p>
<p>โดยคำอธิบายของ project นี้ก็ง่ายนิดเดียวคือ</p>
<blockquote><p>
<strong>คำถาม</strong><br />
ถ้าคุณรัก Groovy แต่เกลียด Java Web Servers  ล่ะจะทำยังไง</p>
<p><strong>คำตอบ</strong><br />
เราจะทำให้การเขียน Groovy เหมือนกับการเขียน php เลย กล่าวคือ เมื่อทำการเขียน code และแก้ไข code groovy แล้วก็ทำงานได้เลย และที่สำคัญทำงานผ่าน Apache WebServer กันไปเลย
</p></blockquote>
<p>พออ่านมาได้นิดหน่อย ผมจึงตาลุกวาว เนื่องจากเป็นโลกที่ผมไม่เคยเข้าไปมาก่อน ดังนั้นเรามาเริ่มศึกษาไปพร้อมๆ กัน</p>
<p><strong>โครงสร้างของ Groovy-LAMP project</strong><br />
- ทำการสร้าง java proxy ให้ Apache WebServer, Lighttpd ติดต่อมาโดยผ่าน Simple CGI ( SCGI )  โดย java proxy ที่สร้างขึ้นมานั้นจะรับ file ที่มีนามสกุล .groovy เท่านั้น<br />
- เบื้องหลังการทำงานก็คือ GroovyScriptEngine เป็น unitilies class ของ groovy นั่นเอง</p>
<p><strong>มาถึงตรงนี้แล้ว สิ่งที่ต้องการในการติดตั้ง Groovy-LAMP project มีดังนี้ [ Software เหล่านี้ผมใช้ในการทดสอบ ]</strong><br />
- Apache WebServer 2.x<br />
- Java 1.5<br />
- <a href="http://bigonez.googlepages.com">Simple CGI for Apache WebServer 2.x</a><br />
- Groovy Library ( groovy-all.jar )<br />
- <a href="http://code.google.com/p/groovy-lamp/downloads/list">Groovy-LAMP</a></p>
<p>ก่อนจะเริ่มผมเจอปัญหาตั้งแต่ต้น คือ Groovy-LAMP ที่ download มานั้นใช้งานบน Windows ไม่ได้เกิด error ตาม <a href="http://code.google.com/p/groovy-lamp/issues/detail?id=1">issue นี้ </a></p>
<p>ดังนั้นผมจึงตัดสินในทำการ checkout sourcecode มาแก้ไขเองดีกว่า ด้วยคำสั่งนี้</p>
<blockquote><p>svn checkout http://groovy-lamp.googlecode.com/svn/trunk/ groovy-lamp-read-only</p></blockquote>
<p>หลังจากที่อ่าน sourcecode แล้วพบว่ามีปัญหาในการ parser request นั่นเอง ผมคิดว่าข้อมูลของ request ที่มาจาก Apache WebServer และ Lighttpd ไม่เหมือนกัน ดังนั้นผมจึงเพิ่มบรรทัดนี้ไปที่ท้าย method parse() ใน file groovyrun.scgi.SCGIParser.java ดังนี้</p>
<pre class="brush: java">
env.put(&quot;SCRIPT_FILENAME&quot;, &quot;file:/&quot; + env.get(&quot;DOCUMENT_ROOT&quot;).toString() + env.get(&quot;SCRIPT_NAME&quot;).toString() +  env.get(&quot;PATH_INFO&quot;).toString());
</pre>
<p>แล้วก็ build เป็น jar file หรือทำการ run ได้เลยครับ ลอง run ด้วยคำสั่ง</p>
<blockquote><p>
java -jar GroovyLamp.jar -port=4444 -mode=script</p>
<p>หรือ<br />
java -jar GroovyLamp.jar -port=4444 </p>
<p>หรือ<br />
java Main -port=4444
</p></blockquote>
<p><strong>ผลการทำงานจะค้างหน้าจอหรือ console ดังนี้</strong></p>
<blockquote><p>Fri Feb 05 13:45:53 PST 2010 : NOTICE : Starting server<br />
Fri Feb 05 13:45:53 PST 2010 : NOTICE : SCGIApplicationServer running on port: 4444</p></blockquote>
<p>กลับมาต่อที่การ config ให้ Apache Web Server ติดต่อไปยัง Groovy-LAMP โดยจะต้องไปหา SCGI ตาม link จากข้างต้นมาด้วย ดังนั้นทำการ download และ extract mod_scgi.so file ไปไว้ใน %APACHE_HOME%\modoles และทำการ config ใน file %APACHE_HOME%\conf\httpd.conf ดังนี้</p>
<p><strong>1. ทำการ load scgi module ขึ้นมา</strong><br />
[sourcecode langiage="java"]<br />
LoadModule scgi_module modules/mod_scgi.so</p></blockquote>
<p>[/sourcecode]</p>
<p><strong>2. เป็นการบอกให้รู้ว่า file ที่อยู่ใน folder groovy [ ใน www root ] ให้ส่ง request ไปที่ Groovy-LAMP ที่เราสร้างขึ้นมา ผ่าน port 4444 ที่เปิดเอาไว้</strong><br />
[sourcecode langiage="java"]<br />
SCGIMount  /groovy 127.0.0.1:4444<br />
[/sourcecode]</p>
<p>ต่อไปทดลองโดยใช้ file ตัวอย่างจากการ Download Groovy-LAMP มา ซึ่งชื่อว่า test.groovy โดย copy ไปไว้ใน folder /groovy/ แล้วทำการ restart ตัว Apache WebServer และ run  http://localhost/groovy/test.groovy ใน browser จะได้ผลลัพธ์ดังนี้</p>
<p><strong>Sourcecode ตัวอย่าง</strong></p>
<pre class="brush: java">
out.println &quot;&lt;h1&gt;Server&lt;/h1&gt;&quot;
out.println &quot;&lt;table border=\&quot;1\&quot;&gt;&quot;
request.env.each(){
	k,v -&gt; out.println &quot;&lt;tr&gt;&lt;td&gt;$k&lt;/td&gt;&lt;td&gt;$v&lt;/td&gt;&lt;/tr&gt;&quot;
}
out.println &quot;&lt;/table&gt;&quot;
out.println &quot;&lt;h1&gt;Get parameters&lt;/h1&gt;&quot;
out.println &quot;&lt;table border=\&quot;1\&quot;&gt;&quot;
request.get.each(){
	k,v -&gt; out.println &quot;&lt;tr&gt;&lt;td&gt;$k&lt;/td&gt;&lt;td&gt;$v&lt;/td&gt;&lt;/tr&gt;&quot;
}
out.println &quot;&lt;/table&gt;&quot;
</pre>
<p><strong>ผลการทำงาน</strong><br />
<img src="http://www.grails66.com/blog/wp-content/uploads/2010/02/groovy_lamp.png" alt="groovy_lamp" title="groovy_lamp" width="414" height="580" class="aligncenter size-full wp-image-929" /></p>
<p>เพียงเท่านี้ก็สามารถเริ่มใช้งาน Groovy-LAMP ได้แล้วครับ  ซึ่งเป็นแนวคิดที่น่าสนใจเหมือนกันครับ  ใครสนใจก็สามารถนำมาพัฒนาต่อยอดได้ครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.grails66.com/blog/?feed=rss2&amp;p=928</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>เกรลส์ 1.2.1 ออกแล้ว</title>
		<link>http://www.grails66.com/blog/?p=926</link>
		<comments>http://www.grails66.com/blog/?p=926#comments</comments>
		<pubDate>Tue, 02 Feb 2010 15:22:48 +0000</pubDate>
		<dc:creator>cblue</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[grails]]></category>

		<guid isPermaLink="false">http://www.grails66.com/blog/?p=926</guid>
		<description><![CDATA[เกรลส์รุ่น 1.2.1 ออกแล้วเมื่อวานนี้ครับ เป็นรุ่นแก้บั๊กและปรับปรุงอ่านรีลีสโน้ตได้จากที่นี่ และดาวน์โหลดได้จาก grails.org/Download เช่นเคยครับ
ที่มา Blog เกรม รอชเชอร์
]]></description>
			<content:encoded><![CDATA[<p>เกรลส์รุ่น 1.2.1 ออกแล้วเมื่อวานนี้ครับ เป็นรุ่นแก้บั๊กและปรับปรุง<br />อ่านรีลีสโน้ตได้จาก<a href="http://www.grails.org/1.2.1+Release+Notes">ที่นี่</a> และดาวน์โหลดได้จาก <a href="http://grails.org/Download">grails.org/Download</a> เช่นเคยครับ</p>
<p>ที่มา <a href="http://www.grails.org/blog/graemerocher/Grails+1.2.1+Released">Blog เกรม รอชเชอร์</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.grails66.com/blog/?feed=rss2&amp;p=926</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>กรูวี กู้ดเนส : String คูณได้</title>
		<link>http://www.grails66.com/blog/?p=922</link>
		<comments>http://www.grails66.com/blog/?p=922#comments</comments>
		<pubDate>Mon, 25 Jan 2010 16:29:11 +0000</pubDate>
		<dc:creator>cblue</dc:creator>
				<category><![CDATA[tutorial]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[groovy goodness]]></category>

		<guid isPermaLink="false">http://www.grails66.com/blog/?p=922</guid>
		<description><![CDATA[เราคูณ String ได้ อาจจะเป็นเรื่องที่หลายท่านยังไม่ได้ลองทำดูในภาษา Groovy นะครับ แต่ก็อาจจะมีประโยชน์โดยเฉพาะเวลาที่ต้องการประมวลผลหรือแสดงผลข้อความ
พิมพ์
println &#8216;-&#8217;.multiply 80

จะทำให้เกิดสายอัขระเท่ากับจำนวน เป็นต้นครับ
หรือสามารถใช้ operator * ได้ในทำนองเดียวกับ (เพราะ operator * จะแปลงเป็น multiply method ในระดับ bytecode ครับ)
println (&#8217;-&#8217; * 80)

จาก Groovy Goodness
]]></description>
			<content:encoded><![CDATA[<p>เราคูณ String ได้ อาจจะเป็นเรื่องที่หลายท่านยังไม่ได้ลองทำดูในภาษา Groovy นะครับ แต่ก็อาจจะมีประโยชน์โดยเฉพาะเวลาที่ต้องการประมวลผลหรือแสดงผลข้อความ<br />
พิมพ์</p>
<blockquote><p>println &#8216;-&#8217;.multiply 80</p>
</blockquote>
<p>จะทำให้เกิดสายอัขระเท่ากับจำนวน เป็นต้นครับ<br />
หรือสามารถใช้ operator * ได้ในทำนองเดียวกับ (เพราะ operator * จะแปลงเป็น multiply method ในระดับ bytecode ครับ)</p>
<blockquote><p>println (&#8217;-&#8217; * 80)</p>
</blockquote>
<p>จาก <a href="http://mrhaki.blogspot.com/2009/08/groovy-goodness-stringmultiply.html">Groovy Goodness</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.grails66.com/blog/?feed=rss2&amp;p=922</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ทำการ Monitoring การทำงานของ Grails ด้วย Melody Plugin</title>
		<link>http://www.grails66.com/blog/?p=910</link>
		<comments>http://www.grails66.com/blog/?p=910#comments</comments>
		<pubDate>Thu, 31 Dec 2009 18:59:33 +0000</pubDate>
		<dc:creator>up1</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[melody]]></category>
		<category><![CDATA[monitoring]]></category>

		<guid isPermaLink="false">http://www.grails66.com/blog/?p=910</guid>
		<description><![CDATA[สวัสดีปีใหม่ทุกๆ ท่านนะครับ 
ก่อนที่ผมจะไม่อยู่หลายวันเนื่องจากมีภารกิจสำคัญ ทำให้ห่างหายจากโลก internet ไปสัก 1-2 สัปดาห์  เลยขอฝาก Grails plugin ที่น่าสนใจสักตัวให้ลองใช้งานนะครับ
นั่นก็คือเครื่องมือสำหรับ Monitoring การใช้งาน resources ต่างๆ ของ grails application ที่ทำงานอยู่  โดยตัวที่แนะนำคือ Melody Grails Plugin
การใช้งานก็ง่ายๆ ครับ คือ ใช้คำสั่ง
>grails install-plugin grails-melody
สามารถใช้งานผ่าน url ดังนี้
http://localhost:8080//monitoring
ผลการทำงานจะแบ่งเป็นส่วนต่างๆ ดังนี้
1. ผลการทำงานโดยรวม ซึ่งแสดงเป็นรูปกราฟ

2. แสดงสถิติการทำงานผ่าน HTTP

3. แสดงสถิติการทำงานของ SQL

4. แสดง error ต่่างๆ

และยังมีส่วนอื่นๆ  อีกเช่น System Error Log, System Information, จำนวน Thread การทำงาน,  จำนวนข้อมูลที่ [...]]]></description>
			<content:encoded><![CDATA[<p>สวัสดีปีใหม่ทุกๆ ท่านนะครับ </p>
<p>ก่อนที่ผมจะไม่อยู่หลายวันเนื่องจากมีภารกิจสำคัญ ทำให้ห่างหายจากโลก internet ไปสัก 1-2 สัปดาห์  เลยขอฝาก Grails plugin ที่น่าสนใจสักตัวให้ลองใช้งานนะครับ</p>
<p>นั่นก็คือเครื่องมือสำหรับ Monitoring การใช้งาน resources ต่างๆ ของ grails application ที่ทำงานอยู่  โดยตัวที่แนะนำคือ <a href="http://www.grails.org/plugin/grails-melody">Melody Grails Plugin</a></p>
<p>การใช้งานก็ง่ายๆ ครับ คือ ใช้คำสั่ง</p>
<blockquote><p>>grails install-plugin grails-melody</p></blockquote>
<p>สามารถใช้งานผ่าน url ดังนี้</p>
<blockquote><p>http://localhost:8080/<YourContext>/monitoring</p></blockquote>
<p>ผลการทำงานจะแบ่งเป็นส่วนต่างๆ ดังนี้</p>
<p>1. ผลการทำงานโดยรวม ซึ่งแสดงเป็นรูปกราฟ<br />
<a href="http://farm5.static.flickr.com/4067/4231166613_b8e56816c4_o.png"><img src="http://www.grails66.com/blog/wp-content/uploads/2010/01/melody_1-299x159.png" alt="melody_1" title="melody_1" width="299" height="159" class="aligncenter size-medium wp-image-911" /></a></p>
<p>2. แสดงสถิติการทำงานผ่าน HTTP<br />
<a href="http://farm5.static.flickr.com/4003/4231935050_57d7b8f61d_o.png"><img src="http://www.grails66.com/blog/wp-content/uploads/2010/01/melody_2-300x76.png" alt="melody_2" title="melody_2" width="300" height="76" class="aligncenter size-medium wp-image-913" /></a></p>
<p>3. แสดงสถิติการทำงานของ SQL<br />
<a href="http://farm5.static.flickr.com/4071/4231166679_a3e23a0bfc_o.png"><img src="http://www.grails66.com/blog/wp-content/uploads/2010/01/melody_3-300x45.png" alt="melody_3" title="melody_3" width="300" height="45" class="aligncenter size-medium wp-image-914" /></a></p>
<p>4. แสดง error ต่่างๆ<br />
<a href="http://farm3.static.flickr.com/2548/4231166721_2be493aac8_o.png"><img src="http://www.grails66.com/blog/wp-content/uploads/2010/01/melody_4-300x48.png" alt="melody_4" title="melody_4" width="300" height="48" class="aligncenter size-medium wp-image-915" /></a></p>
<p>และยังมีส่วนอื่นๆ  อีกเช่น System Error Log, System Information, จำนวน Thread การทำงาน,  จำนวนข้อมูลที่ Cache ไว้ สามารถ export report ออกเป็น pdf file ได้ รวมทั้งยังสามารถดู report ตาม วัน เดือน และ ปี ได้อีกด้วย</p>
<p>ดังนั้น Melody Plugin ตัวนี้จึงเป็นที่น่าสนใจมากครับ  แต่ถ้าเป็น JavaEE Application ก็สามารถใช้ได้เช่นกันนะครับ <a href="http://code.google.com/p/javamelody/">ซึ่งดูเพิ่มเติ่มได้ที่นี่</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.grails66.com/blog/?feed=rss2&amp;p=910</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Griffon: A Grails-like Rich Internet Framework</title>
		<link>http://www.grails66.com/blog/?p=890</link>
		<comments>http://www.grails66.com/blog/?p=890#comments</comments>
		<pubDate>Tue, 29 Dec 2009 08:01:15 +0000</pubDate>
		<dc:creator>Prakart</dc:creator>
				<category><![CDATA[tutorial]]></category>
		<category><![CDATA[griffon]]></category>

		<guid isPermaLink="false">http://www.grails66.com/blog/?p=890</guid>
		<description><![CDATA[Groovy Community, นอกจากจะมี Grails ซึ่งเป็น web application platform ที่ทำมาให้เราใช้ในการพัฒนาเว็ปอย่าง รวดเร็วส์  แล้ว ได้มีกลุ่มคนอีกกลุ่มหนึ่ง นำโดย
คุณ Andres Almiray   ที่ได้เห็นความซับซ้อนในอดึต สำหรับการพัฒนา Java GUI ด้วย Swing  จึงได้คิดปรับปรุง วิธีคิด ในการพัฒนา Java Desktop Application ในรูปแบบใหม่  โดยใช้ความสามารถของตัวภาษา Groovy อย่างเต็มที่ และมีรูปแบบการพัฒนาคล้ายๆ กับ การพัฒนา web application บน Grails  แต่ก็ยังคงยึดแบบแผนที่ดีที่มีการพัฒนามายาวนาน และต่อเนื่องของ  Swing Application Framework(JSR 296) ซึ่งก็คือ &#8220;Griffon Framework&#8221; นั่นเอง
เนื่องจาก Griffon ใช้ตัวภาษา Groovy เป็นพื้นฐานในการพัฒนาดังนั้น แนวคิดหลักๆที่เราคุ้นเคยกันใน grails ก็จะมีมากับ Griffon เหมือนกัน เช่น
Convention over Configuration, [...]]]></description>
			<content:encoded><![CDATA[<p>Groovy Community, นอกจากจะมี Grails ซึ่งเป็น web application platform ที่ทำมาให้เราใช้ในการพัฒนาเว็ปอย่าง รวดเร็วส์  แล้ว ได้มีกลุ่มคนอีกกลุ่มหนึ่ง นำโดย<br />
คุณ <a title="Andres Almiray" href="http://www.springone2gx.com/conference/new_orleans/2009/10/speakers/andres_almiray">Andres Almiray </a>  ที่ได้เห็นความซับซ้อนในอดึต สำหรับการพัฒนา Java GUI ด้วย Swing  จึงได้คิดปรับปรุง วิธีคิด ในการพัฒนา Java Desktop Application ในรูปแบบใหม่  โดยใช้ความสามารถของตัวภาษา Groovy อย่างเต็มที่ และมีรูปแบบการพัฒนาคล้ายๆ กับ การพัฒนา web application บน Grails  แต่ก็ยังคงยึดแบบแผนที่ดีที่มีการพัฒนามายาวนาน และต่อเนื่องของ  Swing Application Framework(JSR 296) ซึ่งก็คือ<strong> &#8220;Griffon Framework&#8221;</strong> นั่นเอง</p>
<p>เนื่องจาก Griffon ใช้ตัวภาษา Groovy เป็นพื้นฐานในการพัฒนาดังนั้น แนวคิดหลักๆที่เราคุ้นเคยกันใน grails ก็จะมีมากับ Griffon เหมือนกัน เช่น<br />
Convention over Configuration, MVC architecture, Command line interface และ มี plug-in system ให้ได้ใช้กันอย่างสนุกสนาน เหมือน grails อีกด้วย</p>
<p><strong>เริ่มติดตั้ง Griffon บน Window</strong><br />
1. ติดตั้ง jdk 1.5 หรือ jdk 1.6 <br />
2. เนื่อง จาก Griffon 0.2 ยังมีปัญหาอยู่บ้าง จึงขอแนะนำให้ไปใช้ <strong>version: Griffon 0.3 SNAPSHOT</strong> เลย สามารถ download ได้ที่ <a href="http://bamboo.ci.codehaus.org/browse/GRIFFON-MASTER-70/artifact/archives/griffon-bin-0.3-SNAPSHOT.zip">griffon-bin-0.3-SNAPSHOT.zip</a><br />
3. เพิ่มเติมค่าใน System variable setting บน Window<br />
JAVA_HOME  ชี้ไปที่ เราติดตั้ง jdk เอาไว้ ( D:\Java\jdk1.6.0_17)<br />
GRIFFON_HOME  ชี้ไปที่เราติดตั้ง griffon ไว้ ( D:\Java\griffon-0.3-SNAPSHOT )<br />
และ เพิ่ม PATH variable : %JAVA_HOME%\bin;%GRIFFON_HOME%\bin</p>
<p><strong>ทำการทดสอบ Griffon</strong><br />
1. เปิด command line ขึ้นมา แล้วพิมพ์ดังนี้<br />
C:\Users\Prakart&gt;griffon help <br />
ก็จะเห็นคำสั่งต่าง ๆ ที่เราจะใช้ในการพัฒนา application ด้วย Griffon<br />
<img class="alignleft size-full wp-image-899" src="http://www.grails66.com/blog/wp-content/uploads/2009/12/griffon-help2.jpg" alt="griffon-help" width="678" height="704" /></p>
<p><strong>ลอง สร้าง application และ เทส<br />
</strong>1. C:\Users\Prakart&gt; griffon create-app TestGriffon<br />
2. cd TestGriffon<br />
ภายใน จะมี folder ที่ถูกเตรียมไว้ให้แบบนี้</p>
<p><img class="alignleft size-full wp-image-898" src="http://www.grails66.com/blog/wp-content/uploads/2009/12/griffon-folders.jpg" alt="griffon-folders" width="562" height="220" /></p>
<p> <br />
3.  ทำการ run โดยใช้คำสั่ง  griffon run-app<br />
C:\Users\Prakart\TestGriffon\griffon run-app<br />
จะปรากฏ หน้าต่าง window ของ griffon เล็กๆ ขึ้นมา</p>
<p><img class="alignleft size-full wp-image-900" src="http://www.grails66.com/blog/wp-content/uploads/2009/12/griffon-app.jpg" alt="griffon-app" width="137" height="63" /></p>
<p>นอกจากนี้ griffon ยังได้เตรียม deployment options ต่างๆ ไว้ให้ด้วย(ดูได้จาก griffon help)<br />
- griffon run-applet และ<br />
- griffon run-webstart</p>
<p>ซึ่งเราสามารถลองเรียกดูได้เลย<br />
C:\Users\Prakart\TestGriffon\griffon run-applet และ<br />
C:\Users\Prakart\TestGriffon\griffon run-webstart</p>
<p>Griffon เป็นอีก community หนึ่งของ Groovy ที่น่าสนใจนะครับ<br />
ขอให้สนุกสนาน กับภาษา Groovy และ ขอให้ทุกคนมีความสุขในปี 2010 และตลอดไป นะครับ</p>
<p><strong>References:<br />
</strong>1. Griffon&#8217;s website &gt; <a href="http://griffon.codehaus.org/">http://griffon.codehaus.org/</a><br />
2. Griffon in Action &gt; <a href="http://www.manning.com/almiray/Almiray_MEAPch01_free.pdf">http://www.manning.com/almiray/Almiray_MEAPch01_free.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.grails66.com/blog/?feed=rss2&amp;p=890</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ใช้งาน OAuth ใน Grails Application</title>
		<link>http://www.grails66.com/blog/?p=879</link>
		<comments>http://www.grails66.com/blog/?p=879#comments</comments>
		<pubDate>Thu, 24 Dec 2009 17:28:31 +0000</pubDate>
		<dc:creator>up1</dc:creator>
				<category><![CDATA[tutorial]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.grails66.com/blog/?p=879</guid>
		<description><![CDATA[OAuth  เป็น open standard สำหรับ APIs ของการ authentication  ซึ่งจะทำให้ปลอดภัยและง่ายต่อการพัฒนาระบบงาน
โดยถ้าใครเคยใช้ web ที่มีการ authentication จาก twitter account แล้วนั้นจะเห็นหน้าจอเหล่านี้  ซึ่ง Twitter ก็เป็น OAuth Service Provider ที่ให้เราๆ ท่านๆใช้งานกัน และในบทความนี้ก็จะลองใช้ OAuth Service Provider ของ twitter เช่นกันครับ


ถ้าอยากทำแบบนี้ใน Grails application บ้างล่ะ ?? ทำอย่างไร ซึ่งแน่นอนว่าใน Grails มี OAuth plugin ให้ใช้เช่นกัน ดังนั้นเรามาดูว่าใช้งานกันอย่างไร
ขั้นตอนการพัฒนา
1. สร้าง Grails application ชื่อ my_oauth ดังนี้
>grails create-app my_oauth
2. ติดตั้ง [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://oauth.net/">OAuth </a></strong> เป็น open standard สำหรับ APIs ของการ authentication  ซึ่งจะทำให้ปลอดภัยและง่ายต่อการพัฒนาระบบงาน</p>
<p>โดยถ้าใครเคยใช้ web ที่มีการ authentication จาก twitter account แล้วนั้นจะเห็นหน้าจอเหล่านี้  ซึ่ง Twitter ก็เป็น OAuth Service Provider ที่ให้เราๆ ท่านๆใช้งานกัน และในบทความนี้ก็จะลองใช้ OAuth Service Provider ของ twitter เช่นกันครับ</p>
<p><img src="http://www.grails66.com/blog/wp-content/uploads/2009/12/oauth_twitter-300x154.png" alt="oauth_twitter" title="oauth_twitter" width="300" height="154" class="aligncenter size-medium wp-image-880" /></p>
<p><img src="http://www.grails66.com/blog/wp-content/uploads/2009/12/oauth_twitter2-300x152.png" alt="oauth_twitter2" title="oauth_twitter2" width="300" height="152" class="aligncenter size-medium wp-image-881" /></p>
<p>ถ้าอยากทำแบบนี้ใน Grails application บ้างล่ะ ?? ทำอย่างไร ซึ่งแน่นอนว่าใน Grails มี OAuth plugin ให้ใช้เช่นกัน ดังนั้นเรามาดูว่าใช้งานกันอย่างไร</p>
<p><strong>ขั้นตอนการพัฒนา</strong><br />
1. สร้าง Grails application ชื่อ my_oauth ดังนี้<br />
>grails create-app my_oauth</p>
<p>2. ติดตั้ง OAuth plugin ดังนี้<br />
>cd my_oauth<br />
>grails install-plugin oauth-plugin</p>
<p> หรือ <a href="http://svn.codehaus.org/grails-plugins/grails-oauth/trunk/">ทำการ download OAuth plugin</a> มา  แล้วติดตั้งดังนี้</p>
<p>>grails install-plugin c:\my-path\grails-oauth-xxx.zip</p>
<p>3. ทำการ config ค่า parameters ต่างๆ ที่จำเป็นในการใช้งาน OAuth service provider ของ Twitter ใน file /conf/Config.groovy ดังนี้</p>
<pre class="brush: java">
oauth {
    twitter {
        requestTokenUrl=&quot;http://twitter.com/oauth/request_token&quot;
        accessTokenUrl=&quot;http://twitter.com/oauth/access_token&quot;
        authUrl=&quot;http://twitter.com/oauth/authorize&quot;
        consumer.key=&quot;xxx&quot;
        consumer.secret=&quot;yyy&quot;
    }
}
</pre>
<p><strong>คำถาม</strong><br />
ค่าของ consumer.key และ consumer.secret เอามาจากไหน ?</p>
<p><strong>คำตอบ</strong><br />
เอามาจากการ register ใน twitter ตาม url นี้ http://twitter.com/oauth และทำการ register new application โดยจะมีแบบ form ให้ใส่ข้อมูลต่างๆ  แล้วทำการ save ไปจะได้ consumer.key และ consumer.secret มานะครับ</p>
<p>ขั้นตอนการ Register เป็นดังรูป</p>
<p><img src="http://www.grails66.com/blog/wp-content/uploads/2009/12/oauth_twitter3-300x263.png" alt="oauth_twitter3" title="oauth_twitter3" width="300" height="263" class="aligncenter size-medium wp-image-882" /></p>
<p><img src="http://www.grails66.com/blog/wp-content/uploads/2009/12/oauth_twitter4-300x256.png" alt="oauth_twitter4" title="oauth_twitter4" width="300" height="256" class="aligncenter size-medium wp-image-883" /></p>
<p>4. สร้าง controller ชื่อ timeline ขึ้นมา เพื่อใช้สำหรับดึงข้อมูลจาก user timeline [ XML ] ใน twitter ดังนี้<br />
>grails create-controller timeline</p>
<p>และแก้ไข code ใน file /grails-app/controllers/TimelineController.groovy ดังนี้</p>
<pre class="brush: java">
class TimelineController {
	def apiURL = &quot;http://twitter.com/statuses/user_timeline.xml&quot;
	def oauthService

	def index = {
		if (session.oauthToken == null) {
			redirect(uri:&quot;/&quot;)
		}
		if (params?.apiURL)
			apiUrl = params.apiURL

		def response = oauthService.accessResource(apiURL, &#039;twitter&#039;, [key:session.oauthToken.key, secret:session.oauthToken.secret])
		def statuses = JSON.parse(response)
		render statuses;
	}
}
</pre>
<p>5. แก้ไข file /grails-app/views/index.gsp ดังนี้</p>
<pre class="brush: java">
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;Welcome to Grails&lt;/title&gt;
	&lt;meta name=&quot;layout&quot; content=&quot;main&quot; /&gt;
    &lt;/head&gt;
    &lt;body&gt;
		&lt;div&gt;
			&lt;g:oauthLink consumer=&quot;twitter&quot; returnTo=&quot;[controller:&#039;timeline&#039;]&quot;&gt;
				&lt;h3&gt;Login with&lt;/h3&gt;
				&lt;img src=&quot;${resource(dir:&#039;images&#039;,file:&#039;twitter-logo.png&#039;)}&quot; width=&quot;155&quot; height=&quot;36&quot;
				    style=&quot;border: 0; float: left&quot; /&gt;
			&lt;/g:oauthLink&gt;
		&lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>6. ทำการ run application ด้วยคำสั่ง<br />
>grails run-app</p>
<p>และเข้าไปที่ http://localhhost:8080/my_oauth/ แล้วจะสามารถใช้งานดังรูป</p>
<p><img src="http://www.grails66.com/blog/wp-content/uploads/2009/12/oauth_twitter5-300x188.png" alt="oauth_twitter5" title="oauth_twitter5" width="300" height="188" class="aligncenter size-medium wp-image-884" /></p>
<p><img src="http://www.grails66.com/blog/wp-content/uploads/2009/12/oauth_twitter6-300x140.png" alt="oauth_twitter6" title="oauth_twitter6" width="300" height="140" class="aligncenter size-medium wp-image-885" /></p>
<p><img src="http://www.grails66.com/blog/wp-content/uploads/2009/12/oauth_twitter7-300x87.png" alt="oauth_twitter7" title="oauth_twitter7" width="300" height="87" class="aligncenter size-medium wp-image-886" /></p>
<p>โดยสุดท้ายจะวิ่งไปทำงานตาม callback ทีี่กำหนดไว้ครับ ถือเป็นอันสำเร็จของการใช้งานแล้ว เพียงเท่านี้ก็สามารถใช้งาน OAuth service provider จาก Twitter ได้แล้วครับ </p>
<p><strong>ที่มา</strong><br />
- <a href="http://www.grails.org/OAuth+Plugin">OAuth Plugin</a><br />
- <a href="http://raibledesigns.com/rd/entry/grails_oauth_and_linkedin_apis">Grails OAuth and LinkedIn APIs</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.grails66.com/blog/?feed=rss2&amp;p=879</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Grails 1.2 ตัวเต็มๆๆๆ ออกมาแล้ววว</title>
		<link>http://www.grails66.com/blog/?p=875</link>
		<comments>http://www.grails66.com/blog/?p=875#comments</comments>
		<pubDate>Wed, 23 Dec 2009 17:29:05 +0000</pubDate>
		<dc:creator>up1</dc:creator>
				<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://www.grails66.com/blog/?p=875</guid>
		<description><![CDATA[หลังจากที่นั่ง countdown การปล่อย Grails 1.2 มาเป็นเวลา 2 ชั่วโมง ตอนนี้ทางทีมพัฒนา Grails และ SpringSource ได้ปล่อยออกมาแล้วครับ
โดย feature สรุปได้ดังนี้ [ จะเหมือนกับ 1.2 RCx นะครับ ]

- Dependency Resolution DSL
- Better Spring Integration
- Named Query Support
- Improved Performance &#038; Memory Consumption
- Named URL Mappings
- Refactored Testing Infrastructure
- Pluggable Web Containers

สามารถ Download ได้ที่นี่
ที่มา
Grails 1.2 Release Notes
Grails 1.2 Released
]]></description>
			<content:encoded><![CDATA[<p>หลังจากที่นั่ง countdown การปล่อย Grails 1.2 มาเป็นเวลา 2 ชั่วโมง ตอนนี้ทางทีมพัฒนา Grails และ SpringSource ได้ปล่อยออกมาแล้วครับ</p>
<p>โดย feature สรุปได้ดังนี้ [ จะเหมือนกับ 1.2 RCx นะครับ ]</p>
<blockquote><p>
- Dependency Resolution DSL<br />
- Better Spring Integration<br />
- Named Query Support<br />
- Improved Performance &#038; Memory Consumption<br />
- Named URL Mappings<br />
- Refactored Testing Infrastructure<br />
- Pluggable Web Containers
</p></blockquote>
<p><a href="http://grails.org/Download">สามารถ Download ได้ที่นี่</a></p>
<p><strong>ที่มา</strong><br />
<a href="http://www.grails.org/1.2+Release+Notes">Grails 1.2 Release Notes</a><br />
<a href="http://blog.springsource.com/2009/12/23/grails-1-2-released/">Grails 1.2 Released</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.grails66.com/blog/?feed=rss2&amp;p=875</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>อย่างเร็ว Grails 1.2-RC2 มาแล้วจ้าาาา</title>
		<link>http://www.grails66.com/blog/?p=873</link>
		<comments>http://www.grails66.com/blog/?p=873#comments</comments>
		<pubDate>Wed, 16 Dec 2009 19:44:06 +0000</pubDate>
		<dc:creator>up1</dc:creator>
				<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://www.grails66.com/blog/?p=873</guid>
		<description><![CDATA[หลังจากที่ Spring Framwork 3.0 GA ออกมาไม่กี่ชั่วโมง ก็ได้ฤกษ์ของ Grails 1.2 RC2  กันบ้างโดยส่วนใหญ่จะเป็นการแก้ไขข้อผิดพลาด โดยสิ่งใหม่ที่เพิ่มมาคือ นำ Spring Framwork 3.0 GA เข้ามาใช้นั่นเองครับ
ที่มา
Grails 1.2-RC2 Release Notes
]]></description>
			<content:encoded><![CDATA[<p>หลังจากที่ <a href="http://blog.springsource.com/2009/12/16/spring-framework-3-0-goes-ga/">Spring Framwork 3.0 GA</a> ออกมาไม่กี่ชั่วโมง ก็ได้ฤกษ์ของ Grails 1.2 RC2  กันบ้างโดยส่วนใหญ่จะเป็นการแก้ไขข้อผิดพลาด โดยสิ่งใหม่ที่เพิ่มมาคือ นำ Spring Framwork 3.0 GA เข้ามาใช้นั่นเองครับ</p>
<p><strong>ที่มา</strong><br />
<a href="http://www.grails.org/1.2-RC2+Release+Notes">Grails 1.2-RC2 Release Notes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.grails66.com/blog/?feed=rss2&amp;p=873</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>บทสัมภาษณ์ของ Guillaume Laforge and Graeme Rocher</title>
		<link>http://www.grails66.com/blog/?p=870</link>
		<comments>http://www.grails66.com/blog/?p=870#comments</comments>
		<pubDate>Tue, 15 Dec 2009 04:26:22 +0000</pubDate>
		<dc:creator>up1</dc:creator>
				<category><![CDATA[interview]]></category>
		<category><![CDATA[grails1.2]]></category>
		<category><![CDATA[groovy1.7]]></category>

		<guid isPermaLink="false">http://www.grails66.com/blog/?p=870</guid>
		<description><![CDATA[บทสัมภาษณ์ของ Guillaume Laforge and Graeme Rocher เกี่ยวกับ Groovy 1.7 และ Grails 1.2 โดยสัมภาษณ์จากงาน SpringOne 2GX
หัวข้อในการสัมภาษณ์ในครั้งนี้ประกอบไปด้วย
1. Features ใหม่ๆ ที่จะมีใน Groovy 1.7 และ Grails 1.2  รวมทั้งแผนการ release ใน version ใหม่ๆ
2. Spring Roo vs Grails
3. ผลกระทบของทีมพัฒนาจากการเข้ามาซื้อของ SpringSource
4.  Grails + Cloud Computing
5.  Groovy and Grails in Eclipse
Link บทสัมภาษณ์
ที่มา
http://www.infoq.com/interviews/Groovy-1.7-Grails-1.2
]]></description>
			<content:encoded><![CDATA[<p>บทสัมภาษณ์ของ Guillaume Laforge and Graeme Rocher เกี่ยวกับ Groovy 1.7 และ Grails 1.2 โดยสัมภาษณ์จากงาน SpringOne 2GX</p>
<p><strong>หัวข้อในการสัมภาษณ์ในครั้งนี้ประกอบไปด้วย</strong><br />
1. Features ใหม่ๆ ที่จะมีใน Groovy 1.7 และ Grails 1.2  รวมทั้งแผนการ release ใน version ใหม่ๆ<br />
2. Spring Roo vs Grails<br />
3. ผลกระทบของทีมพัฒนาจากการเข้ามาซื้อของ SpringSource<br />
4.  Grails + Cloud Computing<br />
5.  Groovy and Grails in Eclipse</p>
<p><a href="http://www.infoq.com/interviews/Groovy-1.7-Grails-1.2">Link บทสัมภาษณ์</a></p>
<p><strong>ที่มา</strong><br />
<a href="http://www.infoq.com/interviews/Groovy-1.7-Grails-1.2">http://www.infoq.com/interviews/Groovy-1.7-Grails-1.2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.grails66.com/blog/?feed=rss2&amp;p=870</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grails 1.2-RC1  มาแล้วจ้าาาา</title>
		<link>http://www.grails66.com/blog/?p=862</link>
		<comments>http://www.grails66.com/blog/?p=862#comments</comments>
		<pubDate>Sat, 05 Dec 2009 04:27:29 +0000</pubDate>
		<dc:creator>up1</dc:creator>
				<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://www.grails66.com/blog/?p=862</guid>
		<description><![CDATA[ทาง SpringSource และทีมพัฒนา Grails ได้ปล่อย Grails เวอร์ชัน 1.2 RC 1 ( Release Candidate ) ออกมา
ในเวอร์ชันนี้ส่วนใหญ่จะเป็นการแก้ไขข้อผิดพลาด และ ปรับปรุงการทำงานให้ดียิ่งขึ้น ส่วน features ใหม่ๆ ก็มี เช่น

- Dependency Resolution DSL
- เพิ่ม file CheckPluginVersions.groovy  เพื่อตรวจสอบ version ของ plugin ใน grails project ใช้สำหรับการ update plugin
- เพิ่ม argument  -clean ในชุดคำสั่ง grails test-app
- Dynamic Finder สนับสนุน Named Criteria
- เพิ่ม dynamic properties ใน [...]]]></description>
			<content:encoded><![CDATA[<p>ทาง SpringSource และทีมพัฒนา Grails ได้ปล่อย Grails เวอร์ชัน 1.2 RC 1 ( Release Candidate ) ออกมา</p>
<p>ในเวอร์ชันนี้ส่วนใหญ่จะเป็นการแก้ไขข้อผิดพลาด และ ปรับปรุงการทำงานให้ดียิ่งขึ้น ส่วน features ใหม่ๆ ก็มี เช่น</p>
<blockquote><p>
- Dependency Resolution DSL<br />
- เพิ่ม file CheckPluginVersions.groovy  เพื่อตรวจสอบ version ของ plugin ใน grails project ใช้สำหรับการ update plugin<br />
- เพิ่ม argument  -clean ในชุดคำสั่ง grails test-app<br />
- Dynamic Finder สนับสนุน Named Criteria<br />
- เพิ่ม dynamic properties ใน domain class
</p></blockquote>
<p><strong>โดยรายละเอียดเพิ่มเติมที่นี่</strong><br />
- <a href="http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11063&#038;version=15959">Changelog</a><br />
- <a href="http://grails.org/Download">Download</a><br />
- Documentation  http://grails.org/doc/1.2.x</p>
<p><strong>ที่มา</strong><br />
<a href="http://www.grails.org/1.2-RC1+Release+Notes">http://www.grails.org/1.2-RC1+Release+Notes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.grails66.com/blog/?feed=rss2&amp;p=862</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
