Dependency injection ฉบับบ้านๆ

ฉลองครบรอบแปดปีที่เขียนบล็อกที่นี่ ขอยกกรณีศึกษา “ไม่อยาก Load test การส่งอีเมล์” เพื่อให้เห็นภาพเนื่องจากเป็นสิ่งใกล้ตัว ตัวอย่างเช่นหากผู้ใช้งานมีการลงทะเบียนในเว็บเรา ให้ทำการส่งอีเมล์ยืนยันการสมัครกลับไปหาลูกค้า นั่นหมายความว่าระบบลงทะเบียนมีความสัมพันธ์กับระบบส่งอีเมล์อย่างเลี่ยงไม่ได้ ดังนั้นหากเราต้องการทำ load test ระบบลงทะเบียนแล้วเราไม่ต้องการให้ส่งอีเมล์ไปหาลูกค้าจริงๆ จะทำอย่างไร? ถ้าเราปิดระบบส่งอีเมล์แล้วหากมีบางเหตุการณ์ที่ต้องการให้ส่งอย่างเช่นเชื่อมต่อฐานข้อมูลไม่ได้จะทำอย่างไร?

Continue reading

Enterprise Web Application คืออะไร?

คำถามนี้ได้ยินบ่อย เลยเอามาเขียนเป็น blog ไว้น่าจะดี

ตามปกติที่เราพัฒนาเว็บ เราจะสร้างเว็บหนึ่งตัวและต่อกับ database หนึ่งตัว (จะรวมหรือแยกคนละเครื่องก็ไม่เป็นไร) ไม่ได้ไปยุ่งเกี่ยวกับระบบอื่นของชาวบ้าน เช่นระบบ login เราก็เก็บ account ไว้ใน database  ของเราเอง คนอื่นไม่ได้มาขอใช้ด้วย อันนี้เรียกว่า Web Application ทั่วไป

ทันทีที่เราต้องไปติดต่อกับชาวบ้าน เช่นระบบ login ที่เราต้องไป query กับระบบ Active Directory ของส่วนกลางหรือมีการส่งรายการไปให้คนอื่นประมวลผลอย่างเช่น Mainframe หรือจัดเก็บข้อมูลโดย Data warehouse อันนี้จะเรียกว่า Enterprise Application

สรุปว่า  Enterprise Application คือ ระบบที่มีการติดต่อกับระบบชาวบ้าน ผมยังหาไม่เจอว่าต้องติดต่อกับระบบแนวใหนแล้วต้องติดต่ออย่างน้อยกี่ระบบถึงจะเรียกว่า Enterprise ได้

หัวข้อที่ยังไม่ได้รับความสนใจจนมาถึงปี 2016 (ตอนที่ 1)

ปีใหม่ทุกครั้งเราจะเห็นบทความเกี่ยวกับเทคโนโลยีที่กำลังมาแรงหรือหัวข้อที่น่าสนในปีนั้นๆ ในความเห็นส่วนตัวผมกลับมองว่าเรื่องเร่งด่วนไม่ไช่การตามเทคโนโลยีให้ทัน แต่กลับเป็นทักษะพื้นฐานที่เราควรมีติดตัวซะมากกว่า ยิ่งถ้าเป็นคนที่ต้องดูแลระบบ Enterprise ที่เป็น Legacy  และมีความซับซ้อนแล้วหล่ะก็ไม่แทบไม่มีหวังว่าจะได้ใช้เทคโนโลยีใหม่ (แต่ก็ใช่ว่าจะไม่มีหวัง หากรู้พื้นฐานที่จำเป็นแล้วทำระบบให้มันดีขึ้นและง่ายต่อการ Migrate โดยฝีมือคุณต้องเจ๋งพอตัวและต้องได้รับการอนุมัติจากเบื้องบนด้วย)
Continue reading

หยุดตรวจสอบวันที่ด้วยคำสั่ง SimpleDateFormat.parse

