Que es un Bash Shell

Bash Shell Es un archivo de procesamiento por lotes, que por lo general es un archivo de texto plano. Es útil e interactivo entre el usuario y el sistema operativo. El ejecutable resultante no ha de ser compilado y por la tanto es legible por el usuario, y puede ser modificado, siempre y cuando tenga permisos habilitados sobre el archivo.

Esto aporta algunas ventajas:

  • Multiplataforma: al no ser binario, se pueden ejecutar en diversas plataformas sin modificaciones, lo que es una clara ventaja si queremos que el código funcione en cualquier sistema.
  • Portabilidad: si el intérprete está listo para una plataforma, entonces el script o lenguaje interpretado funcionará en dicha plataforma.

Sin embargo, estos lenguajes interpretados también tienen sus desventajas:

  • Una de ellas es el rendimiento, ya que necesitan del intérprete siempre ejecutándose en segundo plano para que funcione.
  • La propia dependencia del intérprete.

Cada línea contiene un comando, o instrucción y sus opciones, y una vez ejecutado pasará a la siguiente línea de ejecución. Pueden ser creados para realizar una serie de operaciones utilizando los comandos del sistema operativo. O como ejecutable de un lenguaje de programación interpretado, como puede ser Java, C#, JavaScript, Visual Basic .NET y VBScript, Perl, Python, Lips, Ruby, PHP, ASP, SQL etcétera 

El bosque sería muy triste

 

Rabindranath Tagore
El bosque sería muy triste si sólo cantaran los pájaros que mejor lo hacen.

Rabindranath Tagore
Rabindranath Tagore


Añadir botón apagado encendido Raspberry

Raspberry es un pequeño ordenador, de bajo coste que podemos utilizar como PC  de sobremesa o como servidor, sin necesidad de conectarle ningún periférico (pantalla, teclado, ratón). En este último caso, la labor de apagado solo es posible desconectando la corriente, con el consabido riesgo de pérdida de datos, y creamos archivos corruptos que impidan y/o dificulten su posterior encendido. También es posible que dañemos la tarjeta SD y debemos sustituirla o formatearla y volver a volcar el sistema operativos e instalar servicios que teníamos instalados y configurarlos otra vez.

Una forma de evitar este tedioso proceso es incluir un botón de apagado, que también nos será válido para volver a encenderlo si lo dejamos en stand-by.


Para ello utilizaremos el interfaz I/O del que dispone la Raspberry



El interfaz GPIO dispone de unos terminal macho numerados. Disponiendo las Raspberry en esta posición su disposición sera de izquierda a derecha y de arriba abajo empezando del 1 al 40


En nuestro caso utilizaremos los pines 4 y 6 donde colocaremos nuestro botón para realizar el apagado de nuestro pequeño ordenador. 

Realizaremos un pequeño bricolaje. La manera más sencilla sería con la utilización de dos cables que en una de sus puntas se encuentran una punteras hembras aisladas y en la otra punta de los cables soldar un pequeño pulsador. También podremos utilizar una placa de pruebas para, más adelante poder ampliar nuestros proyectos.


Dependendiendo del sistema operativo que utilicemos, es posible que tengamos que realizar la instalación de ciertas librerías para que los scripts de Python funcionen correctamente

sudo apt-get install python-is-python3

sudo apt-get -y install python3-rpi.gpio

Los siguientes scripts que manejan los eventos provocados por la pulsación del botón colocado entre el pin 5 y 6 han sido copiados de la página 

Soloelectronicos.com

 Crearemos un archivo ejecutable para Python que llamaremos listen-for-shutdown.py

sudo nano listen-for-shutdown.py

Copiaremos el siguiente script el archivo que hemos creado y guardaremos su contenido


#!/usr/bin/env python


import RPi.GPIO as GPIO

import subprocess



GPIO.setmode(GPIO.BCM)

GPIO.setup(3, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.wait_for_edge(3, GPIO.FALLING)


subprocess.call(['shutdown', '-h', 'now'], shell=False)

 

Seguidamente moveremos el archivo a la carpeta /usr/local/bin/

sudo mv listen-for-shutdown.py /usr/local/bin/

Y le daremos atributos de ejecución

sudo chmod +x /usr/local/bin/listen-for-shutdown.py

Si tenemos nuestra Raspberry en stand-by, bien por que la hemos apagado desde la línea de comandos o desde nuestro botón de apagado. También es posible encenderlo desde el mismo botón, para ello crearemos un nuevo archivo. 

sudo nano listen-for-shutdown.sh

Y copiaremos y guardaremos el siguiente código:


 #! /bin/sh


### BEGIN INIT INFO

# Provides:          listen-for-shutdown.py

# Required-Start:    $remote_fs $syslog

# Required-Stop:     $remote_fs $syslog

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

### END INIT INFO


# If you want a command to always run, put it here


# Carry out specific functions when asked to by the system

case "$1" in

  start)

    echo "Starting listen-for-shutdown.py"

    /usr/local/bin/listen-for-shutdown.py &

    ;;

  stop)

    echo "Stopping listen-for-shutdown.py"

    pkill -f /usr/local/bin/listen-for-shutdown.py

    ;;

  *)

    echo "Usage: /etc/init.d/listen-for-shutdown.sh {start|stop}"

    exit 1

    ;;

