<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tarcísio Giroldo</title>
    <description>The latest articles on DEV Community by Tarcísio Giroldo (@girordo).</description>
    <link>https://dev.to/girordo</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%2F943118%2F3b1c3727-0645-4db4-bfcd-5ce323d88ef3.jpg</url>
      <title>DEV Community: Tarcísio Giroldo</title>
      <link>https://dev.to/girordo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/girordo"/>
    <language>en</language>
    <item>
      <title>The harsh reality of doing something difficult</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Fri, 07 Mar 2025 01:54:23 +0000</pubDate>
      <link>https://dev.to/girordo/the-harsh-reality-of-doing-something-difficult-3f46</link>
      <guid>https://dev.to/girordo/the-harsh-reality-of-doing-something-difficult-3f46</guid>
      <description>&lt;p&gt;How many times have you tried and failed?&lt;br&gt;&lt;br&gt;
How many times have you focused, only to lose it minutes later—along with the hope of getting the job, the role, the prize you wanted so bad?  &lt;/p&gt;

&lt;p&gt;I’m here to tell you something:&lt;br&gt;&lt;br&gt;
You won’t achieve it until you’ve done something difficult in your life.  &lt;/p&gt;

&lt;p&gt;Start something hard now, and when you look back, you’ll find strength in your past struggles. Proof that you can actually do it.  &lt;/p&gt;

&lt;p&gt;You’re not dumber or smarter than the rest. Most people are average.&lt;br&gt;&lt;br&gt;
If I had to put a number on it, I’d say 90%.  &lt;/p&gt;

&lt;p&gt;There’s a line in &lt;em&gt;Calculus Made Easy&lt;/em&gt; by Silvanus P. Thompson:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"What one fool can do, another can."&lt;/em&gt;  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The difference between you and them?&lt;br&gt;&lt;br&gt;
They were—or are—focused. They’re used to doing hard things.  &lt;/p&gt;

&lt;p&gt;I mean &lt;em&gt;really&lt;/em&gt; hard things.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Getting into a top university.
&lt;/li&gt;
&lt;li&gt;Finishing the damn course.
&lt;/li&gt;
&lt;li&gt;Landing a role in a big tech company.
&lt;/li&gt;
&lt;li&gt;Whatever.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here’s the truth:&lt;br&gt;&lt;br&gt;
You won’t achieve it until you start doing hard things.  &lt;/p&gt;

&lt;p&gt;Forget social media. You’re just comparing yourself.  &lt;/p&gt;

&lt;h3&gt;
  
  
  "Okay, but how do I do something difficult?"
&lt;/h3&gt;

&lt;p&gt;I’ll tell you.  &lt;/p&gt;

&lt;p&gt;I grew up Catholic. Always heard about making promises.&lt;br&gt;&lt;br&gt;
(Not like JavaScript, relax.)  &lt;/p&gt;

&lt;p&gt;But why would doing something—or &lt;em&gt;not&lt;/em&gt; doing something—make God grant me a wish?  &lt;/p&gt;

&lt;p&gt;That’s not the point.  &lt;/p&gt;

&lt;p&gt;You need to see it as &lt;em&gt;strength&lt;/em&gt;.  &lt;/p&gt;

&lt;p&gt;It’s okay if you can’t do it yet.&lt;br&gt;&lt;br&gt;
Don’t beat yourself up.&lt;br&gt;&lt;br&gt;
But be real with yourself—you don’t want it as bad as you think.  &lt;/p&gt;

&lt;p&gt;That’s the deal. Commit fully to something difficult. Then tell yourself:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I’ll reach my goal because I’m doing this hard thing."&lt;/em&gt;  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Quit alcohol for a year. Two years.
&lt;/li&gt;
&lt;li&gt;Quit smoking.
&lt;/li&gt;
&lt;li&gt;Cut out fast food, food delivery.
(Don’t wanna say DoorDash, but yeah.)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do it for a while. No cheating. If you cheat, you’ll lose focus.  &lt;/p&gt;

&lt;p&gt;It’s simple: &lt;em&gt;if you want it, you can do it.&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;But don’t set impossible timelines.&lt;br&gt;&lt;br&gt;
You won’t be a doctor in six months. That’s not how it works.  &lt;/p&gt;

&lt;p&gt;But say you want an entry-level job in the first half of next year.&lt;br&gt;&lt;br&gt;
Until then, you quit soda.  &lt;/p&gt;

&lt;p&gt;You still have to do your part.&lt;br&gt;&lt;br&gt;
This isn’t some magical bullshit.  &lt;/p&gt;

&lt;p&gt;You need to &lt;em&gt;feel&lt;/em&gt; that you’re doing something.  &lt;/p&gt;

&lt;p&gt;If it’s painful enough—&lt;em&gt;good&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
You’re probably on the right path.  &lt;/p&gt;

&lt;p&gt;Do something difficult.&lt;br&gt;&lt;br&gt;
It’ll push you through to the next goal.  &lt;/p&gt;

&lt;p&gt;Feed on that hunger for at least a year.&lt;/p&gt;

&lt;p&gt;That's it.&lt;/p&gt;




&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@jzoerb?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Jess Zoerb&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/man-and-woman-sitting-on-chair-in-front-of-table-bdYyOOGakBE?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>productivity</category>
      <category>learning</category>
    </item>
    <item>
      <title>Senioridade Tech: High Stakes, Still Debugging</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Mon, 20 Jan 2025 13:35:47 +0000</pubDate>
      <link>https://dev.to/girordo/senioridade-tech-high-stakes-still-debugging-2nag</link>
      <guid>https://dev.to/girordo/senioridade-tech-high-stakes-still-debugging-2nag</guid>
      <description>&lt;h3&gt;
  
  
  Atividades ligadas a uma senioridade elevada são intrinsecamente dependentes do tipo de empresa.
&lt;/h3&gt;

&lt;p&gt;É inegável que as demandas atreladas a profissionais sêniors variam drasticamente de acordo com o contexto empresarial.&lt;br&gt;&lt;br&gt;
Empresas como agências e software houses, por exemplo, têm necessidades bem diferentes de startups, fintechs ou grandes corporações.&lt;br&gt;&lt;br&gt;
E de forma alguma estou invalidando a experiência ou fazendo juízo de valor.&lt;br&gt;&lt;br&gt;
Essas são apenas observações das diferenças estruturais do mercado de trabalho em computação.&lt;/p&gt;

&lt;p&gt;Nas agências e software houses, raramente o trabalho exige conhecimento profundo em microsserviços, sistemas distribuídos, alta disponibilidade ou escalabilidade. Se você está em uma dessas empresas e tem contato com essas áreas, saiba que você é uma exceção. Afinal, nem todas as organizações possuem demandas que justifiquem tais soluções complexas.&lt;/p&gt;

&lt;p&gt;E com isso emerge o questionamento: o sênior de uma software house é o mesmo de uma fintech ou de uma empresa extremamente corporate?&lt;/p&gt;

&lt;h2&gt;
  
  
  Context matters
&lt;/h2&gt;

&lt;p&gt;Empresas corporativas, como grandes fintechs, trazem demandas específicas que vão além do código. Entender o impacto de regulamentações como a LGPD, termos como GMUD e saber alinhar soluções às normas legais é uma parte fundamental do trabalho. Além disso, trabalhar em sistemas distribuídos não é apenas uma questão de quebrar monólitos em diversos microsserviços. Antes de mais nada, é essencial questionar: realmente precisamos criar microsserviços?&lt;/p&gt;

&lt;p&gt;E essa é uma linha de pensamento (não estou dizendo que exclusivamente, mas majoritariamente) que se adquire com estudo formal e tempo prático.&lt;/p&gt;

&lt;p&gt;A junção primordial de ter feito uma boa universidade, com tempo de prática da profissão, permite fazer a análise crítica (gerada pelo pensamento crítico que se começa na universidade) juntamente com uma predição de possíveis problemas ao implementar aquela tecnologia.&lt;/p&gt;

&lt;p&gt;E é isso que eu vejo no pessoal mais sênior com quem lidei: antes de dar um passo em direção ao abismo, cheque se está de paraquedas.&lt;/p&gt;

&lt;p&gt;Vejo uma pancada de pessoas sempre trabalhando com atualizações e refatorações desnecessárias, sendo que o cliente sequer sabe para o que serve.&lt;/p&gt;

&lt;p&gt;É claro, uma refatoração sempre cai bem para aumentar a DX.&lt;/p&gt;

&lt;p&gt;Mas também é necessário respeitar os padrões da empresa, e cada empresa tem o seu. Ser sênior significa não se incomodar com isso, pois a comunidade da linguagem vai na direção X e, no seu trabalho, estão fazendo do jeito J.&lt;/p&gt;

&lt;p&gt;E, sim, identificar e corrigir um problema de índices mal configurados no banco de dados é &lt;em&gt;WAY FAR&lt;/em&gt; mais importante que o colaborador saber inverter uma lista binária.&lt;/p&gt;

&lt;p&gt;Colaborar e desenvolver um design system e o desenvolvimento mesmo é uma baita atividade de sênior, PORÉM ela só é possível em empresas que suportem tais padrões (ou que tenham essa demanda).&lt;/p&gt;

&lt;p&gt;Monitoramento é algo que cabe em quase todos os lugares. É claro que algumas ferramentas se adaptam melhor a certos contextos que outras, mas é completamente possível escrever um log tracing para onde você está trabalhando sem usar as soluções de prateleira.&lt;/p&gt;

&lt;h2&gt;
  
  
  Senioridade é Contextual
&lt;/h2&gt;

&lt;p&gt;A senioridade não é uma questão de ferramentas ou tecnologias específicas, mas de julgamento, experiência e adaptação ao contexto. Um profissional sênior em uma software house pode não ter experiência com escalabilidade em larga escala, mas dominará outras áreas igualmente valiosas para aquele mercado. Da mesma forma, um sênior em uma fintech provavelmente estará habituado a lidar com regulações e sistemas distribuídos, mas talvez não tenha experiência com o dinamismo de uma agência criativa.&lt;/p&gt;

