Friday 30 May 2008

GWT 1.5 ออกแล้ว !! (Release Candidate 1)

การประกาศเปิดตัว Version 1.5 รุ่นที่ 1 ออกมาใน Google Web Toolkit (GWT) ตอนนี้พร้อมแล้ว โดยการที่ออกความสามารถใหม่ๆที่รองรับ Java 5 Annotations และ Template แทนที่ GWT เมื่อก่อน แล้วยังได้รวม Theme และ Widget อีกมากมาย และก็แก้ไข Bug ต่างๆ

สำหรับคนที่ยังไม่รู้จัก GWT โดยมันคือการเขียน Java Code ปกติและเปลี่ยนส่วนหนึ่งให้เป็น JavaScript โดยเรียนรู้ได้อย่างง่ายสำหรับการทำ Rich Internet Application รวมทั้งยังรวม RPC (Remote Procedure Call) Libary เข้าไว้ด้วย (รวมถึง Ajax) , Widget Library และเปลี่ยนเป็น Java 5 Syntax คือสิ่งที่เปลี่ยนแปลงครั้งใหญ่ของ GWT

Monday 26 May 2008

Groovy CRUD # 1

การเขียน​ groovy ​ให้​ติดต่อ​กับ​ฐานข้อมูล​ ​นั้น​แท้จริง​แล้ว​ groovySQL ​ไป​ใช้​ JDBC API ​ใน​การเชื่อมต่อ​ database ​อีกทีดังนี้
Groovy / Java Application <--> Groovy SQL <--> JDBC API <--> JDBC DriverManager / DataSource <--> Database Server

ข้อมูลที่จำ​เป็น​ต้อง​รู้ก่อนการ​ใช้​งาน​ database

  • database URL
    • jdbc:hsqldb:hsql://server/dbname ​ใช้​เชื่อมต่อ​กับ​ HSQLDB server ​รองรับการ​ client ​หรือ​ process ​ที่มากกว่า​ 1
    • jdbc:hsqldb:file:/dir/dbname ​ใช้​เชื่อมต่อ​กับ​ single-client ​โดย​ HSQLDB ​จะ​ใช​ file ​เป็น​ตัวเก็บข้อมูล
    • jdbc:hsqldb:mem:dbname ​ใช้​เชื่อมต่อ​กับ​ database ​ที่ถูกสร้าง​และ​เก็บ​อยู่​ใน​ memory ​ซึ่ง​จะ​ nonpersistent ​เหมาะ​กับ​การเขียน​ application ​เล็กๆ​ ​เอาทดลองทำ​งาน
  • username / password ​ใช้​ username: sa (sysadmin) ​และ​ password empty ​(​ไม่​มี)
  • driver class name : org.hsqldb.jdbcDriver

ตัวอย่างการเชื่อมต่อฐานข้อมูล​ด้วย​ DriverManager

import groovy.sql.Sql
db = Sql.newInstance('jdbc:hsqldb:mem:GinA', 'sa', '', 'org.hsqldb.jdbcDriver');

DriverManager VS DataSource
ถ้า​ดูตอนการทำ​งานเชื่อมต่อ​กับ​ database ​จะ​เห็นว่ามี​ 2 concept ​คือ​ DriverManager ​และ​ Data Source ​ถ้า​เรา​ใช้​ Sql.newInstance method ​จะ​เป็น​การ​ใช้​ DriverManager ​แต่​ถึง​แม้​เรา​จะ​มี​ DriverManager ​แล้ว​ ​แต่​เพื่อการจัดการประสิทธิภาพที่ดีกว่า​เราควร​ใช้​ DataSource ​เพราะ​มันมีการจัดการการเชื่อมต่อ​กับ​ database ​ที่ดีกว่า​โดย​ใช้​ connect pool (แหล่งเก็บ​ connection ​ที่​ใช้​เชื่อมต่อ​กับ​ database) ​และ​รองรับ​ distributed transaction ​และ​เรา​ยัง​สามารถ​นำ​ connect ​นี้กลับมา​ใช้​ใหม่​ได้​อีก​ (reuse) ​เพราะ​เมื่อแต่ละ​ transaction ​ทำ​งานเสร็จก็​จะ​มีการคืน​ connect ​กลับมาที่​ pool ​แต่​ถ้า​เราลืมคืน​ connection ​ตัว​ Groovy ​จะ​เป็น​คืน​ transaction ​ให้​เอง

DataSource ​จึง​กลายมา​เป็น​ส่วน​สำ​คัญเมื่อ​ต้อง​การจัดการ​กับ​ทรัพยากรที่มี​อยู่​อย่างจำ​กัด​ให้​เกิดประ​โยชน์สูงสุด​ ​เช่น​ใน​ application server ​ก็มีการจัดการทรัพยากร​ใน​ application ​ของตัวเองที่​เป็น​ connection pool

ใน​ Groovy ​เรา​สามารถ​ใช้​ datasource ​ได้​ ​โดย​ขึ้น​อยู่​กับ​ database vendor ​แต่ละ​เจ้า​ซึ่ง​จะ​ implement ​ไว้​ที่​ javax.sql.DataSource ​แต่​ HSQL ​มี​เตรียม​ไว้​ที่​ org.hsqldb.jdbc.jdbcDataSource ​ตัวอย่างการเชื่อมต่อฐานข้อมูล​ด้วย​ DataSource

import groovy.sql.Sql
source = new org.hsqldb.jdbc.jdbcDataSource()
source.database = 'jdbc:hsqldb:mem:GinA'
source.user = 'sa'
source.password = ''
db2 = new Sql(source)

Note: ​ถ้า​เรา​ใช้​ application server ​เรา​สามารถ​เอา​ DataSource ​มา​ได้​โดย​ใช้​ JNDI ​ซึ่ง​ข้อดีของการ​ใช้​วิธีนี้​ ​คือการจัดการเชื่อมต่อ​กับ​ฐานข้อมูล​นั้น​ไม่​ขึ้น​อยู่​กับ​ application ​ของเรา​ ​ใน​ application ​ของเรา​ไม่​ต้อง​ระบุ​ database driver ​หรือ​ DataSource classs ​ซึ่ง​มัน​ช่วย​ให้​เรา​สามารถ​ migrate ​จาก​ฐานข้อมูลหนึ่งไปอีกฐานข้อมูลหนึ่ง​โดย​ไม่​ส่งผลกระทบ​ถึง​ application

Note: ​การ​ให้​ได้​มา​ซึ่ง​ connection ​ถ้า​ใช้​ Datasource ​จะ​ใช้​วิธีส่ง​ DataSource ​เข้า​ไป​ใน​ Sql constructor ​แต่​ถ้า​ใช้​ DriverManager ​จะ​ส่งค่าต่างๆ​ ​เข้า​ไปทาง​ Sql.newInstance

ไม่​ว่า​เรา​จะ​ใช้​ DataSource ​หรือ​ DriverManger ​สุดท้ายก็​จะ​ได้​มา​ซึ่ง​ reference ​ของ​ Sql instance

สุดท้าย​ถ้า​เรา​ต้อง​การ​ clone Sql instance ​ขึ้นมาอีกอัน​สามารถ​ใช้​ new Sql(db) ​ได้​ ​ตอนนี้​เรามี​ sql instance ​ที่พร้อม​จะ​ connect ​กับ​ฐานข้อมูล​แล้ว​ ​และ​เรา​ต้อง​การ​ execute ​บาง​ sql statement

Executing SQL
ใช้​คำ​สั่งง่ายๆ​ db.execute(statement) ​ใน​การติดต่อฐานข้อมูล​โดย​ส่ง​ statement sql ​เข้า​ไป

สร้างฐานข้อมูลนักกีฬา​จะ​ประกอบ​ด้วย​ ​ชื่อ​, ​นามสกุล​, ​วันเกิด​ ​และ​ primary key ​จาก​นั้น​ใส่​ index ​ให้​ตารางที่สร้างขึ้น​ (ฐานข้อมูล​ส่วน​ใหญ่​รวม​ทั้ง​ HSQLDB ​จะ​มีการสร้าง​ index ​ให้​อยู่​แล้ว​โดย​อัตโนมัติ​โดย​จะ​เป็น​ primary ​แต่​เรา​สามารถ​ระบุ​ index ​ที่​ต้อง​การ​จะ​สร้างเพื่อ​ให้​ชัดเจนยิ่งขึ้น​ได้​เช่น​กัน)​

จุดประสงค์ของ​ application ​นี้คือทดสอบการส่งคำ​สั่ง​ sql ​จึง​ไม่​ต้อง​มีการ​ใช้​ข้อมูลของเก่าก็​ได้​ (พยายามยึดหลัก​ agile ​ไว้)​ ​ดัง​นั้น​จึง​ลบ​ table ​และ​ index ​ที่​เราสร้าง​ไว้​ก่อน​แล้ว​ค่อยสร้าง​ใหม่​ (Reconstruct) ​ทุกครั้งที่มีการเรียก​ application ​นี้​ (agile database programming)

db.execute '''
DROP INDEX athleteIdx IF EXISTS;
DROP TABLE Athlete IF EXISTS;
CREATE TABLE Athlete(
athleteId INTEGER GENERATED BY DEFAULT AS IDENTITY,
firstname VARCHAR(64),
lastname VARCHAR(64),
dateOfBirth DATE
);
CREATE INDEX athleteIdx ON Athlete (athleteId);
'''

เพิ่มข้อมูลลง​ใน​ตาราง​ Athelete ​ด้วย​ข้อมูลนักวิ่งมาราธอน

db.execute '''
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES ('Paul', 'Tergat', '1969-06-17');
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES ('Khalid', 'Khannouchi', '1971-12-22');
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES ('Ronaldo', 'da Costa', '1970-06-07');
'''

ถ้า​ใช้​วิธีนี้​ใน​การ​ insert ​ข้อมูล​ทั้ง​โปรแกรมมันยากที่​จะ​อ่าน​และ​จัดการข้อมูล​ทั้ง​หมด​ ​เพราะ​คำ​สั่ง​ sql ​มัน​ซ้ำ​กัน​อยู่​เยอะ​ ​ดัง​นั้น​เรา​จะ​เปลี่ยน​ใหม่​โดย​การ​ใช้​ prepare statement ​เข้า​มา​ช่วย​ prepare statement ​คือมีรุปแบบการเขียนคล้าย​ sql statement ​แต่​จะ​แทนค่าที่รับ​เข้า​มาทางโปรแกรม​ด้วย​เครื่องหมาย​ question mark ​แต่สุดท้ายเครื่องหมาย​ question mark ​จะ​ถูกแทนที่​ด้วย​ค่าที่รับ​เข้า​มาทางโปรแกรม​ ​การ​ใช้​วิธี​เพิ่ม​ reuse ​ได้​ ​ใน​ Java ​มี​ prepare statement ​โดย​ใช้​ java.sql.PreparedStatement interface

