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

推荐订阅源

U
Unit 42
N
News and Events Feed by Topic
S
Schneier on Security
G
GRAHAM CLULEY
Scott Helme
Scott Helme
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
CERT Recently Published Vulnerability Notes
T
The Exploit Database - CXSecurity.com
C
Cisco Blogs
T
The Blog of Author Tim Ferriss
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
Blog — PlanetScale
Blog — PlanetScale
Project Zero
Project Zero
MyScale Blog
MyScale Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
The Last Watchdog
The Last Watchdog
Vercel News
Vercel News
The Cloudflare Blog
C
Check Point Blog
Help Net Security
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
腾讯CDC
NISL@THU
NISL@THU
S
Security @ Cisco Blogs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
AWS News Blog
AWS News Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
PCI Perspectives
PCI Perspectives
S
Securelist
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Vulnerabilities – Threatpost
S
Secure Thoughts

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观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开发笔记 创业二三事
Scratch增强计划
种瓜 · 2019-01-28 · via 夜行人

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

最近有一搭没一搭地使用PharoPharo是现代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)由以下代码驱动:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    /**
     * @returns {string} Project in a Scratch 3.0 JSON representation.
     */
    saveProjectSb3 () {
        const soundDescs = serializeSounds(this.runtime);
        const costumeDescs = serializeCostumes(this.runtime);
        const projectJson = this.toJSON();

        // TODO want to eventually move zip creation out of here, and perhaps
        // into scratch-storage
        const zip = new JSZip();

        // Put everything in a zip file
        zip.file('project.json', projectJson);
        this._addFileDescsToZip(soundDescs.concat(costumeDescs), zip);

        return zip.generateAsync({
            type: 'blob',
            compression: 'DEFLATE',
            compressionOptions: {
                level: 6 // Tradeoff between best speed (1) and best compression (9)
            }
        });
    }

    _addFileDescsToZip (fileDescs, zip) {
        for (let i = 0; i < fileDescs.length; i++) {
            const currFileDesc = fileDescs[i];
            zip.file(currFileDesc.fileName, currFileDesc.fileContent);
        }
    }

由此可以看出项目的数据是扁平的。这个分析帮助我们构建了小工具:sb3_compress.py

春节假期将近,在假期里与家人朋友小聚之余,如果能抽出时间,我就到阳台晒晒太阳,熟悉熟悉Pharo,并顺手构建早期的原型。

参考