Salvatore Maranzano (31 de julio de 1886 - 10 de septiembre de 1931) fue un personaje del crimen organizado, originario de la ciudad Castellammare del Golfo, en Sicilia, Italia. También fue uno de los primeros jefes de la Cosa Nostra en los Estados Unidos. Fue el último en ostentar el título oficial de Jefe de todos los jefes o "Capo di tutti i capi" (En inglés, Boss of all Bosses) de la mafia norteamericana.


Inicios

Cuando era joven, Maranzano deseaba convertirse en sacerdote de la religión católica, incluso llegó a pensar en estudiar y prepararse para el sacerdocio; sin embargo, con el tiempo se asoció a la mafia de su tierra natal. Tenía una presencia dominante, y era ampliamente respetado por sus colegas del hampa. Asimismo, poseía una fascinación por Julio César y el Imperio romano y disfrutaba dialogar con sus homólogos de la mafia estadounidense sobre estos temas, por lo que fue apodado Little Caesar (Pequeño César).

Carrera

Maranzano llegó a los Estados Unidos en 1925 estableciéndose en Brooklyn, tras tener que abandonar su Sicilia natal debido a las persecuciones al crimen organizado en la isla llevadas a cabo por el prefecto Cesare Mori, nombrado por Mussolini para erradicar a la mafia de Sicilia. Mientras construía un negocio legítimo como agente de bienes raíces, también mantenía un creciente negocio de contrabando de licor. Pronto, se convirtió en el líder de un grupo grande de mafiosos procedentes de Castellammare del Golfo, incluyendo a Joseph Bonanno, Joseph Profaci, y Stefano Magaddino. Todos estos miembros del hampa habían sido enviados a los Estados Unidos por Vito Cascio ferro, el principal capo de la mafia en Sicilia, con las órdenes de organizar la mafia en ese país y ponerla bajo su control. No obstante, Don Vito fue arrestado y murió en una prisión fascista. Esto provocó que Maranzano decidiese organizar la mafia en los Estados Unidos bajo su propia supervisión.


Guerra de los Castellammarenses

Maranzano comenzó a invadir el territorio del capo de la mafia Joe Masseria, logrando posesionarse de las cantinas de su enemigo, y a su vez secuestrando algunos de los camiones de licor. Esto causó una batalla en los bajos fondos de la mafia, conocida como la Guerra de los Castellammarenses. Al inicio de la guerra sus enemigos le superaban en número, pero se fueron fortaleciendo con el progreso del conflicto. El enfrentamiento terminó después de que uno de los tenientes de Masseria conocido como Lucky Luciano, ayudase a orquestar el asesinato de su jefe en abril de 1931, con la condición de que fuese considerado igual a Maranzano.

Jefe de jefes

Maranzano se convirtió en uno de los más poderosos gánsteres de Nueva York, y dos semanas después del asesinato de Masseria, citó a varios mafiosos a encontrarse en una sala de banquetes en una ubicación secreta en el norte del estado de Nueva York. En esta reunión presentó su visión de un nuevo crimen organizado, estructurado bajo líneas jerárquicas. De esta manera, la mafia neoyorkina sería organizada en Cinco familias, encabezadas por él mismo, por Luciano, Profaci, Vincent Mangano y Thomas Gagliano. Además, se creó un cargo especial para sí mismo, denominado: Jefe de todos los jefes.

También, estableció las reglas para una Comisión de mafia, donde prohibió que se cometiesen asesinatos al azar o que los miembros de la comisión hablaran sobre la mafia y sus actividades con cualquier persona fuera del grupo, incluso si la persona era familiar. Cualquiera que no cumpliese con las reglas sería castigado con la muerte. Para demostrar su dominio a los otros jefes influyentes como Al Capone, los convocó a una reunión en Wappingers Falls para manifestarles que ahora él era el líder de las operaciones de la mafia en Nueva York.

No obstante sus maquinaciones, en especial su tratamiento arrogante hacia sus subordinados, su afición por comparar su organización con el imperio romano, su intento por establecer un modelo siguiendo la línea de mando militar de Julio César, fueron mal vistas por Luciano y sus ambiciosos colaboradores como Vito Genovese, Frank Costello, entre otros. Luciano llegó a creer que Maranzano tenía más hambre de poder que el mismísimo Masseria cuando vivía.

A pesar de su apoyo hacia métodos modernos de organización, incluyendo el principio de que los capos supervisasen a los trabajadores que realizaban la mayor parte del trabajo de la familia, enfrentó el resentimiento entre los más jóvenes mafiosos y lo denominaron Mustache Pete, que significaba un mafioso tradicionalista y seguidor de las antiguas costumbres. Su alejamiento a las nuevas tendencias ideológicas fue visible debido a que se opuso a la asociación de Luciano con gánsteres no italianos como Meyer Lansky y Bugsy Siegel. De hecho, Luciano y sus colegas estaban esperando el momento oportuno para deshacerse de Maranzano.

Asesinato

Maranzano se dio cuenta de los planes de sus enemigos, y comenzó a planificar el asesinato de Luciano, Genovese, Costello, y otros. Sin embargo, no actuó rápidamente, ya que en el momento en que contrató a Mad Dog Coll para que realizase los crímenes, Luciano ya se había enterado de sus planes con la ayuda de Meyer Lansky. Seguidamente, Luciano acordó con Samuel Levine y otros tres gánsteres recomendados por Lansky para que se dirigiesen a las oficinas de Maranzano el 10 de septiembre de 1931, disfrazados de policías. Una vez que los matones estuvieron en las oficinas, en el noveno piso del edificio Helmsley, desarmaron a los guardias de Maranzano. Luego, dispararon y acuchillaron a Maranzano hasta matarlo, y cuando huyeron del edificio se encontraron con Coll, y le advirtieron que había ocurrido un allanamiento policial, razón por la cual también se alejó.

Después de la muerte de Maranzano, Luciano y sus colegas reorganizaron las cinco familias y abolieron el cargo de: Jefe de todos los jefes. La mayoría de la familia de Maranzano fue heredada por Joseph Bonanno, y se la nombró como la Familia Bonanno.

Fotografías

Las únicas fotografías conocidas de Maranzano son las de la escena de su muerte. En el 2009, el autor David Critchley había identificado la foto que alguna vez se señaló como una foto policial de Maranzano como perteneciente al gánster londinense Salvatore Messina. En agosto del 2019, el Informer publicó otra foto que se creía que era de Maranzano, pero luego se retractó en septiembre debido a que historiadores europeos identificaron la imagen como perteneciente al criminal alemán Peter Kürten.


En la cultura popular
  • Maranzano juega un pequeño rol ficticio en la novela de Mario Puzo El padrino. Maranzano rechaza la propuesta de Don Vito Corleone de compartir su monopolio sobre las apuestas ilegales en Nueva York a cambio de contactos policiales y políticos y la expansión en Brooklyn y El Bronx. Maranzano arregla que dos hombres de Al Capone vinieran a Nueva York y mataran a Corleone. A través de sus contactos en Chicago, Corleone se enteró y envió a Luca Brasi a asesinar a los pistoleros. Con Capone fuera de la escena, se inició la gran guerra de bandas de 1933. Desesperado por la paz, Maranzano aceptó sentarse en un restaurante en Brooklyn, donde fue asesinado por Salvatore Tessio, un capo de la familia Corleone. Posteriormente, Corleone tomó control de la organización de Maranzano y llevó a cabo una reunión para reorganizar la Mafia estadounidense, algo que el Maranzano de la vida real sí hizo.
  • En la película de 1972 The Valachi Papers, Maranzano es interpretado por Joseph Wiseman.
  • En la miniserie de 1981 de NBC The Gangster Chronicles, Maranzano es interpretado por Joseph Mascolo.
  • En la película de 1990 Mobsters, Maranzano es interpretado por Michael Gambon, que es llamado "Faranzano". Su muerte también es diferente en la película dado que "Faranzano" fue lanzado de la ventana de un edificio.
  • En la película de 1999 Lansky, Maranzano es interpretado por Ron Gilbert.
  • En la película de 1999 de Lifetime Bonanno: A Godfather's Story, Maranzano es interpretado por Edward James Olmos.
  • Es mencionado en la serie: Los Soprano de 1999.
  • En el episodio de la serie Torchwood llamado "Immortal Sins", Maranzano es interpretado por Cris D'Annunzio.
  • En la quinta temporada de Boardwalk Empire, Maranzano es interpretado por Giampiero Judica. En el show, su muerte es mostrada como ordenada por Nucky Thompson, y el hermano de Nucky, Eli es uno de los pistoleros que participa en él, liquidando a Maranzano de un disparo en la cabeza.
  • En la película de 2021 Lansky, Maranzano es interpretado por Jay Giannone. En la película, Meyer Lansky está presente en la habitación antes de que Bugsy Siegel lo apuñala hasta matarlo.

Fuente:
Hola,
Sabían que Colombia fue la designada por la FIFA para organizar la Copa Mundial de Fútbol de 1986, pero que faltando menos de 4 años renunció a organizarla debido a tres factores fundamentales:
  1. El rechazo a las excesivas exigencias de la FIFA, las cuales fueron impulsadas por Alemania.
  2. La profunda crisis económica,
  3. La violencia sociopolítica,


Así como leen, la XIII Copa Mundial de Fútbol estaba prevista a desarrollarse en Colombia, entre el 31 de mayo y el 29 de junio de 1986. Sin embargo, Colombia declinó luego de ser escogida como sede, marcando un hecho inédito y no repetido en la historia de los Mundiales.

Antecedentes
En 1970 durante los Juegos Nacionales de Ibagué, Alfonso Senior consiguió el apoyo del gobierno de Carlos Lleras Restrepo (1966-1970), para lanzar la candidatura al Mundial.

En 1973 la Federación Colombiana de Fútbol había presentado a la FIFA su candidatura para organizar la Copa Mundial de Fútbol de 1986. El país recibió a la comisión del ente rector del fútbol mundial ese año, y la amistad entre Alfonso Senior Quevedo y sir Stanley Rous (presidente de la FIFA) ayudó a la obtención de la sede.

Finalmente el 9 de junio de 1974, la FIFA designó a Colombia como sede de la Copa Mundial de Fútbol de 1986.

Factores:
Los factores clave que impidieron la realización del mundial fueron:
  • Las exigencias de la FIFA: 
La entidad rectora del fútbol demandó una amplia lista de costosas obras, impulsadas por Hermann Neuberger, vicepresidente de la FIFA y directivo de Adidas, quién mostró su abierta oposición a que el mundial se organizara en un país "donde la mayoría de gente anda descalza" e impuso un listado de requisitos para que Colombia fuese ratificada como sede del Mundial, con fecha de caducidad del 10 de noviembre de 1982.
  1. 12 estadios con capacidad mínima de 40.000 personas para la primera fase.
  2. 4 estadios con capacidad mínima de 60.000 personas para la segunda fase.
  3. 2 estadios con capacidad mínima de 80.000 personas para el partido inaugural y la final.
  4. La instalación de una torre de comunicación en Bogotá.
  5. Congelamiento de las tarifas hoteleras en moneda nacional para los miembros de la FIFA a partir del 1 de enero de 1986.
  6. La emisión de un decreto que legalizara la libre circulación de divisas internacionales en el país.
  7. Una robusta flota de limusinas a disposición de los directivos de la entidad.
  8. Una red ferroviaria que permitiera comunicar a todas las sedes.
  9. Aeropuertos con capacidad para el aterrizaje de aviones de reacción en todas las sedes.
  10. Una red de carreteras que permitiera el fácil desplazamiento de la afición.
  • Prioridades económicas del Gobierno: 
El entonces presidente Belisario Betancur concluyó que el evento representaba un gasto público inmanejable y declaró: "El Mundial debía servir a Colombia y no Colombia a la multinacional del Mundial", dando prioridad a la inversión social y nacional.
  • Crisis y recesión: 
A principios de los años 80, la economía nacional enfrentaba fuertes presiones, una alta inflación y los efectos de una recesión internacional que afectó los precios de sus exportaciones.
  • Conflicto y orden público: 
El país atravesaba una etapa crítica por el fortalecimiento de guerrillas, el auge del narcotráfico y el surgimiento del paramilitarismo, lo que generaba un clima de inseguridad que desaconsejaba un evento masivo.

Debido a estos factores el 25 de octubre de 1982 el presidente de Colombia Belisario Betancur anunció la cancelación de la organización del evento argumentando que el país tenía necesidades más urgentes y no podía financiar los costosos requerimientos del torneo.

Tiempo después la renuncia de Colombia a la sede del mundial de fútbol de 1986 fue confirmada por la FIFA el 5 de noviembre de 1982 y se realizo una elección de la nueva sede con cuatro países candidatos: Canadá, Brasil, Estados Unidos y México, aunque Brasil se retiró poco antes de la designación obteniendo en 2007 la sede de la Copa Mundial de Fútbol de 2014, Canadá no tenía suficientes instalaciones futbolísticas, mientras que Estados Unidos, que no tuvo mucho apoyo, prefirió organizar una mejor candidatura para la Copa Mundial de Fútbol de 1994 de la que resultó electo y ambos países inclinaron su apoyo a la candidatura mexicana.

Finalmente, el 20 de mayo de 1983, la FIFA designó por voto de unanimidad a México, que ya había sido sede de la Copa Mundial de Fútbol de 1970 y así mantenía la táctica de rotación de sedes entre Europa e Iberoamérica, además de conservar la infraestructura del Mundial pasado.
El ambiente Blue-Green (despliegue azul-verde) es una estrategia de software que utiliza dos entornos de producción idénticos. Uno está activo manejando el tráfico (Blue) y el otro está inactivo probando la nueva versión (Green). 
Permite actualizar aplicaciones sin tiempo de inactividad y volver a la versión anterior de forma instantánea.


¿Cómo funciona?
El objetivo de esta técnica, fundamental en la cultura DevOps, es eliminar los cortes de servicio y minimizar los riesgos cuando se lanza una actualización. El proceso consta de cuatro fases clave:
  • El estado inicial: Tienes dos entornos de producción idénticos, a menudo denominados Blue (versión actual) y Green (la nueva versión). El entorno Blue maneja todo el tráfico de los usuarios reales.
  • Despliegue y pruebas: El código nuevo o actualizado se instala y prueba exhaustivamente en el entorno Green, garantizando que todo funcione correctamente antes de exponerlo al público general.
  • El cambio de tráfico (Switchover): Una vez verificado el entorno Green, un enrutador o balanceador de carga redirige todo el tráfico del entorno Blue al entorno Green. Ahora, Green es el entorno activo y Blue queda inactivo.
  • Reversión rápida (Rollback): Si se detecta un error crítico tras el cambio de tráfico, puedes redirigir inmediatamente a los usuarios al entorno Blue, restaurando la versión anterior sin afectar la experiencia del cliente.
Ventajas principales
  • Cero tiempo de inactividad (Downtime): Los usuarios no sufren interrupciones en el servicio, ya que la transición es instantánea.
  • Mitigación de riesgos: Los fallos en la nueva versión se detectan antes de que el público general se vea afectado.
  • Reversión instantánea: Volver a la versión estable anterior toma segundos, lo que reduce el estrés durante los lanzamientos.
¿Dónde se implementa?
Esta estrategia se puede aplicar de forma automatizada a través de herramientas de integración continua (CI/CD) y proveedores de nube:
  • Balanceadores de carga: Servicios como AWS Application Load Balancer permiten cambiar las reglas de enrutamiento para redirigir el tráfico del grupo Blue al Green de forma instantánea.
  • DNS: El sistema de nombres de dominio de Amazon Route 53 permite actualizar los registros para dirigir gradualmente a los usuarios del entorno activo al nuevo.
  • Contenedores y microservicios: En plataformas como Microsoft Azure Container Apps puedes configurar divisiones de tráfico para pruebas de versiones con un solo clic.
La arquitectura multi-tenant (o multiinquilino) es un modelo de software donde una única instancia de una aplicación y su infraestructura sirven a múltiples clientes o "inquilinos". Aunque todos comparten el mismo código y recursos, los datos y configuraciones de cada cliente permanecen completamente aislados y seguros.


Es la base de las soluciones SaaS (Software as a Service), permitiendo escalabilidad, costos compartidos y fácil mantenimiento.

Modelos de Bases de Datos más comunes
Existen tres enfoques principales para gestionar los datos en esta arquitectura, dependiendo del nivel de aislamiento y los costos:
  1. Base de datos compartida, esquema compartido: Todos los clientes comparten la misma base de datos y las mismas tablas. Se utiliza una columna (como \(TenantID\)) para filtrar y separar la información de cada uno.
    Ventaja: Es muy económica y fácil de escalar y mantener.
    Desventaja: El aislamiento de datos depende estrictamente de la lógica de programación.
  2. Base de datos compartida, esquemas separados: Todos los clientes usan el mismo servidor de base de datos, pero cada uno tiene su propio "esquema" o espacio de nombres independiente.
    Ventaja: Ofrece un mejor aislamiento de datos y facilita el cumplimiento de normativas de privacidad.
  3. Base de datos dedicada (Silo): Cada cliente tiene su propia base de datos física o instancia completamente independiente.
    Ventaja: Máxima seguridad, aislamiento total y fácil personalización por cliente.
    Desventaja: Es más costosa y compleja de actualizar.

Ventajas principales
  • Eficiencia de recursos: Al compartir servidores e infraestructura, los costos operativos se reducen significativamente.
  • Mantenimiento centralizado: Las actualizaciones de software o parches de seguridad se aplican una sola vez y se reflejan en todos los clientes.
  • Escalabilidad: Permite incorporar nuevos clientes rápidamente sin tener que desplegar aplicaciones desde cero.

¿Cuándo se utiliza?

Es el estándar de oro para los modelos SaaS (Software como Servicio) como plataformas de comercio electrónico (ej. Shopify), sistemas de gestión de proyectos (ej. Jira) o herramientas CRM, donde cada empresa necesita su propio entorno pero la lógica de negocio es genérica para todos
Konga es una herramienta de administración de código abierto que actúa como una interfaz gráfica (GUI) para gestionar el API Gateway de Kong. Su funcionamiento principal es proporcionar un panel de control centralizado y fácil de usar para administrar APIs, microservicios, complementos, consumidores y nodos de Kong, eliminando la necesidad de usar comandos como curl o herramientas como Postman. A través de Konga, los usuarios pueden monitorizar el estado en tiempo real, configurar upstream (servicios que Kong proxy), gestionar la seguridad y balancear la carga, todo desde una interfaz web.


¿Qué es Konga?
  • Interfaz de usuario para Kong: Konga es una aplicación que ofrece una interfaz gráfica de usuario (GUI) intuitiva para interactuar con la API de administración de Kong Gateway.
  • Gestión centralizada de APIs: Permite administrar Kong, que es una plataforma de código abierto para la gestión de APIs y microservicios.
  • Función de proxy: Kong (y por extensión, Konga) funciona como un proxy que dirige las peticiones a los servicios de backend, añadiendo funcionalidades como seguridad, logs y limitación de peticiones.

¿Cómo funciona?
  • Conexión a Kong: Konga se conecta a la API de administración de Kong para obtener la información y permitir su gestión. Esto se hace creando una conexión dentro de la aplicación y activándola.
  • Visualización y monitoreo: Proporciona monitoreo en tiempo real del estado de los nodos de Kong, información detallada de los mismos y un entorno multiusuario.
  • Administración de recursos: Permite gestionar elementos clave del ecosistema Kong, como:APIs: Crear y configurar servicios que el gateway debe exponer.
  • Plugins: Añadir y configurar complementos para extender la funcionalidad del gateway (ej. seguridad).
  • Consumidores: Administrar los clientes que utilizan las APIs.
  • Credenciales: Gestionar la autenticación de los consumidores.
  • Gestión avanzada de upstream y targets: Permite configurar grupos de servicios (Upstreams) y sus destinos individuales (Targets). Esto incluye la configuración de health checks (comprobaciones de salud) y balanceo de carga para distribuir el tráfico entre los Targets disponibles.

Un clúster es un grupo de servidores que funcionan juntos como un único sistema para procesar cargas de trabajo y mejorar la disponibilidad y escalabilidad. La integración con API funciona a través de la API del clúster, que es la interfaz para interactuar con él, permitiendo definir el estado deseado y que el clúster administre automáticamente los nodos y aplicaciones que lo componen para alcanzar ese estado.


¿Qué es un clúster?
  • Grupo de servidores: Un clúster es un conjunto de nodos o computadoras conectados que trabajan de forma cohesionada como un solo sistema.
  • Objetivo: Su propósito principal es gestionar y distribuir cargas de trabajo, logrando alta disponibilidad y escalabilidad.
  • Alta disponibilidad: Si un nodo falla, otro puede asumir su carga de trabajo, un proceso conocido como conmutación por error o failover.
  • Ejemplo de uso: En un clúster de Kubernetes, los nodos (máquinas físicas o virtuales) ejecutan aplicaciones en contenedores. El clúster se encarga de orquestar estos contenedores a escala.
¿Cómo funciona con integración de API?
  • API como interfaz: La API (Interfaz de Programación de Aplicaciones) del clúster es la forma en que los usuarios y otros sistemas interactúan con él.
  • Estado deseado: Un usuario o sistema define el estado deseado del clúster (ej. qué aplicaciones deben ejecutarse, cuántos recursos necesitan) a través de la API.
  • Gestión automática: El clúster, a través de su sistema de control, monitorea constantemente el estado real y trabaja para que coincida con el estado deseado definido por el usuario.
  • Herramienta declarativa: Es un sistema declarativo porque se le dice al clúster qué hacer (el estado deseado), y este se encarga de los detalles de cómo lograrlo automáticamente.
  • Ejemplo con Kubernetes: Se puede usar la herramienta de línea de comandos kubectl o la API directamente para enviar peticiones. Por ejemplo, se puede usar la API para solicitar el estado actual de los nodos o para desplegar una nueva aplicación. Las peticiones se dirigen a la API de Kubernetes, que luego las procesa y actualiza el clúster para que cumpla con la petición.


¿Cuál se debe elegir?
El sistema de mensajería adecuado depende de la arquitectura a utilizar y el uso requerido, es decir, cada proyecto es diferente al igual que sus necesidades y no hay un broker de mensajería definitivo.


Primero definamos rápidamente que es cada uno.

Apache Kafka:
Es una plataforma de streaming de eventos de código abierto que se utiliza para publicar, almacenar y procesar flujos de datos en tiempo real de forma escalable y confiable. Funciona como un sistema de mensajería distribuido en el que se pueden publicar mensajes (eventos) y suscribirse a ellos para procesarlos a medida que ocurren, con la capacidad de almacenar de manera duradera los flujos de datos.

Apache RabbitMQ:
Es un broker de mensajería de código abierto y de nivel empresarial que facilita la comunicación entre aplicaciones y sistemas distribuidos, actuando como un intermediario para enviar y recibir mensajes de manera fiable. Su funcionamiento se basa en un sistema de "intercambios" que enrutan mensajes a "colas" basándose en reglas, similar a una oficina de correos para datos.

Ahora les compartó una comparación eficaz de ambas:

Kafka:
  • Oleoducto de datos de alta velocidad
  • Maneja transmisiones de eventos continuos
  • Un rendimiento muy alto para aplicaciones en tiempo real
  • Conserva datos para repetición y análisis
  • Ideal para publicar/suscribir patrones

RabbitMQ :
  • El centro de mensajes confiable
  • Garantía de entrega de mensajes
  • Perfecto para colas de tareas y procesamiento de trabajadores
  • Soporta enrutamiento flexible para flujos de trabajo complejos
  • Adecuado para comunicación punto a punto

En resumen:
Kafka: Lo mejor para eventos a gran escala en streaming y análisis.
RabbitMQ: Lo mejor para entrega confiable, procesamiento de tareas y flujos de trabajo complejos.
La Normalización:
Es un proceso de diseño de bases de datos relacionales que aplica un conjunto de reglas para organizar los datos y reducir la redundancia. 
Su objetivo principal es evitar la duplicación de información, prevenir anomalías de inserción, actualización y eliminación, y garantizar la integridad de los datos mediante la creación de tablas más pequeñas y la definición de relaciones entre ellas. Se logra aplicando diferentes formas normales (como la Primera, Segunda y Tercera Forma Normal), que son etapas secuenciales para refinar la estructura de la base de datos.


