martes, 14 de enero de 2025

Kubernetes como si le explicarás a tu mascota (o a un niño de cinco años)

Kubernetes explicado en términos sencillos:

"Supongamos que tienes muchos juguetes, como carritos, muñecas y bloques. Si los dejas todos tirados, sería un desastre, ¿verdad? Kubernetes es como un amigo mágico que ayuda a ordenar todos tus juguetes".

  1. Organiza: Te ayuda a poner todos los juguetes en grupos. Por ejemplo, todos los carritos juntos, todas las muñecas en otro lugar. 
  2. Mantiene el orden: Si un juguete se rompe o se pierde, Kubernetes puede sacar otro del mismo tipo para que sigas jugando sin problemas. 
  3. Comparte: Si tienes amigos jugando contigo, Kubernetes asegura que todos tengan los juguetes que necesitan, sin que nadie se quede sin nada.

Así que, Kubernetes es como un super organizador que hace que jugar con muchos juguetes sea divertido y sin enredos

"Piensa en Kubernetes como un gerente muy eficiente de una gran empresa, pero en lugar de empleados, maneja aplicaciones y servicios en computadoras".

Imagina que tienes una tienda con muchas sucursales. Cada sucursal necesita tener ciertos productos (aplicaciones) en stock y funcionando bien:

  1. Organización: Kubernetes se asegura de que cada sucursal tenga los productos correctos. Si una sucursal necesita más de un producto específico, Kubernetes lo distribuye automáticamente.
  2. Mantenimiento: Si algún producto no funciona bien en una sucursal, Kubernetes lo reemplaza o repara sin que tú tengas que intervenir directamente. Así, tus clientes siempre tienen lo que necesitan sin interrupciones. 
  3. Escalabilidad: Si de repente hay mucha demanda en una sucursal, Kubernetes puede aumentar rápidamente el número de productos disponibles sin que tengas que preocuparte por la logística.

En resumen, Kubernetes es un sistema que automatiza la gestión, distribución y mantenimiento de aplicaciones en múltiples computadoras, asegurándose de que todo funcione sin problemas, incluso cuando la demanda cambia.

Relación con Docker

Piensa en Docker y Kubernetes como dos partes de un equipo que trabajan juntas para hacer más fácil la gestión de aplicaciones.

"Docker es como una caja mágica para empacar tus cosas. Imagina que cada aplicación es un juguete y Docker te permite meter cada juguete en su propia caja especial (un contenedor). Esta caja asegura que el juguete funcione de la misma manera, sin importar en qué lugar lo saques. Así, puedes mover tus aplicaciones de una computadora a otra sin problemas".

"Kubernetes, por otro lado, es el gerente que organiza todas esas cajas (contenedores de Docker). Si tienes muchas cajas, Kubernetes se encarga de:

  • Colocarlas en los estantes correctos (las computadoras adecuadas). 
  • Mantenerlas en orden, asegurándose de que siempre haya cajas disponibles si una se rompe o si necesitas más. 
  • Distribuir las cajas según la necesidad, si una área necesita más de cierto tipo de juguete, Kubernetes lo maneja.

En resumen, Docker es para empaquetar y asegurar que tus aplicaciones funcionen de manera consistente, mientras que Kubernetes es para gestionar y escalar esos paquetes de manera eficiente en múltiples computadoras.

Ambos trabajan juntos para que la tecnología detrás de las aplicaciones sea más manejable y menos complicada para ti.

Enlaces:

https://kubernetes.io/es/docs/concepts/overview/what-is-kubernetes/

domingo, 12 de enero de 2025

Docker en palabras sencillas

En pasados post ya hemos hablado algo sobre Docker:

¿Qué es Docker?

Es como una caja que guarda tu aplicación con todo lo necesario para ejecutarse en cualquier otra máquina.

Es decir, es una caja donde se empaquetan las configuraciones, librerías, etc. de tu aplicación (Java, Go, Python, Node JS, etc.). Esta caja podrá ser "abierta" en otra máquina y podrá ejecutar tu aplicación sin tener que instalar y/o configurar absolutamente nada.

Similar a lo que hacíamos anteriormente en una Máquina Virtual. De hecho, Docker las ha venido reemplazando.

