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

Spring Boot 2.5 :: ลำดับการทำงานของการ initial data ใน Database

$
0
0

จาก Release note ของ Spring Boot 2.5 นั้น
พบว่ามี feature เกี่ยวกับการจัดการลำดับการทำงาน
ของการ initial data ใน Database มาใหม่
ซึ่งเปลี่ยนจาก Milestone version ไปเลย
จึงทำการสรุปการทำงานและใช้งานไว้นิดหน่อย

ขั้นตอนในการ initial data ใน database เป็นดังนี้

  • ถ้ามี ไฟล์ schema.sql และ data.sql จะทำงานเป็นอันดับแรก เหมือนกับการทำงานของ DB migration เช่น Flyway และ Liquibase
  • ต่อมาจึงทำงานกับพวก ORM เช่น JPA หรือ hibernate

ดังนั้นในการทำงานนั้น บ่อยครั้งต้องการให้ ORM ทำงานก่อน
ยกตัวอย่างเช่นใช้งาน Spring Data JPA
เพื่อให้ทำการสร้าง table ต่าง ๆ ขึ้นมาก่อน
จากนั้นจึงทำการ initial data ใน table ด้วยไฟล์ data.sql
ซึ่งสามารถ config ได้ในไฟล์ application.properties ดังนี้

[code]spring.jpa.defer-datasource-initialization=true[/code]

แต่ถ้าไม่ต้องการไม่ให้ทำการ execute ไฟล์ data.sql และ schema.sql แล้ว
สามารถปิดการทำงานได้เช่นกัน ดังนี้

[code]spring.sql.init.mode=never[/code]

หรือแม้แต่ในการ initial bean ต่าง ๆ ที่ใช้งาน @Bean
ต้องการให้ทำงานหลังจากการ initial table แล้วเท่านั้นจริง ๆ
ก็เพิ่ม annotation @DependsOnDatabaseInitialization ได้เลย

จากความสามารถเหล่านี้ น่าจะทำให้ง่ายและสะดวกมากยิ่งขึ้น


Postman :: ทำการ merge collection อย่างไร ?

$
0
0

คำถามเกี่ยวกับ Postman
ถ้าต้องการ merge collection ต่าง ๆ เข้าด้วยกัน
ก่อนที่จะทำการ run collection ด้วย Postman หรือ newman
จะต้องทำอย่างไร ?

วิธีการแบบง่าย ๆ ที่ใช้งานคือ
ใช้งานผ่าน Postman combine collections

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

มี collection A, B และ C
ต้องการรวมกันเป็น collection All
ทำได้ดังนี้

[code] $postman-combine-collections --name All \ -f 'collections/*.postman_collection.json' \ -o All.collection.json [/code]

เพียงเท่านี้ก็ทำการรวม collection ได้แล้ว

หรืออาจจะใช้งาน Jackal postman tool ก็ได้เช่นกัน

D is for Decision

$
0
0

จากหนังสือ Productivity Ninja นั้น อ่านไปเจอหัวข้อ D is for Decision
สำหรับเรื่องของการจัดการ Email
ว่าอะไรมีความสำคัญอย่างไร เพื่อลงมือทำ
ซึ่งน่าสนใจดี จึงทำการบันทึกไว้อ่านนิดหน่อย

โดยที่ D นั้นจะมาจากได้หลายคำ ประกอบไปด้วย

  • Delete it คือ ลบทิ้งไป
  • Do it now คือ การลงมือทำทันที ถ้าไม่เกิน 2 นาที หรือทำแบบอัตโนมัติไป
  • Do it later คือ ไว้มาทำทีหลัง
  • Decide คือ ยังไม่ต้องลงมือทำตอนนี้ อาจจะทำหรือใช้อ้างอิงในอนาคต หรือ ไม่ต้องทำ แต่เพียงคอยตาม track progress ของงานเท่านั้น
  • Delegate คือ โยนงานไปให้คนอื่นทำ ดังนั้น forward ไปเลย
  • Defer the decision คือ เอาไว้ช่วงท้ายของการลงมือทำ เช่นอาจจะบันทึกลง calendar ไว้

โดยสิ่งที่ควรทำคือ การตัดสินใจว่าจะทำอย่างไรกับ email แต่ละฉบับ
ซึ่งสามารถนำไปประยุกต์กับเรื่องอื่น ๆ ได้เช่นกัน

