Sunday, June 1, 2008

การทดสอบครั้งที่สอง และ vvTalk

วันเสาร์เมื่อวานนี้ เราได้มีการทดสอบการสัมมนาเกรลส์ออนไลน์กันไปอีกครั้ง โดยคราวนี้ใช้ซอฟต์แวร์ที่พัฒนาขึ้นเองครับ
เมือวานมีผู้เข้าร่วมทดสอบประมาณ 7 ท่าน รวมผมด้วยเป็น 8
การทดสอบค่อนข้างไปได้ด้วยดี มีการหลุด 2-3 ครั้งที่ฝั่งผม แต่เพราะซอฟต์แวร์ได้รับการออกแบบให้ผู้พูดสามารถเข้าไปพูดต่อได้แทบจะทันที เลยทำให้สามารถจัดสัมมนาได้จนจบครับ

วันนี้ผมก็พยายามหาชื่อที่น่าสนใจมาตั้งให้ซอฟต์แวร์ตัวนี้ และได้เป็น vvTalk ครับ

ในอาทิตย์หน้า vvTalk จะมี opensource repository เป็นของมันเองโดยเริ่มที่รุ่น 0.2 (เมื่อวานใช้ 0.1 กันครับ) ตอนนี้ผมพยายาม refactor บางส่วนที่เขียนด้วย openlaszlo และ fork ajax library มาใช้เอง ตัวระบบด้านหลังของ vvTalk มีตังต่อไปนี้ครับ

- Grails 1.0.3-SNAPSHOT (สำหรับพัฒนา backend)
- OpenLaszlo 4.0.12 (สำหรับพัฒนา frontend)
- Red5 0.7 (สำหรับ media server)
- swftools 0.8.1 (สำหรับแปลง PDF เป็น SWF เพื่อเตรียม slide)
- gyrocat-6.0.16-g103-SNAPSHOT (server สำหรับ deployment)

หมายเหตุ: ตัว gyrocat เป็น container ที่ผมเตรียมขึ้นเองโดยใช้ Apache Tomcat และ jar ที่จำเป็นจากเกรลส์ครับ
script สำหรับสร้างอยู่ในส่วนเก็บไฟล์ของ กลุ่มผู้ใช้เกรลส์ และอีกสักพักจะทำจุดสำหรับดาวน์โหลดไว้ให้ครับ
และเกรลส์ 1.0.3-SNAPSHOT นั้นเป็น custom built ยังไม่มี official ครับ

ยังมีจุดที่ต้องปรับปรุงและปรับปรุงไปแล้วพอสมควรสำหรับ สำหรับในการจัดสัมมนาจริงคราวหน้านั้นเราคงได้ใช้ vvTalk 0.2 กันครับ

Tuesday, May 27, 2008

ทดสอบระบบสัมมนาเกรลส์

ผมติดตั้งระบบเพื่อเตรียมที่จะสัมมนาเกรลส์แบบออนไลน์ที่

http://130.88.197.243:5080/openmeetings/

โดย

พุธ 28 พ.ค. เวลา 21.00 - 22.00 จะพูดคุยเรื่อง Groovy และ

เสาร์ 31 พ.ค. เวลา 21.00 - 22.00 จะพูดคุยเรื่อง Grails กันครับ

ท่านใดสนใจสามารถลงทะเบียนเพื่อเข้าร่วมทดสอบระบบได้ตาม URL ด้านบนครับ

Wednesday, May 21, 2008

Convention over Configuration: ข้อตกลงก่อนการปรับแต่ง

มาแก้คำผิดเล็กน้อย ผมแปล Convention over Configuration ไว้ว่าข้อตกลงแทนการปรับแต่ง แต่ Jason Rudolf อฺธิบายไว้ว่า มัน over ไม่ใช่ instead of คือถ้าใช้ข้อตกลงไม่ได้ก็ยังปรับแต่งกันได้อยู่ดี ฟัง ๆ ดู เออจิงแฮะ

เลยต้องขอยอมรับผิดไว้แต่เพียงผู้เดียว

