[Design Pattern] Observer Pattern in Depth

คราวนี้มาเป็น Pattern ที่ 2 แล้วที่ผมเขียนในเรื่อง Design Pattern in Depth โดยตอนนี้ขอเขียนเกี่ยวกับ BNK48 แล้วกันครับ น้องเณอปราง ^___^ ทำไมต้องใช้ Observer Pattern ถ้า Design ด้านแนวคิดที่ว่า อยากรู้ให้มาถาม (Server) สิ่งที่เกิดขึ้น คือ Client ต้องคอยวิ่งมาถาม (Request) ตรวจสอบว่าข้อมูลที่ Server มัน Update ยัง … Update ยังงง ถ้าเกิดข้อมูลที่ต้องกระจายเป็นข้อมูลของวง Girl Group อย่าง BNK48 กำหนดให้เป็น Class BNK48Data ซึ่งมีหน้าที่ (Operation) Method getMemberData() – ข้อมูลสมาชิก Method getVote() – ดูผลการโหวต Method BNKDataChange() – เอาไว้ Update Data ของกับหน้าจอของ User แล้วถ้าต้องเพิ่ม Dashboard สรุป stat ที่งาน (มโนไปไกลเลยเรา 555)  คือ แก้ Code ใน Class BNK48VoteDataOld !!!!!! มาดู Class Diagram แบบแรกกันครับ !!!! เราทำอย่างไรให้ Class BNK48Data นั้น Clean ที่สุด แก้อะไรก็แล้วเพิ่มแล้ว ไม้ต้องไปสั่ง Update ให้ Client ด้วย ถ้ามีดูที่ Class BNKVoteDateOld Method BNK48DataChange() มันต้องไป Update Display ทั้ง 2…

[CUSE] ใช้ EndNote X8 จัดการรายการอ้างอิง

หลังจากได้ติดตั้ง EndNote ไปแล้ว ขั้นตอนถัดมา ลุย!!!! จัดการรายการอ้างอิงกันครับ ‘ ก่อนที่เก็บรายการอ้างอิง ต้องมี Library ไว้จัดเก็บผลงานก่อนครับ โดยมีขั้นตอนการสร้าง Library ดังนี้ สร้าง Library กันก่อนครับ ลองเก็บ Reference – ทำได้ 2 วิธี ได้แก่ นำเข้าแบบ Manual และนำเข้าจากรายการอ้างอิงอื่นๆ เช่น Text file – วิธีแรก – นำเข้าแบบ Manual – วิธีสอง – นำเข้าจากรายการอ้างอิงอื่นๆ เช่น Textfile (ที่มีการจัดรูปแบบไว้) Reference ของ Chula มีหลายลิงค์เลย ผมก็แปะทุกลิงค์ครับ

[BPMN] สรุป Step การพัฒนา BPMN Application ด้วย Camunda BPMN Engine

