<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Lucas Frigo de Souza</title>
    <description>The latest articles on Forem by Lucas Frigo de Souza (@lfrigodesouza).</description>
    <link>https://forem.com/lfrigodesouza</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F342351%2F96d55915-d101-4bee-a5f4-03d371afae73.png</url>
      <title>Forem: Lucas Frigo de Souza</title>
      <link>https://forem.com/lfrigodesouza</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/lfrigodesouza"/>
    <language>en</language>
    <item>
      <title>O que é software livre e de código aberto?</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:56:51 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/o-que-e-software-livre-e-de-codigo-aberto-1i24</link>
      <guid>https://forem.com/lfrigodesouza/o-que-e-software-livre-e-de-codigo-aberto-1i24</guid>
      <description>&lt;p&gt;O conceito de Software Livre e de Código Aberto (que em inglês é chamado de &lt;em&gt;Free and Open Source Software&lt;/em&gt;, ou a sigla &lt;em&gt;FOSS&lt;/em&gt;), é um conceito que nasceu nos anos 80 para se opor ao que podemos chamar de software de código fechado (ou software proprietário), e que, na época, estava se tornando o padrão para os sistemas e programas desenvolvidos.&lt;/p&gt;

&lt;p&gt;E na verdade, apesar dos termos Software Livre e Software de Código Aberto serem algumas vezes utilizados de forma equivalente, os conceitos em sí são diferentes, e é importante que entendamos os dois para sabermos quando estamos falando de um software livre ou de um de código aberto.&lt;/p&gt;

&lt;h1&gt;
  
  
  O Software Livre (ou Free Software)
&lt;/h1&gt;

&lt;p&gt;Principalmente o termo em inglês, "Free Software", pode acabar trazendo uma conotação errônea sobre o que de fato caracteriza um software livre, especialmente se traduzirmos o termo do inglês ao pé da letra, (o que seria 'software grátis'). Na verdade, o conceito de software livre não tem exatamente uma relação específica com o preço ou o valor cobrado por ele, a ideia é que um software livre não tenha nenhuma restrição ou bloqueio devido a direitos autorais (e acho que o termo em português, "livre", cai muito bem nesse sentido).&lt;/p&gt;

&lt;p&gt;Basicamente, um software livre deve respeitar 4 liberdades essenciais, conforme definido pela &lt;a href="https://www.fsf.org/"&gt;Free Software Foundation&lt;/a&gt;, organização não-governamental com o ideal de promover o software livre:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A liberdade de executar o programa como você desejar, para qualquer propósito (liberdade 0).&lt;/li&gt;
&lt;li&gt;A liberdade de estudar como o programa funciona, e adaptá-lo às suas necessidades (liberdade 1). Para tanto, acesso ao código-fonte é um pré-requisito.&lt;/li&gt;
&lt;li&gt;A liberdade de redistribuir cópias de modo que você possa ajudar outros (liberdade 2).&lt;/li&gt;
&lt;li&gt;A liberdade de distribuir cópias de suas versões modificadas a outros (liberdade 3). Desta forma, você pode dar a toda comunidade a chance de beneficiar de suas mudanças. Para tanto, acesso ao código-fonte é um pré-requisito.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Olhando para esse conceito podemos concluir que muito dificilmente um software livre conseguiria respeitar todas essas liberdades e ter qualquer forma de monetização, o que é verdade, já que um software que deve ser distribuído livremente não poderia ser cobrado. Mas essa seria uma consequência de um software livre, não a sua motivação principal.&lt;/p&gt;

&lt;p&gt;Apesar de que alguns softwares livres serem sim vendidos, mas não com objetivo de cobrar ou restringir o uso do software, mas sim para arrecadar fundos em forma de uma contribuição ou doação para quem cria ou mantêm o software.&lt;/p&gt;

&lt;h1&gt;
  
  
  O Software de Código Aberto (ou Open Source Software)
&lt;/h1&gt;

&lt;p&gt;E é a partir daí que surge o conceito de "Software de Código Aberto", que veio posteriormente ao conceito de software livre, visando deixar menos ambíguo e, principalmente, mais confortável para o mundo corporativo.&lt;br&gt;
Um software de código aberto, ou contendo um componente originalmente de código aberto, pode sim ser cobrado, e ao mesmo tempo ainda estar de acordo com a sua definição.&lt;br&gt;
Por isso podemos considerar que todo software livre é um software de código aberto, mas o contrário nem sempre é verdade.&lt;/p&gt;

&lt;p&gt;O conceito de software de código aberto é regido pela &lt;a href="https://opensource.org/"&gt;Open Source Initiative&lt;/a&gt;, que também é uma organização focada na promoção e adoção de softwares de código aberto.&lt;br&gt;
A ideia é que um software de código aberto disponibilize seu código fonte sem restrições para que qualquer um possa consultar, porém existem algumas restrições do que mais pode ser feito com esse código, de acordo com o modelo de licenciamento definido.&lt;/p&gt;

&lt;p&gt;E a &lt;em&gt;Open Source Initiative&lt;/em&gt; lista diversos modelos de licenciamento para um software de código aberto, e é o tipo de licença escolhida que define como que um software de código aberto pode ser utilizado e ou comercializado (mais sobre os tipos de licenciamento em um artigo futuro).&lt;br&gt;
Por isso é sempre importante se atentar ao tipo de licença de um software antes de utilizá-lo ou incorporá-lo à um projeto.&lt;/p&gt;

&lt;h1&gt;
  
  
  Porque usar software livre e de código aberto
&lt;/h1&gt;

&lt;p&gt;Quase sempre que o tema de software livre é discutido, são levantados questionamentos sobre as motivações de se utilizar um software desse tipo. Já ouvi em discussões de que não é bom utilizar esse tipo de software porque não existe nenhuma empresa por trás para dar suporte ou responder a eventuais problemas de uso, nem ninguém para ser "responsabilizado".&lt;/p&gt;

&lt;p&gt;E talvez isso até seja verdade com softwares livres, que pela sua essência acabam realmente sendo programas criados e mantidos por voluntários (já que costumam ser mesmo gratuitos), o mesmo não é uma verdade absoluta sobre softwares de código aberto.&lt;br&gt;
Muitos programas de código aberto são mantidos por empresas cujos modelos de negócio acabam sendo justamente agregar algum outro valor ao software (como um atendimento personalizado, um serviço adicional relevante, etc), permitindo que o código seja disponibilizado abertamente, e ainda assim gere algum tipo de renda para quem o mantêm.&lt;/p&gt;

&lt;p&gt;Esses são alguns dos motivos que eu pessoalmente vejo que são vantagens de se utilizar um software de código aberto:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Podendo olhar o código-fonte do software, você sabe exatamente o que ele está fazendo ou deixando de fazer, permitindo que seu funcionamento seja auditado por qualquer pessoa, trazendo mais segurança na sua utilização;&lt;/li&gt;
&lt;li&gt;Esse tipo de software ajuda a promover o senso de comunidade, pois qualquer um pode tando contribuir para um software de código aberto, com sugestões de melhorias e correções de problemas, quanto (dependendo do licenciamento) utilizar partes de código em outros projetos;&lt;/li&gt;
&lt;li&gt;Apesar de poder ter algum tipo de cobrança sobre um software de código aberto, muitas vezes é possível utilizá-lo em partes de forma gratuita, diminuindo os custos de um projeto, principalmente para pequenas empresas ou startups;&lt;/li&gt;
&lt;li&gt;Liberdade de não ficar preso a uma empresa específica ao utilizar o software dela. Você utiliza um produto que sofreu alguma alteração que você não gostou, ou tem alguma funcionalidade que você precisa muito? Você pode muito bem criar uma nova versão desses sistema com base no código disponibilizado e alterá-lo da forma como for necessário para você.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;E já sobre o software livre, além dos mesmos motivos do software de código aberto, podemos também adicionar um componente de certa forma ideológico sobre seu uso, que é a ideia de promover a solidariedade e a cooperação entre as pessoas, e combater monopólios.&lt;br&gt;
Em vez de utilizar um software proprietário que irá beneficiar apenas uma empresa em particular, porque não utilizar um software livre, onde você pode ajudar a manter e a melhorar, é gratuito e pode acabar beneficiando muitas mais pessoas?&lt;/p&gt;

&lt;p&gt;Claro, nem sempre vamos conseguir uma alternativa livre para os sistemas que utilizamos no nosso dia-a-dia, e softwares proprietários as vezes trazem facilidades de uso que podem parecer mais atrativos, mas tentar priorizar softwares livres e de código aberto pode ajudar a termos um futuro tecnológico melhor.&lt;/p&gt;

&lt;p&gt;Pra quase todo software proprietário podemos encontrar um equivalente de código aberto, e aqui posso listar alguns, como Linux vs Windows e MacOS, Firefox vs Google Chrome, Android vs iOS, MySql vs Oracle e MSSQLServer, Libre Office vs Microsoft Office, GIMP vs Photoshop, Joplin vs Evernote, entre outros!&lt;/p&gt;

&lt;p&gt;Um site que gosto que ajuda bastante nisso é o &lt;a href="https://alternativeto.net/"&gt;AlternativeTo&lt;/a&gt;. Buscando por um software ou serviço, ele traz diversos outras alternativas disponíveis, e entre os filtros você pode selecionar para trazer apenas softwares livres e de código aberto.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>opensource</category>
    </item>
    <item>
      <title>LGPD - Parte VII - Como tem sido a fiscalização?</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:55:27 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/lgpd-parte-vii-como-tem-sido-a-fiscalizacao-478f</link>
      <guid>https://forem.com/lfrigodesouza/lgpd-parte-vii-como-tem-sido-a-fiscalizacao-478f</guid>
      <description>&lt;p&gt;Desde agosto de 2021 a LGPD entrou na fase de punição, e a ANPD já pode aplicar as sanções definidas na lei nas empresas que falharem na proteção de dados.&lt;br&gt;
A agência porém, criada em 2020, ainda está em fase de desenvolvimento. A partir deste ano existe a expectativa de ações mais efetiva da ANPD contra as empresas, porém até hoje não tivemos nenhum grande caso onde de fato alguma das sanções foi aplicada. Podemos, porém, olhar para a Europa, para como a GDPR está atuando com as empresas, para termos uma ideia de como pode ser aqui no Brasil, já que as duas leis são bem similares e compatíveis.&lt;/p&gt;

&lt;p&gt;Por exemplo, a empresa francesa Sergic, do setor imobiliário, foi multada em R$1.808.000,00&lt;sup id="fnref1"&gt;1&lt;/sup&gt;, pois o site da empresa permitia o acesso a cadastros de outras empresas apenas com a manipulação do endereço de acesso.&lt;br&gt;
Já a empresa de taxis dinamarquesa Taxa 4X35 foi multada em R$728.000,00&lt;sup id="fnref2"&gt;2&lt;/sup&gt; quando uma auditoria descobriu 9 milhões de registros de dados pessoais que a empresa armazenada, porém que ela não precisaria para operar seu negócio.&lt;/p&gt;

&lt;p&gt;Já em Portugal, um hospital próximo de Lisboa foi multado em R$1.808.000,00&lt;sup id="fnref3"&gt;3&lt;/sup&gt; pois funcionários conseguiam acessar dados médicos de pacientes se utilizando de contas falsas; e a plataforma de mensagens alemã Knuddels.de foi multada em R$90.400,00&lt;sup id="fnref4"&gt;4&lt;/sup&gt; após ter reportado um vazamento de dados e uma auditoria ter descoberto que o site da empresa armazenava senhas em "texto aberto", sem criptografia.&lt;/p&gt;

&lt;p&gt;Em um momento que cada vez mais vemos notícias sobre ataques hackers e vazamento de dados, as empresas devem se preocupar não somente com as sanções financeiras que podem ser aplicadas pela lei, mas também para as consequências que esses tipos de incidentes podem trazer para a marca e reputação da empresa.&lt;/p&gt;

&lt;p&gt;Mais de dois anos depois da lei entrar em vigor, segundo levantamento da empresa ICTS Protiviti&lt;sup id="fnref5"&gt;5&lt;/sup&gt;, 84% das empresas não estão preparadas para as novas regras de privacidade de dados. O setor mais preparado, segundo o levantamento, é o setor financeiro, ainda assim com apenas 32% das empresas se dizendo prontas, e o pior setor é o hospitalar, com apenas 8% das empresas em conformidade com a lei.&lt;br&gt;
Esses números parecem ser muito baixos se considerarmos as consequências que um vazamento de dados pode trazer para a vida das pessoas, e devemos cada vez mais fomentar esse assunto e fazer com que cada vez mais empresas se adéquem á nova lei.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;No próximo artigo trarei um guia de ajuda para adequação à lgpd&lt;/em&gt;&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://legal-kornet.com/blog/fine-sergic-non-compliance-gdpr/"&gt;SERGIC was fined for non-compliance with the GDPR &lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;&lt;a href="https://gdpr.eu/data-anonymization-taxa-4x35/"&gt;Data anonymization and GDPR compliance: the case of Taxa 4×35&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;&lt;a href="https://iapp.org/news/a/portugal-fines-hospital-400k-euros-for-gdpr-violation/"&gt;Portugal fines hospital 400K euros for GDPR violation&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn4"&gt;
&lt;p&gt;&lt;a href="https://gbhackers.com/knuddels-chat-app-fined/"&gt;Knuddels Chat App Fined €20k under GDPR Regulation For Storing Passwords in Plain Text&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn5"&gt;
&lt;p&gt;&lt;a href="https://www.lgpdbrasil.com.br/84-das-empresas-brasileiras-nao-estao-preparadas-para-a-lgpd/"&gt;84% das empresas brasileiras não estão preparadas para a LGPD&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>security</category>
      <category>lgpd</category>
    </item>
    <item>
      <title>Criando um Plano de Continuidade de Negócio</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:53:39 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/criando-um-plano-de-continuidade-de-negocio-1dm3</link>
      <guid>https://forem.com/lfrigodesouza/criando-um-plano-de-continuidade-de-negocio-1dm3</guid>
      <description>&lt;p&gt;Muitas empresas, quando pensam em um plano de recuperação de crise, acabam focando mais na área tecnológica: pensam em backups dos bancos de dados, replicação de arquivos, mecanismos de redundância de serviços, etc.&lt;br&gt;
Porém, considerar apenas a continuidade da TI, com seus backups e redundâncias, pode não ser suficiente na ocorrência de um desastre.&lt;br&gt;
É inegável que as práticas de recuperação para a área da TI são essenciais para a continuidade de um negócio, mas um bom &lt;strong&gt;Plano de Continuidade de Negócio&lt;/strong&gt; (ou em inglês &lt;strong&gt;BCP&lt;/strong&gt;, &lt;em&gt;Business Continuity Plan&lt;/em&gt;) deve descrever e conferir meios para que toda a operação da empresa possa continuar durante uma interrupção não planejada, com planos de contingência para cada área de negócio, desde a TI até os Recursos Humanos, parceiros e fornecedores, &lt;em&gt;facilities&lt;/em&gt;, etc.&lt;br&gt;
Um &lt;strong&gt;BCP&lt;/strong&gt; que considera apenas uma área de negócio é limitado e pode acabar se tornando ineficaz se a empresa se deparar com uma ocorrência ou desastre de grande porte. Por isso, já na sua elaboração, um &lt;strong&gt;BCP&lt;/strong&gt; deve ser abrangente e bem definido.&lt;br&gt;
Para auxiliar neste processo da definição de um &lt;strong&gt;BCP&lt;/strong&gt;, podemos separar seu processo de criação em 4 partes: fazer a análise dos riscos, mensurar os impactos destes riscos em cada aspecto do negócio, definir a estratégia do plano de continuidade e, por fim, monitorar, testar, e atualizar o plano periodicamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Análise dos riscos
&lt;/h3&gt;

