Project Management
July 1, 2023

LaiTa The Series

มาถึง product ตัวต่อไปที่เราอยากนำเสอ ได้แก่ !!!! Laita ( ไลต้า) Laita เป็น product ที่เราได้นำความสามารถของ AI as a Service มาเป็นส่วนหนึ่งในการพัฒนา. Laita นี้เหมาะสำหรับใคร และ Technology ที่เรานำมาใช้สำหรับการพัฒนางานนี้มีอะไรบ้าง บทความนี้เราจะพาเพื่อนๆไปลงลึกในรายละเอียดแต่ละจุดกันครับผม

ใครเหมาะแก่การใช้งาน LaiTa

เชื่อว่าเพื่อนๆหลายคนน่าจะต้องเคยไปงาน event และในงานเหล่านั้นก็จะมีช่างภาพ ซึ่งเมื่อหลังจบงานแล้ว ทางผู้จัดงานก็จะมีกองทัพรูปภาพมหาศาลส่งมาให้เราเพื่อเลือกรูปของตัวเองกลับไป สำหรับผู้ใช้งานอย่างเราก็จะคิดแล้วแหละว่า “ไหนหล่ะรูปเรา” “ต้องไถอีกเท่าไหร่ถึงเจอรูปตัวเอง”

💡 ใช้ Laita แล้วจะไม่ TaLai

Laita ในเฟสแรกนี้ เราพัฒนาให้เป็น service สำหรับการทำ face search คือการค้นหารูปตัวเองจาก Album โดยการอัพโหลดรูปตัวเองขึ้นไปในระบบ เพื่อทำการค้นหารูปที่มีหน้าเราอยู่ในนั้นเพื่อให้ง่ายต่อการค้นหา และเป็นการสร้างความประทับใจเล็กๆสำหรับ ผู้จัดงานและผู้ร่วมงาน และในอนาคตเราจะมีการพัฒนาเพิ่มเติมเพื่อให้ตอบโจทย์การทำงานให้หลายๆรูป รวมถึงผู้ใช้งานกลุ่มเป้าหมายใหม่ๆอีกด้วย

การนำ AI เข้ามาเป็นส่วนหนึ่งของ Product

Core service ของเรานั่นก็คือการทำ recognization ในการจำแนกใบหน้า เพื่อเปรียบเทียบความคล้ายของใบหน้าเพื่อนำมาทำ image searching หรือจำแนกวัตถุต่างๆภาพในรูปภาพว่ามีสิ่งใดบ้างทำให้เราจับกลุ่มของรูปภาพเหล่านั้นได้ ซึ่ง service ที่เรานำมาใช้เป็นพระเอกของการทำงานนี้ได้แก่ AWS Rekognition

AWS Rekognition — “AI as a Service”

AWS Rekognition เป็น AI as a Service ที่ให้บริการโดย AWS เป็นบริการที่ใช้ Deep Learning มาช่วยในการตรวจสอบและวิเคราะห์รูปภาพ ซึ่งตัว Rekognition เองนั้นได้รับการ tranning จากรูปภาพต่างๆมาเป็นจำนวนมาก ทำให้ความแม่นยำที่ได้ออกมาจากการวิเคราะห์นั้นถือว่าสูงมากเลยทีเดียว

Rekognition มี model ที่สามารถหยิบมาใช้งานได้ทันทีไม่ว่าจะเป็น

  • Label detection
  • Image Properties
  • Image moderation
  • Facial analysis
  • Celebrity recognition
  • Face comparison
  • Text in image
  • Personal Protective Equipment (PPE) detection

ทำให้ง่ายต่อการนำไปพัฒนาต่อเป็น product ต่างๆได้มากมาย Laita ของเรา ได้หยิบความสามารถของการทำ Face comparison มาเป็น core หลักร่วมกับการพัฒนาในด้าน Web application เพื่อให้ได้เป็น product ที่ตอบโจทย์ผู้ใช้งานมากยิ่งขึ้น

Infrastructure

เมื่อต้องการระบบที่ให้ทุกคนเข้าถึงได้รวดเร็วและเข้าถึงได้ทุกที่แบบไม่ติดขัด Cloud service ยังเป็นสิ่งที่เรารักเสมอ

