diff --git a/README.md b/README.md index 554e57c..51e3a0a 100644 --- a/README.md +++ b/README.md @@ -2,474 +2,328 @@ ## Índice -* [1. Preámbulo](#1-preámbulo) -* [2. Resumen del proyecto](#2-resumen-del-proyecto) -* [3. Objetivos de aprendizaje](#3-objetivos-de-aprendizaje) -* [4. Consideraciones generales](#4-consideraciones-generales) -* [5. Criterios de aceptación mínimos del proyecto](#5-criterios-de-aceptación-mínimos-del-proyecto) -* [6. Parte adicional-opcional](#6-parte-adicional-opcional) -* [7. Consideraciones técnicas](#7-consideraciones-técnicas) -* [8. Pistas, tips y lecturas complementarias](#8-pistas-tips-y-lecturas-complementarias) -* [9. Checklist](#9-checklist) +* [1. Introducción](#1-introducción) +* [2. Definición del Producto](#2-Definición-del-Producto) +* [3. Objetivos](#3-Objetivos) +* [4. Tipo de Usuario](#4-Tipo-de-Usuario) +* [5. Prototipos](#5-Prototipos) +* [6. Test de Usabilidad](#6-Test-de-Usabilidad) +* [7. Vista Producto Terminado](#7-Vista-Producto-Terminado) *** -## 1. Preámbulo +## 1. Introducción -Según [Forbes](https://www.forbes.com/sites/bernardmarr/2018/05/21/how-much-data-do-we-create-every-day-the-mind-blowing-stats-everyone-should-read), -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. +PoKeData GO es una aplicación que permite a los entrenadores PoKémon acceder a distintos tipos de información sobre sus Pokémon. -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 -los usuarios, necesitamos entender y procesar estos datos. Una manera simple de -hacerlo es creando _interfaces_ y _visualizaciones_. +## 2. Definición del Producto -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 el usuario -al lado derecho. +PoKeData GO es una aplicación que esta dirigida a los entrenadores PoKémon, los cuales ya tienen conocimientos del juego, aquí pueden conocer toda la información de los Pokémon de la región Kanto. El usuario podrá acceder a distintos datos, como filtros ya sea por tipo de PoKémon, debilidad, entre otras. - +## 3. Objetivos -## 2. Resumen del proyecto +El objetivo de esta aplicación, es que el usuario pueda conocer todos los datos de interés sobre su Pokémon de una forma accesible y sencilla. -En este proyecto **construirás una _página web_ para visualizar un -_conjunto (set) de datos_** que se adecúe a lo que descubras que tu usuario -necesita. +## 4. Tipo de Usuario :woman::boy::girl: -Como entregable final tendrás una página web que permita a los usuarios -**visualizar, filtrar, ordenar, etc.**. +Esta aplicación esta creada para entrenadores PoKémon, los cuales ya tienen experiencia y conocimientos en el juego. -Te proponemos una serie de datos de diferentes _temáticas_ para que los -explores y decidas con cuál te interesa trabajar. Cada _set_ de datos viene con -información básica sobre los datos y su estructura, y una lista de las -necesidades de los usuarios que proviene de una investigación (_research_) -hecha por el equipo de Laboratoria. +### Historias de Usuario :memo: -Una vez que elijas, diseña tu proyecto intentando ofrecerle la mejor experiencia -posible para ayudarle a satisfacer sus necesidades. +**Historia de usuario n°1.** -Estos son datos que te proponemos: +**Yo Como**: Usuario de Internet. -* [Pokémon](src/data/pokemon/pokemon.json): - En este set encontrarás una lista con los 151 Pokémon de la región de Kanto, junto con sus respectivas estadísticas usadas en el juego - [Pokémon GO](http://pokemongolive.com). - - [Investigación con jugadores de Pokémon Go](src/data/pokemon/README.md) +**Quiero**: breve presentación de la página. -* [League of Legends - Challenger leaderboard](src/data/lol/lol.json): - Este set de datos muestra la lista de campeones en una liga del - juego League of Legends (LoL). - - [Investigación con jugadores de LoL](src/data/lol/README.md) +**Para**: identificar de que trata la página y si me sirve o no. -* [Harry Potter](src/data/potter/potter.json). - Este set de datos muestra la lista de los personajes del mundo de [Harry Potter: Wizards Unite](https://www.wizardingworld.com/), junto con sus respectivas características mencionadas en la serie de novelas de Harry Potter escrita por la autora británica J.K.Rowling. - - [Investigación con jugadores de Harry Potter: Wizards Unite](src/data/potter/README.md) +**Definición de Terminado:** -## 3. Objetivos de aprendizaje +- El código está en el repositorio remoto. +- El código pasa el mínimo porcentaje de test aceptado. +- La historia implementada fue testeada por mínimo 2 usuarios. +- Se realizaron las mejoras detectadas en el testeo de usabilidad. -El objetivo principal de este proyecto es que, entendiendo las necesidades de tus usuarios, aprendas a diseñar y construir una interfaz web donde se pueda visualizar y manipular data. -Revisa la lista y reflexiona sobre los objetivos que conseguiste en el proyecto anterior. Piensa en eso al decidir tu estrategia de trabajo individual y de equipo. +**Criterios de aceptación:** -### UX -- [ ] Diseñar la aplicación pensando y entendiendo al usuario. -- [ ] Crear prototipos para obtener feedback e iterar. -- [ ] Aplicar los principios de diseño visual (contraste, alineación, jerarquía). -- [ ] Planear y ejecutar tests de usabilidad. +- Nombre o logo de la página. +- Imagen referencial. +- Breve presentación que explique de que trata la página web. -### HTML y CSS -- [ ] Entender y reconocer por qué es importante el HTML semántico. -- [ ] Identificar y entender tipos de selectores en CSS. -- [ ] Entender como funciona `flexbox` en CSS. -- [ ] Construir tu aplicación respetando el diseño planeado (maquetación). +**Historia de usuario n°2** -### DOM -- [ ] Entender y reconocer los selectores del DOM (querySelector | querySelectorAll). -- [ ] Manejar eventos del DOM. (addEventListener) -- [ ] Manipular dinámicamente el DOM. (createElement, appendchild, innerHTML, value) +**Yo Como**: Jugador de Pokémon Go. -### Javascript -- [ ] Manipular arrays (`filter` | `map` | `sort` | `reduce`). -- [ ] Manipular objects (key | value). -- [ ] Entender el uso de condicionales (`if-else` | `switch`). -- [ ] Entender el uso de bucles (`for` | `forEach`). -- [ ] Entender la diferencia entre expression y statements. -- [ ] Utilizar funciones (parámetros | argumentos | valor de retorno). -- [ ] Entender la diferencia entre tipos de datos atómicos y estructurados. -- [ ] Utilizar ES Modules (`import` | `export`). +**Quiero**: un botón de tipos de Pokémon. -### Pruebas Unitarias (_testing_) -- [ ] Testear funciones (funciones puras). +**Para**:poder filtrar por el tipo de Pokémon que me interese y ver su respectiva información. -### Git y GitHub -- [ ] Ejecutar comandos de git (`add` | `commit` | `pull` | `status` | `push`). -- [ ] Utilizar los repositorios de GitHub (`clone` | `fork` | gh-pages). -- [ ] Colaborar en Github (pull requests). +**Definición de Terminado:** -### Buenas prácticas de desarrollo -- [ ] Organizar y dividir el código en módulos (Modularización). -- [ ] Utilizar identificadores descriptivos (Nomenclatura | Semántica). -- [ ] Utilizar linter para seguir buenas prácticas (ESLINT). +- El código está en el repositorio remoto. +- El código pasa el mínimo porcentaje de test aceptado. +- La historia implementada fue testeada por mínimo 2 usuarios. +- Se realizaron las mejoras detectadas en el testeo de usabilidad. +- Cumple con los criterios de aceptación. -### Soft skills -- [ ] **Planificación, organización y manejo del tiempo** Organizarse utilizando historias de usuario, haciendo una estimación general de los tiempos que se necesitarán para la realización del proyecto. Conocer las ceremonias y artefactos ágiles (sprint planning, dailys, retrospectiva, tablero al menos, etc) a pesar de que no se utilicen con regularidad. -- [ ] **Trabajo en equipo** Trabajar con otros de forma colaborativa y en base a un objetivo común, entregando ideas para la construcción del proyecto +**Criterios de aceptación:** -- [ ] **Autoaprendizaje** Demostrar interés y adquirir nuevos conocimientos autónomamente, estudiando de manera independiente, lo que se traduce, en que cuando es necesario, la estudiante buscará aclarar conceptos y resolver dudas sobre la materia. +- Botón tipo de Pokémon. +- Que despliegue los tipos de Pokémon existentes. +- Que permita seleccionar un tipo de Pokémon en específico. +- Que muestre todos los Pokémon del tipo seleccionado por el usuario. -- [ ] **Presentaciones** Utilizar ciertas estrategias para hablar en público (tono y ritmo de voz adecuado, contacto visual con el público, interacción con medios de presentación), que permitan asegurar un mediano entendimiento de la audiencia. +**Historia de usuario n°3.** -- [ ] **Adaptabilidad** Afrontar los cambios inesperados o nuevos desafíos con una actitud positiva, aunque no necesariamente se logre accionar o adaptarse de la mejor manera a los diferentes contextos. +**Yo Como**: jugador de Pokémon Go. -- [ ] **Solución de problemas** Trabajar en la búsqueda y en la elaboración de soluciones alternativas a problemas de mediana complejidad. +**Quiero**: un botón de ordenar por. -- [ ] **Responsabilidad** Demostrar actitud de compromiso, reflejandolo en la entrega de trabajo a tiempo, llegando a la hora acordada y/o avisando cuando no se pueda asistir. +**Para**: poder filtrar alfabéticamente mis Pokémon. -- [ ] **Dar y recibir feedback** Escuchar los comentarios y críticas de los demás de manera respetuosa, y/o comunicar a los demás las opiniones de forma constructiva. +**Definición de Terminado:** -- [ ] **Comunicación eficaz** Comunicar ideas a los demás cuando es necesario, aunque no siempre se fomenten de manera proactiva estas instancias de comunicación. +- El código está en el repositorio remoto. +- El código pasa el mínimo porcentaje de test aceptado. +- La historia implementada fue testeada por mínimo 2 usuarios. +- Se realizaron las mejoras detectadas en el testeo de usabilidad. +- Cumple con los criterios de aceptación. -## 4. Consideraciones generales +**Criterios de aceptación:** -* Este proyecto se debe resolver en duplas. -* El proyecto será entregado subiendo tu código a GitHub (`commit`/`push`) y la - interfaz será desplegada usando [GitHub Pages](https://pages.github.com/). -* Tiempo para completarlo: Toma como referencia 3 semanas (15 días hábiles). +- Crear botón de nombre ordenar por. +- Que se despliegue la opción de ordenar de A-Z o Z-A. +- Que se muestren todos los Pokémon ordenados alfabéticamente. -## 5. Criterios de aceptación mínimos del proyecto -Los criterios para considerar que has completado este proyecto son: +**Historia de usuario n°4.** -### Definición del producto +**Yo Como**: jugador de Pokémon Go. -Documenta brevemente tu trabajo en el archivo `README.md` de tu repositorio, -contándonos cómo fue tu proceso de diseño y cómo crees que el producto resuelve -el problema (o problemas) que tiene tu usuario. +**Quiero**: tener un buscador. -### Historias de usuario +**Para**: buscar directamente el Pokémon que me interesa y revisar su información. -Una vez que entiendas las necesidades de tus usuarios, escribe las [Historias -de Usuario](https://es.wikipedia.org/wiki/Historias_de_usuario) que representen -todo lo que el usuario necesita hacer/ver. Las **Historias de Usuario** deben -ser el resultado de tu proceso de investigación o _research_ de tus usuarios. +**Definición de Terminado:** -Asegúrate de incluir la definición de terminado (_definition of done_) y los -Criterios de Aceptación para cada una. +- El código está en el repositorio remoto. +- El código pasa el mínimo porcentaje de test aceptado. +- La historia implementada fue testeada por mínimo 2 usuarios. +- Se realizaron las mejoras detectadas en el testeo de usabilidad. +- Cumple con los criterios de aceptación. -En la medida de lo posible, termina una historia de usuario antes de pasar -a la siguiente (Cumple con Definición de Terminado + Criterios de Aceptación). -### Diseño de la Interfaz de Usuario +**Criterios de aceptación:** -#### Prototipo de baja fidelidad +- Input tipo texto de búsqueda. +- Agregar evento al input con Enter en el teclado. +- Que muestre el Pokémon ingresado en el input. -Durante tu trabajo deberás haber hecho e iterado bocetos (_sketches_) de tu -solución usando papel y lápiz. Te recomendamos tomar fotos de todas las -iteraciones que hagas, que las subas a tu repositorio y las menciones en tu -`README.md`. +**Historia de usuario n°5.** -#### Prototipo de alta fidelidad +**Yo Como**: jugador de Pokémon Go. -Lo siguiente es diseñar tu Interfaz de Usuario (UI por sus siglas en inglés - -_User Interface_). Para eso debes aprender a utilizar alguna herramienta de -diseño visual. Nosotros te recomendamos [Figma](https://www.figma.com/) que es -una herramienta que funciona en el navegador y, además, puedes crear una cuenta -gratis. Sin embargo, eres libre de utilizar otros editores gráficos como -Illustrator, Photoshop, PowerPoint, Keynote, etc. Recuerda utilizar la -[identidad gráfica](https://drive.google.com/open?id=1eeWFqrWpy-OYOH4EHDckFGunyrm9iNeE) -correspondiente a cada set de datos que elijas. +**Quiero**: un botón de debilidades contra un tipo específico de Pokémon. -El diseño debe representar el _ideal_ de tu solución. Digamos que es lo que -desearías implementar si tuvieras tiempo ilimitado para trabajar. Además, tu -diseño debe seguir los fundamentos de _visual design_. +**Para**: poder filtrar por el tipo de debilidad que requiero investigar y determinar que Pokémon escoger para una batalla. -#### Testeos de usabilidad +**Definición de Terminado:** -Durante el reto deberás hacer _tests_ de usabilidad con distintos usuarios, y -en base a los resultados, deberás iterar tus diseños. Cuéntanos -qué problemas de usabilidad detectaste a través de los _tests_ y cómo los -mejoraste en tu propuesta final. +- El código está en el repositorio remoto. +- El código pasa el mínimo porcentaje de test aceptado. +- La historia implementada fue testeada por mínimo 2 usuarios. +- Se realizaron las mejoras detectadas en el testeo de usabilidad. +- Cumple con los criterios de aceptación. -### Implementación de la Interfaz de Usuario (HTML/CSS/JS) -Luego de diseñar tu interfaz de usuario deberás trabajar en su implementación. -**No** es necesario que construyas la interfaz exactamente como la diseñaste. -Tu tiempo de hacking es escaso, así que deberás priorizar +**Criterios de aceptación:** -Como mínimo, tu implementación debe: +- Botón de nombre debilidades contra. +- Que se desplieguen los tipos de debilidades escogidas por el usuario. +- Que el usuario pueda seleccionar una debilidad. -1. Mostrar la data en una interfaz: puede ser un card, una tabla, una lista, - etc. -2. Permitir al usuario interactuar para obtener la infomación que necesita. -3. Ser _responsive_, es decir, debe visualizarse sin problemas desde distintos - tamaños de pantallas: móviles, tablets y desktops. -4. Que la interfaz siga los fundamentos de _visual design_. -### Pruebas unitarias +**Historia de usuario n°6.** -El _boilerplate_ de este proyecto no incluye Pruebas Unitarias (_tests_), así es -que tendrás que escribirlas tú para las funciones encargadas de _procesar_, -_filtrar_ y _ordenar_ la data, así como _calcular_ estadísticas. +**Yo Como**: jugador de Pokémon Go. -Tus _pruebas unitarias_ deben dar una cobertura del 70% de _statements_ -(_sentencias_), _functions_ (_funciones_), _lines_ (_líneas_), y _branches_ -(_ramas_) del archivo `src/data.js` que contenga tus funciones y está detallado -en la sección de [Consideraciones técnicas](#srcdatajs). +**Quiero**: saber las características de mi Pokémon. -## 6. Parte adicional-opcional +**Para**: poder tomar decisiones en cuanto a mis Pokémon actuales o los que deseo conseguir. -Si **terminaste** con todo lo anterior y te queda tiempo, intenta explorar y -completar parte o todo de lo siguiente. Así podrás -profundizar y/o ejercitar más sobre los objetivos de aprendizaje del proyecto. +**Definición de Terminado:** -Features/características extra sugeridas: +- El código está en el repositorio remoto. +- El código pasa el mínimo porcentaje de test aceptado. +- La historia implementada fue testeada por mínimo 2 usuarios. +- Se realizaron las mejoras detectadas en el testeo de usabilidad. +- Cumple con los criterios de aceptación. -* En lugar de consumir la data estática brindada en este repositorio, puedes - consumir la data de forma dinámica, cargando un archivo JSON por medio de - `fetch`. La carpeta `src/data` contiene una versión `.js` y una `.json` de - de cada set datos. +**Criterios de aceptación:** -* Agregarle a tu interfaz de usuario implementada visualizaciones gráficas. Para - ello te recomendamos explorar librerías de gráficas como - [Chart.js](https://www.chartjs.org/) - o [Google Charts](https://developers.google.com/chart/). +- Modal que despliegue la información del Pokémon que el usuario elija. +- Agregar altura y peso a la tarjeta de información. +- Agregar debilidades del Pokémon seleccionado por el usuario. +- Agregar tipo de Pokemon. +- Agregar evolución del Pokémon. +- Agregar número y tipo de caramelos para poder evolucionar al Pokémon. -* 100% Coverage de pruebas unitarias. +## 5. Prototipos -## 7. Consideraciones técnicas +**Diagrama de Flujo** :computer: :printer: -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](https://medium.com/laboratoria-how-to/vanillajs-vs-jquery-31e623bbd46e), -con la excepción de librerías para hacer gráficas (charts); ver -[_Parte opcional_](#6-hacker-edition) más arriba. +Para comenzar armamos un diagrama de flujo para saber como queríamos que funcionara nuestra pagina web, y así comenzar el trabajo en el prototipo. -No se debe utilizar la _pseudo-variable_ `this`. -El _boilerplate_ contiene una estructura de archivos como punto de partida así -como toda la configuración de dependencias: + -```text -. -├── EXTRA.md -├── README.md -├── package.json -├── src -| ├── data (según con qué data trabajes) -| | ├── lol -| | | ├── lol.js -| | | ├── lol.json -| | | └── README.md -| | ├── pokemon -| | | ├── pokemon.js -| | | ├── pokemon.json -| | | └── README.md -| | └── potter -| | ├── potter.js -| | └── potter.json -| | └── README.md -| ├── data.js -| ├── index.html -| ├── main.js -| └── style.css -└── test - └── data.spec.js -directory: 6 file: 17 -``` +**Prototipo Papel**:pencil2::crayon: -### `src/index.html` + -Como en el proyecto anterior, existe un archivo `index.html`. Como ya sabes, -acá va la página que se mostrará al usuario. También nos sirve para indicar -qué scripts se usarán y unir todo lo que hemos hecho. + -Encontrarás 1 etiqueta inicial, la cual si deseas puedes borrar y empezar de cero: - -``` -
-``` - -### `src/main.js` - -Acá escribirás todo el código que tenga que ver con la interacción del DOM -(seleccionar, actualizar y manipular elementos del DOM y eventos). Es decir, -en este archivo deberás invocar a tus funciones exportadas en el boilerplate, -según sea necesario para realizar operaciones como creación de nodos, -registro de manejadores de eventos (_event listeners_ o _event handlers_), .... - -En este archivo encontrarás una serie de _sentencias_ `import` -_comentadas_. Para _cargar_ las diferentes fuentes de datos tendrás que -_descomentar_ estas _sentencias_. Cada una de estas sentencias importará un -objeto, el cual ya se encuentra exportado en el boilerplate. Este objeto -contiene la data correspondiente a esa fuente de datos. - -Por ejemplo, si "descomentamos" la siguiente línea: - -```js -// import data from './data/pokemon/pokemon.js'; -``` - -La línea quedaría así: - -```js -import data from './data/pokemon/pokemon.js'; -``` - -Y ahora tendríamos la variable `data` disponible en el script `src/main.js`. - -### `src/data.js` - -El corazón de este proyecto es la manipulación de datos a través de arreglos -y objetos. - -Te recomendamos que este archivo contenga toda la funcionalidad que corresponda -a obtener, procesar y manipular datos (tus funciones). Por ejemplo: - -* `filterData(data, condition)`: esta función `filter` o filtrar recibiría la - data, y nos retornaría aquellos datos que sí cumplan con la condición. - -* `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. - -* Y así sucesivamente, según tu proyecto en particular. - -Estos nombres de funciones y de parámetros son solamente referenciales, lo que -decidas depende de tu propia implementación. - -Estas funciones deben ser [_puras_](https://medium.com/laboratoria-developers/introducci%C3%B3n-a-la-programaci%C3%B3n-funcional-en-javascript-parte-2-funciones-puras-b99e08c2895d) -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 el usuario interactúe (click, -filtrado, ordenado, ...). - -### `src/data` - -En esta carpeta están los datos de las diferentes fuentes. Encontrarás una -carpeta por cada fuente, y dentro de cada carpeta dos archivos: uno con la -extensión `.js` y otro `.json`. Ambos archivos contienen la misma data; la -diferencia es que el `.js` lo usaremos a través de una etiqueta ` - + + + +
+
+ Es una web dirigida a todos los jugadores amantes de Pokémon GO.
+En nuestra página podrás encontrar tus pokémon por tipo y debilidades, así como conocer las características de + tu pokémon favorito o el de tu contrincante.
+
+ + +
+ +
+ + + + + +
+