<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jean Dias</title>
    <description>The latest articles on Forem by Jean Dias (@jeanmfdias).</description>
    <link>https://forem.com/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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F443611%2Fd7880771-3f77-4d92-b1c5-234b718d3ee6.png</url>
      <title>Forem: Jean Dias</title>
      <link>https://forem.com/jeanmfdias</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jeanmfdias"/>
    <language>en</language>
    <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://forem.com/jeanmfdias/guia-completo-de-backup-e-restauracao-no-mysql-3ie</link>
      <guid>https://forem.com/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://forem.com/jeanmfdias/como-configurar-o-wsl-para-rodar-em-um-hd-externo-315b</link>
      <guid>https://forem.com/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://forem.com/jeanmfdias/install-the-docker-in-opensuse-4ia8</link>
      <guid>https://forem.com/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://forem.com/jeanmfdias/variaveis-em-javascript-1gcp</link>
      <guid>https://forem.com/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://forem.com/jeanmfdias/configurando-o-wsl-em-menos-de-15-minutos-5al7</link>
      <guid>https://forem.com/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="Image description" 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="Image description" 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="Image description" 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="Image description" 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="Image description" 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="Image description" 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="Image description" 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="Image description" 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="Image description" 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="Image description" 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="Image description" 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="Image description" 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://forem.com/jeanmfdias/mysql-removendo-full-only-group-by-no-macos-x-ndl</link>
      <guid>https://forem.com/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="Image description" 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://forem.com/jeanmfdias/instalando-kvm-para-emulador-android-no-deepin-158-1aa7</link>
      <guid>https://forem.com/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://forem.com/jeanmfdias/instalar-java-9-no-deepin-4e85</link>
      <guid>https://forem.com/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="Image description" 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>
    <item>
      <title>Wi-Fi no Deepin 15.5 com lentidão</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Tue, 17 Jun 2025 12:07:31 +0000</pubDate>
      <link>https://forem.com/jeanmfdias/wi-fi-no-deepin-155-com-lentidao-20p8</link>
      <guid>https://forem.com/jeanmfdias/wi-fi-no-deepin-155-com-lentidao-20p8</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%2F9qi8s10sx0tyl5cbr7rt.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%2F9qi8s10sx0tyl5cbr7rt.png" alt="Image description" width="720" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Olá, tenho um notebook Dell Inspiron 14 e recentemente instalei o Deepin, durante o uso percebi que para navegar na Internet todos os sites estavam muito lentos e os downloads em repositórios também.&lt;/p&gt;

&lt;p&gt;Após isso pesquisando encontrei no fórum do Deepin uma solução que funcionou, o tudo indica é que era problema de incompatibilidade do driver que já vem instalado por padrão, e não permitia o dispositivo wi-fi funcionar corretamente.&lt;/p&gt;

&lt;p&gt;Segue abaixo a soluçã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 echo&lt;/span&gt; &lt;span class="s2"&gt;"options ath9k nohwcrypt=1"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /etc/modprobe.d/ath9k.conf
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt remove &lt;span class="nt"&gt;--purge&lt;/span&gt; firmware-atheros
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt remove &lt;span class="nt"&gt;--purge&lt;/span&gt; wireless-tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Obrigado.&lt;/p&gt;

&lt;p&gt;— Update —&lt;/p&gt;

