Skip to Content

Category Archives: Digital Business

การปรับตัวทางธุรกิจด้วย Low-code development platform

Low-code development platform

เป็นเครื่องมือที่ใช้ในการพัฒนา Application ที่ถูกออกแบบมาให้ใช้งานง่าย ในการพัฒนา Application ด้วย Low code จะใช้การ Coding ให้น้อยที่สุด หรือในบางจุดก็แทบจะไม่จำเป็นต้อง Coding เลย เพราะตัว Low code จะมีการทำงานแบบ Drag & Drop Interface ร่วมกับองค์ประกอบ (Engine) ต่างๆ ใน platform ได้เลย

ในปัจจุบันเราคงได้ยินกันมาว่าทุกองค์กรต้องปรับตัวเข้าสู่ Digital Transformation เพื่อให้องค์กรสามารถเปลี่ยนแปลงทั้งกระบวนการทำงานภายในและตอบสนองต่อการเปลี่ยนแปลงของตลาดให้สามารถสร้างคุณค่าสู่ลูกค้าของเราได้อย่างรวดเร็วและมีประสิทธิภาพ ในการแข่งขันทางธุรกิจเราไม่สามารถรอและปล่อยให้คู่แข่งนำหน้าเราไปก่อนได้ ดังนั้นในการนำ Low-code development platform ที่เหมาะสมกับระบบงาน และเหมาะสมกับองค์กรมาใช้งานจำมีความสำคัญต่อการปรับตัวเป็นอย่างมาก

 

Low code จะช่วยให้องค์กรที่กำลังปรับตัวเข้าสู่ Digital Transformation สามารถปรับเปลี่ยนและพัฒนา Solution Digital ต่างๆ ได้อย่างมีประสิทธิภาพ ด้วยคุณประโยชน์ต่างๆ มากมาย เช่น

  1. เพิ่มขีดความสามารถในการพัฒนาระบบงาน: Low code ทำให้มีผู้ใช้งานหลายคนสามารถมีส่วนร่วมในกระบวนการพัฒนาโดยไม่จำเป็นต้องมีความเชี่ยวชาญในการ Coding ถือว่าเป็นการสร้างโอกาสให้ผู้ที่ไม่มีความรู้เรื่อง Coding มากนัก สามารถที่จะเป็นส่วนหนึ่งในการพัฒนา Application ได้
  2. สามารถพัฒนาระบบได้รวดเร็ว: Low code ช่วยลดระยะเวลาในการพัฒนา Application ลดการทำงานที่ซับซ้อน ไม่จำเป็นต้องเขียน Coding ทำให้การทำงานน้องลง และทำให้องค์กรสามารถปรับเปลี่ยน Application ได้อย่างรวดเร็วทันต่อความต้องการของตลาดและลูกค้า
  3. ลดต้นทุน ลดค่าใช้จ่าย: ด้วยการพัฒนา Application ที่สั้นลง ดังนั้นจำนวนวันในการพัฒนา Application ก็ลดลงเช่นกัน จึงทำให้สามารถลดค่าใช้จ่ายลงได้ ทำให้สามารถพัฒนา Application ให้มีประสิทธิภาพได้ด้วยต้นทุนที่ถูกลง
  4. สามารถทำงานร่วมกับระบบงานอื่นๆ ได้อย่างคล่องตัว: การทำงานของ Low code นั้นเป็น Technology ที่ถูกออกแบบมาให้รองรับการทำงานร่วมกับระบบงานอื่นๆ ได้อย่างคล่องตัว เช่นการทำ Automation process หรือการเชื่อมต่อกับระบบงานอื่นๆ เพื่อทำ Data processing ทำให้การทำงานสะดวกยิ่งขึ้นและตอบโจทย์การทำงานขององค์กรที่มีความซับซ้อนได้

 

ปัจจุบัน Low-code development platform ถูกนำไปใช้เป็นเครื่องมือในการพัฒนา Application ให้กับหลายๆ ธุรกิจ เช่น

  1. Finance & Banking: ในกลุ่มธุรกิจการเงินการธนาคารมีความจำเป็นต้องปรับตัวให้เข้ากับตลาด Digital ตลอดเวลา สามารถนำ Low code ไปพัฒนา Application สำหรับระบบงานภายใน ระบบการทำสัญญา และการประเมินความเสี่ยงในการให้สินเชื่อ รวมถึงการซื้อขายสินค้าออนไลน์
  2. Insurance: กลุ่มธุรกิจที่ต้องการความรวดเร็วในการออกผลิตภัณฑ์ใหม่ๆ ในทันต่อการเปลี่ยนแปลงของโลก สามารถนำ Low code ไปพัฒนาระบบงานเกี่ยวกับการจัดการเรื่อง Claim ระบบการจัดการกับสัญญาประกันภัย ระบบการคำนวณค่าเบี้ยและความเสี่ยงต่างๆ และระบบงานขายประกันออนไลน์
  3. Government: หน่วยงานภาครัฐ ที่ปัจจุบันก็มีการนำ Low code ไปใช้ในการพัฒนาระบบงานบริหารต่างๆ ภายในหน่วยงาน เพื่อให้สามารถตอบสนองการทำงานภายในที่สะดวกและรวดเร็วยิ่งขึ้น
  4. Healthcare & Hospital: ปัจจุบันลูกค้าให้ความสำคัญกับสุขภาพมากขึ้น ดังนั้นในกลุ่มของโรงพยาบาลรวมถึงกลุ่มของสุขภาพและความงาม จึงมีการนำ Low code ไปพัฒนาระบบจัดการเกี่ยวกับการนัดหมาย ระบบบันทึกข้อมูลทางการแพทย์
  5. Manufacturing: การติดต่อประสานงานกับ Supplier หรือคู้ค้าของกลุ่ม Manufacturing มีการปรับตัวให้มีการทำงานเป็นแบบ Digital มากขึ้น ด้วยการนำ Low code ไปพัฒนาระบบบริหารจัดการคลังสินค้าและจัดเก็บสินค้า ระบบภายในกระบวนการผลิต ระบบบริหารจัดการอุปกรณ์และการบำรุงรักษา และระบบจัดการกับคู้ค้าและวัตถุดิบ

 

นอกจากนี้ยังมีอีกหลายๆ ธุรกิจที่นำเอา Low code ไปปรับใช้ในการทำงานเพื่อให้ทันต่อการเปลี่ยนแปลงของโลกในยุค Digital ในปัจจุบันลูกค้าสามารถเลือกหา Low code ที่เหมาะสม เพื่อนำมาเป็นเครื่องมือในการสนับสนุน Digital transformation และพัฒนาการทำงานจากภายในสู่ภายนอก โดยต้องคำนึงถึงความสามารถของ Platform

• ที่มีความยืดหยุ่นในทำงาน

• รองรับการขยายและการปรับปรุง Application ให้เพียงพอต่อความต้องการใช้งาน Platform

• ต้องมีความปลอดภัยและสอดคล้องกับข้อกำหนดต่างๆ ขององค์กร

• มีบริการหลังการขายที่ดี

• และมีความคุ้มค่าในด้านราคาที่เหมาะสมต่อการลงทุนระยะยาว

 

ทางบริษัท Stream I.T. ของเรามีความเชี่ยวชาญในการพัฒนา Application ด้วย Low-code development platform ที่มีชื่อว่า Rapidflows/Moji5 เป็น Low-code development platform ที่ได้ชื่อว่าคุ้มค่าต่อการลงทุนระยะยาว เพราะ Rapidflows/Moji5 นั้นสามารถพัฒนา Application ขึ้นมาได้ไม่จำกัดจำนวน Application และไม่มีการนับ User ผู้เข้าใช้งานระบบ (Unlimited Application and Unlimited User)

สนใจติดต่อสอบถามข้อมูลเพิ่มเติม และให้คำปรึกษาฟรี! ได้ที่ email: marketing@stream.co.th

 

Content Writer: Kanlayakorn Chotawisakul

Solutions Consultant Stream I.T. Consulting Ltd.

0 0 Continue Reading →

ช้อปดีมีคืน “Easy E-Receipt 2567” บริษัทของคุณมีระบบ e-Tax Invoice ไว้รองรับหรือยัง?

ตัวช่วยลดหย่อนภาษีจากโครงการรูปแบบช้อปดีมีคืน หรือ “Easy E-Receipt 2567

1 มกราคม – 15 กุมภาพันธ์ 2567 นี้!! บริษัทของคุณมีระบบ e-Tax Invoice ไว้รองรับหรือยัง

สตรีมฯ ผู้ให้บริการ e-Tax Invoice เพื่อให้บริษัทของคุณเริ่มใช้งานระบบได้อย่างรวดเร็ว เราพร้อมทำระบบให้สามารถใช้งานได้ภายใน 10 วัน บริษัทของคุณจะมีระบบ e-Tax ที่ถูกต้องตามระเบียบกรมสรรพากร ไว้ให้บริการลูกค้าของท่านได้อย่างแน่นอน!!

ที่มา: https://www.mof.go.th/th/view/file/44c9b0c3a4bdf96d278bef38652d222494305da33bf00955a7

 

ระบบ e-Tax หรือที่สตรีมฯ เรียกกันว่าระบบ TaxOne คือการให้บริการจัดทำ ส่งมอบ และเก็บรักษาใบกำกับภาษีและใบรับอิเล็กทรอนิกส์ (e-Tax Invoice and e-Receipt) แบบครบวงจร ทั้งแบบ Software as a Service (SaaS) แต่หากต้องการแบบ On-premise เราก็ทำได้เช่นกัน เพราะโซลูชั่นถูกออกแบบมาให้รองรับความต้องการและการใช้งานของทุกประเภทธุรกิจได้อย่างเหมาะสม มุ่งรักษาความปลอดภัยของข้อมูลเป็นสำคัญ

นอกจากนั้น มั่นใจได้ว่าระบบทั้งสองรูปแบบได้มาตรฐานตามระเบียบกรมสรรพากร เพราะสตรีมฯ ได้รับการคัดเลือกและรับรองให้เป็นผู้ให้บริการกลุ่มแรกในการเป็นผู้นำส่งเอกสารใบกำกับภาษีอิเล็กทรอนิกส์และใบรับอิเล็กทรอนิกส์ หรือ e-Tax Service Provider ได้รับ certified จาก ETDA และกรมสรรพากร ทีมงานผู้เชี่ยวชาญของเรามีประสบการณ์ในการนำส่งข้อมูลไปถึงกรมสรรพากรอย่างถูกต้องและปลอดภัยมายาวนาน

 

ทำไมถึงควรใช้ระบบ e-Tax “TaxOne” ของสตรีมฯ

บริการของเราครบจบทุกขั้นตอน ได้มาตรฐานตามที่กรมสรรพากรกำหนด ที่สำคัญมีทีมงานที่มีประสบการณ์คอยดูแลประกอบด้วย

1. บริการสร้างและจัดเรียงข้อมูลให้อยู่ในรูปแบบ XML และ PDF A-3

2. บริการให้คำปรึกษา แนะนำขั้นตอน และวิธีการลงทะเบียนเป็นผู้ใช้งานใบกำกับภาษีอิเล็กทรอนิกส์และใบรับอิเล็กทรอนิกส์ เพื่อช่วยอำนวยความสะดวกในการยื่นขออนุมัติจากกรมสรรพากร

