<?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: Jonatan Lima (balu)</title>
    <description>The latest articles on DEV Community by Jonatan Lima (balu) (@jdssl).</description>
    <link>https://dev.to/jdssl</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%2F654542%2F97a610ca-47e7-4f4c-9802-5b1505afd633.jpeg</url>
      <title>DEV Community: Jonatan Lima (balu)</title>
      <link>https://dev.to/jdssl</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jdssl"/>
    <language>en</language>
    <item>
      <title>Evitando consumo de mensagens duplicadas com Redis</title>
      <dc:creator>Jonatan Lima (balu)</dc:creator>
      <pubDate>Fri, 24 Mar 2023 21:19:42 +0000</pubDate>
      <link>https://dev.to/jdssl/evitando-consumo-de-mensagens-duplicadas-com-redis-2mp8</link>
      <guid>https://dev.to/jdssl/evitando-consumo-de-mensagens-duplicadas-com-redis-2mp8</guid>
      <description>&lt;p&gt;Nesse artigo vou tratar de uma forma de evitar o consumo de mensagens duplicadas via RabbitMQ, a solução que será demonstrada foi elaborada por &lt;a href="https://github.com/alisonsm92" rel="noopener noreferrer"&gt;Alison Machado&lt;/a&gt;, &lt;a href="https://github.com/jonatasnona" rel="noopener noreferrer"&gt;Jonatan Pedraza&lt;/a&gt; e por esse quem vos escreve &lt;a href="https://github.com/jdssl" rel="noopener noreferrer"&gt;Jonatan Lima&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cenário
&lt;/h2&gt;

&lt;p&gt;Primeiro vamos entender o cenário.&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%2Fp3883xuy0q1nq9pjzen2.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%2Fp3883xuy0q1nq9pjzen2.png" alt="Scenario" width="800" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O processo inicia quando o &lt;strong&gt;Payment Gateway&lt;/strong&gt; se comunica com &lt;strong&gt;Webhook&lt;/strong&gt; que por sua vez publica uma mensagem no &lt;strong&gt;RabbitMQ&lt;/strong&gt;, onde o &lt;strong&gt;Service&lt;/strong&gt; consome a mensagem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problema
&lt;/h2&gt;

&lt;p&gt;Por motivos de instabilidade o &lt;strong&gt;Payment Gateway&lt;/strong&gt; pode enviar o mesmo &lt;strong&gt;Webhook&lt;/strong&gt;, gerando o envio da mesma mensagem para o &lt;strong&gt;RabbitMQ&lt;/strong&gt; que por sua vez enviará a mensagem duplicada para o &lt;strong&gt;Service&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Como não existe uma tratativa no &lt;strong&gt;CONSUMER&lt;/strong&gt; para verificar se a mensagem já foi consumida e processada com sucesso, o &lt;strong&gt;USE CASE&lt;/strong&gt; é chamado novamente.&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%2Ft2mretun8ot7yko5yn2k.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%2Ft2mretun8ot7yko5yn2k.png" alt="Problem" width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Solução
&lt;/h2&gt;

&lt;p&gt;Após conversarmos sobre várias formas de resolver o problema, chegamos na que melhor se encaixa no nosso cenário.&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%2Fz7g3mj43rddjnlnj71aa.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%2Fz7g3mj43rddjnlnj71aa.png" alt="Solution" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Decidimos utilizar o &lt;strong&gt;Redis&lt;/strong&gt; para armazenar uma &lt;em&gt;hash&lt;/em&gt;, que será gerada no momento em que o &lt;strong&gt;Consumer&lt;/strong&gt; consumir a mensagem, após a geração da &lt;em&gt;hash&lt;/em&gt; consultamos no redis para verificar se a mensagem já foi processada com sucesso, caso a &lt;em&gt;hash&lt;/em&gt; seja encontrada não processamos a mensagem novamente.&lt;/p&gt;

