วันพุธที่ 21 กันยายน พ.ศ. 2554

ขี่จิงโจ้ รอบที่ 2 -- โชว์ขั้นตอนการสร้างเวปอย่างง่าย

ทีนี้เราจะมาดูขั้นตอนการสร้างเวปใน 5 นาทีกันนะคะ กับ 14 command line ที่ให้ไว้เมื่อรอบที่แล้ว
สำหรับรูปที่จะนำมาโชว์เนี่ย จะเป็นรูปจากการพัฒนาบน Spring Source Tool Suite  (STS) นะคะ ซึ่งก็คือ eclipse เวอร์ชันสำหรับ Spring นั่นเองค่ะ

สำหรับใครที่ยังไม่มีอุปกรณ์ในการขับขี่เจ้า Roo ก็อย่าลืมไปโหลดมาไว้ในเครื่องนะคะ ก็มี 5 อย่าง คือ

  1. Java 6 JDK
  2. Apache Maven
  3. Spring Roo
  4. Spring Source Tool Suite (STS)
  5. Database Management Tool (ในที่นี้ใช้ Microsoft SQL Server 2008 นะคะ)
สำหรับ STS จะไม่ใช้ก็ได้ค่ะ เพราะเราสามารถใช้ command line ของเจ้า Roo ผ่านหน้า Dos ดำๆก็ได้ แล้วก็ค่อย export มันเพื่อไปใช้กับ eclipse อีกทีก็ได้ค่ะ แต่ถ้าจะให้ดี แนะนำว่ามีดีกว่า เพราะมันครบเครื่องกว่าเยอะค่ะ อิๆๆ เมื่อพร้อมแล้วเราก็มาจัดการใช้งานเจ้า Roo กันได้เลยค่ะ

เริ่มจากการสร้าง Roo project ใน STS




พอสร้างเสร็จก็จะมี Roo shell ขึ้นมาให้เราใช้ command line กันได้แบบนี้


จากรอบที่แล้ว ให้ command line ไว้ 14 คำสั่งใช่มั้ยคะ ซึ่งคำสั่งแรกจะเป็นการสร้างโปรเจคค่ะ ดังนั้น เราก็ตัดออกไปได้เลย ทีนี้เราจะมาจัดการกับ 13 คำสั่งที่เหลือแทนค่ะ

persistence setup เป็นคำสั่่งในการสร้างตัวกำหนดเงื่อนไขการติดต่อฐานข้อมูลนะคะ ในที่นี้เราเลือกติดต่อกับ Microsoft SQL Server ค่ะ ก็จะเห็นว่าเป็น MSSQL
และเราก็เปิดไฟล์ database.properties มาแก้ไขรายละเอียดในการติดต่อกับฐานข้อมูลกันค่ะ

