Bucles en AppleScript

AppleScript, al igual que otros lenguajes de programación, nos permite utilizar una serie de estructuras de código para repetir una serie de comandos un número determinado de veces. Esto resulta muy úl para evitar tener que escribir demasiado código repetido

Por ejemplo imaginemos que queremos realizar un script que cuente desde 1 hasta 10. Si no supiesemos utilizar ninguna estructura de bucle o para repetir un trozo de código nuestro script debería ser algo parecido a lo siguiente:


on run
set valor to 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
end run

El código escrito es repetitivo, poco elegante y poco eficiente a la hora de ser mantenido o modificado en el futuro.

Para poder solucionar este problema AppleScript nos proporciona la estructura repeat que repite un número de veces determinado el código situado entre la orden repeat y end repeat. Nuestro script anterior podría quedar así:


on run
set valor to 1
repeat 10 times
say valor
set valor to valor + 1
end repeat
end run

Al ejecutar el script obtendremos el mismo resultado pero habremos escrito menos líneas de código y además queda más claro que existe una acción repetida varias veces dentro del script.

Si en el comando repeat no indicamos el número de veces que debe repetirse el bloque de código se entrará en un bucle infinito. Por ejemplo, si cambiamos nuestro ejemplo anterior dejando la línea repeat 10 times por sólo repeat y lo ejecutamos el script no parará de contar hasta que nosotros interrumpamos la ejecución del script.

Un bucle de ejecución infinita es muy peligroso ya que provocará que nuestro ordenador entre en un proceso sin fin y cada vez haya menos recursos disponibles para la máquina. Es muy probable que hayamos visto comportamientos similares cuando nuestro teléfono u ordenador personal realiza un proceso que provoca que la temperatura del dispositivo aumenta, se ralentiza la ejecución de todo el sistema operativo y cualquier acción que intentemos se realizará de forma muy pausada y con interrupciones. Esto puede deberse a que una aplicación está ejecutando un bucle infinito o de muy larga duración, por ejemplo convertir un fichero de vídeo o un proceso que requiera de muchos minutos para completarse.

Por todo esto siempre debemos incluir cláusulas de interruptción de un bucle en cualquier lenguaje de programación que utilicemos, incluido AppleScript.

Para salir de una estructura repeat AppleScript nos proporciona el comando exit. Veamos nuestro ejemplo inicial pero utilizando un bucle infinito con su cláusula de ejecución controlada para que se termine cuando hayamos verbalizado el valor 10. El código sería el siguiente:


on run
set valor to 1
repeat
say valor
set valor to valor + 1
if valor = 11 then
exit repeat
end if
end repeat
end run

Pero este código sigue sin ser del todo apropiado. En nuestro ejemplo sabemos que queremos ir desde el valor 1 hasta el 10. En los casos en que sabemos el valor de inicio y de finalización y además necesitamos una variable que nos indique en qué número de la iteración del bucle nos encontramos el comando repeat nos permite declarar una variable para controlar el bucle e indicar el valor de comienzo y el valor de finalización para el bucle. Veamos un ejemplo para que nos diga los números entre el 10 y el 20. El código sería el siguiente:


on run
repeat with valor from 10 to 20
say valor
end repeat
end run

Es necesario tener en cuenta que la estructura repeat with from to sólo se ejecutará si el valor indicado en from es menor que el indicado en to, lo que significa que el bucle se ejecutará si se va de un número hacia otro número mayor. Por ejemplo, si intentamos hacer una cuenta atrás el script siguiente no se ejecutará:


on run
repeat with valor from 10 to 1
say valor
end repeat
end run

Para solucionar este problema debemos usar nuestro ingenio para superar las limitaciones del lenguaje de programación que estemos utilizando. Una posible solución sería la siguiente:


on run
repeat with valor from 1 to 10
set cuentaAtras to 11 - valor
say cuentaAtras
end repeat
say "¡Boom!"
end run

