Introducción a Markdown

Markdown es un lenguaje de marcado ligero diseñado para facilitar la escritura de texto formateado de manera sencilla y sin distracciones. Su propósito principal es convertir texto plano en HTML sin necesidad de aprender complejas etiquetas o reglas de maquetado.
Este formato de texto se ha convertido en una herramienta esencial para desarrolladores, escritores y creadores de contenido por su simplicidad, versatilidad y beneficios, especialmente en términos de accesibilidad y fácil mantenimiento.

Markdown fue creado por Aaron Swartz y John Gruber en 2004 con la intención de que los documentos fueran fáciles de escribir y leer en su forma original, y a la vez, que pudieran convertirse fácilmente en HTML para la web. Su estructura se basa en texto plano, lo que significa que cualquier persona puede leer y escribir Markdown con un editor de texto básico.
Markdown es ampliamente utilizado en blogs, documentación técnica, ficheros README de proyectos en GitHub, foros y mensajes en algunas redes sociales.

Dentro de las ventajas de Markdown se destacan su simplicidad y su portabilidad.
Markdown utiliza una sintaxis mínima que es fácil de aprender. No necesitas herramientas sofisticadas ni experiencia previa para comenzar a escribir.
Los archivos Markdown son simplemente texto plano, lo que significa que son extremadamente ligeros y se pueden abrir en cualquier dispositivo o sistema operativo.
Además de todo esto se ha de indicar que Markdown se puede convertir fácilmente a formatos más ricos como HTML, PDF, DOCX o incluso ePub, usando herramientas automáticas.

Cómo Escribir con Markdown

La sintaxis de Markdown es extremadamente sencilla, principalmente se utilizan algunos caracteres especiales al comienzo de línea o para indicar el comienzo y la finalización de un bloque marcado semánticamente.

Texto en Negrita y Cursiva

Para marcar en negrita un texto se usa doble asterisco.
Para marcar en  cursiva, se usa un solo asterisco.

Ejemplos:

**Este texto está en negrita**
*Este texto está en cursiva*

Encabezados

Los encabezados se crean utilizando el símbolo # al comienzo de una línea. El número de # define el nivel del encabezado (de 1 a 6).

Ejemplo:

# Encabezado de nivel 1
## Encabezado de nivel 2
### Encabezado de nivel 3

Enlaces

Los enlaces se crean utilizando corchetes para el texto y paréntesis para la URL.

Ejemplo:

