Skip to Content

Blog Archives

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 →

Rabbit MQ ตอนที่ 2 – Exchanges, Routing Keys, and Bindings

สวัสดีครับ ในตอนที่แล้ว เราได้แนะนำ Rabbit MQ กันไปแล้ว สำหรับตอนที่ 2 นี้ เราจะเจาะลึกให้ละเอียดขึ้นอีกว่า องค์ประกอบของ Rabbit MQ มีอะไรบ้าง

Rabbit MQ มีองค์ประกอบอย่างไร

ภาพจาก: Introduction to RabbitMQ, Randhir Kumar, Software Consultant, Knoldus Inc.

 

องค์ประกอบของ Rabbit MQ มีดังนี้

  • Producer : โปรแกรมที่เป็นผู้ส่ง Message (Publish Message) โดยที่ Message อาจจะเป็นงานที่ต้องการส่งให้ระบบอื่นไปทำ หรืออาจเป็นการแจ้งข้อมูลข่าวสารให้ระบบอื่น ๆ รับทราบ
  • Exchange : ทำหน้าที่รับ Message และนำส่ง Message ไปให้ Queue ต่าง ๆ โดยพิจารณาจาก Routing Key ซึ่งเป็น Attribute ในแต่ละ Message
  • Binding : คือ การกำหนด “Link”  ว่า Queue ต่าง ๆ จะรับ Message ใดจาก Exchange โดย Binding จะเกี่ยวข้องกับ Routing Key และ Header
  • Queue : ทำหน้าที่คล้ายตู้จดหมาย (Post Box) ซึ่งอยู่ภายใน Rabbit MQ  เป็นที่เก็บ Message ทุกอย่างที่ผ่าน Rabbit MQ เข้ามาและออกไปยัง application โดยอาศัย Memory และ Disk ของเครื่อง Host ทำหน้าที่เป็น Buffer สำหรับเก็บ Message ดังนั้นปริมาณ Message ที่เก็บได้ ก็จะขึ้นกับขนาดของ Memory และ Disk ที่มี ในการใช้งาน Queue นั้น สามารถให้หลาย ๆ Producer ส่ง Message เข้าไปที่ Queue เดียวกันได้ และสามารถให้หลาย ๆ Consumer รับ Message จาก Queue เดียวกันได้เช่นกัน
  • Consumer : โปรแกรมที่เป็นผู้รอรับ Message (Consume Message) โดยอาจจะเป็นระบบที่รับงานจาก Producer มาดำเนินการ หรือรับข้อมูลข่าวสารมาอัพเดตในระบบ หรือส่งต่อให้ระบบอื่น

 

ประเภทของ Exchange

Rabbit MQ รองรับ Exchange ได้หลายประเภท เช่น Direct, Fanout, Topic, Header เป็นต้น แต่ละประเภทจะมีวิธีต่างกันในการกำหนด Binding เพื่อเชื่อมโยงกับ Queue

ภาพจาก: https://www.cloudamqp.com/blog/part1-rabbitmq-best-practice.html

 

1. Direct Exchange

Direct Exchange จะส่ง Message โดยอาศัย Routing Key เป็นตัวกำหนดว่า Message จะถูกส่งอย่างเจาะจงไปยัง Queue ที่มี Binding Key ตรงกับ Routing Key เท่านั้น

ตัวอย่างเช่น ระบบงานเพื่อประมวลผล pdf_events ประกอบด้วย Direct Exchange 1 ตัว และ Queue 2 ตัว

  • Queue A สำหรับทำงาน pdf create และมี routing key คือ pdf_create
  • Queue B สำหรับทำงาน pdf log และมี routing key คือ pdf_log

การทำงานเริ่มจาก Exchange ได้รับ Message จาก Producer เข้ามา Exchange จะตรวจสอบ Binding key ที่แนบมากับ Message ถ้า Routing key เป็น pdf_create ก็จะส่ง Message ไปยัง Queue A (เนื่องจากมี Binding key = pdf_create ตรงกัน) หรือถ้า Routing key เป็น pdf_log ก็จะส่งไปยัง Queue B (เนื่องจากมี Binding key = pdf_log ตรงกัน)

 

ภาพจาก: https://www.cloudamqp.com/blog/part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html

 

2. Fanout Exchange

Fanout Exchange ทำการส่ง Message ไปยังทุก Queue ที่ผูกกับ Exchange นั้น โดยไม่สนใจ Routing Key วิธีการนี้เหมาะสำหรับงานลักษณะ Broadcasting

ภาพจาก: https://www.cloudamqp.com/blog/part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html

 

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

