go to http://oracle.in.th

Tuesday, December 7, 2010

โอกาสของน้องๆนักศึกษา มาอีกแล้ว อบรมฟรี Oracle JDeveloper !!

โอกาสของน้องๆนักศึกษา มาอีกแล้ว
คราวนี้ OUGTH ของเรา เปิดอบรมฟรี Oracle JDeveloper !!


...แต่รอบนี้มีกติกานิดหน่อย ผู้ที่จะมาอบรมได้นั้น จะต้องเป็นนักศึกษาและ ต้องเป็นสมาชิกของOUGTH Facebook Page, OUGTH Facebook group, OUGTH google buzz, Google friend connect ใน blog OUGTH ของเรา, หรือ OUGTH twitter เท่านั้น



เปิดรับสมัครผู้สนใจ ตั้งแต่วันนี้ - 10 ธันวาคม 2553 เวลา 12:00 น.
(ขอสงวนสิทธิ์ในการปิดรับสมัครก่อนเวลาที่กำหนด หากที่นั่งเต็ม)

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

  1. ชื่อ-นามสกุล
  2. เบอร์ติดต่อกลับ
  3. สถานที่ศึกษา
  4. แนบสำเนาบัตรนักศึกษา
  5. เหตุผลที่อยากมาเข้าร่วมอบรมนี้
  6. Capture รูปที่เป็นสมาชิกกับเรา เช่น
Facebook Fan Page


แล้วส่งมาที่ oracle.in.th@gmail.com

สอบถามรายละเอียดเพิ่มเติมได้ที่ 02-634-1711 หรือ oracle.in.th@gmail.com

รายละเอียดของการอบรม
วันที่ทำการอบรม: วันเสาร์-อาทิตย์ที่ 11 และ 12 ธันวาคม 2553
เวลา: 09:00 - 16:30 น.
สถานที่: อาคาร ปาโซ่ ทาวเวอร์ ชั้น 21 ถนนสีลม แขวงสุริยวงศ์ กรุงเทพมหานคร 10500
(ห่างจากรถไฟฟ้า BTS สถานีช่องนนทรี ประมาณ 500 เมตร)


ดู โอกาสของน้องๆนักศึกษา มาอีกแล้ว อบรมฟรี Oracle JDeveloper !! ในแผนที่ขนาดใหญ่กว่า


...โอกาสดี มันไม่ได้มีง่ายๆ รีบคว้าไว้ ก่อนที่จะสายไป
ข้อเขียนนี้ช่วยฉัน:  

Wednesday, December 1, 2010

National Character Set แบบ AL16UTF16 กับ UTF8 ต่างกันอย่างไร?

ห่างหายไปนานกับการเขียนบทความลงบล็อค oracle ของเรา ขอต้อนรับต้นเดือนสุดท้ายของปี 2010 นี้ด้วยทริก เล็กๆน้อยๆ นะครับ

วันนี้มีเกร็ดเล็กๆ น้อยๆ ที่เป็นประโยชน์ซึ่งเกี่ยวกับการสร้าง Database โดยใช้ DBCA หรือ Database Configuration Assistant มาให้ทุกท่านได้อ่านกันนะครับ

...ผมเชื่อว่า หลายๆท่านที่กำลังอ่านอยู่ตอนนี้ ต้องเคยได้ลองติดตั้ง Oracle Database หรือ เคยสร้าง Database มากันบ้างแล้วล่ะ ซึ่งขั้นตอนในการสร้าง Database นั้นมันก็ไม่ได้ยากมากมาย เพียงแค่ตั้งค่าให้ถูกต้องเท่านั้นเอง ซึ่งผมนั้นก็ได้ลองติดตั้งด้วยตัวผมเองแล้วเหมือนกัน แต่มีขั้นตอนนึงที่ทำให้ผมชะงักขึ้นมาว่า ...เอ๊ะ จะเลือกอันไหนดีล่ะ ? นั่นคือ ตอนที่ให้ตั้งค่า Database Character set โดยมี National Character Set แบบ AL16UTF16 กับ UTF8 ให้เลือก (ดูตามรูปได้เลยนะครับ)


เอาเป็นว่า แทนที่จะมานั่งเดาเอา ผมก็ search หาเอาซะเลย แล้วดูว่า National Character Set แบบ AL16UTF16 กับ UTF8 มันมีข้อแตกต่างกันอย่างไร?

AL16UTF16
  1. ถ้าข้อมูลเป็นภาษาเอเชีย จะประหยัดพื้นที่กว่า UTF8 ซึ่งจะดีในแง่ของพื้นที่ในฮาร์ดดิสก์ และ I/O แต่ถ้าข้อมูลส่วนใหญ่เป็นภาษาทางยุโรปใช้ UTF8 ดีกว่าเพราะประหยัดพื้นที่กว่า
  2. Oracle มอง AL16UTF16 เป็น fixed-width characters ดังนั้นจะ process เร็วกว่า
  3. ความกว้างสูงสุดของ NCHAR และ NVARCHAR คือ 1000 และ 2000 ตัวอักษร ซึ่งการันตี เพราะเป็น fixed-width
...มาดูฝั่ง UTF8 กันบ้าง

UTF8
  1. ถ้าข้อมูลเป็นภาษาทางยุโรป โดยปกติจะประหยัดพื้นที่กว่า AL16UTF16 (เนื่องจากภาษาทางยุโรปอยู่ในลำดับต้นๆของ Unicode ซึ่งสามารถแทนได้ด้วยข้อมูลเพียง Byte เดียว) และให้ประสิทธิภาพดีกว่าในการ Process
  2. ความยาวสูงสุดของ NCHAR และ NVARCHAR คือ 2000 และ 4000 ซึ่งดูเหมือนจะมากกว่า AL16UTF16 แต่ไม่การันตี เนื่องจาก UTF8 เป็น variable width ถ้าเป็น Character ที่ใช้ Byte เดียวก็จะได้ถึง 4000 bytes แต่ถ้าเป็น Character ที่ใช้ 3 Bytes ก็จะมีได้สูงสุดแค่ 4000/3 ตัวอักษร
...นั่นก็คือข้อแตกต่างของแต่ละตัว ดังนั้นก่อนที่ท่านผู้อ่านทุกท่านจะ set ค่าในการสร้าง database ลองดูรายละเอียดซักนิดนะครับ อย่าเพิ่งกด Next ๆๆ อย่างเดียวนะครับ ;)

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

Monday, November 1, 2010

อบรม Oracle Business Intelligence Standard Edition (Oracle BI): Discoverer ฟรี! สำหรับ นศ.



ปิดรับสมัครแล้วครับ 
ขอบคุณน้องๆ นักศึกษาที่ให้ความสนใจเป็นจำนวนมาก


นักศึกษาเตรียมพร้อม! มาพบกับ อบรมฟรีๆ กับ Oracle user Group in Thailand กันดีกว่า

อบรม Oracle Business Intelligence Standard Edition: Discoverer



Oracle Business Intelligence Standard Edition: Discoverer เป็นเครื่องมือที่ผู้ใช้้ทางธุรกิจสามารถสืบค้นข้อมูล จัดทำรายงาน วิเคราะห์ข้อมูล และเผยแพร่ข้อมูลในฐานข้อมูลทางเว็บ ซึ่งสามารถใช้ข้อมูลในฐานข้อมูลได้ทันที พร้อมทั้งยังสามารถตัดสินใจดำเนินการทางธุรกิจได้อย่างรวดเร็วและง่ายดายอีกด้วย

เปิดรับสมัคร ผู้สนใจ ตั้งแต่วันนี้ - 4 พฤศจิกายน 2553 (ขอสงวนสิทธิ์ในการปิดรับสมัครก่อนเวลาที่กำหนด หากที่นั่งเต็ม)

สำหรับผู้ที่สนใจ สามารถ Email แจ้งความจำนงที่จะเข้าร่วมอบรม พร้อมทั้งบอก ชื่อ-นามสกุล, ชื่อเล่น, เบอร์ติดต่อกลับ, สถานที่ศึกษา, แนบสำเนาบัตรนักศึกษา และเหตุผลที่อยากมาเข้าร่วมอบรมนี้ มาที่ oracle.in.th@gmail.com

สอบถามรายละเอียดเพิ่มเติมได้ที่ 02-634-1711 หรือ oracle.in.th@gmail.com

รายละเอียดของการอบรม
วันที่ทำการอบรม: วันเสาร์-อาทิตย์ที่ 6 และ 7 พฤศจิกายน 2553
เวลา: 09:00 - 16:30 น.
สถานที่: อาคาร ปาโซ่ ทาวเวอร์ ชั้น 21 ถนนสีลม แขวงสุริยวงศ์ กรุงเทพมหานคร 10500
(ห่างจากรถไฟฟ้า BTS สถานีช่องนนทรี ประมาณ 500 เมตร)


ดู อบรม Oracle Business Intelligence Standard Edition: Discoverer ในแผนที่ขนาดใหญ่กว่า
ข้อเขียนนี้ช่วยฉัน:  

Tuesday, September 28, 2010

ภาพบรรยากาศในงาน OUGTH Meetup ครั้งที่ 2

สวัสดีค่ะ เพื่อนๆที่ติดตาม Blog ของเราทุกท่าน
ผ่านไปแล้วนะคะ กับงาน OUGTH Meet up ครั้งที่ 2 เมื่อ วันเสาร์ที่ 25 กันยายน 2553 ณ จัตุรัสจามจุรี มีผู้เข้าร่วมสัมมนามากันเกือบครบทุกท่านเลยทีเดียว บรรยากาศเต็มไปด้วยความสนุกสนาน พร้อมทั้งได้สาระกลับบ้านกันไปเต็มๆ รวมทั้ง ได้ของแจกกันไปถ้วนหน้า
ถือว่าได้มางานนี้ล่ะก็...คุ้มไม่้รู้จะพูดอย่างไรแล้ว!! XD

