PEA DevPool · Enterprise Go Engineering with AI Integration

สารบัญทั้งหมด — Backend, Frontend และ Rails

สรุปจากสไลด์ของคอร์ส เรียบเรียงใหม่เป็นบทเรียนที่ทำแบบฝึกหัดได้จริง — แต่ละบทมี predict-the-output, quiz ที่ให้ feedback ทันที และภารกิจให้ลงมือเขียนโค้ด
ตัวอย่างฝั่ง Go รันจริงบน Go 1.26 · ฝั่ง TypeScript ตรวจจริงด้วย tsc --strict · ฝั่ง HTML/CSS มีกล่องผลลัพธ์จริงที่เรนเดอร์ให้ดูข้างโค้ด · ฝั่ง Rails รันจริงบน Ruby 4.0.9 + Rails 8.1.4

0 / 145 บทเรียน
วิธีใช้

ฝั่ง Backend เรียงตามเลขบท (01 → 55) · ฝั่ง Frontend ต่อจากนั้น (56 → 89) · ฝั่ง Rails ต่ออีกที (90 → 145) แต่ละบทใช้เวลา 10–20 นาที ติ๊กช่องเมื่อทำเสร็จ เพื่อจำว่าค้างไว้ตรงไหน — ติ๊กที่นี่ หรือติ๊กท้ายบทเรียนก็ได้ ตรงกัน ส่วน Cheat sheet ของแต่ละวันคือที่ที่ควรกลับมาเปิดตอนเขียนโค้ดจริง — พิมพ์ลงกระดาษได้ด้วย

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

BACK Backend ด้วย Go พื้นฐานภาษา · testing · concurrency · database · REST API ด้วย Gin · config · authentication ด้วย Keycloak — แบ่งตามวันที่เรียน (Day 1–9) 55 บท · 9 cheat sheet FRONT Frontend — HTML, CSS, TypeScript, Next.js โครงหน้าเว็บด้วย HTML · จัดหน้าตาด้วย CSS และ Flexbox · TypeScript แบบ functional · ประกอบเป็นเว็บจริงด้วย Next.js · และทำงานร่วมกับ AI แบบ agentic workflow — สไลด์ฝั่งนี้ไม่ได้แบ่งเป็นวัน จึงแบ่งตามชื่อสไลด์ 34 บท · 5 cheat sheet RAILS Ruby on Rails เริ่มจากศูนย์สำหรับมือใหม่ · เทียบทุกเรื่องกับร้านอาหารและกับ Go · Ruby ที่ต้องรู้ · โครงสร้างโปรเจกต์ · routing · controller · view · Active Record · migration · validation · association · view · Tailwind · Hotwire · rich text · ไฟล์ · background job — คอร์สแยกอีกชุดที่อาจารย์กำกับวันมา จึงแบ่งตามวัน (Day 1–4) 56 บท · 3 cheat sheet

BACK Backend ด้วย Go

สไลด์ฝั่งนี้อาจารย์กำกับวันมาให้ครบ จึงแบ่งตามวันตรง ๆ — Day 1 ถึง Day 9

Day 1

เริ่มต้น & พื้นฐานภาษา

ทำไมต้อง Go · ติดตั้ง (mise, VS Code) · Go modules · โครงสร้างโปรแกรม · go run/build/fmt/vet · ตัวแปรและ type

📄 Cheat sheet Day 1
Day 2

Control Flow & Clean Code

zero values · constant & iota · if/switch/for · variable shadowing · function design · error pattern

📄 Cheat sheet Day 2
Day 3

Data Structure, Pointer & Method

function ขั้นสูง · array/slice/map/struct · pointer & memory · defer · method & receiver

📄 Cheat sheet Day 3
Day 4

Interface, Error Architecture & JSON

underlying type & alias · interface + duck typing · type assertion/switch · standard interfaces · error chain & custom error · JSON + struct tags

📄 Cheat sheet Day 4
Day 5