AppleScript proporciona otras variantes de la estructura de bucle repeat pero pueden resultar menos eficientes o más complejas de controlar. Más adelante veremos algunas de ellas.

Samsung Galaxy Gear S3 accesible

La empresa Samsung es mundialmente conocida por la producción de electrodomésticos, dispositivos móviles y componentes para otros fabricantes. Dentro del mundo de la accesibilidad Samsung también está siendo conocida por apostar por la accesibilidad llegando a superar el compromiso de otros fabricantes como Google creando herramientas y productos de accesibilidad mejorados a partir de otros ya existentes como es el caso de Galaxy Talkback, el lector de pantallas para los dispositivos móviles de Samsung con sistema operativo Android.

Samsung también apuesta por la accesibilidad para todas sus plataformas, incluida la de sus wearables como es el caso de su último reloj inteligente, el
Galaxy Gear S3

El Gear S3 utiliza como sistema operativo Tizen el cual ha sido empoderado por Samsung y se están viendo ahora los frutos de ese esfuerzo por la empresa de mejorar este sistema operativo que, en un principio, carecía de cualquier característica de accesibilidad.

Elementos de accesibilidad en Gear S3

Dentro de los ajustes del reloj encontramos el apartado de accesibilidad. Allí encontramos dos secciones principales: visión y audición.

Para las personas con discapacidad visual encontramos los siguientes servicios de accesibilidad: lector de pantallas, zoom, inversión de color y color en escala de grises. Además se ha incluido la característica de pantalla oscura para que personas ciegas puedan utilizar su reloj de forma discreta.

Para las personas con discapacidad auditiva encontramos las caracteristicas de audio mono y de apagado de sonidos.

Además dentro del apartado de ajustes de accesibilidad el usuario puede activar el atajo rápido de activación y desactivación de la accesibilidad pudiendo activar o desactivar el lector de pantallas, por ejemplo, pulsando tres veces con dos dedos en la pantalla.

Un primer paso en Tizen y una primera oportunidad para mejorar

Aunque el lector de pantallas y la función de zoom funcionan bastante bien debemos tener en cuenta que este es el primer paso en accesibilidad para Tizen por lo que hay varias cosas que mejorar y varias cosas que incluir.

Uno de los principales problemas es la inexistencia de accesibilidad desde la caja. Tanto el atajo de activación de accesibilidad como todas las herramientas de accesibilidad vienen por defecto desactivados por lo que una persona con discapacidad necesitará una ayuda inicial para poder usar su dispositivo de forma autónoma.

El uso de los elementos físicos del reloj por parte del lector de pantallas u otras herramientas de accesibilidad es mínimo perdiendo la oportunidad de crear mecanismos de interfaz mejorados para personas con discapacidad. Por ejemplo, los usuarios de lectores de pantalla en lugar de mover el dedo por la pantalla táctil para escribir algo podrían usar la rueda giratoria la cual es un elemento físico con marcas hápticas claras para una persona ciega.

Se rompió el monopolio

Con el esfuerzo de Samsung en este reloj también se ha de reconocer un beneficio muy claro para las personas con discapacidad: ahora las personas con discapacidad tienen una alternativa al Apple Watch. Y es una estupenda alternativa ya que el Samsung Gear S3, además de incluir características de accesibilidad es un buen reloj inteligente con otras muchas características que lo convierten en un wearable ideal para muchos usos y situaciones.

Las personas somos diversas y los gustos y necesidades son diversos. Es necesario también que haya diversidad en la oferta tecnológica disponible para todos y gracias a Samsung la oferta en relojes inteligentes para personas con discapacidad se amplía de forma muy apropiada.

Conoce el estado de tu batería en MacOS Sierra gracias a AppleScript

Con las últimas versiones de MacOS Sierra, el sistema operativo de Apple para sus ordenadores portátiles y de sobremesa, los usuarios han encontrado que el indicador de batería es confuso y ofrece información insuficiente.

