Quantcast
Channel: cc :: somkiat
Viewing all 2000 articles
Browse latest View live

สวัสดี Prometheus 3.0 (beta) มีอะไรเปลี่ยนแปลงบ้าง

$
0
0

ทาง Prometheus ได้ปล่อย version 3 (beta) ออกมาให้ลองใช้งาน
ยังไม่แนะนำให้นำไปใช้งานจริง ๆ นะ
มาดูว่ามีอะไรเปลี่ยนแปลงกันบ้าง

เริ่มจาก User Interface ใหม่

โดยเขียนใหม่หมดเลย ให้ look-and-feel ดูดีมากกว่าเดิมเยอะ

ดูสบายตาขึ้นเยอะ

ปรับ mode ได้ดูสวยดี น่าใช้

ลองไปเล่นได้ที่ Promlab :: Demo server

ส่วน feature อื่น ๆ ที่น่าสนใจ ประกอบไปด้วย

  • Remote Write protocol 2.0 จะลดขนาดของข้อมูล payload และลดการใช้งาน CPU ลงไปในการบีบอัดข้อมูล
  • สนับสนุน metric ในรูปแบบของ OpenTelemetry ดังนั้นจึงรับ OTLP Metrics protocol ได้เลย ผ่าน endpoint /api/v1/otlp/v1/metrics

ลอง Download มาทดลองเล่น และ ใช้งานกันดูครับ



มาใช้งาน LiteLLM กัน

$
0
0

จากการแบ่งปันเรื่อง AI for Software Development
ปัญหาอย่างหนึ่งสำหรับการใช้งาน LLM provider ต่าง ๆ ที่มีอยู่มากมาย
ทั้ง OpenAI, Antropic, Ollama, Groq เป็นต้น
แต่ละ provider จะมีการเตรียม API ที่ต่างกัน format ของ input/output ที่ต่างกัน
ดังนั้น LiteLLM จึงเกิดมาเพื่อจัดการปัญหานี้

ได้เตรียมสิ่งต่าง ๆ เหล่านี้ไว้ให้

  • รูปแบบของ input/output เดียวกัน ไม่ว่าจะใช้งาน LLM provider อะไร
  • สามารถ track การใช้งานทั้ง token หรือ ราคาต่าง ๆ ได้ เพราะว่า LiteLLM ทำตัวเป็น proxy นั่นเอง รวมทั้งเรื่องของ rate limit การใช้งานได้อีกด้วย
  • มี Retry and fallback ให้ใช้งาน เพื่อช่วยให้ระบบ scale ได้ง่ายขึ้น

โครงสร้างการทำงานเป็นดังรูป

LiteLLM จะเตรียมสิ่งต่าง ๆ หล่านี้ไว้ให้ ในการติดตั้งและใช้งาน

  • LiteLLM Proxy server หรือ LLM Gateway มีความสามารถเช่น UI ในการจัดการ, Auth, Logging, Cost tracking และ RAte limit
  • LLM Python SDK ช่วยให้ง่ายต่อการเขียน code ด้วยภาษา Python ช่วยให้เราเขียน code ชุดเดียว แต่สามารถใช้งานพวก LLM provider ต่าง ๆ ได้เลย ไม่ต้องไปเขียนตาม API ของแต่ละที่ เป็นอีกทางเลือกที่น่าสนใจ

ลองใช้งานกันดู

หรือถ้าใครอยากได้ระบบ UI ที่มี interface แบบ Chat แล้วเชื่อมต่อมายัง LiteLLM proxy server

แถมยังสามารถเลือก LLM provider ได้อีก แนะนำ Open WebUI ใช้ง่ายดี

แต่สิ่งที่น่าสนใจ และ ผมนำมาใช้งานคือ Load balancer และ fallback

เมื่อมี request เข้ามาจำนวนมาก
แน่นอนว่าจะติด limit ของ LLM provider แต่ละที่
ดังนั้นจึงแก้ไขปัญหานี้ด้วยการใช้ความสามารถของ LiteLLM มาช่วย

ลองใช้งานกันดูครับ มี Docker compose ให้ใช้งานแบบง่าย ๆ เลย
ขอให้สนุกครับ

สรุปจากเรื่อง Measuring Developer Goals

$
0
0

จากเอกสารเรื่อง Measuring Developer Goals ของทีมจาก Google
โดยเน้นเรื่อง developer goal หรือเป้าหมายของนักพัฒนา
มากกว่าการลงรายละเอียดของ task ที่จะต้องทำ
เพื่อดูในรายละเอียดของแต่ละขั้นตอนของการพัฒนา software
ว่าเป็นอย่างไร ต้องใช้เครื่องมืออะไรบ้าง
เพื่อช่วยเพิ่ม productivity และ code quality ของนักพัฒนา
รวมทั้งให้เป้าหมายที่ต้องไว้สำเร็จ และ ส่งมอบ value ให้ต่อไป

