Blog

O marketing dos benchmarks

O marketing dos benchmarks

Já faz algum tempo que os benchmarks deixaram de ser apenas uma ferramenta técnica e passaram a ocupar espaço central no marketing de produtos e tecnologias. De linguagens de programação a frameworks web, de modelos de LLM a placas de vídeo, benchmarks são utilizados como argumentos de venda — e com razão: números impressionam. Mas como todo dado isolado, os benchmarks contam apenas parte da história. Os números são reais, mas o contexto em que esses números são obtidos está longe da realidade da maioria dos sistemas em produção. E é justamente aí que mora o problema. Quando o assunto é...

ler mais
Mitigando os custos de Reflection

Mitigando os custos de Reflection

Reflection oferece um mecanismo sofisticado para inspeção e manipulação de metadados de tipos, métodos e propriedades em tempo de execução. No entanto, essa flexibilidade vem acompanhada de custos elevados, que penalizam desempenho e eficiência de qualquer aplicação. Sempre que podemos evitar, evitamos seu uso, mas e quando não podemos? Como podemos tratar ou mitigar esses prejuízos em desempenho? Hoje vou apresentar uma abordagem que usei recentemente em um projeto recente. Reflection e seus custos O impacto do uso de Reflection no desempenho pode ser atribuído a diversos fatores, sendo os...

ler mais
O custo real das exceptions – 02 –  Estamos olhando para o lugar certo?

O custo real das exceptions – 02 – Estamos olhando para o lugar certo?

Sem sombra de dúvidas, o principal argumento que sustenta a ideia de que exceptions são ruins é o custo. Afinal, ninguém quer colar em si uma placa dizendo que "optou pelo caminho mais lento". Ao mesmo tempo, as discussões acaloradas transformam o debate em uma rinha onde cada qual adota uma postura que desqualifica toda e qualquer opinião contrária. Mas afinal, quanto custa uma exception? Este artigo não pretende fornecer respostas definitivas, mas levantar questionamentos importantes: Será que estamos ignorando alguma peça fundamental nessa discussão? A aversão às exceptions é justificada...

ler mais
O custo real das exceptions – 01 – A série

O custo real das exceptions – 01 – A série

O uso de exceptions no .NET tem sido um tópico de debates acalorados na comunidade. Para alguns, exceptions representam um custo desnecessário, um vestígio de práticas antiquadas que poderiam ser substituídas por abordagens mais eficientes. Para outros, são um pilar essencial para a robustez e previsibilidade do software moderno. Se exceptions realmente fossem um problema significativo, por que ainda são adotadas de forma unilateral, em todo lugar, principalmente nos componentes centrais do ecossistema .NET, no ASP.NET, no Entity Framework e em diversas bibliotecas e fundações da própria...

ler mais
Vai criar um IConfiguration? Não esqueça as variáveis de ambiente!

Vai criar um IConfiguration? Não esqueça as variáveis de ambiente!

Quando construímos aplicações em .NET (especialmente .NET Core e posteriores), temos acesso a um pipeline de configuração bastante poderoso, que permite combinar diversas fontes de configuração: arquivos JSON, variáveis de ambiente, User Secrets, Azure Key Vault, entre outras. Entretanto, não é tão raro esbarrar projetos que utilizem exclusivamente arquivos appsettings.json (e suas variações, como appsettings.Development.json, appsettings.Production.json, etc.) e inadvertidamente não só se ignorem o uso de variáveis de ambiente, mas também impossibilitem sua utilização. O inferno tem um...

ler mais
Sobre MediatR

Sobre MediatR

Nos últimos anos, o MediatR tornou-se amplamente utilizado na comunidade .NET. Muitos projetos são construídos a partir de templates que o incorporam, resultando em uma adoção generalizada. No entanto, poucas pessoas questionam a necessidade real de sua utilização. Em algumas ocasiões, fui questionado sobre os motivos para não usar MediatR. Para muitos desenvolvedores, sua presença em um projeto é considerada um padrão inevitável, algo que não precisa de justificativa ou debate. Neste artigo, quero explorar essa ferramenta sob uma ótica mais crítica e avaliar seu impacto real na arquitetura...

ler mais
Há momentos em que é preciso dizer NÃO para o negócio

Há momentos em que é preciso dizer NÃO para o negócio

No cenário atual de desenvolvimento de sistemas, especialmente em ambientes de alta demanda, a realidade se impõe: nem sempre é possível atender a todas as solicitações do negócio sem alterar a base técnica. Em diversas situações, é necessário que o arquiteto exerça a maturidade de saber quando dizer “NÃO” para o negócio – mesmo diante de uma cultura fortemente inclinada ao “cliente tem sempre a razão”. Hoje discutimos os desafios de equilibrar anseios contraditórios, a tensão entre requisitos funcionais e não funcionais, e como essa decisão pode ser determinante para a sustentabilidade e o...

ler mais
Voltando do .NET Aspire para o Docker Compose

Voltando do .NET Aspire para o Docker Compose

Já faz algum tempo que publiquei um post contando sobre minha experiência com o .NET Aspire. Depois de mais de 14 semanas com .NET Aspire chegou a hora de dizer “até logo”. Neste texto, vamos discutir a viabilidade de usar o .NET Aspire em projetos baseados em Docker Compose e também mostrar o processo de migração do .NET Aspire de volta para o Docker Compose. Recapitulando Em um post anterior, apresentei: Os componentes de produção e desenvolvimento. A relevância do dashboard do .NET Aspire, que resolve um grande problema no fluxo de trabalho de desenvolvimento. Como o Docker Compose e seu...

ler mais
Oragon.RabbitMQ 1.1 – Reduzindo Alocações

Oragon.RabbitMQ 1.1 – Reduzindo Alocações

Então esse foi o dia que queimei a lingua! Uma das criticas que faço às publicações que falam sobre ganhos absurdos de 50%, 80% e até mais de 100% de performance onde todas as variáveis se mantiveram as mesmas, é que afinal: Ganhamos 100% ou deixamos de perder 50%? Como o velho ditado "A estatística é a arte de torturar os números até que eles confessem o que você quer demonstrar". Bem, eu não passei batido à minha própria critica! Hoje vou falar sobre a redução nas alocações de respostas. O Oragon RabbitMQ é uma implementação de Minimal Api para o consumo de filas do RabbitMQ. Talvez eu...

ler mais
Microsserviços vs Componentes

Microsserviços vs Componentes

Uma dúvida frequente na adoção de microserviços é sobre a diferenciação entre o “microserviços” e os “componentes” que ele pode conter. Muitas pessoas imaginam que um microserviço seja apenas uma API, implementada em um projeto monolítico, mas a realidade (e a prática) mostram que ele pode sim ser composto por diversos elementos internos (como APIs, workers, jobs em segundo plano etc.) desde que todos compartilhem o mesmo propósito de negócio/bounded context. O que é um microserviço? Em linhas gerais, um microserviço é uma unidade de software autônoma e independente, responsável por um...

ler mais
Implementando Delay no RabbitMQ com Oragon.RabbitMQ sem Delayed Exchange

Implementando Delay no RabbitMQ com Oragon.RabbitMQ sem Delayed Exchange

Um assunto recorrente quando falamos de RabbitMQ é a implementação de delay. Embora tenhamos o delayed exchange, existem questões relacionadas a cluster que precisam ser consideradas e por isso não é algo que aborde, além de ser algo instalado à parte. Existem muitos motivos para evitarmos esse tipo de exchange e na apresentação do Clayton Cavaleiro sobre "Servindo 1MM de mensagens simultâneas com RabbitMQ" vimos alguns desses problemas. Assim vamos abordar uma solução alternativa, usando uma fila auxiliar. Entendendo Oragon.RabbitMQ O projeto consiste em implementar Minimal API's para...

ler mais
Monorepo vs Multirepo?

Monorepo vs Multirepo?

Gerenciar configurações em projetos de software vai muito além de uma simples questão técnica — é algo que realmente faz diferença na maturidade da equipe e na eficiência do desenvolvimento. Se você já trabalhou com repositórios cheios de serviços diferentes, sabe bem que decidir como implantar, versionar e coordenar tudo é o que separa um sistema tranquilo de um pesadelo de dependências quebradas. Neste artigo, quero compartilhar com você algumas estratégias práticas para garantir que cada implantação seja consistente e rastreável. Além disso, vamos conversar sobre os desafios e como lidar...

ler mais
Otimizando consumo de recursos em aplicações .NET com RingBuffer

Otimizando consumo de recursos em aplicações .NET com RingBuffer

Frequentemente nos deparamos com desafios relacionados ao gerenciamento eficiente de recursos limitados, como conexões de banco de dados, sockets e serviços como RabbitMQ e Redis. Para solucionar esses desafios, um conceito fundamental e poderoso entra em cena: o Ring Buffer ou Circular Buffer. Este artigo explora o conceito, os benefícios e as aplicações do Ring Buffer, com foco no desenvolvimento .NET e em cenários de alto desempenho. O que é um Ring Buffer? O Ring Buffer, também conhecido como Circular Buffer, é uma estrutura de dados baseada em um array fixo que utiliza um modelo...

ler mais
Mininal API para RabbitMQ – Oragon.RabbitMQ 1.0 foi lançado!

Mininal API para RabbitMQ – Oragon.RabbitMQ 1.0 foi lançado!

Na noite do dia 25 de Dezembro lancçamos a versão 1 do Oragon.RabbitMQ, uma implementação de Minimal Api's para o consumo de filas do RabbitMQ. Com ele temos a mesma experiência de minimal api's para o consumo de filas. Contexto RabbitMQ é um projeto incrível, seu client dá um suporte de primeiro nível para o .NET, entretanto exige uma série de configurações e preocupações. Prefetch Por exemplo, me recordo de ver um "Arquiteto NodeJS" dizendo no LinkedIn que só 1 instância de consumidor poderia consumir uma fila, ele dizia que ao subir a segunda instância, esse não receberia mensagens. Isso...

ler mais
A anatomia de um JenkinsFile para projeto .NET

A anatomia de um JenkinsFile para projeto .NET

Segundo a JetBrains, o Jenkins continua relevante, ocupando a primeira posição na categoria Team Tools > Continuous integration (CI) system, portanto, mesmo não envelhecendo muito bem, por mais caquético que pareça, continua ocupando 50% do mercado corporativo. https://www.jetbrains.com/lp/devecosystem-2023/team-tools/#ci_tools Vale lembrar que a JetBrains possui o IntelliJ IDEA, uma IDE para Java, assim como o RIDER, o que coloca em sua base de clientes fiéis muita gente do mercado java, e, portanto, interferindo significativamente produzindo tendências em gráficos desse tipo de...

ler mais
A fábrica de engrenagens

A fábrica de engrenagens

Estava escrevendo sobre .NET Aspire, porém, no meio do texto fui tomado por um acesso de raiva ao retratar o caminho que nós, como comunidade técnica e como sociedade, estamos tomando. Quero compartilhar essa reflexão, pois a forma fragmentada como desenvolvedores querem ser responsáveis por cada vez menos e como empresas usam isso para tirar proveito da situação, já se tornou insustentável. O papel do desenvolvedor: Um olhar crítico Hoje em dia, na área de tecnologia, há um problema comum: tanto os desenvolvedores quanto o mercado estão buscando maneiras de simplificar e abstrair o trabalho...

ler mais
6 Semanas com .NET Aspire

6 Semanas com .NET Aspire

Estamos na semana 43 de 2024, faltam 9 semanas para o réveillon. Desde a semana 38 estou trabalhando com ASPIRE e quero falar sobre essa experiência. Contexto O primeiro ponto para a contextualização é que o Academia Pay não é um projeto para ser comercializado, vendido, ou ter clientes reais, nada disso. O foco também não é "ensinar SaaS"!! (deus me livre!) Longe de mim ter como cliente o usuário final. Eu gosto é de DEV!!! É um "povinho complicado", um "bicho de uma espécie exótica", muito complexa, mas é minha tribo, minha galera, sangue do meu sangue! O objetivo do Academia Pay é...

ler mais
Níveis de Maturidade SaaS e Gestão do Crescimento da Infraestrutura

Níveis de Maturidade SaaS e Gestão do Crescimento da Infraestrutura

No contexto do crescimento exponencial das soluções SaaS (Software as a Service), a compreensão dos diferentes níveis de maturidade em arquiteturas multitenant e do impacto que estes têm no consumo de infraestrutura é essencial para qualquer arquiteto de software ou líder técnico. Neste artigo, exploramos os quatro principais níveis de maturidade SaaS, destacando suas características e os desafios associados ao crescimento da infraestrutura. Nível 1: Single Tenant No Nível 1, cada cliente (ou "locatário") possui sua própria instância do software, sem qualquer compartilhamento de...

ler mais
Mensageria .NET for Architects Day | Sábado, 05 de outubro

Mensageria .NET for Architects Day | Sábado, 05 de outubro

Nesse sábado vai rolar o Mensageria .NET for Architects Day, um evento que gostaria de ter realizado há muito tempo! Mensageria não é disruptivo apenas pela natureza assíncrona. Tampouco pela lavagem cerebral que sofremos ao aprendermos a programar, que nos faz esquecer da natureza caótica do dia-a-dia. Mensageria nos devolve o caos, agora nos eventos assíncronos disparados por cada ator simultaneamente. A parte ruim é que muitos ficam pelo caminho, muitos profissionais, projetos, e a parte legal é que de certa forma: é desafiador e divertido! Nesse evento, que acontecerá no sábado vamos dar...

ler mais
.NET ASPIRE – Criando databases no PostgreSQL e aplicando Migrations com FluentMigrator

.NET ASPIRE – Criando databases no PostgreSQL e aplicando Migrations com FluentMigrator

No .NET ASPIRE existe uma forma de você expressar para o Orquestrador, um database dentro do ASPIRE para que o serviço de service discovery entregue uma conexão corretamente para nossas aplicações. O problema é que o .NET Aspire não cria esse banco de dados, então é isso que vamos abordar hoje. Contexto Aqui na Academia Dev estou trabalhando diariamente, de segunda-a-sexta para criar um Gateway de Pagamentos Fake, com a intenção de explorar aspectos de arquitetura de software, arquitetura de soluções e design de solução. Transformei a criação desse projeto em uma jornada diária onde AO VIVO...

ler mais
Jornada ACADEMIA PAY — O desafio de construir um gateway de pagamento do zero

Jornada ACADEMIA PAY — O desafio de construir um gateway de pagamento do zero

Imagine-se diante de uma tela em branco e do lado seu Visual Studio, onde o primeiro repositório ainda não foi criado e a primeira linha de código é apenas uma ideia. Você está prestes a iniciar uma jornada ambiciosa: construir, do zero, uma plataforma de meios de pagamento. Não há legado para se preocupar, nenhum servidor pré-configurado, nenhum serviço contratado, apenas uma visão clara e a motivação de criar algo grandioso. Esse é o cenário com o qual começamos nessa próxima segunda-feira, quando nascerá o de ACADEMIA PAY — o embrião de uma nova iniciativa do Cloud Native .NET hospedado...

ler mais
NordVPN – 1 a 3 meses grátis

NordVPN – 1 a 3 meses grátis

A segurança e a privacidade online são mais importantes do que nunca. Com o aumento dos ataques e das restrições a determinados serviços, é essencial contar com ferramentas que protejam nossos dados e garantam o acesso livre à internet. Um dos serviços que uso com frequência para esse propósito é a VPN. Por que escolhi a NordVPN? Há quase dois anos, decidi contratar a NordVPN. Naquela época, estávamos enfrentando bloqueios no Telegram, e uma VPN se tornou a solução ideal para contornar essas barreiras. Desde então, a NordVPN tem sido uma ferramenta indispensável. Mas por que a NordVPN? Além...

ler mais
Resiliência – Tolerância a Falhas (Fault Tolerance)

Resiliência – Tolerância a Falhas (Fault Tolerance)

Tolerância a falhas é a capacidade de um sistema continuar operando corretamente mesmo quando uma ou mais de suas componentes falham. Em vez de interromper ou degradar o serviço, um sistema tolerante a falhas é projetado para lidar com falhas, mantendo o funcionamento normal ou próximo ao normal. A tolerância a falhas é um aspecto fundamental de sistemas críticos onde a disponibilidade e a confiabilidade são prioritárias, como em aplicações financeiras, sistemas de saúde, infraestrutura de telecomunicações e serviços de nuvem. A pergunta que move esse assunto: A principal pergunta que move...

ler mais
Oragon.RabbitMQ – A relação entre Minimal API’s e Agnostic Services

Oragon.RabbitMQ – A relação entre Minimal API’s e Agnostic Services

Oragon.RabbitMQ está no forno! Dando continuidade à nossa série, abordarei a ideia central pelo qual adoto Minimal API's e por que elas tem tanto poder na modelagem. É hora de abrir a caixa de pandora e falar sobre modelagem de API's agnósticas. Contexto Quando comecei a desenvolver minhas primeiras Web API's, lá por volta de 2004 ~ 2006, já estava habituado com ao menos 3 camadas claras e rígidas. Sem bairrismos Graças à minha experiência anterior com Delphi, ASP, JScript, VBScript, VB .NET e C#, minha taxa de bairrismo e ranço a respeito de outras linguagens e plataformas, sempre...

ler mais
SRP – Single Responsability Principle não é sobre fazer apenas 1 coisa

SRP – Single Responsability Principle não é sobre fazer apenas 1 coisa

Não faz muitos anos que me deparei com uma apresentação do Uncle Bob em que ele falava de SRP e dava uma explicação completamente diferente do que é a compreensão comum sobre o tema. SRP não é sobre um módulo ter apenas uma responsabilidade, nem por fazer apenas uma coisa. Isso foi assustador porque eu já havia, inclusive escrito, com base nessa ideia errada. Primeiro vamos entender o que Uncle Bob diz sobre isso em Clean Architecture. De todos os princípios SOLID, o Princípio da Responsabilidade Única (SRP) provavelmente é o menos compreendido. Isso se deve, possivelmente, ao seu nome...

ler mais
Projetando um Chat Server para a escala com .NET

Projetando um Chat Server para a escala com .NET

Arquitetura é estratégia. Projetar uma arquitetura envolve muito mais do que escolher tecnologias, implica em compreender como os conectar pontos e principalmente como lidar com limitações e restrições. Em um mundo utópico, sem escassez, não precisaríamos nos preocupar com arquitetura, toda estratégia seria válida, poderíamos escolher absolutamente qualquer estratégia e tudo magicamente funcionaria perfeitamente. A realidade nos impõem limitações de tempo, time, recursos, criando restrições das quais precisamos lidar. Nesse post vou falar como projetei uma arquitetura para 140 mil salas de...

ler mais
Cache-Aside Wins

Cache-Aside Wins

O uso de caching em sistemas distribuídos tornou-se uma prática essencial para melhorar a performance e a escalabilidade de aplicações. A escolha da estratégia de caching adequada é um desafio que muitos enfrentam. Com diversas abordagens disponíveis, é fácil se perder entre as opções e acabar implementando uma solução que, apesar de parecer eficiente inicialmente, pode se tornar um ponto de falha ou degradação ao longo do tempo. Hoje vamos explorar a estratégia de Cache-Aside, sua aplicação e benefícios em comparação com outros padrões de caching, como Write-Through, Write-Behind,...

ler mais
The Microservices Journey – S2E2: Tipos de Independência

The Microservices Journey – S2E2: Tipos de Independência

Quando se fala em independência de um microsserviço, o que de fato está sendo dito? A independência tem função de viabilizar com que roadmaps de um microsserviço, ou microsserviços de uma time/equipe, tenham capacidade de evoluir sem atrito, sem afetar ou interferir nos microsserviços dependentes ou equipes relacionadas. Se somarmos microsserviços a micro-frontends teremos a capacidade de criar novas funcionalidades inteiras, de ponta-a-ponta, sem que necessariamente seja necessário realizar implantações de outros microsserviços. É disso que microsserviço trata, da capacidade de entregar...

ler mais
The Microservices Journey – S2E1: Independência ou morte

The Microservices Journey – S2E1: Independência ou morte

Recentemente a discussão sobre microsserviços retornou das profundezas da escuridão, sob temas superados, e reforçados em inúmeras oportunidades ao longo dos últimos anos. Afinal, banco de dados compartilhado? Pode? E monorepo? Faz sentido? E o que Sam Newman diz sobre isso tudo? Será que ele mudou o discurso ao longo do tempo? Será que já não seria hora de falarmos sério sobre isso? Tentar fazer resumo com IA tende a ser uma forma excelente para produzir uma compreensão completamente rasa e deturpada sobre os posts que escrevo aqui.Já recebi comentários no LinkedIn e foram verdadeiros shows...

ler mais
Oragon.RabbitMQ – A relação entre Ack e Resiliência

Oragon.RabbitMQ – A relação entre Ack e Resiliência

Oragon.RabbitMQ está no forno! Hoje começamos uma série que trata dos argumentos para a criação desse projeto. Começamos pela relação entre a escolha entre Ack Manual e Ack Automático e por que ack automático remove o benefício da resiliência no consumo de mensagens do RabbitMQ. Se olharmos os tutoriais por aí vamos ver que a maioria usa o autoack. Aliás o principal tutorial da documentação, também usa autoack. Autoack é uma configuração do consumo que determina se o broker encarará a mensagem como processada ao entregá-la para o client ou se o broker aguardará uma resposta programática para...

ler mais
Habemus .NET ASPIRE

Habemus .NET ASPIRE

Estamos no último dia do Microsoft Build e sem sombra de dúvidas o maior lançamento dessa edição é o .NET ASPIRE. É hora de falar tudo que você precisa saber sobre a história recente que nos remete à criação do projeto e suas ambições. A conta não fecha Conforme havíamos sinalizado em 2022, com a análise dos reports tanto da CNCF quanto DataDog, o desenvolvimento Cloud Native precisava de novas abstrações que simplificassem a jornada Cloud Native. Se de um lado empresas não conseguiam profissionais, de outro, profissionais não conseguiam adquirir as skills necessárias para...

ler mais
Generalismo: Um trampolim para excelência ou um atalho para o fracasso?

Generalismo: Um trampolim para excelência ou um atalho para o fracasso?

No mundo dinâmico do desenvolvimento de software, o debate entre especialização e generalismo é eterno. Com a rápida evolução das tecnologias, a pressão para que os desenvolvedores se adaptem e expandam suas habilidades é intensa. Mas, qual é a melhor abordagem: ser um especialista em uma área ou um generalista em muitas? Embora o generalismo possa parecer atraente, nesse post argumento que um entendimento superficial em múltiplas áreas pode ser prejudicial tanto para a carreira do desenvolvedor quanto para a qualidade dos projetos em que trabalham. E o output do seu trabalho, define quem...

ler mais
Quando fazer upgrade da minha aplicação .NET?

Quando fazer upgrade da minha aplicação .NET?

Muitas vezes aparece a dúvida sobre quando fazer o upgrade de uma versão do .NET. Será que vale a pena pular de LTS em LTS ou vale a pena pegar as STS's no meio do caminho? Empresas burocráticas, devem mudar suas políticas ou não? Hoje vamos tratar desse assunto, com os meus argumentos, mostrando as recomendações que faço mais ou menos desde 2017~2018. Disclaimers Você é totalmente livre, para não concordar, para não seguir essa recomendação. Meu objetivo não é te convencer, nem te recomendar nada. Meu 1° objetivo é mostrar o que recomendo e por que recomendo. Meu 2° objetivo é parar de...

ler mais
.NET ASPIRE Dashboard Standalone como Container

.NET ASPIRE Dashboard Standalone como Container

Nessa sexta-feira dia 16 foi lançado o Dashboard do ASPIRE como uma implementação OTLP standalone, em uma imagem docker, pronta para uso. Entenda as novidades nesse post. Novidade no .NET ASPIRE, habemus dashboard para todos! Ontem, dia 16, David Fowler postou uma nova feature do .NET ASPIRE. "Agora você pode executar o dashboard do Aspire como um servidor OTLP vanilla e visualizador para logs, rastreamentos e métricas:" O post continha o link para uma issue como título: "Executando a imagem Docker do dashboard" e está como fechada. https://github.com/dotnet/aspire/issues/2248 Já no...

ler mais
Microsoft Artifact Registry (MAR) – Descobrindo imagens e tags

Microsoft Artifact Registry (MAR) – Descobrindo imagens e tags

Ao longo da jornada de containers do novo .NET desde sua primeira versão (.NET Core), temos o docker hub e posteriormente o MCR servindo imagens docker para nossas aplicações e servidores. Sempre foi chato buscar as tags disponíveis, nos fazendo voltar às documentações e papers que descrevem migração. Hoje você descobrirá que o Microsoft Container Registry mudou de nome e como descobrir as tags das principais imagens docker. O que é um Container Registry? E porque precisamos dele? Na arquitetura criada pela Docker Inc, um componente fundamental da topologia é o Container Registry. Ele é...

ler mais
OCR Minimal API | .NET 8

OCR Minimal API | .NET 8

Já pensou subir um serviço, com um simples docker run e ter um OCR ilimitado disponível para seu sistema? Você pode usar, comercializar, e fazer absolutamente qualquer coisa com o OCR. Você pode usar para leitura de documentos, validação de prints, e muito mais. Pois bem, hoje falarei sobre um projeto que criei e pode te economizar tempo e dinheiro no seu próximo projeto. Contexto Alguns tipos de negócio demandam o trabalho com documentos e imagens. Seja para uma inscrição, autenticação, certificados, comprovantes, documentos oficiais, etc. Outros tipos de negócios precisam fazer validações...

ler mais
Logs Estruturados – Correlacionando Dados Técnicos com Eventos de Negócio

Logs Estruturados – Correlacionando Dados Técnicos com Eventos de Negócio

Introdução Em um mundo onde dado é o novo petróleo, a habilidade de extrair informações valiosas de um mar de dados é crucial. No contexto da observabilidade em arquiteturas de software, os logs estruturados desempenham um papel central. Eles não são apenas ferramentas para trace, debug ou monitoramento, mas também uma mina de ouro para insights de negócios. Já são 10 anos desde o lançamento do primeiro post sobre Logs Estruturados e 8 anos desde o lançamento do Enterprise Application Log, é hora de abrir a caixa de pandora! A Importância dos Logs Estruturados Logs estruturados são mais do...

ler mais
Comece sempre com 2 instâncias

Comece sempre com 2 instâncias

Subir uma única instância de qualquer componente, seja uma API, um Worker ou um Job, pode parecer suficiente em fases iniciais. No entanto, a verdadeira eficiência e capacidade de resposta de uma aplicação só são testadas quando operam em múltiplas instâncias. Iniciar com duas instâncias desde o começo do projeto não é apenas uma medida de precaução, mas uma estratégia proativa para garantir paz de espírito e salvar noites de sono. Em arquitetura de software robustez e escalabilidade são pilares importantes no desenvolvimento de soluções eficientes. Neste artigo, exploraremos a importância...

ler mais
Cloud Native .NET com .NET Aspire – Primeiras Impressões

Cloud Native .NET com .NET Aspire – Primeiras Impressões

Um dos lançamentos do .NET Conf foi o .NET Aspire. Ele é um orquestrador de recursos (containers ou não), é um conjunto de building blocks para inicialização resiliente e observável dos principais recursos que sua aplicação pode depender. Diferente de tudo que já vimos, hoje começamos a desvendar o .NET Aspire e seus recursos. Projetos Cloud Native precisam de outros serviços para entregar seus vários de seus requisitos não funcionais, como resiliência, escalabilidade, concorrência, sem ferir regras importantes para o negócio. Redis além de seu uso óbvio para cache, também é muito usado para...

ler mais
Keyed DI services e Como o uso de tipos como identidade penaliza o design

Keyed DI services e Como o uso de tipos como identidade penaliza o design

Nos últimos anos vimos muitas implementações que usam Tipos (classes ou interfaces) como discriminador único em diversos contextos. Essa é uma decisão prejudicial que torna o design mais burocrático, eleva a complexidade desnecessariamente. Como veremos nesse post o resultado é que temos um código mais caro e mais pobre. Esse fenômeno afeta o mecanismo de injeção de dependência do ASP.NET, MediatR, Masstransit e outras várias implementações da Microsoft ou da comunidade. Há exemplos dessa natureza por todo lado. Hoje é dia de explicar porque tipos, sozinhos, são incompletos e porque estamos...

ler mais
Uma nova arquitetura não é páreo para velhos hábitos — Parte 1 — Requisitos não funcionais são objetivos estratégicos de negócio

Uma nova arquitetura não é páreo para velhos hábitos — Parte 1 — Requisitos não funcionais são objetivos estratégicos de negócio

Então é hora de remodelar todo o projeto, partindo de uma nova arquitetura. A nova arquitetura tem sob seus ombros muita responsabilidade. Principalmente a de conduzir o projeto à dias melhores. A partir da nova arquitetura, gerentes, arquitetos, desenvolvedores, testers e clientes, todos serão felizes cumprindo suas demandas. Será mesmo? E se eu te dissesse que o tal caos arquitetural, pode não ter nada a ver com a arquitetura em si? E que, embora uma nova arquitetura seja um marco importante e uma chance de fazer diferente, ela pode não ser o suficiente. De tal forma que se não for dada a...

ler mais
RabbitMQ e .NET – Usar ou não usar bibliotecas?

RabbitMQ e .NET – Usar ou não usar bibliotecas?

Nesse post detalho meus argumentos para que você não use nenhuma abstração e use o cliente nativo do RabbitMQ feito para .NET. Contexto RabbitMQ é o Message Broker mais usado do mercado, uma solução open source e amplamente difundida. O projeto adota AMQP 0.9.X enquanto Azure Service Bus, Apache QPID, e diversos outros concorrentes utilizam AMQP 1, por exemplo. RabbitMQ até a versão 3 implementava AMQP 1.0 via plugins, mas agora na versão 4, já traz o AMQP 1.0 para seu core, mantendo o respeito ao AMQP 0.9.x. AMQP 0-9-X vs AMQP 1 Esse tópico daria um post inteiro para detalhar a história por...

ler mais
Filas exclusivas e autodelete

Filas exclusivas e autodelete

