<?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: 4GeeksAcademy</title>
    <description>The latest articles on DEV Community by 4GeeksAcademy (@4geeksacademy).</description>
    <link>https://dev.to/4geeksacademy</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%2Forganization%2Fprofile_image%2F3702%2F86042896-9fde-4c34-8657-9d722fb40fe3.png</url>
      <title>DEV Community: 4GeeksAcademy</title>
      <link>https://dev.to/4geeksacademy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/4geeksacademy"/>
    <language>en</language>
    <item>
      <title>Factory Method</title>
      <dc:creator>Juan Miguel Arias Mejias</dc:creator>
      <pubDate>Sun, 10 Apr 2022 21:25:41 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/factory-method-3509</link>
      <guid>https://dev.to/4geeksacademy/factory-method-3509</guid>
      <description>&lt;p&gt;Hola, hoy venimos con un patrón de diseño creacional. &lt;/p&gt;

&lt;p&gt;El Factory Method, es un patrón que nace de la necesidad de abstraer la lógica de creación de un objeto. Es más fácil entenderlo con un ejemplo.&lt;/p&gt;

&lt;p&gt;Pongamos en situación que estamos dándole mantenimiento a un sistema de logística, en donde el método de entrega siempre ha sido por tierra y todo bien, el sistema funciona de esta manera por varios años sin problemas. Llega el día, en que nuestra empresa decide diversificar las operación y se toma la decisión de ofrecer logística marítima. &lt;/p&gt;

&lt;p&gt;Vaya... parece que tenemos un problema, el sistema solamente esta enfocado a logística terrestre ¿Cómo haremos para resolver este problema? y sobre todo, ¿Cómo haremos para mejorar la escalabilidad del sistema? de manera que puedan haber tantos métodos de logística como se quiera sin mayores modificaciones. &lt;/p&gt;

&lt;p&gt;El Factory Method, nos puede ayudar en esta ocasión, es un patrón de diseño creacional listo para abstraer la lógica de la creación.&lt;/p&gt;

&lt;p&gt;Ok, estamos listos para implementarlo. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg7t7gz6xg1nc3v78ab3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg7t7gz6xg1nc3v78ab3.png" alt="Boat" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En este caso, necesitamos pensar en cómo llamaremos de manera general al grupo que envuelve el &lt;strong&gt;camión&lt;/strong&gt; o el &lt;strong&gt;bote&lt;/strong&gt;. Quizás &lt;strong&gt;Transporte&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1yt3pcd9mv9zu8q0flvt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1yt3pcd9mv9zu8q0flvt.png" alt="Truck" width="500" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;También necesitamos pensar en cómo llamaremos de manera general al grupo que envuelve la logística &lt;strong&gt;Terrestre&lt;/strong&gt; y el &lt;strong&gt;Marítima&lt;/strong&gt;. Quizás &lt;strong&gt;Logística&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Estamos listos. &lt;/p&gt;

&lt;p&gt;Por la parte del Transporte tendríamos el siguiente diagrama: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqutdgz9img5rh4bvr1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqutdgz9img5rh4bvr1y.png" alt="Diagrama transporte" width="612" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y por la parte de Logística tendríamos el siguiente:  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90yflh5a362x8e7n6v9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90yflh5a362x8e7n6v9d.png" alt="Diagrama Logistica" width="762" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En mi GitHub podrán ver la implementación en Golang. &lt;a href="https://github.com/juanmiguelar/CreationalPatternsGo/tree/main/FactoryMethod"&gt;Enlace&lt;/a&gt;&lt;br&gt;
Muchas gracias por leer&lt;br&gt;
Les dejo mis redes: &lt;a href="https://linkr.bio/juanmiguelar"&gt;Enlace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Imágenes y ejemplo tomado de: &lt;a href="https://refactoring.guru/design-patterns/factory-method"&gt;Enlace&lt;/a&gt;&lt;/p&gt;

</description>
      <category>design</category>
      <category>pattern</category>
      <category>go</category>
      <category>backend</category>
    </item>
    <item>
      <title>Estructura de datos: Pila</title>
      <dc:creator>Juan Miguel Arias Mejias</dc:creator>
      <pubDate>Wed, 06 Apr 2022 03:17:32 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/estructura-de-datos-pila-25pn</link>
      <guid>https://dev.to/4geeksacademy/estructura-de-datos-pila-25pn</guid>
      <description>&lt;p&gt;Hola! Soy yo de nuevo&lt;/p&gt;

