22 กรกฎาคม 2552

Flex Hello world: First Flex Application

       เกือบจะกลายเป็นธรรมเนียมปฎิบัติไปแล้ว สำหรับการเริ่มต้นศึกษา programming language ใหม่ ที่จะต้องลองเขียนโปรแกรม Hello world ตัว Tools ที่จะใช้พัฒนาคือ Flex Builder 3 ครับลุยกันเลย
       1. สร้าง Project ใหม่โดยเลือกที่ File-> New-> Flex Project แล้วสร้าง Application ชื่อ Hello World
       2. เราจะได้ไฟล์ main.mxml เลือกเป็น code view
       3. เพิ่ม code ใน tag
       4. กดปุ่ม run ก็จะได้ Hello world application แบบง่ายๆ ออกมา

Flex Desktop Application with AIR

       Adobe Integrated Runtime (AIR) เดิมมี code name ว่า Apollo ซึ่งเราใช้ตัว AIR นี้ในการใช้ Flex Applications เป็น Desktop Applications ซึ่งมันจะสามารถรันแบบ Cross platform ทั้ง Windows, Max, Linux OS โดยเราสามารถสร้าง Flex Applications หรือ AJAX Applications นั้นหมายถึงถ้าเราสร้าง Flex หรือ Ajax Applications ได้ เราก็จะสร้าง Desktop Applications ได้เช่นกัน
       Features หลักๆ ของ AIR มีดังนี้
       - Local file-system access: ซึ่งเป็นตัวหลักที่ทำให้เราสามารถย้ายจาก Web-based มาเป็น Desktop ได้
       - Integrated Web browser: โดยตัว AIR runtimes จะมี builder Web Browser (WebKit)
       - Embedded SQLite database: ทำให้เราสามารถพัฒนา Application ทีทำงาน Offline database ได้
สามารถศึกษาข้อมูลเพิ่มเติมได้จาก www.adobe.com/products/air

21 กรกฎาคม 2552

Flex vs Silverlight

       Silverlight เป็น RIA Technology ของ Microsoft ซึ่งจะต้องลงเป็น Browser plug-in เพื่อรัน Silverlight Application เช่นเดียวกับ Adobe Flash Player ที่ต้องลงเป็น Browser plug-in เพื่อรัน Flex Aplication แต่ด้วยความที่ Silverlight นั้นยังใหม่กว่า Flash Player อยู่มาก จึงทำให้ยังไม่เป็น common plug-in เท่าไหร่ ซึ่งถือเป็นข้อเปรียบของ Adobe ในปัจจุบัน (แต่ในอนาคตก็ไม่แน่นะ)
       ใน Silverlight 1.0 นั้น Microsoft ได้เน้นที่ features ที่เหมือนกันกับ Flash โดยยังไม่ได้มีในส่วนของ user interface controls เพื่อใช้สำหรับการทำ RIAs หลังจากนั้นในปี 2008 Silverlight 2.0 ก็ออกมาเพื่อแข่งขันกับ Flex โดยตรง ซึ่งได้มี features ในส่วนของ UI controls เช่น DataGrid, CheckBox, และ Slider โดยการแข่งขันระหว่าง Flex กับ Silverlight นั้นยังพึ่งเริ่มต้นเท่านั้น คงต้องรอดูกันต่อไป : )

อ้างอิง : Adobe Flex 3.0 for Dummies

Flex vs Flash

       Flex เป็น Flash based technology แต่ไม่ได้หมายความว่า Flex คือ Flash โดย Flex นั้น เป็น Application development Framework และ toolset ที่ช่วยให้คุณสามารถสร้าง RIAs ได้โดยจะต้องใช้ Flash Player สำหรับแสดงผลบน Internet
