lunes, 29 de septiembre de 2025

Como agregar código fuente con estilo en Blogger

 El presente es una guía muy simplificada para insertar código fuente con estilo en tu blog de Blogger.

Pasos:

Ir al menú 

Blogger ➜ Tema 

arriba a la derecha tenemos un botón que dice "Crear/Restablecer copia de seguridad". 

Clic en "Descargar Tema".

En la pantalla de Temas, clic en "Editar Html".

En el editor incluimos entre las etiquetas <head> </head>, el siguiente código fuente:

<!--Syntax Highligting-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/go.min.js"></script>
<link href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/vs.min.css" rel="stylesheet">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<!--FIN Syntax Highligting-->

Básicamente, lo que hemos hecho es incluir las librerías de highlight.js en nuestro Blogger.

Por tanto, ya podemos usarla, es tan sencillo como meter nuestro código fuente entre las etiquetas siguientes:

    
<pre>  
    <code class="html">   
         Nuestro código va aquí  
    </code>  
</pre>

En el atributo "class" de la etiqueta <code> debemos especificar el lenguaje de programación de nuestro code snippet. En nuestro caso era html.

--

Fuente de la información: ambellido.blogspot.com

lunes, 22 de septiembre de 2025

¿Qué es un Data Lake?

Un Data Lake es como un gran lago digital donde puedes guardar todos tus datos en bruto (sin importar el formato) en un solo lugar. No importa si son tablas de una base de datos, archivos CSV, videos, imágenes, logs de aplicaciones o datos en tiempo real: todo se almacena junto, tal cual llega, sin necesidad de ordenarlo primero.

La idea es que no tengas que decidir de entrada cómo estructurar los datos (como sí pasa en una base de datos tradicional). En el lago, guardas todo “crudo” y después, cuando lo necesites, aplicas filtros, análisis o transformaciones.

En palabras sencillas: un Data Lake es un repositorio central y flexible donde una empresa guarda toda su información, sin importar el tipo o formato, para luego poder analizarla, entrenar modelos de IA, hacer reportes o descubrir patrones.



viernes, 19 de septiembre de 2025

IAM: AWS Identity and Access Management

 Descripción general

AWS Identity and Access Management (IAM) es un servicio web que ayuda a controlar de forma segura el acceso a los recursos de AWS. Con IAM, se puede administrar a qué recursos de AWS pueden acceder los usuarios. Se utiliza IAM para controlar quién está autenticado (ha iniciado sesión) y autorizado (tiene permisos) para utilizar recursos. IAM proporciona la infraestructura necesaria para controlar la autenticación y la autorización.

¿Qué soluciona?

Permite gestionar la identidad y el acceso a recursos de AWS de forma segura, granular y centralizada, implementando controles de autorización robustos para usuarios, roles, grupos y servicios.

Soporta MFA, federación, credenciales temporales, roles vinculados a servicios, políticas basadas en atributos (ABAC), y otros mecanismos de seguridad avanzados.

IAM es uno de los servicios más importantes de conocer porque es la primera capa de seguridad en la cuenta, del cual se generan la gran mayoría de políticas de control de acceso.

Conceptos clave

  • Recurso: es cualquier cosa que creas o usas dentro de la nube. Por ejemplo, una máquina virtual (EC2), un bucket de almacenamiento (S3), una base de datos (RDS), una función (Lambda), una red (VPC). ● Usuario: es simplemente una identidad que puede entrar a tu cuenta y usar los recursos de la nube.
  • Rol: Imagina el quirófano de un hospital, solo para entrar necesitas un equipamiento específico. En Aws un rol es ese equipamiento que le permite a los usuarios efectuar acciones específicas. Un rol no tiene credenciales fijas, se “asume” (se toma prestado) y al hacerlo recibes permisos temporales.
  • MFA: significa Multi-Factor Authentication o Autenticación Multi-Factor. Es como ponerle un segundo candado a tu cuenta. Usualmente se usan sistemas de generación de códigos como Google Authenticator para complementar el usuario y contraseña de la cuenta, se suele decir que es recomendable, yo digo que aunque Aws no lo requiere debería ser obligatorio, ya que, es muy importante para asegurar cualquier cuenta.
  • Federación: significa que no necesitas crear un usuario de AWS (IAM) para cadapersona que quiera entrar. En lugar de eso, las personas usan su identidad de otro sistema (Google, Microsoft, tu empresa, etc.) para entrar a AWS.
  • ABAC: política basada en atributos (Attribute-Based Access Control) es una forma de dar permisos usando etiquetas (tags) en lugar de nombres de usuario o roles fijos.

