{"id":9510,"date":"2022-11-22T09:40:45","date_gmt":"2022-11-22T14:40:45","guid":{"rendered":"https:\/\/blogs.pacasmayo.com\/felipe\/?p=9510"},"modified":"2022-11-24T10:48:42","modified_gmt":"2022-11-24T15:48:42","slug":"plantuml-is-king","status":"publish","type":"post","link":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/","title":{"rendered":"PlantUML is king"},"content":{"rendered":"\n<p>Leer en <a href=\"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/\">Espa\u00f1ol<\/a><\/p>\n\n\n\n<p>If we have chatted for more than ten minutes, you&#8217;ve probably heard me mention&nbsp;<a href=\"https:\/\/translate.google.com\/website?sl=es&amp;tl=en&amp;hl=es&amp;client=webapp&amp;u=https:\/\/plantuml.com\/\">PlantUML<\/a>&nbsp;once or twice :).&nbsp;And it is because PlantUML is one of the most versatile tools that I have found in my life.&nbsp;It doesn&#8217;t matter if I&#8217;m programming in C++, NodeJS, Flutter, Helm, Terraform, or even creating an API with swagger, PlantUML is somewhere out there helping me document.&nbsp;One of PlantUML&#8217;s biggest advantages is its ability to create diagrams with textual instructions, and consequently versionable.&nbsp;That is, I don&#8217;t have to change my programmer&#8217;s hat and put on an artist&#8217;s hat to create the graphs and diagrams that will accompany my code, but rather they are created at the same time, and they stay fresh through all the evolutions of the code.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Code in PlantUML<\/td><td>Results<\/td><\/tr><tr><td><pre>@startuml<br>rectangle \"Reusable designs\\n=====\\nArchitects create the blueprint once\" {   <br>  actor \"ISO\" as iso2   <br>  actor Network as network2<br>  actor DevOps as devops2 <br>  actor Storage as storage2 <br>  [Blueprint] as bp2 <br>  [Solution1] as s1 <br>  [Solution2] as s2 <br>} <br>iso2 -&gt; bp2 <br>network2 --&gt; bp2 <br>devops2 --&gt; bp2 <br>bp2 &lt;- storage2 <br>bp2 --&gt; s1 <br>bp2 --&gt; s2 <br>@enduml<\/pre><\/td><td><img decoding=\"async\" src=\"https:\/\/www.plantuml.com\/plantuml\/svg\/JP2nJiGm38RtF8NLlKCx0peG2midqP5ZI5Eh5r6SA7QE0V7kn0r7gDJez_SfygySM6oI_B6PX4uihHj2zuAPxLpIWknNuXFTwdUY--JENj09Wqje1K7E2FEMCIPF0e4STl1b0AoJaA1xceuTM0RFOVoZpoYV8RqhfngRUyJBCRAg1IyXSZDJEUoAghX6TQyFr-LlQkQumobiMNoWOOSy_6TZPQFvDaPhGN-tNxjMWVuNr09jBZ_Sz6svpkfuQ74q1wIbFESF\"><\/td><\/tr><tr><td><pre>@startuml<br>!include &lt;C4\/C4_Container&gt;<br>title Some Network Automation\\nApplication Architecture\\nC4 Container<br>System_Boundary(ssys,Some Network Automation){<br>  Container(sys,Some Network Automation,NodeJS,In-house developed Network Automation)<br>  Container(bull,Bull Queue,Redis\/NodeJS,Queuing engine)<br>  ContainerDb(redis,Redis,Caching DB)<br>}<br>System_Ext(nac,Network Product,Network Access Control)<br>System_Ext(mdm,MDM,Device management system)<br>System_Ext(dns,DNS,DNS &amp; DHCP management system)<br>System_Ext(cmdb,CMDB,\"CMDB, Change Management\")<br>BiRel_R(sys,nac,Reads network devices and writes new role,HTTPS)<br>Rel(mdm,sys,Reads IPTV devices,HTTPS)<br>Rel(sys,dns,Writes DHCP reservation,HTTPS)<br>BiRel(bull,sys,Reads events and writes status,Queue)<br>BiRel(sys,redis,Reads and Writes lists,Redis,port 6379)<br>BiRel(bull,redis,Reads and Writes queues,Redis,port 6379)<br>Rel(sys,cmdb,Writes informational events)<br>SHOW_LEGEND()<br>@enduml<\/pre><\/td><td><img decoding=\"async\" src=\"https:\/\/www.plantuml.com\/plantuml\/svg\/XP5VZr8z48Vl-odctOitdAHcBoGQ4sCMpY6oHX21k3URaDAEqDW_s4v1Olpkqi91I7RrWYRbFCzlPZftaKIWP0txJpjfaa9uMtTlw-wYzew4TXZUCKQQ3CBCMuGnqiw7Rz1BvAqWxTsZwsqsHijoWLwGQqqeAGLyT7KNpZcCpVQHq2xwFZabmhuJupxoPrAhdmp-k9s_a7pi5NwOyNltOkrJH52uHUCtg9wAlKfT9cDu_t30vuG9-HILZhUdlFoNTYj0jph0LsApx8IC7WLU2xdEPDElsAzsoi4FwZWXUTl397YL99tlFIannf8PlAakDQii7pKZtk1MImGhd5YXHKSG2tG5AnTvCvxb7_mFpR2U_4EGLYrvFMhw_AQSKA-5Mo6CpjPDnHZhwocQnRIyV9vZYa95SAVkLMajWd0ATa4Jvayx2DuW7yxdard53dgP90SSvVl9_4jhNbAPo6CybA3Z304ZXctPMOkMZihEBZ9nYuwk-eWaACMoFcobpBSR4-g8dweP7QbTvCO7WbSlNx-vAlQC-3qNUC9iwvLtFh7QVVN1bcc4EVLyMChmqyFYu-3zODnqAdQ7JYLhVWC0\"><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>I even use it to illustrate my theology courses at the University, or the sermons in the church.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><pre>@startuml<br>skinparam backgroundColor transparent<br>(Herodes el Grande) as grande<br>together {<br>  (Herodes Antipas) as antipas #pink<br>  (\"Herodes II - Felipe\") as felipe<br>  (Arist\u00f3bulo) as aristobulo<br>}<br>(Herod\u00edas) as herodias<br>(Herodes Agripa) as agripa<br>grande --&gt; antipas<br>grande --&gt; aristobulo<br>grande --&gt; felipe<br>aristobulo --&gt; herodias<br>aristobulo --&gt; agripa<br>felipe &lt;.. herodias #line:green;line.dotted<br>antipas &lt;.. herodias #line:red;line.dashed;text:red<br>@enduml<\/pre><\/td><td><img decoding=\"async\" src=\"https:\/\/www.plantuml.com\/plantuml\/svg\/ROv1JiD034NtFeNLBYYBv020K2iaeCTmEoOPPJAEF8w4X3WIAuxGYv5C4WA8tVVti__V9oErlWsG6XyxKchnHEUcKkcZUv0WYgOKqx3YQ72rOgr4ETSgBGz4pm2xPrPnd903FYb5nzT82QiimQHYgrdnRGKFqNn7AMCqQTnsFZQmsopCyOW5FdBm7Myo-98rx0xgarq-JtsGxDCuopZ2-nnn-PYVr-FaAVs8hdI8cmwp19YAOb7SBsL-MUlxrLtAhCliBd5__2LfEiAxilmcSHjyv9jAcUFjA4idPknWRl8VhEncb58zQEDN6qtOStHz6xu0\"><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Also, almost all markdown systems have built-in template support, or it&#8217;s available with a plugin.&nbsp;For example,<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>markdown<\/td><td>resultado en HTML<\/td><\/tr><tr><td><pre># Sequence Diagram<br><br>## Example<br>```plantuml<br>@startuml<br>actor user<br>control proxy<br>entity programa<br>database database<br>user -&gt; proxy++ : login<br>proxy -&gt; programa++ : login<br>programa -&gt; database++ : existe el usuario<br>database --&gt; programa-- : si<br>programa -&gt; database++ : consigue actividad del usuario<br>database --&gt; programa--<br>programa --&gt; proxy-- : muestra la actividad<br>proxy --&gt; user--<br>@enduml<br>```<br>## Advantages<br>- First<br>- Second<\/pre><\/td><td><h1>Sequence Diagram<\/h1><h2>Example<\/h2><br><img decoding=\"async\" src=\"https:\/\/www.plantuml.com\/plantuml\/svg\/ZP0z2iCm34Ptdq9xy0KwX5n5ZKKG-AT8SabktzZ594kXc-KdFV5fKKEncgB3rOf0LHAtbcnI8hoax8UZR6n7ApR1X2wWuHELO3nS6m8_V_kd2HuGoyRPzRg1CNjZuwlX8UgOTbOZe0XLAmgNQw6_gRm_UvL_UyuGobibmDNupG43X3-aD-58r5UbIcg24F4IZe1-xdVptYsKGqtn0m00\"><br><h2>Advantages<\/h2><br><ul><li>First<\/li><li>Second<\/li><\/ul><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Although there is a lot of value in using PlantUML as a documentation tool during application development, it becomes invaluable when we use it to generate dynamic diagrams based on the single-source-of-truth.&nbsp;When we want to know the architecture of our application, it is not as important to know how the developer designed it, but how it is in reality.&nbsp;For different reasons the current architecture of our application may be different from its original intention, for example, the developer made a change and forgot to update the document, or in an emergency, someone made a change directly in production.&nbsp;It is therefore important to have the ability to see the current state of the application.&nbsp;The following diagram is an example of how a graph can be generated dynamically based on real data.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"http:\/\/www.plantuml.com\/plantuml\/svg\/lLTTJziy6pxFh_3O9BfeNLlOYzQgL2kbdT3BHzK0HqYJ6zzjBHmxinq-daVyzyV6TKXGmWgQu2Ysx-lZlkBOvOVIMEeiOS470WlA0Vq_cuFae45DpJHQQPsgNgibyUtN9TMhR9ufaB7W6hZ-6ekaHMAiiAQjwnpOd3BCzSN9SIl1IeDi4Qfq47oWF6OPUIvH0FuQYIGH_6jgfZShvnhkzCRr4KrIHXSKY8FKOiwYg5MO4gv-m_Be9dvD-H5VlgPywjctNwh7ZArR3DGrvIcME45S452GeawxC2anl_QJAt6Bx0i3eUzJ2BOPB3JI0acwN6b4g8HOKy5DRf-ua0bc4y5rHFy1j8yw7JDBG6DQdEq6mRQACGFKsMktqIqbUcNW6V-T2Gq4fLB4G389Q7Hy4PsFPmtJahNmY-C4llW1PXIhpu7LntnfsBQAPLketn-vyM20i48bMF01ECbrAhMdPuUDL12dQHugzFhADDHxrlR0W_ejPOTNl1yB9cJl8tJRW_wdqXOQz5kFYmDhruoTrLmDVPnC9Xju7Kwd3PocpgjvSEZ79xY3EDDupg1aFGnzVHXUyNAXzJ9CKqPZRD-iy-HPD_OKZMUNHwDnGu6yeJ4uRtxWiYmRgaxJ8mg9MiS-qtPtxs3dcu_LVsgbM2F7uDhmTAzgvUZqvsmSHGtAbnAKSgtuWOlQZpB9ycVxlPHwtD-lxj43ohkciZGCBsR7lJ141S4_GiwD4O_nnZn8-YGdUyJ7w8-WKen73knYz4olYd5wEMgaDx6BppmuzEEJyR9PL1wVzno6TjvsvtbC3fzAH-EZVIFkh7lXZMsV3a_6qNHejh8LLYdscpaVEhvd_il5riAfdt56di7BJWg7iQQQmRy1GlaHslc-7etisq44o-ivoo1u20gmt8mv1mKdm1KG8so93eGa81tuut2ubqz5-fw1uLCh84K9NnNbzq1vgLPvlK-gT2TxXxMmL5HQXMwx7d8Jho4paN4o4fA3H3l_gmKGI9cuJu3hAgbkDoublbEAOyvmV5tEmrTsQmMLnXeM6LFm7ehb5cF15tJvrsNhEeLOrZIvkrlhrdbCS5e6RhB5RNsrHqDZEbXAjoSirUsAQgZS9aLg0WkSCNqETth8w9BR454Ct6WKgXZbO0MHa7ebWctqj9G8BkAL50aWBOrnJNNzJuQdumeLBbvqIF7ISELdtMY5fUwXHAdVh6cqixihFWC6M47F7bWaYoskMIhO2hHOWbw1D2az50S8bUxVQe8mBD-XzkIIJjEUPoUsyjWMlfdxiF0XrhAtEvRK_YOhuBya-Vfde_Zm1WjDjrV345tn_08j_s8TA9nYfMw59EituH8nk9SSku80kMklMdnkzcQMVgd47xYrxp_fvvT92DQuckBGh6n0uFuXgwOuSMj_9j4ISyN4ifhctAzQ8lkjLMU6cir66oLFunxQgdudZpMzphVTNVzEWg0854tp9-g-Duz1jR4PvMheoTd5wVaQ7_mbGP_Ekugw_VMkacuplK7oRNBk2woL6vzUUh4Vm4cMiFy0\" alt=\"\"\/><figcaption class=\"wp-element-caption\">For obvious reasons, I generated this chart from the helm manifest instead of the actual production data, but the principle is the same, the chart is dynamically generated based on the data provided by helm.<\/figcaption><\/figure>\n\n\n\n<p>Here is another example, I have a utility that automatically generates a graph of my database schema every time I make a change to the code, so the graph is always up to date:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"425\" src=\"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-1-700x425.png\" alt=\"\" class=\"wp-image-9500\" srcset=\"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-1-700x425.png 700w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-1-300x182.png 300w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-1-768x466.png 768w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-1-1536x932.png 1536w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-1-450x273.png 450w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-1-1024x621.png 1024w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-1-989x600.png 989w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-1-150x91.png 150w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-1.png 1589w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><figcaption class=\"wp-element-caption\">Screenshot as the actual graph takes several pages due to the complexity of the database schema<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">It is not perfect<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Artistic drawings<\/h3>\n\n\n\n<p>However, there are some other areas of life where I would like to have a tool like PlantUML, for which PlantUML is not always the best fit.&nbsp;For example, I stopped using PowerPoint a long time ago because of the insistence of Microsoft, and all its competitors, on using closed formats, incompatible with modern version systems&nbsp;<sup>[1]<\/sup>.&nbsp;Instead I use&nbsp;<a href=\"https:\/\/marp.app\">marp<\/a>&nbsp;which allows me to use markdown, and not only it produces the cleanest and most consistent presentations I&#8217;ve ever created, but all the content from all the presentations I&#8217;ve made over the years fits in one tiny git repository.&nbsp;Although it is possible to use PlantUML to illustrate some of my slides, there are times when I would like to be able to create illustrations like those of SmartArt&nbsp;<sup>(TM)<\/sup>, but with the simplicity of PlantUML.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><a href=\"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image.png\" alt=\"\" class=\"wp-image-9498\" width=\"374\" height=\"249\" srcset=\"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image.png 643w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-300x200.png 300w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-450x300.png 450w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-640x428.png 640w, https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-150x100.png 150w\" sizes=\"auto, (max-width: 374px) 100vw, 374px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>For example, it took me about 30 seconds to make this chart in PowerPoint.&nbsp;I clicked \u201cInsert SmartArt\u201d, then chose the pyramid, deleted one of the levels, wrote the two words, and changed the size of the upper triangle to be much smaller than the other, and voila:<\/p>\n\n\n\n<p>Someone (maybe me when I have some free time), could design a system similar to PlantUML (or augment it) so that something similar can be done and maintain a list of pre-made art that can be easily adapted by the user:<\/p>\n\n\n<pre>@startart\ntype=piramide\nstyle=flat\nelements=[\n  {size:10%,color:yellow,label:Inspiration}\n  {size:90%,color:blue,label:Perspiration}\n]\n@endart\n<\/pre>\n\n\n<h3 class=\"wp-block-heading\">Users<\/h3>\n\n\n\n<p>Creating graphics in PlantUML is very simple, and as much as all its fans insist that it is way easier to use than having to draw with the mouse, or drag arrows on the screen, some people will never adopt it.&nbsp;It seems that to be in the group that loves to create graphics based on text instructions, you need to have a developer mindset.&nbsp;Although it is very easy for anyone who writes code, even for novice developers, for others it is a strange and alien practice.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Audience<\/h3>\n\n\n\n<p>As far as consumers are concerned, PlantUML&#8217;s graphics are not \u201cpixel perfect\u201d, in other words, don&#8217;t expect graphics that you can use to make a presentation to your CEO.&nbsp;PlantUML&#8217;s emphasis is the ability to create graphics automatically, based on text instructions, and thus the engine decides where to place the different objects on the screen.&nbsp;These decisions do not always correspond to our tastes and we would like to move one of the objects a few millimeters to the left, or put it on top of another, unfortunately, that is not possible, what PlantUML decides is what you receive, period.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Postprocess<\/h3>\n\n\n\n<p>The ease of creating text-based charts has tons of applications, but as we said before, the results aren&#8217;t necessarily neat enough to put into a presentation for top executives.&nbsp;But PlantUML graphics have the option of being generated in PNG or SVG.&nbsp;We know that PNG is a format that describes the graphic in pixels, but not so SVG which uses a vector format, that is, it describes the lines, rectangles, circles, and texts that are in the graphic to be able to reproduce them in any dimension.&nbsp;I&#8217;d love for someone (maybe me in my spare time) to create a post-processing tool that could take an SVG generated by PlantUML and allow you to manipulate the objects to achieve the &#8220;pixel perfect&#8221; result that can be used in presentations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creative solutions<\/h2>\n\n\n\n<p>When PlantUML provides a less than satisfactory solution, one can always write their own solution by extending PlantUML.&nbsp;For example, PlantUML has something called wbs to describe hierarchies like an orgchart, but it&#8217;s too rigid and limited.&nbsp;For example,<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><pre>@startwbs<br>* **My company**\\nBill Rogers, CEO<br>** **Ofice of the CTO**\\n[backfill], CTO<br>*** *<em>*<\/em>Consultant<em>*<\/em>*\\nDonna Masick<br>*** **Engineering**\\nFelishia Laquish, Director<br>**** **Design**\\nKarla Mamani, Manager<br>***** Jason Miller<br>***** Thomas Albretch<br>***** Liam Cortez<br>***** Boris Cybrinsky<br>***** Carlos Rodriguez<br>**** **Build**\\nCirilo Mann, Manager<br>***** Sam Adams<em><br><\/em>***** Victor Nakazaki<br>***** William Trent<em><br><\/em>***** John Harding<br>***** Clyde Albertson<em><br><\/em>***** Violeta Dominique<br>**** **Run**\\nJim Madison, Manager<br>*****&lt; Chris Branson <br>*****&lt; Naomi Schultz <br>*****&lt; Brandon Alonso <br>*****&gt; Albert Romero<br>*****&gt; Sandra Smith<br>*** **Consultant**\\nHorace Smith<br>@endwbs<\/pre><\/td><td><img decoding=\"async\" src=\"https:\/\/www.plantuml.com\/plantuml\/svg\/RPB1Rjim343l_GgUZNp2CBHnEXHTqm19i1ss7HYRiGbBv4h969olduWfEGGxsNvufXu1FQQCbl-SqaC3JRDTeDFu6sLfcf-ovX1WhmDPMa7xl7jetDcTkIFGC-IHe3tktFnnmcuw5_tNgY0NtMnLqXmoIdPdeo88MqpSJLLube65o5W6DxvGu3GomXj-pELj1HiswhAQ-_x3XX8FukvNjE3J8WglobDm8DVSUyMa0jkISqF7KICcU0edezoDbRunHcZLCbqgMQjnWdOv6KkQbafRjA09zjeR3tEHQyvwvj1xJSl6GJr3xcCE6E6fnvZgzpVsXU0T9xpWn9L-Bx4USpIIV5r3Hu4Nj9vbk8Q4fIVVWYmdbTj83PGHDXfP-6EcQzz-5gzxvLYYUavwN_S9sj4NNXjAdUVm7SiaE7JZ7FBb2jtfLShfMjn_z7DjWRr6iXiy5DCG3f7p-D-xyAA67LNXaQGl5_0l\" style=\"height:600px\"><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>As you can see I don&#8217;t have much control over the direction and appearance of the branches (only the second level is aligned horizontally), although it is possible to change colors, but in general it is not flexible enough to use in real cases.<\/p>\n\n\n\n<p>The good news is that if none of PlantUML&#8217;s diagram types work for you, you can always use GraphViz, the foundation on which PlantUML is built.\u00a0For example, with a little bit of work I built a <a href=\"https:\/\/gitlab.migrandama.com\/foss\/plantuml-templates\">library<\/a> that I can then use to create a much better looking orgchart:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><pre>@startuml<br>!include https:\/\/gitlab.migrandama.com\/foss\/plantuml-templates\/-\/raw\/main\/org-chart.puml<br>!$managerColor=\"#503000\"<br>digraph \"org-chart\" {<br>  rankdir=\"TB\" splines=\"true\" overlap=\"false\" nodesep=\"0.2\" ranksep=\"0.001\" fontname=\"Arial\" fontsize=\"9\" style=\"rounded,filled\" fillcolor=\"#ffffff\" compound=\"true\"<br>  edge [penwidth=\"3.0\" color=\"#00000033\" fontname=\"Arial\" fontsize=\"9\" dir=none ]<br>  node [color=\"#f09030\" fontcolor=\"#503000\"]<br><br>  manager(billr,Bill Rogers,My company,CEO)<br>  manager(backfill,\"[backfill]\",Office of the CTO,CTO,billr,'fillcolor=lightgray color=lightgray   fontcolor=\"#909090\"')<br>  individual(donna,Donna Masick,Consultant,backfill)<br>  manager(felishia,Felishia Laquish,Engineering,Director,backfill)<br>  individual(horace,Horace Smith,Consultant,backfill)<br>  manager(karla,Karla Mamani,Design,Manager,felishia)<br>  manager(cirilo,Cirilo Mann,Build,Manager,felishia)<br>  manager(jim,Jim Madison,Run,Manager,felishia)<br>  !$designers = {\"members\":[\"Jason Miller\",\"Thomas Albretch\",\"Liam Cortez\",\"Boris Cybrinsky\",\"Carlos Rodriguez\"]}<br>  team(designers,Designers,$designers.members,karla)<br>  !$builders = {\"members\":[\"Sam Adams\",\"William Trent\",\"John Harding\",\"Clyde Albertson\",\"Violeta Dominique\"]}<br>  team(builders,Builders,$builders.members,cirilo)<br>  !$dc = {\"members\":[\"Chris Branson\",\"Naomi Schultz\",\"Brandon Alonso\"]}<br>  team(dc,Data Center,$dc.members,jim)<br>  !$cloud = {\"members\":[\"Albert Romero\",\"Sandra Smith\"]}<br>  team(cloud,Cloud,$cloud.members,jim);<br>}<br>@enduml<\/pre><\/td><\/tr><tr><td><img decoding=\"async\" src=\"https:\/\/www.plantuml.com\/plantuml\/svg\/XPDHRzj63CVVzIckjm5DWOkjBTX3EXXOB7SeicO1cc1xAF90wsY9yntFlJkrS8j-zr6IBIzPiCc0HF98_d-av1V4jUiigZRdNNezdpUK7Qnddfe8RC73h0v-lWafpNSEE7VUdMVqOcTCy_DvXCzp3yJp49lpkeMOPpl9ALvyxu6XmLW55-92V_TJUL6MfIvittdNAZqLQFMrK4hajfOaytwfLTevOamBdME7MeLF61ti5de3BedFmM92ySlPZtgeF7Xb-ODMcy2PmUD2NqK2DmOIVP70fRJEUoTM31rRj6P3pg6L77dM1zJDS6aba-_wj2E6KA9jK7tO8Nycczk5lfYLMXthok6wkFW_X7vC3epgGJhABD9naYulPKzZVlruSm-gA0uxFLiBRJGt-m4HU6-M4b3lWvmbKxsvVNNAX7hRpsPkDnkgKOMDoYsgwlxMJ4UzCtPyULg3ewRDJOIzUk8_Ohii-vz--QeeY2rz8jk1ExE16SoglwiRI5HlJHKuTIu3vqdt1Bb1HwabC6-u8KQCn8tvzH1Kx-1Z9vPPKSGwXtXgy4_DDaIeqRmT7khEKswV5vrKjn2TK6AYXirlulImSaZcPimmHwuJQKsHN33BZfmrrU184VD_bFn5thpls5oJbrHBAR1H_qwNVumTK30cjL1VjKU_5bk__g2lGOhKZU1Zr4RVjy53KbTk7J7NhKJU4NXLXPZnYtZB42cfQh-En6cxbqWbquKa7uYDr7IIzF2jo0Z-R98qgyawSSmE3APVrSYuxYT_1l5E0Aui-2HgVmeeYNyVaRFurw5bzHQY9Mvw6BUtsDDZp3ANHFwWu323MWLFJ1yxdFYEScPvD2Q22Mvy9-C6wwTSLTllOXc1HwdVGJJKNTrsBW-xaXCRM722P9psKfiL254b4s0qqdYIa_SvQDKkTFQft3YLBDfZ3DB-Jhf763_7gVbGQQhXFhPvrFpdubln2xBjlFiR\"><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>One of PlantUML&#8217;s lesser-known features is its preprocessor.&nbsp;The graph above is built based on the preprocessor.&nbsp;Using an extra preprocessor function, %load_json, and posting the information for the orgchart somewhere in JSON format, then the above chart could be generated dynamically:<\/p>\n\n\n<pre>!include https:\/\/gitlab.migrandama.com\/foss\/plantuml-templates\/-\/raw\/main\/org-chart.puml\n!$org_data = %load_json(\"https:\/\/migrandama.com\/management\/org_data\")\n!$managerColor=\"#503000\"\ndigraph \"org-chart\" {\n  rankdir=\"TB\" splines=\"true\" overlap=\"false\" nodesep=\"0.2\" ranksep=\"0.001\" fontname=\"Arial\" fontsize=\"9\" style=\"rounded,filled\" fillcolor=\"#ffffff\" compound=\"true\"\n  edge [penwidth=\"3.0\" color=\"#00000033\" fontname=\"Arial\" fontsize=\"9\" dir=none ]\n  node [color=\"#f09030\" fontcolor=\"#503000\"]\n  officeEntity($org_data)\n}\n<\/pre>\n\n\n<p>Assuming that the data served by the URL contains the same information that we used to create the orgchart above, this would be all the PlantUML code needed to generate the same chart, from then on, we would just need to keep the information updated in the json file, and the orgchart will always be fresh.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">In conclusion<\/h2>\n\n\n\n<p>Why do I say that PlantUML is one of the most powerful and versatile tools in my repertoire?&nbsp;Well, because I use it in various activities of my life, and it almost always saves me a lot of time generating a text graph compared to what it would have taken me to draw, and that is not even considering all the time it would take to keep the drawing up to date when the information changes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><sup>1<\/sup>&nbsp;Microsoft insists on its closed versioning model that a) It only works if you turn it on, but anyone can turn it off and b) It doesn&#8217;t keep a secure history of who made which changes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Leer en Espa\u00f1ol If we have chatted for more than ten minutes, you&#8217;ve probably heard me mention&nbsp;PlantUML&nbsp;once or [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":9505,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[38],"tags":[65,59],"class_list":["post-9510","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology","tag-plantuml","tag-technology"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PlantUML is king - El blog de Felipe<\/title>\n<meta name=\"description\" content=\"If you are creating or documenting code, or illustrating some concept, or if you need to create dynamic diagrams, PlantUML is king.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PlantUML is king - El blog de Felipe\" \/>\n<meta property=\"og:description\" content=\"If you are creating or documenting code, or illustrating some concept, or if you need to create dynamic diagrams, PlantUML is king.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/\" \/>\n<meta property=\"og:site_name\" content=\"El blog de Felipe\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-22T14:40:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-24T15:48:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"478\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"AI\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"AI\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/\"},\"author\":{\"name\":\"AI\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#\\\/schema\\\/person\\\/e32bfb69f0dcbed869e838474a34d240\"},\"headline\":\"PlantUML is king\",\"datePublished\":\"2022-11-22T14:40:45+00:00\",\"dateModified\":\"2022-11-24T15:48:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/\"},\"wordCount\":1355,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/files\\\/2022\\\/11\\\/image-2.png\",\"keywords\":[\"plantuml\",\"technology\"],\"articleSection\":[\"Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/\",\"url\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/\",\"name\":\"PlantUML is king - El blog de Felipe\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/files\\\/2022\\\/11\\\/image-2.png\",\"datePublished\":\"2022-11-22T14:40:45+00:00\",\"dateModified\":\"2022-11-24T15:48:42+00:00\",\"description\":\"If you are creating or documenting code, or illustrating some concept, or if you need to create dynamic diagrams, PlantUML is king.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/files\\\/2022\\\/11\\\/image-2.png\",\"contentUrl\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/files\\\/2022\\\/11\\\/image-2.png\",\"width\":900,\"height\":478},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-is-king\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PlantUML is king\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#website\",\"url\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/\",\"name\":\"El blog de Felipe\",\"description\":\"De la abundancia del coraz\u00f3n...\",\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#organization\",\"name\":\"El blog de Felipe\",\"url\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/files\\\/2019\\\/11\\\/cropped-caricatura_felipe.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/files\\\/2019\\\/11\\\/cropped-caricatura_felipe.jpg\",\"width\":1360,\"height\":598,\"caption\":\"El blog de Felipe\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#\\\/schema\\\/person\\\/e32bfb69f0dcbed869e838474a34d240\",\"name\":\"AI\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4afeebd1deb1471ed6e7e21e6dc44176da2cb2ef0704b36e720ef8656e34bd65?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4afeebd1deb1471ed6e7e21e6dc44176da2cb2ef0704b36e720ef8656e34bd65?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4afeebd1deb1471ed6e7e21e6dc44176da2cb2ef0704b36e720ef8656e34bd65?s=96&d=mm&r=g\",\"caption\":\"AI\"},\"description\":\"Este art\u00edculo ha sido seleccionado y parcialmente escrito e ilustrado por Inteligencia Artificial (AI) basado en noticias disponibles.\",\"url\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/author\\\/ai\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PlantUML is king - El blog de Felipe","description":"If you are creating or documenting code, or illustrating some concept, or if you need to create dynamic diagrams, PlantUML is king.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/","og_locale":"en_US","og_type":"article","og_title":"PlantUML is king - El blog de Felipe","og_description":"If you are creating or documenting code, or illustrating some concept, or if you need to create dynamic diagrams, PlantUML is king.","og_url":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/","og_site_name":"El blog de Felipe","article_published_time":"2022-11-22T14:40:45+00:00","article_modified_time":"2022-11-24T15:48:42+00:00","og_image":[{"width":900,"height":478,"url":"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-2.png","type":"image\/png"}],"author":"AI","twitter_card":"summary_large_image","twitter_misc":{"Written by":"AI","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/#article","isPartOf":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/"},"author":{"name":"AI","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#\/schema\/person\/e32bfb69f0dcbed869e838474a34d240"},"headline":"PlantUML is king","datePublished":"2022-11-22T14:40:45+00:00","dateModified":"2022-11-24T15:48:42+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/"},"wordCount":1355,"commentCount":1,"publisher":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#organization"},"image":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-2.png","keywords":["plantuml","technology"],"articleSection":["Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/","url":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/","name":"PlantUML is king - El blog de Felipe","isPartOf":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/#primaryimage"},"image":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-2.png","datePublished":"2022-11-22T14:40:45+00:00","dateModified":"2022-11-24T15:48:42+00:00","description":"If you are creating or documenting code, or illustrating some concept, or if you need to create dynamic diagrams, PlantUML is king.","breadcrumb":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/#primaryimage","url":"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-2.png","contentUrl":"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-2.png","width":900,"height":478},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.pacasmayo.com\/felipe\/"},{"@type":"ListItem","position":2,"name":"PlantUML is king"}]},{"@type":"WebSite","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#website","url":"https:\/\/blogs.pacasmayo.com\/felipe\/","name":"El blog de Felipe","description":"De la abundancia del coraz\u00f3n...","publisher":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.pacasmayo.com\/felipe\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#organization","name":"El blog de Felipe","url":"https:\/\/blogs.pacasmayo.com\/felipe\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#\/schema\/logo\/image\/","url":"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2019\/11\/cropped-caricatura_felipe.jpg","contentUrl":"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2019\/11\/cropped-caricatura_felipe.jpg","width":1360,"height":598,"caption":"El blog de Felipe"},"image":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#\/schema\/person\/e32bfb69f0dcbed869e838474a34d240","name":"AI","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4afeebd1deb1471ed6e7e21e6dc44176da2cb2ef0704b36e720ef8656e34bd65?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4afeebd1deb1471ed6e7e21e6dc44176da2cb2ef0704b36e720ef8656e34bd65?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4afeebd1deb1471ed6e7e21e6dc44176da2cb2ef0704b36e720ef8656e34bd65?s=96&d=mm&r=g","caption":"AI"},"description":"Este art\u00edculo ha sido seleccionado y parcialmente escrito e ilustrado por Inteligencia Artificial (AI) basado en noticias disponibles.","url":"https:\/\/blogs.pacasmayo.com\/felipe\/author\/ai\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/posts\/9510","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/comments?post=9510"}],"version-history":[{"count":15,"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/posts\/9510\/revisions"}],"predecessor-version":[{"id":9549,"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/posts\/9510\/revisions\/9549"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/media\/9505"}],"wp:attachment":[{"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/media?parent=9510"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/categories?post=9510"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/tags?post=9510"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}