<?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: Jorge Brunal Pérez</title>
    <description>The latest articles on Forem by Jorge Brunal Pérez (@diniremix).</description>
    <link>https://forem.com/diniremix</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%2F1049139%2F76c23f4e-c6a3-4b22-bd02-679c6a7590cf.png</url>
      <title>Forem: Jorge Brunal Pérez</title>
      <link>https://forem.com/diniremix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/diniremix"/>
    <language>en</language>
    <item>
      <title>Just, Automatizando tus tareas habituales</title>
      <dc:creator>Jorge Brunal Pérez</dc:creator>
      <pubDate>Sat, 15 Apr 2023 02:01:38 +0000</pubDate>
      <link>https://forem.com/diniremix/just-automatizando-tus-tareas-habituales-4aj9</link>
      <guid>https://forem.com/diniremix/just-automatizando-tus-tareas-habituales-4aj9</guid>
      <description>&lt;p&gt;Publicado originalmente (2021-11-10) en mi &lt;a href="https://diniremix.web.app"&gt;sitio web.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🤖 automatizar!...&lt;/p&gt;

&lt;p&gt;En algún punto de nuestros proyectos generamos scripts, para automatizar algunos procesos, ó simplemente tenemos a la mano decenas de comandos (ó alias para ellos) que hacen despliegues, construyen sitios, generan claves aleatorias, consultan el &lt;a href="https://wttr.in"&gt;estado del clima&lt;/a&gt;, la &lt;a href="https://icanhazip.com"&gt;IP&lt;/a&gt; etc...&lt;/p&gt;

&lt;p&gt;Y al final del día, tenemos que recordar mil comandos para tareas repetitivas, y es ahí donde brilla &lt;a href="https://just.systems"&gt;&lt;strong&gt;Just&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
un programa para ejecutar tareas, otros programas, un automatizador para dominarlos a todos... 😄&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Just&lt;/strong&gt; provee una sintaxis inspirada en &lt;strong&gt;make&lt;/strong&gt;, para crear las recetas, además de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;funciones predefinidas&lt;/li&gt;
&lt;li&gt;uso de variables de entorno&lt;/li&gt;
&lt;li&gt;manipulación de strings&lt;/li&gt;
&lt;li&gt;manejo de rutas&lt;/li&gt;
&lt;li&gt;evaluación de comandos&lt;/li&gt;
&lt;li&gt;expresiones condicionales&lt;/li&gt;
&lt;li&gt;extender las recetas con scripting en Bash, Python, Ruby, NodeJS, Perl&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;y un &lt;a href="https://cheatography.com/linux-china/cheat-sheets/justfile/"&gt;largo etcétera&lt;/a&gt; de funcionalidades increibles, para la creación de recetas a tu gusto.&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="nl"&gt;nombre-de-tu-receta&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="err"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'Esto es una receta usando Just!'&lt;/span&gt;

&lt;span class="c"&gt;# esto es un comentario
&lt;/span&gt;&lt;span class="nl"&gt;otra-receta&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="err"&gt;@echo&lt;/span&gt; &lt;span class="s1"&gt;'Esto es otra receta.'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;En Just, los comandos, llamados "recetas", se almacenan en un archivo llamado &lt;em&gt;.justfile&lt;/em&gt;, con una sintaxis inspirada en &lt;strong&gt;make.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Just&lt;/strong&gt; se puede utilizar de varias maneras dependendiendo tus necesidades, sin embargo las maneras habituales son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;De forma &lt;strong&gt;local,&lt;/strong&gt; creando un archivo llamado &lt;strong&gt;.justfile&lt;/strong&gt; en la raiz de tu projecto.&lt;/li&gt;
&lt;li&gt;De forma &lt;strong&gt;global&lt;/strong&gt;, creando varias tareas de proposito general.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;br&gt;
 &lt;/p&gt;
&lt;h2&gt;
  
  
  Just de forma local 📌
&lt;/h2&gt;

&lt;p&gt;El archivo &lt;strong&gt;.justfile&lt;/strong&gt; se almacena en la raiz de tu projecto.&lt;/p&gt;

&lt;p&gt;Veamos un ejemplo:&lt;/p&gt;

&lt;p&gt;Creamos una &lt;strong&gt;receta&lt;/strong&gt; llamada &lt;strong&gt;hello&lt;/strong&gt; que acepta un parámetro llamado &lt;strong&gt;guy.&lt;/strong&gt; Esta receta, invoca a &lt;strong&gt;echo&lt;/strong&gt; y le envía el parámetro establecido.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="c"&gt;# .justfile
&lt;/span&gt;&lt;span class="nl"&gt;hello guy&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello {{ guy }}!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;y al lanzar nuestra receta, tendremos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;just hello Tux
Hello Tux!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Un archivo &lt;strong&gt;.justfile&lt;/strong&gt; con recetas en una carpeta de un proyecto de software, puede entre otras cosas, construir el proyecto, lanzar pruebas unitarias, construir la documentación, hacer deploy a un servidor web, etc. &lt;a href="https://github.com/casey/just/tree/master/examples"&gt;Las posibilidades son infinitas.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
 &lt;/p&gt;
&lt;h2&gt;
  
  
  Just de forma global 🌐
&lt;/h2&gt;

&lt;p&gt;para usar &lt;strong&gt;Just&lt;/strong&gt; de forma global es &lt;a href="https://github.com/casey/just#user-justfiles"&gt;necesario organizar un archivo&lt;/a&gt;, usualmente llamado &lt;strong&gt;.user.justfile,&lt;/strong&gt; con nuestras recetas y alojarlo en la carpeta &lt;strong&gt;$HOME&lt;/strong&gt; de nuestro Sistema Operativo.&lt;/p&gt;

