<?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>Forem: maricarmendev</title>
    <description>The latest articles on Forem by maricarmendev (@maricarmendev).</description>
    <link>https://forem.com/maricarmendev</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%2F655462%2Fa5f2e5e6-31e6-45e9-a2da-a63de813986f.png</url>
      <title>Forem: maricarmendev</title>
      <link>https://forem.com/maricarmendev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/maricarmendev"/>
    <language>en</language>
    <item>
      <title>AWS Web Application Firewall (WAF)</title>
      <dc:creator>maricarmendev</dc:creator>
      <pubDate>Wed, 09 Oct 2024 04:02:35 +0000</pubDate>
      <link>https://forem.com/maricarmendev/aws-web-application-firewall-waf-4g3d</link>
      <guid>https://forem.com/maricarmendev/aws-web-application-firewall-waf-4g3d</guid>
      <description>&lt;p&gt;La seguridad en la nube es un aspecto crítico que las organizaciones deben abordar en un entorno digital cada vez más complejo y vulnerable. Con la creciente dependencia de las aplicaciones web, la protección contra ciberataques se ha convertido en una prioridad fundamental. Amenazas como inyecciones SQL, ataques de scripts entre sitios (XSS) y denegaciones de servicio (DoS) pueden comprometer la integridad de los datos y poner en riesgo la confianza del cliente.&lt;/p&gt;

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

&lt;p&gt;AWS WAF (Web Application Firewall) se presenta como una solución integral para salvaguardar aplicaciones web frente a estas amenazas. Este servicio permite a las organizaciones crear reglas personalizadas para filtrar el tráfico HTTP y HTTPS, brindando una capa adicional de defensa que se adapta a las necesidades específicas de cada aplicación. A través de su capacidad para monitorear y evaluar el tráfico en tiempo real, AWS WAF no solo ayuda a prevenir ataques, sino que también proporciona información valiosa para mejorar continuamente la seguridad de las aplicaciones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Características principales de AWS WAF:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Filtrado de tráfico&lt;/strong&gt;: Puedes crear reglas basadas en la dirección IP, encabezados HTTP, cadenas de consulta y otros atributos de la solicitud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protección en tiempo real&lt;/strong&gt;: Monitorea y analiza el tráfico web en tiempo real, lo que permite reaccionar rápidamente a amenazas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integración con otros servicios de AWS&lt;/strong&gt;: Se puede utilizar junto con Amazon CloudFront, Application Load Balancer (ALB) y API Gateway para proteger las aplicaciones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reglas gestionadas&lt;/strong&gt;: AWS ofrece reglas gestionadas que pueden proteger contra las vulnerabilidades más comunes sin necesidad de configurar cada regla manualmente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalabilidad&lt;/strong&gt;: Como servicio gestionado, AWS WAF se adapta automáticamente a las variaciones en el tráfico.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Beneficios de Usar AWS WAF&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• AWS WAF ayuda a &lt;strong&gt;prevenir ataques comunes&lt;/strong&gt;, como inyecciones SQL y scripts entre sitios (XSS), antes de que puedan afectar tu aplicación.&lt;/p&gt;

&lt;p&gt;• Al &lt;strong&gt;filtrar el tráfico malicioso&lt;/strong&gt; desde el principio, reduces el riesgo de brechas de seguridad y la exposición a vulnerabilidades.&lt;/p&gt;

&lt;p&gt;• Proporciona capacidades de &lt;strong&gt;monitoreo y generación de informes&lt;/strong&gt;, permitiéndote ver estadísticas sobre el tráfico, detectar patrones de ataque y ajustar tus reglas en consecuencia.&lt;/p&gt;

&lt;p&gt;• Puedes crear &lt;strong&gt;reglas personalizadas que se adapten a las necesidades específicas de tu aplicación&lt;/strong&gt;, lo que mejora la defensa contra amenazas únicas a tu entorno.&lt;/p&gt;

&lt;p&gt;• Se integra fácilmente con otros servicios de AWS, como Amazon CloudFront y API Gateway, asegurando una protección coherente en toda tu arquitectura.&lt;/p&gt;

&lt;p&gt;• AWS WAF se adapta automáticamente a las variaciones en el tráfico, permitiendo que tu aplicación crezca sin comprometer la seguridad.&lt;/p&gt;

&lt;p&gt;• Ayuda a cumplir con &lt;strong&gt;estándares de seguridad y regulaciones&lt;/strong&gt;, lo que puede ser crucial para negocios que manejan información sensible.&lt;/p&gt;

&lt;p&gt;• Al prevenir ataques y brechas de seguridad, puedes evitar gastos significativos en recuperación de datos y reputación empresarial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ataques comunes que podemos prevenir con WAF&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Inyecciones SQL:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;• Previene que los atacantes inserten consultas SQL maliciosas a través de entradas de usuario, lo que podría permitir el acceso no autorizado a bases de datos.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cross-Site Scripting (XSS):&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;• Protege contra ataques donde un atacante inyecta scripts maliciosos en contenido que se muestra a otros usuarios, permitiendo el robo de información o la manipulación de sesiones.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cross-Site Request Forgery (CSRF):&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;• Ayuda a prevenir que los usuarios sean engañados para enviar solicitudes no autorizadas a una aplicación en la que están autenticados.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ataques de Denegación de Servicio (DoS):&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;• Mitiga ataques que buscan sobrecargar la aplicación con tráfico masivo, afectando su disponibilidad.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fuerza Bruta:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;• Bloquea intentos de acceso no autorizado a cuentas mediante ataques de fuerza bruta que intentan adivinar contraseñas.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Crawlers y Bots Maliciosos:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;• Permite filtrar tráfico de bots que pueden estar scraping contenido o llevando a cabo otras actividades no deseadas.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ataques de Inyección de Comandos:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;• Previene la ejecución de comandos no autorizados en el servidor a través de entradas maliciosas.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Vulnerabilidades de Seguridad Comunes:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;• Ayuda a proteger contra ataques que aprovechan vulnerabilidades comunes de seguridad, como las descritas en el OWASP Top Ten (una lista de los principales riesgos de seguridad en aplicaciones web).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Acceso No Autorizado:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;• Bloquea intentos de acceso a recursos restringidos, asegurando que solo los usuarios autorizados puedan acceder a ciertas partes de la aplicación.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Manipulación de Parámetros:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;• Protege contra ataques que manipulan parámetros de solicitud, como la cadena de consulta o el cuerpo de la solicitud, para acceder a información o funcionalidades no autorizadas.&lt;/p&gt;

