Introducción a Javascript

Cuando abrimos una página web en el navegador, éste interpreta el código HTML para entender qué contenido hay y qué significa cada parte. Después aplica el CSS para definir el aspecto visual de ese contenido. Pero una página web moderna no solo necesita estructura y presentación: en muchos casos también necesita comportamiento, lógica e interacción. Ahí es donde entra JavaScript.

JavaScript es el lenguaje que permite que una página web responda a acciones del usuario, modifique contenidos, valide formularios, cargue información sin recargar toda la página o cambie el estado de distintos elementos de la interfaz. Es, por tanto, la parte de la Web que aporta funcionalidad y dinamismo.

Qué es JavaScript

JavaScript es un lenguaje de programación. A diferencia de HTML y CSS, que no son lenguajes de programación, Javascript sí puede ejecutar comandos y funciones de lógica. Esto no implica que Javascript no tenga que relacionarse con HTML o CSS. Con HTML describimos el contenido y su estructura. Con CSS definimos la presentación visual. Con JavaScript programamos el comportamiento de la página.

Dónde se puede usar Javascript

Aunque mucha gente identifica JavaScript solo con el navegador, el lenguaje también se puede utilizar fuera de la Web en otros entornos como scripts en la Terminal de Linux o MacOçS, como lenguaje de programación para servidores con NodeJS o para programar servicios para la Nube.

El estándar del lenguaje se denomina ECMAScript, y JavaScript es su implementación más conocida en la actualidad.

Ejemplo básico en JavaScript

A continuación tenemos un ejemplo de una página HTML con un botón y un pequeño fragmento de JavaScript:

<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Mi primera página con JavaScript</title>
</head>
<body>
<h1>Mi primera página con JavaScript</h1>
<p id="mensaje">Todavía no ha pasado nada.</p>
<button id="boton">Pulsa aquí</button>

<script>
document.getElementById("boton").addEventListener("click", function () {
document.getElementById("mensaje").textContent = "Has pulsado el botón.";
});
</script>
</body>
</html>

Si guardamos ese contenido en un fichero con extensión .html y lo abrimos con el navegador, veremos una página con un botón. Al pulsarlo, el texto del párrafo cambiará.

Ese cambio no lo hace HTML ni lo hace CSS. Lo hace JavaScript.

Qué está ocurriendo en el ejemplo

Aunque a primera vista pueda parecer mucho código, en realidad están pasando pocas cosas.

Primero tenemos este párrafo:

<p id="mensaje">Todavía no ha pasado nada.</p>

Ese párrafo tiene un atributo id con el valor mensaje. Ese identificador nos permite localizar el elemento desde JavaScript.

Después tenemos este botón:

<button id="boton">Pulsa aquí</button>

También tiene un id, en este caso boton.

Y por último aparece el bloque script:

<script>
document.getElementById("boton").addEventListener("click", function () {
document.getElementById("mensaje").textContent = "Has pulsado el botón.";
});
</script>

Ese bloque contiene código JavaScript que el navegador ejecuta. La instrucción busca el botón, escucha el evento de pulsación (click) y, cuando ese evento ocurre, modifica el texto del párrafo.

La etiqueta <script>

La forma más habitual de incluir JavaScript en una página HTML es mediante la etiqueta <script>.

Puede escribirse directamente dentro del propio documento HTML:

<script>
console.log("Hola desde JavaScript");
</script>

O bien enlazarse desde un fichero externo:

<script src="app.js"></script>

En la práctica, cuando el código crece, lo normal es utilizar un fichero independiente. Esto facilita el mantenimiento, permite reutilizar código y evita mezclar demasiadas responsabilidades en el HTML.

JavaScript y el DOM

Cuando JavaScript trabaja con una página HTML, normalmente no “ve” el fichero como texto plano, sino como una estructura interna que el navegador ha construido en memoria.

A esa representación se la suele llamar DOM (Document Object Model).

Utilizando el DOM, JavaScript puede realizar diversas funciones como buscar y manipular elementos de la página, añadir y eliminar elementos, reaccionar a eventos provocados por el usuario o por el navegador…

JavaScript no sustituye a HTML

Una idea importante al empezar es que JavaScript no debería utilizarse para suplir una mala estructura HTML.

