发布 CodeLab Adapter 3.7

3.7 包含以下更新。

重大更新

统一 Python 环境

太多选择,有时候是一种心理负担

CodeLab Adapter 的扩展系统之前最大的问题是: Python 环境不统一。 一会儿是 Adapter 内置的 Python(用于打包),一会儿是用户本地的 Python(用于运行 Adapter Node),一会儿又是完整版里自带的 Python(内置 Node 的依赖)。当事情有太多的选择,时常让人不知所措,很多用户在选择困难中,花费了许多时间。

3.7 版本中(完整版), Adapte 内部只有一个 Python(>=3.7), 这个环境内置了许多常用第三方库,在自定义插件时,可以使用到它们:

  • codelab-adapter-client
  • Flask
  • ipython
  • jupyterlab
  • mcpi
  • numpy
  • opencv-contrib-python
  • paho-mqtt
  • Pillow
  • prompt-toolkit
  • protobuf
  • PyAutoGUI
  • pyserial
  • pyzmq
  • requests
  • uflash
  • websockets
  • ...

更多的内置库参考: CodeLab Adapter wiki

Extension 与 Node

在新的 Python 环境中, Adapter Extension 和 Adapter Node 有什么区别呢?

它们处于同样的 Python 环境。唯一的区别是,Adapter Extension 以线程方式启动, Adapter Node 所在的脚本以进程启动: python xxx.py,在类结构上,Adapter Extension 是 Adapter Node 的子类。Adapter Node 只是普通的 Python 脚本,可以使用本地 Python 启动它(这对于调试很有帮助)。也可以在多台机器上分布式运行(可以是局域网,也可以运行在互联网)。目前Neverland 2.0就是一个范例: 在文档里的简单 demo 中,涉及 3 台计算机直接的消息通信,整个过程简单而快速。

小图标

有若干用户来信提到这个需求: 让 CodeLab Adapter 像 Scratch Link 一样,运行的时候在桌面显示一个小图标,以便于用户管理它(手动关闭它或者打开 WebUI 界面)。

Windows 下:

MacOS 下:

右键小图标,可以做到:

  • 打开 WebUI
  • 关闭 CodeLab Adapter

前端更新提醒

之前 Adapter 搭配的 CodeLab Scratch 因为缓存问题,需要用户主动刷新。这造成许多困扰,用户无从直到我们何时更新了积木,每次清楚浏览器缓存又导致加载缓慢。

在当前版本之后的版本中,前端 UI 会主动提醒用户何时应该更新

ps:如果你之前打开过 CodeLab Scratch,此次需要做最后一次手动浏览器缓存刷新

内置 mDNS 服务

Adapter 3.7 中内置了 mDNS 服务,方便在局域网中以可编程方式发现设备。

Neverland 2.0 插件中使用到它:

当 Adapter 以 NEVERLAND_HUB 模式 启动时,Adapter 将作为空间中的主节点 ,并广播出自己的 mDNS 服务。我们可以在 Scratch 中发现了连接它。

只要安装codelab_adapter_client,你可以让自定义的 Adapter Node 也拥有广播和发现 mDNS 的能力,这对于提供 C 端产品很有用。

这部分相关源码参考: codelab-mdns-*

内置 OSC 服务

OSC (Open Sound Control)是一种用于将声音合成器、计算机和其他多媒体设备联网的协议,用于音乐表演或表演控制等目的。OSC 的优势包括互操作性,准确性,灵活性以及增强的组织和文档。

Adapter 同时内置 OSC server 和 OSC client!

通过兼容这个标准协议,我们可以使用几乎所有市面上主流的 OSC client。

如此一来,CodeLab Adapter 甚至可以接管整个音乐厅!

以下是利用 OSC client 做的一个例子(高速刷新):

如果你使用 iPhone 或者其他支持压力输入的屏幕,可以通过按压力度控制画笔粗细。

建恩同学将 CodeLab Adapter 的 OSC 消息桥接到了 midi 协议, 进而可以与所有主流的专业音乐软件交互:

目前正与 Rick 一起探索在音乐领域的可能性(诸如与 vvvv 协同)。

可编程的固件刷入接口

