All posts by Spaggiari

Sticky Post

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

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

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” ในเว็บบอร์ดพันทิป ก็ทราบได้ทันทีว่านี่คงเป็นปัญหาใหญ่มากทีเดียว ผมจึงเริ่มโดยการวิเคราะห์ว่าจะมีหนทางใดบ้างที่แก้ปัญหานี้ได้ สุดท้ายเพื่อให้ปัญหานี้ได้รับการแก้ไขอย่างแท้จริง ผมจึงเลือกที่จะเขียนโค้ดเพื่อหาคำตอบของสมการแบบนี้

เครื่องมือ ที่จะทำให้อนาคตประเทศอยู่ในกำมือคุณ ผ่านการเลือกตั้ง และพระประสงค์ของพระเจ้า

เช้านี้มีแฮชแท็กหนึ่งโผล่ขึ้นมา นั่นคือ #CambridgeAnalyticaUncovered แฮชแท็กนี่มีที่มาที่ไปที่น่าสนใจมาก มันมาจากวิดีโอที่ถูกเผยแพร่ผ่านช่องข่าวของ Channel 4 ของอังกฤษ โดยผู้ที่บันทึกได้ปกปิดตัวตน (Undercover) ขณะที่กำลังเจรจากับบุคคลจากบริษัทสัญชาติอังกฤษที่ชื่อ “Cambridge Analytica”

[Chip Hall of Fame] ก้าวที่ยิ่งใหญ่ของวงการถ่ายภาพ Image Sensor ตัวแรก KODAK : KAF-1300

ในประวัติศาสตร์ของนวัตกรรมและการประดิษฐ์มีงานพัฒนามากมายที่เปลี่ยนแปลงวิถีชีวิตของผู้คนทั่วโลก สิ่งประดิษฐ์ชิ้นสำคัญก่อกำเนิดจากมุมมองและแนวคิด ที่เปี่ยมไปด้วยคุณภาพจากนักประดิษฐ์ที่ทำงานให้กับองค์กรยักษ์ใหญ่ หากมองจากวันนี้องค์กรนั้นควรจะกลายเป็นเสือติดปีกได้ แต่มันก็ไม่ได้เป็นเช่นนั้นเสมอไป และนี่ก็เป็นอีกครั้งหนึ่งกับเรื่องราวของเซ็นเซอร์ภาพที่วางจำหน่ายตัวแรกของโลก โดยบริษัทผลิตกล้องยักษ์ใหญ่อย่าง KODAK เรากำลังจะเล่าถึง KAF-1300 Image Sensor ครับ เจ้าพ่อยักษ์ใหญ่แห่งวงการกล้องอย่าง KODAK ให้ความสนใจในการพัฒนาเซ็นเซอร์ดิจิตอลสำหรับถ่ายภาพมานานแล้ว โดยคงต้องย้อนไปถึงปี 1975 Steven Sasson  วิศวกรของ KODAK ได้พัฒนากล้องดิจิตอลตัวแรกออกมา โดยใช้เซ็นเซอร์ CCD 100×100 พิกเซลจาก Fairchild Semiconductor นั่นคือกล้องดิจิตอลตัวแรกของโลกและพัฒนาต่อมาจนในปี 1986 KODAK ก็สามารถพัฒนาเซ็นเซอร์ความละเอียด 1.4 ล้านพิกเซลได้สำเร็จ แต่กว่าจะกลายมาเป็นกล้องดิจิตอลตัวแรกได้ ก็ต้องรอไปถึงปี 1991 KODAK จึงสามารถปล่อย KODAK DCS ( KODAK DCS-100 )

[Chip Hall of Fame] เทคโนโลยีที่ปฏิวัติคอมพิวเตอร์ไปสู่อุปกรณ์พกพา Toshiba NAND Flash Memory

ครั้งหนึ่งการที่คอมพิวเตอร์เริ่มมีหน่วยความจำ ( Stored-Program Computer ) จากทฤษฏีและแนวคิดในการสร้าง Universal Turing Machine ของอลัน ทัวริง ( Alan Turing ) และต่อมาถูกพัฒนาจนกลายเป็น  von Neumann Architecture และ Harvard Architecture ** ที่ได้วางรากฐานมาจนถึงปัจจุบันนั้น เป็นการปฏิวัติครั้งใหญ่และเป็นปัจจัยสำคัญที่ทำให้คอมพิวเตอร์สามารถขยายศักยภาพไปสู่การทำงานในส่วนอื่นๆ ได้อย่างรวดเร็ว เทคโนโลยีการเก็บข้อมูลยุคนั้นมีทั้งแรกเริ่มตั้งแต่การใช้กระดาษเจาะรูในช่วงแรกและยุคที่ใช้เทปแม่เหล็กในการเก็บข้อมูล ซึ่งยาวนานตั้งแต่ทศวรรษที่ 30 ไปจนช่วงทศวรรษที่ 80 ตลอดเวลานั้นแม้ว่าจะมีการพัฒนาเพื่อลดขนาดทางกายภาพ และเพิ่มความจุในการเก็บข้อมูลมากแค่ไหน มันก็ยังคงกินพื้นที่อย่างมหาศาล แถมด้วยข้อจำกัดทางกลไก มันยังช้ามากอีกด้วย อุปกรณ์เก็บข้อมูลที่ใช้แม่เหล็กที่ดีที่สุดคือ ฮาร์ดดิสก์ไดร์ฟ ( Hard Disk Drive – HDD ) ที่ถูกพัฒนาขึ้นในช่วงทศวรรษที่