Nem sempre as demandas exigem filas que durem aos restarts da sua aplicação. Há casos de uso significativos em que você quer que a fila nasça com a instância da sua aplicação e morra junto com ela. Embora seja um conceito trivial, em mais de 10 anos usando RabbitMQ, essa foi a primeira vez que tive de fato essa a necessidade de adotar essa abordagem. Filas Exclusivas Exclusividade é uma das configurações possíveis para uma fila. Essa configuração afeta o consumo da fila. Uma fila exclusiva só pode ser consumida na conexão que a criou. Ou seja, nenhuma outra conexão pode manipular (limpar, ou...

ler mais
Dev ou Ops, de quem é a responsabilidade?

Dev ou Ops, de quem é a responsabilidade?

Muitas e muitas vezes me envolvi em discussões sobre responsabilidades sobre serviços de suporte e tudo que está ao redor das nossas aplicações, como Proxy Reverso, API Gateway, Cache Server, Mensageria, Vault, Plataforma e por aí vai. Afinal, quem é o Owner dessas tecnologias e ferramentas? Será que são de responsabilidade da galera de Operações? Spoiler: Essas tecnologias fazem parte do produto, estão nos aspectos não funcionais dele, mas não deixam de fazer parte dele, portando são da equipe constrói o produto. E, portanto, estão muito mais próximos da jornada do Arquiteto do que da...

ler mais
Quais dados, logs estruturados precisam ter?

Quais dados, logs estruturados precisam ter?

Eu estava escrevendo sobre logs estruturados, em especial sobre o Enterprise Application Log, e resolvi quebrar meus argumentos em frações menores para poder isolar as ideias. Aqui hoje quero falar sobre o que um bom log deve ter. Nos primeiros anos de 2010, a evolução na gestão de logs começou a tomar forma. Começávamos a abandonar logs em strings, para passamos a adotarmos logs estruturados. Agora os logs continham muitos metadados que descreviam mais do que um stack trace, uma mensagem e um tipo. Essa  é uma inovação cujos efeitos ainda hoje permeiam a maneira como lidamos com...

ler mais
Como descrever um roadmap de arquitetura de forma clara

Como descrever um roadmap de arquitetura de forma clara

Em um mundo cada vez mais voltado para a tecnologia, a arquitetura de soluções desempenha um papel crucial na orientação de como as organizações desenvolvem e implementam suas estratégias digitais. No entanto, a maneira como apresentamos e comunicamos essas arquiteturas pode muitas vezes ser um desafio. Tradicionalmente, a visão de desenhos arquiteturais têm se concentrado em fornecer "snapshots" estáticos de uma arquitetura em um determinado ponto no tempo. Eles são fundamentais para uma visão clara da arquitetura, mas esses modelos podem não capturar completamente a complexidade e a...

ler mais
GPT para Desenvolvedores .NET

GPT para Desenvolvedores .NET

Nos últimos meses venho experimentando o ChatGPT e a API dos modelos GPT 3.5-turbo e GPT 4.0. Como sempre esse assunto foi compartilhado na mentoria, e naturalmente consigo encontrar dúvidas que não me pareciam óbvias. Esse é um guia que pode te ajudar a pensar nas possibilidades e também permite que você dê seus primeiros passos. Mas afinal, como funciona? Os modelos estão disponíveis via API's HTTP simples. Com um simples curl você consegue acessar. curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer sua-chave-api" -d '{ "model": "gpt-3.5-turbo", "messages": [...

ler mais
10 anos com RabbitMQ — O que aprendi sobre – parte 1

10 anos com RabbitMQ — O que aprendi sobre – parte 1

Uma das ferramentas que mudou minha carreira foi sem dúvidas o RabbitMQ. RabbitMQ, embora tenha Coelho no nome, se comporta mais como um cavalo selvagem e arisco. Mensageria, Aplicações assíncronas e Aplicações distribuídas são mais complexas, mas dão um poder que poucos no mercado conseguem compreender, e hoje quero trazer um pouco dessa experiência acumulada ao longo de uma década usando RabbitMQ em produção em projetos de todos os tamanhos. Hoje é dia de falarmos de RabbitMQ. O que são aplicações assíncronas? Pense em uma chamada telefônica como uma operação síncrona. Quando você faz uma...

ler mais
Entendendo o poder do WASM + WASI

Entendendo o poder do WASM + WASI

Quando se fala em WebAssembly no universo .NET, é comum pensar imediatamente no Blazor, não é mesmo? No entanto, para mim, a imagem que surge é a revolução que o WebAssembly no backend pode desencadear. Imagina mudar completamente a maneira como construímos, encapsulamos, hospedamos e gerenciamos sistemas, criando uma interoperabilidade inédita. Não me refiro ao WebAssembly em navegadores. Estou falando sobre o WebAssembly no SERVIDOR, rodando jobs, Api's, Workers, servidores de jogos, servidores de mensageria, qualquer coisa que seja backend, distante do browser. Sem nenhuma relação com...

ler mais
Do Microsserviço para o Monolito — Amazon Prime Video

Do Microsserviço para o Monolito — Amazon Prime Video

Hoje pela manhã me deparei com uma postagem que me chamou a atenção. Uma compartilhamento de um post que trazia um comentário sobre a Amazon Prime Video, contanto como eles estavam voltando de Microsserviços /Serverless para um Monolito. Como se não bastasse, fui conferir o post e a headline diz: Ampliação do serviço de monitoramento de áudio/vídeo Prime Video e redução de custos em 90% A mudança de uma arquitetura de microsserviços distribuídos para um aplicativo monolítico ajudou a obter maior escala, resiliência e reduzir custos. Hoje esse será o tema do nosso papo aqui. O título...

ler mais
Discord — Nossa nova casa!

Discord — Nossa nova casa!

Acontecimentos recentes se desdobraram em bloqueio do telegram. Desde a noite de quarta-feira estamos sem Telegram em todo o território nacional. Assim, o mensageiro deixou de ser uma opção para nossas comunidades de alunos. E com isso fomos obrigados a abandonar o Telegram para ir para o Discord. Assim que se confirmou, na manhã dessa quinta-feira, fiz uma publicação, um desabafo a respeito do tema. Está na íntegra aqui. Desabafo sobre o bloqueio do telegram Ontem fui surpreendido com o bloqueio do telegram em todo o território nacional. Somos 6.6k no grupo de docker, 500 no grupo de...

ler mais
Adicionando ChatGPT na sua aplicação

Adicionando ChatGPT na sua aplicação

A primeira vez que ouvi falar em chatGPT fiquei empolgado com o avanço das IA's Generativas, mas nem passou pela minha cabeça que já fosse possível usar em uma aplicação real. Ao encontrar no ChatGPT inputs e outputs em texto livre, que hora traz texto normal, hora markdown, hora outros formatos, sem a capacidade de forçar o tipo de dado, via parâmetros, me pareceu uma realidade distante. Uma vez que as API's foram liberadas, não conseguia sequer pensar em uma utilização que não fosse simplória. Hoje eu vou mostrar todo o caminho até conseguir produzir insights, predições, recomendações e...

ler mais
Entendendo CORS

Entendendo CORS

CORS é um daqueles assuntos que atrapalha de iniciante a veteranos. Considerando que toda nova aplicação poderá sofrer com erros de CORS e muitas vezes leva algum tempo para resolver, ou pior, muitas vezes resolvemos da forma errada, esse post vem para ajudar nesse assunto. Hoje abordaremos tudo que você precisa saber CORS, para economizar semanas da sua vida. Faça bom proveito desse tempo! Erros de CORS tomam tempo de todos, quando mais cedo você entender esse mecanismo, menos tempo vai perder olhando para o lugar errado. É o tipo de demanda de segurança que todo mundo quer desbloquear para...

ler mais
Arquitetura Fria — Enfrentando reestruturações tecnológicas sem nenhum conhecimento sobre o negócio

Arquitetura Fria — Enfrentando reestruturações tecnológicas sem nenhum conhecimento sobre o negócio

Nesta semana, abordei o tema "Arquitetura Fria - Enfrentando reestruturações tecnológicas sem nenhum conhecimento sobre o negócio". Esse assunto é polêmico, principalmente aos olhos dos leitores de manchetes, portanto...já sabe né?! Vem comigo, que hoje eu vou destravar uma habilidade interessante e útil. Partindo do pressuposto de que a maioria das reestruturações de projetos ocorre devido a questões técnicas que afetam o cotidiano do negócio, notamos que não há tanta falta de conhecimento sobre o negócio, mas sim a falta de boas práticas técnicas, na maioria absoluta das vezes. O efeito...

ler mais

O papel das empresas na sociedade

O debate sobre o papel da empresa na sociedade tem sido uma discussão recorrente em diversos círculos acadêmicos e empresariais. Faz algum tempo que esbarrei em uma filosofia que oferece uma perspectiva única sobre essa questão, especialmente no que diz respeito às startups, ao ponto de equilíbrio (breakeven) e ao lucro. Neste artigo, discutiremos o papel da empresa e como ela se relaciona com a sociedade. Esse post é parte de uma série chamada MUST-KNOW, onde abordo questões do cotidiano, que parecem política, mas afetam diretamente nossos contratantes, nossos clientes, o cliente dos nossos...

ler mais
O PODER DO ASSÍNCRONO – 2 Episódios

O PODER DO ASSÍNCRONO – 2 Episódios

Você já se perguntou como empresas como Amazon, Google e Netflix garantem que suas aplicações estejam sempre disponíveis, resilientes, escaláveis, eficientes e confiáveis? Não há uma única resposta, mas uma delas é processamento assíncrono, especialmente com a utilização de mensageria e filas. Neste post, exploremos a importância desse recurso no cenário de negócios de alta criticidade e como projetos de todos os tamanhos podem se beneficiar de sua adoção. Nos últimos anos, presenciamos uma crescente demanda por soluções de software que possam suportar grandes volumes de usuários e se...

ler mais
Resiliência de Microsserviços

Resiliência de Microsserviços

Como construir microsserviços resilientes: dicas e estratégias para garantir a continuidade do seu serviço Você já ouviu falar em resiliência? No contexto de software, ela se refere à capacidade de um sistema ou aplicação lidar e se adaptar a problemas e situações adversas. Para microsserviços, a resiliência é fundamental, especialmente considerando que eles dependem de outros serviços para funcionar. Neste post, exploremos os principais aspectos que você precisa saber para criar microsserviços resilientes, desde o gerenciamento de indisponibilidades até o uso de mensageria e processamento...

ler mais
Como o GO Horse está se travestindo de Ágil: os perigos de uma adoção superficial de metodologias ágeis

Como o GO Horse está se travestindo de Ágil: os perigos de uma adoção superficial de metodologias ágeis

Nos últimos anos, o uso de metodologias ágeis tem sido amplamente difundido no desenvolvimento de software e gestão de projetos, buscando entregar valor de forma mais rápida e eficiente. No entanto, uma tendência preocupante tem surgido: a utilização do Go Horse, uma abordagem informal e caótica, disfarçada de práticas ágeis. Neste post, vamos explorar como o Go Horse está se travestindo de Ágil, os riscos associados a essa prática e como identificar e evitar essa armadilha. Disclaimer Metodologia não é um assunto que eu aborde com frequência aqui no gaGO.io. Me recordo de ter falado disso...

ler mais
Minimal API’s e Agnostic Services – Mais reaproveitamento e tolerância à mudanças

Minimal API’s e Agnostic Services – Mais reaproveitamento e tolerância à mudanças

As Minimal API's são uma forma de implementar APIs em .NET, introduzida pela Microsoft no ASP.NET Core 6. Essas API's são projetadas para serem simples, leves e fáceis de usar, com uma sintaxe concisa que permite criar endpoints de API com menos código. Hoje quero chamar a atenção para o poder das Minimal API's quando usadas em conjunto com Agnostic Services, um pattern já abordado aqui no gaGO.io. Adotar o pattern Agnostic Services pode beneficiar ainda mais a arquitetura da sua aplicação ou serviço. Neste artigo, discutiremos as vantagens de utilizar minimal API's em conjunto com Agnostic...

ler mais
MasterClass – Como um desenvolvedor .NET pode se destacar no mercado em 2023 apesar da crise

MasterClass – Como um desenvolvedor .NET pode se destacar no mercado em 2023 apesar da crise

Hoje vou abordar o que mudou no mercado e mostrar um tipo de skill, um tipo de profissional que continua escasso e possui vagas aqui no Brasil ou fora dele. Aprenda a construir um perfil de sucesso resiliente às volatilidades do mercado de tecnologia. O que você verá nesta Masterclass Situação & Perspectiva O que mudou, como mudou e qual o impacto na nossa realidade. Ação O que fazer nesse momento. Oportunidade Compartilho os roadmaps de conteúdo do Cloud Native .NET, explico o motivo dos aprendizados para quem quiser aprender sozinho, por conta. E por fim abro a oportunidade da galera...

ler mais
RabbitMQ Clustering #6 | Formas de Configurar um cluster

RabbitMQ Clustering #6 | Formas de Configurar um cluster

Agora vou te dar algumas estratégias diferentes para a construção do Cluster. Uma estática, outra baseada em peer discovery. Aí podemos usar K8S, Etcd, Consul ou o próprio EC2. No post passado No post passado eu falei sobre a quantidade ideal de nós de um cluster. Agora é hora de falar sobre quais estratégias estão disponíveis para subir um cluster RabbitMQ. O RabbitMQ possui 2 formas de formar um cluster. Você pode usar configurações estáticas, ou dinâmicas com peer discovery. Configurações estáticas As configurações estáticas de cluster do RabbitMQ envolvem a definição manual de nós na...

ler mais
RabbitMQ Clustering #5 | Projetando para disponibilidade

RabbitMQ Clustering #5 | Projetando para disponibilidade

Se você sabe que precisa de um cluster, então é hora de pensar em como desenhar esse projeto. No post 2 dessa série(As 2 métricas vitais para o RabbitMQ), abordamos as métricas que fazem o RabbitMQ cair. Já no post 3 (RabbitMQ consome muita memória e disco?) falamos sobre o consumo de recursos, que está diretamente relacionado às métricas do post 2. Então, fora isso, o que faz o RabbitMQ cair? Pane em hardware! Na verdade, quando o hardware falha, não há o que fazer. Seja com banco de dados SQL, NoSQL, API, quando um servidor tem uma falha grave de hardware, tudo que estiver rodando ali...

ler mais
RabbitMQ Clustering #4 | Como as mensagens são persistidas

RabbitMQ Clustering #4 | Como as mensagens são persistidas

RabbitMQ é um excelente aliado na hora de entregar alta disponibilidade, resiliência, confiabilidade, eficiência e escalabilidade. Mas não basta subir uma instância, e sair usando de qualquer forma. Um dos cenários mais comuns que já esbarrei em consultorias ou na comunidade, é a falta de atenção por total ignorância, produzindo como efeito, risco. Na ansia de pegar um exemplo e tentar rodar com base no exemplo, ignoram-se os fundamentos, ignoram-se as boas prática e o entendimento de como RabbitMQ funciona e como consequência, o que está sendo implantado vai falhar, vai perder mensagens....

ler mais
RabbitMQ Clustering #3 | RabbitMQ consome muita memória e disco?

RabbitMQ Clustering #3 | RabbitMQ consome muita memória e disco?

Será que o RabbitMQ consome demais? Se você pensava que ele consumia muita memória, está enganado. Ele só deixa em memória as mensagens que ele pretende entregar mais cedo para os consumidores. Então depende diretamente do throughput. Ele vai tentar balancear para não consumir muito, mas se o volume trafegado é intenso (chegada de mensagens e entrega de mensagens), significa que você terá um consumo de memória maior. O óbvio que precisa ser dito O RabbitMQ precisa que a mensagem esteja em memória para que ele entregue para qualquer cliente. Ou seja, por mais que ela exista no disco, ele traz...

ler mais
RabbitMQ Clustering #2 | As 2 métricas vitais para o RabbitMQ

RabbitMQ Clustering #2 | As 2 métricas vitais para o RabbitMQ

Se você usa RabbitMQ ou pretende usar, é importante saber o que é um ofensor para seu deployment RabbitMQ. Aquilo que fará seu servidor RabbitMQ parar. Aqui apresento 2 métricas que ajudam a prever e prevenir quedas. Acredito que a primeira dúvida que paire sob sua cabeça seja: É comum RabbitMQ cair? A resposta é: NÃO! Mas isso não quer dizer que você não deva ter nenhuma preocupação. Tenho instâncias com 2 e 5 anos que nunca caíram. Mas afinal, o que faz o RabbitMQ cair? Há 2 métricas que se ultrapassadas fazem uma instância do RabbitMQ parar. Memória e Disk Space são elas e ambas possem...

ler mais
RabbitMQ Clustering #1

RabbitMQ Clustering #1

Você já deve ter visto que o RabbitMQ é usado para entregar resiliência, disponibilidade e confiabilidade. Eu já mostrei isso algumas vezes nos últimos anos. Talvez já tenha descoberto como pode reduzir a pressão de um volume intenso de trabalho sob seus sistemas, sua infra e seu banco, fazendo com que seja possível tolerar cargas de trabalho vezes maiores do que de fato seu parque consegue tolerar, sem precisar escalar seus sistemas. Mas afinal, e se o RabbitMQ falhar? O que acontece? Como lidar com isso caso aconteça? Como contornar? Essa série de posts RabbitMQ Clustering - Publish &...

ler mais
Cloud Native – Pela perspectiva das big techs

Cloud Native – Pela perspectiva das big techs

Ainda existe uma aura em torno do termo, mas com uma mensagem clara. Não basta só DevOps, não basta só Microsserviço, não basta só Nuvem. Cada uma dessas camadas de complexidade são complementares, e tem como objetivo aumentar a eficiência e eficácia de soluções projetadas para a nuvem. Aplicações Cloud Native vão muito além da Cloud em si, principalmente com a chegada do Kubernetes, onde se você tem um bom time de Ops, e possui restrições para a adoção de nuvem, pode inclusive tirar proveito desse universo com sua própria infra local. Cloud native é sobre a forma como lidamos com o...

ler mais
Resolvendo caso de cochilos de 20s do Kong API gateway

Resolvendo caso de cochilos de 20s do Kong API gateway

Um dos problemas que percebi com o Kong no docker é que em alguns momentos, principalmente na primeira requisição a ele, encontrei um delay de pontuais 20s. Como estava também usando-o para cache, suspeitei do plugin e estava errado. A intenção do post é evitar que você também passe por isso. Aqui no eShop Cloud Native, projeto que, aliás, apresentei ontem no Canal .NET, eu estava com uma pendência há meses. https://youtu.be/KdMd1D9agUI Se você reparar vai ver que sempre que eu iniciava o kong novamente ele dava umas engasgadas de eternos 20 segundos. Isso acontecia na primeira requisição e...

ler mais
RabbitMQ – Trabalha em memória?

RabbitMQ – Trabalha em memória?

Já não é tão comum, mas ainda existe quem diga que RabbitMQ é rápido porque não tem banco de dados. Essa é uma MEN-TI-RA!! Ele entrega resiliência e performance, por outros motivos. É sobre isso que vamos falar hoje! Essa semana recebi uma mensagem que dizia algo aproximadamente assim: Gago, como coloco um banco de dados, como Oracle como backend do RabbitMQ, para que eu possa ganhar segurança? Se ele fez essa pergunta, então suspeito que talvez outros milhares de desenvolvedores tenham a mesma dúvida. RabbitMQ possui banco de dados SIM Embora você não configure esse banco de dados, não...

ler mais
Todo sistema tem jeito? É possível recuperar qualquer projeto?

Todo sistema tem jeito? É possível recuperar qualquer projeto?

Muitas vezes nos perguntamos se é ou não possível arrumar a casa, ou se devemos demolir e criar novamente tudo do zero, ou pelo menos de algo próximo disso. Hoje quero falar sobre algumas experiências que tive e falar sobre o framework que usei para tornar algumas experiências de recuperação de projetos em cases bem interessantes. Não é de hoje que eu me envolvo nesses projetos malucos, nessa refatorações que envolvem projetos à beira do precipício, que após uma imensa bateção de cabeça, resolviam me chamar para tentar arrumar. Esses foram projetos de enorme risco, inclusive para minha...

ler mais
Rancher Longhorn no Kubernetes 1.25

Rancher Longhorn no Kubernetes 1.25

Recém lançado em agosto, Kubernetes 1.25 trouxe desafios para o longhorn. Há pouco mais de 10 dias foi liberada na master do projeto a versão que permite usá-lo no Kubernetes 1.25. Mas afinal, o que é Longhorn? Se você usa AKS, EKS, GKE, ou Microk8s e instalações das mais variadas de Kubernetes, já deve ter se perguntado como persistir arquivos de forma realmente eficiente no Kubernetes. Block Storage é a tecnologia que controla o armazenamento de dados e os dispositivos de armazenamento. Ele pega todos os dados, como um arquivo ou entrada de banco de dados, e os divide em blocos de tamanhos...

ler mais
Depende!

Depende!

Sempre que uma pergunta técnica ou sobre system design, ou até mesmo arquitetura é respondida com "Depende!", há quem se questione se realmente estamos trabalhando com exatas. Afinal, se estamos no mundo das exatas, porque tudo depende? O que de fato faz os melhores profissionais responderem essas perguntas com um simples e singelo "Depende!". Será que depende mesmo? Se depende, depende do quê? Quando começamos a programar somos apresentados às variáveis. Já sabíamos desde as aulas de matemática, que variáveis diferentes tendem a produzir resultados diferentes. Isso é mais que óbvio. Mas...

ler mais
Cloud Native .NET – 10 Curiosidades/Novidades que você não sabia

Cloud Native .NET – 10 Curiosidades/Novidades que você não sabia

Se você já ficou sabendo sobre as novidades no Cloud Native .NET, quero que saiba que ainda tem muito mais chegando. Hoje vou contar 10 novidades sobre o que fazemos do lado de dentro, conteúdo e projeto gratuito do lado de fora e mais algumas curiosidades sobre esse projeto. 1) 3 anos de Cloud Native .NET Ok, começou como Docker Definitivo. Sim, verdade. Mas com uma jornada desse porte, era óbvio que levaria algum tempo até concluir minhas ambições de criar uma formação completa ao redor do que hoje é conhecido como Cloud Native. Naquela época, em 2019, Cloud Native já era um assunto, mas...

ler mais
Chiseled Ubuntu Images – O mais próximo que teremos de Imagens Distroless  para .NET chega junto com o anúncio do .NET 6 no Ubuntu 22.04

Chiseled Ubuntu Images – O mais próximo que teremos de Imagens Distroless para .NET chega junto com o anúncio do .NET 6 no Ubuntu 22.04

No dia 16 de agosto de 2022, a Microsoft anunciou o resultado de sua parceria com a Canonical. Os frutos vão desde o .NET 6 instalável via APT, mas passam também pelas Chiseled Ubuntu Images. Imagens docker super enxutas. Claro que o anúncio não poderia deixar de falar sobre as novas imagens padrão e a chegada do .NET 6 ao Ubuntu 22.04. Ainda assim, a estrela do lançamento são as Chiseled Ubuntu Images. O que são essas Chiseled Ubuntu Images? Chisel, formão em inglês, nomeia esse tipo de imagem, em tradução livre seria algo como "Imagens Esculpidas". Elas nascem a partir do Ubuntu, criando o...

ler mais
Sobre Ports and Adapters, Agnostic Services e modelagem de Serviços

Sobre Ports and Adapters, Agnostic Services e modelagem de Serviços

Se você busca flexibilidade e alguma versatilidade para escolher entre estratégias de deployment e distribuição de aplicações a qualquer momento do ciclo de vida do projeto. Desde o dia 1 até a véspera de uma implantação. Ou se você não está certo, mas quer poder trocar uma chamada HTTP por uma mensagem AMQP, ou gRPC facilmente, independente do momento. Esse post é pra você. Muitas vezes me deparo com Controllers, Handlers e diversos Primary Adapters interagindo diretamente com DbContexts (EF), ISessions (NH), ou até mesmo acessando repositórios e pedindo entidades, além de manipulá-las....

ler mais
Quiet Quiting – Problema ou Oportunidade?

Quiet Quiting – Problema ou Oportunidade?

Se você acredita que é responsável pelos seus próprios resultados e acredita que pode crescer pelo trabalho duro, disciplina e estudo, esse post é para você. Se você está disposto a sacrificar o hoje por um amanhã melhor, e acredita que tem de ralar para conseguir suas coisas, esse post é para você. Se você quer fazer o mínimo, e espera ser recompensado e reconhecido, esse post não é para você. Um fenômeno recente que está virando assunto é o Quiet Quiting. Se traduz na escolha por fazer o mínimo aceitável, em prol dos benefícios de uma qualidade de vida melhor. Ou seja, adotar a...

ler mais
Cloud Native | 4 – DevOps

Cloud Native | 4 – DevOps

Ao lado de Containers, Microsserviços e Entrega Contínua, DevOps está no alicerce do Cloud Native. Hoje desmistificaremos DevOps e espero acabar de uma vez por toda com essa ideia de que é coisa de infra. Antes de começarmos, preciso recorrer à sua própria memória recente. Preciso que você faça uma lista mental das empresas e projetos mais famosos do momento, ou aquelas vagas que gostaria de se candidatar, talvez tenha se candidatado, e tudo aquilo que você tem buscado e visto no LinkedIn. Se você não tem essa memória, sugiro que você vá ao LinkedIn ou sites de vagas e busque as "vagas dos...

ler mais
RabbitMQ Operators | RabbitMQ Messaging Topology Operator for Kubernetes – Tutorial PT-BR

RabbitMQ Operators | RabbitMQ Messaging Topology Operator for Kubernetes – Tutorial PT-BR

No último post sobre Operators, eu falei sobre o RabbitMQ Cluster Operator for Kubernetes, o papel dele é construir um cluster. Uma vez que o cluster está ativo e em operação, é hora de começar a usar esse cluster. Virtual Host, Exchanges, Filas e Binds, afinal quem e quando eu deveria criar esses recursos? Eles devem ser criados previamente durante a construção do cluster? Ou durante o deployment da aplicação? Ou especificamente pela aplicação? Essas dúvidas são super comuns com quem está começando a usar RabbitMQ. E só existem 2 respostas para essa pergunta: "Depende!" é a primeira...

ler mais
MVP | Developer Technologies | 2022-2023

MVP | Developer Technologies | 2022-2023

A quarta nomeação chegou!!!! É sempre um momento de muita gratidão. É sempre momento de olhar para o que construímos nesse último ano. Hoje eu darei continuidade ao papo do ano passado, há exatos 1 ano eu falava de Lock-In e posicionamento, agora é hora de continuar essa conversa. No ano passado falei sobre o posicionamento em relação a Lock-In, PaaS vs IaaS vs On-Premise e o que eu achava disso. Continuarei do post anterior, portanto é preciso lê-lo para entender esse post aqui. Porque escolher Cloud Native? Algo que eu nunca comentei abertamente, não pelo menos aqui do lado de fora, era o...

ler mais
Oficialmente: 20 anos de Carreira!

Oficialmente: 20 anos de Carreira!

No dia 1° de julho de 2002, por volta de 19 horas, momento em que esse post será publicado, eu estava chegando em casa do meu primeiro dia de trabalho na Petrobras. Hoje contarei um pouco desse início, os primeiros anos da minha carreira foram decisivos para o resto dessa jornada. O Brasil estava de ressaca, eu também. Era dia 1° de Julho de 2002, e na véspera a seleção brasileira havia recebido o caneco pelo pentacampeonato, após vencer a Alemanha. Como eu morava em Campos dos Goytacazes, minha cidade natal, que fica ao norte do estado do Rio de Janeiro, me dirigi, por volta das 5:30 da...

ler mais
Cloud Native | 3 – Continuous Delivery

Cloud Native | 3 – Continuous Delivery

Nós já vimos como Cloud Native está próximo de microsserviços. Agora é hora de pensar em colocar esses serviços em produção. Com fazemos isso? Tecnologias Cloud Native permite a criação de aplicações escaláveis, resilientes, observáveis, e modernas em um ambiente extremamente dinâmico. Podendo serem executadas em clouds públicas, privadas ou híbridas. O Stack Cloud Native é abrangente e possui diversas tecnologias diferentes para os mais variados desafios dessa jornada. O landscape é um bom lugar para observarmos essas tencologias. Em todas as áreas abordadas por tecnologias do stack Cloud...

ler mais
Perdemos 17 anos por não entender redes Docker

Perdemos 17 anos por não entender redes Docker

Somos 6390 pessoas no grupo de Docker do telegram. Se cada um de nós perdeu ao menos 1 dia tentando fazer 2 contêineres conversarem então juntos perdemos mais de 17 anos! Esse é um guia prático de redes docker que ajudará a entender esse universo. A missão desse post é trazer os principais conceitos para evitar sofrimento. São conceitos ridiculamente simples, mas que vão poupar horas, dias ou até semanas de cada indivíduo que ler esse post. Como sei isso? Bom, eu ajudo a comunidade docker desde 2016, todo dia, várias vezes por dia. 1 ) Verdade 1: Cada container tem seu próprio IP Se você...

ler mais
RabbitMQ Operators | RabbitMQ Cluster Operator for Kubernetes – Tutorial PT-BR

RabbitMQ Operators | RabbitMQ Cluster Operator for Kubernetes – Tutorial PT-BR

E se eu dissesse para você que você pode, com apenas 1 comando, criar um cluster RabbitMQ dentro do seu Kubernetes, de forma segura e prática? Hoje é a vez de criarmos o seu cluster RabbitMQ com a ajuda do RabbitMQ Cluster Operator for Kubernetes. Se você chegou até aqui se perguntando: Afinal, o que é um Operator? leia esse post aqui. Iniciando os trabalhos Montar um cluster RabbitMQ não é das tarefas mais simples do mundo, então ter uma mãozinha é sem sombra de dúvidas algo interessante. No post passado eu detalhei o que são operators e agora vou dar vida a essa ideia, mostrando de forma...

ler mais
Cloud Native | 2 – A relação com Microservices

Cloud Native | 2 – A relação com Microservices

O que faz Microsserviços estar no coração do Cloud Native? Seria a forma de distribuir aplicações? Seria a forma de lidar com complexidade? Seria pela forma como usa recurso de cloud? Qual é a relação entre Microsserviços e Cloud Native? Hoje vamos abordar essa relação de proximidade! Não podemos falar da história dos Microsserviços sem citar Google e Netflix, berçários do que hoje conhecemos como Microsserviços. Apresentações vagas sobre os conceitos permearam os anos 2000, no entanto cases significantes apareceram apenas na década seguinte. E um dos mais citados é a Netflix. Vou recorrer a...

ler mais
RabbitMQ Operators | Entendendo Kubernetes Operators

RabbitMQ Operators | Entendendo Kubernetes Operators

Embora não seja comum ver conteúdo sobre o assunto, Operators está no coração do Kubernetes e esse definitivamente é um dos temas mais legais na minha opinião no que diz respeito ao projeto. Nessa série composta por 3 posts, vamos abordar step-by-step os 2 operators do RabbitMQ, mas hoje vamos primeiro elucidar o que são Operators e CRD's. Imagina que legal seria poder escrever um manifesto do Kubernetes parecido com isso: Fila do RabbitMQ Cluster do RabbitMQ com 3 nós Usuário do RabbitMQ Cluster PostgreSQL com 3 nós Exemplos de manifestos usando custom resource definitions do Kubernetes Se...

ler mais
Cloud Native | 1 – Definindo Cloud Native

Cloud Native | 1 – Definindo Cloud Native

Ao longo dos últimos anos Cloud Native tem estado em evidência. Há a oportunidade de retrocesso? É hype? Sempre teremos quem defenda que tudo é hype! Por quê com Cloud Native seria diferente? Na real, essas pessoas em geral adiam por anos o estudo por julgaram que algo é hype, até não conseguirem mais se movimentar no mercado sem um determinado conhecimento. Esse é o momento em que muitos optam por fazer uma transição de carreira. Se você não pretende seguir em outra carreira, e sim trabalha com Backend, principalmente .NET, esse post visa mostrar um pouco do universo Cloud Native e mostrar...

ler mais
Cloud Native .NET – Janela de inscrição MAIO/2022

Cloud Native .NET – Janela de inscrição MAIO/2022

O que é a arquitetura? Eu defino como estratégias, táticas e elementos que definem um software. E quando jogo uma definição tão abrangente assim estou dizendo que:A escolha do banco de dados, é arquitetura.A escolha da forma como seu código acessa esse banco de dados, é arquitetura.A forma como você evita que esse banco seja consumido desnecessariamente, usando cache, é arquitetura.Se a aplicação é Web, Desktop, um serviço agendado, ou um embarcada em um vestível como um relógio, isso é arquitetura. Os componentes que compõem essa aplicação, são definidos pela arquitetura.A arquitetura é...

ler mais
Porque as empresas vão continuar buscando seniors ao invés de júniores?

Porque as empresas vão continuar buscando seniors ao invés de júniores?

O apagão na TI é um fenômeno real, mas um fenômeno bem estranho do nosso mercado é a distância entre o JR e o estagiário, ou seja o profissional possível, e o profissional desejável. É sobre esses problemas que vamos discutir hoje. De um lado jovens querendo um emprego na TI, a nova mina e ouro do mercado corporativo. De outro empresas com cada vez mais dificuldade para reter e contratar bons profissionais. Parecia a receita perfeita entre oferta e demanda. Essa não é a realidade que percebemos no mercado. Formar um profissional custa muito, e não há segurança sobre o resultado sobre o...

ler mais
Bloqueio do Telegram – SITREP 02 – Quem vai pagar essa conta é você!

Bloqueio do Telegram – SITREP 02 – Quem vai pagar essa conta é você!

Hoje somos dezenas de milhares de profissionais de tecnologia amontoados em grupos do telegram. Nós nos ajudamos e fazemos da vida do desenvolvedor, devops, infra mais fácil, na medida que ele conta com suporte da própria comunidade. Cada comunidade técnica é composta por um grupo de pessoas aleatórias e malucas que não tem mais nada da vida para fazer #sqn que resolveu dedicar seu tempo a ajudar GRATUITAMENTE outras pessoas que possuem algum tipo de dificuldade de entendimento e de execução. Assim criamos uma rede de suporte e apoio de forma a ajudarmos uns aos outros. Além das comunidades...

ler mais
Bloqueio do Telegram – SITREP 01 – Situação e Plano de ação

Bloqueio do Telegram – SITREP 01 – Situação e Plano de ação

O bloqueio do telegram está causando histeria na comunidade técnica e em grupos privados. Aqui vou abordar 2 temas. Comunidades técnicas e Grupos de Alunos. Contexto Decisão do supremo demanda bloqueio do Telegram no Brasil. Como é realizado o bloqueio? Quando um país bloqueia um serviço de terceiros, ele o faz enviando os endereços e/ou ip's para uma lista de bloqueio. Essa lista é repassada para os provedores de internet. Ou seja o serviço continua no ar, mas nós aqui perdemos o acesso ao serviço. VPN é uma solução? A resolução do supremo prevê multa de R$ 100k para PJ ou PF que continuar...

ler mais
Event Driven Architecture – Lançamento de Módulo

Event Driven Architecture – Lançamento de Módulo

Enfim um dos mais esperados conteúdos do curso de RabbitMQ está no ar. Event Driven Architecture. Promessa desde 2021, o módulo de EDA Concept chega com novidades falando sobre EDA e desde os motivadores que conduziram as arquiteturas até chegar nesse estágio de desacoplamento. Event Driven Architecture pode ser encarado por diversas perspectivas. O nome não é sugestivo o suficiente para explicar uma só coisa. Enquanto o design arquitetural está em formação há quem diga que Event Notification é Event Driven, há quem diga que CQRS é Event Driven, há quem fale que Transferência e Propagação de...

ler mais
Os 6 níveis de maturidade no uso de Containers

Os 6 níveis de maturidade no uso de Containers

Do usuário eventual ao heavy user, Docker consegue entregar diversas experiências de acordo com seu nível de maturidade e conhecimento. Se comparado com outras tecnologias, Docker e Containers em geral são assuntos pequenos, para poucas semanas de estudo. Mas embora a extensão do conhecimento não seja tão grande, a abrangência do seu uso beira o infinito. E cada vez que você aprofunda no uso vai mudando a perspectiva sobre o que é aceitável, certo esperado. Entender os níveis de maturidade ajuda na compreensão de onde você está e onde você pode chegar. E note, eu não estou dizendo que esse...

ler mais
Além das 3 camadas | Containers

Além das 3 camadas | Containers

Docker está para o desenvolvimento de software como o IPOD esteve para a indústria da música. Não inventou a música portátil, mas revolucionou a experiência dos usuários. Se você trabalha com algum backend, java, .NET, node, python, ruby... e docker não está no teu radar, meu amigo... você tá ferrado! Se você nunca ouviu falar de docker, você esteve em uma caverna nos últimos 9 anos. Desde 2013 docker é amado por desenvolvedores de todas as tecnologias. Docker usa algo velho, containers (que já existem desde 2006), para criar um ambiente de execução de aplicações totalmente independente e...

ler mais
RabbitMQ, .NET, OpenTelemetry, Distributed Tracing, Jaeger, Prometheus e Grafana

RabbitMQ, .NET, OpenTelemetry, Distributed Tracing, Jaeger, Prometheus e Grafana

Parece sopa de letrinhas aleatórias né? Mas isso fez algum sentido para você, e achou legal, deixa eu te contar o que fizemos aqui do lado de dentro. Uma das demandas que tenho no curso de RabbitMQ para Aplicações .NET, é trazer conforto e clareza sobre o desenvolvimento de fluxos assíncronos com mensageria. É primordial para desenvolver um bom trabalho, compreender como cada detalhe se comporta, e quais são os impactos de cada decisão. Porque não basta mandar uma mensagem e delegar a culpa para o client, o provider, a abstração ou até mesmo o RabbitMQ. Isso não funciona. No fim do dia,...

ler mais
RabbitMQ | Eficiência | Como jogar dinheiro fora, case da Digital Ocean

RabbitMQ | Eficiência | Como jogar dinheiro fora, case da Digital Ocean

A Digital Ocean é um Cloud Provider famoso e muito usado no mundo todo, mas nem por isso deixaram de cometer o amadorismo de usar bancos de dados como filas. E pior, para atender um throughput pífio! Conclusão: Mesmo sendo owners de infraestrutura, ou seja, com dinheiro infinito para infra, sentiram na pele a dor de ter de aguentar um banco de dados com 15 mil conexões. Com RabbitMQ, não passou de 100! Esse é mais uma demonstração que em casa de ferreiro o espeto é de pau. Eles sentiram a dor, mesmo com dinheiro infinito para infra. Agora imagina você, ou melhor, seu projeto, que está...

ler mais
Cloud Native .NET  – Um overview sobre as mudanças

Cloud Native .NET – Um overview sobre as mudanças

É com muita felicidade e um frio na barriga que anuncio as mudanças para 2022 aqui no gaGO.io. A principal mudança por hora é o rebranding do Docker Definitivo que passa a se chamar Cloud Native .NET é só uma mudança no nome, mas significa muito no que ele transmite. Desde 2019 até agora construímos muita coisa do lado de cá, e encaro como a profissionalização de uma paixão: ajudar desenvolvedores! Ver a transformação no dia-a-dia dos alunos é surreal. É empolgante, é intenso, é inesquecível. Tem arquiteto que concebeu e reestruturou software que ajudou com a vacina, em plena pandemia, teve...

ler mais
Event Driven Or Not? Quando usar Event Driven e quando usar só usar mensageria

Event Driven Or Not? Quando usar Event Driven e quando usar só usar mensageria

Sempre que somos tocados por algum tipo de desenho ou arquitetura que demonstra significativo ganho em um determinado cenário, tendemos a tentar reaproveitar esse mesmo desenho mais pela memória do sucesso passado, do que pela necessidade efetivamente. Aqui está uma casca de banana, e é sobre isso que vamos discutir hoje. A proposta do EDA Event Driven Architecture visa organizar a forma como os fluxos de negócio acontecem em um sistema, privilegiando o desacoplamento usando eventos para notificar outras partes do software em detrimento de chamadas diretas com alto acoplamento. O reflexo...

ler mais
Além das 3 camadas | Componente: CDN e Cache

Além das 3 camadas | Componente: CDN e Cache

Já falamos de práticas e tecnologias, agora vamos falar de um componente o CDN. Ele é fundamental para a internet como a conhecemos hoje. Da netflix que você assiste, ao gaGO.io, você vai encontrar CDN para reduzir a pressão sob as aplicações, e para reduzir a latência entre o conteúdo e você, melhorando sua experiência. É sobre isso que vamos falar hoje. CDN, proxy reverso, Ingress Controllers e afins estão na contramão de um fundamento que aprendemos na faculdade. Quantos mais nós entre cliente e servidor, pior! Essa é uma verdade que só existe na teoria. Na prática esses intermediários...

ler mais
Concorrência e Race Condition com Cache Distribuído: O Workflow correto

Concorrência e Race Condition com Cache Distribuído: O Workflow correto

Se você está vendo cache distribuído pela primeira vez, talvez tenha deduzido qual é a forma adequada de trabalhar com ele. A pergunta que fica é: Você levou em conta a concorrência?. A questão é que quando o cache expira, devemos usar o recurso "lento" para produzir o dado que será cacheado. Mas se estamos falando de aplicações distribuídas, o que impede de 100 usuários de chegarem a uma página que não possui cache no mesmo instante? O que acontece se essas 100 navegações demandarem o acesso ao recurso "lento" para pegar os mesmos dados, fazendo as mesmas queries para obter o mesmo objeto...

ler mais
Além das 3 camadas | Prática: Reduzindo pressão sob a aplicação e banco

Além das 3 camadas | Prática: Reduzindo pressão sob a aplicação e banco

Nessa série de posts estamos furando a bolha, saindo do desenho básico de 3 camadas, indo além. Hora vamos abordar práticas, hora vamos abordar ferramentas. Hoje vamos falar de uma prática: Reduzir a pressão sobre aplicação e banco de dados. Essa é uma prática super comum, mas negligenciada principalmente no período em que você está transitando entre um desenho hyper-conectado ao banco para um desenho mais desacoplado. No mundo real nós usamos técnicas e mais técnicas para reduzir a "pressão" ou o consumo sobre pessoas, ou seja, reduzir o consumo de tempo de indivíduos. Eu, você, seu pai,...

ler mais
Além das 3 camadas | Ferramenta: Redis

Além das 3 camadas | Ferramenta: Redis

Nessa série de posts estamos furando a bolha, saindo do desenho básico de 3 camadas, indo além. Hora vamos abordar práticas, hora vamos abordar ferramentas. Hoje vamos falar de uma ferramenta, o Redis. Ele pode ser seu aliado na hora de hospedar dados pré-processados. Disclaimer sobre a persistência do Redis Leia a página Redis Persistence. Nunca armazene algo no redis que não possa ser perdido.Se o dado só existe no redis, está errado na maioria das vezes.Se o redis cair, ou restartar, perdas de dados são aceitáveis. Se estiver com persistência ligada ainda pode perder o último segundo...

ler mais
Além das 3 camadas | Iniciando os trabalhos

Além das 3 camadas | Iniciando os trabalhos

Se um dia você se questionou sobre o que deveria estudar sobre projetos que vão além de uma Web App, uma API e um Banco de dados aqui vão minhas dicas. Eu separei 3 tecnologias que são matadoras porque ajudam projetos de todos os tamanhos. Dê uma olhada e me diga o que você achou! Por que sair do básico? Web App + Web Api + Banco de dados é a composição básica da maioria dos projetos. Esse é um desenho que vai até algumas dezenas de usuários, talvez até centenas com muito sofrimento. Daí pra frente a gente está falando de gastar rios de dinheiro com infraestrutura para sustentar essa...

ler mais
Processamento Síncrono vs Assíncrono e Black Friday – Case Pan, Kabum e Pichau 2021

Processamento Síncrono vs Assíncrono e Black Friday – Case Pan, Kabum e Pichau 2021

Essa noite aconteceu uma coisa muito chata. Em plena Black Friday, eu saí frustrado por 2 problemas de arquitetura encadeados. De um lado um banco digital que fica offline todo dia durante a madrugada e pior, inclusive na Black Friday. Do outro, um e-commerce com o fluxo de pagamento síncrono, que perdeu uma venda de ~5k, porque não havia um fluxo de retry decente. Mas temos pontos positivos! De outro lado, outro grande e-commerce lidou com o mesmo problema de forma diferente, dessa vez, pela natureza assíncrona, deu tudo certo. De madrugada o pagamento falhou, mas agora pela manhã o banco...

ler mais
Overengineering, BDUF, Complexidade Acidental? Por que estamos usando tantas ferramentas, tecnologias etc?

Overengineering, BDUF, Complexidade Acidental? Por que estamos usando tantas ferramentas, tecnologias etc?

Se você está nesse planeta ativo em alguma comunidade deve ter percebido que todo dia surge uma nova solução que dizem que devemos usar. Docker, Kubernetes, Redis, Jaeger, Helm, RabbitMQ, Kafka, ELK, Kong, NGINX, Traefik, Keycloak, Jenkins, SonarQube... onde isso vai parar? Como deixamos chegar nisso? Isso é para vender cloud? Para vender curso? É sobre isso que vamos debater hoje. Tudo era baseado em tabelas Essa era como o mercado fazia durante toda a década de 2000. Naquela época era comum que os grandes investimentos fossem alocados em grandes clusters de bancos de dados, na Petrobras...

ler mais
Enterprise Application Log – A origem das decisões

Enterprise Application Log – A origem das decisões

Inúmeras vezes eu apresento o Enterprise Application Log e instantaneamente aparece alguém tentando "defender" o Application Insights, como se de alguma forma eu estivesse cometendo uma heresia ao propor qualquer outra coisa. O mais curioso é que essa comparação é superficial e infundada. Hoje vamos entender a estratégia por trás do Enterprise Application Log, vamos entender porque Application Insights não foi chamado para a festa. Presumo que você já conheça o Application Insights do Azure, portanto não vou defini-lo, vou apenas expor as comparações que preciso, e principalmente, entregando...

ler mais
Docker Definitivo – Inscrições dias 11 e 12 de Novembro

Docker Definitivo – Inscrições dias 11 e 12 de Novembro

Após um longo inverno, teremos mais uma janela de inscrição para o Docker Definitivo! Esse é o momento em que você poderá se inscrever para fazer parte da nossa tribo! Um dia eu disse que eu acreditava que Docker mudaria a forma como enxergamos a hospedagem de aplicações. Um dia sonhei que talvez pudéssemos experimentar algo aqui na nossa plataforma. Quando rolou os primeiros boatos dentro do grupo dos MVP's me gerou um frio na barriga. Eu defendo a adoção de Open Source desde 2004, mas daí falarmos de Linux, .NET com Containers Linux? Eu levei algum tempo para me preparar para esse momento....

ler mais
NHibernate em 2022 – Será que faz sentido?

NHibernate em 2022 – Será que faz sentido?

Se você já me viu falar de persistência, você talvez já saiba do que eu estou falando, mas talvez não entenda os argumentos. A história do NHibernate NHibernate é um full featured ORM que nasceu em 2005 como um port do Hibernate do Java aqui na plataforma .NET. O Hibernate do Java nasceu em 2001, e a versão .NET pode herdar, toda a história de erros e acertos do Java, que fez dele um sucesso pelo lado de lá. A comunidade Java naquele momento, estava anos luz à frente da comunidade .NET no que diz respeito à orientação a objetos, não só por ter nascido em 1995 enquanto a gente estava...

ler mais
RPC sob AMQP seduz enquanto mata… sua implantação de mensageria

RPC sob AMQP seduz enquanto mata… sua implantação de mensageria

Se você viu meu último post e se animou por acreditar que usar RPC sob AMQP seja uma ideia incrível, calma que lá vem um balde de água fria! Com toda certeza eu não vou falar bem da abordagem! E se você resolveu que não vai ler, e ainda vai adotar RPC sob AMQP assim mesmo. Esse post é o que os teus colegas trarão para a discussão no trabalho! 🙂 RPC (Remote Procedure Call) sob AMQP, trata-se de usar a infraestrutura de mensageria para implementar um fluxo síncrono de Request/Response sob um o RabbitMQ ou qualquer outra implementação de AMQP. Fluxo Assíncrono Mensageria pode entregar para...

ler mais
Messaging Patterns: RPC – Remote Procedure Call

Messaging Patterns: RPC – Remote Procedure Call

RPC pode parecer sofisticado demais, mas que tal Request/Response? Agora "SOA" familiar? Nem só de total assincronismo vive o mundo da mensageria, há momentos em que precisamos de uma resposta. RPC é a forma mais prática de adotar mensageria, mas é preciso entender as consequências dessa abordagem. Revisão 2 O que vou mostrar aqui é um padrão bem antigo, mas bem confuso para quem está começando. Trata-se do uso de filas para enviar e receber respostas. Enviar um request e receber um response. O fato de ser um padrão conhecido, não o faz dele nem melhor nem pior. No entanto, o uso negligente...

ler mais
O que aprendi acompanhando projetos sem arquitetos

O que aprendi acompanhando projetos sem arquitetos

Esse é um relato dos meus 20 anos no mercado. Por sorte e até ironia do destino, eu vi o papel do arquiteto desde o dia 1 de minha jornada de trabalho. Isso me possibilitou entender que arquitetos e desenvolvedor possuem interesses diferentes. Aqui vou mostrar o que esses anos vendo e ajudando projetos me possibilitou compreender. Não existem deuses! Embora na prática a gente veja arquitetos cheios de ego, e perdão por isso, já estive ocupando essa posição de arrogância. Eu já acreditei que todo desenvolvedor se tornaria arquiteto um dia, e que arquitetura fosse um caminho natural, que fosse...

ler mais
17 ações que você pode fazer hoje, para fracassar seu projeto amanhã

17 ações que você pode fazer hoje, para fracassar seu projeto amanhã

Hoje vamos de dicas para o caos e a destruição. É a atitude pessimista que dá emprego para mais gente no mercado, produz mais trabalho, assim produzimos um ciclo vicioso de projetos ruins, recuperações de projetos, refatorações e posteriormente reconstruções dos mesmos projetos! Essas dicas vão ajudar você empurrar qualquer projeto ladeira à baixo! 1) Comece pela arquitetura Comece escolhendo uma arquitetura que lhe dê mais prazer. Não olhe para nenhum requisito. Não se preocupe se o projeto é mobile, desktop, embarcado, vestível... nada disso é relevante se o seu intuito é fazer esse...