เมื่อระบบประมวลผลข่าวกีฬา (Sports News)  ได้บันทึกข้อมูลข่าวกีฬาใหม่แล้ว ทำการ Publish Message นี้ (ซึ่งมีรายละเอียดของข่าว) ลงใน Fanout Exchange  จากนั้น Fanout Exchange ทำการ Broadcast ไปยังระบบช่องทางการรายงานข่าวต่างๆ เช่น ช่องทาง Web, Mobile, TV, Radio ซึ่งแต่ละช่องทางสามารถมีวิธีการนำข้อมูลรายละเอียดของข่าวไปใช้งานแตกต่างกัน

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

เมื่อระบบงาน HR ได้บันทึกข้อมูลพนักงานใหม่แล้ว ทำการ Publish Message ลงใน Fanout Exchange ซึ่ง Messageประกอบด้วยข้อมูลของพนักงานใหม่ จากนั้น Fanout Exchange ทำการ Broadcast ไปยังระบบงานอื่นที่เกี่ยวข้อง เช่น ระบบการจองคอมพิวเตอร์ เพื่อจองเครื่องให้กับพนักงานใหม่, ระบบการพิมพ์นามบัตร เพื่อจัดพิมพ์นามบัตรให้กับพนักงานใหม่, ระบบการฝึกอบรม เพื่อจองวันปฐมนิเทศพนักงานใหม่ เป็นต้น ระบบงานเหล่านี้สามารถรับ Message ไปประมวลผลได้ทันที นอกจากนี้ระบบงาน HR ซึ่งเป็น Publisher ก็ทำงานแบบ Asynchronous คือสามารถทำงานอื่นของตนเองต่อได้ โดยไม่ต้องรอผลลัพธ์จากระบบงานอื่นๆ กลับมาก่อน

 

3. Topic Exchange

Topic Exchange เหมาะสำหรับงานลักษณะ Multicast เพื่อส่ง Message ให้กับ Consumer บางส่วน โดยอาศัยการ Match Pattern ของ Routing Key กับ Binding Key โดย Routing Key มีลักษณะเป็นคำคั่นด้วยจุด เช่น agreements.eu.stockholm

ภาพจาก: https://www.cloudamqp.com/blog/part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html

 

ตัวอย่างเช่น ระบบงานสำหรับประมวลผล agreements  ใช้ Topic Exchange และ Queue 3 ตัว ดังนี้

Queue A สำหรับรับ Message ที่เกี่ยวกับ agreement ของ berlin เท่านั้นและกำหนด routing key = agreements.eu.berlin.#
Queue B สำหรับรับ Message เกี่ยวกับ agreement ทุกอย่าง routing key = agreements. #
Queue C สำหรับรับ Message เกี่ยวกับ agreement ของ headstore routing key = agreements.*.headstore

หมายเหตุ:

  • เครื่องหมาย * หมายถึงตำแหน่งนี้ต้องมีคำปรากฏ 1 คำ
    • เช่น binding key = “agreements.*.*.b.*” หมายถึง คำที่หนึ่งเป็น agreements, คำที่สี่เป็น b, ส่วนคำที่สอง สาม และห้า เป็นคำอะไรก็ได้แต่ต้องมี
  • เครื่องหมาย # หมายถึงตำแหน่งนี้จะมีคำใดๆปรากฏหรือไม่มีเลยก็ได้
    • เช่น binding key = “agreements.eu.berlin.#” หมายถึง คำที่หนึ่งเป็น agreements, คำที่สองเป็น eu, คำที่สามเป็น berlin, ส่วนคำที่สี่จะมีหรือไม่มีก็ได้

 

Example Scenario

 

Message #1 เข้ามา

ด้วย routing key = agreements.eu.

berlin.headstore

Message #1 จะถูกส่งไปยัง

Queue A เนื่องจาก 3 คำแรก (agreements, eu, berlin) ตรงกับ binding key

agreements.eu.berlin.headstore  VS  agreements.eu.berlin.#

 

Queue B เนื่องจากคำแรก (agreements) ตรงกับ binding key

agreements.eu.berlin.headstore  VS agreements.#

 

Queue C เนื่องจากคำที่หนึ่งและสี่ (agreements, headstore) ตรงกับ binding key

agreements.eu.berlin.headstore  VS agreements.*.headstore

 

Message #2 เข้ามา

ด้วย routing key = agreements.eu.

berlin.tailstore

Message #2 จะถูกส่งไปยัง Queue A, B

Queue A เนื่องจาก 3 คำแรก (agreements, eu, berlin) ตรงกับ binding key

agreements.eu.berlin.tailstore  VS  agreements.eu.berlin.#

 

Queue B เนื่องจากคำแรก (agreements) ตรงกับ binding key

