Table of contents

   
What is uml Use case Analysis Model Collaboration Diagram
Visual Modeling Object Definition State Diagram
Software Performance Class Definition Activities Diagram
Brief history of UML Symbol in Analysis model Class Diagram
Why UML Diagram of UML Object Diagram
Use case Driven Use case Diagram Component Diagram
Iterative and Incremental Development Sequence Diagram Deployment Diagram

UML - Unified Modeling Language


What is uml :
........
UML คือ โมเดลมาตรฐานที่ใช้หลักการออกแบบ OOP(Object oriented programming) รูปแบบของภาษา UML จะมี Notation ซึ่งเป็นสัญลักษณ์ที่นำไปใช้ใน Model ต่างๆ UMLจะมีข้อกำหนดกฏระเบียบต่างๆ ในการโปรแกรม โดยกฎระเบียบต่างๆ จะมีความหมายต่อการเขียนโปรแกรม(Coding) ดังนั้นการใช้ UML จะต้องทราบความหมายของ Notation ต่างๆ เช่น Generalize, association dependency class และ package สิ่งเหล่านี้มีความจำเป็นอย่างยิ่งต่อการตีความของการออกแบบและ Design ระบบ ก่อนนำไป Implement ระบบงานจริง ในปัจจุบันมีเครื่องมือมากมายที่สามารถแปลง Model UML เป็น Code ภาษาต่างๆ ยกตัวอย่าง เช่น ภาษา Java, Power builder และ VB เป็นต้น

เครื่อมือในการเขียน UML :
........ UML อาจใช้โปรแกรมสำหรับการวาดรูปต่างๆ เช่น Paint, Photoshop, Power point, Visio หรือ โปรแกรมอะไรก็ตามที่สามารถวาดรูปได้ นอกจากการใช้โปรแกรมแล้วการวาดรูป ลงบนกระดาษ ก็สามารถใช้ได้เช่นเดียวกัน อย่างไรก็ตามวิธีการต่างๆ เหล่านี้ จะไม่มีเครื่องอำนวยความสะดวก ในการทำงานให้ ดังนั้น จึงมีผู้ผลิต Software หลายค่ายได้ทำการสร้างเครื่องมือสำหรับการทำงานกับ UML โดยเฉพาะ อาทิ Rational Rose, Borland Together , Visual UML โดยเครื่องมือเหล่านี้จะสามารถทำการออกแบบ UML Diagram ต่างๆ และทำการ Generate Code หรือ เอกสารสำหรับออกรายงาน หรือ ส่งลูกค้าได้ นอกจากนี้เครื่องมือเหล่านี้ยังสามารถทำการ import code กลับเข้ามาเพื่อให้อยู่ในรูป Model ได้ เรียกการ generate code และ การ import กลับเข้ามาอยู่ใน Model UML ว่า round trip engineer กระบวนการนี้มีประโยชน์มากในการ update model และ code ให้ตรงกันเสมอ ซึ่งจะต้องมีการควบคุมให้ดี เนื่องจากจะเป็นการทำงานร่วมกันระหว่างนักออกแบบระบบ(UML) และ Developer(Coding)



Rational Rose Screen Short



Together Screen Short

Visual Modeling :
Uml เป็น Visual Modeling ซึ่งจะทำหน้าที่ในการแสดงโครงสร้าง การทำงานของ Software ให้ออกมาใน model ที่สามารถมองเห็นได้ โดยการสื่อให้ออกมาในรูปของ Diagram รูปภาพ ด้วยวิธีการแบบนี้จะทำให้ Model, Implement, Coding มีความสอดคล้อง เป็นไปในแนวทางเดียวกัน

*** Visual Modeling is modeling using standard graphical notations

Software Performance
UML ถูกนำมาใช้ในการพัฒนา software อย่างกว้างขวาง และทำให้การทำงานมีคุณภาพ กล่าว คือ
1. ช่วยลดระยะเวลาในการพัฒนาระบบงาน(Shortest Development life cycle)
2. ช่วยเพิ่มความสามารถในการทำงาน(Increase productivity)
3. ช่วยเพิ่มคุณภาพของระบบงาน (Improve software quality)
4. รองรับระบบงานเดิม(Support legacy system)
5. ช่วยในการสื่อสารระหว่างทีมผู้พัฒนาระบบงาน(Improve team connectivity)