&lt;p&gt;Luego, crear un alias (recomendado) para que &lt;strong&gt;Just&lt;/strong&gt;, al ser lanzado cargue ese archivo de recetas.&lt;/p&gt;

&lt;p&gt;En nuestro archivo &lt;strong&gt;.bashrc&lt;/strong&gt; ó &lt;strong&gt;.zshrc&lt;/strong&gt; agregar un nuevo alias:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; .j&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'just -f ~/.tu_nombre_de_usuario.justfile --working-directory .'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En Windows, el &lt;em&gt;alias&lt;/em&gt; se logra con el comando &lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/doskey"&gt;doskey&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;doskey&lt;/span&gt; .j&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kd"&gt;just&lt;/span&gt; &lt;span class="na"&gt;-f &lt;/span&gt;&lt;span class="nv"&gt;%USERPROFILE%&lt;/span&gt;\.tu_nombre_de_usuario.justfile &lt;span class="na"&gt;--working-directory &lt;/span&gt;.\ $&lt;span class="o"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;br&gt;
Nuestro alias sera "&lt;strong&gt;.j&lt;/strong&gt;" y podemos utilizarlo como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;.j nombre-receta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto aplica para cualquier receta ubicada en &lt;strong&gt;~/.user.justfile&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
Ejemplo:&lt;/p&gt;

&lt;p&gt;Crearemos una &lt;strong&gt;receta&lt;/strong&gt; llamada &lt;strong&gt;repo&lt;/strong&gt; que acepta un parámetro llamado &lt;strong&gt;folder.&lt;/strong&gt; Esta receta, crea una carpeta e inicializa &lt;strong&gt;git flow&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="c"&gt;# .your_user.justfile
&lt;/span&gt;&lt;span class="nv"&gt;current_path&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; invocation_directory&lt;span class="o"&gt;()&lt;/span&gt;

&lt;span class="c"&gt;# configurar un nuevo repo usando git flow
&lt;/span&gt;&lt;span class="nl"&gt;repo folder&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"creando repo en {{ current_path }}/{{ folder }}"&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"directorio de trabajo: {{ folder }}"&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-pv&lt;/span&gt; &lt;span class="o"&gt;{{&lt;/span&gt; folder &lt;span class="o"&gt;}}&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"iniciando git flow..."&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="o"&gt;{{&lt;/span&gt; folder &lt;span class="o"&gt;}}&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git flow init &lt;span class="nt"&gt;-fd&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"proceso completado en: {{ current_path }}/{{ folder }}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;y al lanzar nuestra receta, tendremos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;.j repo awesome-frontend
creando repo en /home/diniremix/dev/awesome-frontend
directorio de trabajo: awesome-frontend
&lt;span class="nb"&gt;mkdir&lt;/span&gt;: se ha creado el directorio &lt;span class="s1"&gt;'awesome-frontend'&lt;/span&gt;

iniciando git flow...
Inicializado repositorio Git vacío en /home/diniremix/dev/awesome-frontend/.git/
Using default branch names.
No branches exist yet. Base branches must be created now.
Branch name &lt;span class="k"&gt;for &lt;/span&gt;production releases: &lt;span class="o"&gt;[&lt;/span&gt;master] 
Branch name &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="s2"&gt;"next release"&lt;/span&gt; development: &lt;span class="o"&gt;[&lt;/span&gt;develop] 

How to name your supporting branch prefixes?
Feature branches? &lt;span class="o"&gt;[&lt;/span&gt;feature/] 
Bugfix branches? &lt;span class="o"&gt;[&lt;/span&gt;bugfix/] 
Release branches? &lt;span class="o"&gt;[&lt;/span&gt;release/] 
Hotfix branches? &lt;span class="o"&gt;[&lt;/span&gt;hotfix/] 
Support branches? &lt;span class="o"&gt;[&lt;/span&gt;support/] 
Version tag prefix? &lt;span class="o"&gt;[]&lt;/span&gt; 
Hooks and filters directory? &lt;span class="o"&gt;[&lt;/span&gt;/home/diniremix/dev/awesome-frontend/.git/hooks] 

proceso completado en: /home/diniremix/dev/awesome-frontend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;br&gt;
 &lt;/p&gt;
&lt;h2&gt;
  
  
  Extendiendo Just con Scripts 🚀
&lt;/h2&gt;

&lt;p&gt;En algunas ocasiones queremos ir un poco más allá con nuestras recetas, &lt;strong&gt;Just&lt;/strong&gt; provee un mecanismo sencillo para extenderlas, usando Bash, Python, y otros lenguajes de script.&lt;/p&gt;

