<?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: Edson Junior de Andrade</title>
    <description>The latest articles on DEV Community by Edson Junior de Andrade (@edsonjuniornarvaes).</description>
    <link>https://dev.to/edsonjuniornarvaes</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%2F621321%2Fd7571307-1fec-4472-8fcd-949aefb6f5d2.jpg</url>
      <title>DEV Community: Edson Junior de Andrade</title>
      <link>https://dev.to/edsonjuniornarvaes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/edsonjuniornarvaes"/>
    <language>en</language>
    <item>
      <title>How to optimize SVG files for better use in projects?</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Wed, 26 Mar 2025 15:45:03 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/how-to-optimize-svg-files-for-better-use-in-projects-52eo</link>
      <guid>https://dev.to/edsonjuniornarvaes/how-to-optimize-svg-files-for-better-use-in-projects-52eo</guid>
      <description>&lt;p&gt;We often come across large and complex SVG files full of redundancies, which can be a hassle. Fortunately, we can optimize this with &lt;a href="https://svgo.dev/" rel="noopener noreferrer"&gt;SVGO&lt;/a&gt;, a tool that reduces the size of SVG files by removing unnecessary data without compromising quality.&lt;/p&gt;

&lt;p&gt;How to use it?&lt;/p&gt;

&lt;p&gt;To use it, install it globally with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# npm&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; svgo

&lt;span class="c"&gt;# yarn&lt;/span&gt;
yarn global add svgo

&lt;span class="c"&gt;# pnpm&lt;/span&gt;
pnpm add &lt;span class="nt"&gt;-g&lt;/span&gt; svgo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create an SVGO configuration file in the root of your project with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo &lt;/span&gt;svgo.config.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the svgo.config.js file and start configuring it. Below is an example, but feel free to explore other possibilities and even add plugins:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;multipass&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="cm"&gt;/* Performs multiple passes over the file to try to find more possible optimizations.*/&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;removeViewBox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;active&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="cm"&gt;/* Keep the viewBox to avoid clipping. */&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;removeDimensions&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;active&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="cm"&gt;/* Remove width and height to allow scalability. */&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;Go to the location where the svg you want to optimize is located and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;svgo file_name.svg &lt;span class="nt"&gt;-o&lt;/span&gt; file_name.min.svg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! Your svg is optimized, all the redundancies and unnecessary parameters that come with an svg have been removed and it is ready to use.&lt;/p&gt;

&lt;p&gt;For more complete content, visit the &lt;a href="https://github.com/svg/svgo" rel="noopener noreferrer"&gt;SVGO documentation&lt;/a&gt;&lt;/p&gt;

</description>
      <category>svg</category>
      <category>svgoptmize</category>
      <category>svgo</category>
    </item>
    <item>
      <title>MVVM for React Native</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Sat, 24 Aug 2024 17:06:56 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/mvvm-react-native-5665</link>
      <guid>https://dev.to/edsonjuniornarvaes/mvvm-react-native-5665</guid>
      <description>&lt;h1&gt;
  
  
  Understanding MVVM in React Native
&lt;/h1&gt;

&lt;p&gt;The MVVM (Model-View-ViewModel) pattern is widely used in software development to improve code organization, ease maintenance, and increase application testability. It helps to efficiently structure the business logic, user interface (UI), and presentation layer. In the context of React Native, MVVM can be implemented using functional components for Views, hooks to manage state, and functions for ViewModel logic, as well as external APIs or local storage for the Model.&lt;/p&gt;

&lt;p&gt;It is an architectural pattern that separates business logic from UI, dividing the application into three main components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Model&lt;/strong&gt;: contains the business logic and data of the application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;View&lt;/strong&gt;: responsible for rendering the UI and displaying data to the user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ViewModel&lt;/strong&gt;: acts as an intermediary between the View and the Model, managing the presentation logic and user interactions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hdwa6ajjou3k9nyyimq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hdwa6ajjou3k9nyyimq.png" alt="Imagem do MVVM" width="800" height="77"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why use MVVM in React Native?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Better code organization&lt;/strong&gt;: MVVM helps keep code cleaner and more organized, making it easier for teams to collaborate on React Native projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy testing&lt;/strong&gt;: The isolated business and presentation logic in the ViewModel makes it easier to create tests, allowing you to validate the functionality of your application without depending on the UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability and scalability&lt;/strong&gt;: With a clear separation of responsibilities, it is simpler to add new features and fix bugs, especially in mobile apps that tend to evolve rapidly.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Large companies that use MVVM
&lt;/h2&gt;

