Archive for December, 2009

การบวกวันที่ เดือน ปี ใน javaScript

Note ไว้กันลืมเนื่องจากทำมานานแล้ว และคิดว่ายังคงใช้งานได้อยู่ เป็นวิํธีการบวกวันที่ เดือน และ ปี
การบวกวัน

/**
 * Add day to input date 
 * dateStr format must be month/day/year
 */
function calendarAddDay(dateStr, day){  
	//Create date object from input date
    var date = new Date(dateStr);		
	//Add day
    date.setDate(date.getDate()+day);  
   
    return date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear();
} 

การบวกเดือน

/**
 * Add month to input date 
 * dateStr format must be month/day/year
 */
function calendarAddMonth(dateStr, month){  
	//Create date object from input date
    var date = new Date(dateStr);		
	//Add month
    date.setMonth(date.getMonth()+month);  
   
    return date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear();
}  

การบวกปี

/**
 * Add year to input date 
 * dateStr format must be month/day/year
 */
function calendarAddYear(dateStr, year){  
	//Create date object from input date
    var date = new Date(dateStr);		
	//Add year
    date.setYear(date.getFullYear()+year);  
   
    return date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear();
}  

Format Currency ด้วย JavaScript

เป็นตัวอย่าง Code การแปลงค่าตัวเลข ให้อยู่ในรูปแบบจำนวนเงิน ที่คั่นด้วย comma

function formatCurrency(val){     
	if(val == "" || val == null || val == "NULL") return val;
	
	//Split Decimals
    var arrs = val.toString().split("."); 	
	//Split data and reverse
	var revs = arrs[0].split("").reverse().join("");    	
	var len = revs.length;
    var tmp = "";  
    for(i = 0; i < len; i++){		
        if(i >0 && (i%3) == 0){  
            tmp+=","+revs.charAt(i);         
        }else{  
            tmp += revs.charAt(i);
        }  
    }  
	
	//Split data and reverse back
	tmp = tmp.split("").reverse().join("");	
	//Check Decimals
    if(arrs.length > 1 && arrs[1] != undefined){  
        tmp += "."+ arrs[1];  
    }  
    return tmp;  
} 

หลังจากเขียนและใช้มานาน เพิ่งรู้ว่ามี Library ที่คนอื่นเขียนไว้แล้วและใช้ประโยชน์ได้อย่างมากที่
JavaScript Number Format v1.5.4

Random row from a database

สืบเนื่องจากงานเก่าที่ผมเคยทำนั้น มีการ “สุ่ม” ข้อมูลออกมาโดยต้องการข้อมูลประมาณ 10 รายการจากทั้งหมด 100 รายการ คุณหัวหน้าเลยให้หาวิธีสุ่มข้อมูลให้ ซึ่งผมหาคิดได้ 2 ข้อดังนี้ เลยมาขอ Note ไว้กันลืม
1. การสุ่มโดยใช้ความสามารถของตัว Database เองวิธีนี้ผมคิดว่าน่าจะดีเพราะเมื่อทำงานใน Engine ของฐานข้อมูลเองนั้นย่อมให้ผลที่ดีกว่า เร็วกว่า แน่นอน (คิดเองนะครับ) ซึ่งจากการทดลองหาข้อมูลการ สุ่มของฐานข้อมูล Oracle ก็ไปเจอรูปแบบการสุ่มของฐานข้อมูลต่างๆ ดังนี้ครับ
MySQL

SELECT column FROM table
ORDER BY RAND()
LIMIT 1

PostgreSQL

SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1

Microsoft SQL Server

SELECT TOP 1 column FROM table
ORDER BY NEWID()

IBM DB2

SELECT column, RAND() as IDX 
FROM table 
ORDER BY IDX FETCH FIRST 1 ROWS ONLY

Oracle

SELECT column FROM( 
    SELECT column FROM table
   ORDER BY dbms_random.value 
)WHERE rownum = 1

