somsakul.com

ทดลองทำสิ่งต่างๆ ทั่วไป

บันเทิง

ศูนย์รวมความบันเทิง 🎬 ที่จะทำให้คุณเพลิน! อัปเดตข่าวสารความเพลิน รีวิวของดีในเน็ต 🍿 เพลงเพลิน และเรื่องราวสุดเพลิน 🌟 เข้ามาเติมรอยยิ้มและผ่อนคลายสมองไปด้วยกันที่นี่เลย! 🎉"

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

เพื่อน Toxic ขั้นสุดนอกจากจะไม่ช่วยแล้ว ยังพูดซ้ำเติม เหยียดหยามขั้นรุนแรงด้วยประโยค "มีอะไรลำบากไม่ต้องโทรหากูนะ... ขออนุญาตบล็อกล่วงหน้า" คุณรู้สึกรังเกียจเต็มทน และต้องการ "ประโยคตอกกลับด้วยวาจา" แบบจี๊ดถึงทรวง หน้าชา สวนกลับได้คมๆ ก่อนเดินออกมาอย่างผู้ชนะ! ✨

หากเราเป็น loser แห่งรุ่น ตอนเรียนเทพมาก ใครๆ ก็ว่าเราอนาคตไกล แต่ทำไมตอนทำงาน ชีวิตตกต่ำลุ่มๆ ดอนๆ เก่งงาน แต่ไม่เก่งความสัมพันธ์

ในงานเลี้ยงรุ่นแห่ง toxic เราควรวาง position ยังไง ที่ไม่แก้ตัว ไม่ปกปิด แต่จะพลิกวิกฤตเป็นโอกาสทองแห่งชีวิต

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

## 💣 คลังคำถามทำลายมิตรภาพ (เรียงจากเบาไปหนัก)

🟢 ระดับ 1: เบาๆ แต่แอบแขวะ (Soft Warm-up)

เน้นแซวเรื่องกาลเวลา รูปร่าง และการงานแบบข่มนิดๆ

"เฮ้ย! จำแทบไม่ได้เลยว่ะ โลกหมุนไวเนอะ... แล้วตอนนี้ทำอะไรอยู่อะ? ยังอยู่ที่เดิมป่ะ หรือลาออกไปตั้งนานแล้ว?"

มาไวดิ เด้ง

@thairath_news ลูกค้าหิว ไรเดอร์รีบไปหน่อย สะดุดหิน ชั่ววินาทีผมเกือบบินได้ ! #ข่าวtiktok #ไรเดอร์ #มอไซค์ #ลูกค้า #คลิปโซเชียล #ไทยรัฐทีวี32 ♬ เสียงต้นฉบับ - Thairath

โดนเบียด

@warmjad ประสบการณ์ตกข้างทาง #ไรเดอร์สู้ชีวิต ♬ เสียงต้นฉบับ - ไอเฮียมาแว้ว - WarmJad

น้ำท่วม ยังจะไป

@feawstremmer ชีวิตไม่สิ้นก็ดิ้นกันไป ไรเดอร์สายลุย😁😂 #ไรเดอร์ส่งอาหาร #lineman #ฟีดดดシ #ชีวิตคนทํางาน ♬ เสียงต้นฉบับ - ₚₐᵢgᵤbgᵤₙII

ไม่ตก ดูสภาพถนนดิ

@rider_daily เส้นนี้คนใช้น้อยลง เพราะมีหมู่บ้านมาตัดถนนทะลุให้แล้ว #rider_daily #ไรเดอร์ ♬ Summer, bright, pop punk, hip hop, emo, trap, pop, like MGK(1272491) - SAKUMAMATATA

มัวเล่นมือถือดิ

@rider_daily ตอบกลับ @✨👾 ในคลิปไม่ใช่ผมครับ #rider_daily #lineman #ตกคลอง ♬ เสียงต้นฉบับ - ไปกับก้อง

มีประกัน

(ก็ดีกว่าไม่มี แต่ไม่คุ้มหรอกนะ ตกน้ำไปก็ขาดรายได้)

