张盛宇

| (+86)176******** | silverrainz.me

教育背景

华南农业大学

软件工程,2013 年 9 月 - 2017 年 5 月

造型实验室

古典素描,2020 年 6 月 - 2021 年 6 月

从业经历

自由软件基金会 & 谷歌

GSoC Student、GNU Hurd 开发者,2016 年

北京长亭科技有限公司

实习研发工程师,2016 年

北京长亭科技有限公司

研发工程师,2017 年 – 2020 年

关注领域

分布式系统

TODO

流处理系统

TODO

自由软件

尤其是自由的 Linux 桌面软件 (Gnome/KDE, FreeDesktop, Wayland)

操作系统内核

Linux, xv6, Plan9, osv…

开发效率工具

TODO

专业技能

语言
熟练使用 C、Golang、Python
有 x86 汇编、Java、C++、Lua、Rust、Pascal、Ruby 的小型项目编写经验
对 Scheme、Haskell 有一定了解
工具
熟悉现代 Linux 发行版(尤其是 Arch Linux)的操作,了解其工作原理
熟悉 Makefile、Meson 构建系统,有 AutoTools、CMake、Bazel 的使用经验
熟悉以 Git 作为 CVS 的协作开发流程
熟练使用 Sphinx 文档生成工具,熟悉 Sphinx 扩展开发
对 C/C++ 程序的逆向分析有一定了解,能使用 OllyDBG、IDA 等工具
其他
熟悉 GLib/GTK 函数库
熟悉开源社区工作流程
拥有中小型项目长期维护经验
能适应阅读、编写英文技术文档

项目经历

The OS67 Kernel 1

时间

2014 年 10 月 – 2015 年 10 月

类型

个人开源项目

角色

作者、维护者

技术栈

C、汇编、操作系统

类 Unix 的玩具操作系统内核,基本上是 MIT 6.628 的劣化版,功能如下:

  • 基础设备(VGA、PS/2 键盘、IDE 磁盘)的驱动

  • 栈式物理内存管理和虚拟内存映射

  • Minix v1 文件系统

  • 基于 fork/exec 实现的多进程

  • 常见的系统调用实现共 20 个

  • 类 UNIX 的文件描述符实现 IO 重定向

  • 简单的管道

Srain IRC Client 2

时间

2016 年 1 月 – 至今

类型

个人开源项目

角色

作者、维护者

技术栈

C、GTK、Linux Desktop

IRC 是一种古老的,基于文本的聊天协议,在开源社区中广泛使用。 Srain 尝试为古老的 IRC 协议套上了「现代」的外壳

  • 基于 C 语言和 GLib/GTK 函数库开发,支持 Linux/BSD/macOS/Windows 多平台

  • 支持 RFC 1459RFC 2812 ,支持部分 IRCv3 特性

  • 提供了完整的命令系统,支持用键盘完成绝大部分操作

  • 支持预览公开图床的图片

  • 支持优化显示来自其他 IM 的消息 3

  • 支持插件系统

XATTR Support for GNU/Hurd 4

时间

2016 年 5 月 – 2016 年 9 月

类型

社区开源项目

技术栈

C、Hurd、文件系统

角色

实习开发者

这是 2016 年的谷歌编程之夏(Google Summber of Code)的其中一个 proposal, 为 GNU/Hurd 的 ext2 文件系统增加扩展文件属性(Extended File Attribute)的特性。 我作为 GSoC Student 顺利地完成了该项目,相关的代码 5 已并入上游。

这篇文章 6 详述了我所做的工作。

高性能流量转发服务器 SN*****r

时间

2016 年

类型

商业项目

技术栈

C、Linux、高并发

角色

实习开发者

该项目采用了类似 Nginx 的 Master/Slave/Monitor 多进程模型和类似的 Nginx 的模块组织方式。

我作为实习生在其中负责了一些统计功能的开发。后基于 MQ_OVERVIEW(7) 开发了一个进程间消息队列模块,并在此基础上实现了 so library 的 hot reloading。

分布式结构化日志统计平台 Ma**o

时间

2017 年 – 2020 年

