<?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: Capua</title>
    <description>The latest articles on Forem by Capua (@capua).</description>
    <link>https://forem.com/capua</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1839%2Fdb081716-b422-4c13-a280-252b97dbd49d.png</url>
      <title>Forem: Capua</title>
      <link>https://forem.com/capua</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/capua"/>
    <language>en</language>
    <item>
      <title>Como crear una guía de estilo con Figma</title>
      <dc:creator>Ayoze Barrera 🇮🇨</dc:creator>
      <pubDate>Sun, 01 Mar 2020 14:54:29 +0000</pubDate>
      <link>https://forem.com/capua/como-crear-una-guia-de-estilo-con-figma-269o</link>
      <guid>https://forem.com/capua/como-crear-una-guia-de-estilo-con-figma-269o</guid>
      <description>&lt;p&gt;La imagen de un proyecto es súper importante, y va a influenciar al usuario directamente para que siga utilizando la aplicación y la identifique rápidamente o para que salga huyendo confuso y asustado.&lt;/p&gt;

&lt;p&gt;Cuando trabajan varios diseñadores o programadores en un proyecto muy grande, lo mejor es crear una guía de estilo para que nadie se salga del &lt;em&gt;guión&lt;/em&gt; y acabe diseñando algún componente fuera de tono en comparación al resto.&lt;/p&gt;

&lt;p&gt;Para evitar esto, existen las guías de estilos.&lt;/p&gt;

&lt;p&gt;Así que cuando llega alguien nuevo al proyecto, le podemos dar la bienvenida con una bonita guía de estilos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--15iIcycX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q2vcfp81awipkl2v4qff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--15iIcycX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q2vcfp81awipkl2v4qff.png" alt="Alt Text" width="880" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Que es una guía de estilo
&lt;/h1&gt;

&lt;p&gt;Una guía de estilos, como bien dice su nombre, es una guía para saber que &lt;strong&gt;materiales&lt;/strong&gt; se deben de usar para seguir construyendo, como por ejemplo, que tipografía usar en los títulos, cuáles son los colores principales de la aplicación, que sombras utilizar, y cualquier aspecto que queramos definir.&lt;/p&gt;

&lt;p&gt;En nuestra &lt;a href="https://citec-sl.com"&gt;empresa&lt;/a&gt;, hemos creado una guía de estilos muy simple para una aplicación que llevamos desarrollando cuatro años: &lt;a href="https://fleetview.io"&gt;Fleetview&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nuestra guía de estilo ha servido a otros compañeros para poder crear manuales y vídeos sobre la aplicación.&lt;/p&gt;

&lt;p&gt;Hemos decidido hacerla en Figma ya que es una aplicación increible y nos permite exportar cualquier elemento en vectorial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Que elementos añadir
&lt;/h2&gt;

&lt;p&gt;Podemos añadir los elementos que consideremos más importantes, y en nuestro caso fueros los siguientes:&lt;/p&gt;

&lt;h3&gt;
  
  
  Branding
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uC7bt9dI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/800thl6sd50j162ze09f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uC7bt9dI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/800thl6sd50j162ze09f.png" alt="Alt Text" width="880" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Los logos de la aplicación y sus variantes. Cualquier otra variante que no esté aquí definida no estará permitida.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paleta de colores
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U8epsEDa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yfrhej25hhegw4g691u7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U8epsEDa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yfrhej25hhegw4g691u7.png" alt="Alt Text" width="846" height="788"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Colores principales y secundarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tipografía
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kAonjw2g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wgrd68xuur8kj7qqlefn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kAonjw2g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wgrd68xuur8kj7qqlefn.png" alt="Alt Text" width="880" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La tipografía que usamos en el logo, en los títulos y en los párrafos. De cada uno de ellos definimos la familia, peso, tamaño, altura de línea, espaciado entre letras, color y un ejemplo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Iconos
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JUrhyiR7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cmu6pcm35sbiu4t0zsrl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JUrhyiR7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cmu6pcm35sbiu4t0zsrl.png" alt="Alt Text" width="376" height="754"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El sistema de iconos que usa la aplicación. Si hay que diseñar un icono nuevo, debe tener el mismo tamaño y mismo el grosor en las líneas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Componentes
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NRD9jkaC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qsxjtfui0pnqjzibogpp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NRD9jkaC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qsxjtfui0pnqjzibogpp.png" alt="Alt Text" width="880" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Los componentes más importantes que utilicen algunos de los aspectos anteriores.&lt;/p&gt;

&lt;p&gt;Y todo junto pues se vería así:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S9w7jGwb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xuamwgqvkoxbllhb99cu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S9w7jGwb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xuamwgqvkoxbllhb99cu.png" alt="Alt Text" width="880" height="123"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasta la próxima batalla!&lt;/p&gt;

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

</description>
      <category>design</category>
      <category>figma</category>
      <category>style</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Integrando Prettier con ESLint</title>
      <dc:creator>Mario Blas 🇮🇨</dc:creator>
      <pubDate>Thu, 27 Feb 2020 18:24:02 +0000</pubDate>
      <link>https://forem.com/capua/integrando-prettier-con-eslint-41ml</link>
      <guid>https://forem.com/capua/integrando-prettier-con-eslint-41ml</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post fue publicado originalmente en mayo de 2019.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;En el siguiente artículo vamos a conocer &lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt; y cómo podemos integrarlo con &lt;a href="https://eslint.org/" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt; para mejorar nuestro flujo de trabajo.&lt;/p&gt;

&lt;p&gt;Configurar estas herramientas será una inversión que haremos una vez y sus beneficios los notaremos durante todo el proyecto.&lt;/p&gt;

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

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

&lt;p&gt;Si aun no lo conocéis, ESLint es un linter para JavaScript y JSX. Ayuda a identificar e informar sobre patrones que se encuentran en el código con el objetivo de evitar errores.&lt;/p&gt;

&lt;p&gt;Principalmente, hay que tener en cuenta que las reglas de los linters se dividen en dos categorías:&lt;/p&gt;

&lt;h3&gt;
  
  
  Reglas de formato
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Por ejemplo: longitud de línea máxima, tipo de indentación, tamaño de la indentación...&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Reglas de calidad del código
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Por ejemplo: no permitir variables que no se usen, no permitir declaraciones de variables globales...&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Son las más importantes que ofrecen los linters ya que pueden detectar errores en el código.&lt;/p&gt;

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

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

&lt;p&gt;Prettier es una herramienta para formatear el código, tiene soporte para &lt;em&gt;HMTL, CSS, JavaScript, JSX, TypeScript, GraphQL...&lt;/em&gt; entre otros.&lt;/p&gt;

&lt;p&gt;Se encarga de garantizar que el código se ajuste a un estilo consistente de manera automática. Para ello, analiza el código y lo re-escribe cada vez que se ejecuta.&lt;/p&gt;

&lt;p&gt;Su objetivo es acabar con los debates sobre el estilo del código, de ahí que no trate de cubrir todos los casos de uso. Es una herramienta dogmática, por tanto, los debates sobre estilo simplemente pasarán a ser debates sobre qué &lt;a href="https://prettier.io/docs/en/options.html" rel="noopener noreferrer"&gt;opciones de Prettier&lt;/a&gt; usar.&lt;/p&gt;

&lt;p&gt;Gracias a Prettier ahorraremos tiempo y energía en hacer que el estilo de nuestro código esté normalizado.&lt;/p&gt;

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

&lt;p&gt;Como hemos visto, cada herramienta tiene sus puntos fuertes e intentaremos aprovechar lo mejor de cada una. En definitiva, ESLint estará enfocado en lo relacionado a la calidad del código mientras que Prettier se encargará de su formato.&lt;/p&gt;

