前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >盘点我的 2022:知识分享与开源项目

盘点我的 2022:知识分享与开源项目

作者头像
tyrchen
发布2023-02-23 16:42:39
6510
发布2023-02-23 16:42:39
举报
文章被收录于专栏:程序人生程序人生

2022 即将过去,在朋友圈一片盘点总结的大潮中,我也不能免俗。今天,我来说说我个人在知识分享和开源项目方面的贡献。

知识分享

先说知识分享。2022 年我发表了 22 篇公众号,可能是我自 2014 年撰写公众号以来的历史新低。其实我有很多不错的选题,但因为这样那样的原因,很多选题都烂尾而没有发出来。

如果让我选择我个人的年度文章,我觉得是:激荡二十年:HTTP API 的变迁。为了这篇文章,我甚至撰写了上千行 SQL 和两千行 Rust,就是为了探索一个更好的,面向未来的 API 构建方案:

这种探索即便不能用于生产,或者甚至无法达到它想要的结果,也是非常有价值的。单单这个非常原始粗糙的 autoapi 的 PoC,就让我领略到很多之前从未在意的,postgres 身上的旖旎风光。也许我最终会发现此路不通,或者找到其他可能,进而放弃这个方向。但就像 CMU 的 Randy Pausch 教授说的那样:Experience is what you get when you don't get what you want.

2022 年之所以我的公众号产量下滑,很大一个原因是经历了 2021 年的诸多尝试后,我开始用更快的节奏制作更多的技术开发视频。一年下来,我竟然发布了累计时长 58 小时的 72 个视频,获得了大家 18.3万次赏脸观看:

在做视频的过程中,我渐渐意识到,很多(Rust)开发者欠缺的不仅仅是对语言本身的理解,或者对语言生态的熟练掌握,更欠缺的是在开发过程中从零到一构建系统的能力,于是我大大加大了视频中 live coding 的比例,希望把我做开发过程中的最有价值的思考,包括开发思路,对架构设计测试的想法,以及开发过程中的权衡与取舍分享给大家。整个 2022 年下来,我的 B 站关注者增加了近 7000 人,关注数也即将突破一万(依旧是脚踝部的 up 主 lol)。

开源项目

今年我贡献了超过 10 个 Rust crate,挑几个我认为有意义的讲讲:

  • accept-header:目前 Rust 社区没有太好的库来做 content-negotiation,于是我撰写了这个库允许调用者使用 Accept header 来给定其偏好的 response type,而 API 的开发者可以构建其支持的 mime type,然后使用 accept-header 库来选择 negotiate 出来的 mime type。具体可以参看:https://crates.io/crates/accept-header。
  • axum-swagger-ui:很多时候,如果我们做 API 项目,都需要简单的 swagger UI 的集成。这个 crate 可以帮助用户把 swagger UI 嵌入到 axum 项目的路由中。见:https://crates.io/crates/axum-swagger-ui
  • cellar-core:严格意义上说,cellar-core 并不是我今年发布的 crate,但我对其做了很多升级。cellar-core 是一个确定性密钥和证书生成器,它参考了比特币 HDW(Hierarchical Deterministic Wallet)算法,可以从一个初始密码(加上 salt)生成出一系列密钥和证书。之前,在证书生成时,我使用了 ed25519 算法,然而 osx 不支持把使用了 ed25519 算法的 CA 证书导入到系统根证书中,我退而求其次,使用 ECDSA。确定性密钥的好处是用户可以通过一个单一密码安全地管理多个衍生的密码和密钥。见:https://crates.io/crates/cellar-core
  • deno-simple-runtime:这个 crate 是 deno CLI 的一个瘦身,可以让你方便地把 deno 嵌入到自己的系统中。我个人用它构建了一个完整的 typescript/javascript 执行引擎,并使用 deno ops 构建了基础的库供 js 代码使用。我觉得 deno 是一个被低估了的工具,它的可嵌入性和 v8 本身的沙箱能力,是任何想在自己的系统中提供用户级嵌入式脚本支持的绝佳选择。可能唯一的缺点就是嵌入 deno 后,二进制文件有点大,吃内存。如果你对这个主题感兴趣,可以回顾我的文章:被低估的 deno,以及观看我在 B 站上发布的 deno 系列视频。crate 见:https://crates.io/crates/deno_simple_runtime
  • dynamodb-tools:如果你使用 dynamodb 开发应用,那么你也许需要这个 crate 更好地做开发和测试。它提供了测试期间在 dynamodb local 中创建和销毁 table 的能力,让你可以轻松处理单元测试。此外,由于在测试期间需要创建表,我还提供了使用 yaml 来描述 dynamodb table 和 index 的能力,这一能力也可以用来创建正式的 table/index。因而,一开始我管这个 crate 教 dynamodb-tester,后来发现这个名字有些片面,于是改成 dynamodb-tools。见:https://crates.io/crates/dynamodb-tools
  • free-icons:很多时候我们在前端需要使用 svg icon,这个 crate 可以方便地生成各种主流免费 icon (比如 font-awesome)的 SVG 代码片段。具体见:https://crates.io/crates/free-icons
  • proto-builder-trait:prost 和 tonic 可以很方便地从 protobuf 中生成数据结构和代码。这个 crate 把一些常见的模式融入到 build script 中,使得在生成过程中,我们可以为生成的代码添加各种格外的功能,比如 serde 的支持,serde-with,builder 等等一系列额外的操作。我个人凡是使用了 protobuf 的项目,都会使用这个 crate 来自动化额外的代码生成。见:https://crates.io/crates/proto-builder-trait
  • sqlx-db-tester:这个 crate 是我在系列视频「从零开始构建预订系统」中,处理数据库相关代码测试时撰写的库。相对于已有的使用宏的解决方案,它最大的好处是不使用宏,从而能有更广阔的使用场景。见:https://crates.io/crates/sqlx-db-tester
  • stream-operators:Rust 下的 tokio stream 和 futures 支持一部分 reactivex 定义的 stream operator,然而并不是太全,尤其是没有我需要的 debounce-time 的支持,于是我实现了一组通用的接口,为 Rust stream 支持更多的 stream operator。这个 crate 的主要意义是对比了 reactivex 和 tokio-stream / futures 中对 stream operator 的支持,大家如果有需要的话可以迅速找到需要的 operator。见:https://crates.io/crates/stream-operators

