<?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: Ayoze Barrera 🇮🇨</title>
    <description>The latest articles on Forem by Ayoze Barrera 🇮🇨 (@ayozebarrera).</description>
    <link>https://forem.com/ayozebarrera</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F232522%2F0332107f-6c1b-488a-a299-a16835780404.jpg</url>
      <title>Forem: Ayoze Barrera 🇮🇨</title>
      <link>https://forem.com/ayozebarrera</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ayozebarrera"/>
    <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>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>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>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>