&lt;p&gt;Essas diferenças enriquecem o mercado e mostram que senioridade é muito mais sobre resolver problemas reais do que sobre uma lista de habilidades ou tecnologias.&lt;/p&gt;

&lt;p&gt;Agora, se você leu até o final, me dá uma migalha de interação aqui. Fiquei enrolando para corrigir e postar este artigo. Se tiver algo a contribuir, deixa nos comentários. Sempre é bom estimular uma discussão saudável.&lt;/p&gt;

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

</description>
      <category>webdev</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>🚀 Um Guia Prático para Configurar Zsh, Oh My Zsh, asdf e Spaceship Prompt com Zinit para Seu Ambiente de Desenvolvimento</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Fri, 21 Jun 2024 19:03:22 +0000</pubDate>
      <link>https://dev.to/girordo/um-guia-pratico-para-configurar-zsh-oh-my-zsh-asdf-e-spaceship-prompt-com-zinit-para-seu-ambiente-de-desenvolvimento-13ld</link>
      <guid>https://dev.to/girordo/um-guia-pratico-para-configurar-zsh-oh-my-zsh-asdf-e-spaceship-prompt-com-zinit-para-seu-ambiente-de-desenvolvimento-13ld</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;Introdução&lt;/strong&gt; 🌟
&lt;/h3&gt;

&lt;p&gt;Melhore seu ambiente de desenvolvimento com este guia sobre como instalar e configurar o &lt;strong&gt;Zsh&lt;/strong&gt;, &lt;strong&gt;Oh My Zsh&lt;/strong&gt;, &lt;strong&gt;asdf&lt;/strong&gt; e o tema &lt;strong&gt;Spaceship Prompt&lt;/strong&gt;. Também utilizaremos o &lt;strong&gt;Zinit&lt;/strong&gt; para gerenciamento adicional de plugins. Vamos começar!&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ &lt;strong&gt;Passo 1: Instalando o Zsh&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;O &lt;strong&gt;Zsh&lt;/strong&gt; é um shell robusto que proporciona uma experiência de linha de comando poderosa. Veja como instalá-lo:&lt;/p&gt;

&lt;h4&gt;
  
  
  🐧 &lt;strong&gt;Para Linux (Ubuntu/Debian):&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;zsh
chsh &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;which zsh&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🍎 &lt;strong&gt;Para macOS:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;O Zsh já vem pré-instalado. Para configurá-lo como seu shell padrão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;chsh &lt;span class="nt"&gt;-s&lt;/span&gt; /bin/zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🪟 &lt;strong&gt;Para Windows:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Use o &lt;strong&gt;WSL (Windows Subsystem for Linux)&lt;/strong&gt; ou &lt;strong&gt;Git Bash&lt;/strong&gt;. Para WSL:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Instale uma distribuição WSL (por exemplo, Ubuntu) na Microsoft Store.&lt;/li&gt;
&lt;li&gt;Instale o Zsh como faria no Ubuntu.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Verifique a instalação&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zsh &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚙️ &lt;strong&gt;Passo 2: Configurando o Oh My Zsh&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;O &lt;strong&gt;Oh My Zsh&lt;/strong&gt; simplifica a configuração do Zsh com temas e plugins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instale o Oh My Zsh&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este script configurará o Oh My Zsh e mudará seu shell padrão para o Zsh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure o Oh My Zsh&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Abra seu arquivo &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Habilite os plugins&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;git asdf&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recarregue sua configuração&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔄 &lt;strong&gt;Passo 3: Instalando e Configurando o Zinit&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;O &lt;strong&gt;Zinit&lt;/strong&gt; é um gerenciador de plugins para Zsh, oferecendo um gerenciamento de plugins flexível e rápido.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instale o Zinit&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Adicione o trecho de instalação do Zinit ao seu &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;' &amp;gt;&amp;gt; ~/.zshrc

### Adicionado pelo instalador do Zinit
if [[ ! -f &lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="sh"&gt;/.local/share/zinit/zinit.git/zinit.zsh ]]; then
    print -P "%F{33} %F{220}Instalando %F{33}ZDHARMA-CONTINUUM%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"
    command mkdir -p "&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="sh"&gt;/.local/share/zinit" &amp;amp;&amp;amp; command chmod g-rwX "&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="sh"&gt;/.local/share/zinit"
    command git clone https://github.com/zdharma-continuum/zinit "&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="sh"&gt;/.local/share/zinit/zinit.git" &amp;amp;&amp;amp; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
        print -P "%F{33} %F{34}Instalação bem-sucedida.%f%b" || &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
        print -P "%F{160} A clonagem falhou.%f%b"
fi

source "&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="sh"&gt;/.local/share/zinit/zinit.git/zinit.zsh"
autoload -Uz _zinit
(( &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="p"&gt;+_comps&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt; )) &amp;amp;&amp;amp; _comps[zinit]=_zinit

# Carregue alguns anexos importantes, sem Turbo
zinit light-mode for &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
    zdharma-continuum/zinit-annex-as-monitor &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
    zdharma-continuum/zinit-annex-bin-gem-node &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
    zdharma-continuum/zinit-annex-patch-dl &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
    zdharma-continuum/zinit-annex-rust

### Fim do trecho de instalação do Zinit
&lt;/span&gt;&lt;span class="no"&gt;
EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fonte seu &lt;code&gt;.zshrc&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔌 &lt;strong&gt;Passo 4: Instalando Plugins Adicionais com Zinit&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Use o Zinit para instalar plugins adicionais e enriquecer sua experiência com o Zsh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instale plugins usando o Zinit&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Abra seu arquivo &lt;code&gt;.zshrc&lt;/code&gt; e adicione os seguintes comandos de plugin do Zinit:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adicione essas linhas para instalar e carregar plugins adicionais:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zinit light zdharma-continuum/fast-syntax-highlighting
zinit light zsh-users/zsh-autosuggestions
zinit light zsh-users/zsh-completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Salve e recarregue&lt;/strong&gt; seu &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  📦 &lt;strong&gt;Passo 5: Instalando e Configurando o asdf&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;O &lt;strong&gt;asdf&lt;/strong&gt; é um gerenciador de versões versátil para várias linguagens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instale o asdf&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Clone o repositório do asdf:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/asdf-vm/asdf.git ~/.asdf &lt;span class="nt"&gt;--branch&lt;/span&gt; v0.11.3
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adicione o asdf ao seu &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'\n. $HOME/.asdf/asdf.sh'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'\n. $HOME/.asdf/completions/asdf.bash'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Instale plugins do asdf&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Adicione o plugin Node.js&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin-add nodejs https://github.com/asdf-vm/asdf-nodejs.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Instale uma versão específica&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;nodejs 16.13.0
asdf global nodejs 16.13.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Adicione o plugin Python&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin-add python https://github.com/danhper/asdf-python.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Instale uma versão específica&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;python 3.9.7
asdf global python 3.9.7
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Gerenciando versões específicas para projetos&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Crie um arquivo &lt;code&gt;.tool-versions&lt;/code&gt; no diretório do seu projeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nodejs 14.17.6
python 3.8.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execute &lt;code&gt;asdf install&lt;/code&gt; no diretório do projeto para usar essas versões localmente.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 &lt;strong&gt;Passo 6: Configurando o Tema Spaceship Prompt&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;O tema &lt;strong&gt;Spaceship Prompt&lt;/strong&gt; oferece um prompt elegante e informativo para o Zsh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instale o Spaceship Prompt&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clone o repositório Spaceship&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/spaceship-prompt/spaceship-prompt.git &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ZSH_CUSTOM&lt;/span&gt;&lt;span class="s2"&gt;/themes/spaceship-prompt"&lt;/span&gt; &lt;span class="nt"&gt;--depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Crie um link simbólico&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ZSH_CUSTOM&lt;/span&gt;&lt;span class="s2"&gt;/themes/spaceship-prompt/spaceship.zsh-theme"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ZSH_CUSTOM&lt;/span&gt;&lt;span class="s2"&gt;/themes/spaceship.zsh-theme"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Defina o tema no seu &lt;code&gt;.zshrc&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;ZSH_THEME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"spaceship"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Configure o Spaceship Prompt&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Crie um arquivo de configuração &lt;code&gt;.spaceshiprc.zsh&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.spaceshiprc.zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adicione a seguinte configuração:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;SPACESHIP_USER_SHOW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always
&lt;span class="nv"&gt;SPACESHIP_PROMPT_ADD_NEWLINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
&lt;/span&gt;&lt;span class="nv"&gt;SPACESHIP_CHAR_SYMBOL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"λ"&lt;/span&gt;
&lt;span class="nv"&gt;SPACESHIP_CHAR_SUFFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;" "&lt;/span&gt;
&lt;span class="nv"&gt;SPACESHIP_PROMPT_ORDER&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
  user          &lt;span class="c"&gt;# Seção de nome de usuário&lt;/span&gt;
  &lt;span class="nb"&gt;dir&lt;/span&gt;           &lt;span class="c"&gt;# Seção de diretório atual&lt;/span&gt;
  host          &lt;span class="c"&gt;# Seção de nome do host&lt;/span&gt;
  git           &lt;span class="c"&gt;# Seção do Git (git_branch + git_status)&lt;/span&gt;
  package       &lt;span class="c"&gt;# Versão do pacote&lt;/span&gt;
  node          &lt;span class="c"&gt;# Seção do Node.js&lt;/span&gt;
  bun           &lt;span class="c"&gt;# Seção do Bun&lt;/span&gt;
  elixir        &lt;span class="c"&gt;# Seção do Elixir&lt;/span&gt;
  erlang        &lt;span class="c"&gt;# Seção do Erlang&lt;/span&gt;
  rust          &lt;span class="c"&gt;# Seção do Rust&lt;/span&gt;
  docker        &lt;span class="c"&gt;# Seção do Docker&lt;/span&gt;
  docker_compose &lt;span class="c"&gt;# Seção do Docker Compose&lt;/span&gt;
  terraform     &lt;span class="c"&gt;# Seção do Terraform&lt;/span&gt;
  exec_time     &lt;span class="c"&gt;# Tempo de execução&lt;/span&gt;
  line_sep      &lt;span class="c"&gt;# Quebra de linha&lt;/span&gt;
  &lt;span class="nb"&gt;jobs&lt;/span&gt;          &lt;span class="c"&gt;# Indicador de trabalhos em segundo plano&lt;/span&gt;
  exit_code     &lt;span class="c"&gt;# Seção de código de saída&lt;/span&gt;
  char          &lt;span class="c"&gt;# Caractere do prompt&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fonte sua configuração&lt;/strong&gt; no &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"source ~/.spaceshiprc.zsh"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc

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

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔠 &lt;strong&gt;Passo 7: Adicionando uma Nerd Font para o Spaceship Prompt&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Para melhorar a aparência do seu terminal com ícones e glifos adicionais, instale uma &lt;strong&gt;Nerd Font&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instale uma Nerd Font&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Vá para o &lt;a href="https://github.com/ryanoasis/nerd-fonts"&gt;repositório do Nerd Fonts no GitHub&lt;/a&gt; e baixe uma fonte de sua preferência, como &lt;strong&gt;Hack&lt;/strong&gt; ou &lt;strong&gt;Roboto Mono&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Siga as instruções de instalação para o seu sistema operacional.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Configure o Emulador de Terminal&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abra as preferências/configurações do seu emulador de terminal.&lt;/li&gt;
&lt;li&gt;Selecione a Nerd Font instalada (por exemplo, Hack Nerd Font ou Roboto Mono Nerd Font) como a fonte para o seu terminal.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Atualize sua Configuração do Zsh&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Abra o arquivo &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Atualize o &lt;code&gt;SPACESHIP_CHAR_SYMBOL&lt;/code&gt; para usar um ícone da Nerd Font (por exemplo, &lt;code&gt;&lt;/code&gt; para Hack Nerd Font ou &lt;code&gt;&lt;/code&gt; para Roboto Mono Nerd Font):&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;SPACESHIP_CHAR_SYMBOL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt; &lt;span class="c"&gt;# Use o símbolo da Nerd Font apropriado aqui&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Salve e feche&lt;/strong&gt; o arquivo.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Fonte sua configuração&lt;/strong&gt;:&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;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔧 &lt;strong&gt;Passo 8: Outras Configurações Úteis para Zsh&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Personalize a História do Comando&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Armazene mais histórico e compartilhe entre sessões:&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="nv"&gt;HISTSIZE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10000
&lt;span class="nv"&gt;SAVEHIST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10000
setopt share_history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Habilite Correções Automáticas&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Habilite correções para erros comuns de digitação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;setopt correct
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Agora você configurou um ambiente de desenvolvimento robusto e visualmente atraente com &lt;strong&gt;Zsh&lt;/strong&gt;, &lt;strong&gt;Oh My Zsh&lt;/strong&gt;, &lt;strong&gt;asdf&lt;/strong&gt; e o tema &lt;strong&gt;Spaceship Prompt&lt;/strong&gt;, usando &lt;strong&gt;Zinit&lt;/strong&gt; para plugins adicionais. Esta configuração melhorará seu fluxo de trabalho e facilitará o gerenciamento de vários projetos. Feliz codificação!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Leitura Adicional&lt;/strong&gt; 📚:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins"&gt;Plugins do Oh My Zsh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://asdf-vm.com/"&gt;Documentação do asdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/spaceship-prompt/spaceship-prompt"&gt;Spaceship Prompt no GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zdharma-continuum.github.io/zinit/wiki/"&gt;Documentação do Zinit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zsh.sourceforge.net/Doc/Release/"&gt;Guia do Usuário do Zsh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Este artigo foi criado e personalizado com a ajuda do ChatGPT.&lt;/em&gt; 🤖💡&lt;/p&gt;

