quinta-feira, 8 de outubro de 2026

Reconhecimento Facial do Gov.br Não Carrega a Moldura e Fica Só Filmando (erro em 2026)

Reconhecimento Facial do Gov.br Não Carrega a Moldura e Fica Só Filmando? Descubra o Real Motivo!

Se você tentou fazer o reconhecimento facial no aplicativo do Gov.br e se deparou com uma tela onde a câmera abre filmando o seu rosto, mas a moldura circular/elipse para centralizar seu rosto não carrega, não aparece a contagem regressiva e não pede para aproximar ou afastar o rosto —, você não está sozinho.

Passei exatamente por essa situação recentemente com o meu pai e com a minha mãe. Ambos precisaram formatar seus celulares e, ao tentar reconfigurar o acesso ao Gov.br, o aplicativo simplesmente se comportou desse jeito.

Absurdamente:

  1. Nenhum tutorial da internet explica esse problema, nem IAs, nem mesmo no site oficial do GovBr!
  2. O atendimento presencial da Casa do Cidadão também não serviu para coisa alguma, sugerindo procedimentos inúteis, como um reset desnecessário de senha.

E já adianto que nada disso funciou também: "limpar o cache do aplicativo", "reiniciar o celular" ou "atualizar o App na Play Store".


O Verdadeiro Motivo

A causa raiz desse problema é uma incompatibilidade do GovBr com celulares mais antigos:

O problema é que o GovBr utiliza para o reconhecimento facial, algum módulo que não funciona em celulares/android antes de 2023 (meus pais tem de 2021). O que deveria ser explicitamente informado no aplicativo, mas não é. Como meus pais só fizeram o reconhecimento facil quando instalaram o GovBr (provalmente no inicio de 2023) ele funcionou normalmente, mas agora em 2026 apresentou o problema.

O grande erro do Governo e minha principal frustração é não existir aviso dessa limitação claramente no aplicativo. Ao invés de exibir uma mensagem como "Dispositivo incompatível", a câmera simplesmente fica aberta infinitamente sem carregar a moldura!


Qual é a Solução?

Saiba que você será obrigado a adquirir um celular mais novo para usar o GovBr! Meus pais compraram o Samsung Galaxy A06 e o reconhecimento facial funcionou.

Espero que este relato economize o seu tempo e evite que você perca horas tentando soluções inúteis na internet ou enfrentando filas em postos de atendimento!

Se este artigo foi útil para você ou se você passou pela mesma situação, deixe seu comentário abaixo para ajudar mais pessoas!

sexta-feira, 3 de julho de 2026

Solucao de Falha Critica no Fail2ban: Corrigindo o Erro NameError poll2 e Estouro de File Descriptors no Python

Este artigo documenta a analise tecnica e o passo a passo para a resolucao de uma falha critica no Fail2ban em ambientes Linux. Se o seu serviço de protecao parou de responder, falhou ao iniciar ou entrou em loop infinito de erros de socket, acompanhe a sequencia exata dos eventos e como aplicar a mitigacao definitiva.


1. Cronologia da Falha e Diagnostico dos Sintomas

O problema nao ocorre de forma isolada; ele se manifesta em uma cadeia progressiva de erros que culminam na queda total do sistema de mitigacao de ataques.

Fase 1: O Sintoma Inicial — Too many open files (Errno 24)
Sob alto volume de acessos ou durante um escaneamento massivo de bots, o Fail2ban comeca a registrar falhas de conexao no arquivo de log. O primeiro sinal de alerta e o esgotamento dos descritores de arquivo do processo:

[Errno 24] Too many open files

O serviço tenta continuar rodando, mas a contagem de erros de escuta (err_count['listen']) comeca a subir rapidamente.


Fase 2: O Serviço para de Iniciar e Responder
Apos o estouro de descritores, o daemon do Fail2ban trava. Ao tentar reiniciar o serviço ou checar a comunicacao com o comando fail2ban-client ping, o cliente para de receber resposta do servidor (sem o retorno esperado de Server replied: pong). O socket IPC em /var/run/fail2ban/fail2ban.sock deixa de responder ou e corrompido.


Fase 3: A Causa Raiz no Backend — filedescriptor out of range in select()
Ao depurar o arquivo do servidor assincrono do Fail2ban (/usr/lib/python3/dist-packages/fail2ban/server/asyncserver.py), identifica-se que o motor interno do sistema esta utilizando a chamada legada select.select() do Python.

No sistema operacional Linux, a syscall select() possui um limite rigoroso e hardcoded de 1024 arquivos abertos (FD_SETSIZE). Quando o servidor web abre o descritor de arquivo de numero 1025 ou superior, o Python dispara a seguinte excecao fatal:

ValueError: filedescriptor out of range in select()

Isso faz com que o loop de eventos do Fail2ban quebre imediatamente.


Fase 4: A Falha na Re-definicao — NameError: name 'poll2' is not defined
Para contornar a limitação de 1024 arquivos do select(), a solucao teorica e alterar o motor de eventos para usar a syscall poll() do kernel (que suporta dezenas de milhares de descritores). Porem, ao tentar ajustar o codigo para utilizar a funcao poll2() do modulo asyncore, o interpretador Python dispara um novo erro:

File "/usr/lib/python3/dist-packages/fail2ban/server/asyncserver.py", line 165, in loop
poll2(timeout)
NameError: name 'poll2' is not defined. Did you mean: 'poll'?

Esse erro ocorre porque a funcao poll2 nao esta presente ou nao foi exportada no namespace padrao da biblioteca asyncore na versao do Python em execucao no sistema.


Hipotese de Adulteracao / Vetor de Ataque: Existe uma forte suspeita de que essa sequencia de alteracoes ou a inoperancia da funcao poll2 possa ter sido induzida ou explorada deliberadamente por atacantes. Ao forcar o Fail2ban a retroceder para o algoritmo select() (limitado a 1024 FDs), um atacante consegue derrubar o serviço gerando um volume controlado de conexoes concorrentes. Com o Fail2ban inativo e sem conseguir reiniciar, o servidor fica vulneravel para ataques de forca bruta e scanners automatizados sem qualquer bloqueio no firewall.