Primero conviene tener un documento HTML bien organizado y semántico. Después CSS se ocupa de la presentación. Y finalmente JavaScript añade comportamiento.

Si se invierte ese orden, es fácil terminar con páginas difíciles de mantener, menos accesibles y más frágiles.

En artículos anteriores indicamos que HTML describe contenido y CSS describe presentación. Siguiendo esa idea de separar contenido, diseño y funcionalidad, Javascript debe añadir funcionalidad sin romper la semántica del documento. Esta separación de responsabilidades hace que la página sea más clara, con un mejor mantenimiento y más robusta.

JavaScript no debe ser intrusivo ni imprescindible

Aunque JavaScript aporta mucha potencia a una página web, conviene usarlo con cierta prudencia.

Una mala práctica bastante común consiste en construir páginas que dependen completamente de JavaScript para funcionar, incluso en tareas básicas como mostrar contenido, seguir enlaces o enviar un formulario. Cuando esto ocurre, la página se vuelve dependiente de Javascript y, en muchos casos, menos accesible.

Lo apropiado es que HTML proporcione una base sólida por sí mismo. Es decir, que la estructura del documento, los enlaces, los textos y la información principal existan ya en el marcado. Después, JavaScript puede enriquecer esa base con comportamiento adicional: validar datos en el navegador, mostrar u ocultar partes de la interfaz, actualizar contenidos o responder a acciones del usuario.

Con esto se mantiene la idea de que JavaScript debería mejorar la experiencia, no convertirse en un obstáculo.

También conviene evitar un uso intrusivo del lenguaje. Por ejemplo, no es buena idea abrir ventanas inesperadas, cambiar el foco sin necesidad, alterar el contenido de manera brusca sin avisar o interceptar comportamientos normales del navegador si no hay un motivo claro. Todas esas prácticas pueden desorientar a muchas personas usuarias y hacer que la navegación resulte confusa.

Introducción a HTML

Al abrir una página web con nuestro navegador lo que está haciendo la aplicación del navegador web es, principalmente, interpretar un fichero con extensión HTM o HTML.

HTML son las siglas de HyperText Markup Language (Lenguaje de Marcado de Hipertexto). Es importante resaltar lo de lenguaje de marcado: HTML no es un lenguaje de programación. No “ejecuta” lógica como lo haría Swift, Python o JavaScript, sino que marca el contenido para indicar diversa información semántica como qué título tiene la página, en qué idioma está el contenido principal, qué elementos hay en la página (párrafos, imágenes, controles de formulario, etc) indicando qué es cada trozo de contenido en la página.

HTML se usa principalmente para estructurar contenido en la Web, aportar semántica en los contenidos y ser el nexo de unión para otras tecnologías de la web como CSS y Javascript.

Ejemplo básico en HTML

Un ejemplo básico del código HTML de un fichero .htm podría ser el siguiente:

<!doctype html>

<html>

  <head>

    <title>Mi primera página</title>

  </head>

  <body>

    <h1>Mi primera página</h1>
    <p>Este es un párrafo con información.</p>
    <a href=»https://programaraciegas.net»>Visitar el blog</a>

  </body>

</html>

 

Si copiamos el contenido anterior en un fichero con la extensión .htm, por ejemplo «prueba.htm» y lo abrimos con nuestro navegador web veremos lo que hemos creado.

Partes de un fichero HTML

Un archivo HTML suele tener extensión .html (por ejemplo, index.html). Aunque puede contener muchas secciones, la estructura base se repite casi siempre.

Declaración del tipo de documento

La primera línea típica es:

<!doctype html>

Esta declaración indica al navegador que el documento debe interpretarse como HTML moderno.

Elemento raíz: <html>

Todo el contenido se engloba dentro de <html>…</html>:

<!doctype html>
<html>
...
</html>

Cabecera del documento: <head>

La sección <head> contiene metadatos: información para el navegador y para otros sistemas, pero que normalmente no se muestra como contenido principal en pantalla.

Ejemplo:

<head>
<meta charset="utf-8">
<title>Introducción a HTML</title>
</head>

La línea <meta charset=»utf-8″> indica la codificación de caracteres (muy importante para tildes y caracteres especiales).

La línea <title> define el título que suele verse en la pestaña del navegador.
Cuerpo del documento: <body>

