发布时间:2026/8/23 13:13:02
AWS-PlantUML如何解决图标命名冲突:SHA1去重与递归命名空间生成机制全解析 AWS-PlantUML如何解决图标命名冲突SHA1去重与递归命名空间生成机制全解析【免费下载链接】AWS-PlantUMLPlantUML sprites, macros, and other includes for AWS components.项目地址: https://gitcode.com/gh_mirrors/aw/AWS-PlantUMLAWS-PlantUML 是一个为 PlantUML 提供 AWS 组件图标sprite、宏macro与构造型stereotype的开源工具包让你几行代码就能画出带官方 AWS 图标的架构图。当上千个 AWS 图标涌入同一仓库同名图标撞车几乎是必然的。本文带你完整拆解它如何用SHA1 去重与递归命名空间生成两大机制彻底解决图标命名冲突问题。图标命名冲突从何而来AWS 官方图标包遵循严格的文件命名规范见 README.mdCATEGORY_SERVICE_NAME[_SERVICE_COMPONENT][_LARGE]例如Storage_AmazonS3_bucket.png会被拆分为类别Storage / AmazonS3与组件名bucket解析逻辑见 puml.py。问题就出在这里bucket、table、action 这类子组件名在不同服务下大量重名。如果直接拿组件名生成宏名BUCKET、TABLE这些宏必然互相覆盖此外同一张图标图片还被 Amazon 放在多个分类目录下会产生完全相同图形的重复文件。AWS-PlantUML 的生成脚本 puml.py 用先去重、再递归加命名空间两步走解决了这两个问题。第一道防线SHA1 去重在 filter_duplicate_images() 中脚本对每张图标文件的原始字节计算 SHA1 摘要再用groupby按摘要分组同一组内只有 1 个文件 → 正常保留同一组内有多个文件即图片内容完全一致只是文件名/路径不同→只保留第一个。这一步的妙处在于它判断的不是名字是否相同而是内容是否相同。两个不同路径下像素级一致的图标只会生成一份宏与 sprite从源头消灭了重复定义带来的命名冲突。# puml.py 中的去重核心思路 def shasum(puml): h sha1() with open(puml.image_path, rb) as f: h.update(f.read()) return h.hexdigest()第二道防线递归命名空间生成去重之后仍会剩下名字相同、内容不同的图标。这时轮到 set_unique_names() 登场——一个教科书级的递归消歧函数按 expand_name() 生成的候选名排序并分组某组里只有 1 个图标 → 候选名即最终唯一名unique_name某组里有多个→ 只对这些冲突者递归调用自身expand 加 1候选名多拼一级父类别。以Storage_AmazonS3_bucket.png为例三轮候选名依次是轮次expand候选名说明第 1 轮0bucket只用组件名最简洁第 2 轮1AmazonS3_bucket加上父级服务名第 3 轮2Storage_AmazonS3_bucket加上顶层类别名必然唯一递归只在冲突子集内进行且候选名最长也只是完整命名空间因此必然收敛、必然终止——每个图标最终都拿到一个全局唯一的unique_name。双重宏输出与点分命名空间拿到唯一名后macros 属性 会做一件贴心的事当unique_name ! name时同时生成两份宏与两份 spritegenerate_sprite() 末尾追加了第二份定义。短名宏如BUCKET画图时最常用简洁好写全名宏如AMAZONS3_BUCKET当你同时需要多个不同来源的bucket时用它精确引用。此外namespaced_name 还会把路径转成点分命名空间如Storage.AmazonS3.bucket它被用作 INI 配置文件的 section 名。InheritingConfigParser 在查不到当前节时会自动向上逐级回退Storage.AmazonS3.bucket→Storage.AmazonS3→Storage这就是 awspuml.ini 中[Analytics]、[Analytics.AWSGlue]、[Analytics.AWSGlue.AWSGlue_LARGE]这种层次化配置可以按粒度覆盖颜色与实体类型的原因。; awspuml.ini 中的点分命名空间配置节 [Analytics] color: ${PUML.colors:orange} entity_type: node [Analytics.AWSGlue]最终效果几行代码画出 AWS 架构图以上机制全部发生在生成期画图时你只需 common.puml 里的PUML_ENTITY宏。以 examples/component-customization.puml 为例!include path/to/common.puml !include path/to/Storage/AmazonS3/AmazonS3.puml AMAZONS3(s3_internal,Default S3) AMAZONS3(s3_internal2,S3 as node,node) AMAZONS3_LARGE(s3_partner,Large S3)每个宏只需传别名 可选标签冲突消解、sprite 编码、构造型换行全部由生成机制在幕后完成。综合多个服务图标就能得到如 examples/comments-architecture.puml 这样的完整架构机制速查表机制解决的问题代码位置SHA1 去重内容相同的重复图标文件puml.py递归命名空间生成同名不同内容的图标puml.py双重宏 / 双 sprite 输出短名易用与精确引用的兼得puml.py点分命名空间 配置继承按分类粒度自定义样式puml.py 一句话总结先用 SHA1 保证相同内容只定义一次再用递归命名空间保证不同内容必有唯一名——两道防线组合起来就让上千个 AWS 图标宏可以和平共处而画图的人完全无感。【免费下载链接】AWS-PlantUMLPlantUML sprites, macros, and other includes for AWS components.项目地址: https://gitcode.com/gh_mirrors/aw/AWS-PlantUML创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/8/23 13:13:02