Muchos usuarios no encuentran una solución para volver a obtener toda la información de sus baterías y desconocen que el propio sistema operativo les ofrece una solución utilizando una de las herramientas del sistema MacOS que lo convierten en uno de los sistemas ooperativos más versátiles del mercado, nos referimos a Apple script

Aprender Apple script no es demasiado complicado pero puede que no tengas tiempo para ello. Por esa razón Tyflos Accessible Software ha desarrollado un script que verbaliza bien con la voz del sistema o la voz de VoiceOver, el lector de pantallas para MacOS, el estado actual de la batería de tu equipo Apple.

Puedes descargar el archivo comprimido del
script para conocer el estado de la batería(Español)
e instalarlo en tu sistema MacOS.

Una vez descomprimido el archivo copia el fichero appleScript en la carpeta para scripts de tu carpeta biblioteca de usuario. Una vez allí puedes crear un flujo de Automator para que se ejecute con una pulsación de teclas.

Si eres usuario de VoiceOver es más sencillo de utilizar. Descomprime el archivo dentro de la carpeta de scripts de tu biblioteca, es necesario activar el soporte de scripts de VoiceOver y añadir un comando para VoiceOver asociado a este script. Para ello, dentro de las opciones de VoiceOver, encontrarás el mecanismo para asociar un atajo de teclado a un comando de VoiceOver en la categoría comandos de la ventana de configuración de VoiceOver.

Lee imágenes desde tu Mac con Tesseract de forma fácil y gratuita

A veces necesitamos manipular o acceder a la información escrita de una imagen o documento con imágenes incrustadas, esto es muy habitual por ejemplo para las personas ciegas o con baja visión. Para estas tareas se suele utilizar una herramienta software de reconocimiento óptico de caracteres o las siglas en inglés OCR.

Estas aplicaciones de OCR han sido, hasta hace poco, bastante caras de precio pero en la actualidad, y gracias al movimiento de software libre, disponemos de buenas alternativas libres y gratuitas. El ejemplo más conocido es Tesseract.

Este motor OCR fue originariamente desarrollado por Hewlett Packard para ser un software de pago, tras 10 años de explotación fue donado como código abierto a la comunidad. Actualmente Google se encarga de su mantenimiento y su nivel de precisión y soporte de varios idiomas lo convierten en una buena opción para competir con otros motores OCR de pago.

MacOS X, el sistema operativo de Apple para sus ordenadores de sobremesa y portátiles, dispone de una versión de Tesseract dentro de la comunidad de desarrollo. Esta versión puede ayudarnos en muchos momentos a acceder al contenido textual de una imagen o recurso visual de forma rápida y gratuita.

Instalación de Tesseract

Tesseract se distribuye de forma abierta con su código fuente por lo que cualquiera puede visitar la página web del proyecto Tesseract y bajar su código fuente y compilarlo en su máquina utilizando las diversas herramientas de desarrollo. Cuando hay herramientas de desarrollo involucradas en una tarea muchos usuarios piensan que va a ser algo imposible, no es del todo así en todos los casos.

Herramientas para desarrolladores que ayudan a todo el mundo

Las herramientas para desarrolladores, utilizadas de forma apropiada, pueden ayudar a cualquiera. Al igual que un cuchillo puede ser utilizado para defensa también nos puede ayudar a cortar el pan o una cuerda, sólo debemos preocuparnos por aprender a utilizarlo de forma apropiada y responsable.

La instalación de Tesseract puede ser muy compleja a menos que hagamos uso de una de estas herramientas para desarrolladores, hablamos de Homebrew. Brew o Homebrew es un gestor de paquetes que permite instalar rápidamente librerías y utilidades en MacOS X. La mayoría de estas utilidades y librerías están relacionadas con tareas de desarrollo pero otras son utilidades del sistema para el usuario, como es el caso de Tesseract.

La instalación de Homebrew y Tesseract se realizará a través del terminal.

Para instalar Homebrew simplemente abre el terminal, localizado en la carpeta Utilidades que está dentro de la carpeta de Aplicaciones.