วันนี้เลยมีภาพบรรยากาศในงานมาให้ชมกันค่ะ
ติดตามแบบเต็มๆได้ที่ Facebook Page ของเรานะคะ คลิกที่รูปเพื่อไปดูเต็มๆ เลยค่ะ


สุดท้ายนี้ ขอขอบคุณผู้ร่วมสัมมนาที่น่ารักทุกท่าน ท่านวิทยากรทั้ง 9 ท่านที่มาให้ทั้งสาระ ความรู้ และเทคนิคดีๆ(ที่แฝงไว้กับความฮา) และขาดไม่ได้เลย ผู้สนับสนุนของเรา ECS The Value Systems Co., Ltd. และ Oracle Thailand ค่ะ

แล้วพบกับ Event ดีๆ กับ Oracle User Group in Thailand แบบนี้ได้เสมอนะคะ

ปล. แล้ว Meetup ครั้งที่ 3 เพื่อนๆอยากจะให้จัดเป็นแบบไหนบ้างคะ? มีใครอยากเสนออะไรไหม เชิญคอมเม้นไ้ด้เลยน้าา~
ข้อเขียนนี้ช่วยฉัน:  

Monday, September 27, 2010

อบรม Oracle Performance Tuning สำหรับนักศึกษาเท่านั้น

มาอีกแล้วค่าาาาาาาา กับ อบรมฟรีสำหรับนักศึกษาครั้งที่ 2...
คราวนี้เราเปิดอบรมเรื่อง Oracle Performance Tuning ที่นักศึกษาจะได้เรียนรู้และเข้าใจถึงหลักการและเครื่องมือต่าง ๆ ที่ช่วยในการปรับแต่งประสิทธิภาพของ database ให้ดียิ่งขึ้น ซึ่งจะช่วยให้นักศึกษานำความรู้ที่ได้ไปประกอบอาชีพในอนาคต


เปิดรับสมัครผู้สนใจ ตั้งแต่วันนี้ - 30 กันยายน 2010 เวลา 12:00 น.
(ขอสงวนสิทธิ์ในการปิดรับสมัครก่อนเวลาที่กำหนด หากที่นั่งเต็ม)

สำหรับผู้ที่สนใจ สามารถ Email แจ้งความจำนงที่จะเข้าร่วมอบรม พร้อมทั้งบอก ชื่อ-นามสกุล, เบอร์ติดต่อกลับ, สถานที่ศึกษา, แนบสำเนาบัตรนักศึกษา และเหตุผลที่อยากมาเข้าร่วมอบรมนี้ มาที่ oracle.in.th@gmail.com
สอบถามรายละเอียดเพิ่มเติมได้ที่ 02-634-1711 หรือ oracle.in.th@gmail.com

รายละเอียดของการอบรม
วันที่ทำการอบรม: วันเสาร์-อาทิตย์ที่ 2 และ 3 ตุลาคม 2553
เวลา: 09:00 - 16:30 น.
สถานที่: อาคาร ปาโซ่ ทาวเวอร์ ชั้น 21 ถนนสีลม แขวงสุริยวงศ์ กรุงเทพมหานคร 10500
(ห่างจากรถไฟฟ้า BTS สถานีช่องนนทรี ประมาณ 500 เมตร)


ดู อบรม Oracle Performance Tuning ในแผนที่ขนาดใหญ่กว่า


...โอกาสดี มันไม่ได้มีง่ายๆ รีบคว้าไว้ ก่อนที่จะสายไป


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

Saturday, September 25, 2010

OUGTH - Oracle.in.th

สถานที่ จามจุรีสแควร์ชั้นสอง SE-ED Learning Center
ข้อเขียนนี้ช่วยฉัน:  

Thursday, September 16, 2010

Tableless design

วันนี้ พักเรื่อง oracle แล้วมาดู HTML กันดีกว่า


Tableless design เป็นการออกแบบ layout ของ HTML โดยไม่ใช้ table มาช่วยเลย โดยการที่ไม่ใช้ table ไม่ได้หมายความว่าจะตัด table ออกจาก html ไปเลย เพียงแต่ไม่ใช้ table ในการ design layout ส่วน table ก็ไปทำหน้าที่ในตอนแสดงข้อมูลออกมาในตารางเท่านั้น

ถ้าไม่ใช้ตารางจะใช้อะไรแทนหละ คำตอบตือใช้ <div> และ <span> ช่วยในการวาง Layout แทน โดย <div> ใช้ในออกแบบเกี่ยวกับ layout ในส่วนที่ไม่มีตัวอักษร เช่นการแบ่งโครงสร้างต่างๆของ web เช่นส่วนของเมนู ส่วนของ Banner ส่วนของ content ส่วนของ footer เป็นต้น ส่วน <span> จะเอามาใช้ในการจัดโครงสร้างของข้อความต่างๆ ไปดูเหตุผลพวกนี้ที่
http://www.divland.com/blog/2007/03/23/div-or-span/

แล้วเราจะออกแบบยังไง เราก็ออกแบบโดยมองว่า 1 <div> แทนโครงสร้างในส่วนหนึ่ง อย่างเช่น
<div id="banner">Banner</div>
อาจจะยังไม่เห็นภาพรวมของมันเราลองดูกันเต็มๆว่าถ้าใช้
<div>เต็มๆแล้วจะเป็นยังไง
<body>
<div id="page">
<div id="banner">Banner</div>
<div id="nav">Navigator</div>
<div id="content">
<div id="col1">Column1</div>
<div id="col2">Column2</div>
</div>
<div id="footer">Footer</div>
</div>
</body>
โครงสร้างที่เราคาดหวังว่าจะได้ มันจะเป็นเหมือนรูปด้านล่าง









แต่รูปด้านบนคือสิ่งที่เราคาดหวังแต่พอ run จริงๆจะได้ผลแบบนี้


ซึ่งไม่ใช่อย่างที่หวังอยากจะเป็นเลย เพราะอย่างที่เราบอกตอนแรกว่า <div> ใช้แค่วาง Layout เท่านั้น แต่การจัดการแสดงผลเราต้องใช้ css ช่วยในการให้มันแสดงผลออกมาให้เป็นไปตามสิ่งที่เราหวัง โดยลองใส่ css ลงไปดังนี้
<style type="text/css"> body{ background-color: #4D87C7; }

#page{
background-color: white;
margin: 0 auto;
width: 1000px;
padding:10px;
}

#banner{
padding: 35px 0px 0px 30px; background-repeat: repeat;
color: #999999;
height: 65px; font: bold 20px/20px Verdana, Geneva, Arial, Helvetica, sans-serif;
}

#nav{
padding: 10px;
background-color:#FFAA55;
}
#content{}

#col1{
position: absolute;
float: left;
width: 225px;
padding: 10px;
background-color: #E1EFF7;
}

#col2{
margin-left: 245px;
width: 735px;
padding: 10px;
background-color: #AAAAFF;
}

#footer{
color: white;
padding: 10px;
text-align: center;
background-color: #464A4B;
}  </style>
เราก็จะได้สิ่งที่เราต้องการอย่างสุขสมอุราดังรูปด้านล่าง


สิ่งสำคัญการออกแบบ layout แบบ tableless นี้ก็คือ css นั่นเอง ในตอนแรกถึงแม้ว่ามันจะดูยุ่งยากวุ่นวาย แต่จะสังเกตุว่าค่าการตั้งค่าต่างๆของการแสดง layout นั้นอยู่ใน css หมดเลยทำให้มันดีตรงที่ในหน้า html เรา code จะไม่รกเลย ทำให้เราจัดการกับข้อมูลในการนำเสนอออกมาเท่านั้น แต่วันไหนถ้าหากจะเปลี่ยน font เปลี่ยน layout เราก็ไม่ต้องไปยุ่งกับ HTML เลยเพราะเรา config ลงใน css หมด นอกจากจะทำให้เราจัดการกับ HTML ได้ง่ายขึ้นแล้วยังทำให้ HTML โหลดเร็วขึ้นกว่าเดิมด้วย

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

สนใจตัวไหนลองไปศึกษาดูครับ เอาละไม่มีอะไรจะโม้แล้วขอจบลงเพียงแต่เท่านี้ ซึ่งสิ่งที่ผมได้อธิบายมานั้นเป็นการสรุปคร่าวๆ ลองไปศึกษาเพิ่มเติมที่ http://www.divland.com/blog/category/begining-css เลยครับ
ข้อเขียนนี้ช่วยฉัน:  

Tuesday, August 31, 2010

OUGTH Meetup#2 ...ร่วมแบ่งปันประสบการณ์ Oracle ให้แก่กัน

ขอบคุณทุกท่านที่ให้ความสนใจงาน สัมมนา OUGTH Meetup#2 ...ร่วมแบ่งปันประสบการณ์ Oracle ให้แก่กัน ในครั้งนี้กันอย่างล้นหลาม ทางทีมงานอยากแจ้งให้ทราบว่า

ตอนนี้เราปิดรับสมัครแล้ว

เพราะที่นั่งของเราเต็มแล้วครับ (อย่างรวดเร็ว!!)



เมื่อต้นเดือนที่ผ่านมา ทาง OUGTH ได้จัดอบรมฟรี ให้นักเรียน นักศึกษา ทำให้ได้รับการตอบรับเป็นอย่างดี...แต่ก็ยังมีเสียงเรียกร้องสำหรับ บุคคลทั่วไป ที่ไม่ได้เป็น นักศึกษาด้วย ดังนั้นทาง OUGTH จึงได้จัด Meeting ครั้งที่ 2 ขึ้นมาตามคำเรียกร้อง (ซึ่งเราเคยจัด Meeting ครั้งที่ 1 กันมาแล้ว)



โดย Meeting ครั้งนี้ เราคิดใน Concept ที่ว่า มาแชร์ประสบการณ์ ความรู้ที่ได้สั่งสมกันมาด้าน Oracle ให้ผู้ที่สนใจได้รับฟังกันอย่างเต็มอิ่ม กับ 9 วิทยากรคุณวุฒิที่ทำงาน คลุกคลีในเรื่องของ Oracle มาเป็นเวลานาน ไม่เฉพาะในเรื่องของ Oracle อย่างเดียวเท่านั้น ท่านวิทยากรยังมีความรู้ ความเชี่ยวชาญในเรื่อง Java อีกด้วย