from codelab_adapter.utils import flash_usb_microbit, flash_makecode_file
# flash_usb_microbit(py_file_path)
# flash_makecode_file(makecode_hex_path)

目前只支持 microbit 的自定义固件刷入,支持 micropython 和 makecode 两种固件刷入,也支持任何允许文件拖入式的固件刷入 (诸如CircuitPython),编程细节参考:flash_usb_microbit(firmware_path)

未来将支持更多固件的刷入。

新增插件

EasyOCR

EasyOCR是个有趣的 Python AI 项目, 足够简单,又足够有用, 支持 70 多种语言的开箱可用 OCR,包括中文,日文,韩文和泰文...

EasyOCR 的一层薄薄包装,将 EasyOCR 的能力引入 Adapter。

tensorflow-yolov4

基于 Tensorflow 2 的 YOLOv4 实现,小巧易用。

Neverland 2.0

Neverland 2.0 基于 mDNS 提高易用性,它是一个分布式系统,基于 Adapter 构建,在用户侧 Adapter 中,表现为一个内置插件。

拓扑图如下:

项目包含以下部分:

  • adapter master: 空间主节点,以 NEVERLAND_HUB 模式运行的 Adapter,运行在树莓派上
  • adapter node: 空间功能节点,运行在树莓派上。在我们的视频里,有一个节点连接了 makeymakey(makey node)
  • user client: 运行在用户计算机上的 Adapter

adapter master

ADAPTER_MODE=3 ./codelab-adapter

关于 Adapter 的模式

adapter node

python3 makey_node.py

user client

正常运行 Adapter 即可


我们正在新的办公室里实施 Neverland 2.0,它看起来就像可编程的 Teamlab:

Physical Blocks 2.0

physical blocks 2.0 是最新的 DynamicTable 插件。 新的更新我们都将在这个版本是进行,physical blocks 1.0 在未来将弃用。

使用 physical blocks,可以在一张桌子上对实物进行编程。

与 1.0 版本的区别?

标记列表默认是字符串(序列化之后),可以随意与 scrath 积木组合(诸如 xx 包含 xx 积木),避免因为操作 list 引起的崩溃(诸如将 list 保存为变量)。

在 2.0 中,直到主动使用 JSON parse 积木解析后,它才称为列表。相关操作参考:json 积木,也可参考前边的例子: physical-blocks2-spell-demo

此外 2.0 只使用一个积木更新数据,提高标签存在的稳定性(也提高速度),其中一种典型的编程模式是: 在一次更新数据之后的积木都对应更新瞬间的视野状态。而不像 1.0,每个积木都有各自瞬间的视野。 近期还将升级 pro 版本(商业合作伙伴)

插件增强 & bug 修复

Teachable Machine

Longan 团队已经将 Teachable Machine 部署到国内: Longan Teachable Machine, 并且内置支持 CodeLab Adapter, 开箱可用!

EIM

Scratch EIM 插件做了若干重要更新,诸如:

  • 添加特定类型插件的消息积木
  • 修复 rate limit 通知过于频繁问题
  • 添加 runtime 参数
  • 支持调试模式
  • 将 rate limit 机制添加在基础类中
  • 完善 message id 机制(uuid)
  • 修复 eim 消息作为变量显示在舞台区的问题(json 序列化)
  • 支持定制 message timeout 参数

EIM 的插件已经开源:

USB micro:bit

支持连接时自动检测与刷入固件。

这部分的插件已经开源:

micro:bit radio

支持连接时自动检测与刷入固件。

这部分的插件已经开源:

我的世界(minecraft)

感谢 @Lounsen 同学的 bug 反馈,目前已修复跨平台兼容问题。

不远的将来

我们正逐步将 Adapter、Scratch、Python、Smalltalk 进行融合,试图进一步提升编程环境的灵活性。 Smalltalk 是一片有着壮美景致的遗失世界。

Smalltalk & Scratch:

浏览器里的 Smalltalk & Scratch & CodeLab Adapter:

将 Python 提升到 Smalltalk-like 沉浸式编程环境:

更多的探索参考:Smalltalk 入门导览

开始使用

下载最新 Adapter

参考