Con los conocimientos que ya tenemos en AppleScript podemos empezar a hacer aplicaciones más complejas como puede ser un simple juego de adivinar un número.
Continuar leyendo «Juega a adivinar el número con AppleScript»
Un blog sobre accesibilidad, usabilidad, diseño para todos y nuevas tecnologías
Con los conocimientos que ya tenemos en AppleScript podemos empezar a hacer aplicaciones más complejas como puede ser un simple juego de adivinar un número.
Continuar leyendo «Juega a adivinar el número con AppleScript»
A veces en nuestros scripts puede que nos interese tener un poco de azar para bien ofrecer diversión al usuario u optimizar un algoritmo.
AppleScript nos ofrece el comando random number para generar números aleatorios.
Su sintaxis es muy simple:
set azar to random number
set dado to random number from 1 to 6
Con esto es muy sencillo el poder crear, por ejemplo, un script para simular una tirada de un dado de 6 caras.
set dado to random number from 1 to 6
set dadoText to dado as text
display alert "En el dado ha salido el número " & dadoText
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.
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.
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:
Todas estas propuestas se pueden realizar con lo que ya hemos ido aprendiendo en los artículos publicados sobre AppleScript e investigando un poco.
A la hora de diseñar y codificar nuestros scripts de AppleScript debemos tener en cuenta que se pueden producir errores y debemos controlar lo que sucede cuando aparecen estos errores.
Por defecto en AppleScript cuando sucede un error se para la ejecución del script y, a veces, se da un mensaje de error.
Veamos un ejemplo intentando verbalizar un mensaje con una voz no instalada en el sistema:
say "Hola a todos!" using "Manolo"
Al intentar ejecutar ese código obtendremos el mensaje de error No se ha encontrado la voz.. Debemos controlar esto para que nuestro script siga funcionando perfectamente.
AppleScript nos permite ejecutar un bloque de código de forma segura utilizando el bloque try. Permitiendo que se ejecute el código pero si aparece un error no se parará la ejecución de nuestro script.
El bloque try utiliza la siguiente sintaxis:
try
-- código a ejecutar de forma segura
end try
Volviendo a nuestro ejemplo anterior ahora podemos evitar que se de el mensaje de error utilizando el bloque try. El código quedaría así:
try
say "Hola a todos!" using "Manolo"
end try
A veces nos interesa reaccionar ante la aparición de un error. Por ejemplo, si la voz Manolo no existe, aunque usemos el bloque try tendremos un problema en nuestro script ya que el mensaje nunca llegaá al usuario ya que el mensaje no se verbalizará. La solución pasa por reaccionar al error verbalizando el mensaje de todas formas con cualquier voz que esté disponible. Para ello el bloque try posee la cláusula on error que nos permite definir un sub bloque de código dentro del bloque try que se ejecutará sólo si se produce un error. Su sintaxis es la siguiente:
try
-- Código a ejecutar
on error
-- Código a ejecutar si se produce un error
end try
El código de nuestro ejemplo quedaría así:
try
say "Hola a todos!" using "Manolo"
on error
say "Hola a todos!"
end try
El código necesario para verbalizar un mensaje con una voz en específico de forma segura es candidato a convertirse en una de nuestras funciones habituales. El código podría ser algo como lo siguiente:
on sayWithVoice(texto, nombreDeVoz)
try
say texto using nombreDeVoz
on error
say texto
end try
end sayWithVoice
Para probar nuestra función simplemente debemos llamarla de la siguiente forma:
sayWithVoice("Hola a todos, soy Mónica", "Monica")
Otra función muy útil para aquellos usuarios de VoiceOver es la de poder utilizar la voz de VoiceOver para dar mensajes.
Con esta función podremos utilizar la voz por defecto de VoiceOver para verbalizar un mensaje pero si VoiceOver no está disponible utilizará la voz del sistema.
on sayWithVoiceOver( textToSay )
try
tell application "VoiceOver"
output textToSay
end tell
on error
say textToSay
end try
end sayWithVoiceOver
Una función muy necesaria para los scripts de AppleScript destinados a funcionar con VoiceOver, el lector de pantallas de Apple para sus productos, es saber si VoiceOver para MacOS tiene habilitada la opción de poder ser controlado por AppleScript ya que esto nos permitirá manipular el comportamiento de VoiceOver desde nuestros scripts de AppleScript.
Para ello lo que hacemos es comunicarnos con la aplicación VoiceOver y probamos a llamar a alguna de sus funciones internas.
El código de nuestra función sería el siguiente:
on isVoiceOverRunningWithAppleScript()
set isRunning to true
-- is AppleScript enabled on VoiceOver --
tell application "VoiceOver"
try
set x to bounds of vo cursor
on error
set isRunning to false
end try
end tell
return isRunning
end isVoiceOverRunningWithAppleScript