<?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: Bruno Duarte</title>
    <description>The latest articles on DEV Community by Bruno Duarte (@bduarte10).</description>
    <link>https://dev.to/bduarte10</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%2F1029503%2F84d01a0c-6bde-4c4b-9583-3170ab2b61fb.jpeg</url>
      <title>DEV Community: Bruno Duarte</title>
      <link>https://dev.to/bduarte10</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bduarte10"/>
    <language>en</language>
    <item>
      <title>VSCode + Ollama + Continue = chat e tab completions gratuitamente</title>
      <dc:creator>Bruno Duarte</dc:creator>
      <pubDate>Thu, 05 Sep 2024 19:27:19 +0000</pubDate>
      <link>https://dev.to/bduarte10/vscode-ollama-continue-chat-e-tab-completions-gratuitamente-3806</link>
      <guid>https://dev.to/bduarte10/vscode-ollama-continue-chat-e-tab-completions-gratuitamente-3806</guid>
      <description>&lt;h2&gt;
  
  
  Como instalar e usar LLMs localmente no seu VSCode:
&lt;/h2&gt;




&lt;p&gt;1- Baixe Ollama diretamente pelo site &lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;https://ollama.com/&lt;/a&gt;, ele ira criar seu server local para a LLM&lt;/p&gt;

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

&lt;p&gt;2- Baixe uma LLM (neste tutorial vamos usar o qwen2) no site &lt;a href="https://ollama.com/library" rel="noopener noreferrer"&gt;https://ollama.com/library&lt;/a&gt;&lt;/p&gt;

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

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

&lt;blockquote&gt;
&lt;p&gt;Você deve ter pelo menos 8 GB de RAM disponíveis para rodar os modelos de 7B, 16 GB para rodar os modelos de 13B e 32 GB para rodar os modelos de 33B.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;3- Abra o terminal e cole este comando:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

ollama run qwen2


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;4- Após a instalação ele ja estará rodando a LLM no seu terminal, onde você ja pode testar fazendo alguma pergunta. Digite /bye para sair&lt;/p&gt;

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

&lt;p&gt;5- Instale a extensão Continue no seu VSCode:&lt;/p&gt;

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

&lt;p&gt;6- Abra o Continue e verá a tela de adicionar modelo, selecione Ollama:&lt;/p&gt;

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

&lt;p&gt;7- Selecione Autodetect, ele ja reconhecerá a LLM instalada na sua máquina&lt;/p&gt;

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

&lt;p&gt;8- Chat funcionando! Para saber mais detalhes e comandos acesse: &lt;a href="https://docs.continue.dev/intro" rel="noopener noreferrer"&gt;https://docs.continue.dev/intro&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tab Autocomplete:
&lt;/h2&gt;




&lt;p&gt;1- Vamos configurar o Continue para utilizar sua LLM para o autocomplete no VSCode. Selecione a engrenagem no canto inferior direito da tela de chat&lt;/p&gt;

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

&lt;p&gt;2- Dentro do arquivo config.json: adicione:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

"tabAutocompleteModel": {
    "title": "Tab Autocomplete Model",
    "provider": "ollama",
    "model": "qwen2",
    "apiBase": "http://localhost:11434/"
  },


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Irá ficar mais ou menos assim:&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Depois você pode testar outras LLMs para o autocomplete, como a &lt;em&gt;starcoder2-3b&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;3- Tudo certo, agora você tem autocomplete via LLM local!&lt;/p&gt;

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

&lt;p&gt;Agora você tem todas as funcionalidades do Copilot na sua máquina, de forma totalmente gratuita.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>githubcopilot</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Implementando o Debounce no React: Melhorando a Experiência do Usuário em Eventos de Entrada</title>
      <dc:creator>Bruno Duarte</dc:creator>
      <pubDate>Tue, 04 Apr 2023 02:23:29 +0000</pubDate>
      <link>https://dev.to/bduarte10/implementando-o-debounce-no-react-melhorando-a-experiencia-do-usuario-em-eventos-de-entrada-56nc</link>
      <guid>https://dev.to/bduarte10/implementando-o-debounce-no-react-melhorando-a-experiencia-do-usuario-em-eventos-de-entrada-56nc</guid>
      <description>&lt;p&gt;O Debounce é uma técnica muito útil no desenvolvimento de aplicações React para lidar com eventos de entrada do usuário que ocorrem com muita frequência em curtos períodos de tempo, como a digitação em um campo de pesquisa. Quando um usuário digita em um campo de pesquisa, um evento é acionado a cada letra digitada, o que pode causar uma sobrecarga de solicitações ao servidor e um atraso na resposta para o usuário. É aí que entra o Debounce.&lt;/p&gt;

&lt;p&gt;O Debounce é um padrão de design que permite limitar a frequência com que uma função é chamada, aguardando um determinado período de tempo após o último evento antes de executar a função. Dessa forma, ele evita que a função seja chamada muitas vezes em rápida sucessão e reduz a carga no servidor.&lt;/p&gt;

