สรุปงาน .NET Thailand Developer Day 2026 มีนา มีอีเวนท์

สำหรับวันนี้ ผมมาเป็น Speaker ด้วยครับ และมาฟังงาน dotnet conf สำหรับเดือนเรียกว่าเป็น มีนา มีอีเวนท์ เดือนที่มีงาน Tech Event จัดกันติดๆกันเยอะมาก พุ่งนี้เป็นงานของ Google ด้วย และเดือนนีงาน dotnet 2 งานครับ

Exploring the .NET Open Source Application

Speaker Chatri Ngambenchawong

สำหรับ Talk ที่ผมมาพูดในวันนี้ ผมได้ Idea มาจากงาน FOSSASIA 2026 Community Day "Recommend Open Source apps to a new user." แล้วที่นี้ผมกลับมามอง dotnet บ้างว่ามีอะไรที่ Open Source บ้างนะ ปกติเรา พวก Lib ต่าง RestSharp / Serilog / NUnit (Testing) / OpenTelemetry / Insight.Database / Dapper / FluentValidation  / Hangfire (Background Job) / Polly (Resilience and Transient-Fault-Handling)

ที่นี้แล้วกลับมามองตัว App บ้างว่าฝั่ง dotnet มี Application ตัวไหนที่พร้อมใช้งาน โดยผมได้ Recap มาเป็น 5 กลุ่มได้แก่ Producivity / Multimedia / Creative & Design / Developer / Server & Infrastructure ครับ

💡Productivity & Desktop Utilities

App ที่ช่วยให้การทำงานของเราสะดวกสบายขึ้น

  • ShareX: จับภาพหน้าจอ / Capture VDO หรือ GIF นอกจากนี้ Workflow ในตัว เช่น Capture แล้วใส่ลายน้ำ หรือ Update FTP Server พวก Feature เจ๋งๆ อย่าง OCR หรือ ต่อพวก LLM แต่ต้่องมี Key
  • Files: ตัว Explorer ตัวใหม่ที่เชื่อม Cloud / Git หรือ Tag Lobel Folder File ก็ได้
  • PowerToys: รวมชุด Tools ที่เพิ่มความสามารถ Windows ทั้ง 20+ อัน อาที เช่น File Lock Smith (หาว่าอะไร Lock File) / Power Rename / Color picker เป็นต้น Tools อันนี้มีมานานแล้วด้วย
  • QuickLook: macOS file preview style
  • EarTrumpet: modern volume controil
  • ScreenToGif: Capture GIF
  • Fluent Search: ตัวค้นหาข้อมูลที่ง่าย และไวกว่าของ Windows

📼Media & Entertainment

  • Jellyfin: Netflix At Home - จัดการพวกไฟล์ภาพ vdo หรือ ebook ก็ได้นะ แต่จะเก่ง vdo มากสุด ถ้าเป็นหนังมันจะเอาข้อมูลจาก Open Data มา Match ให้ด้วยนะ
  • Kavita: EBook Management จัดการ Magna / Epub / PDF รวมถึงมีพวก Dashboard จัดการ Stat ตอนอ่านด้วย
  • SteamTools: Dashboard กลางจัดการบัญชี Steam, Epic Games และ Uplay นอกจากนี้ยังมีความสามารถจัดการ Login รวมถึงมี Tools ปรับ Network Performance ด้วยที่เจ๋งเลยเค้าใช้ YARP ทำ อ๋อ App นี้มาจากพี่จีน
  • osu!: Rhythm game
  • Playnite: Video game library manage
  • Ryujinx: Nintendo Switch Emulator

📌Creative & Design

  • Pinta: โปรแกรมแก้ไข วาดภาพปรับมาจาก Paint.NET ที่เป็น Open Source รวมถึง Cross Platform ที่น่าสนใจ C# + GTK (Lib UI ของ Linux)
  • Markdown Monster: เครื่องมือเขียน Markdown / Syntax highlighting / Preview นอกจากนี้ WordPress หรือ Medium ได้ด้วย
  • HandBrake (WinApp): เฉพาะตัว App บน Windows ที่เป็น C# ที่เหลือพวก C++ กับ FFmpeg