&lt;p&gt;En la siguiente configuración nos centraremos en su uso con &lt;em&gt;JavaScript&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Instalar Dependencias
&lt;/h3&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;span class="nt"&gt;--save-dev&lt;/span&gt; eslint prettier eslint-config-prettier eslint-plugin-prettier
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/prettier/eslint-config-prettier" rel="noopener noreferrer"&gt;eslint-config-prettier&lt;/a&gt;: desactiva las reglas de ESLint que entren en conflicto con Prettier.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/prettier/eslint-plugin-prettier" rel="noopener noreferrer"&gt;eslint-plugin-prettier&lt;/a&gt;: añade una regla que formatea el contenido usando Prettier.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Configurar ESLint
&lt;/h3&gt;

&lt;p&gt;En nuestra configuración de ESLint añadiremos las siguientes líneas:&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="c1"&gt;// .eslintrc.js&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="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;extends&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="s1"&gt;eslint:recommended&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;plugin:prettier/recommended&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;rules&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="s1"&gt;prettier/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="s1"&gt;warn&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;De esta manera será ESLint el que se encargará de ejecutar Prettier.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;He añadido &lt;em&gt;eslint:recommended&lt;/em&gt; a modo de ejemplo, se puede usar la configuración que deseemos. Por otro lado, también he configurado que los elementos que no cumplan con las reglas de Prettier se muestren en forma de aviso, si queremos que muestren en forma de error simplemente hay que sustituir &lt;em&gt;'warn'&lt;/em&gt; por &lt;em&gt;'error'&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Configurar Prettier
&lt;/h3&gt;

&lt;p&gt;En la configuración de Prettier vamos a añadir algunas reglas, por ejemplo:&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="c1"&gt;// .prettierrc.js&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="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;printWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;singleQuote&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="na"&gt;trailingComma&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;all&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;h3&gt;
  
  
  Script de npm
&lt;/h3&gt;

&lt;p&gt;Añadiremos la siguiente línea en los scripts de nuestro package.json&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"lint:fix"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eslint --fix ./src"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;em&gt;ESLint&lt;/em&gt; corregirá los problemas que sea capaz de resolver automáticamente y aplicará el estilo al código con &lt;em&gt;Prettier&lt;/em&gt;, tal y como hemos configurado anteriormente.&lt;/p&gt;
&lt;h2&gt;
  
  
  Resultado
&lt;/h2&gt;

&lt;p&gt;Si con la configuración anterior ejecutamos el script con &lt;code&gt;npm run lint:fix&lt;/code&gt; obtendremos para el siguiente fichero de ejemplo un resultado como este:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9ix54m30x4s7tbm2xqbo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9ix54m30x4s7tbm2xqbo.png" alt="Alt Text" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;
Antes de ejecutar el script



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwhglsyagr88ym53cyc9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwhglsyagr88ym53cyc9d.png" alt="Alt Text" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;
Después de ejecutar el script



&lt;p&gt;Ahora podremos cambiar entre proyectos con distintas configuraciones de manera cómoda, no deberemos preocuparnos si usar 2 espacios o 4, comillas simples o dobles… simplemente nos centraremos en la solución que estamos implementando.&lt;/p&gt;


&lt;h2&gt;
  
  
  Integración con VSCode
&lt;/h2&gt;

&lt;p&gt;Vamos a configurar VSCode para que ejecute ESLint y dé formato al código cuando guardemos un fichero, para ello:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Instalaremos la &lt;a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint" rel="noopener noreferrer"&gt;extensión ESLint&lt;/a&gt; en caso de no tenerla.&lt;/li&gt;
&lt;li&gt;Abriremos preferencias de VSCode y haremos click en el primer icono situado en la esquina superior derecha para editar el fichero settings.json y añadimos lo siguiente:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.codeActionsOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source.fixAll.eslint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fadkb5rj0yt2k20jrbv3o.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fadkb5rj0yt2k20jrbv3o.gif" alt="Alt Text" width="720" height="399"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Conflictos con la opción editor.formatOnSave
&lt;/h3&gt;

&lt;p&gt;En caso de tener configurado que VSCode formatee nuestro código al guardar un fichero (con la opción editor.formatOnSave), deberemos desactivarla para JavaScript y JSX, ya que de este proceso se encargará ESLint.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"[javascript]"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"[javascriptreact]"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.codeActionsOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source.fixAll.eslint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Pre-commit hook
&lt;/h2&gt;

&lt;p&gt;Si queremos asegurarnos de que el código que se sube al repositorio cumple con las reglas establecidas, podemos configurar un &lt;a href="https://git-scm.com/docs/githooks" rel="noopener noreferrer"&gt;hook de git&lt;/a&gt; para automatizar el proceso.&lt;/p&gt;

&lt;p&gt;Una de las ventajas es que es agnóstico al editor que utilicemos, además de ser muy útil si trabajamos en equipo.&lt;/p&gt;
&lt;h3&gt;
  
  
  Instalar dependencias
&lt;/h3&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;span class="nt"&gt;--save-dev&lt;/span&gt; husky lint-staged
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/typicode/husky" rel="noopener noreferrer"&gt;husky&lt;/a&gt;: es una herramienta que facilita la configuración de hooks de git.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/okonet/lint-staged" rel="noopener noreferrer"&gt;lint-staged&lt;/a&gt;: es una herramienta para ejecutar linters sobre los ficheros que se encuentren preparados para el commit.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Configurar Husky
&lt;/h3&gt;

&lt;p&gt;En la configuración de Husky añadiremos 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="c1"&gt;// .huskyrc.js&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="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;hooks&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="s1"&gt;pre-commit&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;lint-staged&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;Ahora cada vez que vayamos a hacer un commit antes se disparará el hook &lt;em&gt;pre-commit&lt;/em&gt; y este ejecutará &lt;em&gt;lint-staged&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Configurar Lint-staged
&lt;/h3&gt;

&lt;p&gt;En la configuración de Lint-staged añadimos 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="c1"&gt;// .lintstagedrc.js&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="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*.js&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="s1"&gt;eslint --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="s1"&gt;git add&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;Para todos los ficheros con extensión &lt;em&gt;.js&lt;/em&gt; ejecutará ESLint para corregir los problemas automáticamente y dará formato a los ficheros preparados, una vez modificados vuelve a prepararlos para el commit.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Recuerda que &lt;strong&gt;ESLint&lt;/strong&gt; ejecutará &lt;strong&gt;Prettier&lt;/strong&gt; tal y como vimos antes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Repositorio de ejemplo
&lt;/h2&gt;