Testing, Testify & TDD

ปิรามิดเทส · กฎ _test.go · go test + coverage · testing.T ครบทุก method · table-driven test · testify (assert/mock/suite) · TDD + AI workflow

📄 Cheat sheet Day 5
Day 6

Generics, Concurrency & Database

วันที่หนักที่สุดของคอร์ส — type parameter & constraint · goroutine · channel · select · data race & mutex · context · worker pool · project layout · GORM
เก้าบท แบ่งเป็นสามช่วง: Generics (19–20) → Concurrency (21–26) → โปรเจกต์จริง (27)

📄 Cheat sheet Day 6
Day 7

เทสของจริง & ฐานข้อมูลระดับ production

Mockery · integration test ด้วย Testcontainers · migration ด้วย Goose · cache ด้วย Redis
หัวข้อ Database / GORM CRUD ของวันนี้ซ้ำกับบทเรียน 27 — ข้ามไปแล้ว ไม่ต้องเรียนซ้ำ

📄 Cheat sheet Day 7
Day 8

REST API & Gin — วันแรกที่มีคนอื่นยิงเข้ามา

ออกแบบ REST · net/http · Gin · binding & middleware · httptest · Swagger · workshop ออกแบบ API · workshop ทบทวน · environment variables
หัวข้อ Cache / Redis ของวันนี้ซ้ำกับบทเรียน 32 — ข้ามไปแล้ว เหลือแค่สองคำสั่งใหม่ (SET … EX และ GETDEL) ที่ยกไปไว้ใน cheat sheet
บทเรียน 43–44 มาจากสไลด์ฉบับ (Post) ที่อาจารย์เพิ่มให้หลังเรียน (91 หน้า เทียบกับฉบับ Pre 74 หน้า) — ดูว่าเทียบยังไง

  • 33 · REST: ทุกอย่างคือ resource 14 นาที บทแรกที่ไม่มีคอมไพเลอร์คอยด่า เพราะคนเรียกอยู่คนละเครื่อง · URI vs path vs path parameter · stateless แปลว่าอะไรจริง ๆ · PUT กับ PATCH ที่ทำให้ข้อมูลหายโดยไม่มี error
  • 34 · Status code: ตัวเลขที่บอกว่าใครผิด 13 นาที 4xx = client ต้องแก้ · 5xx = เราต้องแก้ — เส้นแบ่งเดียวที่ต้องจำ · 401 vs 403 · 400 vs 409 · ทำไม ตอบ 200 พร้อม {"error":…} ถึงแพงที่สุด
  • 35 · query · body · header: ส่งเข้าไปทางไหน 13 นาที หนึ่ง request มีสี่ช่อง ส่งผิดช่องแล้ว server อ่านไม่เจอเงียบ ๆ · คำถามสามข้อที่ตัดสินให้จบ · ยิง token ทาง query แล้วเปิด log ให้ดูว่ามันไปโผล่ตรงไหน
  • 36 · กฎตั้งชื่อ 7 ข้อ · versioning · idempotency 16 นาที URL คือ signature ที่ compiler ไม่ช่วยเช็ค · จับผิดสไลด์หน้า 35 ที่ติด ✅/❌ กลับด้าน · DELETE ซ้ำครั้งที่สองควรตอบ 404 หรือ 204 · เพิ่ม field ใหม่นับเป็น breaking change ไหม
  • 37 · net/http: เซิร์ฟเวอร์ตัวแรก ไม่ใช้ framework 18 นาที ผ่านมา 36 บทยังไม่เคยเปิดพอร์ตสักครั้ง — บทนี้เปิดด้วย stdlib ล้วน · ServeMux + method pattern (Go 1.22+) · r.PathValue · ResponseWriter เขียนได้ครั้งเดียว — และ log บรรทัดเดียวที่บอกว่าคุณพลาดตรงไหน
  • 38 · Gin: router ที่อ่านออก และ Context ที่ทำงานแทน 16 นาที รีแฟกเตอร์โค้ดบท 37 เป็น Gin ทีละบรรทัด แล้ววาง response จริงเทียบกัน · ช่องที่ 405 กลายเป็น 404 เงียบ ๆ · และความจริงเรื่อง “/users/:id ชนกับ /users/me แล้ว Gin panic” ที่หลายบทความเขียนผิด
  • 39 · binding · validation · middleware · CORS 18 นาที binding:"required" ที่ปฏิเสธ 0 ที่ผู้ใช้ตั้งใจส่ง · ShouldBindJSON vs BindJSON กับ warning ที่ตามมา · c.Next() ที่รันสองรอบ · cors.Default() ไม่อนุญาต Authorization
  • 40 · httptest: ทดสอบ handler โดยไม่ต้องเปิดเซิร์ฟเวอร์ 16 นาที เลิก go run . แล้วกด F5 — ServeHTTP เป็นแค่ฟังก์ชันธรรมดา · NewRecorder + NewRequest · assert.JSONEq vs assert.Equal · ไม่มีในสไลด์ แต่ค้าง backlog มาตั้งแต่ Day 5
  • 41 · Swagger: เอกสารที่ไม่มีวันเก่ากว่าโค้ด 18 นาที annotation → swag init → docs/ → Swagger UI · ทำให้มันพังให้ดูก่อน แล้วค่อยแก้ — เวอร์ชัน CLI ไม่ตรงกับ library · ลืม blank import · ลืม *any
  • 42 · Wongnok: ออกแบบ API spec จากโจทย์จริง 20 นาที ไม่มีของใหม่สักชิ้น มีแค่โจทย์ธุรกิจสี่บรรทัด ให้แปลงเป็น spec เอง · แล้ววิจารณ์ spec ของผู้สอนด้วยกฎ 7 ข้อ — รวมถึงสี่บรรทัดที่ขัดกฎอย่างมีเหตุผล
  • 43 · API Detective — จับคู่ · จับผิด · จับ annotation 15 นาที workshop ทบทวนจากสไลด์ที่อาจารย์เพิ่มมาหลังเรียน · จับคู่ REST · รีวิว API 4 เส้นที่ออกแบบแย่ให้เป็น RESTful — พร้อมlog จริงที่โชว์ password หลุดใน query string
  • 44 · Configuration & Environment Variables 15 นาที ทำไม password ใน DSN ถึงห้ามอยู่ในโค้ด · os.Getenv ต่างจาก os.LookupEnv ยังไง · และกับดักที่ทุกอย่างเป็น string — รวมเคสที่แปลงเลขพลาดแล้วได้ค่าที่ดูเหมือนถูก
