• Configurar una Raspberry Pi como NAS con Open Media Vault

    Tenía por ahí una raspberry pi que no estaba haciendo mayor cosa, así que decidí armar un NAS pequeño, ya que en mi red de la casa tenía unas cuantas necesidades puntuales:

    • Necesitaba pasar archivos entre los computadores / teléfonos / tablets y era cansón usar un flash usb para eso
    • Tenía que ser de bajo consumo porque iba a estar operativo 24/7
    • Tenía que configurarse de manera sencilla (no ando con tiempo para estar trasteando con Samba y sus configuraciones)
    • Debe permitir compartir videos, películas y música en la red (para la TV principalmente). No voy a mencionar las fuentes de dicho contenido jeje

    Buscando un poco encontré que Open Media Vault cumple las necesidades. Para instalarla en la raspberry, necesitaremos primero descargar Raspbian Lite para tener una instalación básica del SO, y luego ejecutar los siguientes comandos:

    wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
    wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | sudo bash

    La instalación demora un poco, y al final nos pedirá configurar un usuario por defecto.

    Finalmente, recomiendo estos dos plugins:

    • openmediavault-sharerootfs para usar el mismo disco del SO para las carpetas compartidas
    • openmediavault-minidlna para compartir archivos multimedia en la red
  • Configurar la pantalla tactil de una netbook en ubuntu

    Al instalar Ubuntu en una netbook con touch screen, puede suceder que el sensor de posición no funcione correctamente. Para corregir esto se debe editar el archivo

    /etc/udev/hwdb.d/60-sensor.hwdb

    y agregar el siguiente codigo:

    sensor:modalias:*
      ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
  • Cómo unir todos los commits en una rama, antes de hacer un merge?

    Pues si usas GIT para el control de versiones de código, y Trunk Based Development como metodología, hay ocasiones en que tu rama puede llegar a tener un monton de commits pequeñitos relacionados con un feature específico (yo personalmente hago commit cada cambio chico jeje), así que en algunos casos es necesario hacer un squash de los cambios y e incluir todos los ajustes en un único commit.

    Si quieres hacerlo para todos los commits de una rama específica, puedes ejecutar los siguientes pasos:

    Nos pasamos a la rama principal, hacemos pull, y creamos una nueva rama temporal

    git checkout main 
    git pull 
    git checkout -b  rama_temporal main

    Obtenemos los cambios de nuestra rama de trabajo, y los unimos en un solo commit

    git merge --squash rama_de_trabajo

    En caso de que existieran conflictos, se deben corregir y hacer un commit de dichos cambios con:

    git commit

    Finalmente podemos hacer un reset en nuestra rama de trabajo, con la rama temporal creada previamente. Hacemos push de los cambios y si es necesario, borramos la rama temporal

    git checkout rama de trabajo 
    git reset --hard rama_temporal 
    git push -f 
    git branch -D rama_temporal

    Listo! eso es todo!

  • Cuadro de mandos para MS Flight Simulator

    Para mejorar la experiencia de vuelo en el Microsoft Flight Simulator, siempre será necesario tener el hardware adecuado. Un buen joystick no es suficiente ya que el throthle, mezcla, radio y opciones adicionales también pueden ser controladas por hardware externo al teclado.

    Para esto, les comparto un cuadro de mandos que diseñé y que utiliza un arduino pro micro (o leonardo) para implementar un dispositivo de juego HID con 4 botones, 4 switches, 3 controles analógicos (uno conectado a un switch multiposición), y un encoder rotatorio para controlar la rueda de trim del elevador. Todos completamente configurables desde el simulador, para controlar distindos mandos como freno, tren de aterrizaje, trim de alerones y cola, etc. La experiencia de vuelo mejora un 100% con este cuadro de mandos básico.

    La caja fue diseñada en FreeCad, y si alguien está interesado en los modelos STL, puede dejarme un comentario en el video.

    El código fuente se encuentra disponible en el repositorio https://github.com/patolin/arduino_fs_controls

  • Prueba tus API desde fuera de tu LAN

    Algunas veces he tenido que habilitar el acceso a un backend que se encuentra localmente aún en desarrollo para que pueda ser accedido por usuarios fuera de la red local, y esto se puede convertir en un problema ya que no siempre se tiene acceso al router, y a la posibilidad de abrir los puertos requeridos.

    Para solventar esto, se pueden usar cualquiera de estas 2 herramientas, para crear un tunel de datos habilitado con un dominio temporal, permitiendo probar las APIs desde fuera de tu red.

    https://localtunnel.github.io/www/

    Esta herramiente desarrollada en node.js permite tomar un puerto local y exponerlo en una url dinámica. Únicamente se requieren activar el servicio localmente y ejecutar lo siguiente:

    npm install -g localtunnel

    Para instalar la librería

    lt --port 8000

    Para exponer el servicio activo (en este caso en el puerto 8000) hacia el internet

    https://ngrok.com/

    Este servicio, funciona de manera similar al anterior, pero permite (mediante pago) agilitar el deployment de sistemas backend manejando toda la seguridad, balanceadores de carga y demás.

    Tiene un tier free que puede ser usado para temas de desarrollo y pruebas sencillas

  • Final de la Copa LRP en Cuenca

    Les dejo unos videos de las mangas finales, de la Copa LRP en Cuenca, Ecuador

    Novatos

    Intermedios

    Expertos

  • Conexión de un receptor RC al computador, emulando Joystick USB

    Pues un hack rápido.

    Quería conectar mi transmisor de RC al computador, para poder usar los simuladores de radio control, especialmente el VRC Pro, usando los componentes que tenía a la mano.

    Tenía una placa Digispark, que usa un micro ATTINY85 emulando un dispositivo Joystick HID. Conectándolo al receptor RC podemos usar la pistola del transmisor, como un joystick en el computador (inalámbrico!) y usarlo dentro del simulador.

    El código fuente, y el esquema de conexión , se encuentran en mi repositorio de github https://github.com/patolin/rc-receiver-joystick

     

  • Cómo convertir (miles de) archivos pdf a escala de gris, con un solo comando

    Existen ocasiones en las que debemos automatizar tareas en nuestras labores diarias, y me ocurrió que debía convertir cerca de 4000 archivos PDF de color a escala de gris.

    Utilizando bash (bajo linux, o utilizando la interfaz de Linux que provee Windows 10), podemos crear un par de scripts que nos ayuden a automatizar esta tarea.

    Primero debemos crear en la carpeta donde tengamos almacenados los PDFs, un archivo que se va a llamar «conviertegris.sh» que contendrá el siguiente código:

    #!/bin/bash
    gs -sOutputFile=pdfgris.pdf -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray -dCompatibiltyLevel=1.4 -dNOPAUSE -dBATCH $@
    

    y luego le daremos permisos de ejecución mediante el siguiente comando en la consola

    chmod +x conviertegris.sh
    

    Si tuvieramos un solo archivo PDF que quisieramos convertirlo a escala de gris. podríamos utilizar el script de la siguiente manera:

    ./conviertegris.sh miPDFaColor.pdf
    

    y esto nos generará un nuevo archivo pdf llamado pdfgris.pdf que contendrá la versión en gris de nuestro archivo original.

    Ahora, para automatizar este proceso para todos nuestros PDFs, vamos a crear otro script que se va a llamar «conviertelote.sh», que contendrá el siguiente código:

    #!/bin/bash
    find ./ -name "*.pdf" | sed 's|./||' > listapdf.txt
    mkdir pdfgris
    for file in $( < list .txt); do ./conviertegris.sh "$file"; mv pdfgris.pdf ./pdfgris/"$file"; done
    rm listapdf.txt
    

    Al ejecutar este script mediante el comando bash conviertelote.sh, empezaremos a ver que el proceso arranca y dentro de la carpeta pdfgris empezaremos a ver nuestros archivos convertidos.

    Con esto, y luego de un par de horas, habremos terminado la tarea, sin tener que pasar por el suplicio de abrir cada archivo en un editor de PDFs y guardarlos en escala de gris, ahorrándonos muchisimo tiempo y trabajo.