CodingTour
ARTS #217 | 银河大作战

周末带娃看舞台剧,很欢乐~

Algorithm

本周选择的算法题是:Find All Groups of Farmland

impl Solution {
    pub fn find_farmland(mut land: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
        let mut res = vec![];
        let n = land.len();
        let m = land[0].len();
        for i in 0..n {
            for j in 0..m {
                if land[i][j] == 1 {
                    let mut x = i;
                    let mut y = j;
                    while x < n && land[x][j] == 1 {
                        x += 1;
                    }
                    while y < m && land[i][y] == 1 {
                        y += 1;
                    }
                    res.push(vec![i as i32, j as i32, x as i32 - 1, y as i32 - 1]);
                    for a in i..x {
                        for b in j..y {
                            land[a][b] = 0;
                        }
                    }
                }
            }
        }
        res
    }
}

Review

This is the Difference of Gaussians

Difference of Gaussian(俗称 DoG)是一种图像处理技术,通过对同一张图像应用不同参数的高斯滤波器,然后将结果相减来提取图像的内在特征,它在计算机视觉和图像处理领域中有广泛应用,尤其是在特征检测和边缘检测中。

这句话里包含了 DoG 的定义、目的和作用:

  1. 定义:对同一张图像在不同的高斯滤波器做高斯模糊之后的结果求差,得到的输出图像
  2. 目的:通过增强图像中的边缘和细节,提取图像的内在特征
  3. 作用:可用于图像增强,比如变清晰、噪点提取、艺术效果 & 风格化等等

视频介绍了它的不同 style 和常见的使用场景:

  • 图像增强:通过突出边缘和细节,使得图像更清晰,更容易进行后续处理和分析
  • 噪点提取:可以用于检测和分析图像中的噪点,帮助识别和去除不需要的噪声
  • 风格化:用于艺术效果和风格化处理,使得图像具有特定的视觉效果,例如模拟手绘风格或其他艺术风格

问题复杂,但作者讲的随意、浅显易懂,非常精彩~

Tip

.node 文件的原理,虽然它的后缀是 .node,但实际上是原生平台的构建产物,比如在 macOS 上是 Mach-O:

以图片处理 sharp 包为例,真正执行任务的还是 C++ 代码: https://github.com/lovell/sharp/tree/main/src,平台相关的处理则在这里: https://github.com/lovell/sharp/blob/main/lib/libvips.js#L42。

Share

分享手动安装 VS Code Server 的方法

使用 Dev Containers attach 容器时,有时候遇到 VS Code Server 下载失败的情况,报错如下:

[3523 ms] Exit code 1
[3524 ms] Start: Run in container: cat /root/.vscode-server/data/Machine/settings.json
[3566 ms] 
[3568 ms] cat: /root/.vscode-server/data/Machine/settings.json: No such file or directory
[3568 ms] Exit code 1
[3568 ms] Start: Run in container: test -d '/root/.vscode-server/bin/89de5a8d4d6205e5b11647eb6a74844ca23d2573'
[3606 ms] 
[3607 ms] 
[3607 ms] Exit code 1
[3608 ms] Installing VS Code Server for commit 89de5a8d4d6205e5b11647eb6a74844ca23d2573
[3608 ms] Start: Downloading VS Code Server
[3609 ms] 89de5a8d4d6205e5b11647eb6a74844ca23d2573 linux-x64 stable
[4591 ms] Client network socket disconnected before secure TLS connection was established
[4591 ms] Retrying to download VS Code Server.
[5907 ms] Error: XHR failed
    at v.onerror (vscode-file://vscode-app/Applications/Visual%20Studio%20Code.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js:97:2011)

此时可以尝试手动安装:

  1. 从报错信息中,找到 VS Code Server 的版本号、平台等信息,如 89de5a8d4d6205e5b11647eb6a74844ca23d2573linux-x64stable
  2. 然后带上这些信息手动下载: curl -output /path/to/download https://update.code.visualstudio.com/commit:89de5a8d4d6205e5b11647eb6a74844ca23d2573/server-linux-x64/stable
  3. 下载下来的文件是 .tar.gz 格式,重命名,并解压: tar -xvzf 89de5a8d4d6205e5b11647eb6a74844ca23d2573.tar.gz
  4. 将解压后的文件移动到 /home/$user/.vscode-server/bin/ 目录下

上述操作可以直接在容器里进行,最终的目录结构如下:

root@af7a30e9dc88:~/.vscode-server/bin# pwd
/root/.vscode-server/bin
root@af7a30e9dc88:~/.vscode-server/bin# ls
89de5a8d4d6205e5b11647eb6a74844ca23d2573
root@af7a30e9dc88:~/.vscode-server/bin# ls 89de5a8d4d6205e5b11647eb6a74844ca23d2573/
LICENSE  bin  extensions  node  node_modules  out  package.json  product.json

然后重新 attach 容器即可。