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

ทำความรู้จักกับ YARP: Yet Another Reverse Proxy

$
0
0

เห็นทาง Microsoft แนะนำ YARP มา สำหรับจัดการ API ต่าง ๆ
โดยที่ดูมานั้น เป้าหมายเพื่อสร้าง internal tool ที่ใช้งานภายในองค์กร
เนื่องจากพบว่าหลาย ๆ ทีมมักจะทำงานเดียวกันซ้ำ ๆ
จึงสร้าง YARP ขึ้นมาซึ่งเป็น proxy นั่นเอง
ดังนั้นมาดูกันว่าเป็นอย่างไรบ้าง

โดยที่ YARP นั้นสนับสนุน protocol ต่าง ๆ ดังนี้

  • HTTP/ 1.1
  • HTTP/ 2 สำหรับ gRPC
  • HTTP 3
  • WebSocket

สามารถ custom หรือ เพิ่มความสามารถต่าง ๆ
เข้าไปได้ด้วยการเขียน code ด้วย C#
และใช้งานได้กับ .NET 6 ขึ้นไป
มาเป็น dependnency ที่เพิ่มเข้า .NET project ได้เลย

Reverse proxy นั้นทำหน้าที่ forward request จาก client
ไปยัง server ที่เหมาะสม ตามที่กำหนดเอาไว้
ช่วยทำการซ่อน implementation หรือ server ไว้จาก client นั่นเอง
ความสามารถพื้นฐานของ reverse proxy ประกอบไปด้วย

  • Load balancing
  • Caching
  • Security
  • SSL termination

แสดงดังรูป

ทำการติดตั้ง dependency หรือ package ได้เลย

[code] $dotnet add package Yarp.ReverseProxy --version 2.1.0 [/code]

จากนั้นเขียน code เล็กน้อยสำหรับ reverse proxy

[gist id="00de7da8cf124931da75d9607acb7f53" file="1.cs"]

สามารถทำการ config พวก route, transform ในไฟล์ appsettings.json ได้เลยดังนี้

[gist id="00de7da8cf124931da75d9607acb7f53" file="appsettings.json"]

เราสามารถเพิ่มความสามารถต่าง ๆ เข้าไปได้อีก
หรือใช้สิ่งที่มีให้ใช้งานได้เลย เช่น

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

Reference Websites


ตอบคำถาม การ generate data ใน PostgreSQL database

$
0
0

คำถามเกี่ยวกับการสร้าง data ใน PostgreSQL database จำนวนเยอะ ๆ

ในแต่ละ table อย่างไรดี ?

คำตอบง่าย ๆ

สามารถใช้งานเขียน code และใช้งาน fake library ได้เลย
แต่ถ้าต้องการเขียนคำสั่ง SQL ทำเลย
ก็สามารถทำได้ด้วยการใช้งาน GENERATE_SERIES ของ PostgreSQL นั่นเอง
หรือเขียนด้วย pgSQL ก็ได้ แล้วแต่ความชอบ

มาดูตัวอย่างการใช้งานกัน

[gist id="43e3abbcac309acfb8c3243969c6e414" file="1.txt"]

ทำการตรวจสอบ xz (liblzma 5.6.1) บนเครื่อง Mac กันหน่อย

$
0
0

จากข่าวเรื่อง XZ Utils backdoor นั้น โดย code อยู่ที่ xz repo
ซึ่งมีการแจ้งปัญหาไว้ดังนี้

ดังนั้นสำหรับชาว Mac มาตรวจสอบกันหน่อย
ถึงจะไม่กระทบก็ตาม

[gist id="8263a87ce3d7b09eeb3c016b1709b494" file="1.txt"]

ซึ่งมักจะติดตั้งผ่าน Homebrew
ถ้าใครเป็น version 5.6.0 หรือ 5.6.1 แล้ว ทำการลบและติดตั้งใหม่เลย
ดังนี้

[gist id="8263a87ce3d7b09eeb3c016b1709b494" file="2.txt"]

ลองตรวจสอบกันดูครับ

ลองใช้งาน Runme :: เมื่อไฟล์ Markdown สามารถ execute ได้

$
0
0

เห็นมีการแนะนำ Runme หรือ การ run ไฟล์ READE.md หรือ markdown format ได้
ช่วยทำให้การเขียนเอกสารมันมีความสามารถเพิ่มขึ้น
หรือเรียกได้ว่า มันเหมือน Jupyter notebook นั่นเอง
โดย Runme นั้นมีความสามารถพื้นฐานดังนี้

  • เขียนในรูปแบบของไฟล์ Markdown ซึ่งน่าจะเป็นรูปแบบที่นักพัฒนาคุ้นเคย
  • เขียนเอกสารได้ปกติ เพิ่มเติมคือ เพิ่มส่วนของ code ได้ ทำให้เราสามารถ run ได้ เหมือน command line นั่นเอง

