Design Principle กับ Design Pattern

ก่อนจะมาเข้าเรื่องที่ลึกลงไป ผมอยากแนะนำ 2 คำนี้ก่อนครับ Principle แปลเป็นไทย คือ “หลักการ” แปลไทยเป็นไทย คือ สาระสำคัญที่ยึดถือเป็นแนวปฏิบัติ (ข้อมูลจากราชบัณฑิตยสถาน) Pattern แปลเป็นไทย คือ “รูปแบบ” แปลไทยเป็นไทย คือ แบบ, แผน, ตัวอย่าง, ทำแบบ, แบบอย่างอันดี, เอาแบบอย่าง กลับมาที่ Design Principle คือ หลักการออกแบบ Software โดยมีชุดแนวคิด หรือคำแนะนำ เพื่อป้องกันการออกแบบ Software ที่แย่ ที่ส่งผลทำให้มีการปรับแก้ไข (Customize) หรือ การดูแลรักษา (Maintenance) ยาก เช่น SOLID (หลักการพื้นฐาน 5 ข้อ ถูกคิดและเผยแพร่โดย Uncle Bob ครับ ) จากนั้นอีกคำ Design Pattern คือ รูปแบบการออกแบบที่ดี อ่านแล้วดูแปลก เปลี่ยนใหม่ดีกว่าเป็นแบบแผนที่ดี ที่สามารถใช้กับปัญหาทั่วไปได้ (Reusable Solution) เช่น Singleton (Pattern ช่วยจัดการจำนวน Object เพื่อให้ระบบงานมีระสิทธิภาพสูงสุด) แถมให้อีกคำ เนื่องจากมี Design Pattern แล้ว ก็ต้องมี Anti-Pattern คู่กันครับ เจ้า Anti-Pattern ตรงข้าม Design Pattern คือ แบบแผนที่ไม่ดี แก้ปัญหาเฉพาะหน้าครับ มันเป็นการ Workaround ครับ ตัวอย่างที่คุ้นๆกัน น่าจะเป็น GodClass, GodMethod, Circular Dependency ครับ ปูมาซะนาน ตอนแรกจะเขียน Blog เกี่ยวกับ IoC(Inversion of Control) แต่ศึกษาไป ศึกมาก็มาลงเอยที่ Blog นี้ครับ…

[Digital Thailand] Big Data in Business

บทความนี้ก็แตกออกมาจาก Blog “สรุปจากงาน Digital Thailand 2016 ครับ”  ขอสรุปสิ่งที่ได้จากการฟังสัมมนาในงาน Digital Thailand วันที่ 28-May-2016 ครับ ใน Section แรกมาจาก “Turning Big Data Into Personalized User Journeys” โดย Mr. Kevin Jackson, Global Sales Director of Gravity R&D แนะนำ Gravity R&D เป็นบริษัทที่สร้างระบบ Recommend แนะนำ หรือสนับสนุนการตัดสินใจ Fortune 500 (บริษัทที่ใหญ่ที่สุด 500 อันดับแรกในอเมริกา จัดลำดับโดยนิตตยสาร Forbes) ในปี 2000 กับ ปัจจุบันที่มีการเปลี่ยนแปลงไป ล้มหายตายจากไป ถ้าไม่มีการปรับเปลี่ยน ปรับตัวตามยุคสมัย ตามข้อมูลที่ได้รับมาก (Data Mining & Big Data) Digital Universe โดย Mr. Kevin เปรียบข้อมูลที่อยู่รอบตัวเรา โดยแทนข้าว 1 เมล็ด ถ้ามีจำนวนข้าวมากขึ้น เราต้องมีถังบรรจุมาขึ้น และใช้เวลา Process นานด้วย ข้อมูลมันใหญ่มากขึ้น เราต้องพัฒนาเทคนิคให้ตามทัน นั้นก็ คือ Machine Learning (AI) เมื่อเวลาผ่านไป พฤติกรรมเปลี่ยนของผู้ใช้เปลี่ยน Walmart – ปรับเปลี่ยนรูปแบบวงการค้าปลีก โดยมีการนำข้อมูลมาช่วยเลือกทำเลที่ตั้งของร้าน และการกระจายสินค้า รวมถึงการบริหารงาน ทำให้ต้นทุนน้อยกว่าคู่แข่ง Amazon – ปรับเปลี่ยนการซื้อสินค้า จากการที่ต้องเดินทางไปซื้อที่ร้าน ที่ห้าง กลายมาเป็นจิ้มนิ้วสั่งแทน และทำให้ตัว Walmart เองต้องมาปรับตัวตาม iphone – ที่เปลี่ยนให้ Smart…