Brief history of UML :
เนื่องจากมีแนวความคิดเกี่ยวกับการสร้าง Model แสดงการทำงาน และ โครงสร้างของการพัฒนา Software แบบ Object-Oriented Programming จำนวนมาก แต่ละวิธีก็มีข้อดีข้อเสียแตกต่างกัน ยุคแรกๆ ของการใช้ Model สำหรับการออกแบบระบบงาน จะมี Model และ Diagram ต่างๆ เกิดขึ้นจำนวนมาก และความสับสนในการใช้งานขึ้น(Model war) ภายหลังจึงมรแนวความคิดในการนำเอาวิธีการสร้าง Model ต่างๆ ที่มีชื่อเสียง และเป็นที่ยอมรับมากำหนดเป็น Model ใหม่ ขึ้นมา การนำเอาหลายๆ แนวคิดมารวมกันจึงเรียกว่า Unified Modeling Langauge โดยกลุ่มผู้เริ่มต้นร่วมกันกำหนด UML ขึ้นมา Grady Booch และ Jame Rumbaugh ร่วมกันทำงานที่ Rational Software Coporation เพื่อสร้าง UMLขึ้นมา โดยเริ่มต้นพัฒนาเมื่อปี 1994 ได้แก่

1. Grady Booch - ซึ่งเป็นผู้นำแนวคิดแบบ Booch method ซึ่งเป็นวิธีการที่มีชื่อเสียงมาก มี Diagram จำนวนมากสำหรับใช้งาน แต่มีข้อเสียคือมีมากเกินความจำเป็น และยุ่งยากมากในการวาด digram ด้วยมือ แนวความคิดของ Booch จะทำการวิเคราะห์ทั้งแบบ Micro - และ Micro Development และอยู่บนพื้นฐานของการพัฒนาระบบงานแบบ Iteration and Incremental Process

2. Jame Rumbaugh - Object modeling Techniques(OMT) แนวความคิดนี้ถูกพัฒนาขึ้นที่ General Eletric ซึ่งเป็นที่ทำงานเดิมของ Jame Rumbaugh ประกอบด้วยโมเดลจำนวนมาก ครอบคลุมถึง Object Model, Dynamic Model, Functional Model, Use-case Model

3. Ivar Jacobson - Object Oriented Software Engineer(OOSE) เป็นรูปแบบวิธีการทำงานที่เน้น Requirement ด้วย มีพื้นฐานการทำงานอยู่บน Use-Case Model ซึ่ง Use-Case Model นี้ จะถูกใช้ตลอดทุกระยะในการพัฒนาระบบงาน

เริ่มต้นแนวคิดของ UML ถูกริเริ่มโดย Grady Booch และ Jame Rumbaugh ภายหลัง Ivar Jacobson จึงเข้ามาร่วมทีมด้วย ดังภาพด้านล่างนี้


UML History


Why UML :
1. UML สามารถแสดงส่วนประกอบในการสร้างโปรเจคในรูปของ OOP
2. เชื่อมแนวคิดกับการออกแบบระบบโดยใช้ Object Oriented Code
3. ง่ายต่อการทำความเข้าใจและสามารถแปลงเป็น Code program ได้

Use case Driven
กระบวนการการพัฒนาโครงการใดๆ นั้นมีวัตถุประสงค์เพื่อทำการสนับสนุนการทำงานของ User เป็นหลัก หรือ สนับสนุนความต้องการของผู้ใช้ ทั้งนี้ User ไม่ได้หมายถึงคนเพียงอย่างเดียว อาจจะหมายถึง ระบบอื่นที่อยู่ภายนอกระบบก็ได้ (Some one or something such as other system out side the system) User จะมีการกระทำกิจกรรมใดๆ ต่อ ระบบ เช่น การสอดบัตรพลาสติกลงในเครื่องอ่านบัตร การกดปุ่มตอบสนองต่อหน้าจอที่ปรากฏต่อผู้ใช้ การใช้งานเครื่อง Automatic Teller Machine (ATM) และ การรับเงินที่เครื่องส่งออกมา โดย ATM หรือระบบจะมีการสร้างลำดับของงานขึ้นมาก่อน จากนั้นจึงส่งผลลัพธ์ให้ User หรือผู้ใช้