En <body> va el contenido visible o “principal”: textos, enlaces, imágenes, formularios, etc.

<body>
<h1>Introducción a HTML</h1>
<p>HTML estructura el contenido de una página web.</p>
</body>

Las etiquetas HTML

Una etiqueta (tag) es una marca que indica al navegador qué tipo de elemento es un fragmento de contenido.

La mayoría de elementos HTML se representan con una sintaxis básica consistente en un nombre de etiqueta encerrado entre los signos menor que y mayor que (< y >).

<hr>

Algunas etiquetas requieren otra etiqueta de cierre. Esta etiqueta de cierre suele ser la misma etiqueta pero su nombre comienza con el símbolo de barra (/). Entre la etiqueta de apertura y la de cierre va el contenido.

<p>Esto es un contenido.</p>

Además, hay etiquetas que incluyen atributos para poder realizar ciertas acciones.

<a href=»https://programaraciegas.net»>
Visita Programar a ciegas
</a>

El atributo href permite indicar qué dirección URL se abrirá el enlace identificado por la etiqueta a.

Color Asset Creator

La gestión de colores en proyectos para iOS, iPadOS, macOS o visionOS ha evolucionado mucho en los últimos años. Apple introdujo los color assets como parte de los catálogos de recursos de Xcode, ofreciendo una forma estructurada y escalable de definir la paleta de una aplicación. Sin embargo, la interfaz gráfica actual de Xcode para crear y editar estos recursos presenta graves problemas de accesibilidad para desarrolladores ciegos.

La gestión de colores desde la interfaz gráfica de XCode implica interactuar con controles visuales complejos, selectores de color, paneles flotantes y zonas de arrastre que no siempre exponen correctamente su información a las APIs de accesibilidad. Esto provoca dificultades a la hora de crear o modificar conjuntos de colores o de definir comportamientos en los conjuntos creados.

Con el proyecto Color Asset Creator se propone una solución concreta: una extensión de Xcode diseñada específicamente para crear color assets de forma accesible, aprovechando una interfaz basada en código y controles estándar que sí son compatibles con tecnologías de apoyo.

En lugar de depender del panel visual de Xcode, la extensión ofrece una interfaz basada en formularios y controles estándar que se integran con VoiceOver y con el resto de tecnologías de apoyo. De este modo, un desarrollador ciego puede definir un nuevo color con nombre de forma estructurada, introducir los valores de sus componentes de color mediante campos de texto y controles accesibles y generar los ficheros y entradas necesarias en el catálogo de recursos del proyecto.

Qué son los color assets en Xcode

En XCode, los catálogos de recursos (asset catalogs) permiten agrupar imágenes, colores, símbolos y otros elementos bajo una estructura común, normalmente en ficheros Assets.xcassets. Dentro de estos catálogos, los color assets son definiciones de color con nombre que pueden utilizarse en cualquier parte de la app, tanto en código como en interfaces visuales.

En lugar de definir colores “al vuelo” con valores RGB o hexadecimales dispersos por el código, los color assets permiten centralizar la paleta en un único lugar. Cada entrada de color se guarda como un conjunto (.colorset) con su correspondiente definición interna, tal y como describe la documentación oficial de Apple sobre los tipos de color.

Estos color assets pueden adaptarse a diferentes condiciones: por ejemplo, ofrecer variantes específicas para modo claro y modo oscuro, o para distintos espacios de color. De este modo, el mismo nombre de color se ajusta automáticamente según el contexto visual del sistema, lo que facilita la creación de interfaces coherentes, accesibles y visualmente consistentes.

Eliminar todas las descargas de iCloud drive en MacOS

El servicio de almacenamiento en la nube incluido en los dispositivos de Apple, más conocido como iCloud drive, ofrece una completa integración en todo el entorno Apple. Incluso permite el acceso desde la Web.

Cuando se activa iCloud Drive en macOS, el sistema puede conservar una copia local de los archivos para un acceso más rápido, o dejar solo un enlace a ese archivo y mantener el contenido real en la nube para ahorrar espacio.
En ocasiones podemos querer forzar que macOS elimine las copias descargadas en el disco sin borrar nada de iCloud para recuperar espacio en nuestro Mac.