เมื่อเราใช้คำสั่ง entity --class ก็จะเป็นการสร้างคลาสใหม่ ซึ่งตอนนี้เราสร้างคลาส ExpenseCategory ก่อนนะคะ
เมื่อสร้างคลาสเสร็จเราก็ใช้คำสั่ง field สร้างตัวแปรเพื่อเก็บข้อมูลชื่อของหมวดหมู่รายการที่จ่าย ชื่อ name เป็นชนิด string จากสองคำสั่งนี้จะเห็นว่า เจ้า Roo สร้างไฟล์ .java ที่เป็นคลาสให้กับเราและมีตัวแปรตามที่เรากำหนดไว้นะคะ
เช่นเดียวกันค่ะ เราก็ทำกับตารางเก็บข้อมูลรายจ่ายบ้าง ก็สร้างคลาส RecordExpenses ด้วยคำสั่ง entity --class และสร้างตัวแปรด้วยคำสั่ง field ซึ่งก็จะเห็นว่าชนิดของตัวแปรแตกต่างกัน มีทั้ง String , number ส่วน reference นั่นคือการบอกว่าตัวแปรนี้อ้างอิงกับคลาสอีกคลาสนึง (ซึ่งก็คือ ExpenseCategory)
นี่คือรูปร่างหน้าตาของคลาสที่สร้างขึ้นมาโดยอัตโนมัติ ด้วยฝีมือเจ้า Roo ค่ะ
เมื่อเรามีคลาสและตัวแปรไว้ใช้รองรับการเก็บข้อมูลแล้ว เราก็จะมาสร้างหน้าเวปกับส่วนคอนโทรลกันค่ะ ด้วยคำสั่ง controller ซึ่งในที่นี้เราใช้ all เพื่อจะบอกว่าให้สร้างเวปสำหรับทุกคลาสเลยค่ะ
เพิ่มระบบความปลอดภัยนิดนึงด้วยการใช้คำสั่ง security setup ก็จะทำให้เราได้หน้า login เพิ่มขึ้นมา และนอกจากนี้เรายังกำหนดได้ด้วยนะคะว่าจะให้ผู้ใช้คนไหนมีสิทธิได้เท่าไหร่ เข้าหน้าเวปไหนได้บ้าง ด้วยการกำหนดที่ path ที่ไปยัง controller ต่างๆค่ะ แก้ไขได้ที่ไฟล์ applicationContext-security.xml
หลังจากนั้นก็ใช้คำสั่ง perform tests เพื่อสร้างคลาส test และทดลอง build นะคะ ถ้าเรียบร้อยดีแล้วเราก็มาดูผลงานกันได้เลยค่ะ
อันนี้เป็นหน้าแรกของเวปนะคะ 
ทดลองเพิ่มหมวดหมู่รายการที่ซื้อซักหน่อย
วันนี้กินผัดไทยหมูแดง อร๊อยอร่อย ราคา 30 บาทเอง ต้องบันทึกซักหน่อยแล้วล่ะ

แสดงรายละเอียดได้ครบถ้วน และถูกต้อง เก่งมากเจ้า Roo
ถึงตรงนี้ ถ้าดูจากรูปอาจจะสงสัยว่าเอ๊ะ แล้วหน้า login หายไปไหนล่ะ แล้วทำไม category ถึงไม่แสดงแต่ชื่อหมวดหมู่ว่า อาหาร จะโชว์ id กับ version ทำไม 

อย่าเพิ่งใจร้อนนะคะ ไว้ครั้งหน้าเราจะมาดูกันว่า การปรับเปลี่ยนจากหน้าเวปที่ได้มาพื้นฐานแบบนี้ จะให้เป็นตามใจฉันอีกที ต้องทำอะไรตรงไหนบ้าง
สำหรับวันนี้ไปนอนก่อนแล้วค่ะ ง่วงมากมาย ฝันดีนะคะ :)

ขี่จิงโจ้ รอบที่ 1 -- โชว์การเขียนเวปใน 5 นาที

กว่าจะอัพบล็อกวันนี้ได้เหนื่อยแฮก ต้อง capture screen เพียบเลย บวกกับความรู้อันน้อยนิดของเรา ทำให้เราต้องไปจัดการเซฟรูปในโปรแกรม Paint ค่ะ (ขอขอบคุณ paint อย่างมากที่ช่วยชีวิตไว้) แต่ว่ารู้สึกว่ามันไม่ค่อยสะดวกเลย ใครมีคำแนะนำบ้างมั้ยคะ (photoshop ไม่มีในเครื่องนะคะ อิๆ)

ตอนนี้พร้อมแล้วค่ะที่จะมาขี่จิงโจ้โชว์ เป็นการยั่วใจกันก่อน ต้องทำการเรียกผู้ชมให้หลงผิด(เอ้ย ม่ายช่าย)  และพระเอกของวันนี้ชื่อ Roo1.02 ค่ะ  ฮ่าๆๆ เก่าได้ใจมั้ยคะ อันที่จริงตอนนี้ก็น่าจะเป็น 1.1.5 แล้วล่ะค่ะ แต่เราอนุรักษ์ความโบราณเอาไว้ (อันที่จริง ได้ข่าวว่าขี้เกียจโหลดมาใหม่นะเรา)

