Durante essa jornada profissional produzi muita coisa, dediquei muito do meu tempo livre ao estudo e criação de soluções que efetivamente fizessem sentido e resolvessem problemas do meu dia-a-dia e dos projetos do qual participo. Sem sombra de dúvidas meu maior empenho nos últimos 15 anos foi dado ao projeto de arquitetura Oragon Architecture. Esse projeto viveu de 2005 a 2014. A cada novo problema, nova dificuldade, a cada nova necessidade, o projeto ganhava novos recurso, novas features. Isso permitiu-me criar uma robusta arquitetura de serviços baseada no .NET Framework. Mas eu mesmo sucumbi às críticas e resolvi parar o projeto por um tempo. É imperativo rever seu rumo e repensar sua estratégia.

Alguns dos inúmeros projetos que criei puderam ser publicados como Open Source. Aqui, nessa lista estão alguns dos quais fui criador, mantenedor ou eventualmente contribuí. É importante ressaltar que cada novo projeto vira um filho, que precisa ser cuidado, precisa ser mantido, e isso demanda tempo e dedicação, coisas que são casa vez mais escassas.

Espero que goste desse espaço, tem muita coisa, que fiz com muito carinho!

Projetos

Projetos ativos

Projetos que estão em desenvolvimento e são mantidos. Quer colaborar com algum desses projetos? Entre em contato!

RestHeart

Docker premade stack

The Web API for MongoDB - Premade Docker Compose Stack

RestHeart é um projeto muito legal pois cria uma camada Web pronta para usarmos MongoDB com um endpoint http(s).

MongoDB

RESTHeart is the leading Web API for MongoDB. It has been tested with MongoDB from release 2.6 to 3.4

Just start it and the REST API is ready to use, opening the data to the Web.

Web and Mobile applications can directly use the database via REST HTTP API calls: check our AngularJs notes example application.

Fast & Light

High throughput check the performance tests.

Lightweight ~10Mb footprint, low RAM usage, starts in ~1 sec.

Horizontally Scalable with Stateless Architecture and full support for MongoDB replica sets and shards.

µService: it does one thing and it does it well.

Rapid Dev

No server side development is required in most of the cases for your web and mobile applications.

The Setup is simple with convention over configuration approach; Docker Container and Vagrant Box are available.

Access Control and Schema Checkare provided out of the box.

Prod

Production ready.

High quality Documentation and active development community.

Severe Unit and Integration test suite, Code Check and Continuous Integration process.

Commercial Support available from SoftInstigate, the company behind RESTHeart.

O stack que criei facilita a compreensão sobre como usar o produto e compor um stack que atenda sua demanda de testes do produto.

Stacks

Os premade stacks ou stacks pró-moldados, são receitas para composição de serviços. Geralmente com base no Docker Compose, esses stacks já vêm configurados e prontos para uso. Montar esses stacks permite que você tenha um produto configurado rodando em segundos, eliminando a fricção de configuração inicial. A maioria dos stacks provê configurações para testes e adoção, mas não para ambientes produtivos. A intenção de não entregar stacks prontos para irem para produção é garantir que em algum momento você irá, de fato, estudar e percorrer todo o caminho necessário para colocar seu próprio stack em produção.

A intenção não é eliminar a curva de aprendizado, mas torná-las menor para que você teste, acreditando que você terá a curva de aprendizado na medida que gostar do produto ou serviço.

Nesses stacks basta-se realizar um git clone e chamar o docker-compose para que seu stack esteja no ar, pronto para ajudar na sua descoberta sobre uma tecnologia, produto ou padrão novo.

O papel desses stacks é mostrar que composição de serviços não é algo tão complexo. Ao mesmo tempo esses stacks podem servir de ponto de partida na sua jornada rumo a criação de ambientes produtivos .

Docker Gallery

Github Organization with stacks and dockerfiles

DockerFiles, Imagens and Stacks

github.com/docker-gallery aglutina uma série de projetos para ajudar na centralização de conteúdos exclusivos sobre Docker. São DockerFiles, Imagens e Stacks.

Produtos e setups Standalone

Automação

Yeoman Gen for Node API's with TypeScript, Docker and more

Yeoman generator

(((((NodeJS + TypeScript + TSLint + Restify) + MongoDB) + Docker) + VSCode ) + Yeoman)