agreements.eu.berlin.tailstore  VS agreements.#

 

Message #3 เข้ามา

ด้วย routing key = agreements.us.

headstore

Message #3 จะถูกส่งไปยัง Queue B, C

Queue B เนื่องจากคำแรก (agreements) ตรงกับ binding key

agreements.us.headstore  VS agreements.#

 

Queue C เนื่องจากคำที่หนึ่งและสี่ (agreements, headstore) ตรงกับ binding key

agreements.us.headstore  VS agreements.*.headstore

 

 

4. Header Exchange

Header Exchange อาศัยข้อมูลใน Header ในการกำหนดเส้นทางการส่ง Message โดยไม่ได้อาศัย Routing Key

ภาพจาก: https://www.cloudamqp.com/blog/part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html

 

ตัวอย่างเช่น ระบบงานสำหรับประมวลผล agreements  ใช้ Header Exchange และ Queue 3 ตัว

Queue A สำหรับรับ Message ที่รูปแบบเป็น pdf และเป็นข้อมูลประเภท report x-match = all
Queue B สำหรับรับ Message ที่รูปแบบเป็น pdf และเป็นข้อมูลประเภท log x-match = any
Queue C สำหรับรับ Message ที่รูปแบบเป็น zip และเป็นข้อมูลประเภท report x-match = all

X-match = any หมายถึง ต้องมี Header value อย่างน้อย 1 ตัว ใน Message ที่จะต้อง Match กับ Binding

ส่วน X-match = all หมายถึงทุก Header value ใน Message จะต้อง Match กับ Binding

Example Scenario

Message #1 มี Header Argument format=pdf, type=report –        Message #1 ถูกส่งไป Queue A เนื่องจาก Message Header ทั้ง format: pdf, type: report ตรงกับ Binding ทั้งหมดของ Queue A (X-Match = all)

–        Message #1 ถูกส่งไป Queue B ด้วย เนื่องจาก Message Header format: pdf, type: report ตรงกับ Binding ของ Queue B อย่างน้อย 1 ตัว (X-Match = any)

–        Message #1 ไม่ถูกส่งไป Queue C เนื่องจาก Queue C กำหนด X-Match = all คือต้องมีทั้ง format: zip และ type: log

Message #2 มี Header Argument format=pdf –        Message #2 ถูกส่งไป Queue B เนื่องจาก Message Header มี format: pdf ตรงกับ Binding 1 อย่าง (X-Match = any)

–        Message #2 ไม่ถูกส่งไป Queue A เนื่องจาก Queue A กำหนด X-Match = all คือต้องมีทั้ง format: pdf และ type: report

–        Message #2 ไม่ถูกส่งไป Queue C เนื่องจาก Queue C กำหนด X-Match = all คือต้องมีทั้ง format: zip และ type: log

 

Message #3 มี ด้วย Header Argument format=zip, type=log –        Message #2 ถูกส่งไป Queue B เนื่องจาก Message Header มี type: log ตรงกับ Binding 1 อย่าง (X-Match = any)

–        Message #2 ไม่ถูกส่งไป Queue A เนื่องจาก Queue A กำหนด X-Match = all คือต้องมีทั้ง format: pdf และ type: report

–        Message #2 ไม่ถูกส่งไป Queue C เนื่องจาก Queue C กำหนด X-Match = all คือต้องมีทั้ง format: zip และ type: log

 

 

ทั้งหมดนี้ก็คือส่วนสำคัญของ Rabbit MQ ครับ หากใครยังไม่ทันได้อ่านตอนที่ 1 ไปติดตามกันในลิ้งก์ https://www.stream.co.th/rabbit-mq-part1/ นะครับ

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

 

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

0 2 Continue Reading →

Rabbit MQ ตอนที่ 1

Rabbit MQ คืออะไร

Rabbit MQ เป็น Software จำพวก Message Broker ซึ่งรับ Message จากระบบหนึ่งแล้วส่ง Message ต่อไปยังอีกระบบหนึ่ง นึกภาพคล้ายกับที่ทำการไปรษณีย์ (Post Office) คือผู้ส่งจดหมายซึ่งระบุชื่อและที่อยู่ของผู้รับ นำจดหมายที่ต้องการส่งไปยังตู้ไปรษณีย์ จากนั้นบุรุษไปรษณีย์ (Postman) จะทำการนำจดหมายนั้นส่งไปถึงผู้รับ

Rabbit MQ เป็นเสมือนทั้งตู้ไปรษณีย์ ที่ทำการไปรษณีย์ และบุรุษไปรษณีย์ เพียงแต่ Rabbit MQ ไม่ได้ทำงานกับจดหมายกระดาษ เพราะเป็นข้อมูลอิเล็กทรอนิกส์

