<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Blog da Codaqui</title>
        <link>https://codaqui.dev/blog</link>
        <description>Tutoriais, projetos e novidades da comunidade Codaqui</description>
        <lastBuildDate>Thu, 14 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>pt-BR</language>
        <copyright>© 2026 Associação Codaqui</copyright>
        <item>
            <title><![CDATA[🚨 Alô comunidade FLOSS: as submissões para o NOSS estão abertas 💜]]></title>
            <link>https://codaqui.dev/blog/2026/05/14/noss-cumbuca-dev-open-source-summit</link>
            <guid>https://codaqui.dev/blog/2026/05/14/noss-cumbuca-dev-open-source-summit</guid>
            <pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Se você mantém projetos, contribui, estuda, trabalha, compartilha conhecimento ou simplesmente ama falar sobre open source: esse convite é pra você.]]></description>
            <content:encoded><![CDATA[<p>Se você mantém projetos, contribui, estuda, trabalha, compartilha conhecimento ou simplesmente ama falar sobre open source: esse convite é pra você.</p>
<p>Estamos buscando atividades de 30 minutos para o <strong>NOSS — Nosso Open Source Summit</strong>, focadas em experiências reais, projetos open source e histórias que podem mudar o caminho de outra pessoa.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-que-é-o-noss">O que é o NOSS?<a href="https://codaqui.dev/blog/2026/05/14/noss-cumbuca-dev-open-source-summit#o-que-%C3%A9-o-noss" class="hash-link" aria-label="Link direto para O que é o NOSS?" title="Link direto para O que é o NOSS?" translate="no">​</a></h2>
<p>O NOSS nasce de uma ideia simples: um nó que não prende, mas sustenta, aproxima e conecta.</p>
<p>Sabe quando a gente dá um nó pra segurar algo importante? No open source é assim também — só que esses nós bem amarradinhos são feitos de pessoas como você e eu, colaborando, aprendendo e construindo juntas.</p>
<p>No dia <strong>30/05</strong> vai rolar lá no canal da Cumbuca Dev o <strong>Nosso Open Source Summit</strong>. Totalmente online, pra nossa Cumbuca pelo mundo se conectar. Vai ter mantenedores, pessoas desenvolvedoras, entusiastas… a nossa galera reunida um dia inteiro pra falar de código aberto, software livre, tudo junto e misturado.</p>
<p>E nem precisa dedicação exclusiva, viu? Deixa rodando ali na segunda tela. Um olho em nós, outro nas tarefas. 😉</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-que-estamos-buscando">O que estamos buscando?<a href="https://codaqui.dev/blog/2026/05/14/noss-cumbuca-dev-open-source-summit#o-que-estamos-buscando" class="hash-link" aria-label="Link direto para O que estamos buscando?" title="Link direto para O que estamos buscando?" translate="no">​</a></h2>
<p>Estamos abrindo chamada para atividades de <strong>30 minutos</strong> com foco em:</p>
<ul>
<li class="">🟣 <strong>Experiências reais</strong> — o que você viveu, errou e aprendeu</li>
<li class="">🚀 <strong>Projetos open source</strong> — o que você mantém ou usa no dia a dia</li>
<li class="">🌱 <strong>Histórias de contribuição</strong> — como você entrou na comunidade FLOSS</li>
<li class="">💬 <strong>Comunidades</strong> — construir, crescer, sustentar</li>
<li class="">💻 <strong>Tecnologia e infraestrutura</strong> — o backstage do open source</li>
<li class="">💜 <strong>Aprendizados que ajudam outras pessoas</strong> — compartilhe o que foi difícil</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="você-não-precisa-ter-experiência-prévia-como-palestrante">Você NÃO precisa ter experiência prévia como palestrante<a href="https://codaqui.dev/blog/2026/05/14/noss-cumbuca-dev-open-source-summit#voc%C3%AA-n%C3%A3o-precisa-ter-experi%C3%AAncia-pr%C3%A9via-como-palestrante" class="hash-link" aria-label="Link direto para Você NÃO precisa ter experiência prévia como palestrante" title="Link direto para Você NÃO precisa ter experiência prévia como palestrante" translate="no">​</a></h2>
<p>Sério.</p>
<p>Às vezes aquela contribuição que parecia pequena, aquele projeto que você mantém, um aprendizado difícil ou até uma experiência da sua comunidade pode ser exatamente o que outra pessoa precisava ouvir.</p>
<blockquote>
<p><strong>E tem mais:</strong> ao submeter sua atividade você já começa a se conectar com uma galera incrível que constrói open source todos os dias 💜</p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sessões-relâmpago">Sessões relâmpago<a href="https://codaqui.dev/blog/2026/05/14/noss-cumbuca-dev-open-source-summit#sess%C3%B5es-rel%C3%A2mpago" class="hash-link" aria-label="Link direto para Sessões relâmpago" title="Link direto para Sessões relâmpago" translate="no">​</a></h2>
<p>Se ultrapassarmos a quantidade planejada de atividades, queremos transformar parte das propostas em <strong>sessões relâmpago de 5 minutos</strong> — ampliando espaço para novas vozes e mais pessoas compartilharem conhecimento. Então não hesite: submeta mesmo que não tenha certeza de ter 30 minutos de conteúdo.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="datas-importantes">Datas importantes<a href="https://codaqui.dev/blog/2026/05/14/noss-cumbuca-dev-open-source-summit#datas-importantes" class="hash-link" aria-label="Link direto para Datas importantes" title="Link direto para Datas importantes" translate="no">​</a></h2>

























<table><thead><tr><th>O quê</th><th>Quando</th></tr></thead><tbody><tr><td><strong>Prazo de submissão</strong></td><td>Até ~20 de maio de 2026</td></tr><tr><td><strong>Retorno esperado</strong></td><td>Até 20 de maio</td></tr><tr><td><strong>Evento</strong></td><td>30/05/2026 · 09h30 às 18h30 (BRT)</td></tr><tr><td><strong>Onde</strong></td><td>Ao vivo no <a href="https://www.youtube.com/@cumbucadev" target="_blank" rel="noopener noreferrer" class="">YouTube da Cumbuca</a></td></tr></tbody></table>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="como-submeter">Como submeter?<a href="https://codaqui.dev/blog/2026/05/14/noss-cumbuca-dev-open-source-summit#como-submeter" class="hash-link" aria-label="Link direto para Como submeter?" title="Link direto para Como submeter?" translate="no">​</a></h2>
<p>👉 Acesse o site oficial do evento e envie sua proposta:</p>
<p><strong><a href="https://noss.cumbuca.dev/" target="_blank" rel="noopener noreferrer" class="">noss.cumbuca.dev</a></strong></p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="por-que-participar">Por que participar?<a href="https://codaqui.dev/blog/2026/05/14/noss-cumbuca-dev-open-source-summit#por-que-participar" class="hash-link" aria-label="Link direto para Por que participar?" title="Link direto para Por que participar?" translate="no">​</a></h2>
<p>Mais do que montar uma programação, estamos construindo algo maior para a comunidade de FLOSS no Brasil.</p>
<p>Cada atividade submetida ajuda a mostrar a força, diversidade e dimensão do nosso ecossistema. E esses números importam: <strong>ajudam a abrir portas, criar oportunidades, fortalecer projetos e aproximar comunidade, organizações e mercado</strong>.</p>
<p>Cá entre nós, que o Brasil 🇧🇷 tá mandando bem no open source a gente já sabe. Agora é hora de fortalecer os nós. 🪢</p>
<p><strong>Vamos construir isso juntos 💜</strong></p>
<hr>
<p><em>A <a href="https://cumbuca.dev/" target="_blank" rel="noopener noreferrer" class="">Cumbuca Dev</a> é uma comunidade voltada para pessoas que desenvolvem software open source no Brasil. Saiba mais em <a href="https://cumbuca.dev/" target="_blank" rel="noopener noreferrer" class="">cumbuca.dev</a>.</em></p>]]></content:encoded>
            <category>open source</category>
            <category>eventos</category>
            <category>comunidade</category>
            <category>floss</category>
            <category>cumbuca</category>
        </item>
        <item>
            <title><![CDATA[Roda de Conversa: Maternidade e Carreira]]></title>
            <link>https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira</link>
            <guid>https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira</guid>
            <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Roda de Conversa: Maternidade e Carreira]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Roda de Conversa: Maternidade e Carreira" src="https://codaqui.dev/assets/images/banner-1cddad1a3d81e828d87d2aba93e936b4.png" width="2560" height="1440" class="img_ev3q"></p>
<p>Neste mês de maio de 2026, em celebração ao <strong>Mês das Mães</strong>, a <strong>Elas no Código</strong> promove uma roda de conversa acolhedora e necessária.</p>
<p>Sabemos que equilibrar o "build" da carreira com a rotina da maternidade exige força, estratégia e, acima de tudo, rede de apoio. Vamos reunir especialistas que são referência no mercado para debater como a maternidade e a tecnologia podem ser potências que se somam.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sobre-a-roda-de-conversa">Sobre a Roda de Conversa<a href="https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira#sobre-a-roda-de-conversa" class="hash-link" aria-label="Link direto para Sobre a Roda de Conversa" title="Link direto para Sobre a Roda de Conversa" translate="no">​</a></h2>
<p>O evento será uma transmissão ao vivo, focada em compartilhar realidades e superações sem romantização. Um espaço para discutirmos como estamos construindo o futuro da tecnologia juntas, equilibrando o amor e as linhas de código.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-cronograma">📅 Cronograma<a href="https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira#-cronograma" class="hash-link" aria-label="Link direto para 📅 Cronograma" title="Link direto para 📅 Cronograma" translate="no">​</a></h3>
<ul>
<li class=""><strong>Abertura e Conexão:</strong> Boas-vindas e apresentação do Movimento Elas no Código.</li>
<li class=""><strong>Bloco 1:</strong> Antes e Depois da Maternidade (Impactos na produtividade, concentração e liderança).</li>
<li class=""><strong>Bloco 2:</strong> A Realidade Sem Filtro (Desafios de conciliação, licença-maternidade e o retorno ao mercado).</li>
<li class=""><strong>Bloco 3:</strong> Rede de Apoio e Futuro (O papel das empresas e o legado para as próximas gerações).</li>
<li class=""><strong>Encerramento:</strong> Bate-pronto final com conselhos práticos.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sobre-as-convidadas">Sobre as Convidadas<a href="https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira#sobre-as-convidadas" class="hash-link" aria-label="Link direto para Sobre as Convidadas" title="Link direto para Sobre as Convidadas" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="raquel-silva">Raquel Silva<a href="https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira#raquel-silva" class="hash-link" aria-label="Link direto para Raquel Silva" title="Link direto para Raquel Silva" translate="no">​</a></h3>
<p>Matemática formada pelo IME-USP, com aperfeiçoamento em Mineração de Dados Complexos pela Unicamp. Atua há 10 anos com análise de dados, <em>machine learning</em> e modelagem estatística. É uma entusiasta das descobertas e avanços da ciência.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="poliane-pio-de-oliveira">Poliane Pio de Oliveira<a href="https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira#poliane-pio-de-oliveira" class="hash-link" aria-label="Link direto para Poliane Pio de Oliveira" title="Link direto para Poliane Pio de Oliveira" translate="no">​</a></h3>
<p>Profissional de TI com 9 anos de experiência, graduada em Sistemas de Informação e pós-graduada em Segurança da Informação pela PUC Minas. Atualmente atua na área de Segurança da Informação com foco em Gestão de Acessos.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="carim-tho">Carim Tho<a href="https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira#carim-tho" class="hash-link" aria-label="Link direto para Carim Tho" title="Link direto para Carim Tho" translate="no">​</a></h3>
<p>Formada em Engenharia Física pela UFSCar, possui 8 anos de experiência em desenvolvimento Java. Atualmente exerce o papel de Arquiteta de Software na Ambev.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="hosts-da-roda">Hosts da Roda<a href="https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira#hosts-da-roda" class="hash-link" aria-label="Link direto para Hosts da Roda" title="Link direto para Hosts da Roda" translate="no">​</a></h2>
<ul>
<li class=""><strong>Maria Luiza Pontes:</strong> Engenheira de Software Sênior na Stone, com 13 anos de experiência na área de desenvolvimento.</li>
<li class=""><strong>Karoline Farias:</strong> Analista de Machine Learning e Cientista de Dados.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tópicos-que-serão-abordados">Tópicos que serão abordados<a href="https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira#t%C3%B3picos-que-ser%C3%A3o-abordados" class="hash-link" aria-label="Link direto para Tópicos que serão abordados" title="Link direto para Tópicos que serão abordados" translate="no">​</a></h2>
<p>Durante a live, vamos mergulhar nos seguintes temas:</p>
<ul>
<li class=""><strong>Produtividade e Foco:</strong> Como a maternidade redefine a forma de encarar o raciocínio constante e a profundidade técnica.</li>
<li class=""><strong>Carga Mental:</strong> O equilíbrio entre a alta responsabilidade da tecnologia (como Segurança e Arquitetura) e o cuidado com os filhos.</li>
<li class=""><strong>Mercado de Trabalho:</strong> A percepção do mercado sobre mulheres mães e a necessidade de provar competência.</li>
<li class=""><strong>Retorno da Licença:</strong> O enfrentamento da culpa, do medo de ficar "para trás" e a importância do acolhimento das equipes.</li>
<li class=""><strong>Cultura Corporativa:</strong> O que as empresas podem fazer na prática para humanizar o ambiente para as mães.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="como-participar">Como Participar?<a href="https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira#como-participar" class="hash-link" aria-label="Link direto para Como Participar?" title="Link direto para Como Participar?" translate="no">​</a></h2>
<p>Acompanhe a transmissão ao vivo no dia <strong>16/05 (Sábado) às 14:00</strong>:</p>
<ul>
<li class="">🎥 <strong><a href="https://www.youtube.com/watch?v=YZj46bOuCJM" target="_blank" rel="noopener noreferrer" class="">YouTube</a></strong></li>
<li class="">🎟️ <strong><a href="https://www.sympla.com.br/evento-online/roda-de-conversa-maternidade-e-carreira/3421888" target="_blank" rel="noopener noreferrer" class="">Inscrição (Sympla)</a></strong></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="mais-informações">Mais Informações<a href="https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira#mais-informa%C3%A7%C3%B5es" class="hash-link" aria-label="Link direto para Mais Informações" title="Link direto para Mais Informações" translate="no">​</a></h2>
<p>O <strong>Elas no Código</strong> é uma comunidade que acredita que o lugar de mãe é onde ela quiser — inclusive dominando o código. Nossa missão é fortalecer o protagonismo feminino através de uma rede de apoio que discute carreira e vida real.</p>
<ul>
<li class="">📱 <strong>Instagram:</strong> <a href="https://instagram.com/elasnocodigo" target="_blank" rel="noopener noreferrer" class="">@elasnocodigo</a></li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reflexão">Reflexão<a href="https://codaqui.dev/blog/2026/05/12/elas-no-codigo-maternidade-e-carreira#reflex%C3%A3o" class="hash-link" aria-label="Link direto para Reflexão" title="Link direto para Reflexão" translate="no">​</a></h2>
<p>Antes de participar, pense:</p>
<ul>
<li class="">Qual habilidade a maternidade fortaleceu em você que a tornou uma profissional melhor?</li>
<li class="">O que você diria hoje para a sua versão que estava prestes a voltar da licença-maternidade?</li>
<li class="">Que exemplo você espera deixar para seus filhos ao continuar construindo sua carreira tech?</li>
</ul>
<hr>
<p><em>Maternidade e carreira na tecnologia não deveriam ser caminhos opostos, mas sim potências que se somam.</em></p>]]></content:encoded>
            <category>comunidade</category>
            <category>tecnologia</category>
            <category>carreira</category>
            <category>mulheres na tech</category>
            <category>inclusão</category>
            <category>eventos</category>
        </item>
        <item>
            <title><![CDATA[Curso de Educação Financeira com Valnaire Nascimento]]></title>
            <link>https://codaqui.dev/blog/2026/03/30/curso-educacao-financeira</link>
            <guid>https://codaqui.dev/blog/2026/03/30/curso-educacao-financeira</guid>
            <pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Curso de Educação Financeira]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Curso de Educação Financeira" src="https://codaqui.dev/assets/images/gemini_banner-93ae3811fd4bdac77cdce16fd1f0d599.png" width="2752" height="1536" class="img_ev3q"></p>
<p>A Codaqui tem o prazer de anunciar um curso especial sobre <strong>Educação Financeira</strong>, ministrado por <strong>Valnaire Nascimento</strong>, Mestre em Economia e especialista em finanças. Prepare-se para ser bem-vindo a um novo nível de consciência financeira.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sobre-o-curso">Sobre o Curso<a href="https://codaqui.dev/blog/2026/03/30/curso-educacao-financeira#sobre-o-curso" class="hash-link" aria-label="Link direto para Sobre o Curso" title="Link direto para Sobre o Curso" translate="no">​</a></h2>
<p>A verdade é que ninguém nunca nos ensinou a lidar com dinheiro da forma correta. Aprendemos a trabalhar e a pagar contas, mas não a construir riqueza. Este curso foi desenhado para mudar essa realidade, pois a mudança ocorre como o primeiro passo.</p>
<p>O treinamento abordará desde a desconstrução de crenças limitantes até estratégias práticas de organização financeira, investimento e planejamento para o futuro.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-cronograma">📅 Cronograma<a href="https://codaqui.dev/blog/2026/03/30/curso-educacao-financeira#-cronograma" class="hash-link" aria-label="Link direto para 📅 Cronograma" title="Link direto para 📅 Cronograma" translate="no">​</a></h3>
<p>O curso acontecerá em cinco encontros conduzidos por <strong>Valnaire Nascimento</strong>:</p>
<blockquote>
<p>Todas as aulas acontecem <strong>às 19h30</strong>.</p>
</blockquote>















































