บทความ
ไม่ว่าจะ ข่าวสาร บทสัมภาษณ์ และ Digital Skill บนสื่อ
มีให้คุณได้อ่านบทความดี ๆ มากมายแล้วที่นี่
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (6)
Asset/People Tracking using BLE Beacons — Server SetupAsset/People Tracking using BLE Beaconsจากบทความที่แล้ว….. เสร็จเรียบร้อยกันไปแล้วนะคะในส่วน ของ Scanner ซึ่งสามารถมีได้มากกว่าหนึ่งตัวนะคะ จากในรูปจะเห็นว่ามี Scanner อยู่ 3 ตัว และจะเห็นว่ามีส่วนที่ overlap กันอยู่ ซึ่งถ้าหาก มี beacon อยู่ในพื้นที่ overlap ตรงนี้ เราจะมีวิธีแยกได้ยังงัยว่า beacon อยู่ใกล้ Scanner ตัวไหนมากที่สุด เราจะใช้วิธีคำนวณจาก RSSI distance = 10 ^ ((Measured Power - RSSI) / 10 * 2)ซึ่งอ้างอิงจากบทความนี้ค่ะHow to Calculate Distance from the RSSI value of the BLE BeaconI am sure many people are working on the BLE technology and even on the projects like Indoor Location Positioning…iotandelectronics.wordpress.comในบทความนี้เราจะ setup ส่วนของ Server เพื่อเก็บข้อมูล เข้า Database — sqlite แล้วทำการคำนวณให้เราค่ะ รวมไปถึงการทำหน้า Report ส่งที่ต้องเตรียมนะคะ…….. 1. Code ค่ะ2. Application Key สำหรับ Server จาก netpie ค่ะ3. Server สำหรับ run Code (จากข้อ 1.)1. Codeตามไป clone ได้จากที่นี่เลยค่ะes08/serverContribute to es08/server development by creating an account on GitHub.github.com2. Application Key สำหรับ Serverเราจะทำการสร้าง Application Key ใหม่ สำหรับ Server เราค่ะ เราเคยทำกันไปแล้วนะคะ สำหรับการสร้าง Application Key สำหรับ Scanner ของเรา จากบทความ สิ่งเล็กๆที่เรียกว่า Beacon (4) สามารถย้อนกลับไปดูวิธีทำได้จากบทความนี้เลยค่ะเมื่อได้ clientId, username, password จาก netpie-auth มาแล้ว นำมาใส่ที่ config > local.json ได้เลยค่ะ"mqtt":{"url": "mqtt://gb.netpie.io","username": "<your username>","password": "<your username>","clientId": "<your clientId>"}จากนั้นทำการ run ไฟล์ server.js ได้เลยค่ะซึ่งเมื่อทำการเชื่อมต่อ (connected)กับ mqtt server เรียบร้อยแล้ว จะเห็น ข้อความแบบนี้ค่ะconnectedsubscribe to topic /Beacon/gearname/scaner/beacon/exitsubscribe to topic /Beacon/gearname/scaner/beacon/updateนั่นหมายความว่า ตัว server เราทำการ subscribe กับ topic ที่ชื่อว่า/Beacon/gearname/scaner/beacon/exit/Beacon/gearname/scaner/beacon/updateซึ่งจะเป็น topic ที่ตรงกับที่ scanner ได้ publish ไว้นะคะและถ้าสังเกตุ log ไปเรื่อยๆนะค่ะ จะเห็นว่า เริ่มมีการบันทึกข้อมูลของ beacon ที่เจอลง beacon.db ซึ่งเป็น sqlite แล้วค่ะtopic /Beacon/gearname/scaner/beacon/update----------------Location: Node AUUID: 60106EC7-790F-4D9B-9E86-468D2950D9D5Distance: 0.0042805510914958045Last Find Date: 2019-05-17T09:33:56.331Z----------------AddNewBeacon 0cf3eeb80576UpdateDistanceBeaconTotal beacon(s) found from all scanners = 1--------------------Send data to databasebeacon 0cf3eeb80576 Node AOpen databaseSave to sqlite3ข้อมูลทุกอย่างพร้อมแล้ว ทีนี้มาดู หน้าเวป summary ของเรากันค่ะ ด้วยการ run ไฟล์ summary.js ได้เลยค่ะจากรูป จะเป็นการโชว์ว่า beacon ที่ scanner A เจอ ในแต่ละช่วงเวลามีกี่ตัวนะคะ ในตัวอย่าง จะเจอ 1 ตัว ที่เวลา 16:00–17:00 ค่ะถ้าคลิกไปที่ตัวเลข (1) จะเปิด modal เพื่อโชว์ว่ามี beacon ที่เจอคือid ไหน และมีจำนวนที่เจอกี่ครั้ง ในช่วงเวลานั้นๆค่ะ ซึ่ง id ของ beacon สามารถเข้าไปเปลี่ยนได้ที่ beacon_list.json คะจากรูป จะบอกว่า beacon ที่เจอ มี id คือ 0cf3eeb80576 และมี name ว่า E (ตรงนี้สามารถเปลี่ยนเป็นชื่อคน หรือ สิ่อของที่เราต้องการ track ได้นะคะที่ beacon-list.json ค่ะ) และ เจอโดย scanner A ในช่วงเวลา 16:00–17:00 จำนวน 15 ครั้งค่ะข้อมูลที่เรามีตรงนี้สามารถนำไปทำ visualiazation เช่น graph ได้นะคะ ซึ่งสามาถนำมาเป็นข้อมูลเชิงสถิติ มีประโยชน์มากเลยทีเดียวค่ะ …จากการใช้งานจริงๆของผู้เขียน พบปัญหาบ่อยครั้งว่า ข้อมูลขาดหายไปค่ะ ซึ่งค่อนข้างจะเป็นปัญหาสำหรับผู้เขียนในการเก็บข้อมูล หากจะต้องคอยมาเชคข้อมูลผ่าน balena cloud dashboad ตลอดเวลาก็ไม่ค่อยจะสะดวกค่ะ ผู้เขียนจึงได้ทำตัว monitor ขึ้นมาค่ะ โดยใช้ตัวช่วยอย่าง IFTTT และ Line Nofity ค่ะ ซึ่งง่าย ไม่ซับซ้อน แต่ใช้งานได้ดี เหมาะกับงาน monitor ดีทีเดียวค่ะ ติดตามอ่านวิธีทำในบทความต่อไปนะคะ สวัสดีค่ะ…
โดย: อิศเรศ ประจิตต์มุทิตา
| Digital Skill
วิเคราะห์ภาพรวมสายงาน โปรแกรมเมอร์ ในปัจจุบันจากข้อมูลจริงกว่า 2400 คน!!
ปัจจุบันเป็นที่รู้กันอยู่แล้วว่า สายงาน IT เป็นหนึ่งในสายงานที่เงินเดือนสูงมากกก! บทความนี้เราจะมาขยายความให้ทุกคนได้เห็นและเข้าใจโลก IT ในปัจจุบันมากขึ้นว่า หากเราโฟกัสที่สาขา programming เป็นหลัก เรื่องของตำแหน่ง เงินเดือน และทักษะที่เกี่ยวข้องจะเป็นอย่างไรบ้างนะ จากภาพเราจะเห็นได้ว่า เงินเดือนเริ่มต้นของนักศึกษาจบใหม่ หรือคนที่มีประสบการณ์ทำงานไม่เกิน 3 ปีนั้น ค่อนข้างแตกต่างตามตำแหน่งงานอยู่บ้าง แต่เอ๊!? เราควรเข้าใจก่อนว่าแต่ละตำแหน่งงานมีหน้าที่แตกต่างกันอย่างไร ทำไมถึงมีความเหลื่อมล้ำของเงินเดือนอยู่พอควรเลยทีเดียว Front-end Developer: คนนี้ทำหน้าที่ดูแลส่วนโต้ตอบกับผู้ใช้ทุกอย่างครับ ทั้งข้อความ, ปุ่ม, รูปภาพ และขนาดของ elements เว็บไซต์พอดีกับหน้าจอคอมพิวเตอร์ไหม อยู่บนโทรศัพท์มือถือแล้วดูแปลกหรือเปล่า Back-end  Developer: คนที่ทำหน้าที่จัดการระบบเบื้องหลังทั้งหมดของแอปพลิเคชัน, สร้าง API สำหรับเป็นตัวกลางในการเข้าไปใช้งานข้อมูลในฐานข้อมูล, เน้นใช้โลจิคออกแบบการทำงานของโปรแกรม, กำหนดทิศทางข้อมูลจะวิ่งจากไหนไปไหน ด้วยวิธีอะไร โครงสร้างเป็นอย่างไร, ระบบความปลอดภัย, ชนิดของฐานข้อมูลที่ใช้เก็บข้อมูล ฯลฯ Full-Stack Developer: เป็นการผสมบทบาทของ Front-End และ Back-End ไว้ในคนๆ เดียวครับ หรือ ในบางครั้งอาจจะรวมถึงการทำในส่วนของ Infrastructure เช่นการจัดการ Server อีกด้วย  Software Developer: นักพัฒนาซอฟต์แวร์ มีหน้าที่ code โปรแกรม แต่เพิ่มการ design, Architecture, UML แต่บางคนอาจเรียกรวมหรือสลับกับ Programmer ก็ได้ ซึ่งในหลายๆบริษัทตำแหน่ง Software Developer อาจจะเป็นตำแหน่งเดียวกับ Full-Stack Developer ก็ได้เช่นกัน ทั้งนี้ขึ้นอยู่กับบริษัทนั้นๆ  Web Developer: เป็นตำแหน่งที่โฟกัสในส่วนของการพัฒนาเว็บไซต์เป็นหลัก ซึ่งเป็นตำแหน่งที่ขึ้นอยู่กับ job description ของบริษัทนั้นๆ เลย ในบางครั้งอาจจะเป็นตำแหน่งที่ทำในลักษณะของ Front-end เช่นเดียวกับ Front-end Developer ก็ได้ หรือ ในบางครั้งอาจจะหมายถึง Full-Stack Developer ก็ได้เช่นกัน Mobile Developer: คนที่พัฒนาแอปพลิเคชันต่างๆ  ของสมาร์ทโฟนหรือแท็บเล็ต โดยในตำแหน่งนี้จะแยกอีกว่าเป็นในฝั่งของ IOS หรือ Android ซึ่งในการพัฒนาแอปพลิเคชันนั้น แต่ละสาขามีความแตกต่างกันโดยสิ้นเชิง ทั้งในเรื่องของภาษา และ ความรู้พื้นฐานที่ใช้ในการพัฒนา Game Developer: เป็นหนึ่งในนักพัฒนาซอฟต์แวร์ที่มีความเชี่ยวชาญเฉพาะในการพัฒนาเกม กระบวนการออกแบบจึงมีความคล้ายกัน นักพัฒนาเกมจำเป็นต้องมีทักษะทั้งการเป็นโปรแกรมเมอร์ และเป็นดีไซน์เนอร์ ที่ต้องอาศัยความคิดสร้างสรรค์ในการออกแบบเกม แลมีทักษะการทำกราฟิกบ้าง Data engineer: ทำหน้าที่ออกแบบวิธีการจัดเก็บ และเรียกใช้งานข้อมูล มุมมองของข้อมูลของเขา คือ Data flow หรือ Pipeline รวมไปถึงการจัดเก็บและเรียกใช้งานข้อมูล โดยมีโจทย์สำคัญคือการรับมือการข้อมูลที่เพิ่มเข้ามาในระบบอย่างต่อเนื่อง หรือการจัดเก็บข้อมูลปริมาณมากได้อย่างมีประสิทธิภาพ Data analyst: คนที่ใช้ข้อมูลในการวิเคราะห์แนวโน้ม หรือแก้ปัญหาจากสิ่งที่ผิดแปลกไปจากแนวโน้มเดิม โดยใช้หลัก สถิติ ทั้งนี้การวิเคราะห์ต่างๆ ต้องอาศัยประสบการณ์ และมุมมองที่เฉียบขาด IT support: เป็นตำแหน่งงานสาย IT ที่เน้นการปฏิบัติการเป็นหลัก คอยแก้ไขปัญหาจุกจิกภายในบริษัท สโคปงานจะใกล้เคียงกันบ้าง เช่น ดูแลอุปกรณ์คอมพิวเตอร์ภายในสำนักงาน ดูเรื่องกล้อง CCTV ดูแลอินเตร์เน็ต เซิร์ฟเวอร์ ฯลฯ QA or Test Developer: เป็นคนที่รอทดสอบระบบหรือโปรแกรมที่ทีม Developer สร้างมา ว่าระบบหรือโปรแกรมนั้นทำงานถูกต้องตาม Requirement หรือไม่ และเป็น คนหาความผิดพลาดในการทำงานของโปรแกรม ก่อนที่จะส่งงานไปให้ลูกค้า จากกราฟด้านล่าง เป็นการสรุป “ทักษะ” ที่จำเป็นสำหรับตำแหน่งต่างๆ โดยเราโฟกัสที่ Top 6 สายงานของเด็กจบใหม่ที่เงินเดือนสูง ซึ่งเป็นทักษะที่จำเป็นต้องมีสำหรับการทำงานในปีแรกครับ จะเห็นได้ว่า ถึงแม้ทักษะที่จำเป็นของแต่ละงานจะซ้ำๆ กันอยู่บ้าง แต่ ทักษะที่จำเป็นต้องมี กับ ทักษะที่รู้ไว้ก็จะเป็นประโยชน์ นั้นแตกต่างกัน อย่างภาษา HTML/CSS หรือ SQL เป็นทักษะที่ติด Rank มาในทุกสายงานก็จริง แต่ความสำคัญสำหรับแต่ละสายงานก็ไม่เท่ากัน เช่น HTML/CSS สำหรับ Front-end Developer เป็นทักษะสำคัญที่ต้องมี แต่สำหรับ Data or Business analyst แล้วอาจไม่ได้สำคัญขนาดนั้น แต่ถ้าพอมีความรู้ไว้ก็จะดี (ข้อมูลดังกล่าวเป็นการสรุปจากการทำแบบสอบถาม ไม่ได้หมายความว่าคุณจะต้องมีทักษะตามที่ระบุเท่านั้น ถึงจะทำงานตำแหน่งดังกล่าวได้) หากใครกำลังต้องการศึกษาหรืออยากพัฒนาทักษะเพื่อทำงานสายนี้ ผลการสำรวจนี้อาจช่วยเป็น guideline ให้คุณได้นะครับ ไหนๆ บทความนี้ก็มุ่งเน้นให้คนทั้งในและนอกสาย IT ได้อ่านเป็นข้อมูลเพื่อให้เห็นภาพรวมแล้ว เราจึงทำการวิเคราะห์ในประเด็นสำคัญอีกหนึ่งประเด็นเพิ่มเติมว่า “อะไรคือสาเหตุหลักที่ทำให้คนสาย IT หมดไฟ!!” จากข้อมูลเราเห็นได้อย่างชัดเจนเลยว่า ไม่ว่าประสบการณ์จะมากหรือน้อย ทำงานมาแล้วกี่ปี ปัญหาใหญ่สุดของการหมดไฟคือ “ไม่เกิดการเรียนรู้สิ่งใหม่ๆ” แปลว่าหากคุณเป็นผู้ที่มีส่วนการขับเคลื่อนองค์กร เช่น CTO, Team Lead หรือแม้แต่ ถ้าคุณคือผู้ประกอบการ สิ่งหนึ่งที่คุณควรสนใจและให้ความสำคัญกับคนในองค์กรคือ การส่งเสริมให้เกิดการเรียนรู้สิ่งใหม่ๆ ตลอดเวลา ทุกคนย่อมมีความสนใจที่จะเรียนรู้สิ่งใหม่ๆ แตกต่างกันตามความสนใจส่วนบุคคล ซึ่งถ้าว่ากันด้วยภาพรวมนั้น เราได้ทำการวิเคราะห์และสรุปมาดังนี้ คุณจะเห็นได้ทันทีเลยว่า ในแต่ละช่วงอายุจะมีความสนใจในการเรียนรู้สิ่งใหม่ที่แตกต่างกัน แต่ Top Hit Keyword อย่าง Data science และ Blockchain ซึ่งมาเป็นอันดับหนึ่งและสองในกลุ่มวัยทำงานนั้น แสดงให้เห็นชัดเจนว่า เทรนด์ของทั้งสองทักษะกำลังเป็นสิ่งที่ทุกคนสนใจและอยากจะศึกษา แต่ถ้าเรามองที่อันดับสามของแต่ละช่วงอายุ เราจะเริ่มเห็นความแตกต่างแล้วว่ากลุ่มใดสนใจในทักษะไหน ยกตัวอย่างเช่น ในกลุ่มช่วงอายุ 26-30 เริ่มให้ความสนใจที่จะศึกษาทักษะสำคัญอย่าง CI/CD ซึ่งอาจมองได้ว่า ทักษะพื้นฐานอย่าง Database ที่กลุ่มเด็กจบใหม่อย่างช่วงอายุ 21-25 ที่ให้ความสนใจนั้น ในกลุ่มช่วงอายุ 26-30 อาจจะมีความเชี่ยวชาญแล้ว จึงหันไปสนใจในทักษะอื่นๆ แปลว่าหากคุณเป็นคนที่จะผลักดันให้เกิดการเรียนรู้ของคนในองค์กรนั้น ภาพนี้เป็นหนึ่งในสิ่งที่ช่วยให้คุณสามารถนำไปใช้พัฒนาคนในองค์กรได้อย่างดีเลย แน่นอนว่าวิธีการเรียนรู้ในปัจจุบันมีวิธีที่หลากหลายให้เลือกเต็มไปหมด แต่วิธีไหนล่ะที่คนส่วนใหญ่ให้ความสนใจมากที่สุด?กว่า 51.1 % ของผู้ทำแบบทดสอบทั้งหมด ให้คำตอบเป็นไปในทิศทางเดียวกันว่า การเรียนที่ให้ผลดีที่สุดคือ การเรียนผ่านทางคอร์สเรียนออนไลน์ เช่น Youtube, MOOCs (Udemy, Coursera) เป็นต้น  แต่เราก็ยังมีคำถามอยู่ว่า แล้วคอร์สเรียนออนไลน์แบบไหนล่ะ ที่ทำให้คนส่วนใหญ่สนใจอยากจะเรียนมากที่สุด หากลองเปรียบเทียบระหว่างคอร์สเรียนออนไลน์ในรูปแบบเดียวกันแต่เป็นภาษาไทยกับภาษาอังกฤษ ก็จะเห็นได้ว่ายังมีความเหลื่อมล้ำกันอยู่พอสมควร อาจเป็นเพราะปัจจัยทางภาษานี้ที่ทำให้กลุ่มคนส่วนใหญ่ยังมีข้อจำกัดทางการเรียนรู้เพิ่มเติมเพื่อพัฒนาตนเองอยู่ ซึ่งทางสมาคมโปรแกรมเมอร์ไทยได้มองเห็นถึงปัญหานี้ จึงได้มีแนวคิดในการส่งเสริมการเรียนรู้ที่ประโยชน์ เช่น การประชาสัมพันธ์ให้ประชาชนรู้จัก MOOCs มากขึ้นทั้งของไทยและต่างประเทศ หรือการส่งเสริมให้มีการแปลความรู้จากภาษาอังกฤษเป็นภาษาไทย อย่างที่กำลังดำเนินการพัฒนาแพลตฟอร์ม Digital Skill นี้ เพื่อที่จะเตรียมความพร้อมให้คนไทยได้รับประโยชน์จากสื่อการเรียนรู้อย่างเต็มที่ และนำผลวิเคราะห์ที่ได้นี้มาเป็นข้อมูลในการทำกิจกรรมต่างๆ ที่เหมาะสมต่อไป และสุดท้าย ข้อมูลทั้งหมดในบทความนี้มาจากแบบสอบถาม https://forms.gle/N9D28PcKb3LQT27x8 โดยได้ทำการเก็บข้อมูลมาตั้งแต่วันที่ 26 มิถุนายน 2562 ถึง 10 กันยายน 2562 ปัจจุบันมีผู้ร่วมทำแบบสอบถามอยู่ที่ 2,392 คน จากทั้งสมาชิกของสมาคมโปรแกรมเมอร์ไทย การช่วยเผยแพร่ของกลุ่มโปรแกรมเมอร์และวิทยากรงาน Code Mania อีกทั้งเราลงทุนกับการโปรโมตผ่านช่องทางออนไลน์ไปกว่า 23,000 บาท โดยได้รับการสนับสนุนค่าใช้จ่ายจากสำนักงานส่งเสริมเศรษฐกิจดิจิทัล(DEPA) ซึ่งเรามีความตั้งใจว่าจะเปิดเผยข้อมูลทั้งหมด (Open Data) ให้ทุกท่านนำไปวิเคราะห์เชิงลึกได้อย่างอิสระ เมื่อมีจำนวนผู้ร่วมทำแบบสอบถามครบ 10,000 คน ยังไงก็ช่วยกันแชร์ได้นะครับ เพื่อข้อมูลที่สามารถนำไปวิเคราะห์ต่อยอดให้เป็นประโยชน์ต่อไปได้ ขอบคุณครับ:)อิศเรศ ประจิตต์มุทิตาอุปนายกสมาคมโปรแกรมเมอร์ไทย
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (5)
Asset/People Tracking using BLE Beacons — Scanner Setup IIIมาถึงขั้นตอนสุดท้ายของการ Setup Scanner กันแล้วค่า หลังจากที่เราได้ทำไปแล้ว 5 ขั้นตอน :1. Sign up and login2. Create an application3. Add a device and download the OS4. Flash your SD card and boot the device5. Add application environment variablesถึงตรงนี้ เราได้ทำการเชื่อมต่อ RPi เข้ากับ balena แล้วนะคะขั้นตอนสุดท้าย เราจะ Deploy Code ค่ะ…เริ่มต้นด้วยการเตรียม code สำหรับ Scanner รอไว้ก่อนเลยค่ะes08/scannerContribute to es08/scanner development by creating an account on GitHub.github.comซึ่งก็จะมีไฟล์ตามนี้นะคะScanner Folderจากนั้นไปเพิ่ม SSH Key ของเราบน balena ก่อนค่ะ เพราะเราจะ push code ของเรา ผ่าน git ค่ะ อ่านรายละเอียดเพิ่มเติมวิธีเพิ่ม SSH Key ได้ที่นี่ค่ะ Generating a new SSH key and adding it to the ssh-agent - GitHub HelpBefore adding a new SSH key to the ssh-agent to manage your keys, you should have When adding your SSH key to the…help.github.comได้ SSH Key มาแล้วก็นำไปใส่ไว้ที่นี่ค่ะ Preference > SSH Keysbalena — Adding an SSH Keyเพิ่ม key กันเสร็จเรียบร้อย กลับมาหน้า Application ของเรากันก่อนค่ะApplication — Scannerลองสังเกตุตามรูปนะคะ ตรงมุมขวาบน ถ้าคลิก (?) จะเห็นรายละเอียดเกี่ยวกับการ push code คล้ายๆรูปข้างล่างนี้ค่ะ ซึ่งจะบอกend point ของ repository ของ Application เราค่ะ เริ่ม add remote และ push code ได้เลยค่ะ $ git remote add balena <USERNAME>@git.balena-cloud.com:<USERNAME>/<APPNAME>.git$ git push balena masterจะสังเกตุเห็น Unicorn นะคะ ถ้า code ถูก complie / build เสร็จ แล้วค่ะbalenaกลับมาที่ balena cloud dashboad ค่า…..ลองคลิกดูที่ พาย (Device)ของเรานะคะ จะเห็นว่า Status เค้าเริ่มมีการ Update ค่ะ หลังจากเรา push code ไปเสร็จเรียบร้อย รอจนครบ 100%ตอนนี้ Scanner ของเราพร้อมใช้งานแล้วค่ะ หยิบ beacon ของเรา (ในบทความนี้เราใช้ ibeacon นะคะ) มาเช็คกันเลยค่ะเปิด Log ขึ้นมา (สามารถเปิดได้จากบน balena cloud dashboard ได้เลยนะคะ) ขยายให้เห็นเต็มๆจอ) จะเห็นว่าน้องพายเรา เจอ beacon แล้วค่ะ Scanner Logเสร็จกันไปแล้ว ในส่วน ของ Scanner ค่ะ ในการใช้งานจริงๆ beacon ตัวนึงเนี่ย สามารถถูกแสกนเจอโดย Scanner หลายๆตัวในพื้นที่ใกล้เคียงกันได้ค่ะ ละเราจะมีวิธีรู้ได้ยังไงว่า beacon ตัวนี้ใกล้ Scanner ตัวไหนหรืออยู่ใน area ไหนกันแน่ เรามีวิธีคำนวณ พร้อมทำ Server ไว้เก็บข้อมูล และทำหน้าReport ให้เราค่ะ… มาติดตามวิธีทำ Server กันต่อใน สิ่งเล็กๆที่เรียกว่า Beacon ตอนต่อไปค่ะ….
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (4)
Asset/People Tracking using BLE Beacons — Scanner Setup IIสวัสดีคะ…… จากบทความที่แล้ว ( Scanner Setup I) เราได้ทำการ Setup Scanner ตาม 4 ขั้นตอนนี้ไปแล้ว1. Sign up and login2. Create an application3. Add a device and download the OS4. Flash your SD card and boot the deviceแต่เรายังไม่ได้เพิ่ม Environment Variables และ Deploy โค้ดค่ะ …งั้นเราไปต่อกันเลยค่ะ กับขั้นตอนที่ 5. Add application environment variables5. Add application environment variablesตรงนี้เราจะยังอยู่ในส่วนของ Application Configuration นะคะ เราจะเพิ่ม Application Environment Variables ตามนี้ค่ะ :beacon_serivce_uuid — <ใช้ uuid generator ทั่วไป generate ค่าได้เลยค่ะ>device_name — new_nodemqttClientId — clientIdmqttUsername — usernamemqttPassword — passwordmqttUrl — mqtt://gb.netpie.iotopicBeaconExit — /Beacon/gearname/scanner/beacon/exittopicBeaconStay — /Beacon/gearname/scanner/beacon/updateเสร็จจาก Application Environment Variables ก็ไปต่อที่ Device Environment Variables กันค่ะ ค่าต่างๆในส่วนของ Device จะ override ค่าที่ตั้งไว้ใน Application Environment Variables นะคะ ถ้าชื่อตรงกัน ซึ่งเราจะ override ตัวแปร 4 ตัวนี้ค่ะ :device_namemqttClientIdmqttUsernamemqttPassworddevice_nameสามารถเป็นชื่ออะไรก็ได้นะคะ ในบทความจะใช้ชื่อว่า Node A ละกันนะคะ เวลาดึงไปโชว์บนเวปจะได้เข้าใจง่ายค่ะ ว่าตัวไหนเป็นตัวไหนmqttClientId, mqttUsername, mqttPasswordส่วนสามตัวนี้ถ้าสังเกตุจากชื่อ mqtt* พอจะเดาได้ใช่มั้ยค่ะว่าต้องเกี่ยวข้องกะ MQTT ที่เราเคยพูดถึงกันไปแล้วแน่ๆ ในการเซทค่าเกี่ยวกับ mqtt ตรงนี้เราจะใช้ NETPIE เป็นตัวช่วยในการจัดการเกี่ยวกับ Ownership และ Authorization ค่ะ (อย่าเพิ่ง งง นะค่ะ ตามมาอ่านคำอธิบายด้านล่างกันค่ะ …)….เราจะ Pause เรื่องการเซทค่าตรงนี้แปบนึง ละไปคุยกันเรื่อง NETPIE กันก่อนคะ…NETPIE | Network Platform for Internet of EverythingNetwork Platform for Internet of EverythingNetwork Platform for Internet of Everythingnetpie.ioNETPIE — Network Platform for Internet of Everything เป็น Cloud Platform สำหรับเชื่อมต่ออุปกรณ์ หรือ Things ใน IoT ค่ะ (Distibuted MQTT Broker) มี Client Library ที่เรียกว่า Microgear ค่ะพัฒนาขึ้นมาโดย NECTEC และเปิดให้บุคคลทั่วไปใช้ได้ FREE ค่ะแต่ต้องลงทะเบียนและจัดการตัวตน(Ownership)และสิทธิ์ของแอปพลิเคชั่น (Authorization)และอุปกรณ์กันก่อน ซึ่งจะใช้ Client ID, Username และ Password ในการพิสูจน์ตัวตนก่อนเข้าใช้ NETPIE ซึ่งเป็นไปตามมาตรฐานของ MQTT 3.1.1 ค่ะClient ID มีไว้เพื่อให้ Broker ใช้ระบุตัวตนของ Client ดังนั้น Client ID จะต้องไม่ซ้ำกันค่ะUsername และ Password มีความจำเป็นสำหรับให้ Broker ใช้ในการ Authentication และ Authorization ซึ่งเป็นไปตามมาตรฐานของ MQTT 3.1.1 เช่นเดียวกันค่ะ…มาเริ่มใช้งาน NETPIE เพื่อนำมาเซทค่าให้mqttClientId, mqttUsername, mqttPassword กันค่ะ …เริ่มต้นสมัครและลงทะเบียนกันก่อนค่ะในส่วนของMobile Phone Number มีความสำคัญนะคะ เพราะจะใช้รับ OTP SMS ค่ะได้รับ OTP เสร็จ ก็จัดการ Login เลยค่ะ2. เริ่มสร้าง Application (AppID) ค่ะ ใช้ชื่อว่า Beacon3. สร้าง Application Key ค่ะตั้งชื่อ Application Key ว่า Scanner และเลือกใช้ Device Key นะค่ะNote: ข้อแตกต่างระหว่าง Device Key และ Session Key ค่ะDevice Key คือ Key ที่ใช้กับอุปกรณ์ Device Key ของอุปกรณ์จะถูกจำไว้ตลอดค่ะ ถึงแม้อุปกรณ์จะไม่ได้เชื่อมต่อกับ NETPIE แล้ว (Offline)แต่เมื่อมีการเชื่อมต่อกลับเข้ามาใหม่ จะถูกมองว่าเป็นอุปกรณ์ตัวเดิมค่ะSession Key คือ Key ที่ใช้กับอุปกรณ์ที่มีการใช้งานไม่ถาวรเช่น Browser ค่ะลองตรวจสอบข้อมูลและดูรายละเอียดของ Key ที่เราสร้างกันค่ะ ซึ่งประกอบด้วย Application Key NameKey สำหรับให้อุปกรณ์ใช้สำหรับเชื่อมต่อ NETPIESecret เป็นรหัสลับหรือรหัสผ่านที่อุปกรณ์ต้องใช้คู่กับ Key สำาหรับให้อุปกรณ์เชื่อมต่อ NETPIEREST API auth เป็น key ที่ใช้สำหรับการใช้งานด้วย REST API ค่ะถึงตรงนี้เราจะได้ AppID, AppKey, และ AppSecret มาแล้ว แต่ยังค่ะ… นี่ยังไม่ใช่สิ่งที่เราต้องการ เป็นแค่เพียงสารตั้งต้นค่ะ เราจะต้องนำ AppID, AppKey, และ AppSecret ไปทำการ generate ค่าของ ClientId, Username, และ Password ผ่าน netpie-auth (สามารถทำตามขั้นตอนได้เลยค่ะ ง่ายๆ…)netpie-authUsage $ netpie-auth
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (3)
Asset/People Tracking using BLE Beacons — Scanner Setup สวัสดีค่ะ จากบทความที่แล้วเราได้ทำความเข้าใจกับ Architecture และภาพรวมของระบบติดตามด้วย Beacon ที่เราจะทำกันไปแล้วนะคะ ในบทความนี้…..เราจะมาเริ่มทำ Scanner ด้วย Raspberry Pi (RPi)กันค่ะ ซึ่งเราจะใช้ balenaCloud ค่ะ เป็น Container-based Server Platform (เดิม resin.io) ในการ ช่วย manage & monitor ตัว Scanner และยังช่วย deploy โค้ดของเรา บน RPi ค่ะbalena.ioสิ่งที่เรากำลังจะทำในขั้นตอน Scanner setup นี้นะคะ…พระเอกของเราก็คือ balena นี่แหละค่ะ จัดการทุกอย่างให้น้องพาย น้องพายของเรามีหน้าที่แค่อยู่เฉยๆ รอเสียบปลั๊กจ่ายไฟแค่นั้นละค่ะเราจะใช้ balena เพื่อทำการติดตั้ง balenaOS บนน้องพายของเราค่ะและเราจะใช้ balena เพื่อ push โค้ดของเรา ขึ้นไปที่ balena server เพื่อทำการ deploy ค่ะและสิ่งที่ต้องมีค่ะ…..SD cardRaspberry Pi 3 B/B+balenaCloud accountbalenaCloudSign in to monitor and manage your device fleet from the balenaCloud dashboard.dashboard.balena-cloud.com4. โปรแกรมสำหรับ flash ค่ะ balenaEtcherbalenaEtcher - HomeA cross-platform tool for flashing images to SD cards & USB drives.www.balena.io…..มาเริ่มกันเลยคะ ……1. Sign up and loginเริ่มต้นด้วยการ Sign up for a free account กันก่อนค่ะ แต่ถ้าหากใครมี GitHub หรือ Google account แล้วก็สามารถข้าม Signup ไป Login ได้เลยค่ะ2. Create an applicationหลังจาก Sign up และ Login เข้ามาแล้ว จะเจอหน้า Dashboard ค่ะ จากนั้นก็ Create Application ค่ะ (Step 1)Create a new application(Step 2)ใส่ชื่อ Application Name ค่ะ (ตั้งชื่ออะไรก็ได้นะคะ เดี๋ยวเราจะเอาไว้ใช้ push โค้ดทีหลังค่ะ) แล้วเลือก Default Device Type ที่เราจะใช้ค่ะ น้องพาย 3 ของเราค่ะ Raspberry Pi 3 ส่วน Application Type เลือก Starter ค่ะ (สามารถเพิ่มได้ฟรี 10 Device ค่ะ) เสร็จแล้ว (Step3) คลิก Creatae New Application เลยค่ะ3. Add a device and download the OSหลังจากนั้น จะเห็นหน้า Application Dashbaord ค่ะ ในหน้านี้เราสามารถเพิ่ม Device ตามขั้นตอนในรูปข้างล่างนี้เลยค่ะ ถ้าหากเราจะให้ RPi เราเชื่อมต่อด้วย Wi-fi ก็อย่าลืมเปลี่ยน Network Connection เป็น Wifi + Ethernet และใส่ SSID/ Password ของ Wifi ด้วยค่ะ …เสร็จแล้วเลื่อนลงมาข้างล่างสุดเลยค่ะ ให้คลิก Download balenaOS เพื่อดาวน์โหลด belanaOS image ได้เลยค่ะbalena.ioในขั้นตอนนี้เราสามารถเพิ่ม RPi ได้มากกว่า 1 ตัวนะคะ ใน Application เดียวกัน Device ทุกตัวจะเแชร์โค้ดกันค่ะ และใช้ Dashboard เดียวกันค่ะ4. Flash your SD card and boot the deviceหลังจากได้ไฟล์ image จากขั้นตอนที่ 3 แล้วนะคะ เราจะ flash ลง SD card ที่เราเตรียมไว้ โดยผ่านโปรแกรมที่ชื่อ balenaEtcher ค่ะbalena.ioflash เสร็จก็นำ SD card เสียบลง RPi เลยค่ะ แล้วเสียบ power supply ให้ น้องพายเลยค่าbalena.ioหลังจากเสียบปลั๊กแล้วรอสักพักค่ะ 1–2 นาทีให้เวลาน้องพายเรา install ทุกอย่าง และเชื่อมต่อเข้ากับ balena server ค่ะระหว่างรอกลับมาหน้า Dashboard ของเรากันค่ะ หลังจาก RPi ทำการเชื่อมต่อกับ balena server แล้วเราจะเห็นว่ามีสิ่งนึงโผล่มาบนหน้า Dashboard เราค่ะ หน้าตาก็จะคล้ายๆรูปข้างล่างนี้เลยค่ะ ซึ่งก็คือน้องพายของเราเองค่ะ ถึงตรงนี้ถ้าเราเพิ่ม RPi ไปอีก(มากกว่า 1 ตัว) ก็จะมีจำนวน Device โผล่ขึ้นมาตามจำนวน RPi ของเราคะมาถึงตรงนี้จะเห็นว่า พายของเราในชื่อ silent-violet ได้ online บน balena เรียบร้อยแล้ว ถ้าคลิกเข้าไปดู ก็จะเห็นรายละเอียดของอุปกรณ์ตัวนี้เหมือนรูปข้างล่างค่ะsilent-violetในขั้นตอนต่อไป… เราจะทำการเพิ่ม Environment Variables ให้กับ Application ของเราค่ะ และเริ่ม Deploy โค้ดของเราบนพายกันค่ะ ซึ่งจะนำเสนอในบทความต่อไป… คอยติดตามนะคะอ้างอิงจาก Get started with Raspberry Pi 3 and Node.js
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (2)
Asset/People Tracking — An Introductionจากบทความที่แล้วเราพูดถึง Beacon Technology กันไป รวมไปถึง Use cases ต่างๆที่น่าสนใจในการนำเจ้าตัว Beacon มาใช้งาน ซึ่งเราจะมาทำ Proximity Beacon กันค่ะ ผู้เขียนจะหยิบ Use case สำหรับทำ Asset/People Tracking มาให้ทำกันค่ะ เนื่องจากได้ลองทำใช้จริงมาแล้ว และอยากจะนำแชร์ให้ผู้อ่านได้ลองทำกันค่ะก่อนอื่นขออธิบายเพิ่มเติมเกี่ยวกับ Asset / People Tracking โดยใช้ Proximity Beacon แบบย่อนิดนึงนะคะ เพราะว่าปัจจุบัน Beacon ถูกนำมาใช้ได้หลากหลายรูปแบบหลากหลายวิธี ไม่ว่าจะติด Beacon ไว้ที่ใดที่นึง (Fixed Beacons) อย่างเช่น ผนัง หรือว่า แบบที่ Beacon ถูกนำไปแปะกับสิ่งที่เราต้องการ Track (Roaming Beacons) ที่มีการเคลื่อนที่ได้ตลอดเวลาโดยปกติทั่วไปแล้วเนี่ย Beacon ถูกมาใช้แบบ Fixed Beacons ค่ะ คือนำมาติดไว้กับที่ ที่ใดที่นึง เช่น ผนัง หรือ เพดาน และใช้มือถือเป็นตัวรับสัญญาณ ซึ่งก็จะเหมาะกับเอาไว้ทำ Check-point ค่ะ เช่น เอาไว้เชคว่า รปภ เข้ามาเดินตรวจในพื้นที่แล้วหรือยัง ก็จะมีการเก็บข้อมูลตรงนี้ไว้ หรือ ในเคส โรงพยาบาล สามารถนำมาใช้ตามหาคุณหมอ หรือว่าพยาบาล ว่าอยู่ที่ไหนภายในตึก (ลองนึกว่าถ้าโรงพยาบาลมีหลายชั้น หลายแผนก การจะถามหาใครสักคน ถ้าไม่โทรถามก็น่าจะเป็นเรื่องยากใช่มั้ยค่ะ ) เมื่อมีเหตุฉุกเฉินเกิดขึ้นlighthouse.io — fixed asset beacons, roaming mobile devicesข้อดีคือ ง่ายในการติดตั้ง ประหยัด เพราะสามารถนำมือถือมาเป็นตัวรับสัญญาณ​ Beacon ได้เลยซึ่งก็จะมีข้อเสียว่า จำเป็นจะต้องใช้คนในการถืออุปกรณ์ตัวรับ เช่น มือถือ ไว้กับตัวตลอดเวลาจึงทำให้เกิดการเปลี่ยนวิธี (Approach) ในการนำ Beacon มาใช้งานค่ะ ด้วยการสลับกัน ระหว่าง Beacon (Roaming Beacons) และ ตัวรับ (Fixed Receiver/Scanner)lighthouse.io — fixed BLE scanners, roaming asset beaconsข้อดีคือ ไม่จำเป็นต้องใช้มือถือเป็นตัวรับสัญญาณค่ะ และสามารถติดตาม (Track) Beacons ได้ทีละหลายตัวๆ แบบ Real-time ค่ะอาจจะมีข้อเสียตรงที่ เนื่องจากเราใช้ตัวรับแบบติดผนัง อาจจะทำให้มีค่าใช้จ่ายในการติดตั้ง ในการจัดสรรระบบไฟให้กับตัวรับค่ะ แต่ก็แลกมาด้วยการที่เราจะได้รับข้อมูลเสถียรขึ้น ซึ่งก็ถือว่าคุ้มค่ะ….ทีนี้ลองมาดูระบบที่เราจะทำกันคร่าวๆก่อนนะคะ…. เราจะใช้วิธีแบบ Fixed Scannerห & Roaming asset Beacons นะคะ เพราะเหมาะสมกะเคสใช้งานของเราค่ะAsset/People Tracking using BLE Beaconsเราจะติดตั้งพื้นที่ของเราด้วยตัวรับ(Scanner) โดยใช้ RasperryPi ค่ะ เมื่อมี Proximity Beacon เข้ามารัศมี ที่ตัวรับสามารถ Detect เจอ ตัวรับก็ทำการส่งข้อมูลผ่าน MQTT ไปยัง NETPIE ซึ่งเป็น Cloud Platform ค่ะ (รายละเอียดเพิ่มเติมในบทความถัดไปนะคะ) และส่งไปยัง Server ของเราค่ะที่ Server เราจะนำข้อมูลเหล่านี้มาคำนวณหาระยะทาง เพื่อให้แน่ใจว่าสามารถระบุตำแหน่งให้ถูกต้องแม่นยำที่สุด (จะเห็นว่า รัศมีของตัวรับ มีการทับซ้อน (Overlap)กันอยู่ค่ะ จึงต้องนำมาคำนวณว่า Beacon อยู่ในพื้นที่ของตัวรับตัวไหนค่ะ )และเก็บไว้ที่ Database(sqlite) ค่ะ ซึ่งจะมีการนำข้อมูลเหล่านี้มานำเสนอบนหน้าเวปของเราค่ะส่ิงที่ต้องใช้ค่ะ (Hardware)Server ค่ะ เราจะใช้เป็นที่เก็บข้อมูล และ สำหรับทำ Web server ค่ะBeacon ค่ะScanner ค่ะ — ในบทความนี้เราเลือกใช้ Raspberry Pi 3 B/B+ ค่ะ เพราะมี On Board BluetoothRaspberry Pi 3 Bsource: radius networksในบทความนี้เราเลือกใช้ RadBeacon Dot ของ Radius Networks ค่ะ ซึ่งมีขนาดเล็ก และรองรับiBeacon™ (Apple)Eddystone™(Google)และที่สำคัญเลยมี Configuration App ให้ใช้ค่ะ ง่าย และ สะดวกดีค่ะ สามารถใช้ได้ทั้ง ios และ android ค่ะเตรียมอุปกรณ์กันครบแล้วใช่มั้ยค่ะ งั้นเราตามไปดูวิธีติดตั้ง Scanner และ Server ในบทความถัดไปได้เลยค่ะอ้างอิงจาก 6 ways to use BLE beacons for people and asset tracking
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (1)
Bluetooth Low Energy Beacon Technology — An Introductionหลังจากที่เราได้ทำความรู้จักกับ MQTT หนึ่งใน Protocol สำคัญสำหรับ IoT ได้ลองเล่นกับ บอร์ด ESP32 และ Arduino IDE และได้ลองทำ Home Automationในบทความของ Home Assistant กันไปแล้ว ในบทความนี้เราจะมาเริ่มทำความรู้จักกับ Location-Based Technology โดยใช้เจ้าตัวเล็กๆ สิ่งนึงที่เรียกว่า Beacon กันค่ะ และเราจะมาลองทำ Proximity Detection using Bluetooth Low Energy Beacons กันค่ะ แต่ก่อนอื่นมาทำความรู้จักกับเจ้า Beacon ที่ว่ากันก่อนค่ะWhat is a Beacon?Beacon คืออุปกรณ์ขนาดเล็กชนิดนึงค่ะ (เล็กพอๆกับขนาดของนาฬิกาข้อมือได้เลยค่ะ) ที่สามารถส่งสัญญาณไร้สาย แบบ Bluetooth Low Energy (BLE) ไปยังอุปกรณ์ในระยะใกล้ๆที่เปิดการเชื่อมต่อ Bluetooth ไว้ค่ะ อย่างเช่น Smart Phone ค่ะsourceซึ่งก็มีหลายเจ้าที่พัฒนาตัว Beacon ขึ้นมาหลากหลายรูปทรง หลากหลายขนาดตั้งแต่ขนาดเท่า Coin Cell battery ไปถึงขนาดเท่าบัตรเครดิต เพื่อให้เหมาะสมกับวัตถุประสงค์ในการใช้งานค่ะ ก็จะมีทั้งแบบที่ใช้พลังงานจากแบตเตอรี่ และที่ไม่ต้องใช้แบตเตอรี่ เช่น USB และ Ambient Electromagnetic Waves ที่ดักจับคลื่นวิทยุรอบๆตัวเรามาใช้เป็นพลังงานค่ะ …source : IT Craftแล้ว Bluetooth(Bluetooth Classic) ที่เราคุ้นเคย คุ้นหู รู้จักกันมานาน กับ Bluetooth Low Energy (BLE) ใช่ตัวเดียวกันรึป่าวนะ?ถ้าพิจารณาตาม Standard ที่ถูกกำหนดขึ้นมาโดย Bluetooth Special Interest Group (SIG) แล้ว Bluetooth และ BLE (หรือที่รู้จักกันในชื่อ Bluetooth 4.0) ถือว่าเป็นพี่น้องกันนะค่ะ ใช้คลื่นความถี่เดียวกันที่ 2.4 GHz (ISM Band) และเป็นความถี่เดียวกันกับ Wi-Fi ค่ะ แต่ BLE ถูกออกแบบมาเพื่อให้ประหยัดพลังงานกว่าพี่ Bluetooth เยอะเลยค่ะ เพื่อให้เหมาะสมกับอุปกรณ์ที่เชื่อมต่อใน IoT ค่ะเทคโนโลยี BLE ช่วยให้ประหยัดพลังงานได้ยังไง ?source :plugintoiotง่ายๆเลยค่ะ BLE เป็นพวกขี้เกียจค่ะ จะอยู่ใน Sleep mode เกือบจะตลอดเวลา เพื่อเป็นการประหยัดพลังงานค่ะ จะตื่นขึ้นมาก็ตอนที่จะต้องทำการเชื่อมต่อเพื่อส่งข้อมูล ซึ่งข้อมูลพวกนี้ส่วนใหญ่ก็จะเป็นข้อมูลเกี่ยวกับ State ของตัว Beacon เอง ไม่ได้มีขนาดใหญ่มาก และไม่จำเป็นต้องตื่นเพื่อทำการส่งข้อมูลต่อเนื่องตลอดเวลา .. เห็นมั้ยค่ะว่าเค้าออกแบบมาเพื่องาน IoT จริงๆ….. ไม่เพียงแต่ Beacon เองที่ประหยัดพลังงานนะคะ การเชื่อมต่อของมือถือแบบ BLE ยังช่วยให้มือถือ ประหยัดพลังงานได้มากกว่าการเชื่อมต่อกับ Wifi ด้วยค่ะHow does a beacon work?หน้าที่หลักของ Beacon คือ Broadcast สัญญาณ ที่เรียกว่า Advertisement ซึ่งก็จะเป็นไปตาม Standard ของ Bluetooth protocols ที่กำหนดโดย Bluetooth SIG ลองคิดตามนะคะ….นั่นหมายความว่า Beacon พวกนี้สามารถเชื่อมต่อได้กับ Smart Phone/Device ทั่วโลก เพียงแค่ Smart Phone/Device พวกนี้เปิดการเชื่อมต่อแบบ Bluetooth ไว้BLE Beacon Use Casesเมื่อ Smart Phone รับและอ่าน Advertisement แล้ว จะมีอะไรเกิดขึ้นกับ Smart Phone… ก็จะขึ้นอยู่กับจุดประสงค์ของผู้พัฒนาค่ะ ลองมาดูกันค่ะ ว่าเค้าใช้ Beacon ทำอะไรกันบ้างProximity Beaconการ Beacon มาใช้งานในแบบ Proximity ทั่วไปแล้ว หลังจากได้มือถือเราได้รับ Advertisement จาก Beacon จะมี Notification ขึ้นมาค่ะ เพื่อนำไปสู่หน้าเวปที่ถูกกำหนดไว้ (Physical Web) หรือ เปิดแอป บนมือถือค่ะ ซึ่งได้รับความนิยมในการนำมาทำ Promotion ค่ะ เพียงแค่เดินผ่านหน้าร้านที่ติดตั้ง Beacon ไว้ สมาร์ทโฟน ของเราก็อจะได้รับแจ้งเตือนเกี่ยวกับโปรโมชันของร้านนั้นๆ ผ่าน Notification ค่ะApple ได้เปิดตัว iBeacon ด้วยการนำมาใช้ติดตั้งใน Apple Store ทั่วประเทศในอเมริกา เพื่อให้ลูกค้าสามารถเข้าถึงรายละเอียดของสินค้าที่วางขายได้ง่ายๆ ผ่านมือถือของลูกค้าเองในบ้านเราก็นำมาใช้นะคะ เช่น Tesco Lotus เริ่มติดตั้งเทคโนโลยี Beacon ในห้างสรรพสินค้า เพื่อส่งตรง ข้อมูล ส่วนลด และ สิทธิประโยชน์ต่างๆ เข้าสมาร์ทโฟนของลูกค้าที่เข้ามาจับจ่ายซื้อของ เพียงแค่ดาวน์โหลดแอปและเปิดการเชื่อมต่อ Bluetooth เอาไว้Central และ Robinson ก็ได้นำ LINE Beacon มาใช้เป็นช่องทางนึงของการตลาดเหมือนกันค่ะ ด้วยการเพิ่ม LINE Official Account ของ Central และ Robinson ระหว่างที่เราเดินช้อปปิ้ง เราก็จะได้รับคูปองส่วนลด และโปรโมชั่นส่งเข้ามาให้ถึงมือเลยค่ะนอกจากห้างสรรพสินค้าแล้ว โรงพยาบาลเองยังนำเทคโนโลยี Beacon มาใช้เพื่อเพิ่มประสิทธิภาพด้านดูแลสุขภาพและการบริการให้กับผู้มารับบริการที่โรงพยาบาลค่ะจะเห็นว่า Beacon Technology สามารถนำไปประยุกต์ใช้ได้หลากหลายประเภทธุรกิจมากค่ะIndoor Guidanceจุดเด่นของเทคโนโลยี Beacon อีกอย่างนึงคือ สามารถบอกระยะห่าง ระหว่าง Beacon และตัวรับได้ค่ะ ซึ่งตัวรับ หรือ Smart Phone จะเป็นตัวคำนวณระห่างนี้โดยใช้ ความแรงของสัญญาณ ซึ่งส่วนใหญ่จะถูกนำมาใช้ในงาน Indoor Navigation ค่ะ เพราะระบบสามารถระบุตำแหน่งของเราได้ เหมาะสำหรับการประยุกต์ใช้กับอาคารขนาดใหญ่มีหลายชั้น หลายแผนก เช่น ห้างสรรพสินค้า สนามบิน หรือแม้แต่ในงานนิทรรศการต่างๆ พิพิธภัณฑ์ เราก็สามารถนำมาความ User Experience ให้กับผู้ใช้ได้ค่ะ และยังสามารถนำไปใช้ร่วมกับ Proximity Feature ได้ค่ะAsset/People Trackingsource : Lighthouse.ioเราสามารถนำ Beacon ไปติดไว้กับ Asset หรือ คน ที่เราต้องการจะ Track ได้ค่ะ ซึ่งค่อนข้างจะดีกว่า RFID เพราะไม่จำเป็นต้องมีคนมามาค่อยแสกนอ่าน Tag ระบบสามารถหา Beacon เจอได้เอง ถ้า Beacon เข้ามาอยู่ในระยะที่ตัวรับ รับสัญญาณได้ ซึ่งตัวรับก็จะส่งข้อมูลต่อไป เพื่อนำไปใช้ตามวัตถุประสงค์ที่ต้องการได้ค่ะTelemetry Data for IoT Sensorsนอกเหนือจาก 128-bit ProximityUUID เราสามารถเพิ่มข้อมูลที่เป็น Telemetric Data เข้าไปใน Advertisementได้ค่ะ อย่างเช่น อุณหภูมิ ค่าแบตเตอรี เพื่อส่งข้อมูลให้ตัวรับต่อไปค่ะ ซึ่งก็จะเป็นการเพิ่มขีดความสามารถของ IoT Sensors และ Beacon ค่ะเทคโนโลยี Beacon ยังมีความสามารถอีกเยอะแยะมากมายที่เราสามารถนำไปประยุกต์ใช้ได้อีกค่ะ เช่น ยกระดับงานบริการ นำมาเป็นพนักงานต้อนรับ หรือ พนักงานแนะนำสินค้า/ส่วนลด/คูปอง เพื่อเพิ่มยอดขายได้ การนำ Beacon มาใช้ทำบัตรคิวสำหรับสถานที่ราชการหรือธนาคาร เพียงแค่เข้าไปอยู่ในรัศมีที่รับสัญญาณจาก Beacon ก็สามารถรับบัตรคิวผ่านแอป หรือผ่านมือถือได้ง่ายๆค่ะข้อดีอีกอย่างหนึ่งของ Beacon คือการให้ข้อมูลทางสถิติค่ะ อย่างเช่น ในโรงงานอุตสาหกรรม การเก็บข้อมูลโดยการ Track พนักงานในโรงงาน เราสามารถรู้ได้ว่า พนักงานใช้เวลาส่วนใหญ่ในส่วนไหนของการผลิต ส่วนไหนที่ยังขาดพนักงาน ซึ่งเราสามารถนำข้อมูลทางสถิติตรงมาวิเคระห์ เพื่อจัดสรรทรัพยากรบุคคลให้เหมาะสมกับรูปแบบการทำงานของสถานประกอบการได้ค่ะ … และในบทความถัดไปเราจะมาทำระบบ Tracking โดยใช้ Proximity Beacon และลองนำข้อมูลที่ได้มาแสดงผลกันค่ะ
โดย: Kan Ouivirach
| Machine Learning
ลด Dimension ด้วย Principal Component Analysis (PCA)
บทความนี้จะมาดูวิธีลด Dimension กันด้วย Principal Component Analysis หรือ PCA กันครับ ออกตัวก่อนว่าบทความนี้ไม่ได้ตั้งใจจะมาอธิบาย PCA นะครับ แต่อยากจะมาให้เห็นว่ามันสามารถเอาไปลด Dimension ได้นะ ลดแล้วข้อมูลจะหน้าตาประมาณไหน 😚ทำไมต้องลด? บาง Dimension อาจจะไม่จำเป็นในการสร้างโมเดลก็เป็นได้ครับ แต่เราไม่แน่ใจว่าจะตัดออกดีไหมอะไรแบบนี้ แล้วก็ถ้ายิ่งมี Dimension เยอะๆ เราอาจจะเจอปัญหา Curse of Dimensionality ก็เป็นได้ คือยิ่งถ้าเรามี Dimension ที่เยอะขึ้น สิ่งที่จะเกิดตามมาคือข้อมูลของเราจะ Sparse มันจะแหว่งๆ ขาดๆ หายๆ ทำให้ส่งผลต่อโมเดลของเราวิธีลด Dimension ก็มีหลายวิธีครับ วิธีที่ใช้กันเยอะก็คงจะไม่พ้น PCA นั่นเอง เรามาเขียนโค้ดไปทำความเข้าใจกันไปดีกว่าครับในบทความนี้จะขอใช้ข้อมูล 2D นะครับ เพื่อความง่าย และเราสามารถพลอตกราฟได้ จะทำให้เข้าใจได้มากขึ้น เรามาเริ่มด้วยการ Import สิ่งที่จำเป็นต้องใช้กันก่อน%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltเราจะใช้ Numpy สร้างข้อมูลขึ้นมาดู และใช้ Matplotlib เพื่อพลอตกราฟ ส่วน %matplotlib inline เอาไว้สำหรับคนที่ใช้ Jupyter Notebook แล้วอยากให้กราฟขึ้นมาแสดงผลที่ Notebook ของเราครับผมจะสร้างข้อมูล 2 มิติขึ้นมาแบบสุ่มตามนี้mean = [0, 0]cov = [[1, 0], [10, 10]]X = np.random.multivariate_normal(mean, cov, 100)plt.plot(X[:, 0], X[:, 1], 'o', alpha=0.5)plt.axis('equal')กราฟข้อมูล 2 มิติสิ่งที่ PCA นั้นจะพยายามทำ คือมันจะพยายามหาแกนที่สำคัญในข้อมูลของเราที่สามารถอธิบายการกระจายตัวของข้อมูลของเราได้from sklearn.decomposition import PCApca = PCA(n_components=2)pca.fit(X)print(pca.explained_variance_)print(pca.components_)ได้ผลตามนี้ผลที่ได้จากการรัน PCAค่าพวกนี้บอกอะไร? ลองเอามาพลอตดูครับplt.plot(X[:, 0], X[:, 1], 'o', alpha=0.5)for length, vector in zip(pca.explained_variance_, pca.components_): v = vector * 3 * np.sqrt(length) plt.plot([0, v[0]], [0, v[1]], '-k', linewidth=3)plt.axis('equal');จะได้ผลตามนี้กราฟที่นำเอาค่า explained variance กับ components ที่ได้จาก PCA มาพลอตจากรูปข้างต้นจะเห็นได้ว่ามี 2 เวคเตอร์ ทั้ง 2 เวคเตอร์นี้กำลังบอกถึง Direction ของข้อมูล และเวคเตอร์ที่ยาวกว่าจะบอกถึง “ความสำคัญ” ของ Direction ของข้อมูลนั้นๆ ตรงนี้หมายความว่า จริงๆ แล้วเราสามารถเลือกเฉพาะ Direction ที่สำคัญๆ ได้ครับ เราจะตัด Direction ของข้อมูลที่ไม่สำคัญทิ้งไปก็ได้ ข้อมูลที่ไม่สำคัญอาจจะหมายถึงข้อมูลนั้นมี Information ที่น้อย และอาจจะไม่จำเป็นสำหรับการนำเอาไปใช้งานต่อวิธีตัดทิ้งล่ะ? เราตัดโดยการเลือกเก็บข้อมูลส่วนใหญ่ไว้ได้ครับ เช่น เราเลือกเก็บข้อมูล 95% ไว้ จะเขียนโค้ดได้ตามนี้pca = PCA(0.95)X_trans = pca.fit_transform(X)หรือเราจะเลือกเป็นจำนวน Component ก็ได้ ในที่นี้ทั้งหมดมี 2 Components เราอาจจะเลือกแค่ 1pca = PCA(n_components=1)X_trans = pca.fit_transform(X)ค่า X_trans ในที่นี้คือข้อมูลที่สำคัญ 95% ครับ ซึ่งจะมีอยู่ 1 มิติ (จากเดิมมี 2 มิติ) บางคนอาจจะสงสัยว่าจริงๆ เอาตัด Column ทิ้งไปหรือเปล่า คำตอบคือไม่ใช่ครับ จริงๆ แล้วเรา Transform ข้อมูลให้เหลือ 1 มิติ ลองดูโค้ดกับรูปประกอบด้านล่างX_new = pca.inverse_transform(X_trans)plt.plot(X[:, 0], X[:, 1], 'o', alpha=0.2)plt.plot(X_new[:, 0], X_new[:, 1], 'bo', alpha=0.8)plt.axis('equal');ผลที่ได้คือกราฟที่เรา Transform ข้อมูลลงไปบนแกนสำคัญที่เราเลือกจะเห็นได้ว่าเรา Transform ข้อมูล หรือ Project ข้อมูลลงไปบนแกนสำคัญที่เราเลือกนั่นเองก็จะประมาณนี้ครับ การใช้งาน PCA เพื่อลด Dimension ของข้อมูล ลองไปศึกษากันต่อดูนะครับ ทำงานด้านนี้ไม่ช้าก็เร็ว ยังไงก็ได้เจอกับ PCA แน่นอน 😎
โดย: Kan Ouivirach
| Machine Learning
โมเดลแบบ Parametric กับ Nonparametric ต่างกันอย่างไร?
มีอยู่หลายครั้งที่เราอ่านจะไปอ่านเจอคำๆ ว่า Parametric กับ Nonparametric เรามาลองทำความรู้จักกับโมเดลทั้ง 2 ประเภทนี้กัน ดูแล้วทั้ง 2 ประเภทนี้ต่างกันอย่างไรบ้าง?โมเดลแบบ Parametricเป็นโมเดลที่เรามีจำนวน Parameters ที่จำกัด คือไม่ว่าเราจะมีจำนวนข้อมูลเท่าไหร่ จำนวน Parameters ก็จะมีอยู่แค่นั้นครับ ยกตัวอย่างโมเดลที่ง่ายที่สุดก็คงเป็น Linear Regression ที่มีข้อมูลแค่ 1 Dimension ตัว Parameter ที่เราจำเป็นต้องหาก็คือค่า Weight (w) และค่าจุดตัดแกน Y (b) ลองดูสมการด้านล่างนี้ประกอบy = w*x + bส่วนข้อมูลที่เราจะนำเข้ามาสอนก็คือค่า x กับ y ครับ โมเดลแบบ Parametric มีข้อดีที่เห็นชัดๆ เลยครับคือเราไม่จำเป็นต้องเก็บข้อมูลไว้หลังจากที่สอนโมเดลเสร็จ เราสามารถนำเอา Parameter ที่ได้ไปใช้งานต่อได้เลยโมเดลแบบ Nonparametricเป็นโมเดลที่ไม่ได้กำหนดตายตัวว่าจะใช้ฟังก์ชั่นในการ Map ข้อมูลแบบไหน แล้วก็สมมุติเอาว่าการกระจายตัวของข้อมูลไม่สามารถนิยามได้ในเซตของ Parameters ที่มีจำนวนจำกัด โมเดลแบบ Nonparametric นี้จะเน้นใช้ประโยชน์จากข้อมูลเป็นหลัก โมเดลที่ง่ายที่สุดก็คือ k-Nearest Neighbors (k-NNs) นั่นเอง มีความต่างกับ Linear Regression ค่อนข้างชัดเจนที่ว่า k-NNs นั้นจำเป็นที่ต้องมีข้อมูลทั้งหมดไว้เพื่อที่จะ Predict อะไรสักอย่าง และ k-NNs ไม่ได้ใช้ข้อมูลพวกนั้นมาปรับค่า Parameter ใดๆ ในตัวอัลกอริธึ่มของมันเองเลย ข้อเสียก็ตอนที่ข้อมูลมีขนาดใหญ่มากๆ โมเดลของเราก็จะใหญ่ตามไปด้วย ซึ่งเราก็ต้องไปหาวิธีเก็บข้อมูลให้ Efficient มากขึ้นด้วยข้อแตกต่างระหว่างโมเดลทั้ง 2 แบบ จริงๆ มีอีกนะ บทความนี้แค่อยากจะนำเสนอในมุมง่ายๆ ที่เห็นชัดๆ จะได้สามารถไปศึกษาเพิ่มเติมได้ หวังว่าจะพอแยกแยะออกนะครับ 😙
โดย: Kan Ouivirach
| Machine Learning
การวาง Project Structure สำหรับงานด้าน Machine Learning
เวลาที่เราทำโปรเจคอะไรสักอย่าง คำถามประมาณว่า “เราจะมีโฟลเดอร์อะไรบ้าง?” หรือ “เราจะวาง Project Structure เราอย่างไรดี?” จะแว็บเข้ามาในหัวเสมอ ซึ่งจริงๆ มันก็ไม่ใช่ปัญหาใหญ่โตอะไรหรอกครับ แต่บางทีก็ทำให้เรารำคาญอยู่บ่อยๆ ได้ พอดีตอนที่ผมเรียนอยู่ ได้ไปเจอบทความของ Ali Eslami เค้าเขียนเรื่องนี้ไว้ และผมก็ใช้ Structure แบบนี้มาจนถึงทุกวันนี้ครับ เลยอยากจะมาบอกเล่ากันหน่อยหน้าตาของ Project Structure จะเป็นประมาณนี้project/ ├─ code/ ├─ data/ │ ├─ input/ │ ├─ working/ │ └─ output ├─ demos/ └─ tests/โดยแต่ละ Folder มีความหมายตามนี้project ก็คือชื่อโปรเจคของเรานั่นเองdata เป็นโฟลเดอร์ที่เอาไว้เก็บ Dataset ของเรา ซึ่งในโฟลเดอร์นี้ก็จะแบ่งออกเป็น 3 ส่วนด้วยกัน คือ inputเป็นโฟลเดอร์เก็บข้อมูลแบบ Raw และเราจะไม่แก้ไขใดๆ เลยในโฟลเดอร์นี้ ส่วน workingเป็นโฟลเดอร์เก็บไฟล์อะไรก็ตามที่โค้ดหรือโมเดลของเราสร้างขึ้นมา ไฟล์ในโฟลเดอร์นี้จะมีการเปลี่ยนแปลงแทบตลอดเวลา และ output จะเป็นโฟลเดอร์ที่เอาไว้เก็บผลลัพธ์จากโค้ดหรือโมเดลของเราส่วน demos กับ tests ก็ตามชื่อเช่นกัน เอาไว้สำหรับเอาไปนำเสนอผลงาน และเอาไว้ทำสอบผลงาน ซึ่ง 2 โฟลเดอร์นี้อาจจะเก็บแค่สคริป เช่น Bash ที่เอาโมเดลมารันแสดงผลก็ได้ครับข้อดีแยกส่วนของโค้ดกับส่วนของข้อมูลออกจากกันทำให้ง่ายต่อการแชร์โค้ดให้กับคนอื่น และปรับเปลี่ยน Dataset ในภายหลังง่ายต่อการแยก Dataset ออกมาจาก Version Control เพราะเราสามารถจะเขียน Configuration ให้ไม่ต้องเอาโฟลเดอร์ data เข้าไปใน Version Control ได้การแบ่งย่อยโฟลเดอร์ในโฟลเดอร์ data ทำให้เรา Reproduce งานออกมาได้เป็นระเบียบมากขึ้น เราจะรู้ตัวเองว่าอะไรก็ตามที่อยู่ใน input เราจะไม่แก้ อะไรก็ตามที่อยู่ใน working เราสามารถลบทิ้งได้โดยไม่ต้องกังวล และอะไรก็ตามที่อยู่ใน output เราจะเอาไปนำเสนอผลงานส่วน demos กับ tests อาจจะมีสคริปที่ซ้ำๆ กัน แต่ก็ช่วยทำให้เราแยกโฟกัสของเราได้ง่ายขึ้นครับ ว่าเรากำลังจะทดสอบหรือเรากำลังจะนำเสนอผลงานตามไปอ่านต้นฉบับกันได้ที่ Patterns for Research in Machine Learning ครับ เค้าไม่ได้เขียนแค่เรื่องของ Project Structure นะ ยังมีส่วนเสริมในเรื่องของการแยกส่วน Options กับส่วน Parameters ออกจากกันอีกด้วยใช้ Project Structure แบบกันไหน มาพูดคุยกันได้นะครับ 🤓

พบบทสัมภาษณ์ได้ที่นี่เร็ว ๆ นี้

พบDigital Skill บนสื่อ ได้ที่นี่เร็ว ๆ นี้

หมวดหมู่

พบหมวดหมู่ ได้ที่นี่เร็ว ๆ นี้

พบหมวดหมู่ ได้ที่นี่เร็ว ๆ นี้

Tags

พบคำสำคัญ ได้ที่นี่เร็ว ๆ นี้

พบคำสำคัญ ได้ที่นี่เร็ว ๆ นี้

พบคำสำคัญ ได้ที่นี่เร็ว ๆ นี้