Entradas

Cuando los jóvenes contratan programadores extranjeros

 No entiendo por qué muchas empresas fundadas por profesionales más jóvenes que yo —tengo 45 años— tienen la costumbre de contratar programadores extranjeros. Ya me ha pasado un par de veces: me llaman cuando el proyecto está en problemas, cuando hay que apagar incendios. No tengo nada en contra del talento extranjero; de hecho, puede funcionar muy bien en el frontend, donde el contexto local importa menos. Pero en el backend, la historia suele ser distinta. En uno de los casos, el desarrollador colombiano con el que hablé —supuestamente encargado del backend— me dijo: “Yo solo sé lo de la base de datos… ¿tú sabes leerla?” Esa fue toda la conversación. Nunca llegué a ver el código ni la estructura. En teoría, él solo debía enviarme un JSON para que mi API emitiera el documento electrónico, pero ni siquiera se llegó a ese punto. En otro proyecto, el programador —mexicano en este caso— insistía en que mi lógica era incorrecta, sin conocer cómo funciona la facturación electrónica en...

Cuando el "vibe coding" se convierte en desgaste

 Hace unas semanas me contactó un informático que trabajaba en la farmacia de su señora. Era de la misma carrera de Informática de mi casa de estudios, aunque él se dedicaba a soporte técnico . Me comentó: “Estoy haciendo un programa en Python para administrar la farmacia de mi señora y quiero añadirle boleta electrónica. Ojo, no soy programador, lo hice con ChatGPT.” En ese momento no entendí bien, pero luego comprendí que se trataba del famoso vibe coding : dejar que la IA escriba la mayor parte del código, sin planificación, estructura ni comprensión de fondo. El cliente me pagó las horas trabajadas, pero sinceramente, no fue un desafío técnico… fue un desgaste . No sabía qué herramientas o librerías estaba utilizando, y adaptar un script sencillo a ese entorno fue realmente complejo. Cada intento generaba nuevos prompts y versiones de código completamente distintas. Esa experiencia me dejó una conclusión muy clara: La IA puede ser una gran ayuda, pero cuando se us...

🚀 Integrando Thymeleaf en un Servlet Java

Hoy estuve trabajando en un servlet que utiliza Thymeleaf como motor de plantillas para manejar vistas dinámicas dentro de una aplicación Java tradicional (sin Spring Boot). Thymeleaf puede integrarse perfectamente en un proyecto basado en Servlets si se inicializa adecuadamente el TemplateEngine . Esto permite mantener una separación clara entre lógica y presentación, con vistas HTML procesadas dinámicamente desde el servidor. package com.egga.appventas.caja; import com.egga.appventas.include.ThymeleafConfig; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; public class AdminCaja extends HttpServlet{ private TemplateEngine templateEngine; @Override public void init() { // Inicializaci...

Instalando Jetty fuera del IDE: una guía desde la documentación oficial

Mirando la documentación del sitio oficial de Jetty me encontré con esto: Jetty no está pensado para trabajar directamente con JSPs dentro de un IDE como NetBeans. Eso me obligó a salir de la comodidad del entorno y aprender a configurarlo desde cero, como un contenedor web independiente. En esta entrada compartiré los pasos que seguí para instalar Jetty de forma manual, fuera del IDE. Si estás buscando una alternativa liviana a Tomcat, esta guía puede ayudarte a comenzar. Paso 1: Descarga Jetty desde la página oficial Ve a https://eclipse.dev/jetty/download y descarga la versión estable más reciente. En mi caso, bajé el archivo ZIP correspondiente a Jetty 12. Paso 2: Descomprime y estructura Una vez descomprimido, verás una estructura como esta: jetty-home/ ├── bin/ ├── etc/ ├── lib/ ├── modules/ └── start.jar Paso 3: Crea el directorio de la aplicación (jetty-base) Jetty utiliza una estructura llamada jetty-base para alojar tu aplicación. Puedes crearla así: ...

❌ La debilidad de Jetty en entornos de desarrollo con JSP y NetBeans

Publicado por Esteban Guenul – julio 2025 Nota del autor: esta entrada está basada en una experiencia real mientras desarrollaba con JSPs en Jetty y NetBeans. El problema me obligó a reconsiderar mi flujo de trabajo. En el desarrollo web con Java, muchas veces se prefiere Jetty por su ligereza, velocidad de arranque y flexibilidad modular. Sin embargo, cuando se trabaja con JSPs y un IDE como NetBeans , es importante conocer una de sus principales debilidades: Jetty no ofrece un soporte directo y fluido para JSP en entornos de desarrollo integrados como sí lo hace Tomcat . 🔍 ¿Qué problema presenta Jetty con JSP? Cuando intentamos trabajar con páginas JSP directamente desde NetBeans usando Jetty como contenedor embebido o como servidor de ejecución, nos encontramos con: ❌ Falta de compilación automática de JSPs ❌ Sin integración IDE para visualizar cambios en tiempo real ❌ Errores de clase faltante o ClassNotFoundException al renderizar JSP ❌ Necesidad de configura...

🔧 La clase principal de un proyecto web Java con Jetty embebido

En esta entrada vamos a revisar una clase clave en el desarrollo de aplicaciones web modernas en Java: la clase principal que arranca un servidor Jetty embebido . En lugar de desplegar un .war en un servidor externo, esta estrategia permite ejecutar toda la aplicación desde un único main() en un jar , ideal para microservicios, sistemas de ventas ligeros o herramientas internas. Vamos a ver cómo está construida la clase Appventas , que forma el núcleo de un proyecto web embebido con servlets, filtros y recursos estáticos. 🚀 ¿Qué hace esta clase? La clase Appventas cumple una función central: Levanta un servidor Jetty en el puerto 8080. Configura el contexto web /AppVentas . Sirve recursos estáticos (CSS, JS). Aplica un filtro de autenticación en rutas protegidas. Declara y registra todos los servlets del sistema manualmente. 🧱 Estructura general public class Appventas { public static void main(String[] args) throws Exception { Server se...

🛡️ Implementando un Filtro de Autenticación en una Aplicación Web Java

En el desarrollo de aplicaciones web seguras, es esencial contar con mecanismos que restrinjan el acceso a ciertas rutas si el usuario no está autenticado. Una forma eficaz de lograrlo es mediante filtros ( Filter ) en Java EE o Jakarta EE. En este artículo veremos cómo implementar un filtro de autenticación sencillo y cómo integrarlo tanto en un despliegue tradicional como en un entorno embebido con Jetty. 💡 Ejemplo práctico: AuthFilter.java package com.egga.appventas.filters; import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.FilterConfig; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class AuthFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // Inicializació...