รับรองว่า เข้าร่วมสัมมนาครั้งนี้ ไม่ผิดหวังอย่างแน่นอน

เปิดรับสมัครผู้สนใจ ตั้งแต่วันนี้ - 23 กันยายน 2010 เวลา 12:00 น. (ขอสงวนสิทธิ์ในการปิดรับสมัครก่อนเวลาที่กำหนด หากที่นั่งเต็ม)

สัมมนาครั้งนี้ รับบุคคลทั่วไป และผู้ที่สนใจทุกท่าน โดยไม่มีค่าใช้จ่ายใดๆ ทั้งสิ้น

สำหรับผู้ที่สนใจ สามารถ Email แจ้งความจำนงที่จะเข้าร่วมสัมมนา
พร้อมทั้งบอก ชื่อ-นามสกุล, เบอร์ติดต่อกลับ, email, และหัวข้อที่สนใจ มาที่ oracle.in.th@gmail.com

สอบถามรายละเอียดเพิ่มเติมได้ที่ 02-634-1711 หรือ oracle.in.th@gmail.com


รายละเอียดของการสัมมนา
วันที่ทำการสัมมนา: วันเสาร์ที่ 25 กันยายน 2553
เวลา: 09:00 - 17:30 น.
สถานที่: จัตุรัสจามจุรี ชั้น 2 เลขที่ 319 ถนนพญาไท แขวงปทุมวัน เขตปทุมวัน กรุงเทพฯ 10330

คลิกเพื่อดูแผนที่

กำหนดการ




08:30 – 09:00 น. ลงทะเบียน
Part 1: DBA Track
09:00 - 09:45 น. การสร้างและใช้งาน index
09:50 - 10:35 น. Oracle Edition Based Redefinition
10:40 - 11:25 น. Exadata 
11:30 - 12:15 น. Golden Gate 
12:15 - 13:15 น. พักรับประทานอาหารกลางวันตามอัธยาศัย
13:15 - 14:00 น. BIEE 11g  
14:05 - 14:50 น. JSF
Part 2: Developer Track
14:55 - 15:40 น. Cassandra
15:45 - 16:30 น. Java กับ Android
16:35 - 17:20 น. การจัดการดูแลบำรุง Database 

* ลำดับของกำหนดการ อาจมีการเปลี่ยนแปลงได้ภายหลัง


...สัมมนา ฟรีๆ แบบนี้...ห้ามพลาด!!

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

Thursday, August 19, 2010

Oracle Database 11g Installation on IBM-AIX 6

วันนี้เกิดคึกอยากจะเขียนบล็อคขึ้นมาครับ เพราะว่าพึ่งผ่าน case นี้มาและคิดว่าเป็น case ที่้น้อยคนจะได้เจอ ก็คือการติดตั้ง Oracle Database 11g บน AIX 6 นั่นเอง หลายคนอาจจะพึ่งเคยได้ยินว่า AIX คืออะไร ก็เลยขออธิบายนิดนึงว่ามันคือ OS ของ IBM ซึ่งเป็น Linux base ถ้าอยากรู้จัก AIX มากกว่านี้ก็ลอง search ดูได้เลยครับ

กลับมาในส่วนของเราดีกว่า อย่างที่ทราบๆกันว่า ในการติดตั้ง Oracle Database เนี่ยจะมีขั้นตอนหลักๆอยู่ 2 ขั้นตอนก็คือ

1. การเตรียม pre-requisite ให้พร้อมสำหรับการติดตั้ง Oracle Database
2. การติดตั้ง Oracle Database

ในที่นี้ผมจะกล่าวถึงเฉพาะข้อแรกก็คือการเตรียม pre-requisite นั่นเอง เพราะในส่วนของการติดตั้ง ก็จะสามารถหาอ่านได้จาก blog เก่าๆครับ
การ Install Oracle Database 11g และสร้าง Database

ที่อยากจะพูดถึงเรื่องการเตรียม pre-requisite เนี่ยเพราะว่าในแต่ละ platform ก็จะมี requirement ต่างๆที่เราต้องติดตั้งหรือแก้ไขเพิ่มเติมต่างกันไปและ AIX ก็เช่นกัน ซึ่ง case ที่ผมไปเจอก็คือ AIX นั้นจะติดตั้งมาแบบ default เลย มีการแบ่งพื้นที่ให้แก่ partition ต่างๆแค่นิดเดียว partition ละไม่ถึง 1GB (เอาไฟล์ installer ลงไปยังไม่ได้เลย - -") , swap space ไม่พอและไม่ได้ติดตั้ง fileset ที่จำเป็นสำหรับการติดตั้งเพิ่มเติม (คล้ายๆกับ package ของ linux) ทำให้เราต้องมาจัดการเองทั้งหมด ซึ่งถ้าไม่เคยได้เล่น AIX เลยเนี่ยอาจจะจิตตกได้ เพราะไม่รู้ว่าต้องแก้ไขอย่างไร, หา download fileset จากไหน หรือติดตั้งอย่างไร วันนี้เรามีข้อมูลจากประสบการณ์จริงที่พบมาเล่าสู่กันฟังครับ

1 การเพิ่มพื้นที่ให้แก่ partition ต่างๆ
- เข้าไปที่ Web-based System Manager (WSM) สามารถคลิกขวาที่ partition ที่ต้องการและเลือก properties และเพิ่มขนาดได้เลย ง่ายเกินคาด สามารถใช้ได้กับ /tmp ด้วย

2.การเพิ่ม swap space
- ตรวจสอบดูก่อนว่า swap space นั้นใช้ที่ partition ใด โดยใช้คำสั่ง sysdumpdev -l และดูผลลัพธ์ที่ primary เช่น primary /dev/hd6

- เมื่อทราบแล้วว่า swap space ใช้ path ใดก็ลองตรวจสอบขนาดของมันโดยใช้คำสั่ง lsps -a จะมีการระบุขนาดไว้

- ถ้าต้องการขยายขนาดเพิ่มไปอีก 1GB สามารถทำได้โดยใช้คำสั่ง extendlv hd6 1G

- reboot เครื่องซักรอบนึง แล้วลองตรวจสอบขนาดโดยใช้คำสั่ง lsps -a เช่นเดิม จะพบว่า swap space จะเพิ่มมาอีก 1 GB แล้วครับ

ประเด็นนี้ขออ้างอิงจากน้องที่เข้าไปช่วยกันทำนะครับ โดยได้บันทึกขั้นตอนไว้ในนี้
https://jira.oracle.in.th/browse/ORCL-364

3. การติดตั้ง fileset
- จะมี fileset ที่ต้องติดตั้งเพิ่มเติมอีก 3 ตัวดังนี้
bos.adt.libm
rsct.basic.rte
rsct.compat.clients.rte

- สามารถหาได้จากแผ่นติดตั้ง AIX 6 แผ่นที่ 1 นะครับ ตอนแรกผมก็ไปหาโหลดตั้งนาน เจอแต่ไฟล์ 200-300 MB ทั้งนั้น เหมือนมัดรวมเป็น pack มาให้โหลดกันเลย ถ้าใครต้องไปติดตั้ง Oracle Database อย่าลืมทวงหาแผ่นติดตั้ง AIX 6 นะครับ

- ขั้นตอนการติดตั้งเนี่ยจะต้องทำการ mount แผ่นเข้าไปและใช้ tool ที่ชื่อว่า "SMIT" ในการติดตั้ง fileset เหล่านั้น อยากจะเน้นชื่อเจ้า tool ตัวนี้จริงๆ เพราะมันเปรียบเสมือนพระเจ้าของ System Admin เลยทีเดียว SMIT นั้นย่อมาจาก System Management Interface Tool เป็น tool ครอบจักรวาลเกี่ยวกับการจัดการระบบ ซึ่งในช่วงที่เข้าไปติดตั้งเนี่ยผมมีสโลแกนประจำใจว่า "คิดไม่ออก บอก SMIT" :p

- วิธีการติดตั้งก็ใช้ command ดังนี้ SMIT install_latest หรือจะเข้าจาก SMIT แล้วไปไล่หา option เอาก็ได้

- จะมี interface ขึ้นมาจากนั้นก็เลือก fileset ที่จะติดตั้งตาม wizard ได้เลยครับซึ่งอาจจะปล่อย option ต่างๆให้เป็น default ไปก็ได้จากนั้นกด OK ก็จะเป็นการติดตั้ง

- เมื่อติดตั้งเสร็จแล้วลองตรวจสอบดูโดยใช้คำสั่ง lslpp -l ตามด้วยชื่อ fileset ที่ต้องการตรวจสอบ เช่น lslpp -l bos.adt.libm ก็น่าจะพบว่าติดตั้งเรียบร้อยแล้ว

ทั้ง 3 ข้อที่กล่าวมานั้นเป็นการกล่าวถึงขั้นตอนที่อาจแตกต่างจาก platform อื่นๆ ส่วน pre-requisite บางอย่างเช่น ค่า kernel นั้นก็แก้ได้เช่นเดียวกับ Linux อื่นๆครับ จากนั้นก็จะสามารถติดตั้ง Oracle Database 11g บน AIX 6 ได้แล้วครับ หวังว่าบล็อคนี้จะเป็นประโยชน์ต่อผู้ที่ต้องติดตั้งบน AIX 6 ไม่มากก็น้อยนะครับ :)
ข้อเขียนนี้ช่วยฉัน:  

Tuesday, August 10, 2010

เก็บตก บรรยากาศ "อบรม Oracle DBA"

