回顾我的软件开发经历:开发DAB
背景介绍DABDevice Automation Bus是一种基于 MQTT 通信的轻量级协议主要用于连接客厅中的消费电子产品如智能电视和游戏机并实现自动化测试。由于设备认证需要支持 DAB 功能我们面临了开发 DAB 软件的紧迫任务。时间紧、任务重挑战巨大。第一阶段学习与调研学习 DAB 协议在项目初期我深入学习了 DAB 协议并将其整理成文档与团队分享。通过快速学习我对 DAB 的整体架构和功能有了全面的理解并整理出了 28 个核心接口。在此过程中我发现了第一版协议中缺少对通信设备的标识。第二版协议中增加了设备标识功能。调研设备现状根据 DAB 协议我对当前设备的基本情况进行了详细调研重点分析了以下问题实现 DAB 需要哪些组件和功能现有设备中是否有可复用的组件或功能如何最大化复用现有资源通过调研我明确了设备现状并制定了两种实现方案。第二阶段方案设计与技术选型两套实现方案我设计了两套 DAB 实现方案方案一在电视外部部署 MQTT 服务。方案二复用电视内部的 MQTT 服务。经过评估方案二在认证场景中更具优势因为它减少了外部依赖简化了部署流程。然而复用设备内部的 MQTT 服务也带来了潜在的安全风险。为此我们采取了以下安全措施云端授权机制。超时自动关闭功能。2. 开发语言选择在开发语言的选择上我们综合考虑了以下因素DAB 开源 Demo 的语言支持。认证设备的语言兼容性。尽管团队更熟悉 C但为了缩短开发周期并赶上设备认证时间点我们最终选择了 Node.js。此外我们将 DAB 服务集成到现有进程中减少了服务数量并复用了设备功能。第三阶段Node.js 版本的开发与挑战开发过程使用 Node.js 开发 DAB 的过程中我们充分利用了其单元测试功能显著提升了开发效率和质量。然而我们也遇到了一些挑战内存泄漏问题由于进程内存增加导致异常通过调整参数解决了这一问题。接口与设备功能的适配DAB 接口需要与多个设备功能模块对接涉及多个项目组的协作沟通成本较高。2. Node.js 版本的局限性尽管 Node.js 版本成功支撑了多个设备的 DAB 认证但仍存在以下问题1.部分设备不支持 Node.js。2.安全相关处理与业务逻辑分布在不同的进程中由不同部门负责协调成本较高。第四阶段C 版本的重构与优化开发背景为了解决 Node.js 版本的局限性我们开发了第二版 DAB采用 C 实现。这一版本不仅避免了部分设备不支持 Node.js 的问题还将安全处理逻辑集成到 DAB 内部减少了跨部门沟通的复杂性。多平台支持与灵活性在第二版设计中我们特别注重灵活性和多平台支持支持在 Windows、公司开发平台以及设备上运行。既可以独立运行也可以嵌入到其他进程中。为了实现这一目标我添加了一个适配层用于屏蔽不同平台的差异。适配层提供了多种实现策略根据运行场景动态选择从而加快了开发和调试速度。第五阶段开发中的经验与反思项目管理与沟通由于时间紧迫我采取了以下措施确保项目顺利推进提前与参与者沟通明确目标、时间要求和注意事项。使用 Jira 工具进行任务分解和进度跟踪。在开发过程中及时纠偏确保项目按计划进行。2. 技术设计与优化在技术实现上我遵循了正交性原则尽量减少模块之间的耦合。例如使用函数对象代替接口使每个模块独立且无依赖。为每个模块编写单元测试提升开发质量和速度。然而在适配层设计中我一度犯了过度设计的错误尝试将 Netflix 的 C 语言面向对象实现引入项目中。经过反思我及时调整了设计简化了代码结构。调整前的代码–#include#include#include “dab/dab_api.h”extern “C” {struct DAB_API_IO {DAB_Interface iface;bool (*getKeyList)(std::vectorstd::string list);bool (pressKey)(const charkey, int durationMs);bool (catpureImage2png)(const charfile);};const DAB_API_IO getDABAPIIO();}调整后的代码–#pragma once#include#includeextern “C” {bool dab_api_getKeyList(std::vectorstd::string list);bool dab_api_pressKey(const char* key, int durationMs);bool dab_api_catpureImage2png(const char* file);}第二版的亮点与遗憾亮点1.单元测试摆脱环境依赖在开发云平台、设备等环境中快速执行测试提高开发效率。2.灵活的部署支持在 Windows、开发云平台和设备上单独运行也可以嵌入到其他进程中运行极大提升了灵活性。3.适配层隔离变化使代码逻辑快速稳定。4.灵活的接入策略为各平台切换提供便利即使在依赖项不具备的情况下也能顺利开展工作。5.与实践结合提出了许多对测试有用的应用场景和扩展。6.高效的开发速度通过合适的模式和策略极大加快了开发速度。7.文档生成代码实践了由文档生成代码的方式加快了开发速度并保证了准确性。遗憾1.嵌入进程的部署方式增加了对安全性的依赖特别是对安全性的要求更高。2.与实践结合的时机最初主要围绕认证需求开发未能更早与实践和用户结合导致成熟速度较慢。总结通过 DAB 的开发我深刻体会到在紧迫时间内完成复杂项目的挑战与成就感。从协议学习到多平台实现我们不仅解决了技术难题还优化了团队协作和项目管理流程。DAB github地址xumingxsh/dabDAB标准https://github.com/device-automation-bus/dab-specification-2.0关键词DAB、MQTT、Node.js、C、多平台支持、正交性原则、单元测试、项目管理