3. บริการลงลายมือชื่อดิจิทัล เพื่อพิสูจน์และยืนยันตัวตนของผู้ออกเอกสารอิเล็กทรอนิกส์ ป้องกันการแก้ไขเปลี่ยนแปลงเอกสารโดยผู้ที่ไม่ได้รับสิทธิ์ คงไว้ซึ่งความถูกต้องครบถ้วนของข้อมูล และมีบริการส่งอีเมลให้ทางคู่ค้าของลูกค้าโดยอัตโนมัติ หลังจากลงลายมือชื่อ

4. บริการจัดเก็บข้อมูลตามระยะเวลาที่กำหนด รวมถึงการกำหนดสิทธิ์บุคคลที่ต้องการเข้าถึงข้อมูล

5. บริการ tracking ที่จะทำให้คุณเห็นภาพรวมของรายการทั้งหมดที่เข้ามาในระบบและดูสถานะของแต่ละรายการ แล้วจัดทำเป็น Dashboard และ Report ได้

 

หากสนใจทำระบบ e-Tax Invoice สามารถติดต่อสตรีมฯ ได้ที่ marketing@stream.co.th หรือโทร. 02-679-2233

0 2 Continue Reading →

ยกระดับการกระทบยอดข้อมูล (Reconciliation) ด้วย AI Reconcile

Reconcile (การกระทบยอด หรือจับคู่ข้อมูล สำหรับภาคธุรกิจ)

ในบล็อกนี้เราจะมาพูดถึงการเพิ่มขีดความสามารถในการทำ Reconciliation ด้วยการใช้ AI ที่กำลังมาแรงสุดในยุคนี้ค่ะ

Reconciliation หรือการกระทบยอด คงเป็นคำที่นักบัญชี-การเงิน เข้าใจและคุ้นเคยกันดีว่าเป็นกระบวนการนำข้อมูลของระบบต่างๆ จากแหล่งข้อมูลต่างๆ ที่เกี่ยวข้องกัน มาตรวจสอบและจับคู่ข้อมูลที่เป็นชุดเดียวกัน (Matching) แล้วหากข้อมูลไม่สอดคล้องกัน (Unmatched) ก็จะต้องมีกระบวนการจัดการข้อมูลเหล่านี้ต่อไป หรือเรียกว่าการ Reconcile (กระทบยอดข้อมูล)

มีเครื่องมือหลายอย่างที่ถูกพัฒนาขึ้นมาสำหรับช่วยในการตรวจสอบและประมวลผลเมื่อข้อมูลมีปริมาณมาก เช่น การเขียนสูตรใน Excel อย่างง่าย การทำ RPA (Robotic Process Automation) รวมถึง Application ที่เขียนขึ้นมาโดยเฉพาะ แต่ทั้งนี้ tool ต่างๆ เป็นเพียงการลดเวลาในการตรวจสอบและจับคู่ชุดข้อมูลเท่านั้น สุดท้ายแล้วคนที่เป็นเจ้าหน้าที่ก็ยังคงต้องค้นหาข้อมูลที่ไม่สอดคล้องกันด้วยตนเอง ซึ่งแน่นอนว่าต้องเสียเวลาและทรัพยากรไปพอสมควร

พอปัจจุบันมี AI มาช่วยประมวลผลและวิเคราะห์ข้อมูลได้ฉับไว ก็มีเครื่องมือเพิ่มขึ้นมา คือ Reconciliation ที่มี AI นำมาใช้ค้นหาการจับคู่ของข้อมูลที่ใกล้เคียงกัน ช่วยให้ค้นเจอข้อมูลที่ unmatched ได้ไวขึ้นมาก ธุรกิจสามารถตรวจสอบข้อมูลในระบบการเงิน รวมถึงตรวจสอบการซื้อขายสินค้า โดยนำเอา AI มาใช้จับคู่ข้อมูลและประมวลผลข้อมูลที่ไม่สอดคล้องกัน ช่วยลดเวลาและเพิ่มประสิทธิภาพให้กับกระบวนการเหล่านี้ได้เป็นอย่างดี


ตรวจสอบข้อมูลในระบบการเงิน

ในการตรวจสอบข้อมูลในระบบทางการเงินนั้น การใช้ Reconciliation ที่มี AI สามารถตรวจสอบและเปรียบเทียบข้อมูลรายการชำระเงินที่มาจากแหล่งต่างๆ หาความสอดคล้องและตรงกันระหว่างรายการที่มีอยู่ในระบบการเงินขององค์กร เช่น ระบบบัญชี ระบบสิทธิประโยชน์ หรือระบบสินค้าคงคลัง นอกจากนั้นยังสามารถตรวจสอบความถูกต้องของการชำระเงิน เช่น จำนวนเงิน วันที่ชำระ และรายละเอียดอื่นๆ จึงช่วยลดเวลา ลดค่าใช้จ่ายในการตรวจสอบและค้นหาข้อผิดพลาด ลดความเสี่ยงของการเกิดข้อผิดพลาดในการระบุรายการชำระเงิน ซึ่งอาจส่งผลกระทบต่อบัญชีและการเงินขององค์กร

 

ตรวจสอบการซื้อขายสินค้า

ไม่ใช่เพียงแค่เรื่องบัญชีและการเงินเท่านั้น Reconciliation ที่มี AI ยังถูกนำมาใช้กับการตรวจสอบการซื้อขายสินค้า ที่แพร่หลายอย่างมากในธุรกิจการค้าปลีกหรืออีคอมเมิร์ส เพราะสามารถประมวลผลข้อมูลจำนวนมาก และตรวจสอบความถูกต้องของข้อมูลได้เร็ว โดยเฉพาะการตรวจสอบความสอดคล้องระหว่างข้อมูลการซื้อขายในระบบบัญชีและระบบคลังสินค้า นอกจากนี้ยังสามารถหาข้อผิดพลาดที่เกิดขึ้นในกระบวนการซื้อขาย เช่น ความแตกต่างของจำนวนสินค้า ราคา หรือเวลาการซื้อขาย ดังนั้นจึงช่วยให้ประหยัดเวลา ประหยัดค่าใช้จ่าย ลดความเสี่ยงในการเกิดข้อผิดพลาดในกระบวนการซื้อขาย และสามารถเพิ่มประสิทธิภาพในการจัดการธุรกิจและสร้างรายได้ให้กับองค์กร

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

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

สตรีมฯ ทำ Reconciliation ให้กับองค์กร ร่วมกับผู้นำด้าน Reconciliation ระดับโลกอย่าง SmartStream โดยมีระบบ Transaction Lifecycle Management (TLM) Reconciliations-Premium ที่จะทำให้ธุรกิจประหยัดเวลาในการจัดการและควบคุมกระบวนการทำธุรกรรมองค์รวม และคุ้มค่าในการลงทุน

อยากทราบไหมว่า ระบบ TLM Reconciliations-Premium มีกระบวนการทำงานอย่างไร และช่วยแบ่งเบางานได้อย่างไรบ้าง อ่านข้อมูลเพิ่มเติมได้ที่ https://www.smartstream-stp.com/wp-content/uploads/smartstream-resources/Brochure-2021-TLM-Reconciliations-Premium.pdf หรือทำความรู้จัก SmartStream ให้มากขึ้น ได้ที่ https://www.smartstream-stp.com/solutions/reconciliations-and-exceptions-management/

หากสนใจโซลูชั่น สามารถติดต่อเราได้ที่อีเมล Marketing@stream.co.th หรือโทร. 02-679-2233

อ่านบทความอื่นๆ ที่ https://www.stream.co.th/blog/

 

เขียนและเรียบเรียงโดย วราภรณ์ สุรรังสรรค์

0 2 Continue Reading →

สร้างโปรแกรม Scan Thai ID Card ด้วยภาษา Go-lang

สร้างโปรแกรม Scan Thai ID Card ด้วยภาษา Go-lang

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

ตัวอย่างหน่วยงานที่ควรใช้เพื่อให้ทำงานสะดวกขึ้นมีอะไรบ้างก็เช่น

ภาพจาก : ประชาชาติธุรกิจ

  1. หน่วยงานเกี่ยวกับธุรกรรมทางการเงิน เช่น เมื่อเราไปสมัครใช้งานบริการทางการเงินธนาคาร ซึ่งเราไม่เคยทำธุรกรรมกับธนาคาร บริการนี้จำเป็นต้องมีการเก็บข้อมูลจากบัตรประชาชน
  2. บริการจัดส่งพัสดุ เช่น เราไปส่งของที่ไปรษณีย์ พนักงานจะต้องขอข้อมูลบัตรประชาชน เพื่อที่จะตรวจยืนยันว่าเป็นบุคลที่ส่งของคนนี้จริง ๆ
  3. หน่วยงานต่าง ๆ ทั้งหน่วยงานราชการและเอกชน ที่ระบบเดิม ไม่ว่าจะเป็นฟอร์มกระดาษที่ต้องกรอกเอง หรือแบบฟอร์มอิเล็กทรอนิกส์ที่ยังมากรอกทีละช่อง

 

โปรแกรมมีการทำงานอย่างไรรายละเอียดเราจะดึงก็ข้อมูลจากบัตรได้อย่างไรเดี๋ยวเรามาทำไปด้วยกันครับ

เครื่องมือที่เราใช้มีอะไรบ้างมาดูกัน

ภาษา Go-lang

Visual Studio Code โปรแกรม IDE ใช้สำหรับเขียน Code Go-lang (หรือโปรแกรมอะไรก็ได้ที่ถนัดและสามารถใช้ทำกับ ภาษา GO ที่เลือกมาเพราะเป็นโปรแกรมที่ใช้กันทั่วไป มี extension ให้เราเลือกลงได้ และที่มันก็ฟรีด้วย)

เครื่องสแกนบัตร ในที่นี้ที่ยกตัวอย่างคือ ยี่ห้อ ACS รุ่น ACR39U-NFF โดยใช้ port ต่อผ่าน USB Type C ราคาโดยประมาณ 1,000 บาท (บวกลบเล็กน้อย)

ภาพจาก :  R&D COMPUTER SYSTEM CO.,LTD.

เตรียมตัวก่อนเริ่มเขียนโปรแกรม

  1. เริ่มต้นจากติดตั้ง Go-lang (ดูวิธีเพิ่มเติมได้ที่ https://go.dev/doc/install)
  2. ดาวน์โหลด และติดตั้ง Visual Studio Code (Link Download: https://code.visualstudio.com/download)
  3. ผมจะแนะนำให้ติดตั้ง extension ของ GO ด้วยใน Visual Studio Code โดยไปที่ extension แล้วพิมพ์ค้นหาคำว่า GO จะเจอดังรูปด้านล่างแล้วเรากด Install ได้เลย

 

สร้าง Project ใหม่

1) สร้าง Folder  หรือ Directory ใหม่ขึ้นมาด้วการรันคำสั่งใน Command Line >> mkdir go-scancard-api

2) สร้างไฟล์ go.mod ในโปรเจกต์ของเรา โดยรันคำสั่ง go mod init >> go mod init example/go-scancard-api

3) สร้างไฟล์ชื่อ main.go ใน Floder และเขียนโค้ด Hello World ง่ายๆ กันก่อน

package main

 

import (

“fmt”

)

 

func main() {

fmt.Println(“Hello World!”)

}

 

4) ลองรันโค้ดด้วยคำสั่งใน Command Line ใน folder โปเจ็ค

go run .

ผลลัพธ์ ขึ้นข้อความ Hello World! บนจอ terminal แล้ว( . ในที่นี้หมายถึง run ไฟล์ go ทั้งหมดใน project นี้ ทำไมเราใช้ เพราะว่าในขันตอนถัด ๆ ไป เราจะมีไฟล์ต่าง ๆ เพิ่มขึ้นมา)

 