Esse é um gerador de código Yeoman, destinado à criação de API’s NodeJS usando TypeScript. A integração do resultado com VSCode permite debug de typescript no container, entre muitas outras coisas legais. No post (((((NodeJS + TypeScript + TSLint + Restify) + MongoDB) + Docker) + VSCode ) + Yeoman) = Uma experiência de desenvolvimento incrível! eu abordo essas features e falo mais sobre esse projeto.

EnterpriseApplicationLog

Docker premade stack

#rabbitMQ #elasticsearch #logstash #kibana #dockerStack #elkstack for Enterprise Logging

Falar de escalabilidade sem se preocupar com Logs é pra lá de um ato insano, é um suicídio tecnológico. Esse é um stack open source que suporta a centralização de logs estruturados em json em um dashboard que permite consulta e gestão de forma transparente e incrível.

Summer .NET

Github Repository / .NET Project

Spring.NET port for .NET Standard

Um dos projetos que mais fez parte das minhas soluções na última década é sem sombra de dúvidas o Spring.NET. Não só pelo seu modelo de configuração, mas pelo mindset sobre como fazer IoC, DI e AOP. O Summer.NET surge como um incentivo para que a comunidade que mantém o projeto possa dialogar e ver que é possível, com pouco esforço, portar o projeto com pouso esforço. Os principais projetos são portados, como o Spring.Core e Spring.Aop, abrindo então precedente para um novo rumo no projeto oficial. Pela falta de engajamento da pivotal, eu pretendo seguir com esse fork, e assim oferecer um modelo consistente para a utilização do Spring.NET no .NET Core e consequentemente no Linux, suportando aplicações .NET Console e Web.

NGINX PageSpeed

DockerFile + Image

Custom NGINX on steroids

NGINX é um dos principais webservers no mercado, tomando espaço de apache, IIS e outros. Desponta como uma robusta solução para altas cargas de trabalho. Esse projeto consiste em uma imagem Docker com uma versão customizada do NGINX. Para quem não sabe, para adicionar plugins, diferente dos demais exemplos, o nginx precisa ser recompilado por completo e isso exige algum conhecimento específico. Nessa repaginação ele conta com diversos plugins para facilitar a vida de quem quer usá-lo com proxy reverso para seus containers, servindo de entrypoint seja na porta 80, 443 ou qualquer outra. Com os plugins ele ganha algumas capacidades muito relevantes para quem precisa compartilhar um mesmo ambiente com diversos sites, domínios e protocolos.

  • Google PageSpeed NGINX Module | Um pacote de otimizações desenvolvido com tecnologia e experiência do google, permitindo realizar otimizações out of the box, direto no webserver. Coisas como refatoração de CSS, JS, imagens, e muito mais.
  • ngx_http_substitutions_filter_module | Permite realizar substituições nos conteúdos entregues, direto no webserver. Isso é excelente para resolver questões como redirecionamentos que precisam ser realizados e projetos ou produtos dos quais não temos a autonomia para realizar alterações estruturais.
  • nginx-rtmp-module | Permite a transmissão de vídeos direto no webserver\
  • stream | Permite usar o NGINX como proxy para serviços que não necessariamente sejam HTTP, se comportando com um proxy PORTA/PORTA comum.

Ideias

...precisam sair do papel

Não é fácil ter uma vida agitada no trabalho e me dedicar à comunidade. A possibilidade de ajudar novatos que daqui a pouco serão nossos companheiros nas empresas e times aliado às figuras inspiradoras e feedbacks incríveis fazem com que não percamos o pique. Dá trabalho, custa muito tempo, mas é extremamente gratificante.

Há muita coisa para ser feita, e aqui vou listar algumas ideias que talvez possam inspirar projetos, que hoje, não tenho condições de começar, visto que alcancei o limite de minha capacidade produtiva.

Minio Web File System Manager

File System Manager for ASP.NET MVC apps

Publicação: 08/MAR/2018

Uma dll, um pacote nuget, com comportamento semelhante ao do dashboard do hangfire, no entanto a funcionalidade entregue para a sua app é um gerenciador de file system que permite gerenciar um FS físico ou um Minio/Amazon S3, talvez até o concorrente do Azure.

 

Com exemplos rodando no docker!

Serverless API Hub

Stack Serverless + API Management

Publicação: 08/MAR/2018