ผ่านไปแล้วนะครับ กับงาน "อบรม Oracle DBA" ในวันเสาร์ที่ 7 สิงหาคมที่ผ่านมา น้องๆ ทุกคนให้ความสนใจในการอบรมนี้กันมาก รวมทั้งวิทยากรก็บรรยาย ถ่ายเทความรู้กันอย่างเต็มที่ เรียกกันได้เลยว่า ปูพื้นกันแน่นกันสุดๆ เลย นอกจะได้ความรู้ใส่กระเป๋ากลับบ้านกันไปแล้ว ยังได้เพื่อนๆ ที่สนใจใน Oracle กลับบ้านกันไปด้วยเลย

วันนี้เราเลยเอาภาพบรรยากาศเล็กๆ น้อยๆ มาให้น้องๆ ที่พลาดโอกาศนี้ ได้ชมกันนะครับ ^^






น้องๆ สามารถดูรูปทั้งหมดได้ใน Facebook Page เลยนะครับ

...อย่าลืมติดตามกันนะครับ ว่าจะมี อบรม Oracle DBA รอบ 2 กันหรือไม่
ข้อเขียนนี้ช่วยฉัน:  

Monday, August 2, 2010

อยากเป็น Oracle DBA มาทางนี้ อบรมฟรีๆ ไม่ควรพลาด

ขอบคุณน้องๆ และทุกท่านที่ให้ความสนใจงาน อบรม Oracle DBA ในครั้งนี้กันอย่างล้นหลาม ทางทีมงานอยากแจ้งให้ทราบว่า ตอนนี้เราปิดรับสมัครแล้วเพราะ

ที่นั่งของเราเต็มแล้วครับ (อย่างรวดเร็ว!!)

สำหรับน้องๆ ที่สมัครไม่ทัน ไม่ต้องเสียใจนะครับ ทาง OUGTH ของเราจะมีการจัดอบรมดีๆ แบบนี้ได้เรื่อยๆ ติดตามข่าวสารจากเราได้ที่ http://blog.oracle.in.th ของเราเหมือนเดิมนะครับ

ขอบคุณครับ




ประชาสัมพันธ์ อบรมดีๆ แถมฟรีอีกด้วย สำหรับนักศึกษาเท่านั้น (ป.ตรี ขึ้นไป) เพียงแค่ Email มาหาเราที่ oracle.in.th@gmail.com พร้อมส่ง ชื่อ-นามสกุล, เบอร์ติดต่อกลับ, ชื่อสถานศึกษา, และแนบสำเนาบัตรนักศึกษา มาให้เรา ...คุณจะได้รับสิทธิในการเข้าอบรมครั้งนี้เลยทันที

ผู้เข้าร่วมอบรม จะได้รับความรู้เกี่ยวกับการเป็น Oracle DBA อย่างเจาะลึก กับวิทยากรที่มากด้วยประสบการณ์ รวมทั้งแขกรับเชิญจาก Oracle ACE หนึ่งเดียวในประเทศไทย มาร่วม Join การอบรมครั้งนี้ด้วย!! รับรองว่า งานอบรมดีๆ แบบนี้ หาไม่ได้ที่ไหนอีกแน่นอน


รายละเอียดของการอบรม
วันที่ทำการอบรม: วันเสาร์ที่ 7 สิงหาคม 2553
เวลา: 09:00 - 16:30 น.
สถานที่: อาคาร ปาโซ่ ทาวเวอร์ ชั้น 21 ถนนสีลม แขวงสุริยวงศ์ กรุงเทพมหานคร 10500
(ห่างจากรถไฟฟ้า BTS สถานีช่องนนทรี ประมาณ 500 เมตร)

...โอกาสดี มันไม่ได้มีง่ายๆ รีบคว้าไว้ ก่อนที่จะสายไป

ด่วน!! รับจำนวนจำกัดนะครับ

สอบถามรายละเอียดเพิ่มเติมได้ที่ 02-634-1711 หรือ oracle.in.th@gmail.com

แผนที่ของสถานที่อบรม

ดู อบรม Oracle DBA ฟรีๆ กับ Oracle User Group in Thailand ในแผนที่ขนาดใหญ่กว่า
ข้อเขียนนี้ช่วยฉัน:  

Saturday, July 31, 2010

JSF 2.0 Template

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

