#ภาษาไทย

ต่อ Open API ธนาคารออก QR รับเงิน — จาก sandbox ถึงวงจรสถานะ
QR พร้อมเพย์แบบ static ที่ประกอบเองได้ ติดตรงไม่มีใครบอกเราว่าลูกค้าจ่ายหรือยัง บทความนี้ไล่การต่อ Open API ของธนาคารใน sandbox ตั้งแต่ขอ token ออก QR แบบ dynamic อ่านวงจรสถานะ REQUESTED/PAID/CANCELLED/VOIDED ไปจนถึงกับดัก requestDt ที่ทำให้ยิงไม่ผ่านทั้งที่ payload ถูกหมด

ย้ายเว็บ .aspx เก่าทั้งเว็บ ทำเป็น catalog JSON แล้วคัดรูปขยะออกเอง
เจ้าของเว็บ .aspx เก่าขอให้ทำเว็บใหม่ แต่เนื้อหาสิบกว่าปีอยู่ในฐานข้อมูลที่เข้าไม่ถึงแล้ว ผมเลยไล่เก็บหน้าเว็บของเขาเองมาทำเป็น catalog JSON ที่คง legacy_id ไว้ทั้งหมด แล้วเขียนตัวคัดรูปสามชั้นกันไม่ให้ QR ของแถมกลายเป็นรูปปกบทความ

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

กรอกฟอร์มราชการลง PDF ด้วยสคริปต์ และทำสำเนาบัตรให้ปลอดภัย
ฟอร์มราชการที่แจกมาเป็น PDF กรอกได้ มักกรอกภาษาไทยไม่ได้จริง ช่องแบบตารางย่อยทำให้ตัวเลขไหลทับเส้น และวรรณยุกต์ลอยไปชนสระบน บทความนี้คือวิธีไล่ชื่อช่องออกมาก่อน กรอกผ่านฟอร์มแล้วอบให้เป็นเนื้อเอกสารจริง วาดข้อความไทยเองด้วยฟอนต์ที่มีสระครบ และทำสำเนาบัตรขนาดเท่าของจริงพร้อมลายน้ำที่ระบุวัตถุประสงค์

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

ฟอร์มแจ้งปัญหาบนเว็บ static ที่ไม่มีแบ็กเอนด์สักตัว
เว็บคำนวณที่เป็นไฟล์นิ่งล้วน ไม่มีเซิร์ฟเวอร์ให้รับฟอร์ม แต่ยังต้องมีช่องให้คนใช้แจ้งว่าสูตรผิดตรงไหน บทความนี้คือเส้นทางเดียวที่ผมเลือกใช้ คือ worker ไฟล์เดียวที่รับ POST เส้นทางเดียว ตรวจ Turnstile ฝั่งเซิร์ฟเวอร์ด้วยไอพีจริง รับรูปที่ผู้ใช้กดวางจากคลิปบอร์ด แล้วยิงเมลออกจากขอบเครือข่าย พร้อมกับดักสามอย่างที่กินเวลาผมไปทั้งคืน

เร่งคลิปจอเป็นช่วง ๆ แต่ให้นาฬิกาบนภาพเดินตามเวลาต้นฉบับ
วิธีทำไทม์แลปส์จากคลิปอัดหน้าจอที่เร่งช่วงนิ่งแรงกว่าช่วงทำงาน ด้วย split กับ trim กับ setpts แล้ว concat กลับ พร้อมกับดักใหญ่คือ drawtext ต้องวางก่อน setpts นาฬิกาถึงจะเดินตามเวลาต้นฉบับ ไม่ใช่เวลาที่ถูกเร่งไปแล้ว

