Anawaert 的 2024 年度总结

以项目或技术为单位,回顾 Anawaert 在2024年中的经历与收获

由 Anawaert 于 2025-01-06 发布   

Anawaert 的2024年度总结

前言

  许久未更新博客了,如今已跨入 2025 的年轮中,首先祝大家新年快乐,愿大家在新的一年里平安健康、心想事成、节节攀升。本文不讨论具体的技术话题内容,但是会以 Anawaert 这一年来经手的项目或学习的技术为单位,来聊聊这一年在计算机技术上有什么经历与收获。

项目 & 技术栈

1、WPF KMS Activator & Windows Presentation Foundation (WPF)

  既然能放在第一位,那么这个项目肯定是一位重量级。这个项目最早作为 WPF 的练手项目于2023年10月发布于 GitHub ,而选择做一个 KMS 激活工具而非其他程序也仅仅是为了满足中学时期,自己一路从 Windows XP 一路探索至 Windows 10 但也要一路激活这些系统,而自己能写出一个像样的激活程序的需求罢了。从 WPF KMS Activator ,我第一次领略到了 WPF 的强大——包括但不限于数据绑定、灵活的相对布局以及易用的动画效果,从这以后,我基本不再使用 WinForms ,倒也不是说 WinForms 的 MVC 事件驱动模式不好,但不可否认, WPF 的灵活布局实在是太好用了,基本上无需担心程序在高分辨率显示器下的显示情况了。

Original KMS Activator

  既然一开始是作为练手项目发布的,那么程序的功能性自然是比较单一的——无非就是帮助用户查了遍注册表找到那几个 VBScript 的位置,然后确定了 Windows/Office 的版本后借助 CScript 把激活命令执行一遍,然后就激活咯。但是,在我发现在2023年末至2024年初的一段时间内,我身边的同学有大量的重装系统的需求后,我决定完善一些功能,并修复Bug。至2024年中,它在我自己的电脑和一个 Windows 11 的虚拟机上表现得都非常好,包括自动续签、自动检查更新等小功能,系统信息也基本没有读错过。只不过,这些功能增添都只能说得上是小修小改罢了,项目的整体结构还是原来那样。

  但是到了9月份又一次开学后,偶然一次,在同学小G新装的系统上运行软件时,发现它压根无法正确识别 Windows/Office 版本信息,自然也无法运行激活了。国庆前的学业闲暇时间,我再一次开始学习 WPF ,并开始细细研究不同版本的 Windows/Office 的(注册表)信息差异,修正了一系列版本识别错误或者是激活执行错误的 Bug ,还顺手用 HandyControl 做了个自认为还算好看的 UI 。但就在这轮项目 Bug 修正的过程中,我发现项目越改越难改,因为在先前的代码框架中,我将 UI 和后端逻辑完全混淆,即完全耦合在一起,导致想往后端代码添加一些功能的时候,像是往两块强磁铁之间塞进去一张 A4 纸一样困难,而这正为项目后续的改动埋下了伏笔。

KMS Activator v2.0

  而在这段时间内,最重要的一个转折点出现了——我开始接受、认可并理解 MVVM 模式,并且通过一些小 Demo 项目来熟悉 MVVM 模式的一些基础写法——我的 WPF KMS Activator 从开发之初就采用完全的事件驱动模式,实际上就是在把 WPF 当作 WinForms 使用。至于为什么一开始还是采用 MVC 模式编写它,原因太简单了:不会 MVVM 啊……

  于是到了12月底,考试周结束后,我果断开始拉取一条新分支,以 WPF UI 控件库与 MVVM 模式完全重构了 WPF KMS Activator ,大量改动了曾经使用的代码,并大量利用C#的语言特新来书写代码。如今,在新分支上的 WPF KMS Activator 已经还原了旧版功能的70%,得益于这次重构, WPF KMS Activator 在未来或可顺利地加入所谓的“Ohook激活”或“HWID激活”。同时,我也对CommunityToolkit.MvvmWPF.UI以及 Microsoft.Xaml.Behaviors.Wpf等 Nuget 包有了相当的认知与使用熟练度,进一步加深我对 MVVM 模式的理解与使用程度。

Latest KMS Activator

  可以说,WPF KMS Activator 将会贯穿我对 WPF 技术学习历程的始末,它见证了我从“一穷二白”连XAML都不知道是怎么使用的,到可以把程序做的像点样子,见证了我从 MVC 模式到 MVVM 模式写全栈代码,见证了我从连《WPF 编程宝典》上的示例代码都看不懂到现在可以通过翻微软 WPF 源代码lepo.coWPF UI 控件库 的代码来找到自己想要的答案……因此,它为什么能作为2024年 Anawaert 的第一项目,相信各位读者心中也有答案了。

2、detection-py & OpenCV-Python

  准确来说,这是一个经手项目,它来自于我所在的实验室的计算机视觉与软件部门。实际上,负责该项目的还有我的一位老熟人 EverGlow ,他在本项目中主要负责语法查错与单元测试。

detection-py

  相信知道这个项目的读者们,都应该知道我曾经是一个完全的“C系列语言教徒”,在很长的一段时间里几乎只学习、推崇如CC++C#Java等和C风格类似的编程语言。但是,在2024年初的一个计算机视觉的C++项目中,得益于大量的、长时间存在、几乎无法解决的运行时错误,使我不得不开始思考计算机视觉类的项目,是应该注重编程语言的应用呢还是 API 的合理表达与使用。

  于是在2023年3月,我“破天荒”地开始学习并使用这门我曾今不屑一顾的语言Python——一门居然可以把变量在不同类型之间来回切换赋值的语言,一门连函数返回值都不检查的语言,一门带有 GIL 锁的语言……然而最后结果大家也看到了:真香!以上问题统统有解决方法,无非就是多写两句话的事情(变量类型注解,返回值使用is运算符判断等)。在这个过程中,我第一次对Python为什么能在 TIOBE 榜单上几年霸榜第一有了直观的理解:Python很好地将其它复杂的数据型/计算型学科与语言特性本身解耦了,换句话说就是,使用Python来搞机器学习、计算机视觉等项目,你完全不必担心由于这门编程语言你有不会的语法、特性而导致编写不出你想要的程序

  在完成 detection-py 之后,我对Python的语法、程序开发流程也基本熟悉了,Python视觉开发的环境配置也基本熟悉了。更重要的是,对 OpenCV 的Python API 有了更充分的了解,这对未来使用 OpenCV ,抑或是借助 OpenCV 库进行二次开发都有很好的经验积累。

  此外,从2024年10月起, Anawaert 新建了一个项目 unireo 。项目名字源于 uniform 和 stereo 这两个单词,意在将这个程序包用于所有支持 UVC 协议的双目摄像头。但很显然,目前还处于开发初期阶段,距离成熟可用可能还需要数个月的时间。而这个库实际上就是个“调包侠”,只不过是将 OpenCV、Ultralytics、Numpy 等计算机视觉库 API 进行了内部简化集成,比如说将双目相机的标定与立体匹配的代码简化至10行内即可使用,或仅需1-3行代码即可轻松获取 ONNX 模型的推理数据。那么为什么我会想做这么一个看似重复性的工作呢?答案便是上文提到的非Python软件开发者应该专注于他们专业内的事情,而不应过多关心Python语言自身的编写问题,所以简化编程流程,实现通用效果就是这个项目的意义。

  综上,detection-py 便是我在计算机视觉与深度学习领域的入门小测,让我对这些稍微前沿一些的学科领域能初窥门径,并稍微理解它们的意义。当然,在技术之外,在这个项目的参与过程中,在我所在的实验室也发生了许多故事,非常鲜明地反映了当代学生/学术圈的有趣现象。碍于篇幅原因,本文不予赘述,感兴趣的读者可移步至我的树洞站,当个茶余饭后的谈资就好。

3、Anawaert-Blog & Hugo

  要说2024年与以往相比变化最大的一点,莫过于这个网站了。其实在很久以前,我就有打算建一个属于自己的网站,但碍于建设网站的投入以及前后端技术栈的选择,一直迟迟没有定下来。直到今年年初,我一直在关注的 .NET 技术UP主 十月的寒流 公开了他的技术博客后,结合我平时的一些活动与爱好,决定学他一样搭建一个类似的博客网站。一开始想使用ASP.NET + IIS 进行搭建,但考虑到管局审核外加我实际上并不需要很多动态、即时性的内容,最终还是选择了和寒流老师一样使用 Hugo 作为Markdown渲染器,但服务器托管依然由 IIS 进行。

ColdWind’s Blog

  但是 Hugo 是一个由 Go开发的Markdown渲染器,若要生成自己的定制化网站,必然要编写不少 Hugo 模板,或者是修改不少 Hugo 主题的模板。Hugo 模板大部分都是HTMLCSS外加一些 Hugo 的语句,那个“味儿”对于我一个长期搞后端或者是业务逻辑的选手来说十分陌生。但没有办法,既然已经选择了做一个网站,服务器也买了,文章也写了,总不能又回去 GitHub Pages 吧。抱着背水一战的心理,我开始边查 Hugo 文档边问 ChatGPT ,然后一边修改 Clean White 的模板。从5月中旬起到5月底,终于是把相对定制化的网站内容做了出来,并且发布到了服务器上。

Anawaert Blog

  在5月的这段时间中,我对“绝知此事要躬行”有了非常深刻的理解,特别是在自己曾今没有涉猎过的领域,看十几遍教程、手册或者是文档都比不上照着这些资料亲自实现一遍然后再独立复现一遍的效果好。最明显的就是 Git 命令,看十万遍git addgit commitgit pushgit checkoutgit branchgit merge等命令都不如自己建一个小仓库,随便写点代码然后玩一遍上面的命令记得清楚。没开过网站的人永远不知道管局和公安审核流程的繁琐,也永远不知道 IIS 证书老是过期被吊销的烦恼——唯有实践出真知!

  如今,为了不同的功能,我的网站被拆分成了几个部分,分别是 主页(暂未竣工)、博客文档(暂未竣工)和 树洞(非开放)。希望在未来,我的网站可以在除了展示作用外帮助到更多的人,包括但不限于技术、现象的思考与情绪价值等方面。

Anawaert 的2024年的年度总结与2025年的计划与展望

  总的来说,我在2024年中收获良多,不论是技术层面上,还是社会实践,抑或是社交人际上,都有了独属于这一年的特别感触。在此非常感谢我的家人与朋友们,是你们的支持与鼓励,让我能不断在软件工程的研究上推陈出新(我都不好意思说是研究,其实就是不懂瞎玩);也非常感谢我的实验室部门成员以及实验室总负责人,为计算机视觉与深度学习的项目提供了必要的设备与资源支持。

  在新的一年里,由于笔者自身可以预见的考试与升学压力,Anawaert 将不得不逐步放缓更新频率,以全心全意备战。但是 Flag 总该是要立的,希望今年内, WPF KMS Activator 能更新至与 HEU KMS Activator 平替的水平;unireo 项目能投入正常使用,或成为实验室的视觉开发实例;在寒假期间,主站与文档站能正常展示并浏览;若还有空闲时间,看看继续做个格式转换器玩玩,没错,就是那个跳票了的 Anawaert FormatShop ……

  愿我们所有人在2025年都可以实现自己的小目标,学有所成、各得其所、顺心如意。