ดังนั้นจึงสามารถนำมาประยุกต์ได้เยอะเลย

ยกตัวอย่างเช่น

  • อธิบายการติดตั้งหรือ setup ระบบงาน สามารถอ่านไปทำไปได้เลย
  • สามารถ integrate กับระบบ หรือ software ต่าง ๆ ได้เลย เช่น develop, test และ operation หรือไป DevOps ก็ว่ากันไป

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

สามารถติดตั้งได้หลายรูปแบบ เช่น

  • ติดตั้งผ่าน command line
  • ติดตั้งผ่าน VS Code ได้เลย
  • ติดตั้งเป็น self-host ผ่าน web browser
  • มี Docker image ให้ด้วย

ตัวอย่าง เอามาเขียนอธิบายการพัฒนาระบบงานด้วย NodeJS

ช่วยทำให้สามารถอ่านไป และ run ได้เลย

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

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

$
0
0

ทาง Thoughtworks ได้ปล่อย Technology Radar 2024 Volume 30 ออกมา
โดยมีหลายเรื่องที่น่าสนใจ
จึงทำการสรุปในแต่ละกลุ่มว่ามีอะไรบ้าง
ทั้งมุมของ Techniques, Tools, Platforms และ Languages and frameworks

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

  • เรื่อง licence ใหม่ ๆ ของ opensource project ที่จะขัดแย้งกับ opensource เช่นการจำกัดการนำไปใช้งานเป็นต้น ดังนั้นจึงต้องศึกษาเรื่องของ licence ให้ดี ๆ
  • การนำ AI เข้ามาช่วยในการพัฒนา software ซึ่งช่วยเพิ่ม productivity แต่ควรระวังในการใช้งานด้วย ทั้งเรื่องของคุณภาพและความปลอดภัย เพื่อให้เข้าใจเกี่ยวกับความเสี่ยงต่าง ๆ ที่อาจจะเกิดขึ้นตามมา
  • สิ่งที่น่าสนใจคือ process และ เครื่องมือ ที่จะเข้ามาช่วยการทำงานของ Pull Request (PR) ไม่ให้เป็นขั้นตอนที่ขัดขวางการทำงานและลดความเร็วของการทำงานหรือส่งมอบมากจนเกินไป ทำให้เป็นไปตามแนวคิดของ Continuous Integration ให้ได้มากที่สุด
  • Model ใหม่ ๆ ของ LLMs (Large Language Model) เพื่อแก้ไขปัญหาแบบเฉพาะเจาะจงไปเลย เช่น NeMo Guardrails สำหรับ government policy และ langfuse สำหรับ engineering platform เป็นต้น

AI ที่เข้ามาช่วยในการพัฒนาระบบงานประกอบไปด้วย

  • GitHub Copilot
  • Codium AI
  • aider
  • Continue
  • Convert screenshot to code
  • DriverAI และ bloop.ai สำหรับการอธิบาย code ต่าง ๆ ที่มีอยู่ หรือ พวก Legacy code ได้ง่ายขึ้น
  • ChatOps เช่น PromptOps และ Kubiya เป็นต้น
  • Text to SQL เช่น vanna

อีกทั้งยังมีแนวคิดของ AI team assistants ขึ้นมาอีกด้วย
เพื่อเข้ามาช่วยทีมให้มี productivity ที่สูงขึ้นไปอีก
เพื่อเข้ามาช่วยทีมเพื่อความรู้ และ skill ต่าง ๆ ไม่ได้ทำงานแยกหรือเป็น silo นะ!!
ความรู้ที่ต้องมีคือ prompt หรือ คำสั่งต่าง ๆ
ที่ความต้องสร้าง standard ขึ้นมาอีกด้วย
รวมทั้ง guideline ต่าง ๆ เพื่อช่วยลดเวลาของการศึกษาลงไป

อีกเรื่องที่กำลังทำอยู่เลยคือ Automatically generate Backstage entity descriptors
นั่นคือการสร้าง entity descriptor สำหรับ Backstage เพื่อทำ Service/API catalog แบบอัตโนมัติ
ช่วยให้เอกสาร update อยู่ตลอดเวลา

ลองศึกษากันดูครับ มีเยอะมาก ๆ