บันทึกการใช้งาน Detox สำหรับทดสอบ app ที่พัฒนาด้วย React Native

$
0
0

ในการพัฒนา Mobile app ด้วย React Native นั้น
ปกติก็จะมีการทดสอบด้วย Jest + React Testing มาให้ด้วย
เป็นการทดสอบในระดับ unit test เท่านั้น
แต่ปัญหาคือ เราจะมั่นใจได้อย่างไรว่า
เมื่อถูก build เป็น App แล้ว ยังสามารถทำงานได้ตามที่คาดหวัง
หนึ่งในวิธีการคือ การทดสอบ App แบบอัตโนมัติ

โดยแนวทางการทดสอบจะประกอบไปด้วย

  • Black box testing (ไม่รู้ process การทำงานภายใน app เลย) ด้วย Appium
  • Gray box testing ด้วย Detox

ในบทความนี้จะพูดถึง Detox ซึ่งเป็น Gray box testing

มีเป้าหมาย เพื่อให้ขั้นตอนการพัฒนา App รวดเร็วและมีคุณภาพมากยิ่งขึ้น
รวมทั้งสามารถนำไปไว้ใน pipeline ของ Continuous integration ได้

อีกทั้งช่วยลดปัญหาของ flaky test ที่เกิดจาก Appium ลงไป
สามารถแก้ไขหรือเปลี่ยนแปลงไปตาม App ได้เร็วขึ้น
และยังทำการเพิ่ม attribute/prop testID เข้าไปยัง element ต่าง ๆ ใน component
เพื่อให้สามารถเข้าถึง element ต่าง ๆ ได้ง่าย ๆ สำหรับการทดสอบ

การติดตั้งและใช้งานนั้นไม่ยากอะไร
ทำตามเอกสารก็ได้ แต่ ....

ในการ run นั้นทั้ง React Native และ Detox
จำเป็นต้องทำการ build app และ run test
มักทำให้เกิดปัญหาการ build ได้
จึงสรุปปัญหาไว้นิดหน่อย

Software Requirement

  • XCode 12.5
  • React Native 0.65.1
  • NVM (Node Version Manager)
  • AppleSemulatorUtils สำหรับการจัดการ simulator ใน ios

ปัญหาที่พบเจอ :: เรื่องของ Flipper dependency ใน Podfile ของ iOS

โดยจะเกิด error ตอน build นั่นเอง
ดังนั้นจำเป็นต้องแก้ไข Podfile และทำการลบ cached ทั้งหมด
จากนั้นจึงทำการ install Pod ใหม่
โดย Podfile เป็นดังนี้

[gist id="ca5370c92a8dd73ac4e7b1b60d97f5ee" file="Podfile"]

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

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

เพียงเท่านี้ก็สามารถ build และ เริ่มเขียน test ได้แล้ว
โดยชุดการทดสอบ ก็เขียนด้วย JavaScript นี่เอง

[gist id="ca5370c92a8dd73ac4e7b1b60d97f5ee" file="first-test.js"]

โดยใน Component นั้น ๆ ถ้าต้องการเข้าถึง element ใด ๆ
เราสามารถกำหนด prop/attribute ชื่อว่า testID เข้าไปได้เลย

[gist id="ca5370c92a8dd73ac4e7b1b60d97f5ee" file="App.js"]

เป็นอันเริ่มต้นของการพัฒนาและทดสอบ React Native App ด้วย Detox กันแล้ว

Reference Websites

ว่าง ๆ มาทดสอบ Kubernetes ด้วย Robot framework กัน

$
0
0

วันนี้เห็น Library ใหม่ที่น่าสนใจสำหรับชาว Robot Framework
มีชื่อว่า KubeLibrary ใช้สำหรับทดสอบ Kubernetes Cluster นั่นเอง
ซึ่งสามารถทดสอบหรือตรวจสอบการทำงาน
ของ object ต่าง ๆ ที่ deploy ไป
ว่าทำงานได้อย่างถูกต้อง ตามที่คาดหวังหรือไม่
เป็นอีกเครื่องมือสำหรับสาย DevOps เลย

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

  • Pod
  • Service
  • Deployment
  • ReplicaSet
  • ConfigMap
  • CronJob
  • Ingress

โดยภายใน library ตัวนี้ จะใช้งาน library ของ Python เช่น

  • kubernetes
  • requests

สามารถดูเอกสารของ Keywords ได้เพิ่มเติม
เป็นอีก Library ที่น่าสนใจ

