10 KiB
title | date | tags | draft | summary | |
---|---|---|---|---|---|
再见 2022,你好 2023 | 2022-12-31 |
|
false | 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 是真的有明显的性能提升;
- 内存瓶颈是存在的,降低内存占用量能够让程序更稳定
虽然我对元宇宙没啥兴趣,不过可视化这方向是很有价值的。 看好元宇宙的风口,也看好可视化的前景。
自建服务
八月换了新的迷你主机作为服务器,依然使用移动平台的 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,我和你不熟,可别过来。