โดยเป้าหมายของนักพัฒนาจะแยกตามขั้นตอนของการพัฒนา software เช่น

  • Information gathering เอกสารต่าง ๆ ต้องเป็น version ล่าสุด หรือ update เสมอ มีข้อมูลต่าง ๆ ที่จำเป็น หาง่าย เช่น api doc และ example ต่าง ๆ รวมทั้งพวก technical solution ต่าง ๆ
  • Plan and Track work ต้องรู้ว่างานต่อไปที่จะทำคืออะไร ทำงานร่วมกันเพื่อนร่วมงานเสมอ ยิ่งข้ามทีมด้วยต้องมั่นใจว่า ยังทำงานไปในทิศทางเดียวกัน เอกสารการออกแบบต่าง ๆ ต้องถูก approve แล้ว
  • Develop, Test and commit code ต้องเขียน high quality code, code ที่เขียนต้องมีเพิ่มร่วมทีมมา contribute ด้วย เข้าใจพฤติกรรมการทำงานของ legacy/existing code สามารถ investigate ปัญหาบนเครื่องตัวเองได้ และ ต้องสามารถนำเครื่องมือและ technology ใหม่ ๆ เข้ามาใช้ หรือ ปรับปรุงในงานได้
  • Experiment and rollout การ rollout สิ่งต่าง ๆ บน production ต้องมีความปลอดภัย และสามารถ run experiment ต่าง ๆ ได้เสมอ เพื่อนำผลมาใช้ในการปรับปรุงต่อไป
  • Monitoring, reliability and configuration สามารถ investigate issue ต่าง ๆ บน production ได้เร็วและง่าย ปรับปรุง performance เสมอ จัดการการใช้งาน resource ต่าง ๆ ให้ดี และสร้างระบบให้มีความน่าเชื่อถือ
  • Data management มีการจัดเก้บข้อมูลที่ดีมีคุณภาพ รวมทั้งมีการออกแบบและสร้าง data pipeline รวมทั้งทำให้ทั่นใจในเรื่องของ privacy และ security ด้วย

จะมีการ mapping เพื่อใช้งาน tool ต่าง ๆ แสดงดังรูป

ซึ่งแนวทางเหล่านี้ จะช่วยให้เกิดการใช้งาน หรือ สร้าง tool
รวมทั้งการปรับปรุง infrastructure ต่าง ๆ ขึ้นมา
เพื่อให้เป้าหมายสำเร็จต่อไป
เป็นแนวทางของ Goal-based driven ที่น่าสนใจ

อธิบาย Agentic AI Design Patterns แบบเข้าใจง่าย

$
0
0

เจอ diagram นี้ใน Twiter หรือ X เรื่อง Agentic AI Design Patterns in a nutshell !
ประกอบไปด้วย

  • Agentic self reflection
  • Agentic with tool use
  • Agentic planning
  • Multi-Agentic

ดูเต็ม ๆ ได้เลย น่าสนใจดีครับ
น่าจะทำให้เข้าใจได้ดีขึ้น

ว่าด้วยเรื่องของ Prompt Caching

$
0
0

Prompt caching เป็นอีกหนึ่ง feature ที่น่าสนใจ
ที่ provider ต่าง ๆ เพิ่มเข้ามา ทั้ง OpenAI, Gemini, Anthropic และ DeepSeek
ซึ่งจะทำ caching ของ prompt + context ต่าง ๆ ให้เรา
เพื่อช่วยลดค่าใช้จ่ายลงไป รวมทั้งช่วยให้สามารถ share context ได้
และเพิ่ม performance ของการทำงานอีกด้วย
นั่นคือ ลด response time ลงไป

โดยที่ OpenAI จะทำการ caching ให้กับทุก ๆ API ที่ใช้งาน model เหล่านี้

  • gpt-4o (excludes gpt-4o-2024-05-13 and chatgpt-4o-latest)
  • gpt-4o-mini
  • o1-preview
  • o1-mini

ซึ่งจะทำ caching ให้อัตโนมัติ สำหรับ prompt ที่มีความยาวมากกว่า 1,024 tokens
จะเหมาะมาก ๆ สำหรับ structured prompt

สิ่งที่ OpenAI จะทำ caching ให้ประกอบไปด้วย

  • Message
  • Images
  • Structured output

ส่วนของ Anthropic นั้นต้องเขียนใช้งาน caching ใน code เลย

โดยใช้งาน anthropic.beta.prompt_caching.messages.create()
จำนวนของ token ที่จะทำ caching ได้แบ่งตาม model ดังนี้

  • Claude Sonnet >= 1,024 tokens
  • Claude Haiku >= 2,048 tokens

โดย use cases ที่เหมาะต่อการใช้งาน

  • Agent ที่ใช้งาน tool และ structured output
  • Chatbot เพื่อเห็บ context ที่ใช้ในการพูดคุย
  • กลุ่มของ Coding และ writing assistant

ดังนั้นอะไรที่เป็น static จะใช้ประโยชน์จาก caching อย่างมาก

ลองใช้งานกันดูครับ

Reference Websites

การจัดการ OpenAPI ใน FastAPI แบบง่าย ๆ

$
0
0

เนื่องจากมีปัญหาในจัดการ OpenAPI หรือ Swagger ที่คุ้นเคยใน FastAPI กันดังนี้

  • ต้องการจัดกลุ่มของ API แต่ละตัวตาม
  • อยากให้แยกไฟล์ของ OpenAPI ตามกลุ่มของ API

เลยลองมาทำดูแบบง่ายกันหน่อย

เรื่องที่ 1 แบ่งกลุ่มของ API ให้สวย ๆ

เรื่องนี้ไม่ยากเพียงแค่เพิ่ม tag เข้าไปตรงการกำหนด router ก็ได้เลย
ดูในเอกสารได้เลย
ตัวอย่างการใช้งานแบบง่าย ๆ

[gist id="61127a09b7531867e1bb2e87a833e1e9" file="1.py"]

เพื่อให้สวยงามขึ้น สร้าง class จัดการ tags กันนิดหน่อย

[gist id="61127a09b7531867e1bb2e87a833e1e9" file="2.py"]

แสดงผลการทำงานดังรูป

เรื่องที่ 2 แยกไฟล์ตามกลุ่มของ API ไปเลย

ในส่วนนี้ FastAPI เตรียม Sub application ไว้ให้ใช้งาน
เราสามารถแบ่งไฟล์ของ OpenAPI ตามกลุ่มได้เลย

ยกตัวอย่างเช่น ต้องการเพิ่ม extra api เข้ามา
สามารถทำได้ดังนี้

[gist id="61127a09b7531867e1bb2e87a833e1e9" file="3.py"]

สามารถเข้าดู OpenAPI ของ extra api ผ่าน url=http://127.0.0.1:8000/extra/docs

