[CR] ข้าวกระเพราเป็ดย่าง @ Emporium FoodHall by Dragon X

จริงๆวันนี้ก็กะนั่งทำ Thesis ยาวๆไปครับทีคณะวิศวะฯ ครับ แต่นั่งแก้ BPMN ตั้งนาน มันก็ยังติดอยู่ครับ ตอนบ่ายผมเลยตัดสินใจเดินจากจุฬา มา Terminal ไล่มาเรื่อยๆจนถึงตู้ปลา มาไล่จับโปเกม่อนกับวางเสา Ingess ครับ วันนี้ผมได้  Pokémon Ho-Oh 4 ตัวครับ ทำไมไม่ได้ Latios แงงง สถานที่ตั้ง ร้าน Dragon X ที่ Emporium FoodHall ชั้น 4 ครับ ตัว FoodHall  อยู่ลึกนิดนึงนะครับ เข้าใจว่ากลยุทธ์ของที่นี้น่าจะอยากให้กินของร้านอื่นๆ ก่อนครับ FoodHall นี้ น่าจะเป็นทางเลือกสุดท้ายครับ ตอนผมเข้ามาครั้งแรก คนไทยน้อยมากครับในนี้ จะมีแต่ฝรั่งกับญี่ปุ่นมานั่งกินข้าวครับ มาเป็นครอบครัว มุ่งมิ้งบ้าง ซนบ้างครับ ^__^ เมนูของร้านครับ เยอะแยะครับ ผมเลยถ่ายเมนูมาทั้งหมดเลยดีกว่า   ข้าวกระเพราเป็ดย่าง หิวมากครับ หลังจากจับ Pokémon Ho-Oh มาได้ 4 ตัวได้้เวลามาผัดกระเพรากินครับ ฮ่าๆ ม่ายใช่ครับ ที่มาเลือกเมนูนี้ เพราะน้องที่ทำงานบอกว่ามันอร่อยมว๊ากกก อร่อยที่สุดดดดด สำหรับข้าวกระเพราเป็ดย่าง ราคา : 80 บาท สื่งที่ได้ : ข้าวกระเพราเป็ดย่าง + น้ำซุป รสชาติ : พระเอก คือ เป็ดย่างครับ เนื้อชุ่ม๙่ำมากๆครับ หนังกรอบๆ เนื้อนุ่มครับ ผัดเคล้าใบกระเพรา รสชาติจัดจ้าน แต่กลิ่นใบกระเพรายังไม่ออกมาชัดนัก อาจจะผัดเร็วๆ ยังไม่เข้าถึงได้ครับ แต่โดยรวมถึงว่าดีครับ และน้ำซุปหวานเผ็ดนิดๆ เข้ากัยได้ดีกับเมนูหลักครับ ^__^ ข้าวหน้าเป็ด อีกเมนูครับ ข้าวหน้าเป็ด – อันนี้แถมครับ เพราะวันอาทิตย์ ผมก็มาทำ Thesis + จับโปเกม่อนครับ ใจจริง อยากสั่งเฉโปครับ…

[BPMN] ตัวอย่าง multiInstanceLoopCharacteristics

