go to http://oracle.in.th

Friday, August 14, 2009

ภาพบรรยากาศในงานเปิดตัว Oracle Fusion Middleware 11g สำหรับ Partners













ภาพบรรยากาศในงานเปิดตัว Oracle Fusion Middleware 11g สำหรับ Partners
เมื่อวันที่ 13 สิงหาคม 2552 ที่โรงแรม Arnoma

เอกสาร ppt ที่ speaker ใช้ในงานจะ upload ให้อีกทีครับ
ข้อเขียนนี้ช่วยฉัน:  

PC connecting Mobile

ขอแวะเอาเรื่อง Java มาตัดความร้อนแรงของ Oracle ในบล็อกหน่อย ในโพสนี้จะพูดถึงการเชื่อมต่อระหว่าง PC กับอุปกรณ์สื่อสาร โดยอุปกรณ์สื่อสารที่พูดถึงนั้นเป็นไปได้ทั้งมือถือ หรือโมเด็มที่เชื่อมต่ออยู่กับ PC โดยทั่วไปเราจะสื่อสารกันได้ 2 วิธีหลักๆ คือ
  • AT Command
  • API ที่ผู้ผลิตอุปกรณ์แต่ละแห่งพัฒนาขึ้นมา
AT Command เป็น protocol ในชุดของ Telephony Application Programming Interface (TAPI) ที่ Microsoft คิดขึ้นมาเพื่อให้ PC ที่รันภายใต้ Microsoft Windows สามารถสื่อสารกับอุปกรณ์สื่อสารได้ โดย TAPI ก็จะแตกต่างกันไปตามแต่ละ version ของ Microsoft Windows ในปัจจุบัน TAPI อยู่ที version 3.1

การ เชื่อมต่อแบบนี้ Windows จะมองอุปกรณ์สื่อสารของเราเสมือนว่าเป็น modem และใช้ชุดคำสั่ง AT Command ในการสื่อสารกัน เริ่มต้นการสื่อสารเราอาจใช้ HyperTerminal ที่มีใน Microsoft Windows การทดสอบก่อน
  • เริ่มจากเชื่อมต่ออุปกรณ์สื่อสารเข้ากับ PC
  • เปิด program HyperTerminal จากนั้นเลือก port ที่เชื่อมต่ออยู่กับอุปกรณ์สื่อสารให้ถูกต้อง
  • ทดลองพิมพ์คำสั่ง AT ถ้าผลลัพธ์ตอบกลับมา OK แสดงว่าเราเชื่อมต่ออุปกรณ์สื่อสารสำเร็จแล้ว
รายละเอียดของคำสั่ง AT Command ทั้งหมดสามารถหาดูได้จาก website ของผู้ผลิตแต่ละแห่ง เช่นอุปกรณ์สื่อสารที่ผมทำการทดสอบเป็น Nokia Wiki ATCommands
ผู้ผลิตอุปกรณ์แต่ละแห่งก็ implement ชุดคำสั่งไม่เท่ากัน หรือแม้แต่ผู้ผลิตอุปกรณ์แห่งเดียวกันแต่ละรุ่นก็มีชุดคำสั่งไม่เท่ากัน ดังนั้นก่อนที่เราจะใช้งานควรทดสอบก่อนว่าอุปกรณ์นั้นรองรับชุดคำสั่งที่เรา ต้องการหรือไม่ โดยการพิมพ์คำสั่ง AT ตามด้วย +<คำสั่งที่เราจะทดสอบ>=? เช่นถ้าต้องการทดสอบการรับ SMS AT+CMGR=? ถ้าค่าออกมาเป็น OK แสดงว่าอุปกรณ์รองรับคำสั่งนี้ แต่ถ้าออกมาเป็น ERROR แสดงว่าไม่รองรับคำสั่งดังกล่าว

การ สั่งงานควบคุมโดยการใช้ HyperTerminal เป็นวิธีที่ตรงไปตรงมาแต่การใช้งานจริงเราอาจต้องเขียนโปรแกรมเพื่อควบคุม อุปกรณ์สื่อสารอีกที วิธีที่เราจะเขียนโปรแกรมควบคุมอุปกรณ์สื่อสารโดยใช้ AT Command ทำได้หลายวิธีขึ้นอยู่กับ API ของแต่ละภาษา แต่ในตัวอย่างนี้เป็นโปรแกรมที่ใช้ส่ง SMS โดยใช้ภาษา Java เชื่อมต่อกับอุปกรณ์สื่อสารผ่าน Java Communication API

การทำงานของโปรแกรมตัวอย่างนี้เขียนเป็นขั้นตอนได้ดังนี้
  • เชื่อมต่อกับอุปกรณ์สื่อสารโดยเราต้องระบุ port ที่ทำการเชื่อต่อ
  • เมื่อเชื่อมต่อได้สำเร็จจะคุยกันผ่าน Java I/O Stream โดยการส่งคำสั่ง AT Command
