Artigos e Tutoriais sobre Programação de Computadores

Olá e bem-vindo a minha casa na internet. Aqui falo um pouco sobre mim e sobre meu trabalho como programador, sobre tecnologia e também escrevi alguns artigos e tutoriais que podem ser úteis para pessoas que como eu adoram esse mundo do bit e do transistor. Trabalhar com computadores, além de uma paixão, também é o que paga as contas aqui em casa desde que me conheço por gente. Espero que goste. :wq

Exceto onde indicado de outra forma, o conteúdo deste site é licenciado sob CC BY 4.0

Posts Recentes

sftpdav: Acesso Remoto via SSH com WebDAV

golang webdav

Como configurar e executar um servidor SFTP / WebDAV usando Go (sftpdav). Veja exemplos práticos, dicas de segurança e aproveite as bibliotecas padrão para criar soluções robustas e eficientes.

Protegendo credenciais e configurações com contêiner criptografado.

golang grupo-estudos-golang segurança

Criar e gerenciar um contêiner criptografado para proteger senhas, chaves e outros dados confidenciais de forma prática e segura, sem sacrificar desempenho

LQS: Uma Ferramenta Prática para Testar e Debugar SQL

golang grupo-estudos-golang desenvolvimento sql lua

LQS: uma ferramenta prática para testar e depurar SQL. Permite integrar metadados, scripts Lua e consultas auxiliares para otimizar seu fluxo de trabalho e detectar erros antecipadamente.

Ordenando e removendo linhas duplicadas com Neovim

lua desenvolvimento

Funções Lua para ordenar e remover linhas duplicadas no Neovim.

Bookmarks em Neovim

lua desenvolvimento

Como criar um sistema de bookmarks em Neovim

GoScope Explorando e Navegando em Projetos Go

golang grupo-estudos-golang desenvolvimento

GoScope, ferramentas de linha de comando para explorar projetos Go, localizar funções, variáveis e tipos com eficiência. Aprenda como usá-las para navegar no código de forma interativa e otimizar sua produtividade.

Executando Comandos Remotos de Forma Interativa com SSH

golang grupo-estudos-golang desenvolvimento

Como executar comandos em servidores remotos sem iniciar sessões completas, mantendo recursos interativos e simplificando a automação com SSH.

Traceback em Go: Como Explorar a Pilha de Execução

golang grupo-estudos-golang desenvolvimento

Como obter stack traces em Go com runtime.Caller e runtime.CallersFrames. Rastreie erros, personalizar logs e melhorar a depuração do seu código.

Transmissão de Dados Usando Som: Uma Experiência com 'Telefone de Copos'

golang grupo-estudos-golang segurança

Transmissão de dados usando som, dois copos plásticos e um cordão, combinando criatividade, nostalgia e tecnologia.

Compilação Estática do Interpretador Lua: Garantia de Consistência e Portabilidade

lua desenvolvimento

Como compilar o interpretador Lua de forma estática para evitar problemas com dependências de bibliotecas dinâmicas.

Como Encontrar Caminhos de Programas no Sistema com exec.LookPath em Go

golang grupo-estudos-golang

Como usar a função exec.LookPath no Go para verificar se programas estão instalados no sistema e obter seus caminhos completos.

Otimizando a Verificação de Integridade de Mensagens com FNV-1a em Go

golang grupo-estudos-golang segurança

Como usar o algoritmo FNV-1a com pools de hash em Go, reduzindo a pressão sobre o garbage collector e sem comprometer a performance.

mTLS: Implementando Autenticação Mútua entre Cliente e Servidor em Go

golang grupo-estudos-golang segurança

Autenticação mútua com mTLS em Go passo a passo. Este guia cobre criação de certificados, configuração de servidor e cliente, e melhores práticas de segurança para proteger suas aplicações.

HMAC (Hash-based Message Authentication Code) em Golang

golang grupo-estudos-golang segurança

Autenticação segura em APIs utilizando HMAC (Hash-based Message Authentication Code) em Golang.

Validação e Integração Segura de JSON em APIs Go com json.RawMessage

golang desenvolvimento grupo-estudos-golang