Credit: ภาพจาก https://www.youtube.com/watch?v=dTx4MONz9CQ

Rabbit MQ ใช้ทำอะไร

การมีระบบจัดการด้าน Messaging ช่วยให้ Software Application ต่าง ๆ สามารถ Connect หากันได้และสามารถ Scale ได้ การ Connect นี้ก็มีทั้ง Application หลาย ๆ ตัว Connect ถึงกันได้ (ซึ่งแต่ละชิ้นก็เป็นองค์ประกอบของ Application ที่ใหญ่กว่า) หรือ Application connect ไปหาอุปกรณ์ต่าง ๆ หรือข้อมูลต่าง ๆ

เราสามารถนำแนวคิดของ Message Queue มาใช้จัดการเรื่อง data delivery, Non-blocking operation หรือ Push Notification รวมทั้งสามารถใช้ในงานแบบ Publish/Subscribe, Asynchronous processing, Work queues

Rabbit MQ เป็น Message Broker ซึ่งเป็นตัวกลางของระบบ Messaging โดยช่วยให้ Application ของเรามี platform ร่วมกันสำหรับส่งและรับ Message นอกจากนี้ยังเป็นที่จัดเก็บ Message ที่ปลอดภัยจนกว่าผู้รับจะได้รับ Message

 

1. Data Delivery

บางครั้ง หลายระบบงานที่ทำงานร่วมกัน อาจมีการส่งข้อมูลปริมาณมาก ๆ ระหว่างกัน ซึ่งไม่สามารถทำงานแบบ Real-time ได้เสมอไป ในบางองค์กรใช้วิธีการ Batch โดยตั้ง Schedule ให้ระบบสร้างไฟล์ Batch ออกมา แล้วส่งให้อีกระบบหนึ่งตาม Schedule ที่ตกลงกัน (ตัวอย่างเช่นระบบงาน Human Resource ส่งรายชื่อพนักงานใหม่ทุกสิ้นวันผ่าน Batch File ซึ่งส่งกระจายให้กับระบบงานอื่น ๆ เพื่อไป Create user account ให้พนักงานใช้) หากทำ Message Broker มาช่วยจัดการ จะลดการทำงานแบบ Batch นี้ออกไปได้

 

 

2. Non-Blocking Operation และ Asynchronous Operation

บางระบบงานที่ประกอบด้วยหลาย Process ทำงานร่วมกันนั้น มักจะมีการเรียกใช้งานระหว่างกัน ซึ่งหลาย ๆ ครั้งเกิดปัญหา Blocking ได้

Credit: ภาพจาก: https://www.researchgate.net/figure/Blocking-and-non-blocking-operation-calls_fig18_312384750

 

Credit: ภาพจาก https://www.koyeb.com/blog/introduction-to-synchronous-and-asynchronous-processing

 

รูปด้านซ้ายแสดงการทำงานที่เกิด Blocking operations คือ Process A ส่งงานให้ Process B ทำงาน ระหว่าง B ทำงานอยู่ A จะต้องรอจน B ทำเสร็จ แล้ว A จึงจะทำงานต่อได้ (เรียกว่าเป็น Synchronous) จะเห็นได้ว่าระบบจะเสียทรัพยากรไปเปล่าประโยชน์ในช่วงที่ A รอ B เพราะ A ไม่ได้ทำงานช่วงนั้นเลย อีกทั้งหาก B ทำงานช้า จะทำให้ A ทำงานช้าไปด้วย และภาพรวมของระบบก็จะทำงานได้ Throughput น้อยลง

ส่วนรูปด้านขวาแสดงการทำงานแบบ Non-blocking operations (เป็นแบบ Asynchronous) คือ Process A ส่งงานให้ Process B ทำงาน ระหว่างที่ B ทำงานอยู่ A ก็สามารถทำงานอื่นของตนต่อได้ เมื่อ B ทำเสร็จก็จะแจ้งกลับมาที่ A จะเห็นได้ว่าระบบใช้ทรัพยากรคุ้มค่ากว่า

เราสามารถนำ Software จำพวก Message Broker มาช่วยปรับปรุงระบบในลักษณะนี้ได้ โดยให้ Message Broker รับคำสั่งจาก Process A แล้วให้ Broker ส่งให้ Process B เมื่อ A ส่งให้ Broker แล้ว A สามารถทำงานอื่นต่อได้โดยไม่ต้องรอ (แต่มีเงื่อนไขว่างานอื่นที่ A หยิบมาทำระหว่างนั้น ไม่จำเป็นต้องใช้ผลลัพธ์จาก B)

 

