[AOP] Aspect Oriented Programming

พอดีได้รื้อพื้นความรู้เก่าๆ และก็เจอเรื่องน่าสนใจมาเขียน blog พอดีเลย เข้าเรื่องกันเลยดีกว่า AOP เนี่ย หรือ ชื่อทางการของมัน คือ Aspect Oriented Programming โดยเจ้า AOP เป็นแนวคิดนึง ที่เป็น Guideline ที่ช้วยในการพัฒนาระบบครับ เหมือนกับ OOP ที่มองทุกอย่างเป็น Object ครับ !!! AOP ไม่ได้มาแทนที่ OOP นะครับ !!! หลายคนที่อ่านมาถงตรงนี้อาจจะงงกัน มองง่ายๆว่าเป็นส่วนเสริมของ OOP ครับ เพราะ OOP เนี่ย ถ้าเรานำมา Implement พัฒนาระบบ ระบบหนึ่ง มันมีเรื่องที่เราต้องสนใจมากมาย ไม่ได้สนใจแต่ตัว Business เพียงอย่างเดียวนะครับ อาทิ เช่น เรื่อง Security และ Log เป็นต้นนะครับ ตัวอย่าง เช่น การที่เราสร้าง Class หนึ่งขึ้นมา มีหน้าที่ในการตัดจ่ายสินค้าในโกดังนะครับ โดยหน้าที่ของ Class มีหน้าที่คร่าว ดังนี้ จากตัวอย่างข้างต้น สิ่งที่ Class นี้ความมีจริงๆ ควรเป็นสิ่งที่อธิบายในเรื่องของ Business ครับ พวกตัดจ่ายสินค้า, ดูยอดคงเหลือ ส่วนเรื่องบันทึก Log (ตัดออกได้ แต่พอโปรแกรมมีปัญหานี่ ยาวเลยนะกว่าจะ Tracking ได้ และตรวจสอบสิทธินั้นไม่จำเป็น แต่ก็เอาออกไม่ได้ 555 ซึ่งก็แล้วแต่การเก็บ Requirement และการออกแบบระบบ ไอ้สองส่วนหลังเนี่ยแหละ มันคือ Cross cutting concern เรียกแบบที่ผมเข้าใจนะ มัน คือ สิ่งที่เราต้องสนใจ แต่มันเกี่ยวพันกับสิ่งในสิ่งที่เราสนใจจริงๆ ลองมาดูที่ Code กับมันมีส่วนของ Business กับส่วนที่เราต้องสนใจเพิ่มลงไป (พวก Log, Security เป็นต้น)…

มาลองลง Docker Toolbox กัน

หลังจากที่ส่องๆ มาแล้ว เรื่องการลง Docker มาสักพัก และลองหาลู่ทางใช้ Hyper-V ตอนนี้ผมเลือกที่ลง Docker Toolbox ก่อนครับ ทำไมผมถึงใช้ Docker Toolbox มันรวม Tools ที่จำเป็นมาให้แล้ว ไม่ต้องลงทีละอนให้เสียเวลาครับ แล้ว Tools ทีมี มีอะไรบ้าง ขั้นตอนการลง ลงง่ายครับ กด Next ไปเรื่อยๆ แต่อย่าลืมอ่านข้มูลด้วยนะครับ สำหรับตัว Hyper-V เดี๋ยวรอ Blog ตอนหน้านะครับ ว่าเราสามารถเปลี่ยนตัว Virtual Box ไปใช้ Hyper-V ได้อย่างไรครับ  

[WordPress] แสดง Source Code อย่างมีสีสันบน Blog ของเรา

wordpress

ผมได้เขียน Blog มานานหลายปีแล้ว ซึ่งใน Blog แต่ละตอน อาจจะต้องมีแทรก Code snippet บ้าง เพื่ออธิบาย หรือเป็นตัวอย่างให้กับผู้อ่านได้เห็นภาพนะครับ โดยวันนี้ผมเลยอยากจะมีแนะนำ Plug-in ช่วยแสดง Source Code อย่างมีสีสันบน Blog ของเรา จากประสบการณ์ที่ได้ลองมาหลายตัวนะครับ Crayon Syntax Highlighter 📌 จุดเด่น 📌 จุดด้อยมัน SyntaxHighlighter Evolved สำหรับ Plug-in ตัวนี้ ผมใช้มานานแล้วครับ 📌 จุดเด่น 📌 จุดด้อย Enlighter – Customizable Syntax Highlighter สำหรับ Plugin นี้ผมย้ายมาใช้ตอนปี 2022 ครับ เหมือนตัวก่อนหน้าอย่าง Crayon Syntax Highlighter / SyntaxHighlighter Evolved มันหน่วง เลยย้ายมใช้ 📌 จุดเด่น เป็นตัวแรกที่รองรับ gutenberg และมีข้อดีของ 2 Plugin ก่อนหน้า หลังจากบอกจุดเด่น/จุดด้อยไปแล้ว ของแต่ละ Plugin ที่ผมคิดว่าดี และเหมาะกับ WordPress นะครับ สำหรับผมตอนนี้พยายามใช้ Crayon Syntax Highlighter เพราะ Config น้อยและไม่ต้องจำ Tag พิเศษเพิ่มนะครับ แสดง Highlight จากที่มาได้หลายแหล่งครับ และอาจจะเพิ่ม โดยอาจจะลิงค์จาก Git หลังจากที่สมัครไว้มานานเลย แต่ยังไม่ได้ commit อะไรขึ้นไป 555

2015 ผ่านไป Blog นี้มีอะไรบ้างนะ

หนึ่งปีผ่านไปไวเหมือนโกหก จากปีเคยสรุปสิ่งที่ผ่านมาของปี 2014 คราวนี้มาเป็นที่ของปี 2015 ที่เพิ่งผ่านไปครับ ถ้าดูจาก Jet Pack ที่เก็บสถิติแล้วจะพบว่าผมขยันเขียน Blog ที่สุดก็ข่วงต้นปีนะครับ หลังๆก็ว่างเว้นไป เพราะ ยังจัดปล่อยให้งานเข้ามารบกวนเวลาส่วนตัวมาจนเกินไป (เอางานกลับมาทำเพื่อให้โปรเจค มันสามารถ Go Live ได้ ปัญหาหลักๆของกรรมกรไอทีอย่างเราเลย เรื่องการประเมินเวลาทำงานจริง กับเวลาที่ลูกค้าต้องการ) โดยในปีนี้มี Blog ยอดนิยมที่มีผู้ชมทั้งหมด 5 เรื่อง ดังนี้ จากข้อมูลทั้งหมดพบว่า Blog ที่มีคนสนใจจะมีของปี 2015 แค่ 2 ฺBlog เท่านั้นครับ ส่วนที่เหลือจะเป็นของปีก่อนหน้านะครับ ถัดมาดูสถิติการเข้าชมของเว็บ โดยผมได้นำข้อมูลมาจาก 2 แหล่ง ดังนี Google Analytics Jetpack Sitestat Jetpack Sitestat เป็นการสรุปข้อมูลทั้งหมดนะครับ โดยเว็บ Blog ของผมมีผู้ชมมากที่สุดจาก Thailand, USA และ LAOS (ปีที่แล้วเป็น Australia) ตามลำดับ ดังรูปครับ ก่อนจากกัน ผมขอขอบคุณผู้อ่านทุกท่านที่ติตตามอ่าน Blog ผมมาตลอดครับ บางตอนอาจจะเขียนงงบ้าง สับสนบ้าง ผมขออภัยผู้อ่านทุกท่านมา ณ ที่นี้ครับ สำหรับใครที่ยังไม่ Like Fanpage สามารถตามมาได้ที DebuggingSoft ครับ 😀

คิดให้เยอะ ลงมือทำให้น้อยที่สุด

หลายๆคนอาจจะเคยเห็นภาพนี้แล้วนะครับมันสื่อถึงอะไร หละ ?บางคนอ่านแล้ว ก็หัวเราะเลยบางคนยังไม่ Get  จากภาพนี้ในมุมของผม ตีความถึงการมองปัญหาครับ ทุกปัญหา เราไม่สามารถใช้วิธีการเดียวกันจัดการกับมันได้ เราต้องค่อยๆลับปัญหาเปลี่ยนมุมมองบ้าง โดยในแง่ของการพัฒนา Software สิ่งที่มาขยาย ปรับ องศา มุมมองที่มีต่อปัญหา ได้แก่

[DB2] ลองใช้ Execution Plan เพื่อดูว่า Query ที่เขียนนั้นแย่ หรือไม่

IBM DB2

บทความแรกของปี 2016 เลย (จริงๆ Plan ว่าจะเขียนนานแล้ว แต่ติดงานประจำที่ Change บ่อยมากๆ) วันนี้เลยไปเจอ Shell Script ของ AIX ตั้งนึง ที่ทำหน้าดึงข้อมูลมาใส่ใน Temp Table และส่งออกเป็น Text File ไประบบอื่นผ่าน FTP แต่ปัญหา คือ ว่ามันช้ามากกกกกกกกกกกกก รันเกือบ 20 นาทียังไม่ออกเลย จาก Query ตัวอย่าง เราจะพบว่า มัน Self Join เยอะมากก ซึ่งใน DBMS ถ้าตัวเจ๋งๆ มันจะแลาดพอที่จะแปลง Query ให้ดีขึ้น หรืออย่างน้อยมี Execution Plan ช่วยตรวจสอบครับ (ราคา License ของ DB แต่ละเจ้าที่มันแพงๆ ก็เพราะ Feature เหล่านี้แหละ) งานที่ทำอยู่ DB2 เลยลองใช้ Execution Plan บน Toad และกัน ตัว IBM Data Studio มันโคตรกินแรม 5555 Execution Plan ที่ได้ครับ พบว่ามันมีส่วนของ Table Scan เยอะมากกกกครับ จำเป็นที่จะต้องลง Table Scan ให้น้อยที่สุด โดยการเพิ่ม Index ครับ การเพิ่ม Index ที่ดี เราต้องมาดู Query ที่เราใช้กันบ่อยๆก่อนนะครับ เพราะ ถ้าเพิ่ม Index ไม่เหมาะสมมันส่งผลกับการ Insert/Update นะ และตอนนี้จากการ Scan Query คร่าวๆ ดูแล้วพวกว่ามีการ Self join…

[.NET] ปัญหาราวๆ กับตัวเลขจอมแสบ

หากได้ทำงานเกี่ยวกับระบบด้วยการเงินแล้วเนี่ย ตัวเลขสำคัญมากนะครับ ปัญหาของผมเกิดจากการพัฒนาระบบงานบน .NET ด้วย C# แล้วต้องไปเทียบตัวเลขกับ ระบบงานที่เป็น VB6 แล้วปรากฏว่า มันหายไป 0.01 เลขปริศนาที่หายไป แต่ฝ่ายบัญชีไม่ยอมมมมมม ถ้าหายไปสัก 50 ล้าน มันยังหาได้ง่ายกว่าเลย แล้วใครหละที่เป็นโจร ? จริงแล้วมันเป็นปัญหาที่สะสมมานานตั้งแต่ของ VB6 ที่มีการปัดทศนิยมเศษ 5 แปลกๆ ทำให้ทีมที่ทำระบบเดิมในยุคนั้นมีการ Custom Function ขึ้นมาแก้ปัญหาจุจิกนี้ โดยเฉพาะครับ ซึ่งมีแนวคิดว่าเจอ 5 ปัดขึ้น สำหรับแนวคิดนี้นิยมใช้ในการบัญชี การเงินครับ ขอเสริม อีกนิดนึง คือ ในคอม ถ้าเราป้อน 1.50 มันไม่ได้เก็บ 1.50 ลงไปนะครับ มันแปลงเป็นเลขฐาน 2 เนี่ยแหละ โดยอาจจะเป็น 1.4999999999999 แล้วมาใช้อัลกอริทึมในการ Rounding อีกทีนะครับ (เดี๋ยวไปเขียน Blog แยกไปอธิบายอีกทีครับ) จริงๆ .NET กับ VBA ก็ใช้วิธี Banker’s Rounding ในการ Round นะครับ หลายคนคงคิดว่าปัญหาทศนิยม Diff คงไม่จบแล้ว แต่จริง Microsoft .Net Framework ได้แก้ปัญานี้เรียบร้อยแล้ว ตั้งแต่ .NET Framework 2.0 แล้วครับ โดยเพิ่ม Enum อีกตัวนึงให้กับ Function Math.round ชิ้อ MidPointRounding โดยมี Config 2 ตัว ดังนี้ มาลองตัวอย่างการ Round ดีกว่า หวังว่าบทความนี้จะช่วยผู้อ่านหลายๆคนที่ประสบปัญหากับเรื่องเศษทศนิยม Diff นะครับ

[DB2] Set DB2CODEPAGE

CODEPAGE คือ อะไร ? ทำไมภาษาไทย อันเดียวถึงมีหลากหลาย CODEPAGE ? CODEPAGE มีในระดับไหนบ้าง ? มีหลายระดับเลย ได้แก่ DB2 ดู CODEPAGE ได้อย่างไร คำสั่งที่ใช้ในการ SET CODEPAGE เช่น Windows- 874 สำหรับ ERROR CODE ที่ดูแล้วเป็นเรื่อง CODEPAGE มี ดังนี้ SQL0332N  Character conversion from the source code page “874” to the target code page “UNKNOWN” is not supported.  SQLSTATE=57017

[DB2] เปิดใช้งาน Hierarchical Queries

IBM DB2

Hierarchical queries อันนี้จริงๆเป็น Feature ลับของทาง Oracle ครับ โดยนำมาช่วยให้สามารถ Query ข้อมูลยาก และซับซ้อนได้ง่ายขึ้นครับ เช่น มีข้อมูล Company อยากรู้ว่า Company รายการนี้ มีบริษัทลูกกี่ตัว เป็นต้นครับ (อันนี้เดี๋ยวของไปเขียน Blog ยกอีกตอนครับ หุหุ) สำหรับการเปิดใช้ Feature Hierarchical queries สามารถใช้คำสั่งง่ายๆ ดังนี้ ข้อควรระวัง: การเปิดใช้ Hierarchical queries นั้นช่วยให้สามารถ Query ข้อมูลแบบลำดับขั้นได้แล้ว แต่ Performance ของ DB จะช้าลงด้วยนะครับ และ SQL จะมีรูปแบบพิเศษ ทำให้ยากต่อการ Port ไป DBMS ตัวอื่นๆ Reference: Hierarchical Queries