สิ่งที่น่าสนใจ สำหรับการ redesign หน้า web ของ NodeJS

$
0
0

เห็นว่า website ของ NodeJS นั้น ทำการ redesign ใหม่ออกมา
จึงตามไปดูว่ามีการคิด และ การพัฒนาอย่างไรบ้าง
โดยเริ่มต้นจากการพูดคุยและออกแบบใน figma ก่อน
เพื่อให้ได้เอกสารในการทำงานร่วมกัน ประกอบไปด้วย

  • UX flow
  • Dark/light mode
  • Page layout
  • การแสดงผลใน mobile device
  • การแบ่งส่วนต่าง ๆ ออกเป็น component-based

จากนั้นจึงทำการลงมือเขียน code ต่อไป
ช่วยทำให้การทำงานร่วมกัน ที่ส่วนใหญเป็นแบบ remote ทั้งโลกง่ายขึ้น

ช่วงเริ่มต้นของการพัฒนานั้น
จะทำการสร้าง component ต่าง ๆ ขึ้นมา
ซึ่งเป็น component หลัก ๆ ของระบบ เพื่อช่วยลดการทำงานซ้ำ ๆ ลงไป
โดยจะสร้างและเก็บไว้ใน Storybook และใช้งาน Chromatic
ช่วยให้ง่ายต่อการสร้าง prototype และทดสอบในแต่ละ component
และในส่วนของ CSS เลือกใช้งาน Tailwind

สำหรับการค้นหาในระบบงาน
ทั้ง API, content, blog, material ต่าง ๆ
จะใช้งาน Orama ซึ่งทำงานเร็วมาก ๆ

ระบบการ monitoring ส่วนการทำงานนั้น
จะใช้งาน Sentry เพื่อดูการทำงานของระบบ เช่น

  • error report
  • usage monitoring
  • diagnostic ส่วนต่าง ๆ

ในส่วนของ hosting ใช้งานผ่าน Vercel และ Cloudflare
และ CI/CD ใช้งาน GitHub Actions
ทำให้ contributor ต่าง ๆ ได้รับ feedback จากการเปลี่ยนแปลงส่วนต่าง ๆ ได้อย่างรวดเร็ว
โดยใน pipeline ของ CI/CD จะมีส่วนของการทดสอบต่าง ๆ ดังนี้

  • Visual testing ด้วย chromatic และ lighthouse
  • Lint tool
  • Testing

เป็นการทำ regression test ของระบบ

มีหลายอย่างที่น่าสนใจ
ลองศึกษาและนำไปใช้งานกันดูครับ

แนะนำ DrawDB เครื่องมือออกแบบสำหรับ Relational Database แบบ online

$
0
0

เห็นเครื่องมือชื่อว่า DrawDB
เป็น editor สำหรับออกแบบ database นั่นเอง
สามารถใช้งานผ่านระบบ web application ได้เลย
มี user interface ที่ใช้งานง่ายดี และ ฟรีด้วย
สามารถนำมาติดตั้งที่ server ของเราได้เองเลย

จากที่ลองใช้คร่าว ๆ มีความสามารถดังนี้

  • ออกแบบผ่าน UI ง่าย ๆ ได้เลย แสดง ER diagram ให้ด้วย สบายเลย
  • การสร้าง table เพิ่ม column ก็ง่ายดี
  • จัดการ relation ก็พอได้ ต้องเข้าใจนิดหน่อยนะ
  • จัดการ key ต่าง ๆ ได้เลย ทั้ง Promary key, Foreign key
  • สามารถ export ER diagram ออกมาเป็นไฟล์ต่าง ๆ ได้เลย
  • สามารถ export schema ของ table ต่าง ๆ ออกไปตาม database type ต่าง ๆ ได้ เช่น MySQL, MariaDB, PostgreSQL แบะ MS SQL Server
  • ข้อมูลของการออกแบบต่าง ๆ จะเก็บใน Indexeddb ซึ่งอยู่ที่ web broweser
  • มี TODOs List ให้ใช้งานด้วย

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

จัดการ logging ใน Spring boot ด้วย Loki

$
0
0

ทาง Grafana ได้ปล่อย Loki ออกมา
สำหรับจัดเก็บ log ของระบบงาน และค้นหาได้ง่ายและรวดเร็วขึ้น
โดยสามารถใช้งาน Loki ร่วมกับระบบงานที่พัฒนาด้วย Spring boot ได้อีกด้วย
ซึ่งมีขั้นตอนดังนี้