กระบวนการตอบสนองของระบบอย่างมีลำดับ(Sequence) เพื่อให้ได้งานตามต้องการในลักษณะนี้เรียกว่า Use case Use case จึงเป็น Function การทำงานของระบบที่ทำหน้าที่ให้ผลลัพธ์ หรืองานตามที่ user ต้องการ(Capture functional requirement) นักพัฒนาระบบจะนำเอา Use case มาสร้างเป็น Model ที่สามารถอธิบาย function การทำงานที่สมบูรณ์ของระบบต่อไป

อย่างไรก็ตาม Use case ไม่ได้เป็นแค่เพียงสิ่งที่บอกถึงความต้องการของระบบเท่านั้น(Specification requirement) แต่มันยังมีความสำคัญอย่างมากต่อการ Design, Implementation, Test และ การติดตั้งใช้งานระบบ(Deployment)

จาก Use case model ที่เกิดขึ้น Developer จะทำการสร้างลำดับของการออกแบบและพัฒนาระบบ, การแตกรายละเอียด use case เพื่อให้สามารถพัฒนาโครงการได้ โดยอาศัย Use case เป็นแกนหรือตัวขับ หรือ Use case driven

ดังนั้น Use case driven จึงหมายถึงกระบวนการการพัฒนาระบบโดยมีการไหลของงานเกิดจากการใช้ use case (Derive from use case) เป็นตัวกำหนด Use case และดำเนินไปเป็นวงจร(Development Life cycle)

Iterative and Incremental Development
ในโลกแห่งความเป็นจริงการทำงานไม่สามารถทำให้เสร็จสมบูรณ์ได้ในขั้นตอนเดียว และวิธีการทำงาน
โดย Water fall model ซึ่งเป็นวิธีการทำงานแบบดั้งเดิมจะต้องทำงานให้เสร็จในรอบเดียว นับว่าเป็นความเสี่ยงอย่างยิ่งต่อความล้มเหลวของโครงการ เนื่องจากการทำงานในยุคปัจจุบันมักมีการเปลี่ยนแปลง Environment ต่างๆ เกิดขึ้นเสมอ เช่น Requirement change, Technology change เป็นต้น

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

เมื่อเกิดข้อผิดพลาดขึ้นจะมีผลกระทบต่องานเพียงส่วนย่อยที่กำลังดำเนินการอยู่เท่านั้น ไม่ใช่กระทบหมดทั้งโครงการ วิธีการทำงานเช่นนี้เรียกการทำงานแบบ Incremental จะเห็นว่าการทำงานแบบ Incremental & Iteration จะให้ผลดีกว่าการทำงานแบบดั้งเดิมหรือ Water fall model(มีความเสี่ยงมากกว่าเนื่องจากหากพบข้อผิดพลาดขึ้น จะมีผลกระทบกับโครงการมากกว่า) ดังนั้นในยุคปัจจุบันจึงนิยมที่จะทำงานโดยอาศัยหลัก Incremental & Iteration

Incremental & Iteration บ่อยๆ ครั้งที่นำมาใช้ร่วมกันอย่างสับสน แต่มันมีข้อแตกต่างกันกล่าวคือ
Incremental จะเป็นการทำงานโดยอาศัยการเพิ่มเติมส่วนงานเข้าไปในงานเดิมเรื่อยๆ เพื่อให้มีความสมบูรณ์มากขึ้น เช่นการสร้างบ้านที่ค่อยๆ มีการต่อเติมส่วนประกอบย่อยเข้าไปหลังจากทำงานส่วนหนึ่งเสร็จไปแล้ว เช่นสร้างห้องน้ำ ต่อด้วยห้องนอน ประตูเป็นต้น