Features สำคัญๆ ที่มีใน Flex แต่ไม่มีใน Flash มีดังนี้
        - The Flex Framework: Flash จะมี component บางอย่างที่ทำงานแบบเดียวกับ Flex (Flex SDK) แต่ Flash จะไม่มี Charting Components, Layout containners รวมทั้ง fratures อื่นๆ ที่เหมาะสำหรับการสร้าง Application ใหญ่
        - MXML: เราสามารถใช้ MXML ในการสร้าง Flex Application ได้ แต่ Flash ไม่มี อย่างไรก็ตามก็ยังมีความสามารถของ ActionScripts 3.0 ที่สามารถใช้ได้ทั้ง Flash และ Flex อยู่ดี
        - IDE: Flex Builder สามารถใช้สำหรับการสร้าง RIAs ซึ่งจะมีความสามารถในการสร้าง code-hinting, debugger และ profiler
       สรุปแล้ว เราควรเลือกเครื่องมือให้เหมาะสมกับงาน หากเราต้องการสร้าง animated movies หรือ games เราก็ควรจะใช้ Flash เพราะ Flex ไม่ได้ทำงานแบบ Timeline และไม่มี Drawing Tools หรือ Animation Tools แต่หากเราต้องการสร้าง Desktop Application, Graph, Chart เราก็ควรใช้ Flex


อ้างอิง : Adobe Flex 3.0 for Dummies

19 มิถุนายน 2552

DB2 Trigger

      ตอนนี้ มา Tuneup ระบบให้กับ โปรแกรมของชาวบ้านเค้าครับ ซึ่งระบบนี้ใช้ database DB2 ทดลองจับเวลาในขั้นตอนของการ save ข้อมูลลง database ดู ปรากฏว่า ใช้เวลาประมาณ 3 นาที ทั้งๆ ที่ข้อมูลมีแค่ประมาณ 2000 record, field ก็ไม่ได้เยอะมาก แถม save ลง table เดียวอีกต่างหาก
      ลองไปลองมา ก็ไปพบว่า table นี้มีการใช้ triggerr เยอะมาก ก็เลยลองเปลี่ยนให้ trigger ไปเรียก store procedure แทน ผลปรากฏว่า เร็วขึ้น 70 - 80% เลยที่เดียว
      ที่เป็นแบบนี้ เพราะว่า การทำงานของ เจ้า trigger นี้ จะ compile ใหม่ทุกครั้ง ทำให้ มี overhead ในการทำงานสูงครับ ยิ่ง trigger มี step การทำงานเยอะ ยิ่งใช้เวลานาน

11 มิถุนายน 2552

DB2 Throws Exception in Store Procedure

DB2 ไม่มีวิธี try catch หรือ throw exception ตรงๆ นะครับ วิธีการที่สามารถทำได้คือ การใช้ SIGNAL

CREATE PROCEDURE SP_THROW_MESSAGE(pInput smallint)
begin
if(pInput = 1) then
insert into tablename values('x');
else
--throw exception
SIGNAL SQLSTATE '99999' SET MESSAGE_TEXT = 'test throw exception';
end if;
end


call SP_THROW_MESSAGE(2)


หรือ ถ้าต้องการให้ throw exception หากเกิด exception จริงๆ ก็ เขียนแบบนี้ครับ

CREATE PROCEDURE SP_THROW_MESSAGE(pInput smallint)
begin

declare exit handler for sqlexception
p1:begin
SIGNAL SQLSTATE '12345' SET MESSAGE_TEXT = 'TEST';
end p1;

insert into tablename values('x');

end

call SP_THROW_MESSAGE()


โดย store นี้จะเข้าทำงาน ที่ คำสั่ง insert แต่หากมี exception เกิดขึ้นก็จะเข้าไปทำที่ signal ซึ่งถ้า program ที่เขียนมีการ try catch เอาไว้ก็จะได้ sqlException ออกมา

30 เมษายน 2552

Asterisk SIP trunk with 2 server

การทำ Trunk โดยใช้ sip จะพบปัญหาในการ config แบบ 2 ทาง ซึ่งแนวทางการแก้ไขจะต้องทำการกำหนด

Server1
[trunk1]
type=peer
host=10.1.1.2
username=102
secret=102
fromuser=102

Server2
[trunk2]
type=peer
host=10.1.1.1
username=101
secret=101
fromuser=101



และ config extensions ใน extensions.conf ดังนี้
Server1
exten=>_9.,1,Dial(SIP/${EXTEN:3}@trunk1,30,r)

Server2
exten=>_9.,1,Dial(SIP/${EXTEN:3}@trunk2,30,r)

