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

บทความทั้งหมด

165 บทความ
ผ่าน sandbox ไม่ได้แปลว่าใช้ได้จริง — สัญญาณหลอก 7 แบบ
Linux

ผ่าน sandbox ไม่ได้แปลว่าใช้ได้จริง — สัญญาณหลอก 7 แบบ

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

#api#rest-api#testing#debugging
อ่าน 9 นาที·26 ต.ค.
ให้ AI คนละค่ายมาตรวจโค้ดที่ AI เขียน — กระบวนการ ไม่ใช่ความศรัทธา
AI

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

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

#ai#llm#ai-agent#claude-code
อ่าน 9 นาที·26 ต.ค.
ฉลากพิมพ์ไม่ตรงกระดาษ ตั้งระยะเริ่มพิมพ์ให้จบทีเดียว
Hardware

ฉลากพิมพ์ไม่ตรงกระดาษ ตั้งระยะเริ่มพิมพ์ให้จบทีเดียว

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

#printer#kotlin#android#hardware
อ่าน 9 นาที·25 ต.ค.
ต่อ Open API ธนาคารออก QR รับเงิน — จาก sandbox ถึงวงจรสถานะ
Web

ต่อ Open API ธนาคารออก QR รับเงิน — จาก sandbox ถึงวงจรสถานะ

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

#api#rest-api#payment#qrcode
อ่าน 10 นาที·25 ต.ค.
เขียนแบบตู้ไฟเป็น SVG ให้ช่างเอาไม้บรรทัดวัดจากกระดาษได้จริง
Hardware

เขียนแบบตู้ไฟเป็น SVG ให้ช่างเอาไม้บรรทัดวัดจากกระดาษได้จริง

แบบตู้ไฟที่ generate ออกมาจาก HTML ดูสวยดีแต่ช่างบอกว่าสัดส่วนเพี้ยน ผมเลยรื้อใหม่ทั้งแผ่น ยึดขนาดจริงจากแคตตาล็อกเป็นสมอ เขียน viewBox เป็นมิลลิเมตรตรงๆ แล้ววางแถบสเกลไว้ให้ช่างเอาไม้บรรทัดทาบพิสูจน์เองได้ว่าแบบที่ถืออยู่เป็น 1:10 จริง

#drafting#cad#electrical#printing
อ่าน 9 นาที·24 ต.ค.
ส่งไฟล์ขึ้นโฮสต์แล้วทับกันเงียบๆ สามกับดักตอนคัดลอกไฟล์
Linux

ส่งไฟล์ขึ้นโฮสต์แล้วทับกันเงียบๆ สามกับดักตอนคัดลอกไฟล์

ส่งไฟล์สองตัวที่ชื่อซ้ำกันขึ้นโฮสต์พร้อมกัน ตัวหลังทับตัวแรกเงียบๆ ไม่มี error ไม่มี exit code ผิด เว็บยังตอบ 200 ทุกหน้า แค่หน้าภาษาอังกฤษกลายเป็นหน้าภาษาไทย นี่คือสามกับดักที่ทำให้การคัดลอกไฟล์เสียหายโดยไม่มีอะไรเตือน

#deployment#pscp#plink#putty
อ่าน 8 นาที·24 ต.ค.
ย้ายเว็บ .aspx เก่าทั้งเว็บ ทำเป็น catalog JSON แล้วคัดรูปขยะออกเอง
Web

ย้ายเว็บ .aspx เก่าทั้งเว็บ ทำเป็น catalog JSON แล้วคัดรูปขยะออกเอง

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

#python#web-scraping#crawler#migration
อ่าน 10 นาที·23 ต.ค.
ให้ลูกค้าเลือกรูปเองผ่านหน้าเว็บ โดยไม่ต้องมีระบบล็อกอิน
Web

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

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

#php#javascript#web-security#permissions
อ่าน 8 นาที·23 ต.ค.
Build APM บน Windows: สารบัญ ทำ Apache + PHP 8.4 + MariaDB เอง
Web

Build APM บน Windows: สารบัญ ทำ Apache + PHP 8.4 + MariaDB เอง

ซีรีส์ 7 ตอนพาคอมไพล์ Apache 2.4.69, PHP 8.4.27 และ MariaDB 11.8.9 บน Windows 11 จาก source เอง ให้เวลาที่ PHP ออกแพตช์ความปลอดภัย แก้เลขเวอร์ชันในไฟล์เดียวแล้ว build ใหม่ได้ภายในวัน หน้านี้คือสารบัญ ภาพรวม เวลา ดิสก์ และทางลัดสามคำสั่ง

#devops#php#apache#mariadb
อ่าน 9 นาที·22 ต.ค.
Build APM บน Windows ตอนที่ 7: Deploy รัน และอัปเดต security patch
Web

Build APM บน Windows ตอนที่ 7: Deploy รัน และอัปเดต security patch

ตอนจบของซีรีส์ build Apache + PHP + MariaDB บน Windows ติดตั้งลง C:\APM สตาร์ตครั้งแรกและทดสอบ เปิดให้เครื่องใน LAN เข้าแบบปลอดภัย เล่าบั๊กจริงหกตัว (PidFile, plugin MariaDB, พอร์ต DB, ASLR 500, พาธมีช่องว่างและวงเล็บ) และขั้นตอนอัปเดตเวลามี security release ใหม่

#devops#windows#apache#php
อ่าน 20 นาที·22 ต.ค.
Build APM บน Windows ตอนที่ 6: build PHP 8.4 พร้อม redis imagick
Web

Build APM บน Windows ตอนที่ 6: build PHP 8.4 พร้อม redis imagick

ตอนที่ 6 ของซีรีส์ build Apache + PHP + MariaDB บน Windows จาก source พาไล่ 30-php.ps1 ทีละขั้น ตั้งแต่ php-sdk คำสั่ง configure ทั้งเส้น การคัดลอก DLL จนถึงทดสอบ JIT, redis และ imagick ว่าใช้ได้จริง

#php#windows#powershell#tutorial
อ่าน 14 นาที·22 ต.ค.
Build APM บน Windows ตอนที่ 5: คอมไพล์ ImageMagick 7 ให้ PHP imagick
Web

Build APM บน Windows ตอนที่ 5: คอมไพล์ ImageMagick 7 ให้ PHP imagick

ตอนที่ 5 ของซีรีส์ Build APM บน Windows พาคอมไพล์ ImageMagick 7.1.2-34 กับ delegate library ราว 40 ตัวจาก source ด้วย toolchain ทางการ พร้อมแพตช์ channel mask 64 เป็น 32 ที่ทำให้ imagick build ผ่าน และเหตุผลที่ HEIC เขียนไม่ได้

#windows#php#devops#powershell
อ่าน 14 นาที·22 ต.ค.
Build APM บน Windows ตอนที่ 4: คอมไพล์ MariaDB 11.8 LTS เอง
Web

Build APM บน Windows ตอนที่ 4: คอมไพล์ MariaDB 11.8 LTS เอง

ตอนที่ 4 ของซีรีส์ Build APM บน Windows พาคอมไพล์ MariaDB 11.8.9 จาก source ด้วย CMake และ Ninja ทีละขั้น ตั้งแต่เตรียมเครื่องมือ รันสคริปต์ ทดสอบบนพอร์ต 3399 ไปจนถึงเหตุผลที่ต้องล็อก collation เป็น utf8mb4_unicode_ci

#mariadb#windows#devops#powershell
อ่าน 14 นาที·22 ต.ค.
Build APM บน Windows ตอนที่ 3: build Apache httpd 2.4.69 ด้วย CMake
Web

Build APM บน Windows ตอนที่ 3: build Apache httpd 2.4.69 ด้วย CMake

build APR, APR-util, httpd 2.4.69 และ mod_fcgid ด้วย CMake กับ Ninja บน Windows อธิบายทุก option ว่าใส่ทำไม ไล่ DLL ที่ต้องวางข้าง httpd.exe ด้วย dumpbin ดักไม่ให้ลิงก์ DLL ตัว debug แล้วทดสอบ config ด้วย httpd -t

#apache#windows#web-server#cpp
อ่าน 14 นาที·22 ต.ค.
Build APM บน Windows ตอนที่ 2: ดึง source และ lib ด้วย vcpkg
Web

Build APM บน Windows ตอนที่ 2: ดึง source และ lib ด้วย vcpkg

ขั้นที่ 1 และ 2 ของการ build Apache เองบน Windows อ่านสคริปต์ 00-fetch.ps1 กับ 10-deps-vcpkg.ps1 ทีละบรรทัด ตรวจ sha256 ของ source ทุกตัว แล้วให้ vcpkg build OpenSSL 3.5 LTS กับ lib อีก 8 ตัวจาก source พร้อมคำสั่งตรวจผลทุกขั้น

#devops#windows#apache#powershell
อ่าน 14 นาที·22 ต.ค.
Build APM บน Windows ตอนที่ 1: เตรียมเครื่องมือและแตก build kit
Web

Build APM บน Windows ตอนที่ 1: เตรียมเครื่องมือและแตก build kit

ตอนแรกของซีรีส์ build Apache + PHP 8.4 + MariaDB เองบน Windows ติดตั้ง Visual Studio 2022 Build Tools พร้อม component ที่จำเป็น Git CMake Ninja PowerShell 7 ตั้ง Defender แตก build kit ลง C:\apm-build แล้วไล่ดูโฟลเดอร์ versions.json และสคริปต์ lib.ps1 กับ build-all.ps1 ทีละบรรทัด

#windows#devops#powershell#cpp
อ่าน 14 นาที·22 ต.ค.
PHP มีช่องโหว่ RCE ระดับวิกฤตสองตัว (php2shell) อัปเดตด่วนวันนี้
Security

PHP มีช่องโหว่ RCE ระดับวิกฤตสองตัว (php2shell) อัปเดตด่วนวันนี้

CVE-2026-109618 กับ CVE-2026-109619 เป็นช่องโหว่ RCE ของ PHP ที่ CVSS 9.2 มี exploit สาธารณะแล้ว กระทบทุกเครื่องที่ใช้ PHP รับ request เว็บ รุ่นที่แก้แล้วคือ 8.5.12, 8.4.27, 8.3.36, 8.2.35 บันทึกนี้รวมวิธีเช็กเวอร์ชัน วิธีอัปเดตทั้ง Debian, RHEL, DirectAdmin, Docker และ Windows กับค่าชั่วคราวระหว่างรอแพตช์

#cve#php#security#rce
อ่าน 10 นาที·22 ต.ค.
กรอกฟอร์มราชการลง PDF ด้วยสคริปต์ และทำสำเนาบัตรให้ปลอดภัย
AI

กรอกฟอร์มราชการลง PDF ด้วยสคริปต์ และทำสำเนาบัตรให้ปลอดภัย

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

#pdf#python#document#printing
อ่าน 10 นาที·22 ต.ค.
ทำแอปคุมเพจผ่าน Graph API สามปลายทางที่ลืมแล้วไม่ผ่านรีวิว
Web

ทำแอปคุมเพจผ่าน Graph API สามปลายทางที่ลืมแล้วไม่ผ่านรีวิว

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

#api#rest-api#php#web-security
อ่าน 10 นาที·22 ต.ค.
VM เห็นอุปกรณ์แต่ไม่มีเน็ต เพราะ Windows ไม่มีไดรเวอร์ CDC ECM
Hardware

VM เห็นอุปกรณ์แต่ไม่มีเน็ต เพราะ Windows ไม่มีไดรเวอร์ CDC ECM

ส่ง USB LTE dongle เข้า VM วินโดวส์แล้วเครื่องเห็นอุปกรณ์ แต่ไม่มีการ์ดเน็ตโผล่มา สาเหตุไม่ได้อยู่ที่ซิมหรือที่การส่งผ่านพอร์ต แต่อยู่ที่ dongle เปิดหน้าตาแบบ CDC ECM ซึ่งวินโดวส์ไม่มีไดรเวอร์ติดมาให้ พร้อมกับดักโหมดสตอเรจและ dhclient ที่ทับ resolv.conf ของโฮสต์

#proxmox#hardware#windows#linux
อ่าน 9 นาที·21 ต.ค.
ฟอร์มแจ้งปัญหาบนเว็บ static ที่ไม่มีแบ็กเอนด์สักตัว
Web

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

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

#cloudflare#static-site#javascript#web-security
อ่าน 9 นาที·21 ต.ค.
ตารางเกณฑ์ในสเปรดชีตที่ไม่ได้ผูกสูตร ถอดค่าคงที่กลับเป็นสูตร
AI

ตารางเกณฑ์ในสเปรดชีตที่ไม่ได้ผูกสูตร ถอดค่าคงที่กลับเป็นสูตร

ชีตที่มีตารางเกณฑ์วางอยู่ข้าง ๆ แต่ไม่ได้ผูก VLOOKUP คนอ่านตารางแล้วพิมพ์ค่าลงช่องเอง พลาดเมื่อไรไม่มีใครรู้ บทความนี้ว่าด้วยการแยกช่องสูตรกับช่องพิมพ์มือออกจากกัน แล้วถอดคอลัมน์ตัวคูณ 16 ค่ากลับมาเป็นสูตรเดียวที่ตรงทั้งตาราง

#spreadsheet#python#reverse-engineering#audit
อ่าน 10 นาที·20 ต.ค.
เร่งคลิปจอเป็นช่วง ๆ แต่ให้นาฬิกาบนภาพเดินตามเวลาต้นฉบับ
AI

เร่งคลิปจอเป็นช่วง ๆ แต่ให้นาฬิกาบนภาพเดินตามเวลาต้นฉบับ

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

#ffmpeg#video-editing#python#automation
อ่าน 9 นาที·20 ต.ค.
เว็บสองภาษา 26 หน้า ทำไมต้องกลายเป็น .php แล้วลิงก์พังทั้งเว็บ
Web