ขั้นตอนการทำงาน

  • ทำการ start loki server ขึ้นมา จะใช้งานผ่าน port 3100
  • ในฝั่งของ Spring boot ทำงานส่งข้อมูล log มายัง loki ตรง ๆ ได้เลย (push)
  • โดยต้องใช้งาน depedency ชื่อว่า loki-logback-appender

ทำการ config file ของ logback เพื่อใช้งาน loki แบบ push ได้ดังนี้

[gist id="4eafb6e98f137c5a7426f0a30018120e" file="logback-spring.xml"]

เพื่อส่งข้อมูล log format ที่ต้องการ ไปยัง Loki server
ลแงใช้งานกันดูครับ
เป็นอีกวิธีการของการจัดการ log


เพิ่งเห็นว่า `version` is obsolete ใน Docker compose แล้ว

$
0
0

หลังจากที่ update docker แล้วมาใช้งาน Docker compose พบ warning นี้

WARN[0000] docker-compose.yml: `version` is obsolete

ก็เลยงงว่า ทำถึงเลิกใช้แล้ว
เพราะว่า version เอาใช้ในการ validate syntax ที่เขียนในแต่ละ vesion นั่นเอง

แต่เมื่อไปดูคำอธิบายก็เข้าใจได้ง่าย ๆ เลยว่า

  • ใน docker compose ไม่ได้ใช้ version ในการ validate อีกต่อไปแล้ว
  • ใช้ schema ล่าสุดเท่านั้นในการ validate ถ้า property ใด ๆ ไม่มีก็จะแจ้ง warning ออกมาทั้งหมดนั่นเอง

ok เข้าใจแล้ว !!

Reference Websites

สรุปสิ่งที่น่าสนใจจาก Testing methodologies ของ Jakarta EE project

$
0
0

จากบทความเรื่อง Modernizing Testing Practices for Jakarta EE Projects นั้น
มีแนวทางการทดสอบระบบงานที่น่าสนใจ
มีการปรับเปลี่ยนแนวคิดของการทดสอบ เพื่อให้เข้ากับสิ่งที่เปลี่ยนไป
โดยทั้ง developer และ quality engineer จะต้องทำงานร่วมกัน
มีการกำหนดขั้นตอนการทำงาน
มีการ approach และ guildeline การทดสอบไว้ให้ชัดเจน
รวมทั้งเครื่องมือ และ ชุดของ library อีกด้วย
ดังนั้นจึงทำการสรุปสิ่งที่น่าสนใจ เอาไว้นิดหน่อย

มีสิ่งที่สำคัญมาก ๆ สำหรับ Testing Methodologies
เพื่อช่วยให้ project มีความน่าเชื่อถือมากยิ่งขึ้น
ประกอบไปด้วย

เรื่องที่ 1 Test guideline

เป็นเอกสารสรุปการทดสอบอย่างชัดเจน
เพื่อให้ทีม และ คนที่เข้ามาร่วม contribute อ่านก่อน
ดังนั้นยิ่งทีมใหญ่ขึ้น เอกสารเหล่านี้จึงสำคัญมาก ๆ

ยกตัวอย่างเช่น

  • การกำหนดเครื่องมือที่ใช้งาน
  • การตั้งชื่อ
  • การเขียนชื่อ test case

เรื่องที่ 2 กำหนด หรือ ใช้งาน modern library

เพื่อช่วยให้ชุดการทดสอบนั้นมีประสิทธิภาพยิ่งขึ้น
อ่านเข้าใจได้ง่าย
สามารถทดสอบระบบงานที่ใช้ feature ใหม่ ๆ ได้
ยกตัวอย่างมีการใช้งาน advance feature ของ JUnit5 และ AssertJ
และแนะนำให้ใช้งาน soft assertion มากกว่า hard assertion

เรื่องที่ 3 นำเอา Data-Driven มาใช้งาน ในการทดสอบ

ซึ่งช่วยให้การทดสอบครอบคลุมในส่วนของ edge case ต่างๆ
รวมทั้งพวก bug หรือ issue ต่าง ๆ อีกด้วย
รวมทั้งจากการใช้งาน ช่วยให้ทีมเข้าใจมากยิ่งขึ้น
เช่นการใช้งาน @ParameterizedTest เป็นต้น

เรื่องที่ 4 ทำการตรวจสอบที่ละเอียด และ ครอบคลุม

ให้ทำการ assert พฤติกรรมการทำงานของ project ให้ละเอียด
เพื่อทำให้คุณภาพของ project ตรงตาม standard ที่ตั้งเอาไว้

เรื่องที่ 5 ปรับปรุง test coverage ให้ดีขึ้น