&lt;p&gt;AWS WAF funciona como un sistema de defensa para aplicaciones web, filtrando y monitoreando el tráfico HTTP y HTTPS que se dirige a ellas. Aquí te explico cómo funciona a grandes rasgos:&lt;/p&gt;

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

&lt;p&gt;AWS WAF (Web Application Firewall) funciona como un sistema de defensa para aplicaciones web, filtrando y monitoreando el tráfico HTTP y HTTPS que se dirige a ellas. Aquí te explico cómo funciona a grandes rasgos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configuración de reglas:&lt;/strong&gt; Los usuarios pueden definir reglas personalizadas que especifican qué tipo de tráfico permitir, bloquear o contar. Estas reglas pueden basarse en varios criterios, como direcciones IP, encabezados HTTP, cadenas de consulta, URI, y otros atributos de la solicitud.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Evaluación del tráfico:&lt;/strong&gt; Cuando una solicitud llega a tu aplicación web, AWS WAF evalúa el tráfico entrante en función de las reglas definidas. Esta evaluación se realiza antes de que el tráfico llegue a la aplicación, lo que ayuda a prevenir ataques antes de que afecten el servicio.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Acciones definidas:&lt;/strong&gt; Según la evaluación de las reglas, AWS WAF toma acciones específicas:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;• &lt;strong&gt;Allow:&lt;/strong&gt; Permitir que la solicitud continúe hacia la aplicación.&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Block:&lt;/strong&gt; Denegar la solicitud, evitando que llegue a la aplicación.&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Count:&lt;/strong&gt; Registrar la solicitud para su análisis, pero permitir que pase.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monitoreo y reportes:&lt;/strong&gt; AWS WAF proporciona capacidades de monitoreo y generación de informes, lo que permite a los usuarios ver estadísticas sobre el tráfico web, ataques potenciales y la efectividad de las reglas. Esto ayuda a ajustar las reglas y mejorar la protección.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integración con otros servicios:&lt;/strong&gt; AWS WAF se integra con otros servicios de AWS, como Amazon CloudFront, Application Load Balancer (ALB) y API Gateway, permitiendo que la protección se aplique en múltiples niveles de la infraestructura.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reglas gestionadas:&lt;/strong&gt; AWS también ofrece reglas gestionadas que protegen contra amenazas comunes, como inyecciones SQL y ataques XSS, facilitando la configuración inicial de seguridad sin necesidad de conocimientos profundos sobre WAF.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Este enfoque permite a las organizaciones proteger sus aplicaciones web de manera eficaz, además de ser especialmente útil para organizaciones que buscan proteger sus aplicaciones web y mantener la integridad de sus datos y servicios en línea mitigando riesgos de seguridad y garantizando un funcionamiento más seguro.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En resumen, AWS WAF (Web Application Firewall) es una herramienta fundamental para proteger nuestras aplicaciones web de los ataques más comunes que enfrentamos en el mundo digital actual. Su capacidad para filtrar y monitorear el tráfico HTTP y HTTPS, junto con la opción de crear reglas personalizadas o utilizar las reglas gestionadas que ofrece AWS, nos permite defendernos de amenazas como inyecciones SQL y ataques XSS de manera efectiva.&lt;/p&gt;

&lt;p&gt;Implementar AWS WAF no solo significa reforzar la seguridad de nuestras aplicaciones, sino también cuidar la integridad de los datos y la confianza de nuestros usuarios. La integración fluida con otros servicios de AWS, el monitoreo en tiempo real y la escalabilidad del servicio son aspectos que nos ayudan a adaptarnos a las necesidades cambiantes de tráfico y a enfrentar nuevos desafíos en la seguridad.&lt;/p&gt;

&lt;p&gt;En definitiva, AWS WAF se convierte en una pieza clave en nuestra estrategia de seguridad, asegurando que nuestras aplicaciones web no solo funcionen correctamente, sino que también sean seguras y confiables para todos.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>security</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Guía para Aumentar tus Ingresos como desarrollador</title>
      <dc:creator>maricarmendev</dc:creator>
      <pubDate>Sat, 05 Oct 2024 03:47:16 +0000</pubDate>
      <link>https://forem.com/maricarmendev/guia-para-aumentar-tus-ingresos-como-desarrollador-4emi</link>
      <guid>https://forem.com/maricarmendev/guia-para-aumentar-tus-ingresos-como-desarrollador-4emi</guid>
      <description>&lt;p&gt;Ser desarrollador es una de las profesiones más demandadas en la actualidad, y las oportunidades para hacer dinero como programador son casi infinitas. Ya sea que trabajes para una empresa, seas freelancer o estés buscando ingresos pasivos, hay varias formas de aumentar tus ingresos en este emocionante campo. A continuación, te muestro diferentes maneras de monetizar tus habilidades como desarrollador.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Trabaja Como Freelancer
&lt;/h2&gt;

&lt;p&gt;El &lt;strong&gt;freelancing&lt;/strong&gt; es una de las formas más populares de hacer dinero como desarrollador. Puedes trabajar para clientes en proyectos específicos sin estar atado a una empresa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ventajas:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Flexibilidad de horario y lugar de trabajo.&lt;/li&gt;
&lt;li&gt;Variedad de proyectos, desde el desarrollo web hasta aplicaciones móviles.&lt;/li&gt;
&lt;li&gt;Control sobre tus tarifas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Dónde Empezar:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.upwork.com/" rel="noopener noreferrer"&gt;Upwork&lt;/a&gt;&lt;/strong&gt;: Una de las plataformas más grandes de freelancing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.freelancer.com/" rel="noopener noreferrer"&gt;Freelancer&lt;/a&gt;&lt;/strong&gt;: Otra opción para conectar con clientes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.toptal.com/" rel="noopener noreferrer"&gt;Toptal&lt;/a&gt;&lt;/strong&gt;: Plataforma para desarrolladores con más experiencia, donde puedes obtener tarifas más altas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Construye y Vende Productos Digitales
&lt;/h2&gt;

&lt;p&gt;Si tienes una idea para una aplicación, una herramienta o un servicio que pueda resolver un problema, puedes crear un producto digital y venderlo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplos de Productos Digitales:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plugins&lt;/strong&gt;: Para WordPress, Shopify o cualquier otra plataforma popular.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aplicaciones Web o Móviles&lt;/strong&gt;: Crea una aplicación que resuelva un problema o cubra una necesidad de nicho.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SaaS (Software as a Service)&lt;/strong&gt;: Ofrece un servicio basado en suscripción.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Dónde Vender:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://gumroad.com/" rel="noopener noreferrer"&gt;Gumroad&lt;/a&gt;&lt;/strong&gt;: Ideal para vender software o productos digitales directamente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://codecanyon.net/" rel="noopener noreferrer"&gt;Codecanyon&lt;/a&gt;&lt;/strong&gt;: Vende scripts, plugins y plantillas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Vende Plantillas y Temas
&lt;/h2&gt;

