<?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: Jean Dias</title>
    <description>The latest articles on DEV Community by Jean Dias (@jeanmfdias).</description>
    <link>https://dev.to/jeanmfdias</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F443611%2Fd7880771-3f77-4d92-b1c5-234b718d3ee6.png</url>
      <title>DEV Community: Jean Dias</title>
      <link>https://dev.to/jeanmfdias</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jeanmfdias"/>
    <language>en</language>
    <item>
      <title>ASDF ou Mise em 2026? Gerenciando PHP, Node.js e Python no Linux e macOS</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Fri, 07 Aug 2026 17:33:57 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/asdf-ou-mise-em-2026-gerenciando-php-nodejs-e-python-no-linux-e-macos-20ji</link>
      <guid>https://dev.to/jeanmfdias/asdf-ou-mise-em-2026-gerenciando-php-nodejs-e-python-no-linux-e-macos-20ji</guid>
      <description>&lt;p&gt;Se você trabalha com múltiplos projetos, provavelmente já encontrou algo parecido:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project-a
├── PHP 8.5
├── Node.js 24
└── Python 3.14

legacy-project
├── PHP 7.4
├── Node.js 20
└── Python 3.11
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O problema não é instalar essas linguagens.&lt;/p&gt;

&lt;p&gt;O problema é conseguir manter &lt;strong&gt;várias versões instaladas ao mesmo tempo&lt;/strong&gt;, trocar entre elas facilmente e garantir que todos os desenvolvedores do projeto utilizem o mesmo ambiente.&lt;/p&gt;

&lt;p&gt;Tradicionalmente poderíamos usar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NVM para Node.js;&lt;/li&gt;
&lt;li&gt;Pyenv para Python;&lt;/li&gt;
&lt;li&gt;RVM ou rbenv para Ruby;&lt;/li&gt;
&lt;li&gt;ferramentas específicas para PHP.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mas existe outra abordagem: utilizar um único gerenciador para todas elas.&lt;/p&gt;

&lt;p&gt;É justamente aí que entram ferramentas como &lt;strong&gt;ASDF&lt;/strong&gt; e &lt;strong&gt;Mise&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Neste artigo vamos ver:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;por que utilizar um version manager;&lt;/li&gt;
&lt;li&gt;ASDF vs Mise;&lt;/li&gt;
&lt;li&gt;como instalar ambos no Linux e macOS;&lt;/li&gt;
&lt;li&gt;como instalar PHP 8.5;&lt;/li&gt;
&lt;li&gt;como instalar Node.js 24 LTS;&lt;/li&gt;
&lt;li&gt;como instalar Python 3.14;&lt;/li&gt;
&lt;li&gt;como definir versões globais e por projeto;&lt;/li&gt;
&lt;li&gt;como compartilhar o ambiente com sua equipe.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Atualizado em agosto de 2026.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Por que usar um version manager?
&lt;/h2&gt;

&lt;p&gt;Imagine que sua máquina tenha PHP 8.5 instalado globalmente.&lt;/p&gt;

&lt;p&gt;Então aparece um projeto legado que depende de:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PHP 7.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Outro projeto utiliza:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PHP 8.3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E sua aplicação atual utiliza:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PHP 8.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você poderia instalar diferentes pacotes do sistema e manipular o &lt;code&gt;PATH&lt;/code&gt; manualmente.&lt;/p&gt;

&lt;p&gt;Mas isso rapidamente fica difícil de manter.&lt;/p&gt;

&lt;p&gt;Com um version manager podemos simplesmente definir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;legacy-api/
PHP 7.4

api/
PHP 8.3

new-api/
PHP 8.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o runtime correto será utilizado de acordo com o projeto.&lt;/p&gt;

&lt;p&gt;Isso traz algumas vantagens importantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;múltiplas versões instaladas simultaneamente;&lt;/li&gt;
&lt;li&gt;configuração específica por projeto;&lt;/li&gt;
&lt;li&gt;ambiente reproduzível;&lt;/li&gt;
&lt;li&gt;menos alterações no sistema operacional;&lt;/li&gt;
&lt;li&gt;facilidade para trabalhar com projetos legados;&lt;/li&gt;
&lt;li&gt;padronização entre desenvolvimento e CI/CD.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ASDF vs Mise
&lt;/h2&gt;

&lt;p&gt;O ASDF popularizou bastante a ideia de utilizar uma única interface para gerenciar diversas linguagens.&lt;/p&gt;

&lt;p&gt;O Mise surgiu posteriormente e mantém compatibilidade com boa parte desse ecossistema, mas atualmente vai além do gerenciamento de versões.&lt;/p&gt;

&lt;p&gt;Uma comparação rápida:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Recurso&lt;/th&gt;
&lt;th&gt;ASDF&lt;/th&gt;
&lt;th&gt;Mise&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gerenciar runtimes&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PHP&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.tool-versions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mise.toml&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Variáveis de ambiente&lt;/td&gt;
&lt;td&gt;Limitado&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task runner&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Configuração completa de ambiente&lt;/td&gt;
&lt;td&gt;Parcial&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;O &lt;strong&gt;ASDF&lt;/strong&gt; continua sendo uma excelente opção, principalmente em projetos que já utilizam &lt;code&gt;.tool-versions&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para novos ambientes, entretanto, o &lt;strong&gt;Mise&lt;/strong&gt; costuma ser uma escolha mais interessante porque consegue centralizar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;runtimes
+
variáveis de ambiente
+
tarefas
+
configuração do projeto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tudo utilizando a mesma ferramenta.&lt;/p&gt;




&lt;h2&gt;
  
  
  Versões utilizadas
&lt;/h2&gt;

&lt;p&gt;Neste tutorial utilizaremos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PHP      8.5
Node.js  24 LTS
Python   3.14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apesar de existir uma versão mais recente do Node.js na linha &lt;strong&gt;Current&lt;/strong&gt;, para desenvolvimento de aplicações normalmente faz mais sentido utilizar a versão &lt;strong&gt;LTS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Também utilizaremos versões Major/Minor nos exemplos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php@8.5
node@24
python@3.14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O próprio gerenciador pode resolver a versão patch correspondente.&lt;/p&gt;

&lt;p&gt;Em ambientes onde máxima reprodutibilidade é necessária, como CI/CD, podemos posteriormente fixar versões exatas.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pré-requisitos
&lt;/h2&gt;

&lt;p&gt;Antes de instalar PHP, Python e Node.js precisamos instalar algumas dependências.&lt;/p&gt;

&lt;p&gt;Isso é especialmente importante para PHP e Python, que podem ser compilados durante a instalação.&lt;/p&gt;




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

&lt;p&gt;Atualize os pacotes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instale as ferramentas básicas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &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;
  git &lt;span class="se"&gt;\&lt;/span&gt;
  curl &lt;span class="se"&gt;\&lt;/span&gt;
  build-essential &lt;span class="se"&gt;\&lt;/span&gt;
  autoconf &lt;span class="se"&gt;\&lt;/span&gt;
  bison &lt;span class="se"&gt;\&lt;/span&gt;
  re2c &lt;span class="se"&gt;\&lt;/span&gt;
  pkg-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Fedora
&lt;/h3&gt;

&lt;p&gt;Atualize o sistema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf upgrade &lt;span class="nt"&gt;--refresh&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;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;
  git &lt;span class="se"&gt;\&lt;/span&gt;
  curl &lt;span class="se"&gt;\&lt;/span&gt;
  gcc &lt;span class="se"&gt;\&lt;/span&gt;
  gcc-c++ &lt;span class="se"&gt;\&lt;/span&gt;
  make &lt;span class="se"&gt;\&lt;/span&gt;
  autoconf &lt;span class="se"&gt;\&lt;/span&gt;
  automake &lt;span class="se"&gt;\&lt;/span&gt;
  bison &lt;span class="se"&gt;\&lt;/span&gt;
  re2c &lt;span class="se"&gt;\&lt;/span&gt;
  pkgconf-pkg-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  macOS
&lt;/h3&gt;

&lt;p&gt;No macOS utilizaremos Homebrew.&lt;/p&gt;

&lt;p&gt;Caso ainda não tenha instalado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://brew.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  git &lt;span class="se"&gt;\&lt;/span&gt;
  curl &lt;span class="se"&gt;\&lt;/span&gt;
  coreutils &lt;span class="se"&gt;\&lt;/span&gt;
  autoconf &lt;span class="se"&gt;\&lt;/span&gt;
  automake &lt;span class="se"&gt;\&lt;/span&gt;
  bison &lt;span class="se"&gt;\&lt;/span&gt;
  re2c &lt;span class="se"&gt;\&lt;/span&gt;
  pkg-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Opção 1: Mise
&lt;/h2&gt;

&lt;p&gt;Para uma nova configuração, começaremos pelo Mise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalando no Linux ou macOS
&lt;/h2&gt;

&lt;p&gt;Se estiver utilizando ZSH:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://mise.run/zsh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se estiver utilizando Bash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://mise.run/bash | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recarregue o shell.&lt;/p&gt;

&lt;p&gt;ZSH:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verifique:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  Mise no macOS com Homebrew
&lt;/h2&gt;

&lt;p&gt;No macOS também podemos utilizar:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Adicione ao ZSH:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'eval "$(mise activate zsh)"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recarregue:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E teste:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Instalando Node.js com Mise
&lt;/h2&gt;

&lt;p&gt;Node.js é provavelmente o runtime mais simples desse setup.&lt;/p&gt;

&lt;p&gt;No Ubuntu/Debian, caso seja necessário compilar alguma versão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; python3 make g++
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No Fedora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; python3 make gcc-c++
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora podemos instalar Node.js 24:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise use &lt;span class="nt"&gt;--global&lt;/span&gt; node@24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verifique:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Para listar as versões instaladas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise list node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Instalando Python com Mise
&lt;/h2&gt;