Cloud ☁️

  • AWS — เป็น Cloud ที่เราเลือกใช้งาน โดย service ที่เราเลือกใช้งานหลักๆก็ยังเป็น serverless ที่เป็นตัวหลักในการทำงาน ผสมผสานกับ IaaS สำหรับบาง module
  • Supabase — เราเลือกใช้ Supabase เป็นทั้ง Authenticate และ DataBase เหตุผลคือเราไม่อยากโดน Vendor lock-in และต้องการ Time to market ที่เร็วที่สุดเท่าที่จะเป็นไปได้ ซึ่งตัว DataBase ของทาง Supabase นั้นจะเป็น Postgresql ซึ่งเราสามารถ Migrate ออกได้ตลอดเวลา ส่วน Auth นั้นจะเป็น JWT Base ทำให้ถ้าอยากย้ายผู้ให้บริการก็สามารถทำได้โดยไม่ติดปัญหาใด ๆ

Frontend — “หน้าบ้านของเรา”

โดยภาพรวมเรายังใช้งาน Stack คล้ายคลึงกับ ImageXYZ และ OgXYZ

User Facing

  • Vite — เราเลือกใช้งาน Vite (React-Framework) ในการพัฒนา Website ทั้งหมด และใช้ความสามารถในการ Build และ Export Static File ไปเพื่อนำไปใช้ในการ Hosting ต่อ

Languages

  • Javascript — เป็นภาษาหลักที่เราใช้ในการพัฒนาตัว Website ของเรา
  • HTML, CSS — อีกภาษาหนึ่งที่ขาดไม่ได้ในการพัฒนา frontend

Serve Static Content

  • Amazon S3 — ใช้สำหรับ Serve static content ที่เราได้ทำการ Build ออกมา เพื่อให้บริการผู้ใช้งานของเรา ซึ่งความสามารถในการทำ Static Hosting ของ S3 เป็นส่วนที่ช่วยให้ความตั้งใจของเราประสบความสำเร็จอย่างมาก

Authentication

  • Supabase — Authentication เราใช้ Provider เพียงแค่เจ้าเดียวนั้นคือ Google OAuth เพียงแค่เราเอาคีย์จาก Google มาใส่ลงไปใน Supabase เราก็จะสามารถให้ User Login ผ่าน Google ได้เพียงแค่คลิ๊กเดียว ส่วนการจัดการ Auth data นั้นจะอยู่ใน Build-in Table ของทาง Supabase ซึ่งเวลาที่เราอยากจะ Verify token เราสามารถทำผ่าน Supabase SDK เพียงแค่ 1 function ทำให้เวลาในการพัฒนานั้นสั้นลงและไม่ต้องกังวลเกี่ยวกับเรื่องการทำ Authentication

Edge Network

  • Cloudflare — ใช้เป็น CDN รวมถึงเป็น Domain management ของ Web Application ของเรา

Backend — “Time is King”

Languages

  • Python — เนื่องจากเราต้องจัดการกับข้อมูลซึ่งเป็นชนิดรูปภาพ ทำให้เราเลือกใช้ Python เพื่อสะดวกต่อการจัดการรูปภาพในอนาคต ซึ่งจริง ๆ แล้วเราก็มีแผนจะ Split Micro service ออกเป็นภาษาที่ Well know ง่ายต่อการ Maintain แต่ Core function ยังอยู่ที่ Python เป็นหลัก

Instance

  • EC2 — เราไม่อยากให้เกิด Cold start จึงเลือกใช้งาน Backend server แบบท่ามาตรฐานที่สุด แต่เลี่ยงใช้งานตระกูล T serise นะ เพราะถ้าเกิด Burst request เข้ามาจริงๆ มันจะแตกได้ เราเลยเลือกใช้ตระกูล C6a.large สำหรับใช้งานเป็น Server

LoadBalancer

  • NLB — ตัวช่วยในการ balance traffic ไปยัง backend ช่วยให้เราเพิ่ม Availability ของระบบได้มากยิ่งขึ้น

Database

  • Supabase — First SQL in 8 years. ยอมรับเรื่องหนึ่งว่าทำใจเพราะอยากได้ Time to market ที่ไวที่สุดเท่าที่จะทำได้ และด้วยความที่โตมากับ NoSQL เป็นหลัก SQL จึงเป็นอะไรที่เลี่ยงได้เลี่ยงมากที่สุด แต่อนิจจายังโชคดีที่ SDK ของทาง Supabase นั้น Wrap SQL Statement ให้อยู่ในรูปของ Method ซึ่งช่วยชีวิตคนที่ไม่เขียน SQL อย่างเช่นผมมาก ๆ

