sábado, 19 de diciembre de 2020

Temp2LCD (Gambas + Arduino)

Como muestra el video se trata de una pequeña aplicación hecha en Gambas y un sketch para el Arduino.

Para este ejemplo estaré usando un Arduino UNO.

La aplicación transmite las temperaturas del CPU y el GPU hacia el Arduino vía el puerto USB.
Para que funcione correctamente es necesario tener instalado lm-sensors y nvidia-smi.

Por el momento la aplicación solo funciona con tarjetas NVIDIA.

Para obtener la temperatura del CPU la aplicación utiliza un script que encontré en https://stackoverflow.com/questions/50686262/how-to-get-average-cpu-temperature-from-bash.
Lo interesante del script es que devuelve un promedio de temperatura de todos los cores disponibles. Alteré levente el script para que solo devuelva el valor numérico y la unidad en grados celsius.
Hay muchos comentarios en el código fuente del programa por si les interesa ver como funciona paso a paso.
Respecto del sketch del Arduino, es bastante sencillo. Recibe la información enviada por la aplicación y la muestra en un display LCD (16x2) conectado de la siguente manera:

LCD PIN Arduino
VCC 5V
GND GND
SCL A5
SDA A4

También hay conectado un LED en el Pin 13 (recuerden que este pin ya cuenta con una resistencia). Se puede prescindir del mismo. El led se enciende cada vez que se produce el evento Serial.available(), por lo que se encenderá cuando reciba o envíe información.
El sketch también reenvía los datos recibidos a la aplicación. Me fué bastante útil esto para observar como era transmitida la información, por eso lo dejé.
Tuve al algunos problemas al principio, la información no llegaba correctamente al Arduino y los ejemplos que encontraba en internet no eran de mucha utilidad.
Leyendo algunas entradas en el el sitio de Arduino me pareció que la solución más sencilla era enviar desde la aplicación toda la información seguida de la cadena ‘\n’ y recibir la información en el Arduino utilizando el evento Serial.readStringUntil(‘\n’).

Espero que tanto la aplicación y el stetch les sirvan de ejemplo si están investigando o quieren observan como es la comunicación entre el Arduino y la PC.
Seguramente estaré haciendo más aplicaciones parecidas probando a la inversa (recibir información del Arduino).

Dejo el link al repositorio de GitHub para bajar el instalador en formato debian, el código fuente del programa y el sketch para Arduino:
https://github.com/mcattani/temp2lcd

Saludos y si les interesó por favor dejen un comentario!.

martes, 8 de diciembre de 2020

RamDrive

 

En esta oportunidad les presento una pequeña APP que hice para poder crear unidades con memoria RAM (o RAM DRIVES).
Trabajar con estas unidades tiene sus ventajas y desventajas.

  1. La unidad solo puede almacenar información durante la sesión en curso. Si se apaga o reinicia el sistema, toda la información de la misma se borrará.
  2. La velocidad de lecto/escritura de la RAM es muchísimo mas alta que la del disco (incluidas unidades USB y discos SSD).

Normalmente estas unidades se crean mas o menos así:

mkdir /RUTA/CARPETA ( ej. /mnt/ramdisk)
mount -t [TYPE] -o size=[SIZE] [FSTYPE] [MOUNTPOINT]

Existen dos tipos de unidades.

  • ramfs
  • tmps

No voy a explicar las diferencias entre una y otra. Para el que le interese acá hay una una buena explicación de las diferencias. El programa usa por defecto tmps.

Esta pequeña APP permite crear este tipo de unidades; asignándoles tamaño y montándolas.

Estas unidades son muy útiles para realizar ciertos trabajos “pesados”, si cuentan con una buena cantidad de memoria RAM, prueben compilar un kernel alojado en una de estas unidades, ahí se va a notar mucho la diferencia de velocidad. Lo mismo si tienen que encodear un video, por ej.