เว็บสองภาษา 26 หน้า ทำไมต้องกลายเป็น .php แล้วลิงก์พังทั้งเว็บ

หน้าโปรดักชันโชว์แท็ก PHP เป็นตัวหนังสือดิบ เพราะเว็บเซิร์ฟเวอร์เสิร์ฟ .html เป็นไฟล์ static พอเปลี่ยนทั้ง 26 หน้าเป็น .php ลิงก์ก็พังทั้งเว็บ แล้วพอทำ clean URL ต่อหน้าย่อยก็เด้งกลับเป็น .php เพราะ rewrite กับ 301 ทำครึ่งเดียว บทความนี้คือ .htaccess เต็ม กติกา $base แปดกรณี และสคริปต์ที่ทำทีเดียวทั้งเว็บ

#htaccess#apache#nginx#php
อ่าน 9 นาที·19 ต.ค.
ยิง API สองหมื่นกว่าครั้ง ให้หยุดกลางทางแล้วต่อได้ และไม่ได้ไฟล์เสีย
Linux

ยิง API สองหมื่นกว่าครั้ง ให้หยุดกลางทางแล้วต่อได้ และไม่ได้ไฟล์เสีย

งานยิง API สร้างไฟล์ 26,850 ไฟล์บนโควตาที่จำกัด 20 ครั้งต่อนาที สามชิ้นที่ขาดไม่ได้คือ ตัวหน่วงที่นับรวมกันทั้งระบบ การต่องานจากของที่มีอยู่บนดิสก์ และตัวตรวจไฟล์แยกต่างหาก เพราะไฟล์ที่หลุดตอนเน็ตสะดุดมีนามสกุลถูกและขนาดไม่เป็นศูนย์

#python#api#rate-limiting#automation
อ่าน 9 นาที·19 ต.ค.
แบนเนอร์คุกกี้ที่กั้นได้จริง โหลด 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 ต.ค.
ระบบเฝ้าระวังที่ยิงถี่เกิน จนล้มอุปกรณ์ทั้งฟาร์มเอง
Linux

ระบบเฝ้าระวังที่ยิงถี่เกิน จนล้มอุปกรณ์ทั้งฟาร์มเอง

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

#monitoring#linux#python#systemd
อ่าน 10 นาที·17 ต.ค.
รูปไม่โหลดในหน้าที่ซ่อนด้วย 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 ต.ค.
ให้เว็บอ่านเครื่องอ่านบัตรที่เคาน์เตอร์ ด้วย agent บน localhost
Hardware

ให้เว็บอ่านเครื่องอ่านบัตรที่เคาน์เตอร์ ด้วย agent บน localhost

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

#hardware#cpp#windows#gui
อ่าน 11 นาที·16 ต.ค.
NVR ร้องไม่หยุด แต่ตอนดิสก์พังจริงกลับเงียบสนิท
Network

NVR ร้องไม่หยุด แต่ตอนดิสก์พังจริงกลับเงียบสนิท

เสียงที่ NVR ร้องทั้งวันไม่ใช่ videoloss อย่างที่ทุกคนคิด มันคือ ipconflict จากกล้องที่เป็น DHCP แล้ว IP ชนกันเอง พอมีคนรำคาญแล้วไปปิดเสียงยกเครื่อง วันที่ดิสก์สองลูกพังพร้อมกันเลยไม่มีเสียงเตือนสักแอะ บทความนี้แก้ที่ policy ทีละ event ด้วย ISAPI

#cctv#nvr#hikvision#isapi
อ่าน 9 นาที·16 ต.ค.
ลบใบหน้าในเครื่องสแกนไม่ได้ เพราะ API ตอบ notSupport
Hardware

ลบใบหน้าในเครื่องสแกนไม่ได้ เพราะ API ตอบ notSupport

เครื่องสแกนใบหน้าที่ประตูโฆษณาว่ามีคำสั่งลบใบหน้าใน FDLib แต่ยิงคำสั่งจริงกลับตอบ notSupport ทุกรูปแบบ คนที่ออกไปแล้วเลยยังสแกนเข้าได้อยู่ บทความนี้เล่าทางที่ตัน ทางที่ใช้ได้จริงคือ UserInfo/Modify แบบ body สั้นที่สุด และวงจร sync ทะเบียนคนสองทางที่รันทุกคืน

#hikvision#isapi#hardware#python
อ่าน 10 นาที·15 ต.ค.
ไม่มีมิเตอร์ kWh แต่อยากรู้ค่าไฟรายวัน คิดจากกระแสที่วัดได้
Hardware

ไม่มีมิเตอร์ kWh แต่อยากรู้ค่าไฟรายวัน คิดจากกระแสที่วัดได้

บันทึกการแปลงค่ากระแสจากหัววัด CT ให้กลายเป็นหน่วยไฟและค่าไฟรายวันแบบแยกช่วงเวลา ตั้งแต่สูตรกำลังไฟสามเฟส จังหวะการอ่านที่เป็นส่วนหนึ่งของสูตร การข้ามช่วงไฟดับ ไปจนถึงการแยกช่วง peak กับ off-peak ด้วยเลขคณิตบน epoch และตารางสรุปรายวันที่ทำให้หน้าเว็บเร็วขึ้นเจ็ดเท่า

#energy#power-meter#electrical#modbus
อ่าน 10 นาที·15 ต.ค.
อ่านค่าจากอุปกรณ์ Modbus ที่ไม่รู้ว่าเป็นตัวอะไร พิสูจน์ก่อนตีความ
Hardware

อ่านค่าจากอุปกรณ์ Modbus ที่ไม่รู้ว่าเป็นตัวอะไร พิสูจน์ก่อนตีความ

บันทึกการไล่หาอุปกรณ์บนบัส RS485 ที่ไม่มีเอกสาร ตั้งแต่กวาด baud กับ address ทีละชุด ไปจนถึงการพิสูจน์ว่า register ตัวไหนมีค่าจริงตัวไหนตาย และบทเรียนว่าการเดาชนิดอุปกรณ์จากรูปแบบตัวเลขอย่างเดียวทำให้ตีความผิดได้ยาวเป็นเดือน

#modbus#rs485#serial#iot
อ่าน 11 นาที·14 ต.ค.
เขียนค่าลง DirectAdmin ตอนที่ API มีแต่ฝั่งอ่าน ต้องขับฟอร์มของแผงเอง
DirectAdmin

เขียนค่าลง DirectAdmin ตอนที่ API มีแต่ฝั่งอ่าน ต้องขับฟอร์มของแผงเอง

บันทึกการทำให้แอปหลังบ้านสร้างและแก้แพ็กเกจโฮสติ้งบน DirectAdmin ได้ ทั้งที่ CMD_API ตัวทางการมีแต่คำสั่งอ่าน ต้อง POST เข้าฟอร์มของแผงควบคุมเอง พร้อมกฎการยืนยันผลที่ห้ามใช้ regex และสวิตช์ตัดวงจรสองชั้นที่ปิดไว้เป็นค่าตั้งต้น

#directadmin#shared-host#php#laravel
อ่าน 9 นาที·14 ต.ค.
nameserver ที่ registrar ไม่ตรงกับระบบบิลลิ่ง ออดิตสามฝั่งก่อนแก้
Network

nameserver ที่ registrar ไม่ตรงกับระบบบิลลิ่ง ออดิตสามฝั่งก่อนแก้

บันทึกการไล่บั๊ก "Wrong response from the server" ตอนกดเปลี่ยน nameserver ในระบบบิลลิ่ง ที่พังเฉพาะโดเมนที่มีข้อมูล glue IP ตกค้าง แล้วทำออดิตเทียบสามฝั่งระหว่าง registrar ระบบบิลลิ่ง และโซน DNS จริง ก่อนจะกล้าแก้อะไรสักตัว

#dns#cloudflare#networking#rest-api
อ่าน 9 นาที·13 ต.ค.
ดูดเมลเข้าระบบโดยไม่ทำลายกล่องจดหมายของคนอื่น
Linux

ดูดเมลเข้าระบบโดยไม่ทำลายกล่องจดหมายของคนอื่น

กล่องเมลที่แอปจะไปดึงของ เป็นกล่องที่คนใช้งานอยู่จริงทุกวัน — ดึงด้วย UNSEEN คือเมลหายเงียบเมื่อเจ้าของเปิดอ่านบนมือถือก่อน cron วิธีที่ถูกคือ UID SEARCH คู่กับ UIDVALIDITY และ BODY.PEEK พร้อมการกันซ้ำที่ต้องทำฝั่งเราเอง

#mail#imap#pop3#dovecot
อ่าน 10 นาที·13 ต.ค.
อ่านจากฐานสำรอง ต้องมีป้ายบอกว่าข้อมูลเก่ากี่นาที
Linux

อ่านจากฐานสำรอง ต้องมีป้ายบอกว่าข้อมูลเก่ากี่นาที

replication บอกว่าตามหลัง 0 วินาทีได้ทั้งที่ข้อมูลค้างอยู่เมื่อวาน เพราะสองสัญญาณนี้วัดคนละเรื่องกัน — วิธีตั้งตัวเฝ้าที่เทียบทั้ง Seconds_Behind_Master และความสดของข้อมูลธุรกิจ พร้อมจับคนที่แอบเขียนลง slave และตัวเฝ้าที่เฝ้าตัวเฝ้าอีกชั้น

#mariadb#mysql#monitoring#alerting
อ่าน 9 นาที·12 ต.ค.
ให้ AI อ่านเอกสาร แต่ให้โค้ดเป็นคนคิดเลข
AI

ให้ AI อ่านเอกสาร แต่ให้โค้ดเป็นคนคิดเลข

controller บังคับให้คนกรอกอยู่ในช่วง 0 ถึง 100 แต่เส้นทางที่ AI อ่านค่าจากเอกสารแล้วป้อนเข้ามาตรวจแค่ว่าเป็นตัวเลข ค่าติดลบตัวเดียวดันผลลัพธ์ขึ้นไป 5.25 เท่าโดยไม่มี error — บทเรียนเรื่องการมองเอาต์พุตของ AI เป็น input ที่ไม่น่าเชื่อถือเท่ากับที่คนกรอก

#ai#llm#claude#claude-code
อ่าน 10 นาที·12 ต.ค.
แอปเป็น UTC คนคิดเป็นเวลาไทย — เพี้ยน 7 ชั่วโมงแบบไม่มี error
Linux

แอปเป็น UTC คนคิดเป็นเวลาไทย — เพี้ยน 7 ชั่วโมงแบบไม่มี error

ตั้งเวลาเผยแพร่ไว้บ่ายสาม ของขึ้นจริงสี่ทุ่ม ไม่มี error ไม่มี log อะไรผิด เพราะแอปเก็บเป็น UTC แต่คนกรอกคิดเป็นเวลาไทย บทความนี้ไล่ตั้งแต่ค่าที่ตั้งใน env แล้วไม่มีผล ไปจนถึงบรรทัดเดียวที่เขียนหน้าปัดไทยลงคอลัมน์ที่ทุกคนอ่านเป็น UTC

#laravel#php#mariadb#debugging
อ่าน 9 นาที·11 ต.ค.
time-series เป็น JSON โตวันละ 50 MB ย้ายลงคอลัมน์โดยไม่แก้ dashboard
Linux

time-series เป็น JSON โตวันละ 50 MB ย้ายลงคอลัมน์โดยไม่แก้ dashboard

เก็บค่าที่อ่านจากอุปกรณ์ทั้งเฟรมเป็น JSON array วินาทีละแถว ผ่านไปสองสัปดาห์ตารางโต 183 MB ที่ปลายทางและ 625 MB บนเซิร์ฟเวอร์ พร้อมกับ JSON_EXTRACT ที่ทำ index ไม่ได้ — วิธีย้ายไปเก็บเป็นคอลัมน์ int แล้วให้ API ประกอบ array คืนแบบ sparse เพื่อไม่ให้ dashboard รู้ตัวสักบรรทัด

#mariadb#mysql#migration#performance
อ่าน 10 นาที·11 ต.ค.
ไฟล์ลับคุม 600 ครบ แต่ log 0644 ถูกอัปออกนอกเครื่องทุกคืน
Security

ไฟล์ลับคุม 600 ครบ แต่ log 0644 ถูกอัปออกนอกเครื่องทุกคืน

เข้ารหัส .env เรียบร้อย คุมสิทธิ์ไฟล์ลับครบทุกตัว แต่ข้อมูลลูกค้ายังรั่วออกนอกเครื่องทุกคืนผ่านทางที่ไม่มีใครจัดว่าเป็นความลับ นั่นคือไฟล์ log ที่อ่านได้ทั้งเครื่องและถูกมัดรวมขึ้น object storage พร้อม backup พร้อมวิธีปิดที่ต้นทางด้วยการ log แค่รหัสผลลัพธ์

#security#logging#backup#offsite
อ่าน 10 นาที·10 ต.ค.
ไฟร์วอลล์ขาออกทำระบบเช็คชื่อโดเมนพัง — root ทดสอบแล้วผ่าน
Security

ไฟร์วอลล์ขาออกทำระบบเช็คชื่อโดเมนพัง — root ทดสอบแล้วผ่าน

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

#firewall#csf#security#networking
อ่าน 9 นาที·10 ต.ค.
เว็บกับคิวคนละผู้ใช้ — mkdir 0700 ฆ่า default ACL ทิ้งทั้งโฟลเดอร์
Linux

เว็บกับคิวคนละผู้ใช้ — mkdir 0700 ฆ่า default ACL ทิ้งทั้งโฟลเดอร์

