<?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: Dinys Monvoisin</title>
    <description>The latest articles on DEV Community by Dinys Monvoisin (@dinmon).</description>
    <link>https://dev.to/dinmon</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%2F258282%2Fc7ee66fb-7fd1-4fef-a6e8-001da66c7ae3.png</url>
      <title>DEV Community: Dinys Monvoisin</title>
      <link>https://dev.to/dinmon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dinmon"/>
    <language>en</language>
    <item>
      <title>Flip animation</title>
      <dc:creator>Dinys Monvoisin</dc:creator>
      <pubDate>Thu, 01 Oct 2020 10:38:03 +0000</pubDate>
      <link>https://dev.to/dinmon/flip-animation-581m</link>
      <guid>https://dev.to/dinmon/flip-animation-581m</guid>
      <description>&lt;p&gt;Web development was once about making the website functional; yet, this is no longer the case. Nowadays, it is about the user experience the websites provides. Nonetheless, websites that we design contain some UX inconsistencies like “jump cuts”. Those inconsistencies create some cognitive overload to the users. In other words, the designs are not very intuitive.&lt;/p&gt;

&lt;p&gt;In this article, I introduce how you can create a smooth transition using Flip animation. Then, implement the Flip animation using react-flip-toolkit to create an aesthetically pleasing visual. Below is a sneak peek of the result.&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%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1601462101120%2FI1I1y5vFb.gif" 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%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1601462101120%2FI1I1y5vFb.gif" alt="ezgif.com-video-to-gif.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before jumping straightaway implementing a Flip animation, let us understand three basic things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What Flip animation is&lt;/li&gt;
&lt;li&gt;Why choose Flip over CSS animation&lt;/li&gt;
&lt;li&gt;Why opting for a Flip library like react-flip-toolkit&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Content
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Flip animation definition &lt;/li&gt;
&lt;li&gt; CSS animation over Flip &lt;/li&gt;
&lt;li&gt; Why using a Flip library &lt;/li&gt;
&lt;li&gt; Implement Flip animation using react-flip-toolkit &lt;/li&gt;
&lt;li&gt; Resources &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Flip animation definition
&lt;/h2&gt;

&lt;p&gt;Flip is an acronym that was first introduced by Paul Lewis, which means First, Last, Invert and Play. I would not go in-depth about the reason behind those names. The key takeaway is that those are the steps required to create a Flip animation. An animation where the transitioning component scales or tweens to the final component.&lt;/p&gt;

&lt;h2&gt;
  
  
  CSS animation over Flip
&lt;/h2&gt;

&lt;p&gt;Usually, to implement any animation, people would use plain old CSS. That can be an option, updating the top, left, right, bottom position and then setting a transition time. But, this way has a considerable performance impact when rendering the web page. It will not be a surprise to find some glitches here and there. Contrarily, using JavaScript to apply a scale transition is more efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why using a Flip animation library
&lt;/h2&gt;

&lt;p&gt;As with every library that you use, it offers the advantage of not worrying about the underlying implementation. But, to rather focus on your own unique implementation.   Flip animation is not hard to implement, but the worst part is that we will need to handle every edge case. Edge cases like browsers compatibility and listening to browser window size changes. For this reason, I chose react-flip-toolkit. A library that offers greater flexibility when creating transitioning animation.  &lt;a href="https://react-flip-toolkit-demos.surge.sh/" rel="noopener noreferrer"&gt;Here&lt;/a&gt; is a list of examples what you can achieve with react-flip-toolkit. Besides, it is also available for other JavaScript frameworks and JavaScript itself. But you will find it under different names.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implement Flip animation using react-flip-toolkit
&lt;/h2&gt;

&lt;p&gt;First set up a new React project and add the react-flip-toolkit to it.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx create-react-app flip &amp;amp;&amp;amp; cd flip &amp;amp;&amp;amp; npm install react-flip-toolkit&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;From there, open the React project in your favourite editor. Then head to the App.js file and remove any unnecessary lines. Add the &lt;code&gt;Flipper&lt;/code&gt; component that wraps the transitioning component &lt;code&gt;SelectedMode&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, { useState } from 'react'
import { Flipper } from 'react-flip-toolkit'