&lt;p&gt;Se a &lt;em&gt;hash&lt;/em&gt; não for encontrada, o fluxo normal da chamada do &lt;strong&gt;USE CASE&lt;/strong&gt; é realizado, caso tudo ocorra como o esperado, no final do fluxo inserimos a &lt;em&gt;hash&lt;/em&gt; no &lt;strong&gt;Redis&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pontos de atenção
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Não esqueça de adicionar o &lt;strong&gt;ttl&lt;/strong&gt; da chave que será inserida no &lt;strong&gt;Redis&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Caso queira que os métodos implementados do &lt;strong&gt;Redis&lt;/strong&gt; sejam rejeitados no momento em que a conexão seja perdida, desabilite &lt;strong&gt;offline queue&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Projeto no Github
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/jdssl/redis-saves" rel="noopener noreferrer"&gt;https://github.com/jdssl/redis-saves&lt;/a&gt;&lt;/p&gt;

</description>
      <category>redis</category>
      <category>rabbit</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Reduza a criação de listas utilizando compreensão em listas</title>
      <dc:creator>Jonatan Lima (balu)</dc:creator>
      <pubDate>Mon, 08 Nov 2021 21:05:23 +0000</pubDate>
      <link>https://dev.to/jdssl/reduza-a-criacao-de-listas-utilizando-compreensao-em-listas-be0</link>
      <guid>https://dev.to/jdssl/reduza-a-criacao-de-listas-utilizando-compreensao-em-listas-be0</guid>
      <description>&lt;p&gt;Post original: &lt;a href="https://medium.com/@jotanlima/reduza-a-cria%C3%A7%C3%A3o-de-listas-utilizando-compreens%C3%A3o-em-listas-a971163d2760" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Normalmente quando estamos estudando Python e aprendendo a criar listas, utilizar while, for e if, nos sentimos com super poderes rs. Mas com grandes poderes vêm grandes responsabilidades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mãos à obra
&lt;/h2&gt;

&lt;p&gt;Vamos criar um lista e vamos preenche-la utilizando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_list1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;my_list1&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_list1&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vamos criar a mesma lista utilizando compreensão em listas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_list2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_list2&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E então?&lt;br&gt;
Simplificamos toda a criação de nossa lista em uma única linha.&lt;/p&gt;

&lt;p&gt;Vamos a mais um exemplo, podemos adicionar operações matemáticas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_list3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_list3&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Que tal usarmos if?&lt;/p&gt;

&lt;p&gt;Queremos vê os números pares.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_list4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_list4&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se não tivéssemos utilizado compreensão em lista o nosso código ficaria assim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_list4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;my_list4&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_list4&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Por que devo usar compreensão em listas?
&lt;/h2&gt;

&lt;p&gt;Além do fato que podemos diminuir bastante o nosso código, uma coisa muito importante também é a beleza do código.&lt;/p&gt;

&lt;p&gt;Beleza?&lt;/p&gt;

&lt;p&gt;Sim!!!&lt;/p&gt;

&lt;p&gt;Vamos lembrar do primeiro mandamento do Zen Of Python.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Beautiful is better than ugly.”&lt;/em&gt;&lt;br&gt;
ou seja&lt;br&gt;
&lt;em&gt;“Bonito é melhor que feio.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Espero que esse pequeno artigo tenha ajudado você de alguma forma no seu caminho pela arte Pythonica.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Os fundamentos são a base de tudo.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nunca desista de correr atrás dos seus sonhos&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Aproveite as oportunidades</title>
      <dc:creator>Jonatan Lima (balu)</dc:creator>
      <pubDate>Mon, 08 Nov 2021 21:00:26 +0000</pubDate>
      <link>https://dev.to/jdssl/aproveite-as-oportunidades-1jb1</link>
      <guid>https://dev.to/jdssl/aproveite-as-oportunidades-1jb1</guid>
      <description>&lt;p&gt;Post original: &lt;a href="https://medium.com/@jotanlima/aproveite-as-oportunidades-5c68109c860" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesse pequeno artigo gostaria de compartilhar um pouco da experiência que estou vivendo atualmente, na verdade não sei se o nome correto seria de artigo ou texto de autoajuda rs. Mas gostaria que você tirasse um tempo pra lêr esse “artigo”, espero que possa lhe ajudar.&lt;/p&gt;