<table><thead><tr><th>Aula</th><th>Data</th><th>Temas</th><th>Material</th><th>Atividade</th></tr></thead><tbody><tr><td><strong>Aula 1</strong></td><td><strong>13 abr</strong></td><td>Dinheiro é comportamento (Módulo 1) · Crenças influenciam decisões (Módulo 1)</td><td>Apresentação de slides · vídeos</td><td>Diagnóstico e tipo de gasto</td></tr><tr><td><strong>Aula 2</strong></td><td><del><strong>20 abr</strong></del> Remarcada para 18/05</td><td>Controle receitas e despesas (Módulo 2) · Defina metas e orçamento (Módulo 3)</td><td>Apresentação de slides · planilhas</td><td>Ensinar a criar orçamento</td></tr><tr><td><strong>Aula 3</strong></td><td><strong>27 abr</strong></td><td>Gerencie juros e crédito (Módulo 4) · Invista com consistência (Módulo 5)</td><td>Apresentação de slides · melhores investimentos</td><td>Verificar perfil do investidor</td></tr><tr><td><strong>Aula 4</strong></td><td><strong>04 mai</strong></td><td>Construa renda passiva (Módulo 6) · Planejamento de longo prazo (Módulo 7)</td><td>Apresentação de slides</td><td>Não informado</td></tr><tr><td><strong>Aula 5</strong></td><td><strong>11 mai</strong></td><td>Planejamento de longo prazo (Módulo 7)</td><td>Apresentação de slides</td><td>Verificar planos de previdência no mercado</td></tr></tbody></table>
<blockquote>
<p>A participação acontece conforme a programação divulgada pela Codaqui. Para acompanhar inscrições e atualizações, consulte nossos canais oficiais.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sobre-a-instrutora">Sobre a Instrutora<a href="https://codaqui.dev/blog/2026/03/30/curso-educacao-financeira#sobre-a-instrutora" class="hash-link" aria-label="Link direto para Sobre a Instrutora" title="Link direto para Sobre a Instrutora" translate="no">​</a></h2>
<p><strong>Valnaire Nascimento</strong> é Mestre em Economia e Economista, formada pela Universidade Federal da Bahia (UFBA). Com graduação também em Ciências Contábeis, possui uma formação sólida e multidisciplinar que integra conhecimentos econômicos, financeiros e contábeis.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="experiência-profissional">Experiência Profissional<a href="https://codaqui.dev/blog/2026/03/30/curso-educacao-financeira#experi%C3%AAncia-profissional" class="hash-link" aria-label="Link direto para Experiência Profissional" title="Link direto para Experiência Profissional" translate="no">​</a></h3>
<p>Com um perfil analítico e orientado a resultados, Valnaire conta com vasta experiência profissional nas áreas financeira, análise de crédito e contabilidade. Já ocupou posições de destaque como:</p>
<ul>
<li class=""><strong>Coordenadora de Contabilidade</strong> na Fundação Cultural do Estado da Bahia (Funceb)</li>
<li class=""><strong>Analista Financeiro</strong> no IANDBEAS e na Bravo Caminhões e Ônibus</li>
<li class=""><strong>Assessor Financeiro</strong> no Teatro Castro Alves</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="filosofia-de-trabalho">Filosofia de Trabalho<a href="https://codaqui.dev/blog/2026/03/30/curso-educacao-financeira#filosofia-de-trabalho" class="hash-link" aria-label="Link direto para Filosofia de Trabalho" title="Link direto para Filosofia de Trabalho" translate="no">​</a></h3>
<blockquote>
<p>"Porque, no final, não é o quanto você ganha que define sua vida financeira... é o que você faz com o que ganha."</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-que-você-vai-aprender">O Que Você Vai Aprender<a href="https://codaqui.dev/blog/2026/03/30/curso-educacao-financeira#o-que-voc%C3%AA-vai-aprender" class="hash-link" aria-label="Link direto para O Que Você Vai Aprender" title="Link direto para O Que Você Vai Aprender" translate="no">​</a></h2>
<ul>
<li class=""><strong>Módulo 1 - Mentalidade Financeira:</strong> Compreenda como comportamento e crenças influenciam decisões financeiras no dia a dia.</li>
<li class=""><strong>Módulo 2 - Organização Financeira:</strong> Aprenda a controlar receitas e despesas para ter mais clareza sobre sua realidade financeira.</li>
<li class=""><strong>Módulo 3 - Planejamento e Orçamento:</strong> Defina metas, prioridades e um orçamento aplicável à sua rotina.</li>
<li class=""><strong>Módulo 4 - Juros e Crédito:</strong> Entenda como gerenciar crédito com responsabilidade e tomar decisões mais conscientes.</li>
<li class=""><strong>Módulo 5 - Investimentos com Consistência:</strong> Conheça fundamentos para investir com regularidade e de acordo com seu perfil.</li>
<li class=""><strong>Módulo 6 - Renda Passiva:</strong> Explore caminhos para construir novas fontes de renda no longo prazo.</li>
<li class=""><strong>Módulo 7 - Planejamento de Longo Prazo:</strong> Estruture objetivos futuros com mais segurança, incluindo a análise de alternativas de previdência.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="para-quem-é-este-curso">Para Quem é Este Curso?<a href="https://codaqui.dev/blog/2026/03/30/curso-educacao-financeira#para-quem-%C3%A9-este-curso" class="hash-link" aria-label="Link direto para Para Quem é Este Curso?" title="Link direto para Para Quem é Este Curso?" translate="no">​</a></h2>
<p>Este curso é ideal para:</p>
<ul>
<li class="">Pessoas que desejam parar de ser reféns do próprio salário e aprender a poupar;</li>
<li class="">Profissionais que buscam organizar suas finanças, sair das dívidas e começar a investir;</li>
<li class="">Qualquer pessoa interessada em alcançar a independência financeira.</li>
</ul>
<p>A <strong>Codaqui</strong> é para todos que desejam aprender e crescer.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="como-participar">Como Participar?<a href="https://codaqui.dev/blog/2026/03/30/curso-educacao-financeira#como-participar" class="hash-link" aria-label="Link direto para Como Participar?" title="Link direto para Como Participar?" translate="no">​</a></h2>
<p>As inscrições estarão abertas em breve! <a class="" href="https://codaqui.dev/participe/estudar">Acesse o formulário de inscrição</a> ou <a class="" href="https://codaqui.dev/bio">confira nossos links oficiais</a>.</p>
<p>💼 <strong>LinkedIn da instrutora:</strong> <a href="https://www.linkedin.com/in/valnairenascimento" target="_blank" rel="noopener noreferrer" class="">linkedin.com/in/valnairenascimento</a></p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reflexão-inicial">Reflexão Inicial<a href="https://codaqui.dev/blog/2026/03/30/curso-educacao-financeira#reflex%C3%A3o-inicial" class="hash-link" aria-label="Link direto para Reflexão Inicial" title="Link direto para Reflexão Inicial" translate="no">​</a></h2>
<ul>
<li class=""><strong>Quais crenças limitantes sobre dinheiro você tem repetido para si mesmo?</strong></li>
<li class=""><strong>Você sabe exatamente para onde seu dinheiro está indo todos os meses?</strong></li>
<li class=""><strong>Seu dinheiro está trabalhando para você ou você está trabalhando apenas para pagar contas?</strong></li>
</ul>
<p>Traga essas reflexões e prepare-se para transformar a sua realidade financeira!</p>]]></content:encoded>
            <category>curso</category>
            <category>comunidade</category>
            <category>finanças</category>
            <category>investimentos</category>
            <category>educação</category>
            <category>institucional</category>
        </item>
        <item>
            <title><![CDATA[Curso de Lógica de Programação com Python com Paulinea]]></title>
            <link>https://codaqui.dev/blog/2026/03/30/curso-introducao-python</link>
            <guid>https://codaqui.dev/blog/2026/03/30/curso-introducao-python</guid>
            <pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Curso de Lógica de Programação]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Curso de Lógica de Programação" src="https://codaqui.dev/assets/images/gemini_banner-c80eb9757d34e865b0213bc1621a1855.png" width="2752" height="1536" class="img_ev3q"></p>
<p>A Associação Codaqui tem o prazer de anunciar um curso especial sobre <strong>Lógica de Programação e Python</strong>, ministrado por <strong>Paulinea</strong>, uma futura desenvolvedora apaixonada por gerar impacto social através da educação tecnológica.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sobre-o-curso">Sobre o Curso<a href="https://codaqui.dev/blog/2026/03/30/curso-introducao-python#sobre-o-curso" class="hash-link" aria-label="Link direto para Sobre o Curso" title="Link direto para Sobre o Curso" translate="no">​</a></h2>
<p>Este material tem foco em uma abordagem simples e direta, com exemplos comentados para facilitar a compreensão. Todas as atividades práticas serão realizadas por meio de um compilador online gratuito chamado Programiz — sem precisar instalar nada no computador.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-cronograma">📅 Cronograma<a href="https://codaqui.dev/blog/2026/03/30/curso-introducao-python#-cronograma" class="hash-link" aria-label="Link direto para 📅 Cronograma" title="Link direto para 📅 Cronograma" translate="no">​</a></h3>
<p>As aulas acontecerão às <strong>segundas e quartas-feiras, sempre às 20h30</strong>:</p>
<ul>
<li class=""><del><strong>20/04/2026</strong></del> (Segunda-feira) - Remarcada devido a feriado.</li>
<li class=""><del><strong>22/04/2026</strong></del> (Quarta-feira) - Remarcada devido a feriado.</li>
<li class=""><strong>27/04/2026</strong> (Segunda-feira)</li>
<li class=""><strong>29/04/2026</strong> (Quarta-feira)</li>
<li class=""><strong>05/05/2026</strong> (Terça-feira)</li>
<li class=""><strong>12/05/2026</strong> (Terça-feira)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sobre-a-instrutora">Sobre a Instrutora<a href="https://codaqui.dev/blog/2026/03/30/curso-introducao-python#sobre-a-instrutora" class="hash-link" aria-label="Link direto para Sobre a Instrutora" title="Link direto para Sobre a Instrutora" translate="no">​</a></h2>
<p><strong>Paulinea</strong> está finalizando sua graduação em Análise e Desenvolvimento de Sistemas (ADS) pela PUCPR. Ela conheceu a Codaqui através do Carreira TI e se interessou fortemente pela proposta do projeto, pois estava em busca de realizar ações sociais na área de tecnologia.</p>
<p>Seu grande ponto forte é o ensino de <strong>Lógica de Programação e Python para iniciantes</strong>, com o objetivo de desmistificar a escrita de código e criar uma base sólida de aprendizado.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-que-você-vai-aprender">O Que Você Vai Aprender<a href="https://codaqui.dev/blog/2026/03/30/curso-introducao-python#o-que-voc%C3%AA-vai-aprender" class="hash-link" aria-label="Link direto para O Que Você Vai Aprender" title="Link direto para O Que Você Vai Aprender" translate="no">​</a></h2>
<ul>
<li class=""><strong>Fundamentos da Lógica</strong>: Algoritmos, código binário e diferença entre linguagens de alto e baixo nível.</li>
<li class=""><strong>Primeiros Passos no Python</strong>: Variáveis e tipos de dados (Strings, Inteiros, Flutuantes, Booleana).</li>
<li class=""><strong>Entrada e Saída</strong>: Funções <code>input()</code> e <code>print()</code>.</li>
<li class=""><strong>Operadores</strong>: Relacionais, aritméticos e lógicos (<code>AND</code>, <code>OR</code>, <code>NOT</code>).</li>
<li class=""><strong>Estruturas Condicionais</strong>: <code>if</code>, <code>elif</code> e <code>else</code>.</li>
<li class=""><strong>Laços de Repetição</strong>: <code>for</code> com <code>range()</code> e <code>while</code>.</li>
<li class=""><strong>Tratamento de Exceções</strong>: Blocos <code>try</code> e <code>except</code>.</li>
<li class=""><strong>Funções</strong>: Definição com <code>def</code>, parâmetros e <code>return</code>.</li>
<li class=""><strong>Listas e Matrizes</strong>: Índices, métodos <code>append()</code>, <code>pop()</code>, <code>remove()</code> e <code>sort()</code>.</li>
<li class=""><strong>Projeto Final</strong>: Construção completa de um <strong>Jogo da Velha</strong> funcional.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="para-quem-é-este-curso">Para Quem é Este Curso?<a href="https://codaqui.dev/blog/2026/03/30/curso-introducao-python#para-quem-%C3%A9-este-curso" class="hash-link" aria-label="Link direto para Para Quem é Este Curso?" title="Link direto para Para Quem é Este Curso?" translate="no">​</a></h2>
<p>Esse curso é direcionado a pessoas que estão iniciando na programação — perfeito para quem nunca escreveu uma linha de código e quer descobrir como os softwares funcionam.</p>
<p>A <strong>Codaqui</strong> é para todos que desejam aprender e crescer, independentemente da idade ou experiência prévia.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="como-participar">Como Participar?<a href="https://codaqui.dev/blog/2026/03/30/curso-introducao-python#como-participar" class="hash-link" aria-label="Link direto para Como Participar?" title="Link direto para Como Participar?" translate="no">​</a></h2>
<p>As inscrições estarão abertas em breve! <a class="" href="https://codaqui.dev/participe/estudar">Acesse o formulário de inscrição</a> ou <a class="" href="https://codaqui.dev/bio">confira nossos links oficiais</a>.</p>
<ul>
<li class="">📷 <strong>Instagram:</strong> <a href="http://instagram.com/paulinea.gp" target="_blank" rel="noopener noreferrer" class="">instagram.com/paulinea.gp</a></li>
<li class="">💻 <strong>GitHub:</strong> <a href="http://github.com/paulineagp" target="_blank" rel="noopener noreferrer" class="">github.com/paulineagp</a></li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reflexão-inicial">Reflexão Inicial<a href="https://codaqui.dev/blog/2026/03/30/curso-introducao-python#reflex%C3%A3o-inicial" class="hash-link" aria-label="Link direto para Reflexão Inicial" title="Link direto para Reflexão Inicial" translate="no">​</a></h2>
<ul>
<li class=""><strong>Você consegue pensar na "receita" passo a passo para resolver um problema comum do seu dia a dia?</strong></li>
<li class=""><strong>Quais processos manuais e repetitivos da sua rotina poderiam ser automatizados por um software?</strong></li>
<li class=""><strong>Se você pudesse construir qualquer sistema no computador hoje, o que ele faria?</strong></li>
</ul>
<p>Traga essas ideias para a nossa primeira aula e prepare-se para começar a falar a língua dos computadores!</p>]]></content:encoded>
            <category>curso</category>
            <category>comunidade</category>
            <category>programação</category>
            <category>python</category>
            <category>iniciantes</category>
            <category>institucional</category>
        </item>
        <item>
            <title><![CDATA[T.I. Social em ação 🐾🍫 — Prestação de contas da AUMIGO e da Páscoa Solidária]]></title>
            <link>https://codaqui.dev/blog/2026/03/26/aumigo-prestacao-de-contas</link>
            <guid>https://codaqui.dev/blog/2026/03/26/aumigo-prestacao-de-contas</guid>
            <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[🎉 Encerramos a primeira ação do ano da T.I. Social em apoio aos animais! A campanha AUMIGO reuniu conscientização, mobilização e muita solidariedade para ajudar protetores e projetos da nossa região.]]></description>
            <content:encoded><![CDATA[<p>🎉 <strong>Encerramos a primeira ação do ano da T.I. Social em apoio aos animais!</strong> A campanha <strong>AUMIGO</strong> reuniu conscientização, mobilização e muita solidariedade para ajudar protetores e projetos da nossa região.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-sobre-a-campanha">🐶 Sobre a campanha<a href="https://codaqui.dev/blog/2026/03/26/aumigo-prestacao-de-contas#-sobre-a-campanha" class="hash-link" aria-label="Link direto para 🐶 Sobre a campanha" title="Link direto para 🐶 Sobre a campanha" translate="no">​</a></h2>
<p>Mais do que arrecadar recursos, a AUMIGO foi sobre <strong>gente cuidando de gente — e de bichos</strong>. Além da cartilha com orientações sobre como agir em situações envolvendo animais, realizamos uma <strong>campanha de doação e venda de cookies</strong>, que ajudou a garantir alimento para muitos pets resgatados. 🐱</p>
<blockquote>
<p>💚 Cada cookie vendido, cada real doado e cada compartilhamento se transformou em ração, medicamento e cuidado para quem mais precisa.</p>
</blockquote>
<hr>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-o-impacto-que-conseguimos-juntos">📊 O impacto que conseguimos juntos<a href="https://codaqui.dev/blog/2026/03/26/aumigo-prestacao-de-contas#-o-impacto-que-conseguimos-juntos" class="hash-link" aria-label="Link direto para 📊 O impacto que conseguimos juntos" title="Link direto para 📊 O impacto que conseguimos juntos" translate="no">​</a></h2>
<style data-emotion="css csl15p">.css-csl15p{--Grid-columns:12;--Grid-columnSpacing:16px;--Grid-rowSpacing:16px;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;min-width:0;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:var(--Grid-rowSpacing) var(--Grid-columnSpacing);margin-top:16px;margin-bottom:16px;}.css-csl15p >*{--Grid-parent-columns:12;}.css-csl15p >*{--Grid-parent-columnSpacing:16px;}.css-csl15p >*{--Grid-parent-rowSpacing:16px;}</style><div class="MuiGrid-root MuiGrid-container MuiGrid-direction-xs-row MuiGrid-spacing-xs-2 css-csl15p"><style data-emotion="css lscdn3">.css-lscdn3{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;width:calc(100% * 12 / var(--Grid-parent-columns) - (var(--Grid-parent-columns) - 12) * (var(--Grid-parent-columnSpacing) / var(--Grid-parent-columns)));min-width:0;box-sizing:border-box;}@media (min-width:600px){.css-lscdn3{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;width:calc(100% * 6 / var(--Grid-parent-columns) - (var(--Grid-parent-columns) - 6) * (var(--Grid-parent-columnSpacing) / var(--Grid-parent-columns)));}}</style><div class="MuiGrid-root MuiGrid-direction-xs-row MuiGrid-grid-xs-12 MuiGrid-grid-sm-6 css-lscdn3"><style data-emotion="css vy6x2r">.css-vy6x2r{overflow:hidden;background-image:none;height:100%;border-left:4px solid;border-color:#2e7d32;}</style><style data-emotion="css ar1lks">.css-ar1lks{background-color:#FFFFFF;color:rgba(0, 0, 0, 0.87);-webkit-transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:8px;box-shadow:var(--Paper-shadow);background-image:var(--Paper-overlay);overflow:hidden;background-image:none;height:100%;border-left:4px solid;border-color:#2e7d32;}</style><div class="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root css-ar1lks" style="--Paper-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)"><style data-emotion="css 15q2cw4">.css-15q2cw4{padding:16px;}.css-15q2cw4:last-child{padding-bottom:24px;}</style><div class="MuiCardContent-root css-15q2cw4"><style data-emotion="css x2jivo">.css-x2jivo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:8px;}.css-x2jivo>:not(style):not(style){margin:0;}.css-x2jivo>:not(style)~:not(style){margin-left:12px;}</style><div class="MuiStack-root css-x2jivo"><style data-emotion="css 1hqks0z">.css-1hqks0z{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;color:#2e7d32;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1hqks0z" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M1 11h4v11H1zm15-7.75C16.65 2.49 17.66 2 18.7 2 20.55 2 22 3.45 22 5.3c0 2.27-2.91 4.9-6 7.7-3.09-2.81-6-5.44-6-7.7C10 3.45 11.45 2 13.3 2c1.04 0 2.05.49 2.7 1.25M20 17h-7l-2.09-.73.33-.94L13 16h2.82c.65 0 1.18-.53 1.18-1.18 0-.49-.31-.93-.77-1.11L8.97 11H7v9.02L14 22l8.01-3c-.01-1.1-.9-2-2.01-2"></path></svg><style data-emotion="css 1qf2bao">.css-1qf2bao{margin:0;font-family:var(--ifm-font-family-base, system-ui, -apple-system, sans-serif);font-weight:400;font-size:0.75rem;line-height:2.66;text-transform:uppercase;color:rgba(0, 0, 0, 0.6);}</style><span class="MuiTypography-root MuiTypography-overline css-1qf2bao">Arrecadação total</span></div><style data-emotion="css 108dof3">.css-108dof3{margin:0;font-family:var(--ifm-font-family-base, system-ui, -apple-system, sans-serif);font-weight:400;font-size:2.125rem;line-height:1.235;font-weight:800;color:#2e7d32;}</style><h4 class="MuiTypography-root MuiTypography-h4 css-108dof3">R$ 2.859,45</h4><style data-emotion="css 1wpunic">.css-1wpunic{margin:0;font-family:var(--ifm-font-family-base, system-ui, -apple-system, sans-serif);font-weight:400;font-size:0.875rem;line-height:1.43;color:rgba(0, 0, 0, 0.6);}</style><p class="MuiTypography-root MuiTypography-body2 css-1wpunic">Doações + venda de cookies</p></div></div></div><div class="MuiGrid-root MuiGrid-direction-xs-row MuiGrid-grid-xs-12 MuiGrid-grid-sm-6 css-lscdn3"><style data-emotion="css k351sn">.css-k351sn{overflow:hidden;background-image:none;height:100%;border-left:4px solid;border-color:#ed6c02;}</style><style data-emotion="css fmr4dt">.css-fmr4dt{background-color:#FFFFFF;color:rgba(0, 0, 0, 0.87);-webkit-transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:8px;box-shadow:var(--Paper-shadow);background-image:var(--Paper-overlay);overflow:hidden;background-image:none;height:100%;border-left:4px solid;border-color:#ed6c02;}</style><div class="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root css-fmr4dt" style="--Paper-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)"><div class="MuiCardContent-root css-15q2cw4"><div class="MuiStack-root css-x2jivo"><style data-emotion="css 2yi6s6">.css-2yi6s6{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;color:#ed6c02;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-2yi6s6" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M11 9H9V2H7v7H5V2H3v7c0 2.12 1.66 3.84 3.75 3.97V22h2.5v-9.03C11.34 12.84 13 11.12 13 9V2h-2zm5-3v8h2.5v8H21V2c-2.76 0-5 2.24-5 4"></path></svg><span class="MuiTypography-root MuiTypography-overline css-1qf2bao">Ração adquirida</span></div><style data-emotion="css 49khsn">.css-49khsn{margin:0;font-family:var(--ifm-font-family-base, system-ui, -apple-system, sans-serif);font-weight:400;font-size:2.125rem;line-height:1.235;font-weight:800;color:#ed6c02;}</style><h4 class="MuiTypography-root MuiTypography-h4 css-49khsn">417,5 kg</h4><p class="MuiTypography-root MuiTypography-body2 css-1wpunic">Distribuídos entre protetores</p></div></div></div><div class="MuiGrid-root MuiGrid-direction-xs-row MuiGrid-grid-xs-12 MuiGrid-grid-sm-6 css-lscdn3"><style data-emotion="css ugfluv">.css-ugfluv{overflow:hidden;background-image:none;height:100%;border-left:4px solid;border-color:#57B593;}</style><style data-emotion="css 1ajiyfe">.css-1ajiyfe{background-color:#FFFFFF;color:rgba(0, 0, 0, 0.87);-webkit-transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:8px;box-shadow:var(--Paper-shadow);background-image:var(--Paper-overlay);overflow:hidden;background-image:none;height:100%;border-left:4px solid;border-color:#57B593;}</style><div class="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root css-1ajiyfe" style="--Paper-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)"><div class="MuiCardContent-root css-15q2cw4"><div class="MuiStack-root css-x2jivo"><style data-emotion="css 1q5hgty">.css-1q5hgty{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;color:#57B593;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1q5hgty" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><circle cx="4.5" cy="9.5" r="2.5"></circle><circle cx="9" cy="5.5" r="2.5"></circle><circle cx="15" cy="5.5" r="2.5"></circle><circle cx="19.5" cy="9.5" r="2.5"></circle><path d="M17.34 14.86c-.87-1.02-1.6-1.89-2.48-2.91-.46-.54-1.05-1.08-1.75-1.32q-.165-.06-.33-.09c-.25-.04-.52-.04-.78-.04s-.53 0-.79.05q-.165.03-.33.09c-.7.24-1.28.78-1.75 1.32-.87 1.02-1.6 1.89-2.48 2.91-1.31 1.31-2.92 2.76-2.62 4.79.29 1.02 1.02 2.03 2.33 2.32.73.15 3.06-.44 5.54-.44h.18c2.48 0 4.81.58 5.54.44 1.31-.29 2.04-1.31 2.33-2.32.31-2.04-1.3-3.49-2.61-4.8"></path></svg><span class="MuiTypography-root MuiTypography-overline css-1qf2bao">Animais beneficiados</span></div><style data-emotion="css 1hc643x">.css-1hc643x{margin:0;font-family:var(--ifm-font-family-base, system-ui, -apple-system, sans-serif);font-weight:400;font-size:2.125rem;line-height:1.235;font-weight:800;color:#57B593;}</style><h4 class="MuiTypography-root MuiTypography-h4 css-1hc643x">+ de 350</h4><p class="MuiTypography-root MuiTypography-body2 css-1wpunic">Cães e gatos resgatados</p></div></div></div><div class="MuiGrid-root MuiGrid-direction-xs-row MuiGrid-grid-xs-12 MuiGrid-grid-sm-6 css-lscdn3"><style data-emotion="css vjdfsm">.css-vjdfsm{overflow:hidden;background-image:none;height:100%;border-left:4px solid;border-color:#87D2B7;}</style><style data-emotion="css 1eu7uaq">.css-1eu7uaq{background-color:#FFFFFF;color:rgba(0, 0, 0, 0.87);-webkit-transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:8px;box-shadow:var(--Paper-shadow);background-image:var(--Paper-overlay);overflow:hidden;background-image:none;height:100%;border-left:4px solid;border-color:#87D2B7;}</style><div class="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root css-1eu7uaq" style="--Paper-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)"><div class="MuiCardContent-root css-15q2cw4"><div class="MuiStack-root css-x2jivo"><style data-emotion="css nipt02">.css-nipt02{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;color:#87D2B7;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-nipt02" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M6 3h12v2H6zm11 3H7c-1.1 0-2 .9-2 2v11c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2m-1 9h-2.5v2.5h-3V15H8v-3h2.5V9.5h3V12H16z"></path></svg><span class="MuiTypography-root MuiTypography-overline css-1qf2bao">Itens adicionais</span></div><style data-emotion="css 1auxaaz">.css-1auxaaz{margin:0;font-family:var(--ifm-font-family-base, system-ui, -apple-system, sans-serif);font-weight:400;font-size:2.125rem;line-height:1.235;font-weight:800;color:#87D2B7;}</style><h4 class="MuiTypography-root MuiTypography-h4 css-1auxaaz">Medicamentos</h4><p class="MuiTypography-root MuiTypography-body2 css-1wpunic">+ acessórios para os pets</p></div></div></div></div>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Transparência</div><div class="admonitionContent_BuS1"><p>Toda a arrecadação foi convertida em insumos para protetores e projetos parceiros — <strong>nenhum centavo ficou pelo caminho</strong>.</p></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-para-quem-foram-as-doações">🤝 Para quem foram as doações<a href="https://codaqui.dev/blog/2026/03/26/aumigo-prestacao-de-contas#-para-quem-foram-as-doa%C3%A7%C3%B5es" class="hash-link" aria-label="Link direto para 🤝 Para quem foram as doações" title="Link direto para 🤝 Para quem foram as doações" translate="no">​</a></h2>
<p>As doações foram destinadas a projetos e protetores da região que fazem um trabalho incrível pelos animais:</p>
<ul>
<li class="">🐾 <a href="https://www.instagram.com/maurinha_dos_cachorrinhos/" target="_blank" rel="noopener noreferrer" class="">@maurinha_dos_cachorrinhos</a></li>
<li class="">🐾 <a href="https://www.instagram.com/amorsemracadefinida/" target="_blank" rel="noopener noreferrer" class="">@amorsemracadefinida</a></li>
<li class="">🐾 <a href="https://www.instagram.com/santuariofelinomga/" target="_blank" rel="noopener noreferrer" class="">@santuariofelinomga</a></li>
<li class="">🐾 <a href="https://www.instagram.com/projetoronronarmga/" target="_blank" rel="noopener noreferrer" class="">@projetoronronarmga</a></li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-páscoa-solidária--partilhar-é-o-verdadeiro-sabor">🍫 Páscoa Solidária — partilhar é o verdadeiro sabor<a href="https://codaqui.dev/blog/2026/03/26/aumigo-prestacao-de-contas#-p%C3%A1scoa-solid%C3%A1ria--partilhar-%C3%A9-o-verdadeiro-sabor" class="hash-link" aria-label="Link direto para 🍫 Páscoa Solidária — partilhar é o verdadeiro sabor" title="Link direto para 🍫 Páscoa Solidária — partilhar é o verdadeiro sabor" translate="no">​</a></h2>
<p>Uma Páscoa <strong>mais doce e cheia de propósito</strong>! ❤️</p>
<p>Neste ano, o Projeto T.I. Social arrecadou:</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Páscoa Solidária 2026</div><div class="admonitionContent_BuS1"><p>🍫 <strong>464 caixas de bombons</strong> entregues para a <strong>APAE</strong> e a <strong>Associação Oriental de Maringá</strong>, levando mais alegria para muitas crianças.</p></div></div>
<p>Porque partilhar é o verdadeiro sabor dessa data.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-obrigado">💚 Obrigado!<a href="https://codaqui.dev/blog/2026/03/26/aumigo-prestacao-de-contas#-obrigado" class="hash-link" aria-label="Link direto para 💚 Obrigado!" title="Link direto para 💚 Obrigado!" translate="no">​</a></h2>
<p>Obrigado a todos que contribuíram, compraram cookies, doaram ração, compartilharam a campanha e ajudaram a fortalecer essa rede de cuidado pelos animais e pelas pessoas da nossa comunidade.</p>
<p>🌐 Conheça mais sobre o trabalho da comunidade no site oficial: <strong><a href="https://www.tisocial.org.br/" target="_blank" rel="noopener noreferrer" class="">tisocial.org.br</a></strong></p>]]></content:encoded>
            <category>prestacao-de-contas</category>
            <category>ti-social</category>
            <category>aumigo</category>
            <category>animais</category>
            <category>solidariedade</category>
            <category>comunidade</category>
        </item>
        <item>
            <title><![CDATA[Curso de Gestão e Produtividade com Danilo Mesquita]]></title>
            <link>https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita</link>
            <guid>https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita</guid>
            <pubDate>Thu, 29 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Curso de Gestão e Produtividade]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://multificiente.com.br/wp-content/uploads/elementor/thumbs/xAutor-p7suykqun2ypikqu69cpu440xccgdx52ecl6562u5a.png.pagespeed.ic.86-124-n3N.webp" alt="Curso de Gestão e Produtividade" class="img_ev3q"></p>
