<?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: Alejandro Augusto Gomez Rodriguez</title>
    <description>The latest articles on Forem by Alejandro Augusto Gomez Rodriguez (@alexgomez88).</description>
    <link>https://forem.com/alexgomez88</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%2F328398%2Fb4d40d17-9e7b-4ba4-b156-bd4c69b8f659.JPG</url>
      <title>Forem: Alejandro Augusto Gomez Rodriguez</title>
      <link>https://forem.com/alexgomez88</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/alexgomez88"/>
    <language>en</language>
    <item>
      <title>REACT NATIVE, UNA OPCIÓN QUE SE CONVIERTE EN NECESIDAD.</title>
      <dc:creator>Alejandro Augusto Gomez Rodriguez</dc:creator>
      <pubDate>Mon, 26 Oct 2020 05:54:41 +0000</pubDate>
      <link>https://forem.com/alexgomez88/react-native-una-opcion-que-se-convierte-en-necesidad-22ef</link>
      <guid>https://forem.com/alexgomez88/react-native-una-opcion-que-se-convierte-en-necesidad-22ef</guid>
      <description>&lt;p&gt;Desarrollar aplicaciones móviles ahora un «must» de muchos programadores, existen muchas tecnologías hoy presentes que hacen esta tarea más llevadera, siendo la más destacada desde su nacimiento las PWA, sin embargo existe un pobre empuje por parte de las empresas comercializadoras de software por esta tecnología. Lo que nos obliga a seguir desarrollando nativo o usar Cordova o TWA para comercializar nuestras PWA. Es por ello que era necesario soluciones que nos permita tener o movilizarnos tanto en Web como en Nativo y multiplataforma, solución que la gran casa de Facebook nos trajo, React Native.&lt;/p&gt;

&lt;p&gt;Previo a la lectura de este post te invito a leer el artículo Rodrigo Pombo: Como crear tu propio React y/o la presentación de Sophie Alpert sobre lo que como crear un render de React. Ninguna de las dos es un desperdicio, los recomiendo altamente.&lt;/p&gt;

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

&lt;p&gt;Bien, React Native, es una especie de derivación de React JS que implementa su núcleo pero renderiza la vista en lenguaje nativo, en lugar de HTML. Entiendo el primer catch del día, la aplicación corre realmente en un núcleo JS la cual se comunica con nuestra interfaz nativa, por ende no es como Flutter donde el producto final es enteramente nativo. Sin embargo con este cambio React se acerca a un gran número de propósitos no disponibles previamente con las web app, y hablo de aspectos más allá del rendimiento. Dejando talvez las Apps puramente nativas exclusivamente para videojuegos.&lt;/p&gt;

&lt;p&gt;Lo primero que se tiene que hablar de React Native es el desarrollo de los build, quienes han tenido que hacer un build en Android Studio entenderan que esto es un tema bastante fuerte. Se requiere de un potente o al menos bien decente ordenador con capacidades buenas de virtualización para el desarrollo de aplicaciones nativas. Con React Native tienes diferentes canales de trabajo en el desarrollo de tu app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Por defecto, tienes el canal web, es decir puedes visualizar la armadura de tu web como si fuera una página web, ojo no es 100% compatible, pero mucho más ligero que usar el emulador de Android.&lt;/li&gt;
&lt;li&gt;La App de Expo te permite probar tu app como si estuviese instalada con la enorme ventaja que ni siquiera requieres conectarlo a la PC.&lt;/li&gt;
&lt;li&gt;Y por el mismo canal usar el tradicional simulador de Android desde la Expo App instalada en ella.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cuando tu proyecto está listo, con expo (y solo con expo) puedes producir tu build en la nube, esto es algo similar PhoneGap. Esto se realiza mediante comando por lo que puedes perfectamente manejarte con dos branchs y al hacer push a máster automáticamente generara un Apk utilizando GitHub Actions o su equivalente en otras plataformas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ten presente que no todo lo que brilla es oro.
&lt;/h2&gt;

&lt;p&gt;En la última app que he desarrollado en esta plataforma, he observado detalles que requieren consolidación entre las exportaciones web y nativa de tus proyectos que te recomiendo que tomes muy en cuenta, pero de nuestro lado implica saber trabajar en cada escenario:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evade los iconos SVG: Aunque de buenas a primeras nada te lo indica, no se puede implementar SVG directamente como imágenes en tus proyectos nativos (aunque si aparecen en el web), esto puede ser un tanto frustrante pero hay varias soluciones:

&lt;ul&gt;
&lt;li&gt;Para iconos monocromáticos, usa la versión png de tus iconos y cámbialos de color usando la propiedad «tintColor». Con esta solución toma en consideración que todo el icono cambiara de color por lo que procura que lo «blanco» sea realmente transparente (habla bien con tu diseñador gráfico).&lt;/li&gt;
&lt;li&gt;Usar la librería «react-native-svg» es lo óptimo para casos celulares aparte ofrece gran flexibilidad para trabajar con el icono en SVG. Puedes usar tanto el archivo como reescribir tu SVG manualmente, o tratarlo como objeto si fuese necesario. En lo personal si vas a recurrir a este caso te recomiendo ENORMEMENTE que trabajes con la interfaz de emulador y no la versión web.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;El tratamiento de imágenes entre la versión web y la versión apk son bien distintas, así que procura probar tu app desde el emulador antes de entrar a producción.&lt;/li&gt;
&lt;li&gt;En lo que respecta al debugging la versión web ofrece más «transparencia» para detectar errores, pero la versión nativa puede ser un infierno para interpretarlos.&lt;/li&gt;
&lt;li&gt;Si tu PC no tiene al menos 16 Gb ram y no tiene disco duro SSD, te recomiendo usar un emulado de Android LO MÁS BÁSICO posible, me fue bien con genérico cuya pantalla es pequeña además te ayudará a evaluar aspectos de UX.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Olvídate de los plugins complejos de PhoneGap/Cordova pero tampoco te confíes
&lt;/h2&gt;

&lt;p&gt;Uno de los problemas que he tenido con PhoneGap son sus plugins, recuerdo bien trabajar con fotos y algunas veces existía como limitaciones entre las capacidades nativas de la Cordova y la aplicación web, lo cual es gracioso porque estas no están presentes en la interfaz puramente web.&lt;/p&gt;

&lt;p&gt;En react-native puedes descargar estas compatibilidades fácilmente como librerías de node y responden bastante bien, expo por ejemplo incluye una cantidad considerable y bien actualizada de recursos en este ámbito que te recomiendo enormemente. Sin embargo, como el título dice no te confíes, pues entre una plataforma y otra la repuesta de estos recursos puede ser distinta y deberás evaluar la mejor respuesta para cada plataforma.&lt;/p&gt;

&lt;h2&gt;
  
  
  iOS será tu pesadilla
&lt;/h2&gt;

&lt;p&gt;Pues Apple fans, lo diré ahorita sin anestesia… Señores sus celulares vienen con errores de fábrica. Seguramente preguntarás ¿Ale, pero si iPhone es lo que abrió nuestras mentes al desarrollo? … blah…blah…blah… pero está claro que la empresa introdujo estrategias claras para que compremos Apple más por necesidad que por calidad y verás porque:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Si vas a desarrollar una App para iOs y NO tienes la licencia de desarrollador solo puedes exportar para simulador, es decir que necesitas Xcode y es decir que necesitas una Mac… y ojo no cualquier Mac, hablamos de gastarte 1300 $ en un equipo como mínimo.&lt;/li&gt;
&lt;li&gt;Aun si tuvieras la licencia probarías la app en un celular, lo cual son 400 $ si lo trabajas desde un iPhone SE 2020 pero si quieres debuggear, pues… ve ahorrando 1300 $ + 400 $.&lt;/li&gt;
&lt;li&gt;La licencia de desarrollador de iOs tiene un valor de: 100$ 99 $ y dura un año.&lt;/li&gt;
&lt;li&gt;Y si pensantes hacer todo este desde 0 este año, debes comprar un cargador de iPhone, entre unos 50 $ extras.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Salvo que tengas acceso a estos recursos por un buen sistema de crédito, no te lo recomiendo arriesgarte salvo que se trate de una empresa. Ya que adicional a los puntos anteriores, la revisión de la App puede demorar bastante lo cual implica que tu producto debe ser perfecto.&lt;/p&gt;