โดยหลักการของ Template คือเราจะสร้าง html template (ซึ่งก็จะไว้สำหรับกำหนดโครงของหน้าเว็บเราว่าจะเป็นอย่างไร แล้วทีนี้เราก็ไปสร้าง aa.jsf, ab.jsf ที่เป็นส่วนที่เป็นเนื้อหาแต่ละหน้า แล้วเวลาที่ user request มาก็ให้มัน render รวมกันออกมาเป็นหน้าเว็บที่เราต้องการ

งงไหมครับ ถ้างงก็อย่าแปลกใจ พอเห็นตัวอย่างจะรู้ว่ามันง่ายกว่าที่คิดเยอะเลยครับ ทีนี้ก็ ลอง update svn เพือเอาไฟล์ลงมากันเลยซึ่งหลักๆจะมี 2 ไฟล์คือ templatenormal.xhtml, template.xhtml ที่นี้เรามาดูส่วนของ template กันก่อนคือ

ถ้าเปิด templatenormal.xhtml ดูจะเห็นว่าเป็น xhtml ธรรมดาๆเลย แต่จะมีในส่วนของ ui:insert เพิ่มเข้ามา
<ui:insert name="title" /> , <ui:insert name="content" />

ลองเปิด template.xhtml ดูบ้างก็จะเห็นว่าเป็น xhtml ปกติๆ อีกเหมือนกัน แต่จะมีในส่วนของ <ui:composition template="/layout/templatenormal.xhtml" > ที่เพิ่มเข้ามา อ้างไปถึง template file ที่เราต้องการนั่นเอง และอีกส่วนคือ <ui:define name="title" ....... <ui:define name="content" .......

สังเกตุไหมครับอันนึงบอกว่า ใส่ title,content อันนึงกำหนดส่วน insert, content ...

แล้วอย่างนี้ถ้าเรารัน template.jsf หร่ะ อะไรจะเกิดขึ้น ก็จะได้ หน้าจอแบบที่สร้างใน templatenormal แต่มี data บางส่วนมาจาก template

เนี่ยแหละครับสมมุติวันดีคืนดีเราเปลี่ยน template หร่ะ ก็ไปแก้แค่ทีเดียว ทั้งโปรเจคเราก็เปลี่ยนตามแล้ว เป็นไงครับ JSF ง่ายดีไหม? ^ ^

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

copyright 2010 @nuboat in wonderland
ข้อเขียนนี้ช่วยฉัน:  

Thursday, July 29, 2010

Newsletter ประจำเดือน สิงหาคม 2010


Newsletter ของ Oracle User Group in Thailand ฉบับที่ 2 ประจำเดือน สิงหาคม 2010 ออกมาแล้วนะคะ รับรองฉบับนี้ คุณจะไม่พลาดกับ Oracle Business Intelligence 11g ที่เพิ่งออกใหม่มาสด ๆ ร้อน ๆ , event ดี ๆ สำหรับ developer กับ Oracle Tuxedo, เว็บ OTN โฉมใหม่ เฉี่ยวกว่าเดิม และอื่น ๆ อีกมากมาย พร้อมมีแจกโปรแกรม java แบบฟรี ๆ

มาติดตามข่าวสารใหม่ ๆ คัดเรื่องทีี่่น่าสนใจ บทเรียนน่าศึกษา เทคนิคแบบเจ๋ง ๆ กับเราที่นี่ทุกเดือน คลิกที่นี่เลย News Letter: August 2010
ข้อเขียนนี้ช่วยฉัน:  

Monday, July 26, 2010

JSF 2.0 Repeat, Datatable & AJAX

หายอู้แล้ว โผล่มาอัพ #jsftutorail กันต่อ ก็ใกล้จบแล้วนะครับสำหรับ Tutorial ง่ายๆนี้ วันนี้จะมาให้ดูในส่วนของ Table, Repeat ครับซึ่งก็จากชื่อก็เห็นแล้วว่าไว้จัดการกับพวก data ที่เป็น collection กัน

มาดูกันที่ Repeat ก่อนครับ อันนี้สำหรับลูปในการสร้าง html จริงๆ จะเอาไปทำไรก็ได้ตามต้องการ
โดยจะได้ว่า uv จะแทน instance ของ uvlist ของ uiRepeatManagedBean
<ui:repeat var="uv" value="#{uiRepeatManagedBean.uvlist}" >
--<tr>
----<td>#{uv.name}<t/td>
----<td>#{uv.username}<t/td>
----<td>#{uv.group}/<ttd>
--</tr>
</ui:repeat>

*คล้ายๆกับ for( String str : lists) นั่นแหละครับ
ลองดูแบบเต็มที่ สองไฟล์นี้ครับ UiRepeatManagedBean.java, uirepeat.xhtml ครับ

มาดู Datatable กันต่อเลย จะเห็นว่าเราสามารถสร้าง Table ได้ตามรูปข้างล่างเลยครับ
<h:dataTable var="user" value="#{dataTableManagedBean.userViews}" border="1" cellpadding="5" cellspacing="0">
--<h:column>
----<f:facet name="header">Name</f:facet>
----#{user.name}
--</h:column>
--<h:column>
----<f:facet name="header">Username</f:facet>
----#{user.username}
--</h:column>
--<h:column>
----<f:facet name="header">Group</f:facet>
----#{user.group}
--</h:column>
</h:dataTable>

<f:facet ... > เป็นการกำหนด Header ของ Table นั้นๆ
ลองดูแบบเต็มที่ สองไฟล์นี้ครับ DataTableManagedBean.java, datatable.xhtml ครับ


เรื่องสุดท้าย Ajax ใน JSF2.0
<h:form id="formid" >
--Time : #{ajaxManagedBean.timenow} <br />
--<h:outputText value="Tpye here : "/>
--<h:inputText value="#{ajaxManagedBean.str}" required="true" /> 
--<h:commandButton action="#{ajaxManagedBean.echo}" value="AJAX BTN" >
----<f:ajax execute="@form" render="formid:resultid" />
--</h:commandButton> 
--<h:commandButton action="#{ajaxManagedBean.echo}" value="OK" /><br />
--<b><h:outputText value="#{ajaxManagedBean.echoStr}" id="resultid" /></b>
</h:form>
ลองดูนะครับ ผมได้กำหนดให้ "AJAX BTN" เป็น Button แบบ Ajax ผ่าน โดยให้มันส่ง data ที่อยู่ใน < ทั้งหมดกลับไป(เราสามารถกำหนดได้ว่าจะให้ส่งอะไรกลับไปบ้าง) ส่วนคำสั่ง render คือให้มันเรนเดอร์ <h:outputText id="resultid" ... /> ใหม่นั่นเอง

ลองดูแบบเต็มที่ สองไฟล์นี้ครับ AjaxManagedBean.java, ajax.xhtml ครับ


จบแล้วเป็นไงง่ายไหมครับ ^ ^ จะเห็นว่าไม่มีอะไรเลยใช่ไหมครับ ก็บอกแล้วว่า JSF อะง่ายมาก อะฮิๆ ไว้เดี๊ยวผมจะมาลองสร้างหน้า search แบบ AJAX ให้ดูสักหน้า เพือให้เห็นว่าโค้ดจริงๆ มันก็ใช้ความรู้เล็กๆ ที่ผมไล่มาตั้งแต่ต้นเนี่ยแหละในการสร้าง Web Application อย่างท่ี่ต้องการ

copyright 2010 @nuboat in wonderland
ข้อเขียนนี้ช่วยฉัน:  

Thursday, July 22, 2010

วิธีเปลี่ยนเมนูภาษาไทยเป็นอังกฤษใน Oracle Developer Suite 10g

เมื่อติดตั้ง Oracle Developer Suite 10g ได้เมนูเป็นภาษาไทย รู้สึกใช้งานยาก ต้องการเปลี่ยนเป็น Eng ทำอย่างไร? วันนี้ผมมีวิธีแก้มาบอกครับ

การแก้ปัญหาต้องการเปลี่ยนเมนูของ Oracle Developer Suite 10g จากภาษาไทยให้เป็นภาษาอังกฤษ

ขั้นตอนการแก้ปัญหาสามารถทำได้ดังนี้
1. Start > Run และพิมพ์ regedit


2. ที่แท็บ HKEY_LOCAL_MACHINE ทำการค้นหา registry ที่ชื่อ nls_lang ของ Developer Suite ซึ่งแต่ละเครื่องอาจจะอยู่ที่ Path ต่างๆกันไป สามารถทำการค้นหาได้ โดยคลิกขวาที่ HKEY_LOCAL_MACHINE และกด Find จากนั้นพิมพ์n ls_lang และกด Find (ในที่นี้ อยู่ที่ HKEY_LOCAL_MACHINE > SOFTWARE >Wow6432Node > ORACLE > KEY_DevSuiteHome1)


3. คลิกขวาที่ nls_lang และเลือก Modify ให้ทำการแก้ไขค่าจาก THAI_THAILAND.TH8TISASCII ให้เป็น AMERICAN_AMERICA.TH8TISASCII ซึ่งการแก้ไขแบบนี้ จะทำให้เมนูของ Oracle Developer Suite กลายเป็นภาษาอังกฤษ และยังสามารถเก็บข้อมูลหรือแสดงผลเป็นภาษาไทยได้อีกด้วย จากนั้นกด OK


4. ทำการ Restart เครื่อง จากนั้นเมนูของ Oracle Developer Suite จะกลายเป็นภาษาอังกฤษแล้วครับ

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

Tuesday, July 20, 2010

ติดตั้ง Oracle แล้วติดปัญหา Swap size ทำอย่างไรดี??

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



สำหรับคนที่เคยทำการ ติดตั้ง Oracle Database 11gR2 ใน Linux Redhat อาจะจะได้พบกับ Error ต่าง ๆ ที่แสดงให้เห็นในขั้นตอนของ Prerequisite Check ซึ่งถ้าเป็น Error ทั่วไป คุณก็สามารถกดปุ่ม Fix & Chack Again เพื่อให้ระบบทำการ fix error ให้อัตโนมัติ แต่ในกรณีนี้ Error ของผมที่เจอมากับตัวคือ Swap Size ซึ่งตอนที่ผมทำนั้น ผมทำการติดตั้งใน VMware โดยติดตั้ง oracle db11201 ตาม OBE ใน Linux Redhat แล้วแบ่ง Swap space น้อยไป

Error Message:

This is a prerequisite condition to test whether sufficient 
total swap space is available on the system. (more details)
Expected Value : 2.22GB (2332980.0KB)
Actual Value : 2GB (2097144.0KB)
ที่เกิด Error นี้ ก็เป็นเพราะว่่า ในขณะติดตั้ง oel5 กำหนดขนาด swap partition ไว้น้อยไป

วิธีแก้ก็มีอยู่ 2 ข้อคือ
1. ลง OS ใหม่ซะเลย หรือ
2. เพิ่ม swap space นั่นเอง

การจะลง OS ใหม่ ก็เสียเวลา...ฉะนั้น มาดูวิธีการเพิ่ม swap space ดีกว่า

1.เริ่มจาก login เข้าใช้โดย user root

2. เปิด terminalแล้วพิมพ์คำสั่งตามนี้ครับ
dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
โดยที่ count=524288 คือค่าที่ได้จาก 1024*512(ค่าที่อยากเพิ่มเป็น Mb) ช่วงนี้ก็รอสักครู่นะครับ

3. หลังจากนั้นก็ set up swap area ครับ ด้วยคำสั่ง
mkswap /swapfile1

4. เสร็จแล้วเราก็ Active swapfile1 ด้วยคำสั่ง
swapon /swapfile1

5. ต่อไปจะทำให้ swapfile1 ถูกเรียกทุกครั้งหลังจากที่เปิดเครื่องมาใหม่
vi /etc/fstab
เพื่อเปิดไฟล์ fstab ขึ้นมาแก้ โดยเพิ่ม
/swapfile1 swap swap defaults 0 0 
ต่อท้ายของของไฟล์ เป็นอันเสร็จครับ ทีนี้หลังจากนี้เราก็จะได้ swap file ที่มีขนาดใหญ่ขึ้นครับ

6. สามารถใช้คำสั่ง
free -m
เพื่อเช็คขนาดของ swap file ของเราได้ครับ

Credit by Pelay

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

Friday, July 16, 2010

แจกโปรแกรม Password Generator แบบเบาๆ

เรื่อง Java ใน blog ห่างหายไปนานเลย... เพราะช่วงนี้จะอัพแต่เรื่อง Oracle ซะส่วนใหญ่
วันนี้มีโอกาส ก็เลยเอาเรื่อง Java แบบเบาๆ มาให้อ่านกันนะครับ


คือเรื่องมันมีอยู่ว่า วันนึงผมบังเอิญต้องคิด Password ขึ้นมาใช้งานโดยที่มันต้องมีทั้งตัวเลขและตัวอักษร โดย Password ที่จะคิดขึ้นมานั้น ต้องเอาไปใช้ในเรื่องที่สำคัญซะด้วยสิ...

ซึ่งจะให้ผมคิดเองก็คิดไม่ออกว่าจะคิดออกมาอย่างไรดี ให้มันดู Secure มากที่สุดเอาแบบที่ว่าให้คนอื่นคิดไม่ถึงหรือไม่สามารถเดาได้เลย พร้อมกันนั้น ต้องให้ Password นั้นดูแล้วเราก็สามารถจำได้ง่ายๆ จะได้ไม่ลืมด้วย ไม่ใช่ว่าคิด Password ซะเลิศหรู ดูดี แต่พอมาใช้งานจริง เรากลับจำไม่ได้เองซะงั้น...

ไปๆ มาๆ ผมก็เลยมี idea ขึ้นมา... สร้างตัว Generate password เลยดีกว่า
ซึ่งแน่นอนเลย ผมก็เขียนขึ้นมาใน java นั่นเอง

หลักการที่ผมเขียนเจ้าตัว Password Generator นี้ก็ไม่ซับซ้อนแถมวิธีใช้ก็ง่ายเช่นเดียวกัน ก็แค่ให้มัน generate password ให้ผมขึ้นมาเลย เช่น

890A1UMQ8B
WPD3AMHU
889EO6Q8
3TEG8439S8
3CE609SK
JIKY661A42
T0M770Z2
7119IG2FJ
45977DII9I
P35D7571

แล้วผมก็เอามาดูว่า ตัวไหนที่มันสวยจำง่าย ก็เอามาใช้เป็น Password ซะเลย เช่น
889EO6Q8 หรือ T0M770Z2
ทั้งสวย จำง่าย แถมคนอื่่นยังคิดไม่ถึงด้วย ;P

เท่านี้ ต่อไป ผมก็ไม่ต้องมานั่งเสียเวลาในการคิด Password อีกต่อไปแล้วละครับ
คุณสามารถ Download Password Generator ตัวนี้ไปทดลองเล่นได้เลยจากที่นี่ครับ
Download Source Code

ขอให้สนุกกับ Password Generator นะครับ ^^

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

Wednesday, July 14, 2010

WebCenter 11g เวอร์ชั่น 11.1.1.3 ได้รับการรับรองแล้ว

หลังจากที่ Oracle WebCenter Suite ได้เปิดตัวออกมา ตอนนี้ทาง oracle ได้ทำการพัฒนา WebCenter 11g ใน patch 11.1.1.3 แล้ว และสามารถใช้งานได้ใน Oracle E-Business Suite Release 12 (12.0.4 และสูงกว่า หรือ 12.1.1 และสูงกว่า) ได้อย่างสมบูรณ์แบบ ส่วน WebCenter 11g version 11.1.1.2 (a.k.a. Patchset 1) ที่เปิดตัวเมื่อต้นปีนั้น ก็สามารถใช้ได้กับ Oracle E-Business Suite Release 12 เช่นกัน

Oracle WebCenter Suite คืออะไร? สามารถหาคำตอบได้จาก บทความ นี้


สำหรับผู้ที่ต้องการทราบวิธี installation และ configuration สามารถดูได้จาก documentation นี้:

Certified EBS 12 Platforms
  • Linux x86 (Oracle Enterprise Linux 4, 5)
  • Linux x86 (RHEL 4, 5)
  • Linux x86 (SLES 10)
  • Linux x86-64 (Oracle Enterprise Linux 4, 5)
  • Linux x86-64 (RHEL4, 5)
  • Linux x86-64 (SLES 10)
  • Oracle Solaris on SPARC (64-bit) (9, 10)
  • HP-UX Itanium (11.23, 11.31)
  • HP-UX PA-RISC (64-bit) (11.23, 11.31)
  • IBM AIX on Power Systems (64-bit) (5.3, 6.1)
  • Microsoft Windows Server (32-bit) (2003; 2008 for EBS 12.1 only)

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

Friday, July 9, 2010

Oracle Database Vault

Oracle Database Vault คืออะไร ? ในบทความวันนี้ ผมจะมาอธิบายข้อดีคร่าว ๆ ของการใช้เจ้าตัวนี้ ให้ทุกท่านได้อ่านกันนะครับ

Oracle Database Vault
คือส่วนหนึ่งของ database security ครับ โดยจะทำหน้าจำกัด user ผู้เข้าใช้ database ให้สามารถเข้าได้เฉพาะ user ที่ได้รับอนุญาติหรือเป็น DBA นั่นเองครับ ทั้งนี้เพื่อความปลอดภัยของ application ต่าง ๆ ที่ต้องการ security โดยมีหลักการ security ตามข้อบังคับต่าง ๆ เช่น Sarbanes-Oxley, Payment Card Industry (PCI) Data Security Standard (DSS), Health Insurance Portability and Accountability Act (HIPAA)และ อื่น ๆ ที่เกี่ยวข้องกับ security ใน data integrity และ data privacy โดย Oracle Database Vault จะทำการป้องกันการเข้าใช้ database ตาม environtment ต่างๆที่ต้องการ เช่น วันเวลาที่เข้าใช้, IP Address ของผู้เข้าใช้, ชื่อเข้า application ที่เข้ามาใช้ และการ authentication user ต่าง ๆ

โดยการใช้ Oracle Database Vault มีข้อดีดังนี้ครับ
  • Pro-actively safeguard application data stored in the Oracle database คือการป้องกันไม่ให้ผู้ใช้ที่ไม่ผ่านการ authentication เข้ามาใช้ข้อมูลได้
  • Address regulatory requirements คือการแบ่งความรับชอบตามหน้าที่ของ user
  • Restrict ad-hoc access to application data เป็นการป้องกันการใช้ application ที่ไม่ได้รับอนุญาติให้เข้าใช้ ด้วย multi-factor policies
  • Deploy with confidence สามารถติดตั้งได้กับ Oracle E-Business Suite, Oracle PeopleSoft, และ Oracle Siebel CRM
  • Realms เป็นการรวม schemas, object และ role ต่างๆที่ต้องการให้มี secure ไว้ด้วยกัน และกำหนดสิทธิ์ให้เฉพาะบาง user หรือ role มีสิทธิ์เข้าถึงข้อมูลเหล่านั้นได้
  • Command Rules เป็นการกำหนดให้ user สามารถ execute คำสั่งได้บางคำสั่ง
  • Factors เป็นการกำหนดการเข้าถึงข้อมูลโดยใช้ factor ซึ่งจะเก็บค่าต่างๆเช่น user location, database IP address หรือ user's session
  • Rule Sets คือ rule หรือกลุ่มของ rule ที่ใช้ร่วมกับ realms, command rule, factor และ secure application role
  • Secure Application Role เป็น special role ที่สามารถใช้ร่วมกับ rule set ได้
Credit by Ice, Yong

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

Friday, July 2, 2010

Oracle User Group in Thailand - News Letter: July 2010 มาแล้ว

สวัสดีครับทุกท่าน

สำหรับโพสนี้ ไม่มีอะไรมากมาย เพียงแค่ผมอยากจะประชาสัมพันธ์จดหมายข่าวของเรากันซะหน่อย หรือ Oracle User Group in Thailand Newsletter ฉบับที่ 1 ประจำเดือน กรกฎาคม นั่นเอง

โดย Newsletter นี้ จะประกอบไปด้วยเรื่องราวต่าง ๆ ที่น่าสนใจเกี่ยวกับ Oracle ไม่ว่าจะเป็นเทคนิคต่าง ๆ, ข่าวสารใหม่ ๆ, Events ที่น่าสนใจ, เรื่องน่ารู้ต่าง ๆ ที่คุณไม่ควรพลาด ส่งตรงให้คุณถึงที่

ซึ่ง Newsletter นี้ จัดทำโดยทีมงานของ Oracle User Group in Thailand ทุกท่าน พร้อมที่จะให้ทุกท่านได้รับรู้ข่าวสารต่าง ๆ อัพเดทไปกับเรานะครับ

ถ้าสนใจอ่าน คลิกที่ Link นี้ได้เลย
Oracle User Group in Thailand: News Letter: July 2010

ปล. ครั้งนี้เป็นครั้งแรก ถ้ามีข้อแนะนำ ติชม หรือเสนอแนะ ก็ Comment บอกกันได้นะครับ ผมจะได้ไปปรับปรุงให้ดีขึ้น

...ขอบคุณมากครับ
ข้อเขียนนี้ช่วยฉัน:  

Thursday, July 1, 2010

JSF 2.0 Properties and Localization

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

งั้นวันนี้เรามาดูเรื่องการใช้ *.properties และการกำหนด localization ครับใน jsf ครับ
ทีนี้สำหรับคนที่เคยเขียน java มาก่อนจะรู้ว่า java จะมี api สำหรับให้มันโหลด properties files มาเก็บไว้ใน memory ทำให้เร็วเวลาที่จะเรียกใช้นะครับ แต่ในบทนี้เราจะดูถึงการเอา properties file มาเพื่อจัดการการแสดงผลใน java และการทำเว็บสำหรับหลายภาษาผ่าน properties

มาดูกันก่อนว่าต้องดูที่ไฟล์ไหนบ้าง

localization.xhtml, properties.xhtml, LocalizationManagedBean.java, webmessage.properties, webmessage_th.properties

ก็ update or check out กันลงมาได้เลยครับ

ไปดูกันที่ properties.xhtml กันก่อนเลยครับ

<f:loadBundle basename="cc.nuboat.messages.webmessage" var="msg"/>


ประกาศให้ msg แทน properties นั่นๆ ทีนี้ก็สามารถที่จะอ้างถึง message ใน webmessgae.propeties ได้แล้วครับ

<h:head>
----<title>#{msg.title_properties}</title>
</h:head>


**ข้องี่เง่าอย่างของ jsf คือ ถ้า key ใน *.properties เป็น title.properties จะไม่ได้นะครับ (ทั้งที่ควรจะได้) ถ้าอยากรู้ว่าไมไ่ด้จริงลองเปลี่ยน #{msg.title_properties} เป็น #{msg.title.properties} ดูแล้วลองรันดูครับ

ต่อไปคืออะไร จะเห็นว่าเรามี webmessage.properties, webmessage_th.properties ทีนี้ในโค้ดเราจะไปเรียก webmessage แต่เราจะมาทำให้ jsf ไปเรียกใช้ webmessage_th แทนโดยไม่ต้องแก้โค้ดใหม่เลย(ลองนึกถึงโปรแกรมหรือเว็บที่เปลี่ยนภาษาของเมนูต่างๆได้)

ไปดูกันที่ localization.xhtml กันเลยครับ

<f:view locale="#{localizationManagedBean.locale}">

<f:loadBundle basename="cc.nuboat.messages.webmessage" var="msg"/>


จะเห็นว่าผมมีการกำหนด locale ของ jsf ใหม่โดยใช้ค่าที่ get มาจาก localizationManagedBean เพิ่มด้วย

ลองรัน http://127.0.0.1:8080/easyjsf/localization.jsf ดูเลยครับ

ทีนี้จะแสดงผลเป็นภาษาไทยแทนแล้วซึ่งเป็น value จาก webmessage_th แล้ว ^ ^

copyright 2010 @nuboat in wonderland
ข้อเขียนนี้ช่วยฉัน:  

Wednesday, June 30, 2010

Oracle Application Express 4.0 พร้อมดาวน์โหลดแล้ว!!!


สำหรับคนที่เล่นตัว Oracle Application Express หรือ APEX อยู่นั้น เห็นข่าวนี้คงจะดีใจนะครับ เพราะว่าทาง Oracle ได้ออกตัว Oracle Application Express Release 4.0 มาให้ดาวน์โหลดกันไปใช้แล้ว หลังจากที่เคยออกมาให้ทดลองเล่นกันในแบบ Oracle Application Express 4.0 Early Access ให้ติดใจกันก่อน แล้วค่อยปล่อยของจริงในวันนี้นี่เอง

สนใจดาวน์โหลดตัว Oracle Application Express 4.0 คลิก ที่นี่ เลยครับ
ถ้าได้ทดสอบกันแล้ว เป็นอย่างไร อย่าลืมมาแชร์ประสบการณ์กันนะครับ :)

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