&lt;p&gt;Python possui algumas dependências opcionais importantes.&lt;/p&gt;

&lt;p&gt;Sem elas, módulos como &lt;code&gt;ssl&lt;/code&gt;, &lt;code&gt;sqlite3&lt;/code&gt;, &lt;code&gt;bz2&lt;/code&gt;, &lt;code&gt;lzma&lt;/code&gt; e &lt;code&gt;readline&lt;/code&gt; podem não estar disponíveis corretamente.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &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;
  build-essential &lt;span class="se"&gt;\&lt;/span&gt;
  libssl-dev &lt;span class="se"&gt;\&lt;/span&gt;
  zlib1g-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libbz2-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libreadline-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libsqlite3-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libffi-dev &lt;span class="se"&gt;\&lt;/span&gt;
  liblzma-dev &lt;span class="se"&gt;\&lt;/span&gt;
  tk-dev &lt;span class="se"&gt;\&lt;/span&gt;
  uuid-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Fedora
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;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;
  gcc &lt;span class="se"&gt;\&lt;/span&gt;
  make &lt;span class="se"&gt;\&lt;/span&gt;
  openssl-devel &lt;span class="se"&gt;\&lt;/span&gt;
  zlib-devel &lt;span class="se"&gt;\&lt;/span&gt;
  bzip2-devel &lt;span class="se"&gt;\&lt;/span&gt;
  readline-devel &lt;span class="se"&gt;\&lt;/span&gt;
  sqlite-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libffi-devel &lt;span class="se"&gt;\&lt;/span&gt;
  xz-devel &lt;span class="se"&gt;\&lt;/span&gt;
  tk-devel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  openssl@3 &lt;span class="se"&gt;\&lt;/span&gt;
  readline &lt;span class="se"&gt;\&lt;/span&gt;
  sqlite3 &lt;span class="se"&gt;\&lt;/span&gt;
  xz &lt;span class="se"&gt;\&lt;/span&gt;
  zlib &lt;span class="se"&gt;\&lt;/span&gt;
  tcl-tk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise use &lt;span class="nt"&gt;--global&lt;/span&gt; python@3.14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verifique:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&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;/div&gt;



&lt;p&gt;E:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  Instalando PHP com Mise
&lt;/h2&gt;

&lt;p&gt;PHP normalmente é a linguagem que exige mais dependências.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &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;
  build-essential &lt;span class="se"&gt;\&lt;/span&gt;
  autoconf &lt;span class="se"&gt;\&lt;/span&gt;
  bison &lt;span class="se"&gt;\&lt;/span&gt;
  re2c &lt;span class="se"&gt;\&lt;/span&gt;
  pkg-config &lt;span class="se"&gt;\&lt;/span&gt;
  libcurl4-openssl-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libssl-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libxml2-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libsqlite3-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libonig-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libzip-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libreadline-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libicu-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libjpeg-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libpng-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libwebp-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libfreetype6-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libgmp-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libsodium-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libxslt1-dev &lt;span class="se"&gt;\&lt;/span&gt;
  zlib1g-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se utilizar PostgreSQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; libpq-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Fedora
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;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;
  autoconf &lt;span class="se"&gt;\&lt;/span&gt;
  bison &lt;span class="se"&gt;\&lt;/span&gt;
  gcc &lt;span class="se"&gt;\&lt;/span&gt;
  gcc-c++ &lt;span class="se"&gt;\&lt;/span&gt;
  make &lt;span class="se"&gt;\&lt;/span&gt;
  re2c &lt;span class="se"&gt;\&lt;/span&gt;
  pkgconf-pkg-config &lt;span class="se"&gt;\&lt;/span&gt;
  openssl-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libcurl-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libxml2-devel &lt;span class="se"&gt;\&lt;/span&gt;
  sqlite-devel &lt;span class="se"&gt;\&lt;/span&gt;
  oniguruma-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libzip-devel &lt;span class="se"&gt;\&lt;/span&gt;
  readline-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libicu-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libjpeg-turbo-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libpng-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libwebp-devel &lt;span class="se"&gt;\&lt;/span&gt;
  freetype-devel &lt;span class="se"&gt;\&lt;/span&gt;
  gmp-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libsodium-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libxslt-devel &lt;span class="se"&gt;\&lt;/span&gt;
  zlib-devel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PostgreSQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; libpq-devel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  autoconf &lt;span class="se"&gt;\&lt;/span&gt;
  automake &lt;span class="se"&gt;\&lt;/span&gt;
  bison &lt;span class="se"&gt;\&lt;/span&gt;
  re2c &lt;span class="se"&gt;\&lt;/span&gt;
  pkg-config &lt;span class="se"&gt;\&lt;/span&gt;
  openssl@3 &lt;span class="se"&gt;\&lt;/span&gt;
  curl &lt;span class="se"&gt;\&lt;/span&gt;
  libiconv &lt;span class="se"&gt;\&lt;/span&gt;
  libzip &lt;span class="se"&gt;\&lt;/span&gt;
  oniguruma &lt;span class="se"&gt;\&lt;/span&gt;
  icu4c &lt;span class="se"&gt;\&lt;/span&gt;
  libxml2 &lt;span class="se"&gt;\&lt;/span&gt;
  sqlite &lt;span class="se"&gt;\&lt;/span&gt;
  readline &lt;span class="se"&gt;\&lt;/span&gt;
  libpng &lt;span class="se"&gt;\&lt;/span&gt;
  jpeg-turbo &lt;span class="se"&gt;\&lt;/span&gt;
  webp &lt;span class="se"&gt;\&lt;/span&gt;
  freetype &lt;span class="se"&gt;\&lt;/span&gt;
  gmp &lt;span class="se"&gt;\&lt;/span&gt;
  libsodium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para PostgreSQL:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Agora instale PHP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise use &lt;span class="nt"&gt;--global&lt;/span&gt; php@8.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verifique:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Confira as extensões disponíveis:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  Configuração global com Mise
&lt;/h2&gt;

&lt;p&gt;Podemos definir nossas versões padrão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise use &lt;span class="nt"&gt;--global&lt;/span&gt; php@8.5
mise use &lt;span class="nt"&gt;--global&lt;/span&gt; node@24
mise use &lt;span class="nt"&gt;--global&lt;/span&gt; python@3.14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
node &lt;span class="nt"&gt;-v&lt;/span&gt;
python &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;utilizarão essas versões sempre que nenhum projeto possuir uma configuração específica.&lt;/p&gt;




&lt;h2&gt;
  
  
  Configuração por projeto
&lt;/h2&gt;

&lt;p&gt;Essa é provavelmente a funcionalidade mais importante.&lt;/p&gt;

&lt;p&gt;Crie um projeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;my-project
&lt;span class="nb"&gt;cd &lt;/span&gt;my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure os runtimes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise use php@8.5
mise use node@24
mise use python@3.14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Mise criará um arquivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mise.toml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Semelhante a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[tools]&lt;/span&gt;
&lt;span class="py"&gt;php&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"8.5"&lt;/span&gt;
&lt;span class="py"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"24"&lt;/span&gt;
&lt;span class="py"&gt;python&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"3.14"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adicione ao Git:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add mise.toml
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Configure development runtimes"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando outro desenvolvedor clonar o projeto:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;E pronto.&lt;/p&gt;

&lt;p&gt;O ambiente poderá ser reproduzido sem precisar documentar manualmente cada runtime necessário.&lt;/p&gt;




&lt;h2&gt;
  
  
  Executando outra versão temporariamente
&lt;/h2&gt;

&lt;p&gt;Também podemos utilizar uma versão diferente sem alterar o projeto.&lt;/p&gt;

&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise x python@3.13 &lt;span class="nt"&gt;--&lt;/span&gt; python &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Node.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise x node@22 &lt;span class="nt"&gt;--&lt;/span&gt; node &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise x php@8.4 &lt;span class="nt"&gt;--&lt;/span&gt; php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso é extremamente útil em testes de compatibilidade.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise x php@8.4 &lt;span class="nt"&gt;--&lt;/span&gt; php artisan &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e depois:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise x php@8.5 &lt;span class="nt"&gt;--&lt;/span&gt; php artisan &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você consegue testar a mesma aplicação em múltiplas versões sem alterar permanentemente o ambiente.&lt;/p&gt;




&lt;h2&gt;
  
  
  Instalando várias versões
&lt;/h2&gt;

&lt;p&gt;Podemos manter diversas versões simultaneamente.&lt;/p&gt;

&lt;p&gt;PHP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise &lt;span class="nb"&gt;install &lt;/span&gt;php@8.3
mise &lt;span class="nb"&gt;install &lt;/span&gt;php@8.4
mise &lt;span class="nb"&gt;install &lt;/span&gt;php@8.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Node.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise &lt;span class="nb"&gt;install &lt;/span&gt;node@22
mise &lt;span class="nb"&gt;install &lt;/span&gt;node@24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise &lt;span class="nb"&gt;install &lt;/span&gt;python@3.12
mise &lt;span class="nb"&gt;install &lt;/span&gt;python@3.13
mise &lt;span class="nb"&gt;install &lt;/span&gt;python@3.14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Liste tudo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Indo além dos runtimes com Mise
&lt;/h2&gt;

&lt;p&gt;Uma das principais diferenças do Mise é que ele pode gerenciar mais do que versões.&lt;/p&gt;

&lt;p&gt;Nosso &lt;code&gt;mise.toml&lt;/code&gt; poderia ser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[tools]&lt;/span&gt;
&lt;span class="py"&gt;php&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"8.5"&lt;/span&gt;
&lt;span class="py"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"24"&lt;/span&gt;
&lt;span class="py"&gt;python&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"3.14"&lt;/span&gt;

&lt;span class="nn"&gt;[env]&lt;/span&gt;
&lt;span class="py"&gt;APP_ENV&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"development"&lt;/span&gt;

