<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt_BR"><generator uri="https://jekyllrb.com/" version="4.3.3">Jekyll</generator><link href="https://franciscochaves.com.br/feed.xml" rel="self" type="application/atom+xml" /><link href="https://franciscochaves.com.br/" rel="alternate" type="text/html" hreflang="pt_BR" /><updated>2026-06-14T12:07:24+00:00</updated><id>https://franciscochaves.com.br/feed.xml</id><title type="html">Francisco Chaves</title><subtitle>Blog sobre programação, infraestrutura, DevOps e tecnologias em geral.
</subtitle><author><name>Francisco Chaves</name></author><entry xml:lang="pt_BR"><title type="html">cURL: Como Executar Requisições Longas com Arquivo de Configuração (-K)</title><link href="https://franciscochaves.com.br/blog/curl-requisicoes-longas-com-arquivo-de-configuracao/" rel="alternate" type="text/html" title="cURL: Como Executar Requisições Longas com Arquivo de Configuração (-K)" /><published>2026-02-27T06:00:00+00:00</published><updated>2026-02-27T06:00:00+00:00</updated><id>https://franciscochaves.com.br/blog/curl-requisicoes-longas-com-arquivo-de-configuracao</id><content type="html" xml:base="https://franciscochaves.com.br/blog/curl-requisicoes-longas-com-arquivo-de-configuracao/"><![CDATA[<p>Olá, pessoal! Neste post, você vai aprender uma dica prática para quem usa <strong>cURL</strong> no dia a dia.</p>

<p>Se você já tentou executar um comando <code class="language-plaintext highlighter-rouge">curl</code> com URL muito longa, muitos headers e payload grande, pode ter recebido erro como <code class="language-plaintext highlighter-rouge">Argument list too long</code> ou percebido que o terminal cortou parte do comando.</p>

<p>Isso acontece porque o shell do sistema operacional tem limite de tamanho para argumentos passados na linha de comando.</p>

<h2 id="a-solução-arquivo-de-configuração--k">A solução: arquivo de configuração (<code class="language-plaintext highlighter-rouge">-K</code>)</h2>

<p>O <strong>cURL</strong> possui a opção <code class="language-plaintext highlighter-rouge">-K</code> (ou <code class="language-plaintext highlighter-rouge">--config</code>), que permite ler os argumentos a partir de um arquivo de texto, em vez de enviar tudo diretamente na linha de comando.</p>

<h3 id="como-usar">Como usar</h3>

<p>Crie um arquivo, por exemplo <code class="language-plaintext highlighter-rouge">curl-config.txt</code>, e adicione os parâmetros da requisição. Você pode informar URL, cabeçalhos, dados e outras opções suportadas pelo cURL.</p>

<p>Exemplo de arquivo <code class="language-plaintext highlighter-rouge">curl-config.txt</code>:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>url = "https://api.exemplo.com/v1/transacoes?filtro=complexo&amp;data_inicio=2024-01-01&amp;data_fim=2024-12-31"
header = "Content-Type: application/json"
header = "Authorization: Bearer SEU_TOKEN_GIGANTE_QUE_ESTOURA_O_LIMITE_DO_TERMINAL..."
data = "{\"usuario\": \"teste\", \"detalhes\": \"payload muito grande...\"}"
verbose
</code></pre></div></div>

<p>A sintaxe básica é <code class="language-plaintext highlighter-rouge">opção = valor</code> para parâmetros com valor e apenas <code class="language-plaintext highlighter-rouge">opção</code> para flags (como <code class="language-plaintext highlighter-rouge">verbose</code> e <code class="language-plaintext highlighter-rouge">insecure</code>).</p>

<p>Para executar a requisição:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-K</span> curl-config.txt
</code></pre></div></div>

<p>Ou, na versão longa:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">--config</span> curl-config.txt
</code></pre></div></div>

<h3 id="vantagens">Vantagens</h3>

<ol>
  <li><strong>Menos risco de estourar limite de terminal:</strong> reduz erros por comandos longos.</li>
  <li><strong>Mais organização:</strong> fica mais fácil manter e versionar chamadas complexas.</li>
  <li><strong>Mais segurança:</strong> evita expor tokens e dados sensíveis no histórico de comandos.</li>
</ol>

<h2 id="conclusão">Conclusão</h2>

<p>Essa funcionalidade nativa do cURL ajuda bastante em cenários de debug, integração e automação de chamadas HTTP mais complexas.</p>

<p>Se você lida com APIs no dia a dia, vale a pena adotar esse padrão.</p>

<h2 id="referências">Referências</h2>

<p>cURL. Documentation: <code class="language-plaintext highlighter-rouge">--config</code>. Disponível em: <a href="https://curl.se/docs/manpage.html#-K">https://curl.se/docs/manpage.html#-K</a>. Acesso em: 14 fev. 2026.</p>]]></content><author><name>Francisco Chaves</name></author><category term="Linux" /><category term="cURL" /><category term="HTTP" /><category term="Terminal" /><summary type="html"><![CDATA[Aprenda a contornar o limite de caracteres do terminal ao fazer requisições cURL usando a opção -K (config).]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://franciscochaves.com.br/assets/img/blog/2026/02/logo-curl-requisicoes-longas-com-arquivo-de-configuracao.png" /><media:content medium="image" url="https://franciscochaves.com.br/assets/img/blog/2026/02/logo-curl-requisicoes-longas-com-arquivo-de-configuracao.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="pt_BR"><title type="html">NPM: Como Criar e Publicar um Pacote</title><link href="https://franciscochaves.com.br/blog/npm-como-criar-e-publicar-um-pacote/" rel="alternate" type="text/html" title="NPM: Como Criar e Publicar um Pacote" /><published>2026-02-25T06:00:00+00:00</published><updated>2026-02-25T06:00:00+00:00</updated><id>https://franciscochaves.com.br/blog/npm-como-criar-e-publicar-um-pacote</id><content type="html" xml:base="https://franciscochaves.com.br/blog/npm-como-criar-e-publicar-um-pacote/"><![CDATA[<p>Olá, pessoal! Hoje vamos falar sobre o <strong>npm</strong> (Node Package Manager), ferramenta essencial para quem desenvolve com JavaScript. O npm é o gerenciador de pacotes padrão do Node.js e permite instalar, compartilhar e gerenciar dependências.</p>

<p>Neste post, você vai aprender:</p>

<ul>
  <li>O que é npm</li>
  <li>Como criar um pacote npm</li>
  <li>Como publicar no registro npm</li>
  <li>Como testar o pacote publicado</li>
</ul>

<h2 id="o-que-é-npm">O que é npm?</h2>

<p>O npm facilita o compartilhamento de código reutilizável. Com ele, você instala bibliotecas de terceiros em seus projetos (como Express, React e outras) e também pode publicar seus próprios pacotes para a comunidade.</p>

<h2 id="pré-requisitos">Pré-requisitos</h2>

<p>Antes de começar, você precisa de:</p>

<ul>
  <li>Node.js instalado (18+ ou superior, LTS recomendado)</li>
  <li>Conta no <a href="https://www.npmjs.com/">npmjs.com</a></li>
</ul>

<p>Se ainda não tiver conta, crie gratuitamente.</p>

<h2 id="criando-um-pacote-npm">Criando um pacote npm</h2>

<p>Vamos criar um pacote simples para calcular o fatorial de um número.</p>

<p><strong>Crie uma pasta do projeto:</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir </span>meu-pacote-fatorial
<span class="nb">cd </span>meu-pacote-fatorial
</code></pre></div></div>

<p><strong>Inicialize o projeto:</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm init <span class="nt">-y</span>
</code></pre></div></div>

<p>Isso cria o arquivo <code class="language-plaintext highlighter-rouge">package.json</code>.</p>

<p><strong>Edite o <code class="language-plaintext highlighter-rouge">package.json</code>:</strong></p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"@seu-usuario/meu-pacote-fatorial"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.0.0"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Um pacote simples para calcular fatorial"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"main"</span><span class="p">:</span><span class="w"> </span><span class="s2">"index.js"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"scripts"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"test"</span><span class="p">:</span><span class="w"> </span><span class="s2">"node test.js"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Seu Nome"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"license"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MIT"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Use seu usuário real no escopo (<code class="language-plaintext highlighter-rouge">@seu-usuario</code>) para evitar conflito de nome.</p>