ต่อไปเมื่ออ้างอิงถึง Convention over Configuration ในภาษาไทยนั้นผมจะใช้ "ข้อตกลงก่อนการปรับแต่ง" นะครับ จนกว่าจะมีใครที่มีวลีที่เหมาะสมกว่านี้ :-)

Monday, May 19, 2008

Grails.org เปิดตัวอีกรอบ ใช้เกรลส์สร้าง

Grails.org เปิดตัวรอบใหม่โดยใช้เกรลส์สร้างทั้งตัว และโค้ดของตัวเวบเองจะกลายเป็น demo ตัวอย่างอยู่ในเกรลส์รุ่นต่อไปครับ

ที่มา: บล่อกของเกรม รอชเชอร์

Sunday, May 18, 2008

กูเกิ้ลซัมเมอร์ออฟโค้ด

ช่วงนี้อาการเกรลส์อาจจะลดลงไปเล็กน้อยเนื่องจากปิดเทอมหน้าร้อนปีนี้ผมเข้าร่วมโปรแกรมกูเกิ้ลซัมเมอร์ออฟโค้ด โดยจะเริ่มวันที่ 26 นี้ หน้าที่ผมตอนนี้ก็คือแฮ็ก Groovy แล้วทำให้มันเร็วขึ้นโดยทำการปรับปรุงระบบรันไทม์ตรงส่วน callsite ท่านใดไปงาน NJUG 5 อาจจะพอจำได้ (ตรง slide 2 หน้าสุดท้าย) ตอนนี้ผมใช้การแตกสาขาโปรเจ็ค groovy เฉพาะส่วน core ออกมา ของ Russel ที่ Launchpad เพื่อสร้างโค้ดสำหรับทดสอบอะไรใหม่ ๆ แล้วจึงค่อย diff ส่งกลับไปให้ groovy-core ตัวหลักทีหลัง

งานกำลังจะเริ่ม ตลอด 3 เดือนคงได้เรียนรู้อะไรเพิ่มขึ้นอีกเยอะครับ

Saturday, April 19, 2008

Spring WebFlow และเกรลส์

มีบทความบน InfoQ เกี่ยวกับ Spring WebFlow 2.0 ที่กำลังจะออก และการร่วมมือกับโครงการเกรลส์ในการกำหนดภาษาเพื่อใช้นิยาม flow ของเวบไซต์

อ่านบทความเต็มได้จาก InfoQ.com ครับ

Thursday, April 10, 2008

สร้าง PDF ด้วยเกรลส์แอพพลิเคชั่น

หลาย ๆ คนอาจจะสนใจที่จะ generate PDF จากเกรลส์

Egon Jensen มี tutorial ที่น่าสนใจซึ่งใช้ JasperGrails plugin ในการสร้างรายงานออกมาเป็น PDF ครับ

SOAP ปลั๊กอินสำหรับเกรลส์จาก WS02

WSO2 ประกาศตัว WSF/Spring รุ่น 1.0 ซึ่งสนับสนุน Web Service ด้วย Apache Axis2 ครับสำหรับ Spring และสำหรับเกรลส์นั้นก็มีปลั๊กอินคือ Axis2 plugin ซึ่งมีการใช้งานในลักษณะเดียวกันกับ XFire plugin ที่ผมพัฒนาไว้ แต่ Axis2 plugin ยังไม่มีความสามารถในการสนับสนุนบางฟีเจอร์ที่สำคัญ ๆ เช่น Generic เป็นตันครับ

ผ่านทาง: aboutGroovy

Tuesday, February 26, 2008

รีวิว Adobe AIR/Ajax (เกือบจะได้ต่อกับ Grails)

ตอนแรกกะไว้ว่าจะทดสอบการใช้งานร่วมกันระหว่าง Adobe AIR/Ajax กับ Grails เนื่องจากตัวเต็มของ AIR เพิ่งออกไปเมื่อวันที่ 25 ที่ผ่านมา แต่พอผมติดตั้ง AIR runtime ขนาด 11 MB แล้วลองเปิดหาแอพพลิเคชั่นตัวอย่างมารันดู ก็ไปเจอ time tracker เล็ก ๆ ตัวนึง เห็นเจ้าของเขาบอกว่าใช้ ExtJS ทำ UI ก็คิดว่านะจะเล็กดีและพอที่จะลองได้