&lt;p&gt;Lo único que tienes que hacer, es iniciar la receta con "&lt;strong&gt;#!&lt;/strong&gt; &lt;a href="https://es.wikipedia.org/wiki/Shebang"&gt;(el famoso shebang)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="c"&gt;# .justfile
&lt;/span&gt;
&lt;span class="nl"&gt;receta-python&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="c"&gt;#!/usr/bin/env python3
&lt;/span&gt;  &lt;span class="err"&gt;print(&lt;/span&gt;&lt;span class="s1"&gt;'Hola desde python!'&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;

&lt;span class="nl"&gt;receta-js&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="c"&gt;#!/usr/bin/env node
&lt;/span&gt;  &lt;span class="err"&gt;console.log(&lt;/span&gt;&lt;span class="s1"&gt;'Saludos desde JavaScript!'&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;

&lt;span class="nl"&gt;receta-perl&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="c"&gt;#!/usr/bin/env perl
&lt;/span&gt;  &lt;span class="err"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;"Larry Wall dice Hola!\n"&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;

&lt;span class="nl"&gt;receta-sh&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="c"&gt;#!/usr/bin/env sh
&lt;/span&gt;  &lt;span class="err"&gt;set&lt;/span&gt; &lt;span class="err"&gt;-euxo&lt;/span&gt; &lt;span class="err"&gt;pipefail&lt;/span&gt;
  &lt;span class="nv"&gt;hello&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'Yo'&lt;/span&gt;
  &lt;span class="err"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"$hello desde un shell script!"&lt;/span&gt;

&lt;span class="nl"&gt;receta-ruby&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="c"&gt;#!/usr/bin/env ruby
&lt;/span&gt;  &lt;span class="err"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Hola desde ruby!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;br&gt;
Algunas de las recetas habituales son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;crear una aplicacion/libreria en &lt;strong&gt;Rust&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;crear un proyecto con &lt;strong&gt;Python&lt;/strong&gt;, virtualenv y pip&lt;/li&gt;
&lt;li&gt;generar claves de SSH&lt;/li&gt;
&lt;li&gt;desplegar un backend de servicios en GAE/Fly/Heroku&lt;/li&gt;
&lt;li&gt;ver el clima 😄&lt;/li&gt;
&lt;li&gt;la IP actual 😉&lt;/li&gt;
&lt;li&gt;mostrar estadisticas de un proyecto, y la cantidad de lineas de código, con &lt;a href="https://github.com/XAMPPRocky/tokei"&gt;tokei.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://just.systems"&gt;Just systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/casey/just"&gt;casey/just&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cheatography.com/linux-china/cheat-sheets/justfile/"&gt;Just cheat sheets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/casey/just#user-justfiles"&gt;User justfiles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://toniogela.dev/just/"&gt;Just use just&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wttr.in"&gt;wttr.in&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/XAMPPRocky/tokei"&gt;tokei&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fasterthanli.me/articles/my-ideal-rust-workflow"&gt;My ideal Rust workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/doskey"&gt;windows-commands/doskey&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>just</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>NodeJS, Express y ES6</title>
      <dc:creator>Jorge Brunal Pérez</dc:creator>
      <pubDate>Tue, 21 Mar 2023 02:01:16 +0000</pubDate>
      <link>https://forem.com/diniremix/nodejs-express-y-es6-1fdc</link>
      <guid>https://forem.com/diniremix/nodejs-express-y-es6-1fdc</guid>
      <description>&lt;p&gt;Publicado originalmente (2021-01-11) en mi &lt;a href="https://diniremix.web.app"&gt;sitio web.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configurando &lt;strong&gt;Express&lt;/strong&gt; para utilizar &lt;strong&gt;ES6&lt;/strong&gt; con &lt;strong&gt;nodeJS&lt;/strong&gt; y no morir en el intento.&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ECMAScript 2015 ó ES2015 es una importante actualización del lenguaje de programación &lt;strong&gt;JavaScript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Es la primera actualización importante del lenguaje desde ES5, que se estandarizó en 2009.&lt;br&gt;
Por lo tanto, ES2015 suele llamarse &lt;strong&gt;ES6&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;ES6 permite entre otras cosas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;let&lt;/strong&gt; -&amp;gt; declarar variables con alcance de bloque utilizando la palabra clave &lt;strong&gt;let&lt;/strong&gt; y las diferencias entre &lt;strong&gt;let&lt;/strong&gt; y &lt;strong&gt;var&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;const&lt;/strong&gt; -&amp;gt; definir constantes, usando la palabra clave &lt;strong&gt;const&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Establecer el valor por defecto de los parámetros de una función.&lt;/li&gt;
&lt;li&gt;Operador de propagación &lt;strong&gt;(...)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;for...of&lt;/strong&gt; -&amp;gt; para iterar sobre los elementos de un objeto iterable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template literals&lt;/strong&gt; -&amp;gt; &lt;strong&gt;(&lt;code&gt;&lt;/code&gt;)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Módulos de ES6(lo que nos compete principalmete en esta entrada) 😄&lt;/li&gt;
&lt;li&gt;y un &lt;a href="http://es6-features.org/#Constants"&gt;largo etc...&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Comenzando
&lt;/h2&gt;

&lt;p&gt;Para este tutorial necesitamos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nodejs.org/es/download/"&gt;nodeJS&lt;/a&gt; versión 12.x&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/"&gt;npm&lt;/a&gt; versión 6.x ó superior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Creando los archivos necesarios.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-pv&lt;/span&gt; express-es6/src
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;express-es6
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;package.json .babelrc .prettierrc src/server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La estructura del proyecto deberá lucir como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── .babelrc
├── .prettierrc
├── package.json
└── src
    └── server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En el archivo &lt;strong&gt;.prettierrc&lt;/strong&gt; agregamos lo siguiente:&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="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;singleQuote&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;printWidth&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;trailingComma&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="s2"&gt;es5&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="s2"&gt;arrowParens&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="s2"&gt;always&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="s2"&gt;bracketSpacing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;jsxBracketSameLine&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;parser&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="s2"&gt;babel&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="s2"&gt;semi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;requirePragma&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;insertPragma&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;proseWrap&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="s2"&gt;preserve&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="s2"&gt;useTabs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tabWidth&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;endOfLine&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="s2"&gt;lf&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;p&gt;Para más info consulta: &lt;a href="https://prettier.io/docs/en/configuration.html"&gt;Prettier Configuration File&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;En el archivo &lt;strong&gt;.babelrc&lt;/strong&gt; agregamos lo siguiente:&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="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;presets&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="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@babel/preset-env&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="s2"&gt;targets&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="c1"&gt;// specify supported browsers (ES2015+ Features to transpile)&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node&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="s2"&gt;current&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="c1"&gt;// no module transpilation to CJS (!important)&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modules&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
        &lt;span class="p"&gt;}]&lt;/span&gt;

    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;plugins&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="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;babel-plugin-module-resolver&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;root&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.&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="s2"&gt;extensions&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="c1"&gt;// some alias&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;alias&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@middlewares&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="s2"&gt;./src/middlewares&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="s2"&gt;@modules&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="s2"&gt;./src/modules&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="s2"&gt;@routes&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="s2"&gt;./src/routes&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="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@babel/plugin-transform-modules-commonjs&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;allowTopLevelThis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@babel/plugin-transform-runtime&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;regenerator&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;El en apartado de referencias, al final del post, se encuentran enlaces para continuar la lectura, acerca de la configuración para Babel.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;br&gt;