&lt;p&gt;O primeiro passo para se criar um &lt;strong&gt;BCP&lt;/strong&gt; é fazer a análise dos riscos envolvidos no negócio.&lt;br&gt;
As principais ameaças e vulnerabilidades devem ser identificadas, mapeadas e priorizadas. E esses riscos podem ser tanto os inerentes ao negócio, como mudanças de preços de insumos, surgimento de concorrentes, mudanças no mercado, etc; como riscos que fogem do escopo da empresa, como sabotagens, falhas sistêmicas, &lt;strong&gt;pandemias&lt;/strong&gt;, incêndios, desastres naturais, etc.&lt;br&gt;
Deixar de considerar algum risco pode fazer o &lt;strong&gt;BCP&lt;/strong&gt; falhar em um momento de necessidade.&lt;br&gt;
Nós hoje, durante a pandemia de COVID-19, estamos vivendo um estado de exceção. Quantos planos de continuidade de negócio estavam preparados para considerar um tipo de acontecimento desta magnitude? Quantos não consideravam e acabaram tendo seus negócios interrompidos, ou precisaram se adequar de forma acelerada e com pouco tempo de planejamento, podendo tando ter sofrido prejuízos quantos altos custos para adequação?&lt;/p&gt;

&lt;p&gt;Apesar de quantos mais riscos identificados melhor, já que deixará o &lt;strong&gt;BCP&lt;/strong&gt; mais completo, inicie pequeno. Foque nos riscos mais latentes e que são mais tangíveis. Não queremos despender muito tempo nesta fase em detrimento de ter um plano completo, e na fase de monitoração e acompanhamento teremos a oportunidade de voltar para a análise de riscos e expandir o &lt;strong&gt;BCP&lt;/strong&gt; de forma incremental, deixando-o cada vez mais completo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mensurar o impacto no negócio
&lt;/h3&gt;

&lt;p&gt;Depois de termos os riscos mapeados, eles devem ser analisados para que sejam identificados seus impactos no negócio e assim definidas suas prioridades no &lt;strong&gt;BCP&lt;/strong&gt;.&lt;br&gt;
Existe o risco de terremoto no Brasil? Até pode existir, mas a prioridade desse risco pode ser menor que o risco de interrupção generalizado no fornecimento de energia, por exemplo.&lt;br&gt;
Esse passo é extremamente importante para que se tenha com clareza quais pontos do negócio podem ser mais vulneráveis, e já se começar a desenhar as possíveis soluções para esses riscos.&lt;br&gt;
Nesta fase, além dos riscos mapeados, também podemos analisar os incidentes que já impactaram o negócio anteriormente, para que eles sejam melhores gerenciados no futuro.&lt;/p&gt;

&lt;p&gt;Para ajudar nessa análise, podemos utilizar a &lt;strong&gt;BIA&lt;/strong&gt; (&lt;em&gt;Business Impact Analysis&lt;/em&gt;). Na &lt;strong&gt;BIA&lt;/strong&gt;, cada função de negócio é correlacionada com seus riscos e vulnerabilidades; são definidos os níveis de impacto (seja financeiro, regulatório, etc), e o tempo máximo de indisponibilidade tolerado.&lt;br&gt;
Com a &lt;strong&gt;BIA&lt;/strong&gt; completa, conseguimos determinar a priorização de recuperação das funções de negócio, e então podemos partir para a próxima fase, definir a estratégia de recuperação.&lt;/p&gt;

&lt;h3&gt;
  
  
  Definir a estratégia
&lt;/h3&gt;

&lt;p&gt;Tendo analisado os riscos e mensurados os impactos, precisamos definir como que o &lt;strong&gt;BCP&lt;/strong&gt; será acionado.&lt;br&gt;
Podemos estruturar esse plano em quatro subplanos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plano de contingência&lt;/strong&gt;: deve ser utilizado no momento da crise, e define as ações diretas para contingenciar e controlar a ocorrência;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plano de Administração (ou Plano de Gerenciamento de Crises)&lt;/strong&gt;: define as responsabilidades de cada equipe ou pessoa envolvida, cada qual com as definições de acionamento dos planos de contingência;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plano de Recuperação de Desastres&lt;/strong&gt;: Após o desastre ter sido controlado e passada a crise, o plano de recuperação traz o planejamento para que a empresa consiga se preparar para retomar seus níveis anteriores de operação. Esse plano de recuperação de desastre, além de recuperar recursos diretamente afetados, visa minimizar os efeitos do desastre em outras funções indiretamente afetadas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plano de Continuidade Operacional&lt;/strong&gt;: Uma vez com o negócio recuperado, o plano de continuidade operacional deve garantir a continuidade da operação. Por exemplo, garantindo acesso a sistemas críticos a partir de outros ambientes que não o afetado, tratando do relacionamento com clientes e acionistas/sócios/colaboradores, etc, até que toda a situação seja normalizada e a empresa possa retornar para a operação anterior à crise.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Monitoração e acompanhamento
&lt;/h3&gt;

&lt;p&gt;Tendo a estratégia bem definida, deve-se entrar na fase de monitoração e acompanhamento.&lt;br&gt;
Um &lt;strong&gt;BCP&lt;/strong&gt; obsoleto pode ser tão danoso para a empresa quando a crise que está sendo enfrentada, pois pode dar uma falsa sensação de que o negócio está sendo garantido, quando na verdade muitas coisas estão fora do escopo do plano, e a retomada da funções da empresa pode estar sendo prejudicada.&lt;br&gt;
Ele deve ter periodicamente revisto e aprimorado, passando novamente pelas fases de análise de riscos, análise de impacto e definição da estratégia, para se adequar a novas conjunturas externas.&lt;br&gt;
Um &lt;strong&gt;BCP&lt;/strong&gt; também deve ser revisado de acordo com mudanças da própria natureza do negócio da empresa. Evoluções de software e hardware, rotatividade de pessoal, reorganização da companhia e alterações na infraestrutura são alguns motivos que devem ser levados em conta para determinar a necessidade de revisão.&lt;br&gt;
A identificação de novos riscos, ou repriorização de risco identificados anteriormente também são motivos para inciar um processo de reavaliação do &lt;strong&gt;BCP&lt;/strong&gt;. Nunca devemos considerar que um &lt;strong&gt;BCP&lt;/strong&gt; está "pronto", já que a melhoria contínua faz parte do processo.&lt;/p&gt;

&lt;p&gt;Aqui também temos a oportunidade de testar um &lt;strong&gt;BCP&lt;/strong&gt;, aplicando as estratégias definidas com seus diversos planos para garantir e avaliar sua efetividade. Quanto mais exercitado for o &lt;strong&gt;BCP&lt;/strong&gt;, mais bem preparado as pessoas e equipes envolvidas estarão, e mais efetivo e ágil pode ser a recuperação das funções do negócio na ocorrência de um desastre, minimizando os danos.&lt;/p&gt;

&lt;p&gt;É nesta fase também que devemos tratar da conscientização e educação dos colaboradores para a importância do &lt;strong&gt;BCP&lt;/strong&gt;, garantindo que cada pessoa saiba do seu papel e onde encontrar as informações necessárias na hora de agir.&lt;/p&gt;

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

&lt;p&gt;Um &lt;strong&gt;Plano de Continuidade de Negócios&lt;/strong&gt; é essencial para qualquer empresa que queira crescer e manter os seus serviços de forma eficiente. E os tempos em que vivemos deixam isso muito latente.&lt;br&gt;
Além da Pandemia de COVID-19, temos visto cada vez mais catástrofes naturais, acentuadas pelas mudanças climáticas, e a cada momento surgem novos riscos que precisam ser considerados.&lt;br&gt;
Hoje, um &lt;strong&gt;BCP&lt;/strong&gt; que não considera os riscos de um ataque de &lt;em&gt;ransomware&lt;/em&gt;, pode ser considerado como completo e eficiente?&lt;/p&gt;

&lt;p&gt;Devemos tornar a &lt;strong&gt;Continuidade do Negócio&lt;/strong&gt; parte integral das decisões da empresa, realizando auditorias internas para garantir sua aplicação e processos, realizar exercícios regulares para avaliar a sua efetividade, e, é claro, como já foi falado, estar constantemente revisando os planos definidos e incluindo novos riscos e ações para garantir que a empresa esteja preparada para quaisquer que sejam as crises que possam ocorrer.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Artigo escrito como trabalho para matéria Business Continuity Management do curso de MBA em Cybersecurity na FIAP&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
    </item>
    <item>
      <title>winget - O gerenciador de pacotes do Windows</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:51:52 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/winget-o-gerenciador-de-pacotes-do-windows-3g7e</link>
      <guid>https://forem.com/lfrigodesouza/winget-o-gerenciador-de-pacotes-do-windows-3g7e</guid>
      <description>&lt;p&gt;Os gerenciadores de pacotes são bem úteis no nosso dia-a-dia, e hoje temos uma grande variedade deles, nos mais diversos sistemas operacionais.&lt;br&gt;
Certamente, se você já utilizou alguma distribuição do Linux, ou se você trabalha com desenvolvimento com NodeJS, você já utilizou algum gerenciador de pacotes.&lt;/p&gt;

&lt;p&gt;Seja um &lt;code&gt;npm&lt;/code&gt;, &lt;code&gt;yarn&lt;/code&gt;, &lt;code&gt;brew&lt;/code&gt;, &lt;code&gt;apt-get&lt;/code&gt;, instalar um pacote fica tão fácil quanto executar um &lt;code&gt;apt install&lt;/code&gt; ou um &lt;code&gt;npm i&lt;/code&gt;.&lt;br&gt;
Basta encontrar o pacote que você quer, e o gerenciador vai permitir que você instale, atualize e desinstale os pacotes sem dificuldades.&lt;/p&gt;

&lt;p&gt;E apesar dos gerenciadores de pacotes serem bem comuns para quem usa Linux (e o Unix no geral) ou NodeJS, isso não acontece tanto no Windows para a instalação de aplicações.&lt;br&gt;
Temos já a bastante tempo um bom gerenciador de pacotes para Windows chamado &lt;a href="https://chocolatey.org/"&gt;Chocolatey&lt;/a&gt;, porém ele não é tão popular.&lt;/p&gt;

&lt;p&gt;Querendo reverter essa situação, e facilitar a instalação e gerenciamento de aplicações no Windows, a Microsoft resolveu desenvolver e lançar o Windows Package Manager, ou &lt;code&gt;winget&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Anunciado em maio de 2020, quando foi lançado em versão preview, agora um ano depois temos o lançamento da primeira versão final disponível.&lt;/p&gt;
&lt;h1&gt;
  
  
  Instalando o winget
&lt;/h1&gt;

&lt;p&gt;Se você utiliza uma versão &lt;em&gt;Insider&lt;/em&gt; do Windows, é provável que você já tenha o winget disponível na sua máquina para utilizar.&lt;/p&gt;

&lt;p&gt;Caso contrário, você pode instalar de duas formas: pela Microsoft Store ou manualmente.&lt;/p&gt;

&lt;p&gt;Recomendo que a instalação seja feita pela Microsoft Store, que assim você receberá atualizações automaticamente.&lt;br&gt;
Para isso, instale o &lt;a href="https://www.microsoft.com/pt-br/p/app-installer/9nblggh4nns1"&gt;Instalador de Aplicativo&lt;/a&gt; disponível na loja que ele já traz consigo também o comando &lt;code&gt;winget&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Já para instalar manualmente, vá até o &lt;a href="https://github.com/microsoft/winget-cli"&gt;repositório do winget-cli&lt;/a&gt;, na página de tags, e faça o download da versão mais recente disponível (que no meu caso é a v1.0.11451).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n_pGI7Kz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_download_instalador.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n_pGI7Kz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_download_instalador.png" alt="" width="880" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Se der algum erro durante a instalação manual, é possível que você precise instalar antes um componente adicional no Windows (o &lt;strong&gt;VC++ v14 Desktop Framework Package&lt;/strong&gt;). Você pode ver como instalar este componente &lt;a href="https://docs.microsoft.com/en-us/troubleshoot/cpp/c-runtime-packages-desktop-bridge#how-to-install-and-update-desktop-framework-packages"&gt;aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;E pronto! Depois de instalar, abra um terminal (preferencialmente o PowerShell) e execute o comando &lt;code&gt;winget -v&lt;/code&gt;. Se tudo tiver sido instalado corretamente, será exibida a versão atual da ferramenta.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ti2GF1sd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_version.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ti2GF1sd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_version.png" alt="" width="880" height="136"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Encontrando um pacote
&lt;/h1&gt;

&lt;p&gt;Com o winget instalado, você precisa encontrar os pacotes que pode instalar.&lt;br&gt;
Os pacotes disponíveis ficam armazenados em um repositório no github através de arquivos de manifestos, contendo todos os dados referentes aos pacotes.&lt;br&gt;
O interessante é que esse repositório é público e mantido pela comunidade, e qualquer pessoa pode fazer um pedido de inclusão de uma nova aplicação (até mesmo você!). Esse repositório é o &lt;a href="https://github.com/microsoft/winget-pkgs"&gt;microsoft/winget-pkgs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Até por conta disto, nem todas as aplicações que você pode desejar já vão estar disponíveis atualmente para instalação pelo winget, porém a comunidade, a cada dia, envia novos pacotes para estarem disponíveis.&lt;/p&gt;

&lt;p&gt;Mas hoje já temos uma grande quantidade de aplicações disponíveis, como o NodeJS, VSCode, Windows Terminal, o navegador Edge, o Docker Desktop, etc. Sem dúvida nenhuma a maioria dos programas que você utiliza já estarão disponíveis.&lt;/p&gt;

&lt;p&gt;Além de olhar diretamente no repositório dos pacotes, você também pode utilizar o comando &lt;em&gt;list&lt;/em&gt; para listar todos os pacotes disponíveis para instalação, ou o comando &lt;em&gt;search&lt;/em&gt; para buscar um pacote em específico.&lt;/p&gt;
&lt;h1&gt;
  
  
  Comandos disponíveis
&lt;/h1&gt;

&lt;p&gt;Estes são os principais comandos disponíveis no winget:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install&lt;/li&gt;
&lt;li&gt;Show&lt;/li&gt;
&lt;li&gt;Search&lt;/li&gt;
&lt;li&gt;List&lt;/li&gt;
&lt;li&gt;Upgrade&lt;/li&gt;
&lt;li&gt;Uninstall&lt;/li&gt;
&lt;li&gt;Settings&lt;/li&gt;
&lt;li&gt;Import e Export&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se quiser mais detalhes sobre algum comando, você pode utilizar o &lt;code&gt;--help&lt;/code&gt;, tanto no próprio winget (&lt;code&gt;winget --help&lt;/code&gt;), ou em algum comando específico (como &lt;code&gt;winget install --help&lt;/code&gt;).&lt;/p&gt;
&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;Para instalar um pacote é bem simples: encontre o pacote desejado, copie o nome ou ID dele, e execute o comando de instalação. O winget fará o trabalho de baixar o instalador necessário e executar a instalação com o mínimo de interação necessária.&lt;br&gt;
Idealmente, sempre execute o comando de instalação passando o ID do pacote desejado, para garantir que é o pacote correto que será instalado.&lt;br&gt;
Caso ocorra alguma ambiguidade no nome fornecido, a ferramenta irá mostrar as opções para que você reexecute o comando passando o ID.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1sr75hOG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_install.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1sr75hOG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_install.png" alt="" width="880" height="246"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Show
&lt;/h2&gt;

