{"id":9497,"date":"2022-11-22T08:02:35","date_gmt":"2022-11-22T13:02:35","guid":{"rendered":"https:\/\/blogs.pacasmayo.com\/felipe\/?p=9497"},"modified":"2022-11-24T10:55:39","modified_gmt":"2022-11-24T15:55:39","slug":"plantuml-es-rey","status":"publish","type":"post","link":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/","title":{"rendered":"PlantUML es rey"},"content":{"rendered":"\n<p>Read in <a href=\"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-is-king\/\">English<\/a><\/p>\n\n\n\n<p>Si has conversado conmigo por m\u00e1s de diez minutos, probablemente me has escuchado mencionar <a href=\"https:\/\/plantuml.com\/\">PlantUML<\/a> una o dos veces :). Y es que PlantUML es una de las herramientas m\u00e1s vers\u00e1tiles que he encontrado en mi vida.  No importa si estoy programando en C++, NodeJS, Flutter, Helm, Terraform o a\u00fan creando un API with swagger, PlantUML est\u00e1 en alg\u00fan lugar por all\u00ed ayud\u00e1ndome a documentar.  Una de las ventajas m\u00e1s grandes de PlantUML es su capacidad de crear diagramas con instrucciones textuales, y por consiguiente versionable.  Es decir, no tengo que cambiarme el sombrero de programador y ponerme el de artista para crear los gr\u00e1ficos y diagramas que acompa\u00f1ar\u00e1n mi c\u00f3digo, sino que estos son creados al mismo tiempo, y se mantienen frescos a trav\u00e9s de todas las evoluciones del c\u00f3digo.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>C\u00f3digo en PlantUML<\/td><td>Resultado<\/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>Inclusive, lo uso para ilustrar mis cursos de teolog\u00eda en la Universidad, o los sermones en la iglesia.<\/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>Adem\u00e1s, casi todos los sistemas de markdown tienen soporte de plantuml empotrado, o est\u00e1 disponible con un plugin.  Por ejemplo,<\/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># Diagrama de secuencia<br><br>## Ejemplo<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>## Ventajas<br>- Primera<br>- Segunda<\/pre><\/td><td><h1>Diagrama de secuencia<\/h1><h2>Ejemplo<\/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>Ventajas<\/h2><br><ul><li>Primera<\/li><li>Segunda<\/li><\/ul><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Aunque hay mucho valor en usar PlantUML como herramienta de documentaci\u00f3n durante el desarrollo de una aplicaci\u00f3n, se convierte en invalorable cuando la usamos para generar diagramas din\u00e1micos en base a la fuente \u00fanica de la verdad.  Cuando queremos saber la arquitectura de nuestra aplicaci\u00f3n, no es importante saber c\u00f3mo la dise\u00f1\u00f3 el desarrollador, sino c\u00f3mo est\u00e1 en la realidad.  Por diferentes motivos la arquitectura actual de nuestra aplicaci\u00f3n puede ser diferente de su intenci\u00f3n original, por ejemplo, el desarrollador hizo un cambio y olvid\u00f3 actualizar el documento, o en una emergencia, alguien hizo un cambio directamente en producci\u00f3n.  Es importante, por lo tanto, tener la habilidad de ver la situaci\u00f3n actual de la aplicaci\u00f3n.  El siguiente diagrama es un ejemplo de como se puede generar un gr\u00e1fico din\u00e1micamente en base a informaci\u00f3n real.<\/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\">Por razones obvias, gener\u00e9 este diagrama del manifiesto de helm en lugar de la informaci\u00f3n real de producci\u00f3n, pero el principio es el mismo, el diagrama es generado din\u00e1micamente en base a la informaci\u00f3n provista por helm.<\/figcaption><\/figure>\n\n\n\n<p>Otro ejemplo, tengo un utilitario que autom\u00e1ticamente genera un gr\u00e1fico del esquema de mi base de datos cada vez que hago un cambio en el c\u00f3digo, de manera que el gr\u00e1fico est\u00e1 siempre actualizado:<\/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\">Captura de pantalla siendo que el gr\u00e1fico real toma varias p\u00e1ginas debido a la complejidad del esquema de la base de datos<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">No es perfecto<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Dibujos art\u00edsticos<\/h3>\n\n\n\n<p>Sin embargo, hay algunas otras \u00e1reas de la vida para las que yo quisiera tener una herramienta como PlantUML, para las cu\u00e1les PlantUML no siempre es la m\u00e1s adecuada.  Por ejemplo, hace tiempo dej\u00e9 de usar PowerPoint por la insistencia de Microsoft, y todos sus competidores, en usar formatos cerrados e incompatibles con sistemas de versi\u00f3n moderno<sup>[1]<\/sup>.  En su lugar uso <a href=\"https:\/\/marp.app\/\">marp<\/a> que me permite usar markdown, y no solamente produce las presentaciones m\u00e1s limpias y consistentes que he creado, sino que adem\u00e1s, todo el contenido de todas las presentaciones que he hecho durante a\u00f1os cabe en un diminuto repositorio de git.  Aunque es posible usar PlantUML para ilustrar algunos de mis slides, en algunas oportunidades, me gustar\u00eda poder crear ilustraciones como las de SmartArt<sup>(TM)<\/sup>, pero con la simpleza de 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>Por ejemplo, me tom\u00f3 m\u00e1s o menos 30 segundos hacer este gr\u00e1fico en PowerPoint.  Puse &#8220;Insertar SmartArt&#8221;, escog\u00ed la pir\u00e1mide, elimin\u00e9 uno de los niveles, escrib\u00ed las dos palabras, y cambi\u00e9 el tama\u00f1o del tri\u00e1ngulo superior para ser mucho m\u00e1s peque\u00f1o que el otro y voil\u00e1:<\/p>\n\n\n\n<p>Alguien (tal vez yo cuando tenga un tiempo libre), podr\u00eda dise\u00f1ar un sistema parecido a PlantUML (o aumentarlo) para que se pueda hacer algo parecido y mantener una lista de arte prefabricado que pueda ser f\u00e1cilmente adaptado por el usuario:<\/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\">Usuarios<\/h3>\n\n\n\n<p>Crear gr\u00e1ficos en PlantUML es muy simple, y por m\u00e1s que todos sus fan\u00e1ticos insisten que es much\u00edsimo m\u00e1s f\u00e1cil de usar que tener que dibujar con el mouse, o jalar flechas en la pantalla, hay personas que nunca lo adoptar\u00e1n. Parece que para estar en el grupo de los que les encanta crear gr\u00e1ficos en base a instrucciones en texto es necesario tener una mentalidad de desarrollador.  Aunque es muy f\u00e1cil para cualquier persona que escriba c\u00f3digo, a\u00fan para los desarrolladores novatos, para otros es una pr\u00e1ctica extra\u00f1a y ajena.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Audiencia<\/h3>\n\n\n\n<p>Con respecto a los consumidores, los gr\u00e1ficos de PlantUML no son &#8220;pixel perfect&#8221;, en otras palabras, no esperes gr\u00e1ficos que podr\u00e1s usar para hacer una presentaci\u00f3n a tu CEO.  El \u00e9nfasis de PlantUML es la capacidad de crear gr\u00e1ficos autom\u00e1ticamente, basados en instrucciones de texto, y por lo tanto, la m\u00e1quina creadora decide d\u00f3nde colocar los diferentes objetos en la pantalla.  Estas decisiones no siempre corresponden a nuestros gustos y quisieramos mover uno de los objetos unos milimetros a la izquierda, o ponerlo encima de otro, lastimosamente, eso no es posible, lo que decide PlantUML es lo que recibes, punto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Postproceso<\/h3>\n\n\n\n<p>La facilidad de crear gr\u00e1ficos en base a texto tiene much\u00edsimas aplicaciones, pero como dijimos antes, los resultados no son necesariamente suficientemente pulcros como para poner en una presentaci\u00f3n para los altos ejecutivos.  Pero los gr\u00e1ficos de PlantUML tienen la opci\u00f3n de ser generados en PNG o en SVG.  Sabemos que el PNG es un formato que describe el gr\u00e1fico en pixeles, pero no as\u00ed el SVG que usa un formato de vectores, es decir, describe las lineas, rect\u00e1ngulos, c\u00edrculos, textos que hay en el gr\u00e1fico para poder reproducirlos en cualquier dimensi\u00f3n.  Me encantar\u00eda que alguien (tal vez yo en mi tiempo libre) creara una herramienta de postproceso que pudiera tomar un SVG generado por PlantUML y permitiera manipular los objetos para conseguir el resultado &#8220;pixel perfect&#8221; que se pueda usar en presentaciones.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Soluciones creativas<\/h2>\n\n\n\n<p>Cuando PlantUML provee una soluci\u00f3n menos que satisfactoria, uno siempre puede escribir su propia soluci\u00f3n extendiendo PlantUML. Por ejemplo, PlantUML tienen algo llamado wbs para describir jerarqu\u00edas como un orgchart, pero es demasiado r\u00edgido y limitado. Por ejemplo,<\/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>Como pueden ver no tengo mucho control sobre la direcci\u00f3n y el aspecto de las ramas (solo el segundo nivel se al\u00ednea horizontalmente), aunque s\u00ed es posible cambiar colores, pero en general no es suficientemente flexible para usar en casos reales.<\/p>\n\n\n\n<p>Las buenas noticias son que si ninguno de los tipos de diagramas de PlantUML te convencen, siempre puedes usar GraphViz, la base sobre la cual est\u00e1 constru\u00edda PlantUML.  Por ejemplo, con un poquito de trabajo constru\u00ed una <a href=\"https:\/\/gitlab.migrandama.com\/foss\/plantuml-templates\">librer\u00eda<\/a> que luego puedo utilizar para crear un orgchart que se ve mucho mejor:<\/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,Bil 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>Una de las funciones menos conocidas de PlantUML es su preprocesador.  El gr\u00e1fico anterior est\u00e1 construido en base al preprocesador. Usando una funci\u00f3n extra del preprocesador, %load_json, y publicando la informaci\u00f3n para el orgchart en alg\u00fan lugar con formato JSON, entonces el gr\u00e1fico anterior podr\u00eda generarse din\u00e1micamente:<\/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>Asumiendo que los datos servidos por el URL contienen la misma informaci\u00f3n que usamos para crear el orgchart anterior, esto ser\u00eda todo el c\u00f3digo de PlantUML necesario para generar el mismo gr\u00e1fico, de all\u00ed en adelante, solo se necesitar\u00eda mantener la informaci\u00f3n actualizada en el archivo json y el orgchart siempre estar\u00e1 fresco.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Concluyendo<\/h2>\n\n\n\n<p>\u00bfPor qu\u00e9 digo que PlantUML es una de las herramientas m\u00e1s poderosas y vers\u00e1tiles de mi repertorio? pues porque la uso en actividades diversas de mi vida, y casi siempre me ahorra much\u00edsimo tiempo generando un gr\u00e1fico de texto de lo que me hubiera tomado dibujar, y eso sin considerar todo el tiempo que tomar\u00eda mantener al d\u00eda el dibujo cuando la informaci\u00f3n cambia. <\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><sup>1<\/sup> Microsoft insiste en su modelo cerrado de versionamiento que a) S\u00f3lo funciona si lo enciendes, pero cualquiera puede apagarlo y b) No guarda una historia segura de qui\u00e9n hizo cu\u00e1l cambio.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Read in English Si has conversado conmigo por m\u00e1s de diez minutos, probablemente me has escuchado mencionar PlantUML [&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,39],"class_list":["post-9497","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology","tag-plantuml","tag-tecnologia"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PlantUML es rey - El blog de Felipe<\/title>\n<meta name=\"description\" content=\"Si est\u00e1s creando o documentando c\u00f3digo, o ilustrando alg\u00fan concepto, o si necesitas crear diagramas din\u00e1micos, PlantUML es el rey.\" \/>\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-es-rey\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PlantUML es rey - El blog de Felipe\" \/>\n<meta property=\"og:description\" content=\"Si est\u00e1s creando o documentando c\u00f3digo, o ilustrando alg\u00fan concepto, o si necesitas crear diagramas din\u00e1micos, PlantUML es el rey.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/\" \/>\n<meta property=\"og:site_name\" content=\"El blog de Felipe\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-22T13:02:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-24T15:55:39+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-es-rey\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-es-rey\\\/\"},\"author\":{\"name\":\"AI\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#\\\/schema\\\/person\\\/e32bfb69f0dcbed869e838474a34d240\"},\"headline\":\"PlantUML es rey\",\"datePublished\":\"2022-11-22T13:02:35+00:00\",\"dateModified\":\"2022-11-24T15:55:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-es-rey\\\/\"},\"wordCount\":1415,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-es-rey\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/files\\\/2022\\\/11\\\/image-2.png\",\"keywords\":[\"plantuml\",\"Tecnolog\u00eda\"],\"articleSection\":[\"Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-es-rey\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-es-rey\\\/\",\"url\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-es-rey\\\/\",\"name\":\"PlantUML es rey - El blog de Felipe\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-es-rey\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-es-rey\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/files\\\/2022\\\/11\\\/image-2.png\",\"datePublished\":\"2022-11-22T13:02:35+00:00\",\"dateModified\":\"2022-11-24T15:55:39+00:00\",\"description\":\"Si est\u00e1s creando o documentando c\u00f3digo, o ilustrando alg\u00fan concepto, o si necesitas crear diagramas din\u00e1micos, PlantUML es el rey.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-es-rey\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-es-rey\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/2022\\\/11\\\/22\\\/plantuml-es-rey\\\/#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-es-rey\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.pacasmayo.com\\\/felipe\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PlantUML es rey\"}]},{\"@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 es rey - El blog de Felipe","description":"Si est\u00e1s creando o documentando c\u00f3digo, o ilustrando alg\u00fan concepto, o si necesitas crear diagramas din\u00e1micos, PlantUML es el rey.","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-es-rey\/","og_locale":"en_US","og_type":"article","og_title":"PlantUML es rey - El blog de Felipe","og_description":"Si est\u00e1s creando o documentando c\u00f3digo, o ilustrando alg\u00fan concepto, o si necesitas crear diagramas din\u00e1micos, PlantUML es el rey.","og_url":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/","og_site_name":"El blog de Felipe","article_published_time":"2022-11-22T13:02:35+00:00","article_modified_time":"2022-11-24T15:55:39+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-es-rey\/#article","isPartOf":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/"},"author":{"name":"AI","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#\/schema\/person\/e32bfb69f0dcbed869e838474a34d240"},"headline":"PlantUML es rey","datePublished":"2022-11-22T13:02:35+00:00","dateModified":"2022-11-24T15:55:39+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/"},"wordCount":1415,"commentCount":1,"publisher":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#organization"},"image":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-2.png","keywords":["plantuml","Tecnolog\u00eda"],"articleSection":["Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/","url":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/","name":"PlantUML es rey - El blog de Felipe","isPartOf":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/#primaryimage"},"image":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.pacasmayo.com\/felipe\/files\/2022\/11\/image-2.png","datePublished":"2022-11-22T13:02:35+00:00","dateModified":"2022-11-24T15:55:39+00:00","description":"Si est\u00e1s creando o documentando c\u00f3digo, o ilustrando alg\u00fan concepto, o si necesitas crear diagramas din\u00e1micos, PlantUML es el rey.","breadcrumb":{"@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.pacasmayo.com\/felipe\/2022\/11\/22\/plantuml-es-rey\/#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-es-rey\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.pacasmayo.com\/felipe\/"},{"@type":"ListItem","position":2,"name":"PlantUML es rey"}]},{"@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\/9497","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=9497"}],"version-history":[{"count":22,"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/posts\/9497\/revisions"}],"predecessor-version":[{"id":9552,"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/posts\/9497\/revisions\/9552"}],"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=9497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/categories?post=9497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.pacasmayo.com\/felipe\/wp-json\/wp\/v2\/tags?post=9497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}