发布 CodeLab Adapter 4.2
由于一种奇妙的牵强附会,恰恰就是我们今生的苦痛被说成了来世生活较好的道理。我们切不可把这种道理运用到其它方面。假若你向一个人买了十打鸡蛋,头一打全是臭的,你总不会推断下余九打一定其好无比 --《西方哲学史》
明天就像是盒子里的巧克力糖 --《一千零一個愿望》
可明日叵测。
改进如果不是在当下,则可能永远不会发生。
我们在过去总是想着把易用性放在体系成熟之后来做。
明日何其多。
4.2 版本专注当下,这个版本的大多数工作,都为了解决用户反馈的不爽之处。
优化体验
开箱可用是我们追逐的目标。
Scratch 在这块所做的设计依然是我们学习的榜样,在 Scratch 中连接乐高的体验,让任何人都感到身心愉悦。
Adapter 正在往这个方向努力。
4.2 中,我们新增了 6 款设备支持 Scratch 风格的发现/连接机制,有了直观的连接机制,许多说明文档就不再需要,而且在意外发生时,用户能在界面上直观看到发生了什么,而不是猜测幕后发生了什么,这对排查问题以及减少新手恐惧都很重要。
这些插件中,有三个是旧插件:
- Cozmo
- Robomaster
- Tello
三个新插件:
BrainCo
Train Your Brain.
BrainCo 目前在探索跟英荔的合作可能性,英荔是 CodeLab 的合作伙伴,从 4.2 版本开始,我们开始重点关注合作项的推进和落地,并在这个过程中,根据用户反馈改进软件体系。这是我们在方法论上做的调整: 服务具体用户,并从中获取改进建议。
LEGO Mario
登登登等灯蹬
我在小学的许多个暑假里,热衷于在马里奥游戏里找彩蛋,倒不急着通关。最喜欢的两个彩蛋,其一是 3-1关 快到终点时,在阶梯上踩那只会飞的鸭子,来获取夸张的奖励。以及在爬到树顶的时候,快速按左-右-跳
,闪现到屏幕的另一侧。
有了 LEGO Mario,我们可以动手在桌面上建造关卡!
Sphero RVR
RVR is made for makers, hackers, coders – and you.
Sphero RVR 拥有惊人的稳定性、精度和续航能力,Neverland 里这台 RVR 已经三天三夜没关机了,随时可以连上飞快跑起来。
由于 Adapter 4 内置了跨平台蓝牙驱动,我们轻松接入了 Sphero 全家桶。
Sphero 在全球教育/玩具市场都很受欢迎。
为了让 Adapter Node 更好支持 Scratch 风格的发现/连接机制,构建了一个抽象类: AdapterThing。 我们目前将 AdapterThing 视为在 Adapter 里接入硬件设备的最佳实践,文档参考: Adapter Thing
新插件
Sugar
构建 Sugar 插件的动机最初来自 @Lounsen 的想法: 接布尔量的 hat 积木。
Sugar 插件是个实验室,试图为 Scratch 提供 甜 的语法糖。
新的想法/需求,欢迎在这个帖子下讨论
积木介绍
接布尔量的 hat 积木
除非情况发生变化,否则只触发 一次 .
如果 我的变量 一直 < 50,只向前移动一次.
插件改进
支持 micro:bit v2
最近收到的用户邮件里,最多的提议是:
使 micro:bit v2 在 Adapter 里开箱可用。
4.2 已经完成了这项功能。micro:bit v1 和 v2 默认开箱可用。
此外,在 microbit radio 插件中,v1 和 v2 可以混着用。
重构
基于出色的 Dynaconf 重构了 settings 机制。
此前 Adapter 的配置机制十分复杂,而复杂通常是脆弱的同义词。
为了给用户更多自由以及遵循 unix 传统,我们从一开始就支持用户配置文件以及环境变量。
手动处理不同优先级的配置项带来了许多杂乱和复杂性,我之前很害怕进入 settings 代码所处的沼泽。
4.2版本通过引入 Dynaconf ,希望能彻底解决这个问题,使配置项变得简单、灵活、统一。
其他改进项
- 解决 WebUI 缩放时,页面失调问题
- 支持云端更新配置(
global_settings.toml
) - 提供 node 版本服务(静态分析),允许 client 自动检测 node 版本
- 统一所有 url 中的 adapter_token 参数(为将来灵活的安全机制打基础)
- 为 microbit 固件刷入添加 ui 反馈
- 使得 Python Kernel 插件可以向 scratch 传递 json(数据结构)
- 修复 windows 下 dynaconf 引起的路径错误问题(与
python -m
启动方式有关) - 修复 BrainCo 在 windows 下的打包 bug
- 修复 马里奥 在 windows10 下的发现问题
- 支持马里奥掉线通知(UI 同步)