From 0446044f3c4dd7502ed685de80a563cc67b86f8b Mon Sep 17 00:00:00 2001 From: Kaia-Alenia Date: Fri, 31 Jul 2026 21:12:30 -0600 Subject: [PATCH 1/4] Completar retos del Modulo 11 - Kaia / Alenia Studios --- .../101-cli-start/mi_reto.py | 19 +++++++++ .../102-cli-monitor/mi_trafico.py | 14 +++++++ .../103-configuracion-externa/mi_mudanza.py | 8 ++++ .../103-configuracion-externa/nerve.config | 4 ++ .../105-empaquetado-basico/reto.py | 27 +++++++++++++ .../106-criptografia-nrv/reto.py | 10 +++++ .../107-desempaquetado-nrv/reto.py | 32 +++++++++++++++ .../108-interfaz-nrv/reto.py | 10 +++++ .../109-generacion-pass/reto.py | 39 +++++++++++++++++++ .../110-asociacion-archivos/desinstalador.py | 12 ++++++ 10 files changed, 175 insertions(+) create mode 100644 python/Modulo-11-Herramientas-Nerve/101-cli-start/mi_reto.py create mode 100644 python/Modulo-11-Herramientas-Nerve/102-cli-monitor/mi_trafico.py create mode 100644 python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/mi_mudanza.py create mode 100644 python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/nerve.config create mode 100644 python/Modulo-11-Herramientas-Nerve/105-empaquetado-basico/reto.py create mode 100644 python/Modulo-11-Herramientas-Nerve/106-criptografia-nrv/reto.py create mode 100644 python/Modulo-11-Herramientas-Nerve/107-desempaquetado-nrv/reto.py create mode 100644 python/Modulo-11-Herramientas-Nerve/108-interfaz-nrv/reto.py create mode 100644 python/Modulo-11-Herramientas-Nerve/109-generacion-pass/reto.py create mode 100644 python/Modulo-11-Herramientas-Nerve/110-asociacion-archivos/desinstalador.py diff --git a/python/Modulo-11-Herramientas-Nerve/101-cli-start/mi_reto.py b/python/Modulo-11-Herramientas-Nerve/101-cli-start/mi_reto.py new file mode 100644 index 0000000..1ce73ef --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/101-cli-start/mi_reto.py @@ -0,0 +1,19 @@ +import time +from nerve import NexusClient + +# Se conecta a la red con el nombre "estudiante_curioso" +emisor = NexusClient() + +try: + emisor.connect("estudiante_curioso") + + # Utilizar un bucle while para enviar 10 mensajes + i = 1 + while i <= 10: + mensaje = {"mensaje": "Hola Hub", "numero_de_intento": i} + emisor.send("servidor_central", mensaje) + time.sleep(2) + i += 1 + +except ConnectionRefusedError: + pass diff --git a/python/Modulo-11-Herramientas-Nerve/102-cli-monitor/mi_trafico.py b/python/Modulo-11-Herramientas-Nerve/102-cli-monitor/mi_trafico.py new file mode 100644 index 0000000..cdabf76 --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/102-cli-monitor/mi_trafico.py @@ -0,0 +1,14 @@ +import time +from nerve import NexusClient + +# Conectarse a Nerve bajo el nombre "robot_mascota" +robot = NexusClient() +robot.connect("robot_mascota") + +# Bucle for que envíe 10,000 mensajes sin parar al destino "caja_de_arena" +for i in range(10000): + paquete = {"ping": 1} + robot.send("caja_de_arena", paquete) + +# Una vez termine el bucle de 10,000, dormir por 15 segundos +time.sleep(15) diff --git a/python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/mi_mudanza.py b/python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/mi_mudanza.py new file mode 100644 index 0000000..046dbb5 --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/mi_mudanza.py @@ -0,0 +1,8 @@ +from nerve import NexusClient + +# Crear un cliente Nerve (lee nerve.config automáticamente) +cliente = NexusClient() +cliente.connect("caja_fuerte") + +# Enviar mensaje a yo_mismo +cliente.send("yo_mismo", {"mensaje": "¡Llegamos a la nueva casa!"}) diff --git a/python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/nerve.config b/python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/nerve.config new file mode 100644 index 0000000..463683e --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/nerve.config @@ -0,0 +1,4 @@ +{ + "port": 11111, + "host": "127.0.0.1" +} diff --git a/python/Modulo-11-Herramientas-Nerve/105-empaquetado-basico/reto.py b/python/Modulo-11-Herramientas-Nerve/105-empaquetado-basico/reto.py new file mode 100644 index 0000000..fcbd07f --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/105-empaquetado-basico/reto.py @@ -0,0 +1,27 @@ +import os + +print("Preparando la misión...") +# 1. Crear carpeta mision +os.makedirs("mision", exist_ok=True) + +# 2. Crear coordenadas.txt con el texto "Latitud 40, Longitud -3" +with open("mision/coordenadas.txt", "w") as f: + f.write("Latitud 40, Longitud -3") + +print("Carpeta creada.") + +# 3. Empacar con Nerve usando la clave "agente007" +print("Empacando con Nerve...") +clave = "agente007" +origen = "mision" +caja_fuerte = "paquete_seguro.nrv" +comando_pack = f'NERVE_NRV_PASSWORD="{clave}" nerve pack {origen} {caja_fuerte}' +os.system(comando_pack) + +# 4. Desempacar en la base base_aliada +print("Desempacando en la base...") +destino = "base_aliada" +comando_unpack = f'NERVE_NRV_PASSWORD="{clave}" nerve unpack {caja_fuerte} {destino}' +os.system(comando_unpack) + +print("Misión completada.") diff --git a/python/Modulo-11-Herramientas-Nerve/106-criptografia-nrv/reto.py b/python/Modulo-11-Herramientas-Nerve/106-criptografia-nrv/reto.py new file mode 100644 index 0000000..722bd98 --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/106-criptografia-nrv/reto.py @@ -0,0 +1,10 @@ +import os + +print("¡Bienvenido a la Forja de Llaves!") +print("Generando llave de símbolos...") +os.system("nerve genpass --mode random") + +print("--------------------------------") + +print("Generando frase secreta fácil de recordar...") +os.system("nerve genpass --mode passphrase") diff --git a/python/Modulo-11-Herramientas-Nerve/107-desempaquetado-nrv/reto.py b/python/Modulo-11-Herramientas-Nerve/107-desempaquetado-nrv/reto.py new file mode 100644 index 0000000..597f364 --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/107-desempaquetado-nrv/reto.py @@ -0,0 +1,32 @@ +import os + +print("Preparando tu regalo...") +# 1. Crear carpeta regalo +os.makedirs("regalo", exist_ok=True) + +# 2. Crear mensaje.txt +with open("regalo/mensaje.txt", "w") as f: + f.write("¡Feliz Cumpleaños!") + +# 3. Empacar con nerve +clave = "pastel" +os.system(f'NERVE_NRV_PASSWORD="{clave}" nerve pack regalo regalo_seguro.nrv') + +print("¡Regalo envuelto en regalo_seguro.nrv!") + +# 4. Borrar la carpeta original regalo +os.system("rm -rf regalo") + +# 5. Imprimir mensaje +print("Amigo, ¡es hora de abrir tu regalo! Por favor escribe la contraseña.") + +# 6. nerve open regalo_seguro.nrv (pedira la clave interactivamente) +os.system("nerve open regalo_seguro.nrv") + +print("¡Felicidades, regalo abierto!") + +# 7. Desasociar +print("Limpiando configuración (desasociando)...") +os.system("nerve unassociate") + +print("Terminado.") diff --git a/python/Modulo-11-Herramientas-Nerve/108-interfaz-nrv/reto.py b/python/Modulo-11-Herramientas-Nerve/108-interfaz-nrv/reto.py new file mode 100644 index 0000000..29bf697 --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/108-interfaz-nrv/reto.py @@ -0,0 +1,10 @@ +import os + +print("Iniciando Centro de Comando Local...") +print("Para salir de este modo y volver a casa, presione Ctrl + C") + +# Ejecutar el comando nerve monitor +os.system("nerve monitor") + +# Línea final impresa tras salir con Ctrl + C +print("Centro de comando cerrado. Buen trabajo.") diff --git a/python/Modulo-11-Herramientas-Nerve/109-generacion-pass/reto.py b/python/Modulo-11-Herramientas-Nerve/109-generacion-pass/reto.py new file mode 100644 index 0000000..bd6c257 --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/109-generacion-pass/reto.py @@ -0,0 +1,39 @@ +import os +import re + +print("Iniciando fábrica...") + +# 1. Atrapamos el output de nerve genpass --mode random +output = os.popen("nerve genpass --mode random").read().strip() + +# Removemos códigos de escape ANSI +ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])') +clean_output = ansi_escape.sub('', output) + +# Extraemos la contraseña limpia +llave = "" +for line in clean_output.split("\n"): + if line.startswith("Password:"): + llave = line.split(":", 1)[1].strip() + break + +# 2. Imprimirla en pantalla +print(f"La llave de hoy es: {llave}") + +# 3. Crear carpeta produccion y poner un archivo adentro +os.system("mkdir -p produccion") +os.system("echo 'Contenido de produccion' > produccion/reporte.txt") +print("Carpeta creada.") + +# Configuramos la variable de entorno de forma segura en Python +os.environ["NERVE_NRV_PASSWORD"] = llave + +# 4. Empacar la carpeta produccion en producto_final.nrv +print("Empacando producto...") +os.system("nerve pack produccion producto_final.nrv") + +# 5. Desempaca en control_calidad +print("Desempacando para control de calidad...") +os.system("nerve unpack producto_final.nrv control_calidad") + +print("¡Todo funciona perfectamente!") diff --git a/python/Modulo-11-Herramientas-Nerve/110-asociacion-archivos/desinstalador.py b/python/Modulo-11-Herramientas-Nerve/110-asociacion-archivos/desinstalador.py new file mode 100644 index 0000000..a3d02ca --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/110-asociacion-archivos/desinstalador.py @@ -0,0 +1,12 @@ +import os + +print("--- Iniciando el Desinstalador ---") +print("Eliminando configuración de Nerve...") + +# Ejecutar nerve unassociate +os.system("nerve unassociate") + +# Borrar el archivo de prueba si existe +os.system("rm -f mi_caja_fuerte_de_prueba.nrv") + +print("¡Limpieza completada! Gracias por usar nuestro software.") From 303f12a807c58b674aed346330ec6efb4f67f5ba Mon Sep 17 00:00:00 2001 From: Kaia-Alenia Date: Fri, 31 Jul 2026 21:13:59 -0600 Subject: [PATCH 2/4] Completar modulo 104-cli-bridge - Kaia / Alenia Studios --- .../104-cli-bridge/reto.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 python/Modulo-11-Herramientas-Nerve/104-cli-bridge/reto.py diff --git a/python/Modulo-11-Herramientas-Nerve/104-cli-bridge/reto.py b/python/Modulo-11-Herramientas-Nerve/104-cli-bridge/reto.py new file mode 100644 index 0000000..e8b0222 --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/104-cli-bridge/reto.py @@ -0,0 +1,24 @@ +import time +from nerve import NexusClient + +# Client that listens for messages crossing the bridge +client = NexusClient() + +try: + print("Bridge client trying to connect...") + client.connect("cliente_puente") + print("Connection successful.") + + def on_message_received(data): + print(f"Message received via bridge: {data}") + + # Listen for incoming messages + client.listen(on_message_received) + print("Listening for messages. Press Ctrl+C to exit.") + + while True: + time.sleep(1) + +except ConnectionRefusedError: + print("Error: Could not connect to the Hub.") + print("Make sure 'nerve start' is running.") From f3d96a8380a1ca86dd9b8806d6adc21098cefa4d Mon Sep 17 00:00:00 2001 From: Kaia-Alenia Date: Fri, 31 Jul 2026 21:17:03 -0600 Subject: [PATCH 3/4] Corregir nombres de archivos de reto a reto.py - Kaia / Alenia Studios --- .../101-cli-start/reto.py | 19 +++++++++++++++++++ .../102-cli-monitor/reto.py | 14 ++++++++++++++ .../103-configuracion-externa/reto.py | 8 ++++++++ .../110-asociacion-archivos/reto.py | 12 ++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 python/Modulo-11-Herramientas-Nerve/101-cli-start/reto.py create mode 100644 python/Modulo-11-Herramientas-Nerve/102-cli-monitor/reto.py create mode 100644 python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/reto.py create mode 100644 python/Modulo-11-Herramientas-Nerve/110-asociacion-archivos/reto.py diff --git a/python/Modulo-11-Herramientas-Nerve/101-cli-start/reto.py b/python/Modulo-11-Herramientas-Nerve/101-cli-start/reto.py new file mode 100644 index 0000000..1ce73ef --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/101-cli-start/reto.py @@ -0,0 +1,19 @@ +import time +from nerve import NexusClient + +# Se conecta a la red con el nombre "estudiante_curioso" +emisor = NexusClient() + +try: + emisor.connect("estudiante_curioso") + + # Utilizar un bucle while para enviar 10 mensajes + i = 1 + while i <= 10: + mensaje = {"mensaje": "Hola Hub", "numero_de_intento": i} + emisor.send("servidor_central", mensaje) + time.sleep(2) + i += 1 + +except ConnectionRefusedError: + pass diff --git a/python/Modulo-11-Herramientas-Nerve/102-cli-monitor/reto.py b/python/Modulo-11-Herramientas-Nerve/102-cli-monitor/reto.py new file mode 100644 index 0000000..cdabf76 --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/102-cli-monitor/reto.py @@ -0,0 +1,14 @@ +import time +from nerve import NexusClient + +# Conectarse a Nerve bajo el nombre "robot_mascota" +robot = NexusClient() +robot.connect("robot_mascota") + +# Bucle for que envíe 10,000 mensajes sin parar al destino "caja_de_arena" +for i in range(10000): + paquete = {"ping": 1} + robot.send("caja_de_arena", paquete) + +# Una vez termine el bucle de 10,000, dormir por 15 segundos +time.sleep(15) diff --git a/python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/reto.py b/python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/reto.py new file mode 100644 index 0000000..046dbb5 --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/103-configuracion-externa/reto.py @@ -0,0 +1,8 @@ +from nerve import NexusClient + +# Crear un cliente Nerve (lee nerve.config automáticamente) +cliente = NexusClient() +cliente.connect("caja_fuerte") + +# Enviar mensaje a yo_mismo +cliente.send("yo_mismo", {"mensaje": "¡Llegamos a la nueva casa!"}) diff --git a/python/Modulo-11-Herramientas-Nerve/110-asociacion-archivos/reto.py b/python/Modulo-11-Herramientas-Nerve/110-asociacion-archivos/reto.py new file mode 100644 index 0000000..a3d02ca --- /dev/null +++ b/python/Modulo-11-Herramientas-Nerve/110-asociacion-archivos/reto.py @@ -0,0 +1,12 @@ +import os + +print("--- Iniciando el Desinstalador ---") +print("Eliminando configuración de Nerve...") + +# Ejecutar nerve unassociate +os.system("nerve unassociate") + +# Borrar el archivo de prueba si existe +os.system("rm -f mi_caja_fuerte_de_prueba.nrv") + +print("¡Limpieza completada! Gracias por usar nuestro software.") From 157a027fa172d3e7e3dfe3322c8c0dd363354e69 Mon Sep 17 00:00:00 2001 From: Kaia-Alenia Date: Fri, 31 Jul 2026 21:26:59 -0600 Subject: [PATCH 4/4] feat(modulo-11): add solution for 104-cli-bridge --- .../104-cli-bridge/reto.py | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/python/Modulo-11-Herramientas-Nerve/104-cli-bridge/reto.py b/python/Modulo-11-Herramientas-Nerve/104-cli-bridge/reto.py index e8b0222..4eab923 100644 --- a/python/Modulo-11-Herramientas-Nerve/104-cli-bridge/reto.py +++ b/python/Modulo-11-Herramientas-Nerve/104-cli-bridge/reto.py @@ -1,24 +1,20 @@ import time from nerve import NexusClient -# Client that listens for messages crossing the bridge -client = NexusClient() +# 2. Crea una instancia de NexusClient llamada trabajador +trabajador = NexusClient() -try: - print("Bridge client trying to connect...") - client.connect("cliente_puente") - print("Connection successful.") +# 3. Conecta al trabajador a la red de Nerve bajo el nombre "procesador_web" +trabajador.connect("procesador_web") - def on_message_received(data): - print(f"Message received via bridge: {data}") +# 4. Define una función callback llamada procesar_datos +def procesar_datos(datos): + print("¡Mensaje recibido del puente web!") + print(f"Contenido: {datos}") - # Listen for incoming messages - client.listen(on_message_received) - print("Listening for messages. Press Ctrl+C to exit.") +# 5. Registra el callback +trabajador.listen(procesar_datos) - while True: - time.sleep(1) - -except ConnectionRefusedError: - print("Error: Could not connect to the Hub.") - print("Make sure 'nerve start' is running.") +# 6. Crea un bucle infinito +while True: + time.sleep(1)