-
Bibliotecas Python para Processamento de imagem — Parte 3 da série de posts do Guia Herez
Processamento de Imagens em Python — Guia Herez (Parte 3) Processamento de Imagens em Python — Parte 3 da série Herez Visão geral: esta é a terceira publicação da série
-
Bibliotecas Python para Testes Automatizados — Parte 2 da série de posts do Guia Herez
Testes Automatizados em Python — Guia Herez (Parte 2) Testes Automatizados em Python — Parte 2 da série Herez Visão geral: esta é a segunda publicação da série Herez sobre
-
Bibliotecas Python para Aprendizado de Máquina — Parte 1 da série de posts do Guia Herez
Bibliotecas Python para Aprendizado de Máquina — Guia Herez Bibliotecas Python para Aprendizado de Máquina — Parte 1 da série de posts do Guia Herez Visão geral: existem muitas bibliotecas
-
Guia prático Herez sobre os diretórios essenciais do Linux com explicações e exemplos
Diretórios essenciais do Linux: /home /etc /var /usr /bin /sbin /boot /lib /dev /proc Diretórios essenciais do Linux Resumo: este post explica por que o Linux é um sistema operacional
-
A four-minute video introduction covering workflow, the Cynefin framework, and the RUT matrix
Developers often prefer a pull workflow because it allows them to select the tasks they want to work on. However, when a project is well-planned and clearly defined, the workflow
-
Guia prático para escolher entre Estatística, Aprendizado de Máquina e Rede Neural: objetivos, tipo de previsão, volume de dados e recomendações
Como escolher o melhor modelo? — Métodos e critérios práticos Como escolher o melhor modelo? — Um guia prático
Infográfico: guia rápido para escolher entre Estatística, Aprendizado de Máquina e Rede Neural. (Criação: Herez) Este post resume um infográfico prático que ajuda a decidir entre modelos estatísticos, técnicas de aprendizado de máquina e redes neurais, com base no objetivo da análise, no tipo de previsão e no volume de dados disponível.
1. Qual é o seu objetivo?
Antes de escolher uma técnica, defina se você precisa explicar e entender relações entre variáveis ou predizer resultados futuros. Interpretabilidade favorece abordagens estatísticas; predição costuma favorecer técnicas de machine learning.
2. Tipo de previsão
- Valor numérico contínuo — regressão (preço, temperatura).
- Categoria — classificação binária ou multiclasse (spam, churn).
- Vários rótulos — problemas multilabel ou visão computacional.
3. Volume de dados
Regra prática: com pouco a moderado (até ~10k linhas) prefira modelos estatísticos ou algoritmos clássicos de ML; com muito dado (acima de ~10k e especialmente multimídia) redes neurais podem trazer ganhos.
Resumo das abordagens
Estatística
Use quando o foco for interpretabilidade e entendimento causal. Exemplos: regressão linear, regressão logística, ANOVA. Indicado para conjuntos menores e quando é essencial explicar efeitos.
Aprendizado de Máquina
Boa escolha para previsões com dados estruturados (tabelas). Exemplos: Random Forest, XGBoost, SVM. Oferece bom desempenho com volumes moderados e é relativamente rápido de treinar e validar.
Rede Neural
Indicada para problemas complexos e grandes volumes de dados (imagens, áudio, texto). Exemplos: CNNs, RNNs, Transformers. Requer recursos computacionais e cuidado com overfitting.
Dicas práticas
- Comece simples e evolua: teste modelos estatísticos e clássicos antes de partir para redes profundas.
- Compare modelos com validação adequada e métricas relevantes ao problema.
- Priorize qualidade dos dados: limpeza, engenharia de features e balanceamento são frequentemente mais decisivos que a escolha do modelo.
- Documente experimentos e garanta reprodutibilidade (scripts, seeds, versões de dependências).
Quadro rápido
Tipo Objetivo Estatística Entender e explicar Aprendizado de Máquina Prever com dados estruturados (pouco a moderado) Rede Neural Prever problemas complexos com muito dado Quer saber mais?
Se você gostou deste guia e quer materiais complementares, exemplos de código ou o arquivo do infográfico em alta resolução, visite meu site e portfólio em Herez.com.br. Lá você encontra artigos, repositórios e recursos práticos para aplicar essas recomendações em projetos reais.
-
Enunciado completo do jogo Campo Minado (Minesweeper)
Jogo Campo Minado — Enunciado e Implementação | Herez Jogo Campo Minado
Enunciado completo do jogo Campo Minado (Minesweeper): regras, especificações das classes a implementar (Tabuleiro, JogadorHumano, JogadorAutomatico), exemplos de uso, dicas de implementação e critérios de avaliação e entrega. Leia também o jogo hospedado em herez.com.br/campo-minado/.
1. Introdução
O objetivo é implementar uma versão do jogo Campo Minado, incluindo a construção do tabuleiro e a implementação de jogadores (humano e automático). Antes de começar, recomenda-se jogar algumas partidas em uma implementação conhecida para compreender as regras.
😂 Piadas sobre o jogo Campo Minado
- 1. Por que o programador levou uma pá para o jogo? Porque ouviu que ia ter muitas minas para depurar. 😂
- 2. Jogador automático: “Escolho a posição (1,1)!” Tabuleiro: “Surpresa!” Jogador automático: “Era só um teste unitário.” 😂
- 3. Como o Campo Minado pede feedback? “Clique aqui para reportar um bug… e aqui para explodir ele.” 😂
- 4. Por que o primeiro clique nunca é uma mina? Porque o jogo também acredita em segundas chances. 😉
- 5. Dica de otimização: se o seu algoritmo sempre perde, troque o nome da função para
ganhar()— pelo menos o log vai ficar bonito. 😂 - 6. O que disse o tabuleiro ao jogador indeciso? “Relaxa, eu já marquei suas dúvidas com uma bandeira.” 😂
- 7. Por que o professor pediu o código do Tabuleiro? Para ver se o aluno sabia lidar com exceções… e com explosões. 😉
- 8. Se a IA do jogo perder no xadrez, ela culpa o tabuleiro; se perder no Campo Minado, culpa o RNG. 😂
💣 Piadas rápidas — Campo Minado & Programadores
- 1. Por que o programador adora o Campo Minado? Porque é o único lugar onde marcar uma bandeira é considerado progresso. 😂
- 2. Primeiro clique seguro: quando o jogo garante que a primeira jogada não explode, é o equivalente a um teste unitário que passa na primeira execução. 😂
- 3. O jogador automático disse que ia usar heurística — na prática, virou um gerador de números aleatórios com diploma. 😂
- 4. Como o programador chama uma posição suspeita? “TODO: verificar depois” — e marca com uma bandeira para lembrar. 😂
- 5. Dica de debugging: se o seu algoritmo sempre encontra minas, talvez o bug esteja no RNG — ou no karma. 😂
- 6. Professor: “Mostre o código.” Aluno: “Mostre o tabuleiro.” Ambos esperam que ninguém exploda durante a demonstração. 😂
- 7. Por que o tabuleiro é um bom colega de trabalho? Porque sempre revela o que precisa ser melhorado — às vezes com muita energia. ⚡️
- 8. Se a IA perde no xadrez, culpa a estratégia; se perde no Campo Minado, culpa o RNG — o clássico “não é bug, é aleatoriedade”. 😂
2. Regras do jogo
O jogo é jogado em um tabuleiro quadriculado (matriz
n × m) comkminas posicionadas aleatoriamente. O jogador revela posições até encontrar todas as minas ou até revelar uma posição com mina (perdendo).Comportamento ao revelar uma posição
- Se a posição contém uma mina → jogador perde; o tabuleiro revela todas as minas.
- Se a posição não contém mina → a posição é rotulada com o número de minas nas oito posições adjacentes.
- Se esse número for zero → todas as posições adjacentes são reveladas recursivamente (efeito “expansão”).
Observação: o jogo deve garantir que a primeira escolha do jogador nunca seja uma posição com mina.
3. Especificação do exercício
Implementar as seguintes classes em Java, respeitando as interfaces pedidas para permitir testes automáticos:
3.1 Classe
TabuleiroA classe
Tabuleirodeve oferecer os construtores e métodos abaixo.// Construtores: public Tabuleiro(int n, int m, int k); public Tabuleiro(int i); // Métodos de acesso: public int numLinhas(); public int numColunas(); public int numMinas(); // Métodos de usuário: public int numPosRestantes(); public int numPosReveladas(); public int numJogadas(); public boolean fim(); public boolean ganhou(); public boolean perdeu(); public void recomeca(); public void imprimeTabuleiro(); public int jogada(int i, int j);Comportamento do construtor:
Tabuleiro(int i)cria níveis predefinidos:- Fácil:
n=8, m=8, k=10(i = 1) - Médio:
n=16, m=16, k=40(i = 2) - Difícil:
n=16, m=30, k=99(i = 3)
Se os parâmetros do construtor com três inteiros não forem viáveis, criar um tabuleiro de nível fácil.
Retorno do método
jogada-1→ posição contém mina (jogador perdeu)0→ todas as posições foram reveladas (jogador venceu)1→ posição foi revelada com sucesso2→ posição já havia sido revelada antes-2→ parâmetros inválidos
Após fim da partida,
jogadadeve sempre devolver o mesmo valor (0 ou -1).3.1.1 Representação do tabuleiro
Sugestão de representação por matriz de inteiros com valores:
-2→ posição contém mina;-1→ posição não contém mina e não foi revelada;i(0 ≤ i ≤ 8) → posição revelada comiminas nas 8 vizinhas.
Dica: crie uma moldura (borda) e use matriz de tamanho
(n+2) × (m+2)para simplificar verificações de vizinhança.3.1.2 Exemplo de uso
> Tabuleiro tab = new Tabuleiro(1); > tab.jogada(1,7) 1 > tab.imprimeTabuleiro() 1 2 3 4 5 6 7 8 /-----------------\ 1 | + + 1 0 0 0 0 0 | 1 2 | + + 3 2 1 1 0 0 | 2 3 | + + + + + 1 0 0 | 3 4 | + + 3 2 1 1 0 0 | 4 5 | + + 1 0 0 0 1 1 | 5 6 | + + 3 2 1 1 2 + | 6 7 | + + + + + + + + | 7 8 | + + + + + + + + | 8 \-----------------/3.2 Classe
JogadorHumanoPermitir que uma pessoa jogue via teclado. Cada objeto deve oferecer o método
public void iniciaJogo(), que conduz a partida, pedindo nível (ou tabuleiro personalizado) e coordenadas a cada iteração.3.3 Classe
JogadorAutomaticoDeve fornecer o método
public boolean iniciaJogo(Tabuleiro t), que joga a partida no tabuleirote retornatruese vencer. Estratégia simples (aleatória) é aceitável; estratégias mais inteligentes são opcionais.4. Itens opcionais
- Marcar o tempo do jogo;
- Adicionar marcação de posições suspeitas (flags);
- Tornar o jogador automático mais inteligente;
- Criar interface gráfica.
5. Observações importantes
Sobre elaboração: o trabalho pode ser feito em dupla com programação pareada; siga as regras de cooperação descritas no enunciado.
Sobre entrega: escreva cada classe em arquivo separado e inclua o cabeçalho sugerido no início de cada arquivo.
6. Critérios de avaliação e entrega
- Exercícios copiados receberão nota ZERO.
- Exercícios atrasados não serão aceitos.
- Qualidade de comentários, indentação e clareza das saídas influenciam a nota.
- Prazo de entrega: 27/06/2026.
7. Cabeçalho sugerido para arquivos
/***********************************************************/ /** Exercício-Programa -- Campo Minado Arquivo: <nome do arquivo> <nome do(a) aluno(a)> <número do(a) aluno(a)> <data de entrega> /***********************************************************/Link relacionado: versão hospedada e recursos adicionais em https://herez.com.br/campo-minado/. -
Comandos Linux para gerenciar Memória e Processos
Comandos essenciais e exemplos práticos | Herez Comandos essenciais e exemplos práticos | Herez
Este post descreve comandos básicos de sistema e processos em Linux, detalha o que cada comando faz e traz exemplos profissionais de como Herez os utilizou em operações reais de administração e automação.
Comandos e explicações
date
O que faz: mostra a data e hora atuais do sistema.
$ dateExemplo profissional (Herez): ao investigar logs de um deploy automatizado, Herez usoudatepara confirmar o timestamp do servidor antes de correlacionar entradas de log entre máquinas em fusos horários diferentes.uptime
O que faz: informa há quanto tempo o sistema está ligado, carga média e usuários conectados.
$ uptimeExemplo profissional (Herez): após um pico de latência, Herez executouuptimepara verificar se a carga média estava elevada e correlacionou com um cron job que iniciou no mesmo período.whoami
O que faz: exibe o usuário atual no shell.
$ whoamiExemplo profissional (Herez): durante manutenção remota, Herez usouwhoamiem scripts de deploy para garantir que comandos críticos eram executados com o usuário correto (evitando executar como root por engano).free -h
O que faz: mostra uso de memória (RAM e swap) em formato legível (-h = human readable).
$ free -hExemplo profissional (Herez): ao diagnosticar um serviço que consumia memória, Herez rodoufree -hantes e depois de reiniciar o serviço para quantificar a redução de uso de memória e ajustar limites de container.df -h
O que faz: exibe espaço em disco usado e disponível em todas as partições, em formato legível.
$ df -hExemplo profissional (Herez): em um incidente de falta de espaço, Herez usoudf -hpara identificar partições quase cheias e priorizar limpeza de logs e arquivos temporários.du -sh pasta
O que faz: mostra o tamanho total de um diretório especificado de forma resumida e legível (-s = summary, -h = human readable).
$ du -sh /var/logExemplo profissional (Herez): para localizar diretórios que consumiam espaço, Herez executoudu -shem subpastas de /var e identificou logs antigos que foram compactados e arquivados.uname -a
O que faz: exibe informações detalhadas do kernel e do sistema operacional.
$ uname -aExemplo profissional (Herez): antes de compilar um módulo de kernel para otimização, Herez usouuname -apara confirmar versão do kernel e arquitetura da máquina.ps
O que faz: lista processos em execução no shell atual.
$ psExemplo profissional (Herez): em scripts de verificação, Herez usoupspara checar se um processo de manutenção havia sido iniciado corretamente antes de prosseguir com etapas dependentes.ps aux
O que faz: lista todos os processos do sistema com detalhes (usuário, CPU, memória, comando).
$ ps auxExemplo profissional (Herez): para identificar processos que consumiam CPU excessiva, Herez rodoups aux --sort=-%cpue isolou o PID do serviço a ser otimizado.top
O que faz: monitor em tempo real dos processos, uso de CPU, memória e carga do sistema.
$ topExemplo profissional (Herez): durante um pico de uso, Herez abriutoppara observar comportamento em tempo real e identificar processos que precisavam ser reiniciados ou limitados via cgroups.kill PID
O que faz: envia sinal SIGTERM ao processo identificado por
PID, solicitando encerramento gracioso.$ kill 12345Exemplo profissional (Herez): ao encerrar um worker que não respondia a requisições, Herez primeiro tentoukill PIDpara permitir limpeza de recursos antes de forçar encerramento.kill -9 PID
O que faz: envia sinal SIGKILL ao processo, forçando encerramento imediato sem chance de limpeza.
$ kill -9 12345Exemplo profissional (Herez): quando um processo travado não respondia a SIGTERM e comprometia a estabilidade do serviço, Herez usoukill -9como último recurso, documentando o evento e acionando reinício controlado.Boas práticas e recomendações
- Documente ações críticas: sempre registre PID, horário e motivo ao encerrar processos em produção.
- Prefira encerramento gracioso: tente
kill PIDantes dekill -9para evitar corrupção de dados. - Monitore continuamente: combine
topeps auxcom ferramentas de monitoramento para alertas proativos. - Automatize verificações: scripts que usam
uptime,free -hedf -hajudam a detectar degradação antes de incidentes.
Observação: estes comandos são poderosos; execute-os com cuidado em ambientes de produção e, quando possível, em janelas de manutenção ou ambientes de teste.
Biografia do autor: Doutor Herez possui Bacharelado em Análise de Sistemas, Mestrado em Engenharia de Computação/Software, Doutorado em Ciência da Computação e seu primeiro diploma acadêmico em Processamento de Dados em 1996. Início profissional na carreira em T.I. em 1993 com o primeiro certificado de programação de computadores em 1986 e início da participação em curso de programação em 1985. Microsoft Certified Professional desde 2000, entre outros títulos oficiais de diversos grandes fabricantes internacionais de software, também criou cursos e provas oficiais voltados à programação de computadores. Tem experiência na área de Ciência da Computação, com ênfase em Engenharia de Software, atuando principalmente nos seguintes temas: análise e desenvolvimento de sistemas, engenharia de software, métodos de pesquisa e métodos ágeis.