class Mobile ที่เป็นถูกออกแบบไว้เป็น utility class เพื่อให้เรียกใช้งานง่ายขึ้น
import java.io.*;
import java.util.*;
import javax.comm.*;
import com.sun.comm.*;

class Mobile {

private static final int RESPONSE_TIMEOUT = 50;
private static final int DEVICE_TIMEOUT = 1000;
private static final String NEWLINE = "\n";
private static final String ENTER = "\r";
private static final String CTRL_Z = "\u001A";
private static final String CONNECTION = "connect";
private InputStream in;
private OutputStream out;

private SerialPort port;
private CommPortIdentifier portID;
public Mobile(String appName, CommPortIdentifier portID) throws IOException, PortInUseException, UnsupportedCommOperationException {
this.portID = portID;
port = (SerialPort) portID.open(appName, DEVICE_TIMEOUT);
port.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
port.setFlowControlMode(port.FLOWCONTROL_NONE);
in = port.getInputStream();
out = port.getOutputStream();
}

public void close() throws IOException {
in.close();
out.close();
port.close();
}


public static Map listPort() throws IOException {
Map listPort = new Hashtable();
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
CommPortIdentifier portID = (CommPortIdentifier) portList.nextElement();
listPort.put(portID.getName(), portID);
}
return listPort;
}


public String sendSMS(String tel, String msg) throws IOException, InterruptedException {
String result = null;
sendCommand("AT+CMGF=1");
writeRequest("AT+CMGS=\"" + tel + "\"");
result = sendCommand(msg + CTRL_Z);
return result;
}

public String sendCommand(String cmd) throws IOException, InterruptedException {writeRequest(cmd);
return readResponse();
}

private void writeRequest(String req) throws IOException {
out.write(new String(req + ENTER).getBytes());
out.flush();
}

private String readResponse() throws IOException, InterruptedException {
String strIn = "";
for (int i=0; i 0){
byte[] bb = new byte[numChars];
in.read(bb, 0, numChars);
strIn += new String(bb);
}
if (strIn.indexOf(">" + ENTER + NEWLINE) != -1) {
break;
}
if (strIn.indexOf("OK" + ENTER + NEWLINE) != -1) {
break;
}
if (strIn.indexOf("ERROR") != -1 &&
strIn.indexOf(ENTER + NEWLINE, strIn.indexOf("ERROR") + 1) != -1) {
break;
}
Thread.sleep(100);
}
return strIn;
}
}
class client ที่เป็นตัวเรียกใช้งาน utility class การใช้งานเรียบง่ายแค่ระบุ port ที่จะติดต่อและเรียกคำสั่งส่ง SMS โดยใส่เลขหมายปลายทางและข้อความที่ต้องการส่ง
import java.util.*;
import javax.comm.*;
public class Client {
public static void main(String[] args) throws Exception {
//choose port
Map listPort = Mobile.listPort();
System.out.println(listPort);
Mobile mobile = new Mobile("SMS/GSM Nokia N73", listPort.get("COM12"));
System.out.println(mobile.sendSMS("+66123456789", "Hello World"));
System.out.println("---");
}
}

แน่นอนครับว่านอกจากส่ง sms แล้วยังสามารถทำอย่างอื่นได้อีกถ้าสนใจลองดูได้จากชุดคำสั่ง Nokia Wiki ATCommands

โดยสรุปแล้วการสื่อสารผ่าน AT Command มีข้อดีและข้อเสียดังนี้
  • ข้อ ดีของการสื่อสารกันผ่าน AT Command คือเป็นชุดคำสั่งมาตรฐานที่ให้ผู้ผลิตอุปกรณ์นำไป implement ลงในอุปกรณ์สื่อสารของตัวเอง ดังนั้นเราโปรแกรมที่เขียนจึงไม่ต้องกังวลว่าจะใช้สื่อสารกับอุปกรณ์อื่นไม่ได้
  • ข้อเสียคือเนื่องจาก AT Command เป็นชุดคำสั่งที่ Microsoft เป้นผู้คิดขึ้นมาจึงไม่อาจนำไปใช้ต่างระบบปฏิบัติการได้
ข้อเขียนนี้ช่วยฉัน:  

Thursday, August 13, 2009

"EXTRACT" SQL Function ดี ๆ ที่ไม่ควรมองข้าม

วันนี้มี Function ดีๆ มาแนะนำให้รู้จักกัน