<p>Em fevereiro de 2026, a Codaqui tem o prazer de anunciar um curso especial sobre <strong>Gestão e Produtividade</strong>, ministrado por <strong>Danilo Mesquita</strong>, empreendedor e especialista reconhecido na área.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sobre-o-curso">Sobre o Curso<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#sobre-o-curso" class="hash-link" aria-label="Link direto para Sobre o Curso" title="Link direto para Sobre o Curso" translate="no">​</a></h2>
<p>O curso será dividido em três encontros que abordarão desde os fundamentos da produtividade pessoal até técnicas avançadas de gestão do tempo e resultados:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-cronograma">📅 Cronograma<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#-cronograma" class="hash-link" aria-label="Link direto para 📅 Cronograma" title="Link direto para 📅 Cronograma" translate="no">​</a></h3>
<ul>
<li class=""><strong><del>10/02</del></strong> | 18/02 - Aula de Introdução</li>
<li class=""><strong><del>24/02 e 26/02</del></strong> | 24/02 &amp; 02/03 - Aulas de Aprofundamento</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sobre-o-instrutor">Sobre o Instrutor<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#sobre-o-instrutor" class="hash-link" aria-label="Link direto para Sobre o Instrutor" title="Link direto para Sobre o Instrutor" translate="no">​</a></h2>
<p><strong>Danilo Mesquita</strong> é empreendedor à frente do <a href="https://multificiente.com.br/" target="_blank" rel="noopener noreferrer" class="">Multificiente</a>, plataforma dedicada a ajudar pessoas e empresas a alcançarem alta performance através da produtividade e colaboração.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="experiência-profissional">Experiência Profissional<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#experi%C3%AAncia-profissional" class="hash-link" aria-label="Link direto para Experiência Profissional" title="Link direto para Experiência Profissional" translate="no">​</a></h3>
<p>Com mais de <strong>25 anos de experiência em TI</strong>, Danilo construiu uma carreira sólida passando por diversas posições estratégicas, desde técnico de suporte até cargos de diretoria. Atualmente, ocupa os cargos de:</p>
<ul>
<li class=""><strong>Diretor de Operações</strong> na VEXPRO Business IT</li>
<li class=""><strong>Diretor de Produtos e Soluções</strong> no Grupo SPRO</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="especialização-em-produtividade">Especialização em Produtividade<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#especializa%C3%A7%C3%A3o-em-produtividade" class="hash-link" aria-label="Link direto para Especialização em Produtividade" title="Link direto para Especialização em Produtividade" translate="no">​</a></h3>
<p>Desde 2013, Danilo dedica-se ao estudo e prática dos temas de <strong>produtividade e colaboração</strong>. Já realizou:</p>
<ul>
<li class="">Diversas palestras sobre o tema em várias cidades do Brasil</li>
<li class="">Participação em grandes eventos da Microsoft Brasil</li>
<li class="">Treinamentos em mais de 15 estados brasileiros para empresas de grande porte</li>
<li class="">Promoção de conceitos de produtividade corporativa e colaboração com ferramentas Microsoft Office 365</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="formação-acadêmica">Formação Acadêmica<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#forma%C3%A7%C3%A3o-acad%C3%AAmica" class="hash-link" aria-label="Link direto para Formação Acadêmica" title="Link direto para Formação Acadêmica" translate="no">​</a></h3>
<ul>
<li class=""><strong>Administração de Empresas</strong> - UniCEUB</li>
<li class=""><strong>Gestão de Produtos</strong> - FGV</li>
<li class=""><strong>Gestão Estratégica de Empresas</strong> - UNINTER (em andamento)</li>
<li class="">Certificações em Microsoft, VMware, ITIL e Agile SCRUM</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="filosofia-de-trabalho">Filosofia de Trabalho<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#filosofia-de-trabalho" class="hash-link" aria-label="Link direto para Filosofia de Trabalho" title="Link direto para Filosofia de Trabalho" translate="no">​</a></h3>
<blockquote>
<p>"No que diz respeito ao empenho, ao compromisso, ao esforço, à dedicação, não existe meio termo. Ou você faz uma coisa bem feita ou não faz."<br>
— Ayrton Senna</p>
</blockquote>
<p>Danilo acredita que <strong>ser Multificiente é mais do que ser multitarefa</strong>: é saber unir eficiência e eficácia para alcançar resultados incríveis em pouco tempo. Sua abordagem integra conceitos de alta performance profissional com práticas esportivas, demonstrando que atitude de excelência permeia todas as áreas da vida.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-que-você-vai-aprender">O Que Você Vai Aprender<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#o-que-voc%C3%AA-vai-aprender" class="hash-link" aria-label="Link direto para O Que Você Vai Aprender" title="Link direto para O Que Você Vai Aprender" translate="no">​</a></h2>
<p>Vamos atualizar em breve os tópicos específicos que serão abordados no curso. Fique atento!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="para-quem-é-este-curso">Para Quem é Este Curso?<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#para-quem-%C3%A9-este-curso" class="hash-link" aria-label="Link direto para Para Quem é Este Curso?" title="Link direto para Para Quem é Este Curso?" translate="no">​</a></h2>
<p>Este curso é ideal para:</p>
<ul>
<li class="">Profissionais que desejam melhorar sua gestão do tempo e aumentar a produtividade;</li>
<li class="">Líderes e gestores que buscam otimizar processos e resultados em suas equipes;</li>
<li class="">Adolescentes e adultos interessados em desenvolver habilidades de organização pessoal e profissional!</li>
</ul>
<p>A <strong>Codaqui</strong> é para todos que desejam aprender e crescer, independentemente da idade ou experiência prévia.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="como-participar">Como Participar?<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#como-participar" class="hash-link" aria-label="Link direto para Como Participar?" title="Link direto para Como Participar?" translate="no">​</a></h2>
<p>As inscrições já estão abertas! Acesse o formulário de inscrição:</p>
<ul>
<li class=""><a class="" href="https://codaqui.dev/participe/estudar">#Quero Estudar! - Formulário de Inscrição</a></li>
<li class=""><a class="" href="https://codaqui.dev/bio">Nossos links oficiais</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="mais-informações-sobre-o-danilo">Mais Informações sobre o Danilo<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#mais-informa%C3%A7%C3%B5es-sobre-o-danilo" class="hash-link" aria-label="Link direto para Mais Informações sobre o Danilo" title="Link direto para Mais Informações sobre o Danilo" translate="no">​</a></h2>
<p>Para conhecer mais sobre o trabalho do Danilo Mesquita:</p>
<ul>
<li class="">🌐 <strong>Site:</strong> <a href="https://multificiente.com.br/" target="_blank" rel="noopener noreferrer" class="">multificiente.com.br</a></li>
<li class="">📱 <strong>Instagram:</strong> <a href="https://www.instagram.com/danilo_mesquita/" target="_blank" rel="noopener noreferrer" class="">@danilo_mesquita</a></li>
<li class="">💼 <strong>LinkedIn:</strong> <a href="https://www.linkedin.com/in/dmesquita/" target="_blank" rel="noopener noreferrer" class="">linkedin.com/in/dmesquita</a></li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reflexão-inicial">Reflexão Inicial<a href="https://codaqui.dev/blog/2026/01/29/curso-de-gestao-e-produtividade-com-danilo-mesquita#reflex%C3%A3o-inicial" class="hash-link" aria-label="Link direto para Reflexão Inicial" title="Link direto para Reflexão Inicial" translate="no">​</a></h2>
<p>Antes mesmo de começar o curso, te convidamos a refletir:</p>
<ul>
<li class=""><strong>Quanto tempo você desperdiça por dia com distrações?</strong></li>
<li class=""><strong>Você consegue priorizar suas tarefas de forma eficiente?</strong></li>
<li class=""><strong>Quais são os maiores obstáculos para sua produtividade?</strong></li>
</ul>
<p>Traga essas reflexões para a primeira aula e prepare-se para transformar sua relação com o tempo e os resultados!</p>
<hr>
<p><em>Mais do que o dinheiro, o tempo é um bem inestimável. Cuide dele!</em></p>]]></content:encoded>
            <category>Institucional</category>
            <category>curso</category>
            <category>comunidade</category>
            <category>produtividade</category>
            <category>gestão</category>
            <category>educação</category>
        </item>
        <item>
            <title><![CDATA[Prestação de Contas do DevPR Conf 2025]]></title>
            <link>https://codaqui.dev/blog/2025/10/23/prestacao-de-contas-do-devpr-conf-2025</link>
            <guid>https://codaqui.dev/blog/2025/10/23/prestacao-de-contas-do-devpr-conf-2025</guid>
            <pubDate>Thu, 23 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Espero que estejam bem. Gostaríamos de compartilhar algumas atualizações importantes sobre o nosso recente evento. Primeiramente, estamos felizes em informar que concluímos o evento com sucesso, estamos com saldo positivo.]]></description>
            <content:encoded><![CDATA[<p>Espero que estejam bem. Gostaríamos de compartilhar algumas atualizações importantes sobre o nosso recente evento. Primeiramente, estamos felizes em informar que concluímos o evento com sucesso, estamos com saldo positivo.</p>
<p>Vale ressaltar que foi nosso primeiro ano usando completamente a ferramenta, então apesar de estarmos positivos financeiramente, encontramos alguns saldos a mais na conta e estamos tentando organizar para ter uma equivalência de 100% do saldo da nossa conta na Stone com a plataforma Open Collective.</p>
<p>Se você tiver qualquer dúvida ou precisar de mais informações, não hesite em participar das nossas reuniões semanais. Estamos sempre disponíveis para ajudar e esclarecer qualquer questão.</p>
<p>Agradecemos a todos pelo apoio contínuo e pela participação no evento. Continuaremos trabalhando para melhorar e trazer mais transparência e eficiência para nossos processos.</p>
<p><a href="https://opencollective.com/dashboard/codaqui/updates/zzaxon79-3jy8gpl3-kojpbrkd-emwl5v04" target="_blank" rel="noopener noreferrer" class="">Dados no Open Collective</a></p>]]></content:encoded>
            <category>Institucional</category>
            <category>historia</category>
            <category>comunidade</category>
            <category>devparaná</category>
        </item>
        <item>
            <title><![CDATA[Cloudflare Tunnel: economizando IPv4 ao expor serviços em VMs]]></title>
            <link>https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms</link>
            <guid>https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms</guid>
            <pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Este tutorial mostra, passo a passo e com exemplos práticos, como expor serviços que rodam em uma máquina virtual (VM) sem precisar de um IPv4 público dedicado, usando o Cloudflare Tunnel (cloudflared) no plano gratuito. O objetivo é um laboratório reprodutível um "piping server"), configurar o túnel e publicar um hostname gerenciado pelo Cloudflare.]]></description>
            <content:encoded><![CDATA[<p>Este tutorial mostra, passo a passo e com exemplos práticos, como expor serviços que rodam em uma máquina virtual (VM) sem precisar de um IPv4 público dedicado, usando o Cloudflare Tunnel (cloudflared) no plano gratuito. O objetivo é um laboratório reprodutível: criar uma VM, instalar sua aplicação (ex.: um "piping server"), configurar o túnel e publicar um hostname gerenciado pelo Cloudflare.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-que-você-vai-aprender">O que você vai aprender<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#o-que-voc%C3%AA-vai-aprender" class="hash-link" aria-label="Link direto para O que você vai aprender" title="Link direto para O que você vai aprender" translate="no">​</a></h2>
<ul>
<li class="">Por que usar uma VM para projetos e laboratórios rápidos</li>
<li class="">Como criar uma VM (visão geral) — foco no Azure (passos essenciais)</li>
<li class="">Criar conta no Cloudflare e preparar o domínio</li>
<li class="">Configurar Zero Trust / Access de forma básica</li>
<li class="">Instalar e configurar o Cloudflare Tunnel (cloudflared) na VM</li>
<li class="">Expor um serviço (ex.: piping server) através do túnel e testar</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="motivador">Motivador<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#motivador" class="hash-link" aria-label="Link direto para Motivador" title="Link direto para Motivador" translate="no">​</a></h2>
<p>Projetos caseiros muitas vezes precisam ser acessíveis pela internet. Tradicionalmente isso exige um IPv4 público, que pode ter custo elevado ou ser limitado pelo provedor. O Cloudflare Tunnel permite que você exponha serviços locais por meio de um túnel seguro até a rede Cloudflare, sem precisar de IP público. No plano gratuito é possível reduzir custos e manter controle sobre DNS, políticas e roteamento.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="checklist-rápido-pré-requisitos">Checklist rápido (pré-requisitos)<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#checklist-r%C3%A1pido-pr%C3%A9-requisitos" class="hash-link" aria-label="Link direto para Checklist rápido (pré-requisitos)" title="Link direto para Checklist rápido (pré-requisitos)" translate="no">​</a></h2>
<ul>
<li class="">Conta em um provedor de nuvem (ex.: Azure) com permissão para criar uma VM.</li>
<li class="">Conta gratuita no Cloudflare e domínio gerenciável no Cloudflare (DNS).</li>
<li class="">Acesso SSH à VM.
<ul>
<li class="">Recomenda-se usar o painel do Provider apenas para instalar o Cloudflared, e depois usar o Browser SSH do Cloudflare.</li>
</ul>
</li>
<li class="">Ferramentas básicas: curl, sudo, systemd</li>
</ul>
<p>Se alguma etapa não for possível (ex.: você não tem domínio), há alternativas: testar localmente com <code>cloudflared tunnel run</code> e usar um subdomínio temporário do Cloudflare durante o login interativo.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1--breve-explicação-máquinas-virtuais-e-por-que-usá-las">1 — Breve explicação: máquinas virtuais e por que usá-las<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#1--breve-explica%C3%A7%C3%A3o-m%C3%A1quinas-virtuais-e-por-que-us%C3%A1-las" class="hash-link" aria-label="Link direto para 1 — Breve explicação: máquinas virtuais e por que usá-las" title="Link direto para 1 — Breve explicação: máquinas virtuais e por que usá-las" translate="no">​</a></h2>
<p>Máquinas virtuais são instâncias isoladas que rodem um sistema operacional completo. Mesmo com arquiteturas modernas (containers, serverless), VMs ainda são úteis para:</p>
<ul>
<li class="">Ambientes persistentes para serviços de background</li>
<li class="">Testes de rede e configurações de baixo nível</li>
<li class="">Executar binários e ferramentas que exigem ambiente full-OS</li>
</ul>
<p>Para este tutorial usamos uma VM como host do serviço (piping server) e do agente <code>cloudflared</code> que estabelece o túnel.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2--criando-a-vm-visão-geral--azure">2 — Criando a VM (visão geral — Azure)<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#2--criando-a-vm-vis%C3%A3o-geral--azure" class="hash-link" aria-label="Link direto para 2 — Criando a VM (visão geral — Azure)" title="Link direto para 2 — Criando a VM (visão geral — Azure)" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="20---pré-requisitos">2.0 - Pré-requisitos<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#20---pr%C3%A9-requisitos" class="hash-link" aria-label="Link direto para 2.0 - Pré-requisitos" title="Link direto para 2.0 - Pré-requisitos" translate="no">​</a></h3>
<p>Instalação do Azure CLI e login na conta Azure.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">az login</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="21---criar-grupo-de-recurso">2.1 - Criar grupo de recurso<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#21---criar-grupo-de-recurso" class="hash-link" aria-label="Link direto para 2.1 - Criar grupo de recurso" title="Link direto para 2.1 - Criar grupo de recurso" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">az group create </span><span class="token parameter variable" style="color:#36acaa">--name</span><span class="token plain"> tutorial-codaqui </span><span class="token parameter variable" style="color:#36acaa">--location</span><span class="token plain"> eastus</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="22---criar-a-vm-sem-ipv4">2.2 - Criar a VM sem IPv4<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#22---criar-a-vm-sem-ipv4" class="hash-link" aria-label="Link direto para 2.2 - Criar a VM sem IPv4" title="Link direto para 2.2 - Criar a VM sem IPv4" translate="no">​</a></h3>
<p>Para um fluxo mais controlado (e reprodutível) use um ARM template com um arquivo de parâmetros JSON — esse é o esquema esperado para o arquivo de parâmetros. Salve o JSON abaixo como <code>vm-parameters.json</code> e tenha o template ARM (<code>vm-template.json</code>) ao lado.</p>
<p>Exemplo do comando de deploy:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">az deployment group create </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   --resource-group tutorial-codaqui </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   --template-file vm-template.json </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token parameter variable" style="color:#36acaa">--parameters</span><span class="token plain"> @vm-parameters.json</span><br></div></code></pre></div></div>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>Exemplo de vm-template.json</summary><div><div class="collapsibleContent_i85q">
<!-- -->
    ```json
    {
        "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "location": {
                "type": "string"
            },
            "networkInterfaceName": {
                "type": "string"
            },
            "networkSecurityGroupName": {
                "type": "string"
            },
            "networkSecurityGroupRules": {
                "type": "array"
            },
            "subnetName": {
                "type": "string"
            },
            "virtualNetworkName": {
                "type": "string"
            },
            "addressPrefixes": {
                "type": "array"
            },
            "subnets": {
                "type": "array"
            },
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">        "virtualMachineName": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "string"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "virtualMachineComputerName": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "string"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "virtualMachineRG": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "string"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "osDiskType": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "string"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "osDiskSizeGiB": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "int"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "osDiskDeleteOption": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "string"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "virtualMachineSize": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "string"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "nicDeleteOption": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "string"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "adminUsername": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "string"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "adminPassword": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "secureString"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    "variables": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "nsgId": "[resourceId(resourceGroup().name, 'Microsoft.Network/networkSecurityGroups', parameters('networkSecurityGroupName'))]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "vnetName": "[parameters('virtualNetworkName')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "vnetId": "[resourceId(resourceGroup().name,'Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "subnetRef": "[concat(variables('vnetId'), '/subnets/', parameters('subnetName'))]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    "resources": [</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "name": "[parameters('networkInterfaceName')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "Microsoft.Network/networkInterfaces",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "apiVersion": "2022-11-01",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "location": "[parameters('location')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "dependsOn": [</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "[concat('Microsoft.Network/networkSecurityGroups/', parameters('networkSecurityGroupName'))]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            ],</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "properties": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "ipConfigurations": [</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        "name": "ipconfig1",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        "properties": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                            "subnet": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                                "id": "[variables('subnetRef')]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                            },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                            "privateIPAllocationMethod": "Dynamic"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                ],</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "networkSecurityGroup": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    "id": "[variables('nsgId')]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "name": "[parameters('networkSecurityGroupName')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "Microsoft.Network/networkSecurityGroups",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "apiVersion": "2020-05-01",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "location": "[parameters('location')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "properties": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "securityRules": "[parameters('networkSecurityGroupRules')]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "name": "[parameters('virtualNetworkName')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "Microsoft.Network/virtualNetworks",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "apiVersion": "2024-01-01",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "location": "[parameters('location')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "properties": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "addressSpace": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    "addressPrefixes": "[parameters('addressPrefixes')]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "subnets": "[parameters('subnets')]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "name": "[parameters('virtualMachineName')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "Microsoft.Compute/virtualMachines",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "apiVersion": "2024-03-01",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "location": "[parameters('location')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "dependsOn": [</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "[concat('Microsoft.Network/networkInterfaces/', parameters('networkInterfaceName'))]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            ],</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "properties": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "hardwareProfile": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    "vmSize": "[parameters('virtualMachineSize')]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "storageProfile": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    "osDisk": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        "createOption": "fromImage",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        "managedDisk": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                            "storageAccountType": "[parameters('osDiskType')]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        "diskSizeGB": "[parameters('osDiskSizeGiB')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        "deleteOption": "[parameters('osDiskDeleteOption')]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    "imageReference": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        "publisher": "Canonical",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        "offer": "0001-com-ubuntu-server-jammy",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        "sku": "22_04-lts-gen2",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        "version": "latest"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "networkProfile": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    "networkInterfaces": [</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                            "id": "[resourceId('Microsoft.Network/networkInterfaces', parameters('networkInterfaceName'))]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                            "properties": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                                "deleteOption": "[parameters('nicDeleteOption')]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                            }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    ]</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "securityProfile": {},</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                "osProfile": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    "computerName": "[parameters('virtualMachineComputerName')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    "adminUsername": "[parameters('adminUsername')]",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    "adminPassword": "[parameters('adminPassword')]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ],</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    "outputs": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "adminUsername": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "type": "string",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            "value": "[parameters('adminUsername')]"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">```</span><br></div></code></pre></div></div>
</div></div></details>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>Exemplo de `vm-parameters.json` (schema/valores)</summary><div><div class="collapsibleContent_i85q">
<!-- -->
    ```json
    {
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": { "value": "eastus" },
        "networkInterfaceName": { "value": "tutorial-codaqui329" },
        "networkSecurityGroupName": { "value": "tutorial-codaqui-nsg" },
        "networkSecurityGroupRules": { "value": [] },
        "subnetName": { "value": "default" },
        "virtualNetworkName": { "value": "tutorial-codaqui-vnet" },
        "addressPrefixes": { "value": ["10.1.0.0/16"] },
        "subnets": { "value": [{ "name": "default", "properties": { "addressPrefix": "10.1.1.0/24" } }] },
        "virtualMachineName": { "value": "tutorial-codaqui" },
        "virtualMachineComputerName": { "value": "tutorial-codaqu" },
        "virtualMachineRG": { "value": "teste" },
        "osDiskType": { "value": "Premium_LRS" },
        "osDiskSizeGiB": { "value": 64 },
        "osDiskDeleteOption": { "value": "Delete" },
        "virtualMachineSize": { "value": "Standard_B1s" },
        "nicDeleteOption": { "value": "Detach" },
        "adminUsername": { "value": "codaqui" },
        "adminPassword": { "value": "CoDAqui123!" }
    }
    }
    ```
</div></div></details>
<p>Observações:</p>
<ul>
<li class="">O template cria uma VM Ubuntu Linux (gratuita) com autenticação por senha.</li>
<li class="">Use uma senha forte (exemplo: <code>CoDAqui123!</code>) ou altere no arquivo de parâmetros.</li>
<li class="">Sem IP público, use o Azure Serial Console ou Azure Bastion para acessar a VM após o deploy.</li>
<li class="">O Cloudflare Tunnel fará o roteamento, eliminando a necessidade de IP público fixo.</li>
</ul>
<p>Depois do deploy, você pode conectar via console do Azure Portal (Serial Console) usando o usuário <code>codaqui</code> e a senha definida.</p>
<p>Observação: a VM precisa de saída para internet para que o <code>cloudflared</code> consiga estabelecer o túnel.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3--criar-conta-no-cloudflare-e-configurar-dns">3 — Criar conta no Cloudflare e configurar DNS<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#3--criar-conta-no-cloudflare-e-configurar-dns" class="hash-link" aria-label="Link direto para 3 — Criar conta no Cloudflare e configurar DNS" title="Link direto para 3 — Criar conta no Cloudflare e configurar DNS" translate="no">​</a></h2>
<ol>
<li class="">Crie uma conta gratuita em <a href="https://dash.cloudflare.com/" target="_blank" rel="noopener noreferrer" class="">https://dash.cloudflare.com</a></li>
<li class="">Adicione seu domínio e aponte NS para o Cloudflare</li>
<li class="">No painel DNS, adicione um registro CNAME ou A para o subdomínio que você quer usar; mais adiante vamos mapear esse hostname para o túnel (Cloudflare criará o registro correto quando usarmos <code>cloudflared tunnel route dns</code>).</li>
</ol>
<p>Dica: no plano gratuito você já tem acesso ao serviço de DNS e a funcionalidades básicas de Zero Trust (Access). Não é necessário contratar plano pago para este fluxo básico.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4--noções-básicas-de-zero-trust-opcional-nessa-etapa">4 — Noções básicas de Zero Trust (opcional nessa etapa)<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#4--no%C3%A7%C3%B5es-b%C3%A1sicas-de-zero-trust-opcional-nessa-etapa" class="hash-link" aria-label="Link direto para 4 — Noções básicas de Zero Trust (opcional nessa etapa)" title="Link direto para 4 — Noções básicas de Zero Trust (opcional nessa etapa)" translate="no">​</a></h2>
<p>O Zero Trust no Cloudflare (Access) permite proteger o acesso ao host com políticas (e.g., SSO, lista de usuários). Para um laboratório você pode:</p>
<ul>
<li class="">Criar uma aplicação em Access e exigir autenticação via GitHub/Google</li>
<li class="">Usar políticas por endereço IP ou por identidade</li>
</ul>
<p>Essas configurações ficam no painel "Zero Trust" (antigo Access) e podem ser aplicadas ao hostname que vamos criar.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5--instalar-e-configurar-o-cloudflare-tunnel-na-vm">5 — Instalar e configurar o Cloudflare Tunnel na VM<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#5--instalar-e-configurar-o-cloudflare-tunnel-na-vm" class="hash-link" aria-label="Link direto para 5 — Instalar e configurar o Cloudflare Tunnel na VM" title="Link direto para 5 — Instalar e configurar o Cloudflare Tunnel na VM" translate="no">​</a></h2>
<p>Passos principais:</p>
<ol>
<li class="">Instalar <code>cloudflared</code></li>
<li class="">Logar o <code>cloudflared</code> na conta Cloudflare (gera um arquivo de credenciais)</li>
<li class="">Criar o túnel e mapear um hostname</li>
<li class="">Criar arquivo de configuração e rodar como serviço</li>
</ol>
<p>Exemplo (Ubuntu/Debian):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># baixar o binário mais recente</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-L</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-o</span><span class="token plain"> cloudflared </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">chmod</span><span class="token plain"> +x cloudflared</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">mv</span><span class="token plain"> cloudflared /usr/local/bin/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># fazer login (abre uma URL para autenticação no Cloudflare)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cloudflared tunnel login</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># criar o túnel (gera um UUID)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cloudflared tunnel create lab-tunnel</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># vincular um hostname DNS gerenciado pelo Cloudflare ao túnel</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cloudflared tunnel route dns lab-tunnel app.example.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># criar config em /etc/cloudflared/config.yml</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">mkdir</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-p</span><span class="token plain"> /etc/cloudflared</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">tee</span><span class="token plain"> /etc/cloudflared/config.yml </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> /dev/null </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token string" style="color:#e3116c">'YAML'</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">tunnel: &lt;TUNNEL-UUID&gt;</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">credentials-file: /etc/cloudflared/&lt;TUNNEL-UUID&gt;.json</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">ingress:</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">   - hostname: app.example.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">      service: http://localhost:8080</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">   - service: http_status:404</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">YAML</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># instalar como serviço systemd (opcional: cloudflared oferece comando helper)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">tee</span><span class="token plain"> /etc/systemd/system/cloudflared.service </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> /dev/null </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token string" style="color:#e3116c">'UNIT'</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">[Unit]</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">Description=Cloudflare Tunnel</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">After=network.target</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c"></span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">[Service]</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">Type=simple</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">User=root</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">ExecStart=/usr/local/bin/cloudflared --config /etc/cloudflared/config.yml run</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">Restart=on-failure</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c"></span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">[Install]</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">WantedBy=multi-user.target</span><br></div><div class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">UNIT</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> systemctl daemon-reload</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> systemctl </span><span class="token builtin class-name">enable</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--now</span><span class="token plain"> cloudflared</span><br></div></code></pre></div></div>
<p>Notas:</p>
<ul>
<li class="">Substitua <code>&lt;TUNNEL-UUID&gt;</code> e <code>app.example.com</code> pelos valores reais retornados pelos comandos.</li>
<li class="">Se <code>cloudflared tunnel login</code> não puder abrir um navegador na VM, execute o login em uma máquina local e copie o arquivo de credenciais para a VM, ou use um Service Token/Account para automação.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6--exemplo-deploy-de-um-piping-server-local-e-exposição-via-tunnel">6 — Exemplo: Deploy de um "Piping Server" local e exposição via Tunnel<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#6--exemplo-deploy-de-um-piping-server-local-e-exposi%C3%A7%C3%A3o-via-tunnel" class="hash-link" aria-label="Link direto para 6 — Exemplo: Deploy de um &quot;Piping Server&quot; local e exposição via Tunnel" title="Link direto para 6 — Exemplo: Deploy de um &quot;Piping Server&quot; local e exposição via Tunnel" translate="no">​</a></h2>
<p>Para o exemplo vamos supor que exista um serviço HTTP simples rodando na porta 8080 (poderia ser o piping server ou qualquer app). Se você quiser testar rápido:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># exemplo rápido com Python (na VM)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">python3 </span><span class="token parameter variable" style="color:#36acaa">-m</span><span class="token plain"> http.server </span><span class="token number" style="color:#36acaa">8080</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--bind</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">127.0</span><span class="token plain">.0.1</span><br></div></code></pre></div></div>
<p>Com o túnel configurado e o DNS apontado, a URL <a href="https://app.example.com/" target="_blank" rel="noopener noreferrer" class="">https://app.example.com</a> ficará disponível publicamente e será roteada para a aplicação local.</p>
<p>Teste:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-I</span><span class="token plain"> https://app.example.com</span><br></div></code></pre></div></div>
<p>Você deve receber uma resposta HTTP 200 (ou o cabeçalho do servidor simples).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="7--segurança-e-boas-práticas">7 — Segurança e boas práticas<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#7--seguran%C3%A7a-e-boas-pr%C3%A1ticas" class="hash-link" aria-label="Link direto para 7 — Segurança e boas práticas" title="Link direto para 7 — Segurança e boas práticas" translate="no">​</a></h2>
<ul>
<li class="">Use <code>cloudflared tunnel route dns</code> para que o Cloudflare gerencie o DNS do hostname</li>
<li class="">Restrinja o acesso com Zero Trust/Access quando expor serviços administrativos</li>
<li class="">Mantenha <code>cloudflared</code> atualizado</li>
<li class="">Automatize o deploy do tunnel com scripts/secrets quando usar em produção</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="8--limitações-e-casos-de-uso">8 — Limitações e casos de uso<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#8--limita%C3%A7%C3%B5es-e-casos-de-uso" class="hash-link" aria-label="Link direto para 8 — Limitações e casos de uso" title="Link direto para 8 — Limitações e casos de uso" translate="no">​</a></h2>
<ul>
<li class="">Cloudflare Tunnel não substitui redes privadas complexas ou balanceamento interno avançado</li>
<li class="">Para serviços com alto throughput verifique limites do plano e latência</li>
<li class="">Economiza custo de IP público e simplifica roteamento para pequenos serviços e laboratórios</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusão">Conclusão<a href="https://codaqui.dev/blog/2025/08/22/cloudflare-tunnel-economizando-ipv4-ao-expor-servicos-em-vms#conclus%C3%A3o" class="hash-link" aria-label="Link direto para Conclusão" title="Link direto para Conclusão" translate="no">​</a></h2>
<p>O Cloudflare Tunnel é uma solução prática para expor serviços rodando em VMs sem a necessidade de um IPv4 público dedicado. Para laboratórios e projetos pessoais ele reduz custo e adiciona camadas úteis de segurança e gestão via Cloudflare.</p>
<p>Se quiser, no próximo artigo podemos:</p>
<ul>
<li class="">Automatizar criação do túnel via CI/CD</li>
<li class="">Integrar autenticação SSO (Zero Trust) ao hostname</li>
<li class="">Expor múltiplos serviços com path-based routing</li>
</ul>
<hr>
<p>Se preferir que eu atualize também um passo a passo completo com prints, arquivos de configuração e exemplos de systemd mais avançados, me diga que eu adiciono na sequência.</p>]]></content:encoded>
            <category>Tutoriais</category>
            <category>cloudflare</category>
            <category>networking</category>
            <category>ipv4</category>
            <category>virtual-machine</category>
        </item>
        <item>
            <title><![CDATA[O que é o GIT?]]></title>
            <link>https://codaqui.dev/blog/2025/08/18/o-que-e-o-git</link>
            <guid>https://codaqui.dev/blog/2025/08/18/o-que-e-o-git</guid>
            <pubDate>Mon, 18 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Git é um sistema de controle de versão distribuído acessível pela linha de comando (CLI), que permite criar, rastrear e colaborar em um ou vários repositórios diretamente no terminal. Com ele, é possível registrar alterações, criar branches, fazer merges e manter o histórico do código com segurança.]]></description>
            <content:encoded><![CDATA[<p>Git é um sistema de controle de versão distribuído acessível pela linha de comando (CLI), que permite criar, rastrear e colaborar em um ou vários repositórios diretamente no terminal. Com ele, é possível registrar alterações, criar branches, fazer merges e manter o histórico do código com segurança.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="como-instalar-o-git">Como instalar o GIT?<a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#como-instalar-o-git" class="hash-link" aria-label="Link direto para Como instalar o GIT?" title="Link direto para Como instalar o GIT?" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-pré-requisitos">📋 <strong>Pré-requisitos</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#-pr%C3%A9-requisitos" class="hash-link" aria-label="Link direto para -pré-requisitos" title="Link direto para -pré-requisitos" translate="no">​</a></h3>
<ul>
<li class="">Acesso ao terminal/linha de comando</li>
<li class="">Privilégios de administrador (sudo)</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-linux">🐧 <strong>Linux</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#-linux" class="hash-link" aria-label="Link direto para -linux" title="Link direto para -linux" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="distribuições-baseadas-no-debian-ubuntu-mint-etc"><strong>Distribuições baseadas no Debian (Ubuntu, Mint, etc.)</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#distribui%C3%A7%C3%B5es-baseadas-no-debian-ubuntu-mint-etc" class="hash-link" aria-label="Link direto para distribuições-baseadas-no-debian-ubuntu-mint-etc" title="Link direto para distribuições-baseadas-no-debian-ubuntu-mint-etc" translate="no">​</a></h4>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo apt update &amp;&amp; sudo apt install git</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="distribuições-fedorarhelcentos"><strong>Distribuições Fedora/RHEL/CentOS</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#distribui%C3%A7%C3%B5es-fedorarhelcentos" class="hash-link" aria-label="Link direto para distribuições-fedorarhelcentos" title="Link direto para distribuições-fedorarhelcentos" translate="no">​</a></h4>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo dnf install git</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="arch-linux"><strong>Arch Linux</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#arch-linux" class="hash-link" aria-label="Link direto para arch-linux" title="Link direto para arch-linux" translate="no">​</a></h4>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo pacman -S git</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-macos">🍎 <strong>macOS</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#-macos" class="hash-link" aria-label="Link direto para -macos" title="Link direto para -macos" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="usando-homebrew-recomendado"><strong>Usando Homebrew (Recomendado)</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#usando-homebrew-recomendado" class="hash-link" aria-label="Link direto para usando-homebrew-recomendado" title="Link direto para usando-homebrew-recomendado" translate="no">​</a></h4>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">brew install git</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="usando-macports"><strong>Usando MacPorts</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#usando-macports" class="hash-link" aria-label="Link direto para usando-macports" title="Link direto para usando-macports" translate="no">​</a></h4>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo port install git</span><br></div></code></pre></div></div>
<blockquote>
<p><strong>💡 Curiosidade:</strong> O Homebrew também pode ser usado no Linux como alternativa aos gerenciadores nativos!</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-windows">🪟 <strong>Windows</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#-windows" class="hash-link" aria-label="Link direto para -windows" title="Link direto para -windows" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="opção-1-windows-subsystem-for-linux-wsl"><strong>Opção 1: Windows Subsystem for Linux (WSL)</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#op%C3%A7%C3%A3o-1-windows-subsystem-for-linux-wsl" class="hash-link" aria-label="Link direto para opção-1-windows-subsystem-for-linux-wsl" title="Link direto para opção-1-windows-subsystem-for-linux-wsl" translate="no">​</a></h4>
<ol>
<li class="">
<p><strong>Instalar WSL:</strong></p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">wsl --install -d Debian</span><br></div></code></pre></div></div>
</li>
<li class="">
<p><strong>Configurar WSL 2 como padrão:</strong></p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">wsl --set-default-version 2</span><br></div></code></pre></div></div>
</li>
<li class="">
<p><strong>Instalar Git no Debian:</strong></p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo apt update &amp;&amp; sudo apt install git</span><br></div></code></pre></div></div>
<p><strong>Veja o tópico acima de como instalar no Debian.</strong></p>
</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="opção-2-instalação-nativa"><strong>Opção 2: Instalação Nativa</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#op%C3%A7%C3%A3o-2-instala%C3%A7%C3%A3o-nativa" class="hash-link" aria-label="Link direto para opção-2-instalação-nativa" title="Link direto para opção-2-instalação-nativa" translate="no">​</a></h4>
<p><strong>Download automático via PowerShell:</strong></p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">winget install --id Git.Git -e --source winget</span><br></div></code></pre></div></div>
<p>Caso não funcione, você pode baixar o instalador diretamente do site oficial: <a href="https://git-scm.com/download/win" target="_blank" rel="noopener noreferrer" class="">git-scm.com</a>. e instalar manualmente a versão GUI.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="️-configuração-inicial">⚙️ <strong>Configuração Inicial</strong><a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#%EF%B8%8F-configura%C3%A7%C3%A3o-inicial" class="hash-link" aria-label="Link direto para ️-configuração-inicial" title="Link direto para ️-configuração-inicial" translate="no">​</a></h3>
<p><strong>Configurar identidade:</strong></p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">git config --global user.name "Seu Nome"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">git config --global user.email "seuemail@exemplo.com"</span><br></div></code></pre></div></div>
<p><strong>No VSCode</strong></p>
<p>1️⃣ <strong>Clonar um repositório para testar o funcionamento(metodo fácil):</strong></p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain"># Institucional da codaqui por exemplo</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">git clone https://github.com/codaqui/institucional.git</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-clonando-um-repositório-no-vscode">🚀 Clonando um Repositório no VSCode<a href="https://codaqui.dev/blog/2025/08/18/o-que-e-o-git#-clonando-um-reposit%C3%B3rio-no-vscode" class="hash-link" aria-label="Link direto para 🚀 Clonando um Repositório no VSCode" title="Link direto para 🚀 Clonando um Repositório no VSCode" translate="no">​</a></h2>
<p>2️⃣ <strong>No seu VSCode, clique no ícone de controle de código-fonte</strong></p>
<img decoding="async" loading="lazy" width="72" height="63" alt="image" src="https://github.com/user-attachments/assets/fd5c2a4f-409a-4298-a62e-0ed359244679" class="img_ev3q">
<hr>
<p>3️⃣ <strong>Clique em <em>CLONE REPOSITORY</em></strong></p>
<img decoding="async" loading="lazy" width="264" height="34" alt="image" src="https://github.com/user-attachments/assets/32475ffe-7c3e-4cda-8a3d-1204bba19c9c" class="img_ev3q">
<hr>
<p>4️⃣ <strong>Na parte inferior da barra de pesquisa, selecione <em>CLONE FROM GITHUB</em></strong></p>
<img decoding="async" loading="lazy" width="627" height="74" alt="image" src="https://github.com/user-attachments/assets/f2cd252d-d99d-4806-a26c-3a10f510e8fa" class="img_ev3q">
<hr>
<p>5️⃣ <strong>Será exibida a seguinte mensagem:</strong></p>
<img decoding="async" loading="lazy" width="570" height="203" alt="image" src="https://github.com/user-attachments/assets/3d3a4d6d-e8b2-4c88-9cde-5c3a5bc90ab4" class="img_ev3q">
<hr>
<p>6️⃣ <strong>Clique em ✅ <em>Allow</em></strong></p>
<hr>
<p>7️⃣ <strong>Faça login no GitHub</strong> 🔑</p>]]></content:encoded>
            <category>Tutoriais</category>
            <category>github</category>
            <category>linux</category>
            <category>queroajudar</category>
        </item>
        <item>
            <title><![CDATA[O que é SFML]]></title>
            <link>https://codaqui.dev/blog/2025/05/04/o-que-e-sfml</link>
            <guid>https://codaqui.dev/blog/2025/05/04/o-que-e-sfml</guid>
            <pubDate>Sun, 04 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[O SFML(Simple and Fast Multimedia Library) é uma biblioteca de desenvolvimento multimídia escrita em C++ que fornece uma interface simples para lidar com gráficos 2D, 3D, áudio, entrada do usuário (teclado, mouse, joystick), rede e janelas. Ele é amplamente utilizado para criar jogos, simuladores e outras aplicações gráficas devido à sua facilidade de uso, desempenho eficiente e suporte multiplataforma.]]></description>
            <content:encoded><![CDATA[<p>O SFML(Simple and Fast Multimedia Library) é uma biblioteca de desenvolvimento multimídia escrita em C++ que fornece uma interface simples para lidar com gráficos 2D, 3D, áudio, entrada do usuário (teclado, mouse, joystick), rede e janelas. Ele é amplamente utilizado para criar jogos, simuladores e outras aplicações gráficas devido à sua facilidade de uso, desempenho eficiente e suporte multiplataforma.</p>
<p>Se esta seção ainda não foi preenchida, você pode expandi-la explicando os principais recursos do SFML, como:</p>
<ul>
<li class=""><strong>Renderização gráfica</strong>: Criação de formas, sprites, texto e outros elementos visuais.</li>
<li class=""><strong>Manipulação de áudio</strong>: Reprodução de sons e músicas.</li>
<li class=""><strong>Gerenciamento de janelas</strong>: Criação e controle de janelas de aplicação.</li>
<li class=""><strong>Entrada do usuário</strong>: Detecção de eventos de teclado, mouse e outros dispositivos.</li>
<li class=""><strong>Rede</strong>: Comunicação via TCP e UDP.</li>
</ul>
<p>Neste projeto, optei por criar um exemplo simples — um cubo 3D — com o objetivo de apresentar de forma prática o que é possível construir utilizando este framework. A ideia é fornecer uma base visual e acessível para quem está começando, demonstrando como estruturas tridimensionais básicas podem ser renderizadas com facilidade.</p>
<p>Este cubo serve como ponto de partida para explorações mais avançadas, como animações, interações, iluminação e composição de cenas mais complexas. A imagem abaixo ilustra o resultado da implementação e evidenciam parte do potencial que essa ferramenta oferece para o desenvolvimento gráfico.</p>
<p><img decoding="async" loading="lazy" src="https://i.postimg.cc/0Qc8Z3cg/2025-05-05-18-34-10.gif" alt="Gif do Resultado, um cubo tridimensional" class="img_ev3q"></p>
<h1>Configuração do Ambiente para Desenvolvimento com SFML</h1>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="instalação-do-sfml">Instalação do SFML<a href="https://codaqui.dev/blog/2025/05/04/o-que-e-sfml#instala%C3%A7%C3%A3o-do-sfml" class="hash-link" aria-label="Link direto para Instalação do SFML" title="Link direto para Instalação do SFML" translate="no">​</a></h2>
<p>Para iniciar o processo, precisamos instalar o framework <strong>SFML</strong>. A instalação varia de acordo com o sistema operacional. No caso, estou utilizando <strong>Debian 12</strong> (image-6.1.0-34-amd64). Para instalar o SFML, execute o seguinte comando no terminal(é para funcionar em distros baseadas no debian):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">apt-get</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> libsfml-dev</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="windows-usando-vcpkg">Windows usando vcpkg.<a href="https://codaqui.dev/blog/2025/05/04/o-que-e-sfml#windows-usando-vcpkg" class="hash-link" aria-label="Link direto para Windows usando vcpkg." title="Link direto para Windows usando vcpkg." translate="no">​</a></h4>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">vcpkg</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> sfml</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="arch-usando-pacman">Arch usando pacman.<a href="https://codaqui.dev/blog/2025/05/04/o-que-e-sfml#arch-usando-pacman" class="hash-link" aria-label="Link direto para Arch usando pacman." title="Link direto para Arch usando pacman." translate="no">​</a></h4>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> pacman </span><span class="token parameter variable" style="color:#36acaa">-S</span><span class="token plain"> sfml</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="fedora-usando-dnf">Fedora usando dnf.<a href="https://codaqui.dev/blog/2025/05/04/o-que-e-sfml#fedora-usando-dnf" class="hash-link" aria-label="Link direto para Fedora usando dnf." title="Link direto para Fedora usando dnf." translate="no">​</a></h4>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> dnf </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> SFML-devel</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="instalação-do-gccg">Instalação do GCC/G++<a href="https://codaqui.dev/blog/2025/05/04/o-que-e-sfml#instala%C3%A7%C3%A3o-do-gccg" class="hash-link" aria-label="Link direto para Instalação do GCC/G++" title="Link direto para Instalação do GCC/G++" translate="no">​</a></h2>
<p>Após instalar o SFML, é necessário garantir que o compilador <strong>GCC/G++</strong> esteja instalado. Para isso, utilize o comando:</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="debiandistros-baseadas-no-debian">Debian(distros baseadas no debian)<a href="https://codaqui.dev/blog/2025/05/04/o-que-e-sfml#debiandistros-baseadas-no-debian" class="hash-link" aria-label="Link direto para Debian(distros baseadas no debian)" title="Link direto para Debian(distros baseadas no debian)" translate="no">​</a></h4>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">apt</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> build-essential</span><br></div></code></pre></div></div>
<p>No Windows, você pode instalar o GCC/G++ utilizando o <strong>MinGW</strong> ou <strong>MSYS2</strong>:</p>
<ol>
<li class="">
<p><strong>MinGW</strong>(recomendo):</p>
<ul>
<li class="">Baixe o instalador do MinGW no site oficial: <a href="http://www.mingw.org/" target="_blank" rel="noopener noreferrer" class="">MinGW</a>.</li>
<li class="">Durante a instalação, selecione os pacotes para o compilador GCC/G++.</li>
</ul>
</li>
<li class="">
<p><strong>MSYS2</strong>:</p>
<ul>
<li class="">Baixe e instale o MSYS2: <a href="https://www.msys2.org/" target="_blank" rel="noopener noreferrer" class="">MSYS2</a>.</li>
<li class="">No terminal do MSYS2, execute o comando:
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">pacman </span><span class="token parameter variable" style="color:#36acaa">-S</span><span class="token plain"> mingw-w64-x86_64-gcc</span><br></div></code></pre></div></div>
</li>
</ul>
</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="arch-linux">Arch Linux<a href="https://codaqui.dev/blog/2025/05/04/o-que-e-sfml#arch-linux" class="hash-link" aria-label="Link direto para Arch Linux" title="Link direto para Arch Linux" translate="no">​</a></h4>
<p>No Arch Linux, use o gerenciador de pacotes <code>pacman</code> para instalar o GCC/G++:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> pacman </span><span class="token parameter variable" style="color:#36acaa">-S</span><span class="token plain"> base-devel</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="fedora">Fedora<a href="https://codaqui.dev/blog/2025/05/04/o-que-e-sfml#fedora" class="hash-link" aria-label="Link direto para Fedora" title="Link direto para Fedora" translate="no">​</a></h4>
<p>No Fedora, use o gerenciador de pacotes <code>dnf</code> para instalar o GCC/G++:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> dnf groupinstall </span><span class="token string" style="color:#e3116c">"Development Tools"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> dnf </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> gcc-c++</span><br></div></code></pre></div></div>
<h1>Criando o projeto</h1>
<ol>
<li class="">
<p>Crie um diretório para o projeto:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">mkdir</span><span class="token plain"> meu_projeto_sfml</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">cd</span><span class="token plain"> meu_projeto_sfml</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Crie um arquivo de código-fonte principal, <code>main.cpp</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">nano</span><span class="token plain"> main.cpp</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Escreva o seguinte código básico no arquivo <code>main.cpp</code> para testar a integração com o SFML:</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">"WIN.h"</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property comment" style="color:#999988;font-style:italic">// Inclui o arquivo de cabeçalho da classe WIN</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Cria um objeto de janela com (largura, altura, título, cor de fundo e taxa de quadros especificados)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   WIN </span><span class="token function" style="color:#d73a49">window</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">800</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">600</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Cubo"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> sf</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Color</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Black</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">160</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Executa o loop principal da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Encerra o programa</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// fontes materiais:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// https://www.sfml-dev.org/tutorials/2.5/window-window.php</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// https://www.sfml-dev.org/tutorials/2.5/graphics-shape.php</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// https://www.sfml-dev.org/tutorials/2.5/graphics-vertex-array.php#vertex-array</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// calculos matematicos:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// https://pt.wikipedia.org/wiki/Matriz_de_rota%C3%A7%C3%A3o</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Crie um arquivo de código-fonte principal, <code>CUBE.cpp</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">nano</span><span class="token plain"> CUBE.cpp</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Escreva o seguinte código básico no arquivo <code>CUBE.cpp</code> para testar a integração com o SFML:</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">"CUBE.h"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">&lt;cmath&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Construtor</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Inicializa o cubo com um tamanho especificado e define sua cor padrão como branca</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token class-name">Cube</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">Cube</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> size</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">color</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">Color</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">White</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Define os vértices do cubo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Calcula metade do tamanho para posicionar os vértices em torno da origem</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> halfSize </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> size </span><span class="token operator" style="color:#393A34">/</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2.0f</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   vertices </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">Vector3f</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Vértice 0</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">Vector3f</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Vértice 1</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">Vector3f</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Vértice 2</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">Vector3f</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Vértice 3</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">Vector3f</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> halfSize</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Vértice 4</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">Vector3f</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> halfSize</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Vértice 5</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">Vector3f</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> halfSize</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Vértice 6</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">Vector3f</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">-</span><span class="token plain">halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> halfSize</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> halfSize</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Vértice 7</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Define as faces do cubo (índices dos vértices)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Cada face é representada por 4 índices que apontam para os vértices</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   faces </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">{</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Frente</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">{</span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Trás</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">{</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Esquerda</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">{</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Direita</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">{</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Topo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">{</span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Fundo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Atualiza a rotação do cubo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Aplica rotações nos eixos X, Y e Z para todos os vértices do cubo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token class-name">Cube</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">rotate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> angleX</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> angleY</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> angleZ</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Calcula os cossenos e senos dos ângulos para otimizar os cálculos</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> cosX </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">cos</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">angleX</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> sinX </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sin</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">angleX</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> cosY </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">cos</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">angleY</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> sinY </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sin</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">angleY</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> cosZ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">cos</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">angleZ</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> sinZ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sin</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">angleZ</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Itera sobre todos os vértices para aplicar as rotações</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">vertex </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> vertices</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// Rotação em torno do eixo X</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> y </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">y </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> cosX </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">z </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> sinX</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> z </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">y </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> sinX </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">z </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> cosX</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">y </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> y</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">z </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> z</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// Rotação em torno do eixo Y</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> x </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">x </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> cosY </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">z </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> sinY</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      z </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">x </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> sinY </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">z </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> cosY</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">x </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> x</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">z </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> z</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// Rotação em torno do eixo Z</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      x </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">x </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> cosZ </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">y </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> sinZ</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      y </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">x </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> sinZ </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">y </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> cosZ</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">x </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> x</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">y </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> y</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Desenha o cubo na janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Renderiza as faces do cubo na tela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token class-name">Cube</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">draw</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">RenderWindow </span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">window</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Obtenha o tamanho da janela para centralizar o cubo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   Vector2u windowSize </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getSize</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> centerX </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> windowSize</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">x </span><span class="token operator" style="color:#393A34">/</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2.0f</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Coordenada X do centro da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> centerY </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> windowSize</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">y </span><span class="token operator" style="color:#393A34">/</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2.0f</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Coordenada Y do centro da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Define as cores para cada face do cubo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">array</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">Color</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> faceColors </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      Color</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Red</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Frente</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      Color</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Green</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Trás</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      Color</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Blue</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Esquerda</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      Color</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Yellow</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Direita</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      Color</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Cyan</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Topo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      Color</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Magenta </span><span class="token comment" style="color:#999988;font-style:italic">// Fundo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Itera sobre as faces do cubo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">size_t i </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> faces</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">size</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i</span><span class="token operator" style="color:#393A34">++</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      ConvexShape polygon</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Cria um polígono convexo para representar a face</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      polygon</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setPointCount</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Cada face tem 4 vértices</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      polygon</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setFillColor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">faceColors</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Define a cor da face</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// Define os pontos do polígono com base nos vértices da face</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> j </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> j </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> j</span><span class="token operator" style="color:#393A34">++</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            Vector3f vertex </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vertices</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">faces</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">j</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Obtém o vértice correspondente</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            polygon</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setPoint</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">j</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">Vector2f</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">x </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> centerX</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">y </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> centerY</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Ajusta para o centro da tela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// Desenha o polígono na janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">draw</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">polygon</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Crie um arquivo de código-fonte principal, <code>CUBE.h</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">nano</span><span class="token plain"> CUBE.h</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Escreva o seguinte código básico no arquivo <code>CUBE.h</code> para testar a integração com o SFML:</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">ifndef</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property expression" style="color:#36acaa">CUBE_H</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">define</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property macro-name" style="color:#36acaa">CUBE_H</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">&lt;SFML/Graphics.hpp&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">&lt;array&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">using</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">namespace</span><span class="token plain"> sf</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Definição da classe Cube</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">Cube</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">private</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Vértices do cubo (8 vértices para um cubo 3D)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">array</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">Vector3f</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">8</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> vertices</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Faces do cubo (6 faces, cada uma definida por 4 índices de vértices)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">array</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">array</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token keyword" style="color:#00009f">int</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> faces</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Cor do cubo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   Color color</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Matriz de projeção para simular a projeção 3D para 2D</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> projectionMatrix</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Função privada que atualiza a projeção dos vértices do cubo para coordenadas 2D</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">projectVertices</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">public</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Construtor da classe Cube, que inicializa o cubo com um tamanho específico</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token function" style="color:#d73a49">Cube</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> size</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Função pública que atualiza a rotação do cubo em torno dos eixos X, Y e Z</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">rotate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> angleX</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> angleY</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">float</span><span class="token plain"> angleZ</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Função pública que desenha o cubo na janela fornecida</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">draw</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">RenderWindow </span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">window</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">endif</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property comment" style="color:#999988;font-style:italic">// CUBE_H</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Crie um arquivo de código-fonte principal, <code>WIN.cpp</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">nano</span><span class="token plain"> WIN.cpp</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Escreva o seguinte código básico no arquivo <code>WIN.cpp</code> para testar a integração com o SFML:</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">"WIN.h"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Construtor</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// O construtor da classe WIN inicializa os atributos da janela, como largura, altura, título, cor de fundo e limite de quadros por segundo.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Além disso, inicializa o cubo com um tamanho fixo de 300 e cria a janela SFML.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token class-name">WIN</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">WIN</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> width</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> height</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">string </span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">title</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> Color backgroundColor</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> frameRateLimit</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">cube</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">300</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Inicializa o cubo com tamanho 300</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">this</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain">width </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> width</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Define a largura da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">this</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain">height </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> height</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Define a altura da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">this</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain">title </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> title</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Define o título da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">this</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain">backgroundColor </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> backgroundColor</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Define a cor de fundo da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">this</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain">frameRateLimit </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> frameRateLimit</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Define o limite de quadros por segundo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Cria a janela SFML com as configurações especificadas</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">VideoMode</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">width</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> height</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> title</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> Style</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Titlebar </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> Style</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Close</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Destrutor</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// O destrutor da classe WIN é declarado, mas não possui implementação específica no momento.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token class-name">WIN</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token operator" style="color:#393A34">~</span><span class="token function" style="color:#d73a49">WIN</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Implementação do destrutor (vazia por enquanto)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Inicializa a janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Configura o limite de quadros por segundo e limpa a janela com a cor de fundo especificada.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token class-name">WIN</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">initWindow</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setFramerateLimit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">frameRateLimit</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Define o limite de quadros por segundo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">clear</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">backgroundColor</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Limpa a janela com a cor de fundo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Loop principal da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// O método run é responsável por executar o loop principal da aplicação.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Ele inicializa a janela, lida com eventos, atualiza o estado e renderiza o conteúdo.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token class-name">WIN</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token function" style="color:#d73a49">initWindow</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Inicializa a janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Loop principal da aplicação</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">while</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">isOpen</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">handleEvents</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Lida com os eventos da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">update</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">       </span><span class="token comment" style="color:#999988;font-style:italic">// Atualiza o estado da aplicação</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">       </span><span class="token comment" style="color:#999988;font-style:italic">// Renderiza o conteúdo na janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Lida com eventos</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Este método processa os eventos da janela, como o fechamento da mesma.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token class-name">WIN</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">handleEvents</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   Event event</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Objeto para armazenar eventos</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">while</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">pollEvent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">event</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Verifica se há eventos na fila</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">event</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">type </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> Event</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Closed</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Se o evento for de fechamento</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">close</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Fecha a janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Atualiza a janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Atualiza o estado do cubo, aplicando uma rotação contínua.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token class-name">WIN</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">update</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   cube</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">rotate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0.01f</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0.01f</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0.01f</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Rotaciona o cubo em torno dos eixos X, Y e Z</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Renderiza a janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Limpa a janela, desenha o cubo e exibe o conteúdo renderizado.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token class-name">WIN</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">clear</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">backgroundColor</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Limpa a janela com a cor de fundo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   cube</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">draw</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">window</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">             </span><span class="token comment" style="color:#999988;font-style:italic">// Desenha o cubo na janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">display</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">              </span><span class="token comment" style="color:#999988;font-style:italic">// Exibe o conteúdo renderizado na janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Crie um arquivo de código-fonte principal, <code>WIN.h</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">nano</span><span class="token plain"> WIN.h</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Escreva o seguinte código básico no arquivo <code>WIN.h</code> para testar a integração com o SFML:</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">ifndef</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property expression" style="color:#36acaa">WIN_H</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">define</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property macro-name" style="color:#36acaa">WIN_H</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">&lt;SFML/Graphics.hpp&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">"CUBE.h"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">using</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">namespace</span><span class="token plain"> sf</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Classe que representa a janela principal do programa</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">WIN</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">private</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Propriedades da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   RenderWindow window</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Objeto da janela SFML</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> width</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> height</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Largura e altura da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">string title</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Título da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   Color backgroundColor</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Cor de fundo da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> frameRateLimit</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Limite de taxa de quadros por segundo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Objeto do cubo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   Cube cube</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Instância da classe Cube</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">public</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Construtor</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token function" style="color:#d73a49">WIN</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> width</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> height</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">string </span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">title</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> Color backgroundColor</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> frameRateLimit</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Inicializa os atributos da classe com os valores fornecidos</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Destrutor</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token operator" style="color:#393A34">~</span><span class="token function" style="color:#d73a49">WIN</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Libera recursos, se necessário</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Inicializa a janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">initWindow</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Configura a janela com os parâmetros fornecidos</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Executa o loop principal da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Mantém a janela aberta e gerencia o ciclo de eventos, atualização e renderização</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Lida com os eventos da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">handleEvents</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Processa eventos como entrada do teclado, mouse, etc.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Atualiza o estado da janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">update</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Atualiza os elementos da janela, como o cubo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Renderiza o conteúdo na janela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// Desenha os elementos na tela</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">endif</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property comment" style="color:#999988;font-style:italic">// WIN_H</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Compile o código usando o <code>g++</code>:</p>
</li>
</ol>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">g++ *.cpp </span><span class="token parameter variable" style="color:#36acaa">-o</span><span class="token plain"> meu_projeto -lsfml-graphics -lsfml-window -lsfml-system</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">./meu_projeto</span><br></div></code></pre></div></div>
<p>Caso seja <strong>Windows</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">g++ *.cpp </span><span class="token parameter variable" style="color:#36acaa">-o</span><span class="token plain"> meu_projeto -I</span><span class="token string" style="color:#e3116c">"path</span><span class="token string entity" style="color:#36acaa">\t</span><span class="token string" style="color:#e3116c">o</span><span class="token string entity" style="color:#36acaa">\v</span><span class="token string" style="color:#e3116c">cpkg\installed</span><span class="token string entity" style="color:#36acaa">\x64</span><span class="token string" style="color:#e3116c">-windows\include"</span><span class="token plain"> -L</span><span class="token string" style="color:#e3116c">"path</span><span class="token string entity" style="color:#36acaa">\t</span><span class="token string" style="color:#e3116c">o</span><span class="token string entity" style="color:#36acaa">\v</span><span class="token string" style="color:#e3116c">cpkg\installed</span><span class="token string entity" style="color:#36acaa">\x64</span><span class="token string" style="color:#e3116c">-windows\lib"</span><span class="token plain"> -lsfml-graphics -lsfml-window -lsfml-system</span><br></div></code></pre></div></div>
<p><code>path\to\...</code> substitua pelo caminho correto.</p>]]></content:encoded>
            <category>Tutoriais</category>
            <category>github</category>
            <category>programação</category>
            <category>queroajudar</category>
            <category>C++</category>
        </item>
        <item>
            <title><![CDATA[O Papel de uma SRE em Sistemas Financeiros Críticos]]></title>
            <link>https://codaqui.dev/blog/2025/04/02/o-papel-de-uma-sre-em-sistemas-financeiros-criticos</link>
            <guid>https://codaqui.dev/blog/2025/04/02/o-papel-de-uma-sre-em-sistemas-financeiros-criticos</guid>
            <pubDate>Wed, 02 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[awesome]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="awesome" src="https://codaqui.dev/assets/images/post-610ddb25f3a005dd5acf983bce2e0787.jpeg" width="2048" height="1536" class="img_ev3q"></p>