📄 Cheat sheet Day 8
Day 9

Config ที่เชื่อถือได้ & Auth ของจริง

caarlos0/env · godotenv · validate ตอน start · internal/config · JWT · OAuth 2.0 · Keycloak · flow auth ทั้งเส้น · การทำงานกับ AI agent
หน้า 3–8 ของสไลด์วันนี้ซ้ำกับ Day 8 ฉบับ (Post) หน้า 85–90 ทุกประการ — บทเรียน 44 ครอบคลุมไปแล้ว จึงเริ่มของใหม่ที่หน้า 9

📄 Cheat sheet Day 9
Day 10+

ยังไม่มี — รอสไลด์

ส่งไฟล์สไลด์วันถัดไปมาได้เลย เดี๋ยวเพิ่มเป็นโฟลเดอร์ day-10/ พร้อมบทเรียนต่อจากเลข 55 และ cheat sheet ของวันนั้น แล้วอัปเดตหน้านี้ให้อัตโนมัติ

หมายเหตุ: ไฟล์ Day 5–7 เป็นฉบับ “(Pre)” — ส่วน Day 8 และ Day 9 ได้ฉบับ “(Post)” มาแล้วทั้งคู่
· Day 8 Post เพิ่มมา 17 หน้า → บทเรียน 43 และ 44
· Day 9 Post เพิ่มหน้าโจทย์สอบมาอีกหนึ่งหน้าเต็ม → บทเรียน 55 · และแก้ของเดิมอีก 2 จุดที่เปลี่ยนพฤติกรรมจริง — ลบ KC_HOSTNAME ออกจาก compose (บท 51) และเพิ่มคอลัมน์ image_url (บท 53)
ถ้าได้ฉบับ Post ของวันอื่นมาอีก ส่งมาได้ จะเทียบให้เหมือนกัน