ผมใช้ Firefox browse ไปที่แอพพลิเคชั่นตัวนั้น (.air) แล้ว AIR runtime ก็ทำการติดตั้งลงไปในเครื่อง - แค่ตอนเปิดก็รู้สึกตะหงิด ๆ นิดนึงแล้วครับว่าไม่ค่อยเป็นไปอย่างที่คิด คือ เปิด ติดตั้ง แล้วก็รัน เหมือนการลงแอพพลิเคชั่นปกติ และถ้าไม่ได้ sign digital signature ไว้ มันก็จะมีการฟ้องแบบเดียวกันกับ Java Web Start และ ActiveX (ถ้าเป็น security model ของ Google Gears จะเบากว่านี้เล็กน้อย)

พอเปิดใช้งานตัวโปรแกรม หน้าตาการ render ของ WebKit (HTML renderer ที่ AIR ใช้) ทำให้ตัวโปรแกรมที่เคยดูดีในวิดีโอสาธิต ดูแย่ไปเลย icon ที่มากับ ExtJS มันแตก ๆ ยังไงไม่รู้ การ render font ก็ดูแปลก ๆ ตัวหนังสือไม่เรียบ แถม Ext JS ที่เร็วใน Firefox กลับช้าอืด ๆ ใน WebKit

ผมเลยถอดใจ จะเอามันออกแล้วโปรแกรมตัวนี้ ก็หาที่ uninstall ไม่ได้อีก

ปิดท้ายว่า ถ้าอยากทำ desktop app ด้วย HTML + Ajax รอ Mozilla Prism แล้วใช้ Google Gears เป็นตัวเก็บข้อมูล น่าจะดีกว่า Adobe AIR/Ajax หลายขุม

ไม่ประทับใจ เลยไม่ทันจะได้ลองเอามาต่อกับ back-end ที่เป็น Grails ครับ
(เหลือ AIR/Flex อีกตัว หน้าตาคงออกมาสวยงามกว่า ถ้ามีใครรีวิวแล้วบอกกันหน่อยนะครับ จะตามไปอ่าน)

Monday, February 25, 2008

วิธีการใช้ Grails และ Acegi จาก InfoQ

Fadi Shami เขียนบทความบน InfoQ แนะนำการใช้งาน Grails และ Acegi อย่างเป็นลำดับ โดยในบทความอ้างอิงการใช้ปลั๊กอิน Acegi รุ่น 0.2 ครับ

ที่มา: infoq.com
ผ่านทาง aboutGroovy

Saturday, February 23, 2008

ทดสอบระบบ iPaper : แนะนำเฟรมเวิร์คเกรลส์

Read this doc on Scribd: grails thai

Wednesday, February 20, 2008

เกรลส์และ Flex

Maarten Winkels เขียนเกี่ยวกับการใช้เกรลส์และ Flex โดยการสร้างหน้าจอ master-details ใน Flex และใช้เกรลส์เป็นฝั่ง server โดยตัวอย่างของเขานั้นเน้นการ binding วัตถุฝั่ง Java ใน Flex อีกทั้งยังมีการใช้ JMS เพื่อส่งข้อความไปหาโปรแกรม Flex ตัวอื่น ๆ อีกด้วยเมื่อตัวใดตัวหนึ่งมีการอัพเดตข้อมูลมาที่ฝั่งเกรลส์ น่าสนใจทีเดียวครับ

ที่มา blog.xebia.com
ผ่าน aboutGroovy

Thursday, February 14, 2008

การเติบโตของกลุ่มผู้ใช้เกรลส์ในไทย

จากกลุ่มเมล์ที่ยังเงียบ ๆ อยู่เมื่อหลายเดือนก่อน ตอนนี้ กลุ่มผู้ใช้เกรลส์ในไทย ค่อนข้างคึกคักมากขึ้นครับ มีสมาชิกเป็นทางการแล้ว 34 ท่าน อีกหลายท่านก็เข้ามาอ่านโดยไม่ได้สมัครสมาชิก แต่ก็สังเกตได้ว่ามีคนเข้ามาอ่านในกลุ่มเกือบ 200 ครั้งต่อวัน (มากกว่าบล่อกนี้ของผมเยอะเลย :))

