# 2021-49: 全职开源第一周

作为全职开源的一部分，我将自己的工作计划都公开在 [Xuanwo's Work](https://github.com/users/Xuanwo/projects/2/views/1)。这周刚好 Iteration 1 结束了，让大家看看我这个 Iteration 都做了什么，并且展望一下下个 Iteration 吧。

Iteration 1 的时间是 2021-12-12 ~ 2021-12-26，这个迭代周期里面我印象比较深刻的是这几个事情：

## Coding

### Databend: [build: Install arm64 version of libssl and zlib1g](https://github.com/datafuselabs/databend/pull/3371)

跟构建系统打架花了不少时间，rust 编译真的是太慢了- -。详情可以参考 [修复 Databend aarch64 架构的支持](https://xuanwo.io/2021/10-rust-cross-aarch64/)，这里就不展开了。

### Databend: [proposal: Refactor CI pipleline into stages](https://github.com/datafuselabs/databend/discussions/3415)

Iteration 1 的不少时间花在了跟 CI 打架上，为了以后能够更好的跑 CI，我决定设计一套新的 CI 组织架构，将多个相关联的 Job 放进同一个 Workflow，而不是拆分成多个。这样的好处就是我们可以非常轻松的控制 Job 之间的依赖关系，实现这样的逻辑：

- Check 成功之后再运行 Build
- 使用 Build 中构建出来的产物进行集成测试

目前已经有一个可以正常工作的 [Demo](https://github.com/datafuselabs/databend/pull/3344)，欢迎大家来 Review！

### Databend: [website: Migrate site to docusaurus](https://github.com/datafuselabs/databend/pull/3210)

Databend 社区一直有个长期需求是把社区的网站改成基于 docusaurus 构建，正好我对 docusaurus 有些经验，于是就把这个活儿给做了。当然后续还有不少的工作，比如：

- 前端的样式调整
- 内容的组织
- 开篇 Blog 等等

这些就由社区的小伙伴来接手了。

### Databend: upper&lower support

Databend 深度依赖 [arrow2](https://github.com/jorgecarleitao/arrow2)，出于 `upstream_first` 的考虑，我给 arrow2 贡献了 upper & lower 的支持。其中 lower 的 PR 比较有意思：[Added `lower`](https://github.com/jorgecarleitao/arrow2/pull/641)：为了方便后续增加各种 utf-8 相关的逻辑，我在维护者的要求下增加了一个泛型函数的实现：

```rust
/// utf8_apply will apply `Fn(&str) -> String` to every value in Utf8Array.
pub fn utf8_apply<O: Offset, F: Fn(&str) -> String>(f: F, array: &Utf8Array<O>) -> Utf8Array<O> {
    let iter = array.values_iter().map(f);

    let new = Utf8Array::<O>::from_trusted_len_values_iter(iter);
    new.with_validity(array.validity().cloned())
}
```

第一次写泛型函数，有点帅。

## Discussion

除了代码相关的工作，这个 Iteration 我还参加了不少讨论。自己的一些大的变化都在 Discussions 创建了 Proposal 自然不必多说，我还参与了 [Engula](https://github.com/engula/engula) 的一些事物。比如：

- [elaborate the contributing guide](https://github.com/engula/engula/issues/180)
- [Contributor Medal Wall](https://github.com/engula/engula/discussions/184)

Engula 是一个新生的社区，这些规则都在从零起步开始建立，对我来说是一个全新的观察者视角，感觉能有更多的新想法。

## Learning

这个 Iteration 本来想把 [CMU 15-445](https://15445.courses.cs.cmu.edu/fall2021/) 刷一遍，但是高涨的热情推动我做了太多的事情少了思考和学习的时间，导致我的学习进度还停留在 Lecture #04: Database Storage II。然后很多感兴趣的问题没有时间研究，下个 Iteration 应该要留出一些时间来。

---

下个 Iteration 我会推动 CI 的重构合并进入主干，同时把 CMU 15-445 学完，对数据库系统的大概实现有个初步的印象。这样在 2022 年我应该能够参与到更深入的一些贡献里面去，目前我感兴趣的方向是 Databend 的存储层，我期待能够将它重构为更容易扩展和测试的模型，使得贡献者可以方便且自信的实现多种存储的支持。