&lt;p&gt;En esta ocasión venimos a escribir sobre la estructura de datos pila. &lt;/p&gt;

&lt;p&gt;La pila o "stack" del ingles, es la contra parte de la &lt;a href="https://dev.to/4geeksacademy/estructura-de-datos-cola-2879"&gt;cola&lt;/a&gt;(te recomiendo que leas el articulo anterior), se describe así: &lt;strong&gt;El primer dato que entra es el último en salir o el último dato que ingresa es el primero en salir.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lo podemos ver de esta forma. Cuando tenemos una pila de platos sucios, los apilamos, en espera de ser lavados. Cuando colocamos solamente uno, se vería de la siguiente forma:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;1 - Plato sucio -&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Como no hemos estado atentos a la pileta, de repente ingresan 2 platos sucios a la vez ¡Y no hemos procesado ni uno!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;3 - Plato sucio -&lt;br&gt;
2 - Plato sucio -&lt;br&gt;
1 - Plato sucio -&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Deberíamos de ponernos a ello y empezar a limpiarlos, en esta ocasión siguiendo el algoritmo de pila, el cuál nos dice que &lt;strong&gt;el último plato sucio que haya sido ingresado es el primero que debo de lavar&lt;/strong&gt;. ¡Pues a trabajar!&lt;/p&gt;

&lt;p&gt;- / - &lt;em&gt;Sonidos de limpieza&lt;/em&gt; - / -&lt;/p&gt;

&lt;p&gt;Listo, hemos lavado uno ¿Cómo se ve nuestra pila ahora?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;2 - Plato sucio -&lt;br&gt;
1 - Plato sucio -&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Lavemos otro!&lt;/p&gt;

&lt;p&gt;- / - &lt;em&gt;Sonidos de limpieza&lt;/em&gt; - / -&lt;/p&gt;

&lt;p&gt;¡Ufff, qué trabajo más arduo! Debería de solamente quedarnos un plato sucio pendiente, y según el algoritmo de pila, &lt;strong&gt;debería de quedarnos el primer plato que ingresó&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;1 - Plato sucio -&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Efectivamente, &lt;strong&gt;el plato pendiente es el primero que ingresó a la pila&lt;/strong&gt;. Bueno, será momento de lavarlo, nadie lo hará por nosotros.&lt;/p&gt;

&lt;p&gt;- / - &lt;em&gt;Sonidos de limpieza&lt;/em&gt; - / -&lt;/p&gt;

&lt;p&gt;¡Te felicito de haber llegado aquí! Has sido capaz de lavar toda la pila, vaya logro.&lt;/p&gt;

&lt;p&gt;Por acá te dejo el vídeo tutorial de la implementación en Golang: &lt;a href="https://www.youtube.com/watch?v=IDNc_qb5110"&gt;https://www.youtube.com/watch?v=IDNc_qb5110&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Además te dejo el repositorio: &lt;a href="https://github.com/juanmiguelar/Stack-golang"&gt;https://github.com/juanmiguelar/Stack-golang&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Y por si fuera poco, te dejo mis redes:&lt;br&gt;
&lt;a href="https://linkr.bio/juanmiguelar"&gt;https://linkr.bio/juanmiguelar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gracias por leer&lt;br&gt;
Pasa bonita vida&lt;/p&gt;

</description>
      <category>data</category>
      <category>go</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Estructura de datos: Cola</title>
      <dc:creator>Juan Miguel Arias Mejias</dc:creator>
      <pubDate>Mon, 04 Apr 2022 01:52:48 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/estructura-de-datos-cola-2879</link>
      <guid>https://dev.to/4geeksacademy/estructura-de-datos-cola-2879</guid>
      <description>&lt;p&gt;Hola!&lt;/p&gt;

&lt;p&gt;Hace un tiempo no escribo en este portal. Me gustaría regresar con un tema fundamental de la programación, &lt;strong&gt;estructuras de datos&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Las estructuras de datos son simplemente, formas diferentes de organizar los datos. Estas surgen de la necesidad de resolver problemas que son muy comunes o repetitivos en la labor del programador. &lt;/p&gt;

&lt;p&gt;Vamos a centrarnos en la &lt;strong&gt;cola&lt;/strong&gt; o "queue" del ingles. &lt;/p&gt;

