Mostrando postagens com marcador Boas Práticas. Mostrar todas as postagens
Mostrando postagens com marcador Boas Práticas. Mostrar todas as postagens

sábado, 4 de julho de 2026

O Peso Invisível dos Nossos Dados

 


Você já parou para pensar quantos arquivos, fotos, e-mails e pastas duplicadas estão guardados em algum lugar que você nem lembra mais que existe? Provavelmente não. E essa é exatamente a raiz do problema.

A Ilusão do Espaço Infinito

Diferente do armário de casa, que enche, transborda e nos obriga a decidir o que fica e o que vai embora, o ambiente digital nos dá uma sensação confortável, porém enganosa, de espaço ilimitado. Pensamento como, "depois eu organizo", "não custa nada guardar", "um dia posso precisar", repetidas silenciosamente todos os dias por milhões de pessoas, são o combustível de um fenômeno que cresce sem que percebamos: o acúmulo digital.

O problema não é somente técnico, é comportamental. Quando o custo aparente de guardar algo é totalmente irrisório, porque não vemos o espaço físico cheio, não tropeçamos em caixas, não sentimos o peso físico, perdemos o hábito mais básico de qualquer boa gestão: a curadoria. Paramos de perguntar "isso ainda faz sentido?" porque nunca somos forçados a perguntar.

E aqui está o ponto que a maioria ignora: espaço digital nunca foi realmente infinito. Ele só está fisicamente distante de nós. Por trás de cada arquivo "esquecido" existe um servidor ligado, consumindo energia, sendo resfriado, ocupando espaço físico em um datacenter real, em algum lugar do mundo. A sensação de gratuidade é uma ilusão de distância, não uma ausência de custo.

Hoarding Digital: Quando o Acúmulo Vira Padrão

Assim como existe o transtorno de acumulação no mundo físico, pessoas que guardam objetos sem propósito, ao ponto de comprometer o próprio espaço de vida. Pode traçar um paralelo comportamental no ambiente digital, cada vez mais estudado: o hoarding digital. Esse conceito foi cunhado e sistematizado principalmente pelo psicólogo Nick Neave, da Northumbria University, em conjunto com colegas, num estudo publicado por volta de 2018 na revista Computers in Human Behavior).

Não estamos falando necessariamente de um transtorno clínico generalizado, mas de um padrão cultural de comportamento: e-mails nunca deletados, fotos duplicadas em três nuvens diferentes "por garantia", downloads que nunca são revisados, vídeos salvos de palestras/treinamento, versões antigas de documentos que nunca são arquivadas ou eliminadas, backups de backups de backups.

O problema central aqui não é psicológico, é de ineficiência de recursos em escala. Um arquivo esquecido, isoladamente, é irrelevante. Mas multiplicado por bilhões de usuários, por trilhões de arquivos, o quadro muda completamente. Estima-se que uma fração significativa de todo o dado armazenado no mundo corporativo é o chamado dark data — informação coletada, armazenada, replicada, mas nunca mais acessada ou utilizada. Isso significa energia consumida, hardware operando, resfriamento ativo, tudo isso sustentando dados que não geram nenhum valor. É desperdício de recurso em sua forma mais pura, só que invisível aos nossos olhos.

O Paralelo Que Falta: Cidadania Ambiental Também é Digital

Aqui está uma reflexão que vale a pena levar a sério: como sociedade, já internalizamos, ainda que de forma eficiente, a importância de cuidar de recursos naturais tangíveis. Fechamos a torneira enquanto escovamos os dentes. Separamos o lixo reciclável do orgânico. Nos preocupamos com o descarte correto de pilhas, eletrônicos e óleo de cozinha. Entendemos, coletivamente, que economia de água e descarte responsável são atos de cidadania, não apenas boas práticas.

Mas por que essa mesma consciência não se estende ao ambiente digital?

A resposta é simples: porque não vemos a torneira digital pingando. Não vemos o "lixo" digital se acumulando em algum aterro. A distância física entre nosso clique de "salvar" e o consumo real de energia em um datacenter quebra o elo de responsabilidade que naturalmente sentimos com recursos físicos.

Mas o princípio é exatamente o mesmo: cada byte armazenado desnecessariamente tem um custo ambiental real, ainda que distribuído e invisível. Se cuidamos da água que sai da torneira, deveríamos cuidar também dos dados que "saem" dos nossos dedos e vão parar em algum servidor, para sempre.

Uma Solução: 5S Também Funciona no Digital

A boa notícia é que já temos uma metodologia testada, simples e comprovada para resolver exatamente esse tipo de desorganização: o 5S, originado na indústria japonesa, mas perfeitamente aplicável ao nosso ambiente de trabalho digital, seja ele uma pasta pessoal na nuvem ou um servidor de arquivos corporativo compartilhado por centenas de pessoas.

1. Seiri (Utilização) » Comece separando o necessário do desnecessário. Revise pastas, downloads e e-mails periodicamente e pergunte: "isso ainda tem propósito?" Se a resposta for não, delete. Duplicatas, versões antigas sem valor histórico, downloads temporários — tudo isso é candidato natural ao descarte.