Podemos abrir la carpeta de iCloud en el Finder e ir uno a uno por cada archivo, abrir el menú contextual y activar la opción eliminar descarga. Pero esta tarea se puede complicar si tenemos multitud de carpetas y sub carpetas y miles de archivos almacenados en iCloud.

La Terminal al rescate

Desde la Terminal de MacOS podemos realizar operaciones complejas que no tienen forma de ser realizadas desde la interfaz gráfica de MacOS.

Si abrimos la Terminal de MacOS y ejecutamos el siguiente comando se realizará esa limpieza de todos los archivos de iCloud de nuestro equipo:

brctl evict ~/Library/Mobile\ Documents/com~apple~CloudDocs

Comando brctl

brctl (abreviatura de bird control) es una utilidad incluida en macOS que permite interactuar con los servicios de iCloud a bajo nivel.

El subcomando evict solicita al servicio que “evacúe” (evict) las copias locales de los archivos indicados: el archivo local se sustituye por un marcador que representa el ítem en iCloud, y el contenido real queda solo en la nube.

Desde el punto de vista del usuario, el archivo sigue apareciendo en Finder, pero macOS no mantiene su contenido en disco; si se abre de nuevo, el sistema lo descargará cuando sea necesario.

Aún más fácil con AppleScript

Puede que abrir la Terminal no sea del agrado de todos los usuarios por su aparente complejidad. Para evitar esto podemos crear un AppleScript con el siguiente contenido:

on run
    set icloudPath to POSIX path of (path to library folder from user domain) & "Mobile Documents/com~apple~CloudDocs"
    set command to "brctl evict " & quoted form of icloudPath
    do shell script command
end run

Ejecutando este AppleScript evitaremos usar la Terminal. Además, lo podemos convertir en una aplicación para crear automatizaciones.

Congreso PyConES 2025 y accesibilidad para Python

Del 17 al 19 de octubre se celebrará en Sevilla una nueva edición de PyConES, la gran conferencia anual de la comunidad Python en España. Tres días intensos repletos de charlas técnicas, talleres, networking y, este año, también un espacio para la accesibilidad digital, un tema que debería ser parte esencial de cualquier evento tecnológico.
PyConES es mucho más que una conferencia técnica. Es un lugar de encuentro donde la comunidad se reúne para aprender, compartir experiencias y construir juntos el futuro del ecosistema Python.
Este año, la ciudad de Sevilla será el escenario perfecto para acoger a desarrolladores, empresas y entusiastas de todo el país (y más allá), en un ambiente abierto y colaborativo.

Accesibilidad en el evento

En el evento participaré con la charla titulada Accesibilidad e interfaces con Python, libres para codificar y libres para usar en la que mostraré técnicas básicas para crear interfaces de usuario con QT y WX que incorporen accesibilidad.

Código de programación más accesible con SIMAE

En el mundo de las tecnologías de apoyo para personas con discapacidad visual, pocas iniciativas resultan tan innovadoras y útiles como SIMAE, el Sistema de Marcado Estructural de Código Fuente para Programadores con Discapacidad Visual. Desarrollado en la UTN Facultad Regional Santa Fe, este proyecto de I+D está pensado para brindar contexto y estructura al código, aumentando la accesibilidad para quienes dependen de lectores de pantalla.

SIMAE nace en 2016, cuando un alumno ciego ingresó en Ingeniería en Sistemas. La necesidad de facilitar su experiencia de aprendizaje motivó a docentes e investigadores a diseñar una herramienta que transformara la forma de programar en algo más accesible.

Su función principal es insertar información contextual en el código fuente, para ello incorpora información extra en la semántica del código. Por ejemplo, se agregan marcadores para señalar el comienzo y fin de bloques buscando ayudar a ubicarse al programador dentro del código; una extensión para VSCode que permite detectar las marcas semánticas en los hints del código y utilizar atajos de teclado especiales para moverse por la estructura del código.

Soporta múltiples lenguajes (C++, Java, Python y también C#) y funciona en español e inglés.

Este proyecto demuestra que las tiflotecnologías pueden elevar significativamente la experiencia de programación para personas con discapacidad visual. Al convertir el código en algo estructurado y navegable no solo visible, la herramienta abre caminos hacia una programación más autónoma, inclusiva y eficiente. Su enfoque dual (standalone y extensión) ofrece flexibilidad según el entorno de trabajo del usuario.