&lt;p&gt;Si te gusta el &lt;strong&gt;diseño web&lt;/strong&gt; y tienes habilidades en &lt;strong&gt;HTML&lt;/strong&gt;, &lt;strong&gt;CSS&lt;/strong&gt; y &lt;strong&gt;JavaScript&lt;/strong&gt;, puedes crear y vender &lt;strong&gt;temas&lt;/strong&gt; o &lt;strong&gt;plantillas&lt;/strong&gt; para plataformas como WordPress, Shopify, o para sitios estáticos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dónde Vender:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://themeforest.net/" rel="noopener noreferrer"&gt;ThemeForest&lt;/a&gt;&lt;/strong&gt;: Un gran mercado para temas y plantillas web.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://creativemarket.com/" rel="noopener noreferrer"&gt;Creative Market&lt;/a&gt;&lt;/strong&gt;: Otra plataforma para vender tus diseños.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Crea Contenido y Enseña a Otros
&lt;/h2&gt;

&lt;p&gt;Si disfrutas compartir tus conocimientos, puedes &lt;strong&gt;enseñar&lt;/strong&gt; y ganar dinero creando contenido educativo. Muchos desarrolladores han hecho carreras exitosas a través de la enseñanza online.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cómo Hacer Dinero Enseñando:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Escribe un blog&lt;/strong&gt;: Monetízalo con anuncios, marketing de afiliados o vendiendo contenido premium.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crea un canal de YouTube&lt;/strong&gt;: Puedes ganar dinero a través de anuncios o patrocinios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crea un curso online&lt;/strong&gt;: Plataformas como &lt;strong&gt;Udemy&lt;/strong&gt;, &lt;strong&gt;Skillshare&lt;/strong&gt; y &lt;strong&gt;Teachable&lt;/strong&gt; permiten a los desarrolladores crear y vender cursos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Plataformas para Crear Cursos:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.udemy.com/" rel="noopener noreferrer"&gt;Udemy&lt;/a&gt;&lt;/strong&gt;: Plataforma popular para vender cursos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.skillshare.com/" rel="noopener noreferrer"&gt;Skillshare&lt;/a&gt;&lt;/strong&gt;: Paga a los creadores según el tiempo que los estudiantes pasen en sus clases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.teachable.com/" rel="noopener noreferrer"&gt;Teachable&lt;/a&gt;&lt;/strong&gt;: Plataforma para crear y vender cursos sin intermediarios.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Contribuye a Proyectos Open Source y Obtén Patrocinios
&lt;/h2&gt;

&lt;p&gt;Si participas activamente en la &lt;strong&gt;comunidad de código abierto&lt;/strong&gt;, podrías obtener &lt;strong&gt;patrocinios&lt;/strong&gt; o donaciones. Cada vez más desarrolladores están ganando dinero a través de plataformas que permiten a las personas apoyar proyectos de código abierto.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plataformas para Patrocinios:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/sponsors" rel="noopener noreferrer"&gt;GitHub Sponsors&lt;/a&gt;&lt;/strong&gt;: Permite a la comunidad de GitHub patrocinar a desarrolladores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.patreon.com/" rel="noopener noreferrer"&gt;Patreon&lt;/a&gt;&lt;/strong&gt;: Ofrece una manera para que los desarrolladores reciban apoyo de la comunidad a cambio de contenido o contribuciones.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Trabaja en Proyectos de Contrato
&lt;/h2&gt;

&lt;p&gt;Además de trabajar como freelancer, puedes hacer &lt;strong&gt;trabajos por contrato&lt;/strong&gt; para empresas que necesitan desarrolladores por un tiempo limitado. Esto puede variar desde contratos de 3 a 6 meses, hasta proyectos más largos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dónde Encontrar Trabajos por Contrato:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://remoteok.io/" rel="noopener noreferrer"&gt;Remote OK&lt;/a&gt;&lt;/strong&gt;: Filtros específicos para trabajos remotos por contrato.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://angel.co/jobs" rel="noopener noreferrer"&gt;AngelList&lt;/a&gt;&lt;/strong&gt;: Gran recurso para encontrar trabajos en startups.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Participa en Hackathons o Competencias
&lt;/h2&gt;

&lt;p&gt;Los &lt;strong&gt;hackathons&lt;/strong&gt; y las &lt;strong&gt;competencias de programación&lt;/strong&gt; son una excelente forma de ganar dinero si disfrutas la programación rápida y creativa. Además de premios en efectivo, te permiten crear conexiones con empresas que podrían ofrecerte oportunidades más adelante.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dónde Encontrar Hackathons:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devpost.com/" rel="noopener noreferrer"&gt;Devpost&lt;/a&gt;&lt;/strong&gt;: Plataforma que lista hackathons globales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://mlh.io/" rel="noopener noreferrer"&gt;MLH (Major League Hacking)&lt;/a&gt;&lt;/strong&gt;: Organiza hackathons presenciales y virtuales.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. Ingresos Pasivos con Marketing de Afiliados
&lt;/h2&gt;

&lt;p&gt;Si tienes un blog o una audiencia en redes sociales, puedes ganar &lt;strong&gt;ingresos pasivos&lt;/strong&gt; a través del marketing de afiliados. Esto implica recomendar productos o servicios y ganar una comisión por cada venta generada a través de tus enlaces.&lt;/p&gt;

&lt;h3&gt;
  
  
  Programas de Afiliados Populares:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://affiliate-program.amazon.com/" rel="noopener noreferrer"&gt;Amazon Associates&lt;/a&gt;&lt;/strong&gt;: Programa de afiliados de Amazon, ideal para recomendar libros o productos tecnológicos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.udemy.com/affiliate/" rel="noopener noreferrer"&gt;Udemy&lt;/a&gt;&lt;/strong&gt;: Programa de afiliados de Udemy para recomendar cursos online.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9. Consigue un Trabajo Remoto
&lt;/h2&gt;