&lt;p&gt;No React, existem várias maneiras de implementar o Debounce. Uma das maneiras mais comuns é usando o hook useEffect. Mas também é possível implementar usando outras técnicas, como o useCallback e a biblioteca Lodash.&lt;/p&gt;

&lt;p&gt;Para implementar o Debounce com o hook useEffect, basta usar o setTimeout para adiar a chamada da função até que o período de tempo especificado tenha passado. Aqui está um exemplo simples:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e1bzW1ZV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ca35mbzjuzmkpusl1y43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e1bzW1ZV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ca35mbzjuzmkpusl1y43.png" alt="Image description" width="880" height="663"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesse exemplo, a função passada para o setTimeout será executada após um atraso de 1000ms (1 segundo) após o último evento de digitação. Além disso, o retorno da useEffect é uma função que limpa o temporizador, garantindo que a função não seja executada caso o usuário continue digitando.&lt;/p&gt;

&lt;p&gt;Em resumo, o Debounce é uma técnica valiosa para reduzir a carga no servidor e melhorar a experiência do usuário em aplicações React. Com as diversas opções de implementação disponíveis, vale a pena experimentar e escolher a abordagem que melhor se adapta às necessidades da sua aplicação.&lt;/p&gt;

</description>
      <category>react</category>
      <category>frontend</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Qual a melhor maneira de consumir APIs</title>
      <dc:creator>Bruno Duarte</dc:creator>
      <pubDate>Sun, 19 Feb 2023 19:39:23 +0000</pubDate>
      <link>https://dev.to/bduarte10/qual-a-melhor-maneira-de-consumir-apis-1144</link>
      <guid>https://dev.to/bduarte10/qual-a-melhor-maneira-de-consumir-apis-1144</guid>
      <description>&lt;p&gt;Se você está trabalhando com React e precisa consumir APIs, provavelmente já se perguntou qual a melhor forma de fazer isso. Duas das opções mais populares são os hooks useEffect e useQuery, mas qual é a melhor maneira de consumir APIs em seus projetos?&lt;/p&gt;

&lt;p&gt;Neste artigo, exploraremos as diferenças entre esses dois hooks do React e examinaremos em quais situações cada um pode ser a melhor escolha para consumir APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que é o useEffect?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O useEffect é um dos hooks mais utilizados do React e permite executar efeitos colaterais em componentes funcionais. Esses efeitos podem incluir, por exemplo, a busca de dados de uma API, a atualização de estados de componentes ou a execução de outras operações que não afetam diretamente a renderização do componente.&lt;/p&gt;

&lt;p&gt;O useEffect é uma ferramenta poderosa e versátil, mas pode ficar um pouco complicado gerenciá-lo em projetos maiores, especialmente se você estiver consumindo várias APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que é o useQuery?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O useQuery, por outro lado, é um hook do React fornecido pela biblioteca react-query. Ele foi criado para tornar mais fácil a busca, cacheamento e atualização de dados em uma API. O useQuery utiliza uma abordagem baseada em consultas (queries) para gerenciar os dados da API, o que torna o processo de busca de dados mais eficiente e fácil de gerenciar.&lt;/p&gt;

&lt;p&gt;Com o useQuery, você pode especificar o endpoint da API e quaisquer parâmetros necessários na consulta e a biblioteca cuida do restante. Ele também possui recursos de cacheamento e atualização, que podem ser úteis em projetos maiores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quando usar useEffect?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O useEffect pode ser uma boa escolha em projetos menores ou em situações em que você não está lidando com muitas APIs ou não precisa do cacheamento e atualização automática de dados.&lt;/p&gt;

&lt;p&gt;Além disso, o useEffect é útil para situações em que você precisa executar operações que não estão diretamente relacionadas à API, como atualizações de estado, execução de animações ou manipulação do DOM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quando usar useQuery?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O useQuery pode ser uma melhor opção para projetos maiores ou em situações em que você precisa consumir várias APIs diferentes. Ele simplifica o processo de busca de dados e cuida do cacheamento e atualização automática de dados, o que pode ser muito útil em projetos em constante mudança.&lt;/p&gt;

&lt;p&gt;Além disso, o useQuery é útil para situações em que você precisa controlar o tempo de busca de dados, como por exemplo a definição de um tempo mínimo de intervalo entre as consultas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ambos os hooks useEffect e useQuery são ferramentas poderosas e podem ser úteis para consumir APIs em projetos React. No entanto, em geral, o useEffect é mais adequado para projetos menores ou em situações em que você precisa executar operações que não estão diretamente relacionadas à API.&lt;/p&gt;

&lt;p&gt;Já o useQuery é mais adequado para projetos maiores ou em situações em que você precisa consumir várias APIs diferentes e precisa de recursos de cacheamento e atualização automática de dados.&lt;/p&gt;

&lt;p&gt;Em resumo, a escolha entre o useEffect e o useQuery depende do tamanho e complexidade do seu projeto, bem como dos recursos de gerenciamento de dados que você precisa. Ambos são ferramentas úteis que podem ajudá-lo a consumir APIs em seus projetos React de maneira eficiente e eficaz.&lt;/p&gt;

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