[Go] มาดูสิ่งที่น่าสนใจใน Echo framework

$
0
0

จากการพัฒนาระบบงานหนึ่งอยู่
เพิ่งสังเกตเห็นว่า Echo framework 4.6.0 ออกมาแล้ว
ซึ่งเป็น web framework สำหรับการพัฒนา web/api ด้วยภาษา Go
โดยใน version นี้ได้เพิ่มความสามารถใหม่มา
คือ Request Logger middleware
ช่วยทำให้การจัดการ log รวมทั้งการใช้งาน log library อื่น ๆ ได้ง่ายขึ้น
มาดูตัวอย่างการใช้งานกันนิดหน่อย

[gist id="71dae97068a237fc0b8354fc0bb8af79" file="1.txt"]

จากนั้นสามารถเปลี่ยน log library ได้เลย
ไม่ว่าจะเป็น zap หรือ logrus ก็ได้ ตามที่ต้องการ
เนื่องจาก Echo 4.6.0 ได้เตรียมไว้ให้ดังนี้

[gist id="71dae97068a237fc0b8354fc0bb8af79" file="logger.go"]

ใครที่ยังใช้ Echo 4.5 อยู่ ก็ทำการ upgrade ได้แล้ว
และอย่าลืม $go test ./... ด้วยนะ

เรื่องที่น่าสนใจเกี่ยวกับรูปแบบของ API

$
0
0

ในการพัฒนาระบบงานนั้น
เรามักจะแยกส่วนการทำงานต่าง ๆ ออกจากกัน
แต่จำเป็นต้องการติดต่อสื่อสารสารกันผ่านระบบ network
และมีรูปแบบของการติดต่อผ่านสิ่งที่เรียกว่า
API (Application Programming Interface)
ไม่ว่าจะอยู่ในรูปแบบของ code หรือตาม protocol ต่าง ๆ ก็ว่าไป

โดยที่คุณสมบัติของ API มักจะประกอบไปด้วย

  • Customer หรือ Consumer-driven
  • ใช้งานง่าย หรือ ยากต่อการใช้ผิด
  • ค้นหาได้ง่าย
  • มีหน้าที่ที่ชัดเจน
  • มีความปลอดภัย
  • รองรับการใช้งานที่สูงขึ้น
  • มีประสิทธิภาพที่ดี
  • Backward-compatibility
  • มีรูปแบบที่เป็นมาตรฐาน หรือ ทำงานร่วมกับระบบอื่น ๆ ได้ง่าย

เมื่อเราไปดูเรื่องของรูปแบบ API ระหว่างระบบหรือ service

พบว่ามีหลายรูปแบบตามอายุหรือวิวัฒนาการเลย
ซึ่งเรียงตามดังนี้

  • RPC (Remote Procedure Call)
  • CORBA (Common Object) Request Broker Architecture)
  • XML-RPC
  • SOAP (Simple Object Access Protocol)
  • REST
  • JSON-RPC
  • GraphQL, Falcor
  • gRPC

ปล. ใครรู้จักทั้งหมดนี้ แสดงว่าอายุไม่น้อยแล้วนะ !!

ในแต่ละแบบนั้นล้วนมีข้อดีและข้อเสียแตกต่างกันไป

รวมทั้ง use case ของการใช้งานเช่นกับ เช่น

  • Abstraction ของข้อมูล
  • การใช้งานที่ง่าย ในมุมมองของผู้ใช้งาน หรือ ผู้สร้าง
  • แยกการทำงานกันชัดเจน หรือ ผูกมัดกันให้น้อย (Loose coupling)
  • เรื่องของขนาดของ bandwidth ที่ใช้งาน
  • Learning curve

ผู้นำไปใช้งานนั้น จำเป็นต้องรู้และเข้าใจเช่นกันว่า
รูปแบบของ API แต่ละอย่างเป็นอย่างไร
มีข้อดีข้อเสียกับ use case ของเราอย่างไร
เพื่อช่วยให้เราเลือกได้อย่างเหมาะสม
ลองศึกษาเพิ่มเติมกันดูครับ

มาแล้วสำหรับ Apache Kafka 3.0

$
0
0

