วันพฤหัสบดีที่ 10 ธันวาคม พ.ศ. 2552

Java Swing Example

เก็บไว้หน่อย link นี้มีตัวอย่างการเขียน Java GUI ที่ใช้ดูเข้าใจง่ายดี :-)

http://academicjava.com/Java_help/Tutorial_Examples_Swing_0.html

ธนาคาร LCL #2

วันนี้ก็ได้ไปเจอผู้จัดการที่ดูแลบัญชีเราของธนาคาร LCL (ชื่อว่าคุณ Alexandra) ตามเวลานัด 9.30 น. ตอนเช้า วันพฤหัส ที่ 10 ธ.ค. 53 ไปถึงก็เห็น พี่แกนั่งทำงานอยู่ พี่แกให้เรารอก่อน ทุกครั้งที่มีนัดเจอ ไปถึงก็ต้องรอทุกทีเลย ไม่รู้ว่ามันจะจัดการ statement อะไรนักหนาวะ หลังจากที่รอ ประมาณ 5-10 นาที ก็ถึงเวลาได้ชี้แจงปัญหา

เริ่มต้นพี่แกก็อธิบายสาเหตุ ซึ่งเราก็รู้ตั้งแต่ไอพนักงาน(เวร)นั่นบอกเราแล้ว ซึ่งดูเหมือนพี่แกจะเข้าใจเราแฮะ หาวิธีแก้ปัญหาให้เราได้เงินคืน โดยการไปแอบเปลี่ยน profile เรา ให้เป็นลูกค้าแบบนักเรียน ที่อายุ < 26 ปี ทำให้เราได้เงินคืนเยอะกว่าเดิมด้วย แล้วมันก็บอกว่า "Normalement, on ne fait pas..." (แปลว่าปรกติเราไม่ทำแบบนี้ให้นะ)

เออ... แบบนี้ค่อยคุยกันได้หน่อย เริ่มยิ้มได้ :-) ไม่ใช่ rien fait (แปลว่าทำอะไรไม่ได้) !!

พูดถึงประโยคนี้ก็นึกไปถึงอีกเรื่องตอนที่ยืมบัตร fnac ของแฟนพี่เจี๊ยบไปซื้อกล้อง Nikon D90 ซึ่งบัตรมันลดได้ 10% แต่ไอเงิน 10% นั้นมันดันไปอยู่ในบัตร ไม่ได้เป็น เชคเิงินสด เราก็เลยต้องใช้บัตรนั้นไปซื้อของ พอจะจ่ายเงิน ไอคนขายมันก็บอกว่า ต้องเป็นเจ้าของบัตรเท่านั้นจึงจะใช้เงินนี้ได้ เวร... ทั้ง ๆ ที่ก่อนหน้านี้เราก็ถามพนักงานแล้ว พนักกงานก็บอกว่าไม่มีปัญหาอะไร เราก็บอกมันว่า ก็พนักงานบอกว่าได้นี่หว่า มันก็ยังยืนยันว่าไม่ได้.... fu..k!! ก็เลยบอกมันไปแบบโกรธ ๆ ว่า "แม่ง.. (คำนี้พูดในใจนะ) ถ้ามึงไม่ให้ใช้เงินในบัตร กูก็ไม่ซื้อ เพราะกูไม่มีเงินจ่าย และบอกอีกว่า เจ้าของบัตรอนุญาตแน่นอน มึงลองคุยโทรศัพท์ดูมั้ยละ" ในที่สุดมันก็ตกลง และ มันก็พูดว่า "Normalement, on ne fait pas..." เราก็รีบขอบคุณมัน merci beaucoup, c'est gentil (ขอบคุณมาก ๆ , คุณใจดีจัง) แต่ก่อนหน้านี้ ด่าแม่ มันในใจไปแล้วละ

ฝรั่งเศสมันก็มีอะไรแปลก ๆ เยอะเหมือนกันแฮะ ถ้าไม่โวยวายเนี่ย โดนเอาเปรียบตลอดแน่ ๆ ใครอยู่ที่นี่ ก็มั่นตรวจสอบ + หมั่นโวยวายกันหน่อยนะครับ กับฝรั่งเนี่่ย จะมาใช้นิสัยขี้เกรงใจแบบคนไทย คงโดนเอาเปรียบหลายอย่าง (แต่ก็ไม่ทั้งหมด)