ler mais
Resiliência: Polly vs RabbitMQ

Resiliência: Polly vs RabbitMQ

Fato que eu adoro essas comparações inusitadas! A intenção desse post é poder trazer de forma consistente uma visão que ajude a trazer clareza, e me permita também referenciar um conteúdo mais estruturado em vez de ter de construir toda uma argumentação em locais que propositalmente não possuem esse espaço para isso. Nos últimos meses falando de RabbitMQ eu escutei algumas falácias a respeito do Polly e vamos desmistificar o assunto. Bora falar de resiliência de forma séria. Se você acha que Polly é a solução dos seus problemas na hora de entregar resiliência, senta aqui, vamos conversar! O...

ler mais
Porque Injeção de Dependência importa?

Porque Injeção de Dependência importa?

Algumas coisas são feitas no automático, e se você não entendeu porque o ASP .NET usa Injeção de Dependência by default, você deveria ler esse post. O que vamos entender hoje é porque Injeção de Dependência é importante, e as implicações em não usá-la. Engraçado que esse assunto deveria ser óbvio para os mais velhos na plataforma, mas na verdade não é. A realidade é que uma fração de nós está de fato se perguntando se o que fazemos é o que deveríamos fazer e se há ou não formas mais eficientes ou até inteligentes de fazer o básico. Injeção de Dependência foi um dos assuntos que mais abordei...

ler mais
RabbitMQ Streams com TypeScript e NodeJS

RabbitMQ Streams com TypeScript e NodeJS

Em Julho o RabbitMQ ganhou suporte a Streams. De um lado aproxima o RabbitMQ do Kafka já que possui a mesma estrutura de dados, mas por outra ótica se isola completamente sendo provavelmente o único produto da categoria com suporte a ambos. Mas você sabia que a diferença entre Streams e Queues são enormes? Ao ponto da discussão RabbitMQ vs Kafka sequer fazer muito sentido? Hoje entrego mais um projeto de exemplo para os alunos do curso de RabbitMQ, e dessa vez é uma demo 2 em 1. Além de apresentar RabbitMQ com NodeJS, aproveitei para entregar o suporte a Streams e demonstrar as demandas...

ler mais
DESCONTINUADO | 10 domínios para você usar à vontade… só no localhost

DESCONTINUADO | 10 domínios para você usar à vontade… só no localhost

Se você quer validar um proxy reverso, hospedar diversas aplicações no IIS para testar, enfim, estou compartilhando com vocês 10 domínios que apontam para 127.0.0.1. NOTA Esses endereços foram descontinuados, por favor utilize o nip.io https://nip.io/ A ideia original Respectivamente: localhost1.gago.iolocalhost2.gago.io localhost3.gago.io localhost4.gago.io localhost5.gago.io localhost6.gago.io localhost7.gago.io localhost8.gago.io localhost9.gago.io localhost10.gago.io Ao realizar uma requisição para localhost6.gago.io, o primeiro passo do browser é buscar o IP desse endereço, o DNS...

ler mais
Docker Desktop pago? Agora é o fim! Só pode! Será mesmo?

Docker Desktop pago? Agora é o fim! Só pode! Será mesmo?

Toda notícia ao redor da Docker Inc gera um transtorno absurdo. A equipe de comunicação e marketing está de parabéns! Com uma gestão imagem que beira o nulo. Na vez passada o não suporte ao dockershim, pela equipe do Kubernetes, respingou sobre a Docker como se o Kubernetes perdesse suporte à containers, ou como se esse ecosssitema fosse frágil o suficiente para uma possível morte da Docker significar alguma coisa. Agora a novidade é a notícia do Docker Desktop pago! Está na hora de entendermos o que tudo isso significa. TL;DR; Docker Desktop deixa de ser gratuito e passa a ser pago. Docker...

ler mais
Certificado, TLS, SSL, como funciona?

Certificado, TLS, SSL, como funciona?

Você já deve ter ouvido em algum lugar que precisa colocar um certificado, ou habilitar o SSL em algum lugar, certo? A intenção é tornar esse assunto menos abstrato com a intenção de trazer clareza sobre como as coisas funcionam. Você já dever ter vivenciado, como protagonista ou mero espectador de cenários onde tudo parou de funcionar, sem explicação alguma, e após algum tempo descobriram que eram os certificados que haviam expirado? Pois bem... hoje você vai entender como e por que, mesmo que não aconteça nada, as coisas sim podem parar de funcionar! SSL ou TLS? Hoje em dia o nome SSL...

ler mais
Mensageria já existia quando Jesus nasceu…

Mensageria já existia quando Jesus nasceu…

Até hoje eu consigo me surpreender com quão "novo" é o conceito de filas e troca de mensagens assíncronas para programadores. Hoje eu vou mostrar como esse conceito já está presente na nossa sociedade desde antes do nascimento de Jesus Cristo e você não percebeu ainda. Mensagens Assíncronas Na nossa sociedade moderna, mensagens assíncronas acontecem o tempo todo, mas muito antes da existência do computador já poderíamos ver esse tipo de atividade. Uma carta, nada mais é do que uma mensagem assíncrona, enviada via correios, por exemplo. Mas isso pode parecer "recente" demais. Desde que...

ler mais
EDA – Event Driven Architecture: Não confunda eventos com comandos

EDA – Event Driven Architecture: Não confunda eventos com comandos

A diferenciação entre eventos e comandos foi um tema discutido dentro do grupo de arquitetura do Docker Definitivo, e como um tema que gera confusão e ceticismo em alguns aspectos, é hora da gente sair da discussão sobre a parte visível desse iceberg e aprofundarmos na execução e nos cuidados a respeito do tamanho de mensagens e principalmente na diferenciação entre evento e comando. Quanto vai custar? No primeiro contato com mensageria você fica maravilhado com esse novo mundo. Sendo bem realista, encontrar em um único conjunto de estratégias: disponibilidade, eficiência, resiliência,...

ler mais
Docker FAQ by gaGO.io

Docker FAQ by gaGO.io

Se você está dando seus primeiros passos com Docker ou quer começar, esse é um post de "boas vindas". Eu conheci docker em 2015, comecei a estudar de fato em dezembro desse mesmo ano. Logo em janeiro de 2016 comecei uma série de conteúdos sobre Docker. Principalmente destinado à comunidade .NET. Docker aqui era um tema muito distante nessa época. Eu resolvi abraçar a causa e daí surgiu a série Docker de A a Z. De 2016 até hoje eu ajudo na comunidade, ensinando docker, seja como parte de treinamento ou gratuitamente em grupos de discussão ou em lives e vídeos para o youtube ou aqui no...

ler mais
RabbitMQ e Kubernetes | Rivais ou Aliados?

RabbitMQ e Kubernetes | Rivais ou Aliados?

Se, ambos, RabbitMQ e Kubernetes promovem um melhor uso de sua infraestrutura, trazem resiliência, escalabilidade, performance, será que eles não seriam concorrentes? Como eles concorrem? Eles podem colaborar? Entendendo o papel de cada um RabbitMQ RabbitMQ é um message broker. O papel dele é receber uma mensagem, armazená-la de forma segura, para que imediatamente ou tempos depois, um consumidor receba-a para processá-la. O RabbitMQ faz o controle de qual mensagem está indo para qual consumidor, de forma a não produzir processamento desnecessário no consumo de uma mesma fila. Ou seja, cada...

ler mais
RabbitMQ é Resiliente? [video]

RabbitMQ é Resiliente? [video]

Será que o RabbitMQ de fato é seguro? O que acontece quando ele cai? O que acontece se minha aplicação cai? Será que o RabbitMQ persiste os dados no disco? Ou o RabbitMQ trabalha somente com dados em memória? Todas essas perguntas são pertinentes, e vou abordá-las nesse vídeo.A maior parte do meu conteúdo é o mesmo em todas as redes sociais.  Mas algumas delas me permitem criar conteúdo mais focado na audiência e interesse de cada plataforma. Assim, instagram, facebook, linkedin e Youtube possuem conteúdos diferentes. Siga para ficar por dentro de tudo.

ler mais
Streams no RabbitMQ

Streams no RabbitMQ

Uma novidade que vai deixar aqueles que ficavam comparando RabbitMQ e Kafka mais perdidos ainda. No dia 9 de julho saiu um o RabbitMQ 3.9.0 RC que conta com suporte a Streams. A comparação direta era descabida até então: Enquanto o Kafka trabalha com streams o RabbitMQ lida com filas. Alguns comportamentos fundamentais nunca foram possíveis no Kafka, da mesma forma que alguns dos comportamentos do Kafka nunca foram possíveis com RabbitMQ. Até agora! Na versão 3.9 que saiu no último dia 9 de Julho, um recurso me chamou a atenção porque não teve alarde algum. Trata-se do suporte à streams....

ler mais
Kafka vs RabbitMQ

Kafka vs RabbitMQ

Vamos direto ao ponto: São coisas diferentes, se você está comparando ambos ou está querendo decidir entre eles, você não entendeu algum deles ou não entendeu nenhum dos dois. Mentiras ditas sobre RabbitMQ Ao longo dos últimos anos eu ouvi barbaridades, das coisas mais descabidas possíveis e imagináveis. Nessa parte eu quero trabalhar essa desinformação com informações úteis. 1 | Com Kafka você trabalha de forma reativa, e com RabbitMQ você precisa pegar mensagens. Mentira! Sob o aspecto de reatividade ambos trabalham de forma idêntica com um canal pre-estabelecido sob um socket usando um...

ler mais
RabbitMQ para Aplicações .NET – a MasterClass virou Curso

RabbitMQ para Aplicações .NET – a MasterClass virou Curso

Em 2013 eu tinha o desafio de processar milhões de músicas. Eu não tinha uma restrição de tempo, poderia levar um dia ou uma semana. Mas eu precisava assegurar que os 4 consumidores planejados, não concorressem processando os mesmos álbuns. Também precisava assegurar que se o processamento fosse interrompido, eu pudesse retomar de onde parei. Assim começou minha relação com o RabbitMQ. Eu buscava RESILIÊNCIA e CONFIABILIDADE, e acabei ganhando de brinde ESCALABILIDADE, EFICIÊNCIA e DISPONIBILIDADE. Hoje a empresa se chama Claro Música, mas naquela época se chamava iMusica. Eu cuidava do...

ler mais
MVP | Developer Technologies | 2021-2022

MVP | Developer Technologies | 2021-2022

A terceira nomeação chegou!!!! É sempre um momento de muita gratidão. É sempre momento de olhar para o que construímos nesse último ano. No ano passado falei como foi minha primeira renovação. Agora começamos um novo ciclo, e quero compartilhar algumas coisas com você. Uma bandeira clara O primeiro passo é compartilhar minhas bandeiras e minhas causas. Acredito que assim, nesse post mais pessoal você possa entender melhor como eu me posiciono e o que eu defendo. Sobre Lock-In Seria ousado dizer que nunca aceitei bem a relação com cloud providers. Encaro Azure, AWS e GCP como parceiros...

ler mais
SQL Server 2017 e 2019 +Automações | Update JUN/2021

SQL Server 2017 e 2019 +Automações | Update JUN/2021

Desde julho de 2018 quando produzi a primeira versão dessa imagem, muita coisa aconteceu. Eu imaginava que em alguns meses ou no máximo em um ano, esse trabalho pudesse se tornar desnecessário. Por isso hoje estou lançando um update nessa imagem, trazendo SQL Server 2017 e 2019. A imagem oficial da Microsoft traz consigo o SQL Server. Quando lancei a primeira versão em julho/agosto de 2018 a Microsoft lançara o SQL Server 2016 como uma imagem docker e a minha intenção era mostrar que poderíamos ter algo tão funcional e tão automatizável quanto imagens famosas como MySQL, MariaDB e...

ler mais
Entendendo RabbitMQ #2 – Caso de Estudo – Envio de Emails

Entendendo RabbitMQ #2 – Caso de Estudo – Envio de Emails

Essa segunda série de posts sobre RabbitMQ visa mostrar como podemos usar RabbitMQ em cenários que não demandam escala. É para explodir a cabeça de quem diz que RabbitMQ é um canhão para matar uma formiga. Na série anterior eu abordei em mais de 11 posts sobre RabbitMQ com foco nos mais variados campos de atuação. Mas de lá para cá muita coisa aconteceu. Durante uma das lives internas do Docker Definitivo um aluno disse que antes achava que RabbitMQ era algo para projetos enormes, e isso me chamou muito a atenção. No dia-a-dia a gente esbarra sempre no ditado: "É um tiro de canhão para matar...

ler mais
Você sabe se escolheu o data center certo?

Você sabe se escolheu o data center certo?

Na jornada de criar aplicações globais, o arquiteto precisa prover dados que guiem as estratégias de crescimento de qualquer negócio. Esses dados interferem na forma como projetamos disponibilidade, cache, e recursos específicos para atender regiões específicas do globo. Mas e aí, você sabe de onde está vindo o acesso às suas aplicações e serviços? Você já sabe qual o próximo passo? Hoje eu vou mostrar como aproveitei recursos e dados que já estavam disponíveis para mim, para criar uma visão que me permite entender o tráfego para os meus servidores. Contexto O Windows Server me expulsou dele...

ler mais
Entendendo RabbitMQ #1 – Reduzindo e/ou Eliminando Acoplamento

Entendendo RabbitMQ #1 – Reduzindo e/ou Eliminando Acoplamento

Ao esbarrar com uma nova tecnologia, você pode se perguntar: Será que é para mim? Com RabbitMQ não é diferente. Mas será que RabbitMQ é para o teu projeto? Nesse post eu vou mostrar minha visão sobre esse questionamento, mostrando os benefícios e quais são os dilemas a respeito do uso de RabbitMQ. Disclaimer - RabbitMQ é RabbitMQ A primeira coisa que precisa estar bem clara é que se você usa ou já usou Azure Service Bus ou Kafka, mas nunca usou RabbitMQ, seu conhecimento tende a ser pouco ou nenhum. sobre o RabbitMQ. O que você aproveita aqui são seus conhecimentos sobre aplicações...

ler mais
Tutorial: Trabalhando com Secret Files no Jenkins Pipeline

Tutorial: Trabalhando com Secret Files no Jenkins Pipeline

Você já se perguntou como usar arquivos de configurações sensíveis em pipelines de CI/CD sem que isso crie uma vulnerabilidade no seu servidor ou no seu repositório GIT? Afinal, como lidar com arquivos de configuração sensíveis em pipelines Jenkins? METAEsse post é direcionado para quem tem a demanda de trabalhar com secrets e arquivos de configuração sensíveis com Jenkins Pipeline.O que vemos aqui pode ser usado em pipelines de Continous Integragion, Continous Delivery, Continous Deployment, pipelines puramente de infraestrutura e qualquer caso em que precisamos de arquivos especiais e...

ler mais
Enterprise Application Log v4

Enterprise Application Log v4

Hoje chegamos à versão 4 do nosso stack de observabilidade. Contamos com o upgrade para a versão 7.13.0 de todos os recursos da Elastic e a adição de novos componentes entre eles o Application Performance Monitoring (APM). Motivador Monitoramento sempre foi um desafio. E cenários on premise ou baseados em IaaS são mais desafiadores ainda. Mas nem por isso não é possível trabalhar de forma profissional. A primeira vez que coloquei no ar o ELK stack, foi em 2013. Após uma experiência fracassada com o Sentry, recebi uma recomendação e parei para avaliar esse stack. Comparado com o Sentry, de...

ler mais
EasyNetQ em perspectiva

EasyNetQ em perspectiva

Abstrações são desenhadas para resolver problemas e abstrair um ou mais aspectos de uma implementação. Uma abstração pode entregar redução de complexidade, maior coesão, configuração facilitada, adaptação e até mesmo suprimir aquilo que não nos é relevante quando um novo padrão emerge do seu próprio uso. Hoje o debate é sobre o EasyNetQ, uma abstração de muito sucesso aqui na comunidade .NET. Conta hoje com 8.6 milhões de downloads no nuget.org (link), enquanto o provider nativo RabbitMQ.Client possui seus 53 milhões (link). É um número surpreendente, visto que a abstração depende do...

ler mais
Docker Definitivo – Turma de Abril/2021

Docker Definitivo – Turma de Abril/2021

Afinal é para dev? É para DevOps? É para Ops? O que é essa bagaça? Vamos falar sobre isso hoje. Não é nem um pouco novidade que eu cuido do Docker Definitivo e hoje estou 100% dedicado a esse projeto. Mas o que é o Docker Definitivo? Bom, vamos começar pelo nome: Docker Definitivo. Docker é o novo sistema operacional onde nossas aplicações rodam. Já é o caminho natural da maioria dos deployments .NET dos projetos que eu tenho contato. E isso se dá pela natureza de estar próximo da galera que quer esse tipo de tranquilidade e está disposta a abraçar o desafio e desafiar o status quo imposto...

ler mais
Arquitetura de Software – 10 anos de Facebook

Arquitetura de Software – 10 anos de Facebook

No dia 1° de Abril de 2011 eu fundei um grupo de arquitetura que amanhã, no último dia 1° completou 10 anos. É sobre essa história que vou falar hoje. O ano era 2010, e eu já estava cansado dos mesmos assuntos, do bairrismo. Entrar na comunidade naquela época foi um desafio. Os assuntos estavam rondando a mesma temática e falar de alguns projetos Open Source, ou mesmo compartilhar minha visão de mundo era muito difícil. Eu, como estava chegando, via críticas a tudo que eu defendia e acreditava, sinceramente parecia pessoal. O bairrismo era esquisito, não era possível se opor sem tomar...