ข้อมูลที่น่าสนใจอีกส่วนหนึ่งก็คือ กลุ่มผู้ใช้เกรลส์นี้ทำให้เกิดกระแสการใช้งานเกรลส์ในไทย วัดจากจำนวนการดาวน์โหลดเกรลส์ในบ้านเรา พูดได้ว่าเป็นอันดับต้น ๆ ของเอเซียเลยครับ
(เป็นรองก็แค่จีน - แหงหล่ะ!) สำหรับประเทศอื่นแถว ๆ บ้านเรา ก็มี ญี่ปุ่น สิงคโปร์ อินเดีย และ มาเลย์เซีย ตามลำดับครับ

ส่วนข้อมูลจำนวนการดาวน์โหลดรวม เท่าที่นับได้เฉพาะจาก mirror ของผม 2 server
(ไม่รวมจาก grails.org เพราะผมไม่รู้)
- distribution .zip มากกว่า 20,000 ครั้ง
- ตัวติดตั้ง 2,300 ครั้ง

Sunday, February 10, 2008

Groovy และภาษาไทย

ผมเคยลองคอมไพล์โปรแกรมภาษา Java ที่ตั้งชื่อคลาสเป็นภาษาไทยไปเมื่อหลายเดือนก่อน และจากนั้นก็ได้ทดลองไปอีก 2-3 ครั้งกับ Groovy แต่ไม่สำเร็จ วันนี้ลองดูอีกรอบหลังจากอ่านเรื่อง easyb

รอบนี้ไปเจอว่าเป็นความสะเพร่าเองที่ไม่อ่านดูให้ดี ๆ ว่าเราสามารถระบุ encoding ให้ groovy และ groovyc ได้จาก command line
$ groovy --encoding UTF-8 Test.groovy

แล้วใน Test.groovy มี class ที่มีชื่อและ method เป็นภาษาไทย ปรากฎว่าทำงานได้ปกติเช่นเดียวกับ Java ครับ

มาถึงตรงนี้กลายเป็นว่ามีทางเลือกเพิ่มขึ้นในการอิมพลีเม้นต์ตัวรัน spec ภาษาไทย ว่าจะใช้ parser ที่ทำไว้แล้วหรือจะทำเป็น DSL ใน Groovy ดี (ตอนนี้เอียงกลับไปหา Groovy DSL) คงอาจจะต้องลองดูความเป็นไปได้อีกพักจึงจะสรุปได้ครับ

การพัฒนาที่ขับเคลื่อนด้วยพฤติกรรม (BDD) ด้วย easyb

easyb พัฒนาโดย Andrew Glover ซึ่งเป็นผู้แต่งร่วมของ Groovy in Action เป็นเฟรมเวิร์คสำหรับการพัฒนาที่ขับเคลื่อนด้วยพฤติกรรม - behaviour driven development หรือ BDD โดยแนวคิดก็คือทำให้ ข้อกำหนด ทำงานได้

easyb ใช้ภาษาเฉพาะทางที่พัฒนาบน Groovy ครับ ในตัวอย่างบนเวบไซต์จะเห็นว่ามีการ generate เรื่องที่เป็นภาษาอังกฤษออกมาจากโค้ดของ easyb ได้ด้วย (คิดว่า rspec ก็คงทำได้แบบเดียวกัน)

ในโลกของ Groovy มี easyb ให้ใช้แล้ว การทวนสอบข้อกำหนดกับลูกค้าเมื่อพัฒนาแอพพลิเคชั่นด้วย Groovy และ Grails คงจะทำได้สะดวกมากขึ้นทีเดียวครับ

Saturday, February 9, 2008

ประมวลเหตุการณ์หลังออก Grails 1.0

ก่อนอื่นต้องของแสดงความยินดีกับ Grails ที่ออกรุ่น 1.0 แ้ล้วครับ :-)