กลับมาเรื่องธนาคารต่อ ก็เลยถามมันต่อเรื่องการคิดดอกเบี้ย ได้ข้อมูลมาว่าดอกเบี้ยของบัญชีฝากประจำ ( Compt Livret) ซึ่งถอนได้ตลอด คิดดอกเบี้ยแค่ 1% โดยคิดดอกเบี้ยให้ ปีละ 1 ครั้ง เราก็ไม่แน่ใจว่า ไอยอดเิิงินที่เราถอน ๆ ไปใส่บัญชีออมทรัพย์ (Compt Epargne) มันไม่ครบ 1 ปี ไม่รู้มันคำนวนอย่างไรเหมือนกัน

แต่สุดท้ายได้ข้อสรุปว่า มีบัญชื่อแบบอื่น ๆ ที่ได้ดอกเบี้ยถึง 5-6% ซึ่งยังไง เราก็ยังอยู่ที่นี่อีก 3 ปี เงินจมอยู่เกือบ ๆ ล้านบาท ยังไงก็คุ้ม ก็เลยนัดเปิดบัญชีใหม่อีกที วันอังคารที่ 5 ม.ค. 53 เวลา 14.00 แล้วจะมา update ให้ฟังอีกรอบนะจ๊ะ

วันจันทร์ที่ 7 ธันวาคม พ.ศ. 2552

ธนาคาร LCL !!

วันนี้ อารมณ์เสียแต่เช้า เพราะ เข้าไปที่ธนาคาร เพื่อไปสอบถามว่า ทำไมเดือน ธ.ค. 09 จึงคิดค่าบริการ 7.35 ยูโร ทั้ง ๆ ที่ปรกติแล้วมัน 4 ยูโร ก็ได้คำตอบว่า เพราะบัตร นร. หมดอายุ ก็เลยเอาบัตร นร. ไปให้มัน มันก็ถ่ายเอกสารเก็บไว้แล้วบอกว่า จะเริ่มราคา นร. เดือนหน้านะ ผมก็เลยถามมันว่า แล้วเดือน ธค. นี้จะได้ เงินส่วนต่างคืน ใช่มั้ย มันก็บอกว่า ไม่ได้ เพราะ เราเอาบัตรไปให้มันช้าเกินไป ระบบ มันตัดไปแล้ว ผมก็เลยบอกมันว่า ตัดแล้ว ก็คืนได้ ก่อนหน้านี้ก็เคยทำ มันก็บอกว่า เพราะผมไม่ได้เอาบัตรนร. มาให้มันก่อนเดือน ธค. และ มันก็พูดว่า Je rien faire!!.... สาด...ด แม่ง ของขึ้นเลยกู ก็เลยเสียงดังใส่มันเลย ทำหน้าโกรธเต็มพิกัด ลูกค้าคนอื่นก็ยืนรอคิวอยู่

จนสรุปความได้ว่า วันพฤหัส นี้ จะไปคุยกับกับผู้จัดการบัญชี ของผม อีกที เนี่ย ถ้าเป็นคนที่ไม่ค่อยรู้ระบบของที่นี่ ส่วนใหญ่เวลาเจอมันบอกว่า Rien faire แบบนี้ ก็โดนแดกค่าส่วนต่าง ไปแน่ ๆ ไอคนบริการก็แม่ง ไม่คิดจะแนะนำอะัไรเลย เดี๋ยววันพฤหัสนี้ แม่ง ถ้าไม่คืนเงินให้กรู กูจะปิดบัญชีกับธนาคารมึงไปเลย สาด.......ด ให้มันรู้มั่ง

blog นี้เขียนไว้ให้คนไทยที่อยู่ในฝรั่งเศสได้รู้ว่า ถ้าได้รับ service ที่เฮงซวยจากประเทศนี้ ก็ด่าแม่(ง) มันไปเลย อย่าไปยอมมันมาก ไอพวกห่านี้ยิ่งยอมยิ่งได้ใจ นี่ขนาดกูพูดฝรั่งเศสไม่ค่อยได้นะ เวลาด่าก็มีติด ๆ ขัด ๆ มั่ง แต่มันก็คงรู้แหละ ว่าด่ามันอยู่ อย่าไปยอมมัน

ปล.
1. บริการดี ๆ ของฝรั่งเศสดี ๆ ก็พอมี แต่มีน้อยกว่าบริการแบบเฮงซวย!!
2. อ้าว เฮ้ย ขนาดเขียน blog ยังของขึ้นเลย พระ!!

วันอังคารที่ 1 ธันวาคม พ.ศ. 2552

Copy Binary File Java


import java.io.*;