จะใช้เครื่องมือทั้ง PiTest, Jacoco และ Cobertura
สำหรับตรวจสอบว่า code ส่วนไหนใน project จำเป็นต้องมีการปรับปรุงเรื่อง coverage ให้ดีขึ้น

เรื่องที่ 6 Container for testing

มีการนำ container เข้ามาช่วยสร้าง environment สำหรับการทดสอบ
เพื่อให้การทดสอบมีคุณภาพ มีความถูกต้อง และ น่าเชื่อถือ
รวมทั้งยังช่วยให้สามารถ reproduce ในแต่ละ case ได้ง่ายอีกด้วย
เช่น test container เป็นต้น

ลองนำไปประยุกต์ใช้งานกันดูครับ

มาลองใช้งาน bld

$
0
0

มาลองใช้งาน bld เป็น build tool เหมือนกับ Apache maven และ Gradle นั่นเอง
แต่ไม่ต้องมาเขียนไฟล์ xml และ build.gradle
เพราะว่าเขียนใน code ภาษา Java ไปเลย
ดังนั้นมาลองใช้งานกันดู

เริ่มต้นด้วยการติดตั้ง

สามารถติดตั้งได้หลายแบบเช่น

  • executable JAR file
  • bash script
  • SDK man
  • HomeBrew
  • Jbang

ลองติดตั้งตามความสะดวก

ต่อมาทำการสร้าง project ด้วย bld กัน

ทำการ download jar file จาก Maven central มา

[gist id="32d4ccb1d263d1e7b8145a0b949443cf" file="1.txt"]

จากนั้นลองสร้าง project

[gist id="32d4ccb1d263d1e7b8145a0b949443cf" file="2.txt"]

โดยที่โครงสร้าง project จะเป็นดังนี้

[gist id="32d4ccb1d263d1e7b8145a0b949443cf" file="3.txt"]

จะมีไฟล์ java สำหรับการ build project ที่สร้างด้วย bld
คือไฟล์ Demo01Build.java ทำการกำหนด config ต่าง ๆ ของ project เช่น

  • ชื่อ และ package ของ project
  • Library/dependency ที่ใช้งาน
  • ชื่อของ repository server
[gist id="32d4ccb1d263d1e7b8145a0b949443cf" file="Demo01Build.java"]

จากนั้นทำการ build ด้วยคำสั่ง bld หรือ bld.bat ที่สร้างมาใน project

[gist id="32d4ccb1d263d1e7b8145a0b949443cf" file="4.txt"]

ลอง compile, run และ test ดูนิดหน่อย

[gist id="32d4ccb1d263d1e7b8145a0b949443cf" file="5.txt"]

เพียงเท่านี้ก็สามารถใช้งาน bld แบบง่าย ๆ ได้แล้ว
ลองใช้งานกันเล่น ๆ ดู


Web สรุป Architecture Antipatterns ไว้ให้ครบ

$
0
0

ในการออกแบบ architecture ของระบบงานนั้น
มีรูปแบบต่าง ๆ มากมาย เช่น

  • Monolith
  • Layer-based
  • Service-Oriented
  • Microservices
  • CQRS
  • DDD
  • Space-based
  • Event-based

แต่ก็มีอีกหลายแบบที่เรียกว่า Anti-pattern architecture
ซึ่งผมมักจะเรียกว่า architecture ที่ไม่ดีแต่ได้รับความนิยม

ดังนั้นเรามาดูกันหน่อยว่า มีรีูปแบบไหนบ้าง
ที่่เรียกว่า Anti-pattern architecture
โดยที่เราความหลีกเลี่ยง หรือ ใช้งานอย่างระมัดระวัง !!
ยกตัวอย่างเช่น

  • Cargo-Culting เป็นการ copy-and-paste ทั้ง process และ เครื่องมือต่าง ๆ มาให้โดยขาดความรู้และเข้าใจ คิดว่าดีจากที่อื่นแล้วจะดีกับเรา
  • Domain Allergy ในใจแต่ architecture/technology ไม่สนใจ business problem
  • Emotional Attachment ยืดติดกับ solution เดิม ๆ ที่เคย work ไม่กล้าที่จะลอง solution ใหม่ ๆ เกิดจากความกลัวล้วน ๆ
  • Horizontalism แยกกันอย่างเดียว แต่ละทีมดูแลแต่ละส่วน !! คุ้น ๆ นะ
  • Infrastructure Ignorance ไม่สนใจ environment ต่าง ๆ ไม่สนใจเรื่อง network latency ไม่สนใจเรื่อง hardway ไม่สนใจเรื่อง security ตั้งแต่เริ่ม ทำให้ปัญหาจะเกิดมาในช่วงท้าย ๆ ของการส่งมอบ
  • Over-Engineering !! ยังมีอีกเพียบ ลองศึกษากันดู