String athleteInsert = '''
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES (?, ?, ?);
'''
db.execute athleteInsert, ['Paul', 'Tergat', '1969-06-17']
db.execute athleteInsert, ['Khalid', 'Khannouchi', '1971-12-22']
db.execute athleteInsert, ['Ronaldo', 'da Costa', '1970-06-07']

เขียน​ใหม่​ให้​อยู่​ใน​รูปแบบ​ closure ​โดย​ส่ง​ map ​เข้า​ไป​เป็น​ argument

def athletes = [
[first: 'Paul', last: 'Tergat', birth: '1969-06-17'],
[first: 'Khalid', last: 'Khannouchi', birth: '1971-12-22'],
[first: 'Ronaldo', last: 'da Costa', birth: '1970-06-07'],
]
athletes.each { athlete ->
db.execute "​""
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES (${athlete.first}, ${athlete.last}, ${athlete.birth});
"​""
}

Reference : Groovy in Action

つづく

Saturday 24 May 2008

LibreSource 2.5 โปรแกรม Collaborative เปิดเป็น GPL แล้ว

LibreSource 2.5, ออกแล้ว และตอนนี้ได้เปลี่ยนเป็น GNU GPL V2 LibreSource เป็นโปรแกรมที่ช่วยการทำงานแบบ Collaborative (การทำงานที่มีการเปลี่ยนแปลงจากหลายคน) และถูกนำไปใช้งานในหลายพันชุมชน . LibreSource คือ Web Portal ที่คอยเก็บการสื่อสารที่จำเป็นต่างๆและอุปกรณ์การ Share สำหรับงาน Collaborative

โดยการแก้ปัญหานี้ถูกดัดแปลงมาจากการพัฒนา Software โดยเล็งไปที่ Project Collaborative และลดค่าใช้จ่ายต่างๆ โดยชุมชนแรกที่ได้ใช้ LibreSource คือชุมชนวิทยาศาสตร์ และ European Space Agency (ESA) คือคนแรกที่นำมันไปใช้ใน R&D project และปีที่ผ่านมายังถูกใช้ใน French Ministry of Ecology อีกด้วยโดยใน Version 2.5 นั้นได้นำ version control system อย่าง Subversion และสนับสนุน JOnAS และ JBoss


สามารถ download LibreSource 2.5 ได้เลยที่นี้ครับ

Tuesday 20 May 2008

Spring Web Flow 2 ออกแล้วครับผม !!

Spring Module ตัวนี้ได้มุ่งความสนใจไปที่โครงสร้าง Web Application ตอนนี้ได้รวม Spring Web MVC , Spring Web Flow , Spring Javascript(JS) และ Spring Faces โดยแต่ละอันมีความสัมพันธ์กันยังไงจะอธิบายต่อไปดังนี้

Spring Web MVC
ช่วยในการพัฒนา Web Application ด้วย Paradigm ของ Model View Controller โดยแต่ละ Module ของ Web Flow จะถูกสร้างบนตัวนี้

Spring Web Flow
มันคือ Module ที่เสริมการทำงานของ Controller โดยการใช้ Domain Specific Language ได้ !! โดยภาษานี้ถูกออกแบบเป็นการโต้ตอบกับ User ด้วย Model นั้นต้องการหลายๆความต้องการ เพื่อที่จะได้งานที่สมบูรณ์และอาจจะถูกอ้างจากหลายที่ได้

Spring JavaScript
มันคือ client-side JavaScript Framework แบบ Abstract นั้นคือยอมให้คุณเสริมการกระทำต่างๆของ Web Page โดย Framework ถูกสร้างจาก Dojo Toolkit โดย Spring.js มีเป้าหมายสร้างความง่ายของการใช้งาน Dojo สำหรับงานทั่วๆไปในเรื่องราว Enterprise ในขณะที่ยังมีประสิทธิภาพสูงสำหรับกรณีการพัฒนาขั้นสูง แล้วยังทำงานได้ทั้ง 2 ฝั่งใน Web Flow 2 โดยรวม Spring.js เข้ากับ Spring Web MVC Controller สำหรับการเรียก Ajax Request

Spring Faces
Module ตัวนี้สนับสนุนการทำ Java Server Faces โดยการสนับสนุนครั้งนี้โดยใช้ JSF ในการ View ในสภาพแว้ดล้อมคล้ายๆกับ Spring MVC และ Web Flow Controller ด้วยการทำเช่นนี้ทำให้ผสมผสานข้อดีของแต่ละ Module โดยใช้ JSF UI Component Model กับข้อดีของ Web MVC Architecture โดย Spring Faces ได้รวม JSF Component Library ที่ถูกสร้างบน Sring Javascript สำหรับการเรียกใช้ Ajax และการตรวจสอบฟอร์มจากพฤติกรรมของ client-side ในการทำงานให้ถูกต้อง

ผลประโยชน์สำคัญจากการใช้ Web Flow 2
- พัฒนา Controller ที่สามารถนำมาใช้ใหม่ได้โดยไม่ต้อง Restart Container ใหม่
- แก้ปัญหา Back-button และการ submit ซ้ำโดยไม่ต้องเขียน code แก้
- ใช้ข้อมูลจาก flowScope และ viewScope เพื่อง่ายในการควบคุมเนื้อการจัดการในระหว่างเกิด transaction ใน application
- แก้ไข Manual JPA PersistenceContext
- เสริมความปลอดภัยตอน startup ของ flow การทำงานโดยใช้ Spring Security
- สร้างงานจากการประกาศ Model Binding และ Validation routine ด้วยการสนับสนุนการตรวจสอบแบบ inter-field
- สามารถควมคุมผ่าน URLs และการ bind ของ request parameters
- สร้างส่วนหนึ่งของการตอบสนอง ajax ด้วย JSP และ Tiles หรือ UI JSF
- ได้พลังอย่างเต็มที่จาก JSF UI Component Model รวมถึงสนับสนุน JSF Component Libraries
- ใช้ the Dojo Toolkit ในการสร้างแรงกระตุ้นสำหรับ User Interface
- เสริมความแกร่งด้วยการ cache และการบีดอัด CSS และ JS จาก jar bundle

Web Flow ต้องการ Java 1.4 หรือมากกว่าและ Spring Framework 2.5.4 หรือมากกว่า โดย run อยู่บน Java EE servers สำหรับใครที่ต้องการข้อมูลมากขึ้นหรือดาวโหลด ไปดูเพิ่มได้ที่ Web Flow 2 General Release Announcement

Monday 19 May 2008

การบริหารจัดการโครงการเบื้องต้น

มาต่อจากบทความที่แล้วครับ มาอธิบายถึงการมองโครงการอย่างคร่าวๆ ยังไม่ลงลึกถึงรายละเอียดของขั้นตอนต่างๆ lecture note เหมือนเดิม