ตอนนี้เรียนครบพื้นฐานภาษา · testing · concurrency · ชั้น database · สร้าง REST API ด้วย Gin พร้อมเอกสาร Swagger · จัดการ config อย่างปลอดภัย · และทำ authentication ด้วย Keycloak ได้แล้ว ตาม Course roadmap ในสไลด์ Day 1 เหลือเรื่องเดียวคือ deploy

สไลด์ฝั่ง Frontend มาแล้ว 5 ไฟล์ (Basic HTML/CSS · Functional Programming with TypeScript · Built Foundation with Next.js · Build First Application with Next.js · Agentic Workflow) ทำเป็น บทเรียน 56–89 เรียบร้อย — สไลด์ชุดนั้นไม่ได้กำกับวันมา จึงแยกไปเป็นฝั่ง FRONT ที่จัดกลุ่มตามชื่อสไลด์ ไม่ได้เอามาต่อเป็น Day 10 เพราะถ้าสไลด์ Go วันที่ 10 มาจริงทีหลัง เลขจะชนกัน

คอร์ส Ruby on Rails มาแล้ว 2 วัน — Day 1–2 ทำเป็น บทเรียน 90–145 อยู่ฝั่ง RAILS แยกจาก Go เพราะเป็นอีกคอร์สที่นับวันของตัวเอง (Day 1–4)

เรื่องที่ยังไม่มีในสไลด์เลยแต่จะต้องใช้แน่ ๆ: pagination ที่ทำถูกวิธี · rate limiting · graceful shutdown · structured logging — อยากได้ล่วงหน้าบอกได้

ค้างจาก Day 9: Day 9 สอนว่า token มาจากไหน แต่ยังไม่มีบทที่เขียน middleware ตรวจ JWT ใน Gin — อยากได้บอกได้
(โจทย์ Mid Exam ที่เคยค้างอยู่ ทำเป็น บทเรียน 55 แล้ว)

Day 7 มีหัวข้อ Database/GORM ที่ซ้ำกับบทเรียน 27 · Day 8 มีหัวข้อ Cache/Redis ที่ซ้ำกับบทเรียน 32 · Day 9 หน้า 3–8 ซ้ำกับบทเรียน 44 — ข้ามให้ทั้งสามครั้ง ถ้าวันถัดไปซ้ำอีกก็จะข้ามให้เหมือนกัน

FRONT Frontend — HTML, CSS, TypeScript, Next.js

สไลด์ฝั่งนี้ไม่ได้กำกับวันมาให้ จึงแบ่งกลุ่มตามชื่อไฟล์สไลด์แทน · เลขบทยังต่อเนื่องจากฝั่ง Backend (56 → 89) เพื่อให้อ้างถึงบทได้ด้วยเลขเดียวทั้งเว็บ

HTML & CSS

โครงหน้าเว็บ และการจัดหน้าตา

จากสไลด์ [PEA] Basic HTML_CSS · เว็บทำงานยังไง · แท็กที่ใช้จริง · ฟอร์ม · CSS selector · box model · Flexbox · state ของ element

📄 Cheat sheet HTML & CSS
TypeScript

Functional Programming with TypeScript

จากสไลด์ [PEA] Functional_Programming_with_TypeScript · type พื้นฐาน · interface กับ type · ใส่ type ให้ฟังก์ชัน · map / filter / reduce · โจทย์ 4 ข้อ

