Monday 25 February 2008

วิธีการ Set Path และ Class Path ให้ใช้ J2SE ได้บน DOS

สำหรับใครที่ชื่นชอบการ Run โดยไม่ผ่านเครื่องมืออะไรเลย โดยใช้ตัว JDK เพียงอย่างเดียว (ผมคนหนึ่งที่ชอบแบบนั้น) โดยวันนี้ผมมีทิปสำหรับชาว Windows กันครับเป็นวิธี Set Path และ Class Path โดยที่เราไม่ต้องมานั่ง Set แบบ Manual ทุกครั้งสำหรับในการใช้ใน Dos นะครับมาเริ่มกันเลย

  1. เริ่มแรกเราจะต้องไปโหลด JDK มาติดตั้งก่อนโดยที่ผมเขียนอยู่ตอนนี้ JDK 6 Update 4 ใหม่สุดไปโหลดกันได้เลย
  2. พอโหลดแล้วติดตั้งเสร็จแล้ว คราวนี้สมมุิติว่าผมลงไว้ที่ C:\Program Files\Java\jdk1.6.0_04 คราวนี้เราไปเริ่ม Set กันได้เลย
  3. กด Mouse ขวาที่ My Computer เลือก Properties เลือก Tab Advance พอเป็น Tab Advance แล้วเลือก Environment Variables โดยพอกดแล้วจะมีแทบบนกับแทบล่าง โดยเราจะทำการ Set ที่ System Variables เท่านั้น
  4. หา Variable ที่ชื่อ CLASSPATH ถ้าไม่มีให้ New ขึ้นมาใหม่โดยตั้งชื่อว่า CLASSPATH แล้ว value เป็น ".;" โดยไม่มี " นะครับสำหรับคนที่ edit แล้วไม่มี .; ให้เราทำแบบนี้สมมุติ C:\test อยู่ ให้เราเปลี่ยนเป็นแบบนี้ C:\test;.; แบบนี้เป็นต้น
  5. คราวนี้หา Variable ที่ชื่อ PATH ถ้าไม่มีให้ New (ส่วนใหญ่น่าจะมี) เสร็จแล้วให้ทำเหมือน CLASSPATH แต่คราวนี้เราจะใส่ค่าดังนี้โดยผมมีที่ติดตั้งอยู่ใน C:\Program Files\Java\jdk1.6.0_04 แต่เราต้องใช้ folder bin ในการเรียกเพราะ javac java อยู่ในนั้นดังนั้นผมเลย set เป็น C:\Program Files\Java\jdk1.6.0_04\bin; แบบนี้หรือถ้า edit ก็ทำเหมือน CLASSPATH คือ C:\test;C:\Program Files\Java\jdk1.6.0_04\bin; ประมาณนี้เป็นต้น
  6. เสร็จแล้วถ้าทำสำเร็จเราก็เข้า DOS ไปลอง test กันดูโดยกด Start->Run พิมพ์ cmd เสร็จแล้ว แล้วลองพิมพ์ javac ลงใน DOS ถ้ามันไม่ขึ้น find not found ก็แปลว่าสำเร็จแล้วครับ !!!
ปล. ติดตั้งไม่ได้โพสความคิดเห็นได้เลยนะครับ ;)

Thursday 21 February 2008

รู้จักกับ Apache AXIS - Web Service

Apache AXIS เป็น Web Service Framework ซึ่งสามารภใช้ Java หรือ C++ เขียนได้ โดยที่ผมมาแนะนำในวันนี้เพราะ AXIS ได้ชื่อว่าใช้ง่าย (อย่างน้อยก็ในหมู่ Open Source ละ) โดย AXIS งานที่ได้จะเป็นแบบ SOAP นะครับ โดย AXIS เสนอความง่ายโดยการนำ .java ไปลงใน server Axis โดยส่วนใหญ่จะเป็น http://localhost:8080/axis/Calculator.jws แบบนี้เป็นต้นโดยเราต้องตั้งชื่อให้ตรงกับ Class แล้วเปลี่ยนเป็น .jws ที่นี้เราก็จะได้ Web Service แบบง่ายๆมาใช้แล้ว

