[C#] Automate Control.InvokeRequired Code pattern

spaghetti code, DRY

Blog นี้จริงๆ แล้วเป็นการนำ Blog ที่เขียนค้างตอนปี 2014 (ช่วงที่อยู่กับ Project ที่ได้ แต่บ่น 555) มาเขียนต่อให้จบครับ แม้ว่าตอนนี้แนวทางการพัฒนาระบบเป็นแนว Web Application แล้ว แต่ยังมีงานบางส่วนที่ยังเป็น Desktop Application ครับ ปัญหา เวลาจัดการงานด้าน UI มักจะเจอปัญหาที่เจอประจำเลย InvalidOperationException Cross-thread operation not valid. Control accessed from a thread other than the thread it was created on. สาเหตุ เกิดจากตัว Control ของ WinForms ไม่เป็น Thread-Safe ครับ ทางแก้ไข มี 2 แบบครับ BackgroundWorker: ให้ Main Thread แอบสั่งทำงานแบบ Asynchronous ผ่าน Method dowork Invoke method: delegated จาก Main Thread ให้มาทำส่วนที่ต้องการแทนครับ คราวนี้ เราจะมา Focus เฉพาะในส่วนของ Invoke method Invoke method การใช้งานง่ายมาครับ มี Pattern ดังนี้ครับ ตัวอย่าง ปัญหาที่พบ Code ในเคสที่ต้อง delegated จาก Method InvokeRequired() มันเหมือนกันเลยครับ !!!! จะว่าไปมันก็ขัดกับหลัก DRY (don’t repeat yourself) ครับ แนวทางแก้ไข -…

[DB2] ตรวจสอบไฟล์ backup ด้วย db2ckbkp

IBM DB2

พอดีได้เจอเคสของลูกค้าว่า Database ไม่สามารถ Restore ได้ เพราะลองเข้าใช้งาน Application แล้วไม่เจอตัว Database ครับ สิ่งที่ต้องเป็นอย่างแรก ตรวจสอบไฟล์ Backup ก่อนครับ ว่าครบถ้วนสมบูรณ์ หรือไม่ครับ โดยตัว DB2 มีคำสั่งเตรียมมาให้อยู่แล้วครับ db2ckbkp พระเอกของเรา ตัว db2ckbkp ทำหน้าที่ตามชื่อครับ db2 check backup ครับ โดยมีรูปแบบการใช้คร่าว ดังนี้ จากคำสั่งข้างต้น มาลองดูรายละเอยีดเบื้องต้นกันครับ คำสั่ง db2ckbkp ใช้งานได้ทุก user ครับ แต่ต้องกำหนด Initialize db2 ที่ตัวแปร path ก่อนครับ -h แสดงข้อมูล header ของไฟล์ backup สุดท้ายเป็น ตัว File Backup โดยที่ User ที่เข้ามา Run command ต้องมีสิทธิ read file ด้วยครับ ผลการ Run : กรณีที่ไฟล์ Backup สมบูรณ์ ผลการ Run : กรณ๊ทีไฟล์ Backup มีปัญหา จากรูปจะบอกว่า LOG FILE ไม่สมบูรณ์ครับ ไฟล์ backup มีปัญหา ส่วนใหญ่เกิดจากอะไร ? Network หลุด ระหว่างที่ส่งไฟล์ครับ หรือ ในกรณีที่ disk ของเครื่องปลายทางเต็ม แต่เราอาจจะไม่ได้สังเกตุ และนำไฟล์ไปใช้งานต่อ Reference db2ckbkp – Check backup command – IBM Documentation

[CR] รสนิยม ข้าวพะแนงสันคอเนื้อออสเตรเลีย

สำหรับเมนูนี้เป็นเมนูที่ช่วงแรกๆใน 7/11 ของหมดไวมากครับ ส่วนผมรู้ตอนหลังๆแล้วครับ เลยเอามา Review ช้ากว่าชาวบ้านเค้าเลยครับ อุ่น-ข้าวพะแนงสันคอเนื้อออสเตรเลีย เมนูนี้อุ่นง่ายครับ แต่ถอดฟซองกระดาษออก และนำไปอุ่นผ่านไมโครเวฟได้เลยครับ ตัวกล่องมีตัวเจาะรูมาแล้วครับ เอานิ้วจิ้มไได้เลยครับ การตั้งค่าเครื่องสำหรับของที่บ้านผม ไมโครเวฟ 800 วัตต์ครับ เลยอุ่นความร้อนแบบ max 2 นาทีครับ และพัก จากนั้นอุ่นต่ออีก 30 วินาทีครับ ก็พร้อมทานแล้สครับ ชิม-ข้าวพะแนงสันคอเนื้อออสเตรเลีย สัมผัสแรกกลิ่นหอมมากครับ แต่ยังสู้เมนูกระเพราเนื้อของรสนิยมไม่ได้ครับ รสชาติ ละมุนลิ้น มันไม่เหมือนพแนงจากร้านอื่นๆ มีรสนมแบบเมนูเนื้อที่มีครับ จะรสจะโดดๆ แต่ไม่เผ็ด ส่วนเนื้อนุ่มกลืนง่ายครับ สรุป เมนูที่ควรค่าแก้การทานครับ เปลี่ยนคำจำเจจากอาหารกล่องของ 7/11 ได้ดีมากๆครับ ราคา 69 บาท ราคาอาจจะสูงกว่าข้าวกล่องทั่วไป แต่รสชาติคุ้มครับ รอบหน้าคงต้องหาทางไปลองแบบหน้าร้าน เห็นมีน้องบอกว่ามันจะหอม ละมุนกว่านี้มากกก

Software/Product Integration Strategy

หลายคนอาจจะเจอคำถามแนวๆว่า เพิ่ม Feature นี้เข้าไป หรือ Deploy ระบบที่ละส่วน มันมีแนวคิดการ Integrate หรือ ป่าวนะ ที่เป็น Guideline หรือป่าวนะ สรุปมีแนวทาง โดยมี 4 กลยุทธ์ที่ใช้กัน ดังนี้ครับ Big Bang Incremental Top-Down Button-Up Sandwich 1. Big Bang Big Bang ไม่มีลำดับอะไร เมื่อทุกคนทำเสร็จให้เทรวม และทดสอบรวมกันเดียว เหมาะกับ งานที่ไม่มีความซับซ้อน หรือมีขนาดเล็ก เพราะ ถ้าพลาดนี้หนังชีวิตเลยครับ แต่ต้องระวัง เนื่องจากเป็นการเทรวม หายังไม่ได้ตกลง Interface (Internal / External) กันก่อน ทำให้เกิดปัญหาตอนเอาทุก Component / Sub-System แต่ละอันมารวมกัน การทดสอบ หากมีข้อผิดพลาดเกิดขึ้น อาจจะทำให้หา Root-Cause ได้ยากขึ้น ตัวอย่าง Coding: การ Merge Feature ที่มี Dev ทำหลายๆคนกลับเข้าที่ Branch หลัก System: การ Deploy ระบบคลังสินค้า ที่มีการเชื่อมกับระบบบัญชีพร้อมกัน 2. Incremental Incremental มีการจัดลำดับ / ความสำคัญก่อนหลัง เช่น การทำ Core ขึ้นมาก่อน แล้วค่อยเพิ่ม Feature เข้าไปในแต่ละ Release เหมาะกับ งานที่มีขนาดใหญ่ จึงต้องแบ่งออกเป็น Component / Sub-System แผนงานยืดหยุ่นได้ เพราะ ใช้เวลาเก็บข้อมูล เพื่อมาปรับตัวระบบที่ละนิดเล็กบ้าง ใหญ่บ้าง สำหรับแนวทาง Incremental มี 3…

[.NET] Add UI เข้ามา แต่ View Designer ไม่ได้

Visual Studio

สำหรับวันนี้เป็นสรุปแนวทางปัญหาที่น่าจะเจอกันสำหรับคนที่ทำ Desktop App / Windows Forms App บน Visual Studio กันครับ ว่าบางที่ Add UI เข้ามาเพิ่ม แล้วเจอปัญหาว่า ถ้าอยากจะแก้ UI ต้องลงทุน เข้าไปแก้ Code แต่ที่จะออกแบบผ่านตัว Designer ได้ครับ ปัญหา Add UI เข้ามา แต่ View Designer ไม่ได้ สาเหตุ การแก้ไข – วิธีที่ 1: Exclude ไฟล์ที่มีปัญหาออกไป แล้ว Add เข้ามาใหม่ผ่านเมนู Add > Existing Item ครับ – วิธีที่ 2 : แก้ไข Tag XML ในไฟล์ .csproj โดยมีขั้นตอน ดังนี้

[OWASP] สรุป Secure Design: Threat Modelling

สำหรับวันนี้เป็น Blog สรุปจาก Session Secure Design: Threat Modelling โดยคุณนฤดม รุ่งศิริวงศ์ คร้บ โดยก่อนจะรู้จักกับ Threat Modelling ต้องมารู้จักกับคำว่า Attack Surface กันก่อนครับ Application Security Risk When We Do Threat Modeling ทำตั้งแต่ช่วง Phase Design เพราะการเจอปัญหาก่อน มันช่วยลด Cost ในการปรับปรุงแก้ไขได่เยอะ Attack Surface จุดเสื่ยงมีเปิดโอกาศในเกิดการโจมตีระบบได้ เพื่อให้ทราบว่า ส่วนไหนของระบบที่ต้องมีการ Review / Test ด้าน Security อะไรที่เป็น High Risk แล้วจะลด หรือจัดการมันอย่างไร – Attack Surface Analysis Defining the Attack Surface of an Application อะไรที่พาให้เข้าถึงระบบเราได้ พวก API ต่างๆ หรือ UI หน้าจอ ข้อมูลที่เก็บในระบบ อะไรที่เป็นจุดเสี่ยง แล้วที่กล่าวมามีการป้องกันไหม ? Identifying and Mapping the Attack Surface Entry / Exit Point Technology Design Measuring and Assessing the Attack Surface Measuring หาจุดที่จะโดนโจมตี เช่น API ที่ไม่ต้อง Login UI ที่กรอกข้อมูลต่างๆ Custom Component ที่พัฒนาเอง เช่น…

[CMMI] เมื่อ Dev อย่างเราๆ ไปเป็น Appraisal Team Member (ATM)

หลังจากบ่น Process ฝั่ง Service บ่อยๆเข้าก็เลย โดนจับส่งไปเป็น Appraisal Team Member (ATM) เลย CMMI Appraisal คือ อะไร ? เป็นการวัดศักยภาพ และวุฒิภาวะขององค์กร จากกระบวนการ (Process) เพื่อให้ได้รู้ถึง Strength / Weakness และ อื่นๆ โดยรูปแบบการประเมิน 4 แบบ Evaluation – ประเมินความสามารถ Benchmark – สอบจริง (Cert มีอายุ 3 ปี) Sustainment – ต่ออายุจาก Benchmark (ต่ออายุได้ 2 ปี) Action Plan Reappraisal – สอบซ่อม Appraisal Team Members (ATM) คนที่ช่วยทำ CMMI Appraisal และร่วมประเมินวัดศักยภาพ และวุฒิภาวะในแต่ละ Practices โดยมี Appraisal Team Lead (ATL) ที่ถูกส่งมาจาก CMMI Institute เข้ามากำกับดูแล ATM มีทั้ง Internal และ External เพื่อความโปร่งใสในการทำ Appraisal ครับ กว่าจะมาเป็น ATM ได้ ทุกคนต้องมี Certified CMMI V2.0 Associate ก่อนครับ (ถ้าอยากรู้เว่าเป็นอย่างไร มาดูที่ Blog บันทึกการสอบ Certified CMMI V2.0 Associate) ครับ โดยหน้าที่ของ ATM อย่างเราๆ มีหน้าที่ในช่วง…

[CMMI] สัญลักษณ์ตอนบันทึก Finding ในระหว่าง Appraisal มีอะไรบ้าง

find, investigate, black binocular on round device

เนื่องจากเดือนที่ผ่านมาผมได้เป็น ATM (Appraisal Team Member) สำหรับการประเมิน High Maturity ครับ เลยขอมาสรุปสัญลักษณ์ตอนบันทึก Finding ว่ามีอะไรบ้างครับ [S] Strength สิ่งที่เป็นจุดแข็งขององค์กร โดยสิ่งที่จับมาเป็นจุดแข็งได้ต้องอะไรที่นวัตกรรม (Innovation) ใหม่ๆ ที่มันมากกว่าการตอบตัว Intent และ Value ของแต่ละ Practice นวัตกรรม (Innovation) ใหม่ๆ คือ อะไร ? เป็นสิ่งที่หลายๆองค์กรยังไม่ได้ทำกัน ไม่จำเป็นต้องเป็นการนำเทคโนโลยีมาทำให้เป็น Automate อย่างเดียวเท่านั้นครับ อาจจะเป็นแนวคิดก็ได้ครับ เช่น มีการเสนอ Tailoring Guide ของแต่ละ Process โดยการอนุมัติ Tailoring ต้องไปคำนึงถึง PPB / PPM ขององค์กรด้วย เป็นต้น [W] Weakness สิ่งที่เป็นจุดอ่อนขององค์กร เพราะยังขาด หรือ ไม่ตรงกับ Intent และ Value ของ Practice ขององค์กร หรือ จะมองว่าเป็น Gap จากตัว Model ของ CMMI ที่ยังค้นพบอยู่ สำหรับ Weakness ไม่ได้ตัว Model ยังไม่ได้บอกว่าความรุนแรงว่าเป็น ขนาดเล็ก หรือ ใหญ่ครับ [N] Note เอาไปบอกข้อมูลเพิ่มเติมครับ จาก Strength และ Weakness [IO] Improvement Opportunities สิ่งที่องค์กรยังไม่ได้ทำ แต่ควรทำนะ เพื่อให้เกิด Performance ขององค์กรที่ดีครับ ถ้าเป็นการประเมินแบบ Evaluation จะเป็น Recommendation แทนครับ [IP] Improvements in…

[MSSQL] ทดสอบ Legacy App เจอ Error [DBNETLIB][ConnectionOpen (SECDoClientHandshake()).]SSL Security error.

Microsoft SQL Server

ไหนๆก็มี MSSQL Server 2019 Container แล้ว เลยลองทดสอบนำเอา Legacy App (VB6) มาลองเชื่อมต่อดูพบว่าบางเครื่องใช้งานได้ และบางเครื่องใช้งานไม่ได้ครับ หลังจากทดสอบเอา Code มา Debug ดู พบว่าเจอ Error [DBNETLIB][ConnectionOpen (SECDoClientHandshake()).]SSL Security error. ลองไล่สาเหตุ Config ของ Legacy App (VB6) ใช้ Microsoft SQL Server Native Client 11.0 (SQLNCLI11) บางเครื่องใช้งานได้ และบางเครื่องใช้งานไม่ได้ เนื่องจากตรวจสอบใน ODBC 32 bits ระหว่างเครื่องที่ใช้งานได้ และใช้งานไม่ได้ พบว่ามันขาด Library Microsoft SQL Server Native Client 11.0 (SQLNCLI11) เหมือนจะได้ทางออกแล้ว แต่ปรากฏ Microsoft SQL Server Native Client 11.0 (SQLNCLI11) ไม่รองรับ Windows 10 ซะงั้น (ตอนแรกยังลงได้ แต่น่าจะโดนบาง Update ไปครับ) และทาง Microsoft ประกาศไม่พัฒนาต่อแล้วตาม Support Policies – SQL Server Native Client | Microsoft Docs ทางออกของปัญหาครับ ถ้าลองติดตั้ง Microsoft SQL Server Native Client 11.0 (SQLNCLI11) ใช้วิธีนี้ได้ครับ แต่มีประเด็นเรื่อง Support เปลี่ยนไปใช้ Microsoft OLE DB…

[DB2] QUIESCE คือ อะไร

black and gray mining rig

สำหรับการ QUIESCE การให้อธิบายมันเป็นการปิดระบบ เพื่อให้ Admin เข้ามาบำรุงรักษาครับ โดยอาจจะเป็นการติดตั้ง Application หรือ Backup Database เป็นต้นครับ DB2 QUIESCE ใช้ได้ทั้งกับ Database และ Instance ครับ โดยเป็ยการบังคับ User ที่ไม่ใช่ Admin ออกไปจากระบบครับ หลังบำรุงรักษาระบบเสร็จ เปิดให้ User เข้าใช้งานได้ ด้วยคำสั่ง db2 unquiesce database ตัวอย่างการใช้งาน โดยเป็น Script Backup Database ครับ ที่ใช้คำสั่ง quiesce สำหรับเตะ user ที่ไม่เกี่ยวข้องออก และเมื่อ backup เสร็จสิ้นใช้คำสั่ง unquiesce เพื่อเปิดใช้งานระบบ ปัญหาที่พบ QUIESCE SQL20157N SQL20157N: User with authorization ID <<authorization-ID>> failed to attach to a quiesced instance, or connect to a quiesced database or a database in a quiesced instance which is in the following quiesce mode: <<quiesce-mode>> สาเหตุ และการแก้ไข (ขึ้นกับบริบท) ถ้าเกิดระหว่างที่ Admin กำลังปิดบำรุงรักษาระบบ อันนี้ถูกต้องแล้วครับ แต่ถ้าหลังบำรุงรักษา แล้ว Application Error แบบนี้ แสดงว่าตัว Database หรือ…