หลังจากโดนมรสุมงานไปจนวันหยุดเดือนเมษา หายวับไปกับรายงานแบงค์ชาติ DataSet เดือนนี้ ผมเริ่มมีเวลาว่างแล้วครับ โดยจาก Blog ตอนก่อนที่เขียนเกี่ยวกับ BPMN ไปในเรื่องของ Loop หรือ การทำซ้ำ ที่จะเน้นไปในตัวของ StandardLoopCharacteristics สำหรับใน Blog ตอนนี้เป็นตัวอย่างของ multiInstanceLoopCharacteristics ครับ แล้วความแตกต่างระหว่าง StandardLoopCharacteristics  กับ multiInstanceLoopCharacteristics  ครับ StandardLoopCharacteristics – ใช้มองเหมือน for-loop ทั่วไปครับ โดยที่ Activity หรือ Task มีเพียง 1 Instance เท่านั้นครับ multiInstanceLoopCharacteristics – เป็น Loop เหมือนกันครับ แต่ทำงานในลักษณะของขนานกันครับ มีหลาย Instance ทำงานพร้อมๆกันครับ โดยถ้าในมุมของโปรแกรมมิ่ง มันเป็นเรื่องของการแตก Thread จัดการกับพวก Concurrent ครับ ถ้าใน C# ให้นึกถึง Parallel.ForEach ครับ Parallel.ForEach(collections, currentElement => { //Process Somethings !!! }); มาดูตัวอย่างของ multiInstanceLoopCharacteristics กันดีกว่า อ่านผ่านๆมา หลายคนน่าจะงงครับ คราวนี้ลองมาดูตัวอย่างกันครับ โดยกระบวนการตัวอย่างที่ผมเขียนใน Blog เป็นกระบวนการของการขอเสนอรางวัลให้กับพนักงานดีเด่นครับ โดยผู้จัดการ(Manager) User Mary ต้องเสนอชื่อ เพื่อให้คณะกรรมการ(Reward Commitee) ซึ่งประกอบไปด้วย User Jame, Peter และ John ทำการตรวจสอบ และอนุมัติ ดังรูป โดยกระบวนการมีขั้นตอน ดังนี้ครับ Task “Enter Employee who shall receive Reward” – เป็นการใส่ข้อมูลของพนักงานที่ควรได้รับรางวัล ได้แก่ ข้อมูลพนักงาน…

[DB] การออกแบบฐานข้อมูลที่ 1 Table Column เยอะๆ กับ หลาย Table แต่ต้อง Join อันไหนดีกว่ากัน

จริงๆ เรื่องนี้มันเป็นคำถามที่โลกแตกมากๆครับ ตอนที่เรียน Database Design มาการทำ Normalize จนถึง 3์NF หรือแบบสูดๆหน่อยก็ 6NF แล้วพอมาทำงานจริงเจอ 1 Table รวมมิตรสารพัดอย่าง แต่จริงๆแล้วเราควร Design เป็นแบบไหนหละ ? จริงๆ เรื่องการออกแบบ Database มันส่งผลกับสถาปัตยกรรมของระบบนะ รู้จักกับข้อมูลที่ต้องการจัดเก็บก่อน ? ลักษณะการใช้งาน มันมีพฤติกรรมแบบไหนนะ ? ต้องการให้ข้อมูลมันตรงหลังตาม ACID หรือป่าว ? Solution ที่เป็นไปได้จากคำถามก่อนหน้า !!!! เน้นสำหรับออกรายงาน หรือ Warehouse พฤติกรรมของ TABLE เป็น READ เยอะ / INSERT เยอะ และควรจะ DELETE น้อยครั้ง ออกแบบตารางในลักษณะของการทำ Warehouse ได้ครับ (จริงๆ คือ Unnormalized ครับ ลดกาาร Join) ถ้าทำแบบนี้ได้ Performance ในส่วนของ Index จะดีครับ เน้นสำหรับจัดการ Transaction ที่มีการเปลี่ยนบ่อย พฤติกรรมของ TABLE เป็น INSERT, READ และ UPDATE เยอะครับ อันนี้แนะนำให้ออกแบบตารางให้อย่ในรูป 3NF ก็พอครับ ส่วนพวกที่ต้อง Join เพิ่ม หรือ ข้อมูลที่ต้องดึงมาใช้งานด้วย อาจจะใช้วิธีของการทำ Cache ช่วยครับ ที่สำคัญต้องแยก Database Table ที่ทำ Transaction  กับที่เป็น Warehouse  ออกจากกัน เพื่อป้องกันปัญหา เรื่อง Concurrent Access และ Deadlock ได้ เป็นไปได้ควรแยกให้อยู่ DataFile คนละอัน…

[UML] ตัวอย่าง Deployment Diagram สำหรับการใส่ Load Balance / Firewall และ High-Availability Database