ถ้าต้องการติดตั้งอันนี้เป็นคู่มือภาษาไทยครับโดย AXIS จำเป็นต้องติดตั้ง Java 2 SDK 1.4.2_x หรือ Java 2 SDK 1.5.0_x , Server Jakarta Tomcat 5.0.xx แล้วระบบควรมีการตั้งค่า​ JAVA_HOME ไว้อยู่แล้ว โดยเมื่อทำการติดดตั้งเสร็จแล้วคราวนี้ลองเข้าไปทำตามตัวอย่างใน Tutorial ที่ผมหามาให้ดังน

แค่นี้เราก็สามารถใช้ AXIS เบื้องต้นเป็นแล้วครับผม ;) โดยส่วนตัวผมก็ลองทำเล่นๆดูแต่ผมว่ายังไงแบบ REST ก็น่าสนใจกว่าจริงๆนะ

Sunday 17 February 2008

JPC - Computer Virtualization in Java

วันนี้ผมก็เอาอันดับ 1 ใน 10 Java App มหัศจรรย์มาฝากให้ดูกันนะครับ โดยเจ้า JPC เนี้ยจะทำการสามารถ Virtual ระบบต่างๆได้ไม่ว่าจะเป็น DOS , Linux อะไรต่างๆผ่าน Web-based ก็ได้ไม่เชื่อลองไปดูตัวอย่าง DOS บน Internet ได้เลยครับ โดยเขาได้บอกเหตุผลให้มันเป็นมหัศจรรย์ Java App นี้มีอีกหลายเหตุผล โดยเจ้า JPC เนี้ยเป็น Java 100% ไม่มี Native Code และมีความปลอดภัยสูงด้วยเพราะ JPC เป็นแบบ Multi-Layer ทำให้เป็นเหตุผลหนึ่งที่ทำให้การ Run Application อันตรายสามารถทำได้อย่างปลอดภัยอย่างมากและมีเสถียรภาพสูง

เหตุผลที่ผมเอา JPC หยิบยกขึ้นมาเพราะมันเป็น Open Source และคาดว่่าในอนาคต มันเจ๋งแน่นอน อย่างพวก VMWare หรือ VM ตัวอื่นๆดังนั้นนี้เป็นอีกทางเลือกหนึ่งที่น่าจับตามอง แต่ผมก็ยังมีคำถามคาใจอยู่ว่ามันจะเร็วแค่ไหน เพราะ Java ก็อืดจริงๆ แต่เรื่องแบบนี้อาจจะไม่ใช่ปัญหาสำหรับการทำงานในอนาคต หรืออยู่บนเครื่องที่มีประสิทธิภาพสูง โดยประโยชน์ของการทำ Virtualization นั้นมีมากมายไม่ว่าจะลดค่าลิขสิทธิ์ Software หรือจะทำการ Test ใน Environment จริงโดยไม่ต้องหาอุปกรณ์หรือ Setup อะไรให้ยุ่งยากเป็นต้น วันนี้ผมโดมไปก่อนละครับ ;)

ปล. ผมใช้ Firefox Run แล้วมันค้างแนะนำให้ลองใช้ IE ในการ Run ดูก่อนนะครับ

Friday 15 February 2008

Unit Test ด้วย JUnit

JUnit ประเด่นเรื่องการ Test ในหมู่ Programmer อาจจะเป็นเรื่องที่ชอบบ้างไม่ชอบบ้าง แต่ในการทำงานให้มีประสิทธิภาพนั้นก็ขาดการ Test ไม่ได้จริงๆนั้นและ Java มี JUnit ที่จะช่วยให้ชีวิตการ Test ของ Programmer ง่ายขึ้นในการทำ Unit Test โดนส่วนใหญ่ JUnit จะถูกใช้รวมกับ Eclipse เพื่อทำการ Test

JUnit

โดยการ Test นี้สามารถ Test ได้ทั้งการ Test Suite , Test Method ฯลฯ โดยผมมีข้อมูลที่หาได้จาก Google ดีๆเข้าใจง่ายอยู่ที่หนึ่งคือ ที่นี้ โดยส่วนตัวแล้วปกติ ถ้าเราจะ Test Method สัก Method หนึ่งเราก็ต้องทำการ New Class ส่งค่านู้นค่านี้ เพิ่มเข้าไปแล้วถ้ามี Method สัก 20 Method เราจะต้องทำแบบนี้ทั้ง 20 ครั้งหรอ ?

JUnit จะมาเติมเต็มการ Test ในส่วนนี้นะครับ ลอง Download ไปใช้ได้เลยที่นี้ ส่วนอันนี้เป็น Sourcecode Opensource ที่แจกฟรีใน SourceForge.net ของหนังสือ JUnit in Action นะครับ ;) หวังว่าคงมีประโยชน์นะครับ

