<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-br"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://natanfelles.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://natanfelles.github.io/" rel="alternate" type="text/html" hreflang="pt-br" /><updated>2025-07-22T20:20:23-03:00</updated><id>https://natanfelles.github.io/feed.xml</id><title type="html">Natan Felles</title><subtitle>Creative Webmaster</subtitle><author><name>Natan Felles</name><email>natanfelles@gmail.com</email></author><entry><title type="html">Remover Extensões no Nginx</title><link href="https://natanfelles.github.io/blog/remover-extensao-no-nginx" rel="alternate" type="text/html" title="Remover Extensões no Nginx" /><published>2023-03-21T00:00:00-03:00</published><updated>2023-03-21T00:00:00-03:00</updated><id>https://natanfelles.github.io/blog/remover-extensao-no-nginx</id><content type="html" xml:base="https://natanfelles.github.io/blog/remover-extensao-no-nginx"><![CDATA[<p>Normalmente, páginas estáticas possuem a extensão do arquivo ao acessá-las por
um navegador, como, por exemplo, <code>contact.html</code>.</p>

<p>Com Nginx é possível remover o sufixo <code>.html</code>, fazendo com que a página HTML
<code>contact.html</code> seja acessível apenas por <code>contact</code>.</p>

<p>Para isso, adicione a linha seguinte no virtual host:</p>

<pre><code class="language-nginx">try_files $uri $uri.html $uri/index.html =404;
</code></pre>

<p>Nginx tentará encontrar o arquivo com a extensão e irá respondê-lo caso encontre.</p>

<p>Se não encontrar, carregará a página de Erro 404.</p>

<p>Segue abaixo uma amostra mais detalhada fazendo isso funcionar:</p>

<pre><code class="language-nginx">server {
    listen 80;

    root /home/natanfelles/websites/teste;

    index index.html;

    server_name teste.local;

    try_files $uri $uri.html $uri/index.html =404;

    error_page 404 /404.html;
}
</code></pre>

<p>Perceba que esse é o mesmo procedimento utilizado pelo GitHub e GitLab para
disponibilizar sites estático.</p>

<p>Note que o endereço da página atual é
<a href="https://natanfelles.github.io/blog/remover-extensao-no-nginx">https://natanfelles.github.io/blog/remover-extensao-no-nginx</a>
mas também é acessível com a extensão em
<a href="https://natanfelles.github.io/blog/remover-extensao-no-nginx.html">https://natanfelles.github.io/blog/remover-extensao-no-nginx.html</a>.</p>

