Blog

  • Automatizar la visibilidad de Puertos en tu Codespaces con un Script Bash

    Automatizar la visibilidad de Puertos en tu Codespaces con un Script Bash

    ¡Optimiza tu experiencia de desarrollo en Github Codespaces con una automatización inteligente! En este artículo, aprenderás cómo utilizar un script Bash para cambiar automáticamente la visibilidad de los puertos en tu entorno de Codespace. Esta práctica te permitirá ajustar fácilmente las configuraciones de los puertos y agilizar tu flujo de trabajo.

    Simplifica tu Configuración de Puertos en Codespace


    Cuando trabajas en proyectos de desarrollo, a menudo necesitas ajustar la visibilidad de los puertos en tu entorno de Codespace para permitir o restringir el acceso a servicios específicos. Con la ayuda de un script Bash y la potencia de la línea de comandos, puedes automatizar este proceso y ahorrar tiempo y esfuerzo.


    El script Bash que compartimos aquí te permitirá cambiar la visibilidad de los puertos en tu Codespace de manera sencilla y eficiente. Con solo unos pocos comandos, podrás configurar rápidamente los puertos para que sean visibles públicamente o mantenerlos privados según tus necesidades específicas.

    Configuración Automatizada de Puertos en Codespace


    Para empezar, crea un archivo de script Bash en el subdirectorio llamado .devcontainer en tu proyecto de Codespace (por ejemplo, change_port_visibility.sh). Dentro de este archivo, implementa la función change_port_visibility() que tomará el número del puerto y la visibilidad como parámetros.

    #!/bin/bash
    
    # Function to change port visibility
    change_port_visibility() {
      local port=$1
      local visibility=$2
      gh codespace ports visibility $port:$visibility -c $CODESPACE_NAME
    }
    
    # Usage: change_port_visibility <port> <visibility>
    change_port_visibility $1 $2


    Usando la CLI de GitHub (gh), puedes ejecutar el comando gh codespace ports visibility dentro de la función change_port_visibility() para cambiar la visibilidad del puerto especificado. Con esta implementación, puedes automatizar fácilmente el cambio de visibilidad de puertos en tu entorno de Codespace.

    En el archivo devcontainer.json, agregamos la siguiente propiedad: postAttachCommand e importante tambien, asegúrate de agregar github-cli

    {
    	"name": "My Awesome container",
    	"features": {
    		"github-cli": "latest"
    	},
    	
    	"forwardPorts": [
    		3000,
    		3001
    	],
    	"portsAttributes": {"3000": {"label": "Main app"}},
    	"postAttachCommand": "/bin/bash ./.devcontainer/change_port_visibility.sh 3000 public",
    	// Resto de configuraciones ...
    }

    Con estas configuraciones, el script change_port_visibility.sh se ejecutará automáticamente después de que se cree Codespace, actualizando la visibilidad del puerto según los argumentos especificados.

    Verificando la Configuración de Visibilidad de Puertos en Codespace

    Es posible que, al utilizar el script de automatización que compartimos previamente, notes que en la pestaña de puertos de tu entorno de Codespace el texto sigue mostrando «private» (privado) en lugar de «public» (público), a pesar de haber ejecutado con éxito el comando gh codespace ports visibility.

    No te preocupes, esto puede deberse a una discrepancia visual en la interfaz de usuario. Sin embargo, si ejecutas el comando gh codespace ports -c $CODESPACE_NAME, donde $CODESPACE_NAME es el nombre de tu Codespace, verás que el puerto en cuestión se muestra correctamente como «public» (público).

    Aunque la pestaña de puertos pueda mostrar «private» en lugar de «public», puedes tener la tranquilidad de que tu puerto se encuentra configurado como público y está accesible según lo esperado.

    Recuerda que la verificación de la configuración real de visibilidad de puertos se puede realizar ejecutando el comando gh codespace ports -c $CODESPACE_NAME en la terminal, el cual proporcionará información precisa y actualizada sobre el estado de tus puertos en Codespace.

    Personaliza y Utiliza el Script según tus Necesidades


    El script Bash proporcionado es un punto de partida, pero puedes personalizarlo para satisfacer tus necesidades específicas. Puedes agregar más funcionalidades, implementar una lógica adicional o incluso combinarlo con otras tareas de configuración.


    Automatizar la configuración de puertos en tu Codespace puede brindarte un flujo de trabajo más eficiente y simplificado. Con el script Bash presentado en este artículo, puedes cambiar fácilmente la visibilidad de los puertos y adaptar tu entorno de desarrollo a tus requisitos en cuestión de segundos.

    ¡Aprovecha esta poderosa automatización y lleva tu experiencia de desarrollo en Codespaces al siguiente nivel!

  • Creando Entornos Virtuales en Python 3: Uso del Módulo venv

    Creando Entornos Virtuales en Python 3: Uso del Módulo venv

    La programación en Python se basa en un ecosistema de paquetes y módulos. A veces, estos paquetes pueden tener dependencias de diferentes versiones, y eso puede generar problemas de compatibilidad. Aquí es donde los entornos virtuales son vitales, ya que proporcionan un espacio aislado para cada proyecto con sus propias dependencias. A partir de Python 3, la documentación oficial recomienda el uso del módulo venv para crear estos entornos virtuales.

    ¿Por qué usar venv?

    El módulo venv fue añadido en Python 3.3, pero no se recomendó su uso hasta Python 3.5. En Python 3.6, el uso de pyvenv (la herramienta recomendada para las versiones 3.3 y 3.4) se declaró obsoleto, y desde entonces, venv se ha convertido en la herramienta recomendada para la creación de entornos virtuales.

    La principal ventaja de venv es que permite crear entornos con diferentes versiones de Python, cada uno con sus propios paquetes instalados, lo que evita cualquier conflicto entre las dependencias de los proyectos.

    Creando un entorno virtual con venv

    Crear un entorno virtual con venv es sencillo. Aquí se muestra cómo hacerlo:

    python3 -m venv "my_env_name"

    Este comando crea un nuevo entorno virtual llamado «my_env_name».

    Si necesitas un entorno virtual con una versión específica de Python, puedes hacerlo de la siguiente manera:

    python3.10 -m venv "my_env_name"

    Este comando crea un entorno virtual usando Python 3.10.

    Conclusión

    Los entornos virtuales son una herramienta esencial en el kit de herramientas de todo programador de Python. Ayudan a mantener aisladas las dependencias de cada proyecto, evitando conflictos y asegurando que tu código funcione de manera consistente en diferentes máquinas. La herramienta venv facilita la creación de estos entornos y es la recomendada a partir de Python 3.5.

    Puedes consultar la documentación oficial de Python para obtener más información sobre venv.

    Recuerda, la mejor práctica es crear un nuevo entorno virtual para cada proyecto. ¡Así que adelante, empieza a usar venv y mantén tus proyectos de Python organizados y libres de conflictos!

    Referencias

    Python Software Foundation. «venv — Creation of virtual environments». Python 3.9.5 Documentation. Disponible en: https://docs.python.org/3/library/venv.html

  • Trabajando con Strings en Python: Inmutabilidad y Emojis

    Trabajando con Strings en Python: Inmutabilidad y Emojis

    Python es un lenguaje de programación increíblemente versátil y fácil de usar, y una de las características que lo hace tan atractivo es su manejo de las cadenas de texto, conocidas como Strings. En este post, vamos a hablar de dos aspectos importantes que debemos tener en cuenta al trabajar con Strings en Python: su inmutabilidad y la posibilidad de utilizar la codificación UTF-8. ¡Vamos allá!

    Los Strings son objetos inmutables

    Para empezar, es crucial entender que los Strings en Python son inmutables. Pero, ¿qué significa esto exactamente?

    Un objeto inmutable es aquel que no puede cambiar su estado o contenido una vez creado. Esto significa que, una vez que defines un String en Python, no puedes alterar sus caracteres individuales.

    Por ejemplo, vamos a definir un pequeño mensaje:

    msg = "Hola soy un pequeño mensaje"

    Si intentas cambiar algún carácter de este mensaje, Python te dará un error. Por ejemplo:

    msg[0] = "h"
    >>> TypeError: 'str' object does not support item assignment

    Al ejecutar este código, Python te dará un TypeError, diciendo que los objetos 'str' no admiten la asignación de elementos. En lugar de modificar los Strings, lo que Python hace es crear nuevos Strings cada vez que realizas una operación que altera el contenido.

    Codificación UTF-8 en Strings

    Otra característica impresionante de Python, a partir de su versión 3, es que permite el uso de la codificación UTF-8 en los Strings. Esto significa que podemos incluir caracteres especiales, acentos y símbolos de todo tipo en nuestros mensajes, ¡incluso emojis!

    msg_con_emoji = "Hola, soy un mensaje con emoji incluido 😎"
    print(msg_con_emoji)
    >>> Hola, soy un mensaje con emoji incluido 😎

    Al ejecutar este código, verás que Python maneja perfectamente el emoji, y lo imprime junto con el resto del mensaje.

    Este soporte de UTF-8 hace que Python sea aún más potente y flexible para el manejo de texto, y nos permite tener un poco más de diversión y creatividad en nuestros programas.

    Conclusión

    Así que ahí lo tienes: dos cosas clave que debes recordar sobre los Strings en Python. Son inmutables, lo que significa que no puedes cambiarlos una vez creados, pero en cambio, puedes utilizar la codificación UTF-8 para incluir todo tipo de caracteres y emojis.

    ¿No es genial cómo Python maneja los Strings? ¡Hasta la próxima! 😎

  • Explorando los Atributos de una Clase en Python: El Poder de dict

    Explorando los Atributos de una Clase en Python: El Poder de dict

    Python, con su diseño intuitivo y práctico, nos ofrece una gama de características que hacen que la programación sea una tarea más manejable y agradable. Una de estas características es la forma en que Python maneja los atributos de una clase. En este artículo, nos centraremos en el atributo especial __dict__ y cómo nos facilita la exploración y manipulación de los atributos de un objeto en tiempo de ejecución.

    ¿Qué es dict en Python?

    En Python, cada objeto tiene un atributo incorporado llamado __dict__. Este atributo es un diccionario que almacena todos los atributos definidos en una clase. Nos permite ver qué atributos posee un objeto y, lo que es más interesante, nos da la posibilidad de definir nuevos atributos en tiempo de ejecución.

    Vamos a explorar cómo funciona esto con un ejemplo.

    Uso de dict en la práctica

    Primero, definamos una clase simple llamada User:

    class User:
        def __init__(self, username, password):
            self.username = username
            self.password = password

    Aquí, User es una clase con dos atributos: username y password.

    Ahora, creemos un objeto de la clase User:

    user1 = User('IronMan', '000000')

    Podemos acceder al atributo __dict__ de user1 para ver sus atributos:

    print(user1.__dict__)

    Este código imprimirá:

    {'username': 'IronMan', 'password': '000000'}

    Pero, ¿qué pasa si queremos agregar un nuevo atributo en tiempo de ejecución? Bueno, __dict__ hace que eso sea muy fácil:

    user1.nuevo_attr = 'Este es un nuevo atributo'
    print(user1.__dict__)

    Ahora, __dict__ mostrará el nuevo atributo que acabamos de agregar:

    {'username': 'IronMan', 'password': '000000', 'nuevo_attr': 'Este es un nuevo atributo'}

    Conclusión

    El atributo __dict__ en Python es una herramienta potente y flexible que nos permite explorar y manipular los atributos de un objeto en tiempo de ejecución. Así que, la próxima vez que te encuentres trabajando con clases en Python, no olvides que tienes este útil recurso a tu disposición.

    Recuerda siempre seguir explorando y aprendiendo, ¡hasta la próxima! ⏰

  • Cómo obtener el valor más pequeño de un diccionario en Python

    Cómo obtener el valor más pequeño de un diccionario en Python

    En el mundo de la programación, a menudo nos encontramos trabajando con estructuras de datos complejas como los diccionarios. Los diccionarios son extremadamente útiles para almacenar y acceder a información relacionada de manera eficiente. En esta ocasión, te mostraremos cómo obtener el valor más pequeño de un diccionario en Python utilizando una función específica. Sigue leyendo para descubrir este útil tip.

    Python ofrece una función llamada min que nos permite encontrar el valor mínimo de una estructura de datos, ya sea una lista, tupla o incluso un diccionario. Siendo este último nuestro enfoque principal, vamos a explorar cómo podemos utilizar la función min para obtener el valor más pequeño de un diccionario y, además, conocer la llave asociada a dicho valor.

    Supongamos que tenemos el siguiente diccionario:

    d = {'a': 11, 'b': 2, 'c': 14, 'd': 2}

    Para encontrar la llave correspondiente al valor más pequeño, simplemente utilizamos la función min con el argumento key=d.get Veamos cómo se hace:

    d = {'a': 11, 'b': 2, 'c': 14, 'd': 2}
    print(min(d, key=d.get))
    >>> b

    En este ejemplo, al ejecutar el código, obtendremos como resultado la llave 'b'. Esto significa que el valor más pequeño en el diccionario es 2 y está asociado a la llave ‘b’.

    En resumen, hemos aprendido una técnica sencilla y poderosa para obtener el valor más pequeño de un diccionario en Python. Utilizando la función min junto con el argumento key=d.get, podemos obtener tanto el valor mínimo como la llave asociada en una sola línea de código. Esta es solo una muestra de la versatilidad y facilidad de uso que ofrece Python para trabajar con estructuras de datos complejas.

    ¡Ahora puedes aplicar este conocimiento en tus proyectos de programación y optimizar tus operaciones con diccionarios!

    Recuerda explorar más sobre las funciones y métodos disponibles en Python para seguir ampliando tus habilidades como programador. ¡No te detengas aquí y sigue aprendiendo!