&lt;p&gt;La Cola, es una estructura de datos que se comporta de forma similar a una cola o fila en el banco, tomando en cuenta que en esta analogía, los datos son las personas, que llegan para ser atendidas.&lt;/p&gt;

&lt;p&gt;Si la fila del banco esta vacía y llega una persona, pues lo más normal es que la primera persona que llegue sea la primera persona en ser atendida. Este es el principio fundamental de las colas. Primero que entra primero que sale. &lt;strong&gt;Primer dato que ingresa a la cola, primer dato que sale.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Digamos entonces, nuestra cola va a ser representada por una colección, de la siguiente forma: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si viene un dato a la cola, un dato que queremos encolar, por ejemplo un numero, se vería de la siguiente forma:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[1]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Y si este proceso se repite algunas veces:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[1, 2, 3]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tenemos una colección de 3 ítems, que se han colado haciendo fila para ser procesados, en el momento que quiera procesar los datos, debo desencolar uno. En esta ocasión al hacerlo, debería de salir el primer dato que haya sido ingresado, de la siguiente forma:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[2, 3]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Como podemos notar, el primer dato que ingresó fue el número 1 y este ha sido el primero que ha salido. Si repetimos el proceso, quedaría de la siguiente forma nuestra cola:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[3]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;De nuevo, se ve cómo es que el último que ingresó a la cola es el último en ser atendido. &lt;/p&gt;

&lt;p&gt;Si te animas a implementar este comportamiento de cola, te animo a checar el video tutorial que he creado en Youtube. &lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=ssqtGs9rkcg"&gt;Implementación de cola en golang&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gracias por leerme, Juan Miguel Arias Mejías&lt;/p&gt;

&lt;p&gt;Te dejo mis redes: &lt;a href="https://linkr.bio/juanmiguelar"&gt;enlace&lt;/a&gt;&lt;br&gt;
Pasa bonita vida.&lt;/p&gt;

</description>
      <category>datastructure</category>
      <category>go</category>
    </item>
    <item>
      <title>Detectar imágenes con inteligencia artificial</title>
      <dc:creator>Juan Miguel Arias Mejias</dc:creator>
      <pubDate>Sun, 23 May 2021 22:44:09 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/detectar-imagenes-con-inteligencia-artificial-4bnk</link>
      <guid>https://dev.to/4geeksacademy/detectar-imagenes-con-inteligencia-artificial-4bnk</guid>
      <description>&lt;p&gt;Hola, soy Juan Miguel!&lt;/p&gt;

&lt;p&gt;Quisiera iniciar mis entradas en este blog con uno de los temas que más me atraen, la inteligencia artificial. &lt;/p&gt;

&lt;p&gt;Les advierto, para realizar este tutorial es necesario contar con conocimientos básicos en python y github. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iniciemos!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Primero el problema: se nos presenta un requerimiento de reconocer el contenido de un conjunto de imágenes ingresadas por un usuario.&lt;/p&gt;

&lt;p&gt;¿Cómo podríamos hacer esto? &lt;/p&gt;

&lt;p&gt;Pues, si somos programadores muy avanzados quizás podríamos realizar el algoritmo para reconocer el contenido de las imágenes, pero gracias a la maravillosa comunidad de desarrolladores de software, esto no es necesario. Existe &lt;a href="https://github.com/OlafenwaMoses/ImageAI"&gt;ImageAI&lt;/a&gt;!&lt;/p&gt;

&lt;h3&gt;
  
  
  ImageAI
&lt;/h3&gt;

&lt;p&gt;Herramienta perfecta para el reconocimiento de imágenes y por supuesto, gratis para probarla y jugar con ella. Vamos a ello!&lt;/p&gt;

&lt;p&gt;Tengo preparado un repositorio listo! Va a ser increíblemente sencillo, créeme; &lt;a href="https://github.com/juanmiguelar/ImageAI_Lab"&gt;Link al repo&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Qué podremos encontrar en el repositorio?
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59n4adi8c9lpmmgjp97v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59n4adi8c9lpmmgjp97v.png" alt="image" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;brain.py&lt;/strong&gt;: Archivo de python listo para probarse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;giraffe.jpg, godzilla.jpg, house.jpg&lt;/strong&gt;: Imágenes para probar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mobilenet_v2.h5&lt;/strong&gt;: A este archivo, quizás podríamos llamarle la &lt;em&gt;inteligencia&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cuando descarguemos este repositorio necesitamos ejecutar los siguientes comandos para poder correr el brain.py:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install tensorflow==2.4.0
pip install imageai --upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Debemos tomar en cuenta que la inteligencia que estamos utilizando en este tutorial no es muy avanzada, pero &lt;a href="https://github.com/OlafenwaMoses/ImageAI/blob/master/imageai/Classification/README.md"&gt;aqui&lt;/a&gt; les dejo el enlace para que prueben con otras más precisas. &lt;/p&gt;

