Scratch增强计划
文章目录
There are many ways to live your life. That’s may be the most important thing you can realize in your life is that every aspect of your life is a choice…
You can choose to accept the world as it is but you don’t have to.
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.
So after the talk I’d like you to take a little time and think about what matters to you?what you believe in? what you might fight for? – Bret Victor《Inventing on Principle》
前言
上周六,我一直在看Bret Victor的博客,他的工作给我极大的震撼,几乎是叹为观止。
看了他的演讲和文章,夜里和朋友聊了很久,他让我们觉得自己生活在原始时代,刀耕火种,难以忍受。周日下午走街串巷,漫无目的的徒步,一直在想Bret Victor说的一些东西,下午的阳光很好,走在广州的老街道,树木盈抱,墙面斑驳,傍晚时候,一切看起来都像90年代,从Bret Victor的演讲回到现实,好像穿越到了过去,周围的一切都显得那么原始。
关于什么是好的编程环境,什么是好的创造工具,我从前对此一无所知,觉得目前手头的工具基本够用。Bret Victor使我相信,我完全不懂编程是什么。
Smalltalk
一直没有痛下决心将Smalltalk作为我的主要语言。此前玩了段时间squeak(Smalltalk的一个方言),在上边很轻松写出了scratch的原型,scratch的第一代就是用squeak写的,scratch与创造有关的核心设计似乎都来自squeak。正如scratch之父所言scratch的主要创造是社区。这是很中肯的描述。
之后又玩了段时间Etoys。
最近有一搭没一搭地使用Pharo ,Pharo是现代Smalltalk方言。
Bret Victor给了我最后一根稻草,让我确信切换到Smalltalk是极为重要的一件事,它是绝佳的创造工具。
New Scratch3.0 Virtual Machine
我准备在Pharo中实现Scratch3.0 Virtual Machine,把scratch重新带回Smalltalk。它既作为我驱动自己学习Pharo的项目,又作为探索scratch未来可能性的尝试。尽管最终可能实现出JavaScript版本(考虑到对用户友好),但正如Bret Victor所言,JavaScript和processing都不是好的语言,它并不适合用于探索。今天有许多公司,用JavaScript(Blockly)去重新抄一遍scratch,除了换一个UI,源代码更为草率,扩展性更糟之外,在编程和创造性这件事上,几乎没有任何改进(事实上基本都是倒退)。有那么多有意思的事情值得做,换一个皮肤的事,竟吸引了那么多公司动则千万的投入。
一旦在Pharo中实现了Scratch的解释器,我们就可以轻松使用Bret Victor的创造原则去增强它。
我希望让新的vm(Virtual Machine)能够解释运行sb3文件。sb3文件结构的设计是很优秀的,我在Scratch3技术分析之项目内部数据(第6篇)做了阐述。
副产品
在实现这个目标的途中可能会顺便得到一些有趣的副产品,有些可能是目前Scratch3.0的用户和开发者所关心的,我大致列一些,目前能想到的一些有趣副产品包括:
1.将scratch项目导出为本地应用
scratch社区的用户似乎一直有一个需求: 将scratch项目导出为本地应用(exe/app). 要做到这点,按目前scratch3.0的架构也能做到,诸如直接导出一个electron应用,不过这实在有点笨重。
新的解释器接受sb3文件作为输入,然后解释运行它,所以我们可以做得非常精简。
2.离线运行scratch3.0项目
Scratch3.0目前运行在浏览器中,总是需要GUI支持,如果导出的程序并不是视觉动画,例如程序用来将家庭自动化(我在这里展示了很多例子),我们能否让它离线运行,不用总开着浏览器,让它跑在云端,或跑在没有屏幕的树莓派上。
3.评估用户的计算思维(computational thinking)
做新的解释器过程中,我们需要深入到scratch程序的所有细节里,这就逼着我们做出类似静态分析器的东西,我们自然会理解用户用到的所有程序元素,我们可以据此评估他在程序中展现的计算思维(computational thinking)。评估的教育框架会采用Scratch之父(Mitchel Resnick)早年的论文。
4.一些通用的sb3文件处理工具
由于需要解析sb3文件,所以会顺手打造一些通用的小工具。
今天就简单写了一个脚本, 允许用户解压sb3文件,本地编辑之后,再重新生成sb3,之后在scratch3.0编辑器中依然能加载它. 这有什么用呢?还挺有用的,比如说我目前的一个用例: 之前保存的一些sb3项目在新的scratch3.0编辑器中打不开了(可能是新的平台不存在旧的extension),我通过移除sb3中对应的extension block就可以重新加载项目。
脚本源码和使用方法在这里:sb3_compress.py
关于codelab-adapter
新的虚拟机依然能够与codelab-adapter通信,我目前计划采用ZeroMQ来实现。事实上codelab-adapter会采用越来越多Bret Victor建议的设计原则。
进展与笔记
近期,我刚开始着手做这件事,对项目数据的分析已经完成了。将项目保存为本地文件(sb3)由以下代码驱动:
|
|
由此可以看出项目的数据是扁平的。这个分析帮助我们构建了小工具:sb3_compress.py。
春节假期将近,在假期里与家人朋友小聚之余,如果能抽出时间,我就到阳台晒晒太阳,熟悉熟悉Pharo,并顺手构建早期的原型。
参考
文章作者 种瓜
上次更新 2019-01-28