<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: David Huerta</title>
    <description>The latest articles on DEV Community by David Huerta (@iqdavidh).</description>
    <link>https://dev.to/iqdavidh</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F58435%2F4b85241b-e22c-4ae4-aa73-7d65d31328dc.jpeg</url>
      <title>DEV Community: David Huerta</title>
      <link>https://dev.to/iqdavidh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iqdavidh"/>
    <language>en</language>
    <item>
      <title>Como crear un servidor en AWS con varios sitios NODE Express Mongo</title>
      <dc:creator>David Huerta</dc:creator>
      <pubDate>Tue, 23 Jul 2019 03:31:51 +0000</pubDate>
      <link>https://dev.to/iqdavidh/como-crear-un-servidor-en-aws-con-varios-sitios-node-express-mongo-55ob</link>
      <guid>https://dev.to/iqdavidh/como-crear-un-servidor-en-aws-con-varios-sitios-node-express-mongo-55ob</guid>
      <description>&lt;p&gt;Amazon tiene una oferta de servicios muy amplia para IT (Amazon Web Services AWS). Uno de esos servicios es Lightsail; un servicio de Máquina Virtual análogo a Digital Ocean o Vulture.&lt;br&gt;
Una máquina virtual es un sistema operativo completo donde tenemos la libertad de instalar lo que queramos, esto implica que también tenemos la obligación de administrarlo y estar pendiente de las actualizaciones de seguridad.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Porque elegir Lightsail?
&lt;/h4&gt;

&lt;p&gt;Aprender a usar Lightsail nos da la posibilidad de comenzar a utilizar AWS. Este es el primer paso para construir una Virtual Private Cloud VPC que pueda conectarse con otros servicios de Amazon. El precio de los servidores es muy competitivo y es adecuado para comenzar a hacer pruebas.&lt;/p&gt;

&lt;h4&gt;
  
  
  Paso 1 : Crear una cuenta en AWS
&lt;/h4&gt;

&lt;p&gt;Una vez creada la cuenta hay que seguir 5 pasos para configurar la seguridad de la cuenta creada, en resumen tenemos que crear una cuenta secundaria (de desarrollador) que no tenga permisos de facturación para que sea la cuenta con la que trabajemos.&lt;/p&gt;

&lt;p&gt;En uno de los pasos se requiere utilizar un smartphone para realizar autenticación MFA. Aquí les sugiero instalar la autenticación con otro dispositivo - para tener dos-. Esto nos ahorrará dolores de cabeza porque si pierdes el dispositivo ya no podrás ingresar como cuenta maestra.&lt;/p&gt;

&lt;p&gt;Video de Amazon&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=Ip5NaS7RS6g"&gt;https://www.youtube.com/watch?v=Ip5NaS7RS6g&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j0EW86sW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/byvwnefu7fkj3knz7prt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j0EW86sW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/byvwnefu7fkj3knz7prt.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Registrar Cuenta
&lt;/h3&gt;

&lt;p&gt;El procedimiento es muy sencillo y hay muchos tutoriales al respecto&lt;/p&gt;

&lt;p&gt;&lt;a href="https://portal.aws.amazon.com/gp/aws/developer/registration"&gt;https://portal.aws.amazon.com/gp/aws/developer/registration&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  El servicio que usaremos es Lightsail
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/es/lightsail/"&gt;https://aws.amazon.com/es/lightsail/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Instrucciones Básicas  - Crear instancia de Lightsail
&lt;/h2&gt;

&lt;p&gt;En resumen AWS nos permite usar configuraciones predeterminadas  para nuestro servidor usando el servicio de BITNAMI, esto quiere decir que podemos elegir un servidor previamente configurado con los programas que necesitamos para que funcione como servidor NODE.&lt;/p&gt;

