Blog
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 é...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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 é...
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...
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...
.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...
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...
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...
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...
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...
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...
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...
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,...
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...
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...
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...
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...
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...
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...
.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...
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 é...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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": [...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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....
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...
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...
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 &...
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...
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...
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...
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...
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...
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...
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...
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...
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....
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...
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...
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...
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...
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...
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...
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ê...
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...
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...
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...
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...
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 é...
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...
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...
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...
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...
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...
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...
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,...
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á...
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...
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...
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...
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...
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,...
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...
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...
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...
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...
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...
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....
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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,...
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...
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...
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.
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....
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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....
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...
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...
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...
.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...
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,...
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...
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
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...
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
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...
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...
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...
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 +...
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...
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...
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...
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...
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...
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",' '...
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...
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...
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...
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...
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...
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,...
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...
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...
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...
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.
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...
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
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...
.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 à...
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,...
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...
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...
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...
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...
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...
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!...
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
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...
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...
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ê,...
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...
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...
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...
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...
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...
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...
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...
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...
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á...
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...
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...
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...
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...
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...
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...
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,...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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 -...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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....
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...
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...
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...
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...
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: -...
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...
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,...
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...
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...
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...
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...
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á...
[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......
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...
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...
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...
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,...
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...
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...
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...
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,...
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...
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...
[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...
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...
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....
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...
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...
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....
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á...
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....
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...
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...
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...
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...
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...
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...
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
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....
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...
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...
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,...
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...
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...
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 (...
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,...
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...
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...
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...
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!...
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...
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...
.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...
.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...
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...
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.
.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...
(((((NodeJS + TypeScript + TSLint + Restify) + MongoDB) + Docker) + VSCode ) + Yeoman) = Uma experiência de desenvolvimento incrível!
Esse post foi movido para /blog/projetos/yeoman-generator-node-api-docker-1st-class-experience/
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...
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,...
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...
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 é...
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...
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
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...
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...
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...
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...
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...
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:...
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?
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...
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...
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...
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...
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!
.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...
.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...
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...
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,...
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
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!
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...
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...
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.
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.
Docker – de A a Z – 10 – Demo Nginx no Docker
Docker e NGINX que tal? Uma excelente combinação que vou abordar, ainda que superficialmente em uma demo nesse vídeo. https://youtu.be/joJYBhG-cwY
Docker – de A a Z – 09 Docker For Windows
Pessoal, muita gente ainda tem dúvida sobre o Docker for Windows, aqui vai uma ajudinha para quem quer conhecer mais sobre o Docker for Windows. https://youtu.be/M4ZPSUw_RO8
Docker – de A a Z – 08 Amazon AWS EC2
Pessoal, aqui o papo já é sobre o setup de uma instância no EC2 da Amazon. https://youtu.be/YB6J4-MK1-k
Docker – de A a Z – 07 Microsof Azure
Pessoal, nesse vídeo vamos fazer o setup de uma máquina virtual com Docker no azure! https://youtu.be/lrGxTWimSr8
Docker – de A a Z – 06 – Docker Hub
Pessoal, aqui vamos entender um pouquinho como funciona o Docker Hub e como usá-lo. https://youtu.be/F-GJkcyrZR0
Docker – de A a Z – 04 – Instalação Docker no Ubuntu Server 16.04 LTS
Pessoal, já temos a máquina virtual com o SO, nos falta instalar o Docker, nesse vídeo vamos executar o procedimento de instalação do Docker no Ubuntu Server 16.04 LTS. https://youtu.be/44gecoWpUcs
Docker – de A a Z – 03 – Ubuntu Server 16.04 no VirtualBox
Nesse post vamos fazer o setup do Ubuntu Server 16.04 LTS na máquina virtual que criamos no vídeo anterior! https://youtu.be/aKqOYxZZJJA
Docker – de A a Z – 02 – Criando a máquina virtual com VirtualBox
Pessoal, nesse vídeo vamos criar a máquina virtual com VirtualBox. https://youtu.be/BfpOsraeT4A
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...
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...
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...
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...
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. É...
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...
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.
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...
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...
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...
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.
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...
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...
[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...
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,...
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...
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...
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....
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...
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...
[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...
[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...
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...
[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...
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...
[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...
#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]
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ê...
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
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...
O que eu uso?
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...
#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...
[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...
[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...
Conheça os detalhes da atualização Update 2 do Visual Studio 2013
http://support.microsoft.com/kb/2927432No link em purtuguês, temos uma lista com todas as features do Visual Studio 2013 Update 2. Fique ligado, tem muita coisa interessante!
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!
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...
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?
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...
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...
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...
[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...
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...
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....
[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...
[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...
[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...
[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...
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...
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...
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...
[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...
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...
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...
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...
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...
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...
[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...
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...
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...
[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...
Spring.Net – HandOn Vídeo – Injeção de Dependência
Olá, Nesse vídeo, temos o setup de uma nova solução, contendo um novo projeto console. Nela adicionamos as referências para o Spring.Net e realizamos criamos um exemplo bem básico de Injeção de Dependência. [youtube=http://www.youtube.com/watch?v=plnYdi3TDn8]
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...
[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 )
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 à...
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...
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...