แอปตัวเดียวแต่รันด้วยสองผู้ใช้ ฝั่งเว็บเป็น php-fpm ฝั่งคิวเป็นอีกบัญชีหนึ่ง ตั้ง default ACL ไว้ครบแล้วยังเขียนข้ามกันไม่ได้ ต้นเหตุคือ mkdir โหมด 0700 ที่ไปตั้ง mask ทับจนสิทธิ์ ACL หายเกลี้ยง พร้อมกับดักเรื่องลบไฟล์ที่ต้องมีสิทธิ์ที่โฟลเดอร์ ไม่ใช่ที่ไฟล์

#linux#permissions#posix-acl#php-fpm
อ่าน 9 นาที·9 ต.ค.
บริการยังรันอยู่ แต่ตายไปแล้ว — systemd restart ช่วยไม่ได้
Linux

บริการยังรันอยู่ แต่ตายไปแล้ว — systemd restart ช่วยไม่ได้

เน็ตหลุดยาว DNS ใช้ไม่ได้ เดมอนที่ถือ session กับ API ภายนอกวนล็อกอินไม่สำเร็จ 194 รอบ แล้วค้างกลางขั้นตอน ไม่ exit ระบบเลยไม่ restart ให้ — ว่าด้วยการเลิกวัดว่า process ยังอยู่ไหม แล้วหันมาวัดความสดของข้อมูลแทน

#systemd#linux#monitoring#alerting
อ่าน 9 นาที·9 ต.ค.
tinker ส่งเมลผ่าน แต่เว็บส่งไม่ออก — proc_open ที่ปิดอยู่ใน FPM
DirectAdmin

tinker ส่งเมลผ่าน แต่เว็บส่งไม่ออก — proc_open ที่ปิดอยู่ใน FPM

ทดสอบส่งเมลจาก tinker ผ่านฉลุย แต่พอกดจากฟอร์มจริงกลับไม่มีอะไรออกเลย และ mail log ไม่มีสักบรรทัด — เพราะ CLI กับ PHP-FPM ไม่ใช่ PHP ตัวเดียวกัน พร้อมสูตร SMTP AUTH ที่ใช้ได้จริงบนโฮสต์ DirectAdmin และกฎเรื่อง From ที่ห้ามพลาด

#mail#smtp#laravel#php
อ่าน 9 นาที·8 ต.ค.
deploy แล้วเว็บไม่อัปเดต — ไล่แคชห้าชั้นให้จบในครั้งเดียว
DirectAdmin

deploy แล้วเว็บไม่อัปเดต — ไล่แคชห้าชั้นให้จบในครั้งเดียว

อัปไฟล์ขึ้นแล้ว เปิดดูยังเป็นของเก่า กด Ctrl+F5 ก็ยังเก่า — เพราะระหว่างไฟล์บนดิสก์กับสิ่งที่คนเห็นมีแคชคั่นอยู่ห้าชั้น แต่ละชั้นล้างคนละวิธี บทความนี้คือลำดับล้างที่ผมใช้ประจำ พร้อมกับดักที่ทำให้เว็บ 500 ค้างหลังสั่งล้าง view cache

#deployment#laravel#php#php-fpm
อ่าน 10 นาที·8 ต.ค.
route:cache แล้วทุก GET กลายเป็น 405 — กับดักแอปใต้ sub-path
DirectAdmin

route:cache แล้วทุก GET กลายเป็น 405 — กับดักแอปใต้ sub-path

deploy เสร็จ กด optimize ตามคู่มือ แล้วทุกหน้าตอบ 405 Method Not Allowed ทั้งที่ route:list ยืนยันว่า route ถูกต้อง — เรื่องของ route cache ที่พังเฉพาะบางเครื่อง วิธีแยกให้ขาดใน 30 วินาที และของแถมอีกสามอย่างที่เจอพร้อมกันตอนเอาแอปไปวางใต้ sub-path

#laravel#php#deployment#apache
อ่าน 9 นาที·7 ต.ค.
php -l ผ่าน แต่หน้าเว็บ 500 — ประตูตรวจก่อน commit ที่คอมไพล์จริง
Linux

php -l ผ่าน แต่หน้าเว็บ 500 — ประตูตรวจก่อน commit ที่คอมไพล์จริง

เทมเพลตพังสองรอบในเดือนเดียวทั้งที่ php -l ผ่านหมด เพราะ php -l ไม่รู้จักไวยากรณ์ของ Blade บทความนี้คือประตูตรวจ 6 ด่านที่ผมวางไว้ก่อน commit — คอมไพล์ view จริงแล้ว lint ไฟล์ที่คอมไพล์ออกมาซ้ำอีกชั้น พร้อมสคริปต์กวาด GET ทุก route ผ่าน Kernel

#laravel#php#blade#testing
อ่าน 9 นาที·7 ต.ค.
งานที่ยิงออกนอกระบบ ต้องจองสถานะก่อนยิงเสมอ
Linux

งานที่ยิงออกนอกระบบ ต้องจองสถานะก่อนยิงเสมอ

guard แบบ "อ่านสถานะแล้วค่อยยิง" ดูปลอดภัยจนถึงวันที่ worker โดนฆ่าหลังยิงแต่ก่อนเขียนฐานข้อมูล แล้ว retry ก็ยิงซ้ำให้ลูกค้าเห็นของสองรอบ บทความนี้คือชุดกันซ้ำทั้งชุดที่ผมใช้ ตั้งแต่การจองแบบ atomic ไปจนถึง retry_after กับ failed() ที่ห้ามทับสถานะที่สำเร็จแล้ว

#laravel#php#queue#worker
อ่าน 11 นาที·6 ต.ค.
โค้ดชุดเดียวสองบทบาท เว็บอยู่โฮสต์ worker อยู่เครื่องที่บ้าน
Linux

โค้ดชุดเดียวสองบทบาท เว็บอยู่โฮสต์ worker อยู่เครื่องที่บ้าน

ระบบทั้งตัวเคยวิ่งอยู่บนเครื่องเดียวหลังเน็ตบ้าน เครื่องดับทีเดียวทีมใช้อะไรไม่ได้เลย ผมเลยแยกเป็นสองบทบาทด้วยโค้ดชุดเดิม — เว็บอยู่โฮสต์ที่เปิดตลอด งานหนักอยู่เครื่องที่บ้านแล้ววิ่งมาดึงงานเอง พร้อมตาราง claim แบบ atomic และแผนสลับ 18 ขั้นที่มีทางถอย

#laravel#php#queue#worker
อ่าน 12 นาที·6 ต.ค.
อุโมงค์เส้นเดียวคือทางเข้าเดียว และเป็นจุดตายเดียวด้วย
Network

อุโมงค์เส้นเดียวคือทางเข้าเดียว และเป็นจุดตายเดียวด้วย

เครื่องทำงานอยู่หลัง NAT ไม่มีพอร์ตเปิดจากอินเทอร์เน็ตเลยสักพอร์ต ทุกทางเข้าวิ่งผ่าน cloudflared เส้นเดียว — ทั้งเว็บ ทั้ง SSH ทั้งรีโมตเดสก์ท็อป บทความนี้เล่า ingress ทั้งสี่เส้นที่ผมวางไว้ วิธีอ่านสัญญาณตอนมันล่ม และกับดักที่ทำให้อุโมงค์ไม่ขึ้นตอนบูต

#cloudflare#cloudflared#tunnel#zero-trust
อ่าน 10 นาที·5 ต.ค.
แจ้งเตือนถี่เกินเท่ากับไม่ได้แจ้ง จูนบอทให้คนอ่านจริง
Linux

แจ้งเตือนถี่เกินเท่ากับไม่ได้แจ้ง จูนบอทให้คนอ่านจริง

วันเดียว 28 เหตุการณ์กลายเป็น 56 ข้อความ และ 57 เปอร์เซ็นต์ของทั้งหมดเป็นการเตือนซ้ำทุก 30 นาที บทความนี้ว่าด้วยการแยกชั้นผู้รับ การรวมรอบที่ซ้อนกัน สถานะที่รอดจากการรีสตาร์ต และเหตุผลที่ห้ามใส่ keepalive กับ session ของแอปแชต

#monitoring#alerting#bot#logging
อ่าน 9 นาที·5 ต.ค.
บัญชีเมลถูกยึดจริง หรือแค่โดนเดารหัส พิสูจน์ให้ชี้ขาดก่อนแจ้ง
Security

บัญชีเมลถูกยึดจริง หรือแค่โดนเดารหัส พิสูจน์ให้ชี้ขาดก่อนแจ้ง

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

#mail#mail-forensics#exim#forensics
อ่าน 11 นาที·4 ต.ค.
ชุดแบบผังโรงงานอาหาร ต้องมีกี่แผ่น สเกลเท่าไร ลงกระดาษยังไง
AI

ชุดแบบผังโรงงานอาหาร ต้องมีกี่แผ่น สเกลเท่าไร ลงกระดาษยังไง

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

#drafting#cad#sketchup#3d-modeling
อ่าน 10 นาที·4 ต.ค.
จากโมเดลเป็นผังตัดเหล็ก 6 เมตร แล้วออกชีทตัดให้ช่าง
AI

จากโมเดลเป็นผังตัดเหล็ก 6 เมตร แล้วออกชีทตัดให้ช่าง

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

#structural#steel-design#sketchup#ruby
อ่าน 9 นาที·3 ต.ค.
ถอดปริมาณงานจากโมเดล SketchUp ด้วยสคริปต์ Ruby
AI

ถอดปริมาณงานจากโมเดล SketchUp ด้วยสคริปต์ Ruby

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

#3d-modeling#sketchup#ruby#drafting
อ่าน 9 นาที·3 ต.ค.
ทำชุดแผ่นแบบจากโมเดล SketchUp วางเลขกับเส้นระยะอัตโนมัติ
AI

ทำชุดแผ่นแบบจากโมเดล SketchUp วางเลขกับเส้นระยะอัตโนมัติ

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

#3d-modeling#sketchup#ruby#python
อ่าน 10 นาที·2 ต.ค.
วัดผังอาคารด้วยมือถือ แล้วหาทิศเหนือจริงด้วย GNSS
AI

วัดผังอาคารด้วยมือถือ แล้วหาทิศเหนือจริงด้วย GNSS

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

#gis#geospatial#mapping#android
อ่าน 10 นาที·2 ต.ค.
ถอดแบบจาก PDF ที่วาดไม่ตรงสเกล แล้ววาดกลับให้ตรงระยะ
AI

ถอดแบบจาก PDF ที่วาดไม่ตรงสเกล แล้ววาดกลับให้ตรงระยะ

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

#3d-modeling#sketchup#python#pdf
อ่าน 10 นาที·1 ต.ค.
นิวทรัลพ่วงข้ามหม้อแปลง ทำไมบาลานซ์เฟสอย่างเดียวไม่จบ
Hardware

นิวทรัลพ่วงข้ามหม้อแปลง ทำไมบาลานซ์เฟสอย่างเดียวไม่จบ

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

#hardware#electrical#power#engineering
อ่าน 9 นาที·30 ก.ย.
เลือกขนาดสายเมนกับเบรกเกอร์ พิกัดกระแสขึ้นกับวิธีติดตั้ง
Hardware

เลือกขนาดสายเมนกับเบรกเกอร์ พิกัดกระแสขึ้นกับวิธีติดตั้ง

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

#hardware#electrical#power#engineering
อ่าน 10 นาที·29 ก.ย.
สายเมนละลายเป็นจุด ๆ วินิจฉัยฟีดเดอร์เกินพิกัดจากรอบทำงานจริง
Hardware

สายเมนละลายเป็นจุด ๆ วินิจฉัยฟีดเดอร์เกินพิกัดจากรอบทำงานจริง

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

#hardware#electrical#power#engineering
อ่าน 10 นาที·28 ก.ย.
แอปเก็บเอกสารหน้าเดียวด้วย 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 ก.ย.
ส่งไฟล์จากงานอัตโนมัติเข้า Telegram กับเพดาน 50 MB ของ Bot API
Linux

ส่งไฟล์จากงานอัตโนมัติเข้า Telegram กับเพดาน 50 MB ของ Bot API

วางบริการเล็ก ๆ ในเครื่องที่รับไฟล์จากสคริปต์แล้วส่งเข้า Telegram ให้ตัวเอง เป็นช่องทางออกทางเดียวล้วน ไม่มี polling ไม่รับคำสั่งกลับ พร้อมเพดานจริงของ Bot API ที่ต้องรู้ก่อนเขียน ทั้ง 50 MB ต่อไฟล์ รูปเกิน 10 MB ที่ต้องส่งเป็นเอกสาร และกับดักภาษาไทยใน curl บน Windows

#telegram#bot#automation#python
อ่าน 8 นาที·24 ก.ย.
พอร์ต CDP ยังตอบ แต่สั่งงานไม่ได้ เพราะ Chrome อัปเดตทับตัวเอง
Linux

พอร์ต CDP ยังตอบ แต่สั่งงานไม่ได้ เพราะ Chrome อัปเดตทับตัวเอง

เครื่องเดียวรันงานอัตโนมัติหลายตัวที่ต้องใช้เบราว์เซอร์จริง แล้วเจอสองเรื่องพร้อมกัน — งานแย่งแท็บกันเองจนได้ผลของคนอื่น และ Chrome อัปเดตไฟล์ทับตัวเองขณะโปรเซสยังรัน ทำให้พอร์ตยังตอบแต่สั่ง Runtime.evaluate ไม่ได้ บทความนี้คือวิธีแยกงาน วิธีตรวจให้เจอ และตัวซ่อมที่ทำงานเอง

#cdp#chromium#automation#windows
อ่าน 9 นาที·23 ก.ย.
ไฟดับ 25 ชั่วโมง แล้วงานตามเวลาที่พลาดไปหายไปเลย
Linux

ไฟดับ 25 ชั่วโมง แล้วงานตามเวลาที่พลาดไปหายไปเลย

