Sticky Post

เลิกใช้ Delay แบบไร้สาระกันเสียทีเถอะ

แนะนำกันก่อน เรื่องนี้เริ่มต้นจากการสังเกตปัญหายอดนิยมในการพัฒนาโปรแกรมบน Arduino หรือผู้เริ่มต้นเรียนรู้การพัฒนาโปรแกรมบนภาษาอื่นๆ เช่น C หรือ Python ที่มักจะมีการใช้ฟังก์ชันในการรอเวลา (Time Delay) ไม่ว่าจะเป็นการรอเวลาเพื่อตอบกลับการร้องขอ การรอเวลาให้ระบบปลายทางพร้อมทำงาน หรือการรอให้ครบกำหนดเวลาในการทำงาน เป็นต้นซึ่งการรอเวลานั้นมีความจำเป็นในการพัฒนาโปรแกรมอยู่มาก เพราะระบบจะทำงานได้ดี มีความจำเป็นที่จะต้องทำให้อุปกรณ์ที่เชื่อมต่อกันอยู่ ทำงานประสานกันได้ดี แต่ในขณะเดียวกัน ถ้าหากในระบบมีการรอเวลากันอย่างมากมาย ก็จะกระทบกับการทำงานของระบบเช่นกัน ทั้งทำให้ระบบทำงานได้ช้า ตอบสนองช้า และความล่าช้านี้อาจจะก่อให้เกิดปัญหากับเสถียรภาพในการทำงานของระบบโดยรวมด้วย ดังนั้นแล้วการใช้ฟังก์ชันเพื่อรอเวลานั้น มีข้อควรระวังในการใช้งานอยู่ไม่น้อย แต่การที่เราจะเลี่ยงไม่ใช้ฟังก์ชันรอเวลาพวกนี้ มันไม่ได้ง่ายเลย มันจะต้องเริ่มต้นด้วยการวางแผนอย่างเป็นระเบียบ เพื่อทำให้ระบบที่เราพัฒนาสามารถทำงานร่วมกันได้ ดังนั้นในบทความนี้จะแนะนำแนวคิดในการพัฒนาโปรแกรมที่ลดการใช้ฟังก์ชันรอเวลาเหล่านี้ลงกัน เริ่มต้นด้วยไฟกระพริบ ในบทความตอนนี้จะพัฒนาไฟกระพริบด้วยโปรแกรม Arduino โดยใช้บอร์ด ESP32 DOIT-Devkit-V1 ในการพัฒนา และจะแบ่งออกเป็น 4 ส่วนดังนี้ ไฟกระพริบปกติ ที่ใช้ Delay โดยจะติด

widzard config

ตั้งค่า Raspberry Pi OS Desktop เมื่อเปิดใช้งานครั้งแรก

เมื่อเราได้ SD card ที่เขียน Raspberry Pi OS Desktop แล้วเอาไปใช้งานกับ Raspberry Pi ต้องตั้งค่าอะไรในเบื้องต้นบ้างนะ สิ่งที่ต้องมี Raspberry Pi USB power supply Ethernet หรือ Wifi SD Card ที่ลง Raspberry Pi OS เรียบร้อยแล้ว (ถ้ายังไม่ได้เตรียมไปดูวิธีการที่ เขียน OS ลง SD card ด้วย Raspberry Pi Imager) จอคอมพิวเตอร์หรือจอ TV สาย HDMI ใช้ต่อจอกับ Raspberry Pi

ปัญหา Raspberry Pi OS ต่อ USB Drive แล้ว Error

เจอปัญหา Raspberry Pi OS ต่อ USB Drive (จะเป็น flash drive / HDD / SSD ก็แล้วแต่) แล้วไม่ mount แต่ขึ้น error ว่า Error mounting /dev/sda1 at /media/<username>/<usb drive name>: unknown filesystem type ‘exfat’ ตัวอย่างในรูปข้างล่าง ลองตรวจสอบดูด้วยคำสั่ง ตัวอย่างในรูปจะเห็นว่า USB drive ที่เราเสียบอยู่ เป็นแบบ exFAT และยังไม่ได้ถูก mount แสดงว่าเรายังไม่มี driver สำหรับอ่านและเขียน filesystem

เขียน Image ลง SD card ด้วย Raspberry Pi Imager

