Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cipher #35

Open
wants to merge 65 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
ef26e9b
este es el primer commit
Feb 7, 2020
00fc59a
este es un cambio en el index
adriana121 Feb 7, 2020
d35f07a
primera pagina lista
adriana121 Feb 7, 2020
4575762
agregando el segundo cambio
adriana121 Feb 9, 2020
73d1d1b
esqueleto listo
adriana121 Feb 9, 2020
339c67a
agregando la imagen de fondo
adriana121 Feb 9, 2020
ec80081
segunda pagina html
adriana121 Feb 9, 2020
ba8b9d8
de js a html
adriana121 Feb 9, 2020
f48ff1b
agregando imagen de fondo
adriana121 Feb 9, 2020
548cfd0
"nuevos cambios"
adriana121 Feb 9, 2020
3becf59
f
adriana121 Feb 9, 2020
2251473
"imagen fondo"
adriana121 Feb 9, 2020
9d196ca
funcion cifrando lista
adriana121 Feb 13, 2020
9834c37
imagen de fondo
adriana121 Feb 13, 2020
8c2e2ac
datos del usuario
adriana121 Feb 13, 2020
d2d6b2e
prueba
adriana121 Feb 13, 2020
21ae1f7
agregando stilo
adriana121 Feb 13, 2020
2bf3451
primera pagina
adriana121 Feb 13, 2020
327df2a
estilo
adriana121 Feb 13, 2020
2c5bf54
delet
adriana121 Feb 13, 2020
6a01317
mostrar pantalla una por una listo
adriana121 Feb 17, 2020
bde486f
carpeta de imagenes
adriana121 Feb 17, 2020
9059afa
readme casi completo
adriana121 Feb 17, 2020
c3ae21e
funcion lista
adriana121 Feb 17, 2020
a91f50f
pasando a una sola pantalla
adriana121 Feb 17, 2020
e9b288f
solo una panalla html
adriana121 Feb 17, 2020
bd9aae5
solo una pagina de estilo
adriana121 Feb 17, 2020
54c1236
solo un css
adriana121 Feb 17, 2020
be266cc
estilo listo
adriana121 Feb 17, 2020
a2e19fa
img redme
adriana121 Feb 17, 2020
6afbaca
img
adriana121 Feb 17, 2020
49dd4a8
imagenes redme
adriana121 Feb 17, 2020
107e0b8
redme listo
adriana121 Feb 17, 2020
f1733bb
otra img
adriana121 Feb 17, 2020
47b1b67
img
adriana121 Feb 17, 2020
2901836
img
adriana121 Feb 17, 2020
9391291
agregando imagenes al redme
adriana121 Feb 18, 2020
7c2f6df
index listi
adriana121 Feb 18, 2020
8803628
readme en proceso
adriana121 Feb 18, 2020
569a67a
ya todo listo
adriana121 Feb 18, 2020
52f5bce
estilo listo
adriana121 Feb 18, 2020
5f78153
guardando cambios
adriana121 Feb 18, 2020
42354b7
imagen al redme
adriana121 Feb 18, 2020
15d73a6
prueba imagenes
adriana121 Feb 18, 2020
9e83baa
listo
adriana121 Feb 18, 2020
90d7c5b
changes
adriana121 Feb 18, 2020
ca3d753
changes
adriana121 Feb 18, 2020
27e1af1
imagenes ya insertadas
adriana121 Feb 18, 2020
79bd917
listo
adriana121 Feb 18, 2020
786e68a
probando imagenes
adriana121 Feb 18, 2020
cee2100
prueba imagenes
adriana121 Feb 18, 2020
8fbe47e
proyect
adriana121 Feb 18, 2020
af409ac
listo
adriana121 Feb 18, 2020
678d49e
imagen
adriana121 Feb 18, 2020
ddebc72
img
adriana121 Feb 20, 2020
03bd9f4
img
adriana121 Feb 20, 2020
54d259d
import
adriana121 Feb 21, 2020
8b75499
module
adriana121 Feb 21, 2020
e69aed4
dom
adriana121 Feb 21, 2020
53b17c4
funciones listas en el cipher
adriana121 Feb 21, 2020
baa2404
enlazado los eventos del DOM y decifar y cifrar
adriana121 Feb 21, 2020
a3000b3
funciones del dom listas
adriana121 Feb 21, 2020
f9bedf1
docs
May 15, 2020
19c837a
mostrando solo un archivo js
May 15, 2020
e19969b
carpeta docs
May 15, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
297 changes: 31 additions & 266 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,60 +1,21 @@
# Cifrado César
"Generador de codigos promocionales"
es un app para poder generar un codigo promocional a partir de los datos del usuario los cuales son su nombre y edad para que con ese codigo se de algun producto gratuito.