<p>No dia 22 de março, tive a oportunidade de palestrar no <strong>AWSOME WOMEN COMMUNITY SUMMIT BRASIL</strong>, abordando um tema desafiador e essencial: <strong>o papel de uma Site Reliability Engineer (SRE) em sistemas financeiros críticos</strong>. Durante a apresentação, compartilhei experiências do meu dia a dia na Stone Pagamentos, explorando desde os bastidores (backstage) até as práticas que tornam a gestão de incidentes em ambientes críticos mais segura e eficiente.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="contexto-do-evento">Contexto do Evento<a href="https://codaqui.dev/blog/2025/04/02/o-papel-de-uma-sre-em-sistemas-financeiros-criticos#contexto-do-evento" class="hash-link" aria-label="Link direto para Contexto do Evento" title="Link direto para Contexto do Evento" translate="no">​</a></h2>
<p>O <strong>AWSOME WOMEN COMMUNITY SUMMIT BRASIL</strong> foi idealizado para inspirar e empoderar mulheres na área de tecnologia. Reunindo profissionais de diversas áreas, o encontro proporcionou um espaço para o intercâmbio de conhecimentos e a discussão de temas que, muitas vezes, ficam à margem do discurso tradicional. Em um setor onde a confiabilidade dos sistemas é vital, a presença de mulheres líderes em engenharia e tecnologia reforça a importância da diversidade e da colaboração.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="preparação-e-seleção-de-conteúdo">Preparação e Seleção de Conteúdo<a href="https://codaqui.dev/blog/2025/04/02/o-papel-de-uma-sre-em-sistemas-financeiros-criticos#prepara%C3%A7%C3%A3o-e-sele%C3%A7%C3%A3o-de-conte%C3%BAdo" class="hash-link" aria-label="Link direto para Preparação e Seleção de Conteúdo" title="Link direto para Preparação e Seleção de Conteúdo" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="escolha-dos-tópicos">Escolha dos Tópicos<a href="https://codaqui.dev/blog/2025/04/02/o-papel-de-uma-sre-em-sistemas-financeiros-criticos#escolha-dos-t%C3%B3picos" class="hash-link" aria-label="Link direto para Escolha dos Tópicos" title="Link direto para Escolha dos Tópicos" translate="no">​</a></h3>
<p>Ao preparar a palestra, dediquei tempo para alinhar o conteúdo com os desafios enfrentados em sistemas financeiros críticos. Alguns dos principais pontos abordados foram:</p>
<ul>
<li class=""><strong>Backstage como Case:</strong> Compartilhei um case real da Stone Pagamentos, detalhando os processos e aprendizados dos bastidores na gestão de incidentes.</li>
<li class=""><strong>Cultura Blameless:</strong> Expliquei como a ausência de culpa (blameless culture) é fundamental para incentivar a transparência e a melhoria contínua após incidentes críticos.</li>
<li class=""><strong>Cenários Críticos de Incidentes:</strong> Demonstrei como identificar, analisar e responder a incidentes em sistemas financeiros, onde cada segundo conta.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="adequando-a-linguagem">Adequando a Linguagem<a href="https://codaqui.dev/blog/2025/04/02/o-papel-de-uma-sre-em-sistemas-financeiros-criticos#adequando-a-linguagem" class="hash-link" aria-label="Link direto para Adequando a Linguagem" title="Link direto para Adequando a Linguagem" translate="no">​</a></h3>
<p>Considerando o público predominantemente feminino, procurei transmitir os conceitos técnicos de forma acessível, enfatizando a importância da colaboração e da resiliência, e mostrando que desafios complexos podem ser vencidos com trabalho em equipe e uma postura de aprendizado constante.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="durante-a-palestra">Durante a Palestra<a href="https://codaqui.dev/blog/2025/04/02/o-papel-de-uma-sre-em-sistemas-financeiros-criticos#durante-a-palestra" class="hash-link" aria-label="Link direto para Durante a Palestra" title="Link direto para Durante a Palestra" translate="no">​</a></h2>
<p>Ao subir ao palco, fui recebida com entusiasmo e atenção. A energia do público impulsionou uma troca dinâmica de experiências e questionamentos. Alguns momentos de destaque incluíram:</p>
<ul>
<li class=""><strong>Apresentação do Backstage:</strong> Detalhei o case da Stone Pagamentos, mostrando os bastidores dos processos de resolução de incidentes em sistemas de pagamento, onde a pressão por alta disponibilidade e segurança é constante.</li>
<li class=""><strong>Discussão sobre Cultura Blameless:</strong> Abordei como a prática de analisar erros sem buscar culpados fomenta um ambiente de inovação e aprendizagem, essencial para a evolução de processos críticos.</li>
<li class=""><strong>Análise de Cenários Críticos:</strong> Demonstrei, por meio de exemplos práticos, como preparar e responder a incidentes, destacando a importância de planos de contingência e comunicação eficaz.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reflexões-e-lições-aprendidas">Reflexões e Lições Aprendidas<a href="https://codaqui.dev/blog/2025/04/02/o-papel-de-uma-sre-em-sistemas-financeiros-criticos#reflex%C3%B5es-e-li%C3%A7%C3%B5es-aprendidas" class="hash-link" aria-label="Link direto para Reflexões e Lições Aprendidas" title="Link direto para Reflexões e Lições Aprendidas" translate="no">​</a></h2>
<p>A experiência foi enriquecedora em vários níveis:</p>
<ul>
<li class=""><strong>Empoderamento e Inclusão:</strong> Palestrar no <strong>AWSOME WOMEN COMMUNITY SUMMIT BRASIL</strong> reforçou a importância de encorajar a presença de mulheres em áreas tecnológicas e financeiras.</li>
<li class=""><strong>Resiliência e Inovação:</strong> Compartilhar os desafios e as soluções dos bastidores demonstrou que a resiliência, aliada a uma cultura blameless, é a chave para a inovação em ambientes críticos.</li>
<li class=""><strong>Aprendizado Coletivo:</strong> A troca de experiências não só fortaleceu a comunidade, mas também ampliou a visão sobre como transformar incidentes em oportunidades de melhoria contínua.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusão">Conclusão<a href="https://codaqui.dev/blog/2025/04/02/o-papel-de-uma-sre-em-sistemas-financeiros-criticos#conclus%C3%A3o" class="hash-link" aria-label="Link direto para Conclusão" title="Link direto para Conclusão" translate="no">​</a></h2>
<p>Palestrar sobre o papel de uma SRE em sistemas financeiros críticos no <strong>AWSOME WOMEN COMMUNITY SUMMIT BRASIL</strong> foi uma experiência transformadora e inspiradora. Ao compartilhar os bastidores, a cultura blameless e os desafios dos cenários críticos, pude demonstrar que, mesmo sob pressão, a união e a busca por soluções colaborativas podem garantir a excelência operacional. Espero que este relato inspire outras mulheres a se aprofundarem no universo da engenharia de confiabilidade e a liderarem mudanças significativas em seus ambientes profissionais.</p>
<hr>]]></content:encoded>
            <category>Institucional</category>
            <category>história</category>
            <category>comunidade</category>
            <category>Palestra</category>
            <category>Diversidade e Inclusão</category>
        </item>
        <item>
            <title><![CDATA[Prestação de Contas do DevPR Conf 2024]]></title>
            <link>https://codaqui.dev/blog/2024/09/17/prestacao-de-contas-do-devpr-conf-2024</link>
            <guid>https://codaqui.dev/blog/2024/09/17/prestacao-de-contas-do-devpr-conf-2024</guid>
            <pubDate>Tue, 17 Sep 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Espero que estejam bem. Gostaríamos de compartilhar algumas atualizações importantes sobre o nosso recente evento. Primeiramente, estamos felizes em informar que concluímos o evento com sucesso. Atualmente, estamos aprimorando a apresentação dos dados na planilha, mas já temos um esboço disponível para aqueles que estão ansiosos para conferir os resultados preliminares.]]></description>
            <content:encoded><![CDATA[<p>Espero que estejam bem. Gostaríamos de compartilhar algumas atualizações importantes sobre o nosso recente evento. Primeiramente, estamos felizes em informar que concluímos o evento com sucesso. Atualmente, estamos aprimorando a apresentação dos dados na planilha, mas já temos um esboço disponível para aqueles que estão ansiosos para conferir os resultados preliminares.</p>
<p>Um ponto importante a destacar é que este foi o último ano em que trabalhamos com dinheiro “legado” envolvendo CPFs e CNPJs. Isso explica a confusão que ocorreu entre as transferências via Stone e as transferências diretas entre CPFs. A partir do próximo ano, esperamos que esse processo seja muito mais simplificado e transparente.</p>
<p>Se você tiver qualquer dúvida ou precisar de mais informações, não hesite em participar das nossas reuniões semanais. Estamos sempre disponíveis para ajudar e esclarecer qualquer questão.</p>
<p>Além disso, ainda estamos aguardando o pagamento de dois patrocinadores que não foi recebido em nossa conta. Assim que esses pagamentos forem efetuados e essa pendência for resolvida, atualizaremos o saldo da Open Collective conforme o acordado.</p>
<p>Agradecemos a todos pelo apoio contínuo e pela participação no evento. Continuaremos trabalhando para melhorar e trazer mais transparência e eficiência para nossos processos.</p>
<p><a href="https://opencollective.com/codaqui/updates/prestacao-de-contas-da-devpr-conf-2024" target="_blank" rel="noopener noreferrer" class="">Dados no Open Collective</a></p>]]></content:encoded>
            <category>Institucional</category>
            <category>história</category>
            <category>comunidade</category>
            <category>devparaná</category>
        </item>
        <item>
            <title><![CDATA[O que é endereçamento de memória?]]></title>
            <link>https://codaqui.dev/blog/2024/08/07/o-que-e-enderecamento-de-memoria</link>
            <guid>https://codaqui.dev/blog/2024/08/07/o-que-e-enderecamento-de-memoria</guid>
            <pubDate>Wed, 07 Aug 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Em resumo, ele se refere ao processo de atribuir identificadores únicos, chamados de endereços, a locais específicos na memória de um computador. Esses endereços são utilizados para acessar e manipular dados armazenados na memória.]]></description>
            <content:encoded><![CDATA[<p>Em resumo, ele se refere ao processo de atribuir identificadores únicos, chamados de endereços, a locais específicos na memória de um computador. Esses endereços são utilizados para acessar e manipular dados armazenados na memória.</p>
<ul>
<li class="">
<p>O limite do endereçamento de memória em uma linguagem de programação depende da arquitetura do computador e do sistema operacional em que o programa está sendo executado. Em sistemas de 32 bits, o endereçamento de memória é limitado a 4 gigabytes (2^32 bytes) de memória. Já em sistemas de 64 bits, o limite é muito maior, chegando a 18.4 milhões de terabytes (2^64 bytes) de memória.</p>
</li>
<li class="">
<p>É importante considerar o limite de endereçamento de memória ao desenvolver um programa, especialmente quando se trabalha com grandes conjuntos de dados ou algoritmos que exigem muita memória. Se o programa exceder o limite de endereçamento de memória, pode ocorrer um estouro de memória (memory overflow) e o programa pode falhar ou apresentar comportamento inesperado.</p>
</li>
<li class="">
<p>Para otimizar o uso da memória, é recomendado utilizar tipos de dados adequados para o tamanho dos valores que serão armazenados e liberar a memória alocada quando não for mais necessária, por meio de técnicas como a desalocação de memória (deallocating memory) ou o uso de coletor de lixo (garbage collector), dependendo da linguagem de programação utilizada.</p>
</li>
</ul>
<p>Links: <em>(mais aprofundado!!)</em></p>
<ul>
<li class=""><a href="https://www.geeksforgeeks.org/addressing-modes/" target="_blank" rel="noopener noreferrer" class="">Geeksforgeeks</a></li>
<li class=""><a href="https://www.tutorialspoint.com/computer_logical_organization/index.htm" target="_blank" rel="noopener noreferrer" class="">Tutorialspoint</a></li>
</ul>
<p>Vídeos:</p>
<ul>
<li class=""><a href="https://www.youtube.com/watch?v=F-i9qPOIsoA" target="_blank" rel="noopener noreferrer" class="">Memory addressing</a> <em>- Apenas Legendado!</em></li>
<li class=""><a href="https://www.youtube.com/watch?v=G4om0r-Kgi0" target="_blank" rel="noopener noreferrer" class="">Endereçamento de memória</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="imagem-de-exemplo-endereçamento-e-seu-funcionamento">Imagem de exemplo, endereçamento e seu funcionamento.<a href="https://codaqui.dev/blog/2024/08/07/o-que-e-enderecamento-de-memoria#imagem-de-exemplo-endere%C3%A7amento-e-seu-funcionamento" class="hash-link" aria-label="Link direto para Imagem de exemplo, endereçamento e seu funcionamento." title="Link direto para Imagem de exemplo, endereçamento e seu funcionamento." translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://github.com/codaqui/institucional/assets/63540372/311fdd5f-ca81-4fc4-91f8-f859d81a5d14" alt="image" class="img_ev3q"></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">0x**** são endereços de memoria, 0x representa que estão em hexadecimal.</span><br></div></code></pre></div></div>
<p>Dentro dos endereços é possível notar a presença de 8 dígitos, no quais correspondem a 0, isso é exatamente o exemplo de tamanho de variável, nesse caso uma variável de 8 bits ou 1 byte.</p>
<p>Essa variável de 8 bits possui '2^8 = (256)' possibilidades de combinações de valores.</p>
<ul>
<li class="">
<p>Os valores vão:</p>
<blockquote>
<p>0 a 255
-128 a 127</p>
</blockquote>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-que-acontece-caso-exceda-esses-8-bits-memory-overflow">O que acontece caso exceda esses 8 bits (memory overflow)?<a href="https://codaqui.dev/blog/2024/08/07/o-que-e-enderecamento-de-memoria#o-que-acontece-caso-exceda-esses-8-bits-memory-overflow" class="hash-link" aria-label="Link direto para O que acontece caso exceda esses 8 bits (memory overflow)?" title="Link direto para O que acontece caso exceda esses 8 bits (memory overflow)?" translate="no">​</a></h2>
<p>Simples, o valor estoura o limite de possibilidade, o que vai mudar é a percepção que cada linguagem, podem retornar erros ou simplesmente zerar a variável, pois ela só conta os 8 bits.</p>
<ul>
<li class="">
<p>Se ocorrer um "memory overflow" em uma variável de 8 bits, o valor excedente será truncado ou envolto (wraparound) para o intervalo válido. Por exemplo, se você tentar armazenar o valor 300 em uma variável de 8 bits, o valor será truncado para 44, pois 300 - 256 = 44. Isso ocorre porque 300 está fora do intervalo válido de 0 a 255.</p>
</li>
<li class="">
<p>É importante ter cuidado com "memory overflows", pois eles podem levar a resultados inesperados e erros difíceis de depurar. É recomendado usar tipos de dados apropriados para o intervalo de valores que você espera armazenar, ou implementar verificações e tratamentos adequados para evitar "memory overflows".</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="de-maneira-matemática-segue-esse-fluxograma">De maneira matemática, segue esse fluxograma!<a href="https://codaqui.dev/blog/2024/08/07/o-que-e-enderecamento-de-memoria#de-maneira-matem%C3%A1tica-segue-esse-fluxograma" class="hash-link" aria-label="Link direto para De maneira matemática, segue esse fluxograma!" title="Link direto para De maneira matemática, segue esse fluxograma!" translate="no">​</a></h2>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="imagem-demonstração-matemática-binária">Imagem demonstração matemática binária!<a href="https://codaqui.dev/blog/2024/08/07/o-que-e-enderecamento-de-memoria#imagem-demonstra%C3%A7%C3%A3o-matem%C3%A1tica-bin%C3%A1ria" class="hash-link" aria-label="Link direto para Imagem demonstração matemática binária!" title="Link direto para Imagem demonstração matemática binária!" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://github.com/codaqui/institucional/assets/63540372/2a1acd63-26e4-4ecd-987d-15205deb34f4" alt="image" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="extra">Extra<a href="https://codaqui.dev/blog/2024/08/07/o-que-e-enderecamento-de-memoria#extra" class="hash-link" aria-label="Link direto para Extra" title="Link direto para Extra" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="como-um-hacker-pode-usar-memory-overflow-como-possível-brecha">Como um hacker pode usar memory overflow como possível brecha!!<a href="https://codaqui.dev/blog/2024/08/07/o-que-e-enderecamento-de-memoria#como-um-hacker-pode-usar-memory-overflow-como-poss%C3%ADvel-brecha" class="hash-link" aria-label="Link direto para Como um hacker pode usar memory overflow como possível brecha!!" title="Link direto para Como um hacker pode usar memory overflow como possível brecha!!" translate="no">​</a></h3>
<p>Um hacker pode explorar uma vulnerabilidade de memory overflow para obter acesso não autorizado a um sistema ou executar código malicioso. Aqui estão algumas maneiras pelas quais isso pode ser feito:</p>
<ol>
<li class="">
<p><strong>Estouro de <a href="https://tecnoblog.net/responde/o-que-e-buffer/" target="_blank" rel="noopener noreferrer" class="">buffer</a></strong>: Um hacker pode enviar dados além dos limites de um buffer na memória, sobrescrevendo áreas adjacentes de memória. Isso pode levar à execução de código arbitrário ou à corrupção de dados sensíveis.</p>
</li>
<li class="">
<p><strong>Injeção de código</strong>: Ao explorar um estouro de memória, um hacker pode injetar código malicioso na área de memória comprometida. Isso pode permitir que o hacker execute comandos remotos, obtenha acesso privilegiado ou execute ataques de negação de serviço.</p>
</li>
<li class="">
<p><strong>Escalada de privilégios</strong>: Ao explorar uma vulnerabilidade de memory overflow, um hacker pode modificar os valores de variáveis de controle, como ponteiros de função ou permissões de acesso, para obter privilégios elevados no sistema comprometido.</p>
</li>
<li class="">
<p><strong>Desvio de fluxo</strong>: Ao corromper o fluxo de execução de um programa por meio de um estouro de memória, um hacker pode redirecionar o fluxo para áreas de código malicioso. Isso pode permitir que o hacker execute ações não autorizadas ou contorne mecanismos de segurança.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="curta-e-compartilhe">Curta e Compartilhe!<a href="https://codaqui.dev/blog/2024/08/07/o-que-e-enderecamento-de-memoria#curta-e-compartilhe" class="hash-link" aria-label="Link direto para Curta e Compartilhe!" title="Link direto para Curta e Compartilhe!" translate="no">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Se você chegou até aqui, peço que compartilhe com quem gosta desse tipo de conteúdo, para aumentar o engajamento e por também ser algo que é pouco falado! Meu muito obrigado!</span><br></div></code></pre></div></div>]]></content:encoded>
            <category>Curiosidade</category>
            <category>github</category>
            <category>programação</category>
            <category>memoryoverflow</category>
            <category>truncamentodedados</category>
            <category>queroajudar</category>
        </item>
        <item>
            <title><![CDATA[DevParaná e Codaqui: Unidos pela Comunidade]]></title>
            <link>https://codaqui.dev/blog/2024/07/22/devparana-e-codaqui-unidos-pela-comunidade</link>
            <guid>https://codaqui.dev/blog/2024/07/22/devparana-e-codaqui-unidos-pela-comunidade</guid>
            <pubDate>Mon, 22 Jul 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Agora, em 2024, estamos entusiasmados em anunciar que a DevParaná e a Codaqui estão oficialmente unidas sob a mesma associação. Esta união fortalece os interesses da comunidade e nossa missão é o conhecimento acessível, para que você sinta o poder dele na sua vida pessoal e profissional.]]></description>
            <content:encoded><![CDATA[<p>Agora, em 2024, estamos entusiasmados em anunciar que a DevParaná e a Codaqui estão oficialmente unidas sob a mesma associação. Esta união fortalece os interesses da comunidade e nossa missão é o conhecimento acessível, para que você sinta o poder dele na sua vida pessoal e profissional.</p>
<p><img decoding="async" loading="lazy" alt="DevPRConf 2024" src="https://codaqui.dev/assets/images/devconf2024-bfbacedf1d474be1ebcb49bc15ab238a.png" width="710" height="271" class="img_ev3q"></p>
<p>Com mais de 8 anos de história, temos um histórico com mais de 250 eventos organizados e 7 conferências anuais, sempre apoiando e fortalecendo as comunidades e grupos existentes.</p>
<p>Nossa influência não se limita a fronteiras, alcançando inúmeras cidades e até mesmo países como Paraguai e Chile. Em 2021, estabelecemos uma parceria com a Codaqui, uma comunidade voltada para o público jovem. Em 2023, concluímos nossos primeiros grandes eventos em conjunto.</p>
<p>A edição desse ano será gratuita e os <a href="https://devpr24.eventbrite.com/" target="_blank" rel="noopener noreferrer" class="">ingressos foram disponibilizados ao público desde o dia 14 de julho</a>. Como estamos trazendo pessoas referências da nossa área e isso tem um custo, <a href="https://apoia.se/devpr" target="_blank" rel="noopener noreferrer" class="">precisamos de um apoio mínimo da comunidade</a> para cobrir os gastos.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="palestrantes">Palestrantes<a href="https://codaqui.dev/blog/2024/07/22/devparana-e-codaqui-unidos-pela-comunidade#palestrantes" class="hash-link" aria-label="Link direto para Palestrantes" title="Link direto para Palestrantes" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://www.linkedin.com/in/jonatasdp" target="_blank" rel="noopener noreferrer" class="">Jônatas Davi</a></li>
<li class=""><a href="https://www.linkedin.com/in/laysrodrigues147/" target="_blank" rel="noopener noreferrer" class="">Lays Rodrigues</a></li>
<li class=""><a href="https://www.linkedin.com/in/oguscaetano" target="_blank" rel="noopener noreferrer" class="">Gustavo Caetano</a></li>
<li class=""><a href="https://linkedin.com/in/profburnes" target="_blank" rel="noopener noreferrer" class="">Prof. Anderson Burnes</a></li>
<li class=""><a href="https://github.com/munifgebara" target="_blank" rel="noopener noreferrer" class="">Munif Gebara</a></li>
<li class=""><a href="https://www.linkedin.com/in/leonardo-elias-6376b824" target="_blank" rel="noopener noreferrer" class="">Leonardo Elias</a></li>
<li class=""><a href="https://www.linkedin.com/in/isabella-cruz-de-oliveira-b761b7233" target="_blank" rel="noopener noreferrer" class="">Isabella Cruz de Oliveira</a></li>
<li class=""><a href="http://linkedin.com/in/marcopollivier" target="_blank" rel="noopener noreferrer" class="">Marco Ollivier</a></li>
<li class=""><a href="https://www.linkedin.com/in/rmgkelly" target="_blank" rel="noopener noreferrer" class="">Kelly Garcia</a></li>
<li class=""><a href="https://www.linkedin.com/in/ferfabricio" target="_blank" rel="noopener noreferrer" class="">Fernando Fabrício</a></li>
<li class=""><a href="https://www.linkedin.com/in/vianamjr" target="_blank" rel="noopener noreferrer" class="">Marcondes Viana</a></li>
</ul>
<p>Para conferir mais informações <a href="https://devpr.org/" target="_blank" rel="noopener noreferrer" class="">acesse o site do evento</a>.</p>]]></content:encoded>
            <category>Institucional</category>
            <category>história</category>
            <category>comunidade</category>
            <category>devparaná</category>
        </item>
        <item>
            <title><![CDATA[Coleta de Apoio da Codaqui agora na Open Collective]]></title>
            <link>https://codaqui.dev/blog/2024/07/19/coleta-de-apoio-da-codaqui-agora-na-open-collective</link>
            <guid>https://codaqui.dev/blog/2024/07/19/coleta-de-apoio-da-codaqui-agora-na-open-collective</guid>
            <pubDate>Fri, 19 Jul 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Recentemente, a Codaqui tomou uma decisão significativa: migrar sua coleta de apoio para o Open Collective. Neste post, vamos explorar os motivos por trás dessa mudança e como ela beneficiará nossa comunidade.]]></description>
            <content:encoded><![CDATA[<p>Recentemente, a Codaqui tomou uma decisão significativa: migrar sua coleta de apoio para o Open Collective. Neste post, vamos explorar os motivos por trás dessa mudança e como ela beneficiará nossa comunidade.</p>
<p><img decoding="async" loading="lazy" src="https://www.conferencesthatwork.com/wp-content/uploads/2017/04/Screenshot-2017-04-29-17.00.53-640x382.png" alt="Open Collective Logo" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="transparência-e-sustentabilidade">Transparência e Sustentabilidade<a href="https://codaqui.dev/blog/2024/07/19/coleta-de-apoio-da-codaqui-agora-na-open-collective#transpar%C3%AAncia-e-sustentabilidade" class="hash-link" aria-label="Link direto para Transparência e Sustentabilidade" title="Link direto para Transparência e Sustentabilidade" translate="no">​</a></h2>
<p>O Open Collective oferece uma plataforma robusta e transparente para gerenciar apoios financeiros. Com recursos como relatórios detalhados de gastos, rastreamento de doações e visibilidade completa das finanças, podemos garantir maior transparência para nossos apoiadores.</p>
<p>Além disso, o Open Collective permite que os projetos sejam mais sustentáveis a longo prazo, facilitando a arrecadação contínua de fundos e a prestação de contas.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="maior-alcance">Maior Alcance<a href="https://codaqui.dev/blog/2024/07/19/coleta-de-apoio-da-codaqui-agora-na-open-collective#maior-alcance" class="hash-link" aria-label="Link direto para Maior Alcance" title="Link direto para Maior Alcance" translate="no">​</a></h2>
<p>Ao fazer parte do ecossistema do Open Collective, a Codaqui terá acesso a uma rede mais ampla de projetos e apoiadores. Isso nos ajudará a expandir nossa base de apoio e colaborar com outras comunidades.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-que-muda-para-os-apoiadores">O que muda para os apoiadores?<a href="https://codaqui.dev/blog/2024/07/19/coleta-de-apoio-da-codaqui-agora-na-open-collective#o-que-muda-para-os-apoiadores" class="hash-link" aria-label="Link direto para O que muda para os apoiadores?" title="Link direto para O que muda para os apoiadores?" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="processo-simplificado">Processo Simplificado<a href="https://codaqui.dev/blog/2024/07/19/coleta-de-apoio-da-codaqui-agora-na-open-collective#processo-simplificado" class="hash-link" aria-label="Link direto para Processo Simplificado" title="Link direto para Processo Simplificado" translate="no">​</a></h3>
<p>Os apoiadores agora podem contribuir diretamente através da página da Codaqui no Open Collective. O processo é simples e transparente, permitindo que todos acompanhem como seus recursos estão sendo utilizados.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="novas-funcionalidades">Novas Funcionalidades<a href="https://codaqui.dev/blog/2024/07/19/coleta-de-apoio-da-codaqui-agora-na-open-collective#novas-funcionalidades" class="hash-link" aria-label="Link direto para Novas Funcionalidades" title="Link direto para Novas Funcionalidades" translate="no">​</a></h3>
<p>Com a migração, teremos acesso a recursos adicionais, como metas de financiamento por projeto e globais, recompensas para apoiadores e integração com outras ferramentas.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusão">Conclusão<a href="https://codaqui.dev/blog/2024/07/19/coleta-de-apoio-da-codaqui-agora-na-open-collective#conclus%C3%A3o" class="hash-link" aria-label="Link direto para Conclusão" title="Link direto para Conclusão" translate="no">​</a></h2>
<p>A mudança para o Open Collective é um passo importante para a Codaqui. Estamos animados com as possibilidades que essa plataforma oferece e esperamos continuar crescendo e fortalecendo nossa comunidade.</p>
<p>Acesse nosso perfil no <a href="https://opencollective.com/codaqui" target="_blank" rel="noopener noreferrer" class="">Open Collective</a> e faça parte dessa jornada!</p>
<p>Espero que este post ajude a esclarecer os detalhes da transição. Se precisar de mais informações ou tiver outras dúvidas, estou à disposição! 😊🚀</p>]]></content:encoded>
            <category>Institucional</category>
            <category>apoio</category>
            <category>queroajudar</category>
        </item>
        <item>
            <title><![CDATA[CHOWN: O que é?]]></title>
            <link>https://codaqui.dev/blog/2024/03/13/chown-o-que-e</link>
            <guid>https://codaqui.dev/blog/2024/03/13/chown-o-que-e</guid>
            <pubDate>Wed, 13 Mar 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[O comando chown altera a propriedade do usuário de um arquivo, diretório ou link no Linux. Cada arquivo está associado a um usuário ou grupo proprietário. É fundamental configurar as permissões de arquivos e pastas corretamente.]]></description>
            <content:encoded><![CDATA[<p>O comando <code>chown</code> altera a propriedade do usuário de um arquivo, diretório ou link no Linux. Cada arquivo está associado a um usuário ou grupo proprietário. É fundamental configurar as permissões de arquivos e pastas corretamente.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="requisitos-de-uso">Requisitos de uso<a href="https://codaqui.dev/blog/2024/03/13/chown-o-que-e#requisitos-de-uso" class="hash-link" aria-label="Link direto para Requisitos de uso" title="Link direto para Requisitos de uso" translate="no">​</a></h2>
<ul>
<li class="">Linux ou UNIX</li>
<li class="">Usar o terminal/linha de comando</li>
<li class="">Usar comando com privilégios para mudar o proprietário</li>
</ul>
<blockquote>
<p>Comando para dar privilégio:</p>
</blockquote>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">sudo </span><br></div></code></pre></div></div>
<blockquote>
<p>Rodar terminal no root do sistema:</p>
</blockquote>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo su</span><br></div></code></pre></div></div>
<h1></h1>
<h1>Linux Chown Syntax</h1>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">chown [Opção] [Usuário][:Grupo] [Arquivos/Diretórios] </span><br></div></code></pre></div></div>
<ul>
<li class="">[Opção] – O comando pode ser usado com ou sem opções adicionais.</li>
<li class="">[Usuário] – O nome de usuário ou o ID de usuário numérico do novo proprietário de um arquivo.</li>
<li class="">[:] – Use dois pontos ao alterar um grupo de um arquivo.</li>
<li class="">[Grupo] – Alterar a propriedade do grupo de um arquivo é opcional.</li>
<li class="">Arquivos/Diretórios – Alvo</li>
</ul>
<blockquote>
<p>Não necessariamente precisa de um grupo, veremos mais a baixo!!</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="como-alterar-o-proprietário-de-um-arquivo-no-dia-a-dia">Como alterar o proprietário de um arquivo no dia a dia?<a href="https://codaqui.dev/blog/2024/03/13/chown-o-que-e#como-alterar-o-propriet%C3%A1rio-de-um-arquivo-no-dia-a-dia" class="hash-link" aria-label="Link direto para Como alterar o proprietário de um arquivo no dia a dia?" title="Link direto para Como alterar o proprietário de um arquivo no dia a dia?" translate="no">​</a></h2>
<blockquote>
<p>Terminal em root</p>
</blockquote>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">chown Usuário0 Pasta/Arquivo</span><br></div></code></pre></div></div>
<blockquote>
<p>Terminal sem root</p>
</blockquote>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo chown Usuário0 Pasta/Arquivo</span><br></div></code></pre></div></div>
<ul>
<li class="">
<p>Usuário0 – Nome do seu usuário.</p>
</li>
<li class="">
<p>Pasta/Arquivo – Diretório ou Arquivo.</p>
</li>
<li class="">
<p>Também é possível utilizar o UID(User ID) do seu usuário .</p>
</li>
</ul>
<blockquote>
<p>Supondo que essa pasta esteja com propriedade do Usuário1, assim você usar o comando acima, a propriedade dessa pasta passa para o Usuário0.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="como-alterar-o-grupo-de-um-arquivo">Como alterar o grupo de um arquivo?<a href="https://codaqui.dev/blog/2024/03/13/chown-o-que-e#como-alterar-o-grupo-de-um-arquivo" class="hash-link" aria-label="Link direto para Como alterar o grupo de um arquivo?" title="Link direto para Como alterar o grupo de um arquivo?" translate="no">​</a></h2>
<p>Terminal em root</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">chown :Grupo0 Pasta/Arquivo</span><br></div></code></pre></div></div>
<p>Terminal sem root</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo chown :Grupo0 Pasta/Arquivo</span><br></div></code></pre></div></div>
<ul>
<li class="">Grupo0 – Nome do seu grupo.</li>
<li class="">Pasta/Arquivo – Diretório ou Arquivo.</li>
</ul>
<h1>Imagens</h1>
<p>Usando usuário:</p>
<p><img decoding="async" loading="lazy" src="https://github.com/codaqui/institucional/assets/63540372/62bce262-a411-4745-a018-fda0f498ef2e" alt="image" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://github.com/codaqui/institucional/assets/63540372/d4f5cbf7-17a8-4150-8061-2ac772a7f61e" alt="image" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://github.com/codaqui/institucional/assets/63540372/d4738a92-75ad-4c8e-8682-5316da4bf40c" alt="image" class="img_ev3q"></p>
<p>Usando UID:</p>
<p><img decoding="async" loading="lazy" src="https://github.com/codaqui/institucional/assets/63540372/62bce262-a411-4745-a018-fda0f498ef2e" alt="image" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://github.com/codaqui/institucional/assets/63540372/3b2ddd96-0245-48d7-a015-752e71d9bf1c" alt="image" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://github.com/codaqui/institucional/assets/63540372/d4738a92-75ad-4c8e-8682-5316da4bf40c" alt="image" class="img_ev3q"></p>
<p>Mostrar permissões do diretório atual:</p>
<p><img decoding="async" loading="lazy" src="https://github.com/codaqui/institucional/assets/63540372/ac364ece-a253-4c2e-91d1-9147161da7b1" alt="image" class="img_ev3q"></p>
<p>Pegar UID</p>
<p><img decoding="async" loading="lazy" src="https://github.com/codaqui/institucional/assets/63540372/abd41bd3-7f2e-40b1-8163-f145a10c21ef" alt="image" class="img_ev3q"></p>
<h1>Extra</h1>
<ul>
<li class="">Ver seus grupos usando <a href="https://phoenixnap-com.translate.goog/kb/chgrp-command?_x_tr_sl=en&amp;_x_tr_tl=pt&amp;_x_tr_hl=pt-BR&amp;_x_tr_pto=wapp" target="_blank" rel="noopener noreferrer" class="">chgrp</a></li>
<li class="">Pegar seu UID</li>
</ul>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo id -u USUARIO</span><br></div></code></pre></div></div>]]></content:encoded>
            <category>Tutoriais</category>
            <category>github</category>
            <category>linux</category>
            <category>queroajudar</category>
        </item>
        <item>
            <title><![CDATA[Codaqui Apoia Campeonato de Skate em Marialva!]]></title>
            <link>https://codaqui.dev/blog/2023/10/23/codaqui-apoia-campeonato-de-skate-em-marialva</link>
            <guid>https://codaqui.dev/blog/2023/10/23/codaqui-apoia-campeonato-de-skate-em-marialva</guid>
            <pubDate>Mon, 23 Oct 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Olá! Como fundador da Codaqui, nossa comunidade de aprendizado de programação, é com enorme entusiasmo que compartilho nossa participação no próximo Campeonato de Skate de Marialva!]]></description>
            <content:encoded><![CDATA[<p>Olá! Como fundador da Codaqui, nossa comunidade de aprendizado de programação, é com enorme entusiasmo que compartilho nossa participação no próximo Campeonato de Skate de Marialva!</p>
<p><img decoding="async" loading="lazy" alt="Imagem com informações do campeonato de Skate em Marialva" src="https://codaqui.dev/assets/images/banner-f776ae72723b7af1d4ff6fed196aa958.png" width="844" height="1490" class="img_ev3q"></p>
<p>A Codaqui, nascida em Maringá e integrada ao GitHub, é mais do que uma simples escola de programação – ela é uma próspera comunidade de aprendizado contínuo. 🌐🎓 Proporcionamos uma plataforma onde todos os interessados, independentemente do seu nível de experiência, podem aprender e contribuir. Em cada uma das nossas páginas, você encontrará um ícone que levará diretamente à edição dessa página, estimulando a todos a crescerem juntos na busca pelo conhecimento. 📚💡</p>
<p>Nosso objetivo principal é apoiar aqueles jovens que desejam no futuro criação de produtos tecnológicos, mas que, por várias razões, não tiveram acesso à educação tecnológica. Nós somos a ponte entre suas aspirações e a realização de seus sonhos. 💻🌈</p>
<p>Convidamos todos a explorar o mundo da tecnologia conosco, enquanto também celebramos e apoiamos o espírito do esporte em nossa comunidade. 🤗🎈 <strong>O próximo Campeonato de Skate de Marialva, que ocorrerá dia 05 de Novembro de 2023, às 15 horas, na Pista de Skate de Marialva</strong>, é uma excelente oportunidade para apoiarmos o esporte que tantos adoram e, ao mesmo tempo, convidarmos as pessoas a mergulharem na área de tecnologia com a Codaqui. 🛹🎖️🏆</p>
<p>Acreditamos que a educação e o esporte podem caminhar juntos, e são ferramentas capacitadoras para a juventude. Especialmente quando a educação está enraizada na tecnologia e a comunidade se une para apoiar eventos esportivos como este. 🎓🛹💼</p>
<p>Venha participar conosco! Desfrute do melhor do skate na Pista de Skate de Marialva e aproveite para descobrir o universo do desenvolvimento de software com a Codaqui. Educação e esporte, juntos, podem criar um futuro cheio de possibilidades! Venha fazer parte disso! 🎉🚀</p>]]></content:encoded>
            <category>Institucional</category>
            <category>apoio</category>
            <category>queroajudar</category>
        </item>
        <item>
            <title><![CDATA[Sucesso na inovação do DevPR 2023]]></title>
            <link>https://codaqui.dev/blog/2023/03/11/sucesso-na-inovacao-do-devpr-2023</link>
            <guid>https://codaqui.dev/blog/2023/03/11/sucesso-na-inovacao-do-devpr-2023</guid>
            <pubDate>Sat, 11 Mar 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[image]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://user-images.githubusercontent.com/11020807/230798337-a0dd2a79-9d41-468f-a903-3df27fc9d50a.jpeg" alt="image" class="img_ev3q"></p>
