Requirement ผิดแค่ลบหนึ่งวัน !!!!

เมิ้อลูกค้าสั่งแก้โปรแกรม

ว่าจะไม่เขียน Blog นี้แล้ว แต่มันอดเขียนไม่ได้จริง กล่าวถึง DataSet LQ1 ของ BOT แหละ Site ที่จ้างบริษัทที่ผมรับเงินเดือนไปทำเนี่ย ไม่รู้ว่าที่ต้องส่ง BOT จริงๆ ต้องส่งอย่างไร มันเลยเป็นปัญหาที่ว่า UAT บน Production เนี่ยแหละ (แล้วมันมีช่วงการ UAT ไปทำไม ในเมื่อ User ต้องเซ็นผ่านให้ตรงกับ KPI องค์กร) มาที่ Timeline ของ DataSet ชุดนี้ก่อน 2015 (ช่วงต้นปี) : เริ่มทำระบบนี้แหละ หลังจากไม่มีใครกล้าเสี่ยงมาทำ ตอนนี้เข้าใจแล้ว ลึกซึ้งงง 2015-06: ส่งให้ User UAT และจบช่วงต้นเดือน 8 และขึ้น Production เรียบร้อย 2015-08 (ช่วงสิ้นเดือน) : BOT มีประกาศให้ใช้ข้อมูล ณ วัน Settle 2015-09-30 : ปรับแก้เสร็จ ส่งให้ไปใหม่ จำวันแม่นครับ User ขอเปลี่ยนเอาราคาตลาด T-1 แทน 2016(ช่วงมกราคม) : ส่งโปรแกรมใหม่ไปให้ตรวจ และตรวจผ่านด้วย !!!!! 2016-03-xx : หน่วยงานใหม่ของ Site ที่ทำโผล่มาบอกว่ามันคิดผิดนะ และเป็น User ที่ใช้งาน DataSet นี้ด้วย ปัจจุบัน : Dev ก้มหน้ารับชะตากรรมแก้งานต่อไป และไปเจออะไรที่มันขัดแย้งมากเลยเขียน Blog เลย มาที่ฝั่ง User ก่อน ไม่รู้สาระของตัว DataSet ว่าต้องส่งอะไรให้ BOT มาฝั่งทีม BA บ้าง ไม่ศึกษาเนื้อหาว่า…

[JS] Functional Programming

function เป็น Input หรือเป็น Parameter ได้ function Composition เอา Function หลายๆอันมาทำงานร่วมกัน toUpper Check Pattern และอื่นๆ เมื่อมี function หลายๆออัน เรายุบรวมมันว่าเป็น Service เช่น EmailValidator เกิดจากการเอา Function หลายๆตัวอย่าง toUpper หรือ Check Pattern มาทำงานร่วมกัน Service หลายตัวทำงานร่วมกัน มันก็ คือ ตัว Use Case Use Case หลายตัวรวมกันได้เป็น Application    

[JS6] มาลองเล่น ECMAScript 6

หลังจาก Blog ตอนก่อน ก้าวเข้าสู่โลกของ Frontend เริ่มเล่น Nodejs ลงเพื่อให้ได้ตัว NPM มานะครับ คราวนี้ผมลองศึกษาตัว ECMAScript 6 โดยดูจาก GitHub ECMAScript 6 Tutorial ใส่ตัวอย่างจาก Git เข้ายก Mortgage Calculator ที่มี amortization และเราลองทำตามขั้นตอนที่ผู้เขียนแนะนำครับ ECMAScript 6 คือ JavaScript แหละ ที่ปรับเปลี่ยนให้ตามยุคสมัยมากขึ้น – Use Strict อันนี้มีมาตั้งแต่ ECMAScript 5 แล้ว แต่ถ้าใครมาจากภาษาที่แบบเคร่งอยากให้เปิดไว้ เช่น จริงๆ เรื่องนี้มีอีกหลายอันเลย เรื่อง use strict แต่เอาเท่านี้ก่อน JavaScript ใช้ reference pointer – เราไปยุ่งตรงๆไม่ได้ แต่มันอยู่เบื้องหลังให้เราใช้งาน – การประกาศตัวแปร ของเดิม var แล้วจะทำอะไรก็ได้ แต่ปัญหาของมัน คือ ตัวแปรประเภท var มี Scope เป็น Global ครับ ของใหม่เพิ่ม let / const เข้ามา let เหมือน var แต่มี Scope อยู่ใน Block ของการทำงานครับ จะเป็นโมดูล หรือ Function อีกตัวเป็น const เก็บค่างคงที ห้ามแก้ไขหลังประกาศ – Data Type ใหม่ Destructoring  – ดึงข้อมูลบางส่วนมาจาก Array ใหม่  template string แทนที่เราต้องเอาตัวแปร + เชื่อม String…