Mientras que una Máquina Virtual necesita su propio sistema operativo, tarda minutos en arrancar, consume muchos recursos de memoria RAM y espacio en el disco, Docker es más ligero, consume pocos recursos, arranca en segundos y usa el núcleo del sistema host.

Podríamos decir que: Docker es una especie de Máquina Virtual mejorada.

Preguntando a Grok, nos dice:

"Imagina que Docker es como una caja mágica. Dentro de esa caja, puedes poner todo lo que necesita un programa para funcionar, como sus juguetes y herramientas favoritas".

"Cuando cierras la caja, puedes llevarla a cualquier lugar, y al abrirla, el programa funcionará exactamente igual que en casa, sin importar dónde estés. Así que, con Docker, puedes mover programas de un lugar a otro sin que se rompan o se porten mal".

¿Qué es un contenedor?

Un contenedor en Docker es como una pequeña casa portátil para un programa.

"Imagina que tienes un juguete que necesita una casa especial para vivir. Esta casa tiene todo lo que necesita el juguete: su cama, su comida, y sus juegos".

"Cuando metes el juguete en su casa portátil, puedes llevarlo a cualquier parte, y siempre estará feliz porque tiene todo lo que necesita dentro de su casa. Así es un contenedor; es una casa pequeña y especial donde tu programa vive y puede funcionar en cualquier lugar al que lo lleves".

¿Dónde se guardan los contenedores?

Se almacenan repositorios, ya sean públicos y/o privados.

Un ejemplo es Docker Hub.

Los contenedores y las imágenes se almacenan dentro del sistema de archivos de la máquina virtual que Docker Desktop utiliza.

Se gestionan y organizan gracias al demonio (un programa que se ejecuta en segundo plano) de Docker.

Preguntando a Grok, nos dice:

"Los contenedores se guardan en un lugar especial en tu computadora, que podemos imaginar como un gran parque de juegos".

"Piensa en tu computadora como un parque enorme. En este parque, hay un área especial donde están todas las casitas de juguetes (los contenedores)". "Cuando no estás jugando con una casita, la dejas en este parque, donde está segura y lista para que la uses cuando quieras".

"Así que, los contenedores se guardan en una parte de tu computadora reservada solo para ellos, donde pueden esperar hasta que decidas usarlos de nuevo".

Un contenedor en Docker puede tener:

  • Imagen.
  • Volúmenes.
  •  Redes.

¿Qué es una Imagen?

Una imagen en Docker es como un libro de instrucciones para construir una casa de juguetes.

"Imagina que quieres construir una casa para tu juguete. Antes de empezar, necesitas un libro que te diga exactamente cómo hacer la casa, con todos los detalles: qué materiales usar, cómo poner las paredes, el techo, y hasta dónde irán las ventanas".

Una imagen en Docker es exactamente eso, pero para programas. Es un libro de instrucciones que tiene todo lo necesario para crear una casa portátil (un contenedor) para tu programa. Cada vez que quieras hacer una nueva casa igual, solo sigues las instrucciones del libro, y ¡listo! Tienes una nueva casa para tu programa.

Una imagen, por lo tanto, tendrá el sistema operativo base, las dependencias y todo lo que tu aplicación necesita para trabajar.

Instalando Erlang con Docker

Instalamos una imagen de Erlang con Docker:

$ docker pull erlang

Listamos la imagen descargada:

$ docker images -a

Ejecutamos el REPL de Erlang:

$ docker run -it --rm erlang

Creamos un programa en Erlang.

holamundo.erl

% Hola mundo en Erlang
-module(holamundo).
-export([main/1]).

main(_Args) ->
    io:format("Hola, mundo!!~n").

Para ejecutar un script de Erlang:

$ docker run -it --rm --name erlang-inst1 -v "$PWD":/usr/src/myapp -w /usr/src/myapp erlang escript holamundo.erl

Hemos visto lo que es Docker y un ejemplo de como descargar una imagen (de Erlang).

En próximas entregas continuaremos con el tema.

Enlaces:

https://codemonkeyjunior.wordpress.com/2020/09/06/docker-instalando-imagen-de-php/
https://alquimistadecodigo.blogspot.com/2021/06/docker-aclarando-cosas.html
https://hub.docker.com/_/php
https://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-virtual-machine

