Category: Uncategorized

  • Claude Project คืออะไรและใช้งานยังไง: สรุปฟีเจอร์อัปเดตใหม่จาก Claude Code

    Claude Project คืออะไรและใช้งานยังไง: สรุปฟีเจอร์อัปเดตใหม่จาก Claude Code


    🤔 Claude Project คืออะไร?

    Claude Project เป็นห้องแชทกับ Claude Code เพื่อทำงานที่มีความซับซ้อน และประกอบด้วย 2 ส่วนหลัก:

    1. ห้องแชทหลัก: ใช้สั่งงาน เพื่อให้ Claude วางแผน แจกจ่ายงาน และประสานงานระหว่างห้องย่อย
    2. Thread หรือห้องแชทย่อย: ใช้ทำงานตามที่แชทหลักมอบหมาย
    Claude Code Project is a one long conversation where each task is assigned to a separate thread that runs on its own context window.
    รูปจาก Getting started with Claude Code Projects

    Note: ปัจจุบัน Claude Project ใช้งานได้กับบัญชี Pro และ Max เท่านั้น


    🤨 เมื่อไรควรใช้ Claude Project?

    Claude Project เหมาะกับการใช้งาน 3 กรณีนี้:

    กรณีที่ 1. เป้าหมายขนาดใหญ่:

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

    กรณีที่ 2. ทำงานกับหลาย repo พร้อมกัน:

    Claude Project สามารถเข้าถึง repo และสร้าง pull request (PR) ได้

    กรณีที่ 3. ทำหลายงานพร้อมกัน:

    Claude Project สามารถรันหลาย thread เพื่อทำงานหลายอย่างในเวลาเดียวกันได้


    💻 วิธีใช้ Claude Project

    .

    🏁 วิธีสร้าง Project

    ขั้นที่ 1. ใน Claude กด “Project”

    ขั้นที่ 2. กด “New project”

    ขั้นที่ 3. กรอกรายละเอียด ได้แก่:

    • Name: ชื่อ project
    • Goal: เป้าหมาย
    • Context: repo ที่จะให้ Claude เข้าถึงได้

    ขั้นที่ 4. กด “Create project”

    To create a Claude Project, click "New Project" > Add details like name, goal, and context > Click "create project"
    รูปจาก Getting started with Claude Code Projects

    .

    🗣️ วิธีสั่งงาน

    ขั้นที่ 1. สั่งงาน Claude ด้วยภาษาธรรมชาติ (natural language)

    ตัวอย่าง:

    สร้าง landing page ให้หน่อย

    ขั้นที่ 2. Claude จะประมวลผลคำสั่ง และสร้าง thread ขึ้นมาทำงานให้กับเรา

    • ติดตามการทำงานได้ โดยกดที่ thread ที่ต้องการ
    • กำกับการทำงานของ Claude ได้ โดยพิมพ์คำสั่งลงใน thread
    In a Claude Project, to guide a task in each thread, simply enter your prompt in the thread.
    รูปจาก Getting started with Claude Code Projects

    .

    🗂️ การจัดเก็บไฟล์

    Claude Project เก็บไฟล์ (ทั้งที่เราอัปโหลด และ Claude สร้างขึ้น) ไว้ในเมนูชื่อ “Library”

    ทุก thread ใน project สามารถเข้าถึงไฟล์ใน Library ได้

    In a Claude Project, all your files, uploaded and created by Claude, are stored in Library.
    รูปจาก Getting started with Claude Code Projects

    🗝️ เคล็ดลับการใช้งาน Claude Project

    .

    1️⃣ ข้อ 1. ใช้งานอย่างประหยัด Token

    ยิ่ง Claude Project สร้าง thread มากเท่าไร เราก็ยิ่งใช้ token และติดลิมิตการใช้งานเร็วขึ้นเท่านั้น

    เพื่อลดการใช้ token เราควรเลือก model ให้เหมาะกับการใช้งานดังนี้:

    1. เลือก model ขนาดเล็ก (เช่น Haiku) สำหรับแชทหลักที่ใช้ในการจ่ายงานเท่านั้น
    2. เลือก model ขนาดเล็ก–กลาง (เช่น Haiku และ Sonnet) สำหรับ thread ที่ทำงานง่าย ๆ
    3. เลือก model ขนาดใหญ่ (เช่น Opus) สำหรับ thread ที่ทำงานซับซ้อน

    การตั้งค่า model:

    เราเลือก model ใช้งานได้ 2 วิธี:

    วิธีที่ 1. Project settings:

    1. กดรูปฟันเฟือง
    2. ใน “General” ใต้เมนู “Models” เลือก model ที่ต้องการใช้งาน

    Model ที่เลือกจะเป็นค่าเริ่มต้น (default) ของทั้ง project

    In a Claude Project, you can go to settings to set the default models for each feature like coordinator and thread.
    รูปจาก Getting started with Claude Code Projects

    วิธีที่ 2. แชท:

    กดเลือก model ก่อนส่งคำสั่งให้ Claude ทั้งในแชทหลักและ thread

    In a Claude Project, you can choose which model to run before submitting each prompt.

    .

    2️⃣ ข้อ 2. ทำให้ Claude ตอบอย่างที่เราต้องการ

    เราควรใส่คำสั่งอย่างละเอียด เพื่อให้ Claude ทำงานตามที่เราต้องการ

    ตัวอย่าง:

    • ต้องการให้ Claude สร้าง thread ขึ้นมาทำงานกี่ thread
    • Claude ควรวางแผนก่อนเริ่มงานไหม
    • ควรจะอัปเดตงานถี่แค่ไหน

    .

    3️⃣ ข้อ 3. ป้องกันไม่ให้ Claude ลืมบริบท

    ห้องแชทที่คุยกันมานาน อาจทำให้ Claude ลืมข้อมูลในช่วงต้นของ project ได้ เมื่อการพูดคุยยาวเกิน context window ของ Claude

    เราช่วยให้ Claude ไม่ลืมบริบทการทำงานได้ โดยเพิ่มข้อมูลไว้ในความจำของ Claude

    วิธีสร้างความจำ:

    1. กดรูปฟันเฟือง
    2. กดเมนู “Memory”
    3. พิมพ์สิ่งที่ต้องการให้ Claude รู้ ลงในกล่องข้อความ (เช่น project นี้เกี่ยวกับอะไร)
    4. กดส่งข้อความ
    In a Claude Project, you can add memory by going to "Settings" and "Memory".
    รูปจาก Getting started with Claude Code Projects

    🫵 หลังจบบทความนี้

    หลังอ่านบทความนี้แล้ว มาลองใช้ Claude Project กันนะครับ


    📄 อ้างอิง

  • SQL Subquery คืออะไร? เทคนิคและตัวอย่างการใช้งาน

    SQL Subquery คืออะไร? เทคนิคและตัวอย่างการใช้งาน


    🤨 Subquery คืออะไร?

    Query ใน SQL (Structured Query Language) คือ คำสั่งที่ส่งไปยังฐานข้อมูล (database) เพื่อเรียกดูหรือวิเคราะห์ข้อมูล

    ตัวอย่าง query:

    SELECT ...
    FROM ...

    Subquery คือ query ที่ซ้อนอยู่ใน query อื่น

    ตัวอย่าง subquery:

    SELECT ...
    FROM (SELECT ... FROM ...)
    • SELECT ... FROM คือ query หลัก
    • (SELECT ... FROM ...) คือ subquery

    ถ้าเราเห็น SELECT ในวงเล็บเมื่อไร แสดงว่า เรากำลังใช้ subquery อยู่

    Note:

    • Query หลัก มักเรียกว่า outer query
    • Subquery บางทีเรียกว่า inner query หรือ nested query

    🤔 Subquery ใช้ทำอะไร?

    Subquery ใช้วิเคราะห์ข้อมูล (data transformation) ให้กับ query หลัก ซึ่งทำให้:

    • วิเคราะห์ข้อมูลได้ยืดหยุ่นมากขึ้น (dynamic aggregation)
    • กรองข้อมูลได้ยืดหยุ่นมากขึ้น (dynamic filtering)
    • เชื่อม tables ได้ง่ายขึ้น

    เพราะแทนที่เราจะต้องหาค่าต่าง ๆ ก่อนใส่ลงใน query เราสามารถคำนวณค่าเหล่านี้ใน query ได้โดยตรง


    🧑‍💻 ตัวอย่างการใช้ Subquery

    Subquery ใช้ได้หลายที่ เช่น:

    1. SELECT
    2. WHERE
    3. JOIN

    ไปดูตัวอย่างการใช้งาน subquery กับ chinook database ซึ่งมีข้อมูลของร้านมีเดีย (media) ออนไลน์ (เช่น ข้อมูลลูกค้า ข้อมูลเพลง) กัน

    .

    💻 การใช้ Subquery กับ SELECT

    เราจะใช้ subquery กับ SELECT เพื่อวิเคราะห์ข้อมูลให้กับแต่ละ row ใน table

    ตัวอย่าง:

    หาค่าเฉลี่ย (average) ของ invoice:

    -- Subquery in SELECT
    SELECT
    InvoiceId,
    Total,
    (
    SELECT AVG(Total)
    FROM Invoice -- Subquery
    ) AS Mean
    FROM Invoice;

    ผลลัพธ์:

    SQL subquery in SELECT example

    .

    💻 การใช้ Subquery กับ WHERE

    เราจะใช้ subquery กับ WHERE เพื่อช่วยกรองข้อมูล

    ตัวอย่าง:

    หา invoice ที่มียอดสูงกว่าค่าเฉลี่ย:

    -- Subquery in WHERE
    SELECT
    InvoiceId,
    Total
    FROM Invoice
    WHERE Total > (
    SELECT AVG(Total)
    FROM Invoice -- Subquery
    );

    ผลลัพธ์:

    SQL subquery in WHERE example

    .

    💻 การใช้ Subquery กับ JOIN

    เราจะใช้ subquery กับ JOIN เพื่อสร้าง table ชั่วคราวขึ้นมาเชื่อมกับ table อื่น

    ตัวอย่าง:

    หาว่า ลูกค้าแต่ละคนใช้จ่ายเท่าไร:

    -- Subquery in JOIN
    SELECT
    c.FirstName,
    c.LastName,
    s.TotalSpent
    FROM Customer AS c
    JOIN (
    SELECT
    CustomerId,
    SUM(Total) AS TotalSpent
    FROM Invoice
    GROUP BY CustomerId -- Subquery
    ) AS s
    ON c.CustomerId = s.CustomerId;

    ผลลัพธ์:

    SQL subquery in JOIN example

    🚀 แนะนำ Subquery ขั้นสูง

    Subquery ขั้นสูงที่ควรรู้จัก มี 2 ประเภท ได้แก่:

    1. Correlated subquery
    2. Nested subquery

    .

    💿 Correlated Subquery

    Correlated subquery คือ subquery ที่อ้างอิงถึง column จาก query หลัก

    หมายความว่า การวิเคราะห์ของ correlated subquery ขึ้นอยู่กับ query หลัก

    ตัวอย่าง:

    หาเพลงที่มีความยาวมากกว่าค่าเฉลี่ยของเพลงประเภทเดียวกัน:

    -- Correlated subquery
    SELECT
    t.Name,
    t.Milliseconds,
    t.GenreId
    FROM Track AS t
    WHERE t.Milliseconds > (
    SELECT AVG(t2.Milliseconds)
    FROM Track AS t2
    WHERE t2.GenreId = t.GenreId -- Refer to column in the main query
    );

    สังเกตว่า subquery อ้างอิง t.GenreId จาก query หลัก

    ผลลัพธ์:

    SQL correlated subquery example

    .

    🪹 Nested Subquery

    Nested subquery คือ subquery ที่อยู่ในอีก subquery หนึ่ง

    Nested subquery มักใช้เพื่อแบ่งการวิเคราะห์ข้อมูลออกเป็นขั้นย่อย ๆ

    ตัวอย่าง:

    หาเพลงที่ยาวกว่าความยาวเฉลี่ยของเพลงร็อก:

    -- Nested subquery
    SELECT
    Name,
    Milliseconds
    FROM Track
    WHERE Milliseconds > ( -- Subquery
    SELECT AVG(Milliseconds)
    FROM Track
    WHERE GenreId = ( -- Nested subquery
    SELECT GenreId
    FROM Genre
    WHERE Name = 'Rock'
    )
    );

    ผลลัพธ์:

    SQL nested subquery example

    💡 เทคนิคการเขียน Subquery ให้อ่านง่าย: WITH

    การใช้ subquery อาจทำให้ query ของเราอ่านยากได้

    ตัวอย่าง:

    หาลูกค้าที่ใช้จ่ายสูงกว่าค่าเฉลี่ย:

    SELECT
    CustomerId,
    SUM(Total) AS total_spent
    FROM Invoice
    GROUP BY CustomerId
    HAVING SUM(Total) > (
    SELECT AVG(customer_total)
    FROM (
    SELECT
    CustomerId,
    SUM(Total) AS customer_total
    FROM Invoice
    GROUP BY CustomerId
    ) AS customer_spending
    );

    เพื่อแก้ปัญหานี้ เราสามารถใช้ WITH มาช่วยได้

    WITH เป็นคำสั่งสำหรับสร้างผลลัพธ์ชั่วคราว (Common Table Expression; CTE) ซึ่งเราใช้อ้างอิงใน query ได้

    WITH ทำให้เราใช้ subquery ได้โดยไม่ต้องใส่ subquery ลงใน query หลัก

    ตัวอย่าง:

    -- Use WITH to create CTEs
    WITH customer_spending AS (
    SELECT
    CustomerId,
    SUM(Total) AS total_spent
    FROM Invoice
    GROUP BY CustomerId
    ),
    average_spending AS (
    SELECT AVG(total_spent) AS avg_spent
    FROM customer_spending
    )
    -- SELECT with CTEs
    SELECT
    CustomerId,
    total_spent
    FROM customer_spending -- CTE
    WHERE total_spent > (
    SELECT avg_spent
    FROM average_spending -- CTE
    );

    จะเห็นว่า WITH ทำให้ query ของเราอ่านง่ายขึ้นมาก


    💪 บทสรุป

    • Subquery เป็น query ที่ซ้อนอยู่ใน query อื่น
    • ใช้วิเคราะห์ข้อมูลเพื่อส่งไปใช้ใน query หลัก
    • ใช้ร่วมกับคำสั่งอื่นได้ เช่น SELECT, WHERE, JOIN
    • Correlated subquery คือ subquery ที่อ้างอิง column ใน query หลัก
    • Nested subquery คือ subquery ที่อยู่ใน subquery อื่น
    • ใช้ WITH เพื่อทำให้ query ที่มี subquery อ่านง่ายขึ้น

    🫵 หลังจบบทความนี้

    หลังจบบทความนี้แล้ว มาลองใช้ subquery กันนะครับ

    • ดู code และ database ในบทความนี้บน GitHub
    • ฝึกใช้ SQL และ subquery ฟรีได้ที่ sqliteonline.com

    📄 อ้างอิง

  • 4 ขั้นตอนการใช้งาน Claude Code เพื่อให้ได้ Code ที่ตอบโจทย์

    4 ขั้นตอนการใช้งาน Claude Code เพื่อให้ได้ Code ที่ตอบโจทย์

    Claude Code เป็น AI coding assistant ที่กำลังได้รับความนิยม ด้วยความสามารถในการประมวลผลคำสั่ง และความสามารถในการทำงานกับไฟล์บนคอมพิวเตอร์ได้โดยตรง ช่วยลดเวลาในการ copy-paste code ไปมาระหว่าง Claude และไฟล์

    แม้ Claude Code จะสามารถเขียน code ได้ดี แต่ก็ไม่ได้หมายความว่า เราจะได้ code ที่ตอบโจทย์ทุกครั้ง

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

    ในบทความนี้ ผมจะมาแนะนำ 4 ขั้นตอนในการทำงานกับ Claude Code เพื่อให้ได้ code ที่ตอบโจทย์

    ถ้าทุกคนพร้อมแล้ว ไปเริ่มกันเลย


    1. 🤨 ทำไมต้อง 4 ขั้นตอน?
    2. 🧑‍💻 วิธีใช้ Claude Code ที่ถูกต้อง ใน 4 ขั้นตอน
      1. 🔍 Step 1. Explore
      2. 🗺️ Step 2. Plan
      3. 💻 Step 3. Code
      4. 🚀 Step 4. Commit
    3. 💪 Summary
    4. 🫵 Your Turn
    5. 📃 References

    🤨 ทำไมต้อง 4 ขั้นตอน?

    4 ขั้นตอนในการทำงานกับ Claude Code ได้แก่:

    1. Explore
    2. Plan
    3. Code
    4. Commit

    สังเกตว่า ทั้ง 4 ขั้นเหมือนกับการเขียน code ของมนุษย์ ถ้าเราสั่งให้ developer สร้างเว็บไซต์ สิ่งที่ developer จะทำ คือ:

    1. ทำความเข้าใจความต้องการและข้อมูลที่มี (explore)
    2. วางแผนและออกแบบการเขียน code (plan)
    3. ลงมือเขียน (code)
    4. ส่งงานให้ตรวจ (commit)

    จะเห็นว่า แต่ละขั้นส่งเสริมซึ่งกันและกัน ถ้าไม่ทำความเข้าใจงาน ก็วางแผนไม่ได้ และถ้าวางแผนไม่ได้ ก็เขียน code ได้ไม่ดี และทำให้งานที่ส่งไม่มีคุณภาพ

    การทำงานกับ Claude ก็เช่นกัน ถ้าเราสั่งให้เขียน code โดยไม่ทำความเข้าใจงานและวางแผนก่อน code ที่ออกมาก็มีโอกาสที่จะผิดพลาดสูง

    ดังนั้น เพื่อให้ได้ code ที่ตอบโจทย์ เราจะต้องทำงานใน 4 ขั้นตอน:

    1. Explore
    2. Plan
    3. Code
    4. Commit

    🧑‍💻 วิธีใช้ Claude Code ที่ถูกต้อง ใน 4 ขั้นตอน

    .

    🔍 Step 1. Explore

    ในขั้นแรก เราจะต้องบอกให้ Claude ทำความเข้าใจงานก่อน โดย:

    1. เปิด plan mode โดยกด shift + tab จนกว่าจะถึง plan mode หรือพิมพ์คำสั่ง /plan
    2. สั่งให้ Claude อ่านไฟล์ใน folder ที่เรากำหนด โดยใน folder นี้สามารถมีได้ทั้งไฟล์ความต้องการ และ code ที่เราเคยเขียนไว้

    ตัวอย่าง:

    อ่านไฟล์ requirements.md
    เพื่อเข้าใจเป้าหมาย user persona
    ปัญหาที่ต้องการแก้ด้วยเว็บไซต์
    และการแบ่ง module ในการพัฒนา

    .

    🗺️ Step 2. Plan

    ในขั้นที่ 2 เราจะสั่งให้ Claude วางแผนงาน

    ตัวอย่าง:

    วางแผนการออกแบบ module 1 ของเว็บไซต์
    เริ่มตั้งแต่ user เข้าสู่ระบบไปจนถึง ...

    Tips:

    ถ้าต้องการให้ Claude คิดเยอะ ๆ เราใช้คำสั่ง think เข้ามาช่วยได้:

    KeywordLevel of Thinking
    thinkคิดระดับพื้นฐาน
    think moreคิดเพิ่มขึ้น
    think a lotคิดให้ครอบคลุม
    think longerคิดให้นานขึ้น
    ultrathinkคิดให้มากที่สุด

    ตัวอย่าง:

    ultrathink วางแผนการออกแบบ module 1 ของเว็บไซต์

    หมายถึงให้คิดเกี่ยวกับแผนการทำงาน module 1 ให้มากที่สุดเท่าที่จะทำได้

    Note: ยิ่งคิดเยอะก็จะยิ่งใช้ token เยอะ และทำให้เราติด limit ในการใช้งานเร็วขึ้น

    เมื่อ Claude ส่งแผนกลับมาแล้ว เราสามารถแก้ไขแผนเพื่อช่วยกำหนดทิศทางก่อนที่จะเขียน code ได้ ซึ่งเราทำได้ 2 วิธี:

    1. กด ctrl + G เพื่อแก้ไขแผนเอง
    2. บอก Claude ว่าอะไรที่ยังไม่ใช่ เพื่อให้ Claude แก้แผนให้

    ตัวอย่าง:

    เพิ่มการ unit test สำหรับแต่ละ function

    .

    💻 Step 3. Code

    เมื่อพอใจกับแผนแล้ว เราจะสั่งให้ Claude เขียน code ตามแผนที่วางไว้:

    1. ออกจาก plan mode ด้วยคำสั่ง /plan หรือกด shift + tab
    2. สั่งให้เขียน code ตามแผน

    ตัวอย่าง:

    เขียน code ตามแผนด้านบน
    เขียนแล้ว ให้ทดสอบและแก้ไขจุดผิดพลาดที่เจอด้วย
    ก่อนจะส่งงานกลับมา

    .

    🚀 Step 4. Commit

    ในขั้นสุดท้าย เราจะสั่งให้ Claude ช่วย commit code ให้

    ตัวอย่าง:

    Commit code
    พร้อม commit message สั้น ๆ
    เพื่อรอ review

    💪 Summary

    การทำงานกับ Claude Code ที่ดีไม่ใช่การสั่งให้เขียน code เลย แต่จะต้อง:

    1. Explore: ทำความเข้าใจเนื้องานที่ต้องทำ
    2. Plan: กำหนดทิศทางและออกแบบการทำงาน
    3. Code: ลงมือทำ
    4. Commit: ส่งงานรอรีวิว

    เมื่อทำงานกับ Claude Code ใน 4 ขั้นตอนนี้แล้ว เราก็จะได้ code ที่ตอบโจทย์มากขึ้น 👍


    🫵 Your Turn

    หลังอ่านบทความนี้แล้ว ลองมาใช้ Claude Code กันดูนะครับ:


    📃 References

  • Machine Learning in R: รวบรวม 13 บทความสอนสร้าง Machine Learning ในภาษา R

    Machine Learning in R: รวบรวม 13 บทความสอนสร้าง Machine Learning ในภาษา R

    ภาษา R มี packages จำนวนมาก สำหรับสร้าง machine learning models

    ในบทความนี้ ผมรวบรวม 13 บทความสอนทำ machine learning ซึ่งแบ่งได้เป็น 4 กลุ่ม ดังนี้:

    1. Supervised learning models หรือการ train models แบบมีเฉลย
    2. Tree-based models หรือการสร้าง model ที่ใช้ decision trees
    3. Unsupervised learning models หรือการ train models แบบไม่มีเฉลย
    4. All-in-one packages หรือ packages สำหรับทำ machine learning แบบครบครัน ตั้งแต่การเตรียมข้อมูลไปจนถึงการประเมินประสิทธิภาพ รวมทั้งใช้ model ได้ตามต้องการ

    กลุ่มที่ 1. Supervised learning models (4 บทความ):

    1. KNN
    2. Naïve Bayes
    3. Linear regression
    4. Logistic regression
    5. Generalised linear models

    กลุ่มที่ 2. Tree-based models (3 บทความ):

    1. ภาค 1: Single tree และ random forest 1
    2. ภาค 2: Random forest 2
    3. ภาค 3: Boosted trees

    กลุ่มที่ 3. Unsupervised learning models (3 บทความ):

    1. k-means
    2. Hierarchical clustering analysis (HCA)
    3. Principal component analysis (PCA)

    กลุ่มที่ 4. All-in-one packages (2 บทความ):

    1. caret (เป็น package ที่เก่ากว่า)
    2. tidymodels (เป็น package ที่ใหม่กว่า)