类型

商业项目

技术栈

Golang、高吞吐、分布式

角色

开发者、维护者

该项目是 Golang 在公司产品中的第一次尝试,从依赖管理、依赖选型、代码组织、 文档维护都经过了多次的试错和修正,成为公司内部 Golang 项目的首选模板。

该项目依托于 Golang 的 Frist-Class Coroutine 支持,实现了高吞吐的日志处理。 大部分代码为业务逻辑,不便展开。

Lua 插件平台 L*g

时间

2017 年 – 2020 年

类型

商业项目

技术栈

Golang、Lua

角色

早期开发者、维护者

社区没有一个好用的 LuaJIT go binding,唯一能用的 aarzilli/golua 的作者对 Lua 缺乏足够的了解,为了避免受限于开源库,也为了更好的和公司产品集成, 我们发起了这个项目。

本质上这依然是一个 LuaJIT 的 go binding,但有如下特性:

  • 提供了更多的操作 Lua stack 和数据的 helper

  • 允许细粒度地控制 Lua 标准库的加载

  • 支持用 Go 实现 Lua module

  • 深度集成了 Lua coroutine 和 Goroutine ,最大化利用了 CPU 时间

分布式实时流处理框架 P****er

时间

2018 年 – 2020 年

类型

商业项目

技术栈

Golang, 分布式、流处理、SQL、编译器前端

角色

作者、维护者

一个轻量(< 30,000 loc)的,非侵入式的分布式实时流处理框架, 不少设计思路源自 Flink 和 TiDB,但因使用场景不同又有所区别。

  • 文档覆盖率 100%

  • 完全非侵入式的设计,纯 Golang 实现,不依赖外部服务

  • 完全模块化的实现,各模块之间层次清晰,组织良好

  • 在多个层次(数据类型、表达式、SQL Scalar 函数、聚合函数、窗口函数、算子)上均保持了扩展性

  • 支持服务发现,支持动态增删节点,允许任意节点下线、支持脑裂自动恢复(有数据丢失)

  • 支持滑动、滚动时间窗口,支持超大滑动时间窗口

  • 支持类似 Flink Streaming SQL 的 SQL 语法,支持 JSON 类型,实验性支持 JOIN 和子查询

  • 支持任务管理,支持调试用途的任务可视化

Sphinx Notes 7

时间

2020 年 5 月 – 至今

类型

个人开源项目

技术栈

Python、restructuredText、Sphinx、LilyPond、Jinja2、NLP

角色

作者、维护者

Sphinx 被我来建立我的个人信息管理系统(Personal Information Management System), 因此为了满足我的需求,我建立了 Sphinx Notes 组织并编写了如下项目:

sphinxnotes-pages 8

构建 Sphinx 文档并 push 到 gitpages 的 GitHub Action

sphinxnotes-lilypond 9

开源音乐打谱软件 LilyPond 的 Sphinx 扩展,允许用户在文档中使用 LilyPond 编写 乐谱

sphinxnotes-any 10

一个用以描述 任何 对象的 Sphinx Domain,可以认为该插件允许用户通过 写文档的方式构建简单的数据库

sphinxnotes-strike 11

restructuredText 标准中不包含删除线(Strikethrough)的语法,插件提供了该支持

sphinxnotes-snippet 12

非侵入式的文档片段管理工具,通过一些简单的策略对判断建立索引,允许用户通过 fzf/fzy/skim 等filter 快速筛选出想要的信息

sphinxnotes-isso 13

开源评论系统 Isso 的 Sphinx 扩展

开源活动

Linux 相关

Arch Linux 中国社区 14

2016 年至今,作为活跃成员,一直为中国社区软件仓库维护软件包 100 余个, 提交数量排名 #14(截至 2021-02-18) 15

Arch Linux User Repository

AUR 是 Arch Linux 用户驱动的软件仓库,是官方仓库的重要补充。 作为活跃用户, 在 AUR 维护软件包 20 余个 16 。其中包括尚未被官方收录的流行软件,例如: jekyll, vim-fcitx, ccls, gtk4 等。

IRC 相关

