lunes, 25 de noviembre de 2024

Info Clima - Script de Python para ver la información del Servicio Meteorológico Nacional

Hace poco comencé un curso de introducción a Python por lo que en esta ocasión les dejo mi primer script más o menos funcional.

info_clima.py es un script que descarga la información del Servicio Meteorológico Nacional (SMN) y muestra los datos meteorológicos actualizados en la terminal.

  imagen de muestra 

Sé que a menos que estés leyendo esto desde Argentina quizás este proyecto no resulta de gran interés. Pero me pareció interesante su realización como ejercicio. Utiliza todas librerías que ya vienen con python por lo que este script debería funcionar out of the box sin ningún problema tanto en Windows como en Linux.

Contiene elementos que pueden resultar de interés si estas empezando a programar en python:

  • Descarga de archivos de internet.
  • Descompresión de archivos zip.
  • Uso de ubicaciones temporales.
  • Uso de 'listas de listas'
  • Uso de colores en la terminal (algo XD)

El código está bastante comentado. Pero en resumidas cuentas el script descarga un archivo comprimido (zip) de la web del SMN y descomprime su contenido (una especie de archivo CSV pero utilizando el punto y coma para separar los valores) en una ubicación temporal.

muestra de información descargada

Luego procesa este archivo convirtiéndolo en una 'lista de listas'.

Las listas de listas permiten representar esta estructura de manera natural, donde cada fila de la tabla se convierte en una sublista y cada columna se representa mediante elementos dentro de esas sublistas (Fuente)

El script solicita al usuario que ingrese la ubicación de la cual quiere conocer los datos, en caso de no ingresar nada por defecto devuelve la información de "Buenos Aires".

Por supuesto que hay mucho espacio para la mejora (de hecho no toda la información suministrada se muestra, solo la que a mi me resulta de interés). Creo que es un buen script de práctica para el que está aprendiendo.

Como siempre les dejo el link al repo de GitHub: https://github.com/mcattani/script_clima

Espero les resulte de interés. Si es así los invito a dejar un comentario y si tienen ganas pueden invitarme un cafecito!:

Invitame un café en cafecito.app

[Actualización 15/12/2024]: Decidí reescribir el script casi desde 0, me parecía que estaba bastante desordenado. Separé todas las operaciones más importantes en funciones. También decidí por ahora sacar el tema de los colores (quizás en una versión futura vuelva a agregarlas) y de la ubicación temporal (el script ahora borra los archivos después de utilizarlos).

Saludos!

sábado, 10 de agosto de 2024

1secMail - GUI

En esta ocasión les traigo una app escrita en Gambas. Es una interfaz gráfica que utiliza la API de 1secmail.com.

Citando al sitio (la traducción es mía):

El correo electrónico desechable es un servicio que permite a los usuarios generar (...) y recibir correos electrónicos en esta dirección temporal. Después de cierto período de tiempo (...) se cancelará la dirección. El correo electrónico desechable también se llama correo temporal, correo de 10 minutos, correo electrónico desechable, correo falso o correo basura.

Como se puede observar en el video la app permite crear una cuenta de mail temporal en la cual podemos recibir correos que se almacenarán temporalmente. Muy útil cuando un sitio web requiere registrarse para acceder a un contenido. ¿Cuántas veces uno termina registrándose en un sitio por algún motivo y queda preso del spam que inevitablemente te va a llegar todo el tiempo?

La API se accede a través de GET REQUESTS vía HTTP y el sitio siempre responde con la información en formato json.

Creo que nunca había trabajado con http requests en Gambas ni con el formato JSON, por eso en parte me interesó también este proyecto.

El sitio recibe cualquier mail dirigido a los dominios disponibles.

"1secmail.com, 1secmail.org, 1secmail.net, wwjmp.com, esiix.com, xojxe.com, yoggm.com"

Ni bien se inicia, la APP busca los dominios disponibles utilizando el parámetro "getDomainList" y los despliega para ser utilizados en el combobox. También genera un usuario de manera aleatoria. Según la documentación del sitio existe una manera de generar direcciones aleatorias utilizando el parámetro "genRandomMailbox".

Citando del sitio (la traducción es mía):

Esta función simplemente genera un nombre de usuario aleatorio de 6 a 12 caracteres y le agrega uno de nuestros dominios más recientes.

Pero me pareció que las direcciones son muy confusas y me parecía más prolijo que las app las generara. Lo hace eligiendo un nombre al azar dentro de un array pre-definido y le suma 4 dígitos generados al azar. Creo que el resultado es lo suficientemente random.

Se pueden crear otros usuarios aleatorios haciendo click en el ícono al lado del nombre de usuario. También es posible copiar la dirección creada al portapapeles haciendo doble click sobre la dirección de correo una vez iniciado el servicio.