2. Seiton (Ordenação) » Estabeleça uma estrutura lógica de pastas, com nomenclatura padronizada e hierarquia clara. Isso vale tanto para arquivos pessoais quanto, principalmente, para ambientes corporativos compartilhados, onde a desorganização de um afeta a produtividade de todos.

3. Seiso (Limpeza) » Assim como a limpeza física revela vazamentos e desgastes, a "limpeza digital" periódica revela arquivos corrompidos, duplicados ou obsoletos que passariam despercebidos. Reserve um tempo mensal ou trimestral só para isso.

4. Seiketsu (Padronização) » Crie padrões de nomenclatura, prazos de retenção e políticas de arquivamento. Em ambientes corporativos, isso costuma existir na forma de políticas de governança de dados — mas no ambiente pessoal, podemos criar nossas próprias regras simples e consistentes.

5. Shitsuke (Disciplina) » Talvez o mais difícil: transformar isso em hábito. Não adianta uma "grande faxina digital" uma vez por ano se, no dia seguinte, voltamos ao mesmo padrão de acúmulo automático. A disciplina de revisar, deletar e organizar precisa virar rotina, assim como jogar o lixo no lugar certo virou rotina para muitos de nós.

Uma Nova Forma de Cidadania

Talvez o maior avanço que podemos ter, individual e coletivamente, seja simplesmente entender que organização digital não é sobre produtividade, mas sim sobre responsabilidade ambiental. Cada arquivo que deletamos conscientemente, cada duplicata que eliminamos, cada e-mail que não precisamos mais guardar, é um pequeno gesto de economia de recursos, tão real quanto fechar a torneira ou separar o lixo reciclável.

A diferença é que, dessa vez, o gesto acontece na tela, entretanto o impacto acontece no mundo real.

 

sexta-feira, 2 de fevereiro de 2024

Arquitetura Eficiente: Lições do Caos no Resultado do ENEM 2023

No dia 13 de novembro de 2023, o Instituto Nacional de Pesquisas Educacionais Anísio Teixeira (INEP) anunciou a data oficial de divulgação do resultado do ENEM 2023. De acordo com os dados do INEP, mais de 2 milhões e 700 mil estudantes aguardavam ansiosos pelos resultados, considerando-se automaticamente parte do público interessado nessa informação crucial.