ดูเอกสารเพิ่มเติมในส่วนของ Advance documentation
อธิบายไว้ได้ละเอียดมาก ๆ
ขอให้สนุกกับการ coding


สรุปการทดสอบ REST API ที่สร้างด้วย FastAPI

$
0
0

คำถามใน course Full Stack Automation Testing รุ่นที่ 2 ที่ Skooldio
เกี่ยวกับการทดสอบ REST API ที่สร้างด้วย FastAPI
ว่าทำอย่างไร ?

ในการทดสอบ REST API นั้นจะแบ่งออกเป็น 2 แบบหลัก ๆ คือ

  • External testing คือ มุมมองคนภายนอก เช่น ใช้ Postman ยิงเข้ามา มองว่าเป็น black box testing ก็ได้
  • Internal testing คือ เขียน code test ด้วยภาษาเดียวกับที่ใช้พัฒนา แต่มีการ start server, ส่ง request และ ตรวจสอบ response เหมือนการทำงานจองระบบจริง ๆ

โดยในตัวอย่างนี้ เป็น Internal testing มาเริ่มกันเลย

ขั้นตอนที่ 1 สร้าง REST API แบบง่าย ๆ คือ Hello World นี่แหละ

[gist id="fbae17d97cff8026d822664aae808b3c" file="main.py"]

ขั้นตอนที่ 2 ทำการทดสอบด้วย pytest library

เขียน code test แบบง่าย ๆ โดยจะทำการสร้าง server และ client ส่ง request ไปยังระบบ
จากนั้นทำการตรวยจสอบผลลัพธ์ ว่าตรงตามที่ต้องการหรือไม่

[gist id="fbae17d97cff8026d822664aae808b3c" file="main_test.py"]

ขั้นตอนที่ 3 เมื่อทดสอบแล้ว ก็อยากได้ code coverage report ด้วย pytest-cov library

ด้วยการ run ด้วยนี้

[gist id="fbae17d97cff8026d822664aae808b3c" file="1.txt"]

เพียงเท่านี้ก็สามารถทดสอบแบบง่าย ๆ ได้แล้ว
ขอให้สนุกกับการ coding

สวัสดี Node.js 23

$
0
0

Node.js 23 ตัวเต็มเพิ่งปล่อยออกมาให้ใช้งาน ซึ่งเป็น current version
มี feature ที่น่าสนใจดังนี้

  • สนับสนุน require(esm) แบบ default แล้ว
  • เลิกสนับสนุน Windows 32-bit
  • ใช้งาน node --run เหมือนกับ npm run ได้เลย
  • Test runner สนัยสนุน glob pattern สำหรับ coverage file

และยังมี experiment ให้มาเพียบ เช่น

  • สนับสนุน TypeScript
  • WebStorage API
  • สนับสนุน SQLite ซึ่งเป็น database engine ที่ build-in มาให้เลย

มาดูตัวอย่าง code กันนิดหน่อย

เรื่องที่ 1 ECMAScript modules เลย

[gist id="ec8594510f314d65fa9750a642d437ff" file="demo01.js"]

อย่าลืมเพิ่ม type=module ในไฟล์ package.json

เรื่องที่ 2 ไฟล์ไม่จำเป็นต้องมีนามสกุล .js สามารถเขียนแบบ shell script ได้

[gist id="ec8594510f314d65fa9750a642d437ff" file="demo02"]

เรื่องที่ 3 ใช้งาน SQLite

[gist id="ec8594510f314d65fa9750a642d437ff" file="db.js"]

เรื่องที่ 4 ใช้งาน WebStorage API

[gist id="ec8594510f314d65fa9750a642d437ff" file="store.js"]

ลอง Download มาใช้งานกันดูครับ


สิ่งที่น่าสนใจใน Technology Radar 2024 Volume 31

$
0
0

เพิ่งเห็น Technology Radar Volume 31 ปล่อยออกมา
โดยในฉบับนี้ยังคง focus ไปที่ Generative AI และ Large Language Model (LLM) อย่างมาก
ซึ่งมีประโยชน์อย่างมากต่อการพัฒนา software
ตั้งแต่ requirement, ออกแบบ พัฒนา ทดสอบ และ deploy กันเลย
รวมทั้งเรื่องของ security อีกด้วย

ใช่ว่าจะมีเพียงข้อดีเท่านั้น แต่มันยังมีข้อเสียเช่นกัน
โดยหนึ่งเรื่องที่เน้นมาก ๆ คือ Coding assistance antipatterns

เป็นรูปแบบที่ไม่ดี สำหรับใช้งาน Generative AI มาใช้งานช่วยเขียน code !!
ยกตัวอย่างเช่น Replacing pair programming with AI
เป็นหัวข้อที่มีการพูดคุยเยอะมาก ๆ
สิ่งที่ควรต้องเกิดขึ้นในช่วงนี้คือ การนำมาช่วยเหลือซึ่งกันและกัน
คนที่ใช้งาน ควรมีความรู้ และ พื้นฐานที่แข็งแรงมากกว่าปกติด้วย
เพื่อให้เกิด code ที่มีคุณภาพ และ ดูแลรักษาได้ง่ายต่อไป
มิเช่นนั้น มันจะได้เพียงทำให้เสร็จ แต่ code ที่ได้มา ซับซ้อน หรือ ไม่มีใครเข้าใจ !!
ตรงนี้อันตรายมาก ๆ

แต่ถ้าเป็นระบบงานที่ทำแล้วทิ้งไปเลย แบบนี้อาจจะเหมาะก็ได้ !!