🚀Developer Tools

  • DevToys: "Swiss Army knife" for developers, รวมเครื่องมือขนาดเล็กที่จำเป็นเอาไว้ในที่เดียว เช่น ตัวจัดรูปแบบ JSON, เครื่องมือเข้ารหัส/ถอดรหัส Base64, Text diff checkers) ตัวถอดรหัส JWT นอกจากถ้าเรามีอะไรที่อยากเสริม เช่น Tools ใช้ภาพในองค์กร สามารถทำ Extends เข้ามาติดตั้งเพิ่มได้
  • CSharpRepl: Command-line REPL (Read-Eval-Print Loop) เพื่อทำ Prototyping หรือทดสอบ API อย่างรวดเร็ว
  • dotnet-please: cli tools for manage nuget / project / clear unused file
  • mockaco: Mocking HTTP API จาก JSON นอกจากนี้ ถ้าเรามี Open API Spec สามารถให้ Tools Gen API Mock ให้ทาง Frontend ทำงานได้ลื่นไหล
  • Cake (C# Make): DSL (Domain Specific Language) เขียน Step การทำงานด้วย C# ทำให้ Step On Local / Cl ทำงานเหมือนกัน ไม่เกิดปัญหาแบบการเขียน Shell
  • Papercut-SMTP: Mail Server จำลอง + Viewer
  • ILSpy: Decompiler / Browser สำหรับ .NET Assembly
  • GitExtensions & GitVersion: GitExtensions เป็น GUI Windows ส่วน GitVersion ช่วย Semantic Version ให้อัตโนมัติตาม Git Commit
  • ReportGenerator: เครื่องมือสร้าง Code Coverage Report จากพวก coverlet, OpenCover, JaCoCo เป็นต้น แล้วแปลงเป็น HTML เห็นภาพรวมชัดเจน
  • dotnet-outdated: .NET Core Global Tool สำหรับแสดงผล NuGet ที่ล้าหลัง

🗄️Server & Infrastructure

  • Bitwarden (Server): เครื่องมือจัดการ Secret พวกรหัสผ่าน key ต่างๆ โดย Backend เขียนด้วย C# หลังจากผมใช้จริงๆมาเกือบปี Feature มันเยอะ และกิน RAM ถ้าลงในเครื่องเล็ก NAS ไปลอง ValutWarden
  • nopCommerce: Open Source E-Comerce
  • simplcommerce: Open Source E-Comerce - Modular Monolith
  • Squidex: Headless Content Management System (CMS) ที่มี API + Business Rule + Editor + Admin Dashboard ทำให้เราไป Focus กับการทำ UI
  • Umbraco CMS / Orchard Core / Cofoundry: CMS บน .NET แบบโอเพนซอร์สที่ได้รับการยอมรับมากที่สุด โดย Umbraco โดดเด่นที่ง่าย ส่วน Orchard Core เป็นเฟรมเวิร์กแอปพลิเคชันแบบ Modular และรองรับ Multi-tenant แต่ยังเริ่มด้วย Code อย฿ู่
  • BTCPay Server: Self-hosted Crypto Currency Payment
  • Jackett: Proxy Server มาให้ APP เช่น Sonarr หรือ Radarr) เป็น HTTP Query ไปยัง Tracker Site ต่างๆ
  • Notesnook Sync Server: เซิร์ฟเวอร์ซิงค์ข้อมูล Notesnook ซึ่งเป็นแอปจดโน้ตแบบที่มีการเข้ารหัสแบบ End-to-End

Why Should We Adopt Open Source?

📌 User & Organization View:

  • Cost - คุมค่าใช้จ่ายได้ และเอามาลองได้ฟรี
  • UX / Increase Productivity
  • Ready to Use - ไม่ต้องเสียเวลามาทำซ้ำ
  • Privacy & Control - เอา Code มา Audit ได้ + Install DC ตัวเอิง

📌 Developer View: ถ้าเข้าไปช่วยแก้ สิ่งที่ได้จะได้

  • Improve Your Logic - จากตัวอย่าง Code ที่เราเข้าไปดูเห็น Defensive / High Perf
  • Patterns - Design Patterh / Architecture ว่าทำไมทำใน Use Case นี้
  • Enhance Your Skillset

📌 How to Contribute

  • Act as a Tester
  • Update Documentation
  • Support Funding
  • รวมเข้าไป Code เองไม่ว่าจะเป็นการแปลภาษา แก้ Bug หรือ ปรับ CI/CD

Resource: Slide

Between Unity and Al in 2026

Speaker Gittitat Ekchantawut

📌 AI is not a feature but future จะเป็นยังไงลองมาตามอ่านกันครับ อย่างแรกเลยตัว Unit AI Model ตอนนี้มีความสามารถมากขึ้นจาก

  • Build > Assistant - ตอนนี้เอามาช่วย Gen Asset ที่ใช้ เช่น 3D Model ที่กำลังเดิน จากเดิมที่อาจจะต้องทำถึง 2 Week AI มาช่วยลดเวลาได้
  • Create > Generators- จากเดิมที่ต้องไป App ข้างนอก 3D ต่างๆ ตอนนี้สามารถ Prompt ได้
  • Run > Inference Engine จาก .net conf ปีก่อนตัว Fruit nina อันนี้ เอา AI มันยัดลง App ได้เลย มันเล็ก และทรงพลังพอ และไม่ต้องใช้เครื่องมือพิเศษ อย่าง motion capture ...

AI เข้ามาเป็น Teammate ในอนาคต ช่วยเราหลายเรื่อง แบบ Dev ใช้กัน

📌 ตอนนี้ถ้าใช้ AI มีท่าไหนบ้าง

  • Cloud > Build / Create ตอนสร้างของใน Game
  • Device > Inference Engine - เอา AI ไปรันบน Web / Mobile โดยใช้ ONNX Runtime
    - มันไม่จำเป็นต้อง Run พวก Gen AI Model นะ
    - อาจจะมี Model เฉพาะทางที่ใช้แนวคิด Machine Learning ด้วย พวก Yolo (Object Detection)

📌 Unity Editor with AI มีส่วน Prompt แบบพวก VSCode เราสามารถสั่งให้มันเติม Code หรือ สร้าง Asset ได้

