/images/avatar.png

Roberta Brandão

Como comparei duas linguagens concorrentes para um projeto?

No último projeto pessoal, simulei o core de um sistema de pagamento. Pra isso, comecei a estudar qual linguagem seria importante para tratar o volume de transação e ainda garantir alguns guardrails para o ambiente. Entre as demais linguagens, meu benchmark decidi entre Golang e Elixir, por gosto pessoal e no fim escolhi o Elixir.

Go é poderoso, mas não fornece isolamento forte por design. Ele opta por eficiência e simplicidade, mas exige que o programador gerencie a concorrência de forma cuidadosa.Já Elixir /Erlang garante isso por construção: processos isolados e comunicação via mensagem tornam concorrência mais segura e previsível.

Debugando um app Elixir

O IEx é um verdadeiro “canivete suíço” para debugar aplicações Elixir. Com ele, você tem acesso direto ao estado da aplicação, pode inspecionar conexões, analisar consumo de memória e acompanhar a troca de mensagens entre processos. Em sistemas distribuídos e altamente concorrentes, essas ferramentas são essenciais para garantir observabididade e rapidez na resolução de problemas.

Neste artigo, vamos explorar como usar o IEx para:

  1. Checar conexões com o banco de dados.
  2. Fazer consultas de uso de memória.
  3. Acompanhar mensagens e processos internos do Elixir (mensageria).
  4. Usar o IEx remoto com checklist.

Para debugar uma aplicação Elixir, você deve rodar sua aplicação no modo interativo:

Implementando Armazenamento de Vetores para IA na Magalu Cloud

Este relatório foi desenvolvido em uma prova de conceito e o projeto foi inspirado no produto de S3 Vectors da AWS¹. Caso encontre algum erro técnico, gramatical ou de concordância, me avise.

A inteligência artificial (IA) generativa está transformando a maneira como as empresas interagem com dados e clientes. No cerne dessa transformação, encontram-se os vetores e os modelos de embedding, que permitem que sistemas de IA compreendam e processem informações não estruturadas de maneira semântica. Vetores são representações numéricas densas de dados como texto, imagens, áudio e vídeo, criadas por modelos de embedding que capturam o significado e a estrutura subjacente.1 A busca vetorial, uma técnica emergente, utiliza essas representações para encontrar pontos de dados semanticamente semelhantes, comparando suas distâncias ou similaridades.1 Essa capacidade é fundamental para diversas aplicações de IA.

Como implementei meu blog com Ghost

E este exemplo pode ajudar a colocar teu app na web.

Mas antes de tudo, gostaria de contar porquê eu mudei do gerador de sites estáticos Hugo, para um CMS (Content Management System).

Desde 2018, o gerador de sites com Jekyll e Hugo funcionavam bastante pra mim com GitHub Pages. O processo de publicação também me atendia bastante e o custo é praticamente zero se você não quiser ter um domínio .com ou .com.br, e rodava numa boa usando Git e uma Pipeline para atualizar a página estática e funcionava muito bem, pois não preciso gerenciar nenhuma infra-estrutura, só precisava garantir que o CI-CD do GitHub Actions estava funcionando numa boa. A forma de publicar um artigo também é bem fácil pra mim, usando o fluxo do git. Boas razões para usar.

Observabilidade no Kubernetes

Como instrumentar uma infraestrutura em MicroK8s para coleta de métricas e traces de aplicações com Grafana

O Kubernetes tornou-se uma plataforma essencial para orquestração de contêineres, e o MicroK8s é uma solução leve e fácil de usar para quem deseja rodar Kubernetes localmente ou em ambientes de desenvolvimento. No entanto, à medida que suas aplicações crescem em complexidade, a necessidade de monitoramento e observabilidade torna-se crítica.

Vale ressaltar que Kubernetes e a observabilidade são componentes essenciais para a gestão de aplicações modernas em ambientes de nuvem, mas sua implementação pode levar a um aumento significativo nos custos se não forem gerenciados de forma eficiente. Por exemplo, o Kubernetes pode escalar automaticamente os recursos com base na demanda, o que é ótimo para garantir a disponibilidade da aplicação, mas também pode resultar em custos imprevistos. Um cluster Kubernetes que escala horizontalmente (HPA - Horizontal Pod Autoscaler) pode criar múltiplas réplicas de pods durante picos de tráfego, consumindo mais recursos de CPU, memória e armazenamento. Se esses recursos não forem otimizados ou se o dimensionamento automático for configurado de forma agressiva, a infraestrutura pode acabar utilizando mais instâncias de nuvem do que o necessário, elevando a fatura mensal.

Fundamentos do Sistema Linux

Seguimos com um procedimento sobre a base do linux, com explicações diretas sobre comandos essenciais na administração do Linux. Para uma introdução mais histórica, sugiro acessar os links do tópico 1 do artigo de Curadoria de Aprendizagem Linux

No Linux, tudo é representado como um arquivo ou diretório. A estrutura segue o padrão Filesystem Hierarchy Standard (FHS):

DiretórioDescrição
/Raiz do sistema de arquivos, tudo começa aqui.
/binBinários essenciais (comandos básicos, ex: ls, cp).
/sbinBinários administrativos (ex: fdisk, shutdown).
/homeDiretórios dos usuários (/home/usuario).
/rootDiretório do superusuário root.
/etcArquivos de configuração do sistema.
/varDados variáveis (logs, filas de impressão, cache).
/tmpArquivos temporários (limpos após reinicialização).
/usrAplicações e bibliotecas não essenciais.
/optAplicações opcionais instaladas manualmente.
/devArquivos de dispositivos (ex: /dev/sda para discos).
/procInformações do sistema e processos em tempo real.
/sysInformações sobre hardware e kernel.
/mnt e /mediaPontos de montagem para dispositivos externos.

pwd        # Mostra o diretório atual
ls         # Lista arquivos e diretórios
ls -l      # Lista detalhada
ls -a      # Inclui arquivos ocultos
cd /etc    # Acessa o diretório /etc
cd ~       # Volta para o diretório do usuário
cd ..      # Volta um nível
cd -       # Alterna para o diretório anterior
mkdir novo_dir    # Cria um diretório
rmdir vazio       # Remove um diretório vazio
rm arquivo.txt    # Remove um arquivo
rm -rf pasta/     # Remove uma pasta e seu conteúdo
cp origem destino # Copia um arquivo ou diretório
mv origem destino # Move ou renomeia arquivos/diretórios
touch novo.txt    # Cria um arquivo vazio
cat arquivo.txt   # Exibe o conteúdo do arquivo
less arquivo.txt  # Permite rolar pelo arquivo
head arquivo.txt  # Mostra as primeiras 10 linhas
tail arquivo.txt  # Mostra as últimas 10 linhas
find /home -name "*.txt"  # Busca arquivos por nome
grep "erro" log.txt       # Procura a palavra "erro" em um arquivo
ls -l arquivo.txt  # Exibe permissões do arquivo
chmod 755 script.sh  # Modifica permissões (rwxr-xr-x)
chown user:grupo arquivo.txt  # Muda dono do arquivo
ps aux      # Lista processos em execução
top         # Exibe processos ativos em tempo real
kill PID    # Mata um processo pelo ID
df -h       # Mostra espaço em disco
du -sh pasta/  # Mostra tamanho de uma pasta
uptime      # Mostra tempo ligado do sistema

Arch Linux (Pacman)