esac


exit 0

 

Una vez guardado moveremos el archivo a la carpeta  /etc/init.d/

sudo mv listen-for-shutdown.sh /etc/init.d/

Y le concederemos privilegios de ejecución:

 sudo chmod +x /etc/init.d/listen-for-shutdown.sh

Ahora registramos la secuencia de comandos para ejecutar en el arranque y le pasaremos el parámetros de arranque con los dos siguientes comandos.

sudo update-rc.d listen-for-shutdown.sh defaults

sudo /etc/init.d/listen-for-shutdown.sh start

En mi caso tenia instalado Ubuntu Server como sistema operativo. Y es posible que al ejecutar el script te aparezcan uno o varios mensajes de error. Si es asi te dejo los articulos que publique para solucionarlos, y que vuestro botón de apagado funcione correctamente.

Mensaje de error /usr/bin/env: ‘python’: No such file or directory

Mensaje de error import RPi.GPIO as GPIO ModuleNotFoundError: No module named 'RPi'


Algunas personas

Lev Nikoláievich Tolstói
Algunas personas pasan por nuestra vida para enseñarnos a no ser como ellas.



Lev Nikoláievich Tolstói
León Tolstói           

Mensaje de error import RPi.GPIO as GPIO ModuleNotFoundError: No module named 'RPi'

Continuando con la configuración para que funcione un botón de apagado para la Raspberry Pi2 conectado al al GPIO.

Al lanzar el ejecutable escrito en Python 3 se detiene en la linea en la que importa la RPi de la GPIO, el módulo no ha sido instalado.

import RPi.GPIO as GPIO ModuleNotFoundError: No module named 'RPi'

Para solucionarlo hay que instalar, o reinstalar el módulo python3-rpi.gpio

 sudo apt-get -y install python3-rpi.gpio

Mensaje de error /usr/bin/env: ‘python’: No such file or directory

Al intentar implementar un botón de apagado para la Raspberry Pi2 en el que tengo instalado Ubuntu Server, al lanzar el servicio de un ejecutable escrito para Python 3, me encontré con el siguiente error.

/usr/bin/env: ‘python’: No such file or directory

La solución encontrada ha sido realizando la instalación del paquete  python-is-python3

sudo apt-get install python-is-python3

 

Mensaje de error sudo: unable to resolve host ubuntu: Name or service not known

 En mi caso me ocurrió en una Raspberry en la que había instalado Ubuntu Server. Pero puede que les ocurra al invocar el comando sudo. No es problematico, por que el comando era ejecutado con privilegios de administrador, pero es molesto que cada vez realices una tarea, salga un mensaje de error



sudo: unable to resolve host ubuntu: Name or service not known

Para resolverlo basta con cerciorarse el nombre que le hemos dado a la máquina

 hostname

Y añadir una línea que falta en el archivo  /etc/hosts

sudo nano /etc/hosts

 


Justo debajo de  127.0.0.1 localhost añadiremos una nueva línea similar a la anterior pero con el nombre de nuestro hosts

127.0.0.1 nombre_del_hosts


 

 

 


Borrar los datos GPS de nuestras fotografías

Compartimos multitud de fotografías en redes sociales, por correo electrónico, o las publicamos en nuestro blog o página web personal. Y la vez compartimos la ubicación, o datos GPS de donde se han tomado esa fotografía. Si esa foto ha sido tomada en nuestra casa, estamos compartiendo donde se encuentra. Y la información que subimos en internet nunca se borra.

Al compartir las fotografías, compartimos una información visual y datos sobre cuándo y cómo fue tomada, en forma de etiquetas llamada Exif que puede contener:

  • Resolución
  • Tipo de archivo
  • Velocidad del obturador/tiempo de exposición/ISO
  • Rotación de imagen
  • Fecha/hora
  • Balance de blanco
  • Miniatura
  • Distancia focal
  • Flash
  • Objetivo
  • Tipo de archivo
  • Tipo de cámara
  • Software utilizado
  • Tiempo de grabación y, si es necesario, etiquetado GPS

