สรุป Backend Meetup 2023

Backend Responsibility สำหรับ Session นี้เป็น Session แห่ง Keyword ครับ ว่า Backend มีอะไรที่เกี่ยวข้องบ้าง – GraphQL มาแก้ API เรื่องเดียวกัน แต่มีหลายแบบ web / mobile มี ซ้ำซ้อน graphQL มาให้ Client มาขอ Field ที่ต้องการได้เองเลย- gRPC – lightweight soap contract สรุป อาจจะไม่ต้องมารู้ทั้งหมดก็ได้ – ไม่ได้จำเป็นต้องเลือกใช้ทุกอย่าง ตามบริบทที่เจอ – แล้วตอนลงมือทำ ไม่แตะหมด อาจจะแบ่งตาม Role / Responsibility ในองค์กร สิ่งที่สำคัญ: การเก็บองค์ความรู้ (Business Domain) ที่ตัว Backend ขมวด และจัดไว้ มันที่มูลค่าทางธุรกิจ ซึ่งหลายทีจะประสบปัญหาในการดูแล เพราะ คนออก เป็นต้น Slide: BackEnd Resposibilities เรื่อง log เรื่องเล็กเรื่องไม่ log เรื่องใหญ่ ที่มาของ log: มาจาก ship’s log ที่ใช่่คำนวณความเร็วเรือ/การเส้นทางในการเดินทาง พอนานเข้าเอามาปรับใช้เรื่อง IT โดยตัว log เรื่องง่ายๆ แต่ทำปวดหัว ตอนที่ต้องมาหาสาเหตุ Is Logging a requirement?Ans: ไม่ แต่ต้องมีหลักฐานตอนทำงาน เอาไว้สืบคดี แต่ถ้าเยอะไปก็ไม่ดี Choose the Right Log Level (Ref: What is Debug Logging? (crowdstrike.com))…

สรุป Software Architecture Meetup 2023

จะบอกว่าไปผิดตึกด้วย 55 นึกว่าอยู่ฟอร์จูน เลยมาดูใน Event Pop อีกที เดินมา G Tower หัวข้อประมาณ ดังนี้ Architecture Kata, Learning Software Architecture by doing Pain point Software Architecture KATA – Learn by doing ทำให้ซ้ำๆจดจำ ถ้าฝั่ง Dev Code Kata เช่น โจทย์เดียวกัน แต่ท่าไม่เหมือนกัน มี constraint เช่น ห้ามใช้ if เพื่อฝึกจะได้พร้อมตอนใช้จริง – Architecture Kata Architecture Kata คิดโดย Ted Neward มาฝึก เพื่อมาลองผิด ถูกในการทำ Architecture โดยเป็นการจับกลุ่มเล็ก แบ่งกลุ่มย่อยๆ มาลองออกแบบ โดยมี Benefit Activities Key ไม่มีผิด ถูก เน้น disscussion ได้อิสระ – Architecture Session Preparation Kata Activity Resource: Architectural Katas: Practicing Architecture Saga Pattern 101: Orchestrating Distributed Transactions SAGA pattern สำหรับ distribute Architecture มีหลาย action เกิดขึ้นต่อเนื่องกัน และมีความสัมพันธ์กัน เช่น ซื้อตั๋ว และ จองโรงแรม และ จองเครื่องบิน ถ้าสำเร็จหมด ถือว่าจองทริปสำเร็จ…

บันทึก Migrate .NET Framework > .NET6

Blog นี้เขียนดองมานานมาก ตั้งแต่กลางปีที่แล้ว แล้วค้างไปทำเรื่องอื่นๆ ตอนนี้จะเปิดตัว .NET8 แล้ว ถ้ารออีก อาจจะได้แชร์ปีปลายปีหน้าแทน 555 เลยคิดว่า เขียนให้หมดดีกว่า เดี๋ยวลืม Stage แรก เป็นส่วนของการเริ่มต้นเลย ตอนแรก Code มันจะยุ่งเหยิงนิดนึง แยกให้เป็นส่วนๆ นอกจากจัดกลุ่มตาม DLL ผมเอาตัว Layer Architecture มาช่วยได้ โดยแบ่งหน้าที่ ต้องคุยตามชั้นจากบน ลงล่าง ซึ่งมีรายละเอียดดังนี้ Stage1 แยก Logic ที่มันมั่วๆ มาปน UI Code-Behide / Controller มาแตกเป็น Service / Data Access และ DTO ตอนทำแรกจะเป็น .NET Framework 4.5 กว่าจะทำเสร็จใช้ไปสักพัก ขยับเป็น .NET Framework 4.7.2 แล้ว อีกเรื่องที่ควรทำ เรื่อง Automate Test มีตั้งต้นไปบ้างแล้ว Stage2 ต่อมาได้ข่าวเรื่อง NET Core ที่มัน Run บน Linux ได้ ตอนที่ได้ข่าวว่า Microsoft จะออกตัว NET Core มาสิ่งแรกที่ทำเลย โชคดีที่เลือกแบบ Layer Artitechture ไว้ เลยยกตัว ถ้าสังเกตุจากรูป Stage2 มันมีตัวกล่อง Pipe ขึ้นมา อันนี้จะมาแก้ปัญหาของ VB6 ไม่อยากทำเพิ่มแล้ว พยายามให้ PIPE มาช่วยคุยระหว่าง VB6 – .NET Issue ที่ต้องระวังจาก Stage 1 >…