Objetivos clave de la normalización
  • Reducir la redundancia de datos: Se evita almacenar la misma información en múltiples lugares, lo que simplifica las actualizaciones y el mantenimiento.
  • Prevenir anomalías: Se minimizan errores al insertar nuevos datos, actualizar registros existentes o eliminar información, ya que los datos relacionados se encuentran en un solo lugar.
  • Garantizar la integridad de los datos: Asegura la consistencia y exactitud de la información al relacionarla a través de claves.
Proceso y formas normales
La normalización se realiza a través de un proceso iterativo, aplicando reglas de forma secuencial. Las formas normales más comunes son: 
  1. Primera Forma Normal (1NF): Asegura que cada columna contenga valores atómicos (indivisibles) y que no haya grupos de columnas repetidos en una misma tabla.
  2. Segunda Forma Normal (2NF): Requiere que la tabla esté en 1NF y que todos los atributos no-clave dependan completamente de la clave primaria.
  3. Tercera Forma Normal (3NF): Requiere que la tabla esté en 2NF y que los atributos no-clave no dependan de forma transitiva de la clave primaria (es decir, un atributo no debe depender de otro atributo que no sea clave).
  4. Cuarta Forma Normal (4NF): La normalización a la cuarta forma normal (4FN) se enfoca en eliminar las dependencias multivalor no triviales, asegurando que cada tabla contenga una sola relación independiente entre sus atributos. Para lograr esto, si una tabla tiene múltiples relaciones independientes (como habilidades y lenguajes de un empleado), se divide la tabla en tablas separadas, manteniendo la integridad de los datos y reduciendo la redundancia.
¿Qué es una dependencia multivalor?
Una dependencia multivalor ocurre cuando una clave tiene valores múltiples para atributos que no están relacionados entre sí, pero que dependen de la misma clave.

Ejemplo: 
Una tabla de Empleado con las columnas ID_Empleado, Habilidad y Idioma. Un empleado puede tener múltiples habilidades y múltiples idiomas, pero las habilidades y los idiomas no están interrelacionados (por ejemplo, el hecho de que un empleado hable francés no afecta a su habilidad de programar en Python).

¿Cómo normalizar a 4FN?
  • Verificar la 3FN: Asegúrate de que la base de datos ya cumpla con la tercera forma normal (3FN).
  • Identificar dependencias multivalor: Busca tablas que representen más de una relación independiente. En el ejemplo anterior, la tabla Empleado tiene dos relaciones independientes: una entre empleado y habilidad, y otra entre empleado e idioma.
  • Crear tablas separadas: Si se detecta una dependencia multivalor, se deben crear tablas nuevas para cada relación independiente.La tabla original Empleado con ID_Empleado y Habilidad.
  • Una nueva tabla Empleado_Idioma con ID_Empleado e Idioma.
  • Nota: Esto solo aplica si no hay una interdependencia entre las columnas. Si una habilidad solo puede realizarse en un idioma específico, la relación no es independiente y la tabla original no violaría la 4FN.
  • Garantizar que cada tabla tenga una sola relación: El objetivo es que cada tabla represente un único tipo de relación independiente.
Beneficios de la 4FN
  • Elimina la redundancia: Evita repetir datos innecesariamente.
  • Previene anomalías: Reduce los problemas de inserción, actualización y eliminación de datos.
  • Mejora la integridad de los datos: Al tener menos redundancia, la probabilidad de inconsistencias disminuye.
Hola,
Sabian que en Postman existen funciones para diferentes temas, hoy les hablare de la función: $guid

En Postman, la función $guid se utiliza para generar automáticamente un identificador único universal (UUID). Para usarlo, simplemente escribe {{$guid}} en cualquier campo de la solicitud (URL, cuerpo, encabezados) para que Postman genere un nuevo UUID cada vez que se ejecute la solicitud.
Grafana es una plataforma de análisis y visualización de código abierto que permite a los usuarios monitorear y analizar métricas de diversas fuentes de datos a través de paneles interactivos y personalizables. Funciona conectándose a diferentes fuentes de datos (como bases de datos, servicios en la nube y sistemas de monitoreo), extrayendo información y transformándola en gráficos, paneles y alertas para facilitar la comprensión de tendencias y el rendimiento de aplicaciones e infraestructuras en tiempo real.


Cómo funciona:
  1. Conexión a fuentes de datos: Grafana se conecta a sus fuentes de datos existentes, como bases de datos de series temporales (ej: Prometheus, InfluxDB), servicios en la nube (ej: Azure, DynamoDB) o sistemas de registro (ej: Loki).
  2. Consulta y procesamiento de datos: Una vez conectado, Grafana puede consultar los datos. Utiliza plugins para interactuar con estas fuentes, y ofrece herramientas de transformación para manipular y combinar datos directamente en la plataforma.
  3. Visualización en paneles: Los datos se transforman en visualizaciones como histogramas, gráficos, mapas geográficos, etc. y se organizan en "paneles de control" interactivos y dinámicos.
  4. Generación de alertas: Se pueden configurar alertas para ser notificadas cuando una métrica supere un umbral definido. Las notificaciones pueden enviarse por correo electrónico, Slack u otros servicios.
  5. Análisis y colaboración: Los usuarios pueden explorar los datos para identificar tendencias, solucionar problemas o tomar decisiones informadas. Los paneles se pueden compartir fácilmente con otros miembros del equipo a través de enlaces o instantáneas.
Como buscar el log de un servicio en Grafana con loki?
Ingresar a Grafana -> Home -> Explore -> loki, en "Label filters" en el primer filtro se debe seleccionar la opción: 'namespace' y ahí colocar el namespace del servicio a buscar; luego agregar otro filtro y seleccionar la opción: 'app' y ahí colocar el nombre del servicio a buscar. Posteriormente, presionar el botón de buscar y listo.