Project Management Definitions

  • project (โครงการ)​​ ​​​​​​​คือสิ่งที่​​​​​​​​​​​เกิดขึ้นชั่วคราว​​​​​​​ ​​​​​​​มีกำ​​​​​​​​​​​หนดวันเริ่มต้น​​​​​​​​​​​และ​​​​​​​​​​​วันสิ้นสุดที่​​​​​​​​​​​แน่นอน (ad-hoc)​​​​​​​ ​​​​​​​แต่การ​​​​​​​ organization ​​​​​​​จะ​​​​​​​​​​​เกิด​​​​​​​​​​​และ​​​​​​​​​​​ไม่​​​​​​​​​​​มีวันจบ​​​​​​​ ​​​​​​​โครงการ​​​​​​​​​​​จะ​​​​​​​​​​​ต้อง​​​​​​​​​​​มี​​​​​​​ ​​​​​​​วัตถุประสงค์​​​​​​​ (objective) ​​​​​​​ซึ่ง​​​​​​​​​​​ต้อง​​​​​​​​​​​วัด​​​​​​​​​​​ได้​​​​​​​ ​​​​​​​ถ้า​​​​​​​​​​​วัด​​​​​​​​​​​ไม่​​​​​​​​​​​ได้​​​​​​​​​​​นั่นคือโครงการที่ผิดพลาด​​​​​​​ ​​​​​​
  • subproject ​​​​​​​เป็น​​​​​​​​​​​โครงการย่อยๆ​​​​​​​ ​​​​​​​ที่​​​​​​​​​​​อยู่​​​​​​​​​​​ใน​​​​​​​​​​​โครงการหลักอีกที
  • program ​​​​​​​คือหลายโครงการที่มี​​​​​​​​​​​ความ​​​​​​​​​​​สัมพันธ์ต่อ​​​​​​​​​​​กัน​​​​​​​ ​​​​​​​ที่ทำ​​​​​​​​​​​งานร่วม​​​​​​​​​​​กัน​​​​​​​ ​​​​​​​เช่น​​​​​​​ ERP ​​​​​​​ที่มีหลายโครงการ​​​​​​​​​​​อยู่​​​​​​​​​​​ภาย​​​​​​​​​​​ใน​​​​​​​ ​​​​​​​และ​​​​​​​​​​​สัมพันธ์​​​​​​​​​​​ซึ่ง​​​​​​​​​​​กัน​​​​​​​​​​​และ​​​​​​​​​​​กัน​​​​​​​​​​​อยู่
  • project management (การบริหารโครงการ​​​​​​​) ​​​​​​​คือการนำ​​​​​​​​​​​ความ​​​​​​​​​​​รู้​​​​​​​ ​​​​​​​เครื่องมือ​​​​​​​ ​​​​​​​เทคโนโลยีต่างๆ​​​​​​​ ​​​​​​​นำ​​​​​​​​​​​มา​​​​​​​​​​​ใช้​​​​​​​​​​​เพื่อ​​​​​​​​​​​ให้​​​​​​​​​​​โครงการสำ​​​​​​​​​​​เร็จ​​​​​​​ ​​​​​​​ตาม​​​​​​​​​​​ความ​​​​​​​​​​​ต้อง​​​​​​​​​​​การ​​​​​​​ (requirement)
  • Portfolio management ​​​​​​​เป็น​​​​​​​​​​​การรวบรวมข้อมูลต่างๆ​​​​​​​ ​​​​​​​ของโครงการ​​​​​​​ ​​​​​​​เพื่อเก็บ​​​​​​​​​​​ไว้​​​​​​​​​​​ใช้​​​​​​​​​​​ใน​​​​​​​​​​​โครงการถัดไป​​​​​​​ ​​​​​​​การเก็บข้อมูลต่างๆ​​​​​​​​​​​เอา​​​​​​​​​​​ไว้​​​​​​​​​​​ยัง​​​​​​​​​​​มีประ​​​​​​​​​​​โยชน์​​​​​​​​​​​ใน​​​​​​​​​​​กาทำ​​​​​​​​​​​มาตรฐาน​​​​​​​ CMMI ​​​​​​​ที่​​​​​​​​​​​จะ​​​​​​​​​​​ต้อง​​​​​​​​​​​มีข้อมูล​​​​​​​​​​​จาก​​​​​​​ project ​​​​​​​เก่าๆ​​​​​​​ ​​​​​​​ที่​​​​​​​​​​​เรา​​​​​​​​​​​เก็บข้อมูล​​​​​​​​​​​ไว้​​​​​​​ ​​​​​​​เช่น​​​​​​​​​​​จะ​​​​​​​​​​​สร้าง​​​​​​​ program ​​​​​​​แบบนี้ต้อ​​​​​​​​​​​ใช้​​​​​​​ module ​​​​​​​อะ​​​​​​​​​​​ไรเทคนิคไหน​​​​​​​ ​​​​​​​ซึ่ง​​​​​​​​​​​ถ้า​​​​​​​​​​​เรา​​​​​​​​​​​ใช้​​​​​​​ module ​​​​​​​ที่​​​​​​​​​​​เคยสร้าง​​​​​​​​​​​ไว้​​​​​​​​​​​แล้ว​​​​​​​​​​​ยัง​​​​​​​​​​​ช่วย​​​​​​​​​​​ให้​​​​​​​​​​​ลดเวลา​​​​​​​​​​​ใน​​​​​​​​​​​การพัฒนา​​​​​​​ (development) ​​​​​​​และ​​​​​​​​​​​ทดสอบ​​​​​​​ (Testing) ​​​​​​​หรือ​​​​​​​​​​​เรา​​​​​​​​​​​สามารถ​​​​​​​​​​​พัฒนา​​​​​​​​​​​เทคนิค​​​​​​​​​​​ให้​​​​​​​​​​​ดีขึ้นกว่า​​​​​​​​​​​เดิม​​​​​​​​​​​ได้​​ ​​เป็น​​​เหมือนองค์​​​ความ​​​รู้ขององค์กร
  • Portfolio ​​​​​​​เป็น​​​​​​​​​​​กลุ่มของโครงการ​​​​​​​​​​​หรือ​​​​​​​​​​​โปรแกรม​​​​​​​​​​​และ​​​​​​​​​​​งาน​​​​​​​​​​​อื่นๆ​​​​​​​ ​​​​​​​ที่​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​กับ​​​​​​​​​​​การบริหารโครงการ​​​​​​​ ​​​​​​​เพื่อสนับสนุนประสิทธิภาพการบริหารจัดการ​​​​​​​ ​​​​​​​ตามเป้าหมายของธุรกิจ​​​​​​​​​​​นั้นๆ
  • Progressive Elaboration ​​​​​​​เป็น​​​​​​​​​​​การพัฒนา​​​​​​​ software ​​​​​​​แบบวน​​​​​​​​​​​ซ้ำ​​​​​​​ (loop) ​​​​​​​ไปเรื่อยๆ​​​​​​​ ​​​​​​​เพื่อ​​​​​​​​​​​ให้​​​​​​​ software ​​​​​​​ที่​​​​​​​​​​​ได้​​​​​​​​​​​ประสิทธิ์ภาพ​​​​​​​ ​​​​​​​ความ​​​​​​​​​​​คืบหน้า​​​​​​​​​​​และ​​​​​​​​​​​ความ​​​​​​​​​​​ถูก​​​​​​​​​​​ต้อง​​​​​​​​​​​ดีขึ้น
  • Project Management Office (PMO) ​​​​​​​เป็น​​​​​​​​​​​การบอกว่าคนที่​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​กับ​​​​​​​​​​​โครงการ​​​​​​​​​​​นั้น​​​​​​​​​​​ใครทำ​​​​​​​​​​​หน้าที่อะ​​​​​​​​​​​ไรบ้างSponsor ​​​​​​​คือคนที่สนับสนุนด้านการต่างๆ​​​​​​​ ​​​​​​​เช่นการเงิน​​​​​​​​​​​ให้​​​​​​​​​​​กับ​​​​​​​​​​​โครงการของเรา​​​​​​​ ​​​​​​​ซึ่ง​​​​​​​​​​​ก็คือลูกค้า​​​​​​​​​​​เรา​​​​​​​​​​​นั้น​​​​​​​​​​​เอง
  • Stakeholder คือ​​​ผู้​​​มี​​​ส่วน​​​ได้​​​ส่วน​​​เสียต่อโครงการ​​ ​​ซึ่ง​​​​​​​​ที่มีผลต่อ​​​​​​​​​​​ความ​​​​​​​​​​​สำ​​​​​​​​​​​เร็จ​​​​​​​​​​​หรือ​​​​​​​​​​​ล้มเหลวของโครงการ
  • Estimate คือประมาณก่อนจะเริ่มทำยิ่งมีโครงการที่เคยทำมากเท่าไหร่ (Portfolio management) ก็จะประมาณได้ว่าโครงการใหม่จะพัฒนาอย่างไร
หลัก​​​​​​​​​​​​​​​ใน​​​​​​​​​​​​​​​การบริหารโครงการคือ​​​​​​​​ ​​​​​​​​เวลา​​​​​​​​ (time) ​​​​​​​​เงิน​​​​​​​​ (cost) ​​​​​​​​คุณภาพ​​​​​​​​ (quality) ​​​​​​​​โดย​​​​​​​​​​​​​​​ทั้ง​​​​​​​​​​​​​​​หมดเรา​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​ควบคุม​​​​​​​​ (control) ​​​​​​​​และ​​​​​​​​​​​​​​​วัด​​​​​​​​ (monitor) ​​​​​​​​ได้​​​​​​​​ ​​​​​​​​เช่นถามว่า​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​วัด​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​อย่างไรว่า​​​​​​​​ software ​​​​​​​​เสร็จเมื่อไหร่​​​​​​​​ ? ​​​​​​​​คำ​​​​​​​​​​​​​​​ตอบ​​​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​​​เรา​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​รู้ว่า​​​​​​​​ software ​​​​​​​​มีขนาด​​​​​​​​​​​​​​​เท่า​​​​​​​​​​​​​​​ไหร่​​​​​​​​ ​​​​​​​​ทำ​​​​​​​​​​​​​​​แค่​​​​​​​​​​​​​​​ไหน​​​​​​​​​​​​​​​และ​​​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​​​ออกมา​​​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​​​ตัววัด​​​​​​​​ ​​​​​​​​ยิ่ง​​​​​​​​ software ​​​​​​​​มี​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​ซับซ้อนมาก​​​​​​​​​​​​​​​เท่า​​​​​​​​​​​​​​​ไหร่​​​​​​​​ ​​​​​​​​เรายิ่ง​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​วัดมากยิ่งขึ้น

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ช่วงชีวิตของการบริหารโครงการ​​​​​​ (project life cycle) ​​​​​​กับ​​​​​การวรจรชิวิตการพัฒนาซอร์ฟแวร์​​​​​​ (software development life cycle) ​​​คือเรื่องเดียว​​​​​กัน​​​​​แต่คนละมุมมอง​​​!! project management ​​​เป็น​​​​​เรื่องของการบริหาร​​​​​และ​​​​​ควบคุมการพัฒนา​​​ software ​​​อีกที
​​​​​​​​
​​​​​​​การบริหารโครงการจำ​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​สนใจว่ามี​​​​​​​ process ​​​​​​​อะ​​​​​​​​​​​​​ไรบ้าง​​​​​​​​​​​​​และ​​​​​​​ process ​​​​​​​เหล่า​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​​​กัน​​​​​​​​​​​​​อย่างไร

Project Life Cycle Model
​​​​​​​​​​​​​​​​​​​​​​​​​​​​วงรอบชีวิตของโครงการ​​​​​​​ ​​​​​​​ซึ่ง​​​​​​​​​​​​​แบ่งออก​​​​​​​​​​​​​ได้​​​​​​​ 4 ​​​​​​​ขั้นตอนแต่ละขั้นตอน​​​​​​​​​​​​​จะ​​​​​​​​​​​​​มีกิจกรรม​​​​​​​ (Activity) , ​​​​​​​ทรัพยากร​​​​​​​ (Resource) {เงิน​​​​​​​ , ​​​​​​​คน​​​​​​​, ​​​​​​​เวลา​​​​​​​, ​​​​​​​สถานที่} ​​​​​​​มากน้อยแตกต่าง​​​​​​​​​​​​​กัน​​​​​​​​​​​​​ดังรูป​​​


Typical Activities by Phase
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​กิจกรรมที่ต้องทำในแต่ละขั้นตอนของโครงการ (คร่าวๆนะ)