<p><strong>Crie o código principal (<code class="language-plaintext highlighter-rouge">index.js</code>):</strong></p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nf">fatorial</span><span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">if </span><span class="p">(</span><span class="o">!</span><span class="nb">Number</span><span class="p">.</span><span class="nf">isInteger</span><span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">||</span> <span class="nx">n</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">throw</span> <span class="k">new</span> <span class="nc">Error</span><span class="p">(</span><span class="dl">'</span><span class="s1">Informe um número inteiro maior ou igual a zero.</span><span class="dl">'</span><span class="p">);</span>
  <span class="p">}</span>

  <span class="k">if </span><span class="p">(</span><span class="nx">n</span> <span class="o">===</span> <span class="mi">0</span> <span class="o">||</span> <span class="nx">n</span> <span class="o">===</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">return</span> <span class="nx">n</span> <span class="o">*</span> <span class="nf">fatorial</span><span class="p">(</span><span class="nx">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>

<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="nx">fatorial</span><span class="p">;</span>
</code></pre></div></div>

<p><strong>Crie um teste simples (<code class="language-plaintext highlighter-rouge">test.js</code>):</strong></p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">fatorial</span> <span class="o">=</span> <span class="nf">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">./index</span><span class="dl">'</span><span class="p">);</span>

<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Fatorial de 5:</span><span class="dl">'</span><span class="p">,</span> <span class="nf">fatorial</span><span class="p">(</span><span class="mi">5</span><span class="p">));</span> <span class="c1">// 120</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Fatorial de 0:</span><span class="dl">'</span><span class="p">,</span> <span class="nf">fatorial</span><span class="p">(</span><span class="mi">0</span><span class="p">));</span> <span class="c1">// 1</span>
</code></pre></div></div>

<p><strong>Teste localmente:</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">test</span>
</code></pre></div></div>

<p>Se estiver tudo certo, os resultados serão exibidos no terminal.</p>

<h2 id="publicando-o-pacote">Publicando o pacote</h2>

<p><strong>Faça login no npm:</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm login
</code></pre></div></div>

<p><strong>Confirme o usuário autenticado (opcional):</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">whoami</span>
</code></pre></div></div>

<p><strong>Publique o pacote:</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm publish <span class="nt">--access</span> public
</code></pre></div></div>

<p>Para pacotes com escopo (<code class="language-plaintext highlighter-rouge">@usuario/pacote</code>), <code class="language-plaintext highlighter-rouge">--access public</code> é importante na primeira publicação.</p>

<h2 id="usando-o-pacote-publicado">Usando o pacote publicado</h2>

<p>Agora vamos testar o pacote em outro projeto.</p>

<p><strong>Crie um novo projeto de teste:</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir </span>teste-pacote
<span class="nb">cd </span>teste-pacote
npm init <span class="nt">-y</span>
</code></pre></div></div>

<p><strong>Instale o pacote:</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">install</span> @seu-usuario/meu-pacote-fatorial
</code></pre></div></div>

<p>Substitua pelo nome real do pacote.</p>

<p><strong>Crie o arquivo <code class="language-plaintext highlighter-rouge">app.js</code>:</strong></p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">fatorial</span> <span class="o">=</span> <span class="nf">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">@seu-usuario/meu-pacote-fatorial</span><span class="dl">'</span><span class="p">);</span>

<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Testando o pacote:</span><span class="dl">'</span><span class="p">);</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Fatorial de 4:</span><span class="dl">'</span><span class="p">,</span> <span class="nf">fatorial</span><span class="p">(</span><span class="mi">4</span><span class="p">));</span> <span class="c1">// 24</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Fatorial de 6:</span><span class="dl">'</span><span class="p">,</span> <span class="nf">fatorial</span><span class="p">(</span><span class="mi">6</span><span class="p">));</span> <span class="c1">// 720</span>
</code></pre></div></div>

<p><strong>Execute:</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>node app.js
</code></pre></div></div>

<p><img src="/assets/img/blog/2026/02/executando-package-npm-publicado.png" alt="Pacote NPM publicado" /></p>

<p>Pronto! Você criou, publicou e testou seu primeiro pacote npm.</p>

<h2 id="dicas-adicionais">Dicas adicionais</h2>

<ul>
  <li>Sempre aumente a versão antes de republicar (<code class="language-plaintext highlighter-rouge">npm version patch</code>, <code class="language-plaintext highlighter-rouge">minor</code> ou <code class="language-plaintext highlighter-rouge">major</code>).</li>
  <li>Adicione um <code class="language-plaintext highlighter-rouge">README.md</code> com instruções de uso.</li>
  <li>Inclua testes automatizados (por exemplo, com Jest ou Vitest).</li>
</ul>

<p>Você pode conferir o código-fonte completo de exemplo no repositório: <a href="https://github.com/franciscojsc/meu-pacote-fatorial">meu-pacote-fatorial no GitHub</a>.</p>

<p>Se tiver dúvidas, deixe nos comentários.</p>]]></content><author><name>Francisco Chaves</name></author><category term="Front-end" /><category term="npm" /><category term="JavaScript" /><category term="Node.js" /><category term="Pacote" /><category term="Publicação" /><summary type="html"><![CDATA[Aprenda o que é o npm, como criar um pacote JavaScript e publicá-lo para que outros desenvolvedores possam usá-lo. Ao final, teste o pacote criado.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://franciscochaves.com.br/assets/img/blog/2026/02/logo-npm-criar-e-publicar-package.png" /><media:content medium="image" url="https://franciscochaves.com.br/assets/img/blog/2026/02/logo-npm-criar-e-publicar-package.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="pt_BR"><title type="html">Módulos em Node.js: Tipos, Diferenças e Exemplos Práticos</title><link href="https://franciscochaves.com.br/blog/modulos-em-nodejs-tipos-e-diferencas/" rel="alternate" type="text/html" title="Módulos em Node.js: Tipos, Diferenças e Exemplos Práticos" /><published>2026-02-20T06:00:00+00:00</published><updated>2026-02-20T06:00:00+00:00</updated><id>https://franciscochaves.com.br/blog/modulos-em-nodejs-tipos-e-diferencas</id><content type="html" xml:base="https://franciscochaves.com.br/blog/modulos-em-nodejs-tipos-e-diferencas/"><![CDATA[<p>Olá pessoal, hoje vamos explorar o universo dos módulos no <strong><a href="/blog/instale-nodejs-no-xubuntu/">Node.js</a></strong>.</p>

<p>Os módulos são blocos de código encapsulados que podem ser reutilizados em diferentes partes de uma aplicação. No Node.js, cada arquivo é tratado como um módulo separado, o que ajuda a manter o código organizado, modular e fácil de manter.</p>

<p>Neste artigo, vamos ver os tipos de módulos no Node.js, as diferenças entre os sistemas de módulos (CommonJS e ES Modules) e exemplos práticos.</p>

<p><strong>📦 Repositório de Exemplos:</strong> Todos os exemplos deste artigo estão disponíveis no GitHub para você clonar e executar: <a href="https://github.com/franciscojsc/nodejs-modules-examples">nodejs-modules-examples</a></p>

<ol>
  <li><a href="#tipos-de-módulos-no-nodejs">Tipos de Módulos no Node.js</a>
    <ol>
      <li><a href="#1-core-modules-módulos-nativos">Core Modules (Módulos Nativos)</a></li>
      <li><a href="#2-local-modules-módulos-locais">Local Modules (Módulos Locais)</a></li>
      <li><a href="#3-third-party-modules-módulos-de-terceiros">Third-party Modules (Módulos de Terceiros)</a></li>
    </ol>
  </li>
  <li><a href="#sistemas-de-módulos-commonjs-vs-es-modules">Sistemas de Módulos: CommonJS vs ES Modules</a>
    <ol>
      <li><a href="#1-commonjs-cjs">CommonJS (CJS)</a></li>
      <li><a href="#2-es-modules-esm">ES Modules (ESM)</a></li>
      <li><a href="#diferenças-chave">Diferenças Chave</a></li>
    </ol>
  </li>
</ol>

<h2 id="tipos-de-módulos-no-nodejs">Tipos de Módulos no Node.js</h2>

<p>Existem três tipos principais de módulos no Node.js:</p>

<ol>
  <li><strong>Core Modules (Módulos Nativos)</strong></li>
  <li><strong>Local Modules (Módulos Locais)</strong></li>
  <li><strong>Third-party Modules (Módulos de Terceiros)</strong></li>
</ol>

<h3 id="1-core-modules-módulos-nativos">1. Core Modules (Módulos Nativos)</h3>

<p>Estes são módulos que vêm embutidos na instalação do Node.js. Você não precisa instalá-los separadamente. Exemplos comuns incluem <code class="language-plaintext highlighter-rouge">http</code>, <code class="language-plaintext highlighter-rouge">fs</code> (file system), <code class="language-plaintext highlighter-rouge">path</code>, <code class="language-plaintext highlighter-rouge">os</code>, etc.</p>

<p><strong>Exemplo:</strong></p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">os</span> <span class="o">=</span> <span class="nf">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">os</span><span class="dl">'</span><span class="p">);</span>

<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Plataforma:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">os</span><span class="p">.</span><span class="nf">platform</span><span class="p">());</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Arquitetura:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">os</span><span class="p">.</span><span class="nf">arch</span><span class="p">());</span>
</code></pre></div></div>

<h3 id="2-local-modules-módulos-locais">2. Local Modules (Módulos Locais)</h3>

<p>São módulos criados por você dentro da sua aplicação. Eles podem conter funções, objetos ou variáveis que você deseja usar em outros arquivos do seu projeto.</p>

<p>Crie o arquivo <code class="language-plaintext highlighter-rouge">calculadora.js</code>:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">somar</span> <span class="o">=</span> <span class="p">(</span><span class="nx">a</span><span class="p">,</span> <span class="nx">b</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="nx">a</span> <span class="o">+</span> <span class="nx">b</span><span class="p">;</span>
<span class="kd">const</span> <span class="nx">subtrair</span> <span class="o">=</span> <span class="p">(</span><span class="nx">a</span><span class="p">,</span> <span class="nx">b</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="nx">a</span> <span class="o">-</span> <span class="nx">b</span><span class="p">;</span>

<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
  <span class="nx">somar</span><span class="p">,</span>
  <span class="nx">subtrair</span><span class="p">,</span>
<span class="p">};</span>
</code></pre></div></div>

<p>Agora importe no <code class="language-plaintext highlighter-rouge">app.js</code>:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">calculadora</span> <span class="o">=</span> <span class="nf">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">./calculadora</span><span class="dl">'</span><span class="p">);</span>

<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Soma:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">calculadora</span><span class="p">.</span><span class="nf">somar</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">3</span><span class="p">));</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Subtração:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">calculadora</span><span class="p">.</span><span class="nf">subtrair</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">3</span><span class="p">));</span>
</code></pre></div></div>

