{"id":5516,"date":"2024-09-08T19:06:02","date_gmt":"2024-09-08T17:06:02","guid":{"rendered":"https:\/\/www.rtbasics.com\/WP_2\/?p=5516"},"modified":"2024-09-08T19:06:02","modified_gmt":"2024-09-08T17:06:02","slug":"mis-herramientas-de-desarrollo","status":"publish","type":"post","link":"https:\/\/www.rtbasics.com\/WP_2\/archives\/5516","title":{"rendered":"Mis herramientas de desarrollo"},"content":{"rendered":"<body>\n<p><\/p>\n\n\n\n<div class=\"wp-block-jetpack-markdown\"><p>Estaba yo pensando\u2026 \u00bfPor donde empiezo?<\/p>\n<p>Bueno, tratar\u00e9 de empezar por el principio.<\/p>\n<p>La idea es que voy a reflejar en una serie de posts la experiencia que he ido adquiriendo a lo largo de estos a\u00f1os que llevo trabajando.<\/p>\n<p>He ocupado distintos puestos en distintas empresas, pr\u00e1cticamente todos alrededor de la ingenier\u00eda de telecontrol en el \u00e1rea de la energ\u00eda el\u00e9ctrica.<\/p>\n<p>He trabajado unas veces en el entorno del transporte de energ\u00eda, otras veces en el entorno de la distribuci\u00f3n, pero casi siempre en la ingenier\u00eda de desarrollo software y hardware de los equipos de telecontrol.<\/p>\n<p>Estos son los equipos que hacen posible que una instalaci\u00f3n de una compa\u00f1\u00eda el\u00e9ctrica, desde una subestaci\u00f3n de 400 Kv hasta un centro de transformaci\u00f3n de distribuci\u00f3n, funcionen desatendidos de manera segura y telecontrolados desde un despacho de la compa\u00f1\u00eda correspondiente.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-jetpack-markdown\"><p>Adem\u00e1s, soy aficionado a esto. Me gusta que las cosas funcionen solas. As\u00ed que, en mi tiempo libre, en mi casa, sigo dedic\u00e1ndole tiempo a esto. A ver, esto no quiere decir que en mi casa vaya a hacerme el porting de una librer\u00eda 61850 a una Raspberry Pi, esto ya lo hago en la oficina con nuestros equipos. Lo que quiero decir es que en casa aprovecho estos conocimientos que he adquirido para desarrollar otras soluciones aplicables en el \u00e1mbito dom\u00e9stico o en alg\u00fan otro sector. Seguramente acabar\u00e9 escribiendo sobre alguno de estos ejemplos.<\/p>\n<p>En fin, que voy a tratar de darle un poco de visibilidad a mis aptitudes en este entorno por si a alg\u00fan lector le parecen interesantes y pudi\u00e9ramos llegar a colaborar de alguna manera\u2026<\/p>\n<p>Y como la mayor parte del contenido va a estar dedicado a la ingenier\u00eda software creo que lo mejor es dedicarle este primer post a las herramientas de desarrollo software que uso habitualmente.<\/p>\n<p>Con el tiempo he aprendido que el uso de estas herramientas es fundamental para limitar o reducir el riesgo del desarrollo software. Adem\u00e1s, en un segundo nivel, alrededor de estas herramientas deber\u00eda haber una colecci\u00f3n de procedimientos que nos aclaren como debemos usarlas. Y despu\u00e9s, deber\u00eda haber un compromiso de los integrantes del equipo de desarrollo para seguir estos procedimientos.<\/p>\n<p>Son las siguientes:<\/p>\n<ul>\n<li>GitLab<\/li>\n<li>Youtrack<\/li>\n<li>Artifactory<\/li>\n<li>MediaWiki<\/li>\n<\/ul>\n<h2>GitLab.<\/h2>\n<p>Plataforma web para la gesti\u00f3n de todo el ciclo de vida del desarrollo software de un equipo.<\/p>\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/www.rtbasics.com\/WP_2\/wp-content\/uploads\/2024\/09\/Imagen_gitlab.png\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"640\" height=\"360\" src=\"https:\/\/i0.wp.com\/www.rtbasics.com\/WP_2\/wp-content\/uploads\/2024\/09\/Imagen_gitlab.png?resize=640%2C360\" alt=\"\" class=\"wp-image-5519\" loading=\"lazy\" srcset=\"https:\/\/i0.wp.com\/www.rtbasics.com\/WP_2\/wp-content\/uploads\/2024\/09\/Imagen_gitlab.png?resize=1024%2C576&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.rtbasics.com\/WP_2\/wp-content\/uploads\/2024\/09\/Imagen_gitlab.png?resize=300%2C169&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.rtbasics.com\/WP_2\/wp-content\/uploads\/2024\/09\/Imagen_gitlab.png?resize=768%2C432&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.rtbasics.com\/WP_2\/wp-content\/uploads\/2024\/09\/Imagen_gitlab.png?resize=1536%2C864&amp;ssl=1 1536w, https:\/\/i0.wp.com\/www.rtbasics.com\/WP_2\/wp-content\/uploads\/2024\/09\/Imagen_gitlab.png?w=1920&amp;ssl=1 1920w, https:\/\/i0.wp.com\/www.rtbasics.com\/WP_2\/wp-content\/uploads\/2024\/09\/Imagen_gitlab.png?w=1280 1280w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-jetpack-markdown\"><p>Integra en una \u00fanica herramienta funciones que antes sol\u00edan hacerse con varias como Git (repositorio de c\u00f3digo fuente), Gerrit (revisi\u00f3n de c\u00f3digo), TeamCity o Jenkins (integraci\u00f3n continua).<\/p>\n<ul>\n<li><strong>Git:<\/strong> Integra un servidor git para el control de c\u00f3digo fuente: trazabilidad de cambios, ramas, tags\u2026<\/li>\n<li><strong>Revisi\u00f3n de c\u00f3digo:<\/strong> Permite la revisi\u00f3n de c\u00f3digo por otro programador, incluir comentarios, rechazar la subida al repositorio, revisi\u00f3n iterativa, etc.<\/li>\n<li><strong>Integraci\u00f3n continua<\/strong> Permite la configuraci\u00f3n de \u201crunners\u201d en los que se compila el commit subido a las ramas de git. Tambi\u00e9n se permite la ejecuci\u00f3n de tests unitarios y test de integraci\u00f3n, funcionales, etc. Se pueden configurar distintos runners en Linux y Windows.<\/li>\n<\/ul>\n<p>GitLab es muy flexible y no impone una manera de hacer las cosas. Para homogeneizar el desarrollo de distintos proyectos se deben elaborar distintos procedimientos comunes para hacer, al menos:<\/p>\n<ul>\n<li>Estructura de directorios del repositorio.<\/li>\n<li>Gesti\u00f3n de ramas del repositorio.<\/li>\n<li>Versionado de artefactos.<\/li>\n<li>Proceso de construcci\u00f3n de artefactos.<\/li>\n<li>Generaci\u00f3n de versiones liberadas. Repositorio de artefactos.<\/li>\n<\/ul>\n<p>Distintas opciones de uso, se puede instalar en una Raspberry Pi (mi opci\u00f3n domestica) o en un servidor \u201con premises\u201d o en la nube. Libre de gastos, si uno se mantiene su propia instalaci\u00f3n.<\/p>\n<h2>Youtrack<\/h2>\n<p>Es una herramienta de gesti\u00f3n de issues. Permite hacer la gesti\u00f3n de un proyecto de desarrollo software seg\u00fan distintas metodolog\u00edas. Una de ellas scrum.<\/p>\n<p>Entre otras cosas:<\/p>\n<ul>\n<li>Facilita el desarrollo colaborativo entre los distintos miembros del equipo.<\/li>\n<li>Gesti\u00f3n de issues (bugs, task, etc)<\/li>\n<li>Permite la gesti\u00f3n de un backlog, agile boards asociadas a sprints.<\/li>\n<li>Planificaci\u00f3n, gesti\u00f3n de tiempos \u2026<\/li>\n<li>Comentarios en md, con enlaces, documentos adjuntos, etc.<\/li>\n<li>M\u00e9tricas.<\/li>\n<\/ul>\n<p>Al igual que con GitLab es muy conveniente que en alg\u00fan sitio est\u00e9 descrito c\u00f3mo se va a usar.<\/p>\n<p>Tambi\u00e9n tiene distintas opciones de instalaci\u00f3n y es de libre distribuci\u00f3n hasta 10 usuarios.<\/p>\n<h2>Artifactory<\/h2>\n<p>B\u00e1sicamente, es un repositorio de artefactos. Es decir, el servidor donde se guardan, de manera ordenada, los paquetes de ficheros que constituyen una distribuci\u00f3n de la aplicaci\u00f3n.<\/p>\n<p>Esta herramienta, a poco que la aplicaci\u00f3n software tenga un m\u00ednimo de complejidad, cobra mucha importancia. Se trata de mantener las distintas versiones de los ejecutables bien gestionadas para garantizar la integridad y la trazabilidad del software.<\/p>\n<p>Artifactory, incluso en su versi\u00f3n gratuita, ofrece un api REST para bajar y subir ficheros. Este interface se puede usar desde los scripts de integraci\u00f3n continua de los distintos repositorios de GitLab.<\/p>\n<p>De esta manera, la compilaci\u00f3n de las versiones liberadas y su registro en el repositorio de artefactos se hace de manera autom\u00e1tica y libre de los errores de la intervenci\u00f3n humana\u2026<\/p>\n<p>Adem\u00e1s, si se desarrolla un herramienta de fabricaci\u00f3n de equipos, esta puede obtener los ejecutables de artifactory y desplegarlos en el equipo. De nuevo, sin intervenci\u00f3n humana\u2026<\/p>\n<h2>MediaWiki<\/h2>\n<p>Y esta ser\u00eda opcional, pero muy conveniente. Es la herramienta que soporta la Wikipedia.<\/p>\n<p>Se puede instalar en un servidor local sin coste.<\/p>\n<p>Sirve para compartir informaci\u00f3n de manera informal, de una manera m\u00e1s \u00e1gil que un sistema de gesti\u00f3n documental.<\/p>\n<p>Esto no sustituye a la gesti\u00f3n documental de la empresa, que debe soportar manuales de ingenier\u00eda, de instalaci\u00f3n, de configuraci\u00f3n, de uso, pero si sirve para compartir detalles de implementaci\u00f3n, notas de aplicaci\u00f3n o informaci\u00f3n informal que pueden intercambiar los distintos actores involucrados en el desarrollo de un producto.<\/p>\n<\/div>\n\n\n\n<p><\/p>\n<\/body>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-5516","post","type-post","status-publish","format-standard","hentry","category-broadcasting"],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4vaHY-1qY","_links":{"self":[{"href":"https:\/\/www.rtbasics.com\/WP_2\/wp-json\/wp\/v2\/posts\/5516","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rtbasics.com\/WP_2\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rtbasics.com\/WP_2\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rtbasics.com\/WP_2\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rtbasics.com\/WP_2\/wp-json\/wp\/v2\/comments?post=5516"}],"version-history":[{"count":5,"href":"https:\/\/www.rtbasics.com\/WP_2\/wp-json\/wp\/v2\/posts\/5516\/revisions"}],"predecessor-version":[{"id":5522,"href":"https:\/\/www.rtbasics.com\/WP_2\/wp-json\/wp\/v2\/posts\/5516\/revisions\/5522"}],"wp:attachment":[{"href":"https:\/\/www.rtbasics.com\/WP_2\/wp-json\/wp\/v2\/media?parent=5516"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rtbasics.com\/WP_2\/wp-json\/wp\/v2\/categories?post=5516"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rtbasics.com\/WP_2\/wp-json\/wp\/v2\/tags?post=5516"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}