小松的技术博客

六和敬

若今生迷局深陷,射影含沙。便许你来世袖手天下,一幕繁华。 你可愿转身落座,掌间朱砂,共我温酒煮茶。

2021 年终总结

朴实无华的又度过了一个春秋。好像做了很多很多的事情,好像也没做成什么事情。

工作

今年主力还是在微信听书 Android 开发上,基本上每半年都一个大开发节奏,今年也是如此。上半年重点在音频多人录制的开发,下半年播放器大改版。与之相伴的就是我们一直在做 KMM 跨平台的事情。录制这个需求,业务逻辑是全部写在 KMM 上,原生端只是负责 UI 和 录音的 SDK 开发。到了下半年,因为播放器产品形态的大改版,我们激进的把几乎所有业务逻辑都迁移到 KMM 上了,然后 UI 用 RN 承载,目标基本上就是把 native 架空, 使得业务逻辑 RN 与 KMM 直接对接。除此之外,我在项目中引入了 Compose, 强制组员们用 Compose 去写还需要用原生承载的 UI 以企图加快 UI 开发的效率。所以微信听书的技术架构绝对是非常前沿的,但问题也出在这里,技术架构的构建与产品节奏出现了冲突,我们的技术愿景在当前的人力面前没办法那么快的实现,然而产品期待的是快节奏迭代以期待有好的增长。虽然我们疯狂的加了很多班,但是产品节奏依旧被拖慢了,虽然架构最终成型了,但是在疲惫之下,也就那样。

如果让我再做一次选择,我还是会这样做,我总是期待我做的架构是完美的,所以在平衡产品节奏与技术架构时,我会不自觉的偏向后者,如果不能满足产品节奏,我会用很多的业余时间去完成我想要完成的coding,回想一下,基本上 QMUI 的 80% 功能都是我在周末写出来的,所以身体顶不住了,今年基本上没有在周末为技术投资,所以今年 QMUI 没有更新,也没啥其它产出。

年末的时候,在讨论如何加快读书 UI 开发效率时,我给出的建议是尽早学习与使用 Compose,把复杂的 View 体系和 QMUI 慢慢全都抛弃,也借这个时机,我与读书的一位同事换了下组,他来做听书,我回去读书。 从墨水屏开始,我用几天的时间引入 Compose 并重写了复杂的书城界面,抛弃了原本巨复杂的 vlayout 实现,用此来向团队证明, Compose 是可以极大提升开发效率的,是值得投入学习的。现在也终于有更多的人把 Compose 用起来了,真是不容易啊。 除此之外,我的职责从负责听书的开发节奏到现在的加速团队开发效率,我面对的是其他开发人员提出的痛点,负责组件封装,解决一些历史遗留的难题,所以最近我做了一下几个事情:

  1. 为 RN 重新设计了 Modal 组件并实现了 Android 端的开发,修复了官方组件的各种不足,所以现在读书和听书 RN 可以把浮层等各种需求都接管了。
  2. QMUI 提供一次启动多个 Fragment 的需求,彻底解决读书经常需要一次性调多个界面,但是不想看到中间界面的动画的问题,现在正在做一次性处理多个 scheme 的功能。
  3. 开始了 QMUI Compose 版本的开发,重新思考了下 Dialog, Popup 的开发,我决定开始彻底舍弃用 Window / PopupWindow 去做浮层, 这样就可以完美避开他们的各种奇葩问题。

这些天,我做的比较轻松,也相对比较开心。

在工作之余,我一直在思考如何提升 RN 的原生端渲染效率,总共经过了三次 Demo 尝试:

第一次年初是觉得 View 体系不行, 那我换成 Compose 体系, RN 搞了 JSI、TurboModule 等, 或许我直接用 C++、Kotlin、协程、Compose 全部接管 RN native 端, 会有很好的性能,并且会比 RN 所宣传的下一代更快做出来并且性能更好。因为毕竟 RN 有了很重的历史包袱,而且看他们的的 Java 代码实现,也可能开发对 Android UI 甚至 Android 都不是很熟悉,设计得挺一般。 不过 RN js 端的 diff 用 Compose 实现后就是个累赘,而且事件派发搞起来挺复杂, 所以我把 Demo 做出来后,觉得这玩意儿 RN 的 js 端实现太蛋疼了,就没继续往下搞了, 这个 Demo 反倒让我对 c++ 熟悉了不少,面试别人时可以勉强伪装下。