ler mais
Entrypoint vs CMD – v2 – Conteinerizando o Kubectl

Entrypoint vs CMD – v2 – Conteinerizando o Kubectl

Se você precisa interagir com um cluster kubernetes, você já deve ter ouvido falar do Kubectl (o Cube Control). Hoje eu vou abordar os conceitos de Entrypoint e CMD, e vou mostrar como eu conteinerizei o Kubectl em uma imagem docker, vou explicar o porquê e vou te mostrar o repositório do github com todo esse rolê. META Esse post destina-se a todo e qualquer usuário de docker que queira entender Entrypoint e CMD. Kubectl entra nessa historia como apenas como um exemplo prático. Entendendo o Kubectl O que é? Kubectl é um utilitário de linha de comando. Ele serve para falar com o Kubernetes....

ler mais
Habemus Kubernetes

Habemus Kubernetes

Hoje eu estou muito feliz por fazer esse anúncio por aqui. Oficialmente estamos subindo as primeiras aulas de Kubernetes no Docker Definitivo, hoje também temos live no canal .NET, falando do Hub de Eventos e em breve teremos conteúdo aqui no gaGO.io que abordam direta ou indiretamente o tema também. Quando eu comecei o Docker Definitivo, eu conversava com o Renato Groffe sobre o que eu queria construir: A jornada do arquiteto. Quem quer que passasse pelo Docker Definitivo teria a oportunidade de sair dali pronto pra entender, fazer e trabalhar com rocket science! Pronto para entrar em...

ler mais
Hub de Eventos

Hub de Eventos

Na quinta-feira, dia 18/Março/2021 vamos falar do Hub de eventos que produzi para atender uma demanda particular. Eu não precisava de extrema performance e redundância, mas e se precisasse? Um assunto que eu estava abordando em Janeiro era o Hub, que agora vira conteúdo no Docker Definitivo. Mas também vira conteúdo aqui fora, claro que é impossível entregar a mesma profundidade aqui fora, mesmo em uma live de 8 horas, imagina uma de 4 horas, mas é o que fizemos nesse dia. Contexto Hoje eu trabalho usando diversas aplicações especialistas para compor todo o stack que dá suporte ao Docker...

ler mais
MongoDump e MongoRestore com Docker

MongoDump e MongoRestore com Docker

Recentemente produzi a Jornada Dev Pro e foi um evento que teve uma aplicação de suporte. Embora funcionalmente não tenha atendido minhas expectativas, o projeto atendeu bem à seu propósito. Agora é hora de migrar essa infra para outro servidor, e aí? Como lidar com backup/restore do mongodb? Audiência Esse post serve a todos que possuem instancias MongoDB em containers ou não, que precisam realizar operações de backup/restore.O emprego de Docker narrado nesse post, se dá para executar os utilitários mongodump e mongorestore.O que está descrito aqui serve para qualquer tipo de instancia...

ler mais
.NET Microservices Architecture Guidance | 3 Ebooks Gratuitos

.NET Microservices Architecture Guidance | 3 Ebooks Gratuitos

A abundância de conteúdo descentralizado e a velocidade com que o mercado avança gera desconforto em qualquer um. Encontrar guias que levem de um ponto A a um ponto B é o desavio de livros, blogs, produtores de conteúdo gratuito e pago. E eu me incluo nisso. Aqui apresento 3 ebooks que ajudam nessa jornada. Hoje, embora esteja me recuperando de uma gripe ferrada, que inclusive parecia COVID e me levou a fazer exames, um aluno do Docker Definitivo que entrou em Dezembro e está conosco na comunidade acompanhando nossos trabalhos compartilhou algo muito legal em nosso grupo privado. O Rodrigo...

ler mais
Publish com VS em produção: Impactos e Consequências

Publish com VS em produção: Impactos e Consequências

A Microsoft sem sombra de dúvidas é uma empresa com um foco incrível no desenvolvedor. Diariamente recebemos algum tipo de update, feature, novo produto ou projeto para ajudar no nosso dia-a-dia. O Visual Studio é uma dessas IDE's incríveis, que fazem tudo por você. E se você já me viu criando um projeto com Docker Compose e .NET Core, viu o quanto que é de fato simples e fácil. Um dos recursos adoráveis para quem está começando é o publish. O Visual Studio dá suporte à diversos perfís de publicação que por sua vez podem fazer milhares de coisas diferentes. E isso é bom? Funciona? Sim,...

ler mais
A Jornada DEV PRO

A Jornada DEV PRO

Ao longo dos últimos anos eu vi muitos desenvolvedores batendo cabeça, cada do seu jeito. Não foram nem uma, nem duas, nem três vezes em que vi profissionais desdenhando de projetos com Redis, RabbitMQ, Kong, Keycloak, ELK Stack e diversas outras tecnologias, eles dizem: "É um canhão para matar uma formiga". Eu acredito que essa frase seja uma maldição, um feitiço aqui no mundo da tecnologia. Ela fala muito mais sobre quem a diz do que sobre o cenário em questão. É o mesmo que justificar para si mesmo que teu projeto não precisa do melhor, ou ou até que você mesmo não seja digno do melhor. A...

ler mais
O CÓDIGO – SEXTA – 15/JAN

O CÓDIGO – SEXTA – 15/JAN

8:30 - Dicionário Docker - Entendendo esses nomes novos Container, Imagem, Kubernetes, Docker, Kernel, Distribuição, DNS, Proxy Reverso, Container Registry... afinal, o que é isso? 14:00 - Containers vs PaaS Vamos comparar e analisar as possibilidades com Containers e com PaaS. 20:00 - Resumo da Semana Dessa vez em formato light, vamos para o instagram falar sobre as novidades da semana. Links Youtube | Facebook | Linkedin | Instagram

ler mais
Kubernetes em C#, seria possível?

Kubernetes em C#, seria possível?

Você já pensou em criar seu próprio Kubernetes em C#? Hoje eu vou mostrar como você pode dar os primeiros passos nessa direção. Introdução O Docker, assim como o Containerd possuem API´s. Essas API´s permitem que você lide com containers da forma que bem entender. Você tanto pode criar containers, dropar containers, reiniciar containers e fazer o que que quiser. Os recursos estão disponíveis para todos nós. Um ponto importante em comum é que essas API´s são gRPC. E essa é uma característica que habilita qualquer linguagem que suporte gRPC a operar e gerenciar tanto o docker quanto o...

ler mais
O CÓDIGO – QUINTA – 14/JAN

O CÓDIGO – QUINTA – 14/JAN

8:30 - Poltys - Decisões de Arquitetura de um Web Crawler. Hoje eu vou detalhar algumas decisões e seus argumentos para que eu não usasse simplesmente o selenium grid e como fiz um desenho para um cliente. Esse projeto está em andamento. 14:30 - hub.gago.io - Um hub de webhooks. Principais decisões e meus argumentos. 19:00 - Youtube downloader - Pipeline de filas Como surgiu essa ideia, de onde foi tirada e porque criar algo assim. Links Youtube | Facebook | Linkedin | Instagram

ler mais
RabbitMQ – Guia de Estudo Gratuito 2021

RabbitMQ – Guia de Estudo Gratuito 2021

RabbitMQ é simples e incrível. São apenas 4 componentes. Relativamente simples, mas cada um tem detalhes que escondem ouro. Se você conhece estruturas de filas, pode pensar que já sabe do que se trata. E é aí que mora o engano. O RabbitMQ não é simplesmente uma infraestrutura de filas, é um Message Broker. Essa categoria exige que tenha habilidades que vão muito além de simplesmente possuir filas FIFO. Há detalhes que levariam semanas ou meses para implementar e anos para estabilizar, dependendo da linguagem. Por isso defendo seu uso nos cenários mais variados. Por volta de 2013 eu tive meu...

ler mais
Docker Definitivo – Última turma 2020

Docker Definitivo – Última turma 2020

Quando eu idealizei o Docker Definitivo eu me propus a resolver, em escala, um problema que eu havia encontrado diversas vezes, em diversos times, em diversas restruturações: Só conhecer aplicação web e banco de dados. Como já dizia o ditado, para quem só sabe usar martelo, todo problema é um prego! O dilema das bolhas Quando o desenvolvedor chega ao mercado, em geral vindo da faculdade, ele leva algum tempo até entender a dinâmica das aplicações de linha de negócio (LOB - Line of Business). Ele leva algum tempo para entender como compomos design patterns, como projetamos segurança, como...

ler mais
Kubernetes sem Docker! É o fim do docker?

Kubernetes sem Docker! É o fim do docker?

Ontem a comunidade parou diante da notícia de que o Kubernetes não daria mais suporte ao Docker como Container Runtime. Mas afinal, qual o impacto real dessa decisão na sua vida? Como isso influencia seu dia-a-dia? Para produzir alguma explicação minimamente consistente, precisamos entender quais recursos cada um tem, para depois podemos analisar o que está acontecendo. Kubernetes Kubernetes foi pensado como orquestrador de containers altamente extensível. Ao ponto de que o Container Runtime também não é dele. É um contrato, uma interface chamada de CRI (Container Runtime Interface). Isso...

ler mais
Service Mesh vs API Gateway vs Proxy Reverso

Service Mesh vs API Gateway vs Proxy Reverso

Durante a live de kong da semana passada rolou uma dúvida bem pertinente, mas como a live já estava com 3 horas e 30 min, não dava para continuar por mais 2 horas para conseguir contextualizar e falar sobre o tema. Então resolvi escrever esse post. Na prática eu decidi que ia escrever esse post na própria sexta, mas eu não tive tempo de colocar a mão nisso nesses dias então resolvi fazer isso agora no domingo, já que fui relembrado, ao fazer a indexação do vídeo no youtube, e sinceramente eu já havia me esquecido do assunto. Então vamos entender o contexto: Wiluey Queiroz pergunta: Istio +...

ler mais
Abstrações duplicadas, quem nunca?

Abstrações duplicadas, quem nunca?

Quando uma abstração está exercendo seu papel, seu código tende a cada vez parecer mais simples. Ao olhar desatento pode parecer até simplista. O problema é que essa simplicidade ao mesmo tempo que aumenta a produtividade, produz ansiedade e afeta quem depende de complexidade para programar. No post anterior, Abstrações e seu ciclo evolutivo, eu abordei uma ideia que até cheguei a colocar em prática, mas não tive tempo usando-a para tirar conclusões mais elaboradas sobre o que acontece no dia-a-dia. Mas dessa vez eu vou falar sobre algo que tive de lidar em ~2013. Qual era o problema? Eu...

ler mais
Abstrações e seu ciclo evolutivo

Abstrações e seu ciclo evolutivo

Uma das ideias que tenho amadurecido ao longo dos últimos anos está ligado às implementações de mecanismos arquiteturais e abstrações. Em Abstrações – Tradeoffs e co-responsabilidade eu falei sobre o que são abstrações boas, abstrações ruins, ponderei sobre quando criá-las e o que ela tem de ter para ser considerada eficiente e eficaz. Ao mesmo passo no evento Modelagem de Frameworks e Abstrações no canal .NET eu mostrei algumas decisões que encontramos em alguns frameworks importantes e vimos como essas decisões levam em conta a experiência de quem consome essas abstrações. Nesses textos eu...

ler mais
Be Welcome .NET 5

Be Welcome .NET 5

É incrível ver que mesmo diante do dilema de uma mudança abrupta de rotina, o calendário de Releases do .NET 5 se manteve intacto. Temos uma mudança incrível na plataforma e enfim chegou o .NET 5! O Release Candidate 2 do .NET 5 já é SUPORTADO EM PRODUÇÃO pela Microsoft. Daniel Roth, Principal Program Manager, ASP.NET é categórico em sua publicação "ASP.NET Core updates in .NET 5 Release Candidate 2": ".NET 5 Release Candidate 2 (RC2) is now available and is ready for evaluation. .NET 5 RC2 is a “go live” release, meaning it’s supported in production."— Daniel Roth, Principal Program...

ler mais
Register/Resolver e suas implicações para a modelagem e reaproveitamento

Register/Resolver e suas implicações para a modelagem e reaproveitamento

Você já notou que desde a chegada do .NET Core, consistentemente reaproveitamos menos nossas classes, principalmente de infraestrutura. Escrevemos mais classes e cada vez reaproveitamos menos nosso código? Bom se você não notou isso, então ao invés de 1 problema, temos 2! Quando você desenha uma classe ela está ali para prover funcionalidade para quem a consome. Sempre que construo uma classe eu penso não só nas suas responsabilidades, mas também em como ela será consumida. A fase de lapidação que detalho, por exemplo no RingBuffer (post) e projeto Oragon.Common.RingBuffer (GitHub), trata-se...

ler mais
Como perder mensagens com RabbitMQ

Como perder mensagens com RabbitMQ

É comum falarmos sobre receitas de sucesso e como resolver problemas, mas será que você está fazendo essas coisas, está perdendo mensagens e vai culpar o RabbitMQ por isso? Se liga nessas dicas, pois se você está perdendo mensagens com RabbitMQ, a culpa é totalmente sua! E vou mostrar como você pode perder mensagens para que isso não ocorra mais. Por que mensagens são perdidas? O RabbitMQ é um eficiente message broker, no entanto você precisa ficar atento à forma de uso, pois ele não te obriga e nem possui configuração que evite, by default, que você tome decisões de implantação ou uso...

ler mais
Enterprise Application Log + Access Log NGINX

Enterprise Application Log + Access Log NGINX