สร้าง Service Scan Card ด้วย Library sscard

1) ก่อนอื่นเราจะเพิ่ม library เข้ามาใน Project เราก่อน

go get -u golang.org/x/net/html/charset

go get -u github.com/gogetth/sscard

go get github.com/ebfe/scard

 

2) สร้างไฟล์ exampleThaiIDCard.go และใส่โค้ดเริ่มต้นโดย main หลักจะเป็นฟังชั่น exampleThaiIDCard()

package main

 

import (

“fmt”

“github.com/ebfe/scard”

“github.com/gogetth/sscard”

)

 

func exampleThaiIDCard() {

 

// Establish a PC/SC context

context, err := scard.EstablishContext()

if err != nil {

fmt.Println(“Error EstablishContext:”, err)

return

}

 

// Release the PC/SC context (when needed)

defer context.Release()

 

// List available readers

readers, err := context.ListReaders()

if err != nil {

fmt.Println(“Error ListReaders:”, err)

return

}

 

// Use the first reader

reader := readers[0]

fmt.Println(“Using reader:”, reader)

 

// Connect to the card

card, err := context.Connect(reader, scard.ShareShared, scard.ProtocolAny)

if err != nil {

fmt.Println(“Error Connect:”, err)

return

}

 

// Disconnect (when needed)

defer card.Disconnect(scard.LeaveCard)

 

// Send select APDU

selectRsp, err := sscard.APDUGetRsp(card, sscard.APDUThaiIDCardSelect)

if err != nil {

fmt.Println(“Error Transmit:”, err)

return

}

fmt.Println(“resp sscard.APDUThaiIDCardSelect: “, selectRsp)

 

}

 

3) ไฟล์ main.go เราจะแก้โดยการเอา exampleThaiIDCard() ไปใส่

package main

 

func main() {

exampleThaiIDCard()

}

 

4) เราจะรันไฟล์ด้วยคำสั่ง go run . โดยตอนนี้จะทดสอบสถานะเครื่อง แต่ยังไม่ดึงข้อมูลจากบัตร

4.1  รันโดยไม่เสียบเครื่องอ่านบัตร

รันคำสั่ง

ผลลัพธ์ จะเห็นได้ว่าจะขึ้นแจ้ง error บอกว่า ไม่สามารถหาเครื่องอ่านบัตรเจอ

 

โดย error นี้มาจากฟั่งชั่นใน Code คือ context.ListReaders()

 

4.2 รันโดยเสียบเครื่องอ่านบัตรแต่ยังไม่เสียบ บัตรประชาชน เข้าไปด้วย

 

รันคำสั่ง

ผลลัพธ์ ตรงเส้นใต้สีเหลืองจะเห็นแล้วว่า หลังจากที่เราเสียบเครื่องอ่านบัตร เราได้ใช้เครื่องรุ่นอะไร และเส้นใต้สีแดงเป็นการแจ้งว่าบัตรไม่ได้ถูกเสียบกับเครื่องอ่านบัตรอยู่

 

4.3 รันโดยเสียบเครื่องอ่านบัตร แต่เราจะเสียบบัตรอื่นที่ไม่ใช่บัตรประชาชนเข้าไปครับ ตัวอย่างนี้ เสียบบัตรอื่นเข้าไปแทน หรือจะกลับด้านเอาด้านที่ไม่มี chip เสียบเข้าไปแทน

 

รันคำสั่ง

ผลลัพธ์ เราจะเห็นว่าโปรแกรมจะแจ้ง error บอกว่าไม่สามารถส่ง request ไปขอข้อมูลที่ chip ของบัตรได้

โดยในข้อ 4.2 – 4.3 ฟั่งชั่น context.Connect(reader, scard.ShareShared, scard.ProtocolAny) จะเป็นฟั่งชั่นของการอ่านบัตร

 

4.4 รันโดยเสียบเครื่องอ่านบัตรและเสียบบัตรประชาชนเข้าไปด้วย และทดลองเอาบัตรอื่นเสียบที่เครื่อง

 

รันคำสั่ง

ผลลัพธ์ เราจะเห็นว่าโปรแกรมอ่านบัตรเราเจอ และส่งเลข APDU ว่าเป็นบัตรประชาชนจริง ๆ

โดยฟั่งชั่น selectRsp, err := sscard.APDUGetRsp(card, sscard.APDUThaiIDCardSelect) จะเป็นตัวอย่างตัวเริ่ม return response ของบัตรแล้วการดึงข้อมูลแต่ละฟิลจะดึงยังไงเดี๋ยวเราไปดูในหัวข้อถัดไปกัน

 

5. เพิ่ม code ในส่วนของการอ่านข้อมูลบัตร ใส่ลง ในไฟล์ exampleThaiIDCard.go

5.1 เพิ่มฟั่งชั่น ConvertTIS620toUTF8(tis620 string) คือการแปลง TIS620 ก่อนเพราะถ้าเราดึง Field ตอน return ค่าออกมามันจะแถมอักขระพิเศษทั้งมองเห็นและไม่เห็น และจะเพี้ยนเมื่อนำไปใช้ เราจึงต้องลบมันออก

func ConvertTIS620toUTF8(tis620 string) (valueUTF8 string) {

tis620Valure := []byte(tis620)

dec := charmap.Windows874.NewDecoder()

makeUTF := make([]byte, len(tis620Valure)*3)

n, _, err := dec.Transform(makeUTF, tis620Valure, false)

if err != nil {

return “This Filed can’t Convert Tis620 to UTF8”

}

valueUTF8 = string(makeUTF[:n])

valueUTF8 = strings.Trim(valueUTF8, “\u0000”)

valueUTF8 = strings.ReplaceAll(valueUTF8, “#”, ” “)

 

valueUTF8 = strings.TrimSpace(valueUTF8)

return

}

 

5.2 เพิ่ม code อ่านฟิล  โค้ดเราจะใส่ไว้ในฟั่งชั่น  exampleThaiIDCard()

ตัวอย่างเรายกมา 3 field

        • CID เลขบัตรประชาชน
        • fullnameEN ชื่อเต็ม ภาษาอังกฤษ
        • fullnameTH ชื่อเต็ม ภาษาไทย
        • birth วันเกิด

 

              cid, err := sscard.APDUGetRsp(card, sscard.APDUThaiIDCardCID)

if err != nil {

fmt.Println(“Error APDUGetRsp: “, err)

return

}

fmt.Printf(“cid: _%s_\n”, string(cid))

 

fullnameEN, err := sscard.APDUGetRsp(card, sscard.APDUThaiIDCardFullnameEn)

if err != nil {

fmt.Println(“Error APDUGetRsp: “, err)

return

}

fmt.Printf(“fullnameEN: _%s_\n”, ConvertTIS620toUTF8(string(fullnameEN)))

 

fullnameTH, err := sscard.APDUGetRsp(card, sscard.APDUThaiIDCardFullnameTh)

fmt.Println(“len v = “, len(fullnameTH))

if err != nil {

fmt.Println(“Error APDUGetRsp: “, err)

return

}

fmt.Printf(“fullnameTH: _%s_\n”, ConvertTIS620toUTF8(string(fullnameTH)))

 

birth, err := sscard.APDUGetRsp(card, sscard.APDUThaiIDCardBirth)

if err != nil {

fmt.Println(“Error APDUGetRsp: “, err)

return

}

fmt.Printf(“birth: _%s_\n”, ConvertTIS620toUTF8(string(birth)))

 

 

6. รันโปรแกรมดูผลลัพธ์ที่ดึงค่าฟิลที่เราระบุไว้

ผลลัพธ์ เราจะเห็นค่า Field ที่ return แล้วในบัตรประชาชน ตรง fullnameTH เราอย่างพึ่งตกใจไปทำไมเป็นข้อความไม่สมประกอบ เหตุผลคือมันแสดงในหน้าจอของ terminal ด้วยภาษาไทย แต่ถ้าเรา copy คำนั้นใส่ word หรือ notepad เราก็จะเห็นข้อความภาษาไทยปกติ

 

  1. มันดึงข้อมูลจาก field ต่าง ๆ ยังไงกัน

การดึงข้อมูลจาก chip ของบัตรประชาชน อธิบายหลักการง่าย ๆ คือ

1)เราจะส่ง request ระบุไปก่อนว่าจะดึง Field ไหน

2) เป็นจังหวะเราส่ง request ขอ response จาก Feild นั้นออกมา

โดยข้อมูลที่ส่งไปจะเป็นค่า hex ซึ่งใน Library sscard มีชุดคำสั่งค่า hex แต่ละ Field ไว้ให้แล้วสะดวกมาก ซึ่งอยู่ในไฟล์ apducmd_thidcard.go ของ Library

ตัวอย่างตัวแปลชุดคำสั่งดึง Field CID

แล้วเราจะรู้ที่มาที่ไปของเลข hax บัตรประชาชนไทยได้อย่างไร ผมขออนุญาติแนบบทความเกี่ยวกับเนื้อหานี้เพิ่มเติมนะครับ >>> Smart card: บัตรประชาชนยุคดิจิตอล | by patda9 | horganice | Medium

ตอนนี้เราพอรู้แล้วว่าแต่ละ Field เราจะดึงข้อมูลออกมาอย่างไร หลังจากนั้นเราค่อยไปเพิ่มในส่วน Field ที่อยากได้มาแสดงตามความต้องการ และต่อมาเราจะดึงรูปภาพของเราจากบัตรประชาชนกันครับ

 

8. การดึงรูปภาพจากบัตรประชาชน

8.1 ใส่โค้ด การดึงรูปจากบัตรประชาชน ใส่ในฟังชั่น exampleThaiIDCard()

              cardPhotoJpg, err := sscard.APDUGetBlockRsp(card, sscard.APDUThaiIDCardPhoto, sscard.APDUThaiIDCardPhotoRsp)

if err != nil {

fmt.Println(“Error: “, err)

return

}

 

//Write Image

n2, err := sscard.WriteBlockToFile(cardPhotoJpg, “./idcPhoto.jpg”)

if err != nil {

fmt.Println(“Error WriteBlockToFile: “, err)

return

}

fmt.Printf(“Img wrote %d bytes\n”, n2)

ผลลัพธ์ ไฟล์รูปจะถูก save ไว้ที่โปรเจ็คของเรา ถ้าเรามาดูตรง Terminal เราจะเห็นว่ารูปภาพเราเขียนลงไปกี่ bytes

 

โดย sscard.WriteBlockToFile(cardPhotoJpg, “./idcPhoto.jpg”) จะประกอบด้วย Parameter 2 คือ  1.ตัวที่รับ Response จากฟั่งชั่นดึงรูป  2. กำหนด paht ที่เราจะ Save รูปลง กำหนดนามสกุลไฟล์ให้มันด้วย

 

9. Build ไฟล์ .exe ของโปรเจ็ค

รันคำสั่ง

go build

ผลลัพธ์ เราจะได้ไฟล์ go-scan-thai-card.exe ที่โปรเจ็คของเราครับ

 