📄 Cheat sheet TypeScript
Next.js

ประกอบเป็นเว็บจริง

จากสไลด์ [PEA] Built_Foundation_with_NextJs · App Router · component และ props · Tailwind CSS · hooks ครบชุด · custom hooks · โจทย์ปิดท้าย

  • 69 · Next.js คืออะไร และทำไมไม่ใช่ React เปล่า ๆ 15 นาที React ทำอะไร Next.js ทำอะไรเพิ่ม · "ทุกอย่างคือ component" แปลว่าอะไร
  • 70 · ติดตั้ง และอ่านโครงโฟลเดอร์ให้ออก 15 นาที ชื่อโฟลเดอร์คือ URL — ต่างจาก Gin ที่เขียน route เอง · layout.tsx vs page.tsx
  • 71 · component แรก และ props 15 นาที children · spread props ที่ทำให้ปุ่มรับ onClick ได้ฟรี · barrel index.ts
  • 72 · Tailwind CSS 15 นาที utility class คือ CSS ที่เขียนไว้ให้แล้ว ไม่ใช่ภาษาใหม่ · v4 ต่างจาก v3 ที่สไลด์แสดงตรงไหน
  • 73 · useState 18 นาที บทแรกที่ต้องใส่ 'use client' — ไม่ใส่แล้ว build พังยังไง · setCount(count+1) สามครั้งได้ +1 ไม่ใช่ +3
  • 74 · useEffect 18 นาที ลืม dependency array แล้ววนไม่รู้จบ · ทำไม [] ถึงรันสองครั้งใน dev · cleanup ที่เป็นญาติกับ defer
  • 75 · useMemo และ useCallback 18 นาที ต่างกันแค่ "จำค่า" กับ "จำฟังก์ชัน" · และเมื่อไหร่ที่ใส่แล้วช้าลง
  • 76 · useContext 18 นาที prop drilling คืออะไร · ลืมครอบ Provider แล้วพังตอนรัน · และทำไมมันไม่ได้แทน state management ทุกกรณี
  • 77 · custom hooks และกฎ 4 ข้อ 15 นาที เรียก hook เดียวกันสองที่ ได้ state แยกกัน ไม่ได้แชร์ · ทำไมห้ามเรียก hook ใน if
  • 78 · โจทย์ Customer Search 25 นาที ประกอบทุกอย่างในกลุ่มเป็นของจริง · พร้อมจุดที่โจทย์ไม่ได้บอกแต่ต้องตัดสินใจเอง
📄 Cheat sheet Next.js
Next.js App

สร้างแอปแรกให้เป็นระบบ

จากสไลด์ [PEA] Build First Application with Nextjs · โครงโฟลเดอร์ · shadcn/ui · design tokens · variants ด้วย CVA · layout และ navbar · หน้า All Recipes ของแอป Wongnok

📄 Cheat sheet Next.js App
Agentic

ทำงานร่วมกับ AI ให้เป็นขั้นตอน

จากสไลด์ [PEA] Agentic_Workflow · Claude Code · workflow 5 ขั้น · หลักเขียน prompt 6 ข้อ

📄 Cheat sheet Agentic Workflow

RAILS Ruby on Rails

คอร์สแยกที่แบ่งตามวันของตัวเอง · เขียนให้มือใหม่ Rails ที่ไม่เคยแตะ Ruby มาก่อน เทียบทุกเรื่องกับร้านอาหาร และกับ Go ที่เรียนมาแล้ว · เลขบทต่อจากฝั่ง Frontend (90 → 145) · ตัวอย่างรันจริงบน Ruby 4.0.9 + Rails 8.1.4

Day 1

Ruby ที่ต้องรู้ แล้วเปิดร้าน Rails ร้านแรก