&lt;p&gt;Em algumas versões de notebook, essa solução pode não funcionar devido que este driver atheros seja o principal para o notebook, o que pode causar a desativação da placa de wi-fi, caso ocorra isto, basta reverter o procedimento, instalando os pacotes removidos acima.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>deepin</category>
      <category>dell</category>
      <category>wireless</category>
    </item>
    <item>
      <title>Aprendendo HTML + CSS + JavaScript utilizando um Web Server em Node.js</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Tue, 17 Jun 2025 11:55:27 +0000</pubDate>
      <link>https://forem.com/jeanmfdias/aprendendo-html-css-javascript-utilizando-um-web-server-em-nodejs-30b1</link>
      <guid>https://forem.com/jeanmfdias/aprendendo-html-css-javascript-utilizando-um-web-server-em-nodejs-30b1</guid>
      <description>&lt;p&gt;Para começar instale o Node.js, estou usando para esse tutorial a versão 24.1.0, mas a versão LTS no momento é a 22.16.0.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;https://nodejs.org/en&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crie um pasta com o nome do seu projeto de estudos, abra ela dentro do terminal e digite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Irá iniciar um prompt perguntando algumas informações, que em outro artigo posso explicar cada uma delas, mas por enquanto vamos apenas ir aceitando tudo até ele gerar um arquivo chamado &lt;strong&gt;package.json&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;Abra seu projeto no Visual Studio Code, estando dentro da pasta no terminal basta digitar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;code &lt;span class="nb"&gt;.&lt;/span&gt;
&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%2Fxdebz0syh5nh225fygsb.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%2Fxdebz0syh5nh225fygsb.png" alt="Image description" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora vamos dar um aspecto de um projeto mais real, criar as seguintes pastas e arquivos para que a estrutura fique igual a imagem abaixo:&lt;/p&gt;

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

&lt;p&gt;Vamos apenas colocar um conteúdo de exemplo em cada arquivo, no &lt;strong&gt;index.html&lt;/strong&gt; você pode adicionar o código a seguir:&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;HTML executando em um Web Server&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/assets/css/styles.css"&lt;/span&gt;&lt;span class="nt"&gt;&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;/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;Esse site está executando em um Web Server&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/pages/pagina1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Link para a Página 1&lt;span class="nt"&gt;&amp;lt;/a&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;No arquivo &lt;strong&gt;main.js&lt;/strong&gt; dentro da pasta &lt;strong&gt;src&lt;/strong&gt;, coloque o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Conteúdo da página carregado com sucesso!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No arquivo &lt;strong&gt;styles.css&lt;/strong&gt; dentro da pasta &lt;strong&gt;assets/css,&lt;/strong&gt; coloque o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Arial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;640px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E por fim no arquivo &lt;strong&gt;pagina1.html&lt;/strong&gt; dentro da pasta &lt;strong&gt;pages,&lt;/strong&gt; adicione o seguinte código:&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;Página 1 executando em um Web Server&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/assets/css/styles.css"&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;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Essa é a página 1 rodando dentro de um Web Server&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Link para a Página Inicial&lt;span class="nt"&gt;&amp;lt;/a&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;Após todo o código adicionado, vamos adicionar a cereja do bolo, que será o Web Server. Para isso iremos instalar um pacote do Node.js, que nada mais é que um código que foi desenvolvido por terceiros e agora podemos utilizar dentro do nosso projeto.&lt;/p&gt;

&lt;p&gt;Para isso basta voltar ao terminal dentro da pasta do seu projeto e digitar o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i http-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repare que após o processo foi criado um novo arquivo chamado &lt;strong&gt;package-lock.json&lt;/strong&gt; e uma pasta chamada &lt;strong&gt;node_modules&lt;/strong&gt;, é dentro dela que está o código do pacote &lt;strong&gt;http-server&lt;/strong&gt; que instalamos.&lt;/p&gt;