หลังจากชุลมุนกันอย่างหนักในช่วง Grails 1.0 ออก เนื่องจากมีคนพยายามจะ download Grails กันมากเสียจน server Codehaus รับไม่ไหว (ตอนหลังการรีลีส แม้แต่ กิลโยม ลาฟอร์จ ก็บอกว่าโหลดไม่ได้ รอบหน้าสงสัยคงต้องนัดกันก่อนนะครับ) กว่าจะได้ zip และ tar.gz ของ bin มาทำ mirror ก็ resume ด้วย wget -c ไปหลายรอบครับ

พอโหลดเสร็จ ผมก็เป็นคนแรกที่โพสต์ mirror ที่ไม่ broken หลายคนได้ binary ไปแล้วก็ mirror กันต่อ แล้วหลังจากนั้นทุกอย่างก็ไปได้อย่างราบรื่น

อีกไม่ถึงชั่วโมง ผมก็ build ตัว installer เสร็จ พอดีมีคนเอา reference ของ Grails 1.0 ใน format .CHM มา post แทนที่จะได้ release เลย ผมก็ไปขอไฟล์เขามารวมในตัว installer ด้วย แล้วก็ build อีกรอบ
เสร็จแล้วก็แอบเอาลิงค์ไปปะไว้ในหน้า thai grails user ก่ิอนพร้อม ๆ กับ binary หลัก (บางท่านอาจจะแอบเห็น) แ้ล้วก็ติดต่อไปหา กิลโยม เพื่อให้โพสต์ลิงค์เข้าหน้าหลัก คิดว่าตอนนั้น เกรมคงแอบไปหลับแล้วเพราะเงียบไปเลย
;-)

จริง ๆ ก็กะไว้แล้วว่าจะวุ่น แต่ไม่คิดว่าจะวุ่นขนาดนี้
พอไปดูใน stat ของ server จำนวนคน download จาก mirror ผม ก็ปาเข้าไปเป็นพันในช่วงวันเดียว (ถึงวันนี้ 4583 + ~600 ของ installer for Windows และเพิ่มขึ้นเรื่อย ๆ) ก็เลยสรุปว่าได้คร่าว ๆ ว่าทั้งหมดอยู่ในระดับหมื่น download แล้วแน่ ๆ ครับ

สรุปว่า Grails 1.0 เปิดตัวได้ค่อนข้างแรง
บั๊กเล็ก ๆ น้อย ๆ หลุดออกมาบ้าง (ผมเก็บไป 2 แล้ว) แต่คิดว่า 1.0.1 จะออกมาแก้ไขในเวลาไม่นานและตัว snapshot ของ 1.0.1 ก็เสถียรมากด้วยครับ เพราะ feature frozen ไปแล้ว

Monday, December 17, 2007

สคริปต์สำหรับ generate code จาก XMI

สำหรับคนที่ยังไม่รู้จักหรือลืมไปแล้ว (เพราะผมทิ้งช่วงการทำ Geogia ไปประมาณ 3 เดือน) Geogia คือโครงการสำหรับพัฒนาระบบ ERP บน Grails โดยใช้แนวทางแบบ MDA รวมกับ domain-driven ที่มีอยู่ใน Grails

ตอนนี้ผม update ตัวโปรเจ็คอีกนิดหน่อยโดยเพิ่มสคริปต์สำหรับการสร้าง code ลงไปในตัว grials app ของ Geogia ซึ่งจะทำให้ภาพรวมของการพัฒนาง่ายขึ้น
โดย
- เพิ่ม script ตอนนี้หากใช้คำสั่ง 'grails xmi-gen' และตามด้วยชื่อ UML model, ตัว generate ก็จะสร้างไฟล์ .groovy ลงไปใน grails-app/domain ให้ซึ่งจะใช้ template จากไดเร็กทอรี่ src/java/templates
- เพิ่ม lib ที่เป็น dependency ของ GroovyMDA ลงไปในตัว grails app ของ Geogia
- ไฟล์ .zargo สำหรับเก็บ UML model จะวางไว้ในไดเร็กทอรี่ชื่อ uml

ผม fork ตัว GroovyMDA ออกมาทั้งตัว โดยใช้ revision 20 เพราะคิดว่าเท่านี้ก็น่าจะเพียงพอกับการใช้งานในการ generate code ทั่ว ๆ ไปของ Geogia แล้ว
อีกหนึ่งเหตุผลในการ fork ก็คือ Groovy เปลี่ยนไปเป็น 1.5 แล้ว แต่ binary ของ GroovyMDA ยังนิ่ง ๆ อยู่ การเอา source มา integrate ลองไปใน project เลย โดยให้เป็นกึ่ง ๆ plugin น่าจะยืดหยุ่นกว่า