[Digital Thailand] How Google Thinks About Developing a Culture of Innovation

วันเสาร์ที่ผ่านมา ผมได้ไปงาน Digital Thailand โดยผมขอแตก Blog นี้ ออกมาจาก Blog  หลักนะครับ โดยเรื่องที่ผมกำลังเขียนต่อไปนี้ เป็นเรื่อง How Google Thinks About Developing a Culture of Innovation” โดยคุณ Ben King, Country Head of Google Thailand ครับ ช่วงแรกเป็นการแนะนำบริษัทก่อนครับ ตอนนี้ Google หรือ Alphabet ในปัจจุบันครับ เข้าสู่วัยรุ่นและ อายุ 18 ปี นับจากที่ผู้ก่อตั้งทั้ง 2 คน Larry Page และ Sergey Brin ครับ ในโรงรถครับ (บริษัทยักษ์ด้าน IT ในปัจจุบัน มักเกิดจากโรงรถครับ อย่าง Micorsoft กับ Apple ครับ) แรกเริ่มที่มีพนักงาน 4 ครับ จนถึงปัจจุบัน ที่มีอยู่ 60,000 กว่าคนทั่วโลกครับ โดยมี 6 Platform มี่ต้องดูแลครับ จากนั้นก็เข้าหัวข้อของบทความครับ โดยคุณ Ben King ได้ปรับจาก Google 9 Principle of Innovation ออกมาเป็น 3 กลุ่ม ดังนี้ครับ Culture and innovation Innovation, Not Instant Perfection – นวัตกรรมต้องการการปรับปรุง ไม่มีอะไรที่ดีสุด ต้องมีการปรับปรุงเปลี่ยนแปลงตามรอบครับ โดยอาจจะดูจาก feedback ตามยุคของเทคโนโลยี เป็นต้นครับ A…

[Digital Thailand] สรุปจากงาน Digital Thailand 2016 ครับ

คืนวันศุกร์ หลังจากปั่นงานเสร็จ ผมลองหาๆดูว่าวันเสาร์จะไปทำอะไรดี พอดีเจองาน Digital Thailand ที่ศูนย์ประชุมแห่งชาติสิริกติ์ครับ พอไปดูงานสัมมนาในวันเสาร์มีเรื่องที่น่าสนใจหลายเรื่องครับ อาทิ เช่น Google คิดอย่างไรกับการสร้างนวัตกรรม และการนำ Big Data เช้ามาประยุกต์ใข้กับงาน เป็นต้นครับ และก็วันนี้มีจัดการหลายงานด้วยนะครับ ถ้าเบื่อแล้วก็สามารถเปลี่ยนไปชมงานอื่นๆได้ครับ เริ่มกันเลยดีกว่า หลังจากลองเดินทางแบบประหยัด โดยนั่งรถเมล์ 149 จากบ้านมาแทนครับ แล้วเดินอีกนิดนึง แทนที่จะนั่งรถเมล์สาย 40 แล้วไปต่อ MRT ครับ เวลาไม่ต่อกัน แต่ค่าใช้จ่ายลดไปเยอะเลย เมื่อมาถึงงานมีให้ลงทะเบียนครับ ในส่วนนี้ผมคิดว่าระบบ OK นะครับ ของตัว ZipEvent ครับ ถ้าลงทะเบียนมาจากเว็บแล้ว สามารถใช้มา Print QR Code เพื่อใช้ลงชื่อเข้างานใน Session ต่างๆครับ คล้ายกับ Project ที่เคยส่งประกวดตอนปี 2 เลย แต่ของผมจะใช้ RFID ในช่วงแรกผมได้เข้า Session ต่างๆ ดังนี้ครับ ที่จัดในห้องสัมมนา Lotus “How Google Thinks About Developing a Culture of Innovation” โดย Mr. Ben King, Country Head, Google Thailand โดยผมได้เขียน Blog แยกไว้นะครับ กลุ่ม Big Data โดยผมขอเขียน Blog สรุปรวมครับ “Turning Big Data Into Personalized User Journeys” โดย Mr. Kevin Jackson, Global Sales Director…

