<?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>DEV Community: Ernesto Celis</title>
    <description>The latest articles on DEV Community by Ernesto Celis (@celisdelafuente).</description>
    <link>https://dev.to/celisdelafuente</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%2F8650%2F6a62d175-fe94-4cbd-8f02-378169b1ecc6.jpg</url>
      <title>DEV Community: Ernesto Celis</title>
      <link>https://dev.to/celisdelafuente</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/celisdelafuente"/>
    <language>en</language>
    <item>
      <title>Path to frontend master I</title>
      <dc:creator>Ernesto Celis</dc:creator>
      <pubDate>Fri, 11 Oct 2019 23:00:00 +0000</pubDate>
      <link>https://dev.to/celisdelafuente/path-to-frontend-master-i-4h8e</link>
      <guid>https://dev.to/celisdelafuente/path-to-frontend-master-i-4h8e</guid>
      <description>&lt;p&gt;This post is about my own spin-off from the first project in &lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/simonholdorf" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bpJh5Aic--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--afb7al7q--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/203467/61060b32-0fe3-443c-99e4-a6333e0e5d4e.jpeg" alt="simonholdorf image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/simonholdorf/9-projects-you-can-do-to-become-a-frontend-master-in-2020-n2h" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;9 Projects you can do to become a Frontend Master&lt;/h2&gt;
      &lt;h3&gt;Simon Holdorf ・ Oct  6 '19 ・ 7 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#react&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#vue&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#angular&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
 the movie search app using React with hooks only, avoiding class based components.

&lt;p&gt;The fact that the challenge involves using the new hooks feature in React interests me particularly, because I recently revisited React, after I learnt it one year and a half ago, then I left frontend completely all this time. The base for my spin off comes from Samuel Omole’s &lt;a href="https://www.freecodecamp.org/news/how-to-build-a-movie-search-app-using-react-hooks-24eb72ddfaf7/"&gt;tutorial&lt;/a&gt; at freecodecamp.org&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;Header&lt;/code&gt; and &lt;code&gt;Movie&lt;/code&gt; components are almost identical to the ones Samuel wrote, but I took a few liberties in the &lt;code&gt;Search&lt;/code&gt; and &lt;code&gt;App&lt;/code&gt; components. Also I prefer &lt;code&gt;.jsx&lt;/code&gt; extensions for components and &lt;code&gt;.js&lt;/code&gt; for plain old javascript code. However I encourage you to read his tutorial because he goes deeper in the logic behind the app and explains how the hooks work, it is not my goal to repeat him.&lt;/p&gt;

&lt;p&gt;What I do different?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OMDB API key is not exposed in the React app&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://www.openfaas.com/"&gt;OpenFaaS&lt;/a&gt; server-less function acts as proxy to OMDB&lt;/li&gt;
&lt;li&gt;keywords for narrowing the search and limiting number of results:

&lt;ul&gt;
&lt;li&gt;title:&lt;em&gt;“movie title”&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;type:&lt;em&gt;movie, series, episode&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;limit:&lt;em&gt;12&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://create-react-app.dev/"&gt;create-react-app&lt;/a&gt; is the tool I am more used to bootstrap React projects, honestly I haven’t tried many others besides Gatsby. I became a patron at &lt;a href="https://codesandbox.io"&gt;CodeSandbox&lt;/a&gt; so why not use it for this project? The &lt;code&gt;codesandbox&lt;/code&gt; cli made a breeze to export the project I had already bootstrapped from my laptop to the web editor. You can also start your project directly in CodeSandbox and then export it to a Github repository and or publish it to Netlify. Go and check them out!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-react-app avocado
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; codesandbox
&lt;span class="nb"&gt;cd &lt;/span&gt;avocado
codesandbox ./

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

&lt;/div&gt;



&lt;p&gt;The component &lt;code&gt;components/Search.jsx&lt;/code&gt; introduces &lt;strong&gt;Hooks&lt;/strong&gt; , the new React feature that allow to handle state in functional components. I really do not like the idea of classes in JavaScript and since I am not a long time React developer I very much welcome Hooks.&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;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;props&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;searchValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setSearchValue&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;//...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the &lt;code&gt;Search&lt;/code&gt; component the &lt;code&gt;useState&lt;/code&gt; hook takes the initial state as parameter and returns an array with the current state (similiar to &lt;code&gt;this.state&lt;/code&gt; but does not merge old and new states togheter) and a function to update the state &lt;code&gt;setSearchValue&lt;/code&gt; in this case, which is the same as &lt;code&gt;this.setState&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;App&lt;/code&gt; component features &lt;code&gt;useEffect&lt;/code&gt; which allows to perform &lt;em&gt;side effects&lt;/em&gt; in your components, like fetching data or changing the DOM after render, it is called in every stage of the life cycle of the component, in this case it only logs to the console. Other hook is &lt;code&gt;useReducer&lt;/code&gt; which works similar to redux reducers, it accepts state and action and returns the current state and a dispatch method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//...&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initialState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;movies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
  &lt;span class="na"&gt;errorMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reducer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SEARCH_MOVIES_REQUEST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;errorMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
      &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="c1"&gt;// ..&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// const buildRequestBody = function(v) { ...&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;App&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useReducer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialState&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;I am a side efect!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;searchValue&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SEARCH_MOVIES_REQUEST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;buildRequestBody&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;searchValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;MOVIE_API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;//...&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;There are a couple of unbreakable rules for using hooks in React, &lt;strong&gt;only call hooks at the top level of function components&lt;/strong&gt;. Do not call hooks inside loops, conditions or nested functions. &lt;strong&gt;Only call hooks from React function components&lt;/strong&gt;. Do not call hooks from regular JavaScript functions.&lt;/p&gt;