Como validar e integrar JSON de forma segura em APIs Go usando json.RawMessage. E como registrar erros de JSON inválido nos logs enquanto mantém o fluxo normal do sistema.

Fork bomb: Do Código à Defesa

segurança bash assembly

O que é uma fork bomb, como ela funciona com exemplos em bash, C e assembly, e conheça as melhores práticas para prevenir esse tipo de ataque DoS em sistemas modernos.

Manipulando bits de permissão especiais

golang grupo-estudos-golang segurança

Como configurar permissões especiais com setuid e setgid para executar programas com privilégios de superusuário

Redução de Privilégios em Programas Go para Aumentar a Segurança

golang grupo-estudos-golang segurança

Como aumentar a segurança de programas Golang reduzindo privilégios de execução. Descubra como verificar e alterar usuários e grupos em sistemas UNIX-like com exemplos práticos de código e boas práticas para minimizar os riscos de ataques.

Referências nos comentários com Golang

golang grupo-estudos-golang

Referências em comentários no código Go para facilitar a navegação.

Efeito plasma no terminal com Golang

terminal golang grupo-estudos-golang

Como criar efeito plasma no terminal com Golang, exemplo do grupo de estudos de Go

Feliz 2025, fogos de artifício no terminal com Golang

terminal golang grupo-estudos-golang

Como criar uma animação de fogos de artifício no terminal usando Go.

Reescrevendo o velho TSR usando Bash

bash terminal c retro

Exemplo de TSR (Terminate and Stay Resident) do MS-DOS em C reescrito em Bash para sistemas UNIX-like.

Subindo uma API via proxy reverso com Caddyserver e Go

golang caddy supervisor

Como subir uma API escrita em Go utilizando proxy reverso com o servidor HTTP Caddy.

Benchmark Retornos Nomeados vs Explicitos em Go

golang desenvolvimento benchmark

Comparação de desempenho entre retornos nomeados e retornos explícitos em Go. Descubra como medir a velocidade com benchmarks e interpretar os resultados.

Escrevendo Sobre Programação de Computadores

opinião programação

Escrevendo sobre programação de forma clara e envolvente.

Personalizando o Neovim: Ordenação e Remoção de Linhas Duplicadas com Lua

complexidade cognitiva neovim lua

Funções em Lua para ordenar linhas e remover duplicatas. Melhore a organização do seu código e aumente a eficiência no seu fluxo de trabalho de programação.

Criando um Sistema de Bookmarks no Neovim com Lua

complexidade cognitiva neovim lua produtividade

Aprenda a criar um sistema de bookmarks no Neovim usando Lua para agilizar seu fluxo de trabalho. Este artigo mostra como personalizar o editor para marcar e acessar rapidamente pontos importantes no código.

Script para rápida navegação em diretórios usando fzf

complexidade cognitiva fzf bash terminal

Agilizar a navegação entre diretórios com um script Bash e fzf para criar um menu interativo dos últimos locais acessados

Diminuindo a Complexidade Cognitiva na Programação

complexidade cognitiva neovim rg fzf bat bash terminal

Diminuir a complexidade cognitiva é importante para agilizar o trabalho e torná-lo mais agradável.

Reestruturando artigos para clareza e concisão

escrita artigos

Aprimorando meus artigos para torná-los mais claros e diretos, para uma leitura mais rápida

Virus no laboratório

virus

Como um vírus de macro VBA causou lentidão em um laboratório farmacêutico e a importância de analisar problemas antes de investir em soluções complexas.

Programação como Arte

javascript desenvolvimento arte generativa

Explorando a arte generativa com programação simples em JavaScript, unindo criatividade e código para enriquecer a experiência do site.

Arte generativa em JavaScript para as laterais do site

javascript desenvolvimento arte generativa

Adicionei pequeno código para criar arte generativa em JavaScript e aproveitar as laterais do site que não são usadas quando a tela é muito larga.

Computação pós-apocalíptica

desenvolvimento

Neste texto proponho um exercício interessante, como preservar um pouco do conhecimento da humanidade depois de uma catástrofe de proporções apocalípticas.