&lt;p&gt;Debemos crear una instancia MEAN (Mongo Express Angular Node). ¿Por qué no elegir la opción NODE? - porque MEAN incluye la configuración de base de datos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jry93NqH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/sgsi735zwa2m68bppmnm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jry93NqH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/sgsi735zwa2m68bppmnm.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez creado el servidor lo podremos ver ya listo en web&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rrNWBKWU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/3t1adboahmzvelene4mq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rrNWBKWU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/3t1adboahmzvelene4mq.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En nuestro panel de control también estará listo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MJM04Vyn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/23hq7mp4ksw4m713uth9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MJM04Vyn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/23hq7mp4ksw4m713uth9.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para conectarnos al sistema operativo podemos utilizar una conexión SSH o directamente con la terminal web.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---vP1TRJT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/d9yp3y2eqaemnos8p8ku.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---vP1TRJT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/d9yp3y2eqaemnos8p8ku.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8TUNsqLo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/dnq95ekaax77hoc8bs7y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8TUNsqLo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/dnq95ekaax77hoc8bs7y.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nuestro  servidor tiene como servidor web apache y lo que haremos es configurar varios sitios node - express, para lograr esto tendremos un directorio con todas las aplicaciones y un servidor mongo.&lt;/p&gt;

&lt;p&gt;Este es el contenido del servidor, el directorio “apps” es donde estan nuestros sitios web/ aplicaciones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ezrhKsWe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/fo912dyk3vn9lcz3puy9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ezrhKsWe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/fo912dyk3vn9lcz3puy9.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lo único que falta configurar es la seguridad del servidor mongo&lt;/p&gt;

&lt;p&gt;Vamos a requerir la contraseña del usuario actual “BITNAMI” de nuestra sesión esta contraseña esta en el archivo bitnami_applicaction_password&lt;/p&gt;

&lt;p&gt;Para ver el password ejecuta &lt;/p&gt;

&lt;p&gt;cat bitnami_applicaction_password&lt;/p&gt;

&lt;p&gt;Copiar el password&lt;/p&gt;

&lt;p&gt;Ejecutamos el siguiente comando para entrar como administrador a mongo&lt;/p&gt;

&lt;p&gt;mongo admin --username root --password MY_BITNAMI_APPLICATION_PASSWORD&lt;/p&gt;

&lt;p&gt;Lo que necesitamos hacer es crear una base de datos y agregar un usuario&lt;/p&gt;

&lt;p&gt;Use lab_celeb&lt;/p&gt;

&lt;p&gt;db.createUser( {user:”el usuario” , pwd: “el password”, roles:[“dbOwner”]})&lt;/p&gt;

&lt;p&gt;Para importar un archivo de json a una coleccion&lt;/p&gt;

&lt;p&gt;mongoimport -u root -p BitnamiPassword --authenticationDatabase "admin" --db lab_celeb --collection celebridades --file ./seed_celebridad.json --jsonArray&lt;/p&gt;

&lt;p&gt;Paso 2: Organizar las aplicaciones  &lt;/p&gt;

&lt;p&gt;En el directorio “home” (el directorio donde entramos al iniciar en la consola) monte un directorio con todas las aplicaciones&lt;/p&gt;

&lt;p&gt;mkdir apps&lt;/p&gt;

&lt;p&gt;cd apps&lt;/p&gt;

&lt;p&gt;Para montar una aplicación hacemos un git clone directamente en el directorio apps. Después un npm install y en caso de los proyectos con VUE  npm run build&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xuQB4P-x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/b3mos95jb15gi41sg6yt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xuQB4P-x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/b3mos95jb15gi41sg6yt.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La conexión con MONGO va a requerir que usemos un usuario y password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DuAJY9LZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/s3mq3zz6mq70h17hlk52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DuAJY9LZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/s3mq3zz6mq70h17hlk52.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para correr la aplicación en modo desarrollo usamos nodemon. En producción usamos el package “forever”&lt;/p&gt;

&lt;p&gt;Instalar forever:&lt;br&gt;
sudo npm install -g forever&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/forever"&gt;https://www.npmjs.com/package/forever&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Para ejecutar una aplicación
&lt;/h2&gt;

&lt;p&gt;Forever start app.js&lt;/p&gt;

&lt;p&gt;Finalmente debemos actualizar el firewall para que pueda recibir conexiones a otros puertos. De forma predeterminada solo está habilitado la comunicación con el puerto 80&lt;/p&gt;