Uno de los usos típicos que aparecen en internet es la de crear una de esta unidades y utilizarlas para almacenar el caché del navegador que estemos usando. De esa manera, con cada reinicio se limpia el caché y segundo, la “velocidad de navegación aumenta“, dado que tenemos guardadas la caché en una unidad de acceso veloz.

Vale la pena probar.

Link al repositorio de GitHub: https://github.com/mcattani/ramdrive

saludos!

lunes, 30 de noviembre de 2020

Menú simple con 3 leds y LCD en Arduino

 



Como se puede ver en el video este fue un intento de crear un menú muy básico en Arduino (utilizando un Arduino Uno) con un par de botones push, tres leds y una pantalla lcd 16x2 con interfaz I2C.

Estuve buscando varios tutoriales sobre cómo crear menús pero me parecieron un poco confusos (también me encontré un par de librerías interesantes para crear menús que espero subir en un futuro próximo). Así que al final me decidí a probar algo muy básico desde 0. Seguro que el código se puede optimizar mucho más :) (no soy buen programador, lo sé!) pero funciona!.

Las conexiones son las siguientes:

Para los leds:

Led Verde Pin 5
Led Rojo Pin 6
Led Azul Pin 7

Los ánodos (las patas largas) están conectadas a los pines arriba descritos y los cátodos a tierra (gnd) con sus respectivas resistencias de 220Ω.

En relación a los botones push, una línea de las patitas está conectada a la línea de 5V y la otra a los pines 2 y 3 con sus respectivas resistencias de 10KΩ.

El LCD:

GND GND/Tierra
VCC 5V
SCL A5
SDA A4

Antes de dejar el sketch aclaro que la lógica que seguí fue la siguiente: el menú está basado en la posición del cursor, una variable que se modifica al presionar uno de los botones y tiene tres valores: 0, 1 y 2; que corresponden a los tres colores de los leds. Según el valor se llama a las funciones que reescriben la salida del LCD modificando la posición del cursor > que indica el LED seleccionado.
Lo mismo al presionar el segundo botón, se lee el valor de la posición del cursor y según este se enciende el led correspondiente.

Como se ve, es una solución bastante sencilla para un menú de opciones sencillo, que se puede ampliar agregando posiciones al cursor y reescribiendo la salida del LCD.

Por favor si les interesó este post, o tienen críticas / dudas, dejá un comentario!

Saludos!

Les dejo el link del sketch a continuación:
https://gist.github.com/mcattani/31250d6f0daf509c0b3b7da4535b0708 

martes, 24 de noviembre de 2020

Nueva Versión del GUI para ClamAv!

ClamAV
Imagen

En un post anterior publiqué una interfaz gráfica para ClamAV hecho en Gambas.

ClamAV es poderoso antivirus open source que detecta: troyanos, virus, malware y otros amenazas.

ClamAV® is an open source antivirus engine for detecting trojans, viruses, malware & other malicious threats.

El gui publicado fue descargado por Pil Valaquarus (valaquarus@gmail.com) quien le ha realizado bastantes agregados y correcciones.

La nueva versión presenta:

  • Traducción al idioma francés e inglés.
  • Posibilidad para ver/rastaurar archivos infectados (puestos en cuarentena).
  • Ahora el proceso puede terminarse y se cierra correctamente el terminar el programa.
  • Mejoras varias al código.
  • Menú de freshclam para el tratamiento de las actualizaciones de la base de datos de virus.
  • Opción de impresión de los logs.
  • y más…! (ver changelog)

Dejo aquí el link al repositorio del proyecto en GitHub:  

https://github.com/mcattani/clamscangui

Si te interesó / gustó esta entrada por favor dejá un comentario!

Saludos!

domingo, 21 de junio de 2020

GUI para Hashrat!


HashRat es una app utilizada para generar “hashes” utilizando diferentes algoritmos: md5, sha1, sha256, sha512, etc..
Hashrat is a hash-generation utility that supports the md5, sha1, sha256, sha512, whirlpool, jh-224, jh256, jh-384 and jh-512 hash functions. Hashes can be output in octal, decimal, hexadecimal, uppercase hexadecimal or base64.