&lt;p&gt;Vivemos em um mundo onde o tempo não para, quem dera se ele fosse nosso amigo e de vez em quando desse uma leve atrasada ou até mesmo parasse rs, mas não é assim, o tempo é veloz e implacável, funciona igual para o rico como para o pobre.&lt;/p&gt;

&lt;p&gt;Tenho vivido um período que muitos profissionais considerariam um “inferno”, que é o desemprego, mesmo fazendo alguns trabalhos de freelancer, eles não estão o tempo todo ao nosso alcance, seja por falta de conhecimento, ou até mesmo por medo de não estarmos a altura do quesito da vaga ou da tarefa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Você já deve ter feito algumas dessas perguntas ou questionamentos quando nos encontramos nessa situação.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O que fazer?
&lt;/h2&gt;

&lt;p&gt;Estude, procure suas deficiências técnicas e foque em resolve-las, se prepare e de sempre o seu melhor!&lt;/p&gt;

&lt;p&gt;O ser humano é incrível, podemos fazer coisas inimagináveis se tivermos força, garra e aquela chama que nossos heróis sempre tem e nos contagia!!&lt;/p&gt;

&lt;h2&gt;
  
  
  O mercado tá difícil!
&lt;/h2&gt;

&lt;p&gt;Ele sempre foi e sempre será!&lt;/p&gt;

&lt;p&gt;Não adianta reclamar dele, aprenda como ele funciona e crie sua estratégia de estudo e entre no jogo!!!&lt;/p&gt;

&lt;h2&gt;
  
  
  A culpa é desse mercado que não da valor para o ótimo profissional que eu sou!!!
&lt;/h2&gt;

&lt;p&gt;Cuidado, esse tipo de afirmação pode ser considerada como orgulhosa e presunçosa, acredito que você seja um ótimo profissional, mas falar esse tipo de coisa pode comprometer de vez a visão das pessoas que estão ao seu redor.&lt;/p&gt;

&lt;p&gt;Existem situações que nem sempre são as ideias de trabalho, seja ambiente de trabalho ou salário, mas fazer o que? A vida é assim, aprenda a viver com ela.&lt;/p&gt;

&lt;p&gt;Se não está satisfeito com o mercado, pois ele não o valorize, mude, estude, evolua, procure outra área, mude de cidade ou até mesmo país, mas posso lhe garantir, em todos esses casos que falei haverão dificuldades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dedique um tempo para você, isso é muito IMPORTANTE
&lt;/h2&gt;

&lt;p&gt;Separe um tempo pra fazer uma auto avaliação, da sua vida familiar, espiritual e profissional, tenha uma visão de como é o seu verdadeiro eu em cada um desses setores.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sou um bom marido, namorado, amigo, filho ?
&lt;/h2&gt;

&lt;p&gt;Acredite todas essas áreas estão ligadas, você não pode ser um mal filho e um bom profissional. Essa é a minha visão.&lt;/p&gt;

&lt;h2&gt;
  
  
  Não importa em que você acredita, todos temos fé em alguma coisa, todos somos filhos de Deus, veja se você tem dedicado um tempo pra fazer boas obras ao seu próximo.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Sou um bom profissional, posso melhorar?
&lt;/h2&gt;

&lt;p&gt;Sempre podemos melhorar, a busca do aprendizado não acaba nunca, não se acomode!&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribuo com a equipe da qual faço parte? Ou só me importo com o dinheiro?
&lt;/h2&gt;

&lt;p&gt;Esse é um assunto delicado, sim você pode estar em um empresa só pelo dinheiro, pelo status. Isso é válido, ninguém pode desmerecer sua opinião, NINGUÉM!!!&lt;/p&gt;

&lt;p&gt;Mas quando você tem uma visão de equipe, união, familia em uma empresa, seja ela uma multinacional ou um startup que está começando, as coisas mudam, o sentimento de estar fazendo parte de algo maior, de ser um membro dessa engrenagem, pode mudar completamente sua visão de vida. Mas uma vez, essa é a minha visão!!&lt;/p&gt;