Wednesday, December 12, 2007

Grails 1.0 RC3 และตัวติดตั้งบน Windows

Grails 1.0 RC3 ออกมาแล้วครับ
ปลายอาทิตย์นี้คงได้เห็น RC4 และก่อนปิดคริสต์มาส เราอาจได้มีโอกาสยลโฉมตัว 1.0 กัน

ตอนนี้ผมตาม update ตัวติดตั้ง Grails บน Windows แบบติด ๆ เช่นกันครับ
สำหรับตัวติดตั้งบน Windows มีคนโหลดไปทั่วโลกร่วม 200 300 400 ยังไม่มีใครด่าว่าติดตั้งไม่ได้
ถ้าใช้กันอยู่ มาใส่ comment ให้รู้กันนิดหน่อยนะครับ ว่ามัน work จริง ๆ ผมจะได้ไปยืนยันกับทาง grails.org ครับ

โหลดทั้ง Grails 1.0-RC3 หรือตัวติดตั้งบน Windows ได้จาก http://grails.org ครับ

Monday, November 26, 2007

พฤติกรรมของ test mode ใน Grails

ใน Grails เราสามารถปรับแต่ง mode การทำงานได้เป็น 3 mode ก็คือ development สำหรับใช้พัฒนา, test สำหรับใช้ทดสอบ และ production สำหรับใช้งานจริง

พฤติกรรมของแต่ละ mode จะแตกต่างกันเล็กน้อย และเราสามารถตั้งค่าบางอย่างเช่น data source ให้กับแต่ละ mode ของ Grails

Grails จะทำงานใน test mode เมื่อผู้ใช้ต้องการจะทดสอบระบบด้วยคำสั่ง


$ grails test-app



ซึ่งจะเกี่ยวข้องกับการทดสอบเชิงหน่วย (unit tests) และเชิงรวม (integration tests)

จุดสำคัญก็คือ Grails มีแนวคิดของ test isolation นั่นหมายถึง ทุก ๆ การทดสอบจะถูกตั้งสมมติฐานไว้ว่าไม่มีการเกี่ยวข้องกัน เป็นผลให้องค์ประกอบที่ใช้ร่วมกันเช่นข้อมูลในฐานข้อมูลจะถูกลบทุก ๆ ในแต่ละการทดสอบ

ดังนั้นเมื่อต้องการทดสอบการทำงานใน test mode จึงจำเป็นต้องแยก data source ออกมาเป็นฐานข้อมูลเฉพาะสำหรับ test และหากเราใช้ BootStrap ในการเตรียมการข้อมูลแล้วนั้น ใน method setUp ของทุก ๆ test case จะต้องมีการเรียกใช้ closure init ของ BootStrap ไว้ทุกครั้ง


class MyTests extends GroovyTestCase {
void setUp() {
new BootStrap().init()
}

void testSomething() { ... }
}

Thursday, November 1, 2007

สรุปหลังสร้าง application ด้วย Grails

ผมได้มีโอกาสสร้าง Grails application สำหรับ production อีกครั้ง เป็น application เล็ก ๆ และครั้งนี้มีเวลาทำเพียง 1 สัปดาห์เศษ

GUI layer ผมใช้ OpenLaszlo อย่างเคย เพราะต้องการ application เป็น AJAX และคุ้นมือกับ OpenLaszlo มาพอสมควรแล้ว
เหตุที่ทำไมไม่ใช้เฟรมเวิร์คอื่น เช่น GWT เหตุผลหลักเพราะไม่ agile, compile-debug cycle สำหรับ GUI layer นั้นดูจะทำได้ช้า (term of agility) กว่า OpenLaszlo
ผมไม่ใช้ UI ที่เป็น JavaScript framework เช่น YUI, Ext หรือ Dojo เพราะทนปวดหัวไม่ไหว
OpenLaszlo อยู่กลาง ๆ ระหว่าง GWT และ JavaScript framework ทั้งหลาย เพราะมี compiler ที่ช่วย check error ได้พอสมควร, ใช้ tag (box model แบบ XUL), ภาษาก็เป็น JavaScript (จริง ๆ แล้ว OpenLaszlo ก็ใช่ว่าจะ debug ง่าย แต่อย่างน้อยก็ง่ายกว่า JavaScript ล้วน ๆ)