public class CopyFile{
private static void copyfile(String srFile, String dtFile){
try{
File f1 = new File(srFile);
File f2 = new File(dtFile);
InputStream in = new FileInputStream(f1);

//For Append the file.
// OutputStream out = new FileOutputStream(f2,true);

//For Overwrite the file.
OutputStream out = new FileOutputStream(f2);

byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0){
out.write(buf, 0, len);
}
in.close();
out.close();
System.out.println("File copied.");
}
catch(FileNotFoundException ex){
System.out.println(ex.getMessage() + " in the specified directory.");
System.exit(0);
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
public static void main(String[] args){
switch(args.length){
case 0: System.out.println("File has not mentioned.");
System.exit(0);
case 1: System.out.println("Destination file has not mentioned.");
System.exit(0);
case 2: copyfile(args[0],args[1]);
System.exit(0);
default : System.out.println("Multiple files are not allow.");
System.exit(0);
}
}
}


Ref: http://www.roseindia.net/java/beginners/CopyFile.shtml

UDP Socket Client


package file;

import java.net.*;
//import java.util.StringTokenizer;

class TestList {

public static void main(String argv[]) {

A a = new A();
a.start();
}
}

class A extends Thread {

final static int port = 8532;
final static int taille = 1024;
final static byte buffer[] = new byte[taille];

public void run() {
try {
InetAddress serveur = InetAddress.getByName("147.127.240.91");

//------------ send request ------------------
String s = "Song Request";
int length = s.length();
byte buffer[] = s.getBytes();
DatagramPacket dataSent = new DatagramPacket(buffer, length, serveur, 8532);
DatagramSocket socket = new DatagramSocket();
socket.send(dataSent);

//---------- received response ---------------
DatagramPacket dataReceived = new DatagramPacket(new byte[taille], taille);
socket.receive(dataReceived);
String songListRecieved = new String(dataReceived.getData(), 0, dataReceived.getLength());


String songName[] = songListRecieved.split("\\|");

for ( String tmpStr : songName )
System.out.println("Data received : " + tmpStr.trim() );


// --------- choose song ---------------------
length = songName[1].length();
buffer = songName[1].getBytes();
dataSent = new DatagramPacket(buffer, length, serveur, 8532);
socket.send(dataSent);


} catch (Exception e) {
e.printStackTrace();
}
}
}

UDP Socket Server

package catalog;

import java.net.*;

public class CatalogServer extends Thread {

final static int port = 8532;
final static int taille = 1024;
final static byte buffer[] = new byte[taille];
private String queryStr;
String songList = new String("Black or White.mp3Love Piano.mp3La Fleur.mp3Le Bapteme.mp3Amour Mathematique.mp3");
int length;
byte buffer1[];
String selectedSong;

public String getSelectedSong() {
return selectedSong;
}

public void setSelectedSong(String selectedSong) {
this.selectedSong = selectedSong;
}


public static void main(String argv[]) {

CatalogServer cs = new CatalogServer();
cs.start();
}

public void run() {
try {
DatagramSocket socket = new DatagramSocket(port);


while (true) {
//---------- serv recv ---------------
DatagramPacket data = new DatagramPacket(buffer, buffer.length);
socket.receive(data);
queryStr = new String(data.getData(), 0, data.getLength());
System.out.println(queryStr);


// --------serv send ------------
if (queryStr.equals("Song Request")) {
length = songList.length();
buffer1 = songList.getBytes();
DatagramPacket dataSent = new DatagramPacket(buffer1, length,
data.getAddress(), data.getPort());
socket.send(dataSent);
}

//---------- recv song -------------
else {
// socket.receive(data);
// queryStr = new String(data.getData(), 0, data.getLength());
setSelectedSong(queryStr);
}

//System.out.println(data.getAddress());
}

} catch (Exception ex) {
ex.printStackTrace();
}
}
}

Java XML Parser

ตัวอย่างการเขียน Java กับ XML แบบ Dom กับ SAX

- SAX ใช้ง่ายกว่า ทำงานได้เร็วกว่า เพราะอ่านอย่างเดียว
- DOM ทำงานได้ยืดหยุ่นกว่า อ่านกลับไป กลับมาได้

แต่ผมเลือก SAX เพราะว่า ผมอ่าน xml element ไปเก็บใน bean แล้วเอาไปฝังใน collection อย่างพวก array list หรือ hash map ก่อน จากนั้น ไปดึงข้อมูลจากพวกนี้ จะง่ายกว่าใช้ dom มา walk เอา (เหนื่อยนะเนี่ย)

(ความเดิมตอนที่แล้ว: 3. Java-XML )

=> http://www.totheriver.com/learn/xml/xmltutorial.html