ใน web ที่อธิบายของแต่ละหัวข้อจะประกอบไปด้วย

  • อธิบายรายละเอียด
  • ยดตัวอย่างของปัญหา
  • เกิดขึ้นได้อย่างไร
  • จะหลีกเลี่ยงกันอย่างไร
  • คำแนะนำ

ลองนำไปใช้งานกันดูครับ
หวังว่าจะไม่ผิดซ้ำ ๆ กันนะครับ

ลองใช้งาน BellSoft Liberica OpenJDK ใน Docker

$
0
0

กำลังลอง custom Docker Image สำหรับ build/run ระบบที่พัฒนาด้วยภาษา Java
โดยหลัก ๆ จะใช้งานพวก OpenJDK เป็นหลัก
แต่ก็ไปเจอ BellSoft Liberica OpenJDK
ซึ่งทำการ build มาจาก OpenJDK เช่นกัน
และมีการ custom ทางด้านการใช้งานและประสิทธิภาพเยอะ
ดังนั้นก็เลยลองนำมาใช้งานด้วยเช่นกัน
มาดูว่าเป็นอย่างไร

โดยความต้องการคือ อยากได้ Docker image สำหรับ Java ขนาดเล็ก
เลยพยายามตัดสิ่งที่ไม่ใช้งานออกไป
ซึ่งจะใช้งานเครื่องมือชื่อว่า jlink มาทำการ custom module ของ JDK นั่นเอง
จากนั้นก็ทำการ copy มาใช้งานใน Docker image ที่ต้องการเลย

ตัวอย่างของ Dockerfile ที่ทดลองเป็นดังนี้

[gist id="18eef18e0a50cebd91bf69fefea603b0" file="Dockerfile"]

จากตัวอย่างจะทำการ build Docker image บน Linux
ใช้งาน base image เป็น Alpine
ทำการ build แล้วจะได้ image ขนาด 94 MB

[gist id="18eef18e0a50cebd91bf69fefea603b0" file="1.txt"]

ลองดู layer ต่าง ๆ ใน Docker image ด้วย dive

[gist id="18eef18e0a50cebd91bf69fefea603b0" file="2.txt"]

ในการทดลองพบว่าใช้งานได้ดี เป็นปกติกับระบบงานที่พัฒนา
ถือว่าเป็นอีกตัวที่น่าสนใจ

Spring Framework 6.2.0-M1 :: มาใช้งาน @TestBean ใน test กัน

$
0
0

เห็น Spring Framework 6.2.0-M1 เพิ่งปล่อยออกมาให้ลองทดสอบ
มีการเพิ่มและเปลี่ยนแปลง feature เยอะเลย
โดยหนึ่งในความสามารถด้านการทดสอบ
คือการเพิ่ม @TestBean เข้ามาในการทดสอบ (Spring Test Context)
ช่วยให้เราสามารถ override bean ต่าง ๆ ใน context ของการทดสอบได้ง่ายขึ้น
ดังนั้นมาดูการใช้งานกัน

ใน test code นั้นสามารถทำการ override bean ที่ต้องการด้วย @TestBean
จากนั้นก็ทำการสร้าง static method (Factory method)
โดยชื่อ method มีรูปแบบดังนี้ {beanName}TestOverride
สำหรับการทำงานใน test ได้เลย
ยกตัวอย่างดังนี้

[gist id="ff49626652fe3d4fe78467585cf949b5" file="Demo.java"]

รวมทั้งยังสามารถใช้งาน library อื่น ๆ ได้ด้วย
ไม่จำเป็นต้องใช้ Mockito เพียงอย่างเดียว
ลองเล่นกันดูครับ น่าจะเปลี่ยนแปลงไปเรื่อย ๆ จนกว่าจะเข้าสู่สถานะ Release Candidate (RC)

ไปลองใช้กันดูกับ GitHub Copilot Workspace (Technical Preview)

$
0
0

ในงาน Microsoft Build AI 2024 ที่ไทยนั้น
มีการแนะนำ feature ที่น่าสนใจของ GitHub Copilot
เช่นการสนับสนุนภาษาไทย
กับอีกหนึ่งเรื่องที่น่าสนใจคือ Copilot Workspace
ซึ่งอยู่ในช่วงของ Technical Preview สามารถไป join ใน waiting list ได้เลย

