--- title: 再见 2022,你好 2023 date: '2022-12-31' tags: ['总结'] draft: false summary: 2022 年就要结束了,写个工作与学习的总结,记录下我的 2022 年。 --- 二零二二,疫情不出意外地还在我们身边,而我们也早已经习惯了疫情。 ## 电子电路与嵌入式开发 我一直对电子电路有着兴趣,而今年三月,我突然觉得我行了。购买了仪器和工具设备,开始自学电子电路知识。 软件开发一直和数字电路有着密不可分的联系,草草地学习完模拟电路和数字电路后,更加肯定软件和硬件不能独立,而是相辅相成的。 而我的第一个目标是构建一个锂电池 UPS,为的是让充当服务器的 J4125 工控机能从容应对突然的断电。 项目我拆分了好几部分,一个阶段,一个阶段地完成,向着目标努力。 印象比较深的还是第一个部分的实现。第一个部分是实现一个理想二极管。 所谓理想二极管就是电流单向流动,并且(几乎)没有普通二极管的压降。 还记得我开开心心地在各大电子电路论坛爬楼找思路时,找到了个方案,在电路模拟软件搭建好电路后,运行了模拟,结果挺有效的。 我就赶紧画电路板打样了。等待样板寄来的包裹的这几天,我思来想去这电路好像不应该有效啊,换了个模拟软件一跑,坏了,不对。 接着就在洞洞板上做实验,果然,效果不对,压降那叫一个大。 最后这样改方案,画了第三块板后,终于实现了这一电路。果然实践才是检验真理的唯一途径,三个月从零搞出这么个东西,其实没啥,但是过程确实有趣。 就这样,边学边试,软件和硬件都验证完了,过程充满松香味。 不过可惜的是,半年后的八月,我换了 AMD 迷你主机,UPS 设计供电已经不满足新主机的要求,项目搁置了。 电路的理论论证和各部分的功能验证板已经实现了,外壳也已经设计好了,但是还是没继续往下走,因为当时工作上发生了一些变动,就没余力折腾了。 之后又开始折腾屏幕氛围灯,挺有趣的,不过还没做完,目前一周也就花几小时在边学边弄。 我能想着开始折腾电子电路,还是因为国产单片机的崛起。 乐鑫公司的 ESP32 系列单片机真的是物美价廉,白嫖嘉立创的 PCB 也非常的香。 学习成本就低了很多,想想去年我入手的树莓派 4B。当时也有考虑折腾物联网,但是一个三四百,也只适合当个上位机干活了。 而现在用着 ESP32 模组和开发板,烧了也不心疼,嘿嘿。 嵌入式开发是一个陌生的领域,C 语言是一个上古的高级语言,而天天写着现代高级语言的我,一时之间回不到大一时写 C 语言的感觉, 所以用了一段 C 语言做嵌入式开发后,我看上了 C++。或许是 C++ 没看上我,编译器报错我是一个也看不懂,所以我想起了 Rust。 Rust 比着“耶”向我招手,我大意了,就进了这个跟大的坑。 Rust 语言确实费脑子,因为开发过程中将会被编译器一直教育,非常地严谨。还记得我被引用变量的生命周期教育得死去活来,被结构体没有实现 `Copy`、 `Send`、`Sync` 折磨得痛不欲生。 其实本来没这么复杂的,可是我却拿着嵌入式开发和 Rust 一起学,难度不能说陡增吧,只能说是经常看不到明天的太阳。 不过我还是磨出来了 UPS 的程序,还行,能用。之后开发屏幕氛围灯就滚回去用 C 语言写了,还别说,嵌入式开发我也学出了点感觉,写起来可亲切了。 因为示例多、论坛上的开发者主要也是用 C 写,资料很充足,也没有那群还在 0.0.x 版本的 Rust 库,感觉代码好写多了…… 但是我贼心不死,拿着 Rust 转眼就配着 Tauri 开始开发氛围灯的上位机程序。 不知是没有了 rust-embedded 系的折磨,还是我懂得了 Rust 的脾气,开发得比较顺利,很舒服。 嵌入式的世界非常的美妙,将虚幻的软件借着硬件能更真实地让我们触碰到。 看好 IoT,这是极客们的方向,也是科技改变生活的方向。 ## 元宇宙 年中因为业务调整,我的工作和元宇宙搭上了边。年中出去嗨皮了一周后,回来就开始学习 Unity 3D。 不得不说,国内疫情防控挺好的,走了好几个城市,回来也没阳,哈哈。 跑题了,不得不说,Unity 3D 作为入门 3D 游戏开发确实挺合适的,虽然我们当时本想着用 Unity 开发元宇宙项目。 正当我在庆幸我还没把 C Sharp 忘光光时,又被要求换成了现在正在使用的 Three.js 作为引擎,也就回到了 Web 领域。 接下来的半年,我和我的同事们便开始踩坑之旅。 因为是全新的领域,我和我的同事经历了 Unity 3D、Lingo 3D、r3f 这三个阶段,踩了许多的坑。 不知为什么,他们似乎对游戏开发好像并不觉得是全新的世界,极其低估了所需的知识储备。 现在回头看,每次的技术选型其实都不合理。 Lingo 3D 作为刚出现的框架,并没有经过市场的检验,也并没有基于该框架商业项目,使用这个框架和二开这个框架并没有什么区别。反对无力,作罢。 当我向 Lingo 3D 提了一个 PR 后,同事就抛弃了 Lingo 3D,转向 r3f + BVH 碰撞检测。 而接下来,继续遇到了大量的性能问题。 从项目开发的第一周起,我就有一个 3D 场景渲染性能优化的任务挂着。 不过滑稽的是我的开发任务基本上在 WebRTC 相关部分和后端,而前端游戏场景渲染这部分并不是我开发的…… 虽然处于尴尬的位置,优化是没处优化了,但是问题还是能另起项目去发现和验证。 我断断续续地折腾这事,现在回头看看,其实得出的结论挺正确的,但是当时没人懂也没人信,我也是半验证半猜测,没想到正确率还行。 - 游戏开发确实很考验建模师的素质,调优后的模型性能直接翻倍; - 模型拆分、复用、LOD 是真的有明显的性能提升; - 内存瓶颈是存在的,降低内存占用量能够让程序更稳定。 可惜当初领导没认可,所以问题一直没很好地解决。现在我也拿着新写的 Demo 带着数据验证了上述方案的可行性,后续就看安排了。 虽然我对元宇宙没啥兴趣,不过可视化这方向是很有价值的。 看好元宇宙的风口,也看好可视化的前景。 ## 自建服务 八月换了新的迷你主机作为服务器,依然使用移动平台的 CPU,性能和功耗还可以。 比之前的机子性能好太多了,当然,满载时也学会芜湖起飞了。 我也多部署了几个服务。 ### RSS 阅读器 现在信息茧房问题挺严重的,所以使用 Miniflux 自建了 RSS 阅读器。目前搜寻了一些个人博客、小众资讯站作为资讯源,感觉挺好的,没有乱七八糟的内容,很舒适。 ### 标签打印机和短网址服务 另外,买了一个标签打印机,配合短网址服务 Kutt,给我买的一堆电子元件做分类打标签。标签上带了个二维码,里面存了描述元件信息文件的超链接地址。 ### 日志分析服务 最后,因为部署了太多服务,自建服务又容易挂,所以跑了 Grafana + loki 用作日志分析服务。再配合在云服务器上部署的 Kuma 服务健康监控服务,目前服务状况了然于胸。 我还购入了国内的 NAT VPS,做内网穿透和 SD-WAN,比使用境外服务器快太多啦,还稳定。 公司网络不太稳定,直接组网性能经常断线; 使用 VPN 拨入 NAT VPS 后,再由 NAT VPS 与家里组网,就没在掉过线。 现在从公网访问我的自建服务是由从境外服务器反向代理的,延迟比较大。 目前域名重新备案,希望能套上国内 CDN,这样再由 NAT VPS 反向代理应该能改善国内访问速度。 ## 开发容器与远程开发 那么,我为什么要组网呢,更大原因还是我想进行远程开发。 我在公司使用的是毕业时买的 Macbook Pro 2018 款,性能其实还不错,但是跑测试用例还是有些慢。 而且我今年也拥抱了 Dev Container 的开发方式,开发容器能很好地解决开发环境搭建问题。 再配合上数据库迁移脚本和数据生成工具,能极大地解决前后端开发时出现的数据污染问题。 可谓是 2022 年我最正确的选择了,哈哈哈哈。 这个选择是有代价的,那就是每开发一个项目都是有自己的持久化、缓存和应用组件,比较消耗硬件资源。 这不就换了个迷你主机嘛,AMD yes! 因为在家里,所以就搞起了远程开发,家里网络质量也比较好,拉依赖什么的速度和稳定性比在公司高出了不少,这也极大地改善了我的开发体验。 要说这远程开发有啥不好的,那就是怕家里突然断网断电,那就有可能痛失劳动成果了。 开发容器是个不错的东西,今年看很多开源项目都用上了开发容器,也有很多开源项目还没用上。 但很明显,这是未来。我今年在开源社区也算是小小地冒了个泡,无论项目是否有开发容器的配置,我都会拉完项目后在开发容器运行,不用担心弄乱我的电脑,也不用担心环境冲突。 而且最重要的,是不用那么担心去年的项目今年怎么也跑不起来。这感觉,经历过的都懂。 最后,洁癖万岁~ 比较可惜,VS Code 的 Web 版本还不能支持开发容器,要是支持了,在 iPad 上快乐生产是多么值得的一件事呐。 ## 未来可期 以上是我在 2022 年的经历,有些是我的计划,有些是命运的安排。贴近底层、满足兴趣,让我接触了嵌入式开发,意外的变动让我接触了 3D 游戏开发;心心念念的 Rust 终于安排上了,为了修自建的服务而改起了好几个 Go 语言项目。回顾过往,我已经摸了好多好多门编程语言了,也换了好多口味的编程风格,也大概摸清了自己向往的方向和风格。希望能够继续用着 TypeScript 和 Rust,快乐地写着后端,玩着前端,搞着偏后端的全栈开发,在 Arch Linux 上维护着服务。我可见不得 Java 和 PHP,希望依旧再也不见。对,还有 Python,我和你不熟,可别过来。