Shengyu Zhang

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

Educational Background

South China Agricultural University

Software Engineering, Spet 2013 - May 2017

Zao Xing Shi Yan Shi

Classical sketches, Jule 2020 - Jule 2021

Work Experience

Free Software Foundation & Google Inc

GSoC Student, GNU Hurd Developer, 2016

Beijing Chaitin Future Technology Co.,Ltd

Software development intern, 2016

Beijing Chaitin Future Technology Co.,Ltd

Senior software engineer, 2017 - 2020

Focus on

Distributed systems| Stream processing | Free software | Operating system kernel

Skills

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

Projects

The OS67 Kernel 1

Period

Oct 2014 - Oct 2015

Kind

Personal Project

Role

Author

Skills

C, 汇编, 操作系统

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

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

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

  • Minix v1 file system

  • fork/exec based multi-process

  • 20+ system calls

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

  • 简单的管道

Srain IRC Client 2

Period

Jan 2016 - Now

Kind

Personal Project

Role

Author, Maintainer

Skills

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

Period

2016 年 5 月 – 2016 年 9 月

Kind

社区开源项目

Skills

C, Hurd, 文件系统

Role

Intern developer

This is one of proposal of Google Summber of Code 2016, 为 GNU/Hurd 的 ext2 文件系统增加扩展文件属性(Extended File Attribute)的特性。 我作为 GSoC Student 顺利地完成了该项目, 相关的代码 5 已并入上游。

This essay 6 describes 详述了我所做的工作。

High-performance traffic forwarding server: SN*****r

Period

2016 年

Kind

商业项目

Skills

C, Linux, 高并发

Role

Intern developer

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

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

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

Period

2017 年 – 2020 年

Kind

商业项目

Skills

Golang, 高吞吐, 分布式

Role

开发者, Maintainer

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

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

Lua Plugin Platform: L*g

Period

2017 年 – 2020 年

Kind

商业项目

Skills

Golang, Lua

Role

早期开发者, Maintainer

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

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

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

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

  • 支持用 Go 实现 Lua module

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

Distributed Real-time Stream Processing Framework: P****er

Period

2018 - 2020

Kind

商业项目

Skills

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

Role

Author, Maintainer

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

  • 文档覆盖率 100%

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

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

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

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

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

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

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

Sphinx Notes 7

Period

2020 年 5 月 – Now

Kind

Personal Project

Skills

Python, restructuredText, Sphinx, LilyPond, Jinja2, NLP

Role

Author, Maintainer

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

sphinxnotes-pages 8

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

sphinxnotes-lilypond 9

The extension allows LilyPond music notes to be included in Sphinx-generated documents inline and outline.

sphinxnotes-any 10

The extension provides a domain which allows user creates directive and roles to descibe, reference and index arbitrary object in documentation by writing reStructuredText templates. It is a bit like sphinx.application.Sphinx.add_object_type(), but more powerful.

sphinxnotes-strike 11

Sphinx extension for HTML strikethrough text support

sphinxnotes-snippet 12

Non-intrusive snippet manager for Sphinx documentation. 非侵入式的文档片段管理工具, 通过一些简单的策略对判断建立索引, 允许用户通过

fzf/fzy/skim 等filter 快速筛选出想要的信息

sphinxnotes-isso 13

Sphinx extension for embeding Isso comments in documents

Opensource Experience

Linux

Arch Linux CN Community 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

作为Author和Maintainer, 从 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

Others

  • 维护 PNMixer 24 的中文翻译

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

  • 为开源游戏 DDNet 修复 BUG 26

  • 为中国科学技术大学 Linux 用户协会(USTCLUG)设计社团 LOGO 27

  • 为知名 C/C++ Language Server 项目 ccls 设计 LOGO 28

Other

Essays

  • 《我如何用Sphinx 建立笔记系统》系列文章 29

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

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

  • 《2015 华山杯 CTF Reverse 300》 32

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

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

Patents

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

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

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

Footnotes

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://lug.ustc.edu.cn/news/2018/09/lug-logo-collect-result/

28

https://github.com/MaskRay/ccls/issues/628

29

https://silverrainz.gitee.io/blog/category/%E6%88%91%E5%A6%82%E4%BD%95%E7%94%A8-sphinx-%E5%BB%BA%E7%AB%8B%E7%AC%94%E8%AE%B0%E7%B3%BB%E7%BB%9F.html

30

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

31

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

32

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

33

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

34

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

35

CN109889530B

36

CN111158683A

37

CN110334117A