<?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: Jaedson Silva</title>
    <description>The latest articles on DEV Community by Jaedson Silva (@jaedsonpys).</description>
    <link>https://dev.to/jaedsonpys</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%2F938210%2Ffd33448c-0157-4e55-9969-279019338eac.jpg</url>
      <title>DEV Community: Jaedson Silva</title>
      <link>https://dev.to/jaedsonpys</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jaedsonpys"/>
    <language>en</language>
    <item>
      <title>CookieDB: Meu projeto de banco de dados noSQL open-source 🍪</title>
      <dc:creator>Jaedson Silva</dc:creator>
      <pubDate>Mon, 10 Jul 2023 21:24:56 +0000</pubDate>
      <link>https://dev.to/jaedsonpys/cookiedb-meu-projeto-de-banco-de-dados-nosql-open-source-d8n</link>
      <guid>https://dev.to/jaedsonpys/cookiedb-meu-projeto-de-banco-de-dados-nosql-open-source-d8n</guid>
      <description>&lt;p&gt;O CookieDB é um banco de dados noSQL que usa o modelo de documento para armazenar os dados. Desenvolvido totalmente em Python, o CookieDB foi projetado para ser seguro, moderno, leve e fácil de usar. Feito para todos os tipos de projetos, especialmente para aqueles que não necessitam de um banco de dados complexo e complicado de configurar.&lt;/p&gt;

&lt;p&gt;Você pode &lt;strong&gt;contribuir para o avanço do projeto&lt;/strong&gt; enviando sugestões, adicionando funcionalidades ou corrigindo erros por meio de PRs, reportando falhas de segurança ou bugs no &lt;a href="https://github.com/jaedsonpys/cookiedb"&gt;repositório do CookieDB&lt;/a&gt; no Github, qualquer tipo de contribuição é bem-vinda!&lt;/p&gt;

&lt;p&gt;Além disso, você pode usar as &lt;a href="https://github.com/jaedsonpys/cookiedb/issues"&gt;Issues do GitHub&lt;/a&gt; para tirar suas dúvidas ou reportar falhas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://jaedsonpys.github.io/cookiedb/"&gt;Documentação do CookieDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jaedsonpys/cookiedb"&gt;Código-fonte do CookieDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/cookiedb"&gt;Projeto no PyPI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outros projetos relacionados ao CookieDB também estão disponíveis, como um servidor e um cliente Python para acesso ao servidor (&lt;a href="https://github.com/jaedsonpys/cookiedb-server"&gt;CookieDB Server&lt;/a&gt; e &lt;a href="https://github.com/jaedsonpys/cookiedb-client"&gt;CookieDB Client&lt;/a&gt; respectivamente).&lt;/p&gt;

&lt;h2&gt;
  
  
  🔒 Segurança
&lt;/h2&gt;

&lt;p&gt;Para manter a segurança, todos os dados armazenados em um banco de dados CookieDB são criptografados utilizando o &lt;strong&gt;algoritmo AES-256&lt;/strong&gt;, além de conter um código &lt;em&gt;otimizado&lt;/em&gt; para melhorar a velocidade de criptografia.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Velocidade
&lt;/h2&gt;

&lt;p&gt;Desde a primeira versão, venho buscando novas formas de fazer com que o armazenamento de dados seja rápido. A última versão do CookieDB será a mais rápida e otimizada, com novos métodos de armazenamento que são testados várias vezes para comprovar o desempenho.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✌️ Fácil de usar
&lt;/h2&gt;

&lt;p&gt;O CookieDB possui documentação &lt;strong&gt;clara e atualizada&lt;/strong&gt; sobre cada método que você precisar utilizar, seja para criar, obter, atualizar ou deletar dados no banco. Você pode adicionar praticamente qualquer tipo de dado ao banco de dados, como listas, dicionários, strings, números, valores booleanos, sets e tuplas. Veja um &lt;a href="https://github.com/jaedsonpys/cookiedb/blob/master/examples/example.py"&gt;simples exemplo de uso&lt;/a&gt; do CookieDB:&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="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;cookiedb&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;CookieDB&lt;/span&gt;

&lt;span class="n"&gt;database&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CookieDB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'MyDatabase'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'secret'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'languages/python'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'creator'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Guido'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'ext'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'.py'&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;python_creator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'languages/python/creator'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;python_ext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'languages/python/ext'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'Python creator: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;python_creator&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'Python extension: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;python_ext&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Todos os dados são armazenados em um arquivo &lt;code&gt;.cookiedb&lt;/code&gt;, onde você pode realizar cópias facilmente para manter seus dados seguros.&lt;/p&gt;