Una vez abierta la ventana del terminal escribe la siguiente línea de comandos:


/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Una vez instalado Homebrew podemos comprobar si se ha instalado correctamente. Para ello escribimos en el terminal el siguiente comando:

brew --version

Atención: los comandos del terminal son sensibles a mayúsculas y minúsculas por lo que hay que tener cuidado en cómo se escribe cada comando.

Instalación rápida de Tesserac

Una vez instalado Homebrew en nuestro equipo podemos instalar Tesseract con soporte para más de 30 idiomas con un simple comando de terminal:

brew install tesseract --with-all-languages

Instalando todos los lenguajes nos aseguramos que tendremos un soporte completo para nuestro idioma.

Utilizando Tesseract desde la consola de comandos

Usar Tesseract desde la línea de comandos es tan sencillo como llamarlo indicando el fichero de imagen y el nombre del fichero donde queremos que guarde el resultado. Un ejemplo:

tesseract $HOME/Desktop/captura.png $HOME/Desktop/resultado

El anterior ejemplo utilizará el fichero de imagen captura.png, que puede ser una captura de pantalla guardada en nuestro escritorio, y guardará el resultado del proceso OCR en el fichero resultado.txt que se guardará en el escritorio. El problema de este comando es que intentará realizar el proceso primero en inglés. Podemos indicar el idioma simplemente con el parámetro -l. El ejemplo quedaría así si queremos realizar el proceso de OCR para el idioma español:

tesseract $HOME/Desktop/captura.png $HOME/Desktop/resultado -l spa

Desinstalar Tesseract

Si por alguna razón no queremos seguir teniendo a Tesseract el comando es tan simple como:

brew uninstall tesseract

Primeros pasos con Swift

Swift es un nuevo lenguaje de programación creado por Apple buscando atraer a nuevos desarrolladores. La propia compañía lo describe en su página oficial de Swift como un lenguaje potente y sencillo de aprender.

Realmente Swift, en comparación con otros lenguajes, tiene una curva de aprendizaje menor y las herramientas proporcionadas por Apple para desarrollar con él lo hacen un lenguaje muy apropiado como primera opción para aprender a programar.

Recientemente Apple ha decidido donar su lenguaje a la comunidad de código abierto lo que permitirá a Swift estar presente en otras plataformas por lo que desarrollar una aplicación para iOS, OSX, Linux y otras plataformas será algo habitual en Swift.

Programando en Swift

Para programar en un lenguaje de programación lo primero que necesitamos son herramientas de desarrollo compatibles con ese lenguaje. Si somos usuarios del sistema operativo MacOS X sólo debemos ir a la aplicación de la Mac AppStore y descargar el entorno de desarrollo de Apple más conocido como xCode.

xCode, como otras aplicaciones específicas para una profesión, no es una herramienta sencilla de comprender con un primer vistazo pero tampoco es una tarea imposible. Iremos conociendo poco a poco esta herramienta junto con el aprendizaje de Swift en una serie de artículos publicados en este blog.

Para programar en otra plataforma distinta a MacOS X hay varias alternativas proporcionadas por la comunidad de código abierto de Swift los cuales trabajan en un compilador para varias plataformas. Actualmente el compilador funciona para el sistema operativo Linux.

Otra alternativa para ir practicando con Swift mientras aprendemos es utilizar una herramienta online creada por IBM para este objetivo. Esta herramienta es conocida como IBM Swift Sandbox y nos ofrece la posibilidad de crear y ejecutar un Playground de Swift a través de nuestro navegador web. Esta herramienta web, aunque recientemente ha solucionado algunos problemas de compatibilidad con dispositivos móviles para poder programar en cualquier momento desde cualquier lugar, presenta algunas barreras de accesibilidad relacionadas con el uso de esta herramienta por parte de usuarios de productos de apoyo por lo que se recomienda utilizar en su lugar xCode o el compilador de Swift para Linux. Esperemos que pronto esté disponible este compilador para otros sistemas operativos.

¿Qué es un Playground de Swift?

