张盛宇#
| (+86)176******** | silverrainz.me
教育背景#
- 华南农业大学:
软件工程,2013 年 9 月 - 2017 年 5 月
- 造型实验室:
古典素描,2020 年 6 月 - 2021 年 6 月
从业经历#
- 自由软件基金会 & 谷歌:
GSoC Student、GNU Hurd 开发者,2016 年
- 北京长亭科技有限公司:
实习研发工程师,2016 年
- 北京长亭科技有限公司:
研发工程师,2017 年 -- 2020 年
关注领域#
分布式系统 | 流处理系统 | 自由桌面软件 | 操作系统内核 | 开发效率工具
专业技能#
- 语言
- 熟练使用 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 协议套上了「现代」的外壳
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 相关#
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
Golang 相关#
其他#
其他#
文章#
专利#
脚注#
如果你有任何意见,请在此评论。 如果你留下了电子邮箱,我可能会通过 回复你。