Skip to content

Commit 7bde062

Browse files
committed
update
1 parent 2258916 commit 7bde062

File tree

2 files changed

+282
-0
lines changed

2 files changed

+282
-0
lines changed

blog/3.7-release.md

Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
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+
![](https://adapter.codelab.club/img/5f5cc989418da78b6a889144c2727b27.png)
59+
60+
MacOS 下:
61+
62+
![](https://adapter.codelab.club/img/7e554bd45959f8fa066864659373bc30.png)
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+
![](https://adapter.codelab.club/img/WechatIMG2768.jpeg)
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+
![](https://adapter.codelab.club/img/9ebe9c73696539ce9ba40a11d29ce788.png)
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+
![](https://adapter.codelab.club/img/7f81145ff94edfc594514fb68a8aec21.png)
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+
![](https://adapter.codelab.club/img/121f181ffb02f95cddf1501c47decd12.png)
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/)

static/video_config.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@
2424
}
2525
],
2626
"横版视频": [
27+
{
28+
"src": "https://adapter.codelab.club/video/12d30ae7cb52dcb0e894d7c9371da8.MP4",
29+
"title": "将Python提升到Smalltalk-like沉浸式编程环境",
30+
"id": "3",
31+
"tags": [],
32+
"weight": ""
33+
},
2734
{
2835
"src": "https://adapter.codelab.club/video/1603782783858008.mp4",
2936
"title": "浏览器里的 Smalltalk & Scratch & CodeLab Adapter",
@@ -45,6 +52,13 @@
4552
"tags": ["物联网"],
4653
"weight": ""
4754
},
55+
{
56+
"src": "https://adapter.codelab.club/video/1604400289579774.mp4",
57+
"title": "OSC 转 midi",
58+
"id": "3",
59+
"tags": [],
60+
"weight": ""
61+
},
4862
{
4963
"src": "https://adapter.codelab.club/video/1603105233433018.mp4",
5064
"title": "接入 OSC 协议(手写板)",

0 commit comments

Comments
 (0)