&lt;p&gt;¡Visita mi sitio web: &lt;a href="https://alexgomez.dev/librerias/react-native-una-opcion-que-se-convierte-en-necesidad/"&gt;https://alexgomez.dev/librerias/react-native-una-opcion-que-se-convierte-en-necesidad/&lt;/a&gt; y déjame tu opinión o compártela por esta vía!&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Publish my first App, the worst Nightmare I never had.</title>
      <dc:creator>Alejandro Augusto Gomez Rodriguez</dc:creator>
      <pubDate>Tue, 31 Mar 2020 05:52:19 +0000</pubDate>
      <link>https://forem.com/alexgomez88/publish-my-first-app-the-worst-nightmare-i-never-had-3abl</link>
      <guid>https://forem.com/alexgomez88/publish-my-first-app-the-worst-nightmare-i-never-had-3abl</guid>
      <description>&lt;p&gt;After a few days looking my mom watching like crazy the Covid-19 numbers, I decide it was time to make my first mobile app by my own. Normally I use a framework of the company where I work but this time I decide to configure by my self webpack, Cordova and all the tools that we normally use. For a fast Android App I made-it to be compiled with phone gap build.&lt;/p&gt;

&lt;p&gt;The code part was easy, I'm not so good designer but I use some basics skills to make it nice. The backend was a little hard but in two days I finally got my basic app. And then... the hell begin just like a Doom Game.&lt;/p&gt;

&lt;h2&gt;
  
  
  1) The Plugins first ring of Hell
&lt;/h2&gt;

&lt;p&gt;Phonegap//Cordova//Capacitor allow you to make an App with only HTML5, JS and CSS, and work great with mobile. But it has a big issue with the plugins, most of the originals plugins works great (geolocation, battery, etc...) but some community plugins are unmaintained and is hard to figure out how it will affect you. For me it was really hard to add Ads, i tested 3 different plugins and only one work:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ratson/cordova-plugin-admob-free"&gt;cordova-plugin-admob-free&lt;/a&gt;, but the config is not really described for phonegap, just add on your config.xml this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;plugin&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"cordova-plugin-admob-free"&lt;/span&gt; &lt;span class="na"&gt;source=&lt;/span&gt;&lt;span class="s"&gt;"npm"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;variable&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"ADMOB_APP_ID"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"[[PUT YOUT ADMOB ID HERE]]"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  2) Fetching is your second ring. Be ready with this chainsaw.
&lt;/h2&gt;

&lt;p&gt;Using API fetch, sound like an easy thing, but in Cordova you need to whitelist the address of fetching. Cordova do not give you all the things you need out of the box the first time you need make it run, so you need to add another configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;platform&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="c"&gt;&amp;lt;!-- icon and splash stuff --&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;edit-config&lt;/span&gt; &lt;span class="na"&gt;file=&lt;/span&gt;&lt;span class="s"&gt;"app/src/main/AndroidManifest.xml"&lt;/span&gt; 
&lt;span class="na"&gt;mode=&lt;/span&gt;&lt;span class="s"&gt;"merge"&lt;/span&gt; &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"/manifest/application"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;application&lt;/span&gt; &lt;span class="na"&gt;android:usesCleartextTraffic=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;/edit-config&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/platform&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- Some stuff --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;access&lt;/span&gt; &lt;span class="na"&gt;origin=&lt;/span&gt;&lt;span class="s"&gt;"*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;plugin&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"cordova-plugin-whitelist"&lt;/span&gt; &lt;span class="na"&gt;version=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;allow-intent&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://*/*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;allow-intent&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://*/*"&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;Yeap, you need to add a plugin (that could be out of the box) and allow the domain and subdomain to call outside the app. Also need to allow "usesCleartextTraffic" for ajax call.&lt;/p&gt;

&lt;h2&gt;
  
  
  3) The Key store Signing third ring of hell.
&lt;/h2&gt;

&lt;p&gt;Is maybe not so complicate but it needs that you make a KeyStore witch on linux it really easy but in windows you will need to install JDK and that's can be a little tricky on this platform. Pay really attention to the alias you add because is the same alias that you need to add on the phonegap build.&lt;/p&gt;

&lt;h2&gt;
  
  
  4) Icons and Splash screen... the ring that really smell like beacon.
&lt;/h2&gt;

&lt;p&gt;By Default phonegap add some default icons, but they will be at www/ folder. When you configure webpack with the "CleanWebpackPlugin" YOU WILL LOSE THEM. Don't worry, pick your any Design App, build a simple logo with 1024px per side and go to &lt;a href="https://pgicons.abiro.com/"&gt;https://pgicons.abiro.com/&lt;/a&gt;. It will pack everything ready to be used and also add the icons for the web store...&lt;/p&gt;

