A blog about Software Engineering and other stuff not related to programming
Compartilhando um pouco do que sei sobre como se dá o processo de coerção de uma estrutura de dados usando um schema como base.
É uma notação utilizada pra descrever o formato de uma estrutura de dados. Quando trabalhamos com o Clojure, é muito difundido no mercado a biblioteca Plumatic/Prismatic Schema, ela fornece uma série de helpers para facilitar a composição dos formatos de dados, o que chamamos de schemas, e também provê meios para que possamos aplicar validações dos valores contra os formatos esperados, seja na validação da estrutura de dados de entrada e saída de uma função, até mesmo o body de requisição ou de resposta de um determinado endpoint HTTP.
Exemplo do schema de um mapa (estrutura de dados) que representa uma pessoa, no exemplo definimos quais as chaves e os tipos esperados para os valores:
(require '[schema.core])
(def ColorEnum (schema.core/enum :red :green :blue))
(schema.core/defschema Person
{:name schema.core/String
:favorite-color ColorEnum})
No schema acima definimos que esperamos uma chave :name onde o valor é do tipo String, e uma chave :favorite-color onde o valor esperado é um enum de keywords com três opções de possíveis valores.
Você pode recorrer a documentação da biblioteca para encontrar exemplos de como compor schemas e de como validar os mesmos com a descrição dos cenários de sucesso e falhas na validação.
A documentação da Plumatic/Prismatic Schema que é a lib que utilizamos como base para o mecanismos de validação e transformação comumente usada em aplicações desenvolvidas em Clojure, descreve o processo de Coercion como sendo o mesmo que uma validação de um schema, mas adicionando um passo anterior a validação, a transformação aplicada no mapa de entrada usando um schema base para a transformação, após a coerção dos valores é aplicada a validação do dado retornado pela transformação com base no schema indicado.
Vamos ver na prática, como podemos fazer a transformação de um dado com base em um schema. Para o nosso exemplo ilustrativo vamos criar um FOO BAR coercer:
Começamos com a definição dos exemplos que vamos usar de input para o processo de transformação e validação (coercion):
(def valid-foor-bar-json-input {"test" "FOO"})
(def invalid-foor-bar-json-input {"test-i" "Blue Pen"})
Configuração do mecanismo de coerção/transformação: Os Matchers para o processo de transformação/coerção, são nada mais nada menos que mapas onde indicamos como cada tipo de dado deve ser adaptado a partir de um tipo X para um tipo Y.
(require '[schema.core])
(require '[schema.coerce])
(def FooBar (schema.core/eq "FOO BAR"))
(def foo-bar-coercions
{FooBar (fn [input] (if (= input "FOO") "FOO BAR" input))
schema.core/Keyword (fn [input] (if (string? input) (keyword input) input))})
(defn foo-bar-matcher
[schema]
(foo-bar-coercions schema))
(schema.core/defschema FooBarResult
{schema.core/Keyword FooBar})
(def foo-bar-coercer
(schema.coerce/coercer FooBarResult foo-bar-matcher))
Transformação/Coerção de fato:
(foo-bar-coercer valid-foor-bar-json-input)
=> {:test "FOO BAR"}
(foo-bar-coercer invalid-foor-bar-json-input)
=> #schema.utils.ErrorContainer{:error {"test-i" (not (= "FOO BAR" "Blue Pen"))}}
Quando executamos a chamada (foo-bar-coercer valid-foor-bar-json-input) temos o retorno esperado, onde o valor "FOO" foi transformado em "FOO BAR" e o resultado atende ao schema especificado.
No segundo exemplo de chamada (foo-bar-coercer invalid-foor-bar-json-input) o dado de entrada passou pelo step de transformação, mas a saída não atendeu o schema esperado gerando um erro.
Published: 2025-11-13
Tagged: Schema Data Validation Clojure Coercion
Não possuo nenhuma credencial de analista de investimento. O conteúdo dessa página não se trata de uma sugestão de investimento. Não me responsabilizo pelas consequências de colocar o conteúdo a seguir em prática.
Não sou a pessoa mais entusiasta sobre o mercado de criptomoedas. Reconheço o histórico e o potencial de valorização, mas não guardaria todos os meus ovos nessa única cesta.
A minha abordagem para investir nesse mercado é fazer com que o valor investido não ultrapasse 5% do total geral (soma das minhas posições em todos os outros mercados e classes de ativos).
Independente do tipo de mercado, no momento de decidir no que investir, sigo uma máxima: Comprar o que os outros estão vendendo barato por conta do medo irracional sobre suposições a respeito do futuro.
Estudando o histórico do mercado de criptomoedas, observamos ciclos de valorização e desvalorização. Com uma certa frequência surgem notícias anunciando a morte do Bitcoin, o que leva muitas pessoas a venderem os seus ativos, e isso resulta numa redução temporária no preço do ativo. É nesse momento que aproveito para colocar no bolso uma maior quantidade de moedas por um preço mais baixo, esperando que mais cedo ou mais tarde o valor do ativo volte a subir.
Figura 1 — Crypto Fear end Greed Index Dashboard
O Fear end Greed Index pode ser utilizado para identificar com maior clareza em que ponto do ciclo estamos. Se o mercado está muito otimista, há uma supervalorização do ativo. Por outro lado, se o mercado está receoso, há uma subvalorização.
O Índice de Medo e Ganância das Criptomoedas acompanha o sentimento dos investidores nos mercados de criptomoedas, indicando se o medo ou a ganância estão influenciando as decisões de negociação. Ele analisa fatores como volatilidade e momento do mercado.
O índice trata-se de uma medida numérica que varia de 0 até 100 com a seguinte categorização qualitativa descritiva:
A medida que a pontuação se apróxima das extremidades, maior é o indício de que a maioria dos investidores está negociando de forma impulsiva e emocional. Com base no valor atual do índice aplico o seguinte processo de tomada de decisão:
O mesmo racional também é aplicável na bolsa de valores, mas decisões não devem ser tomadas apenas com base no índice, é necessário analisar a saúde financeira e o desempenho das empresas negociadas.
Published: 2025-10-20
Tagged: Investimento
O principal desafio enquanto trabalhando de home office é lidar com o barulho externo da cidade, carros buzinando, motores ligados enquanto esperam o semáforo abrir, sistemas de som anunciando as promoções do dia em um supermercado próximo. Para contornar essa dificuldade, trabalho com duas barreiras de contenção para o barulho, a primeira barreira é um bom fone de ouvido com um excelente sistema de cancelamento de ruído ativo, a segunda barreira é a janela e porta do escritório completamente fechadas.
Um dos principais produtos do processo de respiração do ser humano é o CO2. Um ambiente fechado (mal ventilado) com pessoas respirando dentro, não consegue proporcionar uma boa taxa de renovação do ar o que tem como resultado o crescimento paulatino do nível de concentração de CO2 no ambiente a medida que o tempo passa.
Segundo recomendações da Anvisa a concentração aceitável de CO2 no ambiente interno contempla o intervalo entre 400 e 1.000 ppm (partes por milhão). Níveis de concentração acima do recomendado tem como uma das suas consequências a deterioração da função cognitiva.
O excesso de CO2 pode ter impactos negativos na função cognitiva, incluindo a memória, a concentração e a tomada de decisões. Isso ocorre porque o CO2 pode reduzir o fluxo sanguíneo para o cérebro, prejudicando a oxigenação e o metabolismo cerebral.
- Engepred - Excesso de CO2 no ar traz riscos à saúde e aos negócios
Adquiri um dispositivo com o objetivo de monitorar a concentração de CO2 no ambiente utilizado para performar minhas atividades laborais, e reduzir o impacto negativo da longa exposição a altos níveis de concentração de CO2 no ambiente. Trata-se do IAM-O2 da marca INKBIRD.
Dimensões do cômodo:
As medições normais da concentração de CO2 com janela e porta abertas giram em torno de 460 a 600 ppm.
Para mensurar quanto tempo leva para que a concentração de CO2 atinga níveis nocivos, fechei a porta do cômodo e também a janela, permaneci dentro do quarto atuando como uma fonte de CO2 durante a execução do experimento. Parei o cronometro e finalizei a coleta dos dados assim que atingimos uma concentração acima de 1400 ppm.
Levou cerca de 40 minutos para o nível de concentração de CO2 ultrapassar o limite máximo aceitável de 1000 ppm. E levou 1 hora e 25 minutos para atingir 1400 ppm. Como consequência da exposição a esse nível de concentração comecei a apresentar sintomas semelhantes ao de uma crise de enxaqueca.
Fique atento para a capacidade de ventilação do espaço que você usa para trabalhar ou estudar.
Published: 2025-10-04
Tagged: Produtividade Experimento Home Office