&lt;p&gt;Para que puedan funcionar nuestra aplicación&lt;/p&gt;

&lt;p&gt;Entrar a Firewall&lt;/p&gt;

&lt;p&gt;Para definir que puertos abrir organice las aplicaciones de la siguiente forma: puerto 3000 al 3020 estarán dedicados a APIs. Puertos del 4000 al 4020 estarán dedicados al las aplicaciones front.&lt;/p&gt;

&lt;h3&gt;
  
  
  Asignar una IP Fija al servidor
&lt;/h3&gt;

&lt;p&gt;Hasta este momento el servidor tiene una IP que cambiará cada vez que se reinicie el servidor. Para asegurar que nuestro servidor tiene una IP determinada debemos crear una IP estática y asigarla al servidor&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--COkBjaEV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ts9o4n13oj0w7mpvwenm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--COkBjaEV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ts9o4n13oj0w7mpvwenm.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0J0oKkv0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/fw6r0hpr9q67w4y8ld09.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0J0oKkv0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/fw6r0hpr9q67w4y8ld09.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ejercicio para aprender a programar 02 - Crear un juego de memoria</title>
      <dc:creator>David Huerta</dc:creator>
      <pubDate>Mon, 20 May 2019 03:20:39 +0000</pubDate>
      <link>https://dev.to/iqdavidh/ejercicio-para-aprender-a-programar-02-crear-un-rompecabezas-3cnj</link>
      <guid>https://dev.to/iqdavidh/ejercicio-para-aprender-a-programar-02-crear-un-rompecabezas-3cnj</guid>
      <description>&lt;h3&gt;
  
  
  Problema:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Hacer un juego de memorama para una sola persona
&lt;/h4&gt;

&lt;h3&gt;
  
  
  ¿Como hacer el programa?
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Paso 1: Entender el problema.
&lt;/h4&gt;

&lt;p&gt;Necesitamos crear una interfaz gráfica que represente las cartas de un memorama. EL modo de juego es que al inicio se revuelven las cartas y después debemos de buscar los pares haciendo click en dos cartas distintas. Si las cartas coinciden se quedan “abiertas” si no coinciden las cartas vuelven a su posición de “oculta”. El juego termina cuando ya no hay pares de cartas por encontrar.&lt;/p&gt;

&lt;h4&gt;
  
  
  Paso 2: Resolver el problema de forma manual/ personal
&lt;/h4&gt;

&lt;p&gt;El juego es un proceso de “espera” donde estaremos esperando que el jugador haga click en una carta y la evaluamos, luego volvemos a esperar que haga click en otra carta. Hasta el momento que tenemos dos cartas válidas podemos determinar si son o no son pares. Lo único que necesitamos hacer es comparar dos cartas y luego anotar si son pares o no. Cada vez que se encuentre un par evaluamos si ya son todos los pares. En caso de tener todos los pares terminamos el juego.&lt;/p&gt;

&lt;p&gt;La comparación de las cartas la haremos con una propiedad que puede ser id, imagen, nombre, etc.&lt;/p&gt;

&lt;h4&gt;
  
  
  Paso 3: Definir las etapas de cómo resolvemos el problema.
&lt;/h4&gt;

&lt;p&gt;Definimos la secuencia de pasos siguiente:&lt;br&gt;
1)Es el inicio donde se prepara el juego (se barajean cartas y se inicia el score)&lt;br&gt;
2)Propiamente el juego, que es la secuencia de jugadas&lt;br&gt;
3)Fin del juego&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MkOLQX1a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://productividadti.com.mx/blog/2019/bpm_02_memorama1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MkOLQX1a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://productividadti.com.mx/blog/2019/bpm_02_memorama1.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Paso 4 .- Decidir que paso vamos a resolver
&lt;/h4&gt;

&lt;p&gt;¿Como saber cual es el paso más difícil de realizar? &lt;br&gt;
El paso más complejo es “Definir una jugada”, la jugada se compone de dos elementos:&lt;br&gt;
Carta1 y Carta 2 y tiene varias validaciones para determinar que la elección de una carta es correcta.&lt;/p&gt;