แบนเนอร์คุกกี้ที่กั้นได้จริง โหลด GTM กับ GA4 หลังกดยอมรับเท่านั้น
แบนเนอร์คุกกี้ส่วนใหญ่ขึ้นมาสวยแต่ไม่ได้กั้นอะไร เพราะ GTM กับ GA4 ถูกโหลดไปตั้งแต่บรรทัดแรกของหน้าแล้ว บทความนี้คือโครงที่โหลด container เมื่อกดยอมรับเท่านั้น วาง GA4 เป็นแท็กข้างใน GTM กันนับซ้ำ ซ่อนช่อง AdSense ไว้ก่อน และตัวตรวจที่นับ request ปลายทางให้เป็นศูนย์

ให้เว็บอ่านเครื่องอ่านบัตรที่เคาน์เตอร์ ด้วย agent บน localhost
เบราว์เซอร์แตะเครื่องอ่านบัตรสมาร์ตการ์ดเองไม่ได้ ทางที่ใช้ได้คือเขียน agent ตัวเล็กเปิดพอร์ตบน localhost แล้วให้หน้าเว็บเรียก บทความนี้เก็บครบทั้ง secure context, CORS preflight, การแย่งพอร์ตกับ agent เจ้าอื่น, PC/SC แบบ SHARED, การถอด TIS-620 เอง และวันที่โดนแอนตี้ไวรัสเหมาว่าเป็น backdoor

ชุดแบบผังโรงงานอาหาร ต้องมีกี่แผ่น สเกลเท่าไร ลงกระดาษยังไง
ชุดแบบประกอบคำขอโรงงานอาหารมี 7 รายการ แต่ละแผ่นมีช่วงสเกลของตัวเอง และมีเลขที่ต้องคำนวณก่อนวาดคือ ผังกว้างกี่เมตรลง A4 หรือ A3 ที่ 1 ต่อ 100 ได้ไหม ถ้าไม่ได้จะแบ่งแผ่นยังไงไม่ให้สเกลเพี้ยน

จากโมเดลเป็นผังตัดเหล็ก 6 เมตร แล้วออกชีทตัดให้ช่าง
อ่านความยาวชิ้นส่วนจากโมเดล รวมรายการซ้ำ แล้วจัดผังตัดแบบ first-fit decreasing บนเส้นมาตรฐาน 6 เมตร เผื่อร่องใบเลื่อย 3 มิลลิเมตร พร้อมทางเลือกบากคอหักฉากที่ลดรอยต่อจาก 12 เหลือ 6

ถอดปริมาณงานจากโมเดล SketchUp ด้วยสคริปต์ Ruby
โมเดลที่ปั้นไว้แล้วมีตัวเลขทุกตัวที่ใบถอดปริมาณต้องการ ขอแค่ตั้งชื่อกลุ่มให้อ่านได้ตั้งแต่แรก แล้วเขียนสคริปต์ไล่ grep พร้อมกับดักสองข้อที่ทำให้พื้นที่เพี้ยนเท่าตัว

ทำชุดแผ่นแบบจากโมเดล SketchUp วางเลขกับเส้นระยะอัตโนมัติ
โมเดลเสร็จแล้วยังส่งงานไม่ได้ ของที่ราชการรับคือแผ่นกระดาษที่มีเลขกำกับอาคาร เส้นบอกระยะ ทิศเหนือ และมาตราส่วน บทความนี้คือวิธีดึงรูปทรงออกจากโมเดลเป็นตัวเลข เรนเดอร์ top ortho ให้ได้เส้นดำบนพื้นขาว แล้วให้สคริปต์วางเลขกับเส้นระยะเองโดยไม่ทับกัน พร้อมช่องให้สั่งทับเป็นรายชิ้น

วัดผังอาคารด้วยมือถือ แล้วหาทิศเหนือจริงด้วย GNSS
ARCore ให้พิกัดมุมห้องเป็นเมตรได้แม่นพอใช้งาน แต่ world frame ของมันหันไปทางไหนก็ไม่รู้ ผังที่ได้เลยหมุนอยู่มุมหนึ่งเสมอ วิธีแก้คือเดินเก็บคู่ (ตำแหน่ง AR, ค่า GNSS) ระหว่างทำงาน แล้ว fit rotation แบบ Kabsch สองมิติถ่วงน้ำหนักด้วยความแม่นของแต่ละ fix ได้ทั้งทิศเหนือและพิกัดของจุดกำเนิด

