ลองติดตั้ง SonarQube Local เพื่อวัด Test Coverage โค้ดเรากัน!

เมื่อโปรเจกต์เริ่มซับซ้อนขึ้น การมั่นใจว่าโค้ดมีคุณภาพดี และผ่านการทดสอบอย่างครอบคลุมก็ยิ่งสำคัญขึ้นตาม ทั้งหมดนี้เริ่มจากคำถามง่ายๆ: เทสที่เขียน…ครอบคลุมพอหรือยัง? มี code smell แอบซ่อนอยู่ไหม? โค้ดที่ขึ้น production แล้ว…ยังมี bug หลุดไปอยู่หรือเปล่า? คำตอบแบบ “น่าจะโอเคมั้ง” เริ่มฟังดูไม่น่าไว้ใจเท่าไหร่ และนั่นแหละ… ถึงเวลาที่เราต้องพึ่งเครื่องมือวิเคราะห์โค้ดอย่าง SonarQube เพื่อช่วยจับจุดที่เรามองไม่เห็น และทำให้คุณภาพโค้ดดีขึ้นอย่างจริงจัง ทำไมต้อง SonarQube? SonarQube เป็นเครื่องมือวิเคราะห์คุณภาพของซอร์สโค้ด ที่สามารถรายงานได้ทั้ง Code Smells – โค้ดที่เขียนได้ แต่อาจทำให้เข้าใจยากหรือดูแลยากในระยะยาว Bugs – จุดที่อาจทำให้โค้ดทำงานผิดพลาดหรือเกิด error Duplications – โค้ดที่ซ้ำกันในหลายจุด ทำให้เปลี่ยนทีต้องแก้หลายที่ Security Issues – โค้ดที่อาจเปิดช่องให้เกิดช่องโหว่ด้านความปลอดภัย Test Coverage – สัดส่วนของโค้ดที่ถูกครอบคลุมโดย unit tests Simple API ด้วย Node.js พร้อม Unit Test ด้วย Jest เพื่อให้เห็นภาพการใช้งาน SonarQube ชัดเจนยิ่งขึ้น เราจะยกตัวอย่างโปรเจกต์ Node.js เล็กๆ ที่มี API และเขียน unit test ครอบคลุมไว้ด้วย Jest ...

June 21, 2025 · 3 min · Teera

Pub/Sub ลำดับข้อความเพี้ยน เพราะลืมเปิด Message Ordering

ก่อนหน้านี้เราใช้ Kafka เป็นหลัก ก็เลยชินกับการที่ข้อความในแต่ละ partition จะเรียงลำดับ พอเริ่มใช้ Google Cloud Pub/Sub จริงจังครั้งแรก ก็คิดว่า “มันก็น่าจะคล้าย ๆ กันแหละ…” แต่ความจริงคือ Pub/Sub ไม่จัดลำดับข้อความให้โดยอัตโนมัติ และเราก็เพิ่งรู้ตอนที่เจอปัญหาแล้ว 😅 ปัญหาที่เจอ อยู่ดี ๆ service ฝั่ง consumer เริ่มประมวลผลข้อความสลับลำดับ ทั้งที่ฝั่ง publisher ส่งมาเรียงตามลำดับที่ต้องการ เช่น: message 1 message 2 แต่กลับกลายเป็นว่า message 2 มาถึงก่อน message 1 ซะอีก ลองเช็กดูถึงรู้ว่า… Pub/Sub จะไม่เรียงลำดับข้อความ หากเราไม่ได้เปิด “Message Ordering” ตอนสร้าง subscription และที่สำคัญคือ ถ้าไม่ได้เปิดไว้ตั้งแต่แรก จะมาเปิดทีหลังไม่ได้ วิธีที่เราแก้ เราต้องลบ subscription เดิม แล้วสร้างใหม่ โดยเปิดตัวเลือก Enable message ordering ผ่าน Command Line: gcloud pubsub subscriptions create my-subscription \ --topic=my-topic \ --enable-message-ordering ผ่าน Google Cloud Console: ...

June 17, 2025 · 1 min · Teera

BeNeat เรียกแม่บ้านผ่านแอปครั้งแรก