&lt;p&gt;Entonces tenemos este ente llamado jugada que representa un turno donde el jugador nos proporciona dos cartas válidas.&lt;/p&gt;

&lt;h5&gt;
  
  
  ¿Que es una carta válida?
&lt;/h5&gt;

&lt;p&gt;Si la carta ya se resolvió, es decir si ya se encontró su par no es válida para jugar.&lt;br&gt;
Si la segunda carta que nos den es la misma que la primera tampoco es válida (un doble click en la misma carta)&lt;br&gt;
Cuando un par de cartas no coincidan se volverán a ocultar , en ese lapso de tiempo donde se muestran las cartas el usuario no puede seleccionar cartas. Ninguna carta es válida si estamos viendo un par que no coincide.&lt;/p&gt;

&lt;p&gt;A continuación muestro el proceso&lt;/p&gt;

&lt;p&gt;Estas reglas las podemos representar de la siguiente manera&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LK8sqXhp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://productividadti.com.mx/blog/2019/bpm_02_jugada1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LK8sqXhp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://productividadti.com.mx/blog/2019/bpm_02_jugada1.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Al hacer click en una carta válida se muestra la carta -llamemosle carta 1- después aal hacer click en la siguiente carta válida la mostramos -llamemosle carta 2-. Si las cartas no son "iguales" las ocultamos después de unos segundos.&lt;/p&gt;

&lt;p&gt;El siguiente paso a resolver es el inicio, donde barajeamos las cartas y presentamos el score. &lt;/p&gt;

&lt;p&gt;La parte mas sencilla es el final del juego.&lt;/p&gt;

&lt;p&gt;Ejemplo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OyJe-6Ve--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/8qt4ney445prd8kvn5c1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OyJe-6Ve--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/8qt4ney445prd8kvn5c1.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  El click de una carta
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c46KNqMJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/wonzmwt8bnif5bazfoar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c46KNqMJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/wonzmwt8bnif5bazfoar.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aprenderaprogramar</category>
      <category>español</category>
      <category>principiante</category>
    </item>
    <item>
      <title>Ejercicio para aprender a programar 01 - Excel desde Airbnb</title>
      <dc:creator>David Huerta</dc:creator>
      <pubDate>Sun, 19 May 2019 19:10:34 +0000</pubDate>
      <link>https://dev.to/iqdavidh/ejercicio-para-aprender-a-programar-01-excel-desde-airbnb-4he5</link>
      <guid>https://dev.to/iqdavidh/ejercicio-para-aprender-a-programar-01-excel-desde-airbnb-4he5</guid>
      <description>&lt;h3&gt;
  
  
  Problema:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Un youtuber nos pide que le demos una pantalla donde escribas una ciudad y le descargue un archivo excel con el nombre de los host de departamentos de airbnb. Quiere usar la lista para ponerse en contacto con ellos y negociar con cada uno sobre hospedaje gratis si los anuncia en su canal.
&lt;/h4&gt;

&lt;h3&gt;
  
  
  ¿Cómo hacer el programa?
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Paso 1: Entender el problema
&lt;/h4&gt;

&lt;p&gt;Necesitamos crear un archivo de excel con datos de airbnb. Esta etapa es muy importante porque si entendemos otra cosa que no sea lo que nos pidieron vamos a ser padres de un proyecto fracasado - y nadie quiere eso-&lt;/p&gt;

&lt;h4&gt;
  
  
  Paso 2: Resolver el problema de forma manual/ personal
&lt;/h4&gt;

&lt;p&gt;Podemos entrar a airbnb y buscar hospedaje en una ciudad en particular. Podemos ver el nombre del anfitrión y un link para contactarlo. Lo que haremos es “copiar esa información” y crear un archivo de excel con 3 columnas propiedad, nombre del host y link de contacto. A grandes rasgos esto es lo que se necesitamos.&lt;/p&gt;

&lt;h4&gt;
  
  
  Paso 3: Definir las etapas de cómo resolvemos el problema
&lt;/h4&gt;