ถอดแบบจาก PDF ที่วาดไม่ตรงสเกล แล้ววาดกลับให้ตรงระยะ
แบบแปลนงานนำเสนอมักวาดทีละบล็อก สเกลแกน x กับ y ไม่เท่ากัน และแต่ละห้องยังไม่เท่ากันอีก คาลิเบรตครั้งเดียวทั้งหน้าแล้ววาดตามคือผิดทุกจุด บทความนี้เป็นวิธีถอดพิกัดจากกระดาษเป็นเมตรแบบคิดสเกลใหม่ทุกห้อง นับจำนวนชิ้นด้วย colour-blob BFS แทนการนับด้วยตา แล้ววาดกลับลงโมเดลให้ตรงระยะจริง

นิวทรัลพ่วงข้ามหม้อแปลง ทำไมบาลานซ์เฟสอย่างเดียวไม่จบ
บันทึกเคสหม้อแปลงสองลูกที่นิวทรัลพ่วงถึงกัน บวกบ้านพักที่แอบเกาะสายเมนฝั่งหนึ่ง ทำให้เฟส A ค้าง 30-40 A แม้วันหยุด พร้อมกับดักการอ่านมิเตอร์ที่ตีความผิดได้ถึง 200 A ถ้าไม่ยืนยัน CT ratio ก่อน และลำดับการแก้ที่ห้ามสลับขั้นตอน

เลือกขนาดสายเมนกับเบรกเกอร์ พิกัดกระแสขึ้นกับวิธีติดตั้ง
บันทึกการเลือกสายเมนกับเบรกเกอร์ของฟีดเดอร์ใหม่ 253 A ทำไมสาย CV ขนาดเดียวกันรับได้ 227 A หรือ 364 A ขึ้นกับวิธีเดิน และทางเลือกลดขนาดสายลงเป็น 95 แล้วชดเชยด้วยกติกาการเปิดเครื่อง แลกกับการที่เมนจะทริปถ้าใครเปิดผิดกติกา

สายเมนละลายเป็นจุด ๆ วินิจฉัยฟีดเดอร์เกินพิกัดจากรอบทำงานจริง
บันทึกการวินิจฉัยสายเมน 95 ตร.มม. ที่ฉนวนละลายเป็นจุด ๆ ทั้งที่ระบบดูเหมือนใช้งานได้ปกติ ไล่จาก nameplate เครื่องซัก-อบ 6 เครื่อง 234.7 kW ไปจนถึงแบบจำลองกระแสรายนาที ที่อธิบายว่าทำไมโหลด 482 A บนสายที่รับได้ 180 A ยังไม่ทำให้ระบบล่มให้เห็น

แอปเก็บเอกสารหน้าเดียวด้วย PHP กับ SQLite ที่เก็บต้นฉบับไว้เสมอ
แอปเก็บรูปเอกสารสำหรับงานยื่นราชการที่ถ่ายจากมือถือหน้างาน ออกแบบให้หนึ่งการอัปโหลดกลายเป็นสามไฟล์ คือไฟล์ที่ใช้แสดง ไฟล์ต้นฉบับ และค่าครอปที่บันทึกไว้ กลับมาปรับใหม่ได้โดยไม่เสียคุณภาพ พร้อมการย้ายจาก JSON มาเป็น SQLite แบบดูดของเดิมเข้าให้เอง และการปิดโฟลเดอร์ข้อมูลส่วนบุคคลที่เว็บเซิร์ฟเวอร์

