EST. 2026 — บันทึกงานเซิร์ฟเวอร์จริง SYSADMIN · SECURITY · AI · DIRECTADMIN เล่มที่ 01
THE SYSADMIN ALMANAC
หน้าหลัก / แท็ก / JavaScript
JavaScript

#JavaScript

12 บทความ
Web / CMS
ให้ AI คนละค่ายมาตรวจโค้ดที่ AI เขียน — กระบวนการ ไม่ใช่ความศรัทธา
AI

ให้ AI คนละค่ายมาตรวจโค้ดที่ AI เขียน — กระบวนการ ไม่ใช่ความศรัทธา

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

#ai#llm#ai-agent#claude-code
อ่าน 9 นาที·26 ต.ค.
ให้ลูกค้าเลือกรูปเองผ่านหน้าเว็บ โดยไม่ต้องมีระบบล็อกอิน
Web

ให้ลูกค้าเลือกรูปเองผ่านหน้าเว็บ โดยไม่ต้องมีระบบล็อกอิน

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

#php#javascript#web-security#permissions
อ่าน 8 นาที·23 ต.ค.
ฟอร์มแจ้งปัญหาบนเว็บ static ที่ไม่มีแบ็กเอนด์สักตัว
Web

ฟอร์มแจ้งปัญหาบนเว็บ static ที่ไม่มีแบ็กเอนด์สักตัว

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

#cloudflare#static-site#javascript#web-security
อ่าน 9 นาที·21 ต.ค.
แบนเนอร์คุกกี้ที่กั้นได้จริง โหลด GTM กับ GA4 หลังกดยอมรับเท่านั้น
Web

แบนเนอร์คุกกี้ที่กั้นได้จริง โหลด GTM กับ GA4 หลังกดยอมรับเท่านั้น

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

#seo#adsense#javascript#playwright
อ่าน 9 นาที·18 ต.ค.
หน้าเว็บว่างเปล่า ไม่มี error สักบรรทัด เพราะตั้งชื่อฟังก์ชันว่า top
Web

หน้าเว็บว่างเปล่า ไม่มี error สักบรรทัด เพราะตั้งชื่อฟังก์ชันว่า top

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

#javascript#debugging#troubleshooting#playwright
อ่าน 8 นาที·18 ต.ค.
รูปไม่โหลดในหน้าที่ซ่อนด้วย display:none เฉพาะบนมือถือ
Web

รูปไม่โหลดในหน้าที่ซ่อนด้วย display:none เฉพาะบนมือถือ

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

#javascript#css#mobile-dev#web-performance
อ่าน 9 นาที·17 ต.ค.
แอปเก็บเอกสารหน้าเดียวด้วย PHP กับ SQLite ที่เก็บต้นฉบับไว้เสมอ
Linux

แอปเก็บเอกสารหน้าเดียวด้วย PHP กับ SQLite ที่เก็บต้นฉบับไว้เสมอ

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

#php#sqlite#document#security
อ่าน 9 นาที·27 ก.ย.
ทำเอกสารยื่นราชการหลายสิบแผ่นจาก HTML ให้กดพิมพ์เองแล้วตรงขอบ
Linux

ทำเอกสารยื่นราชการหลายสิบแผ่นจาก HTML ให้กดพิมพ์เองแล้วตรงขอบ

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

#pdf#php#css#printing
อ่าน 10 นาที·26 ก.ย.
ฟีดข่าวค้างสามวันทั้งที่งานรันครบ เพราะฟีดไม่ได้เรียงตามวันที่
Linux

ฟีดข่าวค้างสามวันทั้งที่งานรันครบ เพราะฟีดไม่ได้เรียงตามวันที่

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

#python#javascript#rss#automation
อ่าน 10 นาที·25 ก.ย.
ย้ายการคำนวณจาก PHP ไปทำในเบราว์เซอร์: 12 วินาที เหลือ 12 มิลลิวินาที
Linux

ย้ายการคำนวณจาก PHP ไปทำในเบราว์เซอร์: 12 วินาที เหลือ 12 มิลลิวินาที

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

#performance#php#javascript#laravel
อ่าน 9 นาที·29 ส.ค.
WAF ตอบ 406 เพราะข้อความไทยใน POST — แก้ยังไงเมื่อไม่ใช่ root
Security

WAF ตอบ 406 เพราะข้อความไทยใน POST — แก้ยังไงเมื่อไม่ใช่ root

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

#modsecurity#waf#laravel#php
อ่าน 9 นาที·15 ส.ค.
port สูตร Excel มาเว็บให้ตรงทุกตำแหน่งทศนิยม: กับดัก floating point
Linux

port สูตร Excel มาเว็บให้ตรงทุกตำแหน่งทศนิยม: กับดัก floating point

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

#automation#python#debugging#structural
อ่าน 8 นาที·23 ก.ค.