*Marimo、Python、开源、反应式笔记本* 大家好,我是潇大,今天我们开启一个新的系列,叫做Marimo编程系列,来介绍一下这个所谓的Python笔记本的未来究竟是什么。

Marimo简介:Markdown与编程的融合 *Markdown、所见即所得、公式、表格、图像、编程工具* 那在我看来呢,它其实是一个编程和markdown的结合,或者说是伪装成markdown的一个编程工具。

那对于markdown语言,相信大家都比较熟悉的,我们有一些编辑器,比如TPO啊,它就可以直接做这样的事情。它的语法特点呢,有一个就是所见即所得,以及可以去做一些公式、表格、图像这样一些东西。而Marimo本身确实可以作为一款markdown编辑器来用。
Marimo的Markdown功能演示 *实时响应、数学公式、流程图、Mermaid语法、图片插入* 那我们看一下具体的例子,比如说这就是一个Marimo笔记本打开的一个样子,在一开始的地方,我们其实是可以用markdown的语法去说,比如说what you see is What you get,当你在输入的时候,这个显示区域会同步的去响应。
同时呢,对于一款markdown来说,数学公式是避免不了的,它也可以去嗯用这种语法,去插入一些数学的公式,去做一些及时编辑的处处理等等。再比如说他也可以去插入一些网络的图图片啊,这个都是常规的操作。

那更进一步呢,我还可以用一些比较流行的mermaid的语法,去插入一些流程图,你只要按照这个mermaid这样一些格式,去输入这个代码,那我就可以把它渲染成这样的一个图片的一个形式。那看到这里呢,好像他已经完成了markdown的功能,但它这个东西怎么跟编程来结合起来呢? 编程与Markdown的交互性 *正弦曲线、动态变换、周期调整、振幅修改、网络实时数据、手写数据集、聚类* 那在我看来呢,它其实会有一个很重要的特点,就是他能够去做定制,因为你的编程是可以去释放你自己的想象力跟创造力,你去做一些很特定的东西,另外一个点呢就是可以去做交互,当你做交互的时候,你会不可避免的跟这个UI去打交道,然后就会跟可可视化相关联起来。
这里看到的是一个嗯正弦的这样的一个曲线,它是它的方程是这样一个一个sin函数的值,我们在这里可以通过调整它的周期和振幅,来到一个动态变换的效果,这就体现出了它的一个交互性。

我还可以去用它去展示一些网络的实时数据。更进一步呢,我可以去把MNIST的手写数据集进行可视化的聚类,这里看到的每一类都是一个数字,我可以框选它诶,我就可以看到这个数字啊,当我拖动的时候,我就可以看到,实时看到我这个每一个数字分别是多少,这个是一,这个是二等等。

Marimo的编程特性 *定制化、交互性、UI设计、可视化* 那我们看到类似这样的效果,其实它就是通过这种编程的方式,去让你这个markdown的形式变得更加的多样化,更加的定制化,这就是这里编程的一个含义。好了,那有了这样一个对马,对这个Marimo的一个直观认知之后,我们就来具体看一下,它具体ORI的特色会有哪些啊,在这里官网上列了很多,但这里我把它归纳成三个三大特点,我们一个一个来说。

首先第一个是说他的响应式和交互式,它可以自动去运行一个关联的cell,然后通过一些交互绑定,那这个是什么意思呢?
响应式与交互式执行 *自动运行、关联Cell、交互绑定、AUI、滑块控制* 我们看这样一个例子。那我们首先,让A等于一,在A等于一之后,我让B等于A加一,然后我再把B输输出来,那B就等于二,然后再接接这一步呢,C我等于B加二,那我们输出C,我们就看它等于四。
那这时候如果我修改了A的值,比如说我把A改成十,当我运行它的时候,会发现B和C是同步被修改的,所以它其实自动维持它们的一个关联,甚至说他的执行顺序都不是从上到下。也就是说如果我把这个倒过来,这个时候我继续去修改它的值,也是能够去同步修改的啊。

这就是一个响应式的执行的含义,因为他在区块里的一个一个关联呢,他的每一个区块其实是会有一个引用关系,当我这个当我这一个变更的时候,他就会一路往上变更到下面的一个单元格。那我其实还可以把这个A变成滑动条控件的形式,当我拖动这个A的时候,我就会发现上下的值就同步随它而变换,这个就是它的一个交互式。
所见即所得的编程体验 *.PY文件存储、块状结构、版本控制、Git兼容性、可复现性、团队合作* 那第二个特点呢就是他的所见即所得,我们说markdown是所见即所得,但是编程怎么所见即所得呢?就体现在说它存储的每一个源文件,其实是以点PY的形式存储的。

可以看一下它的这个源文件的形式,它其实就是不同的一个cell去做一个集合,它本身就是一个PY的文件。那这样会有什么样一个好处呢?这个东西它是一个可以做git的diff操作,就当我修改了某一个行的时候,我直接可以看到我修改了什么,而对于一些如果你接触过其他的笔记本,它里面的结构存储是一个JSON的一个格式,是一个嵌套的格式,基本上没法读,所以当你修改的时候啊,整个就没有办法去看到它的结构是什么了。
这个特点会带来一个强可复现性,而复现性会带来什么好处,就是我可以去做更多的合作,你可以设想一个场景,当我写了一段东西之后,我发给另外一个人,他那边不能还原我的结果,那其实这是一场灾难,所以它的复线性就体,可以帮助我们更好的去做合作。
易于部署的应用发布 *浏览器运行、Emscripten、WASM、URL分享、一键发布、用户便利性* 那第三个特点呢就是它易于部署,用于部署是什么意思呢?我们可以举个例子。
比如说你是一个开发者,你是一个开发者,然后今天呢,你做了一个app,然后你想把这个app去发布给你的用户啊,那我以前我可以怎么做呢?

我可以把这个app打包成一个点exe对吧,一个可执行程程序,那发给用户之后,用户这边就可以打开这个可执行程序了,这个是没问题的,所以你这边就需要去做一个打包的这样,一个过程。
那如果我直接是一个Python,我直接发一个点PY格式的文件,可不可以呢?用户会遇到问说哎我打打不开这个东西,因为这样的一个格式,在用户端是没有办法直接去打开的。
那Marimo引入它带来了什么方便呢?我们假设说嗯,这个开发者,他现在开发了一个东西,他是按照Marimo的格式去做的,而Marimo有一个很大的特点,它是可以去基于底层的浏览器去做运行,基于WASM的汇编程序运行在上面。
那这样的话我就可以依托于这个浏览器,我就发送一个URL的地址,当用户看到这个地址之后,他就可以在它浏览器去打开,而打开的时候,它实际上是调用了这个浏览器底层的这样的,一个基础能力,而这个东西是每个人都会有的,所以这样的一个过程,你就解决了他那边打开端的问题。同时从app到U2的过程也是可以很方便的,一键去完成的,所以他就提供了一种全新的途径,去帮助你一键去发布应用。
学习与展望 *P2预告、学习路径、适用人群、后续内容* 那这里呢,可能就会有人疑问,这编程我真的能够学会吗?这东西和我有什么关系?如果我想学我这个东西应该怎么学,那所有的这些内容呢,就请参见视频详情中的介绍啦。