วันนี้ผมมาใน 2 บทบาท จากเป็นคนมาฟังมาจด มาวันนี้มาเป็นคนลองแชร์บางด้วย สำหรับหัวข้อมีอะไรนั้นลองตามอ่านกันได้ครับ
Back to Basic: Fundamental Data Structure in C#
Speaker Chatri Ngambenchawong
สำหรับ Session นี้ ผมลองออกมาพูดเองครับ เป็นภาษาอังกฤษแบบงูๆปลาๆ มาเล่าว่า ส่วนนึงที่ระบบมันช้า มาจากการที่เราเลือก Data Structure ผิด Use-Case ของมันก็ได้ครับ โดยผมได้สรุปลง Blog แล้ว
และ Feedback ต่างๆ เช่น ลองใช้ Benchmark.NET ผมปรับใน Sample Code ใน Git แล้ว แต่ใน .net fiddle อันนี้ปรับตามไม่ได้ตามเหมือนจะโดนเค้าแบน Error 500 ถ้า Login เพราะลองเล่นอะไรแปลกให้ CPU Peak 55
ผลที่ได้ก็ OK นะ ไม่ต้องมาแก้ Code Run ที่ละอันใส่ param กดแล้วนอนตื่นมาดูผล สำหรับ Code ตามนี้ครับ
| Method | portfolio_num | Mean | Error | StdDev | |------------------------------------- |-------------- |-------------:|-----------:|-----------:| | TestProcessTransactionWithOnlyList | 500 | 896.43 ms | 7.322 ms | 6.114 ms | | TestProcessTransactionWithListAndDic | 500 | 14.93 ms | 0.055 ms | 0.049 ms | | TestProcessTransactionWithOnlyList | 1000 | 1,565.52 ms | 38.909 ms | 114.725 ms | | TestProcessTransactionWithListAndDic | 1000 | 14.80 ms | 0.232 ms | 0.217 ms | | TestProcessTransactionWithOnlyList | 5000 | 7,361.04 ms | 146.151 ms | 190.037 ms | | TestProcessTransactionWithListAndDic | 5000 | 14.58 ms | 0.067 ms | 0.056 ms | | TestProcessTransactionWithOnlyList | 10000 | 14,642.17 ms | 274.847 ms | 257.092 ms | | TestProcessTransactionWithListAndDic | 10000 | 14.71 ms | 0.051 ms | 0.048 ms |
นอกจากมีคุยเหมือนกันว่าในพวก Linq First() จะเห็นว่าการปรับ Perf ด้วยนะใน .NET9 อันนี้เดียวต้องไปลองเพิ่ม
สุดท้าย ตอนนำเสนอ ถ้าพูดอะไรตะกุตะกะ หรือพูดอะไรพลาดไปในวันนั้น ผมขอโทษด้วยครับรอบหน้าจะปรับปรุงให้ดีขึ้นครับผม
Local Reasoning Model Deployment with AutoGen Between Ollama and LM Studio
Speaker Charunthon Limseelo
สำหรับ Session เป็นภาคต่อจากตัว Season of AI – Thailand | Season 3 / Developing Local AI Models with .NET and AutoGen (.NET Conf TH 2024) ลองไปอ่านกันก่อนได้ครับ
- Reasoning Model คือ อะไร ?
Reasoning Model เป็นแนวคิดใหม่ของ GPT มันจะคิดเยอะขึ้น เบื่องหลังเอา input + output ในแต่ละส่งไปคิดต่อ คล้ายๆกับแนวคิด Chain of Thought แต่มันทำตัว Model เอง
การทำ Reasoning มันจะช่วยให้ทำงานยากขึ้นได้ เช่น การคำนวณ / deep analysis งานเฉพาะด้าน เช่น physics / งานซับซ้อน วางแผนที่มีเงื่อนไขจุกจิ อาทิ แต่จะ Domain มี Constraint ต่างๆ
- แล้วมันต่างกับ LLM ยังไง ?

LLM Simple แต่ Reasoning Model คิดเยอะ มีสติ ลดอาการหลอน (Hallucinate) นั่นเอง เอกสาร OpenAI บอกการทำงานไว้คร่าวๆ ดังนี้