ตอนนี้ Raspberry Pi มีโปรแกรมสำหรับเขียน image ลง SD Card ของตัวเองชื่อ Raspberry Pi Imager มีให้ติดตั้งใช้งานได้ทั้ง Windows, Mac OS, Ubuntu 18.04 ใช้งานค่อนข้างง่าย ติดตั้ง Raspberry Pi Imager ดาวน์โหลด Raspberry Pi Imager https://www.raspberrypi.org/downloads/ มาติดตั้งในคอมพิวเตอร์ เปิดมาดูกันว่าทำอะไรได้บ้าง มี 3 ปุ่มหลัก คือ CHOOSE OS (เลือก OS), CHOOSE SD CARD (เลือก SD card), WRITE

Machine Learning in Action : เริ่มต้นด้วยเกมเล็กๆอย่าง Tic Tac Toe

มีไอเดียอยากลองทำเกมง่ายๆ ที่สามารถเรียนรู้ หรือพัฒนาตนเองได้ด้วยประสบการณ์ที่ตัวมันได้พบเจอมา ซึ่งมันก็มีหลายเทคนิคที่มีใช้กันอยู่ และที่เห็นว่าน่าสนใจก็เป็น Q-Learning และ Minimax ทั้งสองเทคนิคล้วนแล้วแต่เป็น State–Action–Reward–State คือ เริ่มต้นคิดจาก State ปัจจุบัน เพื่อหา Action และประเมินผลเป็น Reward จาก State อีกที ซึ่งเหมาะสมมากที่จะนำมาใช้ในระบบเกม ส่วนเกมที่สนใจจะนำมาทดลองนั้น ก็เป็นเกมง่ายๆ อย่างเกม Tic Tac Toe ที่มีรูปแบบไม่เยอะมากนัก กฎกติกาไม่ซับซ้อน และเป็นการแข่งขันกันของสองผู้เล่น ทำให้ระบบสามารถเรียนรู้ หรือเลียนแบบ วิธีการเล่นของฝั่งตรงข้ามได้โดยง่าย ผ่าน State ที่ได้บันทึกไว้ก่อนหน้านี้เท่านั้นเอง ข้อเสียของวิธีการใช้ State แบบนี้คือ รูปแบบในการเล่นมักจะถูกจำกัดอยู่เฉพาะจากประสบการณ์ที่ผ่านมาเท่านั้น แม้จะเป็นการเลือกวิธีการเล่นที่ดีที่สุด แต่ก็จะดีที่สุดเท่าที่รู้อยู่เท่านั้น ดังนั้นถ้าประสบการณ์ของมันเต็มไปด้วยวิธีการที่ไม่มีคุณภาพ หรือไร้ประสิทธิภาพแล้ว

มาแก้ปัญหา “AFBF+CGHB+DAFG+AEAB=BCBC” กันเถอะ

“In programming, the hard part isn’t solving problems, but deciding what problems to solve.” – Paul Graham “ในการเขียนโปรแกรมนั้น การแก้ปัญหาไม่ใช่สิ่งที่ยากที่สุด แต่สิ่งที่ยากที่สุดคือการตัดสินว่าปัญหาใดบ้างที่ควรได้รับการแก้ไข” – พอล เกรแฮม Paul Graham ‘s quotes หากข้อความข้างต้นนั้นถูกต้อง ผมก็คิดว่าปัญหาของนักเรียนประถมอันโด่งดังอย่าง “AFBF+CGHB+DAFG+AEAB=BCBC” ก็ควรได้รับการแก้ไขอย่างเป็นรูปธรรมเสียที การจะส่งต่อปัญหานี้ไปสู่คนรุ่นถัดไปนั้น ดูจะเป็นการไร้ความรับผิดชอบต่อคนรุ่นหลังอย่างรุนแรง เกินกว่าที่จะยอมรับได้ ดังนั้นเราจึงเริ่มพัฒนาโค้ดขึ้นมา เพื่อให้มันไม่ใช่ปัญหาอีกต่อไป แม้ว่ามันจะสร้างปัญหาอื่นตามมาก็ตาม จุดเริ่มต้น ทันทีที่เห็นคำถาม “AFBF+CGHB+DAFG+AEAB=BCBC” ในเว็บบอร์ดพันทิป ก็ทราบได้ทันทีว่านี่คงเป็นปัญหาใหญ่มากทีเดียว ผมจึงเริ่มโดยการวิเคราะห์ว่าจะมีหนทางใดบ้างที่แก้ปัญหานี้ได้ สุดท้ายเพื่อให้ปัญหานี้ได้รับการแก้ไขอย่างแท้จริง ผมจึงเลือกที่จะเขียนโค้ดเพื่อหาคำตอบของสมการแบบนี้