&lt;p&gt;Todos precisamos de dinheiro pra cumprir nossas responsabilidades, o mundo é capitalista.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bom esse “artigo” tomo um rumo diferente do que tinha em mente rs, mas isso é bom, pode expor algumas das minhas visões do mundo.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Mas afinal como posso aproveitar as oportunidades?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Se você chegou até aqui, deve estar esperando um super conselho que vai mudar a sua vida e te tornar um super profissional com muito dinheiro e satisfação pessoal, não é mesmo rs?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Na minha visão satisfação pessoal, profissional e dinheiro, andam juntas.&lt;/p&gt;

&lt;p&gt;Você pode ser o que você quiser, Desenvolvedor Web, Ilustrador, Advogado, Músico, Lutador de UFC em todas essas áreas você terá dificuldades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Você está enrolando!!! Cadê a super dica para eu aproveitar as oportunidade?????
&lt;/h2&gt;

&lt;p&gt;Tudo bem, lá vai, o meu super conselho é:&lt;/p&gt;

&lt;h2&gt;
  
  
  Seja grato pelo que você tem!
&lt;/h2&gt;

&lt;h2&gt;
  
  
  De valor aos momentos bons e ruins da sua vida, assim você vai conseguir perceber que em tudo podemos tirar uma lição.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Em todas as dificuldades aprendemos, em todas as coisas boas que nos acontecessem aprendemos.
&lt;/h2&gt;

&lt;p&gt;Espero que tenha ajudado a você perceber que as situações que passamos sejam elas boas ou ruins, são grandes oportunidades de aprendemos, todas elas nos tornam mais fortes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Se a vida fosse fácil, ninguém nascia chorando.” Guilhermynho&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fiquem com Deus e até a próxima.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>leadership</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Estude TypeScript</title>
      <dc:creator>Jonatan Lima (balu)</dc:creator>
      <pubDate>Mon, 08 Nov 2021 20:54:04 +0000</pubDate>
      <link>https://dev.to/jdssl/estude-typescript-486a</link>
      <guid>https://dev.to/jdssl/estude-typescript-486a</guid>
      <description>&lt;p&gt;Post original: &lt;a href="https://medium.com/@jotanlima/estude-typescript-a20a730a331" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bom dia amigos, gostaria de citar alguns benefícios de aprender e utilizar TypeScript em JavaScript.&lt;/p&gt;

