บันทึก 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 เอ๋อๆครับ เอาหละมาดูหัวข้อที่เรียนของวันนี้กันครับ เพื่อความไม่ขาดช่วง มาดูของ 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) ประกอบด้วย Kubernetes Object อะไรบ้าง หน้าที่ของ K8S มันจะทำข้อตกลง “record of intent” ตามที่เราระบุไป ตอนนี้ที่เห็นแล้วจะเป็นตัว replicaSet ที่มาช่วยให้ Pod อยู่ตามที่ตกลงไว้ การอธิบายไฟล์ที่กำหนดตัว Desire State จะมี 2 รูปแบบ YAML / JSON ตอนนี้จะอธิบายตัว YAML (key:value + เรื่อง indent) ก่อนว่ามีส่วนประกอบอะไรบ้าง สำหรับคำสั่งนอกจาก kubectl apply [-f FILENAME | -k DIRECTORY] มี kubectl…

How to setup GIT with SSH Authenication

empty train rail with light

1. Generate Key-Pair Windows / Linux / Mac is using same commands. 2. Add your key to the SSH agent Windows Linux / Mac 3. Provide GitHub with your public key Support with multiple user / host via SSH Config if you have multiple user. you can spread by customizing host in SSH Config, In example. I have 3 git accounts 2 GitHub and 1 in GitLab. I have modified SSH Config like this. Reference

LVM คือ อะไร ?

พอดีว่ากำลังลอง Pull Image มาเล่นอะไรเรื่อยเปื่อยไป แล้วปรากฏว่ามันแจ้ง no disk space หลังจากลองตัวสอบพื้นที่ Disk เต็มจริงๆครับ LVM คือ อะไร ? LVM หรือ Logical Volume Manager คือ รูปแบบการจัดการ Disk ของ Linux แต่จริงๆ เหมือนจะแอบคล้าย AIX นะ โดยแยกเป็น Layer ดังนี้ ต่อไปส่วนที่เหลือจะเป็นส่วนของ LVM เข้ามาจัดการได้