สัปดาห์ผ่านมานั้น Apache Kafka 3.0 ถูกปล่อยออกมา
ซึ่งมีทั้ง feature ใหม่ ๆ การปรับปรุง รวมทั้ง breaking change ต่าง ๆ
โดยสิ่งที่สำคัญคือ การเปลี่ยนจาก Apache Zookeeper มาใช้ตัว Kafka-buildin เอง
หรือที่เรียกว่า Kraft แต่ก็ยังไม่แนะนำสำหรับ production

โดยความสามารถที่น่าสนใจ ประกอบไปด้วย

  • ค่า deverlivey guarantee ของ producer นั้นจะมีค่า default เป็น acks=all นั่นคือ จะการันตีว่าข้อมูลที่ส่งเข้ามาจาก producer จะต้องถูกบันทึกไปทุก ๆ broker เรียบร้อย ทำให้มั่นใจได้ว่าข้อมูลจาก producer จะไม่หายแน่นอน
  • ค่า OffsetFetch ในฝั่ง consumer นั้น สามารถทำงานได้กับหลาย consumer group ได้แล้ว ก่อนหน้านี้จะแยกไปแต่ละ consumer group
  • แจ้ง deprecation สำหรับ JDK 8 และ Scala 2.12 และรูปแบบของ message v0 และ v1 ซึ่งจะถูกเอาออกใน Apache Kafka 4.0

ดู VDO แนะนำ feature ได้

https://www.youtube.com/watch?v=7SDwWFYnhGA

แจ้ง deprecation ของ go get ใน Go 1.17

$
0
0

ใน Go 1.17 นั้นการใช้งานคำสั่ง go get นั้น
จะถูกแจ้ง deprecated แล้ว เนื่องจากคำสั่งนี้
จะทำงาน 2 เรื่อง ซึ่งอาจจะทำให้เกิดความสับสนได้ คือ
ทำการ update dependency ตามไฟล์ go.mod
และอีกอย่างคือการติดตั้ง dependency ใน project เอง
ดังนั้นเพื่อลดความสับสนจึงได้เอาความสามารถอย่างหลังออกไป

โดยการแก้ไขไม่จาก คือการใช้งานผ่านคำสั่ง go install แทน
ซึ่งทาง Go แจ้งไว้ในเอกสาร Deprecation of 'go get' for installing executables

[gist id="886970d0eae6c6502a74d253b8e44d3c" file="1.txt"]

Oracle JDK 17 นั้น free แล้วนะ

$
0
0

ในวันที่ 14 กันยายนที่ผ่านมา
ทาง Oracle ได้ปล่อย Oracle JDK หรือ Oracle OpenJDK 17 ออกมา
พร้อมกับการเปลี่ยน license การใช้งานใหม่
จากเดิมที่เป็น OTN license หรือต้องจ่ายค่า subscription
สำหรับการใช้งาน commercial และ production

แต่ใน Oracle JDK 17 ขึ้นมา
เปลี่ยนเป็น Oracle No-Fee Terms and Conditions แล้ว
ทำให้เราสามารถใช้งานได้แบบฟรี ๆ
ทั้งระบบแบบ commercial และ production แล้ว ไม่ต้องกังวล

อีกทั้งยังสามารถ download ผ่าน command line ได้เลย
และไม่ต้อง login อีกต่อไปแล้ว

ดูความารถใหม่ ๆ ใน JDK 17 ได้

ยานแม่มาเอง vscode.dev (preview version)

$
0
0

มาแล้วสำหรับ VS Code บน browser แบบ official (preview version)
แน่นอนว่า ไม่ต้องติดตั้งอะไรเพิ่มก็ใช้ได้เลย
สามารถเปิดและแก้ไขไฟล์ต่าง ๆ จากเครื่องเราได้เลย
ผ่าน File System Access API บน Edge และ Chrome เท่านั้น
รวมทั้งเปิด code จาก GitHub repository ตรง ๆ ได้อีกด้วย
เพียงแค่ authen/authroize ก่อนเท่านั้นเอง

ยิ่งการพัฒนาบนเครื่องที่ resource ไม่เยอะนัก ก็สะดวกขึ้น

แต่ถ้าบน browser ไม่รองรับ File System Access API
ก็สามารถทำงานผ่านการ upload/download ได้เลย

ยิ่งถ้าเป็นสาย Frontemd น่าจะยิ่งสะดวก

Java framework ที่น่าสนใจในปี 2021

$
0
0

