Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
junhuanchen edited this page Mar 4, 2019 · 1 revision

Document

head

关于积木编程的一些思考

我希望,编程是一种日常生活,任何东西都可以进行一定的编程,孩子也好,长辈也好,它们都可以享受到编程的乐趣和美好,而且也并不难,就像手机应用一样,下载,安装,使用。

而我想要做到,能让所有人都可以参与到其中的编程项目,所以才做了这些东西。

做硬件、做驱动、做应用、做产品、做推广、做市场、做运营、共同形成一个巨大的体系。

以我目前的见识,在硬件领域中具有统一趋势的软件体系有如下

arduino、micropython、linux(openwrt\raspbian\android)

而我所做的也就这些领域的驱动与应用,并且我目前的想法是将所掌握的专业技术包装处理一下,改善目前 STEAM 的教育环境,它是我认为的一个基石,只要人们接受了它,就可以如我开头所说,在不远的未来,编程也是平常的日常工具。

但我认为,从 Linux 系统开始就已经不利于教育的推广了,除了android外都没有一个很好的前端让人去感受编程的过程,沦为GEEK的工具,说到底也是在于用户阶段性需求的不同,因为我也有试图去让linux系统变得像软件一样开箱即用,至少用户们都会喜欢这种类似刷机的感觉。

这里也且不谈太多乱七八糟的,就说说我现在做的阶段性任务吧。

我的硬件设计上都是以 esp8266 和 esp32 为基础。

硬件中的软件主要就往arduino、micropython继续开发,目前已经集中精力全部放在 micropython ,围绕它开发工具、IDE插件、驱动库等,包括为上层软件提供在线修改代码的基础功能,确保可以在这之上快速做硬件自身的软件开发,如一些micropython的开发工具 mpfshell 、pycharm等支持。

上层软件开发上第一个是 Webduino ,它是借助硬件内置 Firmata 协议来完成控制,然后在 JavaScript 中实现 Firmata 进行浏览器的通信控制,以 webduino-js 为基础的 nodejs 模块或是编译后的原始 JavaScript firmata 已经有利于硬件的控制接入web中,这其中也方便了更多的api、js 应用的连接和包装,再这之上额外添加 webduino-blockly 插件生成 js 代码送入 nodejs 后台解释运行。虽然结构很好,但在实际部署的过程中问题依然存在很多,比如:过度依赖网络与硬件的通信、浏览器的对硬件的访问限制、浏览器自身无法承担所有软件功能、离线软件的再现和分发不够稳定或友好,谷歌的技术过于复杂,一般用户的支持不来(科学上网),技术普及难度过高。

上层软件开发的第二个是 espblocks,它没有通过各种代理或中转,思路很简单,直接把python代码文件传给硬件,让硬件自己去解释执行,所以我在一个简单 IDE 中额外透过网络借助了一个 blockly 网页来生成代码,然后通过 js 取代码送回硬件执行,并且它本身就是可以在网页中进行仿真模拟,所以效果看起来就很舒服,因为相比第一个技术,它没有 firmata 的接口,其次没有网页端的依赖,网页端的 blockly 只是为了提供示例代码,所以它在用户机器上的复现最为容易,分发的时候一个 exe 或 pip 包送过去就搞定了,但问题也依然存在,它的结构我很满意,但它只能解决初期的简单应用和展示,对更为大型的程序架构,将无法胜任,因为还没有办法对积木再封装成一个库,就好比封装成一个拓展,减少重复性工作,它必须改变底层硬件的实现后再对应改变积木块,而改动这个事情,在我看来是很轻易的,但在教育领域中的用户而言,我认为这是一种困扰,也许可以透过其他插件的方式来改善这个blockly积木升级封装的问题,但眼下没办法,所以只把它当作是一种比较好用的演示工具,轻松的给人体验使用,但这样的架构长期以往肯定不利于世界性的多人开发。