3. Push Notification

Push Notification เป็นการส่งข้อความจากระบบไปยังอุปกรณ์หรือเครื่องคอมพิวเตอร์ของ User เพื่อแจ้งข้อมูล ข่าวสาร หรือร้องขอให้ทำ Action บางอย่างกลับไป ในระบบที่มีปริมาณการใช้งาน Notification สูง ๆ อาจะเกิด Blocking ขึ้นในจุดนี้ได้ ดังนั้นการนำ Message Broker มาช่วยจัดการส่วนนี้ จะลด Blocking Operation จากการที่ระบบต้นทางต้องรอ Push Server ทำงาน

 

4. Publish/Subscribe

Credit: ภาพจาก https://docs.microsoft.com/en-us/azure/architecture/patterns/publisher-subscriber

ในเชิง Software Architecture นั้น Publish/Subscriber จัดว่าเป็นรูปแบบหนึ่งของ Messaging ซึ่งผู้ส่ง Message (เรียกว่า Publisher) จะไม่ถูกกำหนดให้ส่ง Message ให้หาผู้รับ (Subscriber) โดยตรง แต่ละจัดแบ่งหมวดหมู่ของ Published Message โดยมักจะไม่สนใจว่า Subscriber คือใคร ส่วน Subscriber จะรับ Message เฉพาะที่ตนเองสนใจเท่านั้น โดยไม่ต้องรับรู้ว่ามาจาก Publisher รายใด ดังนั้น Message Broker จึงทำหน้าที่เป็นตัวกลางอย่างดีในการจัดการ Message เหล่านี้ ระหว่าง Publisher และ Subscriber โดย Publisher ทำการ Publish Message ไปยัง Input Channel ของ Broker และ Subscriber จะคอยรับ Message จาก Output Channel ของ Broker

 

Rabbit MQ เหมาะกับงานลักษณะใด

  • Data Delivery
  • Non-blocking operation
  • Push notification
  • Publish/Subscribe
  • Asynchronous Processing
  • Work Queues

 

Case Study

1. การส่งข้อความแจ้งเตือนเมื่อมีการ Login เข้าใช้งานระบบ

ระบบงานหนึ่งมี Requirement ว่า เมื่อ User ได้ Login ผ่านแล้ว ระบบจะต้องส่ง Email แจ้งไปยังผู้ใช้งานว่ามีการ Login ซึ่งจะช่วย User ในกรณีมีผู้อื่นแอบนำ Credential ของตนเองไปแอบใช้ การส่งแจ้งเตือนจะทำให้ User ตัวจริงทราบว่ามีการเข้าใช้งาน และดำเนินการระงับการใช้งานได้ทัน ก่อนจะเกิดความเสียหายได้

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

การทำงานลักษณะนี้ สามารถปรับปรุงได้ โดยให้โปรแกรมส่วนหลักทำการ Publish ข้อมูลสำหรับการส่ง Email Notification ไปยัง Message Queue แล้วให้ Consumer ดำเนินการส่งอีเมลผ่าน Mail Gateway ส่วนโปรแกรมส่วนหลักก็ Execute ต่อไปโดยไม่ต้องรอผลการส่ง Email

2. การ Generate Report ผ่านหน้า Web Application

ระบบงานหนึ่งมี Requirement ให้สร้าง Export ข้อมูลธุรกรรมย้อนหลังจำนวนมาก และข้อมูลแต่ละ Row ก็มี Column จำนวนหลายร้อย Column จึงใช้เวลานานมากในการสร้างไฟล์ หากเราออกแบบให้ทำงานแบบ Synchronous ก็จะเกิด Waiting Time ยาวนาน และ User ต้องรอจนกว่าจะเสร็จ หน้าจอ ขึ้น pop-up ให้ Save แล้วกด Save File ได้ จึงจะไปทำงานหน้าจออื่นได้

การออกแบบ จึงเลือกใช้ Message Broker เข้ามาช่วย โดยโปรแกรมส่วนหลัก (Publisher) ทำการ Publish คำสั่ง Export ไปยัง MQ แล้ว Update สถานะของ Job นี้เป็น In Progress  จากนั้น Consumer Process ดำเนินการ Export ข้อมูลและ Save File ลงใน Disk จากนั้นจึง Update สถานะของ Job เป็น Finish เมื่อ User เห็นสถานะนี้แล้วจึงกด Link เพื่อ Download File นั้นไปใช้งานในช่วงเวลาหลังจากที่ Publish คำสั่งเข้า MQ นั้น ไปจนถึง Consumer ทำงานเสร็จนั้น ทาง User ไม่จำเป็นรออยู่ที่หน้าจอเดิม สามารถไปหน้าจออื่นเพื่อทำงานอื่นได้