หัวข้ออื่น ๆ ที่น่าสนใจ ประกอบไปด้วย

  • 1% canary เป็นเทคนิคที่ใช้ใน canary release เพื่อใช้สำหรับการเก็บ feedback จริงจากผู้ใช้งาน แต่ก็ยังลดความเสี่ยงจาก version ใหม่ ๆ ด้วย โดย 1% คือหนึ่งใน target user เพื่อรับ feedback และลดความเสี่ยงลงไป เป็นการ balance ระหว่าง development, operation และ buisness
  • Function calling with LLMs เป็นการ integrate ส่วนการทำงานต่าง ๆ กับ LLMs provider เพื่อทำงานต่าง ๆ เช่น ในสายงาน operation ทำการ analyze log หา pattern ต่าง ๆ แล้วทำการ trigger แจ้งเตือนให้ทีมได้ หรือ เปิด incident แบบอัตโนมัติ ซึ่งเป็นแนวทางในการปรับปรุงเรื่องของ monitoring และ observability อีกด้วย รวมทั้งการ scaling แบบอัตโนมัติอีกด้วย โดยที่เทคนิคนี้จะทำงานร่วมกับ Retrieval-Augmented Generation (RAG) และ AI Agent
  • Observability 2.0 เป็นอีกแนวคิดที่น่าสนใจ เพื่อช่วยให้เข้าถึงข้อมูลระบบได้ลึกขึ้น หาปัญหาได้อย่างรวดเร็ว และเป็นแนวทางแบบ proactive มากยิ่งขึ้น
  • OpenFeature
  • Test container สำหรับการทดสอบแบบ integration test
  • Devbox ช่วยสร้าง development environment แบบง่าย ๆ
  • LiteLLM เป็น LLM proxy สำหรับ integrate LLM provider หลาย ๆ เข้าด้วยกัน โดยสามารถใช้รูปแบบของ request และ response แบบเดียวกันได้เลย

ลองดูเพิ่มเติมกันดูครับ
มีสิ่งที่น่าสนใจเยอะเลย

มาลองใช้งาน Fetch Mock สำหรับการจำลอง HTTP Request ของ fetch API

$
0
0

ในระบบงานที่พัฒนาด้วยภาษา JavaScript ไม่ว่าจะผ่าน web browser หรือ Node (backend)
ต่างมีการเชื่อมต่อหรือดึงข้อมูลผ่าน HTTP service
ซึ่งหนึ่งใน library ที่ใช้งานบ่อย ๆ คือ fetch API ที่ build-in มาให้
โดยในการทดสอบระบบที่ทำงานกับ HTTP Service
ก็มี library สำหรับการจำลองมากมาย หนึ่งในนั้นคือ Fetch Mock
มาลองใช้งานกันดู

จากที่ share ไปนั้น ผมมักจะเรียกการทดสอบที่เขียน code
ว่าเป็น internal testing

มาเขียน test กัน !!

เริ่มด้วยเขียน product code เพื่อดึงข้อมูล API ผ่าน fetch ดังนี้

[gist id="ddec44c64db6687912559b8db6e38558" file="user.js"]

จากนั้นทำการเขียน test case เพื่อจำลองการทำงานของ fetch API

ใน case ต่าง ๆ ดังนี้

  • Success case
  • Failure case เช่น 404 user not found
  • Failure case เช่น Network error
  • Failure case เช่น Network delay

มาดู success case กัน

[gist id="ddec44c64db6687912559b8db6e38558" file="user.test.js"]

จากนั้นทำการ run ด้วย Node test และ coverage นิดหน่อย

[gist id="ddec44c64db6687912559b8db6e38558" file="1.txt"]

ลองใช้งานกันดูครับ
น่าจะช่วยให้การเขียน code และ test สนุกขึ้น

รายชื่อเครื่องมือสำหรับ Mock API Server ที่น่าสนใจ มีอะไรบ้าง ?

$
0
0

พอดีได้คำถามเกี่ยวกับ Mock API Server ว่ามีเครื่องมืออะไรที่น่าสนใจบ้าง ?
เนื่องจากเครื่องมือที่ใช้อยู่ใน mountebank
ซึ่งตอนนี้ผู้ดูแลไม่ดูแลต่อแล้ว !!
จึงอยากรู้ว่ามีเครื่องมืออะไรบ้าง ?

เลยทำการสรุปไว้นิดหน่อย ตามการใช้งานบ่อย ๆ
ดีหรือไม่ดีกับคนอื่นก็ไม่แน่ใจ
โดยเป็นเครื่องมือสำหรับการสร้าง Mock API server
แบบแยกเครื่อง หรือ process ออกมาจากระบบงาน
มาดูกัน

  • Mock Server ของ Postman
  • Stubby4node และ Stubby4j
  • WireMock
  • JSON Server สร้างง่าย ๆ ด้วยไฟล์ JSON
  • Swagger หรือ OpenAPI
  • Node-RED
  • Mock APIs มี APIs ต่าง ๆ ให้ใช้งาน และ shared/contributed ได้
  • APIDog, Mockoon ก็น่าสนใจ

ลองใช้กันดูว่าชอบตัวไหนบ้าง

สรุปความสามารถที่น่าสนใจของ ChatGPT, Claud.ai และ GitHub Copilot

$
0
0

ในระหว่างการแบ่งปันเรื่อง AI for Software Development
ตั้งแต่การ requirement, design, develop, test และ deploy นั้น
พบว่า product ต่าง ๆ ของ OpenAI, Anthropic และ GitHub Copilot
มีความสามารถใหม่ ๆ ออกมาเพียบเลย
จึงทำการสรุปไว้นิดหน่อย เท่าที่ใช้งาน

เริ่มที่ OpenAI ปล่อย ChatGPT search ออกมา

ซึ่งทำการลงชื่อใน waiting list ไว้นานมากจนลืม
แต่ได้รับ e-mail ใช้งานได้เมื่อคือ hallaween ที่ผ่านมานั่นเอง
โดยเราสามารถทำการค้นหาใน ChatGPT ได้เลย
มีความสามารถดังนี้

  • Real time search ดังนั้นข้อมูลในการค้นหาจะเป็นข้อมูลล่าสุด
  • มีการ reference ไปยังแหล่งที่มาของข้อมูล เหมือนกับ perplexity เลย
  • ใช้งานใน ChatGPT ได้เลย
  • ข้อมูลหลาย ๆ ตัวสามารถ visualize ออกมาได้เลย เช่น stock exchange เป็นต้น หรือเป็นรูปภาพก็ได้ แถมแก้ไขได้อีกด้วย