&lt;span class="nn"&gt;[tasks.test]&lt;/span&gt;
&lt;span class="py"&gt;run&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"php artisan test"&lt;/span&gt;

&lt;span class="nn"&gt;[tasks.dev]&lt;/span&gt;
&lt;span class="py"&gt;run&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"npm run dev"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora podemos executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise run &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ou:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Isso começa a transformar o &lt;code&gt;mise.toml&lt;/code&gt; em uma descrição do próprio ambiente de desenvolvimento.&lt;/p&gt;




&lt;h2&gt;
  
  
  Opção 2: ASDF
&lt;/h2&gt;

&lt;p&gt;Se você já possui projetos utilizando ASDF, não existe necessidade de migrar imediatamente.&lt;/p&gt;

&lt;p&gt;Ele continua sendo uma ótima solução.&lt;/p&gt;

&lt;p&gt;Uma diferença importante em relação a tutoriais antigos é que o ASDF atual não utiliza mais exatamente o mesmo processo de instalação e comandos encontrados em artigos de alguns anos atrás.&lt;/p&gt;

&lt;p&gt;Por exemplo, atualmente utilizamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;set&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;em vez do fluxo antigo baseado principalmente em:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf global
asdf &lt;span class="nb"&gt;local&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Instalando ASDF no macOS
&lt;/h2&gt;

&lt;p&gt;Com Homebrew:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Verifique:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  Instalando ASDF no Linux
&lt;/h2&gt;

&lt;p&gt;Instale primeiro:&lt;/p&gt;

&lt;p&gt;Ubuntu/Debian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; git bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fedora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; git bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma opção é instalar o binário atual do ASDF conforme a documentação oficial.&lt;/p&gt;

&lt;p&gt;Caso já tenha Go configurado, também podemos instalar através dele:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/asdf-vm/asdf/cmd/asdf@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois confirme:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  Configurando os shims
&lt;/h2&gt;

&lt;p&gt;Adicione ao seu shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ASDF_DATA_DIR&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="p"&gt;/.asdf&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/shims:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para ZSH, coloque em:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para Bash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois recarregue o terminal.&lt;/p&gt;




&lt;h2&gt;
  
  
  Adicionando plugins
&lt;/h2&gt;

&lt;p&gt;O ASDF utiliza plugins para cada runtime.&lt;/p&gt;

&lt;p&gt;Node.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin add python https://github.com/asdf-community/asdf-python.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin add php https://github.com/asdf-community/asdf-php.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Liste:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Instalando os runtimes com ASDF
&lt;/h2&gt;

&lt;p&gt;As dependências do sistema são as mesmas que instalamos anteriormente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Node.js
&lt;/h3&gt;

&lt;p&gt;Descubra a versão disponível da linha 24:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf latest nodejs 24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instale a versão retornada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;nodejs &amp;lt;versao&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;nodejs 24.x.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Defina como padrão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; nodejs 24.x.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;

&lt;p&gt;Consulte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf latest python 3.14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;python &amp;lt;versao&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; python &amp;lt;versao&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  PHP
&lt;/h3&gt;

&lt;p&gt;Consulte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf latest php 8.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;php &amp;lt;versao&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; php &amp;lt;versao&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;code&gt;.tool-versions&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;O ASDF utiliza tradicionalmente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.tool-versions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php 8.5.x
nodejs 24.x.x
python 3.14.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para criar essa configuração através da CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;set &lt;/span&gt;php &amp;lt;versao&amp;gt;
asdf &lt;span class="nb"&gt;set &lt;/span&gt;nodejs &amp;lt;versao&amp;gt;
asdf &lt;span class="nb"&gt;set &lt;/span&gt;python &amp;lt;versao&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add .tool-versions
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Configure runtime versions"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Outro desenvolvedor poderá executar:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;para instalar todas as versões.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mise também pode ler &lt;code&gt;.tool-versions&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Esse detalhe torna a migração bastante simples.&lt;/p&gt;

&lt;p&gt;Imagine um projeto existente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.tool-versions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php 8.5.x
nodejs 24.x.x
python 3.14.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mesmo utilizando Mise, é possível aproveitar esse arquivo.&lt;/p&gt;

&lt;p&gt;Isso permite testar a ferramenta sem necessariamente migrar imediatamente todo o projeto para &lt;code&gt;mise.toml&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Versões exatas ou Major/Minor?
&lt;/h2&gt;

&lt;p&gt;Durante o desenvolvimento pessoal, isto pode ser suficiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[tools]&lt;/span&gt;
&lt;span class="py"&gt;php&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"8.5"&lt;/span&gt;
&lt;span class="py"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"24"&lt;/span&gt;
&lt;span class="py"&gt;python&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"3.14"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas existe uma consequência.&lt;/p&gt;

&lt;p&gt;Hoje:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php@8.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;pode resolver para uma determinada versão patch.&lt;/p&gt;

&lt;p&gt;Daqui alguns meses poderá resolver para uma versão mais nova.&lt;/p&gt;

&lt;p&gt;Para projetos em equipe ou CI/CD, portanto, pode ser melhor utilizar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[tools]&lt;/span&gt;
&lt;span class="py"&gt;php&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"8.5.x"&lt;/span&gt;
&lt;span class="py"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"24.x.x"&lt;/span&gt;
&lt;span class="py"&gt;python&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"3.14.x"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;substituindo os valores pelas versões exatas escolhidas no momento da configuração.&lt;/p&gt;

&lt;p&gt;O objetivo é garantir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;developer A
=
developer B
=
CI
=
build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Como verificar qual versão está sendo utilizada?
&lt;/h2&gt;

&lt;p&gt;Alguns problemas aparentemente relacionados ao runtime são simplesmente problemas de &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Confira:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;which php
which node
which python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com Mise:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise which php
mise which node
mise which python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com ASDF:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf which php
asdf which node
asdf which python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Também confira diretamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
node &lt;span class="nt"&gt;-v&lt;/span&gt;
python &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Meu setup atualmente
&lt;/h2&gt;

&lt;p&gt;Para uma máquina nova, meu setup seria baseado em Mise:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise use &lt;span class="nt"&gt;--global&lt;/span&gt; php@8.5
mise use &lt;span class="nt"&gt;--global&lt;/span&gt; node@24
mise use &lt;span class="nt"&gt;--global&lt;/span&gt; python@3.14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E dentro de cada projeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise use php@8.5
mise use node@24
mise use python@3.14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gerando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[tools]&lt;/span&gt;
&lt;span class="py"&gt;php&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"8.5"&lt;/span&gt;
&lt;span class="py"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"24"&lt;/span&gt;
&lt;span class="py"&gt;python&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"3.14"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para projetos onde quero máxima previsibilidade, depois fixaria as versões patch exatas.&lt;/p&gt;




&lt;h2&gt;
  
  
  Então, ASDF ou Mise?
&lt;/h2&gt;

&lt;p&gt;Minha regra atualmente seria simples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Projeto existente com ASDF
&lt;/h3&gt;

&lt;p&gt;Continue com ASDF.&lt;/p&gt;

&lt;p&gt;Não existe motivo para criar uma migração apenas porque existe uma ferramenta mais nova.&lt;/p&gt;

&lt;h3&gt;
  
  
  Máquina ou projeto novo
&lt;/h3&gt;

&lt;p&gt;Eu utilizaria Mise.&lt;/p&gt;

&lt;p&gt;Ele resolve o mesmo problema de gerenciamento de runtimes e ainda permite evoluir o setup posteriormente adicionando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;environment variables
tasks
development tools
project configuration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sem precisar introduzir novas ferramentas.&lt;/p&gt;




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

&lt;p&gt;Não importa se você trabalha com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PHP
Node.js
Python
Ruby
Go
Java
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;em algum momento diferentes projetos provavelmente exigirão versões diferentes dessas ferramentas.&lt;/p&gt;

&lt;p&gt;Um gerenciador como ASDF ou Mise evita que você precise instalar um version manager diferente para cada linguagem.&lt;/p&gt;

&lt;p&gt;Mais importante ainda: ele transforma a versão utilizada pelo projeto em &lt;strong&gt;configuração versionável&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Em vez de escrever na documentação:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Instale PHP 8.5, Node.js 24 e Python 3.14.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;o próprio projeto pode declarar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[tools]&lt;/span&gt;
&lt;span class="py"&gt;php&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"8.5"&lt;/span&gt;
&lt;span class="py"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"24"&lt;/span&gt;
&lt;span class="py"&gt;python&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"3.14"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E então:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Isso reduz diferenças entre ambientes, facilita onboarding e evita uma boa quantidade de problemas do tipo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Na minha máquina funciona.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para projetos novos, atualmente considero o &lt;strong&gt;Mise uma das opções mais interessantes para gerenciar um ambiente de desenvolvimento moderno&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O ASDF, entretanto, continua extremamente relevante — especialmente pela simplicidade, maturidade e enorme quantidade de projetos que já utilizam &lt;code&gt;.tool-versions&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>asdf</category>
      <category>mise</category>
      <category>devtools</category>
      <category>osx</category>
    </item>
    <item>
      <title>Setting Up a Basic PHP Development Environment on Fedora 44</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Mon, 06 Jul 2026 16:37:36 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/setting-up-a-basic-php-development-environment-on-fedora-44-1jk9</link>
      <guid>https://dev.to/jeanmfdias/setting-up-a-basic-php-development-environment-on-fedora-44-1jk9</guid>
      <description>&lt;p&gt;This guide shows how to configure a basic PHP development environment on &lt;strong&gt;Fedora 44&lt;/strong&gt; using &lt;strong&gt;mise&lt;/strong&gt; for version management, &lt;strong&gt;PHP 8.5&lt;/strong&gt;, &lt;strong&gt;ZSH with Oh My ZSH&lt;/strong&gt;, and &lt;strong&gt;Docker Engine&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal is to create a clean and flexible setup for local PHP development, allowing you to manage PHP versions per project while also having Docker available for containers, databases, queues, and other services.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Update the system