เครื่องที่รันงานอัตโนมัติดับสามรอบในสามวัน รอบยาวสุด 25 ชั่วโมง พอกลับมาถึงรู้ว่างานที่ตั้งด้วย Task Scheduler ตรง ๆ หายไปทั้งรอบไม่รันชดเชย ส่วนงานที่ผ่านตัวสั่งงานซึ่งเทียบเวลาเองไล่ตามครบทุกตัว บทความนี้คือค่าที่ต้องเปิด สิ่งที่ห้ามทำตอนกู้ และกับดักที่ทำให้อ่านสถานะผิด

#windows#scheduler#automation#powershell
อ่าน 9 นาที·22 ก.ย.
งานอัตโนมัติหยุดส่งรูป 4 วัน เพราะ subprocess เลือก ssh ตาม PATH
Linux

งานอัตโนมัติหยุดส่งรูป 4 วัน เพราะ subprocess เลือก ssh ตาม PATH

เขียน subprocess.run(["ssh", ...]) แล้วปล่อยให้ระบบเลือกไบนารีตาม PATH ของคนเรียก วันหนึ่งคนเรียกเปลี่ยน ไบนารีเปลี่ยนตาม งานส่งไฟล์ตายเงียบ 4 วันโดยรายงานว่าสำเร็จทุกครั้ง บทความนี้คือวิธีจับอาการ และตัวช่วยที่ probe ไบนารีจริงก่อนใช้ พร้อมด่านตรวจความครบก่อนบอกว่าเสร็จ

#ssh#python#automation#scp
อ่าน 9 นาที·21 ก.ย.
แยกลิงก์พังออกจาก ISP ล่ม ก่อนสั่งรีสตาร์ตอะไรบนเครื่อง
Linux

แยกลิงก์พังออกจาก ISP ล่ม ก่อนสั่งรีสตาร์ตอะไรบนเครื่อง

watchdog ที่เขียนกันทั่วไปคือ ping ไม่ผ่านแล้ว restart NetworkManager ซึ่งผิดครึ่งหนึ่งของเวลา เพราะเน็ตไม่ออกอาจแปลว่า ISP ล่ม ไม่ใช่การ์ดพัง บทความนี้แยกสามสถานะออกจากกันด้วย nmcli แล้วไต่บันไดจากเบาไปหนักถึงขั้น PCI remove และ rescan โดยไม่รีบูตเครื่อง

#linux#networking#systemd#debian
อ่าน 9 นาที·20 ก.ย.
ยืม VLAN ให้เครื่องมือ Windows ที่ต้องอยู่ L2 เดียวกับอุปกรณ์
Network

ยืม VLAN ให้เครื่องมือ Windows ที่ต้องอยู่ L2 เดียวกับอุปกรณ์

โปรแกรมค้นหาอุปกรณ์ของผู้ผลิตหลายเจ้าใช้ broadcast ซึ่งไม่ข้าม L3 ต่อ VPN เข้ามาก็ยังมองไม่เห็นอุปกรณ์ ทางออกที่ไม่ต้องแตะพอร์ตสวิตช์คือวาง VM Windows ตัวเล็กไว้บน Proxmox แล้วให้ขาของมันอยู่ใน VLAN นั้นตรงๆ พร้อมกับดัก vlan-aware bridge, thin pool ที่เต็มแล้วทำ VM อื่นพัง และ virtio ที่ทำให้ลง Windows แล้วไม่มีการ์ดเน็ต

#proxmox#kvm#vlan#networking
อ่าน 8 นาที·19 ก.ย.
คุมสวิตช์ทั้งไซต์จากนอกวง ด้วย cloud connector proxy ของ UniFi
Network

คุมสวิตช์ทั้งไซต์จากนอกวง ด้วย cloud connector proxy ของ UniFi

เครื่องทำงานอยู่คนละที่กับไซต์ ไม่มี VPN ไม่เปิดพอร์ตเข้ามา แต่ยังต้องแก้ VLAN รายพอร์ต จอง fixed IP และไล่หาสายเสื่อมได้ บทความนี้เล่าว่า connector proxy ของ Site Manager ยิงต่อไปถึง API ตัวเก่าได้ทั้งอ่านและเขียน โดยไม่ต้องขอ CSRF และวินัยที่ต้องมีเวลาถือคีย์ที่ทำได้ขนาดนี้

#networking#unifi#rest-api#api
อ่าน 10 นาที·18 ก.ย.
ตั้ง VLAN บนสวิตช์ Hikvision ด้วย API ชุดเดียวกับที่หน้าเว็บมันใช้
Network

ตั้ง VLAN บนสวิตช์ Hikvision ด้วย API ชุดเดียวกับที่หน้าเว็บมันใช้

สวิตช์ smart managed ที่ ISAPI หมวด Switch ตอบ 403 ยังคุมด้วยสคริปต์ได้ ถ้าไปดูว่าหน้าเว็บของมันยิงอะไร บทความนี้ถอด API ชุดนั้นออกมาเขียนเป็นตัวตั้ง VLAN แบบ dry-run ก่อน apply พร้อมกับดักที่เจอจริงทั้งชื่อฟิลด์ที่อ่านกับเขียนไม่ตรงกัน โหมด CCTV ที่บังคับ 10 Mbps และงบ PoE ที่คำนวณแล้วเกินเครื่อง

#networking#vlan#switch#poe
อ่าน 9 นาที·17 ก.ย.
ใช้ NVR เป็นประตูเข้าหากล้องที่ยิงตรงไม่ถึง ด้วย ISAPI และ SDK
Network

ใช้ NVR เป็นประตูเข้าหากล้องที่ยิงตรงไม่ถึง ด้วย ISAPI และ SDK

กล้องอยู่หลังขาที่สองของ NVR ยิงตรงไม่ถึงเลยสักตัว บทความนี้ไล่ว่า ISAPI ของ NVR ทำอะไรได้จริงบ้าง ใช้ได้ 26 จาก 38 endpoint ที่ลอง ดึงภาพนิ่งกับ RTSP ของกล้องวงปิดผ่าน NVR ค้นว่าช่องไหนบันทึกล่าสุดเมื่อไหร่ และตอนที่ ISAPI จนแต้มก็ลงไปเรียก HCNetSDK ผ่าน ctypes เพื่ออ่าน log ของเครื่อง

#cctv#hikvision#nvr#isapi
อ่าน 11 นาที·16 ก.ย.
ทุกชั้นรายงานสำเร็จพร้อมกัน ทั้งที่ผลลัพธ์เป็นขยะ
Linux

ทุกชั้นรายงานสำเร็จพร้อมกัน ทั้งที่ผลลัพธ์เป็นขยะ

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

#automation#python#monitoring#debugging
อ่าน 10 นาที·15 ก.ย.
โฮสต์ static บน DirectAdmin แล้ว GET ได้ 404 แต่ HEAD ได้ 200
DirectAdmin

โฮสต์ static บน DirectAdmin แล้ว GET ได้ 404 แต่ HEAD ได้ 200

อัปเว็บ static ขึ้น public_html แล้วเปิดไม่ได้ ไฟล์เล็กออกปกติ ไฟล์ใหญ่ 404 แต่ยิง HEAD กลับได้ 200 ทุกไฟล์ ต้นเหตุคือ .htaccess ของ Laravel ที่นั่งอยู่ที่ docroot ดูดทุกอย่างเข้า front controller บทความนี้เล่าทั้งการวินิจฉัยและทางออกสามทาง

#directadmin#cloudflare#apache#htaccess
อ่าน 9 นาที·14 ก.ย.
audit ระบบ prod ที่มีข้อมูลลูกค้าจริง โดยไม่ทิ้งขยะสักแถว
Linux

audit ระบบ prod ที่มีข้อมูลลูกค้าจริง โดยไม่ทิ้งขยะสักแถว

เจ้าของระบบสั่งให้ทดสอบทั้งระบบบนเครื่องจริงที่มีข้อมูลลูกค้าอยู่ แล้วห้ามเหลือแถวขยะไว้แม้แถวเดียว วิธีที่ผมใช้คือ bootstrap Laravel เองแล้วเรียก controller ตรง ๆ ใน transaction ที่ rollback ทิ้ง พร้อมนับ COUNT ทุกตารางก่อนและหลังเป็นหลักฐาน

#laravel#php#mysql#mariadb
อ่าน 11 นาที·13 ก.ย.
มี backup ครบทุกไฟล์ แต่สร้างเครื่องใหม่ไม่ได้
Backup

มี backup ครบทุกไฟล์ แต่สร้างเครื่องใหม่ไม่ได้

dump ฐานข้อมูลครบ tar โค้ดครบ ไฟล์ความลับครบ แต่พอเอาไปวางบนเครื่องเปล่าแล้วเว็บไม่ขึ้น เพราะของที่ทำให้เครื่องทำงานได้จริงไม่เคยอยู่ในไฟล์ backup เลย บทความนี้คือรายการของที่หายไปกับเครื่อง และลำดับกู้ที่ผมเขียนไว้ให้ตัวเองในอนาคต

#backup#disaster-recovery#systemd#debian
อ่าน 11 นาที·12 ก.ย.
backup รันสำเร็จทุกคืน แต่ของนอกเครื่องไม่มีเลย 3 สัปดาห์
Backup

backup รันสำเร็จทุกคืน แต่ของนอกเครื่องไม่มีเลย 3 สัปดาห์

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

#backup#rclone#s3#cloudflare
อ่าน 10 นาที·11 ก.ย.
ออกใบเสนอราคา PDF ภาษาไทยจาก HTML ด้วย Chromium และกับดักที่เจอ
Linux

ออกใบเสนอราคา PDF ภาษาไทยจาก HTML ด้วย Chromium และกับดักที่เจอ

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

#pdf#chromium#playwright#python
อ่าน 9 นาที·31 ส.ค.
ธรรมเนียมเขียนแบบโครงเหล็กไทย ให้ช่างหยิบไปสร้างได้จริง
AI

ธรรมเนียมเขียนแบบโครงเหล็กไทย ให้ช่างหยิบไปสร้างได้จริง

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

#structural#steel-design#sketchup#3d-modeling
อ่าน 9 นาที·30 ส.ค.
ย้ายการคำนวณจาก PHP ไปทำในเบราว์เซอร์: 12 วินาที เหลือ 12 มิลลิวินาที
Linux

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

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

#performance#php#javascript#laravel
อ่าน 9 นาที·29 ส.ค.
นำเข้าขอบเขตแปลงที่ดินจากระบบแผนที่ราชการเข้า SketchUp
AI

นำเข้าขอบเขตแปลงที่ดินจากระบบแผนที่ราชการเข้า SketchUp

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

#gis#sketchup#ruby#wfs
อ่าน 9 นาที·28 ส.ค.
ขับ AutoCAD จาก PowerShell ผ่าน COM — วาดแบบด้วยสคริปต์
AI

ขับ AutoCAD จาก PowerShell ผ่าน COM — วาดแบบด้วยสคริปต์

AutoCAD เปิด COM ไว้ให้เขียนสคริปต์สั่งได้เหมือน Excel เกาะเข้าตัวที่เปิดอยู่ด้วย New-Object แล้ววาดเส้น วงกลม ข้อความ กล่องสามมิติ สร้างเลเยอร์ ใส่เส้นบอกระยะ และเซฟไฟล์ได้ครบจาก PowerShell พร้อมกับดักสี่ข้อที่เจอมาเองรอบเดียวจำไปตลอด

#autocad#powershell#com#automation
อ่าน 8 นาที·27 ส.ค.
สั่งงานอัตโนมัติบนเครื่อง Windows ระยะไกลผ่าน SSH + Task Scheduler
Linux

สั่งงานอัตโนมัติบนเครื่อง Windows ระยะไกลผ่าน SSH + Task Scheduler

ยก workload หนักไปรันบนเครื่องแรงอีกตัวผ่าน SSH แล้วตั้งให้วิ่งเองด้วย schtasks — พร้อมกับดักที่เสียเวลาจริง ตั้งแต่ ssh เข้าไปแล้วเจอ PowerShell 5 ไม่ใช่ bash, backslash โดนกินตอนเขียนไฟล์ .bat, จนถึงเคส push ไฟล์ออกแล้วค้างนิ่งที่แก้ด้วย plink

#windows#ssh#powershell#automation
อ่าน 9 นาที·26 ส.ค.
ดักโปรโตคอลเครื่องพิมพ์ฉลากบลูทูธจาก btsnoop แล้วสั่งพิมพ์เอง
Linux

ดักโปรโตคอลเครื่องพิมพ์ฉลากบลูทูธจาก btsnoop แล้วสั่งพิมพ์เอง

เครื่องพิมพ์ฉลากบลูทูธที่มีแต่แอปบนมือถือ ต่อเข้าระบบตัวเองไม่ได้ ผมเลยเปิด HCI snoop log บนมือถือของตัวเอง ลอก HCI/ACL/L2CAP/RFCOMM ออกทีละชั้นด้วย parser Python สั้นๆ แล้วเทียบกับไลบรารีโอเพนซอร์สจนอ่านคำสั่งออก และสั่งพิมพ์เองได้จากสคริปต์

#bluetooth#ble#python#reverse-engineering
อ่าน 9 นาที·25 ส.ค.
ออดิตกล้อง CCTV ในวงเองด้วย ISAPI กับ ffprobe RTSP ไม่ผ่าน NVR
Network

ออดิตกล้อง CCTV ในวงเองด้วย ISAPI กับ ffprobe RTSP ไม่ผ่าน NVR

หน้าจอ NVR บอกแค่ว่ากล้องออนไลน์ ไม่ได้บอกว่ารุ่นอะไร firmware ค้างปีไหน หรือสตรีมจริงเป็นความละเอียดเท่าไหร่ บทความนี้เขียนสคริปต์ยิง ISAPI deviceInfo ตรงเข้ากล้องทีละตัว แล้วใช้ ffprobe ดึงค่าจากสตรีม RTSP จริง เพื่อทำ inventory กับ health check ระบบกล้องที่เราดูแลอยู่

