关于一个插图的翻译

简介: 因为原文中有多个类似的图, 想找一个与原文尽量接近的方式进行表达. 一开始想用PlantUML来实现, 发现受UML的局限,画一个双向箭头都很麻烦. PlantUML底层用的dot语言, 所以直接用Graphviz的dot语言更方便.

先看一下图片对比效果

原图

H%J$G8C2{(`NC2M3H7WVP{V.png

译文

($[GJH8K%W@B@OO4T7I78MR.png

这个示意图没有什么特别的, 表现的就是tty的软硬件的关系

因为原文中有多个类似的图, 想找一个与原文尽量接近的方式进行表达. 一开始想用PlantUML来实现, 发现受UML的局限,画一个双向箭头都很麻烦. PlantUML底层用的dot语言, 所以直接用Graphviz的dot语言更方便.


简单地学习了一下, 效果不错, 特分享给大家.

我用的是mac, 安装graphviz

$ brew install graphviz

安装一个Atom或Sublime Text的插件, 我最后用的是Atom里的Graphviz preview+, 用起来很方便, 可以做到实时重绘, 不用了解命令行参数了.截图如下:

CD~A9`[MXS8OB@ZD0N8K2[Q.png


最后放上上面插图的源码,供有兴趣的同学参考,回头我会把全部译文和源码放到github上.

digraph TTY{
edge [dir="both"]
rankdir="LR";
subgraph cluster  {
   //[ID="dd"];
     label="硬件"
     color="#e3e3d1"
     style=filled
     fillcolor="#e3e3d1"
     终端[shape=box3d];
     物理线路[shape=box3d];
     UART[shape=box3d];
    终端 -> 物理线路 ->UART: 万能异部收发器;
}
subgraph cluster软件 {
style=filled
color="#e3e3d1"
label="软件"
fillcolor="#e3e3d1"
UART->"UART\n驱动" ;
   subgraph cluster内核 {
     color="#000000"
     style="dashed"
     label="内核"
      "行\n规程" [comment="线路规程"];
    "UART\n驱动" -> "行\n规程";
        "行\n规程" -> "TTY\n驱动";
   }
     用户进程1 [label = "用户\n进程"]  ;
     用户进程2 [label = "用户\n进程"]  ;
     用户进程3 [label = "用户\n进程"]  ;
    "TTY\n驱动" -> 用户进程1  ;
    "TTY\n驱动" -> 用户进程2;
    "TTY\n驱动" -> 用户进程3;
}
}
相关文章
|
存储 Java
Dijkstra最短路径(Java)(详细+模板)
Dijkstra最短路径(Java)(详细+模板)
236 4
|
11月前
|
数据采集 运维 数据可视化
阿里云多模态数据信息提取解决方案深度评测与优化建议
本文基于多模态数据信息提取方案的部署体验,深入剖析其在操作界面、部署文档、函数模板、官方示例及实用性与移植性等方面的表现,并提出针对性改进建议。优化建议涵盖模型性能对比、实时校验、故障排查手册、代码注释扩充、行业专属示例集等,旨在提升方案的易用性、功能性和通用性,助力企业在复杂数据处理中高效挖掘价值信息,推动数字化转型。
277 9
|
监控 前端开发 JavaScript
前端开发的终极奥义:如何让你的代码既快又美,还不易出错?
【10月更文挑战第31天】前端开发是一个充满挑战与机遇的领域,本文从性能优化、代码美化和错误处理三个方面,探讨了如何提升代码的效率、可读性和健壮性。通过减少DOM操作、懒加载、使用Web Workers等方法提升性能;遵循命名规范、保持一致的缩进与空行、添加注释与文档,让代码更易读;通过输入验证、try-catch捕获异常、日志与监控,增强代码的健壮性。追求代码的“快、美、稳”,是每个前端开发者的目标。
183 3
|
移动开发 小程序 数据可视化
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
291 2
|
机器学习/深度学习 人工智能 并行计算
GPU 和 CPU 处理器的架构
CPU(中央处理器)和 GPU(图形处理单元)是计算机系统中最重要的两种处理器。它们各自的架构设计和技术体系决定了其在不同应用领域中的性能和效率。
703 1
|
安全 Go
Golang深入浅出之-接口(Interfaces)详解:抽象、实现与空接口
【4月更文挑战第22天】Go语言接口提供抽象能力,允许类型在不暴露实现细节的情况下遵循行为约定。接口定义了一组方法签名,类型实现这些方法即实现接口,无需显式声明。接口实现是隐式的,通过确保类型具有接口所需方法来实现。空接口`interface{}`接受所有类型,常用于处理任意类型值。然而,滥用空接口可能丧失类型安全性。理解接口、隐式实现和空接口的使用能帮助编写更健壮的代码。正确使用避免方法,如确保方法签名匹配、检查接口实现和谨慎处理空接口,是关键。
339 1
|
前端开发 JavaScript 应用服务中间件
个人博客网站如何实现https重定向(301)到http
对于个人网站站注册比较少的,服务器配置不是很好的,没必要https,https跳转到http是要时间的,会影响网站打开的速度。免费的https每年都要更换。
600 2
|
存储 JavaScript
uniapp在不需要后端数据的情况下 怎么记录用户进一次记录一次
uniapp在不需要后端数据的情况下 怎么记录用户进一次记录一次
253 0
|
存储 缓存 运维
Nacos 配置管理最佳实践
Nacos3.0 中,在 SDK 能力提升,界面交互升级,服务端核心能力,可观测可运维,稳定性&高可用方面都规划了诸多功能。
Nacos 配置管理最佳实践

热门文章

最新文章