CodingTour
ARTS #201 | 小蜜蜂

端午在海边画了只小蜜蜂

Algorithm

本周选择的算法题是:Number of Substrings With Only 1s

impl Solution {
    pub fn num_sub(s: String) -> i32 {
        const MODULO: i64 = 10_i64.pow(9) + 7;
        let (mut count, mut result) = (0, 0);
        for c in s.chars() {
            if c == '1' {
                count += 1;
            } else {
                result += count * (count + 1) / 2;
                count = 0;
            }
        }
        result += count * (count + 1) / 2;
        (result % MODULO) as i32
    }
}

Review

Flutter vs .NET MAUI: Which is better for creating cross-platform apps?

通过这篇文章认识了微软开源的跨平台框架:.NET MAUI,名字朴实无华,是 Multi-platform App UI 的简写,作者列出了各自的特点,flutter 胜在迭代快、技术路径清晰,Hot Reload/Hot Restart 成熟,这两年市场也在不断提高;MAUI 胜在开发工具成熟(基于 Visual Studio)、架构清晰、文档详实,其采用的 Fluent design 设计语言也不输 Material designApple design,另外 MAUI 是 C# 技术栈,这点有利有弊吧。

相对来说,flutter 更成熟、更受开发者喜爱一些,除非完全是微软阵营的拥趸,不然对初学者和更广泛的开发者来说,flutter 仍然是更好的选择,而且基于 flutter 的企业级应用也更多一些。

Tip

Drive & Listen,一个模拟全球各个地方驾车体验的网站。

Share

Lightroom 架构简述

Lightroom 是 Adobe 旗下的产品,它主要是用于照片编辑场景。

在跨端盛行的年代,Lightroom 作为一款同时提供桌面端和 Web 端的产品,没有意外的也选择了跨端方案,不过它的跨端方案有点意思~

先看一眼它的架构全景图,主要是对它逆向分析总结出来的:

应该比较好理解,就不过多解释了。

然后我们再看几张图:

如图所示,Lightroom 是一款纯客户端应用,它大量使用了在游戏领域应用广泛的 Lua 脚本语言,关于 Lua,它的优势简单来说总结如下:

  1. 轻量且高效,它的核心库非常精简,执行速度快,并且具有较小的内存占用,适用于资源受限的环境
  2. 易学易用,Lua 语言具有简洁清晰的语法和简单的语义,易于学习和使用,它采用类似于其他脚本语言的过程式编程风格,没有过多的复杂特性,使得初学者能够快速上手
  3. 可嵌入性,Lua 语言被设计为可嵌入到其他主机程序中,可作为脚本语言与其他语言(如 C/C++)进行无缝集成,这种嵌入性也使得 Lua 在游戏开发和嵌入式系统中应用广泛
  4. 可扩展性,Lua 具有强大的扩展性,支持通过编写 C/C++ 扩展模块来扩展其功能,这使得开发者可以根据需要自定义和添加新的功能,提高了 Lua 语言的灵活性和场景适用性

在桌面端上,借助 Lua 实现平台级代码复用比较容易理解,但在 Web 端上,Lightroom 将 Lua 脚本构建成了 wasm,通过代码复用解决了一致性的问题,其构建出的 wasm 产物高达 38.9MB,要知道,一个 CanvasKit 也才 7MB 而已,难以想象这个 wasm 里到底包含了多少东西。

Lightroom 使用 canvas 渲染替代 DOM 渲染,这也是主流方向:

在渲染接口之上,抽象出一层 Render Object 作为 DTO,统一多平台下的状态管理、数据驱动的设计,并通过统一建模减少对齐成本,其设计与 flutter 几乎是一样的:

相比之下,flutter 提供了 DOM 渲染和 canvas 渲染两种模式,既可满足下载量优先,又可满足一致性优先,而且它的抽象层次足够高,dart 语言在易用性上不输 Lua,只是 Lightroom 这套架构问世时恐怕 flutter 还不是一个备选方案,不然 flutter 这套架构应该是可以平替掉 Lightroom 现在这套方案的。