เป้าหมายหลัก ๆ คือ เปลี่ยนจาก idea ไปเป็น code และส่งมอบได้อย่างสะดวกมากยิ่งขึ้น
ไม่ได้มาแทนที่ developer แต่เข้ามาช่วย
และลดกำแพงในการพัฒนาระบบงานลงไป
จาก demo เป็นการสร้าง Task
จากนั้นลองใช้งาน Copilot workspace ในการ generate สิ่งต่าง ๆ เหล่านี้

  • Specification
  • วางแผนว่าต้องทำอะไรบ้าง
  • ทำการ generate code ขึ้นมา (implementation)
  • จากนั้นทำการ deploy ไปยัง development environment

น่าสนใจมาก ๆ ไปลองใช้งานกันดูครับ

Reference Websites


ทำความรู้จักกับ Hoppscotch

$
0
0

ในการออกแบบและทดสอบระบบ API นั้น มักจะใช้งาน Postman กันเยอะ
แต่หลัง ๆ มาทาง Postman เริ่มมีการค่าใช้จ่ายต่าง ๆ เพิ่มเข้ามา
รวมทั้งต้องใช้งานแบบ online เสมอ
จึงทำให้เกิดเครื่องมือต่าง ๆ ที่เป็น opensource ขึ้นมาให้ใช้งาน
ก่อนหน้านี้มีแนะนำ Bruno มาแล้ว
มาครั้งนี้แนะนำ Hoppscotch หรือชื่อก่อนหน้านี้คือ PostWomen นั่นเอง

ในการใช้งานสามารถใช้ได้ทั้งผ่าน web browser หรือจะ Desktop application (Alpha release อยู่)
และเราสามารถทำการติดตั้งบน server เองได้เลย (Self host)
มีทั้งแบบ Community และ Enterprise edition ให้เลือก
ลองเปรียบเทียบ feature ดู
อีกทั้งมี CLI ให้ใช้งานเหมือนกับ Postman และ Bruno นั่นเอง

การพัฒนานั้นประกอบไปด้วย

  • TypeScript + VueJS ทั้งส่วนของ unser interface และ dashboard
  • Database ใช้ PostgreSQL
  • ORM + Database migration ใช้งาน Prisma

หน้าตาของระบบเหมือน ๆ กับ Postman นั่นเอง
สามารถ import Postman Collection และ OpenAPI เข้ามาได้เลย

ความสามารถหลัก ๆ จะรองรับ

  • REST API
  • GraphQL
  • Realtime API เช่น WebSocket, Socket.io, Sever-Side Event (SSE) และ MQTT

จากที่ใช้งานคร่าว ๆ กฌทดแทนได้สบาย ๆ เลย
ลองเล่นกันดูครับ
มีเครื่องมือให้ใช้เยอะ ๆ ก็มีทางเลือกมากยิ่งขึ้น

Postman :: เพิ่ม Package Library เข้ามา

$
0
0

ถ้าใคร upgrade Postman version 11.0.5 แล้ว
อาจจะแปลก ๆ หน่อย เพราะว่ามีการเปลี่ยนแปลงนั่นเอง
โดยสิ่งที่เห็นชัด ๆ มาก คือ

  • Tab tests ไม่มีแล้ว !!
  • สร้าง tab ใหม่ขึ้นมาคือ Scripts แบ่งเป็น pre-request และ post-response (tests เก่านั่นเอง)

และเพิ่ม package library เข้ามา
ช่วยให้เราสามารถเขียน code สำหรับ share กันได้เลยทั้งใน workspace เดียวกัน หรือ ต่าง workspace ได้

โดยก่อนหน้านี้ถ้าต้องการ share library/function กันเอง ทำได้ดังนี้

  • เขียนเป็น function เอาไปใส่ใน pre-request script ใน Collection
  • เขียนไป Global variable หรือ นำไปไว้ใน Server แล้วแปลงมาเป็น JavaScript ใช้งานต่อไป

การใช้งานก็ไม่ยาก เพิ่ม package ในส่วนของ tab Scripts ได้เลย

จากนั้นก็เขียน code เช่นสร้าง function ต่าง ๆ ที่ต้องการจะ share กันได้เลย

แต่คำถามที่ตามมาคือ แล้ว Package ที่เราสร้างนั้นมันอยู่ที่ไหน ?

คำตอบนี้ง่ายมาก ๆ คือ อยู่ในระบบของ Postman Cloud นั่นเอง
ดูได้จากตอนเราใช้งาน package ที่สร้าง