ที่กล่าวข้างต้นเราได้ทดสอบการใช้เครื่องสแกนบัตร และดึงข้อมูลจากบัตรจาก Field ต่าง ๆ ถ้าไม่เคยเล่นคำสั่ง ADPU จะเห็นว่าการส่งขอข้อมูลเป็นเทคนิคเฉพาะ โดยต้องรู้เกี่ยวกับเลขฐาน(hex) ด้วย และตอนนี้เราได้โปรแกรมที่นำไปใช้งานได้แล้ว แต่ยังมีการนำโปรแกรมไปใช้งานในจุดประสงค์อื่น ๆ เช่นนำไปรันไว้ใน server หรือเราจะสร้าง service ให้รันในเครื่อง ส่วนตรงนี้เราจะเปลี่ยนโปรแกรมธรรมดาให้เป็น service เดี๋ยวเราจะมาสร้าง service กันต่อในบทความต่อไปกันครับ 🙂

ทั้งนี้ ทางเราได้อัพโหลดโปรเจ็คนี้ขึ้นบน github ท่านที่สนใจสามารถสอบถามรายละเอียดเพิ่มเติมได้ที่ marketing@stream.co.th

สุดท้ายนี้ทางทีมงานสตรีมฯ ของเรายังมี โซลูชั่น เทคโนโลยี นวัตกรรม ด้านดิจิทัลอื่น ๆ อีกมากมาย ครอบคลุมเกือบทุกอุตสาหกรรม รอติดตามบทความต่อๆไปได้เลยครับ

 

เรียบเรียงโดย Piyapat Khajornpan

Stream I.T. Consulting Ltd.

 

0 3 Continue Reading →

e-Contract [DIGITAL CONTRACT]

e-Contract (Digital Contract : dContract)

สัญญาอิเล็กทรอนิกส์เป็นหนึ่งใน Digital Transformation ที่จะช่วยยกระดับการดำเนินธุรกิจให้มีความสะดวก คล่องตัว มากยิ่งขึ้น แทนการใช้เอกสารสัญญาแบบ Paper เนื่องด้วยการใช้ Paper นั้น เป็นที่ทราบกันดีว่า มีความสิ้นเปลืองทรัพยากร และเวลาอย่างมาก ตั้งแต่ การจัดเตรียมเอกสาร, การพิมพ์เอกสาร, การจัดส่งเอกสารให้แก่ผู้ลงนามและนำกลับ, การ Scanกระดาษกลับเป็นไฟล์ในคอมพิวเตอร์, การอัพโหลดไฟล์เข้าในระบบจัดเก็บเอกสาร, การจัดเก็บ Hardcopy เข้าคลังเอกสาร, การเช่าสถานที่คลังเก็บเอกสาร, การสืบค้นเรียกดู Hardcopy จากคลังเอกสาร เป็นต้น หากว่ากระบวนการเหล่านี้ถูกแทนที่ด้วย Digital และทุกขั้นตอนกระทำผ่าน Application ก็จะช่วยประหยัดทรัพยากร งบประมาณ และเวลาได้เป็นอันมาก อีกทั้งยังเพิ่มความน่าเชื่อถือ และสามารถเชื่อมโยงกับระบบงาน Automation ได้อีกด้วย

พ.ร.บ. ธุรกรรมอิเล็กทรอนิกส์ ได้ให้นิยามของ Electronics Signature ไว้ว่า หมายถึง อักษร อักขระ ตัวเลข เสียง หรือสัญลักษณ์อื่นใดที่สร้างขึ้นให้อยู่ในรูปแบบอิเล็กทรอนิกส์ซึ่งนำมาใช้ประกอบกับข้อมูลอิเล็กทรอนิกส์ เพื่อแสดงความสัมพันธ์ระหว่างบุคคลกับข้อมูลอิเล็กทรอนิกส์ โดยมีวัตถุประสงค์เพื่อระบุตัวบุคคลผู้เป็นเจ้าของลายมือชื่ออิเล็กทรอนิกส์ที่เกี่ยวข้องกับข้อมูลอิเล็กทรอนิกส์นั้น และเพื่อแสดงว่าบุคคลดังกล่าวยอมรับข้อความในข้อมูลอิเล็กทรอนิกส์นั้น

พ.ร.บ.ว่าด้วยธุรกรรมทางอิเล็กทรอนิกส์ฯ รองรับการลงลายมือชื่ออิเล็กทรอนิกส์ (Electronics Signature) ให้มีผลทางกฎหมาย เช่นเดียวกับการลงลายมือชื่อบนเอกสารกระดาษ

สำหรับการใช้งาน Electronics Signature ในประเทศไทยนั้น แบ่งประเภทเป็นแบบทั่วไป และแบบที่เชื่อถือได้

  • Electronics Signature แบบทั่วไป ตามมาตรา 9
  • Electronics แบบที่เชื่อถือได้ ตามมาตรา 26 (ใช้ PKI เพื่อสร้าง Digital Signature) และ ตามมาตรา 28 (เพิ่มเติมการใช้ Certificate ที่ออกโดย Certificate Authority)

 

Electronics Signature แบบทั่วไป

Electronics Signature แบบทั่วไป ตามมาตรา 9 ถ้าจะยกตัวอย่างให้ง่ายๆ ตัวอย่างแรกให้นึกถึง การ Scan หรือถ่ายภาพ ลายเซ็นต์ไว้ แล้ว save ภาพเก็บไว้ในคอม แล้วมีกระบวนการนำไฟล์ภาพไปใส่ในเอกสาร หรือการใช้ปากกา Stylus เขียนลายเซ็นต์บนหน้าจอ ซึ่งหลายๆคนอาจจะเคยทำแบบนี้มาบ้างแล้ว โดยที่การใช้งาน ต้องมีความมั่นคงรัดกุม และคำนึงถึงลักษณะ ประเภท หรือขนาดของธุรกรรม

อย่างไรก็ตาม การนำ Electronics Signature ลักษณะนี้มาใช้งานจริง ต้องเผชิญกับความท้าทายหลายประการ ได้แก่

  • การปลอมตัวเป็นผู้อื่น (Impersonation) เช่น ผู้ลงลายมือชื่อไม่ใช่ตัวจริง อาจะมีคนอื่นปลอมลายมือชื่อ หรือคนอื่นขโมยไฟล์ภายลายมือชื่อไปใช้
  • การปฏิเสธความรับผิด (Repudiation) เช่น ผู้ลงลายมือชื่อพยายามปฏิเสธว่าตนเองไม่ได้ทำ
  • ข้อมูลไม่มีความครบถ้วน (Loss of data integrity) เช่น ข้อมูลมีการเปลี่ยนแปลงหลังจากที่ได้ลงลายมือชื่อ โดยอาจใช้โปรแกรมคอมพิวเตอร์แก้ไขเนื้อหาของเอกสาร
  • การไม่มีอำนาจลงนาม (Exceeding authority) เช่น การลงลายมือชื่อโดยผู้ที่ไม่ได้รับอนุญาต

 

ความท้าทายดังกล่าวนี้ สามารถจัดการด้วยการนำ Public Key Infrastructure มาใช้ในการลงลายมือชื่อให้มีความน่าเชื่อถือ ดังที่จะกล่าวต่อไป

 

Electronics Signature แบบเชื่อถือได้

Electronics Signature แบบเชื่อถือได้ สำหรับมาตรา 26 นั้นต้องนำ PKI (Public Key Infrastructure – โครงสร้างพื้นฐานกุญแจสาธารณะ) มาใช้ในการสร้าง Digital Signature ของเอกสาร โดยที่ Digital Signature คือ การลงลายมือชื่ออิเล็กทรอนิกส์โดยใช้ใบรับรองอิเล็กทรอนิกส์ (Certificate) ที่ระบุตัวบุคคล หรือองค์กรผู้เป็นเจ้าของลายมือชื่อ เพื่อแสดงว่าบุคคล หรือองค์กร ดังกล่าวยอมรับข้อความในข้อมูลอิเล็กทรอนิกส์นั้น

 

ศึกษาเพิ่มเติมเกี่ยวกับ PKI ได้จาก บทความของ ETDA

 

ในที่นี้จะขออธิบายถึงหลักการสร้าง Digital Signature คร่าวๆ ดังต่อไปนี้

1. สมมติให้มีบุคคล 2 คน คนแรกเป็นผู้ส่งเอกสาร คนที่สองเป็นผู้รับเอกสาร สองคนนี้ไม่ได้รู้จักหรือมีความสัมพันธ์กันมาก่อน และต้องส่งเอกสารแก่กันผ่านระบบคอมพิวเตอร์

2. ผู้ส่งเอกสารต้องมี Private-Public Key ของตนเองขึ้นมาก่อน และต้องมี Certificate ที่ถูกรับรองโดย CA (Certificate Authority – ผู้ให้บริการออกใบรับรอง) ที่ผู้ส่งเอกสารใช้บริการอยู่ นอกจากนี้ต้องเก็บรักษา Key, Certificate ไว้อย่างปลอดภัยและลับส่วนตัวที่สุด ป้องกันการถูกขโมยไปใช้งาน Certificate ที่ว่านี้ ประกอบด้วยข้อมูลส่วนบุคคลและ Public Key ของบุคคลนั้น การมี Certificate เป็นการรับรองว่าบุคคลที่มีชื่อปรากฏอยู่ใน Certificate นี้ มีตัวตนบนโลกใบนี้จริง โดยผ่านการพิสูจน์ตัวตนอย่างเข้มงวดมาแล้วโดย Certificate Authority นั้น (เช่น ต้องไปแสดงตนต่อหน้าเจ้าหน้าที่ มีการตรวจสอบ Identity ด้วยวิธีการต่างๆที่รัดกุม) มิใช่ใครก็ได้ที่อยู่ๆตั้งชื่อสมมติขึ้นมาและไม่มีตัวตนจริง กล่าวคือเป็นการเชื่อมโยงผูกตัวตนในโลก Digital กับโลกความเป็นจริงไว้ด้วยกัน

ตัวอย่าง Certificate

3. จากนั้นเข้าสู่ขั้นตอนการสร้าง Digital Signature โดยใช้ Application ที่ผู้ส่งเอกสารใช้บริการอยู่ ไฟล์เอกสาร (PDF format) จะถูกนำมาคำนวณ Hash Value ด้วย Hashing Algorithm มาตรฐาน จากนั้นทำการ Encrypt ค่า Hash Value นี้ด้วย Private Key ของผู้ส่ง ผลลัพธ์ที่ได้คือ Digital Signature จากนั้น ผนวก Certificate, Digital Signature ลงในไฟล์เอกสาร (PDF)

4. ผู้ส่งเอกสาร จัดส่งเอกสารให้แก่ผู้รับทางช่องทางที่ตกลงกันไว้

5. ผู้รับเอกสาร ตรวจสอบว่าเอกสาร PDF นั้น ใครเป็นผู้ลงลายมือชื่อโดยดูจาก Certificate ใน PDF ซึ่งสามารถเห็น ชื่อผู้ลงลายมือชื่อและ CA ที่เป็นผู้รับรอง หากผู้รับยอมรับว่า CA นั้นเป็นที่น่าเชื่อถือ ก็มั่นใจได้ว่า Digital Signature นั้น มาจากบุคคลนั้นจริง (อย่างที่ได้กล่าวไว้ว่า CA ได้พิสูจน์ตัวตนของบุคคลนั้นแล้ว ก่อนที่จะออก Certificate ให้)