&lt;p&gt;Mostra as informações de um pacote, como a versão, o autor, descrição, link, etc.&lt;br&gt;
&lt;em&gt;Apenas cuidado, porque se for executado sem passar nenhum pacote, vai listar todos os pacotes disponíveis para instalação, o que pode ser bastante coisa e pode demorar.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kkIltJol--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_show.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kkIltJol--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_show.png" alt="" width="880" height="345"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Search
&lt;/h2&gt;

&lt;p&gt;Além de poder encontrar um pacote direto no repositório, você pode utilizar o comando &lt;code&gt;search&lt;/code&gt; que permite buscar um pacote entre todos os disponíveis.&lt;br&gt;
Serão listados todos os pacotes encontrados com o termo informado, e a partir daí você pode obter o ID do pacote desejado para instalação.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OV3jlLA6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_search.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OV3jlLA6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_search.png" alt="" width="880" height="319"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  List
&lt;/h2&gt;

&lt;p&gt;Lista todos os programas instalados na máquina, incluindo aqueles que não tenham sido instalados pelo winget. Isso é útil para verificar se alguma aplicação específica esteja instalada, não importando a origem.&lt;/p&gt;

&lt;p&gt;Caso você queira lista somente os pacotes instalados pelo winget, utilize o parâmetro &lt;code&gt;-s winget&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6KKK1zY5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6KKK1zY5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_list.png" alt="" width="880" height="215"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Upgrade
&lt;/h2&gt;

&lt;p&gt;Atualiza um pacote para a versão mais recente. Basta executar o comando passando o ID do pacote que se deseja atualizar.&lt;br&gt;
Caso o comando seja executado sem passar nenhum pacote (apenas &lt;em&gt;winget upgrade&lt;/em&gt;), serão listados todos os pacotes disponíveis para atualização, incluindo a versão atual e a versão disponível.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YXlmRLc9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_upgrade.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YXlmRLc9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_upgrade.png" alt="" width="880" height="230"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Uninstall
&lt;/h2&gt;

&lt;p&gt;Desinstala um pacote informado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qIxxbWSI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_uninstall.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qIxxbWSI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/gerenciador-de-pacotes-do-windows/winget_uninstall.png" alt="" width="880" height="162"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Settings
&lt;/h2&gt;

&lt;p&gt;Abre o arquivo de configuração do winget, permitindo que você altere algumas opções da ferramenta.&lt;br&gt;
Você pode verificar &lt;a href="https://github.com/microsoft/winget-cli/blob/master/doc/Settings.md"&gt;aqui&lt;/a&gt; as configurações disponíveis.&lt;/p&gt;
&lt;h2&gt;
  
  
  Import e Export
&lt;/h2&gt;

&lt;p&gt;O winget possui mais dois outros comandos que hoje vejo que são os mais úteis dessa ferramente.&lt;/p&gt;

&lt;p&gt;Se tratam dos comandos &lt;code&gt;export&lt;/code&gt; e o &lt;code&gt;import&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;O comando &lt;code&gt;export&lt;/code&gt; gera um arquivos &lt;code&gt;.json&lt;/code&gt; com todos os pacotes instalados na máquina que estão disponíveis pelo &lt;code&gt;winget&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'c:\temp\winget.json'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Já o comando &lt;code&gt;import&lt;/code&gt; faz o inverso: a partir de um desses arquivos, faz a instalação (ou atualização) de todos os pacotes que estejam listados.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'c:\temp\winget.json'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso é muito útil em várias situações: se você costuma trocar de máquina com frequência, você consegue fácilmente fazer a preparação e instalar todas as ferramentas que você usa.&lt;br&gt;
Como o comando de import também atualiza os programas caso eles já estejam instalados, você pode executar este comando periodicamente para manter as aplicações que você mais usa sempre nas versões mais recentes.&lt;/p&gt;

&lt;p&gt;Um outro uso bem interessante do winget é se você trabalha com infraestrutura e precisa fazer a instalação e preparação de máquinas para outras pessoas com frequência.&lt;br&gt;
Basta copiar o arquivo com os pacotes para a nova máquina e rodar o comando de importação que sem muita demora todas as aplicações necessárias são instaladas.&lt;br&gt;
Você pode facilmente manter arquivos diferentes dependendo do setor que a pessoa trabalha, cada um com as aplicações necessárias.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;E você, vê mais algum outro uso para o winget?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Caso tenha curiosidade, mantenho meu arquivo &lt;code&gt;winget.json&lt;/code&gt; &lt;a href="https://github.com/lfrigodesouza/WindowsTerminal/blob/master/winget.json"&gt;neste repositório&lt;/a&gt; do GitHub, facilitando ainda mais a instalação de qualquer máquina. Sinta-se a vontade para dar uma olhada!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>LGPD - Parte VI - Sanções Administrativas</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:50:49 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/lgpd-parte-vi-sancoes-administrativas-522i</link>
      <guid>https://forem.com/lfrigodesouza/lgpd-parte-vi-sancoes-administrativas-522i</guid>
      <description>&lt;p&gt;Em caso de descumprimento de algumas das definições da Lei Geral de Proteção de Dados Pessoais, o agente de tratamento de dados pode sofrer algumas sanções administrativas aplicáveis pela autoridade nacional.&lt;br&gt;
O nível de sanção aplicada dependerá do grau de descumprimento da LGPD e a gravidade da infração.&lt;/p&gt;

&lt;p&gt;O processo de apuração por parte da ANPD deve possibilitar a oportunidade de ampla defesa, de acordo com as peculiaridades dos casos e devem considerar alguns parâmetros como a gravidade e a natureza das infrações, a boa-fé do infrator, a vantagem obtida pelas infrações, a reincidência, grau de dano, cooperação do infrator, a adoção de política de boas práticas e governança, a pronta adoção de medidas corretivas, etc.&lt;/p&gt;

&lt;p&gt;Portanto, cada caso de infração à LGPD será analisado pela autoridade nacional de forma individual, e uma sanção aplicada a um agente de tratamento pode não ser igual à outro.&lt;/p&gt;

&lt;p&gt;Estas são as sanções administrativas previstas na lei:&lt;/p&gt;

&lt;h3&gt;
  
  
  I - Advertência
&lt;/h3&gt;

&lt;p&gt;Uma advertência formal feita pela ANPD, que também indicará o prazo para a adoção de medidas corretivas;&lt;/p&gt;

&lt;h3&gt;
  
  
  II - Multa simples
&lt;/h3&gt;

&lt;p&gt;Uma multa única, de até 2% sobre o faturamento da empresa, limitada a R$50 milhões de reais &lt;strong&gt;por infração&lt;/strong&gt;;&lt;/p&gt;

&lt;h3&gt;
  
  
  III - Multa diária
&lt;/h3&gt;

&lt;p&gt;Quando o infrator não conseguir demonstrar reais esforços para a resolução dos problemas encontrados, é possível que&lt;br&gt;
uma multa diária seja aplicada, limitando-se ao valor estabelecido no item II.&lt;/p&gt;

&lt;h3&gt;
  
  
  IV - Publicização da infração
&lt;/h3&gt;

&lt;p&gt;Após as infrações serem devidamente apuradas e confirmadas, elas devem ser publicadas e informadas ao público.&lt;/p&gt;

&lt;h3&gt;
  
  
  V - Bloqueio dos dados pessoais
&lt;/h3&gt;

&lt;p&gt;O agente de tratamento pode ter os dados pessoais a que se refere a infração bloqueados, até a regularização da&lt;br&gt;
situação.&lt;/p&gt;

&lt;h3&gt;
  
  
  VI - Eliminação dos dados
&lt;/h3&gt;

&lt;p&gt;Obrigação de eliminar os dados pessoais a que se referiram as infrações.&lt;/p&gt;

&lt;h3&gt;
  
  
  VII - Suspensão parcial do funcionamento do banco de dados
&lt;/h3&gt;

&lt;p&gt;Suspensão do funcionamento do banco de dados a que se refere a infração.&lt;br&gt;
O período máximo da suspensão é de 6 meses, prorrogável por mais 6 meses, até a regularização da situação.&lt;/p&gt;

&lt;h3&gt;
  
  
  VIII - Suspensão do exercício da atividade de tratamento dos dados pessoais
&lt;/h3&gt;

&lt;p&gt;O controlador pode sofrer uma suspensão temporária das atividades de tratamento de dados por no máximo 6 meses, prorrogável por mais 6 meses.&lt;/p&gt;

&lt;h3&gt;
  
  
  IX - Proibição parcial ou total do exercício de atividades relacionadas a tratamento de dados
&lt;/h3&gt;

&lt;p&gt;Essa é uma sanção mais severa, que pode proibir total ou parcialmente que o controlador faça o tratamento de dados.&lt;/p&gt;

</description>
      <category>lgpd</category>
      <category>security</category>
    </item>
    <item>
      <title>Padrões de Projetos - Parte I - Introdução</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:49:32 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/padroes-de-projetos-parte-i-introducao-2a5n</link>
      <guid>https://forem.com/lfrigodesouza/padroes-de-projetos-parte-i-introducao-2a5n</guid>
      <description>&lt;h1&gt;
  
  
  O que são os Padrões de Projetos?
&lt;/h1&gt;

&lt;p&gt;Padrões de Projetos (ou &lt;em&gt;Design Patterns&lt;/em&gt;) são basicamente soluções genéricas para problemas comuns observados na engenharia de software. Pense que a maioria dos problemas com que nos deparamos no mundo da computação já foram resolvidos por alguém, em algum momento. Os padrões de projetos são algumas dessas soluções que podem ser adaptadas e utilizadas para resolver alguns dos problemas dos nosso projetos.&lt;/p&gt;

&lt;p&gt;Um padrão de projeto não chega a ser um algorítmo, ele é mais uma descrição ou uma "planta de obra": ele irá te mostrar, em um alto nível, o oquê você precisa fazer. Mas o como fazer (a implementação em sí) vai depender das ferramentas que você estiver utilizando.&lt;/p&gt;

&lt;p&gt;Portanto, um padrão de projeto não é restrito a uma linguagem de programação específica. Você pode implementar o mesmo padrão em diversas linguagens, e a implementação será diferente, porém o resultado daquele padrão será o mesmo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;No caso desta série de artigos, os padrões serão exemplificados utilizando o .NET com C#, porém tenha em mente que os mesmos padrões podem ser aplicados a praticamente qualquer outra linguagem de programação orientada a objetos.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The GoF
&lt;/h1&gt;

&lt;p&gt;É difícil precisar quem foi a pessoa que "inventou" os padrões de projetos, mesmo porque eles são soluções para problemas comuns e frequêntes no mundo da programação.&lt;/p&gt;

&lt;p&gt;Porém, em 1994, quatro autores (Erich Gamma, John Vlissides, Ralph Johnson e Richard Helm) lançaram o livro (&lt;a href="https://www.amazon.com/gp/product/8573076100/"&gt;Padrões de Projeto – Soluções Reutilizáveis de Software Orientado a Objetos&lt;/a&gt;), reunindo 23 padrões de projetos e suas aplicações, e esse livro rapidamente ganhou muita popularidade.&lt;/p&gt;

&lt;p&gt;Posteriormente esse livro passou a ser conhecido como o livro da Gangue dos Quatro (&lt;em&gt;Gang of Four&lt;/em&gt; em inglês, ou simplesmente &lt;em&gt;GoF&lt;/em&gt;). E mesmo depois de quase 30 anos do seu lançamento, esses padrões de projetos permanecem como referência até hoje, e eles são extremamente importantes para quem quer produzir um código mais limpo.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tipos de Padrões
&lt;/h1&gt;

&lt;p&gt;Nós podemos categorizar os padrões de projetos pela sua intenção (ou propósito), e os padrões apresentados pelo GoF podem ser divididos em 3 tipos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Criacionais&lt;/strong&gt; - São padrões utilizados para a criação de objetos, priorizando a flexibilidade e reaproveitamento de código;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Estruturais&lt;/strong&gt; - Esses padrões ajudam na utilização de classes e objetos menores para criação de estruturas maiores;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comportamentais&lt;/strong&gt; - Utilizam de herança para definir padrões de comportamentos e comunicação entre objetos, também ajudando na separação de de responsabilidades.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nos próximos artigos tratarei de cada um dos 23 padrões de todas essas categorias, mostrando o problema que cada um deles tenta resolver, e trazendo um exemplo de código de cada um deles.&lt;br&gt;
Os exemplos serão feitos em .NET e você poderá facilmente baixá-los e executá-los para ver em mais detalhes a sua implementação.&lt;/p&gt;

&lt;h1&gt;
  
  
  Referências
&lt;/h1&gt;

&lt;p&gt;Para a criação desta série de artigos utilizei as seguintes fontes como inspiração e consulta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://refactoring.guru/design-patterns"&gt;Site Refactoring Guru - Design Patterns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com.br/dp/8576081741/"&gt;Livro Use a Cabeça!: Padrões de Projetos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/design-patterns-csharp-dotnet/"&gt;Curso Design Patterns in C# and .NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gofpatterns.com/"&gt;Site GoF Patterns&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caso queira se aprofundar mais nos padrões de projetos, recomendo fortemente todas elas!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Lista de Ferramentas - 2021</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:40:12 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/lista-de-ferramentas-2021-1o1j</link>
      <guid>https://forem.com/lfrigodesouza/lista-de-ferramentas-2021-1o1j</guid>
      <description>&lt;p&gt;Inspirado por &lt;a href="https://www.hanselman.com/blog/scott-hanselmans-2021-ultimate-developer-and-power-users-tool-list-for-windows"&gt;este artigo do Scott Hanselman&lt;/a&gt;, decidi fazer a minha própria lista de ferramentas recomendadas e utilitários que eu utilizo no dia-a-dia. São ferramentas principalmente para desenvolvedores e "usuários avançados", mas se você não for nem um nem outro, ainda é possível que algumas dessas ferramentas sejam úteis para você.&lt;br&gt;
E o melhor, tirando algumas poucas exceções, praticamente todas essas ferramentas são gratuitas para uso!&lt;/p&gt;

&lt;h1&gt;
  
  
  Extensões para VisualStudio
&lt;/h1&gt;

