domingo, 1 de marzo de 2026

jQuery vs ReactJs - cuando la industria confundió complejidad con progreso

Durante años, jQuery fue sinónimo de desarrollo web práctico, directo y eficiente. Permitía resolver el 80% de las necesidades reales de una interfaz con una curva de aprendizaje mínima y sin infraestructura adicional.

Hoy, sin embargo, el estándar dominante es ReactJS (y otros frameworks similares), incluso para proyectos donde su uso resulta claramente excesivo.

La pregunta es inevitable: ¿realmente necesitábamos este cambio?

Este artículo no es una crítica al progreso ni una defensa nostálgica del pasado. Es una reflexión técnica, desde la experiencia, sobre cuándo jQuery sigue siendo una mejor solución que React, y por qué la industria tomó el camino que tomó.


1. Lo que jQuery hacía bien (y sigue haciendo)

jQuery resolvía problemas reales del desarrollo web clásico:

  • Manipulación del DOM simple y explícita
  • Manejo de eventos claro
  • AJAX sencillo
  • Plugins reutilizables
  • Cero build steps
  • Cero tooling obligatorio
  • Debugging directo y transparente

Ejemplo típico:


$('#btnGuardar').on('click', function () {
  $('#mensaje').hide();
});

Sin abstracciones.
Sin magia.
Sin compiladores.
Sin pipelines.

Para aplicaciones renderizadas en servidor, con UI moderada y equipos pequeños, jQuery era (y sigue siendo) excelente.


2. Entonces… ¿por qué jQuery dejó de ser “el estándar”?

La respuesta no es que jQuery fuera malo. La respuesta es que el tipo de problemas cambió.

A medida que las aplicaciones web crecieron, aparecieron nuevos desafíos:

  • Estado compartido entre múltiples vistas
  • UI altamente interactiva
  • Sincronización constante con el backend
  • Equipos grandes trabajando en paralelo
  • Interfaces que son el producto, no solo un complemento

En ese contexto, jQuery empieza a mostrar sus límites. El principal problema no era el código, sino el DOM como estado implícito.


$('#total').text(calcularTotal());

En aplicaciones grandes:

  • nadie sabe quién actualiza el DOM
  • ni cuándo
  • ni desde dónde

Eso se vuelve inmantenible a escala.


3. Lo que React realmente vino a resolver

Aquí hay que ser justos.

React no nació para simplificar el desarrollo, sino para controlar la complejidad.

Sus objetivos reales fueron:

  • UI como función pura del estado
  • Flujo de datos predecible
  • Separación clara entre estado y representación
  • Escalabilidad en equipos grandes

El costo de eso fue claro:

  • Más código
  • Más dependencias
  • Más tooling
  • Más conceptos
  • Más peso inicial

React no es liviano, no es simple y no pretende serlo.


4. El error de la industria: soluciones grandes para problemas pequeños

Aquí aparece el punto crítico.

Frameworks como React fueron creados para aplicaciones masivas, pero el mercado los adoptó para:

  • CRUDs
  • formularios
  • dashboards simples
  • paneles administrativos
  • sitios corporativos

Resultado: overengineering generalizado.

Hoy vemos stacks enormes para resolver problemas triviales, y eso no siempre es progreso: muchas veces es complejidad innecesaria.


5. Comparación honesta: jQuery vs React

Aspecto jQuery React
Peso inicial Muy bajo Alto
Setup Nulo Complejo
Curva de aprendizaje Baja Alta
Debugging Directo Indirecto
Escalabilidad Limitada Excelente
Proyectos simples Ideal Excesivo

6. ¿Por qué React se volvió el estándar?

La respuesta no es solo técnica.

  • Estandarización del mercado laboral
  • Facilidad para contratar perfiles genéricos
  • Menor dependencia del criterio individual
  • Arquitecturas más predecibles para empresas

React reduce el riesgo empresarial, aunque muchas veces aumente la complejidad técnica.


7. Conclusión

El problema no es React.
El problema no fue jQuery.

El problema fue confundir complejidad con modernidad.

A veces, la solución más simple no solo funciona mejor: es la más profesional.

Y entender eso no te hace anticuado. Te hace ingeniero.

viernes, 25 de agosto de 2023

SOLID

 El termino SOLID es un acronimo acuñado por el gran Robert C. Martin a comienzos del 2000, este acronimo define segun Robert C. Martin cinco principios fundamentales a seguir para que un software diseñado con el paradigma orientado a objetos sea facil de mantener y pueda soportar cambios en el tiempo.

El acronimo SOLID resume lo siguiente:

  • S - Single Responsability Principle - Principio de responsabilidad única, esto quiere decir que al diseñar una clase la misma solo debe tener una responsabilidad, si la responsabilidad que se le quiere asignar no va con el diseño original esto nos quiere decir indirectamente que estamos por cometer un error al asignar otra responsabilidad a nuestra clase original.
  • O - Open Closed Principle - Las clases tienen que diseñarse de forma abierta para ser extendida pero cerrada para las modificaciones.
  • L - Liskov substitution Principle - Funciones que usan punteros o referencias a clases padres deben ser capaces de usar objetos de clases derivadas sin conocerlas.
  • I - Interface segregation principle - Los clientes no deben ser forzados a depender de interfaces que no utilizan.
  • D - Dependency inversion principle - Los sistemas deberian depender de abstracciones, no de implementaciones especificas.
Mis comentarios, la verdad el aporte de Robert C. Martin en la sintesis de estos principios orientan bastante a los desarrolladores a seguir buenas practicas de diseño. Muchas veces en algunos proyectos que me toco ayudar me encuentro con clases que son pequeños pulpos que hacen muchas cosas y al final el nombre no va para nada con el objetivo de la clase.

Creo que el segundo principio O (open/closed) cae bien sobretodo cuando hablamos de usar librerias y poder extenderlas. Tambien para clases que son claves en tus sistema.

El tercer principio del acronimo "L", me hace mas recordar el uso del diseño con polimorfismo.

El cuarto principio que hace referencia a la letra "I" (interface segregation principle) pues creeria que es aveces dificil de seguir, muchas veces me tope con clases que necesitan implementar interfaces aveces innecesarias, para gozar en parte de alguna funcionalidad y/o por encajar durante algun proceso que involucra el manejo de objetos de un mismo padre y/o que implementan X o Y interfaz (como el polimorfismo). Se ve dificil, pero no imposible de seguir.

La ultima letra del acronimo, la "D" es ya en nuestros días (sobre todo para los Ingenieros que trabajan con frameworks JAVA orientados a la WEB) creo yo de los mas importante y revolucionarios principios de la ingenieria, a permitido que realmente las aplicaciones empresariales sean robustas, simplemente por basar sus dependencias en Interfaces y no en implementaciones concretas.

Referencias: https://en.wikipedia.org/wiki/SOLID

domingo, 12 de marzo de 2023

¿Como realizar tuneo de un servidor postgresql?

 Para realizar el tuning de un servidor PostgreSQL, se pueden seguir los siguientes pasos:

  1. Identificar el hardware y el sistema operativo: Es importante conocer las características del hardware y el sistema operativo en el que se encuentra el servidor PostgreSQL, ya que esto influirá en la configuración del servidor.
  2. Analizar el uso de recursos: Es importante conocer cuántos recursos utiliza PostgreSQL en el servidor, tales como CPU, memoria y disco. Se pueden utilizar herramientas como el comando top en Linux o el Administrador de tareas en Windows para obtener esta información.
  3. Configurar los parámetros de PostgreSQL: Los parámetros de configuración de PostgreSQL pueden ser modificados en el archivo postgresql.conf. Es importante tener en cuenta que los cambios realizados en este archivo sólo tendrán efecto después de reiniciar el servidor.

Algunos parámetros que se pueden modificar para mejorar el rendimiento del servidor son:

  • shared_buffers: Este parámetro indica la cantidad de memoria que PostgreSQL utilizará para almacenar los datos en caché. Se recomienda que este valor sea de al menos el 25% de la memoria RAM del servidor.
  • work_mem: Este parámetro indica la cantidad de memoria que PostgreSQL utilizará para ordenar y realizar operaciones de hash. Se recomienda que este valor sea de al menos el 1% de la memoria RAM del servidor.
  • effective_cache_size: Este parámetro indica la cantidad de memoria que PostgreSQL utilizará para almacenar en caché el resultado de las consultas. Se recomienda que este valor sea de al menos el 50% de la memoria RAM del servidor.
  • max_connections: Este parámetro indica el número máximo de conexiones que PostgreSQL permitirá al mismo tiempo. Se recomienda que este valor sea ajustado en función de la cantidad de usuarios que utilizarán el servidor.

