Publicando nuestro producto Web
Introducción
La terminal es una herramienta fundamental para el desarrollo front-end. Su finalidad es ejecutar comandos mediante instrucciones. Estos comandos serĆan similares a las interacciones que harĆamos en una aplicación normal (clics, escribir en campos, cambiar de sección, etc.) pero en este caso se hacen escribiendo órdenes en la ventana. Muchas de las herramientas para programación estĆ”n hechas sin interfaz por ser mĆ”s sencillas, aprender a usar la terminal nos ayudarĆ” en el futuro a poder usar esas herramientas y mejorar nuestro flujo de trabajo gracias a ellas.
La terminal parece muy agresiva al principio pero poco a poco le iremos pillando cariƱo. Te permite hacer prƔcticamente todo lo que puedes hacer con la interfaz grƔfica del sistema operativo y bastantes cosas mƔs.
También vamos a aprender cómo funciona el control de versiones y cómo utilizarlo para ir, poco a poco, añadiéndolo a nuestro flujo de trabajo. En esta sesión vamos a ver las dos herramientas que utilizaremos para gestionar las versiones de nuestro proyecto, git y GitHub.
Git serĆ” la herramienta que utilizaremos para realizar un control de versiones sobre nuestros archivos. Es una herramienta que se utiliza a travĆ©s de la lĆnea de comandos de nuestro ordenador, es decir, para trabajar con git escribiremos comandos en nuestra Terminal.
GitHub es la plataforma social mÔs famosa a la hora de publicar y colaborar en desarrollo de código. AdemÔs, permite guardar en un servidor nuestro código y sincronizarlo con el código que tendremos en nuestro ordenador. Todo esto lo hace apoyÔndose en git.
Otra cosa que veremos durante la sesión es el servicio de GitHub Pages que ofrece GitHub. Este servicio nos permite publicar nuestro código como si se tratase de un sitio web y que la gente pueda verlo en internet desde cualquier parte del mundo. Al final de esta sesión veremos cómo habilitarlo para poder mostrar al mundo nuestra primera pÔgina web.
Resumen de la sesión
En esta sesión se intenta acercar el control de versiones para que lo acabemos incluyendo en nuestro flujo de trabajo.
AdemƔs presentamos la plataforma GitHub y su servicio de hosting: GitHub Pages.
¿Para qué sirve lo que vamos a ver en esta sesión?
En la terminal hoy solo vamos a aprender a movernos por las carpetas y crear algún archivo pero mÔs adelante serÔ una herramienta fundamental al trabajar en grupo y con control de versiones.
Por ahora solo hemos empezado a araƱar el mundo front-end pero el uso de un control de versiones nos ofrece algo que antes no tenĆamos:
Si me dejé el trabajo en casa, ¿cómo puedo continuar trabajando?
¿Cómo puedo deshacer un cambio que acabo de realizar?
¿Cómo puedo saber de forma clara en qué punto hice un cambio concreto?
¿Cómo trabajo con otros sin que sea un caos y nos estemos pisando todo el rato?
La solución a todas esas preguntas es simple: usando un control de versiones.
Por su parte, GitHub, como hemos comentado, es una plataforma web que nos ofrece una serie de funcionalidades y herramientas para facilitarnos nuestro trabajo a la hora de realizar y mantener código. Algunas de las posibilidades que ofrece GitHub son las siguientes:
Usarlo como servidor donde sincronizar y hacer una copia de seguridad de nuestro proyecto
Formar parte de una red social que gira en torno a la programación, con perfil de usuario, posibilidad de interactuar con otros usuarios y posibilidad de usarla como portafolio de nuestros trabajos de desarrollo web
Acceder a herramientas para gestionar mejor los proyectos y facilitar el desarrollo del código
Tener una plataforma donde alojar nuestro sitio web y poder mostrarla al resto del mundo de forma sencilla (GitHub Pages)
¿En qué casos se utilizan?
Git se utiliza tanto en los casos mÔs simples, como un pequeño proyecto o un archivo de configuración; hasta una locura con varios compañeros y que luego os vaya a hacer ricos. Siempre y cuando querÔis (y podÔis) tenerlo subido y disponible para todos.
Nosotros lo utilizaremos siempre que queramos llevar un control de los cambios que hemos hecho en un proyecto para no perder información. Al principio serĆ” sólo en determinados proyectos de código, pero a medida que le vayĆ”is cogiendo el gustillo, empezarĆ©is a sentiros vacĆas sin Ć©l. En Academia Geek, por ejemplo, lo utilizamos para gestionar el contenido del curso. SĆ, este contenido que estĆ”is leyendo ahora mismo estĆ” creado utilizando git :)
Para poner un ejemplo, tendrĆa sentido utilizar git para los pequeƱos ejercicios que hacemos para practicar los conocimientos. Pero sobre todo que tendrĆa sentido usar este control de versiones para gestionar el proyecto grupal del primer sprint.
Respecto a GitHub, lo utilizaremos siempre que queramos compartir un código con el resto de la comunidad o si queremos tenerlo en lo que se llama "la nube" para no perderlo y que cualquier persona con acceso y permisos de escritura pueda editarlo desde cualquier parte del mundo.
Por último, GitHub Pages, al ser un servicio gratuito y sencillo para publicar pÔginas, es un recurso muy útil si queremos colgar en internet algún proyecto de forma gratuita.
Es importante saber que todos los servicios de GitHub son gratuitos siempre y cuando nuestro código sea público. En caso de querer hacerlo privado deberemos pagar por el servicio. Por el momento como queremos darle visibilidad al código y que otras personas puedan verlo, no tendremos ningún problema en que nuestro código sea público.
Terminal
Introducción a la Terminal
La terminal o consola es una de nuestras herramientas principales en el desarrollo front. Nos permite comunicarnos con el sistema mediante pequeƱas instrucciones de texto (las llamamos comandos) sin necesidad de una interfaz grƔfica.
La terminal nos permite obtener información del sistema, realizar tareas y hasta automatizarlas, y ganar en productividad.
La terminal de nuestro ordenador tiene este aspecto:
En esta ventana iremos escribiendo nuestros comandos para interactuar con el ordenador o con aplicaciones que no tengan una interfaz grƔfica.
Por defecto la terminal nos mostrarĆ” una lĆnea (el prompt) a partir de la cual podremos escribir nuestros comandos.
Normalmente nuestro prompt tendra este aspecto: usuario@nombre-de-equipo: ruta por defecto $
Esto nos dice que el usuario de nuestro equipo es ubuntu, que nuestro equipo se llama ubuntu y que estamos en la carpeta raĆz de nuestro usuario (que se representa con ~
).
Comandos bƔsicos de GNU/Linux
PWD
Principalmente usaremos la terminal para movernos por el sistema de archivos del ordenador. Asà que es fundamental saber dónde estamos en cada momento. El comando pwd
(Print Working Directory) se encargarƔ de mostrarnos en quƩ carpeta nos encontramos.
NOTA: Muchas veces nos encontraremos los comandos que tenemos que introducir precedidos por el sĆmbolo
$
, pero no hay que escribirlo.
DevolverĆ” la ruta absoluta de la carpeta en la que estemos, con este aspecto:
Esto es una ruta absoluta, que se construye a partir de la carpeta raĆz de nuestro equipo, representada por el carĆ”cter inicial /
. Nos estarĆa indicando que nos encontramos en la carpeta nombre-de-usuario
, que estĆ” dentro de user
, que estĆ” en la carpeta raĆz de nuestro equipo.
Las rutas pueden ser absolutas, como la que nos devuelve el comando pwd
, y empiezan por /
. TambiƩn pueden ser relativas, que usaremos mƔs adelante. Las relativas usan los caracteres especiales ..
para referirse a la carpeta madre de nuestra carpeta actual, o .
(o nada) para referirnos a una carpeta que estĆ” dentro de nuestra carpeta actual.
LS
El comando ls
nos muestra un listado de los archivos y carpetas que hay en nuestra carpeta actual.
CD
El comando cd
(Change Directory) nos ofrece diferentes posibilidades a la hora de cambiar de carpeta:
Nos permite entrar en la carpeta nombre-de-carpeta
que estarĆa en nuestra carpeta actual.
TambiĆ©n podemos escribir la ruta absoluta desde la raĆz de nuestro equipo /
a la carpeta a la que queremos entrar.
cd
solo nos devuelve a la carpeta de nuestro usuario (esta es la localización por defecto donde se abrirÔ nuestra terminal)
..
nos permite subir un nivel, esto es, ir a la carpeta que contiene nuestra carpeta actual
Este comando permite "deshacer" el último cd realizado: vuelve a la localización anterior al último cambio de carpeta.
MKDIR
Nos permite crear una carpeta. PERO NO ENTRA EN LA CARPETA NUEVA.
Si no especificamos una ruta se crearÔ en la localización actual pero se puede indicar la ruta usando /
y ..
. Por ejemplo, vamos a crear una carpeta "proyecto" en la carpeta madre de la carpeta actual:
TOUCH
Nos permite crear un nuevo archivo.
Si no especificamos una ruta se crearÔ en la localización actual pero se puede indicar la ruta usando /
y ..
. Por ejemplo, vamos a crear un archivo "index.html" en la carpeta actual (estarĆ” vacĆo):
CLEAR
A veces va a pasar que hemos introducido muchos comandos y serĆa genial poder "limpiar" la ventana. Para eso existe el comando clear
, que nos limpia la ventana de la terminal.
CP y MV
Si queremos copiar o mover archivos usaremos los comandos cp
o mv
. El formato serĆ” cp
/mv
archivo-de-origen archivo_de_destino.
Vamos a mover el archivo index.html de nuestra carpeta actual a la carpeta madre:
NOTA:
mv
tambiƩn sirve para renombrar ficheros o carpetas
Abrir nuestra carpeta actual en el explorador de archivos desde la terminal
A veces nos interesarƔ abrir nuestra carpeta actual en el explorador de archivos (que en Ubuntu se llama Nautilus) y esto se puede hacer fƔcilmente desde la terminal con el comando:
y sĆ, $ nautilus ..
nos abrirĆ” nuestra carpeta madre en el explorador de archivos ;)
NOTA: en Mac podemos abrir el explorador de archivos (Finder) con
open
NOTA: igual que con
nautilus
podemos abrir el explorador de archivos en una ruta, tambiƩn podemos abrir programas como VSCode en una ruta. Por ejemplo, concode .
abrimos una ventana de Code en la carpeta actual
EJERCICIO 1
Desde la terminal, id a vuestra carpeta de documentos y cread la siguiente estructura de carpetas y archivos (vacĆos):
En el archivo mis-datos.txt vamos a escribir el Nombre y la comida favorita.
En el archivo ruta_del-proyecto.txt pondremos la ruta del archivo desde nuestra carpeta de
Documentos
Mover los dos archivos a la carpeta principal, que serĆa nombre
EJERCICIO 2
Ahora, en index.html
se tiene que ver la imagen de dos formas: 1. Con un <img>
2. Como fondo de un div
del mismo tamaƱo que la imagen
¿Cómo es la ruta de ambas imÔgenes? ¿Absoluta? ¿Relativa? ¿Es diferente en los dos casos? ¿Por qué?
Git
Introducción a git
Vamos a ver una pequeña introducción a git, para ello hemos seleccionado el siguiente video ya que pensamos que explica de forma breve y sencilla qué es git y algunos de sus conceptos bÔsicos.
Configurar git en nuestro ordenador
Vamos a ver cómo configurar git en nuestro ordenador. Para llevarlo a cabo, primero comprobaremos si tenemos instalada una versión reciente de git.
NOTA: Para comprobar si tenemos instalado git en nuestro ordenador, debemos abrir la Terminal y ejecutar el comando
git --version
. Esto mostrarĆ” el textogit version
seguido de la versión de Git que tenemos instalada. Para poder trabajar de forma correcta, lo indicado serĆa que tuviĆ©semos una versión igual o posterior a la2.11.0
.
Esto es súper importante y lo agradeceréis mÔs adelante.
2. Añadimos nuestro nombre a la configuración de git
Abrimos la aplicación de la terminal e introducimos el siguiente comando, tal y como se muestra abajo, sustituyendo "John Doe"
por vuestro nombre. Una vez lo hayamos introducido, pulsamos intro para que se ejecute.
Importante: Escribiremos nuestro nombre entre comillas para evitar problemas a la hora de ejecutar el comando.
3. Configuramos nuestro email para trabajar con Git
Ahora introducimos el siguiente comando para guardar la configuración de nuestro email:
Sustituiremos en este caso "johndoe@example.com"
por el email que hemos utilizado para crear nuestra cuenta de GitHub.
Nota: Es importante que el email coincida con el que hemos utilizado en GitHub, ya que se utilizarÔ para comprobar nuestros credenciales a la hora de subir información a un repositorio en esta plataforma.
4. Añadimos la configuración para que se guarde nuestra contraseña para GitHub
Por defecto, cada vez que intentamos conectarnos con GitHub, el servidor de GitHub nos pedirƔ la contraseƱa de nuestro usuario. Como vamos a subir y descargar cambios de GitHub de forma constante, puede ser un poco molesto tener que introducir la contraseƱa cada vez que queramos conectarnos con el servidor. Para evitar esto, vamos a almacenar la contraseƱa de forma segura en nuestro ordenador.
En Ubuntu
Para poder almacenar la contraseƱa de GitHub en Ubuntu, realizaremos los siguientes comandos uno por uno:
sudo apt-get install libsecret-1-0 libsecret-1-dev
Nos solicitarÔ una contraseña, aquà debemos introducir la contraseña de nuestro ordenador, no la de GitHub.
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
cd -
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
Al hacer esto, la próxima vez que introduzcamos nuestra contraseña de GitHub, esta se almacenarÔ de forma segura en nuestro ordenador y no serÔ necesario volver a introducirla de nuevo.
Una vez hayamos realizado ese paso, no necesitaremos hacer ningún cambio mÔs.
En Mac
Para poder almacenar la contraseƱa de GitHub en Mac, simplemente ejecutamos el siguiente comando:
Una vez hayamos realizado ese paso, no necesitaremos hacer ningún cambio mÔs.
Cómo trabajar con git
Para trabajar con git lo haremos usando comandos a través de la Terminal, como comentÔbamos en la introducción de esta sesión. Para ello tendremos que aprender unos comandos bÔsicos.
Una vez configurado git en nuestro equipo tendremos que activar el control de versiones en nuestro proyecto, esto lo haremos con git init
. Este comando lo usaremos solo una vez en la carpeta de nuestro proyecto y activa que se controle cada cambio que hacemos a nuestros archivos del proyecto.
A partir de este momento, cada vez que hagamos cambios, git sabrƔ quƩ archivos hemos modificado.
En cualquier momento podremos pedir que nos diga en quƩ estado estƔ el proyecto con git status
, lo que nos dirĆ” si hemos cambiado archivos.
Normalmente trabajaremos con cambios cortos o tareas pequeƱas, y cuando hayamos terminado, querremos indicarle a git que ya hemos terminado un paquete de cambios, para lo que tenemos dos comandos: 1. git add -A
para aƱadir los archivos que hemos modificado. Una vez aƱadidos git sabrƔ quƩ cambios hemos hecho. 2. git commit -m "Mensaje"
nos permite crear como un paquete de cambios y "guardarlo en nuestro sistema de versiones", nos dejarĆ” escribir un mensaje corto para asociarlo al paquete de cambios o commit. 3. Si queremos ver la lista de commits realizados en un proyecto usaremos git log
.
En el video que añadimos a continuación se explican los comandos bÔsicos para empezar a trabajar con git.
Nota: En el video pone los mensajes de los commits en espaƱol pero nosotros los escribiremos en inglƩs.
Mensaje del commit
Es importante acompaƱar el commit con un mensaje. Este mensaje debe ser suficientemente corto para que no sea una locura leerlo y, a la vez, explique quƩ cambio se ha hecho de forma clara.
Normalmente trabajaremos con otras compaƱeras en un mismo proyecto y serƔ fundamental que todas entiendan que se ha hecho en cada paso para poder trabajar de forma mƔs rƔpida y no tener que estar preguntando quƩ es cada cosa. Crear mensajes claros en los commits, nos servirƔ tambiƩn para que si volvemos a ver un commit del pasado, podamos entender quƩ es lo que hicimos.
A la hora de escribir un mensaje para un commit hay mĆŗltiples maneras de plantearlo e infinidad de guĆas. Como estamos empezando tengamos en cuenta sólo la siguiente serie de normas para crear un mensaje lo suficientemente bueno:
Debe estar escrito en inglƩs
Tiene que ser corto. MƔximo 72 caracteres
Debe explicar brevemente y a nivel general los cambios que se han hecho (aƱade el footer, corrige los enlaces del artĆculo, etc.)
No tiene que detallar los cambios hechos en el código, sino en general. Recordemos que ya tenemos un control de versiones que muestra, exactamente, qué se ha hecho. (Ejemplo: no pongÔis "Add 2 paragraph tags", poned mejor "Add introduction text")
Usaremos el imperativo (Ejemplo:
Change header styles
- Cambia los estilos del header) para decir quƩ hace el commit.
Un ejemplo de un buen commit:
EJERCICIO 3
Vamos a crear nuestro primer proyecto con git, al que llamaremos testing-git
. Dentro de Ć©l, crearemos un archivo HTML con un tĆtulo HEAD en el que ponga "Testing Git" y un h1
con el mismo texto. AdemƔs, crearemos un archivo para los estilos (main.css
) dónde añadiremos un estilo para que la familia de texto que se use en la web sea sans-serif
. Organizaremos el proyecto siguiendo la estructura de siempre:
Una vez creado el proyecto con el HTML y el CSS indicado. Inicializa el repositorio Git en el proyecto (asegurate de que estƔs en la carpeta testing-git), aƱade los archivos y haz el primer commit con el mensaje Initial commit
EJERCICIO 4
Modificar el archivo index.html
para que en el tĆtulo de la pĆ”gina ponga "My first Git project" y en el texto de la cabecera aparezca una sonrisa :)
. AƱadir los cambios y hacer un commit para guardarlos.
Nota: El mensaje del commit deberĆ” explicar de forma clara los cambios que hemos realizado
EJERCICIO 5
Vamos a realizar un tercer cambio dónde añadiremos un archivo README.md
en la raĆz de nuestro proyecto. Este archivo se utiliza para poner información acerca de nuestro código y, por defecto, la web GitHub lo muestra en la pĆ”gina principal de nuestro proyecto. Dentro de ese archivo escribiremos el siguiente texto:
Nota: El mensaje del commit deberĆ” explicar de forma clara los cambios que hemos realizado
GitHub
Como hemos explicado anteriormente, GitHub es una plataforma de desarrollo colaborativo para alojar proyectos utilizando el sistema de control de versiones de git. EstÔ muy enfocada a proyectos de código abierto, por lo que es de uso gratuito siempre que tus proyectos estén disponibles para todos. Pagando puedes tener proyectos privados, pero la verdadera fuerza de GitHub estÔ en la comunidad tan grande que se ha montado sobre la idea de código abierto u open source :)
EJERCICIO 6
Pon una foto de perfil en tu cuenta de GitHub.
Hasta ahora sabemos crear un repositorio git local, ahora vamos a ver como creamos un repositorio remoto en GitHub, de esta forma podremos acceder al código desde cualquier equipo y podremos colaborar con nuestras compañeras.
Para ello, nos vamos a nuestro perfil y buscamos el botón +
para crear un nuevo repositorio:
Rellenamos los datos que nos piden: nombre del repositorio, descripción y marcamos que queremos inicializarlo con un Readme.md
:
Una vez creado, nos llevarÔ a la pÔgina principal de nuestro repo donde podremos conseguir la url para descargarlo en nuestro equipo. Esta es una descarga especial que llamamos, clonar, que nos hace una copia local del proyecto conectada con la versión remota.
Ahora, con esta url podemos irnos a nuestra terminal y clonarlo con git clone
:
Esto nos generarĆ” una carpeta con nuestro proyecto. Recordad que crea la carpeta pero no nos mete dentro por lo que tendremos que usar el comando cd
de nuestra terminal para cambiar la ruta actual.
Nota: Por defecto git nos crearĆ” una carpeta con un nombre automĆ”tico, si queremos un nombre especĆfico para la carpeta de nuestro proyecto podemos declararlo tras la url que nos da GitHub:
Ahora tenemos un repositorio local en la carpeta en la que hemos clonado nuestro nuevo repositorio remoto. Si accedemos a la carpeta, dentro deberĆa estar el archivo README.md.
Podemos crear archivos y/o realizar cambios sobre los existentes, guardarlos en local (Ctrl+S o Cmd+S), aƱadirlos para que git sepa que cambios hemos hecho (git add -A
), commitearlos con un mensaje (git commit -m "Add main css file"
), y finalmente hacer un push al repositorio remoto de GitHub (git push origin master
) para guadar nuestros cambios allĆ.
ĀæY si ya tengo un proyecto con Git en local?
A la hora de conectar el repo local y el remoto lo mas cómodo es empezar creando el repo en GitHub, clonÔndolo y seguir a partir de ahà con la conexión ya hecha. Pero puede pasar que ya tuviésemos un proyecto en local que hubiésemos inicializado con git init
, en este caso seguiremos estos pasos:
Creamos un repo vacĆo en GitHub SIN INICIALIZARLO CON README.ME, GITIGNORE O LICENCIA.
Esto nos llevarƔ a una pƔgina diferente con las instrucciones para conectar un repo local con nuestro repo remoto:
Copiamos la lĆnea con
git remote add origin url-del-repositorio-que-me-da-github
Desde la terminal, nos vamos a la carpeta de nuestro proyecto que ya tiene inicializado un repo local y ejecutamos la lĆnea que hemos copiado. Esto conectarĆ” los dos repos.
En el video que mostramos a continuación se hace un pequeño tour alrededor de la plataforma para ver cómo funciona y las funcionalidades que ofrece. En el video pone el nombre del repositorio con mayúsculas y minúsculas, nosotros lo pondremos en minúsculas y con el texto separado por guiones, como hacemos con las carpetas de nuestros proyectos. En el video también explica ramas, pero lo ignoraremos. De momento solo vamos a trabajar con una rama (master
), mÔs adelante veremos cómo es el flujo a la hora de trabajar con varias ramas, pero vayamos poco a poco.
Nota: Sólo veremos hasta el min 21:34. Porque en el resto del video habla de cosas que no vamos a aprender por el momento.
EJERCICIO 7
Vamos a:
Crear un proyecto vacĆo en GitHub. Le pondremos como nombre
testing-git
.AƱadimos el repositorio que acabamos de crear como repositorio remoto en nuestro proyecto usando
git remote
como se muestra en el video.Hacer push para mandar la info del proyecto al repositorio remoto y, de esta forma, almacenar los datos del proyecto en GitHub. Comprobar tras hacerlo que, al abrir la pƔgina del proyecto en GitHub, se muestran los cambios que hemos realizado en nuestro ordenador.
Realizar un cambio en el CSS del proyecto para que el texto de la cara sonriente se muestre centrado vertical y horizontalmente en la pƔgina.
Una vez que estemos conforme con nuestro tipo sonriente, haremos un commit para aƱadir el cambio a nuestro repositorio y otro push, para sincronizar los cambios de nuestro repositorio local con los del remoto y, de esta forma, subir los cambios a GitHub.
GitHub Pages
Un hosting es un servicio de almacenamiento de datos para poder tener tu web en un servidor y que estƩ disponible en internet y esto es lo que ofrece exactamente GitHub Pages.
EJERCICIO 8
Desde la pƔgina de nuestro proyecto testing-git
en GitHub, activar GitHub Pages.
Pista: Hay que ir a la pestaƱa settings del proyecto ;)
Github Classroom
GitHub Classroom es un "módulo" de GitHub que permite automatizar el control de acceso y la creación de repositorios. Durante este curso lo usaremos para asignar ejercicios.
Classroom permite asignar repositorios vacĆos o con un código inicial.
EJERCICIO 9
Clónalo en tu equipo
Crea un archivo
README.md
Dentro, escribe tu nombre precedido de un
#
:# PEPA HERRERA
Haz
add
ycommit
Haz un
push
al repo remoto :)
Recursos extra
Personaliza la terminal
Pro Git
Como recurso extra para aprender Git, el libro de "Pro Git" es uno de los mejores. EstÔ escrito por dos desarrolladores que trabajaron en implementar libgit, el sistema que utiliza GitHub en el núcleo de su plataforma para lidiar con Git. Aparte, ambos han formado parte del desarrollo de Git y la comunidad que mantiene este software, por lo que saben muy bien de lo que hablan. El libro estÔ explicado de forma sencilla y fÔcil de entender y es gratuito.
Nota: Es un libro bastante denso pero los capĆtulos 1 y 2 se centran en lo bĆ”sico, por lo que puede ser interesante leer estos y en el futuro leer el resto.
Last updated
Was this helpful?