#cctv#hikvision#python#networking
อ่าน 9 นาที·24 ส.ค.
วางแผนช่อง WiFi 2.4GHz ไม่ให้ทับกัน 1/6/11 พร้อมทำ heatmap หลายชั้น
Network

วางแผนช่อง WiFi 2.4GHz ไม่ให้ทับกัน 1/6/11 พร้อมทำ heatmap หลายชั้น

อาคารห้าชั้น ชั้นละเจ็ดจุด ต้องวางช่อง 2.4GHz ให้ไม่ทับกันทั้งแนวราบและแนวตั้ง บทความนี้ลงรายละเอียดหลัก 1/6/11 ตารางแผนช่องต่อชั้น ค่า Tx power กับ RSSI threshold ที่ตั้งจริง แล้วเขียนสคริปต์ Python วางป้ายช่องลงผังชั้นด้วย PIL ก่อนเดินวัดทำ heatmap

#wifi#networking#rf#python
อ่าน 9 นาที·23 ส.ค.
สำรวจสวิตช์และ AP ด้วย SNMP walk ดึงตาราง MAC ต่อพอร์ตมาทำ inventory
Network

สำรวจสวิตช์และ AP ด้วย SNMP walk ดึงตาราง MAC ต่อพอร์ตมาทำ inventory

ไม่มี controller ไม่มี NMS ก็ทำ inventory ชั้น 2 เองได้ เขียน SNMP walk ด้วย pysnmp asyncio ดึง sysDescr, ifTable และตาราง bridge FDB แล้วแปลง OID index กลับเป็น MAC เพื่อรู้ว่าอุปกรณ์ตัวไหนเสียบพอร์ตไหนของสวิตช์ตัวไหน

#snmp#networking#python#monitoring
อ่าน 9 นาที·22 ส.ค.
เขียนแอปมอนิเตอร์ ping จอเดียวด้วย C++ ImGui กับ DirectX 11
Network

เขียนแอปมอนิเตอร์ ping จอเดียวด้วย C++ ImGui กับ DirectX 11

แอปเล็กๆ ที่ ping อุปกรณ์ทั้งวงพร้อมกันแล้วสรุปลงจอเดียว ยิง ICMP ตรงผ่าน iphlpapi ไม่เรียก ping.exe แยกหนึ่ง thread ต่อหนึ่ง host คุยกับ UI ด้วย std::atomic วาดด้วย Dear ImGui บน DirectX 11 แล้ว build ด้วย CMake กับสคริปต์ PowerShell ตัวเดียวจบ

#cpp#networking#windows#monitoring
อ่าน 9 นาที·21 ส.ค.
อ่าน uptime อุปกรณ์ที่ไม่มี SNMP/SSH/API ด้วย TCP timestamp
Network

อ่าน uptime อุปกรณ์ที่ไม่มี SNMP/SSH/API ด้วย TCP timestamp

กล้อง IP เครื่องคุมประตู และอุปกรณ์ฝังตัวจำนวนมากไม่มีทั้ง SNMP SSH และ API ให้ถาม uptime แต่ถ้ามันตอบ TCP timestamp มาด้วย เราอ่านเวลาบูตของมันได้จากนอกบ้านโดยไม่ต้อง login เลยสักครั้ง

#networking#monitoring#linux#python
อ่าน 7 นาที·20 ส.ค.
crontab ของ user เว็บ ไม่ใช่ crontab ที่ cron รันจริง
Linux

crontab ของ user เว็บ ไม่ใช่ crontab ที่ cron รันจริง

แก้ตารางเวลาผ่านหน้าเว็บแล้วงานยังยิงตามเวลาเก่า เพราะสคริปต์เขียน crontab ของ user ที่เว็บรันอยู่ ไม่ใช่ของ user ที่ cron อ่านจริง วิธีตรวจให้เจอใน 3 คำสั่ง sudoers drop-in ที่ใช้ และวิธีออกแบบไม่ให้มันหลุดอีก

#cron#linux#sysadmin#debugging
อ่าน 7 นาที·19 ส.ค.
เก็บ secret ใน .env แบบเข้ารหัส แล้วถอดอัตโนมัติตอน config โหลด
Security

เก็บ secret ใน .env แบบเข้ารหัส แล้วถอดอัตโนมัติตอน config โหลด

วิธีเก็บรหัสผ่านและ API key ใน .env ของ Laravel เป็น ciphertext แล้วให้ config ถอดกลับเองตอนโหลด ด้วย helper ตัวเดียวที่ตรวจเองว่าค่าไหนเข้ารหัสไว้ พร้อมกับดัก APP_KEY ต่าง environment ที่ทำให้ระบบล่มทั้งชุดถ้าพลาด

#laravel#php#security#encryption
อ่าน 9 นาที·18 ส.ค.
คิวงาน Laravel บน shared host — อย่าเอาคิวไว้ Redis ตัวเดียวกับ cache
Linux

คิวงาน Laravel บน shared host — อย่าเอาคิวไว้ Redis ตัวเดียวกับ cache

จะเปิด queue ให้ Laravel บน shared host แล้วคิดจะแยก REDIS_DB ให้คิวอยู่คนละเบอร์กับ cache — ไม่ช่วยครับ เพราะ maxmemory กับ eviction เป็นของทั้ง instance ไม่ใช่ของราย DB บทความนี้เล่าเหตุผลที่ผมเลือก database driver แทน พร้อม systemd unit เต็ม ๆ ที่ใช้แทน Supervisor

#laravel#redis#queue#systemd
อ่าน 10 นาที·17 ส.ค.
Laravel หลัง proxy เห็น IP เป็น 127.0.0.1 — ฟอร์มเงียบ ไม่มี error
DirectAdmin

Laravel หลัง proxy เห็น IP เป็น 127.0.0.1 — ฟอร์มเงียบ ไม่มี error

ฟอร์มติดต่อบน DirectAdmin กดส่งแล้วขึ้นว่าไม่ใช่คน เมลไม่ออก แต่ log ทุกชั้นเงียบสนิท — ต้นเหตุคือ Laravel หลัง nginx-to-apache เห็น $request->ip() เป็น 127.0.0.1 ทำให้ด่านตรวจบอทไม่ผ่านแล้ว return ก่อนถึงบรรทัดส่งเมล พร้อมเหตุผลว่าทำไม TrustProxies ห้ามใส่ '*'

#laravel#php#nginx#php-fpm
อ่าน 9 นาที·16 ส.ค.
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 ส.ค.
Googlebot โดนไฟร์วอลล์ตัวเองแบนถาวร จนเว็บหายจากผลค้นหา
Security

Googlebot โดนไฟร์วอลล์ตัวเองแบนถาวร จนเว็บหายจากผลค้นหา

ไล่ตรวจว่าทำไมเว็บหายจากผลค้นหา แล้วเจอ Googlebot นอนอยู่ในรายการแบนถาวรของไฟร์วอลล์ตัวเอง 408 จาก 500 แถวมาจากตัวนับ false positive ของ WAF วิธีปลดแบน สคริปต์ดึงช่วงไอพีทางการของบอทมาใส่ ignore list ทุกวัน กับดัก grep และผลข้างเคียงของการบล็อกทั้งประเทศ

#csf#firewall#seo#googlebot
อ่าน 10 นาที·14 ส.ค.
MariaDB ที่ยังใช้ค่า default — buffer pool 128M บนเครื่อง RAM 55 GB
Linux

MariaDB ที่ยังใช้ค่า default — buffer pool 128M บนเครื่อง RAM 55 GB

เครื่อง 16 core RAM 55 GB SSD แต่ MariaDB ยังใช้ buffer pool 128 MB ตามค่าติดตั้ง ผลคืออ่านดิสก์ไป 50 ล้านครั้งใน 5 วัน ค่าก่อนหลังทั้งชุด กับดักชื่อ service กับ path config บน DirectAdmin/Debian วิธี rollback และ MyISAM อีก 500 ตารางที่รอแปลง

#mariadb#mysql#performance#tuning
อ่าน 10 นาที·13 ส.ค.
AI crawler ยิง ?add-to-cart= จนโหลดพุ่ง — บล็อกยังไงไม่ให้เสีย SEO
Security

AI crawler ยิง ?add-to-cart= จนโหลดพุ่ง — บล็อกยังไงไม่ให้เสีย SEO

โหลดเซิร์ฟเวอร์พุ่งจนได้เมลเตือน ไล่ log แล้วพบว่า 84% ของทราฟฟิกทั้งวันมาจาก AI crawler ตัวเดียวที่ไล่กดลิงก์ add-to-cart ทุกสินค้า ปิดเป็นชั้น ๆ ด้วย robots.txt, rel=nofollow และ nginx limit_req โดยหน้าสินค้ายังถูก index ครบ

#nginx#security#wordpress#seo
อ่าน 10 นาที·12 ส.ค.
นำเข้าไฟล์ .xls จากระบบเก่าหลายร้อยไฟล์ลง Laravel ด้วย PhpSpreadsheet
Linux

นำเข้าไฟล์ .xls จากระบบเก่าหลายร้อยไฟล์ลง Laravel ด้วย PhpSpreadsheet

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

#php#laravel#excel#phpspreadsheet
อ่าน 9 นาที·10 ส.ค.
เครื่องในโรงงานหลัง NAT ขึ้นคลาวด์ ด้วย push snapshot + คิวคำสั่ง
Network

เครื่องในโรงงานหลัง NAT ขึ้นคลาวด์ ด้วย push snapshot + คิวคำสั่ง

เครื่องงานจริงอยู่ใน LAN หลัง NAT ไม่มี public IP แต่เจ้าของอยากดูข้อมูลบนเว็บคลาวด์และแก้ข้อมูลจากมือถือให้ลงไปถึงเครื่องใน — ทำได้โดยไม่เปิดพอร์ตไม่ตั้ง VPN ด้วย push snapshot + คิวคำสั่งแก้ + ack แบบ idempotent

#automation#networking#nat#api
อ่าน 10 นาที·9 ส.ค.
ซ่อมไฟล์ session .jsonl ของ Claude Code ที่บวม 38 MB จนเปิดไม่ขึ้น
AI

ซ่อมไฟล์ session .jsonl ของ Claude Code ที่บวม 38 MB จนเปิดไม่ขึ้น

session เดียวที่ลากยาว 8 วันโตเป็น 38.61 MB / 11,537 records จน UI เปิดประวัติไม่ขึ้น เลยเขียนสคริปต์ Python ไล่ทีละบรรทัด ตัดเฉพาะส่วนที่มนุษย์อ่านไม่ได้อยู่แล้ว เหลือ 17.41 MB โดยข้อความคนกับผู้ช่วยครบ 8,171 uuid ลำดับเดิม ไม่มี orphan

#claude-code#ai#python#automation
อ่าน 8 นาที·8 ส.ค.
mailbox รหัสรั่ว ส่งสแปมออก 1,786 ฉบับ โดยที่ CSF/LFD ไม่เห็น
Security

mailbox รหัสรั่ว ส่งสแปมออก 1,786 ฉบับ โดยที่ CSF/LFD ไม่เห็น

เคสจริงของ mailbox ที่ถูกขโมยรหัสแล้วใช้ยิงสแปมออกนอกวันละ 50-75 ฉบับใต้เพดาน 200 ติดต่อกัน 4 สัปดาห์ โดย CSF/LFD/BFM ไม่ขยับเลยสักครั้ง เพราะมันนับแค่ auth ที่ล้มเหลว พร้อมคำถามชี้ขาดว่าโดนแฮ็กจริงหรือแค่โดนถล่ม ชุดคำสั่ง forensics บน exim และ playbook ขอปลดออกจาก blocklist

#mail#exim#security#csf
อ่าน 11 นาที·7 ส.ค.
charset ไม่ตรง ทำ index ตายเงียบ ตอน JOIN ข้ามฐาน — mirror utf8mb4
Linux

charset ไม่ตรง ทำ index ตายเงียบ ตอน JOIN ข้ามฐาน — mirror utf8mb4

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

#mariadb#mysql#charset#utf8mb4
อ่าน 10 นาที·6 ส.ค.
query เดียวค้าง 54 นาที ทำเว็บล่ม 504 ทั้งเว็บ เพราะ MyISAM lock
Linux

query เดียวค้าง 54 นาที ทำเว็บล่ม 504 ทั้งเว็บ เพราะ MyISAM lock

ตารางเดียวขนาด 30 MB ทำให้เว็บทั้งระบบขึ้น 504 ทุกหน้า ทั้งที่ RAM ยังว่าง 9.5 GB — ไล่จาก information_schema.PROCESSLIST จนเจอ SELECT ตัวเดียวที่ค้าง 54 นาทีบนตาราง MyISAM แล้วลามเป็น metadata lock ทั้งเซิร์ฟเวอร์ พร้อมวิธีแก้เฉพาะหน้าและวิธีกันไม่ให้เกิดซ้ำ

#mariadb#mysql#myisam#innodb
อ่าน 10 นาที·6 ส.ค.
ย้ายบอร์ด vBulletin 4.2.5 ไป Flarum: บทเรียนจากสองแสนโพสต์
DirectAdmin

ย้ายบอร์ด vBulletin 4.2.5 ไป Flarum: บทเรียนจากสองแสนโพสต์

ย้ายฟอรัมเก่า vBulletin 4.2.5 ที่มีสมาชิกเจ็ดพันกว่า กระทู้สองหมื่นกว่า และโพสต์สองแสนกว่า ไปอยู่บน Flarum — บันทึกกับดักที่เสียเวลาจริง ตั้งแต่ guest userid 0 ที่ทำ FK พังทั้งชุด, md5 ซ้อน md5 ของรหัสผ่านเก่า, การแปลง BBCode เป็น s9e XML, attachment ที่อยู่บนดิสก์ไม่ใช่ใน DB ไปจนถึงเหตุผลที่ต้อง scp สคริปต์แทน heredoc