</description>
      <category>shell</category>
      <category>zsh</category>
      <category>terminal</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>💅🏻CSS-in-JS is Making a Comeback: What’s New?</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Fri, 21 Jun 2024 17:35:41 +0000</pubDate>
      <link>https://dev.to/girordo/so-css-in-js-is-back-what-is-now-1fc6</link>
      <guid>https://dev.to/girordo/so-css-in-js-is-back-what-is-now-1fc6</guid>
      <description>&lt;p&gt;So, it looks like we are changing the direction of how we write CSS.&lt;/p&gt;

&lt;p&gt;At first, I didn't like writing CSS-in-JS. It seemed unnecessary, but then I had a job where they only used styled-components, and I guess I adapted. &lt;/p&gt;

&lt;p&gt;I didn't understand why we needed a library to write CSS when we could just use stylesheets directly or something like Tailwind CSS. But now that I’m a more experienced developer (I think), I kind of get why people love these libraries so much.&lt;/p&gt;

&lt;p&gt;JavaScript frameworks are always changing direction from time to time, and now with React Server Components and React 19 supporting style hoisting, it feels like we’re heading into a new era. React 19 introduces new features that handle &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; tags inside components more intelligently, moving them to the document's head based on their precedence. This works seamlessly with concurrent rendering on the client and streaming rendering on the server, marking a significant shift in how we manage styles and scripts.&lt;/p&gt;

&lt;p&gt;Some of these cool libraries are really embracing this change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://panda-css.com/"&gt;Panda CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stylexjs.com/blog/introducing-stylex"&gt;Stylex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mui.com/blog/introducing-pigment-css/"&gt;Pigment CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.restyle.dev/"&gt;ReStyle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stitches.dev/"&gt;Stitches&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Inspiration&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bytes.dev/archives/298"&gt;Bytes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;This article was crafted and tailored with ChatGPT help.&lt;/em&gt; 🤖💡&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>css</category>
      <category>webdev</category>
      <category>design</category>
    </item>
    <item>
      <title>👨‍💻neofetch is archived: what's next for terminal lovers?</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Wed, 19 Jun 2024 23:29:11 +0000</pubDate>
      <link>https://dev.to/girordo/neofetch-is-archived-whats-next-for-terminal-lovers-342j</link>
      <guid>https://dev.to/girordo/neofetch-is-archived-whats-next-for-terminal-lovers-342j</guid>
      <description>&lt;p&gt;I've been using neofetch since I don't know when but I always like of being extremely customizable.&lt;/p&gt;

&lt;p&gt;This reminded me of when &lt;code&gt;null-ls&lt;/code&gt; for Neovim was archived. It's a bittersweet reminder that things, even software, don't last forever.&lt;/p&gt;

&lt;p&gt;I don't like to think of software as "dead." Instead, it's a chance to find new tools that can fill the gap. According to the Awesome Fetch repo, here are some of the best alternatives to Neofetch.&lt;/p&gt;

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

&lt;p&gt;I don't like to consider the software dead (because this doesn't exists, I guess) but we need to have new cli tools to replace neofetch&lt;/p&gt;

&lt;p&gt;Accordinly to Awesome Fetch, these are the most starred repos for fetch tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fastfetch
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/fastfetch-cli/fastfetch" rel="noopener noreferrer"&gt;&lt;strong&gt;Fastfetch&lt;/strong&gt;&lt;/a&gt; is a speedy and efficient alternative. It provides quick system information without sacrificing the detail we love.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  screenFetch
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/KittyKatt/screenFetch" rel="noopener noreferrer"&gt;&lt;strong&gt;screenFetch&lt;/strong&gt;&lt;/a&gt; is a simple Bash script that displays your system info alongside a cool ASCII logo of your OS. It’s easy to customize with options for colors, no ASCII art, and even taking screenshots right from the terminal. Perfect for those slick terminal screenshots everyone loves to share!&lt;/p&gt;

&lt;h2&gt;
  
  
  cpufetch
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Dr-Noob/cpufetch" rel="noopener noreferrer"&gt;&lt;strong&gt;cpufetch&lt;/strong&gt;&lt;/a&gt; focuses on showing off your CPU details in a clean and stylish way. It’s perfect for when you want to highlight your processor specs in a neat little package.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  macchina
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Macchina-CLI/macchina" rel="noopener noreferrer"&gt;&lt;strong&gt;macchina&lt;/strong&gt;&lt;/a&gt; is all about being fast, minimal, and customizable. It gives you a sleek overview of your system's specs with plenty of options to tweak things to your liking. If you’re looking for something quick and simple, this might be the tool for you.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  HyFetch
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/hykilpikonna/hyfetch" rel="noopener noreferrer"&gt;&lt;strong&gt;HyFetch&lt;/strong&gt;&lt;/a&gt; is a colorful alternative that adds pride flag colors to your system info. It’s a fun and inclusive way to spice up your terminal while still getting all the details you need.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Even though Neofetch is archived, it’s a great opportunity to try out some new tools and keep your terminal looking awesome. Whether you’re after speed, simplicity, or just a splash of color, there’s something here for everyone!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Inspired by:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://itsfoss.com/neofetch-alternatives/" rel="noopener noreferrer"&gt;Neofetch alternatives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/beucismis/awesome-fetch" rel="noopener noreferrer"&gt;Awesome Fetch on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@lukash?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Lukas&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/a-computer-screen-with-a-program-running-on-it-NLSXFjl_nhc?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was crafted and tailored with ChatGPT help.&lt;/em&gt; 🤖💡&lt;/p&gt;

