[BPMN] ลองคิดตัวอย่างของ Completion Condition กัน

พอดีช่วงนี้ได้ลองเล่น BPMN แล้ว ปัญหาที่สำคัญของ Spec ตัว BPMN เอง คือ ตัวอย่างน้อย และไม่ครอบคลุมตามคุณสมบัติที่ได้ระบุไว้ใน Spec ครับ อย่างที่ผมโคตรงง ตอนนี้ คือ Attribute ของ Multi-Instance ของ Task ครับ ลองมาคิดตัวอย่างกันดีกว่าครับ Task “Monitor Shipment” – Completion Condition คือ สินค้าถึงจุดหมายปลายทางแล้ว Task “Approval TOR” – Completion Condition คือ คณะกรรมการ 2 ใน 3 ของทั้งหมดอนุมติ Task “Process Transaction” – Completion Condition คือ ยอดรวมของทุกสินค้า และบริการทั้งหมดต้องเกินจาก Budget ที่ตั้งไว้ หรือ ทุก Transaction สามารถประมวลผลได้ โดยไม่มีปัญหา ** ถ้าเกินจาก Budget เข้า Flow การตัดสินใจของ User ** ถ้าไม่เกินส่งต่อให้ Supplier จัดการ เดี๋ยวคิดออกอีกแล้วมาเขียนเพิ่มครับ

[DB2] เมื่อ Path ก็มี แต่ทำไมยัง สร้าง Database ไม่ได้ มีแต่ SQL1052N The database path path does not exist.

IBM DB2

วันนี้ผมได้ไปช่วยน้องในทีมสำหรับอีก Project แต่ก็เจอปัญหามากมายเลยครับ ทั้งเรื่องขึ้น Database ที่ติดปัญหาขนาดของ Table ที่ Field เยอะมากจน Page Size 4K ไม่พอ ทำให้ต้อง DROP DB แล้ว Import Data เข้าไปใหม่ ซึ่งปรากฏว่า Drive C ที่มันเหลือน้อยมากครับ 25 GB แต่ Database ที่ต้องการเอาเข้าไป มันตั้ง 80 GB ทางเลือกเดียวตอนนี้ คือ ต้องไปสร้าง Database ที่ Drive อื่นครับ ซึ่ง Drive ที่ว่าง คือ Drive E: มีที่ 150 GB เริ่มต้นลุยคำสั่งเลยครับ CREATE DATABASE BFMUATC AUTOMATIC STORAGE YES ON ‘E:\DBUAT’ DBPATH ON ‘E:\DBUAT’ USING CODESET TIS620-1 TERRITORY TH PAGESIZE 16 K; อ้าวววววววว SQL1052N: The database path path does not exist. เกิดอะไรขึ้น !!!!! ทางแก้ไขนะครับ ตรวจสอบ Path ที่ต้องการก่อน อันนี้ Path จริงครับ สำหรับเคสนี้ E:\DBUAT  มีจริงนะครับ สำหรับ Windows นะครับ ให้ตรวจสอบ Registry DB2_CREATE_DB_ON_PATH ว่ามีอยู่ หรือป่าวครับ ด้วยคำสั่ง db2set -all  ผ่านทาง Command…

[Security] กลบทการเข้ารหัสแบบไทย ที่แฝงความนัย แต่คงด้วยความไพเราะสละสวย

พอดีได้ดู หนึ่งดาวฟ้าเดียว ย้อนหลังครับ ตอนนี้ละครน่าจะฉายจบแล้วมั่ง ตอนแรกผมก็กลบท น่าจะเหมือนกับพวกกฏเกณฑ์ของการประพันธ์โครงฉันท์ กาพย์กลอน ให้มีความไฟเราะครับ แต่ตอนนี้ กลบท มันไม่ใช่แฝงความไพเราะ ลองดูได้  ํYoutube ตอนนี้ มาดูความแรกจากในละครกัน เข้ารหัส ถอดรหัส กลบท “ไทหลง” ที่มีกฏเกณฑ์ของการแทนตัวอักษรโดยขยับไปที่ตัวถัดไปอีก 3 ตัวอย่าง เช่น ก == ง ข == ค ฃ == ฅ ฆ == ฌ เป็นต้น มันคุ้นๆสำหรับเด็กสายคอมอย่างๆเรา ผมเคยได้ยินตอนเรียนปี 1 วิชา CP121 เรื่องของ Caesar Cipher ที่เป็นอัลกอริทึมในการเข้ารหัสยุคแรกๆ จนถึงแบบที่น่าจะคุ้นเคยกันดีอย่าง ROT13 โอ้โห กลบท มันเป็น Idea การเข้ารหัสที่แฝงไปด้วยความไฟเราะครับ กลบท “ไทหลง” ถ้าเอาตัวอักษรมาทำ Look Up Table ก็จะได้ ดังนี้ ก == ง ข == ค ฃ == ฅ ฆ == ฌ จ == ย ฉ == ช ซ == ฒ ญ == ฑ ฏ == ฐ ฎ == ณ ด == ถ ต == น ท == บ ธ ==…

[BPMN] มาลองใช้ Timer Start Event กันครับ