No entanto, no dia 16 de janeiro de 2024, poucas horas antes do tão aguardado momento da liberação dos resultados, uma situação “inesperada” ocorreu. Milhares de estudantes, ávidos por avaliar seus esforços no exame, começaram a acessar o site, resultando em uma sobrecarga que desencadeou reclamações e memes nas redes sociais. Às 9 horas, horário oficial, o portal do estudante (https://enem.inep.gov.br/participante/) tornou-se inacessível. Durante uma transmissão ao vivo realizada pelo órgão, foi anunciado que as notas estariam disponíveis às 10h30min do mesmo dia. O resultado? Horas intermináveis de instabilidade no portal, exigindo dezenas de tentativas individuais de cada estudante e gerando uma demanda muito além do necessário. 

Diante desse contexto, é essencial refletir sobre os caminhos alternativos, do ponto de vista arquitetural, que deveriam ser considerados, principalmente com foco na objetividade de atingir a melhor experiência para os alunos que estão "desesperados" pelos seus resultados, os quais podem moldar seus destinos de maneira permanente.

Envio dos Resultados por E-mail

Uma abordagem eficaz seria automatizar o envio dos resultados diretamente para os e-mails cadastrados durante o processo de inscrição. Este método aproveita a robusta infraestrutura de segurança já implementada no processo de credenciamento, garantindo a confidencialidade das informações. Além disso, ao reduzir a dependência do portal, a carga nos servidores seria significativamente aliviada, evitando gargalos de acesso massivo. Isso não apenas proporcionaria uma experiência mais fluida para os usuários ansiosos, mas também garantiria a entrega segura e pontual dos resultados, eliminando a incerteza e a frustração associadas às falhas técnicas.

Implementação de uma CDN Personalizada

Observando o comportamento atual do site, uma solução viável seria a implementação de uma CDN (Content Delivery Network) personalizada. Ao distribuir os dados estáticos, como imagens e folhas de estilo, por uma rede global de servidores, a latência seria reduzida, melhorando significativamente o desempenho do site. Isso não só aceleraria a entrega de conteúdo para os usuários, mas também aliviaria a carga nos servidores principais. Ao adotar uma abordagem mais distribuída, mitigaríamos efetivamente os efeitos negativos de picos de tráfego, proporcionando uma experiência mais estável e responsiva para os alunos ansiosos pelo resultado.

Armazenamento em Cachê no Modelo Chave-Valor

A proposta aqui é utilizar um sistema de armazenamento em cache, seguindo o modelo chave-valor, para otimizar a recuperação de resultados individuais. Dado que a grande maioria dos estudantes está interessada apenas em cinco números específicos (suas notas em cada bloco e a nota de redação), armazenar essas informações em um cache distribuído, onde a chave seria associada ao CPF do estudante e o valor seria o conjunto de resultados, permitiria consultas extremamente rápidas. Essa estratégia reduziria drasticamente a carga nos servidores de banco de dados, proporcionando uma resposta quase instantânea aos alunos que acessam o portal. Essa abordagem, além de eficiente em termos de desempenho, é altamente escalável e adaptável a períodos de pico de tráfego.

Alteração Temporária do Processo de Autenticação

Para contornar possíveis desafios relacionados ao envio automatizado de e-mails, especialmente em momentos de alta demanda, uma alternativa seria a implementação temporária de um formulário simplificado. Esse formulário permitiria aos estudantes inserir seu e-mail e CPF, gerando um registro em um serviço de mensageria. Um processo escalável seria encarregado de validar esses dados em relação aos registros cadastrados, efetuando o envio de e-mails com os resultados. Essa abordagem não apenas preserva a segurança, mas também introduz um mecanismo eficiente de fila, garantindo uma distribuição controlada e equitativa dos resultados. Essa mudança temporária no processo de autenticação minimiza a pressão sobre os servidores e oferece uma alternativa prática para lidar com volumes excepcionais de acesso.

Certamente, essas soluções podem parecer simplistas à primeira vista. Contudo, na área de TI, devemos lembrar que a simplicidade frequentemente supera arquiteturas complexas que, quando submetidas ao teste real, tendem a falhar de maneira significativa, prejudicando usuários, clientes, negócios e lucratividade.

Mais valioso do que uma arquitetura tecnológica supercomplexa e “update” são aquelas que proporcionam um valor tangível ao público final, indo além do simples acumulo de recursos tecnológicos. Essa abordagem não apenas garante a estabilidade em momentos cruciais, mas também constrói uma base sólida para o sucesso contínuo.


Marcelo Goberto de Azevedo 

Arquiteto Soluções 

//marcelogoberto.com.br


segunda-feira, 13 de setembro de 2021

Seu amigo Pato de Borracha

 

Normalmente quem trabalha com construção de alguma solução tecnológica, já se encontrou em uma situação em que a solução não parecia ser possível ou muito difícil. Entretanto, foi somente começar a falar sobre o problema para alguém, que a resolução magicamente apareceu. Ou seja, esse alguém foi uma inspiração? Não exatamente, ela simplesmente prestou o papel de ouvinte para a explanação do problema. Então, visto que esse ouvinte não teve um papel de interação ou contribuição, poderíamos meramente substituí-lo por qualquer coisa? A resposta é SIM.

O processo de explicar ou ensinar aumenta as ligações neurais em nosso cérebro, o que nos proporcionar mais acessos as informações retidas, o resultado disso é que durante a explanação passamos a fornecer mais perspectivas baseadas nas novas informações acessadas. Ou seja, faz seu cérebro alternar de faixa e funcionar de uma maneira diferente da mentalidade usual. 

O Pato de Borracha é basicamente uma técnica utilizar por muitos desenvolvedores para auxiliar esse processo de aumentar o acesso às informações, evitando a “visão de túnel", para explicar algo a outra pessoa, primeiro você precisa entendê-lo completamente. No livro O Programador Pragmático, de Andy Hunt e Dave Thomas, é descrita uma passagem em que o programador repassa linha a linha seu código explicando para o pato, e como resultado consegue identificar a falha e corrigi-la.

Pode parecer um processo ingênuo, entretanto existe um método para que o Pato de Borracha possa ativar, vamos a ele:

  1. Verbalize o contexto resumido do problema para o Pato de Borracha;

  2. Vá revisando e falando passo a passo todas as informações (código, diagramas, listas);

  3. Por fim, dê um alguns momentos ao Pato de Borracha, que a solução aparecerá em sua mente.

Claro que o último passo é só uma figura de linguagem, posso garantir que funcionará em 99% dos casos. O ato de dividir um problema em termos mais simples, passo a passo, costuma ser suficiente para tornar o problema mais solucionável. Vamos lá, fale com seu amigo Pato de Borracha.


Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br


sábado, 10 de julho de 2021

Pegada Ecológica (CO2) de um WebSite com foco em Green Coding

 

Até o dia 2 de janeiro de 2021 havia 1,826,089,359 sites disponíveis para acesso. Cada site contém propósitos distintos, entretanto o ponto comum entre eles é entregar algo de valor para o internauta. Essa entrega deve acontecer da melhor forma possível, nos formatos de experiência, entre eles existem vários fatores, como velocidade, usabilidade, facilidade, acessibilidade etc. Logo, se conseguimos um site que tenha um perfil de sustentabilidade também no foco, podemos otimizar vários fatores, gerando a entrega de valores mais eficientes.

Seja você iniciante ou expert no desenvolvimento de um site, saiba que existe um plugin para o navegador Chrome que consegue efetuar uma análise do site, através da verificação de boas práticas na utilização de código. O processo para utilização é bem simples:

  1. Instalar o Pluginhttps://chrome.google.com/webstore/detail/greenit-analysis/mofbfhffeklkbebfclfaiifefjflcpad
  1. Carregar o site e abrir o Console DevTools (F12)
  1. Ir até a aba “GreenIT”, marcar a opção “Activate best practices analysis
  2. Clicar no botão “Launch Analysis

Após isto, será apresentada uma lista das verificações e os resultados coletados, além de uma nota geral para o site, que varia de A (mais eficiente) para G (menos eficiente), com base na Tabela de Eficiência Energética.

Add expires or cache-control headers (>= 95%)

Manter recursos (folhas de estilo CSSscripts JavaScript e imagens) o maior tempo possível, para que o navegador não os solicite novamente do servidor. Economiza solicitações HTTP, largura de banda e potência da CPU no servidor.

Compress ressources (>= 95%)

O conteúdo das páginas HTML deve ser compactado para minimizar o consumo de largura de banda, entre o cliente e o servidor. 

Limit the number of domains (<3)

Limitar um máximo de três domínios para os recursos. Porque recursos hospedados em outro domínio lento, pode aumentar o tempo de renderização da página. A boa prática deve ser agrupar todos os recursos em um único domínio.

Don’t resize image in browser

Redimensionar imagens usando atributos HTML de altura e largura. Envia as imagens em seu tamanho original, desperdiçando largura de banda e energia da CPU. 

Avoid empty src tag

Tag de imagem com um atributo src vazio, gera solicitações HTTP adicionais desnecessárias.

Externalize css

Código CSS deve estar separado do código HTML da página, para evitar o aumento do volume de dados enviados. 

Externalize js

Garanta que o código JavaScript está separado do código HTML da página, para evitar o aumento do volume de dados enviados. 

Avoid HTTP request errors

As solicitações com erros HTTP consomem recursos desnecessariamente.

Limit the number of HTTP requests (<27)

Reduzir o número de solicitações por página é fundamental para diminuir o número de requisições HTTP necessários para executar o site e, consequentemente, o seu impacto ambiental.

Do not download unecessary image

Baixar imagens que não serão exibidas consome recursos desnecessários.

Validate js

Validar o seu código JavaScript com boas práticas garante a utilização eficiente da CPU por um período mais curto. O JSLint é uma ferramenta de qualidade de código JavaScript.

Max cookies length (<512 Bytes)

O comprimento do cookie deve ser pequeno, pois é enviado com cada solicitação.

Minified css (>= 95%)

Comprimir os recursos CSS garante somente itens essenciais para serem transferidos, removendo, por exemplo, espaços desnecessários e quebras de linha.

Minified js (>= 95%)

Comprimir os recursos JavaScript garante somente itens essenciais para serem transferidos, removendo, por exemplo, espaços desnecessários, quebras de linha, ponto e vírgula e encurtar nomes de variáveis locais.

No cookie for static resources

Recursos estáticos não utilizam cookies, logo consome largura de banda sem propósito.

Avoid redirect

Os redirecionamentos devem ser evitados, tanto quanto possível, pois tornam a resposta mais lenta.

Optimize bitmap images

Todas as imagens devem ser otimizadas, pois são os recursos que mais impactam na largura da banda consumida.

Optimize svg images

Imagens Svg também devem ser otimizadas e minimizadas.

Do not use plugins

Evite usar plugins (máquinas virtuais Flash PlayerJava e Silverlight etc.) porque eles podem consumir muitos recursos (CPU e RAM). Dê preferência à tecnologia padrão, como HTML5 e ECMAScript

Provide print stylesheet

A folha de estilo deve ser o mais simples possível, e utilizar fontes leves (exemplo: Century Gothic)

Do not use standards social button

Coloque links diretos para as redes sociais, pois os seus plugins, em 99% das vezes, não são utilizados e geram consumo desnecessário.

Limit Stylesheet files (<3)

Minimize o número de arquivos CSS para reduzir o número de solicitações HTTP

Use ETags (>= 95%)

Utilize as ETags (assinatura anexada a uma resposta do servidor), porque elas economizam uma grande quantidade de largura de banda. 

Agora é possível verificar a existência de inúmeras ações simples, e algumas mais complexas, que podem fazer toda diferença no consumo de energia que automaticamente gera emissão de CO2. 

Esse é um dos principais propósitos da iniciativa Green Coding, iniciada pela GFT. Ela fomenta a adoção da sustentabilidade, como parte do processo de desenvolvimento de soluções. É nossa obrigação oferecer métodos mais eficientes para gerar maiores impactos na redução de emissão de CO2, e assim salvar o nosso precioso planeta. 

Você pode encontrar informações mais completas no documento do programa da GFT:

https://www.gft.com/int/en/index/technology-and-innovation/greencoding-tailored-it-solutions-for-banks-insurers-and-industry/

E no atalho abaixo, contribuir para a ferramenta:

https://github.com/cnumr/GreenIT-Analysis

Para mais informações acesse a EcoIndex e confira a sua metodologia: http://www.ecoindex.fr/

Vamos juntos salvar o nosso acolhedor planeta!

Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br

Artigo original publicado em https://blog.gft.com/br/2021/07/06/pegada-ecologica-co2-de-um-website-com-foco-em-green-coding/


quinta-feira, 3 de junho de 2021

Sustentabilidade com Codificação

 


Todos somos responsáveis pela redução da emissão de CO2 e, consequentemente, com esse impacto no aquecimento global. Governos, empresas e organizações estão cada vez mais comprometidos em conter as emissões de gases que provocam o efeito estufa. Durante a Cúpula do Clima, que contou com a participação de 40 nações, o presidente dos Estados Unidos, Joe Biden, reconheceu que o país não está fazendo o suficiente para conter o aquecimento global e anunciou metas mais ambiciosas de corte nas emissões de poluentes. 

Como as empresas de Tecnologias da Informação e Comunicação podem ajudar nessa redução?

Você sabia que atualmente é necessário 1% de toda a energia gerada globalmente para alimentar os data centers? Em 2030 esse percentual pode chegar aos incríveis 30%, se somado às estruturas das TIC. Então, podemos presumir que cada linha de código gera um impacto no consumo de energia que resulta na emissão de CO2.  

E como os profissionais de TI podem gerar impacto direto na eficiência energética?

Simplesmente ao escolher formas mais inteligentes de arquitetura, recursos, codificação, estabilidade, boas experiências de usuário, tempo de utilização de processamento e alocação de memória/espaço.

Para guiar os profissionais foi criado um programa inovador chamado Green Coding, que implementa no desenvolvimento de softwares a sustentabilidade, sendo um fator fundamental para ajudar na redução de emissão de gases de efeito estufa, por meio de três pilares:

Aplicar o programa significará adicionar uma nova questão ao processo de design de software, o que coloca também em foco a eficiência energética, que por consequência oferecerá economia financeira e melhores soluções. Vamos verificar alguns exemplos desses pilares.

Lógica

Você sabia que cada linguagem gera um impacto diferente no consumo de energia? Conforme um estudo apresentado pelo GreenLab, é possível efetuar uma comparação por meio de um fator entre as linguagens. Isso leva em conta a taxa de utilização de tempo de processamento, alocação de memória e armazenamento. Claramente, essa escolha de uma linguagem não pode simplesmente ser baseada nessa métrica, pois também temos que colocar na conta os desenvolvedores, a facilidade da utilização, a manutenção, entre outros tantos fatores.

Ação Prática: Criar mecanismos para metrificar blocos de código de processamento, para que seja possível coletar os tempos e percentuais de utilização. Dessa forma gerar parâmetros comparativos que deverão ser usados para a avaliação de melhoria de performance e resultando em uma melhora na eficiência dos processamentos visíveis.

Metodologia

Reutilização de resultados de projetos, seja em partes ou na sua totalidade, para que esses possam ser pesquisados ​​por membros da equipe, pessoas dentro da organização ou até mesmo pela comunidade em geral. Assim, as melhores práticas e resultados são rapidamente absorvidos e implementados.

Ação Prática: Criar um repositório com estudos de casos dos levantamentos de cenários de melhorias de projetos e das possíveis soluções que foram analisadas e posteriormente implementadas. Isso gera uma documentação que poderá ser consultada. Lembre-se, muitos projetos podem se beneficiar das implementações simples e que já foram testadas. 

Plataforma

Aqui, a adoção de computação em nuvem faz todo o sentido. Dado que os recursos são facilmente provisionados, oferecem escalabilidades conforme a demanda de utilização e também oferecem recursos granularizados. Assim temos um conjunto perfeito para criar o ambiente com o tamanho exato de cada necessidade para o momento, o que evita o desperdício de super alocações para atender cenários imaginados. 

Ação Prática: Programar o desligamento automático de equipamentos ou desprovisionamento de recursos que não estejam sendo utilizados no momento, assim os ambientes deixam de funcionar enquanto não estão sendo utilizados ​​(noite, fins de semana, etc.).

O programa GreenCoding está dando os seus primeiros passos, contudo a sua adoção do processo de desenvolvimento de soluções com sustentabilidade é uma responsabilidade de todos. Os recursos do nosso planeta são finitos e não devem ser desperdiçados aleatoriamente, é a nossa obrigação oferecer métodos mais eficientes para gerar maiores impactos na redução de emissão de CO2 e consequentemente salvar o nosso precioso planeta. 

Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br

Artigo original publicado em https://blog.gft.com/br/2021/05/11/sustentabilidade-com-codificacao/

sábado, 26 de setembro de 2020

Logs, quem são, onde vivem, o que comem?

Logs são apontamento de atividades gerados por sistemas. O armazenamento pode ser feito em arquivos, base de dados, ferramentas. Eles comem, ops, servem como fonte de informações que permitem analisar o histórico de comportamento do programa, como identificar erros, indicar falhas de sistema ou ainda fornecer insumos para previsibilidade de eventos futuros.

São muitas as alternativas para que os logs sejam criados. A captura de registro de logs devem ser desenhada para atender um equilíbrio que todos registros sejam sucintos e minimamente didáticos para solução de um problema. É obrigatório que toda uma aplicação seja coberta por registros de log de erros, isso garante o mínimo do mínimo. 

Para informações pertinentes e relevantes um registro de log deve ser composto pelos seguintes propriedades:

Data Evento

Essa data refere ao momento do registro do Log, de preferência com fuso horário ajustado para a audiência.

Aplicação

Nome da aplicação que está gerando a mensagem de log.

Nível

Todo log deve pertencer obrigatoriamente a um nível, é fundamental o entendimento desses níveis, porque alguns não são aplicados em todos ambientes.


  • TRACE: Esse nível deve ser utilizado para rastrear algo pontual em produção e nunca devem ficar habilitados definitivamente em produção.

  • DEBUG: Nesse nível pode ser logado qualquer coisa durante o desenvolvimento, porque esse tipo só será registrado em ambiente de desenvolvimento.

  • INFO: Os logs desse nível devem basicamente rastrear pontos de fluxo do aplicativo.

  • NOTICE: Todos esses logs serão criados para monitoramentos em produção.

  • WARN: Neste nível são os logs de alertas (monitoramento) para potenciais problemas que podem gerar erros, como falta de espaço, lentidão. Porém não causam a interrupção da execução do aplicativo.

  • ERROR: Todas as condições de erro gerados dentro do programa, quando um fluxo fluxo de execução é interrompido devido a uma falha.

  • FATAL: Os logs neste nível devem ser utilizados para acionar contingências, pois descrevem um aplicativo irrecuperável ou falha do sistema que requer atenção imediata.

Categoria

Todos os logs devem conter obrigatoriamente uma categoria, essa categoria deve ser utilizada para agruparem logs dentro do mesmo contexto, que facilitem a extração dentro de um comportamento. Outro fator importante, é utilizar um nível hierárquico respeitando o princípio simples de responsabilidade.

Mensagem

As mensagens devem ser escritas em inglês, isso se deve ao fato das ferramentas de análise de logs estarem preparadas para analisar palavras e frases associados ao idioma inglês, além de evitar problemas com acentuação que ocorre muito no idioma português.

O conteúdo da mensagem devem ser ricos no sentido que ofereçam informações que auxiliem no entendimento do logs, muitas vezes quem estará interpretando a mensagem não necessariamente tem o conhecimento do negócio.

Sempre adicione contexto as mensagens, todo registro de log deve conter por si só, todas as referências necessárias para auxiliar no entendimento da sua geração.

A grande maioria dos logs atualmente são analisado por ferramentas de monitoria, e lembrando que essas leituras são feitas por máquinas, é importante que o conteúdo das mensagens sejam acessíveis a humano e máquina, logo é importante normatizar os dados para facilitar o entendimento de ambos, uma forma é elegante é tipificar através do formato JSON o conteúdo.

Nenhuma informação sensitiva devem ser armazenadas em nenhum nível de logs, seja nome do cliente, número de documento, senhas, tokens, ou seja, nenhum dados que possa identificar ou expor informações. Os logs não passam por nenhum tipo de validação de conteúdo, por conta que as informações são muito genéricas, logo é sua responsabilidade não armazenar informações que ferem as leis (LGPD).

Regra de ouro para definir o que registrar numa mensagem de log?

Simplesmente pense em algo que alguém terá de lê-lo um dia ou mais tarde. Mais importante, é pensar em quem vai ler essas linhas, pois isso define o conteúdo, contexto, categoria e nível da mensagem.

Usuário

Essa informação diz a respeito do usuário que está utilizando a aplicação no momento do log, seja um colaborador ou até mesmo um processo automatizado.

Ambiente

Deve sempre identificar o ambiente em que log foi gerado (Desenvolvimento, Homologação, Pré-Produção, Produção, ...)

Outro ponto importante, é a centralização dos logs, pois permitirá  aumentar a segurança e praticidade, sendo que os logs centralizados ficam mais fácil para fazermos consultas em busca de erros e análise e controlar a permissão de acesso.

Lembre-se também de criar uma regra de retenção, porque os logs contém uma volumetria muito alto e se não for criado essa política, com o tempo muitas informações não mais necessárias estarão aumentando o tempo de consulta e dificultando a localização de dados relevantes.

E ainda, cada vez que um código for refatorado é importante criar mensagens de log. Procure manter uma sincronia entre os comentários e o registro de log, porque não há nada pior ao solucionar problemas para obter mensagens irrelevantes que não têm relação com o código processado.


Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br



domingo, 14 de junho de 2020

Dicas para melhorar o entendimento das SQL Querys

Consultas em SQL são basicamente códigos no final, logo é importantíssimo termos a preocupação de oferecer um código claro e objetivo para aumentar a manutenibilidade dele por outros desenvolvedores. Comandos mal formatados e/ou com escritas confusas podem aumentar mais erros e uma falta geral de motivação para revisar seu trabalho. Para quem simplesmente escreve a consulta pode fazer sentido e até funcionar, porém é fundamental que o código esteja num melhor formato possível para aumentar sua qualidade, vamos a alguma regras que podem ajudar.

Seja consistente e corente com a formatação

SELECT primeiroNome, count(*) from
Usuários WHERE ultimo_nome = 'silva' Group by primeiroNome

Vamos analisar alguns pontos:

  • Veja que algumas partes estão em maiúsculas e outras não, procure manter um padrão único, por exemplo todas as palavras reservadas.
  • É confuso identificar o que é coluna ou o que é comando
  • A coluna do SELECT está em "camelCase", a usada no WHERE está "snake_case" e o nome da tabela em "PascalCase", crie um padrão geral, se começou errado, conserte.
  • A utilização de caracter especial em definição de nomes, como na tabela Usuários

Veja um exemplo como deveria ser:

SELECT primeiro_nome, COUNT(*) from
usuarios WHERE ultimo_nome = 'silva' GROUP BY by primeiro_nome 

Use e Abuse da Identação 

SELECT g.id, COUNT(u.id) FROM usuarios u JOIN gruopos g on u.grupo_chave
= g.chave WHERE u.nome = 'Marcelo' AND  u.sobrenome
= 'Silva'  GROUP BY g.chave ORDER BY COUNT(u.chave) desc 

Para uma consulta pequena pode não fazer diferença para leitura quando tudo está sem um padrão de separação, agora imagine aquelas longas procedures com todos os comandos encavalados, não é mesmo?

Veja se o resultado fica melhor para o entendimento: 

SELECT 
	  g.id
	, COUNT(u.id) 
FROM usuarios u 
	JOIN gruopos g on u.grupo_chave = g.chave 
WHERE 
	    u.nome = 'Marcelo' 
	AND u.sobrenome = 'Silva'
GROUP BY 
	g.chave 
ORDER BY 
	COUNT(u.chave) desc

Dica: A utilização da virgula (,)antes de cada campo no SELECT, ou das conjunções AND / OR no WHERE, GROUP BY, ORDER BY facilita a identificação visual onde se inicia ou termina o grupo de campo, além de fornecer uma forma agíl de comentar um campo 

Se você utilizar 2 ou 4 espaços não surti efeito considerável, o importante é só manter o padrão em toda a codificação, a simplesmente utilização dessa formatação farão seu colegas adorarem ver suas consultas quase como obras de arte. 😃

Utilize sempre "Aliases" 

SELECT
    u.chave
    , u.nome
    , t.chave
    , t.nome
    , (SELECT COUNT(*) FROM titulos where nome = t.nome)
FROM usuarios u
    JOIN titulos t on u.titulo_chave = t.chave 

O resultado dessa consulta será: 

chave

nome

chave

nome

count

1

Marcelo Goberto

4

Arquiteto

6

Novamente num cenário minimalista é possível identificar o que é cada conteúdo, agora imagine isso num longo resultado com várias colunas, por isso é fundamental que você nomeie cada coluna para que possa facilitar o entendimento.

Veja como fica o resultado da mesma consulta acima com ajustes 

SELECT
   u.chave AS usuario_chave
   , u.nome AS usuario_nome
   , t.chave AS titulo_chave
   , t.nome AS titulo_nome
   , (SELECT COUNT(*) FROM titulos where nome = t.nome) AS qtde_titulos
FROM usuarios u
JOIN titulos t on u.titulo_chave = t.chave

O resultado dessa consulta será 

usuario_chave

usuario_nome

titulo_chave

titulo_nome

qtde_titulos

1

Marcelo Goberto

4

Arquiteto

6


Utilize números nas clausulas GROUP BY e ORDER BY 

Neste caso essa é uma preferência pessoal que acredito que auxilia muito no organização de uma consulta, veja um exemplo com essa aplicação 

SELECT
   nome
    , sobrenome
    , COUNT(*) AS total
FROM usuarios
GROUP BY 1, 2
ORDER BY 3 desc 

Algumas vantagens na adoção desse formato são:

  • Economia de linhas: a utilização de muitas colunas em GROUP ou ORDER não aumentará sua consulta, pois todos estarão enfileiradas
  • Manutenção: Se desejar trocar o agrupamento ou a ordenação, basta trocar as colunas de lugar dentro da clausula SELECT

Esses foram alguns pontos que sempre considero na hora de escrever uma consulta, não existe um melhor padrão ou formato único para SQL, mas com certeza existe o desafio que procurar fazer um ótimo trabalho que possa ter sua manutenção facilitada para os próximos e quem sabe para nós mesmo, porque se todos tivermos um consenso que garantir sempre um excelente padrão de código, todos se sairão ganhando.

Marcelo Goberto de Azevedo

Arquiteto na GFT Brasil

//marcelogoberto.com.br


quinta-feira, 13 de fevereiro de 2020

Principais Razões para uma Péssima Performance no SQL


Esses são os principais pontos que devem ser observados quando da construção de uma base de dados, porque alguns erros podem simplesmente transformar a performance numa verdadeira carroça, e acelerar uma carroça pode até funcionar, mas nãos será por muito tempo que ela vai aguentar o tranco. Vamos ver algumas ações que devemos evitar para garantir um bom desempenho de nossa base de dados.


#1: Desenho de Estrutura Ruim

Boa parte do sucesso de uma aplicação se sustenta nos dados que serão providos e nas velocidades em que eles estarão disponíveis. Por isso é importantíssimo a excelente na construção de uma estrutura do banco de dados, porque ela será a espinha dorsal para tudo que for construído em volta, listamos alguns erros que devem ser evitados para garantir um desenho funcional.

Normalização Baixa
Redundância de informações no banco de dados
Baixa integridade de referência entre tabelas (chaves primárias e estrangeiras)
Chaves primárias complexas demais (muitos campos)
Falta de teste de stress no desenho (cenários de crescimento dos dados)
     

#2: Queries e Códigos Ineficientes

Se você tem uma base sólida e bem construída, agora chegou a parte de criar as principais estruturas que transportaram e transformarão os dados, essas partes são muito importantes, porque será através delas que os dados serão coletados e entregues nas pontas, esses erros devem ser evitados:

Utilizar [NOT IN] ou [IN] em vez de [NOT EXISTS] ou [EXISTS]
Usar cursores ou loop fakes em vez de [INSERT… SELECT] ou [SELECT… INTO TABLE]
Usar [SELECT *] em vez de apenas os nomes de coluna necessários
Esquecendo de usar parênteses ao usar operadores lógicos [OR] ou [AND]
Alinhamento de subconsultas criando um plano de execução complexo
Usando funções na coluna indexada na cláusula [WHERE]
Uso excessivo de funções escalares definidas pelo usuário
Uso desnecessário de [DISTINCT] em qualquer lugar
SQL dinâmico

#3: Estratégia de Indicies Pobre

Os índices podem ser considerados aceleradores de um banco de dados, porém a criação, definição e utilização deve ser estudada e mensurada para que eles possam oferecer ganhos, porque indicies mal dimensionados à revelia podem acabar tendo um efeito contrário, por isso esses erros devem ser evitados:

Indexar todas chaves estrangeiras
Indexar todas as colunas de uma tabela
Muitos índices para uma simples coluna
Preferir tabelas sem índice clusterizado
Subindexiar suas tabelas
Não efetuar manutenção dos índices      

#4: Baixo Provisionamento de Equipamento

Mesmo que você utilize todas as boas práticas para a construção do seu banco de dados, nada disso surtirá efeito caso você não tenha recursos suficientes para as estruturas sejam utilizadas com uma folga no servidor, ou seja, é importante a metrificação do tamanho do equipamento ou instância que rodará o banco de dados, entre as principais métricas CPU, Memória, Espaço em Disco. Os erros listados devem ser evitados a qualquer custo:

CPU funcionando mais de 90% constantemente
95% da memória sendo utilizadas
Leitura e escrita (I/O) em disco muito alta

#Conhecimento

A palavra chave para criação de um banco de dados performático é conhecimento.

Um profissional de TI, deve continuar aprendendo e se desenvolvendo para ficar à frente de todos os novos desafios futuros, e através dessas informações poderá aplicar mais práticas relevantes para melhorar a qualidade final de seu trabalho.

A cada novo dia, novas ferramentas, metodologias e ferramentas são criadas, sendo disponibilizadas para auxiliar na criação de melhores soluções.

Mantenha-se atualizado sempre.

Marcelo Goberto de Azevedo
Arquiteto na GFT Brasil
https://marcelogoberto.blogspot.com/

quinta-feira, 30 de janeiro de 2020

Implementando SonarQube para Análise de Código de Projetos C#/VB.NET

Implementando SonarQube para Análise de Código de Projetos C#/VB.NET

O SonarQube é uma ferramenta (plataforma de código aberto) para inspeção da qualidade do código, detectar bugs, melhorias de código e vulnerabilidades de segurança em linguagens de programação.

Neste tutorial vamos criar um servidor de SonarQube para que seja possível executar a validação de um código de um projeto que esteja acessível localmente na máquina.

Passo 1 » Instalação e Configurando o Server de SonarQube

Vamos utilizar o portal do Azure para criar uma instância de contêiner para hospedar e rodar nosso servidor do SonarQube, será através desse servidor que será possível referenciá-lo no projeto ou Pipeline do Azure DevOps e também verificar os resultados das análises.

1. Acessar o Portal do Azure
2. Pesquisar um recurso “instância de contêiner”



3. Adicionar uma instância e definir dados Básico



Importante no preenchimento: 
Nome da imagem: sonarqube (esse é nome da imagem para criação do contêiner)
Tamanho: alterar para 2 vcpus e 3.5 de memória para suportar a instância

4. Na parte de rede é importante criar a Porta 9000/TCP e remover a porta 80/TCP



Importante no preenchimento: 
Rótulo do nome DNS: esse nome será endpoint do servidor SonarQube

5. Efetuar a revisão e criação da instância



6. Aguardar a implantação do recurso



Passo 2 » Configuração a Plataforma SonarQube e Criando o Projeto

7. Acessar a plataforma SonarQube no servidor criado
    Para acessar basta utilizar o endereço (FQDN) seguindo pela porta 



8. Utilizar o login e senha (admin/admin) para logar na plataforma

9. Iniciar um novo projeto para conectar com seu código fonte que irá ser analisado



10. Defina a chave do projeto, essa chave será utiliza para localizar o repositório do SonarQube para armazenar os resultados



11. Agora é necessário a geração do token que será utilizado para geração da analise



12. Selecione a linguagem C# or VB.NET



13. Faça o download do Scanner for MSBuild


14. Selecione o tipo de projeto e faça o download do pacote



Importante:
Para a execução dessa validação, o SonarQube Scanner necessita que o Java 11 esteja instalado (http://www.google.com/search?q= java+jdk+11)

15. Faça a extração o arquivo baixado para a pasta “C:\Arquivos de Programas\...”



16. É importante definir esse diretório no %PATH% do Windows, veja como em (http://www.google.com/search?q=Add+directory+to+your+PATH+environment+variable+windows)

Passo 3 » Execute a validação de código no Projeto

17. Agora basta acessar o “Developer Prompt de Comand for VS ????” e acessar a diretório onde está a solução do projeto que deseja gerar a análise


 18. Agora basta executar os comandos que foram exibidos no previamente no passo 12 



19. Ao final todos os dados coletados estarão à disposição para análise no portal do SonarQube




Numa próxima matéria, vamos implementar o SonarQube na esteira (CI/CD) do Azure DevOps.

Marcelo Goberto de Azevedo
Arquiteto na GFT Brasil
https://marcelogoberto.blogspot.com/