第三个是 scratch2,早在s4a的时候,我透过micropython来运行s4a的协议来让软件启动,但我发现1.6的时候,scratch 软件就如同我第二个尝试的软件,太过纯粹,玩玩还可以,发展起来肯定会改变,那么我早早就处理掉了 1.6,去年年底接触到一个老师给我的 s2m ,是来自microbit的micropython支持,因为我手头的硬件原型就是microbit,所以我在已经复现了 microbit 的基础下完成了s2m的接入,这时候,我发现s2m的实现方式是 透过一个python软件来代理转发数据给回microbit,因此没有使用蓝牙,而是透过串口转http的方式代理了接口(我也试图移植它的蓝牙,但真正用起来的时候,大多数人的设备上还是没有蓝牙),所以接口极其愚蠢,,在硬件底层和代理软件之间都重复实现了一层映射,这显然是比不上我第二个尝试的实现。

也就这时候,基于此,我在做 webduino 离线控制硬件的时候,得到一定启发,webduino可以透过websocket的方式和其他代理软件进行硬件功能的协同,比如浏览器访问硬件所使用的代理插件时候,就是做得类似的事情,但那个受客户机器的环境影响很严重,远不如目标机器上运行一个代理软件访问来的实在。

最后我开始了解 scratch3 ,各方面功能已经非常完善了,我也很满意,如果是我要做,我会在 scratch3 上试图不改变软件自身的情况下,通过安装插件包的方式把代理功能积木送进去(透过 scratch2 的拓展插件的概念)然后借助外部的服务的方式来进行操作,这样可以保证不改变对方的 scratch3 工具的情况下扩充自身的功能,scratch2 的时候我试图这样做,但结果被当成了一个项目给覆盖掉了,明明我只是想include、import,而不是new project,这样我怎么和已经存在的项目进行结合,虽然添加了这样的功能也一样会面临着 scratch 软件的碎片化,但我认为要解决,所以 scratch3 应该可以做到额外添加一个 xml 类似的定义,去额外扩充和建立代理积木的接口,就像blockly早已实现了添加额外的代码积木。

所以我会希望 scratch3 也有 scratch2 的类似实现,但眼前好像还不够,还差点什么。

像我现在的理解,scratch3 在试图建立一个虚拟机(好比浏览器的JavaScript解释器),然后GUI再把积木送进去执行,在透过虚拟机中与内部的插件进行各种调用和沟通,在我看来和webduino的架构,但它的开发基础和难度要更为下降一些,不会让一般开发者都觉得无比困难,虽然现在scratch3 的插件我认为是不够友好的,因为它还缺少了一个文档,就是关于如何再现 scratch3 的环境,我过年期间会进行一些尝试,我想还是需要一个编程指南去指导用户进行插件的二次扩充和开发,当然,现阶段我认为这个插件系统也会跟着变动,也许到时候又换了个实现,但这条路我认为是 scratch 的正确的道路,而且 scratch 的用户量也不小了,大家或多或少都知道了。

scratch 和 blockly 对于我做的硬件固件支持而言,只是一个上层软件控制工具。

而我认为,scratch 是一个屏蔽了底层的应用工具,有利于更为上层的软件二次开发。

而 blockly 则是一个学习代码的工具,或者是更适合编程教育的工具,它把所有代码都公开,而且在未来的世界里,我认为 blockly 开发是一种抽象开发,scratch 则是一种应用开发。

所以我会对持续跟进的开发,除此之外,我的重心还是持续投入在硬件的驱动开发上,比如我的理想就是python一统天下。

写在最后的话

最近已经开发完各类积木的基础,即将完善开发文档,都是关于 Webduino-Blockly 和 Scratch3 的积木开发指导的,使用它们,你也可以做出积木来,分享给你的亲朋好友一起用起来。

https://scratch3.codelab.club/ https://adapter.codelab.club/ https://bit.webduino.com.cn/blockly

以下这些网站都是自己人了哈哈,所以我希望越来越多的人可以加入到其中一起发展,图名、图利、图什么都好,只要你肯做事,什么都会有的。

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /