Skip to content

Kav02/DEV013-dataverse

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

99 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dataverse

Índice


1. Preámbulo

Según Forbes, el 90% de la data que existe hoy ha sido creada durante los últimos dos años. Cada día generamos 2.5 millones de terabytes de datos, una cifra sin precedentes.

No obstante, los datos por sí mismos son de poca utilidad. Para que esas grandes cantidades de datos se conviertan en información fácil de leer para las usuarias, necesitamos entender y procesar estos datos. Una manera simple de hacerlo es creando interfaces y visualizaciones.

En la siguiente imagen, podrás ver cómo con la data que que se ve en la parte izquierda se puede construir una interfaz amigable y entendible por las usuarias, al lado derecho.

pokemon-data-to-ui

2. Resumen del proyecto

En este proyecto construirás una página web para visualizar un conjunto (set) de datos que vas a generar con prompting. Esta página web se adecuará a lo que descubras que tu usuaria necesita.

Además, en este proyecto utilizarás herramientas de inteligencia artificial como ChatGPT, ExplainDev, entre otras para generar un set de datos en un archivo javascript.

El propósito de generar los datos en esta manera es brindarte la oportunidad de adentrarte en el empleo de herramientas impulsadas por la inteligencia artificial, así como en técnicas de prompting.

Como entregable final tendrás una página web que permita visualizar la data, filtrarla, ordenarla y calcular alguna estadística. Con estadística nos referimos a distintos cálculos que puedes hacer con los datos para mostrar información aún más relevante a las usuarias (promedio, el valor máximo o mínimo, etc).

3. Consideraciones generales

  • Este proyecto se debe resolver en duplas.
  • El rango de tiempo estimado para completar el proyecto es de 4 a 5 Sprints.
  • El tiempo estimado que deberías dedicar a la generación de los datos es de máximo un sprint. Además, al final del proyecto deberás presentar un screenshot del prompt utilizado.
  • Si ves que te va a tomar más tiempo, deberás utilizar los datos de ejemplo que los vas a encontrar en esta ruta: ./src/data/dataset.js.
  • El proyecto será entregado subiendo tu código a GitHub (commit/push) y la interfaz será desplegada usando GitHub Pages.

4. Funcionalidades

Como entregable final tendrás una página web que permita visualizar la data, filtrarla, ordenarla y calcular alguna estadística.