</description>
      <category>terminal</category>
      <category>cli</category>
      <category>tools</category>
      <category>devops</category>
    </item>
    <item>
      <title>🚀 A hands-on guide to setting up zsh, oh my zsh, asdf, and spaceship prompt with zinit for your development environment</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Tue, 18 Jun 2024 13:20:56 +0000</pubDate>
      <link>https://dev.to/girordo/a-hands-on-guide-to-setting-up-zsh-oh-my-zsh-asdf-and-spaceship-prompt-with-zinit-for-your-development-environment-91n</link>
      <guid>https://dev.to/girordo/a-hands-on-guide-to-setting-up-zsh-oh-my-zsh-asdf-and-spaceship-prompt-with-zinit-for-your-development-environment-91n</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt; 🌟
&lt;/h2&gt;

&lt;p&gt;Elevate your development environment with this guide on installing and configuring &lt;strong&gt;Zsh&lt;/strong&gt;, &lt;strong&gt;Oh My Zsh&lt;/strong&gt;, &lt;strong&gt;asdf&lt;/strong&gt;, and the &lt;strong&gt;Spaceship Prompt&lt;/strong&gt; theme. We will also leverage &lt;strong&gt;Zinit&lt;/strong&gt; for additional plugin management. Let’s get started!&lt;/p&gt;

&lt;p&gt;🚨🚨🚨 &lt;strong&gt;WARNING:If you like it this article please click in reaction and save, also follow me here and on my &lt;a href="https://github.com/girordo"&gt;Github&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ &lt;strong&gt;Step 1: Installing Zsh&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Zsh&lt;/strong&gt; is a robust shell that provides a powerful command-line experience. Here’s how to install it:&lt;/p&gt;

&lt;h4&gt;
  
  
  🐧 &lt;strong&gt;For Linux (Ubuntu/Debian):&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;zsh
chsh &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;which zsh&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🍎 &lt;strong&gt;For macOS:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Zsh is pre-installed. To set it as your default shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;chsh &lt;span class="nt"&gt;-s&lt;/span&gt; /bin/zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🪟 &lt;strong&gt;For Windows:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Use &lt;strong&gt;WSL (Windows Subsystem for Linux)&lt;/strong&gt; or &lt;strong&gt;Git Bash&lt;/strong&gt;. For WSL:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install a WSL distribution (e.g., Ubuntu) from the Microsoft Store.&lt;/li&gt;
&lt;li&gt;Install Zsh as you would on Ubuntu.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Verify the installation&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zsh &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚙️ &lt;strong&gt;Step 2: Setting Up Oh My Zsh&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Oh My Zsh&lt;/strong&gt; simplifies Zsh configuration with themes and plugins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install Oh My Zsh&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This script will set up Oh My Zsh and switch your default shell to Zsh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure Oh My Zsh&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open your &lt;code&gt;.zshrc&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enable plugins&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;git asdf&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reload your configuration&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔄 &lt;strong&gt;Step 3: Installing and Configuring Zinit&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Zinit&lt;/strong&gt; is a plugin manager for Zsh, offering flexible and fast plugin management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install Zinit&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add Zinit installer chunk to your &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;' &amp;gt;&amp;gt; ~/.zshrc

### Added by Zinit's installer
if [[ ! -f &lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="sh"&gt;/.local/share/zinit/zinit.git/zinit.zsh ]]; then
    print -P "%F{33} %F{220}Installing %F{33}ZDHARMA-CONTINUUM%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"
    command mkdir -p "&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="sh"&gt;/.local/share/zinit" &amp;amp;&amp;amp; command chmod g-rwX "&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="sh"&gt;/.local/share/zinit"
    command git clone https://github.com/zdharma-continuum/zinit "&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="sh"&gt;/.local/share/zinit/zinit.git" &amp;amp;&amp;amp; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
        print -P "%F{33} %F{34}Installation successful.%f%b" || &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
        print -P "%F{160} The clone has failed.%f%b"
fi

source "&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="sh"&gt;/.local/share/zinit/zinit.git/zinit.zsh"
autoload -Uz _zinit
(( &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="p"&gt;+_comps&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt; )) &amp;amp;&amp;amp; _comps[zinit]=_zinit

# Load a few important annexes, without Turbo
zinit light-mode for &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
    zdharma-continuum/zinit-annex-as-monitor &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
    zdharma-continuum/zinit-annex-bin-gem-node &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
    zdharma-continuum/zinit-annex-patch-dl &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
    zdharma-continuum/zinit-annex-rust

### End of Zinit's installer chunk
&lt;/span&gt;&lt;span class="no"&gt;
EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Source your &lt;code&gt;.zshrc&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔌 &lt;strong&gt;Step 4: Installing Additional Plugins with Zinit&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Use Zinit to install additional plugins for a richer Zsh experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install plugins using Zinit&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open your &lt;code&gt;.zshrc&lt;/code&gt; file and add the following Zinit plugin commands:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add these lines to install and load additional plugins:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zinit light zdharma-continuum/fast-syntax-highlighting
zinit light zsh-users/zsh-autosuggestions
zinit light zsh-users/zsh-completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Save and reload&lt;/strong&gt; your &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  📦 &lt;strong&gt;Step 5: Installing and Configuring asdf&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;asdf&lt;/strong&gt; is a versatile version manager for multiple languages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install asdf&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Clone the asdf repository:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/asdf-vm/asdf.git ~/.asdf &lt;span class="nt"&gt;--branch&lt;/span&gt; v0.11.3
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add asdf to your &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'\n. $HOME/.asdf/asdf.sh'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'\n. $HOME/.asdf/completions/asdf.bash'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Install asdf plugins&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add the Node.js plugin&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin-add nodejs https://github.com/asdf-vm/asdf-nodejs.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install a specific version&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;nodejs 16.13.0
asdf global nodejs 16.13.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add the Python plugin&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin-add python https://github.com/danhper/asdf-python.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install a specific version&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;python 3.9.7
asdf global python 3.9.7
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Managing project-specific versions&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Create a &lt;code&gt;.tool-versions&lt;/code&gt; file in your project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nodejs 14.17.6
python 3.8.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run &lt;code&gt;asdf install&lt;/code&gt; in the project directory to use these versions locally.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 &lt;strong&gt;Step 6: Configuring the Spaceship Prompt Theme&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Spaceship Prompt&lt;/strong&gt; theme offers a sleek and informative prompt for Zsh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install Spaceship Prompt&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clone the Spaceship repository&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/spaceship-prompt/spaceship-prompt.git &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ZSH_CUSTOM&lt;/span&gt;&lt;span class="s2"&gt;/themes/spaceship-prompt"&lt;/span&gt; &lt;span class="nt"&gt;--depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create a symlink&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ZSH_CUSTOM&lt;/span&gt;&lt;span class="s2"&gt;/themes/spaceship-prompt/spaceship.zsh-theme"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ZSH_CUSTOM&lt;/span&gt;&lt;span class="s2"&gt;/themes/spaceship.zsh-theme"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set the theme in your &lt;code&gt;.zshrc&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;ZSH_THEME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"spaceship"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Configure Spaceship Prompt&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a configuration file &lt;code&gt;.spaceshiprc.zsh&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.spaceshiprc.zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the following configuration:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;SPACESHIP_USER_SHOW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always
&lt;span class="nv"&gt;SPACESHIP_PROMPT_ADD_NEWLINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
&lt;/span&gt;&lt;span class="nv"&gt;SPACESHIP_CHAR_SYMBOL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"λ"&lt;/span&gt;
&lt;span class="nv"&gt;SPACESHIP_CHAR_SUFFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;" "&lt;/span&gt;
&lt;span class="nv"&gt;SPACESHIP_PROMPT_ORDER&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
  user          &lt;span class="c"&gt;# Username section&lt;/span&gt;
  &lt;span class="nb"&gt;dir&lt;/span&gt;           &lt;span class="c"&gt;# Current directory section&lt;/span&gt;
  host          &lt;span class="c"&gt;# Hostname section&lt;/span&gt;
  git           &lt;span class="c"&gt;# Git section (git_branch + git_status)&lt;/span&gt;
  package       &lt;span class="c"&gt;# Package version&lt;/span&gt;
  node          &lt;span class="c"&gt;# Node.js section&lt;/span&gt;
  bun           &lt;span class="c"&gt;# Bun section&lt;/span&gt;
  elixir        &lt;span class="c"&gt;# Elixir section&lt;/span&gt;
  erlang        &lt;span class="c"&gt;# Erlang section&lt;/span&gt;
  rust          &lt;span class="c"&gt;# Rust section&lt;/span&gt;
  docker        &lt;span class="c"&gt;# Docker section&lt;/span&gt;
  docker_compose &lt;span class="c"&gt;# Docker Compose section&lt;/span&gt;
  terraform     &lt;span class="c"&gt;# Terraform section&lt;/span&gt;
  exec_time     &lt;span class="c"&gt;# Execution time&lt;/span&gt;
  line_sep      &lt;span class="c"&gt;# Line break&lt;/span&gt;
  &lt;span class="nb"&gt;jobs&lt;/span&gt;          &lt;span class="c"&gt;# Background jobs indicator&lt;/span&gt;
  exit_code     &lt;span class="c"&gt;# Exit code section&lt;/span&gt;
  char          &lt;span class="c"&gt;# Prompt character&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Source your configuration&lt;/strong&gt; in &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"source ~/.spaceshiprc.zsh"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Enable Command History Sharing&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;To share command history across sessions:&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="nv"&gt;HISTFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;