&lt;p&gt;The MVVM pattern is used by several technology companies to improve the modularity, testability, and maintainability of their applications. Examples include &lt;strong&gt;Microsoft&lt;/strong&gt; (creator of MVVM), &lt;strong&gt;Slack&lt;/strong&gt;, &lt;strong&gt;Netflix&lt;/strong&gt;, &lt;strong&gt;Airbnb&lt;/strong&gt;, &lt;strong&gt;Uber&lt;/strong&gt;, &lt;strong&gt;Spotify&lt;/strong&gt;, &lt;strong&gt;Alibaba&lt;/strong&gt;, among others. These companies adopt MVVM to create more organized and scalable code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pros and Cons
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Separation of concerns&lt;/strong&gt;: Makes code easier to maintain by clearly separating business logic from presentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code reuse&lt;/strong&gt;: The ViewModel can be reused in different parts of the application, reducing code duplication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ease of maintainability&lt;/strong&gt;: Large and complex projects become easier to maintain and evolve over time, as the MVVM framework promotes cleaner and more organized code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Initial complexity in existing projects&lt;/strong&gt;: Implementing MVVM in existing projects can add a certain amount of initial complexity, especially in large projects with many business rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning curve&lt;/strong&gt;: The team’s adaptation can slow the process due to the familiarization curve with the MVVM pattern and its application in React Native.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Implementation tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Refactor gradually&lt;/strong&gt;: Don’t start refactoring the entire project at once; prefer to apply it as opportunities arise, whether when implementing a new feature or identifying a viable refactoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identify components with a lot of logic&lt;/strong&gt;: Find components that have a lot of business logic and move that logic to a ViewModel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep the ViewModel independent of the UI&lt;/strong&gt;: Ensure that the ViewModel does not depend on UI components, facilitating testing and reuse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use custom hooks&lt;/strong&gt;: To make it easier to implement the ViewModel, create custom hooks that encapsulate the ViewModel logic and can be reused across different components, promoting consistency and avoiding code duplication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use tests to ensure that the refactoring doesn’t break anything&lt;/strong&gt;: Before you start refactoring, write tests to ensure that the existing functionality will continue to work after the move to MVVM.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;The MVVM pattern can be an excellent choice for projects in React Native, especially those that are growing and becoming difficult to maintain. While there may be a learning curve and initial complexity, the long-term benefits in terms of organization, testability, and maintainability can be significant.&lt;/p&gt;

</description>
      <category>mvvm</category>
      <category>architecture</category>
      <category>productivity</category>
      <category>reactnative</category>
    </item>
    <item>
      <title>Upgrade your Expo project</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Tue, 10 Oct 2023 12:45:29 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/upgrade-your-expo-project-4i1m</link>
      <guid>https://dev.to/edsonjuniornarvaes/upgrade-your-expo-project-4i1m</guid>
      <description>&lt;p&gt;To upgrade your Expo project from version 48 to version 49, you will need to follow some specific steps. Additionally, you should be aware that compatibility breaks between versions may occur, and it is important to test your application well after updating. Here are the general steps to make this update:&lt;/p&gt;

&lt;p&gt;Step 1: Update Expo CLI&lt;br&gt;
First, make sure you have the latest version of Expo CLI installed globally. You can do this by running the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; expo-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will update Expo CLI to the latest version.&lt;/p&gt;

&lt;p&gt;Step 2: Update the Expo SDK&lt;br&gt;
Then update the Expo SDK in your project configuration. Navigate to your Expo project directory and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx expo-cli upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso deve atualizar o SDK Expo para a versão mais recente compatível com a versão 49.&lt;/p&gt;

&lt;p&gt;Step 3: Update project dependencies&lt;br&gt;
With the Expo SDK update, it is possible that some of the libraries or packages you are using may also need to be updated to ensure compatibility. To do this, you can run the following command in your project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx expo &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will analyze your project's dependencies and update the required libraries to the latest version supported by the Expo 49 SDK.&lt;/p&gt;

&lt;p&gt;Step 4: Test the project&lt;br&gt;
After updating, it is essential to test your application thoroughly to ensure everything works as expected. Run your Expo project using the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx expo start &lt;span class="nt"&gt;-c&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the Expo Go app on your mobile device and scan the QR code displayed on the terminal to verify the operation of your updated app.&lt;/p&gt;

&lt;p&gt;Step 5: Resolve compatibility issues&lt;br&gt;
You may encounter compatibility issues when updating your project. Check the error messages in the terminal and the documentation for the libraries you use. Sometimes you may need to make adjustments to your application's code so that it works correctly with the latest version of Expo.&lt;/p&gt;

&lt;p&gt;Step 6: Back up your project&lt;br&gt;
Before making any significant updates, make a backup of your project to avoid data loss.&lt;/p&gt;

&lt;p&gt;Remember to consult the official Expo documentation and the documentation for the libraries you are using for detailed information about any major changes in version 49 and any required updates.&lt;/p&gt;

&lt;p&gt;These are the general steps for upgrading an Expo project from version 48 to version 49. Be sure to test your application thoroughly to ensure everything is working as expected after the upgrade.&lt;/p&gt;

</description>
      <category>expo</category>
    </item>
    <item>
      <title>Update your libraries to the latest version with yarn</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Thu, 20 Jul 2023 20:06:40 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/update-your-libraries-to-the-latest-version-with-yarn-2cf2</link>
      <guid>https://dev.to/edsonjuniornarvaes/update-your-libraries-to-the-latest-version-with-yarn-2cf2</guid>
      <description>&lt;p&gt;Wirely update your libraries to the latest version using below command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn upgrade &lt;span class="nt"&gt;--latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>XOrg in Fedora</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Thu, 20 Jul 2023 12:45:05 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/xorg-in-fedora-4p9p</link>
      <guid>https://dev.to/edsonjuniornarvaes/xorg-in-fedora-4p9p</guid>
      <description>&lt;p&gt;I have been facing problems when sharing screen through fedora, either on discord or I encounter black screen, I managed to solve my problem by installing X.Org.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is X.Org?&lt;/strong&gt;&lt;br&gt;
X.Org Server é a implementação livre e de código aberto de servidor de exibição para o sistema de janelas X11 gerenciado pela X.Org Foundation, que é hospedada pela freedesktop.org, e concede acesso público ao padrão das liberações do X Window para os esforços da comunidade de software livre e de código aberto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; @base-x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the installation is complete, restart your machine and when the login screen appears, in the lower right corner there is a gear, click on it and change the option you want, in my case I used GNOME in xorg&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dyjkihzkusmnk9ct76r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dyjkihzkusmnk9ct76r.png" alt=" " width="623" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>fedora</category>
    </item>
    <item>
      <title>Husky + lint-staged + commitlint</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Tue, 21 Mar 2023 11:18:16 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/husky-lint-staged-1nma</link>
      <guid>https://dev.to/edsonjuniornarvaes/husky-lint-staged-1nma</guid>
      <description>&lt;p&gt;In this post, I'll show you how to improve your husky workflow, using pre-commit to trigger error checking on your code before uploading it to the repository.&lt;/p&gt;

&lt;p&gt;Start husky with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx husky-init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify that the husky information has been entered into your package.json:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prepare"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"husky install"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"husky"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.0.0"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install husky in your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#yarn &lt;/span&gt;
yarn&lt;span class="p"&gt;;&lt;/span&gt; npx husky add .husky/commit-msg &lt;span class="s1"&gt;'npx --no-install commitlint --edit ""'&lt;/span&gt;

&lt;span class="c"&gt;#npm &lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; npx husky add .husky/commit-msg &lt;span class="s1"&gt;'npx --no-install commitlint --edit ""'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Checking &lt;code&gt;.husky/commit-msg&lt;/code&gt; file you might find the following bash script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/sh&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;dirname&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/_/husky.sh"&lt;/span&gt;

npx &lt;span class="nt"&gt;--no-install&lt;/span&gt; commitlint &lt;span class="nt"&gt;--edit&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's add the commit-lint package to the lint confirmation messages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#yarn &lt;/span&gt;
yarn add @commitlint/config-conventional @commitlint/cli &lt;span class="nt"&gt;--dev&lt;/span&gt;

&lt;span class="c"&gt;#npm &lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @commitlint/config-conventional @commitlint/cli &lt;span class="nt"&gt;--dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the commitlint.config.js file in the root of your directory and insert the following contents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;extends&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="s1"&gt;@commitlint/config-conventional&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we will install lint-staged:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#yarn &lt;/span&gt;
yarn add lint-staged &lt;span class="nt"&gt;--dev&lt;/span&gt;