แนะนำหนังสือ Your Code as a Crime Scene

ก่อนอื่นขอเล่าประวัติหนังสือเล่มนี้ก่อน ช่วงกลางเดือนมีนาคม ผมมี Idea ที่จะลองศึกษาอะไรใหม่ๆในวันอาทิตย์ ไม่ว่าจะเป็นอ่านหนังสือ ดู Video หรือ อื่นๆ ดีกว่าเอาเวลาไปปั่นงานที่เกิดจากความผิดพลาดของการบริหารโครงการ ฮ่าๆ วันนั้นผมได้ไปร้านหนังสือ Kinokuniya และก็สะดุดกับหนังสือเล่มนี้ครับ Your Code as a Crime Scene  ของคุณ Adam Tornhill หนังสือเล่มนี้พอซื้อมาเสร็จเป็น Crime Scene ทันที่ครับ หนังสือหายไปกับโครงการ 5 ส ที่ Site งานลูกค้า ย่านสะพานควาย ผมเพิ่งซื้อใหม่ทดแทนเป็นของขวัญวันเกิดวันที่ 23 เมษายน ครับ สำหรับ Your Code as a Crime Scene พอได้เห็นชื่อหนังสือนี้เสร็จ ภาพของ CSI นี่โผล่มาเลยครับ ลองมาดูที่ Code ของเราบ้าง คุณเคยเจอปัญหานี้ไหม มีคนไปแก้ Code ที่เป็น Core ของระบบ แล้วบึ้มไปโดน Module อื่นๆ ใครเป็นคนที่ทำ Code ให้มีพฤติกรรมที่ต่างไปจากเดิม ทำไม Code ถึงกลายพันธุ์ แล้วมันเริ่มที่ไหนหละ ? Code Module นี้ โครตเยอะ แต่มีการเรียกใช้งานมันไหม หรือเป็นมรดก จากยุคดึดำบรรพ์ (Legacy Code) เราจะสังเกตุได้อย่างไร ว่า Code ที่มีทีมงานเข้ามายุ่งหลายๆส่วน ส่วนไหน มันจะเป็นความเสี่ยงที่เราต้องสนใจ และ Test เป็นพิเศษ มาดู Keyword ของหนังสือ เล่มนี้ดีกว่า โดยหนังสือเล่มนี้จะเสนอ Idea โดยเอา Forensic Psychology มาใช้กับ Code ครับ แนว CSI สืบจากศพ มาเป็นสืบจาก…

Workaround Solution กับ Technical Debt

ก่อนอื่นของกล่าวถึงคำว่า Workaround มัน คือ การแก้ปัญหาเฉพาะหน้า เฉพาะกิจครับ เช่น ระบบจำเป็นต้องต่อกับระบบ Network ผ่านสายแลน เนื่องจากต้องการความเสถียร และความเร็ว แต่ที่โต๊ะ User ยังไม่มีการติดตั้งระบบ Networkทางทีมเสนอให้ใช้ Wireless ไปก่อน เป็นต้นครับ ถ้านึกภาพไม่ลองออกไปดูพวก Trust me I am Engineer ก็ได้ครับ ฮ่าๆ ในแง่ของการพัฒนา Software ก็มีเหมือนกัน เจ้า Workaround มัน คือ การแก้ปัญหาเฉพาะหน้า เพื่อลดเวลา หรือความยุ่งยากในการพัฒนาครับ ซึ่งส่งผลกระทบโดยตรงกับ Code และตัวระบบครับ ที่มาของการ Workaround ที่ผมเข้าใจนะ มี 2 แบบ ดังนี้ เกิดจากทีมพัฒนา เมื่องานมันเร่ง โดยมีตัวเลขค่านึง ที่ระบบต้องคำนวณ โดยมีสูตร A และสูตร B ตัว สูตร A มีคนทำไว้แล้ว พองานมันเร่ง และ BA ก็บอกว่า ลูกค้าไม่มีทางที่ต้องใช้สูตร B คิด SA และ Dev เลยตัดสินใจให้งานมันเร็ว เขียน Code ให้ใช้สูตร A แก้ปัญหาไปก่อน เพื่อให้ UAT ผ่าน แต่มัน คือ ระเบิดเวลาดีๆนั่นเองครับ ถ้ามีเคสที่ต้องใช้สูตร B ขึ้นมาหละ รื้อ Code กันยาวเลยทีนี้ ถ้าระบบรอดไปได้นานพอ ตัว Business ที่ Developer รุ่นหลังรับรู้ มีสูตร A ส่วนสูตร B หายไปตามกาลเวลาครับ เกิดจาก User บ้าง การใช้ระบบผิดวัตถุประสงค์ อันนี้เจอมากับตัวเลย…