Aquí definimos en más detalle las funcionalidades mínimas que debe tener:

  • La aplicación debe permitir a la usuaria ver los items de la data en una visualización, que puede ser tipo tarjetas o cualquier otra forma que tú decidas como la adecuada (pero desde aquí referimos a los items como "tarjetas"). Cada una de las tarjetas debe estar contenida en un elemento <li> y estos a su vez contenido en un elemento <ul>.

  • El elemento <ul> deberá ser hijo de un elemento con atributo id de valor "root". Este es un paso importante para que tu aplicación tenga la estructura requerida

  • Las tarjetas deben resaltar los valores de las propiedades de la data que le interesaría a la usuaria ver. Por ejemplo: nombre, fecha, imagen, etc. Si vas a filtrar u ordenar por una propiedad, la tarjeta tiene que mostrar el valor de esta propiedad a la usuaria.

  • La interfaz debe estructurar semánticamente la data usando el estándar microdatos. Es obligatorio usar al menos los atributos itemscope, itemtype y el atributo itemprop.

    Por ejemplo, la siguiente data correspondiente a Ada Lovelace:

      {
        "id": "ada-lovelace",
        "name": "Ada Lovelace",
        "shortDescription": "Pionera de la informática, fue la primera programadora.",
        "description": "Una visionaria del siglo XIX ...",
        "imageUrl": "URL_DE_LA_IMAGEN_GENERADA",
        "facts": {
          "yearOfBirth": 1843,
          "placeOfBirth": "London, England",
          "mainField": "Computer Science",
        }
      }

    puede ser estructurada semánticamente en HTML como:

    <dl itemscope itemtype="WomenInTech">
      <img src="URL_DE_LA_IMAGEN_GENERADA" alt="Ada Lovelace" />
      <dt>Nombre:</dt><dd itemprop="name">Ada Lovelace</dd>
      <dt>Descripción:</dt><dd itemprop="description">Pionera de la informática, fue la primera programadora.</dd>
      <dt>Año de nacimiento:</dt><dd itemprop="yearOfBirth">1843</dd>
      <dt>Lugar de nacimiento:</dt><dd itemprop="placeOfBirth">London, England</dd>
      <dt>Campo de desempeño:</dt><dd itemprop="mainField">Computer Science</dd>
    </dl>
  • La aplicación debe calcular y visualizar una estadística de la data. Puede ser una propiedad computada de cada item, como una propiedad adicional (por ejemplo, el índice de masa corporal de cada pokemon) o unas estadísticas de la data completa (por ejemplo, total de personas nacidas en los años 80s).

  • La aplicación debe permitir a la usuaria filtrar la data. Deberás usar un elemento <select> con un atributo de datos data-testid="select-filter", y un atributo name con el nombre de la propiedad por la que filtrará (por ejemplo, si vas a filtrar por "type", el <select> tendrá name="type"). Los <option> de este <select> deberán tener en el atributo value el valor del filtro (por ejemplo, si vas a filtrar por type "fire" sería <option value="fire">Fire</option>).

  • La aplicación debe permitir a la usuaria ordenar la data.

    • Tendrá al menos un control <select> para ordenar.
    • Si usas solo un control <select>, debe tener un atributo de datos data-testid="select-sort" y un atributo name con el nombre de la propiedad por la que ordenará. (por ejemplo, si vas a ordenar por "num" seria name="num"). Este <select> tendrá dos <option> con value asc y desc, para ordenar ascendente y descendente la data respectivamente (por ejemplo, <option value="asc">A - Z</option>).
    • Una alternativa es ofrecer la usuaria un ordenamiento mas complejo. Podrías implementar ordenar por varios propiedades. En este caso sería con un <select> con un atributo de datos data-testid="select-sort", y que contiene hijos <option> con un value del nombre de la propiedad con cual vas a ordenar. (Por ejemplo, <option value="name">Nombre</option>). También, necesitarás otro control (<radio>,<select>, etc.) para decir que el ordenamiento es ascendente o descendente. Este control secundaria tendrá un atributo name="sort-order", y tiene values asc y desc.
  • Las funcionalidades de ordenar deben operar sobre la data filtrada. Por ejemplo, si filtro los pokemones de tipo fuego y luego los ordeno por nombre ascendentemente, la aplicación deberá mantener el filtro aplicado y ordenar los pokemones de tipo fuego.

  • La aplicación debe permitir a la usuaria reiniciar la aplicación, limpiando filtros y ordenamiento, con un <button> con un atributo de datos data-testid="button-clear".

  • Las operaciones de filtrar, ordenar, limpiar, etc. no deben recargar la página, si no que deben agregar el contenido en una manera dinámica via javascript.

  • La aplicación será responsive, es decir, debe visualizarse sin problemas desde distintos tamaños de pantallas: móviles, tablets y desktops.

Los siguientes wireframes, son ejemplos de una interfaz que puede cumplir con esta funcionalidad. Como podrás ver, estos diseños cumplen con la metodología Mobile First, la misma que te recomendamos utilizar en todos tus proyectos:

Diseño Mobile:

Diseño Desktop:

5. Consideraciones técnicas

La lógica del proyecto debe estar implementada completamente en JavaScript (ES6), HTML y CSS. En este proyecto NO está permitido usar librerías o frameworks, solo vanilla JavaScript, con la excepción de librerías para hacer gráficas (charts); ver Parte opcional más arriba.

El boilerplate contiene una estructura de archivos como punto de partida así como toda la configuración de dependencias:

.
├── README.md
├── package.json
├── src
|  ├── data 
|  |  └── dataset.js (La que hayas generado con la IA)
|  ├── dataFunctions.js
|  ├── view.js
|  ├── index.html
|  ├── main.js
|  └── style.css
└── test
   └── data.js
   └── dataFunctions.spec.js
   └── tests-read-only

src/index.html

Como en el proyecto anterior, existe un archivo index.html. Como ya sabes, acá va la página que se mostrará a la usuaria. También nos sirve para indicar qué scripts se usarán y unir todo lo que hemos hecho.

src/main.js

Recomendamos usar src/main.js para todo tu código que tenga que ver con mostrar los datos en la pantalla. Con esto nos referimos básicamente a la interacción con el DOM. Operaciones como creación de nodos, registro de manejadores de eventos (event listeners o event handlers).

Esta no es la única forma de dividir tu código, puedes usar más archivos y carpetas, siempre y cuando la estructura sea clara para tus compañeras.

En este archivo encontrarás una serie de imports listos para cargar las diferentes fuentes de datos.

Por ejemplo, lost datos con los que vas a trabajar, los encontrarás en la siguiente línea:

import data from './data/dataset.js';

src/dataFunctions.js

El corazón de este proyecto es la manipulación de datos a través de arreglos y objetos.