3. การยืนยันตัวตนใน NDID Platform

ปัจจุบัน Mobile Banking Application ของสถาบันการเงินต่าง ๆ มี Feature เรื่อง NDID Service ซึ่งเป็นบริการยืนยันตัวตนและขอข้อมูลส่วนบุคคลระหว่างสถาบันการเงิน โดยลูกค้าของธนาคารสามารถขอให้ Application สถาบันการเงินที่ตนติดต่ออยู่ เชื่อมต่อไปยังระบบของอีกสถาบันการเงิน เพื่อให้ทำการยืนยันตัวตนให้ ซึ่งการยืนยันตัวตนนี้อาจใช้เวลานาน เพราะมีทั้งการตรวจสอบสิทธิ์ด้วย PIN หรือ One-Time Password, การตรวจทานข้อมูลส่วนตัว, การทำ Face Recognition ดังนั้นจึงมีการนำ MQ เข้ามาใช้ในการรับส่งข้อมูลการขอยืนยันตัวตนระหว่างสถาบันการเงินด้วยกัน

Credit: ภาพจาก NDID Platform

 

สำหรับในส่วน Introduction จะขอจบเพียงเท่านี้ ในตอนถัดไปจะกล่าวถึงการใช้งาน Rabbit MQ ในรูปแบบต่าง ๆ ครับ

เรื่องของ NDID สามารถอ่านได้ที่ https://www.stream.co.th/why-ndid/

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

 

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

1 4 Continue Reading →

ปรับกระบวนการทำงานขององค์กรอย่างไรให้ปัง – RPA นวัตกรรมตัวช่วยสุดล้ำ

ทุกวันนี้โลกของเราพัฒนาไปข้างหน้าอย่างต่อเนื่อง วิธีการทำงานของผู้คนก็เปลี่ยนแปลงไป จากแต่เดิมเราใช้แรงงานของคนในการทำงาน ก็พัฒนาสิ่งต่าง ๆ มาทดแทนและเสริมสร้างกระบวนการทำงานให้มีประสิทธิภาพสูงขึ้น ทุกวันนี้มีการใช้หุ่นยนต์ และปัญญาประดิษฐ์ (AI) เข้ามาช่วยในการทำงานของผู้คนอย่างมาก ที่เกริ่นมานี้ เพราะเรามีเทคโนโลยีหนึ่งที่อยากแนะนำให้ทุกท่านรู้จักคือ “Robotic Process Automation” หรือเรียกย่อ ๆ ว่า “RPA” ซึ่งแน่นอนว่าเทคโนโลยีนี้จะช่วยให้กระบวนทำงานของท่านเป็นระบบและง่ายขึ้น

RPA เป็น software solution ที่มีความสามารถในการทำงานแทนมนุษย์ ข้อดีหลัก ๆ ของ RPA ก็คือการลดความผิดพลาดที่เกิดจากมนุษย์ (Human Error) ลดระยะเวลาทำงานลง และทำให้ได้ผลลัพธ์ของงานในปริมาณที่มากยิ่งขึ้น โดยที่การทำงานแทนของ RPA จะทำงานบน software อื่น ๆ บนเครื่องคอมพิวเตอร์ ใช้งานร่วมกับโปรแกรมต่าง ๆ เช่น Microsoft Excel, Web browser หรือแม้กระทั่ง SAP GUI ก็สามารถใช้ได้

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

ขอยก use case เพื่อช่วยอธิบายข้อดีของ RPA ให้เห็นภาพชัด ๆ สมมติว่า ณ บริษัทหนึ่งได้มีงานประเภท Finance เยอะมาก การทำงาน Finance ในส่วนของงาน Payment Process ใช้คนในการทำงานมากกว่า 20 คน เพื่อทำงานดังกล่าวให้เสร็จสิ้นใน 1 วัน แต่หลังจากนำ RPA มาประยุกต์ใช้ในงานนี้แล้ว จะสามารถลดปริมาณคนลงเหลือเพียงไม่กี่คน เพื่อตรวจสอบข้อมูลผิดปกติ ซึ่งเป็นปัญหาให้ไม่สามารถทำงานได้ตามกระบวนการเท่านั้น

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

สำหรับองค์กรที่อยากทราบข้อมูลของ RPA ให้มากขึ้น ทางสตรีมฯ สามารถให้คำปรึกษา วางแผน ไปจนถึงติดตั้งระบบ และดูแลระบบของท่านให้ดำเนินการเป็นปกติเรียบร้อย สนใจติดต่อฝ่ายการตลาด อีเมล Marketing@stream.co.th หรือโทร. 02-679-2233

