Apache Ant in Actions I – Overview

November 19th, 2009

ช่วงนี้ได้มีโอกาสจับงาน Java ที่ต้องมี Source ไฟล์มาเกี่ยวข้องด้วยเยอะ ไอ้การจะมานั่งจัดการไฟล์จำนวนมากด้วยมือก็เห็นจะไม่ใช่เรื่องดีเท่าไหร่ งานนี้ก็เลยต้องอาศัย Build Tools มาช่วยงานสักหน่อย ก็ได้แค่โปรแกรมที่ชื่อว่า Apache Ant หรือที่รู้จักกันดีและเรียกกันสั้นๆ ว่า Ant ตัวนี้สักหน่อย
Ant เป็นเครื่องมือที่ช่วยจัดการงานต่างๆ ที่เราต้องทำเข้าไว้ด้วยกัน ในรูปแบบของชุดคำสั่ง เทียบได้กับ make ใน unix ซึ่งข้อดีของ Ant คือ มันเป็น OS Independent ที่เขียนขึ้นมาด้วย Java ทำให้เขียนโปรแกรมแล้วนำคำสั่งชุดคำสั่งนี้ไปทำงานหรือแก้ไขที่ได้ก็ได้โดยให้ผลลัพธ์ (จาก Ant) เช่นเดียวกัน

Build File

คือชุดคำสั่งของ Ant ที่เราเขียนและกำหนดไว้เพื่อให้ Ant ทำตาม อยู่ในไฟล์ ‘build.xml’ (เป็นค่า default) จะเรียกว่า build file มีโครงสร้างตามรูปด้านล่าง ภายใน build file ดังกล่าวจะหมายถึง 1 โปรเจ็คที่เรากำลังสนใจอยู่ ก่อนที่จะทำงาน เราอาจจะสร้างประกาศค่าต่างๆ ที่จำเป็นต้องใช้ในการทำงานไว้ในส่วนของ Property (Properties) จากนั้นจึงค่อยสร้างเป้าหมาย (target) สำหรับการทำงานไว้ เป็นกลุ่มๆ ส่วนตัวผมจะแบ่งไว้ให้เป็นเป้าหมายที่ย่อยที่สุดเท่าที่จะทำได้ เช่น สร้างโฟลเดอร์, โหลด dependency ไฟล์, compile ซอร์สโค้ด, สร้าง jar ไฟล์ และ deploy ลง Server เป็นต้น เพื่อให้ง่ายต่อการจัดการ งาน (Task) ที่ต้องทำภายใน Target อีกที ส่วนตัวแล้วชอบวางลำดับของ Target ไว้ตามลำดับการทำงานจากบนลงล่างเพื่อให้ง่ายตอนเขียน แต่ลำดับของ Target ภายใน build file ไม่มีผลกระทบต่อการทำงานใดๆ ของ Ant เลย แต่ Ant จะเริ่มการทำงานจาก default target ที่ระบุไว้ใน attribute ของแท็ก project

Apache Ant's Build File Structure

Apache Ant's Build File Structure

การทำงานของ Ant หากไม่ระบุ target ที่ต้องการ Ant จะเริ่มทำงานจากค่า default ในแท็ก project โดยก่อนการทำงานของ target ดังกล่าว Ant จะตรวจสอบว่า target นี้มี target อื่นที่ต้องทำก่อนหน้าหรือไม่ (Dependency Target – depends) เช่น หากต้องการสร้าง jar ย่อมต้องใช้ class ไฟล์ ที่ได้จากการ compile ซอร์สโค้ดล่าสุดซะก่อน หากเราระบุ target ดังกล่าวไว้ Ant จะทำหน้าที่ไปตรวจสอบว่าซอร์สโค้ดดังกล่าวถูก compile แล้วหรือยัง หากมีไฟล์ที่เปลี่ยนแปลงและยังไม่ได้ compile ก็จะทำให้อัตโนมัติ