Este archivo va a contener toda la funcionalidad que corresponda a obtener, procesar y manipular datos (tus funciones). Por ejemplo:

  • filterData(data, filterBy, value): esta función recibe tres parámetros. El primer parámetro, data, nos entrega los datos. El segundo parámetro, filterBy, nos dice con respecto a cuál de los campos de la data se quiere filtrar. El tercer parámetro, value, indica el valor de campo que queremos filtrar.

  • sortData(data, sortBy, sortOrder): esta función sort u ordenar recibe tres parámetros. El primer parámetro, data, nos entrega los datos. El segundo parámetro, sortBy, nos dice con respecto a cuál de los campos de la data se quiere ordenar. El tercer parámetro, sortOrder, indica si se quiere ordenar de manera ascendente o descendente.

  • computeStats(data): la función compute o calcular, nos permitirá hacer cálculos estadísticos básicos para ser mostrados de acuerdo a la data proporcionada, esta función debe usar el método reduce.

Estas funciones deben ser puras e independientes del DOM. Estas funciones serán después usadas desde el archivo src/main.js, al cargar la página, y cada vez que la usuaria interactúe (click, filtrado, ordenado, ...).

src/data

En esta carpeta están los datos con los que vas a trabajar (los datos de ejemplo o los datos que generarías con ayuda de la inteligencia artificial).

test/dataFunctions.spec.js

En este archivo tendrás hacer pruebas unitarias de las funciones implementadas en el archivo dataFunctions.js. (filterBy, sortBy, etc.)

test/data.js

En esta archivo puedes construir y exportar data "mock" para usar en los tests. Es mas fácil probar un arreglo de 5 elementos de un arreglo de 24, por eso vas a crear una muestra de la data que quieres probar. Como mínimo debes exportar un variable se llama data, pero puedes definir y exportar mas si sea necesario para tus tests.

src/view.js

Para alcanzar mejor separación de responsabilidades en el código este archivo debe tener todas las funciones que utilizara para renderizar los elementos dinámicamente.

Al menos se requeriere una función obligatoria:

  • renderItems(data): esta función recibe el arreglo de data para renderizar los elementos de cada item, y debería volver un elemento DOM o un string de HTML.

6. Criterios de aceptación mínimos del proyecto

Criterios de código

Con cada objetivo de aprendizaje, evaluamos que el código cumpla con algunos criterios. Lo cual no excluye que puedas usar otras opciones, por ejemplo en el caso de los selectores, proponemos el uso de querySelector, no significa que no puedes usar querySelectorAll o getElementId también.

Puedes ejecutar las pruebas de cada grupo de objetivos de aprendizaje de manera individual con los siguientes comandos:

npm run test:oas-html
npm run test:oas-css
npm run test:oas-web-api
npm run test:oas-js
npm run test:oas-prompting
npm run test:oas // Esto es para correr todos los tests de OAs

HTML

  • Uso de HTML semántico

    • Tiene un <header> con <h1>
    • Tiene un <footer>
    • Tiene un <main> con <h2>
    • Todas las etiquetas de controles (inputs, selects, radio, etc) tienen <label>
    • <ul> esta usado para dibujar la data
    • Los hijos de <li> usan attributos de microdata itemscope e itemprop

CSS

  • Uso de selectores de CSS

    • Uso de selector class para los items
    • Uso de flexbox en sentido row y column
    • Uso de flexbox para el elemento que contiene los items
    • Uso de flexbox para el elemento que contiene los UI inputs

Web APIs

  • Uso de selectores del DOM

    • La aplicación usa querySelector para buscar los elementos del DOM
  • Manejo de eventos del DOM (listeners, propagación, delegación)

    • addEventListener con callback que tiene parámetro de event, lo que permite el uso del objeto event con event.target o event.currentTarget
    • La aplicación registra Event Listeners para escuchar click, change, keyup dependiendo del evento que se quiere escuchar
  • Manipulación dinámica del DOM

    • La aplicación actualiza el atributo innerHTML.
    • La aplicación usa createElement y appendChild, o template strings para crear elementos

JavaScript

Criterios del proyecto

Definición del producto

Tema

Galería de Obras de arte

Necesidades de los usuarios

Los usuarios quieren una página donde puedan consultar obras de arte cómodamente y rápido mediante filtros, por ejemplo buscar por orden alfabético, por corriente artística y por artistas.

Historias de usuario