<h3 id="3-third-party-modules-módulos-de-terceiros">3. Third-party Modules (Módulos de Terceiros)</h3>

<p>São módulos criados pela comunidade e disponibilizados através do NPM (Node Package Manager). Para usá-los, você precisa instalá-los primeiro.</p>

<p>Instale a dependência <code class="language-plaintext highlighter-rouge">colors</code>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">install </span>colors
</code></pre></div></div>

<p>Utilize o pacote no seu código:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">colors</span> <span class="o">=</span> <span class="nf">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">colors</span><span class="dl">'</span><span class="p">);</span>

<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Olá, Mundo!</span><span class="dl">'</span><span class="p">.</span><span class="nx">green</span><span class="p">);</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Node.js é incrível</span><span class="dl">'</span><span class="p">.</span><span class="nx">rainbow</span><span class="p">);</span>
</code></pre></div></div>

<h2 id="sistemas-de-módulos-commonjs-vs-es-modules">Sistemas de Módulos: CommonJS vs ES Modules</h2>

<p>O Node.js suporta dois padrões principais de módulos: <strong>CommonJS</strong> (o padrão tradicional) e <strong>ES Modules</strong> (o padrão moderno do JavaScript).</p>

<h3 id="1-commonjs-cjs">1. CommonJS (CJS)</h3>

<p>É o sistema padrão do Node.js. Utiliza <code class="language-plaintext highlighter-rouge">require()</code> para importar e <code class="language-plaintext highlighter-rouge">module.exports</code> para exportar. É síncrono e foi projetado para uso no servidor.</p>

<p>Arquivo <code class="language-plaintext highlighter-rouge">logger.js</code>:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nf">log</span><span class="p">(</span><span class="nx">mensagem</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="s2">`[LOG]: </span><span class="p">${</span><span class="nx">mensagem</span><span class="p">}</span><span class="s2">`</span><span class="p">);</span>
<span class="p">}</span>

<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="nx">log</span><span class="p">;</span>
</code></pre></div></div>

<p>Arquivo <code class="language-plaintext highlighter-rouge">index.js</code>:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">log</span> <span class="o">=</span> <span class="nf">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">./logger</span><span class="dl">'</span><span class="p">);</span>
<span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Iniciando sistema...</span><span class="dl">'</span><span class="p">);</span>
</code></pre></div></div>

<p><strong>Nota:</strong> No exemplo acima, exportamos a função diretamente (<code class="language-plaintext highlighter-rouge">module.exports = log</code>). Se quiséssemos exportar múltiplos itens, usaríamos um objeto, como no exemplo da calculadora (<code class="language-plaintext highlighter-rouge">module.exports = { somar, subtrair }</code>).</p>

<h3 id="2-es-modules-esm">2. ES Modules (ESM)</h3>

<p>É o padrão oficial da linguagem JavaScript (ECMAScript). Utiliza <code class="language-plaintext highlighter-rouge">import</code> e <code class="language-plaintext highlighter-rouge">export</code>. É assíncrono e permite otimizações como <em>tree-shaking</em>.</p>

<p>Para usar ES Modules no Node.js, você pode usar a extensão <code class="language-plaintext highlighter-rouge">.mjs</code> ou adicionar <code class="language-plaintext highlighter-rouge">"type": "module"</code> no <code class="language-plaintext highlighter-rouge">package.json</code>.</p>

<p>Arquivo <code class="language-plaintext highlighter-rouge">saudacao.mjs</code>:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">export</span> <span class="kd">function</span> <span class="nf">ola</span><span class="p">(</span><span class="nx">nome</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">return</span> <span class="s2">`Olá, </span><span class="p">${</span><span class="nx">nome</span><span class="p">}</span><span class="s2">!`</span><span class="p">;</span>
<span class="p">}</span>

<span class="k">export</span> <span class="kd">const</span> <span class="nx">DATA_ATUAL</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Date</span><span class="p">();</span>
</code></pre></div></div>

<p>Arquivo <code class="language-plaintext highlighter-rouge">main.mjs</code>:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">ola</span><span class="p">,</span> <span class="nx">DATA_ATUAL</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">./saudacao.mjs</span><span class="dl">'</span><span class="p">;</span>

<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nf">ola</span><span class="p">(</span><span class="dl">'</span><span class="s1">Francisco</span><span class="dl">'</span><span class="p">));</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Data:</span><span class="dl">'</span><span class="p">,</span> <span class="nx">DATA_ATUAL</span><span class="p">);</span>
</code></pre></div></div>

<h3 id="exportação-padrão-default-export">Exportação Padrão (Default Export)</h3>

<p>Se o módulo tiver apenas um propósito principal (um único item), você pode usar <code class="language-plaintext highlighter-rouge">export default</code>. A sintaxe de importação muda (não usa chaves).</p>