ลองมากำหนดโจทย์กันดีกว่า อยากสร้าง Deployment Diagram โดยของ wong wian เว็บหาของกินท่ี่ใหญ่ที่สุด ในยุค 4.0 นี้ โดยกำหนดว่า Client – มีทั้ง PC และ Mobile โดยเน้นให้เข้าระบบผ่าน Google Chrome ก่อนที่ Request เข้ามายังระบบต้องมี Firewall โดยในที่นี้กำหนดเป็น Hardware เพื่อกรอง Request จากผู้ที่ประสงค์ร้ายออกไปได้ Load Balance – เพื่อให้รองรับได้อย่างน้อย 100,000 Request (เครื่อง App Server สามารถรองรับได้ เครื่องละ 30,000 Request) Database Server – มี 2 เครื่อง Master และ Secondary โดยถ้าเครื่อง Master เกิดปัญหา เครื่อง Secondary สามารถทำงานได้ทันที วาดรูปกัล โดยผมใช้ตัว Visual Paradigm ครับ หมายเหตุ มันมีบางที่ให้ดึงเอา Web Server(Public Access) แทรกไว้ก่อน Firewall นะครับ แต่สำหรับผม ผมมองว่า Firewall มัน Config ได้อยู่แล้วครับ ว่าให้ Allow Port ไหนบ้างครับ เลยวางไว้เป็นส่วนแรกสุดที่รับ Request มาจาก Client ครับ ^___^

[Analysis] ลองมาดูตัวอย่างจริงของการนำ Analysis Pattern (Peter Coad) ไปใช้งานกัน

จาก Blog ตอนก่อนที่ได้เขียนเกี่ยวกับ Analysis Pattern ของ Peter Coad ไปเมื่อนานมากแล้ว คราวนี้ลองมาดูกันว่า ถ้ามีโจทย์จริงๆ แล้วเราสามารถเอา Pattern มาประยุกต์ใช้งานได้เร็วแต่ไหนกันครับ เอาหละมาดูโจทย์กันได้เลย โดยโจทย์มีอยู่ว่า ลองเอา Pattern ของ Peter Coad มาปรับใช้หละ ภาพที่ได้เป็นอย่างไร เอ้าลอง 1..2..3 แล้วมันมาจากไหนหละ มาดูคำตอบกันครับ มีแต่ Pattern ของ Peter Coad เต็มไปหมดเลยครับ ^___^ มันมีประโยชน์นะครับ เห็นไหมว่าตอนนี้ ถ้าเราจับ Pattern ของปัญหาได้ สิ่งที่ได้ในตอนนี้ คือ Draft Analysis Class Diagram ครับ ถ้าดูจากรูปยังขาดอีกหลายส่วนของ อาทิ เ่ช่น  

[IT] แก้ปัญหา Remote Desktop ขึ้น CredSSP Encryption Oracle Remediation