ไม่รู้ทำไมเวลาที่ผมย้ายโปรเจค มักจะพบว่าโค้ดในการตรวจสอบวันที่ส่วนมาก (เรียกว่าทุกครั้งก็ได้) จะใช้วิธี parse แล้วดู exception หาไม่เกิดปัญหาให้ส่งค่ากลับเป็น true นอกนั้นให้ส่งค่าเป็น false หน้าตาดังนี้

public static boolean isValidDate(String source) {
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	try {
		sdf.parse(source);
		return true;
	} catch (ParseException e) {
		return false;
	}
}

แต่สิ่งที่เกิดขึ้นเมื่อทำการตรวจสอบค่า 2008-02-2x กลับได้ผลลัพธ์ที่คาดไม่ถึง

Continue reading

Exception ตอนที่ 1 – ความหมาย

Exception ที่เราเรียกกันติดปากนั้นความจริงมันคือคำย่อของ Exceptional Event ผมเรียกว่า เหตุการณ์ที่ไม่คาดฝัน ซึ่งคำนิยาม1อย่างเป็นทางการผมแปลได้ว่า

Exception คือเหตุการณ์ที่เกิดขึ้นตอนโปรแกรมกำลังทำงานแล้วไปขัดจังหวะ flow ของชุดคำสั่งปกติที่เขียนไว้

ยกตัวอย่างเหตุการณ์ในชีวิตประจำวัน


เช่นเหตุการณ์ปกติของการไปซื้อของที่เซเว่น เราปั่นจักรยาน (หากต้องการความสมจริงก็สมมุติว่าเป็นมอเตอร์ไซต์ก็ได้) จากบ้านไปซื้อของกินที่ร้านสะดวกซื้อและกลับบ้าน ส่วนเหตุการณ์ไม่คาดฝันคือมีสุนัขวิ่งตัดหน้าทำให้เราล้มเป็นแผลจนทำให้ไม่สามารถไปซื้อของกินได้ (ถึงอาจจะฝืนไปจนถึงเซเว่นแต่ก็อาจจะได้ยาล้างแผลหรือไปหาหมอก็ได้) ซึ่งไม่ได้เป็น flow ปกติของการไปซื้อของกิน

Continue reading

Reload java classes ของ Spring Boot โดยไม่ต้อง Restart Server

ในการเขียนโค้ดสิ่งที่ทำให้ผมเสียเวลามากที่สุดถ้าไม่นับการ search วิธีแก้ปัญหาก็คงเป็นการรอ Server ให้ start เสร็จเพื่อที่จะได้ทดสอบโค้ดนั้น จนถึงขั้นมีคนทำ JRebel ระบบที่ไม่ต้อง restart ก็อัพเดทโค้ดใหม่ได้ออกมาขาย ครั้นจะซื้อมาใช้ในการทำงานจริงก็สู้ราคา License ไม่ไหว

พอดีวันนี้ได้รับแรงบันดาลใจจาก Coding with Notch (from Minecraft: The Story of Mojang) ที่เขียนโค้ดบน Eclipse แล้วแก้ไขโดยแทบไม่ต้อง stop เกมส์ แต่ก็มีบางจังหวะที่เห็น stop เนื่องจากเป็นข้อจำกัดของระบบ hot swap ของ Eclipse เอง majong

ผมจึงลองค้นหาใน Document ว่า Spring Boot มีความสามารถแบบนี้หรือไม่ ซึ่งผมก็พบแสงสว่างที่ชื่อว่า Springloaded ซึ่งเป็นตัว reload ที่ใช้ใน Grails 2 แต่ก็สามารถเอามาใช้กับ Spring Boot ได้เช่นกัน

Continue reading

วิเคราะห์โค้ด Java ที่เราเขียนว่าดีหรือไม่ด้วย PMD

หากท่านเป็นคนหนึ่งที่ต้องการคนมาตรวจโค้ดที่เราเขียนเสร็จว่าดีหรือไม่ และถ้าการไปขอให้รุ่นพี่ที่บริษัทแล้วได้คำตอบว่า ไม่ว่าง งานยุ่ง หรืออะไรก็ตามแต่ที่ทำให้คุณสิ้นหวังกับการต้องการที่จะพัฒนาซอร์ฟแวร์ที่มีคุณภาพ ผมมีทางออกให้ครับ

Continue reading