Concept
  • รวบรวมข้อมูลทุกอย่างที่​​​​​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​​​​​กับ​​​​​​​​​​​​​​​โครงการ
  • กำ​​​​​​​​​​​​​​​หนด​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​การของโครงการนี้
  • กำ​​​​​​​​​​​​​​​หนด​​​​​​​​:
    • เป้าหมาย​​​​​​​​, ​​​​​​​​วัตถุประสงค์​​​​​​​​ ​​​​​​​​ซึ่ง​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​วัดผล​​​​​​​​​​​​​​​ได้
    • เงิน​​​​​​​​ ​​​​​​​​ดูว่ามี​​​​​​​​​​​​​​​เงินพอไหมที่​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​​​โครงการนี้
    • คนที่​​​​​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​​​​​กับ​​​​​​​​​​​​​​​โครงการนี้​​​​​​​​ ​​​​​​​​เช่น​​​​​​​​ programmer, user, project manager
    • ความ​​​​​​​​​​​​​​​เสี่ยงของโครงการ​​​​​​​​ ​​​​​​​​ซึ่ง​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​บอก​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ว่า​​​​​​​​​​​​​​​อยู่​​​​​​​​​​​​​​​ใน​​​​​​​​​​​​​​​ระดับไหน​​​​​​​​​​​​​​​และ​​​​​​​​​​​​​​​อย่างไร​​​​​​​​ ​​​​​​​​ต้อง​​​​​​​​​​​​​​​มีการวางแผนสำ​​​​​​​​​​​​​​​รองแต่​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​คุ้ม​​​​​​​​​​​​​​​ด้วย​​​​​​​​ ​​​​​​​​เพราะ​​​​​​​​​​​​​​​ว่า​​​​​​​​​​​​​​​แผนสำ​​​​​​​​​​​​​​​รองที่​​​​​​​​​​​​​​​เตรียม​​​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​​​มีค่า​​​​​​​​​​​​​​​ใช้​​​​​​​​​​​​​​​จ่ายที่​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​ใช้​​​​​​​​​​​​​​​อยู่​​​​​​​​​​​​​​​เช่น​​​​​​​​​​​​​​​กัน​​​​​​​​ ​​​​​​​​การวัดว่า​​​​​​​​​​​​​​​แผนสำ​​​​​​​​​​​​​​​รอง​​​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​​​คุ้ม​​​​​​​​​​​​​​​หรือ​​​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ดูว่า​​​​​​​​​​​​​​​แผนสำ​​​​​​​​​​​​​​​รอง​​​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​​​ลด​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​เสี่ยงลง​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ถึง​​​​​​​​​​​​​​​จุดไหน
    • กลยุทธ์
    • วางทีม​​​​​​​​​​​​​​​ไว้​​​​​​​​​​​​​​​คร่าวๆ
  • ประ​​​​​​​​​​​​​​​เมินทรัพยากร​​​​​​​​ (เงิน​​​​​​​​ , ​​​​​​​​คน​​​​​​​​, ​​​​​​​​เวลา​​​​​​​​, ​​​​​​​​สถานที่) ​​​​​​​​ไว้​​​​​​​​​​​​​​​คร่าวๆ
  • วางแผนสำ​​​​​​​​​​​​​​​รอง​​​​​​​​ ​​​​​​​​ซึ่ง​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​มี​​​​​​​​​​​​​​​เสมอ
  • เตรียมนำ​​​​​​​​​​​​​​​เสนอ​​​​​​​​ ​​​​​​​​และ​​​​​​​​​​​​​​​รออนุมัติ​​​​​​​​​​​​​​​เพื่อไปขั้นตอนถัดไป
Develop
  • กำ​​​​​​​​​​​​​​​หนดคนที่สำ​​​​​​​​​​​​​​​คัญต่อโครงการ​​​​​​​​ ​​​​​​​​ใครสำ​​​​​​​​​​​​​​​คัญต่อโครงการ​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​บอก​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​รู้ตัวเสมอ​​​​​​​​ ​​​​​​​​เพื่อ​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​รู้ตัว​​​​​​​​​​​​​​​อยู่​​​​​​​​​​​​​​​เสมอว่าตัวเองคือ​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​เสี่ยง​​​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​​​ปัจจัยต่อ​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​สำ​​​​​​​​​​​​​​​เร็จของโครงการ​​​​​​​​ ​​​​​​​​และ​​​​​​​​​​​​​​​เพื่อ​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​เรารู้ว่า​​​​​​​​​​​​​​​ความ​​​​​​​​​​​​​​​เสี่ยงคืออะ​​​​​​​​​​​​​​​ไรเช่น​​​​​​​​ programmer ​​​​​​​​คนไหนทำ​​​​​​​​​​​​​​​งาน​​​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ตามที่สั่งงาน​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​รีบบอก​​​​​​​​ ​​​​​​​​อย่าบอกวันสุดท้าย
  • เริ่มเรียนรู้ระบบ
  • กำ​​​​​​​​​​​​​​​หนด​​​​​​​​ baseline:
    • จุดสิ้นสุดของ​​​​​​​​ product
    • มาตราฐาน
    • ทรัยากร​​​​​​​​ (เงิน​​​​​​​​ , ​​​​​​​​คน​​​​​​​​, ​​​​​​​​เวลา​​​​​​​​, ​​​​​​​​สถานที่)
    • กิจกรรมที่​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​เกิดขึ้น​​​​​​​​ ​​​​​​​​เริ่มลงลึก​​​​​​​​​​​​​​​ถึง​​​​​​​​​​​​​​​รายละ​​​​​​​​​​​​​​​เอียด
  • กำ​​​​​​​​​​​​​​​หนด​​​​​​​​:
    • วิ​​​​​​​​​​​​​​​เคราะห์การเงินเช่นเรา​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​รู้ว่า​​​​​​​​​​​​​​​เมื่อทำ​​​​​​​​​​​​​​​โครงการนี้​​​​​​​​​​​​​​​เสร็จคุ้มไหม​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​เงิน​​​​​​​​​​​​​​​เท่า​​​​​​​​​​​​​​​ไหร่​​​​​​​​ ​​​​​​​​ถ้า​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ดีน่า​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​บอก​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ว่าจุดคุ้มทุน​​​​​​​​​​​​​​​อยู่​​​​​​​​​​​​​​​ที่ตรงไหน
    • ใน​​​​​​​​​​​​​​​โครงการ​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​มี​​​​​​​​ work / task / activity ​​​​​​​​อะ​​​​​​​​​​​​​​​ไรบ้าง​​​​​​​​ (งานที่​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​​​ทั้ง​​​​​​​​​​​​​​​หมด)
    • นโยบาย
  • ต้อง​​​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ทุกคน​​​​​​​​​​​​​​​ใน​​​​​​​​​​​​​​​ทีม​​​​​​​​ ​​​​​​​​มองไป​​​​​​​​​​​​​​​ใน​​​​​​​​​​​​​​​ทิศทางเดียว​​​​​​​​​​​​​​​กัน
  • ต้อง​​​​​​​​​​​​​​​บอก​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ว่า​​​​​​​​​​​​​​​เสร็จเมื่อไหร่​​​​​​​​ ​​​​​​​​และ​​​​​​​​​​​​​​​อย่างไร​​​​​​​​​​​​​​​ถึง​​​​​​​​​​​​​​​เรียกว่า​​​​​​​​​​​​​​​เสร็จ
​Execute
  • ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ลงรายละ​​​​​​​​​​​​​เอียดการประชุม​​​​​​​, ​​​​​​​ประชุมครั้งที่​​​​​​​​​​​​​เท่า​​​​​​​​​​​​​ไหร่​​​​​​​, ​​​​​​​หัวข้อที่ประชุม​​​​​​​ ​​​​​​​ฯลฯ
  • ต้อง​​​​​​​​​​​​​มีการประ​​​​​​​​​​​​​เมินเวลา​​​​​​​ ​​​​​​​รู้ว่าตอนนี้​​​​​​​​​​​​​โครงการ​​​​​​​​​​​​​อยู่​​​​​​​ ​​​​​​​ณ​​​​​​​ ​​​​​​​จุดไหน​​​​​​​, delay ​​​​​​​ได้​​​​​​​​​​​​​แค่​​​​​​​​​​​​​ไหน​​​​​​​, ​​​​​​​จำ​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​หรือ​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​ที่​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ต้อง​​​​​​​ delay (บางครั้งอาจประ​​​​​​​​​​​​​เมินเวลามากเกินไป​​​​​​​ ​​​​​​​และ​​​​​​​​​​​​​คนที่​​​​​​​​​​​​​เสียหายคือลูกค้า​​​​​​​​​​​​​เพราะ​​​​​​​​​​​​​งานทำ​​​​​​​​​​​​​เสร็จ​​​​​​​​​​​​​เร็ว​​​​​​​​​​​​​กว่า​​​​​​​​​​​​​เวลาที่กำ​​​​​​​​​​​​​หนด)
  • มีการลงรายละ​​​​​​​​​​​​​เอียดด้าน​​​​​​​ technology ​​​​​​​ที่​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ใช้
  • ลงมือทำ
  • สั่งการ​​​​​​​ / ​​​​​​​ดู​​​​​​​​​​​​​แล​​​​​​​ / ​​​​​​​คาดการณ์​​​​​​​ / ​​​​​​​ควบคุม​​​​​​​:
    • ​​​​​​​​​​​​​​​​​​​​​ขอบเขต​​​​​​​​​​​​​ทั้ง​​​​​​​​​​​​​หมด​​​​​​​ (ห้ามเกิน​​​​​​​ ​​​​​​​ห้ามขาด)
    • คุณภาพ
    • เวลา
    • งบประมาณ
  • ​​​​แก้ปัญหาที่​​​​​​​​​​​​​เกิดขึ้น​​​​​​​​​​​​​ได้
Finish
  • ​ Review software ​​​​​​​ที่พัฒนาขึ้น
  • ส่งมอบระบบ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​แก่ลูกค้า
  • ประ​​​​​​​​​​​​​เมินโครงการ
  • ส่งมอบเอกสาร
  • คืนทรัพยากร​​​​​​​ (คน) ​​​​​​​ที่ดึงมา​​​​​​​​​​​​​ใช้​​​​​​​ ​​​​​​​กลับไป
  • เตรียมรับงานโครงการ​​​​​​​​​​​​​ใหม่