- Open Source Local LLM
ตอนนี้น้องโบ๊ทจะแนะนำว่า ถ้าเราอยากลอง Run ตัว Model แบบ Local มีเครื่องมือแนะนำอยู่ 2 ค่าย ได้แก่เจ้าตัว ผมลองทำเป็นตารางสรุปเลยดีกว่า
Property | Ollama | LM Studio |
---|---|---|
Interface / Feature | - CLI - มีคนทำ WEB UI ด้วย //ผมใช้ท่านี้ | - GUI + Chat Interface - model fine-tuning |
Model Support | - Ollama’s format - แต่รองรับ Model จาก Community อื่นๆ อย่าง GGUF / HuggingFace | - Broad GGUF support (via llama.cpp) - HuggingFace |
การใช้งาน | - CLI เหมือน docker แต่เปลี่ยนจาก docker > ollama | - GUI |
API Access | - Built-in REST API | - มี API แบบ Open AI Format การใช้งานยังต้อง Start Stop ได้ผูก Auto |
ปกติผมเองใช้แต่ Ollama มันขึ้นจาก docker-compose ง่ายๆดี แต่ต้องไปเปิดให้ CUDA Support นะ (ว่าจะเขียน Blog ก็ลืมทุกที)
แล้วทำไมต้องทำ Local LLM ด้วยหละ
- อย่างแรก Privacy / Cost / Customization (เอามาใช้เอง) / Deployment
- ตอนนี้มี Model ที่เป็น Open Source LLAMA / DeepSeek หลายตัวที่เราเอามาปรับ Fine-Tune / RAG ได้ด้วย
- ถ้าอยากทำ AI Agent เอง
ใช้ตัว AutoGen: An Open-Source Programming Framework for Agentic AI ที่เอาแต่ Model แต่ละจากที่ขึ้นใน Ollama / LM Studio หรือ Service จากเจ้าอื่นๆมาทำได้ โดย
- Ollama >
dotnet add package AutoGen.Ollama
- LM Studio >
dotnet add package AutoGen.LMStudio
ตัวอย่างการใช้ สามารถดูจาก Slide + Repo ของน้องโบ๊ทครับ
- Why Reasoning Models
✍️ ทำไมถึงเลือกใช้ Reasoning Models มากกวา่า LLM ในบางเรื่อง
- Multi-step problem solving - มันพยายามสร้างวิธีคิดมากกว่าหาความจำ + ความเป็นไปได้
- Contextual understanding - เข้าใจบริบท //อันนี้ผมฟังยังงงๆ หน่อยครับ ว่ามันต่อกับการส่ง Chat ก่อนหน้าเข้าไปยังไง
- Explainable reasoning - บอกได้ว่าคิดยังไง ถ้าเป็น Open Source Model ไม่ใช่ Open AI Model นะ
- Adaptability to new situations
- Collaboration potential
🪜 agents use-case มีหลายแบบ อย่างที่น้องโบ๊ทได้ลองเสนอมาจะเป็นในส่วนของ
- Customer service agents
- Financial planning agents
- Medical diagnosis support agents
เอาจุดเด่นของ reasoning models ที่คิดๆเยอะ ทบทวนมาช่วยในการทำความเข้าใจปัญหา และวางแผน หรือ แนะนำแนวทางได้
Resource: Code + Slide
Tracing the Path to Rapid Recovery: Implementation, Use Cases, and War Room Insights
Speaker Oliver Belfitt-Nash
- Splitting the Monolith
การแตก Monolith เป็น Microservice ไม่มีมีข้อดีเสมอไปนะ ทุกอย่างมีการแลกเปลี่ยน ถ้าแตกออกมาแล้ว แล้วเราจะรู้ได้ยังไง Microservice ที่คุยกัน มันทำงานยังไง เป็นปัญหาใหม่ เพราะของเดิมเราตามได้จาก Code
สำหรับเคสนี้แก้ได้ด้วย Tracing ซึ่งมาเป็นใน ตัว 3 Pillar ของ Obserability แต่การเริ่มใช้งานต้องการกำหนด Standard ระหว่าง Microservice อาจจะทำเป็น Lib กลางครอบ เพื่อ Inject Config / Pattern
- 3 Pillar ของ Observability + Stack