จากประสบการณ์ที่ผ่านมา คาดว่าหลายๆ คน อาจจะเคยต้องเขียน Function เพื่อคำนวณหาอายุ ต่าง ๆ
ไม่ว่าจะเป็น อายุของลูกค้า, อายุงาน, อายุสัญญา ต่างๆ เป็นต้น และวิธีที่หลายๆ คนเคยใช้ ก็คงไม่ต่างกันนัก
กล่าวคือ หาผลต่างระหว่างวันที่เริ่มต้น กับวันที่สิ้นสุด เพื่อให้ได้จำนวนวันที่อยู่ในช่วงอายุนั้นๆ จากนั้นก็นำไปคำนวณ
หาจำนวนปี และเดือน โดยการ mod และ div ด้วยจำนวนวันในหนึ่งปี และจำนวนวันในหนึ่งเดือน ได้ในที่สุด


Oracle ได้นำเสนอ Function EXTRACT ให้เป็นทางเลือกแก่ผู้ใช้ ซึ่งสามารถใช้งานได้ตั้งแต่เวอร์ชั่น 9i ขึ้นไป
โดย Function ที่ว่านี้ สามารถที่จะดึงเอา วันที่ เดือน หรือ ปี จากข้อมูลประเภท Date โดยให้ผลลัพธ์เป็นข้อมูล
ประเภทตัวเลข ซึ่งต่างจากการแปลงรูปแบบโดยใช้ Function TO_CHAR ตามปรกติ ที่จะให้ผลลัพธ์เป็นตัวอักษร

SQL> select sysdate as current_date,
2 extract (month from sysdate) as mm_e,
3 to_char (sysdate, 'MM') as mm
4 from dual;


CURRENT_DMM_EMM
---------------------
22-JAN-08101

เพื่อให้ง่ายต่อการทำความเข้าใจ เราจะลองเอา Function EXTRACT มาใช้ในการหาอายุของลูกค้าให้ดู

SQL> select cust_last_name,
2 extract (year from (sysdate - date_of_birth) year to month)
3 ' years '
4 extract (month from (sysdate - date_of_birth) year to month)
5 ' months' as age
6 from customers;


CUST_LAST_NAMEAGE
----------------------------------------
Kinski52 years 9 months
Garcia36 years 8 months
Olin21 years 7 months
Dench54 years 7 months
Altman23 years 6 months
...

วิธีการก็ไม่มีอะไรมาก เพียงแค่ใช้ Function EXTRACT ในการ Extract ค่า YEAR และค่า MONTH จากผลต่างของวันปัจจุบันกับวันเกิด
ที่อยู่ในรูปของ Interval Year To Month ก็จะได้ผลลัพธ์ออกมาอย่างง่ายดาย
ข้อเขียนนี้ช่วยฉัน:  

Tuesday, August 11, 2009

[news] VMWare ซื้อ SpringSource แล้ว

VMWare ซื้อ SpringSource ด้วยราคา 362 ล้านเหรียญสหรัฐบวกด้วยหุ้นอีกจำนวน 58 ล้านเหรียญสหรัฐ การซื้อครั้งนี้ยืนยันได้จากผู้ถือหุ้นของ SpringSource และคาดว่าจะปิดที่ไตรมาสที่สามของปีนี้

SpringSource มี product อยู่ในมือตั้งแต่ application framework ไปจนถึง server ของตัวเอง อีกทั้งยังเป็นผู้ขับเคลื่อนชุมชน Java open source ให้เติบโตขึ้นอย่างทุกวันนี้
ก่อนหน้านั้น SpringSource ได้เข้าซื้อ Hyperic ซึ่งเป็นตัว monitoring และบริหารจัดการตัว application การซื้อในครั้งนั้นเป็นการเพิ่มมูลค่าให้ SpringSource และทำให้ VMware รู้สึกสนใจ SpringSource มากขึ้นเนื่องจาก VMware ไม่มีเครื่องมือบริหารจัดการที่มีประสิทธิภาพ

การรวมกันครั้งนี้ VMware ยังคงสนับสนุน SpringSource ต่อไป และวางอนาคตถึงการเปลี่ยนแปลงใหม่ๆ การพัฒนาการรวม platform เข้าด้วยกัน Platform as a Service (PaaS) เพื่อให้บริการ Datacenter หรือบริการอย่าง cloud computing เป็นต้น
บริการต่างๆ เหล่านี้จะช่วยให้นักพัฒนาสร้าง enterprise และ web application และ run และ จัดการ application เหล่านั้นได้ดียิ่งขึ้น

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

Monday, August 3, 2009

แล้ว Oracle Database 11g Release 2 ล่ะ, จะออกเมื่อไหร่?

จาก post ที่แล้ว ที่ผมประมาณการ ไว้ดังนี้

"ดังนั้นผมจึงขออนุมานว่า Oracle Database 11g Release 2 น่าจะออก ประมาณกลางปีหน้า (2010)
ส่วน Oracle Database XE 11g ก็คงเป็นปลายปี 2010"