Project Management Processes
​​​​​​​โครงการจริงๆ​​​​​​​ ​​​​​​​แล้ว​​​​​​​​​​​​​คือการรวมหลายๆ​​​​​​​ process ​​​​​​​การ​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​ได้​​​​​​​ process ​​​​​​​มา​​​​​​​​​​​​​เรา​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​รู้ว่า​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​อะ​​​​​​​​​​​​​ไร​​​​​​​ ​​​​​​​เพื่อ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​ได้​​​​​​​ output ​​​​​​​อะ​​​​​​​​​​​​​ไรออกมา​​​​​​​​​​​​​แล้ว​​​​​​​​​​​​​ให้​​​​​​​​​​​​​ย้อนนึกกลับไปเรื่อยๆ​​​​​​​ ​​​​​​​ก็​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​กระบรวนการพัฒนา​​​​​​​​​​​​​ทั้ง​​​​​​​​​​​​​ระบบ​​​​​​​ ​​​​​​​เช่นสเต็ก​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​ก็ต่อเมื่อ​​​​​​​ ​​​​​​​มี​​​​​​​​​​​​​เนื้อ​​​​​​​, ​​​​​​​ซอส​​​​​​​ ​​​​​​​จะ​​​​​​​​​​​​​มี​​​​​​​​​​​​​เนื้อ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​ก็​​​​​​​​​​​​​ต้อง​​​​​​​… ​​​​​​​คือการคิดย้อนกลับไปเรื่อยๆ​​​​​​​
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
​​​​​​​​​​​​​​​​​​​​​​​​​​การพัฒนา​​​​​​​ software ​​​​​​​จะ​​​​​​​​​​​​​เกี่ยวข้อง​​​​​​​​​​​​​กับ​​​​​​​ 3 ​​​​​​​อย่างดังนี้
  • คน​​​​​​ ​​​​​​เป็น​​​​​​​​​​​สิ่งที่ควบคุม​​​​​​​​​​​ไม่​​​​​​​​​​​ได้​​​​​​ (การดึงตัว​​​​​​​ ​​​​​​​ลาออก​​​​​​​ ​​​​​​​อุบัติ​​​​​​​​​​​​​เหตุ​​​​​​​ ​​​​​​​ความ​​​​​​​​​​​​​ขัดแย้งภาย​​​​​​​​​​​​​ใน​​​​​​​​​​​​​ต่างๆ​​​​​​​)
  • เทคโนโลยี​​ ​​เป็น​​​สิ่งที่ควบคุม​​​ไม่​​​ได้​​ ​​เพราะ​​​มีสิ่ง​​​ใหม่ๆ​​ ​​เกิดขึ้นตลอดเวลา​​ ​​​​​​​​​ไม่​​​​​​​​​​​​​​​​​มี​​​​​​​​​​​​​​​​​ไครู้ว่า​​​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​​​มี​​​​​​​​​ technology ​​​​​​​​​อะ​​​​​​​​​​​​​​​​​ไร​​​​​​​​​​​​​​​​​ใหม่ๆ​​​​​​​​​ ​​​​​​​​​ออกมา​​​​​​​​​​​​​​​​​หรือ​​​​​​​​​​​​​​​​​ไม่​​​ทำ​​​ได้​​​แค่การคาดเดา​​​เหตุการณ์
  • Process ​​​​​​​เป็น​​​สิ่งที่ควบคุม​​​ได้​​ ​​เป็น​​​​​​​​​​​​​ตัวกำ​​​​​​​​​​​​​หนดกระบรวนการพัฒนา​​​​​​​ software ​​​​​​​ต้อง​​​​​​​​​​​​​มีการเก็บ​​​​​​​ record ​​​​​​​ไว้​​​​​​​​​​​​​ตลอดเลา​​​​​​​​​​​​​เพื่อว่า​​​​​​​​​​​​​เมื่อมีคน​​​​​​​​​​​​​เข้า​​​​​​​​​​​​​มา​​​​​​​​​​​​​ช่วย​​​​​​​​​​​​​พัฒนา​​​​​​​ software ​​​​​​​ต่อ​​​​​​​​​​​​​จาก​​​​​​​​​​​​​คนเก่า​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​ต่อ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​เลย​​​​​​​ ​​​​​​​ใน​​​​​​​ CMMI ​​​​​​​มองที่​​​​​​​ process ​​​​​​​เป็น​​​​​​​​​​​​​หลัก​​​​​​​​​​​​​ด้วย​​​​​​​​​​​​​ความ​​​​​​​​​​​​​คิดที่ว่า​​​​​​​​​​​​​ถ้า​​​​​​​ process ​​​​​​​ดี​​​​​​​ software ​​​​​​​ย่อมดี​​​​​​​​​​​​​ด้วย​​
CMMI ​​​​​​​​​คือมาตรฐาน​​​ใน​​​การพัฒนา​​​​​​​​​ software ​​​​​​​​​ก้​​​เหมือนๆ​​​​​​​​​ ​​​​​​​​​กับ​​​​​​​​​ iso ​​​​​​​​​ตรงที่​​​​​​​​​ iso ​​​​​​​​​สนใจว่า​​​ใครทำ​​​อะ​​​ไรหน้าที่อะ​​​ไร​​​​​​​​​ ​​​​​​​​​แต่​​​ไม่​​​สนหรอกว่าทำ​​​ออกมา​​​แล้ว​​​จะ​​​ดี​​​หรือ​​​ไม่​​​​​​​​​ (สนใจที่​​​​​​​​​ process) cmmi ​​​​​​​​​ก็​​​เหมือน​​​กัน​​​ที่​​​เรา​​​จะ​​​ใช้​​​เอกสารต่างๆ​​​​​​​​​ ​​​​​​​​​เพื่อบอกรายละ​​​เอียดขั้นตอนต่างๆ​​​​​​​​​ ​​​​​​​​​เขียนถูก​​​หรือ​​​เปล่าก็​​​ไม่​​​รู้​​​แต่ว่า​​​ต้อง​​​มี​​​​​​​​​ CMMI ​​​​​​​​​บางทีก็ทำ​​​ให้​​​เรา​​​เข้า​​​ใจ​​​ได้​​​ว่า​​​เมื่อเราพัฒนา​​​​​​​​​ software ​​​​​​​​​ตามมาตรฐานแบบนี้​​​​​​​​​ ​​​​​​​​​ผลลัพธ์ที่​​​ได้​​​ก็​​​จะ​​​เป็น​​​แบบเดิมอย่างนี้ตลอดไป​​​ไม่​​​ว่า​​​จะ​​​เวอร์ชั่นไหน​​​​​​​​​ ​​​​​​​​​หรือ​​​​​​​​​ software ​​​​​​​​​อะ​​​ไร​​​​​​​​​ ​​​​​​​​​มาตรฐานที่​​​ใช้​​​บริหารต่างๆ​​​จะ​​​มอง​​​กัน​​​ที่​​​​​​​​​ process ​​​​​​​​​เป็น​​​หลัก
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
​เรื่องของการบริหารโครงการคือเรื่องของคน​ ​ไม่มีใครบอกได้ว่าเราจะใช้คนให้เหมาะกับงานได้อย่างไร​ ​ขึ้นอยู่กับเราอ่านคนออกแบบไหน​ ​ก็มีหลายทฤษฏีพูดถึงเรื่องของการใช้คนไว้ว่า​ ​คนทุกคนล้วนมีความต้องการ​​ ​​การจะใช้คนเราจำต้องตอบสนองความต้องการของเค้าให้ได้​​ ​​แต่เมื่อคนได้ถึงความต้องการ​​ ​​ณ​​ ​​จุดหนึ่งก็ต้องมีความต้องการของตัวเองสูงขึ้น​​ ​​เช่นต้องการการยอมรับ​​ ​​ต้องการความเข้าใจ​ ​​ผู้บริหารต้องมองความต้องการของแต่ละคน​ ​และให้ในสิ่งที่เค้าต้องการในจุดที่เหมาะสม​​ ​​เช่นตำแหน่งหน้าที่​​ ​​ความมีเกียรติ​​ ​​และสุดท้ายคือให้ทำในสิ่งที่เค้าต้องการอยากจะทำ​​ ​​หรือให้เค้าเข้ามาเป็นส่วนหนึ่งของบริษัท​ ​เช่นแกรมมี่​

อีกทฤษฏีนึงบอก​​​​​​​ถึง​​​​​​​ความ​​​​​​​ต้อง​​​​​​​การของคน​​​​ ​​​​มี​​​​ 3 ​​​​อย่าง
  • achieve คือทำ​​​​​​​งานใฝ่สัมฤทธิ​ ​​​ทำ​​​​​​​งาน​​​​​​​ให้​​​​​​​มีผลงาน​​​​ ​​​​ทำ​​​​​​​งาน​​​​​​​แล้ว​​​​​​​มีคนยกย่องงานที่ทำ
  • power ​​​​คือทำ​​​​​​​งาน​​​​​​​แล้ว​​​​​​​อยาก​​​​​​​ได้​​​​​​​อำ​​​​​​​นาจ
  • affection ​​​​คือทำ​​​​​​​งาน​​​​​​​แล้ว​​​​​​​อยาก​​​​​​​ได้​​​​​​​ความ​​​​​​​รัก​​​​ ​​​​ความ​​​​​​​เข้า​​​​​​​ใจ​​​​ ​​​​จาก​​​​​​​เพื่อนร่วมงาน
ยัง​​​​​​​มีอีกหลายทฤษฏีที่บอก​​​​​​​ถึง​​​​​​​การ​​​​​​​ใช้​​​​​​​คน​​​​ ​​​​ดัง​​​​​​​นั้น​​​​​​​เป็น​​​​​​​เรื่องสำ​​​​​​​คัญที่​​​​​​​ต้อง​​​​​​​มองคน​​​​​​​ให้​​​​​​​ออก​​​​ ​​​​เพื่อ​​​​​​​ใช้​​​​​​​คน​​​​​​​ให้​​​​​​​เป็น​​​​​​​ให้​​​​​​​เหมาะ​​​​​​​กับ​​​​​​​แต่ละบุคคล​​​​ ​​

Plan – Do – Check – Act Cycle
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​วางแผน ​​​​​​ – ​​​​​​ทำ​​​​​​ – ​​​​​​ตรวจสอบ​​​​​​ – ​​​​​​แก้สิ่งที่ผิดแล้วเริ่มวางแผนใหม่เป็นวนซ้ำไปเรื่อยๆ เพื่อให้ปรับปรุงแผนงานไปเรื่อยๆ เพื่อความถูกต้องที่มากขึ้น (ใช้เวลาสั้นลง)


Project Management Process Groups
จริงๆ​​​​​​​​ ​​​​​​​​แล้ว​​​​​​​​​​​​​​​การบริหารจัดการ​​​​​​​​ process ​​​​​​​​ของโครงการก็​​​​​​​​​​​​​​​เหมือนๆ​​​​​​​​ ​​​​​​​​กัน​​​​​​​​​​​​​​​ที่​​​​​​​​​​​​​​​ต้อง​​​​​​​​​​​​​​​เริ่มต้นก่อนว่า​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ได้​​​​​​​​ output ​​​​​​​​อะ​​​​​​​​​​​​​​​ไรออกมา​​​​​​​​ ​​​​​​​​จาก​​​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​​​วางแผนก่อนที่​​​​​​​​ ​​​​​​​​ลงมือทำ​​​​​​​​ ​​​​​​​​ตรงนี้​​​​​​​​​​​​​​​จะ​​​​​​​​​​​​​​​วน​​​​​​​​​​​​​​​ซ้ำ​​​​​​​​​​​​​​​ไปเรื่อยๆ​​​​​​​​ ​​​​​​​​เพื่อ​​​​​​​​​​​​​​​ให้​​​​​​​​​​​​​​​ได้​​​​​​​​​​​​​​​ผลลัพธ์ที่ดีที่สุดออกมา

