wut@sun blog

วันจันทร์ ก.พ. 04, 2008

LAMP - Thai Edition

LAMP (Software Bundle)

บทนำ

            ช่วงที่ผ่านมาเราคงได้เห็นคำว่า LAMP ในข่าวของ IT บ่อยๆ แล้วที่น่าจะเห็นได้ชัดมากๆ ก็มีช่วงที่ Sun Microsystems Inc ได้เข้าซื้อควบรวมกิจการของ MySQL AB ซึ่งเป็นบริษัทที่ผลิตดาต้าเบส MySQL ที่เป็นฟรีดาต้าเบสซึ่งได้รับความนิยมสูงสุด และในตัว M ใน LAMP นั้นได้แทนความหมายของ MySQL นั่งเอง และในความหมายทั้งหมดของ LAMP นั้นจะประกอบไปด้วย

 

L นั้นได้อ้างอิงถึง Linux ซึ่งเป็นระบบปฏิบัติการ

A นั้นได้อ้างอิงถึง Apache ที่เป็น Web Server

M นั้นได้อ้างอิงถึง MySQL ที่เป็นดาต้าเบส

P นั้นได้อ้างอิงถึง PHP หรือบางครั้งอาจจะแทน Perl หรือ Python และสามารถที่จะอ้างอิงไปถึง Programming Language ได้ ที่ได้ทำหน้าที่เป็น Application Server เป็นหลัก

 

การรวมกันของชุดของเทคโนโลยีเหล่านี้ โดยปกติแล้วนิยมใช้เพื่อเป็นระบบพื้นฐาน (Infrastructure systems) รองรับการสร้างระบบ Web ที่ใช้งานกัน ต่อมาเพื่อความสะดวกจึงมีการนำเอาแต่ละตัวของ LAMP มารวมกันเป็นชุดของซอฟต์แวร์ เพื่อให้ง่ายต่อการติดตั้งและใช้งาน เพราะหากนำมาติดตั้งเอง อาจจะต้องใช้ความสามารถการทำให้แต่ละส่วนนั้นทำงานด้วยกันได้อีก เนื่องด้วยแต่ละส่วนนั้น เป็นชุดโปรแกรม Open Source ที่มีความนิยมมากๆ ในแต่ละหน้าที่ของแต่ละส่วนดังนั้นการออกแบบในเบื้องต้นนั้น ไม่ได้ออกแบบมาเพื่อการทำงานร่วมกันแบบเฉพาะ แต่เมื่อมีการกำหนดชุดของ LAMP ขึ้นมาก็ทำให้ผู้ที่นำเอาไปใช้งานมีความสะดวกมากขึ้น

 

ประวัติความเป็นมา

            LAMP เป็นสิ่งที่เริ่มต้นมาตั้งแต่ต้นปี 1990 ด้วยความสามารถของ Common Gateway Interface (CGI) ด้วยเทคโนโลยีนี้จะทำให้ผู้ใช้เว็ปแอพปริเคชั่นสามารถเรียกใช้งานไปที่เว็บเซิฟเวอร์โดยการใช้ Web browser ได้ ซึ่งปกติผลที่แสดงผ่าน Web browser นั้นจะอยู่ในรูปของข้อมูลแบบ Static ซึ่งเป็นผลจากการประมวลข้อมูลที่มีการเปลี่ยนแปลงด้วยตัวของแอพปริเคชั่นที่สร้างขึ้นมา ด้วยลักษณะงานข้างต้นนั้นก็ได้มีเทคโนโลยีมากมายที่สร้างขึ้นมาเพื่อรองรับความต้องการ ภาษา Script ก็เป็นตัวเลือกแรกๆ ของโปรแกรมเมอร์ที่ไว้สร้างการแสดงผลโดยจัดการกับรูปแบบของข้อมูลที่ประมวลผลแล้วจากเว็บเซิฟเวอร์ ซึ่งทำให้การออกแบบระบบที่แพร่หลายในปัจจุบันก็นิยมที่จะใช้ภาษา Script เป็นตัวช่วยจัดการสร้างการแสดงผล

            ในปี 1998 Michael Kunze ได้ใช้ตัวย่อ LAMP ขึ้นในบทความของ German Computing Magazine ที่ซึ่งบทความนี้ได้เขียนถึงชุดของฟรีซอฟต์แวร์ที่สามารถทำงานด้านเว็บแอพปริเคชั่นได้เช่นเดียวกับชุดที่ขายในท้องตลาด ซึ่งทาง Kunze ได้ใช้วิธีการใช้ตัวย่อ LAMP เพื่อให้เป็นที่น่าสนใจในวงการ IT ที่วิธีการใช้ตัวย่อจะแพร่หลายได้ง่าย ทำให้มีการเปิดช่องทางการขยายตัวของชุดของฟรีซอฟต์แวร์นี้ได้ขยายไปรวดเร็วมากขึ้น ต่อมาทาง O’Reilly และ MySQL AB ก็พยายามที่จะโปรโมทให้มีความแพร่หลายมากๆ ขึ้นผ่านตัวย่อ LAMP อีก ซึ่งทำให้ MySQL AB ได้ผลประโยชน์ในการขยายฐานผู้ใช้งานมากขึ้นนั่งเอง

 

ชุดของ Software

Linux (L)

            เป็น Operating system ที่มีลักษณะคล้ายกับ Unix Operating system ซึ่งเป็น Opensource Operating system ในปัจจุบันนี้ก็มีหลายๆ ผู้ผลิต ที่ได้รับความนิยมก็มีดังต่อไปนี้

            Redhat ที่เป็นมีผลิตภัณท์ Fedora, Redhat Enterprise Linux

            http://www.redhat.com

            http://fedoraproject.org

            Ubuntu Linux ที่มีผลิตภัณท์ Ubuntu Linux

                        http://www.ubuntu.com

            Novell ที่มีผลิตภัณท์ SUSE Linux Enterprise

                        http://www.novell.com/linux

            และอีกมากมายหลายจากหลายๆ ผู้ผลิต ดังต่อไปนี้

                        http://en.wikipedia.org/wiki/List_of_Linux_distributions

 

* ผ��ิตภัณท์บางผู้ผลิตไม่ได้เป็นฟรีซอฟท์แวร์แล้ว โปรดดูรายละเอียดจากเว็บไซค์ของผู้ผลิตนั้นๆ

 

Apache HTTP Server (A)

            เป็นฟรีซอฟท์แวร์ที่ทำหน้าที่เป็นเว็บเซิฟเวอร์หรืออีกนัยหนึ่งคือ Opensource HTTP server ที่เป็นผลผลิตจากกลุ่มของ Opensource ที่ใหญ่และแพร่หลายมาก กลุ่มนี้คือ Apache Foundation ที่มีผลิตภัณท์ Opensource มากมายเพื่อรองรับการทำงานบนเว็บซึ่งรองรับระบบปฏิบัติการหลากหลายไม่ว่าจะเป็น Solaris, Unix, Linux หรือ Microsoft Windows รายละเอียดของ Apache HTTP Server สามารถดูได้เพิ่มเติมที่

            HTTP Server - http://httpd.apache.org

            Apache Foundation - http://www.apache.org

 

MySQL (M)

            ทำหน้าที่หลักเป็นดาต้าเบสหรือ Database Management System (DBMS) ซึ่งมีคุณสมบัติพร้อมในการรองรับการใช้งานแบบหลายๆ ผู้ใช้งาน (Multi Users) ด้วยความสามารถในการแบ่งการทำงานเป็นหลายๆ Thread  (Multithreaded)

ด้วยที่ MySQL ทำมาเพื่อรองรับกลุ่มผู้ใช้แบบ Open Community ดังนั้นระบบปฏิบัติการที่รองรับการมีได้หลากหลายเช่นกัน ไม่ว่าจะเป็น Solaris, Unix, Linux, MacOSX หรือบน Microsoft Windows สามารถศึกษารายละเอียดเพิ่มเติมได้ที่

            MySQL Database Server - http://dev.mysql.com

            MySQL ABhttp://www.mysql.com

 

PHP (P)

            PHP ได้ความหมายเต็มมาจาก Hypertext Preprocessor ซึ่งเป็นแอพปริเคชั่นที่ทำหน้าที่เป็น Server Side Application โดยการออกแบบการสร้าง PHP นั้นคือการทำหน้าที่ดึงเอาข้อมูล Dynamic ในส่วนของด้าน Server มาสร้างเป็น Web pages ที่แสดงข้อมูลในรูปแบบ Static แล้วส่งไปแสดงผลที่ฝั่งของ Web browser แต่นอกเหนือจากการออกแบบการทำงานในข้างต้นแล้ว PHP ก็ยังมีความสามารถในการทำงานผ่าน command line และในแบบรูปแบบ Standalone Graphical Application อีกด้วย ดูข้อมูลอื่นๆ เพิ่มเติมของ PHP ได้ที่

            PHP - http://www.php.net

 