&lt;p&gt;El trabajo remoto para desarrolladores ha explotado en los últimos años. Muchas empresas ofrecen &lt;strong&gt;salarios competitivos&lt;/strong&gt; para desarrolladores que trabajen desde cualquier lugar del mundo. Puedes combinar un trabajo remoto a tiempo completo con freelancing para maximizar tus ingresos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plataformas para Buscar Trabajos Remotos:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://weworkremotely.com/" rel="noopener noreferrer"&gt;We Work Remotely&lt;/a&gt;&lt;/strong&gt;: Plataforma popular para encontrar trabajos remotos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://remoteok.io/" rel="noopener noreferrer"&gt;Remote OK&lt;/a&gt;&lt;/strong&gt;: Ofrece trabajos remotos específicos para desarrolladores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://stackoverflow.com/jobs/remote-developer-jobs" rel="noopener noreferrer"&gt;Stack Overflow Jobs&lt;/a&gt;&lt;/strong&gt;: Lista de trabajos remotos y presenciales.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Hacer dinero como desarrollador no solo se trata de trabajar para una empresa de 9 a 5. Existen múltiples caminos que puedes explorar, desde el freelancing hasta la creación de tus propios productos o enseñar a otros. La clave está en diversificar tus ingresos y encontrar lo que mejor se adapte a tus habilidades e intereses.&lt;/p&gt;

&lt;p&gt;Si eres un desarrollador que busca aumentar sus ingresos, ahora es el mejor momento para explorar estas oportunidades y comenzar a construir múltiples fuentes de ingresos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Tienes alguna otra idea para ganar dinero como desarrollador? ¡Déjala en los comentarios y comparte tu experiencia!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Cómo Iniciar en el Desarrollo Web</title>
      <dc:creator>maricarmendev</dc:creator>
      <pubDate>Sat, 05 Oct 2024 03:08:39 +0000</pubDate>
      <link>https://forem.com/maricarmendev/como-iniciar-en-el-desarrollo-web-5e9g</link>
      <guid>https://forem.com/maricarmendev/como-iniciar-en-el-desarrollo-web-5e9g</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;El desarrollo web es una de las carreras más demandadas en la actualidad, tanto para aquellos interesados en el &lt;strong&gt;frontend&lt;/strong&gt; (lo que el usuario ve) como en el &lt;strong&gt;backend&lt;/strong&gt; (la lógica del servidor). Si estás comenzando y te preguntas por dónde empezar o cuánto puedes ganar como desarrollador, esta guía te dará un &lt;strong&gt;camino claro&lt;/strong&gt; y recursos para comenzar.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es el Desarrollo Web?
&lt;/h2&gt;

&lt;p&gt;El &lt;strong&gt;desarrollo web&lt;/strong&gt; se divide en dos grandes áreas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;: La parte visual e interactiva de un sitio web. Incluye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTML&lt;/strong&gt;: Estructura el contenido.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS&lt;/strong&gt;: Estiliza el diseño y la presentación.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript&lt;/strong&gt;: Añade interactividad y funcionalidad.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;: La lógica detrás de escena, que incluye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Servidores&lt;/strong&gt; y bases de datos (MySQL, PostgreSQL, MongoDB).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;APIs&lt;/strong&gt; para conectar el frontend con el backend.&lt;/li&gt;
&lt;li&gt;Lenguajes como &lt;strong&gt;Node.js&lt;/strong&gt;, &lt;strong&gt;Python&lt;/strong&gt;, &lt;strong&gt;Ruby&lt;/strong&gt; o &lt;strong&gt;PHP&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  ¿Por Dónde Comenzar?
&lt;/h2&gt;

&lt;p&gt;Aquí te dejo una ruta clara para iniciar y los mejores recursos gratuitos o asequibles que te ayudarán en tu camino.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Fundamentos del Frontend
&lt;/h3&gt;

&lt;p&gt;Antes de empezar con tecnologías más avanzadas, debes tener una base sólida en las tecnologías fundamentales del frontend: &lt;strong&gt;HTML&lt;/strong&gt;, &lt;strong&gt;CSS&lt;/strong&gt; y &lt;strong&gt;JavaScript&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Recursos para aprender Frontend:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.freecodecamp.org/" rel="noopener noreferrer"&gt;freeCodeCamp&lt;/a&gt;&lt;/strong&gt;: Ofrece un curso gratuito de más de 300 horas sobre desarrollo web con proyectos prácticos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developer.mozilla.org/es/" rel="noopener noreferrer"&gt;MDN Web Docs&lt;/a&gt;&lt;/strong&gt;: La documentación oficial y más completa sobre HTML, CSS y JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.theodinproject.com/" rel="noopener noreferrer"&gt;The Odin Project&lt;/a&gt;&lt;/strong&gt;: Un curso de desarrollo web fullstack que cubre todo el frontend y backend.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Aprende un Framework de JavaScript
&lt;/h3&gt;

&lt;p&gt;Una vez que te sientas cómodo con JavaScript, el siguiente paso es aprender un &lt;strong&gt;framework&lt;/strong&gt;. Los más populares en la industria son &lt;strong&gt;React&lt;/strong&gt;, &lt;strong&gt;Vue&lt;/strong&gt; y &lt;strong&gt;Angular&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Recursos para aprender Frameworks:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://reactjs.org/docs/getting-started.html" rel="noopener noreferrer"&gt;React - Guía Oficial&lt;/a&gt;&lt;/strong&gt;: Documentación oficial para comenzar con React.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://scrimba.com/learn/learnreact" rel="noopener noreferrer"&gt;Scrimba - Curso interactivo de React&lt;/a&gt;&lt;/strong&gt;: Curso interactivo gratuito.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.vuemastery.com/courses/" rel="noopener noreferrer"&gt;Vue Mastery&lt;/a&gt;&lt;/strong&gt;: Algunos cursos gratuitos para aprender Vue.js.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Fundamentos del Backend
&lt;/h3&gt;

&lt;p&gt;En el backend, aprenderás a manejar servidores, bases de datos y lógica de aplicaciones. Elige un lenguaje que te guste; algunos de los más populares son &lt;strong&gt;Node.js&lt;/strong&gt;, &lt;strong&gt;Python&lt;/strong&gt; y &lt;strong&gt;Ruby&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Recursos para aprender Backend:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://nodeschool.io/" rel="noopener noreferrer"&gt;NodeSchool&lt;/a&gt;&lt;/strong&gt;: Aprender Node.js desde cero con ejercicios prácticos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tutorial.djangogirls.org/" rel="noopener noreferrer"&gt;Django Girls Tutorial&lt;/a&gt;&lt;/strong&gt;: Si prefieres Python, este es un excelente tutorial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.theodinproject.com/" rel="noopener noreferrer"&gt;The Odin Project&lt;/a&gt;&lt;/strong&gt;: También cubre aspectos del backend con Node.js.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Bases de Datos y APIs
&lt;/h3&gt;

