#JavaScript

ให้ AI คนละค่ายมาตรวจโค้ดที่ AI เขียน — กระบวนการ ไม่ใช่ความศรัทธา
พอร์ตเครื่องคำนวณจากสเปรดชีตวิศวกรรม 35 ชีตด้วย AI แล้วจะรู้ได้ยังไงว่าถูก บทความนี้เล่ากระบวนการให้เอเจนต์อีกค่ายมาตรวจอิสระสามรอบ กติกาที่ต้องตั้งก่อนเริ่ม ชั้นความเชื่อมั่นที่กันการโม้เกินหลักฐาน และคลาสความผิดพลาดที่ AI พลาดซ้ำ ๆ ทุกรอบ

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

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

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

หน้าเว็บว่างเปล่า ไม่มี error สักบรรทัด เพราะตั้งชื่อฟังก์ชันว่า top
deploy ขึ้นไปแล้วหน้าว่าง ไม่มี error ในล็อก ไม่มีอะไรผิดใน node --check แต่เบราว์เซอร์ฆ่าทั้งสคริปต์ตั้งแต่บรรทัดแรกเพราะมีฟังก์ชันชื่อ top ไปชนกับ window.top พร้อมรายชื่อที่ต้องเลี่ยง กับดักลำดับการโหลดสคริปต์ และด่านตรวจด้วย Playwright ที่ควรมีทุกโปรเจกต์

รูปไม่โหลดในหน้าที่ซ่อนด้วย display:none เฉพาะบนมือถือ
หน้าเว็บแบบสลับหน้าด้วย display:none พอกดเปิดหน้าใหม่บนมือถือแล้วรูปดำเปล่า ทั้งที่ไฟล์คืน 200 และ fetch กับ new Image สำเร็จทั้งคู่ ตัวจริงคือ IntersectionObserver ของ loading=lazy ที่ไม่ยิงตอนหน้าเปลี่ยนจาก none เป็น block และการตั้ง loading=eager เฉย ๆ ก็ยังไม่พอ

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

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

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

ย้ายการคำนวณจาก PHP ไปทำในเบราว์เซอร์: 12 วินาที เหลือ 12 มิลลิวินาที
หน้าเดียวยิง subquery หลักหมื่นครั้งจนโหลดนาน 12 วินาที ผมแก้ด้วยการทำตารางสรุปไว้ล่วงหน้า ส่ง dataset ก้อนเดียว 107 KB แล้วย้ายสูตรไปคำนวณในเบราว์เซอร์ เหลือ 12 มิลลิวินาที พร้อม parity test ที่บังคับให้ผลฝั่ง JS ตรงกับ PHP ทุกแถว

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

port สูตร Excel มาเว็บให้ตรงทุกตำแหน่งทศนิยม: กับดัก floating point
พอร์ตสูตรวิศวกรรมจากไฟล์ Excel มาเป็นเครื่องคำนวณเว็บ แล้วค่าไม่ตรงที่หลักทศนิยม 1e-13 — ไม่ใช่บั๊กคณิตศาสตร์ แต่เป็นลำดับการยกกำลังและการคูณของ floating point ที่ JS กับ Excel ประเมินไม่เหมือนกัน พร้อมวิธีอ่านสูตรสองชั้นด้วย openpyxl และทำ fixture ให้จับ regression ได้จริง