Monitorizar el rendimiento: Una vez realizados los cambios de configuración, es importante monitorizar el rendimiento del servidor para comprobar si se han obtenido mejoras en el rendimiento. Se pueden utilizar herramientas como pg_top o pg_stat_activity para obtener información sobre el rendimiento de PostgreSQL.

Es importante recordar que el tuning de un servidor PostgreSQL es un proceso iterativo y que los cambios realizados pueden tener un impacto diferente en función de la carga de trabajo del servidor. Por lo tanto, es recomendable monitorizar regularmente el rendimiento del servidor y ajustar la configuración en consecuencia.

viernes, 22 de octubre de 2021

Ejecutando Postgres desde Docker

 Todos a estas alturas ya sabemos que docker es una tecnologia que nos permite crear ambientes de trabajo, que no son exactamente una maquina virtual pero son "algo parecido". En fin, es la evolucion natural... Y el punto es que tu quieres usarlo para desarrollar y trabajar rapidamente, pues si ! Te va a ahorrar mucho tiempo.

Hace unos años prepare un documento explicando como realizar el setup funcional para trabajar con postgres, te comparto el enlace y miralo ahi directamente.

Enlace - Como usar postgres y docker

Para cualquier duda y/o consulto te recomiendo que comentes en este post y/o en mi twitter.com/efsandino

domingo, 30 de octubre de 2016

Despliegue Automatico desde Maven a WildFly

El primer día que conoci "la luz" fue hace mucho tiempo, cuando use ANT y me encanto poder construir mis proyectos y tener empaquetados JAR, WAR, EAR funcionando con unos cuantos comandos, luego apareció MAVEN y me hizo notar que hacia demasiado esfuerzo con ANT, finalmente me sedujo y me convenció, con la única diferencia que MAVEN es altamente dependiente de Internet y bueno... es el precio a seguir por la facilidad en construcciones... Los que no conocen MAVEN, o ANT realmente están algo rezagados y tendrían que empezar a leer rápidamente que hacen estas maravillosas herramientas de construcción...

Al punto...

Para deployar tu proyecto MAVEN EAR/WAR o WhatEver en un sevidor WildFly sin mucho esfuerzo te paso los siguientes consejos:
  1. Utiliza el plugin wildfly en tu POM por ejemplo sigue la guiá oficial
    https://docs.jboss.org/wildfly/plugins/maven/latest/examples/deployment-example.html
  2. Si quieres tener algo Out of The Box, otro consejo es crearte un proyecto MAVEN que ya sea compatible con WildFly, existe un EAR para EE 7 que es muy bueno y lo he estado usando seguido... 
  3. Una vez que tengas levantado Wildfly, todo se reduce a ejecutar los siguientes comandos:
    1. mvn install (solo la primera vez que vas a realizar el deployment)
    2. mvn wildfly:deploy (el primer deploy)
    3. mvn widlfly:redeploy (segundo deployment y posteriores)

Preguntas y/o dudas estoy dejan sus comentarios y/o me encuentran en twitter @efsandino

lunes, 25 de abril de 2016

AES Encription

In order to promote knowledge, we share the following links:

  • http://aesencryption.net/
  • EL/8fx9lYtvLchPvxiR4pje4JdLabhrj/uTgDUgBbPF2w9P4y9J2eq/DACEnYndcRay/O/Iylv5xtCpT892cE0/pEYHFyl9/7pY5lUOPysiFoCOyop0B4apwgJX4Y2GlY9Y4AFFuYhBvQBYrFDKV1xWpcey2UymP1dYfKlQC2sw=

¿ Como recuperar una clave almacenada en un navegador ?

Aqui, les dejo este pequeño truco:
http://eduardosandino.blogspot.com/2016/04/como-recuperar-una-clave-almacenada-en.html