&lt;p&gt;Para crear aplicaciones completas, necesitarás aprender a conectar tu backend con bases de datos y ofrecer &lt;strong&gt;APIs&lt;/strong&gt; para que el frontend pueda comunicarse con tu servidor.&lt;/p&gt;

&lt;h4&gt;
  
  
  Recursos para aprender Bases de Datos y APIs:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://sqlbolt.com/" rel="noopener noreferrer"&gt;SQL Bolt&lt;/a&gt;&lt;/strong&gt;: Curso interactivo para aprender SQL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://learning.postman.com/docs/getting-started/introduction/" rel="noopener noreferrer"&gt;Postman API Tutorial&lt;/a&gt;&lt;/strong&gt;: Introducción a la creación y prueba de APIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Implementación y Deployment
&lt;/h3&gt;

&lt;p&gt;Después de aprender a crear aplicaciones, el siguiente paso es aprender a desplegarlas en servidores. Herramientas como &lt;strong&gt;Heroku&lt;/strong&gt;, &lt;strong&gt;Netlify&lt;/strong&gt;, &lt;strong&gt;Vercel&lt;/strong&gt; y &lt;strong&gt;DigitalOcean&lt;/strong&gt; te permiten implementar tu código fácilmente en la web.&lt;/p&gt;

&lt;h4&gt;
  
  
  Recursos para aprender Deployment:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devcenter.heroku.com/start" rel="noopener noreferrer"&gt;Heroku - Getting Started&lt;/a&gt;&lt;/strong&gt;: Guía para comenzar con Heroku.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://vercel.com/docs" rel="noopener noreferrer"&gt;Vercel Documentation&lt;/a&gt;&lt;/strong&gt;: Vercel es una excelente opción para desplegar aplicaciones frontend (particularmente con Next.js).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Cuánto Gana un Desarrollador Fullstack Promedio?
&lt;/h2&gt;

&lt;p&gt;El salario de un desarrollador &lt;strong&gt;fullstack&lt;/strong&gt; depende de varios factores como la &lt;strong&gt;experiencia&lt;/strong&gt;, la &lt;strong&gt;ubicación&lt;/strong&gt; y las &lt;strong&gt;habilidades específicas&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Salarios por Nivel de Experiencia
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Junior&lt;/strong&gt;: Un desarrollador con 1-2 años de experiencia puede ganar entre &lt;strong&gt;$40,000 y $70,000 USD&lt;/strong&gt; anuales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mid-Level&lt;/strong&gt;: Con 3-5 años de experiencia, el salario suele estar entre &lt;strong&gt;$70,000 y $100,000 USD&lt;/strong&gt; anuales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Senior&lt;/strong&gt;: Los desarrolladores con más de 5 años de experiencia pueden ganar entre &lt;strong&gt;$100,000 y $150,000 USD&lt;/strong&gt; o más al año.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Factores que Influyen en el Salario:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ubicación&lt;/strong&gt;: Un desarrollador en EE. UU. o Europa generalmente gana más que en otros países. En América Latina, por ejemplo, el rango puede ir de &lt;strong&gt;$20,000 a $50,000 USD&lt;/strong&gt; anuales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tipo de Empresa&lt;/strong&gt;: Las startups pueden ofrecer salarios más bajos inicialmente pero con grandes oportunidades de crecimiento, mientras que las grandes empresas pueden ofrecer mejores paquetes salariales desde el principio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Especialización&lt;/strong&gt;: Si dominas tecnologías populares como &lt;strong&gt;React&lt;/strong&gt;, &lt;strong&gt;Node.js&lt;/strong&gt;, &lt;strong&gt;Docker&lt;/strong&gt;, o si tienes experiencia con plataformas en la nube como &lt;strong&gt;AWS&lt;/strong&gt;, tu salario puede aumentar significativamente.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Perspectivas para el Futuro
&lt;/h3&gt;

&lt;p&gt;Con el auge de las &lt;strong&gt;aplicaciones web&lt;/strong&gt; y la creciente digitalización de las empresas, la demanda de desarrolladores fullstack sigue en aumento. Si mantienes tus habilidades actualizadas y sigues aprendiendo nuevas tecnologías, siempre tendrás &lt;strong&gt;oportunidades laborales bien remuneradas&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;Empezar en el desarrollo web puede ser un reto, pero con los recursos adecuados y una hoja de ruta clara, puedes avanzar rápidamente. Además, los salarios de los desarrolladores fullstack son competitivos, lo que convierte esta carrera en una excelente opción para el futuro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recuerda&lt;/strong&gt;: la clave es &lt;strong&gt;nunca dejar de aprender&lt;/strong&gt; y practicar. ¡El mundo del desarrollo web está en constante evolución, y tú puedes ser parte de ello!&lt;/p&gt;




&lt;p&gt;¿Tienes alguna duda sobre cómo empezar en el desarrollo web? ¡Déjame un comentario y estaré encantado de ayudarte!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Comparación entre ECMAScript 5 (ES5) y ECMAScript 6 (ES6)</title>
      <dc:creator>maricarmendev</dc:creator>
      <pubDate>Sat, 05 Oct 2024 03:02:09 +0000</pubDate>
      <link>https://forem.com/maricarmendev/comparacion-entre-ecmascript-5-es5-y-ecmascript-6-es6-ckl</link>
      <guid>https://forem.com/maricarmendev/comparacion-entre-ecmascript-5-es5-y-ecmascript-6-es6-ckl</guid>
      <description>&lt;h2&gt;
  
  
  1. Declaración de Variables
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ES5:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uso de &lt;code&gt;var&lt;/code&gt; para declarar variables. Tiene &lt;strong&gt;función&lt;/strong&gt; como ámbito y puede dar lugar a &lt;strong&gt;hoisting&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Maria&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;h3&gt;
  
  
  ES6:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Introduce &lt;code&gt;let&lt;/code&gt; y &lt;code&gt;const&lt;/code&gt; que tienen &lt;strong&gt;bloque&lt;/strong&gt; como ámbito, mejorando la &lt;strong&gt;seguridad&lt;/strong&gt; en el manejo de variables.
