|
| 1 | +--- |
| 2 | +title: 发布 CodeLab Adapter 3.5 |
| 3 | +date: 2020-08-14 |
| 4 | +author: CodeLab |
| 5 | +Slug: release-3-5 |
| 6 | +tags: ["CodeLab"] |
| 7 | +categories: ["CodeLab"] |
| 8 | +--- |
| 9 | + |
| 10 | +> 维也纳生物学家康拉德·洛伦茨发现,某种鹅会跟随蛋壳打碎时所遇到的第一个活动物体,仿佛那是它们的母亲,甚至在它们面对真正的母亲时,还是继续这样做。取代其父母亲的摹仿装置,仅仅由两块圆的像它们父母亲的头和身体的大致轮廓的硬纸板或金属片构成。“借助这样的摹仿装置,我们能使自己进入某些动物的生活场景。认识到这个世界的奇妙之处,对于一个头脑敏锐的人来说是一种动人的甚至惊心骇目的经验。这实在的奇迹般的、咄咄逼人的特点给人留下一种印象,在它面前,我们关于自然的一切旧观念和旧概念都必定土崩瓦解” -- 波普尔《猜想与反驳》 |
| 11 | +
|
| 12 | +3.5 包含以下更新。 |
| 13 | + |
| 14 | +<!--truncate--> |
| 15 | + |
| 16 | +# 重大更新 |
| 17 | + |
| 18 | +## 社区创作平台 |
| 19 | + |
| 20 | +> Projects, Passion, Peers, Play |
| 21 | +
|
| 22 | +3.5 中,将使用[CodeLab 社区](https://scratch.codelab.club) 的 [创作平台](https://scratch.codelab.club/projects/editor/)将作为 Scratch 入口,方便大家分享和保存项目。 |
| 23 | + |
| 24 | + |
| 25 | + |
| 26 | + |
| 27 | + |
| 28 | +在 Adapter UI 中点击即可进入社区创作平台,注册后可以在线保存和分享作品,记得不要把密钥分享出去哦 |
| 29 | + |
| 30 | + |
| 31 | + |
| 32 | +ps: 在近期,[旧的创作平台](http://scratch3v3.codelab.club/)依然可用。 |
| 33 | + |
| 34 | +## 让 CodeLab Adapter 摹仿 Scratch Link |
| 35 | + |
| 36 | +> 模仿是最大的致敬 |
| 37 | +
|
| 38 | +### Scratch Link UI |
| 39 | + |
| 40 | +Scratch 的 UI 界面有一些设计元素,让用户能够轻松地连接物理外设。 |
| 41 | + |
| 42 | +如果你曾使用 Scratch Link 将 microbit/乐高 接入 Scratch,一定知道我说的**轻松**是什么意思。 |
| 43 | + |
| 44 | + |
| 45 | + |
| 46 | +Scratch UI 为方便用户使用 Scratch Link 连接设备做了许多优秀设计, 从设备扫描 |
| 47 | + |
| 48 | + |
| 49 | + |
| 50 | +到设备发现 |
| 51 | + |
| 52 | + |
| 53 | + |
| 54 | +从连接设备: |
| 55 | + |
| 56 | + |
| 57 | + |
| 58 | +到断开连接/重连设备 |
| 59 | + |
| 60 | + |
| 61 | + |
| 62 | +帮助信息也有考虑: |
| 63 | + |
| 64 | + |
| 65 | + |
| 66 | +这些对于减少入门者掉眼泪很有帮助。 |
| 67 | + |
| 68 | +### 摹仿 Scratch Link |
| 69 | + |
| 70 | +通过让 CodeLab Adapter 摹仿 Scratch Link,我们可以重用 Scratch 里优秀的 UI 元素。 |
| 71 | + |
| 72 | +如果我们接纳 Alan Kay 的观点,从生物学视角看待软件系统,这种策略就很容易理解,正如引言里康拉德·洛伦茨的发现: 一切都是信号。 Alan Kay 将这个想法表述为 : |
| 73 | + |
| 74 | +> [The big idea is messaging](https://wiki.c2.com/?AlanKayOnMessaging) |
| 75 | +
|
| 76 | +CodeLab Adapter 的设计理念受此启发, 表述为: |
| 77 | + |
| 78 | +> Everything Is a Message (EIM) |
| 79 | +
|
| 80 | +关于 Scratch Link UI 的一些技术细节 我之前在[分析 scratch3.0 与 micro:bit 的通信](https://blog.just4fun.site/post/%E5%B0%91%E5%84%BF%E7%BC%96%E7%A8%8B/scratch3-microbit-analysis/)有谈及。 |
| 81 | + |
| 82 | +在 3.5 中,我们在 [usb microbit](https://adapter.codelab.club/extension_guide/microbit/) 和 [microbit radio](https://adapter.codelab.club/extension_guide/microbit_radio/)里实施了这个想法: |
| 83 | + |
| 84 | + |
| 85 | + |
| 86 | +未来我们会将其他硬件/软件连接方式也陆续迁移到这种连接方式中,以便降低入门操作门槛。 |
| 87 | + |
| 88 | +如果你对细节有更多兴趣,其中一个插件的源码已经公开在[scratch3_usb_microbit](https://github.com/CodeLabClub/scratch3_usb_microbit), 参考这个源码,大家可以以这种方式接入任何开放硬件。 |
| 89 | + |
| 90 | +--- |
| 91 | + |
| 92 | +此外, 值得一提的是,除了兼容 Scratch Link UI ,我们也将继续保留 CodeLab Scratch 可编程的接入方式: |
| 93 | + |
| 94 | + |
| 95 | + |
| 96 | +这种想法的核心是把"连接"能力也看作积木,这样做的好处是所有功能都 **平坦/透明** 地交给用户,让他们以[一致的方式](https://blog.just4fun.site/post/%E7%BC%96%E7%A8%8B/design-principles-behind-smalltalk/)思考。 |
| 97 | + |
| 98 | +这两种方式将并存,大家可以任选一种连接来设备。新手用户建议使用 Scratch UI 的连接方式。 |
| 99 | + |
| 100 | +## 易用性 |
| 101 | + |
| 102 | +这个版本对易用性的提升主要围绕**减少困惑**。 |
| 103 | + |
| 104 | +### 不一致的菜单按钮 |
| 105 | + |
| 106 | +有不少使用者提到 CodeLab Adapter 的 WebUI 的菜单栏令人困惑: |
| 107 | + |
| 108 | +> 为什么有的按钮要点击文字,而有的按钮只要点到按钮框就行 |
| 109 | +
|
| 110 | + |
| 111 | + |
| 112 | +原因是之前我们把超链接(需要点到文字)和按钮做了不同的处理,但在 UI 上却没有区分它们,这令人困惑。目前我们将两者都处理为按钮,只需要**点到按钮框就行** |
| 113 | + |
| 114 | +### 加载提示 |
| 115 | + |
| 116 | +在有些电脑上 Web UI 打开后,服务进程还没有完全启动完成,看起来是断开状态,像软件故障,目前我们添加了提示信息。 |
| 117 | + |
| 118 | +### 启动速度缓慢 |
| 119 | + |
| 120 | +> 过早优化是万恶之源 -- Donald Knuth《计算机编程艺术》 |
| 121 | +
|
| 122 | +许多用户提到过这个问题,我们目前已经开始重视这个问题。我们将其视为优化问题。在 3.5 中添加了 app 运行时间检测,为每个关键的启动阶段都打上了时间戳,可以在 info.log 里看到启动生命周期。有了这些数据后,我们将在接下来的版本中持续迭代优化。 |
| 123 | + |
| 124 | +启动时间慢的原因主要有两个: |
| 125 | + |
| 126 | +1. Pyinstaller 的机制决定的(Adapter 基于 Pyinstaller 打包) |
| 127 | +2. 内部服务的启动策略 |
| 128 | + |
| 129 | +两者都与架构有关,我们计划在分析清楚运行时数据之后,再做针对性优化。 |
| 130 | + |
| 131 | +## 新增插件 |
| 132 | + |
| 133 | +### Aqara |
| 134 | + |
| 135 | + |
| 136 | + |
| 137 | +上周末在 Aqara 新的办公室待了大半天,与 Aqara 开放平台工程师、CEO、几位董事以及其他的小伙伴碰了个面,一起讨论在 本月 18-19 号的 **Aqara Home 中国服务商大会**上 使用 CodeLab 创作平台做哪些有趣的演示,以及后续的合作可能: `Aqara(绿米)智能家居用户(尤其是孩子)可在 CodeLab 创作平台上对智能设备进行编程,让人们将智能家庭改造为魔法世界吧!` |
| 138 | + |
| 139 | +由于采用了云云对接,可以方便 C 端用户 0 成本上手使用它。 |
| 140 | + |
| 141 | +CodeLab Neverland 里使用了不少的 Aqara 设备,我们基于这些设备构建了许多好玩的实验: |
| 142 | + |
| 143 | +欢迎来到霍格沃茨: |
| 144 | + |
| 145 | +<video width="50%" src="https://adapter.codelab.club/video/wand.mp4" controls="controls"></video> |
| 146 | + |
| 147 | +在 Scratch 中构建控制房间里一切事物的 Siri: |
| 148 | + |
| 149 | +<video width="80%" src="https://adapter.codelab.club/video/1593328552202841.mp4" controls="controls"></video> |
| 150 | + |
| 151 | +下班打个响指关闭所有电灯 |
| 152 | + |
| 153 | +<video width="80%" src="https://adapter.codelab.club/video/turnofflight_byfinger.mp4" controls="controls"></video> |
| 154 | + |
| 155 | +使用魔杖打开窗帘: |
| 156 | + |
| 157 | +<video width="80%" src="https://adapter.codelab.club/video/1576905337206766.mp4" controls="controls"></video> |
| 158 | + |
| 159 | +训练一个 AI 管家,它了解你的生活习惯,当你打开书时,自动为你把书房的灯打开;当你合上书思考时,为你关闭电灯,让你沉浸在黑暗中思考: |
| 160 | + |
| 161 | +<video width="80%" src="https://adapter.codelab.club/video/读书与思考.mp4" controls="controls"></video> |
| 162 | + |
| 163 | +更多有趣案例参考:[gallery](https://adapter.codelab.club/user_guide/gallery/) |
| 164 | + |
| 165 | +### 使用方式 |
| 166 | + |
| 167 | + |
| 168 | + |
| 169 | +#### 获取 token |
| 170 | + |
| 171 | +点击`打开绿米授权`积木,将打开登陆页面,使用 Aqara 账号登陆后,将获得一个 token。 |
| 172 | + |
| 173 | +#### 连接到云 |
| 174 | + |
| 175 | +之后将 token 复制到**连接**积木里, 运行它即可。 |
| 176 | + |
| 177 | + |
| 178 | + |
| 179 | +#### hello world |
| 180 | + |
| 181 | +构建一个入门程序: 当小猫被点击时,将灯泡打开 |
| 182 | + |
| 183 | + |
| 184 | + |
| 185 | +### Aqara_scene |
| 186 | + |
| 187 | +Aqara_scene 插件主要面向开发者(诸如 Aqara 开放平台的工程师)(可在插件市场下载), 它的目标是展示 CodeLab Adapter 插件系统的灵活性。 |
| 188 | + |
| 189 | +源码在这里:[extension_Aqara_scene](https://github.com/CodeLabClub/codelab_adapter_extensions/blob/master/extensions_v3/extension_Aqara_scene.py), 这儿展示的是如何基于 CodeLab Adapter 的插件机制,轻松将开放平台 API 连接到 Scratch 中。 |
| 190 | + |
| 191 | +附上[Scratch demo](https://scratch3v3.codelab.club/?sb3url=https://adapter.codelab.club/sb3/Scratch-Aqara-scene.sb3) |
| 192 | + |
| 193 | +### 聊天机器人 |
| 194 | + |
| 195 | +> 当我沉默的时候,我觉得很充实,当我开口说话的时候就感到了空虚 -- 鲁迅《野草》 |
| 196 | +
|
| 197 | +我们将聊天机器人**从图灵机器人替换为腾讯闲聊**。 |
| 198 | + |
| 199 | +[聊天机器人](https://adapter.codelab.club/Scratch_Projects/%E8%81%8A%E5%A4%A9%E6%9C%BA%E5%99%A8%E4%BA%BA/) 是 [EIM Monitor](https://adapter.codelab.club/extension_guide/eim_monitor/)的一个用例,大家可以根据文档操作,使用 Python 将任何聊天机器人 api 接入到 Scratch 中。 |
| 200 | + |
| 201 | +这个例子很好的展示了我们在 Python 入门教育的思路: 让 Scratch 和 Python 彼此增强,一开始就去做一些好玩的东西(real playing). CodeLab 近期将开始构建 Python 入门教程,依然会沿袭《Mindstorms》的理念。 |
| 202 | + |
| 203 | +### [GameShell](https://adapter.codelab.club/extension_guide/GameShell/) |
| 204 | + |
| 205 | +> 夏日黄昏 西瓜电扇 游戏机 |
| 206 | +
|
| 207 | +觊觎 [GameShell](https://www.clockworkpi.com/) 很久, 身边许多 geek 朋友也都被它种草。 很开心收到[clockworkpi 团队(拥有惊人创意和热情的团队)](https://forum.clockworkpi.com/t/almost-every-thing-you-want-to-know-about-clockwork-gameshell/4350)赠送的 GameShell 设备。 |
| 208 | + |
| 209 | +这是昨天收到的 GameShell 实物: |
| 210 | + |
| 211 | + |
| 212 | + |
| 213 | +CodeLab 即刻切换到了游戏机厅模式: |
| 214 | + |
| 215 | + |
| 216 | + |
| 217 | +完美运行 CodeLab Adapter : |
| 218 | + |
| 219 | + |
| 220 | + |
| 221 | +将 GameShell 接入 CodeLab Adapter 之后, 我们将其用作 CodeLab 可编程空间的控制手柄: |
| 222 | + |
| 223 | +<video width="80%" src="https://adapter.codelab.club/video/1597283986388211.mp4" controls="controls"></video> |
| 224 | + |
| 225 | +<video width="80%" src="https://adapter.codelab.club/video/1597283973481982.mp4" controls="controls"></video> |
| 226 | + |
| 227 | +在 GameShell 运行一个自定义 APP: [gameshell_node](https://github.com/wwj718/gameshell_node) |
| 228 | + |
| 229 | +按下 `Start`,允许新的 client 连接,发现与连接机制基于 [NetworkZero](https://adapter.codelab.club/extension_guide/NetworkZero/)。消息传递机制基于: [外部系统 -> Scratch](https://adapter.codelab.club/user_guide/%E4%B8%8E%E5%A4%96%E9%83%A8%E7%B3%BB%E7%BB%9F%E9%80%9A%E4%BF%A1/#-scratch) |
| 230 | + |
| 231 | +之后在 Scratch 里与之交互: [Scratch GameShell](https://scratch3v3.codelab.club/?sb3url=https://adapter.codelab.club/sb3/Scratch-gameshell-key.sb3) |
| 232 | + |
| 233 | +## 插件增强 |
| 234 | + |
| 235 | +- 为 usb microbit 添加 Scratch Link 风格的连接机制 |
| 236 | +- 为 radio microbit 添加 Scratch Link 风格的连接机制 |
| 237 | + |
| 238 | +## bug 修复 |
| 239 | + |
| 240 | +> 或然的东西(eikos)不是不可避免地会出现,而只是在大多数场合下会出现的东西 -- 波普尔《猜想与反驳》 |
| 241 | +
|
| 242 | +- 解决多个 microbit 共存的问题 |
| 243 | +- 为 NetworkZero 发送信息添加超时机制 |
| 244 | +- 修复 extension_Yanshee put_motions 参数错误 |
| 245 | + |
| 246 | +# 开始使用 |
| 247 | + |
| 248 | +[下载最新 Adapter](https://adapter.codelab.club/user_guide/install/)。 |
| 249 | + |
| 250 | +# 参考 |
| 251 | + |
| 252 | +- [分析 scratch3.0 与 micro:bit 的通信](https://blog.just4fun.site/post/%E5%B0%91%E5%84%BF%E7%BC%96%E7%A8%8B/scratch3-microbit-analysis/) |
0 commit comments