Se crearon las historias de usuario para ir trabajando por sprint. Ejemplo de la primer historia de usuario: Historia de Usuario

  • Como (descripcion del usuario) persona interesada en el arte
  • Quiero (Funcionalidad)__ poder ver obras de arte a modo de tarjetas
  • Para (beneficio): __Explorarlas fácilmente
  • Criterios de aceptación • Las tarjetas deben mostrar una imagen de la obra de arte, el título de la obra, el nombre del artista • Las tarjetas deben ser de tamaño uniforme y estar dispuestas en una cuadrícula. Aceptación: Definition of done • Se considerará terminada cuando las tarjetas muestren la información requerida.

Generar los datos

La temática elegida es Obras de Arte

La temática será a tu gusto, por ejemplo, pueden ser personajes importantes en la historia, personajes inventados, países, películas... etc.

Los datos se guardaron en un archivo javascript. Este archivo exporta un arreglo con 24 objetos. Y la estructura de cada objeto debe es la siguiente:

  • id: Identificador único (no pueden haber dos elementos con el mismo id). Debe ser un string de no más de 32 characteres, en minúscula, compuesto solo por letras, números, underscore (_) o guión (-). Por ejemplo: "noche-estrellada".

  • name: El nombre de la obra.

  • shortDescription: Descripción corta de la obra, de max 20 palabras.

  • description: Descripción detallada de la obra. Esta descripción deberá tener entre 80 y 100 palabras.

  • imageUrl: URL de la imagen.

  • facts: Fecha, nombre del artista y movimiento artístico.

  • extraInfo: Técnica y Estilo.

Los datos están en el archivo: ./src/data/artdata.js.

Prompt utilizado

Se utilizó un prompt para generar los datos: alt text Para efectos de la base de datos se fueron generando las obras por nombre de artista. De manera que se obtiene un total de 24 obras. alt text

Diseño de la Interfaz de Usuaria

Bocetos iniciales de la interfaz de usuaria: alt text

Prototipo de alta fidelidad

El prototipo fue creado en Figma, tanto para desktop como para teléfonos móviles. https://www.figma.com/file/ZNw3k3LMWIG5G5F0D1e31R/Data-verse?type=design&node-id=0%3A1&mode=design&t=HlgrMWwKvhWJxVXC-1

Testeos de usabilidad

A través del desarrollo del proyecto, encontramos los siguientes problemas de usabilidad:

  • El diseño inicial no era agradable a la vista por la combinación de las imágenes de las obras de arte y la mezcla de color. Se cambió el diseño a colores neutros y sobrios.
  • El botón de cerrar la tarjeta detallada se cambió para los móviles para que fuera mas amigable al usuario
  • Se hicieron pruebas con tamaños de letra.
  • Se modificó la forma que se muestra la estadística y la tarjeta detallada en la versión móvil.

Implementación de la Interfaz de Usuaria (HTML/CSS/JS)

Se realizó la página, con las funcionalidades establecidas en el diseño.

Pruebas unitarias

Se crearon las pruebas para las funciones de filtrar, ordenar y la función estadística.

7. Hacker edition

  • 100% Coverage

8. Objetivos de aprendizaje

Reflexiona y luego marca los objetivos que has llegado a entender y aplicar en tu proyecto. Piensa en eso al decidir tu estrategia de trabajo.

HTML

CSS

Web APIs

JavaScript

  • Uso de linter (ESLINT)

  • Uso de identificadores descriptivos (Nomenclatura y Semántica)

  • Diferenciar entre expresiones (expressions) y sentencias (statements)

Control de Versiones (Git y GitHub)

  • Git: Instalación y configuración

  • Git: Control de versiones con git (init, clone, add, commit, status, push, pull, remote)

  • Git: Integración de cambios entre ramas (branch, checkout, fetch, merge, reset, rebase, tag)

  • GitHub: Creación de cuenta y repos, configuración de llaves SSH

  • GitHub: Despliegue con GitHub Pages

    Links

  • GitHub: Colaboración en Github (branches | forks | pull requests | code review | tags)

Centrado en el usuario

  • Diseñar y desarrollar un producto o servicio poniendo a las usuarias en el centro

Diseño de producto

  • Crear prototipos de alta fidelidad que incluyan interacciones

  • Seguir los principios básicos de diseño visual

Investigación

AI Prompting

9. Diseño

Aunque experimentamos cambios a lo largo del proceso, desde el inicio teníamos una idea clara de la distribución de nuestra página web. A pesar de los ajustes, logramos mantener elementos clave de nuestro diseño inicial, lo que contribuyó a preservar la estructura y la esencia de nuestro proyecto. alt text

Enfrentamos ciertas complicaciones al seleccionar una paleta de colores, dado que nuestras obras presentaban una amplia variedad cromática. Fue un desafío encontrar un color que se adaptara armoniosamente a todas las piezas. Como solución, optamos por una paleta de colores neutros, proporcionando una base equilibrada que complementa cada obra sin restarle protagonismo a sus colores individuales. alt text