&lt;h2&gt;
  
  
  5) Console Play Market where you hear the CiberDeamon calling for you.
&lt;/h2&gt;

&lt;p&gt;Publish and App on the Play Market isn't hard but the problem is that is not a lineal thing. You may think that only need to accept all contract stuff, describe the app and add some pic, and actually it is like that but is not a linear pile of stuff that you need to answer, first you add the Play Market Resume (5th option of the lateral menu), the Content Form (6th), then go to where to publish (8th), then go back to family protection (7th) then upload the app (1er) (and please DO NOT ADD A BETA VERSION, YOU NEED TO ADD MORE FORMS)... Are you ready for the 6th ring?&lt;/p&gt;

&lt;h2&gt;
  
  
  6) Waiting the 6th Ring, Spider Mastermind
&lt;/h2&gt;

&lt;p&gt;After a hard day putting everything on your first app, you only spec to wait a few hours and take a coffee thinking how you finally did it... Then you discover that you need to wait more than 7 seven days. So at this point, be ready with a publishing plan, because play market is not a great place for emergency uploads.&lt;/p&gt;

&lt;h2&gt;
  
  
  7) The Icon of Sin. Your self.
&lt;/h2&gt;

&lt;p&gt;If you test again your app and find some problem... you are in a big problem. You can stop the process of publishing. You can however add a new version. In my case, the worst case, I made a big mistake with the app name. So I had to create a new app and wait again...&lt;/p&gt;

&lt;p&gt;I hope this experience help you with your first app!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>phonegap</category>
      <category>android</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Looking for CMS backend for your App? WordPress may not be ready yet.</title>
      <dc:creator>Alejandro Augusto Gomez Rodriguez</dc:creator>
      <pubDate>Thu, 05 Mar 2020 17:04:24 +0000</pubDate>
      <link>https://forem.com/alexgomez88/looking-for-cms-backend-for-your-app-wordpress-may-not-be-ready-yet-1n7a</link>
      <guid>https://forem.com/alexgomez88/looking-for-cms-backend-for-your-app-wordpress-may-not-be-ready-yet-1n7a</guid>
      <description>&lt;p&gt;A few days ago a beginning a personal project, an LGBT app. After an evaluating the work load, using a Headless CMS could save me a lot of time, with a high quality and security for those part that need attention as developer but not for a product. Those part I think are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Users Management&lt;/li&gt;
&lt;li&gt;Some Social Stuff&lt;/li&gt;
&lt;li&gt;A Back-office to check data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After reading about WordPress with the new REST API, I throw, "maybe is I use BuddyPress with WordPress and REST API, I could save days of works"...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/WUsOgqfcpOBRlJPrUM/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/WUsOgqfcpOBRlJPrUM/giphy.gif" alt="I'm a Genius"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well... that only for a few seconds.&lt;/p&gt;

&lt;p&gt;WordPress has a big problem with REST API, Authentication Sucks, is not out of the box, you need to do some configurations, there not difficult at all but still a few thing broken a lot. There is no Registration API so you need to added too. At the end is more work on a simple begin stage.&lt;/p&gt;

&lt;p&gt;But is not a WordPress problem, most of the Headless CMS I checked, are more focus on Publishing than offer some like BaaS replacement.&lt;/p&gt;

&lt;p&gt;Did you know any CMS as Baas? Comment below!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Tutorial: How to make a circular progress bar widget with React and SVG.</title>
      <dc:creator>Alejandro Augusto Gomez Rodriguez</dc:creator>
      <pubDate>Thu, 13 Feb 2020 13:33:32 +0000</pubDate>
      <link>https://forem.com/alexgomez88/tutorial-how-to-make-a-circular-progress-bar-widget-with-react-and-svg-2cga</link>
      <guid>https://forem.com/alexgomez88/tutorial-how-to-make-a-circular-progress-bar-widget-with-react-and-svg-2cga</guid>
      <description>&lt;p&gt;Today I decide to make something special. I was chilling on my bed looking some beautiful UI concept art on Instagram when I got interested in circular progress bars. So I decide to make a simple progress bar made with react and SVG.&lt;/p&gt;

&lt;p&gt;You may not know but SVG can be edited with React since the beginning but is not so much used for complex widgets. SVG can be an excellent tool to make powerful tools where quality and performance are needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some theory first or some calculus
&lt;/h2&gt;

&lt;p&gt;Let's make an arc that represents the percentage value of the progress, it means that we need to evaluate the radiant coordinates of each point interest to design the arc on each percentage value. So let us represent each value as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;radius1, radius2 //inner and outer radius of the arc
omegaStart //angulus of the beginning of the arc (0%)
omegaEnd //angulus of the ending of the arc (100%)
omegaValue //angulus of the value (X%)
centerX, centerY //coordinates of the centre of the widget
xStart1, yStart1, xStart2, yStart2 //coordinates of the beginning of the arc (0%)
xEnd1, yEnd1, xEnd2, yEnd2 //coordinates of the ending of the arc (100%)
xValue1, yValue1, xValue2, yValue2  //coordinates of the value (X%)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;In a blueprint we should see them like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G-3D_fkx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/GZ4LTDK.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G-3D_fkx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/GZ4LTDK.png" alt="Blueprint"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So each formula should be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;omegaValue = omegaStart + (omageEnd-OmegaStart)*X
Coordinate[X,Y] = radius[cos(omega), sin(omega)]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  The React Element (with hooks)
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ArcProgressBar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;omega&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;omegaRadStart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;omega&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;omegaRadEnd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;omega&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;omegaRadStart&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;omegaRadEnd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;radius&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;innerRadius&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;coonerRadius&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;innerRadius&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;omegaRadValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;omegaRadStart&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;omegaRadEnd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;omegaRadStart&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;xyPoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;)].&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;x1Start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y1Start&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;xyPoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;omegaRadStart&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;x2Start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y2Start&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;xyPoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;innerRadius&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;omegaRadStart&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;x1End&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y1End&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;xyPoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;omegaRadEnd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;x2End&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y2End&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;xyPoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;innerRadius&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;omegaRadEnd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;x1Value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y1Value&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;xyPoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;omegaRadValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;x2Value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y2Value&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;xyPoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;innerRadius&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;omegaRadValue&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;svg&lt;/span&gt; &lt;span class="na"&gt;viewport&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"0 0 100 100"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
           &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt; 
            &lt;span class="na"&gt;d&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`
             M &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;x1Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y1Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 
             A &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 0 1 1 &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;x1End&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y1End&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;  
             A &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;coonerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;coonerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 0 1 1 &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;x2End&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y2End&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 
             A &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;innerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;innerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 0 1 0 &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;x2Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y2Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 
             A &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;coonerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;coonerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 0 0 1 &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;x1Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y1Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
             Z`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"black"&lt;/span&gt;
           &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
           &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt; 
            &lt;span class="na"&gt;d&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`
             M &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;x1Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y1Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 
             A &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 0 0 1 &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;x1Value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y1Value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;  
             A &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;coonerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;coonerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 0 1 1 &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;x2Value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y2Value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 
             A &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;innerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;innerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 0 0 0 &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;x2Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y2Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 
             A &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;coonerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;coonerRadius&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 0 1 1 &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;x1Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y1Start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
             Z`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"blue"&lt;/span&gt;
           &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;svg&lt;/span&gt;&lt;span class="p"&gt;&amp;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;Check it:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/alexgomez88/embed/mdJevZK?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>react</category>
      <category>svg</category>
      <category>design</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why I'm moving AlOficial.com from Laravel to Nuxtjs and still been React Lover.</title>
      <dc:creator>Alejandro Augusto Gomez Rodriguez</dc:creator>
      <pubDate>Wed, 05 Feb 2020 03:54:14 +0000</pubDate>
      <link>https://forem.com/alexgomez88/why-i-m-moving-aloficial-com-from-laravel-to-nuxtjs-and-still-been-react-lover-e6c</link>
      <guid>https://forem.com/alexgomez88/why-i-m-moving-aloficial-com-from-laravel-to-nuxtjs-and-still-been-react-lover-e6c</guid>
      <description>&lt;p&gt;After two years of developing with React, Nextjs, Gatsby ... I still work with Laravel for some projects where ShareHosting is the optimal solution for small things. One of this project is AlOficial.com, a web for Venezuela to check the value of the dollar against the local currency, after a few days I decided to do a mayor upgraded, using node.js and also React Native app to monetize. &lt;/p&gt;

&lt;p&gt;This was my developer quest:&lt;/p&gt;

&lt;h2&gt;
  
  
  Why node.JS
&lt;/h2&gt;