function App() {
    const [tweetMode, setTweetMode] = useState(false)

    return (
    &amp;lt;Flipper flipKey={tweetMode}&amp;gt;
        &amp;lt;MenuScreen /&amp;gt;
        {
            tweetMode ? (
                &amp;lt;SelectedMode id={`${modeName}-mode`} mode={modeName}/&amp;gt;
            ) : null
        }
    &amp;lt;/Flipper&amp;gt;
    )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For this example, I used a ternary operator to display &lt;code&gt;SelectedMode&lt;/code&gt; or not to avoid the use of CSS.&lt;/p&gt;

&lt;p&gt;The import bit in the code above is the &lt;code&gt;flipkey&lt;/code&gt; attribute from the &lt;code&gt;Flipper&lt;/code&gt; component. This is how react-flip-toolkit knows when to play the animation. The attribute can be of any type: boolean, string, number.&lt;/p&gt;

&lt;p&gt;Next, create a SelectedMode.js file, which is the card mode the user clicks to view the list of tweets. Wrap the content of the screen around the &lt;code&gt;Flipped&lt;/code&gt; component and add the &lt;code&gt;flipId&lt;/code&gt; attribute to it. The value of the &lt;code&gt;flipId&lt;/code&gt; attribute maps to the mode name for the two components that are changing. For example, the card with mode 'at-once' would have a &lt;code&gt;flipId&lt;/code&gt; of &lt;code&gt;mode-at-once&lt;/code&gt;. So will the &lt;code&gt;flipId&lt;/code&gt; of &lt;code&gt;SelectedMode&lt;/code&gt; component.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Flipped } from 'react-flip-toolkit'