</description>
      <category>database</category>
      <category>python</category>
      <category>nosql</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Como eu deixei meu banco de dados open-source 4 VEZES mais rápido</title>
      <dc:creator>Jaedson Silva</dc:creator>
      <pubDate>Wed, 05 Apr 2023 01:10:39 +0000</pubDate>
      <link>https://dev.to/jaedsonpys/como-eu-deixei-meu-banco-de-dados-open-source-4-vezes-mais-rapido-442g</link>
      <guid>https://dev.to/jaedsonpys/como-eu-deixei-meu-banco-de-dados-open-source-4-vezes-mais-rapido-442g</guid>
      <description>&lt;p&gt;Sim, eu desenvolvi um banco de dados noSQL em Python chamado &lt;a href="https://github.com/jaedsonpys/cookiedb" rel="noopener noreferrer"&gt;CookieDB&lt;/a&gt; que armazena seus dados em arquivos criptografados de forma rápida e simples, sem complicações. Mas no início, não era tão rápido assim...&lt;/p&gt;

&lt;h2&gt;
  
  
  Conhecendo o CookieDB
&lt;/h2&gt;

&lt;p&gt;Eu decidi criar o este banco de dados como forma de aprendizado, além de estar empolgado com a ideia de usar meu próprio banco de dados em outros projetos.&lt;/p&gt;

&lt;p&gt;A ideia era armazenar todos os dados em &lt;strong&gt;um arquivo JSON&lt;/strong&gt;, utilizando uma classe em Python com métodos para criar, obter, atualizar e deletar dados. Algo realmente simples. Porém, como forma de segurança, eu adicionei a possibilidade de criptografar o banco de dados usando a biblioteca &lt;a href="https://pypi.org/project/cryptography" rel="noopener noreferrer"&gt;cryptography&lt;/a&gt;. Mas o problema de performance começa ao usar o &lt;strong&gt;JSON&lt;/strong&gt; e a biblioteca &lt;strong&gt;cryptography&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Escrita e leitura de um grande volume de dados 😰
&lt;/h2&gt;

&lt;p&gt;Imagine que uma aplicação receba 1 milhão de usuários em um dia, obviamente esses usuários não se registraram de uma vez só, mas cada escrita de um novo usuário no banco de dados demora alguns milissegundos que, somados no final do dia, resultarão em alguns segundos ou minutos, dependendo do desempenho do banco de dados. Se o número de usuários por dia aumentar, o tempo total também aumenta, podendo causar transtornos na aplicação.&lt;/p&gt;

&lt;p&gt;Então, escrevi um código que adiciona, obtém e deleta 1 milhão de usuários para testar a performance entre as versões &lt;code&gt;7.0&lt;/code&gt; e &lt;code&gt;5.0&lt;/code&gt; do &lt;strong&gt;CookieDB&lt;/strong&gt;. A versão &lt;code&gt;7.0&lt;/code&gt; possui as otimização feitas para alcançar uma velocidade &lt;strong&gt;4 vezes&lt;/strong&gt; maior que a versão &lt;code&gt;5.0&lt;/code&gt;, que não possui tais otimizações. Esse é o código:&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;secrets&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;cookiedb&lt;/span&gt;

&lt;span class="n"&gt;cookiedb_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cookiedb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__version__&lt;/span&gt;

&lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cookiedb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CookieDB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ultra-secret-key!&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_database&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;test-&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;cookiedb_version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;if_not_exists&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;test-&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;cookiedb_version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;users_number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;names&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Jaedson&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Pedro&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Maria&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Lucas&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Larissa&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mateus&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Edvaldo&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Luíza&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;token_hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;__&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="n"&gt;users_number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;@mail.com&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

        &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;password&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_add_users&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;users/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_get_users&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;users/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_delete_users&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;users/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;users_test_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000000&lt;/span&gt;
    &lt;span class="n"&gt;total_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Test CookieDB version &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;cookiedb_version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Test with &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;users_test_number&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; users data&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;users_test_number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Data ready. Testing...&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;test_add_users&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;test_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;
    &lt;span class="n"&gt;total_time&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;test_time&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Add users in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;test_time&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;test_get_users&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;test_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;
    &lt;span class="n"&gt;total_time&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;test_time&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Get users in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;test_time&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;test_delete_users&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;test_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;
    &lt;span class="n"&gt;total_time&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;test_time&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Delete users in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;test_time&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Test finished in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;total_time&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, veja a comparação de performance entre as duas versões do banco de dados CookieDB:&lt;/p&gt;

