Categoria: Uncategorized

  • Implementando o pattern Circuit Breaker com C# usando Polly

    Fala galera!

    Dando uma pausa nos posts sobre programação reativa, que voltarei na próxima postagem, tive de fazer uma correção em um código meu pois minha implementaÇão com Polly não estava adequada.

    Bom para quem não conhece o padrão pense no Circuit Breaker como os dijuntores de sua humilde residencia.

    Quando o circuito está fechado a energia passa tranquilamente. Este é o modo de operação normal.

    Quando há algum problema em seu sistema elétrico, melhor dizendo no da sua caa, os circuitos se abrem e a energia para de passar.

    Vocêdoe verificar o problema, fechar apenas um circuito, verificar que está ok e fechar os demais, ou constatar que o problema persiste e mante-los abertos.

    A mesma coisa acontece com o padrão Circuit Breaker. Vocêmonitora a ocorrencia de erros, após um limite vocêbre o circuito por um tempo de terminado e após este tempo é feita uma nov nova tentativa, e caso seja positiva o circuito é fechado novamente.

    Em resumo monitoramos um número de ocorrencias e caso o circuito abre retornamos uma excessão imediatamente não fazendo o cliente aguardar toda verificação de que o serviço consultado caiu.

    Pooly é uma bblioteca de resiliencia que permite criar diversos tipos de política como Retry, Circuit Breaker, Throtling entre outras.

    Seu uso é muito simples e demonstro isto no repositório: https://github.com/magoolation/Polly-CircuitBreaker

    O código é simples e auto explicativo por isto nÃo me prolongarei aqui, mas caso precisem de algum auxílio ou tenha sugestão de melhorias é só entrar em contato.

    PS: Para que o circuit breaker funcione adequeadamente é necessário que tenhamos uma instancia única da política e que façamos com que ela trate apenas as ecessões e casos que estejamos interessados, e esta foi minha falha na outra implementação.

    Até amanhã!

  • Um pouco mais sobre programação reativa em .NET

    Fala galera!

    Antes de compartilhar meu experimento achei válido compartilhar algumas coisas com você.

    Em primeiro lugar a documentação atualizada. Aqui é a classe Observable que é um ponto de partida para o estudo da programação reativa: https://docs.microsoft.com/en-us/previous-versions/dotnet/reactive-extensions/hh244252%28v%3dvs.103%29.

    Lembrando que o padrão Observer é um design pattern já conhecido e as Reactive Extensions, implementadas praticamente em qualquer linguagem moderna hoje, é uma abstração sobre este pattern d forma a tronar a criação, composição e consumo de fluxo de dados ainda mais fácil e elegante.

    Neste padrão temos dois atores, os Observables que são os fluxos de dados em si e fornecem as informções quedevem ser processadas, e os Observers que reagem aos fluxos de dados e executam as regras de negócio.

    Im Observer implementa um método OnNext que ;é chamado para cada elemento do Observable. Caso ocorra um erro é chamado o método OnError passando-se a excessão disparada. Já ao terminar o fluxo é chamado o OnCompleted.

    É realmente muito interessante o quanto o padrão, tão antigo e simples, trouxe para nós uma facilidade tão grande nos dias de hoj.

    Bons estudos.

    Até amanhã!

  • Revisitando a programação reativa em .NET

    Fala galera!

    Agora com o gt bem configurado, como disse no post anterior, pude publicar um experimento interessante que fiz para poder me aperfeiçoar no uso de programação concorrente em .NET.

    Desde que ganhamos o async await a programação de serviços que necessitavam de paralelismo, como hcamadas a APIs, I/O e comunicação em rede em geral s tornou muito fácil apesar de muita gente, eu inclusivo, ter demorado para entendr o seu real uso.

    Mas algo que se tornoucomum em meu dia desde que entrei no projeto atual foi o uso de programação reativa (Reactive Programming) com o uso da System.Reactive, seus tipos, e todo conjunto de regras que rodeiam os Observables e Observers.

    Para quem não conhece este paradigma ao invés d programarmos de forma imperativa chamando algo e aguardando e recebendo imediatamente o que solicitamos, seja lá o que imediatamente signifique entre milesegundos e minutos, na programação reativa trabalhamos com fluxos de dados que nos notificam esó então atuamos.

    Por exemplo podemos observar um evento de tap em um botão, neste momento solicitar dados em uma API, e só quando recebermos estes dados atualizarmos a interface do usuário.

    Como reatividade e paralelismo andam juntos com isto liberamos a thread principal para que nosso aplicativo não fique travado.

    Temos centenas de operadores que podem ser aplicados para filtrar, combinar, transformar e extrair mais informações destes fluxos e isto abre uma gama ainda maior de possibilidades.

    Mas novamente conhecer bem estes conceitos é o que faz vocêfazer um bom uso e ter real controle da sua aplicação.

    Na próxima postagem irei compartilhar o repositório e descrever quais foram minhas experiencias.

    Até amanhã!

  • Configurando corretamente o gestor de credenciais do git for Windows

    Fala galera!

    Apesar de no último post ter dito que não postergaria mais postagens isto acabou acontecendo por vários fatores, mas para compensar hoje teremos pelo menos dois, senão tres postagens bem úteis.

    A primeira diz respeito a eu não ter conseguido postar sexta e ontem. EStava trabalhando em um novo repositório de código mas infelizmente  me deparei com o problema de não conseguir subir o código por conflito nas credenciais entre minhas duas contas do github.

    Com o objetivo de dar um fim definitivo a esta bagunça em minha estação de trabalho me deparei com esta solução que comparilho aqui:

    https://community.atlassian.com/t5/Sourcetree-questions/Git-Credential-Manager-for-Windows-Popups/qaq-p/579905

    No caso são necessários dois comandos para que  o git entenda que vocêode ter mais de um repositório/conta em um mesmo serviço:

    • git config –global credential.helper manager
    • git config –global credential.useHttpPath true

    Feito isto o prompt de usuário e senhas se comportará de acordo.

    Espero ter ajudado.

    Até amanhã!

  • Repositórios privados ilimitados no github

    Fala galera!

    Estou com problemas no fornecimento de energia elétrica em casa mas estou aqui para cumprir o desafio.

    Não poderia deixar de comentar o anúncio de repositórios privados ilimitados no github para os planos free.

    Esta é uma grande notícia para pequenos times, startups, estudantes e outros que queiram conpartilhar codigo de forma privada.

    Até amanhã!

  • Interfaces e Classes abstratas

    Fala galera!
    É muito comum que ao desenvolvermos uma solução não nos atentemos que estamos nos repetindo, espalhando trechos de código seelhantes em diferentes partes.
    Nesta hora vale muito a pena fazermos um refactoring do código e torná-lo não só mais organizado mas também mantenível.
    Para isto costumamos nos basear em dois elementos:
    Interfaces;
    Classes abstratas;
    Mas você sabe diferenciar quando devemos usar uma ou outra?
    As interfaces são contratos que devem ser seguidos pelas clases que as implementam, ou seja, quando digo que uma classe implementa determinada interface estou dizendo que ela segue um determinado contrato e terá os membros públicos definidos pela interface.
    Uma boa prática em nomear interfaces é utilizar adjetivos como ICloneable, IReachable, IComparable etc.
    Um problema com as interfaces e que deverá ser solucionado no C# 8.0 é a implementação padrão para membros da interface. Isto permitirá que adicionemos novos membros sem quebrar código legado que se baseia nesta interface e não implementa estes membros.
    Já as classes abstratas podem possuir tanto membros abstratos que devem ser implementados nas classes herdadas como também implementações padrão.
    Uma boa prática de nomenclatura é utilizar o prefixo ou sufixo Base para estas classes e devemos ter muita atenção nos comportamentos já implementados pois caso precisemos mudá-los podemos introduzir efeitos colaterais nas classes descendentes.
    Costumo usar classes abstratas em situações em que quero impor um fluxo de chamadas introduzindo flexibilidade no que stá sendo feito, como adição d log, captura de informações, limpeza de estado entre outros.
    Em um próximo post devo comentar melhor isto e como podemos melhorar nosso código aplicando estas técnicas.
    Até a amanhã!

  • E pela terceira vez renovei meu título de Microsoft MVP

    Fala galera!

    No último domingo, dia primeiro de julho, foi iniciado um novo ciclo do programa Microsoft MVP o qual tenho a honra de fazer parte desde 2016.

    Para quem não conhece o programa trata-se de uma iniciativa da Microsoft, que já tem 25 anos, onde  membros da comunidade que tem contribuições relevantes  do ponto de vista do compartilhamento de conhecimentos, recebe este premio de reconhecimento e alguns benefícios, apesar de o melhor deles  ser realmente  a integração com profissionais fantásticos e um contato mais direto com as equipes de produto.

    Caso queira conhecer mais sobre o programa basta acessar https://mvp.microsoft.com.

    Mas por que isto é tão importante pra mim?

    Lembro que em 2008 foi quando tive o primeiro contato e real interesse com comunidades. Havia recém sido fundado o grupo .NET Archtects e em 2009 foi a primeira vez que ouvi falar do programa.

    Desde então  esta galera vem me inspirando. Achava que eles estavam em  um outro nível, mas fazia meu melhor para que  da mesma forma que eles, eu conseguisse  impactar e inspirar  pessoas  que quisessem entrar ou até mesmo  crescer dentro da área de desenvolvimento.

    E este trabalho trouxe bons frutos, como citei acima.

    Nem preciso dizer que se cheguei onde cheguei hoje  com certeza  é  resultado do meu trabalho, mas algumas coisas  deram uma força e o programa realmente me abriu diversas portas.

    Fica aqui registrado então o meu compromisso de continuar  sendo  referencia e ajudando o máximo de pessoas, o meu parabéns aos colegas que também renovaram e aos novos integrantes do time, e a voce que está lendo este post e  tem me motivado e confiado em meu trabalho.

    Até a próxima!

  • Erro ao compilar uma biblioteca PCL após uma migração para .NET Standard

    Fala galera!

    Estamos migrando nosso projeto para .NET Standard 2.0 mas tive de fazer uma correção na branch principal onde ainda estamos com o projeto em PCL.

    Após abrir o projeto e tentar compilá-lo recebia uma mensagem que dizia que não estava referenciando o profile PCL na sessÃo Frameworks  do Project.json.

    Mas espera ai isto é quando estamos usando .NET Core e/ou .NET Standard e não PCL. O que está acontecendo?

    Depois de muita pesquisa e dor de cabeça meu amigo Fabrício teve a seguinte idéia:

    Vá em Tools, Options, Package e mude o padrão para Package Reference, dê OK e volte novamente para Package.config. E acharam.

    Provavelmente há algum bug que reseta esta configuração e não volta ao normal.

    Obrigado Fabrício, espero que isto ajude voces  também.

    Até próxima!

  • Microsoft + GitHub: o futuro do desenvolvimento de software

    Fala galera!

    Hoje foi confirmada a aquisição por parte da Microsoft da plataforma GitHub.

    Se não sabe do que se trata provavelmente voce foi congelado junto com o Capitão América e  não sabe  o ue aconteceu na industria do software nos últimos anos.

    O GitHub é a maior plataforma de compartilhamento de códigos do planeta com mais de 80 milhões de repositórios e 27 milhões de usuários.

    Utilizado tanto por grandes projetos open source como por  gigantes da industria o GitHub revolucionou a forma como o código fonte era gerenciado pelas equipes tornando o so do git ainda mais fácil.

    Esta aquisições não só mostra para o mercado a real importância do GitHub mas também;em a  preocupação da Microsoft em estar. conectada aos desenvolvedores e oferecer em todas as plataformas a excelência em serviços.

    Muito está por vir com esta integração e apesar de muitos descrentes começarem a abandonar  a plataforma acredito  ainda mais na sua continuidade como um espaço livre mas com a possibilidade de. expansão com os serviços da gigante de Redmond.

    Vamos aguardar!

    Até a próxima!

     

  • MVPConf 2018: eu fui!

    Fala galera!

     

    Aconteceu nos dias 7 e 8 de  abril  a primeira edição do MVPConf o maior evento organizado e executado por MVPS da América Latina.

     

    Nestes dois  dias de evento foi apresentado  muito conteúdo relacionado a tecnologias Microsoft e open source, nuvem, containers, Visual Studio e muito mais.

     

    Tive a oportunidade de falar tanto da acessibilidade no Visual Studio quanto  sobre  projetos Xamarin na vida real.

     

    Mais informações no site http://www.mvpconf.com.br

     

    Até a próxima!