ความหมายอีกหลายๆ แบบของ LAMP

            บางครั้งก็มีการนำคำย่อของ LAMP ไปใช้กับแอพปริเคชั่นอื่นๆ ที่นอกเหนือจากที่กล่าวไว้ข้างต้น ตัวอย่างเช่น การนำคำย่อ P ไปแทนด้วย Perl หรือ Python ที่ทำหน้าที่ Server-Side Application เช่นกัน และในบางครั้งก็ขยายขอบเขตรวมไปถึง Ruby ด้วยเมื่อมองในแง่ของโครงสร้างการทำงาน

และบางกลุ่มก็ได้มีการสลับการอ้างอิงของต่อย่อเพื่อให้เข้าได้กับความหมายของซอฟต์แวร์ที่กลุ่มตนเลือกใช้ ตัวอย่างเช่น จะให้ M แทนส่วนที่เป็น mod* perl หรือ mod python และให้ P แทนด้วย PostgreSQL ที่ทำหน้าที่เป็นดาต้าเบสซึ่งเป็นฟรี DBMS เช่นกัน

            บางกลุ่มก็มีการเปลี่ยนคำย่อ LAMP ไปเป็นอย่างอื่น แต่มีรูปแบบของโครงสร้างแบบเดียวกัน อย่างเช่นได้เปลี่ยนไปเป็น LAMR ซึ่ง R นั้นได้แทน Ruby on Rails ที่เป็นซอฟต์แวร์ทำหน้าที่ Server-Side Application เช่นกันกับ PHP

            นอกจากนั้นก็มีการเรียกขานในรูปแบบต่างๆ เพื่อให้สอดคล้องกับระบบที่กลุ่มนั้นๆ ได้ใช้งานเช่นในกลุ่มที่ใช้ Mac OSX เป็น Operating systems นั้นก็กำหนดคำว่า AMP ซึ่งได้ตัวเอา L ที่มีความหมายเป็น Linux ออกไป

 

* mod เป็นส่วนเพิ่มในซอฟต์แวร์ (Plugins) เพื่อจะขยายขีดความสามารถของซอฟต์แวร์นั้นๆ ออกไปได้อีกเช่น mod perl ก็จะเป็นส่วนขยายเพื่อให้ Apache Web Server รองรับการทำงานกับ Perl ได้

วันอังคาร ก.ย. 04, 2007

Ruby on Rails (Thai Edition)

Ruby on Rails (Thai Edition)

หลังจากที่เราได้คุ้นเคยกับตัวภาษา Ruby ในเบื้องต้นแล้วนั้น บทความนี้จะเป็นรายละเอียดเพิ่มเติมในส่วนการนำไปใช้งานเพื่อสร้าง Business Application ต่างๆ จากภาษา Ruby ซี่งในปัจจุบัน นิยมที่จะใช้ รูปแบบหรือโครงร่าง Application (Framework) เพื่อทำให้เราสร้าง Application ได้รวดเร็วมากขึ้น และ Framework ที่นิยมมากที่สุดของ Ruby นั้นคือ Ruby On Rails ซึ่งในบทความนี้จะได้แนะนำให้รู้จักในรายละเอียดเบื้องต้น พร้อมกับประวัติความเป็นมาของ Ruby, Rails, JRuby และ JRuby on Rails

Ruby

 

ก่อนที่จะเข้าสู่รายละเอียดของส่วนอื่นๆนั้น จะขอย้อนไปสรุปถึงรายละเอียดของภาษา Ruby ดังต่อไปนี้ (ข้อมูลละเอียดหาได้จากบทความอะไรคือ Ruby ตอนที่ 1 )

Ruby เป็นภาษาคอมพิวเตอร์ที่เป็นแบบ Object-Oriented Programming Language ที่ตัวของภาษาเองนั้นมีความง่าย ซึ่งทำให้การเขียนโปรแกรมนั้นมีความสนุกและมีความสละสลวย ตัวของภาษา Ruby นั้นสร้างมาจากการรวมเอาข้อดี ของภาษา script ต่างๆ มารวมกัน โดยการนำเอาความคิดเบื้องต้นส่วนของ Object-Oriented มาจากตัวภาษา Smalltalk ไปผนวกเข้ากับความสามารถด้าน Script ของภาษา Python ที่ใช้งานง่ายและเรียนรู้ได้รวดเร็ว และพร้อมทั้งรวมส่วนแนวคิดดีๆของภาษา Perl เข้ามาด้วย
Ruby ได้เริ่มต้นสร้างขึ้นมาช่วงต้นปี 1990 ในประเทศญี่ปุ่น ด้วยข้อดีของตัวภาษา Ruby ทำให้มีความแพร่หลายได้รวดเร็วมากๆในช่วงเวลา 2-3 ปีต่อมานั่นเอง

เราสามารถที่จะทดลองใช้และเรียนรู้ Ruby ได้อย่างรวดเร็วได้ที่ website
http://tryruby.hobix.com
และสามารถหาข้อมูลเพิ่มเติมได้ที่
http://www.ruby-lang.org/en/documentation

JRuby

 

ประวัติและที่มา

    ในปี 2001 Jan Arne Peterson ได้สร้างตัวภาษา JRuby ขึ้นมาและมีการสานต่อโครงการโดยที่อ้างอิงจาก Code ของ Ruby 1.6 C มาเรื่อยๆ จนกระทั่งถึง Ruby 1.8  ในปัจจุบัน ซึ่งกลุ่มที่พัฒนานั้นก็มี Charless Nutter, Thomas Enebo, Ola Bini และ Nick Sieger และเมื่อเดือนกันยายน 2006, Sun Microsystems ได้จ้างทั้ง Nutter และ Enebo มารับหน้าที่รับผิดชอบหลักเกี่ยวกับโครงการ JRuby เพื่อพัฒนาให้ทันตาม Ruby ในรุ่นหลังๆ และพัฒนาให้มีความเข้ากันได้มากขึ้นเรื่อยๆ

JRuby คืออะไร

    JRuby เป็น Ruby interpreter ที่ทำงานอยู่บน Java Virtual Machine โดยสามารถทำงานบน Java SE version 1.4.2 เป็นต้นไป ซึ่งโครงงาน JRuby นี้เป็นการนำเอาคุณสมบัติต่างๆของภาษา Ruby มาปรับใช้ความสามารถของ Java ที่มีความแพร่หลายในระบบงานธุรกิจที่มีอยู่แล้วในปัจจุบัน ซึ่งเป็นการขยายความสามารถของ Ruby ให้มากขึ้นในการปรับไปใช้ใน Application ต่างที่ทำงานในระบบงานที่เป็นระบบงานธุรกิจที่มีอยู่ 
โครงการของ JRuby นั้นเป็น free software ที่มี License แบบ CPL/GPL/LGPL และในต้นปี 2006 มีการสร้าง JRuby เพื่อทำให้รองรับ Performance ที่ดีมากขึ้นและสามารถ Compile เป็น Java bytecode ได้ ซึ่งจะทำให้สามารถนำเอาภาษา Ruby ขึ้นไปใช้งานในระบบธุรกิจได้โดยมีการทำงานที่รวดเร็วเช่นเดียวกับภาษา Java
    JRuby ได้ออกแบบเพื่อทำงานเข้ากับ Ruby แบบการผสมผสานของ Virtual Machine (Mix-mode virtual machine)  ที่ทำให้ Code แบบ Ruby นั้นสามารถทำงาน Interpreted แบบตรงๆ ได้ กับ Java Virtual Machine และก็ยังรองรับการ compile แบบ Just-In-Time (JIT) ไปเป็น Java bytecode ได้ หรือรองรับวิธีการ Compile แบบ Ahead of time compiled (AOT- ลักษณะ precompile ก่อนจะถูกเรียกให้ทำงาน) แต่ในปัจจุบันนี้การพัฒนา JRuby นั้นเพิ่งจะสามารถรองรับการทำงานแบบ Interpreted mode เท่านั้นที่รองรับคุณสมบัติหรือ Ruby’s constructs ทั้งหมดได้ ในส่วนของ AOT/JIT ยังรองรับได้ Ruby’s contructs ได้เป็นบางส่วนเท่านั้น แต่ทั้งนั้นกลุ่มนักพัฒนาก็มีการพัฒนาเพิ่มขึ้นตลอดเรื่อยๆ ในทุกวันนี้