Embora esse tutorial trate detalhadamente de configurações do NGINX e LogStash, no lugar do NGINX você pode usar qualquer aplicação que produza log em textos e que seja possível manipular o formato dos logs. Passo 1 - Escrever o log em formato JSON Nesse passo vamos editar o arquivo de configuração para editar o formato do output do NGINX. ... http { ... log_format main escape=json '{' ' "time": "$time_local",' ' "status": "$status",' ' "http_x_real_ip": "$http_x_real_ip",' ' "realip_remote_addr": "$http_cf_connecting_ip",' ' "proxy_add_x_forwarded_for": "$proxy_add_x_forwarded_for",' '...

ler mais
Ring Buffer – Antecipe, otimize e evite custos excessivos

Ring Buffer – Antecipe, otimize e evite custos excessivos

Ring Buffer, também chamado de Circular Buffer é uma estrutura de dados muito poderosa. Seu nome já traz o spoiler e entrega o ouro, afinal não deixa de ser um buffer, só que trabalhando em formato de anel/circular. Se você não faz ideia do que seja, vem comigo nessa viagem pois vamos dissecar o assunto e ainda compará-la ao processo de uberização dos objetos custosos. Entendendo a estrutura Ring Buffer poderia ser considerado o Uber das estruturas de dados. Trata-se de um buffer em estrutura circular ou de anel (ring). Tem ligeiras semelhanças com uma fila (FIFO lembra?), no entanto, ao...

ler mais
MVP | Developer Technologies | 2020-2021

MVP | Developer Technologies | 2020-2021

Em Outubro de 2018 eu recebi o primeiro prêmio Microsoft Most Valuable Professional! Como faltava pouco para a renovação (maio, com resultado em 1° de julho) minha renovação havia sido marcada para 2020. E agora estou aqui para contar um pouco sobre o programa e essa a renovação. A primeira coisa que precisa estar clara é que MVP é um prêmio sobre suas contribuições e colaborações envolvendo tecnologias Microsoft. MVP não é um cargo, não é uma função, nós não somos pagos para absolutamente nada. Outro ponto é que o programa, não é uma certificação. Ou seja, não atesta tanto a qualidade...

ler mais
Azure Functions + Containers (Parte 2/2)

Azure Functions + Containers (Parte 2/2)

No post passado o foco estava nos Agnostic Services e no uso de containers. Agora é hora de olharmos outra questão mais braçal. Rodar Azure Functions 3 com Containers, uma tarefa que deveria ser trivial, mas não é. Nossa jornada começa com o tutorial Criar uma função no Linux usando um contêiner personalizado, onde no step "Configurar o ambiente local" temos o passo de instalação do "O Azure Functions Core Tools versão 2.7.1846 ou uma versão 2.x posterior.", que nos redireciona para o post "Trabalhar com o Azure Functions Core Tools". Esse step nos dá 2 opções, Azure Functions 2 ou 3. Para...

ler mais
Azure Functions + Containers (Parte 1/2)

Azure Functions + Containers (Parte 1/2)

Certa vez rolou uma discussão sobre Function as a Service (FaaS) e Containers questionando se um suplantaria o outro, ou se seríamos capazes de ignorar um em função do outro. Minha resposta curta e objetiva é: Não! Functions e Containers se complementam. Sempre que olharmos para Function as a Service, o Lock-in bate à sua porta. Lock-in é um problema? Sim! Pode ser, da mesma forma como não! Pode simplesmente não significar absolutamente nada. Lock-In é um problema quando estar preso a um vendor, não fizer parte do seu planejamento de risco. Ou você aceitou estar preso ao vendor, e essa...

ler mais
Dockerfiles: Entrypoint vs CMD?

Dockerfiles: Entrypoint vs CMD?

Você viu Entrypoint e CMD em algum lugar, seja em um dockerfile ou em um docker run, mas não faz a ideia do que seja? Vem comigo, é mais simples do que você imagina. Esse é o típico cenário em que a resposta é mais idiota do que você possa imaginar. É algo que não é nem sofisticado, nem complexo, mas gera confusão. Entrypoint e CMD só existem de forma separada para facilitar nossas vidas. Nada mais. Quando um container é inicializado, o que será executado é a soma de Entrypoint e CMD. Então em um dockerfile: ... ENTRYPOINT ["dotnet", "suaapp.dll"] CMD ["meuparametro"] ... O resultado da...

ler mais
Comunidade Solidária Microsoft

Comunidade Solidária Microsoft

Tudo bem aí? Tá sabendo da Semana Nacional de Tecnologia? Nessa segunda-feira começou a Semana Nacional de Tecnologia. Sob o slogan "Usando conhecimento para transformar o mundo". Antes de mais nada, o que vem a ser esse evento? É gratuitoÉ onlineTransmitido via Microsoft TeamsMais de 30 horas de palestrasPromovido por mais de 11 comunidades As inscrições para o evento acontecem no sympla. Eu vou colocar o link no final pois preciso explicar como funciona. Tudo fica mais fácil depois de explicar, eu prometo!A comunidade solidária No tópico acima eu disse que o evento é gratuito, certo?! Sim,...

ler mais
Docker no WSL² – Walkthrough

Docker no WSL² – Walkthrough

No post anterior eu contei um pouco da história do projeto, mas agora é hora de olharmos para ele de fato. Que tal um passeio no parque com o WSL2? Enfim Generally Available do WSL2 que chega ao Windows 10 na versão 2004 Esse texto era parte do post anterior Enfim Generally Available do WSL2 que chega ao Windows 10 na versão 2004. Resolvi quebrar para entregar aqui um passo-a-passo, enquanto no outro post eu tenho muito mais a intenção de contextualizar sobre a relevância do assunto. Aqui vamos abordar como instalar e rodar seus primeiros containers com WSL2. Windows 10 - Versão 2004 Uma vez...

ler mais
Enfim Generally Available do WSL2 que chega ao Windows 10 na versão 2004

Enfim Generally Available do WSL2 que chega ao Windows 10 na versão 2004

A maior expectativa que eu tinha nos últimos anos era esse lançamento: WSL2 em Generally Available. Ficou fantástico! Antes de falarmos de WSL2 precisamos falar de WSL e do WSL1 e sua história na Microsoft. Um pouco da história do WSL WSL1 chega no Microsoft Build 2016 para explodir a cabeça de todos. A foto do Satya Nadella e ao fundo o slide com Microsoft ❤️ Linux é emblemática. Mostra uma nova era para a Microsoft, mas uma nova era para nós, desenvolvedores que usam sua plataforma. Na época do anúncio se chamava Bash on Ubuntu on Windows. Eu lembro da euforia e perplexidade...

ler mais
Tesseract OCR + ASP.NET Core

Tesseract OCR + ASP.NET Core

Esse projeto nasceu de uma iniciativa de combate a SPAM. Spammers no telegram usam novas táticas todos os dias e corrida de gato-e-rato nos faz usar tecnologia para sanar e bloquear as iniciativas desses spammers. Eu particularmente sou extremamente ativo no telegram, e lidero alguns vários grupos. Nesses grupos temos problemas com SPAM. São em geral bots que querem falar dos mesmos assuntos: Bitcoin, Ethereum, Elon Musk... enfim SPAM. Poderia ser dinheiro grátis, mas em um grupo de tecnologia, é bobagem por estar fora do contexto do grupo. Nessa corrida contra a nova tática, descobrimos...

ler mais

Docker Definitivo – Gravação de Aula

Meus queridos, preciso gravar aulas para a turma do Docker Definitivo, estamos na reta final. Algumas delas serão gravadas online com transmissão no youtube, porém, não serão gravadas. Por conta da qualidade, e do modelo, será apenas uma transmissão sem chat.

ler mais
A mecânica das decisões

A mecânica das decisões

Chegou a hora de avaliarmos o mercado, a situação na qual estamos e entender quais movimentos são possíveis. Entender friamente o que pode acontecer e quais são os movimentos possíveis nesse tabuleiro, nos permite antecipar ações para minimizar os efeitos de sermos atingidos de surpresa. Esse texto estava sendo escrito para dar suporte a uma lista de 10 formas de reduzir custos usando containers no seu dia-a-dia. De desenvolvimento a produção, para desenvolver software ou apenas implantar soluções open source que poodem dar suporte ao teu dia-a-dia. Por maior que seja a dor, e talvez a...

ler mais
Live Coding – Coravel Application Framework

Live Coding – Coravel Application Framework

Pessoal, vamos animar essa quarentena? Essa é a primeira vez que vamos fazer isso e vamos construir essa dinâmica juntos. Eu preciso da sua participação e sua ajuda para definir o roadmap, mas por hora vamos falar sobre tecnologia e ver no que dá! Não tem pauta definida, vamos ver no que vai dar! A ideia é ocupar todos nós e criar uma válvula de escape para essa situação toda! https://youtu.be/i0ewEiHczlo

ler mais
Jornada DevHero – REPRISE

Jornada DevHero – REPRISE

Em janeiro de 2019 produzi um evento chamado Jornada Dev Hero. A jornada do desenvolvedor, mostrando o caminho que eu e diversos amigos trilhamos para chegar onde chegamos. Eu achei o conteúdo tão rico e tão importante em termos de mensagem e capacidade de transformação que tinha reais planos de transformar em produto. Mas o momento é outro. Essa jornada rolou em uma semana inteira de lives, foram 5, de segunda a sexta, e estou disponibilizando gratuitamente para você. O impacto de uma Pandemia e do Isolamento Social Não é brincadeira, isolamento social é uma necessidade. E assim eu me...

ler mais
.NET no Linux, vale a pena?

.NET no Linux, vale a pena?

A gente está a tanto tempo nessa batida, que nem nos questionamos mais, mas há muita gente que ainda tem dúvidas ou precisa de argumentos. Enquanto de um lado sequer cogitamos fazer deploy de aplicações .NET Core no Windows, por outro há quem ainda tenha medo de sair do windows. Uma carreira baseada no Windows Eu sei que muita gente que me segue, e que vem aqui ler meus textos tem uma carreira baseada no Windows. Muitos tem uma vasta experiência fazendo deploys no windows. Alguns só fizeram deploys de aplicações .NET no Windows. Eu também estive nessa posição. Eu também sentei nesse lugar à...

ler mais

Docker Definitivo – Updates

Esse aqui é um post para quem está interessado no curso e têm perguntado a respeito do treinamento. Docker Definitivo emerge do Docker de A a Z. Enquanto no Docker de A a Z eu uso para falar de coisas que gosto e estou vendo no dia-a-dia do uso de Docker, percebi que a galera precisa de uma ajuda ainda maior. Mas afinal, com essa imensidão de conteúdo, como garantir uma jornada, de ponta-a-ponta? Daí nasceu o Docker Definitivo. Em formato de turma! Da forma como é comercializado hoje, se você quiser comprar agora, eu sequer tenho como vender. E isso se dá pelo intuito de criar uma jornada,...

ler mais
O dado é do usuário, não é seu, nem do sistema!

O dado é do usuário, não é seu, nem do sistema!

Parece um conceito banal, mas vou contar uma história atual, muito recente e vou contar o reflexo disso operacionalmente. É mais um daqueles casos em que a "boa vontade" é traduzida em processo e procedimentos equivocados que geram mais problemas do que soluções. O contexto Recentemente lancei um curso online. Resolvi abstrair toda a complexidade de lidar com meio de pagamento, distribuição, plataforma etc. Tudo isso foi abstraído ao usar uma plataforma all-in-one. Uma vez entregando o treinamento, tem um período de garantia, ok, e em um prazo de mais ou menos 30 dias você já pode sacar o...

ler mais
Do WCF para ASP.NET Core Web API com Docker no Linux 2/2

Do WCF para ASP.NET Core Web API com Docker no Linux 2/2

Agora é hora de mostrar como podemos tirar proveito dos contratos (interfaces) existentes para promover essa migração. Esse é o momento em que a "SOPA de LETRINHAS" ou melhor, os design patterns fazem sentido. Graças a eles, essa migração que poderia ser dolorosa e desastrosa, se torna algo fácil. Não é simples, mas exige pouco esforço. Esses patterns permitirão que o cliente tenha APENAS A FACTORY alterada nessa transição. É difícil conseguirmos montar um exemplo assim, em geral isso só acontece na vida real, longe das demos, longe das apresentações. O mundo maravilhoso das demos é um...

ler mais
Do WCF para ASP.NET Core Web API com Docker no Linux 1/2

Do WCF para ASP.NET Core Web API com Docker no Linux 1/2

Não sei se você conhece WCF, rodando uma enquete eu percebi que uma parcela considerável sequer conhece WCF. Hoje vamos costurar o assunto com um outro post para que eu possa mostrar como fazer uma migração de WCF pra Web API no ASP.NET Core, rodando em containers Linux. Nosso cenário de teste é super simples, uma API de Cálculo, que só tem uma operação de SOMA. Sem acesso a dados, uma API tão simples quanto isso. O WCF, Windows Communication Foundation é framework pra a construção de aplicações orientadas a serviço. A distribuição de serviços possui desafios próprios e WCF que abstrai os...

ler mais
Sobre 1° de Agosto e o Fim do Hangouts On Air – Como resolvemos com Docker, NGINX e RTMP no Azure Container Instances

Sobre 1° de Agosto e o Fim do Hangouts On Air – Como resolvemos com Docker, NGINX e RTMP no Azure Container Instances

1° de agosto de 2019 foi um dia agitado. Fomos surpreendidos com a ausência do Google Hangouts On Air, mas logo reagimos às mudanças com uma solução baseada em Azure Container Instances, NGINX, Docker para fazer streaming a 60FPS em 1080p!!! Streaming gamer para live de código 😎!!! Confira o vídeo no Youtube ou no Facebook. Youtube https://www.youtube.com/watch?v=ZFyPJjZ7tOo Não deixe de curtir e inscrever-se. Ao chegarmos a 1k vou fazer uma live comemorativa! E vamos escolher o tema dessa live juntos! Facebook...

ler mais
Docker Definitivo – Janela de Inscrição – JAN/2020

Docker Definitivo – Janela de Inscrição – JAN/2020

Todo os dias tomamos decisões das mais variadas. Dormir mais 5 minutos, pegar o celular antes de dar bom dia, fazer café? Será que dá tempo? Tomar café na rua? Ah! Maldito café de máquina! Que caminho tomar? Carro, metro, trem ou ônibus? Prestar atenção na paisagem ou ler um livro? Escutar uma música, assistir uma série no celular ou simplesmente tentar dormir mais um pouco? O que vestir? Jeans ou social? Com quem almoçar? Onde almoçar? O que comer? Boas são as chances de você não estar tomando absolutamente nenhuma dessas decisões diárias. Há boas chances de que uma parte considerável...

ler mais
Troubleshooting Comentado – Docker – ASP.NET Core – NGINX

Troubleshooting Comentado – Docker – ASP.NET Core – NGINX

Já faz muito tempo que eu queria fazer esse formato. Documentar uma ação qualquer de troubleshooting na comunidade para poder transformar em conteúdo, fazendo pausas didáticas e interrupções para poder contextualizar no formato de quebra da 4ª parede. O Felipe Bossolani, que também é moderador de alguns grupos nossos no telegram, estava estudando NGINX, postou uma dúvida e putz eureka! Pedi para transformar isso em conteúdo e pronto! O video segue o modelo de um toubleshooting com intervenções onde eu paro para detalhar o porque de cada coisa. Espero que goste do formato!...

ler mais
Angular + Docker no Heroku

Angular + Docker no Heroku

Heroku é um daqueles serviços de hospedagem à frente do seu tempo. É pioneiro em desenhar um modelo com foco total no desenvolvedor. Uma Heroku é uma plataforma que te dá a possibilidade de hospedar aplicações a um preço muito competitivo. Exploramos o uso de Docker no heroku para mostrar como percorremos todo o caminho. https://youtu.be/nnnbebYqV94

ler mais
Habilidades do futuro?

Habilidades do futuro?

De um lado as guerras dos frameworks e tecnologias, de outro as guerras de skills e culturas. Cultura DevOps, Agile. Então serverless ou containers? Fullstack é um pato que não corre bem, não nada bem, e não voa bem? Aproveitei essa noite para reler as pesquisas que eu faço anualmente, onde coleto opiniões, críticas e sugestões e resolvi pegar um tópico recorrente para falar: Carreira. Vocês pediram e eu vou trabalhar em cima desse assunto hoje. Sobre carreira há muito a dizer, há inúmeras considerações a serem feitas, mas vou usar minha história como fio condutor desse texto, mostrando o...

ler mais
Rebranding

Rebranding

Hora de acertar a casa, rever os nomes, marcas, páginas, perfis, grupos, tudo! Fim de ano chega e está na hora de rever o que está certo, o que está errado, hora de planejar o próximo ano. No meu caso também errei e também fiz uma lambança com marcas, projetos. Impulsionei alguns, negligenciei outros. Está na hora de acertar isso e a melhor hora de fazer isso era há 1 ano atrás, mas antes tarde do que nunca! A confusão Eu sempre me posicionei como Luiz Carlos Faria, e mais tarde, como gaGO.io. Nomes/Marcas que fazem sentido, tem um contexto uniforme sobre a minha imagem. Durante essa...

ler mais
Comprometa-se a tomar a melhor decisão

Comprometa-se a tomar a melhor decisão

Todos os dias, ou quase todos, no suporte à comunidade vemos um estereótipo: Muita informação para absorver, muitos assuntos para estudar, pouco conhecimento e a busca pela "a solução ideal" em busca de um atalho para o sucesso. Essa ideia se pauta na esperança de que se fizer a escolha certa, a respeito de tecnologia, o stack perfeito, a arquitetura perfeita, o design perfeito conseguirá ter sucesso ou conseguirá ter mais sucesso que os demais. Essa é a narrativa que vamos desconstruir hoje. Então você se vê perdido em busca de uma solução para seu problema. Da mesma forma que você,...

ler mais
DevWeek 2019 | Canal .NET

DevWeek 2019 | Canal .NET

O Canal .NET apresenta pelo 5° ano consecutivo o DevWeek. O evento começa hoje, segunda-feira e termina nessa quarta. Convidados São 4 convidados que falarão sobre Desenvolvimento Móvel, ASP.NET Core, Blazor e Prometheus! Canal .NET #completo Dessa vez, nosso time do Canal .NET está completo, sem desfalques! Uhuuuuu!!! Aqui fica meu convite, se inscreva pelo meetup para saber mais sobre o evento. Inscrever-me pelo meetup.com Fica aqui meu convite! Compartilhe esse post com alguém, principalmente se essas tecnologias fizerem sentido para o projeto dela. A propósito, vou falar de RabbitMQ. Tem...

ler mais
Microsoft Orleans 3.0

Microsoft Orleans 3.0

Sobre esse lançamento vemos algumas novidades, mas eu não abordarei elas. Referenciarei alguns posts e apresentarei o projeto de demonstração que criei no github. Ainda é cedo para aprofundar no tema e lançar um texto profundo sobre Orleans. Além disso acabaria floodando o assunto pois já tem uma galera atuando em Actor Models. Actor models é um tema novo pra mim, mas o que me chama a atenção é a capacidade de hospedar componentes remotos. Isso me faz querer entender como e quais tecnologias e recursos estão envolvidos nessa tarefa. É o mesmo motivo que me fez fazer uma análise sobre o recém...

ler mais
Docker Definitivo – Janela de Inscrição Aberta!

Docker Definitivo – Janela de Inscrição Aberta!

Na tarde desse domingo, dia 27/out alcançamos o limite de alunos.As inscrições para a primeira turma estão encerradas!Cadastre-se para receber notícias, link das lives e para participar do grupo do facebook. Em 2015 eu conduzi um projeto de refactoring daqueles complicados. Ao todo foram quase 10 meses com um time dedicado ao refactoring desse projeto. Mas uma coisa que chamou a atenção nesse projeto. Foram 4 meses em que eu me dediquei a entender a baseline de código, sem entregar absolutamente NENHUMA LINHA DE CÓDIGO. Eu precisava entender o projeto para propor uma solução. Não era apenas...

ler mais
Dapr – Distributed Application Runtime – Primeiras Impressões

Dapr – Distributed Application Runtime – Primeiras Impressões

Nessa quarta-feira a Microsoft anunciou no Open Source Blog um projeto curioso chamado Dapr. Entre os principais pontos, o que me chama a atenção é que tem muita cara de servidor de aplicação/componente. E isso de certa forma me chama a atenção pelas possibilidades. Na versão alpha, versão atual, vemos alguns building blocks muito interessantes, como: Service-to-service InvocationState ManagementPub/SubResource Binding & TriggersActorsDistributed TracingExtensibility Valle lembrar que o projeto está na versão 0.1.0, e nada do que temos agora é compromisso firmado com a versão final, eles...

ler mais
OSBAPI –  Open Service Broker API

OSBAPI – Open Service Broker API

Em um mundo conectado, com cada vez mais soluções SaaS e PaaS. Há uma boa tendência e convergência em iniciativas que visam criar marketplaces de soluções. Compondo serviços dos mais variados estendendo as capacidades de nuvens públicas e privadas. Ao mesmo tempo, nunca estivemos tão conectados e nunca conectamos tantos serviços a tantos provedores de serviços. Assim novas estratégias para a interoperabilidade nascem, não somente como meios de comunicação, mas protocolos que estabelecem formas de se contratar, alocar e desalocar recursos dinamicamente. Esse tipo de abordagem é facilmente...

ler mais
CNAB – Cloud Native Application Bundle

CNAB – Cloud Native Application Bundle

No post anterior eu falei sobre Open Application Model (OAM) o que me leva a falar de CNAB comparando-o com OAM. Sobre uma perspectiva de empacotamento e nascendo um pouco antes do OAM, a Docker, HashiCorp, e Bitnami criaram a CNAB - Cloud Native Application Bundle (que agora conta também com Pivotal, Intel e Datadog), uma especificação destinada ao empacotamento e distribuição de aplicações. Ao contrario do que eu mesmo imaginava, quando li sobre o lançamento da OAM no post no Microsoft Open Source blog dia 16, o OAM tem muito potencial para trabalhar lado-a-lado com o CNAB. Resolvi trazer...

ler mais
Open Application Model

Open Application Model

2019 tem sido um ano intenso, cheio de novidades e muitos novos padrões e standards. Kubernetes já se consolidou como plataforma de orquestração default há alguns anos e agora o movimento que vemos é na linha de criação de standards sobre o Kubernetes. Por outro lado, essa nova leva de padrões e especificações oferece um modelo de aplicações e serviços dinamicamente alocáveis, conectáveis e desalocáveis que parece vir de um futuro muito, mas muito distante. São iniciativas interessantes que muito provavelmente ainda sofrerão mutações e algumas fusões no percurso, mas que oferecem imenso...

ler mais
Post Resposta: POR QUE ADOTAR KAFKA PARA MENSAGERIA?

Post Resposta: POR QUE ADOTAR KAFKA PARA MENSAGERIA?

Esse é um post resposta ao post POR QUE ADOTAR KAFKA PARA MENSAGERIA? do Elemar JR no site da Eximia, sua empresa. A resposta estava ficando longa demais, e resolvi transformar em post. Principalmente por se tratar de um conteúdo (RabbitMQ) que está no meu toolset, assim como Kafka está para entrar. Vou aproveitar para usar essas resposta para compor a seqüência de posts da série RabbitMQ de A a Z, pois essa questão RabbitMQ vs Kafka foi um tema solicitado pela audiência e não foi respondida na época. Primeiro vai meu pedido de desculpas. O argumento da resposta não ter sido publicada era a...

ler mais
Oragon Spring 2.0

Oragon Spring 2.0

Finalmente trago o Spring.NET em seu fork Oragon.Spring para o .NET Standard 2.1 e ASP.NET Core 3.0. Nos últimos anos tenho me dedicado a falar mais de arquitetura de solução do que arquitetura de software em si. Cada vez que peso os estudos em uma das duas direções, me afasto da outra. E assim vamos pendendo ou para um lado ou para o outro. Com a evolução natural dos dois skills, manter-me conectado às duas vertentes é um esforço diário. Mas é hora de voltar a falar de software e Spring tem muito a ver com esse assunto. Spring .NET é um projeto que me acompanha a mais de uma década. Já...

ler mais
Proxy Reverso: Pra quê? Por quê?

Proxy Reverso: Pra quê? Por quê?

Você já nos viu falando de Proxy Reverso, em geral usamos NGINX nessa tarefa, mas afinal? Pra quê isso? Por que "isso" é necessário? Para que fique claro, precisamos voltar no tempo e revisitar alguns assuntos. Vou dar uma pincelada em assuntos como DHCP, DNS, e alocação de portas. É fundamental para conseguirmos chegar no ponto exato onde os Proxies Reversos fazem sentido. Fundamentos DHCP Quando teu computador se conecta à uma rede, ocorre um handshake (apertar de mãos) para registrar-se e obter as configurações da rede. Dessa negociação algumas informações são trocadas, 2 delas são: o IP...

ler mais
The Microservices Journey – S1E2

The Microservices Journey – S1E2

No post passado eu citei alguns elementos que precisam ser levados em conta, e não detalhei muita coisa. Só narrei causa e efeito. Hoje eu vou listar o material que já produzi que tem alguma ligação com o tema. Direta ou indiretamente, são elementos que vão ajudar a esclarecer como essa jornada, e mostrar como tudo começou para mim. Eu me proponho a elucidar alguns pontos que vão ajudar a esclarecer e te ajudar a construir soluções melhores. No post Isso não é microsserviço! eu uso uma palestra do Martin Fowler que detalha como microsserviços são. A intenção desse post é mostrar que seus...

ler mais
The Microservices Journey – S1E1

The Microservices Journey – S1E1

Ainda não estruturei como uma jornada, portanto o começo dessa jornada é um brainstorm. Como toda jornada onde sabemos o destino, mas temos um caminho desconhecido, vamos buscando do horizonte curto para o distante e do horizonte distante para o curto, aproximando e reduzindo a área de incompreensão. Eu já havia dedicado algum tempo a tentar mostrar meu ponto de vista: Com o nível das discussões ao redor de Microsserviços, e com o que eu tenho acompanhado do mercado e da comunidade, pude concluir com os meus olhos que microsserviços virou hype, e dizer-se fazendo microsserviços virou...

ler mais
Consciência Crítica vs Comportamento de Manada

Consciência Crítica vs Comportamento de Manada

Tomar decisões implica, ou deveria implicar, em conhecimento prévio somado ao discernimento e ponderação a respeito dos impactos e reflexos de cada decisão. Se você não está ponderando sobre suas próprias decisões, alguém está fazendo por você. Direta ou indiretamente. Nos resta saber se estamos falando de influência ou manipulação. Assim com base em uma nova página, que data de de 21/Agosto/2019, no site do Martin Fowler temos algumas coisas muito interessantes à diante: Não vou traduzir a página toda, só partes importantes para a minha narrativa. Mas o texto seguirá com original e...

ler mais
Docker – de A a Z – 20 – Volume TMPFS – o poder do file system em memória

Docker – de A a Z – 20 – Volume TMPFS – o poder do file system em memória

Uma das coisas lindas do Linux é a separação volumes e file system. E você não faz ideia do que dá para fazer com file system em memória!!!? No windows quando escrevemos no C: sabemos que estamos escrevendo em um disco ou no máximo em um raid. Não importa qual path seja. No linux, não é assim que vemos como escrevemos. Seu file system não é segmentado por unidades, seu file system é uma estrutura lógica e qualquer path pode estar fisicamente em um disco ou até na rede. Mas também pode estar em memória. tmpfs Um dos sitemas de arquivos disponíveis no linux é o TmpFS: "tmpfs trata-se de...

ler mais
Azure na Prática

Azure na Prática

Bom, você não está aqui à toa, você me conhece. Muito provavelmente você também conhece essa galera que está montando um treinamento focado em Azure, o Azure na Prática. O Azure na Prática surgiu de necessidades observadas pelos palestrantes e Microsoft MVPs Ericson da Fonseca, Milton Camara Gomes e Renato Groffe ao longo de diversos eventos em que os mesmos participaram nos últimos anos. Eles constataram nestes encontros técnicos dúvidas recorrentes sobre qual a melhor maneira de uma empresa migrar para a nuvem, quais serviços utilizar, além de como conduzir este processo de mudança sem...

ler mais
Dev Desktop – Fresh Setup – Windows Features & Tools

Dev Desktop – Fresh Setup – Windows Features & Tools

As vezes me peguntam sobre meu setup. Bom, nessa última semana por conta das ferramentas de produção e gravação de vídeos acabei por optar por formatar meu desktop principal. Para quem, como eu, instala e testa muita coisa, realizar um fresh install e configurar o ambiente do zero é uma tarefa que eu fazia 2 vezes por ano. Até um comprar uma máquina que tolerasse isso. Fato que já são mais de 3 anos com meu windows, e agora é hora de recomeçar. É sempre uma questão de perspectiva, eu gosto de alinhar minhas ações para que elas façam sentido. Então eu sempre tento alinhar empresas e projetos,...

ler mais
Entendendo Docker

Entendendo Docker

Afinal, o que é essa sopa de letrinhas? Docker, dockerd / daemon, Docker Toolbox, Docker for Windows, Docker Desktop, céus, é tanto nome! Windows Containers, Linux Containers, Windows Subsystem for Linux (WSL), WSL2 e o Kernel linux embarcado no windows, lightweight virtual machines, docker machine. Isso tudo pode parecer confuso ao primeiro olhar, mas vou tentar entregar com o máximo de clareza os links e referências para posts que já publiquei ou posts de terceiros. Esse é mais um post/vídeo da série Docker de A a Z, uma série gratuita que tem a missão de apresentar docker, do aspecto mais...

ler mais
O fim do IIS

O fim do IIS

Talvez você esteja acostumado com o Internet Information Services, talvez conheça-o, assim como eu, desde o tempo do Personal Web Server. Entre amor e ódio o IIS ajudou muita gente, mas seus dias de apogeu estão chegando ao fim. TL;DR; IIS morreu ou vai morrer? Não! Mas você precisa abrir os olhos para outras possibilidades, cada vez mais .NET se desconecta do IIS. O que é um web server? Um web server nada mais é do que um listener TCP especializado em processar requisições HTTP. Isso quer dizer que você pode escrever um web server em C#, a partir de uma classe chamada TCP Listener. Mas...

ler mais
Desenvolvimento de Software: Não deixe seu código-fonte contar mentiras para outros programadores

Desenvolvimento de Software: Não deixe seu código-fonte contar mentiras para outros programadores

No telegram fazendo suporte à comunidade, acabei me deparando com um exemplo que me chamou muita a atenção. Um código que mentia. E vamos às minhas colocações sobre a questão: Sobre as abstrações Eu citei abstrações em Abstrações – Tradeoffs e co-responsabilidade, também falei sobre a absorção de complexidade pela arquitetura em Oragon – Princípios de Design – Complexidade Reside na Arquitetura, ambos são bons textos auxiliares para esse esse texto aqui. Mas falando de abstrações, quando criamos abstrações, estamos tentando abstrair complexidade. Isso quer dizer, delegar à abstração alguma...

ler mais
Isso não é microsserviço!

Isso não é microsserviço!

No post passado eu introduzi uma analogia sobre o automobilismo profissional, e como os avanços tecnológicos chegam ao nosso dia-a-dia como consumidores de automotivos, carros de passeio. Preambulo A ideia foi contrastar duas realidades: Early Adopters com dinheiro infinito e nós, mundanos com orçamentos apertados. Esse contraponto tenta trazer para a luz da discussão a lembrança de que Netflix e Amazon são players que podem se dar ao luxo de terem as arquiteturas que têm. Enquanto isso, nós na tentativa de copiar, fazendo engenharia reversa de suas estratégias, estaremos copiando...

ler mais
Sobre Formula 1 e Microsserviços

Sobre Formula 1 e Microsserviços

A busca pelo Santo Graal, agora personificado nos microsserviços, causa uma euforia semelhante ao que víamos nas filas de pessoas dando voltas em quadras, em véspera de lançamento do iPhone. Hoje microsserviços virou uma febre, o que é intuitivo e natural, mas nem de longe é racional. Antes de falar de Microsserviços propriamente, preciso fazer um paralelo com o automobilismo. Vou usar essa analogia o tempo todo, nesse post, para tentar expressar minha visão sobre o tema. O ciclo de vida da tecnologia na Formula 1 Formula 1 e o automobilismo de alta performance, além de um esporte é um...

ler mais
DevHero – Resumo

DevHero – Resumo

Pessoal, carreira dev nunca foi a menina dos olhos e nunca foi um tema que eu tivesse interesse de abordar, mas alguns pedidos me chamam a atenção então vou fazer um mega resumo do que do DevHero 2019. Para quem não faz ideia do que é o DevHero, o evento foi um evento de 1 semana voltado para carreira Dev. 5 dias, 5 lives e muito conteúdo. O foco do DevHero era atacar alguns problemas de quem é jovem dando alguns direcionamentos para quem sente as seguintes dores: 😕 Se sente perdido meio a uma imensidão de tecnologias e não sabe como priorizar. Em geral quem estuda um pouquinho de 10...

ler mais
Oragon Design Guide – Agnostic Services

Oragon Design Guide – Agnostic Services

Seu serviço deve rodar sob qualquer host, ou sem host (como uma dependência de library), com qualquer tecnologia, e não deve precisar de modificações quando novas tecnologia são lançadas. Óbvio que estamos falando de algo a perseguir e não uma regra absoluta e/ou intransigente. História Embora a esmagadora maioria dos meus leitores talvez sequer tenha conhecido WCF, preciso dar um passo atrás e falar do Spring.NET antes do WCF: " Build, Ship, and Run Any App, Anywhere" embora esse seja o slogan do docker, era facilmente cabível para Serviços baseados no Spring.NET com o pacote...

ler mais
Eu tentei, tentei muito e falhei

Eu tentei, tentei muito e falhei

Pessoal, vou contar um pouco da minha história, mais especificamente um subset, acho importante mostrar como algumas coisas se desenharam ao longo desses anos, e acredito que esteja perto de algo muito, muito grandioso. Esse post trata da minha história com Linux, com Docker e com todo o processo que culminou no que chamo hoje de maior oportunidade de reciclagem profissional. Embora minha história profissional começasse em 2002, partimos aqui de 2013, quando ainda estava no iMusica, uma startup de música, onde eu gerenciava uma equipe que cuidava dos sistemas de backoffice da empresa. Como...

ler mais
Oragon – Princípios de Design – Complexidade Reside na Arquitetura

Oragon – Princípios de Design – Complexidade Reside na Arquitetura

Alguns poucos lembram, pois alguns poucos estavam lá, mas quando comecei minha carreira profissional. Uma das coisas que me projetou rápido na Petrobras foi a capacidade de identificar padrões e automatizar via abstrações e componentes a escrita de código repetitivo e burocrático. Ainda no ASP Clássico, em 2002, já havia criado alguns componentes, seja com VBScript para o ASP, ou com JavaScript para UI. Nunca me dei bem com trabalho repetitivo, principalmente, pois esse tipo de trabalho me faz perder a atenção fácil. E o resultado é sempre o mesmo, faltou um detalhinho aqui, outro detalhinho...

ler mais
Global DevOps Bootcamp @ Le Wagon & Coders In Rio

Global DevOps Bootcamp @ Le Wagon & Coders In Rio

Vai rolar amanhã o Global DevOps Bootcamp na Le Wagon - Sábado, 15 de Junho 2019 - 10 às 17h REGISTRATION PAGE!! PESSOAL FAÇAM O REGISTRO NO EVENTBRITE DO EVENTO https://www.eventbrite.com/e/global-devops-bootcamp-le-wagon-coders-in-rio-tickets-61031261145 AGENDA DO EVENTO 09:00 - ABERTURA DO EVENTO - KEYNOTE RUN IT!!10:00 - GESTÃO ÁGIL COM AZURE DEVOPS - RAFAEL CRUZ11:00 - EMPOWERED DEVELOPMENT WITH DOCKER - LUIZ FARIA12:00 - ALMOÇO13:00 - KEYNOTE COM A REDBUG E SORTEIO13:30 - DEVOPS COM XAMARIN PLUS IN APP - RODRIGO AMARO14:30 - DESIRED STATE CONFIGURATION PARA AZURE - CARLOS LAUFF15:30 -...

ler mais
gRPC no ASP.NET Core – Guia Introdutório

gRPC no ASP.NET Core – Guia Introdutório

Há inúmeros bons argumentos para deixarmos de usar HTTP + JSON para boa parte de nossos serviços, gRPC é uma boa alternativa a esse modelo. Cross platform, Open Source e Universal, gRPC foi originalmente desenvolvido pelo google agora é parte da CNCF, Cloud Native Computer Foundation. Afinal pra que pensar em algo diferente de http? O primeiro ponto a se ressaltar é que não estamos de fato abandonando o HTTP, estamos trocando de HTTP 1.1 para HTTP 2, que por sua vez tem alguns benefícios incríveis como os conexões multiplexadas. Isso quer dizer que a conexão http que antigamente atendida a...

ler mais
Envoy ganha novo amigo: Consul

Envoy ganha novo amigo: Consul

Essa é uma notícia que poderia passar despercebida, mas não, é muito relevante para nós. Se você pensa em aplicações cloud native, muito provavelmente terá contato com essas soluções com com similares nos próximos anos. Há possibilidades de estar planejando usar alguma delas sem sequer saber disso. Envoy Proxy, é um proxy muito robusto, alicerce do Istio, enquanto Consul é um service discovery/service mesh service muito usado no mercado e alicerce de diversas outras soluções. Fato é que ambos sempre tiveram muito potencial para trabalharem juntos, mas estamos falando de CNCF (Cloud Native...

ler mais
Diário de Bordo – Poltys – #2

Diário de Bordo – Poltys – #2

Esse é um post complementar que endereça algumas dúvidas da galera que viu esse post e me chamaram para tirar suas dúvidas. Desde já vou chamar esse Controller/Scheduler/Manager de CSM, isso porque até então todos esses nomes são compatíveis com seus comportamentos (scheduler talvez não). Mas ficará como CSM até poder batizá-lo de forma decente. Um dos mantras que ajuda no design que gosto de usar é: Pense GrandeComece PequenoEvolua Rapidamente Dessa forma, quando estava escrevendo sobre a possibilidade de ter um CSM orquestrando a criação de Workers com Docker standalone, Clusters Swarm ou...

ler mais
Diário de Bordo – Poltys – #1

Diário de Bordo – Poltys – #1

Talvez se lhe perguntarem como você anda de bicicleta ou como dirige possa lhe deixar constrangido(a). Pode até parecer uma pergunta quase impossível de se responder. Fato é que quanto mais habituados com a forma de lidar com alguma situação, menos pensamos sobre o processo que naturalmente realizamos. Uns chamam esse fenômeno de masterização, já literaturas sobre aprendizado citam esse fenômeno como um estágio chamado inconscientemente competente. Isso também acontece atrás do teclado, ou simplesmente tomando decisões técnicas. E como preciso lidar com alguns dilemas, inclusive ser capaz de...

ler mais
Adeus MobyLinux – WSL 2 Suportará Docker sem a necessidade de máquinas virtuais no Windows

Adeus MobyLinux – WSL 2 Suportará Docker sem a necessidade de máquinas virtuais no Windows

São tantos títulos possíveis para esse post: Windows embarca Kernel Linux real (v4.19) WSL suporta Docker sem VM's São muitos títulos possíveis para um só anúncio, e por mim um dos mais esperados para esse ano (na verdade espero isso desde a primeira release do WSL). Até então Para quem não está familiarizado com a forma como trabalhamos com Docker no Windows, a primeira vez que tivermos suporte a Docker veio com o Docker Toolbox, um produto desenvolvido pela Docker para permitir a execução de Containers Linux no Windows. Mais tarde, em menos de 2 anos, tivemos o lançamento do Docker for...

ler mais
Feedback da Comunidade

Feedback da Comunidade

Nem todo mundo gosta de ouvir verdades, eu particularmente gosto. Por mais dura que seja, eu me sinto à vontade para pedir feedback e compartilhar com vocês o resultado. Feedback, pra que? Já faz 2 anos que rodo pelo menos 2 vezes por ano um feedback com a comunidade, eu posto nos grupos que administro, página pessoal e profiles em diversas redes sociais. Mas para que questionar de forma tão "aberta", anônima e pedir feedbacks que possivelmente podem virar uma caixa de pandora cheia de ódio e rancor? A resposta é simples e curta: Porque eu me importo! Eu me importo com o impacto que produzo...

ler mais
MVP Conf 2019 – Avaliação da Audiência

MVP Conf 2019 – Avaliação da Audiência

Pessoal, tenho uma notícia muito boa e gostaria de compartilhar, mas também de agradecer. Dia 12-13 / Abril rolou o MVPConf. Não está sabendo? Eu conto um pouquinho aqui 👇 https://gago.io/blog/mvpconf-2019/ Bom para minha felicidade saiu o resultado do evento e da minha palestra com nota e feedback e não poderia ser melhor. Feedbacks Agradeço os feedbacks eles são incríveis quando positivos e muito enriquecedores quando alertam sobe algum desejo que não foi contemplado. Ambos têm muita importância e relevância. A propósito eu admito: Eu fui um cagão! Eu não queria errar em nada assim...

ler mais
Notification Pattern – Estão te vendendo um conceito errado

Notification Pattern – Estão te vendendo um conceito errado

Notification Pattern prevê uma forma permissiva que troca exceptions por notificações em um determinado contexto, no entanto embora a maioria das publicações a respeito falem em não lançar exceptions, veremos que isso não é bem assim. Esse post é uma retaliação resposta ao post Não lance Exceptions em seu Domínio… Use Notifications! publicado pelo Wellington Nascimento. Para que você entenda o que falo aqui, ler o texto do Wellington é requisito fundamental, pois quase tudo que falo aqui se baseia na narrativa usada por ele. Brincadeiras à parte, não há retaliação alguma, só uma reflexão...

ler mais
Don’t Do That – One size fits all

Don’t Do That – One size fits all

Não! Uma solução ou decisão não serve para todos os casos! Com base nas discussões da semana e muita farpa trocada em grupos de discussão, vejo cada vez mais jovens buscando uma solução única para os problemas de arquitetura e design. Seja ao modelar um domínio, ao desenhar a arquitetura de um projetinho simples, ou mesmo algo complexo como lidar com e-commerces. A busca por uma arquitetura, um design universal, ou framework definitivo produz ignorância e falta se senso de contexto. A visão radical que prevê tal solução arquitetural como o Santo Graal em detrimento a tudo que existiu é uma...

ler mais
Abstrações – Tradeoffs e co-responsabilidade

Abstrações – Tradeoffs e co-responsabilidade

Embora a prática seja linda, é hora de falarmos de algo abstrato: as próprias Abstrações. Primeiro preciso lembrar que essa é uma opinião pessoal, fruto das diversas experiências, criando ou consumindo abstrações das mais diversas em projetos de todos os tamanhos. O que é uma abstração? Uma abstração é em geral um conjunto de classes/componentes/serviços correlatas que exercem o papel de simplificar uma implementação em nome de um objetivo palpável. Confuso? Um ORM tem o objetivo de simplificar a implementação do acesso a dados mapeando seus objetos e suas tabelas ou views correlatas no...

ler mais
MVPConf 2019

MVPConf 2019

Apesar dos mais de 2000 participantes, sempre tem gente que não faz ideia do que está acontecendo. São os perdidos! Não tem problema, vou te contar o que rolou. Dias 12(sexta) e 13(sábado) de Abril rolou o MVPConf LATAM 2019, um evento organizado pelos Microsoft MVP's das Américas destinado à todos da comunidade técnica: Inclusive você! O Evento Nesses 2 dias foram mais de 170 palestras, 15 trilhas, com muito conteúdo relevante feito por experts. O evento foi distribuído em salas de aula e auditório de acordo com a procura, contou com app de reserva de lugar e foi um evento super bem...

ler mais
IntelliCode no Visual Studio 2019

IntelliCode no Visual Studio 2019

Em menos de 6 minutos nesse vídeo vemos, como habilitar, como treinar seu primeiro modelo, como compartilhar com seu time e como importar um modelo criado por outra pessoa. Além, de claro, mostrar a diferença e o impacto em produtividade no dia-a-dia! Não perca esse vídeo, é curtinho, mas incrível. https://www.youtube.com/watch?v=Y3LdynOCsR0 IntelliCode - Visual Studio 2019 Feature Overview Nesse vídeo você encontra: Como Instalar o IntelliCode no seu Visual Studio 2019Como Treinar o modelo com base na sua soluçãoComo compartilhar um modelo treinado com seu timeComo importar um modelo...

ler mais
RabbitMQ & AMQP – #8 – Redis, um Message Broker?

RabbitMQ & AMQP – #8 – Redis, um Message Broker?

Então você já usa Redis no seu stack, e optou por usá-lo também para publicar mensagens de um lado para outro em sua aplicação. Talvez seu amigo tenha dito que "não precisa de RabbitMQ", ou que "é um canhão para matar uma formiga". A começar pela pergunta: Você busca resiliência nesse papel? Se a resposta for sim e você usa Redis como se fosse um Message Broker, vou lhe apresentar alguns dados para mostrar que está redondamente equivocado. Após o Hangout sobre RabbitMQ no Canal dotNET, foi criado um grupo sobre RabbitMQ no telegram, e lá surgiu uma questão super recorrente, mas que...

ler mais
Dev Desktop .NET Core: Windows ou Linux?

Dev Desktop .NET Core: Windows ou Linux?

Esse post fala sobre ambiente de desenvolvimento. O lugar onde você está escrevendo código, compilando, rodando, debugando, e testando o que está produzindo. Aqui vão recomendações para quem está começando. Essas recomendações são amparadas pela minha experiência acompanhando e ajudando/suportando a comunidade e grupos de discussão. TL;DR; Desenvolva no Windows (use o windows no host, não em uma VM). Hospede no linux como Linux Containers / ou direto no host linux. .NET Core funciona bem no Linux? Sim, funciona e beira a perfeição. Realizar deploy em um servidor headless, consumindo...

ler mais
RabbitMQ & AMQP – #7 – Pipelines & Youtube Downloader

RabbitMQ & AMQP – #7 – Pipelines & Youtube Downloader

No finalzinho de 2017 eu falei de um projeto chamado youtube downloader, um projeto de exemplo, experimental, que emprega o uso de filas para fazer todo o processo de download e encoding de mídias, a partir do youtube. Mesmo tendo o propósito de exclusivamente falar de RabbitMQ em um pipeline de processamento, natural desse tipo de tarefa, a temática de download do youtube é controversa e possui implicações em direitos autorais. Enfim a proposta do projeto não é infringir regras, leis ou direitos autorais, apenas exemplificar em um cenário clean, como otimizar o uso de filas com pipelines....

ler mais
Containers no Ambiente de Desenvolvimento #MVPConf

Containers no Ambiente de Desenvolvimento #MVPConf

Pessoal acabou de sair a confirmação da minha palestra no MVPConf na trilha #DevOps. Você que ainda não comprou seu ingresso saiba, corre lá no MVPConf.com.br e compre seu ingresso! Todo MVP e principalmente os MVP's Community Leaders (que lideram comunidades técnicas) poderão suportar você e auxiliar caso você tenha alguma dificuldade ou tenha tido algum problema. Resolvi trazer algumas informações e curiosidades sobre o evento: O primeiro lote estava a R$ 80,00, no momento em que escrevo esse post está a R$ 120,00. Não sabemos até quando ficará com esse valor, mas sabemos que o 3° lote...

ler mais
Insights da Atlassian – The future of software development

Insights da Atlassian – The future of software development

Saiu na Atlassian um report com alguns indicadores muito legais. Uma pesquisa feita com um público controlado de 500 profissionais apontou: 73% of software development teams spend 10% – 50% of their time on updates and upgrades to their self-hosted software. Who knew "business as usual" meant 20-40 hours/week? When teams aren't in maintenance mode, they're hunting for info:92% of teams have to provide status updates weekly (or even more frequently). Developers are the #1 purchasers of noise-cancelling headphones* *Not verified. It takes 3.3 different tools just to uncover the status of a...

ler mais
Não estude por tutoriais

Não estude por tutoriais

A polêmica continua, e essa aqui é uma dica que vale ouro. A galera da mentoria sempre fica "chateada" quando eu digo isso, mas é a pura verdade para mim. Hoje abordamos muitos assuntos, mas não abordamos métodos para estudar, eu vou contar o que faço. Afinal, o que são posts, e tutoriais? Posts e tutoriais têm a função de apresentar uma ideia e dar uma pincelada em um assunto, sob uma ótica propositalmente limitada. Tutoriais não ensinam, eles te mostram uma perspectiva, que em geral se traduzem em simplificações de uma coisa qualquer. Boa parte dos vídeos que não são treinamentos também...

ler mais
RabbitMQ & AMQP – #6 – Show me the code

RabbitMQ & AMQP – #6 – Show me the code

No post anterior eu mostrei como as coisas acontecem na interface de gerenciamento do RabbitMQ. Agora é hora de mostrar as principais iterações com o RabbitMQ via código. Naturalmente, privilegiarei C# aqui, mas você pode usar as principais tecnologias para realizar as tarefas a seguir. O objetivo desse post é lhe ambientar, já que estamos tentando falar em alto nível, se você nunca viu RabbitMQ então irá te ajudar a entender como as coisas funcionam. Pacote Nuget Todas as dependências do RabbitMQ são carregadas a partir desse pacote: https://www.nuget.org/packages/RabbitMQ.Client...

ler mais
RabbitMQ & AMQP – #5 – Management UI, Filas e Exchanges

RabbitMQ & AMQP – #5 – Management UI, Filas e Exchanges

Vamos começar? Que tal de fato olharmos para o RabbitMQ para nos acostumarmos com ele, e dar vida ao que falamos até agora? Subindo RabbitMQ com docker Há diversas formas de subir uma instância do RabbitMQ, uma delas é com Docker, e está aqui um exemplo com Docker Compose. A propósito, ela vem do tutorial sobre EnterpriseApplicationLog, que citei no post Don’t Do That – Forçar IP’s nos Containers Docker. version: '2.3' services: rabbitmq: container_name: RabbitMQ image: rabbitmq:3-management-alpine volumes: - mq_data:/var/lib/rabbitmq/mnesia ports: - "15672:15672" - "5672:5672" networks: -...

ler mais
RabbitMQ & AMQP – #4 – Perguntas e Respostas

RabbitMQ & AMQP – #4 – Perguntas e Respostas

Vamos às principais perguntas e respostas sobre RabbitMQ e mensageria em geral.   Fugirei das formalidades e serie mais raso nas argumentações. A tentativa é de deixar as respostas mais claras. Como eu pego uma mensagem na fila? Esse nem é uma dúvida, é um erro de principiante mesmo, natural, comum, típico, mas muito nocivo. Então você instalou o RabbitMQ ou subiu em um container, criou um projeto de exemplo e acabou de adicionar o pacote nugget. Após criar a conexão e o model a primeira coisa que se busca na api é um método GET qualquer para pegar uma mensagem em uma fila. Estratégia...

ler mais
Forçar IP’s nos Containers Docker – Erro de Principiante

Forçar IP’s nos Containers Docker – Erro de Principiante

Se você tem um background de infra grande e está acostumado a entregar IP's para suas máquinas virtuais, é super natural que você considere essa a solução ideal para containers. Não é! Se sua resposta foi sim, você não poderia estar mais errado! Em um ambiente com containers, não queremos que os containers tenham IP's públicos, exceto caso seja algo muito fora do comum, como aplicações de TELECOM muito específicas, por exemplo. Claro que existem outros exemplos, mas o que quero dizer e ser totalmente claro é que, se estamos falando de uma aplicação web comum, wordpress, drupal, nextcloud,...

ler mais
RabbitMQ & AMQP – #3 – Conceitos

RabbitMQ & AMQP – #3 – Conceitos

Agora é o momento de falarmos brevemente sobre cada elemento do AMQP. Nesse post ainda estamos tratando com superficialidade, mas é importantíssimo passar por aqui para progredirmos nessa jornada. Standard vs Implementação Standard que trata de mensageria. No AMQP não temos termos como Exchanges, Queues e Binds, vemos termos como Transport, Source e Target, portanto embora possamos olhar pela perspectiva do AMQP, tomei a liberdade de falar sobre a perspectiva de uma de suas implementações, no caso o RabbitMQ, já que é foco do nosso estudo. Mas vale muito a pena olhar o standard, os links...

ler mais
RabbitMQ & AMQP – #2 – Pra que Mensageria?

RabbitMQ & AMQP – #2 – Pra que Mensageria?

Embora fosse a hora de falar do standard, acho que é preciso definir mensageria antes. Vamos aos principais pontos. Mensageria É pra mim? Talvez você já tenha se perguntado a respeito do sentido de usar uma solução de filas, mensageria, enfim um message broker como RabbitMQ. Será que faz algum sentido? Ou esse pessoal deve morrer de fome1, por que na prática uma boa query otimizada, em um banco de dados, e algumas threads dão conta do recado? Na prática depende. Se você não tem um servidor de banco de dados que tenha custado dezenas milhares de reais, se não tem processamento de queries que...

ler mais
RabbitMQ & AMQP – #1 – Prefácio

RabbitMQ & AMQP – #1 – Prefácio

Todas as semanas, algumas semanas mais, outras menos, me questionam sobre RabbitMQ. Sua utilidade, se vale a pena ou não aprender ou usar, ou até se não é mais adequado criar uma tabelinha no banco para controlar o que foi processado e o que não foi. Na prática a zona de conforto faz com que naturalmente achemos mais simples usar qualquer coisa que esteja no seu stack, como um banco SQL, NoSQL, até um Redis ao invés de usar RabbitMQ. De fato assim você elimina a curva de aprendizado, no entanto há boas chances de você estar tentando reinventar a roda, tendo de lidar com problemas que não...

ler mais
Oragon.Spring no ASP.NET Core – Get Started Tutorial (PT-BR)

Oragon.Spring no ASP.NET Core – Get Started Tutorial (PT-BR)

Quem trabalhou de perto nos meus projetos sabe que tenho uma opinião bem radical a respeito da maioria dos frameworks de injeção de dependência. Aliás, compartilhando contigo minha opinião: Eles fazem injeção de dependência, mas pouco sobre IoC, e podem, diversas vezes ser encarados meramente como Service Locators, o que na minha opinião deixa pobre qualquer implementação que queira se fundamentar em IoC e DI. A origem Eu já disse o que me levou a portar o Spring.NET para .NET Standard, eu fiz isso faz um tempinho, agora já tenho projetos em produção usando. Agora que estou começando um novo...

ler mais
Código Paranormal – Um fenômeno conhecido

Código Paranormal – Um fenômeno conhecido

É mais comum do que você imagina, pessoas considerarem programação algo quase mediúnico, cheio de eventuais efeitos e manifestações paranormais. O que é uma abominação, visto que se de fato fosse algo de outro mundo, o Stack Overflow poderia ser considerado um site paranormal! Na prática se você não está vendo o que está acontecendo é porque talvez esteja procurando no lugar errado, e diferente de outros campos de estudo, há ferramentas suficientes para que você nunca mais se sinta levado pela tecnologia ao seu objetivo, em vez usar a a tecnologia para chegar ao seu objetivo. Esse texto está...

ler mais
[Workshop] [Online] [Pago] – Docker + Bancos de dados #NaPrática

[Workshop] [Online] [Pago] – Docker + Bancos de dados #NaPrática

Você deve ter ouvido falar que Docker não serve para executar seus bancos de dados de produção, eu concordo, mas talvez você não saiba que essa não é a única forma de usar docker para aumentar sua capacidade de entregar projetos com Bancos de Dados. Docker pode te ajudar a entregar ambientes locais, na máquina de desenvolvimento, melhorar sua capacidade de produzir e reproduzir cenários de teste, é fantástico para testar automação no processo de criação de ambientes complexos, permite você validar configurações, testar novas versões de bancos e muito mais. Ah se eu conhecesse docker antes......

ler mais
Riscos Técnicos: Tomar ou Declinar?

Riscos Técnicos: Tomar ou Declinar?

Então você se deparou com a necessidade de tomar decisões e está inseguro? Será que alguém já fez aquilo que você está pensando? Será que sua decisão é uma gambiarra ou não? Bom, eu já me questionei sobre isso diversas vezes, e algumas decisões difíceis de fato já tomei com meus times ou sozinho em algum momento. Mas hoje em dia, com a quantidade de informação disponível, há boas chances de alguém no mundo ter passado pela mesma indecisão e mesmo problema. Talvez ela tenha pesquisado a respeito e não tenha achado nada quando precisava tomar uma decisão, também é provável que ela tenha...

ler mais
Modelagem – Conectando os pontos

Modelagem – Conectando os pontos

Já faz muito tempo que gosto de modelar os elementos de uma arquitetura como componentes reaproveitáveis, em geral abstrações que me proporcionem a qualquer consumidor simplesmente usá-la, e para isso há algum esforço na modelagem para abstrair aspectos que são peculiares às suas demandas de negócio. Em conjunto com um bom Container de IoC/DI, é possível fazer coisas incríveis. E muito do que reclamo da abordagem com Register/Resolver se dá pela impossibilidade de modelar direito e de realmente promover reaproveitamento, quando sua única informação para obter uma dependência é seu tipo. Para...

ler mais
Estratégia Técnica

Estratégia Técnica

Meio a tantos incentivos e pressões para gerarmos ciclos de entrega cada vez mais curtos, não passam despercebidas as oportunidades de entregar código de baixa qualidade para agradar um chefe, um gerente, um cliente, ou quem quer que esteja interessado na data da entrega, mas nenhum interesse no resultado da entrega. O tema de hoje é sobre como controlar e gerenciar as expectativas e como controlar e contornar a essa lambança. Contexto Vimos nas últimas décadas um movimento pautado pelo aumento da pressão em busca de ciclos de entrega cada vez mais eficientes, cada vez mais curtos, cada vez...

ler mais
Jornada DevHero 2019 – 1ª Edição

Jornada DevHero 2019 – 1ª Edição

Uma minoria de devs nunca se questionaram a respeito das suas conquistas, dos seus objetivos e das suas realizações. Fato é que a maioria vive esse dilema, principalmente no início da carreira. Alguns tentam usar toda a sua malandragem para queimar etapas e o mercado sorrateiramente "lhe passa uma banda" anos depois, deixando-o no chão. Você não pode dizer que não foi avisado, afinal, alguém do teu lado conseguiu e é provável que você não tenha conseguido. Desde que levei as maiores porradas do mercado, mudei minha postura e principalmente, tento, dia-após-dia, ser uma pessoa mais simples,...

ler mais
Feedback 2018 – Roadmap 2019

Feedback 2018 – Roadmap 2019

2018 chega ao fim, e 2019 vem dando as caras. Mas afinal, o que eu posso dizer de 2018? 2018 foi incrível em diversos aspectos, foi um ano pessoalmente muito gratificante, e profissionalmente cheio de realizações e feitos importantes. Mas esse não é um momento para que eu fale das minhas conquistas, esse é um momento no qual anualmente eu dedico a ouvir a sua opinião. Mas pra que isso? Sem feedback temos maior chance de errarmos o rumo, de navegar às escuras, temos maior chance de não saber como estamos traçando, não só nossas carreiras, mas nosso relacionamento. Meu presente de...

ler mais
Natal Nerd 2018 – Workshop sobre Docker

Natal Nerd 2018 – Workshop sobre Docker

Pessoal, para quem não está sabendo vai rolar hoje o treinamento de Docker Online (Docker de Ponta a Ponta - do Desenvolvimento à Nuvem). O Renato Groffe irá ministrar e eu vou ajudar na organização e moderação. Docker de Ponta a Ponta - do Desenvolvimento à Nuvem Este workshop sobre Docker é uma ação conjunta dos grupos .NET SP, Azure Talks, Devops Professionals, Open Source SP, SampaDevs e Developers-BR. Conteúdo previsto:1) Docker: visão geral e conceitos básicos2) Utilizando Docker com bancos de dados3) Suporte a Docker no Visual Studio 20174) Docker Compose: implementando soluções com...