การทำงานในปัจจุบันมักพบว่าโปรเจคต่างๆ จะมีขนาดใหญ่ ดังนั้นจึงนิยมทำการแบ่งงานออกเป็นโปรเจคย่อยๆ หลายๆ ส่วน(Slice or minimize project) แต่ละส่วนก็จะมีการทำการวนทำซ้ำ(Iteration) และการเพิ่มเติมเข้าไปรายละเอียดหรืองานเข้าไปในงานเดิม (Incremental) การแบ่งส่วนงานออกเป็นงานย่อยจะส่งผลดี คือ

1. การแบ่งส่วนงานจะสามารถทำงานร่วมกับ use case จำนวนมากได้
2. ลดความเสี่ยงในการทำงาน(Deal with important risk)


Risk Profile of an Iterative Development

Use case Analysis Model :
วัตถุประสงค์ของ Analysis model
1. ต้องการแยกการวิเคราะห์ระบบ
2. ต้องการภาพรวมของระบบ(Integrated part)
3. ต้องการทราบวิธีการอื่น(ถ้ามี) (Alternative Solution)
4. ศึกษาเพื่อสร้างระบบที่เกี่ยวข้องกับระบบ หรือสิ่งที่มีอยู่แล้ว( Legacy system)

UML จะประกอบไปด้วย Object ต่างๆ มากมาย ดังนั้นจึงจะอธิบายความหมายของ Object ก่อน

Object
Definition
1. สิ่งต่างๆ ที่มีอยู่ในโลกแห่งความเป็นจริง
2. สิ่งต่างๆ ที่สัมผัสได้ เช่น รถของนาย ก
3. กระบวนการต่างๆ เช่น การจองห้องพัก การทดสอบรถยนต์
4. ความสัมพันธ์ต่างๆ เช่น สัญญาฉบับหนึ่ง
5. คำนามต่างๆ ซึ่งสามารถกำหนดนิยามได้
6. Cyberspace (Electronic money, cash etc.)

องค์ประกอบของ Object
1. ชื่อของ Object
2. ข้อมูล Static structure เช่น ยี่ห้อ รุ่น
3. พฤติกรรมของวัตถุ

Class Definition
กลุ่มของ Object ซึ่งมีข้อมูล และมีพฤติกรรมเหมือนกัน เช่น Class ของรถยนต์ ประกอบด้วยรุ่น ยี่ห้อ เป็นต้น

Object Orientation
1. แนวความคิดพื้นฐานในการสร้างระบบ หรือ Software โดยพิจารณาปัญหาในโลกแห่งความเป็นจริง ว่าประกอบไปด้วยวัตถุ(Object) ต่างๆ มาทำงานร่วมกัน
2. การเข้าถึงข้อมูลของ Object ใดๆ จะต้องกระทำผ่านทางพฤติกรรมของ Object นั้นเท่านั้น
3. การกำหนดประเภทพฤติกรรม/ข้อมูลของObject จะทำให้สามารถควบคุมการเข้าถึงข้อมูลจากภายนอก Object ได้

Symbol in Analysis model

1. Boundary Class (ส่วนติดต่อผู้ใช้)
2. Control class(ส่วนควบคุม)
3. Entity Class(ใช้เก็บข้อมูล)

Building Blocks of the UML
UML สามารถแบ่งองค์ประกอบออกเป็น 3 กลุ่ม ดังนี้
1. Things คือ สัญลักษณ์หรือสิ่งต่างๆ ที่นำมาใช้สร้าง Diagram UML แบ่งออกเป็น 4 หมวด คือ
...1.1. Structural Things หรือ หมวดโครงสร้าง เป็นคำนามใช้สำหรับ uml ส่วนใหญ่จะเป็นส่วน static ของ ได้ แก่ Use case , Interface , Class ,Collaboration , ...Component , Node

...1.2. Bahavioral Things หรือ หมวดพฤติกรรม ได้แก่ส่วนที่เป็น dynamic แสดงถึงพฤติกรรมของระบบ ประกอบด้วย 2 ส่วนใหญ่ๆ คือ
......... - Interaction
......... - state machine
...1.3. Grouping Things หรือ หมวดการจัดกลุ่มหมู่ ได้แก่ package
......... - package
...1.4. Annotation Things หรือ หมวดคำอธิบาย ได้แก่ note
......... - note
2. Relationships ความสัมพันธ์ใน UML ประกอบไปด้วย
...2.1. Dependency หรือ ความขึ้นอยู่ต่อกันจะให้ความหมายว่าเมื่อเกิดการเปลี่ยนแปลงที่ส่วนหนึ่งแล้วจะส่งผลกระทบถึงอีกส่วนหนึ่งที่ลากเส้นมาสัมพันธ์กัน เช่น ...........การเปลี่ยนแปลงของโรงเรียนจะมีผลกระทบของนักเรียนเป็นต้น