ผมออกแบบ layout ของ UI โดยใช้ Photoshop แล้วแยก layer ออกเป็นชิ้น ๆ (ไม่ได้ merge แล้ว slice) save แยกเป็น .png
แล้วเอามารวมกันใน code ของ OpenLaszlo

approach รอบนี้เป็น prototype-driven สร้าง UI เสร็จแล้ว define XML ที่ต้อง bind ด้วยระหว่าง client กับ server
เป็น local XML dataset ของ OpenLaszlo ไว้ก่อน (feature นี้ช่วยได้มากสำหรับ prototyping)
จากนั้นเอาก็ดูจาก schema ของมันไปเขียน code ของ controller และใช้เตรียมโดเมนคลาส

ผมใช้ Grails 1.0-RC1 ไม่ลง plugin เพิ่มเลยนอกจาก Quartz 0.2 (ใช้มันทำ job scheduling) เพราะ application คราวนี้หลัก ๆ เป็น Ajax อย่างที่บอก
- ฝั่ง admin แทบไม่ทำอะไรเลย ใช้ scaffolding ล้วน ๆ
- ด้านที่เชื่อมต่อกับ OpenLaszlo ใช้ REST ล้วน ๆ โดย render XML ออกจาก controller โดยตรง ใช้วิธียิง error code พวก 200, 500 ออกไปให้ UI layer จัดการ check เอาเอง ตรงนี้แยกเป็น 2 กลุ่ม กลุ่มทำงานแบบ RPC กับกลุ่ม CRUD เลยทำให้ได้สร้าง controller framework เล็ก ๆ ของฝั่ง OpenLaszlo ออกมาใช้โดยปริยาย เป็น controller แบบพิเศษนิดหน่อยคือต้องทำงานกับ event

ไม่มี SQL เลยแม้แต่บรรทัดเดียว :)
ไม่ได้ใช้ DTO pattern เพราะใช้ XML เป็น media แทน
การ update data จากฝั่ง client มา server ใช้ก้อน XML แล้วแปลงเป็น Map ด้วย XMLParser ของ Groovy
แล้วส่งให้ GORM ผ่าน obj.properties (มองมุมนี้ก็ยัง preserve data-hiding อยู่ครับ)

ใช้ Java Mail เป็นตัวส่ง mail ผ่าน SSL server (SMTP ของ Google App for your domain)
application มี File upload ตัวรับเป็นกลไลของ Spring (แต่ไม่ต้อง config อะไรเพิ่มใน Grails)

การ authen ใช้ MD5 มีการ encode ตั้งแต่ฝั่ง client แล้วเทียบ password ที่ digest แล้วกับฝั่ง server เพื่อเลี่ยงการใช้ SSL
มีพิเศษตรงการ sync กับ .htaccess ของ Apache httpd เพื่อให้ password คุมการเข้าถึง directory ให้ด้วย
เรื่องสนุกมีอยู่ว่าต้องไปแกะ code htdigest.c ว่ามัน digest อะไร เพราะตอนแรกลองแล้ว ค่า hash ออกมาหน้าตาไม่เหมือนกัน

server ตอนนี้ deploy ลง Jetty 6 เนื่องจากอีกซักพักจะสร้าง Comet app เพื่อแทนที่การ pooling จากฝั่ง UI ที่ใช้อยู่ในปัจจุบัน
ตอนนี้ยังเรียกใช้ ContinuationSupport ใน Grails controller ไม่ได้

สรุปเบา ๆ ว่ารอบนี้ agile กว่าทุกครั้งและงานเสร็จทันเวลา ข้อเสียที่ยังแก้ไม่ตกคือตอนทำยังเปลือง CPU/Memory อยู่เพราะต้ิอง run ทั้ง Grails app และ OpenLaszlo