หลังจากเสร็จการทำงานใน Dependency Target แล้ว Ant ก็จะเริ่มทำตาม Task ที่ระบุไว้ภายใน Target จากบนลงล่างตามลำดับ ซึ่งภายใน Target อาจจะใช้ Ant Call (<antcall … ) เพื่อเรียกการทำงานของ Target อื่นๆ ที่อยู่ภายใน build file ก็ได้ตามต้องการ

Official Site: http://ant.apache.org
Manual: http://ant.apache.org/manual/index.html

Software Architecture: Test Case Writing

November 8th, 2009

ความจริงเป็นสไลด์ที่ต้องเอาไปพูดให้พี่ที่ทำงานฟัง คิดว่ามันคงพอจะมีประโยชน์บ้าง เลยเอามาอัพใส่ไว้ใน blog ซะหน่อย แต่ต้องขอบอกก่อนนะครับว่าผมค่อนข้างใหม่กับเรื่องพวกนี้ ถ้าจะเอาจริงเอาจังล่ะก็ให้อ่านตรงสไลด์ 2 สุดท้ายแล้วกัน :D

แก้ไข 2009.11.09: ตอนแรกอัพโหลดให้เป็นไฟล์ของ Keynote แต่เนื่องจากมีปัญหาเรื่อง Transition ของ สไลด์นิดหน่อยจึงเปลี่ยนเป็น PDF แทน แต่ถ้าใครต้องการไฟล์ที่เป็น Keynote ก็ยินดีให้ครับ :) (goto.champ [at] gmail [dot] com)

Create Bootable Live USB Drive for Mac OS X

November 7th, 2009

1. ดาวน์โหลด image ไฟล์ ที่ต้องการ (สำหรับผมคือubuntu-9.10-netbook-remix-i386.iso)
2. เปิด Terminal ขึ้นมา
3. สั่งแสดงรายการของ device ทั้งหมดที่เชื่อมต่ออยู่กับเครื่อง ด้วยคำสั่ง

	# diskutil list

ผลที่ได้: จะบอกว่าขณะนี้มี device ชื่อว่า Potter ขนาด 2GB เชื่อมต่ออยู่ (ข้อมูลจะเป็นลักษณะเดียวกันแต่จะไม่เหมือนกันทุกอย่างขึ้นอยู่กับว่าเครื่องคอมพิวเตอร์เครื่องนั้นมี device เชื่อมต่ออยู่มากแค่ไหน)

:
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *2.0 GB     disk2
   1:                 DOS_FAT_32 POTTER                  2.0 GB     disk2s1

4. แต่ตอนนี้ยังเขียน image ลงไปใน flash drive ไม่ได้ จำเป็นต้องตัดการเชื่อมต่อ (unmount) ซะก่อนด้วยคำสั่ง ในที่นี้คือ /dev/disk2 เพราะเป็น flash drive ที่เราต้องการจะเขียนข้อมูลลงไป

	# diskutil unmountDisk /dev/disk2

5. เริ่มต้น image ไฟล์ลงไปใน flash drive ด้วยคำสั่ง

	# dd if=/path/to/image/file.iso of=/dev/disk2 bs=1m

/dev/disk2 ค่านี่ได้มาจาก ข้อ 3.

6. รอพักใหญ่ๆ เราจะได้ค่า 3 บรรทัดนี้ออกมา เป็นข้อมูลที่สรุป input และ output ของคำสั่ง dd ที่เราใช้ในข้อ 7. ถ้ามันเท่ากันก็นั่งยิ้มเลยเลยครับ

	680+1 records in
	680+1 records out
	713887744 bytes transferred in 792.628728 secs (900658 bytes/sec)

7. สุดท้ายก็ลองถอด flash drive ออกแล้วจะเห็น device ที่ชื่อว่า “Ubuntu-Netbook-R” ขึ้นมาใน Desktop ครับ เป็นอันเสร็จพิธี

ข้อมูลจาก: 4 Ways to Create Bootable Live USB Drives (For Windows, Linux and OS X)