Process Groups Interact in a Project

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​แต่ละช่วงของ​​​​​​ process ​​​​​​ก็​​​​​​​จะ​​​​​​​มีงาน​​​​​​ ​​​​​​และ​​​​​​​เวลาที่​​​​​​​แตกต่าง​​​​​​​กัน​​​​​​ ​​​​​​ตามรูป​​​​​


Key Competencies of a Successful Project Manager
​​​​​​​​​​​​​​​​​​โครงการ​​​​​​​​​​​​​จะ​​​​​​​​​​​​​ประสบ​​​​​​​​​​​​​ความ​​​​​​​​​​​​​สำ​​​​​​​​​​​​​เร็จ​​​​​​​​​​​​​ได้​​​​​​​​​​​​​นั้น​​​​​​​​​​​​​ PM ควรจะมีคุณสมบัติดังนี้
  • ​ มองการณ์​​​​​​​​​​​​​ไกล
  • ​เผชิญหน้า​​​​​​​​​​​​​กับ​​​​​​​​​​​​​อุปสรรค​​​​​​​ ​​​​​​​ซึ่ง​​​​​​​​​​​​​อาจ​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​สิ่งที่​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​
  • ​เคยเกิดขึ้นมาก่อน​​​​​​​ ​​​​​​​หรือ​​​​​​​​​​​​​เรื่องที่​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​คาดคิดมาก่อน
  • ​ ระบุ​​​​​​​​​​​​​เป้าหมาย​​​​​​​​​​​​​ให้​​​​​​​​​​​​​ชัดเจน​​​​​​​!!
  • ​ คิดสิ่ง​​​​​​​​​​​​​ใหม่ๆ​​​​​​​ ​​​​​​​และ​​​​​​​​​​​​​สร้างสรรค์
  • ​ ต้อง​​​​​​​​​​​​​แก้ปัญหาที่​​​​​​​​​​​​​เจอ​​​​​​​​​​​​​ได้
  • ​ คิดอย่าง​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​ระบบ​​​​​​​ ​​​​​​​และ​​​​​​​​​​​​​วางแผนจัดการทีม​​​​​​​​​​​​​ได้
  • ​พัฒนาทีม​​​​​​​​​​​​​ได้
  • ทำ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​เป็น​​​​​​​​​​​​​ไปตามเป้าหมายที่วาง​​​​​​​​​​​​​ไว้​​​​​​​​​​​​​เพื่อ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​หลง
  • ​ มีมาตราฐาน
  • ​ รู้ว่า​​​​​​​​​​​​​ใครทำ​​​​​​​​​​​​​อะ​​​​​​​​​​​​​ไร​​​​​​​ ​​​​​​​แจกจ่ายงาน​​​​​​​​​​​​​ได้​​​​​​​​​​​​​ถูกคนถูกงาน
  • ​ เข้า​​​​​​​​​​​​​ใจสมาชิก​​​​​​​​​​​​​ใน​​​​​​​​​​​​​ทีมมี​​​​​​​​​​​​​ความ​​​​​​​​​​​​​สามารถ​​​​​​​​​​​​​แค่​​​​​​​​​​​​​ไหน
Proverb สุภาษิต
  • ​​​​​​​​​​ การเพิ่มคน​​​​​​​​​​​​​เข้า​​​​​​​​​​​​​ไป​​​​​​​​​​​​​ใน​​​​​​​ project ​​​​​​​ที่ช้า​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​ทำ​​​​​​​​​​​​​ให้​​​​​​​​​​​​​เร็ว​​​​​​​​​​​​​ขึ้น (เพราะต้องเสียเวลา train งานให้พนักงานใหม่อีก)
  • เงิน​​​​​​​​​​​​​ไม่​​​​​​​​​​​​​ได้​​​​​​​​​​​​​แก้ปัญหาทุกอย่าง
  • ​​​​​​​เข้า​​​​​​​​​​​​​ใจกระบรวนการของ​​​​​​​ project ​​​​​​​รู้ว่าปัญหา​​​​​​​​​​​​​อยู่​​​​​​​​​​​​​ที่​​​​​​​ process ​​​​​​​ไหน
ของแถมๆ
Web application project management ลองเล่นกันดูนะเผื่อชอบ ใช้แล้วเป็นไงมาบอกกันบ้างนะ

Seam 2.0.2 GA ออกแล้ว !!

เราพึงประกาศออกไปว่า Seam 2.0.2 ถึงที่หมายแล้ว การออกมาในครั้งนี้ทำมีการทำ Bugfix มากกว่า 150 ตัวใน Seam 2 (ที่ออกไปในเดือนพฤศจิกายน) และถูกดาวโหลดไปมากกว่า 70,000 ตั้งแต่ออกมา Seam 2 ดูท่าทางมีแนวโน้มที่ดี

เอกสารที่ถูกพัฒนาและรวมรูปลักษณ์ที่ดี ความรู้สึกดี และเนื้อหาที่ใส่บทการทำงานกับ JBoss Tool ด้วยโดยทำให้ Tutorial นั้นเป็นสากลสำหรับ App ของคุณรวมถึงการใช่ Seam สำหรับหลายๆ Application Container ด้วย

หน้าแรกของ Seam Framework

หน้าดาวโหลด

Tuesday 13 May 2008

Determyne ออก Open Source J2EE Performance Monitoring Tool

Determyne Inc. ได้ประกาศเทคโนโลยี Open Source สำหรับการดูแลประสิทธิภาพสำหรับ J2EE Application ข้างใน Apps จะเป็นแบบ End to End transaction โดยระบบรายงานได้ว่ายังสามารถใช้งานได้หรือไม่อย่างอัตโนมัติ สำหรับ J2EE Apps.

ในความแตงต่างของจุดประสงค์ของการเก็บและแสดงผลสำหรับหลายๆ System Component ภายใน Apps ตัวนี้ให้ความสำคัญของการดูแล Applications จาก Transaction มากกว่า ด้วยการที่ไม่ต้อง Config เลยแม้แต่น้อยและค่าใช้จ่ายที่น้อยนิด แถมซ้ำ Apps ตัวนี้ยังมองการกินทรัพยากรและเวลา สำหรับแต่ละ Transaction ได้ไม่ว่าจะเป็นจาก HTTP , J2EE Container หรือ Database Layers ของโครงสร้างพื้นฐานของระบบ และยังสามารถวิเคราะห์เป็นจุดๆได้อีกด้วย โดยเจ้านี้เป็น Open Source อย่างสมบูรณ์และฟรีโดยอยู่ภายใต้ LGPL open source license.

ลิงค์ต่างๆ
Sourceforge project page :http://sourceforge.net/projects/insideapps
demo:http://76.191.185.136/iaconsole
papers :http://www.determyne.com/white_papers.html
datasheet:http://www.determyne.com/images/insideApps_datasheet.pdf
feedback:http://sourceforge.net/forum/?group_id=225534

สำหรับเนื้อหาเพิ่มเติมเชิญที่ http://www.determyne.com/

Thursday 8 May 2008

ประกาศจากทาง Oracle

เรายินดีที่จะประกาศว่าทาง Oracle นั้นได้รวบกิจการ BEA Systems, Inc. โดยสมบูรณ์แล้ว และตอนนี้ BEA ได้มาเสริมกำลังทัพของ Oracle ทั้งหมด ด้วยข่าวนี้ เราอยากจะพูดซ้ำถึงความรับผิดชอบของเราที่มีต่อคุณและลูกค้าของคุณ ในการลงทุนในสินค้า Oracle Fusion Middleware

โดยหลักแล้วเราให้ความสนใจที่ความพึงพอใจของลูกค้าและหุ้นส่วน 100% เรามีแผนที่จะรวมบริษัทต่างๆของเราอย่างดีที่สุดเพื่อคุณและลูกค้าของคุณ และตอนนี้เราได้เพิ่มมูลค่าในทันที ความรับผิดชอบเราต่อ Middleware และความสำเร็จในลูกค้า Middleware ของเราคือผลสะท้อนอย่างคลอมคลุมในตัวสินค้าของเรา โดยการเลือกสินค้าที่มีมาตรฐานเพื่อให้ลูกค้าของเรามีความสามารถที่จะ แข่งขัน , ปลอดภัย , ดัดแปลง และขยายธุรกิจไปกับโลกเติบโตอย่างรวดเร็วไปกับสินค้า Middleware

ด้วยกันนี้ Oracle และ BEA ขอนำเสนอแผนที่สมบูรณ์ , โดยสิ่งที่ดีที่สุดในประวัติของ Middleware นั้นคือ Java Application Servers , Transaction Processing Monitors , SOA , Business Process Management , User Interaction and Web 2.0 , Identity Management , Business Intelligence และ Enterprise Content Management

เราได้สร้างช่องทางต่างๆสำหรับคุณและลูกค้าของคุณที่จะติดต่อสอบถามและนำเสนอผลตอบรับ คุณจะได้รับการเชิญเข้ารวม Webcast สำหรับลูกค้าและหุ้นส่วน Oracle และ BEA เราส่งเสริมให้คุณเข้าไปชม Oracle PartnerNetwork (OPN) ได้ที่ partner.oracle.com และดูการสื่อสารจาก OPN เพื่อที่จะรับรู้ข่าวสารปัจจุบันเกี่ยวกับการเพิ่มเติมโอกาสด้วย Oracle's Middleware และข้อเพิ่มเติมเราจะมีงาน Oracle OpenWorld ในช่วง 21-25 กันยายนนี้ที่ San Francisco , เราวางแผนที่จะนำเสนอ Oracle Fusion Middleware ในหลายๆช่วงนั้นรวมถึงเนื้อหาของ BEA ด้วย ต้องการข้อมูลเพิ่มเติมำสำหรับแผนที่เราได้รวมไว้ สามารถเข้าไปดู "คำถามที่ลูกค้าถามบ่อยๆ" ได้ที่ oracle.com/bea

ขอบคุณที่สนับสนุนตลอดมา จากรองประธาน Judson AlthoffGroup , Worldwide Alliances and ChannelsOracle

Wednesday 7 May 2008

SqlSheet 0.1.0 ค้นหาข้อมูลใน Excel ด้วย SQL

SqlSheet คือ JDBC Driver ซึ่งยอมให้คุณทำงานกับ Excel ด้วยภาษา SQL ได้โดยมีคุณสมบัติหลักๆดังนี้

  • Java ล้วนๆ (ไม่ต้องมี native component)
  • เร็ว (การทำงานเกิดขึ้นที่ spreadsheet โดยตรงไม่ต้องไปพึง memory ของ database)
  • คำสั่งอ่านและเขียน
  • สนับสนุน PreparedStatement