&lt;p&gt;Alguns motivos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Temos a possibilidades de trabalhar com tipagem, algo muito útil para nós desenvolvedores JavaScript.&lt;/li&gt;
&lt;li&gt;Orientação a Objetos, sim, vamos poder usufruir de todo o poder desse paradigma (Class, Interface, Abstract), somando com a programação funcional nativa.&lt;/li&gt;
&lt;li&gt;Melhora seu código, seu código vai se tornar mais coeso, bem divido, claro, se você usufruir de interfaces, classes abstratas e da boa e velha herança.&lt;/li&gt;
&lt;li&gt;Muitas tecnologias utilizam ou dão suporte ao TypeScript: Angular, React, Graphql, Graphcool e etc.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Lembre-se TypeScript é um supertest de JavaScript, ou seja, você pode implementar ele sem precisar usar esses frameworks citados acima.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Comece agora a utilizar TypeScript e eleve seu JavaScript para o próximo nível. Vou deixar alguns links legais pra você estudar TypeScript:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;O próprio site dará todo o suporte que você precisará: &lt;a href="https://lnkd.in/dC4bbuX" rel="noopener noreferrer"&gt;https://lnkd.in/dC4bbuX&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No próprio site tem uma área pra você começar do zero: &lt;a href="https://lnkd.in/dB8pTuj" rel="noopener noreferrer"&gt;https://lnkd.in/dB8pTuj&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Agora só depende de você, estude, pratique e use TypeScript em seus novos projetos.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fiquem com Deus e até a próxima.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nunca desista de correr atrás dos seus sonhos&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>SOLID em menos de 5 minutos</title>
      <dc:creator>Jonatan Lima (balu)</dc:creator>
      <pubDate>Mon, 08 Nov 2021 20:49:25 +0000</pubDate>
      <link>https://dev.to/jdssl/solid-em-menos-de-5-minutos-5cef</link>
      <guid>https://dev.to/jdssl/solid-em-menos-de-5-minutos-5cef</guid>
      <description>&lt;p&gt;Post original: &lt;a href="https://medium.com/@jotanlima/solid-em-menos-de-5-minutos-81ff05274c7" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essas são as minhas interpretações desse paradigma, não são verdades absolutas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Single Responsibility Principle
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Princípio da Responsabilidade Única&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uma classe deve ter somente uma função (não necessariamente uma função e sim fazer uma única tarefa bem feita), utilize interface para agrupar métodos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Liskov Substitution Principle
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Princípio da substituição de Liskov&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A classe mãe deve poder ser substituída pela sua classe filha. Basicamente fazendo um override nos métodos, modificando para satisfazer os requisitos da nova classe.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dependency Inversion Principle
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Princípio da inversão de dependência&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Toda classe de alto nível seja completamente independente de suas subclasses. Ou seja, as classes não podem depender dos detalhes de implementação de seus métodos e classes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Interface Segregation Principle
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Princípio da segregação de Interfaces&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Este princípio afirma que uma interface não pode forçar uma classe a implementar métodos que não pertencem a ela. Cada interface deve conter métodos específicos, evitando poluir as classes que irão implementa-las.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open Closed Principle
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Princípio do aberto/fechado&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crie classes que tem foco de serem extensíveis, distribuindo as responsabilidades em classes pequenas, utilize classes abstratas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Fiquem com Deus e até a próxima.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nunca desista de correr atrás dos seus sonhos&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Desenvolvimento de software com qualidade</title>
      <dc:creator>Jonatan Lima (balu)</dc:creator>
      <pubDate>Mon, 08 Nov 2021 20:38:44 +0000</pubDate>
      <link>https://dev.to/jdssl/desenvolvimento-de-software-com-qualidade-2a31</link>
      <guid>https://dev.to/jdssl/desenvolvimento-de-software-com-qualidade-2a31</guid>
      <description>&lt;p&gt;Post original: &lt;a href="https://medium.com/@jotanlima/desenvolvimento-de-software-com-qualidade-13e50429e938" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Todo processo de desenvolvimento de software começa com uma ideia, geralmente são boas ideias mas acabam se perdendo quando deixamos a emoção falar mais alto.&lt;/p&gt;

&lt;p&gt;Você provavelmente já deve ter tido uma ideia que achou incrível, pensou que seria o novo &lt;strong&gt;Steve Jobs&lt;/strong&gt;, mudando o mundo e colocando seu nome na história, mas na hora de passar pro papel se enrolou, não soube por onde começar, pulou etapas, começou a modelar banco de dados e pensar em requisitos de layout e bateu no primeiro problema, um novo requisito que não estava previsto apareceu e a implementação dele quebra toda sua aplicação.&lt;/p&gt;