10. Proyecto Final

Iniciamos nuestro proyecto con una investigación y la creación de prototipos,a medida que materializábamos nuestras ideas en la interfaz, enfrentamos múltiples desafíos y experimentamos cambios constantes. Realizamos ajustes significativos hasta lograr fusionar nuestras decisiones . El proyecto final que presentamos es el fruto de nuestro esfuerzo, creatividad y perseverancia en cada etapa del desarrollo. alt text

Nuestra interfaz ofrece una visión detallada de las obras de arte presentadas, brindándote la oportunidad de explorar cada pieza en profundidad y apreciar sus detalles únicos. alt text

RESPONSIVE Este proyecto web tiene un diseño responsivo que brinda una experiencia de usuario fluida en dispositivos móviles y computadoras, en la cual aun podemos ver mas detalles de las obras de arte, sinembargo el diseño cambia para que la información mostrada se pueda ver con facilidad.

alt text

11. Pistas, tips y lecturas complementarias

Primeros pasos

Súmate al canal de Slack #project-dataverse para conversar y pedir ayuda del proyecto.

Antes de empezar a escribir código, debes definir qué deberá hacer el producto con base en el conocimiento que puedas obtener de tu usuaria. Estas preguntas te pueden ayudar:

  • ¿Quiénes son las principales usuarias del producto?
  • ¿Cuáles son los objetivos de estas usuarias en relación con el producto?
  • ¿Cuáles son los datos más relevantes que quieren ver en la interfaz y por qué?
  • ¿Cuándo utilizan o utilizarían el producto?
  • Toda tu investigación previa debe tener como resultado todas las Historias de Usuaria de tu proyecto.
  • No hagas los prototipos de alta fidelidad de todas tus Historias. Comienza solamente por los que se necesiten para tu Sprint 1 (semana 1 de trabajo). Más pistas en la guía de organización para el proyecto.

Cuando ya estés lista para codear, te sugerimos empezar de esta manera:

  1. Una de las integrantes del equipo debe realizar un 🍴 fork del repo de tu cohort, tus coaches te compartirán un link a un repo y te darán acceso de lectura en ese repo. La otra integrante del equipo deber hacer un fork del repositorio de su compañera y configurar un remote hacia el mismo.
  2. ⬇️ Clona tu fork a tu computadora (copia local).
  3. 📦 Instala las dependencias del proyecto con el comando npm install. Esto asume que has instalado Node.js (que incluye npm).
  4. Si todo ha ido bien, deberías poder ejecutar las 🚥 pruebas unitarias (unit tests) con el comando npm test.
  5. Para ver la interfaz de tu programa en el navegador, usa el comando npm start para arrancar el servidor web y dirígete a http://localhost:5000 en tu navegador.
  6. A codear se ha dicho! 🚀

Contenido de referencia

Desarrollo Front-end

Herramientas

Organización del Trabajo

12. Consideraciones para pedir tu Project Feedback

Antes de agendar tu Project Feedback con un coach, asegúrate que tu proyecto:

  • Cumple con todos los criterios mínimos de aceptación al ejecutar npm run test:oas
  • Cumple con todas las pruebas end to end al ejecutar npm run test:e2e Al generarse las opciones desde javascript, no corre las pruebas
  • Cumple con todas las pruebas unitarias al ejecutar npm run test y que tienen una cobertura del 70% de statements (sentencias), functions (funciones), lines (líneas), y branches alt text
  • Esta libre de errores de eslint al ejecutar npm run pretest alt text
  • Está subido a GitHub y desplegado en GitHub Pages
  • Captura de pantalla del prompt utilizado para generar los datos.
  • Tiene un README.md con la siguente:
    • Definición del producto clara e informativa
    • Historias de usuario
    • Un Diseño de la Interfaz de Usuaria (prototipo de alta fidelidad)
    • El listado de problemas que detectaste a través de tests de usabilidad en el README.md
  • Tiene un UI que cumple las funcionalidades:
    • Muestra lista con datos y/o indicadores
    • Permite ordenar data por uno o más campos (asc y desc)
    • Permite filtrar data con base en una condición
    • Permite limpiar los filtros con un botón
    • Es responsive

Recuerda que debes hacer una autoevaluación de objetivos de aprendizaje y life skills desde tu dashboard de estudiante.

Si no has completado todo lo anterior, no consideramos que estás lista para tu sesión de Project Feedback.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 88.8%
  • CSS 9.2%
  • HTML 2.0%