การใช้งาน validation เบื้องต้น

Posted November 25, 2008 at Grails66
การ Validation หรือตรวจสอบข้อมูลใน Grails Application นั้นสามารถทำได้ง่าย โดย Grails อนุญาติให้ทำการกำหนดค่า Constraints ต่างๆ ใน Domain Class ได้ ซึ่งการ validate จะเกิดขึ้นเมื่อทำการเรียกใช้ method validate() และ method save() ของ Domain Classes มาดูตัวอย่างกันดีกว่า เพื่อให้เห้นภาพง่ายยิ่งขึ้น จาก Domain ในตัวอย่างการ Authentication เป็นดังนี้ class User { String username String password } ต้องการ validate ข้อมูลดังนี้ 1. username ไม่เป็นค่าว่าง และจะต้องไม่ซ้ำหรือ unique 2. password ไม่เป็นค่าว่าง ดังนั้นสามารถเพิ่ม Constraints ใน Domain class User ได้ดังนี้ class User { String username String [...]

Grails 1.1 beta 1 ออกมาให้เชยชมแล้วจ้าาา

Posted November 28, 2008 at Grails66
หลังจากที่ Grails 1.0.4 ออกมาไม่นาน ตอนนี้ทาง SpringSource และทีมผู้พัฒนา Grails ได้เปิดตัว Grails 1.1 Beta 1ให้ชาว grails ได้เชยชมแล้วที่นี่ ส่วนที่ปรับปรุงมากคือ GORM สามารถ Download ที่นี่ Release Notes Grails Document

Command Object และการแสดง Error

Posted November 29, 2008 at Grails66
มีคำถามเกี่ยวกับการ validate object ที่ไม่ใช่ GORM จากสมาชิกท่านหนึ่งในกลุ่มผู้ใช้เกรลส์ครับ พอดีวันนี้ไปไล่อ่าน feed ย้อนหลังผมเล่นไปเจอว่าจริง ๆ แล้วพอจะมีทางทำให้เกิดการ validate ที่คล้าย ๆ กันโดยใช้ command object จุดที่น่าสนใจคือเราสามารถใช้การประกาศ constraints แบบเดียวกันกับ GORM object ได้ด้วยครับ ในตัวอย่างตามเอกสารอ้างอิง มีประเด็นเพิ่มเติมอีกนิดหน่อยเมื่อเราอยากจะเตรียมการ validate พิเศษเพิ่มเติม โดยมีการแนะนำให้ใช้กับ class กลุ่ม service ครับ

สร้างตัวจัดการไฟล์ง่าย ๆ ด้วยเกรลส์

Posted November 29, 2008 at Grails66
ตัวอย่างนี้ใช้ controller ตัวเดียวกับ view เป็น .gsp อีกไฟล์สร้างตัวจัดการไฟล์อย่างง่ายที่ upload, ดูและลบไฟล์ได้ มีคำอธิบายและตัวอย่าง application ที่พร้อมรันไว้บนหน้าเวบแล้วครับ

แนวทางใช้ GridGain กับเกรลส์

Posted November 29, 2008 at Grails66
ผมเคยรู้มาว่าเจ้าตัว GridGain เป็น computing grid ที่ออกแบบไว้คำนวณ (โดยเฉพาะวิธีการแบบ map-reduce) มากกว่า data grid ที่ออกแบบไว้จัดการทรัพยากรข้อมูลแบบ redundant ก็เลยสงสัยครับเมื่อมีคนสร้าง GridGain plugin ให้เกรลส์ พอมาดูตัวอย่างที่เขาเขียนไว้ในหน้า plugin ก็เลยพอจะเข้าใจว่า ความตั้งใจคือให้เกรลส์แต่ละ node นั้นเป็น computing node ไปด้วยแล้วทำให้เราสร้าง web application ไว้ด้านหน้า เพื่อเป็น user interface ให้กับระบบการคำนวณที่อยู่ด้านหลังได้ง่ายขึ้นนั่นเองครับ ถ้าท่านไหนสนใจ data grid ผมแนะนำอีกตัวคือ Terracotta ครับ

รายละเอียดการปรับปรุง GORM ในเกรลส์ 1.1

Posted November 29, 2008 at Grails66
เท่าที่มอง ๆ ดูผมคิดว่า SpringSource มีนโยบายที่เข้มงวดขึ้นเกี่ยวกับคุณภาพของเกรลส์ ทำให้ลำดับการออกน่าจะมีหลาย Beta มากขึ้นก่อนที่ตัวจริงจะออกมา(เดาว่า)พร้อม ๆ กับหนังสือ edition ใหม่ครับ แล้วก็มาลงรายละเอียดกันหน่อยดีกว่าครับว่า GORM ใน 1.1 มีอะไรน่าสนใจบ้าง ระบบ Event ใน GORMตอนนี้มีจุดยิง event เพิ่มขึ้นอีก 3 ตัวเพื่อความสมบูรณ์ครับ นั่นคือ afterInsert, afterUpdate และ afterDelete GORM เ้ก็บ Collection ของ Basic Types ได้แล้วเราประกาศ static hasMany = [a: String, b: Integer] ใน GORM ได้โดยตรงแล้วครับโดยการ implement ในเอกสารบอกไว้ว่าเป็นการสร้าง join table ให้ collection พวกนั้น ปรับปรุง Data Bindingโดยปกติ เราสามารถเรียกใช้ obj.properties = [...]

SpringOne Demo: สร้าง twitter clone ภายใน 40 นาที

Posted December 03, 2008 at Grails66
เมื่อคืนเห็น เกรม รอชเชอร์ tweet อะไรซักอย่างเกี่ยวกับ twitter โดยใช้เวลา 40 นาทีรอบแรกที่เห็น ก็นึกว่าทำ twitter app ธรรมดาครับ เลยไม่ได้สนใจ พออ่านอีกรอบ เห็นคำว่า JMS ก็ชักสงสัยขึ้นมาเลยทีเดียว สร้าง twitter app ไม่น่าจะต้องใช้ JMSคราวนี้เห็นคำว่า “a twitter” ก็เอาแล้วครับ มีอะไรแปลก ๆ แน่ ๆเลย tweet ถามดู เจอตอบมาแบบนี้ครับ graemerocher: @chanwit Yes my demo was to build a twitter like app in 40 minutes with Grails plugins เห็นคำตอบก็ถึงกับสะดุ้งครับ วันนี้มีคนบล่อกเรื่องนี้แล้วครับ ตกลงว่าเป็นการสร้าง twitter clone โดยใช้เวลาเพียง 40 [...]

จะใช้หรือไม่ใช้เกรลส์ดี

Posted December 03, 2008 at Grails66
นี่คือบล่อกจาก Solomon Duskis ที่พูดถึงความสงสัยส่วนตัวของเขาว่าจะเอายังไงดี พูดง่าย ๆ คือเริ่มลังเลครับ เหตุเกิดจากการไป SpringOne มานั่นเอง Solomon เป็นกลุ่มคนที่อยู่กับ Spring มาโดยสมบูรณ์แบบ และไม่เคยคิดว่าการใช้เกรลส์จะมีประโยชน์กับเขา แต่เขาบอกไว้ว่าการมาของเกรลส์ 1.1 สามารถใช้ GSP, GORM และ SpringBean แบบ stand-alone นอกเกรลส์แอพพลิเคชั่นได้อาจจะทำให้เขาต้องหาวิธีเรียนรู้เกรลส์แล้วละครับ จุดนี้น่าสนใจมาก เพราะดูเหมือน SpringSource จะทำสำเร็จในการเอาหลาย ๆ ส่วนที่สำคัญ ๆ ของเกรลส์มาเป็นตัวชูรสของ Spring ครับ และแน่นอนว่า productivity จะเพิ่มแน่ครับ (เกรลส์เป็นโอกาสดีเพียงไม่กี่อันจริง ๆ ที่ผมเจอในภาวะเศรษฐกิจย่ำแย่แบบนี้ครับ) และเหมือนกับหลายคน Solomon ก็พูดถึงความประทับใจของ twitter-clone ภายใน 40 นาที เช่นกัน (อ่่าน entry เก่า)talk of the town อย่างกับพระจันทร์ยิ้มเลยครับ

Keynote ใน SpringOne และคำถามตัวปัญหาของ Rod Johnson

Posted December 04, 2008 at Grails66
ดุเดือดเลือดพล่านกันเลยทีเดียวกับคำถามว่า “Can Ruby on Rails do that?” ของ Rod Johnson จริง ๆ ต้องออกตัวไว้ก่อนเลยครับว่าไม่ได้มีเจตนาสร้างความร้าวฉานใน PAW66 แต่อย่างใด เราคุยกันด้วยฟีเจอร์และคำตอบคือ JRuby on Rails ก็ “ทำได้” มาดูกันครับว่าทำอะไร จากงาน SpringOne เช่นเดิม รอบนี้ Andy Coyler พูด keynote เมื่อวาน (วันที่ 3 ธันวาคม) เป็นการสาธิตการสร้างเวบแอพพลิเคชั่นขนาดเล็กธรรมดา ๆ แต่จุดที่น่าสนใจคือการเอา Spring Integration แอพพลิเคชั่นที่มีอยู่แล้วเข้ามาใส่ไว้ในเกรลส์แอพพลิเคชั่นที่สร้างใหม่ครับ โดยวิธีกาีรก็แสนง่าย ตามขั้นตอนต่อไปนี้ครับ คัดลอก jars ของ Spring Integration ลงไว้ใน grails-app/lib คัดลอก configuration ไฟล์ของ Spring ไว้ใน grails-app/resources/spring เพิ่ม property ที่ต้องการใน Grails service เพื่อให้มีการ [...]

มาสร้าง Grails Custom Validation กันเถอะ

Posted December 07, 2008 at Grails66
มาสร้าง Grails Custom Validation กันเถอะ ที่มา :: http://grails.org/doc/1.1.x/ref/Constraints/validator.html หลังจากที่ได้เรียนรู้การใช้ build-in constraints สำหรับการ validate properties ต่างๆ ใน domain classes ที่ การใช้งาน validation เบื้องต้น แต่บ่อยครั้งที่สิ่งที่เตรียมไว้ให้นั้นอาจจะไม่เพียงพอต่อความต้องการ ดังนั้น ผู้สร้าง Grails จึงอนุญาติให้ผู้พัฒนาสามารถสร้าง Custom Validation ขึ้นมาใช้เองได้ การใช้งานจะผ่าน constraint ชื่อ validator ซึ่งจะสนับสนุน closure หรือ block constraint validator สามารถมีหรือไม่มี parameter ก็ได้ดังนี้ 1. ไม่มี parameter คือ value ของ property ที่ส่งเข้ามา 2. มี 1 parameter คือ value [...]

Tip : การเข้าถึง gsp file โดยไม่ต้องผ่าน Controller

Posted December 09, 2008 at Grails66
พอดีไปอ่าน blog ที่นี่ อธิบายถึงการเข้าถึง gsp file โดยไม่ต้องผ่าน Controller เป็นที่รู้กันว่า Controller class ใน Grails application นั้นมีหน้าที่รับ request, ประมวลผลตาม request และทำการ render view ดังนั้นการเข้าถึงหรือ access view หรือ gsp file นั้นจะผ่าน controller class เสมอ แต่โดยปกติเราสามารถเข้าถึง gsp file ได้โดยตรงดังนี้ [ ใน /grails-app/views จะมี folder without_controller ด้วย ] http://localhost:8080/test_app/without_controller/hello.gsp แต่หลายๆ คนเห็น url ลงท้ายด้วย gsp คงไม่ชอบใจเท่าไร ดังนั้นถ้าเปลี่ยนเป็น http://localhost:8080/test_app/without_controller/hello จะชอบใจขึ้นบ้างไหม ??? ก่อนจะเข้าถึงในลักษณะข้างต้นได้ จำเป็นจะต้องทำการปรับแต่ง file [...]

[issue] สำหรับใครที่ลง debian package 1.0.4 แล้วเจอเลข version เป็น [null]

Posted December 24, 2008 at Grails66
ใครที่่ใช้ linux ที่เป็น debian-based แล้วต้องการจะทดลอง Grails 1.0.4 โดยการไป download ตัว deb package จาก Grails.org แล้วติดตั้งบนเครื่องของท่าน อาจจะเจอปัญหาว่าไม่สามารถสร้าง controller ได้เพราะ version conflict ระหว่าง null กับ null ให้ลองเช็คดูว่า ไฟล์ deb package ใช่ไฟล์ grails_1.0.4-1_all.deb หรือไม่ ถ้าใช่แสดงว่าตัว debian package ที่ไปโหลดมาไม่มีไฟล์ build.properties ให้เรา download ตัว debian package ตัวใหม่กว่า โดยลองดูจากรายการ download จะมี grails ล่าสุดอยู่ ติดตั้งไฟล์ใหม่แล้วลองสร้าง controller ดู จะพบว่าใช้ได้แล้วนะครับ เผื่อว่าใครเจอปัญหาเดียวกันจะได้ไม่ต้องติดอยู่นานครับ

Grails 1.1 beta 2 ออกแล้วจ้า

Posted December 26, 2008 at Grails66
ทางทีมพัฒนา Grails และ SpringSource ได้ปล่อย Grails 1.1 beta 2 ออกมาติดๆ สามารถ Download ได้ที่นี่ ส่วน Features ใหม่ๆ สามารถอ่านได้จากที่นี่ ผมทำการสรุป Features ใหม่ๆ บางส่วนมีดังนี้ครับ 1. GORM มี features เพิ่มเติมดังนี้ - เพิ่ม GORM Event เข้ามาคือ afterInsert, afterUpdate และ afterDelete - ในการ join table สามารถใช้ String, Integer [ ชนิดข้อมูลทั่วไป ] เช่น class Person { static hasMany = [...]

Groovier Spring

Posted January 06, 2009 at Spring66
หลังปีใหม่ผมไม่มีไอเดียอะไรที่จะเขียนเกี่ยวกับ Spring เลย เพราะส่วนตัวไม่ได้ใช้โดยตรง ใช้ผ่านเกรลส์และ Groovy ตลอด ข่าวที่ใกล้เคียงที่สุดก็เห็นจะเป็นการซื้อ G2One (Groovy และเกรลส์) ของ SpringSource เท่านั้น แต่พอเปิดปีใหม่มาเห็นใน feed เล่นเอาตกใจ เพราะมีบทความใน IBM developerWorks ทีเดียว 2 ตอนรวดจั่วหัวว่า Groovier Spring ไม่มีสงสัย ผมเปิดดูทันที ทั้งสองบทความและซีรี่ย์ต่อกัน พูดเกี่ยวกับการใช้ Groovy (รวมทั้งบางอย่างของเกรลส์) เพื่อให้สามารถใช้ Spring ได้ง่ายขึ้น สำหรับตอนแรกนั้นพูดเรื่องพื้นฐานการรวมระบบ และตอนที่สองพูดเรื่องการเปลี่ยนพฤติกรรมของระบบขณะรัน แล้วจะหาเวลามาขยายความต่อไปครับ

หนังสือ DGG พิมพ์ครั้งที่ 2 ออกเป็น eBook แล้ว

Posted January 12, 2009 at Grails66
จากกลุ่มข่าวผู้ใช้เกรลส์ ครับ เกรม รอชเชอร์ หัวหน้าโครงการพัฒนาเกรลส์ ซึ่งตอนนี้อยู่กับ SpringSource แล้วนั้น ได้แจ้งไว้ในกลุ่มข่าวผู้ใช้เกรลส์ว่าตอนนี้หนังสือ the Definitive Guide to Grails 2nd Edition นั้นออกจำหน่ายเป็น eBook แล้วครับ http://www.apress.com/book/view/1590599950 และที่สำคัญ ซอร์สโค้ดประกอบหนังสือสามารถเข้าถึงได้ฟรีจาก SVN ของเกรลส์ http://svn.codehaus.org/grails/trunk/grails-samples/dgg/ แต่ก็แจ้งไว้นิดครับว่าถ้าจะลองโค้ดที่ว่า ต้องใช้ Grails 1.1 beta 2 ขึ้นไป อ่านวิธีลองรันโค้ดได้จาก README.txt ครับ

เทคนิคการ Migrate จาก Rails มาเป็นเกรลส์

Posted January 20, 2009 at Grails66
เป็นโพสต์ที่น่าสนใจของ David Turanski ครับ โดยเขาพูดถึงเทคนิคการย้ายแอพพลิเคชั่นที่พัฒนาด้วย Rails มาเป็นเกรลส์ โดยจากที่ผมสังเกตคือการจัด โดเมนคลาสเสียใหม่ด้วยการใช้ความสามารถของ mapping DSL การย้ายในความหมายนี้คือมี database schema ที่สร้างไว้แล้วด้วย Rails ครับ และ David ใช้การ mapping ใน GORM เพื่อจัดการให้ database schema นั้นสามารถใช้ในเกรลส์ต่อได้ ผมยกตัวอย่างโดเมนคลาสคลาสหนึ่งมาแสดงดังนี้ครับ class Post { String title String name String content Date lastUpdated Date dateCreated static constraints = { title(minSize:5, blank:false) name(blank:false) } static hasMany = [ comments : Comment] static [...]

สำหรับใครที่ลง debian package 1.0.4 แล้วเจอเลข version เป็น [null]

Posted December 24, 2008 at Grails66
ใครที่่ใช้ linux ที่เป็น debian-based แล้วต้องการจะทดลอง Grails 1.0.4 โดยการไป download ตัว deb package จาก Grails.org แล้วติดตั้งบนเครื่องของท่าน อาจจะเจอปัญหาว่าไม่สามารถสร้าง controller ได้เพราะ version conflict ระหว่าง null กับ null ให้ลองเช็คดูว่า ไฟล์ deb package ใช่ไฟล์ grails_1.0.4-1_all.deb หรือไม่ ถ้าใช่แสดงว่าตัว debian package ที่ไปโหลดมาไม่มีไฟล์ build.properties ให้เรา download ตัว debian package ตัวใหม่กว่า โดยลองดูจากรายการ download จะมี grails ล่าสุดอยู่ ติดตั้งไฟล์ใหม่แล้วลองสร้าง controller ดู จะพบว่าใช้ได้แล้วนะครับ เผื่อว่าใครเจอปัญหาเดียวกันจะได้ไม่ต้องติดอยู่นานครับ

โครงการ Grails ออก 1.1-BETA3

Posted January 29, 2009 at Grails66
จาก เมล์ลิ่งลิสต์ สด ๆ ร้อน ๆ ครับเกรม รอชเชอร์ประกาศการออกเกรลส์ 1.1-BETA3 แล้วครับ ที่ผมสนใจคือ การสนับสนุน Ant และ Ivy standalone GORM (กอร์มเดี่ยว) นอกจากนี้ก็มี การสนับสนุน Spring namespace การทำ server-side forwards และ includes เช่นเคยครับ ดาวน์โหลดได้จาก http://grails.org/Download

เกรลส์บน Github

Posted January 30, 2009 at Grails66
จริง ๆ แล้วผม fork เกรลส์จาก svn repository ไปไว้บน github มาได้ระยะหนึ่งแล้วแต่ว่าไม่ได้จัดการแยก branch ของโค้ดให้เรียบร้อย เพราะคิดไว้เพียงว่าจะเอาไว้ใช้เอง หลังจากหัดใช้ git มากขึ้นก็พอเข้าใจในระดับที่จะจัดการหลาย ๆ branch ได้ ประกอบกับ Russel ขอ groovy repository ไปทำแล้วได้รับการตอบรับค่อนข้างดี ผมเลยคิดว่าถ้ามี branch ของเกรลส์บน github ก็อาจจะช่วยให้ทำงานได้ง่ายขึ้นในหลาย ๆ จุด ก็เลยนั่ง fetch code จาก SVN ของเกรลส์ ใช้เวลาประมาณ 1 สัปดาห์ หลังจากได้รับอนุญาตให้ใช้เนื้อที่เกินโควต้า 100MB จาก @github แล้วก็ทำการ push ไปไว้เรียบร้อยแล้ว ตอนนี้ trunk จะใน branch ของ git ชื่อ master และ [...]

video สร้าง Twitter ใน 40 นาที

Posted February 04, 2009 at Grails66
เห็นใน twitter ครับมีคนโพสต์ link ของ google video ที่ เกรม รอชเชอร์ แสดงการสร้าง twitter ภายใน 40 นาทีเมื่อปลายเดือนก่อนที่งานของ Skill Matter ที่ลอนดอนครับ ชม video ได้ที่นี่ครับ ที่มา http://pop-go.com/sl ผ่าน @gaz4695