[Spring 4.x] Overview กันสักหน่อย

จาก Blog ในตอนที่แล้ว เราได้ใช้ Spring ไปแล้ว หลายคนอาจจะใช้แบบไม่รู้ตัวก็ได้ครับ ที่นี้เรามาดูภาพรวมของ Spring ดีกว่า ว่ามันมีอะไรบ้างครับ Spring ไม่ได้เกิดมาเพื่อทำเว็บอย่างเดียวนะครับ โดยที่เรารู้จักกันเยอะเป็น Spring MVC กลับมาที่ Spring ดีกว่าครับ Spring มันเป็น Framework  ที่เกิดจากความโหดร้ายของ EJB ใน J2EE ครับ อาทิ เช่น ไม่ต้องการ App Server ตัวใหญ่ๆ การ Implement ที่ต้องเขียน Code เยอะแยะ Code ผูกกับตัว EJB มาเกินไป และอื่นๆ โดยคุณ Rod Johnson ได้สร้าง Framework ที่ Lightweight  ซึงนำเสนอพร้อมกับหนังสือ Expert One-on-One J2EE Design and Development ครับ โดยมีแนวคิดคร่าวๆ ดังนี้ Container Invasion of Control(IoC) โดยใช้แนวคิด Dependency Injection(Di) POJO (Plain Old Java Object) แก่นหลักที่คุณ คุณ Rod Johnson  คือ ตัว Spring Core (Blog ตอนก่อนหน้าเราก็ใช่เท่านี้ครับ) ที่พัฒนาออกมาในช่วงแรกครับ โดยมีชุมชนพัฒนา-เติมส่วนเสริม (Extension) ตามที่ระบบเราต้องการได้ครับ ไม่จำเป็นต้องใช้ทั้งหมด นี่แหละ Lightweight Spring Core มันมีสิ่งที่เราต้องรู้จัก ดังนี้ POJO (Plain Old Java Object) Container Dependency Injection(Di)…

[CR] Sushi Express Terminal 21

ผมเจอร้านนี้จากใน Twitter ครับ เห็นโปรช่วงแรกจานละ 20 มวลมหาประชาชนล้นหลามมากครับ ผมเลยไม่ไปครับ รออีกโปรดีกว่าครับ 5 จาน แถม 1 จาน ครับ แต่ราคาจานละ 30 บาทนะครับ วันนี้จริงก็กะจะไปกิน Food Court Pier21 มากกว่าครับ หลังจากเดินมาราธอนในงาน Mobile Expo มาครับ และวันนี้ก็หิวด้วย เพราะ ยังไม่ได้กินอะไรเป็นมื้อจริงๆจังๆเลย มีแต่นมกับผลไม้ครับ พอเห็นร้านโล่งๆนี่ เข้าทางผมเลยครับ กินชิวๆ ไม่ต้องมีแรงกดดันครับ โปรก็อันนี้เลยครับ  5 จาน แถม 1 จาน ครับ แต่ราคาจานละ 30 บาท ผมเข้าใจว่าคนน้อย เพราะ ยังเข้าใจว่า 20 บาท แล้วอารมณ์เสียครับ อันนี้ความเห็นส่วนตัวนะครับ เพื่อนผมก็บ่นครับ หลังจากเข้าร้านมาแล้วมาดูบรรยากาศในร้านดีกว่าครับ บรรยากาศในร้านครับ สวนใหญ่เป็นที่นั่งเดี่ยวครับ มีราง Sushi วนไปครับ แต่มีที่นั่งสำหรับ 4 คนด้วยครับ จากข้อแรกอันนี้ ภาพในหัวจากโคนัน ตอนปริศนาซูชิจานเวียน หายไปเลย ตอนแรกผมเข้าใจว่ามีหน้าจอให้สั่ง Sushi แบบพิเศษ และที่จานมี Tag RFID ไว้ช่วยนับครับ ที่เข้ากินร้านนี้ เพราะเข้าใจว่าเหมือนโคนัน 555 พอมาถึงที่โต๊ะครับ มาดูสิ่งที่ทางร้านเตรียมไว้ให้ดีกว่า กล่องอุปกรณ์ อันนี้ผมเรียกเองนะครับ โดยมี แก้วน้ำชา : หมายเลข 1 น้ำจิ้ม Sushi : หมายเลข 2 ถ้วยน้ำจิ้ม ไม้จิ้มฟัน : หมายเลข 3 ตะเกียบ : หมายเลข 4 ชาถุง รสชาติใช้ได้เลยครับ : หมายเลข 5 ก๊อกน้ำร้อนครับ เอาไว้ชงชากินเองครับ…

