FUSE, and FUSE on macOS

Overview FUSE, File system in Userspace, is an interface which provides an ability to implement a file system as a normal application. Compared to traditional file systems who run in the OS kernel. File system on FUSE is: easier to implement (and debug, and avoid kernel panic), which brings ...

VNC through SSH tunnel

在无法直接访问目标机器 ip 时,是无法直接进行 VNC 登录的。一种常见的情况是可以通过跳板机进行 ssh,但无法直接 VNC。 VNC 其实就是对机器的特定端口进行专有协议通信。所以只要在自己机器和目标机器的特定端口间,建立一个信道,就可以通过这个信道进行 vnc 通信。而我们与目标机器都可以进行 ssh 通信(即使跳过多个跳板机),且 ssh 协议本身提供了代理转发的功能,所以我们可以 VNC through SSH。 1. 建立 SSH 代理转发 ssh -L <local_port>:<target_host:target_port> <jump...

开发 Jenkins 插件:在 Hello World 之后

在看完 Jenkins 官网的插件教学之后,对实际开发 Jenkins 插件还是一头雾水。在实际东拼西凑出几个使用的插件之后,在这里分享一下,hello world 之后该怎么实现我们的功能。 Jenkins 是由 Java 实现,与 Ruby 等动态语言不同,我们无法直接 hook 或直接重写已有的方法来向系统注入功能。为了实现可扩展的能力,Jenkins 在设计上就实现了很多「接口」。比如 Job 设置中,执行 shell 脚本的步骤,就是由一个名为 builder 的类的子类实现。我们也可以写一个 builder 子类来实现另一种 build 步骤。Jenkins 本身预留了大量...

Swift 二进制库的兼容问题

Swift 发布二进制库,可没有那么简单。 不同于 ObjC,编译出二进制后(.a / framework)即完成了大部分工作,Swift 还有很多需要额外注意的问题,如多编译器版本产物不兼容问题,二进制之间的兼容性问题。而且个人在尝试过程中,也发现了一些与此相关的编译器 bug,相关的经验,值得分享一下。 编译器版本兼容 多编译器版本产物不兼容问题,随着 Swift 5.1 实现的 Module Stability 在理论上已经解决,在上一篇中有详细介绍。但在实际测试中发现,部分库生成的 swift interface 文件,被 xcode import 的时候会提示错误。比如常...

编译一个向后兼容的 swift 二进制库

Swift 5.0 实现了 ABI 稳定,使用 Swift 5.0 编译器编译出的二进制文件,可以被未来的版本所使用。但在使用 5.0.1 编译器引用一个 5.0 的二进制文件时,熟悉的错误仍然出现:不同编译器的产物不能相互引用。这是因为 swift 5.0 还没有达到 Module Stability。 Module stability 代表着描述模块 API 的信息格式稳定。这个信息会在编译时使用,它表明了这个库所有的类和函数都是什么,如同 c 语言的 header 文件一样。swift 把这个信息存在一个名为 .swiftmodule 的二进制文件中。由于这个文件在不同编译器间不...