<p>O inédito Espaço Starter cumpriu a missão de introduzir o universo da programação para crianças e adolescentes.</p>
<p>A conferência anual DevPR, evento de atualização, network, compartilhamento de experiências e troca de conteúdo para programadores e tecnólogos chegou com tudo em 2023 na cidade de Maringá.</p>
<p>Sediada na Unicesumar, a grande inovação da edição foi o espaço Starter com um cronograma incrível de atividades lúdicas e dinâmicas de introdução à programação direcionado a crianças e adolescentes, parentes diretos dos inscritos na DevPR 2023.</p>
<p>A ideia surgiu com a organização da Codaqui e seus voluntários, em destaque Enderson Menezes e Ana Elisa Tubino. A Codaqui é uma escola de programação sem fins lucrativos disposta a democratizar o ensino sobre tecnologia e programação a jovens carentes.</p>
<p>O projeto da Codaqui com a DevPR para introduzir crianças e adolescentes ao universo da programação ganhou força e aconteceu!</p>
<p><img decoding="async" loading="lazy" src="https://user-images.githubusercontent.com/11020807/230798345-e3edc730-1f2b-4d0b-8b67-55da0c01f9bf.jpeg" alt="image" class="img_ev3q"></p>
<p>O espaço Starter contou com uma equipe de voluntários preparados para receber toda essa galerinha com um cronograma de workshops e atividades lúdicas para três turmas divididas por idade.</p>
<p>A manhã começou agitada para a Turma Hopper, nomeada em homenagem à analista de sistemas criadora da linguagem de programação de alto nível, Grace Hopper. As crianças de 6 à 12 anos compreenderam a ideia de comando e algoritmo do computador através de uma atividade lúdica, competitiva e prática do Labirinto.</p>
<p><img decoding="async" loading="lazy" src="https://user-images.githubusercontent.com/11020807/230798351-99905fe9-09d6-4b4c-ad72-3112b67b8f27.jpeg" alt="image" class="img_ev3q"></p>
<p>No período da tarde, as crianças puderam aplicar o conhecimento adquirido com o Desafio Scratch, no qual utilizaram a linguagem de programação Scratch para a criação de animações e jogos, com regras e comandos no laboratório de informática da universidade. Depois, as crianças participaram da atividade Programando Carrinhos Autônomos, na qual simularam o funcionamento do programa Arduino no computador e presenciaram o funcionamento dos carrinhos.</p>
<p><img decoding="async" loading="lazy" src="https://user-images.githubusercontent.com/11020807/230798355-8eabfef6-3432-4eb2-bbde-cb4ff40f8c6d.jpeg" alt="image" class="img_ev3q"></p>
<p>A Turma Turing, em tributo à Alan Turing, cientista da computação e idealizador dos conceitos de algoritmo e computador, composta por jovens de 13 a 16 anos, iniciou o cronograma com o workshop Caça aos Números com a construção de um algoritmo simples.</p>
<p>Mais tarde, na oficina de Jornada Criativa, cada participante teve a oportunidade de desenvolver seu primeiro site em linguagem HTML. A finalização da oficina contou como a eleição do site favorito pelos jovens.</p>
<p>Na Turma Lovelace, crianças de 10 a 15 anos conheceram a história da matemática Ada Lovelace, quem escreveu o primeiro algoritmo processado por uma máquina em 1842, depois, seguiram o cronograma com as atividades do Labirinto e Programando Carrinhos Autônomos e o Desafio Scratch.</p>
<p>Ao longo da tarde, os participantes contaram com um coffee break, com salgadinhos, bolo, refrigerante e suco, para repor as energias e continuarem com a criatividade a mil.</p>
<p>Para finalizar o dia de introdução à programação, as crianças e adolescentes das três turmas continuaram no ritmo de aprendizagem com mais conforto no ambiente Inspira com o filme de animação, lúdico e humorístico, Decodificando Emojis, seguido pelo desvendamento do famoso programa online Akinator com a apresentação de Mistérios da Internet.</p>
<p><img decoding="async" loading="lazy" src="https://user-images.githubusercontent.com/11020807/230798362-bf98faaf-9376-4863-8a19-0093645b1e4b.jpeg" alt="image" class="img_ev3q"></p>
<p>Além das crianças e adolescentes dependentes diretos dos inscritos na conferência DevPR, o espaço Starter, organizado pela Codaqui, recebeu alunos do projeto comunitário Estrela Mãe de Paiçandu, Paraná.
O espaço Starters foi sucesso total!</p>
<p>Ao fechamento do DevPR, algumas crianças ainda subiram ao palco principal da conferência para compartilhar a experiência incrível e inédita que tiveram e sonhos, como “eu quero ser programador”.
Para sempre se lembrarem do projeto, os aspirantes mirins foram presenteados com o pato para debugar e um certificado online.</p>]]></content:encoded>
            <category>Institucional</category>
            <category>eventos</category>
            <category>comunidade</category>
            <category>devparaná</category>
        </item>
        <item>
            <title><![CDATA[Codaqui e seu Boletim de Segurança!]]></title>
            <link>https://codaqui.dev/blog/2023/03/01/codaqui-e-seu-boletim-de-seguranca</link>
            <guid>https://codaqui.dev/blog/2023/03/01/codaqui-e-seu-boletim-de-seguranca</guid>
            <pubDate>Wed, 01 Mar 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Oi! Eu sou o Elias, aluno da Codaqui, o meu objetivo aqui é ensinar como eu criei um sistema de envio de e-mails, sem ter um servidor de e-mail e utilizando o GitHub para me alertar do boletim de segurança.]]></description>
            <content:encoded><![CDATA[<p>Oi! Eu sou o Elias, aluno da Codaqui, o meu objetivo aqui é ensinar como eu criei um sistema de envio de e-mails, sem ter um servidor de e-mail e utilizando o GitHub para me alertar do boletim de segurança.</p>
<p>Gostaria de já fazer um agradecimento pela ajuda do Fundador da Codaqui, Enderson Menezes, que esteve me auxiliando no processo de criação desse projeto.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Vamos lá!</div><div class="admonitionContent_BuS1"><p><strong>Sem imagens</strong></p><p><strong>1° Passo</strong></p><ol>
<li class="">Vá no seu perfil e procure por <code>Repositories</code>.</li>
<li class="">Crie um novo repositório no github clicando em <code>New</code>, com nome de sua preferência.</li>
</ol><p><strong>2° Passo</strong></p><ol>
<li class="">Dentro desse repositório crie dois arquivos <code>.sh</code>, clicando em <code>Add File</code>, <code>Create new file</code>.</li>
<li class="">Chamados de <code>number.sh</code> e <code>script.sh</code>.</li>
<li class="">Ele são responsáveis por decodificar os dados.</li>
</ol><ul>
<li class="">Cógido dos arquivos <code>.sh</code>:
<a href="https://raw.githubusercontent.com/codaqui/boletim-diario-seguranca/main/script.sh" target="_blank" rel="noopener noreferrer" class="">script.sh</a>.
<a href="https://raw.githubusercontent.com/codaqui/boletim-diario-seguranca/main/number.sh" target="_blank" rel="noopener noreferrer" class="">number.sh</a>.</li>
</ul><p><strong>3° Passo</strong></p><ol>
<li class="">Crie também uma pasta chamada de <code>.github</code>, no repositório</li>
<li class="">Depois aperte <code>/</code>, ele entenderá que você quer gerar uma pasta.</li>
<li class="">Por fim dentro dessa pasta crie um arquivo chamado <code>boletim.md</code>.</li>
</ol><ul>
<li class="">Código do <code>boletim.md</code>:
<a href="https://raw.githubusercontent.com/codaqui/boletim-diario-seguranca/main/.github/boletim.md" target="_blank" rel="noopener noreferrer" class="">boletim.md</a>.</li>
</ul><p><strong>4º Passo</strong></p><ol>
<li class="">No mesmo diretório do arquivo <code>boletim.md</code>, crie outra pasta chamada de workflows.</li>
<li class="">Dentro do workflows crie um arquivo chamado de <code>boletim-diario.yml</code>.</li>
</ol><ul>
<li class="">Código do <code>boletim-diario.yml</code>:</li>
</ul><p><a href="https://raw.githubusercontent.com/codaqui/boletim-diario-seguranca/main/.github/workflows/boletim-diario.yml" target="_blank" rel="noopener noreferrer" class="">boletim-diario.yml</a></p><p><strong>5° Passo</strong></p><p>OBS: Tudo já está normal, mas e necessário editar algumas parte do <code>boletim-diario.yml</code>.</p></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">    - Procure por essas partes do códigos e faça oque é pedido abaixo!</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      1° altere isso:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      ```yml</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      on: </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          schedule:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            - cron: '0 13 * * *'</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      ```</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      para isso:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      ```yml</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      on: push</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      ```</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      depois altere:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      ```bash</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      chmod +X ./number.sh</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      bash ./number.sh</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      var=$( cat numero_final.txt )</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      gh issue close $var</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      ```</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      para isso:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      ```bash</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      #chmod +X ./number.sh</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      #bash ./number.sh</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      #var=$( cat numero_final.txt )</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      #gh issue close $var</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      ```</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      2° quando terminar salve as modificações e espere o Actions validar o código, logo após a criação da primeira `Issue`, modifique o código novamente e volte como estava antes.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - Para receber no E-mail leia nossa [README.md](https://github.com/codaqui/boletim-diario-seguranca/#readme), isso também é valido na sua aplicação.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">=== "Com imagens"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    **1° Passo**</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - *Criar um repositório no Github!*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ![step1](https://user-images.githubusercontent.com/63540372/220663763-e904004d-2093-4b09-9430-3e509843b4af.gif)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    **2° Passo**</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - *Criar scripts responsáveis por decodificar os dados.*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ![step2](https://user-images.githubusercontent.com/63540372/220674190-36a2b387-5cc8-4814-bda0-e773bc25c8bc.gif)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - Código usado para criação dos scripts: [script.sh](https://raw.githubusercontent.com/codaqui/boletim-diario-seguranca/main/script.sh) / [number.sh](https://raw.githubusercontent.com/codaqui/boletim-diario-seguranca/main/number.sh)!</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    **3º Passo**</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - *Criar pasta .github e arquivo md(Corpo para gerar ISSUES).*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ![step3](https://user-images.githubusercontent.com/63540372/220686276-87e4a0d7-15b0-4161-9660-2e23b1190d59.gif)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - Aperte / depois de escrever .github para gerar uma pasta.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - Código usado para criar o [boletim.md](https://raw.githubusercontent.com/codaqui/boletim-diario-seguranca/main/.github/boletim.md).</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    **4° Passo**</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - *Criar pasta workflows e arquivo yml(Responsável por iniciar as tarefas).*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ![step4](https://user-images.githubusercontent.com/63540372/220690915-99ea2900-9cc1-43de-becf-64a4d69128fa.gif)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - Código usado para criar [boletim-diario.yml](https://raw.githubusercontent.com/codaqui/boletim-diario-seguranca/main/.github/workflows/boletim-diario.yml)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    **5° Passo**</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - *Para teste e funcionamento de tudo altere o arquivo yml como no gif abaixo*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ![step5](https://user-images.githubusercontent.com/63540372/220696236-9cc17481-ea8b-4f3b-9710-df73612b1bad.gif)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    altere:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ```yml</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    on: </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        schedule:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          - cron: '0 13 * * *'</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ```</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    para</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ```yml</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    on: push</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ```</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    E também altere:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ```bash</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    chmod +X ./number.sh</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    bash ./number.sh</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    var=$( cat numero_final.txt )</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    gh issue close $var</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ```</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    para</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ```bash</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    #chmod +X ./number.sh</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    #bash ./number.sh</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    #var=$( cat numero_final.txt )</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    #gh issue close $var</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ```</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - Depois de salvar espere o Actions validar o código e gerar uma nova `Issue`.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - Em seguida altere novamente o código como o anterior do 4° passo.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - Pronto Está tudo funcionando!</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    - Para receber no E-mail leia nossa [README.md](https://github.com/codaqui/boletim-diario-seguranca/#readme), isso também é valido na sua aplicação.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">         </span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="observações-importantes">Observações Importantes<a href="https://codaqui.dev/blog/2023/03/01/codaqui-e-seu-boletim-de-seguranca#observa%C3%A7%C3%B5es-importantes" class="hash-link" aria-label="Link direto para Observações Importantes" title="Link direto para Observações Importantes" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-observação">1° Observação<a href="https://codaqui.dev/blog/2023/03/01/codaqui-e-seu-boletim-de-seguranca#1-observa%C3%A7%C3%A3o" class="hash-link" aria-label="Link direto para 1° Observação" title="Link direto para 1° Observação" translate="no">​</a></h4>
<ul>
<li class="">O código pode ser totalmente moldado por sua preferencia, só é preciso alterar o <code>script.sh</code> na linha abaixo</li>
</ul>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">xmllint </span><span class="token parameter variable" style="color:#36acaa">--html</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--xpath</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"/html/body/div[1]/main/section[2]/div/div/div/div/div/div[2]"</span><span class="token plain"> boletim1.txt </span><span class="token operator file-descriptor important" style="color:#393A34">1</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> boletim2.txt </span><span class="token operator file-descriptor important" style="color:#393A34">2</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> /dev/null</span><br></div></code></pre></div></div>
<ul>
<li class="">Especificamente tudo entre <code>""</code>, para isso você deve entender a estrutura da página, no qual será pego as informações.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-observação">2° Observação<a href="https://codaqui.dev/blog/2023/03/01/codaqui-e-seu-boletim-de-seguranca#2-observa%C3%A7%C3%A3o" class="hash-link" aria-label="Link direto para 2° Observação" title="Link direto para 2° Observação" translate="no">​</a></h4>
<ul>
<li class="">O horário está marcado para o Actions disparar a <code>Issue</code> as 13h, 0GMT, 10h no horário de Brasilia!</li>
<li class="">Você pode alterar o horário mudando o código mostrado abaixo:</li>
</ul>
<div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">schedule</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">     </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">cron</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'0 13 * * *'</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-observação">3° Observação<a href="https://codaqui.dev/blog/2023/03/01/codaqui-e-seu-boletim-de-seguranca#3-observa%C3%A7%C3%A3o" class="hash-link" aria-label="Link direto para 3° Observação" title="Link direto para 3° Observação" translate="no">​</a></h4>
<ul>
<li class="">Quais quer problemas futuros com o sistema criado podem ser variados, devem ser analisados.</li>
<li class="">Possiveis casos previstos:</li>
</ul>
<ol>
<li class="">JasonEtco/create-an-issue@v2 atualiza a maneira de gerenciar o aquivo <code>.md</code> na pasta <code>.github</code>.</li>
<li class="">A parte do bash realiza a tarefa sem atualizar o arquivo gerado no processo criando um erro, nesse caso você só da um <code>push</code> mostrado no ultimo passo mostrado acima.</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="4º-observação">4º Observação<a href="https://codaqui.dev/blog/2023/03/01/codaqui-e-seu-boletim-de-seguranca#4%C2%BA-observa%C3%A7%C3%A3o" class="hash-link" aria-label="Link direto para 4º Observação" title="Link direto para 4º Observação" translate="no">​</a></h4>
<ul>
<li class="">Os nomes de arquivos e variáveis podem ser alteras, mas caso procure fazer isso, verifique se tudos os nomes modificados estão certos para funcionar.</li>
</ul>]]></content:encoded>
            <category>Projetos</category>
            <category>github</category>
            <category>actions</category>
            <category>queroajudar</category>
        </item>
        <item>
            <title><![CDATA[DevPR Starter - Codaqui]]></title>
            <link>https://codaqui.dev/blog/2023/02/14/devpr-starter-codaqui</link>
            <guid>https://codaqui.dev/blog/2023/02/14/devpr-starter-codaqui</guid>
            <pubDate>Tue, 14 Feb 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Imagem de Divulgação do Evento]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://user-images.githubusercontent.com/11020807/218813559-d83a7928-94e3-4361-b0c2-3a1924b0a9c1.jpg" alt="Imagem de Divulgação do Evento" class="img_ev3q"></p>