ler mais
Booking.com – Shipper – BlueGreen e Canary Deployents no Kubernetes

Booking.com – Shipper – BlueGreen e Canary Deployents no Kubernetes

A Booking.com publicou no dia 9/Dezembro/2018 o código fonte do Shipper. Shipper é um projeto de open source que oferece rollouts avançados e personalizados para um ou vários Clusters Kubernetes. Shipper usa gráficos Helm e conceitos nativos do Kubernetes para facilitar a configuração de blue/green ou canary deployments em seus aplicativos. A versão atual usa a versão padrão do Kubernetes com seu traffic shifting, dessa forma você não precisa de um service mesh para começar. O suporte à Istio está no roadmap e segundo eles ficará pronto nos próximos meses. Por que o Shipper existe? O...

ler mais
NHibernate no .NET Core – Visão Geral

NHibernate no .NET Core – Visão Geral

No início de dezembro rolou o DevWeek do Canal .NET. onde falei sobre NHibernate no .NET Core - Uma visão geral. A intenção foi apresentar as principais features do projeto e mostrar quais os meus argumentos me levam a escolhê-lo como meu ORM padrão, ou mesmo primeira opção. Apresentação A apresentação está disponível no slideshare. https://pt.slideshare.net/Luizcarlosfaria/nhibernate-no-net-core O template da apresentação é Massive X e foi adquirido no Envato Market (todos os direitos reservados). A apresentação https://youtu.be/gAkhPGX07Mw?t=7380   Fontes Standalone A demo standalone,...

ler mais
Qual o melhor momento para atualizar o perfil do LinkedIn?

Qual o melhor momento para atualizar o perfil do LinkedIn?

Bom, esse não é um tema que você verá aqui com freqüência alguma. Mas em 2018 passei a usar o Linkedin para validar os perfis daqueles que se candidatam para participar do grupo de arquitetura de software (link na home do site). A intenção é simples, criar um grupo de profissionais que trabalham com .NET e querem falar ou debater sobre arquitetura de software. Nada contra profissionais de outras áreas, ou não profissionais, mas esse grupo almeja estarmos conectados por essa afinidade, e para isso, precisamos garantir o mínimo de assertividade nos perfis. Nessa dinâmica de olhar muitos perfis...

ler mais
Diário de Bordo – Dezembro 2018

Diário de Bordo – Dezembro 2018

Olá pessoal, trago novidades interessantes que vou compartilhar com vocês. Oragon Saiu a versão 1.5.0 do Oragon.Contexts. Oragon.Contexts aglutina os aspectos AOP que dão suporte à Exception Handling e contextos NHibernate. As maiores adições acontecem nos contextos NHibernate que agora suportam: SQL Server MySQL Oracle DB2 PostgreSQL NOVO SQLite NOVO Além das adições, o projeto ganha testes integrados. Isso sinifica que a cada commit, com a ajuda do jenkins e docker, uma nova instância de cada um dos bancos é criada, exclusivamente para validar a implementação. Ainda falta adicionar o DB2 a...

ler mais
[EBOOK] Designing Distributed Systems by Brendan Burns

[EBOOK] Designing Distributed Systems by Brendan Burns

Com o subtítulo "Rapidly develop reliable, distributed systems with the patterns and paradigms in this free e-book" o livro Designing Distributed Systems de autoria de Brendan Burns, Distinguished Engineer at Microsoft, works on Azure and is cofounder of the Kubernetes project. Apesenta uma visão geral sobre sistemas distribuídos sob a ótica de containers e orquestração de containers. Como dito na breve assinatura do Brendan, ele é um cofounder do projeto Kubernetes e hoje trabalha na Microsoft. Por que eu escrevi este livro Ao longo da minha carreira como desenvolvedor de uma variedade de...

ler mais
Troque números mágicos por discriminadores de comportamento

Troque números mágicos por discriminadores de comportamento

Você já deve ter ouvido algum requisito assim: Caso seja maior que 80%, deve executar A(), caso contrário B(), em ambos os casos precisa executar C(). Do meu lado estou aqui torcendo para você não ter seguido essa regra ao pé da letra. É sobre isso que falaremos hoje. Esse assunto é dos mais básicos sobre modelagem, não acho que devamos ter esse papo, acho que já passamos dessa fase. Mas para mim é importante ter algo mais sólido do que uma conversa para encaminhar no futuro. Esse é um post documental e não me admira se achar o assunto chato ou mesmo básico: faz parte! O problema Fato é que...

ler mais
Underwater – Construindo Libraries .NET Standard Profissionais

Underwater – Construindo Libraries .NET Standard Profissionais

Então você quer lançar uma library no Nuget.Org? Nesse post vou abordar Github Organization (Org), a integração do Org inteiro com seu Jenkins. No Jenkins vou falar de testes unitários, build, deploy, de projetos .NET Core usando Jenkins Pipeline/Jenkinsfile e publicação dos seus pacotes no MyGet e Nuget. Vou abordar cobertura de código e análise com SonarQube, tudo que estou começando a implantar nos meus projetos. Muitos assuntos para um post só? Talvez, mas vale a pena conferir. E se você achar abstrato demais, não tem problema, tem exemplo prático ou links para as principais etapas....

ler mais
O breakeven dos projetos Docker – Sem docker é mais caro

O breakeven dos projetos Docker – Sem docker é mais caro

Docker já faz parte de muitos projetos que tenho assistido e participado, e está cada vez mais no dia-a-dia de mais gente. Uma vez superada a curva de aprendizado, você rapidamente se vê com super poderes, compondo suas aplicações com os mais variados serviços, e eliminando assim a necessidade de construção e setup extenso de diversos desses serviços. Esse empoderamento lhe permite fazer muito mais, de forma muito mais profissional com menor custo1.Então vemos um fenômeno curioso, o breakeven dos projetos Docker, onde meus orçamentos saem mais caros quando não uso docker, do que usando...

ler mais
Modelagem de software como Pequenas peças de lego

Modelagem de software como Pequenas peças de lego

Talvez você não concorde com essa visão, já vi isso acontecer antes. Mas algo que você nunca poderá negar é a experiência alheia. E nesse caso a minha experiência década-após-década com esse tipo de abordagem vem mostrando resultados fantásticos. SOLID não é só um conjunto de regras aleatórias de qualidade, elas proporcionam real reaproveitamento, e faz parte da modelagem isolar as partes do software em elementos de forma a parecerem pequenas peças de lego, que juntas compõem coisas incríveis, mas facilmente podem ser aplicadas a outros contextos AS-IS, sem mudança alguma. Estou falando de...

ler mais
Novidades – Q3/2018 – Oragon Spring.NET, AOP, Open ALM

Novidades – Q3/2018 – Oragon Spring.NET, AOP, Open ALM

Bom, galera, muita coisa está acontecendo. Vamos às novidades de Q3/2018, vou precisar enumerá-las para deixar as coisas às claras. Estou tocando um projeto pequeno do time de delivery e isso me permite meter a mão em um assunto muito legal: Oragon Architcture. Sob a nova alcunha de Oragon, estou quebrando a parte que diz respeito à AOP e estou gradativamente criando os projetos e refatorando/movendo seu código para o github, dessa vez de forma estruturada. Ainda estou tomando muitas decisões, por isso ainda não estou divulgando os projetos nem compartilhando nada sobre eles nesse momento....

ler mais
Tenha um Cluster Docker Swarm por quase um almoço!

Tenha um Cluster Docker Swarm por quase um almoço!

Se você estudou docker, já pensou em criar um cluster para fazer alguns testes. Se você desistiu por que achou caro, seus problemas acabaram! Por € 11,97 (R$ 53,51) por mês, você pode ter um cluster swarm modesto, composto por 4 nós, cada um com as seguintes specs: SO: [dt_tooltip title="Ubuntu Xenial"]Esse tutorial fala exclusivamente de Linux, vamos subir 4 instâncias Ubuntu Xenial.[/dt_tooltip] CPU: 2 X86 64bit Cores Memória: 2GB Rede: 200Mbit/s Unmetered Disco: 50GB SSD Vale lembrar que o Scaleway bilheta por hora, portanto faça as contas, se você tiver um teste de 15 dias, pagará...

ler mais
API Load Testing com artillery

API Load Testing com artillery

Qual é o throughput médio de minha API? Será que essa nova implementação está consumindo mais ou menos recursos? Há algum memory leak? Bom, algumas informações só podem ser vistas quando você roda um tipo específico de testes, o teste de carga. Artillery te ajuda a executar cargas de trabalho intensivas em sua API, e isso pode ser feito na sua máquina, sem muito esforço, você só precisa ler esse post e executar alguns poucos passos! . Chegando até aqui Voltando ao Wbot Vou conta a história que me fez chegar até aqui: No final de 2016 comecei pela Ebix uma plataforma de bots chamada Wbot....

ler mais
Oragon.Spring

Oragon.Spring

Se você caiu de paraquedas aqui e não entendeu nada do assunto, calma eu vou explicar. O Spring.NET é um container IoC super robusto, mas não caiu na graça da comunidade. Uns reclamam de lentidão, outros reclamam do xml outros reclamam por ter sido inspirado no Spring do java. Eu gosto e defendo sua abordagem, o Spring.NET é alicerce das minhas arquiteturas no .NET Framework, e já faz muito tempo que sinto falta dele no .NET Standard / .NET Core. No post Spring.NET o Renascimento eu fiz um overview sobre o assunto, mas há muito mais assuntos relacionados quando olhamos para tags...

ler mais
5 atitudes infalíveis para fracassar em um projeto de software

5 atitudes infalíveis para fracassar em um projeto de software

Você já deve ter lido 5 formas de obter sucesso em blablabla, mas com uma quantidade tão de grande de projetos fracassados, não fracassar é um bom começo. A propósito, existem milhares de atitudes infalíveis para se obter o fracasso, a pior é não fazer nada! Mas se você chegou até aqui, você não é daqueles que desistem, então vou listar para você 5 das atitudes negativas que levam qualquer projeto ao fracasso! Desconhecimento das premissas e ambições do projeto Premissas e ambições são necessárias para pontuar aquilo que você está desenhando e fazendo. São as premissas que garantem a você um...

ler mais
Oragon Architecture Is Dead

Oragon Architecture Is Dead

Estamos no finalzinho de abril de 2018, vésperas do Microsoft Build e estou retomando meus trabalhos no Oragon Architecture. O projeto foi muita coisa, teve muitas ambições, mas agora é hora de revisitar todos os assuntos do projeto, passar por um momento de introspecção para dar um novo formato e rumo à solução. Portanto, a partir de hoje todos os posts referentes ao que era o Oragon Architecture passam a ficar privados no blog e em um futuro, que espero não ser tão distante, pretendo relançar o projeto, com novas features. Vale lembrar que o projeto não é um simples framework sob o...

ler mais
Free e-book / Site Reliability Engineering

Free e-book / Site Reliability Engineering

A SRE (Site Reliability Engineering) é uma disciplina que incorpora aspectos da engenharia de software e a aplica a problemas de operações de TI. Os principais objetivos são criar software altamente escaláveis e altamente confiáveis. De acordo com Ben Treynor, fundador da Equipe de Confiabilidade do Site do Google, o SRE é "o que acontece quando um engenheiro de software é encarregado do que costumava ser chamado de operações". O livro aborda muito do que, na minha visão, todo desenvolvedor precisa folhear ou mesmo dar uma olhadela, pelo menos uma vez em sua carreira, como meio de...

ler mais
Message Broker & .Net Core – Introdução ao RabbitMQ

Message Broker & .Net Core – Introdução ao RabbitMQ

Pessoal, no dia 15/Fev batemos um papo no Canal .NET com o título Message Broker & .Net Core - Introdução ao RabbitMQ. Nesse bate-papo apresentamos RabbitMQ como Message Broker, mas com foco no AMQP, que por sua vez desponta como principal standard, amplamente utilizado e implementado por diversos serviços, projetos e produtos, oferecendo maior flexibilidade na hora de escolher sua implementação de message broker. Na narrativa abordei modelos de integração mais antigos, até uma implementação com AMQP, mostrando features, e algumas dicas valiosíssimas que ajudam no entendimento de alguns...

ler mais
Cloud Native Computing Foundation

Cloud Native Computing Foundation

A CNCF ou Cloud Native Computing Foundation é uma fundação que aglomera um conjunto significativo de projetos relevantes: Kubernetes, Prometheus, RKT, gRPC, Fluentd, ContainerD e outros, como CoreDNS, linkerd, envoy, notary fazem parte da fundação. A lista de membros conta com dezenas dos mais importantes nomes/marcas do momento nos segmentos de cloud, containers, telecomunicações, sistemas operacionais, virtualização entre outros. A CNCF consolida projetos que dia-a-dia vêm ganhando renome e podemos ver investimentos significativos na sua utilização e suporte, como é o caso do DialogFlow...

ler mais
Docker Compose: simplificando o deployment de aplicações

Docker Compose: simplificando o deployment de aplicações

O Docker Compose é um serviço do próprio Docker voltado à criação e execução conjunta dos múltiplos containers de uma aplicação. Tal capacidade contribui para facilitar o deployment de um projeto em diferentes ambientes. Além disso, o Docker Compose é considerado uma alternativa extremamente útil em cenários que envolvam a implementação de uma arquitetura de microsserviços. Esta tecnologia foi abordada em detalhes num evento online recente do Canal .NET:   https://www.youtube.com/watch?v=63yNnXkpf-Y

ler mais
RESTHeart – The Web API for MongoDB

RESTHeart – The Web API for MongoDB

Esse post é super rápido já que perdi um bom tempo documentando o projeto no github. Então vamos lá! Trata-se de uma web api para o MongoDB. Eu já falei sobre isso no passado quando citei o que eu usei em Uma PoC de Sucesso. Agora que estamos às vésperas do Hangout sobre Docker Compose, aproveitei para subir esse código para o github e documentar seu uso. O projeto O RestHeart é um projeto que expõem API's que permitem fazer tudo1 com seu MongoDB. A grande vantagem no seu uso é tornar o mongodb omnipresente. Disponível no seu aplicativo móvel feito com Ionic, ou seu SPA Angular, ou seu IoT....

ler mais
Chakra on .NET Core with Docker

Chakra on .NET Core with Docker

Scripting pode não ser uma demanda corriqueira, mas há momentos em que sua flexibilidade faz jus à sua utilização. Seja para deixar alguma pequena parte de sua aplicação mais flexível ou para poder suportar extensibilidade, há cenários bons para seu uso. Hoje vou abordar como usar o JSRT (Javascript Runtime) da Microsoft, motor do Microsoft Edge, o Chakra em uma aplicação .NET Core, rodando em um container linux com Docker. O projeto Após aventurar-me com Jint, um excelente interpretador, senti falta de algum mecanismo que oferecesse uma implementação mais recente, que me permitisse usar...

ler mais
Spring.NET o Renascimento

Spring.NET o Renascimento

Quem me acompanha, principalmente já viu ou participou de alguma solução minha na última década, sabe que o Spring.NET é meu fiel escudeiro. Há motivos de sobra para não me desapegar do projeto, no entanto recorrentemente testo novas alternativas. Entretanto, mais de uma década após os primeiros flertes, ainda é meu container favorito, e por isso merece uma menção honrosa não só no blog, mas na minha carreira como um todo. Muito do que fiz com .NET nos últimos anos não seria economicamente viável sem ele. O que vem a ser Spring.NET? O Spring é um conceituado framework de aplicação do Java...

ler mais
Messaging Patterns – Pipelines Elásticos

Messaging Patterns – Pipelines Elásticos

Pipelines Elásticos quebram processamentos em pipes que por sua vez podem ser escalados individualmente. Atuando com grandes cargas de trabalho, oferece flexibilidade, melhor consumo de recursos e melhora no tempo de resposta com o aumento de paralelismo. A dinâmica peculiar aos processos de longa duração exige sempre algum tipo de reengenharia e algum nível de inventividade. São cenários em que o mais simples nem sempre traz os resultados esperados. Escalar processos de longa duração pode não ser tão trivial quando parece. A dificuldade mora na razão entre paralelismo e produtividade,...

ler mais
Predições para 2018

Predições para 2018

2017 foi um ano fantástico, e 2018 será melhor! Vivemos em uma transformação constante do mercado, que ao mesmo tempo aprende, testa, erra e acerta muito. Nunca produzimos tanto e nunca fomos tão cobrados por estar a par das transformações e revoluções do nosso mercado. Hoje para virarmos dinossauros não é exigido muito esforço, basta um pouco de preguiça. Aqui vou colocando no "papel" pensamentos e ideias sobre iniciativas que acredito que ganharão força em 2018. A intenção é formular não apenas meu roteiro de estudo, mas trazer para pauta o que eu acho que vai bombar ou ganhar força nesse...

ler mais
Docker – de A a Z – 19 – Youtube Downloader – Novidades #01

Docker – de A a Z – 19 – Youtube Downloader – Novidades #01

Pessoal, esse é o primeiro pacote com novidades sobre o projeto. Nosso diagrama de causa-efeito-ação chega a sua 5a versão com muitas novidades, incluindo:Adição do MongoDB, agora fazendo encoding de MP3 com FFMPEG, possibilitando o download de MP3 que já está em dev, além de stream parcial (que permite utilizar o controle de tempo da tag video do html5) e várias correções, além de uma nova implementação "duvidosa". Mas essa eu não vou contar aqui, você terá de olhar no github, mais especificamente em um commit que nesse momento só está presente na develop. Fique atento às modificações nas...

ler mais
Docker – de A a Z – 19 – Youtube Downloader – o projeto

Docker – de A a Z – 19 – Youtube Downloader – o projeto