#flarum#vbulletin#migration#mariadb
อ่าน 11 นาที·25 ก.ค.
กู้ MariaDB ที่ InnoDB redo-log เสียด้วย force_recovery แล้ว reinit
Linux

กู้ MariaDB ที่ InnoDB redo-log เสียด้วย force_recovery แล้ว reinit

MariaDB สตาร์ทไม่ขึ้นหลังเครื่องดับไม่สะอาด — InnoDB redo log เสีย ลาก system table mysql.global_priv พังตาม นี่คือลำดับกู้จริง เริ่มจาก innodb_force_recovery ให้พออ่านได้ แล้ว dump ทีละ db ก่อน reinit ระบบใหม่ทั้งก้อน พร้อมกฎว่าอย่าดันเลข force_recovery เกินจำเป็น

#mariadb#mysql#disaster-recovery#debugging
อ่าน 9 นาที·25 ก.ค.
ตั้ง DirectAdmin Admin Backup cron จาก CLI ไม่ต้องกดผ่าน panel
DirectAdmin

ตั้ง DirectAdmin Admin Backup cron จาก CLI ไม่ต้องกดผ่าน panel

หน้า CMD_ADMIN_BACKUP ให้คลิกตั้ง cron ทีละห้าขั้น แต่จริงๆ DirectAdmin แค่ต่อท้ายบรรทัดเดียวลงไฟล์ backup_crons.list แล้วปล่อยให้ dataskq เก็บไปทำ วิธีเขียนตรงเข้าไฟล์จาก CLI พร้อมกับดัก when=now, base64 และ append_to_path ที่คนมักพลาด

#directadmin#backup#automation#cron
อ่าน 8 นาที·24 ก.ค.
นำเข้า/ย้ายข้อมูลไทยให้ไม่พัง: กับดัก VARCHAR, idempotency, สระ OCR
Linux

นำเข้า/ย้ายข้อมูลไทยให้ไม่พัง: กับดัก VARCHAR, idempotency, สระ OCR

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

#migration#mariadb#mysql#debugging
อ่าน 9 นาที·24 ก.ค.
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 ก.ค.
ทำ Android dev บน MIUI/HyperOS แล้ว adb ทำงานไม่ได้ — กับดักบน Windows
Linux

ทำ Android dev บน MIUI/HyperOS แล้ว adb ทำงานไม่ได้ — กับดักบน Windows

adb ไม่ได้พังหรอกครับ แต่ Git Bash แปลง path /sdcard ให้เพี้ยน, PowerShell ทำไฟล์ screenshot เป็น 0 ไบต์, MIUI/HyperOS บล็อกการติดตั้งครั้งแรก และ here-string กลืน backslash เวลาปั้นโค้ด PHP — รวมกับดักจริงตอนทำแอป Android บน Windows พร้อมคำสั่งที่ใช้ได้จริง

#android#windows#debugging#automation
อ่าน 8 นาที·23 ก.ค.
อนุมานจังหวะ defrost ห้องเย็นจากความชันอุณหภูมิ ไม่ง้อเซนเซอร์ความชื้น
Linux

อนุมานจังหวะ defrost ห้องเย็นจากความชันอุณหภูมิ ไม่ง้อเซนเซอร์ความชื้น

ห้องเย็นรีดน้ำวุ้นเส้นไม่มีเซนเซอร์ความชื้นสักตัว แต่ frost ที่เกาะคอยล์ทำให้ความชันการลดอุณหภูมิ (dT/dt) ราบลงเสมอ บทความนี้ใช้สมการ lumped-capacitance กับ time-constant τ จับ frost แล้วสั่ง defrost แบบ demand ด้วย Python จริง พร้อมคำนวณ COP ของ R404A และน้ำที่รีดออกต่อรอบ

#refrigeration#iot#monitoring#python
อ่าน 10 นาที·22 ก.ค.
เกณฑ์ราคากลางคอมพิวเตอร์ ICT ภาครัฐ + จัดสเปก DIY ด้วยสคริปต์
Linux

เกณฑ์ราคากลางคอมพิวเตอร์ ICT ภาครัฐ + จัดสเปก DIY ด้วยสคริปต์

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

#sysadmin#python#automation#hardware
อ่าน 9 นาที·22 ก.ค.
เล่นกล้อง AI reCamera + gimbal: cross-compile RISC-V + CAN + Node-RED
Linux

เล่นกล้อง AI reCamera + gimbal: cross-compile RISC-V + CAN + Node-RED

reCamera คือกล้อง AI บนชิป RISC-V ที่วางอยู่บนแกน brushless สองแกน สั่งหมุนผ่าน CAN bus ได้ละเอียดระดับ 0.01 องศา บทความนี้ไล่ตั้งแต่ cross-compile ภาษา C สำหรับ riscv64 musl, scp ขึ้น device, โครงสร้าง CAN frame ที่คุมมอเตอร์, อ่าน encoder 15-bit กลับมา, การหาศูนย์มอเตอร์ด้วยกระแส, ไปจนถึง Node-RED dashboard + PID + auto-track และไฟล์ STP พิมพ์เคส 3D

#recamera#iot#automation#python
อ่าน 10 นาที·21 ก.ค.
เกณฑ์ราคากลาง CCTV ภาครัฐ MDES 2564 กับการออกแบบ BOM Hikvision PoE
Network

เกณฑ์ราคากลาง CCTV ภาครัฐ MDES 2564 กับการออกแบบ BOM Hikvision PoE

อ่านเกณฑ์ราคากลางและคุณลักษณะพื้นฐานของระบบกล้องวงจรปิดภาครัฐ ฉบับ มิ.ย. 2564 ของ MDES ให้ครบก่อนตั้งงบ แล้วออกแบบ BOM Hikvision IP/PoE ให้ผ่านทั้งสเปกขั้นต่ำ เพดานราคากลาง กฎเก็บภาพย้อนหลัง 30 วัน และเงื่อนไขต้องแข่งได้อย่างน้อย 3 ยี่ห้อ

#cctv#hikvision#networking#monitoring
อ่าน 10 นาที·21 ก.ค.
ต่อเครื่องชั่ง RS-232 Toledo ผ่าน Bluetooth อ่านด้วย PowerShell
Linux

ต่อเครื่องชั่ง RS-232 Toledo ผ่าน Bluetooth อ่านด้วย PowerShell

ต่อเครื่องชั่งดิจิทัล TWT-01 ที่มีแต่พอร์ต RS-232 เข้าพีซีผ่านตัวแปลง Bluetooth BT578 แล้วอ่านน้ำหนักเรียลไทม์ด้วย PowerShell — ไล่ตั้งแต่จับคู่ Bluetooth หา COM port จาก MAC แกะ frame ของ Toledo Continuous 18 ไบต์ ไปจนถึงกับดัก null byte กับ scale auto-sleep ที่เจอจริงตอนใช้งาน

#serial#windows#automation#iot
อ่าน 8 นาที·20 ก.ค.
คุม TP-Link Omada OC200 ผ่าน REST API ด้วย Python
Network

คุม TP-Link Omada OC200 ผ่าน REST API ด้วย Python

วิธี login เข้า OC200 controller ผ่าน REST API v2 ด้วย Python จริง — จัดการ CSRF token, self-signed cert, ดึง site/devices/SSID/DHCP/port-forward แล้วเขียนกลับด้วย PATCH พร้อมกับดัก read-only fields ที่ทำให้ errorCode ไม่เป็น 0

#omada#networking#api#python
อ่าน 8 นาที·20 ก.ค.
ทำ network-as-code บน MikroTik RouterOS
Network

ทำ network-as-code บน MikroTik RouterOS

แนวคิด network-as-code สำหรับ MikroTik — ดึง /export ออกมาเก็บเป็นไฟล์, ล้าง secret ด้วยสคริปต์ sanitize ก่อนแชร์, แยกหมวด แล้ว generate config หลายไซต์จากเทมเพลต Jinja2 + ค่า variables ชุดเดียว

#mikrotik#routeros#networking#automation
อ่าน 9 นาที·19 ก.ค.
อ่านมิเตอร์ 3 เฟส DTSU666 ด้วย Raspberry Pi ผ่าน Modbus RS485
Linux

อ่านมิเตอร์ 3 เฟส DTSU666 ด้วย Raspberry Pi ผ่าน Modbus RS485

บันทึกการต่อ DTSU666 Smart Power Sensor เข้ากับ Raspberry Pi ผ่าน RS485 อ่านค่าไฟ 3 เฟสจากหลายมิเตอร์ด้วย Modbus RTU decode float 32-bit ให้ถูก แล้วเก็บลง SQLite/MySQL ก่อนส่งออก MQTT กับ REST API พร้อมบั๊กค่าติดลบที่ผมเจอเอง

#modbus#rs485#iot#dtsu666
อ่าน 11 นาที·19 ก.ค.
แคปหน้าจอเว็บทีละหลายโดเมน + บังคับให้ชนเซิร์ฟเวอร์ต้นทาง ข้าม Cloudflare
Network

แคปหน้าจอเว็บทีละหลายโดเมน + บังคับให้ชนเซิร์ฟเวอร์ต้นทาง ข้าม Cloudflare

ต้องแคปหน้าจอเว็บทีละหลายสิบโดเมนเพื่อตรวจ หรืออยากยืนยันว่าเซิร์ฟเวอร์ต้นทาง (ไม่ใช่ CDN cache) render ถูก — แต่ flag screenshot ของ Chrome พังตั้งแต่รุ่น 132 และแก้ hosts ก็โดน AV คืนค่า บทความนี้ใช้ Playwright override DNS ระดับโปรเซส จบทั้งสองปัญหา

#debugging#cloudflare#python#automation
อ่าน 7 นาที·18 ก.ค.
~30 วินาที กลายเป็นตัวห้อยจิ๋ว — กับดัก Litedown ของ Flarum ที่คนไทยเจอบ่อย
Linux

~30 วินาที กลายเป็นตัวห้อยจิ๋ว — กับดัก Litedown ของ Flarum ที่คนไทยเจอบ่อย

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

#flarum#markdown#debugging#php-fpm
อ่าน 6 นาที·18 ก.ค.
ตรวจ security เว็บ Laravel ที่ deploy แล้ว — ไล่ 3 ชั้นตามลำดับที่ควรแก้
Security

ตรวจ security เว็บ Laravel ที่ deploy แล้ว — ไล่ 3 ชั้นตามลำดับที่ควรแก้

หลัง deploy Laravel ขึ้น production ควรไล่ตรวจความปลอดภัย 3 ชั้น — external probe หา endpoint ที่รั่ว, ตรวจไฟล์/สิทธิ์บนเซิร์ฟเวอร์, แล้ว grep หาช่องในโค้ด บทความนี้ให้ชุดคำสั่งพร้อมลำดับความสำคัญ P0-P2 ที่ควรแก้ก่อนหลัง

#security#hardening#php-fpm#cloudflare
อ่าน 8 นาที·17 ก.ค.
ย้ายโดเมนเข้า Cloudflare แล้วเมลหาย — เพราะ record เมลถูกเปิดพร็อกซี (ส้ม)
Network

ย้ายโดเมนเข้า Cloudflare แล้วเมลหาย — เพราะ record เมลถูกเปิดพร็อกซี (ส้ม)

เพิ่มโดเมนเข้า Cloudflare ให้ DNS ตรงกับโฮสต์แล้วอยู่ดี ๆ เมลส่งเข้าไม่ได้ — สาเหตุที่เจอบ่อยสุดคือปล่อย record mail/smtp/pop เป็นพร็อกซี (เมฆส้ม) ทั้งที่พร็อกซี Cloudflare แบกแค่ HTTP/S บทความนี้สรุปกฎ record ไหนต้องเทา + กับดัก token/SSL

#cloudflare#dns#mail#security
อ่าน 7 นาที·17 ก.ค.
nginx โดน heap overflow ย้อนหลัง 15 ปี — แต่เช็คแค่เวอร์ชันไม่พอ
Security

nginx โดน heap overflow ย้อนหลัง 15 ปี — แต่เช็คแค่เวอร์ชันไม่พอ

CVE-2026-42533 กินเวอร์ชัน nginx ตั้งแต่ 0.9.6 ถึง 1.31.2 คือย้อนหลัง 15 ปี แต่จะโดนจริงหรือไม่อยู่ที่ config ไม่ใช่เวอร์ชัน ปัญหาคือเงื่อนไขที่ข่าวสรุปกันแคบกว่าของจริง เช็คตามข่าวแล้วจะได้ผลว่า "ปลอดภัย" ทั้งที่ยังเข้าเงื่อนไขอยู่

#security#nginx#cve#vulnerability
อ่าน 9 นาที·16 ก.ค.
เขียนสคริปต์บน Windows ไปรันบน Linux — สองกับดักที่ทำไฟล์ค้างเซิร์ฟเวอร์
Linux

เขียนสคริปต์บน Windows ไปรันบน Linux — สองกับดักที่ทำไฟล์ค้างเซิร์ฟเวอร์

เขียน helper script บน Windows แล้ว scp ขึ้นไปรันบน Linux เป็นงานประจำ แต่มีสองอย่างที่กัดซ้ำ ๆ — path แบบ d:\ ที่ฝังในสคริปต์กลายเป็นชื่อไฟล์ประหลาดใน /tmp จนโดน file monitor จับ และไฟล์ token/payload ที่ลืมลบทิ้งไว้บนเซิร์ฟเวอร์ บทความนี้สรุปกฎกันพลาด

#automation#windows#linux#sysadmin
อ่าน 6 นาที·16 ก.ค.
audit ความปลอดภัยเซิร์ฟเวอร์ Debian shared-host แบบ read-only — เริ่มยังไงไม่ให้แบนตัวเอง
Security

