<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: lauriely lourenço</title>
    <description>The latest articles on Forem by lauriely lourenço (@laurielylourenco).</description>
    <link>https://forem.com/laurielylourenco</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%2F477427%2F38213b5c-1f79-4a4d-99bb-4a0cfd8f157d.jpeg</url>
      <title>Forem: lauriely lourenço</title>
      <link>https://forem.com/laurielylourenco</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/laurielylourenco"/>
    <language>en</language>
    <item>
      <title>🔍 Linux Holmes: Crônicas de um Detetive de Sistemas</title>
      <dc:creator>lauriely lourenço</dc:creator>
      <pubDate>Sat, 21 Jun 2025 22:16:53 +0000</pubDate>
      <link>https://forem.com/laurielylourenco/linux-holmes-cronicas-de-um-detetive-de-sistemas-456j</link>
      <guid>https://forem.com/laurielylourenco/linux-holmes-cronicas-de-um-detetive-de-sistemas-456j</guid>
      <description>&lt;p&gt;A aplicação engasga. O tempo de resposta dispara. O suporte começa a pipocar.&lt;/p&gt;

&lt;p&gt;Pânico? Não. É hora de ativar o modo Sherlock Holmes. Felizmente, nosso sistema de escolha, o Linux, oferece o arsenal completo para investigar o mistério direto da fonte.&lt;/p&gt;

&lt;p&gt;💡 Não vou falar de observabilidade complexa. O foco é o básico: &lt;strong&gt;Linux&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🕵️ Chegando à cena do crime...
&lt;/h3&gt;

&lt;p&gt;Primeira ferramenta: &lt;code&gt;htop&lt;/code&gt;&lt;br&gt;
Ele entrega tudo em tempo real. Meus focos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;CPU%&lt;/code&gt;&lt;/strong&gt;: se tem processo fixado em 90–100%, já tenho um suspeito.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;MEM%&lt;/code&gt;&lt;/strong&gt;: uso alto pode empurrar pro swap → queda de performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;PID&lt;/code&gt;&lt;/strong&gt;: informação essencial pra próxima etapa.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🔎 Investigando suspeitos: &lt;code&gt;ps&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Se já tenho um alvo, sigo com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;nome_ou_PID]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou meu favorito:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-%cpu | &lt;span class="nb"&gt;head&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Organiza por uso de CPU e me dá logo os 10 mais famintos.&lt;/p&gt;

&lt;h3&gt;
  
  
  🗂️ Procurando pistas nos bastidores: logs
&lt;/h3&gt;

&lt;p&gt;Nem sempre o problema está no uso de recursos.&lt;br&gt;
Pode ser erro interno, configuração, permissão…&lt;/p&gt;

&lt;p&gt;Hora de usar o bom e velho &lt;code&gt;tail&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /var/log/sua_aplicacao/error.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚠️ Caso real resolvido
&lt;/h3&gt;

&lt;p&gt;Numa dessas investigações, encontrei um processo do &lt;strong&gt;SNGrep&lt;/strong&gt; (análise SIP) devorando CPU.&lt;br&gt;
Comando simples, solução direta para mandar o processo embora:&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;kill&lt;/span&gt; &lt;span class="nt"&gt;-9&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;PID]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🛠️ Ferramentas simples, mas poderosas.&lt;/p&gt;

</description>
      <category>linux</category>
    </item>
    <item>
      <title>Tutorial OCI8 + PHP 7.4 – O Guia para não bater a cabeça na tela</title>
      <dc:creator>lauriely lourenço</dc:creator>
      <pubDate>Wed, 09 Apr 2025 13:25:32 +0000</pubDate>
      <link>https://forem.com/laurielylourenco/tutorial-oci8-php-74-o-guia-para-nao-bater-a-cabeca-na-tela-3hak</link>
      <guid>https://forem.com/laurielylourenco/tutorial-oci8-php-74-o-guia-para-nao-bater-a-cabeca-na-tela-3hak</guid>
      <description>&lt;p&gt;Passei HORAS apanhando pra fazer essa lib funcionar no PHP 7.4, então vou compartilhar o passo a passo QUE DEU CERTO pra mim. Se você tá aqui, provavelmente também tá no desespero. Bora tentar mais um tutorial!&lt;/p&gt;