มีโอกาสไปแนะนำ Java framework ที่น่าสนใจ
สำหรับการพัฒนาระบบงานใน 2021 ว่ามีอะไรบ้าง ?
จึงทำการสรุปไว้นิดหน่อย
โดยมีทั้งตัวเก่าและใหม่ เพื่อให้เห็นแนวโน้มของการใช้งาน

Java framework ประกอบไปด้วย

โดยที่ตัวพื้นฐานสุด ๆ ของสาย Java คงหนีไม่พ้น Spring Boot
ซึ่งมีพื้นฐานมาจาก Spring framework
ที่มาพร้อมกับกรอบการทำงานที่พร้อมต่อการใช้งานใน production-grade
รวมทั้งสามารถ integrate เข้ากับ technology ใหม่ ๆ ได้ง่าย
พร้อมด้วยการ configuration, testing และ deploy ที่ง่าย
และเน้นเป้าหมายสำหรับ Microservices โดยเฉพาะ
แต่ก็ยังนำมาสร้าง monolith กันอยู่ !!

ต่อมาก็ Vert.x ก็จะสร้างมาสำหรับพัฒนา Reactive application
หรือแนวทางคล้ายกับ Spring Webflux
สามารถพัฒนาได้ทั้ง Java, Scala และ Kotlin

ส่วน Micronaut นั้นสร้างมาสำหรับ Serverless application เป็นหลัก
น่าจะเป็นตัวแรก ๆ เลยด้วยซ้ำ
ซึ่งบาง feature ก็สามารถทำงานร่วมกับ Spring Boot ได้เลย
และเป้าหมายอีกอย่างคือ ช่วยลด memory ที่ใช้งาน และการ start up ที่เร็วขึ้นมาก

Quarkus พัฒนาจาก RedHat
เป้าหมายหลักสำหรับ Cloud-Native Application โดยเฉพาะ
รวมทั้งเรื่องของการสร้าง container ได้เอง และ reload เมื่อมีการแก้ไขอย่างรวดเร็ว
ที่สำคัญยังมีระบบ plugin เพื่อขยายความสามารถเข้ามาอีกด้วย

สุดท้ายคือ GraalVM เป็น static compilation
ทำการ build ออกมาในรูปแบบ native binary ตามแต่ละ OS ได้เลย
อีกทั้งยังเพิ่มความสามารถ AOT
และ integrate กับ library/framework ต่าง ๆ จากข้างต้นได้
ส่วนของการ debug, profiling และ monitoring ก็ง่ายขึ้น
รวมทั้งเรื่องการใช้งาน resource ที่น้อยลงอีกด้วย

AdoptOpenJDK ย้ายไปยัง Eclipse Adoptium แล้ว

$
0
0

หลังจากที่ Oracle JDK มีการเปลี่ยนแปลง licence สำหรับ JDK 17 แล้วนั้น
ทางด้าน AdoptOpenJDK ที่ทำการ build OpenJDK ให้ใช้งานแบบฟรี ๆ
ก็ทำการย้ายไปอยู่ใน Eclipse Foundation
และได้เปลี่ยนชื่อไปเป็น Adoptium นั่นเอง
โดย JDK จะมีชื่อว่า Temurin

ไปอ่านกัน React Docs ตัวใหม่ (Beta อยู่นะ)

$
0
0

สำหรับนักพัฒนาฝั่ง Frontend สาย React
เป็นเรื่องที่น่ายินดีมาก ๆ ที่มีการสร้าง document ขึ้นมาใหม่
เนื่องจากของเดิมเข้าใจยากพอควรสำหรับคนเริ่มต้น
ซึ่งมีทั้ง class component รวมกับ function component และ Hooks
จัดได้ว่ามั่วก็ว่าได้ ยิ่งคนเริ่มต้นยิ่งหนักหนา !!

โดยตอนนี้ได้ออก React Docs ตัวใหม่ออกมา
แต่ยังเป็น beta version อยู่นะ
ซึ่งอยู่ใน PR ตัวนี้

เป้าหมายของ React Docs ตัวใหม่ ประกอบไปด้วย

  • มาภาพและ diagram เพื่ออธิบายการทำงานของ React ให้อย่างชัดเจน
  • เริ่มต้นกับการใช้งาน Hooks เลย เป็นตัว default
  • มี Code diagram บอกการทำงานของ Hooks ว่าเป็นอย่างไร ซึ่งดีมาก ๆ
  • มี code ตัวอย่างแบบ interactive เหมือนกับทางค่าย Angular แบะ VueJS ที่เขาทำมาอย่างดี

