<?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: Esaú Morais</title>
    <description>The latest articles on Forem by Esaú Morais (@emmorais).</description>
    <link>https://forem.com/emmorais</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%2F473945%2Fb50a5b57-3de2-4aa7-9a78-ee9a4e043c9a.jpeg</url>
      <title>Forem: Esaú Morais</title>
      <link>https://forem.com/emmorais</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/emmorais"/>
    <language>en</language>
    <item>
      <title>UX/UI: How Important Is It for Developers?</title>
      <dc:creator>Esaú Morais</dc:creator>
      <pubDate>Fri, 30 Oct 2020 15:09:55 +0000</pubDate>
      <link>https://forem.com/dailydotdev/ux-ui-how-important-is-it-for-developers-j3k</link>
      <guid>https://forem.com/dailydotdev/ux-ui-how-important-is-it-for-developers-j3k</guid>
      <description>&lt;p&gt;Since last year, I’ve been working with many software development teams and building great products. At some point, I realized that if I wanted to stay relevant and influence the product’s development and the result (thinking about the client), I would have to learn and understand how UX/UI really works. So, in this article, I'll show you 4 reasons why you should, as a developer, learn UX/UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before we start&lt;/strong&gt;, you need first to understand the main differences between UX and UI design.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.playbookux.com%2Fwp-content%2Fuploads%2F2016%2F06%2Fux-or-ui-meme-198x300.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.playbookux.com%2Fwp-content%2Fuploads%2F2016%2F06%2Fux-or-ui-meme-198x300.jpg" alt="Differences between UX and UI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UX (user experience)&lt;/strong&gt; cares about the client-side and how much the project will be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Valuable&lt;/li&gt;
&lt;li&gt;Accessible&lt;/li&gt;
&lt;li&gt;Desirable&lt;/li&gt;
&lt;li&gt;Credible&lt;/li&gt;
&lt;li&gt;Convenient&lt;/li&gt;
&lt;li&gt;Satisfiable &lt;/li&gt;
&lt;li&gt;Useful&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On the other hand, &lt;strong&gt;UI (user interface)&lt;/strong&gt; will be focusing on the content and how its styles will affect.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Color scheme &lt;/li&gt;
&lt;li&gt;Content&lt;/li&gt;
&lt;li&gt;Buttons&lt;/li&gt;
&lt;li&gt;Forms &lt;/li&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Layout&lt;/li&gt;
&lt;li&gt;Typography&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Now you know the main differences, let's start! &lt;/p&gt;

&lt;h3&gt;
  
  
  Developer vs Client perspective
&lt;/h3&gt;

&lt;p&gt;Often many software or services are designed from the perspective of the developer. Without proper user research, developers often create software or features that are difficult to understand for the user or completely unnecessary. While developers study how to use if-else statements and logic gates, the general public and most users do not think logically. Humans are, by their very nature, often illogical and irrational creatures. And I always like to mention a quote by Heather Shockney that says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Stop looking at the project from a developer’s point of view and look at it from a user’s. As a developer, we know how the product should work — we code it to work that way. We usually don’t think whether a user will know how to use it. We assume they will. As you are completing your project, stop along the way, and get feedback from people who aren’t so involved with the development process. See if what you have done makes sense to them as if they were the user. If they are telling you that things don’t make sense nor feel intuitive, reconsider the way you are doing it.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Don’t frustrate the user
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fruwix.com%2Fpics%2Fmemes%2Fwhy-do-you-complicate-heh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fruwix.com%2Fpics%2Fmemes%2Fwhy-do-you-complicate-heh.jpg" alt="Why do you always complicate things?"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While in some software, services, or products causing some level of frustration or a strong emotional response is the desired outcome (think in a Rubik’s cube), most of the time, the user does not want to be  &lt;a href="https://www.interaction-design.org/literature/article/how-to-prevent-negative-emotions-in-the-user-experience-of-your-product" rel="noopener noreferrer"&gt;frustrated&lt;/a&gt;. Placing extra features or choosing the wrong colors is confusing and frustrating. The user comes away with a negative experience, and I can bet will not return to the product or service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem solved?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1200%2F1%2ATzFF6NMADHPbCQBxmHv3lQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1200%2F1%2ATzFF6NMADHPbCQBxmHv3lQ.png" alt="Something went wrong, it's probably your fault"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Does your software or product actually solve a problem? While as a developer, I understand the desire to create things, many developers create software or products that do not solve a problem. If it doesn’t solve a problem, then people probably won’t use it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What about feelings?
&lt;/h3&gt;

&lt;p&gt;How the user feels using your software is vitally important to success. In his book, Emotional Design  &lt;a href="https://jnd.org/" rel="noopener noreferrer"&gt;Don Norman&lt;/a&gt; discusses that all humans want the same thing at a visceral level. They want to feel safe, secure and have shelter. While Norman says these visceral emotions can be overwritten at a behavioral level, it is important not to overlook them. The user will often decide at an unconscious level through the visceral response if they like the software or product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Extra: How do I start?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.uxcel.com%2Fassets%2Fuxcel-open-graph-v2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.uxcel.com%2Fassets%2Fuxcel-open-graph-v2.jpg" alt="Uxcel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I started to search how I could start with it, I didn't know what I needed to learn about UX/UI. But a few weeks ago, I met a gamification platform called &lt;a href="http://uxcel.com/" rel="noopener noreferrer"&gt;Uxcel&lt;/a&gt;. Here you can learn with the courses, be notified about the week's lesson, and the most addictive feature: UEye Arcade.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hint: Uxcel is a PWA, which means you can install on any device and have a better experience.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you want to learn the basic and easy way, whether you are a designer or developer, I recommend you &lt;a href="https://uxcel.com?invite=XBZ4SAYS2MKP" rel="noopener noreferrer"&gt;join me&lt;/a&gt; and get better together.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ux</category>
      <category>ui</category>
      <category>developer</category>
      <category>design</category>
    </item>
    <item>
      <title>Stop Using console.log()!</title>
      <dc:creator>Esaú Morais</dc:creator>
      <pubDate>Fri, 09 Oct 2020 12:36:21 +0000</pubDate>
      <link>https://forem.com/dailydotdev/stop-using-console-log-59nh</link>
      <guid>https://forem.com/dailydotdev/stop-using-console-log-59nh</guid>
      <description>&lt;p&gt;Whenever I see someone effectively debug JavaScript in the browser, they use the browser’s DevTool. Setting breakpoints and hopping over them. That, as opposed to sprinkling console.log() statements all around your code.&lt;/p&gt;

&lt;p&gt;In this article, I will explain four reasons why you should stop using &lt;code&gt;console.log()&lt;/code&gt; and the best tips (that I called DebTips) to make it different, professional, and better.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--fBr1bCEy--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fmiro.medium.com%2Fmax%2F1284%2F0%252Aj2xSdGh-CoSe0mck.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--fBr1bCEy--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fmiro.medium.com%2Fmax%2F1284%2F0%252Aj2xSdGh-CoSe0mck.jpg" alt="If I told you your browser has everything you need to debug javascript"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  #1 Missing contextual information
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;console.log()&lt;/code&gt; forces you to select which information to log before the debugging consciously. And what you display in the first place is not sufficient or even completely irrelevant sometimes. You usually don’t yet have any idea of what’s going on. Every time you launch your app, you go a step further, realizing you are still not logging the right information at the right time, wasting hours changing your statements, again and again, to display new information and hide irrelevant ones.&lt;/p&gt;

&lt;h4&gt;
  
  
  Debugging Tip:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Display/watch any JS variable inline while debugging (function arguments, local variables, global variables, etc.).&lt;/li&gt;
&lt;li&gt;Explore the call stack to get the complete context in which your problem appears.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  #2 Too much information
&lt;/h2&gt;

&lt;p&gt;Algorithms are usually designed to automate many small tasks, loops, and recursion being fundamental building blocks for this. Along with &lt;code&gt;console.log()&lt;/code&gt;, it results in many lines displayed in front of you, i.e., a hard time coming to find the right information.&lt;/p&gt;

&lt;h4&gt;
  
  
  Debugging Tip:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Create conditional breakpoints to pause the execution at the right time so that you can analyze what’s going on.&lt;/li&gt;
&lt;li&gt;Watch custom JS expressions (variables, conditions, etc.) so that you don’t waste time to derive the same expression at each step of a loop.&lt;/li&gt;
&lt;li&gt;Create a debug login addition to your standard application log to activate debug messages on-demand for the “domain” of interest (e.g., file, service, class, etc.).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  #3 Untrustworthy information
&lt;/h2&gt;

&lt;p&gt;Most of the time calling &lt;code&gt;console.log()&lt;/code&gt; when the console is not yet active only results in the object being queued, not the output the console will contain. As a workaround, you will need to either clone the information or serialize snapshots of it. The rendering happens asynchronously (being throttled to rate-limit updates), as future interactions with the logged objects like expanding object properties in the browser console.&lt;/p&gt;

&lt;h4&gt;
  
  
  Debugging Tip:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Asynchronous stack trace (now the default in Chrome) allows you to inspect function calls beyond the current event loop, just like context-aware travel in time to the originators of your asynchronous callbacks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  #4 Altered code behavior
&lt;/h2&gt;

&lt;p&gt;The “standard” way to debug asynchronous code is to console log “1”, “2”, “3”, “4”, etc. i.e., all executed steps before the output you’re expecting until you get the right order. Consequently, you modify the code and, thus, the way it runs, leading to tracking unsteady behaviors really hard. After you finish debugging, you also have to remember to delete all the stray console logs in your code.&lt;/p&gt;