ปกติจะเป็นคนขี้เกียจทำความสะอาดห้องน้ำมาก บางครั้งปล่อยทิ้งไว้เกือบ 2 เดือน… 555+ เคยลองใช้บริการแม่บ้านในหมู่บ้านมาแล้ว 2 ชั่วโมง 600 บาท แต่ก็ไม่ค่อยประทับใจเท่าไหร่ เพราะทำความสะอาดแบบผ่าน ๆ ไม่ละเอียด ใช้อุปกรณ์ทำความสะอาดของเราด้วย เลยเริ่มมองหาทางเลือกใหม่ จนมาเจอแอป BeNeat ที่มีรีวิวดี ราคาก็ไม่ได้แรงเกินไป ดูแล้วน่าจะมีมาตรฐาน เอาวะ ลองดูสักตั้ง! ตัดสินใจจองครั้งแรกทันที หมายเหตุ: บล็อกนี้เป็นรีวิวจากประสบการณ์การใช้งานจริง ไม่ได้รับการสนับสนุนหรือสปอนเซอร์จาก BeNeat แต่อย่างใด เริ่มต้นยังไง? ดาวน์โหลดแอป BeNeat และสมัครใช้งานให้เรียบร้อย เลือกบริการทำความสะอาดทั่วไป เลือกประเภทที่พัก ในกรณีนี้เราเลือก บ้าน 2-3 ชั้น (100-200 ตร.ม.) ระบบจะแนะนำเวลา 4-6 ชั่วโมง แต่สามารถเลือกขั้นต่ำได้ที่ 2 ชั่วโมง เลือกวันและเวลา ที่ต้องการใช้บริการ ระบบจะแจ้งราคาเริ่มต้นที่ 520 บาท (ยังไม่รวม VAT 7%) กดไปยังหน้าชำระเงิน แล้วดำเนินการจ่ายเงินให้เรียบร้อย จากนั้นเราต้องรอแม่บ้านกดรับงานของเรา ซึ่งใช้เวลาไม่นาน แล้วสักพักแม่บ้านก็โทรมายืนยัน แม่บ้านมาถึงและเริ่มทำงานอย่างไร? ก่อนถึงเวลานัดหมายประมาณ 1 ชั่วโมง ระบบจะแจ้งเตือนว่าแม่บ้านกำลังเดินทางมา ไม่นานแม่บ้านก็นั่งวินมอไซค์มาถึง พร้อมอุปกรณ์ทำความสะอาดครบมือ แม่บ้านจะสอบถามว่าอยากให้ทำความสะอาดส่วนไหนบ้าง เราก็แจ้งไปว่าแค่ ห้องน้ำ 2 ห้อง จากนั้นแม่บ้าน ก็เริ่มทำงานทันที ...

June 15, 2025 · 1 min · Teera

บันทึกการย้ายบล็อก Ghost สู่ Hugo

เมื่อความเรียบง่ายคือคำตอบ ช่วงแรกที่เริ่มเขียนบล็อก เราเลือกใช้ Ghost แบบ self-host เพราะมันดู modern, editor ใช้งานดี Ghost รันผ่าน Docker ใน homelab ที่บ้าน แล้วเชื่อมต่อออกไปข้างนอกด้วย Cloudflare Tunnel + โดเมนของเราเอง ทุกอย่างทำงานได้ดี …จนเวลาผ่านไป เราเริ่มรู้สึกว่าเวลาเปิดหน้าเว็บ มันหน่วงขึ้นนิดหน่อย ไม่มากก็จริง แต่ก็พอจะรู้สึกได้ และเริ่มน่ารำคาญขึ้นเรื่อย ๆ ที่แย่กว่านั้นคือ มีอยู่วันหนึ่งไฟที่บ้านดับยาวทั้งวัน UPS ที่ต่อกับ homelab เอาไม่อยู่ เว็บเลยดับหายไปทั้งวันแบบดื้อ ๆ 😅 ตอนนั้นแอบคิดในใจว่า “นี่เรากำลังโฮสต์บล็อกตัวเอง หรือกำลังดูแล data center กันแน่นะ” ถึงเวลาหาอะไรใหม่ที่เบากว่า จริง ๆ แล้วเราก็ไม่ได้ต้องการระบบ CMS อะไรใหญ่โตเลย เขียนโพสต์ง่าย ๆ ด้วย Markdown Publish ได้ไว ไม่ต้องรอระบบอะไรทั้งนั้น ใช้ Git จัดการเวอร์ชันได้สะดวก ไม่ต้องรัน server หรือ database ให้ปวดหัว พอลองหาดู static site generator ที่ตอบโจทย์พวกนี้ เราก็มาเจอกับ Hugo ตัวเล็ก เร็ว และเรียบง่าย Compile แต่ละรอบแค่เสี้ยววินาที ...

June 8, 2025 · 2 min · Teera

Zigbee Repeater ช่วยทวนสัญญาณในบ้าน