ตอนนี้ถ้าคุณต้องการจัดการกับ Spreadsheets เฉยๆแค่ใช้ Apache's POI มันเจ๋งมาก แต่ทำไม SqlSheet ถึงมีประโยชน์กว่า ? หลักๆแล้วการเข้าไปจัดการกับ Spreadsheets ภายใต้เครื่องมืออื่นๆนั้นจะใช้ database-oriented ดังนั้น SqlSheet จะจัดการให้คุณเพียงแค่คุณให้ URL ของ jdbc:xls แล้วก็ทำอะไรต่างๆที่คุณต้องการได้ทันที

สรุปก็คือถ้าต้องการส่ง Data จาก Excel ไปยังเครื่องมืออื่นๆที่ใช้ Database-Oriented แล้ว SqlSheet จะทำให้เรื่องพวกนี้เป็นเรื่องง่ายเพราะไม่ใช่เพียงแต่จัดการ Data ใน Excel ได้อย่างเดียวยังส่งข้อมูลเข้าไปยังเครื่องมือที่ใช้ Database-Oriented ได้อีกด้วย คุณสามารถ Download SqlSheet 0.1.0 ได้เลยครับ

Monday 5 May 2008

มองเชิงเปรียบเทียบ: การสร้างสะพานกับการบริหารจัดการ software

สวัสดีครับ​​ ​​หายไปนานมาก​​​กับ​​ blog ​​นี้​​​เหตุ​​​เพราะต้อง​​​ไปทำงานที่​​ไซต์ลูกค้าครับ​​​กับ​​​คุณ​​ Mr.Invert Prahs (ชื่อนี้มันพิมพ์ยากพิลึก​​​เพราะ​​​ผม​​​ต้อง​​​คิดมุมกลับทุกครั้งที่พิมพ์ชื่อนี้​​ 555) ​​ช่วงแรกก็ชิว ๆ​​ ​​แต่หลัง ๆ​​ ​​ระทึกครับ​​ ​​เปลี่ยน​​ requirement ​​กัน​​​แทบวันต่อวัน​​ ​​เอา​​​เป็น​​​ว่า​​​ไม่​​​พูดเรื่องงานดีกว่า​​​ เดี๋ยวคนที่​​​โน้นแอบ​​​เข้า​​​มาอ่าน​​ 555 ​​แต่สิ่งที่​​​ได้​​​เป็น​​​ประสบการณ์ต่าง ๆ​​ ​​ที่มีค่า​​​เป็น​​​การเปิดมุมมอง​​​อื่นๆ​​ ​ด้วย​​​ครับ​​

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ช่วงนี้กำ​ลังเปิดภาคเรียน "ป.โท" พอดี​ ​เลยคิดว่าอยากมา​แชร์อะ​ไรที่​อยู่​ใน​ห้องเรียนซักหน่อยหวังว่า​จะ​ไม่​เบื่อ​กัน​นะครับ​ ​เรา​จึง​จะ​เปิดตัว​ tag ​ใหม่​กัน​ด้วย​ [​lecture notes]​ ​ทักทาย​​​กัน​​​เล็ก​​​น้อยพอประมาณนะครับ​เข้า​เรื่อง​กัน​เลย

​​​​​​​​​​​​​​บท​ความ​แรกหลัง​จาก​หายไปนานผม​จะ​เขียนเรื่อง​ ​การบริหารจัดการ​ software ​ก็​เหมือน​กับ​การสร้างสะพาน
บางทีการพัฒนา​ software ​ก็​เหมือน​กับ​การที่​เรา​จะ​ต้อง​สร้างสะพานขึ้นมา​ ​เหมือนตรงที่​เรา​ไม่​รู้หรอกว่าข้างหน้า​จะ​ต้อง​เจอ​กับ​อะ​ไรบ้าง​ ​โดย​อาจารย์​จะ​มีกฏ​ให้​ดังนี้
​​​​​​​- ให้จับกลุ่ม กลุ่มละ 5 คนสุ่มจับ
- ​ให้​ 1 ​คน​เป็น​ลูกค้า​ ​โดย​เลือก​จาก​คนที่มีประสบการณ์การทำ​งานเยอะสุด​ ​(​จะ​คอยถาม​ถึง​ความ​คืบหน้า​เรื่อยๆ และตรวจสอบคุณภาพของงานที่ทำออกมา​)
- ​ให้​ 1 ​คน​ใน​กลุ่ม​เป็น​ PM ​เพื่อไปสรุปหน้าชั้น​ ​(​แล้ว​สุดท้ายลูกค้า​จะ​ไปสรุปปิดท้ายอีกที)
- model ​กระดาษที่​ใช้​ประกอบ​กัน​เป็น​สะพานที่​ยัง​ไม่​ตัด​ 4-5 ​แผ่น​
- ​กรรไกร​ ​และ​กาว​ ​อย่างละ​ 1 ​ต่อ​ 1 ​กลุ่ม
- ​ให้​แต่ละกลุ่มประ​เมินเวลาที่​จะ​ทำ​เสร็จ

จาก​นั้น​ก็ลงมือทำ​ครับ​ ​ถ้า​มองอย่าง​ไม่​คิดอะ​ไรนี่ก็​เกมส์ต่อโมเดลกระดาษสะพานสนุก ๆ​ ​อันนึงนี่​เอง​ ​แต่บรรยากาศทำ​ให้​ผม​ต้อง​คิดเปรียบเทียบ​ถึง​ขั้นตอนการพัฒนา​ software ​ตลอด​ ​และ​คิดเตรียมคำ​ตอบ​ให้​กับ​ user ​ตลอดเวลา​ ​แต่ละคนมีการแบ่งหน้าที่​กัน​อย่างชัดเจน​ ​แล้ว​ระหว่างที่​เริ่มลงมือทำ​ก็มีการสับคน​ใน​กลุ่มที่​ไม่​ใช่​ PM ​ออกไปแลกเปลี่ยน​กับ​อีกกลุ่มนึง​ ​(​ใน​กรณีสร้างสะพานนี้งาน​ไม่​ซับซ้อนมาก​จึง​สามารถ​เริ่มงานต่อ​จาก​คนก่อน​ได้​เลย​ ​แต่​ถ้า​งานซับซ้อนมากคง​ต้อง​เสียเวลา​ train ​งาน​กัน​อีกเยอะ) ​เวลาที่ทีมเราประ​เมิน​ไว้​คือ​ 20 ​นาที​ ​เพราะ​เราประ​เมิน​กัน​เอา​ไว้​ว่าช่วงเวลาตัดกระดาษ​ไม่​นาน​เท่า​ไหร่​ ​ที่นานคือตอนประกอบรวมคร่าวๆ​น่า​จะ​ซัก​ 10 ​นาที​ ​แต่​เรากำ​หนดเวลา​เกิน​ไว้​เล็ก​น้อย​เป็น​ 20 ​นาที​ ...

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​แต่พอทำเข้าจริงๆปรากฏว่าใช้เวลาไปถึง 32 นาที เพราะเวลาที่เสียไปนานที่จริงคือช่วงรอกาวแห้ง เพราะตอนที่ประกอบกันนั้น กระดาษที่ต่อไม่สามารถประกบกันกับอีกฝั่งได้พอดีมีความคลาดเคลื่อนกันเล็กน้อย ทำให้โครงสร้างยังอ่อนแออยู่จึงต้องค่อย ๆ ปรับกันทีละบล็อก (ซึ่งตอนที่ประเมินไม่ได้มองถึงจุดนี้อย่างละเอียดถี่ถ้วนดีนัก) จากนั้นได้มีการเสริมความแข็งแรงของสะพาน ก็เพิ่มกระดาษแผ่นยาวมาแปะกาวข้างใต้เพื่อยึดติดบล็อกทั้งหมดเข้าด้วยกัน (ส่วนนี้แก้ปัญหาเฉพาะหน้า) ระหว่างการสร้างสะพานคนที่ทำหน้าที่แต่ละส่วนจะทำงานในส่วนของตัวเองเร็วขึ้นด้วย (ความชำนาญมากขึ้น) และสิ่งที่ขาดไม่ได้คือความเป็นทีม ทำให้สะพานออกมาเสร็จสมบูรณ์ ^^ หลังจากทำเสร็จเรียบร้อยมีการทดสอบความแข็งแรงของสะพานกันเล็กน้อย - -'

จากการทำในครั้งนี้เสมือนจับโปรเจคกันจริงๆ เริ่มกันตั้งแต่ มีการรับ requirement ลูกค้า, ตั้งทีม, แบ่งความรับผิดชอบกันในแต่ละส่วน, วิเคราะห์ว่าจะทำอย่างไรถึงออกมาเร็วและถูกต้องตามที่ลูกค้าต้องการ, ลงมือพัฒนา, แก้ไขปัญหาเฉพาะหน้า, มีการ track งานตลอด, ทดสอบ, ตรวจคุณภาพของงาน, ส่งมอบ

สรุปหลัง​จาก​บทเรียนนี้
- ​การทำ​งานเราควรมีการแบ่งหน้าที่​กัน​อย่างชัดเจน​ ​เลือกคน​ให้​ถูกงาน​ด้วย
- ​ทีม​เป็น​สิ่งสำ​คัญที่สุด​ ​ฟัง​ความ​คิดเห็น​ใน​ทีม​ ​และ​ช่วย​กัน​อย่างเต็มที่​ (อย่าอู้งาน​ ​เดี๋ยวโดนแบน)
- ​เมื่อมีปัญหาที่​เกิดขึ้นเฉพาะหน้าขึ้น​ ​ต้อง​ใจเย็น​และ​มีสติ
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​- การทำในแต่ละส่วนเราควรตั้งใจและทำมันให้ดีที่สุด เพราะองค์ประกอบต่างๆล้วนแต่มีความสำคัญด้วยกันทั้งสิ้น และบางครั้งมันไม่มีโอกาสทำครั้งที่ 2 (เช่นตอนตัดกระดาษตัดพลาดไม่ได้เพราะไม่มีสำรอง)
- ​พยายามคิด​ถึง​เหตุการณ์ต่างๆ​ ​ที่มี​โอกาสเกิดขึ้น​ให้​มากที่สุด​ ​และ​เตรียมพร้อมรับ​กับ​เหตุการณ์ข้างหน้า​นั้น (อ่านเกมส์ให้ออก)
​​​​- ควรมีแผนสำรอง 1, 2, 3
​​- เข้าใจเรื่องการต่อโมเดลสะพานมากขึ้นเยอะ
​​​​​​​- ก่อนออกไปพูดสรุปหน้าชั้นเราควร list เฉพาะหัวข้อที่เป็น key จริงๆ