2. Solucao Passo a Passo e Mitigacao Definitiva

Para corrigir a cadeia de erros, reestabelecer o serviço e migrar a filtragem para a syscall poll() nativa, siga as etapas abaixo.

Passo 1: Corrigir o arquivo asyncserver.py
Abra o arquivo de codigo do Fail2ban:

sudo nano /usr/lib/python3/dist-packages/fail2ban/server/asyncserver.py

Localize o bloco da funcao loop por volta da linha 160. Substitua a chamada com falha para garantir a importacao da funcao poll2 diretamente do asyncore antes do laço principal:

# Codigo corrigido no asyncserver.py:

from asyncore import poll2
while active():
    try:
        poll2(timeout)
        if err_count['listen']:
            err_count['listen'] -= 1
    except Exception as e:
        if not active():
            break
        err_count['listen'] += 1

Nota tecnica: Caso o seu ambiente Python nao exporte o simbolo poll2 dentro de asyncore, utilize a chamada nativa do motor assincrono especificando o parametro poll: asyncore.loop(timeout=timeout, use_poll=True, count=1).


Passo 2: Definir a acao do Firewall para IPTables
Se o seu ambiente utiliza o IPTables tradicional e voce precisa garantir a criacao das cadeias f2b- sem conflitos com o nftables, edite o arquivo /etc/fail2ban/jail.local:

[DEFAULT]
banaction = iptables-multiport
banaction_allports = iptables-allports
backend = auto


Passo 3: Limpeza de Sockets Presos e Reinicializacao
Como o Fail2ban falhou ao iniciar anteriormente, limpe os arquivos de socket residuais em memoria antes de subir o daemon:

