recursal/MDN huggingface dataset:
CSS
===

**CSS,** de las siglas en inglés **C**ascading **S**tyle **S**heets (Hojas de Estilo en Cascada), es un lenguaje declarativo que controla el aspecto de las páginas web en el navegador. El navegador aplica declaraciones de estilo CSS a los elementos seleccionados para exhibirlos correctamente. Una declaración de estilos contiene las propiedades y sus respectivos valores, los cuales determinan cómo se verá una página web.

CSS es una de las tres principales tecnologias web, junto con HTML y JavaScript. CSS usualmente le da estilo a los (elementos HTML), pero también puede ser utilizado con otros lenguajes de marcado como SVG o XML.

Una regla CSS es un conjunto de propiedades (en-US) asociadas con un selector (en-US). Aquí tenemos un ejemplo que hace que cada párrafo HTML sea amarillo, sobre un fondo negro:


```css
/\* El selector "p" indica que todos los párrafos del documento serán afectados por esta regla \*/
p {
  /\* La propiedad "color" define el color del texto, en este caso amarillo. \*/
  color: yellow;

  /\* La propiedad "background-color" define el color del fondo, en este caso negro. \*/
  background-color: black;
}
```


El término "en cascada" se refiere a las reglas que determinan cómo los selectores son jerarquizados al cambiar la apariencia de una página web. Esta es una característica muy importante, ya que un sitio web complejo puede contener miles de reglas CSS.

Aprende más
-----------

### Conocimiento general

* Aprende CSS
* CSS en Wikipedia
### Referencia Técnica

* Documentación sobre CSS en MDN
* Trabajos recientes del Grupo de Trabajo de CSS
Cacheable
=========

Una respuesta ***cacheable*** es una respuesta HTTP que se puede almacenar en caché, que se almacena para recuperarla y usarla más tarde, guardando una nueva solicitud en el servidor. No todas las respuestas HTTP se pueden almacenar en caché, estas son las siguientes restricciones para que una respuesta HTTP se almacene en caché:

* El método utilizado en la solicitud se puede almacenar en caché, es decir, un método `GET` o `HEAD` (en-US). Una respuesta a una solicitud `POST` o `PATCH` también se puede almacenar en caché si se indica frescura y el encabezado `Content-Location` es establecido, pero esto rara vez se implementa. (Por ejemplo, Firefox no lo admite según https://bugzilla.mozilla.org/show\_bug.cgi?id=109553.) Otros métodos, como `PUT` o `DELETE` no se pueden almacenar en caché y su resultado no se puede almacenar en caché.
* El código de estado de la respuesta es conocido por el almacenamiento en caché de la aplicación, y se considera almacenable en caché. El siguiente código de estado se puede almacenar en caché: `200`, `203`, `204` (en-US), `206` , `300` (en-US), `301` (en-US), `404`, `405`, `410` (en-US), `414` (en-US) y `501` (en-US).
* No hay encabezados específicos en la respuesta, como `Cache-Control`, que impide el almacenamiento en caché.

Tenga en cuenta que algunas solicitudes / respuestas no almacenables en caché a un URI específico pueden invalidar las respuestas almacenadas previamente en caché en el mismo URI. Por ejemplo, un `PUT` a pageX.html invalidará todas las solicitudes `GET` o `HEAD` (en-US) en caché al mismo URI.

Cuando ambos, el método de la solicitud y el estado de la respuesta, se pueden almacenar en caché, la respuesta a la solicitud se puede almacenar en caché:
```

GET /pageX.html HTTP / 1.1
(...)

200 OK
(...)
```


Una solicitud `PUT` no se puede almacenar en caché. Además, invalida los datos en caché para solicitarlos al mismo URI realizado a través de `HEAD` (en-US) o `GET`:
```

PUT /pageX.html HTTP / 1.1
(...)

200 OK
(...)
```


Un encabezado específico `Cache-Control` en la respuesta puede evitar el almacenamiento en caché:
```

GET /pageX.html HTTP / 1.1
(...)

200 OK
Control de caché: sin caché
(...)
```
Canvas
======

El **elemento canvas** forma parte de HTML5 y habilita la representación (rendering) dinámica y en scripts de figuras en 2D y 3D de imágenes de mapas de Bits.

Es a un bajo nivel, un modelo procedimental que actualiza un mapa de bits y no tiene un grafo de escena integrado. Proporciona una zona gráfica vacía en la cual JavaScript APIs específicas pueden dibujar (como Canvas 2D o WebGL (en-US)).

Aprende más
-----------

### Conocimientos básicos

* Canvas en Wikipedia
### Inicio del temario

* Tutorial de Canvas en MDN
### Información técnica

* El elemento HTML `<canvas>` en MDN
* La documentación general de Canvas en MDN
* `CanvasRenderingContext2D`: La API de dibujo de Canvas 2D
* Canvas 2D, especificaciones del API
Conjunto de caracteres
======================

Un **conjunto de caracteres** es un sistema de codificación para que las computadoras sepan cómo reconocer un caracter, incluidas letras, números, signos de puntuación y espacios en blanco.

En épocas anteriores, los países desarrollaron sus propios conjuntos de caracteres debido a los diferentes idiomas utilizados, como los códigos Kanji JIS (por ejemplo, Shift-JIS, EUC-JP, etc.) para japonés, Big5 para chino tradicional y KOI8-R para ruso. Sin embargo, Unicode se convirtió gradualmente en el conjunto de caracteres más aceptable por su soporte de idiomas universal.

Si un conjunto de caracteres se usa incorrectamente (por ejemplo, Unicode para un artículo codificado en Big5), es posible que no vean más que caracteres rotos, que se llaman Mojibake.

Véase también
-------------

* Codificación de caracteres en Wikipedia
* Mojibake en Wikipedia
* Glosario de MDN Web Docs
    + Caracter
    + Unicode
Atributo
========

Un atributo amplía una etiqueta (tag), cambiando su comportamiento o proporcionando metadatos. Un atributo tiene la forma nombre=valor (especificando el identificador del atributo y el valor asociado al atributo).

Saber más
---------

### Referencia técnica

* HTML attribute reference
* Information about HTML's global attributes.
WebSockets
==========

*WebSocket* es un protocolo que permite establecer conexiones TCP entre el servidor (en-US) y el cliente, permitiendo así el transporte de datos en cualquier momento.

Cualquier cliente o servidor de aplicaciones puede usar WebSockets, pero principalmente es usado por browsers y el servidor web. WebScoket permite enviar datos al cliente sin la necesidad de recibir ningún tipo de notificación, permitiendo la actualización dinámica del contenido.

Saber más
---------

### Conocimiento general

* Websocket en Wikipedia
### Referencia técnica

* WebSocket reference on MDN
### Aprende sobre WebSockets

* Writing WebSocket client applications (en-US)
* Writing WebSocket servers (en-US)
Operador
========

Parte de la sintaxis reservada consistente en signos de puntuación o carácteres alfanuméricos que tienen funcionalidades incorporadas. Por ejemplo, "+" indica el operador suma y "!" indica el operador "not" (negación).

Aprende más
-----------

### Referencias técnicas

* Operadores en JavaScript
Anfitrión
=========

Un anfitrión (del ingles *host*) es un dispositivo conectado a Internet (o una red de área local). Algunos anfitriones denominados servidores (en-US) ofrecen servicios adicionales como servir páginas web o alojar archivos y correos electrónicos.

El anfitrión no es necesariamente un elemento hardware. Pueden ser generado como máquinas virtuales. El anfitrión generado en una máquina virtual se suele denominar "Alojamiento virtual".

Conozca más
-----------

### Conocimiento general

* Host en la Wikipedia
ISP
===

Un ISP (del inglés *Internet Service Provider*, Proveedor de servicios de Internet) es una empresa (en su mayoría compañías telefónicas) que vende acceso a Internet y, a veces, correo electrónico, alojamiento de páginas web y voz sobre IP, ya sea mediante una conexión de marcación a través de una línea telefónica (antes más común), o a través de una conexión de banda ancha como un módem de cable o un servicio DSL.

Aprenda más
-----------

### Conocimiento General

* ¿Cómo funciona internet? (explicación para principiantes)
* Proveedor de servicios de Internet en Wikipedia
Inmutable
=========

Un objeto inmutable es aquel cuyo contenido no se puede cambiar.Un objeto puede ser inmutable por varias razones, por ejemplo:

* Para mejorar el rendimiento (al no haber planificados cambios futuros del objeto)
* Para reducir el uso de memoria (haciendo referencias al objeto (en-US) en vez de clonar el objeto entero)
* Para la seguridad de los subprocesos (varios subprocesos pueden hacer referencia al mismo objeto sin interferir entre sí)
Saber más
---------

### Conocimientos generales

* Objeto Inmutable en Wikipedia
Texto Cifrado
=============

En Criptografía, un texto cifrado es un mensaje codificado que transmite información pero no es legible a menos que se descifre con el algoritmo criptográfico correcto y el secreto correcto (generalmente una clave), reproduciendo el texto simple (en-US) original. La seguridad de un texto cifrado, y por lo tanto el secreto de la información contenida, depende de usar un cifrado seguro y mantener la clave en secreto.

Saber más
---------

### Conocimiento general

* Ciphertext on Wikipedia
Chrome
======

En un navegador, Chrome es cualquier aspecto visible de un navegador aparte de las páginas web en sí (por ejemplo, barras de herramientas, barra de menús, pestañas). Esto no debe confundirse con el navegador Google Chrome.

Leer más
--------

* Browser and GUI Chrome
Wrapper
=======

En lenguajes de programación como JavaScript, un wrapper o envoltorio es una función que llama a una o varias funciones, unas veces únicamente por convenio y otras para adaptarlas con el objetivo de hacer una tarea ligeramente diferente.

Por ejemplo, las librerías SDK de AWS son un ejemplo de wrappers.

Véase también
-------------

* Wrapper function on Wikipedia
* Glosario de MDN Web Docs
    + API
    + Class
    + Function
Abstracción
===========

En programación, una abstracción es una manera de reducir la complejidad y permitir un diseño e implementación más eficientes en sistemas de software complejos. Oculta la dificultad técnica de los sistemas detrás de APIs más simples.

Ventajas de la Abstracción
--------------------------

* Ayuda al usuario a evitar escribir código de bajo nivel.
* Evita duplicar código y aumenta la reusabilidad.
* Se puede cambiar la implementación interna de la clase de forma independiente sin afectar al usuario.
* Ayuda a aumentar la seguridad de la aplicación o programa ya que solo los detalles importantes son proporcionados al usuario.
Saber más
---------

### Conocimiento general

* Abstraction on Wikipedia
Nombre de encabezado prohibido
==============================

Un nombre de encabezado prohibido es un nombre de encabezado HTTP que no se puede modificar mediante programación; específicamente, un nombre de encabezado de HTTP **solicitud** HTTP.

Contrasta con el Forbidden response header name (en-US).

La modificación de estas cabeceras está prohibida, por lo que el agente de usuario mantiene el control total sobre ellos. Los nombres que comienzan con `Sec-` están reservados para crear nuevos encabezados seguros a partir de las APIs que usan Fetch que otorgan a los desarrolladores control sobre las cabeceras, como `XMLHttpRequest`.

Los nombres de encabezado prohibidos comienzan con `Proxy-` or `Sec-`, o se componen de uno de estos:

* `Accept-Charset`
* `Accept-Encoding`
* `Access-Control-Request-Headers`
* `Access-Control-Request-Method`
* `Connection`
* `Content-Length`
* `Cookie`
* `Cookie2`
* `Date`
* `DNT`
* `Expect`
* `Host`
* `Keep-Alive`
* `Origin`
* `Proxy-`
* `Sec-`
* `Referer`
* `TE`
* `Trailer`
* `Transfer-Encoding`
* `Upgrade`
* `Via`

**Nota:** El encabezado `User-Agent` ya no está prohibido, según la especificación — vea la lista de nombres prohibidos de encabezado (esta fue implementada en Firefox 43), por lo que ahora puede establecerse en un objecto Fetch `Headers` (en-US), a través de XHR `setRequestHeader()` (en-US), etc.
Three js
========

three.js es un motor WebGL (en-US) basado en JavaScript que puede ejecutar juegos con GPU y otras aplicaciones con gráficos directamente desde el browser

La biblioteca three.js proporciona muchas funciones y APIs para dibujar escenas 3D en su navegador.

### Conocimientos Generales

* Three.js en Wikipedia
* sitio oficial de three.js
Clickjacking
============

Clickjacking es un ataque basado en la interfaz que engaña a los usuarios de un sitio web para que sin saberlo hagan clic en enlaces maliciosos. En clickjacking, los atacantes incrustan sus enlaces maliciosos en botones o páginas legítimas en un sitio web. En un Site (en-US) infectado, cada vez que un usuario hace clic en un enlace legítimo, el atacante obtiene información confidencial de ese usuario, lo que finalmente compromete la privacidad del usuario en Internet.

El clickjacking puede ser evitado implementando una Política de Seguridad de Contenido (frame-ancestors) (en-US) e implementando atributos de Set-Cookie.

Aprende más
-----------

* Seguridad web: protección contra clickjacking
* Clickjacking en Wikipedia
* Clickjacking en OWASP
Criptografía de clave simétrica
===============================

La criptografía de clave simétrica es un término utilizado para los algoritmos criptográficos que utilizan la misma clave para el cifrado y el descifrado. La clave se suele llamar "clave simétrica" o "clave secreta".

Esto generalmente se contrasta con criptografía de clave pública en el que las claves se generan en pares, y la transformación realizada por una clave solo se puede revertir utilizando la otra clave.

Los algoritmos de clave simétrica son seguros y altamente eficientes cuando se usan de manera adecuada, de modo que pueden usarse para cifrar grandes cantidades de datos sin tener un efecto negativo en el rendimiento.

La mayoría de los algoritmos de clave simétrica actualmente en uso son cifrados de bloque: esto significa que cifran los datos bloque por bloque. El tamaño de cada bloque está fijado y determinado por el algoritmo: por ejemplo, AES utiliza bloques de 16 bytes. Los cifrados de bloque siempre se utilizan con un *modo*, que especifica cómo cifrar de forma segura los mensajes que son más largos que el tamaño de bloque. Por ejemplo, AES es un cifrado, mientras que CTR, CBC y GCM son todos modos. El uso de un modo inapropiado, o el uso de un modo incorrecto, puede socavar completamente la seguridad proporcionada por el cifrado subyacente.
JavaScript
==========

Resumen
-------

JavaScript (o "JS") es un lenguaje de programación que se usa con mayor frecuencia para scripts dinámicos de lado del cliente en páginas web, pero también se usa a menudo en el lado del servidor (en-US) — usando un entorno de ejecución como Node.js.

JavaScript **no se debe** confundir con el lenguaje de programación Java. Aunque *"Java"* y *"JavaScript"* son marcas comerciales (o marcas comerciales registradas) de Oracle en EE. UU. y otros países, los dos lenguajes de programación son significativamente diferentes en su sintaxis, semántica y casos de uso.

JavaScript se utiliza principalmente en el navegador, lo que permite a los desarrolladores manipular el contenido de la página web a través del DOM, manipular datos con AJAX y IndexedDB, dibujar gráficos con canvas, interactuar con el dispositivo que ejecuta el navegador a través de varias APIs y más. JavaScript es uno de los lenguajes más utilizados en el mundo, debido al reciente crecimiento y mejora en el rendimiento de las APIs disponibles en los navegadores.

Orígenes e Historia
-------------------

Concebido como un lenguaje de lado del servidor por Brendan Eich (entonces empleado por Netscape Corporation), JavaScript pronto llegó a Netscape Navigator 2.0 en septiembre de 1995. JavaScript disfrutó de un éxito inmediato y Internet Explorer 3.0 (en-US) introdujo la compatibilidad con JavaScript con el nombre de JScript en agosto de 1996.

En noviembre de 1996, Netscape comenzó a trabajar con ECMA International para hacer de JavaScript un estándar de la industria. Desde entonces, el JavaScript estandarizado se llama ECMAScript y se especifica en ECMA-262, cuya última edición (décima, ES2019) está disponible a partir de junio de 2019.

Recientemente, la popularidad de JavaScript se ha expandido aún más gracias a la exitosa plataforma Node.js, el entorno de ejecución de JavaScript multiplataforma más popular fuera de el navegador. Node.js, creado con el motor de JavaScript V8 de Chrome — permite a los desarrolladores utilizar JavaScript como lenguaje de programación para automatizar las cosas en una computadora y crear servidores HTTP y Web Sockets (en-US) completamente funcionales.

Aprende más
-----------

### Conocimientos generales

* JavaScript en Wikipedia
### Aprende JavaScript

* Guía de JavaScript en MDN
* El taller de "javascripting" en NodeSchool
* El curso de JavaScript en codecademy.com
* *Aprendizaje avanzado de JavaScript* de John Resig
### Referencia técnica

* El último estándar ECMAScript
* Referencia de JavaScript en MDN
* El libro *JavaScript elocuente*
Criptografía de clave pública
=============================

La criptografía de clave pública es un sistema criptográfico en el que las claves vienen en pares. La transformación realizada por una de las claves solo se puede deshacer con la otra clave. Una clave (la clave privada) se mantiene secreta mientras que la otra se hace pública.

Cuando se usa para firmas digitales, la clave privada se usa para firmar y la clave pública para verificar. Esto significa que cualquier persona puede verificar una firma, pero solo el propietario de la clave privada correspondiente podría haberla generado.

Cuando se utiliza para el cifrado, la clave pública se utiliza para cifrar y la clave privada se utiliza para descifrar. Esto le da a los sistemas de cifrado de clave pública una ventaja sobre los sistemas de cifrado simétrico, ya que la clave de cifrado se puede hacer pública: cualquier persona podría cifrar un mensaje al propietario de la clave privada, pero solo el propietario de la clave privada podría descifrarlo. Sin embargo, suelen ser mucho más lentos que los algoritmos simétricos y el tamaño del mensaje que pueden cifrar es proporcional al tamaño de la clave, por lo que no se ajustan bien a los mensajes largos.

Como resultado, es común que un sistema de cifrado utilice un algoritmo simétrico para cifrar el mensaje, y luego un sistema de clave pública para cifrar la clave simétrica. Esta disposición puede conferir los beneficios de ambos sistemas.

Los sistemas de cifrado de clave pública más utilizados son RSA (para firma y encriptación), DSA (para firma) y Diffie-Hellman (para acuerdo de clave).
Caché
=====

La **caché** (o caché web) es un componente que almacena temporalmente respuestas HTTP para que puedan ser usadas por peticiones HTTP posteriores mientras cumplan ciertas condiciones.

Saber más
---------

### Conocimiento general

* Caché web en Wikipedia
Mobile First
============

**Mobile first**, una forma de mejora progresiva, es un enfoque de desarrollo y diseño web que se enfoca en la priorización del diseño y el desarrollo para dispositivos móviles por encima del diseño y desarrollo para pantallas de escritorio. El fundamento detrás del enfoque "mobile-first" es proveer al usuario una buena experiencia para todos los tamaños de pantalla—empezando por una experiencia de usuario que funcione bien para dispositivos pequeños, para posteriormente, basada en dicha experiencia, continuar desarrollando para enriquecer la experiencia de usuario conforme el tamaño de pantalla es mayor. El enfoque "mobile-first" contrasta con el antiguo enfoque de diseño para escritorio en el que se pensaba primero en el diseño/desarrollo para tamaños de pantalla de escritorio y posteriormente se realizaban ajustes para conseguir que dichos diseños y desarrollos funcionases correctamente en dispositivos móbilies.
Slug
====

Un "slug" es un identificador único parte de una dirección web, típicamente al final de una "URL". por ejemplo, en el contexto de MDN (página actual), el "slug" es la parte del url después de "<locale>/docs/" es decir "Glossary/Slug"

Ver también

* Escogiendo títulos y "slugs" (en-US)
XForm
=====

**XForms** es una norma para la creación de formularios web y el procesamiento de datos de formulario en formato XML. Actualmente ningún navegador soporta Xforms—sugerimos en su lugar utilizar los formularios en HTML5 forms (en-US).

Saber más
---------

### Referencia técnica

* XForms documentation on MDN
Sincrónico
==========

Sincrónico *se* refiere a la comunicación en tiempo real donde cada lado recibe (y si es necesario, procesa y responde) mensajes instantáneamente (o lo más cerca posible a instantáneamente).

Un ejemplo humano es el teléfono — durante una llamada telefónica tiendes a responder a la otra persona inmediatamente.

Muchos comandos de programación son también sincrónicos — por ejemplo cuando escribes en una calculadora, el entorno te devolverá el resultado instantáneamente, a menos que lo programes para no hacerlo.

Aprende más
-----------

### Referencias técnicas

* Asynchronous
* Solicitudes síncronas y asíncronas (en-US) usando la API XMLHttpRequest()
POP3
====

**POP3** (Protocolo de Oficina de Correo por sus siglas en inglés) es un protocolo muy común para obtener correos desde un servidor de correos por medio de una conexión TCP. POP3 no soporta directorios, a diferencia del más reciente IMAP4 (en-US), el cual es más difícil de implementar dada su extructura más compleja.

Los clientes usualmente recuperan todos los mensajes y luego los eliminan del servidor, pero POP3 permite retener una copia en el servidor. Casi todos los servidores y clientes de correo actualmente soportan POP3.

Véase también
-------------

* POP en Wikipedia
* RFC 1734 (Especificación del mecanismo de autenticación de POP3)
* RFC 1939 (Especificación de POP3)
* RFC 2449 (Especificación del mecanismo de extensión de POP3)
* Glosario de MDN Web Docs
    + IMAP4 (en-US)
IU
==

La *Interfaz de Usuario* (IU) es el medio que facilita la interacción entre el usuario y la máquina. En el campo de la informática, puede ser un teclado, un joystick, una pantalla, o un programa. En el caso del software, puede ser una entrada de línea de comandos, una página web, un formulario, o el front-end de cualquier aplicación.

Saber más
---------

### Conocimiento general

* Interfaz de Usuario en Wikipedia
* Desarrollo Front-end on Wikipedia
Caracter
========

Un *caracter* es un símbolo (letras, números, puntuación) o un caracter de "control" que no se imprime (p. ej., Retorno de carro o guión suave — `soft hypen`). UTF-8 es el conjunto de caracteres más común e incluye los grafemas de los lenguajes humanos más populares.

Aprende más
-----------

### Conocimientos generales

* Character (informática) en Wikipedia
* Character encoding en Wikipedia
* ASCII en Wikipedia
* UTF-8 en Wikipedia
* Unicode en Wikipedia
Unicode
=======

Unicode es un conjunto de caracteres estándar que numera y define caracteres de diferentes idiomas, sistemas de escritura y símbolos. Al asignar un número a cada caracter, los programadores pueden crear codificaciones de caracteres, para permitir que las computadoras almacenen, procesen y transmitan cualquier combinación de idiomas en el mismo archivo o programa.

Antes de Unicode, era difícil y propenso a errores mezclar idiomas en los mismos datos. Por ejemplo, un juego de caracteres almacenaría caracteres japoneses y otro almacenaría el alfabeto árabe. Si no estuviera claramente marcado qué partes de los datos estaban en qué juego de caracteres, otros programas y computadoras mostrarían el texto incorrectamente o lo dañarían durante el procesamiento. Si alguna vez has visto texto en el que caracteres como comillas entrecruzadas (`“”`) fueron reemplazadas por un galimatías como `Ã‚Â£`, entonces has visto este problema, conocido como Mojibake.

La codificación de caracteres Unicode más común en la Web es UTF-8. Existen otras codificaciones, como UTF-16 o la obsoleta UCS-2, pero se recomienda UTF-8.

Aprende más
-----------

* Unicode en Wikipedia
* El estándar Unicode: Introducción técnica