@rider_daily ไปส่งริมคลองหรือไปทางยากๆผมไปได้หมด #ALLInsurance #CounterService #7ElevenThailand ♬ เสียงต้นฉบับ - ไปกับก้อง

ตกไปในน้ำเลย

@ninja9779 ลูกค้ารอแป๊บกู้รถอยู่ #ตกนำ้ #ชีวิตไลน์เดอร์ ♬ เสียงต้นฉบับ - จีระศักดิ์ จ้อยเอม

กันตก = ทำให้ตก

@rider_daily ตอบกลับ @◤ᴍʀ◢┇ปีศาจメ亗(ไบค์👋) ในคลิปไม่ใช่ผมนะครับ ขอเพื่อนๆมาลงให้ดูครับ #rider_daily #lineman #ตกคลอง ♬ เสียงต้นฉบับ - ไปกับก้อง

Glass Armonica

- Posted in บันเทิง by

Glass Armonica เป็นเครื่องดนตรีประหลาด เอาถ้วยแก้วมาซ้อนกัน เวลาเล่นเพลงต้องหมุนๆ ใช้นิ้วเปียกน้ำลูบที่ขอบ เสียงจะคล้ายเครื่องเป่าแบบออแกน เล่นแบบ chord ใช้ 3 นิ้วหรือมากกว่า ในการให้เสียงประสาน

https://www.youtube.com/watch?v=eQemvyyJ--g

ช่วยทำหน้าที่เป็นที่ปรึกษาการเขียนโค้ดสำหรับสร้าง Web Application สไตล์ Minimalistic High-Performance โดยมีรายละเอียด Tech Stack และสถาปัตยกรรมระบบดังนี้:

1. สมาชิกในทีม (Tech Stack):

  • Backend / Database / Auth: PocketBase (Go Executable Single Binary ที่มี SQLite + Admin UI + REST/SSE API ในตัว)

  • Web Server (บ้าน): Caddy Server (ทำหน้าที่เป็น Reverse Proxy หน้า PocketBase วิ่งผ่าน TCP Port 127.0.0.1:8090 บน Windows Server พร้อมเปิด HTTPS/SSL อัตโนมัติ)

  • CSS / UI: Pico CSS (Classless CSS - สวยงามแบบมินิมอล ไม่เน้นใส่ class และไม่ต้อง Compile)

  • AJAX / Dynamic HTML: HTMX (เรียกใช้ REST API / SSE จาก PocketBase มาแสดงผลแบบไม่ต้อง Refresh หน้า)

  • Icons: Lucide Icons (เรียกใช้ผ่าน CDN)

  • Client-Side Reactivity (สำรอง): Alpine.js (เตรียมไว้จัดการ UI หน้าบ้านเล็กๆ น้อยๆ เช่น Dropdown/Modal)


2. โครงสร้างโฟลเดอร์โครงการ (Project File Structure):

ช่วยออกแบบโครงสร้างโฟลเดอร์ให้เบา คลีน และจัดการง่ายบน Windows เช่น: - /pb_data (โฟลเดอร์เก็บข้อมูลของ PocketBase) - /public (โฟลเดอร์เก็บไฟล์ HTML, JS, CSS หน้าบ้าน) - index.html - /includes/ (สำหรับแบ่งส่วน UI) - pocketbase.exe - caddy.exe - Caddyfile


3. การ Setup และตัวอย่างโค้ดเริ่มต้นของแต่ละสมาชิก:

ช่วยสร้างไฟล์เริ่มต้น (Boilerplate) และคู่มือการ Setup ให้ครบทุกส่วน ดังนี้:

  1. Caddyfile: ตั้งค่า Reverse Proxy ส่ง Traffic จาก Port 80/443 ไปหา PocketBase ที่ 127.0.0.1:8090 และตั้งค่าความปลอดภัยบล็อกการเข้าถึง /pb_data
  2. public/index.html: หน้าหลักตัวอย่างการประกอบร่าง:

    • ดึง CDN ของ Pico CSS, HTMX, Lucide Icons และ Alpine.js มาครบชุด
    • แสดงตัวอย่างการใช้ HTMX ดึงข้อมูล Collection จาก PocketBase API (/api/collections/.../records) มาแสดงในตาราง Pico CSS โดยไม่ต้องเขียน JavaScript เอง
    • แสดงตัวอย่างการทำฟอร์มบันทึกข้อมูลยิงตรงเข้า PocketBase ผ่าน HTMX hx-post
  3. คำแนะนำการเปิดใช้งาน: วิธีรัน pocketbase.exe serve และ caddy run บน Windows พร้อมกัน