En el archivo &lt;strong&gt;package.json&lt;/strong&gt; agregamos lo siguiente:&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="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;engines&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node&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="s2"&gt;&amp;gt;=12.0.0&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="s2"&gt;dependencies&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;express&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="s2"&gt;^4.17.1&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="s2"&gt;module-alias&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="s2"&gt;^2.2.2&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="s2"&gt;devDependencies&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rimraf&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="s2"&gt;^3.0.2&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="s2"&gt;@babel/cli&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="s2"&gt;^7.13.14&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="s2"&gt;@babel/core&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="s2"&gt;^7.13.14&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="s2"&gt;@babel/node&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="s2"&gt;^7.13.13&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="s2"&gt;@babel/plugin-transform-runtime&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="s2"&gt;^7.13.10&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="s2"&gt;@babel/preset-env&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="s2"&gt;^7.13.12&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="s2"&gt;babel-plugin-module-resolver&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="s2"&gt;^4.1.0&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="s2"&gt;prettier&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="s2"&gt;^2.2.1&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h2&gt;
  
  
  Instalando las depedencias
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h2&gt;
  
  
  Utilizando ES6
&lt;/h2&gt;

&lt;p&gt;Ingresamos al directorio &lt;strong&gt;src&lt;/strong&gt; y editamos el archivo &lt;strong&gt;server.js&lt;/strong&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="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&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;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;8080&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;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api&lt;/span&gt;&lt;span class="dl"&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;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&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;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&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="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OK&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`welcome to Server, use &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; instead`&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="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OK&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Welcome to Server, version: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;version&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;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fail&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Not Found&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="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&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="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="s2"&gt;server app listening on port:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;port&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="s2"&gt;version:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;version&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;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Finalizando
&lt;/h2&gt;

&lt;p&gt;Ahora agregamos unas tareas al &lt;strong&gt;package.json&lt;/strong&gt; para facilitar las cosas.&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="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;

  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scripts&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;clean&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="s2"&gt;rimraf dist&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="s2"&gt;build&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="s2"&gt;babel src -d dist&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="s2"&gt;dev&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="s2"&gt;NODE_ENV=development babel-node src/server.js&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="s2"&gt;serve&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="s2"&gt;NODE_ENV=production node dist/server.js&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="s2"&gt;start&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="s2"&gt;node server.js&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="s2"&gt;lint&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="s2"&gt;prettier --config .prettierrc --check &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;src/**/*.js&lt;/span&gt;&lt;span class="se"&gt;\"&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="s2"&gt;lint:fix&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="s2"&gt;prettier --config .prettierrc --check &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;src/**/*.js&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; --write&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h2&gt;
  
  
  Pruebas
&lt;/h2&gt;

&lt;p&gt;Iniciando el servidor...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm run dev

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ServerWithES6@0.0.1 dev /Users/diniremix/Develop/express-es6
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;NODE_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;development babel-node src/server.js

server app listening on port: 8080
version: 0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;curl es tu amigo....&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;curl &lt;span class="nt"&gt;--request&lt;/span&gt; GET &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--url&lt;/span&gt; http://localhost:8080/api &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt;

&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"status"&lt;/span&gt;:&lt;span class="s2"&gt;"OK"&lt;/span&gt;,&lt;span class="s2"&gt;"message"&lt;/span&gt;:&lt;span class="s2"&gt;"Welcome to Server, version: 0.1"&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Construyendo...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm run build

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ServerWithES6@0.0.1 build /Users/diniremix/Develop/express-es6
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; babel src &lt;span class="nt"&gt;-d&lt;/span&gt; dist