ต่อมาที่เป็นข่าวใหญ่ คือ GitHub Copilot สามารถเลือก model ใช้งานได้แล้ว

สำหรับ GitHub Copilot Chat นั้น
เราสามารถเลือกใช้งาน model ที่ต้องการได้ เช่น

  • GPT-4o, o1
  • Claude sonnet
  • Gemini 1.5 pro

เข้าสู่ยุคของ Multi-model กันเลย
ทำให้การใช้งานสนุกและสะดวกมากยิ่งขึ้น
ไม่ต้องไปจ่ายเงินหลายที่เลย

พร้อมกับการ update extension ใน VS Code กันอีกด้วย
ตรงนี้รู้สึกแปลก ๆ จากเดิม !!

ส่วน Claude AI ก็เปิดให้ใช้ feature preview ต่าง ๆ พร้อม update model ใหม่อีกด้วย

ตัวอย่างเช่น Claude AI บนเครื่อง computer
สามารถควบคุมการทำงานเครื่องได้เลย
หรือทำ RPA ได้แบบง่าย ๆ อันนี้น่าสนใจมาก

ต่อมาก็พวก feature preview ที่สามารถเปิดใช้งานได้ เช่น

  • Analysis tool สามารถ upload CSV file เข้าไปเพื่อวิเคราะห์ได้เลย จากนั้นจะทำการวิเคราะห์ และสร้าง visuzation ต่าง ๆ ให้ด้วย
  • สามารถ upload PDF file แล้วทำการวิเคราะห์พวก image, chart ในไฟล์ได้เลย โดยรองรับ PDF ไม่เกิน 100 หน้า

ลองใช้งานกันดูครับ
ออกมาเพียบเลย

ตอนนี้ OpenTelemetry Spring Boot starter เป็น stable version แล้วนะ

$
0
0

ตอนนี้ Spring Boot สนับสนุน OpenTelemetry Protocol (OTLP) เต็มตัวแล้ว
ทั้งข้อมูล metric, trace และ log
โดยข้อดีของ OTLP ประกอบไปด้วย

  • เรื่องรูปแบบข้อมูลที่เป็นมาตรฐาน
  • มีความยืดหยุ่นในการใช้งาน ไม่ lock กับเครื่องมือและ technology มากนัก

มาลองใช้งานกัน

เริ่มต้นการใช้งาน ต้องมี library ต่าง ๆ ดังนี้

  • Actuator เป็นสิ่งที่ต้องมีเสมอ
  • ข้อมูล metric ยังใช้งานผ่าน Micrometer ด้วย library = micrometer-registry-otlp ซึ่งโยนเข้า Prometheus Remote Write ได้เลย
  • ข้อมูล trace ใช้งาน library=micrometer-tracing-bridge-brave
  • ข้อมูล log โยนเข้า Loki ได้เลย

ตัวอย่างของ Apache Maven project

[gist id="f172f267fd850e91bdefd0c7e5524da1" file="pom.xml"]

ตัวอย่างการ config ให้ข้อมูล metric และ trace ไปยัง OpenTelemetry collector

[gist id="f172f267fd850e91bdefd0c7e5524da1" file="application.properties"]

ส่วน log ก็โยนเข้า loki ไปเลย

[gist id="f172f267fd850e91bdefd0c7e5524da1" file="logback.xml"]

ลองนำไปใช้ดูกันครับ

Reference Websites

มาลองเล่น Google Chrome Built-in AI API กันหน่อย

$
0
0

ทาง Google Chrome ได้ปล่อย Build-in AI API ออกมาให้ลองใช้งาน
ซึ่งมาพร้อมกับ Google Chrome Canary นั่นเอง
โดยจะมี API ต่าง ๆ ดังนี้

  • Prompt API
  • Summarize API
  • Writer API
  • Rewrite API
  • Translate API

ในการทำงานจะใช้งาน Gemini Namo model
ที่สร้างมาสำหรับ device ขนาดเล็ก และ บน browser แสดงดังรูป

จากรูปจะเห็นได้ว่าทำการ download model = Gemini Nano มาลงใน browser กันไปเลย
เป้าหมายเพื่อ

  • ช่วยให้นักพัฒนาง่ายต่อการพัฒนา ลดการใช้งาน resource ต่าง ๆ ลงไป
  • สามารถใช้ได้ทั้ง GPU, NPU หรือกลับมาทำงานบน CPU ก็ได้ ตามแต่ละเครื่อง
  • มีการทำงานแบบ local ดังนั้นเรื่องของ data privacy จึงลดลงไป
  • รวมทั้งใช้งานแบบ offline ได้อีกด้วย

การใช้งานก็ไม่ยากมากนัก

เริ่มด้วยการ Download Google Chrome Canary

จากนั้นทำการ enable ดังนี้

  • ไปที่ Chrome จากนั้นเข้าไปที่ chrome://flags/#optimization-guide-on-device-model
  • ทำการเปิด Enabled BypassPerfRequirement
  • จากนั้นทำการเปิดใช้งาน API ต่าง ๆ  เช่น Prompt API => chrome://flags/#prompt-api-for-gemini-nano

เมื่อทึกอย่างพร้อมเริ่มใช้งานกันแบบง่าย ๆ
เข้าไปที่ Dev Tools ทำการตรวจสอบด้วย code ดังนี้ใน Console

[gist id="f028934118470aff34179fe143055535" file="1.txt"]

จากนั้นลองใช้งาน Prompt API

[gist id="f028934118470aff34179fe143055535" file="2.txt"]

ลองเล่นกันดูครับ น่าสนใจมาก ๆ

