<?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: Diego Dmitry</title>
    <description>The latest articles on DEV Community by Diego Dmitry (@diegodmitry).</description>
    <link>https://dev.to/diegodmitry</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%2F952367%2F5cceb836-a2d7-4827-a5fe-aaae4d3243a3.png</url>
      <title>DEV Community: Diego Dmitry</title>
      <link>https://dev.to/diegodmitry</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/diegodmitry"/>
    <language>en</language>
    <item>
      <title>Como Monitorar Processos Linux com Prometheus e Grafana</title>
      <dc:creator>Diego Dmitry</dc:creator>
      <pubDate>Mon, 22 Jul 2024 09:09:20 +0000</pubDate>
      <link>https://dev.to/diegodmitry/como-monitorar-processos-linux-com-prometheus-e-grafana-2c87</link>
      <guid>https://dev.to/diegodmitry/como-monitorar-processos-linux-com-prometheus-e-grafana-2c87</guid>
      <description>&lt;p&gt;Então, você é um administrador de sistemas ou é DevOps? Aposto que adora passar seus dias colado na tela, caçando métricas de desempenho nos seus servidores. Coisa emocionante, não é?&lt;/p&gt;

&lt;p&gt;Às vezes, as máquinas simplesmente decidem tirar uma soneca, rodando mais devagar que uma lesma, e claro, elas não deixam pistas sobre o que está errado. Super útil!&lt;/p&gt;

&lt;p&gt;E quem nunca foi bloqueado de executar comandos remotos como top ou htop em máquinas que não respondem? É o auge da produtividade. Basta sentar e curtir enquanto você não consegue nem olhar o que está errado. Ah, e não vamos esquecer aquelas lentidões surpresas. Estão sempre à espreita, mas identificá-los de uma maneira rápida e simples? Ha! Boa sorte!&lt;/p&gt;

&lt;p&gt;Mas e se, nesse mundo de constantes surpresas, tivéssemos um painel completo que realmente ajudasse a rastrear o desempenho geral e os processos individuais?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvt73dswxazmx8z6pay9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvt73dswxazmx8z6pay9.png" alt="Painel do Grafana com uso de CPU e memória" width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O objetivo deste tutorial é criar um painel de monitoramento que talvez salve o administrador de sistemas de arrancar os cabelos.&lt;br&gt;
&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdHc3N282em1nN200b20wN2pqdTVsbzI3dnBnM3lueHJvazhmY2szNCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/11daZqJWhUZucE/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdHc3N282em1nN200b20wN2pqdTVsbzI3dnBnM3lueHJvazhmY2szNCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/11daZqJWhUZucE/giphy.gif" alt="gif puxando os cabelos" width="450" height="253"&gt;&lt;/a&gt; &lt;br&gt; &lt;br&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Índice
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExcXRrZ2RxeXA5MTlrNzc4YzNsd3BpYXZpNWt5Mnd0dmUzcjMzNHM2MSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/48NwKxvf3zNfdO33rv/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExcXRrZ2RxeXA5MTlrNzc4YzNsd3BpYXZpNWt5Mnd0dmUzcjMzNHM2MSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/48NwKxvf3zNfdO33rv/giphy.gif" alt="gif olhando uma lista telefônica de páginas amarelas" width="320" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O que você vai aprender&lt;/li&gt;
&lt;li&gt;Noções Básicas de Monitoramento de Processos Unix&lt;/li&gt;
&lt;li&gt;Detalhamento da Nossa Arquitetura de Monitoramento&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Instalando as Diferentes Ferramentas&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instalando Pushgateway&lt;/li&gt;
&lt;li&gt;Instalando Prometheus&lt;/li&gt;
&lt;li&gt;Instalando Grafana&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Construindo um Script Bash para Recuperar Métricas&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Construindo um Painel Incrível com Grafana&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Construindo Medidores Arredondados&lt;/li&gt;
&lt;li&gt;Construindo Medidores Horizontais&lt;/li&gt;
&lt;li&gt;Construindo Medidores Verticais&lt;/li&gt;
&lt;li&gt;Construindo Gráficos de Linha&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uma Palavra Rápida para Concluir &lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  O Que Você Vai Aprender
&lt;/h3&gt;

&lt;p&gt;Antes de mergulharmos de cabeça neste mundo maravilhoso da tecnologia, vamos dar uma olhada no que este artigo vai iluminar para você:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compreender as formas de monitorar o desempenho de processos em sistemas Unix.&lt;/li&gt;
&lt;li&gt;Instalar as novas versões brilhantes do Prometheus v2.9.2, Pushgateway v0.8.0 e Grafana v11&lt;/li&gt;
&lt;li&gt;Construir um script bash simples que magicamente exporta métricas para o Pushgateway.&lt;/li&gt;
&lt;li&gt;Criar um painel completo no Grafana com todos os recursos como os painéis ‘Gauge’ e ‘Bar Gauge’.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Noções Básicas de Monitoramento de Processos Unix
&lt;/h3&gt;

&lt;p&gt;Quando se trata de monitorar processos em sistemas Unix, você está com sorte. A opção mais popular é ‘top’.&lt;/p&gt;

&lt;p&gt;O comando top te dá métricas de desempenho como uso de CPU e memória, junto com métricas de processos individuais. É a ferramenta preferida dos administradores de sistemas para detectar gargalos de desempenho.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M0z74rB_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.howtoforge.com/images/command-tutorial/big/top-output-basic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M0z74rB_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.howtoforge.com/images/command-tutorial/big/top-output-basic.png" alt="Imagem do comando top" width="500" height="285"&gt;&lt;/a&gt; &lt;br&gt;&lt;/p&gt;

&lt;p&gt;Depois tem o htop, o primo colorido do top, que exibe as mesmas métricas mas com um pouco mais de brilho. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c1Vs8uRl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.linuxfordevices.com/wp-content/uploads/2020/06/htop_main_screen-1024x584.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c1Vs8uRl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.linuxfordevices.com/wp-content/uploads/2020/06/htop_main_screen-1024x584.png" alt="Imagem do comando htop" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mas por que construir outra ferramenta de monitoramento de processos? Ótima pergunta! A principal razão é a disponibilidade do sistema: durante uma sobrecarga do sistema, top e htop são tão úteis quanto uma chaleira de chocolate.&lt;/p&gt;

&lt;p&gt;Ao externalizar o monitoramento de processos, você pode analisar a raiz do problema sem nunca acessar a máquina. Quem precisa de acesso direto quando você tem um painel de monitoramento que pode magicamente voltar no tempo para mostrar qual processo foi o culpado?&lt;/p&gt;

&lt;p&gt;Agora você sabe o básico de monitoramento de processos.&lt;br&gt;
&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGxlaHlqaDBvcWN3NmlpaHRtZ2hjY2dtbGx6N3R5MW12NGlwZnBiMCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/fRlg6MIPpBvz2/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGxlaHlqaDBvcWN3NmlpaHRtZ2hjY2dtbGx6N3R5MW12NGlwZnBiMCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/fRlg6MIPpBvz2/giphy.gif" alt="parabéns" width="474" height="510"&gt;&lt;/a&gt; &lt;br&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Detalhamento da Arquitetura
&lt;/h3&gt;

&lt;p&gt;Antes de nos perdermos nos detalhes, vamos olhar a arquitetura que vamos usar. &lt;br&gt;
Ela é projetada para ser:&lt;br&gt;
    &lt;strong&gt;Eficiente em termos de recursos&lt;/strong&gt;: Para não consumir todos os seus recursos preciosos.&lt;br&gt;
    &lt;strong&gt;Simples de implantar&lt;/strong&gt;: Porque você não tem nada além de tempo, certo?&lt;br&gt;
    &lt;strong&gt;Escalável&lt;/strong&gt;: Para quando monitorar um servidor não for desafio suficiente.&lt;/p&gt;

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