Saturday, June 26, 2010

JSF 2.0 Navigation Rules

ฟังคนเขียนพร่ามก่อนเริ่มเนื้อหากันหน่อยครับ ล่าสุดก็ให้เพือนที่เก่ง(กว่าผม) ช่วยตรวจ #jsftutorial ที่ผ่านมาหลายๆตอน ก็ได้มีการแก้ไขจุกจิก เพิ่มรายละเอียดเข้าไปนิดๆหน่อย เอาเป็นว่าถ้าใครอ่านแล้ว งง สงสัย ก็แจ้งกันไว้ทาง comment ได้เลยครับ หรือถ้าใครว่างก็ลองกลับไปไล่อ่านอันเก่าๆใหม่บ้างนะครับ เผือผมกลับไปเพิ่มอะไรไว้ได้ไม่พลาดไป ถือซะว่าเป็นการทบทวนกันไปในตัว เพราะอันนี้ก็เขียนกันแบบฉุกละหุก แต่ละบทความใช้เวลา เขียน รวมรวม ทำตัวอย่าง ที่ประมาณสามชั่วโมงเท่านั้น(ดูก็รู้ว่าคนเขียนไม่ตั้งใจสุดๆ 555+) จริงๆคือเนื้อหามันเยอะมากครับ กลัวเขียนไม่จบ สรุปว่าคงต้องให้คนอ่านช่วยครับ รบกวนลองทำตามกันแล้วถ้าใครสะดุดยังไง ติดตรงไหนก็ comment กันเข้ามาได้แก้ได้ แต่ตอนนี้เรามาดูกันต่อดีกว่าครับ