&lt;/h2&gt;

&lt;p&gt;Start by updating all system packages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf update &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the update finishes, reboot the system if Fedora installs a new kernel or important system libraries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Install basic development tools
&lt;/h2&gt;

&lt;p&gt;Install common utilities such as Git, Vim, cURL, ZSH, and basic build tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; vim curl git zsh gcc gcc-c++ make pkgconf-pkg-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the installed versions:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Install and configure Oh My ZSH
&lt;/h2&gt;

&lt;p&gt;Install Oh My ZSH to improve the terminal experience:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;During the installation, the script may ask whether you want to set ZSH as your default shell. Choose:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;You may also be asked for your password to confirm the shell change.&lt;/p&gt;

&lt;p&gt;If you need to change the shell manually later, run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Then log out and log back in.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Install PHP build dependencies
&lt;/h2&gt;

&lt;p&gt;Because PHP installed through mise is usually compiled locally, you need development libraries and build dependencies.&lt;/p&gt;

&lt;p&gt;Install the required packages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;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;
  autoconf &lt;span class="se"&gt;\&lt;/span&gt;
  bison &lt;span class="se"&gt;\&lt;/span&gt;
  clang &lt;span class="se"&gt;\&lt;/span&gt;
  gd-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libcurl-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libpq-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libxml2-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libzip-devel &lt;span class="se"&gt;\&lt;/span&gt;
  oniguruma-devel &lt;span class="se"&gt;\&lt;/span&gt;
  openssl-devel &lt;span class="se"&gt;\&lt;/span&gt;
  readline-devel &lt;span class="se"&gt;\&lt;/span&gt;
  re2c &lt;span class="se"&gt;\&lt;/span&gt;
  sqlite-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libsodium-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libicu-devel &lt;span class="se"&gt;\&lt;/span&gt;
  bzip2-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libjpeg-turbo-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libpng-devel &lt;span class="se"&gt;\&lt;/span&gt;
  libwebp-devel &lt;span class="se"&gt;\&lt;/span&gt;
  freetype-devel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These packages provide support for common PHP extensions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;curl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;intl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mbstring&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openssl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pdo_pgsql&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pdo_sqlite&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;readline&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sodium&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zip&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Install mise
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;mise&lt;/code&gt; is a version manager for development tools and languages. It can replace tools like ASDF, NVM, pyenv, rbenv, and similar version managers.&lt;/p&gt;

&lt;p&gt;Enable the mise COPR repository and install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf copr &lt;span class="nb"&gt;enable &lt;/span&gt;jdxcode/mise &lt;span class="nt"&gt;-y&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; mise
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Activate mise in ZSH
&lt;/h2&gt;

&lt;p&gt;Add mise activation to your ZSH configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'eval "$(mise activate zsh)"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZDOTDIR&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.zshrc"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reload your shell:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command helps verify whether mise is correctly configured.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Install PHP 8.5 with mise
&lt;/h2&gt;

&lt;p&gt;Install PHP 8.5 globally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise use &lt;span class="nt"&gt;--global&lt;/span&gt; php@8.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command installs the latest available PHP 8.5 patch release and sets it as the global default version.&lt;/p&gt;

&lt;p&gt;Check the installed PHP version:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;You should see something similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PHP 8.5.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check PHP modules:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Check PHP configuration:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. Configure PHP per project
&lt;/h2&gt;

&lt;p&gt;For project-specific PHP versions, go to your project folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/Projects/my-php-app
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Projects/my-php-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set PHP 8.5 only for this project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise use php@8.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates or updates a &lt;code&gt;mise.toml&lt;/code&gt; file in the project directory.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[tools]&lt;/span&gt;
&lt;span class="py"&gt;php&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"8.5"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, whenever you enter this project folder, mise will use PHP 8.5.&lt;/p&gt;

&lt;p&gt;Verify it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
mise current
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. Install Composer
&lt;/h2&gt;

&lt;p&gt;Composer is the standard dependency manager for PHP.&lt;/p&gt;

&lt;p&gt;Install Composer using the official installer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"copy('https://getcomposer.org/installer', 'composer-setup.php');"&lt;/span&gt;
php composer-setup.php
php &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"unlink('composer-setup.php');"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Move Composer to a global executable path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mv &lt;/span&gt;composer.phar /usr/local/bin/composer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. Install Docker Engine
&lt;/h2&gt;

&lt;p&gt;First, remove conflicting Docker packages if they exist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf remove &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  docker &lt;span class="se"&gt;\&lt;/span&gt;
  docker-client &lt;span class="se"&gt;\&lt;/span&gt;
  docker-client-latest &lt;span class="se"&gt;\&lt;/span&gt;
  docker-common &lt;span class="se"&gt;\&lt;/span&gt;
  docker-latest &lt;span class="se"&gt;\&lt;/span&gt;
  docker-latest-logrotate &lt;span class="se"&gt;\&lt;/span&gt;
  docker-logrotate &lt;span class="se"&gt;\&lt;/span&gt;
  docker-selinux &lt;span class="se"&gt;\&lt;/span&gt;
  docker-engine-selinux &lt;span class="se"&gt;\&lt;/span&gt;
  docker-engine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the official Docker repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf config-manager addrepo &lt;span class="nt"&gt;--from-repofile&lt;/span&gt; https://download.docker.com/linux/fedora/docker-ce.repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Docker Engine, Docker CLI, containerd, Buildx, and Docker Compose plugin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;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;
  docker-ce &lt;span class="se"&gt;\&lt;/span&gt;
  docker-ce-cli &lt;span class="se"&gt;\&lt;/span&gt;
  containerd.io &lt;span class="se"&gt;\&lt;/span&gt;
  docker-buildx-plugin &lt;span class="se"&gt;\&lt;/span&gt;
  docker-compose-plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable and start Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  11. Run Docker without sudo
&lt;/h2&gt;

&lt;p&gt;Add your user to the Docker group:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$USER&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply the group change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;newgrp docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test Docker without &lt;code&gt;sudo&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this does not work immediately, log out and log back in.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Verify Docker Compose
&lt;/h2&gt;

&lt;p&gt;Docker Compose is installed as a Docker CLI plugin.&lt;/p&gt;

&lt;p&gt;Check the version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  13. Create a basic PHP test project
&lt;/h2&gt;

&lt;p&gt;Create a simple PHP file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/Projects/php-test
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Projects/php-test
mise use php@8.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create &lt;code&gt;index.php&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; index.php &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;PHP&lt;/span&gt;&lt;span class="sh"&gt;'
&amp;lt;?php

echo "PHP version: " . PHP_VERSION . PHP_EOL;
&lt;/span&gt;&lt;span class="no"&gt;PHP
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php index.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start PHP’s built-in development server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-S&lt;/span&gt; localhost:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open in the browser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  14. Optional: create a Docker Compose file for local development
&lt;/h2&gt;

&lt;p&gt;Inside your project folder, create a &lt;code&gt;compose.yaml&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; compose.yaml &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;YAML&lt;/span&gt;&lt;span class="sh"&gt;'
services:
  postgres:
    image: postgres:17
    container_name: php_dev_postgres
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:8
    container_name: php_dev_redis
    ports:
      - "6379:6379"

volumes:
  postgres_data:
&lt;/span&gt;&lt;span class="no"&gt;YAML
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check running containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stop the services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  15. Useful commands
&lt;/h2&gt;

&lt;p&gt;Check the active PHP version:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;List mise-managed tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise &lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Show the current active tool versions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise current
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install tools defined in a project:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Update system packages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf update &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update mise-managed tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check Docker status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl status docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final setup summary
&lt;/h2&gt;

&lt;p&gt;After completing this setup, Fedora 44 will have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updated system packages&lt;/li&gt;
&lt;li&gt;Git, Vim, cURL, and ZSH&lt;/li&gt;
&lt;li&gt;Oh My ZSH&lt;/li&gt;
&lt;li&gt;mise for runtime version management&lt;/li&gt;
&lt;li&gt;PHP 8.5 installed through mise&lt;/li&gt;
&lt;li&gt;Composer&lt;/li&gt;
&lt;li&gt;Docker Engine&lt;/li&gt;
&lt;li&gt;Docker Compose plugin&lt;/li&gt;
&lt;li&gt;A basic structure for local PHP development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup is suitable for PHP projects using frameworks such as Laravel, Symfony, Slim, or custom PHP applications.&lt;/p&gt;

</description>
      <category>development</category>
      <category>fedora</category>
      <category>php</category>
      <category>docker</category>
    </item>
    <item>
      <title>Install PHP 8.5 with ASDF on Arch Linux</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Fri, 05 Jun 2026 15:39:04 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/install-php-85-with-asdf-on-arch-linux-25g8</link>
      <guid>https://dev.to/jeanmfdias/install-php-85-with-asdf-on-arch-linux-25g8</guid>
      <description>&lt;p&gt;This quick tutorial shows how to install ASDF Version Manager on Arch Linux and use it to install PHP 8.5.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Required Dependencies
&lt;/h2&gt;

&lt;p&gt;First, install the required packages and build dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; base-devel libpng postgresql-libs re2c gd oniguruma libzip libsodium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may also want to install additional common dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; curl git openssl zlib libxml2 sqlite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Install ASDF
&lt;/h2&gt;

&lt;p&gt;Clone the ASDF repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/asdf-vm/asdf.git ~/.asdf &lt;span class="nt"&gt;--branch&lt;/span&gt; v0.18.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add ASDF to your shell configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bash
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'. "$HOME/.asdf/asdf.sh"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'. "$HOME/.asdf/completions/asdf.bash"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ZSH
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'. "$HOME/.asdf/asdf.sh"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'. "$HOME/.asdf/completions/asdf.bash"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  Add the PHP Plugin
&lt;/h2&gt;