...2.2. Association หรือ ความสัมพันธ์จะแสดงถึงความสัมพันธ์ระหว่าง Object ความสัมพันธ์ยังสามารถแยกออกเป็นความสัมพันธ์แบบธรรมดา ความสัมพันธ์แบบ ...........Aggregration, Composite,ทิศทางความสัมพันธ์ นอกจากนั้นยังสามารถกำหนด multiplicity ให้กับความสัมพันธ์ได้อีกด้วย

...2.3. Generalization หรือ การสืบทอดคุณสมบัติ หรือ Inheritance นั่นเอง

...2.4. Realization หรือ การทำให้ทำงานได้จริง เช่น Interface ถูก Realize โดย Class , Use case ถูก Realize โดย Collaboration

3.Diagrams


Diagram ของ UML แบ่งออกได้เป็น 9 Diagram หลัก ดังนี้ คือ

1. Use case Diagram
ในการพัฒนาระบบงานใดๆ นั้น การเก็บรวบรวมความต้องการของผู้ใช้มีความสำคัญมาก และจะทำในระยะแรกๆ ของการพัฒนาระบบงานเสมอ Use case diagram เป็น Diagram ที่ทำหน้าที่ Capture requirement
....
1.1 เป็นเทคนิคในการสร้างแบบจำลองเพื่อใช้อธิบายหน้าที่ของระบบใหม่ หรือระบบปัจจุบัน
....1.2 กระบวนการสร้าง Use case เป็นแบบ Iteration
....1.3 ความต้องการของระบบจะได้จาก ลูกค้า/ผู้ใช้ + ผู้พัฒนาระบบ
....1.4 องค์ประกอบจะมี Use case, Actor, Use case Relation และ System

ตัวอย่าง Use case Di diagram ที่สร้างจาก visual uml


องค์ประกอบของ use case

use case และ ความสัมพันธ์

2. Sequence Diagramะบอกลำดับการทำงานของระบบ โดยมี Object และ เวลาเป็นตัวกำหนดลำดับของงาน


ตัวอย่าง Sequence Diagram ในขั้นตอนของการ Analysis


ตัวอย่าง Sequence Diagram ในขั้นตอนของการ Design


Sequence diagram เป็น Diagram ซึ่งแสดงปฏิสัมพันธ์(Interaction) ระหว่าง Object ตามลำดับของเหตุการณ์ที่เกิดขึ้น ณ เวลาที่กำหนด message ที่เกิดขึ้นระหว่าง class จะสามารถนำไปสู่การสร้าง method ใน class ที่เกี่ยวข้องได้ จากตัวอย่าง Sequence ข้างต้นจะทำการ Design สำหรับการทำรายการบัญชีการเงินของธนาคาร โดยจะเริ่มจากหน้าจอ JSP ซึ่งถือเป็น User Interface(UI) ประเภทหนึ่ง จะทำหน้าที่ติดต่อกับผู้ใช้ เพื่อรับข้อมูลจากการใช้งานโดย User จากนั้น เมื่อกดปุ่มส่งคำสั่งใดๆ ผ่านหน้าจอ JSP ก็จะทำการเรียกใช้ Servlet โดยเรียกผ่าน Method doPost ของ Account Servlet และทำการส่งค่าและเรียกใช้ Class ต่างๆ ที่เกี่ยวข้องเพื่อทำการประมวลผลตาม business process ต่อไป Servlet และ Class ที่ทำการประมวลผลต่างๆ จึงเป็นตัวควบคุมการทำงาน หรือ Controller นั่นเอง ส่วน Class ที่ทำหน้าที่เก็บข้อมูลต่างๆ จะเรียกว่า Entity Class