&lt;h3&gt;
  
  
  Versão 5.0
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Test CookieDB version 5.0.0
Test with 1000000 users data
Data ready. Testing...

Add users in 13.4102
Get users in 9.3546
Delete users in 18.8088

Test finished in 41.5736
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Versão 7.0
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Test CookieDB version 7.0.0
Test with 1000000 users data
Data ready. Testing...

Add users in 3.0604
Get users in 2.5955
Delete users in 5.1419

Test finished in 10.7977
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Observem a diferença: de 40 para apenas 10 segundos para executar três ações com 1 milhão de usuários. Pode parecer pouco, mas se executarmos esse teste com 10 milhões de usuários, a diferença seria de 7 minutos para 1 minuto!&lt;/p&gt;

&lt;h2&gt;
  
  
  Os problemas que encontrei...
&lt;/h2&gt;

&lt;p&gt;Os problemas que encontrei estão relacionados a biblioteca &lt;code&gt;cryptography&lt;/code&gt; e o módulo &lt;code&gt;json&lt;/code&gt;, que já vem embutido no Python 3.&lt;/p&gt;

&lt;h3&gt;
  
  
  Biblioteca &lt;code&gt;cryptography&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;O resultado da criptografia utilizando a biblioteca &lt;code&gt;cryptography&lt;/code&gt; é codificado em &lt;code&gt;base64&lt;/code&gt; para facilitar o transporte do conteúdo criptografado. O que é desnecessário em meu projeto, já que o banco de dados é local.&lt;/p&gt;

&lt;p&gt;Obviamente, a codificação em &lt;code&gt;base64&lt;/code&gt; leva tempo, inclusive se o conteúdo a ser codificado for grande.&lt;/p&gt;

&lt;p&gt;Para resolver este problema, utilizei a biblioteca &lt;a href="https://pypi.org/project/pycryptodome/" rel="noopener noreferrer"&gt;pycryptodome&lt;/a&gt;, que permite manipular a criptografia de uma forma "pura", onde o resultado da criptografia é retornado em bytes, sem serem codificados em &lt;code&gt;base64&lt;/code&gt;. Com isso, criei uma classe em Python para facilitar a criptografia dos dados. Você pode ver o código no &lt;a href="https://github.com/jaedsonpys/cookiedb/blob/master/cookiedb/_encrypt.py" rel="noopener noreferrer"&gt;arquivo &lt;code&gt;_encrypt.py&lt;/code&gt;&lt;/a&gt; do projeto CookieDB.&lt;/p&gt;

&lt;h3&gt;
  
  
  Módulo &lt;code&gt;json&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;O problema aqui não é o módulo em si, e sim &lt;strong&gt;sua velocidade&lt;/strong&gt; em codificar e decodificar dados JSON. Isso pode ser resolvido utilizando o módulo &lt;code&gt;pickle&lt;/code&gt; do Python, onde você pode serializar dicionários, listas, strings, classes e diversos tipos da linguagem Python. Além de dar uma grande melhoria na velocidade, o tamanho do arquivo também diminui muito, já que não é preciso ser lido por humanos, igual o JSON.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Procure otimizar seu projeto ao máximo, há sempre uma forma de deixá-lo mais rápido, seja criando suas próprias soluções ou utilizando soluções já desenvolvidas e testadas.&lt;/p&gt;

&lt;p&gt;O projeto CookieDB passa por diversas mudanças constantemente, seja para uma nova funcionalidade, correção de bugs ou melhoria de performance. Meu objetivo é fazer com que ele seja usável em grandes aplicações, e pra isso, é necessário um bom trabalho no desenvolvimento.&lt;/p&gt;

&lt;h3&gt;
  
  
  Links úteis
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/jaedsonpys/cookiedb" rel="noopener noreferrer"&gt;Código-fonte CookieDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jaedsonpys.github.io/cookiedb" rel="noopener noreferrer"&gt;Documentação CookieDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jaedsonpys" rel="noopener noreferrer"&gt;Meu perfil no GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>finance</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Melhores sites gratuitos para aprender programação</title>
      <dc:creator>Jaedson Silva</dc:creator>
      <pubDate>Sun, 09 Oct 2022 19:14:59 +0000</pubDate>
      <link>https://dev.to/jaedsonpys/melhores-sites-se-tornar-um-desenvolvedor-548p</link>
      <guid>https://dev.to/jaedsonpys/melhores-sites-se-tornar-um-desenvolvedor-548p</guid>
      <description>&lt;p&gt;Na internet você pode encontrar diversos cursos gratuitos, artigos e documentações disponíveis para serem consumidos a qualquer momento, sem pagar nada.&lt;/p&gt;