&lt;p&gt;Install the PHP plugin for ASDF:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin add php https://github.com/asdf-community/asdf-php.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Install PHP 8.5
&lt;/h2&gt;

&lt;p&gt;List available PHP versions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf list all php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install PHP 8.5:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;php 8.5.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set PHP 8.5 as the global default:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf global php 8.5.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reload your shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nv"&gt;$SHELL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;PHP 8.5.x &lt;span class="o"&gt;(&lt;/span&gt;cli&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Useful ASDF Commands
&lt;/h2&gt;

&lt;p&gt;List installed PHP versions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf list php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install another PHP version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;php 8.4.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Switch globally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf global php 8.4.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Switch locally for a project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;local &lt;/span&gt;php 8.5.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Optional: Install Composer
&lt;/h2&gt;

&lt;p&gt;After installing PHP, install Composer globally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"copy('https://getcomposer.org/installer', 'composer-setup.php');"&lt;/span&gt;
php composer-setup.php
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;composer.phar /usr/local/bin/composer
&lt;span class="nb"&gt;rm &lt;/span&gt;composer-setup.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



</description>
      <category>php</category>
      <category>archlinux</category>
      <category>asdf</category>
    </item>
    <item>
      <title>Configurando Rede no WSL2 para Melhor Performance com VS Code</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Fri, 01 May 2026 17:30:36 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/configurando-rede-no-wsl2-para-melhor-performance-com-vs-code-g23</link>
      <guid>https://dev.to/jeanmfdias/configurando-rede-no-wsl2-para-melhor-performance-com-vs-code-g23</guid>
      <description>&lt;p&gt;O WSL2 (Windows Subsystem for Linux 2) utiliza uma interface de rede virtual baseada em Hyper-V. Em alguns cenários, especialmente ao usar ferramentas como o VS Code com Remote WSL, podem ocorrer lentidões causadas por configurações inadequadas de rede — principalmente relacionadas ao MTU (Maximum Transmission Unit).&lt;/p&gt;

&lt;p&gt;Este tutorial mostra como ajustar o MTU da interface de rede do WSL para melhorar a performance.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que é MTU?
&lt;/h2&gt;

&lt;p&gt;MTU (Maximum Transmission Unit) define o tamanho máximo de pacote que pode ser transmitido pela rede sem fragmentação.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Valores inadequados podem causar:

&lt;ul&gt;
&lt;li&gt;Latência&lt;/li&gt;
&lt;li&gt;Perda de pacotes&lt;/li&gt;
&lt;li&gt;Lentidão em conexões (especialmente SSH e VS Code Remote)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;O valor comum recomendado é &lt;strong&gt;1500&lt;/strong&gt;, que é o padrão para redes Ethernet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Passo a Passo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Parar o WSL
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;O que esse comando faz:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encerra todas as instâncias do WSL&lt;/li&gt;
&lt;li&gt;Garante que nenhuma configuração de rede esteja em uso&lt;/li&gt;
&lt;li&gt;Necessário antes de aplicar alterações na interface&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. Identificar a Interface de Rede do WSL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-NetAdapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Where-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$_&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*WSL*"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;MacAddress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;O que esse comando faz:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lista interfaces de rede do Windows&lt;/li&gt;
&lt;li&gt;Filtra apenas as que contêm "WSL" no nome&lt;/li&gt;
&lt;li&gt;Mostra:

&lt;ul&gt;
&lt;li&gt;Nome da interface&lt;/li&gt;
&lt;li&gt;Endereço MAC&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Exemplo de saída:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Name                                   MacAddress
----                                   ----------
vEthernet (WSL (Hyper-V firewall))     00-15-5D-XX-XX-XX
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. Ajustar o MTU da Interface
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Execute o PowerShell como Administrador&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;netsh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;interface&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;interface&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"vEthernet (WSL (Hyper-V firewall))"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mtu&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1500&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;O que esse comando faz:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Usa o &lt;code&gt;netsh&lt;/code&gt; para alterar configurações de rede&lt;/li&gt;
&lt;li&gt;Define o MTU da interface virtual do WSL para 1500&lt;/li&gt;
&lt;li&gt;Evita fragmentação de pacotes e melhora a comunicação&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Reiniciar o WSL
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;O que esse comando faz:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reinicia o ambiente WSL com as novas configurações&lt;/li&gt;
&lt;li&gt;Aplica o novo MTU na prática&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Resultado Esperado
&lt;/h2&gt;

&lt;p&gt;Após aplicar essas configurações, você pode notar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Melhor performance no VS Code (Remote WSL)&lt;/li&gt;
&lt;li&gt;Menor latência em comandos&lt;/li&gt;
&lt;li&gt;Conexões mais estáveis&lt;/li&gt;
&lt;li&gt;Redução de problemas com rede interna do WSL&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Considerações
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Essa configuração é especialmente útil em:

&lt;ul&gt;
&lt;li&gt;VPNs&lt;/li&gt;
&lt;li&gt;Redes corporativas&lt;/li&gt;
&lt;li&gt;Ambientes com proxies&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Caso tenha problemas, você pode testar valores menores (ex: 1400 ou 1420)&lt;/li&gt;

&lt;/ul&gt;




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

&lt;p&gt;Ajustar o MTU da interface do WSL é uma otimização simples, mas com impacto direto na performance de desenvolvimento, especialmente ao usar ferramentas integradas como o VS Code.&lt;/p&gt;

</description>
      <category>wsl</category>
      <category>network</category>
      <category>vscode</category>
    </item>
    <item>
      <title>🗄️ Guia Completo de Backup e Restauração no MySQL</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Sun, 12 Apr 2026 18:46:25 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/guia-completo-de-backup-e-restauracao-no-mysql-3ie</link>
      <guid>https://dev.to/jeanmfdias/guia-completo-de-backup-e-restauracao-no-mysql-3ie</guid>
      <description>&lt;p&gt;Fazer backup do banco de dados é uma das práticas mais importantes para garantir a segurança e integridade das suas informações. Neste artigo, você vai aprender como usar o &lt;code&gt;mysqldump&lt;/code&gt; para gerar backups e como restaurá-los de forma simples e eficiente.&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 Por que fazer backup?
&lt;/h2&gt;

&lt;p&gt;Backups são essenciais para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evitar perda de dados em caso de falhas&lt;/li&gt;
&lt;li&gt;Restaurar informações após erros humanos&lt;/li&gt;
&lt;li&gt;Migrar dados entre ambientes (dev, staging, produção)&lt;/li&gt;
&lt;li&gt;Criar cópias para testes e auditorias&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ Como fazer backup com &lt;code&gt;mysqldump&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;O &lt;code&gt;mysqldump&lt;/code&gt; é uma ferramenta nativa do MySQL que permite exportar bancos de dados em formato &lt;code&gt;.sql&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Backup de todos os bancos de dados
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysqldump &lt;span class="nt"&gt;-u&lt;/span&gt; usuario &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--all-databases&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; dump.sql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use quando quiser uma cópia completa do servidor.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Backup de um único banco
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysqldump &lt;span class="nt"&gt;-u&lt;/span&gt; usuario &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--databases&lt;/span&gt; db1 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; dump.sql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ideal para projetos isolados ou backups específicos.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Backup de vários bancos
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysqldump &lt;span class="nt"&gt;-u&lt;/span&gt; usuario &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--databases&lt;/span&gt; db1 db2 db3 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; dump.sql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Permite selecionar múltiplos bancos de uma vez.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Backup incluindo triggers
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysqldump &lt;span class="nt"&gt;-u&lt;/span&gt; usuario &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--triggers&lt;/span&gt; &lt;span class="nt"&gt;--all-databases&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; dump.sql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Importante se você utiliza lógica automatizada no banco.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Backup incluindo procedures e functions
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysqldump &lt;span class="nt"&gt;-u&lt;/span&gt; usuario &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--routines&lt;/span&gt; &lt;span class="nt"&gt;--all-databases&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; dump.sql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essencial para sistemas com regras de negócio dentro do banco.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Compressão do backup
&lt;/h2&gt;

&lt;p&gt;Arquivos &lt;code&gt;.sql&lt;/code&gt; podem ficar grandes rapidamente. Compressão ajuda a economizar espaço e facilitar transferências.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Usando gzip (mais rápido)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysqldump &lt;span class="nt"&gt;-u&lt;/span&gt; usuario &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--all-databases&lt;/span&gt; | &lt;span class="nb"&gt;gzip&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; dump.sql.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🔹 Usando bzip2 (maior compressão)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysqldump &lt;span class="nt"&gt;-u&lt;/span&gt; usuario &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--all-databases&lt;/span&gt; | bzip2 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; dump.sql.bz2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  📊 Comparativo de compressão
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tipo de Dump&lt;/th&gt;
&lt;th&gt;Tamanho&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sem compressão&lt;/td&gt;
&lt;td&gt;947 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gzip&lt;/td&gt;
&lt;td&gt;297 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bzip2&lt;/td&gt;
&lt;td&gt;205 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;👉 &lt;strong&gt;Resumo:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gzip&lt;/code&gt;: mais rápido&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bzip2&lt;/code&gt;: melhor compressão (arquivo menor)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ♻️ Como restaurar um backup
&lt;/h2&gt;