&lt;span class="c"&gt;#npm &lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;lint-staged &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In package.json insert the following script for running lint-staged into our project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"pre-commit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"lint-staged"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"prepare"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"husky install"&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will create the &lt;code&gt;.lintstagedrc&lt;/code&gt; file to run eslint and prettier at commit time:&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="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;src/**/*.+(js|json|ts|tsx)&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;eslint&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;src/**/*.{js,jsx,ts,tsx,json,css,scss,md}&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;eslint --fix&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;prettier --write&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside &lt;code&gt;.husky/pre-commit&lt;/code&gt; insert the following script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/sh&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;dirname&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/_/husky.sh"&lt;/span&gt;

npm run pre-commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! Now test everything we have installed.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Adding a git commit message using vi on macOS</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Fri, 09 Dec 2022 11:18:58 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/adding-a-git-commit-message-using-vi-on-macos-25db</link>
      <guid>https://dev.to/edsonjuniornarvaes/adding-a-git-commit-message-using-vi-on-macos-25db</guid>
      <description>&lt;p&gt;You must have already gone through the situation of having entered vi at the time of a commit and not knowing how to finalize it, below I leave a sequence that will help you with that&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;1 - Type i
2 - Write your message
3 - Type the ESC key
4 - Type :wq

DONE!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ai</category>
      <category>productivity</category>
      <category>coding</category>
      <category>discuss</category>
    </item>
    <item>
      <title>System limit for number of file watchers reached</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Mon, 21 Nov 2022 13:52:30 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/system-limit-for-number-of-file-watchers-reached-500h</link>
      <guid>https://dev.to/edsonjuniornarvaes/system-limit-for-number-of-file-watchers-reached-500h</guid>
      <description>&lt;p&gt;If your linux hits the system watchers limit, solve it with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo &lt;/span&gt;fs.inotify.max_user_watches&lt;span class="o"&gt;=&lt;/span&gt;524288 | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /etc/sysctl.conf &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;sysctl &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>cloud</category>
      <category>webdev</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Basic setup for development</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Thu, 17 Nov 2022 18:14:33 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/basic-setup-for-development-19an</link>
      <guid>https://dev.to/edsonjuniornarvaes/basic-setup-for-development-19an</guid>
      <description>&lt;h3&gt;
  
  
  Development
&lt;/h3&gt;

&lt;p&gt;Make&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;make
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;p&gt;Git&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;p&gt;PHP 8&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;software-properties-common

&lt;span class="nb"&gt;sudo &lt;/span&gt;add-apt-repository ppa:ondrej/php

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;php8.0 php8.0-intl php8.0-mysql php8.0-sqlite3 php8.0-gd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;p&gt;Composer&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;php-cli unzip

&lt;span class="nb"&gt;cd&lt;/span&gt; ~

curl &lt;span class="nt"&gt;-sS&lt;/span&gt; https://getcomposer.org/installer &lt;span class="nt"&gt;-o&lt;/span&gt; composer-setup.php

&lt;span class="nb"&gt;sudo &lt;/span&gt;php composer-setup.php &lt;span class="nt"&gt;--install-dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/bin &lt;span class="nt"&gt;--filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;composer

&lt;span class="c"&gt;# Test composer installation&lt;/span&gt;
composer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;p&gt;DBeaver&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;add-apt-repository ppa:serge-rider/dbeaver-ce

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;dbeaver-ce
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;p&gt;Docker&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;apt-transport-https ca-certificates curl software-properties-common

curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg | &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key add -

&lt;span class="nb"&gt;sudo &lt;/span&gt;add-apt-repository &lt;span class="s2"&gt;"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"&lt;/span&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update

apt-cache policy docker-ce

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;docker-ce

&lt;span class="c"&gt;# Test the Docker installation&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;p&gt;Docker permission&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;whoami&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;

newgrp docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;p&gt;Docker Compose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="s2"&gt;"https://github.com/docker/compose/releases/download/1.25.5/docker-compose-&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/local/bin/docker-compose

&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; +x /usr/local/bin/docker-compose

&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /usr/local/bin/docker-compose /usr/bin/docker-compose

docker-compose &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;p&gt;NodeJS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nodejs

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;npm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;p&gt;Yarn&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sS&lt;/span&gt; https://dl.yarnpkg.com/debian/pubkey.gpg | &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key add -

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb https://dl.yarnpkg.com/debian/ stable main"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/yarn.list

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;yarn

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--no-install-recommends&lt;/span&gt; yarn

&lt;span class="c"&gt;# Test the Yarn version&lt;/span&gt;
yarn &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;h3&gt;
  
  
  Browser
