-
Notifications
You must be signed in to change notification settings - Fork 31
about_think
我希望,编程是一种日常生活,任何东西都可以进行一定的编程,孩子也好,长辈也好,它们都可以享受到编程的乐趣和美好,而且也并不难,就像手机应用一样,下载,安装,使用。
而我想要做到,能让所有人都可以参与到其中的编程项目,所以才做了这些东西。
做硬件、做驱动、做应用、做产品、做推广、做市场、做运营、共同形成一个巨大的体系。
以我目前的见识,在硬件领域中具有统一趋势的软件体系有如下
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
以下这些网站都是自己人了哈哈,所以我希望越来越多的人可以加入到其中一起发展,图名、图利、图什么都好,只要你肯做事,什么都会有的。