<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8458409978494995039</id><updated>2011-04-21T22:18:13.625-07:00</updated><category term='0.5'/><category term='AOP'/><category term='controllers'/><category term='dynamic methods'/><category term='Thai'/><category term='Adoption'/><category term='AIR'/><category term='views'/><category term='UI'/><category term='domain class'/><category term='ERP'/><category term='Windows'/><category term='Experience'/><category term='Acegi'/><category term='Summer of Code'/><category term='RIA'/><category term='JavaOne'/><category term='Groovy'/><category term='1.0'/><category term='scaffolding'/><category term='MDA'/><category term='Community'/><category term='Spec'/><category term='plugin'/><category term='iPaper'/><category term='0.6'/><category term='BDD'/><category term='easyb'/><category term='Random Thought'/><category term='Grails'/><category term='Flex'/><category term='JMS'/><category term='Geogia'/><category term='testing'/><category term='1.0 RC'/><category term='Analysis'/><title type='text'>Thai Grails</title><subtitle type='html'>ข่าวอัพเดตและแค้ส Grails ภาษาไทย สดจากโค้ด &lt;br/&gt;
Grails Updates and Casts in Thai</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>40</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-5746856726975032547</id><published>2008-06-01T06:08:00.001-07:00</published><updated>2008-06-01T08:13:29.486-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>การทดสอบครั้งที่สอง และ vvTalk</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;วันเสาร์เมื่อวานนี้ เราได้มีการทดสอบการสัมมนาเกรลส์ออนไลน์กันไปอีกครั้ง โดยคราวนี้ใช้ซอฟต์แวร์ที่พัฒนาขึ้นเองครับ&lt;br/&gt;เมือวานมีผู้เข้าร่วมทดสอบประมาณ 7 ท่าน รวมผมด้วยเป็น 8 &lt;br/&gt;การทดสอบค่อนข้างไปได้ด้วยดี มีการหลุด 2-3 ครั้งที่ฝั่งผม แต่เพราะซอฟต์แวร์ได้รับการออกแบบให้ผู้พูดสามารถเข้าไปพูดต่อได้แทบจะทันที เลยทำให้สามารถจัดสัมมนาได้จนจบครับ&lt;br/&gt;&lt;br/&gt;วันนี้ผมก็พยายามหาชื่อที่น่าสนใจมาตั้งให้ซอฟต์แวร์ตัวนี้ และได้เป็น &lt;b&gt;vvTalk&lt;/b&gt; ครับ&lt;br/&gt;&lt;br/&gt;ในอาทิตย์หน้า vvTalk จะมี opensource repository เป็นของมันเองโดยเริ่มที่รุ่น 0.2 (เมื่อวานใช้ 0.1 กันครับ) ตอนนี้ผมพยายาม refactor บางส่วนที่เขียนด้วย openlaszlo และ fork ajax library มาใช้เอง ตัวระบบด้านหลังของ vvTalk มีตังต่อไปนี้ครับ&lt;br/&gt;&lt;br/&gt;- &lt;a href='http://grails.org/'&gt;Grails&lt;/a&gt; 1.0.3-SNAPSHOT (สำหรับพัฒนา backend)&lt;br/&gt;- &lt;a href='http://www.openlaszlo.org/'&gt;OpenLaszlo&lt;/a&gt; 4.0.12 (สำหรับพัฒนา frontend)&lt;br/&gt;- &lt;a href='http://osflash.org/red5'&gt;Red5&lt;/a&gt;  0.7 (สำหรับ media server)&lt;br/&gt;- &lt;a href='http://www.swftools.org/'&gt;swftools&lt;/a&gt; 0.8.1 (สำหรับแปลง PDF เป็น SWF เพื่อเตรียม slide)&lt;br/&gt;- gyrocat-6.0.16-g103-SNAPSHOT (server สำหรับ deployment)&lt;br/&gt;&lt;br/&gt;หมายเหตุ: ตัว gyrocat เป็น container ที่ผมเตรียมขึ้นเองโดยใช้ Apache Tomcat และ jar ที่จำเป็นจากเกรลส์ครับ&lt;br/&gt;script สำหรับสร้างอยู่ในส่วนเก็บไฟล์ของ &lt;a href='http://groups.google.com/group/thai-grails-user'&gt;กลุ่มผู้ใช้เกรลส์&lt;/a&gt; และอีกสักพักจะทำจุดสำหรับดาวน์โหลดไว้ให้ครับ&lt;br/&gt;และเกรลส์ 1.0.3-SNAPSHOT นั้นเป็น custom built ยังไม่มี official ครับ&lt;br/&gt;&lt;br/&gt;ยังมีจุดที่ต้องปรับปรุงและปรับปรุงไปแล้วพอสมควรสำหรับ สำหรับในการจัดสัมมนาจริงคราวหน้านั้นเราคงได้ใช้ vvTalk 0.2 กันครับ&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-5746856726975032547?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/5746856726975032547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=5746856726975032547' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/5746856726975032547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/5746856726975032547'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/06/vvtalk.html' title='การทดสอบครั้งที่สอง และ vvTalk'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-743136499603472061</id><published>2008-05-27T14:48:00.001-07:00</published><updated>2008-05-27T14:48:23.080-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>ทดสอบระบบสัมมนาเกรลส์</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;ผมติดตั้งระบบเพื่อเตรียมที่จะสัมมนาเกรลส์แบบออนไลน์ที่ &lt;br/&gt;&lt;br/&gt;http://130.88.197.243:5080/openmeetings/&lt;br/&gt;&lt;br/&gt;โดย&lt;br/&gt;&lt;br/&gt;พุธ   28 พ.ค. เวลา 21.00 - 22.00 จะพูดคุยเรื่อง Groovy และ&lt;br/&gt;&lt;br /&gt;เสาร์ 31 พ.ค. เวลา 21.00 - 22.00 จะพูดคุยเรื่อง Grails กันครับ&lt;br/&gt;&lt;br/&gt;ท่านใดสนใจสามารถลงทะเบียนเพื่อเข้าร่วมทดสอบระบบได้ตาม URL ด้านบนครับ&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-743136499603472061?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/743136499603472061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=743136499603472061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/743136499603472061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/743136499603472061'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/05/blog-post_27.html' title='ทดสอบระบบสัมมนาเกรลส์'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-1120861322364603133</id><published>2008-05-21T11:15:00.001-07:00</published><updated>2008-05-21T11:15:04.396-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Convention over Configuration: ข้อตกลงก่อนการปรับแต่ง</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;div style=''&gt;มาแก้คำผิดเล็กน้อย ผมแปล Convention over Configuration ไว้ว่าข้อตกลงแทนการปรับแต่ง แต่ Jason Rudolf อฺธิบายไว้ว่า มัน over ไม่ใช่ instead of คือถ้าใช้ข้อตกลงไม่ได้ก็ยังปรับแต่งกันได้อยู่ดี ฟัง ๆ ดู เออจิงแฮะ&lt;br/&gt;&lt;br/&gt;เลยต้องขอยอมรับผิดไว้แต่เพียงผู้เดียว&lt;br/&gt;&lt;br/&gt;ต่อไปเมื่ออ้างอิงถึง Convention over Configuration ในภาษาไทยนั้นผมจะใช้ "ข้อตกลงก่อนการปรับแต่ง" นะครับ จนกว่าจะมีใครที่มีวลีที่เหมาะสมกว่านี้ :-)&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-1120861322364603133?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/1120861322364603133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=1120861322364603133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1120861322364603133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1120861322364603133'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/05/convention-over-configuration.html' title='Convention over Configuration: ข้อตกลงก่อนการปรับแต่ง'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-1254364450532980391</id><published>2008-05-19T05:42:00.001-07:00</published><updated>2008-05-19T05:42:20.821-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='1.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Grails.org เปิดตัวอีกรอบ ใช้เกรลส์สร้าง</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;div style=''&gt;&lt;a href='http://grails.org/'&gt;Grails.org&lt;/a&gt; เปิดตัวรอบใหม่โดยใช้เกรลส์สร้างทั้งตัว และโค้ดของตัวเวบเองจะกลายเป็น demo ตัวอย่างอยู่ในเกรลส์รุ่นต่อไปครับ&lt;br/&gt;&lt;br/&gt;ที่มา: บล่อกของ&lt;a href='http://graemerocher.blogspot.com/2008/05/grailsorg-now-powered-by-grails.html'&gt;เกรม รอชเชอร์&lt;/a&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-1254364450532980391?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/1254364450532980391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=1254364450532980391' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1254364450532980391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1254364450532980391'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/05/grailsorg.html' title='Grails.org เปิดตัวอีกรอบ ใช้เกรลส์สร้าง'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-8570764451482376342</id><published>2008-05-18T12:06:00.001-07:00</published><updated>2008-05-18T12:06:59.995-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Summer of Code'/><title type='text'>กูเกิ้ลซัมเมอร์ออฟโค้ด</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;div style=''&gt;ช่วงนี้อาการเกรลส์อาจจะลดลงไปเล็กน้อยเนื่องจากปิดเทอมหน้าร้อนปีนี้ผมเข้าร่วมโปรแกรมกูเกิ้ลซัมเมอร์ออฟโค้ด โดยจะเริ่มวันที่ 26 นี้ หน้าที่ผมตอนนี้ก็คือแฮ็ก Groovy แล้วทำให้มันเร็วขึ้นโดยทำการปรับปรุงระบบรันไทม์ตรงส่วน callsite ท่านใดไปงาน &lt;a href='http://www.narisa.com/forums/index.php?showtopic=23485'&gt;NJUG 5&lt;/a&gt; อาจจะพอจำได้ (ตรง &lt;a href='http://www.slideshare.net/roofimon/cbluenjug5'&gt;slide&lt;/a&gt; 2 หน้าสุดท้าย) ตอนนี้ผมใช้การแตกสาขาโปรเจ็ค groovy เฉพาะส่วน &lt;a href='https://code.launchpad.net/groovy'&gt;core&lt;/a&gt; ออกมา ของ Russel ที่ &lt;a href='https://code.launchpad.net/%7Echanwit/groovy/ck1'&gt;Launchpad&lt;/a&gt; เพื่อสร้างโค้ดสำหรับทดสอบอะไรใหม่ ๆ แล้วจึงค่อย diff ส่งกลับไปให้ groovy-core ตัวหลักทีหลัง&lt;br/&gt;&lt;br/&gt;งานกำลังจะเริ่ม ตลอด 3 เดือนคงได้เรียนรู้อะไรเพิ่มขึ้นอีกเยอะครับ&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-8570764451482376342?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/8570764451482376342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=8570764451482376342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/8570764451482376342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/8570764451482376342'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/05/blog-post.html' title='กูเกิ้ลซัมเมอร์ออฟโค้ด'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-4961874883456977913</id><published>2008-04-19T01:59:00.001-07:00</published><updated>2008-04-19T01:59:39.054-07:00</updated><title type='text'>Spring WebFlow และเกรลส์</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;มี&lt;a href='http://www.infoq.com/news/2008/04/spring-webflow-2rc'&gt;บทความ&lt;/a&gt;บน InfoQ เกี่ยวกับ Spring WebFlow 2.0 ที่กำลังจะออก และการร่วมมือกับโครงการเกรลส์ในการกำหนดภาษาเพื่อใช้นิยาม flow ของเวบไซต์&lt;br/&gt;&lt;br/&gt;อ่านบทความเต็มได้จาก &lt;a href='http://www.infoq.com/news/2008/04/spring-webflow-2rc'&gt;InfoQ.com&lt;/a&gt; ครับ&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-4961874883456977913?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/4961874883456977913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=4961874883456977913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/4961874883456977913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/4961874883456977913'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/04/spring-webflow.html' title='Spring WebFlow และเกรลส์'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-5575510001332966001</id><published>2008-04-10T17:04:00.001-07:00</published><updated>2008-04-10T17:04:06.006-07:00</updated><title type='text'>สร้าง PDF ด้วยเกรลส์แอพพลิเคชั่น</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;หลาย ๆ คนอาจจะสนใจที่จะ generate PDF จากเกรลส์ &lt;br/&gt;&lt;br/&gt;Egon Jensen มี &lt;a href='http://docs.codehaus.org/display/GRAILS/Jasper+Plugin'&gt;tutorial&lt;/a&gt; ที่น่าสนใจซึ่งใช้ JasperGrails plugin ในการสร้างรายงานออกมาเป็น PDF ครับ&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-5575510001332966001?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/5575510001332966001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=5575510001332966001' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/5575510001332966001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/5575510001332966001'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/04/pdf.html' title='สร้าง PDF ด้วยเกรลส์แอพพลิเคชั่น'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-1699252112485759887</id><published>2008-04-10T16:58:00.001-07:00</published><updated>2008-04-10T16:58:34.825-07:00</updated><title type='text'>SOAP ปลั๊กอินสำหรับเกรลส์จาก WS02</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;WSO2 &lt;a href='http://wso2.com/about/news/wsf-spring-1-0-release/'&gt;ประกาศตัว&lt;/a&gt; WSF/Spring รุ่น 1.0 ซึ่งสนับสนุน Web Service ด้วย Apache Axis2 ครับสำหรับ Spring และสำหรับเกรลส์นั้นก็มีปลั๊กอินคือ &lt;a href='http://grails.org/Apache+Axis2+Plugin'&gt;Axis2 plugin&lt;/a&gt; ซึ่งมีการใช้งานในลักษณะเดียวกันกับ XFire plugin ที่ผมพัฒนาไว้ แต่ Axis2 plugin ยังไม่มีความสามารถในการสนับสนุนบางฟีเจอร์ที่สำคัญ ๆ เช่น Generic เป็นตันครับ&lt;br/&gt;&lt;br/&gt;ผ่านทาง: &lt;a href='http://www.aboutgroovy.com/item/show/421'&gt;aboutGroovy&lt;/a&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-1699252112485759887?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/1699252112485759887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=1699252112485759887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1699252112485759887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1699252112485759887'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/04/soap-ws02.html' title='SOAP ปลั๊กอินสำหรับเกรลส์จาก WS02'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-8610094291379567278</id><published>2008-02-26T15:25:00.001-08:00</published><updated>2008-02-26T15:27:27.344-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>รีวิว Adobe AIR/Ajax (เกือบจะได้ต่อกับ Grails)</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;ตอนแรกกะไว้ว่าจะทดสอบการใช้งานร่วมกันระหว่าง &lt;a href='http://www.adobe.com/devnet/air/ajax/'&gt;Adobe AIR/Ajax&lt;/a&gt; กับ Grails เนื่องจากตัวเต็มของ AIR เพิ่งออกไปเมื่อวันที่ 25 ที่ผ่านมา แต่พอผมติดตั้ง AIR runtime ขนาด 11 MB แล้วลองเปิดหาแอพพลิเคชั่นตัวอย่างมารันดู ก็ไปเจอ time tracker เล็ก ๆ ตัวนึง เห็นเจ้าของเขาบอกว่าใช้ ExtJS ทำ UI ก็คิดว่านะจะเล็กดีและพอที่จะลองได้&lt;br/&gt;&lt;br/&gt;ผมใช้ Firefox browse ไปที่แอพพลิเคชั่นตัวนั้น (.air) แล้ว AIR runtime ก็ทำการติดตั้งลงไปในเครื่อง - แค่ตอนเปิดก็รู้สึกตะหงิด ๆ นิดนึงแล้วครับว่าไม่ค่อยเป็นไปอย่างที่คิด คือ เปิด ติดตั้ง แล้วก็รัน เหมือนการลงแอพพลิเคชั่นปกติ และถ้าไม่ได้ sign digital signature ไว้ มันก็จะมีการฟ้องแบบเดียวกันกับ Java Web Start และ ActiveX (ถ้าเป็น security model ของ Google Gears จะเบากว่านี้เล็กน้อย)&lt;br/&gt;&lt;br/&gt;พอเปิดใช้งานตัวโปรแกรม หน้าตาการ render ของ WebKit (HTML renderer ที่ AIR ใช้) ทำให้ตัวโปรแกรมที่เคยดูดีในวิดีโอสาธิต ดูแย่ไปเลย icon ที่มากับ ExtJS มันแตก ๆ ยังไงไม่รู้ การ render font ก็ดูแปลก ๆ ตัวหนังสือไม่เรียบ แถม Ext JS ที่เร็วใน Firefox กลับช้าอืด ๆ ใน WebKit &lt;br/&gt;&lt;br/&gt;ผมเลยถอดใจ จะเอามันออกแล้วโปรแกรมตัวนี้ ก็หาที่ uninstall ไม่ได้อีก &lt;br/&gt;&lt;br/&gt;ปิดท้ายว่า ถ้าอยากทำ desktop app ด้วย HTML + Ajax รอ &lt;a href='http://wiki.mozilla.org/Prism'&gt;Mozilla Prism&lt;/a&gt; แล้วใช้ &lt;a href='http://gears.google.com/'&gt;Google Gears&lt;/a&gt; เป็นตัวเก็บข้อมูล น่าจะดีกว่า Adobe AIR/Ajax หลายขุม&lt;br/&gt;&lt;br/&gt;ไม่ประทับใจ เลยไม่ทันจะได้ลองเอามาต่อกับ back-end ที่เป็น Grails ครับ&lt;br/&gt;(เหลือ AIR/Flex อีกตัว หน้าตาคงออกมาสวยงามกว่า ถ้ามีใครรีวิวแล้วบอกกันหน่อยนะครับ จะตามไปอ่าน)&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-8610094291379567278?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/8610094291379567278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=8610094291379567278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/8610094291379567278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/8610094291379567278'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/02/adobe-airajax-grails.html' title='รีวิว Adobe AIR/Ajax (เกือบจะได้ต่อกับ Grails)'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-6949042285081017701</id><published>2008-02-25T13:01:00.001-08:00</published><updated>2008-02-25T13:04:06.234-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Acegi'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>วิธีการใช้ Grails และ Acegi จาก InfoQ</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Fadi Shami เขียน&lt;a href='http://www.infoq.com/articles/grails-acegi-integration'&gt;บทความบน InfoQ&lt;/a&gt; แนะนำการใช้งาน Grails และ Acegi อย่างเป็นลำดับ โดยในบทความอ้างอิงการใช้ปลั๊กอิน Acegi รุ่น 0.2 ครับ&lt;br/&gt;&lt;br/&gt;ที่มา: infoq.com&lt;br/&gt;ผ่านทาง &lt;a href='http://aboutgroovy.com/item/show/390'&gt;aboutGroovy&lt;/a&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-6949042285081017701?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/6949042285081017701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=6949042285081017701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6949042285081017701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6949042285081017701'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/02/grails-acegi-infoq.html' title='วิธีการใช้ Grails และ Acegi จาก InfoQ'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-3976239305657329984</id><published>2008-02-23T08:02:00.000-08:00</published><updated>2008-02-23T08:03:09.621-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPaper'/><category scheme='http://www.blogger.com/atom/ns#' term='Thai'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>ทดสอบระบบ iPaper : แนะนำเฟรมเวิร์คเกรลส์</title><content type='html'>&lt;script&gt;document.write('&lt;noscript&gt;');&lt;/script&gt; &lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="embedded_flash_2158665_wt7s1" name="embedded_flash_2158665_wt7s1" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%"&gt;&lt;param name="flashvars" value="&amp;document_id=2158665&amp;access_key=key-1udk6gejtaum3ytnkznn&amp;page="&gt;  &lt;param name="movie" value="http://documents.scribd.com/ScribdViewer.swf"&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;  &lt;embed flashvars="&amp;document_id=2158665&amp;access_key=key-1udk6gejtaum3ytnkznn&amp;page=" src="http://documents.scribd.com/ScribdViewer.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="embedded_flash_2158665_wt7s1" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" height="500" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;/noscript&gt;&lt;script type="text/javascript" src='http://www.scribd.com/javascripts/view.js'&gt;&lt;/script&gt;&lt;div id='embedded_flash_2158665_wt7s1' style="width:100%;height:100%"&gt;&lt;span style="display:none"&gt;Read this doc on Scribd: &lt;a href="http://www.scribd.com/doc/2158665/grails-thai"&gt;grails thai&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;script type="text/javascript"&gt;  var scribd_doc = new scribd.Document(2158665, 'key-1udk6gejtaum3ytnkznn');     scribd_doc.write('embedded_flash_2158665_wt7s1');&lt;/script&gt;&lt;img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://counters.gigya.com/wildfire/CIMP/JnB*PTEyMDM3ODIzODY3MDQmcD*mZD*mbj1ibG9nZ2Vy.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-3976239305657329984?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/3976239305657329984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=3976239305657329984' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/3976239305657329984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/3976239305657329984'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/02/ipaper.html' title='ทดสอบระบบ iPaper : แนะนำเฟรมเวิร์คเกรลส์'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-8183694411230567163</id><published>2008-02-20T14:57:00.001-08:00</published><updated>2008-02-20T15:37:51.135-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JMS'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>เกรลส์และ Flex</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Maarten Winkels เขียนเกี่ยวกับการใช้เกรลส์และ Flex โดยการสร้างหน้าจอ master-details ใน Flex และใช้เกรลส์เป็นฝั่ง server โดยตัวอย่างของเขานั้นเน้นการ binding วัตถุฝั่ง Java ใน Flex อีกทั้งยังมีการใช้ JMS เพื่อส่งข้อความไปหาโปรแกรม Flex ตัวอื่น ๆ อีกด้วยเมื่อตัวใดตัวหนึ่งมีการอัพเดตข้อมูลมาที่ฝั่งเกรลส์ น่าสนใจทีเดียวครับ&lt;br/&gt;&lt;br/&gt;ที่มา &lt;a href='http://blog.xebia.com/2008/02/20/tutorial-master-detail-screen-in-flex-backed-up-by-grails-application/'&gt;blog.xebia.com&lt;/a&gt;&lt;br/&gt;ผ่าน &lt;a href='http://aboutgroovy.com/item/show/384'&gt;aboutGroovy&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-8183694411230567163?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/8183694411230567163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=8183694411230567163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/8183694411230567163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/8183694411230567163'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/02/flex.html' title='เกรลส์และ Flex'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-2131873011125028125</id><published>2008-02-14T13:33:00.001-08:00</published><updated>2008-02-14T13:33:45.155-08:00</updated><title type='text'>การเติบโตของกลุ่มผู้ใช้เกรลส์ในไทย</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;จากกลุ่มเมล์ที่ยังเงียบ ๆ อยู่เมื่อหลายเดือนก่อน ตอนนี้ &lt;a href='http://groups.google.com/group/thai-grails-user'&gt;กลุ่มผู้ใช้เกรลส์ในไทย&lt;/a&gt; ค่อนข้างคึกคักมากขึ้นครับ มีสมาชิกเป็นทางการแล้ว 34 ท่าน อีกหลายท่านก็เข้ามาอ่านโดยไม่ได้สมัครสมาชิก แต่ก็สังเกตได้ว่ามีคนเข้ามาอ่านในกลุ่มเกือบ 200 ครั้งต่อวัน (มากกว่าบล่อกนี้ของผมเยอะเลย :)) &lt;br/&gt;&lt;br/&gt;ข้อมูลที่น่าสนใจอีกส่วนหนึ่งก็คือ กลุ่มผู้ใช้เกรลส์นี้ทำให้เกิดกระแสการใช้งานเกรลส์ในไทย วัดจากจำนวนการดาวน์โหลดเกรลส์ในบ้านเรา พูดได้ว่าเป็นอันดับต้น ๆ ของเอเซียเลยครับ&lt;br/&gt;(เป็นรองก็แค่จีน - แหงหล่ะ!) สำหรับประเทศอื่นแถว ๆ บ้านเรา ก็มี ญี่ปุ่น สิงคโปร์ อินเดีย และ มาเลย์เซีย ตามลำดับครับ&lt;br/&gt;&lt;br/&gt;ส่วนข้อมูลจำนวนการดาวน์โหลดรวม เท่าที่นับได้เฉพาะจาก mirror ของผม 2 server &lt;br/&gt;(ไม่รวมจาก grails.org เพราะผมไม่รู้) &lt;br/&gt;- distribution .zip มากกว่า 20,000 ครั้ง&lt;br/&gt;- ตัวติดตั้ง 2,300 ครั้ง&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-2131873011125028125?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/2131873011125028125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=2131873011125028125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/2131873011125028125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/2131873011125028125'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/02/blog-post.html' title='การเติบโตของกลุ่มผู้ใช้เกรลส์ในไทย'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-6408496798499807662</id><published>2008-02-10T17:59:00.001-08:00</published><updated>2008-02-10T18:02:28.175-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spec'/><category scheme='http://www.blogger.com/atom/ns#' term='Thai'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>Groovy และภาษาไทย</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;ผมเคยลองคอมไพล์โปรแกรมภาษา Java ที่ตั้งชื่อคลาสเป็นภาษาไทยไปเมื่อหลายเดือนก่อน และจากนั้นก็ได้ทดลองไปอีก 2-3 ครั้งกับ Groovy แต่ไม่สำเร็จ วันนี้ลองดูอีกรอบหลังจากอ่านเรื่อง &lt;a href='http://www.easyb.org'&gt;easyb&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;รอบนี้ไปเจอว่าเป็นความสะเพร่าเองที่ไม่อ่านดูให้ดี ๆ ว่าเราสามารถระบุ encoding ให้ groovy และ groovyc ได้จาก command line&lt;br/&gt;&lt;blockquote&gt;$ groovy --encoding UTF-8 Test.groovy&lt;/blockquote&gt;&lt;br/&gt;แล้วใน Test.groovy มี class ที่มีชื่อและ method เป็นภาษาไทย ปรากฎว่าทำงานได้ปกติเช่นเดียวกับ Java ครับ&lt;br/&gt;&lt;br/&gt;มาถึงตรงนี้กลายเป็นว่ามีทางเลือกเพิ่มขึ้นในการอิมพลีเม้นต์ตัวรัน spec ภาษาไทย ว่าจะใช้ &lt;a href='http://geogia.googlecode.com/svn/trunk/spec/'&gt;parser &lt;/a&gt;ที่ทำไว้แล้วหรือจะทำเป็น &lt;a href='http://en.wikipedia.org/wiki/Domain-specific_programming_language'&gt;DSL&lt;/a&gt; ใน Groovy ดี (ตอนนี้เอียงกลับไปหา Groovy DSL) คงอาจจะต้องลองดูความเป็นไปได้อีกพักจึงจะสรุปได้ครับ&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-6408496798499807662?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/6408496798499807662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=6408496798499807662' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6408496798499807662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6408496798499807662'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/02/groovy.html' title='Groovy และภาษาไทย'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-315998464701743329</id><published>2008-02-10T15:29:00.001-08:00</published><updated>2008-02-10T15:29:34.958-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BDD'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='easyb'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>การพัฒนาที่ขับเคลื่อนด้วยพฤติกรรม (BDD) ด้วย easyb</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;a href='http://www.easyb.org/'&gt;easyb&lt;/a&gt; พัฒนาโดย Andrew Glover ซึ่งเป็นผู้แต่งร่วมของ &lt;a href='http://www.manning.com/koenig/'&gt;Groovy in Action&lt;/a&gt; เป็นเฟรมเวิร์คสำหรับการพัฒนาที่ขับเคลื่อนด้วยพฤติกรรม - behaviour driven development หรือ BDD โดยแนวคิดก็คือทำให้ &lt;i&gt;ข้อกำหนด&lt;/i&gt; ทำงานได้&lt;br/&gt;&lt;br/&gt;easyb ใช้ภาษาเฉพาะทางที่พัฒนาบน Groovy ครับ ใน&lt;a href='http://www.easyb.org/howtos.html'&gt;ตัวอย่าง&lt;/a&gt;บนเวบไซต์จะเห็นว่ามีการ generate เรื่องที่เป็นภาษาอังกฤษออกมาจากโค้ดของ easyb ได้ด้วย (คิดว่า &lt;a href='http://rspec.rubyforge.org/'&gt;rspec&lt;/a&gt; ก็คงทำได้แบบเดียวกัน)  &lt;br/&gt;&lt;br/&gt;ในโลกของ Groovy มี easyb ให้ใช้แล้ว การทวนสอบข้อกำหนดกับลูกค้าเมื่อพัฒนาแอพพลิเคชั่นด้วย Groovy และ Grails คงจะทำได้สะดวกมากขึ้นทีเดียวครับ&lt;br/&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-315998464701743329?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/315998464701743329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=315998464701743329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/315998464701743329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/315998464701743329'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/02/bdd-easyb.html' title='การพัฒนาที่ขับเคลื่อนด้วยพฤติกรรม (BDD) ด้วย easyb'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-1795390372135127942</id><published>2008-02-09T03:20:00.001-08:00</published><updated>2008-02-09T03:20:30.761-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='1.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>ประมวลเหตุการณ์หลังออก Grails 1.0</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;ก่อนอื่นต้องของแสดงความยินดีกับ Grails ที่ออกรุ่น 1.0 แ้ล้วครับ :-)&lt;br/&gt;&lt;br/&gt;หลังจากชุลมุนกันอย่างหนักในช่วง Grails 1.0 ออก เนื่องจากมีคนพยายามจะ download Grails กันมากเสียจน server Codehaus รับไม่ไหว (ตอนหลังการรีลีส แม้แต่ กิลโยม ลาฟอร์จ ก็&lt;a href='http://www.nabble.com/Grails-1.0-Released%21-tp15287650p15288393.html'&gt;บอกว่า&lt;/a&gt;โหลดไม่ได้ รอบหน้าสงสัยคงต้องนัดกันก่อนนะครับ) กว่าจะได้ zip และ tar.gz ของ bin มาทำ mirror ก็ resume ด้วย wget -c ไปหลายรอบครับ &lt;br/&gt;&lt;br/&gt;พอโหลดเสร็จ ผมก็เป็นคนแรกที่&lt;a href='http://www.nabble.com/Grails-1.0-Released%21-tp15287659p15289441.html'&gt;โพสต์ mirror&lt;/a&gt; ที่ไม่ broken หลายคนได้ binary ไปแล้วก็ mirror กันต่อ แล้วหลังจากนั้นทุกอย่างก็ไปได้อย่างราบรื่น &lt;br/&gt;&lt;br/&gt;อีกไม่ถึงชั่วโมง ผมก็ build ตัว installer เสร็จ พอดีมีคนเอา reference ของ Grails 1.0 ใน format .CHM &lt;a href='http://www.nabble.com/Grails-DOC-in-CHM-format-td15177106.html'&gt;มา post&lt;/a&gt; แทนที่จะได้ release เลย ผมก็ไปขอไฟล์เขามารวมในตัว installer ด้วย แล้วก็ build อีกรอบ&lt;br/&gt;เสร็จแล้วก็แอบเอาลิงค์ไปปะไว้ในหน้า thai grails user ก่ิอนพร้อม ๆ กับ binary หลัก (บางท่านอาจจะแอบเห็น) แ้ล้วก็ติดต่อไปหา กิลโยม เพื่อให้โพสต์ลิงค์เข้าหน้าหลัก คิดว่าตอนนั้น เกรมคงแอบไปหลับแล้วเพราะเงียบไปเลย&lt;br/&gt; ;-)&lt;br/&gt;&lt;br/&gt;จริง ๆ ก็กะไว้แล้วว่าจะวุ่น แต่ไม่คิดว่าจะวุ่นขนาดนี้ &lt;br/&gt;พอไปดูใน stat ของ server จำนวนคน download จาก mirror ผม ก็ปาเข้าไปเป็นพันในช่วงวันเดียว (ถึงวันนี้ 4583 + ~600 ของ installer for Windows และเพิ่มขึ้นเรื่อย ๆ) ก็เลยสรุปว่าได้คร่าว ๆ ว่าทั้งหมดอยู่ในระดับหมื่น download แล้วแน่ ๆ ครับ &lt;br/&gt;&lt;br/&gt;สรุปว่า Grails 1.0 เปิดตัวได้ค่อนข้างแรง &lt;br/&gt;บั๊กเล็ก ๆ น้อย ๆ หลุดออกมาบ้าง (ผมเก็บไป 2 แล้ว) แต่คิดว่า 1.0.1 จะออกมาแก้ไขในเวลาไม่นานและตัว snapshot ของ 1.0.1 ก็เสถียรมากด้วยครับ เพราะ feature frozen ไปแล้ว&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-1795390372135127942?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/1795390372135127942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=1795390372135127942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1795390372135127942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1795390372135127942'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2008/02/grails-10.html' title='ประมวลเหตุการณ์หลังออก Grails 1.0'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-6159783067261081850</id><published>2007-12-17T16:32:00.000-08:00</published><updated>2007-12-17T16:49:52.691-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Geogia'/><category scheme='http://www.blogger.com/atom/ns#' term='MDA'/><title type='text'>สคริปต์สำหรับ generate code จาก XMI</title><content type='html'>สำหรับคนที่ยังไม่รู้จักหรือลืมไปแล้ว (เพราะผมทิ้งช่วงการทำ &lt;a href="http://code.google.com/p/geogia/"&gt;Geogia&lt;/a&gt; ไปประมาณ 3 เดือน) Geogia คือโครงการสำหรับพัฒนาระบบ ERP บน Grails โดยใช้แนวทางแบบ MDA รวมกับ domain-driven ที่มีอยู่ใน Grails&lt;br /&gt;&lt;br /&gt;ตอนนี้ผม update ตัวโปรเจ็คอีกนิดหน่อยโดยเพิ่มสคริปต์สำหรับการสร้าง code ลงไปในตัว grials app ของ Geogia ซึ่งจะทำให้ภาพรวมของการพัฒนาง่ายขึ้น&lt;br /&gt;โดย&lt;br /&gt;- เพิ่ม script ตอนนี้หากใช้คำสั่ง 'grails xmi-gen' และตามด้วยชื่อ UML model, ตัว generate ก็จะสร้างไฟล์ .groovy ลงไปใน grails-app/domain ให้ซึ่งจะใช้ template จากไดเร็กทอรี่ src/java/templates&lt;br /&gt;- เพิ่ม lib ที่เป็น dependency ของ GroovyMDA ลงไปในตัว grails app ของ Geogia&lt;br /&gt;- ไฟล์ .zargo สำหรับเก็บ UML model จะวางไว้ในไดเร็กทอรี่ชื่อ uml&lt;br /&gt;&lt;br /&gt;ผม fork ตัว GroovyMDA ออกมาทั้งตัว โดยใช้ revision 20 เพราะคิดว่าเท่านี้ก็น่าจะเพียงพอกับการใช้งานในการ generate code ทั่ว ๆ ไปของ Geogia แล้ว&lt;br /&gt;อีกหนึ่งเหตุผลในการ fork ก็คือ Groovy เปลี่ยนไปเป็น 1.5 แล้ว แต่ binary ของ GroovyMDA ยังนิ่ง ๆ อยู่ การเอา source มา integrate ลองไปใน project เลย โดยให้เป็นกึ่ง ๆ plugin น่าจะยืดหยุ่นกว่า&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-6159783067261081850?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/6159783067261081850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=6159783067261081850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6159783067261081850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6159783067261081850'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/12/generate-code-xmi.html' title='สคริปต์สำหรับ generate code จาก XMI'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-4450478553313822470</id><published>2007-12-12T07:18:00.000-08:00</published><updated>2007-12-17T11:58:44.914-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='1.0 RC'/><title type='text'>Grails 1.0 RC3 และตัวติดตั้งบน Windows</title><content type='html'>Grails 1.0 RC3 ออกมาแล้วครับ &lt;br /&gt;ปลายอาทิตย์นี้คงได้เห็น RC4 และก่อนปิดคริสต์มาส เราอาจได้มีโอกาสยลโฉมตัว 1.0 กัน&lt;br /&gt;&lt;br /&gt;ตอนนี้ผมตาม update ตัวติดตั้ง Grails บน Windows แบบติด ๆ เช่นกันครับ&lt;br /&gt;สำหรับตัวติดตั้งบน Windows มีคนโหลดไปทั่วโลกร่วม &lt;span style="text-decoration:line-through;"&gt;200&lt;/span&gt; &lt;span style="text-decoration:line-through;"&gt;300&lt;/span&gt; 400 ยังไม่มีใครด่าว่าติดตั้งไม่ได้ &lt;br /&gt;ถ้าใช้กันอยู่ มาใส่ comment ให้รู้กันนิดหน่อยนะครับ ว่ามัน work จริง ๆ ผมจะได้ไปยืนยันกับทาง grails.org ครับ&lt;br /&gt;&lt;br /&gt;โหลดทั้ง Grails 1.0-RC3 หรือตัวติดตั้งบน Windows ได้จาก &lt;a href="http://grails.org"&gt;http://grails.org&lt;/a&gt; ครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-4450478553313822470?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/4450478553313822470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=4450478553313822470' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/4450478553313822470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/4450478553313822470'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/12/grails-10-rc3-windows.html' title='Grails 1.0 RC3 และตัวติดตั้งบน Windows'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-6683836167463447836</id><published>2007-11-26T12:01:00.000-08:00</published><updated>2007-11-26T12:15:08.647-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>พฤติกรรมของ test mode ใน Grails</title><content type='html'>ใน Grails เราสามารถปรับแต่ง mode การทำงานได้เป็น 3 mode ก็คือ &lt;span style="font-style:italic;"&gt;development&lt;/span&gt; สำหรับใช้พัฒนา, &lt;span style="font-style:italic;"&gt;test&lt;/span&gt; สำหรับใช้ทดสอบ และ &lt;span style="font-style:italic;"&gt;production&lt;/span&gt; สำหรับใช้งานจริง&lt;br /&gt;&lt;br /&gt;พฤติกรรมของแต่ละ mode จะแตกต่างกันเล็กน้อย และเราสามารถตั้งค่าบางอย่างเช่น data source ให้กับแต่ละ mode ของ Grails&lt;br /&gt;&lt;br /&gt;Grails จะทำงานใน test mode เมื่อผู้ใช้ต้องการจะทดสอบระบบด้วยคำสั่ง&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ grails test-app&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ซึ่งจะเกี่ยวข้องกับการทดสอบเชิงหน่วย (unit tests) และเชิงรวม (integration tests)&lt;br /&gt;&lt;br /&gt;จุดสำคัญก็คือ Grails มีแนวคิดของ &lt;span style="font-weight:bold;"&gt;test isolation&lt;/span&gt; นั่นหมายถึง ทุก ๆ การทดสอบจะถูกตั้งสมมติฐานไว้ว่าไม่มีการเกี่ยวข้องกัน เป็นผลให้องค์ประกอบที่ใช้ร่วมกันเช่นข้อมูลในฐานข้อมูลจะถูกลบทุก ๆ ในแต่ละการทดสอบ&lt;br /&gt;&lt;br /&gt;ดังนั้นเมื่อต้องการทดสอบการทำงานใน test mode จึงจำเป็นต้องแยก data source ออกมาเป็นฐานข้อมูลเฉพาะสำหรับ test และหากเราใช้ BootStrap ในการเตรียมการข้อมูลแล้วนั้น ใน method setUp ของทุก ๆ test case จะต้องมีการเรียกใช้ closure init ของ BootStrap ไว้ทุกครั้ง&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class MyTests extends GroovyTestCase {&lt;br /&gt;  void setUp() {&lt;br /&gt;    new BootStrap().init()&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  void testSomething() { ... }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-6683836167463447836?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/6683836167463447836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=6683836167463447836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6683836167463447836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6683836167463447836'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/11/test-mode-grails.html' title='พฤติกรรมของ test mode ใน Grails'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-6142887450967450596</id><published>2007-11-01T14:34:00.000-07:00</published><updated>2007-11-03T06:16:34.852-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Experience'/><category scheme='http://www.blogger.com/atom/ns#' term='1.0 RC'/><title type='text'>สรุปหลังสร้าง application ด้วย Grails</title><content type='html'>ผมได้มีโอกาสสร้าง Grails application สำหรับ production อีกครั้ง เป็น application เล็ก ๆ และครั้งนี้มีเวลาทำเพียง 1 สัปดาห์เศษ&lt;br /&gt;&lt;br /&gt;GUI layer ผมใช้ &lt;a href="http://www.openlaszlo.org/"&gt;OpenLaszlo&lt;/a&gt; อย่างเคย เพราะต้องการ application เป็น AJAX และคุ้นมือกับ OpenLaszlo มาพอสมควรแล้ว&lt;br /&gt;เหตุที่ทำไมไม่ใช้เฟรมเวิร์คอื่น เช่น GWT เหตุผลหลักเพราะไม่ agile, compile-debug cycle สำหรับ GUI layer นั้นดูจะทำได้ช้า (term of agility) กว่า OpenLaszlo&lt;br /&gt;ผมไม่ใช้ UI ที่เป็น JavaScript framework เช่น YUI, Ext หรือ Dojo เพราะทนปวดหัวไม่ไหว&lt;br /&gt;OpenLaszlo อยู่กลาง ๆ ระหว่าง GWT และ JavaScript framework ทั้งหลาย เพราะมี compiler ที่ช่วย check error ได้พอสมควร, ใช้ tag (box model แบบ XUL), ภาษาก็เป็น JavaScript (จริง ๆ แล้ว OpenLaszlo ก็ใช่ว่าจะ debug ง่าย แต่อย่างน้อยก็ง่ายกว่า JavaScript ล้วน ๆ)&lt;br /&gt;&lt;br /&gt;ผมออกแบบ layout ของ UI โดยใช้ Photoshop แล้วแยก layer ออกเป็นชิ้น ๆ (ไม่ได้ merge แล้ว slice) save แยกเป็น .png&lt;br /&gt;แล้วเอามารวมกันใน code ของ OpenLaszlo&lt;br /&gt;&lt;br /&gt;approach รอบนี้เป็น prototype-driven สร้าง UI เสร็จแล้ว define XML ที่ต้อง bind ด้วยระหว่าง client กับ server&lt;br /&gt;เป็น local XML &lt;a href="http://www.openlaszlo.org/lps4/docs/reference/LzDataset.html"&gt;dataset&lt;/a&gt; ของ OpenLaszlo ไว้ก่อน (feature นี้ช่วยได้มากสำหรับ prototyping)&lt;br /&gt;จากนั้นเอาก็ดูจาก schema ของมันไปเขียน code ของ controller และใช้เตรียมโดเมนคลาส&lt;br /&gt;&lt;br /&gt;ผมใช้ Grails 1.0-RC1 ไม่ลง plugin เพิ่มเลยนอกจาก &lt;a href="http://docs.codehaus.org/display/GRAILS/Quartz+plugin"&gt;Quartz 0.2&lt;/a&gt; (ใช้มันทำ job scheduling) เพราะ application คราวนี้หลัก ๆ เป็น Ajax อย่างที่บอก&lt;br /&gt;- ฝั่ง admin แทบไม่ทำอะไรเลย ใช้ &lt;a href="http://grails.codehaus.org/Scaffolding"&gt;scaffolding&lt;/a&gt; ล้วน ๆ&lt;br /&gt;- ด้านที่เชื่อมต่อกับ OpenLaszlo ใช้ REST ล้วน ๆ โดย render XML ออกจาก controller โดยตรง ใช้วิธียิง error code พวก 200, 500 ออกไปให้ UI layer จัดการ check เอาเอง ตรงนี้แยกเป็น 2 กลุ่ม กลุ่มทำงานแบบ RPC กับกลุ่ม CRUD เลยทำให้ได้สร้าง controller framework เล็ก ๆ ของฝั่ง OpenLaszlo ออกมาใช้โดยปริยาย เป็น controller แบบพิเศษนิดหน่อยคือต้องทำงานกับ event&lt;br /&gt;&lt;br /&gt;ไม่มี SQL เลยแม้แต่บรรทัดเดียว :)&lt;br /&gt;ไม่ได้ใช้ DTO pattern เพราะใช้ XML เป็น media แทน&lt;br /&gt;การ update data จากฝั่ง client มา server ใช้ก้อน XML แล้วแปลงเป็น Map ด้วย XMLParser ของ Groovy&lt;br /&gt;แล้วส่งให้ GORM ผ่าน obj.properties (มองมุมนี้ก็ยัง preserve data-hiding อยู่ครับ)&lt;br /&gt;&lt;br /&gt;ใช้ Java Mail เป็นตัวส่ง mail ผ่าน SSL server (SMTP ของ Google App for your domain)&lt;br /&gt;application มี File upload ตัวรับเป็นกลไลของ Spring (แต่ไม่ต้อง config อะไรเพิ่มใน Grails)&lt;br /&gt;&lt;br /&gt;การ authen ใช้ MD5 มีการ encode ตั้งแต่ฝั่ง client แล้วเทียบ password ที่ digest แล้วกับฝั่ง server เพื่อเลี่ยงการใช้ SSL&lt;br /&gt;มีพิเศษตรงการ sync กับ .htaccess ของ Apache httpd เพื่อให้ password คุมการเข้าถึง directory ให้ด้วย&lt;br /&gt;เรื่องสนุกมีอยู่ว่าต้องไปแกะ code &lt;a href="http://www.google.com/codesearch?hl=en&amp;q=+htdigest.c+show:aM_NkODA1LQ:MgHRIAnFR8E:5RxjaroFJEQ&amp;sa=N&amp;cd=1&amp;ct=rc&amp;cs_p=ftp://apache.mirrors.pair.com/httpd/httpd-2.2.4.tar.bz2&amp;cs_f=httpd-2.2.4/support/htdigest.c"&gt;htdigest.c&lt;/a&gt; ว่ามัน digest อะไร เพราะตอนแรกลองแล้ว ค่า hash ออกมาหน้าตาไม่เหมือนกัน&lt;br /&gt;&lt;br /&gt;server ตอนนี้ deploy ลง &lt;a href="http://www.mortbay.org/"&gt;Jetty&lt;/a&gt; 6 เนื่องจากอีกซักพักจะสร้าง Comet app เพื่อแทนที่การ pooling จากฝั่ง UI ที่ใช้อยู่ในปัจจุบัน&lt;br /&gt;ตอนนี้ยังเรียกใช้ ContinuationSupport ใน Grails controller ไม่ได้&lt;br /&gt;&lt;br /&gt;สรุปเบา ๆ ว่ารอบนี้ agile กว่าทุกครั้งและงานเสร็จทันเวลา ข้อเสียที่ยังแก้ไม่ตกคือตอนทำยังเปลือง CPU/Memory อยู่เพราะต้ิอง run ทั้ง Grails app และ OpenLaszlo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-6142887450967450596?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/6142887450967450596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=6142887450967450596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6142887450967450596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6142887450967450596'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/11/application-grails.html' title='สรุปหลังสร้าง application ด้วย Grails'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-2313880736890764126</id><published>2007-10-10T04:23:00.000-07:00</published><updated>2007-10-10T04:34:43.515-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adoption'/><title type='text'>Groovy + Grails Leads เปิดบริษัท G2One</title><content type='html'>&lt;a href="http://g2one.com"&gt;G2One inc.&lt;/a&gt; เป็นบริษัทเปิดตัวใหม่ เพื่อรับ Grails 1.0 และ Groovy 1.1 ที่กำลังจะออก เกรม รอชเชอร์ (Grails Lead) ไปเป็น CTO และ กิลโยม ลาฟอร์จ (Groovy Spec. Lead คนปัจจุบัน) เป็น VP Technology อีกคนที่เข้าร่วมด้วยคือ COO เก่าจาก Jetbrain ชื่อ อเล็กซ์ ครับ&lt;br /&gt;&lt;br /&gt;มี commercial เป็น back อยู่ด้านหลังอย่างเป็นเรื่องเป็นราวแบบนี้ คิดว่าจะเร่งการปรับใช้ Groovy และ Grails ในองค์กรขึ้นแน่นอนครับ&lt;br /&gt;&lt;br /&gt;เพิ่งเติมนิดนึง เรื่องการปรับใช้ Grails&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/wiki?path=/display/Community/Composition+on+Rails&amp;"&gt;SAP ใช้ Grails&lt;/a&gt; เป็นต่อกับ SAP NetWeaver แล้วครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-2313880736890764126?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/2313880736890764126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=2313880736890764126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/2313880736890764126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/2313880736890764126'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/10/groovy-grails-leads-g2one.html' title='Groovy + Grails Leads เปิดบริษัท G2One'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-4357360150198935371</id><published>2007-10-03T09:52:00.001-07:00</published><updated>2007-10-03T09:52:48.930-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random Thought'/><title type='text'>ทำไม Sun เลือกที่จะ support JRuby มากกว่า Groovy</title><content type='html'>คำอธิบาย ก็คือ Sun ต้องการให้ Java platform คงอยู่&lt;br /&gt;คนฝั่ง Groovy อาจจะลืมไปว่า Groovy ใช้ Java platform อยู่แล้ว&lt;br /&gt;ต่อให้ Sun ไม่ support Groovy, Groovy ก็เป็น JSR เป็นส่วนหนึ่งของ platform (อย่างน้อยก็ต้องรันบน platform)&lt;br /&gt;&lt;br /&gt;ในขณะที่ Ruby เป็นของอีกอย่างหนึ่ง&lt;br /&gt;&lt;br /&gt;การดึงและสร้าง JRuby ทำให้ Java platform เป็นทางเลือกของคนอีกกลุ่ม&lt;br /&gt;เป็นการขยายฐาน ขยายส่วนแบ่งตลาด&lt;br /&gt;&lt;br /&gt;หรือเป็นเพราะคนใน Sun อาจจะประเมินไว้นานแล้วว่า อีกซักพัก Ruby จะถึงจุดที่ scale ไม่ขึ้นด้วยเหตุผลด้าน vm infrastructure&lt;br /&gt;และ JVM ก็จะเป็น infrastructure ชั้นดีให้คนกลุ่มนั้น?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-4357360150198935371?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/4357360150198935371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=4357360150198935371' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/4357360150198935371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/4357360150198935371'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/10/sun-support-jruby-groovy.html' title='ทำไม Sun เลือกที่จะ support JRuby มากกว่า Groovy'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-649958611139431955</id><published>2007-10-02T15:41:00.000-07:00</published><updated>2007-10-02T15:45:32.745-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='1.0'/><category scheme='http://www.blogger.com/atom/ns#' term='domain class'/><title type='text'>ภาษาเฉพาะทางสำหรับ mapping ใน GORM (ตอน 1)</title><content type='html'>ในรุ่น 1.0 ที่กำลังจะมาถึง Grails ยอมให้ระบุรายละเอียดปลีกย่อยสำหรับปรับค่า Hibernate ผ่านทางโดเมนคลาส และสร้างภาษา DSL ง่าย ๆ สำหรับช่วยในเรื่องนี้เพิ่มเติมให้ GORM&lt;br /&gt;&lt;br /&gt;สำหรับรายละเอียดนั้นผมแปลครึ่งแรกของเอกสาร GORM Mapping DSL &lt;a href="http://groups.google.com/group/thai-grails-user/web/gorm-mapping-dsl-part-1"&gt;ที่นี่&lt;/a&gt;ครับ&lt;br /&gt;&lt;br /&gt;อีกครึ่งที่เหลือจะตามมาสุดสัปดาห์นี้ครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-649958611139431955?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/649958611139431955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=649958611139431955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/649958611139431955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/649958611139431955'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/10/mapping-gorm-1.html' title='ภาษาเฉพาะทางสำหรับ mapping ใน GORM (ตอน 1)'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-1140848472324644685</id><published>2007-09-13T12:03:00.000-07:00</published><updated>2007-09-13T12:10:33.273-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Geogia'/><category scheme='http://www.blogger.com/atom/ns#' term='MDA'/><category scheme='http://www.blogger.com/atom/ns#' term='1.0 RC'/><title type='text'>XMI Generator สำหรับ Geogia</title><content type='html'>ได้รับความร่วมมือเป็นอย่างดีจาก Craig Mackay ผู้พัฒนา &lt;a href="http://groovy-mda.sf.net"&gt;Groovy-MDA&lt;/a&gt; ตอนนี้ project &lt;a href="http://code.google.com/p/geogia"&gt;Geogia&lt;/a&gt; มี tool สำหรับ generate Grails domain class จาก XMI ที่ export จากทั้ง ArgoUML และ Poseidon UML CE 6 แล้วครับ&lt;br /&gt;&lt;br /&gt;สำหรับปัญหาการใช้งาน Enumeration ใน Grails ตอนนี้ใช้ workaround ไปก่อนดังนี้ครับ&lt;br /&gt;&lt;br /&gt;- สร้าง domain class ที่มี value เป็น property&lt;br /&gt;- ใน domain class ดังกล่าวให้มี initEnums เป็น static สำหรับสร้าง record ในฐานข้อมูล&lt;br /&gt;- เรียก initEnums ของแต่ละ class ใน init closure ของ BootStrap.groovy&lt;br /&gt;&lt;br /&gt;อีกอย่างหนึ่งที่จะลืมบอกไม่ได้เลยก็คือ Grails เข้าสู่ 1.0 RC แล้ว ตอนนี้ snapshot ของ 1.0 RC มีให้ download จาก website ของ &lt;a href="http://grails.org"&gt;Grails&lt;/a&gt; แล้วครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-1140848472324644685?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/1140848472324644685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=1140848472324644685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1140848472324644685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1140848472324644685'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/09/xmi-generator-geogia.html' title='XMI Generator สำหรับ Geogia'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-3732296801820254736</id><published>2007-09-11T08:22:00.000-07:00</published><updated>2007-09-11T08:23:49.346-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>กลุ่มผู้ใช้ Grails ในไทย</title><content type='html'>จริง ๆ แล้ว Thai Grails User Group ที่ Google มีมาระยะนึงแล้ว แต่ไม่ได้ประกาศเปิดอย่างเป็นทางการ เพราะตอนแรกผมกะว่าจะเอาไว้ทำ archive สำหรับ Grails message ที่น่าสนใจเป็นภาษาไทย แต่ดูไปดูมาคิดว่าแนวโน้มการใช้งาน Grails ในไทยน่าจะเริ่มบ้างแล้ว เลย ขอต้อนรับสู่&lt;a href="http://groups.google.com/group/thai-grails-user"&gt;กลุ่มผู้ใช้ Grails ในไทย&lt;/a&gt; ครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-3732296801820254736?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/3732296801820254736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=3732296801820254736' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/3732296801820254736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/3732296801820254736'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/09/grails.html' title='กลุ่มผู้ใช้ Grails ในไทย'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-3785245060117243428</id><published>2007-09-07T19:29:00.000-07:00</published><updated>2007-09-07T19:35:02.556-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='0.6'/><category scheme='http://www.blogger.com/atom/ns#' term='Geogia'/><category scheme='http://www.blogger.com/atom/ns#' term='MDA'/><title type='text'>Groovy-MDA สำหรับ generate Geogia</title><content type='html'>หลักจากบังเอิญไปเจอว่ามี &lt;a href="http://groovy-mda.sf.net"&gt;Groovy-MDA&lt;/a&gt; ซึ่งใช้ Groovy template สำหรับ generate ไฟล์โดยใช้ input เป็น XMI format นั้น ก็เริ่มเห็นทางที่จะปรับใช้ project นี้กับ &lt;a href="http://code.google.com/p/geogia"&gt;Geogia&lt;/a&gt; และคิดว่าจะช่วยเพิ่มความเร็วในการพัฒนาได้มากเอาการทีเดียวครับ&lt;br /&gt;&lt;br /&gt;เพิ่มเติมเล็กน้อย&lt;br /&gt;&lt;br /&gt;ตอนนี้ project Geogia ได้รับการสนับสนุนจาก &lt;a href="http://www.gentleware.com"&gt;Gentleware AG&lt;/a&gt; ผู้พัฒนา Poseidon UML โดย Gentleware จะให้ license Poseidon UML CE edition สำหรับใช้ในโครงการครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-3785245060117243428?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/3785245060117243428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=3785245060117243428' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/3785245060117243428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/3785245060117243428'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/09/groovy-mda-generate-geogia.html' title='Groovy-MDA สำหรับ generate Geogia'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-7207150885592983565</id><published>2007-09-02T19:26:00.000-07:00</published><updated>2007-09-02T19:43:35.244-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='0.6'/><category scheme='http://www.blogger.com/atom/ns#' term='ERP'/><category scheme='http://www.blogger.com/atom/ns#' term='Geogia'/><title type='text'>สร้างระบบ ERP ด้วย Grails</title><content type='html'>นึกครึ้มมานานแล้วครับที่จะลองสร้างอะไรใหญ่ ๆ ด้วย Grails ดู&lt;br /&gt;&lt;br /&gt;ได้แรงบันดาลใจมาจากโปรเจ็ค &lt;a href="http://ofbiz.apache.org/"&gt;OFBiz&lt;/a&gt; ที่คุณ Sand ใน board narisa.com มาโพสต์เล่าไว้บ่อย ๆ รวมทั้งได้เวลาเหมาะเอาก็ตอน Grails จะเป็น 1.0 เพราะสนับสนุน feature หลาย ๆ อย่างที่จะใช้ทำระบบขนาดใหญ่ได้ เช่นวาง domain class ใน package ได้ มี REST และ remoting plugin เป็นต้น และแน่นอนว่าผมไม่ได้จะทำ Web Application นะครับ ผมจะสร้าง Enterprise Application&lt;br /&gt;&lt;br /&gt;ก็เลยจะลองเขียน ERP ขึ้นมาใหม่จาก &lt;a href="http://neogia.org/UML_Diagram"&gt;diagram&lt;/a&gt; ของโปรเจ็ค Neogia (ที่สร้างจาก OFBiz อีกที) โดยจะค่อย ๆ แกะจาก UML ไปเป็น Grails domain class ที่ละ class และด้วย scaffolding ของ Grails ทำให้อะไร ๆ ก็เริ่มได้ง่ายไปหมด&lt;br /&gt;ผมแกะไปแล้ว 2-3 class การ map ทำได้ค่อนข้างตรงไปตรงมา&lt;br /&gt;&lt;br /&gt;มีปัญหาก็ตรง class แบบ Enumeration ซึ่งก็ต้องดูกันต่อไปว่า Grails จะ support ในรูปแบบไหน ถ้าไม่ไหวจริง ๆ ก็คงต้อง patch เอาเอง แต่ไม่รีบร้อนละครับ Groovy optimiser ที่ทำอยู่สำคัญกว่า&lt;br /&gt;&lt;br /&gt;จุดประสงค์ของโปรเจ็คนี้คือสร้าง ERP ที่สามารถเข้าใจได้ด้วยสมองคนเพียงคนเดียวครับ และให้สามารถ customise ได้ด้วยคนเพียงคนเดียวเช่นกัน ภาระทาง engineering ก็ยกไปให้ Grails ซะ ประมาณนั้นครับ&lt;br /&gt;&lt;br /&gt;โปรเจ็คอยู่ที่ Google Code ครับ ชื่อ &lt;a href="http://code.google.com/p/geogia"&gt;Geogia&lt;/a&gt; (แค่เปลี่ยน N ใน neogia เป็น G)&lt;br /&gt;แค่ลง Grails 0.6, fetch ตัวโปรเจ็คจาก SVN แล้วก็เรียก "grails run-app" ก็จะพอลองเล่นได้ครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-7207150885592983565?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/7207150885592983565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=7207150885592983565' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/7207150885592983565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/7207150885592983565'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/09/erp-grails.html' title='สร้างระบบ ERP ด้วย Grails'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-734831955773871130</id><published>2007-08-31T13:38:00.000-07:00</published><updated>2007-08-31T13:48:27.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='0.6'/><title type='text'>Grails 0.6 ออกอย่างเป็นทางการแล้ว</title><content type='html'>Grails 0.6 ออกแล้วครับวันนี้ เวอร์ชั่นนี้จะเป็นตัว 0.x ตัวสุดท้ายก่อนเข้าสู่ 1.0 อย่างเต็มตัวก่อนงาน Grails Exchanges กลางเดือนตุลาคม ซึ่งหมายความว่าไม่เกินเดือนครึ่งเราจะได้ยลโฉม Grails 1.0 กันครับ&lt;br /&gt;&lt;br /&gt;ใน 0.6 มีหลายจุดที่เพิ่มเข้ามา จุดสำคัญจุดหนึ่งคือการรวม Spring Web Flow เข้าไว้ใน Grails โดยตัว Grails สนับสนุนภาษา DSL สำหรับประกาศ flow ครับ&lt;br /&gt;นอกจากนั้น เรายังสามารถกำหนด scope ของ Grails Service classes ให้ใช้กับ flow ได้อีกด้วย&lt;br /&gt;&lt;br /&gt;อีกจุดหนึ่งที่น่าสนใจ ซึ่งได้เปรย ๆ ไปแล้วก่อนหน้านี้ก็คือ Grails 0.6 ปรับปรุงการสนับสนุน REST และ XML web services โดยเพิ่มการสนับสนุน REST เข้ามาใน URL mapping และรวม render x as XML จาก ปลั๊กอิน Converters&lt;br /&gt;&lt;br /&gt;นอกจากนี้หน้าตา UI ของ Grails scaffolding ก็ถูกปรับปรุงและดูดีขึ้นมากเลยละครับ&lt;br /&gt;&lt;br /&gt;&lt;img src="http://docs.codehaus.org/download/attachments/9241494/Picture2-2.png"&gt;&lt;br /&gt;&lt;br /&gt;สำหรับรายละเอียดปลีกย่อยสำหรับ 0.6 สามารถดูเพิ่มเติมได้จาก &lt;a href="http://docs.codehaus.org/display/GRAILS/0.6+Release+Notes"&gt;release note&lt;/a&gt; ครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-734831955773871130?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/734831955773871130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=734831955773871130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/734831955773871130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/734831955773871130'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/08/grails-06.html' title='Grails 0.6 ออกอย่างเป็นทางการแล้ว'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-4918708386383293683</id><published>2007-08-06T04:45:00.000-07:00</published><updated>2007-08-06T04:55:37.842-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='controllers'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='0.6'/><category scheme='http://www.blogger.com/atom/ns#' term='views'/><title type='text'>converters จะถูกรวมไว้ใน Grails 0.6</title><content type='html'>ปลั๊กอิน &lt;a href="http://docs.codehaus.org/display/GRAILS/Converters+Plugin"&gt;Converters&lt;/a&gt; ของ Siegfried Puchbauer จะรวมเข้าไว้ใน core ของ Grails 0.6&lt;br /&gt;ปลั๊กอินตัวนี้ทำให้สามารถแปลงวัตถุเป็น XMLหรือJSON และจาก XMLหรือJSON เป็นวัตถุได้โดยใช้คำสั่ง&lt;br /&gt;&lt;br /&gt;render object as XML&lt;br /&gt;render object as JSON&lt;br /&gt;&lt;br /&gt;ซึ่งจะทำให้สามารถสร้างระบบติดต่อผู้ใช้ชนิด AJAX ที่เป็น CRUD ได้สะดวกมากขึ้น&lt;br /&gt;Siegfried เคยโพสต์ตัวอย่างที่เป็นแอพพลิเคชั่นแบบ AJAX ที่ใช้ปลั๊กอิน converters และสร้างด้วย &lt;a href="http://extjs.com"&gt;Ext JS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ส่วนตัวผมชอบปลั๊กอินตัวนี้เพราะผมใช้ &lt;a href="http://openlaszlo.org"&gt;OpenLaszlo&lt;/a&gt; ทำแอพพลิเคชั่นครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-4918708386383293683?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/4918708386383293683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=4918708386383293683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/4918708386383293683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/4918708386383293683'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/08/converters-grails-06.html' title='converters จะถูกรวมไว้ใน Grails 0.6'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-761038559966867191</id><published>2007-08-06T04:35:00.001-07:00</published><updated>2007-08-06T04:54:56.557-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Analysis'/><title type='text'>บทวิเคราะห์ Productivity ของ Grails โดย ALTERthought</title><content type='html'>บริษัทที่ปรึกษาซอฟต์แวร์ชื่อ ALTERthought โพสต์บทวิเคราะห์เกี่ยวกับ Grails ที่ทำให้พวกเขาสร้างซอฟต์แวร์ได้เร็วกว่า Rails &lt;a href="http://alterlabs.com/technologies/java/grails-vs-rails-the-thrilla-in-manilla-a-study-on-grails-productivity/"&gt;ไว้ที่นี่&lt;/a&gt; &lt;br /&gt;กรีม รอชเชอร์ เสริมไว้ใน&lt;a href="http://graemerocher.blogspot.com/2007/08/grails-more-productive-than-rails.html"&gt;บล้อก&lt;/a&gt;ของเขาว่า หากต้องพัฒนาซอฟต์แวร์ในสภาพแวดล้อมที่เกี่ยวข้องกับจาวา แล้วตัวเลือกคงเป็นอื่นไปไม่ได้นอกจาก Grails แม้ว่าจะมี JRuby ที่สามารถรัน Rails ได้บนแพล็ตฟอร์มจาวาก็ตามที &lt;br /&gt;&lt;br /&gt;ที่มา บล้อกของ ALTERthought&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-761038559966867191?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/761038559966867191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=761038559966867191' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/761038559966867191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/761038559966867191'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/08/alterthought-grails-rails-grails-jruby.html' title='บทวิเคราะห์ Productivity ของ Grails โดย ALTERthought'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-1879618863331723139</id><published>2007-07-24T07:12:00.000-07:00</published><updated>2007-07-24T08:30:33.494-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='0.6'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>Grails towards 0.6 and Groovy 1.1 for beta3</title><content type='html'>ห่างจากการบล้อกไปนาน เนื่องจากกลับไปเมืองไทย พอกลับมาแมนเชสเตอร์ก็มีธุระเรื่องย้ายบ้านเพราะที่เดิมหมดสัญญาพอดี เลยกว่าจะได้มีเวลามาบล้อกก็ปาเข้าไป 2 เดือน&lt;br /&gt;&lt;br /&gt;ตอนนี้ Grails กำลังจะเข้าสู่รุ่น 0.6 ครับ และ Groovy 1.1 ก็กำลังจะเป็น beta-3 ครับ ใน beta-2 ของ Groovy มีการสนับสนุน generic types และอีกจุดก็คือเราใช้ groovyc ในการคอมไพล์ได้ทั้ง .groovy และ .java แล้วครับ นั่นคือจะไม่มี ปัญหาเรื่อง dependency ระหว่าง java class อ้าง groovy class อ้าง java class อีกต่อไป&lt;br /&gt;&lt;br /&gt;Grails ใน SVN ก็สนับสนุน Spring WebFlow แล้วบางส่วน มีึคนเอาไปใช้ทำ web แล้วด้วยครับ ผมเป็นพวกไม่ค่อยได้ใช้ WebFlow เลยไม่ตื่นเต้นเท่าไหร่ &lt;br /&gt;&lt;br /&gt;จุดที่ผมแอบดีใจก็คือ Groovy 1.1 หลัง beta-2 มี &lt;a href="http://jira.codehaus.org/browse/GROOVY-1850"&gt;patch&lt;/a&gt; ที่ผมส่งไปเพื่อทำให้ MetaClass Creation Handler สนับสนุน Groovy AOP ที่ผมกำลังพัฒนาอยู่ ตัว Groovy AOP เองก็เริ่มได้ที่แล้วครับ ใครสนใจเอา &lt;a href="http://svn.codehaus.org/grails-plugins/grails-aop/trunk/MAIN/dist/groovy-aop-0.2.jar"&gt;.jar&lt;/a&gt; มาลองได้จาก &lt;a href="http://svn.codehaus.org/grails-plugins/grails-aop/trunk/MAIN/"&gt;SVN&lt;/a&gt; ครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-1879618863331723139?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/1879618863331723139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=1879618863331723139' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1879618863331723139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1879618863331723139'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/07/grails-towards-06-and-groovy-11-for.html' title='Grails towards 0.6 and Groovy 1.1 for beta3'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-8564715281987696027</id><published>2007-05-14T23:18:00.000-07:00</published><updated>2007-05-14T23:29:24.761-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaOne'/><title type='text'>ความสำเร็จของ Groovy ที่ JavaOne</title><content type='html'>กิลโยม ลาฟอร์จ และ เดิร์ก โึคนิก พูดที่งาน JavaOne เกี่ยวกับ Groovy มีคนเข้าฟังเกิน 600 คนจนทะลักห้อง และหนังสือ Groovy in Action ที่ทั้งคู่เป็นผู้แต่ง (มีผู้แต่งร่วมหลายคน) ขายดีติดอันดับ 1 ใน 10 ของรายการหนังสือที่จำหน่ายในงาน&lt;br /&gt;&lt;br /&gt;ที่มา &lt;a href="http://www.nabble.com/JavaOne:-already-a-success-for-Groovy---Grails-t3714521.html"&gt;groovy-user&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-8564715281987696027?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/8564715281987696027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=8564715281987696027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/8564715281987696027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/8564715281987696027'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/05/groovy-javaone.html' title='ความสำเร็จของ Groovy ที่ JavaOne'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-5118041744788837037</id><published>2007-05-07T13:39:00.000-07:00</published><updated>2007-05-14T23:29:01.825-07:00</updated><title type='text'>กรีม รอชเชอร์ ไปพูดที่เดนเว่อร์</title><content type='html'>กรีม รอชเชอร์ ไปพูดที่งาน No Fluff Just Stuff show ที่เดนเว่อร์ก่อนไปต่อที่งาน JavaOne พรุ่งนี้ ในงานดังกล่าวมีการนำเสนอ JBoss Seam และ JRuby จากคนอื่นด้วย และแน่นอนเรื่องที่กรีมพูดต้องเกี่ยวกับ Grails รวมทั้งการใช้งานร่วมกับ Spring/Hibernate, GORM และ plug-ins&lt;br /&gt;&lt;br /&gt;จุดที่น่าสนใจคือ เมื่อมีการถามผู้ฟังทั้ง 250 คนว่าสนใจที่จะใช้เทคโนโลยีอะไร&lt;br /&gt;ประมาณ 10 คนยกมือว่าจะใช้ JRuby&lt;br /&gt;และ 15 คนยกมือว่าจะใช้ Seam&lt;br /&gt;และนับไม่ถ้วนยกมือเมื่อถามว่าใครบ้างจะใช้ Grails&lt;br /&gt;&lt;br /&gt;ที่มา &lt;a href="http://graemerocher.blogspot.com/2007/05/grails-us-tour-arrived-to-san-francisco.html"&gt;บล้อกของกรีม&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-5118041744788837037?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/5118041744788837037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=5118041744788837037' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/5118041744788837037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/5118041744788837037'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/05/blog-post.html' title='กรีม รอชเชอร์ ไปพูดที่เดนเว่อร์'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-7033905854561679446</id><published>2007-05-07T13:25:00.000-07:00</published><updated>2007-05-07T13:26:52.352-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='0.5'/><title type='text'>Grails 0.5 ออกแล้วครับ</title><content type='html'>Grails 0.5 ออกแล้วครับ&lt;br /&gt;&lt;br /&gt;ข่าวช้าไปหน่อย มัวแต่เตรียม plugin อยู่&lt;br /&gt;โหลดได้จากหน้า download ของ Grails ครับ&lt;br /&gt;้&lt;a href="http://grails.org/Downloads"&gt;http://grails.org/Downloads&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-7033905854561679446?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/7033905854561679446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=7033905854561679446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/7033905854561679446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/7033905854561679446'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/05/grails-05.html' title='Grails 0.5 ออกแล้วครับ'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-6536050098579132155</id><published>2007-04-24T09:57:00.001-07:00</published><updated>2007-04-24T10:03:18.687-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='0.5'/><title type='text'>Grails ออกรุ่น 0.5 release candidate แล้ว</title><content type='html'>ตามแผนการออกรุ่น 0.5 ให้ได้ภายในเดือนนี้ (เมษา) ตอนนี้ Grails เข้าสู่ช่วงหยุดเพิ่มฟีเจอร์และออกรุ่น 0.5 RC สำหรับทดสอบแล้วครับ สำหรับ Grails 0.5 นี้จะเป็นรุ่นที่ใช้แสดงในงาน JavaOne'07 สำหรับใครที่มีโอกาสได้ไป ลองดูโปรแกรมของงานจาก &lt;a href="http://java.sun.com/javaone/sf/javauniversity.jsp#A4"&gt;ที่นี่ครับ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;สำหรับรุ่นนี้เก็บบั๊กไปเกือบ 200 ตัว และสนับสนุนการ auto-reload ได้ค่อนข้างสมบูรณ์ครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-6536050098579132155?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/6536050098579132155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=6536050098579132155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6536050098579132155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/6536050098579132155'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/04/grails-05-release-candidate.html' title='Grails ออกรุ่น 0.5 release candidate แล้ว'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-1577191494046359792</id><published>2007-04-14T09:50:00.000-07:00</published><updated>2007-04-20T11:01:39.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scaffolding'/><category scheme='http://www.blogger.com/atom/ns#' term='views'/><title type='text'>เดโมของ Scaffolding แบบใหม่</title><content type='html'>จาก&lt;a href="http://thaigrails.blogspot.com/2007/04/scaffolding-ext-js.html"&gt;โพสต์เก่า&lt;/a&gt; Siegfried บอกว่าจะ up โค้ด scaffolding แบบใหม่ขึ้น svn นั้น วันนี้เขามี demo ของ scaffolding มาโชว์แล้ว&lt;a href="http://dev.puchbauer.com/extdemo/extBook"&gt;ที่นี่&lt;/a&gt;ครับ บอกได้คำเดียวว่าประทับใจมาก !&lt;br /&gt;&lt;br /&gt;ที่มา &lt;a href="http://www.nabble.com/Re%3A-Updateable-list-screens-p9993025.html"&gt;graild-dev&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-1577191494046359792?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/1577191494046359792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=1577191494046359792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1577191494046359792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/1577191494046359792'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/04/scaffolding.html' title='เดโมของ Scaffolding แบบใหม่'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-3641287830330518231</id><published>2007-04-13T02:36:00.000-07:00</published><updated>2007-04-13T02:41:03.904-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='controllers'/><title type='text'>มีการสนับสนุน Command Object ใน svn head แล้ว</title><content type='html'>ไม่กี่วันที่ผ่านมา Jeff Brown ส่งโค้ดที่สนับสนุนการใช้ command object เพื่อเป็น argument ของ action ของ controller เข้า svn head แล้ว&lt;br /&gt;วิธีการสร้างและใช้ command object คราว ๆ เป็นแบบนี้ครับ&lt;br /&gt;&lt;br /&gt;สร้างคลาสของ command object ใน src/groovy โดยใช้รูปแบบของ Groovy คลาส ธรรมดา ในกรณีนี้คือไม่ได้ใช้ระบบ convention ตัว command object สามารถมี constraint เพื่อใช้ validate และ ตรวจสอบ error ได้ผ่านทาง property "errors" และ "hasErrors()" ในการรับค่าจาก web request นั้น Grails จะส่งค่าจาก request parameters (params) เข้าสู่ property ของ command object โดยดูจากชื่อ parameter&lt;br /&gt;&lt;br /&gt;ตัวอย่าง&lt;br /&gt;&lt;pre&gt;class &lt;b&gt;MyCommandObject&lt;/b&gt; {&lt;br /&gt;  String lastName&lt;br /&gt;  String firstName&lt;br /&gt;  static constraints = {&lt;br /&gt;    firstName(maxSize:10)&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class MyController {&lt;br /&gt;  def someAction = { &lt;b&gt;MyCommandObject&lt;/b&gt; mco -&gt;&lt;br /&gt;    if(mco.hasErrors()) {&lt;br /&gt;      // do some stuff... &lt;br /&gt;    } else {&lt;br /&gt;      // do some other stuff&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;การเพิ่มการสนับสนุน command object pattern จะทำให้การรับข้อมูลจาก form ทำได้งานขึ้นมากเลยทีเดียวครับ&lt;br /&gt;&lt;br /&gt;ที่มา &lt;a href="http://www.nabble.com/Command-Object-Support-Is-Here-t3556823.html"&gt;grails-dev&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-3641287830330518231?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/3641287830330518231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=3641287830330518231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/3641287830330518231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/3641287830330518231'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/04/command-object-svn-head.html' title='มีการสนับสนุน Command Object ใน svn head แล้ว'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-3190019424962371003</id><published>2007-04-12T20:00:00.000-07:00</published><updated>2007-04-12T20:11:13.319-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scaffolding'/><category scheme='http://www.blogger.com/atom/ns#' term='views'/><title type='text'>หน้าตา Scaffolding แบบใหม่ด้วย Ext JS</title><content type='html'>Siegfried จะโพสแม่แบบ scaffold แบบใหม่ที่พัฒนาบน &lt;a href="extjs.com"&gt;Ext JS&lt;/a&gt; (ชื่อเดิม YUI-EXT) ในช่วงสุดสัปดาห์นี้ โค้ดชุดนี้อาจจะเข้าอยู่ใน svn ของโปรเจ็ค &lt;a href="http://svn.grails-plugins.codehaus.org/"&gt;grails-plugins&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;เท่าที่ดูจากเวบไซต์ของ Ext JS ตัวอย่างหน้าจอหลาย ๆ แบบค่อนข้างน่าประทับใจและโค้ดจาวาสคริปต์ตามรูปแบบการโปรแกรมของ Ext JS ค่อนข้างจะแม็พมาจากโดเมนคลาสของ Grails ได้แบบ 1 ต่อ 1&lt;br /&gt;&lt;br /&gt;ที่มา &lt;a href="http://www.nabble.com/Updateable-list-screens-tf2770648.html"&gt;grails-user&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-3190019424962371003?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/3190019424962371003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=3190019424962371003' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/3190019424962371003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/3190019424962371003'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/04/scaffolding-ext-js.html' title='หน้าตา Scaffolding แบบใหม่ด้วย Ext JS'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-4058943319379729116</id><published>2007-04-12T19:25:00.000-07:00</published><updated>2007-04-12T19:45:59.444-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dynamic methods'/><category scheme='http://www.blogger.com/atom/ns#' term='domain class'/><title type='text'>เพิ่มเมธอดสำหรับจัดการ relationship ใน 0.5</title><content type='html'>Grails 0.5 เพิ่มเมธอดพลวัตรสำหรับจัดการ relationship แบบใหม่เข้ามาคือ addTo* และ removeFrom* ที่น่าสนใจก็คือ 2 เมธอดนี้จะจัดการ relationship แบบ 2 ทางให้ด้วย ตัวอย่างเช่น&lt;br /&gt;&lt;pre&gt;class Person {&lt;br /&gt;       String name&lt;br /&gt;       static hasMany = [addresses:Address]&lt;br /&gt;}&lt;br /&gt;class Address {&lt;br /&gt;       String number&lt;br /&gt;       Person person&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;หากเราเขียน &lt;br /&gt;&lt;pre&gt;Address a = p.addTo&lt;b&gt;Addresses&lt;/b&gt;(new Address(number:'1'))&lt;br /&gt;// or p.addToAddresses(number:'1')&lt;br /&gt;assert a.person == p // true&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;วัตถุ a จะมี person เป็นวัตถุ p เนื่องจาก 2 class นี้มี relationship แบบ 2 ทางต่อกันอยู่&lt;br /&gt;&lt;br /&gt;ที่มา &lt;a href="http://www.nabble.com/New-Relationship-Management-Methods-in-SVN-tf3564831.html"&gt; grails-dev&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-4058943319379729116?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/4058943319379729116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=4058943319379729116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/4058943319379729116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/4058943319379729116'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/04/relationship-05.html' title='เพิ่มเมธอดสำหรับจัดการ relationship ใน 0.5'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8458409978494995039.post-7987597593076972434</id><published>2007-02-26T06:27:00.000-08:00</published><updated>2007-03-03T08:59:32.184-08:00</updated><title type='text'>Grails Splashcast</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;embed src="http://web.splashcast.net/go/p/GGFV3157DC/s/EOSI2493MA" wmode="transparent" width="400" height="300" type="application/x-shockwave-flash"&gt;&lt;br /&gt;&lt;/embed&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8458409978494995039-7987597593076972434?l=thaigrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thaigrails.blogspot.com/feeds/7987597593076972434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8458409978494995039&amp;postID=7987597593076972434' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/7987597593076972434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8458409978494995039/posts/default/7987597593076972434'/><link rel='alternate' type='text/html' href='http://thaigrails.blogspot.com/2007/02/test-grails-series-with-sound.html' title='Grails Splashcast'/><author><name>chanwit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_7gu9HQYUUjE/SZylbu8k6jI/AAAAAAAAASU/8LrnKrv5Gcs/s1600-R/8521163ddd403e477d514798488c4b6a%3Fs%3D80'/></author><thr:total>2</thr:total></entry></feed>
