Skip to main content

mac 通过 sshfs 挂载远程 Linux 文件系统

· 9 min read

面对 mac 中浏览/下载/上传文件到远程linux服务器这个需求,无论是在终端中使用 sftp 交互命令, 还是使用一些 sftp 客户端(如 Termius,transmit),都有或者或那的不方便。 最大的问题是其不能很好地和本地文件系统融合,例如 Termius 无法通过拖拽的方式将文件拷贝到本地, 也无法通过 command + c/v 进行文件拷贝等等。 其他的需求就似乎更难满足了,像查看远程的 pdf 或者图片文件也显得比较麻烦(先下载到本地,在打开), 更别说类似于finder里面的"快速查看"功能来浏览远程文件或者显示简介了。

因此,或许我们可以将远程的文件挂载到本地目录,但是 mac 系统本身只提供了 SMB/CIFS、NFS、FTP、AFP 等服务连接, 似乎不能很好地满足需求(如果你是远程服务器等管理员的话,也可以配置linux 的 nfs 服务)。
通过一番探索,发现 sshfs 可以实现这个的需求。 本文后续内容主要就是一点关于 mac 上 sshfs 的配置步骤与使用方法的。

安装 OSXFUSE

brew cask install osxfuse # 3.11.0

另外,从 brew cask info osxfuse 的信息来看,需要重启系统才能生效。

You must reboot for the installation of osxfuse to take effect.

遂重启系统。安装完成后,在系统的偏好设置里面,就可以看到 FUSE 扩展的图标及信息了。 fuse-ext-in-system-preferenece

Rust 调用 Go 代码

· 8 min read

事情的起因是这样的。最近有个 rust 的程序, 想在 rust 代码中读取 minio (一种开源且兼容 AWS s3 api 的对象存储)中的文件, 但是无奈 rust 的 api 很不完善 且似乎现在也没啥维护(有一年没有更新了)。而另外一边,minio 的 go api 开发十分活跃且是最优先支持的。 因此我就想能不能让 rust 调用 go 的 minio api 来实现 minio 中的对象读取。

虽然网络上面似乎也没太多相关的教程,但实际上也很容易做到。Rust 是一门面向底层开发的语言,其提供来很好的与 C 语言的互操作能力。 因此可以将 Go 代码中的相关函数导出为 C 语言的头文件声明,然后让 rust 像调用 C 一样间接地调用 Go 代码。

求解 Ax=b —— 共轭梯度法(上)

· 9 min read

为了进行线性方程组 Ax=bAx=b 的数值求解,这里介绍一种数值求解方法 —— 共轭梯度法(Conjugate gradient method),简称 CG。 共轭梯度法适用于矩阵 AA 是对称正定的情况,如果不考虑计算机处理浮点数的误差,该方法能够给出线性方程组的精确解。

共轭梯度法的条件

为了求解线性方程组(或者说线性系统) Ax=bAx=b,其中 AA 是一个 n×nn\times n 的矩阵,即 ARn×nA \in R^{n \times n}bRnb \in R^nxRnx \in R^n。 此外,还要求矩阵 AA 是对称正定(symmetric position definite,SPD)的,这样才能保证最后共轭梯度法的迭代会收敛到所要求的解。 所谓对称,是指 AT=AA^T = A,即矩阵 AA 的转置等于其本身。 所谓正定,是指 x0\forall x \neq 0,都有 xTAx>0x^TAx>0
可以总结,为了使用共轭梯度法,对矩阵 AA 有如下对约束条件:

  1. 矩阵AA必须是对称矩阵;
  2. 矩阵AA必须是正定矩阵;
  3. 矩阵AA必须是n×nn\times n 的方阵(其中这条已经隐含在条件1和2里面了,因为矩阵的对称和正定都要求矩阵是方阵);