Archivo de la etiqueta: idle

Mejorando nuestra salud gracias a AppleScript

Es conocido que la empresa Apple está incluyendo en todos sus dispositivos móviles elementos y características para mejorar la salud de sus clientes. En el Apple watch, por ejemplo, existe una característica que nos invita a levantarnos de la silla cada hora para que mejoremos nuestra salud y adoptemos hábitos saludables.

En MacOS todavía no se ha incluido ninguna de estas características pero gracias a AppleScript podemos crear nuestras propias soluciones.

Descripción de la solución

Queremos crear con AppleScript una aplicación que cada hora nos muestre un aviso para que nos levantemos de nuestro sitio durante al menos un minuto.

Con lo que hemos aprendido en artículos anteriores esto no es demasiado complicado.

Debemos aprovechar el evento idle para crear una aplicación con AppleScript que se ejecute automáticamente cada 60 segundos y compruebe la hora. Si el valor de los minutos del reloj es igual a 50 entonces mostramos nuestro aviso.

El código podría ser algo como lo siguiente:


on mostrarAviso()
display alert "Levántate durante un minuto"
end mostrarAviso

on idle
set currentDate to current date
set minutos to (currentDate's minutes)
if minutos = 50 then
mostrarAviso()
end if
return 60
end idle

Recuerda exportar el script como aplicación como se indicó en el artículo Eventos de ejecución en aplicaciones creadas con AppleScript para que el evento idle funcione de forma apropiada.

Propuestas de mejora

El script es sencillo y funciona pero se puede mejorar de muchas formas. A continuación se indican algunas posibles mejoras que puedes incluir investigando un poco con AppleScript:

  • Reproducir un sonido de campana para que el usuario no se confunda con otra notificación
  • En lugar de mostrar una alerta ejecutemos el salvapantallas de MacOS para obligar al usuario a dejar de trabajar
  • Contabilizar cuántas horas se ha mostrado el aviso para dejar de hacerlo tras 12 horas como sucede en el Apple Watch
  • Mostrar una alerta personalizada indicando cuántas horas nos quedan por levantarnos para motivar más al usuario

Todas estas propuestas se pueden realizar con lo que ya hemos ido aprendiendo en los artículos publicados sobre AppleScript e investigando un poco.

Eventos de ejecución en aplicaciones creadas con AppleScript

En el artículo Convertir un AppleScript en una aplicación para MacOS aprendimos cómo convertir nuestro script de AppleScript en una aplicación. Esto, entre otras ventajas, nos permite poder ejecutar más rapidamente nuestro script. Pero además podremos acceder a ciertos eventos que se dan en las aplicaciones.

Evento run

El evento run se ejecuta al arrancar la aplicación. Ya hemos visto código que utiliza este evento ya que la función on run se da tanto en aplicaciones como scripts de AppleScript.

Este evento suele utilizarse para inicializar valores para variables, preparar o cargar los recursos necesarios para ejecutar correctamente la aplicación o mostrar la interfaz de bienvenida al usuario.

Evento quit

El evento quit se produce cuando la aplicación va a terminar de ejecutarse y antes de cerrarse dispara el evento quit y ejecuta el código que hayamos codificado para él.

Este evento sólo está disponible cuando convertimos nuestro script en aplicación. Por ejemplo, veamos el siguiente código:


on quit
display alert "Adios a todos!"
end quit

on run
display alert "Hola a todos!"
end run

Si ejecutamos el código en el editor de AppleScript sólo se mostrará el mensaje de saludo pero nunca la despedida. Para poder ver la despedida deberemos convertir nuestro script de AppleScript en una aplicación de MacOS y ejecutarla como una app más. Entonces veremos el mensaje de despedida tras el mensaje de saludo.

Evento idle

El evento idle nos permite ejecutar un código de script cada X segundos. Con esto podemos crear aplicaciones que repitan un script cada cierto tiempo.

Este evento sólo está disponible cuando convertimos nuestro script en aplicación.

Otro requisito de este evento es que requiere más tiempo de ejecución que una aplicación habitual de AppleScript por lo que es recomendable que cuando vayamos a exportar nuestro script para convertirlo en aplicación verifiquemos la casilla Permanecer abierto tras el gestor de ejecución asegurándonos que nuestra ventana de aplicación permanece abierta ejecutando el evento idle hasta que decidamos cerrar la ventana de la aplicación de forma manual.

Al codificar el evento idle debemos finalizar su codificación devolviendo un número que representará el número de segundos necesarios para volver a ejecutar el evento idle. Por ejemplo, el valor 60 se referirá a un minuto y el valor 3600 a una hora. Para devolver ese valor usamos el comando return que nos permite devolver un resultado cuando ejecutamos una función de AppleScript.

Veamos un ejemplo muy sencillo. Vamos a crear una aplicación que reproducirá un sonido cada minuto.


on idle
do shell script "afplay /System/Library/Sounds/Blow.aiff"
return 60
end idle

Ejemplo completo

Nuestro ejemplo deberá realizar las siguientes tareas:

  1. Saludar al inicio
  2. Reproducir un sonido cada 30 segundos
  3. Despedirse al cerrar la ventana de la aplicación

el código sería algo como lo siguiente:


on run
display alert "Hola a todos!"
end run

on quit
display alert "Adios a todos!"
end quit

on idle
do shell script "afplay /System/Library/Sounds/Blow.aiff"
return 30
end idle

Recuerda verificar la casilla Permanecer abierto tras el gestor de ejecución al exportar tu script para convertirlo en aplicación.