ตามหัวข้อของสไลด์ Ruby on Rails - Day 1 · บท 90–97 ปู Ruby ทีละเรื่อง · บท 98–105 สร้างแอป Rails จริง: rails new · routing · controller · view · debug · Lab 1

  • 90 · Rails คืออะไร — ภาพรวมแบบร้านอาหาร 20 นาที เปิดหน้าเว็บหนึ่งครั้งเกิดอะไรขึ้น · Ruby กับ Rails ต่างกันยังไง · MVC เดินตามใบสั่งทั้งเส้น · ทำไม Rails เหมือนร้านแฟรนไชส์
  • 91 · ติดตั้ง Ruby · ตัวแปร · object · string 20 นาที เช็ครุ่น Ruby ด้วย mise · ลองพิมพ์ใน irb · ตัวแปรไม่ต้องประกาศชนิด · ทุกค่ามีคำสั่งติดตัว · แทรกค่าใน string
  • 92 · Array · Hash · Symbol และ map/select 20 นาที เก็บของหลายชิ้นเป็นแถว · Hash = แฟ้มที่มีป้ายทุกช่อง · :title คือป้ายชื่อ · สายพาน map/select แทน for loop
  • 93 · Method และ Block 20 นาที เขียนคำสั่งของตัวเอง · บรรทัดสุดท้ายคือค่าที่ส่งกลับ · keyword argument · ? กับ ! ท้ายชื่อ · ส่งโค้ดเป็นก้อนด้วย block
  • 94 · nil และอะไรนับว่า "จริง" 20 นาที มีแค่ nil กับ false ที่ไม่ผ่าน if (0 ผ่าน!) · &. · ||= · blank? / present? ของ Rails
  • 95 · Class และ Module — Post มาจากไหน 25 นาที class = แม่พิมพ์ของข้อมูล เทียบ struct ของ Go ทีละบรรทัด · สืบทอดด้วย < · Post ใน Rails ได้คอลัมน์มาจากไหน · module ที่หลาย class ยืมใช้
  • 96 · เมื่อโค้ดพัง — rescue และ duck typing 20 นาที Go ส่ง error เป็นค่า · Ruby โยน error ขึ้นไปจนกว่าจะมีคนรับ · อ่านข้อความ error ให้ออก · rescue / raise / ensure · "ทำได้ไหม" สำคัญกว่า "เป็นใคร"
  • 97 · อ่านโค้ด Rails ไม่งง — 5 ไวยากรณ์ 25 นาที วงเล็บละได้ · hash ตัวท้ายละปีกกาได้ · block กับ |f| · symbol อยู่ทุกที่ · method ที่ Rails สร้างให้ตอนรัน — แล้วอ่านโค้ด Rails ออก
  • 98 · rails new — เดินดูโปรเจกต์ทีละห้อง 30 นาที Go เริ่มจากห้องเปล่า Rails ได้ร้านมาทั้งร้าน · อ่านคำสั่ง rails new ทีละท่อน · แต่ละโฟลเดอร์คือห้องไหน · Gemfile · เปิดร้านครั้งแรก
  • 99 · กฎตั้งชื่อ — Post กับ posts 20 นาที posts คืออะไร · ชื่อเดียวแตกไปอยู่ได้ 6 ที่ · ไม่ต้อง import เพราะ Rails หาไฟล์จากชื่อ · ตั้งชื่อผิดตัวเดียวเจออะไร · สร้าง model เอง
  • 100 · เปิดร้าน — server · request · MVC 20 นาที ใบสั่งหนึ่งใบเดินผ่านใครบ้าง · ทำหน้า "บทความทั้งหมด" ด้วย 3 ไฟล์ · อ่าน log · middleware · เลข status · Gin ทำในฟังก์ชันเดียว Rails แบ่งแผนก
  • 101 · Routing — URL ไหนไปหาใคร 20 นาที routes = พนักงานต้อนรับ · เทียบ Gin ทีละชิ้น · :id · 404 สองแบบ · _path · resources :posts ได้ 8 เส้น · ลำดับบรรทัดสำคัญ
  • 102 · Controller — params · render · redirect 20 นาที controller = หัวหน้าเชฟของแผนก · ทำหน้าใหม่ด้วย 3 ไฟล์ · params = รายละเอียดในใบสั่ง · ยกจานให้เลย (render) หรือส่งไปเคาน์เตอร์อื่น (redirect)
  • 103 · View — ERB · layout · helper 20 นาที view = การจัดจาน · ERB คือ HTML ที่มีช่องให้ Ruby เติม · วนรายการด้วย each · layout · link_to · กัน XSS และ CSRF ให้ฟรี
  • 104 · debugger และ bin/rails console 20 นาที แอบดูค่าด้วย puts · debugger = กดหยุดเวลาในครัว · เอาออกก่อน push · console = ครัวทดลองหลังร้าน · --sandbox ลองแล้วทิ้ง
  • 105 · Lab 1 — สร้างแอปเองตั้งแต่ศูนย์ 65 นาที rails new → เปิดร้าน → เมนู /hello ทำไปพร้อมกัน → /about ทำเอง · ทำพังโดยตั้งใจแล้วอ่าน error · checklist และ quiz ท้ายวัน