Successfully compiled 1 file with Babel &lt;span class="o"&gt;(&lt;/span&gt;527ms&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chequeando el código con prettier...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm run lint

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ServerWithES6@0.0.1 lint /Users/diniremix/Develop/express-es6
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; prettier &lt;span class="nt"&gt;--config&lt;/span&gt; .prettierrc &lt;span class="nt"&gt;--check&lt;/span&gt; &lt;span class="s2"&gt;"src/**/*.js"&lt;/span&gt;

Checking formatting...
&lt;span class="o"&gt;[&lt;/span&gt;warn] jsxBracketSameLine is deprecated.
All matched files use Prettier code style!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Corrigiendo posibles inconsistencias con prettier...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm run lint:fix

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ServerWithES6@0.0.1 lint:fix /Users/diniremix/Develop/express-es6
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; prettier &lt;span class="nt"&gt;--config&lt;/span&gt; .prettierrc &lt;span class="nt"&gt;--check&lt;/span&gt; &lt;span class="s2"&gt;"src/**/*.js"&lt;/span&gt; &lt;span class="nt"&gt;--write&lt;/span&gt;

Checking formatting...
&lt;span class="o"&gt;[&lt;/span&gt;warn] jsxBracketSameLine is deprecated.
All matched files use Prettier code style!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;br&gt;
Todo lo necesario, &lt;a href="https://gitlab.com/-/snippets/2177469"&gt;en este snippet.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Todo esto hace parte de la configuración de &lt;a href="https://gitlab.com/HomeInside/Knot"&gt;Knot&lt;/a&gt;, un Proyecto de &lt;strong&gt;HomeInside&lt;/strong&gt;, para construir APIs RESTful y microservicios usando Node.js, Express y Firestore.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/HomeInside/Knot"&gt;Knot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Modules"&gt;Módulos JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.javascripttutorial.net/es6/"&gt;javascripttutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://es6-features.org"&gt;ECMAScript 6 — New Features: Overview &amp;amp; Comparison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://babeljs.io/docs/en/babel-preset-env"&gt;@babel/preset-env&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://babeljs.io/docs/en/babel-plugin-transform-runtime"&gt;@babel/plugin-transform-runtime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tleunen/babel-plugin-module-resolver#readme"&gt;babel-plugin-module-resolver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/codesquery/nodejs-restapi"&gt;codesquery/nodejs-restapi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/KunalKapadia/express-mongoose-es6-rest-api"&gt;KunalKapadia/express-mongoose-es6-rest-api&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>node</category>
      <category>express</category>
    </item>
    <item>
      <title>Limpiar la pantalla en Rust</title>
      <dc:creator>Jorge Brunal Pérez</dc:creator>
      <pubDate>Tue, 21 Mar 2023 01:58:00 +0000</pubDate>
      <link>https://forem.com/diniremix/limpiar-la-pantalla-en-rust-1hjc</link>
      <guid>https://forem.com/diniremix/limpiar-la-pantalla-en-rust-1hjc</guid>
      <description>&lt;p&gt;Publicado originalmente (2021-10-11) en mi &lt;a href="https://diniremix.web.app"&gt;sitio web.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Muchas maneras, el mismo efecto?&lt;/p&gt;

&lt;p&gt;Mientras desarrollamos una aplicación que utiliza la línea de comandos, una de las tareas más triviales y necesaria (en muchos casos) es limpiar la pantalla....&lt;/p&gt;

&lt;p&gt;Rust provee un par de opciones para tal fin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Utilizando &lt;strong&gt;std:&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;clear_screen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nn"&gt;process&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"clear"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;.status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&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;p&gt;funciona muy bien en sistemas Gnu/Linux y Mac OS.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;En sistemas Windows, basta con cambiar "clear" por "cls"&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;h3&gt;
  
  
  Usando códigos de escape ANSI.
&lt;/h3&gt;

&lt;p&gt;Todos los códigos de escape comienzan por los caracteres &lt;strong&gt;ESC&lt;/strong&gt; (carácter ASCII número 27 decimal, &lt;strong&gt;1B&lt;/strong&gt; en hexadecimal) seguido del carácter &lt;strong&gt;[&lt;/strong&gt;, tienen cero o más parámetros delimitados por &lt;strong&gt;;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;clear_screen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;print!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\x1B&lt;/span&gt;&lt;span class="s"&gt;[2J"&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;p&gt; &lt;/p&gt;

&lt;p&gt;Una variante del anterior, que posiciona el cursor en la fila 0, columna 0.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;clear_screen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;print!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\x1B&lt;/span&gt;&lt;span class="s"&gt;[2J &lt;/span&gt;&lt;span class="se"&gt;\x1B&lt;/span&gt;&lt;span class="s"&gt;[0;0f"&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;p&gt; &lt;br&gt;
Otro ejemplo casteando el número 27 como &lt;strong&gt;char&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;clear_screen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;print!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{}[2J"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nb"&gt;char&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;p&gt; &lt;br&gt;
Donde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;'&lt;strong&gt;\x1B&lt;/strong&gt;' es el código de escape, que indica que lo que sigue es una secuencia de control.&lt;/li&gt;
&lt;li&gt;'&lt;strong&gt;[&lt;/strong&gt;' indica el comienzo de una secuencia de control.&lt;/li&gt;
&lt;li&gt;'&lt;strong&gt;2&lt;/strong&gt;' indica el tipo de secuencia de control. En este caso, '2' indica que la pantalla debe ser borrada.&lt;/li&gt;
&lt;li&gt;'&lt;strong&gt;J&lt;/strong&gt;' indica cómo se borrará la pantalla. En este caso, 'J' indica que se borrará todo el contenido de la pantalla.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://es.wikipedia.org/wiki/C%C3%B3digo_escape_ANSI"&gt;Códigos de escape_ANSI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/redox-os/termion/blob/master/src/clear.rs"&gt;termion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/watchexec/clearscreen"&gt;clearscreen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/4062045/clearing-terminal-in-linux-with-c-code/4062051#4062051"&gt;stackoverflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rosettacode.org/wiki/Terminal_control/Clear_the_screen#Rust"&gt;rosettacode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
    </item>
    <item>
      <title>notas sobre IndexedDB</title>
      <dc:creator>Jorge Brunal Pérez</dc:creator>
      <pubDate>Tue, 21 Mar 2023 01:09:32 +0000</pubDate>
      <link>https://forem.com/diniremix/notas-sobre-indexeddb-17bp</link>
      <guid>https://forem.com/diniremix/notas-sobre-indexeddb-17bp</guid>
      <description>&lt;p&gt;publicado originalmente (2020-11-21) en mi &lt;a href="https://diniremix.web.app"&gt;sitio web&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/API/IndexedDB_API"&gt;IndexedDB&lt;/a&gt; es una API de javaScript de bajo nivel que ofrece almacenamiento del lado del cliente.&lt;/p&gt;

&lt;p&gt;Permitiendo además almacenar de cantidades significativas de datos estructurados, incluyendo archivos y blobs.&lt;/p&gt;

&lt;p&gt;Para búsquedas de alto rendimiento en esos datos, se usa índices, permitiendo busquedas más veloces sobre los datos guardados.&lt;br&gt;
Mientras &lt;a href="https://developer.mozilla.org/es/docs/Web/API/Web_Storage_API"&gt;DOM Storage&lt;/a&gt; es útil para el almacenamiento de pequeñas cantidades de datos, no es útil para almacenar grandes cantidades de datos estructurados. IndexedDB proporciona una solución.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Qué tiene que ver esto de IndexedDB con localStorage/sessionStorage?
&lt;/h3&gt;

&lt;p&gt;En la superficie, las dos tecnologías pueden parecer directamente comparables, sin embargo, si pasa algo de tiempo con ellas, pronto se dará cuenta de que no lo son. Fueron diseñados para lograr un objetivo similar, &lt;strong&gt;el almacenamiento del lado del cliente&lt;/strong&gt;, pero abordan la tarea en cuestión desde perspectivas significativamente diferentes y funcionan mejor con diferentes cantidades de datos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;localStorage&lt;/strong&gt;, o más precisamente Web Storage, fue diseñado para cantidades más pequeñas de datos. Básicamente, se trata de una cadena solo para almacenamiento de valor, con una API síncrona simplista.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;indexedDB&lt;/strong&gt;, por otra parte, fue diseñado para trabajar con cantidades de datos significativamente mayores. Primero, en teoría, proporciona tanto una API síncrona como una asíncrona. Sin embargo, en la práctica, todas las implementaciones actuales son asíncronas y las solicitudes no bloquearán la carga de la interfaz de usuario.&lt;/p&gt;

&lt;p&gt;En una reciente revisión de la documentación nos dice:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Las operaciones realizadas con IndexedDB se hacen de forma asíncrona, para no bloquear las aplicaciones. IndexedDB incluía originalmente APIs síncronas y asíncronas. La API sincrónica estaba pensada para ser utilizada únicamente con Web Workers, pero se eliminó de la especificación porque no estaba claro si era necesaria. Sin embargo, la API sincrónica podría reintroducirse si hay suficiente demanda por parte de los desarrolladores web.&lt;br&gt;
&lt;strong&gt;MDN Web Docs&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;h3&gt;
  
  
  Qué navegadores lo soportan?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://caniuse.com/?search=IndexedDB"&gt;can I use IndexedDB?&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Para qué me sirve esto?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;sesiones&lt;/li&gt;
&lt;li&gt;perfiles de usuario&lt;/li&gt;
&lt;li&gt;almacen de datos (funciona como una base de datos local)&lt;/li&gt;
&lt;li&gt;PWA's como la de &lt;a href="https://pokedex.org"&gt;Pokedex&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Hay Límites de almacenamiento?
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;No existe un límite de tamaño para un elemento simple de la base de datos&lt;/em&gt;. Sin embargo, puede haber un &lt;a href="https://developer.chrome.com/apps/offline_storage#temporary"&gt;límite en el tamaño de cada base de datos IndexedDB.&lt;/a&gt; Este límite (y la forma en que la interfaz de usuario la hace valer) &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria"&gt;puede variar de un navegador a otro.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aunque por lo general cada navegador maneja diferentes tipos de almacenamiento de datos, el almacenamiento viene en dos tipos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Temporal:&lt;/strong&gt; Son datos que no necesitan persistir durante mucho tiempo. Serán eliminados bajo una política de uso menos reciente, cuando se alcancen los límites de almacenamiento.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistente:&lt;/strong&gt; Estos son datos que están destinados a mantenerse durante mucho tiempo. Sólo se desalojarán si el usuario lo decide.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por ejemplo, en &lt;strong&gt;Firefox&lt;/strong&gt; el espacio máximo de almacenamiento del navegador es dinámico, se basa en el tamaño de su disco duro. El límite global se calcula como el 50% del espacio libre en disco. Cuando se utiliza el almacenamiento persistente, el usuario recibe una ventana emergente de la interfaz de usuario para avisarle de que estos datos van a persistir, &lt;strong&gt;y le pregunta si está conforme con ello&lt;/strong&gt;. El almacenamiento temporal de datos no provoca ninguna pregunta al usuario.&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
Mientras que en &lt;strong&gt;Chrome&lt;/strong&gt;, el almacenamiento temporal se comparte entre todas las aplicaciones web que se ejecutan en el navegador. El pool compartido puede ser de hasta 1/3 del espacio de disco disponible. Y una aplicación puede tener una cuota mayor para el almacenamiento persistente que para el temporal, pero debe solicitarlo mediante la API de gestión de cuotas y &lt;strong&gt;el usuario debe concederle permiso para utilizar más espacio.&lt;/strong&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Empezando:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/API/IndexedDB_API"&gt;IndexedDB Api en developer mozilla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API"&gt;Conceptos básicos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/API/IndexedDB_API/Usando_IndexedDB"&gt;Usando IndexedDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Librerías?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dexie.org"&gt;Dexie.js (recomendada)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://localforage.github.io/localForage/"&gt;localForage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://techfort.github.io/LokiJS/"&gt;LokiJS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gruns/ImmortalDB"&gt;ImmortalDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;y unas &lt;a href="https://opensourcelibs.com/libs/indexeddb"&gt;cuantas más&lt;/a&gt; 😄&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Referencias
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/API/IndexedDB_API"&gt;IndexedDB Api en developer mozilla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.freecodecamp.org/news/a-quick-but-complete-guide-to-indexeddb-25f030425501/"&gt;Una guía rápida&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/"&gt;Almacenar imágenes y archivos en IndexedDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pocketjavascript.com/blog/2015/11/23/introducing-pokedex-org"&gt;PWA para los fans de Pokémon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.raymondcamden.com/2018/10/05/storing-retrieving-photos-in-indexeddb"&gt;Almacenamiento (y recuperación) de fotos en IndexedDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/robnyman/1894032"&gt;un gist del artículo anterior ☝️&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/"&gt;Un primer paseo por IndexedDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/indexeddb-best-practices?authuser=1"&gt;Mejores prácticas para el uso de IndexedDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>indexeddb</category>
    </item>
    <item>
      <title>DockerFile para aplicaciones en Rust</title>
      <dc:creator>Jorge Brunal Pérez</dc:creator>
      <pubDate>Tue, 21 Mar 2023 00:08:32 +0000</pubDate>
      <link>https://forem.com/diniremix/dockerfile-para-applicaciones-en-rust-2m7l</link>
      <guid>https://forem.com/diniremix/dockerfile-para-applicaciones-en-rust-2m7l</guid>
      <description>&lt;p&gt;publicado originalmente (2018-05-01) en mi &lt;a href="https://diniremix.web.app"&gt;sitio web&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creando una imagen de &lt;a href="https://www.docker.com"&gt;Docker&lt;/a&gt; para una aplicación en Rust.&lt;/p&gt;

&lt;p&gt;Este archivo, se extrajo del repositorio &lt;a href="https://github.com/HomeInside/rocket-rust"&gt;rocket-rust&lt;/a&gt; facilitando la creación de una imagen de Docker para aplicaciones en &lt;a href="//rust-lang.org"&gt;Rust&lt;/a&gt;, usando &lt;a href="https://rocket.rs/v0.4/guide/"&gt;Rocket&lt;/a&gt; como Web framework.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:16.04&lt;/span&gt;

&lt;span class="k"&gt;MAINTAINER&lt;/span&gt;&lt;span class="s"&gt; Awesome User &amp;lt;awesome-user@example.como&amp;gt;&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get update &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; curl nano file net-tools build-essential

&lt;span class="k"&gt;RUN &lt;/span&gt;curl https://sh.rustup.rs &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /home/install.sh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nb"&gt;chmod&lt;/span&gt; +x /home/install.sh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    sh /home/install.sh &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;--verbose&lt;/span&gt; &lt;span class="nt"&gt;--default-toolchain&lt;/span&gt; nightly

&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; PATH "/root/.cargo/bin:$PATH"&lt;/span&gt;

&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; SOURCES=/sources&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nv"&gt;$SOURCES&lt;/span&gt;

&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="s"&gt; ./ $SOURCES&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; $SOURCES&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;rustup update

&lt;span class="k"&gt;RUN &lt;/span&gt;cargo update

&lt;span class="k"&gt;RUN &lt;/span&gt;cargo build &lt;span class="nt"&gt;--release&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 80&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8080&lt;/span&gt;

&lt;span class="c"&gt;# CMD ROCKET_ENV=development ./target/release/rocket-rust&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ROCKET_ENV=production ./target/release/rocket-rust&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  referencias
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://doc.rust-lang.org/stable/book/"&gt;documentación oficial de Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rocket.rs"&gt;Rocket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/HomeInside/rocket-rust"&gt;HomeInside/rocket-rust&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>archive</category>
    </item>
    <item>
      <title>Instalar Kazam en Korora 24 (2016)</title>
      <dc:creator>Jorge Brunal Pérez</dc:creator>
      <pubDate>Mon, 20 Mar 2023 23:59:34 +0000</pubDate>
      <link>https://forem.com/diniremix/instalar-kazam-en-korora-24-2016-44o3</link>
      <guid>https://forem.com/diniremix/instalar-kazam-en-korora-24-2016-44o3</guid>
      <description>&lt;p&gt;publicado originalmente (2016-09-07) en mi &lt;a href="https://diniremix.web.app"&gt;sitio web&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://launchpad.net/kazam"&gt;Kazam&lt;/a&gt; proporciona una interfaz bien diseñada y muy fácil de usar para grabar y hacer capturas de pantalla.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cMAJELRU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://c1.staticflickr.com/9/8372/28908063724_160041bce3_o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cMAJELRU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://c1.staticflickr.com/9/8372/28908063724_160041bce3_o.png" alt="kazam1" width="481" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se puede grabar vídeo y audio del escritorio en múltiples canales simultáneamente. Cuenta con un control de los niveles de audio y permite también seleccionar una región de la pantalla para ser capturada.&lt;/p&gt;

&lt;p&gt;El Soporte para códecs H264 y VP8 está integrado por defecto.&lt;/p&gt;

&lt;p&gt;Aunque existen numerosos programas para realizar esta labor en Gnu/Linux, Kazam brilla por su simplicidad y potencia a la hora de hacer un screencast de tu escritorio.&lt;/p&gt;

&lt;h3&gt;
  
  
  Instalando Kazam en Korora 24:
&lt;/h3&gt;

&lt;p&gt;Agregamos el repositorio de &lt;a href="http://software.opensuse.org/download.html?project=home%3AKenzy%3Apackages&amp;amp;package=kazam"&gt;home:Kenzy:packages/kazam&lt;/a&gt; para Fedora 24.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dnf config-manager &lt;span class="nt"&gt;--add-repo&lt;/span&gt; http://download.opensuse.org/repositories/home:Kenzy:packages/Fedora_24/home:Kenzy:packages.repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Realizamos la instalación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;kazam
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A la hora de escribir estas líneas, Kazam se encuentra en su &lt;a href="https://launchpad.net/~kazam-team/+archive/ubuntu/stable-series"&gt;versión 1.4.5&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;listo!.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PnUMJMw8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://c2.staticflickr.com/9/8101/29533150345_e975c9bdf2_z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PnUMJMw8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://c2.staticflickr.com/9/8101/29533150345_e975c9bdf2_z.jpg" alt="kazam2" width="640" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Usando Kazam en Korora 24&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/3DRzO9zz5xE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Problemas comunes
&lt;/h3&gt;

&lt;p&gt;En el caso de Korora 24, Kazam puede no funcionar bien y lanzar un error al iniciar, como se aprecia en la siguiente imagen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WoZaEWUQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://c5.staticflickr.com/9/8692/29499414116_68767cc930_z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WoZaEWUQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://c5.staticflickr.com/9/8692/29499414116_68767cc930_z.jpg" alt="kazam3" width="640" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto es debido posiblemente a un cambio en la versión de python usada (&lt;strong&gt;3.5.1&lt;/strong&gt; para este caso), para solucionar esto, basta con editar los archivos: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;/usr/bin/kazam&lt;/strong&gt; y seguidamente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/usr/lib/python3.5/site-packages/kazam/backend/config.py&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Con tu editor favorito editamos primeramente, el archivo &lt;strong&gt;/usr/bin/kazam&lt;/strong&gt; y agregar las siguientes líneas antes de:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;gi.repository&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Gtk&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quedando de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;gi&lt;/span&gt;
&lt;span class="n"&gt;gi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;require_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Gtk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"3.0"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;gi.repository&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Gtk&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Guardamos los cambios y a continuación editamos el archivo &lt;strong&gt;/usr/lib/python3.5/site-packages/kazam/backend/config.py&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Ubicamos el metodo get y lo reescribiremos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Antes:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ConfigParser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Después:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fallback&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'rest'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;KazamConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fallback&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estos cambios funcionan bien en Korora 24.&lt;/p&gt;

&lt;p&gt;El fallo expuesto aquí, fué &lt;a href="https://bugs.launchpad.net/ubuntu/+source/kazam/+bug/1500083"&gt;reportado y solucionado&lt;/a&gt; en la sección bugs del proyecto, estamos atentos a una actualización proximamente.&lt;/p&gt;

</description>
      <category>kazam</category>
      <category>gnu</category>
      <category>linux</category>
      <category>archive</category>
    </item>
    <item>
      <title>World of Goo</title>
      <dc:creator>Jorge Brunal Pérez</dc:creator>
      <pubDate>Mon, 20 Mar 2023 23:06:34 +0000</pubDate>
      <link>https://forem.com/diniremix/world-of-goo-521k</link>
      <guid>https://forem.com/diniremix/world-of-goo-521k</guid>
      <description>&lt;p&gt;&lt;a href="https://store.steampowered.com/app/22000/World_of_Goo"&gt;World of Goo&lt;/a&gt; es un videojuego de lógica, con un fuerte énfasis en la física, Producido por &lt;a href="https://2dboy.com"&gt;2D Boy&lt;/a&gt;, una desarrolladora de videojuegos independiente compuesta por Kyle Gabler y Ron Carmel, ambos exempleados de Electronic Arts.&lt;/p&gt;

&lt;p&gt;No hablaremos del juego en sí, sino de unos curiosos y fascinantes mensajes que aparecen cuando el juego va iniciando, hemos hecho una recopilacion de estos (no sé si están todos) e hicimos una función en &lt;strong&gt;Javascript&lt;/strong&gt; que genera mensajes de Goo aleatorios. 😄&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;var&lt;/span&gt; &lt;span class="nx"&gt;messages&lt;/span&gt; &lt;span class="o"&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;Excediendo la capacidad de la CPU&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;Construyendo capacidad emocional&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;Comprobando ozono&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;Cargando&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;Agitando&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;Extrayendo&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;Girando con violencia alrededor del eje de las Y&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;Debatiendo el arte de los videojuegos&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;Despreocupandose de los problemas de pareja&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;Metiendo espectativas en sacos de arena&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;Licuando Bytes&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;Yodizando&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;Probando la perfección&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;Revolviendo la independencia&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;Filtrando la moral&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;Diagramando meticulosamente la diversión&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;Homogeneizando Goo&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;Aplacando los editores&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;Destilando belleza&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;Autofirmando&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;Cambiando tiempo por espacio&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;Fabricando responsabilidad social&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;Reimaginando con exactitud&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;Doblando la cuchara&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;Construyendo una narración no lineal&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;Aplicando innovación&lt;/span&gt;&lt;span class="dl"&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;tot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getGoo&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&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;pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;tot&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;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;pos&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;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&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;...OK&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="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;getGoo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  referencias
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://2dboy.com"&gt;Sitio oficial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://es.wikipedia.org/wiki/World_of_Goo"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://worldofgoo.fandom.com/wiki/World_of_Goo"&gt;Fandom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://store.steampowered.com/app/22000/World_of_Goo"&gt;Steam&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;publicado originalmente (2016-02-07) en mi &lt;a href="https://diniremix.web.app"&gt;sitio web&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>gamedev</category>
    </item>
  </channel>
</rss>