The Cloud Camp Week#09 (K8S Part4: Resource/HealthCheck/Scale/Scheduler)

สัปดาห์นี้มีเรื่องวุ่นเกี่ยวกับ Wix ToolSet กลับมาที่เรื่อง K8S ของ Week นี้ครับ จะเน้นไปในส่วนของ Power of Pod ต่ออะไรที่ทำกับ Pod ได้ หัวข้อประมาณนี้ครับ สำหรับใครที่เข้ามาจาก Google ลองดู Blog ก่อนหน้าได้ครับ Resource Management ในตัว Pod เราสามารถกำหนดการใช้งาน Resource พวก CPU / Memory / Local Ephemeral / GPU ได้จาก 2 ส่วน ได้แก่ requests / limits การกำหนดข้อมูล requests / limits จะให้ตัว kube-scheduler เอาไปเป็นเงื่อนไขในการเลือก Node ด้วย โดย resource ที่กำหนดได้มีหลายตัว แต่ที่เรียนกันมี CPU / Memory //ตาม SI Model – Sample YAML หลังจากกำหนด requests / limits แล้ว จะเป็นหน้าที่ของตัว kubelet ที่จะติดต่อ Container Runtime เพื่อคุม Resource ตาม requests / limits ที่กำหนดไว้ – Best Practice – เราจะรู้ได้ไงว่าควรตั้ง resources.requests เท่าไหร่ถึงพอ ? อันนี้เขียนเพิ่มจากวันเสาร์ที่ได้ไปทำ Lab นะ Resource: – Resource Management for Pods and…

Ubuntu: Extend your LVM (Disk) space

พอดีว่ากำลังลอง Pull Image มาเล่นอะไรเรื่อยเปท่อยไป แล้วปรากฏว่ามันแจ้ง no disk space หลังจากลองตัวสอบพื้นที่ Disk เต็มจริงๆครับ ถ้าใครอยากรู้ว่า LVM คือ อะไร ผมเขียน Blog ไว้ครับ ^__^ Extend LVM Space

XRLabel ตัดคำไทยผิดเมื่อ Export PDF

ช่วงนี้มีช่วยน้องแก้ไข Report ที่ทำด้วย DevExpress ครับ แล้วที่นี้มันเจอปัญหากับภาษาไทย ในเคสที่ว่าถ้ามีข้อความยาวๆ มันตัดได้ไม่ถูกต้องครับ มันจะแหว่งๆ แทน ตามตัวอย่างด้านล่าง เวลาเจอประโยคยาวๆ ที่ไม่มี Space เว้นวรรค มันจะตัดคำแปลกๆ ถ้าใครที่ทำพวกเอกสารคงหงุดหงิด ใน MS Word มันมี Thai Distributed ทำไมไม่ทำ อะไรประมาณนี้ – Forward Contract คือสัญญาที่ลูกค้าและธนาคารตกลงซื้อเงินตราต่างประเทศสกุลหนึ่ง และขายเงินตราต่างประเทศอีกสกุลหนึ่ง โดยกำหนดจำนวนเงิน สกุลเงิน อัตราแลกเปลี่ยน และวันที่ทำการส่งมอบล่วงหน้าที่แน่นอน ซึ่งอัตราแลกเปลี่ยนล่วงหน้าที่กำหนดนั้น ไม่ใช่อัตราตลาดในอนาคต โดยในวันที่ทำการส่งมอบ อัตราแลกเปลี่ยนล่วงหน้าอาจสูงหรือต่ำกว่าอัตราแลกเปลี่ยนในตลาด ณ วันที่ส่งมอบก็ได้ – ตามระเบียบของ<<ตัวแปร>> ผู้ซื้อหรือผู้ขายเงินตราต่างประเทศล่วงหน้าต้องมีธุรกรรมรองรับการซื้อขาย (Underlying) และแสดงเอกสารต่อหน้าธนาคาร ณ วันที่ทำสัญญา Runtime ที่เกี่ยวข้อง Try & Error ทว่าปัญหานี้ ลูกค้าจะไม่ปิด UAT ครับ เลยต้องมีระดมสมอง มาแก้ไข แล้วที่นี้หลังจากลองแก้ไขปัญหาหลายๆวิธี Final Workaround Solution หลังจากลอง Research พบคำเตือนที่ต้องระวังครับ ดังนั้นการแก้ปัญหาจะเป็น Logic ดังนี้ครับ Reference