Destaco algunas características que le encuentro de gran utilidad:
  1. Posee una gran cantidad de algoritmos para elegir como así también distintas codificaciones de los mismos.
  2. Puede aplicarse un algoritmo sobre un arhivo o carpeta para utilizar luego la salida para comprobar la integridad de los mismos.
  3. Puede utilizarse para generar passwords muy seguros. Ingresando nuestra palabra o frase clave y utilizando la salida como clave de ingreso.
Por ejemplo: utilizamos la salida de la siguiente cadena como password para Facebook:
Cadena: password facebook
Salida (MD5): pUE_0LOWXbh4UVnLf_stUV
Para utilizar esta interfaz gráfica es necesario tener instalado hashrat en nuestro SO. En Ubuntu y derivados se instala desde apt:
sudo apt install hashrat
La interfaz gráfica solo provee de una fracción de lo que este programa es capaz, les recomiendo leer el manual de la aplicación para ver todo lo que puede hacer.
man hashrat

Les dejo el link al proyecto en GitHub: https://github.com/mcattani/hashratgui
En el repositorio, dentro de la carpeta "DEB_file" pueden encontrar los archivos .deb para su instalación en distros basadas en Debian.
 

Se ha publicado una nueva versión de este programa!

https://thenerdyapprentice.blogspot.com/2021/04/hashrat-gui-nueva-version.html 

Si les gustó esta app (o no les gustó :p ) por favor dejen comentarios abajo, gracias!.

viernes, 5 de junio de 2020

GUI para ClamAv


En esta oportunidad les traigo una interfaz gráfica para el ClamAv hecho en Gambas.


ClamAV
El ClamAV es un poderoso antivirus open source que detecta: troyanos, virus, malware y otros amenazas.
ClamAV® is an open source antivirus engine for detecting trojans, viruses, malware & other malicious threats.
Pueden descargarlo desde su página oficial haciendo click acá.

Antiguamente estaba utilizando una interfaz gráfica bastante conocida: ClamTK (excelente programa). Pero me parecía que había posibilidades de hacerlo de otra manera. Y por qué no?


Editado:

Nueva versión publicada https://thenerdyapprentice.blogspot.com/2020/11/nueva-version-del-gui-para-clamav.html, pueden visitar la página del proyecto en GitHub y descargar el código fuente y el archivo .deb para instalarlo!

https://github.com/mcattani/clamscangui

Todas las críticas, sugerencias y/o comentarios son bienvenidos.
Saludos!.

miércoles, 27 de mayo de 2020

Buzzer Pasivo - Take on Me (A-HA) y Meme Ataúd.




Como se ve en el video estuve jugando con un buzzer pasivo que me vino en el kit de 37 módulos en 1 para Arduino.

Había visto un post en Reddit que mostraba un buzzer sonando al ritmo del famoso meme de los Ghaneses cargando el ataúd, pero lamentablemente no había links al código del sketch, fui reconstruyéndolo por partes que vi en el mismo post y en internet.

Así di con una repositorio de Git llamado Arduino Songs de donde saqué el tema de A-ha: Take on Me.

Acá dejo el link de dicha página:
https://github.com/robsoncouto/arduino-songs
Ambos sketch requieren de la librería pitches.h que dejo a continuación:

Yo la agregué directamente al sketch.

Si ven el video, van a ver que agregué un led de 3 colores que viene en el kit mencionado arriba, el mismo no es configurable, solo se enciende y se apaga.
digitalWrite(pin, HIGH)
Aclaro que el crédito de ambos sketch no me pertenece, en el caso del tema de A-ha el crédito respectivo aparece en el código, en el otro caso si alguien encuentra la fuente original, por favor déjenla en los comentarios y la agrego al post.

En este caso usé un módulo buzzer, no voy a armar un esquema de conexión porque es muy sencillo:

Módulo Arduino
- GND (tierra)
+ 5v
S Pin 8


