惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News and Events Feed by Topic
N
News | PayPal Newsroom
SecWiki News
SecWiki News
P
Privacy International News Feed
T
Troy Hunt's Blog
Attack and Defense Labs
Attack and Defense Labs
N
News and Events Feed by Topic
L
LINUX DO - 热门话题
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Security Latest
Security Latest
AWS News Blog
AWS News Blog
S
Secure Thoughts
W
WeLiveSecurity
H
Heimdal Security Blog
T
Threat Research - Cisco Blogs
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Security @ Cisco Blogs
G
GRAHAM CLULEY
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
S
Security Affairs
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google Online Security Blog
Google Online Security Blog
Cisco Talos Blog
Cisco Talos Blog
雷峰网
雷峰网
Cloudbric
Cloudbric
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
Hacker News: Ask HN
Hacker News: Ask HN
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google DeepMind News
Google DeepMind News
Vercel News
Vercel News
云风的 BLOG
云风的 BLOG
Latest news
Latest news
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
D
Docker
Recent Announcements
Recent Announcements
博客园 - 【当耐特】
H
Help Net Security
博客园 - 司徒正美
TaoSecurity Blog
TaoSecurity Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Check Point Blog
博客园 - 叶小钗

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
Python与Scratch的双向通信
种瓜 · 2020-05-03 · via 夜行人

文章目录

说明

这是之前的文章,更新以匹配 CodeLab Adapter 3.0

近期我们在CodeLab Adapter制作了不少有趣的案例.得益于我们最近构建的json extension,我们可以让Python与Scratch3.0之间传递任意复杂的数据结构。如此一来,我们就可以将任意的Python程序接入Scratch3.0中。

以下是摘自CodeLab Adapter gallery页面的一些有趣的案例:

人脸地标: 在Python中使用dlib采集我的脸部地标,之后将这些数据完整地传给Scratch,接着在Scratch中解析这些数据,将其用于绘图,在Scratch中实时绘制出我的脸部特征点。当然我们也可以用于任何其他用途。这个策略是完全通用的,意味着可以将Python构建的任意AI项目积木化。当然这个过程有些细节需要注意,诸如numpy描述的矩阵得先转化为Python数据结构,如果你对此感兴趣,我们可以邮件里细说:)

不喜欢微信的聊天界面?没关系,我们在Scratch中自己new一个。它真实可用,你可以用于与朋友聊天。当然你也可以通过组合积木将微信用于控制智能家居。

所有的这些都发生在Scratch中!

下边我们将以简单的例子,展示这种交互方式。

我们先来展示数据从Python流向Scratch。

我们希望将以下数据发布给Scratch:

1
2
3
4
{
    "hello": "world",
    "numbers": [1,2,3]
}

我们先来看看CodeLab Adapter extension插件应该怎么写

Python extensions

~/codelab_adapter/extensions目录下(linux/mac适用。windows用户可以点击菜单栏->扩展->打开扩展目录), 创建extension_test.py插件,内容如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import time
from codelab_adapter.core_extension import Extension

class DemoExtension(Extension):
    NODE_ID = "eim"
    def __init__(self):
        super().__init__()


    def run(self):
        # run 会被作为线程调用
        while self._running:
            message = self.message_template()
            message["payload"]["content"] = {"hello": "world","numbers": [1,2,3]}
            self.publish(message)
            time.sleep(1)
export = DemoExtension

Scratch

当extension_test插件在CodeLab Adapter中被加载后,在Scratch一侧,我们就可以利用EIM插件与Json插件 来取回我们从Python中发过来的消息。

scratch接收到{"hello": "world","numbers": [1,2,3]},它成为EIM receive message积木的内容。

我们可以使用Json积木来解析消息体。

以上两个例子展示了我们可以解析任意的json结构。值得注意的是,列表的下标从1开始(不是0),这是为了遵循Scratch社区对列表的操作风格(用户更容易理解)。

Scratch -> Python

接下来,我们将展示,从Scratch发往Python的消息。对大部分用户来说,发送字符串就够了。对于高级用户,他们可能希望传递更复杂的数据结构。当然没问题!

一个典型的用例是:前端使用颜色控件选择颜色,将RGB信息发往后端

1
2
3
4
5
{
    "R": 255,
    "G": 0,
    "B": 0
}

Scratch

我们在Scratch需要做的是

更理想的做法其实是在Scratch中制作一个新的extension,构建颜色选择器,这部分涉及前端的调整,官方还没放出教程,这种优化问题我们以后再讨论。如果你已经在EIM中构建好了这个积木,要迁移到新的extension UI上,是非常简单的。核心的通信过程并没有变化,我们已经为你都做好了。构建EIM的目的是给出一种通用的积木,你无需编写js代码,动态性在消息中,而不是固化在积木,这种特性,对开发和扩展极为有利。 在我们以后的microworldrealworld案例中,我们将演示这种架构将带来多么大的灵活性和可能性,我们认为Scratch从Smalltalk学到的重要东西,正是通过消息来解耦,并获得扩展能力,CodeLab Adapter将继续发挥这个原则。

你可能会问,如何将你定制的的EIM积木分发给用户?目前你可以下载下来,之后让用户用这个文件初始化项目便可。在以后,我们会允许你发布到云端,用户打开特定链接就行。

everything is a message

Python extensions

创建extension_test.py插件,内容如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from codelab_adapter.core_extension import Extension

class DemoExtension(Extension):
    NODE_ID = "eim"
    def __init__(self):
        super().__init__()

    def extension_message_handle(self, topic, payload):
        self.logger.info(f'eim message-> {payload}')
        payload["content"] = "ok"
        self.publish({"payload": payload})

    def run(self):
        while self._running:
            time.sleep(1)

export = DemoExtension

当extension_test插件在codelab_adapter中被加载后吗, 新开一个命令行运行tail -f ~/codelab_adapter/info.log | grep extension_test (mac/linux适用,windows用户参考windows用户),查看接收到的来自Scratch的消息:

至此演示完毕。

对了如果你希望在一个插件中双向传递数据,你需要多线程,可以参考我们的例子:extension_eim.py

注意

大多数情况下,你只需要发送和接受字符串就够了,这种风格与Scratch内置的广播极为相近。是典型的事件驱动风格。

这篇教程主要针对那些希望去拓展Scratch的人。当你需要将一些复杂的程序接入Scratch(例如接入AI或者接入微信,如我们制作的例子),它会对你有帮助。