<p>Valeu, galera!</p>]]></content><author><name>Natan Felles</name></author><category term="desenvolvimento" /><category term="nginx" /><category term="linux" /><category term="servidor" /><summary type="html"><![CDATA[Como remover extensões de arquivos no servidor web Nginx]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://natanfelles.github.io/remover-extensao-nginx.png" /><media:content medium="image" url="https://natanfelles.github.io/remover-extensao-nginx.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Backup de Banco de Dados MariaDB ou MySQL</title><link href="https://natanfelles.github.io/blog/backup-banco-de-dados-mariadb-mysql" rel="alternate" type="text/html" title="Backup de Banco de Dados MariaDB ou MySQL" /><published>2023-03-07T00:00:00-03:00</published><updated>2023-03-07T00:00:00-03:00</updated><id>https://natanfelles.github.io/blog/backup-banco-de-dados-mariadb-mysql</id><content type="html" xml:base="https://natanfelles.github.io/blog/backup-banco-de-dados-mariadb-mysql"><![CDATA[<p>Algum tempo atrás precisei fazer backup de um banco de dados MariaDB.</p>

<p>O banco possuía uma tabela com mais de 5 milhões de registros e, inicialmente, pensei que o processo seria demorado.</p>

<h2 id="exportação">Exportação</h2>

<p>Para exportar a criação das tabelas e inserção de registros, foi utilizado o <strong>mysqldump</strong>:</p>

<pre><code>mysqldump -uroot -p dbname &gt; dbname.sql
</code></pre>

<p>No exemplo acima, <strong>dbname</strong> é o nome do banco e <strong>dbname.sql</strong> é o nome do arquivo.</p>

<p>O processo foi muito rápido! Levou menos de 20 segundos e criou um arquivo com cerca de 300 MB.</p>

<h2 id="importação">Importação</h2>

<p>Para importar os dados do banco exportado foi preciso que o esquema alvo já existisse.</p>

<p>No exemplo abaixo, <strong>dbname</strong> é o nome do banco de dados alvo e <strong>dbname.sql</strong> é o nome do arquivo com os dados exportados:</p>

<pre><code>mysql -uroot -p dbname &lt; dbname.sql
</code></pre>

<p>Para importar, o processo foi um pouco mais demorado: cerca de 3 minutos!</p>

<h2 id="conclusão">Conclusão</h2>

<p>Exportar e importar bancos de dados é um processo relativamente rápido quando utiliza-se as ferramentas apropriadas.</p>]]></content><author><name>Natan Felles</name></author><category term="desenvolvimento" /><category term="mysql" /><category term="mariadb" /><category term="linux" /><category term="servidor" /><category term="backup" /><summary type="html"><![CDATA[Backup de Banco de Dados MariaDB ou MySQL]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://natanfelles.github.io/mariadb-database-backup.png" /><media:content medium="image" url="https://natanfelles.github.io/mariadb-database-backup.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Feliz Ano Novo</title><link href="https://natanfelles.github.io/blog/feliz-2022" rel="alternate" type="text/html" title="Feliz Ano Novo" /><published>2021-12-31T00:00:00-03:00</published><updated>2021-12-31T00:00:00-03:00</updated><id>https://natanfelles.github.io/blog/feliz-2022</id><content type="html" xml:base="https://natanfelles.github.io/blog/feliz-2022"><![CDATA[<p>Olá, meu amigo!</p>

<p>Se você é um dos milhares de seres humanos que visitam esse blog ou está chegando
aqui pela primeira vez, tenho algo importante a lhe dizer:</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>Não tenho tido muito tempo para colocar algumas dicas rápidas e, talvez, úteis,
ultimamente. É isso. Muito obrigado, querido amigo que eu não conheço.</p>

<p>Muito obrigado a você que eu conheço também, meu camarada!</p>

<p>Um grande abraço para o João, aquele bobalhão que é muito inteligente, humilde
e gosta de gostar de gostar de gostar. Ele é vovô, mas é um bebêzinho. Talvez
você também conheça ele. Às vezes chamam ele de “John Doe”. Feito!</p>

<p>Mais uma vez:</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>FELIZ ANO NOVO! QUE 2022 SEJA UM ANO DE MUITAS BENÇÃOS EM SUA VIDA!</p>

<p>Valeu, bro! Vai lá fazer aquela coisa boa que você precisa fazer.</p>]]></content><author><name>Natan Felles</name></author><category term="desenvolvimento" /><summary type="html"><![CDATA[Feliz 2022]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://natanfelles.github.io/2022.png" /><media:content medium="image" url="https://natanfelles.github.io/2022.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">PHP is faster than C++</title><link href="https://natanfelles.github.io/blog/php-is-faster-than-cpp" rel="alternate" type="text/html" title="PHP is faster than C++" /><published>2021-10-26T00:00:00-03:00</published><updated>2021-10-26T00:00:00-03:00</updated><id>https://natanfelles.github.io/blog/php-is-faster-than-cpp</id><content type="html" xml:base="https://natanfelles.github.io/blog/php-is-faster-than-cpp"><![CDATA[<p>Ah, como é bom o perfume das flores do campo! Não acha?</p>

<p>Esses dias comecei a fazer uns testes para tranformar alguns códigos simples escritos em PHP para C++.</p>

<p>Ainda não descobri a melhor maneira de fazer isso, mas comecei usando CGI, para facilitar.</p>

<p>Instalei, configurei, escrevi, compilei, testei e para minha surpresa o teste de benchmark de uma página respondida com PHP-FPM foi quase 10 vezes mais rápida que uma utilizando C++ e CGI.</p>

<h2 id="código-fonte">Código Fonte</h2>

<p>Esse é o código do arquivo <code>index.php</code>:</p>

<pre><code class="language-php">&lt;?php
http_response_code(200);
header('Content-Type: text/html; charset=utf-8');
?&gt;
&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Hello World - PHP&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h2&gt;Hello World with PHP!&lt;/h2&gt;
REMOTE_ADDR: &lt;?= $_SERVER['REMOTE_ADDR'] ?&gt;&lt;br&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>Esse é o código do arquivo <code>index.cpp</code>:</p>

<pre><code class="language-cpp">#include &lt;iostream&gt;

int main ()
{
   // Status
   std::cout &lt;&lt; "Status: 200 OK\r\n"
   // Headers
   &lt;&lt; "Content-Type: text/html; charset=utf-8\r\n"
   // Separator
   &lt;&lt; "\r\n"
   // Body contents
   &lt;&lt; "&lt;!doctype html&gt;\n"
   &lt;&lt; "&lt;html&gt;\n"
   &lt;&lt; "&lt;head&gt;\n"
   &lt;&lt; "&lt;title&gt;Hello World - CGI&lt;/title&gt;\n"
   &lt;&lt; "&lt;/head&gt;\n"
   &lt;&lt; "&lt;body&gt;\n"
   &lt;&lt; "&lt;h2&gt;Hello World with CGI!&lt;/h2&gt;\n"
   &lt;&lt; "REMOTE_ADDR: " &lt;&lt; getenv("REMOTE_ADDR") &lt;&lt; "&lt;br&gt;\n"
   &lt;&lt; "&lt;/body&gt;\n"
   &lt;&lt; "&lt;/html&gt;\n";
   return 0;
}
</code></pre>

<p>Como visto, a sintaxe da PHP realmente se sobressai, sendo ela uma linguagem de alto-nível.
O que eu não esperava é que a página respondida do script seria mais rápida do que a com código compilado.</p>

<p>Obviamente eu não utilizei as melhores técnicas para fazer isso, mas gostei da experiência.</p>

<h2 id="instalações-configurações-compilações-e-grandes-emoções-eu-vivi">Instalações, configurações, compilações e grandes emoções eu vivi</h2>

<p>Num sistema baseado no Debian, foi feita essa instalação:</p>

<pre><code>sudo apt install build-essential fcgiwrap nginx php-fpm  
</code></pre>

<p>A compilação do código C++ foi realizada com esse comando:</p>

<pre><code>g++ index.cpp -o index.cgi
</code></pre>

<p>Ambos os gateways foram configurados utilizando nginx.</p>

<p>E aqui está o conteúdo do virtual host:</p>

<pre><code class="language-nginx">server {
    listen 80;

    root /home/natanfelles/cgi;

    server_name cgi.local;

    location ~ \.cgi$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/fcgiwrap.socket;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
    }
}
</code></pre>

