Guia de programação assíncrona em C#

“A programação assíncrona existe há vários anos na plataforma .NET, mas historicamente tem sido muito difícil de fazer bem. Desde a introdução de async/await em C# 5, a programação assíncrona se tornou popular. Frameworks modernos (como ASP.NET Core) são totalmente assíncronos e é muito difícil evitar a palavra-chave async ao escrever serviços web. Como resultado, tem havido muita confusão sobre as melhores práticas para async e como usá-lo corretamente. Esta seção tentará estabelecer algumas orientações com exemplos de padrões bons e ruins de como escrever código assíncrono.” (por David Fowler)
Acesse: 🔗C# Async Guidance (inglês)
Podman Desktop: alternativa Open Source ao Docker Desktop

O fato do Docker Desktop não ser totalmente open source é algo que acaba desencorajando o seu uso, mas temos uma excelente alternativa, principalmente para o Windows: Podman Desktop.
Apache Kafka e .Net: como produzir e consumir mensagens

O Apache Kafka é uma ferramenta útil em vários cenários, como integrações de sistemas, processamento assíncrono, processamento de streams, microsserviços, etc. Bastante usado por muitas empresas, possui uma vasta comunidade. Neste artigo, vamos ver como usar o Apache Kafka no .Net, com exemplos de produção e consumo de mensagens.
Validação de CPF de alta performance usando Span<T>

O tipo Span<T> surgiu no .Net Core 2.1, na versão 7.2 da linguagem C#. Trata-se de um recurso que alavancou a performance de aplicações .Net, e seu uso traz um ganho enorme de performance e economia no uso de memória pela aplicação. Neste artigo, vamos revisitar a validação de CPF usando o tipo Span<T>, e veremos através de um benchmark a diferença entre as duas versões do algoritmo.
Tipos genéricos em C# – porque e como

O conceito de tipos genéricos (generic types) existe na grande maioria das linguagens de programação, e não é diferente em C#. Basicamente, torna possível que uma classe ou um método possa trabalhar com dados de um conjunto de tipos sem a necessidade de criar um código específico para cada um, o que favorece o reuso de código, facilita a construção de testes unitários e diminui a ocorrência de bugs (quanto menos código, menor a chance de bugs).
Null, o erro de um bilhão de dólares – parte 2

Na parte 1 falamos sobre os problemas das referências nulas, e também sobre as funções puras e impuras. Começamos a falar sobre monads, e os benefícios que este pattern traz. Vimos também a definição mínima de um tipo monad.
Null, o erro de um bilhão de dólares

Implementada por muitas linguagens de programação, é fato absoluto que a referência nula (null, Nothing, nil, etc) causou e causa muitas dores de cabeça, tanto nos programadores quanto nos usuários. Quem nunca tomou uma NullPointerException em Java, ou uma NullReferenceException em C#? E os ponteiros nulos de C/C++ então?
O próprio criador do null, Tony Hoare, reconheceu o problema e o chamou de “erro de um bilhão de dólares”:
Continue lendo “Null, o erro de um bilhão de dólares”“I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn’t resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years”.
[PostgreSQL] Paginação no PostgreSQL, simples e rápido

Trabalhar com paginação no PostgreSQL é bastante simples e é um recurso que colabora muito com a otimização de consultas que podem retornar muitos registros. Basicamente são usadas as palavras-chave LIMIT e OFFSET.
[C#] Operações de agregação em coleções – Sum, Count, Average, etc

Diferente das operações que já vimos, uma operação de agregação (ou redução) sobre uma coleção resulta em um único valor. A API System.Linq possui vários métodos de agregação pré-prontos, como Sum, Count, LongCount, Average, Max e Min, assim como o Aggregate (mais genérico).
Obs: o método Aggregate é conhecido como reduce em outras linguagens.
[C#] Projeção de coleções – Select e SelectMany

Após aprender como filtrar dados de coleções em C#, vamos continuar explorando os operadores funcionais de System.Linq. Agora vamos aprender como efetuar a projeção de coleções.
Os métodos Select e SelectMany possibilitam que uma determinada coleção seja projetada (transformada) em uma coleção diferente, através da aplicação de uma função em cada elemento desta. Em outras linguagens e plataformas, o equivalente ao Select é o map, e o equivalente ao SelectMany é o flatMap.