&lt;p&gt;Of course you can define your own custom hooks if what is shipped by default does not fit, read more about &lt;a href="https://reactjs.org/docs/hooks-intro.html"&gt;Hooks&lt;/a&gt; in the React docs.&lt;/p&gt;

&lt;p&gt;In conclusion , I will be using hooks over class based components in my current and next React projects, a good thing is that class and function components with hooks mix well, so no heavy refactoring of class components and slow adoption of hooks is a good approach for existing projects.&lt;/p&gt;

&lt;p&gt;You can try and explore the code for the working movie app. Be ware!Since this is a demo the server-less function behind is not setup to scale and any moderate load of requests may take it down temporarily.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/mdshc?module=/src/components/App.jsx"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>JavaScript notes I</title>
      <dc:creator>Ernesto Celis</dc:creator>
      <pubDate>Thu, 21 Mar 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/celisdelafuente/javascript-notes-i-ikh</link>
      <guid>https://dev.to/celisdelafuente/javascript-notes-i-ikh</guid>
      <description>&lt;p&gt;Let’s review some JavaScript features in a hurry!&lt;/p&gt;

&lt;h2&gt;
  
  
  Iterables
&lt;/h2&gt;

&lt;p&gt;Objects that can be used in &lt;code&gt;for..of&lt;/code&gt; are called iterable.&lt;/p&gt;

&lt;p&gt;Iterables must implement the method named &lt;code&gt;Symbol.iterator&lt;/code&gt;. The result of &lt;code&gt;obj[Symbol.iterator]&lt;/code&gt; is called an iterator. An iterator must have the method named &lt;code&gt;next()&lt;/code&gt; that returns an object &lt;code&gt;{done: Boolean, value:&lt;br&gt;
any}&lt;/code&gt;, the value is the next value. The &lt;code&gt;Symbol.iterator&lt;/code&gt; method is called automatically by &lt;code&gt;for..of&lt;/code&gt;, but we also can do it directly.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Array.from(obj[, mapFn, thisArg])&lt;/code&gt; makes a real Array of an iterable or array-like obj, and we can then use array methods on it. The optional arguments mapFn and thisArg allow us to apply a function to each item.&lt;/p&gt;
&lt;h2&gt;
  
  
  Destructuring
&lt;/h2&gt;

&lt;p&gt;Map an object or array to variables.&lt;/p&gt;

&lt;p&gt;Object syntax:&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;let&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;prop&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;varName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Array syntax:&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;let&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;item1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;item2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first item goes to &lt;code&gt;item1&lt;/code&gt;; the second goes into &lt;code&gt;item2&lt;/code&gt;, all the rest makes the array rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Map and Set
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Map&lt;/code&gt;, is a collection of keyed values, it allows objects to be keys and provides a &lt;code&gt;size&lt;/code&gt; property.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Set&lt;/code&gt;, is a collection of unique values, does not allow to reorder elements.&lt;/p&gt;

&lt;p&gt;The following allow garbage-collection: There ara also &lt;code&gt;WeakMap&lt;/code&gt; and &lt;code&gt;WeakSet&lt;/code&gt; which provide garbage collection, I need to research more about these. Maybe the next post.&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>Hi, I'm Ernesto Celis</title>
      <dc:creator>Ernesto Celis</dc:creator>
      <pubDate>Fri, 03 Mar 2017 23:31:58 +0000</pubDate>
      <link>https://dev.to/celisdelafuente/hi-im-ernesto-celis</link>
      <guid>https://dev.to/celisdelafuente/hi-im-ernesto-celis</guid>
      <description>&lt;p&gt;I have been coding for 30 years.&lt;/p&gt;

&lt;p&gt;You can find me on Twitter as &lt;a href="https://twitter.com/celisdelafuente" rel="noopener noreferrer"&gt;@celisdelafuente&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I live in Campeche, MÃ©xico.&lt;/p&gt;

&lt;p&gt;I work for my self&lt;/p&gt;

&lt;p&gt;I mostly program in these languages: python, javascript, shell scripting.&lt;/p&gt;

&lt;p&gt;I am currently learning more about ES6.&lt;/p&gt;

&lt;p&gt;Nice to meet you.&lt;/p&gt;

</description>
      <category>introduction</category>
    </item>
  </channel>
</rss>