สำหรับวันนี้จะยังไม่ขออธิบายในรายละเอียดโครงสร้างของเจ้า Roo นะคะ จะขอแค่มาโชว์เดี่ยวอย่างเดียวก่อน เพราะอยากให้เห็นถึงความเร็วก่อนค่ะ ส่วนไอ้เรื่องยากๆ เอาไว้ท้ายๆดีกว่า ฮ่าๆๆ

วันนี้เราจะสร้างเวปสำหรับบันทึกรายจ่ายประจำวันกันค่ะ (เงินทองต้องใส่ใจใช่มั้ยคะ) เอาเป็นระบบง่ายๆก่อนละกันนะคะ อย่างในรูปนี้


ก็จะเห็นว่าเราจะทำการสร้างฐานข้อมูลที่มีตารางเก็บข้อมูลสองส่วน คือ
หมวดหมู่ของรายการที่จ่าย (Expense Category)
กับบันทึกรายจ่ายประจำวัน (Record Expenses)

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

ทีนี้เราก็จะมาดูกันว่า Roo จะทำทั้งหมดนี้ให้เราได้อย่างไร

อย่างที่บอกว่าวันนี้จะมาโชว์อย่างเดียวนะคะ ดังนั้น เราจะโชว์การสร้างเวปจากโจทย์ข้างบนอย่างง่ายๆภายใน 14 คำสั่งนี้กันค่ะ

project --topLevelPackage antshare.tutorial.expenses
persistence setup --provider HIBERNATE --database MSSQL
entity --class ~.domain.ExpenseCategory --testAutomatically
field string --fieldName name --notNull --sizeMin 2 --sizeMax 255
entity --class ~.domain.RecordExpenses --testAutomatically
field date --fieldName recordDate --notNull --type java.util.Date
field reference --fieldName category --type ~.domain.ExpenseCategory
field string --fieldName name --notNull --sizeMin 2 --sizeMax 255
field number --fieldName number --notNull --type java.lang.Integer
field number --fieldName price --notNull --type java.lang.Float
field number --fieldName total --notNull --type java.lang.Float --transient
controller all --package ~.web
security setup
perform tests
ใช้เวลาในการรันคำสั่งทั้งหมดนี้ไม่เกิน 5 นาที เราก็จะได้เวปสำหรับบันทึกรายจ่ายในชีวิตประจำวันอย่างง่ายๆแล้วล่ะค่ะ




สำหรับรายละเอียดรูปภาพในการทำแต่ละขั้นตอน เดี๋ยวอธิบายใน โชว์รอบที่ 2 นะคะ รูปเยอะมากๆค่ะ ^^

วันเสาร์ที่ 17 กันยายน พ.ศ. 2554

Spring Roo ผู้ช่วยให้การเขียนเวปบน Java เป็นเรื่องง่าย