6. ผู้รับเอกสาร ใช้ Application ตรวจสอบว่าเนื้อหาในไฟล์ถูกแก้ไขหลังจากลงลายมือชื่อไปแล้วหรือไม่ โดย Application อาจเป็น Software จำพวก PDF Reader หรือเป็นระบบ Application ใดๆที่ตนใช้บริการอยู่ ซึ่งมักมีหลักการตรวจสอบดังนี้

    • นำไฟล์ PDF มาคำนวน Hash value เก็บค่าไว้เปรียบเทียบภายหลัง (a)
    • ใช้ Public Key ที่อยู่ใน Certificate ไป Decrypt ข้อมูล Digital Signature ให้ได้ค่า Hash Value เดิมออกมา (b) ซึ่งเป็น Hash Value ที่ผู้ส่งสร้างไว้ ณ จังหวะที่เขาลงลายมือชื่อนี้
    • เปรียบเทียบ Hash Value ทั้งสอง (a & b) ถ้าตรงกัน แสดงว่าเนื้อหาในไฟล์ไม่ได้ถูกแก้ไข แต่ถ้าต่างกัน แสดงว่ามีการแก้ไขเนื้อหาในไฟล์ (Hash value a จะได้ค่าต่างจาก b)

 

การลงลายมือชื่ออิเล็กทรอนิกส์ ด้วยเทคโนโลยี PKI ผ่านการใช้ใบรับรองอิเล็กทรอนิกส์ (Certificate) นั้น เป็นวิธีการที่ช่วยให้ผู้ที่เกี่ยวข้องกับข้อมูลอิเล็กทรอนิกส์นั้นๆ เชื่อมั่นได้ว่าผู้ที่ลงลายมือชื่ออิเล็กทรอนิกส์ด้วยเทคโนโลยี PKI เป็นผู้ทำธุรกรรมหรือยอมรับข้อความในข้อมูลอิเล็กทรอนิกส์ดังกล่าวจริง และจะไม่สามารถปฏิเสธความรับผิดได้ อีกทั้งยังสามารถตรวจสอบได้ว่า ข้อมูลอิเล็กทรอนิกส์ดังกล่าวถูกแก้ไขหลังจากที่มีการลงลายมือชื่อหรือไม่ ซึ่งสอดคล้องตามพระราชบัญญัติว่าด้วยธุรกรรมทางอิเล็กทรอนิกส์ พ.ศ. 2544 มาตรา 9 และ 26 และสามารถตอบโจทย์ความท้าทายที่กล่าวถึงในตอนแรก คือ Impersonation, Repudiation, และ Loss of Integrity ได้นั่นเอง

 

Long Term Validation (LTV)

Certificate ที่ออกโดย CA นั้น มีกำหนดวันหมดอายุ (Expiration) ซึ่งผู้ใช้บริการจำเป็นต้องต่ออายุเป็นระยะๆ และ Certificate ยังถูกเพิกถอน (Revocation) ได้ด้วย หากเจ้าของพบว่า Key ของตนถูกเปิดเผย และแจ้งเพิกถอนไปยัง CA

ภาพจาก: https://www.etda.or.th/

ประเด็นที่อาจจะเกิดขึ้นคือ เมื่อ Certificate ที่ฝังอยู่ใน PDF นั้นหมดอายุหรือถูกเพิกถอนไปนานแล้ว เมื่อผู้อ่านเอกสารเปิดไฟล์ขึ้นมาด้วย Application อาจจะพบว่ามีข้อความแจ้งเตือนว่า Verify ความถูกต้องไม่ผ่านได้ ด้วยเหตุนี้จึงมีการทำคุณสมบัติ LTV (Long Term Validation) มาประกอบ ซึ่งก็คือ บันทึกข้อมูลสถานะของ Certificate และ Timestamp ณ ตอนที่เอกสารถูกลงลายมือชื่อไว้ใน PDF เพื่อพิสูจน์ในภายหลังได้ได้ว่า Certificate ยังคง Valid ณ เวลาที่ลงนามเอกสารนี้

 

PDF Archiving (PDF/A) and Long Term Preservation

เอกสาร PDF นั้น อาจมีทั้งตัวอักษรและภาพ ดังนั้นเพื่อให้แน่ใจว่าไฟล์ PDF ที่เราเปิดอ่านในตอนนี้ แสดงผลให้เห็นเป็นอย่างไร อนาคตกลับมาเปิดไฟล์นี้ใหม่ ก็ต้องเห็นแบบเดียวกันทุกประการ ทั้ง Font, Color ไม่ว่าจะใช้ซอฟต์แวร์ใดรุ่นใดอ่าน หรือใช้งานกับระบบคอมพิวเตอร์รุ่นใดในอนาคตก็ตาม ดังนั้นจึงมีการกำหนดมาตรฐานที่เรียกว่า PDF/A (PDF Archiving) ขึ้น ซึ่งกำหนดให้ Embed font, color, metadata ต่างๆลงในไฟล์ สำหรับ PDF/A นี้มีการพัฒนาต่อยอดมาแล้วหลายรุ่น จนกระทั่งมาตรฐานเวอร์ชัน PDF/A-3 ได้ เพิ่มคุณสมบัติที่สำคัญ 1 อย่าง คือ สามารถฝังไฟล์เอกสารชนิดอื่นที่มาตรฐาน PDF/A ไม่ได้รองรับลงไปในไฟล์ PDF ได้ เช่น Excel, Word, HTML, CAD หรือ XML ซึ่งเป็นประโยชน์มากในการนำไฟล์ไปประมวลผลด้วยระบบคอมพิวเตอร์ต่อ

ตัวอย่างอันหนึ่งของการใช้ประโยชน์ PDF/A-3 ในประเทศไทย คือ e-Tax ซึ่งข้อกำหนดของกรมสรรพากรระบุให้แนบไฟล์ XML ที่มีโครงสร้างตามที่ระบุไว้ที่เอกสาร “ข้อเสนอแนะมาตรฐานฯการใช้ข้อความ XML สำหรับการแลกเปลี่ยนข้อมูลอิเล็กทรอนิกส์ระหว่างหน่วยงาน (ขมธอ. 14-2560)” เพื่อให้ซอฟต์แวร์ของกรมสรรพากรอ่านข้อมูลได้

ตัวอย่างใบกำกับภาษีอิเล็กทรอนิกส์ที่แนบไฟล์ XML

ส่วนการนำ PDF/A-3 มาใช้ในการลงลายมือชื่อใน eContract เราสามารถบันทึกข้อมูลเกี่ยวกับการทำสัญญาและลงลายมือชื่อนี้เป็นรูปแบบ JSON หรือ XML ได้

 

Key Management

จากหลักการของ Digital Signature ที่ User ที่เป็นผู้ส่งเอกสารต้องมี Certificate ที่ออกโดย CA (Certificate Authority เป็น Issuer) โดยที่ภายใน Certificate นั้น บรรจุ Public Key ของ User ไว้ และ Certificate ต้องถูก Sign ด้วย Private Key ของทาง CA เอง รูปต่อไปนี้แสดงการรับรอง Certificate ของ A ด้วย Private Key ของผู้รับรอง B และ Certificate ของ B ถูกรับรองด้วย C ซึ่งเป็น Root CA อีกชั้น

ภาพจาก https://darutk.medium.com/illustrated-x-509-certificate-84aece2c5c2e

ช่องโหว่ที่อาจเกิดขึ้นได้คือ หากการจัดเก็บ Key ของทาง CA เอง ไม่มั่นคงปลอดภัย อาจถูกจารกรรมได้และถูกนำไปใช้ Sign Certificate ให้กับผู้บุกรุก และสามารถเข้าสู่ระบบคอมพิวเตอร์ไปสร้างความเสียหายแก่องค์กรได้ แนวทางหนึ่งที่แก้ไขคือ ใช้ Hardware Security Module (HSM) จัดเก็บ Key ที่สำคัญเหล่านี้ หากจะเปรียบเทียบ HSM กับเครื่องใช้ในชีวิตประจำวัน โดยหลักการก็คล้ายๆกับ การมีกล่องนิรภัยสำหรับเก็บกุญแจของห้องลับในบ้านไว้ หากจะเปิดห้องลับ ก็ต้องมาหากล่องนิรภัยนี้ก่อน ใส่รหัสเปิดกล่อง แล้วจึงหยิบกุญแจไปไขห้องลับ ดังภาพ

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

HSM ที่เป็นที่นิยมใช้อันหนึ่งก็คือ Luna HSM ของบริษัท Thales ซึ่งมีคุณสมบัติด้านประสิทธิภาพและความปลอดภัยอันดับต้นๆในอุตสาหกรรม

Our Solution

บริษัท Stream I.T. Consulting Ltd. ได้พัฒนา Solution สำหรับงานด้านการลงลายมือชื่อสัญญาแบบอิเล็กทรอนิกส์ โดยมีลักษณะการทำงานตามมาตรา 26 ของพ.รบ.ธุรกรรมอิเล็กทรอนิกส์ โดย

  • ใช้ Microsoft CA เป็น Certificate Authority (CA) ภายในองค์กร เพื่อทำ Signing Certificate ของ User เพื่อรับรองตัวตนของผู้ใช้งาน โดยที่องค์กรเป็นผู้พิสูจน์ตัวตนของ User
  • ใช้ Luna HSM เป็น Hardware Security Module สำหรับบริหารจัดการ Key ต่างๆ เพิ่มความมั่นคงปลอดภัยของระบบ
  • มี REST API สำหรับใช้งานเกี่ยวกับ Certificate, Signing, Verification โดยใช้งานได้ง่ายดาย
  • เสริมด้วย Onboarding application และ Document Signing Application สำหรับองค์กรที่ยังไม่มี Application ทางบริษัทสามารถพัฒนา Application ดังกล่าวให้เข้ากับระบบงานขององค์กรท่านได้ โดย

 

ภาพต่อไปนี้แสดง Component ส่วนของ Digital Signature Services ซึ่งเป็น REST API ที่ให้บริการด้าน Certificate Management, Document Signing ซึ่ง Encapsulate ส่วนของ Luna HSM เพื่อขจัดความยุ่งยากในการศึกษาเรียนรู้การใช้งาน HSM ออกไป Application สามารถ Integrate มาใช้งาน REST API นี้ได้อย่างง่ายดาย หากองค์กรของท่านมีทีมพัฒนา Mobile/Web Application อยู่แล้ว ท่านสามารถซื้อเฉพาะส่วนของ Digital Signature Services ไปใช้งานได้

 

นอกจากนี้ ในกรณีที่องค์กรของท่านต้องการพัฒนา Mobile Application หรือ Web Application ส่วนเพิ่มเติมสำหรับบริการ e-Contract ทางบริษัทฯ สามารถให้บริการพัฒนา Application ได้ โดยลักษณะของ Architecture ก็จะมีส่วนของ Backend ที่เป็น Container & Microservice ขึ้นมาคั่นระหว่ง Mobile/Web Application และ Digital Signature Services สตรีมฯ เองก็สามารถทำได้ ซึ่งเรียกได้ว่าเรามีบริการครบทุกความต้องการของลูกค้าเลยทีเดียว

ดังนั้น สตรีมฯ กล้าพูดได้อย่างเต็มปากว่าเรามีความพร้อมในการเป็นผู้นำสำหรับโซลูชั่น e-Contract (Digital Contract : dContract) พร้อมเข้ามายกระดับการเซ็นสัญญาสำหรับองค์กรของท่านให้มีความคล่องตัวมากขึ้น ลดการใช้กระดาษลงได้เป็นอย่างมาก และมีความปลอดภัยสูง รวมถึงมีกฎหมายรองรับในการทำธุรกรรมอีกด้วย

สนใจสอบถามรายละเอียดเพิ่มเติมได้ที่

marketing@stream.co.th หรือโทร 0-2679-2233

 

