• แนวทางการเขียน Unit Tests ที่ดีสำหรับ C # (2)


    ในบทความก่อนหน้า ได้พูดถึงการเลือก Testing framework ที่เหมาะสม การเขียน unit test โดยใช้แนวคิดแบบ “AAA” (Arrange, Acr, Assert) และการกำหนดชื่อ method ที่สื่อความหมายเข้าใจได้ง่าย Test Initialize & Cleanup เมื่อ unit tests ทำการทดสอบ methods ภายใน class ก็จำเป็นต้องสร้าง instance ของ class นั้นๆขึ้นมาก่อน ซึ่งจะเกิดขึ้นหลายๆครั้งใน unit test เพื่อประหยัดเวลาและทรัพยากรของระบบ เราสามารถใช้ [TestInitialize] attribute ของ MSTest เพื่อบอกว่า method นั้นใช้สำหรับกำหนดค่าเริ่มต้น สร้าง instance ของ class ก่อนที่จะเริ่ม run unit tests (หรือ [SetUp] ใน…

    >> Read More <<

  • แนวทางการเขียน Unit Tests ที่ดีสำหรับ C #


    ในความคิดของผู้เขียน ผู้พัฒนาส่วนใหญ่มักไม่ชอบที่จะเขียน Unit testing บางคนอาจจะคิดว่ามันน่าเบื่อ หรือบางคนก็ไม่เห็นคุณค่าในการเขียน code เพื่อตรวจสอบการทำงานของ code อื่นๆ Unit testing คือแนวทางในการเขียน code เพื่อตรวจสอบว่าหน่วยการทำงานใน แอปพลิเคชันซอฟต์แวร์ ว่าทำงานตามที่ตั้งใจไว้หรือไม่ เช่น หากตั้งใจที่จะให้ตัวอักษรตัวแรกของคำเป็น พิมพ์ใหญ่ unit test จะต้องสามารถตรวจสอบว่าตัวอักษรตัวแรกเป็นตัวพิมพ์ใหญ่โดยไม่สนใจอักษรตัวอื่นๆ ข้อดีอย่างหนึ่งของการเขียน unit tests ใน C # คือ เราสามารถใช้ Test Explorer ใน Visual Studio เพื่อตรวจสอบว่าการทดสอบทั้งหมดผ่านหรือไม่ โดยที่ไม่ต้องกังวลว่าการเปลี่ยนแปลงล่าสุดที่เขียน จะทำให้ระบบทำงานไม่ได้หรือไม่ การเลือก Testing Framework Testing frameworks ช่วยให้เราสามารถใช้ attribute ในการเขียน unit tests [TestClass] หรือ [TestMethod] ซึ่ง attribute เหล่านี้บอกให้ Text…

    >> Read More <<

  • เขียน Unit test ทดสอบการทำงานกับฐานข้อมูลที่ใช้ Entity Framework Core


    ในบทความนี้ จะนำเสนอการเขียน unit test เพื่อทดสอบการทำงานของ method ที่ใช้งาน Entity Framework Core ซึ่งตัว Entity Framework Core มาพร้อมความสามารถที่สามารถใช้งาน in-memory store ซึ่งสามารถใช้ในการทดสอบได้ หรือจะใช้ mock framework ในการทดสอบก็ได้ โดยในบทความนี้จะแสดงให้เห็นทั้งสองแนวทาง In Memory Database In Memory Database เป็นการสร้าง database จำลองขึ้นมาใช้บน memory แทนที่การใช้ database ตัวจริง ทำให้เราสามาถเขียน unit test โดยที่ไม่ไปกระทบกับ database จริงๆ โดยการเพิ่ม Microsoft.Entityframework.InMemory NuGet package เข้าไปใน test projet ในส่วนของ DbContext class จะต้องมี constructor ที่รับ…

    >> Read More <<

  • SSH:- no matching key exchange method found


    เดี๋ยวนี้ใน Windows 10 ก็มี ssh ให้ใช้งาน แต่พอใช้กับเซิร์ฟเวอร์รุ่นเก่าๆ ก็เข้าไม่ได้ซะงั้น ไปลอง ssh ฝั่ง Linux (WSL2) ก็ให้ผลเหมือนกันคือ!!! ถ้าเป็นเมื่อก่อน วิ่งไปหา putty อย่างไว…. แต่ Windows อุตส่าห์ทำมาให้ใช้แล้วทั้งทีจะไม่ใช้ได้ยังไง สิ่งที่ต้องตรวจสอบก่อนคือ man ssh_config สำหรับ Linux ฝั่ง client ว่ารองรับ ciphers และ kexalgorithms แบบไหนรองรับหรือไม่ ส่วนฝั่ง Windows 10 จะอิงตาม OpenBSD manual ซึ่งเหมือนกับ Linux แหละ สร้างแฟ้ม .ssh/config โดย Linux ก็จะให้สร้างที่ /home/username/.ssh/ Windows ก็อยู่ที่ C:\Users\username\.ssh สำหรับ error ว่า no…

    >> Read More <<

  • Print หน้าเว็บ Clean Clean ด้วย Print Friendly & PDF


    บทความนี้จะมาแนะนำ Extension กันอีกเช่นเคยนะคะ วันนี้ขอนำเสนอ Print Friendly & PDF ค่ะ Extension ที่จะทำให้เรา Print หน้าเว็บที่สนใจได้แบบ Clean Clean และยังสามารถจัดการรูปแบบได้ตามที่ต้องการก่อนพิมพ์ได้ด้วยภาพโฆษณาต่างๆ จะไม่มีให้รก และเรายังสามารถลบข้อความหรือรูปภาพที่ไม่ต้องการออกไปได้ก่อนที่จะพิมพ์ ซึ่งต่างการจาก Print หน้าเว็บแบบเดิมที่เราไม่สามารถจัดการหน้าเว็บก่อนที่จะพิมพ์ได้ Extension ตัวนี้จึงช่วยทำให้เราประหยัดน้ำหมึกและกระดาษที่จะใช้ Print ค่ะ (งานรักษ์โลกก็มา) การใช้งานก็ง่ายมาก ๆ เลยค่ะ ^^ Features มีอะไรบ้าง Print Preview -> ปรับและแสดงเนื้อหาของการพิมพ์ให้เหมาะสมที่สุด Edit Before Printing  – >ปรับแต่งขนาดของรูปภาพ และข้อความ หรือจะลบรูปภาพ ข้อความที่ไม่ต้องการออกไปได้ (เลือกพิมพ์เฉพาะสิ่งที่เราต้องการ) Print or Save as PDF -> Print ทันที หรือจะบันทึกเป็น PDF…

    >> Read More <<

  • Windows Subsystem for Linux Installation Guide for Windows 10


    เพื่อเป็นการไม่เสียเวลา เริ่ม เปิด Powershell ด้วยสิทธิ์ของ Administrator แล้วพิมพ์คำสั่ง ต่อไปนี้เพื่อเปิดใช้งาน “Windows Subsystem for Linux” หรือ wsl โดยจะเป็นรุ่น 1 หรือ wsl1 ปรับรุ่นให้เป็นรุ่น 2 โดย Windows 10 ที่ใช้งาน ต้องเป็น Windows 10 version 2004, Build 19041 1903, Build 18362 ขึ้นไปเท่านั้น ตรวจสอบรุ่นของ Windows ด้วยคำสั่ง winver (start->run) เปิดใช้งาน Virtual Machine Platform พิมพ์คำสั่งต่อไปนี้ ใน powershell ของ administrator restart เครื่องเพื่อให้การปรับรุ่น wsl1 เป็น wsl2 สมบูรณ์…

    >> Read More <<

  • แชร์หน้าจอมือถือขณะ VDO Call ด้วย LINE


    สำหรับ Blog ในวันนี้จะมาขอแชร์เกร็ดความรู้เล็กๆ น้อยๆ ที่หลายๆคนอาจจะยังไม่เคยรู้มาก่อน (ถึงแม้จะใช้ LINE กันอยู่ทุกวันก็เถอะ) เมื่อไม่กี่วันที่ผ่านมาทาง LINE ได้มีการ update version ล่าสุด คือ10.6.5 ซึ่งใน version นี้จะเน้นไปที่การเพิ่มคุณสมบัติขณะวิดีโอคอล เช่น สามารถดู YouTube ร่วมกันได้ หรือสามารถแชร์หน้าจอตัวเองได้ เป็นต้น จริงๆแล้ว เรื่องของการแชร์หน้าจอขณะ VDO Call เนี่ย เดิมบนคอมพิวเตอร์ก็ทำได้อยู่ก่อนแล้วนะ แต่ตอนนี้ update ให้สามารถแชร์ผ่าน application บน smart phone ได้ด้วย วิธีการก็ไม่ยากเลย ปะ ไปดูกันว่าเค้าทำกันยังไง !! Step1 : เริ่มจากเปิด LINE และเลือก VDO Call หาคนที่เราต้องการ Step2 : เมื่อเริ่มการ VDO Call…

    >> Read More <<

  • ไม่มีเวลา, ไม่มีเงิน, ไม่มีปัญหา: ต้นไม้ต้นแรกแห่งความสำเร็จ


    สวัสดีครับวันนี้ผมมีเรื่องราวที่จะมาช่วยสร้างแรงบันดาลใจให้กับทุกคนในช่วงวิกฤตโควิท-19 ให้กลับมาลุกขึ้นมาสู้อีกครั้งและเป็นแรงบันดาลใจให้กับคนที่มีความฝันที่อยากจะสร้างเกม แรงบันดาลใจเรื่องนี้ถูกถ่ายทอดมาจากเรื่องราวของคุณเดวิดนักสร้างเกมอินดี้คนหนึ่งที่ประสบความสำเร็จอย่างมากบน Steam โดยใช้ความมุมานะพยายามและความใฝ่ฝันในวัยเด็กที่อยากจะสร้างเกมเป็นของตัวเอง ทั้งที่ตัวเองนั้นไม่ชอบการเขียนโปรแกรมเลยแต่อาศัยการฝึกฝนเรียนรู้ด้านศิลปะและการออกแบบช่วยทดแทน จุดเริ่มต้นมาจากมีเพื่อนคนนึงได้แนะนำการใช้งานโปรแกรม Unity (โปรแกรมสำหรับสร้างเกม) เมื่อเดวิดเห็นครั้งแรกก็พูดกับตัวเองว่า “ฉันรู้ว่าฉันจะต้องสร้างเกม” จึงเริ่มฝึกฝนการใช้งานโปรแกรมและทำงานอย่างหนักจนกระทั้งได้ปล่อยเกมแรกบน Steam ที่ชื่อว่า Home is Where One Starts…  ผลปรากฏว่าได้รับคำวิจารณ์จากเหล่าเกมเมอร์อย่างล้นหลามว่าเป็นเกมที่ “ห่วย” สิ้นดี แต่อย่างน้อยมันก็ทำให้ความฝันของเดวิดกลายเป็นจริงและได้มีอาชีพเป็น Unity technical artist ที่บริษัท The VOID ได้รับหน้าที่ในการสร้างงาน VR ให้กับเกมดังๆ มากมาย อาทิเช่น  Ghostbusters Dimension, Avengers: Damage Control, และ Star Wars: Secrets of the Empire. ถึงแม้ว่าผลงานของเค้าจะเป็นผลงานที่ยอดเยี่ยมแต่ก็ไม่ได้ติดอันดับชาร์ตเกมที่ขายดีที่สุดบน Steam เดวิดรู้ตัวว่ากำลังทำเกมของตัวเองเดินผิดทาง ซึ่งเค้าต้องการทำให้มันถูกต้อง วันนึงในขณะทำอาหารจึงเกิดไอเดียหัว เดวิดมองเห็นภาพสุนัขจิ้งจอกตัวหนึ่งกำลังมองหาต้นไม้ต้นแรกบนโลกเพื่อเรียนรู้เกี่ยวกับชีวิตและความตาย เกม The First…

    >> Read More <<

  • ข้อมูลใน DropdownList แรกจนถึง DropdownList สุดท้ายกับค่าที่เหลืออยู่ของเขา ด้วย LINQ


    ในช่วงที่ผ่านมา ได้มีการพัฒนาระบบโดยมีการนำ LinQ มาใช้นิด ๆ หน่อย ๆ (มือใหม่หัดใช้ >< ) ซึ่งมีอยู่ฟังก์ชันนึงที่เกี่ยวกับ การ Bind ค่า DropdownList กรณีที่มี DropdownList หลาย ๆ ตัวและไม่อยากให้ค่าที่เคยเลือกจาก DropdownList ก่อนหน้าไปแสดงใน DropdownList ถัดไปอีก น่าสนใจทดลองใช้แล้วทำงานได้ดี ผู้เขียนจึงนำมาเขียนเพื่อไว้เตือนความจำ จะได้กลับมาอ่าน แนวคิดและวิธีการดังนี้ค่ะ ในขั้นตอนแรก สร้าง Data ที่ชื่อว่า MyList เก็บข้อมูล id และชื่อ เพื่อเตรียมเป็น DataSource สำหรับ Bind ให้กับ DropdownList1 ดังนี้ ต่อมากำหนดค่าให้กับ MyList เพื่อผูกให้กับ DropdownList1 ผลลัพธ์ของ DropdownList1 ได้ดังนี้ ID Name1 name12 name23 name35…

    >> Read More <<