ตัวอย่างของ code ตัวอย่างแบบ interactive

ตัวอย่างการอธิบายเรื่องของการใช้งาน State

เอกสารดี ๆ ก็ทำให้ productivity ของการพัฒนาดีขึ้นอย่างมาก
ขอให้สนุกกับการ coding ครับ

บันทึกคำแนะนำ การค้นหาข้อมูลใน Google

$
0
0

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

เรื่องแรก เกี่ยวกับ keyword ที่ใช้ค้นหา

ถือว่าเป็นสิ่งที่สำคัญสุด ๆ ถ้าเลือก keyword ไม่ถูก
ค้นหาอย่างไรก็ไม่พบ หรือจะพบก็ใช้เวลานาน
ดังนั้น เรื่องนี้ต้องเรียนรู้เพิ่มเติมในสิ่งที่สนใจ หรือ ค้นหา

เรื่องที่สอง การจัดการ keyword ที่ค้นหา

  • ใส่ double quote เข้าไป สำหรับคำ หรือ ประโยค ที่ต้องการค้นหาทั้งหมด หรือ required นั่นเอง เช่น "how to coding"
  • สามารถใช้ + สำหรับค้นหาคำที่ต้องการ เช่น how to coding+programming ต้องมีทั้งคำว่า coding และ programming
  • ใส่ - เข้าไปหน้าคำที่ไม่ต้องการ หรือ exclude word เข้าไปได้ เช่น -coding
  • ใส่ * หรือ widecard สำหรับคำหรือประโยคที่ขาดไป เช่น coding with *
  • ใส่ ~ สำหรับการค้นหาคำเหมือน หรือ synonym
  • ถ้าต้องการค้นหาหลาย ๆ เงื่อนไข สามารถใช้ OR และ AND ได้อีกด้วย
  • สำหรับตัวเลข เช่น ปี, ราคา สามารถกำหนดช่วงได้ด้วย เช่น 2019...2021 เป็นต้น
  • หรืออาจจะใช้ after:2000 หรือ before:2021 ได้อีกด้วย

เรื่องที่สาม สามารถใส่ operator ต่าง ๆ ได้อีก

  • filetype:pdf สำหรับค้นหาข้อมูลไฟล์ pdf แต่ไม่ได้ support ทุกชนิดนะ
  • site: <target site> ระบุ site ที่ต้องการค้นหา
  • cache: <target site> ระบุ site ที่ต้องการค้นหาจาก cache ของ Google
  • related: <target site> ระบุ site ที่ต้องการค้นหา
  • allintext: <คำ หรือ ประโยค> ค้นหาทุกคำหรือประโยค
  • define: <คำ> สำหรับดูความหมายของคำนั้น ๆ

เรื่องที่สี่ เป็น tip ง่าย ๆ

  • ต้องการแปลคำก็ใช้ translate coding to thai
  • ต้องการใช้ timer ก็ใช้ 30 min timer
  • ต้องการใช้ Stopwatch
  • หรือจะเป็นการดูค่าเงิน
  • หรือจะเป็น COVID-19 เป็นต้น

สามารถดูเพิ่มเติมได้จาก Google Advance Search ได้
น่าจะช่วยให้การค้นหาเป็นเรื่องที่ง่ายขึ้น


หนังสืออธิบายเรื่อง Container-based app ด้วยหมูสามตัว

$
0
0

เปิดไปดูหนังสือแจกฟรีของทาง RedHat เจอหนังสือที่น่าสนใจคือ
The Container Coloring Book: Who's afraid of the big bad wolf ?
ซึ่งเป็นหนังสือเพียง 18 หน้าเท่านั้น
อธิบายถึงสิ่งต่าง ๆ ที่น่าสนใจใน container-based
ด้วยการอธิบายเหมือนนิทานเลย
ทำให้เข้าใจได้ง่ายยิ่งขึ้น
ประกอบไปด้วย

  • Namespace
  • Resource control
  • Security
  • Image
  • Open standard
  • Management

ลองไป download มาอ่านกันดูครับ
น่าจะพอมีประโยชน์

เรื่องขำ ๆ สำหรับ Java บน Kubernetes

$
0
0

ไปเจอรูปฮา ๆ สำหรับการ deploy Java app บน Kubernetes
แล้วพบว่า มันทำงานได้ช้า
จะแก้ไขอย่างไรกันดีนะ ?