&lt;h2&gt;
  
  
  Primeiro de tudo baixa esses trem da Oracle
&lt;/h2&gt;

&lt;p&gt;Download do Oracle Instant Client e do SDK no site da Oracle&lt;br&gt;
(Precisa criar conta na Oracle) pode ser versão mais recente&lt;/p&gt;

&lt;p&gt;Arquivos:&lt;br&gt;
&lt;code&gt;instantclient-basic-linux.x64-23.7.0.25.01.zip&lt;/code&gt; e&lt;br&gt;
&lt;code&gt;instantclient-sdk-linux.x64-23.7.0.25.01.zip&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Segundo passo!
&lt;/h2&gt;

&lt;p&gt;Você precisa criar uma pasta e fazer upload dos zips em seu servidor&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir /opt/oracle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora extrai os zips&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /opt/oracle
unzip instantclient-basic-linux.x64-23.7.0.25.01.zip
unzip instantclient-sdk-linux.x64-23.7.0.25.01.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Terceira passo
&lt;/h2&gt;

&lt;p&gt;É necessário criar um link simbólico&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ln -sf /opt/oracle/instantclient_23_7/libclntsh.so.23.7 /opt/oracle/instantclient_23_7/libclntsh.so
ln -sf /opt/oracle/instantclient_23_7/libocci.so.23.7 /opt/oracle/instantclient_23_7/libocci.so

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quarto passo
&lt;/h2&gt;

&lt;p&gt;Atualiza as libs do sistema&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo /opt/oracle/instantclient_23_7 &amp;gt; /etc/ld.so.conf.d/oracle-instantclient
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;Agora vem a parte em que demorei bastante entender: como estou usando PHP 7.4, precisei de uma versão específica do oci8&lt;/p&gt;

&lt;p&gt;Caso você não tenha essa pacotes instalados&lt;/p&gt;

&lt;p&gt;&lt;code&gt;apt-get install php-dev php-pear build-essential libaio1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Agora O PULO DO GATO pro PHP 7.4:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget https://pecl.php.net/get/oci8-2.2.0.tgz
tar -xvzf oci8-2.2.0.tgz
cd oci8-2.2.0
phpize
./configure --with-php-config=/usr/bin/php-config7.4 --with-oci8=instantclient,/opt/oracle/instantclient_23_7
make
sudo make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Habilita a extensão e reinicia TUDO
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "extension =oci8.so" &amp;gt;&amp;gt; /etc/php/7.4/fpm/php.ini
echo "extension =oci8.so" &amp;gt;&amp;gt; /etc/php/7.4/cli/php.ini
echo "extension =oci8.so" &amp;gt;&amp;gt; /etc/php/7.4/apache2/php.ini

sudo systemctl daemon-reexec &amp;amp;&amp;amp; sudo systemctl restart apache2
sudo systemctl restart php7.4-fpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Mais uma coisa
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExNWRraHhicHdsMDlzcTd0MmU4cnR0ZWwxaGk5dmJmcW13MHI5ZmVheSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FtX3u8iPVCNNfy%2Fgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExNWRraHhicHdsMDlzcTd0MmU4cnR0ZWwxaGk5dmJmcW13MHI5ZmVheSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FtX3u8iPVCNNfy%2Fgiphy.gif" width="400" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Testa pra ver se foi!
&lt;/h2&gt;

&lt;p&gt;No &lt;code&gt;phpinfo.php&lt;/code&gt; e busca por &lt;strong&gt;oci8&lt;/strong&gt;. Se aparecer, &lt;strong&gt;DEU BOM!&lt;/strong&gt; 🎉  &lt;/p&gt;

