-
Métodos Ensemble em Ciência da Computação usadas em inteligência artificial
Estes métodos são a combinação de diferentes modelos para se obter um único resultado. Eles são construídos de maneira similar aos algoritmos mais simples, como regressão linear ou árvore de
-
Árvores em Ciência da Computação usadas em inteligência artificial
Árvores de decisão ou árvores de classificação são definidas informalmente como modelos de aprendizado supervisionado que representam regras de decisão baseadas nos valores dos atributos. São muito usadas em inteligência
-
Epigramas interessantes do primeiro laureado com o prêmio Turing da ACM!
Oi caro(a) leitor(a), começo com a definição de epigrama. Depois com os comentários do Alan J. Perlis sobre os fenômenos que cercam os computadores e produzem uma base surpreendentemente rica
-
Cinco enxadristas famosos que aparecem em várias listas de melhores de todos os tempos!
A lista dos cinco enxadristas está ordenada pela data de nascimento, seguida por uma curta biografia do gênio enxadrista Começo com um desafio! No menu jogos deste site, tem um
-
Authorized Digital Sellers (ads.txt)
O ads.txt é uma iniciativa do IAB onde um arquivo do tipo texto (TXT) que significa Authorized Digital Sellers é criado e hospedado em seu domínio. Ele deve ficar hospedado na raíz
-
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.
-
Repositórios para aprender AI, Machine Learning, Deep Learning, NLP e Reinforcement Learning
Repositórios para aprender AI/ML — Herez Repositórios para aprender AI/ML
Autor: Herez
Este post reúne descrições práticas de repositórios que eu, Herez, utilizei para estudar inteligência artificial e aprendizado de máquina. Para cada repositório há uma explicação objetiva e um exemplo real de como o utilizei para aprender, experimentar ou aplicar conceitos.
microsoft/ML-For-Beginners
O que é: Coleção estruturada de lições e notebooks para iniciantes em machine learning, cobrindo conceitos fundamentais com exercícios práticos.
Como eu usei: Segui os notebooks de regressão e classificação para revisar conceitos básicos; adaptei um notebook de classificação para um dataset próprio e comparei resultados com diferentes pré-processamentos.Avik-Jain/100-Days-Of-ML-Code
O que é: Plano de estudos com 100 exercícios e projetos curtos para praticar ML diariamente.
Como eu usei: Adotei a rotina de 30 dias focada em feature engineering e deploy simples; documentei cada experimento em um repositório pessoal para acompanhar evolução.TheAlgorithms/Python
O que é: Implementações em Python de algoritmos clássicos (estruturas de dados, algoritmos de busca, otimização), úteis para entender fundamentos computacionais.
Como eu usei: Estudei implementações de algoritmos de otimização e reescrevi versões simplificadas para entender como gradientes e buscas locais funcionam em problemas de ML.mml-book/mml-book.github.io
O que é: Material didático sobre machine learning moderno, com explicações teóricas e exemplos práticos.
Como eu usei: Consultei capítulos sobre regularização e generalização para ajustar hiperparâmetros em modelos de redes neurais que eu treinava em pequenos datasets.GokuMohandas/Made-With-ML
O que é: Coleção de projetos e tutoriais práticos que mostram aplicações reais de ML, desde protótipos até deploy.
Como eu usei: Inspirei-me em um projeto de classificação de texto para montar um pipeline de pré-processamento e deploy em container para um protótipo pessoal.labmlai/annotated_deep_learning_papers
O que é: Resumos e anotações de artigos importantes de deep learning, com explicações acessíveis e implementações de referência.
Como eu usei: Li a anotação de um paper sobre atenção e implementei uma versão reduzida para testar impacto em uma tarefa de classificação de sequência.karpathy/nn-zero-to-hero
O que é: Material didático que explica redes neurais do zero, com implementações simples para aprendizado conceitual.
Como eu usei: Reproduzi os exercícios de backpropagation em NumPy para fixar a matemática por trás do treinamento de redes.HandsOnLLM/Hands-On-Large-Language-Models
O que é: Recursos práticos para trabalhar com grandes modelos de linguagem (LLMs), incluindo exemplos de prompt engineering e pipelines de inferência.
Como eu usei: Testei exemplos de fine-tuning leve e pipelines de inferência para entender trade-offs entre latência e qualidade em LLMs menores.dair-ai/Prompt-Engineering-Guide
O que é: Guia com técnicas e padrões para criar prompts eficazes ao trabalhar com modelos de linguagem.
Como eu usei: Apliquei padrões de prompt para melhorar respostas em tarefas de extração de informação e comparei variações para medir robustez.microsoft/ai-agents-for-beginners
O que é: Recursos introdutórios sobre agentes de IA, cobrindo conceitos de arquitetura, planejamento e integração com modelos.
Como eu usei: Experimentei um exemplo de agente simples para automatizar uma tarefa de coleta de dados e aprimorei a lógica de decisão com regras básicas.NirDiamant/GenAI_Agents
O que é: Repositório com exemplos e padrões para construir agentes baseados em modelos generativos.
Como eu usei: Combinei um padrão de agente com um fluxo de prompts para criar um assistente que gera resumos técnicos a partir de textos longos.NirDiamant/RAG_Techniques
O que é: Técnicas e exemplos de Retrieval-Augmented Generation (RAG) para integrar recuperação de documentos com geração de texto.
Como eu usei: Modelei um pipeline RAG para responder perguntas sobre um conjunto de documentos internos, avaliando precisão e latência.academic/awesome-datascience
O que é: Curadoria de recursos, cursos e ferramentas para ciência de dados e aprendizado de máquina.
Como eu usei: Usei a curadoria para montar um plano de estudos personalizado, priorizando tópicos de estatística aplicada e visualização de dados.keon/awesome-nlp
O que é: Lista de recursos e bibliotecas para processamento de linguagem natural (NLP).
Como eu usei: Explorei bibliotecas recomendadas para tokenização e embeddings e comparei resultados em tarefas de classificação de sentimento.aikorea/awesome-rl
O que é: Coleção de recursos sobre reinforcement learning (RL), incluindo tutoriais, implementações e papers.
Como eu usei: Segui um tutorial de RL para treinar um agente simples em um ambiente simulado e analisei curvas de recompensa para ajustar hiperparâmetros.FareedKhan-dev/all-rl-algorithms
O que é: Implementações de diversos algoritmos de RL para estudo e comparação.
Como eu usei: Comparei implementações de DQN e PPO em um problema reduzido para entender diferenças de estabilidade e convergência.
Como eu recomendo usar esses repositórios
- Monte um plano de estudos prático: combine um repositório teórico (papers/anotações) com um repositório de projetos práticos.
- Reproduza experimentos mínimos: implemente versões reduzidas dos exemplos antes de tentar reproduzir o pipeline completo.
- Documente tudo: mantenha um diário de experimentos com comandos, parâmetros e resultados para acelerar aprendizado.
- Integre aprendizado com projetos reais: aplique conceitos em pequenos projetos que resolvam problemas concretos.

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.
