Dibujar diagramas con PlantUML

El proyecto de software libre PlantUML busca proporcionar un mecanismo para dibujar diagramas mediante un código sencillo en texto.

PlantUML utiliza la plataforma Java para su herramienta de generación de diagramas. Esto a diferencia de Mermaid facilita que la herramienta  pueda ejecutarse localmente aunque también se dispone de un servicio de PlantUML onLine.

Instalación de PlantUML

La instalación de PlantUML en sistemas MacOS y Linux es muy sencilla ya que se encuentra disponible en varios repositorios.

Por ejemplo instalar PlantUML en MacOS es muy sencillo si ya se posee la herramienta HomeBrew. Sería tan sencillo como ejecutar el siguiente comando en la Terminal de Mac:

brew install plantuml
Una vez instalada simplemente en la Terminal ejecutaríamos el comando plantuml pasando como parámetro el fichero de texto con la información de nuestro diagrama.

Ejemplo de diagrama de estado

Como vimos en el artículo sobre dibujar diagramas con Mermaid tenemos un diagrama de estado que representa los posibles estados de un ser vivo.

En PlantUML el código sería algo como:

@startuml
[*] --> Nacer
Nacer -> Crecer
Crecer -> Reproducirse
Reproducirse -> Envejecer
Envejecer -> Morir
Morir --> [*]
@enduml

El diagrama generado tiene el siguiente aspecto:

Diagrama de estados generado con PlantUML

Además PlantUML permite exportar a un formato ASCII en texto que puede resultar interesante para leer con líneas braille.

El anterior diagrama tiene el siguiente aspecto en ASCII:

,------.                                                  
|*start|
|------|
`------'
|
|
,-----. ,------. ,------------. ,---------. ,-----.
|Nacer| |Crecer| |Reproducirse| |Envejecer| |Morir|
|-----|---|------|---|------------|---|---------|--|-----|
`-----' `------' `------------' `---------' `-----'
|
,----.
|*end|
|----|
`----'

Conclusiones

En conclusión podemos indicar que PlantUML proporciona una herramienta local sencilla y rápida para generar cierto tipo de diagramas. Proporciona algunos mecanismos de personalización que la hacen interesante para usuarios ciegos que dispongan de línea braille aunque su sintaxis quizás pueda ser más engorrosa que Mermaid para algunos tipos de diagramas de ingeniería.

Indentar el código en Visual studio Code

La herramienta de edición de código Visual studio code o más conocido como VSCode proporciona multitud de atajos de teclado y herramientas para hacer el trabajo de codificación más sencillo.

Ya vimos lo importante que es indentar bien el código fuente para que nuestro código sea más limpio y legible.

Una buena herramienta de edición de código debe incorporar algún mecanismo que nos permita corregir los errores de indentación de nuestro código y VSCode incorpora un atajo de teclado para ello.

Primero deberíamos seleccionar todo el código de nuestro fichero y luego pulsar el atajo de teclado correspondiente.

En el caso de Windows este atajo es Mayúsculas+Alt+F.

En el caso de MacOS el atajo es Mayúsculas+Opción+F.

Por último en el caso de Linux es Control+Mayúsculas+I.

Si tomamos como hábito antes de cerrar un fichero de código el corregir el nivel de indentación del mismo nos aseguraremos que todo nuestro código posee una buena indentación que mejora su legibilidad.

Controlar qué programas se inician al arrancar tu Mac

En MacOS, como en otros sistemas operativos, existen varias formas en las que una aplicación puede solicitar ejecutarse al iniciar sesión.

Un usuario puede controlar qué aplicaciones han solicitado arrancarse junto con el sistema. Para ello sólo debemos ir a las Preferencias del sistema, entrar en el panel de Usuarios y grupos y en el selector de pestaña activar la pestaña llamada Items de inicio. En esa pestaña encontraremos una tabla con todas las aplicaciones que se arrancarán cuando se inicie la sesión de un usuario.

El problema es que este panel sólo da acceso a modificar la configuración de arranque de un usuario en concreto y sólo controla las aplicaciones que hayan solicitado el arranque con la sesión de un usuario. Pero si se han instalado servicios o aplicaciones que afectan a todo el sistema no aparecerán en esa tabla.

Finder al rescate

Lo interesante de utilizar un sistema operativo como MacOS es que todas las configuraciones son ficheros o elementos en carpetas. Sólo hay que conocer en qué carpeta buscar y qué podemos encontrar en esas carpetas.

Para poder examinar esas carpetas simplemente debemos ir a Finder y en la barra de menú buscar el menú Ir a y activar la opción Ir a la carpeta … e introducir la ruta a la carpeta que queremos examinar.

 

Servicios para drivers y servicios de seguridad

En MacOS, como en Unix, existen unos servicios especiales que se denominan daemons. Estos servicios carecen de interfaz de usuario y suelen encargarse de que algo funcione bien. Algunos de estos daemons se encargan de mantener la seguridad en las comunicaciones, que la cámara, el micrófono u otros periféricos multimedia estén siempre disponibles para cuando los necesite el usuario no haya ningún tipo de demora.

Todos estos daemons declaran su arranque al iniciar nuestro equipo en una carpeta determinada. En MacOS, por motivos de seguridad, los daemons incluidos por Apple tienen una carpeta segura y específica y los servicios de terceros utilizan otra carpeta.

Para los daemons de Apple tenemos la carpeta /System/Library/LaunchDaemons.

En esa carpeta encontraremos diversos elementos que lo que hacen es iniciar el daemon para que el sistema mantenga un control. Es recomendable no tocar en esta carpeta sin tener una copia de seguridad previa ya que estos daemons permiten usar bastantes elementos del hardware de nuestro equipo y puede que si rompemos algo tengamos que iniciar una sesión en modo a prueba de fallos y la accesibilidad puede no estar disponible.

Para los daemons de compañías distintas a Apple tenemos la carpeta /Library/LaunchDaemons

En esta carpeta podemos encontrar servicios que arrancan el soporte de análisis de Adobe, los servicios de configuración de auriculares USB, servicios de actualización de software de Microsoft o Google o el servicio de arranque rápido de Zoom.

Para hacer que un servicio deje de arrancar con nuestro equipo simplemente debemos sacarlo de la carpeta /Library/LaunchDaemons

Servicios de arranque de aplicaciones

Puede que un servicio lo que realice es arrancar una aplicación. Esto sucede por ejemplo con las aplicaciones de OneDrive, Dropbox, Amazon Music o Amazon Chime.

Estos servicios de arranque de aplicaciones se localizan en dos carpetas:

La primera afecta a todos los usuarios y su ruta es /Library/LaunchAgents

La segunda carpeta es para cada usuario en concreto y la ruta para el usuario actual es ~/Library/LaunchAgents

Para evitar que un programa arranque simplemente deberemos borrar el servicio que lo arranca de la carpeta de launch-agent correspondiente.

Obtener el listado de voces disponibles para el comando say en MacOS

El comando say se utiliza en MacOS tanto desde la terminal como desde AppleScript para hacer que una de las voces instaladas en el sistema operativo lea una información.

Vimos un ejemplo en la introducción a AppleScript en el que hacíamos hablar a nuestro Mac desde un AppleScript.

Usando say desde la Terminal

Usar el comando say desde la terminal es bastante sencillo. Vamos a ver el típico ejemplo de Hola mundo con la Terminal.

Abre la Terminal de Mac, está en la carpeta Aplicaciones/Utilidades

Una vez abierta escribe el siguiente comando:

say '¡Hola mundo!'

Al ejecutar el comando el equipo verbalizará el mensaje con la voz por defecto del sistema.

Si queremos usar una voz en concreto tenemos que especificarlo utilizando su nombre precedido del indicador -v. Por ejemplo utilicemos la voz de Monica en el ejemplo anterior:

say -v Monica '¡Hola mundo!'

El problema aparece cuando no conocemos el nombre de la voz concreta que queremos utilizar. Para ello el mismo comando say nos ofrece la solución.

Al usar el comando say de la siguiente forma se mostrará un listado de voces en la Terminal:

say -v \?

El listado será algo como lo siguiente:

  • Alex en_US # Most people recognize me by my voice.
  • Alice it_IT # Salve, mi chiamo Alice e sono una voce italiana.
  • Alva sv_SE # Hej, jag heter Alva. Jag är en svensk röst.
  • Amelie fr_CA # Bonjour, je m’appelle Amelie. Je suis une voix canadienne.
  • Anna de_DE # Hallo, ich heiße Anna und ich bin eine deutsche Stimme.
  • Carmit he_IL # שלום. קוראים לי כרמית, ואני קול בשפה העברית.
  • Damayanti id_ID # Halo, nama saya Damayanti. Saya berbahasa Indonesia.
  • Daniel en_GB # Hello, my name is Daniel. I am a British-English voice.
  • Diego es_AR # Hola, me llamo Diego y soy una voz española.
  • Ellen nl_BE # Hallo, mijn naam is Ellen. Ik ben een Belgische stem.
  • Fiona en-scotland # Hello, my name is Fiona. I am a Scottish-English voice.
  • Fred en_US # I sure like being inside this fancy computer
  • Ioana ro_RO # Bună, mă cheamă Ioana . Sunt o voce românească.
  • Joana pt_PT # Olá, chamo-me Joana e dou voz ao português falado em Portugal.
  • Jorge es_ES # Hola, me llamo Jorge y soy una voz española.
  • Juan es_MX # Hola, me llamo Juan y soy una voz mexicana.
  • Kanya th_TH # สวัสดีค่ะ ดิฉันชื่อKanya
  • Karen en_AU # Hello, my name is Karen. I am an Australian-English voice.
  • Kyoko ja_JP # こんにちは、私の名前はKyokoです。日本語の音声をお届けします。
  • Laura sk_SK # Ahoj. Volám sa Laura . Som hlas v slovenskom jazyku.
  • Lekha hi_IN # नमस्कार, मेरा नाम लेखा है. मैं हिन्दी में बोलने वाली आवाज़ हूँ.
  • Luca it_IT # Salve, mi chiamo Luca e sono una voce italiana.
  • Luciana pt_BR # Olá, o meu nome é Luciana e a minha voz corresponde ao português que é falado no Brasil
  • Maged ar_SA # مرحبًا اسمي Maged. أنا عربي من السعودية.
  • Mariska hu_HU # Üdvözlöm! Mariska vagyok. Én vagyok a magyar hang.
  • Mei-Jia zh_TW # 您好,我叫美佳。我說國語。
  • Melina el_GR # Γεια σας, ονομάζομαι Melina. Είμαι μια ελληνική φωνή.
  • Milena ru_RU # Здравствуйте, меня зовут Milena. Я – русский голос системы.
  • Moira en_IE # Hello, my name is Moira. I am an Irish-English voice.
  • Monica es_ES # Hola, me llamo Monica y soy una voz española.
  • Nora nb_NO # Hei, jeg heter Nora. Jeg er en norsk stemme.
  • Paulina es_MX # Hola, me llamo Paulina y soy una voz mexicana.
  • Rishi en_IN # Hello, my name is Rishi. I am an Indian-English voice.
  • Samantha en_US # Hello, my name is Samantha. I am an American-English voice.
  • Sara da_DK # Hej, jeg hedder Sara. Jeg er en dansk stemme.
  • Satu fi_FI # Hei, minun nimeni on Satu. Olen suomalainen ääni.
  • Sin-ji zh_HK # 您好,我叫 Sin-ji。我講廣東話。
  • Tessa en_ZA # Hello, my name is Tessa. I am a South African-English voice.
  • Thomas fr_FR # Bonjour, je m’appelle Thomas. Je suis une voix française.
  • Ting-Ting zh_CN # 您好,我叫Ting-Ting。我讲中文普通话。
  • Veena en_IN # Hello, my name is Veena. I am an Indian-English voice.
  • Victoria en_US # Isn’t it nice to have a computer that will talk to you?
  • Xander nl_NL # Hallo, mijn naam is Xander. Ik ben een Nederlandse stem.
  • Yelda tr_TR # Merhaba, benim adım Yelda. Ben Türkçe bir sesim.
  • Yuna ko_KR # 안녕하세요. 제 이름은 Yuna입니다. 저는 한국어 음성입니다.
  • Yuri ru_RU # Здравствуйте, меня зовут Yuri. Я – русский голос системы.
  • Zosia pl_PL # Witaj. Mam na imię Zosia, jestem głosem kobiecym dla języka polskiego.
  • Zuzana cs_CZ # Dobrý den, jmenuji se Zuzana. Jsem český hlas.

Conoce el nivel de indentación del texto con VoiceOver de forma automática

VoiceOver para MacOS es incapaz de conocer y notificar el nivel de indentación del texto. Por esa razón en su día desarrollé un script que puede averiguar y verbalizar esta información. 

Este script está disponible en el repositorio de Indentation line for VoiceOver.

Usando el script manual

En este repositorio está el fichero speakIndentationLine que contiene el AppleScript para que VoiceOver verbalice el nivel de indentación del último texto verbalizado por el lector de pantallas.

Este script debía asociarse a un atajo de teclado de VoiceOver para poderlo utilizar de forma cómoda pero incluso así existía la posibilidad de perdernos un cambio de indentación debido a que debíamos revisar manualmente cada línea de un texto para conocer si había algún cambio en el nivel de indentación.

Automatizando la funcionalidad

Para solucionar el problema se ha creado un nuevo script en el repositorio llamado checkIndentationService que ejecuta la función de verificar el nivel de indentación de forma automática y sólo se verbaliza cuando se han producido cambios en el nivel de indentación.

Para que este script se ejecute de forma apropiada es necesario exportar el script como aplicación y asegurarnos que en la conversión esté marcada la opción Permanecer abierto tras el gestor de ejecución. Puedes leer sobre el proceso en el artículo Convertir un AppleScript en una aplicación para MacOS.

Una vez convertido tendremos la opción de abrir la aplicación checkIndentationService y VoiceOver verbalizará cada nuevo cambio de nivel de indentación de un texto.

Recuerda leer el fichero Readme.md del repositorio para saber cómo cambiar la voz que se utiliza para hacer las notificaciones.

Atajos de teclado útiles en XCode

A la hora de mejorar nuestra productividad utilizando una herramienta lo ideal es conseguir que algunas tareas repetitivas o la activación de algunas funciones que ofrece la herramienta se consiga realizar en el menor tiempo posible. Esta mejora en la productividad la podemos conseguir utilizando atajos de teclado.

Xcode es el entorno de desarrollo de Apple para sus distintas plataformas de software. Ofrece multitud de funciones y posee multitud de atajos de teclado. Incluso nos ofrece la oportunidad de crear atajos nuevos, redefinirlos o mejorar su comportamiento.

En este artículo comparto alguno de los atajos de teclado que más utilizo con esta herramienta.

Moverse entre zonas del proyecto

A veces lo ideal para encontrar algo es saber cómo moverse rápidamente. Cuando tenemos un proyecto con muchos archivos esto es indispensable.

Saltar entre archivos de un grupo

Control + 5

Al usar este atajo de teclado desde un editor nos aparecerá una lista de todos los ficheros que están contenidos en el mismo grupo que el fichero que estemos editando en ese momento. De esta forma podemos saltar entre ficheros agrupados de forma rápida.

Saltar entre elementos del fichero actual

Control + 6

Con este atajo de teclado accederemos a una lista de todas las declaraciones de variables, métodos, marcas y demás símbolos del fichero que estemos editando. De esta forma podemos ver de un vistazo todo lo que hay y saltar al punto que necesitemos.

Saltar a una línea

Comando + L

Con este atajo podremos mover el foco de edición a una línea concreta del fichero que estemos editando.

Abrir rápidamente

Mayúscula + Comando + O 

Este comando nos abrirá un popup para encontrar rápidamente algún elemento del proyecto sea un fichero, una clase o la declaración de un método.

Lo interesante de este comando es que cuando estamos en el elemento que queremos abrir si pulsamos enter lo abriremos en el editor principal pero si pulsamos Option+Enter lo abriremos en el editor secundario

Mostrar en el explorador de proyecto

Mayúscula + Comando + J

Con este atajo se abrirá el panel del explorador de proyecto focalizando el fichero que tengamos abierto en el editor. Esto es útil para cuando el depurador o el compilador nos lleva a un fichero de código donde se localiza un error o warning. De esta forma nos podemos orientar en el árbol de ficheros del proyecto de forma más clara.

Controlando el espacio

A veces la pantalla de Xcode se llena de demasiada información o elementos y no nos permite concentrarnos o ver con claridad qué estamos haciendo.

Para gestionar las áreas de visualización de Xcode tenemos los siguientes atajos.

Ocultar/mostrar el inspector

Opción + Comando + 0

El inspector de objetos es un panel muy útil cuando estamos utilizando Interface Builder, añadiendo idiomas a los recursos o gestionando la dependencia de ficheros entre targets. El resto del tiempo de uso de Xcode no lo utilizamos para nada. Por esta razón viene bien saber qué se puede ocultar y mostrar fácilmente.

Mostrar y ocultar el área de depuración

Comando + Mayúsculas + Y

El área de depuración ocupa un espacio importante y es una zona que sólo utilizamos cuando estamos realizando pruebas. Por esta razón también es interesante ocultarla cuando no se utilice.

Mover el foco al editor

Control + Comando + Mayúsculas + Enter

Con este atajo de teclado el editor se ampliará para ocupar todo el espacio disponible

Esto viene bien cuando, por ejemplo, al intentar leer código con VoiceOver notamos que no lee líneas de código completas. Esto se debe a que algún otro panel o área de Xcode está limitando el área de visualización del editor.

Pausar/reanudar visión del canvas

Comando + Opción + P

A veces nos interesa que la simulación del cambas de la vista SwiftUI se refresque o nuestro equipo va corto de recursos y es mejor desactivar esta simulación.

Ocultar/mostrar canvas

Comando + Opción + Enter

Cuando estamos editando una View de SwiftUI puede que nos interese ocultar el canvas de previsualización para ahorrar recursos.

Conclusión

Con esta lista de atajos podemos mejorar sustancialmente nuestra productividad en Xcode pero hay muchos más atajos e incluso podemos crear los nuestros gracias a las opciones de personalización de MacOS y Xcode.

Merece la pena explorar un poco esta gran herramienta que ofrece tantas posibilidades.