Como buscar el log por rango de fecha y tiempo en un servicio?
Buscar la opción: 'Local browser time' la del icono del reloj, en la opción de: "Absolute time rage" en From (Fecha y hora de inicio) y To (Fecha y hora de finalización), luego presionar el botón: Apply time range y listo, el sistema buscar en el log del servicio en ese rango de fecha y hora.

Puedo exportar un log de un POD en Grafana?
Sí, puedes exportar logs de un POD en Grafana, pero para eso necesitas usar una integración con un sistema de gestión de logs como Loki. Grafana en sí mismo no maneja los logs, sino que los visualiza desde fuentes de datos como Loki, que está diseñado para almacenar y consultar logs.

Como hacerlo?
Despues de buscar el log del servicio, oprimir el botón: 'Query inspector' -> 'Data' y luego seleccionar, si se descarga en CSV o el txt: listo.


Un "servicio pass-through" es un servicio o función que permite la transferencia directa de datos, señales o materiales entre un sistema y otro, sin procesarlos ni modificarlos en el medio.


Este concepto se aplica en diversos ámbitos, desde la tecnología de diagnóstico automotriz (Pass-Thru) que conecta a talleres con servidores de fabricantes para actualizar software, hasta sistemas de transferencia de materiales en salas limpias (pass box), pasando por la funcionalidad de audio/video en equipos electrónicos y el impacto del tipo de cambio en la economía (efecto pass-through).

Ejemplos comunes de "servicio pass-through":
  • Diagnóstico automotriz (Pass-Thru): Las herramientas de diagnóstico permiten a los talleres descargar software y datos directamente de los fabricantes de vehículos para actualizar módulos, realizar diagnósticos precisos y programar componentes.
  • Sistemas de transferencia en salas limpias (Pass Box): Permiten el paso de materiales entre diferentes áreas controladas sin comprometer la esterilidad del ambiente, utilizando un sistema de puertas y enclavamientos para evitar la contaminación.
  • Audio y vídeo: Un procesador de audio o video puede tener una función pass-through que envía señales HDMI IN directamente al televisor conectado a HDMI OUT, incluso cuando el procesador está apagado.
  • Redes y finanzas: En el ámbito financiero, el efecto pass-through describe cómo las variaciones en el tipo de cambio (como el del dólar) se trasladan a los precios internos de la economía. En redes, un router puede usar el modo IP Pass Through para asignar directamente la dirección IP pública del proveedor a un dispositivo cliente.
  • Tecnología de Realidad Virtual (VR Pass-through): Las gafas de realidad virtual permiten ver el entorno físico exterior a través de sus cámaras, permitiendo al usuario interactuar con el mundo real sin quitarse el casco.
Hola,
Alguna vez se han preguntado cual es la diferencia entre API Gateway y Transit Gateway en AWS, pues yo si y aquí te explico:


API Gateway
  • Función: Es un servicio que actúa como puerta de entrada para exponer y gestionar APIs (REST, HTTP, WebSocket).
  • Uso: Se usa cuando querés que clientes (apps web, móviles, servicios externos) consuman tus APIs de forma segura y controlada.
Características:
  1. Maneja autenticación, autorización y seguridad (OAuth, IAM, API Keys).
  2. Hace rate limiting, throttling, logging, CORS.
  3. Se integra con Lambda, ECS, EC2, S3, DynamoDB, etc.
  4. Ideal para microservicios y arquitecturas serverless.
Ejemplo: 
Una app móvil que consume servicios de backend mediante un endpoint expuesto con API Gateway.

Transit Gateway
  • Función: Es un hub de red para interconectar VPCs y on-premises (via VPN o Direct Connect).
  • Uso: Se usa cuando tenés múltiples VPCs (en la misma región o distintas) y querés gestionarlas como una sola red centralizada.
Características:
  1. Simplifica la conectividad entre muchas VPCs (sin necesidad de hacer peering entre todas).
  2. Escalable y con mayor rendimiento que el peering clásico.
  3. Compatible con multicuenta y multirregión.
  4. Maneja el enrutamiento centralizado.
Ejemplo: 
Una empresa con varias VPCs (producción, pruebas, seguridad, analítica) que necesita conectarlas entre sí y también con el datacenter físico.

Resumen corto:
API Gateway → maneja tráfico de usuarios hacia tus APIs.
Transit Gateway → maneja tráfico de red entre tus VPCs/on-premises.
Hola,
En una cola de tipo topic en RabbitMQ, la routing key (clave de enrutamiento) es una cadena que se utiliza para determinar a qué colas se debe enrutar un mensaje. Esta cadena, compuesta por palabras separadas por puntos, permite definir patrones de enrutamiento complejos utilizando comodines como * (para una palabra) y # (para cero o más palabras).


Elaboración:

Intercambios (Exchanges) tipo Topic:
Los intercambios tipo topic son un tipo de exchange en RabbitMQ que permite un enrutamiento flexible basado en patrones de palabras clave en la routing key.

Clave de Enrutamiento (Routing Key):
El productor incluye una routing key en el mensaje, que actúa como una dirección para el intercambio.

Vinculaciones (Bindings):
Las colas se vinculan al exchange con patrones de vinculación (binding patterns) que pueden coincidir con la routing key del mensaje.

Comodines en las Vinculaciones:
Los patrones de vinculación pueden usar * (asterisco) para coincidir con una sola palabra y # (almohadilla) para coincidir con cero o más palabras, permitiendo un enrutamiento más flexible.

Ejemplo:
Si un mensaje tiene la routing key "news.sport.2024", y una cola tiene una vinculación con el patrón "news.#", el mensaje se enrutará a esa cola porque la vinculación coincide con la routing key.

En resumen:
La routing key y las vinculaciones con patrones en un exchange tipo topic permiten un control preciso de a qué colas se envían los mensajes, basándose en la estructura y el contenido de la routing key.


Hola,
Como se pueden descartar los cambios de clases a las cuales ya se les hizo COMMIT en GIT, pero aún no se les ha realizo el PUSH?


Se realiza de la siguiente forma:

Resetear el commit (rehacerlo sin esa clase)

git reset --soft HEAD~1

Esto revierte el último commit pero deja los archivos como estaban en staging, osea, mantiene los cambios para poderlos versionar nuevamente.