The Cloud Camp Week#08 (K8S Part3: Store Data)

สัปดาห์นี้ก็ Store Data ล้วนๆ สำหรับ part ก่อนหน้า Volumes ก่อนที่จะมาเรื่องใหม่ต้องมา Recap ก่อนจาก Part 1 ตัว Pod มันเก็บข้อมูลได้นะ แต่จะอยู่ชั่วคราว (ephemeral) เท่านั้น ดังนั้นเราจะพบ non-trivial problems ของ App ได้ ดังนี้ default pod ไม่ได้แชร์ไฟล์กันระหว่าง container นะ ดังนั้น Volume จะมาช่วยแก้ปัญหาพวกนี้ แต่ควรมาเข้าใจตัว YAML Pattern กันก่อน YAML Pattern Volume Type ที่เด่นๆ ดังนี้ – hostPath แบบนี้จะคล้ายกับตัว docker volume โดย Volume แบบ hostPath จะเอา path ของ node ที่ pod Deploy อยู่มา map กับ pod – emptyDir สร้าง Volume เปล่าๆ ผูกกับ pod (เกิด และตายไปด้วยกัน) ไม่จำเป็นต้องใช้ Path ของ Node แบบ hostPath อาจจะใช้ memory มา config ก็ได้ โดยจะมาแก้ปัญหาการแชร์ Data ระหว่าง Container ภายใน Pod Note: emptyDir จัดการโดย kubelet emptyDir can read and write the…

DB2 Data Type DECFLOAT แล้ว SQL Server ใช้อะไร ?

สำหรับ Blog นี้ผมก็ได้มาแก้ไข Module Perf ที่สรุปแล้วต้องให้ Field ประเภทที่ต้องเก็บทศนิยมละเอียดนิดนึง เลยได้ใช้ Data Type DECFLOAT ครับ แล้วที่นี้มีอีก Site ต้องใช้งานด้วย แต่ Site นั้นใช้ MS SQL / Azure SQL คราวนี้ต้องมาแปลง SQL ครับ ก่อนอื่น DECFLOAT คือ อะไร ? แล้วมันต่างกับ Decimal ยังไง ANSI SQL Syntax คล้ายๆกัน SQL Server / Azure SQL ต้องใช้ Data Type ไหน ? ตอนแรกคิดว่า Decimal แหละ แต่เพื่อความั่นใจลองหา Official Doc ยืนยันดีกว่า เพราะ ถ้าขึ้น Production ไปแล้ว มันตามแก้ยาก จากการลอง Research ดูทาง Microsoft มีคู่มือทำไว้ครับ “Guide to Migrating from DB2 to SQL Server and Azure SQL DB, SQL Server Technical Article” มีตารางไว้เลยครับ ซึ่งมันดีมากๆครับ สรุป DB2 Data Type DECFLOAT เท่ากับ SQL SERVER Data Type numeric ครับ Reference

The Cloud Camp Week#07 (K8S Part2:K8S Object)

สัปดาห์นี้เป็นสัปดาห์ที่วุ่นวายอีกสัปดาห์ มีเคส DB2 TableSpace Drop Pending / และ Podman เอ๋อๆครับ เอาหละมาดูหัวข้อที่เรียนของวันนี้กันครับ Kubernetes Object YAML File Workload Object Infra Object Interacting with Kubernetes Deployment Indepth – Intro มาจาก Week ก่อน – YAML – Deployment Strategy Example – Deployment revisionHistoryLimit – Command Pod LifeCycle Labels and Selectors Service Ingress Data Inter Change Concept Reference เพื่อความไม่ขาดช่วง มาดูของ Week ก่อนได้ครับ The Cloud Camp Week#06 (K8S Part1) | naiwaen@DebuggingSoft Kubernetes Object ตัว Object เป็นคำรวมๆที่เอาไว้อธิบาย ส่วนของ K8S (abstract รวบ เพื่อให้จัดกลุ่ม) เพื่อ ตัว Kubernetes Object ยังแบ่งมุมมองได้อีก 2 มุม นอกจากการจัด Object แล้ว ตอน Deploy Container ไปยังสามารถจัดกลุ่มด้วย namespace (แยก network) และ label YAML File ตัว K8S เราสามารถอธิบายสภาพของระบบว่ามีลักษณะอย่างไร (Desire State) ประกอบด้วย…