2022 年度目标
- 被美国一所大学录取,赴美留学
- All in Web3, Be a builder
- 培养写作习惯,创立个人学习分享 IP
- 培养阅读习惯,每月至少阅读 1 本书
- 学习后端编程语言,Python 为主,C++为辅
自评: ★★★★☆
最满意的四个成就
- 成为了 Web3 builder
- 做出了有人用的开源项目
- 靠自己努力来到美国念书
- 通过写作影响了一些人
工作
Suiet Wallet

Github 仓库: https://github.com/suiet/suiet
和本科朋友组团队,从 8 月开始投入,做到 12 月已经成为 Sui 钱包生态的 Top3 ,推特粉丝数破 100k 。
- 前期主要负责前端的架构设计和主要的页面实现。
- 中期开始针对Wallet Standard进行实现、推进各 DApp 接入,优先支持他们的开发需求,占据主流产品的前列位置。
- 后期主要是迭代与修 bug ,也开始深入钱包底层原理。根据巴比特的开源文章学习底层技术,了解到所谓钱包其实就是本地的私钥管理和签名工具,配合与区块链交互的 RPC API 即可实现良好体验的钱包应用。
通过开发钱包 Chrome 插件,我的前端整体架构能力得到锻炼。Chrome 钱包插件的架构涉及跨上下文通信,主要利用 service worker 实现类后端服务,通过Chrome Messaging 机制建立通信通道,封装成 JS Bridge 来给前端 UI 弹窗提供 API 。存储则是利用 IndexedDB 存储持久化数据,Persist Redux + Chrome Storage存储内存数据。

在 Wallet Standard 的实现过程中,整体交互还是比较复杂的,涉及主体有:DApp 网页环境、Chrome Content Script 沙盒、钱包 Service worker 、钱包 UI 。光这块的消息传递就很麻烦:DApp 网页环境与 Content Script 沙盒环境是通过 window postMessage 广播传递消息,这里我 JS 事件编程利器RxJS把广播收发包机制包装成类似 RPC 函数调用(屏蔽底层通信细节),实现独立连接的效果; Content Script 与 Service worker 又得通过 Chrome Messaging 来通信。
其次是 wallet-standard 的自动检测钱包适配器的机制实现。本质上就是 DApp 引入包含 wallet-standard 的包(如 suiet wallet kit),然后 wallet-standard 会开启一个特定事件监听 register-wallet listener ,wallet 们各自在页面加载后触发注册事件,注册符合 standard 的 adapter ,从而完成 DApp 对钱包的 auto-detection 。

Suiet 是我们团队第一个作品,凝结了我们对 Web3 的期望和激情。Team Work 的过程中我不仅是技术上得到提升,和不同领域的伙伴协作也是拓宽了我的眼界。币圈里做技术的人良莠不齐,很多基建也是不太可靠,开发体验远不如 web2 。但反过来想,这正是我们年轻工程师的机会呀,把 web2 里锤炼过的技术,再注入对 web3 的热情,Build here a bette world 。

投入度:★★★★★
产出度:★★★★★
影响力:★★★★★
Suiet Wallet Kit

Github 仓库:https://github.com/suiet/wallet-kit
Wallet Kit 是我们做钱包的副产物,初衷是抢占与 dapp 合作的机会,通过 all in one 的钱包连接管理套件助力铺开我们钱包。这块由团队其他两个小伙伴完成初版的搭建,那会儿文档不太完善,可配置性也不尽人意,接入效果并不好。在 wallet-standard 之后,因我比较熟悉其整体逻辑,我开始着手重构 wallet kit ,主要围绕条件判断逻辑冗杂与可配置性这两块做优化。
造成第一点条件判断冗余的背景是:钱包适配器们对 standard 里 features 功能的实现不尽相同,甚至是缺失的。于是我抽象出一个通用适配器接口和实现类,底层基于 wallet-standard 约定的函数调用方式+自定义错误处理将异化逻辑包裹起来,这样做能够保证暴露给用户的函数签名是一致的,优化 DApp 开发者的体验。
第二点可配置性,作为 React 插件包,我们既提供了 Hooks 又提供了 UI 组件(按钮、弹窗),这对于开发能力较弱的团队来说是很方便的开箱即用,但是,对于大一点的团队,他们对 UI 的定制要求很高,甚至是只用我们的 Hooks 逻辑部分,UI 用自己的。
所以,我首先针对暴露给开发者的 Context 上下文进行了重设计,把钱包项的配置列表以及从浏览器中自动检测到的钱包项都提供出来,有助于开发者们构建自己的钱包选择器 UI 。其次,我支持了钱包预设选项的传入,让开发者能自己决定要展示的预设钱包列表和排序。
在重构的过程中,我学到一个很重要的经验,那就是「向下兼容」!做任何破坏性的更新,一定给已经在用的开发者一个接口的平稳过渡的时间,否则开发者一更新你的包,发现原来的函数改掉了或者直接没有了,项目因升级而运行失败是很糟糕的体验,更何况币圈的开发者能力有得真的弱到让人大跌眼镜(比如文档写的清清楚楚但是还是跑来私戳你要怎么做)。正确的做法应该是:如果可以做到只加参数而不影响旧的功能,那就直接改;否则,将旧的接口标注为 deprecated ,并行启用新的函数接口,并且写好 migration 迁移文档,设定合理的弃用时间节点并告知开发者们。
最后我还把我们的文档给翻新了,用更有趣的方式来介绍用法。我发现我对 emoji 风格的文字叙述还挺在行的哈哈。