ปกติแล้วอุปกรณ์ Zigbee จะทำงานเป็นแบบ Mesh เชื่อมต่อจาก Coordinator ไปเรื่อยๆ จนสร้างเครือข่ายครอบคลุมทั้งบ้าน ซึ่งอุปกรณ์ Zigbee ที่จะมาเชื่อมต่อเข้ากับ Coordinator ได้นั้น จะมี 2 ประเภทคือ Router และ End Device ประเภท Router จะช่วยทำการทวนสัญญาณ เพื่อช่วยให้อุปกรณ์ตัวต่อไปใช้งานได้ แต่ตัวที่เป็นปัญหาคือ End Device ทำงานแค่รับส่งข้อมูลได้อย่างเดียว ชั้น 2 บ้านเราจะเป็นสวิทช์ไฟ Zigbee ประเภท Router ใช้งานมาหลายปี จนวันนึงมันก็พัง เราจำเป็นต้องซื้ออุปกรณ์ตัวใหม่มาแทน แต่สวิทช์ไฟ Zigbee มันดันเป็นแบบ End Device (มารู้เอาตอนมันเชื่อมต่อกับ Gateway เรียบร้อยแล้ว) ช่วงแรกๆ อุปกรณ์ Zigbee ชั้น 3 มันก็จะใช้งานได้บ้าง ไม่ได้บ้าง สัญญาณอ่อน จนบางครั้งขาดหายไปเลย ก็เลยเป็นที่มาของการใช้งาน Zigbee repeater นั่นเอง สินค้าไม่ได้ระบุแบรนด์แน่ชัด แต่ใช้ซิปของ Tuya โดยอุปกรณ์ในกล่องจะมีแค่ 2 ชิ้น Zigbee repeater คู่มือภาษาอังกฤษ วิธีใช้งานต้องหา adapter 5v เพื่อจ่ายไฟให้กับตัวเครื่อง เมื่อเสียบปลั๊กไฟสีน้ำเงินจะติด เพื่อบอกสถานะการทำงาน กรณีต้องการเข้าโหมด pair ใช้วิธีถอดเสียบเจ้าตัว Zigbee repeater 3 ครั้ง ก็จะเข้าโหมด pairing และไฟสถานะจะเปลี่ยนเป็นกระพริบรัวๆ หลังจากเชื่อมต่อกับ ZHA ของ Home Assistant ลองดูประเภทของตัวเครื่อง Device Type: Router ตรงส่วน View network เขาจะทำงานต่อจาก Coordinator แล้วก็ทวนสัญญาณต่อไปยังอุปกรณ์ Zigbee ชั้น 3 นั่นเอง ...

October 20, 2024 · 1 min · Teera

แนวทางการปรับจูน ZFS Proxmox (2024)

แนวทางการปรับจูน ZFS Proxmox รวบรวมจากประสบการณ์ผู้เขียนทั้งหมด หลังจากใช้งาน ZFS มาประมาณ 1 ปี อาจจะมีข้อมูลไม่ถูกต้อง 100% โปรดใช้วิจารณญาณในการอ่าน Command line ใช้งานบน Proxmox VE 8.2.4 วิธีปรับจูน ZFS properties ใช้คำสั่งเดียว ในการปรับ properties ทั้งหมด ( อ้างอิง ) zfs set atime=off compression=lz4 recordsize=1M xattr=sa rpool วิธีปรับจูน ZFS volblocksize การตั้งค่า volblocksize ต้องทำก่อนที่จะสร้าง vm โดยไปที่ Proxmox UI (Datacenter -> Storage -> local-zfs -> Edit) กำหนด 64k ( อ้างอิง ) วิธีปรับจูน ZFS ARC nano /etc/modprobe.d/zfs.conf กำหนดค่า zfs_arc_min เริ่ม 2GB และ zfs_arc_max ตามที่เราอยากให้ arc ใช้งาน ( Convert Gigabyte to Byte ) ...

June 29, 2024 · 1 min · Teera

Zigbee Water Leak Detector

ย้อนกลับไปเมื่อนานมาแล้ว เราเคยประสบปัญหา น้ำท่วมบ้านเพราะว่าเครื่องกรองน้ำท่อชำรุด ซึ่งกว่าเราจะรู้ เลิกงาน ถึงบ้านประมาณ 2 ทุ่ม เดือนนั้นโดนค่าน้ำไปหลายบาท บัวผนังชำรุด จากการแช่น้ำนาน เราเลยมองหาอุปกรณ์ที่สามารถตรวจจับน้ำรั่ว รองรับ Zigbee และ Home Assistant ราคาไม่แพง! สินค้าเป็นของแบรนด์ MOES ใช้ซิปของ Tuya จำเป็นต้องมี Zigbee gateway ในการเชื่อมต่อ และสามารถเชื่อมต่อกับ Zigbee gateway ของ Tuya ได้แน่นอน แต่เราจะใช้ ZHA gateway เพื่อเชื่อมต่อเข้าไปที่ Home Assistant ด้านบนตัวเครื่องจะเป็นปุ่มกดเช็คสถานะ กด 1 ครั้งจะมีไฟแจ้งเตือนสีเขียว กดค้าง 5 วินาที คือการ reset ตัวเครื่อง เพื่อทำการ pairing gateway ด้านหลังตัวเครื่องจะมี sensor เมื่อสัมผัสโดนน้ำ จะแจ้งสถานะ พร้อมไฟแจ้งเตือนสีเขียวกระพริบ 6 ครั้ง ใช้เหรียญหมุนทวนเข็มนาฬิกา เพื่อเปิดตัวเครื่อง ข้างในจะมี battery CR2032 (ติดมากับเครื่อง) และหมุนตามเข็ม เพื่อปิดตัวเครื่อง เมื่อเชื่อมต่อกับ Home Assistant สามารถเขียน automation เช็คสถานะ sensor ได้ดังนี้ ...