คำแนะนำสำหรับ Gemini Nano ใน browser

  • สามารถใส่ context, persona และ rule ต่าง ๆ เพื่อปรับปรุง output ออกมาตามที่ต้องการ
  • สิ่งที่ควรระวังในการใช้งาน เช่น การถามแบบใช่หรือไม่ใช่ เนื่องจากเป็น model ขนาดเล็กไม่มีความรู้มาก และจำเป็นต้องมีการ interact กับ user เสมอ รวมทั้งการปรับปรุง parameter ต่าง ๆ เช่น temperature และ topK แนะนำให้ใช้ค่า default ไปก่อน
  • ลองเล่น Prompt API Playground ก่อนได้
  • เน้นย้ำว่าใช้งานบน Google Chrome Canary นะครับ

Reference website

ลองใช้งาน GenAI Script จาก Microsoft ในการสร้าง test data ของระบบงาน

$
0
0

เห็นทาง Microsoft ได้ปล่อย Generative AI script: GenAIScript ออกมา
สามารถเขียน prompt ในรูปแบบภาษา JavaScript และ TypeScript แบบง่าย ๆ ได้เลย
ทำให้นักพัฒนาสาย JavaScript ไม่ต้องเรียนรู้ภาษาใหม่ ๆ เพิ่มอีก
รวมทั้งยังสนับสนุน LLM provider ต่าง ๆ เช่น

  • OpenAI
  • GitHub
  • Azure
  • Anthropic
  • Local LLM เช่น LocalAI, Ollama, LM Studio และ Llamafile เป็นต้น

ที่สำคัญมี EXtension ใน VS Code มาให้ใช้งานแบบง่าย ๆ

ดังนั้นมาลองใช้งานกันนิดหน่อย

โดยงานที่ทำอยู่คือ การ generate data สำหรับการทดสอบระบบงาน

จึงทำการเขียน script ง่าย ๆ ดังนี้

[gist id="8b45d0f12eb4bfc188132e4ce6388d01" file="demo01.genai.mjs"]

คำอธิบาย

  • ใช้งาน gpt-4o ของ OpenAI
  • ทำการกำหนด JSON Schema ของข้อมูลที่ต้องการคือ จังหวัดของประเทศไทย จำนวน 10 จังหวัด

ทำการ run ได้ผลดังนี้

[gist id="8b45d0f12eb4bfc188132e4ce6388d01" file="1.txt"]

การใช้งานง่ายดี มาลองใช้งานกันดูครับ
ขอให้สนุกกับการ coding


สรุปการอ่านเรื่อง How we run migrations across 2,800 microservices

$
0
0

จากการอ่านบทความเรื่อง How we run migrations across 2,800 microservices ของทาง monzo
ซึ่งเป็น online banking ที่ UK
ทำการเขียนบทความเรื่องการ upgrade library
จากเดิมที่ใช้งาน OpenTracing และ Jaeger ที่ deprecated ไปแล้ว
มาใช้งาน OpenTelemetry
บน service จำนนวน 2,800 service !!
มาดูกันว่าทำอย่างไรบ้าง ?

แนวทางในการ upgrade มีอยู่ 3 ทางเลือกคือ

  • Update library มายัง version ล่าสุด
  • ทุก ๆ serviceต้องใช้ library version เดียวกันเสมอ
  • ใช้ effort ในการ upgrade ให้น้อยที่สุด เปลี่ยนแปลง code ให้น้อยที่สุด

โดยในการ upgrade หรือ migrate ครั้งนี้

ต้องการลดปัญหาที่อาจจะเกิดขึ้น เช่น

การทำงานร่วมกับหลาย ๆ ทีม ซึ่งอาจจะเกิด overhead ในการพูดคุยหรือติดต่อกัน ทำให้ช้าลงไปอีก
รวมทั้ง version ของ library ที่ใช้งานอาจจะไม่ตรงกัน
ดังนั้นแก้ไขด้วยการสร้างทีม migration ขึ้นมาเลย เพื่อจัดการเรื่องนี้โดยตรง
ซึ่ง code ของ service ต่าง ๆ จะเป็นแบบ monorepo
และมีการใช้ automation tool ในขั้นตอนต่าง ๆ ทั้งการ deploy และ rollback เป็นต้น

มี Migration Principles ดังนี้

  • Centrally driven migrations that are transparent to service owners ลด overhead ในการทำงานร่วมกัน และลดความเสี่ยงต่าง ๆ ด้วยการสร้างทีมจัดการโดยตรงมาเลย และยังต้องสร้างความชัดเจนไปยังเข้าของ service ต่าง ๆ ด้วย ว่าผลการ migrate/upgrade เป็นอย่างไร กระทบต่อ service หรือไม่
  • No downtime ชัดเจนมาก ๆ มิเช่นนั้นจะกระทบต่อ business แน่ ๆ
  • Gradual roll forward, quick roll back จะค่อย ๆ ทำการ rollout ออกไป แต่ถ้ามีปัญหาก็สามารถ rollback ได้อย่างรวดเร็ว เพื่อลดผลกระทบที่จะเกิดขึ้น
  • 80/20 rule when it comes to automation ในการ migrate/upgrade จำนวนมาก ๆ บบนี้ มีการเปลี่ยนแปลงที่เยอะมาก ๆ ดังนั้นจะทำการสร้าง template ของการเปลี่ยนแปลงขึ้นมา เพื่อให้ง่ายต่อการ automated ซึ่งช่วยลดความเสี่ยงต่าง ๆ ลงไปได้เยอะ

ขั้นตอนการ migrate/upgrade library เป็นดังนี้

ขั้นตอนแรก ในการใช้งาน 3-party library ความมี abstraction layer คั่นก่อนเสมอ

เพื่อลดการผูกมัดกับ library และ ระบบงานลงไป
จะเรียกส่วนนี้ว่า adapter