ก้าวเข้าสู่โลกของ Frontend เริ่มเล่น Nodejs

หลังจากทำงานในส่วนของ Backend พวก Web Service กับ WinApp มานาน เกือบๆ 3 ปี คราวนี้เริ่มลองก้าวออกมาฝั่ง Frontend บ้างครับ โดยตัวที่ผมเริ่มลงตัว Nodejs เพราะ Nodejs เป็น JavaScript ฝั่ง Server นะครับ มันดูขัดๆกับที่ผมจั่วหัวว่า “โลกของ Frontend” จริงๆ ส่วนทำไมผมถึงลงก่อน เพราะ มันมีตัว Package Manager อย่าง NPM มาในตัวครับ สำหรับในค่ายอื่นมีตัวที่คล้ายกัน MS .NET : NuGet Java : Maven Python : conda เกริ่นนำมาแล้วไป Download กันเลยครับ สำหรับผมเลือกลงแบบ 64 bits ครับ ของ Windows ครับ สำหรับการลงง่ายครับ ตามแบบ Windows กด Next ไปเรื่อยๆครับ ลองดูรูปได้จาก Gallery นะครับ หลังจากลงเสร็จทดสอบ Version เลยครับ ด้วยคำสั่ง node -v npm –version แต่ถ้าใครอยากลองเล่น ES6 อย่า่งลืมไปตรวจสอบ Feature ที่  ด้วยนะ

[.Net] ลอง Share Pattern Parallel.ForEach ที่ผมใช้ครับ

จาก Blog ตอนที่แล้ว เรื่อง [.Net] มาทำให้ Parallel.ForEach Debug ง่ายกันเถอะ มาวันนี้ผมขอ Share Pattern ที่ได้ลองใช้ Parallel.ForEach เจ็บมาเยอะครับ เดี๋ยวผมลองแปะโครง Code แล้วมาอธิบายทีละจุดครับ ลองอ่านตาม Comment ได้ครับ จาก Comment ผมมีใช้คำสั่งหลายตัวเลย ได้แก่ ลองนำไปปรับใช้กันดูได้นะครับ ^___^

กลิ้งมินิมาราธอนครั้งแรก Globe-Athon 2016 ที่ The Sense Pinklao

หลังจากซุ่มออกกำลังกาย วิ่งแถวบ้านทุกๆวันเสาร์ กับลองเล่นเครื่องเดินอากาศ ตั้งแต่ช่วงต้นปีครับ และเมื่อต้นเดือนผมได้ไปเห็นประกาศงานวิ่งครับ แต่พอกลับไปปั่นงาน เอ้า ลืม ซะและ แต่โชคดีที่วันอาทิตย์ที่แล้วมีบูธที The Sense ให้สมัครหน้างานครับ 300 บาท โดยของที่ได้มี ดังนี้ครับ และมาถึงวันนี้ 25 ก.ย. 2559 ถึงวันจริงแล้ว ผมได้มาถึงที่ The Sense

[.Net] มาทำให้ Parallel.ForEach Debug ง่ายกันเถอะ

หลังจากหายไปพักนึง หลังากลองตบตีกพวก Thread มาสักพักใหญ่แล้ว วันนี้ขอประเดิม Blog เลยและกันครับ สำหรับตัว Microsoft .Net Framework ถ้าใครใ้ตั้งแต่ 4.0 เป็นต้นไป มันมีชุดคำสั่งสำหรับทำงานแบบ Parallel ด้วยครับ ซึ่งหนึ่งในนั้น คือ Parallel.ForEach นั้นเองครับ แล้ว Parallel.ForEach คือ อะไร มันเหมือน ForEach แหละ แต่ต่างกันที่ ForEach ทำคนเดียว แต่ Parallel.ForEach ช่วยกันทำครับ มันก็ดีช่วงกันทำนี่ แล้วมันมีปัญหาอะไร ก็ตอนมี Bug ไงครับ ยิ่งเป็น Runtime Exception แล้ว จับได้ยากครับ เพราะ Parallel.ForEach มันแบ่งงานกันทำ เราจะรู้ได้อย่างไรว่า งานที่แบ่งกันทำ งานขิ้นไหนที่มันมีปัญหาครับ พระเอกของเรา มันอยู่ที่คู่มือครับ ลอง Google ไปดูรูปแบบตัวอย่า่งการเรียกใช้ Parallel.ForEach ดูสิครับ พบว่ามันมี Parameter อยู่ตัวที่น่าสนใจครับ คือ ตัว ParallelOptions ครับ เมื่อมาดูตัว ParallelOptions มี property ตัวนึงที่น่าสนใจครับ MaxDegreeOfParallelism สำหรับ Property นี้เป็นการกำหนดงานที่ทำพร้อมๆกัน (Concurrent) ว่าทำได้สูงสุดเท่าไหร่ สำหรับค่า Default คือ -1 (no limit) ครับ หลังจากความหมายแล้ว ด้วยความอยากรู้ผมเลยลองกำหนดค่าเป็น 1 ใน Mode Debug ครับ ผลปรากฏว่า ผมสามารถ Debug Code เพื่อหาข้อผิดพลาดได้ครับ มันดีมากเลยยย ^___^ สำหรับ Blog ตอนต่อไปที่จะเขียน ถ้าว่าง คือ Pattern สำหรับการใช้ตัว Parallel.ForEach ครับ