&lt;p&gt;Nossa arquitetura inclui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Um script bash que envia métricas para o Pushgateway.&lt;/li&gt;
&lt;li&gt;Pushgateway: Um cache de métricas para os dados do nosso script bash.&lt;/li&gt;
&lt;li&gt;Prometheus: O banco de dados de séries temporais que coleta e armazena essas métricas.&lt;/li&gt;
&lt;li&gt;Grafana: A ferramenta de painel que visualiza essas métricas, tornando sua vida mais fácil.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para aqueles que conhecem o Prometheus, vocês sabem que ele coleta dados via HTTP para reunir métricas. Nosso script bash, no entanto, não expõe nenhuma porta HTTP, então precisamos do Pushgateway para preencher essa lacuna.&lt;/p&gt;

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

&lt;p&gt;Agora, vamos à parte divertida: instalar todas essas ferramentas.&lt;/p&gt;
&lt;h4&gt;
  
  
  Instalando Pushgateway
&lt;/h4&gt;

&lt;p&gt;Execute, no terminal, o comando &lt;strong&gt;wget&lt;/strong&gt; para baixar os binários mais recentes. &lt;br&gt;
No linux, o download pode ser feito no diretório &lt;strong&gt;home&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://github.com/prometheus/pushgateway/releases/download/v0.8.0/pushgateway-0.8.0.linux-amd64.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extraia o arquivo, execute o script e voilà!&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;tar &lt;/span&gt;xvzf pushgateway-0.8.0.linux-amd64.tar.gz
&lt;span class="nb"&gt;cd &lt;/span&gt;pushgateway-0.8.0.linux-amd64/
./pushgateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seu Pushgateway deve iniciar como um processo em segundo plano, escutando na porta 9091.&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Instalando Prometheus
&lt;/h4&gt;