หลังจากเครื่อง User ได้ Windows Update มาปุ๊บ ลองใช้ Remote Desktop อ้าวขึ้น Error ซะงั้นครับ ถึงแม้ว่าจะเป็นงานที่ IT Support ต้องทำ แต่อะไรก็ตามที่เกี่ยวกับ IT ตัว DEV และ Programmer รับเละเหมือนกันครับ T___T เอาหล่ะมาดูที่ละปัญหาดีกว่า CredSSP Encryption Oracle Remediation คือ อะไร ก่อนที่จะแก้ไขอะไร เราต้องรู้จักกันก่อนครับ ตัว CredSSP เกิดจากช่องโหว่ความปลอดภัยเบอร์ CVE-2018-0886 ครับ ซึ่งช่องโหว่ CredSSP ซึ่งส่วนหนึ่งของ Authentication Provider สามารถทำให้เครื่องของผู้ถูกโจมตีจากระยะไกล โดยที่ไม่ได้รับอนุญาตได้ครับ และผู้โจมตีโจมตีใน Session ของผู้ใช้งานที่ใช้งานระบบอยู่ครับ เช่น Remote Desktop แต่ทุกคนไม่ต้องหวาดระแวงไปครับ ตอนนี้ทาง Microsoft ได้ออก Patch มาแล้วครับ ถ้าเป็น Windows 10 เป็น April Update 1803 นี่เองครับ ผลข้างเคียงจาก Windows Update คือ ทำให้เครื่องปลายทางที่ยังไม่ได้ Update Security Patch เราจะไม่สามารถทำอะไรได้เลย เช่น Remote Desktop ไปเครื่องปลายทาง ครับ การแก้ไขแบบยั่งยืน Update Security Patch ที่เครื่องปลายทางครับ ทางแก้ไขแบบชั่วคราว ทำไมผมถึงบอกว่าแบบชั่วคราวหละ เพราะ เคสจริงๆ สิ่งที่ถูกต้อง คือ ต้องไป Update Security Patch ที่เครื่องปลายทางครับ ถ้าใช้งานด่วน และต้องก้ขัดไปก่อนมีขั้นตอนการแก้ไข ดังนี้ครับ – แก้ผ่าน gpedit.msc เปิด Local…

[Design Pattern] Command Pattern in Depth

อันนี้น่าจะเป็น Pattern ที่ 4 ที่เขียนกันครับ ทำไมต้องใช้ Command Pattern ต้องการเชื่อมของหลายๆสิ่งเข้าด้วยกันได้ เช่น Remote กับเครื่องใช้ไฟฟ้า แต่ละอย่างในบ้าน เช่น หลอดไฟ, พัดลม หรือ ทีวี ที่มีลักษณะการทำงานคล้ายๆกัน เช่น เปิด(ON) หรือป ปิด(OFF) เป็นต้น แต่ไม่อยากให้มันผูกแน่นกันจนเกินไป มาดูโจทย์ของเราดึงกว่า โดยผมรับ Requirement มาว่าให้ได้ออกแบบ Application ETradeStock อันนึงที่สามารถส่งคำสั่งไปที่ตลาดหุ้น SAT ซึ่งสำหรับ SAT มี API อยู่ 2 เจ้าครับ ได้แก่ DSC และ FWD สิ่งที่ต้องการ คือ ทำอย่างไรก็ได้ให้ Application ของเรา สามารถส่งคำสั่งซื้อ-ขาย หลักทรัพย์ไปยังตลาดหุ้น SAT โดยที่ใช้ API ของ DSC และ FWD ได้ พร้อมทั้งรองรับการเพิ่ม API ได้ในอนาคตครับ เมื่อไหร่ควรจะใช้ ต้องการสร้างสื่อกลางระหว่าง Control (คนสั่ง) กับ Receiver(คนทำตาม) แต่ไม่อยากให้ Controller รู้จักกับ Receiver มากนัก (อารมณ์เหมือนพวกแก๊งมาเฟีย ลูกน้องไม่รู้หรอกว่าใครสั่ง แต่ต้องทำตาม) สิ่งที่ต้องทำ คือ เพิ่มสื่อตรงกลางขั้นมา ซึ่งมัน คือ คำสั่ง (Command) ต้องการเชื่อม Controller กับ Receiver แม้ว่าตัว Receiver ของแต่ละค่ายมันมี API เชื่อมต่างกันก็ตาม (ส่วนตัวมองว่าเป็น Special Case ของ Adapter Pattern นะ ตัว Command  == Adapter) เช่น Event ระหว่าง…

[MSSQL] รู้หรือไม่ว่า WHERE IN (มันมีข้อจำกัดนะ)

พอดีลองพัฒนาโมดูล Compliance ขึ้นมาใหม่ และลองทำ Stress Test ดูว่า ระบบมันรองรับได้มากที่สุดแค่ไหน โดยลองส่ง Portfolio ทีมีหลายร้อย Port เข้ามาตรวจดู ปรากฏว่าเจอ Exception ดังรูป ถ้ามาดู Exception Message แบบละเอียดหละ The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Too many parameters were provided in this RPC request. The maximum is 2100. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Data.SqlClient.SqlException: The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Too many parameters were provided…

