|
| 1 | +--- |
| 2 | +title: 发布 CodeLab Adapter 3.7 |
| 3 | +date: 2020-11-03 |
| 4 | +author: CodeLab |
| 5 | +Slug: release-3-7 |
| 6 | +tags: ["CodeLab相关", "技术文档", "Adapter"] |
| 7 | +categories: ["CodeLab"] |
| 8 | +--- |
| 9 | + |
| 10 | +3.7 包含以下更新。 |
| 11 | + |
| 12 | +## 重大更新 |
| 13 | + |
| 14 | +### 统一 Python 环境 |
| 15 | + |
| 16 | +> 太多选择,有时候是一种心理负担 |
| 17 | +
|
| 18 | +CodeLab Adapter 的扩展系统之前最大的问题是: Python 环境不统一。 一会儿是 Adapter 内置的 Python(用于打包),一会儿是用户本地的 Python(用于运行 Adapter Node),一会儿又是完整版里自带的 Python(内置 Node 的依赖)。当事情有太多的选择,时常让人不知所措,很多用户在选择困难中,花费了许多时间。 |
| 19 | + |
| 20 | +<!--truncate--> |
| 21 | + |
| 22 | + |
| 23 | +3.7 版本中(完整版), [Adapte 内部只有一个 Python(`>=3.7`)](https://adapter.codelab.club/user_guide/FAQ/#python-codelab-adapter-370), 这个环境内置了许多常用第三方库,在自定义插件时,可以使用到它们: |
| 24 | + |
| 25 | +- codelab-adapter-client |
| 26 | +- Flask |
| 27 | +- ipython |
| 28 | +- jupyterlab |
| 29 | +- mcpi |
| 30 | +- numpy |
| 31 | +- opencv-contrib-python |
| 32 | +- paho-mqtt |
| 33 | +- Pillow |
| 34 | +- prompt-toolkit |
| 35 | +- protobuf |
| 36 | +- PyAutoGUI |
| 37 | +- pyserial |
| 38 | +- pyzmq |
| 39 | +- requests |
| 40 | +- uflash |
| 41 | +- websockets |
| 42 | +- ... |
| 43 | + |
| 44 | +更多的内置库参考: [CodeLab Adapter wiki](https://github.com/CodeLabClub/codelab_adapter_extensions/wiki) |
| 45 | + |
| 46 | +#### Extension 与 Node |
| 47 | + |
| 48 | +在新的 Python 环境中, Adapter Extension 和 Adapter Node 有什么区别呢? |
| 49 | + |
| 50 | +它们处于同样的 Python 环境。唯一的区别是,Adapter Extension 以线程方式启动, Adapter Node 所在的脚本以进程启动: `python xxx.py`,在类结构上,Adapter Extension 是 Adapter Node 的子类。Adapter Node 只是普通的 Python 脚本,可以使用本地 Python 启动它(这对于[调试](https://adapter.codelab.club/dev_guide/debug/)很有帮助)。也可以在多台机器上分布式运行(可以是局域网,也可以运行在互联网)。目前[Neverland 2.0](https://adapter.codelab.club/extension_guide/neverland2/)就是一个范例: 在文档里的简单 demo 中,涉及 3 台计算机直接的消息通信,整个过程简单而快速。 |
| 51 | + |
| 52 | +### 小图标 |
| 53 | + |
| 54 | +有若干用户来信提到这个需求: 让 CodeLab Adapter 像 Scratch Link 一样,运行的时候在桌面显示一个小图标,以便于用户管理它(手动关闭它或者打开 WebUI 界面)。 |
| 55 | + |
| 56 | +Windows 下: |
| 57 | + |
| 58 | + |
| 59 | + |
| 60 | +MacOS 下: |
| 61 | + |
| 62 | + |
| 63 | + |
| 64 | +右键小图标,可以做到: |
| 65 | + |
| 66 | +- 打开 WebUI |
| 67 | +- 关闭 CodeLab Adapter |
| 68 | + |
| 69 | +<!-- |
| 70 | +长期运行 |
| 71 | +
|
| 72 | +默认不关闭adapter(当webui退出后) |
| 73 | +--> |
| 74 | + |
| 75 | +### 前端更新提醒 |
| 76 | + |
| 77 | +之前 Adapter 搭配的 CodeLab Scratch 因为缓存问题,需要用户主动刷新。这造成许多困扰,用户无从直到我们何时更新了积木,每次清楚浏览器缓存又导致加载缓慢。 |
| 78 | + |
| 79 | +在当前版本之后的版本中,前端 UI 会主动提醒用户何时应该更新 |
| 80 | + |
| 81 | +ps:如果你之前打开过 [CodeLab Scratch](https://scratch-beta.codelab.club/),此次需要做最后一次手动浏览器缓存刷新 |
| 82 | + |
| 83 | + |
| 84 | +### 内置 mDNS 服务 |
| 85 | + |
| 86 | +Adapter 3.7 中内置了 mDNS 服务,方便在局域网中以可编程方式发现设备。 |
| 87 | + |
| 88 | +[Neverland 2.0](https://adapter.codelab.club/extension_guide/neverland2/) 插件中使用到它: |
| 89 | + |
| 90 | + |
| 91 | + |
| 92 | +当 Adapter 以 [NEVERLAND_HUB 模式](https://adapter.codelab.club/user_guide/settings/#adapter_mode) 启动时,Adapter 将作为空间中的主节点 ,并广播出自己的 mDNS 服务。我们可以在 Scratch 中发现了连接它。 |
| 93 | + |
| 94 | +只要安装[codelab_adapter_client](https://github.com/CodeLabClub/codelab_adapter_client_python),你可以让自定义的 Adapter Node 也拥有广播和发现 mDNS 的能力,这对于提供 C 端产品很有用。 |
| 95 | + |
| 96 | +这部分相关源码参考: [codelab-mdns-\*](https://github.com/CodeLabClub/codelab_adapter_client_python/blob/master/setup.py#L55) |
| 97 | + |
| 98 | +### [内置 OSC 服务](https://adapter.codelab.club/extension_guide/osc/) |
| 99 | + |
| 100 | +[OSC (Open Sound Control)](http://opensoundcontrol.org/introduction-osc)是一种用于将声音合成器、计算机和其他多媒体设备联网的协议,用于音乐表演或表演控制等目的。OSC 的优势包括互操作性,准确性,灵活性以及增强的组织和文档。 |
| 101 | + |
| 102 | +Adapter 同时内置 OSC server 和 OSC client! |
| 103 | + |
| 104 | +通过兼容这个标准协议,我们可以使用几乎所有市面上主流的 OSC client。 |
| 105 | + |
| 106 | +如此一来,CodeLab Adapter 甚至可以接管整个音乐厅! |
| 107 | + |
| 108 | +以下是利用 OSC client 做的一个例子(高速刷新): |
| 109 | + |
| 110 | +<video width="80%" src="https://adapter.codelab.club/video/1603105233433018.mp4" controls="controls"></video> |
| 111 | + |
| 112 | +如果你使用 iPhone 或者其他支持压力输入的屏幕,可以通过按压力度控制画笔粗细。 |
| 113 | + |
| 114 | +建恩同学将 CodeLab Adapter 的 OSC 消息桥接到了 midi 协议, 进而可以与所有主流的专业音乐软件交互: |
| 115 | + |
| 116 | +<video width="80%" src="https://adapter.codelab.club/video/1604400289579774.mp4" controls="controls"></video> |
| 117 | + |
| 118 | +目前正与 Rick 一起探索在音乐领域的可能性(诸如与 vvvv 协同)。 |
| 119 | + |
| 120 | +### 可编程的固件刷入接口 |
| 121 | + |
| 122 | +```python |
| 123 | +from codelab_adapter.utils import flash_usb_microbit, flash_makecode_file |
| 124 | +# flash_usb_microbit(py_file_path) |
| 125 | +# flash_makecode_file(makecode_hex_path) |
| 126 | +``` |
| 127 | + |
| 128 | +目前只支持 microbit 的自定义固件刷入,支持 micropython 和 makecode 两种固件刷入,也支持任何允许文件拖入式的固件刷入 (诸如[CircuitPython](https://circuitpython.org/)),编程细节参考:[flash_usb_microbit(firmware_path)](https://github.com/CodeLabClub/codelab_adapter_extensions/blob/master/extensions_v3/extension_usb_microbit.py#L56) |
| 129 | + |
| 130 | +未来将支持更多固件的刷入。 |
| 131 | + |
| 132 | +## 新增插件 |
| 133 | + |
| 134 | +### [EasyOCR](https://adapter.codelab.club/extension_guide/EasyOCR/) |
| 135 | + |
| 136 | +[EasyOCR](https://github.com/JaidedAI/EasyOCR)是个有趣的 Python AI 项目, 足够简单,又足够有用, 支持 70 多种语言的开箱可用 OCR,包括中文,日文,韩文和泰文... |
| 137 | + |
| 138 | +EasyOCR 的一层薄薄包装,将 EasyOCR 的能力引入 Adapter。 |
| 139 | + |
| 140 | +### [tensorflow-yolov4](https://adapter.codelab.club/extension_guide/tensorflow-yolov4/) |
| 141 | + |
| 142 | +基于 Tensorflow 2 的 YOLOv4 实现,小巧易用。 |
| 143 | + |
| 144 | +### [Neverland 2.0](https://adapter.codelab.club/extension_guide/neverland2/) |
| 145 | + |
| 146 | +[Neverland 2.0](https://adapter.codelab.club/extension_guide/neverland2/) 基于 mDNS 提高易用性,它是一个分布式系统,基于 Adapter 构建,在用户侧 Adapter 中,表现为一个内置插件。 |
| 147 | + |
| 148 | +<video width="80%" src="https://adapter.codelab.club/video/1601261973458887.mp4" controls="controls"></video> |
| 149 | + |
| 150 | +拓扑图如下: |
| 151 | + |
| 152 | + |
| 153 | + |
| 154 | +项目包含以下部分: |
| 155 | + |
| 156 | +- adapter master: 空间主节点,以 NEVERLAND_HUB 模式运行的 Adapter,运行在树莓派上 |
| 157 | +- adapter node: 空间功能节点,运行在树莓派上。在我们的视频里,有一个节点连接了 makeymakey(makey node) |
| 158 | +- user client: 运行在用户计算机上的 Adapter |
| 159 | + |
| 160 | +#### adapter master |
| 161 | + |
| 162 | +`ADAPTER_MODE=3 ./codelab-adapter` |
| 163 | + |
| 164 | +关于 Adapter 的模式 |
| 165 | + |
| 166 | +#### adapter node |
| 167 | + |
| 168 | +`python3 makey_node.py` |
| 169 | + |
| 170 | +#### user client |
| 171 | + |
| 172 | +正常运行 Adapter 即可 |
| 173 | + |
| 174 | +--- |
| 175 | + |
| 176 | +我们正在新的办公室里实施 Neverland 2.0,它看起来就像可编程的 [Teamlab](https://www.teamlab.art/zh-hans/): |
| 177 | + |
| 178 | + |
| 179 | + |
| 180 | +<video width="80%" src="https://adapter.codelab.club/video/1604400272567720.mp4" controls="controls"></video> |
| 181 | + |
| 182 | +### [Physical Blocks 2.0](https://adapter.codelab.club/extension_guide/physical_blocks2/) |
| 183 | + |
| 184 | + |
| 185 | + |
| 186 | +physical blocks 2.0 是最新的 DynamicTable 插件。 新的更新我们都将在这个版本是进行,physical blocks 1.0 在未来将弃用。 |
| 187 | + |
| 188 | +使用 physical blocks,可以在一张桌子上对实物进行编程。 |
| 189 | + |
| 190 | +##### 与 1.0 版本的区别? |
| 191 | + |
| 192 | +`标记列表`默认是字符串(序列化之后),可以随意与 scrath 积木组合(诸如 xx 包含 xx 积木),避免因为操作 list 引起的崩溃(诸如将 list 保存为变量)。 |
| 193 | + |
| 194 | +在 2.0 中,直到主动使用 JSON parse 积木解析后,它才称为列表。相关操作参考:json 积木,也可参考前边的例子: physical-blocks2-spell-demo |
| 195 | + |
| 196 | +此外 2.0 只使用一个积木更新数据,提高标签存在的稳定性(也提高速度),其中一种典型的编程模式是: 在一次更新数据之后的积木都对应更新瞬间的视野状态。而不像 1.0,每个积木都有各自瞬间的视野。 |
| 197 | +近期还将升级 pro 版本(商业合作伙伴) |
| 198 | + |
| 199 | +## 插件增强 & bug 修复 |
| 200 | + |
| 201 | +### [Teachable Machine](https://adapter.codelab.club/extension_guide/teachable_machine/) |
| 202 | + |
| 203 | +Longan 团队已经将 Teachable Machine 部署到国内: [Longan Teachable Machine](https://train.longan.link/), 并且内置支持 CodeLab Adapter, 开箱可用! |
| 204 | + |
| 205 | +### [EIM](https://adapter.codelab.club/project_tutorial/eim_pt/) |
| 206 | + |
| 207 | +Scratch EIM 插件做了若干重要更新,诸如: |
| 208 | + |
| 209 | +- 添加特定类型插件的消息积木 |
| 210 | +- 修复 rate limit 通知过于频繁问题 |
| 211 | +- 添加 runtime 参数 |
| 212 | +- 支持调试模式 |
| 213 | +- 将 rate limit 机制添加在基础类中 |
| 214 | +- 完善 message id 机制(uuid) |
| 215 | +- 修复 eim 消息作为变量显示在舞台区的问题(json 序列化) |
| 216 | +- 支持定制 message timeout 参数 |
| 217 | + |
| 218 | +EIM 的插件已经开源: |
| 219 | + |
| 220 | +- [scratch3_eim](https://github.com/CodeLabClub/scratch3_eim) |
| 221 | + |
| 222 | +### [USB micro:bit](https://adapter.codelab.club/extension_guide/microbit/) |
| 223 | + |
| 224 | +支持连接时自动检测与刷入固件。 |
| 225 | + |
| 226 | +这部分的插件已经开源: |
| 227 | + |
| 228 | +- [extension_usb_microbit.py](https://github.com/CodeLabClub/codelab_adapter_extensions/blob/master/extensions_v3/extension_usb_microbit.py) |
| 229 | +- [scratch3_usb_microbit](https://github.com/CodeLabClub/scratch3_usb_microbit) |
| 230 | + |
| 231 | +### [micro:bit radio](https://adapter.codelab.club/extension_guide/microbit_radio/) |
| 232 | + |
| 233 | +支持连接时自动检测与刷入固件。 |
| 234 | + |
| 235 | +这部分的插件已经开源: |
| 236 | + |
| 237 | +- [extension_microbit_radio.py](https://github.com/CodeLabClub/codelab_adapter_extensions/blob/master/extensions_v3/extension_microbit_radio.py) |
| 238 | +- [scratch3_microbit_radio](https://github.com/CodeLabClub/scratch3_microbit_radio) |
| 239 | + |
| 240 | +### [我的世界(minecraft)](https://adapter.codelab.club/extension_guide/minecraft/) |
| 241 | + |
| 242 | +感谢 @Lounsen 同学的 bug 反馈,目前已修复跨平台兼容问题。 |
| 243 | + |
| 244 | +## 不远的将来 |
| 245 | + |
| 246 | +我们正逐步将 Adapter、Scratch、Python、Smalltalk 进行融合,试图进一步提升编程环境的灵活性。 Smalltalk 是一片有着壮美景致的遗失世界。 |
| 247 | + |
| 248 | +Smalltalk & Scratch: |
| 249 | + |
| 250 | +<video width="80%" src="https://adapter.codelab.club/video/smalltalk-scratch.mp4" controls="controls"></video> |
| 251 | + |
| 252 | +浏览器里的 Smalltalk & Scratch & CodeLab Adapter: |
| 253 | + |
| 254 | +<video width="80%" src="https://adapter.codelab.club/video/1603782783858008.mp4" controls="controls"></video> |
| 255 | + |
| 256 | +将 Python 提升到 Smalltalk-like 沉浸式编程环境: |
| 257 | + |
| 258 | +<video width="80%" src="https://adapter.codelab.club/video/12d30ae7cb52dcb0e894d7c9371da8.MP4" controls="controls"></video> |
| 259 | + |
| 260 | +更多的探索参考:[Smalltalk 入门导览](https://blog.just4fun.site/post/%E7%BC%96%E7%A8%8B/smalltalk-guide/) |
| 261 | + |
| 262 | +# 开始使用 |
| 263 | + |
| 264 | +[下载最新 Adapter](https://adapter.codelab.club/get_start/gs_install/?version=latest)。 |
| 265 | + |
| 266 | +# 参考 |
| 267 | + |
| 268 | +- [CodeLab Adapter docs](https://adapter.codelab.club/) |
0 commit comments