&lt;p&gt;Let's be honest, JS is like sex, once you use it, you never want to use other things. It is so flexible that PHP becomes a little bit frustrating. Don't get me wrong, Laravel is a great tool, it to develop everything you want using all the resources that shared hosting can give you. But still, Javascript wins.&lt;/p&gt;

&lt;p&gt;That why I deploy my project in a shared hosting that allows node.Js apps. I began to my deployment with Laravel, and it worked well but the web has still some needed of magic javascript touch.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Try, Laravel + React
&lt;/h2&gt;

&lt;p&gt;React is my prefered tool to work, and now Laravel allows to make your front end using React, but there is always a catch. React on Laravel is not the same as you work with "create-react-app", you can, however, create your project on React then use Laravel API to communicate with your app and voila... everything things ok...&lt;/p&gt;

&lt;p&gt;But No, AlOficial requires something very important to be monetized, and that is SEO (search engine optimization) so we come back to the begging, I needed something whit SSR (server-side rendering).&lt;/p&gt;

&lt;h2&gt;
  
  
  NextJs and GatsbyJs
&lt;/h2&gt;

&lt;p&gt;I have read how powerfull was NextJs, and I was very interested to use in full server project. NextJS makes your code easier and cleaner. Then I saw Gatsby whit a wonderful collection of templates that I even use for my website. I was just ready to do my evil plan when... my hosting server had a small rule... Only work with NodeJS 8 and 9... and NextJS and GatsbyJs require 10. My evil plan was gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rise of Vue... or Nuxt...
&lt;/h2&gt;

&lt;p&gt;In my mind, I was only thinking about how to solve two problems: 1) I need a Native app to monetize AlOficial and 2) I need to remake your web... Then I think about other possibilities... I learned about Vue when I was Freelance and maybe I can solve with Nuxt (NextJs version of React). So then I began with AlOficial transformation, hoping to end it well.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>react</category>
      <category>vue</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Tutorial: Neomorphism with CSS.</title>
      <dc:creator>Alejandro Augusto Gomez Rodriguez</dc:creator>
      <pubDate>Sun, 02 Feb 2020 19:48:43 +0000</pubDate>
      <link>https://forem.com/alexgomez88/tutorial-neomorphism-with-css-2al2</link>
      <guid>https://forem.com/alexgomez88/tutorial-neomorphism-with-css-2al2</guid>
      <description>&lt;p&gt;Neomorphism is the new trend of 2020 applied to UI/UX. Instagram has full examples of it but there is not much information about how to do it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1 Understanding the Concept.
&lt;/h2&gt;

&lt;p&gt;Material and Flat Design are based on the concept of flat design (material design add the concept of elevation but still work in a 2d concept). Skeuomorphism, which was a trend in 2000, on the contrary, was based on the illusion of 3d surface. Here is were Neomorphism was born between the fusion of flat surface and 3d concept.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's all about light source&lt;/strong&gt;, flat design means that no shadow or light is present on the design; the only source of light comes, normally but not strictly, from brilliant and contrast colour. The colour wheel was the perfect tool for it. Material design uses the same concept but adds some old fashion way to use a focus light source to add focus on the content; the content is then elevated.&lt;/p&gt;

&lt;p&gt;Adding mass to the elevated elements of material is what Neomorphism do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AIAUr8bt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/ZMB5Wym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AIAUr8bt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/ZMB5Wym.png" alt="How Light works on the design "&gt;&lt;/a&gt;How Light work on the design &lt;/p&gt;

&lt;p&gt;Neomorphism works with any colour technics but works does it much better in a monochrome colour scheme. But there are a few rules to follow:&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Da Rules
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dwMaFYlH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/2wvQ3w7.png%3F1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dwMaFYlH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/2wvQ3w7.png%3F1" alt="Neomorphism is more than light technics also mean colour rules"&gt;&lt;/a&gt;Neomorphism is more than light technics also mean colour rules&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1. White and Black are not your friends anymore.
&lt;/h3&gt;

&lt;p&gt;With Flat and Material design White and Black were almost your best friends for background or text. in Neomorphism these are forbidden colour, there are no more lighten colour than white nor darken colour than black so is not easy to make it look as 3d platform with mass. A colour surface may help but is no the best solution neither.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wtZqSGUQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/sp9c4b6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wtZqSGUQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/sp9c4b6.jpg" alt="white background"&gt;&lt;/a&gt;White background look to make both square look flat, colour square shadow look more like a light source than shadow o light reflexion &lt;/p&gt;