&lt;p&gt;En el siguiente enlace he preparado un ejemplo con el mítico &lt;a href="https://github.com/facebook/create-react-app" rel="noopener noreferrer"&gt;create-react-app&lt;/a&gt; usando la configuración de ESLint que ofrece por defecto (la cual no incluye reglas de estilo) e integrando lo que hemos visto en el artículo.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/capua" rel="noopener noreferrer"&gt;
        capua
      &lt;/a&gt; / &lt;a href="https://github.com/capua/cra-prettier-eslint-example" rel="noopener noreferrer"&gt;
        cra-prettier-eslint-example
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Ejemplo para el artículo: Integrando Prettier con ESLint 
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;¡Nos vemos en la próxima publicación!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>prettier</category>
      <category>eslint</category>
    </item>
    <item>
      <title>Mapeando tus movimientos con React y Leaflet</title>
      <dc:creator>Ayoze Barrera 🇮🇨</dc:creator>
      <pubDate>Mon, 24 Feb 2020 12:12:45 +0000</pubDate>
      <link>https://forem.com/capua/mapeando-tus-movimientos-con-react-y-leaflet-3bce</link>
      <guid>https://forem.com/capua/mapeando-tus-movimientos-con-react-y-leaflet-3bce</guid>
      <description>&lt;p&gt;Hoy en día usamos mapas para todo… para buscar direcciones, consultar cuál es el mejor camino a tomar para llegar a un punto en concreto, para promocionar un local, o simplemente viajar desde casa (&lt;em&gt;asi es, he visto a youtubers que se pasan horas dando vueltas por paises gracias a los mapas… y hacen visitas!&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;Pues por ese motivo vamos a ver cómo podemos hacer un mapa con nuestros movimientos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aR2_ePY0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3qhcajjuwqmr6k6y6g1q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aR2_ePY0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3qhcajjuwqmr6k6y6g1q.png" alt="Moves" width="410" height="306"&gt;&lt;/a&gt;&lt;/p&gt;
Moves app



&lt;h1&gt;
  
  
  Moves
&lt;/h1&gt;

&lt;p&gt;Para registrar los movimientos, aunque hay otras, he usado la aplicación &lt;a href="https://moves-app.com/"&gt;moves&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Moves se ejecuta en segundo plano y nos permite importar tus movimientos en diferentes formatos, y uno de ellos es geojson.&lt;/p&gt;

&lt;p&gt;Para empezar nos vamos a la página web de moves. Allí nos permitirá importar lo registrado desde nuestro dispositivo.&lt;/p&gt;

&lt;h1&gt;
  
  
  Configuración
&lt;/h1&gt;

&lt;p&gt;Lo primero será instalar los paquetes de &lt;strong&gt;leaflet&lt;/strong&gt; y &lt;strong&gt;react-leaflet&lt;/strong&gt;:&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 &lt;span class="nt"&gt;-i&lt;/span&gt; S leaflet react-leaflet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://react-leaflet.js.org/"&gt;React-leaflet&lt;/a&gt; lo que hace es cargar componentes pero sin renderizar nada, simplemente usa los métodos de &lt;em&gt;leaflet&lt;/em&gt; en el &lt;em&gt;lifecycle&lt;/em&gt; del componente.&lt;/p&gt;

&lt;p&gt;Podríamos conseguir nuestro mapa sin react-leaflet pero lo he usado anteriormente y ayuda mucho.&lt;/p&gt;
&lt;h1&gt;
  
  
  El mapa
&lt;/h1&gt;

&lt;p&gt;Ya estamos listos para empezar así que lo primero será importar los paquetes que vamos a necesitar.&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="p"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;TileLayer&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;react-leaflet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;L&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;leaflet&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;De momento solo he importado dos componentes de react-leaflet: Map y TileLayer. Esto es lo básico que necesitarás para mostrar un mapa.&lt;/p&gt;

&lt;p&gt;También he importado leaflet porque vamos a usar el método circleMarker para poder tratar los puntos de los geojsons de nuestros datos.&lt;/p&gt;
&lt;h2&gt;
  
  
  Map
&lt;/h2&gt;

&lt;p&gt;Capa principal del mapa que controla el zoom, bordes y el centro. Lo que vayamos a representar en el mapa, lo pasaremos como hijos.&lt;/p&gt;
&lt;h2&gt;
  
  
  TileLayer
&lt;/h2&gt;

&lt;p&gt;Componente que se encargará de mostrar los tiles correspondientes en base al zoom y al centro.&lt;/p&gt;

&lt;p&gt;Este componente necesita la propiedad url que será al montarse.&lt;/p&gt;

&lt;p&gt;Para este ejemplo, voy a usar un mapa en blanco y negro, pero puedes encontrar mas urls &lt;a href="https://leaflet-extras.github.io/leaflet-providers/preview/"&gt;aquí&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}{r}.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Ah! Antes de poder usar nuestro mapa, necesitaremos importar el css de leaflet, que puedes encontrar en su apartado de &lt;a href="https://leafletjs.com/download.html"&gt;descargas&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Configurados estos dos componentes, deberíamos de tener algo muy parecido a esto:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kxuj5fhI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oc1lg5bknvrnjualxo41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kxuj5fhI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oc1lg5bknvrnjualxo41.png" alt="Map" width="880" height="665"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tanto rollo para tener un mapa vacío?&lt;/p&gt;

&lt;p&gt;Calma… ahora viene lo bueno 😁&lt;/p&gt;

&lt;h1&gt;
  
  
  Nuestros movimientos
&lt;/h1&gt;

&lt;p&gt;Moves, aparte de ofrecerte muchos formatos, también te separa los datos en movimientos diarios, semanales, mensuales, anuales y por último, todos en un mismo fichero. Yo voy a utilizar mis lugares visitados separados por años. En concreto los de 2016, 2017 y 2018.&lt;/p&gt;

&lt;p&gt;Para ello voy a usar una capa de GeoJSON de leaflet, que como no, también lo tenemos como componente en react-leaflet:&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="p"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;TileLayer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;GeoJSON&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;react-leaflet&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;El siguiente paso sería importar los datos de nuestros movimientos:&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;places2016&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;./data/places_2016.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;places2017&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;./data/places_2017.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;places2018&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;./data/places_2018.js&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;Después, tenemos que usar el componente GeoJSON como un &lt;strong&gt;children&lt;/strong&gt; más en nuestro component Map:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Map&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;{styles.map}&lt;/span&gt; &lt;span class="na"&gt;center=&lt;/span&gt;&lt;span class="s"&gt;{props.center}&lt;/span&gt; &lt;span class="na"&gt;zoom=&lt;/span&gt;&lt;span class="s"&gt;{props.zoom}&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;TileLayer&lt;/span&gt; &lt;span class="na"&gt;url=&lt;/span&gt;&lt;span class="s"&gt;{props.url}&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;GeoJSON&lt;/span&gt;
    &lt;span class="na"&gt;data=&lt;/span&gt;&lt;span class="s"&gt;{places2016}&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Map&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Además de pasarle los datos a la capa GeoJSON, el componente necesita la propiedad style, que es una función que usará internamente para aplicar el style que queramos a cada elemento de nuestro geojson:&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;function&lt;/span&gt; &lt;span class="nx"&gt;getStyle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;feature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;layer&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="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;weight&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="na"&gt;opacity&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="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#000&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;strong&gt;Cuidado!&lt;/strong&gt; La función anterior solo te servirá para elementos que NO sean de tipo Point.&lt;/p&gt;

&lt;p&gt;Dentro de mis geojsons, solo tengo elementos de tipo Point, asi necesitaré utilizar una propiedad extra: &lt;strong&gt;pointToLayer&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;geojsonMarkerOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;radius&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="na"&gt;fillColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#EE4266&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;weight&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="na"&gt;opacity&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="na"&gt;fillOpacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.4&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;pointToLayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;feature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;latlng&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;L&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;circleMarker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;latlng&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;geojsonMarkerOptions&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;En mi caso, el componente GeoJSON se queda de la siguiente manera:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;GeoJSON&lt;/span&gt;
  &lt;span class="na"&gt;data=&lt;/span&gt;&lt;span class="s"&gt;{places2016}&lt;/span&gt;
  &lt;span class="na"&gt;pointToLayer=&lt;/span&gt;&lt;span class="s"&gt;{pointToLayer}&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Ya casi terminamos!&lt;/p&gt;