บันทึกการอ่านเรื่องวิธีการ scaling database (RDBMS)

$
0
0

เห็นใน feed มาการ share บทความเรื่อง
How to design a system to scale to your first 100 million users ?
มีรายละเอียดเยอะมาก ๆ
หนึ่งในเรื่องที่สนใจคือ การ scaling database (RDBMS)
เนื่องจากยังคงเป็นที่นิยมในการใช้งาน

ตัวอย่างความนิยมของ Database model ต่าง ๆ จาก DB Engine Ranking 2021

โดยวิธีการ scale RDBMS ที่แนะนำมาดังนี้

  • Replication
  • Federation
  • Sharding
  • Denomalization
  • SQL tuning

Replication

เริ่มด้วย Master-Slave replication
ทำการ copy ข้อมูลจาก database หลักออกมา
โดย database server จะมี 2 กลุ่มคือ

  • Master สำหรับเปลี่ยนแปลงข้อมูล ทั้งเขียน แก้ไข และ ลบ
  • Slave สำหรับการอ่านข้อมูล สามารถเพิ่มจำนวน server ได้

เมื่อข้อมูลใน Master มีการเปลี่ยนแปลง
จากนั้นจะทำ update ข้อมูลไปยัง Slave ด้วย
จะเป็นทั้งแบบ sync และ async
แน่นอนว่าจะมีเวลาที่ข้อมูลจะไม่เท่ากัน หรือ lag time
ซึ่งต้องระวังไว้ด้วย

ที่สำคัญถ้า Master ล่มลงไป จะส่งผลให้ไม่สามารถเปลี่ยนแปลงข้อมูลได้
ส่วนการอ่านยังคงทำงานได้ เพราะว่าไปที่ Slave
แต่เราสามารถ promote Slave ไปเป็น Master ได้อีกด้วย
หรืออาจจะทำ Multi-master replication ได้อีกด้วย
จะเยอะไปไหน
ยิ่งทำยิ่งซับซ้อนนะ

Federation

เป็นการแบ่ง database ตาม feature หรือกลุ่มของการทำงาน
ไม่รวมข้อมูลใน database เดียวกับแบบเยอะ ๆ หรือ monolith
ทำให้สามารถจัดเตรียม database ให้เหมาะกับข้อมูลของ feature นั้น ๆ ได้ง่ายขึ้น
ลด single point of failure และ เพิ่มการทำงานให้ดีขึ้น
แต่ระวังการแบ่งผิดด้วยละ

Sharding

อีกชื่อหนึ่งคือ การ partition data ออกไป
ทำการแบ่งข้อมูลแยกออกไปตามที่ต้องการ เช่น

  • ข้อมูลแยกตามการ hash function
  • ข้อมูลแยกตามทวีป ภาค ตามจังหวัด

แต่ต้องดูด้วยว่า use case การใช้งานข้อมูลเป็นอย่างไร
มิเช่นนั้น อาจจะมีการใช้ข้อมูลที่แตกต่างกัน
ทำให้บาง databaseจะใช้งานหนักหรือน้อย
รวมทั้งระวังการ rebalance data ใหม่ด้วย

จะสังเกตได้ว่าทั้ง Federation และ Sharding
เป็นวิธีการแบ่งข้อมูลขนาดใหญ่ ให้มีขนาดเล็กลง
และเหมาะสมต่อการใช้งานอีกด้วย
เพราะว่า ถ้าข้อมูลมีขนาดใหญ่มาก ๆ การ scale ก็ยากตามเช่นกัน

Denormalization

เป็นแนวคิดตรงข้ามกับ Nomalization
ที่พยายามจะเก็บข้อมูลให้มีประสิทธิภาพมากที่สุด
แต่ปัญหาตามมาคือ การดึงข้อมูลมาใช้งาน
เพราะว่ามักจะพบว่ามีการ join ข้อมูลจาก table ต่าง ๆ มากมาย
ยิ่งข้อมูลมากขึ้น table มากขึ้น
การดึงข้อมูลจะใช้เวลาและ resource จำนวนมาก
ส่งผลให้ระบบไม่สามารถรองรับผู้ใช้งานจำนวนมากได้
ดังนั้นจึงเป็นที่มาของ Denormalization