Criando o próprio sistema para contar o tempo

desenvolvimento

Criando minha propria versão do Swatch Internet Time, mas com um toque pessoal

Deploy de aplicação usando curl

desenvolvimento curl bash deploy linux

Como distribuir binários de aplicativos para Linux usando curl e scripts bash.

ps - hierarquia de processos

desenvolvimento zsh

Descobrindo a hierarquia de processos.

Estudando Assembly

assembly desenvolvimento

Porque estudar assembly é importante e como isso vai te tornar um programador melhor.

Arquivos ocultos no UNIX

retro unix desenvolvimento grupo-estudos-golang

Um caso clássico de como um bug se tornou uma feature.

Por que meu site é tão feio?

retro

Os motivos pelos quais o meu site é considerado feio por muitos, mas lindo para mim.

Programação assistida por IA

golang grupo-estudos-golang

Considerações e dicas sobre uso de IA auxiliando no desenvolvimento de software.

Escrevendo software para durar

golang grupo-estudos-golang

Algumas dicas que considero importantes para escrever software resiliente, que dure por anos e seja fácil de manter.

Go e erros de arredondamento

golang grupo-estudos-golang

Erros quando se converte de ponto flutuante para inteiro são comuns e não é um problema apenas do Go. Este é um exemplo clássico desse problema.

Go e a promessa de retrocompatibilidade

golang grupo-estudos-golang

A maioria das linguagens cresce adicionando novos recursos, novas funcionalidades. Go foca em otimizar a base existente com um grande foco na retrocompatibilidade.

CPBR14, Wardriving

Wardriving CPBR14

Breve introdução, equipamentos e softwares

GPS do celular na Raspberry Pi

unix wardriving

Como compartilhar o GPS do celular com a Raspberry Pi

tr - Utilitário para substituição de caracteres

terminal unix

O utilitário tr copia os caracteres vindos de stdin e emite uma saída filtrada conforme os parâmetros fornecidos.

fmt - Utilitário simples para formatação de textos

terminal unix

fmt é um formatador de texto simples e rápido. Seu objetivo é formatar arquivos texto ou strings via stdin.

Cliente e servidor socket em Golang, um exemplo de chat.

golang desenvolvimento

Um exemplo de chat (socket TCP/IP) escrito em Go com goroutines e canais, dessa vez com um pouco de otimização para velocidade.

Assembly no macOS M1/ARM64.

assembly desenvolvimento

Iniciando o estudo de assembly com processadores M1/ARM64.

Cliente e servidor socket em Golang com tratamento de sinais.

golang desenvolvimento

Adiciona tratamento de sinais no exemplo de cliente/servidor socket TCP.

Cliente e servidor socket em Golang com ping e pong.

golang desenvolvimento

Um exemplo de cliente e servidor socket escrito em Go com conexões persistentes agora enviando e recebendo mensagens de ping/pong para garantir que a conexão esta ativa.

Cliente e servidor socket em Golang com goroutines e canais.

golang desenvolvimento

Um exemplo de cliente e servidor socket escrito em Go com conexões persistentes agora usando goroutines e canais.

Cliente e servidor socket em Golang.

golang desenvolvimento

Um exemplo de cliente e servidor socket escrito em Go com conexões persistentes.

Torne seu Linux mais inseguro e ligeiramente mais rápido

linux

Configurando o grub para mitigations=off.

Area de transferência remota

desenvolvimento

Como copiar para a área de transferência local sem ambiente gráfico no servidor.

Acelerando o Site

desenvolvimento

Inserindo imagens e CSS diretamente no HTML para evitar que o navegador faça mais de uma requisição e assim acelerando a página web.

Como estender o git

git desenvolvimento

Como estender o comando git adicionando seus próprios parâmetros e novas funcionalidades.

Headless VirtualBox

desenvolvimento

Como usar VirtualBox no modo Headless configurando máquinas virtuais pela linha de comando.

Como diminuir o tamanho do container usando multi-stage builds.

golang desenvolvimento

Como Golang cria executáveis estaticos/monolíticos não precisamos de nada instalado no container, nem mesmo a libc, ou seja podemos usar imagem scratch e criar um container realmente pequeno.

