Buscar
  • Coordinador

Samurais vs Ninjas (kill y killall en acción)


A algunos de nosotros siempre nos ha fascinado todo lo relacionado con el lejano Oriente y más concretamente con Japón, sus reinos feudales y como no, los guerreros Samurai y sus eternos enemigos los misteriosos Ninja. En la actualidad, son los videojuegos, el Anime, los cómics y las películas de acción los que nos permiten (entre otros) seguir conociendo más sobre estas cuestiones.

(Leer más sobre Samurais y Ninjas)

Tomaremos la rivalidad entre Samurais y Ninjas como hilo conductor para plantear y resolver un ejercicio práctico basado en comandos de Shell bajo GNU/Linux y que será de aplicación directa sobre el #ProyectoHEIMDALL.

PLANTEAMIENTO:

De cara a la activación de los diferentes modos de iluminación exterior del casco HEIMDALL, tenemos varios scripts desarrollados en Python que lanzamos cada vez que queremos que se activen dichos modos: LIGHTMODE.py, OKMODE.py, COPMODE.py, WARNINGMODE.py, GASMODE.py, etc.

Como indicamos en una entrada anterior de este blog, cada uno corresponderá con una manera de iluminarse las LedStrip (tiras led) que hay dispuestas en diferentes posiciones del casco. Utilizando diferentes colores, cada modo activará dicha iluminación con diferentes patrones de encendido/apagado: pulsación, fijo, intermitente, etc.


Estos scripts Python son bucles infinitos que se ejecutan de manera contínua, en segundo plano, y son llamados desde un ShellScript Linux principal.

El problema reside en que cuando vamos a cambiar de modo de iluminación (bien de manera manual o automática según las lecturas de los sensores), hay que desactivar el modo que se encuentre activo en ese momento y lanzar el script correspondiente al nuevo modo de iluminación a activar. Si no tenemos la precaución de hacerlo así, los modos se solapan y entran en conflicto con lo que la iluminación exterior no funciona correctamente. Esto es lo que vamos a intentar resolver con este ejercicio.

SAMURAIS Y NINJAS A ESCENA...

Vamos a suponer que los scripts Python son guerreros SAMURAI, tantos como modos tenemos. Cuando le decimos a un SAMURAI que se active, obedecerá inmediatamente y se ejecutará fielmente.

Si llamamos a otro SAMURAI, el que esté en ejecución tiene que "desaparecer". Ahora es cuando hemos de crear al NINJA, al que le encomendaremos dicho "trabajito". Siempre, antes de que otro SAMURAI se ponga en funcionamiento, el NINJA ha de actuar.

¿Pillas la idea?

MAESTRO ¿Y CON QUÉ COMANDOS PUEDO HACER ESTO?

  1. Recuerda que los SAMURAI han de ejecutarse en segundo plano todos, lo conseguirás con & al final del comando con el que lanzas su script correspondiente.

  2. El comando ps aux te ayudará a conocer los procesos activos del sistema.

  3. El comando grep puede servirte para buscar por nombre de proceso activo. Piensa un poco cómo quieres buscar a los SAMURAIS (igual si le pones una parte común en el nombre a todos luego te podría ser útil).

  4. Los comandos kill y killall serán las "armas" de tu NINJA. Emplea con sabiduría cualquiera de ellas, puedes cambiar la "letalidad" de kill con las diferentes opciones que posee.

  5. La variable $?, la sentencia condicional if y los corchetes serán imprescindibles para saber si tu NINJA ha terminado su trabajo correctamente.

  6. Si usas kill para eliminar un proceso por su PID (Process ID), quizá necesites combinar los comandos ps aux, grep, tr y cut para capturarlo. Localiza el PID del proceso a eliminar y vuélcalo a una variable para poder lanzarle un kill adecuadamente.

¿CÓMO COMPROBAR SI FUNCIONA?

Para ello, puedes inventar varios SAMURAIs y lanzarlos en segundo plano. Bastaría con que fueran ShellScripts normales de GNU/Linux que ejecuten bucles infinitos o algo parecido. Si quieres crearlos con Python, tú mismo/a.

Una vez están andando, visualízalos con ps aux. Si no los ves, probablemente no has puesto en la primera línea de dichos scripts lo típico de #!/bin/bash.

Cuando los tengas a la vista, lanza tu NINJA a ver qué pasa. Puede ser que los elimine a todos de una sola tacada o que lo hayas configurado para que lo haga selectivamente (esto ya queda a tu criterio).

Si te funciona, ¡enhorabuena! ya va quedando menos.

PASAMOS A NODE-RED

Hasta aquí genial ¿no? no era demasiado difícil. Nos vamos ahora a #NodeRed en tu equipo (se supone que lo tienes instalado).

Si no lo tienes y quieres saber cómo hacerlo, te recomendamos que consultes en este blog el tutorial sobre cómo instalarlo y usarlo.

Accedemos a Node-red de tu Ubuntu o Raspberry Pi a través de la ip de tu equipo y el puerto 1880. (Ej: 192.168.1.75:1880) Se despliega el entorno de programación visual de Node-REd.

Es el momento de que apliques tus conocimientos sobre esta herramienta IoT y despliegues tu pensamiento computacional para conseguir un sistema que muestre varios botones a los que debes asociar un SAMURAI diferente. Cada vez que pulses un botón se lanzará tu NINJA para eliminar al SAMURAI activo en ese momento y se llamará al SAMURAI correspondiente. Añade también un botón para que no quede ningún SAMURAI en pié.

Puedes añadir en NodeRed cualquier tipo de elemento que muestre en el dashboard los resultados de tus acciones y si quedan o no SAMURAIS en el sistema.

Para acceder al dashboard debes poner algo como: 192.168.1.75:1880/ui

(cambia la ip por la de tu Ubuntu o Raspberry Pi y te redirigirá al dashboard diseñado)

FIN DE LA PELÍCULA DE ARTES MARCIALES

Si has conseguido que todo funcione bajo consola y en NodeRed, hemos avanzado un paso más hacia un funcionamiento y control adecuado de nuestro casco HEIMDALL. Lógicamente, habrá que perfilar y afinar más cuando interactuemos con la circuitería real del casco, pero también habrás podido desarrollar un ejercicio curioso basado en comandos de Shell y en el que habrás podido combinarlo con la interesante y potente herramienta NodeRed. Además, algo más habremos aprendido sobre Japón (por lo menos).

Gracias por tu atención y espero te haya resultado interesante.

Saludos

(sayonara さようなら)

#nijas #ninja #samurai #samurais #led #ledstrip #heimdall #shell #shellscript #python

0 vistas
This site was designed with the
.com
website builder. Create your website today.
Start Now