Archive for category groovy
เขียน Client–Server เป็นไหม???
Posted by boysbee in groovy, java, programming on 05/05/2011
เขียน Client – Server เป็นไหม? คำถามหนึ่งประโยคออกมาจากปากผู้สัมภาษณ์ผม ทำให้นึกย้อนกลับไปว่าเคยเขียนบ้างไหม? ต้องเคยซิ … แล้วมันเขียนยังไงละ?
เราเริ่มกันที่การเขียน code ฝั่ง server ก่อนละกัน
Server แบบ Java Code
แบบแรกเขียนใช้ DataOutputStream , DataInputStream
package com.my.test.socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerTest {
private static int port = 4444;
public static void main(String[] args) {
ServerSocket server;
try {
server = new ServerSocket(port);
Socket socketAccept;
while (true) {
socketAccept = server.accept();
System.out.println("Accept from "
+ socketAccept.getInetAddress().getHostName());
DataOutputStream output = new DataOutputStream(socketAccept.getOutputStream());
DataInputStream input = new DataInputStream(socketAccept.getInputStream());
String str = input.readLine();
System.out.println(str);
output.writeBytes("Hi,I'm fine.\n");
output.flush();
System.out.println("response successfully.");
output.close();
socketAccept.close();
}
} catch (IOException e) {
System.err.println(e.toString());
}
}
}
แบบที่สองขียนใช้ PrintStream, BufferedReader
package com.my.test.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerTest {
private static int port = 4444;
public static void main(String[] args) {
ServerSocket server;
try {
server = new ServerSocket(port);
Socket socketAccept;
while (true) {
socketAccept = server.accept();
System.out.println("Accept from "
+ socketAccept.getInetAddress().getHostName());
PrintStream output = new PrintStream(socketAccept.getOutputStream());
BufferedReader input = new BufferedReader(
new InputStreamReader(socketAccept.getInputStream()));
String str = input.readLine();
System.out.println(str);
output.print("Hi,I'm fine.\n");
output.flush();
System.out.println("response successfully.");
output.close();
socketAccept.close();
}
} catch (IOException e) {
System.err.println(e.toString());
}
}
}
แล้ว Client ละ? ก็เขียนทำนองเดียวกันครับแบบนี้
package com.my.test.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws InterruptedException {
try {
Socket socket = new Socket("localhost", 4444);
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.print("Hi,How are you?\n");
writer.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String s = null;
while ((s = reader.readLine()) != null) {
System.out.println(s);
}
socket.close();
} catch (IOException e) {
System.err.println(e.toString());
}
}
}
ลอง run โปรแกรมดูนะครับ run server ก่อนแล้วค่อย run client
ที่นี่มาดู code แบบ groovy บ้าง
Server แบบ groovy
package com.my.socket
import java.net.ServerSocket
def server = new ServerSocket(4444)
while(true) {
server.accept { socket ->
println "processing new connection..."
socket.withStreams { input, output ->
def reader = input.newReader()
def buffer = reader.readLine()
println "server received: $buffer"
now = new Date()
output << "echo-response($now): Hi,I'm fine.\n"
}
println "processing/thread complete."
}
}
Client แบบ groovy
package com.my.socket
s = new Socket("localhost", 4444);
s.withStreams { input, output ->
output << "Hi,How are you?\n"
buffer = input.newReader().readLine()
println "response = $buffer"
}
เขียนสั้นกว่า java แต่ผลการทำงานเหมือน ๆ กันเลย >_<” สั้นเกิ๊น
XML with Python : ตอนที่ 1 อ่าน XML เทียบกับ Groovy
Posted by boysbee in groovy, programming, python on 22/04/2011
วิธีอ่านด้วย Java ลองดูได้ที่ post เก่า ที่นี่นะครับ
วิธีอ่านด้วย Groovy
package com.my.test.xml
def xml = """
<author>
<name>boysbee (boysbee)</name>
<uri>http://twitter.com/boysbee</uri>
</author>
"""
def author = new XmlParser().parseText(xml)
author.each{
println "tag name : " + it.name()+ " = " +it.text()
}
ลองดู Python บ้าง
from xml.dom import minidom xml = "<author><name>boysbee (boysbee)</name><uri>http://twitter.com/boysbee</uri></author>" xmldoc = minidom.parseString(xml) print xmldoc.toxml()
สั้นและง่ายพอ ๆ กันเลย … ^ ^”
XML with Python : ตอนที่ 2 แล้วสร้างเอกสาร XML เทียบกับ Groovy ดูละกัน
Posted by boysbee in groovy, programming, python on 22/04/2011
ดู code java ที่ post เก่าได้นะครับจะได้เปรียบเทียบกันได้ ที่นี่
วิธีสร้างด้วย Groovy
package com.my.xml
def sw = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(sw)
xml.author(){
name("boysbee (boysbee)")
uri("http://twitter.com/boysbee")
}
print sw
สร้างด้วย python
from xml.dom.minidom import Document
doc = Document()
author = doc.createElement("author")
name = doc.createElement("name")
uri = doc.createElement("uri")
nameText = doc.createTextNode("boysbee (boysbee)")
name.appendChild(nameText)
uriText = doc.createTextNode("http://twitter/boysbee")
uri.appendChild(uriText)
author.appendChild(name)
author.appendChild(uri)
doc.appendChild(author)
print doc.toprettyxml(indent=" ")
python ยาวกว่านิดหน่อย ^ ^”
XML with Groovy : ตอนที่ 2 แล้วสร้างเอกสาร XML ยังไงละ???
Posted by boysbee in groovy, java, programming on 19/04/2011
วิธีสร้างด้วย Java
package com.my.test.xml;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
public class TestCreateXml {
public static void main(String[] args) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
// crate document builder
DocumentBuilder db = dbf.newDocumentBuilder();
// create new document
Document doc = db.newDocument();
// create root element 'author'
Element author = doc.createElement("author");
doc.appendChild(author);
// create element 'name'
Element name = doc.createElement("name");
// add text value
Text text1 = doc.createTextNode("boysbee (boysbee)");
name.appendChild(text1);
// append to parent
author.appendChild(name);
// create element 'uri'
Element uri = doc.createElement("uri");
// add text value
Text text2 = doc.createTextNode("http://twitter.com/boysbee");
uri.appendChild(text2);
// append to parent
author.appendChild(uri);
// Output the XML
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StringWriter sw = new StringWriter();
StreamResult sr = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
transformer.transform(source, sr);
String xmlString = sw.toString();
System.out.println(xmlString);
}catch(ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
}
วิธีสร้างด้วย Groovy
package com.my.xml
def sw = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(sw)
xml.author(){
name("boysbee (boysbee)")
uri("http://twitter.com/boysbee")
}
print sw
สั้น ๆ อีกละ ^ ^”
XML with Groovy : ตอนที่ 1 อ่าน XML ยังไงเนี่ย???
Posted by boysbee in groovy, java, programming on 18/04/2011
วิธีอ่านด้วย Java
package com.my.test.xml;
import org.xml.sax.SAXException;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
public class TestReadXmlFromString {
public static void main(String[] args) {
String xml = "<author>" +
"<name>boysbee (boysbee)</name>" +
"<uri>http://twitter.com/boysbee</uri>" +
"</author>";
byte[] xmlBytes = xml.getBytes();
InputStream is = new ByteArrayInputStream(xmlBytes);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(is);
// get root element
Element author = doc.getDocumentElement();
// get all child element
NodeList list = author.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
Element node = (Element) list.item(i);
System.out.println("tag name : " + node.getTagName() + " = " + node.getTextContent());
}
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (SAXException se) {
se.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
วิธีอ่านด้วย Groovy
package com.my.test.xml
def xml = """
<author>
<name>boysbee (boysbee)</name>
<uri>http://twitter.com/boysbee</uri>
</author>
"""
def author = new XmlParser().parseText(xml)
author.each{
println "tag name : " + it.name()+ " = " +it.text()
}
สั้นและง่ายเกิน… ^ ^”
Install Groovy
Posted by boysbee in groovy, programming on 12/04/2011
Install
download ตัวติดตั้งจากที่นี่ก่อน download groovy ตัว 1.6 support JDK 1,4 , 1.7 support JDK 1.5 ขึ้นไปนะครับ ตัว install นั้นมีสองแบบ zip กับ window-installer แล้วแต่ถนัด ถ้าเลือกแบบ window-installer ก็ click , click ก็จบ แต่ถ้าเลือกแบบ zip นั้นต้องมาระเบิดแล้วเอาไปวางที่หลัง
Set Environment
ทดสอบ
ไปที่ start > run > cmd แล้วลองพิมพ์ groovy –v ดูครับ