~/.zsh_history
&lt;span class="nv"&gt;HISTSIZE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10000
&lt;span class="nv"&gt;SAVEHIST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10000
setopt share_history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Enable Auto-Corrections&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Enable corrections for common typos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;setopt correct
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔠 &lt;strong&gt;Step 7: Adding a Nerd Font for the Spaceship Prompt&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Nerd Fonts&lt;/strong&gt; provide additional icons and glyphs that enhance the appearance of your terminal, especially with themes like Spaceship Prompt.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install a Nerd Font&lt;/strong&gt; (e.g., Hack or Roboto Mono):&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;a href="https://github.com/ryanoasis/nerd-fonts"&gt;Nerd Fonts GitHub repository&lt;/a&gt; and download your preferred font (e.g., Hack or Roboto Mono).&lt;/li&gt;
&lt;li&gt;Follow the installation instructions for your operating system.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configure Your Terminal Emulator&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Open your terminal emulator's preferences/settings.&lt;/li&gt;
&lt;li&gt;Select the installed Nerd Font (e.g., Hack Nerd Font or Roboto Mono Nerd Font) as the font for your terminal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, your Spaceship Prompt should display with the Nerd Font icon you selected.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You’ve now set up a robust and visually appealing development environment with &lt;strong&gt;Zsh&lt;/strong&gt;, &lt;strong&gt;Oh My Zsh&lt;/strong&gt;, &lt;strong&gt;asdf&lt;/strong&gt;, and the &lt;strong&gt;Spaceship Prompt&lt;/strong&gt; theme, using &lt;strong&gt;Zinit&lt;/strong&gt; for additional plugins. This configuration will enhance your workflow and make managing multiple projects a breeze. Happy coding!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Further Reading&lt;/strong&gt; 📚:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins"&gt;Oh My Zsh Plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://asdf-vm.com/"&gt;asdf Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/spaceship-prompt/spaceship-prompt"&gt;Spaceship Prompt GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zdharma-continuum.github.io/zinit/wiki/"&gt;Zinit Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zsh.sourceforge.net/Doc/Release/"&gt;Zsh User Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@lukash?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Lukas&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/a-computer-screen-with-a-lot-of-data-on-it-MU8w72PzRow?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was crafted and tailored with ChatGPT help.&lt;/em&gt; 🤖💡&lt;/p&gt;

</description>
      <category>terminal</category>
      <category>zsh</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🐚🦀Shell commands rewritten in rust</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Mon, 17 Jun 2024 13:36:54 +0000</pubDate>
      <link>https://dev.to/girordo/shell-commands-rewritten-in-rust-23id</link>
      <guid>https://dev.to/girordo/shell-commands-rewritten-in-rust-23id</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;For every software engineer, developer, or programmer, command-line tools are essential for making life easier, especially when working with code. In recent years, with the rise in popularity of the Rust language, we have seen a growing number of these tools being rewritten in Rust, providing better performance and reliability.&lt;/p&gt;

&lt;p&gt;But you might be wondering: Why should I use a command rewritten in Rust? The answer is simple: because it's amazing!&lt;/p&gt;

&lt;p&gt;In this article, we will present a list of some of these tools that we use in our daily lives.&lt;/p&gt;

&lt;p&gt;🚨🚨🚨 &lt;strong&gt;WARNING:If you like it this article please click in reaction and save, also follow me here and on my &lt;a href="https://github.com/girordo"&gt;Github&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Essential Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/sharkdp/bat"&gt;&lt;strong&gt;bat&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;"bat" is a clone of &lt;code&gt;cat&lt;/code&gt; with syntax highlighting and Git integration. It works on Windows, MacOS, and Linux, offering syntax highlighting for a wide variety of file extensions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/ClementTsang/bottom"&gt;&lt;strong&gt;bottom&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;"bottom" is a process and system monitoring tool. It provides graphical widgets to monitor CPU, RAM, network, disk, and other resources, making it a versatile and highly customizable choice for Linux, MacOS, and Windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/lsd-rs/lsd"&gt;&lt;strong&gt;lsd&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;"lsd" is an enhanced version of the &lt;code&gt;ls&lt;/code&gt; command. It adds colors, icons, tree view, and more formatting options, making directory listing more informative and visually pleasing.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/sharkdp/fd"&gt;&lt;strong&gt;fd&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;"fd" is a fast and user-friendly alternative to the &lt;code&gt;find&lt;/code&gt; command for locating entries in your file system. While it does not aim to replicate all the advanced functionalities of &lt;code&gt;find&lt;/code&gt;, it offers opinionated defaults for most use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/chmln/sd"&gt;&lt;strong&gt;sd&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;"sd" is an intuitive command-line tool for finding and replacing text. It simplifies the search and replace process with an easy-to-understand syntax, eliminating the need to deal with backslashes and other special characters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus
&lt;/h2&gt;

&lt;p&gt;Here are some additional tools that we plan to start using:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/ducaale/xh"&gt;&lt;strong&gt;xh&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;"xh" is a friendly and fast tool for making HTTP requests. It shares many of the great design features of HTTPie but focuses on improving performance. While we still use HTTPie out of habit, we plan to switch to "xh" soon.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/kamiyaa/joshuto"&gt;&lt;strong&gt;joshuto&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A terminal file manager inspired by Ranger. Currently, we use Ranger, but we are considering switching to "joshuto."&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/yamafaktory/jql"&gt;&lt;strong&gt;jql&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;"jql" is a JSON Query Language tool built in Rust. It provides a convenient way to query JSON data effectively.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/tarka/xcp"&gt;&lt;strong&gt;xcp&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;"xcp" is a partial clone of the Unix "cp" command. It is not intended to be a complete replacement but rather a complementary utility that provides more user-friendly feedback and specific optimizations for certain tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Custom Configurations
&lt;/h2&gt;

&lt;p&gt;Here are some useful aliases that we have configured for "bat" and "lsd":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Aliases
alias bat='batcat'
alias ll='lsd -la'
alias lld='lsd -la --date=relative --group-dirs=first'
alias lle='lsd -la --date=relative --sort=extension --group-dirs=first'
alias la='lsd -a'
alias l='lsd -l'
alias lt='lsd --tree'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;These are some of the tools we love to use in our daily workflow, and we hope you find them useful as well. Additionally, we introduced some options that we plan to adopt in the future.&lt;/p&gt;

&lt;p&gt;For more information and to explore more commands and applications rewritten in Rust, check out the following links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/sts10/daadbc2f403bdffad1b6d33aff016c0a"&gt;List of commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zaiste.net/posts/shell-commands-rust/"&gt;Original article&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try out these tools and see how they can enhance your development and terminal experience!&lt;/p&gt;

</description>
      <category>rust</category>
      <category>shell</category>
      <category>terminal</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🚴‍♂️Speeding up with JS one liners</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Thu, 13 Jun 2024 15:01:05 +0000</pubDate>
      <link>https://dev.to/girordo/speeding-up-with-js-one-liners-2m3</link>
      <guid>https://dev.to/girordo/speeding-up-with-js-one-liners-2m3</guid>
      <description>&lt;p&gt;I will write more, I promise.&lt;br&gt;
I've been doing some leetcode and practicing my typing. So I pretend to write more about these two subjects.&lt;br&gt;
I'm also not generating these stuff with ChatGPT and pretend to write more of my thoughts instead just being some random subject IA generated.&lt;br&gt;
BUT I'm guiding through other articles about one liners and I know that subject is really simple and have another articles that you can search here on dev.to&lt;/p&gt;

&lt;p&gt;But that's it, I hope y'all like it and share with your friends.&lt;/p&gt;

&lt;h2&gt;
  
  
  Array
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Remove false values from array
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Remove duplicates from array
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Swap between 2 elements
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Remove holes from array
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Casting to array of numbers
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Numbers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Clone an array
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Merge multiple arrays
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Objects
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Checking if the object is empty
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Strings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Removing whitespaces in a string
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\s&lt;/span&gt;&lt;span class="sr"&gt;/g&lt;/span&gt;&lt;span class="p"&gt;,&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;
  
  
  Generating random string
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Reverse a string
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&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;h2&gt;
  
  
  Numbers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Generate random integer
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;max&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;min&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Algumas boas práticas que utilizo diariamente</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Fri, 08 Mar 2024 18:16:45 +0000</pubDate>
      <link>https://dev.to/girordo/algumas-das-melhores-praticas-que-utilizo-diariamente-41c4</link>
      <guid>https://dev.to/girordo/algumas-das-melhores-praticas-que-utilizo-diariamente-41c4</guid>
      <description>&lt;p&gt;Desde 2019, minha jornada com React tem sido marcada por constantes descobertas de padrões e melhores práticas. É empolgante observar como a comunidade evolui, adotando práticas que otimizam o desenvolvimento. Claro, reconheço que as melhores práticas não são universais, variando entre empresas, mas são cruciais para a eficiência e manutenção do código.&lt;/p&gt;

&lt;h2&gt;
  
  
  Componentes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Priorize Componentes Funcionais
&lt;/h3&gt;

&lt;p&gt;Ao tratar de componentes, a ênfase recai nos componentes funcionais. Com uma sintaxe mais simples e sem métodos de ciclo de vida ou construtores, eles promovem a clareza do código. Quando possível, proponha a refatoração de class components para functional components.&lt;/p&gt;

&lt;p&gt;Exemplo de componente funcional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FunctionalComponent&lt;/span&gt; &lt;span class="o"&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="c1"&gt;// lógica do componente&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="c1"&gt;// JSX&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;Exemplo de class component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClassComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// lógica do componente&lt;/span&gt;
  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="c1"&gt;// JSX&lt;/span&gt;
    &lt;span class="p"&gt;);&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;
  
  
  Não seja preguiçoso ao nomear seus componentes
&lt;/h3&gt;

&lt;p&gt;A atribuição de nomes adequados aos componentes é fundamental. Utilize PascalCase para garantir consistência. Certifique-se de que seu ESLint aplique e faça cumprir essas regras. Coloque algum esforço nisso antes que seja tarde.&lt;/p&gt;

&lt;h3&gt;
  
  
  Evite Hardcoding em Filtros, Navegação e Listas
&lt;/h3&gt;

&lt;p&gt;Nunca deixe itens hardcoded para filtros, navegação ou listas. Utilize constantes para esse fim e, se possível, agrupe todas em um único arquivo de constantes. Aproveite o método &lt;code&gt;map()&lt;/code&gt; para facilitar a iteração em listas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comentários Estratégicos
&lt;/h3&gt;