<p>Depois, os arquivos foram colocados no diretório root do virtual host.</p>

<h2 id="testes">Testes</h2>

<p>Os testes foram realizados com o Apache Benchmark.</p>

<p>Teste na página C++ e CGI:</p>

<pre><code>ab -n 10000 -c 10 http://cgi.local/index.cgi
</code></pre>

<p>Teste na página PHP:</p>

<pre><code>ab -n 10000 -c 10 http://cgi.local/index.php
</code></pre>

<h3 id="resultados">Resultados</h3>

<p>O tempo das requisições para o arquivo CGI levou 32.377 segundos.</p>

<p>O tempo das requisições para o arquivo PHP levou 3.319 segundos.</p>

<h2 id="conclusão">Conclusão</h2>

<p>Então, a página com PHP respondeu 9.75 vezes mais rápido do que a com CGI.</p>

<h2 id="vem-pro-play-playboy">Vem pro play, playboy!</h2>

<p>E aí, você tem experiência com C++? Sabe uma maneira de fazer isso mais rápido?</p>

<p>Por favor, diga como fazer isso nos comentários. Vou adorar saber!</p>

<p>Muito obrigado por ler. Hah!</p>]]></content><author><name>Natan Felles</name></author><category term="desenvolvimento" /><category term="php" /><category term="cpp" /><category term="nginx" /><category term="cgi" /><category term="benchmark" /><summary type="html"><![CDATA[Speed test of PHP-FPM versus C++ with CGI]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://natanfelles.github.io/php-cpp.png" /><media:content medium="image" url="https://natanfelles.github.io/php-cpp.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Deus</title><link href="https://natanfelles.github.io/blog/deus" rel="alternate" type="text/html" title="Deus" /><published>2021-07-17T00:00:00-03:00</published><updated>2021-07-17T00:00:00-03:00</updated><id>https://natanfelles.github.io/blog/deus</id><content type="html" xml:base="https://natanfelles.github.io/blog/deus"><![CDATA[<div class="alert alert-info">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <strong><i class="fa fa-info-circle"></i> Informação</strong><br />
    Esta página está em construção.
</div>

<div class="embed-responsive embed-responsive-16by9">
    <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/chNh8anouZk?autoplay=1" autoplay="autoplay" allowfullscreen=""></iframe>
</div>]]></content><author><name>Natan Felles</name></author><category term="fé" /><category term="espírito" /><category term="matéria" /><category term="revelação" /><category term="pai" /><category term="filho" /><category term="espírito-santo" /><summary type="html"><![CDATA[Indescritível]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://natanfelles.github.io/deus.png" /><media:content medium="image" url="https://natanfelles.github.io/deus.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Trocando versão principal do PHP</title><link href="https://natanfelles.github.io/blog/php-versions" rel="alternate" type="text/html" title="Trocando versão principal do PHP" /><published>2020-10-17T00:00:00-03:00</published><updated>2020-10-17T00:00:00-03:00</updated><id>https://natanfelles.github.io/blog/php-versions</id><content type="html" xml:base="https://natanfelles.github.io/blog/php-versions"><![CDATA[<p>Essa semana saiu o PHP 8 Release Candidate como versão disponível nos repositórios
<a href="https://deb.sury.org/">DEB.SURY.ORG</a>. E eu não pude deixar de instalar!</p>

<p>Porém o repositório do PHP 8 <em>ainda</em> não possui a extensão Xdebug e, por causa disso, não pude fazer um upgrade geral em meus <a href="https://packagist.org/packages/natanfelles/">pacotes</a>. Então, continuei com o PHP 7.4 como a versão principal.</p>

<p>Problema é que, por ser mais recente, o PHP 8 se tornou o binário padrão:</p>

<pre><code>php -v
</code></pre>

<pre><code>PHP 8.0.0rc1 (cli) (built: Oct 17 2020 07:31:28) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.0rc1, Copyright (c), by Zend Technologies
</code></pre>

<p>Para trocar para outra versão, foi preciso atualizar os links simbólicos dos binários e deixar o 7.4 como padrão.</p>

<pre><code>sudo update-alternatives --config php
</code></pre>

<p>Basta digitar o número da seleção:</p>

<pre><code>Existem 2 escolhas para a alternativa php (disponibiliza /usr/bin/php).

  Selecção   Caminho          Prioridade Estado
------------------------------------------------------------
* 0            /usr/bin/php8.0   80        modo automático
  1            /usr/bin/php7.4   74        modo manual
  2            /usr/bin/php8.0   80        modo manual

Pressione &lt;enter&gt; para manter a escolha actual[*], ou digite o número da selecção: 1
</code></pre>

<p>Conferindo outra vez:</p>

<pre><code>php -v
</code></pre>

<pre><code>PHP 7.4.11 (cli) (built: Oct 17 2020 07:30:05) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies
    with Xdebug v2.9.8, Copyright (c) 2002-2020, by Derick Rethans
</code></pre>

<p>Feito!</p>]]></content><author><name>Natan Felles</name></author><category term="desenvolvimento" /><category term="php" /><category term="linux" /><category term="debian" /><category term="ubuntu" /><summary type="html"><![CDATA[Troque a versão principal do PHP]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://natanfelles.github.io/elephants.jpg" /><media:content medium="image" url="https://natanfelles.github.io/elephants.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Resolvendo permissão negada ao tentar conectar ao soquete do Docker</title><link href="https://natanfelles.github.io/blog/docker-user-permissions" rel="alternate" type="text/html" title="Resolvendo permissão negada ao tentar conectar ao soquete do Docker" /><published>2020-10-01T00:00:00-03:00</published><updated>2020-10-01T00:00:00-03:00</updated><id>https://natanfelles.github.io/blog/docker-user-permissions</id><content type="html" xml:base="https://natanfelles.github.io/blog/docker-user-permissions"><![CDATA[<h2 id="problema">Problema:</h2>

<p>Você está tentando executar um contêiner do Docker, mas só recebe uma mensagem de erro como esta:</p>

<pre><code>docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
</code></pre>

<h2 id="solução">Solução:</h2>

<p>A mensagem de erro informa que o usuário atual não pode acessar o mecanismo do docker, porque você não tem permissões para acessar o soquete unix para se comunicar com o mecanismo.</p>

<p>Execute este comando em seu shell favorito e, em seguida, <strong>saia completamente da sua conta e faça login novamente</strong> (ou saia da sessão SSH e reconecte. Em caso de dúvida, reinicie o computador em que está tentando executar o Docker!):</p>

<pre><code>sudo usermod -a -G docker $USER
</code></pre>

<p>Depois de fazer isso, você deverá ser capaz de executar o comando sem problemas. Execute <code>docker run hello-world</code> como um usuário normal para verificar se funciona. Reinicialize se o problema ainda persistir.</p>

<p>É necessário fazer logout e login novamente porque a mudança de grupo não terá efeito a menos que sua sessão seja encerrada.</p>

<p>Done.</p>]]></content><author><name>Natan Felles</name></author><category term="desenvolvimento" /><category term="docker" /><category term="linux" /><summary type="html"><![CDATA[Instalou o Docker e não consegue executar nenhum comando?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://natanfelles.github.io/docker-cloud.png" /><media:content medium="image" url="https://natanfelles.github.io/docker-cloud.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Trocar plugin de autenticação no MySQL</title><link href="https://natanfelles.github.io/blog/mysql-native-password" rel="alternate" type="text/html" title="Trocar plugin de autenticação no MySQL" /><published>2020-09-28T00:00:00-03:00</published><updated>2020-09-28T00:00:00-03:00</updated><id>https://natanfelles.github.io/blog/mysql-native-password</id><content type="html" xml:base="https://natanfelles.github.io/blog/mysql-native-password"><![CDATA[<p>À partir do MySQL Server 5.7, se não fornecermos uma senha para o usuário root durante a instalação, ele usará o plugin <strong>auth_socket</strong> para autenticação. Com esta configuração, o MySQL não se preocupará com sua senha de entrada, ele verificará se o usuário está se conectando usando um soquete UNIX e então comparará o nome de usuário. Se for igual, você está autenticado!</p>

<p>Erro ao fazer o login para o usuário root do MySQL a partir da conta de usuário normal do Linux:</p>

<pre><code>natanfelles@controller:~$ mysql -uroot -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
</code></pre>

<p>Mas está tudo bem quando mudamos para a conta root do Linux:</p>

<pre><code>natanfelles@controller:~$ sudo su -
root@controller:~# mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 40
Server version: 5.7.22-0ubuntu18.04.1 (Ubuntu)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql&gt;
</code></pre>

<p>Vamos verificar o plugin de autenticação atual que o servidor MySQL está usando:</p>

<pre><code>mysql&gt; SELECT plugin from mysql.user where User='root';
+-----------------------+
| plugin                |
+-----------------------+
| auth_socket           |
+-----------------------+
</code></pre>

<p>Para poder fazer o login com senha, você deve alterar o plugin de <strong>auth_socket</strong> para <strong>mysql_native_password</strong>. A seguir está o comando para fazer isso e criar uma nova senha.</p>

<pre><code>mysql&gt; UPDATE mysql.user SET plugin = 'mysql_native_password', authentication_string = PASSWORD('nova-senha') WHERE User = 'root';
mysql&gt; FLUSH PRIVILEGES;
</code></pre>

<p>Feito isso você pode logar utilizando a nova senha.</p>]]></content><author><name>Natan Felles</name></author><category term="desenvolvimento" /><category term="mysql" /><category term="linux" /><category term="servidor" /><summary type="html"><![CDATA[Instalou um servidor MySQL e não consegue entrar?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://natanfelles.github.io/mysql-native-password.png" /><media:content medium="image" url="https://natanfelles.github.io/mysql-native-password.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Como habilitar logs durante o boot</title><link href="https://natanfelles.github.io/blog/boot-logs" rel="alternate" type="text/html" title="Como habilitar logs durante o boot" /><published>2020-08-15T00:00:00-03:00</published><updated>2020-08-15T00:00:00-03:00</updated><id>https://natanfelles.github.io/blog/boot-logs</id><content type="html" xml:base="https://natanfelles.github.io/blog/boot-logs"><![CDATA[<p>Edite o arquivo <code>/etc/default/grub</code>.</p>

<p>Commente a linha</p>

<pre><code>#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
</code></pre>

<p>e adicione</p>

<pre><code>GRUB_CMDLINE_LINUX_DEFAULT=""
</code></pre>

<p>Rode:</p>

<pre><code>update-grub
</code></pre>]]></content><author><name>Natan Felles</name></author><category term="customizacao" /><category term="grub" /><category term="logs" /><category term="ubuntu" /><category term="debian" /><summary type="html"><![CDATA[Como habilitar logs durante o boot]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://natanfelles.github.io/boot-logs.png" /><media:content medium="image" url="https://natanfelles.github.io/boot-logs.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Como resetar tema do GDM</title><link href="https://natanfelles.github.io/blog/gdm" rel="alternate" type="text/html" title="Como resetar tema do GDM" /><published>2020-08-15T00:00:00-03:00</published><updated>2020-08-15T00:00:00-03:00</updated><id>https://natanfelles.github.io/blog/gdm</id><content type="html" xml:base="https://natanfelles.github.io/blog/gdm"><![CDATA[<p>Rode</p>

<pre><code>update-alternatives --config gdm3-theme.gresource
</code></pre>

<p>Selecione a opção desejada.</p>

<pre><code>/usr/share/gnome-shell/gnome-shell-theme.gresource
</code></pre>]]></content><author><name>Natan Felles</name></author><category term="customizacao" /><category term="ubuntu" /><category term="debian" /><summary type="html"><![CDATA[Como mudar para o tema padrão do GNOME Display Manager]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://natanfelles.github.io/gdm.png" /><media:content medium="image" url="https://natanfelles.github.io/gdm.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>