sábado, 4 de enero de 2025

Las leyes (no escritas) de la programación (2da parte)

Cuando empezamos en este mundo de la programación vamos sin rumbo definido, a ciegas muchas veces. No sabemos qué lenguaje de programación escoger, y por qué.

Nos dirán que Java es el mejor lenguaje. Otros dirán que mejor C#, Python o Javascript. Los más vetustos gritarán a los mil vientos que no hay mejor opción que C.

"En ese aprendes los tipos, las constantes, el control de flujo de un programa y las estructuras de datos. Anda, leé el libro de C".

Lenguajes como Fortran,Oberon, Modula, Lisp, Pascal, Smalltalk, Perl, etc. muy raras veces serán nombrados.

"Si quieres trabajar como programador, aprende COBOL".

"Si quieres trabajar como programador, aprende Java".

"Si quieres trabajar como programador, aprende PHP".

"Si quieres trabajar como programador, aprende Javascript".

El programador que ya trabaja como programador (sic) recordará esos consejos esbozando una sonrisa. Horas y horas practicando la programación en lenguajes que quizás ahora ya no usa. Es más, ya ni se acuerda de como hacer un "Hola, mundo". Consultando foros que ahora ya no existen o que están en desuso. Posteando preguntas en Stackoverflow, y quizás respondiendo algunas para probarse así mismo.

Encontrando tutoriales y libros PDF en sitios donde nadie más ha entrado. Libros de hace más de 5 o 10 años. Tutoriales que pueden o no estar completos.

Consultando Youtube para encontrar información valiosa que vale más que el oro. Frustrándose al tratar de replicar los programas que Hindues hacen en segundos. Tratándo de hallar el código del vídeo tutorial de Java de hace más de 5 o 6 años.

Al final, siempre volverá al principio de todo: a las bases de la programación.

"Si eres capaz de crear un buen algoritmo, entonces su conversión a cualquier lenguaje de programación será más sencillo".

Las bases, siempre fueron las bases. No aprender los 109181818 frameworks que abundan en el mundo de la programación.

"Si conoces las estructuras de control, siempre serás capaz de crear un orden lógico a tu programa".

"Si entiendes las estructuras de datos, te ahorrarás un montón de horas para ordenar tu información".

En conclusión, nunca olvidarse de las bases:

  1. El algoritmo antes que el programa.
  2. Estructuras de control. 
  3. Estructuras de datos.

Enlaces:

https://codemonkeyjunior.blogspot.com/2013/04/las-leyes-no-escritas-de-la-programacion.html

domingo, 29 de diciembre de 2024

Introduction to Algorithms (Curso en Inglés)

En está ocasión compartimos un curso gratuito sobre algoritmos.

Un algoritmo es una secuencia de pasos definidos para resolver un problema específico o para realizar una tarea particular. En informática son útiles para:

  • Crear programas computacionales que pueden ejecutar tareas complejas y repetitivas. 
  • Crear procesos que trabajen con grandes cantidades de datos. 
  • Optimizar tareas y mejorar rendimiento en sistemas. 
  • Etc.

Ejemplo. Crear un algoritmo en el que se solicita verificar si un archivo llamado "datos.dat" existe. Si no existe, indicar que el archivo no existe.

Algoritmo_Existe_Archivo

Inicio

    Definir ruta = "Fuentes/datos.dat"

    Si archivo_existe(ruta) entonces
        Abrir archivo(ruta)
    Sino
        Mostrar "El archivo datos.dat no existe en el directorio Fuentes."
    Fin Si

Fin

Características (ideales) que debe tener un algoritmo

  1. Debe ser claro, no ambiguo. 
  2. Finito, tener un número determinado de pasos. 
  3. Efectivo, debe funcionar, cada paso deber ser realizable con los recursos disponibles. 
  4. Tener una entrada, datos con que trabajar. 
  5. Tener al menos una salida, un resultado. 
  6. Determinista, para un conjunto dado de entradas, el algoritmo debe producir siempre el mismo resultado. 
  7. Cumplir con la Generalidad, debe ser lo suficientemente general para resolver no solo un caso específico, sino toda una clase de problemas similares. 
  8. Independiente del lenguaje, un algoritmo debería ser fácilmente implementado en cualquier lenguaje de programación. 
  9. Ser lo mínimo eficiente
  10. Debería ser modular, los algoritmos deben ser diseñados para ser modulares, permitiendo que partes del mismo puedan ser reutilizadas o combinadas con otros algoritmos para resolver problemas más complejos.