&lt;p&gt;Bom esse é o ponto onde muitos desistem, quando os problemas aparecem, quando as coisas não acontecem como o planejado. Tenho uma coisa pra lhe dizer caro amigo, nada nessa vida se comporta como planejamos, controle é uma mera ilusão. Nesse momento você para e se pergunta: &lt;strong&gt;E agora? Como posso desenvolver um bom software, já que você acabou de dizer que não existe controle?&lt;/strong&gt;, calma meu amigo, não podemos controlar o clima, a doença, a morte e uma infinidade de eventos que ocorrem ao nosso redor, mas no nosso universo de criação de softwares de qualidade podemos sim controlar alguns eventos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Etapas para um bom desenvolvimento
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;“Essas são as minhas interpretações, opiniões que construi com minha experiência como desenvolvedor, não significa que são etapas e regras absolutas.”&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Escreva sua ideia, leia e releia até ficar claro o que o seu software vai fazer, ele terá muitas funcionalidades, mas terá uma que será o seu diferencial, a cereja do bolo. De atenção para ela, mas não esqueça das outras, pois não adianta tem um software que faz sua casa voar sendo que você não consegue mudar o toque da sua campainha.&lt;/li&gt;
&lt;li&gt;Crie protótipos, no mercado tem bastante material para te auxiliar nesse processo, o foco principal é ter uma base simples de como o sistema vai funcionar, qual será o fluxo de telas, coisas simples, sem designer, recomendo fazer no papel ou utilizar o &lt;strong&gt;Balsamiq&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Faça um esboço do banco de dados, gosto muito de usar papel nessa etapa, seguindo o modelo de mapa mental, tem um aplicativo muito bom pra criar mapas mentais, o &lt;strong&gt;MindNode&lt;/strong&gt;, nessa etapa não me preocupo com colunas, maxlenght e etc, deve ser algo simples mas que já mostre como o banco vai se comportar a nível de tabelas.&lt;/li&gt;
&lt;li&gt;Modele o banco de dados, de maneira progressiva, lembre-se que a tendência é que seu sistema cresça e junto com esse crescimento seu banco deve acompanha-lo, use relacionamentos coesos.&lt;/li&gt;
&lt;li&gt;Utilize TDD, teste seus modelos, teste suas funções, teste rotas, teste views, teste TUDO, TESTES SALVAM!!! Lembre-se “TODO CÓDIGO NÃO TESTADO É LEGADO”.&lt;/li&gt;
&lt;li&gt;Independente da linguagem que você escolha, divida a responsabilidade, use controller, service, interface, factory, nada de colocar toda a responsabilidade no controller ou em um único lugar.&lt;/li&gt;
&lt;li&gt;De importância para o Designer, UI e UX. Não adianta ter uma casa incrível por dentro se por fora ela está toda suja, e descuidada.
Essas são etapas, assuntos que acho importante no processo para o desenvolvimento de um software de qualidade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Fiquem com Deus e até a próxima.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nunca desista de correr atrás dos seus sonhos&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Seguindo o caminho JavaScript</title>
      <dc:creator>Jonatan Lima (balu)</dc:creator>
      <pubDate>Tue, 14 Sep 2021 12:08:09 +0000</pubDate>
      <link>https://dev.to/jdssl/seguindo-o-caminho-javascript-c0b</link>
      <guid>https://dev.to/jdssl/seguindo-o-caminho-javascript-c0b</guid>
      <description>&lt;p&gt;Post original: &lt;a href="https://medium.com/@jotanlima/seguindo-o-caminho-javascript-6addf4fd9e17" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Um caminho ao aprendizado completo e eficiente da linguagem mais amada de todos. &lt;/p&gt;

&lt;h2&gt;
  
  
  Milhões de Bibliotecas, quais estudar?
&lt;/h2&gt;

&lt;p&gt;Provavelmente você já deve ter se deparado com uma infinidade de frameworks JavaScript, os do momento são, Angular, React, Vue muitos outros. Essa é a “moda do momento”, mas a um tempo essa mesma “moda” tinha como foco, jQuery, Backbone e outros que talvez você nunca tenha ouvido falar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Mas o que todos eles tem em comum?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bom, essa pergunta é muito fácil de responder, todos são feitos em JavaScript. Eu sei, é um pouco óbvio, mas tenha calma no final tudo fará sentido rs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cada Framework tem sua função, cada tem um objetivo especifico pra solucionar um determinado “problema”, assim como em padrões de projetos, onde o padrão Observer, enfraquece o acoplamento, criando objetos que são “observáveis” que informam a todos os seus “observadores” quando algum evento acontece.&lt;/p&gt;

