惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Heimdal Security Blog
P
Privacy International News Feed
S
Schneier on Security
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
Spread Privacy
Spread Privacy
P
Privacy & Cybersecurity Law Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Scott Helme
Scott Helme
K
Kaspersky official blog
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
aimingoo的专栏
aimingoo的专栏
Simon Willison's Weblog
Simon Willison's Weblog
S
Securelist
Help Net Security
Help Net Security
B
Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Security Archives - TechRepublic
Security Archives - TechRepublic
云风的 BLOG
云风的 BLOG
The GitHub Blog
The GitHub Blog
N
News and Events Feed by Topic
Hacker News: Ask HN
Hacker News: Ask HN
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
雷峰网
雷峰网
博客园 - 司徒正美
V
V2EX
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
N
News | PayPal Newsroom
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
PCI Perspectives
PCI Perspectives
Google DeepMind News
Google DeepMind News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
U
Unit 42
C
Cybersecurity and Infrastructure Security Agency CISA
P
Palo Alto Networks Blog
G
Google Developers Blog
T
Threat Research - Cisco Blogs
博客园 - Franky
I
InfoQ
D
DataBreaches.Net
爱范儿
爱范儿
Y
Y Combinator Blog
博客园 - 叶小钗
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

蛮荆

如何获取更多的免费服务器 Kubernetes 调度器队列 - 设计与实现 Kubernetes 调度器 - 核心流程 Kubernetes Networking Model & CNI Kubernetes 控制器管理总结 Kubernetes CronJob 设计与实现 Kubernetes Job 设计与实现 Kubernetes HPA 设计与实现 Kubernetes Deployment 滚动更新实现原理 Kubernetes GC 设计与实现 Kubernetes Pod 驱逐 - 设计与实现 Kubernetes Daemonset 设计与实现 Kubernetes ReplicaSet 设计与实现 Kubernetes EndPoint 设计与实现 Kubernetes Informer 设计与实现 降本增效之应用优化 (三) 日志存储与检索 Kubernetes Pod 设计与实现 - 创建流程 Kubernetes 探针设计与实现 Unix 编程艺术名句摘录 Kubernetes - CRI 概述 Golang 编译速度为什么这么快? Kubernetes Pod 设计与实现 - Pause 容器 Kubernetes - kube-proxy 代理模式工程优化 Kubernetes 应用最佳实践 - 优雅关闭长连接 Kubernetes Service 类型和会话亲和性 Kubernetes 为什么需要 Ingress Kubernetes 架构 - 控制平面和数据平面 降本增效之应用优化 (二) 大报表 Go 语言如何获取 CPU 利用率 降本增效之应用优化 (一) Redis 业务规则引擎演变过程简述 微服务中的熔断算法 漏桶算法和令牌桶算法 jsonparser 为什么比标准库的 encoding/json 快 10 倍 ? zap 高性能设计与实现 HTTP Router 算法演进 fastcache 高性能设计与实现 Web 常见的三个安全问题 ants Code Reading Go 线程安全 map 方案选型 布隆过滤器 死锁、活锁、饥饿、自旋锁 sync.Pool Code Reading Go 内存管理概述 Go netpoll Code Reading goroutine 泄漏与检测 time/Timer Code Reading GMP Scheduler Code Reading Go channel 的 15 条规则和底层实现 为什么 Linux “一切皆文件” context.Context Code Reading runtime/HACKING.md Goland 最佳实践 互联网开发与金庸武学 为什么 Redis 6.0 引入多线程模型? Kubernetes 应用最佳实践 - 金丝雀发布 容器中如何正确配置 GOMAXPROCS ? singleflight Code Reading sync.Map Code Reading sync.Cond Code Reading sync.WaitGroup Code Reading sync.RWMutex Code Reading sync.Mutex Code Reading sync.Once Code Reading Go 无锁编程 sync/atomic Code Reading goroutine 交替打印奇偶数 GODEBUG Go 并发模式 Go 汇编 UUID 通用技术选型 Kubernetes 应用最佳实践 - 水平自动伸缩 Go 高性能 Tips fasthttp 为什么比标准库 net/http 快 10 倍 ? ChatGPT 初体验 Docker 网络原理概览 iptables 的五表五链 Kubernetes 应用最佳实践 - 亲和性和污点容忍度 Go 的反射与三大定律 Docker 官方提供的最佳实践 Go 语言内置的设计模式 HTTP1 到 HTTP3 的工程优化 Kubernetes 应用最佳实践 - Sidecar 模式 Kubernetes 应用最佳实践 - init 容器和钩子函数 为什么 recover 必须在 defer 中调用? 为什么 defer 的执行顺序和注册顺序不同? Go map 设计与实现 Go 切片扩容底层实现 Go 语言中的零拷贝 Go Delve 云原生和边缘计算简介 Kubernetes Pod 服务质量等级 Kubernetes 应用最佳实践 - 探针 Kubernetes 应用最佳实践 - 资源请求和限制 CDN 原理 Kubernetes 应用最佳实践 - 开篇 缓存策略和模式 Go 内存模型 Kubernetes 核心概念 软件版本语义化
技术文章配图指南
2023-04-04 · via 蛮荆