metric ถ้าของ dotnet ใช้ของ default ที่มันให้มาได้เลย แต่ถ้า non-dotnet มีการ Custom ไปบ้าง ส่วนพวก Dashboard ในตาม Stardard ได้ระดับนึงเลย แต่มีการปรับแก้ด้วย พยายามไม่ให้ทาง Dev ต้องลงมาเขียน graphite query
tracing - เอาไว้เชื่อมความสัมพันธ์ของแต่ละระบบ (End to End Visibility) และหา Bottlenecks ที่เกิดขึ้น / latencty / slow requests
- ถ้ามีเคสไฟไหม้จริง เราดูยังไงบ้าง
- เริ่มจาก Metric มีข้อมูลสรุป Status Code / Response Time เช่น Error 500 Counts
- ตรวจจาก Log อันนี้ลง Detail ไปยัง ClassName / Message
- แล้วดู Trace หาเส้นทางของปัญหาที่เกิดตาม Flow ของ Request + Req Body
ที่นี่ Agoda เค้าใช้ Observability พวก Tracing มาก่อนที่ OpenTelemetry จะออก Standard ออกมา ใช้ open tracing อยู่ ดังนั้นพวกระบบเดิมต้องมีการแปลงนิดนึง OpenTracing shim และก็มีการเติม span บางตัวเข้าไป เช่น ใน GraphQL เป็นต้น
เสริม ถ้าใช้ LGTM ตอนทำ Observability Lib ใหม่ มันจะให้ Correclation Id มาด้วย ช่วย Link Log / Trace / Metric ได้
- Observability (เน้น Tracing) Use Case
- Escalation Resolution พอมี Metric เราตั้ง Alert ได้ แล้วปัญหาเกิดขึ้นจริงไปตาม Metric > Logs > Traces ลดเวลาในการแก้ปัญหาได้
- Tracing: Cross DC Request
- Tracing: Timeout Configuration - พอมีหลายๆ Microservice บางอันตั้ง Timeout ไม่ล้อกัน จะมีเคส Flow มัน Fail
- Tracing: Downstream Database - มาดู Query / Store ไหนที่เกิดปัญหา
- Tracing: Request Looping
- Tracing Watcher Detection - เกิดจากใน Tempo แต่บาง Query มัน Timeout ข้อมูลมันเยอะจนถูก Retention เอาออกไป แต่บางเคสมันต้องเก็บข้อมูลยาวๆแลฃ้วดูเทียบ อันนี้เหมือนเค้าแก้โดย โดยนใส่ Hadoop แล้วทำ Pattern Detection มาไล่จับ
- ใครว่า FrontEnd ไม่มี Tracing นี่ไง Speaker นำเสนอ vaadin ซึ่งมีตัว Observability Kits
นอกจากมีคำถามจำนวน Sampling เก็บเท่าที่ใช้ ไม่จำเป็นต้องหมด มันเยอะ นอกจากงานที่มีระยะเวลานาน แล้ว Tracing ควรทำลงๆไปถึง Method ไหม อันนี้ ใช้ของ Default จะดีที่สุด //ของผมในที่นำเสนอในหัวข้อที่ Data Structure แล้ว ใส่ Trace ราย method เลย เดี๋ยวต้องไปทำ flag ปิด
แนะนำ Agoda
Agoda เป็นบริษัททำ platform ด้านการจองโรงแรม การเดินทาง นอกจากนี้พอมันใหญ่มาเค้าทำ Software ของตัวเองขึ้นมาให้เอง มี dotnet ด้วยนะ นอกจากนี้เค้ามีเขียน Tech Blog ที่ Medium ด้วย ถ้าสนใจดูข้อมูลเพิ่มเติมได้ที่นี่
แนะนำ Seven Peak
บริษัทที่ทำด้าน digital transformation / Enterpise Artitecture / รวมถึงพวก Solution ด้าน Data + AI มีใช้งาน dotnet azure aws และมีจัด Meetup ด้วยนะ ต้องไปดูที่ FB Page ถ้าสนใจดูข้อมูลเพิ่มเติมได้ที่นี่
The F5 Experience
Speaker Joel Dickson
อันนี้มาเล่าถึง pain ของ develop กว่าจะทำเริ่มต้น Run Code ขึ้นมาได้ ต้องเจอปัญหา Context Switching ที่ทำให้เสียเวลาไปเยอะ กว่าจะทำให้ Code มัน Run ได้ เช่น
- การต้องมากดตามคู่มือ KM ข้างใน กว่าจะ run ของได้ที่ใช้เวลาครึ่งวัน
- หรือกว่าจะ Run Test Local ที่นึง Run ไม่ได้ต้องรอ เป็นต้น
- หรือ Env ต่างกัน ทำเจอบางเรื่องที่หงุดหงิดได้ เช่น
\r\n
(Windows)\r
(Mac)\n
(Linux)
F5 หมายถึงเวลา Start Debbuging ของ Visual Studio / VS Code นะ
- มารู้จักกับ inner loop กับ outer loop