📌 Inference Engine (ONNX Runtime) เราเอา Model มาจากตัว HuggingFace ได้เลย แต่ต้องมีปัจจัยพิจารณา 3 มุม เพื่อไม่ให้เกิดปัญหา Bottleneck และการกิน Resource ให้ User Experience ในการเล่นดี ผมเข้าใจว่าพวก FPS ไม่ตกไปเยอะมาก มีโดยเลือกงานให้เหมาะกับของ

  • GPU - Visual Effect แสงเงา
  • CPU - Burst คำนวณ Math ของ Game
  • Mobile - เอา NPU เข้ามาช่วยเร่งแล้ว

📌 What Change in Unity6 - Move form Plugnin to Engine Layer

  • Before (Muse / Sentis) - ที่เป็นของ Experiment / เน้น Cloud / ต้องลงแยก
  • New (Unity 6.x)
    - Integrate with Engine (ทำให้ AI มี Context มาขึ้นแบบ Cursor, VS Code)
    - Local AI
    - Multi-Model Support

นอกจากการเอา AI มาช่วยให้ Game มัน Interactive กับสภาพแวดล้อมมากขึ้น ยังมี Idea AI Retopology เอา AI มาช่วยลดภาระ GPU ในการสร้าง Polygon แล้วใช้ Math มาช่วยคิดทำ Polygon ละเอียดขึ้น แต่ใช้ Resource น้อยลง ทำให้ FPS ดีขึ้น Game ลื่นขึ้น

📌 Real Use Case

  • XR Tracking Refinement
  • Digital Twin prediction - เอา Unity มา model การทำงานของเครื่องจักร เช่น กังหันลม ชนกับจริงเลย เพื่อให้เห็นภาพภายในมากขึ้น และ
  • Simulation / RL Agents
  • Smart Device

📌 การนำ AI มาใช้ใน App ของเราอย่าง Game มีข้อควรระวัง ยัดที่อย่างลงไม่ได้

  • Performance - Resource Stall แบ่งกัน
    - CPU / GPU
    - GPU งาน 3D + งาน AI ทำอันไหนก่อน - อาจจะต้องมาแบ่งการทำงาน / ใช้ Math / AI Retopology / Render ตามกล้องเห็น
  • No Training Data At run time
  • การเอา Game มาเชื่อมกับ LLM อันนี้ต้องระวังเรื่อง Cost นะ แม้ว่าทำให้ NPC ตอบลื่นไหล มีบริบท อารมณ์ หรือ การตัดสินแต่ละ Turn สิ่งที่ตามมาเรื่อง Cost ต้องมีเทียบกับ Business Model

📌 Unity ตอนนี้เป็น Platform ที่น่าลงทุน เพราะ Cross-Platform / C# Base เอาพวก NuGet ML.NET มาใช่ร่วมได้ในบางเคส / มีของ Build หลายอย่าง Realtime / 3D / XR รวมถึงการรีดพลังของ WebGPU ได้เต็มที่
** สำหรับ Feature AI ตอนนี้ยังเป็น Beta เปิดให้ใช้จริงกลางปี ราคาประมาณ 20 usd / อาจจะมีพวก Agent.md in unity

- ช่วง Q&A

📌 Balance AI + Resource เพื่อไม่ให้กระตุก
Ans

  • ลด load GPU - ตัดส่วนที่ไม่จำเป็นการการแสดงผลออก
  • Inference Loop - ไม่ใช่ AI ถือ Resource ยาวๆ อาจจะเข้ามาทุก 10 ms อันนี้ต้องไปปรับค่าให้เหมาะสม
  • ใช้ Math เช่น Lerp (Linear Interpolation) หรือ AI Retopology

📌 Unity เอามาใช้กับ Business ได้ไหม
Ans ใช้ได้ เช่น การทำ Digital Factory ถ้าเมื่อก่อนช้เงินทุน เวลา และทรัพยากรสูง การมี AI มาช่วยตรงนี้ได้ไวขึ้น

Agents Unleashed: Understanding & Building Al Agents in .NET

Speaker Md Rafee

สำหรับ Session นี้จะมาเล่าครับ ว่าตัว Agent ส่วนประกอบอะไร แล้วใช้ท่าไหนได้ครับ

-AI Agent (Building Blocks)

📌 การสร้าง Agent มี 2 ท่า

  • Low Code - n8n zapier make
  • Code First - LangChain / LangGraph .. CrewAI / Microsoft Agent Framework (GA Mar26)

📌 Agent - การนำ LLM มาช่วยเราทำงาน โดยมีส่วนประกอบหลักๆ

[Input] ------------------> [Agent] ------------------> Output (Agent/Message Result)
-System Event               - LLM + Instuction 
-User or Agent Message      - Tools (Action / Retrival)
                            - Memory
  • Input - ข้อมูลที่เราป้อนเข้าไป
    - System Event/Log
    - User or Agent Message
  • LLM - ส่วนที่ใช้คิด วิเคราะห์ และให้เหตุผลตามคำสั่ง (Instruction) ที่ได้รับมา
  • Tools - ตัวที่ช่วยลดข้อจำกัดของ LLM เพราะมันมี Cut-off date ทำให้ไม่รู้เหตุการณ์ปัจจุบัน
    - Action API Call / Private Function
    - Retrival การเข้าถึงพวก KM Local อย่างการทำ Vector เก็บไว้ อันนี้มเทคนิคเรียกว่า RAG+
  • Memory แบ่งเป็น
    - Short Term - บทสนทนาล่าสุด
    - Long Term
    💾 Semantic - ข้อเท็จจริง
    💾 Episodic - ประสบการณ์ในอดีต
    💾 Procedural - ขั้นตอนการทำงาน

