[UI] เปลี่ยน UI นิดเดียว แต่ความรู้สึกมันต่างกัน

จริงๆ ผมว่า Blog ตอนนี้ อาจจะไม่เกี่ยวกับ UX UI โดยตรงนะครับ มี screen อันนึง ที่ระบบเดิมมีเจ้าตัว Progress Bar เอาไว้แสดงสถานะการทำงาน ซึ่งระบบมันทำงานประมาน 2-3 ชั่วโมง แต่พอปรับเปลี่ยนระบบใหม่ มีการปรับอัลกอริทึมใหม่ และแก้ตาม Requirement ที่เพิ่มเติมมา ปรากฏว่ามันเร็วขึ้นจนเหลือ 30 วินาที ทาง DEV เลยตัดเจ้าตัว Progress Bar ออกไป มาทางฝั่ง BA /Marketing และ User บ้าง พอตัดออกเสร็จ มองว่าระบบมันไม่มี Process การประมวลผลเลยซะงั้น เซงเลยยย กลายเป็นว่าพอมีปรับแก้อะไรคิดว่าไม่ได้รับผลกระทบ T__T สุดท้ายอยากจะสรุปว่า ถ้าปรับอะไร ควรมองภาพรวมด้วย เหมือนการปรับ UX/UI มันทำให้ feeling ของหน้าจอเปลี่ยนไป จนอาจจะทำให้คนอื่นๆ ที่ไม่ใช้คนทำเข้าใจผิด คิดว่ามันไม่ยากและขอแก้เปลี่ยนโน่นนี่เพิ่ม  

เมื่อฉันซื้อ LTF ครั้งแรก

ปลายปีที่ผ่านมาครั้ง หลายจากที่รอมาทั้งปี ผมได้ตัดสินใจซื้อ LTF โดยเลือกใช้บริการของธนชาตครับ กองทุน T-LTFD ครับ สาเหตุที่เลือกกองนี้ รูปแบบการลงทุนเน้นไปทางสายกลางไม่ได้เน้น Sector ใดหนักเกินไปครับ มีปันผล เป็นการลดความเสี่ยงจากการถือหน่วยลงทุนในระยะยาวครับ สำหรับแนวทางการเลือกกองทุน ผมขอไม่อธิบายนะครับ เว็บอื่นๆมีแนะนำเยอะเลย สิ่งที่ผมสนใจ คือ LTF กับการยื่นภาษีมากกว่า เพราะสิ่งที่หลายๆเว็บสอน คือ การเลือกซื้อ แต่ไม่ได้บอกว่า เราจะใช้ลดภาษีได้อย่างไรครับ ผมเคยเจอคนรุ้จักที่พลาดกันมาหลายคนแล้วที่ซื้อ LTF ตอนสิ้นปี แล้ว Key ยื่นภาษีออนไลน์ทันทีครับ สิ่งที่เราต้องรอ เมื่อซื้อ LTF คือ เอกสารยืนยันการซื้อครับ เพราะถ้ายื่นไปก่อน แต่ไม่มีหลักฐานกาซื้อ LTF กว่าจะได้เงินภาษีคืนอีกทีนี่รอกันยาวเลยนะครับ

[AOP] Aspect Oriented Programming

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

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

หลังจากที่ส่องๆ มาแล้ว เรื่องการลง Docker มาสักพัก และลองหาลู่ทางใช้ Hyper-V ตอนนี้ผมเลือกที่ลง Docker Toolbox ก่อนครับ ทำไมผมถึงใช้ Docker Toolbox มันรวม Tools ที่จำเป็นมาให้แล้ว ไม่ต้องลงทีละอนให้เสียเวลาครับ แล้ว Tools ทีมี มีอะไรบ้าง Docker client – เป็นตัว สำหรับสร้าง images และ containers ของ Docker Docker Machine – ตัว Linux ที่เป็นฐานราก มี Library ที่จำเป็นให้ Docker ทำงานได้ Docker Compose – เครื่องมือที่ช่วยจัดการ Docker แต่ละอันให้ง่่ายขึ้น Kitematic GUI Tools สำหรับ Docker Docker QuickStart – Command line ของ Docker ครับ เข้าไปปุ๊บมันตรงหา Docker เลย Oracle VM VirtualBox – เอาไว้รัน VM ครับ เพราะ Docker มันมีพื้นฐานมาจาก Linux แตเด๊๋ยวบทความถัดไป จะเปลี่ยนเป็น Hyper-V แทนครับ Git – ไ่แน่ใจเหมือนกันวาให้ลงทำไม ขั้นตอนการลง ลงง่ายครับ กด 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 ตัวนี้ ผมใช้มานานแล้วครับ หลังจากบอกจุดเด่น/จุดด้อยไปแล้ว ของแต่ละ Plugin ที่ผมคิดว่าดี และเหมาะกับ WordPress นะครับ สำหรับผมตอนนี้พยายามใช้ Crayon Syntax Highlighter เพราะ Config น้อยและไม่ต้องจำ Tag พิเศษเพิ่มนะครับ แสดง Highlight จากที่มาได้หลายแหล่งครับ และอาจจะเพิ่ม โดยอาจจะลิงค์จาก Git หลังจากที่สมัครไว้มานานเลย แต่ยังไม่ได้ commit อะไรขึ้นไป 555

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