&lt;p&gt;Apesar da controvérsia em torno dos comentários, no contexto do React, onde paradigmas diferem, a prática de escrever comentários é valiosa. Comentários bem colocados podem fornecer insights cruciais sobre a lógica específica do React.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adote JSX e TSX
&lt;/h3&gt;

&lt;p&gt;Ao escrever componentes, adote JSX para React e TSX para TypeScript. Essa prática simplifica a identificação do tipo de arquivo e melhora a clareza do código.&lt;/p&gt;

&lt;h3&gt;
  
  
  Desestruture as Props
&lt;/h3&gt;

&lt;p&gt;Desestruture as props do componente sempre que possível. Isso aprimora a legibilidade do código, a menos que seja crucial entender as diferenças entre o estado externo e interno do componente.&lt;/p&gt;

&lt;p&gt;Exemplo de desestruturação de props:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MyComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;prop1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;prop2&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="c1"&gt;// lógica do componente usando prop1 e prop2&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="c1"&gt;// JSX&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;
  
  
  Gerencie o Número de Props
&lt;/h3&gt;

&lt;p&gt;O cuidado com o número de props é subjetivo, mas se um componente possui mais de 4 ou 5 props, considere se ele está assumindo responsabilidades demais. Evite um excesso de props, o que pode indicar a necessidade de refatoração.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Objetos em Vez de Primitivos
&lt;/h3&gt;

&lt;p&gt;Ao passar props, considere usar objetos em vez de primitivos. Isso simplifica a desestruturação dentro do componente, evitando torná-lo verboso e confuso.&lt;/p&gt;

&lt;p&gt;Essas práticas visam criar código React eficiente e de fácil manutenção. Lembre-se, adaptar as práticas às necessidades específicas do projeto é crucial.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Passando primitivos como props &lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;UserProfile&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;surname&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;surname&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;taxDocument&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;taxDocument&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="c1"&gt;// Utilizando objetos como props &lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;UserProfile&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Melhores Práticas Utilizando React e JavaScript
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pare de usar "var"!
&lt;/h3&gt;

&lt;p&gt;Meio óbvio? Talvez não. &lt;/p&gt;

&lt;h3&gt;
  
  
  Use "const" e imutabilidade sempre que possível
&lt;/h3&gt;

&lt;p&gt;Também meio óbvio&lt;/p&gt;

&lt;h3&gt;
  
  
  Mantenha ternários simples
&lt;/h3&gt;

&lt;p&gt;No pior cenário, você tem dois ternários aninhados. Qualquer coisa mais longa deve ser uma instrução if ou switch por razões de legibilidade e facilidade de depuração.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Ternários aninhados (a ser evitado)&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="nx"&gt;isMember&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a member&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;isVisitor&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a visitor&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;Unknown status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Ternários simples&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;displayMessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;isLoggedIn&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Welcome back!&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;Please log in&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;
  
  
  Simplifique com o optional chaining
&lt;/h3&gt;

&lt;p&gt;Elimine essas verificações aninhadas e use o operador "?".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Passando primitivos como props &lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;UserProfile&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;surname&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;surname&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;taxDocument&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;taxDocument&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="c1"&gt;// Utilizando objetos como props &lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;UserProfile&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Prefira template strings
&lt;/h3&gt;

&lt;p&gt;É simples assim. As &lt;em&gt;template strings&lt;/em&gt; permitem injetar valores na string e mantêm o formato, o que pode ser útil.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Concatenação de strings tradicional &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;greeting&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello, &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;! Welcome.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

&lt;span class="c1"&gt;// Utilizando template string&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;greetingTemplate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Hello, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;! Welcome.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Evite aninhar ou encadear loops
&lt;/h3&gt;

&lt;p&gt;Quando você encadeia métodos de iteração ou aninha loops, está aumentando a complexidade do código, o que pode retardar as coisas posteriormente ou à medida que seus dados crescem. Embora algumas operações possam exigir isso, avalie sempre sua estratégia de loop para garantir que você não tenha loops desnecessários ou loops que possam ser combinados.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tenha testes unitários
&lt;/h3&gt;

&lt;p&gt;Falando em boas práticas, não podemos esquecer a importância dos testes unitários. O Jest e o React Testing Library são ferramentas valiosas para garantir que sua aplicação funcione conforme o esperado. O Jest é um framework de teste completo para JavaScript, enquanto o React Testing Library fornece utilitários para testar componentes React de maneira eficaz. Integre essas ferramentas em seu fluxo de trabalho para criar uma base sólida.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>braziliandevs</category>
      <category>react</category>
      <category>beginners</category>
    </item>
    <item>
      <title>⚛️Diferenças entre useMemo e useCallback</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Tue, 20 Feb 2024 12:08:54 +0000</pubDate>
      <link>https://dev.to/girordo/diferencas-entre-usememo-e-usecallback-3jlm</link>
      <guid>https://dev.to/girordo/diferencas-entre-usememo-e-usecallback-3jlm</guid>
      <description>&lt;p&gt;No React, &lt;code&gt;useMemo&lt;/code&gt; e &lt;code&gt;useCallback&lt;/code&gt; são hooks que visam otimizar o desempenho memorizando valores. No entanto, eles servem a propósitos distintos.&lt;/p&gt;

&lt;h2&gt;
  
  
  useMemo
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;useMemo&lt;/code&gt; é usado para memorizar o resultado de um cálculo. É necessária uma função e uma matriz de dependências e apenas recalcula o resultado quando as dependências mudam. Isto pode ser particularmente útil para cálculos caros ou ao lidar com transformações de dados complexas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Casos de uso:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;importar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useMemo&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MeuComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;data&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;const&lt;/span&gt; &lt;span class="nx"&gt;processedData&lt;/span&gt; &lt;span class="err"&gt;​​&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useMemo&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="c1"&gt;// Lógica cara&lt;/span&gt;
     &lt;span class="nx"&gt;retornar&lt;/span&gt; &lt;span class="nf"&gt;processData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dados&lt;/span&gt;&lt;span class="p"&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;data&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;processedData&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, &lt;code&gt;processedData&lt;/code&gt; só será recalculado se a propriedade &lt;code&gt;data&lt;/code&gt; for alterada, evitando cálculos desnecessários em cada renderização.&lt;/p&gt;

&lt;h2&gt;
  
  
  useCallback
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;useCallback&lt;/code&gt; é empregado para memorizar uma função de retorno de chamada. Também requer uma função e uma matriz de dependências. O retorno de chamada só é recriado quando as dependências mudam, o que é benéfico ao passar retornos de chamada para componentes filhos para evitar novas renderizações desnecessárias.&lt;/p&gt;

&lt;h3&gt;
  
  
  Casos de uso:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;importar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useCallback&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ParentComponent&lt;/span&gt; &lt;span class="o"&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;const&lt;/span&gt; &lt;span class="nx"&gt;handleClick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useCallback&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="c1"&gt;// Lida com a lógica do clique&lt;/span&gt;
     &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Botão clicado!&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="p"&gt;[]);&lt;/span&gt; &lt;span class="c1"&gt;// Sem dependências, o retorno de chamada permanece constante&lt;/span&gt;

   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ChildComponent&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleClick&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ChildComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;onClick&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="c1"&gt;// Componente filho recebe retorno de chamada memorizado&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Clique em mim&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste cenário, &lt;code&gt;handleClick&lt;/code&gt; permanece o mesmo em todas as renderizações de &lt;code&gt;ParentComponent&lt;/code&gt; porque não tem dependências, evitando novas renderizações desnecessárias de &lt;code&gt;ChildComponent&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Em resumo, &lt;code&gt;useMemo&lt;/code&gt; serve para memorizar valores, enquanto &lt;code&gt;useCallback&lt;/code&gt; serve para memorizar funções de retorno de chamada. Entender quando usar cada gancho garante desempenho ideal em seus aplicativos React.&lt;/p&gt;

&lt;p&gt;Cover Photo by &lt;a href="https://unsplash.com/@dmey503?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Dan Meyers&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/white-and-blue-graphing-paper-0oNAIDc0HUA?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>beginners</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>🐚🦀Comandos shell reescritos em Rust</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Wed, 04 Oct 2023 21:56:35 +0000</pubDate>
      <link>https://dev.to/girordo/comandos-shell-reescritos-em-rust-4nl9</link>
      <guid>https://dev.to/girordo/comandos-shell-reescritos-em-rust-4nl9</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Para todo engenheiro de software, desenvolvedor ou programador, as ferramentas de linha de comando são essenciais para tornar a vida mais fácil, especialmente quando se trabalha com código. Nos últimos anos, com o aumento da popularidade da linguagem Rust, temos visto um crescente número dessas ferramentas sendo reescritas em Rust, o que tem proporcionado melhor desempenho e confiabilidade.&lt;/p&gt;

&lt;p&gt;Mas você pode estar se perguntando: Por que devo usar um comando reescrito em Rust? A resposta é simples: porque é incrível!&lt;/p&gt;

&lt;p&gt;Neste artigo, vamos apresentar uma lista de algumas dessas ferramentas que utilizamos em nosso dia a dia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ferramentas Essenciais
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/sharkdp/bat"&gt;&lt;strong&gt;bat&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;O "bat" é um clone do &lt;code&gt;cat&lt;/code&gt; com destaque de sintaxe e integração com o Git. Funciona em Windows, MacOS e Linux, oferecendo destaque de sintaxe para uma ampla variedade de extensões de arquivo.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/ClementTsang/bottom"&gt;&lt;strong&gt;bottom&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;O "bottom" é uma ferramenta de visualização e gerenciamento de processos e sistemas. Ele fornece widgets gráficos para monitorar CPU, RAM, rede, disco e outros recursos, tornando-se uma escolha versátil e altamente personalizável para Linux, MacOS e Windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/lsd-rs/lsd"&gt;&lt;strong&gt;lsd&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;O "lsd" é um aprimoramento do comando &lt;code&gt;ls&lt;/code&gt;. Adiciona cores, ícones, visualização em árvore e mais opções de formatação, tornando a listagem de diretórios mais informativa e agradável visualmente.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/sharkdp/fd"&gt;&lt;strong&gt;fd&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;O "fd" é uma alternativa rápida e amigável ao comando &lt;code&gt;find&lt;/code&gt; para localizar entradas em seu sistema de arquivos. Embora não tenha como objetivo replicar todas as funcionalidades avançadas do &lt;code&gt;find&lt;/code&gt;, ele oferece padrões sensíveis (baseados em opiniões) para a maioria dos casos de uso.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/chmln/sd"&gt;&lt;strong&gt;sd&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;O "sd" é uma ferramenta de linha de comando intuitiva para localizar e substituir texto. Ele simplifica o processo de busca e substituição com uma sintaxe fácil de entender, eliminando a necessidade de lidar com barras invertidas e outros caracteres especiais.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bônus
&lt;/h2&gt;