-AI Agent Pattern

  • ReAct
  • Reflection
  • lanExecute
  • Multi-Agent
  • ReAct (Reasoning + Acting): ให้ Agent "คิด" ก่อนแล้วค่อย "ทำ" วนไปจนกว่างานจะเสร็จ เพื่อลดการมโน (Hallucination) และเน้น Traceability
  • Reflection:
    - มี Agent สองตัว ตัวหนึ่ง ทำงานตาม Task ที่ได้ และอีกตัว "Reviewer" เพื่อให้ได้งานที่มีคุณภาพสูงที่สุด / Auto Resolve Issue / Finding Edge Case.
    - อารมณ์แบบ Pair Programming อย่าง Cursor / Claude Code มี Flow พวกนี้นะ
    - Use Case Code Generation+Review / Content Writing / Test Generation
  • Planning & Execution: แบ่งหน้าที่ให้ตัวหนึ่งเป็นคนวางแผน (Planner) และอีกตัวเป็นคนลงมือทำ (Executor) ตามขั้นตอนที่วางไว้ อาจจะเอา ReAct มาช่วยในส่วนนี้ก็ได้ หรือ จะเพิ่ม Agent อีกตัวมาทำหน้า Review ผลลัพธ์ในขั้นตอนสุดท้าย
  • Multi-Agent (Teamwork): สร้างทีม AI ที่มีผู้เชี่ยวชาญเฉพาะด้าน เช่น มี PM Agent/ Tech Lead Agent / DEV Agent / QA Agent / DevOps Agent ทำงานร่วมกัน
    - Specialize Agent ทำงานที่ตัวเองถนัดอย่าง Code / Test / Infra
    - มีการ Share Context ร่วมกัน และส่งต่อผลลัพธ์ชัดเจน ตามลำดับ
    - โดยที่มี Agent อีกตัวที่ทำหน้าทีจ่ายงาน PM Agent

-จาก Multi-Agent (Teamwork) > AI Agent Workflow

  • Sequential: ส่งงานต่อกันเป็นทอดๆ
  • Parallel: กระจายงานให้ Agent หลายตัวทำพร้อมกันเพื่อความรวดเร็ว. เพราะเรามีข้อจำกัดส่วน Compute อาจจะเอาตัวเล็กมาทำแทน และมี Collector มารวมผลลัพธ์
[Sequential] Input -> Agent1 -> Agent2 -> Result

[Parallel] Input -> Distributor -> Agent1 -> Collector -> Result  
                                -> Agent2 ->
  • Handoff มีตัวตัดสินใจจ่ายงาน ให้ Specialize Agent หรือ ถ้าติดปัญหาจะ Human-in-the-loop ให้ Agent หยุดถามความเห็นหรือการตัดสินใจจาก "มนุษย์" ก่อนจะต่อ

📌 น่าจะถูกนะ เหมือนมีใครใช้ "Team Agent" ใน Claude ไหม?
อันนี้มีหลายคนแชร์เคส เช่น สั่งงานไว้แล้วไปนอน และมีคุยกันสรุปได้ว่า ไม่มีอะไรฟรี" เพราะมันใช้ Context สูงมากงานพวกนี้ และทำให้ค่าใช้จ่ายสูงตามด้วย