ทำเอกสารยื่นราชการหลายสิบแผ่นจาก HTML ให้กดพิมพ์เองแล้วตรงขอบ
ระบบเอกสารยื่นราชการที่ผู้ใช้กดปุ่มพิมพ์ในเบราว์เซอร์เองแล้วต้องได้ทุกแผ่นตรงขอบ ตั้งแต่การวัดพื้นที่พิมพ์จริงเป็นมิลลิเมตร หัวและท้ายที่ต้องซ้ำทุกหน้าโดยห้ามใช้ position fixed กรอบรูปสี่แบบตามชนิดของเอกสาร ไปจนถึงการตรวจหน้าล้นอัตโนมัติด้วย Playwright แทนการเปิดดูทีละแผ่น

ฟีดข่าวค้างสามวันทั้งที่งานรันครบ เพราะฟีดไม่ได้เรียงตามวันที่
หน้าแรกของเว็บข่าวค้างอยู่ที่ข่าววันเดิมสามวันติด ทั้งที่งานตามเวลารันครบ แปลครบ และรายงานผ่านทุกขั้น ต้นเหตุคือฟีด RSS เรียงตามความเกี่ยวข้องไม่ใช่วันที่ การเรียง pubDate แบบสตริงกลายเป็นเรียงตามชื่อวันในสัปดาห์ และการขอข่าวมาน้อยเกินไปจนด่านกรองตีตกหมดตั้งแต่ยังไม่ทันได้ดู

ออกใบเสนอราคา PDF ภาษาไทยจาก HTML ด้วย Chromium และกับดักที่เจอ
ทำระบบออกใบเสนอราคาเป็น PDF จาก HTML ด้วย Chromium ให้รองรับหลายบริษัทในเครือและหลายเทมเพลต ตั้งแต่ error Executable doesn't exist ที่ไปหยิบ headless shell ผิดตัว การจัด A4 กับแบ่งหน้า การ sanitize ชื่อไฟล์ภาษาไทย จนถึงระบบเลขเอกสารแบบ token ที่เผลอใส่ slash แล้ว path พัง

ธรรมเนียมเขียนแบบโครงเหล็กไทย ให้ช่างหยิบไปสร้างได้จริง
โมเดลโครงเหล็กที่ดูสวยบนจอ แต่ช่างเปิดแบบแล้วส่ายหัว มักผิดที่ธรรมเนียมไม่กี่ข้อ ลำดับสมาชิก หน้าตัดที่หยิบจากกองได้ กฎซ้อนไม่ใช่สาน แปที่ต้องเป็นเหล็กตัว C เปิดปาก และการเลือกหน้ารับบนคานเอียงที่พลาดแล้วเหล็กกินกัน

นำเข้าขอบเขตแปลงที่ดินจากระบบแผนที่ราชการเข้า SketchUp
โมเดล SketchUp ที่ใส่ Add Location แล้วมีภาพถ่ายดาวเทียมอย่างเดียว ไม่มีเส้นแบ่งแปลง บทความนี้เล่าวิธีดึงขอบเขตแปลงผ่าน WFS มาตรฐาน OGC ที่ต้องส่ง viewparams ไม่งั้นได้ศูนย์ฟีเจอร์ แปลงพิกัด UTM47 เป็น WGS84 แล้ววางลงโมเดลด้วย latlong_to_point ให้ตรงกับภาพพอดี

WAF ตอบ 406 เพราะข้อความไทยใน POST — แก้ยังไงเมื่อไม่ใช่ root
ModSecurity บนโฮสต์ตอบ 406 ใส่ข้อความไทยบางประโยคใน POST body ทำให้ฟอร์มบันทึกไม่ได้ — แต่เราเป็นแค่ผู้เช่า แก้ rule เองไม่ได้ บทความนี้คือวิธี isolate หาท่อนที่โดนแบบ black-box แล้วอ้อมด้วย JS encode ตอน submit + middleware decode กลับฝั่ง Laravel