&lt;p&gt;Les dejo un vídeo para guiarles en todo el proceso.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/jj4_pFJBt8I"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Un saludo!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/juanmiguelar/"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/juanmiguelar"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>beginners</category>
      <category>github</category>
    </item>
    <item>
      <title>Deploy en Heroku</title>
      <dc:creator>NicolasArayaB</dc:creator>
      <pubDate>Thu, 13 May 2021 02:27:55 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/deploy-en-heroku-5gnc</link>
      <guid>https://dev.to/4geeksacademy/deploy-en-heroku-5gnc</guid>
      <description>&lt;p&gt;Utilizando el boilerplate &lt;a href="https://github.com/4GeeksAcademy/react-flask-hello/tree/main/docs"&gt;react-flask-hello&lt;/a&gt;, realizar el deploy de tu applicación es bastante simple.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lo primero es crear una cuenta en &lt;a href="https://heroku.com"&gt;Heroku&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Una vez tengas la cuenta, instalas heroku:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  $ npm i heroku -g
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Crea la app en heroku:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  $ heroku create &amp;lt;your_application_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Agregas Python y Node.js para poder usar npm en producción:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  $ heroku buildpacks:add --index 1 heroku/python
  $ heroku buildpacks:add --index 2 heroku/nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Agregas una base de datos. Para esto, puedes revisar &lt;a href="https://elements.heroku.com/addons"&gt;aca&lt;/a&gt; cual es la opción que se adecua mejor a tus necesidades. En el caso de MySQL, puedes usar JawsDB MySQL ya que da una opción gratis de la siguiente manera:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   heroku addons:create jawsdb:kitefin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si utilizas PostgreSQL, puedes utilizar Heroku Postrgres:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  $ heroku addons:create heroku-postgresql:hobby-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Si estas utilizando PostgreSQL, debes realizar un paso extra. Debido a que se genera automaticamente la 'DATABASE_URL' con el paso anterior, debemos agregar en /src/app.py, .replace("://", "ql://", 1) de esta manera:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  # database configuration
  if os.getenv("DATABASE_URL") is not None:
    app.config['SQLALCHEMY_DATABASE_URI'] = 
  os.environ.get('DATABASE_URL').replace("://", "ql://", 1)
  else:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Luego agregamos el resto de las variables del archivo .env de la siguiente forma:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  $ heroku config:set FLASK_APP_KEY="any key works"
  $ heroku config:set FLASK_APP=src/app.py
                   # Importante: En archivo .env está en 
                     development, heroku hay que setearlo para 
                     producción     ↓
  $ heroku config:set FLASK_ENV=production 
  $ heroku config:set BASENAME=/
                   # Importante: Esta variable tiene que     
                     quedar vacia   ↓
  $ heroku config:set BACKEND_URL=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Si tienes cambios pendientes, solo guarda y ya estas listo para hacer el deploy:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  $ git add .
  $ git commit -m 'deploying to heroku'
  $ git push heroku main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>heroku</category>
    </item>
    <item>
      <title>¿Qué es Typescript?</title>
      <dc:creator>Manuel Ortega Carcamo</dc:creator>
      <pubDate>Thu, 01 Apr 2021 19:14:53 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/que-es-typescript-11mb</link>
      <guid>https://dev.to/4geeksacademy/que-es-typescript-11mb</guid>
      <description>&lt;p&gt;Javascript es un lenguaje que tiene un tipado débil, esto quiere decir que las variables son declaradas sin un tipo y dependiendo del valor que se asigne es el tipo de dato que asume la variable.    Podemos modificar, operar y comparar los los valores entre ellos sin que tengamos que hacer una conversión previa. &lt;/p&gt;

&lt;p&gt;En el siguiente ejemplo podemos ver como cambiamos el tipo de datos sin algún tipo de conversión:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Aprendiendo Javascript&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// "string"&lt;/span&gt;