Con la creación de Swift Apple también desarrolló nuevas herramientas y conceptos que ayuden a los desarrolladores a realizar su trabajo con mayor efectividad. Una de sus creaciones es el Playground de Swift. Un Playground de Swift es un mini proyecto de aplicación que nos permite probar de forma rápida y controlada partes de código antes de que decidamos introducir ese nuevo código en nuestro proyecto de trabajo. Esto permite probar algoritmos y funciones de una forma cómoda, segura y, además, Apple ha incorporado herramientas de monitorización en los Playgrounds para obtener el rendimiento de los algoritmos ejecutados así como permitir hacer una depuración más intensa de nuestro código.

Nuestro primer programa en Swift

Supongamos que vamos a utilizar xCode para crear nuestro primer programa en Swift. Al abrir xCode aparecerá una ventana de bienvenida. En ella habrá diversos botones, entre ellos encontramos uno que nos permite empezar con un Playground de Swift de forma rápida, es el botón con el título Get started with a playground. Una vez pulsado nos pedirá que demos un nombre a nuestro fichero de Playground y seleccionar una de las plataformas para nuestro Playground: iOS, OSX o TVOS. Tras esto se nos consultará dónde guardar el fichero de nuestro Playground. Con esto xCode ya puede crear el entorno de desarrollo para que empecemos a jugar con nuestro Playground de Swift.

xCode presenta en su interfaz un area de menú con una barra de herramientas con las principales opciones de ejecución, depuración y visualización, y un area de trabajo. Los usuarios de VoiceOver pueden identificar estas zonas fácilmente si utilizan el gesto de dejar de interactuar con el item varias veces (VO+Mayúsculas+flecha arriba). Explorando la ventana desde arriba a la izquierda siguiendo la exploración hacia la derecha encontrará la barra de herramientas, identificada como Toolbar, una zona para controlar las pestañas abiertas en xcode y un area de trabajo. Este area de trabajo es identificada por VoiceOver con el título de ruta de nuestro proyecto, sería algo parecido a MyPlayground.playground split group. Interactuando con el area de trabajo encontraremos varios subcontenedores:
el editor de código, la barra de debug, la zona de debug y varias zonas relacionadas con el diseño visual de la interfaz. Esta zona puede que contenga todos, algunos o ningunos de estos subcontenedores ya que podemos modificar la visualización de xCode en las opciones del menú View de la barra de menú de xCode. Por ahora sólo nos interesa el subcontenedor donde se encuentra el editor de código, VoiceOver lo identificará con el nombre de nuestro fichero en edición; la barra de debug y el panel de debug o depuración, dentro de este panel encontraremos la opción de ejecución para nuestro Playground.

En el editor de código encontramos que ya hay escrito un código de ejemplo:


//: Playground - noun: a place where people can play
import Cocoa
var str = "Hello, playground"

Prueba a borrar todo ese código, escribir el siguiente código y pulsar el botón Execute que hay en la barra de debu:


print("Hola mundo!")

Tras ejecutar el código veremos que el texto Hola mundo! aparece en el area de depuración. ¡Enhorabuena, has creado tu primer programa en Swift!

Puede que sólo encuentres la barra de debug, identificada por VoiceOver como debug bar group y no encuentres el panel de debug, identificado por voiceOver como debug group. Esto puede suceder porque este panel de depuración se puede ocultar. Para hacer que se vea podemos entrar en la barra de debug y pulsar el botón show debug area o usar la opción de la barra de menú de xCode en el menú View o el atajo de teclado ()Comando+Mayúsculas+Y).

Un primer paso de otros muchos

Pensaréis que este programa no vale para nada pero si habéis seguido las instrucciones hasta aquí se supone que habéis adquirido los primeros conocimientos para comenzar a aprender Swift ya que ahora sabéis lo siguiente:

  • Saber escribir código y ejecutar código en un Playground
  • Usar la función print() que muestra un texto por pantalla

En futuros artículos iremos aprendiendo más cosas sobre este lenguaje de programación.