技术文章配图指南

2023-04-04 Tools

为什么技术文章需要配图?一图胜千言。

原则

  • 准确地传递和表达上下文内容
  • 符合相关领域规范标准 (如 流程图, UML, 泳道图等)
  • 不影响写作的效率 (尽可能高效)

满足以上三点要求后,如果作者还有额外的时间,可以对配图做进一步的优化工作: 是否美观、风格是否一致、配色、线条、比例、留白等设计视觉要素。

本文以 Go 语言 开发为例,分享一下笔者常用的几个配图工具,其他语言的开发者可以作为参考,所有工具都在 Reference 列表。

自动化工具

UML

go-plantuml 可以根据 Go 代码自动生成对应的 plantuml 文件,支持单个文件或整个目录代码生成。

生成 plantuml 文件之后,需要安装对应的可视化工具才能查看对应的 UML 图片,不过大多数 IDE 都有对应的插件,直接安装即可。 这里以笔者使用 Goland 的为例,直接安装 PlantUML Integration 插件就可以看到图片了。

plantuml 示例图

调用关系图

go-callvis 可以将程序中的 , 对象, 方法 等元素的调用关系展示为图片,而且可以通过鼠标操作查看调用链,可以帮助我们在面对复杂的程序结构时,快速理清逻辑主干和实现细节。

go-callvis 示例图

goroutine 并发执行图

gotrace 可以分析 go tool trace 命令产生的 trace 结果,并根据结果呈现 3D 并发流的可视化效果。

gotrace 示例图

性能分析

pprof 是官方出品的用于性能可视化分析工具,不需要过多解释了。

pprof 示例图

手动绘图

draw.io

draw.io 这个大家应该都很熟悉了,也是笔者目前正在使用的绘图工具,工具本身集成了很多常用的元素。

draw.io 表格示例图

draw.io 对象示例图

excalidraw

excalidraw 绘图有更强的个性化和轻松化风格,图形元素并不是四四方方、一板一眼的严肃风格。

excalidraw 示例图

excalidraw 示例图2

Sketch

Sketch 应该是目前手动绘图的终极工具了,笔者并没有太多使用经验 (正在龟速学习中),这里仅展示两张官方图片作为示例。

Sketch 示例图

Sketch 示例图-2

配色

最后说一下配色,笔者在这块没有调研过太多工具,直接使用的 Coolors 配色推荐,组装了一套自己的配色集合。

Colors 示例图

Colors 示例图-2

下面是笔者的一套块配色元素集合:

自定义元素配色

自定义元素配色-2

小结

本文主要分享了笔者常用的几个配图工具,也许读者会思考到: 既然有这么多画图工具,那么为了保持统一风格,是否可以手动绘制所有配图? 这个问题可以基于两点要素考虑: 时间是否充裕以及手动绘图是否可以媲美专业工具自动生成的绘图?此外,笔者自己总结了一个小技巧: 如果一篇文章中超过 70% 的图需要手动绘制,那就全部手动绘制,保持风格的一致性。

Reference

扩展阅读