วันพฤหัสบดีที่ 10 กันยายน พ.ศ. 2552

run turbogears2 on eclipse

และแล้วก็ต้องหันหน้ามาใช้ eclipse อีกเช่นเคย หลังจากห่ายหายจากการเขียน Java
ไปสักพัก คราวนี้เกิดอะไรขึ้นทำไมต้องใช้ eclipse
ก็เนื่องจาก javascript นี่สิที่เป็นปัญหา ต้องยอมรับว่า tool ฟรี หาได้บน eclipse
จริง ๆ ใช้ JSLint ในการ validate javascript syntax

แล้ว project ที่ใช้ก็คือ Turbogears2 เอาไงดี ใหน ๆ ก็พี่งพา tool ระดับเทพ
นี้แล้วก็ต้องใช้ให้มันคุ้มกับความหน่วง เลยไปเจอวิธีมา ว่าจะ run project ที่เป็น
Turbogear ได้อย่างไร ก็ไปเจอวิธีมา ตามนี้ครับ

สิ่งที่ต้องทำแล้ว
1. install Python 2.5, 2.6
2. install Turbogears 2.0
3. install Eclipse 3.4+

ส่วนแรก เป็นการ
install PyDev(tool ที่ทำให้ eclipse รู้จักภาษา python)

1) ที่ menu bar เลือก Help >> Install New Software >> Add...
2) set Name : Pydev
3) set Location : http://pydev.org/updates/ and click button ok
4) check box PyDev only and click button Next>
5) download and install by click button Finish
6) restart eclipse after add plugin


setup PyDev(ชี้ไปยัง paht python ที่ทำการ install)

1) ที่ menu bar เลือก Window >> Preference
2) ที่ menu ด้านซ้ายมือ เลือก Pydev >> Interpreter - Python
3) ด้านขวามือจะขึ้น Python Interpreters ให้ Click New... ให้เลือก path python
    << path install >>\tg2env\Scripts\python.exe
    ในส่วนนี้จะเลือก python จาก turbogear environment เป็นหลัก เพราะ tool บางตัว เช่น cx_Oracle ของ windows บังคับให้ลงที่เดียว และต้องไว้ใน env ของ tg2 ด้วยครับ เคยกล่าวไว้ใน post เก่าลองไปดูกันได้ แล้วจึง Click New... ให้เลือก path python
    C:\Python25\python.exe
    เป็นรองครับ ลงมาเพราะต้องใช้ tool บางอย่างบน env python


ขั้นตอนต่อไปคือ
สร้าง project ด้วย tg2 หรือเป็น project ที่มีอยู่เดิมแล้ว
ให้ใช้คำสั่ง (ถ้าเคยทำแล้วอาจไม่ต้องทำอีกครับ)
ทำการ set env turbogear โดนเข้าไปที่

cd << << path install >>\tg2env\Scripts\
activate

เข้าไปที่ path project จะเจอ file setup.py

python setup.py install

หรือ ถ้า error ฟ้องให้ใช้ develop ก็เปลี่ยนเป็น

python setup.py develop

เสมอ เพื่อให้ project มีการ load resource และจัดเตรียมอะไรบางอย่างให้พร้อมครับ

ในส่วนที่สอง เป็นการ set run-script turbogear2 on eclipse

For TG2, provided pydev is setup.

1) Under Run->External Tool->External Tools Configurations
2) Create a "New Launch Configuration"
3) On the Main Tab
      Name: TG2 App Start
      Location: /usr/local/devenv/tg2env/bin/paster (Your Path to
paster)
      Working Directory: ${project_loc}
      Arguments: serve --reload development.ini
4) On the Common Tab
      Check "Display in favorites menu" > External Tools
5) Apply and close
6) In Navigator Window, highlight the project folder.
7) Under Run->External Tool->External You can select the new "TG2 App
Start"


ถ้าไม่ติดปัญหาอะไร ที่ console ของ eclipse จะขึ้น log เวลาที่เราเข้า
localhost:8080 << ตัวอย่าง url ที่ set ไว้สำหรับใช้งน

Basic Ext JS

เป็น Web Template ที่ผสานระหว่าง Html(CSS + DOM) + Javascript

โดน site หลักอยู่ตามนี้ครับ
Ext JS

ข้อดีคือ
สามารถ แยกในส่วนที่เป็น server site และ client site ได้ขาดจากกันจริง ๆ
และให้ client site ทำการติดต่อกับ server site ได้โดย Ajax ที่รองรับทั้ง
JSON และ XML ทำให้ Web ดูรายรืนและเนียรจริง ๆ

ตามนี้ไปก่อนนะครับ เดี๋ยวมาแกะใส่ทีละอันครับ
Tutorial:Ext StartUp Guide (Thai)
Tutorial:Introduction to Ext 2.0 (Thai)

วันพุธที่ 9 กันยายน พ.ศ. 2552

Basic PL/SQL

จนแล้วจนรอด programmer ก็ต้องเขียน SQL อันนี้ง่ายถูไถ ไปเรื่อยก็รอด
แต่พอมาเป็น Database ของ Oracle แล้วนี้
มันปวดใจจริง ๆ กับ PL/SQL ทำไมต้องมาเขียน program สองที่หว่า
แต่เอาเป็นว่า เอ่อ เขียนก็เขียนเพราะงานมันก็คนละแบบจริง ๆ ครับ