3. Collaboration Diagramำหน้าที่เช่นเดียวกับ Sequence diagram แต่รูปแบบและลักษณะการเขียนจะต่างกัน หรือ อาจกล่าวได้ว่า Collaboration diagram ก็คือรูปอีกรูปแบบหนึ่งของ Sequence diagram เมื่อได้ sequence diagram แล้ว tool บางชนิดสามารถ generate collboration diagram ให้ได้เลย หรือ ในทางกลับกันเมื่อสร้าง Collaboration diagram เสร็จแล้ว ก็จะสามารถ generate sequence diagram ได้ โดยอัตโนมัติ ซึ่งถือว่าทั้ง 2 diagram สะท้อนภาพกันและกันอยู่นั่นเอง

ตัวอย่าง Collaboration diagram ที่สร้างจาก visual uml

4. State Diagram ประกอบด้วย State ต่างๆ ของ Object และเหตุการณ์ต่างๆ ที่ทำให้สถานะของ Object เปลี่ยนและการกระทำที่เกิดขึ้นเมื่อสถานะของระบบเปลี่ยนไป สามารถบอกสถานะของ Object ได้ โดยจะให้ความสนใจว่า ณ เวลาใดๆ Object นั้นมี status เป็นแบบใด
ตัวอย่าง State diagram ที่สร้างจาก visual uml

5. Activities Diagram แสดงลำดับ กิจกรรมของการทำงาน(flow) สามารถแสดงทางเลือกที่เกิดขึ้นได้ Activity diagram จะแสดงขั้นตอนการทำงานในการปฏิบัติการ โดยประกอบไปด้วยสถานะต่างๆ ที่เกิดขึ้นระหว่างการทำงาน และผลจากการทำงานในขั้นตอนต่างๆ

ตัวอย่าง Activity diagram ที่สร้างจาก visual uml

6. Class Diagram ประกอยด้วย Class และความสัมพันธ์ต่างๆ ระหว่าง Class เช่น Dependency, generalization, association เป็นต้น Class Diagram ยังสามารถทำการแสดงรายละเอียดภายใน Class แต่ละ Class ได้ว่ามี Method อะไรบ้าง Field และ Attribute เป็นอย่างไร

จากแผนภาพตัวอย่างข้างต้นหมายความว่า Class Process Control ทำการ Extends หรือ Generalize มาจาก Class API ซึ่งจะมีผลทำให้ Class ProcessControl มีคุณสมบัติของ Class API นั่นคือมี Attribute และ method ของ Class API อยู่ใน Class ProcessControl สามารถเรียกใช้งานได้ทันที โดยไม่ต้องเขียน attribute และ method เพิ่มใน class ProcessControl ซ้ำอีก

ตัวอย่าง Class diagram ที่สร้างจาก visual uml


7. Object Diagram ประกอบด้วย Object และ Relation ระหว่าง Object โดยแต่ละ Object จะแสดง Instance oของแต่ละ class ที่มีในระบบ และความสัมพันธ์ต่างๆ ระหว่าง Class เช่น Dependency, generalization, association จะมีลักษณะเช่นเดียวกับใน Class diagram

จะเห็นว่า Object diagram จะเป็น Instance ของ Class ซึ่งจะมีชื่อและ ข้อมูลเก็บอยู่ในขณะที่ Class จะเป็นเพียงตัวแบบที่ยังไม่มีการสร้าง Object หรือ Instance

8. Component Diagram เป็น Diagram ซึ่งแสดงโครงสร้างทางกายภาพของ Software โดยจะประกอบด้วยองค์ประกอบซึ่งอยู่ในรูปต่างๆ เช่น Binary, text และ executeable ภายใน Component Diagram ก็จะมีความสัมพันธ์แสดงอยู่เช่นเดียวกับ Class diagram, Object diagram


9. Deployment Diagram เป็นสิ่งที่สามารถทำการแสดงระบบสถาปัตยกรรมของ Hardware/Software ตลอดจนความสัมพันธ์ระหว่าง hardware/software



*** แหล่งข้อมูลเพิ่มเติมสำหรับ UML
- http://www.rational.com
- http://www.thaiall.com
- more links