เรียบเรียงโดย Siripod Surabotsophon

Stream I.T. Consulting Ltd.

0 1 Continue Reading →

Face Comparison API with Python

มาลองทำ API ง่าย ๆ เพื่อเปรียบเทียบใบหน้า (Face Comparison) โดยใช้ภาษา Python

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

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

วันนี้เราจะใช้ Python มาทำการเปรียบเทียบใบหน้า โดยใช้ Library ที่ชื่อว่า “DeepFace” และ “Flask” มาทำ Rest API มาดูขั้นตอนการทำได้เลย!!

DeepFace เป็น Library Python สำหรับการจดจำใบหน้าแบบโอเพ่นซอร์ส ที่มีขนาดเล็กได้รับความนิยมสูงสุด สามารถการจดจำและวิเคราะห์คุณลักษณะใบหน้า (อายุ เพศ อารมณ์ และเชื้อชาติ)  ซึ่งเราจะนำมาใช้ในส่วน Face Comparison

Flask เป็น Python Web Framework ที่มีส่วนควบคุมการทำงานที่มีขนาดเล็กและง่ายต่อการขยาย ซึ่งเราจะนำมาใช้ในส่วนของการสร้าง API

ก่อนที่เราจะเริ่มพัฒนา จำเป็นต้องต้องติดตั้ง 2  ตัวนี้ก่อน

ภาพจาก : towardsai

  • Python 3

ภาษาไพธอน เป็นภาษาโปรแกรมมิ่ง แบบ Open Source ที่ทำงานบนระบบปฎิบัติการได้หลากหลาย สามารถทำงานได้เหมือนกับภาษาโปรแกรมมิ่งทั่วไป และมีจุดเด่นเหมาะสำหรับงานที่ต้องการประมวลผลแบบพิเศษ เช่น การวิเคราะห์ข้อมูล (Data analytics) งานที่เกี่ยวกับการประมวลผลด้านสื่อกราฟฟิก และการประมวลผลภาพ (Multimedia & Image processing) การประมวลผลทางวิทยาศาสตร์และสถิติ (Scientific & Statistics computing) และงานด้าน Machine learning เป็นต้น

  • VS Code application และ VS Code Python extension