&lt;p&gt;Restaurar é tão importante quanto fazer backup. Veja como:&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Restaurar dump normal
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysql &lt;span class="nt"&gt;-u&lt;/span&gt; usuario &lt;span class="nt"&gt;-p&lt;/span&gt; &amp;lt; dump.sql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🔹 Restaurar dump com gzip
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;gunzip&lt;/span&gt; &amp;lt; dump.sql.gz | mysql &lt;span class="nt"&gt;-u&lt;/span&gt; usuario &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🔹 Restaurar dump com bzip2
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bunzip2 &amp;lt; dump.sql.bz2 | mysql &lt;span class="nt"&gt;-u&lt;/span&gt; usuario &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚠️ Boas práticas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sempre teste seus backups&lt;/li&gt;
&lt;li&gt;Automatize com cron jobs&lt;/li&gt;
&lt;li&gt;Armazene backups em locais seguros (ex: cloud)&lt;/li&gt;
&lt;li&gt;Use compressão para economizar espaço&lt;/li&gt;
&lt;li&gt;Inclua &lt;code&gt;--routines&lt;/code&gt; e &lt;code&gt;--triggers&lt;/code&gt; quando necessário&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;O &lt;code&gt;mysqldump&lt;/code&gt; é uma ferramenta simples, poderosa e essencial para qualquer desenvolvedor ou DBA. Com poucos comandos, você garante a segurança dos seus dados e a tranquilidade para lidar com imprevistos.&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>cli</category>
      <category>backup</category>
      <category>terminal</category>
    </item>
    <item>
      <title>Como configurar o WSL para rodar em um HD externo</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Fri, 03 Apr 2026 23:10:53 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/como-configurar-o-wsl-para-rodar-em-um-hd-externo-315b</link>
      <guid>https://dev.to/jeanmfdias/como-configurar-o-wsl-para-rodar-em-um-hd-externo-315b</guid>
      <description>&lt;p&gt;Uma dúvida bastante comum entre desenvolvedores que utilizam Windows é: &lt;strong&gt;é possível configurar o WSL (Windows Subsystem for Linux) para rodar em um HD externo?&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;A resposta curta é: &lt;strong&gt;sim, é possível — e pode ser extremamente útil&lt;/strong&gt;, principalmente para quem quer economizar espaço no SSD principal ou manter ambientes portáteis.&lt;/p&gt;

&lt;p&gt;Neste artigo, vou te mostrar o conceito, os motivos para fazer isso e um passo a passo prático.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤔 Por que usar o WSL em um HD externo?
&lt;/h2&gt;

&lt;p&gt;Antes de tudo, vale entender quando isso faz sentido:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Seu SSD principal está com pouco espaço&lt;/li&gt;
&lt;li&gt;Você trabalha com múltiplos projetos pesados&lt;/li&gt;
&lt;li&gt;Quer levar seu ambiente Linux para outro computador&lt;/li&gt;
&lt;li&gt;Deseja isolar ambientes de desenvolvimento&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mas atenção: &lt;strong&gt;o desempenho pode ser inferior&lt;/strong&gt;, dependendo da velocidade do HD (principalmente se for USB 2.0 ou HD mecânico).&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Como o WSL armazena dados
&lt;/h2&gt;

&lt;p&gt;O WSL (principalmente o WSL2) utiliza um arquivo virtual (&lt;code&gt;ext4.vhdx&lt;/code&gt;) que funciona como um “disco Linux”.&lt;/p&gt;

&lt;p&gt;Por padrão, ele fica em:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;C&lt;/span&gt;:\Users\SEU_USUARIO\AppData\Local\Packages\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A ideia aqui é &lt;strong&gt;mover esse ambiente para um HD externo&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Passo a passo para mover o WSL para um HD externo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Verifique suas distros instaladas
&lt;/h3&gt;

&lt;p&gt;Abra o PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wsl &lt;span class="nt"&gt;--list&lt;/span&gt; &lt;span class="nt"&gt;--verbose&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exemplo de saída:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;NAME      STATE    VERSION
Ubuntu    Running  2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. Exporte a distro
&lt;/h3&gt;

&lt;p&gt;Você vai gerar um backup da sua distro:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wsl &lt;span class="nt"&gt;--export&lt;/span&gt; Ubuntu E:&lt;span class="se"&gt;\w&lt;/span&gt;sl&lt;span class="se"&gt;\u&lt;/span&gt;buntu.tar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Substitua &lt;code&gt;E:&lt;/code&gt; pelo caminho do seu HD externo.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  3. Remova a distro atual
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wsl &lt;span class="nt"&gt;--unregister&lt;/span&gt; Ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ Isso apaga a instalação atual — só faça depois do export.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Importe para o HD externo
&lt;/h3&gt;

&lt;p&gt;Agora você recria a distro diretamente no HD externo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wsl &lt;span class="nt"&gt;--import&lt;/span&gt; Ubuntu E:&lt;span class="se"&gt;\w&lt;/span&gt;sl&lt;span class="se"&gt;\u&lt;/span&gt;buntu E:&lt;span class="se"&gt;\w&lt;/span&gt;sl&lt;span class="se"&gt;\u&lt;/span&gt;buntu.tar &lt;span class="nt"&gt;--version&lt;/span&gt; 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5. Inicie normalmente
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wsl &lt;span class="nt"&gt;-d&lt;/span&gt; Ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto — agora seu WSL está rodando a partir do HD externo 🎉&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ Pontos de atenção
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔸 Performance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;SSD externo → desempenho ok&lt;/li&gt;
&lt;li&gt;HD externo → pode ficar lento&lt;/li&gt;
&lt;li&gt;USB 3.0+ é altamente recomendado&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔸 Conexão
&lt;/h3&gt;

&lt;p&gt;Se você desconectar o HD externo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O WSL não vai iniciar&lt;/li&gt;
&lt;li&gt;Pode gerar erros&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔸 Permissões
&lt;/h3&gt;

&lt;p&gt;Evite usar HD formatado como FAT32 — prefira:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NTFS (Windows)&lt;/li&gt;
&lt;li&gt;ou exFAT (com algumas limitações)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Dica avançada: múltiplos ambientes
&lt;/h2&gt;

&lt;p&gt;Você pode usar essa técnica para manter várias distros:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wsl &lt;span class="nt"&gt;--import&lt;/span&gt; projeto-api E:&lt;span class="se"&gt;\w&lt;/span&gt;sl&lt;span class="se"&gt;\a&lt;/span&gt;pi api.tar
wsl &lt;span class="nt"&gt;--import&lt;/span&gt; projeto-front E:&lt;span class="se"&gt;\w&lt;/span&gt;sl&lt;span class="se"&gt;\f&lt;/span&gt;ront front.tar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso ajuda a isolar ambientes sem conflito.&lt;/p&gt;




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

&lt;p&gt;Rodar o WSL em um HD externo é totalmente viável e pode ser uma solução excelente para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ganhar espaço no disco principal&lt;/li&gt;
&lt;li&gt;Criar ambientes portáteis&lt;/li&gt;
&lt;li&gt;Organizar melhor seus projetos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por outro lado, &lt;strong&gt;é importante considerar o impacto na performance&lt;/strong&gt; e garantir que o HD externo tenha uma boa velocidade de leitura e escrita.&lt;/p&gt;

&lt;p&gt;Se você trabalha com Docker, Laravel, Node ou projetos pesados, essa abordagem pode fazer bastante diferença na sua organização.&lt;/p&gt;

</description>
      <category>wsl</category>
      <category>linux</category>
      <category>ssd</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Install the Docker in OpenSUSE</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Thu, 17 Jul 2025 02:07:12 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/install-the-docker-in-opensuse-4ia8</link>
      <guid>https://dev.to/jeanmfdias/install-the-docker-in-opensuse-4ia8</guid>
      <description>&lt;p&gt;To install the Docker and Docker Compose in OpenSUSE, I’m used the Tumbleweed version, and the first thing to make sure your system is up to date, to do this run the next command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo zypper update&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Then run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo zypper install docker docker-compose&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;To know that if Docker is installed at your computer, run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo docker run hello-world&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;If you received the bellow message, it works done! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcar3owhaq25m1r7q2663.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcar3owhaq25m1r7q2663.png" alt="Command in Terminal" width="664" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A tip to execute the Docker without using &lt;code&gt;sudo&lt;/code&gt;, run the next command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo usermod -aG docker $USER&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;And now you can use the command below without the &lt;code&gt;sudo&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run hello-world&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Hope I helped.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>opensuse</category>
      <category>linux</category>
      <category>containers</category>
    </item>
    <item>
      <title>Variáveis em JavaScript</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Tue, 08 Jul 2025 12:51:41 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/variaveis-em-javascript-1gcp</link>
      <guid>https://dev.to/jeanmfdias/variaveis-em-javascript-1gcp</guid>
      <description>&lt;p&gt;Vamos começar com um explicação simples do que é variáveis. Elas são locais onde você pode armazenar valores, por exemplo gostaria de salvar o nome de uma pessoa em seu site, você poderia criar uma variável com o nome de &lt;code&gt;nomeDeUmaPessoa&lt;/code&gt; e  atribuir o nome da pessoa para ela utilizando o sinal de igual ( &lt;code&gt;=&lt;/code&gt; ), assim a variável iria conter o nome atribuído e em qualquer parte do site para poderia utilizar essa variável e o nome atribuído será exibido.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nomeDeUmaPessoa = “Jean Dias”&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para definir nomes de variáveis temos que seguir algumas regras para não dar erro:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Não pode conter apenas números e nem começar com números: &lt;code&gt;123abc&lt;/code&gt; ou &lt;code&gt;1567&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Não pode conter espaços: &lt;code&gt;nome De Uma Pessoa&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Não pode conter caracteres especiais &lt;code&gt;( * + &amp;amp; % )&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;No exemplo acima que montei utilizei um padrão de nomenclatura chamado Camel-case, é um excelente prática utilizar, nele cada palavra é separa começando com a letra maiúscula, sendo a primeira palavra sempre iniciada por minúscula.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NomeDeUmaPessoa, nomedeumapessoa, ou Nomedeumapessoa são formas incorretas para o padrão, mas irá funcionar normalmente, o padrão de nomenclatura não impacta na execução do programa, apenas deixa o código mais legível.&lt;/p&gt;