&lt;/li&gt;
&lt;/ul&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;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Maria&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Variable que puede cambiar&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;       &lt;span class="c1"&gt;// Constante, no puede cambiar&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Funciones Flecha
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ES5:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Las funciones tradicionales requieren más código y su manejo de &lt;code&gt;this&lt;/code&gt; puede ser confuso.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;suma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ES6:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Las funciones flecha son más concisas y no cambian el contexto de &lt;code&gt;this&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;suma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Cadenas Template (Template Strings)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ES5:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;La concatenación de cadenas se realiza usando el operador &lt;code&gt;+&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;saludo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hola &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;, tienes &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; años.&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;h3&gt;
  
  
  ES6:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Se utilizan &lt;strong&gt;backticks&lt;/strong&gt; (&lt;code&gt;`&lt;/code&gt;) para crear plantillas de cadenas, permitiendo interpolación.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;saludo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Hola &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, tienes &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; años.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Parámetros por Defecto
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ES5:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No había soporte para parámetros por defecto, por lo que se implementaba de forma manual.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;saludo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Invitado&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hola &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ES6:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Los parámetros por defecto se declaran directamente en la firma de la función.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;saludo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Invitado&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Hola &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Clases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ES5:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;El concepto de clases no existía. Se usaban funciones constructoras y prototipos.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Persona&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&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;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nombre&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;edad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;Persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;saludar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hola, soy &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;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ES6:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Se introducen las &lt;strong&gt;clases&lt;/strong&gt;, una sintaxis más limpia y cercana a otros lenguajes de programación.
&lt;/li&gt;
&lt;/ul&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="nc"&gt;Persona&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&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;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nombre&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;edad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;saludar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Hola, soy &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;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Módulos (Import y Export)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ES5:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No había soporte nativo para módulos. Se utilizaban bibliotecas como &lt;strong&gt;RequireJS&lt;/strong&gt; o &lt;strong&gt;CommonJS&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// CommonJS&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;modulo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;modulo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;modulo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ES6:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Introduce el soporte nativo para módulos con &lt;code&gt;import&lt;/code&gt; y &lt;code&gt;export&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Exportar&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;suma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Importar&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;suma&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./modulo&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;
  
  
  7. Promesas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ES5:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No existía un manejo nativo de promesas. Se dependía de callbacks para manejar asincronía, lo que llevaba a problemas como el "Callback Hell".
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;hacerAlgo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hecho&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;hacerAlgo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resultado&lt;/span&gt;&lt;span class="p"&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ES6:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Se introducen las &lt;strong&gt;promesas&lt;/strong&gt; para manejar operaciones asincrónicas de forma más limpia.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hacerAlgo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&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;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hecho&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nf"&gt;hacerAlgo&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  8. Operador Rest y Spread
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ES5:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No había soporte para combinar o separar arrays u objetos fácilmente. Se utilizaban técnicas como el uso de &lt;code&gt;apply&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sumar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;numeros&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;sumar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ES6:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Se introducen los operadores &lt;strong&gt;rest&lt;/strong&gt; y &lt;strong&gt;spread&lt;/strong&gt; para un manejo más sencillo de listas de argumentos y arrays.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Spread&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numeros&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&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;resultado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sumar&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Rest&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sumar&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. Desestructuración
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ES5:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;La extracción de valores de objetos o arrays era manual y propensa a errores.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Maria&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ES6:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Se introduce la &lt;strong&gt;desestructuración&lt;/strong&gt; para extraer valores de objetos y arrays de forma más limpia.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;ECMAScript 6 (ES6) trae una gran cantidad de mejoras sintácticas y funcionales que simplifican el desarrollo en JavaScript, lo hacen más legible, mantenible y eficiente en comparación con ECMAScript 5 (ES5).&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>¿Cómo empezó JavaScript?</title>
      <dc:creator>maricarmendev</dc:creator>
      <pubDate>Sat, 05 Oct 2024 02:59:52 +0000</pubDate>
      <link>https://forem.com/maricarmendev/como-empezo-javascript-4dnf</link>
      <guid>https://forem.com/maricarmendev/como-empezo-javascript-4dnf</guid>
      <description>&lt;h2&gt;
  
  
  1. Creación en Netscape
&lt;/h2&gt;

&lt;p&gt;JavaScript fue creado en &lt;strong&gt;1995&lt;/strong&gt; por &lt;strong&gt;Brendan Eich&lt;/strong&gt; mientras trabajaba en &lt;strong&gt;Netscape Communications&lt;/strong&gt;, la empresa detrás del navegador Netscape Navigator, uno de los primeros navegadores web populares. Netscape quería agregar un lenguaje de scripting a su navegador para permitir a los desarrolladores web agregar &lt;strong&gt;interactividad&lt;/strong&gt; a las páginas web.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Desarrollo en 10 días
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Brendan Eich&lt;/strong&gt; desarrolló el lenguaje en &lt;strong&gt;tan solo 10 días&lt;/strong&gt;. Originalmente fue llamado &lt;strong&gt;Mocha&lt;/strong&gt;, pero el nombre cambió primero a &lt;strong&gt;LiveScript&lt;/strong&gt; y luego finalmente a &lt;strong&gt;JavaScript&lt;/strong&gt; para aprovechar la popularidad del lenguaje &lt;strong&gt;Java&lt;/strong&gt; en ese momento, a pesar de que JavaScript y Java son lenguajes completamente diferentes.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. La Competencia con Microsoft
&lt;/h2&gt;

&lt;p&gt;En los años 90, el principal competidor de Netscape era &lt;strong&gt;Microsoft&lt;/strong&gt;, que en respuesta a la popularidad de JavaScript desarrolló su propia versión del lenguaje llamado &lt;strong&gt;JScript&lt;/strong&gt;, que fue integrada en su navegador, Internet Explorer. Esta competencia provocó una fragmentación en la forma en que los navegadores manejaban JavaScript, lo que hizo que fuera difícil para los desarrolladores escribir código que funcionara de manera consistente en todos los navegadores.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Estándar ECMAScript
&lt;/h2&gt;

&lt;p&gt;Para resolver la fragmentación, Netscape envió JavaScript a &lt;strong&gt;ECMA International&lt;/strong&gt; (Asociación Europea de Fabricantes de Computadoras) para estandarizar el lenguaje. En 1997, se publicó el primer estándar, conocido como &lt;strong&gt;ECMAScript&lt;/strong&gt; (abreviado ES). A partir de entonces, las versiones oficiales del lenguaje JavaScript han seguido el estándar ECMAScript, que sigue evolucionando hasta hoy.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. El Auge de Ajax
&lt;/h2&gt;

&lt;p&gt;En los &lt;strong&gt;2000s&lt;/strong&gt;, JavaScript se volvió aún más importante con la introducción de &lt;strong&gt;Ajax&lt;/strong&gt; (Asynchronous JavaScript and XML), una técnica que permitió a las aplicaciones web actualizar contenido sin recargar la página. Esto marcó el comienzo de las &lt;strong&gt;aplicaciones web dinámicas&lt;/strong&gt; y allanó el camino para el desarrollo de servicios web más interactivos como &lt;strong&gt;Gmail&lt;/strong&gt; y &lt;strong&gt;Google Maps&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. La Revolución de Node.js
&lt;/h2&gt;

&lt;p&gt;En &lt;strong&gt;2009&lt;/strong&gt;, &lt;strong&gt;Ryan Dahl&lt;/strong&gt; lanzó &lt;strong&gt;Node.js&lt;/strong&gt;, un entorno de ejecución que permitió ejecutar JavaScript en el &lt;strong&gt;servidor&lt;/strong&gt;. Esto marcó un cambio significativo, ya que permitió a los desarrolladores usar el mismo lenguaje tanto en el &lt;strong&gt;frontend&lt;/strong&gt; como en el &lt;strong&gt;backend&lt;/strong&gt;, lo que fomentó el auge de JavaScript como un lenguaje de propósito general.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Frameworks y Bibliotecas Modernas
&lt;/h2&gt;

&lt;p&gt;A lo largo de la década de 2010, surgieron frameworks y bibliotecas como &lt;strong&gt;Angular&lt;/strong&gt;, &lt;strong&gt;React&lt;/strong&gt; y &lt;strong&gt;Vue.js&lt;/strong&gt;, que facilitaron el desarrollo de aplicaciones web complejas. Estas herramientas ayudaron a consolidar JavaScript como el lenguaje central del desarrollo web moderno.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Estado Actual
&lt;/h2&gt;

&lt;p&gt;Hoy en día, JavaScript es el lenguaje más popular y dominante en el desarrollo web, tanto en el lado del cliente (frontend) como en el lado del servidor (backend) gracias a tecnologías como Node.js. Con un ecosistema vibrante y en constante evolución, sigue siendo fundamental para el desarrollo de aplicaciones web y móviles.&lt;/p&gt;

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

&lt;p&gt;JavaScript comenzó como un lenguaje desarrollado rápidamente para agregar interactividad a los navegadores, pero ha crecido enormemente desde entonces, convirtiéndose en una &lt;strong&gt;pieza clave&lt;/strong&gt; de la web moderna. Su historia refleja su capacidad de adaptación y evolución, lo que le ha permitido mantenerse &lt;strong&gt;relevante y esencial&lt;/strong&gt; en el desarrollo de software.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>web</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>¡Guía de introducción a Docker en español!</title>
      <dc:creator>maricarmendev</dc:creator>
      <pubDate>Fri, 06 Jan 2023 05:02:58 +0000</pubDate>
      <link>https://forem.com/maricarmendev/guia-de-introduccion-a-docker-en-espanol-2dfo</link>
      <guid>https://forem.com/maricarmendev/guia-de-introduccion-a-docker-en-espanol-2dfo</guid>
      <description>&lt;p&gt;Pueden leer desde aquí:&lt;br&gt;
&lt;a href="https://medium.com/@maricarmen.dev/introducci%C3%B3n-a-docker-2053cf7a0f69" rel="noopener noreferrer"&gt;https://medium.com/@maricarmen.dev/introducci%C3%B3n-a-docker-2053cf7a0f69&lt;/a&gt;&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>Benefits of cloud computing.</title>
      <dc:creator>maricarmendev</dc:creator>
      <pubDate>Mon, 13 Jun 2022 18:53:39 +0000</pubDate>
      <link>https://forem.com/maricarmendev/benefits-of-cloud-computing-980</link>
      <guid>https://forem.com/maricarmendev/benefits-of-cloud-computing-980</guid>
      <description>&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Trade upfront expense for variable expenses&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt;Upfront expenses refer to data centers, physical servers, and other resources that you would need to invest in before using them.&lt;/li&gt;
&lt;li&gt;Variable expense mean you only pay for computing resources that you consume&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stop spending money to run and maintain data centers.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop Guessing capacity&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt;With cloud computing, you don’t have to predict how much infrastructure capacity you will need before deploying an application. &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Benefit from massive economics of scale&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;By using cloud computing, you can achieve a lower variable cost than you can get on your own.&lt;/p&gt;

&lt;p&gt;Because usage from hundreds of thousands of customers can aggregate in the cloud, providers, such as AWS, can achieve higher economies of scale. The economy of scale translates into lower pay-as-you-go prices.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Increase speed and agility&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Go global in minutes&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The global footprint of the AWS Cloud enables you to deploy applications to costumers around the world quickly, while providing them with low latency. This means that even if you are located in a different part of the world than your customers, customers are able to access your applications with minimal delays.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Cloud computing TL;DR</title>
      <dc:creator>maricarmendev</dc:creator>
      <pubDate>Mon, 13 Jun 2022 18:52:01 +0000</pubDate>
      <link>https://forem.com/maricarmendev/cloud-computing-tldr-4fn</link>
      <guid>https://forem.com/maricarmendev/cloud-computing-tldr-4fn</guid>
      <description>&lt;p&gt;&lt;strong&gt;Cloud computing:&lt;/strong&gt; Is the on-demand delivery of IT resources over the internet with pay-as-you-go pricing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On-demand delivery:&lt;/strong&gt; indicate that the cloud has the resources you need, when you need them. You don't need to tell us in advance that you're going to need them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment models for cloud computing
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cloud-based deployment:&lt;/strong&gt; You can migrate existing applications to the cloud, or you can design and build new applications in the cloud.

&lt;ol&gt;
&lt;li&gt;Run all parts of the application in the cloud.&lt;/li&gt;
&lt;li&gt;Migrate exiting applications to the cloud.&lt;/li&gt;
&lt;li&gt;Design and build new applications in the cloud.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-premises deployment:&lt;/strong&gt; It is also known as a &lt;em&gt;private cloud&lt;/em&gt; &lt;em&gt;deployment.&lt;/em&gt; In this model, the resources are deployed on premises by using virtualization and resource management tools.

&lt;ol&gt;
&lt;li&gt;Deploy resources by using virtualization and resource management tools&lt;/li&gt;
&lt;li&gt;Increase resource utilization by using application management and virtualization technologies&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Hybrid deployment:&lt;/strong&gt; Cloud-bases resources are connected to on-promises infrastructure. 

&lt;ol&gt;
&lt;li&gt;Connect cloud-based resources to on-premises infrastructure&lt;/li&gt;
&lt;li&gt;Integrate cloud-bases resources with legacy IT applications.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Arquitectura de kubernetes</title>
      <dc:creator>maricarmendev</dc:creator>
      <pubDate>Sun, 01 Aug 2021 09:03:30 +0000</pubDate>
      <link>https://forem.com/maricarmendev/arquitectura-de-kubernetes-1o02</link>
      <guid>https://forem.com/maricarmendev/arquitectura-de-kubernetes-1o02</guid>
      <description>&lt;h2&gt;
  
  
  Arquitectura en su modo más simple:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figfi3049zroorz4fcmrl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figfi3049zroorz4fcmrl.png" alt="Arquitectura de kubernetes en su modo más simple"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cuando vemos la arquitectura de kubernetes podemos ver fácilmente los siguientes componentes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maestro(Máster) o Control Plane&lt;/strong&gt;: Un clúster de kubernetes del mundo real suele tener varios “Control Plane”. Esto por cuestiones de disponibilidad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nodos&lt;/strong&gt;: Hacen el trabajo de gestionar los contenedores&lt;/p&gt;

&lt;h2&gt;
  
  
  Arquitectura con un poco más de detalle
&lt;/h2&gt;

&lt;p&gt;Pero si la vemos con un poco más de detalle se ve algo así:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fokm2dsnuskp3xj9dvtiz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fokm2dsnuskp3xj9dvtiz.png" alt="Arquitectura de kubernetes con un poco más de detalle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  El Control Plane contiene:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Api server&lt;/strong&gt;: Uno de los núcleos que tiene kubernetes. Expone todo que podemos hacer en Kubernetes a través de un &lt;code&gt;api server&lt;/code&gt;, que suele ser de tipo &lt;code&gt;REST&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Cuando un cliente quiere distribuir una aplicación en contenedores, envía a través de una petición &lt;code&gt;POST&lt;/code&gt; una configuración en formato &lt;code&gt;YAML&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;YAML&lt;/code&gt; contiene una serie de características que especifican el estado deseado.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Controller Manager&lt;/strong&gt;: Está compuesto de múltiples componentes, estos gestionan algunas de las características básicas del clúster. Estos controladores están en modo “loop” e intervienen cuando tiene  que hacerlo.&lt;/p&gt;

&lt;p&gt;Existen hasta el momento 4 controller managers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Node Controller&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gestiona los nodos: si están vivos, muertos, que tiene que hacer en caso de que mueran(que se caigan). Etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Replication Controller&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se encarga de conseguir que las replicas o las copias de los distintos contenedores que exige o que determina una aplicación estén correctas y estén activas.&lt;/p&gt;

&lt;p&gt;Cuando desplegamos un entorno especificamos, cuantas réplicas queremos y son estas réplicas las que se encarga de asegurarse el Replication Controller que se mantengan.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Endpoint Controller&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se encarga de ligar &lt;code&gt;Servicios&lt;/code&gt; con &lt;code&gt;PODS&lt;/code&gt;, nos ofrece un endpoint (punto de entrada) a un determinado servicio&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Service Account &amp;amp; Token Controller&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se encarga de los temas de acceso y autenticación al entorno&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scheduler:&lt;/strong&gt; Determina donde asignar los pods, contenedores o los diferentes objetos de kubernetes dependiendo de los recursos disponibles en los nodos.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;ETC&lt;/strong&gt; Es un almacén de datos de tipo:valor que guarda toda la configuración que vallamos haciendo en kubernetes. Todo lo que hacemos se persiste en esta base de datos para que perviva entre arranques. Es otro de esos componentes que tendríamos que tener replicado para garantizar la seguridad de nuestro clúster de kubernetes&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kubernetes DNS:&lt;/strong&gt; Es un DNS interno el cual todos los nodos conocen, aquí es donde está todo lo referente a la red para esos servicios que ofrecemos en kubernetes&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Cuando estamos trabajando en modo CLOUD tenemos otro componente que es:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Controller Manager&lt;/strong&gt;: Por ejemplo si nosotros desplegamos nuestro kubernetes en una plataforma de tipo cloud, este componente se encarga de relacionarse con cada cloud. Es decir es el intérprete entre la parte de kubernetes pura y la parte del proveedor de servicios cloud&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Parte del esclavo (nodos)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Container Runtime:&lt;/strong&gt; Es quien ejecuta los contenedores que kubernetes lanza, hay varios container runtimes que kubernetes soporta:

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Containerd&lt;/li&gt;
&lt;li&gt;Cri&lt;/li&gt;
&lt;li&gt;Cualquier container runtime que se adiera a Kubernetes CRI(Container Runtime Interface)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;POD&lt;/strong&gt;: Es la unidad más básica de kubernetes. Un pod puede tener de 1 a más contenedores, esos contenedores forman una unidad de trabajo. Cuando queremos desplegar containers dentro de kubernetes es desplegar POD&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Kubelet&lt;/strong&gt;: Es un agente que se despliega a cada uno de los nodos del clúster y está trabajando de manera cooperativa con el maestro. Se puede decir que es el corazón de kubernetes dentro del nodo. Suele llamarse también como &lt;code&gt;dataplane&lt;/code&gt;.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Kube-Proxy:&lt;/strong&gt; Permite la conectividad de todos los componentes dentro del nodo con el resto del clúster. Por ejemplo: hacer que los PODS accedan unos con otros o que se pueda acceder a ellos desde el exterior&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
    </item>
    <item>
      <title>Pre-Post Script en npm</title>
      <dc:creator>maricarmendev</dc:creator>
      <pubDate>Sun, 27 Jun 2021 23:05:36 +0000</pubDate>
      <link>https://forem.com/maricarmendev/pre-post-script-en-npm-2i5g</link>
      <guid>https://forem.com/maricarmendev/pre-post-script-en-npm-2i5g</guid>
      <description>&lt;p&gt;&lt;a href="https://docs.npmjs.com/cli/v7/using-npm/scripts" rel="noopener noreferrer"&gt;https://docs.npmjs.com/cli/v7/using-npm/scripts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La propiedad script de nuestro package.json admite varios scripts integrados y sus eventos de ciclo de vida preestablecidos, así como scripts creados por nosotros. Todos estos se pueden ejecutar ejecutando npm run &amp;lt;nombreComando&amp;gt;. Pero ademas de estos comandos podemos agregar comandos que se ejecuten antes y después de ellos con solo agregar pre o post antes del nombre del comando por ejemplo:&lt;/p&gt;

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

&lt;p&gt;aquí esta el resultado:&lt;/p&gt;

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

</description>
      <category>javascript</category>
      <category>npm</category>
      <category>node</category>
    </item>
  </channel>
</rss>