Herramientas / funcionalidades principales

  • Gestión de identidades: usuarios, grupos, roles
  • Políticas JSON detalladas (controles de acceso granulares)
  • MFA (Multi-Factor Authentication)
  • Credenciales temporales mediante STS.
  • Federated access (Google, Active Directory, SAML, etc.)
  • Service-linked roles (roles vinculados a servicios)
  • Políticas basadas en atributos (ABAC)
  • IAM Access Advisor (información de uso reciente) y Access Analyzer (análisis de acceso externo, interno, no utilizado, validación de políticas, generación automática)

Alcance

Global: IAM no depende de una región específica. Los usuarios, roles, políticas y grupos creados en IAM son válidos en toda tu cuenta de AWS.

SLA (Service Level Agreement)

No existe un SLA financiero ni de disponibilidad específico para el servicio IAM general (usuarios, roles, políticas).

Aspectos clave de Pricing

  • IAM básico (usuarios, roles, políticas, grupos, MFA, federación, STS, SSO, etc.): gratuito, sin cargos adicionales .
  • IAM Access Analyzer (característica avanzada de IAM):
    • Analizador externo: gratuito
    • Analizador interno: pago por recurso monitoreado / mes
    • Analizador de acceso no utilizado: pago $0.20 por rol o usuario IAM por mes
    • Comprobaciones personalizadas de políticas: $0.0020 por llamada a API (check)

Buenas prácticas y consideraciones

  • Implementar principio de menor privilegio (least privilege), por ejemplo usando Access Analyzer para refinar permisos.
  • Mantener roles y usuarios inactivos desactivados o eliminados por razones de seguridad.
  • Utilizar tags y ABAC para automatización y escalado eficiente de permisos.
  • Para control de costos por usuario, se recomienda usar cuentas separadas dentro de AWS Organizations y etiquetado con CUR (Cost and Usage Reports)

Servicios relacionados

  • AWS Security Token Service (STS)
  • AWS Organizations (para federación y políticas a nivel de organización)
  • AWS CloudTrail (registro de eventos y auditoria)
  • Reachability Analyzer (usa service-linked roles)

Limitaciones relevantes

  • No existe un SLA financiero ni garantía de uptime; en caso de problemas, no hay créditos automáticos como en otros servicios.
  • Access Advisor tiene cobertura limitada y no detecta uso excesivo de acciones específicas; Access Analyzer es la solución más robusta

  • Gestión de costos por usuario dentro de la misma cuenta es limitada; se recomienda arquitectura multi-cuenta.

Documentación oficial

https://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/introduction.html

--





jueves, 18 de septiembre de 2025

[Solucionado] ssh_exchange_identification: Connection closed by remote host

 Problema: Me intenté conectar a un servidor a través de ssh y me dió el siguiente error:

ssh_exchange_identification: Connection closed by remote host

Causa: El archivo /etc/hosts.deny es una especie de lista negra en la cual están almacenadas direcciones IP a la que no se le permite acceso al servidor. Mi IP está en esa lista negra.

Solución: Acceder al servidor a través de otra máquina, en persona, proxy o de cualquier otra manera siempre y cuando pueda editar ese archivo con privilegios elevados y eliminar de la lista de IPs «rechazadas» la de nuestra máquina. Eso está en el archivo «/etc/hosts.deny»

También aplica agregar los hosts (IPs) con acceso al server al archivo «hosts.allow».

sshd: 192.168.0.100

Eso basta 🙂 Ya no estamos en la blackList.

miércoles, 17 de septiembre de 2025

Evitar un potencial NullPointerException en Java en comparaciones de String

 A continuación un pequeño tip para evitar un potencial NullPointerException, una de las excepciones más comunes al momento de desarrollar en Java, además una de las más difíciles de rastrear.

Imaginemos que tenemos una clase Llama, tiene una función que devuelve un String llamada saySomething(), ahora supongamos que queremos saber si la llama dice «Ola k ase?»

A manera de ejercicio mental… ¿Cómo desarrollarías la comparación?

El modo más común a primera vista sería:

Llama.saySomething().equals(«Ola k ase?»)

Ejemplo:

    
if (Llama.saySomething().equals("Ola k ase?"))
{
   System.out.println("La llama está saludando");
}
else
{
   System.out.println("La llama no está saludando");
}

Si la clase Llama es nula o Llama.saySomething() devuelve null, se generará un NullPointerException… Pero con un pequeño cambio podemos evitar dicha excepción, de la siguiente manera:

if ("Ola k ase?".equals(Llama.saySomething()))
{
   System.out.println("La llama está saludando");
}
else
{
   System.out.println("La llama no está saludando");
}

En este caso de prueba sí Llama.saySomething() es null no se generará una excepción sino que simplemente se ejecuta el código en el else.

martes, 16 de septiembre de 2025

Falta de capacidad como indicador de éxito de un proyecto

Una pequeña startup* tiene un proyecto que llamaremos RedBuho, se trata de una red social general para compartir y guardar cualquier tipo de material multimedia.