ขั้นตอนที่สอง ทำการเพิ่มเติม library version ใหม่ในส่วนของ adapter นั่นเอง

พร้อมให้มีการ configuration ให้ใช้ของเก่า หรือ ใหม่ แบบ dynamic ได้
ทำให้มี library ทั้งสอง version อยู่ด้วยกัน
ไม่ต้องทำการ refactor ใด ๆ
ทำให้ง่ายต่อการเปลี่ยน หรือ rollback นั่นเอง โดยไม่ต้อง deploy ใหม่

หัวใจหลัก ๆ ของแนวทางนี้ คือ
ลดการผูกมัดระหว่าง external code กับ application code ให้น้องลง (Loose coupling)

ขั้นตอนต่อมา คือ การจัดการกับ service จำนวนมาก ๆ

สิ่งที่ขาดไม่ได้คือ automation tool นั่นเอง
เมื่อทำการ push code version ใหม่เข้ามา
จะทำการ deploy ไปยังแต่ละ service แบบอัตโนมัติ
ทำการเป็น asynchronous batch job
แต่เมื่อการ deploy มีปัญหา ก็ต้องทำการ rollback ซึ่งใช้งาน

แน่นอนว่า เรื่องของ Monitoring ก็สำคัญมาก ๆ
เพื่อช่วยตรวจสอบว่า หลังจากการ deploy ไปแล้วมีปัญหาหรือไม่
ด้วยการใช้งาน Grafana และ Prometheus
เมื่อเกิดปัญหา หรือ ตาม pattern ที่กำหนดไว้ ก็ทำการ rollback ทันที

ขั้นตอนสุดท้าย เมื่อทำการ migrate/update ตรงเรียบร้อยแล้ว

ทำการลบ code ของ version เก่าทิ้งไปซะ

ลองอ่านในรายละเอียดเพิ่มเติมได้
น่าจะเป็นอีก use case ที่น่าสนใจ
ว่าการ migrate/update library ที่ใช้ก็สำคัญมาก ๆ
Later === Never !!

สามารถใช้งาน Gemini model ผ่าน OpenAI library ได้แล้ว

$
0
0

ทาง Google เพิ่งเปิดตัวการใช้งาน Gemini model ผ่าน OpenAI library ได้แล้ว
ทำให้นักพัฒนาไม่ต้องแก้ไข code เดิม
เพียงแต่เพิ่ม config เข้าไปนิดหน่อย เช่น

  • API Key ของ Gemini
  • URL ของ Gemini API ซึ่งยังเป็น beta version อยู่

มาลองใช้งานกันดู

เริ่มต้นด้วยการสร้าง API Key ผ่าน Google AI Studio ก่อน

ต่อมาทำการเขียน code เพื่อใช้งาน Gemini -flash model ดังนี้

[gist id="9b0a4251016c0d70663678a13aa24b56" file="demo.py"]

ลองทำการ run ดู ได้ผลดังนี้

[gist id="9b0a4251016c0d70663678a13aa24b56" file="1.txt"]

ลองเล่นกันดูครับ

บันทึกการแบ่งปันในเรื่อง Full-Stack Automation Software Testing ที่ Skooldio

$
0
0

หลังจากการแบ่งปันความรู้และประสบการณ์ที่พอรู้มาบ้าง
ใน course Full-Stack Automation Software Testing รุ่น 3 ที่ Skooldio
ซึ่งในครั้งนี้น่าได้แบ่งปันเรื่องที่ตัวผมเองสนใจ
ทั้งเรื่องของ Contract testing ด้วย Pact
ทั้งเรื่องของ Service component testing
ทั้งเรื่องของ Internal vs External testing technique
และการจัดการ dependency ต่าง ๆ ของระบบที่ต้องการทดสอบ
เช่น database และ external system เป็นต้น

เทคนิคที่แนะนำเกี่ยวกับการจัดการ dependency ของระบบที่ต้องการทดสอบ

มีทั้งแบบ internal คือ จัดการใน code ของ test case
และ external คือ การจัดการอยู่ข้างนอก code
ยกตัวอย่างเช่น

การจัดการ database และ external system มีเทคนิค และ เครื่องมือดังนี้

  • ใช้งาน mock library ของแต่ละ programming และ framework ไปเลย เช่น jest, mockito เป็นต้น
  • ใช้งาน container เข้ามาช่วย เช่น Test container สามารถจัดการใน code ของ test case ได้เลย แต่ต้องมี docker ในเรื่องก่อน
  • จัดการ external system เช่น HTTP REST API ด้วย library ใน code ต่าง ๆ ได้ เช่น Nock, MSW, Gock และ WireMock เป็นต้น หรือใช้งาน Mock API Server ข้างนอกได้ เช่น Postman Mock Server, Stubby
  • ในส่วนของ Frontend ก็จัดการ request ต่าง ๆ ที่ออกจาก web browser ด้วยพวก Network routing ด้วย Playwright และ Cypress แบบง่าย ๆ

เป้าหมายของเครื่องมือ และ เทคนิคต่าง ๆ เหล่านี้
ใช้งานเพิ่มช่วยควบคุม dependency ต่าง ๆ ให้ทำงานตามที่เราต้องการ
ทั้ง success case, failure case และ edge case ต่าง ๆ
เพื่อช่วยให้สามารถ run test case ซ้ำ ๆ มีความเสถียร และ น่าเชื่อถือมากยิ่งขึ้น
เมื่อผลการทดสอบผ่านตามที่ต้องการแล้ว
ถึงจะทำ integration test และ end-to-end test ต่อไป
ก่อนที่จะทำการส่งมอบระบบงานไปยังผู้ใช้งานนั่นเอง

ปล. ในครั้งนี้มีตัวอย่างของการนำ BDD มาใช้งาน ซึ่งเป็นคำถามในการแบ่งปัน
โดยในยกตัวอย่างการใช้งาน Cucumber และ Robot framework
ที่สนับสนุน Gherkin style ของ feature file มาอีกด้วย