Quiero hacer dos aclaraciones:

  1. Como expliqué en la entrada anterior "Problemas con Gambas, solución de aquí en adelante" tuve que hacer algunas alteraciones. El programa muestra el mail recibido en formato plano. Si se quiere ver la versión html el programa lo hace guardando una copia del mail en archivo temporal y luego lo abre con el navegador que haya instalado por defecto. El componente WebView me estaba dando muchos problemas. No quiero repetir lo que dije en el post anterior pero espero que sea un bug que se solucione en el futuro.
  2. Tema "descargar adjuntos": Esto fue un dolor de cabeza durante semanas. Reescribí el código muchas veces hasta que durante una epifanía se me dio por probar desde la página directamente, solo para encontrarme con el mismo error en el sitio mismo. A veces los adjuntos no se descargan bien. Suele funcionar bien si los adjuntos son archivos pequeños (sobre todo de texto), pero con imágenes... no siempre funciona. Esto no fue un deal breaker para mi porque este tipo de servicios por lo general no funciona bien con adjuntos (otros sitios similares ni siquiera tienen soporte para descargarlos). Como escribí arriba el objetivo de este tipo de mails temporales son para recibir links de registro principalmente.

Una aclaración extra importante el sitio no hace (y aunque lo hiciera 🤷) referencia a privacidad. Por lo que no lo usaría ni lo recomendaría para recibir información sensible.

Como siempre el código fuente está bastante comentado (hubo mucha reescritura) por lo que para cualquier principiante en Gambas no va tener problema en seguir cada paso. Creo además me estoy llevando mejor con los contenedores.

Recomiendo leer el post anterior: Problemas con Gambas, solución de aquí en adelante

Como siempre les dejo el link al proyecto en GitHub para que puedan descargarlo: https://github.com/mcattani/1secmail_gui

Los invito a dejar comentarios, compartir y si quieren pueden invitándome un cafecito. Estoy con bastante trabajo pero tengo varios proyectos en mira.

Invitame un café en cafecito.app

Saludos!

lunes, 8 de julio de 2024

Problemas con Gambas, solución de aquí en adelante

Últimamente trabajar con Gambas se ha vuelto complicado (por no decir exasperante). Varios problemas con las últimas actualizaciones.

Por alguna razón el componente "TrayIcon (gb.gui.trayicon)" hace que el IDE colapse.

TrayIconCapture

Actualmente estoy trabajando en un nuevo programa y el componente "WebView" se niega a funcionar de manera estable por lo que tuve que probar otra solución...

Pero estos son fallos que según he ido encontrando información en internet parecen ser bugs que se solucionarán en versiones futuras (espero).

El problema principal (y motivo de esta entrada) es el de las múltiples versiones y esto vale la pena aclarar. Mi idea al subir los proyectos a GitHub es, además de subir el código fuente, subir también los paquetes listos para su instalación (no suponer que todos tienen el IDE de Gambas instalado).

Y esto presenta una serie de problemas. Actualmente estoy utilizando Manjaro (desde hace tiempo mi distro de cabecera) cuya versión de Gambas en los repositorios, al momento de escribir esta entrada, es la 3.19.2, mientras que la versión por defecto en los repositorios de Debian y derivados (Ubuntu, Mint, etc.) es la 3.18.0, y la versión más reciente (que se encuentra en los repositorios oficiales de Gambas) es la 3.19.3.

Todo esto trae aparejado una serie de problemas al momento de intentar instalar los programas (no se encuentran las dependencias y/o las versiones correctas de los mismos) o el programa directamente no corre ("bytecode doesn't match, upgrade gambas").

Respecto a los bugs no puedo hacer mucho, como dije, espero se solucionen en versiones futuras. Y con respecto a los paquetes de instalación suelo subir siempre la versión para Arch (la que instalo en mi sistema) y la versión para Debian y derivados (.deb).

El instalador para Arch lo puedo crear desde el IDE que utilizo en Manjaro y la versión para Debian la creo desde el IDE instalado en una máquina virtual con Linux Mint (que tiene el repositorio de Gambas) esto me sirve además para probar el programa en otra distro, entre otras cosas.

¿Para qué escribo todo esto?

Porque voy a suponer que quien descargue, ya sea el código fuente o directamente el paquete instalador del programa publicado, va a tener instalado los repositorios de Gambas (esta es la mejor solución de entre todas las pruebas que estuve haciendo).

Para quienes SOLO quieren instalar el programa publicado no hace falta instalar el IDE completo, solamente tener instalado el repositorio.

Quienes, como yo, utilizan Manjaro o cualquier derivado de Arch, no tienen que hacer nada, el instalador debería funcionar correctamente.

Para quienes utilicen Debian o derivados (Ubuntu, Mint, etc.) la instalación del repositorio es sencilla:

sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt update