Blu-ray Disc Java (BDJ)

Wednesday 13 February 2008

JFreeChart มาทำ Chart ด้วย Java อย่างง่ายๆกัน !

JFreeChart เป็น Java Library ตัวหนึ่งที่ทำให้การสร้าง Chart ด้วย Java ไม่ใช่เรื่องยากอีกต่อไป โดย JFreeChart สามารถทำ Chart ได้หลายรูปแบบ สามารถนำไปใช้ทั้งด้าน Server-side หรือ Client-side ได้ทั้งสองแบบ โดยรองรับ Output หลายแบบทั้ง Png , Jpeg , Pdf , Eps , Svg เป็นต้น โดย JFreeChart เป็น Open Source สามารถนำไปใช้ได้ฟรีโดยอยู่บน License แบบ GNU LGPL (อนุญาติให้ใช้ใน Application ที่ขายได้)



คุณสามารถ Download ไปใช้กันได้ฟรีครับโดยมันจำเป็นต้องใช้ JCommon ซึ่งเป็น Library ที่ฟรีของ Jfree.org เหมือนกันครับ แล้วยังต้องมี JDK 1.3 ขึ้นไป โดยผมมี JFreeChart 0.9.1 Developer Guide ให้ไปอ่านกันฟรีๆครับ (ก่อนที่มันจะหายไป) อันนี้คือ Code ตัวอย่างลองนำไป Compile ดูนะครับ

ปล. อย่าลืมนำ JCommon , JFreeChart เข้าไปใน Library ของ Java ก่อนนะครับ

ส่งเมล์ง่าย ๆ ด้วย PL/SQL โดยใช้ UTL_MAIL

utl_mail package เป็น feature ที่มีเพิ่มเข้ามาตั้งแต่ oracle database version 10g เป็นต้นไป
จุดเด่นที่สำคัญของมัน คือ ทำให้การส่ง email สะดวกและง่ายมากขึ้น จาก version ก่อนที่ใช้ utl_smtp และ utl_tcp ซึ่งการเรียกใช้ค่อนข้างยุ่งยาก

โดยปกติ utl_mail package ยังไม่สามารถใช้งานได้ทันที หลังจากการติดตั้ง oracle database จำเป็นที่จะต้องติดตั้งเพิ่ม โดยมีขั้นตอน ดังต่อไปนี้

  • ติดต่อเชื่อมต่อ oracle database ด้วย sys
$ sqlplus sys/manager1@db as sysdba
  • run ORACLE_HOME/rdbms/admin/utlmail.sql
SQL>@ORACLE_HOME/rdbms/admin/utlmail.sql
  • grant สิทธิ์ให้กับ user ที่จะใช้ utl_mail package
SQL>grant execute to test_app;

เท่านี้ ก็จะสามารถใช้งาน utl_mail package ได้แล้ว ต่อไปเราจะมาดูรายละเอียดของ utl_mail กัน


ภายใน utl_mail package จะประกอบไปด้วย 3 procedure ดังนี้

1. send ใช้สำหรับส่ง email ทั่วไป โดยไม่ได้มีการแนบไฟล์
utl_mail.send(
sender IN VARCHAR2 CHARACTER SET ANY_CS,
recipients IN VARCHAR2 CHARACTER SET ANY_CS,
cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
message IN VARCHAR2 CHARACTER SET ANY_CS,
mime_type IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT 'text/plain;charset=us-ascii',
priority IN PLS_INTEGER DEFAULT 3);

ตัวอย่าง

begin
execute immediate 'ALTER SESSION SET smtp_out_server = 'localhost';';
UTL_MAIL.send('test1@test.com',
'test2@test.com',
null,
null,
'Hello Send',
'Hello,How are you?',
'text; charset=us-ascii',
null);
end;

ใีนการอ้างอิง File ใน utl_file package เราจะต้องสร้าง
directory เพื่อ อ้างอิง location หรือ path ดังนี้
SQL>CREATE DIRECTORY d_file_path AS '/file/';

SQL>GRANT READ,WRITE ON DIRECTORY d_file_path TO test_app;