หรือ Visual Studio Code (VS Code) เป็นโปรแกรมแก้ไขซอร์สโค้ดที่มีขนาดเล็กแต่ทรงพลัง ซึ่งทำงานบนเดสก์ท็อปรองรับการทำงานบน Windows, macOS และ Linux พร้อมทั้งยังสามารถปรับแต่ง ด้วยการใช้ส่วนขยาย (Extension) อื่นๆ ได้อีกมากมาย ในที่นี้เราจะใช้ ส่วนขยาย ที่ชื่อว่า VS Code Python extension เข้ามาช่วยในการเขียนนะครับ (link วิธีการติดตั้ง https://code.visualstudio.com/docs/python/python-tutorial)

ส่วนใครที่ติดตั้ง Python และ VS code เรียบร้อยแล้วก็ข้ามมาได้เลย ส่วนใครที่ยังไม่แน่ใจว่าเคยติดตั้ง Python ไปแล้ว ให้ใช้ Command นี้เพื่อตรวจสอบเวอร์ชั่นของ Python (Execute ใน Command Prompt)

python — version

1. สร้าง Folder ขึ้นมาใหม่ และตั้งชื่อตามใจชอบได้เลย และเปิด Folder ด้วย VS code

2. สร้าง File ขึ้นมาใหม่ ภายใต้ Folder ที่สร้างไป ในทีนี้ใช้ชื่อว่า face.py

3. Setup Environment โดยกด ctrl+shift+P และพิมพ์ว่า Python: Create Environment จากนั้นคลิกเลือก Venv

4. ทำการ Import Library DeepFace และ Flask โดยเปิด Terminal ใน VS code และพิมพ์ Command ดังนี้

5. Copy Code ส่วนนี้ไปวางในไฟล์ face.py

อธิบาย Code แบบสั้นๆ

บรรทัดที่ 8 เป็นการสร้าง API โดยกำหนด Path คือ /face-compare และกำหนดให้เป็น Method-POST

บรรทัดที่ 11-13 เป็นการอ่านรูปจาก Path ใน Request Body

บรรทัดที่ 16 ทำการส่งรูปเข้าไปยัง Library DeepFace เพื่อเปรียบเทียบรูป

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

บรรทัดที่ 28-31 เป็นการกำหนด Json ที่จะ Response สามารถแก้หรือเพิ่มลบ attributes ตรงนี้ได้

บรรทัดที่ 36 เป็นการ Return Json กลับไปให้คนที่ Call API มา

*** ใครอยากแก้ Port ของ Service ให้แก้ตรงบรรทัดที่ 44 ได้เลย

 

6. สร้าง Folder Images ใน Project

จากนั้นนำรูปที่ต้องการ Compare เข้าไปใส่ใน Folder

7. Start program โดยการกดปุ่ม Run > Run Without Debugging หรือพิมพ์ Command ใน Terminal “python face.py” เมื่อ Start เรียบร้อยจะขึ้นหน้าตาแบบนี้

8. ทดสอบ Call API โดยใช้ Postman

 

ภาพตัวอย่างที่ใช้ในการเปรียบเทียบ

ผลที่ได้

ความหมายคือ ตรวจพบใบหน้าในรูป (detected = true)
เป็นใบหน้าคนๆเดียวกัน (sameFace = true)
คะแนนความเหมือนกันอยู่ที่ 71.16%

 

มาลองคนละคนดีกว่า

ผลที่ได้

ความหมายคือ ตรวจพบใบหน้าในรูป (detected = true)
ไม่ใช่ใบหน้าคนๆเดียวกัน (sameFace = false)
คะแนนความเหมือนกันอยู่ที่ 29.63%

 

การนำไปใช้งานจริงควรจะมี Service มาครอบตัวนี้อีกทีนะครับ เช่นเขียน Java Service ขึ้นมา 1 ตัว และรับเป็น Multipart Form-data เพื่อให้ Front-end หรือคนที่เรียก Service แนบรูปมาได้ จากนั้นเราก็เขียนให้ Java ไปเก็บรูปลงใน Path Images ของ Project Python จากนั้นก็ Call Python Service และส่ง Path ของรูปไปด้วย เมื่อ Java Service ได้รับ Response จาก Python ก็ให้ไปลบไฟล์รูปที่เคยเก็บไว้ใน Folder Images

เป็นยังไงกันบ้างครับ กับการทำการเปรียบเทียบใบหน้าโดยใช้ Python ที่เราได้นำเสนอไป ทางทีมงานสตรีมฯ ของเรายังมี โซลูชั่น เทคโนโลยี นวัตกรรม ด้านดิจิทัลอีกมากมาย รอติดตามบทความต่อๆไปได้เลยครับ

หากสนใจโซลูชั่นด้านดิจิทัล สามารถติดต่อเราได้ที่อีเมล marketing@stream.co.th หรือโทร. 02-679-2233

*Head Banner Image Credit: recfaces

 

เรียบเรียงโดย Phasathon Yingcharoenrat

Senior Software Engineer, Stream I.T. Consulting Ltd.

0 3 Continue Reading →

Stream vClaim

Stream vClaim Application

แอปพลิเคชั่นสำหรับเคลมประกันออนไลน์ ผ่านวิดีโอคอนเฟอเรนซ์(VDO Conference) ไม่ต้องรอตัวแทนประกัน สามารถถ่ายรูป พร้อมคุยกับเจ้าหน้าที่ประกันได้ทันที!!

สุดยอดแอปพลิเคชั่น สำหรับบริษัทประกันภัยรถยนต์ยุคใหม่ที่ไม่ควรพลาด!!

ทำไมถึงต้อง vClaim

♦ Easy to use – ใช้งานง่าย ไม่ซับซ้อน เพียง 3 ขั้นตอน

♦ Claim Anywhere – สามารถใช้งานได้ทุกที่ ทุกแพลตฟอร์มไม่ว่าจะเป็น Mobile, Tablet หรือ Desktop

 

สนใจสอบถามเพิ่มเติม

สนใจสอบถามข้อมูลเพิ่มเติม

ปรึกษาฟรี!

 

ฝ่ายการตลาด

บริษัท สตรีม ไอ.ที. คอนซัลติ้ง จำกัด

Email: marketing@stream.co.th

Facebook: https://www.facebook.com/Streamitconsulting

Tel. 0-2679-2233

 

Content Writer: Kanlayakorn Chotawisakul, Solutions Consultant

 

0 0 Continue Reading →

EDB Postgres ‘Relational Database’ ระบบจัดการฐานข้อมูลเชิงสัมพันธ์

ฐานข้อมูล (Database) ถือเป็นหัวใจสำคัญขององค์กรที่ต้องมีการบริหารจัดการให้มีประสิทธิภาพ ดังนั้นองค์กรส่วนใหญ่จึงมองหาโปรแกรม หรือโซลูชั่นเข้ามาช่วยบริหารจัดการฐานข้อมูล ในปัจจุบันก็มีกระแสที่องค์กรได้เล็งเห็นความสามารถว่า ซอฟต์แวร์โอเพ่นซอร์ส (Open-source Software) ก็ทำงานได้ดีไม่แพ้ซอฟต์แวร์เพื่อการค้า (Commercial License) อีกทั้งยังยืดหยุ่นเปิดกว้างมากกว่า สตรีมฯ จึงขอแนะนำโซลูชั่นที่จะเข้ามาเพิ่มประสิทธิภาพระบบจัดการฐานข้อมูล สามารถดึงข้อมูลมาใช้ได้อย่างรวดเร็วด้วยวิธีการประมวลผลข้อมูลและจัดเก็บในรูปแบบของตารางข้อมูลที่เชื่อมต่อกัน โดยมีระบบ EDB (Enterprise DB) ซึ่งเป็นระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ หรือ RDBMS (Relational Database Management System) เป็นการประมวลผลข้อมูลและจัดเก็บในรูปแบบตารางที่เชื่อมต่อกันจากโค้ดที่ฝังอยู่ในข้อมูล เช่น ข้อมูลเลขที่บัตรประจำตัวประชาชน สามารถดึงข้อมูล ชื่อ ที่อยู่ เบอร์โทรศัพท์ หรือข้อมูลส่วนตัวอื่นๆ ที่กรอกในตอนแรกของการจัดเก็บ นำมาใช้งานได้ ซึ่งเป็นการพัฒนามาจากโอเพ่นซอร์ส ชื่อดังอย่าง PostgreSQL ที่นำมาพัฒนาเพิ่มขีดความสามารถพร้อม Services & Support โดย EDB (Enterprise DB) ที่สำคัญสามารถช่วยลูกค้าลดค่าใช้จ่ายในการจัดหา Commercial License ลงได้เป็นอย่างมาก

ซึ่งปัจจุบันองค์กรทั่วโลกให้การยอมรับ และตื่นตัวกับการแสวงหาโอเพ่นซอร์สเข้ามาใช้งานในองค์กรแทบทุกอย่าง โดยหากพูดถึงประโยชน์นั้นมี 3 ปัจจัยหลักคือ

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

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

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

จากความโดดเด่นเหล่านี้ Enterprise DB (EDB) จึงได้ต่อยอดให้ PostgreSQL มีฟีเจอร์สำหรับการทำงานระดับสูง เช่น

• Security – ตรวจสอบระดับ Session ได้ว่ามีกิจกรรมใดเกิดขึ้นในฐานข้อมูล ซึ่งเหนือกว่า PostgreSQL ธรรมดาที่ user ID อาจถูกแชร์กัน รวมถึงมีกลไกช่วยป้องกันการโจมตีแบบ SQL Injection และยังได้รับการรับรองจากกระทรวงการป้องกันของสหรัฐฯ และ FIPS 140-2 พร้อมเครื่องมือสำหรับช่วยดูแลข้อมูลให้เป็นไปตาม GDPR

• Enterprise Manager – ลูกค้าของ EDB PostgreSQL จะได้รับเครื่องมือช่วยเหลือมากมายจากเครื่องมือ Postgres Enterprise Manager เช่น Dashboard แสดงผลที่ปรับแต่งได้ แม้กระทั่งความสามารถคาดการณ์ความจุของพื้นที่จัดเก็บ ไปจนถึงมีส่วนช่วยวิเคราะห์และบริหารจัดการ Log ดูว่าในการทำงานมีประสิทธิภาพส่วนใดที่ติดขัด เป็นต้น

•  Data Adapters – ทีมงาน EDB เป็นผู้พัฒนาหลักในการพัฒนาเรื่อง Foreign Data Wrapper (FDW) บนมาตรฐานของ SQL/MED โดยเป็นหัวหอกในการพัฒนา FDWs for MySQL, MongoDB และ Hadoop รวมถึงการเชื่อมต่อ PostgreSQL และ Oracle เข้าด้วยกันโดยไม่ต้องมีซอฟต์แวร์หรือฮาร์ดแวร์เสริม

•  Migration Toolkit – มีเครื่องมือรองรับการย้ายค่ายจากฐานข้อมูลเดิมทั้งออนไลน์และออฟไลน์ โดยรองรับฐานข้อมูลยอดนิยมต่างๆ เช่น Oracle, Sybase, Microsoft SQL Server และ MySQL ซึ่งเครื่องมือ Migration ของ EDB Postgres นี้การันตีความสามารถรองรับ Stored Procedures และ PL/SQL ได้ซึ่งเหนือกว่าเครื่องมือทั่วไป

•  Failover Manager – ผู้ใช้งาน EDB PostgreSQL มั่นใจได้ว่าการทำงานของระบบจะไม่มีสะดุดเพราะมีเครื่องมือทำ Failover โดยรองรับคลัสเตอร์ได้หลายกลุ่ม อีกทั้งยังทำได้อัตโนมัติทั้งไปและกลับ หรือการทำ Virtual IP และ Load Balancer

•  Backup & Recover – สามารถทำการ Backup และกู้คืนข้อมูลได้จาก Local และ Remote มีการบีบอัดข้อมูลเพื่อลดพื้นที่ และรองรับการสำรองข้อมูลแบบ Incremental รวมถึงกู้คืนได้ใน Point-in-time และออกรายงานต่างๆ ได้

ข้อสังเกตสำคัญของ EDB PostgreSQL คือมีความสามารถในการทำงานที่สามารถแทน Oracle Database ได้อย่างยอดเยี่ยม แต่สิ่งหนึ่งที่ EDB PostgreSQL น่าสนใจกว่าก็คือ “เรื่องของค่าใช้จ่าย” ที่ประหยัดกว่าระบบของ Oracle อย่างเห็นได้ชัด ซึ่งเมื่อเทียบกันแล้วไม่ว่าจะเป็นต้นทุนการทำงาน หรือต้นทุนในแง่ของการใช้ MA ของระบบก็ประหยัดกว่า ส่งผลให้ผลองค์กรสามารถควบคุมค่าใช้จ่ายโดยรวมได้เป็นอย่างดี

ทั้งนี้ Stream มีทีมงานผู้เชี่ยวชาญที่ให้บริการโซลูชั่นของ EDB PostgreSQL สำหรับองค์กรด้วยเช่นกัน ซึ่งมีความพร้อมที่จะนำโซลูชันเข้าไปเสนอ ออกแบบ ทดสอบ สร้างระบบร่วมกับลูกค้าให้เหมาะสมกับองค์กร และดูแลต่อเนื่องหลังการติดตั้ง เรียกได้ว่าเรามีบริการดูแลตั้งแต่ต้นจนจบทุกขั้นตอน

สนใจสอบถามข้อมูลเพิ่มเติม

ปรึกษาฟรี!

ฝ่ายการตลาด

บริษัท สตรีม ไอ.ที. คอนซัลติ้ง จำกัด

Email: marketing@stream.co.th

Facebook: https://www.facebook.com/Streamitconsulting

Tel. 0-2679-2233

0 0 Continue Reading →

Gherkin and Cucumber ทางเลือกใหม่ในการจัดการ Automation Testing ให้เป็นระบบ

ในกระบวนการพัฒนา Software แบบ Agile นั้น ใช้ User Story เพื่ออธิบาย Feature, Requirement ต่าง ๆ ของ Software ในมุมมองของ end-user แต่อย่างไรก็ตาม ก็ยังคงมีอุปสรรคในการสื่อสาร User Story เหล่านี้ระหว่าง Business Team และ Tech Team ให้เข้าใจตรงกัน Gherkin ถูกประดิษฐ์ขึ้นเพื่อช่วยแก้ไขปัญหานี้

 

Gherkin เป็นภาษาสำหรับบรรยาย Requirement และ Acceptance Criteria ในรูปแบบที่คล้าย Human Language ซึ่งช่วยให้ทีมงานทำความเข้าใจ Requirement ต่าง ๆ ได้ง่าย ทั้งในเชิง Business และ Technical

 

Gherkin Systax

การอธิบาย Scenario ด้วย Gherkin มีองค์ประกอบดังนี้

  1. Scenario: อธิบายสถานการณ์ของการใช้ระบบ
  2. Given: Precondition / Context / Step ที่ต้องเกิดขึ้นเพื่อนำระบบไปอยู่ใน State ที่ต้องการ ก่อนที่ผู้ใช้งานจะมี Interaction ใด ๆ กับระบบ ส่วนของ Given สามารถมีหลายข้อได้ และเชื่อมกันด้วย And
  3. When: Interaction ต่างที่ User กระทำ หากมีหลาย Action ให้เชื่อมด้วย And
  4. Then: ผลลัพธ์ที่เกิดขึ้น มักจะกล่าวถึงสิ่งที่เราต้องตรวจสอบ เช่น user interface, report, message, command output เป็นต้น และยังรวมถึง External System ที่เกี่ยวข้องด้วย เช่น หากมีการส่งข้อมูลไปยังระบบอื่น

 

Case Study: Login

ในบทความนี้ขอยกกรณีศึกษา User Story การเข้าสู่ระบบ (Login) โดยให้มี User Story ดังนี้

As a customer, I want to login using username and password, so that I can see information in the homepage.

 

Business Analyst (BA) สามารถเขียน Scenario ต่างๆ ในรูป Gherkin ได้ดังต่อไปนี้


Scenario Outline: Check login is successful with valid credentials

Given user is on login page

When user enters valid username and password – username: <username>, password: <password>

And clicks on login button

Then user is navigated to the home page

Examples:

| username | password |

| Raghav   |    12345 |

| Ele      |    12345 |


Scenario Outline: Check login is failed with invalid credentials

Given user is on login page

When user enters invalid username and password – username: <username>, password: <password>

And clicks on login button

Then error message is displayed – invalid credential

Examples:

| username | password |

|                    |    11111 |


 

จากตัวอย่าง มีการใช้ Example เพื่อกำหนด Test Data (Sample) สำหรับการทดสอบ โดยแต่ละ Scenario แรกมี 2 sample และ Scenario ที่สองมี 1 sample สิ่งที่เกิดขึ้นคือ เมื่อทำการทดสอบ โปรแกรมจะนำค่าใน Sample นี้ไปแทนค่า Variable ต่าง ๆ ของ Scenario นั้น เช่น <username>, <password>

นอกจากนี้แล้วเราสามารถใช้ Tag เพื่อใช้แบ่งกลุ่ม จัดระเบียบ จำแนก scenario ได้ โดยใส่เครื่องหมาย @ ตามด้วยข้อความใด ๆ ที่เราต้องการ ไว้หน้า Scenario เช่น เราต้องการแยก Positive/Negative Test หรือต้องการกำหนด Scenario สำหรับ Smoke Test ก็สามารถใส่ Tag @positive, @negative, @smoke ลงไปได้

Tag เหล่านี้จะถูกใช้ตอน Execute Test โดยระบุ Tag Name ของ Scenario ที่เราต้องการทดสอบลงไป โปรแกรมก็จะ Execute เฉพาะ Scenario เหล่านั้นให้

 


@positive

@smoke

Scenario Outline: Check login is successful with valid credentials


@negative

Scenario Outline: Check login is failed with invalid credentials


 

เรารวบรวม Scenario ที่เป็นรูปแบบ Gherkin ไว้ใน File ที่เรียกว่า Feature File และ File นี้จะถูกนำมาสร้างเป็น Code สำหรับ Automated Test ได้ โดยอาศัยเครื่องมือที่ชื่อว่า Cucumber โดยในบทความต่อไปนี้จะยกตัวอย่างการใช้ Cucumber ร่วมกับ Maven, Eclipse, Seleninum

เมื่อเราใช้ Cucumber อ่าน Feature File เราจะได้ Output ออกมาเป็น Code Snippet ซึ่งเป็นโครงร่างเพื่อนำไปเขียน Code ต่อดังรูปตัวอย่าง

รูปฝั่งซ้ายเป็น Feature File (userlogin.feature) ส่วนฝั่งขวาเป็น Code Snippet ในภาษา Java (LoginSteps.java) สำหรับนำไปเขียน code ทำ Automated Test ต่อ ให้สังเกตว่าใน Code จะมี Annotation @Given, @When, @Then ซึ่งจะสอดคล้องกับ Scenario ใน userlogin.feature

 

เมื่อเราได้ Code Snippet แล้ว เราสามารถใช้ Selenium Library for Java เพื่อสร้าง “Glue Code” สำหรับ Automated Test ต่อไปได้ โดยจะแบ่งเป็น Class Page Factory และ Class Test Step

Page Factory Class เป็น Class ที่เป็นตัวแทนของ Page (หน้าจอ) ที่เราต้องการทดสอบ เราจะประกาศตัวแปร Web Element ต่าง ๆ เท่าที่จำเป็นในการทดสอบ เช่น หน้าจอ Login ก็จะมี Web Element ได้แก่ name (Textbox), password (Textbox), login (Button) นอกจากนี้จะมีส่วนที่เป็น division สำหรับแสดงข้อความ error message อยู่ 2 ที่ ซึ่งไม่ได้กำหนด ID แต่ใช้ CSS Class ชื่อว่า invalid-feedback

 

สร้าง Class LoginPage_PF เป็น Page Factory โดยให้มีตัวแปร Web Element สอดคล้องกับหน้าจอ ดังนี้

 

สังเกตใน Class LoginPage_PF จะมีตัวแปร WebElement ผูกกับ ID ของ Object ต่าง ๆ บนหน้าจอ ด้วย Annotation @FindBy(id) นอกจากนี้เราสามารถสร้าง List ของ WebElement ได้ เช่น ค้นหา Object บนหน้าจอ ที่ใช้ CSS Class ชื่อว่า “invalid-feedback”

 

สำหรับ Constructor นั้น ให้รับ Parameter เป็น WebDriver เข้ามา ซึ่งจะทำให้เราสามารถผูก WebElement กับ Object บนหน้าจอได้

 

จากนั้นเราเขียน code selenium ที่สั่งให้ทำ Action ต่าง ๆ บนหน้าจอ เช่น การกรอก username ในช่อง name, การกรอก password ในช่อง password, การคลิกปุ่ม Login, การตรวจหาข้อความ “Password is invalid”

 

หลังจากที่ทำ Page Factor Class LoginPage_PF เสร็จแล้ว เราก็จะมาเขียน “Glue Code” ใน LoginSteps Class ต่อ ซึ่ง Class นี้จะเรียกใช้งาน LoginPage_PF และมี Method ต่าง ๆ สอดคล้องกับกับ Scenario ใน Feature File (userlogin.feature)

 

เราเริ่มจาก Code สำหรับ Initialize และ Finalize ก่อน

  • Method browserSetup() ใช้สำหรับ setup การทดสอบ โดยทั่วไปจะ create driver ของ browser ขึ้นมา (เช่น Chrome, Firefox, Edge ซึ่งในตัวอย่างนี้ใช้ Microsoft Edge) กำหนดค่า setting ทั่วไป (เช่น timeout)
  • Method teardown() ใช้สำหรับสิ้นสุดการทำงาน โดยทั่วไปจะ close driver และ quit driver

 

 

  • จาก Code ที่แสดง เราสามารถกำหนดให้บาง Method ทำงานก่อนที่จะเริ่ม execute test ได้ โดยใส่ Annotation @Before(order) ได้ พร้อมระบุ Order เป็นเลขลำดับ ในที่นี้เราใส่ @Before ให้กับ method browserSetup ()
  • ในทางกลับกัน เราสามารถกำหนดให้บาง Method ทำงานหลังการ execute test ได้เช่นกัน โดยใส่ Annotation @After(order) ในที่นี้เราใส่ @After ให้กับ method teardown()

 

จากนั้นเราเขียน code ส่วนที่เหลือ คือ Test Step ต่าง ๆ ตาม Scenario ซึ่งจะไปเรียกใช้ Method ต่าง ๆ ที่เราสร้างไว้ใน LoginPage_PF

  • user_enters_valid_username_and_password() : การกรอก username และ Password
  • clicks_on_login_button() : การกดปุ่ม Login

 

 

สุดท้ายคือ Code สำหรับตรวจสอบผลลัพธ์ ซึ่งในที่นี้จะตรวจสอบว่าหน้าจอที่แสดงเป็นหน้าจอ Home Page หรือไม่โดยค้นหา Object ปุ่ม Logout ถ้าค้นหาพบ แสดงว่าหน้าจออยู่ที่ Home Page แล้ว

 

สังเกตว่าจะเรียกใช้ Page Factory อีก Class หนึ่งคือ HomePage_PF ซึ่งมี Web Element ที่เราสนใจคือปุ่ม Logout

 

สุดท้ายเมื่อ Build แล้ว เราสามารถ Run Automated Test ได้ผ่าน Eclipse หรือ Command Line ก็ได้

รูปต่อไปนี้แสดงการใช้ Command Line “mvn test”

 

โปรแกรมก็จะเปิด Browser ขึ้นมา และทำ Action ต่าง ๆ ที่เราเขียน Scenario ไว้ โดยอัตโนมัติ จะสังเกตว่าแต่ละการทดสอบของ Scenario จะแสดง Scenario Step (Gherkin) คู่กับ Glue Code ที่ทำงาน โดยแสดง Package Name, Class Name, Method Name เช่น

  • Step “Given user is on login page” มี Glue Code ที่คู่กันคือ LoginStep.user_is_on_login_page

ซึ่งสิ่งนี้เองที่ทำให้เห็นภาพชัดเจนขึ้นว่า การใช้ Gherkin-Cucumber จะช่วยจัดระเบียบ ให้ทำความความเข้าใจและเชื่อมโยงระหว่าง Scenario และ Test ได้ดีขึ้น นอกจากนี้ หากอนาคตมีการเปลี่ยนรายละเอียดของ Step ก็จะทราบส่วนที่ต้องแก้ไข Code Automated Test ได้เร็วขึ้นด้วย

 

ในตอนท้าย โปรแกรมจะแสดงสรุปผลการ Test ว่าผ่านหรือไม่ผ่านกี่ Scenario

 

หากเราต้องการทดสอบบาง Scenario เราสามารถระบุ Cucumber option ตอนที่ Run maven test ได้ ในที่นี้ขอยกตัวอย่างง่าย ๆ ดังต่อไปนี้

  • กรณีต้องการทดสอบ scenario ที่มี tag ชื่อที่เราต้องการ เช่น

    • ต้องการทดสอบ scenario tag positive

mvn test -Dcucumber.options=”–tags @positive”


    • ต้องการทดสอบ scenario tag smoke

mvn test -Dcucumber.options=”–tags @smoke”


 

  • กรณีที่ Project มีหลาย Feature File เราสามารถเจาะจง Feature File ที่ต้องการทดสอบได้

    • การเจาะจงทดสอบเพียง Feature File ที่เราต้องการ ให้ระบุ Relative path ของ Feature file นั้น

mvn test -Dcucumber.options=”src/test/resources/features/userlogin.feature”


    • การเจาะจงทดสอบเพียง Feature File ใน Directory ที่เราต้องการ ให้ระบุ Relative path ของ Directory นั้น

mvn test -Dcucumber.options=”src/test/resources/features”


 

สำหรับบทความนี้ก็ขอจบเท่านี้ครับ หากสนใจโซลูชั่นด้านดิจิทัล สามารถติดต่อเราได้ที่อีเมล Marketing@stream.co.th หรือโทร. 02-679-2233 นะครับ

เรียบเรียงโดย Siripod Surabotsophon

Reference

  • Selenium Cucumber Java BDD Framework

https://youtu.be/4e9vhX7ZuCw

  • Source Code ในบทความนี้ สามารถ Download ได้จาก GitHub

https://github.com/siripods/SeleniumCucumberBDD

 

0 0 Continue Reading →

มาทำความรู้จักกับ Figma ตัวช่วยในการ design UI ให้ง่ายขึ้น

วันนี้ทาง Stream อยากจะมาแนะนำ software ที่ชื่อว่า “Figma” ซึ่งใช้สำหรับการทำ mockup หน้าจอ ไว้นำเสนอลูกค้า และยังสามารถใช้สร้าง flow การทำงานของ program ได้อีกด้วย พร้อมแล้วมาเริ่มกันเลยค่ะ

เริ่มจากเข้า Link สำหรับการใช้งาน Figma ที่ https://www.figma.com/

เมื่อเข้า link มาแล้วจะเจอหน้าตา pop-up แบบรูปด้านล่างนี้

ข้อดีของ Figma คือสามารถสร้างทีม ให้คนในทีมเข้ามาดูหรือแก้ไขงานของเราได้ด้วย ทำให้เราสามารถทำงานไปพร้อมกับเพื่อนในทีมได้เลย ไม่ต้องรอส่งไฟล์กันไปมา แต่ถ้าหากใครทำคนเดียวก็สามารถข้ามขั้นตอนนี้ไปก่อนได้นะคะ

เมื่อเราสร้างทีมเสร็จแล้ว จะมี pop-up ขึ้นมาให้เราเลือก plan ได้ ว่าจะเป็นแบบ Starter (Free) หรือแบบ Professional ($12/month) แต่ใน blog นี้ เราจะแนะนำเป็นตัว Starter ก่อนนะคะ แต่ถ้าหากใครใช้แล้วชอบก็สามารถ upgrade เป็น Professional plan ได้ค่ะ

เมื่อเลือก starter plan แล้ว จะมีให้เลือก 2 แบบ

1.Design with Figma: เหมาะสำหรับ เป็นการออกแบบ prototype ต่าง ๆ ซึ่งจะมี frame ให้เลือกเยอะมาก เช่น Website, iPhone, iPad สะดวกมาก ๆ สำหรับคนที่ต้อง design หน้าจอให้ลูกค้า review ก่อนเริ่มทำงานจริง หรือส่งให้ developer coding ต่อก็ได้เหมือนกัน

2.Whiteboard with Figjam: เหมาะสำหรับการทำ diagram ต่างๆ แต่ใน blog นี้จะยังไม่พูดถึงส่วนนี้นะคะ

Design with Figma

เมื่อเลือก Design with Figma จะมีรูปแบบ template ขึ้นมาให้เลือกหลายรูปแบบเลย เหมาะสำหรับการ design หน้าจอไว้นำเสนอลูกค้า ซึ่งเราสามารถเลือกขนาดหน้าจอตาม requirement ของลูกค้าได้เลย หรือจะ custom เองก็ได้ นอกจากนี้ Figma ยังมี community ไว้ share ผลงานของแต่ละ user ด้วย ในส่วนนี้หากเราเข้าไปดูแล้วสนใจงานส่วนไหน ก็สามารถ download มาใช้ได้เช่นกันค่ะ

ในตัวอย่างนี้จะ เลือก template เป็น Desktop เมื่อเลือกแล้วก็จะได้หน้าจอเป็นขนาด desktop ตามที่ต้องการเหมือนรูปด้านล่างค่ะ

ในส่วนของเมนูด้านขวา จะมี 3 ส่วนด้วยกัน คือ Design, Prototype และ Inspect

 

Design : ภายใต้เมนู Design จะมีให้ แก้ไข ตำแหน่ง, ขนาด, ขอบ, มุม, สี

 

Prototype

สำหรับหน้า Prototype เราสามารถสร้าง interaction ระหว่างแต่ละหน้าได้

ในตัวอย่างนี้ จะสร้าง link สำหรับปุ่มสีชมพูใน desktop-1 ให้ link ไปที่ desktop-2 เมื่อมีการคลิก

ให้กดปุ่ม + ในหัวข้อ interactions จะมี pop-up ขึ้นมาให้ใส่รายละเอียดตามรูปภาพด้านล่าง

ตัวอย่างนี้ จะตั้งค่าให้ มีการ interact เมื่อคลิก (On click) และตั้งค่า Navigate to ไปที่ Desktop-2

เมื่อตั้งค่าเสร็จแล้ว แล้วเข้า preview mode เมื่อกดปุ่มที่เราตั้งค่าไป จะ link ไปที่ desktop-2 เลย

 

Inspect

ส่วนนี้จะเอาไว้สำหรับแก้ไข object ด้วย code CSS

เมื่อกดแล้วจะขึ้น pop-up ให้ใส่ email สำหรับคนที่เราจะ share ให้ หรือจะ copy link แล้วนำไปส่งให้โดยตรงก็ได้ ผู้ที่เข้ามาดูจะสามารถกดปุ่มทุกอย่างที่เราทำ interaction ไว้ได้ แต่จะไม่สามารถแก้ไขได้

นี่ก็เป็นตัวอย่างการใช้ Figma คร่าว ๆ นะคะ

พบกับเรื่องราวด้านดิจิทัลจากเพื่อน ๆ ชาวสตรีมฯ ได้ใน Blog หน้าค่ะ

หากสนใจโซลูชั่นด้านดิจิทัล สามารถติดต่อเราได้ที่อีเมล Marketing@stream.co.th หรือโทร. 02-679-2233 นะคะ

 

เรียบเรียงโดย Thayanee Lertassavarat

Business Analyst, Stream I.T. Consulting Ltd.

0 0 Continue Reading →

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายการใช้คุกกี้ และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • คุกกี้ที่จำเป็น
    Always Active

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

  • คุกกี้เพื่อการวิเคราะห์

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

Save