0 0 Continue Reading →

Stream @ IBM Power Your Future with AI Forum

เมื่อวันพฤหัสที่ 8 มีนาคม 2561 ที่ผ่านมา สตรีมได้ไปร่วมออกบูธกับ IBM ในงาน Power Your Future with AI Forum จัดขึ้นที่โรงแรมแกรนด์ ไฮแอท เอราวัณ กรุงเทพฯ โดยนำ Software Application ล่าสุด “IBM Robotic Process Automation (RPA)” ไปร่วมแสดงในงาน

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

การทำงานของ RPA จะมีอยู่ 2 ส่วนหลัก ส่วนแรกคือ Screen Recorder เป็นการจดจำหน้าจอว่าจะต้องกดปุ่มไหน เพื่อทำงานอะไร ซึ่งระบบจะจดจำทุกอย่างเพื่อให้งานดำเนินไปตามที่ระบุ และส่วนที่สองคือ Task Editor ทำหน้าที่แทรกคำสั่งหรือเงื่อนไขพิเศษเข้าไป รวมถึงการสั่งการให้ระบบทำงานซ้ำๆ จนกว่าข้อมูลจะครบ

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

จุดที่แตกต่างและโดดเด่นกว่าระบบอื่นที่ทำงานคล้ายกันก็คือ RPA จะมี module ให้มาด้วย ไม่ว่าจะเป็น SAP, FTA, Database, Excel ฯลฯ ซึ่งช่วยเพิ่มประสิทธิภาพการทำงานให้ดียิ่งขึ้น

ชม Live สดจากงานได้ที่ https://www.facebook.com/techtalkthai/videos/2003127689717201/

ขอขอบคุณทุกท่านที่แวะมาชมและฟัง RPA ที่บูธสตรีมนะคะ

สนใจสอบถามข้อมูล product เพิ่มเติมได้ที่ marketing@stream.co.th หรือโทร 02-679-2233 ค่ะ

0 0 Continue Reading →

Automic Live Bangkok งานสัมมนาองค์ความรู้เทคโนโลยีการทำ Automation สุด Exclusive

Stream I.T. Consulting มีความยินดีเป็นอย่างยิ่ง ที่เราได้สนับสนุนและร่วมมือกับ Automic Software Pte. ซึ่งเป็นคู่ค้ากันมายาวนาน รังสรรค์จัดกิจกรรมดีๆ อย่างงาน Automic Live Bangkok ซึ่งจัดขึ้นเมื่อวันที่ 23 มีนาคม 2560 ณ โรงแรม The St. Regis Bangkok ให้กับลูกค้าผู้มีอุปการคุณ ได้มีทางเลือกในการส่งเสริมธุรกิจให้เติบโตอย่างยั่งยืน ด้วย Solution จาก Automic Software ซึ่งเป็นซอฟต์แวร์ที่ช่วยให้กระบวนการทำงานทางด้าน IT Operation สามารถดำเนินไปได้อย่างเป็นระบบ เป็นขั้นตอน และอัตโนมัติ

โดย Solution ของ Automic Software สามารถช่วยให้งาน IT Operation ต่างๆ เป็น IT Automation ได้อย่างมีประสิทธิภาพ  ไม่ว่าจะเป็นกระบวนการประมวลผลแบบ Batch Processing กระบวนการ Application Deployment  หรือกระบวนการบริหารจัดการระบบงานต่างๆ ใน Data Center ให้เป็นไปอย่างถูกต้อง รวดเร็ว ซึ่งจะช่วยเพิ่มประสิทธิภาพและลดเวลาในการทำงานทางด้าน IT Operation ได้อย่างมาก สามารถตอบสนองความต้องการทางด้านธุรกิจขององค์กรได้สูงสุด

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

เราได้รวบรวมภาพบรรยากาศในงานมาให้ชมกันค่ะ

ติดตามข้อมูลข่าวสารเกี่ยวกับ Stream I.T. Consulting ได้ที่เว็บไซต์ www.stream.co.th และ FB Fan Page www.fb.com/streamitconsulting

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

0 0 Continue Reading →

Stream I.T. Consulting มุ่งขยายตลาดเข้าสู่อุตสาหกรรม ร่วมออกบูธพร้อมโชว์หุ่นยนต์สุดล้ำ Beam Telepresence เป็นครั้งแรก

บริษัท สตรีม ไอ.ที. คอนซัลติ้ง ได้เข้าร่วมงาน “Thailand Industrial Fair & Food Pack Asia 2017” ซึ่งเป็นงานแสดงสินค้าเครื่องจักรอุตสาหกรรมครั้งใหญ่ ณ ศูนย์นิทรรศการและการประชุมไบเทค บางนา เมื่อวันที่ 2-5 มีนาคม 2560 ที่ผ่านมา