&lt;p&gt;Nesse momento você deve estar se perguntando.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;strong&gt;Tudo isso é legal, mas qual eu devo estudar?&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essa resposta é simples:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Todos!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Eu sei rs, não foi a melhor resposta, mas para que você entenda ela, teremos que responder algumas perguntas, tudo bem?&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Vamos começar com as perguntas&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Você domina bem JavaScript?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Quando falo dominar não é só saber como criar funções, variáveis e etc. Estou falando dos paradigmas da linguagens.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sabia que JavaScript é um linguagem funcional?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;E que ao mesmo tempo pode ser utilizada com o paradigma orientado a objeto e outros?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Funções são consideradas objetos de primeira classe?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pois como em qualquer outro objeto elas podem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ser criadas por meio de literais.&lt;/li&gt;
&lt;li&gt;Ser atribuídas a variáveis.&lt;/li&gt;
&lt;li&gt;Ser passadas como parâmetros.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Essa é última eu acho muito legal, já pensou em criar um função que recebe um parâmetro qualquer e o seu segundo parâmetro é uma função, que tem seus próprios parâmetros que se comunicam com o primeiro parâmetro da função?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;São muitos parâmetros em um pequeno texto rs.&lt;/p&gt;

&lt;p&gt;O que eu quero dizer é que as possibilidades são infinitas.&lt;/p&gt;

&lt;p&gt;E que funções podem ser invocadas de várias formas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Invocada como uma simples função, onde seu contexto é global.&lt;/li&gt;
&lt;li&gt;Invocada como um método, onde seu contexto é o objeto “dono” do método.&lt;/li&gt;
&lt;li&gt;Invocada como um construtor, onde seu contexto é um objeto recém-alocado.&lt;/li&gt;
&lt;li&gt;Invocada por meio dos métodos apply e call, onde o contexto pode ser o que quisermos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;E tem muito mais.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ligando os pontos
&lt;/h2&gt;

&lt;p&gt;Se você respondeu todas essas perguntas com um belo sim, ou já conhecia algumas dessas aplicações da linguagem, parabéns, você está no caminho certo. Mas se você ainda se sente inseguro com esses paradigmas, bom, antes de querer se aventurar pelo mundo dos frameworks, aventure-se no mundo do JavaScript, você irá se surpreender com o que podemos fazer com a linguagem pura. &lt;/p&gt;

&lt;p&gt;Sem jQuery, sem Angular, sem React e etc.&lt;/p&gt;

&lt;p&gt;Sabia que muitos desses frameworks que fazem algumas mágicas que achamos incríveis, são apenas a utilização de métodos nativos da linguagem e padrões de projetos, como formData, DataSet, preventDefault, stopPropagation, addClass , MVC, repository e outros.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dica de Ouro
&lt;/h2&gt;

&lt;p&gt;Vou deixar alguns dicas de leitura para vocês, são leituras que já fiz e estou fazendo e pretendo fazer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para quem está começando, recomendo livros que são chamados de Guias:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;YDKJS - Kyle Simpson&lt;/li&gt;
&lt;li&gt;Javascript Guia do programador - Maurício Samy Silva.&lt;/li&gt;
&lt;li&gt;Javascript. O Guia Definitivo - David Flanagan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Para testar os códigos desses livros recomendo um playground, eu gosto bastante do, &lt;a href="https://jsbin.com/?html,js,output" rel="noopener noreferrer"&gt;JSBin&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para quem já está em um nível intermediário ou avançado e deseja aprimorar suas habilidades de desenvolvimento com Javascript, recomendo:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Segredos do Ninja JavaScript - John Resig e Bear Bibealt.&lt;/li&gt;
&lt;li&gt;Padrões JavaScript - Stoyan Stefanov.&lt;/li&gt;
&lt;li&gt;Javascript de Alto Desempenho - Zakas.&lt;/li&gt;
&lt;li&gt;Javascript Remoto - Ben Vinegar e Anton Kovalyov.&lt;/li&gt;
&lt;li&gt;Eloquent JavaScript - Marijn Haverbeke.&lt;/li&gt;
&lt;li&gt;Understanding ECMAScript 6 - Zakas.&lt;/li&gt;
&lt;li&gt;Testable JavaScript - Ensuring Reliable Code.&lt;/li&gt;
&lt;li&gt;Estruturas de dados e algoritmos em JavaScript - Loaine Groner&lt;/li&gt;
&lt;li&gt;Testing JavaScript Applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;É uma boa dar uma olhada em TDD, Mocha, Jest, Sinon, Chai, Supertest e outras libs de testes para Javascript.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Por fim
&lt;/h2&gt;