第二次是年中和同事讨论时突发灵感, Compose 的写法和 RN TS 端的写法已经非常相似了,我可以把 TS 通过 babel 转成的 ast 结构直接存下来,然后在 Android/iOS 端实现一个 ast 解析器,用 Compose / Swift UI 去承载 JSX 语法,因为写法相似,所以解析器写起来也比较容易,主要实现一个表达式解析就好。 按着这个思路,我和同事分别实现了 Android 端和 iOS 端的 Demo,并且可以接入简单的业务使用了, 但是 SwiftUI 太糟心了,有很多 bug,让我们的 iOS 开发都无力吐槽了。并且 leader 问了一个高深的问题:你的解析器如何证明是图灵完备的? 这顿时让我懵逼,有点超出我的知识范围了。

第三次是年末的时候回家路上乘坐飞机时突然想到的方案,还是承接第二次与 leader 的讨论,将语法部分抽取出来用 wasm 实现, compose 来负责渲染。当时讨论后,并没啥思路不知道怎么做,然后在旅途中突然就想到了突破口,然后构思了整体,回家办完事后就做了尝试,写了个 Demo, 找了个 wasm 解析器,然后用 rust 写 UI, 编译成 wasm 后,最终在 Android 里跑起来了。 这里主要用了 rust 的一个特性来做的,否则还真不好写, 有时间了我把 demo 整理下分享出来了(有时间约等于基本上不会做), 用 rust 写 UI, 听着挺屌的, 实际上写 rust,前期难受的一逼。 这个构思就这样了,demo 跑起来了,我就满足了, Just for fun,那 wasm 解析器有点差,要想做成一个可用的东西,需要搞的东西太多了,心有余而力不足。

学医

我喜欢编程。但是这几年的作息昼夜颠倒,自己的作息已经乱了,所以身体崩溃很厉害,有因为产品节奏太快,也有自己不做完某些东西不罢休的执着。

作息调整太难了,经常晚上突发性的事情乱节奏,就导致那一天会超负荷工作,结果就是更惨。 自己也给自己开方调理过,起效,但是往往又容易被某一天突发的超负荷工作打回原形,难搞。

也因此,今年我非常有意识的强迫自己不去看技术性的书籍,不去追逐技术的沉淀,周末远离技术,删除了手机上的知乎、掘金、微博、抖音等 App。 深夜疲惫的时候很容易想刷点抖音、微博放松下,结果除了空虚的时光消耗,其它的什么都没有,不如全都删掉。

所以 2021 年我一本技术相关的书籍都没有看, 闲暇的时间就是睡觉、看医书, 偶尔玩点游戏看点小说。 我也把我的微信读书墨水屏用起来了, 用它来纯粹的看书,还是慢舒服的,看的书无非就是《四圣心源》、《伤寒论》、《金匮要略》。今年看得最久的就是娄绍昆的自传《中医人生-一个老中医的经方奇缘》,是精彩的人生故事,也是很多精妙绝伦的中医讨论与思考,让我对中医的学习实践有了更多的认识。

今年看书,更多的还是在于理解,现在很多条文看起来是很熟悉了,但是不全面,缺乏对比与归纳。 所以 2022 年要立 flag 了,要把 《伤寒论》、《金匮要略》的经文、方剂背下来。用一年来做到这个事情其实不难,分摊下来其实一天就两条经文一条方剂而已,但就是要看自己能不能坚持下来了。再远离一点编程,我应该可以做到。我也有过几次实践,虽说效果不是特别出众,但总归是正向的,有的疗效还比较好。2022 年也要更大胆一些。儿女性情,英雄肝胆,神仙手眼,菩萨心肠。(章次公送給朱良春先生的印章所刻)。

分享下张简斋先生的对联:

不谏往者追来者 尽其当然听自然

(往者不可谏,来者犹可追) (事但观其已然,便可知其未然;人必尽其当然,乃可听其自然)

除了工作、看书,生活中的琐事可谓是一团乱、一团糟,哎,就这样吧。

2022 年,没啥目标,择时,休息一段时间吧。

←微信← →支付宝 →