&lt;p&gt;Todos os sites listados nesse artigo já foram usados por mim, por isso, garanto que possuem um bom método de ensino.&lt;/p&gt;

&lt;p&gt;Se você quer &lt;strong&gt;aprender a programar&lt;/strong&gt; mas não quer comprar nenhum curso, vou te apresentar &lt;strong&gt;3 sites para aprender a programar de graça&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Curso em Vídeo
&lt;/h2&gt;

&lt;p&gt;O &lt;a href="https://cursoemvideo.com"&gt;Curso em Vídeo&lt;/a&gt; com certeza é o site que a maioria dos programadores conhece. Foi lá onde milhares de desenvolvedores tiveram seu primeiro contato com programação, justamente por ser explicado de forma simples e direta.&lt;/p&gt;

&lt;p&gt;Aqui estão algumas características do &lt;strong&gt;Curso em Vídeo&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Diversos cursos de linguagens, banco de dados e outros;&lt;/li&gt;
&lt;li&gt;Curso organizado em módulos e vídeos de alta qualidade;&lt;/li&gt;
&lt;li&gt;Teste de conhecimento no final do curso;&lt;/li&gt;
&lt;li&gt;Certificado de conclusão pago.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Digital Innovation One
&lt;/h2&gt;

&lt;p&gt;Diferente do &lt;strong&gt;Curso em Vídeo&lt;/strong&gt;, a &lt;a href="https://dio.me"&gt;DIO (Digital Innovation One)&lt;/a&gt; apresenta um leque maior de cursos, não focando apenas em linguagens, mas também oferecendo cursos de frameworks, cloud, design e outros. Uma grande vantagem dessa plataforma é que ela oferece diversos &lt;strong&gt;Bootcamps&lt;/strong&gt; gratuitos para seus usuários.&lt;/p&gt;

&lt;p&gt;As principais características da DIO são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Certificado de conclusão gratuito;&lt;/li&gt;
&lt;li&gt;Teste de conhecimento no final do curso;&lt;/li&gt;
&lt;li&gt;Maior número de cursos;&lt;/li&gt;
&lt;li&gt;Bootcamps gratuitos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Fundação Bradesco (Escola Virtual)
&lt;/h2&gt;

&lt;p&gt;A &lt;a href="https://www.ev.org.br"&gt;Fundação Bradesco&lt;/a&gt; é uma escola virtual que apresenta diversos cursos, &lt;em&gt;não apenas focados em tecnologia&lt;/em&gt;, mas possui uma &lt;strong&gt;grande variedade&lt;/strong&gt; de cursos sobre esse assunto. &lt;/p&gt;

&lt;p&gt;Algumas características da &lt;strong&gt;Fundação Bradesco&lt;/strong&gt; são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cursos básicos, direcionados a iniciantes;&lt;/li&gt;
&lt;li&gt;Teste de conhecimento no final do curso;&lt;/li&gt;
&lt;li&gt;Certificado de conclusão gratuito;&lt;/li&gt;
&lt;li&gt;Cursos disponíveis apenas em formato de texto.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Estudando nestes sites, você com certeza conseguirá uma boa base de linguagens, frameworks, banco de dados ou qualquer outra tecnologia, sendo necessário apenas &lt;strong&gt;esforço e dedicação&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Te vejo no próximo artigo, dev! 🖖👾&lt;/p&gt;

</description>
      <category>aprender</category>
      <category>webdev</category>
      <category>cursos</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Como aprendi a programar</title>
      <dc:creator>Jaedson Silva</dc:creator>
      <pubDate>Fri, 07 Oct 2022 21:43:33 +0000</pubDate>
      <link>https://dev.to/jaedsonpys/como-aprendi-a-programar-97p</link>
      <guid>https://dev.to/jaedsonpys/como-aprendi-a-programar-97p</guid>
      <description>&lt;p&gt;Vou mostrar, de forma breve, a minha trajetória como programador, do início até este exato momento! Mas antes, você pode me conhecer um pouco...&lt;/p&gt;

&lt;h2&gt;
  
  
  Sobre mim
&lt;/h2&gt;

&lt;p&gt;Sou Jaedson Silva, tenho 15 anos de idade, desenvolvedor a 2 anos e nascido no &lt;strong&gt;interior de Alagoas&lt;/strong&gt;. Sou apaixonado por astronomia e tecnologia, sempre desenvolvendo projetos e estudando para expandir meus conhecimentos.&lt;/p&gt;

&lt;h2&gt;
  
  
  De onde veio a vontade de programar?
&lt;/h2&gt;