- inner loop - การพัฒนาในส่วน Local เช่น Code > Test > Bulid / Debug วนไป ถ้าพร้อม push เข้า Repo
- outer loop - จะเป็น Flow ส่วนของ CI/CD พวก Code Review > Build > Test > Security / Complaince / Deploy (Staging / Prod)
- ปรับ F5 ดีขึ้นได้ยังไง ?
มี 3 ส่วน ได้แก่ Local Setup / Local Speed / Local Testing
🛠️Local Setup
- ตอนนี้มีหลาย Tech มาช่วยแล้วอย่าง docker compose ถ้ามีซับซ้อนเอา Shell ครอบ
- ตัว IDE อย่าง VisualStudio / VS Code / IntelliJ ถ้ามีการตั้งค่าที่เหมือนๆกันลองใช้ EditorConfig (ของ dotnet)
- gitattributes - แก้ปัญหา line ending
\r\n
(Windows)\r
(Mac)\n
(Linux) - IDE Configurations อย่างตัว launchSettings.json
- Package Manager Config: nuget.config / .npmrc
- แล้วเอาขึ้น Repo ไว้่
🚀Local Speed
- ตอน Startup App มันช้า เมื่อเรากด F5 ถ้าอยากรู้เบื้องหลังมันมีอะไรตัว Agoda มีทำตัววัด Metric dotnet-build-metrics
- พบว่ามันมี 3่ ช่วง
- Complie
- Startup
- Time to Get First Request - จากนั้นมาหาทางลดในแต่ละจุด ช่วง Startup อาจจะต้องทำ pre-warming หรือปรับ Code เพื่อ ลดเวลาในส่วนนี้ หรือ ปรับ HW ลด Context Switching
- ถ้าเป็นการ Test อาจจะเอา Test Container เข้ามาช่วย ลดเวลา Startup + แยก ENV TEST / DEV
✅Local Testing
- ปัญหา ถ้าทุกคนส่ง Code ขึ้นไป แล้วรอให้ CI มันตรวจผลจะเกิดช่วงที่ CI มีควรรอเยอะ หรือในเคสเทสที่ Run นานอย่าง Integration Test
- เป็นไปได้ไหมที่เอามา Run ใน Local รอบนึงก่อนให้อยู่ใน Feedback ของ Inner Loop โดยตัวที่เข้ามาช่วยแก้ อย่างแรกต้องรู้ก่อนว่า Test ที่ช้าจากอะไร Unit Test / Integration Test จากตัว Tools Test Results Collector
- จากนั้นมาหาทางลด
- ปรับ Code ให้ Test เร็วขึ้น
- หาทางลอง Run Integration Test โดยเอา Test Container เข้ามาใช้
หลังจากปรับ Local Setup / Local Speed / Local Testing ช่วยลด Context Switching เพิ่ม Productivity ให้กับทีม Development ได้เยอะ
Resource: https://www.youtube.com/@RealDicko
Beyond WebGL: Unlocking Real-Time VFX with WebGPU in Unity
Speaker: Gittitat Ekchantawut
สำหรับ Session นี้มาอธิบาย WebGPU ตัวที่ใช้ HW มาช่วยการคำนวณได้สูงที่สุด เพราะ WebGL (เน้นวาด) / WASM ยังข้อจำกัดอยู่นะ เลยช้า ลองไปเล่นได้ตาม Transformer.js WebGPU Benchmark เห็น Perf ชัดเจนเลย
WebGPU - More Shader / Good Resource Management / Realtime Simulation โดยความแตกต่างของ WebGPU กับ WebGL มีความแตกต่าง ดังนี้