audit ความปลอดภัยเซิร์ฟเวอร์ Debian shared-host แบบ read-only — เริ่มยังไงไม่ให้แบนตัวเอง

ตรวจความปลอดภัยเซิร์ฟเวอร์ Debian ที่รัน DirectAdmin แบบ read-only ก่อน — แต่กับดักแรกคือทราฟฟิกจากการ scan เองเข้าเงื่อนไข brute-force ของ CSF จนแบน IP ตัวเอง บทความนี้วางลำดับ audit ที่ปลอดภัย + จุดที่ต้องดูในยุค 2024-2026

#security#hardening#csf#cve
อ่าน 9 นาที·16 ก.ค.
อ่าน Modbus RTU ผ่าน gateway RS485 ให้ไม่ได้ค่าผี — บทเรียนจากงานจริง
Linux

อ่าน Modbus RTU ผ่าน gateway RS485 ให้ไม่ได้ค่าผี — บทเรียนจากงานจริง

ต่อมิเตอร์/เซนเซอร์ Modbus RTU หลายตัวบนบัส RS485 ผ่าน serial-to-Ethernet gateway แล้วเจอค่าผี ค่าเพี้ยน หรืออุปกรณ์ที่ไม่มีอยู่จริงโผล่มา — เพราะ transparent gateway คือ RTU-over-TCP ที่ต้องประกอบเฟรม+CRC เอง และต้อง validate ทุก reply บทความนี้สรุปกฎที่ได้จากการทำจริง

#modbus#rs485#iot#python
อ่าน 9 นาที·15 ก.ค.
สร้าง .ppk ให้ plink/pscp บน Windows โดยไม่ต้องเปิด puttygen
Linux

สร้าง .ppk ให้ plink/pscp บน Windows โดยไม่ต้องเปิด puttygen

puttygen.exe บน Windows เป็น GUI ล้วน สั่งแปลง OpenSSH เป็น .ppk แบบ batch ไม่ได้ (เด้ง unrecognised option) — บทความนี้เขียนไฟล์ PPK v3 ตรง ๆ ด้วย Python พร้อมสูตร MAC HMAC-SHA-256 ที่หาอ่านยาก ใช้กับ plink/pscp/WinSCP ได้ทันที

#ssh#putty#windows#python
อ่าน 7 นาที·15 ก.ค.
สร้าง QR พร้อมเพย์ (EMVCo) ด้วย Python ล้วน — ไม่ต้องพึ่งไลบรารีนอก
Linux

สร้าง QR พร้อมเพย์ (EMVCo) ด้วย Python ล้วน — ไม่ต้องพึ่งไลบรารีนอก

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

#python#promptpay#api#automation
อ่าน 8 นาที·15 ก.ค.
ส่ง USB เข้า WSL2 ด้วย usbipd-win — ให้ Linux บน Windows จับฮาร์ดแวร์จริง
Linux

ส่ง USB เข้า WSL2 ด้วย usbipd-win — ให้ Linux บน Windows จับฮาร์ดแวร์จริง

WSL2 มองไม่เห็นอุปกรณ์ USB เพราะเป็น VM ที่ไม่มี USB controller — usbipd-win ส่งอุปกรณ์จาก Windows ข้ามไปให้ kernel ของ WSL ตรงๆ ด้วย 3 คำสั่ง list/bind/attach พร้อมข้อควรรู้จากงานจริง: attach หลุดตอนถอดสาย, กับดัก CRLF และ USB modem แย่ง default route

#usbip#wsl2#windows#linux
อ่าน 7 นาที·11 ก.ค.
libmodsecurity3 + nginx — exclusion ที่ใช้ได้จริงมีแบบเดียว: ctl:ruleEngine
Security

libmodsecurity3 + nginx — exclusion ที่ใช้ได้จริงมีแบบเดียว: ctl:ruleEngine

ModSecurity v3 (libmodsecurity3) + nginx + OWASP CRS — ctl:ruleRemoveById ที่ตำราสอนกันไม่ทำงานและเงียบสนิท บทความนี้สรุปจากการลองครบทุกท่า: ของที่ใช้ได้จริงคือ ctl:ruleEngine จำกัดขอบเขตด้วย chained rule Host+URI และไฟล์ exclusion ต้องโหลดก่อน CRS

#modsecurity#nginx#security#firewall
อ่าน 9 นาที·10 ก.ค.
ลูกค้าเช็คเมลแล้วโดน firewall แบนยกออฟฟิศ — แก้ด้วย auto-whitelist จาก login
Security

ลูกค้าเช็คเมลแล้วโดน firewall แบนยกออฟฟิศ — แก้ด้วย auto-whitelist จาก login

พฤติกรรมลูกค้าเมลจริงหน้าตาเหมือน bot เป๊ะ — เครื่องในออฟฟิศยิงรหัสเก่ารัวๆ จนโดน CSF แบนทั้งวง บทความนี้เล่าระบบ auto-whitelist ที่เกาะเหตุการณ์ login สำเร็จ + GeoIP ไทย แล้ว temp allow 24 ชั่วโมง พร้อมกับดัก 5 ข้อที่เจ็บมาแล้ว

#csf#firewall#mail#exim
อ่าน 9 นาที·10 ก.ค.
Redis แยกต่อ user บน shared hosting — และบั๊ก maxmemory ที่ทำเว็บค้าง
Linux

Redis แยกต่อ user บน shared hosting — และบั๊ก maxmemory ที่ทำเว็บค้าง

ออกแบบ Redis หนึ่ง instance ต่อหนึ่ง user บน shared hosting ด้วย systemd template + cgroup — และบทเรียนบั๊ก maxmemory ที่ตั้งเกินเพดาน cgroup แล้วทำเว็บ WooCommerce ค้างเป็นพักๆ พร้อมกฎ 80% และ guard script กันเกิดซ้ำ

#redis#cache#systemd#cgroup
อ่าน 10 นาที·9 ก.ค.
ให้ทีม 7 คน remote เข้า LAN โดยไม่เปิด port — Cloudflare Zero Trust ฉบับทำจริง
Network

ให้ทีม 7 คน remote เข้า LAN โดยไม่เปิด port — Cloudflare Zero Trust ฉบับทำจริง

ทีมงาน 7 คนต้อง RDP เข้าเครื่องใน LAN โดยห้ามเปิด port ออก internet — สรุปสถาปัตยกรรม Cloudflare Zero Trust (WARP + cloudflared) พร้อม 3 บทเรียนจากการทำจริง: IdP ที่ลืมตั้ง, Gateway default ที่ผ่านหมด และ default-deny ที่คนลืมบ่อยสุด

#cloudflare#zero-trust#vpn#remote-access
อ่าน 10 นาที·9 ก.ค.
WordPress ขึ้น 500 บางหน้า แต่ debug.log ว่าง — fatal จริงอยู่ที่ apache log
DirectAdmin

WordPress ขึ้น 500 บางหน้า แต่ debug.log ว่าง — fatal จริงอยู่ที่ apache log

WordPress ขึ้น 500 เฉพาะหน้า portfolio แต่ debug.log ว่างเปล่า — เพราะ fatal ที่เกิดตอน theme render เกิดก่อน WP logging พร้อม ต้องไปหาความจริงที่ apache error log (proxy_fcgi) พร้อมวิธีแก้ child theme ที่ก๊อป template ค้างจาก parent รุ่นเก่า

#wordpress#php-fpm#debugging#logging
อ่าน 8 นาที·8 ก.ค.
AdSense บอก ads.txt "ไม่พบ" ทั้งที่ไฟล์อยู่ — ไล่ log พิสูจน์ทีละชั้น
Network

AdSense บอก ads.txt "ไม่พบ" ทั้งที่ไฟล์อยู่ — ไล่ log พิสูจน์ทีละชั้น

หน้า Sites ของ AdSense ขึ้น ads.txt "ไม่พบ" ทั้งที่ไฟล์อยู่ครบถูกต้อง — บทความ forensics ไล่พิสูจน์ทีละชั้นด้วย curl + access log ว่า Googlebot เคยมาแล้วได้อะไรกลับไป สรุปคดี: ไม่มีใครบล็อค มันคือสถานะค้างของ Google เอง

#adsense#nginx#cloudflare#logging
อ่าน 9 นาที·8 ก.ค.
กู้รูปเว็บเก่าที่หายไป ด้วย Wayback Machine CDX API + Python
Backup

กู้รูปเว็บเก่าที่หายไป ด้วย Wayback Machine CDX API + Python

เว็บเก่าอายุสิบกว่าปีรูปแตกทั้งเว็บเพราะ hotlink จาก CDN ที่ตายแล้ว — เขียนสคริปต์ Python ดึงรายการรูปจาก Wayback Machine CDX API แล้วกู้กลับมาวางที่ path เดิมโดยไม่แตะ HTML สักตัวอักษร พร้อมสคริปต์เต็มที่ใช้จริง

#wayback#python#backup#disaster-recovery
อ่าน 9 นาที·7 ก.ค.
แอปเก่าพังหลังย้ายเซิร์ฟเวอร์ — error 1364/1366 กับ MariaDB strict mode
Linux

แอปเก่าพังหลังย้ายเซิร์ฟเวอร์ — error 1364/1366 กับ MariaDB strict mode

ย้ายเว็บจากเซิร์ฟเวอร์เก่ามาเครื่องใหม่แล้วฟอร์มสมัครสมาชิกพังทั้งที่โค้ดไม่เปลี่ยน — ต้นเหตุคือ STRICT_TRANS_TABLES ใน sql_mode ของ MariaDB รุ่นใหม่ พร้อมวิธีแก้ 3 ระดับ ตั้งแต่ conf.d จนถึง SET SESSION รายแอป

#mariadb#mysql#migration#server-migration
อ่าน 7 นาที·7 ก.ค.
โดเมน .com โดนยึด — ย้ายทั้งเว็บไป .net บน DirectAdmin แบบข้อมูลไม่หาย
DirectAdmin

โดเมน .com โดนยึด — ย้ายทั้งเว็บไป .net บน DirectAdmin แบบข้อมูลไม่หาย

โดเมน .com หมดอายุหลุดไปอยู่กับ domain squatter — เล่าวิธีย้ายทั้งเว็บ (ไฟล์/เมล/DNS/SSL) ไปโดเมน .net ใหม่บน DirectAdmin ด้วย CMD_CHANGE_DOMAIN คำสั่งเดียว พร้อมงานหลังบ้าน 4 อย่างที่ไม่ตามมาอัตโนมัติ

#directadmin#dns#ssl#letsencrypt
อ่าน 9 นาที·6 ก.ค.
ใช้ Claude อัป Proxmox 8 ขึ้น 9 แล้วสร้าง Windows VM ใหม่ทั้งคลัสเตอร์
Linux

ใช้ Claude อัป Proxmox 8 ขึ้น 9 แล้วสร้าง Windows VM ใหม่ทั้งคลัสเตอร์

เคสจริง ใช้ VS Code + Claude อัป Proxmox 8 ขึ้น 9 ทั้ง cluster แล้วล้างสร้าง Windows VM ใหม่ทั้งหมดแบบ VDI โดยไม่ได้ ssh เข้าเครื่องเองเลยสักครั้ง ถอดคำสั่งและสคริปต์ที่ Claude สร้างระหว่างทำงานจริงออกมาเป็นขั้นตอน ให้คนหรือ AI อ่านแล้วเอาไปสั่งทำซ้ำได้จริง

#claude-code#ai#vscode#proxmox
อ่าน 13 นาที·20 มิ.ย.
ใช้ Claude ตัดวิดีโอด้วยการพิมพ์สั่งเป็นภาษาไทย ไม่ต้องเปิดโปรแกรมตัดต่อ
AI

ใช้ Claude ตัดวิดีโอด้วยการพิมพ์สั่งเป็นภาษาไทย ไม่ต้องเปิดโปรแกรมตัดต่อ

วิธีที่ผมใช้จริง เอา Claude ใน VS Code มาสั่งตัด ย่อ รวม ใส่เพลงประกอบวิดีโอด้วยการพิมพ์ภาษาไทย ไม่ต้องจำคำสั่ง ffmpeg ไม่ต้องเปิดโปรแกรมตัดต่อ พร้อมวิธีให้ AI แต่งเพลงเอง เร่งด้วยการ์ดจอ NVIDIA และฝั่ง Mac กับ Linux สำหรับคนไม่เคยใช้ Claude มาก่อน

#claude-code#ffmpeg#video-editing#vscode
อ่าน 11 นาที·19 มิ.ย.
คุม Linux server ด้วย AI ผ่าน SSH ให้ปลอดภัย ไม่เผลอพังระบบ
AI

คุม Linux server ด้วย AI ผ่าน SSH ให้ปลอดภัย ไม่เผลอพังระบบ

วิธีที่ผมใช้จริงในการเอา Claude มาช่วย audit และแก้ security ของ Linux server ผ่าน SSH ตั้งแต่เตรียมเครื่อง เก็บความลับ ไปจนกฎเหล็กก่อนแตะ production

#claude-code#ssh#ssh-hardening#security
อ่าน 13 นาที·12 มิ.ย.
ปลุก VPS ที่เช่าค้างไว้ ทำ WireGuard เข้าบ้าน — คู่มือ client ฉบับเต็ม
Network

ปลุก VPS ที่เช่าค้างไว้ ทำ WireGuard เข้าบ้าน — คู่มือ client ฉบับเต็ม

เปลี่ยน VPS ที่เผลอเช่ารายปีไว้ให้เป็นจุดนัดพบ WireGuard เข้าวง LAN ที่บ้านได้ตลอดเวลา โดยไม่ต้อง forward port — ครบตั้งแต่ลงแอป import config สแกน QR ยันแก้ปัญหาและฝั่งแอดมิน