สำหรับโซลูชั่นที่เตรียมมานำเสนอในงานนี้ก็คือ ซอฟต์แวร์ที่ช่วยในจัดการและจัดเก็บข้อมูลเอกสารรายงาน ในรูปแบบอิเล็กทรอนิกส์ (eReport) ซึ่งมีชื่อว่า Content Manager OnDemand เพื่อให้สะดวกต่อการจัดเก็บและประหยัดทรัพยากรยิ่งขึ้น นอกจากนี้ ยังมี IFS Applications ระบบการวางแผนทรัพยากรทางธุรกิจขององค์กรโดยรวม (Enterprise Resource Planning : ERP) ที่ช่วยในการวิเคราะห์ธุรกิจเพื่อเพิ่มขีดความสามารถในการแข่งขัน ทั้งด้านการผลิตและบริการ

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

เราเก็บภาพบรรยากาศในงานมาให้ชมกันค่ะ

สตรีมนำหุ่นยนต์ Beam Telepresence ไปเดินในงาน ได้รับความสนใจจากผู้มาเดินชมงาน และบริษัทที่มาร่วมออกบูธ

ผู้เข้าชมงานให้ความสนใจ แวะเวียนมาสอบถามเกี่ยวกับซอฟแวร์และโซลูชั่นที่บูธ

หลายๆ ท่าน ก็แวะมาร่วมสนุกกับเรา พร้อมรับของรางวัลกลับบ้าน

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

ผู้ที่สนใจติดตามข่าวสารจากสตรีม สามารถเข้าไปที่ Facebook fan page: www.facebook.com/Streamitconsulting/ และ www.stream.co.th

สำหรับผู้ที่สนใจโซลูชั่นและเทคโนโลยี สามารถติดต่อทีมงานสตรีมได้ที่ marketing@stream.co.th เราพร้อมตอบคำถามและแนะนำผลิตภัณฑ์อย่างใกล้ชิดค่ะ

0 0 Continue Reading →

สตรีมรุกตลาด Education ร่วมงาน Wunca ครั้งที่ 34

บริษัท สตรีม ไอ.ที. คอนซัลติ้ง ได้ไปร่วมงาน “Wunca ครั้งที่ 34” ซึ่งเป็นงานแสดงเทคโนโลยีและนวัตกรรมที่นำมาใช้กับสถาบันการศึกษา เป็นพื้นที่รวมกลุ่มของเหล่านักวิชาการได้พบปะแลกเปลี่ยนความคิดเห็นกัน ณ มหาวิทยาลัยแม่ฟ้าหลวง จังหวัดเชียงราย เมื่อวันที่ 18-20 มกราคม 2560 ที่ผ่านมา

สำหรับโซลูชันที่สตรีมนำมาเป็นไฮไลท์ของงานนี้ก็คือ ซอฟต์แวร์ที่ช่วยจัดการและจัดเก็บ Content ไม่ว่าจะเป็นเอกสารหรือรายงานต่างๆ ให้อยู่ในรูปแบบอิเล็กทรอนิกส์ (eDocument/eReport) สำหรับหน่วยงานที่ต้องการตัวช่วยในการจัดเก็บข้อมูลให้สะดวกมากยิ่งขึ้น สามารถเรียกค้นข้อมูลจากระบบได้ง่าย ประหยัดเวลาและค่าใช้จ่ายในหลายๆ ส่วน และมาพร้อมโปรโมชันสุดพิเศษในงานอีกด้วย

เราขอเก็บตกภาพบรรยากาศในงานมาฝากกันค่ะ

 

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

Wunca2_2

 

พร้อมกับกิจกรรมสร้างความสนุกและรอยยิ้มของผู้ร่วมเล่นเกมส์อย่างต่อเนื่องตลอดทุกวัน

Wunca3_2

 

ยอดฝีมือที่ได้รับรางวัลของเรา

Wunca1_2

 

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

 

สำหรับผู้ที่สนใจติดตามข่าวสารจากสตรีม สามารถเข้าไปที่ Facebook fan page: @Streamitconsulting และ www.stream.co.th

ผู้ที่สนใจโซลูชันและเทคโนโลยี สามารถติดต่อทีมงานสตรีมได้ที่ marketing@stream.co.th เราพร้อมตอบคำถามและแนะนำผลิตภัณฑ์อย่างใกล้ชิด

0 2 Continue Reading →

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

Privacy Preferences

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

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

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

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

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

Save