function SelectedMode({ id, mode }) {
    return (
         &amp;lt;Flipped flipId={id}&amp;gt;
             /* Content of the screen displaying list of tweets*/
         &amp;lt;/Flipped&amp;gt;
    )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lastly, create the Card.js file and include the code below. You will notice that there is an &lt;code&gt;onClick&lt;/code&gt; function to change the tweet mode. In this case, we used the React Context API to create a hook, as we will need to access this value in App.js to trigger the animation. For the brevity of the article, try to implement &lt;code&gt;useTweetModeToggle&lt;/code&gt; by yourself. If you find any difficulties, feel free to have a look at my &lt;a href="https://github.com/DinMon/show-me-your-tweets" rel="noopener noreferrer"&gt;GitHub repository&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;function Card({ mode, title, titleHighlight, description, descriptionHighlight}) {
    const toggleTweetMode = useTweetModeToggle()
    return (
        &amp;lt;Flipped flipId={`${mode}-mode`}&amp;gt;
            &amp;lt;div onClick={toggleTweetMode(mode)}&amp;gt;
                 /* Contents of the card mode*/
             &amp;lt;div&amp;gt;
         &amp;lt;/Flipped&amp;gt;
    )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://github.com/aholachek/react-flip-toolkit" rel="noopener noreferrer"&gt;react-flip-toolkit GitHub repository&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://www.youtube.com/watch?v=s06Z_e8ac0Y" rel="noopener noreferrer"&gt;Talk about React and the FLIP Technique&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://aerotwist.com/blog/flip-your-animations/" rel="noopener noreferrer"&gt;Flip animation article by Paul Lewis&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://react-flip-toolkit-demos.surge.sh/" rel="noopener noreferrer"&gt;Examples of what is achievable using react-flip-toolkit&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The example is from  &lt;a href="https://dinmon.github.io/show-me-your-tweets/" rel="noopener noreferrer"&gt;show-me-your-tweets&lt;/a&gt;, a web application I am working on for some weeks. There will be further articles coming based on it if you do not want to miss out, follow me on  &lt;a href="https://twitter.com/din__mon" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;  or  &lt;a href="https://hashnode.com/@dinmon" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; .&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>animation</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Hashnode Technical Writing Bootcamp</title>
      <dc:creator>Dinys Monvoisin</dc:creator>
      <pubDate>Tue, 22 Sep 2020 09:34:59 +0000</pubDate>
      <link>https://dev.to/dinmon/hashnode-technical-writing-bootcamp-1gi2</link>
      <guid>https://dev.to/dinmon/hashnode-technical-writing-bootcamp-1gi2</guid>
      <description>&lt;p&gt;It's been three weeks since I joined Hashnode and I can say with no regrets that I did the right thing.&lt;/p&gt;

&lt;p&gt;I accumulated a long list of accomplishment in which I will name a few:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Written four blog posts&lt;/li&gt;
&lt;li&gt;Participated in the technical writing Bootcamp&lt;/li&gt;
&lt;li&gt;Met up with the charismatic Catalin Pit&lt;/li&gt;
&lt;li&gt;Engage with the Dev community. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this article, I'd like to share a summary of Catalin's talk at the Technical Writing Bootcamp. He spoke about target audience, article structure and paid articles. Let's jump right in!&lt;/p&gt;

&lt;h2&gt;
  
  
  Content
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Know your target audience&lt;/li&gt;
&lt;li&gt;Article structure&lt;/li&gt;
&lt;li&gt;Paid articles&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Know your target audience
&lt;/h2&gt;

&lt;p&gt;In this section, Catalin spoke about the importance of knowing your audience. And how in doing so, it can save you from losing it. For example, if you target junior developers as an audience, avoid complicated topics. Instead, choose the right words and appropriate language that best suits them.&lt;/p&gt;

&lt;p&gt;Thinking about it, writing a blog is like selling a product to someone to a specific niche. Customising your content to the image of your audience will guarantee you success.&lt;/p&gt;

&lt;h2&gt;
  
  
  Article structure
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;It's the little things that count, hundreds of 'em. — Cliff Shaw&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This quote sums up how simple tips about writing an article can have a significant impact on the reader.&lt;br&gt;
In his talk, Catalin went over key points to improve your articles. I have combined them into the below bullet points to keep it short:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add heading and introduce section to your post.&lt;/li&gt;
&lt;li&gt;Prefer short sentences over complex sentences.&lt;/li&gt;
&lt;li&gt;Favour sentence with an idea and be concise.&lt;/li&gt;
&lt;li&gt;Use active voice over passive voice.&lt;/li&gt;
&lt;li&gt;DO NOT include acronyms with no definition.&lt;/li&gt;
&lt;li&gt;Create an impact on the first paragraph&lt;/li&gt;
&lt;li&gt;Use the ordered list for instructions and unordered list for other things like ideas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In sum, what he was trying to explain is that format matters. A well-structured article with headings, spaces, paragraphs is more comfortable to read.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paid Articles
&lt;/h2&gt;

&lt;p&gt;Writing is good. Having an audience is good. But what if, you can make some money from it?&lt;/p&gt;

&lt;p&gt;Catalin gave two pathways to follow to make some side money. Getting in touch with FreeCodeCamp to introduce your blog post's idea.  Or, pitching to potential websites to promote your content and earn some money.&lt;/p&gt;

&lt;p&gt;Either way, both demand consistency and hard work to publish on those platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This talk was very informative, and it was the first of a kind that I attended. I hope that this article will help in promoting excellent writers in the future.&lt;/p&gt;

&lt;p&gt;If I may add one advice from all what Catalin said is to: read blog posts more often to pick up the TO-DOs to write articles.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>learning</category>
      <category>blogging</category>
    </item>
    <item>
      <title>Dumb useful tricks</title>
      <dc:creator>Dinys Monvoisin</dc:creator>
      <pubDate>Wed, 16 Sep 2020 23:02:39 +0000</pubDate>
      <link>https://dev.to/dinmon/dumb-useful-tricks-4i9l</link>
      <guid>https://dev.to/dinmon/dumb-useful-tricks-4i9l</guid>
      <description>&lt;p&gt;Dumb useful tricks&lt;br&gt;
I have written this article as a go-to for junior developers with tips and tricks. Meanwhile, while I finish the  &lt;a href="https://dinmon.github.io/show-me-your-tweets/"&gt;"show-me-your-tweet"&lt;/a&gt;  website for the content of my future blog post. If you want to know more about it or have regular updates, consider following me on  &lt;a href="https://twitter.com/din__mon"&gt;Twitter&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;Transitioning to an actual job can be overwhelming and difficult for a junior software developer. Far too often, companies have a vast codebase with ten or thousands lines of code, and quite often, it is hard to find what you are looking for. I have seen this first hand.&lt;/p&gt;

&lt;p&gt;Over time, I picked up ways to navigate the codebase. It was not that easy; I had to learn from my errors. In this article, I share the tips and tricks to help you avoid the burden I went through and help you to excel at your job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Know how to search&lt;/li&gt;
&lt;li&gt;An error message is there for you to read&lt;/li&gt;
&lt;li&gt;Debugging is your friend&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Know how to search
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zI48LHtl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1600295861519/4rDVUcaXk.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zI48LHtl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1600295861519/4rDVUcaXk.jpeg" alt="SearchImg.jpg"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.freepik.com/vectors/computer"&gt;Computer vector created by freepik - &lt;/a&gt;&lt;a href="http://www.freepik.com"&gt;www.freepik.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Searching is an integral part of software development. Searching for the appropriate information can save you a lot of time and trouble. But what do you search for in a codebase? How do you find what you are looking for?&lt;/p&gt;

&lt;p&gt;Considering that your codebase is huge, trying to read through its entirety can take you several months or years. Thus, this should not be the answer to your problem. What will be the ideal solution is some tool that you can use to find the piece of code that you are looking for. Possibly, a file searching tool. Many of them exist, I use  &lt;a href="http://astrogrep.sourceforge.net/"&gt;AstroGrep&lt;/a&gt;  at work. It is a GUI version of grep for Linux. What it helps you to do is: to search for a piece of text through a directory.&lt;/p&gt;

&lt;p&gt;What would you look for if you do not know what inside the code? The answer to this is simple. The application that you are developing for might include an interface with some words on it. Use those words to find a match to find the place in the code to apply your change.&lt;/p&gt;

&lt;p&gt;Simple, isn't it? Now let's say that you are a web developer working on some websites. You could simply copy the CSS selectors from the inspector tool. From there, using your favourite text editor use Search For All for the text you copied.&lt;/p&gt;

&lt;p&gt;All that is to say, just search for clues in the codebase to find what you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  An error message is there for you to read
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JxUKCtZP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1600295736567/ZE7xjyXmg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JxUKCtZP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1600295736567/ZE7xjyXmg.jpeg" alt="3047124.jpg"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.freepik.com/vectors/data"&gt;Data vector created by stories - &lt;/a&gt;&lt;a href="http://www.freepik.com"&gt;www.freepik.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes! You read the title right. An error message is there for you to read. Often without reading an error, people will straight away do a Google search for the error. They did not even spend the time to understand what is the cause of the error. Yet, reading the error message helps you to understand the issue. It also helps you in formulating text search if you need to. Adopting this habit will definitely help you in becoming a better software developer.&lt;/p&gt;

&lt;p&gt;An exception with a stack trace is one form of the error message you often receive. If you pay attention to it, you can pick up where the issue is happening and possibly the source of the problem. It's not always the case that the first line of the exception is the exact cause of the problem, therefore, if given a stack trace use it wisely.&lt;/p&gt;

&lt;p&gt;What I discuss is simple, but paying close attention to those small details is a time-saver. Eventually, you will become self-reliant and more productive at your job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging is your friend
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WTXyIiNu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1600296086448/l7O85bPlB.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WTXyIiNu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1600296086448/l7O85bPlB.jpeg" alt="3588964.jpg"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.freepik.com/vectors/web"&gt;Web vector created by stories - &lt;/a&gt;&lt;a href="http://www.freepik.com"&gt;www.freepik.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code does not always make sense. There are many reasons why: Knowledge gap, the complexity of the system, the experience you have or the wrong mental model.&lt;/p&gt;

&lt;p&gt;Instead of banging your head against the wall take a back step and construct a mental model of what the code does. Then, try a simple trick. Try debugging the application by stepping through the code and see how it works. This will help you to have a better sense of what the code is doing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I hope that you have learned some useful tips by reading this post. And made you ready for your next adventure in your new company.&lt;/p&gt;

&lt;p&gt;Whether you agree or not, those simple tips will help you to be a better developer in the future.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>codenewbie</category>
      <category>career</category>
    </item>
    <item>
      <title>Regex isn't that hard</title>
      <dc:creator>Dinys Monvoisin</dc:creator>
      <pubDate>Sat, 12 Sep 2020 06:32:51 +0000</pubDate>
      <link>https://dev.to/dinmon/regex-isn-t-that-hard-2kcf</link>
      <guid>https://dev.to/dinmon/regex-isn-t-that-hard-2kcf</guid>
      <description>&lt;p&gt;Regex is the thing that you only learn when you need it. Unless you are processing a considerable amount of data, you likely won’t use it. &lt;/p&gt;

&lt;p&gt;Does that imply that, as a software engineer, we should forget about it and worry about it when that time comes? Are we not supposed to take responsibility to learn it?&lt;/p&gt;

&lt;p&gt;Programmers think that Regex is hard. As with every skill, it requires practice to master. To help you with it, I wrote this article to cover the basics of Regex and show a simple application of how you can use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reasons to learn Regex&lt;/li&gt;
&lt;li&gt;Understand Regex&lt;/li&gt;
&lt;li&gt;Regex structure and special characters&lt;/li&gt;
&lt;li&gt;Example using Regex and JavaScript&lt;/li&gt;
&lt;li&gt;Resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reasons to learn Regex
&lt;/h2&gt;

&lt;p&gt;Stuck in limbo, googling about the Regex pattern to the problem we are trying to solve. Does this sound familiar? I bet at least one of you were in a comparable situation before. But, don't you think it would be easier to know the in and out of Regex? Indeed, this would have reduced the time searching for answers.&lt;/p&gt;

&lt;p&gt;Regex provides a more concise way of solving problems that need some form of parsing. An example is the split function. Turning your string into tokens before applying some sort of logic is lengthy to put in place. Turnouts that this implementation is limited compared to using Regex.&lt;/p&gt;

&lt;p&gt;Hopefully, the next part excites you as we are going to cover more of Regex.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand Regex
&lt;/h2&gt;

&lt;p&gt;Regex is also called regulation expression. It is a set of string characters that define an expression for the patterns of data you are looking for. It has been there for a long time, since the 1980s, and its primary use was for searching and parsing strings.&lt;/p&gt;

&lt;p&gt;An example of Regex for looking for email address having a ".com" domain can be: &lt;code&gt;/.+@.+\.com/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Don't worry if it does not make sense now. In the next part I will cover what the characters in the above expression mean.&lt;/p&gt;

&lt;p&gt;Regex structure and special characters&lt;br&gt;
The first thing to know is that there are two ways to define a Regex pattern:&lt;br&gt;
Using a regular string literal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var pattern = /abc/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Calling RegExp constructor&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var pattern = new RegExp('abc')
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;When to use which? Regular string literal is when you know the pattern in advance. Contrarily, RegExp constructor when you use dynamic data during runtime.&lt;/p&gt;

&lt;p&gt;Special characters in Regex extend the ability to create more complex Regex pattern. Let's look at some fundamental ones.&lt;/p&gt;

&lt;p&gt;The string, "From: &lt;a href="mailto:dinys18@dinmon.tech"&gt;dinys18@dinmon.tech&lt;/a&gt;", will be used in each of the below scenarios. And to give the result of the Regex pattern, an arrow will be used. But in no way this will work using JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;^&lt;/code&gt; - The caret symbol matches the start of a string&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var re = /^ From: / =&amp;gt; From:
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;$&lt;/code&gt; - The dollar sign symbol matches the end of a string&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var re = /tech$/ =&amp;gt; tech
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;.&lt;/code&gt; - The period character matches any single character&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var re = /.@/ =&amp;gt; s@ // Any single character and @ sign
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;[0-9]&lt;/code&gt; - Character set. Matches any character enclosed with the brackets.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var re = /[0-9]/ =&amp;gt; 1 and 8, not to be confused by 18
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;*&lt;/code&gt; - Asterisk character matches any character before it, at least one, i.e., either zero or one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var re = /.*:/ =&amp;gt; From: // Any multiple of character until semi column
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;+&lt;/code&gt; - Plus sign character matches any character before it, one or more times.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var re = /@[a-z]+/ =&amp;gt; dinmon // Start at @ sign, include any multiple of lowercase characters
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Lastly, characters like asterisks, plus sign and period are special characters in Regex. What if you wanted to use them in your regular Regex expression. Thankfully there is a way by using special characters in your pattern, you would need to escape them. Meaning adding &lt;code&gt;\&lt;/code&gt;(slash) in front of them, so that they are no longer considered as special characters, but as the regular character.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var re = /\..*/ =&amp;gt; .tech // Start at the period character, include any characters afterwards
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now that we have covered various ways to construct a regular expression let's go ahead and combined it with JavaScript. That will allow us to perform more complex operations like extraction, replacement and so forth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example using Regex and JavaScript
&lt;/h2&gt;

&lt;p&gt;In this section I will cover how to use Regex combined with JavaScript to perform an extraction onto a string. For that, I will implement a file simulator that allows the creation of duplicate folder names.&lt;/p&gt;

&lt;p&gt;So to avoid duplicate folder name, we need to append a string to the folder name to make the new folder’s name unique. For this will add an index enclosed in brackets to represent the number of times the folder is duplicated.&lt;/p&gt;

&lt;p&gt;Before we start constructing the regular expression, let's start breaking down the various scenarios to handle:&lt;br&gt;
A folder's name with any characters, e.g, python&lt;br&gt;
A folder's name with any characters and a digit enclosed in a bracket, e.g python (0)&lt;/p&gt;

&lt;p&gt;First, we need to get the of the duplicated folder's name with any characters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var regex = /.+/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Then look for the enclosed bracket with a number.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var regex2 = /\([0-9]+\)/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You will notice that we escaped the two brackets that surround the number by using a slash. In the middle of the enclosed bracket, we used a character set from zero to nine to define a number. As we need more that one number, we added the plus sign to cater for numbers of two or more digits.&lt;/p&gt;

&lt;p&gt;This sounds good but isn’t it redundant to use two Regex expression on a single string we are trying to pass? What if we could do that in one line? To achieve this, will extract both the folder’s name and the number using the curly brackets around them.&lt;/p&gt;

&lt;p&gt;The final expression will look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var regex = /(.+) \(([0-9]+)\)/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;To execute the Regex expression, call the match function with the above expression as an argument.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var name = 'Folder (0)'
var matchFound = name.match(regex) =&amp;gt; ['Folder (0)', 'Folder ', '0']
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The above result of match function will return null if no value found or the values extracted. Check the  &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match"&gt;match()&lt;/a&gt;  function reference for more detail.&lt;/p&gt;

&lt;p&gt;Note: The first value of the array will be the string you passed in, and the rest is the extracted values.&lt;/p&gt;

&lt;p&gt;I leave the next part for you to complete so that the function getDuplicateName return the folder’s name and the index at the end of the folder if it is a duplicate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function getDuplicateName(list, name) {
            var regex = /(.+) \(([0-9]+)\)/  
            var matchFound = name.match(regex) ?? []

            var [, baseName, index] = matchFound;

            var isDone = (matchFound.length &amp;gt; 0) ? !(!!baseName) : !list.includes(name) 
            var count = index ? Number(index) + 1 : 0
            var newName = name
            baseName = baseName ?? name

            while (!isDone) {
                newName = `${baseName} (${count})` 
                if (!list.includes(newName)) {
                    isDone = true
                    continue
                }
                count++
            }

            return newName
        }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://regexcrossword.com/"&gt;Regex Crossword&lt;/a&gt;  - A fun way to learn Regex&lt;/li&gt;
&lt;li&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions"&gt;MDN Regular Expression&lt;/a&gt;  - For additional reference to the content covered in here&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to look at the full source code, visit the  &lt;a href="https://github.com/DinMon/file-simulator"&gt;GitHub repository&lt;/a&gt;  or the  &lt;a href="https://dinmon.github.io/file-simulator/"&gt;demo &lt;/a&gt; of the file simulator.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y5rObS5K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1599877406263/MchBKBxCU.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y5rObS5K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1599877406263/MchBKBxCU.png" alt="screenshot-mockup(3).png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you like what you read, consider following on  &lt;a href="https://twitter.com/din__mon"&gt;Twitter&lt;/a&gt;  to find valuable content.&lt;/p&gt;

</description>
      <category>regex</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>SVG made easy</title>
      <dc:creator>Dinys Monvoisin</dc:creator>
      <pubDate>Wed, 09 Sep 2020 11:15:36 +0000</pubDate>
      <link>https://dev.to/dinmon/svg-made-easy-517i</link>
      <guid>https://dev.to/dinmon/svg-made-easy-517i</guid>
      <description>&lt;p&gt;SVG is everywhere. Almost every website includes an SVG image, and its popularity keeps on increasing.&lt;/p&gt;

&lt;p&gt;This article will try to demystify what is SVG, bridge the gaps on some concepts related to SVG and at last a bit of practice by creating a web page using SVG as a background.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SVG image&lt;/li&gt;
&lt;li&gt;Why SVG&lt;/li&gt;
&lt;li&gt;Viewport and viewBox&lt;/li&gt;
&lt;li&gt;3D Viewer toy analogy&lt;/li&gt;
&lt;li&gt;Adding SVG background to web page&lt;/li&gt;
&lt;li&gt;Useful Resources for SVG&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SVG image
&lt;/h2&gt;

&lt;p&gt;SVG stands for Scaling Vector Graphics. It is a type of image format calculated using mathematical formulas. The benefit is, it is scalable without losing any resolution. &lt;/p&gt;

&lt;p&gt;To create an SVG image, use a  tag to describe the shape of the image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why SVG
&lt;/h2&gt;

&lt;p&gt;There are many reasons why you would like to use SVG. The obvious one is that it scales without losing quality. The sharpness of the image remains unchanged. &lt;/p&gt;

&lt;p&gt;That brings us to the next point. &lt;/p&gt;

&lt;p&gt;Have you ever surfed a website that has a curvy shape background? Do you think the developers use png, jpg or some other image format? Why not? &lt;/p&gt;

&lt;p&gt;SVG uses mathematical formulas to draw its shape. Therefore, the file size is relatively small compared to other image formats.&lt;/p&gt;

&lt;p&gt;Before we go any further, we need to understand more about the space SVG is made to be able to change its size and position. That is where Viewport and viewBox come into play.&lt;/p&gt;

&lt;h2&gt;
  
  
  Viewport and viewBox
&lt;/h2&gt;

&lt;p&gt;Viewport defines what part of an SVG image you see. Think of it as a window frame. It should not be misunderstood as the image content of the picture. Usually, you will define it as the width and height attributes of the  tag. &lt;/p&gt;

&lt;p&gt;If you have not understood at this point, do not worry; the analogy in the next section will make it clear. &lt;/p&gt;

&lt;p&gt;ViewBox is viewed as a viewport. It provides the ability to position and describe the number of units that is perceived. Compared to the viewport, it is an attribute that requires values: min-x, min-y, width and height. The x and y are to move the viewport position. The width and height to "zoom" in and out. &lt;/p&gt;

&lt;p&gt;Example of viewBox attribute in an  tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;svg viewBox="0 0 100 100"&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  3D Viewer toy analogy
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UP7j95Kc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1599647624572/zKRBT3dIj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UP7j95Kc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1599647624572/zKRBT3dIj.png" alt="3d-viewer.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do you still remember the 3d viewer from your childhood? Where you would, you will stick your eyes to those two views to see the 3d images? And at times you would pull down the handle to switch pictures. &lt;/p&gt;

&lt;p&gt;Guess what, when you are pulling down the handle to change the images, it is moving the position of the pictures. That is how you can view a different image. In terms of the viewBox, the values of min-x and min-y are what you change to move between shapes defined in an SVG image. &lt;/p&gt;

&lt;p&gt;Another component of the 3d viewer was the circular wheel found in the middle of it to move the image closer or farther from our view. So what I am referring to when talking about viewBox is the width and height value which allows it to zoom in and zoom out. &lt;/p&gt;

&lt;p&gt;If you consider the two lenses, in the case of the 3d viewer, it will be the two lenses through which you look. A viewBox has its viewport, and a viewport is also defined for the SVG image using width and height on the tag. &lt;/p&gt;

&lt;h2&gt;
  
  
  Adding SVG background to web page
&lt;/h2&gt;

&lt;p&gt;Now, get ready to have a bit of fun creating some unique background. For this example, we will create a background that includes two SVG images. The images can be generated and downloaded from blobapp.com.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create an HTML file
&lt;/h3&gt;

&lt;p&gt;Create an index.html file. Inside it, add the below HTML5 code. If you are using VScode, you can add the code snippet by typing &lt;code&gt;html:5&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;SVG blob example&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Add two DIVs for the SVG image
&lt;/h3&gt;

&lt;p&gt;In the body tag, add two DIVs with the following class names. The bg-blob class selector inherits the style to move our DIV around. And the other class is to specify the exact position of the blob image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div class="bg-blob bg-medium-blob"&amp;gt;&amp;lt;/div&amp;gt;    
    &amp;lt;div class="bg-blob bg-large-blob"&amp;gt;&amp;lt;/div&amp;gt;    
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Download and save blob image
&lt;/h3&gt;

&lt;p&gt;Head over to blobs.app to generate a random blob image to your liking and save it to your local directory where the index.html resides.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---bzE4HKh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1599645679714/sdlSP86YO.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---bzE4HKh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1599645679714/sdlSP86YO.png" alt="screenshot-mockup(1).png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Add CSS Styling
&lt;/h3&gt;

&lt;p&gt;First, add a background colour to your body to make it more attractive.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
    background-color: #e2e8f0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Next, add the bg-blob class which set the position to absolute for moving our DIV around. It also has z-index as -1 so that other content appears on top of our image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.bg-blob {
    position: absolute;
     z-index: -1;
     box-sizing: content-box;
     height: 0;
     padding: 0;
     background-size: cover;
     background-repeat: no-repeat;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;To use our SVG image as a background, we need a hacky way of using padding so that the DIV content is not treated as part of the HTML document flow. So that is why we set box-sizing and height to 0.&lt;/p&gt;

&lt;p&gt;Next, add the below CSS style for the position of our blob image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.bg-large-blob {
    top: 0;
    left: 0;
    width: 70%;
    padding-bottom: 70%;
    background-image: url(./large-blob.svg);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Use the width and padding-bottom to decide how big you want the SVG to render on the screen. Then, using top, left or right position the SVG according to your liking. At last, import the SVG file as background-image.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Edit the SVG image
&lt;/h3&gt;

&lt;p&gt;Most of the time, to create a fantastic background using blobs, we tend to cut out the shape a bit. Using only the mix-x and mix-y values of the viewBox, we can achieve this behaviour. &lt;/p&gt;

&lt;p&gt;For one of my blob images, I set the viewBox as follows to move the shape to the left and down the web page. The first value of the viewBox, 150, moves the image 150 units to the left. Considering a unit is a px. Same goes for the second value 200.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;svg viewBox="150 200 500 500" width="500" xmlns="http://www.w3.org/2000/svg" id="blobSvg"&amp;gt;
    &amp;lt;path id="blob"  d="M482,295.5Q471,341,405.5,340.5Q340,340,330.5,381Q321,422,285.5,449.5Q250,477,222,431.5Q194,386,144,396Q94,406,69.5,370.5Q45,335,48,292.5Q51,250,40.5,204.5Q30,159,92.5,157Q155,155,161,102Q167,49,208.5,55Q250,61,293,52Q336,43,369.5,70Q403,97,394,145.5Q385,194,439,222Q493,250,482,295.5Z" fill="#7fd1ae"&amp;gt;&amp;lt;/path&amp;gt;
&amp;lt;/svg&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The SVG should look as follows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f5fu3WM2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1599646561300/AsFD94F0j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f5fu3WM2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1599646561300/AsFD94F0j.png" alt="screenshot-mockup(2).png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful resources for SVG
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://www.blobmaker.app/"&gt;Blob Maker&lt;/a&gt; and &lt;a href="https://blobs.app/"&gt;Blobs&lt;/a&gt; - SVG generators to create blob shape&lt;/li&gt;
&lt;li&gt; &lt;a href="https://getwaves.io/"&gt;Get Waves&lt;/a&gt; - A SVG generator to create wavy shape&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://wattenberger.com/guide/scaling-svg"&gt;Scaling SVG Elements&lt;/a&gt; - An interactive demo about how viewBox works&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to have a look at the source code on my &lt;a href="https://github.com/DinMon/svg-blob"&gt;GitHub repository&lt;/a&gt;  and here is the &lt;a href="https://dinmon.github.io/svg-blob/"&gt;result&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Below is another example where I used SVG to create a background for a  &lt;a href="https://dinmon.github.io/file-simulator/"&gt;File Simulator&lt;/a&gt; project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zNGR49sl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1599648118434/Hqd7ea877.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zNGR49sl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1599648118434/Hqd7ea877.png" alt="screenshot-mockup(3).png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope that by now, you do not have an excuse not to make your next project background unique. If you enjoy what you read, follow me on  &lt;a href="https://twitter.com/din__mon"&gt;Twitter&lt;/a&gt;  for more tips and tricks like this. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>css</category>
    </item>
    <item>
      <title>Is ebook a payback to content creators or a hoax?</title>
      <dc:creator>Dinys Monvoisin</dc:creator>
      <pubDate>Thu, 03 Sep 2020 15:01:37 +0000</pubDate>
      <link>https://dev.to/dinmon/is-ebook-a-payback-to-content-creators-or-a-hoax-5611</link>
      <guid>https://dev.to/dinmon/is-ebook-a-payback-to-content-creators-or-a-hoax-5611</guid>
      <description>&lt;p&gt;It is a trend now to release an ebook. Many people in the tech industry find it an easy way to reach out and provide value to people. The rise of social media in the dev community associates followers and an active social presence to success. Thus a new sort of ebook has emerged to address the frenzy to grow in popularity. In this post, I share my thoughts about that type of ebook and what it represents for the buyers.&lt;/p&gt;

&lt;p&gt;At the start of those ebooks, most likely includes a disclaimer. The disclaimer specifies that the author is not accountable for the reader's success. At the sight of this, I cannot prevent myself from thinking about the first chapter in Your First 100 Million. In this book, Dan Pena describes how people spent their money on books from seminars for advice they already know of.&lt;/p&gt;

&lt;p&gt;You should not be misled from what I say above. In no way I am insinuating that those books are wrong but what I want to tell is that I view it in another way. I see the author is trying to relate a story to promote the idea that humans are connected by feelings, and most of its actions are driven by emotions. People being intrigued and curious led them to buy those ebooks.&lt;/p&gt;

&lt;p&gt;Up-to-day I have purchased two types of ebooks: one which I already read and the other one which I am awaiting its release. If asked about the question, what are the takeaways of reading those ebooks? I would not be able to answer this without saying that I am more confused than I was before reading it. Why? I am glad you ask. After reading the book, I picked up one or two pieces of advice, or let's say something more reasonable, five. Those pieces of advice are not mind-blowing, and everyone could have thought of it.&lt;/p&gt;

&lt;p&gt;Coming back to the authors of those ebooks. On average, most of them have a social media account on twitter which is rather typical among tech people. Often is the case that those tips and advice are available across those social platforms. Awaiting you to apply them.&lt;/p&gt;

&lt;p&gt;"You sow what you reap". This proverb describes in simple words the content creators journey. That is, spending countless hours perfecting articles, videos, podcasts, ebooks and interacting with its followers. In the dev community, those efforts touch us. As a payback for the hard work, bonds, and valuable contents, we often invest in those ebooks. &lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I did not write this post to attack anyone in any sort, I am sharing my opinion and feeling about the subject.&lt;/li&gt;
&lt;li&gt;Most advice, tips and tricks are simple things that people have come across but did give a second thought at.&lt;/li&gt;
&lt;li&gt;Following those people on social media might save you a couple of dollars.&lt;/li&gt;
&lt;li&gt;People connect to the success stories of the authors.&lt;/li&gt;
&lt;li&gt;Buying the ebook is a support to our cherished content creators.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the question to you, would you buy those ebooks? Comment below with your thoughts and opinions. I am delighted to hear them.&lt;/p&gt;

&lt;p&gt;If you want to read more of my content, do not hesitate to follow me on  &lt;a href="https://twitter.com/din__mon"&gt;twitter&lt;/a&gt; .&lt;/p&gt;

</description>
      <category>ebook</category>
      <category>community</category>
      <category>learning</category>
    </item>
    <item>
      <title>Why learn Vim?</title>
      <dc:creator>Dinys Monvoisin</dc:creator>
      <pubDate>Fri, 01 May 2020 21:51:12 +0000</pubDate>
      <link>https://dev.to/dinmon/why-learn-vim-c76</link>
      <guid>https://dev.to/dinmon/why-learn-vim-c76</guid>
      <description>

</description>
      <category>vim</category>
      <category>programming</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