ตัวอย่างการใช้งานภาษา JRuby

    เมื่อนักพัฒนาต้องการสร้าง Application บนภาษา JRuby นั้นสามารถทำได้ง่ายมากกว่าภาษา Java ธรรมดาเพราะได้อาศัยโครงสร้างของตัว Ruby เป็นกลไกหลัก ทำให้มีความง่ายในการเขียน Code ซึ่งเป็นข้อเด่นที่ได้รับจากภาษา Ruby ดังตัวอย่างด้านล่างต่อไปนี้ที่แสดงตัวอย่างของการ Code ด้วยภาษา Java และภาษา JRuby ซึ่งผลของการทำงานจะได้ผลลัพธ์เหมือนกัน
ตัวอย่าง เมื่อพัฒนาด้วยภาษา Java

public class Filter {
  public static void main(String[] args) {
    List list = new java.util.ArrayList();
    list.add(“Tim";); list.add(“Ike";); list.add(“Tina";);
    Filter filter = new Filter();
    for (String item : filter.filterLongerThan(list, 3)) {
      System.out.println( item );
    }
  }

public List filterLongerThan(List list, int length) {
    List result = new ArrayList();
    for (String item : list) {
      if (item.length() <= length) { result.add( item ); }
    }

ตัวอย่าง เมื่อพัฒนาด้วยภาษา JRuby

list = [‘Tim’, ‘Ike’, ‘Tina’]
list.select {|n| n.length > 3}.each {|n| puts n}

=> ‘Tina’

ดังตัวอย่างเบื้องต้นนั้น จะเห็นได้ว่าความง่ายในตัวภาษา JRuby ที่ได้มาจากคุณลักษณะของภาษา Ruby นั้นทำให้การพัฒนา Application ต่างทำได้รวดเร็วมากกว่าในตัวของ Java เมื่อต้องการการเขียน Code เพื่อทำงานเหมือนๆ กัน

JRuby Programming

    JRuby นั้นเป็นการนำเอาข้อดีของ Ruby interpreter มาใช้เพื่อให้นักพัฒนามีความง่ายแบบภาษา Ruby ในการพัฒนาเช่นเดิมบน Java Virtual Machine เพื่อให้ได้ความสามารถของ Java platform โดยที่ JRuby ยังคงแนวความคิดของภาษา Ruby ทั้งหมดไม่ว่าจะเป็นส่วนของ Object-Oriented Programming (OOP) หรือแม้แต่คุณสมบัติที่ทำให้นักพัฒนาสนุกสนานกับ Ruby ในเรื่อง duck-typing ที่เป็นคุณสมบัติเด่นๆ อีกจุดหนึ่งของภาษา Ruby (ความสนุกสนานในการโต้ตอบแบบ Interactive สามารถไปทดลองคุณสมบัติของภาษา Ruby นี้ได้ที่ http://tryruby.hobix.com )

ตัวอย่างการเรียกใช้ Java จากภาษา JRuby

require 'java'

include_class "javax.swing.JFrame"
include_class "javax.swing.JLabel"

frame = JFrame.new()
frame.getContentPane().add(JLabel.new("This is an example.";))
frame.pack()
frame.setVisible(true)

ตัวอย่างข้างต้นนี้ เป็นการดึงเอา class ต่างๆ ไม่ว่า javax.swing.JFrame และ javax.swing.JLabel มาใช้โดยเราต้องประกาศที่จะใช้ Java จาก require ‘java’ หลังจากนั้นก็นำเอา object ที่สร้างไปใช้งานในรูปแบบลักษณะการเขียนแบบ Ruby นั่นเอง

และใน JRuby 0.9.1 นั้นการเรียกใช้จะทำได้ง่ายมากขึ้น โดยสามารถที่จะเรียกใช้ Object ต่างๆ ของ Java เองโดยที่ไม่ต้องประกาศ include เข้ามา ดังตัวอย่างต่อไปนี้

require 'java'
 
frame = javax.swing.JFrame.new()
frame.getContentPane().add(javax.swing.JLabel.new("This is an example.";))
frame.pack()
frame.set_visible(true)

การเรียกใช้งาน JRuby จาก Java

    สามารถทำได้โดยง่ายตามมาตรฐาน JSR 223 ผ่านวิธีการเรียกใข้งาน Scripting ของ Java 6 หรือ Apache Bean Scripting framework ได้ ซึ่งรายละเอียดสามารถศึกษาเพิ่มเติมได้จาก
https://scripting.dev.java.net/
http://jakarta.apache.org/bsf/

การทดลองใช้งาน

ในการใช้งาน JRuby นั้นจะต้องติดตั้งชุด software เพื่อทดลองใช้หรือเพื่อการพัฒนาดังต่อไปนี้
ติดตั้ง Java Development Toolkit (JDK) ไม่ต่ำกว่า version 1.4.2
Download ตัวโปรแกรมจาก JRuby’s codehaus (http://jruby.codehaus.org)
unzip ตัวโปรแกรมที่ download และไปติดตั้งไว้ที่ Folder เช่น /home/user/jruby
เมื่อติดตั้งเสร็จจะต้องกำหนดค่าของ JAVA_HOME และ JRUBY_HOME เป็นตัวแปรค่า environment ในระบบปฏิบัติการ เช่น
    JAVA_HOME=/usr/java/jdk1.5
    JRUBY_HOME=/home/user/jruby
JRuby สามารถทำงานแบบ Scripting ใน Java application ได้โดย จะต้อง copy class ของ JRuby คือ jruby.jar (ใน JRuby package) ไปที่ใน classpath ของ Java runtime ที่ <JAVA_PATH>\jre\lib\ext หรือเราสามารถกำหนดเป็นตัวแปรค่า environment ได้ที่ CLASSPATH

เราสามารถที่จะหาข้อมูล JRuby เพิ่มเติมและทดลองใช้ได้ที่
http://jruby.codehaus.org

ข้อมูลเพิ่มเติมจาก Blog ผู้ร่วมพัฒนาได้ที่
Charles Nutter - http://headius.blogspot.com
Thomas Enebo - http://www.bloglines.com/blog/ThomasEEnebo
Ola Bini - http://ola-bini.blogspot.com
Nick Sieger - http://blog.nicksieger.com

Rails

ดังที่กล่าวในข้างต้นการสร้าง Application จากภาษาใดๆ ในยุคนี้ไม่ว่าเป็นภาษาคอมพิวเตอร์ใดๆ ก็มีการนำเอา Framework ที่มีการพัฒนาไว้อย่างแพร่หลายมาพัฒนาต่อเพื่อให้มีความรวดเร็วในการพัฒนา เป็นมาตรฐานในการสร้าง Business Application ต่างๆ Rails ก็เช่นกันได้รับการสร้างและพัฒนาเพื่อให้เป็น Framework ของภาษา Ruby และ Rails เองก็ได้รับความนิยมมากในกลุ่มของการพัฒนาภาษา Ruby

ประวัติและที่มา

David Heinemeier ได้คิด Framework Rails จากโครงงาน Basecamp (http://basecamphq.com) ที่เป็น Project Management tool ในบริษัท 37signals (http://www.37signals.com) ที่เขาทำงานอยู่ ซึ่งบริษัท 37signals นี้เป็นบริษัทที่สร้างและจำหน่าย web application โดย David ได้สร้าง Rails เป็น Open-source project เพื่อให้นักพัฒนาต่างๆ ได้นำเอาไปใช้งานและพัฒนาต่อเนื่องจากโครงงานเริ่มต้นที่เขาได้ทำ โดย Rails ได้ประกาศตัวเมื่อเดือนกรกฏาคม ในปี 2004 และปรัชญาในการสร้างของ David นั้นมีอยู่ว่า

1. “Don’t repeat yourself (DRY)”
    การสร้าง Web application หนึ่งๆ นั้นหากจัดการเรื่องข้อมูลไม่เป็นกลุ่มก้อนจะทำให้เกิดความซับซ้อนมากๆ และทำให้นักพัฒนาต้องทำ Module ที่ซ้ำซ้อนกัน แต่หากเมื่อมีการจัดเก็บข้อมูลเป็นที่ชัดเจน จะทำให้มีความง่ายในการสร้าง ดังหลักการของการเขียน Program ที่ดีหรือ Best Practice การนำ Framework มาใช้งานจะช่วยลดปัญหาในจุดนี้ลงไปได้มาก เพราะ Framework จะเป็นตัวช่วยกำหนดอยู่แล้วทำให้นักพัฒนาไม่ต้องกังวลในจุดนี้มาก
ตัวอย่างเช่น ใน Rails นั้นการใช้ ActiveRecord นักพัฒนาไม่จำเป็นต้องกำหนดชื่อของ column ลงไปในการอ้างอิงใน class และปล่อยให้ Ruby เป็นฝ่ายจัดการดึงข้อมูลต่างๆ จาก database เอง เป็นต้น

2.  “Convention over Configuration” (ข้อกำหนดบน config)
    ในการใช้ Framework เพื่อสร้าง Web application ใดๆ นักพัฒนาเพียงต้องกำหนดสิ่งที่ต่างจาก Framework เท่านั้น เพื่อให้มีความรวดเร็วในการสร้าง Web application ตัวอย่างเช่น เมื่อสร้าง class “Sale” ใน Model เพื่อให้สอดคล้องกับชื่อของ Table ของ Database ที่มีชื่อว่า “Sales” แต่หากมีความต้องการที่จะปรับเปลี่ยนชื่อนั้น นักพัฒนาจะต้องเขียน code เพิ่มเติมในส่วนนั้นๆ เอง

3. “Agile development environment”
    เพื่อให้มีความสะดวกในการพัฒนา Web application นั้นๆ Framework ต้องรองรับการทำงานพัฒนาได้ง่าย ซึ่งต้องมีเครื่องมือเพื่อเพิ่มความสะดวกในการสร้าง Code และต้องมีความสามารถในการปรับปรุงแก้ไขพร้อมทั้งสามารถที่จะทดสอบ Deploy ให้ง่ายต่อวงจรการพัฒนาด้วย

และจากปรัชญาดังกล่าวทั้งหมดเป็นที่มาทำให้ David ได้สร้าง Rails ขึ้นมาและ Opensource ให้นักพัฒนาต่างๆ ได้นำภาษา Ruby ไปพัฒนา Application ที่มี Rails เป็น Framework

Technical Overview

ใน Rails นั้นใช้แนวความคิดสถาปัตยกรรมแบบ Model-View-Controller (MVC – ดูข้อมูลเพิ่มเติมได้ที่ http://en.wikipedia.org/wiki/MVC ) เพื่อจัดการโครงสร้างของ Application เช่นเดียวกับ Web application frameworks อื่นๆ ที่นิยมสร้างตามสถาปัตยกรรม MVC
Rails ใช้ scaffolding เป็นหัวใจหลักในการสร้างโครง Application ซึ่งทำให้การสร้างในส่วนของ logic และ views ที่ใช้สร้าง web แบบเบื้องต้น ทั่วไปทำได้ง่ายมากๆ โดยสามารถที่จะเรียกทดสอบได้โดยผ่านทาง Web Server ที่รองรับการทำงาน Rails

ตัวอย่างการสร้าง Rails Application

 

รูปที่ 1 ตัวอย่างโครงสร้างของ Rails

รูปที่ 1 จะเห็นโครงร่างของ Rails ที่มีการ Generate ไว้เพื่อรองรับการสร้าง Web application  จากตัวอย่างเราได้สร้าง Framework ของ Web application ที่ชื่อว่า myblogs ซึ่งมีโครงสร้างรายละเอียดคร่าวๆ ดังนี้
app/controllers จะเป็น Directory ที่จัดเก็บส่วนควบคุม (controller) ของ class ทั้งหมด ซึ่งส่วนของควบคุมนี้จะรองรับ Request ต่างๆ จากผู้เรียกใช้งาน
app/views จะเป็น Directory ที่จัดเก็บส่วนของการแสดงผลทั้งหมด โดยข้อมูลต่างๆที่นำมาแสดงนั้น Application จะทำหน้าที่แปลงข้อมูลเหล่านั้นเป็น HTML เพื่อนำไปแสดงที่ Browser ของผู้เรียกใช้งาน
app/helpers จะเป็น Directory ที่เก็บส่วนของ Class ที่เป็น helper เพื่อเป็นองค์ประกอบอื่นๆเพิ่มเติมสำหรับ Class ของ Model, View หรือ Controller ทำให้เราสามารถเขียน Class Model, View หรือ Controller ได้เล็กลง

และเครื่องมือที่จะสร้าง Code ของ Application แบบง่ายๆ ใน Rails คือการสร้าง Scaffold ดังตัวอย่างดังต่อไปนี้



 รูปที่ 2 การ Generate code ของ Ruby on Rails

ตัวอย่างข้างต้น Rails จะมีการสร้าง Files เพิ่มเติมในส่วนของ Model และ Controller จากตัวอย่างนั้น Rails จะสร้าง recipe.rb เก็บไว้ใน ../myblogs/app/models และสร้าง recipe_controller.rb ไว้ที่ ../myblogs/app/controllers

การนำเอา Rails Application ไปใช้งาน

    หลังจากที่ได้สร้าง Application ง่ายๆ จาก Rails แล้ว เราสามารถนำเอา Application ที่สร้างขึ้นมาทดลองใช้งาน โดยในการทำงานนี้จะต้องอาศัย Web server ที่เป็นตัวรองรับการทำงาน ปัจจุบันนี้ได้มีการพัฒนา Web server เพื่อรองรับการทำงานของ Rails หลายๆ ตัว และ Web Server ที่มีมากับชุดของ Rails เลยคือ “WEBrick” ซึ่งเราสามารถเรียกใช้ดังต่อไปนี้

 

รูปที่ 3 การเรียกการทำงานของ WEBrick ที่เป็น Web Server ในชุดของ Rails

และเมื่อ WEBrick Server ได้ทำงานแล้ว การทดสอบจะทำได้โดยผ่านทาง Web browser ทาง URL 0.0.0.0 ที่ Port 3000 ดังต่อไปนี้


รูปที่ 4 การเรียกใช้งาน WEBrick ผ่านทาง http://0.0.0.0:3000
และสามารถที่จะทดสอบกับ Web Application ที่เราทดลองทำได้โดย


รูปที่ 5 การเรียกใช้งาน Web application ที่ได้สร้างเป็นตัวอย่างผ่านทาง http://0.0.0.0:3000/recipe
เราสามารถที่จะหาข้อมูลและทดลองทำตามขั้นตอนได้ที่
http://www.onlamp.com/pub/a/onlamp/2006/12/14/revisiting-ruby-on-rails-revisited.html

พร้อมทั้งข้อมูลเพิ่มเติมได้ที่
http://www.rubyonrails.org/docs

 

JRuby on Rails

    เพื่อรองรับการทำงานที่เป็นระบบ Production และเพื่อให้เราสามารถนำ Rails ไปใช้งานในงานด้านธุรกิจได้จริงจังมากขึ้น จึงมีการพัฒนา JRuby on Rails เกิดขึ้น และนอกจากนั้น ยังมีหลายๆ เหตุผลที่นำ Rails มาทำงานบน Java Platform ดังต่อไปนี้
เป็นการทำให้ Rails มีประสิทธิภาพและความสามารถเพิ่มขึ้นด้วย Platform ของ Java โดย Rails สามารถใช้ J2EE application server ได้
ด้วยคุณสมบัติใหม่ของ JVM รุ่นใหม่ๆ และ JRuby ที่มีการพัฒนาต่อเนื่อง ทำให้ JRuby ทำงานได้เร็วกว่า MRI ที่เป็น Server ของ Rails
ทำให้มีการพัฒนาต่อเนื่องขยายกลุ่มของผู้ที่ใช้ Rails ไปยังนักพัฒนา Java  ผ่านทาง JRuby
ในปัจจุบันนี้การนำ Rails มาใช้ความสามารถของ Java Platform เป็นที่ยอมรับในแง่การรองรับและการเชื่อมต่อในระบบที่ต้องมีความสามารถในการขยายตัว ตัวอย่างเช่นการเชื่อมต่อ Database ที่ขยายตัวได้มากหรือระบบ Legacy ที่มีความหลากหลายมากๆ

JRuby on Rails with J2EE Server

การพัฒนา J2EE application Server ในปัจจุบัน (Project Glassfish - https://glassfish.dev.java.net) สามารถรองรับการทำงานกับ Rails ได้ โดยที่ Rails จะใช้ความสามารถของ Java Platform ได้อย่างเต็มที่ เช่น
การติดต่อกับ Database Connection ต่างๆ
การใช้งาน  Java Naming and Directory Interface (JNDI)
การติดต่อกับองค์ประกอบอื่นๆ ของ Java EE ดังเช่น

  • Java Persistence API (JPA)
  • Java Management Extensions (JMX)
  • Enterprise JavaBeans™ (EJB™)
  • Java Message Service (JMS) API
  • SOAP/WSDL/SOA


การพัฒนา Rails บน J2EE platform

ปัจจุบันมีเครื่องมือรองรับการพัฒนา Rails บน J2EE platform มากข���้น เครื่องมือเหล่านั้นมีความสามารถทำให้เรียกหรือโปรแกรมให้ Rails ทำงานบน J2EE platform เสมือนเป็นการพัฒนาโปรแกรม Java บน J2EE platform
ตัวอย่างการใช้งานเครื่องมือในการพัฒนา Rails บน Java IDE
Java Developement Toolkit - JDK 1.5.0_07
NetBeans Java IDE - NetBeans IDE 6.0 M10 (http://www.netbeans.org/community/releases/60/index.html)

อนาคตของ JRuby on Rails


    ด้วยโครงการ JRuby on Rails ยังอยู่ในสถานะเริ่มต้นและยังคงรอการพัฒนาเพื่อให้ IDE นั้นรองรับการทำงานที่สมบูรณ์มากขึ้น และต้องอาศัยความสามารถของ JRuby และ JVM แต่ก็มีแนวโน้มการพัฒนาที่รวดเร็วเช่นเดียวกับกลุ่มของ Ruby ที่มีความแพร่หลายมากๆ และได้รวมเอานักพัฒนาส่วนของ Java เข้าไปร่วมในโครงการด้วย

แหล่งข้อมูลเพิ่มเติมของ JRuby on Rails บน Java EE platform

JRuby on Rails demo
    http://blogs.sun.com/arungupta/entry/first_jruby_on_rails_app

    http://blogs.sun.com/arungupta/entry/screencast_web6_first_jruby_app

JRuby on Rails project update
    http://headius.blogspot.com/2006/03/jruby-progress-updates-jruby-on-rails.html

    http://www.headius.com/jrubywiki/index.php/JRuby_on_Rails

JRuby on Rails demo on JBOSS
    http://smartic.us/2007/8/11/smarticast-3-jruby-on-rails-on-jboss

JRuby on Rails information on Glassfish
    http://blogs.sun.com/whacko/entry/deploying_a_ruby_on_rails






วันจันทร์ พ.ค. 28, 2007

JavaFX Overview

JavaFx

 

        เนื่องจากความต้องการของการใช้งานทางด้าน interactive ของ content หรือ application หรือแม้แต่ services ต่างๆในโลกของอินเตอร์เน็ต และรูปแบบของตัว client ที่มีหลายหลาบชนิดในปัจจุบันนี้ ไม่ว่าจะเป็น โทรศัพท์มือถือ,  desktop, set-top-box หรือจะเป็น devices ใหม่ๆ ที่รองรับการใช้งานเครือข่ายทางด้านอินเตอร์เน็ต

ทำให้โปรแกรมเมอร์ในปัจจุบันนี้มีความยุ่งยากในการพัฒนาเพื่อรองรับความต้องการดังกล่าวข้างต้นมากๆ ดังความต้องการดังกล่าวข้างต้นทาง Sun Microsystems ได้ออกแบบผลิตภัณฑ์ใหม่คือ JavaFX ที่สร้างขึ้นด้วยเทคโนโลยี Java เพื่อให้โปรแกรมเมอร์สามารถสร้างรูปแบบการติดต่อแบบใหม่ที่ทำให้ผู้ใช้งานสามารถที่จะเชื่อมต่อไปยัง content, application หรือ services ต่างๆ ที่ผ่านทางอินเตอร์เน็ตได้ ไม่ว่าจะเป็น desktop, mobile device, set-top-box หรือกระทั่ง Blu-ray Disc

 

 

รูปที่ 1 แสดงให้เห็นถึงชุดของผลิตภัณฑ์ของ JavaFX ที่มีความสามารถในการสร้าง interactive content, application และการบริการ เพื่อรองรับไม่ว่าจะเป็น desktop, mobile device หรือแม้แต่ในห้องรับแขก

เค้าโครงของ JavaFX

        JavaFX นั้นเป็นผลิตภัณฑ์ที่สร้างจากความสามารถเด่นๆ ของตัวเทคโนโลยี Java ซึ่งจะได้ความสามารถของ Java ต่างๆ ไม่ว่าจะเป็น

การพัฒนาครั้งเดียวและนำไปใช้งานได้ทุกๆ ที่ (Write-Once-Run-Anywhere), ความสามารถในการนำไปใช้ในอุปกรณ์ที่แตกต่างกัน (portability), การรองรับความปลอดภัย (security model), รองรับการทำงานแบบการกระจาย (Distribution) และการนำไปเชื่อมต่อกับระบบงานที่เป็น enterprise (enterprise connectivity)

ในเบื้องต้นนั้น JavaFX จะประกอบไปด้วย

    JavaFX Script

ผลิตภัณฑ์นี้จะเป็นภาษา script ที่รองรับการทำงานเพื่อสร้างโปรแกรม interactive ที่มีความสามารถทางด้านการนำเสนอข้อมูลได้ดีโดยทำงานเพื่อดึงเอาข้อมูลต่างๆ มาประมวลและแสดงได้ในรูปแบบที่รองรับทางด้านภาพ เสียงและ animation ได้สมบูรณ์

    JavaFX Mobile

ส่วนผลิตภัณฑ์นี้จะเป็นชุดรวมสำเร็จของซอฟต์แวร์ที่ออกแบบมาเพื่อ mobile devices ให้รองรับความสามารถทางด้านการพัฒนา application ที่ยืดหยุ่นในการนำเสนอข้อมูลได้ง่าย

 

JavaFX Script

บทนำ

       ในยุคนี้ ความต้องการในการสร้างและพัฒนา internet application เพื่อให้บริการได้รวดเร็ว สามารถรองรับอุปกรณ์ได้หลากชนิดและต้องมีความปลอดภัยในการป้องกันข้อมูลนั้น ไม่ได้จำกัดว่าจะเป็นระบบที่มีขนาดเล็ก หรือระดับที่เป็น enterprise หรือแม้แต่ในกลุ่มของนักพัฒนา เองก็ตาม จุดนี้เองที่มีความต้องการ internet application ที่จะต้องไม่จำกัดรูปแบบของอุปกรณ์ที่มาเชื่อมต่อเพื่อใช้งาน ไม่มีการติดตั้งข้อมูลลงในอุปกรณ์นั้นๆ ด้วยเหตุผลทางด้านความปลอดภัยและความหลากของอุปกรณ์ และที่สำคัญต้องไม่ทำให้อุปกรณ์เหล่านั้น ทำงานได้ช้าลง

 

จากข้อความต้องการข้างต้นที่กล่าวมา JavaFX ได้รองรับความต้องการเหล่านั้น โดยที่มีความง่ายต่อการสร้าง internet application ที่มีความสามารถในการนำเสนอข้อมูลสูงในอุปกรณ์หลากชนิดกัน และผู้พัฒนาสามารถเข้าไปสู่กลุ่มของนักพัฒนาด้วยกันได้ (ที่มีจำนวน ณ ปัจจุบันประมาณ 6 ล้านคนทั่วโลก) เพื่อร่วมพัฒนา internet dynamic application ใหม่ๆที่พร้อมสำหรับการให้บริการทางด้านอินเตอร์เน็ตรูปแบบใหม่ๆ ได้

 

ข้อสรุปเด่นๆใน JavaFX Script

    เพื่อเพิ่มความสามารถในการผลิตของนักพัฒนา

    เป็นภาษาที่นักพัฒนาสามารถใช้การเรียนรู้เอง (intuitive language) ในออกแบบพัฒนา

    ลดการเขียน code

    ทำให้การวงจรการพัฒนาโปรแกรมทำได้รวดเร็วขึ้น

    ไม่ต้องมีการระบุหรือเรียกลักษณะเฉพาะแต่ละอุปกรณ์

 

รายละเอียดคุณลักษณะ JavaFX Script

       JavaFX script จะใช้การประกาศ Syntax เช่นเดียวกับภาษา Java ทั่วไปเพื่อกำหนดคุณลักษณะของ GUI (Graphic User Interface) ดังนั้นจะทำให้นักพัฒนาโปรแกรมมีความง่ายในการจับคู่ความสัมพันธ์ระหว่างโครงร่างที่แท้จริง (actual layout) และ GUI ได้

 

JavaFX Script นั้นจะทำให้นักพัฒนาง่ายต่อการสร้างและการจัดเก็บส่วนประกอบเฉพาะ (individual components) ด้วยความสามารถในการแลกเปลี่ยนข้อมูลระหว่างฐานข้อมูลนั้นกับ GUI

ที่ทำได้โดยด้วยวิธีการประกาศชุดของข้อมูล (data binding) และการเพิ่มของการประมวลผล (incremental evaluation) กล่าวโดยง่ายคือ JavaFX นั้นทำให้การปรับเปลี่ยนข้อมูลระหว่างข้อมูลที่ฐานข้อมูลของ webนั้นๆ กับ GUI ที่เครื่องของลูกข่าย ทำได้โดยในลักษณะของ synchronize

 

สิ่งที่แตกต่างกันระหว่างภาษา Java Script กับ JavaFX Script นั้น สำหรับ  JavaFX Script มีการสร้างและออกแบบโปรแกรมในรูปแบบของภาษา Java ได้โดยสมบูรณ์ ทำให้ JavaFX Script นั้นจะมีโครงสร้างด้านตัวภาษาเช่นเดียวกับภาษา Java โดยมีข้อมูลแบบ static (statically types), มีโครงสร้างของข้อมูลเช่นเดียวกัน, มีความสามารถในการนำไปใช้ใหม่ (reuse)และมี encapsulation เช่นเดียวกับภาษา Java ทั่วไป ซึ่งจุดนี้เองทำให้ตัวของ JavaFX Script เองนั้นรองรับการทำงานร่วมกับ Swing ที่เป็น GUI ที่มีความสามารถสูงใน Java ได้ด้วย

 

และ JavaFX Script นั้นสามารถที่จะออกแบบสร้าง internet application ที่มีขนาดใดๆ ได้หรือแม้แต่มีความซับซ้อนในการแสดงผลได้

 

ในการพัฒนา JavaFX Script นั้นมีความสามารถทำงานได้ร่วมกับ IDE (integrated Developement Environment) ที่แพร่หลายได้ ไม่ว่าจะเป็น NetBeans ซึ่งเป็น IDE ที่แพร่หลายมากๆ ในการพัฒนา Java

 

ซึ่งสามารถที่จะหาข้อมูลและ download เอาตัวโปรแกรมเพื่อไปพัฒนาได้จาก

http://openjfx.dev.java.net

http://www.netbeans.org

 

JavaFX Mobile

บทนำ

       Sun Microsystems ได้สร้าง JavaFX Mobile เพื่อให้เป็นชุดสำเร็จของระบบการทำงานของ  mobile phone ในยุคใหม่ที่รวมเอาเทคโนโลยีระหว่าง Java และ Open source Linux ที่มาทำงานประกอบกันได้อย่างสมบูรณ์

 

โดย JavaFX Mobile เป็นชุดรวมของระบบซอฟต์แวร์ที่สร้างจากเทคโนโลยีเพื่อรองรับการทำงานในรูปแบบของ การขยายตัวได้ (scalability), และการรองรับอุปกรณ์หลายชนิดที่ต่างกัน (portability) ทำให้การสร้าง application สำหรับการสร้างการบริการใหม่ๆ นั้นทำได้ง่ายและมีความสามารถในการสร้าง application ที่มีความซับซ้อนสูงได้

 

ทั้งนั้น JavaFX Mobile ยังรองรับส่วนของ application ที่เป็น Java ME หรือ ที่เป็น standard Java APIs อื่นๆ เพื่อทำให้การสร้างและการปรับปรุง Java application นั้นได้ด้วย

เพื่อตอบสนองความต้องการที่จะให้มีการแพร่หลายและเป็นการประหยัดงบประมาณในอุปกรณ์ mobile ในรุ่นใหม่ (next-generation mobile device) ทาง Sun Microsystems ยังคงเปิดเทคโนโลยีนี้ให้เป็นฟรีและเป็นเทคโนโลยีแบบเปิดเช่นเดิมทุกอย่าง

 

รูปที่ 4 เป็นการแสดงถึงโครงประกอบของ JavaFX Mobile ที่มีการผสมผสานอย่างลงตัวของเทคโนโลยี Java และ  Linux Open source

ซึ่งจะเห็นได้ว่า

Linux Open source จะเป็นส่วนที่เป็น Operating system ของระบบโทรศัพท์ และมี

JavaFX Mobile เป็นส่วนแกนหลักของ application ทั้งหมด

 

รายละเอียดอ้างอิงและบทความเพิ่มของ JavaFX Mobile

    Sun Welcome SaveJe Technologies

http://www.sun.com/software/savaje/index.xml

    Sun Microsystems to Acquire Assets from SavaJe Technologies

http://www.sun.com/aboutsun/pr/2007-04/sunflash.20070412.1.xml

 

Reference

    Sun JavaFX

http://www.sun.com/software/javafx

    OpenJFX

https://openjfx.dev.java.net

 

 

วันจันทร์ พ.ย. 27, 2006

What is Web 2.0 (Thai Edition)

What is Web 2.0?

    ก่อนปี 2001 เป็นยุคเริ่มต้นยุคแรกๆ ของ web เราคงได้เห็นข้อมูลส่วนใหญ่อยู่ในรูปของ static content และในช่วงต่อมาเราก็ได้เห็นการแตกของ dot-com bubble ทำให้บริษัทต่างๆ ก็ได้นำเอา Information Technology เข้าไปใช้ในองค์กรอย่างระมัดระวังและเป็นเหตุเป็นผลมากขึ้น และแม้หลังจากเกิดเหตุการ dot-com bubble พังลง แต่ยังคงมีความต้องการที่จะนำเสนอและแลกเปลี่ยนข้อมูลกันมากขึ้นเรื่อยๆ ทั้งในรูปแบบของ web ที่เป็น static content และ dynamic content ไม่ว่าจะเป็น yahoo, amazon

ด้วยการแข่งขันทางธุรกิจและความต้องการที่จะแลกเปลี่ยนข้อมูลนั้น เป็นตัวหลักในการผลักดันให้มีการนำเอาธุรกิจเข้าไปสู่โลกของ web  มากขึ้นเพื่อเพิ่มช่องทางการได้เปรียบทางธุรกิจและเป็นที่มาของการผลักดันให้มีการสร้าง technology ใหม่ๆ เพิ่มขึ้นเช่น bittorent, napster, wiki, ajax, blog เพื่อที่จะทำให้การนำเสนอและการแลกเปลี่ยนข้อมูลเป็นไปได้โดยง่าย นั่นทำให้ความต้องการเรื่อง dynamic content มีมากขึ้นด้วย  และทำให้เกิด website ที่รองรับแนวทางนี้ เพิ่มขึ้น เช่น eBay, google

และในปี 2004, Tim O’Reilly และ MediaLive international ได้ให้คำจัดความของ Web 2.0 ว่าเป็น “a second generation of services available on the World Wide Web that lets people collaborate and share information online” ซึ่งตีความได้ง่าย ๆ ว่า “เป็นรูปแบบการนำเสนอเอา services รูปแบบใหม่บนโลก world wide web เพื่อที่จะทำให้ผู้คนสามารถที่จะติดต่อแลกเปลี่ยนข้อมูลกันได้ผ่านการ online” โดยที่มีตัวอย่างที่เห็นได้อย่างชัดเจนที่เราเห็นในปัจจุบันคือ google อย่างเช่น google map, google suggestion เป็นต้น

Tim O’Reilly และ John Battelle ได้สรุปคุณลักษณะที่สำคัญของ Web 2.0 ดังต่อไปนี้
1. ต้องใช้ Web เป็นพื้นฐาน
2. ข้อมูลเป็นปัจจัยสำคัญและเป็นแรงขับดันสำคัญ
3. เป็นการสร้างระบบที่รองรับให้เกิดการร่วมมือกันบน Network
4. รองรับการนำเสนอ ความคิดริเริ่ม ที่เกิดจากการร่วมมือกันจากหลายๆ แหล่งโดยที่รองรับระบบการกระจายตัว เพื่อให้มี developer ได้ไม่จำกัด
5. รองรับธุรกิจแบบไม่ยุ่งยาก โดยเน้นไปที่ข้อมูลและการบริการแบบ syndication
6. เป็นจุดสิ้นสุดวงจรการ Release ของ software (รองรับการพัฒนาโดยไม่หยุดนิ่งของ Software ดังคำกล่าวว่า “the perpetual beta”)
7. Software ทำงานได้ในลักษณะ Multiple platform ไม่ได้จำกัดที่ device อย่างใดอย่างหนึ่ง


จะเห็นได้ว่ามีการเปลี่ยนรูปจาก web ที่มีลักษณะเดิมๆ แบบการ Request จากผู้ใช้งาน และรอการตอบกลับข้อมูลจาก server ก็เปลี่ยนรูปมาในลักษณะของ Application Online มากขึ้น ผู้ใช้งานจะมีความรู้สึกว่า Web เสมือนฐานข้อมูลและคอมพิวเตอร์ของตนเอง โดยข้อมูลเหล่านี้จะได้รับการแลกเปลี่ยนกับผู้ใช้อื่นๆ ตลอดเวลาด้วย
ปี 1984, John Gage (ปัจจุบันดำรงตำแหน่ง Chief Researcher and Vice President of the Science Office, Sun Microsystems Inc) ได้กล่าวไว้ว่า “Network is the computer” ซึ่งคำพูดนี้ได้เป็นคำที่ได้กล่างไว้ได้อย่างถูกต้องตั้งแต่ ณ. ขณะนั้นจนกระทั่งถึงในปัจจุบัน และ Sun Microsystems ได้ยึดแนวทางดังคำพูดนั้นเพื่อพัฒนาและผลิต ผลิตภัณท์ ต่างๆ เพื่อรองรับมาตลอด โดยที่ผลิตภัณท์ต่างๆของ Sun Microsystems ไม่ว่าจะเป็น Software, Server, Storage หรือ Services นั้นสร้างมาเพื่อรองรับการทำงาน infrastructure ของทางด้าน web technology อย่างสมบูรณ์ที่สุด

Reference

1. http://www.oreillynet.com
2. http://en.wikipedia.org
3. http://www.google.com
4. http://www.sun.com


วันจันทร์ พ.ย. 20, 2006

อะไรคือ Ruby ตอนที่ 1

Ruby ตอนที่ 1

What is Ruby language?

Ruby คือภาษา script แบบใหม่ที่เป็น Object-Oriented ที่ได้ได้นำเอาข้อดีของภาษา script ต่างๆมาด้วย ตัวของภาษา Ruby นั้นสร้างด้วยภาษาซีที่ได้ออกแบบให้รองรับภาษา perl และ python แต่การพัฒนานั้นเริ่มต้นเกิดขึ้นที่ประเทศญี่ปุ่น ทำให้การเบื้องต้นไม่ค่อยจะแพร่หลายมากนัก ผู้พัฒนาคือ Yukihiro Matsumoto “Matz” ที่เป็นผู้เชี่ยงชาญ programmer ที่ทำงานที่ Japanese open source company netlab.jp  ซึ่งเขาเป็นผู้ที่เชี่ยวชาญในกลุ่ม open source evangelists ในญี่ปุ่น ซึ่งเขาได้พัฒนาผลิตภัณฑ์หลายๆ ชิ้นเช่น cmail ที่เป็น mail-user agent ที่ทำจาก emacs-based และ Ruby เป็นผลิตภัณฑ์แรกที่แพร่หลายในนอกประเทศญี่ปุ่นและทาง Matz ได้เริ่มสร้างภาษา Ruby ใน February 24, 1993 และได้ release เมื่อ 1995  ซึ่งชื่อของ Ruby ได้มาจากชื่อราศีเกิดของเพื่อนร่วมงานเขา

ในเบื้องต้นของการออกแบบ Ruby นั้น Matz ได้รวบรวมเอาภาษาที่เขามีความถนัดต่างๆ เข้าด้วยกัน ไม่ว่าจะเป็น Perl, Smalltalk, Eiffel, Ada และ Lisp เพื่อให้เป็นภาษาใหม่ที่ความเข้ากันได้ระหว่างการโปรแกรมแบบฟังก์ชั่น (functional programming) และ การโปรแกรมแบบคำสั่ง (imperative programming)

และเมื่อมีการขยายกลุ่มผู้ที่ใช้งาน Ruby ไปที่ประเทศอเมริกาทำให้มีการพัฒนาได้เร็วมากขึ้น แต่ทั้งนั้นด้วยเหตุการเริ่มต้นที่ไม่เร็วมากนักทำให้ภาษา Ruby มีความเสถียรค่อนข้างมาก และเป็นที่ยอมรับจากกลุ่มใหญ่ทั่วโลกในปี 2006 และก่อให้เกิดกลุ่มของ Ruby-Talk ขึ้นจาก mailing list ที่เพิ่มขึ้นเป็น 200 ฉบับต่อวัน จาก TIOBE index ซึ่งเป็นดัชนีชี้วัดการเติบโตของภาษาคอมพิวเตอร์โปรแกรมมิ่ง ภาษา Ruby ได้ขึ้นมาเป็นอันดับ 12 และมีการทำนายว่า ภายในประมาณอีกครึ่งปีนั้น Ruby จะเปลี่ยนเป็นภาษาคอมพิวเตอร์ที่เป็น Top 10 โดยเฉพาะที่เด่นๆของภาษา Ruby คือ Ruby on Rails web framework เป็นขอบข่ายงานในกลุ่มของ Web เป็นหลัก

 

หลักการออกแบบภาษา Ruby

Matz ได้กล่าวไว้ว่า “trying to make Ruby natural, not simple’  และ “Ruby is simple in apperance, but is very complex inside, just like our human body” ซึ่งในแนวทางที่เขาออกแบบ Ruby นั้นเป็นสิ่งที่พยายามให้เป็นธรรมชาติ เช่นเดียวกับภาษามนุษย์ที่ใช้ในการสื่อสาร ทำให้การสร้างโปรแกรมหรือแอพพริเคชั่นทำได้่ง่าย
ภาษา Ruby นั้นออกแบบโดยการคำนึงถึงการทำให้โปรแกรมเมอร์มีความง่ายในการเขียนโปรแกรมโดยไม่จำเป็นต้องทำงานที่ไม่เกี่ยวข้องออก พร้อมกันนั้นยังได้ทำ user interface ที่ง่ายต่อการติดต่อกับผู้ใช้โดยเน้นไปที่ภาษาที่ไม่ยุ่งยาก สามารถเข้าใจโดยง่ายโดยมนุษย์แทนที่จะเป็นภาษาแบบคอมพิวเตอร์ ที่แตกต่างจากภาษาเก่าๆ ที่เน้นไปที่ คอมพิวเตอร์เป็นหลัก และมีแนวคิดที่จะต้องทำให้คอมพิวเตอร์ทำงานได้เร็วที่สุด ทำให้เราไม่ได้ใส่ใจที่จะทำให้คนได้เข้าใจได้ง่ายนัก
 
Ruby นั้นได้ออกแบบตามหลักของ “Principle of least surprise (POLS)” ที่หมายถึงการออกแบบภาษาที่อ้างอิงตามรูปแบบที่เราสามารถที่จะเดาได้หรือตามสัญชาตญาณ ที่ไม่จำเป็นต้องอาศัยความสามารถในการสื่อสารแบบคอมพิวเตอร์มากนัก เป็นภาษาที่เราสามารถที่จะเข้าใจได้ง่าย และมีเหล่าโปรแกรมเมอร์หลายๆ คนก็มีตั้งนิยามให้กับ Ruby ว่าเป็น “Matz’s Least Surprise” เพื่อเป็นการให้เครดิตแก่ Matz ที่ออกแบบภาษา Ruby ที่ตรงใจพวกเขา

Semantics ของตัวภาษา

ตัวของภาษา Ruby นั้นเป็น Object-Oriented โดยแท้จริงๆ ซึ่งองค์ประกอบทุกส่วนของข้อมูลนั้นล้วนแล้วแต่เป็น Object ที่จะสามารถมี properties และ action ดังเช่นหลักของโปรแกรมมิ่งแบบ Object-Oriented โดยส่วนของ properties จะเรียกได้ว่า instance variable และส่วนของ action นั้นจะเรียกได้ว่า methods ซึ่งตัวภาษา Ruby นั้นจะรองรับความเป็น Object-Oriented แบบสมบูรณ์ดังลักษณะตัวอย่าง


    5.times { print “We *love* Ruby -- it’s outrageous!” }


ในภาษาอื่นๆ หลายๆภาษา ตัวเลขและมีการกำหนด Type แบบเดิมๆ ที่ไม่เป็น Object แต่ในภาษา Ruby จะออกแบบไว้เป็นเหมือนกับภาษา smalltalk ที่ทำให้มี methods และ instance variable ได้ในทุกๆ Type ดังที่เป็นตัวอย่างข้างต้นที่ภาษา Ruby มองเป็น Object-Oriented
และภาษา Ruby มีลักษณะเด่นๆ ดังนี้

  • classes และชนิดของข้อมูลที่ได้ออกแบบไว้เช่นอย่างภาษาแบบอื่นๆ ไม่ว่าจะเป็น integers, booleans, หรือ nil.
  • function นั้นได้กำหนดเป็น method  การตั้งชื่อ variable จะออกแบบไว้เพื่อเป็น Reference ไปที่ object โดยไม่ต้องใช้ตัวของ object เอง
  • รองรับการทำ inheritance แบบ dynamic dispatch, mixins* และ singleton methods
  • ไม่รองรับ multiple inheritance แต่ตัวของ classes สามารถที่จะ import module ได้ที่เรียกว่า mixins*
  • รองรับการทำ  procedural syntax ที่มีข้อกำหนดว่าจะต้องทำงานภายใต้ Ruby Procedural เท่านั้น การทำงานจะมี object instance ที่ตั้งว่า ‘main’ ซึ่งตัว class ที่ชื่อ ‘main’ นี้จะเป็น parent ของทุกๆ classes อื่นๆ โดยที่ classes และ Object อื่นๆ สามารถที่จะมองเห็น class ‘main’ ได้ทั้งหมด
  • ภาษา Ruby มีความสามารถที่ทำ exception handling ได้่เช่นเดียวกับ ภาษา Java หรือภาษา Python เพื่อความง่ายในการแสดงข้อผิดพลาด
  • ภาษา Ruby มีความสามารถที่ทำ mark-and-sweep garbage collector (การจัดการคืน memory ส่วนที่ไม่ได้ใช้งาน) ทุกๆ object
  • การเขียน C extension (การเรียกใช้งานภาษาซี) ในภาษา Ruby มีความง่ายมากกว่าภาษา Perl หรือ ภาษา Python ด้วยการเรียกใช้งานผ่าน API (Application programming interface) ที่มีอยู่ในตัวของ Ruby เอง
  • ภาษา Ruby ยังสามารถที่จะสามารถที่จะดึงส่วนขยายของตัว extension library dynamically ของ Operating System นั้นๆ หากมีการยินยอมให้ทำใน Operating system ได้
  • ภาษา Ruby ยังมีความสามารถที่จะทำเรื่อง Threading ทุกๆเพล็ตฟอร์มแม้แต่ใน Operating System ที่ไม่รองรับการทำ Threading ก็ตาม อย่างเช่น MSDOS
  • ภาษา Ruby นั้นมีความยืดหยุ่นในการ Portable มากๆ โดยการพัฒนาในเบื้องต้นนั้นจะเริ่มจาก GNU/Linux แต่ก็มีการรองรับใน UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2 เป็นต้น
* Ruby และ Mixin
ด้วยข้อกำหนดของภาษา Ruby ที่มีลักษณะเป็น single inheritance แต่เนื่องแนวคิดของตัวภาษาที่เป็น modules และ modules นั้นๆ จะเทียบเป็น collection ของ methods
classes จะทำการ Mixin ส่วนของ modules และรับส่วนของ methods ทั้งหมด ตัวอย่างเช่น
class MyArray
    include Enumerable
end
classes ที่มีการเตรียม method จะสามารถ mixin ใน Enumerable module ที่รวบรวมเอาทุกๆ methods เพื่อที่จะทำ loop ดังข้างต้น

    และนอกจากนั้นตัวภาษา Ruby นั้นสามารถที่จะอธิบายด้วยลักษณะโปรแกรมมิ่งได้หลายมุมมอง ดังต่อไปนี้

  • รูปแบบการเขียนแบบ procedurally ที่เป็นลักษณะการกำหนด functions/variables นอก classes และทำให้ทั้งหมดอยู่ใต้ root ที่เป็นแบบ object ตัวเอง
  • รูปแบบการเขียนแบบ Object Orientation ที่ทุกอย่างเป็น Object
  • ในรูปแบบการเขียนแบบ functionally ที่ประกอบไปด้วย functions, closures, และ continuations ที่ทุกตัวต้องมีการส่งผล (return) ในขั้นตอนการทำงานขั้นสุดท้าย

และตัวภาษาเองยังได้เอื้อในการทำ introspection, reflection และ meta-programming ที่รองรับการทำงานเป็น threads ทั้งนั้นตัว Ruby เองยังได้มีความสามารถในการทำ dynamic typing และรองรับ parametric polymorphism อีกด้วย

ตัวอย่างและการใช้งานเบื้องต้น

ทดลองการใช้งาน Ruby เบื้องต้นเราจะต้องเตรียม download ตัวของ Ruby มาก่อนจาก http://www.ruby-lang.org/en/downloads

เริ่มการติดต่อกับ Ruby

และเมื่อพร้อมก็เริ่มเปิดโปรแกรม IRB เพื่อเข้าทดลองใช้ ruby เราจะทดลองด้วยโปรแกรม Hello World

irb(main):001:0>”Hello World”

=> “Hello World”

เราจะสังเกตุได้ว่าเราไม่ได้เขียนโปรแกรมเพื่อให้แสดงผลแต่เป็นการทำงานของ Ruby ที่ทำให้เราแสดงผลการทำงานของโปรแกรมได้ง่ายๆ

เริ่มการทดลองใช้ Ruby

irb(main):002:0>puts “Hello World”

Hello World

=> nil

คำสั่ง put เป็นการสั่งงานที่จะแสดงผลสิ่งที่เราสั่งออกมาใน Ruby และจะมีการ return ค่าออกมาเป็น nil

ลองใช้ Ruby คำนวณเลขให้

irb(main):003:0> 3+4

=> 7

จะเห็นความง่ายในการโปรแกรมให้ Ruby ทำงานที่เราอยากได้ แค่เราป้อนตัวเลขและสิ่งที่ต้องการกระทำ (operation) ดังตัวอย่างเพิ่มเติมต่อไปนี้

ตัวอย่างการคูณ 3 กับ 4

irb(main):004:0> 3*4

=> 12

ตัวอย่างการ 3 ยกกำลัง 4

irb(main):005:0> 3**4

=> 81

ตัวอย่างการถอด Square root

irb(main):006:0> Math.sqrt (9)

=> 3.0

หรืออาจจะเป็นตัวอย่างที่เพิ่มความซับซ้อน

irb(main):007:0 a = 3 ** 2

=> 9

irb(main):008:0 b = 4 ** 2

=> 16 irb(main): Math.sqrt (a+b)

=> 5.0

ดังข้างต้นจะเห็นได้ว่าตัวของ Ruby มีการทำงานที่ง่ายในตัวของภาษาเอง ซึ่งเป็นข้อที่ทำให้ตัวภาษามีความโดดเด่นมากๆ ซึ่งทำให้โปรแกรมเมอร์ใหม่ๆ เรียนรู้ในตัวภาษาเองได้รวดเร็วกว่าตัวภาษาอื่นๆ ซึ่งนั่นทำให้เกิดโปรแกรมเมอร์ที่รวดเร็ว นอกจากนั้นการทำงานในลักษณะ interactive คือสามารถที่จะโต้ตอบได้เลยโดยที่ไม่ต้องผ่านการ compile ตัว code ที่โปรแกรมเมอร์เขียนทำให้มีความสะดวกในการพัฒนามากๆ

ความเกี่ยวข้องระหว่าง Ruby และภาษา Java

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

ความคล้ายกัน

สิ่งที่มีเหมือนกันใน Java กับ Ruby คือ

  • มีการจัดการ memory ที่ทำผ่าน garbage collector เหมือนกัน
  • มีชนิดของข้อมูลเป็น Objects - มี methods แบบ public, private และ protected
  • สามารถที่จะทำ document จาก tool ได้ซึ่ง Ruby จะเรียกว่า RDoc ซึ่งจะมีลักษณะเดียวกับ Javadoc

สิ่งที่แตกต่างกัน

สิ่งที่แตกต่างระหว่าง Java กับ Ruby คือ

  • ไม่จำเป็นต้องทำการ compile ส่วนของ code ของเรา Ruby ทำงานได้ทันที
  • มีความแตกต่างใน GUI toolkits ใน Ruby สามารถที่จะใช้งาน WxRuby, FxRuby, Ruby-GNOME2 หรือที่มีอยู่ในตัว Ruby เองคือ Tk
  • เราสามารถที่สิ้นสุดการ defining เหมือน classes แทนที่จะต้องมี braces เพื่อกำหนด block ของ code
  • จะต้องใช้การ require แทนการ import
  • ส่วนของสมาชิกของตัวแปรเป็น private เมื่อเราต้องการเรียกใช้จะต้องทำผ่าน methods
  • การเรียก method ไม่จำเป็นที่ต้องทำ parentheses หรือเราจะละเลยก็ได้
  • ทุกๆ อย่างจะเป็น object ไม่เว้นไปถึงตัวเลขต่างๆ เช่น 2 หรือ 3.14159
  • ไม่มีการตรวจสอบ static type
  • ชื่อตัวแปรต่างๆ เป็น label พวกมันไม่ต้องมีการกำหนด type ให้
  • ไม่มีการกำหนด type เราแค่กำหนดตัวแปรใหม่ตามชื่อแบบตัวอย่างนี้
a = [1,2,3] แทนที่จะเป็น int[] a = {1,2,3}
  • เราไม่จำเป็นต้องทำการ casting เพียงแต่เรียก method ไปตรงๆได้ ส่วนของการทำ unit test จะแสดง exception ก่อนที่จะทำงานจริง
  • ลักษณะ code ของ Ruby จะเป็นแบบ foo = Foo.new(“hi”) แทนที่จะเป็น foo = new Foo(“hi”);
  • ตัว constructor จะต้องขึ้นต้นด้วย initialize แทนที่จะเป็นชื่อ class
  • เราจะต้องใช้ mixin’s แทนที่จะเป็น interfaces
  • YAML จะเป็นสิ่งที่ใช้งานมากๆ แทน XML
  • มี nil แทนที่จะเป็น null

Reference

http://en.wikipedia.org/wiki/Ruby_language
http://www.ruby-lang.org/en/documentation