&lt;h4&gt;
  
  
  Debugging Tip:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Part of debugging is not just inspecting code. It’s a process, inspect, change, and then continue debugging. If I spend a bunch of time setting up &lt;a href="https://developers.google.com/web/tools/chrome-devtools/javascript/breakpoints" rel="noopener noreferrer"&gt;breakpoints&lt;/a&gt;, will they still be there after I’ve changed my code and refreshed? Answer: &lt;a href="https://developers.google.com/web/tools/chrome-devtools/javascript/reference#stepping" rel="noopener noreferrer"&gt;DevTools&lt;/a&gt; appears to do a pretty good job with that.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To finish this article, I can mention &lt;a href="https://github.com/winstonjs/winston" rel="noopener noreferrer"&gt;winston&lt;/a&gt; or &lt;a href="https://github.com/pimterry/loglevel" rel="noopener noreferrer"&gt;loglevel&lt;/a&gt; as fairly good customizable loggers, but I prefer to use them for production-grade logs (information, warnings, errors, etc.).&lt;/p&gt;

&lt;p&gt;If you believe you cannot use the debugger when running your tests, consider reading &lt;a href="https://peterlyons.com/js-debug" rel="noopener noreferrer"&gt;this article&lt;/a&gt; and other similar resources you might easily find on the internet.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; delivers the best programming news every new tab. We will rank hundreds of qualified sources for you so that you can hack the future.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://api.daily.dev/get?r=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fb996k4sm4efhietrzups.png" alt="Daily Poster"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>node</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why you should use Framer Motion</title>
      <dc:creator>Esaú Morais</dc:creator>
      <pubDate>Tue, 29 Sep 2020 15:25:48 +0000</pubDate>
      <link>https://forem.com/emmorais/why-you-should-use-framer-motion-1gp8</link>
      <guid>https://forem.com/emmorais/why-you-should-use-framer-motion-1gp8</guid>
      <description>&lt;h2&gt;
  
  
  What is Framer Motion?
&lt;/h2&gt;

&lt;p&gt;Think of Framer Motion as more of an improvement or reinvention of an existing animation library than a brand new one.&lt;/p&gt;

&lt;p&gt;Framer Motion is the successor to &lt;a href="https://popmotion.io/pose/"&gt;Pose&lt;/a&gt;, which was one of the most popular animation libraries used with React. Like Pose, it’s built upon promotion, which is a low-level, unopinionated animation library, but it provides abstractions to streamline the process.&lt;/p&gt;

&lt;p&gt;Framer Motion improves upon and simplifies the API in a way that couldn’t have been done without breaking changes and rewriting. One difference is that whereas Framer Motion only has support for React, Pose has support for React-Native and Vue. If you’re currently using Pose I would recommend updating to Framer Motion because Pose has been depreciated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use Framer Motion?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;If most animation libraries use spring-based animations, then, why should you use Framer Motion? For starters, it has a great API that is simple and doesn’t fill your components with extra code. In most cases, you can simply replace your HTML element with a motion element — for example, div with motion.div, which results in the same markup but has additional props for animation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Framer Motion is capable of powering animations in Framer X, a prototyping tool, which makes the hand-off extremely convenient. The majority of designers have suffered a situation when they spend ages perfecting every little detail of design only to have it lost in the development process. Framer Motion lets you use the same animation library both in prototyping and production. This way you don’t need to worry your animations are different from what you’ve intended them to be.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How do I start?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install the Framer Motion package.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;npm install framer-motion&lt;/code&gt; (if you are using &lt;code&gt;npm&lt;/code&gt;) &lt;br&gt;
  or &lt;br&gt;
&lt;code&gt;yarn add framer-motion&lt;/code&gt; (if you are using &lt;code&gt;yarn&lt;/code&gt;)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Import the &lt;code&gt;motion&lt;/code&gt; component in your file.
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { motion } from 'framer-motion';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Try to animate an element using the &lt;code&gt;animate&lt;/code&gt; attribute. 
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;⚠️ Remember: you are not using more &lt;code&gt;css&lt;/code&gt; syntax or attributes, they all are from Framer Motion&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export default function App() {
  return (
    &amp;lt;motion.h2
      animate={{ scale: 1.2 }}
    &amp;gt;
      Yayy, I am animated!!
    &amp;lt;/motion.h2&amp;gt;
  )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can notice two important things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;motion&lt;/code&gt; always comes before the HTML tag (just make sure on the &lt;a href="https://www.framer.com/api/motion/component"&gt;documentation&lt;/a&gt; if Framer Motion supports)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;animate&lt;/code&gt; attribute pass an object (like the &lt;code&gt;style={{}}&lt;/code&gt;)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;See &lt;a href="https://github.com/esau-morais/framer-motion"&gt;my repository&lt;/a&gt; about Framer Motion and learn how it works.&lt;/li&gt;
&lt;li&gt;See this &lt;a href="https://www.youtube.com/playlist?list=PL4cUxeGkcC9iHDnQfTHEVVceOEBsOf07i"&gt;playlist&lt;/a&gt; on YouTube about Framer Motion.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.logrocket.com/another-react-animation-library-heres-why-you-should-use-framer-motion/"&gt;LogRocket&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/better-programming/smooth-animations-with-react-and-framer-motion-c272b6f22f67"&gt;Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