## Índice
los usuarios son personas que consuman el producto en este caso los helados, y asi el producto se da a conocer con los consumidores y ellos al comprarlos ganan promociones gratis

* [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. Hacker Edition](#6-hacker-edition)
* [7. Pistas, tips y lecturas complementarias](#6-pistas-tips-y-lecturas-complementarias)
Protipo en papel
![imges]<img src = "/src/img/prototipopapel.jpeg">
resumen de feedback
-agregar el offset
-agregar una para que era la promocion
-pedir solo un dato para no tener tantas complicaciones

***
Imagen de prototipo
![otro]<img src = "/src/img/prototipo.png">

## 1. Preámbulo

Cifrar significa codificar. El [cifrado César](https://en.wikipedia.org/wiki/Caesar_cipher)
es uno de los primeros métodos de cifrado conocidos. El emperador romano Julio
César lo usaba para enviar órdenes secretas a sus generales en los campos de
batalla.

![caeser-cipher](https://upload.wikimedia.org/wikipedia/commons/thumb/2/2b/Caesar3.svg/2000px-Caesar3.svg.png)

El cifrado césar es una de las técnicas más simples para cifrar un mensaje. Es
un tipo de cifrado por sustitución, es decir que cada letra del texto original
es reemplazada por otra que se encuentra un número fijo de posiciones
(desplazamiento) más adelante en el mismo alfabeto.

Por ejemplo, si usamos un desplazamiento (_offset_) de 3 posiciones:

* La letra A se cifra como D.
* La palabra CASA se cifra como FDVD.
* Alfabeto sin cifrar: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
* Alfabeto cifrado: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

En la actualidad, todos los cifrados de sustitución simple se descifran con
mucha facilidad y, aunque en la práctica no ofrecen mucha seguridad en la
comunicación por sí mismos; el cifrado César sí puede formar parte de sistemas
más complejos de codificación, como el cifrado Vigenère, e incluso tiene
aplicación en el sistema ROT13.

## 2. Resumen del proyecto

¿Qué tengo que hacer exactamente? En este proyecto crearás la primera aplicación
web del _bootcamp_. Servirá para que el usuario pueda cifrar y descifrar un
texto indicando un desplazamiento específico de caracteres (_offset_).

La temática es libre. Tú debes pensar en qué situaciones de la vida real se
necesitaría cifrar un mensaje y pensar en cómo debe ser esa experiencia de uso
(qué pantallas, explicaciones, mensajes, colores, ¿marca?) etc. Algunas ideas de
ejemplo:

* Crear claves seguras para el email.
* Encriptar/cifrar una tarjeta de crédito.
* Herramienta de mensajería interna de una organización de derechos humanos en
una zona de conflicto.
* Mensajería secreta para parejas.
![img]<img src = "/src/img/prototipofinal.png">
Imagen de proyecto final
![]<img src= "src/img/proyect.png">

## 3. Objetivos de aprendizaje

Expand All @@ -66,235 +27,39 @@ Reflexiona y luego marca los objetivos que has llegado a **entender** y **aplica

### 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).
- [x] Diseñar la aplicación pensando y entendiendo al usuario.
- [x] Crear prototipos para obtener feedback e iterar.
- [x] Aplicar los principios de diseño visual (contraste, alineación, jerarquía).

### HTML y CSS

- [ ] Uso correcto de HTML semántico.
- [ ] Uso de selectores de CSS.
- [ ] Construir tu aplicación respetando el diseño realizado (maquetación).
- [x] Uso correcto de HTML semántico.
- [] Uso de selectores de CSS.
- [x] Construir tu aplicación respetando el diseño realizado (maquetación).

### DOM

- [ ] Uso de selectores del DOM.
- [ ] Manejo de eventos del DOM.
- [ ] Manipulación dinámica del DOM.
- [x] Uso de selectores del DOM.
- [x] Manejo de eventos del DOM.
- [x] Manipulación dinámica del DOM.

### Javascript

- [ ] Manipulación de strings.
- [x] Manipulación de strings.
- [ ] Uso de condicionales (if-else | switch).
- [ ] Uso de bucles (for | do-while).
- [ ] Uso de funciones (parámetros | argumentos | valor de retorno).
- [x] Uso de bucles (for | do-while).
- [x] Uso de funciones (parámetros | argumentos | valor de retorno).
- [ ] Declaración correcta de variables (const & let).

### Testing
- [ ] Testeo de tus funciones.
- [x] Testeo de tus funciones.

### Git y GitHub
- [ ] Comandos de git (add | commit | pull | status | push).
- [ ] Manejo de repositorios de GitHub (clone | fork | gh-pages).
- [x] Comandos de git (add | commit | pull | status | push).
- [x] Manejo de repositorios de GitHub (clone | fork | gh-pages).

### Buenas prácticas de desarrollo
- [ ] Uso de identificadores descriptivos (Nomenclatura | Semántica).
- [ ] Uso de linter para seguir buenas prácticas (ESLINT).


## 4. Consideraciones generales

* Este proyecto se debe resolver de manera individual.
* El proyecto será entregado subiendo tu código a GitHub (commit/push) y la
interfaz será desplegada usando GitHub pages. Si no sabes lo que es GitHub, no
te preocupes, lo aprenderás durante este proyecto.
* Tiempo para completarlo: Toma como referencia 2 semanas. Trabaja durante el
primer Sprint (una semana) y al final, trata de fijar un estimado de cuándo lo
terminarás.

## 5. Criterios de aceptación mínimos del proyecto

Usa este alfabeto simple (solamente mayúsculas y sin ñ).

* A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

La interfaz debe permitir al usuario:

* Elegir un desplazamiento (_offset_) indicando cuántas posiciones queremos que
el cifrado desplace cada caracter.
* Insertar un mensaje (texto) que queremos cifrar.
* Ver el resultado del mensaje cifrado.
* Insertar un mensaje (texto) a descifrar.
* Ver el resultado del mensaje descifrado.

### Scripts / Archivos

#### UX (Diseño de experiencia de usuario)

Antes de iniciar a codear, debes entender el problema que quieres solucionar y
cómo tu aplicación lo soluciona.

* Trabaja tu primer prototipo con papel y lápiz (blanco y negro).
* Luego valida esta solución con una compañera (pedir feedback).
* Toma lo aprendido al momento de validar tu primer prototipo y desarrolla un
nuevo prototipo usando alguna herramienta para diseño de prototipos
([Balsamiq](https://balsamiq.com/), [Figma](https://www.figma.com/),
[Google Slides](https://www.google.com/intl/es/slides/about/), etc.)
Estos puntos los presentarás en el `README.md`.

**`README.md`**:

Debe contener lo siguiente:

* Un título con el nombre de tu proyecto.
* Un resumen de 1 o 2 líneas de qué se trata tu proyecto.
* La imagen final de tu proyecto.
* Investigación UX:
1. Explicar quiénes son los usuarios y los objetivos en relación con el
producto.
2. Explicar cómo el producto soluciona los problemas/necesidades de dichos
usuarios.
3. Luego colocarás la foto de tu primer prototipo en papel.
4. Agregar un resumen del feedback recibido indicando las mejoras a realizar.
5. Imagen del prototipo final.

#### Visualmente (HTML5 y CSS3)

Deberás maquetar de forma exacta el prototipo final que hiciste en balsamiq
utilizando HTML5 y CSS3. En este momento elegirás los colores, tipo de fuente,
etc a usar.

A continuación describimos los archivos que utilizarás:

**`src/index.html`**:

En este archivo va el contenido que se mostrará al usuario (esqueleto HTML).
Encontrarás 3 etiquetas iniciales, las cuales si deseas puedes borrar y empezar
de cero:

* `<header>`: encabezado de tu proyecto.
* `<main>`: contenido principal de tu proyecto.
* `<footer>`: pie de página de tu proyecto.

**`src/style.css`**:

Este archivo debe contener las reglas de estilo. Queremos que escribas tus
propias reglas, por eso NO está permitido el uso de frameworks de CSS3
(Bootstrap, materialize, etc).

#### Funcionalmente (JavaScript - pruebas unitarias)

* La lógica del proyecto debe estar implementada completamente en JavaScript.
* En este proyecto NO está permitido usar librerías o frameworks, sólo
[vanilla JavaScript](https://medium.com/laboratoria-how-to/vanillajs-vs-jquery-31e623bbd46e).
* No se debe utilizar la _pseudo-variable_ `this`.

Vas a tener 2 archivos JavaScript separando responsabilidades, a continuación
indicamos qué harás en cada archivo:

**`src/cipher.js`**:

Acá escribirás las 2 funciones necesarias para el usuario pueda cifrar o descifrar.
Para esto debes implementar el **objeto `cipher`**, el cual ya se encuentra _exportado_ en el
objeto global (`window`). Este objeto (`cipher`) contiene dos métodos:

- **`cipher.encode(offset, string)`**: `offset` es el número de posiciones que queremos
mover a la derecha en el alfabeto y `string` el mensaje (texto) que queremos cifrar.
- **`cipher.decode(offset, string)`**: `offset` es el número de posiciones que queremos
mover a la izquierda en el alfabeto y `string` el mensaje (texto) que queremos descifrar.

**`src/index.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 `cipher.encode(offset, string)` y
`cipher.decode(offset, string)` según sea necesario para actualizar el resultado en la
pantalla(UI).

**`test/cipher.spec.js`**:

En este archivo tendrás que completar las pruebas unitarias de las funciones
`cipher.encode(offset, string)` y `cipher.decode(offset, string)` implementadas en `cipher.js`
utilizando Jest.
Tus pruebas unitarias deben dar un 70% en _coverage_ (cobertura), _statements_ (sentencias),
_functions_ (funciones) y _lines_ (líneas); y un mínimo del 50% de _branches_ (ramas).

## 6. Hacker edition

Las secciones llamadas Hacker Edition son opcionales. Si terminaste con todo lo anterior y te queda tiempo, intenta completarlas. Así podrás profundizar y/o ejercitar más sobre los objetivos de aprendizaje del proyecto.

La descripción general de este proyecto no menciona qué pasaría con las letras minúsculas y otros caracteres (como espacios, puntuación, ñ, ...). El boilerplate incluye algunos tests (comentados en principio) que puedes usar como punto de partida para implementar el soporte para estos casos.

Tampoco se menciona qué pasaría si el offset fuera negativo. Como parte del hacker edition te invitamos a explorar también esta caso por tu cuenta.

## 7. Pistas, tips y lecturas complementarias

### Primeros pasos

1. Antes que nada, asegúrate de tener un :pencil: editor de texto en
condiciones, algo como [Atom](https://atom.io/) o
[Code](https://code.visualstudio.com/).
2. Para ejecutar los comandos a continuación necesitarás una :shell:
[UNIX Shell](https://lms.laboratoria.la/cohorts/lim-2019-09-bc-core-lim011/courses/shell),
que es un programita que interpreta líneas de comando (command-line
interpreter) así como tener [git](https://lms.laboratoria.la/cohorts/lim-2019-09-bc-core-lim011/courses/scm/01-git/01-git)
instalado. Si usas un sistema operativo "UNIX-like", como GNU/Linux o MacOS,
ya tienes una _shell_ (terminal) instalada por defecto (y probablemente `git`
también). Si usas Windows puedes usar [Git bash](https://git-scm.com/download/win),
aunque recomendaría que consideres probar :penguin: GNU/Linux.
3. Haz tu propio :fork_and_knife: [fork](https://help.github.com/articles/fork-a-repo/)
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.
4. :arrow_down: [Clona](https://help.github.com/articles/cloning-a-repository/)
tu _fork_ a tu computadora (copia local).
5. 📦 Instala las dependencias del proyecto con el comando `npm
install`. Esto asume que has instalado [Node.js](https://nodejs.org/) (que
incluye [npm](https://docs.npmjs.com/)).
6. Si todo ha ido bien, deberías poder ejecutar las :traffic_light:
pruebas unitarias (unit tests) con el comando `npm test`.
7. 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.
8. A codear se ha dicho! :rocket:

### Recursos y temas relacionados

A continuación un video de Michelle que te lleva a través de la fórmula
matemática del Cifrado César y un par de cosas más que debes saber para
resolver este proyecto. ¡Escúchala con detenimiento y sigue sus consejos! :)

[![tips caesar cipher](https://img.youtube.com/vi/zd8eVrXhs7Y/0.jpg)](https://www.youtube.com/watch?v=zd8eVrXhs7Y)

[https://www.youtube.com/watch?v=f0zL6Ot9y_w](https://www.youtube.com/watch?v=f0zL6Ot9y_w)

Diseño de experiencia de usuario (User Experience Design):

* Ideación
* Prototipado (sketching)
* Testeo e Iteración

Desarrollo Front-end:

* Valores
* Tipos
* Variables
* Control de flujo
* Tests unitarios
* [Aprende más sobre `charCodeAt()`](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/charCodeAt)
* [Aprende más sobre `String.fromCharCode()`](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/fromCharCode)
* [Aprende más sobre `ASCII`](http://conceptodefinicion.de/ascii/)
* [Documentación de NPM](https://docs.npmjs.com/)

Herramientas:

* GitHub y GitHub Pages.
- [] Uso de identificadores descriptivos (Nomenclatura | Semántica).
- [] Uso de linter para seguir buenas prácticas (ESLINT).

Organización del Trabajo:

* [Metodologías Ágiles](https://www.youtube.com/watch?v=v3fLx7VHxGM)
* [Scrum en menos de 2 minutos](https://www.youtube.com/watch?v=TRcReyRYIMg)
* [Scrum en Detalle](https://www.youtube.com/watch?v=nOlwF3HRrAY&t=297s). No
esperamos que hagas todo eso desde este proyecto. Iremos profundizando poco a
poco a lo largo del -_bootcamp_.


70 changes: 70 additions & 0 deletions docs/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Caesar Cipher</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div id="root">
<br>
<h1>¿Te gustaría un helado?</h1><br>
<img src="./img/helado1.jpeg" id="img1">
<img src="./img/helado2.jpeg" id="img2">
<br>
<br>
<br>
<p>¡Gratis!</p>
<br>
<br>
<br>
<br>
<input type="button" id="bttn" value="Continuar" onclick="screen();">
</div>



<div id="root2">
<h2>HELADOS LOS TRES CERDITOS</h2><br>
<img src="./img/cerdito1.jpeg" id="pig">
<p>Ingresa tus datos aquí:</p>
<br>
<br>
<input type="text" placeholder="Name" id="name">
<input type="number" placeholder="AGE" id="Age">
<br>
<br>
<input type="button" id="result1" value="click aqui" onclick="encode();">
</div>

<div id="root3">
<h1>Tu codigo de promocion es</h1><br>
<br>
<input type="text" id="result"><br>
<br>
<p>Recoje tu helado en la tienda mas cercana</p>
<br>
<br>
<input type="button" id="user" value="Decifrar codigo" onclick="next();">
</div>

<div id="root4">
<h3>OBTENIENDO DATOS DEL USUARIO</h3>
<br>
<p id="datos">Ingresa el codigo de promocion:</p>
<input type="text" name="codepromo" id="code" placeholder="codigo a decirfrar">
<br>
<br>
<br>
<input type="button" id="decode" value="decifra" onclick="decode();">
<br>
<br>
<input type="text" id="nameUser" placeholder="name">
<br>
<br>
<input type="text" id="AgeUser" placeholder="Age">
</div>
<script src="index.js"></script>

</body>
</html>
Loading