Puedes acceder al curso cobre algoritmos en el enlace.

¡Saludos!

Enlaces:

https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-spring-2020/pages/lecture-notes

sábado, 28 de diciembre de 2024

AWS: tipos de Computación en la nube (Cloud Computing)

Continuamos con esta serie sobre AWS (Amazon Web Services) que iniciamos en la anterior entrega:

AWS en un vistazo.

En ésta ocasión veremos los 3 tipos de computación en la nube.

Los 3 tipos de computación en la nube (cloud computing)

  1. Software as a Services (SaaS) o Software como servicio: programas como servicios. Un ejemplo, Gmail, Outlook, etc.
  2. Platform as a Service (PaaS) o Plataforma como servicio: un servicio que te permite crear, implementar y gestionar aplicaciones en la nube. Ejemplos, AWS Elastic Beanstalk, AWS Lambda, etc.
  3. Infrastructure as a Services (IaaS) o Infraestructura como servicio: servidores, centro de datos, edificios, etc.

Las principales empresas que ofrecen este tipo de servicios son:

  • Amazon con su AWS.
  • Microsoft con su Microsoft Azure.
  • Google con su Google Cloud Platform.

Quien parece llevar la delantera es AWS, mientras que Microsoft Azure y GCP pelean la 2da y 3era posición.

Como programador, ¿Qué podemos esperar de estos 3 tipos de computación en la nube?

Saas

No necesitas preocuparte por la instalación, mantenimiento o actualización del software; todo eso lo gestiona el proveedor. Puedes acceder a las aplicaciones desde cualquier dispositivo con conexión a Internet. Generalmente se paga por suscripción, lo que puede ser más económico que comprar software de escritorio. Menos control sobre la personalización y configuración del software.

Paas

Automatización del escalado de aplicaciones según la demanda. Facilidad para integrar con bases de datos, servicios de mensajería, y otros servicios de nube. Herramientas y servicios para el desarrollo, pruebas, entrega y administración de aplicaciones.

Iaas

Mayor control sobre el hardware virtualizado, permitiéndote configurar el entorno según tus necesidades específicas. Capacidad de aumentar o disminuir la infraestructura según sea necesario rápidamente.Responsabilidad sobre la gestión de sistemas operativos, aplicaciones, entornos de runtime, etc. Paga solo por los recursos que uses, lo cual puede llevar a ahorros significativos.

Nota: Al usar este tipo de servicio debemos entender que no somos los dueños, solo los clientes. Los pagos por usar estos servicios deberán ser administrados correctamente sino queremos llevarnos un buen susto.

Continuaremos con este tema en futuras entregas.

Enlaces:

https://awsnewbies.com/cloud-computing/

sábado, 21 de diciembre de 2024

Frameworks para programar en web con Python

Programar en cualquier lenguaje de programación siempre es tan sencillo como hallar la panacea universal. El programador muchas veces optará por que elegir una herramienta que le haga más sencilla la existencia.

Un framework, siendo esa su esencia primordial, contendrá lo necesario para hacer lo difícil un poco menos difícil. No resolverá en su totalidad todos los problemas, pero si hará que horas de esfuerzo tan solo tomen unos minutos.

Hoy presentamos una lista con los Frameworks para programar en web con Python y que serán de gran utilidad:

Los más completos

Los más conocidos y usados (Django y Flask) y otros no tan nuevos pero que no se pierde nada en dar un vistazo.

Asíncronos

Otros

Más información:

Hemos visto algunos de los frameworks para desarrollar en Web con Python. En próximas entregas continuaremos sobre el tema..

https://hackernoon.com/top-10-python-web-frameworks-to-learn-in-2018-b2ebab969d1a

domingo, 15 de diciembre de 2024

¿Qué es la computación en la nube? (vídeo en inglés)

En este vídeo del canal @amazonwebservices nos explican lo qué es la computación en la nube (cloud computing), enfocado a AWS (Amazon Web Services).