&lt;p&gt;Como voy a representar tres geojsons diferentes, y quiero representarlos con diferentes colores, tengo que crear tres funciones diferentes de pointToLayer&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Map&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;{styles.map}&lt;/span&gt; &lt;span class="na"&gt;center=&lt;/span&gt;&lt;span class="s"&gt;{props.center}&lt;/span&gt; &lt;span class="na"&gt;zoom=&lt;/span&gt;&lt;span class="s"&gt;{props.zoom}&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;TileLayer&lt;/span&gt; &lt;span class="na"&gt;url=&lt;/span&gt;&lt;span class="s"&gt;{props.url}&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;GeoJSON&lt;/span&gt;
    &lt;span class="na"&gt;data=&lt;/span&gt;&lt;span class="s"&gt;{places2016}&lt;/span&gt;
    &lt;span class="na"&gt;pointToLayer=&lt;/span&gt;&lt;span class="s"&gt;{pointToLayer2016}&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;GeoJSON&lt;/span&gt;
    &lt;span class="na"&gt;data=&lt;/span&gt;&lt;span class="s"&gt;{places2017}&lt;/span&gt;
    &lt;span class="na"&gt;pointToLayer=&lt;/span&gt;&lt;span class="s"&gt;{pointToLayer2017}&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;GeoJSON&lt;/span&gt;
    &lt;span class="na"&gt;data=&lt;/span&gt;&lt;span class="s"&gt;{places2018}&lt;/span&gt;
    &lt;span class="na"&gt;pointToLayer=&lt;/span&gt;&lt;span class="s"&gt;{pointToLayer2018}&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Map&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Este es el resultado final del componente:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Voilá&lt;/em&gt;, nuestro mapa estaría listo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kBjyGg_b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1ru87n8qkj0rsnf6si4l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kBjyGg_b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1ru87n8qkj0rsnf6si4l.png" alt="Finished map" width="880" height="665"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nos vemos en la próxima batalla!&lt;/p&gt;

&lt;p&gt;🖖🏼&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>mapping</category>
      <category>leaflet</category>
    </item>
    <item>
      <title>Cómo crear un paquete de Node</title>
      <dc:creator>Ayoze Barrera 🇮🇨</dc:creator>
      <pubDate>Fri, 14 Feb 2020 10:02:24 +0000</pubDate>
      <link>https://forem.com/capua/como-crear-un-paquete-de-node-3hp3</link>
      <guid>https://forem.com/capua/como-crear-un-paquete-de-node-3hp3</guid>
      <description>&lt;p&gt;Cuando vamos a crear un proyecto nuevo, nos pasamos una gran parte del tiempo copiando y pegando código de antiguos proyectos… ¿para que vamos a reinventar la rueda?&lt;/p&gt;

&lt;h1&gt;
  
  
  El nacimiento de nuestra librería personal
&lt;/h1&gt;

&lt;p&gt;Para empezar, creamos una carpeta con el nombre del paquete, yo lo llamaré &lt;em&gt;capua-package-sample&lt;/em&gt;, y dentro ejecutamos el siguiente comando de npm para generar nuestro package.json:&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 init &lt;span class="nt"&gt;--yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este comando te creará un package.json básico extrayendo información de la carpeta donde se ejecuta.&lt;/p&gt;

&lt;p&gt;Deberíamos de tener algo parecido a esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"capua-package-sample"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Error: no test specified&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; exit 1"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ayoze Barrera"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ISC"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Fichero principal
&lt;/h2&gt;

&lt;p&gt;Ahora que tenemos el package.json, necesitamos crear el fichero que se usará cuando se importe nuestro paquete. Este fichero se especifica en la propiedad main, y por defecto es &lt;strong&gt;index.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En este fichero, para nuestro ejemplo, exportaremos cualquier cosa, como por ejemplo una función sencilla:&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="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;myAwesomeFunction&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;b&lt;/span&gt;&lt;span class="dl"&gt;'&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&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&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&lt;/span&gt;&lt;span class="dl"&gt;'&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&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;Esta función debería de devolver &lt;strong&gt;«baNaNa»&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ahora solo faltaría subirlo a nuestro repositorio o &lt;em&gt;publicarlo&lt;/em&gt; en npm!&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalando nuestro paquete
&lt;/h2&gt;