&lt;p&gt;Aqui estão algumas ferramentas adicionais que pretendemos começar a usar:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/ducaale/xh"&gt;&lt;strong&gt;xh&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;O "xh" é uma ferramenta amigável e rápida para enviar solicitações HTTP. Ele compartilha muitos dos excelentes recursos de design do HTTPie, mas com foco em melhorar o desempenho. Embora ainda usemos o HTTPie por hábito, planejamos migrar para o "xh" em breve.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/kamiyaa/joshuto"&gt;&lt;strong&gt;joshuto&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Um gerenciador de arquivos de terminal inspirado no Ranger. Atualmente, usamos o Ranger, mas estamos considerando fazer a troca para o "joshuto".&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/yamafaktory/jql"&gt;&lt;strong&gt;jql&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;O "jql" é uma ferramenta de Linguagem de Consulta JSON construída em Rust. Oferece uma maneira conveniente de consultar dados JSON de forma eficaz.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/tarka/xcp"&gt;&lt;strong&gt;xcp&lt;/strong&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;O "xcp" é um clone parcial do comando Unix "cp". Não é destinado a ser uma substituição completa, mas sim uma utilidade complementar que fornece feedback mais amigável ao usuário e otimizações específicas para certas tarefas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configurações Personalizadas
&lt;/h2&gt;

&lt;p&gt;Aqui estão alguns aliases úteis que configuramos para o "bat" e o "lsd":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Aliases
alias bat='batcat'
alias ll='lsd -la'
alias lld='lsd -la --date=relative --group-dirs=first'
alias lle='lsd -la --date=relative --sort=extension --group-dirs=first'
alias la='lsd -a'
alias l='lsd -l'
alias lt='lsd --tree'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Estas são algumas das ferramentas que adoramos usar em nosso fluxo de trabalho diário, e esperamos que você também as ache úteis. Além disso, apresentamos algumas opções que pretendemos adotar no futuro.&lt;/p&gt;

&lt;p&gt;Para obter mais informações e explorar mais comandos e aplicativos reescritos em Rust, consulte os seguintes links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/sts10/daadbc2f403bdffad1b6d33aff016c0a"&gt;Lista de comandos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zaiste.net/posts/shell-commands-rust/"&gt;Artigo original&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Experimente essas ferramentas e veja como elas podem aprimorar sua experiência de desenvolvimento e uso do terminal!&lt;/p&gt;

</description>
      <category>rust</category>
      <category>shell</category>
      <category>braziliandevs</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🦾How to automate your resume using R, R markdown, and GitHub Actions</title>
      <dc:creator>Tarcísio Giroldo</dc:creator>
      <pubDate>Fri, 18 Aug 2023 14:29:37 +0000</pubDate>
      <link>https://dev.to/girordo/how-to-automate-your-resume-using-r-r-markdown-and-github-actions-2bej</link>
      <guid>https://dev.to/girordo/how-to-automate-your-resume-using-r-r-markdown-and-github-actions-2bej</guid>
      <description>&lt;p&gt;⚡ Original &lt;a href="https://github.com/girordo/data-driven-cv/"&gt;repo&lt;/a&gt;&lt;br&gt;
Please leave a star⭐ on the project and follow me on Github&lt;/p&gt;
&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Automating the creation of your resume is a smart way to save time and keep your information up to date. In this article, I will guide you through a simple process using tools like Rmarkdown and GitHub Actions to automate the generation of your resume.&lt;/p&gt;
&lt;h2&gt;
  
  
  Understanding the Tools 🧰
&lt;/h2&gt;

&lt;p&gt;Before we dive into the process, it's important to understand the tools we'll be using:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;R:&lt;/strong&gt; A programming language focused on statistical analysis and data visualization. We'll use R to create and manipulate our resume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rmarkdown:&lt;/strong&gt; An extension of R that allows combining code, text, and visual elements into a single document. We'll use Rmarkdown to create a structured resume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Actions:&lt;/strong&gt; An automation service provided by GitHub that allows us to create custom workflows. We'll leverage GitHub Actions to automate the resume generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; A platform that enables packaging, distributing, and running applications in containers. We'll use Docker to create a consistent environment for executing our resume generation process.&lt;/p&gt;

&lt;p&gt;Now that we understand the tools involved, let's proceed to the automation process:&lt;/p&gt;
&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;First and foremost, you'll need a GitHub account. If you don't have one yet, you can create one here. You'll also need access to a web browser to configure a few things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Prepare the Repository 📦&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a new repository on GitHub for your project.&lt;/li&gt;
&lt;li&gt;Clone the repository to your computer using Git.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Add the Resume File 📄&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a file named data-driven-cv.Rmd (or use any name you prefer, just remember to change it in the action and it should be .Rmd) in the root of your repository.&lt;/li&gt;
&lt;li&gt;Open the file in your favorite text editor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The file should have this header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Your name&lt;/span&gt;
&lt;span class="na"&gt;surname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Your surname&lt;/span&gt;
&lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;address"&lt;/span&gt;
&lt;span class="na"&gt;profilepic&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./imgs/zero-cool.jpeg"&lt;/span&gt;
&lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Software&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Engineer&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;|&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Frontend&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Developer"&lt;/span&gt;
&lt;span class="na"&gt;www&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yoursite.dev"&lt;/span&gt;
&lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;youremail@email.com"&lt;/span&gt;
&lt;span class="na"&gt;github&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yourgithub&lt;/span&gt;
&lt;span class="na"&gt;linkedin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yourlinkedin&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;`r&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;format(Sys.time(),&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'%B&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;%Y')`"&lt;/span&gt;
&lt;span class="na"&gt;headcolor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;7d34eb&lt;/span&gt; &lt;span class="c1"&gt;# Here you can choose your favorite color&lt;/span&gt;
&lt;span class="na"&gt;aboutme&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;am&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;software&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;engineer&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;over&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;6&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;years&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;experience&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;developing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;modern&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;web&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;applications.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;My&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;passion&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;lies&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;creating&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;incredible&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;functional&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;interfaces."&lt;/span&gt;
&lt;span class="na"&gt;docname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Resume&lt;/span&gt;
&lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;vitae::awesomecv&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that in the last attribute of the YAML, you have the vitae::awesomecv.&lt;/p&gt;

&lt;p&gt;This is just one of the mentioned templates, the others are available here.&lt;/p&gt;

&lt;p&gt;In this section, personal information and resume formatting are defined. This includes name, surname, position, website links, contact information, resume creation date, header color, and a brief description about you.&lt;/p&gt;

&lt;p&gt;The file should follow this structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Your name&lt;/span&gt;
&lt;span class="na"&gt;surname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Your surname&lt;/span&gt;
&lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;address"&lt;/span&gt;
&lt;span class="na"&gt;profilepic&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./imgs/zero-cool.jpeg"&lt;/span&gt;
&lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Software&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Engineer&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;|&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Frontend&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Developer"&lt;/span&gt;
&lt;span class="na"&gt;www&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yoursite.dev"&lt;/span&gt;
&lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;youremail@email.com"&lt;/span&gt;
&lt;span class="na"&gt;github&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yourgithub&lt;/span&gt;
&lt;span class="na"&gt;linkedin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yourlinkedin&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;`r&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;format(Sys.time(),&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'%B&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;%Y')`"&lt;/span&gt;
&lt;span class="na"&gt;headcolor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;7d34eb&lt;/span&gt; &lt;span class="c1"&gt;# Here you can choose your favorite color&lt;/span&gt;
&lt;span class="na"&gt;aboutme&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;am&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;software&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;engineer&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;over&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;6&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;years&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;experience&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;developing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;modern&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;web&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;applications.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;My&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;passion&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;lies&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;creating&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;incredible&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;functional&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;interfaces."&lt;/span&gt;
&lt;span class="na"&gt;docname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Resume&lt;/span&gt;
&lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;vitae::awesomecv&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;r setup&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;include=FALSE&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;
&lt;span class="s"&gt;knitr::opts_chunk$set(echo = FALSE,&lt;/span&gt;
                      &lt;span class="s"&gt;warning = FALSE,&lt;/span&gt;
                      &lt;span class="s"&gt;message = FALSE)&lt;/span&gt;

&lt;span class="s"&gt;require(xfun)&lt;/span&gt;

&lt;span class="s"&gt;packages &amp;lt;- c('vitae', 'tibble', 'magrittr', 'here', 'readr', 'glue')&lt;/span&gt;

&lt;span class="s"&gt;xfun::pkg_attach2(packages, message = FALSE)&lt;/span&gt;

&lt;span class="c1"&gt;# In this part, we set the path and the file we want. If you're following the step-by-step tutorial, you'll need to change the second parameter to data.R&lt;/span&gt;
&lt;span class="s"&gt;source(file = here("data","data-generic.R"))&lt;/span&gt;

&lt;span class="c1"&gt;# Experience&lt;/span&gt;

&lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;r EMPLOYMENT&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;

