การเขียนโปรแกรมแบบจินตภาพด้วยบล็อกคำสั่ง: จาก MIT Scratch สู่ Google Blockly
เทคโนโลยีซอฟต์แวร์ HTML5/CSS/JavaScript และอื่น ๆ ที่เกี่ยวข้อง ทำให้เกิดรูปแบบการใช้งานซอฟต์แวร์ผ่านเว็บเบราว์เซอร์และอินเทอร์เน็ต อย่างเช่น "Software as a Service" (SaaS), "Coding in the Cloud" เป็นต้น มีการพัฒนาเครื่องมือหรือซอฟต์แวร์ที่ใช้สำหรับเขียนหรือสอนการเขียนโปรแกรมตามมาอีกมากมาย โดยทั่วไป ผู้ใช้ไม่จำเป็นต้องติดตั้งซอฟต์แวร์ในเครื่องคอมพิวเตอร์ของตนเอง
💡 MIT Scratch, Berkeley Snap! และ MIT App Inventor 2 for Android
จากโพสต์คราวที่แล้ว "การเขียนโปรแกรมแบบจินตภาพด้วยบล็อกคำสั่ง: MIT Scratch และ Berkeley Snap! สู่การเชื่อมต่อกับ Arduino" ได้กล่าวถึง MIT Scratch (https://scratch.mit.edu) ซึ่งเป็นซอฟต์แวร์ Open Source มีการใช้งานแบบ Desktop App สามารถนำไปสอนเยาวชนในช่วงอายุ 8 - 16 ปี เรียนรู้ Coding เป็นทักษะพื้นฐาน เน้นการสร้างเรื่องราวแบบปฏิสัมพันธ์ สร้างเกมส์ หรือ ภาพเคลื่อนไหว กราฟิก 2 มิติ
นอกจาก Scratch ก็ได้กล่าวถึง Berkeley BYOB/Snap! (https://snap.berkeley.edu) ซึ่งเป็นอีกหนึ่งตัวเลือก (Open Source) สำหรับฝึกเขียนโปรแกรมแบบกราฟิก ซึ่งอันที่จริงแล้ว ในตอนเริ่มต้น Snap! ก็เกิดจากการดัดแปลงโค้ด Scratch แต่ต่อมาได้พัฒนาใหม่ และใช้ภาษา JavaScript
โลกของเทคโนโลยีเปลี่ยนแปลงพัฒนาไปตลอดเวลา ล่าสุด Scratch เวอร์ชัน 3.0 ก็ใช้งานเป็นแบบ Web App ได้แล้ว โดยใช้ภาษา JavaScript (ใช้ไลบรารี Scratch Blocks) ในการพัฒนา
MIT Scratch และ Berkeley Snap! เป็นสองตัวเลือกที่ได้เลือกมานำเสนอ และใช้สำหรับฝึกเขียนโค้ดได้ด้วยวิธีลากบล็อกมาวาง (Drag & Drop Visual Programming) แต่ไม่ได้ใช้สำหรับเขียนโค้ดภาษาคอมพิวเตอร์โดยตรง (Text-Based Programming) และก็ไม่ได้ใช้สำหรับการสร้างโค้ดแล้วคอมไพล์หรือแปลงให้เป็นแอปพลิเคชันโดยอัตโนมัติ
แต่ถ้าอยากจะสอนเด็ก ๆ ให้ลองสร้าง Android App สำหรับสมาร์ทโฟน หรือแท็บเล็ต ด้วยวิธีการเดียวกับ Scratch และ Snap! และไม่จำเป็นต้องเขียนโค้ด ก็มีตัวเลือกอย่างเช่น MIT App Inventor 2 for Android (http://appinventor.mit.edu/explore/) โครงการนี้ เริ่มราวปีค.ศ. 2010 โดย Google และพัฒนาต่อโดยทีมงานจาก MIT ในปีค.ศ. 2012 และเผยแพร่เวอร์ชัน "App Inventor 2" ในเดือนธันวาคม ค.ศ. 2013 ... ปัจจุบัน สามารถเข้าใช้งานแบบออนไลน์ได้ที่ http://ai2.appinventor.mit.edu/ ถ้าลองสืบค้นในอินเทอร์เน็ต จะเห็นมีตัวอย่างในหลายเว็บที่สร้าง Android App โดยใช้ MIT App Inventor 2 เพื่อเชื่อมต่อกับบอร์ด Arduino ผ่าน Bluetooth เช่น รับค่าจากเซ็นเซอร์ที่ต่อกับบอร์ด Arduino มาแสดงผลใน App หรือควบคุมหุ่นยนต์ หรือส่งข้อมูลต่อไปยัง Google Firebase เป็นต้น
💡 เมื่อ Scratch ต้องเปลี่ยนมาใช้ Google Blockly
Scratch 3.0 เปลี่ยนมาใช้ JavaScript (แทน ActionScript และ Adobe Flash Player) และได้ใช้ไลบรารีที่ชื่อว่า Scratch Blocks (https://github.com/LLK/scratch-blocks) ซึ่งมาจากโปรเจกต์ Blockly (https://developers.google.com/blockly/) พัฒนาโดย Google เริ่มต้นในเดือนมิถุนายน ค.ศ. 2012 และเป็น Open Source (Apache License 2.0)
Blockly เป็นไลบรารี หรือ API ที่ใช้ JavaScript / HTML5 / CSS สำหรับนำไปใช้พัฒนา Web App สำหรับผู้ที่ต้องการสร้างโปรแกรมด้วยการต่อบล็อก (Scratch-like, Visual Block Programming) และแตกต่างจาก Scratch ซึ่งเป็นแอปพลิเคชัน (Web App)
ถ้าอยากทราบว่า จะใช้ Blockly สร้าง Web App อย่างไรได้บ้าง ลองดูตัวอย่าง ให้ดูเว็บ "Blockly Games" (https://blockly-games.appspot.com/) ที่มีตัวอย่างเกมส์ ผู้ใช้หรือผู้เล่นต้องนำบล็อกที่มีให้เลือก มาวางต่อกันเพื่อแก้ปัญหา
Blockly สามารถแปลงโปรแกรมที่ได้จากการต่อบล็อกต่าง ๆ ให้กลายเป็นโค้ดในภาษาคอมพิวเตอร์ ซึ่งมีหลายภาษาให้เลือกเป็นเอาต์พุต เช่น JavaScript, Python เป็นต้น ดังนั้น ผู้เรียนสามารถเปรียบเทียบและเชื่อมโยงระหว่างโปรแกรมที่เกิดจากการต่อบล็อก และโค้ดที่ได้จากโปรแกรมในภาษาคอมพิวเตอร์ตามที่เลือกให้เป็นเอาต์พุต (ตรงนี้ก็ถือว่า สำคัญในการเรียนรู้ Coding)
💡 BBC Micro:bit, Microsoft MakeCode
โครงการ BBC Micro:bit (https://microbit.org/) จากประเทศอังกฤษ ได้พัฒนาบอร์ดไมโครคอนโทรลเลอร์ Micro:bit เพื่อส่งเสริมการเรียนรู้ด้านคอมพิวเตอร์ให้แก่เยาวชน ผู้เรียนสามารถใช้เขียนโค้ดโดยการนำบล็อกมาต่อกัน ใช้งานผ่านเว็บเบราว์เซอร์ โดยเข้าไปที่เว็บ Micro:bit's Code Kingdoms (https://www.microbit.co.uk/app/) หรือ Microsoft MakeCode for Micro:bit (https://makecode.microbit.org/)
MakeCode ของ Microsoft ก็ใช้ Google Blockly เป็นพื้นฐาน (a fork of Blockly) ในการสร้าง Web-based Block editor และใช้วิธีแปลงบล็อกเหล่านั้น ให้เป็นโค้ดในภาษา "Static TypeScript (STS) / TypeScript" จากนั้นจึงแปลงให้เป็นไฟล์โปรแกรม (.hex) ที่นำไปใช้ได้กับบอร์ด Micro:bit
ผู้ที่อยากจะใช้ Scratch ร่วมกับบอร์ด Micro:bit ก็มีตัวเลือกอย่างเช่น "Scratch 3.0 micro:bit experimental extension" ซึ่งสามารถเชื่อมต่อโปรแกรม Scratch ผ่าน Bluetooth ไปยังบอร์ด Micro:bit ได้ โดยต้องโปรแกรมไฟล์ scratch-firmware-combined.hex ลงในบอร์ดก่อน
💡 Arduino กับการเขียนโค้ดเชิงกราฟิกแบบออนไลน์ในสไตล์ Blockly
ลองมาดูว่า มีตัวอย่างเว็บที่ใช้ Blockly มาสร้าง Web App สำหรับสร้างโปรแกรมเพื่อนำไปใช้กับบอร์ดไมโครคอนโทรลเลอร์ อย่างเช่น Arduino อะไรบ้าง
◻️ BlocklyDuino (https://github.com/gasolin/BlocklyDuino)
- เป็น Web-based visual programming editor for Arduino
- ได้แรงบันดาลใจมาจาก ( inspired by) "ArduBlock" ซึ่งเป็น Arduino Plug-in สำหรับเขียนโค้ดด้วยบล็อก
- พัฒนาโดย Fred Lin ตั้งแต่ปีค.ศ. 2012
- เป็น Open Source (Apache License 2.0)
- ใช้ Google Blockly สำหรับพัฒนาในส่วนที่เป็น Web App
- สามารถรันเป็น Web server (เขียนด้วย Python) ในเครื่องของผู้ใช้ได้ และเข้าใช้งานผ่านหน้าเว็บได้ แต่จะต้องติดตั้งซอฟต์แวร์ Arduino IDE & tools ในเครื่องของผู้ใช้ เพื่อใช้ในการคอมไพล์โค้ดและอัปโหลดไปยังบอร์ด Arduino
- ใช้สำหรับบอร์ด Arduino Uno, Mega, Nano เป็นต้น
- มีการเพิ่มบล็อกให้เลือกใช้สำหรับฮาร์ดแวร์ของ Groove เช่น RC Servo, Motor, Relay, Button, Tilt Switch เป็นต้น และสามารถใช้งานออนไลน์ได้ที่ BlocklyDuino "Grove Edition" https://bit.ly/2mPqDwq
◻️ BlocklyProp (http://blockly.parallax.com/blockly/)
- เผยแพร่ครั้งแรกในเดือนกันยายน ค.ศ. 2016
- พัฒนาโดยบริษัท Parallax Inc. (USA)
- เป็น Open source (Apache License 2.0)
- ได้แรงบันดาลใจมาจาก (inspired by) BlocklyDuino
- ใช้ Google Blockly สำหรับพัฒนาในส่วนที่เป็น Web App
- สามารถรันเป็น Web server (เขียนด้วย Java) ในเครื่องของผู้ใช้ได้ และเข้าใช้งานผ่านหน้าเว็บได้
- ใช้ได้เฉพาะบอร์ด Parallax เท่านั้น เช่น บอร์ด Propeller Multicore(http://www.parallax.com/microcontrollers/propeller)
- เข้าใช้งานแบบออนไลน์ผ่านเว็บได้ที่ http://blockly.parallax.com/blockly/ และผู้ใช้ต้องติดตั้งซอฟต์แวร์ชื่อ "BlocklyProp Client" เพื่อใช้ในการเชื่อมต่อบอร์ดผ่านทาง USB สำหรับการอัปโหลดโปรแกรม
◻️ ArduBlockly (https://ardublockly.embeddedlog.com/)
- ได้แรงบันดาลใจมาจาก ( inspired by) และพัฒนาต่อยอดจาก BlocklyDuino
- ใช้ Google Blockly สำหรับพัฒนาในส่วนที่เป็น Web App
- เป็น Open source (Apache License 2.0)
◻️ Blockly@rduino (http://www.techmania.fr/BlocklyDuino/)
- พัฒนาต่อยอดจาก BlocklyDuino เริ่มต้นราวปีค.ศ. 2016
- เป็น Open Source (Apache License 2.0)
- ใช้ Google Blockly สำหรับพัฒนาในส่วนที่เป็น Web App
- ใช้สำหรับบอร์ด Arduino Uno, Mega, Nano เป็นต้น
◻️ Webduino Blockly (https://blockly.webduino.io/)
- ใช้สำหรับบอร์ด BPI:bit (ESP32-based) จากบริษัทในประเทศจีน
- เป็น Open Source
🤔 เพิ่มเติม:
- การสร้างระบบซอฟต์แวร์ในทางวิศวกรรมแบบใช้บล็อก ก็มีให้เห็น อย่างเช่น MATLAB / Simulink และ LabView เป็นต้น สามารถจำลองการทำงาน แล้วแปลงเป็นโค้ดคอมไพล์ไปใช้งานสำหรับบอร์ดไมโครคอนโทรลเลอร์ได้ แต่ก็เป็นซอฟต์แวร์ที่ต้องเสียค่าลิขสิทธิ์ ไม่ฟรี และไม่ใช่ Open Source
- การเขียนโปรแกรมโดยใช้บล็อกสำหรับไมโครคอนโทรลเลอร์ เช่น Arduino ความสะดวกอยู่ที่การเลือกใช้บล็อกที่มีการเตรียมไว้แล้ว ก็เหมือนกับการสร้างไลบรารีสำหรับ Arduino ไว้ให้เรียกใช้งาน คนอื่นทำไว้ให้ เราก็แค่นำมาใช้งานให้เป็น
- ถ้าชุดของบล็อกเหล่านั้น (หรือเรียกว่า Block Set) มีอย่างจำกัด ก็จะจำกัดความยืดหยุ่นหรือความสามารถในการสร้างโปรแกรมของเราได้ แต่ถ้าบล็อกเซตมีจำนวนมาก เช่น มีจำนวนของบล็อกหลักร้อยหรือหลักพัน ก็ต้องใช้เวลาเรียนรู้ว่า แต่ละบล็อกใช้งานอย่างไร
- บางกรณีมีการสร้าง Custom Block (Blockly-based) ให้ผู้ใช้ เขียนโค้ดเองลงในบล็อกนั้นก็ได้ หรือถ้าสามารถสร้างบล็อกเพิ่มเติมไว้ใช้งานได้เอง ก็น่าสนใจ
- การสร้างบล็อกสำหรับใช้งานกับอุปกรณ์ฮาร์ดแวร์ แม้ว่าจะเป็นอุปกรณ์ประเภทเดียวกัน ก็มีความแตกต่างกันได้ เหมือนในกรณีของไลบรารีสำหรับ Arduino จากผู้พัฒนาหลายแหล่งและมีชื่อฟังก์ชันหรือคำสั่งซึ่งแตกต่างกัน
🤔 ข้อคิดเห็น:
- ตัวเลือกซึ่งเป็นซอฟต์แวร์สำหรับการเรียนรู้ ที่ได้นำเสนอมานั้น เป็นแค่บางส่วน (Open Source ทั้งหมด) ยังมีตัวเลือกอื่น ๆ อีกสำหรับการเรียนรู้
- ควรส่งเสริมความหลากหลาย เพื่อให้เกิดการเปรียบเทียบ พิจารณาความเหมือนความต่าง และความเชื่อมโยง
- มีตัวเลือกให้มากมายและใช้ได้ฟรี แต่ถ้าไม่เริ่มและลงมือจริงจัง ก็ไม่ก่อให้เกิดประโยชน์
References / Credit
- MIT Scratch
🔗 https://scratch.mit.edu
- Berkeley Snap!
🔗 https://snap.berkeley.edu
- MIT App Inventor 2 for Android
🔗 http://appinventor.mit.edu/explore/
- MIT App Inventor 2 online editor
🔗 http://ai2.appinventor.mit.edu/
- Google Blockly
🔗 https://developers.google.com/blockly/
- Google Blockly: Sourcecode
🔗 https://github.com/google/blockly
- Scratch Blocks: Sourcecode
🔗 https://github.com/LLK/scratch-blocks
- BBC Micro:bit
🔗 https://microbit.org/
- Micro:bit's Code Kingdoms
🔗 https://www.microbit.co.uk/app/
- MakeCode: Microsoft's JavaScript Blocks editor for Micro:bit
🔗 https://makecode.microbit.org/
- Scratch 3.0 micro:bit experimental extension
🔗 https://llk.github.io/microbit-extension/iste18/
- ArduBlock: Sourcecode
🔗 https://github.com/taweili/ardublock
- BlocklyDuino: Sourcecode
🔗 https://github.com/gasolin/BlocklyDuino
- BlocklyProp
🔗 http://blockly.parallax.com/blockly/
- BlocklyProp Starter Kit, Parallax Inc.
🔗 https://www.parallax.com/educ…/teach-blocklyprop-starter-kit
- BlocklyProp: Sourcecode
🔗 https://github.com/parallaxinc/BlocklyProp
- ArduBlockly
🔗 https://ardublockly.embeddedlog.com/
- ArduBlockly: Sourcecode
🔗 https://github.com/carlosperate/ardublockly/
- BlocklyDuino "Grove Edition"
🔗 https://blocklyduino.github.io/Blockly…/…/apps/blocklyduino/
- Blockly@rduino
🔗 http://www.techmania.fr/BlocklyDuino/
- Blockly@rduino: Sourcecode
🔗 https://github.com/technologiescollege/Blockly-at-rduino
- Webduino: Sourcecode
🔗 https://github.com/webduinoio
#IoT #STEM #VisualProgramming #KruBright
「python hex」的推薦目錄:
- 關於python hex 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
- 關於python hex 在 Python hex string to int 16進位字串轉數字 的評價
- 關於python hex 在 convert hex string to hex number in python - Stack Overflow 的評價
- 關於python hex 在 encodedecode to hex 不再可用 - 他山教程 的評價
- 關於python hex 在 Hex Viewer in Python (viewing binary files) - YouTube 的評價
- 關於python hex 在 objutils - Process HEX files in Python - GitHub 的評價
- 關於python hex 在 Efficiently creating a list of formatted hex values - Code ... 的評價
python hex 在 encodedecode to hex 不再可用 - 他山教程 的推薦與評價
encodedecode to hex 不再可用 ... Python 2.x <= 2.7 ... object has no attribute 'decode' b"1deadbeef3".decode('hex') # Traceback (most recent ... ... <看更多>
python hex 在 Python hex string to int 16進位字串轉數字 的推薦與評價
本篇介紹Python hex string to int 16進位字串轉數字,Python 沒有所謂的hex 的變數型態,所以16 進位都是要轉換到int 去作運算,之後要顯示成16 進位 ... ... <看更多>