sudo systemctl stop fail2ban
sudo rm -rf /var/run/fail2ban/*
sudo systemctl start fail2ban


3. Procedimento de Validacao

Apos aplicar a correcao, execute o protocolo de verificacao para atestar a estabilidade do serviço:

1. Teste de resposta do Daemon:
Execute sudo fail2ban-client ping. O resultado deve ser estritamente Server replied: pong.

2. Verificacao das cadeias no IPTables:
Execute sudo iptables -L -n -v e confirme que as tabelas de bloqueio (ex: f2b-sshd, f2b-apache-400) foram criadas e estao prontas para receber regras de banimento.

3. Inspeçao do arquivo de Log:
Acompanhe os logs com tail -f /var/log/fail2ban.log. O serviço devera registrar o processamento normal dos arquivos de log sem apresentar excecoes de descritores de arquivos ou erros no loop do Python.


Conclusao: A substituicao do algoritmo de selecao de sockets do select() para o poll() no motor assincrono do Python elimina o limite de 1024 arquivos abertos, estabilizando o Fail2ban e neutralizando o vetor de ataque por esgotamento de descritores.

domingo, 29 de setembro de 2024

Como transformar um torno em tacômetro e contador de voltas com Arduino e Sensor Hall

Quem trabalha com máquinas operatrizes ou oficinas em geral sabe como é útil ter uma leitura precisa da velocidade de rotação do equipamento. Recentemente, desenvolvi um projeto para instalar um sensor Hall e um display de 7 segmentos no meu torno mecânico usando um Arduino Nano.

A grande vantagem dessa implementação é que o circuito ganhou dupla função:
1. Modo F001 (Tacômetro / RPM): Mede as rotações por minuto em tempo real.
2. Modo F002 (Contador de Voltas): Conta o número total de voltas acumuladas, ideal para tarefas de precisão como enrolamento de fios, bobinas e transformadores.

Como Funciona o Circuito

O sensor Hall fica posicionado no eito/árvore do torno para detectar a passagem de um pequeno ímã. Cada passagem aciona uma interrupção digital no pino D2 do Arduino Nano, garantindo que nenhum pulso seja perdido, mesmo em altas velocidades.

O painel conta com um display de 7 segmentos de 4 dígitos (gerenciado pela biblioteca SevSeg) e dois botões de controle:
- Botão SET (pino A4): Alterna entre as funções F001 (RPM) e F002 (Contador de Voltas), exibindo a indicação da função escolhida no display por 2 segundos.
- Botão RESET (pino A5): Zera a contagem de voltas quando o sistema está no modo F002.

Aplicações Práticas

- Uso em Usinagem: Acompanhar a rotação exata ajuda a selecionar a velocidade de corte adequada para diferentes materiais e ferramentas.
- Uso como Rebobinadora: O modo contador facilita imensamente o enrolamento de bobinas, pequenos transformadores e motores de forma precisa sem precisar contar manualmente.

Código Completo para Arduino Nano

(NOVO) Código disponível para download em: https://github.com/aobatroz/rpmcounter-4digit-display

Abaixo está o código-fonte desenvolvido. Para compilá-lo, certifique-se de ter a biblioteca SevSeg instalada na sua IDE do Arduino:

#include <SevSeg.h>
SevSeg sevseg;

#define MAX_WAIT_FREQ 2000

const byte ledPin = 13;
const byte interruptPin = 2; // contador de pulso (Sensor Hall)
const byte setButtonPin = A4; // botao set
const byte resetButtonPin = A5; // botao reset
const byte digitPins[] = {A0, 3, 4, 5}; // pinos dos digitos do display
const byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; // pinos dos segmentos

unsigned long interruptCount = 0; // Contador de interrupcoes
unsigned long rpmCount = 0;
double rps = 0;
unsigned long lastPulse = millis();
unsigned long interval = 0;
unsigned long refreshTime = millis();
unsigned int mode = 0;
unsigned int functionMode = 1; // 1 para F001 (RPM), 2 para F002 (Contador)
bool forceDisplayValue = false;

void interruptFunction()
{
    interval = millis() - lastPulse;
    lastPulse = millis();
    interruptCount++; // Incrementa o contador de interrupcoes
}

void displayFunctionMode()
{
    char buffer[5];
    snprintf(buffer, sizeof(buffer), "F00%d", functionMode); // Formata a string F00X
    sevseg.setChars(buffer); // Exibe no display
    for (unsigned long start = millis(); millis() - start < 2000;) { // Exibe por 2 segundos
        sevseg.refreshDisplay();
    }
    sevseg.blank(); // Apaga o display
    sevseg.refreshDisplay();
}

void setup()
{
    Serial.begin(9600);

    const byte numDigits = 4;
    bool resistorsOnSegments = 0;

    pinMode(interruptPin, INPUT_PULLUP);
    pinMode(setButtonPin, INPUT_PULLUP);
    pinMode(resetButtonPin, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(interruptPin), interruptFunction, RISING);

    sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
    sevseg.setBrightness(10);

    displayFunctionMode();
}

void F001()
{
    // Calculando rps (rotacoes por segundo)
    rps = 0;
    if (interval > 0 && (millis() - lastPulse) < MAX_WAIT_FREQ) // ignora leituras muito lentas
    {
        rps = 1000.0 / interval;
    }

    if ((millis() > refreshTime))
    {
        Serial.println(rps);
        sevseg.setNumber(rps * 60); // Converte RPS para RPM
        refreshTime = millis() + 200;
    }
}

void F002()
{
    static unsigned long lastInterruptCount = -1;

    if (digitalRead(resetButtonPin) == LOW)
    {
        interruptCount = 0; // Reseta o contador
    }

    if ((lastInterruptCount != interruptCount) || forceDisplayValue)
    {
        lastInterruptCount = interruptCount;
        Serial.println(interruptCount);
        sevseg.setNumber(interruptCount);        
        forceDisplayValue = false;
    }
}

void loop()
{
    // Alterna o modo ao pressionar o botao SET
    if (digitalRead(setButtonPin) == LOW)
    {
        functionMode = (functionMode % 2) + 1; // Alterna entre 1 e 2
        displayFunctionMode(); // Exibe o modo por 2 segundos
        forceDisplayValue = true;
        delay(200); // Debounce
    }

    if (functionMode == 1)
    {
        F001();
    }
    else if (functionMode == 2)
    {
        F002();
    }

    sevseg.refreshDisplay();
}

Se você gostou da ideia, pretende aplicar em alguma máquina aí da sua oficina ou tem sugestões de melhorias no código, deixe seu comentário!

segunda-feira, 27 de dezembro de 2021

Como consertar painel LED usando fita LED e SEM NECESSIDADE DE FONTE!

Quem trocou todas as lâmpadas e luminárias de casa por painéis LED em busca de economia e sustentabilidade provavelmente já passou pela raiva de ver um painel parar de funcionar do nada. Na grande maioria das vezes, o problema não está nos LEDs, mas sim no módulo da fonte (driver) de baixa qualidade que vem junto com o produto.

Depois que o meu painel queimou a fonte pela segunda vez — e o valor de uma fonte nova já equivalia ao preço de um painel inteiro —, decidi dar uma solução definitiva: consertar o painel LED usando fita LED e ligando tudo DIRETO na energia (120V), eliminando a fonte para sempre!

Confira o tutorial completo e o teste de iluminação no link abaixo:

Entendendo o Conceito: Ligação em Série sem Fonte

A fita LED comercial (sugiro a de 24V) é dividida em blocos em paralelo. Se cortarmos 5 pedaços contendo esses blocos e os ligarmos em série (unindo o positivo de um ao negativo do outro), o resultado é um conjunto que opera na tensão combinada próxima a 120V da rede elétrica residencial.

Porém, ao ligar a corrente alternada (AC) direto nessa fita, os LEDs piscam 60 vezes por segundo e parecem apagados aos nossos olhos. É aí que entra o segredo do projeto!

A Ponte Retificadora (Full Bridge Rectifier)

Para resolver o oscilar da corrente e manter os LEDs acesos de forma contínua, utilizamos uma ponte retificadora de onda completa. Apesar do nome técnico, é um dos circuitos mais simples e baratos da eletrônica:
1. Você precisa apenas de 4 diodos (que custam centavos ou podem ser retirados de qualquer sucata eletrônica).
2. Solda-se os 4 diodos em formato de losango, prestando atenção no sentido das faixas indicadoras.
3. A corrente alternada entra de um lado e sai transformada em corrente contínua do outro, suficiente para alimentar os LEDs perfeitamente.

Passo a Passo da Montagem

1. Medição e Corte: Meça o perímetro interno da moldura do painel (no meu caso, um painel quadrado de 25 cm precisou de 1 metro total de fita).
2. Divisão dos Pedaços: Divida esse comprimento em 5 pedaços iguais (20 cm cada) para fazer a ligação em série.
3. Isolamento e Fixação: Remova as pontas de cobre desnecessárias de cada lado para evitar curtos, cole as fitas na moldura original e faça a soldagem dos pedaços em série usando fio esmaltado fino.
4. Conexão Final: Solde a ponte retificadora compacta na entrada dos LEDs e conecte ao plugue da tomada.

Resultado Final

O painel ficou extremamente forte, iluminando muito mais do que com a fita original e, o melhor de tudo: sem nunca mais precisar gastar dinheiro trocando fontes queimadas!

Se você gostou da ideia e quer economizar recuperando suas luminárias encostadas, deixe seu comentário no blog ou no canal!

domingo, 16 de setembro de 2018

Como consertar o botão Ligar do micro-ondas gastando quase nada

Quem nunca passou pelo perrengue de ter um eletrodoméstico parado por causa de um detalhe bobo? O micro-ondas Panasonic Piccolo aqui de casa parou de funcionar porque o botão "Ligar" não dava mais contato de jeito nenhum.

Por ser a tecla mais usada da membrana (o contato bolha do painel), ela acabou desgastando com o tempo. Ao pesquisar a peça de reposição na internet, o valor do painel com o frete passava de R$ 70,00, e nas lojas locais não havia o modelo em estoque. A solução? Criar uma modificação prática e estilosa para resolver o problema: bypass do botão ligar no circuito de teclado! Sim, a análise de TI também serve para salvar o seu almoço!

Confira o vídeo com o passo a passo da modificação no link abaixo:

Aviso Importante de Segurança

Atenção: Aparelhos de micro-ondas trabalham com altíssima voltagem e capacitores que armazenam cargas perigosas mesmo desligados da tomada. Nos testes do vídeo, o relé do magnetron foi desligado para garantir total segurança contra radiação e choques. Se você não tem experiência com eletrônica, tome extremo cuidado ou consulte um profissional.

O Diagnóstico e a Solução

Ao remover a membrana do painel, temos acesso à placa de circuito com as trilhas de contato. Mapeando o circuito, identifiquei quais pinos do flat eram responsáveis por fechar o contato do botão "Ligar".

Para substituir a tecla defeituosa:
1. Soldei dois fios diretamente nos pontos de contato da placa correspondentes à função "Ligar".
2. Adaptei um botão físico do tipo botoeira na outra extremidade dos fios.
3. Para dar um acabamento personalizado e divertido, utilizei uma botoeira verde de fliperama (arcade) que eu tinha sobrando e fiz o encaixe no plástico do painel.

Isolando o Botão Defeituoso

Um detalhe crucial nesse tipo de reparo: quando o botão do painel bolha estraga, ele costuma ficar em curto (como se estivesse permanentemente pressionado), travando as outras teclas do micro-ondas.

Para resolver isso, abri a camada da membrana e usei uma gilete para interromper as trilhas do botão defeituoso. Isso isolou o contato em curto e permitiu que a nova botoeira de fliperama assumisse o comando perfeitamente.

Resultado Final

Embora o isolamento das trilhas tenha desativado duas teclas secundárias do teclado numérico (os números 7 e 0), a usabilidade não foi afetada no dia a dia. Basta utilizar a função "Mais 1 Minuto" ou os outros números e acionar o grande botão de fliperama para iniciar o aquecimento!

Se você tem um micro-ondas encostado pelo mesmo motivo ou curte projetos de reparo e modificação em casa, deixe seu comentário no blog ou no vídeo!

domingo, 26 de agosto de 2018

Dica simples para consertar secador de cabelo e eletrodomésticos em geral

Sabiam que problemas elétricos também afetam a TI? Então nada melhor do que saber consertar algo que possa servir para uma gama enorme de nichos diferentes! Sabe aquele eletrodoméstico que para de funcionar do nada e fica esquecido no armário por meses? Foi exatamente o que aconteceu por aqui com este secador de cabelo. Ele ficou parado por mais de um ano e meio porque, ao colocar na tomada e ligar os botões, não dava nenhum sinal de vida.

A gente já estava quase jogando o aparelho fora, mas resolvi abrir para dar uma olhada e tentar consertar. A surpresa? O problema era muito mais simples do que parecia!

Confira o vídeo com o passo a passo completo do conserto no link abaixo:

O diagnóstico do problema

Ao desmontar o secador, verifiquei que o motor e as escovas estavam em perfeito estado. Testei a continuidade dos interruptores e botões, e todos estavam funcionando normalmente.

Aí veio uma dica de ouro do meu pai para qualquer manutenção elétrica ou eletrônica:
Antes de mexer em componentes complexos, verifique sempre o cabo de energia primeiro!

Muitas vezes a gente quebra a cabeça achando que o motor queimou ou que a placa estragou, quando na verdade o defeito está no próprio fio elétrico.

Como foi feito o teste (Bypass)

Para testar se o problema era realmente o cabo sem precisar dessoldar tudo de início, fiz um teste em paralelo (bypass):

1. Peguei um cabo auxiliar de energia que eu sabia que estava funcionando.
2. Liguei esse cabo nos pontos de entrada do circuito do secador.
3. Com o circuito isolado e os botões ligados, conectei o cabo de teste na tomada.
4. O motor funcionou perfeitamente e na hora!

A causa: Apenas 8 centímetros de fio partido!

Procurando onde estava a interrupção, descobri que o fio estava quebrado por dentro logo nos primeiros centímetros perto do plugue — a região que mais sofre dobras e torções no uso diário.

O secador ficou guardado e inútil por mais de um ano por causa de apenas 8 centímetros de cabo quebrado! Bastou cortar o pedaço danificado, reaproveitar o plugue original, fazer uma nova solda reforçada e remontar a carcaça.

A lição para seus próximos consertos

Sempre comece o diagnóstico do mais simples para o mais complexo. Verifique cabo de força, fusíveis, conectores e tomadas antes de condenar o motor ou a eletrônica do seu equipamento. Na maioria das vezes, o reparo é rápido, barato e evita o descarte desnecessário.

Se você gostou da dica ou conseguiu salvar algum eletrodoméstico aí na sua casa ou mesmo seu computador ou servidor da sua empres, deixe seu comentário no blog ou no vídeo!

sábado, 23 de dezembro de 2017

Por que a Internet discada usava o telefone?

Por que quando falamos de Internet temos uma conexão muito forte com os telefones? Na Internet discada, por exemplo, só era possível acessar a grande rede mundial discando para um número de telefone da operadora!

Para responder a essa e outras dúvidas de forma simples e objetiva, estou inaugurando uma nova série no canal chamada Bit Amarelo. A proposta é desmistificar conceitos de informática e entender o passado da tecnologia para compreender melhor como chegamos até aqui.

Se você não viveu essa época ou quer relembrar aquele barulho clássico da conexão discada, assista ao vídeo completo no link abaixo:

O grande desafio dos anos 90

Imagine que estamos no início da década de 1990. A Internet no Brasil ainda não existia para o grande público, e a sua missão fosse conectar todos os computadores do país entre si e com o restante do mundo. Como fazer isso do zero?

Passar cabos por todas as cidades, estados e oceanos exigiria um investimento astronômico. Naquela época, a Internet ainda era uma grande incógnita e nenhuma empresa tinha certeza se o investimento traria retorno.

A solução que já estava pronta: As Linhas Telefônicas

Para resolver esse problema sem gastar fortunas do zero, os criadores da rede utilizaram uma infraestrutura que já cruzava o planeta desde o século XIX: a rede telefônica.

Como as linhas de telefone já chegavam às casas e escritórios em quase todo o mundo, bastou utilizar essa malha existente para transportar os dados entre os computadores. O cabo do telefone era conectado ao modem e, através de um ruído audível de frequências sonoras, a comunicação se estabelecia.

E hoje em dia?

Atualmente temos conexões de fibra ótica, cabos dedicados e redes sem fio de alta velocidade. Isso acontece porque a demanda por Internet cresceu a ponto de justificar investimentos bilionários em infraestrutura própria.

No entanto, sem a infraestrutura prévia dos telefones no início de tudo, a popularização da rede mundial de computadores teria demorado muito mais anos para acontecer.

Participe e Deixe sua Dúvida!

O que você achou dessa explicação? Ficou com alguma dúvida sobre seu computador, celular ou história da tecnologia?
Deixe sua pergunta nos comentários do blog ou no vídeo do YouTube!

quarta-feira, 2 de novembro de 2016

Campainha inteligente com Arduino Nano e módulo DFPlayer Mini / MP3-TF-16

Esse projeto visa criar uma campainha que dá play em sons de forma sequencial e também de forma individual, dependendo do número de cliques no botão da campainha.

Lógica de Funcionamento:

  • 1 clique curto (tempo menor que LONG_PRESS_WINDOW_MS): toca o próximo som;
  • 2 cliques curtos: toca o primeiro som da lista;
  • 3 cliques curtos: toca o segundo som da lista;
  • N cliques curtos: toca o (N-1)º som da lista;
  • 1 clique longo (tempo maior que LONG_PRESS_WINDOW_MS): equivale a 5 cliques curtos.

PINOUT (Arduino Nano → MP3-TF-16P)

BUTTON_PIN   = 2;   // Botão da campainha (PULL_UP)
MP3_NEXT_PIN = 5;   // Conectado ao IO2 do MP3-TF-16P
MP3_BUSY_PIN = 10;  // Conectado ao pino BUSY do MP3-TF-16P
MP3_RX_PIN   = A1;  // Conectado ao pino RX do MP3-TF-16P
MP3_TX_PIN   = A0;  // Conectado ao pino TX do MP3-TF-16P
Dica de Montagem: Se você utilizar a pinagem acima, um Arduino Nano e o módulo MP3-TF-16P, é possível soldar o MP3 diretamente acima do Arduino Nano, sem precisar de fios nem protoboard (talvez precise cortar alguns pinos não usados do MP3 para que não deem contato com o Arduino).
(NOVO) Código disponível para download em: https://github.com/aobatroz/campainha-arduino-mp3

sábado, 30 de abril de 2016

Map of Ufes: E se Game of Thrones se passasse no Campus Goiabeiras da UFES? A história por trás da animação dos 60 anos da universidade!

Quem nunca olhou para a maquete mecânica e os mapas complexos da abertura de Game of Thrones e pensou: "Caramba, e se isso fosse feito na minha cidade ou na minha faculdade?" Como frequentador há anos do Campus de Goiabeiras, e após começar a assistir o seriado Game of Thrones essa ideia não saía da minha cabeça. Em comemoração aos 60 anos da UFES, decidi transformar essa inspiração em realidade: recriar a icônica abertura da série da HBO utilizando o mapa 3D do Campus Goiabeiras! Se você ainda não viu o vídeo (ou quer rever), dá um play abaixo:



Como Tudo Começou: A Origem do Projeto
Desde criança sempre fui fascinado por cinema. Quando minha mãe me contou que os filmes eram feitos por pessoas reais — alguém escrevia, atuava e dirigia —, aquilo despertou uma fagulha enorme em mim. Na época, minha única ferramenta era papel e caneta, mas como eu sempre fui péssimo para desenho tradicional, ficava frustrado! Anos mais tarde, com a informática, descobri o mundo da animação 3D. A grande mágica da computação gráfica para mim foi simples: uma vez que você constrói o modelo 3D, ele está pronto! Não precisa redesenhar frame por frame. Assistindo a Game of Thrones, comecei a analisar a vinheta de abertura com um olhar mais técnico: "Poxa, esse efeito de engrenagens e prédios subindo parece ser algo viável de reproduzir no 3D... Só preciso de um tema bacana!" E qual tema seria melhor do que a UFES, um lugar onde vivenciei tantas histórias e onde convivo todos os dias?

Os Bastidores e os Desafios do Blender (2014 - 2016)
A obra não teve fins comerciais ou acadêmicos diretos — foi um verdadeiro projeto de coração e hobby, feito nas minhas horas vagas, noites e finais de semana. Por conta disso, o processo levou dois anos (entre 2014 e 2016). Utilizei o Blender, um software livre e gratuito de modelagem e animação 3D. Quando comecei o projeto, eu não dominava a ferramenta! Fui aprendendo o software na prática, assistindo a dezenas de tutoriais no YouTube.

Os Prédios Mais Difíceis e os Favoritos
A Biblioteca Central: É a queridinha da maioria das pessoas! A combinação da música subindo no clímax com o efeito surpresa da mecânica (que se expande de uma forma totalmente inesperada) trouxe uma carga emocional muito forte. Além disso, fiz questão de incluir detalhes marcantes, como as correntes externas que escorrem a água da chuva! O CCHN (Centro de Ciências Humanas e Naturais): Disparado o mais trabalhoso e cansativo! O complexo tem dezenas de blocos de prédios. Eu levava cerca de 3 dias de modelagem para cada prédio... e na animação final isso rendia menos de 1 segundo na tela! Mapeamento e Texturas: Para ser o mais fiel possível, usei o Google Maps (com regra de três para calcular as proporções de escala) e o Google Street View. Para os locais onde a câmera do Google não entrava, aproveitava meu horário de almoço na universidade para bater fotos de referência das fachadas e texturas.

Ficha Técnica e Recursos de Renderização
Para quem curte a parte técnica de computação gráfica e computação de alta performance, aqui estão os detalhes da produção do projeto:

Criado por: Andre Oshiro Barcelos 
Inspirado por: Game of Thrones Opening (HBO) 
Trilha Sonora: Ramin Djawadi 
Ano de produção: 2014 – 2016
Software de Animação: Blender (versões 2.65 a 2.72)
Processador de Render: Intel(R) Core(TM) i7-2600 CPU @3.40GHz (8 cores)
Placa de Vídeo para Render: NVIDIA GeForce GTX 760
Tempo Total de Renderização: ~ 200 horas de máquina trabalhando!

Na Mídia e Repercussão
A recepção do público capixaba e da comunidade acadêmica ultrapassou todas as minhas expectativas! Ver ex-alunos e alunos atuais emocionados com a lembrança dos blocos, praças e vivências da UFES foi a maior recompensa por essas 200 horas de render. Tive a honra de conceder algumas entrevistas super legais para falar sobre o projeto, o uso do Blender e o processo criativo: TV UFES: Assista à matéria especial produzida pela própria TV da Universidade http://youtu.be/5xTvml_8MGQ. Ponto Cult: Entrevista falando sobre o carinho pelo cinema, bastidores da animação e a reação do público https://www.youtube.com/watch?v=kFMDNHP_aCI. Assunto da Vez (Episódio 03): Bate-papo super descontraído com o Rodrigo Yare detalhando o processo de modelagem, os perrengues do CCHN e o medo do vídeo ficar tosco https://www.youtube.com/watch?v=K7U9q8V1FHA. Imagem TV: Participação no programa falando mais sobre a repercussão regional https://www.youtube.com/watch?v=E_K4r4-12vE&t=15m56s.

E você, o que achou?
Gostou do vídeo? Reconheceu o seu centro ou o prédio onde assistia às aulas? Se você também estuda Blender, tem dúvidas sobre como fiz algum efeito técnico específico na animação ou quer dicas de computação gráfica, deixe seu comentário aqui no blog ou no canal do YouTube! Pretendo gravar tutoriais respondendo às dúvidas de vocês! Não se esqueça de compartilhar este post com os amigos da UFES e os fãs de Game of Thrones!

sábado, 13 de setembro de 2014

Oscurart Chain 2


I've fixed some bugs (and added others :) ) and improved the functionality of the Blender AddOn Oscurart Chain (http://blenderartists.org/forum/showthread.php?226385-Addon-Oscurart-Chain-Maker)

Changes:
- Now, it has two modes of rig: rig by curve (made by Oscurart) and rig by clothphy (made by Aobatroz)

- The chain links now have shared mesh, it reduce the file size and is easier to modify the link shape.

- The clothphy creates a cloth along the chain (the chain links are constrained to the cloth). When you start the animation, the cloth moves and then moves the chain. I've choosen this way because is faster to render using one cloth physics than many rigid body physics (in each chain link).

I hope you enjoy.

Download:  aob.producoes.org/blenderaddons/oscurart_chain_maker2.py


Video how to: 







sexta-feira, 18 de outubro de 2013

Servidor lento mas cpu memoria disco e swap estão sem problemas



*Esse post se refere ao sistema operacional Centos. Porém, sua ideia pode ser aplicado a todo SO que faz esse mesmo tipo de limitação.


==Sintomas== 

- Você possui um servidor rodando um serviço muito importante para sua empresa (ex.: página web da empresa).
- Você percebe que o servidor está lento, tanto para abrir as páginas, quanto para conectar remotamente via ssh entre outras tarefas. E essa lentidão aparece e some com alguma frequência.
- Você verifica o uso de CPU, memória RAM e disco disponível, uso de SWAP, quantidade de processos web rodando, etc... e percebe que está tudo funcionando na mais perfeita ordem.


==Causa== 

Muito provavelmente seu servidor está precisando de um incremento no limite de arquivos abertos por usuário/processo (como a maioria dos processos executam com usuário expecífico podemos dizer por processo).
O Centos limita a quantidade de arquivos que um usuário pode abrir por questões de segurança, pois, um script malicioso pode abrir arquivos indefinidamente.
Por padrão é pertido a abertura de 1024 arquivos. Caso esse limite tenha sido atingido e um processo necessite abrir um arquivo novo, essa ação ficará em espera até que seja liberada uma "vaga" de abertura de arquivos.
Essa espera é o que resulta na lentidão "sem explicação".


==Solução== 

Aumente o limite de arquivos abertos por usuário:
- Utilize o comando abaixo para ver a situação atual de seu servidor (veja o campo "open files").
 ulimit -a 

- Edite o arquivo "/etc/security/limits.conf" e altere as seguintes linhas:
 .
 .
 .
 #* soft core 0
 #* hard rss 10000
 .
 .
 .

 - Altere para:
 .
 .
 .
 * soft nofile 16384
 * hard nofile 16384
 .
 .
 .
Onde 16384 será o novo limite de arquivos aberto por usuário. Escolha o número de acordo com sua necessidade e recursos de seu servidor. Quanto maior o número, mais memória será consumida.

- As alterações serão efetivadas a medida que os serviços forem reiniciados, sugiro reiniciar a máquina inteira pois achar os serviços que estão em espera não será muito fácil.
 reboot

- Execute novamente o comando "ulimit -a" e veja as novas configurações.

sábado, 8 de dezembro de 2012

Mágica do carro giratório

Uma tentativa de mágica feito por um cara muito amigo meu ainda muito inexperiente. Ele está evoluindo, daqui uns dias talvez ele consiga um carro de verdade.

http://youtu.be/iVJjjQksF_M

terça-feira, 4 de dezembro de 2012

The Unlucky Theatre (O Teatro Azarado)




Essa animação é resultado de um trabalho de inglês. O objetivo era apresentar uma estória retirada do livro Penguin Readers "Stories of Detection and Mystery". A estória escolhida foi "The Unlucky Theatre" de Elliot O'Donnel.

Era para ser uma animação, mas por causa do tempo nós não conseguimos. Nós tinhamos 3 semanas para fazer o trabalho, mas efetivamente somente 2 para fazer a animação. Período de 14 de novembro a 4 de dezembro de 2012.

Gostaria de agradecer Ana Paula Spalenza pela proporcionar a oportunidade de fazer o trabalho.
E também agradecer a VMComix que forneceu o "Cartoon Character Pack 1" em "blendswap.com", os personagens foram baseados em cima desse pack.

Portuguese subtitles: http://youtu.be/zmyP-pMuo9Y


English subtitles: http://youtu.be/wL4iZwqWRso

The Unlucky Theatre - English




This animation is a result from an english work. Its objective was to present a story from the book Penguin Readers "Stories of Detection and Mystery". The choosen story was "The Unlucky Theatre" by Elliot O'Donnel.

It should be an animation, but because the time we couldn't do. We had about 3 weeks to do the work, but actually only 2 to make the animation.

I would like to thanks Ana Paula Spalenza for the opportunity to do the work.
And thanks to VMComix for provide the "Cartoon Character Pack 1" in "blendswap.com", the characters were based on this pack.

Sorry our english, we are learning yet!

English subtitles: http://youtu.be/wL4iZwqWRso


Portuguese subtitles: http://youtu.be/zmyP-pMuo9Y

segunda-feira, 5 de novembro de 2012

Super Mario World: Moon Edition



Para os fans de Super Mario World e outros jogos de super nintendo, existe um pessoal que está criando patches para alterar os roms do snes. Essas alterações adicionam novos elementos ao jogo e alteram a estrutura das fases já existentes.
 
Em outras palavras, quando você abria as 95 fases do SMW, ficava procurando algum outro lugar para uma nova fase (tipo a ilha em cima da Donut Plains) com um gostinho de quero mais! O Super Mario World Moon Edition é esse "a mais" que procurava.

==Para jogar, proceda da seguinte maneira: ==

- Tenha em seu computador o rom do Super Mario World: disponível em http://www.freeroms.com/roms/snes/super_mario_world.htm.

- Tenha em seu computador o emulador zsnes. Esse emulador aplica o patch automaticamente, basta deixar o rom (arquivo smc) com o mesmo nome do patch (arquivo ips) no mesmo diretório. Caso esteja usando Ubuntu, instale com "apt-get install zsnes". Para windows baixe em http://www.zsnes.com/.

 - Baixe o patch em http://www.mediafire.com/?arvpho7cqoim6et

- Lembre-se de deixar o arquivo de patch (ips) no mesmo diretório do rom (arquivo smc) e ambos com o mesmo nome.

- Inicie o zsnes e jogue normalmente.

SUPER MARIO WORLD MOON EDITION v0.51
Agradecimentos a DanJB (danbryce1@gmail.com)
http://www.youtube.com/playlist?list=PL47FAE79E30B15F40

sexta-feira, 29 de julho de 2011

How to enable https / ssl on tomcat certificate and private key already existing





I have the following scenary:

I bought 1 certificate + 1 private key of ICP Brasil. I need to add them to tomcat to my sites inside it work with ssl (https). How to do?

== Creating keystore ==
To enable ssl in tomcat, before, must be created the "keystore", that is a encrypted file where tomcat stores all the certificates and keys in a secure way. To create it and manipulate it, use the command "keytool". When you import a certificate in a first time, the keystore is created.

#importing the ICPBrasil root certificates
# that certificates were downloaded from http://acraiz.icpbrasil.gov.br/ICP-Brasil.crt
keytool -import -trustcacerts -alias icpbrasil1 -file /etc/tomcat6/certificados/icpbrasil1.pem -keystore /usr/share/tomcat6/.keystore

keytool -import -trustcacerts -alias icpbrasil2 -file /etc/tomcat6/certificados/icpbrasil2.pem -keystore /usr/share/tomcat6/.keystore

keytool -import -trustcacerts -alias icpbrasil3 -file /etc/tomcat6/certificados/icpbrasil3.pem -keystore /usr/share/tomcat6/.keystore

== Converting certificate + private key to DER format ==
To add the certificate + private key that I bought, it's necessary to convert them to DER format.
openssl pkcs8 -topk8 -nocrypt -in key.pem -inform PEM -out key.der -outform DER
openssl pkcs8 -topk8 -nocrypt -in cert.pem -inform PEM -out cert.der -outform DER

== Adding the pair certificate + private key to keystore ==
Unfortunately tomcat has a "kludge" to add the private key to keystore: it's necessary to use a class called ImportKey to import the pair to tomcat. To download, compile and use the class, follow the following commands:

wget http://www.startux.de/images/phocadownload/importkey.java
mv importkey.java ImportKey.java #the file name must be equal the class name
javac ImportKey.java
java ImportKey key.der cert.der ANY_ALIAS /usr/share/tomcat6/.keystore KEYSTORE_PASSWORD #java ImportKey keyfile certfile [alias] [keystore] [keystore_passphrase]


== Configuring server.xml ==
In "/etc/tomcat6/server.xml" add the following lines to enable the usage of the keystore and https:
maxThreads="1024" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystorePass="KEYSTORE_PASSWORD" />

Restart tomcat
/etc/init.d/tomcat6 restart

SORRY MY ENGLISH, I'M LEARNING YET!

Como habilitar https ssl no tomcat com certificado e chave privada já existentes





Possuo o seguinte cenário:

Comprei 1 certificado + 1 chave privada da ICP Brasil. Preciso adiciona-los ao tomcat para que meus sites contidos nele trabalhem com ssl (https). Como fazer?

== Criando keystore ==
Para ativar o ssl no tomcat, antes deve ser criado o chamado "keystore", que é um arquivo criptografado onde o tomcat guarda todos os certificados de forma segura. Para cria-lo e manipula-lo o comando "keytool" deve ser usado. Ao importar um certificado pela primeira vez, o keystore é criado.

#importando certificados raiz da ICPBrasil
# esses certificados foram baixados de http://acraiz.icpbrasil.gov.br/ICP-Brasil.crt
keytool -import -trustcacerts -alias icpbrasil1 -file /etc/tomcat6/certificados/icpbrasil1.pem -keystore /usr/share/tomcat6/.keystore #quando executado pela primeira vez, cria o keystore

keytool -import -trustcacerts -alias icpbrasil2 -file /etc/tomcat6/certificados/icpbrasil2.pem -keystore /usr/share/tomcat6/.keystore #adicionando certificado em keystore ja existente

keytool -import -trustcacerts -alias icpbrasil3 -file /etc/tomcat6/certificados/icpbrasil3.pem -keystore /usr/share/tomcat6/.keystore #adicionando certificado em keystore ja existente

== Convertendo certificado + chave privada para formato DER ==
Para adicionar o certificado + chave privada que comprei, é necessário converte-los para o formato DER.
#convertendo certificado e chave do formato pem para der
openssl pkcs8 -topk8 -nocrypt -in chave.pem -inform PEM -out chave.der -outform DER #convertendo chave pem para der
openssl pkcs8 -topk8 -nocrypt -in certificado.pem -inform PEM -out certificado.der -outform DER # convertendo certificado pem para der

== Adicionando a dupla certificado + chave privada ao keystore ==
Infelizmente o tomcat possui uma "gambiarra" para adicionar a chave privada ao keystore: é necessário utilizar uma classe chamada ImportKey para importar a dupla para o tomcat. Para baixar, compilar e usar a classe, siga os comandos abaixo:

wget http://www.startux.de/images/phocadownload/importkey.java

mv importkey.java ImportKey.java #o nome do arquivo tem que ser igual ao nome da classe

javac ImportKey.java #compilando

java ImportKey chave.der certificado.der ALIAS_QUALQUER /usr/share/tomcat6/.keystore SENHA_DO_KEYSTORE #java ImportKey keyfile certfile [alias] [keystore] [keystore_passphrase]


== Configurando server.xml ==
Em "/etc/tomcat6/server.xml" adicione as seguintes linhas para habilitar o uso do keystore e do HTTPs:
maxThreads="1024" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystorePass="SENHA_DO_KEYSTORE" />

Reinicie o tomcat
/etc/init.d/tomcat6 restart

segunda-feira, 30 de maio de 2011

glassfish + como instalar no centos com yum





O glassfish é um software semelhante ao tomcat. Porém, a grande vantagem do glassfish é que todas as aplicações que rodam no tomcat, também rodam no glassfish. O contrário não é verdadeiro.

Para realizar a instalação no centos5, realize os passos abaixo:

==Pré-requisitos==
- Sistema Operacional centos5
- Java5


==Crie o repositório:==
Na sua máquina crie o arquivo/repositório "/etc/yum.repos.d/gfa-puma.repo" com o seguinte conteúdo:
[gfa-puma]
name=GFA PUMA
baseurl=http://linux.web.psi.ch/dist/scientific/51/gfa/puma/
enabled=1


==Atualize o yum:==
yum update --skip-broken


==Instale o glassfish:==
yum install glassfish-v3 --nogpgcheck


==Configure o glassfish para iniciar automaticamente:==
chkconfig glassfish-v3 on


==Inicie o serviço:==
/etc/init.d/glassfish-v3 start


==Acesse a área administrativa:==
Acesse em um browser
http://nome_do_servidor_glassfish:4848

glassfish + how to install in centos with yum





Glassfish is a similar software to tomcat. However, the biggest advantage of glassfish is the all applications that run in tomcat also run in glassfish. The opposite is not true.

To do the instalation in centos5, do the following steps:

==Prerequisites==
- centos5 OS
- Java5


==Create the repository:==
In your machine create the file/repository "/etc/yum.repos.d/gfa-puma.repo" with the following content:
[gfa-puma]
name=GFA PUMA
baseurl=http://linux.web.psi.ch/dist/scientific/51/gfa/puma/
enabled=1


==Update the yum:==
yum update --skip-broken


==Install the glassfish:==
yum install glassfish-v3 --nogpgcheck


==Configure the glassfish to auto start:==
chkconfig glassfish-v3 on


==Start the service:==
/etc/init.d/glassfish-v3 start


==Access the administrative area:==
Access by a browser
http://address_of_glassfish_server:4848


SORRY MY ENGLISH, I'M LEARNING YET!

segunda-feira, 28 de março de 2011

How to disable centos net-snmp log





The centos snmp client logs all the snmp requisitions that the system receives.
Many times this is incovenient because that dirty the /var/log/messages with these kind of logs:
Mar 28 12:44:57 server1 snmpd[16808]: Connection from UDP: [172.25.3.53]:47306
Mar 28 12:44:57 server1 snmpd[16808]: Received SNMP packet(s) from UDP: [172.25.3.53]:47306
Mar 28 12:44:57 server1 snmpd[16808]: Connection from UDP: [172.25.3.53]:47306

To disable it, edit the "/etc/sysconfig/snmpd.options" file and add the following line:
.
.
.
OPTIONS="-Lf /dev/null -p /var/run/snmpd.pid -a"
.
.
.

Note: this file can already have the line 'OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"', note that the -Lsd option must be removed because it is what enables the log.

Restart the snmpd service:
/etc/init.d/snmpd restart


SORRY MY ENGLISH, I'M LEARNING YET!