相关新闻

ONES AI 工具实战指南:从 Assistant 到 Agent 与 MCP 的研发提效

ONES AI 工具实战指南:从 Assistant 到 Agent 与 MCP 的研发提效

1. 先搞清楚这三个工具到底解决什么实际问题 如果你在研发团队里负责过项目管理、任务跟踪或文档协作,大概率遇到过这类问题:需求文档写起来耗时耗力、任务状态更新不及时、开发进度和测试结果对不上、周报月报全靠手动复制粘贴。ONES Assistant、ONES A…

2026/7/12 10:38:08阅读更多 →
pandas多维聚合生产实践:金融级分析的四道坎

pandas多维聚合生产实践:金融级分析的四道坎

1. 项目概述:为什么多维聚合不是“加个groupby”就能搞定的事 我在银行风控部门做过三年数据管道开发,后来跳槽到一家头部支付机构做BI平台架构。这期间最常被业务方拍着桌子问的一句话是:“上个月华东区餐饮类商户的交易金额、手续费波动范围…

2026/7/12 10:38:08阅读更多 →
终极免费资源嗅探方案:猫抓浏览器扩展完全掌控网页媒体

终极免费资源嗅探方案:猫抓浏览器扩展完全掌控网页媒体

终极免费资源嗅探方案:猫抓浏览器扩展完全掌控网页媒体 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页视频无法下载而烦恼吗…

2026/7/12 10:38:08阅读更多 →
工业级遗传算法实战:动态多样性控制与自适应收敛验证

工业级遗传算法实战:动态多样性控制与自适应收敛验证

1. 这不是教科书里的“遗传算法”,而是我亲手调参跑通27个测试用例后总结的实战心法你点开这篇,大概率正被“选择-交叉-变异”这六个字绕得头晕。网上讲遗传算法(Genetic Algorithm, GA)的文章,要么堆满数学符号&#…

2026/7/12 11:48:14阅读更多 →
N皇后问题的遗传算法Python实战:可复现GA工程骨架

N皇后问题的遗传算法Python实战:可复现GA工程骨架

1. 这不是教科书,而是一次真实的GA项目复盘:从Matlab到Python的N皇后实战手记你有没有试过,在凌晨两点盯着一个收敛缓慢的遗传算法学习曲线发呆?我有。去年写完《遗传算法入门(第一部分)》后,读…

2026/7/12 11:48:14阅读更多 →
netsh wlan 命令深度解析:Windows 11/10 无线网络5大高级管理场景

netsh wlan 命令深度解析:Windows 11/10 无线网络5大高级管理场景

netsh wlan 命令深度解析:Windows 11/10 无线网络5大高级管理场景在Windows系统中,图形界面虽然友好,但对于网络工程师和技术支持人员来说,命令行工具往往能提供更高效、更精准的控制能力。netsh wlan作为Windows内置的无线网络管…

2026/7/12 11:48:14阅读更多 →
工业负载控制:TPD2017FN与MKV46F128VLH16的实战应用

工业负载控制:TPD2017FN与MKV46F128VLH16的实战应用

1. 工业负载控制的核心挑战与选型思路 在工业自动化现场,电感和电阻类负载的控制一直是个既基础又棘手的课题。产线上常见的继电器线圈、电磁阀、电机绕组等感性负载,以及加热管、功率电阻等阻性负载,其开关特性差异显著。感性负载在断电时会…

2026/7/12 11:48:14阅读更多 →
人形机器人产品化实战:从产线日记看场景化落地

人形机器人产品化实战:从产线日记看场景化落地

1. 项目概述:这不是科幻小说,而是产品经理每天在真实产线里写的流水账“人形机器人 产品经理的日记”——光看标题,很多人第一反应是科幻剧片场,或是某家科技公司放出的概念视频。但如果你真去深圳南山科技园那几栋灰白色厂房转一…

2026/7/12 11:48:14阅读更多 →
腿式机器人运动控制:如何将机器学习嵌入工程系统

腿式机器人运动控制:如何将机器学习嵌入工程系统

1. 项目概述:当机器学习成为工程系统的一环最近几年,四足机器人、双足机器人这些能跑能跳的“铁疙瘩”越来越火,从实验室的样机到商业化的产品,背后绕不开一个核心难题:腿式运动控制。让机器像动物一样在复杂地形上稳健…

2026/7/12 11:43:14阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/12 0:02:11阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/12 0:02:11阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/11 16:20:28阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/11 23:15:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/11 18:12:23阅读更多 →