&lt;h3&gt;
  
  
  2.2.  Meet a new tool, HSL colour model and the 15% light rule.
&lt;/h3&gt;

&lt;p&gt;Most of the time, front-end developers and UI designers we use RGB colour model to define elements colours. But with Neomorphism is maybe better to use the HSL colour model to define light and shadow colour, even to define the primary and secondary colour.&lt;/p&gt;

&lt;p&gt;HSL mean Hue, Saturation and Lightness, and the last parameter is the vector that needs to be controlled, that why we use the 15% rule. Light reflexion has a 15% more light than the original colour and the shadow 15% less light. It also helps you to find the whiteness colour admitted for your project background.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--muipi6-I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/enoXjJ2.png%3F1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--muipi6-I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/enoXjJ2.png%3F1" alt="Color wheel"&gt;&lt;/a&gt;&lt;br&gt;
Colour wheel (by Erin Sowards) with limits of light and darkness for background.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Let's say try a little example, for a task, the primary colour will be #00aaff. If you analyze the colour by HSL model, you will find a vector of HSL(200, 100%, 50%), it means that your light reflexion and shadow colours have to be HSL(200, 100%, 65%) and HSL(200, 100%, 35%) each one or in RGB #4dc3ff and #0077b3. According to this, your div.card should look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7bnit-u5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/saJ0OYQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7bnit-u5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/saJ0OYQ.png" alt="Square with different elevations"&gt;&lt;/a&gt;&lt;/p&gt;
Each square has a different elevation, so more blur is added, something similar is applied on Material



&lt;p&gt;To work with HSL model directly you can use SCSS or LESS preprocessor of style for the web. With SCSS darken and lighten may not work well so it's recommended to user HSL functions. For Native (React native, Vue native, or Flutter) inline style has HSL functions to work.&lt;/p&gt;
&lt;h3&gt;
  
  
  2.3. "I need my space" rule.
&lt;/h3&gt;

&lt;p&gt;Skeuomorphism was about widgets, tons of them, "glassie" elements that would make any minimalist designer bleeding of his eyes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/auDe0NNGt3PkA/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/auDe0NNGt3PkA/giphy.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But don't worry, Neomorphism is about minimalist with a touch a reality. It means that it surface some kind look of feeling textures. &lt;br&gt;
But it works given each item the correct amount spaces. Only add elevation for those items who need more attention.&lt;/p&gt;

&lt;p&gt;You can see some cases of study by looking at Instagrams posts:&lt;/p&gt;


&lt;div class="instagram-position"&gt;
  &lt;iframe id="instagram-liquid-tag" src="https://www.instagram.com/p/B6_CvNKjbaR/embed/captioned"&gt;
  &lt;/iframe&gt;
  
&lt;/div&gt;
Perfect example of colours and elevation; items with more elevation re only buttons and stories.




&lt;h3&gt;
  
  
  3. Let's code!
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select some colours, remember to use colours with Lightness between 15% and 85%. Recommended: use pastel colours.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; Background Colour: #262626 HSL(200, 0, 15)
 Text and Icon Colour: #d9d9d9 HSL(200, 0, 85)
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Base on this colour Light Reflex and Shadow colour must be:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; Light Colour: #4d4d4d HSL(200, 0, 30)
 Shadow Colour: #000000 HSL(200, 0, 0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add two "box-shadow" on the same div, use an x,y-offset of 4px for the shadow and -4px for light reflex. In both cases add a blur of 8px&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt; &lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="nc"&gt;.card&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#262626&lt;/span&gt;
      &lt;span class="n"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
           &lt;span class="m"&gt;#000000&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="m"&gt;#4d4d4d&lt;/span&gt; &lt;span class="m"&gt;-4px&lt;/span&gt; &lt;span class="m"&gt;-4px&lt;/span&gt; &lt;span class="m"&gt;8px&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;p&gt;And here a small example of the result:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/alexgomez88/embed/VwYoLGY?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BONUS:&lt;/strong&gt; Add some edge blur to the edges and add some small radius border to the div and you will get a softer definition of elevation.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/alexgomez88/embed/abzeyLw?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>css</category>
      <category>uiweekly</category>
      <category>design</category>
      <category>html</category>
    </item>
  </channel>
</rss>