หลังจากได้ลอง BPMN Engine ตัว Activiti ไป ช่วงมกราคม และลองตัว jBPM ไป แต่ไม่ค่อย Work เท่าไหร่ คราวนี้มาถึงคิวของ Camunda  บ้างแล้วครับ Camunda BPMN Engine คือ อะไร เป็น BPMN Engine ที่แตกสาย (Fork มาจาก Project ของ Activiti เพื่อเน้นการพัฒนาส่วนของ Engine เอาไปใช้พัฒนา Application ได้ง่ายขึ้น และเพิ่มมาตรฐานใหม่อย่าง DMN และ CMMN ทางที่ OMG (Object Management Group) ได้ประกาศขึ้นมา และนำมาใช้เพื่อลดความซับซ้อนของ BPMN ครับ ขั้นตอนการพัฒนา BPMN Application บน Camunda สร้างแบบจำลอง BPMN ก่อนครับ โดยทาง Camunda ได้เตรียมตัว Camunda Modeler ไว้ให้ครับ ลงมือทำแบบจำลองครับ อันนี้เป็นแบบจำลองของ  ที่ถูกอ้างอิงใน Paper หลายๆอันครับ นำแบบจำลองมาสร้างเป็นเว็บแอปพลิเคชันต่อครับ โดยผมใช้ Eclipse เพื่อบิ้วไฟล์ .war สำหรับไป Deploy ครับ ถ้าใครไม่รู้โครงสร้างของ Project ไม่เป็นได้ครับ ใช้ Maven Project Templates (Archetypes) ได้เลยครับ จากนั้นวางไฟล์ .BPMN ไว้ที่ Folder Resource ครับ ถ้ามีทำ Custom UI ก็วางไฟล์ UI ไว้ใน Folder WebApp ครับ จากนั้นใช้คำสั่ง maven -install  เพื่อบิ้วตัว .war ขึ้นมาครับ…

[C#] ให้ Log4net เขียน Log แยกตาม Process Id ของ Application

Ref https://pixabay.com/th/การวิเคราะห์-ข้อมูล-นวัตกรรม-3088958/

จาก Blog ตอนก่อนของ Site ได้ Deploy ตัว .Net App ไว้ที่ Windows Server ไว้ที่ Drive C: แล้วให้ User Remote เข้ามาใช้งานครับ แต่พอเวลามีปัญหามันดัน Write Log ไม่ได้ครับ เพราะ Application ทุกตัวที่ที่รันขึ้นมา ดันเขียน Log ลงไปที่ Path และไฟล์ชื่อเดียวกันครับ ทำให้ User สามารถเปิดโปรแกรมใช้งานได้แค่ 1 Instance เท่านั้นครับ เมื่อทาง Dev ต้องการหาสาเหตุของ Defect บางข้อครับ แต่เรื่องนี้มันก็ขัดใจสำหรับ User มากๆ ที่ไม่สามารทำงานได้ครับ สำหรับทางแก้ – ใช้ Log4Net มันเขียน Log File ตาม Process Id ของ exe ที่เปิดอยู่ครับ โดยสามารถไปแก้ที่ตัว Appender ได้ ดังนี้ ของเดิม – ที่ RollingLogFileAppender เขียน Log โดยระบุชื่อไฟ์ไปตรงๆเลยครับ <file value=”C:\\Ext\\Log\\EXTENSION_LOG.txt” /> ของใหม่ – มีการปรับที่ RollingLogFileAppender ให้ Log มันเข่ียนแยกตามไฟล์ โดยใช้ Log4Net Pattern String ครับ ซึ่งมีการกำหนด Pattern จาก Process Id ของ exe ที่ เปิดอยู่ในหน้าจอ Task Manager ครับ โดยดึง Process Id…

จะคุยกับลูกค้าแล้ว เราตกลงกันภายในแล้ว หรือยัง ?

สำหรับ Blog ตอนนี้ เป็น Blog ที่บ่นถึงปัญหาที่มักพบเจอในองค์กรที่รับพัฒนาซอฟต์แวร์ และก่อให้เกิดปัญหาจนเรียกว่า End Phase ปัญหาที่ 1 : ก่อนเริ่มต้นโครงการ ตกลงกันภายในแล้ว หรือยัง ? ตัวละครที่เกี่ยวข้อง – ทุกฝ่ายที่ช่วยให้ลูกค้า ตัดสินใจซื้อสินค้า และบริการจากเรา จุดประเด็น อย่าแถ ถ้าไม่รู้จริง หรือตกลงกันก่อน เคสนี้ผมโดนมากับตัวเลยครับ 555 ก่อนที่ทีม Technical เข้าไปคุยกับลูกค้า ฝ่ายที่ต้องไปคุยก่อน คือ ทีม Marketing / Business คุยก็ลูกค้าอย่างไร ไม่รู้ เนื้องานงอกเฉย พอทีม Technical เข้าไปคุยต่อฉันตอบไปคนละทางกับทีมแรก แต่สิ่งที่ลูกค้ารู้ Fact แรกที่ได้รับมัน คือ ความจริง เรื่องของเวลา อย่ามั่ว ถ้าอยากได้โครงการ เพราะ บางครั้งการบีบเวลาที่มากจนเกินไป งานเสร็จจริง แต่คุณภาพโหลยโถ่ย แถมทีมงานลาออก สิ่งที่ทีม PM และ Marketing ควรทำ คือ หาจุดที่เหมาะสมของเวลา ไม่ใช่ทำได้เสมอ เพราะในมุมมองของฝั่ง Technical พวกคุณ ไม่ได้ทำงานดึกข้ามคืนด้วยกันนะ และทุกคนมีแผนการจัดการเวลาของตัวเอง ปัญหาที่ 2 : ทำอะไร ควรมีหลักฐาน !!! ตัวละครที่เกี่ยวข้อง – ทุกทีมที่เกี่ยวกับการพัฒนาระบบในมุมเชิงเทคนิค / เชิงธุรกิจ และเชิงการจัดการ จุดประเด็น การเก็บ Requirement ไม่ใช่หน้าที่ของทีม Marketing การประเมินขอบเขต และราคา ควรเอาทุกฝ่ายช่วยกัน อย่างโปรเจคล่าลุดที่ผมเจอ Marketing จัดการทุกอย่างทั้ง Scope / Time และ Cost แถมดันไปเขียนสัญญาปลายเปิด ทีม Technical ที่ทำ…

[DB2] มาดูขนาดของ Table และ Database กันครับ

IBM DB2

สุขสันต์วันสงกรานต์นะครับ วันที่ชาวไอทีหลายคนอาจจะยังต้องทำงานอยู่รวมทั้งผมด้วย 5555 หลังจากแก้เคสด่วนของรายงานแบงค์ชาติ LQ1 ไป คราวนี้ลองมาแอบส่อง Database บ้าง จากกันไปปีกว่าๆ แต่ทำไมชนาดที่ Backup มันดูใหญ่โตจัง 5555 โดยผมได้เขียน Query ดังนี้ครับ Query ที่เขียนขึ้นครับ สำหรับ Query นี้หลังๆ ดึงจาก Table SYSIBMADM.ADMINTABINFO ครับ โดยเอาค่าของเนื่อข้อมูล( DATA_OBJECT_P_SIZE ) + ขนาด Index( INDEX_OBJECT_P_SIZE ) + ขนาดของ Long Object (LONG_OBJECT_P_SIZE) + ขนาดของ Stream (LOB) (LOB_OBJECT_P_SIZE ) และ ขนาดของ XML(XML_OBJECT_P_SIZE) โดยที่ _P (Physical) ถ้าไปดู Schema ดีๆมี _L ที่หมายถึง Logical ด้วยครับ ผลลัพธ์ที่ได้ ที่นี้เอาเราข้อมูลมาวิเคราห์ และสร้างกราฟนำเสนอให้ผู้บริหารต่อไปได้ครับ หรือจะเอาไปวิเคราะห์ทำเป็น MA ต่อไปครับ หากใช้ Database Microsoft SQL Server สามารถดูได้จาก Blog ตอนต่อไปครับ Reference

[CR] Jones Salad Steak เพื่อสุขภาพ

ร้าน Jones Salad ร้านอาหารเพื่อสุขภาพ หลายคนคงคิดว่า มันคงมีแต่ ผัก ผัก และก็ผัก !!!! แต่ในวันนี้ ผมมานำเสนอเมนูสเต็ก สำหรับสายสุขภาพกันนะครับ โดยทางร้านมีนำเสนอมา 3 เมนูด้วยกันครับ เมนูแรก: สเต็กหมูพอร์คช๊อป ราคา 275 บาท เมนูสอง: สเต็กอกไก่แคริบเบียน ราคา 169 บาท เมนูสาม: สเต็กอกไก่ อ่าวไทย ราคา 169 บาท หมายเหตุ 3 เมนูนี้ต้องรับประทานที่ร้านนะครับ การ Review เป็นความเห็นส่วนตัวของผมเองนะครับ  

[Design Pattern] Strategy Pattern in Depth

ภาพจาก https://commons.wikimedia.org/wiki/File:John_Lavery_-_IWM_War_Room.jpg

วันนี้ Blog นี้มาเน้นทางสาย Pattern กันเยอะ เชื่อว่าหลายๆคน Copy & Paste Development มาใช้งาน แต่ก็ไม่รู้ว่า มัน คือ อะไรครับ โดย Pattern ที่ผมมาเขียนลง Blog ในวันนี้ คือ Strategy Pattern ซึ่งข้อมูลส่วนใหญ่ผมเอามาจากของ Head First นะครับ ตัวอย่างมันอธิบายได้ง่ายดีครับ ทำไมต้องใช้ Strategy ทุกปัญหามันไม่สามารถแก้ไขด้วยกับใช้เทคนิคเดิมของ OOP – Inheritance ได้ไง ? ตัวอย่าง เช่น นายเจมส์ได้รับหน้าที่ในการสร้าง Class ของ Duck (เป็ด)  โดยที่เป็ดแต่ละชนิดมีพฤติกรรมที่แตกต่างกับครับ โดยที่เรา Design ไว้ให้ใช้มีพฤติกรรมที่ Class แม่ แล้วให้ Class ลูกสืบทอด(Inheritance) ไปใช้ครับ ซึ่งพอมีชนิดของเป็ดที่หลากหลายขึ้น ดันเกิดข้อขัดแย้งต้องมา Override แก้ไขพฤติกรรมมันซะงั้น จริงๆ มันควรทำอย่างนั้นเหรอ (ลูกดื้อ เปลี่ยนพฤติกรรมของแม่) ในเมื่อ Inheritance (IS-A) มันไม่ Work ต้องเปลี่ยนมาเป็นการประกอบร่าง composition (HAS-A) เมื่อไหร่ควรจะใช้ เมื่อต้องการเพิ่ม Maintainability – เลือกประกอบสิ่งที่สนใจได้ ตอน Runtime เช่น MullarDuck ตอนอายุน้อยกว่า 14 วัน ยังบินไม่ไม่ได้นะ แต่ถ้ามากกว่านั้น เราสามารถ Set ความสามารถบิน (FlyWithWings) เพิ่มเข้าไปได้ งานชิ้นเดียวกัน แต่มีวิธีการคิด (Algorithm/Behavior) ที่หลากหลาย เช่น การจ่ายค่าโดยสารรถเมล์ ซึ่งแต่ละรุ่นมีวิธีคิดที่แแตกต่างกัน การเดินหมากรุก ซึ่งหมากแต่ละตัวตอนเดิน กับการถูกกิน มันมีกฏที่แตกต่างกันไป Keyword Interface – เป็นสัญญาว่า…

[Maven] แปลง Java Project ธรรมดาให้กลายเป็น Maven Project

พอดีได้ทำ Project เก่าที่เป็น Java แต่ยังไม่มี Maven ถ้าจะรื้อมันใหม่ควรทำให้มันถูกตามตามครรลองคลองธรรม  อย่าไป Add ไฟล์ .jar เองครับ ยกให้เป็นหน้าที่ของคุณ pom (pom.xml) ช่วยจัดการดีกว่าครับ โดยสิ่งที่ต้องทำ คือ ต้องแปลง Java Project ธรรมดา ให้มันเป็น Maven Project โดยมีขั้นตอน ดังนี้ Step 1 : เตรียมตัว Java Project ที่ต้องการแปลง Eclipse ที่ลง Plug-in ชื่อ M2Eclipse ให้เรียบร้อยครับ Step 2 : แปลงร่าง คลิกขวากที่ Java Project >> Configure >> Convert to Maven Project มันขึ้นหน้าจอ Create New POM ดังรูป Group Id: ระบบ Default ให้ โดยส่วนใหญ่ตั้งจาก Package Artifact Id: ระบบ Default ให้ โดยส่วนใหญ่ตั้งจาก Package Version: บอกหมายเลขรุ่นของ Artifact Packaging: ท้ายที่สุด Project ที่ทำจะได้ Product เป็นอะไร .jar(เหมือน Dll), .war(สำหรับ Deploy) หรือ pom(เป็นแค่ XML Config) Name: ชือตาม Requirement (เอาให้คนทั่วไปอ่านเข้าใจ) Description: ชือตาม Requirement (เอาให้คนทั่วไปอ่านเข้าใจ) หลังจากตั้งค่าอะไรแสดงแล้วในหน้าจอ Create New POM แล้วกด Finish…

[CUSE] Install EndNote X8

End Note คือ อะไร Download ที่ไหน ขอ Key อย่างไร (เฉพาะของ Chula) ขั้นตอนการติดตั้ง ตรวจสอบ ปัญหาที่พบ Reference