Olá, esse é o vídeo de número 19 da série e vamos abordar um tema incomum: Pizza! Oops brincadeira! Youtube Downloader! A escolha desse projeto se dá pela necessidade de utilizar paralelismo para processar as requisições de download, tratar-se de um projeto não convencional, e precisar de cuidados ortogonais quanto ao design da solução em si. São elementos que fazem desse projeto um projeto divertido e cheio de peculiaridades. A principal característica é sair do mais do mesmo, dos cruds com MongoDB e Redis e mostrar um exemplo mais rico. O projeto está publicado no github (...

ler mais
Redis – Importantes features pouco comentadas

Redis – Importantes features pouco comentadas

O que é o REDIS? Um banco de dados NoSQL baseado em chave/valor e disparado um dos mais usados no mundo! Essa resposta está certa, embora incompleta. Há uma infinidade de recursos legais que deveriam ser levados em consideração na hora de explicar o projeto/produto. Nesse post, que tentarei fazê-lo bem curto, vou apontar diversos links para a documentação do Redis. Sim, isso é um RTFM!!! Vamos começar desmistificando algumas coisas, a começar pelo quesito confiabilidade. A definição do produto, segundo seus criadores é: Redis is an open source (BSD licensed), in-memory data structure store,...

ler mais
MongoDB – Importantes features pouco comentadas

MongoDB – Importantes features pouco comentadas

O que é o MongoDB? um banco de dados NoSQL baseado em documentos e disparado um dos mais usados no mundo! Essa resposta está certa, embora incompleta. Há uma infinidade de recursos legais que deveriam ser levados em consideração na hora de explicar o projeto/produto. Nesse post, que tentarei fazê-lo bem curto, vou apontar diversos links para a documentação do MongoDB. Sim, isso é um RTFM!!! Read The Fucking Manual MongoDB é: Um banco NoSQLBaseado em DocumentosAltamente escalável e performático Pesquise por Replicaset Pesquise por Sharding Oferece 2 modelos de consulta extremamente eficientes...

ler mais
Windows-native Docker Engine – Nativo?

Windows-native Docker Engine – Nativo?

O post é simples, rápido mas ajuda a entender o que significa esse tumulto a respeito do suporte nativo a Docker e Linux Containers no Windows 2016 Server. Complexidade do Docker Primeiro, é importante ressaltar que se fosse de fato possível rodar Linux Containers no Windows, sem virtualização, deveríamos ter um anúncio do tamanho do anúncio da chegada do homem à lua. Ok, estou exagerando, mas é importante compreender a dimensão do que seria, definitivamente seria algo incrivelmente fantástico. E por que? Porque mesmo com os esforços no desenvolvimento do Windows Subsystem for Linux, as...

ler mais
Consul – DNS – Visão Geral

Consul – DNS – Visão Geral

Service Discovery é a capacidade que trata da descoberta de serviços em uma rede. É um elemento fundamental no dia-a-dia de quem trabalha com MicroServices, mas também pode ser usado por qualquer um que precise de algum dinamismo na descoberta de serviços. Além do Consul, que abordarei hoje, temos etcd, ZooKeeper. Mas escolhi falar um pouco sobre o Consul por causa do seu DNS interno, e o que vou apresentar hoje utiliza basicamente essa implementação, por ser algo simples, e retrocompatível. O que faremos e falaremos? A dinâmica que usaremos aqui é a seguinte: Vou dar um overview sobre o...

ler mais
Docker – de A a Z – 14 – ASP.NET Core from Scratch to Production with docker & jenkins (pt-BR)

Docker – de A a Z – 14 – ASP.NET Core from Scratch to Production with docker & jenkins (pt-BR)

Apresento aqui um projeto ASP.NET Core, desde sua criação até sua chegada a produção, com jenkins. Começamos apresentando as opções de criação do projeto, depois habilitamos a integração com o Docker for Windows. Em seguida adicionamos mongodb ao projeto e começamos a desenhar o build de produção, ainda na máquina de desenvolvimento. Ao concluir o processo de configuração, subo o código para o github e faço o build no jenkins, usando pipeline para realizar build e deploy da nossa aplicação ASP.NET Core. https://youtu.be/PH0SqgTSocs O projeto ASP.NET Core usado na demonstração está no github!...

ler mais
Escassez de documentação, entenda como as coisas funcionam

Escassez de documentação, entenda como as coisas funcionam

Se você não é capaz de entender uma implementação lendo código, é bom começar. Mesmo que por hobby, ler código lhe fará entender melhor como as coisas funcionam, ou pelo menos lhe dar mais opções na hora de avaliar alguma implementação. Há inúmeros projetos Open Source bem documentados, no entanto quando se depara com algo recente, a escassez de documentação é uma realidade dolorosa. Ao encontrar um projeto relevante, provavelmente buscará um tutorial, ou algo que te aproxime do entendimento, mas nem sempre esse tipo de material está disponível. Há momentos que você quer algo específico e...

ler mais
JWT no ASP.NET Core – Standalone

JWT no ASP.NET Core – Standalone

Após o hangout que rolou nessa sexta estávamos discutindo JWT no ASP.NET Core (JSon Web Tokens) e ao apresentar um dos meus projetos cheguei a ficar envergonhado, pois eu havia dado uma certa volta para evitar a utilização de criptografia simétrica e acabei fazendo uma implementação de ISecurityTokenValidator o que é uma imensa volta para uma implementação padrão de geração tokens JWT. Bom, madrugada livre, resolvi acertar isso de uma vez e acabei transformando esse aprendizado em post. A utilização de um JWT independente se dá porque não tenho uma autoridade externa no meu projeto, não...

ler mais
.NET Core – Configurações específicas por SO

.NET Core – Configurações específicas por SO

Que o .NET Core roda no Windows e no Linux isso é mais que sabido. Mas você pode precisar de configurações específicas por tipo de SO. Paths necessários para executar alguma tarefa podem divergir, e esse é o caso do docker. O endereço da API do Docker Daemon é diferente no Windows e no Linux. No Linux você usa unix sockets, enquanto no Windows named pipes. Então vou apresentar o princípio que permite fazer essa troca de configuração e a partir daí você pode escolher por pelo menos 2 abordagens. A mágica está na classe Environment e na propriedade estática OSVersion. Na prática a enum...

ler mais
.NET Core – de 2.0.0-preview2 para 2.0.0 – Atualizando projetos e Dockerfiles

.NET Core – de 2.0.0-preview2 para 2.0.0 – Atualizando projetos e Dockerfiles

Vamos direto ao ponto: A intenção desse post é apresentar como migrar seus projetos do .NET Core 2.0-preview2 pra o .NET Core 2.0 RTM. Sim, esse é um tutorial, e visa apresentar o que é necessário para fazê-lo. O .NET Core 2 foi anunciado no dia 14 de agosto e para quem estava usando o 2.0-preview2 algumas coisas simplesmente pararam de funcionar do dia para a noite. Essa quebra que fez as coisas pararem está relacionada às imagens do Docker com as tags 2.0 que antes estavam com o preview2, passaram a ser compiladas com a versão RTM. Naquele momento para que as coisas continuassem...

ler mais
docker-gallery/EnterpriseApplicationLog – v3.0

docker-gallery/EnterpriseApplicationLog – v3.0

Em outubro no post Docker - de A a Z - 15 - RabbitMQ, LogStash, ElasticSearch e Kibana com Docker Compose eu apresentei um modelo interessante de Log, com uma abordagem diferente. Ficou muito simples para trabalhar com o stack, no entanto a Elastic.co mudou muita coisa no meio do caminho e foi necessário readaptar o projeto às novidades da plataforma. Para alegria dos que gostam do projeto que compilei, aqui está a novidade: Revisitei as configuração e acertei o que era necessário para o stack! A premissa base que me levou à compilar esse stack é criar a possibilidade de utilização desses 5...

ler mais
Docker – de A a Z – 18 – NodeJS API com MongoDB

Docker – de A a Z – 18 – NodeJS API com MongoDB

Nesse vídeo damos continuidade à série Docker de A a Z e vou abordar o desenvolvimento com NodeJS, TypeScript, Restify, TSLint, MongoDB e VSCode usando Docker para release e debug, além permitir rodar serviços adicionais como MongoDB entre outros. https://youtu.be/LK9ruCQdBz0 O projeto do gerador de código é melhor detalhado no post (((((NodeJS + TypeScript + TSLint + Restify) + MongoDB) + Docker) + VSCode ) + Yeoman) = Uma experiência de desenvolvimento incrível!, mas você pode baixar o projeto direto do repositório npm ou github.

ler mais
.NET Core 2.0 e .NET Standard 2.0 Hangout @ Canal.NET

.NET Core 2.0 e .NET Standard 2.0 Hangout @ Canal.NET

Pessoal, dia 7 de Julho vou participar novamente de um hangout no Canal.NET, desa vez o tema é .NET Core 2.0 e .NET Standard 2.0. O lançamento do .NET Core 2.0, do ASP.NET Core 2.0 e do .NET Standard 2.0 está previsto para os últimos 4 meses de 2017. Acompanhe este hangout para ficar por dentro das novidades e entender melhor o que está por vir. Presenças confirmadas: - Renato Groffe (Microsoft MVP, MTAC) - Luiz Carlos Faria (MTAC) Há muito para falar sobre as novidades do .NET Core, suas novas API's, o que chega e como vamos nos beneficiar disso tudo. Sem deixar de abordar .NET Standard e...

ler mais
Progressive Web Apps – Coloque no seu roteiro de estudo

Progressive Web Apps – Coloque no seu roteiro de estudo

Você já se viu tomando decisões simples a respeito de instalar ou não (novamente ou não) um determinado app no seu celular. Os que você menos usa, são os mais eletivos a serem ignorados quando você troca de dispositivo, ou mesmo quando precisa recuperar algum espaço na memória do aparelho. Esse é um comportamento comum, e nós sabemos disso. Aplicativos que não são de fato de uso cotidiano serão ignorados e um dia deletados e precisamos estar atentos a esse comportamento. Progressive Web Apps ou PWA consiste em novas formas interessantes de desenvolver aplicações web, endereçam, de forma...

ler mais
Exception Handling

Exception Handling

Pessoal, rolou hoje no Software em Contexto um bate papo sobre Exception Handling muito legal. Nesse papo abordamos exceptions quando lançar, quando não lançar, falamos diversas formas de tratar exceptions, apresentamos códigos e refletimos sobre o que é ou não uma exceção. Qual conclusão chegamos? Assiste aê, tire a sua conclusão e retorne com sua opinião. Live https://www.youtube.com/watch?v=wN0qexlM8zI   Conteúdo Adicional Além do tema principal, abordamos Logs e tenho alguns links para falar do assunto! Alguns aqui no site e outros externos: Docker – de A a Z – 15 – RabbitMQ,...

ler mais
Docker – de A a Z – 17 – Build and running WSO2 Identity Server

Docker – de A a Z – 17 – Build and running WSO2 Identity Server

Um dos recursos mais comuns em aplicações corporativas é a gestão de identidade. Ou você implementa na aplicação, ou você utiliza um serviço externo como Auth0, Azure Active Directory ou outros. Quem está próximo das tecnologias Microsoft já ouviu falar do Identity Server (outro projeto), no entanto é importante conhecer outras soluções e a WSO2 possui uma: O WSO2 Identity Server, e é sobre esse projeto que falarei hoje. A dinâmica de gestão de identidade pode parecer simples, mas de fato há diversos pontos de atenção e para que sua solução seja completa, exige muitas horas de...

ler mais
Uma PoC de Sucesso

Uma PoC de Sucesso

Esse post não tem o intuito de falar de boas práticas, de abordar padrões, técnicas mirabolantes, ou nada disso. É sobre fazer concessões para obter um resultado, levando em conta recursos disponíveis como know how, equipe e principalmente tempo. Parece familiar? Ok, mas também não é e nem passa perto de ser uma sugestão para você fazer algo que mereça ser colocado em produção. Estou aqui para falar de Provas de Conceito, PoC's ou do inglês Proof of Concept e como consegui entregar uma porcaria extremamente funcional que encantou clientes. Mas você não tem vergonha de dizer, de antemão que é...

ler mais
Contract Package – Uma excelente alternativa ao Service Reference

Contract Package – Uma excelente alternativa ao Service Reference

Falar de WCF em meados de 2017 parece algo sem sentido, no entanto considero relevante tornar públicas soluções e alternativas que muitas vezes só apresentava dentro dos times por onde passei. São soluções, ideias, conceitos que ajudam no desenvolvimento e tornam o dia-a-dia de desenvolvimento mais fácil para quem está ciente dos conceitos ao redor da plataforma. Ignorei a possibilidade de publicar esse tipo de conteúdo para evitar exposição, já que obviamente, os preguiçosos irão reclamar, e muito! De qualquer forma asseguro, se você usa WCF e nunca viu esses conceitos, acredito que ao...

ler mais
NodeJS Everywhere

NodeJS Everywhere

No Microsoft Build 2017 muita coisa legal rolou, fiz uma lista com o que considerei mais interessante, mas aqui vai um vídeo super interessante sobre as capilaridades do NodeJS, e onde e como ele está presente no nosso dia-a-dia.   Então, vamos ao vídeo! https://www.youtube.com/watch?v=FqickVjXddM    

ler mais
Windows Subsystem for Linux & Docker

Windows Subsystem for Linux & Docker

Ao longo de 2016 fiz uma série de vídeos sobre docker, da qual devo retomar nas próximas semanas. Nesse post vou abordar exclusivamente Docker e Windows Subsystem for Linux. Acho que vai ajudar a esclarecer! Docker no Windows Docker e Windows ainda gera uma série de dúvidas, sobre diversos aspectos, desde a utilização do Hyper-v, utilização de VirtualBox, o que é Docker for Windows, precisa ou não precisa de uma VM. Até então são questionamentos naturais, visto que a documentação peca em entregar essas informações de forma simples e transparente. Para sanar essa dúvida que é muito...

ler mais
SmtpClient dá lugar a MailKit e MimeKit

SmtpClient dá lugar a MailKit e MimeKit

No InfoQ foi noticiada a mudança de estratégia em relação ao uso do SmtpClient que aparentemente está descontinuado. Em substituição a Microsoft recomenda os pacotes jstedfast/MailKit e jstedfast/MimeKit. Pela segunda vez, a Microsoft marcou oficialmente uma classe .NET como sendo substituída por uma biblioteca open source. A documentação para SmtpClient agora diz: "Obsolete(" SmtpClient seus tipos foram mal projetados, recomendamos fortemente que você use https://github.com/jstedfast/MailKit e https://github.com/jstedfast/MimeKit")". MailKit e MimeKit foram criados por , que entrevistamos...

ler mais
Microsoft Bot Framework no .NET Core – Alpha

Microsoft Bot Framework no .NET Core – Alpha

Ao começar esse post estava disposto apenas a apresentar novos packages do Microsoft Bot Framework no .NET Core,  que endereçam o desenvolvimento de bots com .NET Core 1.1 e .NET Standard 1.4 e 1.6, já disponíveis em versão alpha no Nuget.org, no entanto como está no meu roadmap reconstruir, já pela 4ª vez, minha infraestrutura de bots, aproveitei para então entender um pouco o que esses assemblies trazem para poder já começar minha implementação. Aproveitei intervalos nesse domingo de páscoa e obtive ótimos resultados com os novos pacotes. Bots simples já podem usar esses novos pacotes sem...

ler mais
Google Cloud Next – 2017

Google Cloud Next – 2017

Google Cloud Platform enviou na semana passada um email falando sobre o Google Cloud Next e há muita coisa interessante para falar. Um dos principais aspectos que devo abordar aqui estão centrados nas novas aquisições da google e novos produtos, features e free tier que encontramos no Google Cloud Platform. Ao pensarmos em cloud, é mais natural que pensemos nos serviços da Amazon e Microsoft, mas e o Google? A Amazon Web Services é sem sombra de dúvidas o maior player de cloud do mundo, principalmente IaaS, enquanto Microsoft segue em segundo e google em terceiro. Mas o Google apresenta...

ler mais
A anatomia de um chatbot

A anatomia de um chatbot

Vendo bots com uma visão mais profissional, pude estudar muito e principalmente: experimentar muito. Fiz diversos testes implementando chatbots com C# e Microsoft Bot Framework, sob o .NET Framework, mas também fiz bots em NodeJS, e alguns construídos direto em plataformas web. Testei inúmeras plataformas, implementei diversos fluxos de negócio e apresentei diversos exemplos para comitês, fiz apresentações gerenciais e auxilio o time de vendas da Ebix Latin America no diálogo sobre Chatbots com nossos clientes. Aprendi sobre o que os gestores esperam, entendi o que eles querem, e quais são...

ler mais
Como a segment.com economizou US$ 1 milhão por ano em sua conta da AWS

Como a segment.com economizou US$ 1 milhão por ano em sua conta da AWS

Veja como a Segment economizou US $ 1 milhão por ano em sua conta da AWS em três meses. Seus esforços de investigação são interessantes e detalhados, há muito para aprender com eles. Provavelmente não deveria ser uma surpresa que a AWS não facilite a descoberta de onde há oportunidades de economizar. Processo Analisar cada recurso em sua conta linha-a-linha Ativar Faturamento detalhado AWS Importar o arquivo de log bruto para Redshift (que ironicamente custa dinheiro) A análise profunda anotou uma lista das 15 áreas mais problemáticas, que totalizavam até aproximadamente 40% da conta mensal:...

ler mais
What’s new for .NET Core and Visual Studio 2017

What’s new for .NET Core and Visual Studio 2017

Para a maioria daqueles que estão aqui, o .NET Core representa um dos mais relevantes lançamentos da Microsoft nos últimos anos. Então nada mais justo que um post dedicado a endereçar esse conteúdo! https://www.youtube.com/watch?v=96v_VRZj4fo   Quais foram suas impressões?  

ler mais
Agora também estou no programa MTAC

Agora também estou no programa MTAC

Pessoal, nota rápida! Hoje saiu a aprovação e fui um dos selecionados para o programa MTAC - Multi Platform Technical Audience Contributor. O programa visa o engajamento da comunidade técnica em ações para a comunidade técnica. Estou muito feliz de ter sido aceito, agradeço à indicação do Renato Groffe. [dt_quote type="blockquote" font_size="big" animation="none" background="plain"]O que isso significa? Trabalho! Mtac não é um título, é uma associação, e como qualquer outra demanda trabalho, mas dessa vez colaborativo em vez de isolado.[/dt_quote] Que venham os desafios, espero poder...

ler mais
Docker – Images vs Layers

Docker – Images vs Layers

Sempre que fazemos um build de uma imagem docker, estamos criando novas layers a cada comando do dockerfile. A última layer de cada build é a layer que identifica aquela imagem, é sob ela que o Docker aplica a tag quando usamos o parâmetro -t {imagename:tagname}, para dar nomes semanticamente eficientes. Abaixo trago um vídeo bem curtinho, gerado direto do powerpoint para ilustrar esse aspecto. https://youtu.be/8MlNh94MbBc É só isso, a intenção é apenas ilustrar esse aspecto, facilitando o entendimento. Em breve esse vídeo estará incorporado a um vídeo maior que detalhará o processo de...

ler mais
NGINX Automation + WebMin

NGINX Automation + WebMin

No post NGINX Automation eu falei sobre como criar uma automação que lhe facilite na gestão do NGINX. Agora vou abordar, em forma de tutorial, como usar essa solução no webmin. O primeiro passo é configurar corretamente o script de automação, na medida que ele estiver corretamente configurado, você pode usá-lo no webmin. Já no webmin, vamos ao tutorial: Custom commands Custom Commands oferece mecanismo para edição de arquivo ou execução de comandos, parametrizados ou não. A intenção é encapsular ações rotineiras em botões e caso seja necessário a utilização de parâmetros, ele fornece essa...

ler mais
NGINX Automation

NGINX Automation

Se você usa o NGINX em produção, como Reverse Proxy, já se perguntou se seria possível criar algum tipo de automação. Essa é uma demanda pois quanto mais apps passando por ele, mais endereços, mais configurações serão necessárias. Se você usa todo o potencial do NGINX, aí com toda certeza você ficará interessado na automação. Exemplo de configuração do NGINX: Para você entender o que estou falando, abaixo tenho um arquivo bem parecido com o que tenho em produção. #user nobody; worker_processes 1; pid /run/nginx.pid; #error_log logs/error.log; #error_log logs/error.log notice; #error_log...

ler mais
WSO2 – Open Source SOA Suite

WSO2 – Open Source SOA Suite

E você vai passando pelas empresas, vai ganhando experiência, acaba vendo problemas recorrentes e em algum momento pode passar o seguinte pensamento: Putz, esse problema aqui se resolveria de forma super simples com um API Manager, ou um ESB, e quem sabe essa infinidade de API's de consulta poderiam ser criadas com uma ferramenta. Hoje vou falar um pouco de alguns produtos da WSO2. Bom esses e muitos outros problemas endereçados no SOA são geralmente atendidos com soluções caras como Data Power, Integration Bus (ambos da IBM) e diversas outras soluções extremamente difundidas, mas caras!...

ler mais
Dev Week 2016 @ Canal .NET

Dev Week 2016 @ Canal .NET

Pessoal, essa semana está rolando o Dev Week 2016: São 5 dias, 16 palestras, todas as noites! A de segunda-feira já passou, mas isso não é um problema, todo o material fica disponível no Canal .NET, lá no youtube. A propósito, eu fecho a agenda da quarta-feira com o tema Arquitetura X Infraestrutura: O que todo desenvolvedor deveria saber às 22h. Mas antes tem 2 temas interessantes. Corre no site, veja a agenda e assista, tem muita coisa legal todos os dias! Nos vemos no Canal .NET!

ler mais
.NET Core – Estratégias de Deploy – Parte 2

.NET Core – Estratégias de Deploy – Parte 2

O post estava ficando grande demais então dividi em dois. O que era para ser um só, acabou virando 2 posts sobre .NET Core. O post anterior aborda o contexto necessário para que entenda quais são as estratégias de deploy. Nesse vamos efetivamente abordá-las. Estratégias de Deploy Agora que os principais aspectos novos estão minimamente esclarecidos, podemos falar do que esse post se propõem: As estratégias possíveis de deployment. Usando a mesma imagem vemos algumas possibilidades para deploy de aplicações baseadas em .NET Core: PaaS Azure e Amazon AWS oferecem serviços para hospedagem de...

ler mais
.NET Core – Estratégias de Deploy – Parte 1

.NET Core – Estratégias de Deploy – Parte 1

Olá pessoal, já faz algum tempo que não escrevo sobre .NET. Tenho me dedicado aos vídeos sobre Docker, mas escolhi um tema muito divertido para falar: Novas estratégias de deploy com .NET Core. Quem vem acompanhando os novos rumos da Microsoft, deve estar compreendendo que estamos diante de uma magnífica e imensa mudança de paradigma, que trás consigo não apenas um novo framework, mas novas e infinitas possibilidades. Alinhada à estratégia open source, a Microsoft está mudando e transformando-se para ser mais competitiva e entenda: A proximidade com o Linux não é um tiro no pé, mas uma...

ler mais
Docker – de A a Z – 16 – SQL Server for Linux

Docker – de A a Z – 16 – SQL Server for Linux

Pessoal, aqui vai mais um vídeo da série, e dessa vez uma demo, super simples e super rápida sobre o SQL Server for Linux. Vale lembrar que esse SQL Server on Linux é compatível com os providers e ferramentas que conhecemos e usamos no da-a-dia em qualquer aplicação, sua limitação está nos designers do SQL Server Management Studio (SSMS). E por falar nisso, está aqui o link para download do SSMS, o download tem aproximadamente 900mb. Se você ainda não pensa em uma utilizada real para o SQL Server for Linux, vale lembrar que a estabilidade do Linux já justificaria uma versão de produção do...

ler mais
Windows Server 2016 – Overview

Windows Server 2016 – Overview

Desde que a Microsoft passou da era Steve Ballmer para a era Satya Nadella encontramos uma nova Microsoft. Muito mais flexível, muito mais competitiva, muito mais livre, sem rótulos e/ou bandeiras, mais madura e por fim, uma Microsoft definitivamente mais atraente ao olhar do mercado e da comunidade. Os novos rumos com o Windows 10 já movimentaram o mercado, mas agora é hora de voltarmos os holofotes para o Windows Server 2016 e analisarmos com critério o que está presente e o que quebra paradigmas nessa nova release da versão do Windows para servidores. Há muita coisa interessante chegando,...

ler mais
Docker – de A a Z – 15 – RabbitMQ,  ElasticSearch , LogStash e Kibana

Docker – de A a Z – 15 – RabbitMQ, ElasticSearch , LogStash e Kibana

Durante a série Docker de A a Z, esse foi um dos Stacks entregues para facilitar a compreensão de como docker pode nos ajudar a unir soluções complexas, colaborando para criar stacks com diversos projetos e produtos. Esse stack serviu para a apresentação, mas também virou projeto e hoje é mantido e atualizado, por mim e por colaborações. Para simplificar a apresentação desse conteúdo o post foi movido para a página do Stack aqui no site. https://www.youtube.com/watch?v=pnNNLuqWHKk

ler mais
Microsoft Virtual Academy – Microservices

Microsoft Virtual Academy – Microservices

Uma boa dica para quem quer conhecer MicroServices sob o ponto de vista da Microsoft é o MVA - Introdução à Microsserviços (em inglês). O conteúdo foi lançado dia 09/Junho e conta com os seguintes tópicos: Introdução a Arquiteturas de Serviço Introdução a Containers Azure Compute Platform e Conjuntos de escalabilidade de Máquinas Virtuais O que é o Azure Container Services? O que é o Azure Service Fabric? Resumo e próximos passos O link para esse MVA é esse aqui. Bom, divirtam-se!

ler mais
Docker Images – Nginx & Google PageSpeed

Docker Images – Nginx & Google PageSpeed

A internet como vemos hoje exige cada vez mais performance e cada vez melhor usabilidade. Nunca tivemos tanto apreço à experiência do usuário, assim produtos, ferramentas, serviços e frameworks são bem vindos para ajudar a entregar performance. Com o aumento nos recursos de interface, e a facilidade com que conseguimos hardware, chegamos em um momento em que a renderização passa a ser um ponto chave na obtenção de performance, já que do aspecto de processamento do server, nunca vimos tanto hardware (barato), nunca vimos tantos patterns, tantas soluções para facilitar nossa vida. Mas e quando...

ler mais
Docker – de A a Z – 13 – Bridge Network

Docker – de A a Z – 13 – Bridge Network

Olá pessoal, nesse vídeo vou abordar as diferenças entre Default Bridge Network e redes User Defined Bridge Networks, as redes que geralmente criamos para nossos containers. As diferenças entre as redes bridge padrão e as que você cria é a capacidade de realizar descoberta de containers com base em seu nome. Isso significa que se você tem o container A e o container B na rede bridge padrão, precisará usar o IP ou utilizar de o parâmetro --link durante a criação do container. Esse trabalho não é necessário se você criar uma rede e adicionar esses dois containers. Os nomes A e B são visíveis a...

ler mais
Docker – de A a Z – 12 – Demo MongoDB no Docker

Docker – de A a Z – 12 – Demo MongoDB no Docker

Pessoal, uma das demos mais pedidas, MongoDB no Docker. Nessa demo vou apresentar o setup do MongoDB com e sem autenticação. Ficou muito legal! https://youtu.be/wpz8zUZW3kk O MongoDB se destaca com um dos bancos NoSQL mais utilizados no mundo, em projetos das mais distintas naturezas. É um projeto robusto, eficiente, repleto de demonstrações, exemplos e tutoriais, o que facilita a adoção em qualquer lugar. É unanimidade no seu segmento.

ler mais
Docker – de A a Z – 11 – Demo MySQL e MariaDB no Docker

Docker – de A a Z – 11 – Demo MySQL e MariaDB no Docker

Quando se fala em banco de dados no docker, não é incomum esbarrarmos nesses 2 aqui: MySQL e MariaDB é uma das demos mais pedidas durante esse tempo, então vamos aos dois. Demo em dobradinha: MySQL e MadiaDB com Docker! https://youtu.be/NH5nBZESo2Y O MariaDB surge como um fork do MySQL quando a Oracle comprou a Sun Microsistems que era a proprietária do MySQL. O MySQL não foi o único projeto forkado na época, diversos outros projetos foram forkados por seus times originais.

ler mais
DevOps & Tests Hack Nights – Microsoft Fakes

DevOps & Tests Hack Nights – Microsoft Fakes

Pessoal, daqui a pouco 19 horas vou falar sobre Microsoft Fakes no Canal .Net. Para quem não conhece, Microsoft Fakes é uma infraestrutura de Mocking que suporta teste de artefatos "intestáveis", seja comportamentos do .Net Framework ou métodos estáticos, esse recurso é extremamente útil quando trabalhamos com legados ou construção de frameworks de baixo nível. Não percam, o evento está no facebook, há um site dedicado para o evento. A transmissão será feita pelo youtube, ao vivo! A propósito, não só só eu não! Ontem teve Nicolas Takashi, Igor Abade e Giovani Bassi, hoje sou eu, Abraão Alves...

ler mais
Todo WebDev deveria saber: Infraestrutura

Todo WebDev deveria saber: Infraestrutura

Nós trabalhamos com projetos web, serviços, apis, conversamos e definimos soluções, desenhamos projetos pequenos, médios, mas e quando o bicho pega e você precisa de algo maior? Estar pronto para administrar e resolver problemas do dia-a-dia no desenvolvimento web, consiste em conhecer também infraestrutura. Você precisa conhecer com certo nível de profundidade tudo o que você usa, direta ou indiretamente para que possa tomar suas decisões. Pensando nisso, organizei nesse post alguns pontos referentes à infraestrutura que você não pode deixar de saber. A infraestrutura é a base para nossos...

ler mais
Desconto – Curso ASP NET Core (ASP NET 5) + MVC 6 + Angular2 + EF na Udemy

Desconto – Curso ASP NET Core (ASP NET 5) + MVC 6 + Angular2 + EF na Udemy

Pessoal, buscando algumas notícias sobre ASP.NET Core, encontrei dois cupons de desconto para um curso super legal na Udemy, esses cupons dão 50% e 100% de desconto em um curso que a princípio parece ser bem interessante. [UPDATE 18/07 01:30] O cupom de 100% não está funcionando mais. O cupom de 50% continua funcionando. [/UPDATE]   O que serei capaz de fazer depois deste curso? Criar Apps ASP.NET Core Web no Windows, Linux, and Mac OSX Estudar sobre o novo HTTP request pipeline modular no ASP.NET Core Examinar e implementar todas as novas features do MVC 6 Gerenciar pacotes Client-Side...

ler mais
Windows Subsystem for Linux – O que é?

Windows Subsystem for Linux – O que é?

Windows Subsystem for Linux Esse é o nome da recém lançada feature do Windows que permite executarmos pacotes e binários nativos do Linux em um ambiente Windows. A Microsoft está investindo pesado em Open Source e na interoperabilidade. As novidades surgem a cada dia, como o ASP.NET Core, já rodando em Linux e Mac OS, o SQL Server, já demonstrado em execução no Linux, e muito mais. A Microsoft está determinada a oferecer, muito de sua plataforma para desenvolvedores para execução no Linux. Ela tem muito a ganhar com essa estratégia, e nós também temos muito a ganhar com essa mudança de...

ler mais
Docker de A a Z – Primeiros vídeos em fase de produção

Docker de A a Z – Primeiros vídeos em fase de produção

Há semanas anunciei o início de uma série de vídeos sobre Docker. Após muito atraso, alguns vídeos estão entrando na esteira de produção. Os primeiro dois vídeos apresentam o setup de máquinas. Ubuntu Server 16.04 LTS tanto no VirtualBox quanto na Amazon EC2. Nestes dois casos, a intenção é trazer tutoriais, apresentando quais são os principais cuidados e macetes na hora de configurar contas, serviços, no caso da Amazon e sua máquina virtual no caso do VirtualBox. Que bom que essa parte acaba logo, pois logo em seguida vem a parte legal da história, onde vamos falar muito de Docker. É...

ler mais
Simplificando tudo

Simplificando tudo

Esse é um post rápido, uma crítica a aqueles que querem sempre simplificar tudo, de forma indiscriminada, e no final criam frankensteins conceituais. A ideia que refuto é: Vamos implantar SCRUM, mas sem ... pq não precisamos. Vamos usar RUP, mas sem... pq não é necessário. Vamos implementar SOA, mas vamos simplificar... pq é too much. Vamos implementar GIT FLOW, mas vamos não vamos ter só master, sem develop. Essas são atrocidades que já escutei, sempre com o ar de superioridade dizendo "Não precisamos disso tudo". O problema dessa abordagem é que ela nunca é devidamente clara à todos os...

ler mais
Introdução ao Docker @ Canal .NET

Introdução ao Docker @ Canal .NET

No início do mês, o Renato Groffe organizou um hangout do Canal .NET onde batemos um papo superlegal sobre Docker. Renato Groffe, Gustavo Zimmermann e eu, discutimos um pouco sobre Docker, contamos um pouco da história dos containers e traçamos um guia para que você entenda mais sobre como usar o Docker nos mais diversos cenários para desenvolvimento e produção.   https://www.youtube.com/watch?v=59TXN9dhilo O MindMap usado no vídeo está abaixo:   Dúvidas, sugestões ou queira debater sobre o tema, sinta-se a vontade para me procurar nas redes sociais.

ler mais
Docker Images – Dicas e Truques

Docker Images – Dicas e Truques

Você já criou suas primeiras imagens, mas algo não ficou bom e teve muito trabalho? Periódicas atualizações fizeram com que gastasse um tempo não previsto para atualizar imagens?! Deseja criar imagens mas não sabe como criar imagens de forma eficiente e de acordo com as melhores práticas. Esse post é para você. Você pode encontrar imagens para os mais variados tipos de serviços e produtos, desde load balancers até blogs, bancos de dados SQL e NoSQL até Log. A maioria delas preza por alguns aspectos que são considerados boas práticas na criação de imagens, entenda como nesse post. Imagens A...

ler mais
Como Docker pode influenciar sua vida hoje

Como Docker pode influenciar sua vida hoje

Se você usa ou pretende usar Redis, RabbitMQ, WordPress, MySql/MariaDB, Postgres, Memcached, MongoDB, ElasticSearch, LogStash, Kibana, e outras soluções, plataformas ou ferramentas e não sabe como Docker vai obrigatoriamente mudar sua vida nos próximos anos, preste bem atenção. Sendo Docker ou um sucessor, a utilização de containers está aí para ficar e já está mudando a forma como vemos infraestrutura. Nunca foi tão fácil ter acesso a soluções originalmente linux, sem precisar aguardar um port para windows. A diferença O primeiro aspecto, extremamente relevante e serve muito bem como porta...

ler mais
Novas tecnologias – Alguns motivos para você pensar nelas!

Novas tecnologias – Alguns motivos para você pensar nelas!

Ao longo dos últimos anos, venho trabalhando escalabilidade e performance de uma forma bem intensa. Já fiz algumas implantações de Jenkins para CI, uma de MongoDB que ficou muito interessante, algumas outras de RabbitMQ, ElasticSearch + LogStash + Kibana e Redis. Na maioria dos times onde realizei essas implantações, os times estavam tecnologicamente defasados, mas o mais relevante é que não era incomum encontrar quem tivesse algumas das percepções, sobre essas tecnologias, das que vou listar: "É demais para o nosso projeto, é como usar um canhão para matar uma formiga" "Não precisamos de...

ler mais
Docker – Novas imagens prontas

Docker – Novas imagens prontas

Você já pensou como ficaria o WordPress no php7, ou tem uma ao ou site e queria colocar um cache varnish? Que tal então, passar um otimizador na sua aplicação, reduzindo o Loader, fazendo minify, e ajustes com a tecnologia do Google? As imagens estão prontas, falta apenas documentar. Assim que concluir a documentação e integração continua eu vou falar mais sobre o assunto.  

ler mais
DockerFile – Ubuntu + SSH + WebMin

DockerFile – Ubuntu + SSH + WebMin

[PT-BR]Não faça isso! Esse foi meu primeiro texto sobre docker, tem erros monumentais e essa não é uma boa prática. São muitas responsabilidades em um só container. Não há "depende", esse post é um ERRO CONCEITUAL, e só está presente aqui ainda para que eu lembre das besteiras que um dia escrevi! [EN-US] Do not do that This is my first post about Docker, has some conceptual errors and misconceptions around those requirements that i propose solve with this post.  The only one argument to this post stay here is to guarantee the memory about a responsibility of what i'm writing.   O...

ler mais
MonolithFirst @ Fowler, artigo comentado

MonolithFirst @ Fowler, artigo comentado

Olá pessoal, hoje vou falar um pouco sobre um padrão detalhado pelo Fowler meses depois da minha saída do iMusica. Por sinal, há algo de interessante com esse padrão, pois era algo que alguns membros do meu time reclamavam e consideravam um anti-pattern. Vou aproveitar esse post vou tentar usar uma linguagem ainda mais informal que a de praxe. O nascimento dos padrões Na real, uma máxima você não pode ter fora da sua cabeça: Padrões são escritos por pessoas que interpretam situações, problemas e soluções recorrentes e resolvem escrever sobre o tema. Um padrão nasce da observação de um grupo...

ler mais
[deprecated]Oragon Architecture – estratégia para 2016

[deprecated]Oragon Architecture – estratégia para 2016

[deprecated] Quem segue esse blog conhece o Oragon Architecture, sabe pelo menos do que se trata e o que ele faz. Então vou encurtar as apresentações, pois já fiz isso em diversos posts. De fato as mudanças, no desenvolvimento de software em si, nunca foram tão drásticas e disruptivas. Não há nada de ruim nisso, mas é necessário adaptar-se a novos dilemas, propostas e abordagens. Cheguei a cogitar, o abandono do projeto, por completo, acreditando que pudesse contribuir mais talvez em outro momento, com outras coisas menores, já que tudo o que tenho construído e desenhado baseia-se em algo...

ler mais
TypeScript + Classic ASP … Why not?

TypeScript + Classic ASP … Why not?

As vezes algumas limitações impostas por clientes, times de arquitetura e empresas atrapalham nossas vidas. Não é fácil, nos dias de hoje, se sentir confortável em desenvolver algo com ASP Clássico. ASP pode ser facilmente considerado o cobol da Web. Com TypeScript você pode usar os recursos de uma linguagem tipada e todos os recursos de uma linguagem extremamente poderosa, no velho ASP Clássico Nesses muitos anos que passaram e diversos projetos, presenciei todo tipo de limitação: Frameworks antigos, Arquiteturas ultrapassadas, ferramentas ou softwares de apoio defasados, ou insuficientes,...

ler mais
Por onde andei, andei frustrado

Por onde andei, andei frustrado

O mundo está cheio de pessoas felizes, sorridentes, as redes sociais estão abarrotadas por todos os lados de adoradores de potássio(1). Acho que é hora de falar do mundo real, e de algumas frustrações. A minha ausência se dá a um caso bem complexo na carreira, quando após entregar uma plataforma inteira, completamente escalável, altamente configurável e robusta, permitindo um ganho de mais de 1000% (mil) na capacidade de processamento da empresa, esbarrei em aspectos políticos, e na necessidade de manutenção do caos, exercida por alguns e alguns. Ao sair da BRQ, em 2012, após mais uma...

ler mais
Video Tutorial – Nano Server no VirtualBox em 13 minutos

Video Tutorial – Nano Server no VirtualBox em 13 minutos

Video Tutorial No post Windows Nano Server falei um pouco sobre o Windows Nano Server , já no Tutorial – Windows Nano Server para o VirtualBox explico como criar o disco virtual de sua Virtual Machine. Nesse post eu quero demonstrar com um vídeo bem sucinto (12:36) como criar sua primeira máquina virtual com o Nano Server. O vídeo...

ler mais
Tutorial – Windows Nano Server para o VirtualBox

Tutorial – Windows Nano Server para o VirtualBox

16/11/2015 Atenção, este post foi feito no momento do lançamento do Technical Preview 2. Estou trabalhando no Technical Preview 3 para poder gerar conteúdo e apresentar alguns detalhes de como configurar e usar o Nano Server no dia-a-dia. Olá pessoal, saem aos poucos alguns artigos a respeito do Windows Nano Server, mas ninguém fala nada a respeito do VirtualBox. Todos os testes que vi foram feitos a com o Hyper-V. A primeira coisa que você precisa entender do Nano Server é: ELE NÃO POSSUI NENHUMA INTERFACE, NEM O CONSOLE! Isso significa que você precisa fazer tudo a partir de outra máquina....

ler mais
Windows Nano Server

Windows Nano Server

Olá galera, tudo bom? Dessa vez vou falar um pouco do Windows Nano Server. A nova Microsoft Nos últimos anos vemos a Microsoft repensando sua estratégia de mercado e repensando seus produtos. É incrível ver como esse gigante está conseguindo se reposicionar de forma assertiva junto ao mercado e principalmente junto à comunidade. Mas nem tudo foi projetado para ser exatamente como vemos hoje. Na verdade, boa parte das ações que a Microsoft vem tomando são para beneficiar ela mesma, no entanto, nós da comunidade, hoje, compartilhamos muito mais interesses com a Microsoft do que no passado. O...

ler mais
WebAPI não é bala de prata

WebAPI não é bala de prata

O tema Pessoal, faz alguns dias que assisti um debate interessante e muito produtivo com o tema "Serviços na plataforma .NET: WCF ou WebAPI?". Quem conduziu o debate foi a galera do AspNetCast‬, com a presença do Evilásaro Alves. Bom, não vou debater a respeito do cast que está aqui, minha intenção é debater sobre o assunto. Deja-Vú O ponto mais engraçado é que para uma grande parte da galera nova, e já trabalhei com um pessoal que pensa isso, WCF é algo totalmente desnecessário e irrelevante, em contrapartida WebAPI é a solução mais eficiente e eficaz para integrações e exposição de...

ler mais
[deprecated]AssemblyInfoVersionManager

[deprecated]AssemblyInfoVersionManager

[deprecated] Muitas vezes usando Jenkins para CI/CD, você deseja alterar as informações do AssemblyInfo. Nos meus projetos, sempre tenho um AssemblyInfo Global, e durante o processo de build, é mesclado com o AssemblyInfo local. Dessa forma, informações comuns a todos os projetos são mantidas em um ponto centralizado, enquanto o que compete a cada projeto, fica no AssemblyInfoLocal. Mesmo com os atributos de versão estando em um arquivo centralizado, muitas vezes temos dificuldade de realizar as devidas modificações, quando estamos em um ambiente de integração contínua. O projeto surgiu...

ler mais
[deprecated]NugetTools

[deprecated]NugetTools

[deprecated] As demandas mais comuns na hora de publicar NuGet packages Você já tentou publicar algum projeto no NuGet? Se não foi uma tentativa isolada, só para testar você deve passar pelo seguinte problema: Novas referências são lançadas Você realiza o update das referências, atualizando seu package.config Mas seu arquivo NuSpec permanece desatualizado Na hora de publicar... inconsistência! Outro problema comum é: Você possui um projeto com muitos pacotes a serem publicados Durante o desenvolvimento, você deseja trabalhar com todas as suas referências, direta para seus projetos Na hora de...

ler mais
Logs Estruturados

Logs Estruturados

Então, meses sem escrever nada mas hoje estou aproveitando o domingo para escrever algumas coisas sobre o que tenho vivido no último ano. Olhando projeções para o próximo ano, vejo alguns pontos relevantes relacionados ao que posso contribuir com o dia-a-dia de vocês. Você sabe o que são logs estruturados? Logs estruturados, diferente dos logs de aplicação, comuns, contém uma série informações e metadados adicionais, usados para agrupamento e consulta. Logs estruturados devem conter informações relevantes ao negócio e ao desenvolvedor. Um log comum de exceções, por exemplo, envia dados da...

ler mais
[deprecated]Oragon Architecture News – Dez/2014

[deprecated]Oragon Architecture News – Dez/2014

[deprecated] Olá, como vai você. O novo período de hibernação se deu pela necessidade de esperar os novos direcionamentos da Microsoft se solidificarem e agora com o RC do ASP.NET vNext, há muito a rever e repensar no Oragon Architecture. Oragon Architecture em 2014 A versão 7 do Oragon Architecture está em produção desde Junho desse ano quando concluí um grande refactoring. Infelizmente não tive apoio para implantar a versão 7 do projeto no iMusica por questões políticas. Atualmente a iMusica usa um fork da versão 6 do projeto, que oferece muitos recursos interessantes. Por conta das...

ler mais
Pragmatismo nunca é demais

Pragmatismo nunca é demais

As empresas cada vez mais tornam-se especialistas em suas áreas, demandando cada vez mais complexidade de seu parque tecnológico. Enquanto no início de suas atividades poucos sistemas davam conta de todo o negócio. Com o passar dos anos, áreas especializadas na criação de novos negócios encontram novas formas de monetizar suas companhias. Independente da forma como esses novos produtos e serviços são criados sempre demandam novas funcionalidades em sistemas antigos, ou até mesmo a criação de novos sistemas. O modelo mais comum de integração entre sistemas é baseado em bancos de dados...

ler mais
[deprecated] Oragon Architecture – Retomando os trabalhos

[deprecated] Oragon Architecture – Retomando os trabalhos

[deprecated] Bom, talvez você tenha notado que o projeto deu uma esfriada. O motivo dessa esfriada no dia-a-dia de posts e commits é que estou no meio de uma reestruturação no iMusica. A primeira demanda para remodelar o Oragon Architecture era justamente para mudar a dinâmica de hospedagem de aplicações, permitindo a hospedagem dinâmica de aplicações, onde cada App Host é configurado como um slave de uma Management Host. Com esse modelo, hospedar e cuidar de aplicações seria algo muito simples, pois todo App Host se comunicaria com o Management Host para informar seu estado, trocar...

ler mais
#Fail – Sidnei Oliveira

#Fail – Sidnei Oliveira

Sidnei Oliveira se apresenta na FazINOVA, da Bel Pesce, falando no #Fail, histórias de insucesso que precederam o sucesso! Fique de olho nessa playlist é absolutamente sensacional! [youtube=https://www.youtube.com/watch?v=q-fGv-kAuUg&list=PLjIhqe5hH3aTD2oR7OCG6uWzk2jhTCb4h]  

ler mais
Alguns videos para animar essa segunda-feira!

Alguns videos para animar essa segunda-feira!

Bom, é segunda-feira, e você acordou desmotivado. Levante já da cama, a copa acabou e o ano começou. Mesmo que em pleno Julho de 2014, feliz ano novo! Se você é como eu, de alguma forma sempre se sentirá incomum. Assista esse vídeo, nós podemos não ser um deles, mas de qualquer forma há um conforto nisso tudo.   Para quem em algum momento se sente, simplesmente, diferente! [youtube=https://www.youtube.com/watch?v=kLvl0SdVpBk]   Não arranje desculpas, sempre haverá um trabalho árduo precedendo as grandes glórias! [youtube=https://www.youtube.com/watch?v=h1Jafo9B3Ls]   Se você...

ler mais
The Presentation Secrets of Steve Jobs

The Presentation Secrets of Steve Jobs

Bom, sem delongas, esse é mais um vídeo da Bel Pesce, nesse aqui ela fala de um livro bem legal. [youtube=http://www.youtube.com/watch?v=KRNnd1PRpHA] Os 3 atos! Criar uma História Entregar uma experiência Refinar e Praticar The Presentation Secrets of Steve Jobs: How to Be Insanely Great in Front of Any Audience      

ler mais
IoC e Dependency Injection – Os erros comuns

IoC e Dependency Injection – Os erros comuns

Olá, tudo bem? Que copa né?! Sermos batidos por 7x1, em casa, não é nada legal, mas poderia ser pior, em vez da Alemanha, a Argentina! Bom, independente do resultado da copa, esse assunto aqui pode realmente tirar seu sono. É comum entrar em discussões eternas sobre o erro de usar IoC e DI, e quero usar esse post para tonar isso mais óbvio. Revisões Criação: Julho/2014 Revisão: Abril/2018 - Adicionando exemplo HttpClientFactory após sua chegada. Revisão: Novembro/2023 Migração de Editor clássico para Blocos do Wordpress Nova capa (tamanho e estética) Revisão dos blocos de código para o...

ler mais
As dificuldades de profissionalizar as soluções de software de uma Startup

As dificuldades de profissionalizar as soluções de software de uma Startup

Olá, tudo bem com você? Então comigo anda tudo caminhando, o stress que anda me matando, no mais, a vida segue. Hoje vou falar um pouco sobre as dificuldades de um dia-a-dia de uma empresa que quer se tornar uma ex-startup. As primeiras dificuldades que você encontra estão relacionadas à falta de verbas que é comum nos primeiros anos de muitas startups, principalmente as que não tem uma grande ingestão de investimento, nos primeiros anos de existência. Essas empresas possuem características únicas e nocivas à própria empresa, podendo atrapalhar na evolução sustentável de seu parque...

ler mais
#Fail – As histórias de insucesso que precederam o sucesso!

#Fail – As histórias de insucesso que precederam o sucesso!

Bom, se você não conhece Bel Pesce, deveria conhecer, ela é A Menina do Vale (do silício). Se isso não diz nada, Bel estudou no Massachusetts Institute of Technology (MIT). Durante a faculdade, trabalhou na Microsoft, Google e Deutsche Bank, e terminou vários cursos: Engenharia Elétrica, Ciências da Computação, Administração, Economia e Matemática, além de fazer programas em Liderança e Inovação. E como se não bastasse, é Brasileira, nascida e criada em São Paulo. Bom, agora acho que já consegui chamar sua atenção! A série abaixo está no YouTube do FazINOVA, a empresa que a Bel abriu aqui no...

ler mais
[deprecated]Be welcome, now boarding, Oragon Architecture 7

[deprecated]Be welcome, now boarding, Oragon Architecture 7

[deprecated] Bom, a freqüência de posts está bem reduzida, e isso acontece em virtude da refatoração que estou fazendo no projeto. Nem lancei a release 7, e as features solicitadas já sugerem uma grande reestruturação. What's new Reestruturação dos metadados de troca de mensagem para tornar mais flexível e dinâmico. Permite estender a interface de management permitindo que sua aplicação hospedada envie parâmetros próprios para o Application Server. Novo e robusto deshboard! English Content! Bom, minha intenção inicial era criar uma wiki em PT-BR, mas tenho motivos e empolgação suficiente...

ler mais
[deprecated]Oragon.BuildTools.NugetTools – Utilitário de linha de comando para sincronizar arquivos NuSpec

[deprecated]Oragon.BuildTools.NugetTools – Utilitário de linha de comando para sincronizar arquivos NuSpec

[deprecated] Olá, como vai você? a partir da seguintes demandas, criei um executável utilizável de linha de comando que ajuda na atualização de Nuspec files. Premissas Minha solution tem uns 25 projetos e são todas bibliotecas publicáveis no NuGet. Se tentar gerar os pacotes com base no CSPROJ, faltam metadados (assemblyInfo) para preencher todos os campos de metadados do Nuspec Além da falta de metadados no assemblyInfo, para alguns dos projetos, preciso de mais complexos (o csproj não contempla as informações que preciso) embora sejam poucos, eles existem.   Problemas endereçados Quando...

ler mais
3 em 1: SignalR, INTRODUCING: The Future of .NET on the Server e DEEP DIVE: The Future of .NET on the Server

3 em 1: SignalR, INTRODUCING: The Future of .NET on the Server e DEEP DIVE: The Future of .NET on the Server

Olá, como vai você? Nos vimos um post qualquer do passado em que ao final deixei a dica de 3 sessões do TechEd que são imperdíveis! Aqui estão! SignalR: Building Real-Time Applications with ASP.NET SignalR INTRODUCING: The Future of .NET on the Server DEEP DIVE: The Future of .NET on the Server Por hoje não é só! Foi falar mais do Oragon Architecture e do Application Hosting ainda hoje!

ler mais
Instalação Offline do Chocolatey

Instalação Offline do Chocolatey

Olá, como vai você? Por aqui as coisas andam bem agitadas! Mas estão bem. Estou muito empolgado com o projeto que estou para lançar, falamos nisso depois. Hoje vou falar do Chocolatey, diferente do material que se encontra por aí, vou ser um pouco mais objetivo. Vou falar em como instalá-lo em sua infra, quando sua máquina não possui acesso à internet. É o caso de servidores. Desde o post Coisas úteis que um dev nunca deve deixar de ter, quando me deparei com o Chocolatey e foi paixão à primeira vista. Vale a pena dar uma olhada nesse projeto. Bom, no meu cenário, minhas aplicações são...

ler mais

vNext – AppDomain

Bom, não sei se você está bem, mas por aqui eu estou completamente atordoado com um papo que rolou no Jabbr. Conversando com o David Fowler, criador do SignalR e membro da equipe do ASP.NET, recebi a informação de que não haveria mais AppDomain no vNext, isso explodiu minha cabeça. Alguém conseguiria confirmar isso?

ler mais
Escalando Horizontalmente com Oragon Architecture Application Server

Escalando Horizontalmente com Oragon Architecture Application Server

Olá, como vai você? Espero que bem, espero também que esteja em uma posição confortável, pois pretendo falar sobre como podemos escalar aplicações e serviços horizontalmente com o Oragon Architecture. Bom, com a implantação dos novos processos no iMusica, muita coisa aconteceu. Muitos problemas e demandas de negócio ganharam vida, mas a arquitetura em si ficou parada no host de processos. Bom, para você que não sabe o que é o Host de Processos. Foi desenvolvido no Oragon um processo base, capaz de hospedar serviços dos mais diversos: Tarefas periodicamente agendadas Escutas de filas de...

ler mais
Open Source, algumas ferramentas que irão te ajudar

Open Source, algumas ferramentas que irão te ajudar

Bom, a ideia desse post é ser rápido e simples e curto. Portanto você está bem!!! rs! huboard.com O que é? Kanban para as issues do GitHub Excelente! Se seus projetos são open source, então não há limites. Para repositórios fechados há um valor a ser pago. $24/Mês para empresas ou $7/Mês por usuário           myget.org   O que é? Repositório customizado NuGet Excelente! Se seus projetos são open source, então não há limites. Para repositórios fechados há um valor a ser pago. Os preços estão na home.           JabbR.net O que é? Um chat...

ler mais
Uma parte do que você precisa saber sobre o Microsoft vNext

Uma parte do que você precisa saber sobre o Microsoft vNext

[EDITADO] Olá, como vai você? Espero que esteja tão excitado com as novidades da Microsoft quanto eu, mas se não estiver, vou tentar mostrar um pouquinho da revolução que estamos vivendo em nossa plataforma. Nessa semana rolou o TechEd North America 2014 e nele muita coisa legal foi apresentada. Aqui faço um compilado da história da plataforma e dos posts mais interessantes, da própria galera da Microsoft e da galera que esteve por lá conferindo as sessões! Não perca! ASP Primeiro, eu sou Luiz Carlos, acho que já me conhece um pouco. Eu aprendi a desenvolver com livros, antes de fazer alguns...

ler mais
[deprecated]Apresentação Oragon Architecture

[deprecated]Apresentação Oragon Architecture

[deprecated] Olá, como vai você? Bom, espero que nesse dia das mães não esteja enfurnado no computador. Bom, do meu lado a minha fica distante de mais, em muitos os sentidos, portanto, lá vamos nós! Hoje não vou falar muito, vou compartilhar apenas uma apresentação que fiz sobre algumas features do Oragon Architecture. A maioria já é bem conhecida, mas algumas outras são novinhas. Abaixo temos a apresentação, espero que goste. Saiba que esse projeto é um pedaço da minha carreira, uma grande parte das noites, enquanto você está dormindo, eu estou programando o Oragon Architecture afim de...

ler mais
Microservices – Buzzword da vez

Microservices – Buzzword da vez

Olá, como vai você? Bom, embora eu tenha citado Microservices nos posts Oragon Architecture - Application Hosting e Roadmap da Reestruturação do Oragon Architecture, acho que é hora de entrar um pouco no detalhe do que vem a ser este "novo velho mundo". Bom, às vésperas de lançar o projeto Oragon Aaron, onde encontramos o Oragon Architecture Application Server destinado a endereçar diversos aspectos de uma arquitetura baseada em microservices, li um artigo interessante de um pessoal que sigo há pouco tempo. O highscalability.com é um excelente site para quem quer estar antenado nas...

ler mais
I`m not dead, Código e um pouco de música

I`m not dead, Código e um pouco de música

Bom, acho de bom tom dar notícias e falar um pouco, ainda que de forma superficial, de algumas coisas pessoais que vem afetando minhas atividades rotineiras e é possível que você seja uma das pessoas que busca por respostas. Primeiro, estou ausente de diversos círculos por conta de crises de ansiedade, que estão atrapalhando demais meu dia-a-dia. Não é fácil falar do assunto. Ansiedade é um inferno! Auto-cobrança, grandes expectativas, e no final das contas, você pode ter alcançado o infinito, mas com sua amiga Ansiedade ao teu lado, não há a gostosa sensação de mérito ou de dever cumprido....

ler mais
[deprecated]Oragon Architecture – Application Hosting – Suporte para Nijnect e SimpleInjector e qualquer outro container

[deprecated]Oragon Architecture – Application Hosting – Suporte para Nijnect e SimpleInjector e qualquer outro container

[deprecated] Bom, tenho escrito o bastante para nem precisar perguntar como você está! Né?! Já estamos íntimos e agora vou contar uma novidade! Implementei o suporte a dois containers bem conceituados no mercado e simplifiquei o modelo para que você possa implementar facilmente uma nova extensão para qualquer IoC container que tenha o interesse de trabalhar. Só para mostrar como é simples, está aqui todo o código para estender o Oragon Architecture Application Hosting para o Ninject. public interface INinjectFactory : IContainerFactory<IKernel> { } public class...

ler mais
[deprecated]Oragon Architecture – Application Hosting – Criando uma nova aplicação baseada em Spring.Net

[deprecated]Oragon Architecture – Application Hosting – Criando uma nova aplicação baseada em Spring.Net

[deprecated] Olá, como vai você? Por aqui tudo bem! No post anterior fiz um overview do Oragon Architecture Application Hosting, falando no que foi feito, agora vou demonstrar como hospedar aplicações baseadas em Spring.Net. Criando o projeto 1) Criar um projeto Class Library 2) Referencie Oragon.Architecture, Oragon.Architecture.ApplicationHosting, Oragon.Architecture.ApplicationHosting.SpringFramework e Spring.Core 3) Programar uma classe qualquer que implemente IInitializingObject (do Spring.Net) e IDisposable. A necessidade dessas interfaces existe para garantir que você será chamado...