&lt;p&gt;Si has publicado el paquete sabrás como instalarlo, pero si no lo has hecho, quizás no sepas… pues es muy fácil, solo tienes que ejecutar el siguiente comando:&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 &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;git-service&amp;gt;:&amp;lt;git-user&amp;gt;/&amp;lt;repo-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si no rellenamos el servicio, buscará en github por defecto, pero soporta muchos otros… para saber más mira la &lt;a href="https://docs.npmjs.com/cli/install"&gt;documentación&lt;/a&gt; de npm install.&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 &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-S&lt;/span&gt; github:capua/capua-package-sample
└── capua-package-sample@1.0.0  &lt;span class="o"&gt;(&lt;/span&gt;git://github.com/capua/capua-package-sample.git#e5903fa2a1e4ee1e751a53fb0aa420cba07e949a&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y ya solo tendríamos que importarlo:&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;myAwesomeFunction&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;capua-package-sample&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;myAwesomeFunction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; "baNaNa"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nos vemos en la próxima batalla!&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>npm</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Desplegando apps en Meteor con Heroku y mLab</title>
      <dc:creator>Mario Blas 🇮🇨</dc:creator>
      <pubDate>Wed, 12 Feb 2020 20:05:23 +0000</pubDate>
      <link>https://forem.com/capua/desplegando-apps-en-meteor-con-heroku-y-mlab-4ae8</link>
      <guid>https://forem.com/capua/desplegando-apps-en-meteor-con-heroku-y-mlab-4ae8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post fue publicado originalmente en noviembre de 2016.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A continuación veremos como desplegar nuestra aplicación Meteor en 6 sencillos pasos. Los servicios que usaremos para ello son:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Heroku&lt;/strong&gt;, una plataforma como servicio (PaaS) que permite crear, ejecutar y escalar aplicaciones web, su medio principal para el despliegue es git.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mLab&lt;/strong&gt;, una plataforma de base de datos como servicio (DBaaS) para alojar y gestionar bases de datos MongoDB, actualmente ofrece alojamiento en AWS, Azure y Google.&lt;/p&gt;




&lt;h2&gt;
  
  
  0. Requisitos para empezar
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Registrarnos en &lt;a href="https://mlab.com/" rel="noopener noreferrer"&gt;mLab&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Registrarnos en &lt;a href="https://www.heroku.com/" rel="noopener noreferrer"&gt;Heroku&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Instalar &lt;a href="https://devcenter.heroku.com/articles/heroku-cli" rel="noopener noreferrer"&gt;Heroku CLI&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Crear la Base de datos
&lt;/h2&gt;

&lt;p&gt;Creamos una base de datos Mongo con el proveedor y plan que más se adapte a nuestras necesidades.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;En el apartado Single-node el plan Sandbox es &lt;strong&gt;gratuito&lt;/strong&gt; y ofrece 0.5Gb aunque no se aconseja para producción.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Asignamos un nombre a la base de datos, pulsamos en &lt;em&gt;Create new MongoDB deployment&lt;/em&gt; y una vez creada entramos en ella.&lt;/p&gt;

&lt;p&gt;Para terminar hacemos click en la pestaña &lt;em&gt;Users&lt;/em&gt;, creamos un nuevo usuario y listo.&lt;/p&gt;

&lt;p&gt;En la parte superior podemos ver nuestra &lt;em&gt;MongoDB URI&lt;/em&gt;, que será la que usaremos más adelante y que tiene un aspecto parecido a lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mongodb://&amp;lt;dbuser&amp;gt;:&amp;lt;dbpassword&amp;gt;@ds&amp;lt;012345&amp;gt;.mlab.com:&amp;lt;12345&amp;gt;/&amp;lt;dbname&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Autenticarse con Heroku CLI
&lt;/h2&gt;

&lt;p&gt;Desde la terminal nos identificamos con nuestras credenciales usando el siguiente comando:&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;heroku login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Crear la app en Heroku
&lt;/h2&gt;

&lt;p&gt;Nos situamos en nuestro proyecto git y creamos la aplicación en Heroku indicando el nombre que deseamos.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Además podemos definir el nombre con el que vamos a referirnos a nuestro repositorio remoto y la región donde queremos alojar nuestra aplicación (por defecto son &lt;strong&gt;heroku&lt;/strong&gt; y &lt;strong&gt;us&lt;/strong&gt; respectivamente).&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&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; &amp;lt;my-git-project&amp;gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;heroku apps:create &amp;lt;app-name&amp;gt; &lt;span class="nt"&gt;--remote&lt;/span&gt; &amp;lt;remote-name&amp;gt; &lt;span class="nt"&gt;--region&lt;/span&gt; &amp;lt;us|eu&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Aplicar un buildpack
&lt;/h2&gt;

&lt;p&gt;El buildpack preparará nuestra aplicación Meteor para ser ejecutada por Heroku.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;En este ejemplo vamos a utilizar el genial &lt;a href="https://github.com/AdmitHub/meteor-buildpack-horse" rel="noopener noreferrer"&gt;meteor-buildpack-horse&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&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;heroku buildpacks:set https://github.com/AdmitHub/meteor-buildpack-horse.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Configurar las variables de nuestra aplicación
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Variable para la URL&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;heroku config:set &lt;span class="nv"&gt;ROOT_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://&amp;lt;app-name&amp;gt;.herokuapp.com"&lt;/span&gt;

&lt;span class="c"&gt;# Variable para enlazar a nuestra Base de datos (MongoDB URI)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;heroku config:set &lt;span class="nv"&gt;MONGO_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;mlab-uri&amp;gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Settings de Meteor (suponiendo que están en settings.json)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;heroku config:set &lt;span class="nv"&gt;METEOR_SETTINGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;settings.json&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Desplegar
&lt;/h2&gt;

&lt;p&gt;Una vez tenemos todo configurado lo último que tenemos que hacer es un &lt;em&gt;git push&lt;/em&gt; a la rama master de nuestro repositorio remoto en Heroku.&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;git push &amp;lt;remote-name&amp;gt; master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Bonus
&lt;/h2&gt;

&lt;p&gt;Para terminar os dejo algunas anotaciones que os pueden ser de utilidad…&lt;/p&gt;

&lt;h3&gt;
  
  
  *Trabajar en equipo
&lt;/h3&gt;

&lt;p&gt;Para que el resto del equipo de desarrollo pueda desplegar sus cambios tan solo tienen que añadir el repositorio remoto a su proyecto git usando:&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;heroku git:remote &lt;span class="nt"&gt;-a&lt;/span&gt; &amp;lt;app-name&amp;gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &amp;lt;remote-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  *Mostrar el log
&lt;/h3&gt;

&lt;p&gt;Si queremos ver el log de nuestra aplicación tan solo tenemos que ejecutar:&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;heroku logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  *Integrar add-ons
&lt;/h3&gt;

&lt;p&gt;Podemos agregar &lt;a href="https://elements.heroku.com/addons" rel="noopener noreferrer"&gt;herramientas y servicios&lt;/a&gt; desde la terminal con el siguiente comando:&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;heroku addons:create &amp;lt;proveedor:plan&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  *Desplegar una rama distinta de master
&lt;/h3&gt;

&lt;p&gt;Lo haremos de la misma manera que haríamos con git:&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;git push &amp;lt;remote-name&amp;gt; &amp;lt;local-branch&amp;gt;:master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  *Trabajar con varias instancias de Heroku
&lt;/h3&gt;

&lt;p&gt;Si tenemos varios repositorios remotos de Heroku en un mismo proyecto para ejecutar algunos comandos tendremos que especificar la aplicación, por ejemplo:&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="c"&gt;# Development&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;heroku config:add &lt;span class="nv"&gt;METEOR_SETTINGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;settings-development.json&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--app&lt;/span&gt; &amp;lt;dev-app-name&amp;gt;

&lt;span class="c"&gt;# Production&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;heroku config:add &lt;span class="nv"&gt;METEOR_SETTINGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;settings-production.json&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--app&lt;/span&gt; &amp;lt;prod-app-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>devops</category>
      <category>meteor</category>
      <category>heroku</category>
      <category>mongodb</category>
    </item>
    <item>
      <title>Mapeando con Javascript</title>
      <dc:creator>Ayoze Barrera 🇮🇨</dc:creator>
      <pubDate>Mon, 10 Feb 2020 16:56:11 +0000</pubDate>
      <link>https://forem.com/capua/mapeando-con-javascript-1k4g</link>
      <guid>https://forem.com/capua/mapeando-con-javascript-1k4g</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Este post fue publicado originalmente en julio del 2015&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hablaremos de Mapbox y aprenderemos a manejar y reproyectar nuestros datos geoespaciales con QGIS, para añadirlos a un mapa estilizado por nosotros.&lt;/p&gt;

&lt;p&gt;El mundo de la cartografía es enorme, y puedo decir que me queda mucho por descubrir. Este artículo es parte de la experiencia que he obtenido en un proyecto reciente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9yl2Y11_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cgovjdlmnjfmqfh0mnez.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9yl2Y11_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cgovjdlmnjfmqfh0mnez.png" alt="Alt Text" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Antes de &lt;em&gt;trastear&lt;/em&gt; con nuestros datos geoespaciales, primero necesitamos nuestro lienzo, el mapa.&lt;/p&gt;

&lt;p&gt;Mapbox es una plataforma para crear y usar mapas, y está basada en la librería de &lt;strong&gt;LeafletJS&lt;/strong&gt;. Tiene un buen abanico de herramientas, datos y servicios que se conectan muy bien entre sí, por ejemplo, podemos estilizar un mapa con &lt;em&gt;Mapbox Studio&lt;/em&gt;, una aplicación que usa &lt;em&gt;CartoCSS&lt;/em&gt; para darle vida a nuestro mapa junto con otras utilidades, para luego conectarlo con la librería &lt;em&gt;Mapbox.js&lt;/em&gt; para jugar con nuestros datos vía Javascript. &lt;/p&gt;

&lt;p&gt;Y eso amigos, en resumen, es lo que haremos hoy 🤗.&lt;/p&gt;

&lt;p&gt;El plan starter nos permite estilizar un mapa y guardar 100mb de datos en los servidores de Mapbox. Si subes los datos a los servidores de ellos, luego podríamos usarlos en Mapbox Studio para estilizarlos junto a nuestro mapa, pero en nuestro caso no lo haremos así, lo haremos con js usando geojsons a través de la librería Mapbox.js.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--478J8YbF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s75lwgxx04c2iss5rzod.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--478J8YbF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s75lwgxx04c2iss5rzod.png" alt="Alt Text" width="880" height="155"&gt;&lt;/a&gt;&lt;/p&gt;
Tarifas de Mapbox



&lt;h3&gt;
  
  
  Mapbox Studio
&lt;/h3&gt;

&lt;p&gt;Mapbox Studio está disponible para OS X, Windows y Linux. Incluso tenemos acceso a su código en &lt;a href="https://github.com/mapbox/mapbox-studio"&gt;github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hablemos de sus posibilidades.&lt;/p&gt;

&lt;h4&gt;
  
  
  Datos
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jJMF1Nxe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dmtsxoa33mds7ng65vrw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jJMF1Nxe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dmtsxoa33mds7ng65vrw.png" alt="Alt Text" width="880" height="559"&gt;&lt;/a&gt;&lt;/p&gt;
Gran Canaria con la vista previa a la izquierda y vista de datos a la derecha



&lt;p&gt;Nos permite añadir nuestros propios geodatos, además de todos los datos que nos ofrece por defecto, como calles, terreno, satélite… con la posibilidad de controlarlos y de inspeccionarlos a nuestra merced.&lt;/p&gt;

&lt;h4&gt;
  
  
  Estilo
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JxuDnDfB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z8trytjqnn307ea0zhx7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JxuDnDfB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z8trytjqnn307ea0zhx7.png" alt="Alt Text" width="880" height="622"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos darle colores y formas a nuestro mapa gracias al preprocesador de estilos CartoCSS desarrollado por Mapbox. También tenemos acceso a una coleccion de iconos llamados &lt;a href="https://www.mapbox.com/maki"&gt;Maki&lt;/a&gt; que están optimizados para tres tamaños diferentes y a un catálogo de tipografías con la posibilidad de añadir la nuestra propia.&lt;/p&gt;

&lt;p&gt;Las posibilidades de la aplicación son mayores, pero con esto nos bastará para cumplir con el objetivo del artículo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Empecemos
&lt;/h3&gt;

&lt;p&gt;Vamos a crear nuestro mapa.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e5gEyF29--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kps21lcryj54o01xvb2p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e5gEyF29--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kps21lcryj54o01xvb2p.png" alt="Alt Text" width="880" height="559"&gt;&lt;/a&gt;&lt;/p&gt;
Nuevo proyecto en Mapbox Studio.



&lt;p&gt;Cuando vamos a crear un nuevo proyecto, tenemos la posibilidad de elegir un mapa o de añadir datos propios para luego usarlos en algún mapa. En nuestro caso, como nuestros datos irán de la mano con js, vamos a experimentar un poco con CartoCSS. Elegiré el de &lt;em&gt;Run, Bike and Hike&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Lo primero que vemos al elegir el mapa es que además de éste, tenemos la hoja de estilos a nuestra derecha separadas en varios ficheros. En estos ficheros tenemos todo el estilo que forma Run, Bike and Hike y será el que modifiquemos para conseguir nuestra “obra”.&lt;/p&gt;

&lt;p&gt;Empezaré por cambiarle el color al mar. Para cambiar el aspecto de un elemento del mapa, debemos saber su identificador. Simplemente tenemos que ponernos en la vista de datos haciendo click en el botón que está a la derecha del zoom.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4QIgcBhT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5a4qdja6an1kfetwrdd6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4QIgcBhT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5a4qdja6an1kfetwrdd6.png" alt="Alt Text" width="52" height="54"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En esta vista, si hacemos click en algún punto del mapa, aparecerá un &lt;em&gt;tooltip&lt;/em&gt; con la información de todos los datos de ese lugar. También podemos irnos a la sección Layers (Capas) del menú lateral izquierdo, el cual nos desplegará una ventana con la lista de todos los elementos que tenemos actualmente en nuestro mapa. Si os fijáis en la parte superior de esta ventana, veremos que los datos están bloqueados. Eso se debe a que se necesita un orden específico de capas para que el mapa funcione bien y en el caso de que quisiéramos añadir datos nuestros no podríamos, a menos que editemos el fichero &lt;strong&gt;project.yml&lt;/strong&gt; y borremos el listado de capas. En nuestro caso no necesitamos desbloquearlo.&lt;/p&gt;

&lt;p&gt;Una vez que sepamos el identificador del agua tenemos que identificarlo en nuestro proyecto. Lo encontraremos en el fichero &lt;strong&gt;bg&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="nn"&gt;#water&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;polygon-fill&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;water&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//relleno del polígono&lt;/span&gt;
  &lt;span class="na"&gt;polygon-gamma&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="mi"&gt;.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//gamma, para reducir huecos entre polígonos&lt;/span&gt;
  &lt;span class="nd"&gt;::shadow&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//symbolizer&lt;/span&gt;
    &lt;span class="na"&gt;polygon-fill&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;water&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//otro relleno&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="mi"&gt;.9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//opacidad&lt;/span&gt;
    &lt;span class="na"&gt;comp-op&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//operación de composición. efecto screen&lt;/span&gt;
    &lt;span class="na"&gt;image-filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;agg-stack-blur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//sombra del agua(costas)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;zoom&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;12&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//estilo para zoom superior a 12&lt;/span&gt;
    &lt;span class="na"&gt;polygon-gamma&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="mi"&gt;.75&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;p&gt;Las posibilidades son muy amplias: cambiar bordes, sombras, añadir patrones, aplicar efectos entre los elementos, pero no me complicaré mucho (ya me luciré mas tarde jaja) así que simplemente cambiaré algunos colores y la tipografía. Tal vez en algún artículo escriba sólo de CartoCSS y sus posibilidades, pero de momento podéis consultar la &lt;a href="https://github.com/mapbox/carto/blob/master/docs/latest.md"&gt;documentación&lt;/a&gt; para aprender todo lo que ofrece CartoCSS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U-t6vrdc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rqfryieg065fxi0bx77z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U-t6vrdc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rqfryieg065fxi0bx77z.png" alt="Alt Text" width="880" height="280"&gt;&lt;/a&gt;&lt;/p&gt;
Mapa antes y después del cambio



&lt;p&gt;Una vez tengamos nuestro mapa, tenemos que subirlo al servidor de Mapbox para generar un ID el cual usaremos más tarde porque de momento, tenemos que hablar un poco de los datos geoespaciales.&lt;/p&gt;
&lt;h3&gt;
  
  
  Datos geoespaciales
&lt;/h3&gt;

&lt;p&gt;Los datos geoespaciales o datos espaciales sirven para representar &lt;em&gt;features&lt;/em&gt; (&lt;strong&gt;puntos&lt;/strong&gt;, &lt;strong&gt;líneas&lt;/strong&gt; o &lt;strong&gt;áreas&lt;/strong&gt;) en una superficie. Estos datos pueden tener una tabla de datos con información.&lt;/p&gt;

&lt;p&gt;Para poder tratarlos, usaremos un GIS (&lt;em&gt;Geographic information system&lt;/em&gt;) donde podremos hacer una infinidad de cosas relacionadas con la geografía, como administrar los datos de cada punto, representar los datos o cambiarles la proyección, por nombrar algunas.&lt;/p&gt;

&lt;p&gt;El GIS que usaremos se llama &lt;a href="http://www.qgis.org/es/site/"&gt;QGIS&lt;/a&gt;, de código abierto, el cual aparte de tener las herramientas típicas de un sistema geográfico, tiene una buena comunidad de plugins muy interesantes. Ya le dedicaremos un artículo en el futuro.&lt;/p&gt;

&lt;p&gt;Hagamos lo que hagamos con nuestros datos, lo que nos interesa es, recordad, un fichero geojson.&lt;/p&gt;

&lt;p&gt;En el caso de que no tengamos a mano ningún fichero, podéis generar uno entrando en geojson.io, un editor a tiempo real, con la posibilidad de agregar features fácilmente y con muchas opciones para la exportación. También lo uso para visualizar ficheros y saber si están bien proyectados.&lt;/p&gt;

&lt;p&gt;En la siguiente parte cargaremos nuestros datos en un mapa con la librería de javascript &lt;strong&gt;mapbox.js&lt;/strong&gt; o &lt;strong&gt;leaftlet.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Github también tiene un buen API de mapas. Subid algún fichero a Gist y lo podréis comprobar. Éste es el mío&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Lo vamos a dejar por aquí!&lt;/p&gt;

&lt;p&gt;En la siguiente parte cargaremos nuestros datos en un mapa con la librería de javascript de mapbox o leaftlet.&lt;/p&gt;

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

</description>
      <category>javascript</category>
      <category>mapping</category>
      <category>cartograph</category>
    </item>
    <item>
      <title>Intro a Sublime Text</title>
      <dc:creator>Mario Blas 🇮🇨</dc:creator>
      <pubDate>Wed, 05 Feb 2020 20:44:24 +0000</pubDate>
      <link>https://forem.com/capua/intro-a-sublime-text-15ng</link>
      <guid>https://forem.com/capua/intro-a-sublime-text-15ng</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post fue publicado originalmente en abril de 2015.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Como buenos gladiadores además de estar bien preparados es importante familiarizarnos con nuestras armas. Cuanto más cómodos y adaptados estemos en nuestro entorno de batalla mayor será nuestro rendimiento. Una de las herramientas más importantes para un programador es su editor.&lt;/p&gt;

&lt;p&gt;Personalmente somos de los que prefieren editor de texto en vez de IDE por su simplicidad y ligereza, para nuestros menesteres no nos hace falta más.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.sublimetext.com/" rel="noopener noreferrer"&gt;Sublime Text&lt;/a&gt; en su versión 3, a pesar de estar en beta es bastante estable y funciona realmente bien. Al abrirlo por primera vez sientes que viene casi “pelado” y es una de sus ventajas, ya que se puede personalizar prácticamente todo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3dmcq5d3a012y7u6l2mb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3dmcq5d3a012y7u6l2mb.png" alt="Alt Text" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;
Sublime Text recién abierto.



&lt;p&gt;Algunos de sus puntos fuertes son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ligereza.&lt;/li&gt;
&lt;li&gt;Capacidad de personalización.&lt;/li&gt;
&lt;li&gt;Selecciones y cursores múltiples.&lt;/li&gt;
&lt;li&gt;Paleta de comandos.&lt;/li&gt;
&lt;li&gt;Movernos entre ficheros, buscar en los mismos, ir a una función o linea determinada…&lt;/li&gt;
&lt;li&gt;Cambiar de proyecto instantáneamente, recordando el estado del área de trabajo.&lt;/li&gt;
&lt;li&gt;Acceso a una infinidad de paquetes creados por la comunidad.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ¡A las armas!
&lt;/h2&gt;

&lt;p&gt;A continuación os voy a mostrar algunas de mis preferencias.&lt;br&gt;
Una de las primeras cosas que debemos hacer después de instalar Sublime es instalar &lt;a href="https://packagecontrol.io/" rel="noopener noreferrer"&gt;Package Control&lt;/a&gt; siguiendo los &lt;a href="https://packagecontrol.io/installation" rel="noopener noreferrer"&gt;pasos&lt;/a&gt; que indican en su web.&lt;br&gt;
Para instalar un paquete tenemos que abrir la paleta de comandos &lt;code&gt;(⌘+⇧+P)&lt;/code&gt; o &lt;code&gt;(⌃+⇧+P)&lt;/code&gt;, escribir &lt;em&gt;install package&lt;/em&gt; y buscar por el nombre del paquete que deseamos.&lt;br&gt;
En la web de Package Control podemos ver los paquetes de moda, nuevos y populares, además de mucha información extra.&lt;/p&gt;
&lt;h2&gt;
  
  
  Packages
&lt;/h2&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://packagecontrol.io/packages/Emmet" rel="noopener noreferrer"&gt;Emmet&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Para mejorar el workflow cuando trabajamos con HTML y CSS.&lt;/p&gt;

&lt;p&gt;Echad un vistazo al ejemplo de su &lt;a href="https://emmet.io/" rel="noopener noreferrer"&gt;web&lt;/a&gt; y dedicadle un rato a ver su &lt;a href="https://docs.emmet.io/cheat-sheet/" rel="noopener noreferrer"&gt;cheat sheet&lt;/a&gt;, no tiene desperdicio.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://packagecontrol.io/packages/SublimeLinter" rel="noopener noreferrer"&gt;Sublime Linter&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;El uso de un linter se hace esencial para escribir código mejor, más limpio y con menos bugs, empleando buenas prácticas de programación.&lt;/p&gt;

&lt;p&gt;Los linters no están incluidos en el paquete así que además tendremos que instalar los que deseemos. En concreto los que más suelo usar son &lt;a href="https://packagecontrol.io/packages/SublimeLinter-jshint" rel="noopener noreferrer"&gt;JSHint&lt;/a&gt;, &lt;a href="https://packagecontrol.io/packages/SublimeLinter-csslint" rel="noopener noreferrer"&gt;CSSLint&lt;/a&gt; y &lt;a href="https://packagecontrol.io/packages/SublimeLinter-contrib-scss-lint" rel="noopener noreferrer"&gt;SCSSLint&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para obtener información acerca de un error en concreto tan solo hemos de situar el cursor en la linea del error y podremos ver una ver una breve descripción en la barra de estado &lt;em&gt;(situada en la parte inferior de la ventana)&lt;/em&gt;, zona donde también podemos ver el número total de errores en cualquier momento.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdgz3sylxs81jn4m3ich7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdgz3sylxs81jn4m3ich7.png" alt="Alt Text" width="536" height="338"&gt;&lt;/a&gt;&lt;/p&gt;
Sublime​Linter-csslint


&lt;h3&gt;
  
  
  &lt;a href="https://packagecontrol.io/packages/SideBarEnhancements" rel="noopener noreferrer"&gt;Side​Bar​Enhancements&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Ofrece una mejora a las operaciones que tiene por defecto el sidebar de Sublime. Por ejemplo: abrir con, copiar, cortar, mover, copiar rutas…&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://packagecontrol.io/packages/DocBlockr" rel="noopener noreferrer"&gt;DocBlockr&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Ayuda a comentar bien nuestro código completando todo lo posible a partir del elemento que comentemos. Soporta lenguajes como JavaScript, TypeScript y Objective C entre otros.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqfog2r1kahsk4hj3gaqz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqfog2r1kahsk4hj3gaqz.png" alt="Alt Text" width="664" height="282"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://packagecontrol.io/packages/GitGutter" rel="noopener noreferrer"&gt;GitGutter&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Como su nombre indica nos muestra en el gutter el estado de cada linea, ya sea insertada, modificada o eliminada, comparando las diferencias con un commit/rama/tag específico.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://packagecontrol.io/packages/BracketHighlighter" rel="noopener noreferrer"&gt;BracketHighlighter&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Resalta la apertura y cierre de etiquetas, comillas, paréntesis, llaves, corchetes… Muy útil sobre todo cuando tenemos que tocar algo de &lt;em&gt;spaguetti code&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Podemos mostrar los indicadores en el gutter, en el código, o en ambos a la vez, así como aplicarles distintos estilos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4lcadvycthlswnqhd7zq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4lcadvycthlswnqhd7zq.png" alt="Alt Text" width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;
BracketHighlighter con la configuración por defecto.


&lt;h3&gt;
  
  
  &lt;a href="https://packagecontrol.io/packages/ProjectManager" rel="noopener noreferrer"&gt;Project Manager&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Muy cómodo para ordenar y manejar proyectos olvidándonos de donde están los ficheros. Es una mejora a la funcionalidad que trae Sublime por defecto.&lt;/p&gt;
&lt;h3&gt;
  
  
  Otros paquetes que uso:
&lt;/h3&gt;

&lt;p&gt;jQuery, Underscorejs snippets, Handlebars, SCSS, Meteor Snippets, Color Highlighter, ColorPicker, EditorConfig...&lt;/p&gt;

&lt;p&gt;¿Cuáles son vuestros preferidos?&lt;/p&gt;
&lt;h2&gt;
  
  
  Configuración
&lt;/h2&gt;

&lt;p&gt;La configuración de Sublime Text se basa en ficheros &lt;strong&gt;JSON&lt;/strong&gt;, podéis verla en &lt;em&gt;Preferences → Settings — Default&lt;/em&gt; y los atajos de teclado en &lt;em&gt;Preferences → Keybindings — Default&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Para añadir o sobrescribir los valores hemos de editar los ficheros que terminan por * &lt;em&gt;— User&lt;/em&gt;, veamos algunos ejemplos:&lt;/p&gt;

&lt;p&gt;Settings — User:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c1"&gt;// Resalta la linea actual&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"highlight_line"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c1"&gt;// Añade una linea en blanco al final del documento&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ensure_newline_at_eof_on_save"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c1"&gt;// Elimina los espacios al final de las lineas al guardar&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trim_trailing_white_space_on_save"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c1"&gt;// Modifica los separadores de palabras eliminando '-' para CSS&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"word_separators"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;()&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;':,.;&amp;lt;&amp;gt;~!@#$%^&amp;amp;*|+=[]{}`~?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c1"&gt;// Permite hacer scroll aunque se haya terminado el documento&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scroll_past_end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keybindings — User:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c1"&gt;// Indenta todo el documento&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; 
    &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"super+shift+r"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; 
    &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"reindent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"single_line"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; 
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c1"&gt;// Intercambia los keybindings de "pegar" y "pegar e indentar"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"super+v"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"paste_and_indent"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"super+shift+v"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"paste"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c1"&gt;// Resalta el fichero actual en el sidebar&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"alt+shift+r"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"reveal_in_side_bar"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;

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

&lt;/div&gt;






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

&lt;p&gt;Si sois usuarios de Dropbox u otro servicio similar podéis sincronizar todas vuestras preferencias y ahorraros mucho trabajo para estar cómodos cada vez que cambiéis de equipo o sistema operativo.&lt;/p&gt;

&lt;p&gt;Si vuestro Dropbox no está en la ubicación por defecto, debéis sustituir &lt;em&gt;~/Dropbox&lt;/em&gt; por vuestra ubicación.&lt;/p&gt;

&lt;p&gt;Las siguientes instrucciones son para &lt;em&gt;OS X&lt;/em&gt;, para otro sistema operativo las tenéis &lt;a href="https://packagecontrol.io/docs/syncing#dropbox" rel="noopener noreferrer"&gt;aquí&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;En vuestro primer equipo:&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;cd&lt;/span&gt; ~/Library/Application&lt;span class="se"&gt;\ &lt;/span&gt;Support/Sublime&lt;span class="se"&gt;\ &lt;/span&gt;Text&lt;span class="se"&gt;\ &lt;/span&gt;3/Packages/
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/Dropbox/Sublime
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mv &lt;/span&gt;User ~/Dropbox/Sublime/
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; ~/Dropbox/Sublime/User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En vuestros otros equipos:&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;cd&lt;/span&gt; ~/Library/Application&lt;span class="se"&gt;\ &lt;/span&gt;Support/Sublime&lt;span class="se"&gt;\ &lt;/span&gt;Text&lt;span class="se"&gt;\ &lt;/span&gt;3/Packages/
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; User
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; ~/Dropbox/Sublime/User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>tooling</category>
      <category>editor</category>
    </item>
    <item>
      <title>Que comiencen los juegos</title>
      <dc:creator>Ayoze Barrera 🇮🇨</dc:creator>
      <pubDate>Mon, 03 Feb 2020 16:39:11 +0000</pubDate>
      <link>https://forem.com/capua/que-comiencen-los-juegos-3ki4</link>
      <guid>https://forem.com/capua/que-comiencen-los-juegos-3ki4</guid>
      <description>&lt;h1&gt;
  
  
  Capua es un blog de desarrollo &amp;amp; experiencia de usuario.
&lt;/h1&gt;

&lt;p&gt;Tras una lucha “sangrienta” para conseguir el nombre de usuario &lt;strong&gt;capua&lt;/strong&gt; en &lt;em&gt;GitHub&lt;/em&gt;, ya no tenemos excusas para compartir nuestras locuras. Hace mucho tiempo que teníamos en mente este proyecto, pero al fin nos hemos puesto las pilas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capua
&lt;/h2&gt;

&lt;p&gt;Por contar un poco de donde procede el nombre del blog, nos gusta la temática romana, y Capua, antigua capital de Campania, tuvo el primer anfiteatro del mundo romano, donde los gladiadores dominaban la arena.&lt;/p&gt;

&lt;p&gt;Los desarrolladores, desde siempre, tienen que reciclarse &lt;strong&gt;diariamente&lt;/strong&gt; pues cada día salen nuevas tecnologías u otras se van actualizando, y para conseguir eso creemos que debemos ser como los gladiadores de la antigua Roma, capaces de enfrentarnos a cualquier bestia que se nos ponga por delante.&lt;/p&gt;

&lt;p&gt;Si has visto o si eres fan de &lt;em&gt;spartacus&lt;/em&gt;, es posible que te suene todo esto de Capua. También te será familiar nuestro grito de guerra:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Por Capua!”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nuestra intención es compartir artículos interesantes de las cosas que hemos ido aprendiendo o que nos han enseñado a lo largo de los diferentes proyectos que hemos realizado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quiénes somos…
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__232522"&gt;
    &lt;a href="/ayozebarrera" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q5tSvM_8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--xkRNJtWx--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/232522/0332107f-6c1b-488a-a299-a16835780404.jpg" alt="ayozebarrera image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/ayozebarrera"&gt;Ayoze Barrera 🇮🇨&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/ayozebarrera"&gt;Javascript freak 🤓 · Loving React ⚛· Fixie user 🚲 · Patriots fan 🏈!&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag__user ltag__user__id__160753"&gt;
    &lt;a href="/marioblas" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--th4Gp_0R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--R7xT-PYB--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/160753/6bb24347-dd58-4d23-9087-fc8c91512a3e.jpg" alt="marioblas image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/marioblas"&gt;Mario Blas 🇮🇨&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/marioblas"&gt;Web app developer • JavaScript • React&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  …y donde estamos
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JzzEE2KX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m8tnffpug103nm60glo8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JzzEE2KX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m8tnffpug103nm60glo8.png" alt="Alt Text" width="880" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Las Palmas, Canary Islands, Spain ☺&lt;/p&gt;

&lt;h2&gt;
  
  
  Contenido
&lt;/h2&gt;

&lt;p&gt;Nuestros artículos se centrarán principalmente en dos campos, desarrollo y diseño. No descartamos hablar alguna vez de tecnología… o algún juego, quien sabe!&lt;/p&gt;

&lt;h3&gt;
  
  
  Desarrollo
&lt;/h3&gt;

&lt;p&gt;Estamos constantemente desarrollando aplicaciones con frameworks, servicios y plataformas de última hora.&lt;/p&gt;

&lt;p&gt;Nuestro mundo gira principalmente en torno a Javascript y todas las tecnologías relacionadas con éste lenguaje.&lt;/p&gt;

&lt;p&gt;Actualmente, nuestra librería principal es React.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O4FeNHcT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xbbd88fhi6nubq9wa2v1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O4FeNHcT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xbbd88fhi6nubq9wa2v1.png" alt="Alt Text" width="880" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Diseño
&lt;/h3&gt;

&lt;p&gt;Le damos mucha importancia al diseño de la experiencia de usuario (UX). UX es la calidad de experiencia que tiene un usuario cuando usa un diseño concreto.&lt;br&gt;
Algunas tecnologías de las que usamos nos permiten tener mayor flexibilidad en nuestra aplicación para así conseguir una UX más elaborada…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PzlzqIT2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j1hgnp26cgoom0jxukqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PzlzqIT2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j1hgnp26cgoom0jxukqm.png" alt="Alt Text" width="880" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Probablemente hablemos de todo un poco, pero intentando no aburrir ☺.&lt;/p&gt;

&lt;h3&gt;
  
  
  Objetivos
&lt;/h3&gt;

&lt;p&gt;Somos algo novatos en el mundo de los blogs, pero intentaremos estar a la altura.&lt;/p&gt;

&lt;p&gt;Unos de los objetivos que pretendemos conseguir con Capua es crecer como redactores. No queremos tener un blog de textos copiados, y puestos para rellenar simplemente por tener muchos artículos y visitas.&lt;/p&gt;

&lt;p&gt;Le dedicaremos tiempo a cada artículo para intentar conseguir lo mejor de nosotros mismos. Y eso nos ayudará a conseguir otro de nuestros objetivos, la creación de nuestro propio imperio, nuestro lugar. Tenemos muchas ideas que llevamos guardando mucho tiempo.&lt;/p&gt;

&lt;p&gt;Ya veremos hacia donde crece esto y con quien.&lt;/p&gt;

&lt;p&gt;Dicho esto… Capua queda inaugurado!&lt;/p&gt;

&lt;p&gt;Hasta el próximo artículo ☺&lt;/p&gt;

</description>
      <category>capua</category>
      <category>design</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