&lt;p&gt;Agora para executar nossa projeto basta no terminal digitar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx http-server &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explicando o comando acima:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;npx →&lt;/strong&gt; ele serve para executar scritps do Node.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;http-server →&lt;/strong&gt; é o pacote responsável por iniciar um Web Server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-o →&lt;/strong&gt; esse parâmetro no comando é responsável por indicar qual o ponto de partida, no caso a própria pasta, assim ele irá procurar um arquivo com o nome de &lt;strong&gt;index.html&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-p 8080 →&lt;/strong&gt; e nesse parâmetro indicamos qual a porta iremos utilizar, o que permite que tenhamos outros Web Server, rodando na mesma maquina ao mesmo tempo, cada um em uma porta diferente&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Após executar a saída no terminal será assim:&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%2Fa4wn72y31oeef5foy5n1.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%2Fa4wn72y31oeef5foy5n1.png" alt="Image description" width="775" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para encerrar basta pressionar &lt;strong&gt;CTRL+C&lt;/strong&gt; no terminal que o Web Server será desligado. E para visualizar seu site basta entrar no navegador de sua preferência e digitar o endereço informado na saída do comando, no meu caso: &lt;a href="http://127.0.0.1:8080/" rel="noopener noreferrer"&gt;http://127.0.0.1:8080&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao acessar você recebera a página da seguinte 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%2Fubgqtp9ipts5wo56czje.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%2Fubgqtp9ipts5wo56czje.png" alt="Image description" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repare que no endereço você não verá mais o caminho absoluto do arquivo &lt;strong&gt;index.html&lt;/strong&gt; em seu computador, e sim um endereço similar aos sites na Internet, e dessa forma você vai conseguir simular o comportamento de seu projeto dentro da Internet quando ele estiver publicado em um Servidor ou plataforma de hospedagem.&lt;/p&gt;

&lt;p&gt;Note também que no terminal enquanto o Web Server estiver executando, você receberá os logs de cada requisição que for feita no navegador, por exemplo ao clicar no &lt;strong&gt;Link para a Página 1&lt;/strong&gt;:&lt;/p&gt;

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

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

</description>
      <category>html</category>
      <category>css</category>
      <category>javascript</category>
      <category>webserver</category>
    </item>
    <item>
      <title>Convert a Key .ppk to .pem</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Fri, 24 Jan 2025 13:41:21 +0000</pubDate>
      <link>https://forem.com/jeanmfdias/convert-a-key-ppk-to-pem-29dk</link>
      <guid>https://forem.com/jeanmfdias/convert-a-key-ppk-to-pem-29dk</guid>
      <description>&lt;p&gt;To convert a key in format .ppk to .pem on Ubuntu, follow the next steps:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt install putty-tools&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And finish&lt;/p&gt;

&lt;p&gt;&lt;code&gt;puttygen key.ppk -O private-openssh -o key.pem&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Done&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
    </item>
    <item>
      <title>Install ASDF on Mageia 9</title>
      <dc:creator>Jean Dias</dc:creator>
      <pubDate>Tue, 10 Sep 2024 23:07:48 +0000</pubDate>
      <link>https://forem.com/jeanmfdias/install-asdf-on-mageia-9-2omo</link>
      <guid>https://forem.com/jeanmfdias/install-asdf-on-mageia-9-2omo</guid>
      <description>&lt;p&gt;Today we go to install ASDF on Mageia 9. The next steps will go install the plugins to PHP and Node.js.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To install ASDF on version 0.14.1, I used the version for Git + ZSH:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;echo '. "$HOME/.asdf/asdf.sh"' &amp;gt;&amp;gt; ~/.zshrc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;echo 'fpath=(${ASDF_DIR}/completions $fpath)' &amp;gt;&amp;gt; ~/.zshrc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;echo 'autoload -Uz compinit &amp;amp;&amp;amp; compinit' &amp;gt;&amp;gt; ~/.zshrc&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add Node.js Plugin&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;sudo dnf install gnupg2 curl gawk&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add PHP plugin&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;sudo dnf install autoconf bison re2c libxml2-devel sqlite3-devel libgd-devel gcc-c++ lib64oniguruma-devel libpqxx-devel readline-devel libzip-devel&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;asdf plugin-add php https://github.com/asdf-community/asdf-php.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Done, ASDF with PHP and Node.js installed.&lt;/p&gt;

</description>
      <category>asdf</category>
      <category>php</category>
      <category>linux</category>
      <category>mageia</category>
    </item>
  </channel>
</rss>