&lt;p&gt;Essas são algumas extensões que utilizo no VisualStudio 2019, principalmente para uso com C# e .NET&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=MadsKristensen.Tweaks"&gt;Tweaks&lt;/a&gt; - Uma coleção de pequenas ferramentas e utilitários para o VS, como reabrir arquivo fechado, modo de apresentação do editor, exibição de estatísticas de compilação, etc.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=MadsKristensen.AddNewFile"&gt;Add New File&lt;/a&gt; - Uma extensão simples para auxiliar na criação de novos arquivos. Com o atalho &lt;code&gt;shift + F2&lt;/code&gt; você pode criar diretórios, arquivos com ou sem extensões, e até múltiplos arquivos de uma vez.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.jetbrains.com/resharper/"&gt;ReSharper&lt;/a&gt; - O ReSharper é uma ferramenta completa, que melhora em muito a produtividade no desenvolvimento. Ele traz diversos atalhos, analise de código, facilitadores de refatoração, etc. Um ponto negativo é que ela não é gratuita, então para utilizar você deve comprar uma licença. Porém se você trabalha diariamente escrevendo bastante código, pode valer a pena o valor.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=NikolayBalakin.Outputenhancer"&gt;Output enhancer&lt;/a&gt; - Mais uma extensão simples que adiciona algumas cores nas mensagens exibidas na janela de &lt;code&gt;output&lt;/code&gt; do VisualStudio, que facilita a visualização de algumas coisas como mensagens de erro ou de alerta.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=MadsKristensen.FileIcons"&gt;File Icons&lt;/a&gt; - No explorador de solução, adiciona alguns ícones para extensões de arquivos que o VS não possui por padrão, como arquivos &lt;code&gt;.fs&lt;/code&gt;, &lt;code&gt;.py&lt;/code&gt;, &lt;code&gt;.yaml&lt;/code&gt;, &lt;code&gt;.gitignore&lt;/code&gt;, entre outros.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=JaredParMSFT.VsVim"&gt;VsVim&lt;/a&gt; - Pra quem gosta do mecanismo de navegação do editor Vim, essa extensão traz essa experiência para dentro do VS, com um bom suporte para as configurações de atalhos que o Vim possui.

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=BrianSchmitt.RelativeNumber"&gt;Relative Number&lt;/a&gt; - A numeração de linha relativa ajuda bastante na navegação quando se está utilizando o Vim, e se você for utilizar o VSVim essa extensão é praticamente obrigatório se de utilizar também.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=jsturtevant.AceJump"&gt;AceJump&lt;/a&gt; - Extensão de navegação dentro do código. Para quem gosta de utilizar pouco o mouse durante o desenvolvimento, essa extensão ajuda na movimentação do cursor dentro do código. Funciona muito bem em conjunto com o VSVim.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Extensões para VSCode
&lt;/h1&gt;

&lt;p&gt;Extensões que sempre instalo no meu ambiente do VisualStudio Code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker"&gt;Code Spell Checker&lt;/a&gt; - Um corretor ortográfico para o VSCode. Uso mais quando estou utilizando o VSCode para escrever meus artigos do que quando estou programando propriamente dito.

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker-portuguese-brazilian"&gt;Brazilian Portuguese - Code Spell Checker&lt;/a&gt; - Dicionário de palavras em Português para utilização com o corretor ortográfico Code Spell Checker.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2"&gt;Bracket Pair Colorizer 2&lt;/a&gt; - Extensão que deixa os pares de parêntesis, chaves e colchetes com a mesma cor, ajudando na leitura do código, principalmente em linguagens de programação como Dart e JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=adpyke.codesnap"&gt;CodeSnap&lt;/a&gt; - Uma extensão interessante que permite gerar uma imagem a partir de um trecho de código. Possui diversas configurações de tema do código na imagem gerada, estilo da janela, etc.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight"&gt;Color Highlight&lt;/a&gt; - Sempre que você adiciona uma cor no seu código (seja no formato &lt;code&gt;rgb&lt;/code&gt; ou &lt;code&gt;hex&lt;/code&gt;) essa extensão mostra qual é aquela cor.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens"&gt;Error Lens&lt;/a&gt; - Essa é uma extensão que eu sinto muita falta quando não instalo. Ela pega os erros do seu código que apareceriam apenas na janela de output do VSCode e mostra direto ao final da linha onde o erro se encontra, dando bastante agilidade ao desenvolvimento.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=vscodevim.vim"&gt;Vim&lt;/a&gt; - Da mesma forma que gosto de utilizar o emulador de Vim no VisualStudio, esse é o melhor emulador de Vim que encontrei até o momento para o VSCode, e sempre tem se atualizado trazendo novas funcionalidades.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Personalização
&lt;/h2&gt;

&lt;p&gt;Estes são os temas e pacotes de ícones que mais utilizo no VSCode&lt;/p&gt;

&lt;h3&gt;
  
  
  Temas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=uloco.theme-bluloco-light"&gt;Bluloco Light Theme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=tinkertrain.theme-panda"&gt;Panda Theme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=dracula-theme.theme-dracula"&gt;Dracula Official&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=teabyii.ayu"&gt;Ayu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pacote de ícones
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme"&gt;Material Icon Theme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons"&gt;vscode-icons&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Programas para Desktop
&lt;/h1&gt;

&lt;p&gt;Esses são programas que sempre instalo quando pego um novo computador para trabalhar. A maioria é exclusiva para Windows, mas também existem algumas multiplataformas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Windows
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/microsoft/PowerToys#installing-and-running-microsoft-powertoys"&gt;PowerToys&lt;/a&gt; - Pensa em uma ferramenta que deveria ser nativa no Windows. Essa é a PowerToys. Ela traz diversas funcionalidades para o seu desktop Windows, como descobridor de cor, ferramenta de busca global, zonas para organização de janelas e muito mais!&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.microsoft.com/store/productId/9N0DX20HK701"&gt;Windows Terminal&lt;/a&gt; - Já escrevi &lt;a href="https://dev.to/2021/01/19/Ja-experimentou-o-Windows-Terminal/"&gt;este artigo&lt;/a&gt; falando sobre o Windows Terminal. É uma boa ferramenta para utilizar com os terminais e shells, e tem evoluído bastante.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/pt-br/windows/wsl/about"&gt;WSL&lt;/a&gt; - O Subsistema do Windows para Linux permite que você execute um ambiente Linux dentro do seu Windows, e possibilita a execução de comandos e ferramentas nativas do Linux no Windows. É incrível o que a Microsoft está fazendo com essa ferramenta e vale a pena fazer a instalação.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.getpaint.net/index.html"&gt;paint.net&lt;/a&gt; - Esse editor de imagem é uma versão aprimorada do Pain que vem por padrão no Windows. Possui várias funcionalidades para edição de imagens com uma boa performance.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.screentogif.com/"&gt;ScreenToGif&lt;/a&gt; - Uso essa ferramenta sempre que eu preciso gravar a tela e gerar algum gif para demonstrar alguma funcionalidade que estou desenvolvendo. É simples de usar e funciona bem.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.linqpad.net/"&gt;LINQPad&lt;/a&gt; - Com o LINQPad você consegue executar pequenos pedaços de código .NET para facilmente ver seu resultado sem a necessidade de depurar sua aplicação.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/sysinternals/downloads/zoomit"&gt;ZoomIt&lt;/a&gt; - Uma pequena ferramenta para ajudar em apresentações. Você pode desenhar na tela e fazer o zoom em alguma parte apenas com alguns atalhos do teclado.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ChrisAnd1998/TaskbarX#downloads"&gt;TaskbarX&lt;/a&gt; - Se você gosta de personalizar sua área de trabalho, o TaskbarX permite centralizar os ícones na barra de tarefas da sua área de trabalho, assim como deixar ela transparente e algumas outras personalizações.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Multiplataforma
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dbeaver.io/"&gt;DBeaver&lt;/a&gt; - Concentre suas conexões de banco de dados em um só lugar. Você pode conectar com bancos Oracle, SQLServer, MySQL, SQLite e vários outros bancos de dados.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Ferramentas Online
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/conwnet/github1s"&gt;github1s&lt;/a&gt; - Está consultando algum repositório do GitHub e quer dar uma olhada melhor no código fonte dele? Em vez de baixar o repositório para sua máquina, experimento o github1s. No endereço do repositório, troque &lt;code&gt;github.com&lt;/code&gt; por &lt;code&gt;github1s.com&lt;/code&gt;, aperte &lt;code&gt;Enter&lt;/code&gt; e pronto, o repositório será rapidamente carregado em uma instância online do VSCode, facilitando muito a consulta do código fonte.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.photopea.com/"&gt;Photopea&lt;/a&gt; - Provavelmente você já ouviu ou precisou usar o Photoshop, da Adobe. Mas você sabia que existe uma ferramenta online e gratuita com praticamente todas as funcionalidades do Photoshop?&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.iconfinder.com/"&gt;Iconfinder&lt;/a&gt; - Está fazendo algum projeto e precisa de algum ícone para o seu layout? Dê uma olhada no Iconfinder. Lá você encontra milhares de ícones gratis, sobre os mais diversos temas.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://jsoneditoronline.org/"&gt;JSON Editor Online&lt;/a&gt; - Sempre que preciso formatar ou alterar algum JSON eu utilizo essa ferramenta.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://regexr.com/"&gt;RegExr&lt;/a&gt; - Uma boa ferramenta para testar e construir expressões regulares. Ela traz algumas dicas também pra ajudar na escrita das regras.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.toptal.com/developers/gitignore"&gt;gitignore.io&lt;/a&gt; - Gerador de arquivos &lt;code&gt;.gitignore&lt;/code&gt;. Você pode selecionar diversas linguagens ou frameworks diferentes para criar ou incrementar seu arquivo de exclusão do GIT.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pt.fakenamegenerator.com/"&gt;Fake Name Generator&lt;/a&gt; - Quando a minha criatividade acaba eu apelo para esse site para gerar informações falsas de usuários para montar massa de testes ou ambientes de homologação. Ele gera para você nome, endereço, CEP, CPF e várias outras informações que você pode precisar em um cadastro.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://jsonutils.com/"&gt;JSON Utils&lt;/a&gt; - Recebeu um JSON e precisa gerar uma classe para ele no C#, JavaScript ou TypeScript? Essa ferramenta te ajuda a fazer isso. Adicione o JSON que você tem e deixe que ela gere as classes para você dependendo da linguagem selecionada. Depois é só importar no seu código e fazer qualquer ajuste que seja necessário.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.connectionstrings.com/"&gt;ConnectionStrings&lt;/a&gt; - Precisa conectar em um banco de dados mas esqueceu exatamente como deve ser a linha de conexão para utilizar no seu arquivo de configuração? Esse site traz exemplos de &lt;code&gt;connection strings&lt;/code&gt; para diversos bancos de dados, como OData, Oracle, DB2, MSSQL, etc.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://app.diagrams.net/"&gt;draw.io&lt;/a&gt; - Ótima ferramenta para criação de fluxogramas e diagramas e até para criação de rascunhos de telas&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Seus dados vazaram. O que fazer agora?</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:38:37 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/seus-dados-vazaram-o-que-fazer-agora-33a8</link>
      <guid>https://forem.com/lfrigodesouza/seus-dados-vazaram-o-que-fazer-agora-33a8</guid>
      <description>&lt;p&gt;Fazem algumas semanas que venho trazendo nos &lt;a href="https://dev.to/categorias/resumo-da-semana/"&gt;Resumos da Semana&lt;/a&gt; notícias sobre vazamentos de dados de brasileiros e seus desdobramentos. Primeiro foram os vazamentos dos dados de mais de &lt;a href="https://olhardigital.com.br/2021/01/20/seguranca/vazamento-de-banco-de-dados-expoe-cpf-de-quase-toda-a-populacao-do-brasil/"&gt;220 milhões de CPFs, 40 milhões de CNPJs e 100 milhões de veículos&lt;/a&gt; e agora tivemos o vazamento dos dados telefônicos de mais de &lt;a href="https://tecnoblog.net/410843/novo-vazamento-expoe-100-milhoes-de-numeros-de-celular-no-brasil/"&gt;100 milhões de clientes de operadoras de telefonia&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Com esses dados a venda pela internet, qualquer golpista que os compre pode acabar tentando aplicar golpes nas pessoas ou utilizar os dados para realizar transações fraudulentas.&lt;/p&gt;

&lt;p&gt;Para evitar que isso ocorra com você, trago algumas dicas do que você pode fazer para tentar se proteger caso tentem utilizar os seus dados.&lt;/p&gt;

&lt;h1&gt;
  
  
  Troque suas senhas
&lt;/h1&gt;

&lt;p&gt;Principalmente se você costuma utilizar a mesma senha para diversos serviços, troque-as. Dê prioridade para trocar as senhas dos seus serviços de e-mail. Desta forma você não perde acesso à sua caixa de entrada, e não vai permitir que alguém tenha acesso à ela para solicitar trocas de senha de outros serviços.&lt;/p&gt;

&lt;p&gt;Muitos sistemas também enviam notificações por e-mail de atividades que ocorram com as suas contas. Alguém com acesso ao seu e-mail pode tentar esconder essas atividades, dificultando que você perceba que algo de errado esteja acontecendo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Utilize um cofre de senha
&lt;/h2&gt;

&lt;p&gt;Concordo que é ruim precisar memorizar uma senha diferente para cada lugar que você se cadastre, mas com os cofres de senha isso deixa de ser um problema.&lt;br&gt;
Existem bons programas de armazenamento de senha e que são seguros, como o &lt;a href="https://bitwarden.com/"&gt;BitWarden&lt;/a&gt;, &lt;a href="https://www.enpass.io/"&gt;Enpass&lt;/a&gt;, &lt;a href="https://lastpass.com/?lang=pt-br"&gt;LastPass&lt;/a&gt; e agora até o &lt;a href="https://www.microsoft.com/pt-br/account/authenticator"&gt;Microsoft Authenticator&lt;/a&gt; oferece armazenamento de senhas.&lt;/p&gt;

&lt;p&gt;Pode ser um pouco chato ter de consultar o cofre de senha toda vez que precisar acessar algum lugar, mas a segurança que isso traz vale a pena, já que você pode ter senhas mais complexas pois não há a necessidade de memorizar, e se por um acaso um sistema deixar sua senha vazar, não será possível acessar nenhum outro local com ela.&lt;/p&gt;

&lt;p&gt;Caso não queira utilizar o cofre de senha para todos as suas contas, utilize pelo menos para seus provedores de e-mail e aplicativos de banco/pagamentos.&lt;/p&gt;

&lt;h1&gt;
  
  
  Ative a autenticação em dois fatores
&lt;/h1&gt;

