[BPMN] เพิ่มเติมเกี่ยวกับ multiInstanceLoopCharacteristics

จาก Blog ที่แล้วที่ผมได้เขียนเกี่ยวกับตัวอย่างของ multiInstanceLoopCharacteristics โดยใช้ตัวอย่างเรื่อง กระบวนการของการขอเสนอรางวัลให้กับพนักงานดีเด่น ซึ่งลองเล่นไป เล่นมาแล้วพบปัญหา ดังนี้ สำหรับใน Blog นี้ ผมใช้วิธีแรกครับ แต่จะแทรก ตัวอย่างของ Listener เข้าไปด้วยครับ ลุยกันเลยครับ สำหรับภาพรวมของกระบวนการ (Process) เหมือนเดิมครับ แต่จะแก้ Coding และ Config ข้างในมากกว่าครับ มาเริ่มกันเลยครับ ใน Script Task “Setup Reviews” ผมแก้จากการใช้ List มาเป็น Dictionary ครับ โดยให้ มาที่พระเอกของแรกแล้วครับ ตรง Sub-Process “EvaluateProcess” ที่ถูกกำหนดเป็น MultiInstance ครับ มีการปรับแก้ตามนี้ครับ 1. แก้ไข MultiInstance ครับ แล้วที่นี้กำหนดข้อมูลของแต่ะส่วน ดังนี้ครับ 2. เพิ่ม Listener เพื่อกำหนดตัวแปรระดับ Local ให้ Engine รู้จักครับ เพิ่ม Listener เพื่อกำหนดตัวแปรระดับ Local ให้ Engine รู้จักครับ โดยผมเพิ่มตัวแปร reviewer(ชื่อผู้ประเมิน) และ reviewResult(ผลการประเมิน) ซื้อยู่ใน Scope ของ Sub-Process “EvaluateProcess” ดังนี้ครับ ในส่วนของ Script มีการแก้ไข โดยจะ Execute ต่อเมื่อมีการเรียกใช้ Sub Process “EvaluateProcess” ครับ โดยมีรายละเอียดของ Script ดังนี้ Note: อย่าลืมแก้ไขชื่อตัวแปรให้ครับนะครับ ถ้าไป Run ที่ตัว BPMN Engine แล้วเสียเวลาพอสมควรครับ ทดสอบกันเลยครับ Mary ได้เริ่มการทำงานของ Reward Process แล้วครับ สังเกตุดีๆว่าตอนนี้ Task “Evaluate Award” ได้ถูก…

[CUSE] เทอมที่ 3 แล้วนะ !!!!!

สำหรับเทอมนี้เป็นเทอมที่มีการเปลี่ยนแปลงเยอะครับ ทั้งการเปลี่ยนแผนการเรียนจาก แผน ข ไปเป็น แผน ก ครับ มาดูกันดีกว่า ว่าเทอมนี้ ผมได้ลองวิชาอะไรไปบ้าง Research Method วิชานี้ก็ตามชื่อวิชาเลยครับ บอกว่าแนวทางการทำวิจัยเป็นอย่างไร และวิจัยในสาย SE มีด้านไหนบ้าง มีจุดควรระวังอะไร ** ก่อนจะมีเรียนวิชานี้เป็นไปได้ควรมีหัวข้อ Master Project  หรือ Thesis ก่อนครับ ปีของผมดีอย่างนึง – เนื่องจากคนน้อย มันเลยออกแนวๆ Private Class และทุกคนได้มีเวลาประชุม หาจุดบอดของหัวข้อที่เพื่อน แต่ละคนทำครับ Enterprise Application Architecture(EAA) วิชานี้ สำหรับคนที่ต้องออกแบบระบบขนาดใหญ่ครับ หรือจะสร้าง Framework ไว้ใช้งานในองค์กรครับ โดยยึดตาม Pattern ของ Martin Folwer ครับ ซึ่งเน้นสถาปัตยกรรมของระบบแบบ Layer จากนั้นค่อยดูลงไป แต่ละชั้นว่ามีอะไรบ้าง และควรใช้ตอนไหน การสื่อสารสำหรับสาย SE แล้ว UML เป็นภาษากลางครับ การเรียนวิชานี้ได้ Idea เห็นว่าจากสิ่งเล็กๆ อย่าง Design Pattern มันไปตอบโจทย์ของสถาปัตยกรรมของซอฟต์แวร์(Software Architecture) ได้อย่างไร ใช้สำหรับงานประเภทไหน จากเดิมที่งานมันเป็น Business Batch (Transaction Script) จนกลางมาเป็น Domain Model ได้อย่างไร สำหรับ DEV ทำไปทำมา อาจจะร้องอ๋อ เพราะ เขียน Code มาแล้วโดยที่ไม่รู้ตัวก็ได้ อย่าง เช่น PHP – Codeigniter Java – Spring Framework Machine Learning(ML) สำหรับวิชานี้ ผมมองว่ามัน Math…

[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  ครับ มาดูตัวอย่างของ multiInstanceLoopCharacteristics กันดีกว่า อ่านผ่านๆมา หลายคนน่าจะงงครับ คราวนี้ลองมาดูตัวอย่างกันครับ โดยกระบวนการตัวอย่างที่ผมเขียนใน Blog เป็นกระบวนการของการขอเสนอรางวัลให้กับพนักงานดีเด่นครับ โดยผู้จัดการ(Manager) User Mary ต้องเสนอชื่อ เพื่อให้คณะกรรมการ(Reward Commitee) ซึ่งประกอบไปด้วย User Jame, Peter และ John ทำการตรวจสอบ และอนุมัติ ดังรูป – กระบวนการมีขั้นตอน ดังนี้ครับ กลับมาดูที่กิจกรรมย่อยๆ ภายใน Sub-Process “Evaluate Process” Note: เมื่อ Execute Process มาจนถึง Step “Evaluate Process” สิ่งที่ระบบทำ คือ สร้าง Instance ขึ้นมา 3 Instance ครับ เพื่อให้คณะกรรมการ 3 ท่าน เข้ามาพิจารณารับงานไปทำต่อ (Claim Task) ครับ หลังจากผ่าน Sub Process เรียบร้อยมาทำงานในส่วนที่เหลือตาม Flow ได้แก่ Task “Calculate results” / Excustive Gateway “Is Approved Award” – Source Code (BPMN File) อ่านมานานแล้วมาดู Source Code…

[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 (มันมีข้อจำกัดนะ)

Microsoft SQL Server

พอดีลองพัฒนาโมดูล Compliance ขึ้นมาใหม่ และลองทำ Stress Test ดูว่า ระบบมันรองรับได้มากที่สุดแค่ไหน โดยลองส่ง Portfolio ทีมีหลายร้อย Port เข้ามาตรวจดู ปรากฏว่าเจอ Exception ดังรูป ถ้ามาดู Exception Message แบบละเอียดหละ ซึ่งสาเหตุของมันเกิดจาก SQL ในส่วนของ WHERE IN (มันมีข้อจำกัด สำหรับ Microsoft SQL Server สามารถใส่ข้อมูล เข้าไปได้มากที่สุด 2100 ตัวเท่านั้น) โดยตัวอย่าง SQL IN เป็นแบบนี้ แล้วจำนวนเท่าไหร่ ถึงเหมาะสม แล้ว Database ของเจ้าอื่นๆ มีข้อจำกัดที่เท่าไหร่