<?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: matheus fortunato</title>
    <description>The latest articles on DEV Community by matheus fortunato (@mfortunat0).</description>
    <link>https://dev.to/mfortunat0</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%2F564777%2F9c509678-c8b7-48f4-aa38-d31f5ed7a90a.png</url>
      <title>DEV Community: matheus fortunato</title>
      <link>https://dev.to/mfortunat0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mfortunat0"/>
    <language>en</language>
    <item>
      <title>Meu Script de Pós-Instalação no Fedora (2025)</title>
      <dc:creator>matheus fortunato</dc:creator>
      <pubDate>Mon, 08 Dec 2025 20:53:20 +0000</pubDate>
      <link>https://dev.to/mfortunat0/meu-script-definitivo-de-pos-instalacao-no-fedora-2025-cld</link>
      <guid>https://dev.to/mfortunat0/meu-script-definitivo-de-pos-instalacao-no-fedora-2025-cld</guid>
      <description>&lt;p&gt;Confira meu script de pós-instalação para o Fedora 43 em 2025.&lt;br&gt;
Em um único comando eu deixo o sistema exatamente do jeito que uso no dia a dia.&lt;br&gt;
Vou te mostrar tudo que instalo, como configuro e por que escolhi cada ferramenta — desde codecs e RPM Fusion até VSCodium com minhas extensões favoritas, Rust, Node LTS, Minikube rootless, Freelens, Seabird, Flatpaks e um GNOME bem tunado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como usar:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Dê permissão de execução&lt;/span&gt;
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x fedora-post-install.sh

&lt;span class="c"&gt;# 2. Execute (vai pedir sua senha várias vezes)&lt;/span&gt;
./fedora-post-install.shs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  O script completo:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# Fedora Workstation – Post-Install 2025&lt;/span&gt;
&lt;span class="c"&gt;# Autor: Matheus Fortunato&lt;/span&gt;
&lt;span class="c"&gt;# Testado em: Fedora 43 (Dezembro 2025)&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[34mAtualizando o sistema...&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf update &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;dnf upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[34mAtivando RPM Fusion (free + nonfree)&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-&lt;span class="si"&gt;$(&lt;/span&gt;rpm &lt;span class="nt"&gt;-E&lt;/span&gt; %fedora&lt;span class="si"&gt;)&lt;/span&gt;.noarch.rpm &lt;span class="se"&gt;\&lt;/span&gt;
  https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-&lt;span class="si"&gt;$(&lt;/span&gt;rpm &lt;span class="nt"&gt;-E&lt;/span&gt; %fedora&lt;span class="si"&gt;)&lt;/span&gt;.noarch.rpm