คุณ Surachart จึงได้แย้งผมมาทันที่ว่า 11gR2 ไม่น่าจะรอนานแบบนั้น โดยได้นำข้อมูลจากแหล่งข่าวที่เชื่อถือได้มาให้ผมทราบดังนี้
  1. @alexgorbachev Mr. Alex จาก Oracle Consult จาก The Pythian Group ได้ประมาณการว่า 11gR2 จะออกภายในเดือนสิงหาปีนี้
  2. Oracle Developer ที่พัฒนา Oracle APEX สำหรับ 11gR2 ก็ได้ปิด project เรียบร้อยแล้ว
  3. ที่ web Oracle FAQ ก็ได้ให้ข้อมูลว่า 11gR2 จะออกภายในไตรมาสที่ 4 ปีนี้เป็นอย่างช้า
  4. ระหว่างนี้ได้มี Oracle Partners และ Oracle Customers หลายรายกำลังเข้าทดสอบ 11gR2 beta กันอยู่
ดังนั้นจากหลายแหล่งข้อมูลที่น่าเชื่อถือได้ เป็นในทางทิศทางเดียวกันคือ 11gR2 น่าจะออกภายในปีนี้แน่นอนครับ
ข้อเขียนนี้ช่วยฉัน:  

Saturday, August 1, 2009

Oracle Database XE 11g จะออกเมื่อไหร่?

เห็นหลายคนถามถึง Oracle Database XE 11g ว่าเมื่อไหร่จะออกมาให้ได้ใช้งาน
ผมเองก็เป็นอีกหนึ่งคนที่รอใช้งาน Oracle Database XE 11g ด้วยเช่นกัน จึงลองค้นหาดูว่าทาง Oracle เองมีกำหนดการอย่างไร
ในที่สุดก็ได้เจอ ข่าวนี้ที่ The New York Times

อ่านแล้วได้ข้อสรุปว่า Oracle Database XE 11g มีแผนที่จะออกหลังจากที่ได้ปล่อย Oracle Database 11g Release 2 ออกมาสักพัก
แต่ในข่าว ก็ยังไม่ได้ระบุอีกว่า Oracle Database 11g Release 2 จะออกมาเมื่อไหร่
ดังนั้นผมจึงใช้วิธีเทียบจาก version เก่า ๆ ดังนี้
  • Oracle Database 10g Release 1 ออกเมื่อ June 2004
  • Oracle Database 10g Release 2 ออกเมื่อ December 2005
  • Oracle Database 11g Release 1 ออกเมื่อ November 2007
ดังนั้นผมจึงขออนุมานว่า Oracle Database 11g Release 2 น่าจะออก ประมาณกลางปีหน้า (2010)
ส่วน Oracle Database XE 11g ก็คงเป็นปลายปี 2010

แล้วเรามาดูกันว่า ผมประมาณการได้แม่นขนาดไหน
ข้อเขียนนี้ช่วยฉัน:  

Thursday, July 23, 2009

[news] ผู้ถือหุ้นของซัน มีมติเห็นชอบให้รวมธุรกิจร่วมกับออราเคิล

เช้าวันพฤหัสบดี ได้มีการประชุมนัดพิเศษที่สำนักงานใหญ่ของซัน โดยผู้ถือหุ้นของซัน มีมิติเห็นชอบอนุมัติหุ้นจำนวน 7.4 พันล้านดอลลาร์ หรือ 62% ของจำนวนหุ้นทั้งหมด ให้แก่ออราเคิล ซึ่งซันและออราเคิลได้ทำข้อตกลงระหว่างกัน และให้เป็นไปตามเงื่อนไขที่ได้กำหนดไว้เดิม แต่ก็ยังไม่มีการเปิดเผยรายละเอียดของข้อมูลแต่อย่างใดจากซัน

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

ซันเป็นผู้ทรงอำนาจทางธุรกิจไอทีมากว่า 27 ปี และเมื่อไม่นานมานี้เอง ซันได้ฝ่าฟันอุปสรรคทางการเงิน และการแข่งขันทางด้านฮาร์ตแวร์ ระบบปฏิบัติการลีนุกซ์ และซีพียูอินเทล ประจวบกับปัญหาทางด้านเศรษฐกิจ ซึ่งยากที่จะแก้ไข

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

ทางด้านฮิวเล็ตต์-แพคการ์ด ซึ่งถือเป็นคู่แข่งของซันฯ ได้ออกมาแถลงเมื่อวันพฤหัสบดีเกี่ยวกับ "Sun Complete Care" ซึ่งเป็นโปรแกรมที่ออกแบบมาเพื่อจูงใจให้ลูกค้าเดิมของซัน ให้หันมาให้ความสนใจในฮิวเล็ตต์-แพคการ์ด มากขึ้น

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