&lt;p&gt;Vá para a página de download do Prometheus(&lt;a href="https://prometheus.io/download/" rel="noopener noreferrer"&gt;https://prometheus.io/download/&lt;/a&gt;), pegue o arquivo, extraia-o e acesse o diretório.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://github.com/prometheus/prometheus/releases/download/v2.45.6/prometheus-2.45.6.linux-amd64.tar.gz
&lt;span class="nb"&gt;tar &lt;/span&gt;xvzf prometheus-2.45.6.linux-amd64.tar.gz
&lt;span class="nb"&gt;cd &lt;/span&gt;prometheus-2.45.6.linux-amd64/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modifique o arquivo de configuração para incluir nossos alvos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vi prometheus.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# my global config&lt;/span&gt;
&lt;span class="na"&gt;global&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;scrape_interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1s&lt;/span&gt; &lt;span class="c1"&gt;# Set the scrape interval to every 15 seconds. Default is every 1 minute.&lt;/span&gt;
  &lt;span class="na"&gt;evaluation_interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;15s&lt;/span&gt; &lt;span class="c1"&gt;# Evaluate rules every 15 seconds. The default is every 1 minute.&lt;/span&gt;
  &lt;span class="c1"&gt;# scrape_timeout is set to the global default (10s).&lt;/span&gt;

&lt;span class="c1"&gt;# Alertmanager configuration&lt;/span&gt;
&lt;span class="na"&gt;alerting&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;alertmanagers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;static_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="c1"&gt;# - alertmanager:9093&lt;/span&gt;

&lt;span class="c1"&gt;# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.&lt;/span&gt;
&lt;span class="na"&gt;rule_files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="c1"&gt;# - "first_rules.yml"&lt;/span&gt;
  &lt;span class="c1"&gt;# - "second_rules.yml"&lt;/span&gt;

&lt;span class="c1"&gt;# A scrape configuration containing exactly one endpoint to scrape:&lt;/span&gt;
&lt;span class="c1"&gt;# Here it's Prometheus itself.&lt;/span&gt;
&lt;span class="na"&gt;scrape_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="c1"&gt;# The job name is added as a label `job=&amp;lt;job_name&amp;gt;` to any timeseries scraped from this config.&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;job_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prometheus"&lt;/span&gt;

    &lt;span class="c1"&gt;# metrics_path defaults to '/metrics'&lt;/span&gt;
    &lt;span class="c1"&gt;# scheme defaults to 'http'.&lt;/span&gt;

    &lt;span class="na"&gt;static_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;localhost:9090"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;localhost:9091"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Execute o Prometheus.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Se você ver o console web em &lt;a href="http://localhost:9090/graph" rel="noopener noreferrer"&gt;http://localhost:9090/graph&lt;/a&gt;, parabéns, você não quebrou nada.&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Instalando o Grafana
&lt;/h4&gt;

&lt;p&gt;Baixe o pacote do Grafana, instale-o e certifique-se de que está rodando como um serviço.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://dl.grafana.com/enterprise/release/grafana-enterpise_11.0.0_amd64.deb
&lt;span class="nb"&gt;sudo &lt;/span&gt;dpkg &lt;span class="nt"&gt;-i&lt;/span&gt; grafana-enterprise_11.0.0_amd64.deb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verificar se o grafana está executando:&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 status grafana-server.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pode verificar acessando &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;. &lt;br&gt;
Agora que temos que configurar o Prometheus como uma fonte de dados, e pronto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kyf6f0mvbrrccashcj3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kyf6f0mvbrrccashcj3.png" alt="prometheus datasource grafana" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Construindo um Script Bash para Recuperar Métricas
&lt;/h3&gt;

&lt;p&gt;Em seguida, construiremos um script bash para buscar métricas como uso de CPU e memória para processos individuais. Este script será executado a cada segundo e enviará os dados para o Pushgateway. Estamos usando o comando ps aux em vez de top.&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="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;touch &lt;/span&gt;script_cpu_memory
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;u+x script_cpu_memory
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; vi script_cpu_memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;script:&lt;/p&gt;

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

&lt;p&gt;Execute o script&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="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;sleep &lt;/span&gt;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; ./script_cpu_memory&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora que nossas métricas foram enviadas para o Pushgateway, vamos ver se podemos explorá-las no Prometheus.&lt;/p&gt;

&lt;p&gt;Vá para &lt;a href="http://localhost:9090" rel="noopener noreferrer"&gt;http://localhost:9090&lt;/a&gt;. No campo ‘Expression’, simplesmente digite ‘cpu_usage’. Agora você deve ver todas as métricas no seu navegador.&lt;/p&gt;

&lt;p&gt;Parabéns! Suas métricas de CPU agora estão armazenadas no Prometheus.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Construindo um Painel Incrível com Grafana
&lt;/h3&gt;

&lt;p&gt;Com nossas métricas armazenadas com segurança no Prometheus, é hora de construir um painel no Grafana para visualizá-las. Usaremos os painéis mais recentes disponíveis no Grafana: medidores arredondados, medidores horizontais, medidores verticais e gráficos de linha clássicos.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Medidores Arredondados&lt;/strong&gt;: Para uso geral de CPU no momento e uso médio de CPU.&lt;br&gt;
&lt;strong&gt;Medidores Horizontais&lt;/strong&gt;: Para exibir os 10 processos que mais consomem recursos.&lt;br&gt;
&lt;strong&gt;Medidores Verticais&lt;/strong&gt;: Semelhantes aos medidores horizontais, mas com uma reviravolta vertical, monitorando o uso de memória.&lt;br&gt;
&lt;strong&gt;Gráficos de Linha&lt;/strong&gt;: Para rastrear o desempenho histórico dos processos.&lt;/p&gt;

&lt;h4&gt;
  
  
  1 – Construindo Medidores Arredondados
&lt;/h4&gt;

&lt;p&gt;Aqui está uma visão mais detalhada de como são os medidores arredondados em nosso painel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fze2oeglslsxfpa0svh9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fze2oeglslsxfpa0svh9y.png" alt="Rounded Gauges" width="800" height="248"&gt;&lt;/a&gt;&lt;br&gt;
Por enquanto, vamos nos concentrar no uso da CPU dos nossos processos, pois isso pode ser facilmente espelhado para o uso de memória.&lt;/p&gt;

&lt;p&gt;Com esses painéis, vamos rastrear duas métricas: o uso atual da CPU de todos os nossos processos e o uso médio da CPU.&lt;/p&gt;

&lt;p&gt;Para recuperar essas métricas, vamos realizar consultas PromQL em nossa instância do Prometheus.&lt;/p&gt;

&lt;p&gt;Então... o que é PromQL?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PromQL é a linguagem de consulta projetada para o Prometheus.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Da mesma forma que você encontra nas instâncias do InfluxDB com o InfluxQL (ou IFQL), as consultas PromQL podem agregar dados usando funções como soma, média e desvio padrão.&lt;/p&gt;

&lt;p&gt;A sintaxe é muito fácil de usar, como vamos demonstrar com nossos painéis.&lt;/p&gt;

&lt;h5&gt;
  
  
  A - o uso atual do Processdor(CPU)
&lt;/h5&gt;

&lt;p&gt;Para recuperar o uso geral atual do processador, vamos usar a função sum do PromQL.&lt;/p&gt;

&lt;p&gt;O nosso uso geral do processador é simplesmente a soma dos processos.&lt;/p&gt;

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

&lt;h5&gt;
  
  
  B - o use médio do processador
&lt;/h5&gt;

&lt;p&gt;Não há muito trabalho para fazer em relação ao uso médio da CPU, você simplesmente vai usar a função avg do PromQL.&lt;/p&gt;

&lt;h4&gt;
  
  
  2 – Construindo Medidores Horizontais
&lt;/h4&gt;

&lt;p&gt;Nosso objetivo com este painel é expor os 10 processos que mais consomem recursos do nosso sistema.&lt;/p&gt;

&lt;p&gt;Para isso, vamos usar a função topk que recupera os k principais elementos de uma métrica.&lt;/p&gt;

&lt;p&gt;Da mesma forma que fizemos antes, vamos definir limites para sermos informados quando um processo estiver consumindo muitos recursos.&lt;/p&gt;

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

&lt;h4&gt;
  
  
  3 – Construindo Gráficos de Linha
&lt;/h4&gt;

&lt;p&gt;Gráficos de linha estão presentes no Grafana há muito tempo e este é o painel que vamos usar para ter uma visão histórica de como nossos processos evoluíram ao longo do tempo.&lt;/p&gt;

&lt;p&gt;Este gráfico pode ser particularmente útil quando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Você teve alguma interrupção no passado e gostaria de investigar quais processos estavam ativos na época.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Um determinado processo morreu, mas você quer ter uma visão de seu comportamento logo antes de isso acontecer.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quando se trata de exploração e resolução de problemas, isso honestamente precisaria de um artigo inteiro.&lt;/p&gt;

&lt;p&gt;A partir daqui, temos todos os painéis que precisamos para o nosso painel final.&lt;/p&gt;

&lt;p&gt;Você pode organizá-los da maneira que quiser ou simplesmente se inspirar no que construímos.&lt;/p&gt;

&lt;p&gt;Você acabou de construir um dashboard para monitoramento de processos com Grafana.&lt;br&gt;
&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGxlaHlqaDBvcWN3NmlpaHRtZ2hjY2dtbGx6N3R5MW12NGlwZnBiMCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/fRlg6MIPpBvz2/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGxlaHlqaDBvcWN3NmlpaHRtZ2hjY2dtbGx6N3R5MW12NGlwZnBiMCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/fRlg6MIPpBvz2/giphy.gif" alt="parabéns" width="474" height="510"&gt;&lt;/a&gt; &lt;br&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Uma Conclusão Rápida
&lt;/h4&gt;

&lt;p&gt;Parabéns! Agora você tem um painel de monitoramento completo para uma única instância. Escalá-lo para monitorar um cluster inteiro de instâncias Unix? Apenas um pequeno passo. O monitoramento DevOps é fascinante—até que se torne um pesadelo. Mas ei, é por isso que  construímos esses painéis: para ajudá-lo a alcançar a máxima eficiência com essas ferramentas. Porque quem não ama espremer cada gota de produtividade das ferramentas utilizadas?&lt;/p&gt;

</description>
      <category>grafana</category>
      <category>linux</category>
      <category>devops</category>
    </item>
    <item>
      <title>O que é IPFS?</title>
      <dc:creator>Diego Dmitry</dc:creator>
      <pubDate>Sat, 21 Oct 2023 13:02:19 +0000</pubDate>
      <link>https://dev.to/diegodmitry/o-que-e-ipfs-4ng0</link>
      <guid>https://dev.to/diegodmitry/o-que-e-ipfs-4ng0</guid>
      <description>&lt;p&gt;A Internet passou por uma transformação notável nas últimas décadas, evoluindo de uma rede centralizada e estática para um ecossistema dinâmico e descentralizado. Um dos desenvolvimentos mais promissores nesta evolução é o InterPlanetary File System, ou IPFS. Criado por Juan Benet e sua equipe da Protocol Labs, o IPFS está reimaginando a forma como armazenamos, compartilhamos e acessamos conteúdo digital na Internet. Neste artigo, exploraremos os principais recursos e conceitos por trás do IPFS e seu potencial.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Conteúdo endereçável e descentralizado
&lt;/h3&gt;

&lt;p&gt;Na essência do IPFS está o conceito de endereçamento de conteúdo. Ao contrário dos links da web tradicionais que apontam para servidores ou URLs específicos, o IPFS endereça dados com base em seu conteúdo, não em sua localização. Cada parte do conteúdo, seja um arquivo de texto simples ou uma página da web complexa, recebe um hash criptográfico exclusivo. Este hash é uma impressão digital que representa o conteúdo. Isso significa que cada dado é identificável globalmente e pode ser acessado de qualquer lugar do mundo, desde que você conheça seu hash.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;hash: É uma impressão digital criptográfica de dados que é única, irreversível e pode ser usada para verificar a integridade dos dados.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Além disso, o IPFS opera em uma rede ponto a ponto. Em vez de depender de servidores centrais para armazenar e entregar conteúdo, o IPFS aproveita o poder computacional e a capacidade de armazenamento de seus usuários. Quando você solicita um conteúdo, o IPFS localiza a cópia mais próxima desse conteúdo em um de seus nós. Esta descentralização não só melhora a redundância e a confiabilidade da rede, mas também a torna mais resistente à censura e a falhas.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Versionamento e MerkleDag
&lt;/h3&gt;

&lt;p&gt;O IPFS também introduz o conceito de versionamento. Quando um arquivo é alterado, um novo hash criptográfico é gerado para representar o conteúdo atualizado. Como resultado, múltiplas versões do mesmo conteúdo podem coexistir na rede. Isso é particularmente útil para desenvolvedores de software que podem garantir que as versões históricas de seu código permaneçam acessíveis e que os usuários possam escolher a versão específica que desejam acessar.&lt;/p&gt;

&lt;p&gt;Para representar e estruturar dados, o IPFS usa uma estrutura de dados conhecida como MerkleDag. Esta estrutura é semelhante à árvore Merkle usada na tecnologia blockchain. Ele organiza o conteúdo em um gráfico acíclico direcionado (DAG), tornando eficiente a navegação e verificação dos dados. A estrutura do MerkleDag desempenha um papel vital para garantir a integridade dos dados e facilitar a recuperação rápida de conteúdo.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;MerkleDag: &lt;a href="https://docs.ipfs.tech/concepts/merkle-dag/#further-resources"&gt;https://docs.ipfs.tech/concepts/merkle-dag/#further-resources&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Acesso off-line
&lt;/h3&gt;

&lt;p&gt;Outra característica notável do IPFS é a sua capacidade de fornecer acesso offline. Depois de buscar o conteúdo do IPFS e armazená-lo localmente, você poderá acessá-lo mesmo quando estiver desconectado da Internet. Isto pode ser um divisor de águas para áreas remotas ou rurais com conectividade de Internet não confiável e é útil para aplicações que exigem acesso offline a informações críticas.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Segurança
&lt;/h3&gt;

&lt;p&gt;O IPFS oferece uma abordagem segura e baseada em confiança para entrega de conteúdo. Evita a dependência de autoridades de certificação centralizadas tradicionais. Em vez disso, utiliza uma rede de confiança, um conceito semelhante ao Pretty Good Privacy (PGP), para estabelecer confiança e verificar a autenticidade do conteúdo. Isto pode melhorar a segurança e a integridade da rede, permitindo que os usuários construam relações de confiança com outros participantes do sistema.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  API e gateway
&lt;/h3&gt;

&lt;p&gt;Para desenvolvedores e usuários, o IPFS fornece uma API que permite a interação com a rede. Essa API abre um mundo de possibilidades para a construção de aplicativos que aproveitam o IPFS para armazenamento e compartilhamento de conteúdo. Além disso, existem gateways web que permitem aos usuários acessar conteúdo IPFS por meio de um navegador web, preenchendo a lacuna entre a web tradicional e a rede IPFS descentralizada.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Aplicações
&lt;/h3&gt;

&lt;p&gt;O IPFS não se limita apenas ao armazenamento de arquivos; ele pode ser empregado para uma ampla gama de aplicações. Alguns dos casos de uso potenciais incluem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hospedagem na Web&lt;/strong&gt;: o IPFS permite que os desenvolvedores hospedem sites e aplicativos da Web, tornando-os mais resilientes e resistentes à censura.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compartilhamento de dados&lt;/strong&gt;: Grandes conjuntos de dados, pesquisas científicas e materiais educacionais podem ser compartilhados e acessados de forma eficiente usando o IPFS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distribuição de software&lt;/strong&gt;: Os desenvolvedores de software podem distribuir e atualizar seus aplicativos usando IPFS, garantindo downloads rápidos e confiáveis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resistência à censura&lt;/strong&gt;: O IPFS oferece uma solução mais robusta contra a censura e a remoção de conteúdo, tornando-o uma ferramenta valiosa para promover a liberdade de expressão e o acesso à informação.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IoT e Edge Computing&lt;/strong&gt;: O IPFS pode ser integrado a dispositivos IoT e sistemas de edge computing, permitindo compartilhamento eficiente e atualizações nesses ambientes.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;


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

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

&lt;p&gt;O IPFS está na vanguarda de uma nova era da Internet. Ao aproveitar o endereçamento de conteúdo, a descentralização e uma série de recursos inovadores, tem o potencial de incomodar os sistemas tradicionais de compartilhamento de arquivos e hospedagem web. Embora possa não ter alcançado a adoção generalizada, representa um passo promissor em direção a uma Internet mais aberta, segura e resiliente. À medida que o mundo reconhece cada vez mais a importância da descentralização e da soberania dos dados, o IPFS está preparado para desempenhar um papel fundamental na definição do futuro do cenário digital.&lt;/p&gt;

</description>
      <category>ipfs</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Dominando os fundamentos do JavaScript</title>
      <dc:creator>Diego Dmitry</dc:creator>
      <pubDate>Mon, 24 Jul 2023 20:00:00 +0000</pubDate>
      <link>https://dev.to/diegodmitry/principais-conceitos-do-javascript-36kg</link>
      <guid>https://dev.to/diegodmitry/principais-conceitos-do-javascript-36kg</guid>
      <description>&lt;p&gt;Entender os conceitos principais que governam o comportamento da linguagem é crucial para se tornar um programador proficiente. Vamos aprofundar nos exemplos para solidificar nosso entendimento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contexto de Execução:
&lt;/h2&gt;

&lt;p&gt;Sempre que uma função é invocada ou um script é executado, um Contexto de Execução é criado. O Contexto de Execução consiste em: &lt;em&gt;Variable Environment&lt;/em&gt;, &lt;em&gt;Scope Chain&lt;/em&gt; e uma referência para a palavra chave 'this'. O &lt;em&gt;Variable Environment&lt;/em&gt; contém todas as variáveis e funções declaradas dentro do escopo atual, e a &lt;em&gt;Scope Chain&lt;/em&gt; fornece acesso às variáveis nos ambientes lexicais externos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var greeting = "Hello";

function greet(name) {
  var message = greeting + ", " + name + "!";
  return message;
}

greet("Alice"); // Output: "Hello, Alice!"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando a função de 'greet' é executada, um novo Contexto de Execução é criado e seu Ambiente de Variável(&lt;em&gt;Variable Environment&lt;/em&gt;) conterá nome, mensagem e uma referência à variável de saudação do ambiente externo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Global Environment e Global Object:
&lt;/h2&gt;

&lt;p&gt;O &lt;em&gt;Global Environment&lt;/em&gt; é o ambiente lexical mais externo em um programa JavaScript, representando o escopo global. Inclui todas as variáveis e funções globais.&lt;br&gt;
No navegador, o Objeto Global(&lt;em&gt;Global Object&lt;/em&gt;) é o objeto &lt;em&gt;window&lt;/em&gt;, enquanto no Node.js é o objeto &lt;em&gt;global&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creation Phase and Hoisting:
&lt;/h2&gt;

&lt;p&gt;Durante a fase de criação(&lt;em&gt;creation phase&lt;/em&gt;), a memória é alocada para variáveis e funções, e as declarações de funções e variáveis são colocadas no topo de seu escopo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log(hoistedVar); // Output: undefined
var hoistedVar = 42;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, embora tentemos acessar hoistedVar antes de sua declaração, o JavaScript eleva a declaração e define seu valor inicial como &lt;em&gt;undefined&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Em JavaScript, &lt;em&gt;undefined&lt;/em&gt; é um valor primitivo que representa uma variável não inicializada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Execution Context:
&lt;/h2&gt;

&lt;p&gt;Após a Fase de Criação(&lt;em&gt;creation phase&lt;/em&gt;), o código entra na Fase de Contexto de Execução, onde é executado linha por linha.&lt;/p&gt;

&lt;h2&gt;
  
  
  Execution Stack:
&lt;/h2&gt;

&lt;p&gt;Execution Stack (ou Pilha de Execuções) é um mecanismo que acompanha a execução de funções. Quando uma função é invocada, ela é adicionada à pilha e, quando retorna, é removida da pilha.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function first() {
  console.log("First function");
  second();
}

function second() {
  console.log("Second function");
}

first();

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

&lt;/div&gt;



&lt;p&gt;A execução de &lt;em&gt;first()&lt;/em&gt; adicionará &lt;em&gt;first()&lt;/em&gt; à pilha, que por sua vez chama &lt;em&gt;second()&lt;/em&gt; e o adiciona à pilha. Quando &lt;em&gt;second()&lt;/em&gt; termina a execução, ele é removido da pilha, seguido por &lt;em&gt;first()&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope Chain
&lt;/h2&gt;

&lt;p&gt;Todo contexto de execução tem uma referência ao seu ambiente externo.&lt;br&gt;
O que é ambiente externo?&lt;br&gt;
No caso da função 'b', seu ambiente externo é&lt;br&gt;
Execução do Contexto Global(&lt;em&gt;Global Context Execution&lt;/em&gt;).&lt;br&gt;
Ambiente Lexical(&lt;em&gt;Lexical Environment&lt;/em&gt;)?&lt;br&gt;
Significa onde algo está escrito, fisicamente, no código.&lt;br&gt;
Determina certas coisas, como o motor JavaScript decidirá e interpretará onde as coisas vivem, e onde as coisas vão ficar na memória, e como eles vão se conectar uns aos outros. As referências ao ambiente externo são o &lt;em&gt;Scope Chain&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Scope
&lt;/h2&gt;

&lt;p&gt;O escopo(&lt;em&gt;scope&lt;/em&gt;) define a acessibilidade das variáveis em seu código. Ele determina onde as variáveis podem ser acessadas ou referenciadas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function exampleScope() {
  var x = 10; // Local scope variable
  if (true) {
    var y = 20; // Function scope variable
    console.log(x + y);
  }
  console.log(x + y); // y is accessible here too
}

exampleScope();

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

&lt;/div&gt;



&lt;p&gt;Neste exemplo, &lt;em&gt;x&lt;/em&gt; tem um escopo local dentro da função exampleScope e &lt;em&gt;y&lt;/em&gt; tem um escopo de função dentro do bloco if.&lt;/p&gt;

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

&lt;p&gt;Compreender o funcionamento interno do JavaScript, é vital para se tornar um desenvolvedor competente em JavaScript. De posse desse conhecimento, você saberá escrever um código limpo, eficiente e livre de bugs, tornando-o um desenvolvedor JavaScript mais confiante e capaz.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Kubernetes vs Docker</title>
      <dc:creator>Diego Dmitry</dc:creator>
      <pubDate>Tue, 18 Jul 2023 12:00:37 +0000</pubDate>
      <link>https://dev.to/diegodmitry/kubernetes-vs-docker-8mg</link>
      <guid>https://dev.to/diegodmitry/kubernetes-vs-docker-8mg</guid>
      <description>&lt;p&gt;O uso dessas ferramentas não é uma equação ou um ou outro. Vamos detalhar sua origem, finalidade e como usar a ferramenta certa para o trabalho.&lt;/p&gt;

&lt;p&gt;Tenha em mente estas definições:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker Engine é um "contêiner em tempo de execução".&lt;/strong&gt; Ele sabe como executar e gerenciar contêineres em um único host. Você deve controlar cada host separadamente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kubernetes (K8s) é uma "plataforma de orquestração de contêineres" de código aberto (também conhecido como orquestrador).&lt;/strong&gt; Ele sabe como gerenciar contêineres em muitos hosts.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Origem do Docker
&lt;/h2&gt;

&lt;p&gt;Em 2013, Solomon Hykes, CEO da Dotcloud, anunciou o projeto de código aberto Docker. Quando chegou a sua versão 1.0 em 2014.&lt;/p&gt;

&lt;p&gt;O conceito de aplicativos em contêineres, é para isolar muitos aplicativos uns dos outros em um único servidor, existe há décadas. Não havia uma ferramenta fácil para usar focada no ciclo de vida completo do aplicativo, até o Docker.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fSylsPUh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/diegodmitry/annotation/main/courses/Docker%2520Mastery/images/TraditionalServers_vs_ContainerApps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fSylsPUh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/diegodmitry/annotation/main/courses/Docker%2520Mastery/images/TraditionalServers_vs_ContainerApps.png" alt="Traditional Servers vs Container Apps" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
A equipe que criou o Docker pegou ferramentas complexas e as envolveu em uma interface de linha de comando (CLI) que meros mortais, como eu, poderia entender.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que o Docker Engine tem a ver com o Docker?
&lt;/h2&gt;

&lt;p&gt;Logo após o lançamento do Docker, os fundadores descartaram o Dotcloud e criaram o Docker Inc.&lt;/p&gt;

&lt;p&gt;Neste post, vamos focar no projeto original, agora chamado de Docker Engine. É sobre isso que as pessoas geralmente falam quando dizem “Docker” e ao qual vou me referir neste artigo.&lt;/p&gt;

&lt;p&gt;Observe que o Docker também faz o &lt;a href="https://www.docker.com/products/docker-desktop/"&gt;Docker Desktop&lt;/a&gt;, um pacote de produtos para Windows e Mac. &lt;strong&gt;O Docker Desktop é a maneira mais fácil de executar Docker e Kubernetes em sua máquina local para aplicativos de desenvolvimento e teste de servidor. Milhões de pessoas o usam todos os meses, e eu recomendo.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Principais inovações do Docker
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Easy Packing&lt;/strong&gt; -&amp;gt; O Docker pega seu aplicativo e todas as suas dependências de software – menos o kernel do sistema operacional e os drivers de hardware – e os agrupa em um conjunto de tarballs (semelhantes a arquivos zip). &lt;strong&gt;O(s) tarball(s) do aplicativo e os metadados são conhecidos juntos como uma imagem de contêiner. Isso agora é considerado a maneira moderna de empacotar aplicativos no servidor.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fácil execução do aplicativo&lt;/strong&gt; -&amp;gt; O Docker executa cada contêiner em um sistema de arquivos isolado. Cada contêiner obtém sua própria rede e recursos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fácil distribuição de aplicativos&lt;/strong&gt; -&amp;gt; O Docker criou a ideia de um “registro de imagem de contêiner”, que permite armazenar imagens em um servidor HTTP/S e enviá-las/baixá-las tão facilmente quanto um git commit. O registro mais popular é o &lt;a href="https://hub.docker.com/"&gt;Docker Hub&lt;/a&gt; e você pode encontrar muitos projetos de código aberto com imagens oficiais.&lt;/p&gt;


&lt;h2&gt;
  
  
  Por que precisamos do Kubernetes?
&lt;/h2&gt;

&lt;p&gt;Você descobrirá que, assim que começar a usar contêineres, desejará usá-los em todos os lugares - e, depois de ter mais do que alguns servidores, começará a desejar uma maneira mais fácil de executar vários contêineres relacionados para seus aplicativos.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Com o Docker, você ainda precisa configurar redes manualmente entre servidores, incluindo políticas de segurança, DNS, armazenamento, balanceadores de carga, backups, monitoramento e muito mais. Quando se trata de dezenas de contêineres relacionados, isso cria tanto trabalho (se não mais) quanto antes dos aplicativos em contêineres.&lt;/p&gt;

&lt;p&gt;Esse problema de vários servidores é o que os fundadores do Kubernetes queriam resolver. Eles sabiam que, para tornar os sistemas de contêineres de produção tão fáceis quanto o Docker para uma única máquina, eles precisavam abordar o hardware subjacente e os recursos de rede. &lt;strong&gt;O Kubernetes é um sistema de cluster multiservidor de código aberto. Ele orquestra todas as ferramentas necessárias para uma solução do mundo real que hospeda dezenas, centenas ou até milhares de aplicativos.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assim como o Kubernetes é para um grupo de servidores, o Docker é para um único servidor.&lt;/strong&gt; É um conjunto de programas e APIs que controlam muitos Docker Engines a partir de uma CLI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O principal trabalho do Kubernetes é dizer ao Docker o que fazer, mas agora ele fornece um número crescente de tarefas relacionadas.&lt;/strong&gt; Outros recursos integrados incluem verificações de integridade do contêiner, substituição automática de aplicativos com falha, automatização de configurações de web proxy, gerenciamento de rede, políticas de segurança e até mesmo armazenamento externo de provisionamento automático.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0YSf1zFz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/diegodmitry/annotation/blob/main/courses/Docker%2520Mastery/images/docker-vs-kubernetes.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0YSf1zFz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/diegodmitry/annotation/blob/main/courses/Docker%2520Mastery/images/docker-vs-kubernetes.png%3Fraw%3Dtrue" alt="Traditional Servers vs Container Apps" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Using Docker with Kubernetes
&lt;/h2&gt;

&lt;p&gt;Agora que você sabe de onde vêm essas ferramentas e quais problemas elas resolvem, a pergunta é: você deve usá-las?&lt;/p&gt;

&lt;p&gt;Se você só precisa controlar contêineres em uma única máquina, o Docker é a melhor escolha. Mantenha-o simples para começar e você poderá se tornar um orquestrador mais tarde. Se você precisar executar vários contêineres para seus aplicativos, talvez seja hora de considerar o Kubernetes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lembre-se, as ferramentas não são o objetivo final.&lt;/strong&gt; Independentemente de você escolher Docker, Kubernetes ou servidores em nuvem, lembre-se de que a ferramenta não é o objetivo final. Sempre tenha em mente os objetivos de devops na sua empresa e tente não se distrair com o apelo “brilhante” de ferramentas avançadas, apenas para usar novas tecnologias.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>docker</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>O que é Docker?</title>
      <dc:creator>Diego Dmitry</dc:creator>
      <pubDate>Fri, 07 Jul 2023 12:03:47 +0000</pubDate>
      <link>https://dev.to/diegodmitry/o-que-e-docker-1kbb</link>
      <guid>https://dev.to/diegodmitry/o-que-e-docker-1kbb</guid>
      <description>&lt;p&gt;O Docker não inventou os contêineres, mas tornou-os mais fáceis de usar com três etapas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Imagens: Ajuda você a empacotar um aplicativo (com &lt;em&gt;todas&lt;/em&gt; as suas dependências).&lt;/li&gt;
&lt;li&gt;Registros: Ajudam a distribuir o aplicativo em todos os locais que você precisa para executá-lo.&lt;/li&gt;
&lt;li&gt;Contêineres: Executam o aplicativo de uma forma altamente reproduzível.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;O Docker chama isso esse ciclo de vida de "Construir, Enviar e Executar".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g3MyMl2j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/diegodmitry/annotation/raw/main/courses/Docker%2520Mastery/images/build-ship-run.excalidraw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g3MyMl2j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/diegodmitry/annotation/raw/main/courses/Docker%2520Mastery/images/build-ship-run.excalidraw.png" alt="Docker Build, Ship and Run" width="800" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esses são os princípios básicos sobre os quais todas as outras tecnologias de contêineres são construídas.&lt;/p&gt;

&lt;p&gt;Observe que essas inovações agora têm padrões e são regidas pela &lt;a href="https://opencontainers.org/about/overview/"&gt;Open Container Initiative (OCI)&lt;/a&gt;, que faz parte da Linux Foundation.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Imagem Docker
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I-fC7p6D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/diegodmitry/annotation/raw/main/courses/Docker%2520Mastery/images/image-basics.excalidraw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I-fC7p6D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/diegodmitry/annotation/raw/main/courses/Docker%2520Mastery/images/image-basics.excalidraw.png" alt="The Docker Image" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;É chamado de "imagem do Docker", o nome padrão é: "Imagem OCI" ou apenas "imagem".&lt;/li&gt;
&lt;li&gt;O Docker usa uma lista de instruções, chamada de Dockerfile, que é semelhante a um script em shell, e coloca essas instruções em camadas umas sobre as outras até ter tudo o que você precisa para executar o aplicativo, inclusive todas as dependências do sistema.&lt;/li&gt;
&lt;li&gt;A inclusão das dependências é um diferencial importante entre o Docker e muitos sistemas de empacotamento. Isso ajuda a evitar o problema: "funciona na minha máquina".&lt;/li&gt;
&lt;li&gt;Se fosse um aplicativo Python para compilar, a imagem conteria o próprio aplicativo e todas as dependências Python de que precisa.&lt;/li&gt;
&lt;li&gt;A principal distinção é ela também inclui a versão exata do Python e as bibliotecas do sistema para executar corretamente o Python.&lt;/li&gt;
&lt;li&gt;Tudo está incluído, exceto o kernel do sistema operacional e os drivers de hardware. Até mesmo metadados sobre como iniciar o aplicativo, variáveis de ambiente padrão e quais portas ele escuta estão incluídos.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  O Registro
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D2uRoY_W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/diegodmitry/annotation/raw/main/courses/Docker%2520Mastery/images/registry-basics.excalidraw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D2uRoY_W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/diegodmitry/annotation/raw/main/courses/Docker%2520Mastery/images/registry-basics.excalidraw.png" alt="The Docker Registry" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Chamado de "registro do Docker", ou apenas "registro", para abreviar.&lt;/li&gt;
&lt;li&gt;Essa inovação foi a chave para conectar nossa criação de imagens em uma máquina para executar nossos contêineres em outra.&lt;/li&gt;
&lt;li&gt;Agora que criamos uma imagem e a executamos em nossa máquina local, como a colocamos em todas as outras máquinas?&lt;/li&gt;
&lt;li&gt;Como posso ter certeza de que o restante da minha equipe, meu teste de CI e todos os meus servidores executam exatamente a mesma imagem?&lt;/li&gt;
&lt;li&gt;O registro é um gerenciador de pacotes baseado em HTTP que funciona como o apt, yum, npm e outros gerenciadores de pacotes.&lt;/li&gt;
&lt;li&gt;Você pode fazer &lt;em&gt;upload&lt;/em&gt; de uma imagem e, em seguida, &lt;em&gt;downlaod&lt;/em&gt; da imagem em outro lugar.&lt;/li&gt;
&lt;li&gt;O protocolo de registro é eficiente. Ele só faz upload e download das partes alteradas (camadas) e armazena a imagem no cache local das máquinas para a execução rápida de novos contêineres.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Pense nas imagens e no registro como o gerenciador de pacotes, onde podemos criar, baixar e executar qualquer aplicativo em qualquer sistema. Isso inclui a criação e a execução no Linux, macOS, Windows, na nuvem, no seu data center, em um mainframe ou em um pequeno Raspberry Pi. O Docker funciona em todos eles.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  O Docker Container
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NK5maKYv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/diegodmitry/annotation/raw/main/courses/Docker%2520Mastery/images/container-basics.excalidraw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NK5maKYv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/diegodmitry/annotation/raw/main/courses/Docker%2520Mastery/images/container-basics.excalidraw.png" alt="The Docker Container" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Chamado de "Docker contêiner", o nome padrão "Contêiner OCI" ou apenas "contêiner". Ele &lt;strong&gt;não&lt;/strong&gt; é chamado de "docker" ou "dockers". Docker são muitas coisas.&lt;/li&gt;
&lt;li&gt;O Docker iniciará sua imagem de contêiner em um novo contêiner em execução e usará o comando especificado no Dockerfile para iniciá-lo.&lt;/li&gt;
&lt;li&gt;Usa dois recursos do kernel Linux, chamados namespaces e cgroups (grupos de controle), para isolar seu aplicativo de modo que ele não possa ver o restante do host. Para o aplicativo, os únicos arquivos que ele vê são os que estão na imagem do contêiner. Ele não vê nenhum outro processo fora do contêiner e até mesmo tem sua própria interface de rede e IP privado.&lt;/li&gt;
&lt;li&gt;Agora, deixe-me enfatizar: isso &lt;em&gt;NÃO&lt;/em&gt; é virtualização. Trata-se de isolamento de aplicativos, semelhante ao chroot.&lt;/li&gt;
&lt;li&gt;Você pode iniciar muitos desses contêineres a partir da mesma imagem de contêiner, no mesmo sistema, e todos eles estarão isolados uns dos outros. As alterações de arquivos em um contêiner não afetam os arquivos em outro.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Leitura adicional
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/diegodmitry/kubernetes-vs-docker-8mg"&gt;Kubernetes vs Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>beginners</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Comando SELECT em SQL</title>
      <dc:creator>Diego Dmitry</dc:creator>
      <pubDate>Sun, 02 Jul 2023 16:20:17 +0000</pubDate>
      <link>https://dev.to/diegodmitry/comando-select-em-sql-58f9</link>
      <guid>https://dev.to/diegodmitry/comando-select-em-sql-58f9</guid>
      <description>&lt;p&gt;Um comando SQL SELECT é fundamental na consulta de dados em um banco de dados. Permite aos utilizadores obter informações específicas de uma ou mais tabelas com base em critérios definidos. Embora possa parecer assustador à primeira vista, compreender as noções básicas do comando SELECT pode melhorar bastante a sua capacidade de manipular e analisar dados de forma eficiente.&lt;/p&gt;

&lt;p&gt;É importante notar que o comando SELECT, por si só, não modifica o banco de dados; em vez disso, busca dados para análise ou apresentação posterior. Ao dominar este comando, terá à sua disposição uma ferramenta poderosa para extrair informações valiosas do seu banco de dados.&lt;/p&gt;

&lt;p&gt;Vamos explorar os vários componentes e casos de utilização do comando SQL SELECT, dando-lhe os conhecimentos necessários para navegar no banco de dados.&lt;/p&gt;




&lt;h2&gt;
  
  
  Entendendo o comando SELECT
&lt;/h2&gt;

&lt;p&gt;O comando SELECT é usado para obter dados de uma tabela do banco de dados. Pense nele como uma ferramenta poderosa que lhe permite fazer perguntas sobre seus dados e obter respostas significativas. Com o SELECT, você pode especificar quais colunas serão recuperadas, filtrar os dados com base em determinadas condições e até mesmo classificar os resultados.&lt;/p&gt;

&lt;h3&gt;
  
  
  Selecionando todas as colunas
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM table_name;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Busca todas as colunas da tabela especificada, permitindo que você veja o conjunto de dados completo. É uma ótima maneira de explorar a estrutura de sua tabela e obter uma visão geral dos dados disponíveis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Selecionando colunas específicas
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT nome_da_coluna1, nome_da_coluna2 FROM nome_da_tabela;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O comando anterior mostra apenas as colunas do seu interesse, facilitando o foco nas informações relevantes.&lt;/p&gt;




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

&lt;p&gt;O objetivo com o texto pequeno é para facilitar o entendimento.&lt;br&gt;
Dito isso...&lt;br&gt;
Parabéns! Você acabou de aprender o conceito básico do comando SELECT no SQL. Ao usar o SELECT, você pode obter dados específicos de uma tabela de banco de dados. Lembre-se de que as possibilidades do SELECT são vastas, permitindo que você realize consultas e análises mais avançadas. Agora que você tem uma base sólida, sinta-se à vontade para explorar mais e desbloquear todo o potencial do SQL!&lt;/p&gt;

&lt;p&gt;Boas consultas!&lt;/p&gt;

&lt;h2&gt;
  
  
  Leitura Adicional
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/diegodmitry/comando-select-distinct-1c9n-temp-slug-5054433"&gt;SELECT DISTINCT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>database</category>
      <category>postgres</category>
      <category>sql</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Navegadores, como funcionam?</title>
      <dc:creator>Diego Dmitry</dc:creator>
      <pubDate>Mon, 28 Nov 2022 17:44:24 +0000</pubDate>
      <link>https://dev.to/diegodmitry/navegadores-como-funcionam-2bh2</link>
      <guid>https://dev.to/diegodmitry/navegadores-como-funcionam-2bh2</guid>
      <description>&lt;p&gt;Lá vem Diêgo com mais um artigo que normalmente os desenvolvedores não leem!&lt;br&gt;
Calma pequeno(a) aprendiz, vamos ver o que diz Paul Irish, um dos colaboradores da equipe de desenvolvimento do Google Chrome:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Como desenvolvedor Web, &lt;strong&gt;aprender o funcionamento interno do navegador ajuda você a tomar melhores decisões e conhecer as razões por trás, das práticas recomendadas&lt;/strong&gt;. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Embora seja um documento bastante longo, recomendamos que você gaste algum tempo pesquisando; nós garantimos que você ficará feliz por ter feito isso.&lt;br&gt;
Então deixa de preguiça, pegue um copo com água, suco ou café e vamos ler!&lt;/p&gt;

&lt;p&gt;Não vai rolar a página, achando que entendeu o artigo. 🤓&lt;/p&gt;

&lt;h2&gt;
  
  
  A principal funcionalidade
&lt;/h2&gt;

&lt;p&gt;Os navegadores são os softwares mais utilizados no sistema operacional. Por isso, explicarei como eles funcionam por baixo dos panos.&lt;/p&gt;

&lt;p&gt;A principal função do navegador é apresentar um recurso Web. O recurso geralmente é um documento HTML, mas também pode ser um PDF, imagem, vídeo ou algum outro tipo de conteúdo. A localização do recurso é especificada pelo usuário usando uma &lt;a href="https://pt.wikipedia.org/wiki/URI"&gt;URI&lt;/a&gt; (Uniform Resource Identifier).&lt;/p&gt;

&lt;p&gt;A maneira como o navegador interpreta e exibe arquivos HTML é especificada nos arquivos HTML e CSS. Essas especificações são mantidas pela &lt;a href="https://www.w3.org/"&gt;W3C&lt;/a&gt; (World Wide Web Consortium). Durante anos, os navegadores cumpriram apenas uma parte das especificações e desenvolveram suas próprias extensões. Isso ocasionou sérios problemas de compatibilidade. Hoje, a maioria dos navegadores está mais ou menos em conformidade com as especificações.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arquitetura do Navegador
&lt;/h2&gt;

&lt;p&gt;Os principais componentes envolvidos na construção de um navegador são:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HfNEVSh6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lmc7aflsgug83bd4mga6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HfNEVSh6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lmc7aflsgug83bd4mga6.png" alt="Image description" width="662" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Interface do usuário: Inclui barra de endereço, botão voltar/avançar, menu de favoritos, etc. Tudo que é exibido no navegador, exceto a janela onde você vê a página solicitada.&lt;/li&gt;
&lt;li&gt;Mecanismo do navegador: organiza ações entre a interface do usuário e o mecanismo de renderização.&lt;/li&gt;
&lt;li&gt;Mecanismo de renderização: responsável por exibir o conteúdo. Por exemplo, se o conteúdo solicitado for HTML, o mecanismo de renderização analisará HTML e CSS e exibirá o conteúdo analisado na tela.&lt;/li&gt;
&lt;li&gt;Rede: para chamadas de rede, como solicitações HTTP, usando diferentes implementações para diferentes plataformas por trás de uma interface independente de plataforma.&lt;/li&gt;
&lt;li&gt;Interpretado Javascript: Analisa e executa código JavaScript.&lt;/li&gt;
&lt;li&gt;UI Backend: Este componente usa os métodos de interface do sistema operacional.&lt;/li&gt;
&lt;li&gt;Persistência de Dados: Esta é uma camada de persistência. O navegador pode precisar salvar todos os tipos de dados localmente, como cookies. Os navegadores também oferecem suporte a mecanismos de armazenamento, como localStorage, IndexedDB, WebSQL e FileSystem.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Agora que conhecemos os principais componentes envolvidos na construção de um navegador da Web, podemos passar para o próximo post.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>O que é HTTP?</title>
      <dc:creator>Diego Dmitry</dc:creator>
      <pubDate>Mon, 07 Nov 2022 12:41:42 +0000</pubDate>
      <link>https://dev.to/diegodmitry/o-que-e-http-343k</link>
      <guid>https://dev.to/diegodmitry/o-que-e-http-343k</guid>
      <description>&lt;p&gt;Neste segundo artigo, gostaria de falar um pouco sobre HTTP. Não vai rolar a página e achar que leu sobre o artigo! 🤐&lt;/p&gt;

&lt;p&gt;Ao final deste artigo, você será capaz de responder as seguintes perguntas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O que é HTTP?&lt;/li&gt;
&lt;li&gt;O que é um HTTP Request?&lt;/li&gt;
&lt;li&gt;O que é um método HTTP?&lt;/li&gt;
&lt;li&gt;O que é uma resposta HTTP?&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;HTTP, Hypertext Transfer Protocol, é um protocolo para buscar recursos como documentos HTML. É a base de qualquer troca de dados na Web e é um protocolo cliente-servidor, o que significa que as solicitações são iniciadas pelo destinatário, geralmente o navegador.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que é uma requisição HTTP?
&lt;/h2&gt;

&lt;p&gt;Uma solicitação HTTP é a maneira como os navegadores, solicitam as informações necessárias para carregar um site.&lt;/p&gt;

&lt;p&gt;Cada solicitação HTTP carrega uma série de dados codificados que carregam diferentes tipos de informações. &lt;/p&gt;

&lt;p&gt;Vamos explorar mais detalhadamente como essas solicitações funcionam e como o conteúdo de uma solicitação pode ser usado para compartilhar informações!? 🕳️&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  O que é um método HTTP?
&lt;/h3&gt;

&lt;p&gt;Um método HTTP, às vezes chamado de verbo HTTP, indica a ação que a solicitação HTTP espera do servidor consultado. Por exemplo, dois dos métodos HTTP mais comuns são 'GET' e 'POST'; &lt;br&gt;
'GET' - espera informações de volta (geralmente na forma de um site), ou seja, quando você usa seu navegador para acessar algum site;&lt;br&gt;
'POST' - normalmente indica que o cliente está enviando informações para o servidor web (como informações de formulário, por exemplo, um nome de usuário e senha enviados).&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  O que é cabeçalho na requisição HTTP? (Request headers)
&lt;/h3&gt;

&lt;p&gt;Os cabeçalhos HTTP contêm informações de texto armazenadas em pares de valores-chave e são incluídos em cada solicitação HTTP. Esses cabeçalhos comunicam informações essenciais, como qual navegador o cliente está usando e quais dados estão sendo solicitados.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wt_VdkZ6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yc0pokq8sft2myrl7su7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wt_VdkZ6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yc0pokq8sft2myrl7su7.png" alt="Image request header" width="800" height="424"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  O que é um corpo de requisição HTTP? (Request body)
&lt;/h3&gt;

&lt;p&gt;O corpo de uma requisição é a parte que contém o 'corpo' de informações que a solicitação está transferindo. O corpo de uma solicitação HTTP contém qualquer informação enviada ao servidor web, como nome de usuário e senha, ou quaisquer outros dados inseridos em um formulário. Normalmente, é usado com métodos como POST, PUT e PATCH.&lt;/p&gt;


&lt;h2&gt;
  
  
  O que é uma resposta HTTP?
&lt;/h2&gt;

&lt;p&gt;Uma resposta HTTP é o que, normalmente, os navegadores recebem de um servidor da internet em resposta a uma solicitação HTTP. Essas respostas comunicam informações valiosas com base no que foi solicitado. Geralmente, na resposta tem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;O status da resposta;&lt;/li&gt;
&lt;li&gt;O cabeçalho da resposta;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  O que é um código de status de respostas HTTP? (Status code)
&lt;/h3&gt;

&lt;p&gt;Os códigos de status de respostas HTTP são códigos de 3 dígitos usados para indicar se uma requisição HTTP foi concluída com êxito.&lt;br&gt;
Os códigos de status são:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;(100-199) Respostas de informação;&lt;/li&gt;
&lt;li&gt;(200-299) Respostas de sucesso;&lt;/li&gt;
&lt;li&gt;(300-399) Redirecionamentos;&lt;/li&gt;
&lt;li&gt;(400-499) Erros do cliente;&lt;/li&gt;
&lt;li&gt;(500-599) Erros do servidor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YtCCVtX2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bhgt77rd3krz0j58e530.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YtCCVtX2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bhgt77rd3krz0j58e530.png" alt="Image response" width="758" height="494"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Cabeçalho da resposta
&lt;/h3&gt;

&lt;p&gt;Assim como uma requisição HTTP, uma resposta HTTP vem com cabeçalhos que transmitem informações importantes, como o idioma e o formato dos dados enviados no corpo da resposta.&lt;br&gt;
Veja a imagem anterior!!! 🙄&lt;/p&gt;



&lt;p&gt;FIM!!! 🤭&lt;/p&gt;

&lt;p&gt;Espera aí Diêgo, vou ter que decorar todas essas informações?!&lt;br&gt;
Claro que não, o que você precisa é entender os conceitos, qualquer dúvida envia uma mensagem. Fechado? 👌&lt;/p&gt;


&lt;h4&gt;
  
  
  Informação Complementar
&lt;/h4&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/hwttZtWkXTk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Internet?! O que é isso?</title>
      <dc:creator>Diego Dmitry</dc:creator>
      <pubDate>Thu, 03 Nov 2022 15:33:25 +0000</pubDate>
      <link>https://dev.to/diegodmitry/internet-o-que-e-isso-15k8</link>
      <guid>https://dev.to/diegodmitry/internet-o-que-e-isso-15k8</guid>
      <description>&lt;p&gt;Desde o crescimento explosivo de aplicativos para uso nos navegadores, todo desenvolvedor pode se beneficiar ao entender como a Internet funciona. Através de uma série introdutória de artigos sobre a Internet, você aprenderá os fundamentos da Internet e como ela funciona. Após ler este artigo, você será capaz de responder às seguintes perguntas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O que é internet?&lt;/li&gt;
&lt;li&gt;O que é IP?&lt;/li&gt;
&lt;li&gt;O que é um navegador?&lt;/li&gt;
&lt;li&gt;O que é SSL?&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;A Internet é uma rede global de computadores conectados entre si que se comunicam por meio de um conjunto padronizado de protocolos.&lt;br&gt;
É só isso!?&lt;br&gt;
Calma "pequeno gafanhoto" 🦗, vamos dividir em 3 partes e aprofundar um pouquinho mais. 😀&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;A primeira parte é o backbone: Ele consiste em redes de longa distância, principalmente em cabos de fibra ótica, que transportam dados entre data centers e consumidores. Os provedores de backbone frequentemente conectam suas redes em pontos de troca de internet, geralmente localizados nas principais cidades.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Os data centers são salas com servidores que armazenam dados de usuários e hospedam aplicativos e conteúdo online. Alguns exemplos são os de grandes empresas como Google e Facebook. Os data centers possuem conexões de internet muito rápidas, permitindo que atendam vários usuários simultaneamente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;E a última parte internet conecta residências e pequenas empresas. Atualmente, cerca de 60% das conexões residenciais de internet nos Estados Unidos são fornecidas por empresas de TV a cabo. Dos 40% restantes, uma fração crescente usa cabos de fibra óptica. Finalmente, um número cada vez menor, usa o serviço DSL fornecido por cabos telefônicos.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_Sxu-yF4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4duc4qi7mpv6629mo9ml.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Sxu-yF4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4duc4qi7mpv6629mo9ml.jpg" alt="Image of earth simulating the internet" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;


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

&lt;p&gt;IP(Internet Protocol) são números que os computadores usam para identificar uns aos outros na Internet. Por exemplo, um endereço IP do google.com.br é 142.250.201.67.&lt;/p&gt;

&lt;p&gt;Atualmente o IPv4, permite apenas cerca de 4 bilhões de endereços IP. Este foi considerado um número muito grande na década de 1970, mas hoje a oferta de endereços IPv4 está quase esgotada.&lt;/p&gt;

&lt;p&gt;Assim, os engenheiros desenvolveram um novo padrão chamado IPv6. O IPv6 permite um número incompreensível de endereços exclusivos – o número exato tem 39 dígitos – como no exemplo:  2001:0db8:0000:0000:0000:8a2e:0370:7334.&lt;/p&gt;


&lt;h2&gt;
  
  
  O que é um navegador?
&lt;/h2&gt;

&lt;p&gt;Um navegador é um programa de computador que permite aos usuários baixar e visualizar sites. Os navegadores estão disponíveis para computadores desktop, tablets e telefones celulares.&lt;br&gt;
Atualmente os navegadores mais conhecidos são: Google Chrome, Mozilla Firefox, Internet Explorer e Safari.&lt;/p&gt;


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

&lt;p&gt;SSL, abreviação para Secure Sockets Layer, é um conjunto de tecnologias de criptografia que permite aos usuários navegar com privacidade pela Internet.&lt;br&gt;
Você verá um cadeado próximo ao URL, indicando que suas comunicações com o site estão criptografadas. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ysGi8PY8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/54971ujsr6pa4agkynm2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ysGi8PY8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/54971ujsr6pa4agkynm2.png" alt="SSL Image" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Pronto, acabou!!!&lt;/p&gt;

&lt;p&gt;Diêgo, é só isso?!&lt;br&gt;
Calma pequeno padawan, isso é um resumo, é só um começo. Entende?&lt;br&gt;
Se eu escrever tudo no único artigo, fica chato e cansativo. Em breve, trarei mais conteúdo.&lt;br&gt;
Mas, enquanto isso, você pode ir vendo esses vídeos: 🫣&lt;br&gt;
Existem legendas em português. 😉&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Dxcc6ycZ73M"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/kBXQZMmiA4s"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ZghMPWGXexs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>webdev</category>
      <category>codenewbie</category>
      <category>devjournal</category>
    </item>
  </channel>
</rss>