Cómo reproducir un sonido al iniciar sesión en OSX

Aunque el sistema operativo OSX posee muchas características de accesibilidad y usabilidad hay que reconocer que el número de eventos del sistema asociados a un sonido es insuficiente.

Por suerte para sus usuarios existen herramientas y aplicaciones para solucionar total o parcialmente este problema.

Sonido al iniciar la sesión

Uno de los eventos de sonido más reconocidos en el sistema operativo Windows de Microsoft es el inicio de sesión. Es habitual escuchar una fanfarria notificando que la sesión del usuario se ha abierto.

Detectar cuando sucede este evento es sencillo. Podemos lanzar una aplicación cuando el sistema operativo arranque. Para ello las preferencias del sistema posee un apartado en la que se indican qué aplicaciones se arrancarán con la sesión del usuario.

Crear aplicaciones con Automator no es demasiado complicado.

Al abrir Automator y pulsar el botón de nuevo documento debemos seleccionar aplicación como tipo de documento .

Al abrirse la interfaz de Automator nos aparece una acción ya creada con el texto Una aplicación recibe archivos y carpetas como datos de entrada. Debemos ignorar esto ya que la entrada de datos en nuestra aplicación para reproducir un sonido será ignorada.

Reproduciendo un sonido desde la terminal de OSX

Para que nuestra aplicación creada con Automator reproduzca un sonido utilizaremos un comando de la terminal de OSX que tiene esta funcionalidad. Es el comando afplay. Este comando puede reproducir sonidos en diversos formatos como AIFF, CAF o WAV.

Para poder utilizar un comando de la terminal en Automator debemos incluir una acción de tipo Ejecutar el script Shell que se encuentra dentro de la categoría utilidades de la biblioteca de acciones de Automator. Debemos añadir esta acción a nuestro flujo de aplicación de Automator, para ello debemos arrastrar el elemento Ejecutar el script Shell a la zona de acciones del flujo de trabajo (donde aparece el texto Una aplicación recibe archivos y carpetas como datos de entrada). Los usuarios de VoiceOver deben usar las funciones de arrastrar y soltar que incorpora este lector de pantallas.

Una vez que tengamos la acción añadida a nuestro flujo de Automator debemos introducir nuestro código del script para reproducir un sonido. Esto lo haremos dentro del cuadro de edición en el que por defecto viene el código cat. Debemos sustituir todo ese código por el nuestro.

Para nuestro ejemplo vamos a reproducir un sonido propio del sistema operativo. Será el fichero Blow.aiff que está en la carpeta /System/Library/Sounds/. El código sería el siguiente:

afplay /System/Library/Sounds/Blow.aiff

Una vez hecho esto podemos probar que nuestra aplicación funciona, para ello sólo debemos ejecutar nuestro flujo de trabajo desde el propio Automator utilizando la opción que se encuentra en el menú Flujo de trabajo. Nos saldrá una alerta indicando que Automator requiere acceso a los parámetros del Finder, podemos ignorar la advertencia ya que cuando demos a guardar nuestra aplicación no habrá ningún problema.

Guardamos nuestra aplicación en la carpeta de aplicaciones con el nombre que decidamos.

Ejecutando nuestra aplicación al inicio de la sesión

Con nuestra aplicación lista en la carpeta de aplicaciones ahora debemos hacer que se ejecute cada vez que el sistema se inicie. Para ello debemos ir a las Preferencias del sistema y en el panel de usuarios y grupos debemos seleccionar nuestro usuario y pulsar la pestaña items de inicio. Nos aparecerá una tabla con las aplicaciones que se abren al iniciar la sesión del usuario seleccionado y un par de botones para añadir o eliminar items de inicio.

Una vez añadida nuestra aplicación podemos cerrar las preferencias del sistema y reiniciar nuestro equipo para probar que se reproduce el sonido correctamente.

Puedes descargar el ejemplo de Sonido de inicio en formato Zip para probar y seguir el ejemplo.