<p>Arquivo <code class="language-plaintext highlighter-rouge">usuario.mjs</code>:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">export</span> <span class="k">default</span> <span class="kd">class</span> <span class="nc">Usuario</span> <span class="p">{</span>
  <span class="nf">constructor</span><span class="p">(</span><span class="nx">nome</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">this</span><span class="p">.</span><span class="nx">nome</span> <span class="o">=</span> <span class="nx">nome</span><span class="p">;</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Arquivo <code class="language-plaintext highlighter-rouge">teste.mjs</code>:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nx">Usuario</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">./usuario.mjs</span><span class="dl">'</span><span class="p">;</span> <span class="c1">// Sem chaves!</span>
<span class="kd">const</span> <span class="nx">user</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Usuario</span><span class="p">(</span><span class="dl">'</span><span class="s1">Maria</span><span class="dl">'</span><span class="p">);</span>
</code></pre></div></div>

<h3 id="diferenças-chave">Diferenças Chave</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Característica</th>
      <th style="text-align: left">CommonJS (CJS)</th>
      <th style="text-align: left">ES Modules (ESM)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><strong>Sintaxe de Importação</strong></td>
      <td style="text-align: left"><code class="language-plaintext highlighter-rouge">require()</code></td>
      <td style="text-align: left"><code class="language-plaintext highlighter-rouge">import ... from ...</code></td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Sintaxe de Exportação</strong></td>
      <td style="text-align: left"><code class="language-plaintext highlighter-rouge">module.exports</code></td>
      <td style="text-align: left"><code class="language-plaintext highlighter-rouge">export</code> / <code class="language-plaintext highlighter-rouge">export default</code></td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Carregamento</strong></td>
      <td style="text-align: left">Síncrono (bloqueante)</td>
      <td style="text-align: left">Assíncrono</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Uso no Navegador</strong></td>
      <td style="text-align: left">Não nativo (requer bundlers)</td>
      <td style="text-align: left">Nativo em navegadores modernos</td>
    </tr>
  </tbody>
</table>

<h2 id="conclusão">Conclusão</h2>

<p>Entender a diferença entre CommonJS e ES Modules é essencial para qualquer desenvolvedor Node.js moderno. Espero que este guia tenha esclarecido os conceitos!</p>

<p>Valeu pessoal 😎✌️!</p>

<h2 id="referências">Referências</h2>

<p>Node.js. Documentation. <strong>Node.js</strong>, 2024. Disponível em: <a href="https://nodejs.org/docs/latest/api/modules.html">https://nodejs.org/docs/latest/api/modules.html</a>. Acesso em: 13 fev. 2026.</p>

<p>MDN Web Docs. JavaScript modules. <strong>MDN</strong>, 2024. Disponível em: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules</a>. Acesso em: 15 fev. 2026.</p>]]></content><author><name>Francisco Chaves</name></author><category term="Back-end" /><category term="JavaScript" /><category term="Módulos" /><category term="Node.js" /><summary type="html"><![CDATA[Entenda os tipos de módulos no Node.js (Core, Local, Third-party) e as diferenças entre CommonJS e ES Modules.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://franciscochaves.com.br/assets/img/blog/2026/02/logo-nodejs-modules.png" /><media:content medium="image" url="https://franciscochaves.com.br/assets/img/blog/2026/02/logo-nodejs-modules.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="pt_BR"><title type="html">Observe alterações em arquivos com Node.js –watch</title><link href="https://franciscochaves.com.br/blog/nodejs-modo-watch-observe-alteracoes/" rel="alternate" type="text/html" title="Observe alterações em arquivos com Node.js –watch" /><published>2026-02-13T06:00:00+00:00</published><updated>2026-02-13T06:00:00+00:00</updated><id>https://franciscochaves.com.br/blog/nodejs-modo-watch-observe-alteracoes</id><content type="html" xml:base="https://franciscochaves.com.br/blog/nodejs-modo-watch-observe-alteracoes/"><![CDATA[<p>Olá pessoal, hoje vamos falar sobre uma funcionalidade nativa do <strong><a href="/blog/instale-nodejs-no-xubuntu/">Node.js</a></strong> que simplifica muito o fluxo de desenvolvimento: o modo <strong><code class="language-plaintext highlighter-rouge">--watch</code></strong>.</p>

<p>Antigamente, para que nossa aplicação reiniciasse automaticamente sempre que alterássemos um arquivo, precisávamos recorrer a ferramentas de terceiros bastante populares, como o <strong>Nodemon</strong> ou o <strong>pm2</strong> (em ambiente de desenvolvimento). Porém, a partir das versões mais recentes do Node.js, essa capacidade já vem integrada, eliminando a necessidade de dependências extras para essa finalidade.</p>

<h2 id="o-que-é-o-modo-watch">O que é o modo Watch?</h2>

<p>O modo watch é uma funcionalidade que observa seus arquivos e reinicia o processo do Node.js sempre que uma alteração é detectada. Isso é essencial durante o desenvolvimento, pois permite que você veja as mudanças refletidas em tempo real sem precisar parar e iniciar o servidor manualmente a todo momento.</p>

<p>Essa funcionalidade foi introduzida como experimental na versão 18.11.0 e tornou-se estável na versão 20.</p>

<h2 id="como-utilizar">Como utilizar</h2>

<p>Para utilizar, basta adicionar a flag <code class="language-plaintext highlighter-rouge">--watch</code> ao executar seu script:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>node <span class="nt">--watch</span> index.js
</code></pre></div></div>

<p>Se você estiver utilizando um arquivo de configuração como o <code class="language-plaintext highlighter-rouge">package.json</code>, pode adicionar ao seu script de dev:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nl">"scripts"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="nl">"dev"</span><span class="p">:</span><span class="w"> </span><span class="s2">"node --watch index.js"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<h2 id="exemplo-prático">Exemplo Prático</h2>

<p>Vamos criar um <strong><a href="/blog/servidor-web-com-nodejs/">servidor HTTP simples</a></strong> para testar.</p>

<p>Crie um arquivo chamado <code class="language-plaintext highlighter-rouge">server.js</code>:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">http</span> <span class="o">=</span> <span class="nf">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">node:http</span><span class="dl">'</span><span class="p">);</span>

<span class="kd">const</span> <span class="nx">server</span> <span class="o">=</span> <span class="nx">http</span><span class="p">.</span><span class="nf">createServer</span><span class="p">((</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span>
  <span class="nx">res</span><span class="p">.</span><span class="nf">writeHead</span><span class="p">(</span><span class="mi">200</span><span class="p">,</span> <span class="p">{</span> <span class="dl">'</span><span class="s1">Content-Type</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">text/plain; charset=utf-8</span><span class="dl">'</span> <span class="p">});</span>
  <span class="nx">res</span><span class="p">.</span><span class="nf">end</span><span class="p">(</span><span class="dl">'</span><span class="s1">Olá, Node.js Watch!</span><span class="dl">'</span><span class="p">);</span>
<span class="p">});</span>

<span class="nx">server</span><span class="p">.</span><span class="nf">listen</span><span class="p">(</span><span class="mi">3000</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
  <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Servidor rodando em http://localhost:3000</span><span class="dl">'</span><span class="p">);</span>
<span class="p">});</span>
</code></pre></div></div>

<p>Execute o servidor com o modo watch:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>node <span class="nt">--watch</span> server.js
</code></pre></div></div>

<p>Agora, altere a mensagem <code class="language-plaintext highlighter-rouge">'Olá, Node.js Watch!'</code> para <code class="language-plaintext highlighter-rouge">'Olá, Mundo Atualizado!'</code> e salve o arquivo.</p>

<p>Você verá no terminal que o processo foi reiniciado automaticamente:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Restarting <span class="s1">'server.js'</span>
Servidor rodando em http://localhost:3000
</code></pre></div></div>

<p><img src="/assets/img/blog/2026/02/nodejs-modo-watch-terminal-execucao.png" alt="Execução no terminal com modo watch" /></p>

<p>Ao acessar <code class="language-plaintext highlighter-rouge">http://localhost:3000</code>, a nova mensagem já estará disponível.</p>

<p><img src="/assets/img/blog/2026/02/nodejs-modo-watch-navegador-resultado.png" alt="Resultado no navegador" /></p>

<h2 id="observando-diretórios-específicos">Observando diretórios específicos</h2>

<p>Por padrão, o <code class="language-plaintext highlighter-rouge">--watch</code> observa o arquivo de entrada e suas dependências. Se você precisar observar arquivos ou diretórios específicos que não são importados diretamente, pode usar a flag <code class="language-plaintext highlighter-rouge">--watch-path</code>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>node <span class="nt">--watch</span> <span class="nt">--watch-path</span><span class="o">=</span>./src <span class="nt">--watch-path</span><span class="o">=</span>./config server.js
</code></pre></div></div>

<h2 id="conclusão">Conclusão</h2>

<p>A flag <code class="language-plaintext highlighter-rouge">--watch</code> é uma adição muito bem-vinda ao ecossistema do Node.js, reduzindo a complexidade dos projetos e a quantidade de dependências de desenvolvimento (<em>devDependencies</em>). Se você já está usando o Node.js 18.11+ ou superior, vale a pena experimentar e aposentar o nodemon em seus novos projetos.</p>

<p>Valeu pessoal 😎✌️!</p>

<h2 id="referências">Referências</h2>

<p>NODE.JS. Documentation: Command-line options. Disponível em: <a href="https://nodejs.org/api/cli.html#--watch">https://nodejs.org/api/cli.html#–watch</a>.</p>]]></content><author><name>Francisco Chaves</name></author><category term="Back-end" /><category term="JavaScript" /><category term="Node.js" /><category term="Produtividade" /><summary type="html"><![CDATA[Utilize a funcionalidade nativa do Node.js para reiniciar automaticamente a aplicação ao detectar alterações nos arquivos.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://franciscochaves.com.br/assets/img/blog/2026/02/logo-nodejs-modo-watch-observe-alteracoes.png" /><media:content medium="image" url="https://franciscochaves.com.br/assets/img/blog/2026/02/logo-nodejs-modo-watch-observe-alteracoes.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="pt_BR"><title type="html">Instale o Flameshot no Windows 11</title><link href="https://franciscochaves.com.br/blog/instale-o-flameshot-no-windows-11/" rel="alternate" type="text/html" title="Instale o Flameshot no Windows 11" /><published>2025-03-08T06:00:00+00:00</published><updated>2025-03-08T06:00:00+00:00</updated><id>https://franciscochaves.com.br/blog/instale-o-flameshot-no-windows-11</id><content type="html" xml:base="https://franciscochaves.com.br/blog/instale-o-flameshot-no-windows-11/"><![CDATA[<p>Olá pessoal, hoje iremos realizar a instalação do programa <strong>Flameshot</strong> no sistema operacional Windows 11. O <strong>Flameshot</strong> é utilizado para realizar captura de tela e fazer marcações muito útil para compartilhar figuras com comentários e observações.</p>

<p>Acesse o <a href="https://flameshot.org/"><em>site</em> do <strong>Flameshot</strong></a> e clique em “D<em>ownload”.</em></p>

<p><img src="/assets/img/blog/2025/03/site-flameshot-tela-inicial.png" alt="Site Flameshot tela inicial" /></p>

<p>Selecione o sistema operacional e clique em “<em>Download Installer</em>”.</p>

<p><img src="/assets/img/blog/2025/03/site-flameshot-download.png" alt="Site do Flameshot opção de download" /></p>

<p>Após o download, clique no instalador para iniciar o processo de instalação do <strong>Flameshot</strong> e clique em “<em>Next”</em> .</p>

<p><img src="/assets/img/blog/2025/03/flameshot-instalacao-tela-inicial.png" alt="Flameshot Instalação tela inicial" /></p>

<p>Aceite o termos e clique em “<em>Next”</em>.</p>

<p><img src="/assets/img/blog/2025/03/flameshot-instalacao-tela-termos-de-licensa.png" alt="Flameshot Instalação tela termos de licença" /></p>

<p>Local de instalação do programa, clique em “<em>Next”</em> para confirmar.</p>

<p><img src="/assets/img/blog/2025/03/flameshot-instalacao-tela-local-de-instalacao.png" alt="Flameshot Instalação tela local de instalação" /></p>

<p>Para finalizar a instalação clique em “<em>Install”.</em></p>

<p><img src="/assets/img/blog/2025/03/flameshot-instalacao-tela-conclusao.png" alt="Flameshot Instalação tela conclusão" /></p>

<p>Após a instalação realizada, pesquise por <strong>Flameshot</strong> no sistema e inicie o programa.</p>

<p><img src="/assets/img/blog/2025/03/flameshot-pesquisa-programas.png" alt="Pesquisa Programas" /></p>

<p>O ícone do <strong>Flameshot</strong> será exibido na barra de tarefas.</p>

<p><img src="/assets/img/blog/2025/03/flameshot-barra-de-tarefas-icone.png" alt="Barra de Tarefas ícone Flameshot" /></p>

<p>Clique com o botão direito do mouse no ícone e selecione “Configuração” &gt; “Geral”, marque a opção “Executar junto ao sistema” para quando inicializar o computador o <strong>Flameshot</strong> esteja em execução.</p>

<p><img src="/assets/img/blog/2025/03/flameshot-configuracoes.png" alt="Flameshot Configurações" /></p>

<p>Para definir o <strong>Flameshot</strong> com a ferramenta de captura de tela padrão, será necessário alguns passos.</p>

<p>Pesquise por “Configurações”.</p>

<p><img src="/assets/img/blog/2025/03/flameshot-configuracoes-do-sistema.png" alt="Configurações do Sistema" /></p>

<p>Selecione “Acessibilidade” &gt; “Teclado”</p>

<p><img src="/assets/img/blog/2025/03/flameshot-configuracoes-acessibilidade.png" alt="Configurações Acessibilidade" /></p>

<p><img src="/assets/img/blog/2025/03/flameshot-configuracoes-acessibilidade-opcoes-interacao.png" alt="Configurações Acessibilidade Opções de Interação" /></p>

<p>Desative a opção “Use a tecla PrtSc para abrir a captura de tela”.</p>

<p><img src="/assets/img/blog/2025/03/flameshot-configuracoes-acessibilidade-teclado-opcoes.png" alt="Configurações Acessibilidade Teclado Opções" /></p>

<p><img src="/assets/img/blog/2025/03/flameshot-configuracoes-acessibilidade-teclado-opcao-prtsc-desativar.png" alt="Configurações Acessibilidade Teclado Opção PrtSc Desativar" /></p>

<p>Reinicie a máquina e clique no botão de <strong>PrtSc</strong>  para realizar a capturar de tela do computador com o <strong>Flameshot</strong>.</p>

<p>Valeu pessoal 😎✌️</p>

<h2 id="referências">Referências</h2>

<p><strong>FLAMESHOT</strong>. Flameshot | Open Source Screenshot Software. Disponível em: <a href="https://flameshot.org/">https://flameshot.org/</a>. Acesso em: 5 mar. 2025.</p>

<p><strong>MICROSOFT</strong>. Como faço para voltar a usar o Flameshot como ferramenta de captura?. Disponível em: <a href="https://answers.microsoft.com/pt-br/windows/forum/all/como-fa%C3%A7o-para-voltar-a-usar-o-flameshot-como/d0551ae5-508d-42f3-8e26-6921a0c90b0f">https://answers.microsoft.com/pt-br/windows/forum/all/como-faço-para-voltar-a-usar-o-flameshot-como/d0551ae5-508d-42f3-8e26-6921a0c90b0f</a>. Acesso em: 5 mar. 2025.</p>

<p><strong>GITHUB</strong>. Can’t launch Flameshot after updating Windows 11 #3234. Disponível em: <a href="https://github.com/flameshot-org/flameshot/issues/3234#issuecomment-1597446267">https://github.com/flameshot-org/flameshot/issues/3234#issuecomment-1597446267</a>. Acesso em: 5 mar. 2025.</p>]]></content><author><name>Francisco Chaves</name></author><category term="Ferramentas" /><category term="Flameshot" /><category term="Windows" /><summary type="html"><![CDATA[Aprenda a instalar e configurar o Flameshot no Windows 11 de forma rápida e fácil!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://franciscochaves.com.br/assets/img/blog/2025/03/logo-instale-flameshot-no-windows-11.png" /><media:content medium="image" url="https://franciscochaves.com.br/assets/img/blog/2025/03/logo-instale-flameshot-no-windows-11.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="pt_BR"><title type="html">Instale o DbGate no Windows 11</title><link href="https://franciscochaves.com.br/blog/instale-o-dbgate-no-windows-11/" rel="alternate" type="text/html" title="Instale o DbGate no Windows 11" /><published>2025-03-06T06:00:00+00:00</published><updated>2025-03-06T06:00:00+00:00</updated><id>https://franciscochaves.com.br/blog/instale-o%20dbgate-no-windows-11</id><content type="html" xml:base="https://franciscochaves.com.br/blog/instale-o-dbgate-no-windows-11/"><![CDATA[<p>Olá, pessoal! Hoje vamos instalar o <strong>DbGate</strong> no <strong>Windows 11</strong>. Essa ferramenta <strong>gratuita e de código aberto</strong> permite conectar-se a diversos bancos de dados, como <strong>MySQL, PostgreSQL, SQL Server, MongoDB</strong>, entre outros. Além disso, é <strong>cross-platform</strong>, compatível com <strong>Windows, Linux, macOS e Web Browser</strong>, oferecendo uma interface intuitiva e suporte a consultas SQL e NoSQL para facilitar a administração dos dados.</p>

<p>Para iniciar acesse o <a href="https://dbgate.org/"><em>site</em> do DbGate</a> e clique em “<em>Download</em>”.</p>

<p><img src="/assets/img/blog/2025/03/site-dbgate-tela-inicial.png" alt="Site DbGate tela inicial" /></p>

<p>Clique na opção “<em>Community edition</em>”.</p>

<p><img src="/assets/img/blog/2025/03/site-dbgate-download.png" alt="Site DbGate tela de download" /></p>

<p>Selecione o sistema operacional “Windows” e clique na opção “<em>Installer</em>”.</p>

<p><img src="/assets/img/blog/2025/03/site-dbgate-download-community-edition.png" alt="Site DbGate tela de download community edition" /></p>

<p>Após o <em>download</em> do arquivo, clique no arquivo executável para realizar a instalação. O processo de instalação é simples e logo em seguida será apresentada a tela inicial do <strong>DbGate</strong>.</p>

<p><img src="/assets/img/blog/2025/03/dbgate-tela-inicial.png" alt="DbGate tela inicial" /></p>

<p>Para alterar o tema do aplicativo, clique em “<em>View</em>” &gt; “<em>Change theme</em>”.</p>

<p><img src="/assets/img/blog/2025/03/dbgate-selecionar-opcao-alterar-tema.png" alt="DbGate selecionar opção alterar tema" /></p>

<p>É possível escolher entre dois temas: <em>Light</em> ou <em>Dark</em>.</p>

<p><img src="/assets/img/blog/2025/03/dbgate-opcoes-de-temas.png" alt="DbGate opções de temas" /></p>

<p>Tema <em>Dark</em> selecionado.</p>

<p><img src="/assets/img/blog/2025/03/dbgate-tema-dark.png" alt="DbGate tema dark" /></p>

<p>Alguns Bancos de dados que o <strong>DbGate</strong> suporta.</p>

<p><img src="/assets/img/blog/2025/03/dbgate-databases.png" alt="DbGate bancos de dados suportados" /></p>

<p>Agora você já sabe como instalar e começar a usar o <strong>DbGate</strong> no Windows 11! 🚀</p>

<p>Se este tutorial te ajudou, compartilhe com seus amigos e deixe seu comentário. Até a próxima! 😎✌</p>

<h2 id="referências">Referências</h2>

<p><strong>DBGATE.</strong> The Smartest SQL+NoSQL Database Client. Disponível em: <a href="https://dbgate.org/">https://dbgate.org/</a>. Acesso em: 5 mar. 2025.</p>]]></content><author><name>Francisco Chaves</name></author><category term="Ferramentas" /><category term="Banco de dados" /><category term="DbGate" /><category term="Windows" /><summary type="html"><![CDATA[Tutorial passo a passo para instalar o DbGate no Windows 11. Aprenda a baixar, instalar e personalizar o tema da ferramenta para gerenciar bancos de dados como MySQL, PostgreSQL e MongoDB.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://franciscochaves.com.br/assets/img/blog/2025/03/logo-instale-dbgate-no-windows-11.png" /><media:content medium="image" url="https://franciscochaves.com.br/assets/img/blog/2025/03/logo-instale-dbgate-no-windows-11.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="pt_BR"><title type="html">SQL Server no Docker</title><link href="https://franciscochaves.com.br/blog/sql-server-no-docker/" rel="alternate" type="text/html" title="SQL Server no Docker" /><published>2024-06-08T06:00:00+00:00</published><updated>2024-06-08T06:00:00+00:00</updated><id>https://franciscochaves.com.br/blog/sql-server-no-docker</id><content type="html" xml:base="https://franciscochaves.com.br/blog/sql-server-no-docker/"><![CDATA[<p>Olá pessoal, hoje vamos apender como executar o <strong>SQL Server</strong> no Docker. o <strong>SQL Server</strong>, um dos sistemas de gerenciamento de banco de dados mais utilizados no mundo.</p>

<p>Pré-requisitos:</p>

<ul>
  <li>Docker instalado.</li>
  <li>Recursos de hardware, deve-se ter pelo menos 2 GB de RAM e 2 núcleos de CPU disponíveis para o <strong>SQL Server</strong>.</li>
</ul>

<p>O primeiro passo para executar o <strong>SQL Server</strong> no Docker é baixar a <a href="https://hub.docker.com/_/microsoft-mssql-server">imagem oficial do <strong>SQL Server</strong></a>. Você pode fazer isso com o seguinte comando:</p>

<p><img src="/assets/img/blog/2024/06/docker-image-sql-server-download-docker-hub.gif" alt="Download SQL Server image no Docker Hub" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker image pull mcr.microsoft.com/mssql/server:2022-latest
</code></pre></div></div>

<p>Após baixar a imagem, execute o container com o seguinte comando:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker container run <span class="nt">-e</span> <span class="s2">"ACCEPT_EULA=Y"</span> <span class="nt">-e</span> <span class="s2">"SA_PASSWORD=YourStrong@Passw0rd"</span> <span class="nt">-p</span> 1433:1433 <span class="nt">--name</span> sqlserver <span class="nt">-d</span> mcr.microsoft.com/mssql/server:2022-latest
</code></pre></div></div>

<p>Neste comando:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">-e "ACCEPT_EULA=Y"</code> aceita o contrato de licença.</li>
  <li><code class="language-plaintext highlighter-rouge">-e "SA_PASSWORD=YourStrong@Passw0rd"</code> define a senha para o administrador do sistema (SA). Certifique-se de usar uma senha forte.</li>
  <li><code class="language-plaintext highlighter-rouge">-p 1433:1433</code> mapeia a porta 1433 do container para a porta 1433 do <em>host</em>, permitindo que você acesse o <strong>SQL Server</strong> externamente.</li>
  <li><code class="language-plaintext highlighter-rouge">--name sqlserver</code> nomeia o container como “sqlserver”.</li>
  <li><code class="language-plaintext highlighter-rouge">-d</code> executa o container em segundo plano (<em>detached mode</em>).</li>
</ul>

<p>Com o container em execução, você pode se conectar ao <strong>SQL Server</strong> usando qualquer cliente SQL de sua preferência. Um exemplo popular é o <a href="/blog/instale-o-azure-data-studio-no-linux/">Azure Data Studio</a>.</p>

<p>Passos com o Azure Data Studio:</p>

<ul>
  <li>Inicie o <a href="/blog/instale-o-azure-data-studio-no-linux/">Azure Data Studio</a> e clique em <em>Add connection</em>.</li>
</ul>

<p><img src="/assets/img/blog/2024/06/azure-data-studio-tela-inicial.png" alt="Tela inicial do Azure Data Studio" /></p>

<ul>
  <li>
    <p>Informe os parâmetros de conexão.</p>

    <ol>
      <li><em>Server</em>: <code class="language-plaintext highlighter-rouge">localhost,1433</code></li>
      <li><em>User name</em>: <code class="language-plaintext highlighter-rouge">sa</code></li>
      <li><em>Password</em>: <code class="language-plaintext highlighter-rouge">YourStrong@Passw0rd</code></li>
    </ol>
  </li>
</ul>

<p><img src="/assets/img/blog/2024/06/azure-data-studio-dados-de-conexao.png" alt="Adicionando parâmetros de conexão" /></p>

<ul>
  <li>Após adicionar informações de conexão, clique no botão <em>Connect</em> para acessar o <strong>SQL Server</strong> no container.</li>
</ul>

<p><img src="/assets/img/blog/2024/06/azure-data-studio-conectado-ao-sql-server.png" alt="Azure Data Studio conectado ao SQL Server" /></p>

<p>Uma vez conectado, você pode administrar o banco de dados como faria com qualquer instância do <strong>SQL Server</strong>. Além disso, pode-se utilizar comandos Docker para gerenciar o container.</p>

<p>Verificar logs:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker container logs sqlserver
</code></pre></div></div>

<p>Parar o container:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker container stop sqlserver
</code></pre></div></div>

<p>Iniciar o container:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker container start sqlserver
</code></pre></div></div>

<p>Remover o container:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker container <span class="nb">rm </span>sqlserver
</code></pre></div></div>

<p>Dicas adicionais:</p>

<ul>
  <li>
    <p><strong>Volumes de dados</strong>: Para persistir os dados, considere usar <a href="https://docs.docker.com/storage/volumes/">volumes Docker</a>. Adicione a opção <code class="language-plaintext highlighter-rouge">-v sqlserverdata:/var/opt/mssql</code> ao comando <code class="language-plaintext highlighter-rouge">docker container run</code>.</p>

    <ul>
      <li>Exemplo:</li>
    </ul>

    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  docker container run <span class="nt">-e</span> <span class="s2">"ACCEPT_EULA=Y"</span> <span class="nt">-e</span> <span class="s2">"SA_PASSWORD=YourStrong@Passw0rd"</span> <span class="nt">-p</span> 1433:1433 <span class="nt">-v</span> sqlserverdata:/var/opt/mssql <span class="nt">--name</span> sqlserver <span class="nt">-d</span> mcr.microsoft.com/mssql/server:2022-latest
</code></pre></div>    </div>
  </li>
  <li>
    <p><strong>Backup e restore</strong>: Utilize os comandos <code class="language-plaintext highlighter-rouge">BACKUP DATABASE</code> e <code class="language-plaintext highlighter-rouge">RESTORE DATABASE</code> dentro do <strong>SQL Server</strong> para gerenciar backups.</p>
  </li>
</ul>

<p>Executar o <strong>SQL Server</strong> no Docker oferece uma maneira rápida e eficiente de gerenciar ambientes de desenvolvimento e teste. Com a flexibilidade dos containers, pode-se facilmente criar, destruir e recriar ambientes sem a complexidade tradicional de configuração.</p>]]></content><author><name>Francisco Chaves</name></author><category term="Back-end" /><category term="DevOps" /><category term="Azure Data Studio" /><category term="Docker" /><category term="SQL Server" /><category term="Terminal" /><summary type="html"><![CDATA[Executar o SQL Server no Docker oferece uma maneira específica e eficiente de gerenciar ambientes de desenvolvimento e teste.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://franciscochaves.com.br/assets/img/blog/2024/06/logo-sql-server-no-docker.png" /><media:content medium="image" url="https://franciscochaves.com.br/assets/img/blog/2024/06/logo-sql-server-no-docker.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="pt_BR"><title type="html">Conversor de Texto para Fala com JavaScript</title><link href="https://franciscochaves.com.br/blog/conversor-de-texto-para-fala-com-javascript/" rel="alternate" type="text/html" title="Conversor de Texto para Fala com JavaScript" /><published>2024-06-01T06:00:00+00:00</published><updated>2024-06-01T06:00:00+00:00</updated><id>https://franciscochaves.com.br/blog/conversor-de-texto-para-fala-com-javascript</id><content type="html" xml:base="https://franciscochaves.com.br/blog/conversor-de-texto-para-fala-com-javascript/"><![CDATA[<p>Olá pessoal, hoje vamos criar um programa na linguagem JavaScript para converter texto em fala (Text-to-Speech, ou TTS) no navegador. Com o TTS, é possível transformar texto escrito em áudio, permitindo a criação de experiências mais acessíveis e envolventes.</p>

<p>Text-to-Speech é uma tecnologia que sintetiza a fala humana a partir de texto. É amplamente utilizada em diversas aplicações, desde leitores de tela para pessoas com deficiência visual até assistentes virtuais como Alexa e Google Assistant.</p>

<p>Implementar TTS em uma página web é mais simples do que parece. Vamos utilizar a <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API"><em>API Web Speech</em></a>, que é nativa na maioria dos navegadores modernos.</p>

<p data-height="550" data-theme-id="0" data-slug-hash="GRaoYXO" data-default-tab="result" data-user="franciscochaves" data-pen-title="Conversor de Texto em Fala" class="codepen">Visualize o Pen <a href="https://codepen.io/franciscochaves/pen/GRaoYXO/">Conversor de Texto em Fala</a> feito por Francisco Chaves (<a href="https://codepen.io/franciscochaves">@franciscochaves</a>) em <a href="https://codepen.io">CodePen</a>.</p>
<script async="" src="https://static.codepen.io/assets/embed/ei.js"></script>

<p>Código HTML</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- HTML --&gt;</span>

<span class="nt">&lt;h1&gt;</span>Conversor de Texto em Fala<span class="nt">&lt;/h1&gt;</span>
<span class="nt">&lt;textarea</span>
  <span class="na">id=</span><span class="s">"text"</span>
  <span class="na">rows=</span><span class="s">"10"</span>
  <span class="na">cols=</span><span class="s">"50"</span>
  <span class="na">placeholder=</span><span class="s">"Digite seu texto aqui..."</span>
<span class="nt">&gt;&lt;/textarea&gt;</span>
<span class="nt">&lt;br</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;button</span> <span class="na">onclick=</span><span class="s">"speak()"</span><span class="nt">&gt;</span>Falar<span class="nt">&lt;/button&gt;</span>
</code></pre></div></div>

<p>Código CSS</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">/* CSS */</span>

<span class="nt">body</span> <span class="p">{</span>
  <span class="nl">font-family</span><span class="p">:</span> <span class="n">Arial</span><span class="p">,</span> <span class="nb">sans-serif</span><span class="p">;</span>
  <span class="nl">background-color</span><span class="p">:</span> <span class="m">#f4f4f4</span><span class="p">;</span>
  <span class="nl">color</span><span class="p">:</span> <span class="m">#333</span><span class="p">;</span>
  <span class="nl">display</span><span class="p">:</span> <span class="n">flex</span><span class="p">;</span>
  <span class="nl">flex-direction</span><span class="p">:</span> <span class="n">column</span><span class="p">;</span>
  <span class="nl">align-items</span><span class="p">:</span> <span class="nb">center</span><span class="p">;</span>
  <span class="nl">justify-content</span><span class="p">:</span> <span class="nb">center</span><span class="p">;</span>
  <span class="nl">height</span><span class="p">:</span> <span class="m">100vh</span><span class="p">;</span>
  <span class="nl">margin</span><span class="p">:</span> <span class="m">0</span><span class="p">;</span>
<span class="p">}</span>

<span class="nt">h1</span> <span class="p">{</span>
  <span class="nl">color</span><span class="p">:</span> <span class="m">#0056b3</span><span class="p">;</span>
<span class="p">}</span>

<span class="nt">textarea</span> <span class="p">{</span>
  <span class="nl">width</span><span class="p">:</span> <span class="m">80%</span><span class="p">;</span>
  <span class="nl">max-width</span><span class="p">:</span> <span class="m">600px</span><span class="p">;</span>
  <span class="nl">padding</span><span class="p">:</span> <span class="m">10px</span><span class="p">;</span>
  <span class="nl">border</span><span class="p">:</span> <span class="m">1px</span> <span class="nb">solid</span> <span class="m">#ccc</span><span class="p">;</span>
  <span class="nl">border-radius</span><span class="p">:</span> <span class="m">5px</span><span class="p">;</span>
  <span class="nl">margin-bottom</span><span class="p">:</span> <span class="m">20px</span><span class="p">;</span>
  <span class="nl">font-size</span><span class="p">:</span> <span class="m">16px</span><span class="p">;</span>
<span class="p">}</span>

<span class="nt">button</span> <span class="p">{</span>
  <span class="nl">background-color</span><span class="p">:</span> <span class="m">#0056b3</span><span class="p">;</span>
  <span class="nl">color</span><span class="p">:</span> <span class="no">white</span><span class="p">;</span>
  <span class="nl">padding</span><span class="p">:</span> <span class="m">10px</span> <span class="m">20px</span><span class="p">;</span>
  <span class="nl">border</span><span class="p">:</span> <span class="nb">none</span><span class="p">;</span>
  <span class="nl">border-radius</span><span class="p">:</span> <span class="m">5px</span><span class="p">;</span>
  <span class="nl">cursor</span><span class="p">:</span> <span class="nb">pointer</span><span class="p">;</span>
  <span class="nl">font-size</span><span class="p">:</span> <span class="m">16px</span><span class="p">;</span>
<span class="p">}</span>

<span class="nt">button</span><span class="nd">:hover</span> <span class="p">{</span>
  <span class="nl">background-color</span><span class="p">:</span> <span class="m">#004494</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Código JavaScript</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// JS</span>

<span class="kd">function</span> <span class="nf">speak</span><span class="p">()</span> <span class="p">{</span>
  <span class="kd">const</span> <span class="nx">textArea</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">text</span><span class="dl">'</span><span class="p">);</span>
  <span class="kd">const</span> <span class="nx">text</span> <span class="o">=</span> <span class="nx">textArea</span><span class="p">.</span><span class="nx">value</span><span class="p">;</span>

  <span class="k">if </span><span class="p">(</span><span class="dl">'</span><span class="s1">speechSynthesis</span><span class="dl">'</span> <span class="k">in</span> <span class="nb">window</span><span class="p">)</span> <span class="p">{</span>
    <span class="kd">const</span> <span class="nx">utterance</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">SpeechSynthesisUtterance</span><span class="p">(</span><span class="nx">text</span><span class="p">);</span>
    <span class="nx">utterance</span><span class="p">.</span><span class="nx">lang</span> <span class="o">=</span> <span class="dl">'</span><span class="s1">pt-BR</span><span class="dl">'</span><span class="p">;</span>

    <span class="nx">speechSynthesis</span><span class="p">.</span><span class="nf">speak</span><span class="p">(</span><span class="nx">utterance</span><span class="p">);</span>
  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
    <span class="nf">alert</span><span class="p">(</span><span class="dl">'</span><span class="s1">Desculpe, seu navegador não suporta a API Web Speech.</span><span class="dl">'</span><span class="p">);</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Link para o repositório do projeto: <a href="https://gitlab.com/franciscochaves/conversor-de-texto-em-fala">https://gitlab.com/franciscochaves/conversor-de-texto-em-fala</a></p>

<p>Link para o projeto publicado: <a href="https://franciscochaves.gitlab.io/conversor-de-texto-em-fala/">https://franciscochaves.gitlab.io/conversor-de-texto-em-fala/</a></p>

<p>Valeu pessoal 😎✌️!</p>]]></content><author><name>Francisco Chaves</name></author><category term="Front-end" /><category term="API Web Speech" /><category term="JavaScript" /><category term="TTS" /><category term="Text-to-Speech" /><summary type="html"><![CDATA[Crie um programa que converte texto em fala com a linguagem JavaScript.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://franciscochaves.com.br/assets/img/blog/2024/06/logo-conversor-de-texto-para-fala-com-javascript.png" /><media:content medium="image" url="https://franciscochaves.com.br/assets/img/blog/2024/06/logo-conversor-de-texto-para-fala-com-javascript.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="pt_BR"><title type="html">Números Primos em Python</title><link href="https://franciscochaves.com.br/blog/numeros-primos-em-python/" rel="alternate" type="text/html" title="Números Primos em Python" /><published>2024-05-25T06:00:00+00:00</published><updated>2024-05-25T06:00:00+00:00</updated><id>https://franciscochaves.com.br/blog/numeros-primos-em-python</id><content type="html" xml:base="https://franciscochaves.com.br/blog/numeros-primos-em-python/"><![CDATA[<p>Olá pessoal, hoje vamos aprender como utilizar a <strong>linguagem Python</strong> para fazer um programa que mostre se um determinado número é primo.</p>

<p>Um número primo é um número inteiro maior que 1, divisível por 1 e por ele mesmo. Isso significa que ele não pode ser dividido por nenhum outro número inteiro sem deixar um resto.</p>

<p>Exemplos de alguns números primos: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59 . . .</p>

<p>Código para verificar se um número é primo:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Verifica se o número é primo
</span><span class="k">def</span> <span class="nf">ehPrimo</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
    <span class="k">if</span> <span class="nf">type</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">return</span> <span class="bp">False</span>

    <span class="k">if</span> <span class="n">num</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
        <span class="k">return</span> <span class="bp">False</span>

    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">num</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">num</span> <span class="o">%</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
            <span class="k">return</span> <span class="bp">False</span>

    <span class="k">return</span> <span class="bp">True</span>
</code></pre></div></div>

<p>Código para listar os números primos:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Verifica se o número é primo
</span><span class="k">def</span> <span class="nf">ehPrimo</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
    <span class="k">if</span> <span class="nf">type</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">return</span> <span class="bp">False</span>

    <span class="k">if</span> <span class="n">num</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
        <span class="k">return</span> <span class="bp">False</span>

    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">num</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">num</span> <span class="o">%</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
            <span class="k">return</span> <span class="bp">False</span>

    <span class="k">return</span> <span class="bp">True</span>


<span class="c1"># Lista os números primos até o número especificado
</span><span class="k">def</span> <span class="nf">listarNumerosPrimos</span><span class="p">(</span><span class="n">num</span><span class="p">):</span>
    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">num</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
        <span class="k">if</span> <span class="nf">ehPrimo</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
            <span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">{}</span><span class="sh">'</span><span class="p">.</span><span class="nf">format</span><span class="p">(</span><span class="n">i</span><span class="p">))</span>
</code></pre></div></div>

<p>Resultado da listagem dos números primos:</p>

<p><img src="/assets/img/blog/2024/05/script-python-listar-numeros-primos.png" alt="Script Python para listar números primos" /></p>]]></content><author><name>Francisco Chaves</name></author><category term="Back-end" /><category term="Algoritmo" /><category term="Python" /><summary type="html"><![CDATA[Crie um programa que mostre os números primos utilizando a linguagem Python]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://franciscochaves.com.br/assets/img/blog/2024/05/logo-numeros-primos-em-python.png" /><media:content medium="image" url="https://franciscochaves.com.br/assets/img/blog/2024/05/logo-numeros-primos-em-python.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="pt_BR"><title type="html">Números Primos em JavaScript</title><link href="https://franciscochaves.com.br/blog/numeros-primos-em-javascript/" rel="alternate" type="text/html" title="Números Primos em JavaScript" /><published>2024-05-18T06:00:00+00:00</published><updated>2024-05-18T06:00:00+00:00</updated><id>https://franciscochaves.com.br/blog/numeros-primos-em-javascript</id><content type="html" xml:base="https://franciscochaves.com.br/blog/numeros-primos-em-javascript/"><![CDATA[<p>Olá pessoal, hoje vamos aprender como utilizar a <strong>linguagem JavaScript</strong> para fazer um programa que mostre se um determinado número é primo.</p>

<p>Um número primo é um número inteiro maior que 1, divisível por 1 e por ele mesmo. Isso significa que ele não pode ser dividido por nenhum outro número inteiro sem deixar um resto.</p>

<p>Exemplos de alguns números primos: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59 . . .</p>

<p>Função para verificar se um número é primo:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nf">ehPrimo</span><span class="p">(</span><span class="nx">num</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">if </span><span class="p">(</span><span class="o">!</span><span class="nb">Number</span><span class="p">.</span><span class="nf">isInteger</span><span class="p">(</span><span class="nx">num</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">if </span><span class="p">(</span><span class="nx">num</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">for </span><span class="p">(</span><span class="kd">let</span> <span class="nx">cont</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span> <span class="nx">cont</span> <span class="o">&lt;</span> <span class="nx">num</span><span class="p">;</span> <span class="nx">cont</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">if </span><span class="p">(</span><span class="nx">num</span> <span class="o">%</span> <span class="nx">cont</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
      <span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
    <span class="p">}</span>
  <span class="p">}</span>

  <span class="k">return</span> <span class="kc">true</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Resultado da execução da função que verifica se o número é primo:</p>

<p><img src="/assets/img/blog/2024/05/funcao-js-eh-primo.png" alt="Verificar se um número é primo" /></p>

<p>Função para listar os números primos:</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nf">ehPrimo</span><span class="p">(</span><span class="nx">num</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">if </span><span class="p">(</span><span class="o">!</span><span class="nb">Number</span><span class="p">.</span><span class="nf">isInteger</span><span class="p">(</span><span class="nx">num</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">if </span><span class="p">(</span><span class="nx">num</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">for </span><span class="p">(</span><span class="kd">let</span> <span class="nx">cont</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span> <span class="nx">cont</span> <span class="o">&lt;</span> <span class="nx">num</span><span class="p">;</span> <span class="nx">cont</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">if </span><span class="p">(</span><span class="nx">num</span> <span class="o">%</span> <span class="nx">cont</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
      <span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
    <span class="p">}</span>
  <span class="p">}</span>

  <span class="k">return</span> <span class="kc">true</span><span class="p">;</span>
<span class="p">}</span>

<span class="kd">function</span> <span class="nf">listarNumerosPrimos</span><span class="p">(</span><span class="nx">num</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">for </span><span class="p">(</span><span class="kd">let</span> <span class="nx">cont</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">cont</span> <span class="o">&lt;=</span> <span class="nx">num</span><span class="p">;</span> <span class="nx">cont</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">if </span><span class="p">(</span><span class="nf">ehPrimo</span><span class="p">(</span><span class="nx">cont</span><span class="p">))</span> <span class="p">{</span>
      <span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="s2">`</span><span class="p">${</span><span class="nx">cont</span><span class="p">}</span><span class="s2">\n`</span><span class="p">);</span>
    <span class="p">}</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Resultado da listagem dos números primos:</p>

<p><img src="/assets/img/blog/2024/05/funcao-js-listar-numeros-primos.png" alt="Listar números primos" /></p>]]></content><author><name>Francisco Chaves</name></author><category term="Front-end" /><category term="Algoritmo" /><category term="JavaScript" /><summary type="html"><![CDATA[Crie um programa que mostre os números primos utilizando a linguagem JavaScript]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://franciscochaves.com.br/assets/img/blog/2024/05/logo-numeros-primos-em-javascript.png" /><media:content medium="image" url="https://franciscochaves.com.br/assets/img/blog/2024/05/logo-numeros-primos-em-javascript.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>