2. send_attach_raw ใช้สำหรับส่ง email ที่มีการแนบไฟล์
utl_mail.send_attach_raw (
sender IN VARCHAR2 CHARACTER SET ANY_CS,
recipients IN VARCHAR2 CHARACTER SET ANY_CS,
cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
message IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
mime_type IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT 'text/plain;charset=us-ascii',
priority IN PLS_INTEGER DEFAULT 3,
attachment IN RAW,
att_inline IN BOOLEAN DEFAULT TRUE,
att_mime_type IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT 'text/plain; charset=us-ascii',
att_filename IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL);

ตัวอย่าง

declare
v_file utl_file.file_type;
v_raw_file RAW(32767);
v_file_length NUMBER;
v_block_size NUMBER;
v_exist BOOLEAN;
v_location VARCHAR2(50):='d_file_path';
v_file_name VARCHAR2(50):='test.pdf';
begin
execute immediate 'ALTER SESSION SET smtp_out_server = 'localhost';';

utl_file.fgetattr(v_location,v_file_name,v_exist,v_file_length,v_block_size);
v_file:=utl_file.fopen(v_location,v_file_name,'R');
utl_file.get_raw(v_file,v_raw_file,v_file_length);
utl_file.fclose(v_file);

utl_mail.send_attach_raw('test1@test.com',
'test2@test.com',
null,
null,
'Hello Send Attach Raw',
'Hello,How are you?',
'text; charset=us-ascii',
null,
v_raw_file,
FALSE,
'text; charset=us-ascii',
v_file_name);
end;
3. send_attach_varchar2 ใช้สำหรับส่ง email ที่มีการแนบไฟล์ที่เป็น text
utl_mail.send_attach_varchar2(
sender IN VARCHAR2 CHARACTER SET ANY_CS,
recipients IN VARCHAR2 CHARACTER SET ANY_CS,
cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
message IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
mime_type IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT 'text/plain;charset=us-ascii',
priority IN PLS_INTEGER DEFAULT 3,
attachment IN VARCHAR2 CHARACTER SET ANY_CS,
att_inline IN BOOLEAN DEFAULT TRUE,
att_mime_type IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT 'text/plain; charset=us-ascii,
att_filename IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL);


ตัวอย่าง

declare
v_file utl_file.file_type;
v_raw_file RAW(32767);
v_file_length NUMBER;
v_block_size NUMBER;
v_exist BOOLEAN;
v_location VARCHAR2(50):='d_file_path';
v_file_name VARCHAR2(50):='test.txt';
begin
execute immediate 'ALTER SESSION SET smtp_out_server = 'localhost';';

utl_file.fgetattr(v_location,v_file_name,v_exist,v_file_length,v_block_size);
v_file:=utl_file.fopen(v_location,v_file_name,'R');
utl_file.get_raw(v_file,v_raw_file,v_file_length);
utl_file.fclose(v_file);

utl_mail.send_attach_varchar2('test1@test.com',
'test2@test.com',
null,
null,
'Hello Send Attach Varchar2',
'Hello,How are you?',
'text; charset=us-ascii',
null,
v_raw_file,
FALSE,
'text; charset=us-ascii',
v_file_name);
end;





Monday 11 February 2008

Grails 1.0 ออกแล้ว !

Grails เป็นการพัฒนา Wep App ที่สมบูรณ์บน JVM ในที่สุดก็ออก final version 1.0 ออกมาให้ลองดู download ไปใช้แล้วโดยรองรับการพัฒนาแบบ Agile Development โดยประกอบด้วย Component Open Source อย่าง Spring , Hibernate แล้วก็ Groovy

ในเวอร์ชั่นนี้มี Feature เด่นๆมาดังนี้

  • GORM DSL for advanced Mappings โดยทำการพัฒนาต่อมาจาก Hibernate โดยมีการเพิ่ม Domain-Specific Language
  • Support for easy to use Filters ตอนนี้ Grails สามารถใช้ Interceptor ใน Controller ได้แล้ว
  • *Content Negotiation support ตอนนี้ Grails สามารถจัดการ Content Negotiation ได้โดยผ่าน Config File
  • สนับสนุน Web Service แบบ REST ทั้งแบบ JSON และ XML
ที่มา TheServerSide

* Content Negotiation คือการทำให้ Application ส่งข้อมูลตาม User Agent ข้อได้ เช่น เรื่องของ File Gif,png ที่ถ้าเป็น Browser รุ่นเก่าจะไม่สามารถใช้ png ให้รูปใสได้ ก็จะส่ง Gif ไปแทนเป็นต้น