&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;33&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// "number"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ¿Qué es typeScript?
&lt;/h2&gt;




&lt;p&gt;Typescript es un lenguaje de programación que agregar nuevas funcionalidades a Javascript, esto es conocido como un superset.   Un superset se escribe tomando como base otro lenguaje de programación aplicando mejoras en el lenguaje original.   Por esta razón Typescript se escribió sobre javascript para agregar nuevas funcionalidades que veres más adelante.&lt;/p&gt;

&lt;p&gt;Typescript es la solución a muchos de los problemas de JavaScript, está pensado para el desarrollo de aplicaciones robustas, implementando características en el lenguaje que nos permitan desarrollar herramientas más avanzadas para el desarrollo de aplicaciones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tipado estático
&lt;/h2&gt;




&lt;p&gt;El tipado estático define que :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Las variables tienen un solo tipo de datos&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Los valores asignados a las variables deben tener el mismo tipo que la variable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En el siguiente ejemplo se está declarando la variable &lt;code&gt;message&lt;/code&gt; del tipo &lt;code&gt;string&lt;/code&gt;. El valor que asignaremos a nuestra variable debe ser del mismo tipo, por esta razón se asigna el string &lt;code&gt;Conociendo TypeScript&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Conociendo TypeScript&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tipos de Datos en TypeScript
&lt;/h2&gt;