&lt;p&gt;En esto radica la expertis de un programador: diseñar pasos / procesos. Crear una máquina que "hará las cosas por tí".&lt;/p&gt;

&lt;p&gt;Nuestro programa recibirá el nombre de una ciudad, con esa ciudad se conectará de cierta forma a airbnb, sacará los datos de los hospedajes disponibles y después el programa creará un archivo de excel y al finalizar nos lo enviará.&lt;/p&gt;

&lt;p&gt;Cuando comienza uno a programar esta es la etapa que puede ser más confusa porque pasamos de pensar en cómo hacemos las cosas a como le decimos a una computadora que haga lo mismo, y aquí consideramos obvias cosas que no son.&lt;/p&gt;

&lt;p&gt;Cuando pensamos en que manualmente hacemos un archivo de excel, pensamos: listo ya esta el archivo de excel y ya termine.&lt;/p&gt;

&lt;p&gt;En realidad estamos pensando que “hacer el archivo de excel”, “enviar el archivo de excel” y “notificar que se envió el archivo de excel”.  Un paso que para nosotros es muy obvio se transformó en 3 pasos que debemos indicarle a la computadora que debe hacer.&lt;/p&gt;

&lt;p&gt;Definimos la secuencia de pasos siguiente:&lt;br&gt;
Recibir el nombre de ciudad&lt;br&gt;
Conectarse airbnb con el nombre de la ciudad y “sacar los datos de hospedaje”&lt;br&gt;
Con la lista de datos de hospedaje crear un archivo de excel&lt;br&gt;
Enviar / descargar  el archivo de excel&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MkOLQX1a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://productividadti.com.mx/blog/2019/bpm_02_memorama1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MkOLQX1a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://productividadti.com.mx/blog/2019/bpm_02_memorama1.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Paso 4 .- Decidir que paso vamos a resolver
&lt;/h4&gt;

&lt;p&gt;¿Como saber cual es el paso más difícil de realizar? &lt;br&gt;
Como principiante puede parecer todo abrumador y todo se debe a la falta de conocimiento y práctica, así que tienes que investigar todos los pasos -sin meterse a hacerlos- para determinar de cual paso encuentras menos información o no encuentras. - solución buscar en internet-&lt;/p&gt;

&lt;h4&gt;
  
  
  Ejemplo de búsqueda
&lt;/h4&gt;

&lt;p&gt;Paso 1: cómo obtener el valor de un campo de texto&lt;br&gt;
Paso 2: cómo descargar datos de airbnb&lt;br&gt;
Paso 3 cómo crear archivo de excel:&lt;br&gt;
Paso 4 cómo descargar archivo&lt;/p&gt;

&lt;p&gt;Ya después de que investigamos vemos que el paso más difícil es el El Paso 2: Conectarse a airbnb.&lt;/p&gt;

&lt;p&gt;Ya tenemos identificado un punto de inicio.&lt;/p&gt;

&lt;p&gt;Solo hasta este momento pensamos en escribir código. Hasta este momento tenemos un objetivo claro : vamos a resolver el paso 2&lt;/p&gt;

&lt;p&gt;Cada paso está formado acciones que se ejecutan en secuencia, pero las acciones no se ejecutan solas. Llamemos actores/objetos a quienes ejecutan estas acciones.&lt;/p&gt;

&lt;p&gt;Vamos a escribir una parte de del programa, la llamamos Paso 2. Será una función o un método de clase que tomará un texto, se conectará a airbnb y devolverá una lista de datos (con datos de nombre y teléfono).&lt;/p&gt;

&lt;p&gt;El actor podria llamarse ConexionAirbnb y la función “getDatosHostFromCiudad”&lt;/p&gt;