หนึ่งปีผ่านไปไวเหมือนโกหก จากปีเคยสรุปสิ่งที่ผ่านมาของปี 2014 คราวนี้มาเป็นที่ของปี 2015 ที่เพิ่งผ่านไปครับ ถ้าดูจาก Jet Pack ที่เก็บสถิติแล้วจะพบว่าผมขยันเขียน Blog ที่สุดก็ข่วงต้นปีนะครับ หลังๆก็ว่างเว้นไป เพราะ ยังจัดปล่อยให้งานเข้ามารบกวนเวลาส่วนตัวมาจนเกินไป (เอางานกลับมาทำเพื่อให้โปรเจค มันสามารถ Go Live ได้ ปัญหาหลักๆของกรรมกรไอทีอย่างเราเลย เรื่องการประเมินเวลาทำงานจริง กับเวลาที่ลูกค้าต้องการ) โดยในปีนี้มี Blog ยอดนิยมที่มีผู้ชมทั้งหมด 5 เรื่อง ดังนี้ [.NET] ปรับ Speed ให้ Visual Studio เร็วแรงทะลุนรก (ปี 2015) [REVIEW] Lenovo P90 หลังใช้งานจริงมา 2 สัปดาห์ (ปี 2015 – หวังว่ามีใครจะมาจ้างให้รีวิวจริงๆจังบ้าง อยากได้ตังค์ 555) [JAVA] Abstract คือ อะไร และต่างกับ Interface อย่างไร (ปี 2014 – จำได้ว่าเคยมีปรับแกข้อมูล จากที่มีคนอ่านบอกว่าอ่านยากในปี 2015) ลองตัดแว่นกับร้านแว่นตาคนจน (ปี 2014) [C#] สรุปข้อดี-ข้อเสียในการอ่านกับเขียน Excel จากวิธีต่างๆ (ปี 2014) จากข้อมูลทั้งหมดพบว่า Blog ที่มีคนสนใจจะมีของปี 2015 แค่ 2 ฺBlog เท่านั้นครับ ส่วนที่เหลือจะเป็นของปีก่อนหน้านะครับ ถัดมาดูสถิติการเข้าชมของเว็บ โดยผมได้นำข้อมูลมาจาก 2 แหล่ง ดังนี Google Analytics นับจาก Unique User (ภาพที่ 1) นะครับ คราวนี้คนจะมาจาก Google ส่วนใหญ่นะครับ เพราะหลังๆไม่ค่อยได้แชร์ Blog แล้ว ถัดมาก็เป็นสัดสวนผู้ชมนะครับ และก็ช่วงเวลาที่มีการชม Blog…

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

หลายๆคนอาจจะเคยเห็นภาพนี้แล้วนะครับ มันสื่อถึงอะไร หละ ? บางคนอ่านแล้ว ก็หัวเราะเลย บางคนยังไม่ Get  จากภาพนี้ในมุมของผม ตีความถึงการมองปัญหาครับ ทุกปัญหา เราไม่สามารถใช้วิธีการเดียวกันจัดการกับมันได้ เราต้องค่อยๆลับปัญหาเปลี่ยนมุมมองบ้าง โดยในแง่ของการพัฒนา Software สิ่งที่มาขยาย ปรับ องศา มุมมองที่มีต่อปัญหา ได้แก่ Requirement(ต้องชัดเจน ใช้ได้แค่ทฤษฏีนะ แต่ในความเป็นจริงก็รู้ๆกันอยู่ 555) Skill ที่ใช้ในการวิเคราะห์ปัญหา อันนี้อาจจะต้องใช้ประสบการณ์สะสมนะครับ ว่าแต่ละปัญหาเกิดจากอะไร ตรงนี้เป็นปัญหาสำหรับ Dev ส่วนใหญ่ที่ผมเจอมาเลย คือ เขียนโปรแกรมได้ แต่พอโปรแกรมผิิดขึ้นมา ยังไม่สามารถวิเคราะห์จุดที่ผิดได้ครับ (ตามรูปด้านบนที่ผมเอามาอ้างเลย) ความเข้าใจของคนกลุ่มต่างๆ ต่อชิ้นงานที่ทำ ตั้งแต่ User / PM / BA / SA และ DEV (อันนี้เคยมีภาพล้อเลียน ที่เกี่ยวกับการสรร้างชิงช้าขึ้นมา แต่ในมุมมองของแต่ละฝ่ายต่างกันไปคนละทางเลย) ความเชี่ยวชาญในเครื่องมือ และภาษาที่ใช้ ถ้ารู้เรื่องพวกนี้ มันจะช่วยได้ในแง่ของ Performance คิดตั้งแต่ตอน Code ดีกว่ามาไล่ปรับระบบที่ทำงานถูกต้องแล้ว การประุชม ปรึกษาครับ กับทีม และก็ User ครับ เพราะ บางครั้ง เรามี Bias อยู่ ทำให้เราอาจจะมองว่าวิธีนี้ดีมากกกกก จนทำให้ความเสี่ยงของปัญหามันหายไปดิ้อๆ แต่จู่ๆมาโผล่ตอนใช้งานจริง O.o (ผมเคยเจอประสบการณ์จริงเลย ที่ Process/ Business มันโผล่มาลอยๆ ดูมีหลักการ แต่ไม่เคยไปคุยกับ User เลย พอทำเสร็จ ก็ตู้มมมมมม ผิด) และอื่นๆ (แต่ผมนึกออกได้เท่านี้แหละ 555)

[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 ปัดขึ้น สำหรับแนวคิดนี้นิยมใช้ในการบัญชี การเงินครับ หลังจากดู Legacy Code เรามาดูอัลกอริทึมที่ VB6 ใช้ดีกว่าครับ เจ้า VB6 ใช้อัลกอริทึมในการ Rounding คือ Banker’s Rounding สาระสำคัญ คือ ต่ำกว่า 4 ปัดลง มากกว่า 6 ปัดขึ้น ปัญหา คือ เลข 5 เนี่ยแหละ ต้องดูตัวเลขข้างหน้า 5 หากเป็นเลขคี่ ก็ให้ปัดขึ้น หากไม่ใช่ก็ให้ปัดเศษทิ้ง (นายแบงค์นี่น่าเลือดจริงๆครับ) ระบบเดิมที่ผมไป Cross Check ใช้ Function Round5up ที่แก้ปัญหานี้เรียบร้อยแล้ว ขอเสริม อีกนิดนึง คือ ในคอม ถ้าเราป้อน 1.50 มันไม่ได้เก็บ 1.50 ลงไปนะครับ มันแปลงเป็นเลขฐาน 2 เนี่ยแหละ โดยอาจจะเป็น 1.4999999999999 แล้วมาใช้อัลกอริทึมในการ Rounding อีกทีนะครับ (เดี๋ยวไปเขียน Blog แยกไปอธิบายอีกทีครับ) จริงๆ .NET กับ VBA ก็ใช้วิธี Banker’s…

[DB2] Set DB2CODEPAGE

CODEPAGE คือ อะไร ? CODEPAGE มองง่ายๆเลย คือ คำสั่งที่บอกให้เครื่องคอมพิวเตอร์รู้ว่า เรากำลังใช้ภาษาอะไรอยุ่กับมัน เช่น ภาษาไทย ภาษาอังกฤษ ซึ่ง Vender แต่ละค่ายได้แก่ Microsoft, SAP, ORACLE เป็นต้น ออกมาตรฐาน CODEPAGE ของตัวเองมา อย่างภาษาไทยมี CODEPAGE เช่น Windows-874,Tis-620,UTF-8 ทำไมภาษาไทย อันเดียวถึงมีหลากหลาย CODEPAGE ? เพราะ แต่ละเจ้าต้องการเป็นผู้นำ และก็เป็นเรื่องประสิทธิภาพด้วย เพราะ ถ้า Vender  พัฒนา CODEPAGE เอง ตัว Vender สามารถจะโมปรับแต่งให้เข้ากับระบบงานของตัวเองได้ง่ายด้วย แต่หลังๆพบว่าปัญหามันเยอะมากกกกก ในเรื่องความหลากหลายของ CODEPAGE จริงได้มีการออกมาตรฐานกลางอย่าง UTF-8 ขึ้นมาครับ CODEPAGE มีในระดับไหนบ้าง ? มีหลายระดับเลย ได้แก่ ระดับ OS ระดับ Database ระดับ App ที่เรา Coding อยู่ เช่น Java ใช้ UTF-8 เลย 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 ทางแก้ต้องเช็ค…