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

推荐订阅源

GbyAI
GbyAI
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
V
V2EX
Cloudbric
Cloudbric
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
量子位
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
K
Kaspersky official blog
博客园 - 【当耐特】
T
Tenable Blog
L
Lohrmann on Cybersecurity
The Cloudflare Blog
S
Schneier on Security
A
Arctic Wolf
Latest news
Latest news
C
Cyber Attacks, Cyber Crime and Cyber Security
罗磊的独立博客
T
The Exploit Database - CXSecurity.com
Cisco Talos Blog
Cisco Talos Blog
小众软件
小众软件
P
Privacy & Cybersecurity Law Blog
WordPress大学
WordPress大学
Simon Willison's Weblog
Simon Willison's Weblog
雷峰网
雷峰网
NISL@THU
NISL@THU
人人都是产品经理
人人都是产品经理
月光博客
月光博客
J
Java Code Geeks
V
Visual Studio Blog
S
Security Affairs
博客园 - Franky
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
H
Heimdal Security Blog
有赞技术团队
有赞技术团队
V2EX - 技术
V2EX - 技术
AWS News Blog
AWS News Blog
G
GRAHAM CLULEY
T
Troy Hunt's Blog
SecWiki News
SecWiki News
Spread Privacy
Spread Privacy
宝玉的分享
宝玉的分享
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 聂微东

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观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开发笔记 创业二三事
[译] Morphic 的过去与未来
种瓜 · 2023-01-26 · via 夜行人

文章目录

前言

近期重读 An introdution to Morphic, 本文翻译自其中的部分章节。

Morphic 介绍

Morphic 是一个用户界面框架,它使构建生动的(lively)交互式用户界面变得简单而有趣。Morphic 处理了大部分显示更新、事件调度、拖放、动画和自动布局的繁琐工作,从而将编程者解放出来,专注于设计而不是机制。有些用户界面框架需要大量的模板代码来完成简单的事情, 而在 Morphic 中,少量的代码就能发挥很大的作用,几乎不浪费任何努力。

译文

morphic 的第一个版本是由 John Maloney 和 Randy Smith 在 Sun Microsystems Laboratories 里开发的,作为 Self 4.0 系统的用户界面构建环境。 Self 是一种基于原型的语言,类似于 Smalltalk,但没有类和赋值。 Randy 之前在 Alternate Reality Kit 项目上的工作, 以及他对具体性和统一性的热情对 morphic 的设计做出了巨大贡献。 至于 Squeak,morphic 在 Smalltalk 中从头开始重写。 虽然细节有所不同,但 Squeak 版本保留了原始 morphic 的精神和感觉,它需要感谢 Self。

Morphic vs MVC

morphic 与传统的 Smalltalk 模型-视图-控制器 (MVC) 框架有何不同? 一个区别是 morph 通过处理用户输入和显示来结合控制器和视图这两个角色(roles)。 这种设计源于一种简化的愿望,并且观察到大多数视图和控制器类是如此相互依赖,以至于它们必须作为不可分割的一对来使用。

模型呢? 许多 morph 是不需要模型的独立图形对象,有些 morph 是它们自己的模型。 例如, StringMorph 拥有自己的字符串,而不是引用一个可能共享的 StringHolder 模型。 然而,morphic 还支持 MVC 在同一模型上拥有多个视图的能力,使用更新机制通知所有视图模型的更改。 morphic 浏览器和其他编程工具与它们的模型的接口与它们的 MVC 对应物完全相同。

morphic 的活性(liveness)目标也不同于 MVC。 在 MVC 中,在任何给定时间只有一个顶层视图(即窗口)处于控制之中。 只有该视图可以在显示器上绘制,并且只能在自己的边界内绘制。 如果它显示这些边界之外的任何内容,例如弹出菜单或滚动条,则它必须保存并恢复弹出对象下方的显示像素。 这种显示管理设计比 morphic 的增量重新显示机制更有效,因为当最前面的窗口保持控制时,最前面的窗口后面的任何东西都不会被重绘。 对于开发 MVC 的相对较慢的机器来说,这是一个极好的选择。 然而,MVC 设计很难支持活性,因为没有简单的方法让多个实时视图在不相互绘制的情况下交错其屏幕更新。 相比之下,Morphic 的损坏报告和增量屏幕更新的集中化让 liveness 变得容易。

Morphic 的具体性也背离了 MVC。 在 MVC 中,移动窗口或调整窗口大小的反馈以空心矩形的形式提供,而不是实心对象。 同样,这更高效, 当反馈矩形被拖动时,只有几个屏幕像素被更新, 并且不需要运行视图显示代码, 对于速度较慢的机器来说是正确的选择。morphic 也支持仅轮廓窗口拖动来调整大小作为慢速机器的一个选项。

Morphic 的未来

Morphic 的未来是什么? Squeak 系统发展如此之快,以至于任何关于其未来的预测在发布时都可能成为旧闻。 尽管如此,还是有几个方向值得一提。

首先,morphic 急需对旋转和缩放的处理进行彻底改革, 这些功能在初始设计和实现完成后很长时间才重新安装到其中。 拥有一个统一的全局坐标系的最初设计决定可能需要被逆转; 然后每个 morph 都会为其 submorphs 提供坐标系,并带有可选的旋转和缩放。

Morphic 非常擅长直接操作图形对象,因此使用 morphic 本身通过拖放组件来组装 ScorePlayerMorph 等工具似乎很自然。 事实上,这已经可以做到,尽管目前的工具相当粗糙。 真正的问题是如何处理构建后的 morph 。 它存储在哪里? 如何实例化? 以及它的更新和改进如何在 image 内和更大的用户社区传播? 这些问题都不算棘手,但它们都需要作为通过 直接操作实现 morph 构造 的一部分来解决。

morphic 的 Self 版本支持多个用户在一个叫做 “Kansas” 的大而平坦的空间中一起工作。 从一开始,就计划将此功能添加到 Squeak morphic,但除了一项名为 “telemorphic” 的早期实验外,并没有做太多工作。 然而,最近人们对这个领域的兴趣又回来了,而且很快就可以让多个用户在互联网上共享一个 morphic world。

正在努力支持 3-D 硬件加速,并允许 MPEG 电影播放器等外部软件包显示为 morph。 这些目标要求 morphic 与其他代理共享屏幕。 随着 3-D 性能的提高,morphic 可能会完全整合 3-D 和 2-D 世界。 今天的 2-D 变形可能只是 3-D 环境中一些平坦的特例,而不是在 2-D morph 中显示 3-D 世界。