&lt;p&gt;Funcion getDatosHostFromCiudad(ciudad){&lt;br&gt;
   /&lt;em&gt;se concecta a airbnb&lt;/em&gt;/&lt;br&gt;
   Return  textoConDatosAirbnb&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;De forma paralela a nuestro programa construiremos un “programa  de pruebas” donde estaremos ejecutando el paso que estamos desarrollando. ¿porqué? - porque todavía no tenemos los pasos iniciales , no tenemos la pantalla donde el usuario pone el nombre de la ciudad.&lt;/p&gt;

&lt;p&gt;¿Ya que resolvimos la conexión con airbnb con que paso continuamos?&lt;/p&gt;

&lt;p&gt;De nuevo… buscamos la parte más difícil, en este caso puede ser crear el archivo de excel.&lt;/p&gt;

&lt;p&gt;La acción podría llamarse crearArchivoExcel y la clase/objeto al que pertenezca se podría llamar FactoryExcel&lt;/p&gt;

&lt;p&gt;Funcion crearArchivoExcel (textoConDatosAirbnb){&lt;br&gt;
     /* crea archivo de excel */&lt;br&gt;
   Return rutaDeAccesoDelArchivoDeExcelCreado&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;De nuevo remarcamos el punto, el programa ya creó el archivo de excel. Al crearlo lo guarda en algún lado “ubicación temporal y el siguiente paso es descargar/enviar un archivo de excel. Para hacer eso solo necesitamos saber dónde está el archivo que vamos a enviar.&lt;/p&gt;

&lt;p&gt;De igual forma, trabajamos en nuestro programa de pruebas, usamos unos datos predeterminados para el paso3 ( ¿que datos? Copiamos los datos de respuesta que nos dio el paso 2 y los usamos todo el tiempo) - no ejecutamos el paso 2, solo trabajamos con el paso 3-&lt;/p&gt;

&lt;p&gt;Resolvemos el Paso 1 y 2. En este momento creamos un paso final… un paso 5. Que tomará cada paso del 1 al 4 para devolver la solución del problema.&lt;/p&gt;

&lt;p&gt;En este punto podemos decir que ya resolvimos el problema. Si y no… para una persona que no es programador ya está resuelvo el problema pero pensando como programador estamos a la mitad del camino.&lt;/p&gt;

</description>
      <category>aprenderaprogramar</category>
      <category>español</category>
      <category>principiante</category>
    </item>
    <item>
      <title>¿Cómo comenzar a programar?</title>
      <dc:creator>David Huerta</dc:creator>
      <pubDate>Sun, 19 May 2019 16:47:12 +0000</pubDate>
      <link>https://dev.to/iqdavidh/como-comenzar-a-programar-37hj</link>
      <guid>https://dev.to/iqdavidh/como-comenzar-a-programar-37hj</guid>
      <description>&lt;h1&gt;
  
  
  ¿Qué es programar?
&lt;/h1&gt;

&lt;p&gt;Antes de pensar en FrontEnd, Backend, pensemos en qué consiste el trabajo de un programador.&lt;/p&gt;

&lt;p&gt;Siempre pienso en este tema cuando conozco a alguien que se entera que soy programador y conoce del medio o también es programador. Casi siempre, siempre,  la pregunta que me hacen es: ¿en que lenguaje programas?.&lt;/p&gt;

&lt;p&gt;Ser programador no es saber escribir código en un lenguaje de programación. Saber escribir código es una habilidad indispensable para programar, digamos que es como correr para un futbolista.&lt;/p&gt;

&lt;p&gt;Cuando se, que alguien que acabo de conocer es programador; lo que me gustaría saber es: ¿qué tipo de problemas resuelve? ¿en qué giro trabaja?.&lt;/p&gt;

&lt;p&gt;Un programador es alguien que resuelve problemas usando computadoras, para usar esas computadoras utiliza uno o varios lenguajes de computación. El punto principal es: &lt;strong&gt;un programador es un resolvedor de problemas&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bienvenidos los problemas
&lt;/h2&gt;

&lt;p&gt;Inmediatamente que entramos en contacto con la idea del problema comenzamos a trabajar : nuestro trabajo es 50% pensar y el otro restante hacer lo que pensamos. Hay que analizar el nuevo problema que tenemos y buscamos conocer más detalles del problema….&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué se requiere obtener?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;¿Cómo se requiere el resultado?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;¿Quien lo necesita?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;...&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aquí es donde comienza la magia, con la información que recabamos comenzamos a pensar en una maquinaria / un gran circo que hará las cosas automáticamente paso a paso, de la forma que le digamos la primera vez y siempre, del dia de hoy al fin de los tiempos. Un programador es alguien que construye una maquinaria que requiere unos datos para producir algo siguiendo los pasos que le digamos.&lt;/p&gt;

&lt;p&gt;Cada programador creará una maquinaria diferente según sus gustos, preferencias y conocimientos. No hay una respuesta correcta o incorrecta. Solo hay programas más elegantes,  más eficientes, más fáciles que entender, más útiles que otros.&lt;/p&gt;

&lt;h2&gt;
  
  
  Antes de comenzar a crear la máquina debemos resolver el Problema
&lt;/h2&gt;

&lt;p&gt;Ya sabemos que vamos a crear una máquina y definimos ciertos actores que sabemos vamos a utilizar. Lo que sigue es en pensar los pasos que haríamos si lo hiciéramos de forma manual. Necesitamos sí o sí ,saber como resolver el problema con teclado y computadora (en analogía de lápiz y papel). Esta etapa es crítica, si no podemos resolver el problema de forma manual no lo haremos con un programa. Programar es escribir nuestros pasos al resolver un problema en código para la computadora. Si no sabemos hacerlo, le preguntamos a alguien más que nos lo explique como hacerlo a mano. Si nos piden hacer algo que no nos pueden explicar como se hace a mano también lo podemos hacer, pero eso es otro proyecto/problema “Como resolver a mano esto”.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Cómo empezamos a programar?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ¿Empezamos por el inicio?
&lt;/h3&gt;

&lt;p&gt;Lo lógico es que comencemos en la entrada con el paso 1 (los datos del problema) y avancemos en transformar los datos al producto final. Así como las carreteras. Se comienza del inicio y se van construyendo.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Empezamos por el fin?
&lt;/h3&gt;

&lt;p&gt;También es lógico que empecemos por el fin. Ya que es como estar en un laberinto y seguir nuestros pasos para llegar a la entrada.  Esta metodología nos asegura que si o si vamos a tener el producto final que queremos. También se construyen las carreteras así. &lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cual es la mejor opción?
&lt;/h3&gt;

&lt;p&gt;Para elegir cómo empezar a resolver un problema necesitamos entenderlo bien y  teniendo en cuenta nuestros conocimientos y nuestros recursos determinar qué es lo más difícil para nosotros. Esto significa que atacamos directamente la esencia del problema, resolviendo esta parte sabemos que todos lo demás serán “obvio” y no batallaremos con ellos.&lt;/p&gt;

&lt;p&gt;Resolver la parte más difícil del problema nos dirá si el problema se puede resolver o no, así sabremos reaccionar a tiempo. Cuando tengamos resuelta la parte más difícil de nuestro problema, la ruta entre la entrada  y salida se hace más corta porque ahora ya tenemos claro el punto medio. Los pasos de entrada al punto medio y de allí a la salida serán más sencillos. Si hacemos esto el resultado es que tenemos dos problemas (A y B) en lugar de uno,  pero son problemas más pequeños que el problema inicial. &lt;/p&gt;

&lt;p&gt;Ahora que tenemos dos problemas tomamos el primer problema (origen a punto medio) y repetimos el ciclo:&lt;/p&gt;

&lt;p&gt;1)Entender el problema&lt;br&gt;
2)Resolver el problema en pasos&lt;br&gt;
3)Buscar el paso más difícil&lt;br&gt;
4)Resolver el paso más difícil&lt;/p&gt;

&lt;p&gt;De esta forma terminamos resolviendo problemas pequeños muy específicos.&lt;/p&gt;

&lt;p&gt;Esta metodología no es algo que se invento con la programación, es algo propio del pensamiento humano. Realmente no se tiene que aprender, solo se debe ejercitar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Por más complejo que parezca un proceso, lo podemos dividir y resolver en pasos.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---HZe2kLA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://productividadti.com.mx/blog/proceso_q1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---HZe2kLA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://productividadti.com.mx/blog/proceso_q1.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aprenderaprogramar</category>
      <category>español</category>
      <category>principiante</category>
    </item>
  </channel>
</rss>