นำเข้าไฟล์ .xls จากระบบเก่าหลายร้อยไฟล์ลง Laravel ด้วย PhpSpreadsheet
ไฟล์ .xls จากระบบเก่าที่หัวตารางภาษาไทยเป็น tis-620 อ่านชื่อคอลัมน์ไม่ได้ ไฟล์ใหญ่ทำ PhpSpreadsheet กิน memory จนล้ม และไฟล์ที่ผู้ใช้รวมเองก็มีแถวซ้ำในตัวเอง — เลิกอ่านชื่อคอลัมน์แล้วนับตำแหน่งแทน ใส่ read filter และกันซ้ำด้วย natural key

charset ไม่ตรง ทำ index ตายเงียบ ตอน JOIN ข้ามฐาน — mirror utf8mb4
ฐานเก่าเป็น tis620 ฐานใหม่เป็น utf8mb4 พอ JOIN ข้าม database ปุ๊บ index ทุกตัวกลายเป็นของประดับทันทีโดยไม่มี error สักบรรทัด — วิธีพิสูจน์ด้วย EXPLAIN และวิธีทำ mirror แปลง tis620 เป็น utf8mb4 ตอน dump พร้อมกับดัก sed ที่ทำตารางพังเงียบ ๆ

นำเข้า/ย้ายข้อมูลไทยให้ไม่พัง: กับดัก VARCHAR, idempotency, สระ OCR
บทเรียนจริงจากงานนำเข้า/ย้ายข้อมูลไทยหลายแสนแถว — VARCHAR สั้นไปตัด synthetic key จนชนกันเงียบๆ, idempotency ที่ต้อง DELETE ก่อน INSERT ไม่งั้นยอดพุ่ง 200%, collation ที่มอง su001 กับ SU001 เท่ากันแต่เก็บทั้งคู่, และสระไทยเพี้ยนจาก OCR ที่ต้องมี normalization map ก่อน insert

เกณฑ์ราคากลางคอมพิวเตอร์ ICT ภาครัฐ + จัดสเปก DIY ด้วยสคริปต์
เกณฑ์ราคากลาง ICT ภาครัฐ ฉบับ ธ.ค. 2568 กำหนดสเปกเครื่องสำนักงาน 20,000 บาท และเครื่องประมวลผล 24,000 บาทไว้ชัด บทความนี้อ่านเกณฑ์จริงทีละข้อ แล้วเขียนสคริปต์ Python ดึงราคา Advice มาจัดสเปก DIY เทียบว่าประกอบเองคุ้มกว่าซื้อสำเร็จรูปแค่ไหน

~30 วินาที กลายเป็นตัวห้อยจิ๋ว — กับดัก Litedown ของ Flarum ที่คนไทยเจอบ่อย
เขียนโพสต์ Flarum ว่า "~30 วินาที" แล้วเลข 30 กลายเป็นตัวห้อยจิ๋วลอยอยู่ — เพราะ Litedown ของ Flarum ตีความ ~ เป็นตัวเปิด subscript คนไทยที่ใช้ ~ แทน "ประมาณ" เจอกันประจำ บทความนี้อธิบายสาเหตุ วิธีเลี่ยง และการแก้ผ่าน DB ที่เก็บเป็น s9e XML ไม่ใช่ markdown ดิบ

สร้าง QR พร้อมเพย์ (EMVCo) ด้วย Python ล้วน — ไม่ต้องพึ่งไลบรารีนอก
อยากออก QR รับเงินพร้อมเพย์ในระบบ POS/เว็บของตัวเอง โดยไม่ต้องเรียก API ธนาคาร — บทความนี้ประกอบสตริง EMVCo TLV + CRC16 เองด้วย Python ล้วน ได้ payload ตรงสเปกไทยคิวอาร์ สแกนจากแอปธนาคารไหนก็จ่ายได้ พร้อมกับดักที่ทำให้แอปสแกนไม่ติด