📄 Cheat sheet Rails Day 1
Day 2

Active Record — ข้อมูลในตู้ กฎการเก็บ และการผูกกัน

ตามหัวข้อของสไลด์ Ruby on Rails - Day 2 · ทุกบทใช้ข้อมูลตัวอย่างชุดเดียวกัน (สร้างในบท 107) · บท 106–112 เก็บข้อมูล: CRUD · migration · validation · callbacks · บท 113–119 ดึงและผูกข้อมูล: query · N+1 · association · REST · scaffold · Lab 2

📄 Cheat sheet Rails Day 2
Day 3

View · CSS · Hotwire — หน้าเว็บที่สวยและขยับได้ โดยไม่ต้องมี frontend แยก

ตามหัวข้อของสไลด์ Ruby on Rails - Day 3 · เริ่มจากโปรเจกต์กลางของคอร์ส (บท 120) ไม่ใช่แอปของ Day 2 · บท 120–126 view: ERB · partial · helper · XSS · N+1 · Lab 1 · บท 127–129 CSS: asset pipeline · Tailwind + daisyUI · Lab 2 · บท 130–135 Hotwire: Turbo Drive · Frames · Streams · broadcast · Stimulus · Lab 3

📄 Cheat sheet Rails Day 3
Day 4.1

Rich text · ไฟล์ · Background jobs — เนื้อหาที่เป็นของจริง และงานที่ผู้ใช้ไม่ต้องรอ

ตามหัวข้อของสไลด์ Rails Day 4 · Part 1 · บท 136–141 rich text: allowlist · Action Text · MinIO · Active Storage · signed URL · ตรวจไฟล์ · Lab 4 · บท 142–145 background job: idempotency · Solid Queue · retry · งานตามเวลา · อีเมล · Lab 5 · (บล็อก cache กับ Day 4 Part 2 ยังไม่ได้ทำเป็นบทเรียน · ยังไม่มี cheat sheet)

เอกสารประกอบ

สไลด์ต้นฉบับ

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

รู้ไว้: สไลด์มีจุดผิด

ตอนทำสรุปได้รันโค้ดทุกตัวอย่างเทียบกับสไลด์ แล้วเจอจุดที่สไลด์ผิด 21 จุด (บันทึกไว้ใน learning record 0002) บทเรียนทุกบทจึงยึดผลรันจริง + เอกสารทางการของ Go เป็นหลัก ไม่ใช่ยึดสไลด์

💬 เจอจุดที่ผิดอีก บอกได้ — ทั้งเว็บนี้เกิดจากการจับผิดสไลด์อยู่แล้ว ถ้ารันแล้วได้ผลไม่ตรงกับที่เขียนไว้ เปิด issue ใน GitHub repo ได้เลย บอกมาว่าบทไหน หัวข้ออะไร และเครื่องคุณใช้ Go เวอร์ชันไหน