&lt;/h3&gt;

&lt;p&gt;Google Chrome&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
&lt;span class="nb"&gt;sudo &lt;/span&gt;dpkg &lt;span class="nt"&gt;-i&lt;/span&gt; google-chrome-stable_current_amd64.deb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;h3&gt;
  
  
  System custom
&lt;/h3&gt;

&lt;p&gt;Papirus icons&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;add-apt-repository ppa:papirus/papirus

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;papirus-icon-theme
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;p&gt;Gnome&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;chrome-gnome-shell gnome-shell-extensions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;p&gt;Extensions for Gnome&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://extensions.gnome.org/extension/307/dash-to-dock/" rel="noopener noreferrer"&gt;Dash to dock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://extensions.gnome.org/extension/1160/dash-to-panel/" rel="noopener noreferrer"&gt;Dash to panel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://extensions.gnome.org/extension/906/sound-output-device-chooser/" rel="noopener noreferrer"&gt;Sound output device chooser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://extensions.gnome.org/extension/932/scroll-panel/" rel="noopener noreferrer"&gt;Scroll panel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://extensions.gnome.org/extension/1099/transparent-gnome-panel/" rel="noopener noreferrer"&gt;Transparent gnome panel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://extensions.gnome.org/extension/1056/gnome-shutdown-button/" rel="noopener noreferrer"&gt;Gnome shutdown button&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>setup</category>
      <category>development</category>
    </item>
    <item>
      <title>Axios interceptor token on first call</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Thu, 29 Sep 2022 11:50:13 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/axios-interceptor-token-on-first-call-13l2</link>
      <guid>https://dev.to/edsonjuniornarvaes/axios-interceptor-token-on-first-call-13l2</guid>
      <description>&lt;p&gt;Just add the capture of the token in the local storage in the configuration inside the interceptors request.&lt;/p&gt;

&lt;p&gt;In my case I use lib '@react-native-async-storage/async-storage', you should configure capture according to your storage method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;AsyncStorage&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@react-native-async-storage/async-storage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;apiApp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;interceptors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nx"&gt;config&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;userData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;AsyncStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;STORAGE_USER_AUTH_DATA&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;{}&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="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userData&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;accessData&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;token&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="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&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;



</description>
      <category>axios</category>
      <category>intercept</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Semantic commit messages</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Fri, 16 Sep 2022 12:44:15 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/semantic-commit-messages-40n8</link>
      <guid>https://dev.to/edsonjuniornarvaes/semantic-commit-messages-40n8</guid>
      <description>&lt;p&gt;See how a minor change to your commit message style can make you a better programmer.&lt;/p&gt;

&lt;p&gt;Format: &lt;code&gt;&amp;lt;type&amp;gt;(&amp;lt;scope&amp;gt;): &amp;lt;subject&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;scope&amp;gt;&lt;/code&gt; is optional&lt;/p&gt;

&lt;p&gt;Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;feat: add hat wobble
^--^  ^------------^
|     |
|     +-&amp;gt; Summary &lt;span class="k"&gt;in &lt;/span&gt;present tense.
|
+-------&amp;gt; Type: chore, docs, feat, fix, refactor, style, or test.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;feat&lt;/strong&gt;: new feature for the user, not a new feature for build script&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fix&lt;/strong&gt;: bug fix for the user, not a fix to a build script&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;docs&lt;/strong&gt;: changes to the documentation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;style&lt;/strong&gt;: formatting, missing semi colons, etc; no production code change&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;refactor&lt;/strong&gt;: refactoring production code, eg. renaming a variable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;test&lt;/strong&gt;: adding missing tests, refactoring tests; no production code change&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;chore&lt;/strong&gt;: updating grunt tasks etc; no production code change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://seesparkbox.com/foundry/semantic_commit_messages" rel="noopener noreferrer"&gt;https://seesparkbox.com/foundry/semantic_commit_messages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
    </item>
    <item>
      <title>Set default login and password for git requests</title>
      <dc:creator>Edson Junior de Andrade</dc:creator>
      <pubDate>Fri, 16 Sep 2022 12:42:38 +0000</pubDate>
      <link>https://dev.to/edsonjuniornarvaes/set-default-login-and-password-for-git-requests-5e6c</link>
      <guid>https://dev.to/edsonjuniornarvaes/set-default-login-and-password-for-git-requests-5e6c</guid>
      <description>&lt;p&gt;To not always need to tell git what your login and password are, enter the command below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config credential.helper store
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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