[Design Pattern] Decorator Pattern in Depth

ทำไมต้องใช้ Decorator Pattern อยากเพิ่มความสามารถของ Object (Object ทำงานเหมือนเดิมนะ แต่ถูกเพิ่มความสามารถ) เมื่อไหร่ควรจะใช้ ไม่อยากใช้คุณสมบัตินึงของ OOP-Inheritance มากเกินไป เพราะใช้ไปแล้ว ก็ต้อง Override ไปแก้ความสามารถที่ได้มาจาก Class แม่อีก หรือมี Class ลูก (Sub Class) ที่มากจนเกินไปครับ ซึ่งเจ้า Decorator มันมาช่วยตรงนี้ครับ ไม่ต้องแก้ แต่เราเพิ่ม (Wrap) ความสามารถใหม่ลงไป โดยที่ความสามารถเดิม ยังคงอยู่ ลดจำนวน Sub Class ลงได้ สนับสนุนแนวคิด Open-Close Principle ด้วย Open for Extension Closed for Modification Note: ไม่บอกว่าห้ามใช้ Inheritance นะครับ ใช้ให้มันพอดี ^__^ Pattern มันเป็นอย่างไร – Class Diagram Template ตัวอย่าง มุมมองตอน Runtime – Object Diagram ลักษณะของ Object หลังถูก Create มุมมองลำดับการทำงาน – Sequence Diagram ตอนสร้าง Object ตอนคำนวณราคา Real World Example Java.IO Class ไง มีการเพิ่มความสามารถจาก FileInputStream BufferedInputStream UpperCaseInputStream – สร้างเอง Code ของ Class UpperCaseInputStream เสริมความสามารถมาจาก FilterInputStream มาดู Code กันดีว่า ว่าเพิ่มความสามารถอย่างไร ? – อ่าน TestFile ซึ่ง FileInputStream มันอ่านที่ได้ละ…

[JAVA] Install MAVAN

วันนี้มาเขียน Blog สรุปชั้นตอน การ Install MAVEN ครับ สำหรับ Windows โดยมีชั้นตอน ดังนี้ เตรียมตัว ติดตั้ง Java Development Kit(JDK) ทำการกำหนด JAVA_HOME  เรียบร้อยแล้ว ซึ่งสามารถทดสอบโดยใช้คำสั่ง java -version  ซึ่งควรได้ผลลัพธ์ D:\BPMN\BPMNModel\CU_Case\java -version java version “1.8.0_152” Java(TM) SE Runtime Environment (build 1.8.0_152-b16) Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode) Download ตัวติดตั้ง Maven จาก  โดยเลือกไฟล์ apache-maven-X.X.X-bin.zip  ดังรูป ขั้นตอนการติดตั้ง แตก zip ไฟล์ตัวติดตั้ง MAVEN  จากนั้นนำว่าไปใน Path C:\Program Files\apache-maven  โดยใช้ Path นี้ไปใช้กับ Enviroment Variable ในขั้นตอนถัดไป กำหนด Enviroment Variable โดยไปคลิกขวาที่ This PC >> Properties >> Advanced System Settings  มาที่ Tab Advance >> Enviroment Variable เพิ่ม System Variable 2 ตัว (ที่เพิ่มทั้ง 2 ตัว เพราะกันไว้ดีกว่าแก้ครับ) M2_HOME  โดยใส่ค่า C:\Program Files\apache-maven  ดังรูป MAVEN_HOME  โดยใส่ค่า C:\Program Files\apache-maven  ดังรูป กำหนดตัวแปร PATH  โดยใส่ค่า %M2_HOME%\bin ดังรูป ทดสอบใช้งาน ทดสอบด้วยคำสั่ง mvn –version  โดยมีผลลัพธืที่ได้ดังนี้ D:\BPMN\BPMNModel\CU_Case\>mvn…