Storage

  • AWS S3 — แน่นอนว่าเราต้องเก็บพื้นที่เก็บรูปเป็นจำนวนมาก s3 จึงเป็น storage ที่ตอบโจทย์การทำงานของเราที่สุดในจุดนี้ เนื่องจากเป็น storage ที่ทนทาน และยังสามารถเข้าถึงได้รวดเร็ว

Security

  • AWS Cloudtrail — เราใช้ Cloudtrail สำหรับการ capture event ต่างๆที่เกิดขึ้นกับ object ทั้งหมดไว้ จุดนี้ทำให้มั่นใจได้เลยว่าเราสามารถ audit event ที่เกิดกับทุก object ได้

Gateway

  • Amazon API Gateway — การเลือกใช้งาน API Gateway ในแบบที่เป็น SaaS ช่วยให้เราลดความยากในการรับมือ request จำนวนมากลงไปได้ ทำให้เราไม่ต้องกังวลถึงการ scale หรือการใช้งานเมื่อมี request เข้ามามากๆ

Payment

  • Stripe — แค้นพลัง Speed การ Build Project ให้เร็วที่สุดเท่าที่จะทำได้ Payment เราก็เลยเลือกใช้ Stripe เนื่องจาก Integrate ง่าย, ใช้เวลาน้อย, เอกสารที่ต้องใช้ดำเนินการของใช้บริการก็ไม่ยุ่งยาก และที่สำคัญคือ User Experience ที่ได้จากการ CheckOut ผ่าน Stripe นั้นเป็นอะไรที่สุดยอดมาก ๆ เราอยากให้ User ได้รับประสบการณ์ลักษณะนี้

A lot of tools — “ตัวช่วยที่แสนดี”

CI/CD Tools

  • Jenkins — Tools หลักที่นำมาเป็นตัวทำ pipeline สำหรับการ build และ deploy service ต่างๆของเรา

Collaborate

  • Figma — Prototype collaborate tools เอาไว้ทำงานร่วมกันกับ UX/UI Designer

User Feedback Tools

  • Sleekplan — pluging ที่เอามาช่วยในการเก็บ user feedback ที่ implement กับ frontent ได้ง่ายมาก

Logging and Monitoring

  • AWS Cloudwatch — Cloudwatch เป็น service ที่เราหยิบใช้ในการเก็บ Logs และ Monitor การทำงานของ service ของเรา เป็น centralize logs ที่ใช้ในการเก็บข้อมูลและยังมี tools ที่นำ logs กลับมาวิเคราะห์ได้ง่ายอีกด้วย

Cloudtrail Setup

สิ่งสำคัญที่เราจะลืมไม่ได้เลยในการทำ webapplication ก็คือ security สำหรับผู้ใช้งานของเรา มองไปที่ข้อมูลหลักๆของเราก็คือรูปภาพที่ทุกคนได้อัพโหลดขึ้นมาที่ S3 bucket นั่นเอง เพื่อความปลอดภัยในการใช้งาน เราได้เปิดใช้งาน AWS Cloudtrail ในการ capture event ที่เกิดขึ้นกับ object ( ในที่นี้คือรูปภาพทุกๆรูป ) ทำให้เรา audit การกระทำทุกๆอย่างที่เกิดขึ้นกับรูปนั้นๆได้ feature ที่เราได้ implement ไปนั้นเรียกว่า Cloudtrail data event ผมคิดว่าหลายคนที่ใช้งาน AWS อยู่น่าจะรู้จัก Cloudtrail เป็นอย่างดี การเปิดใช้งาน capture data event ทำให้เราลงลึกไปถึง action ที่เกิดกับ object ที่เป็น data ได้เลย ตั้งแต่ object ใน S3 หรือ item ที่เก็บใน DynamoDb Table ก็สามารถทำได้ด้วยเช่นกัน ถือว่าเป็น feature ที่ดีและมีประโยชน์มากๆเลยทีเดียว

S3 Presign-url

S3 Presign-url คือการส้ราง URL พิเศษแบบจำกัดเวลาขึ้นมาชั่วคราวเพื่อใช้งานการ View, Download หรือ Upload Object ที่อยู่ใน S3 ซึ่ง Laita ได้นำเทคนิคนี้มาใช้งานเพื่อเป็นส่วนหนึ่งในการพัฒนาเพื่อเพิ่มคุณภาพในด้านความปลอยภัยแต่ว่ายังสามารถให้ผู้ใช้งาน ใช้งานได้อยากสะดวกสะบายเช่นเดิม

EC2 IAM Role