Visita mi blog [Programar a ciegas](https://programaraciegas.net) para leer más artículos como este.

Listas

Se pueden crear listas ordenadas o desordenadas utilizando un marcador al comienzo de línea.

• Listas no ordenadas: Utiliza guiones (-) o asteriscos (*).
• Listas ordenadas: Usa números seguidos de un punto (1., 2., etc.).

Ejemplos:

- Elemento 1 de una lista desordenada
- Elemento 2 de una lista desordenada

1. Primer elemento de una lista ordenada
2. Segundo elemento de una lista ordenada

Imágenes

El formato que se utiliza para mostrar imágenes es similar al formato empleado para los enlaces, pero con un signo de exclamación al principio. Ejemplo:

![Texto alternativo que describe la imagen](ruta/a/la/imagen.jpg)

Bloques de Código

Para marcar bloques de código, se utiliza tres acentos graves («`) antes y después del código.

Ejemplo:

```
func saludo() {
print("¡Hola, Markdown!")
}


```

Markdown admite otras marcas para resaltar citas, maquetar datos tabulares y otros elementos semánticos.

Crear aventuras conversacionales con Inform7

Las aventuras conversacionales, también conocidas como juegos de texto interactivo, son un género de videojuegos que se originó en los primeros días de la informática. En estos juegos, los jugadores interactúan con un mundo virtual utilizando comandos escritos en lenguaje natural, lo que les permite explorar entornos, resolver acertijos y avanzar en la narrativa. Uno de los motores más populares para crear este tipo de experiencias es Inform, y en su versión más reciente, Inform7, se ha consolidado como una herramienta poderosa y accesible para desarrolladores, escritores y entusiastas del diseño de juegos narrativos.

Historia de Inform

El origen de Inform se remonta a principios de los años 90, cuando Graham Nelson creó el primer compilador de Inform como una herramienta para escribir juegos compatibles con el formato Z-machine, el mismo que fue usado para juegos clásicos de la compañía Infocom, como Zork. Este formato fue un estándar para las aventuras conversacionales, permitiendo que los juegos se ejecutaran en una amplia variedad de plataformas.

En 2006, Nelson lanzó Inform7, una nueva versión del motor, diseñada desde cero para hacer la creación de aventuras conversacionales más intuitiva y accesible. Mientras que las versiones anteriores requerían un conocimiento profundo de programación, Inform7 utiliza un lenguaje de diseño de juegos casi natural, lo que permite que los creadores describan mundos y reglas en inglés, similar a la forma en que escribirían una novela.

Características principales de Inform7

Inform7 se distingue por su enfoque basado en el lenguaje natural, lo que facilita la creación de mundos interactivos con reglas definidas sin necesidad de una programación complicada. Algunas de las características más destacadas de la herramienta son:

• Lenguaje natural: Los juegos se escriben en una sintaxis que se asemeja mucho al inglés común. Esto permite que los desarrolladores, incluso aquellos sin experiencia en programación, puedan diseñar escenarios, personajes y eventos de una manera intuitiva. Por ejemplo, una instrucción como «The kitchen is a room. The player is in the kitchen.» es perfectamente válida y crea un espaio jugable en el que el jugador puede interactuar.
• Un potente sistema de reglas: A pesar de su apariencia sencilla, Inform7 esconde un potente sistema de reglas y lógica que permite la creación de interacciones complejas. Se pueden definir comportamientos para objetos y personajes, establecer condiciones y consecuencias, y gestionar interacciones dinámicas entre elementos del juego.

• Soporte multiplataforma: Los juegos creados con Inform7 se exportan en formatos como Glulx o Z-machine, lo que permite que se ejecuten en una variedad de intérpretes y plataformas, desde ordenadores de escritorio hasta dispositivos móviles.

• Facilidad para la narrativa: Con un fuerte enfoque en la narrativa, Inform7 es ideal para escritores que desean explorar la creación de historias interactivas, permitiéndoles centrarse en la trama y los personajes en lugar de en los detalles técnicos de la programación.

Soporte para aventuras en español

Aunque Inform7 está diseñado principalmente para trabajar con el idioma inglés, existen extensiones para incluir soporte para la creación de aventuras conversacionales en español y otros idiomas. Esto ha sido posible gracias a la comunidad de desarrolladores y traductores que han trabajado en extensiones y adaptaciones que permiten que el motor entienda y genere texto en español.

La comunidad que se ha formado alrededor de Inform ha contribuido a expandir el uso de la plataforma en múltiples lenguas, enriqueciendo el panorama de aventuras conversacionales a nivel global.

¿Cómo jugar a una aventura creada con Inform7?

Para poder jugar a una aventura conversacional creada con Inform7 necesitamos un intérprete compatible con Inform como pueden ser Glulx o Frotz.

Estos intérpretes suelen utilizar la consola del sistema o la Terminal para mostrar el texto de las aventuras aunque hay versiones de GGlulx y Frotz para Windows, iPhone, Android o página Web.

Instalación del entorno de desarrollo

Actualmente Inform7 se distribuye como un IDE o entorno de desarrollo. Esta aplicación permite la creación y depuración de una aventura conversacional incluyendo la posibilidad de utilizar extensiones creadas por otros creadores o crear nuestras propias extensiones. Gracias a las extensiones Inform7 puede crecer para mostrar gráficos, reproducir sonidos o incluir otros idiomas como el español.

Puedes obtener la última versión de Inform7 desde la página del proyecto Inform7. La versión actual es la 10.1.2. Se distribuyen versiones de Inform7 para Mac, Inform7 para Windows e Inform7 para distintas versiones de Linux.

El IDE viene por defecto con soporte para idioma inglés. es necesario obtener las extensiones de Inform7 para español. En el momento de escribir este artículo la versión actual es la extensión para español R10.1.

Dentro del fichero comprimido en zip para las extensiones en español se incluye un fichero readme con instrucciones para instalar las extensiones de forma local.

Un simple ejemplo

Veamos un simple ejemplo de aventura en Inform7 utilizando las extensiones en español.

Abre el IDE de Inform7 y crea un proyecto de nueva aventura llamado Un simple ejemplo.

Cuando creas el proyecto en la ruta donde se guarda el proyecto encontrarás una carpeta llamada Un simple ejemplo.materials y el fichero Un simple ejemplo.inform.

Dentro de la carpeta Un simple ejemplo.materials debes copiar las carpetas Extensions e Inter que estaban dentro del zip de las extensiones de Inform para español. Con esto ya tenemos nuestro proyecto preparado para codificar la aventura.

En la zona de código del proyecto encontramos este código inicial:

"Un simple ejemplo" by Jonathan Chacón Barbero

Example Location is a room.

Borra ese código y escribe el siguiente en su lugar:

"Un simple ejemplo" by Jonathan Chacón Barbero (in spanish)

La sala is a room.
The description is "Estás en una sala donde no hay nada pero existe el potencial para que exista todo. Tu imaginación es el poder creador de la realidad que te rodea.".

Analizando el código

Analizando el código de este primer ejemplo encontramos lo siguiente:

• La primera línea es donde se declara el título y autor de la aventura. Además indicamos que utilizaremos la extensión para español de Inform7.

• Creamos el elemento La sala indicando que es una habitación.

• Indicamos que su descripción es un texto que describirá la sala cuando nuestro personaje esté en ella.

Si pulsamos el botón de Go para probar nuestra aventura nuestro personaje jugador aparecerá en la habitación y podremos realizar acciones como saltar, cantar o más cosas que se nos ocurran. Pero nuestra sala está vacía. Añadir un objeto a nuestra sala es tan sencillo como escribir el siguiente texto en el código de nuestra aventura:
El grano de arena is in la sala.
The description is «Un grano de arena que puede ser el comienzo de todo.».

Con esto hemos añadido un grano de arena a nuestra sala. Volvemos a usar la opción Go y podremos probar la aventura. Podemos coger el grano y aparecerá en nuestro inventario y podemos soltarlo para que aparezca de nuevo en la sala.

Compartiendo nuestra creación

Una vez terminada nuestra aventura podemos crear el fichero para que sea compartido con otras personas para que puedan jugar a la aventura de texto que hemos creado. Para ello debemos buscar en el menú Release la opción Release … que creará el fichero Un simple ejemplo.gblorb dentro de la carpeta Un simple ejemplo.materials/Release. Ese fichero gblorb es el que debemos compartir para que otras personas puedan jugar a nuestra aventura. El fichero se crea utilizando el formato Interactive fiction file format que es compatible con intérpretes como Glulxe o Frotz.

Ahora sólo queda ampliar la sala para crear un mundo más extenso donde nuestra imaginación y nuestra paciencia para aprender Inform7 serán el límite de nuestra aventura.

¿Qué Son las Aventuras Conversacionales?

Las aventuras conversacionales son un género de videojuegos donde el principal medio de interacción es el texto. En lugar de usar un control para mover personajes o seleccionar acciones a través de menús gráficos, el jugador se sumerge en una historia y toma decisiones escribiendo comandos o eligiendo opciones textuales. Este tipo de juegos se asemeja a una novela interactiva en la que el jugador tiene control sobre el curso de los acontecimientos.

Imagina que te encuentras en una habitación oscura. El juego podría describir la escena de la siguiente manera:

“Estás en una habitación oscura. A tu alrededor, apenas distingues sombras de lo que parecen ser muebles antiguos. Hay una puerta al este y una lámpara en la mesa. ¿Qué haces?”

Aquí, el jugador podría escribir algo como:

“Enciendo la lámpara”
“Salgo por la puerta este”
“Inspecciono los muebles”

Cada una de estas decisiones llevará la historia en una dirección diferente, abriendo nuevas posibilidades y desafíos.

Accesibilidad para todos

Uno de los mayores atractivos de las aventuras conversacionales es su accesibilidad. A diferencia de otros videojuegos que requieren hardware avanzado o habilidades técnicas específicas, estos juegos solo requieren un dispositivo con capacidad para leer y escribir texto. Esto los convierte en una opción inclusiva para personas con diferentes niveles de habilidad tecnológica e incluso para quienes tienen discapacidades visuales, ya que muchos de estos juegos pueden ser jugados con lectores de pantalla.

Además, debido a su bajo requerimiento de recursos, se pueden jugar en prácticamente cualquier dispositivo, desde dispositivos antiguos hasta smartphones actuales. Esto democratiza el acceso al entretenimiento interactivo, brindando una experiencia inmersiva a personas que, de otro modo, podrían verse excluidas de la mayoría de los videojuegos.

Fomentando la Imaginación y la Creatividad

Una de las características más valiosas de las aventuras conversacionales es su capacidad para estimular la imaginación. Al no depender de gráficos elaborados, el jugador debe imaginar los escenarios, personajes y situaciones descritas. Esta actividad mental, similar a la que se experimenta al leer un libro, fortalece la capacidad de visualizar y crear imágenes mentales.
La creatividad también juega un papel crucial. Las aventuras conversacionales suelen presentar desafíos y rompecabezas que requieren soluciones originales. A menudo, no basta con seguir una línea recta; los jugadores deben pensar en ideas imaginativas, explorar diferentes opciones y experimentar con diversas decisiones para avanzar en la historia. Este proceso no solo estimula el pensamiento crítico, sino que también fomenta la capacidad de encontrar múltiples soluciones a un mismo problema.

Simplicidad y Profundidad

A primera vista, estos juegos pueden parecer simples, pero esa simplicidad es engañosa. Detrás de cada aventura conversacional se esconde un mundo profundo y complejo. Las historias pueden abarcar desde misterios detectivescos hasta épicas de fantasía o relatos de ciencia ficción. A pesar de su enfoque minimalista, muchos de estos juegos presentan tramas envolventes con personajes bien desarrollados y giros narrativos sorprendentes.

La naturaleza textual de estos juegos también los hace accesibles para creadores independientes, quienes pueden enfocarse más en la narrativa y el diseño de la experiencia que en los aspectos técnicos de desarrollo gráfico. Esto ha llevado a una gran variedad de títulos, muchos de los cuales son gratuitos o de bajo costo, lo que aumenta aún más su accesibilidad.

Cómo obtener texto del usuario con AppleScript

En anteriores artículos hemos visto diversas opciones para que el usuario pueda elegir qué debe suceder al utilizar uno de nuestros scripts. Pero a veces necesitamos que el usuario nos de información que no hemos podido predecir a la hora de crear nuestro script. Esta información debe ser introducida a través de un campo de texto el cual puede ser utilizado por el usuario para aportar cualquier información que necesite nuestro script y el usuario quiera ofrecer.

Hemos visto ya el comando de AppleScript display dialog. Este comando también nos permite configurarlo para que muestre un campo de texto al usuario. Su sintaxis sería la siguiente:


display dialog "Texto de la pregunta" default answer ""

Obteniendo la respuesta

Como viene siendo habitual para poder hacer algo con la información introducida o seleccionada por el usuario debemos almacenarla en una variable. Podemos hacerlo de la siguiente forma:


set dialogResult to display dialog "?Cual es tu nombre?" default answer ""
set theName to the text returned of (dialogResult)

Primero almacenamos el resultado de la pregunta en la variable dialogResult y luego obtenemos el texto de dialogResult almacenandolo en la variable theName.

Podemos hacer estas dos operaciones en un sólo paso aunque se dificulta la lectura del código de nuestro script. El ejemplo quedaría de la siguiente forma:


set theName to the text returned of (display dialog "?Cual es tu nombre?" default answer "")

Un pequeño ejemplo

Vamos a crear un pequeño script que nos pregunte nuestro nombre y nos muestre un saludo personalizado.


set dialogResult to display dialog "?Cual es tu nombre?" default answer ""
set theName to the text returned of (dialogResult)
set sayHelloText to "Hola " & theName
display alert sayHelloText

Convertidores de texto a voz

Las personas ciegas, desde hace unas décadas, han tomado el hábito de leer utilizando grabaciones de los textos de su interés. Para ello se han utilizado multitud de formatos mediante cintas magnetofónicas, las clásicas cassettes hasta llegar a la última tecnología de sonido digital utilizando CDs en formato Daisy.

El problema de leer un texto mediante una grabación de voz era que había que esperar a que un locutor, fuese de una organización de ciegos, una persona voluntaria o una colaboración con una institución, grabase el libro en audio y se editase para su correcta lectura. Esto provocaba que un ciego debiese esperar, al menos, 12 meses desde la aparición de un libro hasta la posibilidad, no asegurada, de leerlo en cinta.

En los últimos años la tecnología ha permitido la aparición de una alternativa más que fantástica, la utilización de la síntesis de voz digital, propia de equipos informáticos, para convertir textos digitales a grabaciones sonoras.

Al principio las voces eran demasiado metálicas y monótonas, por lo que este tipo de software era utilizado por personas que realmente lo necesitasen. En la actualidad la calidad de las voces ha mejorado tanto que es utilizado por multitud de personas y servicios de atención y comunicación sonora. Es un claro ejemplo de tecnología de uso exclusivo de personas con discapacidad que se ve empujada por el creciente interés de todos los públicos por su gran utilidad.

Las voces digitales dependen de un motor de síntesis de voz, capáz de comunicarse con la tarjeta de sonido del equipo informático para reproducir los diversos sonidos encadenados que formarán las frases habladas. Además, este motor de voz tendrá encuenta reglas lingüísticas y de entonación. Pero el motor de voz necesita de unos patrones sonoros o de pequeñas grabaciones de pronunciación que permitan definir el tono, el acento y la sonoridad final que tendrá la grabación, a este conjunto de datos se le conoce como una voz para un motor de síntesis.

En los sistemas operativos pertenecientes a la familia Microsoft Windows existen unas librerías para poder utilizar diversos motores de voz de forma sencilla para aumentar la compatibilidad entre software. Estas librerías son conocidas como SAPI (Speech Application Program Interface).

Puedes obtener el motor de síntesis de voz SAPI 5.1 de la página de descarga de SAPI 5.1 aunque en las versiones actuales de Microsoft Windows, más concretamente a partir de la versión de Windows XP, SAPI 5 ya viene incluida en el sistema.

En idioma castellano hay multitud de voces gratuítas para el formato SAPI 4. Para Microsoft Windows XP/2003/Vista (últimas versiones de este sistema operativo) se utiliza, de serie, el formato SAPI 5.1. Hay pocas voces gratuítas para este formato aunque podemos utilizar la voz de Isabel para SAPI 5.1. Hay compañías, como Loquendo o Nuance, que se dedican a crear voces de calidad para terminales de atención al cliente, puntos de venta automatizados o sistemas de megafonía para estaciones de transporte y aeropuertos.

En los equipos con MacOS X, el sistema operativo de Apple para sus equipos portátiles y de sobremesa, existe integrado en el sistema un motor de voz genérico que puede ser utilizado por diversos programas y servicios del sistema. Actualmente se incluyen varias voces con diversos acentos y efectos sonoros aunque el problema es que todas las voces están en inglés. Se pueden adquirir voces para otros idiomas.

En GNU-Linux tenemos varios motores o librerías de síntesis de voz como Festival, Mbrola o una versión para GNU-Linux de Eloquence. Todos estos motores de voz se utilizan en el sistema a través de un interfazque comunique las aplicaciones del sistema con el motor de voz, un ejemplo de este tipo de interfaz es Gnome-speech.

En un equipo informático con un motor de síntesis de voz instalado, con sus correspondientes voces, podemos utilizar algunos programas especializados en convertir textos digitales a ficheros de audio. Son los programas conocidos como conversores de texto a voz. Estos programas nos permiten convertir largos textos en formato Word, TXT, RTF o PDF en un conjunto de ficheros de sonido en formato MP3 que podemos escuchar con nuestro reproductor portatil de música mientras caminamos o utilizamos el transporte público.

Una opción sencilla y gratuíta es el programa DSpeech, que funciona tanto con SAPI 4.0 y SAPI 5.1 permitiendo convertir textos a formato WAV o MP3. Puedes obtener DSpeech en castellano y valenciano de la web de Tifloinforma. Su instalación es muy sencilla ya que sólo debes descomprimir el fichero comprimido en la carpeta donde quieras guardar DSpeech y ejecutar el archivo .EXE que hay en su interior.

Para MacOS X existe el programa Ghost reader. Este programa nos permite convertir cualquier documento de texto que pueda abrir la vista previa en un fichero mp3 o m4b utilizando las voces del sistema o unas voces compatibles con este programa e incluir el resultado de la conversión directamente en nuestra librería de iTunes para poder leer el documento en nuestro iPod, iPhone o dispositivo móvil de Apple.