&lt;p&gt;O ano era &lt;em&gt;2017/2018&lt;/em&gt;, meu irmão já tinha começado a programar, ele sabia C#, JavaScript, HTML e CSS. As vezes eu ia no quarto dele e &lt;strong&gt;observava o que ele fazia&lt;/strong&gt; no computador, ficava me perguntando o que era aquilo, e o porquê de tantas linhas de texto. &lt;/p&gt;

&lt;p&gt;No início, eu não tinha aquele interesse grande de se tornar um desenvolvedor, mas resolvi aprender alguma coisa, e o mais simples era o &lt;strong&gt;HTML5&lt;/strong&gt;. Baixei um editor de texto, coloquei uma aula e fui praticando. Mas isso não foi muito longe, no outro dia eu já tinha esquecido das aulas e o resto do interesse foi embora.&lt;/p&gt;

&lt;h2&gt;
  
  
  As mudanças
&lt;/h2&gt;

&lt;p&gt;De 2018 a 2020, muitos anos se passaram, minha personalidade mudou muito durante esse tempo, e eu queria fazer algo que pudesse me dar dinheiro, aprender algo que eu gostasse de fazer. Então, me veio a ideia de ser designer gráfico.&lt;/p&gt;

&lt;p&gt;Eu não &lt;strong&gt;sabia nada&lt;/strong&gt; dessa área, mas comecei pelo celular, usando um aplicativo simples e algumas aulas do YouTube. Aprendi bastante coisa sobre design durante uns 4 dias, obviamente que não me tornei um profissional, mas já me sentia pronto para anunciar meu serviço a outras pessoas.&lt;/p&gt;

&lt;p&gt;E deu certo, consegui alguns clientes e estava satisfeito sendo designer, mesmo sentindo que meus designs não eram bons o suficiente (e realmente não eram), mas, era o que minha criatividade colocava pra fora.&lt;/p&gt;

&lt;h2&gt;
  
  
  A programação bateu na minha porta novamente...
&lt;/h2&gt;

&lt;p&gt;No final de 2020, em dezembro, meu irmão teve a ideia de criar uma &lt;em&gt;agência de desenvolvimento web&lt;/em&gt;, já que eu era um designer e ele um desenvolvedor. Então, meu irmão disse que ficava muito "cansativo" trabalhar como full-stack (front-end e back-end) em um projeto, já que eu "só" seria o designer da aplicação, então, ele me disse que eu deveria aprender HTML5 e CSS3 para ser um &lt;strong&gt;desenvolvedor front-end&lt;/strong&gt;. Eu gostei muito dessa ideia, e no mesmo dia, ele me ensinou algumas coisas sobre HTML5.&lt;/p&gt;

&lt;p&gt;Conheci alguns cursos gratuitos, inclusive o curso de &lt;a href="https://www.cursoemvideo.com/curso/html5-css3-modulo1/"&gt;HTML5 e CSS3&lt;/a&gt; do &lt;a href="https://cursoemvideo.com"&gt;Curso em Vídeo&lt;/a&gt;, que foi o pontapé inicial para se tornar um desenvolvedor.&lt;/p&gt;

&lt;p&gt;Aprendi HTML5 e CSS3 com esse curso, depois, fiz o &lt;a href="https://www.cursoemvideo.com/curso/javascript"&gt;curso de JavaScript&lt;/a&gt; também no &lt;strong&gt;Curso em Vídeo&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Novos caminhos
&lt;/h2&gt;

&lt;p&gt;Após terminar o curso de &lt;strong&gt;JavaScript&lt;/strong&gt;, me interessei pela linguagem Python, que até hoje, é a que mais uso para desenvolver meus projetos. Fiz muitos cursos de Python, na &lt;a href="https://dio.me"&gt;Digital Innovation One&lt;/a&gt;, &lt;a href="https://www.ev.org.br/"&gt;Fundação Bradesco&lt;/a&gt; e &lt;a href="https://cursoemvideo.com"&gt;Curso em Vídeo&lt;/a&gt; até sentir que eu estava dominando bem a linguagem.&lt;/p&gt;

&lt;p&gt;A partir disso, aprendi sobre banco de dados, servidores web e mais sobre front-end, com &lt;strong&gt;React.js&lt;/strong&gt; e &lt;strong&gt;Next.js&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Hoje, tenho certeza que tomei a decisão certa em se tornar um desenvolvedor. Tenho mais de 90 repositórios públicos e diferentes tipos projetos, como framework de servidor web, banco de dados, biblioteca de testes unitários e muito mais.&lt;/p&gt;

&lt;p&gt;É isso, essa foi a breve história da minha trajetória como desenvolvedor.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>python</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
