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

推荐订阅源

Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Security Latest
Security Latest
P
Privacy & Cybersecurity Law Blog
V
Vulnerabilities – Threatpost
NISL@THU
NISL@THU
Spread Privacy
Spread Privacy
Know Your Adversary
Know Your Adversary
K
Kaspersky official blog
T
Tor Project blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The Cloudflare Blog
Simon Willison's Weblog
Simon Willison's Weblog
雷峰网
雷峰网
I
Intezer
C
Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Latest news
Latest news
C
CERT Recently Published Vulnerability Notes
P
Privacy International News Feed
P
Proofpoint News Feed
F
Fortinet All Blogs
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
宝玉的分享
宝玉的分享
量子位
博客园 - 叶小钗
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Recent Announcements
Recent Announcements
D
Darknet – Hacking Tools, Hacker News & Cyber Security
aimingoo的专栏
aimingoo的专栏
A
Arctic Wolf
Martin Fowler
Martin Fowler
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
IT之家
IT之家
小众软件
小众软件
T
The Blog of Author Tim Ferriss
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
TaoSecurity Blog
TaoSecurity Blog
D
DataBreaches.Net
Webroot Blog
Webroot Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
美团技术团队
N
Netflix TechBlog - Medium
MyScale Blog
MyScale 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希望不只对Pythonista友好,也对Scratcher友好。

我们在上篇文章:Python与Scratch的双向通信向开发者介绍了一些拓展Scratch的技巧。方便Python和Scratch的互操作,开发者们可以利用它制作功能强大的插件。将AI、物联网或者任何你能想到的东西接入到Scratch。

本文则旨在阐述,如何用最简单的方式拓展Scratch3.0。无需了解CodeLab Adapter插件机制,也无需了解Scratch3.0的插件机制,只需要写一个Python函数,即可为scratch加入新功能。考虑到多数Scratcher对Python并不熟悉,让他们理解插件的模版代码,从继承一个类开始,接着理解线程机制,有些不近人情。本文将阐述Scratcher如何使用最少的Python代码来扩展他们自己的项目。

设计上的思考

编程风格层面

everything is a message

尽可能保持Scratch风格,尽量不改变大家的编程习惯/范式。

基于消息的事件驱动风格是scratch编程的典型风格,继承自smalltalk。第一代的scratch采用smalltalk的方言squeak构建,所以scratch从smalltalk中继承了很多设计原则,关于这部分的更多讨论可以参考我之前的文章:Scratch3.0自定义插件注意事项之令牌桶算法

scratch官方社区中,我们可以看到稍有规模的程序都会用到消息积木

上图显示的是scratch社区用户创作的最受欢迎的游戏之一:Bouncy Ninja 2, 程序之间的协同通过广播消息来完成。 利用消息实现了程序的解耦。

我们进一步观察,可以发现这个游戏使用了大量的消息:

Scratcher之所以依赖消息机制,其中的原因,我在可视化编程为何是个糟糕的主意中做过论述:

消息机制是Scratch的核心机制。消息是绝佳的解耦工具,如果你逛一逛Scratch社区,就可以看到人们构建了许多令人惊叹的项目。它们中的许多并不简单,消息是帮助他们克服复杂度的核心工具之一。这个特性继承自smalltalk的设计原则: 计算应该被视为可通过发送消息来统一调用的对象的内在功能。

所以在编程风格层面,希望scratcher在使用Python拓展程序功能时,觉得是顺滑的,不强行要求他们转化范式。

教育层面

下边说说教育层面的思考。

我们来讨论下目前这个领域,大家所关心的:如何从图形界面过渡/进阶到代码。

事实上,我不认为这种过渡是必须的。当然我也并不反对从图形界面过渡到代码。如果这种过渡是必要的,我希望它们是渐进的,而不是割裂的,否则就不叫过渡了。初学者熟悉scratch,也喜欢它,我知道大多数使用scratch的孩子,对它的好感大都胜过文本语言。你不必抛弃scratch,如果你需要一些更强大的功能,使用Python去扩展它,这个过程应该很愉快,你写了很少的Python代码,立马就能应用到你喜欢的Scratch项目上,你看到你逐渐能做更多有趣的事,你感到充满乐趣,所学的新知识,立马应用在你感兴趣的项目里。

我们反对割裂式的教学,学习者从scratch切换到Python,很长时间内只能通过print看到输出,没有生动的反馈,于是许多人便对阶段感到沮丧,踏上一条从入门到放弃的路。

学习的过程,有时的确会遇到一些困难,有些困难是固有的,或者如康德所说的它是先天的。另一些则是人为的,教育者或者基础设施建设者应该努力去清理那些人为的困难。

我不喜欢教育者们有时候提到的学习的过程,痛苦必不可少,所以你应当忍受这种宿命论的观点,有时候它只是我们懒惰和无能的借口。

文档

用例

留个课后作业。

利用这个插件,配合micro:bit,可以很容易实现树莓派守护者!: 你正在看《多啦A梦》,突然有人闯入了你的房间,你的屏幕自动切换为正在阅读论文。

参考