Hola,

Sabían que los humanos se clasifican internamente de acuerdo a sus generaciones y esto viene "clasificado" desde el año 1901, acompañamé en esta corta y efectiva explicación generacional.

Generación Grandiosa:

  • Nacidos entre los años 1901 y 1927.
  • Vivieron la Gran Depresión y lucharon algunos en la Primera Guerra Mundial y muchos en la Segunda Guerra Mundial.
  • Son resilientes, trabajadores y patriotas.
Generación Silenciosa:
  • Nacidos entre los años 1928 y 1945.
  • Crecieron en tiempos difíciles.
  • Son disciplinados, prudentes y enfocados en la estabilidad.
Baby Boomers:
  • Nacidos entre los años 1946 y 1964.
  • Crecieron en la prosperidad de la posguerra.
  • Son idealistas, ambiciosos y orientados a la carrera.
Generación X:
  • Nacidos entre los años 1965 y 1980.
  • Influyeron en tiempos de cambio.
  • Son independientes, escépticos y orientados a lograr un equilibrio.
Millennials:
  • Nacidos entre los años 1981 y 1996.
  • Alcanzaron la mayoría de edad en la era digital.
  • Siempre conectados, orientados a la meta e inquisitivos.
Generación Z:
  • Nacidos entre los años 1997 y 2012.
  • Crecieron con teléfonos inteligentes.
  • Son creadores, realistas y socialmente conscientes.
Generación Alfa:
  • Nacidos entre los años 2013 y 2024.
  • Hijos de los Millennials.
  • Son nativos digitales, viven inmersos en la tecnología.
Generación Beta:
  • Nacidos desde el año 2025.
  • Todavía en desarrollo.
  • Crecerán rodeados de IA (Inteligencia Artificial) y la automatización.
  • Son de mente digital y siempre conectados.
  • Se espera que sean dependientes de la IA.


Hola,
Conocen en Java que es HashMap y que es Hashtable y saben sus principales diferencias?

La definición rápida es que son estructuras de datos que almacenan elementos en pares clave-valor, permitiendo acceder a los valores de manera rápida mediante sus claves.

¿Cuándo usar cada uno?
  • Usa HashMap en la mayoría de los casos, especialmente si no necesitas sincronización o prefieres sincronizar de forma explícita con Collections.synchronizedMap() o usando otras herramientas (ConcurrentHashMap).
  • Usa Hashtable solo si necesitas un mapa sincronizado y no quieres manejar sincronización manualmente, aunque hoy en día se recomienda usar ConcurrentHashMap para concurrencia en lugar de Hashtable.
HashMap
Parte de: java.util (desde Java 1.2) Es una implementación de la interfaz Map en Java.
Permite claves y valores nulos: Sí, permite una clave nula y múltiples valores nulos.
No es sincronizado: No es thread-safe; si varios hilos acceden y modifican el mapa, debe sincronizarse externamente.
Rendimiento: Generalmente más rápido que Hashtable por no tener sincronización interna.
Iteradores: Son fail-fast — si el mapa se modifica mientras se itera, lanzan ConcurrentModificationException.

Nota:
Fail-fast es un comportamiento en Java donde una colección (como ArrayList, HashMap, etc.) lanza una excepción si es modificada estructuralmente mientras se la recorre (por ejemplo, con un Iterator), fuera del propio iterador.

Hashtable
  • Parte de: java.util (desde Java 1.0) Es una implementación de la interfaz Map en Java.
  • No permite claves o valores nulos: Lanzará NullPointerException si intentas insertar clave o valor null.
  • Es sincronizado: Todos sus métodos están sincronizados (thread-safe para accesos concurrentes).
  • Rendimiento: Más lento que HashMap por la sincronización interna.
  • Iteradores: No son fail-fast.

Hola,

Sabían acaso que en ningún otro idioma en la historia humana se ha iniciado una pregunta con un signo de interrogación, cerrándolo al final. 

Solo el idioma Español lo hace y lo hace por una razón tan lógica como hermosa.


La RAE dice que hay que usarlo siempre, pero no todo el mundo lo hace.

Pero que exista, que esté ahí, que haya sido inventado solo para nosotros, dice mucho del hermoso y complicado idioma que hablamos.

El Castellano no necesita parecerse a ningún otro idioma, puesto que cuando pregunta, lo hace a su manera. El signo de apertura no es solo un símbolo, es una señal de cortesía para el lector, una manera de decirle: "esto es una pregunta, prepárate", y en tiempos de ruido y confusión, esa claridad es más revolucionaria que nunca.


Historia:

En 1754, la Real Academia Española (RAE) propuso un cambio revolucionario: usar dos signos, uno al principio y otro al final, para marcar con claridad las oraciones interrogativas. 

Era un invento tipográfico, sí, pero también una decisión política, ya que, en vez de imitar al francés o al inglés, el Español afirmaba que su gramática necesitaba su propio ritmo, y que la claridad no era un defecto, sino una virtud.

El primer símbolo, invertido, anunciaba desde el inicio el tono de la frase, que era una pregunta.


Pasaron años para que las personas lo aceptara, mucho pensaban que era una excentricidad, un exceso, una doble marca innecesaria, pero con el tiempo, el signo invertido se volvió natural, lógico e inconfundible.

El símbolo en sí define una curva con un punto, esto surgió debido a que en la Edad Media, los copistas latinos usaban la palabra "quaestio" (pregunta) al final de las frases interrogativas.

Con el tiempo, esa palabra se fue reduciendo a una letra Q sobre una O, después la Q se curvó, la O se convirtió en punto y así nació el símbolo "?".

Fue una evolución caligráfica, una abreviatura manuscrita que sobrevivió a la imprenta y se convirtió en norma tipográfica.

Porque la interrogación no es una invención moderna, es una letra que se hizo gesto, una pregunta que se convirtió en forma en el idioma español y castellano y, al darle un doble signo, la hizo aún más clara, más directa, más musical y también más hermosa.


Otros idiomas lo han debatido, algunos escritores lo han elogiado y muchos estudiantes lo temen cuando aprenden castellano, pero nadie ha logrado que funcione igual de bien en otra lengua.