ใช้สำหรับการออกแบบการเก็บข้อมูลเพื่อการอ่าน (Design for read)
อีกอย่างถ้าข้อมูลมีจำนวนมาก ๆ
ควรต้องคัดข้อมูลให้เหลือเท่าที่จะใช้งานอีกด้วย
เพื่อลดเวลาและ resource ของการดึงข้อมูลอีกด้วย

แต่ละวิธีการนั้น เราควรต้องรู้และเข้าใจก่อน
จากนั้นกลับมาดูว่า วิธีการใดเหมาะกับปัญหาหรืองานของเรา

จดบันทึกการใช้งาน PostgreSQL command line (psql)

$
0
0

หลัง ๆ มาใช้งาน psql หรือ PostgreSQL command line บ่อย ๆ
สำหรับการ access เข้าใช้งาน PostgreSQL server
จึงทำการจดบันทึกไว้หน่อย เพราะว่า จำไม่ค่อยได้

  • เข้าใช้งานด้วยคำสั่ง $psql -U <username> -d <database> -W
  • \l ดู database ทั้งหมด
  • \c <database> เข้าใช้งาน database name ที่ต้องการ
  • \dt ดู table ทั้งหมดใน database ปัจจุบัน
  • \dt+ ดู size และ description ของ table เพิ่มเติม
  • \d <table name> ดูโครงสร้างของ table
  • \dv ดู view ทั้งหมด
  • \df ดู function ทั้งหมด
  • \dx ดู extension ที่ติดตั้งทั้งหมด
  • \du ดู user ทั้งหมด
  • \e ทำการเปิด editor เพื่อแก้ไข command
  • \s <file name> บันทึก comand ลง file
  • \! clear สำหรับ clear หน้าจอ
  • \h => Help
  • \? ดูว่ามี command อะไรให้ใช้งานบ้าง
  • \q ออก เลิกใช้งาน ...

ต่อไปถ้าจำไม่ได้ น่าจะค้นหาเจอที่ blog ตัวเองแล้ว

หัดเขียน K6 extension กันหน่อย

$
0
0

K6 เป็นเครื่องมือสำหรับการทำ performance testing
ซึ่งเขียนอธิบายการใช้งานง่าย ๆ ไปที่ Load testing with K6
โดย K6 นั้นพัฒนาด้วยภาษา Go
แต่เขียน script ของการทดสอบด้วยภาษา JavaScript
ซึ่งใช้งานผ่าน library ชื่อว่า Goja นั่นเอง

คำถามที่น่าสนใจคือ

ถ้าต้องการเพิ่มความสามารถต่าง ๆ ของ K6 ขึ้นมาจะต้องทำอย่างไร ?

คำตอบคือ K6 Extension นั่นเอง

เป็น extension หรือส่วนต่อขยายของ K6
โดยมี library ภาษา Go ชื่อว่า xk6
ช่วยให้นักพัฒนาและ tester เพิ่มในสิ่งที่ไม่มีใน K6 ได้ง่ายขึ้น
ดูตัวอย่าง extension ที่มีใน community

ดังนั้นการทำความเข้าใจมากขึ้น มาลองเขียน extesion แบบง่าย ๆ ดีกว่า

ซึ่งพัฒนาด้วยภาษา Go
ดังนั้นโดยมาทำ Hello World extension กัน

ขั้นตอนที่ 1 ทำการติดตั้ง k6 และ xk6

[gist id="50ff67e4abe33bbc64c7c9059f9ead7c" file="1.txt"]

ขั้นตอนที่ 2 ทำการสร้าง extension ด้วยภาษา Go

[gist id="50ff67e4abe33bbc64c7c9059f9ead7c" file="demo.go"]

จากนั้นทำการ build extension ด้วย xk6 ดังนี้

[gist id="50ff67e4abe33bbc64c7c9059f9ead7c" file="2.txt"]

ขั้นตอนที่ 3 ทำการเขียน test script ด้วยภาษา JavaScript

โดยใช้งาน extension ชื่อว่า demo ดังนี้

[gist id="50ff67e4abe33bbc64c7c9059f9ead7c" file="test.js"]

จากนั้นทำการ run script ด้วย k6
จะได้ผลการทำงานดังนี้

[gist id="50ff67e4abe33bbc64c7c9059f9ead7c" file="3.txt"]

เพียงเท่านี้ก็สามารถสร้าง extension ของ K6 แบบง่าย ๆ ได้แล้ว

Viewing all 2000 articles
Browse latest View live