Que tal usar OpenFaas ou IronFunctions em conjunto com um robusto API Manager. Contemplando:

  • Publisher Portal
  • Store Portal
  • Gateway

Poderia usar o WSO2 API Manager, por exemplo, como solução.

 

Tudo rodando no docker!

WebApi Over Amqp (RabbitMQ)

Web API's que falam com o backend via AMQP

Publicação: 08/MAR/2018

Implementação de Controllers ou Middlewares que utilizam um message broker como mediador na comunicação entre API e serviços de forma escalável e sem a necessidade de service discovery. Possibilitando RPC ou Fire and Forget.

Com exemplos rodando no docker!

ASP.NET Core Identity Servers

Stacks completos com os principais Identity Servers

Publicação: 08/MAR/2018

ASP.NET Core com:

Com implementações para:

  • SPA + WebAPI com JWT
  • MVC

Tudo rodando no docker!

Retired / Deprecated / Paused

Projetos aposentados, descontinuados ou simplesmente sem previsão de retorno.

Todo projeto open source precisa esforço recorrente, seja para realizar algum update ou uma adequação às features mais recentes da linguagem ou framework. Sempre há uma demanda ali ou acolá, por isso é difícil cuidar de muitos projetos, então na medida que aposento um projeto sei que vou ter tempo para começar outro.

Oragon Architecture

Founder

SOA Application Framework over Spring .NET

Oragon Architecture foi um projeto que comecei a desenvolver assim que cheguei ao Rio em 2005/2006 e por mais de 10 anos incrementei e implantei em diversos projetos .NET como meio de agilizar o processo de desenvolvimento por meio de padrões arquiteturais que eliminavam decisões complexas do desenvolvimento de serviços de negócio, reduzindo complexidade inerente à algumas tecnologias abordadas no projeto. Com os contextos, garantia a liberação de recursos, a definição sobre recursos dependentes e mantinha, de forma coesa, toda a gestão de transações, alocação e liberação de recursos, gestão de exceptions e tratamento de erro centralizado, de forma a permitir um desenvolvimento fluido e altamente produtivo.

Com o Spring .NET como alicerce da arquitetura, conectar padrões arquiteturais a métodos e serviços pré-existentes se tornou algo simples, oferecendo uma rica infraestrutura para que tomada de decisões pudesse ser adiada para o momento da implantação. Decisões como quais elementos precisam ser distribuídos e escalados dinamicamente, deixam de ser uma preocupação do desenvolvimento, para se tornar preocupação á respeito de como configurar adequadamente o ambiente de produção. Esses ganhos oferecem imensa capacidade de mudança, enriquecendo a discussão e a arquitetura.

Em função da grande fragmentação causada pelos forks, não há uma boa consistência entre as versões, cada fork caminhou em uma direção que não necessariamente condiz com os interesses do projeto, mas tais forks foram criados para permitir esse distanciamento. Ao final, tenho um problema com a distância e as features de cada versão. Esse é o motivo que fará com que vocês não encontrem uma versão consistente no github, ou uma versão minimalista em relação ao que é detalhado nos posts.

18/03/2018 – Com os elementos fundamentais da arquitetura dando o ar da graça no .NET Core/Standard, como a recente release 5.1.0 do NHibernate, o port do Spring .NET e minhas descobertas a respeito do AsyncLocal<T>, é possível começar a pensar em retomar o projeto. Ainda há elementos a serem repensados, no entanto é possível vislumbrar um horizonte minimamente viável. Não estou certo se o esforço é válido, mas de certo que penso a respeito quase que diariamente.

RabbitMQ.Alternative.ServiceModel

Founder

RabbitMQ Custom Binding for WCF (Fork) to solve impedance to improve reliability on fire and forget pattern.

Durante a restruturação da arquitetura do projeto da Seguradora Líder (DPVAT), percebi que as integrações tinham um grande problema de contenção e demandas de eventual indisponibilidade atrapalhavam significativamente o projeto. Ao usar o binding nativo do RabbitMQ para WCF fui obrigado a rever a implementação e realizar adequações para permitir o trabalho com filas no modelo Fire and Forget garantindo a confiabilidade da integração.

O projeto foi feito como um fork da versão original do binding para oferecer essa feature.

Descontinuado em função da empresa ter criado um fork e seguido em frente evoluindo em outra direção. O baixo número de downloads não justifica sua manutenção/continuidade.