auto-cpufreq ajustando dinamicamente a frequência da CPU

linux

Otimizando o consumo de energia elétrica ajustando a frequência da CPU no Linux

Primeiros passos na configuração de um novo servidor.

terminal desenvolvimento

Um guia prático com as etapas de configuração que costumo executar quando subo um novo servidor, seja numa máquina na nuvem, uma VM local ou mesmo uma Raspberry Pi.

O manual do UNIX

terminal

Dicas do utilitário man e mandoc

Dica do comando find

terminal

Como excluir arquivos quando usar o comando find

Configurando timeout para requisições HTTP em Golang

golang desenvolvimento

Como configurar o tempo padrão para timeout para seu servidor HTTP em Go.

Controle de sessão em Golang como Gorilla sessions

golang desenvolvimento

Como criar um controle de sessão em Golang usando Gorilla sessions e mantendo dados em cookies de forma segura usando criptografia AES-256

Descobrindo ip com Golang

golang desenvolvimento

Como descobrir o ip tanto do cliente como do servidor usando Golang

Diferenças entre slice e array em Go

golang desenvolvimento

Diferenças entre slice e array em Golang e algumas dicas de utilização.

Os problemas programando em Golang

golang desenvolvimento grupo-estudos-golang opinião

Nenhuma linguagem de programação é perfeita e nesse texto tento descrever tudo que pode dar errado usando Golang.

Shadow de variáveis em Golang

golang grupo-estudos-golang

Como encontrar shadow de variáveis em golang usando go vet com um modulo experimental

Primeiros passos com assembly

assembly boot

Montando ambiente de desenvolvimento para programação assembly e primeiro exemplo.

Web Scraping com Golang

golang desenvolvimento

Exemplo de Web Scraping com Golang e Chrome DevTools Protocol

Um pequeno emulador da CPU 8086

retro assembly desenvolvimento

Uma brincadeira de criar um emulador parcial que interpreta algumas intruções do 8086

Home Office, Minha Experiencia Trabalhando em Casa

desenvolvimento

Algumas coisas da minha experiência trabalhando remoto e dicas para quem quer começar

O BASIC ainda esta vivo e chutando

basic desenvolvimento

Por incrível que pareça ainda existem versões comerciais do BASIC sendo desenvolvidas

Erro difícil com interfaces e switch case em Go

golang desenvolvimento

Um erro difícil de depurar usando interfaces e switch case em Golang

Cobertura de testes unitários em Go

golang terminal

Script para visualizar a cobertura de testes unitários em HTML

Quine implementado em Golang

golang

Como criar um programa que imprime a si mesmo em Go.

PostgreSQL via SSL com Golang

golang

Configurando PostgreSQL para conectar usando SSL via Go

Unix Domain Socket com Golang

golang

Como usar Unix Domain Socket para comunicação eficiente e segura entre processos, com exemplos práticos em Go e netcat.

Um JSON lint em Golang

golang

Usamos o retorno de erro do json.Unmarshal para gerar uma mensagem de erro mais útil e completa com direito a indicar o erro com uma setinha e tudo.

Trafegando dados entre middleware http usando contexto em Golang

golang

Como trocar informações entre os middlewares http do seu sistema usando contexto.

Como fazer HTTP middleware em Golang tanto usando Negroni como usando a biblioteca padrão

golang

Exempos de como criar middleware para seus serviços HTTP mostrando exemplos com a bilioteca padrão e também com a dobradinha Negroni e Gorilla mux.

Usando goto e label em Go

golang desenvolvimento grupo-estudos-golang

Como usar goto e labels em Go com exemplos práticos. Como aplicar break e continue de forma segura e clara, seguindo boas práticas de programação.

Um sistema de mensageria extremamente rápido com NATS e Golang

golang

NATS é um sistema de mensagens escrito em Go, muito rápido e fácil de usar. Usado para conectar sistemas, seja IoT seja aplicações mobile ou onde precisar de grande desempenho na troca de mensagens.

Protocol Buffers

golang desenvolvimento RPC

Primeiros passos usando Protocol Buffers com golang