Resource: https://github.com/mdrafee03/building-ai-agent //มีหลาย Pattern เลย
ถ้าอยากลองเริ่มต้น อาจจะใช้ Github Model เพราะเปิดให้ลอง Test Free ก่อนจะขยับไปใช้ Microsoft Foundary หรือค่ายอื่นๆ และที่นี่พวกทดสอบมี Dev UI (C# / Python) ให้ดูด้วยนะ

ถ้าสนใจ Microsoft Agent Framework ผมมีจดไว้จาก .NET Conf 2025 ด้วย

- ช่วง Q&A

📌 เรื่อง Memory อันนี้ใครมีหน้าที่จัดการ
Ans ตัว LLM เองไม่มีความสามารถใน Memory ด้วยตัวเองนะ มันเป็น Generator ทายคำถัดไป ดังนั้นการจัดการพวก Memory เป็นหน้าที่ของ App ที่เรียกใช้มัน ที่ Developer ต้องมาเลือกจุดที่อะไรควรเก็บเป็น Memory อย่างพวก ChatGPT / Claude จะมี Agent ที่ทำงานพวกนี้ แล้วเลือกมาคุยใช้ต่อในรอบถัดไป

📌 MCP? เลิกใช้ไปแล้ว หรือมีทางเลือกอื่น ?
Ans LLM มีความฉลาดมากพอที่จะเข้าใจ API และ Parameter ได้ด้วยตัวเองแล้ว MCP อาจจะลดความสำคัญลงไป เพราะ การใช้ MCP กิน Token จำนวนมาก

Lighting talk - สำหรับคนหางานคร้าบ

📝 Seven Peaks Software - Digital Transformation Servier ถ้า สนใจหางาน Java / UX UI / SQA / BA

📝Agoda - Move One Bangkok 1 Apr 2026 + พื้นที่จัด Commninty ด้วยนะ ถ้าสนใจมี Join ได้

Code Entropy: The Silent Killer of .NET Monoliths

Speake Joel Dickson

เริ่มต้นมีการถามเลยว่ามัน Code / Service ที่เราไม่กล้าแตะต้องมัน Key ของอันนี้ เพราะเราไม่รู้ว่ามีอะไรข้างในเลยเกิดความกลัวที่จะไม่ยุ่งกันมันนั้นเอง

- Code Entropy คืออะไร?

📌 Entropy - มาจากกฏ Thermodynamics ข้อ 2 - ถ้าไม่มีการเติมพลังงานเข้าไป ของเหล่านั้นจะกลายสภาพจากสิ่งที่มันควรเป็น ฟังปุ๊บผมนึกถีงตอนเรียนสมัยเด็ก 55 จะเป็นเรื่องของไอติม ถ้าไม่มีการเติมความเย็นเข้าไป มันตจะละลาย

ถ้ามองในมุม Software ระบบที่เราไม่ได้ MA มันอย่างที่ควรจะเป็น มันเลยทำให้ระบบเสื่อมโทรมลง เช่น Code เดิมไม่ได้เอาออก / Lib ที่ค้างไว้นาน นานๆเข้ามีส่วนที่ไม่อยากจะแตะเข้าไปแก้ มีความกลัวที่จะปรับ

📌 Tech Debt vs Code Entropy

  • Tech Debt - สิ่งที่เราตั้งใจสร้าง แต่มีข้อแลกเปลี่ยน (Trade-off) เพื่อให้งานเสร็จทัน และตกลงมาแก้ในภายหลัง
  • Entropy - สิ่งเล็กๆ ที่ค่อยๆ คืบคลานเข้ามาโดยไม่ได้มีการพูดคุยกัน เช่น การไม่ได้อัปเกรดเวอร์ชัน / Tech หรือ การที่ไม่ได้ Clean Unused Code ซึ่งคนฝั่งธุรกิจมักจะไม่เห็นความผิดปกติเหล่านี้

- The Faces of Entropy

📌 Accidental Coupling - Quick Fixed แต่ทว่าทำให้ระบบมันมี Coupling มากขึ้นจนขยับที่หลังลำบากและ มักเกิดในพวก ระบบ Monolith

📌 Stale Abstractions - Right for a Context that no longer exits - ถูกที่...แต่ผิดเวลา ผมเข้าใจแบบนี้นะ เมื่อก่อนมันถูกแหละ ตอนนี้ปรับแล้ว มันไม่ Valid อีกต่อไป

📌 Dead Code - ที่ไม่มีการเรียกใช้งาน Utility Graveyard - Helper methods ต่างๆ หรือพวก Note ต่างๆ TODO แต่ไม่ได้แก้

📌 Configuration Drift - ไฟล์ Config ที่ตแกต่างในแต่ละ Env ทั้งในส่วนของ Dev / Test / Prod

📌 Test Coverage Decay - Test ที่รันผ่าน (สีเขียว) แต่ไม่ได้ช่วยตรวจจับข้อผิดพลาดอะไรเลย หรือ Test ที่ไม่มีวันพัง

ฟังตอนนี้จบผมนึกถึงหนังสือเล่นนึง Your Code as a Crime Scene

- Entropy มันเข้ามาได้ยังไง - The Life Cycle

🪡Stage1: Greenfield - เริ่มต้นระบบใหม่ ดูเป็น Clean Arch แยก Boundary ชัดจน API > DOMAIN > DATA1

🛑Stage2: Deadlines เกิดการ Trade-offs ยอมแหกกฏเดิมที่มีอยู่แล้วบางส่วนให้งานทัน เช่น API > DATA เอาจริงๆ ผมเคยเจอแบบให้ Domain เป็น Controller รวมกันด้วยนะ

🚀Stage3: Accretion: ดูความเคยชินทุกคนหาทางลัดของตัวเอง ให้งานเสร็จ แต่ภาพรวมช่างแมร่งไปก่อน

🔎Stage4: Archaeology - พอนานเข้าเกิดซากอารยธรรมของ Code จากการแก้ทับไปทับมาเรื่อยๆ จนคนแก้อาจจะไปที่อื่นแล้ว ... ไม่มีใครรู้ว่ามันจำเป็นกับระบบยังไง เลยยืนยันให้ทำงานแบบเดิมไปแหละ

ของผมเจอล่าสุดตอนปรับ Perf ไปเจอ Process ที่ไม่มีว่ามีความสัมพันธ์ยังไง คนบอกอย่าเอาออก ลองเอา Batch Process ออกดูออกไวขึ้น 30 นาที

😱 Stage5: Fear Plateau: ถึงจุดที่ความมั่นใจลดลง

  • PR (Pull Request) เพิ่มขึ้นเยอะ แก้ที่นึงต้องตรวจหลายส่วน เลยได้ไฟล์มาเยอะ
  • Deploy Confidence ลดลง เราไม่รู้ว่า Impact ที่ไหนบ้าง แก้ไปใครพัง
  • Velocity ลดลง เพราะการแก้ไข และการทดสอบมันแยกส่วนกันทำไม่ได้ ต้องทดสอบทั้งหมด / รวมถึง Unpredictable side effects แก้ส่วน Finance API แต่การจัดการ Content ของฝั่งโรงแรม พังด้วย

- AI is an Entropy Accelerator

AI is a most productive jr.dev, but jr.dev are historically a great Entropy Accelerator

📌 ทำไม AI ถึงทำปัญหาได้

  • Duplicate Code Speed
  • Test Pass / Not Protect - ทำให้มันผ่าน อาจจะแบบ Assert.IsTrue(True) เลย
  • Coupling without Comprehension - แก้ Bug แบบลวกๆ (Path of least resistance) ไม่ได้ดูภาพรวม
  • Context Window Blindness: AI มองเห็นโค้ดเพียงส่วนเสี้ยวเดียว จึงเน้นการปรับปรุงเฉพาะจุด (Local optimization) แต่ภาพรวม (Global optimization)

📌 Amplifier Effect

  • Low Entropy + AI ถ้ามี Pattern / Boundary ชัดเจน + Strong Test ตัว AI จะช่วยให้ดีขึ้น
  • High Entropy + AI ยิ่งเละ มันจะช่วยให้่เละอีก

- How to improve //But You can't fight what you can't measure

🧮 Metric

Metric DescHow to / Data
Domain
Coupling
วัดว่า Code ในแต่ละส่วนมีการเรียกใช้งานข้าม Domain มากน้อยเพียงใดDomain Driven Design
(DDD) และปรับทีม
PR Lead Time
By Module
Time to Merge ตั้งแต่ Code
แยกตาม Module
DORA Metric ก่อนและ
ค่อยมาดู GitHub / GitLab Analytic
Build Time TrajectoryCompile Time Trends
10 Minute Rule (Build + Unit Test) ถ้าเยอะควรปรับ
CI Metric
Dev Local Experienceวัด Compile + Startup จาก Dev ชนกับ CILocal Dev Data Collection
Test Confidence Decay- Regression Catch Rate
- Flaky Test Ratio
- Expensive Test Execution
- ตรวจสอบ Test ไม่มีประโยชน์และเอาออกไป
- ลด Flaky คุม Env อาจจะเอา Test Container มาช่วย
- แบ่งกลุ่ม Test แล้วดูว่า Test อันไหนดงมา Run Local หรือมี Step ปรับให้ง่ายขึ้น

การจะแก้ต้องเก็บข้อมูลก่อนนะ Test Confidence Decay เก็บจาก Pipeline / Test Data Collection มาก่อน

🧰 Toolbox

  • Local Dev Collection - Lib dotnet-build-metric
  • Roslyn Analyzer
    - Lib SonarAnalyzer C# Sonar Server ตัวฟรี ใช้ได้นะ หรือ จะเอา Rule ที่มีเพิ่ม แล้ว Export ไปทำ Dashboard เองก็ได้นะ เพราะ หลายระบบ หลาย Branch Cost มันสูง
    - AgodaAnalyzers - A set of opinionated Roslyn for C#
  • ArchUnitNET / NETArchTest - ตรวจ Arch Rule
  • dotnet-depends - Dependecy Graph / Circular Reference

Sample Data platform at Agoda

- Guilde to fight with Entropy (No Siliver Bullet)

ไม่แนะนำให้รื้อทำใหม่ทั้งหมด (Big Bang Rewrite)

🎯 Guilde

  • Strangler Fig Pattern แยกออกมาทำทีละส่วน อย่าง dotnet มีเข้าตัว YARP ที่เป็น L7 Rounter ที่ช่วยจัดการ Traffic ระหว่างของเก่า และใหม่ แล้วค่อยๆย้ายไปจนครบ
  • Make Coupling Visible and Expensive - ArchUnitTest / Roslyn Analyzer / PR Dependency
  • Team Topology เหมือนกัน -- Conway's Law การจัดโครงสร้างทีมให้สอดคล้องกับ Business Domain ทำให้มีความเป็นเจ้าของที่ชัดเจน หนังสือ Team Topology ดีนะ

📌 With AI

  • Cursor Rule (.cursor/rules) >> Skill เป็นมาตรฐานใหม
  • Agent.md (onboarding you ai)
  • Slash Command - define reuseable command เข้า create service ให้มันสร้างไฟล์ตาม pattern + test
  • Using AI for Roslyn มี Blog เขียน using ai + ast key - consistency - น่าจะ Blog นี้ .NET Conf 2024

Entropy is not a code problem, It is a visiblity problem

- ช่วง Q&A

📌 Monolith (Clean up vs. Cut and run)
Ans ค่อยๆ แยกส่วน (incremental splitting) โดยถ้า Modularize ก่อนจะช่วยให้แยกง่ายขึ้น แต่ถ้า Code แย่มาก อาจจะต้องไปทาง Cut Off

📌 Conway's Law แก้ที่ Engineering View หรือ Business View
Ans ต้องมี Engineering Leadership ก่อน ถ้าไปหาคนทำ Product ที่เก่งๆ มา เพื่อช่วยจัดกลุ่มทีม

📌 Build Time วัดของ Dev ทุกคนยังไง
Ans ทำ Lib ขึ้นมา ของ Agoda มีหลายภาษาเลย ส่วน C# Lib dotnet-build-metric ใน Repo ของ Agoda แชร์เป็น Open Source หลายภาษานะ

📌 MCP ไม่ได้พูดเลยใน Talk นี้
Ans MCP = AI Action สำหรับตอนนี้ MCP ใช้ Distribute Skills โดยให้ AI ให้ทุกคนใช้เหมือนกัน และสอดคล้องกัน

Native SSE in .NET

Speaker Pavan Kumar M

- SSE คือ อะไร มันมาแก้ปัญหาอะไ

📌 SSE (Server-Sent Events) เป็นเทคโนโลยีที่ช่วยให้เซิร์ฟเวอร์สามารถ Push Data แบบ Real-time ไปยัง Client ได้ผ่านการเชื่อมต่อ HTTP เพียงครั้งเดียว (Long-lived connection).

✨Use Case

  • Live Notification + Alert
  • Log Logging/monitoring
  • Financial Data Streaming
  • Collaborative Editng Update
  • IOT Sensors Data Feed

- How to Implement

📌 Traditional

  • ถ้า Server ต้องการ push ข้อมูลกลับจะทำ Long Polling - Overhead / Waste bandwidth
  • แม้ว่าจะมี WebSocket มาช่วยใน .NET SignalR แต่มันต้องเปิด Connection คู่กันตลอด ถ้ามีเยอะๆกินภาระฝั้ง Server / การตั้งค่ามากขึ้น

📌 Now

  • Idea เขียนแบบ SSE มาสั่งพักแล้ว แต่ Manual
  • ต่อมาใน .NET 10 เป็น Feature ที่ Build In

- Without Replay / Replay

เมื่อการเชื่อมต่อหลุด (เช่น ผู้ใช้กด Refresh หน้าจอ) ข้อมูลที่ส่งมาในช่วงนั้นจะหายไป ถ้าเขียนเองอาจจะต้องมาทำ dic เพื่อจำว่า Feed อะไรไป แต่ถ้าเป็น dotnet 10 SSE มีกลไก Automatic Reconnection

  • Wrap - Object ที่สนใจด้วย SseItem
  • ใน Request ให้แนบ Last-Event-ID header

ตัว Code ผมแปะขึ้นมาเอง อาจจะไม่ตรงตาม Speaker 555 //จอมันมองไม่เห็น

using System.Collections.Concurrent;
using System.Net.ServerSentEvents;
using System.Runtime.CompilerServices;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// In-memory event store for replay
var eventStore = new EventStore();

// Background event producer
_ = Task.Run(async () =>
{
    long id = 0;
    while (true)
    {
        id++;
        eventStore.Add(new StoredEvent(
            Id: id,
            EventType: "update",
            Data: $"Event #{id} at {DateTime.UtcNow:O}"));
        await Task.Delay(1000);
    }
});

app.MapGet("/events", (HttpContext context) =>
{
    // Read Last-Event-ID header for replay support
    string? lastEventId = context.Request.Headers["Last-Event-ID"].FirstOrDefault();
    long startAfterId = 0;

    if (!string.IsNullOrEmpty(lastEventId) && long.TryParse(lastEventId, out var parsedId))
    {
        startAfterId = parsedId;
    }

    return Results.ServerSentEvents(
        StreamWithReplayAsync(eventStore, startAfterId, context.RequestAborted));
});

app.Run();

static async IAsyncEnumerable<SseItem<string>> StreamWithReplayAsync(
    EventStore store,
    long startAfterId,
    [EnumeratorCancellation] CancellationToken cancellationToken)
{
    // Phase 1: Replay missed events
    foreach (var evt in store.GetEventsAfter(startAfterId))
    {
        yield return new SseItem<string>(evt.Data, evt.EventType)
        {
            EventId = evt.Id.ToString()
        };
    }

    // Phase 2: Stream new events in real-time
    long lastSentId = store.LatestId;
    while (!cancellationToken.IsCancellationRequested)
    {
        await Task.Delay(500, cancellationToken);

        foreach (var evt in store.GetEventsAfter(lastSentId))
        {
            yield return new SseItem<string>(evt.Data, evt.EventType)
            {
                EventId = evt.Id.ToString()
            };
            lastSentId = evt.Id;
        }
    }
}

// Simple in-memory event store
record StoredEvent(long Id, string EventType, string Data);

class EventStore
{
    private readonly ConcurrentDictionary<long, StoredEvent> _events = new();
    private long _latestId;

    public long LatestId => Volatile.Read(ref _latestId);

    public void Add(StoredEvent evt)
    {
        _events[evt.Id] = evt;
        Volatile.Write(ref _latestId, evt.Id);

        // Keep only last 1000 events (simple eviction)
        if (_events.Count > 1000)
        {
            var oldestToKeep = _latestId - 1000;
            foreach (var key in _events.Keys.Where(k => k <= oldestToKeep))
            {
                _events.TryRemove(key, out _);
            }
        }
    }

    public IEnumerable<StoredEvent> GetEventsAfter(long afterId)
    {
        return _events.Values
            .Where(e => e.Id > afterId)
            .OrderBy(e => e.Id);
    }
}
  • ขา Client ต้องใช้ Lib EventSource เดวมันจะเชื่อมกันเอง
const eventSource = new EventSource('/events');

eventSource.addEventListener('update', (e) => {
    console.log(`[ID: ${e.lastEventId}] ${e.data}`);
});

eventSource.onerror = (e) => {
    console.log('Connection lost, browser will auto-reconnect with Last-Event-ID...');
};

📌 Demo ตามนี้ครับ Order Pizza เทียบ WithReplay / WithOutReplay

- ช่วง Q&A

📌 จำเป็นไหมต้องใช้ SSE ในเมื่อระบบเดิมใช้ SignalR
Ans SSE ถูกออกแบบมาสำหรับการส่งข้อมูล ทิศทางเดียวจาก Server > Client การใช้พวก SignalR เป็นการเปิดช่องพูดคุย 2 ทาง ใช้ Resource มากกว่า แต่ก็ WebSockets / SignalR อาจถูก Block by Prod Firewall

📌 Authentication
Ans SSE มัน Base On HTTP ดังนั้นมันแนบ Header มาด้วยนะ ถ้า Access Token หมดอายุ เข้า Flow Refresh ขอใหม่ และเปิด SSE ใหม่จาก Client

📌 บน Prod ที่มี Server หลายตัว SSE ยัง Work ไหม
Ans ใช้ Redis backplane มาช่วยทำ pub/sub ตอนแรกนิดว่าเขียนผิดมี keyword นี้จริงด้วย

📌 ข้อจำกัดในการส่งระหว่าง Client / Server มีไหม
Ans

  • Server ไม่มีข้อจำกัด แต่ Client อาจจะมี ถ้า Server ยิงถี่ไป
  • Browser รุ่นเก่ายก IE น่าจะรองรับหมดนะ แต่ event-source พวก Get ถ้าจะ Post หรือ Custom Header ต้องไปใช้ fetch-event-source ของ Microsoft แอบดูแล้วเก่านะ 5 ปีและ

📌 ถ้าหน้าเว็บมีหลายส่วนที่ต้องใช้ SSE พร้อมกัน พวกราคาในแต่ละสินค้า จะมีปัญหาเรื่องขีดจำกัดการเชื่อมต่อ
Ans ขึ้นกับมาตรฐาน HTTP ที่ใช้ HTTP/1.1 จำกัดการเชื่อมต่อกับโดเมนเดียวกันได้ไม่เกิน 6 ช่องทาง อาจจะต้องขยับไป HTTP/2 ซึ่งรองรับการทำ Multiplexing แต่แยก Event Type เอา

📌 หาก Client สองคนเชื่อมต่อเข้ามาในเวลาที่ต่างกัน จะได้รับข้อมูลเหมือนกันไหม?
Ans ขึ้นกับการ Handle ฝั่ง Server มากกว่าว่า API นั้นๆแชร์ หรือข้อมูลตามสิทธิของแต่ละคน

NET 4 Students

Speaker Teema Khawjit / Nattawatt Hongthong

อันนี้เป็นมุมมองของน้องสำหรับการเข้ามา .NET / AI

📌 .NET เป็น Platform ที่ครบถ้วนทั้ง APP (Winform/MAUI) WEB (ASP.NET Core) / Mobile(MAUI) รวมถึงพวก Machine Learning (ML.NET) และหลายที่ใช้งานอย่าง StackOverflow / Unity / Agoda

📌 สิ่งที่ AI ทำได้และทำไม่ได้

  • AI ทำได้ดี: Coding / Test Gen
  • Human:
    - Planning เช่น การกำหนด User Story และ Acceptance Criteria
    - Code Review เพื่อตรวจสอบความสะอาด Code และArchitecture ที่กำหนดไว้

📌 คำแนะนำและการปรับตัวสู่อนาคต - สู้ไม่ได้ก็เข้าร่วม การเริ่มต้นที่ดี ลองทำโดยไม่ใช้ AI เพื่อให้เราเข้าใจ Fundamental แต่เวลาไม่พอเน้นถา่มมันเยอะ Why Why ถ้าถามดี ช่วยให้ Prompt Engineering ดีชึ้น และควรมีพื้นฐานภาษาอังกฤษด้วย นอกจากนี้

  • Product/Business เพื่อให้เข้าใจภาพรวม และ Map ความต้องการลูกค้าได้่ ทำให้ Prompt ดีขึ้น
  • Generalized Skills ในอนาคต Dev 1 คนอาจต้องดูแลได้ทั้ง Backend, Frontend และ Mobile เพื่อความคล่องตัวในการทำงาน

📌 จากนั้นเป็น Demo Claude - ลองทำ Short Url ไวอยู่นะประมาณ 3-4 นาทีจบ หลังแปะ Prompt

สำหรับที่ฟังวันนี้มา พอ AI เข้ามาเราต้องมองภาพใหญ่ขึ้น Business / Architecture และ MCP ลดความสำคัญลงหลังจากมี Skill เข้ามา

และขอบคุณทีมงานทุกท่าน ที่เปิดโอกาศได้ให้ลองมาพูด เลยเอา Blog ที่ว่าจะลองเรื่อยจนเดือน 5-6 มาเขียนสรุป มาลองพูดก่อนเผา 2-3 วัน บางตัวเลยไม่ได้ลองจริง เลยติดขัด และ ทีม Live ภาพคมชัดมากครับ

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.