13 December 2011

Background Process with Servlet

ที่ใส่ with servlet ไว้ด้วยในหัวเพื่อบอกว่าผมยังจะ extends HttpServlet เหมือนเดิมในคลาสผม แต่ว่าจะทำให้มันทำงานอยู่แม้จะไม่ได้มีรีเควสเข้าไปที่ Servlet ตัวนั้นก็ตาม โดยสิ่งที่ผมจะทำคือการ implement Runnable เข้ามา ตามข้างล่าง
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(
 name="TestRunnable",
 urlPatterns={"/TestRunnable"},
 loadOnStartup=1
 )
public class TestRunnable extends HttpServlet implements Runnable {

}

09 December 2011

Abstract Class VS Interface

Abstract Class
abstract class เป็นคลาสที่จะมี abstract method อยู่ด้วยหรือไม่ก็ได้

abstract class Test{
 public String a(){
  return "hello";
 }
 public abstract String b();
}

06 December 2011

GenericServlet VS HttpServlet

javax.servlet.GenericServlet
Signature : public abstract class GenericServlet extends java.lang.Object implements Servlet, ServletConfig, java.io.Serializable

- GenericServlet จะประกอบไปด้วย protocal พื้นฐานใน Servlet
- GenericServlet จะมีต้นแบบ(พิมพ์เขียว) สำหรับการใช้งาน Servlet
- Lifecycle ของ GenericServlet จะอยู่กับ init และ destroy และ method ใน ServletContext interface
- GenericServlet สามารถทำงานผ่านการ Override service method

javax.servlet.http.HttpServlet
Signature : public abstract class HttpServlet extends GenericServlet implements java.io.Serializable

- HttpServlet จะประกอบด้วย protocal Http เท่านั้น
- HttpServlet จะมีต้นแบบ(พิมพ์เขียว) สำหรับการใช้งาน Http
- HttpServlet extend มาจาก GenericServlet
- HttpServlet สามารถใช้ session และ cookie ได้
- HttpServlet ทำงานผ่าน doGet() doPost() doXXX()

01 December 2011

เรื่องของ Path

path คือการอ้างถึงตำแหน่งเส้นทางโดยในการเขียนโปรแกรมนั้น path คือการเรียกตำแหน่งต่างๆของโปรแกรม หรือ sub folder โดยจะมี

Relative path เป็นการเรียก path แบบมีความสัมพันธ์กัน เช่น
เรามีโปรแกรมอยู่ c:\myapp\app.exe แล้ว app.exe ทำการเรียก path ./data/data.txt นั้นก็หมายความว่าโปรแกรมเรียกไปที่ c:\myapp\data\data.txt

Absolute path คือการกำหนดชื่อ path แบบเต็มโดยจะบอกตั้งแต่ root เช่น
c:\myapp\data\data.txt

09 November 2011

Event Driven Programming

  

Event Driven Programming เป็นแนวคิดในการเขียนโปรแกรมที่แตกต่างจากการเขียนโปรแกรมเบื้องต้นที่คุ้นเคย โดยการเขียนโปรแกรมที่เราต้องมองการทำงานให้ทะลุปุโปร่งหรือให้เข้าใจทุกลำดับการทำงานของโปรแกรมก่อนแล้วค่อยเขียนโปรแกรมควบคุมการทำงาน เราเรียกวิธีการเขียนโปรแกรมแบบนี้ว่า Structure Programming ซึ่งใช้ได้ผลดีหากโปรแกรมนั้นมีขนาดเล็ก และง่ายต่อการทำความเข้าใจลำดับขั้นตอน

แต่ถ้าหากเป็นโปรแกรมขนาดใหญ่ที่มีความซับซ้อนแล้วการเขียนโปรแกรมแบบ Structure Programming นั้นคงเป็นเรื่องยาก ซึ่ง Event Driven Programming ก็คือแนวคิดที่มาจัดการด้านนี้โดยแนวคิดนี้จะสนใจแค่ว่าถ้าเกิดเหตุการณ์ขึ้นมาแต่ละอย่างจะจัดการกับมันอย่างไร โดยไม่สนใจว่ามีอะไรเกิดขึ้นกับโปรแกรมบ้าง ทำให้สามารถโฟกัสไปยังสิ่งที่ต้องการจัดการและจัดการมันได้อย่างง่าย....

โดยถ้าหากเราต้องการแก้ไขระบบเราก็ไม่ต้องไปสนใจส่วนที่ไม่เกี่ยวข้อง แต่ถ้าหากเป็น Structure Programming อาจจะต้องคิดใหม่หมด หรือถึงขั้นรื้อระบบใหม่กันเลยทีเดียว....

14 June 2011

Change Computer Name On Ubuntu Desktop


Step 1. run gksudo gedit /etc/hostname /etc/hosts
Step 2. Change your computer name in two files.
Step 3. Restart.

02 May 2011

HTML::Template 2


 <tmpl_if> กำหนดเงื่อนไขใน template
if.pl
#!c:\perl\bin\perl.exe
use HTML::Template;
my $tmpl = HTML::Template->new(filename=>'tmpl/if.tmpl');
$tmpl->param(bool=>1);
print "Content-type:text/html\n\n",$tmpl->output();

if.tmpl
<html>
<head>
    <title>if</title>
</head>
<body>
<tmpl_if name="bool">
  is true
<tmpl_else>
  is false
</tmpl_if>
</body>
</html>

<tmpl_unless> ใช้งานเหมือนกับ <tmpl_if> แต่เป็นเงื่อนไขที่ตรงกันข้าม(opposit)