所有这些,都不是什么重要的开源项目。大多数时候,它们是我某个项目的副产品,使用者基本都是我自己。开源对我来说,是一件自然而然的事情。写了点东西,觉得别人也许会需要,于是抽取,裁剪,添加文档,添加测试,添加使用帮助,发布,维护,就像我在视频「从零开始构建预定系统(15):把可以开源的代码抽取成新的 crate」中介绍的那样。所有这些额外的动作,虽然会耗费一些时间和精力,但它促使我更好地思考代码的价值,接口的易用性和文档的可读性。更重要的,在享受着使用开源社区成果的巨大好处的同时,我通过这些微不足道的 crate,践行了 pay it forward,把爱传递下去的开源理念。

One more thing

最后,再碎嘴提几句我个人的几个年度第一。

年度技术视频:Amazon CTO Werner Vogels 在 re:invent2022 上的 keynote:https://www.youtube.com/watch?v=RfvL_423a-I。serverless 和 event-driven 是今年 re:invent 的终极主题,如果你还没抽时间看看今年的 re:invent,那么起码不要错过 Werner 大大的主题演讲。一如既往地高瞻远瞩,一如既往地精彩绝伦。我的年度技术视频。

年度技术书籍:Software engineering at google。这是我今年看过的最有价值的技术书籍。我把它大力推荐给了我的同事。如果你在美国,任何一个当地的图书馆应该都可以借到这本书(当然,可能需要排队),或者在线阅读其开源版本:https://abseil.io/resources/swe-book(是的,这本书的原作者将其开源);如果你在中国,你可以在 github 上读这本书的中文翻译版:https://qiangmzsx.github.io/Software-Engineering-at-Google/#/ 。

年度开发语言:Rust。这是毫无疑问的。今年一年,据不完全估计,我业余时间写了超过三万行 Rust 代码,数千行 typescript,数千行 SQL,以及近千行 python(主要是 jupyter notebook)。Rust 在我的技能栈中已经占到了无可匹敌的位置。Rust 也许并不适合于所有人,但它很适合我。

年度技术滚粗:IE。可能很多人都不记得,今年 6 月 1 日儿童节,微软正式给 IE 下了死刑。这是值得每个互联网从业者欣喜的日子 —— IE 兼容性 polyfill 终于可以慢慢从我们的前端代码中滚粗了!希望逐渐偏离标准且动不动反向优化的 chrome能吸取 IE 的前车之鉴,否则,十年后,也许我们欢呼的就是 chrome 兼容性 polyfill 可以从前端代码中滚粗。

年度硬件:mbp 16 m1max。当我忍无可忍,提请 IT 把我那缓慢的,无法忍受的 intel CPU 的 mbp 16 换掉后,整个世界清净得我都有些怀疑是不是之前的本子嗡嗡作响的风扇不仅疯狂拉低我的效率,还烧坏了我的耳朵。10 核的 m1max,比我之前 16 核的 intel CPU,在编译代码或者渲染视频的效率上,快了数倍。虽然 m1max 不是今年的产品,但它的的确确拯救了我的 2022。没有它,我起码会少做一半视频,少写 30% 代码。

年度软件:github copilot。如果有人问今年我最性价比最高的一笔投资是什么,那一定是 github copilot。几十块钱一年的订阅费,起码能节省我 20-40% 的开发时间,这简直太赚了。我现在几乎所有个人项目的单元测试都依赖于 copilot 帮我撰写,而很多情况下,我也会把我撰写函数(或者实现某个 trait)的思路通过注释告知 copilot,让它帮我完成蓝图,我再在其基础上完善或者重构。这大大提升了我构建软件的效率。

年度被低估技术:neon。作为一款真正可以缩放自如的 serverless postgres(AWS aurora serverless 并不能缩放到零),neon 让我眼前一亮。数据库存储和计算的分离是近两年的热门话题,目前有不少数据库产品在角力这个方向,但 neon 算是我所知的,在这个方向上做的最接近商业化和最贴近最终用户的产品。他把很多复杂的概念和操作隐藏在一些简单的感念之内,比如说 branching(是的,你的数据可以像 git repo 一样 branch out)。这种缩放自如且能够随时随地 branch 的能力,让 neon 可以用在很多即用即销毁的场景,比如面试,比如生产环境数据的测试,比如为每个开发者提供一个生产环境的数据库的副本。想象一下,你的每个 PR 都可以使用一个生产环境的 neon db 的 branch 做 CI,这是多么革命性的一步啊!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识分享
  • 开源项目
  • One more thing
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档