Para borrar todos estos datos que no queremos compartir en público, utilizaremos el conjunto de herramientas ImageMagick para la manipulación de imágenes desde la linea de comandos.

En concreto utilizaremos el comando mogrify y para ello deberemos tener instalado previamente las aplicaciones contenidas en ImageMagick.

mogrify -strip mi_archivo_fotografico.jpg



ImageMagick, manipulación y conversión de imágenes

ImageMagick_logo
ImageMagick es un conjunto de herramientas de código abierto para la conversión y manipùlación de imágenes desde la línea de comandos. 
Está claro que trabajar en terminal es lo más antagonista a la imagen y/o a la fotografía. 
Pero en ciertas ocasiones no necesitamos ver la imagen para realizar los cambios, no disponemos de la potencia de procesamiento necesaria para lanzar ciertas aplicaciones, o el trabajo que vamos a realizar no necesita un programa que corra en un entorno gráfico:




  • Procesamientos por lote de varias imágenes.
  • Conversión de formato de una imagen, admite más de 200.
  • Crear un GIF con una secuencia de imágenes.
  • Encriptar o desencriptar una fotografía, que no queremos que sea vista por ciertas personas
  • Borrar los datos Exif  de una fotografía que vamos a compartir en redes sociales y no queremos que se sepa dónde la hemos obtenido.
  • Transformar: Cambiar el tamaño, rotar, escalar, recortar, voltear una imagen.
En su página web podemos descargar e instalar este conjunto de herramientas en diferentes sistemas.
La versión actual es ImageMagick 7.1.0-30. Se ejecuta. Linux, Windows, Mac Os X, iOS, Android y otros.
Para distribuciones basadas en Debian, estas aplicaciones se encuentran en sus repositorios y podemos instalarla con el comando:

sudo apt install sudo apt install imagemagick



¿Son impermeables mis gadgets?

Cuando era pequeño, siempre llegaba algún amigo dandonos envidia con su nuevo reloj. Y una de los datos que queríamos saber si se podía meter en el agua y a que profundidad le podrías sumergir. Cuando tu compañero te decía que aguanta 100 metros, consideramos que era una exageración. Más que nada porque no le veía a mi amigo bucear más de la profundidad que tendría una piscina, que podrían ser no más de tres metros.

El reloj de mi amigo ya es cosa del pasado y hemos dado el salto a los smartwatch que son capaces de además de darnos la hora, controlar nuestro pulso, pasos recorridos, distancia ... Y que les utilizamos en nuestras actividades deportivas, soportando humedad y polvo.

El grado de protección de un gadgets viene indicado por el anagrama IP Ingress Protection o Protección de penetración de agentes externos. Que capacidad tiene nuestro producto para impedir que agresiones externas penetren en el. A este anagrama le acompañan, por lo general dos números que indican el grado de protección que desarrollaremos más adelante.

En este caso en el embalaje del altavoz me está indicando que tiene una IP X7, que es resistente al agua, y que puedo usarlo en la playa , en la piscina o en la nieve. ¿Pero lo puedo sumergir en el agua? ¿O solo me aguanta el ambiente húmedo? ¿En el dibujo parece que lo puedo meter en el agua 😦?


Grado de protección del altavoz


El grado de protección IP hace referencia a la norma internacional CEI 60529 Degrees of Protection confeccionada por la IEC (Comisión Electrotécnica Internacional). Al realizar pruebas estandarizadas nos permiten conocer cuál es el grado de protección de nuestro accesorio, ante la penetración de partículas y líquidos en el mismo, y saber en qué ambiente podemos y no, utilizarlo si que se averíe.

IP _ _

El primer dígito, determina el grado de protección contra partículas. Entre un mínimo de 0, sin protección y 6 que es la máxima protección:

  • IP X_  No ha sido probado
  • IP 0_  Ninguna protección
  • IP 1_  Aparatos protegidos contra cuerpos sólidos de dimensiones superiores a 50mm
  • IP 2_  Aparatos protegidos contra cuerpos sólidos de dimensiones superiores a 12mm
  • IP 3_  Aparatos protegidos contra cuerpos sólidos de dimensiones superiores a 2,5mm
  • IP 4_  Aparatos protegidos contra cuerpos sólidos de dimensiones superiores a 1mm
  • IP 5_  Aparatos protegidos contra el polvo
  • IP 6_  Aparatos completamente protegidos contra el polvo

Retomando la protección de nuestro altavoz IPX7. No se le han realizado las pruebas de penetración de partículas. Es decir que si lo llevo a la playa es posible que se pueda llenar de arena y funcionar mal y/o dejar de hacerlo. 😱. Si lo llevo a la playa habrá que tener cuidado.