โครงสร้างภาษา PL/SQL

[ DECLARE << ประกาศตัวแปร ถ้าไม่มีไม่ต้องใส่ก็ได้

]
BEGIN << เริ่ม process
[ EXCEPTION << ประกาศการจัดการกับ Error ถ้าไม่มีไม่ต้องใส่ก็ได้

]
END; << จบ process ต้องมี ; ปิด้านเสมอ


การเขียน ซ้อนกันทำได้โดย

DECLARE << เริ่ม process หลัก
BEGIN
  DECLARE << เริ่ม process ย่อย
  BEGIN
  END << จบ process ย่อย
END << จบ process หลัก


comment code
1. บรรทัดเดียว ใช้

-- comment

2. หลายบรรทัด ใช้

/*
comment
comment
*/


รูปแบบการประกาศตัวแปร

variable_name [CONSTANT] datatype [NOT NULL][{DEFAULT|:=}initial_value];


variable_name << คือชื่อตัวแปร
CONSTANT << เป็น keyword ว่าตัวแปรนี้ เป็น constant variable (ค่าคงที่)
ไม่สามารถเปลี่ยนค่าได้
datatype << คือประเภทของตัวแปร เช่น
NUMBER[(p[,s])] number (p = precision, s = scale)
CHAR[(n)] fixed length character (default = 1 char)
VARCHAR2(n) variable length character n คือ maximum length
BOOLEAN logical มี 3 ค่า คือ (True, False, Null)

NOT NULL << เป็นการตั้งกฎไว้ว่า ตัวแปรนี้ต้องมีค่าเสมอ (ห้ามเป็น NULL)
{DEFAULT|:=}initial_value << เป็นการกำหนดค่าเริ่มต้นให้ตัวแปร

หมายเหตุ ถ้าระบุ NOT NULL หรือ CONSTANT keyword ในการประกาศตัวแปรแสดงว่า
ต้องมีการกำหนด Initial value ให้ตัวแปรนั้นด้วย

คำสั่งภาษา SQL ได้ดังนี้
Data Retrieval

SELECT

Data Manipulation Language

INSERT
UPDATE
DELETE

Transaction Control

COMMIT
ROLLBACK
SAVEPOINT


การ Assign ค่าตัวแปร

ชื่อตัวแปร := expression ;


การทำงานตามเงื่อนไขด้วย IF statement

IF condition THEN
statements ;
[ ELSIF condition THEN
statements;
]
[ ELSE
statements;
]
END IF;


การทำงานซ้ำ LOOP

LOOP
statement 1;
statement 2;
...
EXIT [ WHEN condition ];
END LOOP;


การทำงานซ้ำ FOR

FOR index IN [REVERSE]
lower_bound..upper_bound
LOOP
statement 1;
statement 2;
END LOOP;


[REVERSE] << ใช้สำหรับวน loop แบบย้อนหลัง (จาก upper_bound ลดลงทีละ 1 จนถึง lower_bound)
lower_bound..upper_bound << ตัวอย่างเช่น 1..10

การทำงานซ้ำ WHILE

WHILE condition
LOOP
statement 1;
statement 2;
END LOOP;


การนำ PL/SQL ไปใช้งาน

1. เขียนในรูปแบบของ Anonymous Block (pl/sql block)

[ DECLARE variable_declaration ; ]
BEGIN
executable - code ;
END;


2. ใช้พัฒนาเป็น SubProgram สำหรับเรียกใช้ได้มี 3 ลักษณะ
2.1 PROCEDURE
เป็นโปรแกรมย่อยที่ทำงานอะไรบางอย่าง โดยสามารถรับ parameter มาทำงานได้

PROCEDURE name [ ( parameter,….) ]
IS

pl/sql block;

2.2 FUNCTION
เป็นโปรแกรมย่อยที่นิยมใช้ เพื่อหาค่าอะไรบางอย่าง แล้วคืน กลับมาเป็นชื่อของตัว function เอง

FUNCTION name [ ( parameter,…) ]
RETURN datatype
IS

pl/sql block;

2.3 PACKAGE เป็นการรวบรวม PROCEDURE หรือ FUNCTION หลาย ๆ ตัว
ถ้าไว้ด้วยกัน เพื่อง่ายต่อการควบคุมในแง่ privilege และเป็นหมวดหมู่ดีขึ้น

วิธีการประกาศ parameters ใน Subprograms

parameter.name [IN | OUT | IN OUT] datatype [{ := | DEFAULT} expr];

parameter.name << ชื่อ parameter
mode
IN = รับค่าเข้า
OUT = ส่งค่ากลับ
IN OUT = รับค่าเข้าและส่งค่ากลับ

datatype ชนิดของข้อมูล ไม่ต้องระบุความยาว
[{ := | DEFAULT} expr] ใช้ initial ค่า
กรณีเป็น parameter ใน mode IN และเวลาเรียกไม่ระบุค่า parameter เข้ามา