#wireguard#vpn#vps#networking
อ่าน 12 นาที·9 มิ.ย.
สั่ง Claude สร้างโรงเหล็กทั้งหลังใน SketchUp แล้วคำนวณ FEA ลงสี heatmap
AI

สั่ง Claude สร้างโรงเหล็กทั้งหลังใน SketchUp แล้วคำนวณ FEA ลงสี heatmap

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

#sketchup#fea#structural-analysis#steel-design
อ่าน 12 นาที·5 มิ.ย.
ขับ SketchUp ด้วย Claude Code ตอน 2 — ติดตั้งปลั๊กอิน MCP กันบั๊ก
AI

ขับ SketchUp ด้วย Claude Code ตอน 2 — ติดตั้งปลั๊กอิน MCP กันบั๊ก

ทำให้ Claude Code "เห็น" และ "ขับ" SketchUp ได้จริง ด้วยปลั๊กอิน MCP ของชุมชน พร้อมวิธีกัน 2 บั๊กที่ทำเสียเวลา — PyPI wheel พัง และ UI freeze จาก socket แบบ blocking

#mcp#claude-code#claude#sketchup
อ่าน 9 นาที·5 มิ.ย.
ขับ SketchUp ด้วย Claude Code ตอนที่ 1 — เตรียมเครื่องมือ uv กับ PyNite
AI

ขับ SketchUp ด้วย Claude Code ตอนที่ 1 — เตรียมเครื่องมือ uv กับ PyNite

เริ่มซีรีส์ขับ SketchUp ให้เขียนแบบ 3D โครงเหล็กแล้วคำนวณ FEA ด้วย Claude Code ตอนแรกว่าด้วยการเตรียมเครื่องล้วน ตั้งสิทธิ์ Claude ลง uv และสร้าง conda env ใส่ PyNite

#claude-code#claude#ai#sketchup
อ่าน 9 นาที·5 มิ.ย.
ปลด CSF อัตโนมัติให้ออฟฟิศจริง แต่ไม่ปลดให้ attacker ด้วย geo+account gate
Security

ปลด CSF อัตโนมัติให้ออฟฟิศจริง แต่ไม่ปลดให้ attacker ด้วย geo+account gate

เคสจริง ออฟฟิศลูกค้า IP หมุนทุกวัน มี ghost device รหัสเก่าค้างทำให้ทั้งออฟฟิศโดน CSF บล็อกเป็นรอบ ๆ วิธีปลดอัตโนมัติด้วย gate แคบ account+geo ที่ปลดให้ออฟฟิศจริงแต่กันต่างชาติที่ brute creds.

#csf#firewall#brute-force#geoip
อ่าน 12 นาที·4 มิ.ย.
วาง Telegram Bot เฝ้า DA Server แบบ blast radius เล็ก
Network

วาง Telegram Bot เฝ้า DA Server แบบ blast radius เล็ก

คู่มือวาง Telegram bot เป็น control surface เบาๆ สำหรับเฝ้า DirectAdmin server — read-only commands บวก block/unblock IP เท่านั้น ไม่เปิด port ไม่เพิ่ม service และจำกัด blast radius ด้วย least-privilege ทุกชั้น

#telegram#bot#monitoring#alerting
อ่าน 13 นาที·1 มิ.ย.
ดึง Backup ออกนอกห้อง Server ด้วย Pull Architecture + rclone/rsync
Backup

ดึง Backup ออกนอกห้อง Server ด้วย Pull Architecture + rclone/rsync

สร้าง Layer 3 off-site ให้ครบ 3-2-1 ด้วยสถาปัตยกรรมแบบ pull (host ปลายทางดึงเอง) บวก rclone + rsync และบทเรียนจาก trip จริงทั้ง NAT, RSA host key, cwRsync, และ PID recycle.

#backup#offsite#disaster-recovery#rclone
อ่าน 12 นาที·28 พ.ค.
วางระบบ Backup DirectAdmin ใหม่ด้วย NFS และ POSIX ACL จากงานจริง
Backup

วางระบบ Backup DirectAdmin ใหม่ด้วย NFS และ POSIX ACL จากงานจริง

บันทึกการรื้อระบบ backup ของ DirectAdmin server หลัง migrate เครื่องใหม่ — จาก FTP push ที่พังสามชั้น มาเป็น NFSv4 hard mount + POSIX ACL พร้อมบทเรียนระดับ kernel ที่กว่าจะลงตัว.

#backup#nfs#posix-acl#directadmin
อ่าน 13 นาที·28 พ.ค.
อ่าน exim mainlog หา stuck client — Mail Forensics ภาคแรก
Security

อ่าน exim mainlog หา stuck client — Mail Forensics ภาคแรก

วิธีไล่อ่าน /var/log/exim/mainlog แยกให้ออกว่าใครส่งเมลไม่ได้เพราะเครื่องในออฟฟิศใส่รหัสผิด กับใครเป็น attacker brute force ด้วยคำสั่งที่ผมใช้จริงตอนลูกค้าเร่งคำตอบ

#mail-forensics#exim#mail#smtp
อ่าน 12 นาที·23 พ.ค.
ไล่ Dovecot IMAP/POP fail บน DirectAdmin แล้วเก็บ log ยาว 90 วัน
Security

ไล่ Dovecot IMAP/POP fail บน DirectAdmin แล้วเก็บ log ยาว 90 วัน

ภาคต่อของ Mail Forensics — ไล่ IMAP/POP fail จาก /var/log/mail.log บน DirectAdmin, แยก stuck client กับ attacker ด้วย ratio ข้าม protocol, แล้วแก้ logrotate ให้เก็บ log ครบ 90 วันแทน default ที่หายภายในไม่กี่วัน

#mail#dovecot#imap#pop3
อ่าน 11 นาที·23 พ.ค.
qcow2 หรือ ZFS — ทำไมผมเพิ่งย้าย หลังใช้เครื่องเดิมมา 12 ปี
Linux

qcow2 หรือ ZFS — ทำไมผมเพิ่งย้าย หลังใช้เครื่องเดิมมา 12 ปี

บันทึกเหตุผลเบื้องหลังการเลือก storage layer ของเครื่อง Proxmox ที่รันมา 12 ปีไม่เคย reinstall — ทำไมปี 2014 เลือก qcow2 ทำไมเพิ่งย้าย ZFS ปี 2026 และอะไรคือสิ่งที่เปลี่ยน calculus จริง ๆ

#zfs#qcow2#proxmox#storage
อ่าน 12 นาที·21 พ.ค.
ทำ Redis แบบ per-user บน DirectAdmin โดยไม่ต้องซื้อ pro_pack
DirectAdmin

ทำ Redis แบบ per-user บน DirectAdmin โดยไม่ต้องซื้อ pro_pack

วิธีติดตั้ง Redis object cache แยกต่อ user บน DirectAdmin shared hosting ด้วย systemd template + unix socket + cgroup limit โดยเขียน provisioning script เองแทน DA panel ที่ต้องใช้ pro_pack license พร้อมสูตรเชื่อม WordPress, Flarum และ Laravel

#redis#cache#directadmin#shared-host
อ่าน 12 นาที·20 พ.ค.
ปรับแต่ง ModSecurity บน DirectAdmin ให้พอใช้จริงกับ shared host
Security

ปรับแต่ง ModSecurity บน DirectAdmin ให้พอใช้จริงกับ shared host

รวม 4 ส่วนที่ผมเพิ่มเข้าไปเหนือ DA default — exclusion ก่อน CRS, credscan ban 1 hit, แก้ MODSEC_LOG path ที่ DA ship ผิด และ self-heal cron กัน rebuild ทับ

#modsecurity#csf#directadmin#custombuild
อ่าน 11 นาที·20 พ.ค.
ย้าย DirectAdmin จาก CentOS 7 ไป Debian 12 บน Proxmox (สารบัญซีรีส์)
DirectAdmin

ย้าย DirectAdmin จาก CentOS 7 ไป Debian 12 บน Proxmox (สารบัญซีรีส์)

บันทึกการย้าย DirectAdmin shared host จาก CentOS 7 (EOL) ไป Debian 12 บน Proxmox ลูกค้า 80+ ราย แตกเป็น 5 ตอน พร้อมภาพรวมขั้นตอนและลิงก์ทุกตอน

#migration#server-migration#directadmin#custombuild
อ่าน 8 นาที·20 พ.ค.
ย้าย DA ตอนจบ — security fixes + hardening หลังเครื่องนิ่ง
Security

ย้าย DA ตอนจบ — security fixes + hardening หลังเครื่องนิ่ง

ปิดท้ายซีรีส์ย้าย DirectAdmin ข้ามดิสโทร ด้วยงาน security ที่ทำหลังเครื่องนิ่งแล้ว — sudoers wildcard CVE, OpenSSL SECLEVEL, ModSec exclusion ก่อน CRS, csfpost drop-in และ 5 ชั้นรอด DA update

#security#hardening#directadmin#modsecurity
อ่าน 12 นาที·20 พ.ค.
ย้าย DA จาก CentOS 7 ไป Debian 12 ตอนที่ 4 — Cutover จริง กับ 17 ปัญหาหลังสลับเครื่อง
DirectAdmin

ย้าย DA จาก CentOS 7 ไป Debian 12 ตอนที่ 4 — Cutover จริง กับ 17 ปัญหาหลังสลับเครื่อง

เล่า cutover จริงที่แผน downtime ใกล้ 0 พังเพราะ DA Legacy license และ qcow2 อ่านช้า สุดท้าย downtime 1 ชม. แล้วเจอ 17 ปัญหารัวๆ หลังสลับเครื่อง — critical web stack ดับ, medium subset ใช้ไม่ได้, minor debugging notes ครบ

#cutover#migration#directadmin#qcow2
อ่าน 13 นาที·20 พ.ค.
ย้าย DA ตอนที่ 3 — ลง DirectAdmin + CustomBuild บน Debian 12
DirectAdmin

ย้าย DA ตอนที่ 3 — ลง DirectAdmin + CustomBuild บน Debian 12

ลง DirectAdmin ผ่าน setup.sh แล้วประกอบ stack ทั้ง PHP หลายเวอร์ชัน MariaDB ModSecurity และ rspamd ด้วย CustomBuild บน staging VM ที่อยู่หลัง NAT พร้อมกับดักที่ผมเจอมาแล้วจริง

#directadmin#custombuild#php-fpm#mariadb
อ่าน 11 นาที·20 พ.ค.
ย้าย DA สู่ Debian 12 ตอนที่ 2 — เปลี่ยน storage เป็น ZFS mirror
Linux

ย้าย DA สู่ Debian 12 ตอนที่ 2 — เปลี่ยน storage เป็น ZFS mirror

เปลี่ยน storage layer จาก mdadm RAID1 + ext4 + qcow2 สามชั้น มาเป็น ZFS mirror + raw zvol ชั้นเดียว โดยทำได้ขณะ VM เก่ายัง online ผ่านเทคนิค degrade RAID เหลือ disk ใบเดียว

#zfs#raid#storage#snapshot
อ่าน 11 นาที·20 พ.ค.
ย้าย DA CentOS 7 → Debian 12 บน Proxmox ตอนที่ 1 — NAT pre-stage
DirectAdmin

ย้าย DA CentOS 7 → Debian 12 บน Proxmox ตอนที่ 1 — NAT pre-stage

เทคนิคเตรียม VM ใหม่บน internal bridge แบบ NAT ขณะที่ VM เก่ายังให้บริการลูกค้าปกติ ลด downtime ตอนย้าย DirectAdmin จาก CentOS 7 ไป Debian 12 บน Proxmox

#nat#proxmox#kvm#migration
อ่าน 11 นาที·20 พ.ค.
ปลด CSF block อัตโนมัติ คัด ghost device ออกจาก botnet brute force
Security

ปลด CSF block อัตโนมัติ คัด ghost device ออกจาก botnet brute force

เคสจริงบนเซิร์ฟเวอร์ DA shared host ที่ ghost device ในออฟฟิศทำให้ทั้งออฟฟิศโดน CSF block ทุกเช้า ผมเล่าวิธีทำ auto-unblock 4 ชั้น ที่แยกเครื่องในออฟฟิศออกจาก botnet ได้โดยไม่เผลอปลด attacker

#csf#firewall#brute-force#security
อ่าน 11 นาที·20 พ.ค.
OpenClaw กับ VSCode + AI Agent ต่างกันยังไง แล้วใครควรใช้อะไร
AI

OpenClaw กับ VSCode + AI Agent ต่างกันยังไง แล้วใครควรใช้อะไร

เทียบ AI Agent สองสายที่ยกระดับ AI จากแชทบอทมาเป็นผู้ช่วยที่ลงมือทำงานจริง — สายเกตเวย์บนแชทแอปอย่าง OpenClaw กับสายฝังใน editor อย่าง VSCode + AI Agent ทั้งวิธีทำงาน ค่าใช้จ่าย token และความปลอดภัยที่มือใหม่ต้องรู้

#ai#openclaw#vscode#claude-code
อ่าน 14 นาที·19 ก.พ.
สร้างเซิร์ฟเวอร์ AI จากเครื่องเดสก์ท็อป WSL2 + Ollama + OpenClaw
AI

สร้างเซิร์ฟเวอร์ AI จากเครื่องเดสก์ท็อป WSL2 + Ollama + OpenClaw

บันทึกการประกอบเซิร์ฟเวอร์ AI ในบ้านจากศูนย์ เริ่มจาก Windows 11 IoT ลง WSL2 + Ubuntu วาง Ollama รัน LLM บนการ์ดจอสองใบ แล้วต่อด้วย OpenClaw หลาย instance ผ่าน systemd ครบทั้ง driver, custom Modelfile, การแยก user และ benchmark

#wsl2#ollama#openclaw#local-llm
อ่าน 18 นาที·18 ก.พ.