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

推荐订阅源

爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
GRAHAM CLULEY
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V2EX - 技术
V2EX - 技术
The Last Watchdog
The Last Watchdog
S
Secure Thoughts
Webroot Blog
Webroot Blog
PCI Perspectives
PCI Perspectives
L
LINUX DO - 最新话题
Hacker News: Ask HN
Hacker News: Ask HN
N
News and Events Feed by Topic
H
Heimdal Security Blog
H
Help Net Security
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
F
Full Disclosure
小众软件
小众软件
S
Securelist
罗磊的独立博客
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cisco Blogs
云风的 BLOG
云风的 BLOG
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
S
Schneier on Security
D
DataBreaches.Net
M
MIT News - Artificial intelligence
V
Vulnerabilities – Threatpost
N
News and Events Feed by Topic
有赞技术团队
有赞技术团队
F
Fortinet All Blogs
T
Tenable Blog
The Register - Security
The Register - Security
C
Check Point Blog
AWS News Blog
AWS News Blog
Cloudbric
Cloudbric
C
CXSECURITY Database RSS Feed - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google Online Security Blog
Google Online Security Blog
博客园 - 叶小钗
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 司徒正美

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观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开发笔记 创业二三事
codelab-adapter的虫洞(wormhole)
种瓜 · 2019-03-01 · via 夜行人

相隔遥远的两个巫师同时讲一句相同的魔法咒语,这导致了他们之间建立了某种神秘的联系。接着一个巫师把魔法书扔进虫洞,书就从另一个巫师身边的虫洞掉了出来。

上上周去了趟杭州/南京,与几个团队碰面交流。期间聊到许多有趣的技术话题,大家对codelab-adapter的架构设计、合作计划以及未来目标都很感兴趣。

其中聊到的一个话题让我印象深刻: codelab-adapter计划对classroom/club中的协作者提供怎样的支持?

设想这样一种场景,一群用户聚集在一个线下空间里,线下空间可能是一个线下俱乐部(如coderdojo)、一个线下培训机构、一个班级、以及我们的codelab neverland。他们接入同一个局域网中。学习者们身处同样的物理空间,我们是否考虑将他们所处的虚拟空间和创作平台中也连接在一起,支持更多的协作和交互。

Scratch本身有考虑人的连接,出于这个考虑,他们构建了线上社区, Mitchel Resnick(Scratch之父)宣称相比于Scratch这个创作工具,Scratch社区是他们更重要的创造。

但目前Scratch社区并不支持强连接,诸如构建一个聊天工具或联网游戏。

如果你是《终身幼儿园》的忠实粉丝,你会发现为classroom/club提供强连接是践行4P理念(Projects, Passion, Peers, Play)的绝佳机会。

从杭州/南京回来之后,一直在想这件事。

思考

将局域网内的机器进行联机不是什么难事。利用局域网内的ip地址或hostname,建立socket连接,就可以连接局域网内的机器。

这只是技术上可行,教育层面呢?拿ip地址来说,当我们告诉学习者如何查看ip地址时,Ta需要了解ip地址这个概念吗?还是只是做一个机械操作(ifconfig/ipconfig)?又或者我们应该在教学工具中内置查看ip地址功能呢?

艾伦·凯上周在Quora上回答了一个问题 为何艾伦·凯认为入门编程应当使用Squeak/Pharo,他说:

服务于教学和学习的用户界面有许多需要考虑的因素。如果你只想选择一个重点来考虑,那应该是"减少认知负担"。

它需要处于试图学习的人的心理空间中。

艾伦·凯对编程教育的观点极大影响着CodeLab,我们对codelab-adapter的设计以及积木的设计都深受他的影响。

我们希望"减少认知负担"。如果我们希望构建一种积木,允许实时在局域网内的Scratch中传递消息。它最好是类似broadcaskwhen I receive这类的积木, 它与Scratch的事件积木以及CodeLab的EIM积木保持完全相同的结构。这样用户无需学习新概念,只需要利用传递消息就能进行联网创作。

我们想构建这样的积木:

于是,我们想到"虫洞"的概念。magic-wormhole是我很喜欢的一个开源项目,它的灵感来自:

相隔遥远的两个巫师同时讲一句相同的魔法咒语,这导致了他们之间建立了某种神秘的联系。接着一个巫师把魔法书扔进虫洞,书就从另一个巫师身边的虫洞掉了出来。

这个概念如此简洁。巫师只是说了相同的咒语,连接就自动建立了。虫洞是声明式的!上帝说要有光,于是就有了光,看起来也类似申明式编程。

我们将"虫洞"内置到codelab-adapter中,codelab-adapter通过一个"咒语"发现彼此,之后自动建立连接,消息在adapter内置的虫洞中传递,用户只要收取虫洞里的消息即可。

一旦有了目标,github里总有项目能节约你90%的编程工作:)

我们选择zeromq来传递消息。zeromq有着比socket优美得多的设计。云风在他的博客文章ZeroMQ 的模式里写道:

任何分布式,并行的需求,都可以用这三种模型组合起来解决问题。ZeroMQ 只专注和解决了消息通讯这一基本问题,干的非常漂亮。

任何消息通讯相关的问题,ZeroMQ都是非常好的选择。

还有一件事需要考虑,传递消息之前,需要发现局域网中的各个codelab-adapter的ip,可以采用UDP – Broadcast来做。

理念

Bret Victor在他的出色演讲《Inventing on Principle》里说

If there is something in the world you feel the wrong and you have a vision for what a better world could be, you can find your guiding principle and you can fight for a cause.

codelab-adapter的guiding principle是

everything is a message(EIM)

灵感来自艾伦凯设计smalltalk时采用的原则:

Everything is an object, and objects communicate only by sending each other messages.

smalltalk的一致性,允许所有的语法(概念)在一张明信片中写完,一个小孩在Ta入门的时候学会这些概念,可以用于创造小玩具。待Ta长大后,如果雄心勃勃想构建一个操作系统,需要的所有东西,都在Ta小时候看过的那张明信片上。

wormhole的设计依然满足EIM原则,codelab-adapter的架构试图保持一致性。我们之所以重视一致性,原因之一是计划等到codelab-adapter开源之后,用它的源码本身来教学编程。我们希望一致性带来简单和清晰,让一个3年级的孩子可以完全理解codelab-adapter。并能轻松去改造和拓展它。

发布计划

codelab-adapter的下个版本将内置虫洞(wormhole)功能。

使用场景

虫洞功能将支持很多有趣的场景。

它尤其适合classroom/club/线下活动 场景。正如我们前头提到的: 一群人聚集在一个物理空间里,他们接入同样的局域网,虫洞就发生作用。

学习者

利用虫洞功能,学习者可以轻松为他的小区或学校创建聊天程序,当然也可以用于在Scratch中制作网络游戏。

利用codelab-adapter连接硬件的能力,他们甚至可以一起构建一个"机器军团"。

教师

在俱乐部/教室场景中,教师可以利用虫洞功能管理局域网中的设备,甚至构建教学引导程序。就像在机房中教室机与学生机的互动。只要基于虫洞构建新的插件来支持这些场景即可。

虫洞本身也可以用于教学计算机网络。

开发者

everything is a message(EIM)。 虫洞由消息实现,通过处理收发消息,开发者可以任意改造它!

Scratch社区

我们来展示一个例子:

右边的“螃蟹”由树莓派中的adapter驱动(用户A),而左边的小猫则由电脑中的adapter驱动(用户B)。任何一个设备上的操作将传递到局域中的所有adapter。由于scratch和adapter在设计上都受smalltalk的影响,采纳everything is a message的设计原则,所以MIT Scratch社区里3500多万用户创建的超过1亿的项目将直接得到虫洞功能,在局域网内随意连接!延迟在毫秒级。足以构建实时游戏。

because we can

如果我们是谢耳朵,我们就要基于虫洞去制作视频聊天工具。复现《生活大爆炸》里的著名桥段,

“But why?"(面对面在局域网内,为何需要视频聊天)

“because we can”(基于ZeroMQ的虫洞每秒钟能处理2000万条消息啊)

参考