จาก Blog ตอนที่แล้ว หลังจากไปตบตีกับ Timer Start Event  ที่ไม่สามารถ Deploy ได้มา 5 เต็มๆ หลังจากแก้ปัญหาได้แล้ว คราวนี้มาลองดูตัวอย่างกันครับ หลายคนที่อ่าน Spec ของ BPMN เอาน่าจะงงกันครับ มาดูกระบวนการแบบง่ายๆกันก่อนครับ Note: กระบวนการที่ไม่ได้เป็นตัวอย่างของกระบวนการทางธุรกิจจริงๆนะครับ แค่เพียงทดสอบ Start Timer Event โดยมีส่วนประกอบ ดังนี้ Start Timer Event – จุดนี้พระเอกเลยครับ เพราะมีการกำหนดตาม Spec ของ BPMN ครับ ตาม Date Pattern  R4/2018-06-03T00:00/PT5M Task นี้จะถูก Execute ครั้งแรก ในวันที่ 2018-06-03 เวลาเที่ยงคืน และทำงานไปต่ออีก 4 ครั้ง และทิ้งช่วงครั้งละ 5 นาทีครับ ถ้าดูใน XML ในอยู่ในส่วนของ Timer <bpmn:timerEventDefinition> และ <bpmn:timeCycle>  ซึ่งมีการกำหนดรูปแบบของวันที่ตาม ISO 8601 ครับ <bpmn:startEvent id=”StartEvent_1″> <bpmn:outgoing>SequenceFlow_18slmhg</bpmn:outgoing> <bpmn:timerEventDefinition> <bpmn:timeCycle xsi:type=”bpmn:tFormalExpression”>R4/2018-06-03T00:00/PT5M</bpmn:timeCycle> </bpmn:timerEventDefinition> </bpmn:startEvent> การ Config ใน Camunda Modeler ตามรูปเลย Script Task “Collect Order Data” – อันนี้ไม่มีอะไรมากครับ แต่ Print “Task Execute” ตามรูปครับ User Task “Accept Data” – สำหรับ Task นี้จริงๆ ผมแค่อยากทดสอบว่า Task ถูก  Execute จริงไหม โดยให้ Task…

[BPMN] เมื่อ Timer Start Event ทำให้เกิดปัญหา duedate is null

หลังจากทำ Thesis มาเรื่อยๆ ผมได้มาลองใช้ Timer Start Event ของแบบจำลอง BPMN พอจะ Deploy เท่านั้นแหละ ? ERROR org.camunda.bpm.engine.context – ENGINE-16004 Exception while closing command context: duedate is null org.camunda.bpm.engine.exception.NullValueException:duedate is null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_152] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_152] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_152] at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_152] at org.camunda.bpm.engine.impl.util.EnsureUtil.generateException(EnsureUtil.java:344) ~[camunda-engine-7.8.0.jar:7.8.0] …. พระเจ้า !!!! ทำไมทำร้ายเด็กน้อยอย่างฉันเช่นนี้ ผมติดปัญหานี้มาประมาณ 2 สัปดาห์ครับ ระหว่างที่ทำก็ไล่ถาม Google ตรวจการกำหนด Config ไปเรื่อยๆ จนถึงเวลาแล้วทีผม ต้องเอา Stacktrace มาลองไล่ Code ของตัว BPMN Engine ใน GitHub ครับ ซึ่งพอไล่ๆไปแล้ว abstract class JobDeclaration ผมสงสัย Method resolveDueDate เพราะ มัน Code ที่น่าสงสัยครับ Return null เฉย หลังจากขุดไปเรื่อยๆ เจอ Ticket อันนึงครับ อันนี้ >>  โดยสิ่งที่ผมสงสัย คือ ตัว XML Config ครับ พบสาเหตุแล้ว หลังจากไล่ Code มานานเลย ผมสังเกตุว่าเวลาที่กำหนดในแบบจำลอง มันเป็นเวลาในอดีตครับ 2018-04-30…

[MSSQL] มาดูขนาดของ Database กัล

หลังจากช่วยได้ นอกจากเป็น Dev แล้ว อีกอย่างที่ Dev ควรรู้ด้วย คือ ตัว Database ครับ วันนี้ผมขอแปะ Query สำหรับดูขนาดของ Database ไฟล์ .mdf กับ .ldf โดยสามารถดูข้อมูลจากได้ Query ดังนี้ัครับ ผลลัพธ์ที่ได้ ประโยชน์ เอาไว้สำหรับสร้างแผนการทำ Maintance ระบบ เอาไว้สำหรับตัดสินใจการ Shink DB

[CR] ยาคูลท์ไลท์ นมเปรี้ยวสำหรับคนรุ่นใหม่ ใส่ใจสุขภาพ