ลองใช้งานกันดูครับ เป็นอีกทางเลือกของการ share library ที่ใช้งานซ้ำ ๆ ในการทดสอบ

มาดูความสามารถที่น่าสนใจของ Node.js 22

$
0
0

มาดูความสามารถที่น่าสนใจของ Node.JS 22 ที่เพิ่งเป็น current version ออกมา
ว่ามีอะไรที่น่าสนใจ ซึ่งมีทั้งเรื่องของ performance และ การพัฒนาที่ดีขึ้น
ประกอบไปด้วย

  • สนับสนุน WebSocket ซึ่งเข้าสถานะ stable แล้ว ดังนั้นไม่ต้องใช้ library อื่น ๆ แล้ว
  • ปรับปรุงการจัดการไฟล์ผ่าน module node:fs
  • ปรับ version ของ V8 Engine เป็น 12.4
  • ใช้งาน Maglev Compiler เป็น default แล้ว ทำให้ performance ตอน runtime ดีขึ้น
  • สนับสนุน ECMAScript module (ESM) แล้ว แต่ยังเป็น experiment mode เท่านั้น
  • สามารถ run script ในไฟล์ package.json ผ่าน node cli ได้เลย (Task runner)
  • เพิ่ม environment variable ชื่อ NODE_COMPILE_CACHE สำหรับเก็บ cache ของการ compile พวก CommonJS และ ECMAScript Module ไว้ ดังนั้นถ้าไม่มีการเปลี่ยนแปลงก็จะไม่ต้อง compile ใหม่

ตัวอย่างของการ run script จากไฟล์ package.json

เป็นการ run script test นั่นเอง

[gist id="8241e82f5716eaca597e2e61437720be" file="1.txt"]

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

FastAPI 0.111.0 มี cli ให้ใช้แล้ว

$
0
0

เพิ่งเห็นว่าใน FastAPI 0.111.0 นั้น
ทำการเพิ่ม CLI เข้ามาให้ใช้งาน
ซึ่งทำให้เราสามารถ start server ได้ง่ายขึ้น
แถมใน dev mode ยังสนับสนุน auto-reload อีกด้วย
นั่นคือเมื่อทำการเปลี่ยนแปลง code แล้ว ไม่ต้อง restart server เอง

ตัวอย่างการใช้งาน FastAPI CLI

มีทั้งแบบ dev และ production mode

[gist id="7bcfa50e82431ce7f27e6e5a75b411b6" file="1.txt"]

จากนั้นลองทำการ run ใน Dev mode จะมี auto-reload ให้ใช้งาน

[gist id="7bcfa50e82431ce7f27e6e5a75b411b6" file="2.txt"]

ลองทำการ upgrade กันดูครับ

[code] pip install --upgrade fastapi [/code]

เมื่อไรจะ version 1 สักทีนะ !!

มาสร้าง Diagram ง่าย ๆ ด้วย Excalidraw AI

$
0
0

หลังจากที่ share เรื่องการนำ AI เข้ามาช่วยในการพัฒนาระบบงาน
รวมทั้งเรื่องของการสร้าง Diagram ต่าง ๆ ด้วย
เช่น flowchart, sequence diagram และ class diagram เป็นต้น
โดยเครื่องมือที่แนะนำคือ Excalidraw
มีความสามารถใหม่ ๆ ที่น่าใช้งาน ประกอบไปด้วย

  • Text to diagram (รูป และ mermaid style)
  • Mermaid to excalidraw
  • Wireframe to code (ใช้ API Key จาก OpenAI)

สิ่งที่แนะนำคือ Text to diagram

ทำการสร้าง diagram จาก text นั่นเอง
เราสามารถเขียนความต้องการ แล้วให้ Excalidraw ช่วยสร้าง diagram ให้
สามารถทำได้ทั้ง

  • Flow ของระบงานที่เป็น standard หรือ ใช้งานทั่วไป เช่น OAuth2, API gateway, checkout/login process เป็นต้น
  • เขียนอธิบายแบบ step-by-step เช่น A -> B -> C-> D -> A จะได้ diagram ตามที่เราต้องการ

ยิ่งรายละเอียดชัดเจน และ เข้าใจได้ง่าย ยิ่งทำให้ diagram ที่ได้มานั้นยิ่งดี

ตัวอย่างของ checkout process

ตัวอย่างการเขียนอธิบายแบบ step-by-step

ลองใช้งานกันดูครับ แต่มี limit การใช้ต่อวันนะครับ
น่าจะช่วยลดการสร้าง diagram ได้เยอะเลย

Viewing all 2000 articles
Browse latest View live