ler mais
[deprecated]Oragon Architecture – Application Hosting

[deprecated]Oragon Architecture – Application Hosting

[deprecated] Olá, como foi sua páscoa? Espero que tenha sido muito boa, com muitos doces e família. Já por aqui essa páscoa teve muito doce e muito trabalho. Consegui implementar algumas mudanças no Oragon Architecture, espero que goste! Nesse post vou falar um pouco sobre o novo host de aplicações, o subsistema Application Hosting. Muita coisa mudou nessa versão, e agora não exigimos mais que use Spring.Net, embora tenha suporte prioritário. Overview O desenvolvimento de aplicações corporativas exige que você faça integrações, serviços e construa diversos artefatos que precisam de um...

ler mais
[deprecated]Roadmap da Reestruturação do Oragon Architecture

[deprecated]Roadmap da Reestruturação do Oragon Architecture

[deprecated] Olá, como vai você? Espero que esteja tudo bem! Nesse post vou falar das mudanças previstas para o Oragon Architecture nas próximas semanas. No post Oragon Architecture - A evolução e os novos desafios eu falo da evolução ao longo dos anos e do que pretendemos fazer focando no big picture do projeto. Agora é hora de especificar os detalhes que envolvem a construção do projeto. Enfim, transformar uma ideia em resultado, para isso é necessário planejar. Abaixo vamos abordar a estratégia de migração do Oragon Architecture. Espero que goste! Eu já planejei essa reestruturação...

ler mais
A saga de estar up-to-date com as novidades da plataforma .Net

A saga de estar up-to-date com as novidades da plataforma .Net

Olá, tudo bom com você? Eu espero que sim! Nesse post vou abordar minha saga para conseguir me manter atualizado com as tecnologias e lançamentos do mercado. Antes de qualquer coisa, é preciso entender meu trabalho para compreender a demanda. Sou arquiteto de software, arquiteto de soluções e coordenador de uma equipe de desenvolvimento. Trabalho no iMusica e tenho um parque imenso de aplicações para refatorar e reestruturar. Nesse últimos anos dediquei a maior parte do meu tempo a integrações e serviços, dos mais diversos, com as mais diversas tecnologias. A necessidade de se manter...

ler mais
Stack e Queue também são seus amigos

Stack e Queue também são seus amigos

Olá, tudo bom com você? Espero que sim! Estou aqui para falar rapidamente de Pilhas e Filas. Bom, o C# possui no namespace System.Collections.Generic, duas classes genéricas, bem úteis, mas muito ignoradas: Stack<T> e Queue<T>. O que você precisa saber de Queues e Stacks: Queues implementas FIFO (First in, First Out), enquanto Stacks implementa LIFO (Last in, First Out). Métodos e Propriedades mais relevantes Comuns a Ambos // // Summary: // Returns the object at the top of the System.Collections.Generic.Stack<T> or System.Collections.Generic.Queue<T> // without...

ler mais
Integrações, XML`s e NoSQL

Integrações, XML`s e NoSQL

Olá, tudo bom? Nesse post gostaria de abordar uma solução que usei no iMusica e que pode também te ajudar com integrações baseadas em XML ou qualquer formato unquerable(neologismo). Antes de falar da solução, vou falar do problema. Nossas integrações no iMusica geralmente se dão por meio de troca de arquivos, contendo pacotes com mídia e metadados. Os metadados são armazenados em arquivos XML complexos. Independente do schema do XML usado, uns mais completos, outros mais enxutos, a quantidade de informação é colossal. O metadado do mercado fonográfico é muito extenso. A dificuldade de...

ler mais
[deprecated]Oragon Architecture – Por que? Pra que?

[deprecated]Oragon Architecture – Por que? Pra que?

[deprecated] Olá, tudo bom? Vou falar um pouco do meu projeto pessoal o Oragon Architecture. Se você me acompanha, sabe que falo bastante dele, e vou aproveitar para responder algumas perguntas que já me fizeram nos últimos dias.   Já fui questionado algumas vezes porque criar um framework de aplicação, uma arquitetura relativamente gorda, baseada em geração de código com base em banco e muita configuração com Spring.Net. Bom, primeiro, o Oragon Architecture me viabilizou criar projetos que jamais seriam possíveis sem ele, no prazo que foram realizados. Esse é o principal motivador! Com...

ler mais
Roadmap de Arquitetura – Um exemplo real

Roadmap de Arquitetura – Um exemplo real

As vezes sou questionado sobre meus desenhos de arquitetura e porque criar tantas abstrações, tanta configuração e tantas dependências e frameworks de terceiros, alguns que só eu e um tibetano conhecemos. No post Como definir Arquitetura de Software, cito quais são os pensamentos primários necessários para se desenhar um arquitetura, mas vamos aplicar isso a um contexto real para exemplificar. Tudo começa com minha chegada na atual empresa, onde encontrei um cenário extremamente complexo e difícil de se trabalhar. Umas 8 bases de dados (não é exagero), entre SQL Server e MySQL, cada uma...

ler mais
Contratos são garantias – JSON Schema

Contratos são garantias – JSON Schema

Não faz muito tempo que apanhei horrores em uma discussão no DNA sobre Json Schemas, mas para minha sorte e daqueles que estão ao meu lado nessa empreitada, saiu no dia 10/Abril no blog .NET Web Development and Tools o artigo Intellisense for JSON Schema in the JSON Editor, que ao meu ver é extremamente interessante. Bom, assim como a galera do grupo, você deve estar se perguntando sobre a necessidade de um Schema para Json. A resposta é muito simples: Integrações. Qualquer integração possível e imaginável se baseia em contratos, implícitos e/ou explícitos, comportamentais e/ou...

ler mais
Coisas úteis que um dev nunca deve deixar de ter

Coisas úteis que um dev nunca deve deixar de ter

Bom, isso aqui anda meio parado. Ando estudando um milhão de coisas simultaneamente: File System Distribuído, Performance em NoSQL, escalabilidade, OWIN, Katana, ASP.NET MVC 5. Está realmente complicado de dar uma passadinha aqui para escrever. Mas vendo um artigo do Elemar, me lembrei de algumas coisas interessantes que podem ajudar muitos. Todo dev que se prese tem uma lista de coisas interessantes, quase que cacarecos, que carrega para todo setup de máquina de desenvolvimento que faz. São manias, sim, se você recebe um note novo da empresa e instala 10 itens fundamentais e outros 972...

ler mais
Redis, MongoDB, RabbitMQ, Sentry e muito mais que o mundo Linux pode oferecer para aplicações .Net

Redis, MongoDB, RabbitMQ, Sentry e muito mais que o mundo Linux pode oferecer para aplicações .Net

Se você não conhece nenhuma dessas soluções, vou fazer um breve apanhado sobre as capacidades de cada uma delas. Redis ( http://redis.io/ ) Redis é um Key-Value Storage. Basicamente um tipo de NoSQL baseado em chave-valor. Nele armazenamos objetos complexos. É uma solução muito útil para cache, entre outras abordagens. Se você já usou SharedCache, Memcached, e outras soluções de cache, sabe muito bem do que estou falando. Para você que nunca usou, pense que quando a descoberta de um dado é relativamente custosa, armazenar esse dado em um cache é uma das primeiras estratégias...

ler mais
Legado Versus Design – Database First e Code First

Legado Versus Design – Database First e Code First

Bom, quem acompanha o Oragon Architecture ao longo dos anos, mesmo que de forma despretensiosa, em algum momento me questiona sobre algumas decisões tomadas. Vou tentar ser breve para relatar alguns dos problemas e soluções que motivaram minhas decisões. Nesse tópico, vou falar de gestão de base de dados, Code First e Database First. Esse assunto merecia um post inteiro, mas vou ser breve e tentar resumir em poucos parágrafos. É comum ver nas empresas aplicações sendo construídas e desligadas, a cada ciclo de troca de diretores e gerentes. A máxima é que as aplicações vão, mas os dados...

ler mais
[deprecated] Oragon Architecture – A evolução e os novos desafios

[deprecated] Oragon Architecture – A evolução e os novos desafios

[deprecated] Para quem trabalhou comigo no BTG Pactual viu no Oragon Architecture o início do Oragon Architecture Services, que consistia em uma camada de abstração para a criação de serviços baseados em WCF, ainda configurado side-by-side com a configuração de WCF do .Net Framrwork. Para atender às demandas da B2W Viagens, não tivemos muita evolução, mas para atender à BRQ, o host WCF do Spring foi estendido para no Oragon Architecture Services, e nesse ponto, não era mais necessário usar configurações padrão do .Net Framework para hospedar serviços WCF. Migrei a solução toda para do...

ler mais
Future Plans for C# – Null Propagation

Future Plans for C# – Null Propagation

No artigo Future Plans for C# de InfoQ Internacional, temos um ponto que acho bem interessante de ser ressaltado: Null Propagation Esse assunto já foi tema de muita discussão no DotNetArchitects em um post sobre Null Object Pattern. When working with messy data, developers often have to write a series of null checks before reading a property or invoking a method. The ?. syntax would eliminate that by conditionally invoking a method if the preceding value is not null. var bestValue = points?.FirstOrDefault()?.X; In this case if points is null, or points.FirstOrDefault() returns a null, then...

ler mais
Microsoft® “Roslyn” e um futuro muito interessante

Microsoft® “Roslyn” e um futuro muito interessante

Para quem ainda não conhece, Microsoft "Roslyn" demonstra a próxima geração de modelos de objeto de linguagem, para geração de código, análise e refactoring, e terá suporte para scripting e interatividade com C# e VB.NET. A proposta inicial é bem interessante, segue o disclaimer em inglês: Traditionally, compilers are black boxes – source code goes in one end and object files or assemblies come out the other end. The Roslyn project changes that model by opening up the Visual Basic and C# compilers as APIs.  These APIs allow tools and end-users to share in the wealth of information the...

ler mais
[deprecated]Oragon Architecture disponível no NuGet

[deprecated]Oragon Architecture disponível no NuGet

[deprecated] Bom, admito que já faz algum tempo que tenho pensado em migrar as referências do Oragon Architecture para o NuGet. A direita está a lista completa de referências, armazenadas na pasta [References], uma prática bem antiga, mas extremamente eficiente. Por diversos motivos, incluindo retrocompatibilidade, venho sofrendo com a vontade e concomitantemente com a preguiça de realizar a migração. O problema é que tenho de manter a pasta [References] para projetos antigos, e coordenar as evoluções usando sempre 2 sets de configuração. Mas, já que estou tendo trabalho para migrar o...

ler mais
Como definir a Arquitetura de um Software

Como definir a Arquitetura de um Software

Esse post nasceu de uma thread em um grupo de discussão antigo. Com o passar dos anos, passei a usar esse post como um guia sobre os tradoffs inerentes à escolha e definição da arquitetura de um software. Representa uma visão de meados de 2008, que virou post em 2014 e vem sendo amadurecida no decorrer dos anos. Achei interessante conseguir transcrever esses meus pensamentos sobre o assunto e acho que talvez possa ajudar aqueles que estão se questionando não só sobre o quê, mas como tomar decisões sobre a arquitetura do próximo projeto.. Para que? Legal quando precisamos pensar em...

ler mais
[deprecated] Oragon Architecture Now On GitHub

[deprecated] Oragon Architecture Now On GitHub

[deprecated] Bom galera, movi meu projeto pessoal o Oragon Architecture para o GitHub ( https://github.com/luizcarlosfaria/Oragon.Architecture.git ). A intenção é estar mais próximo da comunidade, permitindo melhor integração com todo mundo que usa de alguma forma o projeto. O Oragon Architecture me acompanha a muitos anos e pretendo fazer bastante material sobre ele. Espero que gostem! CheckOut It ( https://github.com/luizcarlosfaria/Oragon.Architecture.git )

ler mais
SOLID

SOLID

Olá,  já temos conteúdo suficiente indexado pelo Google falando de SOLID. Minha intenção é criar um debate sobre SOLID e não definí-lo para você. Single responsibility principleOpen/closed principleLiskov substitution principleInterface segregation principleDependency inversion principle Ao longo desses muitos anos desenhando soluções tenho algumas dicas para facilitar a vida de quem está vendo S.O.L.I.D. pela primeira vez. Aos que já usam SOLID no dia-a-dia, é provável encontrar muitos que já se depararam com esses paradigmas em algum momento. Minha intenção é trazer à...

ler mais
IOC / DI – Você está fazendo isso errado!

IOC / DI – Você está fazendo isso errado!

Olá, agora vou tocar em um assunto que parece uma ferida para muitos, mas considero bem básico. Infelizmente, acredito haja quem confunda estes conceitos, e por ter encontrado pela estrada alguns projetos com tais problemas relacionados à compreensão de IoC e DI, venho escrever esse post. É um tema tão cotidiano que hoje está disponível também no Macoratti*, portanto não vou explicar o conceito, mas me ater no que vejo de errado por aí. Service Locators A questão que é que vejo em muitos lugares, implementações de Service Locators e Factories como sendo consideradas implementações...

ler mais
Obrigado 2013 – Que venha 2014

Obrigado 2013 – Que venha 2014

Agradecer é algo que não praticamos com muita freqüência, no entanto devemos nos dedicar um pouquinho mais e nos ocuparmos com os agradecimentos, afinal, se você está lendo esse texto, no mínimo você está vivo e com acesso à internet. Muito nos questionamos sobre a qualidade da vida que vivemos, sem aquela balela de “qualidade de vida” imposto pela mídia e sociedade. Qualidade de vida é individual, cada um considera alguns itens mais ou menos importante que o companheiro ao lado na fila do super-mercado. Para a maior parte das pessoas que conheço, o final do ano representa um momento de...

ler mais