&lt;p&gt;Agora voltando para o JavaScript, nele existem 3 formas de se declarar uma variável, cada uma com seu objetivo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;var //com ela você declara uma variável comum&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;let //com ela você declara uma variável de escopo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;const //com ele você declara uma varável de escopo que não permite que o valor inicial seja alterado&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;code&gt;var numero = 32;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;let nome = “Jean Dias”;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const linguagemProgramacao = “JavaScript”;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uma explicação simples do que seja escopo. Uma vez que é declarado uma variável com um determinado nome, este nome não poderá ser usado para declarar nenhuma outra variável, mas caso seja declarado uma variável de escopo, apenas dentro do escopo em si ela poderá ser utilizada, a fora do escopo ela poderá se recriada com o mesmo nome e outro valor sem problemas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;funcaoTeste&lt;/span&gt;&lt;span class="p"&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;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&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;x&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No exemplo acima dentro do escopo da &lt;code&gt;funcaoTeste&lt;/code&gt; quando utilizar a constante &lt;code&gt;x&lt;/code&gt; ela terá o valor de 10, e fora do escopo da &lt;code&gt;funcaoTeste&lt;/code&gt; a variável pode ser recriada com o mesmo nome &lt;code&gt;x&lt;/code&gt; e terá outro valor.&lt;/p&gt;

&lt;p&gt;As variáveis são importantes dentro de qualquer programa, elas te permitem armazenar valores que será necessário no decorrer da execução de um programa, além de permitir que o mesmo fique dinâmico.&lt;/p&gt;

&lt;p&gt;Abaixo terá dois exemplos de programas JavaScript onde ambos será uma calculadora que apenas fará contas de soma entre dois números, no primeiro não iremos usar variáveis e no segundo iremos utilizar. Para o exemplo ficar mais completo irie criar um HTML para que você possa executar facilmente em sua maquina.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Exemplo de Uso de Variáveis&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Página de exemplo para variáveis em JavaScript&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/src/main.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Arquivo &lt;code&gt;index.html&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Digite um número:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Digite outro número:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeln&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="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Arquivo &lt;code&gt;main.js&lt;/code&gt; dentro da pasta &lt;code&gt;src&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Caso você já fez outro tutorial meu sobre Web Server para HTML, seu código no Visual Studio Code estará dessa forma:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxv9z2wl16to6oybx6waw.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxv9z2wl16to6oybx6waw.png" alt=" " width="298" height="160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Não se preocupe com os demais arquivos caso você não tenha feito vou deixar o link nas referencias para o outro tutorial, mas a estrutura base para o código acima funcionar é essa destacada em vermelho.&lt;/p&gt;

&lt;p&gt;Ao executar irá aparecer 2 popup perguntando números e no final você terá um resultado similar a esse:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ee3pf8hfvxtbb01wotb.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ee3pf8hfvxtbb01wotb.png" alt=" " width="737" height="125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repare que em nosso código JavaScript não criamos variável alguma, isso vira um problema pois todo número que o usuário digitar não será utilizado em nada visto que os valores da soma estão fixos.&lt;/p&gt;

&lt;p&gt;Agora vamos alterar o nosso &lt;code&gt;main.js&lt;/code&gt; e utilizar variável para armazenar os valores que o usuário digitar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;numero1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Digite um número:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;numero2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Digite outro número:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Arquivo &lt;code&gt;main.js&lt;/code&gt; dentro da pasta &lt;code&gt;src&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Agora temos algumas mudanças:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Estamos salvando o valor digitado no popup dentro de variáveis&lt;/li&gt;
&lt;li&gt;Estamos somando os valores e adicionando na variável chamada &lt;code&gt;resultado&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Note que para somar valores em JavaScript é preciso que os mesmo seja do tipo número por isso convertemos as variáveis de &lt;code&gt;numero1&lt;/code&gt; e &lt;code&gt;numero2&lt;/code&gt; para o tipo Inteiro com a função &lt;code&gt;parseInt&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pronto assim ao executar nosso programa os valores que você digitar nos popups de fato serão somados e exibido em tela.&lt;/p&gt;

&lt;p&gt;Mas comentei acima sobre tipos, esse detalhe precisamos explicar melhor.&lt;/p&gt;

&lt;p&gt;Dentro de qualquer linguagem de programação, existem tipos de variáveis os mais comuns são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;String (Texto)&lt;/li&gt;
&lt;li&gt;Integer (Número Inteiro)&lt;/li&gt;
&lt;li&gt;Float (Número de Ponto Flutuante)&lt;/li&gt;
&lt;li&gt;Boolean (Boleano → Verdadeiro ou Falso)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No JavaScript este tipos são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;string&lt;/li&gt;
&lt;li&gt;number (Integer ou Float)&lt;/li&gt;
&lt;li&gt;boolean&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Os tipos permitem que você possa manipular os valores de forma precisa, no JavaScript não é necessário colocar de forma explicita qual o tipo de cada variável pois ele tem tipagem de variáveis de forma dinâmica (tipagem dinâmica), fazendo com que ao atribuir um valor o JavaScript identifique qual o tipo (String, Number ou Boolean), e atribui para a variável.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Jean&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// string&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;idade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// number&lt;/span&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;idade&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// irá retornar -&amp;gt; Jean32&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;idade&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;idade&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// irá retornar -&amp;gt; 64&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse exemplo é possível notar que ao somar uma variável do tipo String com uma do tipo Number será feita a concatenação dos valores, e ao somar variáveis do tipo Number o resultado será uma soma numérica.&lt;/p&gt;

&lt;p&gt;Agora um ponto no exemplo que criamos acima, os números digitados pelo usuário precisaram passar antes pela função &lt;code&gt;parseInt&lt;/code&gt;, o motivo disto é que a função &lt;code&gt;window.prompt&lt;/code&gt; que cria um popup na tela para o usuário digitar algo, sempre retorna uma string, com isso se o usuário digitar em ambos os popup, os números 15 e 7 respectivamente, sem utilizar a função &lt;code&gt;parseInt&lt;/code&gt;, não iria ocorrer a soma, e sim uma concatenação, e na variável &lt;code&gt;resultado&lt;/code&gt; não teria o valor de 22 e sim 157.&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="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// irá retornar -&amp;gt; 22&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;15&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;7&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// irá retornar -&amp;gt; 157&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Espero que tenha ajudado os estudantes e aspirantes a JavaScript, com esse tutorial. Bons estudos!!!&lt;/p&gt;

&lt;p&gt;Referências:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/jeanmfdias/aprendendo-html-css-javascript-utilizando-um-web-server-em-nodejs-30b1"&gt;https://dev.to/jeanmfdias/aprendendo-html-css-javascript-utilizando-um-web-server-em-nodejs-30b1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Configurando o WSL em menos de 15 minutos</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Tue, 17 Jun 2025 12:33:05 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/configurando-o-wsl-em-menos-de-15-minutos-5al7</link>
      <guid>https://dev.to/jeanmfdias/configurando-o-wsl-em-menos-de-15-minutos-5al7</guid>
      <description>&lt;p&gt;Certo, irei partir do principio que seu Windows 10 esteja com todas as atualizações feitas, até a última versão disponível.&lt;/p&gt;

&lt;p&gt;— O meu está na versão 21H1&lt;/p&gt;

&lt;p&gt;Esse tutorial tem o objetivo instalar e deixar configurado o Windows Subsystem for Linux (WSL) em sua versão 2.&lt;/p&gt;

&lt;p&gt;Em relação a ser em menos de 15 minutos, vai depender de sua maquina estar utilizando um SSD para o Windows reiniciar rápido e uma internet também rápida (a minha tem 300 Mbs) pois é baixado um conteúdo de 450MB em média.&lt;/p&gt;

&lt;p&gt;Com todos os Updates feitos o primeiro passo é abrir o Windows PowerShell em modo Administrador. Para isso basta clicar com o botão direito no ícone do menu iniciar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2e542utm0253m3iwtd9.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2e542utm0253m3iwtd9.png" alt=" " width="687" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após iniciar o Windows PowerShell, copie o comando abaixo e cole no terminal. Este comando irá instalar o Windows Subsystem for Linux (WSL)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hvljv1efnpnqzuycfen.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hvljv1efnpnqzuycfen.png" alt=" " width="720" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tecle &lt;em&gt;Enter&lt;/em&gt; e aguarde alguns segundo para finalizar a instalação. Logo em seguida copie este outro comando e o cole no PowerShell. Este será responsável por instalar complementos para utilizar virtualização.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewfhlpm6dzvso0ig9twm.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewfhlpm6dzvso0ig9twm.png" alt=" " width="720" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tecle Enter e novamente aguarde alguns segundos para finalizar a instalação. Após isto &lt;strong&gt;reinicie o computador&lt;/strong&gt; para continuarmos a configuração do WSL.&lt;/p&gt;

&lt;p&gt;Ao voltar para o Windows faça o download do pacote abaixo, que será responsável por atualizar o Kernel linux permitindo assim o uso da versão 2 do WSL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi" rel="noopener noreferrer"&gt;https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A instalação é bastantes simples, basta dar next e pronto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uul130kfi3l0jc13dsf.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uul130kfi3l0jc13dsf.png" alt=" " width="525" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois inicie o Windows PowerShell e copie e cole o comando abaixo, ele será responsável por habilitar o WSL 2 por padrão para qualquer distro linux.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wsl --set-default-version 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fan6qx84bhgweyxod4xy2.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fan6qx84bhgweyxod4xy2.png" alt=" " width="720" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após definido a versão 2 como padrão vamos instalar uma distro linux para utilizarmos como base. A partir deste ponto utilizar o WSL pode lhe parecer bastante similar a utilizar um server linux, visto que você terá a interface de linha de comando da distro selecionada.&lt;/p&gt;

&lt;p&gt;Para instalar a distro pode utilizar o meio oficial, direto pela Microsoft Store, ou utilizar algum outro tutorial pela Internet para utilizar sua distro favorita.&lt;/p&gt;