June 23, 2024 · 1 min · Teera

ขยายพื้นที่ ZFS Pool (mirror) โดยใช้ VDEV เดิม

สำหรับวิธีการขยายพื้นที่ ZFS Pool แบบ mirror โดยการเปลี่ยน HDD ลูกเดิมใน VDEV (mirror-0) ให้มีขนาดใหญ่กว่าเดิม ข้อดีคือ สามารถเปลี่ยน HDD ครั้งละลูก ส่วนใครสะดวกเพิ่ม VDEV (mirror-x) สามารถอ่าน blog ก่อนหน้าได้เช่นกัน ขยายพื้นที่ ZFS Pool (mirror) Command line ใช้งานบน Proxmox VE 8.2.4 ปัจจุบันมี VDEV (mirror-0) ซึ่งขนาดพื้นที่ใช้งานคือ 2TB disk1: /dev/sdc ขนาด 2TB disk2: /dev/sdd ขนาด 2TB disk3: /dev/sde ขนาด 4TB ต้องการนำ disk3 ไปแทนที่ disk1 ls -l /dev/disk/by-id/ | grep sde ค้นหา disk by-id zpool status nas เรียกดูสถานะ zpool zpool replace poolname old_disk new_disk ...

June 21, 2024 · 1 min · Teera

แก้ปัญหา Mini PC LAN พัง!

Mini PC ตัวนี้เราซื้อมือสอง ใช้งานเป็น Proxmox Cluster (pve1) ตั้งแต่ 03/2023 ก็ล่วงเลยมาประมาณปีนิดๆ แรกเริ่มเลย มันชอบมีอาการ network หลุดบ่อยๆ จนล่าสุดใช้งาน LAN Port ไม่ได้อีกเลย แม้ว่าจะมีมาให้ 2 port แนวทางแก้ไข หาซื้อ USB to LAN มาใช้แทนของเดิม และรองรับ Linux ก็ลองหาใน shopee จนไปเจอสินค้าของ Vention รุ่น USB 3.0 Gigabit Ethernet ราคา 3xx หลังจากได้รับสินค้า ก็ติดตั้งเข้าไปที่ Mini PC ผ่านทาง USB 3.0 จากนั้นก็เสียบสายแลน ต่อจอผ่าน hdmi เพราะจำเป็นต้องเช็คก่อนว่า Proxmox มันจะมองเห็นไหม? ip link show คำสั่ง show network interfaces ตอนนี้ Proxmox สามารถมองเห็น network interface ตัวใหม่แระ ip link set enx207bd2e4a424 up คำสั่ง active interfaces ...

June 8, 2024 · 1 min · Teera

ขยายพื้นที่ ZFS Pool (mirror)

ปัจจุบันเราใช้งาน ZFS Pool แบบ mirror (เทียบเท่า raid 1) ข้อดีคือ HDD สามารถพังได้ 1 ลูก โดยข้อมูลไม่เสียหาย ส่วนการเพิ่มขยาย ZFS Pool ก็ต้องเพิ่ม HDD ทีละ 2 ลูกเช่นกัน โดยจะเพิ่ม HDD 6TB x 2 ลูก จะส่งผลให้ขนาดพื้นที่เก็บข้อมูลเพิ่มจากเดิม 2TB+6TB=8TB Command line ใช้งานบน Proxmox VE 8.2.2 zpool status poolname (เรียกดูสถานะ poolname) zpool status nas เข้าไปที่ Proxmox UI (pve -> Disks) มองหา disk ที่เพิ่มเข้ามาใหม่ /dev/sdf และ /dev/sdg จากนั้นไปค้นหา disk by-id ls -l /dev/disk/by-id/ | grep sdf ls -l /dev/disk/by-id/ | grep sdg ...

June 1, 2024 · 1 min · Teera