&lt;p&gt;Las variables pueden tener diferentes tipos de valores, a continuación detallaremos como podemos definir cada tipo usando TypesCript:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Boolean&lt;/strong&gt;:  Solo acepta valores: Verdadero o Falso
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let isExist:boolean =  true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;String&lt;/strong&gt;:  Cualquier serie de caracteres
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let message:string = "Conociendo TypeScript"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Number&lt;/strong&gt;: Solo acepta números
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let age:number = 33
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;null&lt;/strong&gt;: Acepta valores indefinidos o vacíos
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let isNotExist:null = null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Array&lt;/strong&gt;: Una lista con un tipo de dato.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let arrayNumber:Array&amp;lt;number&amp;gt; = [1, 2, 3, 4]
let arrayNumber:Array&amp;lt;string&amp;gt; = ["uno", "dos", "tres", "cuatro"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tuplas&lt;/strong&gt;: Acepta una lista con tipos de datos predefinidos.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let arraytupla: = [number, string, number]
arraytupla = [23, 'Hello World', true]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Void&lt;/strong&gt;: Se utiliza para indicar que no tenemos un tipo de datos definido
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let notDataType:void = undefined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enum&lt;/strong&gt;: Permite definir posibles valores que pueden ser asignados a la variable
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;enum Animals {cat, lion, dog, cow, monkey}
let c: Animals = Animals.cat;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Any&lt;/strong&gt;: Se utiliza cuando el tipo de datos puede ser cualquiera de los anteriores
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let wherever: any = 14;
wherever = "people";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Clases
&lt;/h3&gt;

&lt;p&gt;Así como en cualquier otro lenguaje de programación orientado a objetos, en TypeScript las clases tienen campos, constructores, propiedades y funciones. Las clases actúan como contenedores que encapsulan código para ser consumidos de una manera más fácil.&lt;/p&gt;

&lt;p&gt;Al definir una clase utilizamos la palabra &lt;code&gt;class&lt;/code&gt; y cerramos con llaves &lt;code&gt;{}&lt;/code&gt;, así como en c# y java por ejemplo y luego definimos adentro nuestros campos, constructores, propiedades y funciones.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;fields&lt;/span&gt;
    &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Constructor&lt;/span&gt;
    &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Properties&lt;/span&gt;
    &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ingrese un valor válido&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;Functions&lt;/span&gt;
    &lt;span class="nx"&gt;fullName&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Juanin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;JanJarri&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;El nuevo usuario es:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fullName&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En el ejemplo anterior se define un método &lt;code&gt;constructor()&lt;/code&gt; que recibe los parámetros &lt;code&gt;name: String, lastName: String&lt;/code&gt;, estos parámetros son asignados a los valores internos de la clase utilizando el método &lt;code&gt;this&lt;/code&gt; para referenciarlos.&lt;/p&gt;

&lt;p&gt;Además las &lt;code&gt;Properties&lt;/code&gt; nos permiten obtener y asignar datos de variables o métodos internas de la clase.   En el ejemplo el método &lt;code&gt;setName()&lt;/code&gt; permite asignar el valor recibido como parámetro a la propiedad interna llamada &lt;code&gt;name&lt;/code&gt;.   El método &lt;code&gt;getName()&lt;/code&gt; permite obtener el valor de la propiedad interna 'name'&lt;/p&gt;

&lt;p&gt;Las &lt;code&gt;Functions&lt;/code&gt; nos permiten ejecutar funciones o métodos internos de las clase, en el ejemplo el metódo &lt;code&gt;fullName()&lt;/code&gt; devuelve la unión de las propiedades internas &lt;code&gt;name&lt;/code&gt; más &lt;code&gt;lastName&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para crear una instancia de la clase &lt;code&gt;User&lt;/code&gt; definimos la siguiente constante &lt;code&gt;const newUser = new User('Juanin','JanJarri');&lt;/code&gt;  En estas lineas de código se puede apreciar que al crear esta instancia se envían los parámetros &lt;code&gt;'Juanin','JanJarri'&lt;/code&gt; al constructor para inicializar la clase con esos valores.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interfaces
&lt;/h2&gt;




&lt;p&gt;En oportunidades llamadas firmas, es el mecanismo que usa Typescript para definir tipos en las clases.   Permiten definir la estructura o el tipo de objetos más complejos.  &lt;/p&gt;

&lt;p&gt;La forma en que se utiliza una interface es muy similar a como se define una clase, pero solo se declaran atributos y métodos si su implementación. &lt;/p&gt;

&lt;p&gt;Al igual que los tipos de variables simples, estos objetos también deberán seguir un conjunto de reglas creadas por ti. Esto puede ayudarlo a escribir código con más confianza y con menos posibilidades de error.&lt;/p&gt;

&lt;p&gt;En el siguiente ejemplo definimos una interface llamada &lt;code&gt;Lakes&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface Lakes {
    name: string,
    area: number,
    length: number,
    depth: number,
    isFreshwater: boolean,
    countries: string[]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La &lt;code&gt;Lakes&lt;/code&gt; interface contiene el tipo de cada propiedad que vamos a utilizar al crear nuestros objetos.  A continuación crearemos un nuevo objeto &lt;code&gt;firstLake&lt;/code&gt; que heredará las propiedades que tiene la interface &lt;code&gt;Lakes&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let firstLake: Lakes = {
    name: 'Caspian Sea',
    length: 1199,
    depth: 1025,
    area: 371000,
    isFreshwater: false,
    countries: ['Kazakhstan', 'Russia', 'Turkmenistan', 'Azerbaijan', 'Iran']
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como puede ver, no importa el orden en el que asigne un valor a estas propiedades. Sin embargo, no puedes omitir un valor. &lt;br&gt;
Deberás asignar un valor a cada propiedad para evitar errores al compilar el código. &lt;/p&gt;

&lt;p&gt;De esta manera, TypeScript se asegura de que no se pierda ninguno de los valores requeridos por error. &lt;/p&gt;
&lt;h3&gt;
  
  
  Propiedades opcionales
&lt;/h3&gt;

&lt;p&gt;A veces, es posible que necesites una propiedad solo para algunos objetos específicos. &lt;/p&gt;

&lt;p&gt;Por ejemplo, supongamos que desea agregar una propiedad para especificar los meses en los que se congela un lago. Si agrega la propiedad directamente a la interfaz, como hemos hecho hasta ahora, obtendrá un error para otros lagos que no se congelan y por lo tanto no tienen la propiedad &lt;code&gt;frozen&lt;/code&gt;.  De manera similar, si agrega esa propiedad a los lagos que están congelados pero no en la declaración de la interfaz, aún obtendrá un error.&lt;/p&gt;

&lt;p&gt;En tales casos, puede agregar un signo de interrogación &lt;code&gt;?&lt;/code&gt; después del nombre de una propiedad para establecerla como opcional en la declaración de la interfaz. De esta manera, no obtendrá un error por propiedades faltantes o propiedades desconocidas. El siguiente ejemplo se vuelve a definir la interface &lt;code&gt;Lakes&lt;/code&gt; pero la propiedad &lt;code&gt;area&lt;/code&gt; queda como opcional.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface Lakes {
    name: string,
    area?: number,
    length: number,
    depth: number,
    isFreshwater: boolean,
    countries: string[]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Playground
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?"&gt;Playground typeScript&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;




&lt;p&gt;Esta lectura presentó todos los tipos que están disponibles en TypeScript. Aprendimos cómo la asignación de un tipo diferente de valor a una variable mostrará errores en TypeScript. Esta comprobación puede ayudarlo a evitar muchos errores al trabajar en aplicaciones grande y robustas.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Instalación Python, Flask, PipEnv en Linux Ubuntu 20</title>
      <dc:creator>Manuel Ortega Carcamo</dc:creator>
      <pubDate>Tue, 23 Mar 2021 16:03:48 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/instalacion-python-flask-pipenv-en-linux-ubuntu-20-4809</link>
      <guid>https://dev.to/4geeksacademy/instalacion-python-flask-pipenv-en-linux-ubuntu-20-4809</guid>
      <description>&lt;h2&gt;
  
  
  Guía de instalación
&lt;/h2&gt;

&lt;p&gt;Abrir una terminal y ejecutar los siguientes pasos:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Actualizar los paquetes disponibles y sus versiones.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Instalar Python 3&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Verificar la versión de Python instalada&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Instalar pipenv&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install pipenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Creación de mi primer API usando Flask
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Crear un carpeta e ingresar en ella
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir miApi
cd  miApi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Crear el entorno virtual
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pipenv shell
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Instalar Flask
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pipenv install flask

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Verificar las versiones instaladas
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m flask --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Crear un archivo &lt;code&gt;hello.py&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;touch hello.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Pegar el siguiente código en el archivo &lt;code&gt;hello.py&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Agregar una variable de entorno con el nombre de la app
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export FLASK_APP=hello.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Ejecutar la API
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flask run

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Instalación Mysql en Linux Ubuntu 20</title>
      <dc:creator>Manuel Ortega Carcamo</dc:creator>
      <pubDate>Tue, 23 Mar 2021 03:35:07 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/instalacion-mysql-en-linux-ubuntu-20-f50</link>
      <guid>https://dev.to/4geeksacademy/instalacion-mysql-en-linux-ubuntu-20-f50</guid>
      <description>&lt;h2&gt;
  
  
  Guía de instalación
&lt;/h2&gt;

&lt;p&gt;Abrir una terminal y ejecutar los siguientes pasos:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Actualizar los paquetes disponibles y sus versiones.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Instalar Mysql&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install mysql-server

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Instalar la secuencia de comandos de seguridad, esta opción agrega seguridad a la instalación de nuestra base de datos&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mysql_secure_installation

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Output&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Output
Please set the password for root here.


New password:

Re-enter new password:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Ajustar la autenticación y los privilegios de usuario&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mysql

SELECT user,authentication_string,plugin,host FROM mysql.user;

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Ejecutamos este comando para indicar al servidor que vuelva a cargar la tabla de permisos y aplique sus nuevos cambios:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FLUSH PRIVILEGES;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Instalación de WorkBench
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ingresar al &lt;a href="https://dev.mysql.com/downloads/repo/apt/"&gt;Link&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Descargar el archivo presionando la opción &lt;strong&gt;Download&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Presionar la opción &lt;strong&gt;No thanks, just start my download&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Arrastrar el archivo descargado a la terminal quedando de la siguiente forma&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install '/home/student/Downloads/mysql-apt-config_0.8.16-1_all.deb' 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Actualizar los paquetes disponibles y sus versiones.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Instalar MySQL Workbench&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install mysql-workbench-community
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Ejecutar desde la terminal MySQL Workbench&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mysql-workbench
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fuente:  &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04-es"&gt;DigitalOceans&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Instalación de VCode en Linux Ubuntu</title>
      <dc:creator>Manuel Ortega Carcamo</dc:creator>
      <pubDate>Tue, 23 Mar 2021 02:50:35 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/instalacion-de-vcode-en-linux-ubuntu-42d4</link>
      <guid>https://dev.to/4geeksacademy/instalacion-de-vcode-en-linux-ubuntu-42d4</guid>
      <description>&lt;h2&gt;
  
  
  Guía de instalación
&lt;/h2&gt;

&lt;p&gt;Abrir una terminal y ejecutar los siguientes pasos:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Actualizar los paquetes disponibles y sus versiones.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Instalar Vcode&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install software-properties-common apt-transport-https wget
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Importar la clave GPG de Microsoft&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Habilitar repositorios de Vcode&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Instalar Vcode&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install code

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Abrir Vcode, escribiendo en la barra de búsqueda de Actividades ‘Visual Studio Code‘&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Instalación de Git en Linux Ubuntu</title>
      <dc:creator>Manuel Ortega Carcamo</dc:creator>
      <pubDate>Tue, 23 Mar 2021 02:27:14 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/instalacion-git-en-linux-ubuntu-3d22</link>
      <guid>https://dev.to/4geeksacademy/instalacion-git-en-linux-ubuntu-3d22</guid>
      <description>&lt;h2&gt;
  
  
  Guía de instalación
&lt;/h2&gt;

&lt;p&gt;Abrir una terminal y ejecutar los siguientes pasos:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Actualizar los paquetes disponibles y sus versiones.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Instalar Git&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Verificar la versión de Git instalada&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git --version

git version 2.25.1

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Clonar el boilerplate de la academia react-hello
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/4GeeksAcademy/react-hello.git

cd react-hello

npm install

npm run start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Instalación Node en Linux Ubuntu 20</title>
      <dc:creator>Manuel Ortega Carcamo</dc:creator>
      <pubDate>Tue, 23 Mar 2021 02:03:59 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/instalacion-node-en-linux-ubuntu-5h09</link>
      <guid>https://dev.to/4geeksacademy/instalacion-node-en-linux-ubuntu-5h09</guid>
      <description>&lt;h2&gt;
  
  
  Guía de instalación
&lt;/h2&gt;

&lt;p&gt;Abrir una terminal y ejecutar los siguientes pasos:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Actualizar los paquetes disponibles y sus versiones.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Instalar Node.js&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Verificar la versión de Node.js instalada&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node -v

v10.19.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Instalar npm&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install npm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Verificar la versión de npm instalada&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm -v

6.14.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Crear una App de Reactjs de ejemplo&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-react-app test

cd test

npm run start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Configurar terminal de Git Bash en Vcode</title>
      <dc:creator>Manuel Ortega Carcamo</dc:creator>
      <pubDate>Sat, 06 Mar 2021 16:25:12 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/configurar-terminal-de-git-bash-en-vcode-2k2l</link>
      <guid>https://dev.to/4geeksacademy/configurar-terminal-de-git-bash-en-vcode-2k2l</guid>
      <description>&lt;p&gt;Para los usuarios que utilizan sistemas operativo Windows, es necesario instalar una terminal para poder utilizar los comandos que se usan en servidores Linux.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué necesito instalar?
&lt;/h3&gt;

&lt;p&gt;Debemos instalar la terminal &lt;a href="https://git-scm.com/download/win"&gt;Git Bash&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Como configurar Visual Studio Code para usar Git Bash?
&lt;/h3&gt;

&lt;p&gt;Debemos seguir estos pasos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Copiar la ruta donde se instalo Git Bash, en mi caso fue en la carpeta &lt;code&gt;c:\Program Files\Git\git-bash.exe&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PKnFXGk0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wjq3h6v2dnhsq0r36v6a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PKnFXGk0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wjq3h6v2dnhsq0r36v6a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Abrir Visual Studio Code y en el menú superior seleccionar la opción &lt;code&gt;File&lt;/code&gt; luego &lt;code&gt;Preferences&lt;/code&gt; luego &lt;code&gt;Settings&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_iENjS3f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xbon1rffukeywf4mfgw4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_iENjS3f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xbon1rffukeywf4mfgw4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Se nos desplegará una pantalla con opciones y debemos seleccionar la que dice &lt;code&gt;Extensions&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mpKhAiV7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wni79mzq80a7tdc0uuuj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mpKhAiV7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wni79mzq80a7tdc0uuuj.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;En la opción &lt;code&gt;Explorer Kind&lt;/code&gt;, seleccionamos la opción &lt;code&gt;external&lt;/code&gt; y luego pegamos la ruta donde se encuentra instalada Git-Bash, en mi caso era &lt;code&gt;c:\Program Files\Git\git-bash.exe&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SoH_8NYD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/me3m2pl9oikzraq80soz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SoH_8NYD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/me3m2pl9oikzraq80soz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Luego debemos abrir una nueva terminal &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4J70ifBv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6itt89t9fkmz1lighpi2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4J70ifBv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6itt89t9fkmz1lighpi2.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Y debería verse de esta forma&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b3B8t0Ch--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/27biz3x4811p2zfz4joz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b3B8t0Ch--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/27biz3x4811p2zfz4joz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