หลังจากที่ได้ปลุกปล้ำถลำลึกกับการทดลองของเล่นน้องใหม่ ในตระกูลจาวามาได้ปีกว่าๆ เราก็คิดว่า เอาหละ มันถึงเวลาแล้ว ที่ควรจะบันทึกเรื่องราวดราม่าอันเข้มข้น ของ Spring Roo ออกสู่สายตาประชาชนชาวไทยเสียที (อิๆ อันนี้ก็เวอร์)
[ที่มา รูปภาพ http://www.springsource.org/roo ]

เรื่องของเรื่อง ก็คือว่า เราอยากแบ่งปันและแลกเปลี่ยนความรู้มากกว่าน่ะค่ะ เพราะว่าเราเองก็ไม่ได้เชี่ยวชาญอะไรนัก แต่ก็รู้สึกว่า เจ้า Roo นี่มันก็ดีใช้ได้ ก็เลยคิดว่าจะเริ่มเขียนบทความเกี่ยวกับสิ่งที่ตัวเองรู้มาจากเจ้า Roo เนี่ยแหละค่ะ ที่สำคัญมันก็ได้กลายเป็น document ภาษาไทยชั้นดีสำหรับตัวเราเองด้วย

สำหรับท่านใดที่อ่านบทความเกี่ยวกับเจ้า Roo แล้วรู้สึกว่ามีตรงไหนที่ผิดพลาด หรือควรแก้ไข หรืออยากแบ่งปันความรู้กัน หรือมีข้อแนะนำดีๆ เรายินดีรับฟังนะคะ เพราะอย่างที่กล่าวไว้ตั้งแต่แรกว่า ตัวเราเองก็เป็นแค่มือใหม่หัดขี่เจ้า Roo ค่ะ

เห็นเราเรียกเจ้า Roo คงจะสงสัยว่าทำไมมันขี่ได้ใช่มั้ยคะ ก่อนอื่นอยากจะเกริ่นนิดๆ พอเป็นน้ำจิ้มก่อนว่าเจ้า Roo เนี่ยมันเป็นใคร 

จริงๆแล้ว ทีมนักพัฒนาเค้าตั้งชื่อเต็มๆให้มันว่า Spring Roo ค่ะ และคำว่า Roo เนี่ยก็มาจาก Kangaroo ที่แปลว่า จิงโจ้ นั่นแหละค่ะ ทีนี้ก็เดาได้เลยใช่มั้ยคะว่า เจ้า Roo เนี่ยเกิดที่ไหน แต่นแตนแต๊น... แน่นอนค่ะว่า ประเทศไทยนี่เอง เอ้ย..ไม่ช่ายยยย (มันจะตลกไปแล้วหล่ะ)

ทีนี้ความสามารถของมันเป็นอย่างไร ชื่อมันคงไม่สามารถบอกอะไรได้ใช่มั้ยคะ เจ้า Roo เนี่ย ถูกพัฒนาขึ้นมา เพื่อช่วยให้การเวปด้วยภาษาจาวา บน Spring Framework เป็นเรื่องง่ายขึ้น และไม่ใช่แค่เพียงเท่านั้น เมื่อคุณใช้ Roo วันนี้ คุณจะพัฒนาเวปบน Spring Framework ได้เร็วขึ้นกว่าเดิมอีกหลายเท่าตัวเลยทีเดียว

ประโยคคุ้นๆเหมือนโฆษณาพวก direct sale มั้ยคะ อิๆ แต่ว่า...เราไม่ได้พูดเกินจริงเลยค่ะ เจ้า Roo เนี่ยช่วยให้เขียนเวปด้วยจาวาได้เร็วขึ้นจริง  ถ้าหากใครเคยพัฒนา Ruby on Rails ที่ว่าเร็ว และแรง หรือจะเป็น Python on Django ที่ทำให้คุณติดใจกันมาแล้ว วันนี้ Spring Roo จะเข้ามาอยู่ในอ้อมอกอ้อมใจของคุณได้ไม่ยากเลยค่ะ (ถ้าไม่เกลียดจาวามาก่อนนะคะ)

แต่ว่า...ถ้าใครที่อาจจะรู้สึก เอ๊ะ!! อยู่ในใจ เราก็อยากจะบอกว่า ที่เขียนมาไม่ได้จะบอกว่าใครดีกว่าใครนะคะ Ruby, Python, Spring etc. ต่างก็มีข้อดีข้อเสียของตัวเองทั้งนั้น ไม่อยากเปรียบเทียบให้ขัดใจกันหรอกค่ะ แต่ที่ต้องการสื่อจริงๆก็เพียงว่า ความซับซ้อนในการเขียนเวปด้วยจาวาทั้งปวง เจ้า Roo มันช่วยปกปิดไว้ ทำให้เราเขียนเวปได้เร็วขึ้นเท่านั้นเองค่ะ


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

เอาหละ เราขอโปรยคำโฆษณาอันสวยหรูไว้แค่นี้ก่อนนะคะ แล้วครั้งหน้า เราจะมาให้ข้อมูลเพิ่มเติมว่า เจ้า Roo นี้กระโดดได้เร็ว และขี่ได้ง่ายสมคำชมหรือเปล่าค่ะ บ๊ายบาย