Skip to content

Commit e5c46fc

Browse files
committed
update
1 parent e34318d commit e5c46fc

File tree

5 files changed

+243
-2
lines changed

5 files changed

+243
-2
lines changed

blog/adapter-4.md

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
---
2+
title: "CodeLab Adapter 4.0: 关注协作"
3+
date: 2020-12-28
4+
tags: ["CodeLab"]
5+
Slug: adapter-4
6+
---
7+
8+
9+
![](https://adapter.codelab.club/img/The_Tower_of_Babel.jpg)
10+
11+
> 让我们下去,在那里打乱他们的语言,让他们不能知晓别人的意思。 --《创世记》
12+
13+
由于近期的备案问题,导致CodeLab域名无法访问。 我们提前发布Adapter 4.0,以便与我们的临时IP访问方案相协调。
14+
15+
<!--truncate-->
16+
17+
18+
# 引入 Linda,让协作变得简单
19+
CodeLab Adapter 4.0 引入了 Linda,这个版本重点关注 **协作**。具体而言,关注 编程/表达/创作 场景中,潜在的各种协作需求:
20+
21+
* 不同编程环境之间的协作
22+
* 图形化编程环境(如Scratch)与文本编程环境(如Python/Jupyter)的协作
23+
* 多个 Scratch 舞台之间的协作
24+
* 多个 Python 程序之间的协作
25+
* 专业软件(Unreal Engine/Unity/Logic Pro X/vvvv/Sonic Pi)与用户编程环境之间的协作
26+
* 团队成员分别处于异构系统时的协作
27+
* 不同设备之间的协作
28+
* AI/IoT/开源硬件...不同问题域之间的协作
29+
* 跨主机/网络环境下的协作
30+
* 构建可编程空间(Neverland)交互场景所涉及的复杂协作
31+
* ...
32+
33+
由于编程入门者是 CodeLab Adapter 4.0 的典型用户,我们希望协作能够 **足够简单**,不至于困扰入门者, 这是我们选择 Linda 的主要理由之一,使用这种统一/简单/跨语言的并发模型,新手可以将注意力集中在自己的想法以及与他人的沟通上,而不是疲于应对并发系统本身的复杂性。
34+
35+
由于大多数有实际意义的编程项目都和多任务以及多任务之间的协作有关,所以 **个人计算** 的先驱和后继者们都关注这个话题,作为 **个人计算** 精神的后继者: Scratch 在这方面就做的很好,Scratch 用户在一开始就能轻松处理多个角色之间的协作,相比之下,主流编程语言中处理并发任务很困难,即便对于专业程序员也很困难。
36+
37+
我们希望沿袭 Scratch 简易的协作能力,但拓宽它的能力范围。
38+
39+
## 如何使用 Linda
40+
CodeLab Adapter内置的Linda采用 C/S 架构。 Linda Server 内置在 Adapter 4.0的核心中,我们提供以下Client与之交互。
41+
42+
- [Python Client](https://adapter.codelab.club/user_guide/Linda/#python-client)
43+
- [Scratch Client](https://adapter.codelab.club/user_guide/Linda/#scratch-client)
44+
- [REST API](https://adapter.codelab.club/user_guide/Linda/#rest-api)
45+
- [cli (命令行客户端)](https://adapter.codelab.club/user_guide/Linda/#cli)
46+
- [JavaScript Client(开发者)](https://adapter.codelab.club/user_guide/Linda/#javascript-client)
47+
- [mush-lang](https://adapter.codelab.club/user_guide/Linda/#mush-lang): 基于Linda构建的一门LISP风格的玩具语言,用于探索Linda的可能性
48+
- Lively Client
49+
50+
Linda 最有趣的一个地方是,所有客户端(跨语言、跨系统、跨网络)都能够互操作,语义由参与者自己"协调", 所以 Alan Kay 将 Linda 称为"协调语言"。
51+
52+
### 基本操作(operate)
53+
54+
#### 核心操作
55+
* out: 生成一个元组(tuple) 到 元组空间(tuple space)
56+
* in: 在tuple space中匹配元组,如果匹配到则消耗它, 如果未匹配则一直等待
57+
* inp: in的非阻塞版本。 如果匹配到则消耗它, 如果未匹配则返回空元组
58+
* rd: read only, 在tuple space中匹配元组,如果匹配到则返回它(不移除), 如果未匹配则一直等待
59+
* rdp: 非阻塞版本的 rd
60+
* eval: 暂不考虑实现
61+
62+
#### 辅助操作
63+
不在 linda 的原始论文中,是我自己的扩展
64+
65+
* dump: 获取元组空间所有元组
66+
* status: 获取元组空间状态
67+
* reboot: 重置元组空间
68+
69+
更多使用细节参考 [Adapter Linda 文档](https://adapter.codelab.club/user_guide/Linda/)
70+
71+
## FAQ
72+
### Linda 与 EIM的关系是什么?
73+
在 Adapter 内部, Linda基于 EIM 实现。
74+
75+
Linda 与 EIM 将长期共存,一个 Adapter Node,即是Linda client,也是EIM client,它们各有所擅。长期来看,我们更偏好 Linda。
76+
77+
# Demo
78+
79+
## 多个 Scratch 角色 的 实时同步
80+
81+
<video width="80%" src="https://adapter.codelab.club/video/1608041327753652.mp4" controls="controls"></video>
82+
83+
在 Python 的例子中,我们甚至在Scratch里构建了 Server!
84+
85+
两个Scratch角色同步的代码如下:
86+
87+
* [linda-demo1](http://118.31.62.99:9001/?sb3url=https://adapter.codelab.club/sb3/linda-demo1.sb3)
88+
* [linda-demo2](http://118.31.62.99:9001/?sb3url=https://adapter.codelab.club/sb3/linda-demo2.sb3)
89+
90+
91+
python 与 Scratch 同步的代码如下:
92+
93+
* [linda-demo1](http://118.31.62.99:9001/?sb3url=https://adapter.codelab.club/sb3/linda-demo1.sb3)
94+
95+
Python核心部分代码为:
96+
97+
```python
98+
node.linda_out(["request", "loudness", "xxx"])
99+
node.linda_in(["response", "loudness", "*"])
100+
```
101+
102+
103+
## Jupyter 与 Scratch 的互操作
104+
<video width="80%" src="https://adapter.codelab.club/video/1608095793244042.mp4" controls="controls"></video>
105+
106+
跨语言对象之间的互操作
107+
108+
用到了 Jupyter notebook 里的 ipywidgets.
109+
110+
```python
111+
# 请使用 jupyter notebook,而不是jupyterlab
112+
from ipywidgets import interact, interactive, fixed, interact_manual
113+
from codelab_adapter_client import AdapterNode
114+
import time
115+
116+
class MyNode(AdapterNode):
117+
NODE_ID = "linda/jupyter"
118+
119+
def __init__(self):
120+
super().__init__()
121+
122+
node = MyNode()
123+
node.receive_loop_as_thread()
124+
125+
@interact(show=True, x=100, size=100)
126+
def f(show,x,size):
127+
node.linda_out(["%%x", x], wait=False) # f函数是非阻塞的回调函数,使用wait=False参数,使node.linda_out使非阻塞的,此时相当于流,记得使用 message tuple(见下文)
128+
node.linda_out(["%%show", show], wait=False)
129+
node.linda_out(["%%size", size], wait=False)
130+
return show,x,size
131+
```
132+
133+
# Linda 文档
134+
135+
[Linda 文档](https://adapter.codelab.club/user_guide/Linda/)
136+
137+
<!--
138+
# todo
139+
云端linda
140+
141+
商业授权
142+
143+
动态更新诸如证书。 下载到本地,下次更新,证书,云端变量
144+
-->
145+
146+
# 其他更新
147+
148+
其他重要更新包括:
149+
150+
* 修复与 token 有关的安全风险
151+
* 支持激光雷达,将普通地面变为交互式 Scratch 舞台
152+
153+
<video width="80%" src="https://adapter.codelab.club/video/1608804837247213.mp4" controls="controls"></video>
154+
155+
<video width="80%" src="https://adapter.codelab.club/video/1607594552142394.mp4" controls="controls"></video>
156+
157+
# Todo
158+
正在思考基于云端的 Linda,可能会用在教育之外的领域, 简化与协作有关的问题。
159+
160+
# 开始使用
161+
162+
[下载最新 Adapter](https://adapter.codelab.club/get_start/gs_install/?version=latest)
163+
164+
165+
# 参考
166+
- [在 CodeLab Adapter 中实现 Linda 并发模型](https://wwj718.github.io/post/%E7%BC%96%E7%A8%8B/adapter-linda/)
167+
- [Adapter Linda 文档](https://adapter.codelab.club/user_guide/Linda/)
168+
- [Linda: 比 Actor 更好的并发模型](https://wwj718.github.io/post/%E7%BC%96%E7%A8%8B/linda-intro/)
169+
- [[]Alan Kay 看待'对象'的几次观点转变](https://wwj718.github.io/post/%E7%BC%96%E7%A8%8B/alan-key-between-oo-fp/)
170+
- [建立在异步消息之上的同步指令: 分别在 JavaScript、Python、Squeak 上实现](https://wwj718.github.io/post/%E7%BC%96%E7%A8%8B/async-msg-sync-cmd/)
171+
- [[]Smalltalk 背后的设计原则](https://wwj718.github.io/post/%E7%BC%96%E7%A8%8B/design-principles-behind-smalltalk/)

blog/codelab-404.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
title: "CodeLab无法访问的解决方案"
3+
date: 2020-12-28
4+
tags: ["CodeLab"]
5+
Slug: codelab-404
6+
---
7+
8+
9+
大家好,根据 **相关法律法规** 要求,CodeLab需要更新备案信息,我们目前正在提交新的备案,需要大约为期2周的审核时间.
10+
11+
在此期间,与CodeLab域名(codelab.club)有关的项目都会受到影响。大家只能暂时通过IP访问。
12+
13+
以下是备用方案:
14+
15+
* CodeLab 主页:
16+
* https://codelabclub.github.io/
17+
* 国内: http://118.31.62.99:10000
18+
* CodeLab 社区: http://39.108.54.56:8000
19+
* CodeLab 论坛(还在调整中): http://39.108.54.56:9000
20+
* CodeLab Scratch-beta:
21+
* https://codelabclub.github.io/scratch-beta (需要与`Adapter>=4.2.0`)
22+
* 国内: https://118.31.62.99:9000 (需要`Adapter>=4.0.0`
23+
* 如果无法连接Adapter,请使用离线版本
24+
* CodeLab Adapter 文档:
25+
* https://codelabclub.github.io/codelab-adapter-docs/
26+
* 国内: http://118.31.62.99:7000
27+
28+
codelab-adapter由于解析到`127.0.0.1`, 目前不受影响。如果遇到问题,请访问 `https://127.0.0.1:12358` 。或者添加host: `127.0.0.1 codelab-adapter.codelab.club`

docusaurus.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ module.exports = {
2222
},
2323
links: [
2424
{
25-
href: 'https://scratch.codelab.club',
25+
href: 'https://create.codelab.club',
2626
label:'创作平台',
2727
position: 'left'
2828
},

src/pages/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ function Home() {
114114
<div className={clsx("container",styles.start)}>
115115
<p className={clsx(styles.subtitle1)}>让我们从这里开始</p>
116116
<p className={clsx(styles.subtitleNote)}>色彩、卡通、音乐、运动、交互全在此,由此进入动画故事、交互游戏、程序软件的幕后创作</p>
117-
<iframe className={styles.iframe} src="https://scratch3v3.codelab.club/?sb3url=https://scratch3-files.just4fun.site/Wake_me_up_now_3m.sb3"/>
117+
<iframe className={styles.iframe} src="https://scratch-beta.codelab.club/?sb3url=https://scratch3-files.just4fun.site/Wake_me_up_now_3m.sb3"/>
118118
<p className="text--center margin-top--lg">
119119
<a href="https://scratch.codelab.club/projects/editor/" target="_blank"><button className="button button--info margin-bottom--md">立即开始创作</button></a>
120120
<a href="https://scratch.codelab.club" target="_blank"><button className="button button--info margin-bottom--md">先去看看大家的作品</button></a>

static/video_config.json

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,48 @@
2424
}
2525
],
2626
"横版视频": [
27+
{
28+
"src": "https://adapter.codelab.club/video/1609339244644934.mp4",
29+
"title": "Neverland 2.0 原型--画个圈圈",
30+
"id": "3",
31+
"tags": ["Neverland2"],
32+
"weight": ""
33+
},
34+
{
35+
"src": "https://adapter.codelab.club/video/1609339245152003.mp4",
36+
"title": "Neverland 2.0 原型--德尔斐箴言",
37+
"id": "3",
38+
"tags": ["Neverland2"],
39+
"weight": ""
40+
},
41+
{
42+
"src": "https://adapter.codelab.club/video/1609340165766239.mp4",
43+
"title": "Neverland 2.0 原型--追光",
44+
"id": "3",
45+
"tags": ["Neverland2"],
46+
"weight": ""
47+
},
48+
{
49+
"src": "https://adapter.codelab.club/video/1609323186764794.mp4",
50+
"title": "Neverland 2.0 原型--玻璃碎片",
51+
"id": "3",
52+
"tags": ["Neverland2"],
53+
"weight": ""
54+
},
55+
{
56+
"src": "https://adapter.codelab.club/video/1609323190133251.mp4",
57+
"title": "Neverland 2.0 原型--墙面画笔",
58+
"id": "3",
59+
"tags": ["Neverland2"],
60+
"weight": ""
61+
},
62+
{
63+
"src": "https://adapter.codelab.club/video/1609173005021776.mp4",
64+
"title": "Neverland 2.0 原型--地面多点触控",
65+
"id": "3",
66+
"tags": ["Neverland2"],
67+
"weight": ""
68+
},
2769
{
2870
"src": "https://adapter.codelab.club/video/1608865673731432.mp4",
2971
"title": "MIDI 乐器",

0 commit comments

Comments
 (0)