&lt;p&gt;Ter conhecimento da linguagem lhe possibilitará avaliar e escolher a melhor forma de resolver um determinado problema ou a melhor forma de iniciar um bom projeto.&lt;/p&gt;

&lt;p&gt;Existem bons frameworks, eles são muitos bons, recomendo que vocês estudem eles e entendam como eles abordam a linguagem e aprendam a reproduzir seus conceitos. Pois talvez daqui à 5 anos, Angular, React e outros da “moda atual” não estejam na crista da onda e se porventura no projeto você precisar de uma solução que se encaixa perfeito com o Angular (lembrando que você não pode usa-lo), o que você vai fazer?, simples, você vai implementar o conceito que o framework utilizou, seja ele componentes ou two data binding. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Espero ter ajudado um pouco nessa sua caminhada JavaScript, nenhum framework deve superar seu conhecimento da linguagem pura. Lembre-se os fundamentos são a base de tudo.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fiquem com Deus e até a próxima.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nunca desista de correr atrás dos seus sonhos&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>learn</category>
      <category>study</category>
    </item>
    <item>
      <title>Debug Node.js com Chrome DevTools</title>
      <dc:creator>Jonatan Lima (balu)</dc:creator>
      <pubDate>Sat, 10 Jul 2021 18:51:42 +0000</pubDate>
      <link>https://dev.to/jdssl/debug-node-js-com-chrome-devtools-531</link>
      <guid>https://dev.to/jdssl/debug-node-js-com-chrome-devtools-531</guid>
      <description>&lt;p&gt;Post original: &lt;a href="https://www.linkedin.com/posts/jonatan-lima-977416102_nodejs-devs-devtools-activity-6651963344808890370-paxK" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Já precisou debugar em Node.js?&lt;/p&gt;

&lt;p&gt;Se sim provavelmente você pensou que era necessário fazer toda uma configuração.&lt;/p&gt;

&lt;p&gt;Não importa se você usa Sublime, VSCode, WebStorm ou outro editor/IDE, será necessário no mínimo configurar um arquivo.&lt;/p&gt;

&lt;p&gt;Bom eu utilizo VIM, não largo por nada rs&lt;/p&gt;

&lt;p&gt;Mas voltando pro foco, que tal utilizar o próprio Chrome DevTools como Debug?&lt;/p&gt;

&lt;p&gt;É muito fácil.&lt;/p&gt;

&lt;p&gt;Se você já tem o Node instalado pode utilizar a flag &lt;strong&gt;—inspect-brk&lt;/strong&gt; para iniciar um Websocket com o Google Chrome. Essa flag adicona um break antes do código ser executado.&lt;/p&gt;

&lt;p&gt;Vamos começar com um único&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%2Femk7n843yye89jt1k22t.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%2Femk7n843yye89jt1k22t.png" alt="Terminal" width="800" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Show, agora vamos entrar no Google Chrome e digitar no campo de url &lt;strong&gt;chrome://inspect&lt;/strong&gt;, o Chrome irá abrir um página com nosso script, clicando em inspect ele irá abrir o DevTools.&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%2F77hw3pzplasflj0sj6sd.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%2F77hw3pzplasflj0sj6sd.png" alt="DevTools" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora com nosso DevTools aberto podemos adicionar break points para conseguir encontrar o erro.&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%2F60xqi5ijqfsdc2b5n49k.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%2F60xqi5ijqfsdc2b5n49k.png" alt="DevTools" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caso você esteja trabalhando em um projeto grande pode adicionar um script no seu package.json, &lt;strong&gt;“dev:debug”: “node —inspect-brk app.js”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nesse cenário teremos que adicionar a pasta do no projeto na sessão Filesystem em Add folder to workspace, para podermos navegar entre os arquivos e adicionar nossos break pointers.&lt;/p&gt;

&lt;p&gt;Espero que esse pequeno artigo ajude vocês no dia a dia com Node.&lt;/p&gt;

&lt;p&gt;Para mais informações sobre debug com Node acesse esse link.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Fiquem com Deus e até a próxima.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nunca desista de correr atrás dos seus sonhos!!!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