Security Testing ตอนที่ 2

ห่างหายไปจากตอนที่หนึ่งนานมากๆ เรามาพบกันในตอนที่สองเลยครับ

Broken Access Control

คือ การที่เราสามารถเข้าไปใช้สิทธิของผู้อื่นได้ โดยเพียงแค่รู้ url ของเค้า เช่น สมมุติเรา login โดยใช้ role user ซึ่งจะไม่เห็น link สำหรับสร้าง user แต่เราไปรู้ว่าใช้ url อะไรใจการเข้า module นั้น เราก็จะสามารถเข้าไปจัดการ user โดยใช้แค่ role user
วิธีทดสอบ
ให้เปิด IE 2 หน้าต่าง โดยหน้าต่างแรก login เป็น user ธรรมดา อีกหน้าต่างหนึ่ง login เป็น user ที่มีสิทธิสูงกว่าเช่น admin จากนั้น copy link ใน module ซึ่งมีใน admin แต่ไม่มีใน user มารันใน หน้าจอของ user ถ้าสามารถเข้าได้ แสดงว่าเกิด Broken Access control
วิธีแก้ไข
ควรจะเช็คสิทธิของผู้ใช้ในทุกหน้าจอ ไม่ใช่แค่ซ่อน url เอาไว้


Error Handling

ระบบต้องไม่เปิดเผยข้อมูล Technical Error Code ที่หน้าเว็บให้ client เห็นควรมีการดักจับ แล้ว แสดงเป็นข้อความเฉพาะที่จำเป็นเพื่อสื่อให้ผู้ใช้เข้าใจ
วิธีทดสอบ
ทดสอบทำให้เกิด error ขึ้นใน web application เพื่อดูว่าจะแสดงข้อความ error แบบใด
วิธีแก้ไข
1. ควรทำหน้า error กลางที่ดักจับ error แล้วแสดงเป็นข้อความที่ผู้ใช้เข้าใจ โดยไม่แสดง error code ใดๆ ที่หน้าจอ แต่อาจจะเขียนลงไฟล์แทน
2. สำหรับ .NET เมื่อนำขึ้น production ควรปิดข้อความ error โดยสร้าง page มารับ error แล้วแก้ web.config เป็นดังด้านล่าง

defaultRedirect= “[ชื่อerror page].aspx”/>



Web server configuration

ควรจะป้องกันเรื่อง Directory traversal คือ ไม่ควรให้สามารถเข้าเว็บไปยัง directory อื่นๆ ได้
วิธีทดสอบ
ทดลองเข้าเว็บโดยระบุ url จนถึงแค่ชื่อ directory ไม่ระบุชื่อไฟล์ web page หรือ ชื่อ action path เช่น แทนที่จะเข้า ด้วย url แบบนี้ http://www.test.com/document/index.html ก็เข้าโดยใช้ แบบนี้แทน http://www.test.com.document/ เพื่อดูว่าสามารถ browse ไฟล์ใน directory นั้นได้หรือเปล่า
วิธีแก้ไข
1. สำหรับ .NET นั้นใน IIS จะมี option ให้ set ได้ว่าจะให้ directory สามารถ browse ผ่านเว็บได้หรือไม่ ดังรูป ซึ่งเราไม่ควรติ๊กเลือกให้มัน สามารถ browse ได้
2. สำหรับ SunOne สามารถ Disable Directory browsing ได้โดยเข้าไปที่ Web Admin จากนั้นเลือก manage web ที่ต้องการ แล้วเลือก tab Virtual Server Class-> แล้วคลิ๊ก ปุ่ม Manage จากนั้นคลิ๊ก tab Content Mgmt->Document Preferences-> แล้วเลือก Directory Indexing เป็น None โดยต้องใส่ชื่อไฟล์ในช่อง “File to use for error response when indexing is none:” ด้วย

Encryption

- ระบบต้องเข้ารหัสข้อมูลที่เป็นความลับ เช่น รหัสผ่าน, Connection Strings และ ข้อมูลอยู่ในระดับ Confidential หรือ Secret
- Salted Hash Techniques – ถ้าต้องมีการส่งผ่าน password หรือข้อมูลสำคัญจากระบบหนึ่งไปยังอีกระบบหนึ่งนอกจากการ encrypt ข้อมูลแล้ว ควรเพิ่มอักขระพิเศษใส่เข้าไป โดยตกลงกันในตอนส่งและตอนรับ
วิธีทดสอบ
Password ใน database ต้องถูกเข้ารหัสในแบบที่อ่านไม่เข้าใจ
วิธีแก้ไข
- ควรเข้ารหัส password
- ใช้ salt hash techniques กับ password ที่ส่งผ่านข้ามระบบ

Sunday 4 May 2008

NetBeans IDE 6.1 ออกแล้ว !

NetBeans IDE 6.1 ออกมากับหลาย Features ใหม่ๆและการปรับปรุงหลายอย่างให้ดีขึ้นอย่าง เช่น Rich Javascript Editing features , สนับสนุนการใช้กับ Spring Web Framework , รวม MySQL ให้ใกล้ชิดยิ่งขึ้น และรวมถึงพัฒนาให้ดีขึ้นในการใช้งานร่วมกันของ Libraries ต่างๆระหว่าง Project ที่ต้องใช้งาน แล้วเราได้สนับสนุน Ruby/JRuby พร้อม Editor ตัวใหม่ , ตัดจัดการ Ruby Platform , Debug ได้เร็วสนับสนุนให้กับ JRuby และอื่นๆอีกมากมาย

จากความต้องการที่เป็นที่ต้องการ , Bean Pattern และ JSF CRUD ยุคใหม่ที่เราขาดหายไปใน version 6.0 ได้กลับมาแล้ว ในส่วนเพิ่มเติมการออก version ก่อนหน้านี้ของ Module ใหม่ๆอย่างเช่น ClearCase Support จะมาอยู่ในรูปแบบของ Plugin

การออกมาในครั้งนี้ยังพัฒนาประสิทธิภาพมากขึ้น โดยเฉพาะ Startup ที่เร็วขึ้น (มากถึง 40%) กิน Memory น้อยลงและการตอบสนองที่ดีขึ้นในการทำ Project ใหญ่ๆ สุดท้ายมาดู Feature เด่นๆที่เข้ามาใน Version นี้กัน

Feature เด่น :

  • สนับสนุน Javascript
    • Highlight คำต่างๆใน Javascript
    • การวิเคราะห์การพิมพ์และโค๊ดสำเร็จ
    • แก้ไขด่วนและตรวจสอบความหมาย
    • สนับสนุนการ Refactor
  • ประสิทธิภาพ
    • เร็วขึ้นถึง 40%
    • กิน memory น้อยลง
    • การทำ Code Completion เร็วขึ้น
  • สนับสนุนSpring Framework
    • นำ Spring Framework 2.5 library เข้ามา
    • มี Wizard สำหรับการแก้ไข XML configuration และ Spring Web MVC Controllers
    • Spring Web MVC Framework สนับสนุนใน Web Project
  • การหา Database ใน MySQL
    • ลงทะเบียน MySQL servers
    • ดู , สร้าง , ลบ database ได้
    • ง่ายที่จะเรียกเครื่องมือจัดการของ MySQL
  • สนับสนุน Java Beans
    • Bean Pattern ใน Navigator
    • สร้าง Bean Property ได้
    • BeanInfo Editor
  • ตัวสร้าง JSF CRUD
  • สนับสนุน Ruby / JRuby
  • Javadoc Code Completion
  • สนับสนุน Web API ที่โด่งดัง
    • สร้าง Mashup อย่างง่ายดาย
    • สนับสนุนลากวางใน POJO , Servlets , JSP และ RESTful web service และ NetBean IDE สร้างโค๊ดในการเข้าถึง Service ให้เอง
    • สนับสนุน Web API เช่น Google , Facebook , Yahoo , YouTube
  • สนับ Web Service แบบ RESTful
  • การทำ Sharing Project
  • มี Plugin ใหม่ๆ
    • ClearCase Version Control
    • สนับสนุน AXIS
    • สนับสนุน SOAP UI
    • สนับสนุน Hibernate Framework
  • Java Mobility

สามารถ Download NetBeans เวอร์ชั่น 6.1 Final กันได้เลยที่นี้ครับ Download

Friday 2 May 2008

JavaRebel 1.1 ออกแล้ว

Java 6 ออกแล้วสำหรับ Intel Macs 64 bit

ย้อนกลับไปเมื่อปี 2007 เมื่อ Apple ปล่อย Mac OS X 10.5 Leopard ออกมา มีเสียงวิพากษ์วิจารณ์มากมายเกี่ยวกับการขาดการสนับสนุน Java 6 โดย Leopard ถูกส่งไปด้วย Java version เก่าคือ Java 1.5 แล้ว 1.6 ได้ออกมาได้เกือบปีแล้วโดยทาง Sun ได้ออก Java 1.6 สำหรับ Linux และ Windows แต่ไม่ได้ทำสหรับ Mac OS X ตั้งแต่ Apple ยืนยันจะพัฒนา Java ในแบบของตัวเองให้สอดคล้องกับทาง Sun

แล้วตอนนี้ 6 เดือนให้หลัง , Mac Java Programmers สามารถปลื้มกับผลงานอันนี้ Apple ได้ออก Java 6 สำหรับ Leopard แต่เรารู้ดีว่ามันสามารถทำงานได้บน Intel 64 bit ของ Apple OS เท่านั้น ดังนั้นคนที่ใช้ Intel Macs หรือ PowerPC ก่อนหน้านี้จะไม่ได้รับประโยชน์ใดๆทั้งสิ้น ของการพัฒนาครั้งนี้ แม้แต่คุณมี G5 Quad ก็ไม่มี Java 6 สำหรับคุณ



Java สำหรับ Mac OS X 10.5 Update 1 ได้เพิ่ม Java SE 6 เวอร์ชั่น 1.6.0_05 ไปใน Mac แล้วการอัพเดตครั้งนี้จะไม่เป็นการทับกับการ Install J2SE 5.0 หรือเปลี่ยนแปลง version ของ Java


ปล. นั้นหมายความว่า Version ใหม่นี้ไม่ได้ออกจากทาง Sun แต่ออกโดยผลงานของชาว Mac Java Programmers นั้นเอง