24 เมษายน 2552

Spring Scaffold

ทดลองเขียน Spring มาสักพักนึงแล้ว แต่ไม่รู้จะวางโครงยังไงให้ดูดีใช้งานง่าย ค้นไป ค้นมา จึงไปเจอ Tools ชื่อ SKYWAY BUILDER CE ครับ ใช้ในการทำ Scaffold ของ Spring ซึ่งมี แบบ Community ด้วยนะ ซึ่งจะมีทั้งแบบที่เป็น plugin บน Eclipse ด้วย ลองโหลดมาเล่นดูครับ

22 เมษายน 2552

Testing

นั่งทำ Grails Project มาซักพักนึงแล้วครับ แต่ยังไม่สมบูรณ์เลย ไม่รู็จะปิดโปรเจ็คยังไง ซึ่งเรื่องที่สำคัญเรื่องนึงที่พลาดไปคือ Concept เรื่องการทำ Test นี้แหละ เพราะตอนนี้ยังไม่สามารถมั่นใจว่า ระบบที่ทำนั้นถูกต้องหรือเปล่า ก็เลยลองหาข้อมูลเรื่อง test ดูก็เลยคิดจะลองทำ แต่ตอนนี้ยังวุ่นๆ อยู่ เอา Concept ไปก่อนแล้วกัน Testing Concept

01 เมษายน 2552

JasperReport Export Text File

วิธีการ export Jasper Report เป็น Text Format เขียนแบบนี้ครับ

def index = {
def reportFile = servletContext.getResource("/report/test_text.jasper")
def reportName = "testing"
def parameters = new HashMap();
createPdfFile(generateTextReport(reportFile, parameters).toByteArray(), reportName)
return null;
}

private generateTextReport(jasperFile, parameters) {
InputStream input = jasperFile.openStream()
JRTextExporter exporter = new JRTextExporter()
ByteArrayOutputStream byteArray = new ByteArrayOutputStream()

def env = grails.util.GrailsUtil.environment
def config = new ConfigSlurper(env).parse(new File('./grails-app/conf/DataSource.groovy').toURL())
def url = config.dataSource.url
def driverName = config.dataSource.driverClassName
def username = config.dataSource.username
def password = config.dataSource.password

Class.forName(driverName)
Connection connection = DriverManager.getConnection(url, username, password)
JasperPrint jasperPrint = JasperFillManager.fillReport(input, null, connection)
jasperPrint.setLocaleCode(Locale.getDefault().getCountry())

exporter.setParameter(JRTextExporterParameter.CHARACTER_ENCODING, "UTF-8");
exporter.setParameter(JRTextExporterParameter.PAGE_WIDTH, 76);
exporter.setParameter(JRTextExporterParameter.PAGE_HEIGHT, 80);
exporter.setParameter(JRTextExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRTextExporterParameter.OUTPUT_STREAM, byteArray);
exporter.exportReport()
return byteArray
}

private createPdfFile(contentBinary, fileName) {
response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".txt");
response.contentType = "text/plain"
response.outputStream << contentBinary
}

31 มีนาคม 2552

Font, Export PDF with Jasper Report

พยายามหาวิธีอยู่นานเลยครับ ในการแก้ปัญหา Font สำหรับการ Export PDF File ด้วย Jasper Report
ซึ่งเจ้า Jasper Report จะไปหา Font จาก OS ทำให้บางครั้งเรารัน Font บน Windows ได้แต่เอาไปรัน บน Linux ไม่ได้ จึงแก้ปัญหาโดยการส่ง font ไปให้ ตัว Exporter ก่อนที่มันจะทำการ Export PDF ดังนี้
HashMap fontMap = new HashMap();
FontKey key = new FontKey("Angsana New", false, false);
PdfFont font = new PdfFont("ANGSA.TTF", BaseFont.IDENTITY_H, true);
fontMap.put(key, font);

exporter.setParameter(JRExporterParameter.FONT_MAP, fontMap);
exporter.exportReport()


สำหรับ Parameter ต่างๆ ดูได้จาก FontKey และ PdfFont

ที่มา : narisa

30 มีนาคม 2552

Grails Problem, Don't use Number in Domain Name