&lt;p&gt;Hoje está disponível as seguintes distros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;OpenSUSE&lt;/li&gt;
&lt;li&gt;Kali&lt;/li&gt;
&lt;li&gt;Debian&lt;/li&gt;
&lt;li&gt;Fedora Remix&lt;/li&gt;
&lt;li&gt;Pengwin&lt;/li&gt;
&lt;li&gt;Alpine WSL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basta acessar a loja procurar sua distro favorita e instalar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffutk28tvxg0kzwmx3x5x.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffutk28tvxg0kzwmx3x5x.png" alt=" " width="720" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois execute o primeira inicialização da distro, no meu caso escolhi o Ubuntu, você poderá fazer pela própria loja ou procurando no menu Iniciar. Essa primeira execução você irá definir o seu usuário e senha do linux.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2t96mxseor33xtr0nt95.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2t96mxseor33xtr0nt95.png" alt=" " width="720" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após isso você pode iniciar o Windows PowerShell ou o novo Windows Terminal, que pode ser encontrado na própria Microsoft Store, e digitar o comando abaixo para verificar se o linux, foi instalado corretamente na versão WSL 2.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6ww20pr755eszoq2gqn.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6ww20pr755eszoq2gqn.png" alt=" " width="720" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E para finalizar basta digitar apenas **wsl **no Terminal para inciar.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2w7b0pqxp2jlop7merqw.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2w7b0pqxp2jlop7merqw.png" alt=" " width="720" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pronto! Agora você já tem o WSL 2 rodando no seu Windows e pode usar as ferramentas do linux, servidor Nginx, Docker, PHP-cli, Node.js entre outros.&lt;/p&gt;

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

&lt;p&gt;Eu costumo fazer algumas configurações personalizadas, como alterar o ponto de montagem do diretório c: e também limitar a quantidade de recursos gastos pelo WSL.&lt;/p&gt;

&lt;p&gt;Para alterar o ponto de montagem, que por padrão vem no &lt;strong&gt;/mnt&lt;/strong&gt; eu edito o arquivo &lt;strong&gt;wsl.conf&lt;/strong&gt; que fica dentro da pasta &lt;strong&gt;/etc&lt;/strong&gt;, para isso eu digito o seguinte comando usando o vim mas pode ser alterado pelo nano se preferir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo vim /etc/wsl.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0vs9vhr8aitdytfb01v.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0vs9vhr8aitdytfb01v.png" alt=" " width="720" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E adiciono o seguintes comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[automount]
root = /
options = "metadata"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;strong&gt;root = / *&lt;em&gt;irá definir que não será montado mais em *&lt;/em&gt;/mnt **e sim na raiz /, o&lt;/strong&gt; options = “metadata”** faz um ajuste de permissões de arquivos para evitar o “famoso” 777.&lt;/p&gt;

&lt;p&gt;E para limitar a quantidade de recursos edito o arquivo &lt;strong&gt;.wslconfig&lt;/strong&gt; dentro da pasta do usuário no próprio Windows, no meu caso &lt;strong&gt;c:\Users\Jean&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vim .wslconfig
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvf4dilxnt0sz7l4z04v.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvf4dilxnt0sz7l4z04v.png" alt=" " width="720" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E digito o conteúdo a seguir, que limita a quantidade de memória RAM e processador (CPU) que será utilizado. Geralmente coloco entre 25% a 40% de meus recursos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[wsl2]
memory=4GB
processors=4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvv8cm3d0o8tna5if4sa.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvv8cm3d0o8tna5if4sa.png" alt=" " width="720" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E com isso você tem o básico para poder começar a desenvolver.&lt;/p&gt;

&lt;p&gt;Qualquer dúvida ou sugestões podem deixar nos comentários abaixo.&lt;/p&gt;

&lt;h2&gt;
  
  
  UPDATE
&lt;/h2&gt;

&lt;p&gt;Em versões mais recentes do Windows 10/11 basta utilizar o comando abaixo no terminal em modo Administrador, e logo em seguida reiniciar o computador para que o WSL2 seja instalado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wsl --install -d Ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dessa forma o Windows fará tudo automaticamente e você já pode pular para as dicas bônus acima.&lt;/p&gt;

</description>
      <category>wsl</category>
      <category>linux</category>
      <category>windows</category>
      <category>environment</category>
    </item>
    <item>
      <title>MySQL — Removendo Full Only Group By no MacOS X</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Tue, 17 Jun 2025 12:20:56 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/mysql-removendo-full-only-group-by-no-macos-x-ndl</link>
      <guid>https://dev.to/jeanmfdias/mysql-removendo-full-only-group-by-no-macos-x-ndl</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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgq999v2smqcg9pbq1lgj.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgq999v2smqcg9pbq1lgj.png" alt=" " width="720" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bom dia pessoal, um problema que ocorre muito nas versões mais recentes do MySQL, no meu caso a versão 8, e também na versão 5.7, é a funcionalidade de FULL ONLY GROUP BY. Funcionalidade essa que impede de usar a instrução GROUP BY em uma query sem que aplique todos os campos utilizados dentro do SELECT.&lt;/p&gt;

&lt;p&gt;Mas para pular essa trava, no OSX (minha versão Mojave) basta seguir os passos a seguir:&lt;/p&gt;

&lt;p&gt;Vá até o Terminal e digite:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;find / -name my.cnf&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Este comando irá encontrar os local onde o arquivo my.cnf está. Então crie um link simbólico para ele, dentro da pasta /etc, da seguinte forma:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo ln -s /usr/local/etc/my.cnf /etc/my.cnf&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Agora acesse seu MySQL e execute o comando a seguir:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SELECT @@GLOBAl.sql_mode;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Ele irá retornar o seguinte resultado:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Copie a valor retornado e acesse o arquivo my.cnf para editar:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo vim /etc/my.cnf&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Dentro do arquivo após a linha [mysqld] adicione a instrução sql_mode, com os valores retornados na consulta acima, e remova a parte &lt;strong&gt;ONLY_FULL_GROUP_BY&lt;/strong&gt;, ficando igual abaixo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Após salvar o arquivo(:wq), reinicie o MySQL e pronto você poderá utilizar a instrução GROUP BY sem mais complicações.&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>groupby</category>
      <category>sql</category>
      <category>osx</category>
    </item>
    <item>
      <title>Instalando KVM para emulador Android no Deepin 15.8</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Tue, 17 Jun 2025 12:17:42 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/instalando-kvm-para-emulador-android-no-deepin-158-1aa7</link>
      <guid>https://dev.to/jeanmfdias/instalando-kvm-para-emulador-android-no-deepin-158-1aa7</guid>
      <description>&lt;p&gt;Olá neste artigo irei mostrar como configurar o KVM no Deepin 15.8 para executar o emulador de Android.&lt;/p&gt;

&lt;p&gt;Os passos são bem simples. Primeiro verifique se a virtualização está habilitada executando o seguinte comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;grep --color vmx /proc/cpuinfo&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Agora vamos instalar o KVM. Execute os comandos abaixo, substituindo onde está escrito “usuario” pelo nome de seu usuário do sistema.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get install qemu-kvm libvirt-clients libvirt-daemon-system&lt;br&gt;
sudo adduser usuario libvirt&lt;br&gt;
sudo adduser usuario libvirt-qemu&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Agora para verificar se o KVM está instalado, execute o próximo comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$HOME/Android/Sdk/tools/emulator -accel-check&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Após isto aparecerá uma mensagem informando que o KVM está instalado. Neste último comando a localização irá depender de onde você ter instalado o SDK do Android.&lt;/p&gt;

</description>
      <category>kvm</category>
      <category>linux</category>
      <category>android</category>
    </item>
    <item>
      <title>Instalar Java 9 no Deepin</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Tue, 17 Jun 2025 12:15:45 +0000</pubDate>
      <link>https://dev.to/jeanmfdias/instalar-java-9-no-deepin-4e85</link>
      <guid>https://dev.to/jeanmfdias/instalar-java-9-no-deepin-4e85</guid>
      <description>&lt;p&gt;Olá hoje irei mostrar como instalar o Java 9 no Deepin 15.5.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4riifrm5sk1heonn3j2.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4riifrm5sk1heonn3j2.png" alt=" " width="720" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para instalar execute os seguintes comandos:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo vim /etc/apt/sources.list.d/webupd8team-java.list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pressione a tecla I e adicione a seguinte linha no aquivo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Precione a tecla ESC, em seguida digite&lt;/p&gt;

&lt;p&gt;&lt;code&gt;:wq&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Agora vamos adicionar a Key para o repositório novo, e instalar o Oracle Java 9.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886  &lt;br&gt;
sudo apt update&lt;br&gt;
sudo apt install oracle-java9-installer&lt;br&gt;
sudo apt install oracle-java9-set-default&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pronto, agora digite o comando a seguir para verificar se a versão do Java foi instalada corretamente.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;java -version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Obs.: neste mesmo repositório do Java 9 tem as versões Java 7 e Java 8, caso seja necessário a instalação destas versões no Deepin, basta substituir nos comandos acima onde está:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt install oracle-java9-installer&lt;br&gt;
sudo apt install oracle-java9-set-default&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;por:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt install oracle-java8-installer&lt;br&gt;
sudo apt install oracle-java8-set-default&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;para o Java 8 e por:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt install oracle-java7-installer&lt;br&gt;
sudo apt install oracle-java7-set-default&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;para o Java 7.&lt;/p&gt;

&lt;p&gt;Desinstalação&lt;/p&gt;

&lt;p&gt;Para efetuar a desinstalação utilize os seguintes comandos:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt remove --purge oracle-java9-installer&lt;br&gt;
sudo apt autoremove&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;E substituindo a palavra java9 por java8 ou java7, permite que você desinstale as demais versões.&lt;/p&gt;

</description>
      <category>java</category>
      <category>linux</category>
      <category>deepin</category>
    </item>
  </channel>
</rss>