[DB2] มาดักดูว่าใครทำ DB ค้าง

ช่วงนี้ DB ที่บริษัทกับที่ Production ชอบค้างอยู่บ่อยๆครับ สำหรับในบริษัทได้ลองเขียน Query เพื่อที่ตรวจสอบว่าใคร Lock Database ซึ่งอาจะเป็นการเปิด Transaction แล้วลืม Commit ก็ได้ครับ สำหรับการทดสอบของผม ผมได้มี Query ชุดนึงที่มีหน้าทีควานหาว่า มีอะไรผิดแปลกกับ Database ครับ โดยผมมีรูปแบบการ Test ดังนี้ VM ที่ลง DB2 ไว้ (ถ้าว่างๆจะย้ายลง Docker และ) Dump ข้อมูลใส่ใน Table Activeuser เครื่อง VM นี่แหละ Connect ผ่าน Toad และลบข้อมูล Table Activeuser ผ่าน Toad และปิด Auto Commit ไว้ เครื่อง Host ลองเปิด Client App Connect เข้าไป เจอ Error ครับ เท่าที่ User แจ้งมานี่มีหลายแบบ อันนี้เป็นแบบหนึ่ง กลับเข้าไปใน VM เปิด Toad และลอง Run Query ทดสอบอีกครั้ง ผลลัพธ์ที่ได้ครับ ลองมาจับโจรจาก Query นี้ดูครับ มีข้อมูลที่แกะได้จาก Query ดังนี้ Client – win7sp164bit (VM ผมเองครับ) Application – toad.exe Table – SYSTEMCOUNTER, ACTIVEUSER Lock Type – TABLE_LOCK Lock Mode – IX หากสังเกตุดีๆ Query ตัว SYSIBMADM.LOCKS_HELD หรือ…

อย่าสร้างเทพ หรือผลักใครไปเป็นเทพ

วันนี้ผมน่าจะเขียน Blog แปลกเลย แหวกจากแนว Software พอสมควรเลยครับ หลังจากที่ได้ลองนั่งคิดกับตัวเอง และมองอะไรรอบตัวเราแล้ว ตอนนี้เรากำลังเป็นเทพไปดับไฟให้ใคร หรือป่าว หรือเรากำลังผลักใครไปเป็นเทพ เป็นเทพก็ดีแล้วนี่ ทั้งเก่ง มีความสามารถ แต่ไม่มีใครทำทุกอย่างได้หมด ด้วยตัวคนเดียวหรอกครับ ลองดูอย่าง Software ที่เราเขียนออกมาก็ได้ครับ มันเทพมา แจ่มโคตรเมื่องานเข้ามาน้อยๆ แต่พองานเยอะขึ้นหละ เริ่มมีข้อผิดพลาดแล้ว สิ่งที่เราทำได้มีทั้งแก้ Code แบ่งงานกันทำ Software มันยังมีการกระจายงานครับ คนๆอย่างๆเราต้องมีการกระจายงานครับ   ไม่มีใครทำทุกอย่างได้หมด ด้วยตัวคนเดียวหรอกครับ

4+1 architectural view model กับมุมมองของธุรกิจ

พอดีหัวหน้าให้เอา Framework ใหม่ที่มาใช้แทน Legacy System ไปลองนำเสนอกับ Consult ของบริษัทดูครับ เค้าก็ถามหลายเรื่องเลยครับ และบอกให้นำเรื่อง 4+1 architectural view model  มาใช้ในการนำเสนอครับ โดยนำเสนออย่างไร และตอบโจทย์อะไร ลองดูกันได้เลยครับ 4+1  มีอะไรบ้างหละ architectural view model User view – Use Case Process view – Activity diagram, Sequence Diagram Development view – Component diagram Logical view – Class diagram Physical view – Deployment Diagram ถ้าเขียนได้ชัดเจนมันตอบปัญหา User หรือ IT ได้ เช่น การ Scale ระบบ หรือการจัดหา Licence เพิ่มครับ หลังจากที่ฟัง Consult ของบริษัทแล้ว รุ้สึกงานด้านเอกสารด้านนี้ยังไม่มีเลย และเข้าใจความสำคัญของ Diagram พวกนี้ มันคล้ายกับที่ทีมวิศวกรที่ใช้พิมพ์เขียว ตอนทำการสร้างตึกครับ