&lt;p&gt;Quase todos os sites e sistemas permitem a ativação de algum tipo de fator de autenticação adicional, e a autenticação em dois fatores nada mais é do que a adição de uma camada de segurança nos seus acessos. Caso alguém consiga descobrir a sua senha, para fazer um login, ainda seria necessário informar um código adicional que geralmente ou é enviado por mensagem de texto para o seu celular, ou é gerado em aplicativos como o Google Authenticator (disponível para &lt;a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&amp;amp;hl=pt_BR&amp;amp;gl=US"&gt;Android&lt;/a&gt; e &lt;a href="https://apps.apple.com/us/app/google-authenticator/id388497605"&gt;iOS&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Habilite a autenticação em dois fatores no maior número possível de locais, como redes sociais, aplicativos de pagamento, contas de e-mail, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Faça isso também nos aplicativos de mensagem
&lt;/h2&gt;

&lt;p&gt;Tanto o &lt;a href="https://faq.whatsapp.com/general/verification/about-two-step-verification/?lang=pt_br"&gt;WhatsApp&lt;/a&gt; como o &lt;a href="https://telegram.org/faq#p-como-funciona-a-verificacao-em-duas-etapas"&gt;Telegram&lt;/a&gt; permitem o cadastro de uma senha extra para servir de segundo fator de autenticação.&lt;br&gt;
Desta forma, você também estará protegido caso tentam clonar seu número telefônico para ganhar acesso à sua conta e aplicar golpes nos seus contatos se passando por você.&lt;/p&gt;

&lt;h2&gt;
  
  
  Não compartilhe esses códigos com ninguém
&lt;/h2&gt;

&lt;p&gt;Mesmo que a sua conta esteja protegida com a autenticação em dois fatores, alguns golpistas ainda tentam acessá-la de alguma forma, e para isso eles tentam te enganar para que você forneça para eles o código que eles não tem acesso.&lt;/p&gt;

&lt;p&gt;Portanto, caso alguém entre em contato informando que te enviou algum código por mensagem ou por e-mail, ou pedindo que você forneça um código gerado por aplicativo, desconfie!&lt;br&gt;
Esses códigos são para uso único e exclusivo seu apenas para realizar o acesso nas plataformas. Se alguém entrou em contato pedindo algum deles para você, provavelmente estão tentando acessar a sua conta. Não os ajude!&lt;/p&gt;

&lt;h1&gt;
  
  
  Verifique se utilizaram seus dados
&lt;/h1&gt;

&lt;p&gt;O Banco Central do Brasil possui um sistema onde é possível consultar todas as chaves Pix vinculadas ao seu nome, assim como existência de empréstimos, financiamentos ou contas bancárias.&lt;br&gt;
Esse sistema é o &lt;a href="https://www.bcb.gov.br/cidadaniafinanceira/registrato"&gt;Registrato&lt;/a&gt;. Faça seu cadastro e nele você pode consultar todas as informações sobre seu relacionamento com as mais diversas instituições financeiras.&lt;/p&gt;

&lt;p&gt;Caso veja algo ali que você não reconheça, entre em contato com a instituição para conseguir mais informações.&lt;/p&gt;

&lt;h1&gt;
  
  
  Cadastre-se no sistema do FGTS
&lt;/h1&gt;

&lt;p&gt;Se você trabalha ou já teve um emprego com carteira assinada (no regime CLT) então você muito provavelmente tem pelo menos uma conta na Caixa Econômica Federal em seu nome, onde fica guardado o seu Fundo de Garantia.&lt;br&gt;
Com alguns dos dados que foram vazados, golpistas estão se cadastrando no aplicativo do FGTS para realizar saques sem que você, titular da conta, fique sabendo.&lt;/p&gt;

&lt;p&gt;Portanto, mesmo que você não tenha interesse em resgatar seu saldo FGTS agora, faça seu cadastro no &lt;a href="https://www.caixa.gov.br/atendimento/aplicativos/fgts/Paginas/default.aspx"&gt;Aplicativo FGTS&lt;/a&gt; para garantir que ninguém fará isso por você.&lt;/p&gt;

&lt;h1&gt;
  
  
  Cuidado com cobranças e contatos que você recebe
&lt;/h1&gt;

&lt;p&gt;Com os seus dados em mãos, algum fraudador pode tentar de todas as formas legitimar qualquer contato que fizer com você, pedindo confirmação de todo tipo de dado possível.&lt;br&gt;
Desconfie de qualquer contato inesperado pedindo confirmação dos seus dados. Se você receber um contato desses, desligue e ligue você mesmo para a central de atendimento da empresa para esclarecer se o contato é legítimo.&lt;br&gt;
Nos casos em que é você quem liga para a empresa não tem problema fazer a confirmação das informações solicitadas, já que você sabe exatamente para onde está ligando.&lt;/p&gt;

&lt;p&gt;Portanto, também sempre obtenha os telefones nos aplicativos e sites oficiais das empresas, e nunca ligue direto em um telefone fornecido a você nessas ligações estranhas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cuidado extra com boletos por e-mail
&lt;/h2&gt;

&lt;p&gt;Com um pouco de conhecimento de programação e com os seus dados, é possível criar um boleto muito difícil de distinguir se é verdadeiro ou não.&lt;/p&gt;

&lt;p&gt;Dê preferência em gerar os boletos de cobrança direto nos sites e aplicativos oficiais das empresas.&lt;/p&gt;

&lt;p&gt;Sempre que chegar uma cobrança que você não esteja esperando, entre em contato com a empresa para confirmar a veracidade.&lt;/p&gt;

&lt;p&gt;Ah, e isso não vale só para boletos recebidos por e-mail não. Boletos que chegam pelos Correios também podem ser fraudes!&lt;/p&gt;

&lt;h2&gt;
  
  
  Duvide de e-mails solicitando atualização de dados
&lt;/h2&gt;

&lt;p&gt;Muitos golpistas geram e-mails (e até mesmo páginas inteiras) querendo se passar principalmente por bancos, e pedem que você confirme todo o tipo de dados pessoais, incluindo senhas bancárias, números de cartões, etc.&lt;/p&gt;

&lt;p&gt;Desconfie sempre desse tipo de solicitação.&lt;br&gt;
Nunca passe seus dados bancários ou de cartões para essas solicitações que chegam por e-mail ou mensagem de texto no celular.&lt;/p&gt;

&lt;p&gt;Prefira utilizar os aplicativos dos bancos pois é mais difícil que golpistas consigam fazer alguma fraude por eles.&lt;/p&gt;

&lt;h1&gt;
  
  
  Agora é se manter em alerta
&lt;/h1&gt;

&lt;p&gt;Infelizmente, agora que os dados foram vazados, não temos muito o que fazer para evitar que eles caiam nas mãos de golpistas.&lt;br&gt;
O que precisamos ter então é cuidado redobrado. Desconfie de contatos inesperados, fique de olho nas suas faturas, troque suas senhas periodicamente e mantenha a atenção nas movimentações das suas contas (financeiras ou não).&lt;/p&gt;

</description>
      <category>security</category>
    </item>
    <item>
      <title>LGPD - Parte V - Direitos do Titular</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:35:49 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/lgpd-parte-v-direitos-do-titular-36g9</link>
      <guid>https://forem.com/lfrigodesouza/lgpd-parte-v-direitos-do-titular-36g9</guid>
      <description>&lt;p&gt;Depois de verificarmos os requisitos e princípios para o tratamento de dados, também devemos nos atentar aos direitos do titular dos dados pessoais. Sempre que uma empresa faz algum tipo de tratamento ela deve se certificar de que esses direitos sejam garantidos.&lt;/p&gt;

&lt;h3&gt;
  
  
  I - Confirmação da existência de tratamento
&lt;/h3&gt;

&lt;p&gt;Todo titular tem o direito de solicitar a confirmação por parte do controlador da existência de tratamentos ou não, e essa resposta deve ser imediata.&lt;br&gt;
Também é possível que essa confirmação seja solicitada de forma completa, que indique a origem dos dados, os critérios utilizados, finalidades do tratamento, etc. Para a confirmação completa, o controlador pode ter um prazo de até 15 dias para retornar.&lt;/p&gt;

&lt;h3&gt;
  
  
  II - Acesso aos dados
&lt;/h3&gt;

&lt;p&gt;Assim como o direito sobre a confirmação dos tratamentos, o titular tem o direito de obter uma cópia de todos os dados pessoais mantidos pelo controlador.&lt;/p&gt;

&lt;h3&gt;
  
  
  III - Correção dos dados
&lt;/h3&gt;

&lt;p&gt;A lei garante ao titular o direito de solicitar a correção de dados incompletos, inexatos ou desatualizados. Caso esses dados tenham sidos compartilhados pelo controlador, a correção também deve ser informada aos outros agentes de tratamento.&lt;/p&gt;

&lt;h3&gt;
  
  
  IV - Anonimização, bloqueio ou eliminação de dados desnecessários
&lt;/h3&gt;

&lt;p&gt;O titular tem o direito de solicitar que seus dados sejam anonimizados, bloqueados ou eliminados caso os dados se mostrem desnecessários para as finalidades apresentadas, sejam excessivos para alcançar as finalidades, as finalidades não estejam em conformidade ou não sejam justificáveis.&lt;/p&gt;

&lt;h3&gt;
  
  
  V - Portabilidade dos dados
&lt;/h3&gt;

&lt;p&gt;O titular tem o direito de solicitar a portabilidade dos dados a outro fornecedor de serviço ou produto, desde que os dados não estejam anonimizados.&lt;/p&gt;

&lt;h3&gt;
  
  
  VI - Eliminação de dados consentidos
&lt;/h3&gt;

&lt;p&gt;Em casos de tratamento de dados consentidos, é garantido ao titular o direito de, a qualquer momento, revogar o consentimento e solicitar que os dados sejam eliminados.&lt;/p&gt;

&lt;h3&gt;
  
  
  VII - Informação sobre compartilhamento dos dados
&lt;/h3&gt;

&lt;p&gt;O titular tem o direito de ser informado caso os seus dados sejam compartilhados com outras empresas ou órgão públicos pelo controlador.&lt;/p&gt;

&lt;h3&gt;
  
  
  VIII - Informação sobre consequências do não consentimento
&lt;/h3&gt;

&lt;p&gt;Para os tratamentos de dados que são feitos com base no consentimento do titular, deve ser informada a possibilidade da negação do consentimento, assim como as consequências dessa negativa.&lt;/p&gt;

&lt;h3&gt;
  
  
  IX - Revogação do consentimento
&lt;/h3&gt;

&lt;p&gt;É direito do titular poder solicitar a revogação do consentimento do tratamento de dados junto ao controlador.&lt;/p&gt;

</description>
      <category>security</category>
      <category>lgpd</category>
    </item>
    <item>
      <title>Já experimentou o Windows Terminal?</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:34:13 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/ja-experimentou-o-windows-terminal-171e</link>
      <guid>https://forem.com/lfrigodesouza/ja-experimentou-o-windows-terminal-171e</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;ATUALIZAÇÃO: As versões mais novas do Windows Terminal (a partir da versão 1.7.1033.0) agora contam com uma tela de configuração facilitando e muito a personalização da aplicação. Configura a seção &lt;a href="https://dev.to/2021/01/19/Ja-experimentou-o-Windows-Terminal/#Configurando-o-Terminal"&gt;Configurando o Terminal&lt;/a&gt; para mais detalhes.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se você é um programador ou tem algum trabalho mais técnico, com certeza já precisou utilizar a linha de comando para alguma coisa, seja para instalar algum pacote do NPM, fazer um commit no GIT ou qualquer outra atividade em que nem sempre existe uma interface gráfica.&lt;/p&gt;

&lt;p&gt;No Windows, para isso você pode utilizar diretamente uma janela do PowerShell ou do Prompt de Comando, ou utilizar ferramentas de terminais como o &lt;a href="https://conemu.github.io/"&gt;ConEmu&lt;/a&gt; ou o &lt;a href="https://cmder.net/"&gt;cmdr&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Porém, pensando em ter uma ferramenta feita especificamente para o Windows, a Microsoft investiu na criação do Windows Terminal, uma ferramenta de terminal moderna que já conta com diversas funcionalidades interessantes, e que vem sendo melhorada a cada versão.&lt;/p&gt;

&lt;p&gt;Eu utilizo o Windows Terminal desde o seu lançamento, e se você ainda não utiliza, vale a pena experimentar.&lt;br&gt;
Vou te mostrar como instalar e começar a utilizá-lo, assim como também aproveitar e mostrar algumas configurações e personalizações possíveis para ele.&lt;/p&gt;


&lt;h1&gt;
  
  
  Instalando o Windows Terminal
&lt;/h1&gt;

&lt;p&gt;A primeira coisa a se fazer é instalar o Windows Terminal. Você pode fazer isso de duas maneiras: pela loja de aplicativos da Microsoft, ou direto pela página do projeto do Windows Terminal no GitHub.&lt;/p&gt;

&lt;p&gt;Se o seu computador tiver acesso à Microsoft Store, basta procurar por "Windows Terminal" na loja ou acessar a &lt;a href="https://www.microsoft.com/store/productId/9N0DX20HK701"&gt;página da aplicação&lt;/a&gt; e selecionar a opção para fazer a instalação.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;É recomendado fazer a instalação pela Microsoft Store pois você receberá atualizações de versões automaticamente.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LUb6Szyx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/microsoft_store_install.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LUb6Szyx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/microsoft_store_install.png" alt="" width="880" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caso seu computador é corporativo e possui algum tipo de restrição para acessar a Microsoft Store ou você não consiga fazer a instalação por lá, você pode fazer o download do terminal direto pela &lt;a href="https://github.com/microsoft/terminal/tags"&gt;página do projeto no GitHub&lt;/a&gt;.&lt;br&gt;
Por exemplo, na data de criação desde artigo, a versão mais recente disponível é a &lt;a href="https://github.com/microsoft/terminal/releases/tag/v1.4.3243.0"&gt;v1.4.3243.0&lt;/a&gt;. Em cada página de versão, além das novas funcionalidades e alterações da aplicação, ao final da página estão disponíveis os instaladores. Baixe o instalador e execute-o para instalar o Windows Terminal no seu computador.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5dMBewtR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/github_install.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5dMBewtR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/github_install.png" alt="" width="880" height="178"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Funcionalidades
&lt;/h1&gt;

&lt;p&gt;Após a instalação, busque pelo Windows Terminal no menu Iniciar do seu Windows, e execute a aplicação.&lt;br&gt;
Automaticamente o Windows Terminal irá verificar quais ferramentas de linha de comando e shells estejam instaladas no computador, e irá deixá-las disponíveis no menu dinamicamente.&lt;br&gt;
Por exemplo, eu possuo a versão &lt;a href="https://github.com/powershell/powershell"&gt;core do PowerShell&lt;/a&gt; instalada, assim como o Ubuntu do &lt;a href="https://docs.microsoft.com/pt-br/windows/wsl/about"&gt;Windows Subsystem for Linux (WSL)&lt;/a&gt;, e automaticamente elas ficam disponíveis para mim.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CVCWDt2Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/lista_de_perfis.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CVCWDt2Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/lista_de_perfis.png" alt="" width="880" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você pode abrir múltiplas abas de um mesmo terminal, ou abas de terminais diferentes.&lt;br&gt;
Utilizando o comando &lt;code&gt;ctrl + shift + p&lt;/code&gt; será exibida uma caixa de comando com uma lista de comandos que você pode escolher para interagir com os terminais e com a aplicação, como deixar em modo de tela cheia, dividir uma aba com múltiplos terminais, aumentar tamanho da fonte, deixar o Windows Terminal sempre no topo de outras janelas, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hWhWWDHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/caixa_de_comandos.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hWhWWDHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/caixa_de_comandos.png" alt="" width="880" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essa lista de comandos também mostra os atalhos do teclado para diversos desses comandos. Eu particularmente gosto sempre de decorar os atalhos para agilizar os comandos que eu mais utilizo, e o Windows Terminal também permite que você configure atalhos personalizados (já irei mostrar como).&lt;/p&gt;
&lt;h1&gt;
  
  
  Configurando o Terminal
&lt;/h1&gt;

&lt;p&gt;Assim como o Windows Terminal possui diversos comandos, ele também possui diversas opções de configurações e personalizações.&lt;br&gt;
É possível personalizar o terminal tanto pela tela de configurações quanto alterando diretamente o arquivo de configurações.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Originalmente quando escrevi este artigo, a tela de configuração ainda não estava disponível. Portanto, eu trago com detalhes as configurações focando na edição do arquivo JSON, porém todas as opções existentes no arquivo estão disponíveis também pela tela.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wLd5hiss--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/tela_configuracao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wLd5hiss--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/tela_configuracao.png" alt="" width="880" height="465"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Abrindo o arquivo de configuração
&lt;/h2&gt;

&lt;p&gt;Utilize o comando &lt;code&gt;ctrl + ,&lt;/code&gt; para abrir a tela de configurações, e então selecione a opção 'Abrir o arquivo JSON' nela para abrir diretamente o arquivo de configurações. O arquivo será aberto no seu editor de textos padrão, como o VSCode ou Notepad++.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Caso você possua o VSCode instalado, recomendo fortemente que você abra o arquivo de configuração por ele. Nele será possível utilizar a funcionalidade de auto-completar para preencher o nome de parâmetros de configuração e suas opções.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Por exemplo, esse é o arquivo de configuração do terminal criado pela versão 1.4.3243.0. Caso a versão do seu terminal seja diferente, é possível que exista algumas diferenças entre eles, porém essas configurações costumam manter a compatibilidade. Ou seja, um arquivo de configuração de uma versão anterior irá funcionar em uma versão mais nova.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"$schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://aka.ms/terminal-profiles-schema"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{574e775e-4f2a-5b96-ac1e-a2962a402336}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"copyOnSelect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"copyFormatting"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"profiles"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"list"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"guid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{61c54bbd-c2c6-5271-96e7-009a87ff44bf}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Windows PowerShell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"commandline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"powershell.exe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hidden"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"guid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{0caa0dad-35be-5f56-a8ff-afceeeaa6101}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Command Prompt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"commandline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cmd.exe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hidden"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"guid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{574e775e-4f2a-5b96-ac1e-a2962a402336}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hidden"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PowerShell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Windows.Terminal.PowershellCore"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"guid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hidden"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ubuntu-20.04"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Windows.Terminal.Wsl"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"guid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{b453ae62-4e3d-5e58-b989-0a998ec441b8}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hidden"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Azure Cloud Shell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Windows.Terminal.Azure"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"schemes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"copy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"singleLine"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+c"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"paste"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+v"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"find"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+shift+f"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"splitPane"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"split"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"splitMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"duplicate"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alt+shift+d"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Deixando o terminal com a sua cara
&lt;/h2&gt;

&lt;p&gt;Com o arquivo de configuração aberto, você pode alterar as configurações que desejar para deixar o terminal do jeito que você preferir.&lt;br&gt;
Para a maioria das configurações, basta fazer a alteração no arquivo e salvar que o terminal já irá se atualizar para utilizar as configurações mais recentes.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Caso você tenha feito alterações de configurações e depois se arrependeu, ou se alguma coisa quebrou, para restaurar as configurações padrões do terminal basta excluir o arquivo ou o seu conteúdo, fechar e abrir o Windows Terminal. Desta forma ele irá gerar automaticamente um novo arquivo de configurações com as opções padrões daquela versão.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Essas são algumas das principais configurações que você pode alterar.&lt;/p&gt;
&lt;h3&gt;
  
  
  Perfil padrão
&lt;/h3&gt;

&lt;p&gt;É possível configurar vários terminais para serem utilizados no Windows Terminal, assim como diversos perfis para um mesmo terminal. E logo no começo do arquivo existe a propriedade &lt;code&gt;defaultProfile&lt;/code&gt; em que você define o 'guid' (Identificador único universal) do perfil que você quer que seja o padrão do terminal, e que seja aberto primeiro quando você abre o Windows Terminal.&lt;/p&gt;

&lt;p&gt;Na tela de configuração essa opção fica em &lt;em&gt;Inicialização&lt;/em&gt; &amp;gt; &lt;em&gt;Perfil padrão&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Comandos personalizados
&lt;/h3&gt;

&lt;p&gt;Na propriedade &lt;code&gt;actions&lt;/code&gt; você pode definir atalhos de teclado personalizados para executar comandos no terminal. Na tela de configuração hoje é possível apenas consultar todas as ações existentes, sem a possibilidade de alterações por ela. Para isso ainda é necessário editar diretamente o arquivo.&lt;/p&gt;

&lt;p&gt;Por exemplo, por padrão, para duplicar uma guia, o comando é o &lt;code&gt;duplicateTab&lt;/code&gt; e o atalho é &lt;code&gt;ctrl + shift + d&lt;/code&gt;. Porém, eu posso alterar para qualquer outro atalho que eu desejar, apenas adicionando uma nova configuração na lista de actions, como &lt;code&gt;ctrl + shift + +&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"find"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+shift+f"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"duplicateTab"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+shift+plus"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou eu posso também definir o atalho &lt;code&gt;ctrl + t_&lt;/code&gt; para abrir uma janela de busca de abas (&lt;code&gt;tabSearch&lt;/code&gt;), um comando que por padrão não possui um atalho vinculado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"find"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+shift+f"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"duplicateTab"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+shift+plus"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tabSearch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+t"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;São diversas possibilidades de configurações, e você pode deixar o terminal com os comandos e atalhos que você já utiliza normalmente em outras ferramentas, para facilitar o seu dia-a-dia.&lt;br&gt;
Existe uma &lt;a href="https://docs.microsoft.com/pt-br/windows/terminal/customize-settings/actions"&gt;página nas documentações do Windows Terminal&lt;/a&gt; que lista todas ações que podem ser configuradas.&lt;/p&gt;
&lt;h3&gt;
  
  
  Criando um novo perfil
&lt;/h3&gt;

&lt;p&gt;A grande vantagem do Windows Terminal é a possibilidade de criação de diversos perfis para um mesmo terminal ou para terminais diferentes, o que possibilidade centralizar em uma só aplicação todos os terminais ou shells que você utilize.&lt;/p&gt;

&lt;p&gt;Para criar um novo perfil, você precisa adicionar um novo registro na propriedade &lt;code&gt;profiles&lt;/code&gt; &amp;gt; &lt;code&gt;list&lt;/code&gt;.&lt;br&gt;
Cada item da lista é um perfil que fica disponível no terminal.&lt;/p&gt;

&lt;p&gt;Pela tela de configuração, existe a opção &lt;em&gt;Adicionar novo&lt;/em&gt; que gera um novo perfil automaticamente, incluindo um novo GUID.&lt;/p&gt;

&lt;p&gt;Um perfil que eu gosto sempre de adicionar é o perfil do Git Bash. Caso você utilize o Git para controle de código fontes, você já deve ter aberto o Git Bash para executar algum comando, e é possível deixá-lo acessível através do Windows Terminal.&lt;/p&gt;

&lt;p&gt;Para isso, você pode adicionar o seguinte perfil junto dos outros na lista de perfis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"guid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{2c551079-2bd2-4a4a-bba4-9c50f21361aa}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Git Bash"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"commandline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hidden"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Primeiro de tudo, você precisa gerar um GUID para o seu perfil. Esse é um identificador único que servirá para diferenciar os perfis, e é ele que você utiliza para definir o perfil padrão. Para gerar um guid você pode utilizar uma ferramenta online como o &lt;a href="https://www.guidgenerator.com/online-guid-generator.aspx"&gt;Online GUID / UUID Generator&lt;/a&gt;.&lt;br&gt;
Não importa o valor que seja gerado, desde que ele tenha o mesmo formato dos GUIDs dos outros perfis, e seja único entre eles.&lt;/p&gt;

&lt;p&gt;Depois você define um nome para o perfil, que é o que será exibido no menu. No caso, defini como 'Git Bash'.&lt;/p&gt;

&lt;p&gt;Também é possível ocultar do menu um perfil através da propriedade &lt;code&gt;hidden&lt;/code&gt;, colocando &lt;code&gt;false&lt;/code&gt; caso o perfil deva ser exibido, ou &lt;code&gt;true&lt;/code&gt; caso ele deva fica oculto. Assim é possível remover um perfil sem necessariamente excluí-lo do arquivo de configuração, facilitando posteriormente caso você deseje utilizá-lo novamente.&lt;/p&gt;

&lt;p&gt;E por fim, a última configuração necessária é a &lt;code&gt;commandline&lt;/code&gt;, e ela pode ser a mais complexa de se configurar, pois será necessário definir o comando que será executado pelo Windows Terminal ao iniciar aquele perfil.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l4fG8004--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/git_bash.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l4fG8004--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/git_bash.png" alt="" width="880" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por exemplo, para o Git, o comando a ser utilizado é um simples &lt;code&gt;sh&lt;/code&gt;, porém antes disso é necessário adicionar a pasta de binários de instalação do git contento o sh.exe no PATH do Windows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XV8NQ6hJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/git_bash_variaveis_de_ambiente.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XV8NQ6hJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/git_bash_variaveis_de_ambiente.png" alt="" width="610" height="578"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Configurações visuais
&lt;/h3&gt;

&lt;p&gt;Também é possível fazer algumas configurações visuais no seu terminal, como alterar o ícone de um perfil no menu, ou adicionar uma imagem de plano de fundo do terminal (é possível até colocar um gif se você quiser). As propriedades para essas configurações são a &lt;code&gt;icon&lt;/code&gt; e &lt;code&gt;backgroundImage&lt;/code&gt;. Nelas você deve definir o caminho para as imagens que deseja utilizar. &lt;em&gt;Se atente para utilizar a barra invertida no caminho dos arquivos, ou utilizar duas barras em vez de apenas uma.&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Na tela de configurações, as configurações visuais ficam na aba &lt;em&gt;Aparência&lt;/em&gt; dentro de cada perfil.&lt;/p&gt;

&lt;p&gt;Você também pode definir um esquema de cores para o seu perfil. Por padrão já existem alguns esquemas de cores pré-definidos, mas posteriormente vou mostrar como criar novos esquemas. O esquema de cor fica definido na opção &lt;code&gt;colorScheme&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"guid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{2c551079-2bd2-4a4a-bba4-9c50f21361aa}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Git Bash"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"commandline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:/Repos/WindowsTerminal/git-for-windows.ico"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"backgroundImage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Repos&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;WindowsTerminal&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;green_blue_bg.jfif"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"colorScheme"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Vintage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hidden"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nGSl4TOF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/git_bash_personalizado.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nGSl4TOF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/git_bash_personalizado.png" alt="" width="880" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Existem outras configurações visuais, como aplicar transparência na janela, trocar o tipo e tamanho da fonte, etc.&lt;br&gt;
Todas as configurações disponíveis estão na &lt;a href="https://docs.microsoft.com/pt-br/windows/terminal/customize-settings/profile-settings"&gt;página de documentação do Windows Terminal&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Criando um esquema de cores
&lt;/h3&gt;

&lt;p&gt;Para criar um esquema de cores, você deve adicionar um registro com as cores na propriedade &lt;code&gt;schemes&lt;/code&gt;.&lt;br&gt;
Você deve definir todas as cores que o terminal irá utilizar, como cor da fonte, cor de fundo, cor do cursor, etc.&lt;br&gt;
Por padrão, já existem os seguintes esquemas de cores que você pode experimentar nos perfis para ver como o seu terminal fica:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Campbell&lt;/li&gt;
&lt;li&gt;Campbell Powershell&lt;/li&gt;
&lt;li&gt;Vintage&lt;/li&gt;
&lt;li&gt;One Half Dark&lt;/li&gt;
&lt;li&gt;One Half Light&lt;/li&gt;
&lt;li&gt;Solarized Dark&lt;/li&gt;
&lt;li&gt;Solarized Light&lt;/li&gt;
&lt;li&gt;Tango Dark&lt;/li&gt;
&lt;li&gt;Tango Light&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Na tela de configuração, existe a opção &lt;em&gt;Esquema de cores&lt;/em&gt; que traz todos os esquemas facilitando a sua edição.&lt;br&gt;
Porém, para inclusão de um tema que seja copiado de outro lugar, ainda é mais fácil fazer pelo arquivo JSON.&lt;/p&gt;

&lt;p&gt;Para te ajudar na criação de um esquema de cores personalizado, você pode utilizar o site &lt;a href="https://terminalsplash.com/"&gt;TerminalSplash&lt;/a&gt;. Escolha um tema, clique em "code" que será exibido para você as configurações do esquema. Basta copiar e colocar como um novo item dentro da propriedade &lt;code&gt;schemes&lt;/code&gt;, depois voltar no seu perfil e definir a propriedade &lt;code&gt;colorScheme&lt;/code&gt; com o nome do esquema criado (o nome está na propriedade &lt;code&gt;name&lt;/code&gt; do esquema).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;"schemes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Aurelia"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"background"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#1a1a1a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"black"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#000000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"blue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#579BD5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"brightBlack"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#797979"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"brightBlue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#9CDCFE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"brightCyan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#2BC4E2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"brightGreen"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#1AD69C"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"brightPurple"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#975EAB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"brightRed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#EB2A88"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"brightWhite"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#EAEAEA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"brightYellow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#e9ad95"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cyan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#00B6D6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"foreground"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#EA549F"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#4EC9B0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"purple"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#714896"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"red"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#E92888"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"white"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#EAEAEA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"yellow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#CE9178"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você também pode alterar os valores das cores como achar melhor, sempre colocando o valor da cor em base hexadecimal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Definindo configurações padrões para os perfis
&lt;/h3&gt;

&lt;p&gt;E por fim, para facilitar as configurações, é possível definir configurações padrões para todos os perfis. Assim, por exemplo, você pode configurar um esquema de cores, ou estilo/tamanho de fonte que serão utilizados em todos os perfis que você criar.&lt;/p&gt;

&lt;p&gt;De estilo de fonte eu gosto de utilizar alguma das &lt;a href="https://www.nerdfonts.com/"&gt;NerdFonts&lt;/a&gt;, pois elas possuem diversos caracteres não convencionais que deixam os textos exibidos do terminal com um visual melhor Existem NerdFonts em diversos estilos, e particularmente eu gosto da &lt;a href="https://www.programmingfonts.org/#cascadia-code"&gt;Caskaydia Cove Nerd Font&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As configurações padrão são definidas na propriedade &lt;code&gt;profiles&lt;/code&gt; &amp;gt; &lt;code&gt;defaults&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"fontFace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CaskaydiaCove Nerd Font"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"fontSize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cursorShape"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"filledBox"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Também é possível definir configurações padrões para a cor e tipo do cursor, configurações de teclado, rolagem das páginas, etc.&lt;/p&gt;

&lt;p&gt;Lembrando que uma configuração definida aqui valerá para todos os perfis, mas uma configuração específica de um perfil irá sobrescrever o que tiver sido defino como padrão.&lt;br&gt;
Por exemplo, posso definir o tamanho da fonte como "10" como padrão para todos os meus perfis, mas em um perfil em específico posso deixar o tamanho como "12".&lt;/p&gt;

&lt;h1&gt;
  
  
  Bora deixar o terminal do seu jeito!
&lt;/h1&gt;

&lt;p&gt;Com esse monte de configurações que eu passei com certeza já dá pra gastar um tempo configurando e deixando o terminal da melhor forma para o seu uso.&lt;/p&gt;

&lt;p&gt;Lembrando que apresentei aqui apenas algumas das configurações e funcionalidades principais do Windows Terminal. Para uma lista completa, não deixe de acessar a &lt;a href="https://docs.microsoft.com/pt-br/windows/terminal/"&gt;página de documentação da aplicação&lt;/a&gt;, lá estão explicados todas essas configurações que eu mostrei e muitas outras.&lt;/p&gt;

&lt;p&gt;E caso queira uma inspiração, eu deixo meu arquivo de configuração do terminal em um &lt;a href="https://github.com/lfrigodesouza/WindowsTerminal"&gt;repositório público do GitHub&lt;/a&gt;. Você pode acessá-lo tanto para ver as configurações que utilizo, como também as imagens de fundo e ícones dos meus perfis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E61LBykS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/windows_terminal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E61LBykS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/ja-experimentou-o-windows-terminal/windows_terminal.png" alt="" width="880" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>windows</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Criando um tema escuro com JS e CSS</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:33:25 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/criando-um-tema-escuro-com-js-e-css-3cd7</link>
      <guid>https://forem.com/lfrigodesouza/criando-um-tema-escuro-com-js-e-css-3cd7</guid>
      <description>&lt;p&gt;Ultimamente tem sido comum que vários sites, principalmente os relacionados a tecnologia, que antes possuíam apenas uma tema padrão, de cores claras, e que agora tem criado a possibilidade do usuário utilizar temas de cores escuras.&lt;br&gt;
O &lt;a href="https://stackoverflow.blog/2020/03/31/building-dark-mode-on-stack-overflow/"&gt;StackOverflow&lt;/a&gt; lançou seu tema escuro no começo deste ano, e mais recentemente foi a vez do &lt;a href="https://github.blog/2020-12-08-new-from-universe-2020-dark-mode-github-sponsors-for-companies-and-more/"&gt;GitHub&lt;/a&gt; fazer o mesmo. Até a &lt;a href="https://9to5google.com/2020/12/12/google-search-dark-mode-web/"&gt;Google&lt;/a&gt; está testando um tema escuro para o seu buscador nos desktops.&lt;/p&gt;

&lt;p&gt;Se você não tem tanta familiaridade com o desenvolvimento web, pode acabar pensando que é muito complexo criar um mecanismo de temas para manter um tema claro e um escuro da mesma forma que esses sites fazem.&lt;/p&gt;

&lt;p&gt;Porém isso não é verdade! É possível criar um mecanismo de temas apenas utilizando JavaScript e CSS3 puros, sem nenhum outro framework ou ferramenta, e neste artigo eu vou mostrar como isso pode ser feito!&lt;/p&gt;


&lt;h1&gt;
  
  
  Variáveis, variáveis por todos os lados
&lt;/h1&gt;

&lt;p&gt;Para começar, primeiro você deve entender exatamente o que vamos utilizar para criar o tema.&lt;br&gt;
Primeiro, da parte de JavaScript, não temos muitos segredos, vamos apenas manipular alguns atributos para alterar o tema, e também iremos salvar a seleção do usuário no navegador, já vamos chegar nisso.&lt;/p&gt;

&lt;p&gt;A mágica toda acontece com o CSS3, utilizando de suas variáveis.&lt;br&gt;
As variáveis no CSS foram introduzidas na linguagem e podem ser usadas praticamente desde 2012, porém só a partir de 2015 que elas começaram a ser suportadas com maior abrangência pelos navegadores, e hoje praticamente só não é suportado pelo Internet Explorer (nem a Microsoft dá mais suporte para o IE...).&lt;/p&gt;
&lt;h2&gt;
  
  
  Como essas variáveis funcionam?
&lt;/h2&gt;

&lt;p&gt;Em um arquivo CSS, as variáveis funcionam com um par de chave/valor, bem parecido como as propriedades dentro da regra de um seletor.&lt;br&gt;
A diferença é que você pode definir qualquer nome para uma variável, e ela deve iniciar com dois traços.&lt;br&gt;
Depois, para utilizar de fato a variável, basta utilizar &lt;code&gt;var()&lt;/code&gt; com o nome que foi definido.&lt;br&gt;
Por exemplo, no código abaixo, é possível ver a utilização das variáveis para guardar valores de cores, tamanhos e medidas, etc. Qualquer valor que pode ser definido a uma propriedade, pode ser armazenada em uma variável, e depois elas podem ser reaproveitadas onde for necessário.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Você pode declarar as variáveis dentro de um seletor &lt;code&gt;:root&lt;/code&gt; ou &lt;code&gt;html&lt;/code&gt;, e assim elas estão disponíveis para serem utilizadas nas em todas as regras que você definir posteriormente.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--fonte-padrao&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--fonte-pequena&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--fonte-grande&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--cor-da-fonte&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#12171a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--cor-de-alerta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f10505&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.alerta&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--cor-de-alerta&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--fonte-grande&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;#botao-enviar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--cor-da-fonte&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--fonte-pequena&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mesmo sem levar em consideração a questão da criação de temas, o uso de variáveis no seu CSS já pode ser de grande valor. Centralizar em apenas um local os valores de cores e medidas diversas utilizadas deixa o código muito mais organizado e facilita a manutenção.&lt;/p&gt;

&lt;p&gt;Agora que você já sabe o que são e como as variáveis do CSS podem ser utilizadas, vamos à criação dos nossos temas!&lt;/p&gt;

&lt;h1&gt;
  
  
  Come To The Dark Side
&lt;/h1&gt;

&lt;p&gt;Para criação do nosso tema, vamos considerar que temos um site simples, composto de um &lt;code&gt;index.html&lt;/code&gt; para a página, um &lt;code&gt;main.js&lt;/code&gt; para o código JavaScript, e um &lt;code&gt;style.css&lt;/code&gt; para definir o estilo dessa nossa página.&lt;/p&gt;

&lt;p&gt;Por exemplo, vamos imaginar que tenhamos essas regras no nosso &lt;code&gt;style.css&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f5f5f5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"Roboto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#000000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0000ee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.header-title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#333333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.header-subtitle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#969696&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.page-header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e3e3e3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-around&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A primeira coisa que devemos fazer é pegar cada uma dessas cores que estão definidas entre as diversas regras do arquivo, transformar em variáveis, e adicionar em uma regra genérica para todo a tag &lt;code&gt;html&lt;/code&gt; da página.&lt;br&gt;
&lt;em&gt;Lembrando que você também pode fazer o mesmo com o valor de outras propriedades das regras, com as margens, espaçamentos, etc. Mas como o foco aqui é a criação do tema, vamos fazer isso apenas com as cores&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f5f5f5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e3e3e3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-title-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#333333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-subtitle-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#969696&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--link-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0000ee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--text-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#000000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--background-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"Roboto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--text-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--link-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.header-title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--header-title-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.header-subtitle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--header-subtitle-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.page-header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--header-background-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-around&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Só de fazer essa alteração você já deixou seu CSS mais organizado, mantendo a página visualmente sem nenhuma alteração.&lt;/p&gt;

&lt;p&gt;Agora o que nós precisamos fazer, é criar uma segunda regra com o conjunto de cores que serão utilizados no tema oposto. No caso, essas cores são do tema claro, então precisamos criar as mesmas variáveis para quando formos utilizar o tema escuro.&lt;/p&gt;

&lt;p&gt;E para diferenciar entre os dois conjuntos de variáveis, em vez de manter as regras apenas para o seletor da tag &lt;code&gt;html&lt;/code&gt;, vamos definir também em conjunto uma propriedade &lt;code&gt;data-theme&lt;/code&gt;, que vai receber ou o valor &lt;code&gt;light&lt;/code&gt; quando for o tema claro, ou &lt;code&gt;dark&lt;/code&gt; quando for o tema escuro.&lt;br&gt;
Veremos o uso dessa propriedade mais a frente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"light"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f5f5f5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e3e3e3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-title-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#333333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-subtitle-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#969696&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--link-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0000ee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--divider-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#006064&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--text-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#000000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"dark"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#171e22&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#1c262b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-title-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#5a7788&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-subtitle-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#35454f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--link-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#7d95ff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--divider-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#006435&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--text-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#acacac&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--background-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"Roboto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--text-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--link-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.header-title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--header-title-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.header-subtitle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--header-subtitle-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.page-header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--header-background-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-around&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, no nosso arquivo HTML, precisamos definir qual tema será utilizado por padrão, adicionando a propriedade &lt;code&gt;data-theme&lt;/code&gt; para a tag &lt;code&gt;html&lt;/code&gt; da página, com o valor desejado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt; &lt;span class="na"&gt;data-theme=&lt;/span&gt;&lt;span class="s"&gt;"light"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Só com isso você já vai conseguir ver o seu site alternando entre os dois temas criados, basta alterar o valor da propriedade &lt;code&gt;data-theme&lt;/code&gt; entre &lt;code&gt;dark&lt;/code&gt; e &lt;code&gt;light&lt;/code&gt; e recarregar a página que "magicamente" as cores serão alteradas!&lt;/p&gt;

&lt;h2&gt;
  
  
  Agora é ligar os pontos
&lt;/h2&gt;

&lt;p&gt;Agora que nós temos as cores todas definidas como variáveis, e também já temos as cores do nossos dois temas, vamos precisar de um pouco de JavaScript para criar uma função que troque o valor do atributo &lt;code&gt;data-theme&lt;/code&gt; dinamicamente, permitindo que o usuário escolha o tema que achar mais agradável.&lt;/p&gt;

&lt;p&gt;Na interface do usuário, isso pode ser feito de diversas maneiras: com uma caixa de seleção que liste os temas, um checkbox de ativação do tema, um botão que alterna entre claro e escuro, etc. Mas independente da maneira que for, o que deve ser feito internamente é definir na propriedade &lt;code&gt;data-theme&lt;/code&gt; o valor para o tema desejado.&lt;/p&gt;

&lt;p&gt;Por exemplo, podemos criar uma função no JavaScript que, caso o tema atual seja o claro, ele alterne para o escuro, e vice-versa. E podemos vincular essa função no evento de clique de um botão que exista na página.&lt;/p&gt;

&lt;p&gt;Toda vez que esse botão for clicado, a função irá obter o valor atual da propriedade &lt;code&gt;data-theme&lt;/code&gt;, e irá trocar para o valor inverso, e as cores serão alteradas.&lt;br&gt;
&lt;em&gt;É importante que apenas um elemento na página possua essa propriedade &lt;code&gt;data-theme&lt;/code&gt;, que usualmente é a tag &lt;code&gt;html&lt;/code&gt; ou a &lt;code&gt;body&lt;/code&gt;&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;themeToggler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme-toggler&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;themeToggler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;targetTheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;currentTheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data-theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentTheme&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;light&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;targetTheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;targetTheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;light&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data-theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetTheme&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Refletindo o tema do navegador
&lt;/h3&gt;

&lt;p&gt;Todos os navegadores modernos, como o Chrome, Firefox e o Edge (o novo Edge, não o antigo) também possuem temas claros e escuros neles próprios, e é possível adicionar na nossa página uma função JavaScript que irá tentar obter essa configuração, e a sua página automaticamente ficará com o mesmo tema do navegador.&lt;br&gt;
Essa função pode ser executada cada vez que a página é carregada, e deve buscar pela configuração &lt;code&gt;prefers-color-scheme&lt;/code&gt; no navegador.&lt;br&gt;
Se essa configuração existir e o valor for &lt;code&gt;dark&lt;/code&gt;, definimos esse mesmo valor no nosso atributo &lt;code&gt;data-theme&lt;/code&gt;.&lt;br&gt;
Agora, se a configuração for qualquer outra, ou se por um acaso o navegador não tiver suporte para ela e ela não existir, definimos nosso tema como &lt;code&gt;light&lt;/code&gt;, que é nosso tema padrão.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;browserTheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;(prefers-color-scheme: dark)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;
  &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;light&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data-theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;browserTheme&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso você deseje manter o tema escuro como padrão, é só inverter a verificação.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;browserTheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;(prefers-color-scheme: light)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;
  &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;light&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Salvando a seleção do usuário
&lt;/h3&gt;

&lt;p&gt;Podemos também criar uma forma simples de salvar o tema selecionado pelo usuário, mantendo essa informação no &lt;code&gt;localStorage&lt;/code&gt; do navegador.&lt;br&gt;
Desta forma você pode manter entre as seções do usuário o tema de preferência dele.&lt;/p&gt;

&lt;p&gt;Para isso, na função de troca do tema, sempre que você alterar o atributo &lt;code&gt;data-theme&lt;/code&gt;, você pode também salvar o valor no&lt;code&gt;localStorage&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetTheme&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com essa informação salva, você pode fazer a chamada para uma outra função no carregamento da página para verificar se existe esse valor armazenado naquele navegador, e se existir, utilizá-lo. Caso contrário, fica definido o tema padrão.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;savedTheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;savedTheme&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data-theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;savedTheme&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É possível até juntar na lógica a verificação tanto do tema salvo pelo usuário, quanto fazer refletir o tema do navegador.&lt;/p&gt;

&lt;p&gt;Se existir um tema salvo, utiliza este. Caso contrário, tenta obter o tema configurado no navegador. Se o navegador não suportar, vai ficar definido o tema padrão.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;savedTheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;savedTheme&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data-theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;savedTheme&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;browserTheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;(prefers-color-scheme: light)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;
    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;light&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data-theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;browserTheme&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Não se limite aos temas
&lt;/h1&gt;

&lt;p&gt;Com esse mecanismo é possível criar quantos temas forem necessários, basta criar o conjunto de variáveis com os valores das cores de cada tema, e fazer as funções que atualizem o atributo &lt;code&gt;data-theme&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;E também, é claro, as variáveis no CSS são excelentes para deixar o código mais organizado e centralizar as definições em apenas em um local mesmo que você não queira criar nenhum tema, funcionando muito bem também com frameworks de SPA, como o React e o Angular por exemplo, garantindo que todos os componentes sigam os mesmos padrões.&lt;/p&gt;

&lt;p&gt;Caso deseje ver um exemplo de implementação desse mecanismo de temas, você pode consultar este repositório do GitHub: &lt;a href="https://github.com/lfrigodesouza/dark-theme-with-css"&gt;https://github.com/lfrigodesouza/dark-theme-with-css&lt;/a&gt;&lt;br&gt;
Também pode ver ele em funcionamento nesta página: &lt;a href="https://lfrigodesouza.github.io/dark-theme-with-css/"&gt;https://lfrigodesouza.github.io/dark-theme-with-css/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Escrevendo commits melhores no Git</title>
      <dc:creator>Lucas Frigo de Souza</dc:creator>
      <pubDate>Mon, 04 Jul 2022 17:30:38 +0000</pubDate>
      <link>https://forem.com/lfrigodesouza/escrevendo-commits-melhores-no-git-2252</link>
      <guid>https://forem.com/lfrigodesouza/escrevendo-commits-melhores-no-git-2252</guid>
      <description>&lt;h2&gt;
  
  
  Porque é importante escrever bons commits?
&lt;/h2&gt;

&lt;p&gt;Imagine que você está trabalhando em um projeto, e por algum motivo você precisa consultar o histórico de commits dele, seja pela linha de comando (com &lt;code&gt;git log --oneline&lt;/code&gt;), seja por uma interface gráfica, e você se depara com um histórico assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;e899f75 Recriando os arquivos Customer.cs, Order.cs, Product.cs e remove arquivos ProductOrders.cs e CustomerOrders.cs
80c9793 melhorias
efc6286 bug fix
ddc6f44 Faz uma correção no tipo da nota fiscal quando o cliente faz o cancelamento de um pedido após o pagamento já ter sido processado. Foi necessário incluir um novo tipo de nota fiscal no nf.enum e também mudar a forma de processamento do cancelamento com o parceiro de crédito.
cfb3a27 implementa teste
eb2c62e Move a classe EnumExtension para outro arquivo, juntando com outras classes de extensão de enumeradores
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, imagine se em vez do histórico acima, você encontrasse algo assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;e899f75 Refatora entidades do fluxo de pedidos
80c9793 Muda configuração para novo servidor de BD
efc6286 Corrige falha no processo de checkout
ddc6f44 Corrige processamento de NF cancelada
cfb3a27 Implementa testes de integração com parceiro
eb2c62e Refatora classes de extensão dos Enumeradores
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Qual dos dois históricos traz mais claramente e resumidamente as informações do que foi alterado?&lt;/p&gt;

&lt;p&gt;No primeiro, não temos padrão nenhum. Hora tem informações de mais, hora de menos. Em vários casos vamos precisar consultar os detalhes do commit para se ter uma ideia do que pode ter sido alterado.&lt;/p&gt;

&lt;p&gt;Já no segundo histórico, todas as mensagens seguem o mesmo padrão, expressando em poucas palavras o que foi alterado.&lt;/p&gt;

&lt;p&gt;Por exemplo, imagine que seu projeto começou a apresentar problemas para conectar no banco de dados. Em qual dos dois históricos fica mais fácil identificar onde provavelmente o problema foi introduzido no código?&lt;/p&gt;

&lt;p&gt;Isso é importante tanto para nosso entendimento (&lt;em&gt;"Quando que eu alterei aquela funcionalidade, mesmo?"&lt;/em&gt;), quanto para que outras pessoas se encontrem facilmente em um projeto.&lt;br&gt;
E geralmente as pessoas não dão muito valor a ter um bom histórico de commits até que algo aconteça e elas precisem consultar o histórico de um repositório, e aí já é muito tarde, o histórico já é uma bagunça.&lt;/p&gt;

&lt;p&gt;A qualidade do histórico de um projeto no git deve ser de responsabilidade de todo o time, pois qualquer um está sujeito a precisar consultá-lo, e essa padronização deve ser definida em comum acordo com todos.&lt;/p&gt;

&lt;p&gt;E para termos uma referência de um bom commit, podemos tomar como exemplo esse abaixo (que é utilizado como &lt;a href="https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html"&gt;exemplo&lt;/a&gt; &lt;a href="https://www.git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#_commit_guidelines"&gt;em&lt;/a&gt; &lt;a href="https://github.com/spring-projects/spring-framework/blob/30bce7/CONTRIBUTING.md#format-commit-messagesg"&gt;diversos&lt;/a&gt; &lt;a href="https://chris.beams.io/posts/git-commit/"&gt;lugares&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Descrição curta, com 50 caracteres no máximo

Se necessário, abaixo escreva uma descrição mais detalhada, tentando
quebrar a linha sempre em 72 caracteres.
Pense como se a primeira linha fosse o assunto de um email, e o
restante como o corpo. Pular uma linha separando o assunto do corpo é
crítico para que haja essa diferenciação, caso contrário, nas
ferramentas de git, tudo poderá aparecer como uma coisa só.

Tente escrever o assunto do commit sempre utilizando um verbo no
imperativo: use "Corrige a falha" e não "Corrigi a falha" ou
"Correção da falha". Pense que quem estiver lendo depois pensará
"O que esse commit faz? Ele corrige a falha!".
E também esta convenção é a mesma das mensagens geradas automaticamente
pelas ferramentas de git (como nos merges).

Coloque quantos parágrafos precisar, sempre pulando uma linha entre
eles para facilitar a leitura.

- Pode colocar tópicos também;
- Eles podem ser colocados com um hífen ou com um asterisco, e tente
  manter as frases curtas;
- É bom também manter a indentação.

No final, você também pode colocar o número do chamado, ticket ou
tarefa em que você está trabalhando.

Tarefas: #4321, #5678
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fica bem construído, não? E não é tão difícil chegar nisso. Para tal, podemos utilizar as 7 regras seguintes.&lt;/p&gt;

&lt;h3&gt;
  
  
  1- Separe o resumo e o corpo do commit com uma linha em branco
&lt;/h3&gt;

&lt;p&gt;Todo commit no git exige que uma mensagem seja fornecida. Se para explicar e resumir a alteração, uma frase basta, então você pode fazer isso passando o parâmetro &lt;code&gt;-m&lt;/code&gt; no próprio comando de commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m 'Cria teste para o repositório de produto'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por exemplo, nesse caso, se quem estiver lendo o commit quiser saber quais testes exatamente foram criados, basta utilizar alguns dos comandos do git que vão trazer mais detalhes, como &lt;code&gt;git show&lt;/code&gt;, &lt;code&gt;git diff&lt;/code&gt; ou &lt;code&gt;git log -p&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Agora, quando o commit precisar de uma explicação mais detalhada, tente sintetizar o máximo possível na frase curta do resumo, e depois coloque mais detalhes no "corpo" do commit. E quando fizer isso, deixe uma linha em branco entre a primeira frase e o restante.&lt;br&gt;
Desta forma, ao utilizar comandos como o &lt;code&gt;git log --oneline&lt;/code&gt; ou &lt;code&gt;git rebase&lt;/code&gt;, ou consultar o histórico em interfaces gráficas, automaticamente apenas a primeira frase será exibida. E caso quem estiver lendo precisar de mais informações, é possível acessar os detalhes do commit para ver o restante da explicação.&lt;br&gt;
&lt;em&gt;Nesse caso, não vai ser possível escrever a mensagem utilizando o &lt;code&gt;-m&lt;/code&gt;, você vai precisar utilizar um editor externo para o commit&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2- Limite o resumo do commit a 50 caracteres
&lt;/h3&gt;

&lt;p&gt;O limite de 50 caracteres na primeira linha de resumo não é nenhuma regra rígida, mas é uma dica muito recomendada a ser seguida. Manter a mensagem com poucos caracteres faz quem estiver escrevendo se forçar a resumir da forma mais coesa possível o que se está sendo alterado.&lt;br&gt;
Caso tudo o que você estiver alterando no commit não der para resumir em 50 caracteres, pode ser também um forte indicador de que sejam muitas alterações diferentes sendo enviadas ao mesmo tempo, e o ideal nesse caso pode ser quebrar o commit em mais de um, mantendo eles mais atômicos.&lt;/p&gt;

&lt;p&gt;O próprio Github nos faz essa recomendação quando escrevemos uma mensagem de commit muito longa.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zbT2-XuI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/escrevendo-commits-melhores-no-git/github_commit_tip_50_caracteres.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zbT2-XuI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/escrevendo-commits-melhores-no-git/github_commit_tip_50_caracteres.png" alt="" width="880" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caso, por mais que você tente, ainda seja necessário passar dos 50 caracteres no resumo, garanta que de qualquer forma a mensagem não passará dos 72 caracteres. Com mais de 72 caracteres as mensagens geralmente começam a ser cortadas ao serem exibidas pelas ferramentas, e aí a regra deixa de ser obedecida.&lt;/p&gt;
&lt;h3&gt;
  
  
  3- Deixe a primeira letra do resumo em maiúsculo
&lt;/h3&gt;

&lt;p&gt;Essa regra é tão simples quando parece. Sempre que escrever uma mensagem de commit, mantenha a primeira letra como maiúscula.&lt;br&gt;
Assim fica &lt;code&gt;Cria nova interface&lt;/code&gt; em vez de &lt;code&gt;cria nova interface&lt;/code&gt;.&lt;br&gt;
Além de manter uma padronização, fica mais fácil diferenciar a mensagem do commit nas interfaces de texto e nas interfaces gráficas.&lt;/p&gt;
&lt;h3&gt;
  
  
  4- Não termine o resumo com um ponto final
&lt;/h3&gt;

&lt;p&gt;Também uma regra bem simples. Não utilize um ponto para finalizar a frase definida como resumo. Tendo a coesão e os 50 caracteres como meta, o ponto é um desperdício.&lt;br&gt;
Fica então &lt;code&gt;Altera configuração de banco&lt;/code&gt; em vez de &lt;code&gt;Altera configuração de banco.&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;No corpo da mensagem de commit, pode utilizar o ponto sem problemas.&lt;/p&gt;
&lt;h3&gt;
  
  
  5- Use linguagem imperativa no resumo do commit
&lt;/h3&gt;

&lt;p&gt;Escreva o resumo do commit iniciando com um verbo no imperativo (como o título de cada uma dessas regras).&lt;br&gt;
Como dica, pense que você deve encaixar a mensagem de commit na seguinte frase: &lt;em&gt;"Quando aplicado, o que esse commit faz?"&lt;/em&gt;&lt;br&gt;
Por exemplo, o resumo dos commits devem se encaixar assim:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quando aplicado, o que esse commit faz? &lt;strong&gt;Corrige o teste de integração&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Quando aplicado, o que esse commit faz? &lt;strong&gt;Refatora o cadastro de cliente&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Quando aplicado, o que esse commit faz? &lt;strong&gt;Cria a tela de login&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caso contrário, escrevendo de outra forma, a frase fica sem sentido:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quando aplicado, o que esse commit faz? &lt;strong&gt;Alterei as configurações de banco&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Quando aplicado, o que esse commit faz? &lt;strong&gt;Criados os arquivos para nova integração&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  6- Quebre a linha do corpo do commit em 72 caracteres
&lt;/h3&gt;

&lt;p&gt;Quando estiver escrevendo o corpo do commit, mantenha cada linha com no máximo de 72 caracteres.&lt;br&gt;
Assim, quando a mensagem for exibida, você evita que apareçam quebras de linhas inesperadas, ou que apareçam barras de rolagem, ou que o texto seja cortado automaticamente.&lt;br&gt;
A maioria das interfaces de git vão trabalhar bem com 80 caracteres, mas o limite de 72 permite que as interfaces façam algumas indentações na hora de exibir, deixando o texto mais legível.&lt;/p&gt;

&lt;p&gt;Infelizmente, essa quebra de linha usualmente precisa ser feita manualmente nos editores de texto quando você estiver escrevendo a mensagem de commit.&lt;br&gt;
Porém, caso você utilize o Vim, o editor padrão do Git, é possível configurar para que essa quebra seja feita automaticamente (mostrarei como configurar mais abaixo).&lt;br&gt;
Em outros editores será necessário procurar se existe alguma extensão ou configuração para isso, caso contrário, realmente a quebra deverá ser feita manualmente.&lt;/p&gt;
&lt;h3&gt;
  
  
  7- Descreva no corpo do commit o porquê, não o como
&lt;/h3&gt;

&lt;p&gt;Quando você estiver escrevendo uma mensagem de commit, tenha em mente que, a pessoa que irá ler essa mensagem depois, provavelmente será uma pessoa com conhecimentos técnicos, e que terá acesso ao restante das informações do commit, incluindo o código fonte, quais arquivos foram modificados e quais foram as modificações.&lt;/p&gt;

&lt;p&gt;Então não faz sentido você escrever, nem no resumo do commit, nem no corpo, por exemplo, como você corrigiu um problema, qual arquivo que você alterou, qual variável que mudou de valor, ou qualquer outra informação que já não esteja no código fonte que foi alterado naquele commit.&lt;/p&gt;

&lt;p&gt;Em vez disso, aproveite este espaço para explicar, conceitualmente, o porquê daquela alteração, qual foi a motivação ou o contexto.&lt;br&gt;
Eu consigo ver nas alterações do commit que uma constante teve seu valor alterado, por exemplo. Agora, eu não consigo saber o que motivou essa alteração, e a mensagem do commit é um ótimo lugar para manter essa informação.&lt;/p&gt;

&lt;p&gt;Você também pode utilizar essa mensagem para explicar como aquele pedaço de código funcionava antes, e como ele irá funcionar a partir de agora, sempre focando no porquê aquela alteração foi feita, não como ela foi feita, porque o como já está descrito através das alterações de código que podem ser consultadas.&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Tente aplicar essas 7 regras já no seu próximo commit. Discuta com o seu time quais dessas regras podem ser definidas para os seus projetos. Se lembre que essas 7 regras são apenas dicas, e que cada time deve definir suas próprias padronizações.&lt;br&gt;
Se no projeto que você estiver trabalhando existir a cultura de se fazer revisão de código, inclua nessa revisão também a verificação das mensagens de commit. Não precisa barrar um commit porque o comentário dele não ficou bom, mas é sempre bom que essas regras sejam relembradas e seguidas pelo time, porque um histórico do git saudável e padronizado vai ser positivo para todos do projeto.&lt;/p&gt;

&lt;p&gt;E para aprofundar seus conhecimentos de git, recomendo o e-book &lt;a href="https://git-scm.com/book/en/v2"&gt;Pro Git&lt;/a&gt;, que é gratuito e traz diversas outras dicas e boas práticas sobre o uso de repositórios git.&lt;/p&gt;

&lt;p&gt;E claro, como para tudo nessa vida, existe uma tirinha do &lt;a href="https://xkcd.com/"&gt;xkcd&lt;/a&gt; sobre isso:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PF-MonEv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://imgs.xkcd.com/comics/git_commit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PF-MonEv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://imgs.xkcd.com/comics/git_commit.png" alt="" width="439" height="250"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Configurando o Vim para quebrar a linha automaticamente
&lt;/h3&gt;

&lt;p&gt;Caso você tenha feito a instalação padrão do git, muito provavelmente o seu editor padrão de commits é o Vim.&lt;br&gt;
Quem nunca fez um &lt;code&gt;git commit&lt;/code&gt; e não precisou pesquisar na internet como faz para sair e voltar para o terminal? E se você nunca passou por isso e não sabe como sair, pode ser &lt;code&gt;&amp;lt;ESC&amp;gt;:q!&lt;/code&gt; para sair sem salvar, ou &lt;code&gt;&amp;lt;ESC&amp;gt;:x&lt;/code&gt; para salvar e sair.&lt;/p&gt;

&lt;p&gt;Mas acredite, o Vim é muito bom editor de textos depois que você pega o jeito, e ele também permite diversas configurações e personalizações.&lt;br&gt;
No caso, vamos fazer uma configuração nele para que, quando você for escrever um commit do git, ele mostre uma guia nos 50 caracteres para você não exagerar no resumo, e que ele também limite o restante da mensagem em 72 caracteres.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Essa configuração irá funcionar não importa qual sistema operacional que você use, seja Windows, Linux ou Mac&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Primeiro, caso você ainda não tenha, é necessário criar um arquivo de configuração do Vim.&lt;br&gt;
Esse arquivo usualmente fica no diretório do seu usuário no sistema operacional, e tem o nome de &lt;code&gt;_vimrc&lt;/code&gt;.&lt;br&gt;
É possível criar esse arquivo por um terminal de linha de comandos.&lt;br&gt;
Para Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;/_vimrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para Linux ou Mac&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch&lt;/span&gt; ~/_vimrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após criar o arquivo, você deve abrí-lo em qualquer editor de texto, e adicionar as seguintes configurações:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;autocmd &lt;span class="nb"&gt;FileType&lt;/span&gt; gitcommit &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;textwidth&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;72&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;colorcolumn&lt;/span&gt;&lt;span class="p"&gt;=+&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
autocmd &lt;span class="nb"&gt;FileType&lt;/span&gt; gitcommit &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;colorcolumn&lt;/span&gt;&lt;span class="p"&gt;+=&lt;/span&gt;&lt;span class="m"&gt;51&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Salve essas configurações, e da próxima vez que você for escrever no Vim uma mensagem de commit utilizando o comando &lt;code&gt;git commit&lt;/code&gt;, será exibida uma linha vertical em 50 caracteres, para que você saiba se está passando desse limite no resumo do commit, além de também fazer a quebra de linha automaticamente em 72 caracteres, facilitando a sua vida.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ujAi-3Ew--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/escrevendo-commits-melhores-no-git/vim_configurado_para_commits.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ujAi-3Ew--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lfrigodesouzaimages.blob.core.windows.net/images/escrevendo-commits-melhores-no-git/vim_configurado_para_commits.png" alt="" width="880" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>git</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
