A Microsoft vem se empenhando em facilitar o desenvolvimento de código com alta-performance usando C#. Uma evidência disso é a inclusão de “value semantics” (o que é comum em C++) na linguagem. Sem querer complicar demais as coisas, todos sabemos que, em C#, valores que ficam na stack, por padrão, são “copiados” toda vez que […]
OpenTracing e Jaeger
No post anterior, conceituamos Distributed Tracing e estabelecemos conexão entre o conceito e modelos de concorrência. Agora, iremos começar a tratar de práticas, padrões e tecnologias de mercado para implementação de Distributed Tracing no mundo real. Nesse post, apresentamos OpenTracing e Jaeger. O que é OpenTracing OpenTracing é um padrão aberto que direciona o desenvolvimento […]
Diferenças entre “buildar” em Debug e em Release
Há alguns dias, falamos sobre problemas enfrentados ao tentar depurar uma aplicação compilada em modo Release. Entretanto, no “mundo real”, o problema que encontramos com mais frequência são sistemas, em produção, compilados em modo Debug. Nesse post vamos trazer um pouco da diferença entre “buildar” em debug e “buildar” em release. Diferenças entre compilação em […]
O que é “Distributed Tracing” e por que é importante?
Frequentemente, precisamos ter condições de fazer um tracing de um request/job. Ou seja, precisamos saber o passo-a-passo de como nossas aplicações atenderam um request ou executaram um job. Esse desafio pode ser bem complexo em cenários envolvendo microsserviços. Nesse post, o primeiro desta série, gostaríamos de explicar o conceito de tracing distribuído, por que é importante e estabelecer […]
Discutindo microsserviços no podcast da Lambda3!
Participamos de dois bate-papos (episódios 128 e 132) descontraídos sobre microsserviços com o pessoal de nossa parceira, a Lambda3. Primeiro bate-papo (episódio 128) No primeiro bate-papo (episódio 128), discutimos o conceito, apresentamos patterns e anti-patterns, 12 factor apps, contêineres e mais. Segundo bate-papo (episódio 132) No segundo bate-papo (episódio 132), falamos sobre falácias de computação […]
Release It! 2nd edition
“Release It!” foi recomendado, para mim, pelo Ayende. A ênfase do livro está em padrões que fazem com que programas fiquem execução por mais tempo, com menos falhas, e com capacidade para se recuperar com mais facilidade. Também são apresentados anti-padrões que comprometem a estabilidade, principlamente em sistemas grandes. O autor do livro tem muita […]
RESPOSTA: Por que o depurador não respeita meu breakpoint?
Em um post anterior, questionei o porquê do depurador, no código indicado na figura que segue, em Release, não estar respeitando um breakpoint. IMPORTANTE: O modo release não é indicado para depuração. Em modo Release, o compilador implementa otimizações (eliminação de código inútil, inlining, etc..) que impedem, em muitos cenários, a correlação entre o código […]
Encontrar e extrair um número em uma string (em C#, incluindo Span<T>)
Outro dia, estava procurando estratégias para encontrar e extrair números em strings e cheguei a seguinte estratégia, como a mais popular, no Stackoverflow. O código é simples (o que é bom). Entretanto, a Regex não compilada, junto com as alocações repetidas de strings pressionando o GC não parecem performáticas. Resolvi fazer algumas soluções alternativas […]
Synchronizing Execution in Distributed Systems using RavenDB
Implementing synchronization for multiple threads in .NET is easy. There are a lot of options for doing that – for example, using the Monitor class. But, what if we need to synchronize execution in a Distributed System? One possible answer is using RavenDB! How can RavenDB help us to synchronize execution in a distributed system? […]
Primeiros passos com OpenCV em C++ (usando VS 2017 e VcPkg)
Neste post, vou compartilhar como dar os primeiros passos com OpenCV, rapidamente, usando Visual Studio 2017 e VcPkg. O que é OpenCV? OpenCV (Open Source Computer Vision) é uma biblioteca open-source, cross-platform, destinada a suportar o desenvolvimento de aplicações que usam visão computacional. Originalmente, foi desenvolvida pela Intel e é livre para o uso (licença […]