ssh - Usando chaves de acesso

unix networking

Como configurar chaves ssh para acessar seus servidores de forma mais segura

JSON, criando seu próprio Marshal e Unmarshal

golang desenvolvimento

Tutorial de como ensinar o parser JSON para trabalhar com dados em novos formatos

Interface como um contrato

golang desenvolvimento

Dicas de como usar interface em Golang como um contrato para structs

Usando VPN no macOS

networking

Dicas de como usar VPN no macOS

Interface vazia

golang desenvolvimento

Dicas de como usar interface vazia e seus riscos

JSON Dicas e Truques

golang desenvolvimento

Tutorial mostrando várias formas de manipular JSON usando funções recursivas e structs

MS-DOS, APM com C e Assembly

desenvolvimento retro assembly c

Pequenos utulitários para reiniciar e fazer shutdown do MS-DOS via APM usando Borland Turbo C e Assembly

Acessando Dropbox com Golang

golang desenvolvimento

Tutorial de como acessar o Dropbox e fazer upload, download e listar os arquivos

Editar linhas de comando no terminal

terminal

Tutorial rápido de como usar um editor de texto para editar linhas de comando no terminal

Compilação Estática Com Golang

golang desenvolvimento

Como compilar sem nenhuma dependencia externa seu código Go

Acessando a porta serial

desenvolvimento serial arduino golang

Algumas formas que uso para acessar a porta serial

Um conto de terror para programadores

retro microservices desenvolvimento

Uma história real de servidores morrendo, informação sendo destruída para programadores de coração forte

Golang brincando com bits

golang desenvolvimento

Como manipular bits usando Golang

Dicas de Golang defer

golang desenvolvimento grupo-estudos-golang

Defer ajuda muito mas também oferece algum risco veja algumas dicas de uso

Golang previnindo data race

golang desenvolvimento

Como detectar e prevenir data race com Golang

Golang carregando arquivos Sped Fiscal 95% mais rápido

golang desenvolvimento

Apenas uma manha de domingo e fizemos o sistema ganhar 95% de performace na leitura dos arquivos do Sped Fiscal

Assembly 16Bits no macOS com NASM e DOSBox

retro assembly desenvolvimento

Bricando com asm do 8086 no macOS via DOSBox e compialndo com NASM

Golang percorrendo a árvore de diretórios

golang desenvolvimento

Com a ajuda do pacote path/filepath é fácil percorrer diretórios e arquivos.

go usando time e canais

golang desenvolvimento

Como usar o pacote time e canais para executar uma tarefa a cada X tempo, e aproveitamos para brincar um pouco com o terminal.

Golang plugins

golang desenvolvimento grupo-estudos-golang

Plugins em Go: vantagens para carregamento dinâmico de módulos, limitações como suporte restrito a plataformas, dependência do CGO e impossibilidade de descarregar. Inclui exemplos práticos de criação e uso.

GitHub a rede social do programador

desenvolvimento

Melhor para seu currículo que LinkedIn, muito mais focado que Twitter ou Facebook e uma chance de mostrar o seu código para o mundo e não apenas falar sobre ele :D

Assembly, assembler e linguagem de maquina

assembly desenvolvimento

Exmplicando a diferença entre assembly, assembler e linguagem de maquina

Zero Configuration Networking

iot networking

Uma forma simples de encontrar dispositívos na rede local.

Tratando sinais com Go

golang desenvolvimento grupo-estudos-golang

Como verificar se o usuário pressionou crtl+c, se mudou o tamanho da janela, ou se enviou um sinal de usuário.

Usando diff e patch

desenvolvimento

Criando e aplicando patchs com os comandos diff e patch

HTTPS com Golang no Linux

golang desenvolvimento

Um tutorial bem simples de como usar certificados HTTPS com Go

Redirect para HTTPS e proxy reverso

golang desenvolvimento networking

Servindo tudo com HTTPS e usando um proxy reverso acessar os serviços.

String aleatória segura em Golang usando crypto/rand

golang desenvolvimento grupo-estudos-golang

Como gerar strings aleatórias seguras e de alta qualidade usando Go.