ก๊อปไปวางได้เลยใน Violentmonkey

  • VanillaJS
  • มันมี token แต่ไม่รู้ไว้ทำไม ไม่ได้ regen อ่ะ คงเก็บสถิติเฉยๆ
  • หน้าวิดีโอมันใช้เซิฟเวียดนาม ไม่รู้ทำไม

// ==UserScript==
// @name        adintrend.tv
// @namespace   Violentmonkey Scripts
// @icon        https://www.adintrend.tv/favicon.ico
// @version     1.0.0
//
// @match       https://www.adintrend.tv/hd/*
// @grant       GM_addStyle
//
// @author      -
// @description
// ==/UserScript==
GM_addStyle(`
  a.ch-btn {
    color: #888;
    background: #444;
  }
  a.ch-btn:hover {
    color: #444;
    background: lime;
  }
`);
const vdo = document.querySelector('iframe');
const token = document.querySelector("#SecureToken")

vdo.id = 'vdo';
// vdo wrapper

const vdoDiv = document.createElement('div');
vdoDiv.id = 'vdo-div'
vdoDiv.style = 'width:100%;text-align:center;margin-top:2em;'
vdoDiv.appendChild(vdo)

document.body.prepend(vdoDiv);
vdo.after(token);

const tvLinks = Array.from(document.querySelectorAll('a.linktv2')).map(a => {
    return {
        href: a.href,
        text: a.textContent.trim()
    };
});

const newContainer = document.createElement('div');
newContainer.className = 'my-custom-tv-list';
newContainer.style.margin = '10px 0'; // แต่ง Style ตามใจชอบ

tvLinks.forEach(item => {
    const newLink = document.createElement('a');
    newLink.href = item.href;
    newLink.textContent = `${item.text}`; // ใส่ Emoji เพิ่มความสวยงาม
    newLink.className = 'ch-btn';
    newLink.style.marginRight = '5px';
    newLink.style.padding = '5px 5px';
    newLink.style.textDecoration = 'none';
    newLink.style.borderRadius = '5px';

    // ยัดปุ่มใหม่ใส่ใน Container
    newContainer.appendChild(newLink);
});

    // 5. เอา Container ใหม่ไปต่อท้าย Iframe ทันที!
vdo.after(newContainer);

// remove junk
document.querySelector("body > table").remove()

// auto play

const myIframe = document.querySelector('iframe#vdo');

if (myIframe) {
    // รอให้ iframe โหลดเนื้อหาข้างในเสร็จก่อน
    myIframe.addEventListener('load', () => {
        try {
            // 2. เจาะเข้าไปดึงแท็ก <video> ที่อยู่ข้างใน iframe
            const iframeDocument = myIframe.contentDocument || myIframe.contentWindow.document;
            const videoElement = iframeDocument.querySelector('video');

            if (videoElement) {
                // 3. สั่งเล่นวิดีโอทันที!
                setTimeout(function(){
                  videoElement.play();
                  console.log('สั่ง Play วิดีโอใน iframe สำเร็จแล้ว! 🎬');
                },200)
            }
        } catch (error) {
            console.error('เกิดข้อผิดพลาดในการเข้าถึง iframe:', error);
        }
    });
}

ขั้นตอนโดยสรุป

  • Download extension.zip จากผู้ผลิต มาขยายไว้ใน folder ไหนก็ได้ แต่จำให้ได้ ซึ่งเราจะไม่ลบมัน
  • เปิด Developer Mode ใน brave://extensions อยู่บนขวา เป็น Toggle
  • เลือก [ Load unpacked ]
  • เลือก Folder แล้วกด [ Select ]
  • เสร็จสิ้น

แหล่งโหลด