<p>Filho de peixe peixinho é! A Codaqui e a DevParaná anunciam o <strong>DevPR Starter</strong> – uma programação incrível exclusiva para dependentes, filhos, filhas, irmãos e irmãs, de 6 a 16 anos, dos participantes da Conferência DevPR 2023.</p>
<p>Durante o evento DevPR 2023, as crianças dependentes dos participantes terão a oportunidade de aprender programação de forma lúdica, com atividades divertidas e interativas, além de um lanche no período da tarde para recarregar as energias.</p>
<p>Temos uma equipe preparada e dedicada para atender as crianças e adolescentes e garantir um ambiente seguro de aprendizagem.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="como-vai-funcionar">Como vai funcionar?<a href="https://codaqui.dev/blog/2023/02/14/devpr-starter-codaqui#como-vai-funcionar" class="hash-link" aria-label="Link direto para Como vai funcionar?" title="Link direto para Como vai funcionar?" translate="no">​</a></h2>
<p>Você que está participando do DevPR 2023 no Auditório poderá levar um dependente, e ele terá gratuitamente um evento e uma equipe disponível para ele.
Para inscrição do seu ou sua dependente, acesse o <a href="https://www.sympla.com.br/evento/devparana-conference-2023/1810983" target="_blank" rel="noopener noreferrer" class="">portal do Sympla</a> e inclua no carrinho o ingresso Starter (tipo A para 6 a 12 anos, ou tipo B para 13 a 16 anos).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="programação">Programação<a href="https://codaqui.dev/blog/2023/02/14/devpr-starter-codaqui#programa%C3%A7%C3%A3o" class="hash-link" aria-label="Link direto para Programação" title="Link direto para Programação" translate="no">​</a></h2>
<p>O Espaço Starter será divido em 4 ambientes, e você pode conferir todas as informações sobre palestrantes e atividades no <a href="https://devpr.org/" target="_blank" rel="noopener noreferrer" class="">site oficial do evento</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="palco-inspira">Palco Inspira<a href="https://codaqui.dev/blog/2023/02/14/devpr-starter-codaqui#palco-inspira" class="hash-link" aria-label="Link direto para Palco Inspira" title="Link direto para Palco Inspira" translate="no">​</a></h3>
<p>Será aberto para todos os participantes do evento, e terá uma programação de palestras voltado para pessoas iniciantes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sala-invertida">Sala Invertida<a href="https://codaqui.dev/blog/2023/02/14/devpr-starter-codaqui#sala-invertida" class="hash-link" aria-label="Link direto para Sala Invertida" title="Link direto para Sala Invertida" translate="no">​</a></h3>
<p>Será destinado a Workshops e atividades práticas.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sala-hopper">Sala Hopper<a href="https://codaqui.dev/blog/2023/02/14/devpr-starter-codaqui#sala-hopper" class="hash-link" aria-label="Link direto para Sala Hopper" title="Link direto para Sala Hopper" translate="no">​</a></h3>
<p>Será exclusivo para crianças de <strong>6 a 12 anos</strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sala-turing-13-a-16-anos">Sala Turing (13 a 16 anos)<a href="https://codaqui.dev/blog/2023/02/14/devpr-starter-codaqui#sala-turing-13-a-16-anos" class="hash-link" aria-label="Link direto para Sala Turing (13 a 16 anos)" title="Link direto para Sala Turing (13 a 16 anos)" translate="no">​</a></h3>
<p>Será exclusivo para jovens de <strong>13 a 16 anos</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dúvidas">Dúvidas?<a href="https://codaqui.dev/blog/2023/02/14/devpr-starter-codaqui#d%C3%BAvidas" class="hash-link" aria-label="Link direto para Dúvidas?" title="Link direto para Dúvidas?" translate="no">​</a></h2>
<p>Entre em contato por <a href="mailto:contato@codaqui.dev" target="_blank" rel="noopener noreferrer" class="">comunidade@devpr.org</a> ou <a href="mailto:contato@codaqui.dev" target="_blank" rel="noopener noreferrer" class="">contato@codaqui.dev</a> acesse o <a href="https://devpr.org/" target="_blank" rel="noopener noreferrer" class="">site oficial do evento.</a></p>]]></content:encoded>
            <category>Institucional</category>
            <category>eventos</category>
            <category>comunidade</category>
            <category>devparaná</category>
        </item>
    </channel>
</rss>