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

推荐订阅源

博客园 - 聂微东
Forbes - Security
Forbes - Security
IT之家
IT之家
P
Privacy International News Feed
宝玉的分享
宝玉的分享
小众软件
小众软件
Google DeepMind News
Google DeepMind News
美团技术团队
G
GRAHAM CLULEY
T
Tor Project blog
Recorded Future
Recorded Future
I
Intezer
C
Cyber Attacks, Cyber Crime and Cyber Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Hacker News
The Hacker News
Hugging Face - Blog
Hugging Face - Blog
A
About on SuperTechFans
Scott Helme
Scott Helme
WordPress大学
WordPress大学
F
Full Disclosure
D
Docker
G
Google Developers Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Cyberwarzone
Cyberwarzone
The Last Watchdog
The Last Watchdog
V
V2EX
www.infosecurity-magazine.com
www.infosecurity-magazine.com
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Security Latest
Security Latest
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recent Announcements
Recent Announcements
P
Palo Alto Networks Blog
L
LINUX DO - 热门话题
V
Visual Studio Blog
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
博客园 - 叶小钗
N
Netflix TechBlog - Medium
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
腾讯CDC
H
Heimdal Security Blog
博客园 - 【当耐特】
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
S
Securelist
Vercel News
Vercel News
J
Java Code Geeks

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观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开发笔记 创业二三事
Snap! 使用笔记: 动态添加 Snap! 造型
种瓜 · 2024-01-16 · via 夜行人

文章目录

前言

由于 Snap! 出色的可理解性和强大的灵活性/可扩展性, 我们的合作伙伴决定在 Snap! 投入资源。

DynaLab 正在为合作伙伴英荔构建增强版的 Snap! , 我们将 Scratch 社区最强大的一些插件移植到了 Snap! , 同时也为 Snap! 设计了一些强大的 primitives:

  • BLE primitives
  • websocket primitives
  • EIM primitives

此外, 我们还为 Snap! 设计了全新的物理引擎:

Snap! 平台本身也在快速发展, 不久将推出 Snap! 10 , 它的可理解性和可扩展性将有进一步的飞跃。 用户可以 “Blocks all the way”, 你可以理解并修改最基础的积木:

Jens(Snap! 创始人) 为 Snap! 构建了强大的 Hyperblocks, 它将提供类似 numpy 的能力(和 numpy 一样, 也受到 APL 的启发), 这将有助于提升神经网络教学的可理解性。

Snap! 拥有一流的数据结构(list), 也许是所有图形化语言中最优秀的, 它不仅有出色可理解性(非常适合用于教学复杂的算法), 而且具有出色的性能, 足以在浏览器页面处理超过 400 万的数据:


说回正题, 作为合作的一部分, 我们的合作伙伴希望基于 Snap! 实现 Future Park 那样的交互项目。

思路

要想基于 Snap! 实现上图中的交互项目, 需要完成以下几个工作:

  • 接入激光雷达用于互动
  • 允许用户绘制的图像动态地进入舞台
  • 为这些造型预定义行为(诸如被用户碰到就逃跑)

由于我们在 Snap! 里完成了 CodeLab Adapter 插件(EIM primitives), 因此, 激光雷达的所有功能都可以在 Snap! 里实现, 没有写一行 js 代码。 这使得它支持用户继续扩展它。

后两项工作正是本文的主题: 动态添加 Snap! 造型, 并提供预定义行为。

在个人计算环境中编程的一项出色体验是, 在用户环境里可以完成几乎所有的工作(包括开发工作), 不需要进入系统"下一层"。 这意味着 (a) 用户具有和开发者一样多的能力/权力, (b) 用户可以利用先前学到的技能做新的事情。

很自然地, 我们希望尽可能在 Snap! 完成绝大多数工作, 逼不得已, 才引入尽可能少的 primitive。 在整个项目实施过程中, 我们最终只引入了一个 primitive, 用于将 base64 字符串(png 或 svg)转化为 Snap! 内部 costume 对象 。

Future Park 体验的一部分是用户拿着真实的彩笔给角色涂颜色, 然后角色被 “投放” 到虚拟舞台上, 栩栩如生地活动起来.

为了将用户绘制的角色 “投放” 到舞台上, 需要进行以下工作:

  1. 在纸张上沿着图案边缘 “抽取” 出角色, 可以使用 opencv 边缘检测之类的算法来做。
    • 考虑到 Python 生态大量的视觉处理库, 使用 Python 来做比较省力
    • 随着 Snap! 社区对神经网络感兴趣, 估计 Snap! 也会有原生的视觉处理能力
  2. 将抽取的图案编码后传输到 Snap! , 可以使用 base64 来编码数据, 使用 MQTT 来传输数据
  3. 在 Snap! 中将接收到的 base64 数据转化为 costume

第 2 项工作的相关 Python 代码: future-park-client.py

第 3 项工作相关的 Snap 示例: future-park-demo.xml 。 示例中还包含了一个简单的模拟程序, 用于模拟Python客户端发送 base64 图像数据, 我喜欢尽可能地在 Snap! 这样具有 Smalltalk 特质的编程环境里工作, 它要比在 Python 中工作愉快很多。

预定义行为

前边提到:

为这些造型预定义行为(诸如被用户碰到就逃跑)

我们使用 “克隆” 来做这件事。

我们为每个精灵(sprite)预定义它的行为, 每当这个角色的造型传入系统的时候, 就根据传入的数据, 启动一个克隆体, 克隆体穿上传入的造型。克隆体的行为和它所属的精灵(sprite)是一样的。

这可以类比面向对象编程,我们在类(Class)里预定义了行为(在 sprite 里编写行为代码), 不同的初始化参数进行实例化(在Snap!中是创建克隆体)。

克隆是一个很大的话题, Snap! 的克隆改进自 Scratch, 易用性和一致性都更好。Scratch 的克隆资料大多适用于 Snap!

参考