&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf groupupdate core &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf swap ffmpeg-free ffmpeg &lt;span class="nt"&gt;--allowerasing&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf group upgrade &lt;span class="nt"&gt;--with-optional&lt;/span&gt; Multimedia &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[34mCodecs de vídeo e OpenH264&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; ffmpeg-libs libva libva-utils gstreamer1-plugin-openh264 mozilla-openh264
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf config-manager setopt fedora-cisco-openh264.enabled&lt;span class="o"&gt;=&lt;/span&gt;1

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[34mFlatpak + Flathub&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
flatpak remote-add &lt;span class="nt"&gt;--if-not-exists&lt;/span&gt; flathub https://dl.flathub.org/repo/flathub.flatpakrepo

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[34mApps essenciais para meu trabalho&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;--skip-unavailable&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  easyeffects clangd papirus-icon-theme gparted &lt;span class="se"&gt;\&lt;/span&gt;
  vlc remmina chromium podman-compose kubectl &lt;span class="se"&gt;\&lt;/span&gt;
  bleachbit @virtualization ardour8 kernel-devel gcc make perl

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[34mMinikube (rootless)&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
curl &lt;span class="nt"&gt;-LO&lt;/span&gt; https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
&lt;span class="nb"&gt;sudo &lt;/span&gt;rpm &lt;span class="nt"&gt;-Uvh&lt;/span&gt; minikube-latest.x86_64.rpm
minikube config &lt;span class="nb"&gt;set &lt;/span&gt;rootless &lt;span class="nb"&gt;true

echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[34mVSCodium + minhas extensões favoritas&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
&lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/yum.repos.d/vscodium.repo &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;
[gitlab.com_paulcarroty_vscodium_repo]
name=VSCodium
baseurl=https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/rpms/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; codium
&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; /usr/bin/codium /usr/bin/code

&lt;span class="c"&gt;# Extensões que eu amo&lt;/span&gt;
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; catppuccin.catppuccin-vsc
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; catppuccin.catppuccin-vsc-icons
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; dbaeumer.vscode-eslint
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; esbenp.prettier-vscode
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; prisma.prisma-insider
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; rust-lang.rust-analyzer
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; tonybaloney.vscode-pets
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; dreamcatcher45.podmanager
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; ritwickdey.liveserver
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; adpyke.codesnap
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; tailwind-nuxt.tailwindcss-for-react
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; formulahendry.auto-rename-tag
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; ms-azuretools.vscode-docker
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; redhat.vscode-yaml
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; llvm-vs-code-extensions.vscode-clangd
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; oderwat.indent-rainbow
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; remisa.shellman
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; timonwong.shellcheck
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; mikestead.dotenv
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; wix.vscode-import-cost
code &lt;span class="nt"&gt;--install-extension&lt;/span&gt; yoavbls.pretty-ts-errors

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[34mRust, Node (via NVM) e NPM global&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
curl &lt;span class="nt"&gt;--proto&lt;/span&gt; &lt;span class="s1"&gt;'=https'&lt;/span&gt; &lt;span class="nt"&gt;--tlsv1&lt;/span&gt;.2 &lt;span class="nt"&gt;-sSf&lt;/span&gt; https://sh.rustup.rs | sh &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt;
curl &lt;span class="nt"&gt;-o-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NVM_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.nvm"&lt;/span&gt;
&lt;span class="o"&gt;[&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;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt;
nvm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--lts&lt;/span&gt;
npm i &lt;span class="nt"&gt;-g&lt;/span&gt; yarn pm2 eas-cli

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[34mApps Flatpak (Freelens, Seabird, Obsidian, etc.)&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
flatpak &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; flathub &lt;span class="se"&gt;\&lt;/span&gt;
  app.freelens.Freelens dev.skynomads.Seabird &lt;span class="se"&gt;\&lt;/span&gt;
  com.spotify.Client md.obsidian.Obsidian &lt;span class="se"&gt;\&lt;/span&gt;
  com.microsoft.Edge com.anydesk.Anydesk &lt;span class="se"&gt;\&lt;/span&gt;
  rest.insomnia.Insomnia org.gnome.Solanum

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[34mGNOME: extensões e tweaks&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; gnome-tweaks gnome-extensions-app transmission-gtk
&lt;span class="c"&gt;# Algumas extensões que utilizo no gnome são:&lt;/span&gt;
&lt;span class="c"&gt;# • Dash to Panel&lt;/span&gt;
&lt;span class="c"&gt;# • Arc Menu&lt;/span&gt;
&lt;span class="c"&gt;# • System Monitor&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[34mFinalizando...&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;fwupdmgr refresh &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;fwupdmgr update &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf autoremove &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf clean all

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[1m&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[32mFEDORA PRONTO! Reinicie o sistema e seja feliz :)&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;[0m"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>fedora</category>
      <category>linux</category>
      <category>shell</category>
      <category>bash</category>
    </item>
    <item>
      <title>[PT-BR]30 Comandos Linux que Todo Mundo Deveria Conhecer em 2025</title>
      <dc:creator>matheus fortunato</dc:creator>
      <pubDate>Thu, 27 Nov 2025 14:03:04 +0000</pubDate>
      <link>https://dev.to/mfortunat0/pt-br30-comandos-linux-que-todo-mundo-deveria-conhecer-em-2025-1p9g</link>
      <guid>https://dev.to/mfortunat0/pt-br30-comandos-linux-que-todo-mundo-deveria-conhecer-em-2025-1p9g</guid>
      <description>&lt;h2&gt;
  
  
  1. Navegação e exploração de arquivos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;O que faz&lt;/th&gt;
&lt;th&gt;Exemplo prático&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pwd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mostra onde você está&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/home/neo/Documents&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ls -lha&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lista com permissões, dono, tamanho humano e arquivos ocultos&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ls -lha /etc&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cd -&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Volta para a pasta anterior (troca entre duas pastas rapidamente)&lt;/td&gt;
&lt;td&gt;Você estava em &lt;code&gt;/var/log&lt;/code&gt; → volta para a pasta anterior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tree -L 2 -d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mostra estrutura de pastas até nível 2 (só diretórios)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tree -L 3 ~/projetos&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;code&gt;find / -name "*.conf" 2&amp;gt;/dev/null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Procura arquivos por nome (ignora erros de permissão)&lt;/td&gt;
&lt;td&gt;Procura todos os .conf no sistema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fd "regex"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Alternativa moderna e 10× mais rápida que o find&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fd pdf -e pdf&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;`du -sh * \&lt;/td&gt;
&lt;td&gt;sort -hr`&lt;/td&gt;
&lt;td&gt;Mostra tamanho de tudo na pasta atual, ordenado do maior para o menor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;code&gt;df -hT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Espaço em disco com tipo de sistema de arquivos&lt;/td&gt;
&lt;td&gt;&lt;code&gt;df -hT /&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  2. Visualização e edição de arquivos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;Uso&lt;/th&gt;
&lt;th&gt;Dica 2025&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cat arquivo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mostra conteúdo inteiro&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cat /etc/os-release&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;code&gt;less -N arquivo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Navega com números de linha&lt;/td&gt;
&lt;td&gt;Pressione &lt;code&gt;/palavra&lt;/code&gt; para buscar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bat arquivo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cat com syntax highlight, git integration e número de linha (melhor visual)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;head -20 arquivo&lt;/code&gt; / &lt;code&gt;tail -20&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Primeiras/últimas 20 linhas&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;tail -f /var/log/syslog&lt;/code&gt; → acompanha em tempo real&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nano arquivo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Editor simples&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;vim arquivo&lt;/code&gt; ou &lt;code&gt;nvim&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Editor (aprenda pelo menos &lt;code&gt;i&lt;/code&gt;, Esc, &lt;code&gt;:w&lt;/code&gt;, &lt;code&gt;:q!&lt;/code&gt;, &lt;code&gt;dd&lt;/code&gt;, &lt;code&gt;yy&lt;/code&gt;, &lt;code&gt;p&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Use Neovim, ele está em todos os repositórios&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  3. Gerenciamento de processos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;Descrição&lt;/th&gt;
&lt;th&gt;Exemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;htop&lt;/code&gt; ou &lt;code&gt;btop&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;top bonito e interativo (btop é ainda mais leve)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;`ps aux \&lt;/td&gt;
&lt;td&gt;grep python`&lt;/td&gt;
&lt;td&gt;Lista processos filtrando por nome&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pkill -f "node app.js"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mata processo pelo nome (mais fácil que kill)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kill -9 PID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mata processo na força bruta (SIGKILL)&lt;/td&gt;
&lt;td&gt;Use só quando necessário&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nohup comando &amp;amp;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Roda comando mesmo se você fechar o terminal ou desconectar&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nohup python3 bot.py &amp;amp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. Rede e internet
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;Função&lt;/th&gt;
&lt;th&gt;Exemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;&lt;code&gt;curl ifconfig.me&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Seu IP público&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;&lt;code&gt;curl -I https://site.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Só cabeçalhos HTTP (ótimo para debug)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wget -c URL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Download com resume&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wget -c https://arquivo-grande.iso&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;&lt;code&gt;aria2c -x16 URL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Download ultra-rápido com 16 conexões&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ping -c 4 1.1.1.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Teste básico de conectividade&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;traceroute google.com&lt;/code&gt; ou &lt;code&gt;mtr google.com&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Rota até o destino&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;speedtest-cli&lt;/code&gt; ou &lt;code&gt;fast&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Teste de velocidade&lt;/td&gt;
&lt;td&gt;`curl -s &lt;a href="https://install.speedtest.net/app/cli/install.deb.sh" rel="noopener noreferrer"&gt;https://install.speedtest.net/app/cli/install.deb.sh&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  5. Sistema e diagnóstico
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;O que mostra&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;{% raw %}&lt;code&gt;uname -a&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Tudo sobre kernel, arquitetura, versão&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;lsb_release -a&lt;/code&gt; ou &lt;code&gt;cat /etc/os-release&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Nome e versão da distro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;&lt;code&gt;free -h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Memória RAM e swap usada/livre&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;&lt;code&gt;journalctl -p 3 -xb&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Últimos erros críticos do sistema (systemd)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Bônus: 10 comandos que fazem você parecer hacker na frente dos amigos
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
watch -n 1 "date '+%H:%M:%S'"                    # relógio no terminal
rsync -avzh --progress fonte/ destino/           # cópia perfeita com barra de progresso
tar -czvf backup-$(date +%Y%m%d).tar.gz pasta/   # backup com data no nome
dd if=/dev/urandom of=/dev/sda bs=10M            # destruição segura de disco (CUIDADO!)
history | cut -c 8- | sort | uniq -c | sort -nr | head  # seus comandos mais usados
nc -l -p 1337                                    # abre porta para receber conexão
ssh user@servidor "comandos"                     # executa remoto sem entrar
find . -type f -size +100M -exec ls -lh {} \;    # arquivos maiores que 100 MB
git clone --depth 1 URL                          # clone rápido, só último commit
sudo !!                                         # repete último comando com sudo (salva vidas)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>linux</category>
      <category>webdev</category>
      <category>devops</category>
      <category>development</category>
    </item>
    <item>
      <title>Desvende Python do Zero: O Segredo para Codar como um Gênio em 12 Passos!</title>
      <dc:creator>matheus fortunato</dc:creator>
      <pubDate>Mon, 09 Jun 2025 16:43:41 +0000</pubDate>
      <link>https://dev.to/mfortunat0/desvende-python-do-zero-o-segredo-para-codar-como-um-genio-em-12-passos-kdb</link>
      <guid>https://dev.to/mfortunat0/desvende-python-do-zero-o-segredo-para-codar-como-um-genio-em-12-passos-kdb</guid>
      <description>&lt;h2&gt;
  
  
  🐍 Guia Completo para Iniciantes em Python
&lt;/h2&gt;

&lt;p&gt;Bem-vindo ao mundo do Python! 🎉 Esta é uma das linguagens de programação mais populares, simples e poderosas, perfeita para quem está começando. Este guia apresenta os &lt;strong&gt;12 tópicos fundamentais&lt;/strong&gt; que você precisa dominar para construir uma base sólida. Com explicações claras, exemplos práticos e analogias fáceis, você vai aprender a programar com confiança e dar seus primeiros passos rumo à maestria em Python! 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  1. 📦 Instalação e Configuração do Ambiente
&lt;/h2&gt;

&lt;p&gt;Antes de começar a programar, é necessário configurar seu ambiente. Pense nisso como preparar sua "área de trabalho" para criar projetos incríveis!&lt;/p&gt;

&lt;h3&gt;
  
  
  Passos para Instalar o Python:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Baixe o Python&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acesse &lt;a href="https://www.python.org/downloads/" rel="noopener noreferrer"&gt;python.org/downloads&lt;/a&gt; e baixe a versão mais recente (ex.: Python 3.11 ou superior).&lt;/li&gt;
&lt;li&gt;Durante a instalação, marque a opção &lt;strong&gt;"Add Python to PATH"&lt;/strong&gt; para usar o Python no terminal.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verifique a Instalação&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Abra o terminal (Prompt de Comando no Windows, Terminal no macOS/Linux) e digite:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; python &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;Se aparecer algo como &lt;code&gt;Python 3.11.5&lt;/code&gt;, está tudo pronto! 🎉 Caso contrário, reinstale ou verifique o PATH.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Escolha um Editor&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VS Code&lt;/strong&gt;: Editor leve com extensões para Python (instale a extensão Python da Microsoft).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IDLE&lt;/strong&gt;: Vem com o Python, simples e ótimo para iniciantes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jupyter Notebook&lt;/strong&gt;: Ideal para testar códigos interativamente, como em experimentos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Online&lt;/strong&gt;: Use plataformas como repl.it ou Google Colab para começar sem instalar nada.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Dica para Iniciantes:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Configure o VS Code com a extensão Python e escolha um tema visual (como "Dracula") para tornar a programação mais divertida.&lt;/li&gt;
&lt;li&gt;Teste seu ambiente com um código simples (veja o próximo tópico).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. 📝 Sintaxe Básica
&lt;/h2&gt;

&lt;p&gt;A sintaxe do Python é como aprender a falar uma nova língua: clara, intuitiva e fácil, mas exige prática. Vamos começar com o clássico "Hello, world!".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Imprime uma mensagem na tela
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello, world!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Explicação:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;print()&lt;/code&gt;&lt;/strong&gt;: Função que exibe texto no console.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;"Hello, world!"&lt;/code&gt;&lt;/strong&gt;: Uma string (texto entre aspas simples ou duplas).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identação&lt;/strong&gt;: Python usa espaços (geralmente 4) para organizar o código. Esquecer a identação causa erros!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Comentários:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;#&lt;/code&gt; para adicionar notas que o Python ignora:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="c1"&gt;# Isso é um comentário, como uma anotação no seu caderno
&lt;/span&gt;  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Isso aparece!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Comentário após o código
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Analogia:
&lt;/h3&gt;

&lt;p&gt;Pense no &lt;code&gt;print()&lt;/code&gt; como um alto-falante que anuncia sua mensagem, e nos comentários como lembretes pessoais que só você lê.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prática:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Escreva &lt;code&gt;print("Seu nome")&lt;/code&gt; substituindo por seu nome e execute para ver o resultado.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. 🔢 Tipos de Dados Primitivos Assert
&lt;/h2&gt;

&lt;p&gt;Dados são os "ingredientes" do seu código. Python tem quatro tipos de dados básicos que você precisa conhecer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Maria&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;       &lt;span class="c1"&gt;# String: texto, como nomes ou frases
&lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;           &lt;span class="c1"&gt;# Int: números inteiros, como idades
&lt;/span&gt;&lt;span class="n"&gt;altura&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.68&lt;/span&gt;        &lt;span class="c1"&gt;# Float: números decimais, como alturas
&lt;/span&gt;&lt;span class="n"&gt;ativo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;         &lt;span class="c1"&gt;# Bool: verdadeiro ou falso, como um interruptor
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conversão de Tipos:
&lt;/h3&gt;

&lt;p&gt;Às vezes, você precisa transformar um tipo em outro:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;idade_texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;30&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;          &lt;span class="c1"&gt;# String
&lt;/span&gt;&lt;span class="n"&gt;idade_numero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;idade_texto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Converte para inteiro
&lt;/span&gt;&lt;span class="n"&gt;altura_texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.75&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;       &lt;span class="c1"&gt;# String
&lt;/span&gt;&lt;span class="n"&gt;altura_numero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;altura_texto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Converte para decimal
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Dica para Iniciantes:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;type(variavel)&lt;/code&gt; para verificar o tipo de uma variável:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;lt;class 'str'&amp;gt;
&lt;/span&gt;  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;idade&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# &amp;lt;class 'int'&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Analogia:
&lt;/h3&gt;

&lt;p&gt;Tipos de dados são como diferentes formatos de arquivos (texto, números, etc.). Converter tipos é como mudar um arquivo de PDF para Word para editá-lo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prática:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Teste: &lt;code&gt;idade = "25"; print(int(idade) + 5)&lt;/code&gt; (saída: &lt;code&gt;30&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. ➕ Operadores
&lt;/h2&gt;

&lt;p&gt;Operadores são as "ferramentas" do Python para realizar cálculos e comparações, como uma calculadora avançada.&lt;/p&gt;

&lt;h3&gt;
  
  
  Aritméticos:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;soma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;        &lt;span class="c1"&gt;# 8
&lt;/span&gt;&lt;span class="n"&gt;subtracao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;  &lt;span class="c1"&gt;# 8
&lt;/span&gt;&lt;span class="n"&gt;multiplicacao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;  &lt;span class="c1"&gt;# 8
&lt;/span&gt;&lt;span class="n"&gt;divisao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;    &lt;span class="c1"&gt;# 5.0
&lt;/span&gt;&lt;span class="n"&gt;potencia&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;   &lt;span class="c1"&gt;# 8
&lt;/span&gt;&lt;span class="n"&gt;modulo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;     &lt;span class="c1"&gt;# 1 (resto da divisão)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Comparação:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="c1"&gt;# True (maior que)
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="c1"&gt;# False (igualdade)
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="c1"&gt;# False (diferente)
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="c1"&gt;# True (menor ou igual)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Lógicos:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# False (ambos precisam ser True)
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# True (um precisa ser True)
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="c1"&gt;# False (inverte o valor)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Analogia:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Aritméticos são como misturar ingredientes em uma receita (somar, dividir).&lt;/li&gt;
&lt;li&gt;Comparações são como verificar se a receita está no ponto certo.&lt;/li&gt;
&lt;li&gt;Lógicos são como combinar condições para tomar decisões.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prática:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Teste: &lt;code&gt;print(7 % 2)&lt;/code&gt; (saída: &lt;code&gt;1&lt;/code&gt;, indicando que 7 é ímpar).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. 🔁 Controle de Fluxo
&lt;/h2&gt;

&lt;p&gt;Controle de fluxo é como tomar decisões ou repetir ações, como escolher um caminho ou repetir uma tarefa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Condicionais (&lt;code&gt;if&lt;/code&gt;):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;idade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;idade&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Maior de idade&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Identação é obrigatória!
&lt;/span&gt;&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;idade&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Adolescente&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Criança “Criança&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Laços de Repetição:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For&lt;/strong&gt;: Repete para cada item em uma sequência:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;  &lt;span class="c1"&gt;# 0, 1, 2, 3, 4
&lt;/span&gt;      &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;While&lt;/strong&gt;: Repete enquanto uma condição é verdadeira:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;contador&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;contador&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Contando:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;contador&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;contador&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;  &lt;span class="c1"&gt;# Incrementa para evitar loop infinito
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Analogia:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;if&lt;/code&gt; é como decidir o que fazer com base em uma condição (ex.: se está chovendo, pegue um guarda-chuva).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;for&lt;/code&gt; é como repetir um exercício um número fixo de vezes.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;while&lt;/code&gt; é como continuar correndo até atingir uma meta.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prática:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Escreva um &lt;code&gt;if&lt;/code&gt; que verifica se um número é positivo ou negativo.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. 📦 Estruturas de Dados
&lt;/h2&gt;

&lt;p&gt;Estruturas de dados são como "caixas" para organizar informações. Python tem quatro tipos principais:&lt;/p&gt;

&lt;h3&gt;
  
  
  Lista:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Coleção mutável (pode ser alterada):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;frutas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maçã&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;banana&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;uva&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frutas&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;span class="c1"&gt;# maçã
&lt;/span&gt;  &lt;span class="n"&gt;frutas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;laranja&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Adiciona ao final
&lt;/span&gt;  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frutas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;         &lt;span class="c1"&gt;# ['maçã', 'banana', 'uva', 'laranja']
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tupla:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Coleção imutável (não pode mudar):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;coordenadas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coordenadas&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;span class="c1"&gt;# 10
&lt;/span&gt;  &lt;span class="c1"&gt;# coordenadas[0] = 5  # Erro! Tuplas são fixas
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Dicionário:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pares chave-valor, como um catálogo:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;aluno&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nome&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;João&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;idade&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aluno&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nome&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;  &lt;span class="c1"&gt;# João
&lt;/span&gt;  &lt;span class="n"&gt;aluno&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nota&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;8.5&lt;/span&gt;   &lt;span class="c1"&gt;# Adiciona nova chave
&lt;/span&gt;  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aluno&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="c1"&gt;# {'nome': 'João', 'idade': 22, 'nota': 8.5}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conjunto (Set):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Coleção de itens únicos, sem duplicatas:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;numeros&lt;/span&gt; &lt;span class="o"&gt;=&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;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# {1, 2, 3} (remove duplicatas)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Analogia:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Listas são como uma lista de compras que você pode editar.&lt;/li&gt;
&lt;li&gt;Tuplas são como uma lista fixa gravada em pedra.&lt;/li&gt;
&lt;li&gt;Dicionários são como um fichário com informações organizadas por chaves.&lt;/li&gt;
&lt;li&gt;Conjuntos são como uma lista de convidados únicos para uma festa.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prática:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Crie uma lista com 3 cores favoritas e adicione uma quarta com &lt;code&gt;append&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. 🧠 Funções
&lt;/h2&gt;

&lt;p&gt;Funções são como "receitas" que você pode reutilizar: defina os passos e chame quando precisar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;saudacao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Olá, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# f-string para formatar texto
&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;saudacao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ana&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Olá, Ana!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Parâmetros e Escopo:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Variáveis dentro de funções são locais:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;  &lt;span class="c1"&gt;# Variável global
&lt;/span&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;exemplo&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
      &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;  &lt;span class="c1"&gt;# Variável local
&lt;/span&gt;      &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# 5
&lt;/span&gt;  &lt;span class="nf"&gt;exemplo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# 10 (global não muda)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Analogia:
&lt;/h3&gt;

&lt;p&gt;Uma função é como uma receita de bolo: você define os ingredientes (parâmetros) e os passos, e pode usá-la várias vezes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prática:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Crie uma função que receba um número e retorne seu quadrado.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. 📚 Módulos e Bibliotecas
&lt;/h2&gt;

&lt;p&gt;Módulos são como "caixas de ferramentas" com funções prontas para usar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# 4.0 (raiz quadrada)
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&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;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Número aleatório entre 1 e 10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Como Usar:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;import&lt;/code&gt;&lt;/strong&gt;: Carrega o módulo no seu código.&lt;/li&gt;
&lt;li&gt;Instale bibliotecas externas com:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  pip &lt;span class="nb"&gt;install &lt;/span&gt;nome_da_biblioteca
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Prática:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Teste &lt;code&gt;random.choice(["maçã", "banana", "uva"])&lt;/code&gt; para escolher uma fruta aleatoriamente.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. 🔤 Manipulação de Strings
&lt;/h2&gt;

&lt;p&gt;Strings são como frases que você pode editar, cortar ou transformar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; Python é incrível &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;      &lt;span class="c1"&gt;# Remove espaços: "Python é incrível"
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;      &lt;span class="c1"&gt;# Maiúsculo: " PYTHON É INCRÍVEL "
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# True (verifica se contém)
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&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="c1"&gt;# ['Python', 'é', 'incrível']
&lt;/span&gt;
&lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lucas&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Olá, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# f-string: Olá, Lucas!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Analogia:
&lt;/h3&gt;

&lt;p&gt;Strings são como argila: você pode moldá-las com métodos como &lt;code&gt;strip()&lt;/code&gt;, &lt;code&gt;upper()&lt;/code&gt; ou &lt;code&gt;split()&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prática:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Teste: &lt;code&gt;texto = "1,2,3"; print(texto.split(","))&lt;/code&gt; (saída: &lt;code&gt;['1', '2', '3']&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  10. 📁 Manipulação de Arquivos
&lt;/h2&gt;

&lt;p&gt;Arquivos são como cadernos onde você armazena ou lê informações.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Escrevendo em um arquivo
&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;arquivo.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Olá, mundo!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Lendo o arquivo
&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;arquivo.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;conteudo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conteudo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Olá, mundo!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Explicação:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;with&lt;/code&gt;&lt;/strong&gt;: Garante que o arquivo seja fechado após o uso.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;"w"&lt;/code&gt;&lt;/strong&gt;: Modo escrita (sobrescreve o arquivo).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;"r"&lt;/code&gt;&lt;/strong&gt;: Modo leitura.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prática:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Crie um arquivo &lt;code&gt;.txt&lt;/code&gt; com seu nome e leia-o.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  11. ⚠️ Tratamento de Erros
&lt;/h2&gt;

&lt;p&gt;Erros são como obstáculos, mas você pode contorná-los com estratégia!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Digite um número: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Entrada inválida! Digite um número.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;ZeroDivisionError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Não pode dividir por zero!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Explicação:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;try&lt;/code&gt;&lt;/strong&gt;: Testa o código que pode falhar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;except&lt;/code&gt;&lt;/strong&gt;: Captura erros específicos e responde.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prática:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Escreva um código que peça dois números e divida o primeiro pelo segundo, tratando erros.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  12. 🧼 Boas Práticas
&lt;/h2&gt;

&lt;p&gt;Para escrever código profissional:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nomes Claros&lt;/strong&gt;: Use &lt;code&gt;idade_usuario&lt;/code&gt; em vez de &lt;code&gt;x&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comente o Código&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="c1"&gt;# Calcula a média de notas
&lt;/span&gt;  &lt;span class="n"&gt;notas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="n"&gt;media&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Funções Reutilizáveis&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calcular_media&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;notas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identação&lt;/strong&gt;: Use 4 espaços (Python é exigente!).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Analogia:
&lt;/h3&gt;

&lt;p&gt;Código limpo é como uma mesa organizada: tudo no lugar facilita o trabalho.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prática:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reescreva o cálculo da média acima usando uma função com nome claro.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ Exercícios para Fixação
&lt;/h2&gt;

&lt;p&gt;Pratique para solidificar seu aprendizado! 🚀&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Saudação&lt;/strong&gt;: Peça o nome do usuário com &lt;code&gt;input()&lt;/code&gt; e imprima "Olá, [nome]!".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Soma&lt;/strong&gt;: Crie uma função que receba dois números e retorne a soma.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loop&lt;/strong&gt;: Imprima os números de 1 a 10 com um &lt;code&gt;for&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lista&lt;/strong&gt;: Crie uma lista&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Bun.js e Deno.js: uma comparação detalhada</title>
      <dc:creator>matheus fortunato</dc:creator>
      <pubDate>Tue, 10 Oct 2023 20:16:48 +0000</pubDate>
      <link>https://dev.to/mfortunat0/bunjs-e-denojs-uma-comparacao-detalhada-4c1</link>
      <guid>https://dev.to/mfortunat0/bunjs-e-denojs-uma-comparacao-detalhada-4c1</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introdução&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bun.js e Deno.js são dois runtimes JavaScript modernos que oferecem uma variedade de recursos e benefícios. Ambos são opções populares para desenvolvedores que desejam criar aplicativos web, APIs e outros serviços.&lt;br&gt;
&lt;strong&gt;Instalação&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bun.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para instalar o Bun.js, execute o seguinte comando no terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install bun -g
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso instalará o Bun.js globalmente no seu sistema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deno.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para instalar o Deno.js, siga as instruções no site oficial: &lt;a href="https://deno.land/manual/getting_started/installation" rel="noopener noreferrer"&gt;https://deno.land/manual/getting_started/installation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similaridades&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ambos os runtimes são baseados no V8, o motor JavaScript do Chrome.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ambos suportam TypeScript, um superconjunto de JavaScript que fornece tipagem estática.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ambos são compatíveis com um amplo conjunto de bibliotecas e frameworks JavaScript.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Diferenças&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bun.js é um runtime all-in-one que inclui um gerenciador de pacotes, um bundler e um test runner.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deno.js é um runtime modular que não inclui nenhum pacote ou ferramenta por padrão.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bun.js é mais rápido do que Deno.js em alguns benchmarks.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deno.js é mais seguro do que Bun.js, pois bloqueia o acesso a recursos do sistema local por padrão.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bun.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bun.js é um runtime JavaScript all-in-one que inclui um gerenciador de pacotes, um bundler e um test runner. Isso torna o desenvolvimento de aplicativos JavaScript mais fácil e rápido. Bun.js também é considerado mais fácil de usar do que Deno.js.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vantagens de Bun.js&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rápido:&lt;/strong&gt; Bun.js foi mais rápido do que Deno.js em alguns benchmarks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seguro:&lt;/strong&gt; Bun.js bloqueia o acesso a recursos do sistema local por padrão, o que ajuda a proteger seu aplicativo contra ataques.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fácil de usar:&lt;/strong&gt; Bun.js é considerado mais fácil de usar do que Deno.js.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens de Bun.js&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Não tão modular quanto Deno.js:&lt;/strong&gt; Bun.js inclui um gerenciador de pacotes, um bundler e um test runner, o que pode ser desnecessariamente complexo para alguns desenvolvedores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Não tão seguro quanto Deno.js por padrão:&lt;/strong&gt; Bun.js bloqueia o acesso a recursos do sistema local por padrão, mas isso pode ser desativado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Deno.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Deno.js é um runtime JavaScript modular que não inclui nenhum pacote ou ferramenta por padrão. Isso dá aos desenvolvedores mais controle sobre seu ambiente de desenvolvimento. Deno.js também é considerado mais seguro do que Bun.js.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vantagens de Deno.js&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modular:&lt;/strong&gt; Deno.js não inclui nenhum pacote ou ferramenta por padrão, o que dá aos desenvolvedores mais controle sobre seu ambiente de desenvolvimento.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seguro:&lt;/strong&gt; Deno.js bloqueia o acesso a recursos do sistema local por padrão, o que ajuda a proteger seu aplicativo contra ataques.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens de Deno.js&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Não tão rápido quanto Bun.js:&lt;/strong&gt; Deno.js foi mais lento do que Bun.js em alguns benchmarks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mais difícil de usar do que Bun.js:&lt;/strong&gt; Deno.js pode ser mais difícil de usar do que Bun.js, pois os desenvolvedores precisam instalar seus próprios pacotes e ferramentas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Recomendações&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Se você está procurando um runtime JavaScript rápido, seguro e fácil de usar, Bun.js é uma ótima opção.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se você está procurando um runtime JavaScript modular com uma ampla gama de recursos, Deno.js é uma ótima opção.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Adicionais&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compatibilidade com sistemas operacionais:&lt;/strong&gt; Bun.js é compatível com Linux, macOS e Windows. Deno.js é compatível com Linux, macOS, Windows, FreeBSD, OpenBSD, Android e iOS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compatibilidade com npm e pacotes node.js:&lt;/strong&gt; Bun.js é compatível com npm e pacotes node.js. Deno.js não é compatível com npm e pacotes node.js por padrão, mas pode ser instalado usando o comando &lt;code&gt;deno install&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Exemplos de código&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bun.js&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Um exemplo simples de servidor HTTP&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;serve&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bun&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;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;serve&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello, world!&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Deno&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Um exemplo simples de servidor HTTP&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;serve&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://deno.land/x/oak@v1.17.0/mod.ts&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;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;serve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;body&lt;/span&gt;&lt;span class="p"&gt;();&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="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bun.js e Deno.js são ambos runtimes JavaScript modernos com suas próprias vantagens e desvantagens. A melhor escolha para você dependerá das suas necessidades e preferências específicas.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>deno</category>
      <category>bunjs</category>
      <category>node</category>
    </item>
    <item>
      <title>[PT-BR]Guia instalando Node.js em ambientes linux Manjaro/Fedora/Ubuntu</title>
      <dc:creator>matheus fortunato</dc:creator>
      <pubDate>Tue, 07 Sep 2021 20:32:18 +0000</pubDate>
      <link>https://dev.to/mfortunat0/pt-br-guia-instalando-node-js-em-ambientes-linux-manjaro-fedora-ubuntu-nom</link>
      <guid>https://dev.to/mfortunat0/pt-br-guia-instalando-node-js-em-ambientes-linux-manjaro-fedora-ubuntu-nom</guid>
      <description>&lt;p&gt;Ola, irei te guiar em como instalar Node.js nos ambientes linux mais famosos, provavelmente você já deva ter utilizado ou utilizava uma das distros da imagem acima.&lt;/p&gt;

&lt;p&gt;Antes de começarmos as instalações, e preciso saber que o Node.js possui versões LTS e as para testes. neste caso iremos utilizar as LTS pois são seguras, a versão LTS enquanto escrevo esta na 14.17.6 como a imagem abaixo mostrara:&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Axgi54s5frErT8xoix86HHg.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Axgi54s5frErT8xoix86HHg.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao entrar na aba “downloads” existem varias maneiras de instalar-mos como por exemplo por arquivos binários. As maneiras que iremos utilizar sera via “package manager” e Snap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalação via Package Manager
&lt;/h2&gt;

&lt;p&gt;Das três distros que iremos utilizar teremos packages manager Apt para o Ubuntu, Dnf/Yum para Fedora, Pacman para Manjaro. Bom chega de enrolação e vamos abrir o terminal e começar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ubuntu
&lt;/h3&gt;

&lt;p&gt;Antes de tudo, veja se seu ubuntu possui o pacote Curl, caso não, apenas instale-o com comando abaixo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install curl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Tendo agora o Curl, basta executarmos os comandos abaixo:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -

sudo apt-get install -y nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Caso queira consultar de onde tirei estas linhas de comandos, estarão no próprio site do Node.js, no repositório &lt;strong&gt;distributions&lt;/strong&gt; da &lt;strong&gt;nodesource&lt;/strong&gt; hospedado no github.&lt;/p&gt;
&lt;h3&gt;
  
  
  Fedora
&lt;/h3&gt;

&lt;p&gt;Bom acredito que das três distro, fedora facilita muito para instalar o Node.js pois ele já o possui em seu repositório do workstation, então basta apenas um comando:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo dnf install nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Manjaro
&lt;/h3&gt;

&lt;p&gt;No manjaro caso tente instalar o pacote “nodejs” você obterá a versão mais atual do Node e não a LTS, não e isto que queremos. Entao para instalarmos a LTS acesse pagina oficial do Arch linux e acesse a aba &lt;strong&gt;packages&lt;/strong&gt;ou &lt;a href="https://archlinux.org/packages/" rel="noopener noreferrer"&gt;clique aqui&lt;/a&gt;, procure pelas palavras chaves “node” e “lts” como na imagem abaixo:&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%2Fcdn-images-1.medium.com%2Fmax%2F2732%2F1%2Afp-ENptv3Rg1kOtI7G-lHg.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2732%2F1%2Afp-ENptv3Rg1kOtI7G-lHg.png" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repare que obtive como resultado a versão 14.17.4 nomeada &lt;strong&gt;nodejs-lts-fermium&lt;/strong&gt;, basta instalarmos o mesmo agora junto com Npm:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S nodejs-lts-fermium npm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Testando Node.js
&lt;/h2&gt;

&lt;p&gt;Feito isso, basta executarmos o seguinte comando para checar qual a versão do Node e Npm foi instalada:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node -v &amp;amp;&amp;amp; npm -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Vamos executar um arquivo javascript:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo 'console.log("Hello World")' &amp;gt; index.js
node index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Se tudo der certo, devera exibir no console o famoso “Hello World”.&lt;/p&gt;

&lt;p&gt;Caso houver erro “command not found”, tente fechar o terminal aberto e abrir novamente e testar novamente. Em ultimo caso tente um reboot em sua maquina.&lt;/p&gt;
&lt;h2&gt;
  
  
  Instalação via Snap
&lt;/h2&gt;

&lt;p&gt;Node.js também possui seu pacote Snap podendo ser facilmente instalado via Snap, veja abaixo como instalá-lo:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo snap install node --classic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Apos instalar basta fechar o terminal e abri-lo novamente e fazer seu teste.&lt;/p&gt;
&lt;h2&gt;
  
  
  Node Manager Version
&lt;/h2&gt;

&lt;p&gt;Node.js também possui seu próprio gerenciador de versões caso você precise manusear mais de uma versão do Node.js. Veja como e simples instalar e utilizar o &lt;strong&gt;nvm&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Instalação
&lt;/h3&gt;

&lt;p&gt;Acessando o repository oficial do &lt;a href="https://github.com/nvm-sh/nvm" rel="noopener noreferrer"&gt;nvm no github&lt;/a&gt;, terá um guia para instalação bem simples optando por uso do Curl ou Wget.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Escolhido uma das duas opções, basta agora adicionar ao seu arquivo “~/.bash_profile” , “~/.zshrc” “~/.profile” ou “~/.bashrc” as seguintes linhas:&lt;br&gt;&lt;/p&gt;

&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Os arquivos que variam pelo shell você utiliza. Agora basta fechar e abrir um novo terminal e testar o nvm com comando:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvm -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Comandos básicos utilizando NVM
&lt;/h3&gt;

&lt;p&gt;Listando versões do node instaladas&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvm ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Listando todas versões possível para instalação&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvm ls-remote
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Instalando outras versões do node&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvm install 14.7.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Indicar qual versão utilizar no ambiente atual&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvm use 14.7.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Bom, agora já podemos estudar/testar muita coisa fornecida pelo Node.js.&lt;/p&gt;

&lt;p&gt;Espero que este artigo tenha sido util e se puder deixe um aplauso 👋&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>linux</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>[PT-BR] Iniciando em Next.js</title>
      <dc:creator>matheus fortunato</dc:creator>
      <pubDate>Fri, 27 Aug 2021 13:29:04 +0000</pubDate>
      <link>https://dev.to/mfortunat0/iniciando-em-next-js-46me</link>
      <guid>https://dev.to/mfortunat0/iniciando-em-next-js-46me</guid>
      <description>&lt;p&gt;Muito se fala do framework Next.js quando o assunto e React.js, caso não conheça, te darei uma introdução do quão fantástico e este framework e seus benefícios para desenvolvimento frontend web.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é Next.js?
&lt;/h2&gt;

&lt;p&gt;É um framework web desenvolvido pela &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; para desenvolvimento frontend React que permite funcionalidades como renderização do lado do servidor e geração de site estático.&lt;/p&gt;

&lt;h2&gt;
  
  
  Renderização do lado do servidor?
&lt;/h2&gt;

&lt;p&gt;Em um aplicativo React tradicional, todo o aplicativo é carregado e renderizado no cliente. Next.js permite que o carregamento da primeira página seja processado pelo servidor, o que é ótimo para SEO e desempenho, por exemplo se desabilitarmos o Javascript do browser, nada será exibido em uma aplicação com React puro, porem com Next.js você percebera que mesmo desabilitado será renderizado todo App.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outros benefícios do Next.js
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Roteamento de página fácil&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rotas Api do servidor&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Geração de site estático&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fácil implantação&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Crie o primeiro projeto Next.js.
&lt;/h2&gt;

&lt;p&gt;Para criar um projeto Next.js, você pode usar o prático comando:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-next-app my-app-next
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Next.js existem também, templates prontos assim como há no &lt;strong&gt;create-react-app&lt;/strong&gt;, por exemplo este template com Typescript:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-next-app --example with-typescript with-typescript-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Para mais templates, acesse o próprio repositório da &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; no &lt;a href="https://github.com/vercel/next.js/tree/canary/examples" rel="noopener noreferrer"&gt;Github&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Iniciando a Aplicação
&lt;/h2&gt;

&lt;p&gt;Criado a estrutura com primeiro comando citado acima, abra o seu terminal e navegue ate a pasta do projeto gerado. Para iniciar o projeto como desenvolvimento, use o script &lt;strong&gt;dev.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Acessando seu &lt;a href="http://localhost:3000/" rel="noopener noreferrer"&gt;Localhost&lt;/a&gt; na porta 3000, vera sua aplicação em execução.&lt;/p&gt;

&lt;h2&gt;
  
  
  Entendendo a estrutura de arquivos do Next
&lt;/h2&gt;

&lt;p&gt;Abrindo a pasta do projeto em seu editor de código ou IDE da sua escolha, em meu caso estarei utilizando o &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code da microsoft&lt;/a&gt;, teremos a seguinte estrutura de pastas:&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AV3NIozWU5pZk_AC1HSv9Bg.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AV3NIozWU5pZk_AC1HSv9Bg.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesta estrutura temos 3 pastas &lt;strong&gt;pages *&lt;em&gt;| **public *&lt;/em&gt;| **styles&lt;/strong&gt;, sendo “pages” e “public” pastas especiais para o Next, deixe-me explicar melhor como estas duas pastas funcionam.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roteamento
&lt;/h2&gt;

&lt;p&gt;Com Next não precisamos de uma biblioteca de roteamento, pois cada arquivo dentro da pasta **pages **será tratado como uma pagina.&lt;/p&gt;

&lt;p&gt;Vamos brincar com o roteamento do Next criando um novo arquivo chamado &lt;strong&gt;home.js&lt;/strong&gt; e criando um simples componente como código abaixo:&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%2Fcdn-images-1.medium.com%2Fmax%2F2068%2F1%2AF073RB7nS5VE6IIij2r_iw.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2068%2F1%2AF073RB7nS5VE6IIij2r_iw.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao acessar nosso &lt;a href="http://localhost:3000/home" rel="noopener noreferrer"&gt;Localhost:3000/home&lt;/a&gt; será exibido nosso componente recém criado.&lt;/p&gt;

&lt;p&gt;E se quiséssemos rotas como &lt;a href="http://localhost:3000/profile/home" rel="noopener noreferrer"&gt;Localhost:3000/profile/home&lt;/a&gt; ? para isto, podemos criar subpastas dentro da pasta &lt;strong&gt;pages&lt;/strong&gt;, como no exemplo acima, bastaria criar uma pasta &lt;strong&gt;profile **e mover nosso arquivo **home.js **para **profile&lt;/strong&gt; e acessarmos novamente.&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ASbsCikcMdJ10qMF3Q6AyKw.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ASbsCikcMdJ10qMF3Q6AyKw.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Rotas dinâmicas
&lt;/h2&gt;

&lt;p&gt;Imagine que você tem um blog, e cada postagem possui um arquivo JS, falando de 1 ou 2 ou ate mesmo 3 postagens não seria grande um grande problema, mas, caso esse mesmo blog já tivesse anos de vida com muitas postagens, seria trabalhoso ter tantos arquivos não acha?. Trabalhando Next podemos usar as rotas dinâmicas.&lt;/p&gt;

&lt;p&gt;Vamos criar uma pasta **posts **dentro da **pages **e dentro da mesma criarmos um arquivo chamado [slug].js, sim um arquivo com colchetes em seu nome, o nome “slug” entre colchetes não necessariamente precisa ser este, poderia escolher outro, mas, será usado este para este exemplo.&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Ac9y_LJMJwh_Cfn5iv6yZbg.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Ac9y_LJMJwh_Cfn5iv6yZbg.png" width="257" height="147"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next nos proporciona o Hook &lt;strong&gt;useRouter **que através dele podemos acessar as **query params&lt;/strong&gt; da nossa rota, veja um exemplo abaixo do uso desse Hook.&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%2Fcdn-images-1.medium.com%2Fmax%2F2028%2F1%2AwbhY4xqp_esqmwmKcx5zQQ.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2028%2F1%2AwbhY4xqp_esqmwmKcx5zQQ.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se acessarmos agora por exemplo &lt;a href="http://localhost:3000/posts/20" rel="noopener noreferrer"&gt;localhost:3000/posts/20&lt;/a&gt; , será exibido nosso H1 com conteúdo “Post - 20”.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Navegação entre rotas&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Entendendo agora com funciona o roteamento provido pelo Next, para navegar entre nossas paginas não devemos usar a Tag &lt;a&gt;&lt;/a&gt; e sim um componente Link fornecido pelo próprio Next.&lt;br&gt;
Dentro da rota Profile altere a pagina Home, veja como farei a seguir.&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AHDDxc5MpxhjoMg6bI7dxUQ.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AHDDxc5MpxhjoMg6bI7dxUQ.png" width="405" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Acessando &lt;a href="http://localhost:3000/profile/home" rel="noopener noreferrer"&gt;localhost:3000/profile/home&lt;/a&gt; terá um titulo “Hello Next” e logo abaixo nosso link “Go Post 25”. Ao clicar seremos redirecionado para nossa rota Post obtendo Post 25 pois a mesma e uma rota dinâmica. Caso tenha reparado, ao clicar a pagina muda mas não a um carregamento completo pelo navegador.&lt;/p&gt;

&lt;p&gt;Ah outra maneira para forçarmos um redirecionamento, usando o Hook useRouter, veja:&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AIcy3FW29is5QR7LPHp5X3g.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AIcy3FW29is5QR7LPHp5X3g.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adicionando essa condicional onde apenas podemos ver Posts acima do 10, caso seja inferior seremos redirecionados a pagina inicial (&lt;strong&gt;index.js&lt;/strong&gt;) do Next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Componente Head
&lt;/h2&gt;

&lt;p&gt;Assim como componente Link, Next fornece a tag de cabeçalho como título ou meta, você precisa usar o componente Head. Vamos adiciona-lo a nossa pagina Home.&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AktOtTcl_pUn7XFtHCG9wLA.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AktOtTcl_pUn7XFtHCG9wLA.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora nossa pagina Home possui um titulo próprio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Imagens e Otimização de Imagens
&lt;/h2&gt;

&lt;p&gt;Por padrão, Next consegue servir todos os arquivos contidos na pasta Public, como Imagens, Svgs etc…&lt;br&gt;
Next também nos fornece um componente para otimização automática para imagens, As imagens são carregadas lentamente por padrão sem comprometer a velocidade da pagina. Vamos aplicar este componente a nossa pagina Home.&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2At9gv_FI3kBqaWoYuJfYDJw.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2At9gv_FI3kBqaWoYuJfYDJw.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Neste exemplo usei esta &lt;a href="https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Nextjs-logo.svg/1280px-Nextjs-logo.svg.png" rel="noopener noreferrer"&gt;imagem&lt;/a&gt; retirada da Wikipedia, apenas basta baixá-la, mover para pasta Public do Next e nomeá-la como NextImage.png.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pagina 404
&lt;/h2&gt;

&lt;p&gt;Next possui uma pagina para respostas 404 - not found, para checarmos basta tentarmos acessar uma rota que não existe como por exemplo: &lt;a href="http://localhost:3000/random" rel="noopener noreferrer"&gt;http://localhost:3000/random&lt;/a&gt;&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A4wiPAoBm-unHX3pSll1oxA.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A4wiPAoBm-unHX3pSll1oxA.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos personalizá-la conforme desejar, basta criarmos dentro da **pages **um arquivo 404.js contendo um simples componente em React.&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A5XAh1Bmd5DUYj2ilzSct0g.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A5XAh1Bmd5DUYj2ilzSct0g.png" width="800" height="400"&gt;&lt;/a&gt;&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ASnXc3UzijyyxrAXyYiOpGA.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ASnXc3UzijyyxrAXyYiOpGA.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Server Side Rendering
&lt;/h2&gt;

&lt;p&gt;Bom antes de falarmos de Renderização do lado do servidor, vamos entender como uma aplicação com React que consome uma API funciona.&lt;br&gt;
Quando temos um App feito em React, ao ser acessado nossa pagina ira carregar e logo apos sera feita a consulta em uma API, pro nosso SEO isso não e algo bom, pois os motores de busca não esperam uma busca por API. para isso usamos Server Side Rendering provido do Next.js.&lt;/p&gt;

&lt;p&gt;Vamos Implementar em nossa pagina Home e veja como e simples.&lt;br&gt;
Para falarmos para Next que esta pagina precisa de renderização do lado do servidor, basta adicionarmos um método assíncrono chamado &lt;strong&gt;getServerSideProps&lt;/strong&gt; a este retornara um objeto contendo a propriedade Props que e o Props que nosso componente ira receber em sua construção.&lt;br&gt;
Usarei uma Fake Rest Api, caso queira consultar o site &lt;a href="https://jsonplaceholder.typicode.com/" rel="noopener noreferrer"&gt;**jsonplaceholder&lt;/a&gt;.**&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ALBUz2j8q1nAaF0L7tZDdiA.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ALBUz2j8q1nAaF0L7tZDdiA.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Adicionando Typescript&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Adicionar Typescript em projetos Next, não e algo complexo, basta adicionarmos as seguintes dependências:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install typescript @types/react @types/node -D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Por fim, altere as extensões das paginas .js e .jsx para .ts e .tsx, inicie o projeto em desenvolvimento, será gerado automaticamente o arquivo tsconfig.json e seu projeto já esta funcionando com todos benefícios do Typescript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fim
&lt;/h2&gt;

&lt;p&gt;Obrigado por ter chego ate aqui, espero que este conteúdo tenha te agregado algum conhecimento. Caso queira ver código por completo acesse meu &lt;a href="https://github.com/mfortunat0/medium-posts/tree/master/starting-at-nextjs" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Javascript: Indo além do console.log()</title>
      <dc:creator>matheus fortunato</dc:creator>
      <pubDate>Wed, 30 Jun 2021 01:31:11 +0000</pubDate>
      <link>https://dev.to/mfortunat0/javascript-indo-alem-do-console-log-m7d</link>
      <guid>https://dev.to/mfortunat0/javascript-indo-alem-do-console-log-m7d</guid>
      <description>&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%2Fcdn-images-1.medium.com%2Fmax%2F2334%2F1%2AQVZFTh_70amHpzQvb8olng.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2334%2F1%2AQVZFTh_70amHpzQvb8olng.png" alt="[undraw](https://undraw.co/)" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se você desenvolve em Javascript, com certeza já deva ter usado muito o método &lt;strong&gt;log&lt;/strong&gt; do objeto console. Porem, ele não e o único meto que este objeto possui, continue lendo para ver outros métodos que podem ser muito uteis.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Índice&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;assert&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;dir&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;table&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;time &amp;amp; timeEnd&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;warn &amp;amp; error&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;clear&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Assert
&lt;/h2&gt;

&lt;p&gt;Exibe uma mensagem caso a expressão passada resulte em falha. Sua mensagem pode ser tanto uma String, Array ou Objeto.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Veja no exemplo acima, em “ Outro exemplo ”, podemos testar se um objeto possui uma propriedade, e caso não tenha será nos alertado, caso contrario não mudara em nada e não poluirá nossos logs.

&lt;p&gt;Detalhe, caso esteja usando Node.js, os efeitos são diferentes. Caso a expressão falhe, será gerado um &lt;em&gt;AssertionError.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Dir
&lt;/h2&gt;

&lt;p&gt;Exibe uma lista interativa das propriedades do objeto. Muito útil para analisarmos algum elemento HTML, checar propriedades.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Veja no exemplo acima, pela nossa objeto input podemos ver todas as propriedades dele através do console.dir(). Caso você tente usar console.log() nesse objeto, você vera impresso em seu console:

&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A2b8CLKHkVcgks2UhwiasaQ.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A2b8CLKHkVcgks2UhwiasaQ.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com Dir teremos uma interação melhor:&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AFRN8SSfX66TfNvvgi5RE7Q.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AFRN8SSfX66TfNvvgi5RE7Q.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table
&lt;/h2&gt;

&lt;p&gt;Exibe dados em forma de tabela de um Objeto ou Array. muito útil para termos uma visão melhor e limpa dos dados do que apenas o console.log() nos mostra. Veja exemplo a seguir:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ApbRvDyjtKC7aQnSNnhlnqA.png" width="800" height="400"&gt;

&lt;p&gt;A iteração do Array simples temos a coluna de índice e outra com valor, ja um Array multidimensional temos mais colunas de acordo com sua dimensão, ja um Objeto temos suas Chaves e Valores bem claros a vista.&lt;/p&gt;

&lt;h2&gt;
  
  
  Time &amp;amp; TimeEnd
&lt;/h2&gt;

&lt;p&gt;Iniciar um cronômetro com console.time() e finaliza apenas quando for chamado console.timeEnd(). Muito útil caso tenha um aparte do seu código que você deseja saber quanto tempo leva de execução. Veja exemplo a seguir:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AttV4MmqwJriF9vNh3V__vQ.png" width="800" height="400"&gt;

&lt;p&gt;No final da execução será exibido tempo que o Time foi aberto ate TimeEnd ser chamado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Warn &amp;amp; Error
&lt;/h2&gt;

&lt;p&gt;Similar ao Log, porem Warn exibe uma mensagem de alerta e Error exibe uma mensagem de Erro. Muito útil para especificar quando e uma falha maleável e quando ocorrer um erro de fato. Veja exemplos:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Vendo os dois métodos, somar e subtrair, em somar recebe valores padrões em seus parâmetros e caso não for passado será apenas alertado quando não for passado mas continuara funcionando e retornara 0, já o método subtrair, não recebe valores padrões em seus parâmetros, então caso não for passado em sua chamada será exibido um Erro no console e não retornara nada.

&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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AIo_nFpugj_-4hCJCRbMy2g.png" 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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AIo_nFpugj_-4hCJCRbMy2g.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Clear
&lt;/h2&gt;

&lt;p&gt;Por fim, o método Clear limpa o console, se o ambiente permitir.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Ao executar código, veja que no console você obterá a seguinte mensagem “Console was cleared”

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

&lt;p&gt;Vemos que nem de console.log() pode viver um desenvolvedor Javascript. Espero que este conteúdo tenha agregado mais conhecimento.&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