แนะนำ Val Town

$
0
0

เพิ่งเห็น Val Town เปิดตัว Townie AI ซึ่งเป็น code assistant
เหมือนกับ v0.dev และ gptengineer นั่นเอง
แต่พอเข้าไปดู feature พบว่ามีความสามารถที่น่าสนใจมาก ๆ
ดังนั้นมาลองใช้งานกันดูนิดหน่อย

ความสามารถแรก Code Assistant ผ่าน Townie AI

ทำการ chat แบบปกติ
ส่วนผลที่ได้คือ code ที่ทำงานได้ พร้อม URL ของระบบงานได้เลย
โดย code ของระบบจะเป็น JavaScript, TypeScript และ JSX
แถมยัง build-in support พวก SQLite, Blob storage, OpenAI และ email
ในส่วนของ code นั้น เราสามารถแก้ไขได้อีกด้วย

ความสามารถต่อมา เราสามารถสร้างสิ่งต่าง ๆ เหล่านี้ได้

เขียน script เพิ่ม share เหมือนกับ Gist ของ GitHub
แต่สามารถ execute และ share ให้ได้เลย

ทำการสร้าง HTTP server เพื่อรอรับ request จากภายนอกได้
ในส่วนนี้สามารถนำมาใช้เป็น Web hook ได้เลย
สะดวกมาก ๆ

ต่อมาสร้าง Cron job ได้แบบง่าย ๆ
ทำการกำหนดเวลาการ run ได้เลย

ต่อมาสร้าง email address เพื่อให้เราส่ง email มาได้เลย
จากนั้นลองทำการส่ง email
จะได้รับข้อมูลดังนี้

จากที่ลองใช้แบบ free tier พบว่าใช้งานง่าย
แถมมี use case ให้ใช้งานเยอะดี
ลองใช้งานกันดูครับ สนุกมาก ๆ

มาดูความสามารถที่น่าสนใจของ ASP.NET Core ใน .NET 9

$
0
0

ทาง Microsoft เพิ่งปล่อย .NET 9 ตัวเต็มออกมา
ทำการเพิ่ม feature ปรับปรุง experience และ performance หลายอย่าง
ดังนั้นจึงทำการ download และลองใช้งานกันดูหน่อย ว่าเป็นอย่างไร
มาเริ่มกันเลย

จะใช้งาน ASP.NET Core เป็นหลัก สำหรับการพัฒนา
ทั้งส่วนของ Frontend และ Backend
ส่วนใหญ่ผมจะใช้สำหรับพัฒนา RESTFul API ฝั่ง Backend มากกว่า

ความสามารถแรกที่น่าสนใจคือ ปรับปรุงเรื่อง Static file

ช่วย optimize ขนาดของ static file เช่น HTML, CSS, JS, image ใน assets
โดยใน code สามารถเพิ่ม app.MapStaticAssets();
ซึ่งเข้ามาแทนการใช้งาน app.UseStaticFiles();
จะทำการบีบอัด fiile ต่าง ๆ ให้

  • gzip ใน development
  • gzip + brotli ในการ publish
  • ใส่ Etags ให้

ต่อมาคือ Build-in OpenAPI document ให้เลย

ดังนั้นมาลองใช้งานกันหน่อย

เริ่มด้วยการติดตั้ง และ สร้าง project

[gist id="8a3a6026bc54c7dc9a3160774ad55d5c" file="1.txt"]

มาดู code

[gist id="8a3a6026bc54c7dc9a3160774ad55d5c" file="api.cs"]
  • เพิ่ม AddOpenApi มาใน service
  • เพิ่ม MapOpenAPI ใน router/endpoint

ทำการติดตั้ง dependency เข้ามาคือ

[gist id="8a3a6026bc54c7dc9a3160774ad55d5c" file="2.txt"]

ผลการทำงาน

[gist id="8a3a6026bc54c7dc9a3160774ad55d5c" file="3.txt"]

แต่ถ้าต้องการแสดงผลในรูปแบบ UI สวย ๆ ในระบบงานเลย
ต้องทำการติดตั้ง library เพิ่มเติม เช่น

  • Swashbuckle.AspNetCore.SwaggerUi
  • Scalar.AspNetCore

หรือติดตั้ง command line tool อื่น ๆ เช่น SwaggerUI และ ReDoc เป็นต้น

ตัวอย่างการใช้งาน Scalar.AspNetCore

[gist id="8a3a6026bc54c7dc9a3160774ad55d5c" file="api2.cs"]

ทำการ run และเข้าไปดูใน web browser :: http://localhost:5062/scalar/v1

ในส่วนของ Authentication และ Authorization

ทำการเพิ่ม Pushed Authorization Requests (PAR) เข้ามาใน OpenIdConnectHandler
เป็นแนวทางใหม่เพื่อปรับปรุง OAuth แบะ OIDC
ซึ่ง PAR สนับสนุน identity provider ดังนี้

  • Keycloak
  • Curity
  • Duende IndentityServer
  • Authlete

ใน .NET 9 นั้นได้เพิ่ม PAR เข้าไปให้แบบ default เลย

[gist id="8a3a6026bc54c7dc9a3160774ad55d5c" file="api3.cs"]

ยังมีความสามารถอื่น ๆ เช่น

  • HybridCache ที่ยังอยู่ใน preview version
  • ปรับปรุง exception page

ถ้าใครเปิดใช้งาน application metric สามารถปิดได้ใน code

[gist id="8a3a6026bc54c7dc9a3160774ad55d5c" file="api4.cs"]

ปิดด้วยยิงเล่นแบบเล็ก ๆ กันหน่อย

[gist id="8a3a6026bc54c7dc9a3160774ad55d5c" file="4.txt"]

ลอง Download มาใช้งานกันดูครับ
ขอให้สนุกกับการ coding

Viewing all 2000 articles
Browse latest View live