หลังจากเดินจับโปเกม่อนมานาน ระหว่างทางอยู่ๆก็พบสาวยาคูลท์ครับ ซึ่งสิ่งที่ผมได้มา คือ ยาคูลท์ ไลท์ ครับ สำหรับคุณสมบัติของมันครับ สูตรน้ำตาลน้อยแค่ 1.75% เท่านั้น แค่ 30 Kcal โดยถ้าเทียบกับสูตรดั่งเดิมน้ำตาล 18% ครับ ราคา 8 บาท เพิ่มขึ้นจากสูตรดั่งเดิม 1 บาทครับ รสชาติ โดยทั่วไปไม่ต่างกับ อาจจะมีความจื๊ดหวาน ที่ลดลง สำหรับคนติดหวานน่าจะรู้สึกได้ครับ ^__^ สรุป ยาคูลท์ไลท์ นมเปรี้ยวสำหรับคนรุ่นใหม่ ใส่ใจสุขภาพ

[CR] เหนื่อยก็พักที่ PowerNap @Interchange Tower MRT Asoke

ติดปัญหา Error ของ BPMN ตั้งนานครับ พอแก้ได้แล้วเลยมาผ่อนคลายบ้างครับ ^__^ โดยวันนี้ผมได้ไปที่ร้าน PowerNap @Interchange Tower MRT Asoke ครับ เห็นใน Facebook มาหลายรอบแล้ว พอดีผ่านมาแถวนี้ด้วยโอกาศดีเลยครับ เตรียมนอนช่วงบ่ายครับ ที่อยู่ร้าน ตึก Interchange ชั้น B1 ครับ ถ้ามีใต้ดินออกปุ๊บจะโพล่มาเกือบถึงเลย สำหรับตัว PowerNap Lounge จะอยู่ลึกนิดนึงครับ โดยอยู่ชั้น B1 และผ่านช่องทางเล็กๆ จุดสังเกตุ คือ ร้าน Amazon ครับ เจอช่องเล็กๆพุ่งเข้าไปเลยครับ ถึงทางเข้าร้านแล้วครับ ป้ายร้านครับ ภาพรวมร้าน ตัวร้านมี 2 ส่วน ส่วน Cafe กับ Co-Working Space ครับ แอร์เย็นสบาย Wifi-เร็วดีครับ ส่วนการนอน จะเป็นห้องมืด ไฟสลัวนิดนึงครับ ถ้ามาครั้งแรกมี Welcome Drink ด้วย – ได้มาแบบงงๆเลย ตอนแรกกะจะมานวด และก็ที่มีให้เปลี่ยนรองเท้า เป็นรองเท้าแตะน้องปลาวาฬด้วยนะครับ สำหรับคนที่ใส่ถุงเท้ามาก็สวมทับเลย เข้าใจว่าป้องกันเรื่องกลิ่นครับ โปรโมชั่นที่ผมได้ลอง นวดด้วยเครื่องนวด 30 นาทีครับ + เครื่องดื่มครับ + ฟังเพลงผ่อนคลายครับ โดย 20 นาที เป็นการนวด โดยมี 3 โหมด ให้เลือก ได้แก่ โหมด Swing – เก้าอี้นวด ยกขึ้น สลับลบ และนวดคลายจุดไป โดยแต่ละรอบแรงที่กดจะค่อยๆ เพิ่มขึ้นนะ โหมดกดจุด – สำหรับคนชอบนวดแรงๆ หรือชอบนวดแผนไทย โหมดหลับสบาย – ตัวเก้าอี้จะปรับเป็นสำหรับนอน และนวดผ่อนคลายเบาๆครับ…

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

จาก Blog ที่แล้วที่ผมได้เขียนเกี่ยวกับตัวอย่างของ multiInstanceLoopCharacteristics โดยใช้ตัวอย่างเรื่อง กระบวนการของการขอเสนอรางวัลให้กับพนักงานดีเด่น ซึ่งลองเล่นไป เล่นมาแล้วพบปัญหา ดังนี้ Task “Evaluate Award” ได้ถูก Assign ให้เป็น Group โดยที่กรรมการแต่ละท่านเลือกไปทำครับ แต่มันสามารถ Claim ซ้ำกันได้ครับ แบบนี้ไม่ดีแน่ครับ ทางแก้ไขหล่ะ แบบที่ 1: แก้ไข Object ของ MultiInstance แล้วให้กำหนด User เป็น Assignee สำหรับ Task นั้นเลย แบบที่ 2:แก้ไขโดยการเพิ่ม Listener แล้วเขียน Code ขึ้นมาตรวจสอบครับ ** สำหรับใน Blog นี้ ผมใช้วิธีแรกครับ แต่จะแทรก ตัวอย่างของ Listener เข้าไปด้วยครับ ลุยกันเลยครับ สำหรับภาพรวมของกระบวนการ (Process) เหมือนเดิมครับ แต่จะแก้ Coding และ Config ข้างในมากกว่าครับ มาเริ่มกันเลยครับ ใน Script Task “Setup Reviews” ผมแก้จากการใช้ List มาเป็น Dictionary ครับ โดยให้ key = ชื่อคณะกรรมการ และ value = ผลการประเมินครับ ตาม Code ตัวอย่างเลย //create a collection to hold our multi-instance results. //ดึงข้อมูลผู้ใช้ออกมา def committee = [ ‘jame’, ‘john’, ‘peter’]; //สร้าง MAP เป็นข้อมูลแบบ Key/Value def…

[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…