ที่เหลือมีของให้ลองเล่นด้วย บางอย่างต้องเปิด flag ด้วยนะ ใน chrome "chrome://flags/#enable-webgpu-developer-features" มีตัวอย่างลองกด
Resource: https://github.com/menstood/unity6-webGPU
MSSQL Testing in .NET: A Practical Guide with Testcontainers
Speaker: Kawee Lertrungmongkol
จาก Session ก่อนมีเกริ่นๆเรื่อง Test Container ไป ตอนพักมีลองง่ายดีแหละ สำหรับ Session นี้มีคนแชร์ use-case แบบทางการแล้วครับ
🐳 Testcontainer
- Lib ที่จัดการดึง Container ที่เกี่ยวกับการเทส ไม่ว่าจะเป็นของเรา หรือคนอื่นทำไว้ก็ได้ และมันช่วยจัดการ State ให้ด้วย ไม่ต้องมา Run docker compose up down เอง ถ้าทำมือ (ผมเอง ทำท่านี้ 555)
- การใช้ TestContainer ช่วยแก้ปัญหาอย่างเคส Test Database ช่วยเรื่อง NATIVE SQL พวกที่แต่ละค่ายทำกันขึ้นมาเอง
🧱ตอน Setup
- ข้อควรระวัง ตอน Initial Test อย่างลืมกำหนด WaitStrategy ว่าจะทำแบบ รอให้ระบบขึ้นหมดก่อน ถึงค่อย Run Test Wait Strategies - Testcontainers for .NET
_ = new ContainerBuilder() .WithWaitStrategy(Wait.ForUnixContainer().UntilContainerIsHealthy());
- ถ้ามี Migrate Script อย่าตัว EF เดียวมันจะ Apply Migration ให้เลย
ข้อสังเกตุ Run 10 Test ประมาณ 4-5 นาที แล้ว เรื่องจากมันพยายาม Initial Container ใหม่ทุกรอบ แล้วก็ ถ้าอยากให้เร็วขึ้นอาจจะให้มันตั้ง Container เป็นของกลาง แล้วปรับ Test ให้เป้นแบบ Sequencial มันจะมีปัญหา Parallel แล้วคุม Env ยาก //โอ๊ะส่วนตัวเจอเหมือนกัน ตั้งแต่สมัย Run กับ VM เลย
⏰ เราควรจะทำเมื่อไหร?
- เพราะมันใช้เวลานาน demo 10 Test Case ประมาณ 4 นาที ต้องมาพิจารณาว่าควรจัดแบบไหน CRUD อาจจะตัดควรทำเฉพาะ เทสที่สำคัญ
นอกจากนี้ ถ้ามี image ของตัวเอง เอามาทำ Test Container ใช้ได้ด้วยนะ
Resource: https://dotnet.testcontainers.org/modules/mssql/
Clean Architecture with ASP.NET CORE
Speaker: Jose Barbosa
Clean Architecture - มีหลายชื่อนะ hexagonal architecture / onion architecture
🏰Why Clean Arch


- แบบเดิม Layer Test tight coupling with infra / data access
- hard to test such as database / 3rd party api / time
- ปรับที่นึงกระทบหมด - Clean Architecture - loose coupling move dependency to follow domain business ย้ายจาก Infra ไป Domain
🚨 Clean Architecture Rule
- Model all business rules and entities in the Core project
- All dependencies flow toward the Core project
- Inner projects define interfaces; outer projects implement them
หลังจากปรับ Project Structure ถ้ากลัวพลาด ทำ Unit Test เอาไว้ป้องกัน โดยใช้ ArchUnitNET
🏬 Clean Architecture Key
- Domain Core - แยกตาม DDD
- Domain Service
- Aggreates / Entities
- Value Object
- Domain Exceptions
- Domain Events / Event Handlers
- Guard - Use Case
- Commands + Handlers
- Query + Handlers
- DTOs - เหมือนได้ยินว่าต้องแยกส่วนที่ใน Business กับ พวก API / UI แล้วใช้ AutoMapper ช่วย Map ของ
- Behaviors - Infra - พวก Repositoy / DBContext / Cached / API / File / Notify Implement
- Presentation API Endpoints / UI Pages
Resource: github.com/ardalis/CleanArchitecture / github.com/NimblePros/eShopOnWeb
Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.