Anyway, 这是我第一个有项目在用的开源项目:Github 20+ repo 的引用,以及 npm 周峰值 800+的下载量,完全超出了我今年定下的要为开源社区贡献能力的目标~好有成就感,哈哈!


投入度:★★★☆☆
产出度:★★★★☆
影响力:★★★★☆
Let.sh
Website: https://let.sh/
Let.sh 是我和 lzb 第一个合作的项目,是一个 all-in-one 的开发部署平台。支持如 static files 和 web 服务的一键命令行部署(类似 vercel ),并且支持如本地内网穿透、部署后的 metrics 检测等 features ,是比较适合个人开发者的开发工具。
最初是因为想直接集成 Arweave做 Web3 永久存储的一条区块链, 打他们的 hackerthon 来入圈。于是我们在 let.sh 原有的逻辑上增加了静态文件部署至 Arweave 链,实现所谓真正的 DApp ( Decentralized App 去中心化应用)。但是实际并不好,1 是每次部署都要扣 gas ,2 是部署和访问都很慢,比不上 web2 体验,主要受限于 ar 链的出块共识机制以及通过 ipfs 做路由寻找 peers 的速度。

另外还增加了文件树与预览的新特性,树组件真的是前端做页面少数要用到算法的地方了 2333 。

除了搭建系统之外,还做了一些跨领域的尝试:
- 横向调研相关 deployment 的 Web2 、Web3 PaaS 产品
- 初次接触 pitch deck 概念,了解基本流程
- 制作全英文演示视频 for AR Demo Day
这是一个我挺喜欢的产品,lzb 这种本想着做给自己用结果发现可以发展成 side project 的技术热情,我挺佩服的,也要向他学习呀。
投入度:★★★☆☆
产出度:★★☆☆☆
影响力:★☆☆☆☆
其他
- Leetcodes:从 12 月开始才正式刷 leetcodes ,找到了 labuladong 的刷题教程,把算法解题总结成框架与套路,真的能做到举一反三;而且它做到完全免费开源,这点非常 respect !(我今年也有在考虑做免费的开源教程哦,教大家做些能顶到实习里的入门前后端项目,期待一下吧)希望能在一月份跟着他把有代表性的 200 题刷完!
- 小游戏 Web 发布系统:在 TME 时期做的内部静态资源发布系统,也是我离职前的最后一个项目,第一次尝试用 vue3 来做,挺有意思的,界面和交互上我也花了点心思;和 Milu & 显维大佬一起开发,还是要和技术好的人一起做事学的快呀!
- Magician 教学管理系统:和一个魔术培训的朋友讨论做一套教材管理系统,解决企业培训机密材料容易泄漏盗版的痛点。做前后端全栈项目,用的 antd pro+strapi cms ,结合腾讯云的 ppt 转 html 的云服务,实现了 ppt 云端存储与 web 端播放的能力,既然能做到 web 那就能加入鉴权了!可惜,这个项目最后因我工期无法排期而夭折,并且说实话我目前一个人做全栈还是有些吃力,主要是后端的设计还是嫩了点。真对不起我的合作伙伴呀,没有说到做到。希望新的一年,可以成长为名副其实的全栈开发者。
学习
学业
入学研究生前后,在专业方面重新做回学生,静心打基础:
- 7374 - Fundamentals of Networks:成绩 A ,班级第二名,把计算机网络从应用层到数据链路层扎实地学了一遍,喜欢 Dimitros 教授一丝不苟的教学风格,但 workload 非常重,期末考前一周还在赶它的大作业。我甚至收到了他的 phd 邀请!下学期还选了他的 project 课,先进他的 wireless 实验室一探究竟吧!
- 7205 - Fundamentals of Engineering:成绩 A-,妥妥的算法课。华人教授,讲课不太用心啊,课上学到的很有限。但是作业和考试都非常有挑战,直接拿 google 算法面试题来当作业也是吊的不行。但是被锤了之后还是回顾了不少算法基础,对刷题很有帮助。
- MIT CS Online Course:暑假上了几节 MIT 的公开课,没坚持下去,纯当练听力了。
- English:英语能力大大提升!通过开学参加的 Hackerthon ,得到了好多用英语听说读写的机会,果然环境就是最好的语言学习要素。
Web3
- Crypto Wallet:学习了区块链钱包的底层原理。
- Sui & Move: 学习了Sui 区块链的设计特色以及其智能合约语言 Move 的基础,没有深入学,2023 年应该会重点去学,毕竟要在这片土地开拓事业!
- 币圈基础:强烈安利币圈李白老师的 Youtube 分享,很务实的技术讲解,把什么是区块链到里面的设计细节都讲的明明白白,从小白到入门就靠李白老师的视频!
阅读
- Introduction to Algorithms - Third Edition:算法教科书,从学术的角度来学算法,各种数学证明还是挺头疼的,但是会对算法的正确性和精巧有深入的理解。
- Computer Networking - Kurose Ross:网络教科书,讲的很好,还附带许多 Wireshark 实操实验,是入门计算机网络的好书。
- Tokenomic paper:了解了什么是币圈项目的 tokenomic (代币经济学),本质就是其对应虚拟货币的供给与产出的机制设定。货币供给如何分配:团队、投资人、社区的比例;货币如何产出,限不限量,如何发行如何销毁。大致就是用白皮书的形式来阐述项目所对应的虚拟资产该如何运作,来更好地激励整个社区与项目持续壮大。
- EIP ,BIP: 阅读了有关以太坊和比特币的 improvement proposals ,相当于行业规范一个的存在。从本质去理解了何为 Token ,何为 NFT 等概念,对开源社区的协作方式进一步体悟。
- System Design Interview:在看的系统设计面试书,里面介绍了系统架构该如何演进地去设计,并且提供了很多不同的案例,感觉是很棒的书,适合要转后端的我。
- 《重构》:已经看过的代码指导神书,再次翻开,却迟迟没看完,羞愧。
- 《图解密码技术》:在看的课外知识拓展书,讲计算机密码学发展历史,以及各个密码原理的讲解,有意思的一本书,还在看。
- 《算法图解》:上 7205 的课时候求助于它理解动态规划,是本有趣的书,python 实现也好理解,打算抽时间把他看完。
- 《鲁迅全集》:在 11 月国内 zz 动荡的时候,结合 b 站 up 主智能路障讲解的鲁迅系列,心血来潮看了其中几章经典的如《狂人日记》、《孔乙己》、《药》,鲁迅先生的振聋发聩的文字给我很大的鼓舞,要兀自地发光,摆脱冷气,向上走。目前电脑旁摆着鲁迅先生的头像,激励我每一天。
- C++ Primer Plus - 6th Edition:看了一部分的 C++经典教材,做网络那门课的时候回顾 C++用,当工具书来用了,不会了就来查查。
写作
- 2022 年度总结破与立
- 周刊 02 |不瞒你说,我其实是 MIT 的学生
- 周刊 01 | 两个月搞定美国研究生申请?我居然做到了
- 周刊开刊|开窗便有拂面风
- 暂别啦,鹅厂和 TME
- 2022 ,Round2
2022 在写作上是有突破的!开启了个人公众号,学着技术偶像Airing 的 Weekly 周刊,也开始写周刊,并且写出了一篇爆款文章"暂别啦!鹅厂&TME",分享了自己如何在大厂工作和出国留学中做抉择的心理历程,4700+阅读还有 184 点赞,只发了一条在自己朋友圈,完全就是自然增长哦(比如朋友转给他们的朋友看)。非常意外触动到许多和我一样被互联网卷得不舒服的朋友们,他们纷纷来私戳我,说看了我的文字很受触动,佩服我做了他们还不敢做的事,也收到了很多祝福。我才体会到,原来文字真的能传达勇气和力量呀! 2023 ,也请继续保持写作,用知识和故事影响更多人吧!


细数 2022 ,我做了很多新尝试,建立了自己的 crypto 团队,做出了一些不可思议的成就。技术的增长还是主要在前端这块,但是今年已经踏入了 web3 ,增加了对区块链的理解,并且还做了许多跨领域尝试,希望在2023 能够保持对跨领域的热情,并且把根在区块链和后端扎的再深一点,逐渐转型为后端工程师,理由嘛,当然是不满足于只跟浏览器打交道咯。
2023 还有一个很大的愿望,那就是通过自己的知识去变现,为他人提供价值,很大胆的想法,希望能做到!
最后希望自己在新的一年,能够更聚焦少数领域,成为某个领域的专家,再努力自律一点,把影响力再扩大一点,把收入再增加一点,再爱生活一点!
PS:最后贴一下我的公众号,顺手关注一波吧!