Communication ระหว่า backend ไปยัง service ต่างๆใน AWS นั้นสิ่งที่จำเป็นในการเรียกใช้ผ่าน SDK ก็คือ access_key และ secret_key ซึ่งเราสามารถ configure ได้ผ่าน aws cli หรือใส่เป็น parameter ให้ code เรียกใช้งาน แต่ๆๆๆๆ การ develop ในท่าที่บอกไปอาจจะไม่ใช่วิธีทีดี เนื่องจากว่าการที่เรามี credential ใส่ไว้ในเครื่องนั้นอาจจะไม่ปลอดภัย เพราะถ้าหาก credential นั้นหลุดไปก็จะทำให้ service ของเราถูกเรียกใช้งานจากที่ไหนก็ได้ Best practice ที่ AWS แนะนำเลยก็คือการ assign role ให้ service ต้นทาง และใช้งาน Policy ที่กำหนดไว้ภายใน Role นั้นเรียกใช้งาน service ปลายทางต่อไป ในกรณี backend ของเรา run อยู่ที่ EC2 เราก็จะทำการสร้าง Role ขึ้นมาและ assign role นั้นไปยัง EC2 เพื่อให้ติดต่อไปยัง S3 ที่ระบุไว้ใน Policy เท่านั้น

ปัญหาที่พบ

  • Data Transfer สุดแพง : หลีกเลี่ยงไม่ได้สำหรับการใช้งาน Public Cloud ที่ต้องเจอกับค่า data transfer out ที่ถือว่าโหดร้ายพอสมควร ซึ่งเราก็ไม่น่าจะหนีพ้น เพราะรูปภาพทั้งหมดนั้นได้ถูกเก็บไว้ที่ S3 ซึ่งในการเปิดดูหรือ download ลงมายัง Computer ส่วนนี้ก็เป็น data-out เช่นกัน แต่ก็ยังโชคดีทีกว่าในการใช้งาน data ภายใน region ของ S3 นั้นไม่ถูกคิดว่าบริการ ซึ่งเป็นจุดที่ช่วยบรรเทาอาการกระเป๋าเบาไปพอสมควรเลย

เปิดท้ายขายของ

แม้ว่า Laita ตอนนี้จะยังอยู่ในช่วงพัฒนา ที่มีแผนการให้บริการในอีก 1-2 เดือนข้างหน้า หากเราเปิดให้บริการแล้วทางเรามี free tier ให้ทุกคนลองเข้ามาลองใช้งานอย่างแน่นอน และถ้าหากติดใจก็สามารถ subscribe เพื่อใช้งานเราต่อไปได้ สำหรับ package ที่ให้บริการนั้นมีอะไรบ้าง เดี๋ยวเราจะมาบอกทุกคนอีกทีนะครับ แต่รับรองได้ว่าคุ้มค่าต่อการใช้งานแน่นอน

Exploring the Classical Waterfall Model in Software Engineering
Project Management
Aug 3

Exploring the Classical Waterfall Model in Software Engineering

ในวงการวิศวกรรมซอฟต์แวร์นั้น มีแบบจำลองการพัฒนาหลายรูปแบบที่เกิดขึ้น แต่ละรูปแบบนั้นมีความแตกต่างทั้งในด้านข้อได้เปรียบและข้อจำกัด โดยวันนี้จะมาแนะนำแบบจำลองพื้นฐานอันหนึ่ง แบบจำลอง Classical Waterfall
Understanding the Software Development Life Cycle (SDLC)
Project Management
Jul 25

Understanding the Software Development Life Cycle (SDLC)

วงจรชีวิตในการพัฒนาซอฟต์แวร์ (Software Development Life Cycle - SDLC) เป็นกระบวนการที่มีโครงสร้างและเป้าหมายเพื่อให้การพัฒนาซอฟต์แวร์เป็นไปอย่างมีประสิทธิภาพและซอฟต์แวร์ที่ออกมามีคุณภาพดี โดยโพสนี้จะพาสำรวจขั้นตอนต่าง ๆ ของ SDLC และใจความสำคัญของแต่ละขั้นตอนว่าเป็นมาอย่างไร
How to choose a PM Framework
Project Management
Jul 14

How to choose a PM Framework

เมื่อพูดถึงการเลือก Project Management Framework อาจเป็นเรื่องที่น่าหนักใจเนื่องจากมีตัวเลือกมากมาย อย่างไรก็ตามนี่คือวิธีที่คุณสามารถเลือก Project Management Framework ที่เหมาะสมสำหรับโครงการของคุณ:
Aa

© 2023, All Rights Reserved, VulturePrime co., ltd.