<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog de Francisco Javier Ahijado</title><link>https://www.icesoft.blog/</link><description>Recent content on Blog de Francisco Javier Ahijado</description><generator>Hugo -- gohugo.io</generator><language>es-ES</language><copyright>Fco. Javier Ahijado</copyright><lastBuildDate>Wed, 10 Dec 2025 10:00:00 +0200</lastBuildDate><atom:link href="https://www.icesoft.blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Setup de un Mac para Desarrollo</title><link>https://www.icesoft.blog/2025/12/10/setup-mac/</link><pubDate>Wed, 10 Dec 2025 10:00:00 +0200</pubDate><guid>https://www.icesoft.blog/2025/12/10/setup-mac/</guid><description>
&lt;div class="sect1"&gt;
&lt;h2 id="_introducción"&gt;Introducción&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;En este post, exploraremos los pasos esenciales para configurar un Mac para el desarrollo de software. Cubriremos desde la instalación de herramientas básicas hasta la configuración de entornos específicos para distintos lenguajes de programación.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_herramientas_esenciales"&gt;Herramientas Esenciales&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_homebrew"&gt;Homebrew&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;&lt;a href="https://brew.sh"&gt;Homebrew&lt;/a&gt; es un gestor de paquetes para macOS que facilita la instalación de software. Para instalar Homebrew, abre la terminal y ejecuta el siguiente comando:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code class="language-bash" data-lang="bash"&gt;/bin/bash -c &amp;#34;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)&amp;#34;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect3"&gt;
&lt;h4 id="_aplicaciones_recomendadas"&gt;Aplicaciones recomendadas&lt;/h4&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;A continuación, se listan algunas aplicaciones recomendadas para instalar mediante Homebrew (para instalar, ejecutar &lt;code&gt;brew install &amp;lt;nombre_aplicación&amp;gt;&lt;/code&gt;).&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Arquitectura Hexagonal</title><link>https://www.icesoft.blog/2025/07/01/arquitectura-hexagonal/</link><pubDate>Tue, 01 Jul 2025 10:00:00 +0200</pubDate><guid>https://www.icesoft.blog/2025/07/01/arquitectura-hexagonal/</guid><description>
&lt;div class="sect1"&gt;
&lt;h2 id="_qué_es_la_arquitectura_hexagonal"&gt;¿Qué es la Arquitectura Hexagonal?&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;La arquitectura hexagonal, también conocida como “Puertos y Adaptadores”, es un patrón de diseño de software que busca aislar el núcleo de la aplicación de los detalles externos como bases de datos, interfaces de usuario, frameworks o servicios de infraestructura. Su objetivo es lograr una aplicación que sea fácil de probar, mantener, evolucionar y desplegar en distintos entornos.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_por_qué_hablamos_de_arquitectura"&gt;¿Por qué hablamos de arquitectura?&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Hablamos de arquitectura porque queremos establecer una organización estructural clara del sistema que permita:&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Completando enumerados</title><link>https://www.icesoft.blog/2024/03/31/completando-enumerados/</link><pubDate>Sun, 31 Mar 2024 19:00:00 +0200</pubDate><guid>https://www.icesoft.blog/2024/03/31/completando-enumerados/</guid><description>
&lt;div class="paragraph"&gt;
&lt;p&gt;En un &lt;a href="https://www.icesoft.blog/2016/10/25/jpa-enumerated-entity/"&gt;post anterior&lt;/a&gt;, recomendaba almacenar un &lt;code&gt;Integer&lt;/code&gt; en la base de datos y utilizar enumerados para gestionar los posibles valores a nivel programático.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;En esta entrada, propongo otra forma de definir el enumerado para obtener el valor de forma más eficiente:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code class="language-java" data-lang="java"&gt;public enum EnumeradoEjemplo {
VALOR1(1), VALOR2(2), VALOR3(3);
private static final Map&amp;lt;Integer, EnumeradoEjemplo&amp;gt; ENUM_MAP;
@Getter
private Integer id;
static {
ENUM_MAP = new HashMap&amp;lt;&amp;gt;();
for (EnumeradoEjemplo ejemplo : EnumeradoEjemplo.values()) {
ENUM_MAP.put(ejemplo.getId(), ejemplo);
}
}
EnumeradoEjemplo(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public static EnumeradoEjemplo valueOf(Integer id) {
EnumeradoEjemplo ejemplo = ENUM_MAP.get(id);
if (ejemplo == null)
throw new IllegalArgumentException(&amp;#34;No existe enumerado con valor: &amp;#34; + id);
return ejemplo;
}
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description></item><item><title>Blog Actualizado</title><link>https://www.icesoft.blog/2024/03/31/blog-actualizado/</link><pubDate>Sun, 31 Mar 2024 04:00:00 +0200</pubDate><guid>https://www.icesoft.blog/2024/03/31/blog-actualizado/</guid><description>
&lt;div class="paragraph"&gt;
&lt;p&gt;Me he propuesto crear un post en el blog más a menudo, así que aquí estoy.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Para ello, he realizado las siguientes tareas:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;He creado un &lt;a href="https://github.com/iCesofT/iCesofT.github.io"&gt;sitio en GitHub Pages&lt;/a&gt; para alojar el blog.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;He creado una &lt;a href="https://github.com/iCesofT/hugo-asciidoc"&gt;imagen Docker de Hugo con AsciiDoc&lt;/a&gt; para utilizarla desde GitHub Actions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;He creado un flujo de trabajo en GitHub Actions para publicar el blog automáticamente.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;De este modo, me sentiré más cómodo para escribir y publicar contenido en el blog: simplemente tengo que escribir en AsciiDoc y hacer un &lt;code&gt;git push&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Choose Right Technology</title><link>https://www.icesoft.blog/2020/08/25/choose-right-technology/</link><pubDate>Tue, 25 Aug 2020 00:23:37 +0200</pubDate><guid>https://www.icesoft.blog/2020/08/25/choose-right-technology/</guid><description>
&lt;div class="paragraph"&gt;
&lt;p&gt;En la versión anterior del blog hacía mención a un post en &lt;a href="https://dzone.com/articles/how-to-choose-the-right-technology-for-your-projec"&gt;DZone&lt;/a&gt; (&lt;a href="https://blog.sebastian-daschner.com/entries/how_to_choose_technology"&gt;éste&lt;/a&gt; es el enlace del post original) donde se aconsejan algunos puntos de cara a seleccionar la mejor tecnología para los nuevos proyectos.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Las conclusiones son éstas:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Elige la tecnología con la que el equipo esté familiarizado.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No seas &amp;#34;&lt;em&gt;cool&lt;/em&gt;&amp;#34; - juega en tu tiempo libre.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Elige la herramienta adecuada para el trabajo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Es preferible los principios un buen diseño de software frente a la última moda.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No sobrecargue el número de lenguajes de programación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edúcate y educa al equipo sobre los fundamentos de la informática.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description></item><item><title>Documentación como Código</title><link>https://www.icesoft.blog/2020/08/23/doc-as-code/</link><pubDate>Sun, 23 Aug 2020 23:00:00 +0200</pubDate><guid>https://www.icesoft.blog/2020/08/23/doc-as-code/</guid><description>
&lt;div class="paragraph"&gt;
&lt;p&gt;Llevo tiempo promoviendo en los proyectos la utilización de &lt;a href="https://docs-as-co.de/"&gt;Documentación como Código&lt;/a&gt;, por diversos motivos:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Es más cómodo para el equipo de desarrollo a la hora de realizar documentación técnica, dado que se puede utilizar el mismo entorno de desarrollo (IDE).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;La documentación está almacenada en el mismo repositorio de código fuente, en modo texto, y por lo tanto es más sencillo gestionar los cambios / merge, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Para ello, el lenguaje que recomiendo es &lt;a href="https://asciidoc.org/"&gt;AsciiDoc&lt;/a&gt;, que junto a
&lt;a href="https://plantuml.com/"&gt;PlantUML&lt;/a&gt; y &lt;a href="http://ditaa.sourceforge.net/"&gt;ditaa&lt;/a&gt;, podemos generar la documentación incluyendo gráficos, UML,…​ como:&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Blog Reloaded</title><link>https://www.icesoft.blog/2020/08/23/blog-reloaded/</link><pubDate>Sun, 23 Aug 2020 18:10:19 +0200</pubDate><guid>https://www.icesoft.blog/2020/08/23/blog-reloaded/</guid><description>
&lt;div class="paragraph"&gt;
&lt;p&gt;Después de un tiempo sin actualizar el blog (&lt;em&gt;más de 2 años!!&lt;/em&gt;) y queriendo utilizar otro tipo de herramienta que no fuera &lt;a href="https://wordpress.com/"&gt;WordPress&lt;/a&gt;, estuve buscando una solución que generase páginas estáticas que pudiera alojar en cualquier sitio sin necesidad de disponer de ningún tipo de lenguaje instalado (ej, PHP) o base de datos. También quería, si era posible y dado que seguramente mis posts sean más técnicos que otra cosa, que pudiera utilizar el lenguaje &lt;a href="https://asciidoc.org/"&gt;AsciiDoc&lt;/a&gt;, que tanto me gusta promover cuando hablo de &lt;a href="https://www.icesoft.blog/2020/08/23/doc-as-code/"&gt;Documentación como Código&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Imagen Docker optimizada para Java 8</title><link>https://www.icesoft.blog/2018/05/25/docker-image-java-8/</link><pubDate>Fri, 25 May 2018 00:00:00 +0000</pubDate><guid>https://www.icesoft.blog/2018/05/25/docker-image-java-8/</guid><description>
&lt;div class="paragraph"&gt;
&lt;p&gt;Habiendo leído estos artículos sobre la problemática de Java 8 en entornos dockerizados:&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>JPA @Enumerated vs. @Entity</title><link>https://www.icesoft.blog/2016/10/25/jpa-enumerated-entity/</link><pubDate>Tue, 25 Oct 2016 00:00:00 +0000</pubDate><guid>https://www.icesoft.blog/2016/10/25/jpa-enumerated-entity/</guid><description>
&lt;div class="paragraph"&gt;
&lt;p&gt;En muchas ocasiones nos hemos visto en la necesidad de incorporar valores que se corresponden con un enumerado, como por ejemplo, diferenciación de tipos, estados,…​ Lo que se suele hacer es crear un enumerado en Java y posteriormente referenciarlo en la clase que lo necesite incorporando la anotación &lt;code&gt;@Enumerated&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Esta anotación permite que se almacene como valor en la base de datos bien el orden (&lt;code&gt;EnumType.ORDINAL&lt;/code&gt;) o bien el nombre (&lt;code&gt;EnumType.String&lt;/code&gt;) del elemento dentro del enumerado. Ejemplo:&lt;/p&gt;
&lt;/div&gt;</description></item></channel></rss>