Srain IRC Client

作为作者和维护者,从 2016 年至 2021 年,一直持续开发和维护项目, 截至 2021-02-25,五年间:

  • 新增代码 153,355 行,删除代码 117,419 行,当前仓库代码约 20,000 loc

  • 发布了 23 个版本

  • 建立了 163 个 Issue

  • 合并了来自 19 个社区开发者的 144 个 Pull Request

  • 被 AUR、AOSC、DragonFly BSD、Fedora、FreeBSD、Flatpak、Guix、 Gentoo overlay GURU、OpenBSD、OpenMandriva、openSUSE、NetBSD、Void Linux 共计被 13 个 *nix 发行版的软件仓库收录

Bug fixes
  • 为著名 IRC 客户端 Hexchat 修复 Bug 17

  • 为著名 IRC 客户端 irssi 修复 Bug 18

Golang 相关

The Go Language
  • 修复标准库 text/scanner 中一处 BUG 19

  • 修复 go vet 中一处错误的逃逸分析 20

  • 补充 go build 时一个缺失的 linker flag 21

fasthttp

为 HTTP 库 fasthttp 修复 BUG 22

Read The Docs

Read The Docs 社区有计划使用 Sphinx Autodoc 来生成静态的 Golang 库文档 (而非动态的 GoDoc),我为其实现了一部分功能 23

其他

  • 维护 PNMixer 24 的中文翻译

  • 为书籍 Haskell 趣学指南 全书校正代码格式 25

  • 为开源游戏 DDNet 修复 BUG 26

其他

文章

  • 《Srain - Modern IRC Client written in GTK》 27

  • 《编写便于打包的 Makefile》 28

  • 《2015 华山杯 CTF Reverse 300》 29

  • 《用户态进程的简单实现及调度(一)》 30

  • 《Minix v1 文件系统的实现》 31

专利

  • Web 应用防火墙系统及计算机存储介质 32

  • 一种 Web 应用防火墙自定义扩展功能的方法、装置、系统及电子设备 33

  • 一种实时数据处理方法及装置 34

脚注

1

https://github.com/SilverRainZ/OS67

2

https://srain.im

3

https://doc.srain.im/en/latest/faq.html#what-is-relay-message-transform

4

https://summerofcode.withgoogle.com/archive/2016/projects/5786848613892096

5

https://git.sceen.net/hurd/hurd.git/commit/?id=6ebebc80de3dfc7ada3a69d609f00088c2143be3

6

https://silverrainz.gitee.io//blog/gsoc-2016-sum-up.html#id12

7

https://github.com/sphinx-notes

8

https://github.com/sphinx-notes/pages

9

https://github.com/sphinx-notes/lilypond

10

https://github.com/sphinx-notes/any

11

https://github.com/sphinx-notes/strike

12

https://github.com/sphinx-notes/snippet

13

https://github.com/sphinx-notes/isso

14

https://www.archlinuxcn.org

15

https://github.com/archlinuxcn/repo/graphs/contributors

16

https://aur.archlinux.org/packages/?K=SilverRainZ&SeB=m

17

https://github.com/hexchat/hexchat/pull/1969

18

https://github.com/irssi/irssi/pull/742

19

https://go-review.googlesource.com/#/c/go/+/112037

20

https://go-review.googlesource.com/c/tools/+/175617

21

https://go-review.googlesource.com/c/go/+/210657

22

https://github.com/valyala/fasthttp/pull/713

23
24

https://github.com/nicklan/pnmixer

25

https://github.com/MnO2/learnyouahaskell-zh/pull/60

26

https://github.com/ddnet/ddnet/pull/1390

27

https://srain.im/2020/02/29/introducing-srain.html

28

https://silverrainz.gitee.io/blog/practical-makefile-for-packaging.html

29

https://silverrainz.gitee.io/blog/2015-huashangctf-re300.html

30

https://silverrainz.gitee.io/blog/process-scheduler-1.html

31

https://silverrainz.gitee.io/blog/minix-v1-file-system.html

32

CN109889530B

33

CN111158683A

34

CN110334117A