2. การสุ่มโดยไม่ใช้ความสามารถของ Database ครับ วิธีนี้ผมคิดเอง ไม่รู้มันจะดีแค่ไหน แต่ก็เคยใช้วิธีนี้มาก่อนแล้วครับ ใครมีวิธีการที่ดีกว่านี้ก็แนะนำได้ครับ วิธีนี้เป็นดังนี้ครับ
ขั้นตอนที่ 1 ไป Query เอา Primary key ของข้อมูลที่ต้องการ สุ่มขึ้นมาก่อน จากนั้นก็จัดเก็บข้อมูลนั้นใน Array
ขั้นตอนที่ 2 นำข้อมูลใน Array ที่ได้จากข้อหนึ่งไปทำการ สลับตำแหน่งก่อน (Shuffle) แล้วก็ตัดเอาเฉพาะจำนวนที่ต้องการ ซึ่งความสามารถนี้น่าจะมีในทุกภาษานะ
ขั้นตอนที่ 3 เอาข้อมูลจากข้อ 2 ไป Query ข้อมูลจากฐานข้อมูลมาใหม่ครับ

จากการเสนอวิธีที่ผมคิดเองได้ดังกล่าวสองข้อ ท่านหัวหน้าบอกไม่ต้องคิดมาก เอาข้อแรกเลย เพราะข้อมูลเรามีไม่เยอะมาก ถ้าเยอะมากๆ นี่แบบแรกก็ไม่ไหว Query จะช้ามาก
หมายเหตุ :
ใครผ่านไปมา มีวิธีการที่ดีกว่านี้ก็แชร์ๆ กันได้ครับ
อ้างอิง (Credit)
SQL to Select a random row from a database table
ปัญหาเขียนโปรแกรมตอนแปด, แสดงค่าสุ่มตัวอย่างระหว่าง 1 ถึง 100

Tutorial : PHP+MySQL+UTF-8

ปัญหาการทำเว็บโดยใช้ฐานข้อมูลที่เป็น Encode เป็น UFT-8 ยังคงเป็นปัญหาสำหรับหลายๆอยู่ เมื่อไม่นานมานี้ผมทำเว็บให้กับ พี่คนหนึ่งแกก็เจอปัญหาแบบเดียวกันเลย แกก็เลยไม่ยอมใช้ Encode UTF-8 จนผมต้องทำ POC (Proof of Concept) ไปให้พี่แก ซึ่งหลังจากทำแล้วก็คิดว่าน่าจะมัประโยชน์กับหลายๆคนก็เลยมาเขียน Note ไว้ครับ
Software ที่ใช้ในการทดสอบ
1. Windows XP Professional SP3
2. MySQL 5.1.32
3. PHP Version 5.2.6

1. หลังจากทำการติดตั้ง MySQL แล้วให้ทำการ Configuration Database ดังนี้

Read more

GoF Design Pattern

วันว่างเลยไปอ่าน Design Pattern จากเว็บ http://www.greatfriends.biz แล้วเจอหัวข้อเกี่ยวกับ GoF Design Pattern ซึ่งเห็นว่ามีประโยชน์เลยมา Note ไว้
GoF design pattern มีทั้งหมด 23 Patterns นั้นเราได้แบ่งแยกออกตามลักษณะไว้ดังนี้
1. Creational patterns เป็นกลุ่มแพทเทิร์นที่ใช้แก้ปัญหาในการสร้างกลุ่มอ๊อปเจ็ก ซึ่งช่วยให้เราสามารถควบคุมลักษณะ จำนวนและวิธีการสร้าง โดยมีทั้งหมด 5 Patterns
  1.1 Abstract Factory
  1.2 Factory Method
  1.3 Builder
  1.4 Prototype
  1.5 Singleton
2. Structural patterns เป็นกลุ่มแพทเทิร์นที่ใช้แก้ปัญหาในการออกแบบโครงสร้างของอ๊อปเจ็กที่ต้องมี ความสัมพันธ์กันในรูปแบบโครงสร้าง ซึ่งมีทั้งหมด 7 patterns
  2.1 Adapter
  2.2 Bridge
  2.3 Composite
  2.4 Decorator
  2.5 Facade
  2.6 Flyweight
  2.7 Proxy
3. Behavioral patterns เป็นกลุ่มแพทเทิร์นที่ใช้แก้ปัญหาในเรื่องพฤติกรรมการทำงานระหว่าง object ด้วยกัน ซึ่งมีทั้งหมด 11 Patterns
  3.1 Chain of Responsibility
  3.2 Command
  3.3 Interpreter
  3.4 Iterator
  3.5 Mediator
  3.6 Memento
  3.7 Observer
  3.8 State
  3.9 Strategy
  3.10 Template Method
  3.11 Visitor
อ้างอิง
Design Pattern Series I : What’s the Design Patterns