Link del repositorio: https://launchpad.net/~gambas-team/+archive/ubuntu/gambas3

Si el comando "add-apt-repository" no les funciona, como sería si utilizaran MX-Linux por ejemplo, lo mejor es agregar el repositorio de manera manual.

Para el caso concreto de MX-Linux por ejemplo: abren <Synaptic -> Configuración -> Repositorios> hacen click en "New" e ingresan los datos del repositorio.

Una vez ingresados hacen click en "OK" y luego en "RELOAD"

Seguramente va a saltar un error, pues no tenemos la clave pública del repositorio. 

Esto se soluciona fácil, solo deben abrir el programa "MX Arreglar claves GPG", el programa buscará la clave, y listo. 


Solo queda recargar los repositorios.

sudo apt update

Fin. Así queda solucionado cualquier problema que tengan, ya sea bajando el código fuente para usar en el IDE, o bajando el instalador todo debería funcionar bien (jinx!). Teniendo el repositorio instalado se ahorra un montón de dolores de cabeza, siempre se va a tener la versión más actualizada de Gambas.

Espero que esto les sirva, cuando esté más aceitada la creación de paquetes .appimage la cosa va a ser aún más sencilla.

Cualquier cosa dejen dejen comentario, me interesa conocer sus experiencias.

Saludos!

domingo, 3 de marzo de 2024

[Actualización] Tachame la Lista!

En un post anterior publiqué un programa llamado Tachame la Lista! Un programa del estilo “to-do list” que vengo usando bastante.

Desde la primera versión publicada hubieron bastantes cambios:

  1. Errores: Se corrigieron algunos, sobre todo relacionados con la apertura / cierre del panel lateral cuando los ítems de la lista contienen descripciones. También con algunos errores que aparecían si se intentaba borrar o marcar completado / incompleto un ítem si no había uno seleccionado.

  2. Optimización del código: sobre todo en relación al uso de variables globales innecesarias o la mala costumbre de no cerrar la conexión a la base de datos tras ser accedida. Imagino que todavía hay bastante que se podría optimizar.

  3. Atajos de teclado: siempre resulta más rápido y sencillo poder usar atajos de teclado simples en vez de ir y venir con el mouse. Tras abrir la aplicación podemos presionar CTRL+A para agregar un ítem a la lista. Si solamente utilizamos un título podemos presionar directamente ENTER tras escribir el ítem a agregar y este se agregará a la lista. Además, si agregamos información del ítem en la descripción podemos presionar TAB lo que ubicará el foco en el botón “Listo”, por lo que presionando ENTER o la BARRA ESPACIADORA agregará todo el contenido a nuestra lista. Obviamente esto significa que ya no se podrá utilizar TAB dentro del área de texto de la descripción, pero encontré en la práctica que nunca lo uso.

Atajos de teclado sencillos: CTRL+A para agregar ítem, ENTER para confirmar, TAB y ENTER para confirmar si usamos descripciones de los ítems que agregamos.

  1. Resaltado: agregada la posibilidad de resaltar ítems de nuestra lista. Fue una de las primeras cosas que pensé cuando empecé a usar la app seguido. Es necesario poder resaltar ítems importantes. Cuando la lista se empieza a agrandar es necesario marcar algunas cosas como importantes para dar prioridad XD. Por el momento esta opción está restringida a una combinación de colores específica pero pienso que en el futuro se podría agregar algún menú con más opciones de resaltado. Al igual que el resto de la información la información respecto de si un ítem está resaltado o no se guarda en la base de datos.

Para mantener compatibilidad con las versiones anteriores al iniciarse el programa el mismo busca que exista la columna resaltado en la base de datos, de no existir la crea.

  1. Búsqueda de actualizaciones: En el menú programa se agrega la opción para buscar actualizaciones. El programa compara la versión actual con la existente en el repositorio de GitHub, si encuentra diferencia es porque seguramente exista una versión nueva. Finalmente convertí en módulo esta función (que siempre está mezclado con el resto del programa) así que será más fácil implementarla en futuros proyectos a partir de ahora. Muchas veces vuelvo sobre programas viejos para corregir errores o agregar funciones y salvo que el usuario mismo se tome el trabajo de comparar versiones con el repositorio, nunca se enteraría si hay nuevas versiones.

Creo que todo esto resume a grandes rasgos los cambios que se fueron haciendo en la app. Posiblemente siga haciendo cambios pero por ahora creo está en una versión estable y le estoy dando bastante uso!

Link al repo en GitHub: https://github.com/mcattani/tachame_la_lista

Como siempre, si el contenido de este blog les agrada se agradecen la difusión y los comentarios y si además quieren ayudar de otra mana pueden invitarme un cafecito XD (le tengo el ojo a unos esp32 y unos display que me estoy muriendo por comprar 0_0 )

Invitame un café en cafecito.app

Saludos!