วันนี้คงจะพูดถึงเรื่อง Navigation Rules ครับ คืออะไร ก็เป็นเหมือนข้อกำหนดสำหรับไว้ทำเวลาที่เรา action กลับไปที่ backing bean แล่้วพอจบให้มัน return ไปที่หน้าไหนต่อนั่งเอง โดยใน JSF2.0 นั่นเรายังต้องไปสร้าง navigation rules ใน faces-config.xml เหมือนใน 1.x แต่เราจะมี default มาเลยด้วย

จริงๆแล้วเราเคยผ่านการใช้งาน Navigation ของ JSF ผ่านมาแล้วครับ ถ้านึกไม่ออกผมจะย้อนให้ดูกัน

helloform ----> helloManagedBean ----> hello จำกันได้ยังครับใน action hello ใน helloManagedBean นั่นเราได้มีการ return "hello" จะเห็นว่าหลังจบ action มันได้ forward เราไปที่หน้า hello.jsf นั่นเอง เห็นยังครับ navi แบบ default ก็คือชื่อไฟล์ xhtml เรานี่เองแต่ตัด .xhtml ออกไป ทีนี้ถ้าเราอยากให้มัน forward ไปที่อื่นเราก็แค่เปลี่ยน String ที่ return ตอนจบ action ใน ManagedBean นั่นๆซะ
แต่ถ้าไฟล์ xhtml อยู่ใน sub directory เราก็ต้องใส่ชื่อ directory นั่นๆด้วยตามนี้

$WEB-FOLDER/
----$WEB-INF/
----$SUB-DIRECTORY1/abc.xhtml


default navigation rules สำหรับ abc.xhtml ก็จะเป็น /$SUB-DIRECTORY1/abc นั่นเอง
เรายังมี default อีกอย่างคือ return null ครับ ความหมายถือให้ redirect กลับไปที่หน้าเดิม

ต่อๆ แล้วถ้าเกิดว่าเราคิดว่าแบบข้างบนยาวไปหร่ะเราจะทำไงได้ ก็ทำให้สั่นลงครับด้วย xml config ด้านล่างนั่นเอง

<navigation-rule>
----<description />
----<display-name />
----<icon />
----<from-view-id />
----<navigation-case>
--------<description />
--------<display-name />
--------<icon />
--------<from-action />
--------<from-outcome />
--------<to-view-id />
--------<redirect />