&lt;p&gt;Se não aparecer, chora um pouco e depois confere:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Variáveis de ambiente(essa daqui importante)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;(&lt;code&gt;export LD_LIBRARY_PATH=/opt/oracle/instantclient_23_7:$LD_LIBRARY_PATH&lt;/code&gt;)  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Logs do Apache/PHP-FPM&lt;/strong&gt;
(&lt;code&gt;/var/log/apache2/error.log&lt;/code&gt; ou &lt;code&gt;journalctl -xe&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;Verifica extensão
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; php -m | grep oci8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tente novamente o comando&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



</description>
      <category>linux</category>
      <category>oracle</category>
      <category>php</category>
    </item>
    <item>
      <title>Implementando uma Tabela Hash em PHP para Armazenar Dados de Artilheiros do Brasileirão</title>
      <dc:creator>lauriely lourenço</dc:creator>
      <pubDate>Thu, 07 Nov 2024 13:57:03 +0000</pubDate>
      <link>https://forem.com/laurielylourenco/implementando-uma-tabela-hash-em-php-para-armazenar-dados-de-artilheiros-do-brasileirao-35om</link>
      <guid>https://forem.com/laurielylourenco/implementando-uma-tabela-hash-em-php-para-armazenar-dados-de-artilheiros-do-brasileirao-35om</guid>
      <description>&lt;p&gt;Esse tópico de programação foi algo que encontrei na faculdade neste último semestre, e acho que não teria entrado em contato com esse assunto se não fosse por ela. Achei interessante, por isso tentei fazer um tutorial sobre o que entendi, claro que não será completo, apenas abordando os pontos que achei mais interessantes. Neste artigo, vamos explorar uma implementação de tabela hash em PHP para armazenar e organizar os dados de jogadores de futebol, ordenando-os pelo número de gols.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é uma Tabela Hash?
&lt;/h2&gt;

&lt;p&gt;As tabelas hash são estruturas de dados que permitem a recuperação de informações com eficiência. Elas são amplamente utilizadas em várias áreas da programação, desde bancos de dados até caches, devido ao seu desempenho de tempo constante médio na maioria das operações de busca e inserção. E uma estrutura que usa uma função de hash para mapear chaves a posições em uma array. Quando queremos armazenar um valor, usamos a função de hash para calcular a posição na qual ele deve ser inserido. Quando precisamos recuperar esse valor, aplicamos a mesma função de hash para encontrar sua posição rapidamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pontos para prestar atenção na Tabela Hash
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Colisões&lt;/strong&gt;: Quando duas chaves diferentes geram o mesmo índice de hash, ocorre uma colisão. Nossa implementação usa sondagem linear para encontrar a próxima posição disponível no array caso uma colisão ocorra.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desempenho de Pesquisa&lt;/strong&gt;: Para que a busca seja eficiente, é importante que a função de hash distribua uniformemente os dados. Nesta implementação, usamos a &lt;strong&gt;constante áurea&lt;/strong&gt; como base da função de hash, um método conhecido por ajudar na dispersão uniforme.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Implementação
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Classe &lt;code&gt;Jogador&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;A classe &lt;code&gt;Jogador&lt;/code&gt; representa cada jogador, armazenando seu nome e o número de gols.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Jogador&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nv"&gt;$nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nv"&gt;$gols&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getNome&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;setNome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$nome&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getGols&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;gols&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;setGols&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$gols&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;is_numeric&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$gols&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$gols&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;gols&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$gols&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"O número de gols deve ser um valor numérico e não negativo."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Classe &lt;code&gt;HashTable&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;A classe &lt;code&gt;HashTable&lt;/code&gt; é a estrutura de dados principal, responsável por armazenar os jogadores. Ela define métodos para inserir jogadores e para retornar os 10 maiores artilheiros.&lt;/p&gt;

&lt;h4&gt;
  
  
  Construtor e Função de Hash
&lt;/h4&gt;

&lt;p&gt;O construtor inicializa o array que armazena os dados, enquanto o método hash calcula o índice utilizando a constante áurea. Optei pelo método da multiplicação, pois ele evita preocupações com potências de dois no tamanho da tabela. Como o tamanho da tabela é baseado na quantidade de dados do arquivo CSV, essa escolha ajuda a garantir uma distribuição mais uniforme das chaves, mesmo sem um controle exato sobre o tamanho da tabela.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HashTable&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nv"&gt;$total_filme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nv"&gt;$tabelaHas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$max&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;total_filme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$max&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;tabelaHas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;array_fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$max&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$numero_gols&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.6180339887&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;$frac&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$numero_gols&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nb"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$numero_gols&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;total_filme&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nv"&gt;$frac&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Inserção com Tratamento de Colisões
&lt;/h4&gt;

&lt;p&gt;O método &lt;code&gt;put&lt;/code&gt; insere um objeto &lt;code&gt;Jogador&lt;/code&gt; na tabela. Caso o índice gerado já esteja ocupado, aplicamos sondagem linear até encontrar uma posição vazia.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$numero_gols&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;Jogador&lt;/span&gt; &lt;span class="nv"&gt;$jogador&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$posicao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$numero_gols&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;total_filme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nv"&gt;$novaPosicao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$posicao&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;total_filme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;is_null&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;tabelaHas&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$novaPosicao&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;tabelaHas&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$novaPosicao&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$jogador&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Tabela hash está cheia. Não foi possível inserir."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Extraindo os Top 10 Artilheiros
&lt;/h4&gt;

&lt;p&gt;O método &lt;code&gt;top10Artilheiros&lt;/code&gt; ordena a tabela por número de gols e retorna os 10 maiores artilheiros.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;top10Artilheiros&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="nb"&gt;usort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;tabelaHas&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getGols&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getGols&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getGols&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getGols&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;

        &lt;span class="nv"&gt;$artilheiros&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;tabelaHas&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;array_slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$artilheiros&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getTabelaH&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;tabelaHas&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Testando a Tabela Hash
&lt;/h3&gt;

&lt;p&gt;Aqui está um exemplo de como adicionar jogadores à tabela e obter os 10 maiores artilheiros:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$arquivo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'artilheiros.csv'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="cm"&gt;/* 
Esse dados foram retirados do site da espn
https://www.espn.com.br/futebol/estatisticas/_/liga/bra.1
*/&lt;/span&gt;
&lt;span class="nv"&gt;$jogadores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt; 

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;$handle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$arquivo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'r'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$header&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;fgetcsv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;","&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Lê o cabeçalho&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;$linha&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;fgetcsv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;","&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="nv"&gt;$jogadores&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;array_combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$header&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$linha&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nb"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$handle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;$tabela&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HashTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$jogadores&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$jogadores&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$j&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="nv"&gt;$jogador&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Jogador&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$jogador&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setNome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$j&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Nome'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nv"&gt;$jogador&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setGols&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;$j&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'G'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;


    &lt;span class="nv"&gt;$tabela&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$jogador&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getGols&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nv"&gt;$jogador&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;



&lt;span class="nb"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$tabela&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;top10Artilheiros&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Considerações Finais
&lt;/h3&gt;

&lt;p&gt;Esta implementação demonstra como criar uma tabela hash simples com tratamento de colisões e como armazenar objetos (como jogadores) em uma tabela hash. Aqui estão alguns pontos para reflexão e melhorias:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Resolução de Colisões&lt;/strong&gt;: Existem outros métodos de resolução de colisões, como sondagem quadrática e encadeamento separado, que podem ser explorados para melhorar o desempenho.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redimensionamento&lt;/strong&gt;: Para evitar uma tabela cheia, podemos implementar um mecanismo de redimensionamento dinâmico.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Funções de Hash Alternativas&lt;/strong&gt;: Testar diferentes funções de hash pode melhorar a dispersão e reduzir colisões.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/laurielylourenco/ca34d23c628486d5513e66ef7a2e1df5" rel="noopener noreferrer"&gt;Segue link do código&lt;/a&gt; &lt;br&gt;
&lt;a href="https://joaoarthurbm.github.io/eda/posts/hashtable" rel="noopener noreferrer"&gt;Segue o link também de um tutorial mais completo sobre o assunto&lt;br&gt;
que me ajudou bastante durante período de estudos&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Biblioteca emoji-picker-element em português</title>
      <dc:creator>lauriely lourenço</dc:creator>
      <pubDate>Mon, 22 Jul 2024 15:57:19 +0000</pubDate>
      <link>https://forem.com/laurielylourenco/biblioteca-emoji-picker-element-em-portugues-40f4</link>
      <guid>https://forem.com/laurielylourenco/biblioteca-emoji-picker-element-em-portugues-40f4</guid>
      <description>&lt;p&gt;Estava buscando uma biblioteca de emojis para desenvolver uma funcionalidade e encontrei &lt;a href="https://github.com/nolanlawson/emoji-picker-element" rel="noopener noreferrer"&gt;emoji-picker-element&lt;/a&gt;.&lt;br&gt;
Como achei a documentação um pouco confusa, estou deixando um exemplo que talvez possa te ajudar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/laurielylourenco/3fffae8f4992284623e5fcb50cd0b922" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>emoji</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Criando um script de sorteio a partir de um CSV com PHP</title>
      <dc:creator>lauriely lourenço</dc:creator>
      <pubDate>Thu, 28 Mar 2024 14:31:49 +0000</pubDate>
      <link>https://forem.com/laurielylourenco/criando-um-script-de-sorteio-a-partir-de-um-csv-com-php-3n6f</link>
      <guid>https://forem.com/laurielylourenco/criando-um-script-de-sorteio-a-partir-de-um-csv-com-php-3n6f</guid>
      <description>&lt;p&gt;No ano passado, tive a oportunidade de desenvolver um mini script para conduzir um sorteio na minha empresa. Neste artigo, vou compartilhar o código que utilizei o elefantinho.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primeira parte do código:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Nome do arquivo CSV e a coluna que será usada para o sorteio
$nomeArquivoCSV = 'sorteio.csv';
$colunaSorteio = 'descricao'; 

// Verifica se o arquivo existe
if (!file_exists($nomeArquivoCSV)) {
    die("O arquivo CSV '{$nomeArquivoCSV}' não foi encontrado.");
}

// Lê o conteúdo do arquivo CSV
$linhas = file($nomeArquivoCSV, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// Verifica se o arquivo está vazio
if (empty($linhas)) {
    die("O arquivo CSV '{$nomeArquivoCSV}' está vazio ou mal formatado.");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;FILE_IGNORE_NEW_LINES&lt;/code&gt;: Cada linha do array terá quebra linha usando essa flag isso será ignorado&lt;br&gt;
&lt;code&gt;FILE_SKIP_EMPTY_LINES&lt;/code&gt;: Pula linhas vazias nome meio auto explicativo&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Segunda parte do código:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$call = function ($array) {
    return str_getcsv($array, ";");
};

$colunas = str_getcsv(array_shift($linhas), ";");
$colunaSorteioIndex = array_search($colunaSorteio, $colunas);

if ($colunaSorteioIndex === false) {
    die("A coluna '{$colunaSorteio}' não foi encontrada no arquivo CSV.");
}

// Obtém os elementos da coluna de sorteio
$elementosSorteio = array_column(array_map($call, $linhas), $colunaSorteioIndex);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;$call&lt;/code&gt; é uma função anônima que recebe um array representando uma linha de dados CSV e o converte em um array usando o separador ponto e vírgula (&lt;code&gt;;&lt;/code&gt;) através da função &lt;code&gt;str_getcsv&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;str_getcsv(array_shift($linhas), ";")&lt;/code&gt;: Esse codigo pega a primeira linha do conjunto de linhas (&lt;code&gt;$linhas&lt;/code&gt;), a converte em um array onde cada elemento representa uma coluna, usando o ponto e vírgula (&lt;code&gt;;&lt;/code&gt;) como separador.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;array_search($colunaSorteio, $colunas)&lt;/code&gt;: Esta linha procura o índice da coluna especificada por &lt;code&gt;$colunaSorteio&lt;/code&gt; dentro do array de colunas (&lt;code&gt;$colunas&lt;/code&gt;). O índice é usado para localizar a coluna desejada nos dados do CSV.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agora vamos para parte final do script:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function sortearElemento(array $array)
{
    $indiceSorteado = array_rand($array);
    return $array[$indiceSorteado];
}

// Obtém os elementos da coluna de sorteio
$elementosSorteio = array_column(array_map($call, $linhas), $colunaSorteioIndex);

// Realiza o sorteio
$sorteado = sortearElemento($elementosSorteio);

// Exibe o resultado
echo "Sorte foi para : {$sorteado}";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://gist.github.com/laurielylourenco/c37cc618fffc5e6caea1a8fd97d4b849" rel="noopener noreferrer"&gt;Link para o script&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Espero que este artigo seja útil para quem estiver lendo :)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>csv</category>
      <category>tutorial</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Como atualizar / limpar o Wordpress em um servidor Linux pelo terminal</title>
      <dc:creator>lauriely lourenço</dc:creator>
      <pubDate>Sun, 15 Oct 2023 15:20:51 +0000</pubDate>
      <link>https://forem.com/laurielylourenco/como-atualizar-limpar-o-wordpress-em-servidor-linux-pelo-terminal-9i9</link>
      <guid>https://forem.com/laurielylourenco/como-atualizar-limpar-o-wordpress-em-servidor-linux-pelo-terminal-9i9</guid>
      <description>&lt;p&gt;Aconteceu algum problema com seu WordPress e agora você precisa fazer uma faxina? Vou te ajudar nisso!&lt;/p&gt;

&lt;p&gt;Primeiro de tudo, faça backup! Independentemente de tudo, faça backup! Dentro da pasta onde fica seu WordPress, faça backup dos arquivos wp-config.php e da pasta wp-content. São os arquivos que têm que ficar, senão você perderá todo seu trabalho.&lt;/p&gt;

&lt;p&gt;Vamos comprimir o arquivo e a pasta e mover para a pasta acima. &lt;br&gt;
Assim:&lt;br&gt;
&lt;code&gt;tar -czvf wp_content.tar.gz wp-content&lt;br&gt;
mv wp_content.tar.gz ..&lt;br&gt;
tar -czvf wp_config.tar.gz wp-config.php&lt;br&gt;
mv wp_config.tar.gz ..&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Backups feitos! Vamos excluir todos os arquivos, exceto wp-config.php e a pasta wp-content! Atenção, atenção, atenção! Este comando deve ser executado dentro da pasta onde fica seu WordPress!&lt;br&gt;
&lt;code&gt;find . -maxdepth 1 ! -name 'wp-content' ! -name 'wp-config.php' -exec rm -r {} +&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Este comando basicamente vai excluir tudo, menos o arquivo wp-config.php e a pasta wp-content. Ficou com medo de executar esse comando? Pode usar o 'rm' em cada pasta e arquivo que estiver aí. Só será mais trabalhoso!&lt;/p&gt;

&lt;p&gt;Agora envie para a pasta do servidor onde ficaram os arquivos essenciais o WordPress atualizado e comprimido em 'tar.xz', para ficar mais fácil. Basta descomprimir usando o comando:&lt;br&gt;
&lt;code&gt;tar -xJf wordpress.6.3.2.tar.xz&lt;/code&gt;&lt;br&gt;
Entre na pasta que foi criada:&lt;code&gt;cd wordpress.6.3.2/&lt;/code&gt;&lt;br&gt;
Mova os arquivos para a pasta acima: &lt;code&gt;mv * ..&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Prontinho, concluída sua tarefa de atualização ou limpeza Wordpress!&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