Link al código del sketch canción ataúd.

Link a Take on Me

Si te gustó este post por favor dejá un comentario!.
Saludos!.

martes, 12 de mayo de 2020

APP para ampliar la memoria de intercambio o SWAP

Captuar de pantalla del programa

Esta pequeña aplicación permite expandir temporalmente la memoria de intercambio o swap través de la creación de un archivo montado temporalmente como una partición. Esta ampliación se pierde al reiniciar el sistema.

De Wikipedia:
La mayoría de los sistemas operativos modernos poseen un mecanismo llamado memoria virtual, que permite hacer creer a los programas que tienen más memoria que la disponible realmente. Como en realidad no se tiene físicamente toda esa memoria, algunos procesos no podrán ser ubicados en la memoria RAM.
En este caso es cuando es útil el espacio de intercambio: el sistema operativo puede buscar un proceso poco activo, y moverlo al área de intercambio (el disco duro) y de esa forma liberar la memoria principal para cargar otros procesos. Mientras no haga falta, el proceso extraído de memoria puede quedarse en el disco, ya que ahí no utiliza memoria física. Cuando sea necesario, el sistema vuelve a hacer un intercambio, pasándolo del disco a memoria RAM. Es un proceso lento (comparado con usar sólo la memoria RAM), pero permite dar la impresión de que hay más memoria disponible.
En gnu-linux la swap suele encontrarse en una partición dedicada que se crea al momento de la instalación del sistema operativo.
Normalmente se recomienda que el tamaño de la partición SWAP sea del mismo tamaño o del doble de la cantidad de memoria RAM que tenemos en la PC
Me ha pasado de estar realizando tareas verdaderamente exigentes en términos de memoria de trabajo, en donde la cantidad asignada a la partición swap casi se satura. Buscando en inet. encontré esta solución e hice una pequeña aplicación para facilitar los comandos de terminal que se utilizan.

De esta página saqué la información necesaria para hacer la aplicación; en la misma se encuentran también los pasos a seguir para que dicha ampliación funcione de manera permanente. Aunque lo recomendable siempre es aumentar el tamaño de la partición swap y no este método.


Dejo acá el link al proyecto en GitHub, dentro de la carpeta DEB_file está el archivo para su instalación en sistemas que manejen paquetes debian.

 https://github.com/mcattani/expandswap

Si te gustó esta entrada, por favor deja un comentario y compartí! :)

Saludos.

domingo, 10 de mayo de 2020

Simple GUI para "speedtest-cli" / Probando la velocidad de nuestra conexión

Captura del programa
speedtest-cli es una aplicación utilizada para testear el ancho de banda utilizando el sitio speedtest.net. Tal como indica el sitio: (la traducción es mía)

Speedtest.net es un servicio web que pone a prueba tu ancho de banda bajando un archivo alojado en algún servidor speedtest.net cercano…
Para utilizar esta GUI es necesario tener instalado el programa speedtest-cli, pueden instalarlo mediante la consola con el siguiente comando:
sudo apt-get install speedtest-cli
Por defecto, el programa elige el servidor óptimo para realizar la prueba de velocidad. Sin embargo, es posible elegir un servidor específico a través de una lista (a la que se puede acceder con el botón Lista) y utilizar el servidor elegido ingresando el ID en la pantalla principal.
captura del programa
Como agregado, el programa permite también realizar pings a una lista de ip’s proporcionada por el usuario. Para ello utiliza el comando nmap.
sudo apt install nmap
(si no lo tenemos instalado) 

Sé que esta función no está estrictamente relacionada con el speedtest-cli pero la encuentro útil para comparar la latencia entre servidores proxy.
Y además, por qué no? :)

Dejó acá el link al proyecto en GitHub: https://github.com/mcattani/speedtestgui

Dentro de la carpeta "DEB_files" encontrarán el archivo .deb para la instalación en Debian y derivados.

 
Como siempre, todo comentario será bienvenido y, por favor, si les gustó compartan. :)
Saludos!