本地部署千问3.8-27B大模型:从环境配置到能力实测的完整指南

千问3.8-27B这类大模型,最吸引人的地方在于它宣称的“无审查”和“越狱”特性,这让很多开发者想把它部署在本地,用于代码生成、创意写作或特定领域的对话测试。但直接上手很容易踩坑,比如模型文件巨大、Ollama拉取失败、显存不足跑…

2026/8/23 14:23:05

使用geemap进行Google Earth Engine Python API入门指南

使用geemap进行Google Earth Engine Python API入门指南 【免费下载链接】geemap A Python package for interactive geospatial analysis and visualization with Google Earth Engine. 项目地址: https://gitcode.com/gh_mirrors/ge/geemap 概述 本文介绍如何使用gee…

2026/8/23 14:23:05

在geemap中使用Google Maps作为底图的完整指南

在geemap中使用Google Maps作为底图的完整指南 【免费下载链接】geemap A Python package for interactive geospatial analysis and visualization with Google Earth Engine. 项目地址: https://gitcode.com/gh_mirrors/ge/geemap 还在为地理空间分析寻找高质量、高精…

2026/8/23 14:23:05

geemap项目教程:从入门到精通的地理空间数据处理指南

geemap项目教程:从入门到精通的地理空间数据处理指南 【免费下载链接】geemap A Python package for interactive geospatial analysis and visualization with Google Earth Engine. 项目地址: https://gitcode.com/gh_mirrors/ge/geemap 项目概述 geemap是…

2026/8/23 14:23:05

实时数据可视化新范式:D3.js+RxJS打造毫秒级响应仪表盘

实时数据可视化新范式:D3.jsRxJS打造毫秒级响应仪表盘 你还在为实时数据流可视化卡顿发愁?当用户行为、传感器数据以每秒千条的速度涌入时,传统图表库要么崩溃要么延迟严重。本文将展示如何用D3.js(数据驱动文档)与Rx…

2026/8/23 14:23:05

D3.js可视化性能优化终极指南:建立专业性能测试指标

D3.js可视化性能优化终极指南:建立专业性能测试指标 D3.js作为数据驱动文档的JavaScript库,在数据可视化领域占据着重要地位。随着数据量的增长和交互复杂度的提升,D3.js可视化组件性能优化成为开发者必须掌握的技能。本文将详细介绍如何建立…

2026/8/23 14:18:05

Android版本号详解:versionCode核心解析

一、基本概念 <manifest ...android:versionCode"1">versionCode 是应用的内部版本号&#xff0c;是一个整数&#xff0c;专门给 Android 系统用来识别版本的新旧。拆解含义version版本code编码、代号合起来即**“版本代号”**——用一个数字代表版本。二、核心…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 13:29:45

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/23 6:14:43

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/23 4:22:01

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具&#xff0c;覆盖选题构思、文献整理、内容生成、格式排版等核心场景&#xff0c;真正帮你高效搞定论文难题。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首…