เมื่อเรา domain name ที่มีตัวเลขรวมอยู่ด้วย จะทำให้ bind ไม่ได้ เช่น
domain name = Book4Store จะได้
table name = BOOK_4STORE
ซึ่ง grails จะ bind table นั้นกลับไม่ได้ วิธีแก้คือ

ไปตั้งชื่อ table ให้ domain นั้น

static mapping = {
table 'book_store'
}


**ทดสอบเฉพาะใน oracle นะครับ

27 มีนาคม 2552

Spring and Tiles

หลังจากที่ลองทำตาม step by step ของ Spring แล้วก็น่าจะเข้าใจการทำงานของ Spring ในระดับหนึ่ง แต่มันก็แค่เริ่มต้นนะครับ
คราวนี้ มาลองเอา Tiles มาแปะเข้าไปใน Spring ดูบ้าง
Tiles เป็นส่วนของการทำ Template โดยจะแยกออกเป็น 2 ส่วนคือ
1 tiles-def เป็นส่วนที่บอกว่า ถ้าเข้ามาที่ link นี้จะมีใช้ resource อะไรบ้าง เช่น ใช้ javascript file ใด, ใช้ template file ใด
2. template file ก็ตามชื่อนั้นแหละครับ

1./WEB-INF/tiles-def.xml

<tiles-definitions>
<definition name=".template" template="/WEB-INF/tiles/template_main2.jsp">
<put-attribute name="title" value="" />
<put-attribute name="script" value="" />
<put-attribute name="action" value="" />
<put-attribute name="content" value="" />
</definition>

<definition name="hello" extends=".template">
<put-attribute name="title" value="Home Pages" />
<put-attribute name="script" value="/WEB-INF/js/*.js" />
<put-attribute name="action" value="hello" />
<put-attribute name="content" value="/WEB-INF/jsp/hello.jsp" />
</definition>
<tiles-definitions>


2. /WEB-INF/tiles/template_main.jsp

<html>
<head>
<title>Spring App : <tiles:getAsString name="title" /></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
</head>
<body>
<h1> This from template</h1>
<tiles:insertAttribute name="content"/>
</body>
</html>

แค่นี้ หลังเรียก เรียกใช้ controller ที่ return ModelView เป็น hello ก็จะผ่าน Tiles และ แสดงผลตามที่เรา config เอาไว้ครับ


Starting JSP with Spring Framework

Spring Framework เป็น Framework ประกอบด้วยหลายส่วน โดยมีส่วนทีน่าจะได้ใช้งานบ่อยๆ เช่น

  • Spring MVC

  • Spring Security

  • Spring Web Flow

  • พูดถึง Spring MVC ก็เป็น Framework ตัวนึงที่เป็นไปตามลัก MVC ทั่วๆไป โดยมีการใช้ IOC (Inversion of Control) เพื่อสามารถใช้งาน Object โดยที่เราไม่ต้อง new Object เอง แต่จะไปทำในส่วนของการ config XML แทน ซึ่งมี config เยอะมาก (ซึ่งบางส่วนสามารถทำ Annotation แทนก็ได้)

    เริ่มลองกันเลยดีกว่า โดยไป download Spring จากที่นี่ version ล่าสุดตอนนี้คือ 2.5.6

    จากนั้นก็ทำตาม tutorial step-by-step ของทาง Spring เอง

    หรือถ้าใครถนัดใช้ netbeans ก็นี้เคยครับ

    Java Web Framework

    ไปรวมพวกบทความที่เค้า เปรียบเทียบ Java Web Framework แต่ละค่าย ส่วนใหญ่ก็จะเป็น Spring, Struts, JSF
    ลองเปรียบเทียบกันดูนะครับว่า เป็นอย่างไรบ้าง

    Spring vs JSF vs Struts จากค่าย Spring ( '_' )
    Comparing Java Web Framework

    แต่ตอนนี้กำลังทดลอง Spring อยู่ Config เยอะมาก แต่ ก็มีความสามารถเยอะดีนะ ไปเรียกส่วนเด่นๆ จากค่ายอื่น เอามา integrate ได้ด้วยทั้งเรื่อง Tile, JSF ลองอ่านกันดู