El dueño de RedBuho (dueño, programador, analista, diseñador, arquitecto y el que hace todo porque es el único), ideó su portal en PHP* y MySQL* ya que, le resulta muy sencillo encontrar servidores gratuitos o muy económicos para publicar su desarrollo.

El dueño de RedBuho, que llamaremos Mr. Bigowl, quiso probar un poco su conocimiento de Lean*, así que publicó su red social con las mínimas características necesarias para que fuera operativa.

Luego de dos meses, un famoso y respetado profesor de informática y seguridad en la web, con muchos seguidores en Youtube por lo didáctico y actualizado de sus videos, hizo una reseña de esta nueva red social, mencionó que a pesar de tener muy pocos usuarios, menos de 100, ofrece unas características innovadoras y muy interesantes. Inmediatamente, en una hora, RedBuho pasó de 85 usuarios a 1200, a la siguiente hora a 6500 y a la siguiente hora el portal dejó de funcionar por el exceso de visitas y registros.

En los siguientes días RedBuho tuvo serios problemas de disponibilidad, se caía constantemente, tenía lentitud, etc...

Hasta este punto de la historia probablemente alguien pensaría que Mr. Bigowl se equivocó al decidir montar su red social en un server gratuito, o alguna solución basada en Amazon Web Service, que no tuvo previsto soportar cierta cantidad de usuarios, que planificó mal, en fin, que todos estos eventos pueden verse como un fracaso.

Nada más alejado de la realidad...

Mr. Bigowl tuvo el problema más deseado por una empresa emergente, la falta de capacidad para un exceso de demanda. No ha fracasado, al contrario, tuvo demasiado éxito.

Ahora vienen nuevas decisiones...

  • Limitar la cantidad de usuarios mientras comienza a ser rentable el sitio.
  • Arrendamiento de hosting con más capacidades.
  • Migrar a una nube que le permita escalabilidad y resiliencia.
  • Buscar apoyo con publicidad u otro tipo de patrocinio.

Lo realmente agradable es que alguna decisión tendrá que tomar. Si el sitio no hubiera tenido éxito, el pequeño cascaron de un hosting gratuito le hubiera sido suficiente para tener su proyecto.

Algunas sugerencias finales:

  • No llenes tu lista de cosas por hacer antes de lanzar tu producto. Sal al mercando con lo mínimo que necesites (un Producto Mínimo Viable).
  • Si lanzaste tu producto y tienes problemas de capacidad, celébralo, porque ahora tendrás la tarea de pensar una estrategia para sopesar esa carencia, eso es un reto que deriva del éxito.
  • No le temas al fracaso. De los fallos se obtiene información para mejorar.
  • No le temas al éxito.

--

Glosario:

  • Startup: Una compañía startup, compañía de arranque, compañía incipiente o, simplemente, compañía emergente es un término utilizado actualmente en el mundo empresarial el cual busca arrancar, emprender o montar un nuevo negocio y hace referencia a ideas de negocios que están empezando o están en construcción, es decir son empresas emergentes apoyadas en la tecnología.
  • PHP: Lenguaje de programación, muy usado.
  • MySQL: Motor de Base de Datos.
  • Lean Startup: Filosofía para abordar el lanzamiento de negocios y productos que se basa en aprendizaje validado, experimentación científica e Iteración en los lanzamientos del producto para acortar los ciclos de desarrollo, medir el progreso y ganar valiosa retroalimentación de los clientes. De esta manera las compañías, especialmente startups pueden diseñar sus productos o servicios para cubrir la demanda de su base de clientes, sin necesitar grandes cantidades de financiación inicial o grandes gastos para lanzar un producto.
  • Hosting: Servidor o servidores que sirven que ofrecen los recursos necesarios para alojar un sitio web y hacerlos de acceso público en Internet.

lunes, 15 de septiembre de 2025

How to know what century a year belongs to in Java

 Let's code... Let's see how to know what century a year belongs to in Java.

Given a year, return the century it is in. The first century spans from the year 1 up to and including the year 100, the second - from the year 101 up to and including the year 200, etc.

Example

For year = 1905, the output should be solution(year) = 20;

For year = 1700, the output should be solution(year) = 17.

Input/Output

[input] integer year

A positive integer, designating the year.

[output] integer

The number of the century the year is in.

Solution

    
int solution(int year) {
    
    // If year ends with 00 century is the first part
    // Example: 400 is 4. 1900 is 19.
    if (year % 100 == 0){
        return (year / 100);
    }
    else{
        // In any other case the century is that part of te year + 1
        return ((year / 100)+1);
    }  
} 
   
 

Patrones de Despliegue

Un patrón de despliegue es una estrategia estructurada para actualizar o liberar nuevas versiones de software en un entorno de producción, ...