<description />, <display-name />, <icon /> : สามอันนี้เป็นแค่ meta-data ครับ ไม่ต้องสนใจ (จุดประสงค์ทำให้เปิดมาอ่านแล้วไม่งงกับทำให้พวก GUI Tool ทั่้งหลายใช้ซะมากกว่า

<from-view-id >helloform.xhtml</from-view-id > : อันนี้สำหรับไว้กำหนดเป็น rules สำหรับ pages ไหนครับ (สามารถใส่ * ได้แทนความว่า apply rules เข้ากับทุกหน้า)

<from-action >#{helloManagedBean.hello}</from-action >, <from-outcome>hello</from-outcome> : จะมีสี่กรณีที่เป็นไปได้ครับ
1. กรณีที่ไม่มีทั้งสองตัวจะหมายถึง default ของ rule นั้นๆ ในกรณีที่ไม่ตรงกับ criteria อะไรเลย
2. กรณีที่มีแค่ <from-action /> คือไม่ว่าจะ return อะไรที่มาจาก action ที่กำหนดไว้จะไปที่ <to-view-id />
3. กรณีที่มีแค่ <from-outcome/> คือจะไปที่ <to-view-id /> โดยไม่สนว่ามาจาก action ไหนๆ
4. กรณีสุดท้ายคือมีทั้งคู่ คือต้องเป็น outcome ที่มาจาก action นั่นๆเท่านั้นถึงจะไปที่ <to-view-id /> ที่กำหนดไว้

<to-view-id>hello.xhtml</to-view-id> : สำหรับกำหนด jsf page ของ rule นั้นๆ

<redirect /> : อันนี้สำหรับกำหนดว่าจะให้มันไปแบบ forward, redirect ครับ (รายละเอียดอ่านได้ในเนื้อหาเกี่ยวกับ Servlet)
** ใน 1 <navigation-rules> สามารมี <navigation-case> ได้มากกว่า 1 นะครับ

อ่ะ เสร็จแล้วๆ อะฮิๆ ทีนี้ก็ Checkout/Update Code ลงมาแล้วลุยกันเลยครับ โดยไฟล์สำหรับดูเรื่อง Navigation rules จะมีดังนี้ NavigationManagedBean.java, navigation.xhtml, bangkok.xhtml, tokyo.xhtml, paris.xhtml, faces-config.xml

ปล. รอบนี้แอบใจร้ายนะครับ เพราะว่าทั้งใน faces-config.xml, NavigationManagedBean ยังไม่เสร็จทั้งคู่ โดยผมได้ใส่ @TODO ไว้แล้วว่าต้องทำอะไรเพิ่มบ้าง

copyright 2010 @nuboat in wonderland
ข้อเขียนนี้ช่วยฉัน:  

Wednesday, June 23, 2010

JSF 2.0 Expression Language

มาแล้วตอนต่อของ JSF 2.0 ก่อนหน้านี้พอดีมีคนมาถามเรือง Session ในทวิตเตอร์ครับ ก็ขอโทษทีช้านะครับ อาจจะช้าๆกันสักนิดนะครับ ผมเผาเนื้อหาให้ไม่ทันค้าบบบ JSF ไ่ม่ใช่น้อยๆนะ ได้บ่นก่อนเขียนแล้วก็มาดูกันต่อดีกว่า ก่อนหน้านี้เราก็ได้เห็น Expression Language หรือ #{helloManagedBean.name} พวกนี้แทรกๆอยู่ตามหน้า xhtml ต่างๆของเรานะครับ ทีนี้แหละเราจะมาดูส่วนนี้แบบละเอียดๆ กันครับว่าเราจะใช้ EL ได้ในรูปแบบใดๆบ้างนะครับ

1. เราจะใช้มันในการ set/get data ระหว่างหน้าจอกับ bean ครับผมแบ่นเป็นให้ดูเป็นสามรูปแบบนะครับ
1.1 อ้างถึง Element แบบธรรมดาก่อนละกันครับ เช่น
#{helloManagedBean.name} หรืออาจจะ nested ลงไปก็ได้เช่นถ้าให้ userView เป็น POJO ที่มี name เป็น property อีกทีก็ #{expressionManagedBean.userView.name}

1.2 อ้างถึง Element ที่เป็น array, list ต่างๆ ดังรูปแบบนี้นะครับ #{bean.array[index]}
#{expressionManagedBean.listdata[0]}
#{expressionManagedBean.listdata[1]}
ตามตัวออย่างนี้ listdata เป็น String[] listdata = new String[4]
#{expressionManagedBean.userList[0].name}
#{expressionManagedBean.userList[0].username}
#{expressionManagedBean.userList[0].group}
#{expressionManagedBean.userList[1].name}
#{expressionManagedBean.userList[1].username}
#{expressionManagedBean.userList[1].group}
ตามตัวออย่างนี้ userListเป็น List<UserView> userList = new LinkedList<UserView>()

1.3 อ้างถึง Element ที่เป้น Map, Hash โดยจะมีรูปแบบดังนี้คือ #{bean.hashtable[key]}
#{expressionManagedBean.mapdata["HOTMAIL"]}
#{expressionManagedBean.mapdata["GMAIL"]}
ตามตัวออย่างนี้ Map<String, String> mapdata = new HashMapString, String>()
ex. <h:inputText value="#{helloManagedBean.name}" /> หรือใช้ print ตรงๆ เลยก็ได้ {helloManagedBean.name}

โดยการทำแบบนี้นั้นตัว HelloManagedBean ก็ต้องมีการประกาศ set/get ของ property name ไว้ด้วยเพือให้สามารถเข้าถึงข้อมูลได้นะครับ


2. เราจะใช้ในการให้ JSF call ไปที่ action ต่างๆของ ManagedBean ตัวนี้ดูง่ายครับ ก็เรียกตรงๆได้เลย
ex. <h:commandButton value="OK" action="#{helloManagedBean.hello}" />
hello เป็น method นะครับไม่ใช่ property ไม่ต้องสร้าง getHello นะครับ ;P

3. ใช้ EL Operators ต่างๆ ดังนี้
Arithmetic :: – +-*/div%mod
Relational :: Use eq, ne, lt, gt, ge, instead of ==, !=, <, >, >=
Logical :: Use and, or, not instead of &&, ||, !
Empty :: empty โดยที่จะเป็น true เมือเป็น null, empty string, empty array, empty list, empty map และเป็น False ในกรณี่อื่นๆ

ex. #{3+2-1}, #{3+2-1}, #{3%2}, #{3/4 == 0.75}, #{ null == "test" }, #{true ? 'true' : 'false'}

update svn แล้วก็มาลองรันกันดูเลยครับ
1. http://127.0.0.1:8080/easyjsf/expression.jsf
2. http://127.0.0.1:8080/easyjsf/operators.jsf


copyright 2010 @nuboat in wonderland
ข้อเขียนนี้ช่วยฉัน:  

Tuesday, June 22, 2010

JSF 2.0 ManagedBean

ผ่านไปแล้วกับ Getting Started นะครับ ในส่วนนั้นเราคงไม่มีอะไรมาก นอกจากแค่อยากให้ทุกคนสามารถที่จะ Startup project ได้แบบ full loop คือ New -> Implement -> Build -> Deploy -> Test และในส่วนตัวผม ผมว่าทุกเรื่องนี่ยากที่สุดก็ Startup นี่แหละครับแต่พอมันได้แล้วที่เหลือมันก็ได้ไปเรื่อยๆเองนั่นแหละ เท่ากับว่าทุกคนจงดีใจได้เลยเราว่าผ่านส่วนที่ยากที่สุดของ JSF มาแล้วนั่นเอง (หุหุ ใครจะเชือผมมั่งเนี่ย)

JSF คือไรก็ได้บอกไปแล้ว ทีนี้ JSF มีส่วนสำคัญคืออะไร ก็คงเป็น ManagedBean ที่เราจะมาดูกันต่อนี่แหละ มันมีไว้ทำไม ก็เป็นส่วนที่ไว้คำนวนทุกอย่างที่เราต้องการให้โปรแกรมทำได้นั่นแหละครับ โดยในบทที่แล้วเราก็จะเห็นว่า JSF สร้าง ManagedBean ได้ง่ายๆ โดยการใส่ @ManagedBean ไว้ที่ส่วนหัวของ Class IndexManagedBean, HelloManagedBean แค่นั่นเอง แต่จริงๆแล้ว Annotation ที่มีสำหรับ ManagedBean มันมีมากกว่านั่นนะสิครับ ทีนี้แหละที่เราจะมาดูกันว่ามันมีอะไรกันบ้าง

โดยผมแบ่งเป็นสองกลุ่มใหญ่ๆครับ
1. สำหรับกำหนดให้ Class ที่ถูกกำหนดเป็น ManagedBean ซึ่งใช้
@ManagedBean( name="", eager = true/false )
name จะไว้สำหรับกำหนดชือสำหรับเรียกครับ โดย default จะเป็นชื่อ Class ที่เปลี่ยนชือตัวหน้าเป็นตัวเล็กนั่นแหละครับ เช่น helloManagedBean, indexManagedBean แต่จริงแล้วเราสามารถที่จำกำหนดให้มันเองเลยก็ได้ (เดี๊ยวไปดูในตัวอย่างละกันครับ) ส่วน eager=true จะมีผมแค่ตอนที่ Scope เป็น @ApplicationScoped เท่านั้น จะเป็นการสั่งให้ Container สร้าง ManagedBean ไว้ก่อนเลย (ถ้าเป็นปกติจะสร้างเมือมีการเรียกเข้ามาครั้งแรก)

2. สำหรับกำหนด Scope ของ Data ว่าจะให้เป็นอะไร เช่น (request, session, application)
@RequestScoped
@SessionScoped
@ApplicationScoped
@ViewScoped
@CustomScoped(value="#{somemap}")
@NoneScoped

โดยเราจะมาดูที่ 4 อันแรกครับ
1. @RequestScoped - จะมีการสร้างและทำลายทุกๆครั้งที่จบ http request
2. @SessionScoped - จะมีการสร้างและไม่ทำลายจนกว่าจะมีการสร้างทำลาย session หรือ session timeout(ตามค่าใน web.xml)
3. @ApplicationScoped - จะมีการสร้างครั้งแรกเท่านั้นจากนั้นจะไม่สร้างอีกแล้ว
4. @ViewScoped - จะมีการสร้างและคงไว้ตราบเท่าที่เรายังอยู่ในหน้านั่นๆ ไม่เปลี่ยนหน้าไปไหน (ใช้สำหรับงานประเทภ AJAX) นั่นแหละครับและอยู่บนพื้นฐานว่า session ต้องยังไม่หมดอายุด้วยถ้าเป็น request ใหม่ก็หายนะครับ (สำหรับตัวนี้คงไปเห็นภาพ

@CustomScoped, @NoneScoped คงยังไม่พูดถึง (คือผมก็ยังไม่ได้อ่านหรือลองมันดูจริงๆเลยครับ) พอดีผมทำโปรเจคด้วย JSF1.2 ครับ แต่เห็นว่าไหนๆจะเขียนแล้วก็เลยมาเขียนที่ JSF2.0 ไปเลยดีกว่า


โอเคเรียบร้อยแล้วครับ http://easyjsf.googlecode.com/svn/trunk/EasyJSF2.0 easyjsf-read-only แล้วลองรัน scope.xhtml (http://127.0.0.1:8080/easyjsf/scope.jsf) กันดูเลยครับ

ขี้เกียจก๊อปโค้ดมาใส่ครับ เอาว่าถ้าอ่านแล้วเอาจากโค้ดลงมาแล้วไม่เข้าใจผมจะอธิบายเพิ่มให้อีกทีนะครับ (ดึกแล้วไม่ไหวแล้วแหะๆ)

ถ้าดู scope.xhtml จะเห็นว่าตัว JSF ทำให้เราสามารถทำให้ .xhtml ต่อกับ java ได้แบบ 1-n ซึ่งผิดกับสมัยก่อนที่ใช้พวก Servlet, Struts ที่จะเป็นลักษณะ 1-1 ( a.jsp -> Servlet/StrutsAction) ถ้าใช้ไปเรือยๆแล้วจะรู้ว่ามันช่วยในการ reuse code ส่วน mvc มากครับ แต่คงไม่เห็นกันตอนนี้หรอกจะเห็นเมือได้เอาไปทำในโปรเจคที่เป็นรุปธรรมซะมากกว่า สำหรับผมผมว่าอันนี้แหละเป็นส่วนที่เก่งที่สุดของ JSF เลยหร่ะ

ปล. เรายังยืนยันว่า Tutorial นี้เหมาะสำหรับคนที่พอรู้ Web Programming มาบ้างแล้วครับ ^ ^

copyright 2010 @nuboat in wonderland
ข้อเขียนนี้ช่วยฉัน:  

Sunday, June 20, 2010

Getting Started with JSF 2.0 (ต่อ)

มาดู WEB.XML config กันก่อนดีกว่าครับ อันนี้ก็ถ้าใครไม่รู้พื้นฐาน Servlet ผมก็ช่วยไม่ได้นะครับแนะนำว่าให้กลับไปอ่านบทความเก่าผมเรือง Servlet ที่ http://thaidev.org ก่อนถ้าสนใจแบบละเอียด แต่ตอนนี้เรามาดู config เฉพาะที่เกี่ยวข้องกับ jsf กันก่อนดีกว่าครับ

<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
อันนี้จะทำให้เวลา JSF เกิด Error มันจะพ่น log มากกว่าปกติเพือช่วยให้แก้ปัญหาได้ดีขึ้น(จริงหรือเปล่า ?)

<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
อันนี้เป็นตัวที่เราจะให้มันทำงานเมื่อเราเรียกไปที่ xxx.jsf สามารถเปลี่ยนเป็นอะไรก็ได้เช่น *.htm, *.pl, *.php, *.xxx (แต่ตัวไฟล์เราจะใช้เป็น .xhtml) นะครับ

ต่อไปเราจะมาสร้าง ManagedBean สำหรับ Process งานของ JSF กันครับ

เอาแบบง่ายๆก่อนคือเราจะสร้าง ManagedBean สำหรับโชว์ข้อมูลบนหน้า JSF
1. สร้าง package cc.nuboat.easyjsf.managedbean
2. สร้าง IndexManagedBean.java
/*
* copyright 2010
*/

package cc.nuboat.easyjsf.managedbean;

import javax.faces.bean.ManagedBean;

/**
*
* @author nuboat
*/

@ManagedBean
public class IndexManagedBean {
private String hellostr;

public IndexManagedBean() {
hellostr = "Hello from Facelets";
}

public String getHellostr() {
return hellostr;
}

public void setHellostr(String hellostr) {
this.hellostr = hellostr;
}

}

แก้ index.xhtml ในส่วนของ body ตามด้านล่าง
<h:body>
#{indexManagedBean.hellostr}
</h:body>

ทดลองรันดูเลยครับ พอเสร็จแล้วก็กลับไปแก้ IndexManagedBean
public IndexManagedBean() {
hellostr = "Hello from IndexManagedBean";
}
save แล้วลองไปรัน browser ดูใหม่ว่า text มันเปลี่ยนไปหรือยังนะครับ

มาดู requirement ต่อไปกันดีกว่าครับทีนี้จะยากขึ้นหน่อยคือให้มีหน้าจอสำหรับรับข้อมูลชื่อทาง Textbox แล้วก็ มีปุ่ม Submit แล้วให้ไปหน้าแสดงผลที่โชว์ว่า Hello [Name]. นะครับ เราจะมามองก่อนว่าเราต้องสร้างอะไรบ้าง

1. hello.xhtml
2. helloform.xhtml
3. HelloManagedBean.java

hello.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Hello</title>
</h:head>
<h:body>
Hi Khun. #{helloManagedBean.name}.
</h:body>
</html>


helloform.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f ="http://java.sun.com/jsf/core">
<h:head>
<title>Hello Form</title>
</h:head>
<h:body>
<h:form>
What's your name? : <h:inputText value="#{helloManagedBean.name}" /> : <h:commandButton value="OK" action="#{helloManagedBean.hello}" /> <br />
</h:form>
</h:body>

</html>

HelloManagedBean.java
/*
* copyright 2010
*/

package cc.nuboat.easyjsf.managedbean;

import javax.faces.bean.ManagedBean;

/**
*
* @author nuboat
*/
@ManagedBean
public class HelloManagedBean {
private String name;

public String hello() {
return "hello";
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}


ปล. ใครอยากได้ Sourcecode ก็สามารถมา checkout ลงไปดูกันได้ครับ
svn checkout http://easyjsf.googlecode.com/svn/trunk/EasyJSF2.0 easyjsf-read-only


copyright 2010 @nuboat in wonderland
ข้อเขียนนี้ช่วยฉัน: