🏠 HomeLab:中年男人之友
未读中年男人的三大爱好:充电头、NAS、软路由。这三大爱好不仅为我们的生活带来了便利,也成为了我们生活的一部分(🤡)。 作为一个软件开发者,我一直梦想着拥有自己的服务器,而 NAS 和软路由则是我通往这个梦想的桥梁。 自从购买了我的第一台 NAS 以来,便打开了一扇新世界的大门。NAS,即网络附加存储(Network Attached Storage),它不仅提供了一个安全的数据存储解决方案,还让我能够实现数据的备份和共享。随着时间的推移,我陆续购买了其他硬件产品,如软路由器、服务器等,逐步搭建起了属于我的 HomeLab。 今天,我想和大家分享一下我搭建 HomeLab 的过程,希望能够帮助到那些同样有志于搭建 HomeLab 的朋友。在接下来的博客文章中,我将详细介绍如何选购合适的 NAS 设备、软路由器以及服务器,并分享我在搭建过程中遇到的挑战和解决方案。 HomeLab 并非遥不可及,只要我们用心去探索和实践,就能开启属于自己的个人云端实验室之旅。让我们一起学习、交流和成长,共同打造一个属于我们的数字王国。 前提说明虽然关于 HomeLab 的文章已经很多了,但我还是想记录下自 ...
写在前面在软件开发中,我们经常面临一个经典的抉择:是构建一个功能单一但完整的大而全的解决方案,还是将其拆分为多个模块化、可复用的组件? 当我最初开始开发 IntelliAI 系列插件时,我也面临着这个选择。最初的实现很简单——所有功能都集成在一个插件中。但随着需求的增长和插件的增多,我意识到:一个优秀的架构不仅需要解决当前的问题,更要为未来的扩展做好准备。 今天,我想和你分享 IntelliAI Engine 的架构设计故事——一个从单体插件到平台化架构的演进历程,以及这背后的设计哲学。 问题的起源:单体插件的困境最初的简单设计在项目初期,我采用了最直接的设计方式:所有 AI 相关的功能都集成在一个插件中。 123456789101112IntelliAI Plugin (单体设计)├── JavaDoc 功能│ ├── AI 调用逻辑│ ├── 配置管理│ ├── UI 组件│ └── 凭证管理├── Changelog 功能│ ├── AI 调用逻辑│ ├── 配置管理│ ├── UI 组件│ └── 凭证管理└── 其他未来功能... ...
🤖 AI:人工智障
未读写在前面每个软件项目都离不开版本更新,而每次更新都离不开一份清晰的 Changelog。但你是否也经历过这样的场景: 版本发布前匆忙整理提交记录,手忙脚乱 Changelog 格式混乱,用户看不懂到底更新了什么 团队周报、日报需要从 Git 记录中手动整理,费时费力 想要写一份专业的提交信息,却不知道如何描述 这些问题曾经让我深陷其中,直到我决定用 AI 的力量来彻底解决这个痛点。今天,我想和你分享我是如何从这些实际问题出发,开发出了一款智能 Changelog生成器的。 痛点的发现:那些令人崩溃的瞬间版本发布日的恐慌记得那是一个普通的周五下午,产品经理突然告诉我:”今天下午 3 点要发版本,快准备一下 Changelog。” 我打开 Git Log,看着近 200 条提交记录,瞬间头大: 1234567891011121314151617commit a1b2c3d4Author: dong4jDate: Fri Oct 27 14:23:15 2024 +0800 fix bugcommit e5f6g7h8Author: zhangsanDate: F ...
🤖 AI:人工智障
未读写在前面作为一个程序员,我相信你一定也经历过这样的场景:刚写完一个复杂的业务方法,满心欢喜地准备提交代码,却被 CI/CD 检查卡住——“缺少 JavaDoc 注释”。于是你不得不回到代码里,机械地补充那些看起来千篇一律的文档。 这不仅仅是我的痛点,我相信这也是每个追求代码质量的开发者共同的烦恼。今天,我想和大家分享我是如何从一个实际的问题出发,最终开发出了一款能够自动生成高质量JavaDoc 的 IntelliJ IDEA 插件的故事。 痛点的诞生那个让人崩溃的下午记得那是一个普通的周二下午,我正在处理一个紧急的项目迭代。代码写得飞起,功能实现得顺风顺水,直到最后提交代码时,CI/CD 系统无情地拒绝了: 123[ERROR] Missing JavaDoc for method 'calculateUserScore' in class 'UserService'[ERROR] Missing JavaDoc for class 'OrderProcessor'[ERROR] 3 more f ...
简介本文是 Spring AI 入门教程的第一部分,将带你从零开始搭建一个 Spring AI 应用,集成 OpenAI(通义千问兼容模式)和 Anthropic(Claude)两个聊天模型,并解决实际开发中可能遇到的各种问题。 参考文档:Your First Spring AI 1.0 Application 刚刚新开了一个 Spring AI 的 教程项目, 欢迎大家 star 和 fork! 准备工作在上一篇 在 Docker 中部署 PostgresML 实现数据库内机器学习 中,已经成功在 PostgresML 中创建了数据库,并成功进行了 PostgresML 的相关测试。现在我们将以 PostgresML 为底层数据库,基于 Spring AI 来完成一个示例项目,学习 Spring AI 的相关概念以及 API 的使用。 项目初始化打开 Spring Initializr,在你的项目里添加以下依赖: PgVector (PostgreSQL 的向量扩展) GraalVM Native Support (GraalVM 原生镜像支持) Actuator (应 ...
🤖 AI:人工智障
未读背景随着人工智能技术的快速发展,Java 开发者也在积极探索如何将 AI 能力集成到企业级应用中。Spring 团队发布的 Spring AI 项目为 Java 生态带来了强大的 AI 集成能力。特别是 Spring AI 1.1.0 版本的正式发布,使得使用 Java 开发 AI 应用变得更加便捷。 在 AI 应用开发中,向量数据库扮演着重要角色,特别是在处理文本嵌入和语义搜索场景下。PostgresML 作为一个强大的 PostgreSQL 扩展,能够直接在数据库内部实现机器学习功能,为 AI 应用提供了高效的向量存储和检索能力。 本文将详细介绍如何在 Docker 环境中部署和配置 PostgresML,为后续的 AI 应用开发打下坚实基础。 简介PostgresML 是一个强大的 PostgreSQL 扩展,它将机器学习功能直接集成到数据库内部。通过 pgml 扩展,开发者可以在数据库层面实现文本嵌入、语义搜索等 AI 功能,无需额外的外部服务依赖。 在 Docker 容器中部署 PostgresML 具有以下优势: 环境一致性:确保开发、测试和生产环境的一致性 快 ...
🙉 Zeka.Stack
未读🧑💻 简介作为一个 Java 后端工程师,我相信你一定遇到过下面这些问题: 使用 IDEA 启动一个 Spring Boot 项目,第一行就出现红色告警:发现多个 slf4j 实现类,提示你要排除一个; 本地开发一切正常,一部署到测试环境却报错:找不到某个 class; 项目中的 pom.xml 有上百个依赖,不知道哪个服务哪个功能,谁也不敢轻易动; 多模块之间彼此依赖,模块 A 引用模块 B,模块 B 又反过来依赖模块 A,形成“依赖闭环”; …… 经历过大大小小的 Spring Boot 项目后我发现,不论是大厂还是小团队,很多项目对 Maven 的依赖管理都重视不足。 重复引入、版本冲突、依赖混乱、模块耦合这些问题,几乎是通病。 好一点的团队会搭建一个公司级的 parent 项目来统一依赖版本;大多数直接沿用 spring-boot-starter-parent;更差的,哪缺啥引啥,能跑就行,构建配置几乎没人管。 为什么要重新思考 Maven 项目的组织结构? 因为当项目开始变大:%% %% 依赖管理就成了地雷阵,一改就炸; 多人协作时,版本不一致、依赖冲突 ...
🙉 Zeka.Stack
未读📖 简介在上一篇 🧪 Maven Profiles 的使用场景案例分享 我们通过 Profiles 的实际案例大致了解了它的使用方式, 并详细梳理了 Profiles 的优先级, 不过也挖了一个坑: 为啥我要将 settings.xml 和项目代码放在一起? 比如 arco-supreme 项目的代码结构为: 12345678910111213141516$ tree -a -I '.git|.idea'.├── .editorconfig├── .gitignore├── .mvn│ ├── jvm.config│ ├── maven.config│ ├── settings.xml│ └── wrapper│ ├── maven-wrapper.properties│ └── MavenWrapperDownloader.java├── LICENSE├── mvnw├── mvnw.cmd├── pom.xml└── README.md 可以看到 settings.xml 文件放在了 .mvn 目录下, 且 ...
🙉 Zeka.Stack
未读📖 简介在上一篇 🚀 从注册到发布:Maven 中央仓库上传 jar 实践 中,我们成功将本地 jar 包上传到了 Maven 公共仓库。 那篇文章的配置比较基础,主要目的是跑通流程。而在实际开发中,为了更好地适配不同环境,还需要做一些必要的优化配置。就像写代码一样,第一步是跑通,再逐步打磨细节,这次我们就来看看如何通过 Maven Profiles 实现多环境切换。 所以这篇文档我将介绍 Maven 的 Profiles 配置, 目标是让 Zeka.Stack 相关的组件既能上传到 Maven 公共仓库, 也能让大家在进行二次开发后, 只上传到公司 Maven 私服. 当然这仅仅是 Maven 的 Profiles 的一个实际应用场景, 其他还比如 根据不同 Profile 引入或排除某些依赖; 针对多模块项目,通过 Profiles 控制是否构建某些子模块; 结合 resources 标签中的 <filtering>true</filtering>,实现配置文件模板化等等场景. 🔀 deploy 环境切换直接上配置: 1234567891011 ...
🙉 Zeka.Stack
未读✨ 前言虽然 Zeka.Stack 是全开源的, 但是每个组件也可以单独使用, 为了避免需要克隆所有项目然后本地 install 才能使用, 所以最简单的方式就是将 Zeka.Stack 的组件上传到 Maven 公共仓库, 所有就有这篇水文. 为什么说是水文呢, 因为这类的文章网上也有很多了, 这里再写一遍其实没有啥价值, 不过为了完善我 Zeka.Stack 的知识体系, 所以还是决定写一写. 🧰 准备工作这里演示使用自己的域名来作为 groupId, 所以需要 DNS 验证, 其他方式比如 GItHub, GitLab 等验证相对来说更容易些. 个人觉得 GitHub 作为 groupId 太长了, 比如我如果使用 GitHub 验证的话 groupId 就是 io.github.dong4j, 而且为了打造自己的 IP, 所以选择使用一个二级域名, 正好前段时间在 Cloudflare 注册了 dong4j.dev 的域名, 这里就可以用上了. 如果要图方便的话, 可以直接使用 arco-supreme 这个项目来做测试. 📝 注册 Sonatype 账户自 20 ...
🙉 Zeka.Stack
未读🧑💻 简介在日常开发中,写业务不难,难的是「工程一上来就乱」、「依赖一多就扯皮」、「构建一复杂就抓狂」。Zeka Stack 希望通过系统化的工程体系来解决上述问题. 它不是啥“重框架”,也不是为了造新轮子,而是一个工程提质提速的脚手架体系,用清晰的模块划分、统一的构建规范和灵活的生态扩展,让你在开写业务代码之前,项目骨架就已经整整齐齐、顺手好用。 一句话:让你团队少踩坑、构建不抓狂、协作有章法。 🧱 用 Zeka Stack 打造可维护的工程骨架大家肯定遇到过这样的问题: 某次新项目启动,一开始小组成员各自拉模块、加依赖、写配置,几天后就发现: 依赖重复、冲突,启动报错; 构建流程不一致,有人能打包,有人不能; 模块命名五花八门,新人根本无从下手; 尤其是多个团队协同开发微服务系统时,经常遇到的问题包括: 痛点 描述 项目结构混乱 每个团队按自己的理解组织模块,结果变成“大杂烩” 构建方式不统一 有人用 mvn,有人用 idea,有人手动打包,构建经常失败 重复造轮子 各业务组开发重复功能,没有统一组件库 依赖冲突频发 多模块之间版本不一 ...
🙉 Zeka.Stack
未读🧠 初心:为什么要从零开发脚手架?在众多脚手架如 RuoYi、yudao 等百花齐放的当下,从零造个轮子听起来似乎有些“何苦为难自己”。但现实却是,用别人的轮子,不一定跑得更快。 当你频繁地遇到这些问题: 脚手架升级一动就“爆炸”,依赖冲突层出不穷; 每次新建项目都得 copy/paste 三五个模块,配置头都大; 项目结构越来越重,协作越来越难; 插件脚手架不好用,代码生成一团糟; 你就会明白:一个真正贴合团队/企业开发场景的脚手架,是生产力的倍增器,而不是负担的制造者。 这,就是 Zeka.Stack 诞生的背景。 💥 我们要解决哪些“开发痛点”?Zeka.Stack 不是为了炫技,而是为了解决我们真实踩过的坑。以下是我们希望彻底优化的问题: 1. 项目依赖管理地狱 多模块工程中依赖版本冲突频发,项目启动失败; 依赖升级时担心牵一发而动全身。 💡Zeka.Stack 的解决方案: 统一公司级 BOM 管理,所有项目继承同一套依赖版本; 通过多级父模块划分业务、技术、部署职责,升级只改一行版本号。 2. 重复配置太多,效率低下 新项目初始 ...
🏠 HomeLab:中年男人之友
未读前言说实话,我被 UPS 电源监控搞得快烦死了。 自从给家里整了套 UPS 后,就面临一个很现实的问题:家里设备越来越多,怎么让所有设备都能知道 UPS 的状态? 一开始我只是简单地把 NAS 接到 UPS 上,想着至少 NAS 能安全关机就行。但慢慢地问题就来了: NAS 确实能安全关机,但其他设备呢? - 正在下载的服务器、正在编码的视频工作站… 无法提前预警 - UPS 快没电了,其他设备还在正常工作,突然断电就懵了 手动管理太麻烦 - 每台设备都要单独配置,而且不同的系统配置方法还不一样 最尴尬的是有一次,UPS 已经开始最后的关机倒计时了,我还在旁边悠闲地刷视频,结果”啪”一下,全屋断电… 这时候我意识到,我需要的是一个统一的 UPS 监控方案。 NUT 是什么?在网上查了一圈,发现了一个叫 NUT (Network UPS Tools) 的开源项目。说实话,这个名字一开始我还以为是坚果相关的工具,后来才发现是 Network UPS Tools 的缩写… NUT 的核心理念很简单:让 UPS 成为网络设备。 传统的 UPS 配置是: UPS → USB ...
🏠 HomeLab:中年男人之友
未读简介本文汇总了我在三台联想 M920x 上搭建和使用 PVE(Proxmox Virtual Environment)过程中的心得与遇到的问题。 在选择虚拟化平台时,我倾向于 PVE 而非 ESXi(vSphere Hypervisor)。 这一选择基于 PVE 的开源性及其基于 Debian 的架构,这为它带来了相比 ESXi 更多的可玩性和折腾空间。 选择 PVE 或 ESXi 并不在于哪个更优秀,而在于哪个更能满足个人的特定需求。 安装完成后 IP 不对启动后出现了一张 vmbr0 网卡, 这个是桥接网卡, 可以查看绑定的物理网卡: 1ip link show master vmbr0 修改一下 3 个文件: 12345678910111213141516171819202122232425# /etc/network/interfacesauto loiface lo inet loopbackiface enp92s0 inet manualauto vmbr0iface vmbr0 inet static address 192.168.100.100/24 ...


