&lt;span class="s"&gt;work %&amp;gt;%&lt;/span&gt;
  &lt;span class="s"&gt;detailed_entries(&lt;/span&gt;
    &lt;span class="s"&gt;with = title,&lt;/span&gt;
    &lt;span class="s"&gt;what = unit,&lt;/span&gt;
    &lt;span class="s"&gt;why = detail,&lt;/span&gt;
    &lt;span class="s"&gt;when = glue::glue("{startMonth} {startYear} -- {endMonth} {endYear}", .na = ""),&lt;/span&gt;
    &lt;span class="s"&gt;where = where&lt;/span&gt;
  &lt;span class="s"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Education&lt;/span&gt;

&lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;r EDUCATION&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;

&lt;span class="s"&gt;edu %&amp;gt;%&lt;/span&gt;
  &lt;span class="s"&gt;detailed_entries(&lt;/span&gt;
    &lt;span class="s"&gt;with = inst,&lt;/span&gt;
    &lt;span class="s"&gt;what = degree,&lt;/span&gt;
    &lt;span class="s"&gt;why = detail,&lt;/span&gt;
    &lt;span class="s"&gt;when = glue::glue("{startYear} -- {endYear}", .na = ""),&lt;/span&gt;
    &lt;span class="s"&gt;where = where&lt;/span&gt;
  &lt;span class="s"&gt;)&lt;/span&gt;


&lt;span class="s"&gt;\pagebreak&lt;/span&gt;

&lt;span class="c1"&gt;# Skills&lt;/span&gt;

&lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;r SKILLS&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;

&lt;span class="s"&gt;skills %&amp;gt;%&lt;/span&gt;
  &lt;span class="s"&gt;detailed_entries(&lt;/span&gt;
    &lt;span class="s"&gt;with = area,&lt;/span&gt;
    &lt;span class="s"&gt;what = skills,&lt;/span&gt;
    &lt;span class="s"&gt;why = detail&lt;/span&gt;
  &lt;span class="s"&gt;)&lt;/span&gt;

&lt;span class="s"&gt;\pagebreak&lt;/span&gt;

&lt;span class="c1"&gt;# Projects&lt;/span&gt;

&lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;r PROJECTS&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;

&lt;span class="s"&gt;projects %&amp;gt;%&lt;/span&gt;
  &lt;span class="s"&gt;detailed_entries(&lt;/span&gt;
    &lt;span class="s"&gt;with = accomplishment,&lt;/span&gt;
    &lt;span class="s"&gt;what = area,&lt;/span&gt;
    &lt;span class="s"&gt;when = glue::glue("{year}", .na = ""),&lt;/span&gt;
    &lt;span class="s"&gt;where = where,&lt;/span&gt;
    &lt;span class="s"&gt;why = detail&lt;/span&gt;
  &lt;span class="s"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Certifications&lt;/span&gt;

&lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;r CERTIFICATIONS&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;

&lt;span class="s"&gt;certifications %&amp;gt;%&lt;/span&gt;
  &lt;span class="s"&gt;detailed_entries(&lt;/span&gt;
    &lt;span class="s"&gt;with = accomplishment,&lt;/span&gt;
    &lt;span class="s"&gt;what = area,&lt;/span&gt;
    &lt;span class="s"&gt;when = glue::glue("{year}", .na = ""),&lt;/span&gt;
    &lt;span class="s"&gt;where = where,&lt;/span&gt;
    &lt;span class="s"&gt;why = detail&lt;/span&gt;
  &lt;span class="s"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Honors and Awards&lt;/span&gt;

&lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;r HONORS&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;

&lt;span class="s"&gt;honors %&amp;gt;%&lt;/span&gt;
  &lt;span class="s"&gt;detailed_entries(&lt;/span&gt;
    &lt;span class="s"&gt;with = accomplishment,&lt;/span&gt;
    &lt;span class="s"&gt;what = area,&lt;/span&gt;
    &lt;span class="s"&gt;when = glue::glue("{year}", .na = ""),&lt;/span&gt;
    &lt;span class="s"&gt;where = where,&lt;/span&gt;
    &lt;span class="s"&gt;why = detail&lt;/span&gt;
  &lt;span class="s"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Creating data.R 📝&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a folder named "data."&lt;/li&gt;
&lt;li&gt;Create a file named data.R with the following structure:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight r"&gt;&lt;code&gt;&lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tribble&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;area&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;detail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Technology"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Javascript"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Experience with Javascript in front-end projects using React"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Technology"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Javascript"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Redux, Redux Toolkit, and Context API for state management"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Technology"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Javascript"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Jest and React Testing Library for unit tests"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Typescript"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Using Typescript with Prisma for database access."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Elixir"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Exploring Elixir in personal projects using Phoenix and Ecto."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Elixir"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Using LiveView for fullstack applications."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HTML"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Creating semantic and accessible web pages."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CSS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Styling projects using SASS and BEM methodology."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rust"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Learning Rust for secondary projects."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rust"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Following the zero2prod book."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DevOps"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Experience with virtualization and containers using Docker."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DevOps"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CI/CD with Github Actions and TravisCI."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Databases"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Working with SQL and NoSQL databases."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Databases"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MongoDB for non-relational databases."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Languages"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Portuguese"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Native language."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Languages"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"English"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fluent."&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="n"&gt;edu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tribble&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;degree&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;startYear&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

 &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;endYear&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;detail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Bachelor's in Computer Science"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2015&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2019&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Imaginary University"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fictional City, Fictional State, Fictional Country"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Studies in algorithms, data structures, and object-oriented programming."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Master's in Software Engineering"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2020&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2022&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fictional University"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fictional City, Fictional State, Fictional Country"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Research in software development, focus on agile methodologies and scalable architectures."&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="n"&gt;work&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tribble&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;unit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;startMonth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;startYear&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;endMonth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;endYear&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;detail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Software Engineer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TechSoft"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"January"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2020&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"December"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2022&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fictional City, Fictional State"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Worked as part of a team in developing web applications using React and Redux."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Full Stack Developer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"WebTech"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"March"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2018&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"November"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2019&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fictional City, Fictional State"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Participated in the development of a full stack application using Node.js, React, and MongoDB."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Development Intern"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ByteCorp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"July"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2017&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"December"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2017&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fictional City, Fictional State"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Gained practical experience working on software development projects."&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="n"&gt;honors&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tribble&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;area&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;accomplishment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;detail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Hackathon"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Best Computing Student"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2021&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Wall Street"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Awarded 1 billion dollars."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Academic Recognition"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Best Computing Student"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2019&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Imaginary University"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Recognized for academic excellence in the field of Computing."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Programming Competition"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1st Place in Algorithms"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2018&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fictional Programming Event"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Achieved first place in the algorithm programming competition."&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="n"&gt;projects&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tribble&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;area&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;accomplishment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;detail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Software Development"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Task Management System"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2022&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TechSoft"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Led the creation of a task management system using React and Redux."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Software Development"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"E-Commerce Platform"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2021&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fictional Company"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Participated in the development team of an e-commerce platform."&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="n"&gt;certifications&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tribble&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;area&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;accomplishment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;detail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Professional Certifications"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"React Certification"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2021&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fictional Online Learning Platform"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Obtained React certification to showcase skills in the library."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"Professional Certifications"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Docker Certification"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2020&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fictional Online Learning Platform"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Achieved Docker certification to demonstrate container knowledge."&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;&lt;strong&gt;Step 3: Setting Up Automation 🤖&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On GitHub, go to the "Actions" tab in your repository.&lt;/li&gt;
&lt;li&gt;Click on "Set up a workflow yourself" to create a workflow file.&lt;/li&gt;
&lt;li&gt;Paste the following code into the file and save:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CI for CV&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.github/workflows/ci.yml&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;markdowns/**'&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data/**'&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;        
&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write-all&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Creation of resume in en and pt-br&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;container&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mlampros/mycvitae:rstudiodev&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Set up Git repository&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Installing texlive&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;sudo apt-get -y update&lt;/span&gt;
          &lt;span class="s"&gt;sudo apt-get install -y texlive-base texlive-latex-base&lt;/span&gt;
          &lt;span class="s"&gt;sudo apt-get install -y texlive-latex-recommended&lt;/span&gt;
          &lt;span class="s"&gt;sudo apt-get install -y texlive-xetex&lt;/span&gt;
          &lt;span class="s"&gt;sudo apt-get install -y texlive-fonts-extra&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Render the resumes&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;Rscript -e "rmarkdown::render(input = file.path(getwd(), 'data-driven-resume.Rmd'), params = list(work_dir = getwd()))"&lt;/span&gt;
          &lt;span class="s"&gt;Rscript -e "rmarkdown::render(input = file.path(getwd(), 'data-driven-resume-pt-br.Rmd'), params = list(work_dir = getwd()))"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Commit files&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;git config --local user.email "actions@github.com"&lt;/span&gt;
          &lt;span class="s"&gt;git config --local user.name "GitHub Actions"&lt;/span&gt;
          &lt;span class="s"&gt;git add .&lt;/span&gt;
          &lt;span class="s"&gt;git commit -am "add the cv in english and pt-br files to the directory of the repository"&lt;/span&gt;
          &lt;span class="s"&gt;git push&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;If you've followed all the steps correctly, you'll likely see the resume with a header similar to the one above.&lt;/p&gt;

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

&lt;p&gt;PS: Yeah, I know that the image is in pt-br but I'm lazy and I'm not redo all the steps just to generate one image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Automating the creation of your resume using Rmarkdown, GitHub Actions, and Docker is an effective way to keep your information updated and relevant. The benefits range from saving time to showcasing your technical skills to employers.&lt;/p&gt;

&lt;p&gt;If you have any questions, feel free to reach out!&lt;/p&gt;

&lt;p&gt;Also, if you have any contributions, please fork the repository and open a pull request. I'll be happy to review them.&lt;/p&gt;

&lt;p&gt;I hope this article has been helpful and that you're ready to automate your resume. &lt;strong&gt;Happy hacking! :)&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>devops</category>
      <category>career</category>
    </item>
  </channel>
</rss>