Antes del siglo XVIII los textos en Español no tenían signos fijos, se usaban guiones, rayas o nada y era el lector quien debía adivinar por el tono o por el contexto, cuándo una frase era una pregunta o una exclamación, y a veces lógicamente, se equivocaba.

Hoy, ningún hispanohablante duda que al leer: "¿vas a venir?", no es lo mismo que vas a venir, ya que la pregunta está marcada desde el principio, y eso da una ventaja única: se sabe el tono desde la primera palabra de cada frase.

Basado en un twitt de: Iván Fernández Amil.

La Rebelión de los Comuneros refiere al levantamiento armado que estalló en la Nueva Granada en 1781, principalmente asociado a la revuelta en el Socorro (entonces provincia de Santa Fe) que culmina parcialmente con las capitulaciones de Zipaquirá en junio, y continua en una segunda etapa como un amplio movimiento que involucró pobladores de los llanos, Neiva, Nariño, Cauca (actual Valle del Cauca) y la costa atlántica.


La insurrección comunera tiene por causa inmediata las medidas tomadas por el regente visitador Juan Francisco Gutiérrez de Piñeres, quien aumentó el impuesto de alcabala; estableció impuestos a la sal, el tabaco y los juegos de cartas; e impuso nuevos gravámenes a los textiles de algodón. Los cambios se enmarcaban en el contexto de las llamadas reformas borbónicas que pretendían, entre otras cosas, imponer mayores gravámenes a las élites criollas y recomponer los resguardos indígenas con el objeto de rematar tierras a favor de la Real Hacienda.

Las decisiones tomadas, de por sí impopulares, se hicieron más ofensivas por la aplicación de métodos arbitrarios y violentos usados por los recaudadores de impuestos. La insurrección comunera expresó a una variada mezcla de reivindicaciones, no sólo por sus diferentes causas, sino porque involucró sectores rurales y urbanos, así como sectores con intereses económicos y sociales diferenciados. Desde otra perspectiva, la revuelta comunera formó parte de una serie de luchas libradas en el conjunto de las colonias españolas en América.

El Fondo Comuneros de la Biblioteca Nacional constituye el universo documental en que se apoya la presente visita guiada. El Fondo, constituido por 18 volúmenes, contiene una rica documentación sobre el proceso: títulos de capitanes, minutas de sanciones, papeles sueltos, cartas entre comunes, decretos, edictos, bandos, instrucciones, planes de recaudo, relaciones de cuentas, informes de funcionarios reales, partes militares, nombramientos, documentos reservados, correspondencia varia, causas seguidas contra comuneros, testimonios y declaraciones de algunos de los principales protagonistas del proceso, juicios, embargos, sentencias, representaciones, oficios y actas emitidas por las distintas instancias de gobierno desde el local hasta el virreinal. La rica documentación ilustra las complejas configuraciones del proceso, las disímiles perspectivas e intereses de los sectores sociales involucrados y la amplia geografía cubierta por el movimiento comunero.

Autor: Rigoberto Rueda Santos, profesor del Departamento de Historia de la Pontificia Universidad Javeriana.

Causas principales:
  • Aumento de impuestos: Las reformas borbónicas introdujeron o aumentaron impuestos como el de alcabala, el de la Armada de Barlovento y el de la sal, tabaco y aguardiente.
  • Limitaciones a la producción: Se prohibió la siembra de tabaco en algunos territorios, afectando la economía de la región.
  • Contexto de las Reformas Borbónicas: Estas reformas buscaban centralizar el poder en la corona y mejorar la economía colonial, lo que generó fricciones con las élites criollas.
Desarrollo de la insurrección:

Inicio en El Socorro:
  • El 16 de marzo de 1781, en El Socorro, la población protestó contra las nuevas medidas fiscales, simbolizado por Manuela Beltrán, quien rompió el edicto que establecía el impuesto para la Armada de Barlovento.
Expansión de la revuelta:
  • La inconformidad se extendió a pueblos cercanos y la revuelta se convirtió en un movimiento más amplio que involucró a gran parte del virreinato.
Marcha a Santafé:
  • Los comuneros se organizaron y marcharon hacia Santafé, formando un ejército popular.
Capitulaciones de Zipaquirá:
  • El arzobispo Antonio Caballero y Góngora negoció con los líderes comuneros, lo que resultó en las Capitulaciones de Zipaquirá, que incluían la reducción de impuestos y la abolición de algunos de ellos.
Perdón general:
  • Se concedió el perdón a todos los participantes de la rebelión.
Conclusión:
La Insurrección de los Comuneros fue un importante acontecimiento en la historia de Colombia, que reflejó el descontento de la población con las políticas coloniales y sentó las bases para futuros movimientos independentistas. Se considera una muestra de resistencia popular ante las medidas impositivas y las limitaciones a la producción. Según la Biblioteca Nacional de Colombia, la revuelta se convirtió en un símbolo de lucha contra el dominio español y sentó las bases para la independencia de Colombia.

Fuente:
Hola,
Si han escuchado este concepto y no tienen claro que es, les explico facilmente.
Un API de experiencia es una capa de APIs diseñadas para facilitar la integración entre servicios backend y las interfaces de usuario (web, móvil, terceros). Se enfocan en adaptar los datos y funcionalidades de los sistemas internos para que sean más eficientes y fáciles de consumir desde el frontend.


¿Cómo funciona a nivel de desarrollador?
Como desarrollador, trabajar con un API de experiencia implica:

1. Diseñar una API adaptada a la necesidad del frontend:
  • Agregar o transformar datos desde varias fuentes (bases de datos, microservicios, APIs externas).
  • Simplificar la respuesta para que el frontend reciba solo lo necesario.
2. Usar principios de diseño como:
  • GraphQL o REST optimizado: Para evitar múltiples llamadas al backend.
  • Agregación de datos: Combinar respuestas de varias APIs internas en una sola.
  • Normalización y caching: Para mejorar rendimiento y evitar carga innecesaria en los servicios backend.
3. Implementarlo en una arquitectura de 3 capas:
  • API de Experiencia (Frontend-facing API)
  • API de Procesos (Orquestación de lógica de negocio)
  • API de Sistema (Acceso a datos y sistemas internos)