[Spring 4.x] Hello World in Console

หลังจาก Blog ตอนแรกที่เตรียม Tools กันไปแล้ว คราวนี้มาลองสิ่งที่ Developer ทุกคนต้องเจอกัน Hello World ครับ โดยผมมาพาทำในรูปแบบ Console Application ครับ หาาาา Spring มันทำเว็บนี้ มันต้องมีคนอุทานแน่ๆ แต่จริงๆ Spring มันเป็น Platform นึงครับ ส่วนของเว็บของ MVC เป้น SubSet ใน Spring ครับ เริ่มกันเลยดีกว่า ขั้นแรกสร้าง Maven Project ขึ้นมาครับ ให้มันเตรียมพวกไฟล์ Pom.xml และ Lib ที่จำเป็นมาให้ เข้าเว็บ Google หา Spring Latest Version หรือไม่ก็เข้าไปลิงค์ที่ผมให้มาครับ สิงที่เราต้องการ คือ พวก Dependency เอาไปแปะในไฟล์ Pom.xml เลยครับ org.springframework spring-context 4.2.6.RELEASE แปะแล้ว Save File ครับ เดี๋ยวตัว IDE มันจะไปดึง Lib ที่เกี่ยวข้องมาให้ครับ ตอนนี้แล้วเรามาดูโครงสร้าง Project กันดีกว่าครับ มาเจาะลงทีละไฟล์ครับ สร้าง POJO Interface และ Class กันครับ Interface package com.debuggingsoft.HelloConsoleWorld.domain; public interface HelloConsoleWorld { void sayHello(String name); } Implement package com.debuggingsoft.HelloConsoleWorld.domain; public class HelloConsoleWorldImpl implements HelloWorld{ public void sayHello(String name) {…

[Spring 4.x] กลับมา Spring อีกครั้ง

หลังจากข้ามสายไปฝั่ง M$ นานเลยย (หลังๆคงไม่มีใคนเขียน M$ แบบนี้แล้ว บริษัทไปในทางบวกมากขึ้น ยกเว้น Mobile) พอ Project Treasury ที่คาดว่าจบตาม Timeline ไม่รวมงาน End-Phrase ครับ !!! ผมพยายามคืนเวลาว่างให้ตัวเอง เพราะ เสียเวลาไปพอสมควรกับการ Estimate เวลาที่ผิดพลาด โดยมาลองรื้อฟื้น Spring ที่เคยเขียนมาเมื่อนานมาแล้วครับ เข้าเริ่มดีกว่า มาดู Tools ที่ผมใช้ดีกว่า Java 8 ++ : ไม่ต้องอธิบายนะครับ Spring Tool Suite(STS) : มันเป็นร่างอวตารของ Eclipse ครับ โดยปรับแต่งมา เพื่อให้ใช้กับ Spring Framework ได้ง่ายขึ้นครับ เลือก bit ดีๆนะ ว่าจะเอา 32 bit หรือ 64 bit หลังจากนั้น เราพร้อมลุยเลยครับ  หวังว่าจะมีเวลาเขียน Blog นะ